View source
<?php
function color_rebuilder_menu() {
$items = array();
$items['color_rebuilder/rebuild/%/%'] = array(
'title' => 'myPage',
'page callback' => 'color_rebuilder_rebuild',
'page arguments' => array(
1,
2,
),
'access arguments' => array(
'access color rebuilder',
),
);
return $items;
}
function hook_permission() {
return array(
'access color rebuilder' => array(
'title' => t('Access Color Rebuilder Rebuild Page'),
'description' => t('Perform the cache clear of the passed theme color files.'),
),
);
}
function color_rebuilder_set_colors(&$form, $color_scheme) {
if (empty($form['color']['info']['#value']['schemes'][$color_scheme])) {
return FALSE;
}
$scheme_colors = $form['color']['info']['#value']['schemes'][$color_scheme]['colors'];
$scheme_fields = $form['color']['info']['#value']['fields'];
foreach ($scheme_fields as $key => $value) {
$form['color']['palette'][$key]['#value'] = $scheme_colors[$key];
}
return TRUE;
}
function color_rebuilder_rebuild($theme_to_rebuild = '', $color_scheme = 'default') {
$errors_before = drupal_static('form_set_error', array());
form_clear_error();
$themes = list_themes();
if (!module_exists('color')) {
return $error = 1;
}
foreach ($themes as $theme_name => $theme_values) {
if (!empty($theme_to_rebuild) && $theme_to_rebuild != $theme_name) {
continue;
}
$router_item = menu_get_item('admin/appearance/settings/' . $theme_name);
if ($router_item['include_file']) {
require_once DRUPAL_ROOT . '/' . $router_item['include_file'];
}
$form = drupal_get_form('system_theme_settings', $theme_name);
$defaults = array();
color_rebuilder_defaults_from_form($defaults, $form);
$color_scheme_exists = color_rebuilder_set_colors($form, $color_scheme);
if (!$color_scheme_exists) {
return $error = 3;
}
$palette = array();
if (isset($form['color'])) {
foreach (element_children($form['color']['palette']) as $key) {
$palette[$key] = $defaults[$key] = $form['color']['palette'][$key]['#value'];
}
}
$defaults['scheme'] = $color_scheme;
$form_state = array(
'values' => array(
'palette' => $palette,
),
'build_info' => array(
'args' => array(
0 => $theme_name,
),
),
);
$form_state['values'] += $defaults;
if (isset($form['color'])) {
color_scheme_form_validate($form, $form_state);
$errors = form_set_error();
if (empty($errors)) {
color_scheme_form_submit($form, $form_state);
return $error = 0;
}
}
else {
return $error = 2;
}
form_clear_error();
}
$form_set_error =& drupal_static('form_set_error', array());
$form_set_error = $errors_before;
return $error = 4;
}
function color_rebuilder_defaults_from_form(array &$defaults, array $form, $parent_key = '') {
foreach (element_children($form) as $key) {
$values = $form[$key];
if (isset($values['#value'])) {
if (!isset($defaults[$key])) {
$defaults[$key] = $values['#value'];
}
else {
$defaults[$parent_key . '-' . $key] = $values['#value'];
}
}
elseif (isset($values['#default_value'])) {
if (!isset($defaults[$key])) {
$defaults[$key] = $values['#default_value'];
}
else {
$defaults[$parent_key . '-' . $key] = $values['#default_value'];
}
}
elseif (is_array($values)) {
color_rebuilder_defaults_from_form($defaults, $values, $key);
}
}
}
function color_rebuilder_drush_color_rebuild($main_color = NULL) {
$theme_to_rebuild = drush_get_option('theme', 1);
$schema_color = drush_get_option('color', 1);
$error = color_rebuilder_rebuild($theme_to_rebuild, $schema_color);
switch ($error) {
case 0:
drupal_set_message(t("The '@theme' color cache has been rebuilt with the scheme color '@scheme'", array(
'@theme' => $theme_to_rebuild,
'@scheme' => $schema_color,
)));
break;
case 1:
drush_set_error(dt("The color module is not enabled"));
break;
case 2:
drush_set_error(dt("The theme '@theme' hasn't the color-enabled", array(
'@theme' => $theme_to_rebuild,
)));
break;
case 3:
drush_set_error(dt("The theme '@theme' hasn't the color scheme '@scheme' ", array(
'@theme' => $theme_to_rebuild,
'@scheme' => $schema_color,
)));
break;
case 4:
drush_set_error(dt("The theme '@theme' doesn't exist", array(
'@theme' => $theme_to_rebuild,
)));
break;
}
}