Yaffs site version 1.1
[yaffs-website] / vendor / drush / drush / commands / core / drupal / pm.inc
1 <?php
2
3 use Drush\Log\LogLevel;
4
5 /**
6  * Command callback. Disable one or more extensions.
7  */
8 function _drush_pm_disable($args) {
9   $extension_info = drush_get_extensions();
10
11   // classify $args in themes, modules or unknown.
12   $modules = array();
13   $themes = array();
14   drush_pm_classify_extensions($args, $modules, $themes, $extension_info);
15   $extensions = array_merge($modules, $themes);
16   $unknown = array_diff($args, $extensions);
17
18   // Discard and set an error for each unknown extension.
19   foreach ($unknown as $name) {
20     drush_log('DRUSH_PM_ENABLE_EXTENSION_NOT_FOUND', dt('!extension was not found and will not be disabled.', array('!extension' => $name)), LogLevel::WARNING);
21   }
22
23   // Discard already disabled extensions.
24   foreach ($extensions as $name) {
25     if (!$extension_info[$name]->status) {
26       if ($extension_info[$name]->type == 'module') {
27         unset($modules[$name]);
28       }
29       else {
30         unset($themes[$name]);
31       }
32       drush_log(dt('!extension is already disabled.', array('!extension' => $name)), LogLevel::OK);
33     }
34   }
35
36   // Discard default theme.
37   if (!empty($themes)) {
38     $default_theme = drush_theme_get_default();
39     if (in_array($default_theme, $themes)) {
40       unset($themes[$default_theme]);
41       drush_log(dt('!theme is the default theme and can\'t be disabled.', array('!theme' => $default_theme)), LogLevel::OK);
42     }
43   }
44
45   if (!empty($modules)) {
46     // Add enabled dependents to the list of modules to disable.
47     $dependents = drush_module_dependents($modules, $extension_info);
48     $dependents = array_intersect($dependents, drush_module_list());
49     $modules = array_merge($modules, $dependents);
50
51     // Discard required modules.
52     $required = drush_drupal_required_modules($extension_info);
53     foreach ($required as $module) {
54       if (isset($modules[$module])) {
55         unset($modules[$module]);
56         $info = $extension_info[$module]->info;
57         // No message for hidden modules.
58         if (!isset($info['hidden'])) {
59           $explanation = !empty($info['explanation']) ? ' ' . dt('Reason: !explanation.', array('!explanation' => strip_tags($info['explanation'])))  : '';
60           drush_log(dt('!module is a required module and can\'t be disabled.', array('!module' => $module)) . $explanation, LogLevel::OK);
61         }
62       }
63     }
64   }
65
66   // Inform the user which extensions will finally be disabled.
67   $extensions = array_merge($modules, $themes);
68   if (empty($extensions)) {
69     return drush_log(dt('There were no extensions that could be disabled.'), LogLevel::OK);
70   }
71   else {
72     drush_print(dt('The following extensions will be disabled: !extensions', array('!extensions' => implode(', ', $extensions))));
73     if(!drush_confirm(dt('Do you really want to continue?'))) {
74       return drush_user_abort();
75     }
76   }
77
78   // Disable themes.
79   if (!empty($themes)) {
80     drush_theme_disable($themes);
81   }
82
83   // Disable modules and pass dependency validation in form submit.
84   if (!empty($modules)) {
85     drush_module_disable($modules);
86   }
87
88   // Inform the user of final status.
89   $result_extensions = drush_get_named_extensions_list($extensions);
90   $problem_extensions = array();
91   foreach ($result_extensions as $extension) {
92     if (!$extension->status) {
93       drush_log(dt('!extension was disabled successfully.', array('!extension' => $extension->name)), LogLevel::OK);
94     }
95     else {
96       $problem_extensions[] = $extension->name;
97     }
98   }
99   if (!empty($problem_extensions)) {
100     return drush_set_error('DRUSH_PM_DISABLE_EXTENSION_ISSUE', dt('There was a problem disabling !extension.', array('!extension' => implode(',', $problem_extensions))));
101   }
102 }
103
104 /**
105  * Command callback. Uninstall one or more modules.
106  */
107 function _drush_pm_uninstall($modules) {
108   drush_include_engine('drupal', 'environment');
109   $module_info = drush_get_modules();
110   $required = drush_drupal_required_modules($module_info);
111
112   // Discards modules which are enabled, not found or already uninstalled.
113   foreach ($modules as $key => $module) {
114     if (!isset($module_info[$module])) {
115       // The module does not exist in the system.
116       unset($modules[$key]);
117       drush_log(dt('Module !module was not found and will not be uninstalled.', array('!module' => $module)), LogLevel::WARNING);
118     }
119     else if ($module_info[$module]->status) {
120       // The module is enabled.
121       unset($modules[$key]);
122       drush_log(dt('!module is not disabled. Use `pm-disable` command before `pm-uninstall`.', array('!module' => $module)), LogLevel::WARNING);
123     }
124     else if ($module_info[$module]->schema_version == -1) { // SCHEMA_UNINSTALLED
125       // The module is uninstalled.
126       unset($modules[$key]);
127       drush_log(dt('!module is already uninstalled.', array('!module' => $module)), LogLevel::OK);
128     }
129     else {
130       $dependents = array();
131       foreach (drush_module_dependents(array($module), $module_info) as $dependent) {
132         if (!in_array($dependent, $required) && ($module_info[$dependent]->schema_version != -1)) {
133           $dependents[] = $dependent;
134         }
135       }
136       if (count($dependents)) {
137         drush_log(dt('To uninstall !module, the following modules must be uninstalled first: !required', array('!module' => $module, '!required' => implode(', ', $dependents))), LogLevel::ERROR);
138         unset($modules[$key]);
139       }
140     }
141   }
142
143   // Inform the user which modules will finally be uninstalled.
144   if (empty($modules)) {
145     return drush_log(dt('There were no modules that could be uninstalled.'), LogLevel::OK);
146   }
147   else {
148     drush_print(dt('The following modules will be uninstalled: !modules', array('!modules' => implode(', ', $modules))));
149     if(!drush_confirm(dt('Do you really want to continue?'))) {
150       return drush_user_abort();
151     }
152   }
153
154   // Uninstall the modules.
155   drush_module_uninstall($modules);
156
157   // Inform the user of final status.
158   foreach ($modules as $module) {
159     drush_log(dt('!module was successfully uninstalled.', array('!module' => $module)), LogLevel::OK);
160   }
161 }
162