| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Variable API module. Extended API.
 
-  */
 
- /**
 
-  * Build generic variable information
 
-  */
 
- function variable_build_info($type, $options) {
 
-   variable_module_include();
 
-   switch ($type) {
 
-     case 'variable':
 
-       return variable_build_list_info($options);
 
-     case 'group':
 
-     case 'type':
 
-       $info = variable_invoke_all('variable_' . $type . '_info');
 
-       drupal_alter('variable_' . $type . '_info', $info);
 
-       return $info;
 
-   }
 
- }
 
- /**
 
-  * Build variable information
 
-  */
 
- function variable_build_list_info($options) {
 
-   $variables = array();
 
-   foreach (module_implements('variable_info') as $module) {
 
-     $result = call_user_func($module . '_variable_info', $options);
 
-     if (isset($result) && is_array($result)) {
 
-       foreach ($result as $name => $variable) {
 
-         // Support name => title declarations
 
-         $variable = is_array($variable) ? $variable : array('title' => $variable);
 
-         $variable += array('name' => $name, 'module' => $module);
 
-         // Check variable name for multiple values
 
-         $multiple = NULL;
 
-         if (preg_match('/\[(\w+)\]/', $name, $matches)) {
 
-           $multiple = $matches[1];
 
-           $variable += array('type' => 'multiple');
 
-         }
 
-         $variable += array('group' => 'default', 'type' => 'default');
 
-         $variables[$name] = $variable + variable_get_type($variable['type']);
 
-         // Add this at the end so it doesn't override type properties
 
-         if (!empty($multiple)) {
 
-           $variables[$name] += array('multiple' => $multiple);
 
-         }
 
-       }
 
-     }
 
-   }
 
-   // Last chance for modules to alter variable info.
 
-   drupal_alter('variable_info', $variables, $options);
 
-   return $variables;
 
- }
 
- /**
 
-  * Build multiple variables
 
-  */
 
- function variable_build_multiple($variable, $options) {
 
-   // Invoke variable callbacks
 
-   if (!empty($variable['multiple callback'])) {
 
-     $variable['multiple'] = variable_callback($variable['multiple callback'], $variable, $options);
 
-   }
 
-   if (isset($variable['multiple'])) {
 
-     if (!is_array($variable['multiple'])) {
 
-       $variable['multiple'] = variable_option_list($variable['multiple'], $variable, $options);
 
-     }
 
-     $variable += array('children' => array(), 'repeat' => array());
 
-     // Build children variables with the name => value array
 
-     foreach ($variable['multiple'] as $key => $title) {
 
-       $name = preg_replace('/\[\w+\]/', $key, $variable['name']);
 
-       // Be careful to respect previously set properties, add but do not override.
 
-       $child = isset($variable['children'][$name]) ? $variable['children'][$name] : array();
 
-       $child += $variable['repeat'];
 
-       $child += array(
 
-         'name' => $name, 'index' => $key, 'title' => $title,
 
-         'type' => 'default', 'parent' => $variable['name'], 'module' => $variable['module'],
 
-       );
 
-       // Set default value from parent
 
-       if (isset($variable['default']) && is_array($variable['default']) && isset($variable['default'][$key])) {
 
-         $child += array('default' => $variable['default'][$key]);
 
-       }
 
-       $child += variable_get_type($child['type']);
 
-       $variable['children'][$name] = $child;
 
-     }
 
-   }
 
-   return $variable;
 
- }
 
- /**
 
-  * Build variable with options
 
-  */
 
- function variable_build_options($variable, $options) {
 
-   $variable = variable_build_variable($variable, $options);
 
-   if (isset($variable['options callback'])) {
 
-     $variable['options'] = variable_callback($variable['options callback'], $variable, $options);
 
-   }
 
-   if (!empty($variable['options']) && !is_array($variable['options'])) {
 
-     $variable['options'] = variable_option_list($variable['options'], $variable, $options);
 
-   }
 
-   return $variable;
 
- }
 
- /**
 
-  * Build single variable
 
-  *
 
-  * Some variables may spawn into multiple ones
 
-  */
 
- function variable_build_variable($variable, $options = array()) {
 
-   if (empty($variable['built'])) {
 
-     variable_include($variable);
 
-     // Mark as built so we don't build it again
 
-     $variable['built'] = TRUE;
 
-     $options = _variable_options($options);
 
-     $variable = _variable_variable($variable, $options);
 
-     // If the variable has a build callback, go for it
 
-     if (isset($variable['build callback'])) {
 
-       $variable = variable_callback($variable['build callback'], $variable, $options);
 
-     }
 
-   }
 
-   return $variable;
 
- }
 
- /**
 
-  * Invoke variable callback
 
-  *
 
-  * @param $callback
 
-  *   Function name to invoke or array with module and funcion in this order
 
-  * @param $variable
 
-  *   Array of variable information.
 
-  * @param $options
 
-  *   Options to pass to the callback
 
-  * @param $module
 
-  *   Optional module to include its '*.variable.inc' file if the function not found
 
-  */
 
