devel_generate.drush.inc 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <?php
  2. /**
  3. * @file
  4. * Generate content, taxonomy, menu, and users via drush framework.
  5. */
  6. use Drupal\devel_generate\DevelGenerateBaseInterface;
  7. use Drupal\devel_generate\DevelGeneratePluginManager;
  8. /**
  9. * Implementation of hook_drush_command().
  10. */
  11. function devel_generate_drush_command() {
  12. $items['generate-users'] = array(
  13. 'callback' => 'drush_devel_generate',
  14. 'callback arguments' => array(
  15. 'plugin_id' => 'user',
  16. ),
  17. 'description' => 'Create users.',
  18. 'arguments' => array(
  19. 'num' => 'Number of users to generate.',
  20. ),
  21. 'options' => array(
  22. 'kill' => 'Delete all users before generating new ones.',
  23. 'roles' => 'A comma delimited list of role IDs which should be granted to the new users. No need to specify authenticated user role.',
  24. 'pass' => 'Specify a password to be set for all generated users.',
  25. ),
  26. 'aliases' => array('genu'),
  27. );
  28. $items['generate-terms'] = array(
  29. 'callback' => 'drush_devel_generate',
  30. 'callback arguments' => array(
  31. 'plugin_id' => 'term',
  32. ),
  33. 'description' => 'Create terms in specified vocabulary.',
  34. 'arguments' => array(
  35. 'machine_name' => 'Vocabulary machine name into which new terms will be inserted.',
  36. 'num' => 'Number of terms to insert. Defaults to 10.',
  37. ),
  38. 'options' => array(
  39. 'kill' => 'Delete all terms in specified vocabulary before generating.',
  40. 'feedback' => 'An integer representing interval for insertion rate logging. Defaults to 1000',
  41. 'pipe' => 'Returns the list of generated terms, one per line.',
  42. ),
  43. 'aliases' => array('gent'),
  44. );
  45. $items['generate-vocabs'] = array(
  46. 'callback' => 'drush_devel_generate',
  47. 'callback arguments' => array(
  48. 'plugin_id' => 'vocabulary',
  49. ),
  50. 'description' => 'Create vocabularies.',
  51. 'arguments' => array(
  52. 'num' => 'Number of vocabularies to create. Defaults to 1.',
  53. ),
  54. 'options' => array(
  55. 'kill' => 'Delete all vocabularies before generating.',
  56. 'pipe' => 'Returns the list of generated vocabularies, one per line.',
  57. ),
  58. 'aliases' => array('genv'),
  59. );
  60. $items['generate-content'] = array(
  61. 'callback' => 'drush_devel_generate',
  62. 'callback arguments' => array(
  63. 'plugin_id' => 'content',
  64. ),
  65. 'description' => 'Create content.',
  66. 'drupal dependencies' => array('devel_generate'),
  67. 'arguments' => array(
  68. 'num' => 'Number of nodes to generate.',
  69. 'max_comments' => 'Maximum number of comments to generate.',
  70. ),
  71. 'options' => array(
  72. 'kill' => 'Delete all content before generating new content.',
  73. 'types' => 'A comma delimited list of content types to create. Defaults to page,article.',
  74. 'feedback' => 'An integer representing interval for insertion rate logging. Defaults to 1000',
  75. 'skip-fields' => 'A comma delimited list of fields to omit when generating random values',
  76. 'languages' => 'A comma-separated list of language codes',
  77. ),
  78. 'aliases' => array('genc'),
  79. );
  80. $items['generate-menus'] = array(
  81. 'callback' => 'drush_devel_generate',
  82. 'callback arguments' => array(
  83. 'plugin_id' => 'menu',
  84. ),
  85. 'description' => 'Create menus and menu items.',
  86. 'drupal dependencies' => array('devel_generate'), // Remove these once devel.module is moved down a directory. http://drupal.org/node/925246
  87. 'arguments' => array(
  88. 'number_menus' => 'Number of menus to generate. Defaults to 2.',
  89. 'number_links' => 'Number of links to generate. Defaults to 50.',
  90. 'max_depth' => 'Max link depth. Defaults to 3',
  91. 'max_width' => 'Max width of first level of links. Defaults to 8.',
  92. ),
  93. 'options' => array(
  94. 'kill' => 'Delete all previously generated menus and links before generating new menus and links.',
  95. 'pipe' => 'Returns the list of generated menus, one per line.',
  96. ),
  97. 'aliases' => array('genm'),
  98. );
  99. return $items;
  100. }
  101. /**
  102. * Implements drush_hook_COMMAND_validate().
  103. */
  104. function drush_devel_generate_generate_users_validate() {
  105. //Array of "Callback arguments" and "command line args".
  106. $params = func_get_args();
  107. _drush_plugin_validate($params);
  108. }
  109. /**
  110. * Implements drush_hook_COMMAND_validate().
  111. */
  112. function drush_devel_generate_generate_terms_validate() {
  113. //Array of "Callback arguments" and "command line args".
  114. $params = func_get_args();
  115. _drush_plugin_validate($params);
  116. }
  117. /**
  118. * Implements drush_hook_COMMAND_validate().
  119. */
  120. function drush_devel_generate_generate_vocabs_validate() {
  121. //Array of "Callback arguments" and "command line args".
  122. $params = func_get_args();
  123. _drush_plugin_validate($params);
  124. }
  125. /**
  126. * Implements drush_hook_COMMAND_validate().
  127. */
  128. function drush_devel_generate_generate_content_validate() {
  129. //Array of "Callback arguments" and "command line args".
  130. $params = func_get_args();
  131. _drush_plugin_validate($params);
  132. }
  133. /**
  134. * Implements drush_hook_COMMAND_validate().
  135. */
  136. function drush_devel_generate_generate_menus_validate() {
  137. //Array of "Callback arguments" and "command line args".
  138. $params = func_get_args();
  139. _drush_plugin_validate($params);
  140. }
  141. /**
  142. * Helper function which returns an array with a plugin instance
  143. * for a given id and the validated values ready to be used by
  144. * the generate() function of the plugin.
  145. */
  146. function _drush_plugin_validate($params) {
  147. $instance_and_values = &drupal_static('drush_devel_generate_generate_validate');
  148. //Getting plugin_id and leaving the command line args
  149. $plugin_id = array_shift($params);
  150. if (!isset($instance_and_values[$plugin_id])) {
  151. /** @var DevelGeneratePluginManager $manager */
  152. $manager = \Drupal::service('plugin.manager.develgenerate');
  153. /** @var DevelGenerateBaseInterface $instance */
  154. $instance = $manager->createInstance($plugin_id, array());
  155. //Plugin instance suit params in order to fit for generateElements
  156. $values = $instance->validateDrushParams($params);
  157. $instance_and_values[$plugin_id]['instance'] = $instance;
  158. $instance_and_values[$plugin_id]['values'] = $values;
  159. }
  160. return $instance_and_values[$plugin_id];
  161. }
  162. /**
  163. * Command callback. Generate a number of elements.
  164. */
  165. function drush_devel_generate() {
  166. $params = func_get_args();
  167. $plugin_id = array_shift($params);
  168. $instance_and_values = drupal_static('drush_devel_generate_generate_validate');
  169. /** @var DevelGenerateBaseInterface $instance */
  170. $instance = $instance_and_values[$plugin_id]['instance'];
  171. $values = $instance_and_values[$plugin_id]['values'];
  172. $instance->generate($values);
  173. }