diff --git a/lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php b/lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php index 4effbe92be..004ef96117 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php @@ -117,13 +117,10 @@ class Databoxes implements ControllerProviderInterface break; } - $upgrader = new \Setup_Upgrade($app); - return $app['twig']->render('admin/databases.html.twig', [ 'files' => new \DirectoryIterator($app['root.path'] . '/lib/conf.d/data_templates'), 'sbas' => $sbas, 'error_msg' => $errorMsg, - 'recommendations' => $upgrader->getRecommendations(), 'advices' => $request->query->get('advices', []), 'reloadTree' => (Boolean) $request->query->get('reload-tree'), ]); diff --git a/lib/classes/Setup/Upgrade.php b/lib/classes/Setup/Upgrade.php index 0b37c96410..a65863cd2e 100644 --- a/lib/classes/Setup/Upgrade.php +++ b/lib/classes/Setup/Upgrade.php @@ -11,6 +11,7 @@ use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Setup\Version\MailChecker; +use Symfony\Component\Yaml\Dumper; class Setup_Upgrade { @@ -18,31 +19,13 @@ class Setup_Upgrade * * @var appbox */ - protected $appbox; - - /** - * - * @var string - */ - protected $message; + private $appbox; /** * * @var array */ - protected $recommendations = []; - - /** - * - * @var int - */ - protected $total_steps = 0; - - /** - * - * @var int - */ - protected $completed_steps = 0; + private $recommendations = []; public function __construct(Application $app, $force = false) { @@ -77,48 +60,6 @@ class Setup_Upgrade return; } - /** - * Add steps to do to the counter - * - * @param int $how_many - * @return Setup_Upgrade - */ - public function add_steps($how_many) - { - $this->total_steps += (int) $how_many; - $this->write_lock(); - - return $this; - } - - /** - * Add completed steps to the counter - * - * @param int $how_many - * @return Setup_Upgrade - */ - public function add_steps_complete($how_many) - { - $this->completed_steps += (int) $how_many; - $this->write_lock(); - - return $this; - } - - /** - * Set the current message - * - * @param string $message - * @return Setup_Upgrade - */ - public function set_current_message($message) - { - $this->message = $message; - $this->write_lock(); - - return $this; - } - /** * * @param type $recommendation @@ -139,37 +80,18 @@ class Setup_Upgrade return $this->recommendations; } - /** - * - * @return float - */ - protected function get_percentage() - { - if ($this->total_steps === 0) { - return 1; - } - - return round(max(min(($this->completed_steps / $this->total_steps), 1), 0), 2); - } - /** * * * @return Setup_Upgrade */ - protected function write_lock() + private function write_lock() { - $date_obj = new DateTime(); - $dumper = new Symfony\Component\Yaml\Dumper(); - $datas = $dumper->dump( - [ - 'percentage' => $this->get_percentage() - , 'total_steps' => $this->total_steps - , 'completed_steps' => $this->completed_steps - , 'message' => $this->message - , 'last_update' => $date_obj->format(DATE_ATOM) - ], 1 - ); + $date_obj = new \DateTime(); + $dumper = new Dumper(); + $datas = $dumper->dump([ + 'last_update' => $date_obj->format(DATE_ATOM), + ], 1); if (!file_put_contents(self::get_lock_file(), $datas)) throw new Exception_Setup_CannotWriteLockFile( @@ -184,7 +106,7 @@ class Setup_Upgrade * * @return boolean */ - protected static function lock_exists() + private static function lock_exists() { clearstatcache(); @@ -196,7 +118,7 @@ class Setup_Upgrade * * @return string */ - public static function get_lock_file() + private static function get_lock_file() { return __DIR__ . '/../../../tmp/upgrade.lock'; } @@ -205,7 +127,7 @@ class Setup_Upgrade * * @return Void */ - protected static function remove_lock_file() + private static function remove_lock_file() { if (self::lock_exists()) { unlink(self::get_lock_file()); @@ -213,42 +135,4 @@ class Setup_Upgrade return; } - - /** - * - * Returns an array containing datas about the Upgrade Status. - * Contains the following keys : - * - active : (booolean) tells if there's a current upgrade - * - percentage : (float) a number between 0 and 1 of the current progress - * - total_steps : (int) total steps - * - completed_steps : (int) current complete steps - * - message : (string) a message - * - last_update : (string) last update in ATOM format - * - * - * @return Array - */ - public static function get_status() - { - $active = self::lock_exists(); - - $datas = [ - 'active' => $active - , 'percentage' => 1 - , 'total_steps' => 0 - , 'completed_steps' => 0 - , 'message' => null - , 'last_update' => null - ]; - - if ($active) { - $parser = new Symfony\Component\Yaml\Parser(); - $datas = array_merge( - $datas - , $parser->parse(file_get_contents(self::get_lock_file())) - ); - } - - return $datas; - } } diff --git a/lib/classes/appbox.php b/lib/classes/appbox.php index 114391df49..7561d33c21 100644 --- a/lib/classes/appbox.php +++ b/lib/classes/appbox.php @@ -282,29 +282,11 @@ class appbox extends base { $from_version = $this->get_version(); - $upgrader->add_steps(7 + count($this->get_databoxes())); - - /** - * Step 1 - */ - $upgrader->set_current_message($this->app->trans('Flushing cache')); - $app['phraseanet.cache-service']->flushAll(); - $upgrader->add_steps_complete(1); - - $upgrader->set_current_message($this->app->trans('Creating new tables')); - // Executes stuff before applying patches $app['phraseanet.pre-schema-upgrader']->apply($app); - $upgrader->add_steps_complete(1); - - /** - * Step 2 - */ - $upgrader->set_current_message($this->app->trans('Purging directories')); - $finder = new Finder(); $finder->in([ $this->app['root.path'] . '/tmp/cache_minify/', @@ -322,13 +304,6 @@ class appbox extends base $app['filesystem']->remove($file); } - $upgrader->add_steps_complete(1); - - /** - * Step 5 - */ - $upgrader->set_current_message($this->app->trans('Copying files')); - foreach ([ 'config/custom_files/' => 'www/custom/', 'config/minilogos/' => 'www/custom/minilogos/', @@ -339,37 +314,13 @@ class appbox extends base $app['filesystem']->mirror($this->app['root.path'] . '/' . $source, $this->app['root.path'] . '/' . $target); } - $upgrader->add_steps_complete(1); + $advices = $this->upgradeDB(true, $app); - $advices = []; - - /** - * Step 6 - */ - $upgrader->set_current_message($this->app->trans('Upgrading appbox')); - $advices = $this->upgradeDB(true, $upgrader, $app); - $upgrader->add_steps_complete(1); - - /** - * Step 7 - */ foreach ($this->get_databoxes() as $s) { - $upgrader->set_current_message($this->app->trans('Upgrading %databox_name%', ['%databox_name%' => $s->get_label($this->app['locale'])])); - $advices = array_merge($advices, $s->upgradeDB(true, $upgrader, $app)); - $upgrader->add_steps_complete(1); + $advices = array_merge($advices, $s->upgradeDB(true, $app)); } - /** - * Step 8 - */ - $upgrader->set_current_message($this->app->trans('Post upgrade')); - $this->post_upgrade($upgrader, $app); - $upgrader->add_steps_complete(1); - - /** - * Step 9 - */ - $upgrader->set_current_message($this->app->trans('Flushing cache')); + $this->post_upgrade($app); $app['phraseanet.cache-service']->flushAll(); @@ -379,8 +330,6 @@ class appbox extends base $tool->updateSchema($metas, true); } - $upgrader->add_steps_complete(1); - if (version::lt($from_version, '3.1')) { $upgrader->addRecommendation($app->trans('Your install requires data migration, please execute the following command'), 'bin/setup system:upgrade-datas --from=3.1'); } elseif (version::lt($from_version, '3.5')) { @@ -395,17 +344,14 @@ class appbox extends base return $advices; } - protected function post_upgrade(Setup_Upgrade $upgrader, Application $app) + protected function post_upgrade(Application $app) { - $upgrader->add_steps(1 + count($this->get_databoxes())); - $this->apply_patches($this->get_version(), $app['phraseanet.version']->getNumber(), true, $upgrader, $app); + $this->apply_patches($this->get_version(), $app['phraseanet.version']->getNumber(), true, $app); $this->setVersion($app['phraseanet.version']); - $upgrader->add_steps_complete(1); foreach ($this->get_databoxes() as $databox) { - $databox->apply_patches($databox->get_version(), $app['phraseanet.version']->getNumber(), true, $upgrader, $app); + $databox->apply_patches($databox->get_version(), $app['phraseanet.version']->getNumber(), true, $app); $databox->setVersion($app['phraseanet.version']); - $upgrader->add_steps_complete(1); } return $this; diff --git a/lib/classes/base.php b/lib/classes/base.php index 4cd131c7f4..a5dcb70971 100644 --- a/lib/classes/base.php +++ b/lib/classes/base.php @@ -231,7 +231,7 @@ abstract class base implements cache_cacheableInterface return $this->version; } - protected function upgradeDb($apply_patches, Setup_Upgrade $upgrader, Application $app) + protected function upgradeDb($apply_patches, Application $app) { $recommends = []; @@ -243,8 +243,6 @@ abstract class base implements cache_cacheableInterface $allTables[(string) $table['name']] = $table; } - $upgrader->add_steps(count($allTables) + 1); - $sql = "SHOW TABLE STATUS"; $stmt = $this->get_connection()->prepare($sql); $stmt->execute(); @@ -291,8 +289,6 @@ abstract class base implements cache_cacheableInterface foreach ($rs as $row) { $tname = $row["Name"]; if (isset($allTables[$tname])) { - $upgrader->set_current_message($app->trans('Updating table %table_name%', ['%table_name%' => $tname])); - $engine = strtolower(trim($allTables[$tname]->engine)); $ref_engine = strtolower($row['Engine']); @@ -313,7 +309,6 @@ abstract class base implements cache_cacheableInterface $ret = self::upgradeTable($allTables[$tname]); $recommends = array_merge($recommends, $ret); unset($allTables[$tname]); - $upgrader->add_steps_complete(1); } elseif ( ! in_array($tname, $ORMTables)) { $recommends[] = [ 'message' => 'Une table pourrait etre supprime', @@ -323,17 +318,13 @@ abstract class base implements cache_cacheableInterface } foreach ($allTables as $tname => $table) { - $upgrader->set_current_message($app->trans('Creating table %table_name%', ['%table_name%' => $table])); $this->createTable($table); - $upgrader->add_steps_complete(1); } $current_version = $this->get_version(); - $upgrader->set_current_message($app->trans('Applying patches on %databox_name%', ['%databox_name%' => $this->get_dbname()])); if ($apply_patches) { - $this->apply_patches($current_version, $app['phraseanet.version']->getNumber(), false, $upgrader, $app); + $this->apply_patches($current_version, $app['phraseanet.version']->getNumber(), false, $app); } - $upgrader->add_steps_complete(1); return $recommends; } @@ -762,7 +753,7 @@ abstract class base implements cache_cacheableInterface return $return; } - protected function apply_patches($from, $to, $post_process, Setup_Upgrade $upgrader, Application $app) + protected function apply_patches($from, $to, $post_process, Application $app) { if (version::eq($from, $to)) { return true; @@ -770,8 +761,6 @@ abstract class base implements cache_cacheableInterface $list_patches = []; - $upgrader->add_steps(1)->set_current_message($app->trans('Looking for patches')); - $iterator = new DirectoryIterator($this->app['root.path'] . '/lib/classes/patch/'); foreach ($iterator as $fileinfo) { @@ -809,10 +798,6 @@ abstract class base implements cache_cacheableInterface } } - $upgrader->add_steps_complete(1) - ->add_steps(count($list_patches)) - ->set_current_message($app->trans('Applying patches on %databox_name%', ['%databox_name%' => $this->get_dbname()])); - uasort($list_patches, function (\patchInterface $patch1, \patchInterface $patch2) { return version::lt($patch1->get_release(), $patch2->get_release()) ? -1 : 1; }); @@ -846,8 +831,6 @@ abstract class base implements cache_cacheableInterface if (false === $patch->apply($this, $app)) { $success = false; } - - $upgrader->add_steps_complete(1); } return $success; diff --git a/templates/web/admin/databases.html.twig b/templates/web/admin/databases.html.twig index b55d1cb1e9..d1e6798221 100644 --- a/templates/web/admin/databases.html.twig +++ b/templates/web/admin/databases.html.twig @@ -53,15 +53,6 @@
{{ 'update::Votre version est a jour :' | trans }} {{ app['phraseanet.version'].getNumber() }}
{% endif %} - {% if recommendations | length > 0%} - {% for recommendation in recommendations %} -{{ recommendation['0'] }}
--- {% endfor %} - {% endif %} - {% if advices | length > 0 %} {{ 'Propositions de modifications des tables' | trans }} {% for advice in advices %} diff --git a/tests/classes/Setup/UpgradeTest.php b/tests/classes/Setup/UpgradeTest.php deleted file mode 100644 index 4d0b6a46aa..0000000000 --- a/tests/classes/Setup/UpgradeTest.php +++ /dev/null @@ -1,90 +0,0 @@ -object = new Setup_Upgrade(self::$DI['app']); - } - - public function tearDown() - { - unset($this->object); - parent::tearDown(); - } - - public function test__destruct() - { - $this->assertFileExists(Setup_Upgrade::get_lock_file()); - unset($this->object); - $this->assertFileNotExists(Setup_Upgrade::get_lock_file()); - } - - public function testAdd_steps() - { - $this->check_percentage(1, 0, 0); - $this->object->add_steps(1); - $this->check_percentage(0, 1, 0); - $this->object->add_steps('lsdf'); - $this->check_percentage(0, 1, 0); - $this->object->add_steps(20); - $this->check_percentage(0, 21, 0); - $this->object->add_steps(-5); - $this->check_percentage(0, 16, 0); - } - - private function check_percentage($percent, $total, $complete) - { - $datas = $this->object->get_status(); - $this->assertArrayHasKey('completed_steps', $datas); - $this->assertArrayHasKey('total_steps', $datas); - $this->assertArrayHasKey('percentage', $datas); - $this->assertArrayHasKey('last_update', $datas); - $this->assertDateAtom($datas['last_update']); - $this->assertEquals($percent, $datas['percentage']); - $this->assertEquals($total, $datas['total_steps']); - $this->assertEquals($complete, $datas['completed_steps']); - } - - public function testAdd_steps_complete() - { - $this->check_percentage(1, 0, 0); - $this->object->add_steps(1)->add_steps_complete(1); - $this->check_percentage(1, 1, 1); - $this->object->add_steps(20)->add_steps_complete(20); - $this->check_percentage(1, 21, 21); - $this->object->add_steps(20); - $this->check_percentage(round(21 / 41, 2), 41, 21); - $this->object->add_steps_complete(40); - $this->check_percentage(1, 41, 61); - } - - public function testSet_current_message() - { - $message = 'ZOubid รจรจรจ\\'; - $this->object->set_current_message($message); - - $datas = $this->object->get_status(); - $this->assertArrayHasKey('message', $datas); - $this->assertEquals($message, $datas['message']); - } - - public function testGet_status() - { - $datas = $this->object->get_status(); - $this->assertTrue(is_array($datas)); - $this->assertArrayHasKey('active', $datas); - $this->assertArrayHasKey('percentage', $datas); - $this->assertArrayHasKey('total_steps', $datas); - $this->assertArrayHasKey('completed_steps', $datas); - $this->assertArrayHasKey('message', $datas); - $this->assertArrayHasKey('last_update', $datas); - $this->assertDateAtom($datas['last_update']); - } -} diff --git a/tmp/translations/.gitignore b/tmp/translations/.gitignore new file mode 100644 index 0000000000..d6b7ef32c8 --- /dev/null +++ b/tmp/translations/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore{{ recommendation['1'] }}-