Пример #1
0
 function get_longdesc()
 {
     $binding = array();
     foreach (\WP_CLI::get_configurator()->get_spec() as $key => $details) {
         if (false === $details['runtime']) {
             continue;
         }
         if (isset($details['deprecated'])) {
             continue;
         }
         if (true === $details['runtime']) {
             $synopsis = "--[no-]{$key}";
         } else {
             $synopsis = "--{$key}" . $details['runtime'];
         }
         $binding['parameters'][] = array('synopsis' => $synopsis, 'desc' => $details['desc']);
     }
     return Utils\mustache_render('man-params.mustache', $binding);
 }
Пример #2
0
 /**
  * Generate a wp-config.php file.
  *
  * ## OPTIONS
  *
  * --dbname=<dbname>
  * : Set the database name.
  *
  * --dbuser=<dbuser>
  * : Set the database user.
  *
  * [--dbpass=<dbpass>]
  * : Set the database user password.
  *
  * [--dbhost=<dbhost>]
  * : Set the database host. Default: 'localhost'
  *
  * [--dbprefix=<dbprefix>]
  * : Set the database table prefix. Default: 'wp_'
  *
  * [--dbcharset=<dbcharset>]
  * : Set the database charset. Default: 'utf8'
  *
  * [--dbcollate=<dbcollate>]
  * : Set the database collation. Default: ''
  *
  * [--locale=<locale>]
  * : Set the WPLANG constant. Defaults to $wp_local_package variable.
  *
  * [--extra-php]
  * : If set, the command copies additional PHP code into wp-config.php from STDIN.
  *
  * [--skip-salts]
  * : If set, keys and salts won't be generated, but should instead be passed via `--extra-php`.
  *
  * [--skip-check]
  * : If set, the database connection is not checked.
  *
  * ## EXAMPLES
  *
  *     # Standard wp-config.php file
  *     wp core config --dbname=testing --dbuser=wp --dbpass=securepswd --locale=ro_RO
  *
  *     # Enable WP_DEBUG and WP_DEBUG_LOG
  *     wp core config --dbname=testing --dbuser=wp --dbpass=securepswd --extra-php <<PHP
  *     define( 'WP_DEBUG', true );
  *     define( 'WP_DEBUG_LOG', true );
  *     PHP
  */
 public function config($_, $assoc_args)
 {
     if (Utils\locate_wp_config()) {
         WP_CLI::error("The 'wp-config.php' file already exists.");
     }
     $defaults = array('dbhost' => 'localhost', 'dbpass' => '', 'dbprefix' => 'wp_', 'dbcharset' => 'utf8', 'dbcollate' => '', 'locale' => self::get_initial_locale());
     $assoc_args = array_merge($defaults, $assoc_args);
     if (preg_match('|[^a-z0-9_]|i', $assoc_args['dbprefix'])) {
         WP_CLI::error('--dbprefix can only contain numbers, letters, and underscores.');
     }
     // Check DB connection
     if (!isset($assoc_args['skip-check'])) {
         Utils\run_mysql_command('mysql --no-defaults', array('execute' => ';', 'host' => $assoc_args['dbhost'], 'user' => $assoc_args['dbuser'], 'pass' => $assoc_args['dbpass']));
     }
     if (isset($assoc_args['extra-php']) && $assoc_args['extra-php'] === true) {
         $assoc_args['extra-php'] = file_get_contents('php://stdin');
     }
     // TODO: adapt more resilient code from wp-admin/setup-config.php
     if (!isset($assoc_args['skip-salts'])) {
         $assoc_args['keys-and-salts'] = self::_read('https://api.wordpress.org/secret-key/1.1/salt/');
     }
     $out = Utils\mustache_render('wp-config.mustache', $assoc_args);
     $bytes_written = file_put_contents(ABSPATH . 'wp-config.php', $out);
     if (!$bytes_written) {
         WP_CLI::error('Could not create new wp-config.php file.');
     } else {
         WP_CLI::success('Generated wp-config.php file.');
     }
 }
Пример #3
0
 private static function get_initial_markdown($command)
 {
     $name = implode(' ', Dispatcher\get_path($command));
     $binding = array('name' => $name, 'shortdesc' => $command->get_shortdesc());
     $binding['synopsis'] = wordwrap("{$name} " . $command->get_synopsis(), 79);
     $alias = $command->get_alias();
     if ($alias) {
         $binding['alias'] = $alias;
     }
     if ($command->can_have_subcommands()) {
         $binding['has-subcommands']['subcommands'] = self::render_subcommands($command);
     }
     return Utils\mustache_render('man.mustache', $binding);
 }
