<td class="columnIcon">
<span class="icon icon16 fa-{if !$updateServer->isDisabled}check-{/if}square-o jsToggleButton jsTooltip pointer" title="{lang}wcf.global.button.{if !$updateServer->isDisabled}disable{else}enable{/if}{/lang}" data-object-id="{@$updateServer->packageUpdateServerID}"></span>
<a href="{link controller='PackageUpdateServerEdit' id=$updateServer->packageUpdateServerID}{/link}" title="{lang}wcf.global.button.edit{/lang}" class="jsTooltip"><span class="icon icon16 fa-pencil"></span></a>
- <span class="icon icon16 fa-times jsDeleteButton jsTooltip pointer" title="{lang}wcf.global.button.delete{/lang}" data-object-id="{@$updateServer->packageUpdateServerID}" data-confirm-message-html="{lang __encode=true}wcf.acp.updateServer.delete.sure{/lang}"></span>
+ <span class="icon icon16 fa-times {if $updateServer->canDelete()}jsDeleteButton jsTooltip pointer{else}disabled{/if}" title="{lang}wcf.global.button.delete{/lang}" data-object-id="{@$updateServer->packageUpdateServerID}" data-confirm-message-html="{lang __encode=true}wcf.acp.updateServer.delete.sure{/lang}"></span>
{event name='itemButtons'}
</td>
return false;
}
+ /**
+ * Returns whether the current user may delete this update server.
+ *
+ * @return boolean
+ */
+ public final function canDelete() {
+ return !$this->isWoltLabUpdateServer() && !$this->isWoltLabStoreServer();
+ }
+
/**
* Returns true if the host is `update.woltlab.com`.
*
use wcf\data\AbstractDatabaseObjectAction;
use wcf\data\IToggleAction;
use wcf\data\TDatabaseObjectToggle;
+use wcf\system\exception\PermissionDeniedException;
/**
* Executes package update server-related actions.
* @inheritDoc
*/
protected $requireACP = ['create', 'delete', 'toggle', 'update'];
+
+ /**
+ * @inheritDoc
+ */
+ public function validateDelete() {
+ parent::validateDelete();
+
+ /** @var PackageUpdateServer $updateServer */
+ foreach ($this->getObjects() as $updateServer) {
+ if (!$updateServer->canDelete()) throw new PermissionDeniedException();
+ }
+ }
}