From ded471f12375a42eb18b5df5a324d6e12d75c4fc Mon Sep 17 00:00:00 2001 From: Ismayil Khayredinov Date: Tue, 15 Aug 2017 14:17:47 +0200 Subject: [PATCH] feat(cli): adds elgg-cli seed and unseed commands Database seeding can now be performed via elgg-cli tool --- .scripts/seeder/seed.php | 28 -------------- .scripts/seeder/unseed.php | 22 ----------- .travis.yml | 12 +++--- composer.json | 4 +- docs/intro/development.rst | 4 +- docs/intro/elgg-cli.rst | 8 ++++ engine/classes/Elgg/Cli/SeedCommand.php | 42 +++++++++++++++++++++ engine/classes/Elgg/Cli/UnseedCommand.php | 35 +++++++++++++++++ engine/classes/Elgg/Database/Seeds/Seed.php | 8 +--- engine/lib/elgglib.php | 2 + 10 files changed, 97 insertions(+), 68 deletions(-) delete mode 100644 .scripts/seeder/seed.php delete mode 100644 .scripts/seeder/unseed.php create mode 100644 engine/classes/Elgg/Cli/SeedCommand.php create mode 100644 engine/classes/Elgg/Cli/UnseedCommand.php diff --git a/.scripts/seeder/seed.php b/.scripts/seeder/seed.php deleted file mode 100644 index a60eaccb50f..00000000000 --- a/.scripts/seeder/seed.php +++ /dev/null @@ -1,28 +0,0 @@ -setValue('mailer', new \Zend\Mail\Transport\InMemory()); - -_elgg_services()->seeder->seed(); \ No newline at end of file diff --git a/.scripts/seeder/unseed.php b/.scripts/seeder/unseed.php deleted file mode 100644 index b90329d7fdb..00000000000 --- a/.scripts/seeder/unseed.php +++ /dev/null @@ -1,22 +0,0 @@ -setValue('mailer', new \Zend\Mail\Transport\InMemory()); - -_elgg_services()->seeder->unseed(); \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index e74d8bef60b..4dd5d859cec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -80,13 +80,13 @@ matrix: install: - composer travis:install-with-mysql - php -f ./.scripts/travis/enable_plugins.php - - composer database:seeder:seed + - php ./elgg-cli seed script: - php -f ./.scripts/is_memcached_enabled.php - ./vendor/bin/phpunit --configuration ./.scripts/travis/phpunit-memcached.xml - php ./elgg-cli simpletest -p all -c ./.scripts/travis/elgg-config/simpletest_memcached.php after_script: - - composer database:seeder:unseed + - php ./elgg-cli unseed # HHVM build - php: hhvm-3.15 @@ -110,7 +110,7 @@ matrix: install: - composer travis:install-with-mysql - php -f ./.scripts/travis/enable_plugins.php - - composer database:seeder:seed + - php ./elgg-cli seed - php -S localhost:8888 index.php & - sleep 3 # give Web server some time to bind to sockets, etc script: @@ -118,7 +118,7 @@ matrix: - ./vendor/bin/phpunit - php ./elgg-cli simpletest -p all after_script: - - composer database:seeder:unseed + - php ./elgg-cli unseed # Test upgrade path from 2.3 - php: 5.6 @@ -133,7 +133,7 @@ matrix: - git checkout FETCH_HEAD - composer travis:install-with-mysql - php -f ./.scripts/travis/enable_plugins.php - - composer database:seeder:seed + - php ./elgg-cli seed - git checkout - - composer install --prefer-dist - php -f ./.scripts/travis/upgrade.php @@ -144,7 +144,7 @@ matrix: - sleep 3 # give Web server some time to bind to sockets, etc - curl -o - http://localhost:8888/ | grep "Elgg Travis Site" after_script: - - composer database:seeder:unseed + - php ./elgg-cli unseed services: - mysql diff --git a/composer.json b/composer.json index 0744df3f69b..d3aad6d2727 100644 --- a/composer.json +++ b/composer.json @@ -65,9 +65,7 @@ "echo \"USE mysql; UPDATE user SET password=PASSWORD('password') WHERE user='root'; FLUSH PRIVILEGES;\" | mysql -u root", "mkdir \"${HOME}/elgg_data/\"", "php ./elgg-cli install --config ./install/cli/travis.php" - ], - "database:seeder:seed": "php -f ./.scripts/seeder/seed.php", - "database:seeder:unseed": "php -f ./.scripts/seeder/unseed.php" + ] }, "suggest": { "ext-mbstring": "*" diff --git a/docs/intro/development.rst b/docs/intro/development.rst index 8b25c3d865b..16ea38188cc 100644 --- a/docs/intro/development.rst +++ b/docs/intro/development.rst @@ -79,7 +79,7 @@ You can run the following commands to seed and unseed the database. ..code::sh # seed the database - composer database:seeder:seed + php ./elgg-cli seed # unseed the database - composer database:seeder:unseed + php ./elgg-cli unseed diff --git a/docs/intro/elgg-cli.rst b/docs/intro/elgg-cli.rst index c88ae9a210a..9df29597dd6 100644 --- a/docs/intro/elgg-cli.rst +++ b/docs/intro/elgg-cli.rst @@ -33,6 +33,12 @@ Available commands # Run Simpletest test suite elgg-cli simpletest [-c|--config CONFIG] [-p|--plugins PLUGINS] + # Seed the database with fake entities + elgg-cli seed + + # Remove seeded faked entities + elgg-cli unseed + Adding custom commands ====================== @@ -49,3 +55,5 @@ Command class must extend ``\Elgg\CLI\Command``. return $return; }); + + diff --git a/engine/classes/Elgg/Cli/SeedCommand.php b/engine/classes/Elgg/Cli/SeedCommand.php new file mode 100644 index 00000000000..a8ad950d8df --- /dev/null +++ b/engine/classes/Elgg/Cli/SeedCommand.php @@ -0,0 +1,42 @@ +setName('seed') + ->setDescription('Seeds the database with fake entities'); + } + + /** + * {@inheritdoc} + */ + protected function command() { + + if (!class_exists('\Faker\Generator')) { + elgg_log('This is a developer tool currently intended for testing purposes only. Please refrain from using it.', 'ERROR'); + return 1; + } + + elgg_set_config('debug', 'NOTICE'); + + set_time_limit(0); + + if (elgg_is_logged_in()) { + elgg_log("Seeds should not be run with a logged in user", 'ERROR'); + return 2; + } + + _elgg_services()->setValue('mailer', new \Zend\Mail\Transport\InMemory()); + + _elgg_services()->seeder->seed(); + } + +} \ No newline at end of file diff --git a/engine/classes/Elgg/Cli/UnseedCommand.php b/engine/classes/Elgg/Cli/UnseedCommand.php new file mode 100644 index 00000000000..841fc31d1ef --- /dev/null +++ b/engine/classes/Elgg/Cli/UnseedCommand.php @@ -0,0 +1,35 @@ +setName('unseed') + ->setDescription('Removes seeded fake entities from the database'); + } + + /** + * {@inheritdoc} + */ + protected function command() { + + if (!class_exists('\Faker\Generator')) { + elgg_log('This is a developer tool currently intended for testing purposes only. Please refrain from using it.', 'ERROR'); + return 1; + } + + set_time_limit(0); + + _elgg_services()->setValue('mailer', new \Zend\Mail\Transport\InMemory()); + + _elgg_services()->seeder->unseed(); + } + +} \ No newline at end of file diff --git a/engine/classes/Elgg/Database/Seeds/Seed.php b/engine/classes/Elgg/Database/Seeds/Seed.php index 4d6071e7919..0d2d15831e6 100644 --- a/engine/classes/Elgg/Database/Seeds/Seed.php +++ b/engine/classes/Elgg/Database/Seeds/Seed.php @@ -704,12 +704,6 @@ public function createLikes(ElggEntity $entity, $limit = null) { * @return void */ public function log($msg, $level = 'NOTICE') { - - if (php_sapi_name() === 'cli') { - $handle = $level === 'ERROR' ? STDERR : STDOUT; - fwrite($handle, $msg . PHP_EOL); - } else { - elgg_log($msg, $level); - } + elgg_log($msg, $level); } } diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 0e22fcb0780..3153ab7e461 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -1817,6 +1817,8 @@ function _elgg_init() { function _elgg_init_cli_commands(\Elgg\Hook $hook) { $defaults = [ \Elgg\Cli\SimpletestCommand::class, + \Elgg\Cli\SeedCommand::class, + \Elgg\Cli\UnseedCommand::class, ]; return array_merge($defaults, (array) $hook->getValue());