source: sipes/modules_contrib/views/views_revert.drush.inc @ 65dadeb

stableversion-3.0
Last change on this file since 65dadeb was 177a560, checked in by José Gregorio Puentes <jpuentes@…>, 8 años ago

se agrego el directorio de modulos contribuidos de drupal

  • Propiedad mode establecida a 100644
File size: 4.3 KB
Línea 
1<?php
2/**
3 * @file
4 * views-revert - Drush command to revert views overridden in the system.
5 */
6
7/**
8 * Implement hook_drush_help().
9 */
10function views_revert_drush_help($section) {
11  switch ($section) {
12    case 'drush:revert-views':
13      return dt('Reverts all views in the drupal installation that have been overriden. Careful, use with care.');
14  }
15}
16
17/**
18 * Implement hook_drush_command().
19 */
20function views_revert_drush_command() {
21  $items = array();
22
23  $items['views-revert'] = array(
24    'callback' => 'views_revert_views',
25    'drupal dependencies' => array('views'),
26    'description' => dt('Revert overridden views to their default state. Make sure to backup first.'),
27    'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL,
28    'aliases' => array('vr'),
29  );
30
31  return $items;
32}
33
34/**
35 * Callback function for views-revert command.
36 */
37function views_revert_views() {
38  $views = views_get_all_views();
39  $i = 0;
40  // The provided view names specified in the command.
41  $viewnames = _convert_csv_to_array(func_get_args());
42
43  // Find all overridden views.
44  foreach ($views as $view) {
45    if ($view->disabled) {
46      continue;
47    }
48    if ($view->type == dt('Overridden')) {
49      $overridden[$view->name] = $view->name;
50    }
51  }
52
53  // Return early if there are no views overridden in the system.
54  if (empty($overridden)) {
55    return drush_set_error(dt('There are no overridden views in the system.'));
56  }
57
58  // If the user specified in the command the views to be overridden.
59  if (!empty($viewnames)) {
60    foreach ($viewnames as $key => $viewname) {
61      $is_overridden = key_exists($viewname, $overridden);
62      // Check if the provided view name is in the system
63      if ($viewname && !key_exists($viewname, $views)) {
64        drush_set_error(dt("'@viewname' view is not present in the system.", array('@viewname' => $viewname)));
65      }
66      // Check if the provided view is overridden.
67      elseif (!$is_overridden) {
68        drush_set_error(dt("The view specified '@viewname' is not overridden.", array('@viewname' => $viewname)));
69      }
70      // If the view is overriden, revert it.
71      elseif ($is_overridden){
72        views_revert_view($views[$viewname]);
73        $i++;
74      }
75      // We should never get here but well...
76      else {
77        drush_set_error(dt("The view specified '@viewname' is not provided in code, and thus cannot be reverted.", array('@viewname' => $viewname)));
78      }
79    }
80  }
81
82  // The user did not specify any views in the command, prompt the user
83  else {
84    // list of choices for the user
85    $overridden['all'] = dt('Revert all overridden views'); // add a choice at the end
86    $choice = drush_choice($overridden, 'Enter a number to choose which view to revert.', '!key'); // prompt the user
87
88    if ($choice !== FALSE) {
89      // revert all views option
90      if ($choice == 'all') {
91        $i = views_revert_allviews($views);
92      }
93      // else the user specified a single view
94      else {
95        views_revert_view($views[$choice]);
96        $i++;
97      }
98    }
99
100  }
101
102  // final results output
103  if ($i == 0) {
104    drush_log(dt('No views were reverted.'), 'ok');
105  }
106  else {
107    drush_log(dt('Reverted a total of @count views.', array('@count' => $i)), 'ok');
108  }
109}
110
111/**
112 * Reverts all views
113 * @param $views
114 * All views in the system as provided by views_get_all_views().
115 */
116function views_revert_allviews($views) {
117  $i = 0;
118  foreach ($views as $view) {
119    if ($view->disabled) {
120      continue;
121    }
122
123    if ($view->type == t('Overridden')) {
124      views_revert_view($view);
125      $i++;
126    }
127  }
128  return $i;
129}
130
131/**
132 * Revert a specified view
133 * @param $view
134 * The view object to be reverted
135 *
136 * Checks on wether or not the view is overridden is handled in views_revert_views_revert()
137 * We perform a check here anyway in case someone somehow calls this function on their own...
138 */
139function views_revert_view($view) {
140  // check anyway just in case
141  if ($view->type == t('Overridden')) {
142    // Revert the view.
143    $view->delete();
144    // Clear its cache.
145    views_object_cache_clear('view', $view->name);
146    // Give feedback.
147    $message = dt("Reverted the view '@viewname'", array('@viewname' => $view->name));
148    drush_log($message, 'success');
149    // Reverted one more view.
150  }
151  else {
152    drush_set_error(dt("The view '@viewname' is not overridden.", array('@viewname' => $view->name)));
153  }
154}
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.