- function variable_callback($callback, $variable, $options = array()) {
 
-   if (is_array($callback)) {
 
-     list($module, $function) = $callback;
 
-   }
 
-   else {
 
-     $function = $callback;
 
-   }
 
-   if (!function_exists($function)) {
 
-     if (isset($module)) {
 
-       variable_module_include($module);
 
-     }
 
-     else {
 
-       variable_include($variable);
 
-     }
 
-   }
 
-   return call_user_func($function, $variable, $options);
 
- }
 
- /**
 
-  * List variables for a group
 
-  */
 
- function variable_list_group($group) {
 
-   $list = array();
 
-   foreach (variable_get_info() as $name => $variable) {
 
-     if ($variable['group'] == $group) {
 
-       $list[$name] = $variable;
 
-     }
 
-   }
 
-   return $list;
 
- }
 
- /**
 
-  * List variables for a module
 
-  */
 
- function variable_list_module($module) {
 
-   $list = array();
 
-   foreach (variable_get_info() as $name => $variable) {
 
-     if ($variable['module'] == $module) {
 
-       $list[$name] = $variable;
 
-     }
 
-   }
 
-   return $list;
 
- }
 
- /**
 
-  * Fetch options for variable
 
-  */
 
- function variable_option_list($type, $variable, $options) {
 
-   $cache = &drupal_static(__FUNCTION__);
 
-   if (isset($cache[$type])) {
 
-     return $cache[$type];
 
-   }
 
-   elseif ($info = variable_get_type($type)) {
 
-     if (isset($info['options callback'])) {
 
-       $info['options'] = variable_callback(array($info['module'], $info['options callback']), $variable, $options);
 
-     }
 
-     if (!empty($info['cache'])) {
 
-       $cache[$type] = $info['options'];
 
-     }
 
-     return $info['options'];
 
-   }
 
-   else {
 
-     return array();
 
-   }
 
- }
 
- /**
 
-  * General function to include variable definitions for all modules
 
-  */
 
- function variable_module_include($modules = NULL) {
 
-   static $core_modules = array('locale', 'forum', 'menu', 'node', 'system', 'taxonomy', 'translation', 'user');
 
-   static $included = array();
 
-   $modules = $modules ? (is_array($modules) ? $modules : array($modules)) : $core_modules;
 
-   foreach ($modules as $module) {
 
-     if (!isset($included[$module])) {
 
-       if (module_exists($module)) {
 
-         if (in_array($module, $core_modules)) {
 
-           $included[$module] = module_load_include('variable.inc', 'variable', 'includes/' . $module);
 
-         }
 
-         else {
 
-           $included[$module] = module_load_include('variable.inc', $module);
 
-         }
 
-       }
 
-     }
 
-   }
 
- }
 
- /**
 
-  * Disable variables for module
 
-  *
 
-  * Store module variables so we can delete them if uninstalled
 
-  */
 
- function variable_module_disable($module) {
 
- }
 
- /**
 
-  * Disable variables for module
 
-  *
 
-  * Store module variables so we can delete them if uninstalled
 
-  */
 
- function variable_module_enable($module) {
 
-   if ($variables = variable_list_module($module)) {
 
-     $list = variable_get('variable_module_list', array());
 
-     $list[$module] = variable_children($variables);
 
-     variable_set('variable_module_list', $list);
 
-   }
 
- }
 
- /**
 
-  * Uninstall variables for module
 
-  *
 
-  * This will be called from variable_modules_uninstalled(), no need to implement it directly.
 
-  */
 
- function variable_module_uninstall($module) {
 
-   $list = variable_get('variable_module_list', array());
 
-   if (isset($list[$module])) {
 
-     // This is a plain list of variables so we can use raw delete.
 
-     array_map('variable_delete', $list[$module]);
 
-     unset($list[$module]);
 
-     variable_set('variable_module_list', $list);
 
-   }
 
- }
 
- /**
 
-  * Get value for multiple variable
 
-  */
 
- function variable_multiple_get_value($variable, $options = array()) {
 
-   $variable = variable_build($variable, $options);
 
-   $values = array();
 
-   foreach ($variable['children'] as $child) {
 
-     $values[$child['index']] = variable_get_value($child, $options);
 
-   }
 
-   return $values;
 
- }
 
- /**
 
-  * Get defaults for multiple variable
 
-  */
 
- function variable_multiple_get_default($variable, $options = array()) {
 
-   $variable = variable_build($variable, $options);
 
-   $values = array();
 
-   foreach ($variable['children'] as $child) {
 
-     $values[$child['index']] = variable_get_default($child, $options);
 
-   }
 
-   return $values;
 
- }
 
 
  |