Chris@0: setValidator([Utils::class, 'validateRequired']); Chris@0: $questions['machine_name'] = new Question('Module machine name'); Chris@0: $questions['machine_name']->setValidator([Utils::class, 'validateMachineName']); Chris@0: return $questions; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns default questions for plugin generators. Chris@0: * Chris@0: * @return \Symfony\Component\Console\Question\Question[] Chris@5: * Array of plugin questions. Chris@0: */ Chris@5: public static function pluginQuestions($class_suffix = '') { Chris@0: $questions['plugin_label'] = new Question('Plugin label', 'Example'); Chris@0: $questions['plugin_label']->setValidator([Utils::class, 'validateRequired']); Chris@0: $questions['plugin_id'] = new Question('Plugin ID', [Utils::class, 'defaultPluginId']); Chris@0: $questions['plugin_id']->setValidator([Utils::class, 'validateMachineName']); Chris@5: $questions['class'] = static::pluginClassQuestion($class_suffix); Chris@0: return $questions; Chris@0: } Chris@0: Chris@0: /** Chris@5: * Creates plugin class question. Chris@5: */ Chris@5: public static function pluginClassQuestion($suffix = '') { Chris@5: $default_class = function ($vars) use ($suffix) { Chris@5: $unprefixed_plugin_id = preg_replace('/^' . $vars['machine_name'] . '_/', '', $vars['plugin_id']); Chris@5: return Utils::camelize($unprefixed_plugin_id) . $suffix; Chris@5: }; Chris@5: return new Question('Plugin class', $default_class); Chris@5: } Chris@5: Chris@5: /** Chris@0: * Returns extension root. Chris@0: * Chris@0: * @return string|bool Chris@0: * Extension root directory or false if it was not found. Chris@0: */ Chris@0: public static function getExtensionRoot($directory) { Chris@0: $extension_root = FALSE; Chris@0: for ($i = 1; $i <= 5; $i++) { Chris@0: $info_file = $directory . '/' . basename($directory) . '.info'; Chris@4: if ((file_exists($info_file) && basename($directory) !== 'drush') || file_exists($info_file . '.yml')) { Chris@0: $extension_root = $directory; Chris@0: break; Chris@0: } Chris@0: $directory = dirname($directory); Chris@0: } Chris@0: return $extension_root; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Removes a given number of lines from the beginning of the string. Chris@0: */ Chris@0: public static function removeHeader($content, $header_size) { Chris@0: return implode("\n", array_slice(explode("\n", $content), $header_size)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Return the user's home directory. Chris@0: */ Chris@0: public static function getHomeDirectory() { Chris@0: return isset($_SERVER['HOME']) ? $_SERVER['HOME'] : getenv('HOME'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Replaces all tokens in a given string with appropriate values. Chris@0: * Chris@0: * @param string $text Chris@0: * A string potentially containing replaceable tokens. Chris@0: * @param array $data Chris@0: * An array where keys are token names and values are replacements. Chris@0: * Chris@0: * @return string Chris@0: * Text with tokens replaced. Chris@0: */ Chris@5: public static function replaceTokens($text, array $data) { Chris@0: $tokens = []; Chris@0: foreach ($data as $var_name => $var) { Chris@0: if (is_string($var)) { Chris@0: $tokens['{' . $var_name . '}'] = $var; Chris@0: } Chris@0: } Chris@0: return str_replace(array_keys($tokens), array_values($tokens), $text); Chris@0: } Chris@0: Chris@4: /** Chris@4: * Pluralizes a noun. Chris@4: * Chris@4: * @param string $string Chris@4: * A noun to pluralize. Chris@4: * Chris@4: * @return string Chris@4: * The pluralized noun. Chris@4: */ Chris@4: public static function pluralize($string) { Chris@4: switch (substr($string, -1)) { Chris@4: case 'y': Chris@4: return substr($string, 0, -1) . 'ies'; Chris@4: Chris@4: case 's': Chris@4: return $string . 'es'; Chris@4: Chris@4: default: Chris@4: return $string . 's'; Chris@4: } Chris@4: } Chris@4: Chris@4: /** Chris@4: * Prepares choices. Chris@4: * Chris@4: * @param array $raw_choices Chris@4: * The choices to be prepared. Chris@4: * Chris@4: * @return array Chris@4: * The prepared choices. Chris@4: */ Chris@4: public static function prepareChoices(array $raw_choices) { Chris@4: // The $raw_choices can be an associative array. Chris@4: $choices = array_values($raw_choices); Chris@4: // Start choices list form '1'. Chris@4: array_unshift($choices, NULL); Chris@4: unset($choices[0]); Chris@4: return $choices; Chris@4: } Chris@4: Chris@0: }