{foreach from=$objects item=updateServer}
<tr class="jsUpdateServerRow">
<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>
+ {if $updateServer->canDisable()}
+ <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>
+ {else}
+ <span class="icon icon16 fa-check-square-o disabled"></span>
+ {/if}
<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 {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>
+ <span class="icon icon16 fa-times {if $updateServer->canDelete()}jsDeleteButton jsTooltip pointer{else}disabled{/if}"{if $updateServer->canDelete()} 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}"{/if}></span>
{event name='itemButtons'}
</td>
if ($this->isWoltLabStoreServer()) {
$this->data['serverURL'] = 'http://store.woltlab.com/'.\wcf\getMinorVersion().'/';
}
+ if ($this->isWoltLabUpdateServer() || $this->isWoltLabStoreServer()) {
+ $this->data['isDisabled'] = 0;
+ }
}
/**
return !$this->isWoltLabUpdateServer() && !$this->isWoltLabStoreServer();
}
+ /**
+ * Returns whether the current user may disable this update server.
+ *
+ * @return boolean
+ * @since 5.3
+ */
+ public final function canDisable() {
+ return !$this->isWoltLabUpdateServer() && !$this->isWoltLabStoreServer();
+ }
+
/**
* Returns true if the host is `update.woltlab.com`.
*
* @method PackageUpdateServerEditor getSingleObject()
*/
class PackageUpdateServerAction extends AbstractDatabaseObjectAction implements IToggleAction {
- use TDatabaseObjectToggle;
+ use TDatabaseObjectToggle {
+ validateToggle as traitValidateToggle;
+ }
/**
* @inheritDoc
if (!$updateServer->canDelete()) throw new PermissionDeniedException();
}
}
+
+ /**
+ * @inheritDoc
+ */
+ public function validateToggle() {
+ $this->traitValidateToggle();
+
+ /** @var PackageUpdateServer $updateServer */
+ foreach ($this->getObjects() as $updateServer) {
+ if (!$updateServer->canDisable()) throw new PermissionDeniedException();
+ }
+ }
+
}
* @throws SystemException
*/
public function getPackageUpdateVersions($package, $version = '') {
+ $packageUpdateServerIDs = [];
+ foreach (PackageUpdateServer::getActiveUpdateServers() as $packageUpdateServer) {
+ $packageUpdateServerIDs[] = $packageUpdateServer->packageUpdateServerID;
+ }
+
// get newest package version
if (empty($version)) {
$version = $this->getNewestPackageVersion($package);
}
// get versions
+ $conditions = new PreparedStatementConditionBuilder();
+ $conditions->add('pu.package = ?', [$package]);
+ $conditions->add('puv.packageVersion = ?', [$version]);
+ $conditions->add('puv.isAccessible = ?', [1]);
+ $conditions->add('pus.packageUpdateServerID IN (?)', [$packageUpdateServerIDs]);
+
$sql = "SELECT puv.*, pu.*, pus.serverURL, pus.loginUsername, pus.loginPassword
FROM wcf".WCF_N."_package_update_version puv
LEFT JOIN wcf".WCF_N."_package_update pu
ON (pu.packageUpdateID = puv.packageUpdateID)
LEFT JOIN wcf".WCF_N."_package_update_server pus
ON (pus.packageUpdateServerID = pu.packageUpdateServerID)
- WHERE pu.package = ?
- AND puv.packageVersion = ?
- AND puv.isAccessible = ?
- AND pus.isDisabled = ?";
+ ".$conditions;
$statement = WCF::getDB()->prepareStatement($sql);
- $statement->execute([
- $package,
- $version,
- 1,
- 0
- ]);
+ $statement->execute($conditions->getParameters());
$versions = $statement->fetchAll(\PDO::FETCH_ASSOC);
if (empty($versions)) {