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