Пример #4
0
 /**
  * Generate files needed for running PHPUnit tests.
  *
  * ## DESCRIPTION
  *
  * These are the files that are generated:
  *
  * * `phpunit.xml` is the configuration file for PHPUnit
  * * `.travis.yml` is the configuration file for Travis CI
  * * `tests/bootstrap.php` is the file that makes the current plugin active when running the test suite
  * * `tests/test-sample.php` is a sample file containing the actual tests
  *
  * ## ENVIRONMENT
  *
  * The `tests/bootstrap.php` file looks for the WP_TESTS_DIR environment
  * variable.
  *
  * ## OPTIONS
  *
  * [<plugin>]
  * : The name of the plugin to generate test files for.
  *
  * [--dir=<dirname>]
  * : Generate test files for a non-standard plugin path. If no plugin slug is specified, the directory name is used.
  *
  * ## EXAMPLE
  *
  *     wp scaffold plugin-tests hello
  *
  * @subcommand plugin-tests
  */
 function plugin_tests($args, $assoc_args)
 {
     $wp_filesystem = $this->init_wp_filesystem();
     if (!empty($args[0])) {
         $plugin_slug = $args[0];
         $plugin_dir = WP_PLUGIN_DIR . "/{$plugin_slug}";
     }
     if (!empty($assoc_args['dir'])) {
         $plugin_dir = $assoc_args['dir'];
         if (!is_dir($plugin_dir)) {
             WP_CLI::error('Invalid plugin directory specified.');
         }
         if (empty($plugin_slug)) {
             $plugin_slug = basename($plugin_dir);
         }
     }
     if (empty($plugin_slug) || empty($plugin_dir)) {
         WP_CLI::error('Invalid plugin specified.');
     }
     $tests_dir = "{$plugin_dir}/tests";
     $bin_dir = "{$plugin_dir}/bin";
     $wp_filesystem->mkdir($tests_dir);
     $wp_filesystem->mkdir($bin_dir);
     $this->create_file("{$tests_dir}/bootstrap.php", Utils\mustache_render('bootstrap.mustache', compact('plugin_slug')));
     $to_copy = array('install-wp-tests.sh' => $bin_dir, '.travis.yml' => $plugin_dir, 'phpunit.xml' => $plugin_dir, 'test-sample.php' => $tests_dir);
     foreach ($to_copy as $file => $dir) {
         $wp_filesystem->copy(WP_CLI_ROOT . "/templates/{$file}", "{$dir}/{$file}", true);
         if ('install-wp-tests.sh' === $file) {
             if (!$wp_filesystem->chmod("{$dir}/{$file}", 0755)) {
                 WP_CLI::warning("Couldn't mark install-wp-tests.sh as executable.");
             }
         }
     }
     WP_CLI::success("Created test files.");
 }
