/** * getChanged * * @param ComposerFileWriter $writer * * @return array */ protected function getChangedPlugins(ComposerFileWriter $writer) { $changed = []; $changed['installed'] = $writer->get('xpressengine-plugin.operation.changed.installed', []); $changed['updated'] = $writer->get('xpressengine-plugin.operation.changed.updated', []); $changed['uninstalled'] = $writer->get('xpressengine-plugin.operation.changed.uninstalled', []); return $changed; }
/** * plugin composer 파일에 등록된 플러그인 제어정보를 require에 적용한다. * * @param ComposerFileWriter $writer composer file writer * * @return void */ private static function applyRequire(ComposerFileWriter $writer) { $installs = $writer->get('xpressengine-plugin.operation.install', []); foreach ($installs as $name => $version) { $writer->addRequire($name, $version); } $updates = $writer->get('xpressengine-plugin.operation.update', []); foreach ($updates as $name => $version) { $writer->addRequire($name, $version); } $uninstalls = $writer->get('xpressengine-plugin.operation.uninstall', []); foreach ($uninstalls as $name) { $writer->removeRequire($name); } }
/** * 현재 진행중인 플러그인 설치 작업 내역을 반환한다. * * @param ComposerFileWriter $writer composer file writer * * @return array|null */ public function getOperation(ComposerFileWriter $writer) { $status = $writer->get('xpressengine-plugin.operation.status'); if ($status === null) { return null; } $runnings = []; $runningMode = 'install'; $runnings = $writer->get("xpressengine-plugin.operation.install", []); if (empty($runnings)) { $runningMode = 'update'; $runnings = $writer->get("xpressengine-plugin.operation.update", []); } if (empty($runnings)) { $runningMode = 'uninstall'; $runnings = $writer->get("xpressengine-plugin.operation.uninstall", []); } // operation이 없을 경우, return void if (empty($runnings)) { return null; } // operation이 있다. // expired 조사 $deadline = $writer->get('xpressengine-plugin.operation.expiration_time'); $expired = false; if ($deadline !== null && $deadline !== 0) { $deadline = Carbon::parse($deadline); if ($deadline->isPast()) { $expired = true; } } $runningsInfo = []; if (!empty($runnings)) { if ($runningMode === 'uninstall') { $package = current($runnings); } else { $package = key($runnings); } list(, $id) = explode('/', $package); $runningsInfo[$package] = $this->provider->find($id); $runningsInfo[$package]->pluginId = $id; } $changed = $writer->get('xpressengine-plugin.operation.changed', []); foreach ($changed as $type) { foreach ($type as $package => $version) { list(, $id) = explode('/', $package); if (!isset($runningsInfo[$package])) { $runningsInfo[$package] = $this->provider->find($id); } } } if ($status === ComposerFileWriter::STATUS_RUNNING && $expired === true) { $status = 'expired'; } return compact('runnings', 'status', 'runningMode', 'expired', 'changed', 'runningsInfo'); }