/** * Adds activation task into ReportingChain if Extension is not active * * @param array $extension * @param ReportingChain $chain */ private static function activate($extension, ReportingChain $chain) { if ($extension['is_active'] == 0) { ExtensionDataHelper::prepareMigrationTask($extension, $chain, ExtensionsManager::MIGRATE_TYPE_UP, ExtensionsManager::EXTENSION_ACTIVATE_DEFERRED_GROUP); $activationTask = ExtensionDataHelper::buildTask([realpath(Yii::getAlias('@app') . '/yii'), 'extension/activate', $extension['composer_name']], ExtensionsManager::EXTENSION_ACTIVATE_DEFERRED_GROUP); $chain->addTask($activationTask); } else { $dummyTask = ExtensionDataHelper::buildTask([realpath(Yii::getAlias('@app') . '/yii'), 'extension/dummy', 'Extension already activated!'], ExtensionsManager::EXTENSION_DUMMY_DEFERRED_GROUP); $chain->addTask($dummyTask); } }
/** * Activates/Deactivates Extension * * @param $packageName * @param integer $state * @param integer $runMigrations * @return bool */ private function process($packageName, $state = 1, $runMigrations = 1) { $actionText = 0 === (int) $state ? 'deactivated' : 'activated'; if (true === isset($this->extensions[$packageName]['is_active'])) { if ($runMigrations === 1) { $chain = new ReportingChain(); ExtensionDataHelper::prepareMigrationTask($this->extensions[$packageName], $chain, (int) $state ? ExtensionsManager::MIGRATE_TYPE_UP : ExtensionsManager::MIGRATE_TYPE_DOWN, ExtensionsManager::EXTENSION_DEACTIVATE_DEFERRED_GROUP); if (null !== ($firstTaskId = $chain->registerChain())) { DeferredHelper::runImmediateTask($firstTaskId); } else { $this->stderr("Unable to run task chain\n"); } } $this->extensions[$packageName]['is_active'] = $state; if (true === $this->writeConfig()) { $this->stdout(str_replace('{actionText}', $actionText, 'Extension successfully {actionText}.') . PHP_EOL); //this means successfully termination. Because process starts in command line shell return 0; } } else { $this->stdout(str_replace('{actionText}', $actionText, 'You trying to {actionText} not existing extension!') . PHP_EOL); } return 1; }