Пример #5
0
 /**
  * Generate files needed for running PHPUnit tests.
  *
  * ## OVERVIEW
  *
  * The following files are generated for your plugin by this command:
  *
  * * `phpunit.xml.dist` is the configuration file for PHPUnit.
  * * `.travis.yml` is the configuration file for Travis CI.
  * * `bin/install-wp-tests.sh` configures the WordPress test suite and a test database.
  * * `tests/bootstrap.php` is the file that makes the current plugin active when running the test suite.
  * * `tests/test-sample.php` is a sample file containing the actual tests.
  *
  * Learn more from the [plugin unit tests documentation](http://wp-cli.org/docs/plugin-unit-tests/).
  *
  * ## ENVIRONMENT
  *
  * The `tests/bootstrap.php` file looks for the WP_TESTS_DIR environment
  * variable.
  *
  * ## OPTIONS
  *
  * [<plugin>]
  * : The name of the plugin to generate test files for.
  *
  * [--dir=<dirname>]
  * : Generate test files for a non-standard plugin path. If no plugin slug is specified, the directory name is used.
  *
  * [--force]
  * : Overwrite files that already exist.
  *
  * ## EXAMPLE
  *
  *     wp scaffold plugin-tests hello
  *
  * @subcommand plugin-tests
  */
 function plugin_tests($args, $assoc_args)
 {
     $wp_filesystem = $this->init_wp_filesystem();
     if (!empty($args[0])) {
         $plugin_slug = $args[0];
         $plugin_dir = WP_PLUGIN_DIR . "/{$plugin_slug}";
         if (empty($assoc_args['dir']) && !is_dir($plugin_dir)) {
             WP_CLI::error('Invalid plugin slug specified.');
         }
     }
     if (!empty($assoc_args['dir'])) {
         $plugin_dir = $assoc_args['dir'];
         if (!is_dir($plugin_dir)) {
             WP_CLI::error('Invalid plugin directory specified.');
         }
         if (empty($plugin_slug)) {
             $plugin_slug = basename($plugin_dir);
         }
     }
     if (empty($plugin_slug) || empty($plugin_dir)) {
         WP_CLI::error('Invalid plugin specified.');
     }
     $plugin_name = ucwords(str_replace('-', ' ', $plugin_slug));
     $plugin_package = str_replace(' ', '_', $plugin_name);
     $tests_dir = "{$plugin_dir}/tests";
     $bin_dir = "{$plugin_dir}/bin";
     $wp_filesystem->mkdir($tests_dir);
     $wp_filesystem->mkdir($bin_dir);
     $wp_versions_to_test = array('latest');
     // Parse plugin readme.txt
     if (file_exists($plugin_dir . '/readme.txt')) {
         $readme_content = file_get_contents($plugin_dir . '/readme.txt');
         preg_match('/Requires at least\\:(.*)\\n/m', $readme_content, $matches);
         if (isset($matches[1]) && $matches[1]) {
             $wp_versions_to_test[] = trim($matches[1]);
         }
         preg_match('/Tested up to\\:(.*)\\n/m', $readme_content, $matches);
         if (isset($matches[1]) && $matches[1]) {
             $wp_versions_to_test[] = trim($matches[1]);
         }
     }
     $plugin_data = array('plugin_slug' => $plugin_slug, 'plugin_package' => $plugin_package);
     $force = \WP_CLI\Utils\get_flag_value($assoc_args, 'force');
     $files_written = $this->create_files(array("{$tests_dir}/bootstrap.php" => Utils\mustache_render('bootstrap.mustache', $plugin_data), "{$tests_dir}/test-sample.php" => Utils\mustache_render('test-sample.mustache', $plugin_data), "{$plugin_dir}/.travis.yml" => Utils\mustache_render('.travis.mustache', compact('wp_versions_to_test'))), $force);
     $to_copy = array('install-wp-tests.sh' => $bin_dir, 'phpunit.xml.dist' => $plugin_dir);
     foreach ($to_copy as $file => $dir) {
         $file_name = "{$dir}/{$file}";
         $force = \WP_CLI\Utils\get_flag_value($assoc_args, 'force');
         $should_write_file = $this->prompt_if_files_will_be_overwritten($file_name, $force);
         if (!$should_write_file) {
             continue;
         }
         $files_written[] = $file_name;
         $wp_filesystem->copy(WP_CLI_ROOT . "/templates/{$file}", $file_name, true);
         if ('install-wp-tests.sh' === $file) {
             if (!$wp_filesystem->chmod("{$dir}/{$file}", 0755)) {
                 WP_CLI::warning("Couldn't mark install-wp-tests.sh as executable.");
             }
         }
     }
     $this->log_whether_files_written($files_written, $skip_message = 'All test files were skipped.', $success_message = 'Created test files.');
 }
Пример #6
0
 protected function get_global_params($root_command = false)
 {
     $binding = array();
     $binding['root_command'] = $root_command;
     if (!$this->can_have_subcommands() || is_object($this->parent) && get_class($this->parent) == 'WP_CLI\\Dispatcher\\CompositeCommand') {
         $binding['is_subcommand'] = true;
     }
     foreach (\WP_CLI::get_configurator()->get_spec() as $key => $details) {
         if (false === $details['runtime']) {
             continue;
         }
         if (isset($details['deprecated'])) {
             continue;
         }
         if (isset($details['hidden'])) {
             continue;
         }
         if (true === $details['runtime']) {
             $synopsis = "--[no-]{$key}";
         } else {
             $synopsis = "--{$key}" . $details['runtime'];
         }
         $binding['parameters'][] = array('synopsis' => $synopsis, 'desc' => $details['desc']);
     }
     if ($this->get_subcommands()) {
         $binding['has_subcommands'] = true;
     }
     return Utils\mustache_render('man-params.mustache', $binding);
 }
