Added rebuild data function
authorMarcel Werk <burntime@woltlab.com>
Wed, 10 Jul 2013 20:39:27 +0000 (22:39 +0200)
committerMarcel Werk <burntime@woltlab.com>
Wed, 10 Jul 2013 20:39:27 +0000 (22:39 +0200)
15 files changed:
com.woltlab.wcf/acpMenu.xml
com.woltlab.wcf/objectType.xml
com.woltlab.wcf/objectTypeDefinition.xml
com.woltlab.wcf/userGroupOption.xml
wcfsetup/install/files/acp/templates/rebuildData.tpl [new file with mode: 0644]
wcfsetup/install/files/acp/templates/userActivityPointOption.tpl
wcfsetup/install/files/acp/templates/userRankList.tpl
wcfsetup/install/files/lib/acp/page/RebuildDataPage.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/worker/AbstractRebuildDataWorker.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/worker/IRebuildDataWorker.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/worker/UserActivityPointUpdateCacheWorker.class.php [deleted file]
wcfsetup/install/files/lib/system/worker/UserRankUpdateWorker.class.php [deleted file]
wcfsetup/install/files/lib/system/worker/UserRebuildDataWorker.class.php [new file with mode: 0644]
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index cdb9d329c14409565daec1e991029c0c7ebb6b24..58dd4a9f470137b81a406f1ff0ba4a8efcd785aa 100644 (file)
                        <permissions>admin.system.canManageApplication</permissions>
                </acpmenuitem>
                
+               <acpmenuitem name="wcf.acp.menu.link.maintenance.rebuildData">
+                       <controller><![CDATA[wcf\acp\page\RebuildDataPage]]></controller>
+                       <parent>wcf.acp.menu.link.maintenance</parent>
+                       <permissions>admin.system.canRebuildData</permissions>
+               </acpmenuitem>
+               
                <acpmenuitem name="wcf.acp.menu.link.maintenance.import">
-                       <controller><![CDATA[wcf\acp\form\DataImport]]></controller>
+                       <controller><![CDATA[wcf\acp\form\DataImportForm]]></controller>
                        <parent>wcf.acp.menu.link.maintenance</parent>
                        <permissions>admin.system.canImportData</permissions>
                </acpmenuitem>
index f7494a9032bd08c39d28b75a2836730d66d1ce3a..24cea360ff8d9b488cf1f37a46735492791440d1 100644 (file)
                        <classname><![CDATA[wcf\system\importer\LabelImporter]]></classname>
                </type>
                <!-- /importers -->
+               
+               <!-- rebuild data workers -->
+               <type>
+                       <name>com.woltlab.wcf.user</name>
+                       <definitionname>com.woltlab.wcf.rebuildData</definitionname>
+                       <classname><![CDATA[wcf\system\worker\UserRebuildDataWorker]]></classname>
+               </type>
+               <!-- /rebuild data workers -->
        </import>
 </data>
\ No newline at end of file
index 2fba98658400166e03129bacfd8dd089c60e11c5..d2c7abb46324b7113ffeb0b21c1579d83fc56fe7 100644 (file)
                        <name>com.woltlab.wcf.exporter</name>
                        <interfacename><![CDATA[wcf\system\exporter\IExporter]]></interfacename>
                </definition>
+               
+               <definition>
+                       <name>com.woltlab.wcf.rebuildData</name>
+                       <interfacename><![CDATA[wcf\system\worker\IRebuildDataWorker]]></interfacename>
+               </definition>
        </import>
 </data>
index fe420e20b24b534f7f45f9fba42776f2c8b796a5..5c7bd9c4b1f2f829e86f3ce8d7cc45b808453098 100644 (file)
                                <defaultvalue>0</defaultvalue>
                                <admindefaultvalue>1</admindefaultvalue>
                        </option>
+                       <option name="admin.system.canRebuildData">
+                               <categoryname>admin.system</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
                        <option name="admin.system.canManageCronjob">
                                <categoryname>admin.system</categoryname>
                                <optiontype>boolean</optiontype>
