name]['page arguments'] = array($theme->name); $items['admin/appearance/settings/' . $theme->name]['page callback'] = 'delta_theme_settings'; } } /** * Implements hook_ctools_plugin_type(). */ function delta_ctools_plugin_type() { return array( 'plugins' => array( 'cache' => TRUE, 'use hooks' => TRUE, 'classes' => array('handler'), 'load themes' => TRUE, ), ); } /** * Implements hook_delta_plugins(). */ function delta_delta_plugins() { return array( 'delta_injection' => array( 'handler' => array( 'path' => drupal_get_path('module', 'delta') . '/plugins/delta', 'file' => 'delta_injection.inc', 'class' => 'delta_injection', ), ), 'delta_injection_theme_settings' => array( 'handler' => array( 'path' => drupal_get_path('module', 'delta') . '/plugins/delta', 'file' => 'delta_injection_theme_settings.inc', 'class' => 'delta_injection_theme_settings', 'parent' => 'delta_injection', ), ), ); } /** * Implements hook_context_plugins(). */ function delta_context_plugins() { return array( 'context_reaction_delta' => array( 'handler' => array( 'path' => drupal_get_path('module', 'delta') . '/plugins/context', 'file' => 'context_reaction_delta.inc', 'class' => 'context_reaction_delta', 'parent' => 'context_reaction', ), ), ); } /** * Implements hook_context_regiswaittry(). */ function delta_context_registry() { return array( 'reactions' => array( 'delta' => array( 'title' => t('Delta'), 'description' => t('Apply contextual theme settings via the Delta module.'), 'plugin' => 'context_reaction_delta', ), ), ); } /** * Implements hook_context_page_reaction(). */ function delta_context_page_reaction(){ if ($plugin = context_get_plugin('reaction', 'delta')) { $plugin->execute(); } } /** * Implements hook_load(). */ function delta_load($name) { ctools_include('export'); if ($template = ctools_export_crud_load('delta', $name)) { return $template; } } /** * @todo */ function delta_load_all($reset = FALSE) { return ctools_export_crud_load_all('delta', $reset); } /** * @todo */ function delta_enabled($name) { $template = delta_load($name); return $template && (!isset($template->disabled) || !$template->disabled); } /** * @todo */ function delta_reset($theme) { if ($current = delta_get_current($theme)) { foreach (delta_get_plugins($current) as $plugin) { $plugin->revoke(); } $pointer = &drupal_static('delta_inject'); $pointer[$theme] = NULL; module_invoke_all('delta_reset', $theme, $current); return $current; } } /** * @todo */ function delta_get_current($theme) { $pointer = drupal_static('delta_inject'); if (isset($pointer[$theme])) { return $pointer[$theme]; } } /** * @todos */ function delta_inject($name) { if ($name && $delta = delta_load($name)) { $pointer = &drupal_static(__FUNCTION__); $before = delta_reset($delta->theme); foreach (delta_get_plugins($name) as $plugin) { $plugin->inject(); } $pointer[$delta->theme] = $name; module_invoke_all('delta_inject', $delta->theme, $name); return $before; } } /** * @todo */ function delta_get_plugin($name, $plugin) { if ($plugins = delta_get_plugins($name)) { if (isset($plugins[$plugin])) { return $plugins[$plugin]; } } return FALSE; } /** * @todo */ function delta_get_plugins($name) { $cache = &drupal_static(__FUNCTION__); if (!isset($cache[$name])) { $cache[$name] = array(); ctools_include('plugins'); foreach (ctools_get_plugins('delta', 'plugins') as $plugin) { if ($plugin['name'] != 'delta_injection') { if ($class = ctools_plugin_get_class($plugin, 'handler')) { $cache[$name][$plugin['name']] = new $class($plugin, $name); } } } drupal_alter('delta_plugins', $cache[$name], $name); } return $cache[$name]; } /** * @todo */ function delta_variable_set($name, $value) { $original = isset($GLOBALS['conf'][$name]) ? $GLOBALS['conf'][$name] : NULL; $GLOBALS['conf'][$name] = $value; return $original; } /** * @todo */ function delta_ancestors($name) { $ancestors = array(); if ($template = delta_load($name)) { $ancestors[$template->machine_name] = $template; if (!empty($template->parent)) { $ancestors = array_merge($ancestors, delta_ancestors($template->parent)); } } return $ancestors; } /** * @todo */ function delta_merge($first, $second) { if (is_array($first) && is_array($second)) { return array_merge($first, $second); } if (is_object($first) && is_object($second)) { return (object) array_merge((array) $first, (array) $second); } return $second; } /** * @todo */ function delta_reduce(array $first, array $second) { if ($first === $second) { return NULL; } foreach ($first as $name => $value) { if (($first[$name] === NULL && !isset($second[$name])) || (isset($second[$name]) && $value === $second[$name])) { unset($first[$name]); } } return $first; } /** * @todo */ function delta_theme_settings($key) { $backup = delta_reset($key); $form = drupal_get_form('system_theme_settings', $key); delta_inject($backup); return $form; }