Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / drush / drush / src / Commands / core / StatusCommands.php
diff --git a/vendor/drush/drush/src/Commands/core/StatusCommands.php b/vendor/drush/drush/src/Commands/core/StatusCommands.php
new file mode 100644 (file)
index 0000000..9401a01
--- /dev/null
@@ -0,0 +1,250 @@
+<?php
+
+namespace Drush\Commands\core;
+
+use Consolidation\OutputFormatters\StructuredData\PropertyList;
+use Drupal\Core\StreamWrapper\PrivateStream;
+use Drupal\Core\StreamWrapper\PublicStream;
+use Drush\Boot\BootstrapManager;
+use Drush\Boot\DrupalBoot;
+use Drush\Commands\DrushCommands;
+use Drush\Drush;
+use Drush\Sql\SqlBase;
+use Drush\SiteAlias\SiteAliasManagerAwareInterface;
+use Drush\SiteAlias\SiteAliasManagerAwareTrait;
+use Consolidation\OutputFormatters\Options\FormatterOptions;
+use Consolidation\AnnotatedCommand\CommandData;
+
+class StatusCommands extends DrushCommands implements SiteAliasManagerAwareInterface
+{
+    use SiteAliasManagerAwareTrait;
+
+    /**
+     * An overview of the environment - Drush and Drupal.
+     *
+     * @command core:status
+     * @param $filter A field to filter on. @deprecated - use --field option instead.
+     * @option project A comma delimited list of projects. Their paths will be added to path-aliases section.
+     * @usage drush core-status --field=files
+     *   Emit just one field, not all the default fields.
+     * @usage drush core-status --fields=*
+     *   Emit all fields, not just the default ones.
+     * @aliases status,st,core-status
+     * @table-style compact
+     * @list-delimiter :
+     * @field-labels
+     *   drupal-version: Drupal version
+     *   uri: Site URI
+     *   db-driver: DB driver
+     *   db-hostname: DB hostname
+     *   db-port: DB port
+     *   db-username: DB username
+     *   db-password: DB password
+     *   db-name: DB name
+     *   db-status: Database
+     *   bootstrap: Drupal bootstrap
+     *   theme: Default theme
+     *   admin-theme: Admin theme
+     *   php-bin: PHP binary
+     *   php-conf: PHP config
+     *   php-os: PHP OS
+     *   drush-script: Drush script
+     *   drush-version: Drush version
+     *   drush-temp: Drush temp
+     *   drush-conf: Drush configs
+     *   drush-alias-files: Drush aliases
+     *   alias-searchpaths: Alias search paths
+     *   install-profile: Install profile
+     *   root: Drupal root
+     *   drupal-settings-file: Drupal Settings
+     *   site-path: Site path
+     *   site: Site path
+     *   themes: Themes path
+     *   modules: Modules path
+     *   files: Files, Public
+     *   private: Files, Private
+     *   temp: Files, Temp
+     *   config-sync: Drupal config
+     *   files-path: Files, Public
+     *   temp-path: Files, Temp
+     *   %paths: Other paths
+     * @default-fields drupal-version,uri,db-driver,db-hostname,db-port,db-username,db-name,db-status,bootstrap,theme,admin-theme,php-bin,php-conf,php-os,drush-script,drush-version,drush-temp,drush-conf,install-profile,root,site,files,private,temp
+     * @pipe-format json
+     * @hidden-options project
+     * @bootstrap max
+     * @topics docs:readme
+     *
+     * @return \Consolidation\OutputFormatters\StructuredData\PropertyList
+     */
+    public function status($filter = '', $options = ['project' => self::REQ, 'format' => 'table'])
+    {
+        $data = $this->getPropertyList($options);
+
+        $result = new PropertyList($data);
+        $result->addRendererFunction([$this, 'renderStatusCell']);
+
+        return $result;
+    }
+
+    public function getPropertyList($options)
+    {
+        $boot_manager = Drush::bootstrapManager();
+        $boot_object = Drush::bootstrap();
+        if (($drupal_root = $boot_manager->getRoot()) && ($boot_object instanceof DrupalBoot)) {
+            $status_table['drupal-version'] = $boot_object->getVersion($drupal_root);
+            $conf_dir = $boot_object->confPath();
+            $settings_file = "$conf_dir/settings.php";
+            $status_table['drupal-settings-file'] = file_exists($settings_file) ? $settings_file : '';
+            if ($boot_manager->hasBootstrapped(DRUSH_BOOTSTRAP_DRUPAL_SITE)) {
+                $status_table['uri'] = $boot_manager->getUri();
+                try {
+                    $sql = SqlBase::create($options);
+                    $db_spec = $sql->getDbSpec();
+                    $status_table['db-driver'] = $db_spec['driver'];
+                    if (!empty($db_spec['unix_socket'])) {
+                        $status_table['db-socket'] = $db_spec['unix_socket'];
+                    } elseif (isset($db_spec['host'])) {
+                        $status_table['db-hostname'] = $db_spec['host'];
+                    }
+                    $status_table['db-username'] = isset($db_spec['username']) ? $db_spec['username'] : null;
+                    $status_table['db-password'] = isset($db_spec['password']) ? $db_spec['password'] : null;
+                    $status_table['db-name'] = isset($db_spec['database']) ? $db_spec['database'] : null;
+                    $status_table['db-port'] = isset($db_spec['port']) ? $db_spec['port'] : null;
+                    if ($boot_manager->hasBootstrapped(DRUSH_BOOTSTRAP_DRUPAL_CONFIGURATION)) {
+                        if (method_exists('Drupal', 'installProfile')) {
+                            $status_table['install-profile'] = \Drupal::installProfile();
+                        }
+                        if ($boot_manager->hasBootstrapped(DRUSH_BOOTSTRAP_DRUPAL_DATABASE)) {
+                            $status_table['db-status'] = dt('Connected');
+                            if ($boot_manager->hasBootstrapped(DRUSH_BOOTSTRAP_DRUPAL_FULL)) {
+                                $status_table['bootstrap'] = dt('Successful');
+                            }
+                        }
+                    }
+                } catch (\Exception $e) {
+                    // Don't worry be happy.
+                }
+            }
+            if ($boot_manager->hasBootstrapped(DRUSH_BOOTSTRAP_DRUPAL_FULL)) {
+                $status_table['theme'] = \Drupal::config('system.theme')->get('default');
+                $status_table['admin-theme'] = $theme = \Drupal::config('system.theme')->get('admin') ?: 'seven';
+            }
+        }
+        $status_table['php-bin'] = PHP_BINARY;
+        $status_table['php-os'] = PHP_OS;
+        if ($phpIniFiles = EditCommands::phpIniFiles()) {
+            $status_table['php-conf'] = $phpIniFiles;
+        }
+        $status_table['drush-script'] = DRUSH_COMMAND;
+        $status_table['drush-version'] = Drush::getVersion();
+        $status_table['drush-temp'] = $this->getConfig()->tmp();
+        $status_table['drush-conf'] = Drush::config()->get('runtime.config.paths');
+        // List available alias files
+        $alias_files = $this->siteAliasManager()->listAllFilePaths();
+        sort($alias_files);
+        $status_table['drush-alias-files'] = $alias_files;
+        $alias_searchpaths = $this->siteAliasManager()->searchLocations();
+        $status_table['alias-searchpaths'] = $alias_searchpaths;
+
+        $paths = self::pathAliases($options, $boot_manager, $boot_object);
+        if (!empty($paths)) {
+            foreach ($paths as $target => $one_path) {
+                $name = $target;
+                if (substr($name, 0, 1) == '%') {
+                    $name = substr($name, 1);
+                }
+                $status_table[$name] = $one_path;
+            }
+        }
+
+        // Store the paths into the '%paths' index; this will be
+        // used by other code, but will not be included in the output
+        // of the drush status command.
+        $status_table['%paths'] = $paths;
+
+        return $status_table;
+    }
+
+    public function renderStatusCell($key, $cellData, FormatterOptions $options)
+    {
+        if (is_array($cellData)) {
+            return implode("\n", $cellData);
+        }
+        return $cellData;
+    }
+
+    /**
+     * @hook pre-command core-status
+     */
+    public function adjustStatusOptions(CommandData $commandData)
+    {
+        $input = $commandData->input();
+        $args = $input->getArguments();
+        if (!empty($args['filter'])) {
+            $input->setOption('fields', '*' . $args['filter'] . '*');
+        }
+    }
+
+    /**
+     * @param array $options
+     * @param BootstrapManager $boot_manager
+     * @return array
+     */
+    public static function pathAliases(array $options, BootstrapManager $boot_manager, $boot)
+    {
+        $paths = [];
+        $site_wide = 'sites/all';
+        if ($drupal_root = $boot_manager->getRoot()) {
+            $paths['%root'] = $drupal_root;
+            if (($boot instanceof DrupalBoot) && ($site_root = $boot->confPath())) {
+                $paths['%site'] = $site_root;
+                if (is_dir($modules_path = $site_root . '/modules')) {
+                    $paths['%modules'] = $modules_path;
+                } else {
+                    $paths['%modules'] = ltrim($site_wide . '/modules', '/');
+                }
+                if (is_dir($themes_path = $site_root . '/themes')) {
+                    $paths['%themes'] = $themes_path;
+                } else {
+                    $paths['%themes'] = ltrim($site_wide . '/themes', '/');
+                }
+                if ($boot_manager->hasBootstrapped(DRUSH_BOOTSTRAP_DRUPAL_CONFIGURATION)) {
+                    try {
+                        if (isset($GLOBALS['config_directories'])) {
+                            foreach ($GLOBALS['config_directories'] as $label => $unused) {
+                                $paths["%config-$label"] = config_get_config_directory($label);
+                            }
+                        }
+                    } catch (\Exception $e) {
+                        // Nothing to do.
+                    }
+                }
+
+                if ($boot_manager->hasBootstrapped(DRUSH_BOOTSTRAP_DRUPAL_FULL)) {
+                    $paths['%files'] = PublicStream::basePath();
+                    $paths['%temp'] = file_directory_temp();
+                    if ($private_path = PrivateStream::basePath()) {
+                        $paths['%private'] = $private_path;
+                    }
+
+                    $modules = \Drupal::moduleHandler()->getModuleList();
+                    $themes = \Drupal::service('theme_handler')->listInfo();
+                    $projects = array_merge($modules, $themes);
+                    foreach (explode(',', $options['project']) as $target) {
+                        if (array_key_exists($target, $projects)) {
+                            $paths['%' . $target] = $drupal_root . '/' . $projects[$target]->getPath();
+                        }
+                    }
+                }
+            }
+        }
+
+        // Add in all of the global paths from $options['path-aliases']
+        // @todo is this used?
+        if (isset($options['path-aliases'])) {
+            $paths = array_merge($paths, $options['path-aliases']);
+        }
+
+        return $paths;
+    }
+}