'Show current status of theme configuration in the site.', ); $items['theme-list'] = array( 'description' => 'List all available themes for the site.', ); $items['theme-list-enabled'] = array( 'description' => 'List all enabled themes for the site.', ); $items['theme-info'] = array( 'description' => 'List all info about a theme.', 'arguments' => array( 'theme_name' => 'The code name of the theme', ), ); $items['theme-set-default'] = array( 'description' => 'Set the default theme.', 'arguments' => array( 'theme_name' => 'The code name of the theme', ), ); $items['theme-set-admin'] = array( 'description' => 'Set the administration theme.', 'arguments' => array( 'theme_name' => 'The code name of the theme', ), ); $items['theme-enable'] = array( 'description' => 'Enable a theme.', 'arguments' => array( 'theme_name' => 'The code name of the theme', ), ); $items['theme-disable'] = array( 'description' => 'Disable a theme.', 'arguments' => array( 'theme_name' => 'The code name of the theme', ), ); return $items; } /** * Implementation of hook_drush_help(). */ function theme_drush_help($section) { switch ($section) { case 'drush:theme-status': return dt('Show current status of theme configuration in the site. It shows the default theme, the administration theme and other enabled themes.'); case 'drush:theme-list': return dt('List all available themes for the site. It shows each theme name, title and current status (enabled/disabled/default/administration). It works with --pipe'); case 'drush:theme-list-enabled': return dt('List all enabled themes for the site. It shows each theme name, title and if theme is default or administration one. It works with --pipe'); case 'drush:theme-info': return dt('List all info about a theme. Including: php version, regions, features and files (css and js).'); case 'drush:theme-set-default': return dt('Set the default theme. It will enable the theme prior to setting as default in not yet enabled.'); case 'drush:theme-set-admin': return dt('Set the administration theme.'); case 'drush:theme-enable': return dt('Enable a theme.'); case 'drush:theme-disable': return dt('Disable a theme. It will fail if the theme is set as default theme.'); } } /** * Implementation of command drush theme-status. * * This function prints the current status of theme configuration in the site. */ function drush_theme_theme_status() { $admin_theme = _drush_theme_get_admin_theme(); $theme_default = _drush_theme_get_default_theme(); $enabled = _drush_theme_get_enabled_themes(); $key = array_search($theme_default, $enabled); unset($enabled[$key]); drush_print(dt("Administration theme: !admin_theme", array('!admin_theme' => $admin_theme))); drush_print(dt("Default theme: !theme_default", array('!theme_default' => $theme_default))); if (count($enabled) > 0) { drush_print(dt("Other enabled themes: !themes", array('!themes' => implode(' ', $enabled)))); } } /** * Implementation of command drush theme-list. * * This function prints the list of available themes and their status. */ function drush_theme_theme_list() { $themes = drush_get_themes(); $theme_default = _drush_theme_get_default_theme(); $admin_theme = _drush_theme_get_admin_theme(); $enabled = _drush_theme_get_enabled_themes(); $rows[] = array(dt('Name'), dt('Title'), dt('Enabled/Disabled'), dt('Default'), dt('Administration')); foreach ($themes as $theme) { $default = ($theme->name == $theme_default ? dt('Yes') : dt('No')); $admin = ($theme->name == $admin_theme ? dt('Yes') : dt('No')); $status = (in_array($theme->name, $enabled) ? "enabled" : "disabled"); $rows[] = array($theme->name, $theme->info['name'], $status, $default, $admin); $pipe[] = $theme->name; } drush_print_table($rows, TRUE); drush_print_pipe(implode(' ', $pipe)); } /** * Implementation of command drush theme-list-enabled. * * This function prints the list of enabled themes and their status * (default/administration). */ function drush_theme_theme_list_enabled() { $themes = drush_get_themes(); $theme_default = _drush_theme_get_default_theme(); $admin_theme = _drush_theme_get_admin_theme(); $enabled = _drush_theme_get_enabled_themes(); $rows[] = array(dt('Name'), dt('Title'), dt('Default'), dt('Administration')); foreach ($themes as $theme) { if (!in_array($theme->name, $enabled)) { continue; } $default = ($theme->name == $theme_default ? dt('Yes') : dt('No')); $admin = ($theme->name == $admin_theme ? dt('Yes') : dt('No')); $rows[] = array($theme->name, $theme->info['name'], $default, $admin); $pipe[] = $theme->name; } drush_print_table($rows, TRUE); drush_print_pipe(implode(' ', $pipe)); } /** * Implementation of command drush theme-info «theme_name» * * This function prints information about a theme. * * @param $theme_name The machine name of the theme */ function drush_theme_theme_info($theme_name) { $theme = _drush_theme_get_theme($theme_name); drush_print(dt("Name: ") . $theme->name); if (drush_drupal_major_version() > 5) { drush_print(dt("Title: ") . $theme->info['name']); drush_print(dt("Description: ") . $theme->info['description']); drush_print(dt("Version: ") . $theme->info['version']); drush_print(dt("Core: ") . $theme->info['core']); drush_print(dt("PHP: ") . $theme->info['php']); drush_print(dt("Engine: ") . $theme->info['engine']); drush_print(dt("Regions: ") . implode(', ', $theme->info['regions'])); drush_print(dt("Features: ") . implode(', ', $theme->info['features'])); drush_print(dt("Stylesheets: ")); foreach ($theme->info['stylesheets'] as $media => $files) { drush_print(dt("media: ") . $media, 2); drush_print(dt("files: ") . implode(', ', $files), 4); } if (count($theme->info['scripts']) > 0) { drush_print(dt("Scripts: ")); drush_print(dt("files: ") . implode(', ', $theme->info['scripts']), 2); } } else { drush_print(dt("Filename: ") . $theme->filename); drush_print(dt("Description: ") . $theme->description); } } /** * Implementation of command drush theme-set-default «theme_name» * * This function sets «theme_name» as the default theme for the site. It enables * it if not already enabled. * * @param $theme_name The machine name of the theme */ function drush_theme_theme_set_default($theme_name) { _drush_theme_valid_theme_or_die($theme_name); _drush_theme_set_status($theme_name, 1); variable_set('theme_default', $theme_name); drush_log("Setting $theme_name as default theme", "success"); } /** * Implementation of command drush theme-set-admin «theme_name» * * This function sets «theme_name» as the administration theme for the site. * * @param $theme_name The machine name of the theme */ function drush_theme_theme_set_admin($theme_name) { _drush_theme_valid_theme_or_die($theme_name); variable_set('admin_theme', $theme_name); drush_log("Setting $theme_name as admin theme", "success"); } /** * Implementation of command drush theme-enable «theme_name» * * This function enables «theme_name» in the site. * * @param $theme_name The machine name of the theme */ function drush_theme_theme_enable($theme_name) { _drush_theme_valid_theme_or_die($theme_name); _drush_theme_set_status($theme_name, 1); drush_log("Enabling $theme_name", "success"); } /** * Implementation of command drush theme-disable «theme_name» * * This function disables «theme_name» if it is not the default theme for the * site. * * @param $theme_name The machine name of the theme */ function drush_theme_theme_disable($theme_name) { $theme_default = _drush_theme_get_default_theme(); if ($theme_name == $theme_default) { drush_die(dt("!theme_name is the default theme. You must set another theme as default before trying to disable this one.", array('!theme_name' => $theme_name))); } _drush_theme_valid_theme_or_die($theme_name); _drush_theme_set_status($theme_name, 0); drush_log(dt("!theme_name disabled.", array('!theme_name' => $theme_name)), "success"); } /* HELPER FUNCTIONS */ /** * Die if «theme_name» is not an available theme for the site. * * This helper function makes drush die if «theme_name» is not a valid name * of an available theme in the site. * * @param $theme_name The machine name of the theme */ function _drush_theme_valid_theme_or_die($theme_name) { $themes = drush_get_themes(); if (!array_key_exists($theme_name, $themes)) { drush_die(dt("Unknown theme !theme_name.", array('!theme_name' => $theme_name))); } } /** * This helper function returns the theme object for «theme_name». * * @param $theme_name The machine name of the theme */ function _drush_theme_get_theme($theme_name) { _drush_theme_valid_theme_or_die($theme_name); $themes = drush_get_themes(); return $themes[$theme_name]; } /** * This helper function returns the name of the default theme for the site. */ function _drush_theme_get_default_theme() { $theme_default = variable_get('theme_default', 'garland'); return $theme_default; } /** * This helper function returns the name of the administration theme for the site. */ function _drush_theme_get_admin_theme() { $theme_default = _drush_theme_get_default_theme(); $admin_theme = variable_get('admin_theme', $theme_default); return $admin_theme; } /** * This helper function returns the enabled themes' objects. */ function _drush_theme_get_enabled_themes() { $enabled = array(); $themes = drush_get_themes(); foreach ($themes as $theme) { if ($theme->status == 1) { $enabled[] = $theme->name; } } return $enabled; } /** * Enable/Disable a theme in the system table */ function _drush_theme_set_status($theme_name, $status) { if (drush_drupal_major_version() < 7) { db_query("UPDATE {system} SET status = 1 WHERE type = 'theme' and name = '%s'", array($theme_name)); } else { db_update('system') ->fields(array('status' => 1)) ->condition('type', 'theme') ->condition('name', $theme_name) ->execute(); } }