Пример #7
0
 /**
  * Generate files needed for running PHPUnit tests.
  *
  * ## DESCRIPTION
  *
  * These are the files that are generated:
  *
  * * `phpunit.xml` is the configuration file for PHPUnit
  * * `.travis.yml` is the configuration file for Travis CI
  * * `tests/bootstrap.php` is the file that makes the current plugin active when running the test suite
  * * `tests/test-sample.php` is a sample file containing the actual tests
  *
  * ## ENVIRONMENT
  *
  * The `tests/bootstrap.php` file looks for the WP_TESTS_DIR environment
  * variable.
  *
  * ## OPTIONS
  *
  * [<plugin>]
  * : The name of the plugin to generate test files for.
  *
  * [--dir=<dirname>]
  * : Generate test files for a non-standard plugin path. If no plugin slug is specified, the directory name is used.
  *
  * [--force]
  * : Overwrite files that already exist.
  *
  * ## EXAMPLE
  *
  *     wp scaffold plugin-tests hello
  *
  * @subcommand plugin-tests
  */
 function plugin_tests($args, $assoc_args)
 {
     $wp_filesystem = $this->init_wp_filesystem();
     if (!empty($args[0])) {
         $plugin_slug = $args[0];
         $plugin_dir = WP_PLUGIN_DIR . "/{$plugin_slug}";
         if (empty($assoc_args['dir']) && !is_dir($plugin_dir)) {
             WP_CLI::error('Invalid plugin slug specified.');
         }
     }
     if (!empty($assoc_args['dir'])) {
         $plugin_dir = $assoc_args['dir'];
         if (!is_dir($plugin_dir)) {
             WP_CLI::error('Invalid plugin directory specified.');
         }
         if (empty($plugin_slug)) {
             $plugin_slug = basename($plugin_dir);
         }
     }
     if (empty($plugin_slug) || empty($plugin_dir)) {
         WP_CLI::error('Invalid plugin specified.');
     }
     $tests_dir = "{$plugin_dir}/tests";
     $bin_dir = "{$plugin_dir}/bin";
     $wp_filesystem->mkdir($tests_dir);
     $wp_filesystem->mkdir($bin_dir);
     $force = \WP_CLI\Utils\get_flag_value($assoc_args, 'force');
     $files_written = $this->create_files(array("{$tests_dir}/bootstrap.php" => Utils\mustache_render('bootstrap.mustache', compact('plugin_slug'))), $force);
     $to_copy = array('install-wp-tests.sh' => $bin_dir, '.travis.yml' => $plugin_dir, 'phpunit.xml' => $plugin_dir, 'test-sample.php' => $tests_dir);
     foreach ($to_copy as $file => $dir) {
         $file_name = "{$dir}/{$file}";
         $force = \WP_CLI\Utils\get_flag_value($assoc_args, 'force');
         $should_write_file = $this->prompt_if_files_will_be_overwritten($file_name, $force);
         if (!$should_write_file) {
             continue;
         }
         $files_written[] = $file_name;
         $wp_filesystem->copy(WP_CLI_ROOT . "/templates/{$file}", $file_name, true);
         if ('install-wp-tests.sh' === $file) {
             if (!$wp_filesystem->chmod("{$dir}/{$file}", 0755)) {
                 WP_CLI::warning("Couldn't mark install-wp-tests.sh as executable.");
             }
         }
     }
     $this->log_whether_files_written($files_written, $skip_message = 'All test files were skipped.', $success_message = 'Created test files.');
 }
Пример #8
0
 /**
  * Generate files needed for running PHPUnit tests.
  *
  * ## DESCRIPTION
  *
  * These are the files that are generated:
  *
  * * `phpunit.xml` is the configuration file for PHPUnit
  * * `.travis.yml` is the configuration file for Travis CI
  * * `tests/bootstrap.php` is the file that makes the current plugin active when running the test suite
  * * `tests/test-sample.php` is a sample file containing the actual tests
  *
  * ## ENVIRONMENT
  *
  * The `tests/bootstrap.php` file looks for the WP_TESTS_DIR environment
  * variable.
  *
  * ## OPTIONS
  *
  * <plugin>
  * : The name of the plugin to generate test files for.
  *
  * ## EXAMPLE
  *
  *     wp scaffold plugin-tests hello
  *
  * @subcommand plugin-tests
  */
 function plugin_tests($args, $assoc_args)
 {
     global $wp_filesystem;
     $plugin_slug = $args[0];
     $plugin_dir = WP_PLUGIN_DIR . "/{$plugin_slug}";
     $tests_dir = "{$plugin_dir}/tests";
     $bin_dir = "{$plugin_dir}/bin";
     $wp_filesystem->mkdir($tests_dir);
     $wp_filesystem->mkdir($bin_dir);
     $this->create_file("{$tests_dir}/bootstrap.php", Utils\mustache_render('bootstrap.mustache', compact('plugin_slug')));
     $to_copy = array('install-wp-tests.sh' => $bin_dir, '.travis.yml' => $plugin_dir, 'phpunit.xml' => $plugin_dir, 'test-sample.php' => $tests_dir);
     foreach ($to_copy as $file => $dir) {
         $wp_filesystem->copy(WP_CLI_ROOT . "/templates/{$file}", "{$dir}/{$file}", true);
     }
     WP_CLI::success("Created test files.");
 }
