public function activatePlugin($pluginId)
{
$entity = $this->getPlugin($pluginId);
// 플러그인이 존재하는지 검사한다.
if ($entity === null) {
throw new PluginNotFoundException(['pluginName' => $pluginId]);
}
// 플러그인이 이미 활성화되어있는 상태인지 체크한다.
if ($entity->getStatus() === static::STATUS_ACTIVATED) {
throw new PluginAlreadyActivatedException();
}
// 기존에 설치(활성화)된 적이 있는지 검사한다. 기존에 활성화된 적이 있다면 설치된 버전을 조회한다.
$installedVersion = $entity->getInstalledVersion();
// 플러그인의 컴포넌트 정보를 셋팅한다
$entity->getObject();
$this->register->addByEntity($entity);
$this->updatePlugin($pluginId, false);
// 플러그인 활성화. 플러그인을 활성화할 때마다 각 플러그인의 activate() 메소드를 호출해준다.
try {
$entity->activate($installedVersion);
} catch (\Exception $e) {
throw new PluginActivationFailedException();
}
$entity->setStatus(static::STATUS_ACTIVATED);
$entity->setInstalledVersion($entity->getVersion());
// 활성화 된 플러그인의 정보를 config에 기록한다.
$this->setPluginStatus($pluginId, ['status' => static::STATUS_ACTIVATED, 'version' => $entity->getVersion()]);
}