Xpressengine\Plugin\PluginHandler::uninstallPlugin PHP Method

uninstallPlugin() public method

주어진 플러그인을 uninstall 한다.
public uninstallPlugin ( string $pluginId ) : void
$pluginId string 삭제할 플러그인의 id
return void
    public function uninstallPlugin($pluginId)
    {
        $entity = $this->getPlugin($pluginId);
        // 우선 활성화 상태인 플러그인인지 체크한다. 활성화 상태라면 삭제하지 않고 예외 처리한다.
        if ($entity->getStatus() === static::STATUS_ACTIVATED) {
            throw new CannotDeleteActivatedPluginException();
        }
        $entity->getObject()->uninstall();
        // status list에서 해당 플러그인 정보를 삭제한다.
        $configs = $this->getPluginsStatus();
        array_forget($configs, $pluginId);
        $this->setPluginsStatus($configs);
    }

Usage Example

コード例 #1
0
 public function delete(Request $request, PluginHandler $handler, PluginProvider $provider, ComposerFileWriter $writer, $pluginId)
 {
     $handler->getAllPlugins(true);
     $plugin = $handler->getPlugin($pluginId);
     if ($plugin === null) {
         throw new HttpException(422, 'Plugin not found.');
     }
     if ($plugin->isActivated()) {
         throw new HttpException(422, 'Plugin is not deactivated. Please deactivate the plugin.');
     }
     if ($plugin->isDevelopMode()) {
         $handler->uninstallPlugin($pluginId);
         return redirect()->route('settings.plugins')->with('alert', ['type' => 'success', 'message' => '플러그인을 삭제하였습니다.']);
     }
     $operation = $handler->getOperation($writer);
     if ($operation['status'] === ComposerFileWriter::STATUS_RUNNING) {
         throw new HttpException(422, "이미 진행중인 요청이 있습니다.");
     }
     $handler->uninstallPlugin($pluginId);
     $timeLimit = config('xe.plugin.operation.time_limit');
     $writer->reset()->cleanOperation();
     $writer->uninstall($plugin->getName(), Carbon::now()->addSeconds($timeLimit)->toDateTimeString())->write();
     $this->reserveOperation($writer, $timeLimit);
     return redirect()->route('settings.plugins')->with('alert', ['type' => 'success', 'message' => '플러그인을 삭제중입니다.']);
 }