/**
  * 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;
 }