From a662414888bace91b57708447c2ecc09dbfa7de2 Mon Sep 17 00:00:00 2001 From: Manuel Garcia Date: Wed, 2 Mar 2011 21:32:06 +0100 Subject: [PATCH] By Manuel Garcia: Added file which provides a Drush command to revert views overridden in the system. --- views_revert.drush.inc | 147 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 147 insertions(+), 0 deletions(-) create mode 100644 views_revert.drush.inc diff --git a/views_revert.drush.inc b/views_revert.drush.inc new file mode 100644 index 0000000..618017a --- /dev/null +++ b/views_revert.drush.inc @@ -0,0 +1,147 @@ + 'views_revert_views', + 'drupal dependencies' => array('views', ), + 'description' => dt('Revert overridden views to their default state. Make sure to backup first.'), + 'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL, + 'aliases' => array('vr'), + ); + + return $items; +} + +/* + * Callback function for views-revert command + */ +function views_revert_views() { + $views = views_get_all_views(); + $i = 0; + $viewnames = _convert_csv_to_array(func_get_args()); // the provided view names specified in the command + + // find all overridden views + foreach ($views as $view) { + if ($view->disabled) continue; + if ($view->type == dt('Overridden')) { + $overridden[$view->name] = $view->name; + } + } + + // return early if there are no views overridden in the system + if(empty($overridden)) { + return drush_set_error(dt('There are no overridden views in the system.')); + } + + // If the user specified in the command the views to be overridden + if(!empty($viewnames)) { + foreach($viewnames as $key => $viewname) { + $is_overridden = key_exists($viewname, $overridden); + // Check if the provided view name is in the system + if ($viewname && !key_exists($viewname, $views)) { + drush_set_error(dt("'!viewname' view is not present in the system.", array('!viewname' => $viewname))); + } + // Check if the provided view is overridden + else if (!$is_overridden) { + drush_set_error(dt("The view specified '!viewname' is not overridden.", array('!viewname' => $viewname))); + } + // If the view is overriden, revert it + else if($is_overridden){ + views_revert_view($views[$viewname]); + $i++; + } + // We should never get here but well... + else { + drush_set_error(dt("The view specified '!viewname' is not provided in code, and thus cannot be reverted.", array('!viewname' => $viewname))); + } + } + } + + // The user did not specify any views in the command, prompt the user + else { + // list of choices for the user + $overridden[dt('Revert all overridden views')] = dt('Revert all overridden views'); // add a choice at the end + $choice = drush_choice($overridden, 'Enter a number to choose which view to revert.', '!key'); // prompt the user + + if ($choice !== FALSE) { + // revert all views option + if($choice == dt('Revert all overridden views')) { + $i = views_revert_allviews($views); + } + // else the user specified a single view + else { + views_revert_view($views[$choice]); + $i++; + } + } + + } + + // final results output + if($i == 0) { + drush_log(dt('No views were reverted.'), 'ok'); + } + else { + drush_log(dt('Reverted a total of !count views.', array('!count' => $i)), 'ok'); + } +} + +/* + * Reverts all views + * @param $views all views in the system as provided by views_get_all_views(). + */ +function views_revert_allviews($views) { + $i = 0; + foreach ($views as $view) { + if ($view->disabled) continue; + + if ($view->type == t('Overridden')) { + views_revert_view($view); + $i++; + } + } + return $i; +} + +/* + * Revert a specified view + * @param $view the view object to be reverted + * + * Checks on wether or not the view is overridden is handled in views_revert_views_revert() + * We perform a check here anyway in case someone somehow calls this function on their own... + */ +function views_revert_view($view) { + // check anyway just in case + if ($view->type == t('Overridden')) { + //revert the view + $view->delete(); + // clear its cache + views_object_cache_clear('view', $view->name); + // give feedback + $message = 'Reverted the view "'. $view->name .'"'; + drush_log($message, 'success'); + // reverted one more view + } + else{ + drush_set_error(dt("The view '!viewname' is not overridden.", array('!viewname' => $view->name))); + } +} -- 1.7.1