From d71e5a29f638d3981ad288f282bd0b9be0a51fb4 Mon Sep 17 00:00:00 2001 From: Alexander Ebert Date: Tue, 11 Oct 2011 18:12:03 +0200 Subject: [PATCH] Changed URL schema - CRASH FOR SURE Previous: index.php?form=UserEdit&userID=1234&s=abc Now: index.php/UserEdit/1234/?s=abc --- wcfsetup/install/files/acp/js/WCF.ACP.js | 73 ++- .../files/acp/templates/acpSessionLog.tpl | 16 +- .../files/acp/templates/acpSessionLogList.tpl | 22 +- .../install/files/acp/templates/cacheList.tpl | 4 +- .../files/acp/templates/cronjobAdd.tpl | 8 +- .../files/acp/templates/cronjobList.tpl | 26 +- .../files/acp/templates/cronjobLogList.tpl | 12 +- .../acp/templates/detailedPackageList.tpl | 108 +++++ .../install/files/acp/templates/header.tpl | 4 +- .../install/files/acp/templates/login.tpl | 2 +- .../files/acp/templates/masterPassword.tpl | 18 +- .../acp/templates/masterPasswordInit.tpl | 2 +- .../install/files/acp/templates/option.tpl | 2 +- .../files/acp/templates/optionImport.tpl | 4 +- .../acp/templates/packageAutoUpdateList.tpl | 2 +- .../templates/packageInstallationConfirm.tpl | 4 +- .../files/acp/templates/packageList.tpl | 167 ++++--- .../acp/templates/packageListPlugins.tpl | 12 + .../acp/templates/packageStartInstall.tpl | 6 +- .../packageUninstallationDependencies.tpl | 10 +- .../files/acp/templates/packageUpdate.tpl | 2 +- .../files/acp/templates/packageUpdateAuth.tpl | 2 +- .../acp/templates/packageUpdateSearch.tpl | 2 +- .../templates/packageUpdateSearchResult.tpl | 7 +- .../files/acp/templates/packageView.tpl | 421 +++++++++--------- .../files/acp/templates/updateServerAdd.tpl | 4 +- .../files/acp/templates/updateServerList.tpl | 22 +- .../install/files/acp/templates/userAdd.tpl | 8 +- .../files/acp/templates/userAssignToGroup.tpl | 4 +- .../acp/templates/userEmailAddressExport.tpl | 4 +- .../files/acp/templates/userGroupAdd.tpl | 6 +- .../files/acp/templates/userGroupList.tpl | 18 +- .../install/files/acp/templates/userList.tpl | 24 +- .../install/files/acp/templates/userMail.tpl | 8 +- .../files/acp/templates/userSearch.tpl | 6 +- .../acp/templates/usersMassProcessing.tpl | 2 +- wcfsetup/install/files/js/WCF.js | 8 +- .../lib/acp/form/MasterPasswordForm.class.php | 2 +- .../form/PackageStartInstallForm.class.php | 2 +- .../lib/acp/form/PackageUpdateForm.class.php | 2 +- .../form/PackageUpdateSearchForm.class.php | 2 +- .../lib/acp/form/UserSearchForm.class.php | 2 +- .../form/UsersMassProcessingForm.class.php | 2 +- .../page/DetailedPackageListPage.class.php | 67 +++ .../lib/acp/page/PackageListPage.class.php | 86 ++-- .../lib/acp/page/PackageViewPage.class.php | 2 +- .../files/lib/acp/page/UserListPage.class.php | 2 +- .../lib/data/package/PackageAction.class.php | 26 ++ .../install/files/lib/system/WCFACP.class.php | 5 +- .../builder/ACPMenuCacheBuilder.class.php | 2 +- .../PackageInstallationDispatcher.class.php | 4 +- .../PackageUninstallationDispatcher.class.php | 2 +- .../system/request/RequestHandler.class.php | 73 +-- .../files/lib/system/request/Route.class.php | 191 ++++++++ .../lib/system/request/RouteHandler.class.php | 108 +++++ 55 files changed, 1113 insertions(+), 517 deletions(-) create mode 100644 wcfsetup/install/files/acp/templates/detailedPackageList.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageListPlugins.tpl create mode 100644 wcfsetup/install/files/lib/acp/page/DetailedPackageListPage.class.php create mode 100644 wcfsetup/install/files/lib/system/request/Route.class.php create mode 100644 wcfsetup/install/files/lib/system/request/RouteHandler.class.php diff --git a/wcfsetup/install/files/acp/js/WCF.ACP.js b/wcfsetup/install/files/acp/js/WCF.ACP.js index 20dccb2fc0..a382ab7474 100644 --- a/wcfsetup/install/files/acp/js/WCF.ACP.js +++ b/wcfsetup/install/files/acp/js/WCF.ACP.js @@ -118,6 +118,67 @@ WCF.ACP.Menu.prototype = { } }; +WCF.ACP.Package = {}; + +WCF.ACP.Package.List = function(pages) { this.init(pages); }; +WCF.ACP.Package.List.prototype = { + _pages: {}, + _pluginLists: [], + _proxy: null, + _template: null, + + init: function(pages) { + $('.pluginList').each($.proxy(function(index, pluginList) { + var $wcfPages = $(pluginList).wcfPages({ + activePage: 1, + maxPage: pages + }).bind('wcfpagesshouldswitch', $.proxy(this._cachePage, this)).bind('wcfpagesswitched', $.proxy(this._loadPage, this)); + + this._pluginLists.push($wcfPages); + }, this)); + + if (this._pluginLists.length > 0) { + this._proxy = new WCF.Action.Proxy({ + success: $.proxy(this._success, this) + }); + this._template = $('#plugins ol'); + } + }, + + _cachePage: function(event, data) { + if (!this._pages[data.currentPage]) { + this._pages[data.currentPage] = $('#plugins ol').html(); + } + }, + + _loadPage: function(event, data) { + // update active page + for (var $i = 0, $size = this._pluginLists.length; $i < $size; $i++) { + this._pluginLists[$i].wcfPages('overridePage', data.activePage); + } + + if (this._pages[data.activePage]) { + this._template.html(this._pages[data.activePage]); + return; + } + + // load content using AJAX + this._proxy.setOption('data', { + actionName: 'getPluginList', + className: 'wcf\\data\\package\\PackageAction', + parameters: { + activePage: data.activePage + } + }); + this._proxy.sendRequest(); + }, + + _success: function(data, textStatus, jqXHR) { + this._pages[data.returnValues.activePage] = data.returnValues.template; + this._loadPage(null, { activePage: data.returnValues.activePage }); + } +}; + /** * Handles package installation dialog. * @@ -173,7 +234,7 @@ WCF.ACP.PackageInstallation.prototype = { prepareInstallation: function() { WCF.showAJAXDialog('packageInstallationDialog', true, { ajax: { - url: 'index.php?action=' + this._actionName + '&t=' + SECURITY_TOKEN + SID_ARG_2ND, + url: 'index.php/' + this._actionName + '/?t=' + SECURITY_TOKEN + SID_ARG_2ND, type: 'POST', data: { queueID: this._queueID, step: 'prepare' }, success: $.proxy(this._handleResponse, this) @@ -210,7 +271,7 @@ WCF.ACP.PackageInstallation.prototype = { $('#packageInstallationInnerContent').append('
'); $('#' + $id).click($.proxy(function() { - window.location.href = "index.php?page=PackageList" + SID_ARG_2ND; + window.location.href = "index.php/PackageList/" + SID_ARG_1ST; }, this)); $('#packageInstallationInnerContentContainer').wcfBlindIn(); @@ -308,7 +369,7 @@ WCF.ACP.PackageInstallation.prototype = { }, additionalData); $.ajax({ - url: 'index.php?action=' + this._actionName + '&t=' + SECURITY_TOKEN + SID_ARG_2ND, + url: 'index.php/' + this._actionName + '/?t=' + SECURITY_TOKEN + SID_ARG_2ND, dataType: 'json', type: 'POST', data: $data, @@ -366,7 +427,7 @@ WCF.ACP.PackageUninstallation.prototype = { // initialize dialog WCF.showAJAXDialog('packageInstallationDialog', true, { ajax: { - url: 'index.php?action=UninstallPackage&t=' + SECURITY_TOKEN + SID_ARG_2ND, + url: 'index.php/UninstallPackage/?t=' + SECURITY_TOKEN + SID_ARG_2ND, type: 'POST', data: { packageID: packageID, step: 'prepare' }, success: $.proxy(this._installation._handleResponse, this._installation) @@ -585,7 +646,7 @@ WCF.ACP.Worker.prototype = { // initialize AJAX-based dialog WCF.showAJAXDialog(this._dialogID, true, { ajax: { - url: 'index.php?action=WorkerProxy&t=' + SECURITY_TOKEN + SID_ARG_2ND, + url: 'index.php/WorkerProxy/?t=' + SECURITY_TOKEN + SID_ARG_2ND, type: 'POST', data: { className: className, @@ -617,7 +678,7 @@ WCF.ACP.Worker.prototype = { if ($data.progress < 100) { // send request for next loop $.ajax({ - url: 'index.php?action=WorkerProxy&t=' + SECURITY_TOKEN + SID_ARG_2ND, + url: 'index.php/WorkerProxy/?t=' + SECURITY_TOKEN + SID_ARG_2ND, type: 'POST', data: { className: $data.className, diff --git a/wcfsetup/install/files/acp/templates/acpSessionLog.tpl b/wcfsetup/install/files/acp/templates/acpSessionLog.tpl index e594a097d0..e73b3cb307 100644 --- a/wcfsetup/install/files/acp/templates/acpSessionLog.tpl +++ b/wcfsetup/install/files/acp/templates/acpSessionLog.tpl @@ -8,7 +8,7 @@
- {pages print=true assign=pagesLinks link="index.php?page=ACPSessionLog&sessionLogID=$sessionLogID&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} + {pages print=true assign=pagesLinks link="index.php/ACPSessionLog/$sessionLogID/?pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED}
{hascontent} @@ -20,13 +20,13 @@ - - - - - - - + + + + + + + {if $additionalColumnHeads|isset}{@$additionalColumnHeads}{/if} diff --git a/wcfsetup/install/files/acp/templates/acpSessionLogList.tpl b/wcfsetup/install/files/acp/templates/acpSessionLogList.tpl index 18fb1583b5..67dc77e4af 100644 --- a/wcfsetup/install/files/acp/templates/acpSessionLogList.tpl +++ b/wcfsetup/install/files/acp/templates/acpSessionLogList.tpl @@ -8,7 +8,7 @@
- {pages print=true assign=pagesLinks link="index.php?page=ACPSessionLogList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} + {pages print=true assign=pagesLinks link="index.php/ACPSessionLogList/?pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED}
{hascontent} @@ -20,13 +20,13 @@
{lang}wcf.global.objectID{/lang}{if $sortField == 'sessionAccessLogID'} {/if}{lang}wcf.user.ipAddress{/lang}{if $sortField == 'ipAddress'} {/if}{lang}wcf.acp.sessionLog.time{/lang}{if $sortField == 'time'} {/if}{lang}wcf.acp.sessionLog.packageName{/lang}{if $sortField == 'packageName'} {/if}{lang}wcf.acp.sessionLog.className{/lang}{if $sortField == 'className'} {/if}

{lang}wcf.acp.sessionLog.requestURI{/lang}{if $sortField == 'requestURI'} {/if}{lang}wcf.acp.sessionLog.requestMethod{/lang}{if $sortField == 'requestMethod'} {/if}{lang}wcf.global.objectID{/lang}{if $sortField == 'sessionAccessLogID'} {/if}{lang}wcf.user.ipAddress{/lang}{if $sortField == 'ipAddress'} {/if}{lang}wcf.acp.sessionLog.time{/lang}{if $sortField == 'time'} {/if}{lang}wcf.acp.sessionLog.packageName{/lang}{if $sortField == 'packageName'} {/if}{lang}wcf.acp.sessionLog.className{/lang}{if $sortField == 'className'} {/if}

{lang}wcf.acp.sessionLog.requestURI{/lang}{if $sortField == 'requestURI'} {/if}{lang}wcf.acp.sessionLog.requestMethod{/lang}{if $sortField == 'requestMethod'} {/if}
- - - - - - - + + + + + + + {if $additionalColumnHeads|isset}{@$additionalColumnHeads}{/if} @@ -37,9 +37,9 @@ {foreach from=$objects item=sessionLog} - - - + + + diff --git a/wcfsetup/install/files/acp/templates/cacheList.tpl b/wcfsetup/install/files/acp/templates/cacheList.tpl index 4f6ba66033..e602e9821a 100644 --- a/wcfsetup/install/files/acp/templates/cacheList.tpl +++ b/wcfsetup/install/files/acp/templates/cacheList.tpl @@ -51,7 +51,7 @@
@@ -99,7 +99,7 @@
{lang}wcf.global.objectID{/lang}{if $sortField == 'sessionLogID'} {/if}{lang}wcf.user.username{/lang}{if $sortField == 'username'} {/if}{lang}wcf.user.ipAddress{/lang}{if $sortField == 'ipAddress'} {/if}{lang}wcf.user.userAgent{/lang}{if $sortField == 'userAgent'} {/if}{lang}wcf.acp.sessionLog.time{/lang}{if $sortField == 'time'} {/if}{lang}wcf.acp.sessionLog.lastActivityTime{/lang}{if $sortField == 'lastActivityTime'} {/if}{lang}wcf.acp.sessionLog.accesses{/lang}{if $sortField == 'accesses'} {/if}{lang}wcf.global.objectID{/lang}{if $sortField == 'sessionLogID'} {/if}{lang}wcf.user.username{/lang}{if $sortField == 'username'} {/if}{lang}wcf.user.ipAddress{/lang}{if $sortField == 'ipAddress'} {/if}{lang}wcf.user.userAgent{/lang}{if $sortField == 'userAgent'} {/if}{lang}wcf.acp.sessionLog.time{/lang}{if $sortField == 'time'} {/if}{lang}wcf.acp.sessionLog.lastActivityTime{/lang}{if $sortField == 'lastActivityTime'} {/if}{lang}wcf.acp.sessionLog.accesses{/lang}{if $sortField == 'accesses'} {/if}

{@$sessionLog->sessionLogID}

{if $__wcf->user->userID == $sessionLog->userID}{/if} {$sessionLog->username}

{$sessionLog->ipAddress}{if $sessionLog->hostname != $sessionLog->ipAddress}
{$sessionLog->hostname}{/if}

{$sessionLog->userAgent}

{if $__wcf->user->userID == $sessionLog->userID}{/if} {$sessionLog->username}

{$sessionLog->ipAddress}{if $sessionLog->hostname != $sessionLog->ipAddress}
{$sessionLog->hostname}{/if}

{$sessionLog->userAgent}

{@$sessionLog->time|time}

{@$sessionLog->lastActivityTime|time}

{#$sessionLog->accesses}

- - - - - - - - + + + + + + + + {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if} @@ -88,7 +88,7 @@ {/if} {if $cronjob->isEditable()} - + {else} {/if} @@ -107,7 +107,7 @@ {foreach from=$updatableInstances item=$package} - + {/foreach} @@ -129,7 +129,7 @@ {/if}
- + {if $missingPackages == 0 && $excludingPackages|count == 0 && $excludedPackages|count == 0} {/if} diff --git a/wcfsetup/install/files/acp/templates/packageList.tpl b/wcfsetup/install/files/acp/templates/packageList.tpl index 975e53f60a..02829605c2 100644 --- a/wcfsetup/install/files/acp/templates/packageList.tpl +++ b/wcfsetup/install/files/acp/templates/packageList.tpl @@ -1,12 +1,16 @@ {include file='header'} - @@ -18,92 +22,85 @@ -
- {pages print=true assign=pagesLinks link="index.php?page=PackageList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} - - {if $__wcf->session->getPermission('admin.system.package.canInstallPackage') || $additionalLargeButtons|isset} - - {/if} -
+
+ -{if $objects|count > 0} -
-
-

{lang}wcf.acp.package.list{/lang} {#$items}

+
{lang}wcf.global.objectID{/lang}{if $sortField == 'cronjobID'} {/if}{lang}wcf.acp.cronjob.startMinuteShort{/lang}{if $sortField == 'startMinute'} {/if}{lang}wcf.acp.cronjob.startHourShort{/lang}{if $sortField == 'startHour'} {/if}{lang}wcf.acp.cronjob.startDomShort{/lang}{if $sortField == 'startDom'} {/if}{lang}wcf.acp.cronjob.startMonthShort{/lang}{if $sortField == 'startMonth'} {/if}{lang}wcf.acp.cronjob.startDowShort{/lang}{if $sortField == 'startDow'} {/if}{lang}wcf.acp.cronjob.description{/lang}{if $sortField == 'description'} {/if}{lang}wcf.acp.cronjob.nextExec{/lang}{if $sortField == 'nextExec'} {/if}{lang}wcf.global.objectID{/lang}{if $sortField == 'cronjobID'} {/if}{lang}wcf.acp.cronjob.startMinuteShort{/lang}{if $sortField == 'startMinute'} {/if}{lang}wcf.acp.cronjob.startHourShort{/lang}{if $sortField == 'startHour'} {/if}{lang}wcf.acp.cronjob.startDomShort{/lang}{if $sortField == 'startDom'} {/if}{lang}wcf.acp.cronjob.startMonthShort{/lang}{if $sortField == 'startMonth'} {/if}{lang}wcf.acp.cronjob.startDowShort{/lang}{if $sortField == 'startDow'} {/if}{lang}wcf.acp.cronjob.description{/lang}{if $sortField == 'description'} {/if}{lang}wcf.acp.cronjob.nextExec{/lang}{if $sortField == 'nextExec'} {/if}

{$cronjob->startDow|truncate:30:' ...'}

{if $cronjob->isEditable()} -

{$cronjob->description|truncate:50:" ..."}

+

{$cronjob->description|truncate:50:" ..."}

{else}

{$cronjob->description|truncate:50:' ...'}

{/if} @@ -132,7 +132,7 @@ {if $__wcf->session->getPermission('admin.system.cronjob.canAddCronjob')} {/if} diff --git a/wcfsetup/install/files/acp/templates/cronjobLogList.tpl b/wcfsetup/install/files/acp/templates/cronjobLogList.tpl index 3c45e95841..fa498b6e44 100644 --- a/wcfsetup/install/files/acp/templates/cronjobLogList.tpl +++ b/wcfsetup/install/files/acp/templates/cronjobLogList.tpl @@ -9,11 +9,11 @@
- {pages print=true assign=pagesLinks link="index.php?page=CronjobLogList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} + {pages print=true assign=pagesLinks link="index.php/CronjobLogList/?pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED}
{hascontent} -
+

{lang}wcf.acp.cronjob.log{/lang} {#$items}

@@ -22,10 +22,10 @@ - - - - + + + + {if $additionalColumns|isset}{@$additionalColumns}{/if} diff --git a/wcfsetup/install/files/acp/templates/detailedPackageList.tpl b/wcfsetup/install/files/acp/templates/detailedPackageList.tpl new file mode 100644 index 0000000000..4cd9a3e29e --- /dev/null +++ b/wcfsetup/install/files/acp/templates/detailedPackageList.tpl @@ -0,0 +1,108 @@ +{include file='header'} + + + +
+ +
+

{lang}wcf.acp.package.list{/lang}

+
+
+ +
+ {pages print=true assign=pagesLinks link="index.php?page=DetailedPackageList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} + + {if $__wcf->session->getPermission('admin.system.package.canInstallPackage') || $additionalLargeButtons|isset} + + {/if} +
+ +{if $objects|count > 0} +
{lang}wcf.global.objectID{/lang}{if $sortField == 'cronjobID'} {/if}{lang}wcf.acp.cronjob.className{/lang}{if $sortField == 'className'} {/if}{lang}wcf.acp.cronjob.description{/lang}{if $sortField == 'description'} {/if}{lang}wcf.acp.cronjob.log.execTime{/lang}{if $sortField == 'execTime'} {/if}{lang}wcf.global.objectID{/lang}{if $sortField == 'cronjobID'} {/if}{lang}wcf.acp.cronjob.className{/lang}{if $sortField == 'className'} {/if}{lang}wcf.acp.cronjob.description{/lang}{if $sortField == 'description'} {/if}{lang}wcf.acp.cronjob.log.execTime{/lang}{if $sortField == 'execTime'} {/if}
+ + + + + + + + + {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if} + + + + + {foreach from=$objects item=$package} + + + + + + + + + + {if $additionalColumns[$package->packageID]|isset}{@$additionalColumns[$package->packageID]}{/if} + + {/foreach} + +
{lang}wcf.acp.package.list.id{/lang}{if $sortField == 'packageID'} {/if}{lang}wcf.acp.package.list.name{/lang}{if $sortField == 'packageName'} {/if}{lang}wcf.acp.package.list.author{/lang}{if $sortField == 'author'} {/if}{lang}wcf.acp.package.list.version{/lang}{if $sortField == 'packageVersion'} {/if}{lang}wcf.acp.package.updateDate{/lang}{if $sortField == 'updateDate'} {/if}
+ {if $__wcf->session->getPermission('admin.system.package.canUpdatePackage')} + + {else} + + {/if} + {if $__wcf->session->getPermission('admin.system.package.canUninstallPackage') && $package->package != 'com.woltlab.wcf' && $package->packageID != PACKAGE_ID} + + {else} + + {/if} + + {if $additionalButtons[$package->packageID]|isset}{@$additionalButtons[$package->packageID]}{/if} +

{@$package->packageID}

+ {if $package->standalone} + + {elseif $package->isPlugin()} + + {else} + + {/if} + + {$package->getName()}{if $package->instanceNo > 1 && $package->instanceName == ''} (#{#$package->instanceNo}){/if} + authorURL|rawurlencode}" class="externalURL">{$package->author}{else}{$package->author}{/if}

{$package->packageVersion}

{@$package->updateDate|time}

+ +
+{/if} + + + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/header.tpl b/wcfsetup/install/files/acp/templates/header.tpl index f2d5879c60..8445738801 100644 --- a/wcfsetup/install/files/acp/templates/header.tpl +++ b/wcfsetup/install/files/acp/templates/header.tpl @@ -86,7 +86,7 @@
  • {lang}wcf.acp.user.userNote{/lang}
  • @@ -98,7 +98,7 @@

    {$package.packageName}{if $package.instanceNo > 1 && $package.instanceName == ''} (#{#$package.instanceNo}){/if}

    {$package.packageName}{if $package.instanceNo > 1 && $package.instanceName == ''} (#{#$package.instanceNo}){/if}

    {$package.packageVersion}

    - - - - - - - - - {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if} - - - - - {foreach from=$objects item=$package} - - - - - - - - - - {if $additionalColumns[$package->packageID]|isset}{@$additionalColumns[$package->packageID]}{/if} - - {/foreach} - -
    {lang}wcf.acp.package.list.id{/lang}{if $sortField == 'packageID'} {/if}{lang}wcf.acp.package.list.name{/lang}{if $sortField == 'packageName'} {/if}{lang}wcf.acp.package.list.author{/lang}{if $sortField == 'author'} {/if}{lang}wcf.acp.package.list.version{/lang}{if $sortField == 'packageVersion'} {/if}{lang}wcf.acp.package.updateDate{/lang}{if $sortField == 'updateDate'} {/if}
    - {if $__wcf->session->getPermission('admin.system.package.canUpdatePackage')} - - {else} - - {/if} - {if $__wcf->session->getPermission('admin.system.package.canUninstallPackage') && $package->package != 'com.woltlab.wcf' && $package->packageID != PACKAGE_ID} - - {else} - - {/if} - - {if $additionalButtons[$package->packageID]|isset}{@$additionalButtons[$package->packageID]}{/if} -

    {@$package->packageID}

    - {if $package->standalone} - - {elseif $package->isPlugin()} - - {else} - - {/if} - - {$package->getName()}{if $package->instanceNo > 1 && $package->instanceName == ''} (#{#$package->instanceNo}){/if} - authorURL|rawurlencode}" class="externalURL">{$package->author}{else}{$package->author}{/if}

    {$package->packageVersion}

    {@$package->updateDate|time}

    - + + {foreach from=$applications key=packageID item=package} +
    + {$package->getName()} + + <gimme sum icon> + +
    +
    package
    +
    {$package->package}
    +
    +
    +
    installed version
    +
    {$package->packageVersion}
    +
    +
    +
    create date
    +
    {$package->packageDate|date}
    +
    +
    +
    install date
    +
    {@$package->installDate|time}
    +
    +
    +
    update date
    +
    {@$package->updateDate|time}
    +
    +
    +
    creator
    +
    {if $package->authorURL}{/if}{$package->author}{if $package->authorURL}{/if}
    +
    + +
    + +
    +
    + {/foreach} -{/if} + + {hascontent} + + {/hascontent} +
    - {@$pagesLinks} - - {if $__wcf->session->getPermission('admin.system.package.canInstallPackage') || $additionalLargeButtons|isset} - - {/if} +
    {include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/packageListPlugins.tpl b/wcfsetup/install/files/acp/templates/packageListPlugins.tpl new file mode 100644 index 0000000000..986926054a --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageListPlugins.tpl @@ -0,0 +1,12 @@ +{foreach from=$plugins key=packageID item=package} +
  • + + {$package->getName()} + + + +
  • +{/foreach} diff --git a/wcfsetup/install/files/acp/templates/packageStartInstall.tpl b/wcfsetup/install/files/acp/templates/packageStartInstall.tpl index 34b2c3bda3..342e5e11fb 100644 --- a/wcfsetup/install/files/acp/templates/packageStartInstall.tpl +++ b/wcfsetup/install/files/acp/templates/packageStartInstall.tpl @@ -21,13 +21,13 @@
    - +
    @@ -75,7 +75,7 @@ {@SID_INPUT_TAG} - {if $packageID != 0}{/if} + {if $packageID != 0}{/if}
    diff --git a/wcfsetup/install/files/acp/templates/packageUninstallationDependencies.tpl b/wcfsetup/install/files/acp/templates/packageUninstallationDependencies.tpl index 4a062eff0c..e481080b6e 100644 --- a/wcfsetup/install/files/acp/templates/packageUninstallationDependencies.tpl +++ b/wcfsetup/install/files/acp/templates/packageUninstallationDependencies.tpl @@ -52,7 +52,7 @@ {if $packageObj->parentPackageID}
    {lang}wcf.acp.package.view.parent{/lang}
    -
    {$packageObj->getParentPackage()->getName()}
    +
    {$packageObj->getParentPackage()->getName()}
    {/if}
    @@ -93,12 +93,12 @@ {if $__wcf->session->getPermission('admin.system.package.canUpdatePackage')} - + {else} {/if} {if $__wcf->session->getPermission('admin.system.package.canUninstallPackage') && $package.package != 'com.woltlab.wcf' && $package.packageID != PACKAGE_ID} - + {else} {/if} @@ -115,7 +115,7 @@ {/if} -

    {$package.packageName}{if $package.instanceNo > 1 && $package.instanceName == ''} (#{#$package.instanceNo}){/if}

    +

    {$package.packageName}{if $package.instanceNo > 1 && $package.instanceName == ''} (#{#$package.instanceNo}){/if}

    {if $package.authorURL}{$package.author}{else}{$package.author}{/if}

    {$package.packageVersion}

    {@$package.packageDate|date}

    @@ -134,7 +134,7 @@ - + diff --git a/wcfsetup/install/files/acp/templates/packageUpdate.tpl b/wcfsetup/install/files/acp/templates/packageUpdate.tpl index a15cd3a726..69b4af38b5 100644 --- a/wcfsetup/install/files/acp/templates/packageUpdate.tpl +++ b/wcfsetup/install/files/acp/templates/packageUpdate.tpl @@ -27,7 +27,7 @@ {/if} {if $packageInstallationStack|count} -
    +
    diff --git a/wcfsetup/install/files/acp/templates/packageUpdateAuth.tpl b/wcfsetup/install/files/acp/templates/packageUpdateAuth.tpl index 668aa23b00..7436b0a6ab 100644 --- a/wcfsetup/install/files/acp/templates/packageUpdateAuth.tpl +++ b/wcfsetup/install/files/acp/templates/packageUpdateAuth.tpl @@ -74,7 +74,7 @@ {@SID_INPUT_TAG} - + {@$postParameters}
    diff --git a/wcfsetup/install/files/acp/templates/packageUpdateSearch.tpl b/wcfsetup/install/files/acp/templates/packageUpdateSearch.tpl index 5c378887f5..1320656cb0 100644 --- a/wcfsetup/install/files/acp/templates/packageUpdateSearch.tpl +++ b/wcfsetup/install/files/acp/templates/packageUpdateSearch.tpl @@ -51,7 +51,7 @@ {if !$updateServers|count}

    {lang}wcf.acp.updateServer.view.noneAvailable{/lang}

    {else} -
    +
    diff --git a/wcfsetup/install/files/acp/templates/packageUpdateSearchResult.tpl b/wcfsetup/install/files/acp/templates/packageUpdateSearchResult.tpl index ec7983ce20..d333d58555 100644 --- a/wcfsetup/install/files/acp/templates/packageUpdateSearchResult.tpl +++ b/wcfsetup/install/files/acp/templates/packageUpdateSearchResult.tpl @@ -10,10 +10,10 @@
    - {pages print=true assign=pagesLinks link="index.php?page=PackageUpdateSearchResult&searchID=$searchID&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} + {pages print=true assign=pagesLinks link="index.php/PackageUpdateSearchResult/$searchID/?pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED}
    - + {foreach from=$packages item=package}
    @@ -105,9 +105,8 @@
    - {@SID_INPUT_TAG} - +
    diff --git a/wcfsetup/install/files/acp/templates/packageView.tpl b/wcfsetup/install/files/acp/templates/packageView.tpl index f0cb08e479..1f2ec4a3af 100644 --- a/wcfsetup/install/files/acp/templates/packageView.tpl +++ b/wcfsetup/install/files/acp/templates/packageView.tpl @@ -3,11 +3,7 @@ @@ -20,70 +16,220 @@ -
    - {lang}wcf.acp.package.view.properties{/lang} +
    + + +
    + + {if $package->packageDescription} +
    +

    description

    +
    + +

    {$package->packageDescription}

    + {/if} +
    + + {if $requiredPackages|count || $dependentPackages|count} +
    + + + {hascontent} + + {/hascontent} + + {hascontent} + + {/hascontent} +
    + {/if} +
    {assign var=noDependentIsActive value=true} {foreach from=$dependentPackages item=dependentPackage} @@ -93,152 +239,17 @@ {/if} {/foreach} -
    + -{if $requiredPackages|count > 0} -
    - -
    -

    {lang}wcf.acp.package.view.requiredPackages{/lang}

    -

    {lang}wcf.acp.package.view.requiredPackages.description{/lang}

    -
    - - - - - - - - - - - {if $additionalColumns|isset}{@$additionalColumns}{/if} - - - - - {foreach from=$requiredPackages item=$package} - - - - - - - - - - {if $package.additionalColumns|isset}{@$package.additionalColumns}{/if} - - {/foreach} - -
    {lang}wcf.acp.package.list.id{/lang}{lang}wcf.acp.package.list.name{/lang}{lang}wcf.acp.package.list.author{/lang}{lang}wcf.acp.package.list.version{/lang}{lang}wcf.acp.package.list.date{/lang}
    - {if $__wcf->session->getPermission('admin.system.package.canUpdatePackage')} - - {else} - - {/if} - {if $__wcf->session->getPermission('admin.system.package.canUninstallPackage') && $package.package != 'com.woltlab.wcf' && $package.packageID != PACKAGE_ID} - - {else} - - {/if} - - {if $package.additionalButtons|isset}{@$package.additionalButtons}{/if} -

    {@$package.packageID}

    - {if $package.standalone} - - {elseif $package.parentPackageID} - - {else} - - {/if} -

    {$package.packageName}{if $package.instanceNo > 1 && $package.instanceName == ''} (#{#$package.instanceNo}){/if}

    {if $package.authorURL}

    {$package.author}{else}{$package.author}

    {/if}

    {$package.packageVersion}

    {@$package.packageDate|date}

    -
    - - -{/if} - -{if $dependentPackages|count > 0} -
    - -
    -

    {lang}wcf.acp.package.view.dependentPackages{/lang}

    -

    {lang}wcf.acp.package.view.dependentPackages.description{/lang}

    -
    - - - - - - - - - - - {if $additionalColumns|isset}{@$additionalColumns}{/if} - - - - - {foreach from=$dependentPackages item=$package} - - - - - - - - - - {if $package.additionalColumns|isset}{@$package.additionalColumns}{/if} - - {/foreach} - -
    {lang}wcf.acp.package.list.id{/lang}{lang}wcf.acp.package.list.name{/lang}{lang}wcf.acp.package.list.author{/lang}{lang}wcf.acp.package.list.version{/lang}{lang}wcf.acp.package.list.date{/lang}
    - {if $__wcf->session->getPermission('admin.system.package.canUpdatePackage')} - - {else} - - {/if} - {if $__wcf->session->getPermission('admin.system.package.canUninstallPackage') && $package.package != 'com.woltlab.wcf' && $package.packageID != PACKAGE_ID} - - {else} - - {/if} - - {if $package.additionalButtons|isset}{@$package.additionalButtons}{/if} -

    {@$package.packageID}

    - {if $package.standalone} - - {elseif $package.parentPackageID} - - {else} - - {/if} -

    {$package.packageName}{if $package.instanceNo > 1 && $package.instanceName == ''} (#{#$package.instanceNo}){/if}

    {if $package.authorURL}

    {$package.author}{else}{$package.author}

    {/if}

    {$package.packageVersion}

    {@$package.packageDate|date}

    - -
    - - -{/if} - {include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/updateServerAdd.tpl b/wcfsetup/install/files/acp/templates/updateServerAdd.tpl index f557ad24e2..6d08e0e8f4 100644 --- a/wcfsetup/install/files/acp/templates/updateServerAdd.tpl +++ b/wcfsetup/install/files/acp/templates/updateServerAdd.tpl @@ -21,11 +21,11 @@ -
    +
    diff --git a/wcfsetup/install/files/acp/templates/updateServerList.tpl b/wcfsetup/install/files/acp/templates/updateServerList.tpl index 0c109d5525..d547a97a7e 100644 --- a/wcfsetup/install/files/acp/templates/updateServerList.tpl +++ b/wcfsetup/install/files/acp/templates/updateServerList.tpl @@ -21,10 +21,10 @@ {/if}
    - {pages print=true assign=pagesLinks link="index.php?page=UpdateServerList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} + {pages print=true assign=pagesLinks link="index.php/UpdateServerList/?pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED}
    @@ -37,12 +37,12 @@ - - - - - - + + + + + + {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if} @@ -54,13 +54,13 @@ - + @@ -79,7 +79,7 @@ {@$pagesLinks} {hascontentelse} diff --git a/wcfsetup/install/files/acp/templates/userAdd.tpl b/wcfsetup/install/files/acp/templates/userAdd.tpl index 0ca8440804..f79d2d9f4b 100644 --- a/wcfsetup/install/files/acp/templates/userAdd.tpl +++ b/wcfsetup/install/files/acp/templates/userAdd.tpl @@ -72,14 +72,14 @@ - +
    @@ -256,7 +256,7 @@ {@SID_INPUT_TAG} - {if $userID|isset}{/if} + {if $userID|isset}{/if}
    diff --git a/wcfsetup/install/files/acp/templates/userAssignToGroup.tpl b/wcfsetup/install/files/acp/templates/userAssignToGroup.tpl index dcd6e9be3f..fa928474f5 100644 --- a/wcfsetup/install/files/acp/templates/userAssignToGroup.tpl +++ b/wcfsetup/install/files/acp/templates/userAssignToGroup.tpl @@ -11,7 +11,7 @@

    {lang}wcf.global.form.error{/lang}

    {/if} - +
    @@ -19,7 +19,7 @@ {lang}wcf.acp.user.assignToGroup.markedUsers{/lang}
      - {implode from=$users item=$user}
    • {$user}
    • {/implode} + {implode from=$users item=$user}
    • {$user}
    • {/implode}
    diff --git a/wcfsetup/install/files/acp/templates/userEmailAddressExport.tpl b/wcfsetup/install/files/acp/templates/userEmailAddressExport.tpl index 91fb1f1a04..fa6183d309 100644 --- a/wcfsetup/install/files/acp/templates/userEmailAddressExport.tpl +++ b/wcfsetup/install/files/acp/templates/userEmailAddressExport.tpl @@ -15,13 +15,13 @@ - +
    {lang}wcf.acp.user.exportEmailAddress.markedUsers{/lang}
      - {implode from=$users item=$user}
    • {$user}
    • {/implode} + {implode from=$users item=$user}
    • {$user}
    • {/implode}
    diff --git a/wcfsetup/install/files/acp/templates/userGroupAdd.tpl b/wcfsetup/install/files/acp/templates/userGroupAdd.tpl index 98fff66be1..65ef550458 100644 --- a/wcfsetup/install/files/acp/templates/userGroupAdd.tpl +++ b/wcfsetup/install/files/acp/templates/userGroupAdd.tpl @@ -34,13 +34,13 @@
    - +
    @@ -123,7 +123,7 @@ {@SID_INPUT_TAG} - {if $groupID|isset}{/if} + {if $groupID|isset}{/if}
    diff --git a/wcfsetup/install/files/acp/templates/userGroupList.tpl b/wcfsetup/install/files/acp/templates/userGroupList.tpl index 595ebcbbc2..5290fd4c79 100644 --- a/wcfsetup/install/files/acp/templates/userGroupList.tpl +++ b/wcfsetup/install/files/acp/templates/userGroupList.tpl @@ -8,10 +8,10 @@
    - {pages print=true assign=pagesLinks link="index.php?page=UserGroupList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} + {pages print=true assign=pagesLinks link="index.php/UserGroupList/?pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} @@ -26,9 +26,9 @@
    {lang}wcf.global.objectID{/lang}{if $sortField == 'packageUpdateServerID'} {/if}{lang}wcf.acp.updateServer.serverURL{/lang}{if $sortField == 'serverURL'} {/if}{lang}wcf.acp.updateServer.packages{/lang}{if $sortField == 'packages'} {/if}{lang}wcf.acp.updateServer.status{/lang}{if $sortField == 'status'} {/if}{lang}wcf.acp.updateServer.errorMessage{/lang}{if $sortField == 'errorMessage'} {/if}{lang}wcf.acp.updateServer.lastUpdateTime{/lang}{if $sortField == 'lastUpdateTime'} {/if}{lang}wcf.global.objectID{/lang}{if $sortField == 'packageUpdateServerID'} {/if}{lang}wcf.acp.updateServer.serverURL{/lang}{if $sortField == 'serverURL'} {/if}{lang}wcf.acp.updateServer.packages{/lang}{if $sortField == 'packages'} {/if}{lang}wcf.acp.updateServer.status{/lang}{if $sortField == 'status'} {/if}{lang}wcf.acp.updateServer.errorMessage{/lang}{if $sortField == 'errorMessage'} {/if}{lang}wcf.acp.updateServer.lastUpdateTime{/lang}{if $sortField == 'lastUpdateTime'} {/if}
    - + {if $additionalButtons[$updateServer->packageUpdateServerID]|isset}{@$additionalButtons[$updateServer->packageUpdateServerID]}{/if}

    {@$updateServer->packageUpdateServerID}

    {$updateServer->serverURL}

    {$updateServer->serverURL}

    {#$updateServer->packages}

    {@$updateServer->status}

    {@$updateServer->errorMessage|truncate:"30"}

    - - - + + + {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if} @@ -40,7 +40,7 @@ - - + + {if $additionalColumns[$group->groupID]|isset}{@$additionalColumns[$group->groupID]}{/if} @@ -69,7 +69,7 @@ {@$pagesLinks} diff --git a/wcfsetup/install/files/acp/templates/userList.tpl b/wcfsetup/install/files/acp/templates/userList.tpl index 968eab3c71..d2b771ac50 100644 --- a/wcfsetup/install/files/acp/templates/userList.tpl +++ b/wcfsetup/install/files/acp/templates/userList.tpl @@ -20,14 +20,14 @@ {assign var=encodedURL value=$url|rawurlencode} {assign var=encodedAction value=$action|rawurlencode}
    - {pages print=true assign=pagesLinks link="index.php?page=UserList&pageNo=%d&searchID=$searchID&action=$encodedAction&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} + {pages print=true assign=pagesLinks link="index.php/UserList/?pageNo=%d&searchID=$searchID&action=$encodedAction&sortField=$sortField&sortOrder=$sortOrder"|concat:SID_ARG_2ND_NOT_ENCODED} @@ -36,7 +36,7 @@
    @@ -46,11 +46,11 @@
    - - + + {foreach from=$columnHeads key=column item=columnLanguageVariable} - + {/foreach} {if $additionalColumnHeads|isset}{@$additionalColumnHeads}{/if} @@ -64,12 +64,12 @@ - + {foreach from=$columnHeads key=column item=columnLanguageVariable} @@ -100,9 +100,9 @@ diff --git a/wcfsetup/install/files/acp/templates/userMail.tpl b/wcfsetup/install/files/acp/templates/userMail.tpl index 27c8efc463..fc30edf28f 100644 --- a/wcfsetup/install/files/acp/templates/userMail.tpl +++ b/wcfsetup/install/files/acp/templates/userMail.tpl @@ -34,14 +34,14 @@ - +
    {if $action == ''} @@ -49,7 +49,7 @@ {lang}wcf.acp.user.sendMail.markedUsers{/lang}
    - {implode from=$users item=$user}{$user}{/implode} + {implode from=$users item=$user}{$user}{/implode}
    {/if} diff --git a/wcfsetup/install/files/acp/templates/userSearch.tpl b/wcfsetup/install/files/acp/templates/userSearch.tpl index 6e7daf4019..a79499d803 100644 --- a/wcfsetup/install/files/acp/templates/userSearch.tpl +++ b/wcfsetup/install/files/acp/templates/userSearch.tpl @@ -29,14 +29,14 @@
    - +
    diff --git a/wcfsetup/install/files/acp/templates/usersMassProcessing.tpl b/wcfsetup/install/files/acp/templates/usersMassProcessing.tpl index 5869997496..07a842bdbd 100644 --- a/wcfsetup/install/files/acp/templates/usersMassProcessing.tpl +++ b/wcfsetup/install/files/acp/templates/usersMassProcessing.tpl @@ -82,7 +82,7 @@

    {lang}wcf.acp.user.massProcessing.warning{/lang}

    - +
    diff --git a/wcfsetup/install/files/js/WCF.js b/wcfsetup/install/files/js/WCF.js index abe9eed148..3268afdd6c 100644 --- a/wcfsetup/install/files/js/WCF.js +++ b/wcfsetup/install/files/js/WCF.js @@ -483,12 +483,12 @@ WCF.Clipboard = { this._actionProxy = new WCF.Action.Proxy({ success: $.proxy(this._actionSuccess, this), - url: 'index.php?action=ClipboardProxy&t=' + SECURITY_TOKEN + SID_ARG_2ND + url: 'index.php/ClipboardProxy/?t=' + SECURITY_TOKEN + SID_ARG_2ND }); this._proxy = new WCF.Action.Proxy({ success: $.proxy(this._success, this), - url: 'index.php?action=Clipboard&t=' + SECURITY_TOKEN + SID_ARG_2ND + url: 'index.php/Clipboard/?t=' + SECURITY_TOKEN + SID_ARG_2ND }); // init containers first @@ -512,7 +512,7 @@ WCF.Clipboard = { pageClassName: this._page }, success: $.proxy(this._loadMarkedItemsSuccess, this), - url: 'index.php?action=ClipboardLoadMarkedItems&t=' + SECURITY_TOKEN + SID_ARG_2ND + url: 'index.php/ClipboardLoadMarkedItems/?t=' + SECURITY_TOKEN + SID_ARG_2ND }); }, @@ -898,7 +898,7 @@ WCF.Action.Proxy.prototype = { failure: null, success: null, type: 'POST', - url: 'index.php?action=AJAXProxy&t=' + SECURITY_TOKEN + SID_ARG_2ND + url: 'index.php/AJAXProxy/?t=' + SECURITY_TOKEN + SID_ARG_2ND }, options); this.confirmationDialog = null; diff --git a/wcfsetup/install/files/lib/acp/form/MasterPasswordForm.class.php b/wcfsetup/install/files/lib/acp/form/MasterPasswordForm.class.php index b5d0b3b23d..d593ce0b18 100755 --- a/wcfsetup/install/files/lib/acp/form/MasterPasswordForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/MasterPasswordForm.class.php @@ -83,7 +83,7 @@ class MasterPasswordForm extends ACPForm { // forward if (empty($this->url)) { - $this->url = 'index.php?page=Index'.SID_ARG_2ND_NOT_ENCODED; + $this->url = 'index.php/Index/'.SID_ARG_1ST; } HeaderUtil::redirect($this->url, false); exit; diff --git a/wcfsetup/install/files/lib/acp/form/PackageStartInstallForm.class.php b/wcfsetup/install/files/lib/acp/form/PackageStartInstallForm.class.php index 7c1f358086..48c3eebe05 100755 --- a/wcfsetup/install/files/lib/acp/form/PackageStartInstallForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/PackageStartInstallForm.class.php @@ -231,7 +231,7 @@ class PackageStartInstallForm extends ACPForm { $this->saved(); // open queue - HeaderUtil::redirect('index.php?page=Package&action=openQueue&processNo='.$processNo.''.SID_ARG_2ND_NOT_ENCODED); + HeaderUtil::redirect('index.php/Package/?action=openQueue&processNo='.$processNo.SID_ARG_2ND_NOT_ENCODED); exit; } diff --git a/wcfsetup/install/files/lib/acp/form/PackageUpdateForm.class.php b/wcfsetup/install/files/lib/acp/form/PackageUpdateForm.class.php index 4e12584ddb..f311efa233 100755 --- a/wcfsetup/install/files/lib/acp/form/PackageUpdateForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/PackageUpdateForm.class.php @@ -103,7 +103,7 @@ class PackageUpdateForm extends ACPForm { $this->saved(); // open queue - HeaderUtil::redirect('index.php?page=Package&action=openQueue&processNo='.$processNo.''.SID_ARG_2ND_NOT_ENCODED); + HeaderUtil::redirect('index.php/Package/?action=openQueue&processNo='.$processNo.''.SID_ARG_2ND_NOT_ENCODED); exit; } } diff --git a/wcfsetup/install/files/lib/acp/form/PackageUpdateSearchForm.class.php b/wcfsetup/install/files/lib/acp/form/PackageUpdateSearchForm.class.php index 6ca77b7f8c..2191fc4445 100644 --- a/wcfsetup/install/files/lib/acp/form/PackageUpdateSearchForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/PackageUpdateSearchForm.class.php @@ -242,7 +242,7 @@ class PackageUpdateSearchForm extends ACPForm { $this->saved(); // forward - HeaderUtil::redirect('index.php?page=PackageUpdateSearchResult&searchID='.$search->searchID.''.SID_ARG_2ND_NOT_ENCODED); + HeaderUtil::redirect('index.php/PackageUpdateSearchResult/'.$search->searchID.'/'.SID_ARG_1ST); exit; } diff --git a/wcfsetup/install/files/lib/acp/form/UserSearchForm.class.php b/wcfsetup/install/files/lib/acp/form/UserSearchForm.class.php index f9f18b19c8..dfe10e4da4 100755 --- a/wcfsetup/install/files/lib/acp/form/UserSearchForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/UserSearchForm.class.php @@ -214,7 +214,7 @@ class UserSearchForm extends UserOptionListForm { $this->saved(); // forward to result page - HeaderUtil::redirect('index.php?page=UserList&searchID='.$this->searchID.'&sortField='.rawurlencode($this->sortField).'&sortOrder='.rawurlencode($this->sortOrder).''.SID_ARG_2ND_NOT_ENCODED); + HeaderUtil::redirect('index.php/UserList/?searchID='.$this->searchID.'&sortField='.rawurlencode($this->sortField).'&sortOrder='.rawurlencode($this->sortOrder).''.SID_ARG_2ND_NOT_ENCODED); exit; } diff --git a/wcfsetup/install/files/lib/acp/form/UsersMassProcessingForm.class.php b/wcfsetup/install/files/lib/acp/form/UsersMassProcessingForm.class.php index 157cb6ec51..3a73922928 100644 --- a/wcfsetup/install/files/lib/acp/form/UsersMassProcessingForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/UsersMassProcessingForm.class.php @@ -197,7 +197,7 @@ class UsersMassProcessingForm extends UserOptionListForm { // show worker template WCF::getTPL()->assign(array( 'pageTitle' => WCF::getLanguage()->get('wcf.acp.user.sendMail'), - 'url' => 'index.php?action=UserMail&mailID='.$mailID.''.SID_ARG_2ND_NOT_ENCODED + 'url' => 'index.php/UserMail/'.$mailID.'/'.SID_ARG_1ST )); WCF::getTPL()->display('worker'); exit; diff --git a/wcfsetup/install/files/lib/acp/page/DetailedPackageListPage.class.php b/wcfsetup/install/files/lib/acp/page/DetailedPackageListPage.class.php new file mode 100644 index 0000000000..c196d40dd5 --- /dev/null +++ b/wcfsetup/install/files/lib/acp/page/DetailedPackageListPage.class.php @@ -0,0 +1,67 @@ + + * @package com.woltlab.wcf + * @subpackage acp.page + * @category Community Framework + */ +class DetailedPackageListPage extends SortablePage { + /** + * @see wcf\page\AbstractPage::$neededPermissions + */ + public $neededPermissions = array('admin.system.package.canUpdatePackage', 'admin.system.package.canUninstallPackage'); + + /** + * @see wcf\page\MultipleLinkPage::$itemsPerPage + */ + public $itemsPerPage = 50; + + /** + * @see wcf\page\SortablePage::$defaultSortField + */ + public $defaultSortField = 'packageType'; + + /** + * @see wcf\page\SortablePage::$defaultSortOrder + */ + public $defaultSortOrder = 'DESC'; + + /** + * @see wcf\page\SortablePage::$validSortFields + */ + public $validSortFields = array('packageID', 'package', 'packageDir', 'packageName', 'instanceNo', 'packageDescription', 'packageVersion', 'packageDate', 'packageURL', 'parentPackageID', 'isUnique', 'standalone', 'author', 'authorURL', 'installDate', 'updateDate'); + + /** + * @see wcf\page\MultipleLinkPage::$objectListClassName + */ + public $objectListClassName = 'wcf\data\package\PackageList'; + + /** + * @see wcf\page\MultipleLinkPage::readObjects() + */ + protected function readObjects() { + $this->sqlOrderBy = 'package.'.($this->sortField == 'packageType' ? 'standalone '.$this->sortOrder.', package.parentPackageID '.$this->sortOrder : $this->sortField.' '.$this->sortOrder).($this->sortField != 'packageName' ? ', package.packageName ASC' : ''); + + parent::readObjects(); + } + + /** + * @see wcf\page\IPage::show() + */ + public function show() { + // enable menu item + ACPMenu::getInstance()->setActiveMenuItem('wcf.acp.menu.link.package.list'); + + parent::show(); + } +} diff --git a/wcfsetup/install/files/lib/acp/page/PackageListPage.class.php b/wcfsetup/install/files/lib/acp/page/PackageListPage.class.php index 466c14d6f0..d3dd9f8a85 100755 --- a/wcfsetup/install/files/lib/acp/page/PackageListPage.class.php +++ b/wcfsetup/install/files/lib/acp/page/PackageListPage.class.php @@ -1,63 +1,69 @@ - * @package com.woltlab.wcf - * @subpackage acp.page - * @category Community Framework - */ -class PackageListPage extends SortablePage { - /** - * @see wcf\page\AbstractPage::$templateName - */ - public $templateName = 'packageList'; - +class PackageListPage extends AbstractPage { /** - * @see wcf\page\AbstractPage::$neededPermissions + * list of applications + * @var wcf\data\package\PackageList */ - public $neededPermissions = array('admin.system.package.canUpdatePackage', 'admin.system.package.canUninstallPackage'); + protected $applicationList = null; /** - * @see wcf\page\MultipleLinkPage::$itemsPerPage + * plugin count + * @var integer */ - public $itemsPerPage = 50; + protected $pluginCount = 0; /** - * @see wcf\page\SortablePage::$defaultSortField + * list of plugins + * @var wcf\data\package\PackageList */ - public $defaultSortField = 'packageType'; + protected $pluginList = null; /** - * @see wcf\page\SortablePage::$defaultSortOrder + * @see wcf\page\IPage::readData() */ - public $defaultSortOrder = 'DESC'; + public function readData() { + parent::readData(); + + // read applications + $this->applicationList = new PackageList(); + $this->applicationList->getConditionBuilder()->add("package.standalone = ?", array(1)); + + // DEBUG ONLY - remove comment to exclude WCF from display + //$this->applicationList->getConditionBuilder()->add("package.packageID <> ?", array(1)); + // DEBUG ONLY + + $this->applicationList->sqlLimit = 0; + $this->applicationList->readObjects(); + + // read plugins + $this->pluginList = Package::getPluginList(); + + // count total plugins + $this->pluginCount = $this->pluginList->countObjects(); + + // read plugins + $this->pluginList->sqlLimit = 1; + $this->pluginList->readObjects(); + } /** - * @see wcf\page\SortablePage::$validSortFields + * @see wcf\page\IPage::assignVariables() */ - public $validSortFields = array('packageID', 'package', 'packageDir', 'packageName', 'instanceNo', 'packageDescription', 'packageVersion', 'packageDate', 'packageURL', 'parentPackageID', 'isUnique', 'standalone', 'author', 'authorURL', 'installDate', 'updateDate'); - - /** - * @see wcf\page\MultipleLinkPage::$objectListClassName - */ - public $objectListClassName = 'wcf\data\package\PackageList'; - - /** - * @see wcf\page\MultipleLinkPage::readObjects() - */ - protected function readObjects() { - $this->sqlOrderBy = 'package.'.($this->sortField == 'packageType' ? 'standalone '.$this->sortOrder.', package.parentPackageID '.$this->sortOrder : $this->sortField.' '.$this->sortOrder).($this->sortField != 'packageName' ? ', package.packageName ASC' : ''); + public function assignVariables() { + parent::assignVariables(); - parent::readObjects(); + WCF::getTPL()->assign(array( + 'applications' => $this->applicationList, + 'plugins' => $this->pluginList, + 'pluginsCount' => $this->pluginCount + )); } /** diff --git a/wcfsetup/install/files/lib/acp/page/PackageViewPage.class.php b/wcfsetup/install/files/lib/acp/page/PackageViewPage.class.php index 05141b848f..e4d8c5e5d4 100755 --- a/wcfsetup/install/files/lib/acp/page/PackageViewPage.class.php +++ b/wcfsetup/install/files/lib/acp/page/PackageViewPage.class.php @@ -64,7 +64,7 @@ class PackageViewPage extends AbstractPage { public function readParameters() { parent::readParameters(); - if (isset($_REQUEST['packageID'])) $this->packageID = intval($_REQUEST['packageID']); + if (isset($_REQUEST['id'])) $this->packageID = intval($_REQUEST['id']); $this->package = new Package($this->packageID); if (!$this->package->packageID) { throw new IllegalLinkException(); diff --git a/wcfsetup/install/files/lib/acp/page/UserListPage.class.php b/wcfsetup/install/files/lib/acp/page/UserListPage.class.php index 002d3c2489..1004d6f276 100755 --- a/wcfsetup/install/files/lib/acp/page/UserListPage.class.php +++ b/wcfsetup/install/files/lib/acp/page/UserListPage.class.php @@ -114,7 +114,7 @@ class UserListPage extends SortablePage { $this->readUsers(); // build page url - $this->url = 'index.php?page=UserList&searchID='.$this->searchID.'&action='.rawurlencode($this->action).'&pageNo='.$this->pageNo.'&sortField='.$this->sortField.'&sortOrder='.$this->sortOrder.''.SID_ARG_2ND_NOT_ENCODED; + $this->url = 'index.php/UserList/?searchID='.$this->searchID.'&action='.rawurlencode($this->action).'&pageNo='.$this->pageNo.'&sortField='.$this->sortField.'&sortOrder='.$this->sortOrder.''.SID_ARG_2ND_NOT_ENCODED; } /** diff --git a/wcfsetup/install/files/lib/data/package/PackageAction.class.php b/wcfsetup/install/files/lib/data/package/PackageAction.class.php index 452cace789..300e777d4d 100644 --- a/wcfsetup/install/files/lib/data/package/PackageAction.class.php +++ b/wcfsetup/install/files/lib/data/package/PackageAction.class.php @@ -1,6 +1,7 @@ sqlLimit = 1; + $pluginList->sqlOffset = (($this->parameters['activePage'] - 1) * 1); + $pluginList->readObjects(); + + WCF::getTPL()->assign(array( + 'plugins' => $pluginList + )); + return array( + 'activePage' => $this->parameters['activePage'], + 'template' => WCF::getTPL()->fetch('packageListPlugins') + ); + } } diff --git a/wcfsetup/install/files/lib/system/WCFACP.class.php b/wcfsetup/install/files/lib/system/WCFACP.class.php index 089b0d4b50..155944c872 100644 --- a/wcfsetup/install/files/lib/system/WCFACP.class.php +++ b/wcfsetup/install/files/lib/system/WCFACP.class.php @@ -45,9 +45,12 @@ class WCFACP extends WCF { * Does the user authentication. */ protected function initAuth() { + /** + * @todo FIX THIS! + */ if ((!isset($_REQUEST['page']) || ($_REQUEST['page'] != 'Logout' && $_REQUEST['page'] != 'ACPCaptcha')) && (isset($_REQUEST['page']) || !isset($_REQUEST['form']) || $_REQUEST['form'] != 'Login')) { if (WCF::getUser()->userID == 0) { - util\HeaderUtil::redirect('index.php?form=Login'.SID_ARG_2ND_NOT_ENCODED); + util\HeaderUtil::redirect('index.php/Login/'.SID_ARG_1ST); exit; } else { diff --git a/wcfsetup/install/files/lib/system/cache/builder/ACPMenuCacheBuilder.class.php b/wcfsetup/install/files/lib/system/cache/builder/ACPMenuCacheBuilder.class.php index 3b6d478ddd..b3b6bf648a 100644 --- a/wcfsetup/install/files/lib/system/cache/builder/ACPMenuCacheBuilder.class.php +++ b/wcfsetup/install/files/lib/system/cache/builder/ACPMenuCacheBuilder.class.php @@ -83,7 +83,7 @@ class ACPMenuCacheBuilder implements ICacheBuilder { 'packageID' => $packageID, 'menuItem' => 'wcf.acp.option.category.'.$row['categoryName'], 'parentMenuItem' => 'wcf.acp.menu.link.option.category', - 'menuItemLink' => 'index.php?form=Option&categoryID='.$row['categoryID'], + 'menuItemLink' => 'index.php/Option/'.$row['categoryID'].'/', 'packageDir' => '', 'permissions' => $row['permissions'], 'options' => $row['options'] diff --git a/wcfsetup/install/files/lib/system/package/PackageInstallationDispatcher.class.php b/wcfsetup/install/files/lib/system/package/PackageInstallationDispatcher.class.php index 1d1bfe6a10..33c8f2412f 100644 --- a/wcfsetup/install/files/lib/system/package/PackageInstallationDispatcher.class.php +++ b/wcfsetup/install/files/lib/system/package/PackageInstallationDispatcher.class.php @@ -525,11 +525,11 @@ class PackageInstallationDispatcher { $packageInstallation = $statement->fetchArray(); if (!isset($packageInstallation['queueID'])) { - HeaderUtil::redirect('index.php?page=PackageList'.SID_ARG_2ND_NOT_ENCODED); + HeaderUtil::redirect('index.php/PackageList/?'.SID_ARG_1ST); exit; } else { - HeaderUtil::redirect('index.php?page=Package&action='.$packageInstallation['action'].'&queueID='.$packageInstallation['queueID'].''.SID_ARG_2ND_NOT_ENCODED); + HeaderUtil::redirect('index.php/Package/?action='.$packageInstallation['action'].'&queueID='.$packageInstallation['queueID'].''.SID_ARG_2ND_NOT_ENCODED); exit; } } diff --git a/wcfsetup/install/files/lib/system/package/PackageUninstallationDispatcher.class.php b/wcfsetup/install/files/lib/system/package/PackageUninstallationDispatcher.class.php index 7361f45d34..7b768f8b1f 100644 --- a/wcfsetup/install/files/lib/system/package/PackageUninstallationDispatcher.class.php +++ b/wcfsetup/install/files/lib/system/package/PackageUninstallationDispatcher.class.php @@ -280,7 +280,7 @@ class PackageUninstallationDispatcher extends PackageInstallationDispatcher { )); } - HeaderUtil::redirect('index.php?page=Package&action=openQueue&processNo='.$processNo.''.SID_ARG_2ND_NOT_ENCODED); + HeaderUtil::redirect('index.php/Package/?action=openQueue&processNo='.$processNo.''.SID_ARG_2ND_NOT_ENCODED); exit; } } diff --git a/wcfsetup/install/files/lib/system/request/RequestHandler.class.php b/wcfsetup/install/files/lib/system/request/RequestHandler.class.php index 23702203b8..cea5ada08d 100644 --- a/wcfsetup/install/files/lib/system/request/RequestHandler.class.php +++ b/wcfsetup/install/files/lib/system/request/RequestHandler.class.php @@ -28,25 +28,12 @@ class RequestHandler extends SingletonFactory { * @param boolean $isACP */ public function handle($application = 'wcf', $isACP = false) { - // default values - $pageName = 'Index'; - $pageType = 'page'; - - if (!empty($_GET['page']) || !empty($_POST['page'])) { - $pageName = (!empty($_GET['page']) ? $_GET['page'] : $_POST['page']); - $pageType = 'page'; - } - else if (!empty($_GET['form']) || !empty($_POST['form'])) { - $pageName = (!empty($_GET['form']) ? $_GET['form'] : $_POST['form']); - $pageType = 'form'; - } - else if (!empty($_GET['action']) || !empty($_POST['action'])) { - $pageName = (!empty($_GET['action']) ? $_GET['action'] : $_POST['action']); - $pageType = 'action'; + if (!RouteHandler::getInstance()->matches($isACP)) { + throw new SystemException("Cannot handle request, no valid route provided."); } // build request - $this->buildRequest($pageName, $pageType, $application, $isACP); + $this->buildRequest($application, $isACP); // start request $this->activeRequest->execute(); } @@ -54,40 +41,60 @@ class RequestHandler extends SingletonFactory { /** * Builds a new request. * - * @param string $pageName * @param string $application - * @param string $pageType * @param boolean $isACP */ - protected function buildRequest($pageName, $pageType, $application, $isACP) { + protected function buildRequest($application, $isACP) { try { + $routeData = RouteHandler::getInstance()->getRouteData(); + $controller = $routeData['controller']; + // validate class name - if (!preg_match('~^[a-z0-9_]+$~i', $pageName)) { - throw new SystemException("Illegal class name '".$pageName."'"); + if (!preg_match('~^[a-z0-9_]+$~i', $controller)) { + throw new SystemException("Illegal class name '".$controller."'"); } // find class - $className = $application.'\\'.($isACP ? 'acp\\' : '').$pageType.'\\'.ucfirst($pageName).ucfirst($pageType); - if ($application != 'wcf' && !class_exists($className)) { - $className = 'wcf\\'.($isACP ? 'acp\\' : '').$pageType.'\\'.ucfirst($pageName).ucfirst($pageType); - } - if (!class_exists($className)) { - throw new SystemException("unable to find class '".$className."'"); - } + $classData = $this->getClassData($controller, 'page', $application, $isACP); + if ($classData === null) $classData = $this->getClassData($controller, 'form', $application, $isACP); + if ($classData === null) $classData = $this->getClassData($controller, 'action', $application, $isACP); - // check whether the class is abstract - $reflectionClass = new \ReflectionClass($className); - if ($reflectionClass->isAbstract()) { - throw new SystemException("class '".$className."' is abstract"); + if ($classData === null) { + throw new SystemException("unable to find class for controller '".$controller."'"); + } + else if (!class_exists($classData['className'])) { + throw new SystemException("unable to find class '".$classData['className']."'"); } - $this->activeRequest = new Request($className, $pageName, $pageType); + $this->activeRequest = new Request($classData['className'], $classData['controller'], $classData['pageType']); } catch (SystemException $e) { throw new IllegalLinkException(); } } + protected function getClassData($controller, $pageType, $application, $isACP) { + $className = $application.'\\'.($isACP ? 'acp\\' : '').$pageType.'\\'.ucfirst($controller).ucfirst($pageType); + if ($application != 'wcf' && !class_exists($className)) { + $className = 'wcf\\'.($isACP ? 'acp\\' : '').$pageType.'\\'.ucfirst($controller).ucfirst($pageType); + } + if (!class_exists($className)) { + return null; + } + + // check whether the class is abstract + $reflectionClass = new \ReflectionClass($className); + if ($reflectionClass->isAbstract()) { + return null; + } + + return array( + 'className' => $className, + 'controller' => $controller, + 'pageType' => $pageType + ); + } + /** * Returns the active request object. * diff --git a/wcfsetup/install/files/lib/system/request/Route.class.php b/wcfsetup/install/files/lib/system/request/Route.class.php new file mode 100644 index 0000000000..62fb7d5c5b --- /dev/null +++ b/wcfsetup/install/files/lib/system/request/Route.class.php @@ -0,0 +1,191 @@ + + * @package com.woltlab.wcf + * @subpackage system.request + * @category Community Framework + */ +class Route { + /** + * route is restricted to ACP + * @var boolean + */ + protected $isACP = false; + + /** + * schema component options + * @var array + */ + protected $parameterOptions = array(); + + /** + * route name + * @var string + */ + protected $routeName = ''; + + /** + * route schema data + * @var array + */ + protected $routeSchema = array(); + + /** + * parsed route data + * @var array + */ + protected $routeData = null; + + /** + * Creates a new route. + * + * @param string $routeName + * @param boolean $isACP + */ + public function __construct($routeName, $isACP = false) { + $this->isACP = $isACP; + $this->routeName = $routeName; + } + + /** + * Sets route schema, e.g. /{controller}/{id} + * + * @param string $routeSchema + */ + public function setSchema($routeSchema) { + $schemaParts = $this->getParts($routeSchema); + $hasController = false; + $pattern = '~^{[a-zA-Z]+}$~'; + foreach ($schemaParts as &$part) { + if (!preg_match($pattern, $part)) { + throw new SystemException("Placeholder expected, but invalid string '" . $part . "' given."); + } + + $part = str_replace(array('{', '}'), '', $part); + if ($part == 'controller') { + $hasController = true; + } + } + + // each route must define a controller + if (!$hasController) { + throw new SystemException('Route schema does not provide a valid placeholder for controller.'); + } + + $this->routeSchema = $schemaParts; + } + + /** + * Sets options for a route parameter. + * + * @param string $key + * @param string $default + * @param string $regexPattern + * @param boolean $isOptional + */ + public function setParameterOption($key, $default = null, $regexPattern = null, $isOptional = false) { + if ($key == 'controller' && (empty($default) && $isOptional)) { + throw new SystemException('Routes require a controller, it is not possible to regard them as optional without a default value.'); + } + + $this->parameterOptions[$key] = array( + 'default' => $default, + 'isOptional' => $isOptional, + 'regexPattern' => $regexPattern + ); + } + + /** + * Returns true, if given request url matches this route. + * + * @param string $requestURL + * @return boolean + */ + public function matches($requestURL) { + $urlParts = $this->getParts($requestURL); + $data = array(); + + // handle each route schema component + for ($i = 0, $size = count($this->routeSchema); $i < $size; $i++) { + $schemaPart = $this->routeSchema[$i]; + + if (isset($urlParts[$i])) { + if (isset($this->parameterOptions[$schemaPart])) { + // validate parameter against a regex pattern + if ($this->parameterOptions[$schemaPart]['regexPattern'] !== null) { + $pattern = '~^' . $this->parameterOptions[$schemaPart]['regexPattern'] . '$~'; + if (!preg_match($pattern, $urlParts[$i])) { + return false; + } + } + } + + // url component passed previous validation + $data[$schemaPart] = $urlParts[$i]; + } + else { + if (isset($this->parameterOptions[$schemaPart])) { + // default value is provided + if ($this->parameterOptions[$schemaPart]['default'] !== null) { + $data[$schemaPart] = $this->parameterOptions[$schemaPart]['default']; + continue; + } + + // required parameter is missing + if (!$this->parameterOptions[$schemaPart]['isOptional']) { + return false; + } + } + } + } + + $this->routeData = $data; + return true; + } + + /** + * Returns parsed route data. + * + * @return array + */ + public function getRouteData() { + return $this->routeData; + } + + /** + * Returns non-empty URL components. + * + * @param string $requestURL + * @return array + */ + protected function getParts($requestURL) { + $urlParts = preg_split('~(\/|\-|\_|\.)~', $requestURL); + foreach ($urlParts as $index => $part) { + if (empty($part)) { + unset($urlParts[$index]); + } + } + + // re-index parts + return array_values($urlParts); + } + + /** + * Returns true if route applies for ACP. + * + * @return boolean + */ + public function isACP() { + return $this->isACP; + } +} diff --git a/wcfsetup/install/files/lib/system/request/RouteHandler.class.php b/wcfsetup/install/files/lib/system/request/RouteHandler.class.php new file mode 100644 index 0000000000..bb0146e6c2 --- /dev/null +++ b/wcfsetup/install/files/lib/system/request/RouteHandler.class.php @@ -0,0 +1,108 @@ + + * @package com.woltlab.wcf + * @subpackage system.request + * @category Community Framework + */ +class RouteHandler extends SingletonFactory { + /** + * list of available routes + * @var array + */ + protected $routes = array(); + + /** + * parsed route data + * @var array + */ + protected $routeData = null; + + /** + * @see wcf\system\SingletonFactory::init() + */ + protected function init() { + $this->addDefaultRoutes(); + } + + /** + * Adds default routes. + */ + protected function addDefaultRoutes() { + $acpRoute = new Route('ACP_default', true); + $acpRoute->setSchema('/{controller}/{id}'); + $acpRoute->setParameterOption('controller', 'Index', null, true); + $acpRoute->setParameterOption('id', null, '\d+', true); + $this->addRoute($acpRoute); + + $defaultRoute = new Route('default'); + $defaultRoute->setSchema('/{controller}/{id}'); + $defaultRoute->setParameterOption('controller', 'Index', null, true); + $defaultRoute->setParameterOption('id', null, '\d+', true); + $this->addRoute($defaultRoute); + } + + /** + * Adds a new route to the beginning of all routes. + * + * @param wcf\system\request\Route $route + */ + public function addRoute(Route $route) { + array_unshift($this->routes, $route); + } + + /** + * Returns true, if a route matches. Please bear in mind, that the + * first route which is able to consume all path components is used, + * even if other routes may fit better. Route order is crucial! + * + * @param boolean $isACP + * @return boolean + */ + public function matches($isACP) { + $pathInfo = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : ''; + + foreach ($this->routes as $route) { + if ($isACP != $route->isACP()) { + continue; + } + + if ($route->matches($pathInfo)) { + $this->routeData = $route->getRouteData(); + $this->registerRouteData(); + return true; + } + } + + return false; + } + + /** + * Returns parsed route data + * + * @return array + */ + public function getRouteData() { + return $this->routeData; + } + + /** + * Registers route data within $_GET and $_REQUEST. + */ + protected function registerRouteData() { + foreach ($this->routeData as $key => $value) { + $_GET[$key] = $value; + $_REQUEST[$key] = $value; + } + } +} -- 2.20.1
    {lang}wcf.global.objectID{/lang}{if $sortField == 'groupID'} {/if}{lang}wcf.acp.group.groupName{/lang}{if $sortField == 'groupName'} {/if}{lang}wcf.acp.group.members{/lang}{if $sortField == 'members'} {/if}{lang}wcf.global.objectID{/lang}{if $sortField == 'groupID'} {/if}{lang}wcf.acp.group.groupName{/lang}{if $sortField == 'groupName'} {/if}{lang}wcf.acp.group.members{/lang}{if $sortField == 'members'} {/if}
    {if $group->isEditable()} - + {else} {/if} @@ -53,8 +53,8 @@ {if $additionalButtons[$group->groupID]|isset}{@$additionalButtons[$group->groupID]}{/if}

    {@$group->groupID}

    {if $group->isEditable()}

    {lang}{$group->groupName}{/lang}{else}{lang}{$group->groupName}{/lang}

    {/if}

    {#$group->members}

    {if $group->isEditable()}

    {lang}{$group->groupName}{/lang}{else}{lang}{$group->groupName}{/lang}

    {/if}

    {#$group->members}

    {lang}wcf.global.objectID{/lang}{if $sortField == 'userID'} {/if}{lang}wcf.user.username{/lang}{if $sortField == 'username'} {/if}{lang}wcf.global.objectID{/lang}{if $sortField == 'userID'} {/if}{lang}wcf.user.username{/lang}{if $sortField == 'username'} {/if}{lang}{$columnLanguageVariable}{/lang}{if $sortField == $column} {/if}{lang}{$columnLanguageVariable}{/lang}{if $sortField == $column} {/if} {if $user->editable} - + {else} {/if} {if $user->deletable} - + {else} {/if} @@ -77,7 +77,7 @@ {if $additionalButtons[$user->userID]|isset}{@$additionalButtons[$user->userID]}{/if}

    {@$user->userID}

    {if $user->editable}{$user->username}{else}{$user->username}{/if}

    {if $user->editable}{$user->username}{else}{$user->username}{/if}

    {if $columnValues[$user->userID][$column]|isset}{@$columnValues[$user->userID][$column]}{/if}