replace_array = array( "%%FQDN%%"=> $L_FQDN, ); } /** * used by get_impersonated to merge array. Son value overwrite father's value * * @param array $father * @param array $son * @return array */ private function variable_merge($father, $son) { if (! is_array($son)) return $father; foreach ($son as $k=>$v) { $father[$k] = $v; } return $father; } /** * Load the persistent variable table. * * The variable table is composed of values that have been saved in the table * with variable_set() as well as those explicitly specified in the configuration * file. * * @global int $cuid * @return array */ function variable_init() { global $cuid; if ($cuid > 1999) { $mid = $cuid; } else { $mid = null; } // In case we launch it in a script, there is no $_SERVER if (isset($_SERVER['HTTP_HOST'])) { $host=$_SERVER['HTTP_HOST']; } else { $host=null; } return $this->get_impersonated($host, $mid); } /** * Return the var for a specific environnement : * * logged via $fqdn url * * the user is $uid * * $var if we want only 1 var instead of all of them * * If $fqdn and $uid aren't specified, return the default value * * @global type $db * @global type $err * @param type $fqdn * @param type $uid * @param type $var * @return array */ function get_impersonated($fqdn=null, $uid=null, $var=null) { global $db, $err; $arr_var=$this->variables_list(); // Get some vars we are going to need. if ($fqdn != NULL) { $sub_infos=m_dom::get_sub_domain_id_and_member_by_name( strtolower($fqdn) ); } else { $sub_infos=false; } if ( $uid != NULL ) { $creator=m_mem::get_creator_by_uid($uid); } else { $creator=false; } $variables = array(); // Browse the array in the specific order of the strata foreach ( $this->strata_order as $strata) { if (! isset($arr_var[$strata]) || !is_array($arr_var[$strata])) continue; switch($strata) { case 'DEFAULT': // $variables = $this->variable_merge(array(),$arr_var['DEFAULT'][NULL]); $variablesList = current($arr_var["DEFAULT"]); $variables = $this->variable_merge(array(),$variablesList); break; case 'GLOBAL': $variables = $this->variable_merge($variables, $arr_var['GLOBAL'][NULL]); break; case 'FQDN_CREATOR': if ( is_array($sub_infos) && isset($arr_var['FQDN_CREATOR'][$sub_infos['member_id']]) && is_array($arr_var['FQDN_CREATOR'][$sub_infos['member_id']])) { $variables = $this->variable_merge($variables, $arr_var['FQDN_CREATOR'][$sub_infos['member_id']]); } break; case 'FQDN': if ( is_array($sub_infos) && isset($arr_var['FQDN'][$sub_infos['sub_id']]) && is_array($arr_var['FQDN'][$sub_infos['sub_id']])) { $variables = $this->variable_merge($variables, $arr_var['FQDN'][$sub_infos['sub_id']]); } break; case 'CREATOR': if ( $creator && isset($arr_var['CREATOR'][$creator]) && is_array($arr_var['CREATOR'][$creator])) { $variables = $this->variable_merge($variables, $arr_var['CREATOR'][$creator] ); } break; case 'MEMBER': if ( $uid && isset($arr_var['MEMBER'][$uid]) && is_array($arr_var['MEMBER'][$uid])) { $variables = $this->variable_merge($variables, $arr_var['MEMBER'][$uid] ); } break; case 'DOMAIN': //FIXME TODO break; } //switch } //foreach // Replace needed vars foreach ($variables as $vv => $hh) { if (!isset($hh['value'])) { continue; } $variables[$vv]['value'] = strtr($hh['value'], $this->replace_array ); } if ($var && isset($variables[$var])) { return $variables[$var]; } else { return $variables; } } /** * Initialize the global $conf array if necessary * * @global $conf the global conf array * @uses variable_init() */ function variable_init_maybe($force=false) { global $conf; if ($force || !isset($conf)) { $this->cache_variable_list = false; $conf = $this->variable_init(); } } /** * Return a persistent variable. * * @param $name * The name of the variable to return. * @param $default * The default value to use if this variable has never been set. * @param $createit_comment * If variable doesn't exist, create it with the default value * and createit_comment value as comment * @return * The value of the variable. * @global $conf * A cache of the configuration. */ function variable_get($name, $default = null, $createit_comment = null, $type=null) { global $conf; $this->variable_init_maybe(); if (isset($conf[$name])) { return $conf[$name]['value']; } elseif (!is_null($createit_comment)) { $this->variable_update_or_create($name, $default, 'DEFAULT', 'null', 'null', $createit_comment, $type); } return $default; } /** * Create or update a variable * * @global type $db * @global type $err * @param type $var_name * @param type $var_value * @param type $strata * @param null $strata_id * @param null $var_id * @param type $comment * @param type $type * @return boolean */ function variable_update_or_create($var_name, $var_value, $strata=null, $strata_id=null, $var_id=null, $comment=null, $type=null) { global $db, $err; $err->log('variable', 'variable_update_or_create'); if ( strtolower($var_id) == 'null' ) $var_id = null; if ( strtolower($strata_id) == 'null' ) $strata_id = null; if (is_object($type) || is_array($type)) { $type = serialize($type); } if (is_object($var_value) || is_array($var_value)) { $var_value = serialize($var_value); } if ( ! is_null($var_id) ) { $sql="UPDATE variable SET value='".mysql_real_escape_string($var_value)."' WHERE id = ".intval($var_id); } else { if ( empty($strata) ) { $err->raise('variables', _("Err: Missing strata when creating var")); return false; } $sql="INSERT INTO variable (name, value, strata, strata_id, comment, type) VALUES ( '".mysql_real_escape_string($var_name)."', '".mysql_real_escape_string($var_value)."', '".mysql_real_escape_string($strata)."', ".( is_null($strata_id)?'NULL':"'".mysql_real_escape_string($strata_id)."'").", '".mysql_real_escape_string($comment)."', '".mysql_real_escape_string($type)."' );"; } $db->query("$sql"); $this->variable_init_maybe(true); return true; } /** * Unset a persistent variable. * * @param $name * The name of the variable to undefine. */ function del($id) { global $db; $result = $db->query("DELETE FROM `variable` WHERE id = '".intval($id)."'"); $this->variable_init_maybe(true); return $result; } /** * echo HTML code to display a variable passed in parameters * * @param type $v * @param type $varname * @param type $echo * @return type */ function display_valueraw_html($v,$varname,$echo = true) { $output = ""; if (is_array($v)) { if (empty($v)) { $output .= ""._("Empty array").""; } else { $output .= "