diff --git a/wcfsetup/install/files/acp/templates/rebuildData.tpl b/wcfsetup/install/files/acp/templates/rebuildData.tpl
new file mode 100644 (file)
index 0000000..7d62995
--- /dev/null
@@ -0,0 +1,57 @@
+{include file='header' pageTitle='wcf.acp.rebuildData'}
+
+<header class="boxHeadline">
+       <h1>{lang}wcf.acp.rebuildData{/lang}</h1>
+</header>
+
+<div class="contentNavigation">
+       {hascontent}
+               <nav>
+                       <ul>
+                               {content}
+                                       {event name='contentNavigationButtonsTop'}
+                               {/content}
+                       </ul>
+               </nav>
+       {/hascontent}
+</div>
+
+<div class="container containerPadding marginTop">
+       <fieldset>
+               <legend>{lang}wcf.acp.rebuildData{/lang}</legend>
+               <small>{lang}wcf.acp.rebuildData.description{/lang}</small>
+               
+               {foreach from=$objectTypes item=objectType}
+                       <dl class="wide">
+                               <dd>
+                                       <a class="button small" id="rebuildData{@$objectType->objectTypeID}">{lang}wcf.acp.rebuildData.{@$objectType->objectType}{/lang}</a>
+                                       <small>{lang}wcf.acp.rebuildData.{@$objectType->objectType}.description{/lang}</small>
+                                       
+                                       <script>
+                                               //<![CDATA[
+                                               $(function() {
+                                                       $('#rebuildData{@$objectType->objectTypeID}').click(function () {
+                                                               new WCF.ACP.Worker('cache', '{@$objectType->className|encodeJS}', '{lang}wcf.acp.rebuildData.{@$objectType->objectType}{/lang}');
+                                                       });
+                                               });
+                                               //]]>
+                                       </script>
+                               </dd>
+                       </dl>
+               {/foreach}
+       </fieldset>
+</div>
+
+<div class="contentNavigation">
+       {hascontent}
+               <nav>
+                       <ul>
+                               {content}
+                                       {event name='contentNavigationButtonsBottom'}
+                               {/content}
+                       </ul>
+               </nav>
+       {/hascontent}
+</div>
+
+{include file='footer'}
\ No newline at end of file
index 366ef05c24fc37cc82f9e47e61edf6fa0b044b40..6de518d736f2ff5ca55add6e20ae903620789076 100644 (file)
@@ -3,9 +3,6 @@
 <script>
        //<![CDATA[
        $(function() {
-               $('#updateCache').click(function () {
-                       new WCF.ACP.Worker('cache', 'wcf\\system\\worker\\UserActivityPointUpdateCacheWorker', '{lang}wcf.acp.user.activityPoint.updateCache{/lang}');
-               });
                $('#updateEvents').click(function () {
                        new WCF.ACP.Worker('events', 'wcf\\system\\worker\\UserActivityPointUpdateEventsWorker', '{lang}wcf.acp.user.activityPoint.updateEvents{/lang}');
                });
@@ -28,7 +25,6 @@
 <div class="contentNavigation">
        <nav>
                <ul>
-                       <li><a id="updateCache" class="button"><span class="icon icon16 icon-repeat"></span> <span>{lang}wcf.acp.user.activityPoint.updateCache{/lang}</span></a></li>
                        <li><a id="updateEvents" class="button"><span class="icon icon16 icon-repeat"></span> <span>{lang}wcf.acp.user.activityPoint.updateEvents{/lang}</span></a></li>
                        
                        {event name='contentNavigationButtons'}
@@ -42,9 +38,9 @@
                        <legend>{lang}wcf.user.activityPoint.pointsPerObject{/lang}</legend>
                        {foreach from=$objectTypes item='objectType'}
                                <dl{if $errorField == $objectType->objectTypeID} class="formError"{/if}>
-                                       <dt><label for="{$objectType->objectType}">{lang}wcf.user.activityPoint.objectType.{$objectType->objectType}{/lang}</label></dt>
+                                       <dt><label for="{@$objectType->objectType}">{lang}wcf.user.activityPoint.objectType.{$objectType->objectType}{/lang}</label></dt>
                                        <dd>
-                                               <input type="number" id="{$objectType->objectType}" name="points[{$objectType->objectTypeID}]" value="{$points[$objectType->objectTypeID]}" required="required" min="0" class="tiny" />
+                                               <input type="number" id="{@$objectType->objectType}" name="points[{@$objectType->objectTypeID}]" value="{$points[@$objectType->objectTypeID]}" required="required" min="0" class="tiny" />
                                                {if $errorField == $objectType->objectTypeID}
                                                        <small class="innerError">
                                                                {lang}wcf.acp.user.activityPoint.option.notValid{/lang}
index e33e9002b32dbbe22154e2fb7b63e4ea0ba438f7..adbdfc3d62b58d5e0cfb214f480764ba5f9e58a3 100644 (file)
@@ -2,19 +2,6 @@
 
 <header class="boxHeadline">
        <h1>{lang}wcf.acp.user.rank.list{/lang}</h1>
-       
-       <script>
-               //<![CDATA[
-               $(function() {
-                       new WCF.Action.Delete('wcf\\data\\user\\rank\\UserRankAction', '.jsUserRankRow');
-                       
-                       $('#updateUserRanks').click(function () {
-                               $('#updateUserRanks').unbind('click');
-                               new WCF.ACP.Worker('updateUserRanks', 'wcf\\system\\worker\\UserRankUpdateWorker');
-                       });
-               });
-               //]]>
-       </script>
 </header>
 
 <div class="contentNavigation">
@@ -22,7 +9,6 @@
        
        <nav>
                <ul>
-                       <li><a id="updateUserRanks" class="button"><span class="icon icon16 icon-repeat"></span> <span>{lang}wcf.acp.user.rank.updateRanks{/lang}</span></a></li>
                        <li><a href="{link controller='UserRankAdd'}{/link}" class="button"><span class="icon icon16 icon-plus"></span> <span>{lang}wcf.acp.user.rank.add{/lang}</span></a></li>
                        
                        {event name='contentNavigationButtonsTop'}
diff --git a/wcfsetup/install/files/lib/acp/page/RebuildDataPage.class.php b/wcfsetup/install/files/lib/acp/page/RebuildDataPage.class.php
new file mode 100644 (file)
index 0000000..85c2060
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+namespace wcf\acp\page;
+use wcf\data\object\type\ObjectTypeCache;
+use wcf\page\AbstractPage;
+use wcf\system\WCF;
+
+/**
+ * Show the list of available rebuild data options.
+ * 
+ * @author     Marcel Werk
+ * @copyright  2001-2013 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    com.woltlab.wcf
+ * @subpackage acp.page
+ * @category   Community Framework
+ */
+class RebuildDataPage extends AbstractPage {
+       /**
+        * @see wcf\page\AbstractPage::$activeMenuItem
+        */
+       public $activeMenuItem = 'wcf.acp.menu.link.maintenance.rebuildData';
+       
+       /**
+        * @see wcf\page\AbstractPage::$neededPermissions
+        */
+       public $neededPermissions = array('admin.system.canRebuildData');
+       
+       /**
+        * object types
+        * @var array
+        */
+       public $objectTypes = array();
+       
+       /**
+        * @see wcf\page\IPage::readData()
+        */
+       public function readData() {
+               parent::readData();
+       
+               // get object types
+               $this->objectTypes = ObjectTypeCache::getInstance()->getObjectTypes('com.woltlab.wcf.rebuildData');
+               
+               // @todo: sort object types
+       }
+       
+       /**
+        * @see wcf\page\IPage::assignVariables()
+        */
+       public function assignVariables() {
+               parent::assignVariables();
+               
+               WCF::getTPL()->assign(array(
+                       'objectTypes' => $this->objectTypes
+               ));
+       }
+}
diff --git a/wcfsetup/install/files/lib/system/worker/AbstractRebuildDataWorker.class.php b/wcfsetup/install/files/lib/system/worker/AbstractRebuildDataWorker.class.php
new file mode 100644 (file)
index 0000000..89e634b
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+namespace wcf\system\worker;
+use wcf\system\event\EventHandler;
+use wcf\system\exception\SystemException;
+use wcf\system\request\LinkHandler;
+use wcf\system\WCF;
+use wcf\util\ClassUtil;
+
+/**
+ * Abstract implementation of rebuild data worker.
+ * 
+ * @author     Marcel Werk
+ * @copyright  2001-2013 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    com.woltlab.wcf
+ * @subpackage system.worker
+ * @category   Community Framework
+ */
+abstract class AbstractRebuildDataWorker extends AbstractWorker implements IRebuildDataWorker {
+       /**
+        * class name for DatabaseObjectList
+        * @var string
+        */
+       protected $objectListClassName = '';
+       
+       /**
+        * database object list
+        * @var wcf\data\DatabaseObjectList
+        */
+       protected $objectList = null;
+       
+       /**
+        * @see wcf\system\worker\IRebuildDataWorker::getObjectList()
+        */
+       public function getObjectList() {
+               return $this->objectList;
+       }
+       
+       /**
+        * @see wcf\system\worker\IWorker::getLoopCount()
+        */
+       public function setLoopCount($loopCount) {
+               parent::setLoopCount($loopCount);
+               
+               $this->initObjectList();
+       }
+       
+       /**
+        * @see wcf\system\worker\IWorker::validate()
+        */
+       public function validate() {
+               WCF::getSession()->checkPermissions(array('admin.system.canRebuildData'));
+       }
+       
+       /**
+        * @see wcf\system\worker\IWorker::countObjects()
+        */
+       public function countObjects() {
+               $this->count = $this->objectList->countObjects();
+       }
+       
+       /**
+        * @see wcf\system\worker\IWorker::execute()
+        */
+       public function execute() {
+               $this->objectList->readObjects();
+               
+               EventHandler::getInstance()->fireAction($this, 'execute');
+       }
+       
+       /**
+        * @see wcf\system\worker\IWorker::getProceedURL()
+        */
+       public function getProceedURL() {
+               return LinkHandler::getInstance()->getLink('RebuildData');
+       }
+       
+       /**
+        * Initializes DatabaseObjectList instance.
+        */
+       protected function initObjectList() {
+               if (empty($this->objectListClassName)) {
+                       throw new SystemException('DatabaseObjectList class name not specified.');
+               }
+       
+               if (!ClassUtil::isInstanceOf($this->objectListClassName, 'wcf\data\DatabaseObjectList')) {
+                       throw new SystemException("'".$this->objectListClassName."' does not extend 'wcf\data\DatabaseObjectList'");
+               }
+       
+               $this->objectList = new $this->objectListClassName();
+               $this->objectList->sqlLimit = $this->limit;
+               $this->objectList->sqlOffset = $this->limit * $this->loopCount;
+       }
+}
diff --git a/wcfsetup/install/files/lib/system/worker/IRebuildDataWorker.class.php b/wcfsetup/install/files/lib/system/worker/IRebuildDataWorker.class.php
new file mode 100644 (file)
index 0000000..de0142d
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+namespace wcf\system\worker;
+
+/**
+ * Every rebuild data worker has to implement this interface.
+ *
+ * @author     Marcel Werk
+ * @copyright  2001-2013 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    com.woltlab.wcf
+ * @subpackage system.worker
+ * @category   Community Framework
+ */
+interface IRebuildDataWorker extends IWorker {
+       /**
+        * Returns the list of objects.
+        *
+        * @return wcf\data\DatabaseObjectList
+        */
+       public function getObjectList();
+}
diff --git a/wcfsetup/install/files/lib/system/worker/UserActivityPointUpdateCacheWorker.class.php b/wcfsetup/install/files/lib/system/worker/UserActivityPointUpdateCacheWorker.class.php
deleted file mode 100644 (file)
index 0ff91e1..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-namespace wcf\system\worker;
-use wcf\system\request\LinkHandler;
-use wcf\system\user\activity\point\UserActivityPointHandler;
-use wcf\system\WCF;
-
-/**
- * Worker implementation for updating user activity point caches.
- * 
- * @author     Tim Duesterhus
- * @copyright  2001-2013 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    com.woltlab.wcf
- * @subpackage system.worker
- * @category   Community Framework
- */
-class UserActivityPointUpdateCacheWorker extends AbstractWorker {
-       /**
-        * @see wcf\system\worker\AbstractWorker::$limit
-        */
-       protected $limit = 50;
-       
-       /**
-        * @see wcf\system\worker\IWorker::validate()
-        */
-       public function validate() {
-               WCF::getSession()->checkPermissions(array('admin.user.canEditActivityPoints'));
-       }
-       
-       /**
-        * @see wcf\system\worker\IWorker::countObjects()
-        */
-       public function countObjects() {
-               $sql = "SELECT  COUNT(*) AS count
-                       FROM    wcf".WCF_N."_user user";
-               $statement = WCF::getDB()->prepareStatement($sql);
-               $statement->execute();
-               $row = $statement->fetchArray();
-               
-               $this->count = $row['count'];
-       }
-       
-       /**
-        * @see wcf\system\worker\IWorker::execute()
-        */
-       public function execute() {
-               // get users
-               $sql = "SELECT          userID
-                       FROM            wcf".WCF_N."_user user
-                       ORDER BY        user.userID";
-               $statement = WCF::getDB()->prepareStatement($sql, $this->limit, ($this->limit * $this->loopCount));
-               $statement->execute();
-               
-               $userIDs = array();
-               while ($row = $statement->fetchArray()) {
-                       $userIDs[] = $row['userID'];
-               }
-               
-               UserActivityPointHandler::getInstance()->updateUsers($userIDs);
-       }
-       
-       /**
-        * @see wcf\system\worker\IWorker::getProceedURL()
-        */
-       public function getProceedURL() {
-               return LinkHandler::getInstance()->getLink('UserActivityPointOption');
-       }
-}
diff --git a/wcfsetup/install/files/lib/system/worker/UserRankUpdateWorker.class.php b/wcfsetup/install/files/lib/system/worker/UserRankUpdateWorker.class.php
deleted file mode 100644 (file)
index e6a7946..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-namespace wcf\system\worker;
-use wcf\data\user\UserEditor;
-use wcf\data\user\UserList;
-use wcf\data\user\UserProfileAction;
-use wcf\system\request\LinkHandler;
-use wcf\system\WCF;
-
-/**
- * Worker implementation for updating user ranks.
- * 
- * @author     Marcel Werk
- * @copyright  2001-2013 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    com.woltlab.wcf
- * @subpackage system.worker
- * @category   Community Framework
- */
-class UserRankUpdateWorker extends AbstractWorker {
-       /**
-        * @see wcf\system\worker\AbstractWorker::$limit
-        */
-       protected $limit = 100;
-       
-       /**
-        * @see wcf\system\worker\IWorker::validate()
-        */
-       public function validate() {
-               WCF::getSession()->checkPermissions(array('admin.user.rank.canManageRank'));
-       }
-       
-       /**
-        * @see wcf\system\worker\IWorker::countObjects()
-        */
-       public function countObjects() {
-               $sql = "SELECT  COUNT(*) AS count
-                       FROM    wcf".WCF_N."_user user";
-               $statement = WCF::getDB()->prepareStatement($sql);
-               $statement->execute();
-               $row = $statement->fetchArray();
-               
-               $this->count = $row['count'];
-       }
-       
-       /**
-        * @see wcf\system\worker\IWorker::execute()
-        */
-       public function execute() {
-               // get users
-               $userList = new UserList();
-               $userList->sqlLimit = $this->limit;
-               $userList->sqlOffset = $this->limit * $this->loopCount;
-               $userList->sqlOrderBy = 'user_table.userID';
-               $userList->readObjects();
-               
-               $users = array();
-               foreach ($userList as $user) {
-                       $users[] = new UserEditor($user);
-               }
-               
-               if (!empty($users)) {
-                       $action = new UserProfileAction($users, 'updateUserRank');
-                       $action->executeAction();
-                       $action = new UserProfileAction($users, 'updateUserOnlineMarking');
-                       $action->executeAction();
-               }
-       }
-       
-       /**
-        * @see wcf\system\worker\IWorker::getProceedURL()
-        */
-       public function getProceedURL() {
-               return LinkHandler::getInstance()->getLink('UserRankList');
-       }
-}
diff --git a/wcfsetup/install/files/lib/system/worker/UserRebuildDataWorker.class.php b/wcfsetup/install/files/lib/system/worker/UserRebuildDataWorker.class.php
new file mode 100644 (file)
index 0000000..45d76a2
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+namespace wcf\system\worker;
+use wcf\data\like\Like;
+use wcf\data\user\UserEditor;
+use wcf\data\user\UserProfileAction;
+use wcf\system\database\util\PreparedStatementConditionBuilder;
+use wcf\system\user\activity\point\UserActivityPointHandler;
+use wcf\system\WCF;
+
+/**
+ * Worker implementation for updating users.
+ * 
+ * @author     Marcel Werk
+ * @copyright  2001-2013 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    com.woltlab.wcf
+ * @subpackage system.worker
+ * @category   Community Framework
+ */
+class UserRebuildDataWorker extends AbstractRebuildDataWorker {
+       /**
+        * @see wcf\system\worker\AbstractRebuildDataWorker::$objectListClassName
+        */
+       protected $objectListClassName = 'wcf\data\user\UserList';
+       
+       /**
+        * @see wcf\system\worker\AbstractWorker::$limit
+        */
+       protected $limit = 50;
+       
+       /**
+        * @see wcf\system\worker\AbstractRebuildDataWorker::initObjectList
+        */
+       protected function initObjectList() {
+               parent::initObjectList();
+               
+               $this->objectList->sqlOrderBy = 'user_table.userID';
+       }
+       
+       /**
+        * @see wcf\system\worker\IWorker::execute()
+        */
+       public function execute() {
+               parent::execute();
+               
+               $users = $userIDs = array();
+               foreach ($this->getObjectList() as $user) {
+                       $users[] = new UserEditor($user);
+                       $userIDs[] = $user->userID;
+               }
+               
+               // update user ranks
+               if (!empty($users)) {
+                       $action = new UserProfileAction($users, 'updateUserOnlineMarking');
+                       $action->executeAction();
+               }
+               
+               if (!empty($userIDs)) {
+                       // update activity points
+                       UserActivityPointHandler::getInstance()->updateUsers($userIDs);
+                       
+                       // update like counter
+                       if (MODULE_LIKE) {
+                               $conditionBuilder = new PreparedStatementConditionBuilder();
+                               $conditionBuilder->add('user_table.userID IN (?)', array($userIDs));
+                               $sql = "UPDATE  wcf".WCF_N."_user user_table
+                                       SET     likesReceived = (
+                                                       SELECT  COUNT(*)
+                                                       FROM    wcf".WCF_N."_like
+                                                       WHERE   objectUserID = user_table.userID
+                                                               AND likeValue = ".Like::LIKE."          
+                                               )
+                                       ".$conditionBuilder;
+                               $statement = WCF::getDB()->prepareStatement($sql);
+                               $statement->execute($conditionBuilder->getParameters());
+                       }
+               }
+       }
+}
index caa2dc926e07c146342caa110b6ae892050e7508..3c6d1cc60084797c9ac2e2c38fabbd60ca951987 100644 (file)
                <item name="wcf.acp.group.option.category.admin.content.tag"><![CDATA[Tags]]></item>
                <item name="wcf.acp.group.option.admin.content.tag.canManageTag"><![CDATA[Kann Tags verwalten]]></item>
                <item name="wcf.acp.group.option.user.signature.maxLength"><![CDATA[Maximale Signaturlänge]]></item>
+               <item name="wcf.acp.group.option.admin.system.canImportData"><![CDATA[Kann Daten importieren]]></item>
+               <item name="wcf.acp.group.option.admin.system.canRebuildData"><![CDATA[Kann Anzeigen aktualisieren]]></item>
        </category>
        
        <category name="wcf.acp.index">
                <item name="wcf.acp.menu.link.tag.add"><![CDATA[Tag hinzufügen]]></item>
                <item name="wcf.acp.menu.link.tag.list"><![CDATA[Tags auflisten]]></item>
                <item name="wcf.acp.menu.link.maintenance.import"><![CDATA[Datenimport]]></item>
+               <item name="wcf.acp.menu.link.maintenance.rebuildData"><![CDATA[Anzeigen aktualisieren]]></item>
        </category>
        
        <category name="wcf.acp.option">
                <item name="wcf.acp.pageMenu.showOrder"><![CDATA[Reihenfolge]]></item>
        </category>
        
+       <category name="wcf.acp.rebuildData">
+               <item name="wcf.acp.rebuildData"><![CDATA[Anzeigen aktualisieren]]></item>
+               <item name="wcf.acp.rebuildData.description"><![CDATA[Für eine vollständige Aktualisierung aller Daten (z.B. nach einem Datenimport) führen Sie die Aktionen bitte in der hier angegebenen Reihenfolge durch.]]></item>
+               <item name="wcf.acp.rebuildData.com.woltlab.wcf.user"><![CDATA[Benutzer aktualisieren]]></item>
+       </category>
+       
        <category name="wcf.acp.search">
                <item name="wcf.acp.search.noResults"><![CDATA[Keine Treffer]]></item>
                <item name="wcf.acp.search.provider.com.woltlab.wcf.menuItem"><![CDATA[Seiten]]></item>
@@ -1249,7 +1258,6 @@ Wenn Sie unter <em>System -&gt; Optionen -&gt; Allgemein -&gt; E-Mails</em> alle
                <item name="wcf.acp.user.search.conditions.state.banned"><![CDATA[Gesperrt]]></item>
                <item name="wcf.acp.user.search.conditions.state.notBanned"><![CDATA[Nicht gesperrt]]></item>
                <item name="wcf.acp.user.activityPoint.option"><![CDATA[Aktivitätspunkte]]></item>
-               <item name="wcf.acp.user.activityPoint.updateCache"><![CDATA[Aktivitätspunkte neu vergeben]]></item>
                <item name="wcf.acp.user.activityPoint.updateEvents"><![CDATA[Punkte pro Aktivität aktualisieren]]></item>
                <item name="wcf.acp.user.delete"><![CDATA[Benutzer löschen]]></item>
                <item name="wcf.acp.user.general"><![CDATA[Benutzer]]></item>
@@ -1270,7 +1278,6 @@ Wenn Sie unter <em>System -&gt; Optionen -&gt; Allgemein -&gt; E-Mails</em> alle
                <item name="wcf.acp.user.rank.repeatImage.description"><![CDATA[Bestimmt, wie oft die Grafik wiederholt wird.]]></item>
                <item name="wcf.acp.user.rank.title"><![CDATA[Rangbezeichnung]]></item>
                <item name="wcf.acp.user.rank.userGroup.description"><![CDATA[Dieser Benutzerrang steht ausschließlich den Mitgliedern der ausgewählten Benutzergruppe zur Verfügung.]]></item>
-               <item name="wcf.acp.user.rank.updateRanks"><![CDATA[Benutzerränge aktualisieren]]></item>
                <item name="wcf.acp.user.disableSignature"><![CDATA[Signatur sperren]]></item>
                <item name="wcf.acp.user.disableSignatureReason"><![CDATA[Begründung]]></item>
                <item name="wcf.acp.user.disableAvatar"><![CDATA[Avatar sperren]]></item>
index bec4e6db22a19445ac0b102b232cb30f7eed11b5..56ae4d0e09864308e6fedb3f4d4b06fd0e08e971 100644 (file)
@@ -346,6 +346,8 @@ Examples for medium ID detection:
                <item name="wcf.acp.group.option.category.admin.content.tag"><![CDATA[Tags]]></item>
                <item name="wcf.acp.group.option.admin.content.tag.canManageTag"><![CDATA[Can manage tags]]></item>
                <item name="wcf.acp.group.option.user.signature.maxLength"><![CDATA[Maximum Signature Length]]></item>
+               <item name="wcf.acp.group.option.admin.system.canImportData"><![CDATA[TODO: Kann Daten importieren]]></item>
+               <item name="wcf.acp.group.option.admin.system.canRebuildData"><![CDATA[TODO: Kann Anzeigen aktualisieren]]></item>
        </category>
        
        <category name="wcf.acp.index">
@@ -526,6 +528,7 @@ Examples for medium ID detection:
                <item name="wcf.acp.menu.link.tag.add"><![CDATA[Add Tag]]></item>
                <item name="wcf.acp.menu.link.tag.list"><![CDATA[List Tags]]></item>
                <item name="wcf.acp.menu.link.maintenance.import"><![CDATA[TODO: Datenimport]]></item>
+               <item name="wcf.acp.menu.link.maintenance.rebuildData"><![CDATA[TODO: Anzeigen aktualisieren]]></item>
        </category>
        
        <category name="wcf.acp.option">
@@ -946,6 +949,12 @@ Examples for medium ID detection:
                <item name="wcf.acp.pageMenu.showOrder"><![CDATA[Display Order]]></item>
        </category>
        
+       <category name="wcf.acp.rebuildData">
+               <item name="wcf.acp.rebuildData"><![CDATA[TODO: Anzeigen aktualisieren]]></item>
+               <item name="wcf.acp.rebuildData.description"><![CDATA[TODO: Für eine vollständige Aktualisierung aller Daten (z.B. nach einem Datenimport) führen Sie die Aktionen bitte in der hier angegebenen Reihenfolge durch.]]></item>
+               <item name="wcf.acp.rebuildData.com.woltlab.wcf.user"><![CDATA[TODO: Benutzer aktualisieren]]></item>
+       </category>
+       
        <category name="wcf.acp.search">
                <item name="wcf.acp.search.noResults"><![CDATA[No results]]></item>
                <item name="wcf.acp.search.provider.com.woltlab.wcf.menuItem"><![CDATA[ACP Menu]]></item>
@@ -1248,7 +1257,6 @@ You can define the default sender in <em>System -&gt; Options -&gt; General -&gt
                <item name="wcf.acp.user.search.conditions.state.banned"><![CDATA[Banned]]></item>
                <item name="wcf.acp.user.search.conditions.state.notBanned"><![CDATA[Not banned]]></item>
                <item name="wcf.acp.user.activityPoint.option"><![CDATA[Activity Points]]></item>
-               <item name="wcf.acp.user.activityPoint.updateCache"><![CDATA[Update Activity Point Cache]]></item>
                <item name="wcf.acp.user.activityPoint.updateEvents"><![CDATA[Update Points Per Activity]]></item>
                <item name="wcf.acp.user.delete"><![CDATA[Delete user(s)]]></item>
                <item name="wcf.acp.user.general"><![CDATA[User]]></item>
@@ -1269,7 +1277,6 @@ You can define the default sender in <em>System -&gt; Options -&gt; General -&gt
                <item name="wcf.acp.user.rank.repeatImage.description"><![CDATA[Number of times the rank image will be repeated.]]></item>
                <item name="wcf.acp.user.rank.title"><![CDATA[Title]]></item>
                <item name="wcf.acp.user.rank.userGroup.description"><![CDATA[Rank is restricted to members of the selected user groups.]]></item>
-               <item name="wcf.acp.user.rank.updateRanks"><![CDATA[Update User Ranks]]></item>
                <item name="wcf.acp.user.disableSignature"><![CDATA[Block signature]]></item>
                <item name="wcf.acp.user.disableSignatureReason"><![CDATA[Reason]]></item>
                <item name="wcf.acp.user.disableAvatar"><![CDATA[Block avatar]]></item>