/**
  * Bootstrap method to be called during application bootstrap stage.
  *
  * @param Application $app the application currently running
  */
 public function bootstrap($app)
 {
     $app->i18n->translations['extensions-manager'] = ['class' => 'yii\\i18n\\PhpMessageSource', 'basePath' => __DIR__ . DIRECTORY_SEPARATOR . 'messages'];
     DeferredQueueEvent::on(DeferredController::className(), DeferredController::EVENT_DEFERRED_QUEUE_COMPLETE, [DeferredQueueCompleteHandler::className(), 'handleEvent']);
     if ($app instanceof \yii\console\Application) {
         $app->controllerMap['extension'] = ExtensionController::className();
         $app->on(Application::EVENT_BEFORE_ACTION, function () {
             $module = ExtensionsManager::module();
             if ($module->autoDiscoverMigrations === true) {
                 if (isset(Yii::$app->params['yii.migrations']) === false) {
                     Yii::$app->params['yii.migrations'] = [];
                 }
                 /** @var array $extensions */
                 $extensions = $module->getExtensions();
                 foreach ($extensions as $name => $ext) {
                     if ($ext['composer_type'] === Extension::TYPE_DOTPLANT && $module->discoverDotPlantMigrations === false) {
                         continue;
                     }
                     $extData = ComposerInstalledSet::get()->getInstalled($ext['composer_name']);
                     $packageMigrations = ExtensionDataHelper::getInstalledExtraData($extData, 'migrationPath', true);
                     $packagePath = '@vendor/' . $ext['composer_name'];
                     foreach ($packageMigrations as $migrationPath) {
                         Yii::$app->params['yii.migrations'][] = "{$packagePath}/{$migrationPath}";
                     }
                 }
             }
         });
     }
 }
 public function testInstalledGetType()
 {
     $data = ComposerInstalledSet::get()->getInstalled('fakedev2/yii2-fake-ext4');
     $type = ExtensionDataHelper::getType($data);
     $this->assertSame(4, count(ComposerInstalledSet::get()->getInstalled()));
     $this->assertSame('dotplant-extension', $type);
     $this->assertTrue(isset(Extension::getTypes()[$type]));
     return $data;
 }
 /**
  * @return bool
  */
 public static function generateConfig()
 {
     $installed = ComposerInstalledSet::get()->getInstalled();
     $fileName = Yii::getAlias(ExtensionsManager::module()->extensionsStorage);
     $writer = new ApplicationConfigWriter(['filename' => $fileName]);
     $config = self::rebuldConfig($installed);
     $writer->addValues($config);
     return $writer->commit();
 }
 /**
  * @param bool $onlyActive load configurables only for active extensions
  * @return array
  */
 public static function getConfigurables($onlyActive = false)
 {
     $installed = ComposerInstalledSet::get()->getInstalled();
     $configurables = [];
     foreach ($installed as $package) {
         $packageConfigurablesFile = ArrayHelper::getValue($package, 'extra.configurables', null);
         if ($packageConfigurablesFile === null || true === $onlyActive && false === ExtensionsManager::module()->extensionIsActive($package['name'])) {
             continue;
         }
         $fn = Yii::getAlias('@vendor') . DIRECTORY_SEPARATOR . $package['name'] . DIRECTORY_SEPARATOR . $packageConfigurablesFile;
         if (file_exists($fn) && is_readable($fn)) {
             $packageConfigurables = (include $fn);
             array_walk($packageConfigurables, function (&$item) use($package) {
                 $item['package'] = $package['name'];
                 $item['sectionNameTranslated'] = ExtensionDataHelper::getLocalizedDataField($package, Extension::TYPE_YII, 'name');
             });
             $configurables = ArrayHelper::merge($configurables, $packageConfigurables);
         }
     }
     return $configurables;
 }
 /**
  * @depends testGetInstalledExisting
  * @param array $installedArray
  */
 public function testGetByName(array $installedArray)
 {
     $keys = array_keys($installedArray);
     $name = array_pop($keys);
     $this->assertNotEmpty(ComposerInstalledSet::get()->getInstalled($name));
 }
$gridTpl = <<<TPL
<div class="box-body no-padding">
    {items}
</div>
<div class="box-footer">
    <div class="row ext-bottom">
        <div class="col-sm-5">
            {summary}
        </div>
        <div class="col-sm-7">
            {pager}
        </div>
    </div>
</div>
TPL;
$composerSet = ComposerInstalledSet::get();
$this->title = Yii::t('extensions-manager', 'Installed extensions');
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="row">
    <div class="col-md-3">
        <div class="configuration-navigation box box-solid">
            <div class="box-header with-border">
                <h3 class="box-title">
                    <i class="fa fa-list-alt"></i>
                    <?php 
echo Yii::t('extensions-manager', 'Extensions manager');
?>
                </h3>
            </div>
            <div class="box-body">
 /**
  * Prepares migration command
  *
  * @param array $ext
  * @param ReportingChain $chain
  * @param string $way
  * @param $group
  */
 public static function prepareMigrationTask(array $ext, ReportingChain $chain, $way = ExtensionsManager::MIGRATE_TYPE_UP, $group)
 {
     if ($ext['composer_type'] == Extension::TYPE_DOTPLANT) {
         $extData = ComposerInstalledSet::get()->getInstalled($ext['composer_name']);
         $packageMigrations = ExtensionDataHelper::getInstalledExtraData($extData, 'migrationPath', true);
         $packagePath = '@vendor' . '/' . $ext['composer_name'] . '/';
         foreach ($packageMigrations as $migrationPath) {
             $migrateTask = self::buildTask([realpath(Yii::getAlias('@app') . '/yii'), 'migrate/' . $way, '--migrationPath=' . $packagePath . $migrationPath, '--color=0', '--interactive=0', '--disableLookup=true', ExtensionsManager::MIGRATE_TYPE_DOWN == $way ? 68888 : ''], $group);
             $chain->addTask($migrateTask);
         }
     }
 }