Пример #9
0
 private function scaffold_plugin_theme_tests($args, $assoc_args, $type)
 {
     $wp_filesystem = $this->init_wp_filesystem();
     if (!empty($args[0])) {
         $slug = $args[0];
         if ('theme' === $type) {
             $theme = wp_get_theme($slug);
             if ($theme->exists()) {
                 $target_dir = $theme->get_stylesheet_directory();
             } else {
                 WP_CLI::error("Invalid {$type} slug specified.");
             }
         } else {
             $target_dir = WP_PLUGIN_DIR . "/{$slug}";
         }
         if (empty($assoc_args['dir']) && !is_dir($target_dir)) {
             WP_CLI::error("Invalid {$type} slug specified.");
         }
     }
     if (!empty($assoc_args['dir'])) {
         $target_dir = $assoc_args['dir'];
         if (!is_dir($target_dir)) {
             WP_CLI::error("Invalid {$type} directory specified.");
         }
         if (empty($slug)) {
             $slug = basename($target_dir);
         }
     }
     if (empty($slug) || empty($target_dir)) {
         WP_CLI::error("Invalid {$type} specified.");
     }
     $name = ucwords(str_replace('-', ' ', $slug));
     $package = str_replace(' ', '_', $name);
     $tests_dir = "{$target_dir}/tests";
     $bin_dir = "{$target_dir}/bin";
     $wp_filesystem->mkdir($tests_dir);
     $wp_filesystem->mkdir($bin_dir);
     $wp_versions_to_test = array('latest');
     // Parse plugin readme.txt
     if (file_exists($target_dir . '/readme.txt')) {
         $readme_content = file_get_contents($target_dir . '/readme.txt');
         preg_match('/Requires at least\\:(.*)\\n/m', $readme_content, $matches);
         if (isset($matches[1]) && $matches[1]) {
             $wp_versions_to_test[] = trim($matches[1]);
         }
         preg_match('/Tested up to\\:(.*)\\n/m', $readme_content, $matches);
         if (isset($matches[1]) && $matches[1]) {
             $wp_versions_to_test[] = trim($matches[1]);
         }
     }
     $template_data = array("{$type}_slug" => $slug, "{$type}_package" => $package);
     $force = \WP_CLI\Utils\get_flag_value($assoc_args, 'force');
     $files_to_create = array("{$tests_dir}/bootstrap.php" => Utils\mustache_render("{$type}-bootstrap.mustache", $template_data), "{$tests_dir}/test-sample.php" => Utils\mustache_render("{$type}-test-sample.mustache", $template_data));
     if ('travis' === $assoc_args['ci']) {
         $files_to_create["{$target_dir}/.travis.yml"] = Utils\mustache_render('plugin-travis.mustache', compact('wp_versions_to_test'));
     } else {
         if ('circle' === $assoc_args['ci']) {
             $files_to_create["{$target_dir}/circle.yml"] = Utils\mustache_render('plugin-circle.mustache');
         } else {
             if ('gitlab' === $assoc_args['ci']) {
                 $files_to_create["{$target_dir}/.gitlab-ci.yml"] = Utils\mustache_render('plugin-gitlab.mustache');
             }
         }
     }
     $files_written = $this->create_files($files_to_create, $force);
     $to_copy = array('install-wp-tests.sh' => $bin_dir, 'phpunit.xml.dist' => $target_dir, 'phpcs.ruleset.xml' => $target_dir);
     foreach ($to_copy as $file => $dir) {
         $file_name = "{$dir}/{$file}";
         $force = \WP_CLI\Utils\get_flag_value($assoc_args, 'force');
         $should_write_file = $this->prompt_if_files_will_be_overwritten($file_name, $force);
         if (!$should_write_file) {
             continue;
         }
         $files_written[] = $file_name;
         $wp_filesystem->copy(WP_CLI_ROOT . "/templates/{$file}", $file_name, true);
         if ('install-wp-tests.sh' === $file) {
             if (!$wp_filesystem->chmod("{$dir}/{$file}", 0755)) {
                 WP_CLI::warning("Couldn't mark 'install-wp-tests.sh' as executable.");
             }
         }
     }
     $this->log_whether_files_written($files_written, $skip_message = 'All test files were skipped.', $success_message = 'Created test files.');
 }