<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://more.zites.net" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>more.zites.net - Less isn&#039;t More...</title>
 <link>http://more.zites.net/frontpage</link>
 <description>none</description>
 <language>en</language>
<item>
 <title>About using git to maintain a drupal module...</title>
 <link>http://more.zites.net/git_drupal_contrib_cvs</link>
 <description>&lt;p&gt;Some months ago I gave &lt;a href=&quot;http://git-scm.com/&quot;&gt;git&lt;/a&gt; a first try for developing some stacked core patches. I quickly get used to it and to its nice &lt;a href=&quot;http://www.siebert-wd.de/articles/2008/04/26/git-magie/&quot;&gt;features (german)&lt;/a&gt;. Luckily its SVN integration is &lt;a href=&quot;http://flavio.castelli.name/howto_use_git_with_svn&quot;&gt;really nice&lt;/a&gt; and simple to use so GIT is even a fine replacement for the usual SVN client. Unfortunately for CVS things are much worse.. :( Poor cvs!&lt;/p&gt;
&lt;h3&gt;First tries..&lt;/h3&gt;
&lt;p&gt;I decided to don&#039;t go back to CVS for maintaining drupal modules. First I tried using the public GIT mirror of the whole drupal CVS from the French drupal community, however I quickly noted that it was broken for the &lt;a href=&quot;http://drupal.org/project/rules&quot;&gt;rules module&lt;/a&gt;, so I tried to set up my on mirror. I started using Sam Boyer&#039;s &lt;a href=&quot;http://github.com/sdboyer/drupal-git-scripts&quot;&gt;scripts&lt;/a&gt;, however I had some misc small troubles with them, but more important those scripts copy the whole drupal CVS - but I didn&#039;t like to waste ~6 gigs of disk space and the time to sync all the unneeded stuff. So I ended writing my own script based on the instructions in the drupal handbook for &lt;a href=&quot;http://drupal.org/node/288873&quot;&gt;maintaining a module with git&lt;/a&gt; and Sam&#039;s script. After some weeks going back and forth I finally ended up with something useful, so here are my experiences:&lt;/p&gt;
&lt;h3&gt;What is it about?&lt;/h3&gt;
&lt;p&gt;Currently I&#039;ve set the script up to export the drupal CVS of some of my modules to GIT - its automatically pushing to my &lt;a href=&quot;http://github.com/fago&quot;&gt;github&lt;/a&gt; account, which is quite convenient. It syncs only the really needed modules using rsync - which is an important step as its greatly speeding up cvsps when exporting from CVS. The nice thing is that it doesn&#039;t overwrite any changes not yet in CVS, so I can use the same git repository on github to develop new stuff and export to CVS later on.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://more.zites.net/git_drupal_contrib_cvs&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://more.zites.net/git_drupal_contrib_cvs#comments</comments>
 <category domain="http://more.zites.net/taxonomy/term/6">drupal</category>
 <category domain="http://more.zites.net/taxonomy/term/74">git</category>
 <category domain="http://more.zites.net/taxonomy/term/44">planet</category>
 <pubDate>Wed, 06 Jan 2010 21:50:43 +0100</pubDate>
 <dc:creator>fago</dc:creator>
 <guid isPermaLink="false">12355 at http://more.zites.net</guid>
</item>
<item>
 <title>Are entities drupal&#039;s new nodes?</title>
 <link>http://more.zites.net/entities_drupals_new_nodes</link>
 <description>With drupal 7 the concept of an entity gets introduced in drupal, thus nodes, comments, users, terms - all these are drupal&#039;s entities. Most important the also new field API is able to support any entity!
So how will this affect the drupal landscape?&lt;p&gt;&lt;a href=&quot;http://more.zites.net/entities_drupals_new_nodes&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://more.zites.net/entities_drupals_new_nodes#comments</comments>
 <category domain="http://more.zites.net/taxonomy/term/6">drupal</category>
 <category domain="http://more.zites.net/taxonomy/term/44">planet</category>
 <pubDate>Fri, 06 Nov 2009 12:07:51 +0100</pubDate>
 <dc:creator>fago</dc:creator>
 <guid isPermaLink="false">12099 at http://more.zites.net</guid>
