<fieldset{if $errorField == 'applications'} class="formError"{/if}>
<legend>{lang}wcf.acp.application.group.availableApplications{/lang}</legend>
- <div class="tabularBox">
- <table class="table">
- <thead>
- <tr>
- <th class="columnID columnPackageID" colspan="2">{lang}wcf.global.objectID{/lang}</th>
- <th class="columnText columnPackageName">{lang}wcf.acp.package.name{/lang}</th>
- <th class="columnText columnDomainName">{lang}wcf.acp.application.domainName{/lang}</th>
- <th class="columnText columnDomainPath">{lang}wcf.acp.application.domainPath{/lang}</th>
- <th class="columnText columnCookieDomain">{lang}wcf.acp.application.cookieDomain{/lang}</th>
- <th class="columnText columnCookiePath">{lang}wcf.acp.application.cookiePath{/lang}</th>
-
- {event name='headColumns'}
- </tr>
- </thead>
-
- <tbody>
- {foreach from=$availableApplications item=application}
- <tr data-package="{$application->package}">
- <td class="columnIcon"><a href="{link controller='ApplicationEdit' id=$application->packageID}{/link}"><img src="{@RELATIVE_WCF_DIR}icon/edit.svg" alt="" class="icon16 jsTooltip" title="{lang}wcf.global.button.edit{/lang}" /></a></td>
- <td class="columnID columnPackageID">{#$application->packageID}</td>
- <td class="columnText columnPackageName"><a href="{link controller='PackageView' id=$application->packageID}{/link}">{lang}{$application->packageName}{/lang}</a></td>
- <td class="columnText columnDomainName">{$application->domainName}</td>
- <td class="columnText columnDomainPath">{$application->domainPath}</td>
- <td class="columnText columnCookieDomain">{$application->cookieDomain}</td>
- <td class="columnText columnCookiePath">{$application->cookiePath}</td>
+ {if $availableApplications|count > 1}
+ <div class="tabularBox">
+ <table class="table">
+ <thead>
+ <tr>
+ <th class="columnID columnPackageID" colspan="3">{lang}wcf.global.objectID{/lang}</th>
+ <th class="columnText columnPackageName">{lang}wcf.acp.package.name{/lang}</th>
+ <th class="columnText columnDomainName">{lang}wcf.acp.application.domainName{/lang}</th>
+ <th class="columnText columnDomainPath">{lang}wcf.acp.application.domainPath{/lang}</th>
+ <th class="columnText columnCookieDomain">{lang}wcf.acp.application.cookieDomain{/lang}</th>
+ <th class="columnText columnCookiePath">{lang}wcf.acp.application.cookiePath{/lang}</th>
- {event name='columns'}
+ {event name='headColumns'}
</tr>
- {/foreach}
- </tbody>
- </table>
- </div>
-
- {if $errorField == 'applications'}
- <small class="innerError">
- {if $errorType == 'empty'}
- {lang}wcf.global.form.error.empty{/lang}
- {else}
- {lang}wcf.acp.application.group.applications.error.{$errorType}{/lang}
- {/if}
- </small>
+ </thead>
+
+ <tbody>
+ {foreach from=$availableApplications item=application}
+ <tr data-package="{$application->package}">
+ <td class="columnMark"><input type="checkbox" name="applications[]" value="{@$application->packageID}"{if $application->packageID|in_array:$applications} checked="checked"{/if} /></td>
+ <td class="columnIcon"><a href="{link controller='ApplicationEdit' id=$application->packageID}{/link}"><img src="{@RELATIVE_WCF_DIR}icon/edit.svg" alt="" class="icon16 jsTooltip" title="{lang}wcf.global.button.edit{/lang}" /></a></td>
+ <td class="columnID columnPackageID">{#$application->packageID}</td>
+ <td class="columnText columnPackageName"><a href="{link controller='PackageView' id=$application->packageID}{/link}">{lang}{$application->getPackage()->getName()}{/lang}</a></td>
+ <td class="columnText columnDomainName">{$application->domainName}</td>
+ <td class="columnText columnDomainPath">{$application->domainPath}</td>
+ <td class="columnText columnCookieDomain">{$application->cookieDomain}</td>
+ <td class="columnText columnCookiePath">{$application->cookiePath}</td>
+
+ {event name='columns'}
+ </tr>
+ {/foreach}
+ </tbody>
+ </table>
+ </div>
+
+ {if $errorField == 'applications'}
+ <small class="innerError">
+ {if $errorType == 'empty'}
+ {lang}wcf.global.form.error.empty{/lang}
+ {else}
+ {lang}wcf.acp.application.group.applications.error.{$errorType}{/lang}
+ {/if}
+ </small>
+ {/if}
+ {else}
+ <p class="info">{lang}wcf.acp.application.group.noAvailableApplications{/lang}</p>
{/if}
</fieldset>
<tr>
<td class="columnIcon"><a href="{link controller='ApplicationEdit' id=$application->packageID}{/link}"><img src="{@RELATIVE_WCF_DIR}icon/edit.svg" alt="" class="icon16 jsTooltip" title="{lang}wcf.global.button.edit{/lang}" /></a></td>
<td class="columnID columnPackageID">{#$application->packageID}</td>
- <td class="columnText columnPackageName"><a href="{link controller='PackageView' id=$application->packageID}{/link}">{lang}{$application->packageName}{/lang}</a></td>
+ <td class="columnText columnPackageName"><a href="{link controller='PackageView' id=$application->packageID}{/link}">{lang}{$application->getPackage()->getName()}{/lang}</a></td>
<td class="columnText columnDomainName">{$application->domainName}</td>
<td class="columnText columnDomainPath">{$application->domainPath}</td>
<td class="columnText columnCookieDomain">{$application->cookieDomain}</td>
<tr>
<td class="columnIcon"><a href="{link controller='ApplicationEdit' id=$application->packageID}{/link}"><img src="{@RELATIVE_WCF_DIR}icon/edit.svg" alt="" class="icon16 jsTooltip" title="{lang}wcf.global.button.edit{/lang}" /></a></td>
<td class="columnID columnPackageID">{#$application->packageID}</td>
- <td class="columnText columnPackageName"><a href="{link controller='PackageView' id=$application->packageID}{/link}">{lang}{$application->packageName}{/lang}</a></td>
+ <td class="columnText columnPackageName"><a href="{link controller='PackageView' id=$application->packageID}{/link}">{lang}{$application->getPackage()->getName()}{/lang}</a></td>
<td class="columnText columnDomainName">{$application->domainName}</td>
<td class="columnText columnDomainPath">{$application->domainPath}</td>
<td class="columnText columnCookieDomain">{$application->cookieDomain}</td>
namespace wcf\acp\form;
use wcf\data\application\Application;
use wcf\data\application\ApplicationAction;
+use wcf\data\application\ViewableApplication;
use wcf\system\exception\IllegalLinkException;
use wcf\system\exception\UserInputException;
use wcf\system\Regex;
public $activeMenuItem = 'wcf.acp.menu.link.application';
/**
- * application object
- * @var wcf\data\application\Application
+ * viewable application object
+ * @var wcf\data\application\ViewableApplication
*/
public $application = null;
parent::readParameters();
if (isset($_REQUEST['id'])) $this->packageID = intval($_REQUEST['id']);
- $this->application = new Application($this->packageID);
+ $this->application = new ViewableApplication(new Application($this->packageID));
if (!$this->application->packageID) {
throw new IllegalLinkException();
}
parent::save();
// save application
- $this->objectAction = new ApplicationAction(array($this->application), 'update', array('data' => array(
+ $this->objectAction = new ApplicationAction(array($this->application->getDecoratedObject()), 'update', array('data' => array(
'cookieDomain' => $this->cookieDomain,
'cookiePath' => $this->cookiePath,
'domainName' => $this->domainName,
<?php
namespace wcf\acp\form;
-use wcf\data\application\ApplicationList;
+use wcf\data\application\ViewableApplicationList;
use wcf\data\application\group\ApplicationGroupAction;
use wcf\system\exception\UserInputException;
use wcf\system\WCF;
/**
* list of available applications
- * @var array<wcf\data\application\Application>
+ * @var array<wcf\data\application\ViewableApplication>
*/
public $availableApplications = array();
* Reads the list of available applications.
*/
protected function readAvailableApplications() {
- $applicationList = new ApplicationList();
- $applicationList->sqlSelects = "package.package, package.packageName";
- $applicationList->sqlJoins = "LEFT JOIN wcf".WCF_N."_package package ON (package.packageID = application.packageID)";
+ $applicationList = new ViewableApplicationList();
$applicationList->getConditionBuilder()->add("application.groupID IS NULL");
- $applicationList->getConditionBuilder()->add("application.packageID <> ? ", array(1));
$applicationList->sqlLimit = 0;
$applicationList->readObjects();
$application = $this->availableApplications[$packageID];
// cannot group two or more applications of the same type
- if (in_array($application->package, $packages)) {
+ if (in_array($application->getPackage()->package, $packages)) {
throw new UserInputException('applications', 'duplicate');
}
- $packages[] = $application->package;
+ $packages[] = $application->getPackage()->package;
}
}
}
$this->applications = array();
$this->groupName = '';
+ // reload available applications
+ $this->readAvailableApplications();
+
// show success.
WCF::getTPL()->assign(array(
'success' => true
<?php
namespace wcf\acp\page;
-use wcf\data\application\ApplicationList;
+use wcf\data\application\ViewableApplicationList;
use wcf\data\application\group\ApplicationGroupList;
use wcf\data\application\group\ViewableApplicationGroup;
use wcf\page\AbstractPage;
public function readData() {
parent::readData();
- $applicationList = new ApplicationList();
- $applicationList->sqlSelects = "package.packageName";
- $applicationList->sqlJoins = "LEFT JOIN wcf".WCF_N."_package package ON (package.packageID = application.packageID)";
- $applicationList->getConditionBuilder()->add("application.packageID <> ?", array(1)); // exclude WCF pseudo-application
+ $applicationList = new ViewableApplicationList();
$applicationList->sqlLimit = 0;
$applicationList->readObjects();
--- /dev/null
+<?php
+namespace wcf\data\application;
+use wcf\data\package\PackageCache;
+use wcf\data\DatabaseObjectDecorator;
+
+/**
+ * Represents a viewable application.
+ *
+ * @author Alexander Ebert
+ * @copyright 2001-2012 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package com.woltlab.wcf
+ * @subpackage data.application
+ * @category Community Framework
+ */
+class ViewableApplication extends DatabaseObjectDecorator {
+ /**
+ * @see wcf\data\DatabaseObjectDecorator::$baseClass
+ */
+ protected static $baseClass = 'wcf\data\application\Application';
+
+ /**
+ * package object
+ * @var wcf\data\package\Package
+ */
+ protected $package = null;
+
+ /**
+ * Returns package object.
+ *
+ * @return wcf\data\package\Package
+ */
+ public function getPackage() {
+ if ($this->package === null) {
+ $this->package = PackageCache::getInstance()->getPackage($this->packageID);
+ }
+
+ return $this->package;
+ }
+}
--- /dev/null
+<?php
+namespace wcf\data\application;
+use wcf\data\package\PackageCache;
+
+/**
+ * Represents a list of viewable applications.
+ *
+ * @author Alexander Ebert
+ * @copyright 2001-2012 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package com.woltlab.wcf
+ * @subpackage data.application
+ * @category Community Framework
+ */
+class ViewableApplicationList extends ApplicationList {
+ /**
+ * @see wcf\data\DatabaseObjectList::__construct()
+ */
+ public function __construct() {
+ parent::__construct();
+
+ // exclude WCF pseudo-application
+ $this->getConditionBuilder()->add("application.packageID <> ?", array(1));
+ }
+
+ /**
+ * @see wcf\data\DatabaseObjectList::readObjects()
+ */
+ public function readObjects() {
+ parent::readObjects();
+
+ foreach ($this->objects as &$application) {
+ $application = new ViewableApplication($application);
+ }
+ unset($application);
+ }
+}
<?php
namespace wcf\data\application\group;
-use wcf\data\application\Application;
+use wcf\data\application\ViewableApplication;
use wcf\data\DatabaseObjectDecorator;
/**
protected static $baseClass = 'wcf\data\application\group\ApplicationGroup';
/**
- * list of applications
- * @var array<wcf\data\application\Application>
+ * list of viewable applications
+ * @var array<wcf\data\application\ViewableApplication>
*/
protected $applications = array();
/**
* Assigns an application to this group.
*
- * @param wcf\data\application\Application $application
+ * @param wcf\data\application\ViewableApplication $application
*/
- public function addApplication(Application $application) {
+ public function addApplication(ViewableApplication $application) {
if ($this->groupID == $application->groupID) {
$this->applications[] = $application;
}
<item name="wcf.acp.application.domainPath"><![CDATA[Pfad]]></item>
<item name="wcf.acp.application.domainPath.description"><![CDATA[Geben Sie den Pfad an, über den diese Anwendung erreichbar ist. Wenn Ihre Anwendung zum Beispiel unter „http://www.example.com/community/forum/“ erreichbar ist, so geben Sie bitte „/community/forum/“ ein.]]></item>
<item name="wcf.acp.application.edit"><![CDATA[Anwendung bearbeiten]]></item>
- <item name="wcf.acp.application.edit.title"><![CDATA[Anwendung bearbeiten: WoltLab Burning Board]]></item>
+ <item name="wcf.acp.application.edit.title"><![CDATA[Anwendung bearbeiten: „<a href="{link controller='PackageView' id=$application->packageID}{/link}">{$application->getPackage()->getName()}</a>“]]></item>
<item name="wcf.acp.application.group.add"><![CDATA[Anwendungsgruppe hinzufügen]]></item>
<item name="wcf.acp.application.group.applications.error.duplicate"><![CDATA[Zwei oder mehr Anwendungen des selben Typs können nicht in einer Gruppe zusammengefasst werden.]]></item>
<item name="wcf.acp.application.group.applications.error.notValid"><![CDATA[Eine oder mehrere ausgewählte Anwendungen sind nicht mehr verfügbar.]]></item>
<item name="wcf.acp.application.group.edit"><![CDATA[Anwendungsgruppe bearbeiten]]></item>
<item name="wcf.acp.application.group.groupName"><![CDATA[Name]]></item>
<item name="wcf.acp.application.group.groupName.error.notUnique"><![CDATA[Der Gruppenname muss einzigartig sein.]]></item>
+ <item name="wcf.acp.application.group.noAvailableApplications"><![CDATA[Es ist derzeit keine ausreichende Anzahl Anwendungen verfügbar, um eine Anwendungsgruppe zu erstellen.]]></item>
<item name="wcf.acp.application.group.title"><![CDATA[Anwendungsgruppe: „{$applicationGroup->groupName}“]]></item>
<item name="wcf.acp.application.independentApplications"><![CDATA[Unabhängige Anwendungen]]></item>
<item name="wcf.acp.application.management"><![CDATA[Anwendungen verwalten]]></item>