Index: realname.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/realname/realname.module,v retrieving revision 1.4.4.57 diff -u -p -r1.4.4.57 realname.module --- realname.module 13 Oct 2009 17:48:06 -0000 1.4.4.57 +++ realname.module 11 Mar 2010 18:44:10 -0000 @@ -686,7 +686,8 @@ function realname_privatemsg_autocomplet * The retreived "real name" string. */ function realname_make_name(&$account) { - static $users = array(); + $users = &realname_static('users',array()); + $links = &realname_static('links',array()); // Return anonymous user right away. if ($account->uid == 0) { @@ -698,7 +699,7 @@ function realname_make_name(&$account) { $account->homepage = isset($links[$account->uid]) ? $links[$account->uid] : NULL; return $users[$account->uid]; } - + $result = _realname_make_name($account); if (empty($result)) { return $account->name; @@ -723,9 +724,9 @@ function realname_make_name(&$account) { */ function _realname_make_name(&$account) { static $fields, $pattern_saved, $homepage, $use_theme, $type, $module, $profile_privacy; - static $users = array(); - static $links = array(); - static $edit = array(); + $users = &realname_static('users',array()); + $links = &realname_static('links',array()); + $edit = &realname_static('edit',array()); // Get our controlling variables (static makes it once per page load). if (!isset($fields)) { @@ -809,6 +810,38 @@ function _realname_make_name(&$account) return filter_xss_admin($string); } +function &realname_static($name, $default_value = NULL, $reset = FALSE) { + static $data = array(), $default = array(); + if (!isset($name)) { + // All variables are reset. This needs to be done one at a time so that + // references returned by earlier invocations of drupal_static() also get + // reset. + foreach ($default as $name => $value) { + $data[$name] = $value; + } + // As the function returns a reference, the return should always be a + // variable. + return $data; + } + if ($reset) { + // The reset means the default is loaded. + if (array_key_exists($name, $default)) { + $data[$name] = $default[$name]; + } + else { + // Reset was called before a default is set and yet a variable must be + // returned. + return $data; + } + } + elseif (!array_key_exists($name, $data)) { + // Store the default value internally and also copy it to the reference to + // be returned. + $default[$name] = $data[$name] = $default_value; + } + return $data[$name]; +} + /** * Provides array sorting function for uasort. * @link http://us2.php.net/manual/en/function.uasort.php PHP Manual @end-link