</item>
<item>
 <title>Rules session @Drupalcon Paris</title>
 <link>http://more.zites.net/rules_drupalcon_paris</link>
 <description>Better late as never, so here are the slides from the rules presentation at the drupalcon. I&#039;m also attaching the two features which were built with rules during the presention:&lt;p&gt;&lt;a href=&quot;http://more.zites.net/rules_drupalcon_paris&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://more.zites.net/rules_drupalcon_paris#comments</comments>
 <category domain="http://more.zites.net/taxonomy/term/47">drupalcon</category>
 <category domain="http://more.zites.net/taxonomy/term/55">rules</category>
 <enclosure url="http://more.zites.net/morefiles/workflow_basic-6.x-1.0.tar.gz" length="2934" type="application/octet-stream" />
 <pubDate>Sun, 04 Oct 2009 16:13:01 +0200</pubDate>
 <dc:creator>fago</dc:creator>
 <guid isPermaLink="false">11946 at http://more.zites.net</guid>
</item>
<item>
 <title>I&#039;m on vacation...</title>
 <link>http://more.zites.net/node/11945</link>
 <description>from oct 5th till 27th - thus don&#039;t expect any responses from me during that time!</description>
 <pubDate>Sun, 04 Oct 2009 15:01:09 +0200</pubDate>
 <dc:creator>fago</dc:creator>
 <guid isPermaLink="false">11945 at http://more.zites.net</guid>
</item>
<item>
 <title>Benchmarking Extendable Object Faces</title>
 <link>http://more.zites.net/benchmarking_extendable_object_faces</link>
 <description>&lt;p&gt;I&#039;ve started with &lt;a href=&quot;http://drupal.org/user/26398&quot;&gt;crell&lt;/a&gt;&#039;s results when benchmarking &lt;a href=&quot;http://www.garfieldtech.com/blog/magic-benchmarks&quot;&gt;magic&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://more.zites.net/benchmarking_extendable_object_faces&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://more.zites.net/benchmarking_extendable_object_faces#comments</comments>
 <category domain="http://more.zites.net/taxonomy/term/6">drupal</category>
 <category domain="http://more.zites.net/taxonomy/term/73">Extendable Object Faces</category>
 <pubDate>Mon, 06 Jul 2009 21:47:29 +0200</pubDate>
 <dc:creator>fago</dc:creator>
 <guid isPermaLink="false">11536 at http://more.zites.net</guid>
</item>
<item>
 <title>Introducing the concept of Extendable Object Faces (API)</title>
 <link>http://more.zites.net/introducing_extendable_object_faces</link>
 <description>&lt;p&gt;Preliminary Warning:&lt;br /&gt;
