5 * pm-info command implementation.
8 use Drush\Log\LogLevel;
11 * Command callback. Show detailed info for one or more extensions.
13 function drush_pm_info() {
15 $args = pm_parse_arguments(func_get_args());
17 $extension_info = drush_get_extensions(FALSE);
18 _drush_pm_expand_extensions($args, $extension_info);
19 // If no extensions are provided, show all.
20 if (count($args) == 0) {
21 $args = array_keys($extension_info);
24 foreach ($args as $extension) {
25 if (isset($extension_info[$extension])) {
26 $info = $extension_info[$extension];
29 drush_log(dt('!extension was not found.', array('!extension' => $extension)), LogLevel::WARNING);
32 if (drush_extension_get_type($info) == 'module') {
33 $data = _drush_pm_info_module($info);
36 $data = _drush_pm_info_theme($info);
38 $result[$extension] = $data;
44 * Output format formatter-filter callback.
46 * @see drush_parse_command()
47 * @see drush_outputformat
49 function _drush_pm_info_format_table_data($data) {
51 foreach ($data as $extension => $info) {
52 foreach($info as $key => $value) {
53 if (is_array($value)) {
58 $value = implode(', ', $value);
61 $result[$extension][$key] = $value;
68 * Return an array with general info of an extension.
70 function _drush_pm_info_extension($info) {
71 $data['extension'] = drush_extension_get_name($info);
72 $data['project'] = isset($info->info['project'])?$info->info['project']:dt('Unknown');
73 $data['type'] = drush_extension_get_type($info);
74 $data['title'] = $info->info['name'];
75 $data['config'] = isset($info->info['configure']) ? $info->info['configure'] : dt('None');
76 $data['description'] = $info->info['description'];
77 $data['version'] = $info->info['version'];
78 $data['date'] = isset($info->info['datestamp']) ? format_date($info->info['datestamp'], 'custom', 'Y-m-d') : NULL;
79 $data['package'] = $info->info['package'];
80 $data['core'] = $info->info['core'];
81 $data['php'] = $info->info['php'];
82 $data['status'] = drush_get_extension_status($info);
83 $data['path'] = drush_extension_get_path($info);
89 * Return an array with info of a module.
91 function _drush_pm_info_module($info) {
92 $major_version = drush_drupal_major_version();
94 $data = _drush_pm_info_extension($info);
95 if ($info->schema_version > 0) {
96 $schema_version = $info->schema_version;
98 elseif ($info->schema_version == -1) {
99 $schema_version = "no schema installed";
102 $schema_version = "module has no schema";
104 $data['schema_version'] = $schema_version;
105 if ($major_version == 7) {
106 $data['files'] = $info->info['files'];
108 $data['requires'] = $info->info['dependencies'];
110 if ($major_version == 6) {
111 $requiredby = $info->info['dependents'];
114 $requiredby = array_keys($info->required_by);
116 $data['required_by'] = $requiredby;
117 if ($info->status == 1) {
118 $role = drush_role_get_class();
119 $data['permissions'] = $role->getModulePerms(drush_extension_get_name($info));
125 * Return an array with info of a theme.
127 function _drush_pm_info_theme($info) {
128 $major_version = drush_drupal_major_version();
130 $data = _drush_pm_info_extension($info);
132 $data['core'] = $info->info['core'];
133 $data['php'] = $info->info['php'];
134 $data['engine'] = $info->info['engine'];
135 $data['base_theme'] = isset($info->base_themes) ? implode($info->base_themes, ', ') : '';
136 $regions = $info->info['regions'];
137 $data['regions'] = $regions;
138 $features = $info->info['features'];
139 $data['features'] = $features;
140 if (count($info->info['stylesheets']) > 0) {
141 $data['stylesheets'] = '';
142 foreach ($info->info['stylesheets'] as $media => $files) {
143 $files = array_keys($files);
144 $data['media '.$media] = $files;
147 if (count($info->info['scripts']) > 0) {
148 $scripts = array_keys($info->info['scripts']);
149 $data['scripts'] = $scripts;