<div dir="ltr">It is ok to me; you can take my code as start if you want. I think it wouldn&#39;t be any problem (and action calling die() could help to check this) if you don&#39;t &quot;close&quot; the rule as long as you use &quot;session_save_session(FALSE);&quot; (I read your project); but it will not hurt.<div>

<br></div><div><div>&lt;?php</div><div><br></div><div>/**</div><div> * Implementation of hook_rules_action_info().</div><div> */</div><div>function rules_switch_user_rules_action_info() {</div><div>  return array(</div><div>

    &#39;mymodule_action_impersonate&#39; =&gt; array(</div><div>      &#39;label&#39; =&gt; t(&#39;Select the user to masquerade as&#39;),</div><div>      &#39;arguments&#39; =&gt; array(</div><div>        &#39;uid&#39; =&gt; array(&#39;type&#39; =&gt; &#39;string&#39;, &#39;label&#39; =&gt; t(&#39;uid&#39;)),</div>

<div>      ),</div><div>      &#39;module&#39; =&gt; &#39;WU&#39;,</div><div>      &#39;help&#39; =&gt; t(&#39;Use this action to change the user for next actions&#39;),</div><div>    ),</div><div>    &#39;mymodule_action_unimpersonate&#39; =&gt; array(</div>

<div>      &#39;label&#39; =&gt; t(&#39;Return to previous user&#39;),</div><div>      &#39;help&#39; =&gt; t(&#39;It returns to the user who called the rule.&#39;),</div><div>      &#39;module&#39; =&gt; &#39;WU&#39;,</div>

<div>    ),</div><div>  );</div><div>}</div><div><br></div><div>function rules_switch_user_action_impersonate($uid) {</div><div>  global $user;</div><div>  if (!array_key_exists(&#39;rules_switch_user_action_impersonate&#39;, $_SESSION)) {</div>

<div>    $_SESSION[&#39;rules_switch_user_action_impersonate&#39;] = array();</div><div>  }</div><div>  array_push($_SESSION[&#39;rules_switch_user_action_impersonate&#39;], $user);</div><div>  session_save_session(FALSE);</div>

<div>  $user = user_load($uid);</div><div>  user_load($uid);</div><div>}</div><div><br></div><div>function rules_switch_user_action_unimpersonate() {</div><div>  global $user;</div><div>  if (array_key_exists(&#39;rules_switch_user_action_impersonate&#39;, $_SESSION)) {</div>

<div>    if (!empty($_SESSION[&#39;rules_switch_user_action_impersonate&#39;])) {</div><div>      $user = array_pop($_SESSION[&#39;rules_switch_user_action_impersonate&#39;]);</div><div>    }</div><div>    if (empty($_SESSION[&#39;rules_switch_user_action_impersonate&#39;])) {</div>

<div>      unset($_SESSION[&#39;rules_switch_user_action_impersonate&#39;]);</div><div>    }</div><div>  }</div><div>  session_save_session(TRUE);</div><div>}</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">

2013/1/23 Michael Moritz <span dir="ltr">&lt;<a href="mailto:mimo@gn.apc.org" target="_blank">mimo@gn.apc.org</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi<br>
<br>
I got inspired by this and created a very basic module to have these actions<br>
available in Rules <a href="http://drupal.org/project/rules_switch_user" target="_blank">http://drupal.org/project/rules_switch_user</a><br>
<br>
What do you think?<br>
<br>
Regards,<br>
<br>
mimo<br>
<div class="HOEnZb"><div class="h5"><br>
On Tuesday 22 Jan 2013 15:00:38 Lluís Forns wrote:<br>
&gt; Ok.<br>
&gt;<br>
&gt; Till now I have created a pair of actions; one which I call at the start of<br>
&gt; my rule to impersonate &quot;node changing user&quot;, and one at last to change<br>
&gt; back. Using this I can call scheduled rules with the user who triggered<br>
&gt; them. It is all I need to the moment, so I will stop looking further into<br>
&gt; batching actions (limited time).<br>
&gt;<br>
&gt; Thanks.<br>
&gt;<br>
&gt;<br>
&gt; 2013/1/21 Earnie Boyd &lt;<a href="mailto:earnie@users.sourceforge.net">earnie@users.sourceforge.net</a>&gt;<br>
&gt;<br>
&gt; &gt; drupal_static() is not equivalent to PHP static.  The example you&#39;ve<br>
&gt; &gt; given is using PHP static and yes, it will not be available in another<br>
&gt; &gt; function.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; <a href="http://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/drupal_" target="_blank">http://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/drupal_</a><br>
&gt; &gt; static/7&gt;<br>
&gt; &gt; On Mon, Jan 21, 2013 at 11:21 AM, Lluís Forns &lt;<a href="mailto:enboig@gmail.com">enboig@gmail.com</a>&gt; wrote:<br>
&gt; &gt; &gt; I know we are going OT, but I also want to understand this;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; what about:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; function mymodule_complex_calculation() {<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;   static $cache;<br>
&gt; &gt; &gt;   if (isset($cache)) {<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;     return $cache;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;   }<br>
&gt; &gt; &gt;   // Otherwise we need to perform our calculations<br>
&gt; &gt; &gt;   // ...some complex calculation that returns<br>
&gt; &gt; &gt;   $cache = complex_calculation();<br>
&gt; &gt; &gt;   return $cache;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; }<br>
&gt; &gt;<br>
&gt; &gt; <a href="http://techblog.zabuchy.net/2011/enhancing-drupal-performance-with-drupal_" target="_blank">http://techblog.zabuchy.net/2011/enhancing-drupal-performance-with-drupal_</a><br>
&gt; &gt; static/&gt;<br>
&gt; &gt; &gt; You are saying that if I instantiate a variable in<br>
&gt; &gt;<br>
&gt; &gt; &quot;mymodule_impersonate()&quot;<br>
&gt; &gt;<br>
&gt; &gt; &gt; it will not be available in &quot;mymodule_unimpersonate()&quot;?<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 2013/1/21 Earnie Boyd &lt;<a href="mailto:earnie@users.sourceforge.net">earnie@users.sourceforge.net</a>&gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;&gt; You &quot;think&quot; wrongly.  A static variable has local scope to the<br>
&gt; &gt; &gt;&gt; function declaring the static variable.<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; On Mon, Jan 21, 2013 at 11:03 AM, Lluís Forns &lt;<a href="mailto:enboig@gmail.com">enboig@gmail.com</a>&gt; wrote:<br>
&gt; &gt; &gt;&gt; &gt; I think static are also available to other functions, use them to<br>
&gt; &gt;<br>
&gt; &gt; store<br>
&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt; cached information across my code and they work.<br>
&gt; &gt; &gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt; 2013/1/21 Darren Oh &lt;<a href="mailto:darrenoh@sidepotsinternational.com">darrenoh@sidepotsinternational.com</a>&gt;<br>
&gt; &gt; &gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt; Static variables are only saved for a single function. Global<br>
&gt; &gt;<br>
&gt; &gt; variables<br>
&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt; are available to all functions during a single page request. Session<br>
&gt; &gt; &gt;&gt; &gt;&gt; variables are available to all page requests during a session.<br>
&gt; &gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt; On Jan 21, 2013, at 10:08 AM, Lluís Forns wrote:<br>
&gt; &gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt; Darren, thanks for the link. What is the difference between using<br>
&gt; &gt; &gt;&gt; &gt;&gt; global<br>
&gt; &gt; &gt;&gt; &gt;&gt; or static to save the data?<br>
&gt; &gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt; 2013/1/21 Lluís Forns &lt;<a href="mailto:enboig@gmail.com">enboig@gmail.com</a>&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; My code was from a module where impersonation recursively could<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; happen,<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; this is why I use a stack to save user state. I am also saving it<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; to<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; session<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; and not using a static variable because I may uses batch functions.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; But I see some problems right now:<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; - To be safe impersonation should be saved into static variables<br>
&gt; &gt;<br>
&gt; &gt; (and<br>
&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; &quot;using session_save_session(FALSE);&quot; ), so if anything goes wrong,<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; $user is<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; not afected.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; - If I want to be able to execute every Rules action in a batch, I<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; need<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; to change user &quot;per action&quot;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; Any idea of how to &quot;inject&quot; code before and after a rule action?<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; 2013/1/21 Walt Daniels &lt;<a href="mailto:wdlists@gmail.com">wdlists@gmail.com</a>&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt; We do the latter simple trick in our store code so we can show<br>
&gt; &gt;<br>
&gt; &gt; people<br>
&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt; the member prices. We have a dummy id that is a member so we<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt; switch<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt; to it,<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt; pick up the price and use it so we can show both member and<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt; non-member<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt; prices on the screen.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt; On Mon, Jan 21, 2013 at 9:18 AM, Christian López Espínola<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt; &lt;<a href="mailto:penyaskito@computer.org">penyaskito@computer.org</a>&gt; wrote:<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; Haven&#39;t tested your code, but maybe you want to take a look at<br>
&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; masquerade_switch_user and masquerade_switch_back:<br>
&gt; &gt; <a href="http://drupalcode.org/project/masquerade.git/blob/HEAD:/masquerade.module" target="_blank">http://drupalcode.org/project/masquerade.git/blob/HEAD:/masquerade.module</a>.<br>
&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; And if the impersonation is only for the given request, maybe<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; just<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;  global $user;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;  $previous = $user;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;  $user = user_load($uid);<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; // Do your stuff.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;  $user = $previous;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; would work.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; On Mon, Jan 21, 2013 at 10:37 AM, Lluís Forns &lt;<a href="mailto:enboig@gmail.com">enboig@gmail.com</a>&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; wrote:<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; Some of my scheduled task needs to run as the user who triggered<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; them<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; (not anonymous neither admin); so I thought of writing two<br>
&gt; &gt;<br>
&gt; &gt; actions:<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; - One to impersonate a user, which will receive uid as an<br>
&gt; &gt;<br>
&gt; &gt; argument.<br>
&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; - Another to undo the impersonate.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; All the called actions should be between them.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; Anybody see any fault in this idea or the actions code?<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; Thanks.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; function wu_action_impersonate($uid) {<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   global $user;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   if (!array_key_exists(&#39;wu_action_impersonate&#39;, $_SESSION)) {<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;     $_SESSION[&#39;wu_action_impersonate&#39;] = array();<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   }<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   array_push($_SESSION[&#39;wu_action_impersonate&#39;], $user);<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   session_save_session(FALSE);<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   $user = user_load($uid);<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   user_load($uid);<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; function wu_action_unimpersonate() {<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   global $user;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   if (array_key_exists(&#39;wu_action_impersonate&#39;, $_SESSION)) {<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;     if (!empty($_SESSION[&#39;wu_action_impersonate&#39;])) {<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;       $user = array_pop($_SESSION[&#39;wu_action_impersonate&#39;]);<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;     }<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;     if (empty($_SESSION[&#39;wu_action_impersonate&#39;])) {<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;       unset($_SESSION[&#39;wu_action_impersonate&#39;]);<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;     }<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   }<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;   session_save_session(TRUE);<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; --<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; *Ser freak no és imprescindible per ser informàtic, però ajuda.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; *La vida no ha de ser feliç, ha de ser plena.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;&gt; *Abans d&#39;imprimir aquest missatge, pensa en el medi ambient.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; --<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; Cheers,<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; Christian López Espínola &lt;penyaskito AT computer DOT org&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;&gt;&gt; <a href="http://twitter.com/penyaskito" target="_blank">http://twitter.com/penyaskito</a> | <a href="http://penyaskito.com" target="_blank">http://penyaskito.com</a><br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; --<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; *Ser freak no és imprescindible per ser informàtic, però ajuda.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; *La vida no ha de ser feliç, ha de ser plena.<br>
&gt; &gt; &gt;&gt; &gt;&gt;&gt; *Abans d&#39;imprimir aquest missatge, pensa en el medi ambient.<br>
&gt; &gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt; --<br>
&gt; &gt; &gt;&gt; &gt;&gt; *Ser freak no és imprescindible per ser informàtic, però ajuda.<br>
&gt; &gt; &gt;&gt; &gt;&gt; *La vida no ha de ser feliç, ha de ser plena.<br>
&gt; &gt; &gt;&gt; &gt;&gt; *Abans d&#39;imprimir aquest missatge, pensa en el medi ambient.<br>
&gt; &gt; &gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt; --<br>
&gt; &gt; &gt;&gt; &gt; *Ser freak no és imprescindible per ser informàtic, però ajuda.<br>
&gt; &gt; &gt;&gt; &gt; *La vida no ha de ser feliç, ha de ser plena.<br>
&gt; &gt; &gt;&gt; &gt; *Abans d&#39;imprimir aquest missatge, pensa en el medi ambient.<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; --<br>
&gt; &gt; &gt;&gt; Earnie<br>
&gt; &gt; &gt;&gt; -- <a href="https://sites.google.com/site/earnieboyd" target="_blank">https://sites.google.com/site/earnieboyd</a><br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; --<br>
&gt; &gt; &gt; *Ser freak no és imprescindible per ser informàtic, però ajuda.<br>
&gt; &gt; &gt; *La vida no ha de ser feliç, ha de ser plena.<br>
&gt; &gt; &gt; *Abans d&#39;imprimir aquest missatge, pensa en el medi ambient.<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; Earnie<br>
&gt; &gt; -- <a href="https://sites.google.com/site/earnieboyd" target="_blank">https://sites.google.com/site/earnieboyd</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>*Ser freak no és imprescindible per ser informàtic, però ajuda.<br>*La vida no ha de ser feliç, ha de ser plena.<br>*Abans d&#39;imprimir aquest missatge, pensa en el medi ambient.
</div>