Version 1
[yaffs-website] / vendor / drush / drush / commands / core / topic.drush.inc
diff --git a/vendor/drush/drush/commands/core/topic.drush.inc b/vendor/drush/drush/commands/core/topic.drush.inc
new file mode 100644 (file)
index 0000000..4f87f70
--- /dev/null
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * @file
+ *   Topic command and associated hooks.
+ */
+
+/**
+ * Implementation of hook_drush_command().
+ *
+ * @return
+ *   An associative array describing your command(s).
+ */
+function topic_drush_command() {
+  $items['core-topic'] = array(
+    'description' => 'Read detailed documentation on a given topic.',
+    'arguments' => array(
+      'topic name' => 'The name of the topic you wish to view. If omitted, list all topic descriptions (and names in parenthesis).',
+    ),
+    'examples' => array(
+      'drush topic' => 'Show all available topics.',
+      'drush topic docs-context' => 'Show documentation for the drush context API',
+      'drush docs-context' => 'Show documentation for the drush context API',
+    ),
+    'bootstrap' => DRUSH_BOOTSTRAP_NONE,
+    'remote-tty' => TRUE,
+    'aliases' => array('topic'),
+    'topics' => array('docs-readme'),
+  );
+
+  return $items;
+}
+
+/**
+ * Implement hook_drush_help_alter(). Show 'Topics' section on help detail.
+ */
+function topic_drush_help_alter(&$command) {
+  $implemented = drush_get_commands();
+  foreach ($command['topics'] as $topic_name) {
+    // We have a related topic. Inject into the $command so the topic displays.
+    $command['sections']['topic_section'] = 'Topics';
+    $command['topic_section'][$topic_name] = $implemented[$topic_name]['description'];
+  }
+}
+
+/**
+ * A command callback.
+ *
+ * Show a choice list of available topics and then dispatch to the respective command.
+ *
+ * @param string $topic_name
+ *   A command name.
+ */
+function drush_topic_core_topic($topic_name = NULL) {
+  $commands = drush_get_commands();
+  $topics = drush_get_topics();
+  if (isset($topic_name)) {
+    foreach (drush_get_topics() as $key => $topic) {
+      if (strstr($key, $topic_name) === FALSE) {
+        unset($topics[$key]);
+      }
+    }
+  }
+  if (empty($topics)) {
+    return drush_set_error('DRUSH_NO_SUCH_TOPIC', dt("No topics on !topic found.", array('!topic' => $topic_name)));
+  }
+  if (count($topics) > 1) {
+    // Show choice list.
+    foreach ($topics as $key => $topic) {
+      $choices[$key] = $topic['description'];
+    }
+    natcasesort($choices);
+    if (!$topic_name = drush_choice($choices, dt('Choose a topic'), '!value (!key)', array(5))) {
+      return drush_user_abort();
+    }
+  }
+  else {
+    $keys = array_keys($topics);
+    $topic_name = array_pop($keys);
+  }
+  return drush_dispatch($commands[$topic_name]);
+}
+
+/**
+ * A command argument complete callback.
+ *
+ * @return
+ *   Available topic keys.
+ */
+function topic_core_topic_complete() {
+  return array('values' => array_keys(drush_get_topics()));
+}
+
+/**
+ * Retrieve all defined topics
+ */
+function drush_get_topics() {
+  $commands = drush_get_commands();
+  foreach ($commands as $key => $command) {
+    if (!empty($command['topic']) && empty($command['is_alias'])) {
+      $topics[$key] = $command;
+    }
+  }
+  return $topics;
+}