&quot;&lt;em&gt;If you&#039;re afraid of classes and objects in PHP, run away now.&lt;/em&gt;&quot; - jpetso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update: For simplicity the API has been changed so that all faces are incorporated, thus modules have to care about naming collisions theirself. Also in the meantime file inclusions support has been added.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While figuring out a object oriented design for the &lt;a href=&quot;http://drupal.org/project/rules&quot;&gt;rules&lt;/a&gt; engine I recognized the need for a possibility to allow modules extend objects in various places. Thus I developed a generic concept which does just that: Allowing modules to extend objects. I called the concept &quot;Extendable Object Faces&quot;, which basically implements the Facade pattern in a modular way. &lt;/p&gt;
&lt;p&gt;So let&#039;s have a closer look at that. A module that wants to extend an object may only do so on top of a defined interface, preventing uncontrolled growing objects. Thus one can write some code, define an interface for it and attach it to potential any extendable object out there. Then other modules have an easy way to test whether some object has a functionality in place by checking for the availability of a certain interface.&lt;br /&gt;
To use that functionality the caller has to use the right &quot;Face&quot; of the object - corresponding to a certain interface. This approach using different &quot;Object Faces&quot; make sure there can&#039;t be conflicting method names, so modules don&#039;t need to prefix their methods with the module&#039;s name which would result in ugly and not readable code.&lt;/p&gt;
&lt;p&gt;I&#039;ve already implemented an initial version of the &lt;a href=&quot;http://drupal.org/project/faces&quot;&gt;Extendable Object Faces&lt;/a&gt; API.  As of now you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extend an object by providing an Extender Class&lt;/li&gt;
&lt;li&gt;Extend an object simply by some functions, each implementing a method
&lt;li&gt;
&lt;li&gt;Override any dynamically added method by providing functions or an Extender Class&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So apart from &quot;allowing modules to extend an object&quot;, this also allows one to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Easily lazy load huge parts of an objects implementation, invisible for the caller.&lt;/li&gt;
&lt;li&gt;Allow modules to dynamically alter an implementation by using overriding.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hence such an Extended Object can also serve as a clean abstraction for module provided callbacks!&lt;/p&gt;
&lt;p&gt;Enough talk, let&#039;s show how it works:&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;interface &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FacesTestInterface &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp; function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;isWorking&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$prefix&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt; * Extendable Class&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FacesTestElement &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FacesExtendable &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//Your code here..&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This code provides the class for the Extendable Object and already defines an interface, which modules may implement. So let&#039;s extend it with an Extender Class.&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt; * Extender Class&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FacesTestExtender &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FacesExtender &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;implements &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FacesTestInterface &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp; function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;isWorking&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$prefix&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$prefix &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;That&#039;s it. Now you can use the face!&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $element &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FacesTestElement&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$element&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;name &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;test&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$element&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;extendByClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(array(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;FacesTestInterface&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;FacesTestExtender&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Now use it.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;print &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$element&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;face&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;FacesTestInterface&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;isWorking&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;Name:&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// This prints &quot;Name:test&quot;.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
As you see, one has to use the face to be able to use the added method - so potential name collisions are avoided. However the Extendable Class can define so called incorporated faces, which are built in the Extendable Object as soon as a module provides an implementation:&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt; * New extendable Class&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FacesTestElement &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FacesExtendable &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp; public function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getIncorporatedFaces&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return array(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;FacesTestInterface&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
So you can use it that way, once extended:&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;print &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$element&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;isWorking&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;Name:&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
You can find more examples in the &lt;a href=&quot;http://cvs.drupal.org/viewvc.py/drupal/contributions/modules/faces/faces.test?revision=1.1.2.1&amp;amp;view=markup&amp;amp;pathrev=DRUPAL-6--1&quot;&gt;simpletests&lt;/a&gt; I&#039;ve written. Also checkout the benchmarks I&#039;ve run.&lt;/p&gt;
&lt;p&gt;So what&#039;s missing? Basically the implementation is complete and working fine. Though feedback and suggestions are very welcome! However currently the code doesn&#039;t deal with including code where the implementation can reside (lazy loading), though for drupal 7 that is already solved by the code registry (just add one call to drupal_function_exists()). For drupal 6 I think about adding the possibility to specify include files per added interface.&lt;/p&gt;
&lt;h2&gt;Dreaming...&lt;/h2&gt;
&lt;p&gt;If we would have an object oriented &quot;Data API&quot; in drupal core, this could serve as a way to let modules extend those objects. So instead of writing node-centric code code could would be written in a generic way - attachable to potentially each of those data objects (users, comments, terms). Having such generic code would allow us to finally end the &quot;Everything should be a node&quot; debate. Apart from that this would help us to easily lazy load big chunks of code, just exploiting the code registry!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://more.zites.net/introducing_extendable_object_faces&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://more.zites.net/introducing_extendable_object_faces#comments</comments>
 <category domain="http://more.zites.net/taxonomy/term/6">drupal</category>
 <category domain="http://more.zites.net/taxonomy/term/73">Extendable Object Faces</category>
 <category domain="http://more.zites.net/taxonomy/term/44">planet</category>
 <pubDate>Mon, 06 Jul 2009 20:29:21 +0200</pubDate>
 <dc:creator>fago</dc:creator>
 <guid isPermaLink="false">11535 at http://more.zites.net</guid>
</item>
<item>
 <title>Reactive rules for drupal have grown-up!</title>
 <link>http://more.zites.net/rules/reactive_rules_for_drupal_have_grown_up</link>
 <description>&lt;p&gt;Finally, after over 1 year of development the &lt;a href=&quot;http://drupal.org/project/rules&quot;&gt;rules&lt;/a&gt; module has reached the &lt;b&gt;1.0&lt;/b&gt; version! You can download it from the &lt;a href=&quot;http://drupal.org/project/rules&quot;&gt;project page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Reactive rules?&lt;/u&gt;&lt;br /&gt;
Reactive rules (or ECA-rules) are rules triggered upon a given event. This allows one to &lt;a href=&quot;http://drupal.org/node/298480&quot;&gt;conditionally fire actions&lt;/a&gt; based on arbitrary events. As modules can provide further conditions, actions and events this enables site builders to automate a lot of things using reactive rules! As of now &lt;a href=&quot;http://groups.drupal.org/node/10270/rules-modules&quot;&gt;a lot of&lt;/a&gt; popular drupal modules provide already rules integration: &lt;a href=&quot;http://drupal.org/project/cck&quot;&gt;CCK&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/project/token&quot;&gt;Token&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/project/flag&quot;&gt;Flag&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/project/content_profile&quot;&gt;Content Profile&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/project/content_access&quot;&gt;Content Access&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/project/views_bulk_operations&quot;&gt;ViewsBulkOperations&lt;/a&gt; and many more.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Features?&lt;/u&gt;&lt;br /&gt;
The modules comes with a bunch of useful features, e.g. a flexible &lt;i&gt;input evaluation system&lt;/i&gt; that allows to use token replacements or even PHP evaluation in your rules. To ease the management of rules the module supports &lt;i&gt;tagging&lt;/i&gt; of rules as well as &lt;i&gt;Import/Export&lt;/i&gt;. Often used behaviour can be put into &lt;i&gt;Rule-Sets&lt;/i&gt; and is easily invoked by provided actions. Not enough, the execution of those Rule-Sets can be scheduled easily with help of the provided action, thus providing a powerful &lt;i&gt;scheduling system&lt;/i&gt;, which allows you to schedule arbitrary tasks!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://more.zites.net/morefiles/rules-sceenshot.png&quot; alt=&quot;screenshot&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;It&#039;s finally grown-up?&lt;/u&gt;&lt;br /&gt;
Rules is already stable for quite a time, however I didn&#039;t consider it to be complete. During the last months I added missing important features, fixed bugs and translation issues and completed the documentation! While there was quite a bunch of useful &lt;a href=&quot;http://drupal.org/node/298486&quot;&gt;developer documentation&lt;/a&gt; for a while, now there is also a complete &lt;a href=&quot;http://drupal.org/node/299425&quot;&gt;hook reference&lt;/a&gt; in the doxygen format.&lt;/p&gt;
&lt;p&gt;So it&#039;s grown up, but it&#039;s not (yet) perfect. So what comes next?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://more.zites.net/rules/reactive_rules_for_drupal_have_grown_up&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://more.zites.net/rules/reactive_rules_for_drupal_have_grown_up#comments</comments>
 <category domain="http://more.zites.net/taxonomy/term/6">drupal</category>
 <category domain="http://more.zites.net/taxonomy/term/44">planet</category>
 <category domain="http://more.zites.net/taxonomy/term/55">rules</category>
 <category domain="http://more.zites.net/taxonomy/term/71">services</category>
 <category domain="http://more.zites.net/soc">soc</category>
 <pubDate>Mon, 18 May 2009 15:12:23 +0200</pubDate>
 <dc:creator>fago</dc:creator>
 <guid isPermaLink="false">11345 at http://more.zites.net</guid>
</item>
<item>
 <title>Rules 1.0-rc1 is out!</title>
 <link>http://more.zites.net/rules_1.0_rc1_is_out%21</link>
 <description>I&#039;ve just released the first release candidate for rules 1.0. Read more at groups.drupal.org!</description>
 <comments>http://more.zites.net/rules_1.0_rc1_is_out%21#comments</comments>
 <category domain="http://more.zites.net/taxonomy/term/6">drupal</category>
 <category domain="http://more.zites.net/taxonomy/term/55">rules</category>
 <pubDate>Mon, 20 Apr 2009 15:11:51 +0200</pubDate>
 <dc:creator>fago</dc:creator>
 <guid isPermaLink="false">11215 at http://more.zites.net</guid>
</item>
<item>
 <title>Flag module 6.x-1.0 shipping with rules integration!</title>
 <link>http://more.zites.net/rules/flag_1.0_shipping_with_rules_integration</link>
 <description>&lt;p&gt;Finally the &lt;a href=&quot;http://drupal.org/project/flag&quot;&gt;flag&lt;/a&gt; module got released - a really useful module and known as the successor of the previous &quot;Views bookmarks&quot; module. The project page says:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;q&gt;Flag is a flexible flagging system that is completely customizable by the administrator. Using this module, the site administrator can provide any number of flags for nodes, comments, or users. Some possibilities include bookmarks, marking important, friends, or flag as offensive. With extensive views integration, you can create custom lists of popular content or keep tabs on important content.&lt;/q&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But even better the 1.0 (and 1.1)  release is shipping with extensive &lt;a href=&quot;http://drupal.org/project/rules&quot;&gt;rules&lt;/a&gt; integration. So once you have installed both modules you can create flags and use rules to add some behaviour to them, e.g. you can react once a flag is &quot;flagged&quot; or &quot;unflagged&quot; and send mail to the content node&#039;s author, unpublish it, change the content&#039;s access settings - or whatever you have actions and conditions for!&lt;br /&gt;
Then the module also provides actions for flagging or unflagging flags, checking the flag count in case of global flags and even to &quot;Trim flags&quot;, which allows you to restrict the number of flagged items. This way you could even create simple queues. Of course there also conditions to check whether a flag is flagged and again in case of a global flag you can check the flagging count. Amazing!&lt;/p&gt;
&lt;p&gt;Also the flag module comes with a bunch of useful settings, so you can configure the flag to have a confirmation form or to just work with an AJAX link. Together with the powerful rules integration one could implement a lot of useful stuff - want a custom link with custom permissions to publish a content node? Just use a flag and an appropriate rule!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://more.zites.net/rules/flag_1.0_shipping_with_rules_integration&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://more.zites.net/rules/flag_1.0_shipping_with_rules_integration#comments</comments>
 <category domain="http://more.zites.net/taxonomy/term/72">flag</category>
 <category domain="http://more.zites.net/taxonomy/term/44">planet</category>
 <category domain="http://more.zites.net/taxonomy/term/55">rules</category>
 <pubDate>Wed, 18 Mar 2009 16:38:18 +0100</pubDate>
 <dc:creator>fago</dc:creator>
 <guid isPermaLink="false">11011 at http://more.zites.net</guid>
</item>
<item>
 <title>Bringing rules to the next level!</title>
 <link>http://more.zites.net/bringing_rules_to_the_next_level</link>
 <description>While I&#039;ve been working on the flag module&#039;s rules integration and getting the 1.0 release out, I&#039;ve also fixed the details of my master thesis.
I am happy to announce to further enhance rules during my thesis. The main feature I&#039;m going to work on is allowing rules to work with remote sites and content. I&#039;m going build client and server-side web service support, so that several drupal sites can talk to each other. Furthermore I&#039;m going to make it possible to invoke arbitrary SOAP-based web-services out there, maybe also others. Perhaps the right way to do achieve that might be doing rules integration for the service module. You want to invoke a web-service? - Just use the action for it. You want to create a web-service? - Just build a rule set.
Apart from that I&#039;m going to build a readable rule export for documentation purposes, work out a basic publishing workflow and research some semantic web research capabilities. Actually I&#039;m thinking about integrating with the RDF-API to get some meta-data about drupal objects, which is important to have in place when dealing with remote content steming from other drupal sites.&lt;p&gt;&lt;a href=&quot;http://more.zites.net/bringing_rules_to_the_next_level&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://more.zites.net/bringing_rules_to_the_next_level#comments</comments>
 <category domain="http://more.zites.net/taxonomy/term/44">planet</category>
 <category domain="http://more.zites.net/taxonomy/term/55">rules</category>
 <category domain="http://more.zites.net/taxonomy/term/71">services</category>
 <pubDate>Thu, 05 Mar 2009 02:26:37 +0100</pubDate>
 <dc:creator>fago</dc:creator>
 <guid isPermaLink="false">10966 at http://more.zites.net</guid>
</item>
</channel>
</rss>
