Fixed application management
authorAlexander Ebert <ebert@woltlab.com>
Wed, 5 Dec 2012 19:35:13 +0000 (20:35 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Wed, 5 Dec 2012 19:35:13 +0000 (20:35 +0100)
17 files changed:
wcfsetup/install/files/acp/js/WCF.ACP.js
wcfsetup/install/files/acp/templates/acpSessionLog.tpl
wcfsetup/install/files/acp/templates/applicationEdit.tpl
wcfsetup/install/files/acp/templates/applicationGroupAdd.tpl [deleted file]
wcfsetup/install/files/acp/templates/applicationManagement.tpl
wcfsetup/install/files/lib/acp/form/ApplicationEditForm.class.php
wcfsetup/install/files/lib/acp/form/ApplicationGroupAddForm.class.php [deleted file]
wcfsetup/install/files/lib/acp/form/ApplicationGroupEditForm.class.php [deleted file]
wcfsetup/install/files/lib/acp/page/ACPSessionLogPage.class.php
wcfsetup/install/files/lib/acp/page/ApplicationManagementPage.class.php
wcfsetup/install/files/lib/acp/page/PackageListDetailedPage.class.php
wcfsetup/install/files/lib/data/acp/session/access/log/ACPSessionAccessLogList.class.php
wcfsetup/install/files/lib/data/application/ApplicationAction.class.php
wcfsetup/install/files/lib/data/application/ApplicationEditor.class.php
wcfsetup/install/files/lib/data/application/ViewableApplicationList.class.php
wcfsetup/install/files/lib/data/language/LanguageEditor.class.php
wcfsetup/install/lang/de.xml

index 7f415143be998c6c0acb6697312cb016eb47318d..c04083b5627ece29ffbd5029b813e0dbbfdd40e8 100644 (file)
@@ -17,71 +17,61 @@ WCF.ACP = {};
 WCF.ACP.Application = { };
 
 /**
- * Namespace for ACP application group management.
- */
-WCF.ACP.Application.Group = { };
-
-/**
- * Provides the ability to remove application groups.
+ * Provides the ability to set an application as primary.
  * 
- * @param      string          redirectURL
+ * @param      integer         packageID
  */
-WCF.ACP.Application.Group.Delete = Class.extend({
+WCF.ACP.Application.SetAsPrimary = Class.extend({
        /**
-        * redirect URL
-        * @var string
+        * application package id
+        * @var integer
         */
-       _redirectURL: '',
+       _packageID: 0,
        
        /**
-        * Initializes the WCF.ACP.Application.Group.Delete class.
+        * Initializes the WCF.ACP.Application.SetAsPrimary class.
         * 
-        * @param       string          redirectURL
+        * @param       integer         packageID
         */
-       init: function(redirectURL) {
-               this._redirectURL = redirectURL || '';
+       init: function(packageID) {
+               this._packageID = packageID;
                
-               $('.jsDeleteApplicationGroup').click($.proxy(this._click, this));
+               $('#setAsPrimary').click($.proxy(this._click, this));
        },
        
        /**
-        * Shows a confirmation dialog to remove an application group.
-        * 
-        * @param       object          event
+        * Shows a confirmation dialog to set current application as primary.
         */
-       _click: function(event) {
-               var $button = $(event.currentTarget);
-               
-               WCF.System.Confirmation.show($button.data('confirmMessage'), $.proxy(function(action) {
+       _click: function() {
+               WCF.System.Confirmation.show(WCF.Language.get('wcf.acp.application.setAsPrimary.confirmMessage'), $.proxy(function(action) {
                        if (action === 'confirm') {
-                               this._remove($button.data('groupID'));
+                               this._setAsPrimary();
                        }
                }, this));
        },
        
        /**
-        * Removes an application group.
-        * 
-        * @param       integer         groupID
+        * Sets an application as primary.
         */
-       _remove: function(groupID) {
+       _setAsPrimary: function(groupID) {
                new WCF.Action.Proxy({
                        autoSend: true,
                        data: {
-                               actionName: 'delete',
-                               className: 'wcf\\data\\application\\group\\ApplicationGroupAction',
-                               objectIDs: [ groupID ]
+                               actionName: 'setAsPrimary',
+                               className: 'wcf\\data\\application\\ApplicationAction',
+                               objectIDs: [ this._packageID ]
                        },
                        success: $.proxy(function(data, textStatus, jqXHR) {
-                               var $notification = new WCF.System.Notification(WCF.Language.get('wcf.acp.application.group.delete.success'));
-                               $notification.show($.proxy(function() {
-                                       if (this._redirectURL) {
-                                               window.location = this._redirectURL;
-                                       }
-                                       else {
-                                               window.location.reload();
-                                       }
-                               }, this));
+                               var $notification = new WCF.System.Notification(WCF.Language.get('wcf.acp.application.setAsPrimary.success'));
+                               $notification.show();
+                               
+                               // remove button
+                               $('#setAsPrimary').parent().remove();
+                               
+                               // insert icon
+                               WCF.DOMNodeInsertedHandler.enable();
+                               $('<img src="' + WCF.Icon.get('wcf.icon.home') + '" alt="" class="icon16 jsTooltip" title="' + WCF.Language.get('wcf.acp.application.primaryApplication') + '" />').appendTo($('.boxHeadline > hgroup > h1'));
+                               WCF.DOMNodeInsertedHandler.disable();
                        }, this)
                });
        }
index 26233f5545ac553166fb6fc46b512d9fef47aa66..e6047105e865e5db1913a45287a23444ca202513 100644 (file)
@@ -30,7 +30,6 @@
                                        <th class="columnID columnSessionAccessLogID{if $sortField == 'sessionAccessLogID'} active{/if}"><a href="{link controller='ACPSessionLog' id=$sessionLogID}pageNo={@$pageNo}&sortField=sessionAccessLogID&sortOrder={if $sortField == 'sessionAccessLogID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}{if $sortField == 'sessionAccessLogID'} <img src="{@$__wcf->getPath()}icon/sort{@$sortOrder}.svg" alt="" />{/if}</a></th>
                                        <th class="columnURL columnIpAddress{if $sortField == 'ipAddress'} active{/if}"><a href="{link controller='ACPSessionLog' id=$sessionLogID}pageNo={@$pageNo}&sortField=ipAddress&sortOrder={if $sortField == 'ipAddress' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.user.ipAddress{/lang}{if $sortField == 'ipAddress'} <img src="{@$__wcf->getPath()}icon/sort{@$sortOrder}.svg" alt="" />{/if}</a></th>
                                        <th class="columnDate{if $sortField == 'time'} active{/if}"><a href="{link controller='ACPSessionLog' id=$sessionLogID}pageNo={@$pageNo}&sortField=time&sortOrder={if $sortField == 'time' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.acp.sessionLog.time{/lang}{if $sortField == 'time'} <img src="{@$__wcf->getPath()}icon/sort{@$sortOrder}.svg" alt="" />{/if}</a></th>
-                                       <th class="columnTitle columnPackageName{if $sortField == 'packageName'} active{/if}"><a href="{link controller='ACPSessionLog' id=$sessionLogID}pageNo={@$pageNo}&sortField=packageName&sortOrder={if $sortField == 'packageName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.acp.sessionLog.packageName{/lang}{if $sortField == 'packageName'} <img src="{@$__wcf->getPath()}icon/sort{@$sortOrder}.svg" alt="" />{/if}</a></th>
                                        <th class="columnText columnClassName{if $sortField == 'className'} active{/if}"><a href="{link controller='ACPSessionLog' id=$sessionLogID}pageNo={@$pageNo}&sortField=className&sortOrder={if $sortField == 'className' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.acp.sessionLog.className{/lang}{if $sortField == 'className'} <img src="{@$__wcf->getPath()}icon/sort{@$sortOrder}.svg" alt="" />{/if}</a></th>
                                        <th class="columnURL columnRequestURI{if $sortField == 'requestURI'} active{/if}"><a href="{link controller='ACPSessionLog' id=$sessionLogID}pageNo={@$pageNo}&sortField=requestURI&sortOrder={if $sortField == 'requestURI' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.acp.sessionLog.requestURI{/lang}{if $sortField == 'requestURI'} <img src="{@$__wcf->getPath()}icon/sort{@$sortOrder}.svg" alt="" />{/if}</a></th>
                                        <th class="columnText columnRequestMethod{if $sortField == 'requestMethod'} active{/if}"><a href="{link controller='ACPSessionLog' id=$sessionLogID}pageNo={@$pageNo}&sortField=requestMethod&sortOrder={if $sortField == 'requestMethod' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.acp.sessionLog.requestMethod{/lang}{if $sortField == 'requestMethod'} <img src="{@$__wcf->getPath()}icon/sort{@$sortOrder}.svg" alt="" />{/if}</a></th>
@@ -46,7 +45,6 @@
                                                        <td class="columnID columnSessionAccessLogID"><p>{@$sessionAccessLog->sessionAccessLogID}</p></td>
                                                        <td class="columnURL columnIpAddress{if $sessionAccessLog->ipAddress != $sessionLog->ipAddress} hot{/if}"><p>{$sessionAccessLog->ipAddress}</p></td>
                                                        <td class="columnDate columnTime"><p>{@$sessionAccessLog->time|time}</p></td>
-                                                       <td class="columnTitle columnPackageName"><p>{$sessionAccessLog->packageName|language}</p></td>
                                                        <td class="columnText columnClassName"><p>{$sessionAccessLog->className}</p></td>
                                                        <td class="columnURL columnRequestURI" title="{$sessionAccessLog->requestURI}"><p>{if !$sessionAccessLog->hasProtectedURI()}<a href="{$sessionAccessLog->requestURI}{@SID_ARG_2ND}">{$sessionAccessLog->requestURI|truncate:50}</a>{else}{$sessionAccessLog->requestURI|truncate:50}{/if}</p></td>
                                                        <td class="columnTextolumnRequestMethod"><p>{$sessionAccessLog->requestMethod}</p></td>
index 095266d546a6dae34464e89a2f3e90e0527e329a..d81d8349bc879f30bb1565483713c35aec396173 100644 (file)
@@ -1,8 +1,27 @@
 {include file='header' pageTitle='wcf.acp.application.edit'}
 
+{if $application->packageID != 1 && !$application->isPrimary}
+       <script type="text/javascript">
+               //<![CDATA[
+               $(function() {
+                       WCF.Icon.addObject({
+                               'wcf.icon.home': '{@$__wcf->getPath()}icon/home.svg'
+                       });
+                       WCF.Language.addObject({
+                               'wcf.acp.application.primaryApplication': '{lang}wcf.acp.application.primaryApplication{/lang}',
+                               'wcf.acp.application.setAsPrimary.confirmMessage': '{lang}wcf.acp.application.setAsPrimary.confirmMessage{/lang}',
+                               'wcf.acp.application.setAsPrimary.success': '{lang}wcf.acp.application.setAsPrimary.success{/lang}'
+                       });
+                       
+                       new WCF.ACP.Application.SetAsPrimary({@$application->packageID});
+               });
+               //]]>
+       </script>
+{/if}
+
 <header class="boxHeadline">
        <hgroup>
-               <h1>{lang}wcf.acp.application.edit.title{/lang}</h1>
+               <h1>{lang}wcf.acp.application.edit.title{/lang}{if $application->isPrimary} <img src="{@$__wcf->getPath()}icon/home.svg" alt="" class="icon16 jsTooltip" title="{lang}wcf.acp.application.primaryApplication{/lang}" />{/if}</h1>
        </hgroup>
 </header>
 
@@ -17,6 +36,7 @@
 <div class="contentNavigation">
        <nav>
                <ul>
+                       {if $application->packageID != 1 && !$application->isPrimary}<li><a id="setAsPrimary" class="button"><img src="{@$__wcf->getPath()}icon/default.svg" alt="" class="icon24" /> <span>{lang}wcf.acp.application.setAsPrimary{/lang}</span></a></li>{/if}
                        <li><a href="{link controller='ApplicationManagement'}{/link}" title="{lang}wcf.acp.application.management{/lang}" class="button"><img src="{@$__wcf->getPath()}icon/list.svg" alt="" class="icon24" /> <span>{lang}wcf.acp.application.management{/lang}</span></a></li>
                        
                        {event name='largeButtons'}
diff --git a/wcfsetup/install/files/acp/templates/applicationGroupAdd.tpl b/wcfsetup/install/files/acp/templates/applicationGroupAdd.tpl
deleted file mode 100644 (file)
index 9835c7b..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-{include file='header' pageTitle='wcf.acp.application.group.'|concat:$action}
-
-<script type="text/javascript">
-       //<![CDATA[
-       $(function() {
-               new WCF.ACP.Application.Group.Delete('{link controller='ApplicationManagement'}{/link}');
-               
-               WCF.Language.addObject({
-                       'wcf.acp.application.group.delete.success': '{lang}wcf.acp.application.group.delete.success{/lang}'
-               });
-       });
-       //]]>
-</script>
-
-<header class="boxHeadline">
-       <hgroup>
-               <h1>{lang}wcf.acp.application.group.{$action}{/lang}</h1>
-       </hgroup>
-</header>
-
-{if $errorField}
-       <p class="error">{lang}wcf.global.form.error{/lang}</p>
-{/if}
-
-{if $success|isset}
-       <p class="success">{lang}wcf.global.form.{$action}.success{/lang}</p>   
-{/if}
-
-<div class="contentNavigation">
-       <nav>
-               <ul>
-                       {if $action == 'edit'}<li><a class="button jsDeleteApplicationGroup" data-confirm-message="{lang}wcf.acp.application.group.delete.confirmMessage{/lang}" data-group-id="{@$applicationGroup->groupID}"><img src="{@RELATIVE_WCF_DIR}icon/delete.svg" class="icon24" /> <span>{lang}wcf.acp.application.group.delete{/lang}</span></a></li>{/if}
-                       <li><a href="{link controller='ApplicationManagement'}{/link}" class="button"><img src="{@RELATIVE_WCF_DIR}icon/list.svg" alt="" /> <span>{lang}wcf.acp.application.management{/lang}</span></a></li>
-               </ul>
-       </nav>
-</div>
-
-{if $availableApplications|count > 1}
-       <div class="container containerPadding marginTop">
-               <form method="post" action="{if $action == 'add'}{link controller='ApplicationGroupAdd'}{/link}{else}{link controller='ApplicationGroupEdit' id=$applicationGroup->groupID}{/link}{/if}">
-                       <fieldset>
-                               <legend>{lang}wcf.acp.application.group.data{/lang}</legend>
-                               
-                               <dl{if $errorField == 'groupName'} class="formError"{/if}>
-                                       <dt><label for="groupName">{lang}wcf.acp.application.group.groupName{/lang}</label></dt>
-                                       <dd>
-                                               <input type="text" name="groupName" id="groupName" value="{$groupName}" class="long" required="required" />
-                                               {if $errorField == 'groupName'}
-                                                       <small class="innerError">
-                                                               {if $errorType == 'empty'}
-                                                                       {lang}wcf.global.form.error.empty{/lang}
-                                                               {else}
-                                                                       {lang}wcf.acp.application.group.groupName.error.{$errorType}{/lang}
-                                                               {/if}
-                                                       </small>
-                                               {/if}
-                                       </dd>
-                               </dl>
-                       </fieldset>
-                       
-                       <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="3">{lang}wcf.global.objectID{/lang}</th>
-                                                               <th class="columnMark columnPrimaryApplication">{lang}wcf.acp.application.primaryApplication{/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="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="columnMark columnPrimaryApplication"><input type="radio" name="primaryApplication" value="{@$application->packageID}" required="required"{if $primaryApplication == $application->packageID} checked="checked"{/if} /></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}
-                       </fieldset>
-                       
-                       <div class="formSubmit">
-                               <input type="submit" value="{lang}wcf.global.button.submit{/lang}" />
-                       </div>
-               </form>
-       </div>
-       
-       <div class="contentNavigation">
-               <nav>
-                       <ul>
-                               <li><a href="{link controller='ApplicationManagement'}{/link}" class="button"><img src="{@RELATIVE_WCF_DIR}icon/list.svg" alt="" /> <span>{lang}wcf.acp.application.management{/lang}</span></a></li>
-                       </ul>
-               </nav>
-       </div>
-{else}
-       <p class="error">{lang}wcf.acp.application.group.noAvailableApplications{/lang}</p>
-{/if}
-
-{include file='footer'}
index 59724d55937e54be1c4ea08c3a23b2f6c9d9858e..e1d7187642183edbb1262ba7e9e8b7ce95f7feaf 100644 (file)
@@ -1,79 +1,13 @@
 {include file='header' pageTitle='wcf.acp.application.management'}
 
-<script type="text/javascript">
-       //<![CDATA[
-       $(function() {
-               new WCF.ACP.Application.Group.Delete();
-               
-               WCF.Language.addObject({
-                       'wcf.acp.application.group.delete.success': '{lang}wcf.acp.application.group.delete.success{/lang}'
-               });
-       });
-       //]]>
-</script>
-
-{foreach from=$applicationGroups item=applicationGroup}
-       <header class="boxHeadline">
-               <hgroup>
-                       <h1>{lang}wcf.acp.application.group.title{/lang} <span class="badge">{#$applicationGroup|count}</span></h1>
-               </hgroup>
-       </header>
-       
-       <div class="tabularBox marginTop">
-               <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=$applicationGroup item=application}
-                                       <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->getPackage()->getName()}{/lang}</a>
-                                                       
-                                                       {if $application->isPrimary}
-                                                               <aside class="statusDisplay">
-                                                                       <ul class="statusIcons">
-                                                                               <li><img src="{@RELATIVE_WCF_DIR}icon/home.svg" alt="" class="icon16 jsTooltip" title="{lang}{lang}wcf.acp.application.primaryApplication{/lang}{/lang}" /></li>
-                                                                       </ul>
-                                                               </aside>
-                                                       {/if}
-                                               </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>
-                                       </tr>
-                               {/foreach}
-                       </tbody>
-               </table>
-       </div>
-       
-       <div class="contentNavigation">
-               <nav>
-                       <ul>
-                               <li><a class="button jsDeleteApplicationGroup" data-confirm-message="{lang}wcf.acp.application.group.delete.confirmMessage{/lang}" data-group-id="{@$applicationGroup->groupID}"><img src="{@RELATIVE_WCF_DIR}icon/delete.svg" class="icon24" /> <span>{lang}wcf.acp.application.group.delete{/lang}</span></a></li>
-                               <li><a href="{link controller='ApplicationGroupEdit' id=$applicationGroup->groupID}{/link}" class="button"><img src="{@RELATIVE_WCF_DIR}icon/edit.svg" class="icon24" /> <span>{lang}wcf.acp.application.group.edit{/lang}</span></a></li>
-                       </ul>
-               </nav>
-       </div>
-{/foreach}
+<div class="contentNavigation">
+       {* todo: event *}
+</div>
 
 {hascontent}
        <header class="boxHeadline">
                <hgroup>
-                       <h1>{lang}wcf.acp.application.independentApplications{/lang} <span class="badge">{#$applications|count}</span></h1>
+                       <h1>{lang}wcf.acp.application.list{/lang} <span class="badge">{#$applicationList|count}</span></h1>
                </hgroup>
        </header>
        
@@ -94,9 +28,9 @@
                        
                        <tbody>
                                {content}
-                                       {foreach from=$applications item=application}
+                                       {foreach from=$applicationList item=application}
                                                <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="columnIcon"><a href="{link controller='ApplicationEdit' id=$application->packageID}{/link}"><img src="{@$__wcf->getPath()}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>
        </div>
 {/hascontent}
 
-{hascontent}
-       <div class="contentNavigation">
-               <nav>
-                       <ul>
-                               {content}
-                                       {if $applications|count > 1}
-                                               <li><a href="{link controller='ApplicationGroupAdd'}{/link}" class="button"><img src="{@RELATIVE_WCF_DIR}icon/add.svg" class="icon24" /> <span>{lang}wcf.acp.application.group.add{/lang}</span></a></li>
-                                       {/if}
-                                       
-                                       {* todo: event *}
-                               {/content}
-                       </ul>
-               </nav>
-       </div>
-{/hascontent}
+<div class="contentNavigation">
+       {* todo: event *}
+</div>
 
 {include file='footer'}
index cf0303f159b39cdc1d1ffc7b3dc788661b4f354d..6a492ea0fd2c9552309ce5067dea9baef2a306b3 100644 (file)
@@ -3,6 +3,7 @@ namespace wcf\acp\form;
 use wcf\data\application\Application;
 use wcf\data\application\ApplicationAction;
 use wcf\data\application\ViewableApplication;
+use wcf\system\application\ApplicationHandler;
 use wcf\system\exception\IllegalLinkException;
 use wcf\system\exception\UserInputException;
 use wcf\system\Regex;
@@ -175,8 +176,12 @@ class ApplicationEditForm extends ACPForm {
                        'domainPath' => $this->domainPath
                )));
                $this->objectAction->executeAction();
+               
                $this->saved();
                
+               // re-calculate cookie settings
+               ApplicationHandler::rebuild();
+               
                // show success.
                WCF::getTPL()->assign(array(
                        'success' => true
diff --git a/wcfsetup/install/files/lib/acp/form/ApplicationGroupAddForm.class.php b/wcfsetup/install/files/lib/acp/form/ApplicationGroupAddForm.class.php
deleted file mode 100644 (file)
index 0037f93..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-<?php
-namespace wcf\acp\form;
-use wcf\data\application\ViewableApplicationList;
-use wcf\data\application\group\ApplicationGroupAction;
-use wcf\system\exception\UserInputException;
-use wcf\system\request\LinkHandler;
-use wcf\system\WCF;
-use wcf\util\ArrayUtil;
-use wcf\util\HeaderUtil;
-use wcf\util\StringUtil;
-
-/**
- * Shows the application group add form.
- * 
- * @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 acp.form
- * @category   Community Framework
- */
-class ApplicationGroupAddForm extends ACPForm {
-       /**
-        * @see wcf\acp\form\ACPForm::$activeMenuItem
-        */
-       public $activeMenuItem = 'wcf.acp.menu.link.application';
-       
-       /**
-        * list of application package ids
-        * @var array<integer>
-        */
-       public $applications = array();
-       
-       /**
-        * list of available applications
-        * @var array<wcf\data\application\ViewableApplication>
-        */
-       public $availableApplications = array();
-       
-       /**
-        * group name
-        * @var string
-        */
-       public $groupName = '';
-       
-       /**
-        * @see wcf\page\AbstractPage::$neededPermissions
-        */
-       public $neededPermissions = array('admin.system.canManageApplication');
-       
-       /**
-        * primary application's package id
-        * @var integer
-        */
-       public $primaryApplication = 0;
-       
-       /**
-        * @see wcf\page\IPage::readParameters()
-        */
-       public function readParameters() {
-               parent::readParameters();
-               
-               $this->readAvailableApplications();
-       }
-       
-       /**
-        * Reads the list of available applications.
-        */
-       protected function readAvailableApplications() {
-               $applicationList = new ViewableApplicationList();
-               $applicationList->getConditionBuilder()->add("application.groupID IS NULL");
-               $applicationList->sqlLimit = 0;
-               $applicationList->readObjects();
-               
-               $this->availableApplications = $applicationList->getObjects();
-       }
-       
-       /**
-        * @see wcf\form\IForm::readFormParameters()
-        */
-       public function readFormParameters() {
-               parent::readFormParameters();
-               
-               if (isset($_POST['applications']) && is_array($_POST['applications'])) $this->applications = ArrayUtil::toIntegerArray($_POST['applications']);
-               if (isset($_POST['groupName'])) $this->groupName = StringUtil::trim($_POST['groupName']);
-               if (isset($_POST['primaryApplication'])) $this->primaryApplication = intval($_POST['primaryApplication']);
-       }
-       
-       /**
-        * @see wcf\form\IForm::validate()
-        */
-       public function validate() {
-               parent::validate();
-               
-               // validate group name
-               $this->validateGroupName();
-               
-               // validate application package ids
-               if (empty($this->applications)) {
-                       throw new UserInputException('applications');
-               }
-               else {
-                       $this->applications = array_unique($this->applications);
-                       
-                       // require at least two applications
-                       if (count($this->applications) == 1) {
-                               throw new UserInputException('applications', 'single');
-                       }
-                       
-                       $packages = array();
-                       foreach ($this->applications as $packageID) {
-                               // unknown package id
-                               if (!isset($this->availableApplications[$packageID])) {
-                                       throw new UserInputException('applications', 'notValid');
-                               }
-                               
-                               $application = $this->availableApplications[$packageID];
-                               
-                               // cannot group two or more applications of the same type
-                               if (in_array($application->getPackage()->package, $packages)) {
-                                       throw new UserInputException('applications', 'duplicate');
-                               }
-                               
-                               $packages[] = $application->getPackage()->package;
-                       }
-               }
-               
-               if ($this->primaryApplication == 0) {
-                       throw new UserInputException('applications', 'primaryApplication.empty');
-               }
-               else {
-                       if (!in_array($this->primaryApplication, $this->applications)) {
-                               throw new UserInputException('applications', 'primaryApplication.notValid');
-                       }
-               }
-       }
-       
-       /**
-        * Validates group name.
-        */
-       protected function validateGroupName() {
-               if (empty($this->groupName)) {
-                       throw new UserInputException('groupName');
-               }
-               else {
-                       // check for duplicates
-                       $sql = "SELECT  COUNT(*) AS count
-                               FROM    wcf".WCF_N."_application_group
-                               WHERE   groupName = ?";
-                       $statement = WCF::getDB()->prepareStatement($sql);
-                       $statement->execute(array($this->groupName));
-                       $row = $statement->fetchArray();
-                       if ($row['count']) {
-                               throw new UserInputException('groupName', 'notUnique');
-                       }
-               }
-       }
-       
-       /**
-        * @see wcf\form\IForm::save()
-        */
-       public function save() {
-               parent::save();
-               
-               // save group
-               $this->objectAction = new ApplicationGroupAction(array(), 'create', array(
-                       'applications' => $this->applications,
-                       'data' => array(
-                               'groupName' => $this->groupName
-                       ),
-                       'primaryApplication' => $this->primaryApplication
-               ));
-               $this->objectAction->executeAction();
-               $this->saved();
-               
-               // reset values
-               $this->applications = array();
-               $this->groupName = '';
-               $this->primaryApplication = 0;
-               
-               // reload available applications
-               $this->readAvailableApplications();
-               
-               if (count($this->availableApplications) <= 1) {
-                       HeaderUtil::redirect(LinkHandler::getInstance()->getLink('ApplicationManagement'));
-               }
-               
-               // show success
-               WCF::getTPL()->assign(array(
-                       'success' => true
-               ));
-       }
-       
-       /**
-        * @see wcf\page\IPage::assignVariables()
-        */
-       public function assignVariables() {
-               parent::assignVariables();
-               
-               WCF::getTPL()->assign(array(
-                       'action' => 'add',
-                       'applications' => $this->applications,
-                       'availableApplications' => $this->availableApplications,
-                       'groupName' => $this->groupName,
-                       'primaryApplication' => $this->primaryApplication,
-               ));
-       }
-}
diff --git a/wcfsetup/install/files/lib/acp/form/ApplicationGroupEditForm.class.php b/wcfsetup/install/files/lib/acp/form/ApplicationGroupEditForm.class.php
deleted file mode 100644 (file)
index 6eac299..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-namespace wcf\acp\form;
-use wcf\data\application\group\ApplicationGroup;
-use wcf\data\application\group\ApplicationGroupAction;
-use wcf\data\application\ViewableApplicationList;
-use wcf\system\exception\IllegalLinkException;
-use wcf\system\exception\UserInputException;
-use wcf\system\WCF;
-
-/**
- * Shows the application group edit form.
- * 
- * @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 acp.form
- * @category   Community Framework
- */
-class ApplicationGroupEditForm extends ApplicationGroupAddForm {
-       /**
-        * application group object
-        * @var wcf\data\application\group\ApplicationGroup
-        */
-       public $applicationGroup = null;
-       
-       /**
-        * groupd id
-        * @var integer
-        */
-       public $groupID = 0;
-       
-       /**
-        * @see wcf\page\IPage::readParameters()
-        */
-       public function readParameters() {
-               if (isset($_REQUEST['id'])) $this->groupID = intval($_REQUEST['id']);
-               $this->applicationGroup = new ApplicationGroup($this->groupID);
-               if (!$this->applicationGroup->groupID) {
-                       throw new IllegalLinkException();
-               }
-               
-               parent::readParameters();
-       }
-       
-       /**
-        * Reads the list of available applications.
-        */
-       protected function readAvailableApplications() {
-               $applicationList = new ViewableApplicationList();
-               $applicationList->getConditionBuilder()->add("(application.groupID = ? OR application.groupID IS NULL)", array($this->applicationGroup->groupID));
-               $applicationList->sqlLimit = 0;
-               $applicationList->readObjects();
-               
-               $this->availableApplications = $applicationList->getObjects();
-               foreach ($this->availableApplications as $application) {
-                       if ($application->groupID == $this->applicationGroup->groupID) {
-                               $this->applications[] = $application->packageID;
-                       }
-               }
-       }
-       
-       /**
-        * @see wcf\acp\form\ApplicationGroupAddForm::validateGroupName()
-        */
-       protected function validateGroupName() {
-               if (empty($this->groupName)) {
-                       throw new UserInputException('groupName');
-               }
-               else {
-                       // check for duplicates
-                       $sql = "SELECT  COUNT(*) AS count
-                               FROM    wcf".WCF_N."_application_group
-                               WHERE   groupName = ?
-                                       AND groupID <> ?";
-                       $statement = WCF::getDB()->prepareStatement($sql);
-                       $statement->execute(array(
-                               $this->groupName,
-                               $this->applicationGroup->groupID
-                       ));
-                       $row = $statement->fetchArray();
-                       if ($row['count']) {
-                               throw new UserInputException('groupName', 'notUnique');
-                       }
-               }
-       }
-       
-       /**
-        * @see wcf\page\IPage::readData()
-        */
-       public function readData() {
-               parent::readData();
-               
-               if (empty($_POST)) {
-                       $this->groupName = $this->applicationGroup->groupName;
-                       
-                       foreach ($this->availableApplications as $application) {
-                               if ($application->isPrimary) {
-                                       $this->primaryApplication = $application->packageID;
-                                       break;
-                               }
-                       }
-               }
-       }
-       
-       /**
-        * @see wcf\form\IForm::save()
-        */
-       public function save() {
-               ACPForm::save();
-               
-               // save group
-               $this->objectAction = new ApplicationGroupAction(array($this->applicationGroup), 'update', array(
-                       'applications' => $this->applications,
-                       'data' => array(
-                               'groupName' => $this->groupName
-                       ),
-                       'primaryApplication' => $this->primaryApplication
-               ));
-               $this->objectAction->executeAction();
-               $this->saved();
-               
-               // show success.
-               WCF::getTPL()->assign(array(
-                       'success' => true
-               ));
-       }
-       
-       /**
-        * @see wcf\page\IPage::assignVariables()
-        */
-       public function assignVariables() {
-               parent::assignVariables();
-               
-               WCF::getTPL()->assign(array(
-                       'action' => 'edit',
-                       'applicationGroup' => $this->applicationGroup,
-                       'groupID' => $this->groupID
-               ));
-       }
-}
index f8448628e92816f5095445b80009ce7e0b2be95a..9703949f47186f76a6d28deefef50d7074fc0981 100755 (executable)
@@ -35,7 +35,7 @@ class ACPSessionLogPage extends SortablePage {
        /**
         * @see wcf\page\SortablePage::$validSortFields
         */
-       public $validSortFields = array('sessionAccessLogID', 'ipAddress', 'time', 'requestURI', 'requestMethod', 'className', 'packageName');
+       public $validSortFields = array('sessionAccessLogID', 'ipAddress', 'time', 'requestURI', 'requestMethod', 'className');
        
        /**
         * session log id
@@ -81,7 +81,7 @@ class ACPSessionLogPage extends SortablePage {
         * @see wcf\page\MultipleLinkPage::readObjects()
         */     
        protected function readObjects() {
-               $this->sqlOrderBy = ($this->sortField != 'packageName' ? 'acp_session_access_log.' : '').$this->sortField." ".$this->sortOrder;
+               $this->sqlOrderBy = 'acp_session_access_log.'.$this->sortField." ".$this->sortOrder;
                
                parent::readObjects();
        }
index 1d46ebfa5cbea818a37d91ef0a982e7c54e87f8c..b3665bfbe0b570037a30889b375c45621e7fea54 100644 (file)
@@ -1,8 +1,6 @@
 <?php
 namespace wcf\acp\page;
 use wcf\data\application\ViewableApplicationList;
-use wcf\data\application\group\ApplicationGroupList;
-use wcf\data\application\group\ViewableApplicationGroup;
 use wcf\page\AbstractPage;
 use wcf\system\menu\acp\ACPMenu;
 use wcf\system\WCF;
@@ -19,22 +17,10 @@ use wcf\system\WCF;
  */
 class ApplicationManagementPage extends AbstractPage {
        /**
-        * list of ungrouped applications
-        * @var array<wcf\data\application\Application>
+        * list of applications
+        * @var wcf\data\application\ViewableApplicationList
         */
-       public $applications = null;
-       
-       /**
-        * list of viewable application groups
-        * @var array<wcf\data\application\group\ViewableApplicationGroup>
-        */
-       public $applicationGroups = null;
-       
-       /**
-        * number of ungrouped applications
-        * @var integer
-        */
-       public $ungroupedApplications = 0;
+       public $applicationList = null;
        
        /**
         * @see wcf\page\AbstractPage::$neededPermissions
@@ -47,25 +33,9 @@ class ApplicationManagementPage extends AbstractPage {
        public function readData() {
                parent::readData();
                
-               $applicationList = new ViewableApplicationList();
-               $applicationList->sqlLimit = 0;
-               $applicationList->readObjects();
-               
-               $applicationGroupList = new ApplicationGroupList();
-               $applicationGroupList->sqlLimit = 0;
-               $applicationGroupList->readObjects();
-               foreach ($applicationGroupList as $applicationGroup) {
-                       $this->applicationGroups[$applicationGroup->groupID] = new ViewableApplicationGroup($applicationGroup);
-               }
-               
-               foreach ($applicationList as $application) {
-                       if (!$application->groupID) {
-                               $this->applications[$application->packageID] = $application;
-                       }
-                       else {
-                               $this->applicationGroups[$application->groupID]->addApplication($application);
-                       }
-               }
+               $this->applicationList = new ViewableApplicationList();
+               $this->applicationList->sqlLimit = 0;
+               $this->applicationList->readObjects();
        }
        
        /**
@@ -75,8 +45,7 @@ class ApplicationManagementPage extends AbstractPage {
                parent::assignVariables();
                
                WCF::getTPL()->assign(array(
-                       'applications' => $this->applications,
-                       'applicationGroups' => $this->applicationGroups
+                       'applicationList' => $this->applicationList
                ));
        }
        
index b4492736b2c1629cf60583cd0901a6065ba906c4..dc1bbf36f9534ff399c9b552004e485a347ce744 100644 (file)
@@ -48,7 +48,7 @@ class PackageListDetailedPage extends SortablePage {
         * @see wcf\page\MultipleLinkPage::readObjects()
         */
        protected function readObjects() {
-               $this->sqlOrderBy = 'package.'.($this->sortField == 'packageType' ? 'isApplication '.$this->sortOrder.', '.$this->sortOrder : $this->sortField.' '.$this->sortOrder).($this->sortField != 'packageName' ? ', package.packageName ASC' : '');
+               $this->sqlOrderBy = 'package.'.($this->sortField == 'packageType' ? 'isApplication '.$this->sortOrder : $this->sortField.' '.$this->sortOrder).($this->sortField != 'packageName' ? ', package.packageName ASC' : '');
                
                parent::readObjects();
        }
index 968a717f204738438bf8c190f4a2344f52ffb51e..fc0cc222ec29a7b1a4039310a2a3b375c1dc5066 100644 (file)
@@ -17,15 +17,4 @@ class ACPSessionAccessLogList extends DatabaseObjectList {
         * @see wcf\data\DatabaseObjectList::$className
         */
        public $className = 'wcf\data\acp\session\access\log\ACPSessionAccessLog';
-       
-       /**
-        * @see wcf\data\DatabaseObjectList::readObjects()
-        */
-       public function readObjects() {
-               if (!empty($this->sqlSelects)) $this->sqlSelects .= ',';
-               $this->sqlSelects .= "CASE WHEN package.instanceName <> '' THEN package.instanceName ELSE package.packageName END AS packageName";
-               $this->sqlJoins .= " LEFT JOIN wcf".WCF_N."_package package ON (package.packageID = ".$this->getDatabaseTableAlias().".packageID)";
-               
-               parent::readObjects();
-       }
 }
index 547a492aa3c65160c64f340c18c4388c7ed38a6e..edd72ec7122d9302b2f5955ea79f23b4a9db3e8e 100644 (file)
@@ -4,6 +4,8 @@ use wcf\data\AbstractDatabaseObjectAction;
 use wcf\data\package\Package;
 use wcf\data\package\PackageCache;
 use wcf\system\cache\CacheHandler;
+use wcf\system\exception\PermissionDeniedException;
+use wcf\system\exception\UserInputException;
 use wcf\system\WCF;
 use wcf\util\FileUtil;
 
@@ -23,6 +25,12 @@ class ApplicationAction extends AbstractDatabaseObjectAction {
         */
        protected $className = 'wcf\data\application\ApplicationEditor';
        
+       /**
+        * application editor object
+        * @var wcf\data\application\ApplicationEditor
+        */
+       public $applicationEditor = null;
+       
        /**
         * Assigns a list of applications to a group and computes cookie domain and path.
         */
@@ -85,4 +93,26 @@ class ApplicationAction extends AbstractDatabaseObjectAction {
                
                $this->rebuild();
        }
+       
+       /**
+        * Validates parameters to set an application as primary.
+        */
+       public function validateSetAsPrimary() {
+               WCF::getSession()->checkPermissions(array('admin.system.canManageApplication'));
+               
+               $this->applicationEditor = $this->getSingleObject();
+               if (!$this->applicationEditor->packageID || $this->applicationEditor->packageID == 1) {
+                       throw new UserInputException('objectIDs');
+               }
+               else if ($this->applicationEditor->isPrimary) {
+                       throw new PermissionDeniedException();
+               }
+       }
+       
+       /**
+        * Sets an application as primary.
+        */
+       public function setAsPrimary() {
+               $this->applicationEditor->setAsPrimary();
+       }
 }
index f67913e6800b0b0dc48126c0f22b75c14dab597d..8fe3008a0b4c884a07fb6659511d6cc7afa66d87 100644 (file)
@@ -36,7 +36,7 @@ class ApplicationEditor extends DatabaseObjectEditor implements IEditableCachedO
                $statement = WCF::getDB()->prepareStatement($sql);
                $statement->execute(array(
                        1,
-                       $this->applicationID
+                       $this->packageID
                ));
                
                self::resetCache();
@@ -48,7 +48,7 @@ class ApplicationEditor extends DatabaseObjectEditor implements IEditableCachedO
        public static function setup() {
                $sql = "SELECT  COUNT(*) AS count
                        FROM    wcf".WCF_N."_application
-                       WHERE   isApplication = ?";
+                       WHERE   isPrimary = ?";
                $statement = WCF::getDB()->prepareStatement($sql);
                $statement->execute(array(1));
                $row = $statement->fetchArray();
index b62671688f3dd917f93796f1f0e4bcac95a6cdd5..cd7845e9f66e763b7357063e3944523bee3217f6 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 namespace wcf\data\application;
-use wcf\data\package\PackageCache;
 
 /**
  * Represents a list of viewable applications.
@@ -13,16 +12,6 @@ use wcf\data\package\PackageCache;
  * @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()
         */
index 8c12b75ea9c5181da647af40a3a48b2e38232cf5..24e755ea5e774037acc8a376c949a7c826076e4d 100644 (file)
@@ -245,7 +245,7 @@ class LanguageEditor extends DatabaseObjectEditor implements IEditableCachedObje
                        // find existing items
                        $itemList = new LanguageItemList();
                        $itemList->getConditionBuilder()->add("language_item.languageItem IN (?)", array(array_keys($items)));
-                       $itemList->getConditionBuilder()->add("language_item.packageID = ? AND language_item.languageID = ?", array($packageID, $this->languageID));
+                       $itemList->getConditionBuilder()->add("language_item.languageID = ?", array($this->languageID));
                        $itemList->sqlLimit = 0;
                        $itemList->readObjects();
                        
index ac61b54e731fd6209da6a0c7bc8d458abca6cd6a..622e0c93d9ea114a737ddb1e19766e03805d2c29 100644 (file)
                <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: „<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.applications.error.single"><![CDATA[Eine Gruppe muss aus mindestens zwei Anwendungen bestehen.]]></item>
-               <item name="wcf.acp.application.group.availableApplications"><![CDATA[Verfügbare Anwendungen]]></item>
-               <item name="wcf.acp.application.group.data"><![CDATA[Allgemein]]></item>
-               <item name="wcf.acp.application.group.delete"><![CDATA[Anwendungsgruppe löschen]]></item>
-               <item name="wcf.acp.application.group.delete.confirmMessage"><![CDATA[Wollen Sie die Anwendungsgruppe „{$applicationGroup->groupName}“ wirklich löschen?]]></item>
-               <item name="wcf.acp.application.group.delete.success"><![CDATA[Anwendungsgruppe erfolgreich gelöscht]]></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.list"><![CDATA[Installierte Anwendungen]]></item>
                <item name="wcf.acp.application.management"><![CDATA[Anwendungen verwalten]]></item>
                <item name="wcf.acp.application.primaryApplication"><![CDATA[Primäre Anwendung]]></item>
+               <item name="wcf.acp.application.setAsPrimary"><![CDATA[Als primäre Anwendung festlegen]]></item>
+               <item name="wcf.acp.application.setAsPrimary.confirmMessage"><![CDATA[Möchten Sie „{$application->getPackage()->getName()}“ wirklich als primäre Anwendung festlegen?]]></item>
+               <item name="wcf.acp.application.setAsPrimary.success"><![CDATA[„{$application->getPackage()->getName()}“ ist nun die primäre Anwendung]]></item>
        </category>
        
        <category name="wcf.acp.cache">