Moved language server administration into commercial package com.woltlab.wcf.acp...
authorAlexander Ebert <ebert@woltlab.com>
Fri, 15 Jul 2011 17:43:23 +0000 (19:43 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Fri, 15 Jul 2011 17:43:23 +0000 (19:43 +0200)
com.woltlab.wcf/acpmenu.xml
com.woltlab.wcf/groupoptions.xml
wcfsetup/install/files/acp/templates/languageServerAdd.tpl [deleted file]
wcfsetup/install/files/acp/templates/languageServerList.tpl [deleted file]
wcfsetup/install/files/lib/acp/form/LanguageServerAddForm.class.php [deleted file]
wcfsetup/install/files/lib/acp/form/LanguageServerEditForm.class.php [deleted file]
wcfsetup/install/files/lib/acp/page/LanguageServerListPage.class.php [deleted file]
wcfsetup/install/files/lib/util/StringUtil.class.php

index 20ee7e90901697e1ae512456a3ba9a577f942e68..febcd646ac4d775e7149ec753bdb12cdcdfd9cc4 100644 (file)
-<?xml version="1.0" encoding="UTF-8"?>\r
-<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/acpmenu.xsd">\r
-       <import>\r
-               <acpmenuitem name="wcf.acp.menu.link.system">\r
-                       <icon>icon/systemL.png</icon>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <!-- options -->\r
-               <acpmenuitem name="wcf.acp.menu.link.option">\r
-                       <parent>wcf.acp.menu.link.system</parent>\r
-                       <showorder>1</showorder>\r
-                       <permissions>admin.system.canEditOption</permissions>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.option.category">\r
-                       <parent>wcf.acp.menu.link.option</parent>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.option.management">\r
-                       <parent>wcf.acp.menu.link.option</parent>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.option.importAndExport">\r
-                       <parent>wcf.acp.menu.link.option.management</parent>\r
-                       <showorder>1</showorder>\r
-                       <link>index.php?form=OptionImport</link>\r
-               </acpmenuitem>\r
-               <!-- /options -->\r
-               \r
-               <!-- packages -->\r
-               <acpmenuitem name="wcf.acp.menu.link.package">\r
-                       <parent>wcf.acp.menu.link.system</parent>\r
-                       <showorder>2</showorder>\r
-                       <permissions>admin.system.package.canInstallPackage,admin.system.package.canUpdatePackage,admin.system.package.canUninstallPackage,admin.system.package.canEditServer</permissions>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.package.management">\r
-                       <parent>wcf.acp.menu.link.package</parent>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.package.view">\r
-                       <icon>icon/packageM.png</icon>\r
-                       <link>index.php?page=PackageList</link>\r
-                       <parent>wcf.acp.menu.link.package.management</parent>\r
-                       <permissions>admin.system.package.canUpdatePackage,admin.system.package.canUninstallPackage</permissions>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.package.install">\r
-                       <link>index.php?form=PackageStartInstall&amp;action=install</link>\r
-                       <parent>wcf.acp.menu.link.package.management</parent>\r
-                       <permissions>admin.system.package.canInstallPackage</permissions>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.package.update">\r
-                       <parent>wcf.acp.menu.link.package</parent>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.autoupdate">\r
-                       <icon>icon/updateM.png</icon>\r
-                       <link>index.php?page=PackageAutoUpdateList</link>\r
-                       <parent>wcf.acp.menu.link.package.update</parent>\r
-                       <permissions>admin.system.package.canUpdatePackage</permissions>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.package.database">\r
-                       <link>index.php?form=PackageUpdateSearch</link>\r
-                       <parent>wcf.acp.menu.link.package.update</parent>\r
-                       <permissions>admin.system.package.canInstallPackage,admin.system.package.canUpdatePackage</permissions>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.package.server">\r
-                       <parent>wcf.acp.menu.link.package</parent>\r
-                       <showorder>3</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.package.server.view">\r
-                       <icon>icon/updateServerM.png</icon>\r
-                       <link>index.php?page=UpdateServerList</link>\r
-                       <parent>wcf.acp.menu.link.package.server</parent>\r
-                       <permissions>admin.system.package.canEditServer</permissions>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.package.server.add">\r
-                       <link>index.php?form=UpdateServerAdd</link>\r
-                       <parent>wcf.acp.menu.link.package.server</parent>\r
-                       <permissions>admin.system.package.canEditServer</permissions>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               <!-- /packages -->      \r
-               \r
-               <!-- maintenance -->\r
-               <acpmenuitem name="wcf.acp.menu.link.maintenance">\r
-                       <parent>wcf.acp.menu.link.system</parent>\r
-                       <showorder>3</showorder>\r
-               </acpmenuitem>\r
-               <!-- /maintenance -->\r
-               \r
-               <!-- log -->\r
-               <acpmenuitem name="wcf.acp.menu.link.log">\r
-                       <parent>wcf.acp.menu.link.system</parent>\r
-                       <showorder>4</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.log.system">\r
-                       <parent>wcf.acp.menu.link.log</parent>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.log.additional">\r
-                       <parent>wcf.acp.menu.link.log</parent>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.log.session">\r
-                       <icon>icon/sessionLogM.png</icon>\r
-                       <link>index.php?page=ACPSessionLogList</link>\r
-                       <parent>wcf.acp.menu.link.log.system</parent>\r
-                       <permissions>admin.system.canViewLog</permissions>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.log.cache">\r
-                       <link>index.php?page=CacheList</link>\r
-                       <parent>wcf.acp.menu.link.log.system</parent>\r
-                       <permissions>admin.system.canViewLog</permissions>\r
-               </acpmenuitem>\r
-               <!-- /log -->\r
-               \r
-               <!-- cronjobs -->\r
-               <acpmenuitem name="wcf.acp.menu.link.cronjobs">\r
-                       <parent>wcf.acp.menu.link.maintenance</parent>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.cronjobs.view">\r
-                       <icon>icon/cronjobsM.png</icon>\r
-                       <link>index.php?page=CronjobList</link>\r
-                       <parent>wcf.acp.menu.link.cronjobs</parent>\r
-                       <permissions>admin.system.cronjobs.canEditCronjob,admin.system.cronjobs.canDeleteCronjob,admin.system.cronjobs.canEnableDisableCronjob</permissions>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.cronjobs.add">\r
-                       <link>index.php?form=CronjobAdd</link>\r
-                       <parent>wcf.acp.menu.link.cronjobs</parent>\r
-                       <permissions>admin.system.cronjobs.canAddCronjob</permissions>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.cronjobs.showLog">\r
-                       <link>index.php?page=CronjobLogList</link>\r
-                       <parent>wcf.acp.menu.link.log.system</parent>\r
-                       <permissions>admin.system.cronjobs.canEditCronjob,admin.system.cronjobs.canDeleteCronjob</permissions>\r
-               </acpmenuitem>\r
-               <!-- /cronjobs -->\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.user">\r
-                       <icon>icon/usersL.png</icon>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <!-- users -->\r
-               <acpmenuitem name="wcf.acp.menu.link.user.management">\r
-                       <parent>wcf.acp.menu.link.user</parent>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.user.management.general">\r
-                       <parent>wcf.acp.menu.link.user.management</parent>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.user.list">\r
-                       <icon>icon/usersM.png</icon>\r
-                       <link>index.php?page=UserList</link>\r
-                       <parent>wcf.acp.menu.link.user.management.general</parent>\r
-                       <permissions>admin.user.canSearchUser</permissions>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.user.search">\r
-                       <icon>icon/searchM.png</icon>\r
-                       <link>index.php?form=UserSearch</link>\r
-                       <parent>wcf.acp.menu.link.user.management.general</parent>\r
-                       <permissions>admin.user.canSearchUser</permissions>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.user.add">\r
-                       <link>index.php?form=UserAdd</link>\r
-                       <parent>wcf.acp.menu.link.user.management.general</parent>\r
-                       <permissions>admin.user.canAddUser</permissions>\r
-                       <showorder>3</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.user.management.additional">\r
-                       <parent>wcf.acp.menu.link.user.management</parent>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.user.massProcessing">\r
-                       <link>index.php?form=UsersMassProcessing</link>\r
-                       <parent>wcf.acp.menu.link.user.management.additional</parent>\r
-                       <permissions>admin.user.canEditUser,admin.user.canDeleteUser,admin.user.canMailUser</permissions>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.user.mail">\r
-                       <link>index.php?form=UserMail&amp;action=all</link>\r
-                       <parent>wcf.acp.menu.link.user.management.additional</parent>\r
-                       <permissions>admin.user.canMailUser</permissions>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               <!-- /users -->\r
-               \r
-               <!-- user groups -->\r
-               <acpmenuitem name="wcf.acp.menu.link.group">\r
-                       <parent>wcf.acp.menu.link.user</parent>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.group.general">\r
-                       <parent>wcf.acp.menu.link.group</parent>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.group.view">\r
-                       <icon>icon/userGroupM.png</icon>\r
-                       <link>index.php?page=UserGroupList</link>\r
-                       <parent>wcf.acp.menu.link.group.general</parent>\r
-                       <permissions>admin.user.canEditGroup,admin.user.canDeleteGroup</permissions>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>  \r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.group.add">\r
-                       <link>index.php?form=UserGroupAdd</link>\r
-                       <parent>wcf.acp.menu.link.group.general</parent>\r
-                       <permissions>admin.user.canAddGroup</permissions>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.group.additional">\r
-                       <parent>wcf.acp.menu.link.group</parent>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.group.mail">\r
-                       <icon>icon/emailM.png</icon>\r
-                       <link>index.php?form=UserMail&amp;action=group</link>\r
-                       <parent>wcf.acp.menu.link.group.additional</parent>\r
-                       <permissions>admin.user.canMailUser</permissions>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-               <!-- user groups -->\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.display">\r
-                       <icon>icon/displayL.png</icon>\r
-                       <showorder>3</showorder>\r
-               </acpmenuitem>\r
-               \r
-               <!-- language -->\r
-               <acpmenuitem name="wcf.acp.menu.link.language">\r
-                       <parent>wcf.acp.menu.link.display</parent>\r
-               </acpmenuitem>\r
-\r
-               <acpmenuitem name="wcf.acp.menu.link.language.server">\r
-                       <parent>wcf.acp.menu.link.language</parent>\r
-               </acpmenuitem>\r
-\r
-               <acpmenuitem name="wcf.acp.menu.link.language.server.list">\r
-                       <icon>icon/languageServerM.png</icon>\r
-                       <link>index.php?page=LanguageServerList</link>\r
-                       <parent>wcf.acp.menu.link.language.server</parent>\r
-                       <permissions>admin.language.canEditServer</permissions>\r
-                       <showorder>1</showorder>\r
-               </acpmenuitem>\r
-\r
-               <acpmenuitem name="wcf.acp.menu.link.language.server.add">\r
-                       <link>index.php?form=LanguageServerAdd</link>\r
-                       <parent>wcf.acp.menu.link.language.server</parent>\r
-                       <permissions>admin.language.canEditServer</permissions>\r
-                       <showorder>2</showorder>\r
-               </acpmenuitem>\r
-               <!-- /language -->\r
-               \r
-               <acpmenuitem name="wcf.acp.menu.link.content">\r
-                       <icon>icon/contentL.png</icon>\r
-                       <showorder>4</showorder>\r
-               </acpmenuitem>\r
-       </import>\r
-</data>\r
+<?xml version="1.0" encoding="UTF-8"?>
+<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/acpmenu.xsd">
+       <import>
+               <acpmenuitem name="wcf.acp.menu.link.system">
+                       <icon>icon/systemL.png</icon>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <!-- options -->
+               <acpmenuitem name="wcf.acp.menu.link.option">
+                       <parent>wcf.acp.menu.link.system</parent>
+                       <showorder>1</showorder>
+                       <permissions>admin.system.canEditOption</permissions>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.option.category">
+                       <parent>wcf.acp.menu.link.option</parent>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.option.management">
+                       <parent>wcf.acp.menu.link.option</parent>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.option.importAndExport">
+                       <parent>wcf.acp.menu.link.option.management</parent>
+                       <showorder>1</showorder>
+                       <link>index.php?form=OptionImport</link>
+               </acpmenuitem>
+               <!-- /options -->
+               
+               <!-- packages -->
+               <acpmenuitem name="wcf.acp.menu.link.package">
+                       <parent>wcf.acp.menu.link.system</parent>
+                       <showorder>2</showorder>
+                       <permissions>admin.system.package.canInstallPackage,admin.system.package.canUpdatePackage,admin.system.package.canUninstallPackage,admin.system.package.canEditServer</permissions>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.package.management">
+                       <parent>wcf.acp.menu.link.package</parent>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.package.view">
+                       <icon>icon/packageM.png</icon>
+                       <link>index.php?page=PackageList</link>
+                       <parent>wcf.acp.menu.link.package.management</parent>
+                       <permissions>admin.system.package.canUpdatePackage,admin.system.package.canUninstallPackage</permissions>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.package.install">
+                       <link>index.php?form=PackageStartInstall&amp;action=install</link>
+                       <parent>wcf.acp.menu.link.package.management</parent>
+                       <permissions>admin.system.package.canInstallPackage</permissions>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.package.update">
+                       <parent>wcf.acp.menu.link.package</parent>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.autoupdate">
+                       <icon>icon/updateM.png</icon>
+                       <link>index.php?page=PackageAutoUpdateList</link>
+                       <parent>wcf.acp.menu.link.package.update</parent>
+                       <permissions>admin.system.package.canUpdatePackage</permissions>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.package.database">
+                       <link>index.php?form=PackageUpdateSearch</link>
+                       <parent>wcf.acp.menu.link.package.update</parent>
+                       <permissions>admin.system.package.canInstallPackage,admin.system.package.canUpdatePackage</permissions>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.package.server">
+                       <parent>wcf.acp.menu.link.package</parent>
+                       <showorder>3</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.package.server.view">
+                       <icon>icon/updateServerM.png</icon>
+                       <link>index.php?page=UpdateServerList</link>
+                       <parent>wcf.acp.menu.link.package.server</parent>
+                       <permissions>admin.system.package.canEditServer</permissions>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.package.server.add">
+                       <link>index.php?form=UpdateServerAdd</link>
+                       <parent>wcf.acp.menu.link.package.server</parent>
+                       <permissions>admin.system.package.canEditServer</permissions>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               <!-- /packages -->      
+               
+               <!-- maintenance -->
+               <acpmenuitem name="wcf.acp.menu.link.maintenance">
+                       <parent>wcf.acp.menu.link.system</parent>
+                       <showorder>3</showorder>
+               </acpmenuitem>
+               <!-- /maintenance -->
+               
+               <!-- log -->
+               <acpmenuitem name="wcf.acp.menu.link.log">
+                       <parent>wcf.acp.menu.link.system</parent>
+                       <showorder>4</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.log.system">
+                       <parent>wcf.acp.menu.link.log</parent>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.log.additional">
+                       <parent>wcf.acp.menu.link.log</parent>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.log.session">
+                       <icon>icon/sessionLogM.png</icon>
+                       <link>index.php?page=ACPSessionLogList</link>
+                       <parent>wcf.acp.menu.link.log.system</parent>
+                       <permissions>admin.system.canViewLog</permissions>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.log.cache">
+                       <link>index.php?page=CacheList</link>
+                       <parent>wcf.acp.menu.link.log.system</parent>
+                       <permissions>admin.system.canViewLog</permissions>
+               </acpmenuitem>
+               <!-- /log -->
+               
+               <!-- cronjobs -->
+               <acpmenuitem name="wcf.acp.menu.link.cronjobs">
+                       <parent>wcf.acp.menu.link.maintenance</parent>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.cronjobs.view">
+                       <icon>icon/cronjobsM.png</icon>
+                       <link>index.php?page=CronjobList</link>
+                       <parent>wcf.acp.menu.link.cronjobs</parent>
+                       <permissions>admin.system.cronjobs.canEditCronjob,admin.system.cronjobs.canDeleteCronjob,admin.system.cronjobs.canEnableDisableCronjob</permissions>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.cronjobs.add">
+                       <link>index.php?form=CronjobAdd</link>
+                       <parent>wcf.acp.menu.link.cronjobs</parent>
+                       <permissions>admin.system.cronjobs.canAddCronjob</permissions>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.cronjobs.showLog">
+                       <link>index.php?page=CronjobLogList</link>
+                       <parent>wcf.acp.menu.link.log.system</parent>
+                       <permissions>admin.system.cronjobs.canEditCronjob,admin.system.cronjobs.canDeleteCronjob</permissions>
+               </acpmenuitem>
+               <!-- /cronjobs -->
+               
+               <acpmenuitem name="wcf.acp.menu.link.user">
+                       <icon>icon/usersL.png</icon>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <!-- users -->
+               <acpmenuitem name="wcf.acp.menu.link.user.management">
+                       <parent>wcf.acp.menu.link.user</parent>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.user.management.general">
+                       <parent>wcf.acp.menu.link.user.management</parent>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.user.list">
+                       <icon>icon/usersM.png</icon>
+                       <link>index.php?page=UserList</link>
+                       <parent>wcf.acp.menu.link.user.management.general</parent>
+                       <permissions>admin.user.canSearchUser</permissions>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.user.search">
+                       <icon>icon/searchM.png</icon>
+                       <link>index.php?form=UserSearch</link>
+                       <parent>wcf.acp.menu.link.user.management.general</parent>
+                       <permissions>admin.user.canSearchUser</permissions>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.user.add">
+                       <link>index.php?form=UserAdd</link>
+                       <parent>wcf.acp.menu.link.user.management.general</parent>
+                       <permissions>admin.user.canAddUser</permissions>
+                       <showorder>3</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.user.management.additional">
+                       <parent>wcf.acp.menu.link.user.management</parent>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.user.massProcessing">
+                       <link>index.php?form=UsersMassProcessing</link>
+                       <parent>wcf.acp.menu.link.user.management.additional</parent>
+                       <permissions>admin.user.canEditUser,admin.user.canDeleteUser,admin.user.canMailUser</permissions>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.user.mail">
+                       <link>index.php?form=UserMail&amp;action=all</link>
+                       <parent>wcf.acp.menu.link.user.management.additional</parent>
+                       <permissions>admin.user.canMailUser</permissions>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               <!-- /users -->
+               
+               <!-- user groups -->
+               <acpmenuitem name="wcf.acp.menu.link.group">
+                       <parent>wcf.acp.menu.link.user</parent>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.group.general">
+                       <parent>wcf.acp.menu.link.group</parent>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.group.view">
+                       <icon>icon/userGroupM.png</icon>
+                       <link>index.php?page=UserGroupList</link>
+                       <parent>wcf.acp.menu.link.group.general</parent>
+                       <permissions>admin.user.canEditGroup,admin.user.canDeleteGroup</permissions>
+                       <showorder>1</showorder>
+               </acpmenuitem>  
+               
+               <acpmenuitem name="wcf.acp.menu.link.group.add">
+                       <link>index.php?form=UserGroupAdd</link>
+                       <parent>wcf.acp.menu.link.group.general</parent>
+                       <permissions>admin.user.canAddGroup</permissions>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.group.additional">
+                       <parent>wcf.acp.menu.link.group</parent>
+                       <showorder>2</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.group.mail">
+                       <icon>icon/emailM.png</icon>
+                       <link>index.php?form=UserMail&amp;action=group</link>
+                       <parent>wcf.acp.menu.link.group.additional</parent>
+                       <permissions>admin.user.canMailUser</permissions>
+                       <showorder>1</showorder>
+               </acpmenuitem>
+               <!-- user groups -->
+               
+               <acpmenuitem name="wcf.acp.menu.link.display">
+                       <icon>icon/displayL.png</icon>
+                       <showorder>3</showorder>
+               </acpmenuitem>
+               
+               <acpmenuitem name="wcf.acp.menu.link.content">
+                       <icon>icon/contentL.png</icon>
+                       <showorder>4</showorder>
+               </acpmenuitem>
+       </import>
+</data>
index 2ae959a904c6b719fda1cc50ddfd5021a3902125..6fbf3625d7b0710a612ae8216ef6f7a03a6d362d 100644 (file)
-<?xml version="1.0" encoding="UTF-8"?>\r
-<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/groupoptions.xsd">\r
-       <import>\r
-               <categories>\r
-                       <category name="user"></category>\r
-                       <category name="mod"></category>\r
-                       <category name="admin"></category>\r
-                       <category name="admin.general">\r
-                               <parent>admin</parent>\r
-                       </category>\r
-                       <category name="admin.system">\r
-                               <parent>admin</parent>\r
-                       </category>\r
-                       <category name="admin.system.cronjobs">\r
-                               <parent>admin.system</parent>\r
-                       </category>\r
-                       <category name="admin.system.package">\r
-                               <parent>admin.system</parent>\r
-                       </category>\r
-                       <category name="admin.maintenance">\r
-                               <parent>admin.system</parent>\r
-                       </category>\r
-                       <category name="admin.user">\r
-                               <parent>admin</parent>\r
-                       </category>\r
-                       <category name="admin.user.user">\r
-                               <parent>admin.user</parent>\r
-                       </category>\r
-                       <category name="admin.user.group">\r
-                               <parent>admin.user</parent>\r
-                       </category>\r
-                       \r
-                       <category name="admin.display">\r
-                               <parent>admin</parent>\r
-                       </category>\r
-                       <category name="admin.content">\r
-                               <parent>admin</parent>\r
-                       </category>\r
-                       <category name="admin.style">\r
-                               <parent>admin.display</parent>\r
-                       </category>\r
-                       <category name="admin.language">\r
-                               <parent>admin.display</parent>\r
-                       </category>\r
-               </categories>\r
-               \r
-               <options>\r
-                       <option name="admin.general.canViewPrivateUserOptions">\r
-                               <categoryname>admin.general</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.system.canEditOption">\r
-                               <categoryname>admin.system</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.system.canViewLog">\r
-                               <categoryname>admin.system</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.system.cronjobs.canAddCronjob">\r
-                               <categoryname>admin.system.cronjobs</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.system.cronjobs.canEditCronjob">\r
-                               <categoryname>admin.system.cronjobs</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.system.cronjobs.canDeleteCronjob">\r
-                               <categoryname>admin.system.cronjobs</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.system.cronjobs.canEnableDisableCronjob">\r
-                               <categoryname>admin.system.cronjobs</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.system.cronjobs.canDeleteCronjobsLog">\r
-                               <categoryname>admin.system.cronjobs</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.system.package.canUpdatePackage">\r
-                               <categoryname>admin.system.package</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.system.package.canUninstallPackage">\r
-                               <categoryname>admin.system.package</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.system.package.canEditServer">\r
-                               <categoryname>admin.system.package</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.user.accessibleGroups">\r
-                               <categoryname>admin.user.group</categoryname>\r
-                               <optiontype>groups</optiontype>\r
-                               <defaultvalue></defaultvalue>\r
-                               <admindefaultvalue>1,2,3,4,5,6</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.user.canAddUser">\r
-                               <categoryname>admin.user.user</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.user.canSearchUser">\r
-                               <categoryname>admin.user.user</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.user.canEditUser">\r
-                               <categoryname>admin.user.user</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.user.canEditMailAddress">\r
-                               <categoryname>admin.user.user</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.user.canEditPassword">\r
-                               <categoryname>admin.user.user</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.user.canDeleteUser">\r
-                               <categoryname>admin.user.user</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.user.canMailUser">\r
-                               <categoryname>admin.user.user</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.user.canAddGroup">\r
-                               <categoryname>admin.user.group</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.user.canDeleteGroup">\r
-                               <categoryname>admin.user.group</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.style.canUseDisabledStyle">\r
-                               <categoryname>admin.style</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.language.canAddServer">\r
-                               <categoryname>admin.language</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.language.canDeleteServer">\r
-                               <categoryname>admin.language</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-                       <option name="admin.language.canEditServer">\r
-                               <categoryname>admin.language</categoryname>\r
-                               <optiontype>boolean</optiontype>\r
-                               <defaultvalue>0</defaultvalue>\r
-                               <admindefaultvalue>1</admindefaultvalue>\r
-                       </option>\r
-               </options>\r
-       </import>\r
-</data>\r
+<?xml version="1.0" encoding="UTF-8"?>
+<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/groupoptions.xsd">
+       <import>
+               <categories>
+                       <category name="user"></category>
+                       <category name="mod"></category>
+                       <category name="admin"></category>
+                       <category name="admin.general">
+                               <parent>admin</parent>
+                       </category>
+                       <category name="admin.system">
+                               <parent>admin</parent>
+                       </category>
+                       <category name="admin.system.cronjobs">
+                               <parent>admin.system</parent>
+                       </category>
+                       <category name="admin.system.package">
+                               <parent>admin.system</parent>
+                       </category>
+                       <category name="admin.maintenance">
+                               <parent>admin.system</parent>
+                       </category>
+                       <category name="admin.user">
+                               <parent>admin</parent>
+                       </category>
+                       <category name="admin.user.user">
+                               <parent>admin.user</parent>
+                       </category>
+                       <category name="admin.user.group">
+                               <parent>admin.user</parent>
+                       </category>
+                       
+                       <category name="admin.display">
+                               <parent>admin</parent>
+                       </category>
+                       <category name="admin.content">
+                               <parent>admin</parent>
+                       </category>
+                       <category name="admin.style">
+                               <parent>admin.display</parent>
+                       </category>
+                       <category name="admin.language">
+                               <parent>admin.display</parent>
+                       </category>
+               </categories>
+               
+               <options>
+                       <option name="admin.general.canViewPrivateUserOptions">
+                               <categoryname>admin.general</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.system.canEditOption">
+                               <categoryname>admin.system</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.system.canViewLog">
+                               <categoryname>admin.system</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.system.cronjobs.canAddCronjob">
+                               <categoryname>admin.system.cronjobs</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.system.cronjobs.canEditCronjob">
+                               <categoryname>admin.system.cronjobs</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.system.cronjobs.canDeleteCronjob">
+                               <categoryname>admin.system.cronjobs</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.system.cronjobs.canEnableDisableCronjob">
+                               <categoryname>admin.system.cronjobs</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.system.cronjobs.canDeleteCronjobsLog">
+                               <categoryname>admin.system.cronjobs</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.system.package.canUpdatePackage">
+                               <categoryname>admin.system.package</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.system.package.canUninstallPackage">
+                               <categoryname>admin.system.package</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.system.package.canEditServer">
+                               <categoryname>admin.system.package</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.user.accessibleGroups">
+                               <categoryname>admin.user.group</categoryname>
+                               <optiontype>groups</optiontype>
+                               <defaultvalue></defaultvalue>
+                               <admindefaultvalue>1,2,3,4,5,6</admindefaultvalue>
+                       </option>
+                       <option name="admin.user.canAddUser">
+                               <categoryname>admin.user.user</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.user.canSearchUser">
+                               <categoryname>admin.user.user</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.user.canEditUser">
+                               <categoryname>admin.user.user</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.user.canEditMailAddress">
+                               <categoryname>admin.user.user</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.user.canEditPassword">
+                               <categoryname>admin.user.user</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.user.canDeleteUser">
+                               <categoryname>admin.user.user</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.user.canMailUser">
+                               <categoryname>admin.user.user</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.user.canAddGroup">
+                               <categoryname>admin.user.group</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.user.canDeleteGroup">
+                               <categoryname>admin.user.group</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.style.canUseDisabledStyle">
+                               <categoryname>admin.style</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.language.canAddServer">
+                               <categoryname>admin.language</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.language.canDeleteServer">
+                               <categoryname>admin.language</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+                       <option name="admin.language.canEditServer">
+                               <categoryname>admin.language</categoryname>
+                               <optiontype>boolean</optiontype>
+                               <defaultvalue>0</defaultvalue>
+                               <admindefaultvalue>1</admindefaultvalue>
+                       </option>
+               </options>
+       </import>
+</data>
diff --git a/wcfsetup/install/files/acp/templates/languageServerAdd.tpl b/wcfsetup/install/files/acp/templates/languageServerAdd.tpl
deleted file mode 100644 (file)
index 1dc70ac..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-{include file='header'}
-
-<div class="mainHeadline">
-       <img src="{@RELATIVE_WCF_DIR}icon/languageServer{@$action|ucfirst}L.png" alt="" />
-       <div class="headlineContainer">
-               <h2>{lang}wcf.acp.languageServer.{$action}{/lang}</h2>
-       </div>
-</div>
-
-{if $errorField}
-       <p class="error">{lang}wcf.global.form.error{/lang}</p>
-{/if}
-
-{if $success|isset}
-       <p class="success">{lang}wcf.acp.languageServer.{$action}.success{/lang}</p>    
-{/if}
-
-<div class="contentHeader">
-       <div class="largeButtons">
-               <ul><li><a href="index.php?page=LanguageServerList{@SID_ARG_2ND}" title="{lang}wcf.acp.menu.link.package.server.view{/lang}"><img src="{@RELATIVE_WCF_DIR}icon/languageServerM.png" alt="" /> <span>{lang}wcf.acp.menu.link.package.server.view{/lang}</span></a></li></ul>
-       </div>
-</div>
-<form method="post" action="index.php?form=LanguageServer{@$action|ucfirst}{if $languageServerID|isset}&amp;languageServerID={@$languageServerID}{/if}">
-       <div class="border content">
-               <div class="container-1">
-       
-                       <fieldset>
-                               <legend>{lang}wcf.acp.languageServer.data{/lang}</legend>
-                               
-                               <div class="formElement{if $errorField == 'server'} formError{/if}" id="serverDiv">
-                                       <div class="formFieldLabel">
-                                               <label for="server">{lang}wcf.acp.languageServer.server{/lang}</label>
-                                       </div>
-                                       <div class="formField">
-                                               <input type="text" class="inputText" name="server" value="{$server}" id="server" />
-                                               {if $errorField == 'server'}
-                                                       <p class="innerError">
-                                                               {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if}
-                                                               {if $errorType == 'notValid'}{lang}wcf.acp.languageServer.server.error.notValid{/lang}{/if}
-                                                       </p>
-                                               {/if}
-                                       </div>
-                                       <div class="formFieldDesc hidden" id="serverHelpMessage">
-                                               <p>{lang}wcf.acp.languageServer.server.description{/lang}</p>
-                                       </div>
-                               </div>
-                               <script type="text/javascript">//<![CDATA[
-                                       inlineHelp.register('server');
-                               //]]></script>
-                               
-                               {if $additionalFields|isset}{@$additionalFields}{/if}
-                       </fieldset>
-               </div>
-       </div>
-       
-       <div class="formSubmit">
-               <input type="submit" accesskey="s" value="{lang}wcf.global.button.submit{/lang}" />
-               <input type="reset" accesskey="r" value="{lang}wcf.global.button.reset{/lang}" />
-               {@SID_INPUT_TAG}
-       </div>
-</form>
-
-{include file='footer'}
diff --git a/wcfsetup/install/files/acp/templates/languageServerList.tpl b/wcfsetup/install/files/acp/templates/languageServerList.tpl
deleted file mode 100644 (file)
index e2ddfa0..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-{include file='header'}
-
-<script type="text/javascript">
-       //<![CDATA[
-       $(function() {
-               new WCF.Action.Delete('wcf\\data\\language\\server\\LanguageServerAction', $('.languageServerRow'));
-               new WCF.Action.Toggle('wcf\\data\\language\\server\\LanguageServerAction', $('.languageServerRow'));
-       });
-       //]]>
-</script>
-
-<div class="mainHeadline">
-       <img src="{@RELATIVE_WCF_DIR}icon/languageServerL.png" alt="" />
-       <div class="headlineContainer">
-               <h2>{lang}wcf.acp.languageServer.view{/lang}</h2>
-       </div>
-</div>
-
-<div class="contentHeader">
-       <div class="largeButtons">
-               <ul><li><a href="index.php?form=LanguageServerAdd{@SID_ARG_2ND}" title="{lang}wcf.acp.languageServer.add{/lang}"><img src="{@RELATIVE_WCF_DIR}icon/languageServerAddM.png" alt="" /> <span>{lang}wcf.acp.languageServer.add{/lang}</span></a></li></ul>
-       </div>
-</div>
-
-{if !$languageServers|count}
-       <div class="border content">
-               <div class="container-1">
-                       <p>{lang}wcf.acp.languageServer.view.noneAvailable{/lang}</p>
-               </div>
-       </div>
-{else}
-       <div class="border titleBarPanel">
-               <div class="containerHead"><h3>{lang}wcf.acp.languageServer.list.available{/lang}</h3></div>
-       </div>
-       <div class="border borderMarginRemove">
-               <table class="tableList">
-                       <thead>
-                               <tr class="tableHead">
-                                       <th class="columnLanguageServerID{if $sortField == 'languageServerID'} active{/if}" colspan="2"><div><a href="index.php?page=LanguageServerList&amp;pageNo={@$pageNo}&amp;sortField=languageServerID&amp;sortOrder={if $sortField == 'languageServerID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{@SID_ARG_2ND}">{lang}wcf.acp.languageServer.languageServerID{/lang}{if $sortField == 'languageServerID'} <img src="{@RELATIVE_WCF_DIR}icon/sort{@$sortOrder}S.png" alt="" />{/if}</a></div></th>
-                                       <th class="columnServer{if $sortField == 'server'} active{/if}"><div><a href="index.php?page=LanguageServerList&amp;pageNo={@$pageNo}&amp;sortField=server&amp;sortOrder={if $sortField == 'server' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{@SID_ARG_2ND}">{lang}wcf.acp.languageServer.server{/lang}{if $sortField == 'server'} <img src="{@RELATIVE_WCF_DIR}icon/sort{@$sortOrder}S.png" alt="" />{/if}</a></div></th>
-                                       
-                                       {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if}
-                               </tr>
-                       </thead>
-                       <tbody>
-                               {foreach from=$languageServers item=languageServer}
-                                       <tr class="languageServerRow {cycle values="container-1,container-2"}">
-                                               <td class="columnIcon">
-                                                       <img src="{@RELATIVE_WCF_DIR}icon/{if !$languageServer->disabled}enabled{else}disabled{/if}S.png" alt="" class="toggleButton" title="{lang}wcf.acp.languageServer.{if !$languageServer->disabled}disable{else}enable{/if}{/lang}" data-objectID="{@$languageServer->languageServerID}" data-disableMessage="{lang}wcf.acp.languageServer.disable{/lang}" data-enableMessage="{lang}wcf.acp.languageServer.enable{/lang}" />
-                                                       <a href="index.php?form=LanguageServerEdit&amp;languageServerID={@$languageServer->languageServerID}{@SID_ARG_2ND}"><img src="{@RELATIVE_WCF_DIR}icon/editS.png" alt="" title="{lang}wcf.acp.languageServer.edit{/lang}" /></a>
-                                                       <img src="{@RELATIVE_WCF_DIR}icon/deleteS.png" alt="" title="{lang}wcf.acp.languageServer.delete{/lang}" class="deleteButton" data-objectID="{@$languageServer->languageServerID}" data-confirmMessage="{lang}wcf.acp.languageServer.delete.sure{/lang}" />
-                                                       
-                                                       {if $additionalButtons[$languageServer->languageServerID]|isset}{@$additionalButtons[$languageServer->languageServerID]}{/if}
-                                               </td>
-                                               <td class="columnID">{@$languageServer->languageServerID}</td>
-                                               <td class="columnText">
-                                                       <a href="index.php?form=LanguageServerEdit&amp;languageServerID={@$languageServer->languageServerID}{@SID_ARG_2ND}">
-                                                               {@$languageServer->serverURL}
-                                                       </a>
-                                               </td>
-                                               {if $additionalColumns[$languageServer->languageServerID]|isset}{@$additionalColumns[$languageServer->languageServerID]}{/if}
-                                       </tr>
-                               {/foreach}
-                       </tbody>
-               </table>
-       </div>
-       <div class="contentHeader">
-               <div class="largeButtons">
-                       <ul><li><a href="index.php?form=LanguageServerAdd{@SID_ARG_2ND}" title="{lang}wcf.acp.languageServer.add{/lang}"><img src="{@RELATIVE_WCF_DIR}icon/languageServerAddM.png" alt="" /> <span>{lang}wcf.acp.languageServer.add{/lang}</span></a></li></ul>
-               </div>
-       </div>
-{/if}
-
-{include file='footer'}
diff --git a/wcfsetup/install/files/lib/acp/form/LanguageServerAddForm.class.php b/wcfsetup/install/files/lib/acp/form/LanguageServerAddForm.class.php
deleted file mode 100644 (file)
index 929cb4a..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-namespace wcf\acp\form;
-use wcf\data\language\server\LanguageServerAction;
-use wcf\data\package\update\server\PackageUpdateServer;
-use wcf\system\WCF;
-use wcf\system\WCFACP;
-use wcf\system\exception\UserInputException;
-use wcf\util\StringUtil;
-
-/**
- * Shows the language server add form.
- *
- * @author     Alexander Ebert
- * @copyright  2001-2011 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 LanguageServerAddForm extends ACPForm {
-       /**
-        * @see wcf\page\AbstractPage::$templateName
-        */
-       public $templateName = 'languageServerAdd';
-       
-       /**
-        * @see wcf\acp\form\ACPForm::$activeMenuItem
-        */
-       public $activeMenuItem = 'wcf.acp.menu.link.language.server.add';
-       
-       /**
-        * @see wcf\page\AbstractPage::$neededPermissions
-        */
-       public $neededPermissions = array('admin.language.canEditServer');
-       
-       /**
-        * server url
-        * @var string
-        */
-       public $server = '';
-       
-       /**
-        * @see wcf\form\Form::readFormParameters()
-        */
-       public function readFormParameters() {
-               parent::readFormParameters();
-               
-               if (isset($_POST['server'])) $this->server = StringUtil::trim($_POST['server']);
-       }
-       
-       /**
-        * @see wcf\form\Form::validate()
-        */
-       public function validate() {
-               parent::validate();
-               
-               if (empty($this->server)) {
-                       throw new UserInputException('server');
-               }
-               
-               if (!PackageUpdateServer::isValidServerURL($this->server)) {
-                       throw new UserInputException('server', 'notValid');
-               }
-       }
-       
-       /**
-        * @see Form::save()
-        */
-       public function save() {
-               parent::save();
-               
-               // save server
-               $languageServerAction = new LanguageServerAction(array(), 'create', array('data' => array(
-                       'serverURL' => $this->server
-               )));
-               $languageServerAction->executeAction();
-               $this->saved();
-               
-               // reset values
-               $this->server = '';
-               
-               // show success message
-               WCF::getTPL()->assign('success', true);
-       }
-       
-       /**
-        * @see Page::assignVariables()
-        */
-       public function assignVariables() {
-               parent::assignVariables();
-               
-               WCF::getTPL()->assign(array(
-                       'server' => $this->server,
-                       'action' => 'add'
-               ));
-       }
-       
-       /**
-        * @see Page::assignVariables()
-        */
-       public function show() {
-               // check master password
-               WCFACP::checkMasterPassword();
-               
-               parent::show();
-       }
-}
diff --git a/wcfsetup/install/files/lib/acp/form/LanguageServerEditForm.class.php b/wcfsetup/install/files/lib/acp/form/LanguageServerEditForm.class.php
deleted file mode 100644 (file)
index 4434d2c..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-namespace wcf\acp\form;
-use wcf\data\language\server\LanguageServer;
-use wcf\data\language\server\LanguageServerAction;
-use wcf\form\AbstractForm;
-use wcf\system\WCF;
-use wcf\system\exception\IllegalLinkException;
-
-/**
- * Shows the language server edit form.
- *
- * @author     Alexander Ebert
- * @copyright  2001-2011 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 LanguageServerEditForm extends LanguageServerAddForm {
-       /**
-        * @see wcf\acp\form\ACPForm::$activeMenuItem
-        */
-       public $activeMenuItem = 'wcf.acp.menu.link.language.server';
-       
-       /**
-        * language server id
-        * @var integer
-        */
-       public $languageServerID = 0;
-       
-       /**
-        * active language server
-        * @var wcf\data\language\server\LanguageServer
-        */
-       public $languageServer = null;
-       
-       /**
-        * @see wcf\page\Page::readParameters()
-        */
-       public function readParameters() {
-               parent::readParameters();
-               
-               if (isset($_REQUEST['languageServerID'])) $this->languageServerID = intval($_REQUEST['languageServerID']);
-               $this->languageServer = new LanguageServer($this->languageServerID);
-               if (!$this->languageServer->languageServerID) {
-                       throw new IllegalLinkException();
-               }
-       }
-       
-       /**
-        * @see wcf\form\Form::save()
-        */
-       public function save() {
-               AbstractForm::save();
-               
-               // save server
-               $languageServerAction = new LanguageServerAction(array($this->languageServerID), 'update', array('data' => array(
-                       'serverURL' => $this->server
-               )));
-               $languageServerAction->executeAction();
-               $this->saved();
-               
-               // show success message
-               WCF::getTPL()->assign('success', true);
-       }
-       
-       /**
-        * @see Page::readData()
-        */
-       public function readData() {
-               parent::readData();
-               
-               if (!count($_POST)) {
-                       $this->server = $this->languageServer->serverURL;
-               }
-       }
-       
-       /**
-        * @see Page::assignVariables()
-        */
-       public function assignVariables() {
-               parent::assignVariables();
-                       
-               WCF::getTPL()->assign(array(
-                       'languageServerID' => $this->languageServerID,
-                       'languageServer' => $this->languageServer,
-                       'action' => 'edit'
-               ));
-       }
-}
diff --git a/wcfsetup/install/files/lib/acp/page/LanguageServerListPage.class.php b/wcfsetup/install/files/lib/acp/page/LanguageServerListPage.class.php
deleted file mode 100644 (file)
index 9642cc8..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-namespace wcf\acp\page;
-use wcf\page\SortablePage;
-use wcf\system\menu\acp\ACPMenu;
-use wcf\system\WCF;
-
-/**
- * Shows information about available language servers.
- * 
- * @author     Alexander Ebert
- * @copyright  2001-2011 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 LanguageServerListPage extends SortablePage {
-       // system
-       public $templateName = 'languageServerList';
-       public $neededPermissions = array('admin.language.canEditServer');
-       public $defaultSortField = 'serverURL';
-       
-       /**
-        * @see wcf\page\MultipleLinkPage::$objectListClassName
-        */     
-       public $objectListClassName = 'wcf\data\language\server\LanguageServerList';
-       
-       /**
-        * @see wcf\page\Page::assignVariables()
-        */
-       public function assignVariables() {
-               parent::assignVariables();
-               
-               WCF::getTPL()->assign(array(
-                       'languageServers' => $this->objectList->getObjects()
-               ));
-       }
-       
-       /**
-        * @see wcf\page\Page::show()
-        */
-       public function show() {
-               // enable menu item
-               ACPMenu::getInstance()->setActiveMenuItem('wcf.acp.menu.link.language.server.list');
-               
-               parent::show();
-       }
-       
-       /**
-        * @see wcf\page\SortablePage::validateSortField()
-        */
-       public function validateSortField() {
-               parent::validateSortField();
-               
-               switch ($this->sortField) {
-                       case 'languageServerID':
-                       case 'serverURL': break;
-                       default: $this->sortField = $this->defaultSortField;
-               }
-       }
-}
index f83fae477365ea3bcdf2d7a923e245f78ffba6dd..67961b8181a08950cdf308f16ad586c0e22eba48 100644 (file)
-<?php\r
-namespace wcf\util;\r
-use wcf\system\WCF;\r
-\r
-/**\r
- * Contains string-related functions.\r
- * \r
- * @author     Marcel Werk\r
- * @copyright  2001-2009 WoltLab GmbH\r
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>\r
- * @package    com.woltlab.wcf\r
- * @subpackage util\r
- * @category   Community Framework\r
- */\r
-class StringUtil {\r
-       const HTML_PATTERN = '~</?[a-z]+[1-6]?\r
-                       (?:\s*[a-z]+\s*=\s*(?:\r
-                       "[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|[^\s>]\r
-                       ))*\s*/?>~ix';\r
-       \r
-       /**\r
-        * Returns a salted hash of the given value.\r
-        *\r
-        * @param       string          $value\r
-        * @param       string          $salt\r
-        * @return      string          $hash\r
-        */\r
-       public static function getSaltedHash($value, $salt) {\r
-               if (!defined('ENCRYPTION_ENABLE_SALTING') || ENCRYPTION_ENABLE_SALTING) {\r
-                       $hash = '';\r
-                       // salt\r
-                       if (!defined('ENCRYPTION_SALT_POSITION') || ENCRYPTION_SALT_POSITION == 'before') {\r
-                               $hash .= $salt;\r
-                       }\r
-                       \r
-                       // value\r
-                       if (!defined('ENCRYPTION_ENCRYPT_BEFORE_SALTING') || ENCRYPTION_ENCRYPT_BEFORE_SALTING) {\r
-                               $hash .= self::encrypt($value);\r
-                       }\r
-                       else {\r
-                               $hash .= $value;\r
-                       }\r
-                       \r
-                       // salt\r
-                       if (defined('ENCRYPTION_SALT_POSITION') && ENCRYPTION_SALT_POSITION == 'after') {\r
-                               $hash .= $salt;\r
-                       }\r
-                       \r
-                       return self::encrypt($hash);\r
-               }\r
-               else {\r
-                       return self::encrypt($value);\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Returns a double salted hash of the given value.\r
-        *\r
-        * @param       string          $value\r
-        * @param       string          $salt\r
-        * @return      string          $hash\r
-        */\r
-       public static function getDoubleSaltedHash($value, $salt) {\r
-               return self::encrypt($salt . self::getSaltedHash($value, $salt));\r
-       }\r
-       \r
-       /**\r
-        * encrypts the given value.\r
-        *\r
-        * @param       string          $value\r
-        * @return      string          $hash\r
-        */\r
-       public static function encrypt($value) {\r
-               if (defined('ENCRYPTION_METHOD')) {\r
-                       switch (ENCRYPTION_METHOD) {\r
-                               case 'sha1': return sha1($value);\r
-                               case 'md5': return md5($value);\r
-                               case 'crc32': return crc32($value);\r
-                               case 'crypt': return crypt($value);\r
-                       }\r
-               }\r
-               return sha1($value);\r
-       }\r
-       \r
-       /**\r
-        * alias to php sha1() function.\r
-        *\r
-        * @param       string          $value\r
-        * @return      string          $hash\r
-        */\r
-       public static function getHash($value) {\r
-               return sha1($value);\r
-       }\r
-\r
-       /**\r
-        * Creates a random hash.\r
-        * \r
-        * @return      string          a random hash\r
-        */\r
-       public static function getRandomID() {\r
-               return self::getHash(microtime() . uniqid(mt_rand(), true));\r
-       }\r
-\r
-       /**\r
-        * Converts dos to unix newlines.\r
-        *\r
-        * @param       string          $string\r
-        * @return      string          $string\r
-        */\r
-       public static function unifyNewlines($string) {\r
-               return preg_replace("%(\r\n)|(\r)%", "\n", $string);\r
-       }\r
-\r
-       /**\r
-        * alias to php trim() function\r
-        * \r
-        * @param       string          $string\r
-        * @return      string          $string\r
-        */\r
-       public static function trim($text) {\r
-               return trim($text);\r
-       }\r
-\r
-       /**\r
-        * Converts html special characters.\r
-        *\r
-        * @param       string          $string\r
-        * @return      string          $string\r
-        */\r
-       public static function encodeHTML($string) {\r
-               if (is_object($string)) \r
-                       $string = $string->__toString();\r
-               \r
-               return @htmlspecialchars($string, ENT_COMPAT, 'UTF-8');\r
-       }\r
-       \r
-       /**\r
-        * Decodes html entities.\r
-        *\r
-        * @param       string          $string\r
-        * @return      string          $string\r
-        */\r
-       public static function decodeHTML($string) {\r
-               if (is_object($string)) \r
-                       $string = $string->__toString();\r
-               \r
-               $string = str_ireplace('&nbsp;', ' ', $string); // convert non-breaking spaces to ascii 32; not ascii 160\r
-               return @html_entity_decode($string, ENT_COMPAT, 'UTF-8');\r
-       }\r
-\r
-       /**\r
-        * Formats a numeric.\r
-        *\r
-        * @param       numeric         $numeric\r
-        * @return      string          \r
-        */\r
-       public static function formatNumeric($numeric) {\r
-               if (is_int($numeric)) \r
-                       return self::formatInteger($numeric);\r
-                       \r
-               else if (is_float($numeric))\r
-                       return self::formatDouble($numeric);\r
-                       \r
-               else {\r
-                       if (floatval($numeric) - (float) intval($numeric))\r
-                               return self::formatDouble($numeric);\r
-                       else \r
-                               return self::formatInteger(intval($numeric));\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Formats an integer.\r
-        * \r
-        * @param       integer         $integer\r
-        * @return      string\r
-        */\r
-       public static function formatInteger($integer) {\r
-               $integer = self::addThousandsSeparator($integer);\r
-               \r
-               return $integer;\r
-       }\r
-       \r
-       /**\r
-        * Formats a double.\r
-        * \r
-        * @param       double          $double\r
-        * @param       integer         $minDecimals\r
-        * @return      string\r
-        */\r
-       public static function formatDouble($double, $minDecimals = 0) {\r
-               // consider as integer, if no decimal places found\r
-               if (!$minDecimals && preg_match('~^(-?\d+)(?:\.(?:0*|00[0-4]\d*))?$~', $double, $match)) {\r
-                       return self::formatInteger($match[1]);\r
-               }\r
-       \r
-               // round\r
-               $double = round($double, ($minDecimals > 2 ? $minDecimals : 2));\r
-               \r
-               // remove last 0\r
-               if ($minDecimals < 2 && substr($double, -1) == '0') $double = substr($double, 0, -1);\r
-               \r
-               // replace decimal point\r
-               $double = str_replace('.', WCF::getLanguage()->get('wcf.global.decimalPoint'), $double);\r
-               \r
-               // add thousands separator\r
-               $double = self::addThousandsSeparator($double);\r
-               \r
-               return $double;\r
-       }\r
-       \r
-       /**\r
-        * Adds thousands separators to a given number.\r
-        * \r
-        * @param       mixed           $number\r
-        * @return      string\r
-        */\r
-       public static function addThousandsSeparator($number) {\r
-               if ($number >= 1000 || $number <= -1000) {\r
-                       $number = preg_replace('~(?<=\d)(?=(\d{3})+(?!\d))~', WCF::getLanguage()->get('wcf.global.thousandsSeparator'), $number);\r
-               }\r
-               \r
-               return $number;\r
-       }\r
-       \r
-       /**\r
-        * Sorts an array of strings and maintain index association.\r
-        * \r
-        * @param       array           $strings \r
-        * @return      boolean\r
-        */\r
-       public static function sort(&$strings) {\r
-               return asort($strings, SORT_LOCALE_STRING);\r
-       }\r
-               \r
-       /**\r
-        * alias to php strlen() function.\r
-        */\r
-       public static function length($string) {\r
-               return mb_strlen($string);\r
-       }\r
-       \r
-       /**\r
-        * alias to php strpos() function.\r
-        */\r
-       public static function indexOf($hayStack, $needle, $offset = 0) {\r
-               return mb_strpos($hayStack, $needle, $offset);\r
-       }\r
-       \r
-       /**\r
-        * alias to php stripos() function.\r
-        */\r
-       public static function indexOfIgnoreCase($hayStack, $needle, $offset = 0) {\r
-               return mb_strpos(self::toLowerCase($hayStack), self::toLowerCase($needle), $offset);\r
-       }\r
-       \r
-       /**\r
-        * alias to php strrpos() function.\r
-        */\r
-       public static function lastIndexOf($hayStack, $needle) {\r
-               return mb_strrpos($hayStack, $needle);\r
-       }\r
-       \r
-       /**\r
-        * alias to php substr() function.\r
-        */\r
-       public static function substring($string, $start, $length = null) {\r
-               if ($length !== null) return mb_substr($string, $start, $length);\r
-               return mb_substr($string, $start);\r
-       }\r
-       \r
-       /**\r
-        * alias to php strtolower() function.\r
-        */\r
-       public static function toLowerCase($string) {\r
-               return mb_strtolower($string);\r
-       }\r
-       \r
-       /**\r
-        * alias to php strtoupper() function.\r
-        */\r
-       public static function toUpperCase($string) {\r
-               return mb_strtoupper($string);\r
-       }\r
-       \r
-       /**\r
-        * alias to php substr_count() function.\r
-        */\r
-       public static function countSubstring($hayStack, $needle) {\r
-               return mb_substr_count($hayStack, $needle);\r
-       }\r
-       \r
-       /**\r
-        * alias to php ucfirst() function.\r
-        */\r
-       public static function firstCharToUpperCase($string) {\r
-               return self::toUpperCase(self::substring($string, 0, 1)).self::substring($string, 1);\r
-       }\r
-       \r
-       /**\r
-        * alias to php lcfirst() function.\r
-        */\r
-       public static function firstCharToLowerCase($string) {\r
-               return self::toLowerCase(self::substring($string, 0, 1)).self::substring($string, 1);\r
-       }\r
-       \r
-       /**\r
-        * alias to php ucwords() function.\r
-        */\r
-       public static function wordsToUpperCase($string) {\r
-               return mb_convert_case($string, MB_CASE_TITLE);\r
-       }\r
-       \r
-       /**\r
-        * alias to php str_replace() function.\r
-        */\r
-       public static function replace($search, $replace, $subject, &$count = null) {\r
-               return str_replace($search, $replace, $subject, $count);\r
-       }\r
-       \r
-       /**\r
-        * alias to php str_ireplace() function.\r
-        */\r
-       public static function replaceIgnoreCase($search, $replace, $subject, &$count = 0) {\r
-               $startPos = self::indexOf(self::toLowerCase($subject), self::toLowerCase($search));\r
-               if ($startPos === false) return $subject;\r
-               else {\r
-                       $endPos = $startPos + self::length($search);\r
-                       $count++;\r
-                       return self::substring($subject, 0, $startPos) . $replace . self::replaceIgnoreCase($search, $replace, self::substring($subject, $endPos), $count);\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Unescapes escaped characters in a string.\r
-        * \r
-        * @param       string          $string\r
-        * @param       string          $chars\r
-        * @return      string\r
-        */\r
-       public static function unescape($string, $chars = '"') {\r
-               for ($i = 0, $j = strlen($chars); $i < $j; $i++) {\r
-                       $string = self::replace('\\'.$chars[$i], $chars[$i], $string);\r
-               }\r
-               \r
-               return $string;\r
-       }\r
-       \r
-       /**\r
-        * Takes a numeric HTML entity value and returns the appropriate UTF-8 bytes.\r
-        * \r
-        * @param       integer         $dec            html entity value\r
-        * @return      string                          utf-8 bytes\r
-        */\r
-       public static function getCharacter($dec) {\r
-               if ($dec < 128) {\r
-                       $utf = chr($dec);\r
-               }\r
-               else if ($dec < 2048) {\r
-                       $utf = chr(192 + (($dec - ($dec % 64)) / 64));\r
-                       $utf .= chr(128 + ($dec % 64));\r
-               }\r
-               else {\r
-                       $utf = chr(224 + (($dec - ($dec % 4096)) / 4096));\r
-                       $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));\r
-                       $utf .= chr(128 + ($dec % 64));\r
-               }\r
-               return $utf;\r
-       }\r
-       \r
-       /**\r
-        * Converts UTF-8 to Unicode\r
-        * @see         http://www1.tip.nl/~t876506/utf8tbl.html\r
-        *\r
-        * @param       string          $c\r
-        * @return      integer         unicode value of $c\r
-        */\r
-       public static function getCharValue($c) {\r
-               $ud = 0;\r
-               if (ord($c{0}) >= 0 && ord($c{0}) <= 127) \r
-                       $ud = ord($c{0});\r
-               if (ord($c{0}) >= 192 && ord($c{0}) <= 223) \r
-                       $ud = (ord($c{0}) - 192) * 64 + (ord($c{1}) - 128);\r
-               if (ord($c{0}) >= 224 && ord($c{0}) <= 239) \r
-                       $ud = (ord($c{0}) - 224) * 4096 + (ord($c{1}) - 128) * 64 + (ord($c{2}) - 128);\r
-               if (ord($c{0}) >= 240 && ord($c{0}) <= 247) \r
-                       $ud = (ord($c{0}) - 240) * 262144 + (ord($c{1}) - 128) * 4096 + (ord($c{2}) - 128) * 64 + (ord($c{3}) - 128);\r
-               if (ord($c{0}) >= 248 && ord($c{0}) <= 251) \r
-                       $ud = (ord($c{0}) - 248) * 16777216 + (ord($c{1}) - 128) * 262144 + (ord($c{2}) - 128) * 4096 + (ord($c{3}) - 128) * 64 + (ord($c{4}) - 128);\r
-               if (ord($c{0}) >= 252 && ord($c{0}) <= 253) \r
-                       $ud = (ord($c{0}) - 252) * 1073741824 + (ord($c{1}) - 128) * 16777216 + (ord($c{2}) - 128) * 262144 + (ord($c{3}) - 128) * 4096 + (ord($c{4}) - 128) * 64 + (ord($c{5}) - 128);\r
-               if (ord($c{0}) >= 254 && ord($c{0}) <= 255) \r
-                       $ud = false; // error\r
-               return $ud;\r
-       }\r
-       \r
-       /**\r
-        * Returns html entities of all characters in the given string.\r
-        * \r
-        * @param       string          $string\r
-        * @return      string\r
-        */\r
-       public static function encodeAllChars($string) {\r
-               $result = '';\r
-               for ($i = 0, $j = StringUtil::length($string); $i < $j; $i++) {\r
-                       $char = StringUtil::substring($string, $i, 1);\r
-                       $result .= '&#'.StringUtil::getCharValue($char).';';\r
-               }\r
-               \r
-               return $result;\r
-       }\r
-       \r
-       /**\r
-        * Returns true, if the given string contains only ASCII characters.\r
-        * \r
-        * @param       string          $string\r
-        * @return      boolean\r
-        */\r
-       public static function isASCII($string) {\r
-               return preg_match('/^[\x00-\x7F]*$/', $string);\r
-       }\r
-       \r
-       /**\r
-        * Returns true, if the given string is utf-8 encoded.\r
-        * @see         http://www.w3.org/International/questions/qa-forms-utf-8\r
-        * \r
-        * @param       string          $string\r
-        * @return      boolean\r
-        */\r
-       public static function isUTF8($string) {\r
-               /*return preg_match('/^(\r
-                               [\x09\x0A\x0D\x20-\x7E]*                # ASCII\r
-                       |       [\xC2-\xDF][\x80-\xBF]                  # non-overlong 2-byte\r
-                       |       \xE0[\xA0-\xBF][\x80-\xBF]              # excluding overlongs\r
-                       |       [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}       # straight 3-byte\r
-                       |       \xED[\x80-\x9F][\x80-\xBF]              # excluding surrogates\r
-                       |       \xF0[\x90-\xBF][\x80-\xBF]{2}           # planes 1-3\r
-                       |       [\xF1-\xF3][\x80-\xBF]{3}               # planes 4-15\r
-                       |       \xF4[\x80-\x8F][\x80-\xBF]{2}           # plane 16\r
-                       )*$/x', $string);\r
-               */      \r
-               return preg_match('/(\r
-                               [\xC2-\xDF][\x80-\xBF]                  # non-overlong 2-byte\r
-                       |       \xE0[\xA0-\xBF][\x80-\xBF]              # excluding overlongs\r
-                       |       [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}       # straight 3-byte\r
-                       |       \xED[\x80-\x9F][\x80-\xBF]              # excluding surrogates\r
-                       |       \xF0[\x90-\xBF][\x80-\xBF]{2}           # planes 1-3\r
-                       |       [\xF1-\xF3][\x80-\xBF]{3}               # planes 4-15\r
-                       |       \xF4[\x80-\x8F][\x80-\xBF]{2}           # plane 16\r
-                       )/x', $string);\r
-       }\r
-       \r
-       /**\r
-        * Extracts the class name from a standardised class path.\r
-        * \r
-        * @param       string          $classPath\r
-        * @return      string          class name\r
-        */\r
-       public static function getClassName($classPath) {\r
-               return preg_replace('~(?:.*/)?([^/]+).class.php~i', '\\1', $classPath);\r
-       }\r
-       \r
-       /**\r
-        * Escapes the closing cdata tag.\r
-        * \r
-        * @param       string          $string\r
-        * @return      string\r
-        */\r
-       public static function escapeCDATA($string) {\r
-               return str_replace(']]>', ']]]]><![CDATA[>', $string);\r
-       }\r
-       \r
-       /**\r
-        * Converts a string to requested character encoding.\r
-        * @see         mb_convert_encoding()\r
-        * \r
-        * @param       string          $inCharset\r
-        * @param       string          $outCharset\r
-        * @param       string          $string\r
-        * @return      string          converted string\r
-        */\r
-       public static function convertEncoding($inCharset, $outCharset, $string) {\r
-               if ($inCharset == 'ISO-8859-1' && $outCharset == 'UTF-8') return utf8_encode($string);\r
-               if ($inCharset == 'UTF-8' && $outCharset == 'ISO-8859-1') return utf8_decode($string);\r
-               \r
-               return mb_convert_encoding($string, $outCharset, $inCharset);\r
-       }\r
-       \r
-       /**\r
-        * Strips HTML tags from a string.\r
-        * \r
-        * @param       string          $string\r
-        * @return      string\r
-        */\r
-       public static function stripHTML($string) {\r
-               return preg_replace(self::HTML_PATTERN, '', $string);\r
-       }\r
-       \r
-       /**\r
-        * Returns false, if the given word is forbidden by given word filter.\r
-        * \r
-        * @param       string          $word\r
-        * @param       string          $filter\r
-        * @return      boolean\r
-        */\r
-       public static function executeWordFilter($word, $filter) {\r
-               $word = self::toLowerCase($word);\r
-               \r
-               if ($filter != '') {\r
-                       $forbiddenNames = explode("\n", self::toLowerCase(self::unifyNewlines($filter)));\r
-                       foreach ($forbiddenNames as $forbiddenName) {\r
-                               if (self::indexOf($forbiddenName, '*') !== false) {\r
-                                       $forbiddenName = self::replace('\*', '.*', preg_quote($forbiddenName, '/'));\r
-                                       if (preg_match('/^'.$forbiddenName.'$/s', $word)) {\r
-                                               return false;\r
-                                       }\r
-                               }\r
-                               else {\r
-                                       if ($word == $forbiddenName) {\r
-                                               return false;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               \r
-               return true;\r
-       }\r
-       \r
-       /**\r
-        * Splits given string into smaller chunks.\r
-        * \r
-        * @param       string          $string\r
-        * @param       integer         $length\r
-        * @param       string          $break\r
-        * @return      string\r
-        */\r
-       public static function splitIntoChunks($string, $length = 75, $break = "\r\n") {\r
-               return mb_ereg_replace('.{'.$length.'}', "\\0".$break, $string);\r
-       }\r
-       \r
-       /**\r
-        * Generates a random user password with the given character length.\r
-        *\r
-        * @param       integer         $length\r
-        * @return      string          new password\r
-        */\r
-       public static function getRandomPassword($length = 8) {\r
-               $availableCharacters = array(\r
-                       0 => 'abcdefghijklmnopqrstuvwxyz',\r
-                       1 => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\r
-                       2 => '0123456789',\r
-                       3 => '+#-.,;:?!'\r
-               );\r
-               \r
-               $password = '';\r
-               $type = 0;\r
-               for ($i = 0; $i < $length; $i++) {\r
-                       $type = ($i % 4 == 0) ? 0 : ($type + 1);\r
-                       $password .= substr($availableCharacters[$type], MathUtil::getRandomValue(0, strlen($availableCharacters[$type]) - 1), 1);\r
-               }\r
-               \r
-               return str_shuffle($password);\r
-       }\r
+<?php
+namespace wcf\util;
+use wcf\system\WCF;
+
+/**
+ * Contains string-related functions.
+ * 
+ * @author     Marcel Werk
+ * @copyright  2001-2009 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    com.woltlab.wcf
+ * @subpackage util
+ * @category   Community Framework
+ */
+class StringUtil {
+       const HTML_PATTERN = '~</?[a-z]+[1-6]?
+                       (?:\s*[a-z]+\s*=\s*(?:
+                       "[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|[^\s>]
+                       ))*\s*/?>~ix';
+       
+       /**
+        * Returns a salted hash of the given value.
+        *
+        * @param       string          $value
+        * @param       string          $salt
+        * @return      string          $hash
+        */
+       public static function getSaltedHash($value, $salt) {
+               if (!defined('ENCRYPTION_ENABLE_SALTING') || ENCRYPTION_ENABLE_SALTING) {
+                       $hash = '';
+                       // salt
+                       if (!defined('ENCRYPTION_SALT_POSITION') || ENCRYPTION_SALT_POSITION == 'before') {
+                               $hash .= $salt;
+                       }
+                       
+                       // value
+                       if (!defined('ENCRYPTION_ENCRYPT_BEFORE_SALTING') || ENCRYPTION_ENCRYPT_BEFORE_SALTING) {
+                               $hash .= self::encrypt($value);
+                       }
+                       else {
+                               $hash .= $value;
+                       }
+                       
+                       // salt
+                       if (defined('ENCRYPTION_SALT_POSITION') && ENCRYPTION_SALT_POSITION == 'after') {
+                               $hash .= $salt;
+                       }
+                       
+                       return self::encrypt($hash);
+               }
+               else {
+                       return self::encrypt($value);
+               }
+       }
+       
+       /**
+        * Returns a double salted hash of the given value.
+        *
+        * @param       string          $value
+        * @param       string          $salt
+        * @return      string          $hash
+        */
+       public static function getDoubleSaltedHash($value, $salt) {
+               return self::encrypt($salt . self::getSaltedHash($value, $salt));
+       }
+       
+       /**
+        * encrypts the given value.
+        *
+        * @param       string          $value
+        * @return      string          $hash
+        */
+       public static function encrypt($value) {
+               if (defined('ENCRYPTION_METHOD')) {
+                       switch (ENCRYPTION_METHOD) {
+                               case 'sha1': return sha1($value);
+                               case 'md5': return md5($value);
+                               case 'crc32': return crc32($value);
+                               case 'crypt': return crypt($value);
+                       }
+               }
+               return sha1($value);
+       }
+       
+       /**
+        * alias to php sha1() function.
+        *
+        * @param       string          $value
+        * @return      string          $hash
+        */
+       public static function getHash($value) {
+               return sha1($value);
+       }
+
+       /**
+        * Creates a random hash.
+        * 
+        * @return      string          a random hash
+        */
+       public static function getRandomID() {
+               return self::getHash(microtime() . uniqid(mt_rand(), true));
+       }
+
+       /**
+        * Converts dos to unix newlines.
+        *
+        * @param       string          $string
+        * @return      string          $string
+        */
+       public static function unifyNewlines($string) {
+               return preg_replace("%(\r\n)|(\r)%", "\n", $string);
+       }
+
+       /**
+        * alias to php trim() function
+        * 
+        * @param       string          $string
+        * @return      string          $string
+        */
+       public static function trim($text) {
+               return trim($text);
+       }
+
+       /**
+        * Converts html special characters.
+        *
+        * @param       string          $string
+        * @return      string          $string
+        */
+       public static function encodeHTML($string) {
+               if (is_object($string)) 
+                       $string = $string->__toString();
+               
+               return @htmlspecialchars($string, ENT_COMPAT, 'UTF-8');
+       }
+       
+       /**
+        * Decodes html entities.
+        *
+        * @param       string          $string
+        * @return      string          $string
+        */
+       public static function decodeHTML($string) {
+               if (is_object($string)) 
+                       $string = $string->__toString();
+               
+               $string = str_ireplace('&nbsp;', ' ', $string); // convert non-breaking spaces to ascii 32; not ascii 160
+               return @html_entity_decode($string, ENT_COMPAT, 'UTF-8');
+       }
+
+       /**
+        * Formats a numeric.
+        *
+        * @param       numeric         $numeric
+        * @return      string          
+        */
+       public static function formatNumeric($numeric) {
+               if (is_int($numeric)) 
+                       return self::formatInteger($numeric);
+                       
+               else if (is_float($numeric))
+                       return self::formatDouble($numeric);
+                       
+               else {
+                       if (floatval($numeric) - (float) intval($numeric))
+                               return self::formatDouble($numeric);
+                       else 
+                               return self::formatInteger(intval($numeric));
+               }
+       }
+       
+       /**
+        * Formats an integer.
+        * 
+        * @param       integer         $integer
+        * @return      string
+        */
+       public static function formatInteger($integer) {
+               $integer = self::addThousandsSeparator($integer);
+               
+               return $integer;
+       }
+       
+       /**
+        * Formats a double.
+        * 
+        * @param       double          $double
+        * @param       integer         $minDecimals
+        * @return      string
+        */
+       public static function formatDouble($double, $minDecimals = 0) {
+               // consider as integer, if no decimal places found
+               if (!$minDecimals && preg_match('~^(-?\d+)(?:\.(?:0*|00[0-4]\d*))?$~', $double, $match)) {
+                       return self::formatInteger($match[1]);
+               }
+       
+               // round
+               $double = round($double, ($minDecimals > 2 ? $minDecimals : 2));
+               
+               // remove last 0
+               if ($minDecimals < 2 && substr($double, -1) == '0') $double = substr($double, 0, -1);
+               
+               // replace decimal point
+               $double = str_replace('.', WCF::getLanguage()->get('wcf.global.decimalPoint'), $double);
+               
+               // add thousands separator
+               $double = self::addThousandsSeparator($double);
+               
+               return $double;
+       }
+       
+       /**
+        * Adds thousands separators to a given number.
+        * 
+        * @param       mixed           $number
+        * @return      string
+        */
+       public static function addThousandsSeparator($number) {
+               if ($number >= 1000 || $number <= -1000) {
+                       $number = preg_replace('~(?<=\d)(?=(\d{3})+(?!\d))~', WCF::getLanguage()->get('wcf.global.thousandsSeparator'), $number);
+               }
+               
+               return $number;
+       }
+       
+       /**
+        * Sorts an array of strings and maintain index association.
+        * 
+        * @param       array           $strings 
+        * @return      boolean
+        */
+       public static function sort(&$strings) {
+               return asort($strings, SORT_LOCALE_STRING);
+       }
+               
+       /**
+        * alias to php strlen() function.
+        */
+       public static function length($string) {
+               return mb_strlen($string);
+       }
+       
+       /**
+        * alias to php strpos() function.
+        */
+       public static function indexOf($hayStack, $needle, $offset = 0) {
+               return mb_strpos($hayStack, $needle, $offset);
+       }
+       
+       /**
+        * alias to php stripos() function.
+        */
+       public static function indexOfIgnoreCase($hayStack, $needle, $offset = 0) {
+               return mb_strpos(self::toLowerCase($hayStack), self::toLowerCase($needle), $offset);
+       }
+       
+       /**
+        * alias to php strrpos() function.
+        */
+       public static function lastIndexOf($hayStack, $needle) {
+               return mb_strrpos($hayStack, $needle);
+       }
+       
+       /**
+        * alias to php substr() function.
+        */
+       public static function substring($string, $start, $length = null) {
+               if ($length !== null) return mb_substr($string, $start, $length);
+               return mb_substr($string, $start);
+       }
+       
+       /**
+        * alias to php strtolower() function.
+        */
+       public static function toLowerCase($string) {
+               return mb_strtolower($string);
+       }
+       
+       /**
+        * alias to php strtoupper() function.
+        */
+       public static function toUpperCase($string) {
+               return mb_strtoupper($string);
+       }
+       
+       /**
+        * alias to php substr_count() function.
+        */
+       public static function countSubstring($hayStack, $needle) {
+               return mb_substr_count($hayStack, $needle);
+       }
+       
+       /**
+        * alias to php ucfirst() function.
+        */
+       public static function firstCharToUpperCase($string) {
+               return self::toUpperCase(self::substring($string, 0, 1)).self::substring($string, 1);
+       }
+       
+       /**
+        * alias to php lcfirst() function.
+        */
+       public static function firstCharToLowerCase($string) {
+               return self::toLowerCase(self::substring($string, 0, 1)).self::substring($string, 1);
+       }
+       
+       /**
+        * alias to php ucwords() function.
+        */
+       public static function wordsToUpperCase($string) {
+               return mb_convert_case($string, MB_CASE_TITLE);
+       }
+       
+       /**
+        * alias to php str_replace() function.
+        */
+       public static function replace($search, $replace, $subject, &$count = null) {
+               return str_replace($search, $replace, $subject, $count);
+       }
+       
+       /**
+        * alias to php str_ireplace() function.
+        */
+       public static function replaceIgnoreCase($search, $replace, $subject, &$count = 0) {
+               $startPos = self::indexOf(self::toLowerCase($subject), self::toLowerCase($search));
+               if ($startPos === false) return $subject;
+               else {
+                       $endPos = $startPos + self::length($search);
+                       $count++;
+                       return self::substring($subject, 0, $startPos) . $replace . self::replaceIgnoreCase($search, $replace, self::substring($subject, $endPos), $count);
+               }
+       }
+       
+       /**
+        * Unescapes escaped characters in a string.
+        * 
+        * @param       string          $string
+        * @param       string          $chars
+        * @return      string
+        */
+       public static function unescape($string, $chars = '"') {
+               for ($i = 0, $j = strlen($chars); $i < $j; $i++) {
+                       $string = self::replace('\\'.$chars[$i], $chars[$i], $string);
+               }
+               
+               return $string;
+       }
+       
+       /**
+        * Takes a numeric HTML entity value and returns the appropriate UTF-8 bytes.
+        * 
+        * @param       integer         $dec            html entity value
+        * @return      string                          utf-8 bytes
+        */
+       public static function getCharacter($dec) {
+               if ($dec < 128) {
+                       $utf = chr($dec);
+               }
+               else if ($dec < 2048) {
+                       $utf = chr(192 + (($dec - ($dec % 64)) / 64));
+                       $utf .= chr(128 + ($dec % 64));
+               }
+               else {
+                       $utf = chr(224 + (($dec - ($dec % 4096)) / 4096));
+                       $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
+                       $utf .= chr(128 + ($dec % 64));
+               }
+               return $utf;
+       }
+       
+       /**
+        * Converts UTF-8 to Unicode
+        * @see         http://www1.tip.nl/~t876506/utf8tbl.html
+        *
+        * @param       string          $c
+        * @return      integer         unicode value of $c
+        */
+       public static function getCharValue($c) {
+               $ud = 0;
+               if (ord($c{0}) >= 0 && ord($c{0}) <= 127) 
+                       $ud = ord($c{0});
+               if (ord($c{0}) >= 192 && ord($c{0}) <= 223) 
+                       $ud = (ord($c{0}) - 192) * 64 + (ord($c{1}) - 128);
+               if (ord($c{0}) >= 224 && ord($c{0}) <= 239) 
+                       $ud = (ord($c{0}) - 224) * 4096 + (ord($c{1}) - 128) * 64 + (ord($c{2}) - 128);
+               if (ord($c{0}) >= 240 && ord($c{0}) <= 247) 
+                       $ud = (ord($c{0}) - 240) * 262144 + (ord($c{1}) - 128) * 4096 + (ord($c{2}) - 128) * 64 + (ord($c{3}) - 128);
+               if (ord($c{0}) >= 248 && ord($c{0}) <= 251) 
+                       $ud = (ord($c{0}) - 248) * 16777216 + (ord($c{1}) - 128) * 262144 + (ord($c{2}) - 128) * 4096 + (ord($c{3}) - 128) * 64 + (ord($c{4}) - 128);
+               if (ord($c{0}) >= 252 && ord($c{0}) <= 253) 
+                       $ud = (ord($c{0}) - 252) * 1073741824 + (ord($c{1}) - 128) * 16777216 + (ord($c{2}) - 128) * 262144 + (ord($c{3}) - 128) * 4096 + (ord($c{4}) - 128) * 64 + (ord($c{5}) - 128);
+               if (ord($c{0}) >= 254 && ord($c{0}) <= 255) 
+                       $ud = false; // error
+               return $ud;
+       }
+       
+       /**
+        * Returns html entities of all characters in the given string.
+        * 
+        * @param       string          $string
+        * @return      string
+        */
+       public static function encodeAllChars($string) {
+               $result = '';
+               for ($i = 0, $j = StringUtil::length($string); $i < $j; $i++) {
+                       $char = StringUtil::substring($string, $i, 1);
+                       $result .= '&#'.StringUtil::getCharValue($char).';';
+               }
+               
+               return $result;
+       }
+       
+       /**
+        * Returns true, if the given string contains only ASCII characters.
+        * 
+        * @param       string          $string
+        * @return      boolean
+        */
+       public static function isASCII($string) {
+               return preg_match('/^[\x00-\x7F]*$/', $string);
+       }
+       
+       /**
+        * Returns true, if the given string is utf-8 encoded.
+        * @see         http://www.w3.org/International/questions/qa-forms-utf-8
+        * 
+        * @param       string          $string
+        * @return      boolean
+        */
+       public static function isUTF8($string) {
+               /*return preg_match('/^(
+                               [\x09\x0A\x0D\x20-\x7E]*                # ASCII
+                       |       [\xC2-\xDF][\x80-\xBF]                  # non-overlong 2-byte
+                       |       \xE0[\xA0-\xBF][\x80-\xBF]              # excluding overlongs
+                       |       [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}       # straight 3-byte
+                       |       \xED[\x80-\x9F][\x80-\xBF]              # excluding surrogates
+                       |       \xF0[\x90-\xBF][\x80-\xBF]{2}           # planes 1-3
+                       |       [\xF1-\xF3][\x80-\xBF]{3}               # planes 4-15
+                       |       \xF4[\x80-\x8F][\x80-\xBF]{2}           # plane 16
+                       )*$/x', $string);
+               */      
+               return preg_match('/(
+                               [\xC2-\xDF][\x80-\xBF]                  # non-overlong 2-byte
+                       |       \xE0[\xA0-\xBF][\x80-\xBF]              # excluding overlongs
+                       |       [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}       # straight 3-byte
+                       |       \xED[\x80-\x9F][\x80-\xBF]              # excluding surrogates
+                       |       \xF0[\x90-\xBF][\x80-\xBF]{2}           # planes 1-3
+                       |       [\xF1-\xF3][\x80-\xBF]{3}               # planes 4-15
+                       |       \xF4[\x80-\x8F][\x80-\xBF]{2}           # plane 16
+                       )/x', $string);
+       }
+       
+       /**
+        * Extracts the class name from a standardised class path.
+        * 
+        * @param       string          $classPath
+        * @return      string          class name
+        */
+       public static function getClassName($classPath) {
+               return preg_replace('~(?:.*/)?([^/]+).class.php~i', '\\1', $classPath);
+       }
+       
+       /**
+        * Escapes the closing cdata tag.
+        * 
+        * @param       string          $string
+        * @return      string
+        */
+       public static function escapeCDATA($string) {
+               return str_replace(']]>', ']]]]><![CDATA[>', $string);
+       }
+       
+       /**
+        * Converts a string to requested character encoding.
+        * @see         mb_convert_encoding()
+        * 
+        * @param       string          $inCharset
+        * @param       string          $outCharset
+        * @param       string          $string
+        * @return      string          converted string
+        */
+       public static function convertEncoding($inCharset, $outCharset, $string) {
+               if ($inCharset == 'ISO-8859-1' && $outCharset == 'UTF-8') return utf8_encode($string);
+               if ($inCharset == 'UTF-8' && $outCharset == 'ISO-8859-1') return utf8_decode($string);
+               
+               return mb_convert_encoding($string, $outCharset, $inCharset);
+       }
+       
+       /**
+        * Strips HTML tags from a string.
+        * 
+        * @param       string          $string
+        * @return      string
+        */
+       public static function stripHTML($string) {
+               return preg_replace(self::HTML_PATTERN, '', $string);
+       }
+       
+       /**
+        * Returns false, if the given word is forbidden by given word filter.
+        * 
+        * @param       string          $word
+        * @param       string          $filter
+        * @return      boolean
+        */
+       public static function executeWordFilter($word, $filter) {
+               $word = self::toLowerCase($word);
+               
+               if ($filter != '') {
+                       $forbiddenNames = explode("\n", self::toLowerCase(self::unifyNewlines($filter)));
+                       foreach ($forbiddenNames as $forbiddenName) {
+                               if (self::indexOf($forbiddenName, '*') !== false) {
+                                       $forbiddenName = self::replace('\*', '.*', preg_quote($forbiddenName, '/'));
+                                       if (preg_match('/^'.$forbiddenName.'$/s', $word)) {
+                                               return false;
+                                       }
+                               }
+                               else {
+                                       if ($word == $forbiddenName) {
+                                               return false;
+                                       }
+                               }
+                       }
+               }
+               
+               return true;
+       }
+       
+       /**
+        * Splits given string into smaller chunks.
+        * 
+        * @param       string          $string
+        * @param       integer         $length
+        * @param       string          $break
+        * @return      string
+        */
+       public static function splitIntoChunks($string, $length = 75, $break = "\r\n") {
+               return mb_ereg_replace('.{'.$length.'}', "\\0".$break, $string);
+       }
+       
+       /**
+        * Generates a random user password with the given character length.
+        *
+        * @param       integer         $length
+        * @return      string          new password
+        */
+       public static function getRandomPassword($length = 8) {
+               $availableCharacters = array(
+                       0 => 'abcdefghijklmnopqrstuvwxyz',
+                       1 => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+                       2 => '0123456789',
+                       3 => '+#-.,;:?!'
+               );
+               
+               $password = '';
+               $type = 0;
+               for ($i = 0; $i < $length; $i++) {
+                       $type = ($i % 4 == 0) ? 0 : ($type + 1);
+                       $password .= substr($availableCharacters[$type], MathUtil::getRandomValue(0, strlen($availableCharacters[$type]) - 1), 1);
+               }
+               
+               return str_shuffle($password);
+       }
 }