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