public function installOrUpdatePluginFromMarketplace($pluginName)
{
$this->checkMarketplaceIsEnabled();
$this->pluginName = $pluginName;
try {
$this->makeSureFoldersAreWritable();
$this->makeSurePluginNameIsValid();
$tmpPluginZip = $this->downloadPluginFromMarketplace();
$tmpPluginFolder = dirname($tmpPluginZip) . '/' . basename($tmpPluginZip, '.zip') . '/';
$this->extractPluginFiles($tmpPluginZip, $tmpPluginFolder);
$this->makeSurePluginJsonExists($tmpPluginFolder);
$metadata = $this->getPluginMetadataIfValid($tmpPluginFolder);
$this->makeSureThereAreNoMissingRequirements($metadata);
$this->copyPluginToDestination($tmpPluginFolder);
Filesystem::deleteAllCacheOnUpdate($this->pluginName);
$pluginManager = PluginManager::getInstance();
if ($pluginManager->isPluginLoaded($this->pluginName)) {
$plugin = PluginManager::getInstance()->getLoadedPlugin($this->pluginName);
if (!empty($plugin)) {
$plugin->reloadPluginInformation();
}
}
} catch (\Exception $e) {
if (!empty($tmpPluginZip)) {
Filesystem::deleteFileIfExists($tmpPluginZip);
}
if (!empty($tmpPluginFolder)) {
$this->removeFolderIfExists($tmpPluginFolder);
}
throw $e;
}
$this->removeFileIfExists($tmpPluginZip);
$this->removeFolderIfExists($tmpPluginFolder);
}