diff --git a/controllers/CharactersController.inc b/controllers/CharactersController.inc index cb17db34..b179430b 100644 --- a/controllers/CharactersController.inc +++ b/controllers/CharactersController.inc @@ -69,40 +69,46 @@ // Get Seminary $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); - // Set default properties to show - $properties = array( - 'username', - 'xps' - ); - - // Select proprties to show - if($this->request->getRequestMethod() == 'POST') - { - $properties = $this->request->getPostParam('properties'); - if(!is_array($properties)) { - $properties = array(); - } - } + // Get Seminarycharacterfields + $characterfields = $this->Seminarycharacterfields->getFieldsForSeminary($seminary['id']); // Get registered Characters $characters = $this->Characters->getCharactersForSeminary($seminary['id']); foreach($characters as &$character) { $character['xplevel'] = $this->Characters->getXPLevelOfCharacters($character['id']); - $character['characterroles'] = array_map(function($r) { return $r['name']; }, $this->Characterroles->getCharacterrolesForCharacterById($character['id'])); $character['user'] = $this->Users->getUserById($character['user_id']); - $character['characterfields'] = $this->Seminarycharacterfields->getFieldsForCharacter($character['id']); + $character['characterroles'] = array_map(function($r) { return $r['name']; }, $this->Characterroles->getCharacterrolesForCharacterById($character['id'])); + $character['characterfields'] = array(); + foreach($this->Seminarycharacterfields->getFieldsForCharacter($character['id']) as &$value) { + $character['characterfields'][$value['url']] = $value; + } } - // Get Seminarycharacterfields - $characterfields = $this->Seminarycharacterfields->getFieldsForSeminary($seminary['id']); + // Sort Characters + global $sortorder; + $sortorder = ($this->request->getRequestMethod() == 'GET') ? $this->request->getGetParam('sortorder') : null; + $sortorder = (!is_null($sortorder)) ? $sortorder : 'xps'; + $sortMethod = 'sortCharactersBy'.ucfirst(strtolower($sortorder)); + if(method_exists($this, $sortMethod)) { + usort($characters, array($this, $sortMethod)); + } + elseif(in_array($sortorder, array_map(function($f) { return $f['title']; }, $characterfields))) { + usort($characters, function($a, $b) { + global $sortorder; + return $this->sortCharactersByField($a, $b, $sortorder); + }); + } + else { + throw new \nre\exceptions\ParamsNotValidException($sortorder); + } // Pass data to view $this->set('seminary', $seminary); $this->set('characters', $characters); $this->set('characterfields', $characterfields); - $this->set('properties', $properties); + $this->set('sortorder', $sortorder); } @@ -316,14 +322,18 @@ ); $selectedCharacters = array(); + global $sortorder; if($this->request->getRequestMethod() == 'POST') { + // Set sortorder + $sortorder = $this->request->getPostParam('sortorder'); + // Do action + $selectedCharacters = $this->request->getPostParam('characters'); if(!is_null($this->request->getPostParam('actions')) && count($this->request->getPostParam('actions')) > 0 && !is_null($this->request->getPostParam('characters')) && count($this->request->getPostParam('characters')) > 0) { $actions = $this->request->getPostParam('actions'); $action = array_keys($actions)[0]; - $selectedCharacters = $this->request->getPostParam('characters'); switch($action) { @@ -369,34 +379,47 @@ break; } } - - // Properties to show - $properties = $this->request->getPostParam('properties'); - if(!is_array($properties)) { - $properties = array(); - } } + // Get Seminarycharacterfields + $characterfields = $this->Seminarycharacterfields->getFieldsForSeminary($seminary['id']); + // Get registered Characters $characters = $this->Characters->getCharactersForSeminary($seminary['id']); foreach($characters as &$character) { $character['xplevel'] = $this->Characters->getXPLevelOfCharacters($character['id']); - $character['characterroles'] = array_map(function($r) { return $r['name']; }, $this->Characterroles->getCharacterrolesForCharacterById($character['id'])); $character['user'] = $this->Users->getUserById($character['user_id']); - $character['characterfields'] = $this->Seminarycharacterfields->getFieldsForCharacter($character['id']); + $character['characterroles'] = array_map(function($r) { return $r['name']; }, $this->Characterroles->getCharacterrolesForCharacterById($character['id'])); + $character['characterfields'] = array(); + foreach($this->Seminarycharacterfields->getFieldsForCharacter($character['id']) as &$value) { + $character['characterfields'][$value['url']] = $value; + } } - // Get Seminarycharacterfields - $characterfields = $this->Seminarycharacterfields->getFieldsForSeminary($seminary['id']); + // Sort Characters + $sortorder = (!is_null($sortorder)) ? $sortorder : 'xps'; + $sortMethod = 'sortCharactersBy'.ucfirst(strtolower($sortorder)); + if(method_exists($this, $sortMethod)) { + usort($characters, array($this, $sortMethod)); + } + elseif(in_array($sortorder, array_map(function($f) { return $f['title']; }, $characterfields))) { + usort($characters, function($a, $b) { + global $sortorder; + return $this->sortCharactersByField($a, $b, $sortorder); + }); + } + else { + throw new \nre\exceptions\ParamsNotValidException($sortorder); + } // Pass data to view $this->set('seminary', $seminary); $this->set('characters', $characters); $this->set('characterfields', $characterfields); - $this->set('properties', $properties); $this->set('selectedCharacters', $selectedCharacters); + $this->set('sortorder', $sortorder); } @@ -425,6 +448,115 @@ } } + + /** + * Compare two Characters by their name. + * + * @param array $a Character a + * @param array $b Character b + * @return int Result of comparison + */ + private function sortCharactersByCharactername($a, $b) + { + if($a['name'] == $b['name']) { + return 0; + } + + + return ($a['name'] < $b['name']) ? -1 : 1; + } + + + /** + * Compare two Characters by their XPs. + * + * @param array $a Character a + * @param array $b Character b + * @return int Result of comparison + */ + private function sortCharactersByXps($a, $b) + { + if($a['xps'] == $b['xps']) { + return 0; + } + + + return ($a['xps'] > $b['xps']) ? -1 : 1; + } + + + /** + * Compare two Characters by their Character roles. + * + * @param array $a Character a + * @param array $b Character b + * @return int Result of comparison + */ + private function sortCharactersByRole($a, $b) + { + $roles = array('admin', 'moderator', 'user', 'guest'); + + if(in_array('admin', $a['characterroles'])) + { + if(in_array('admin', $b['characterroles'])) { + return 0; + } + return -1; + } + if(in_array('moderator', $a['characterroles'])) + { + if(in_array('admin', $b['characterroles'])) { + return 1; + } + if(in_array('moderator', $b['characterroles'])) { + return 0; + } + return -1; + } + if(in_array('user', $a['characterroles'])) + { + if(in_array('admin', $b['characterroles']) || in_array('moderator', $b['characterroles'])) { + return 1; + } + if(in_array('user', $b['characterroles'])) { + return 0; + } + return -1; + } + if(in_array('guest', $a['characterroles'])) + { + if(in_array('admin', $b['characterroles']) || in_array('moderator', $b['characterroles']) || in_array('user', $b['characterroles'])) { + return 1; + } + if(in_array('guest', $b['characterroles'])) { + return 0; + } + return -1; + } + + + return 1; + } + + + /** + * Compare two Characters by one of their Seminary fields. + * + * @param array $a Character a + * @param array $b Character b + * @param string $field Field to compare + * @return int Result of comparison + */ + private function sortCharactersByField($a, $b, $field) + { + if($a['characterfields'][$field] == $b['characterfields'][$field]) { + return 0; + } + + + return ($a['characterfields'][$field] < $b['characterfields'][$field]) ? -1 : 1; + } + } ?> diff --git a/locale/de_DE/LC_MESSAGES/The Legend of Z.mo b/locale/de_DE/LC_MESSAGES/The Legend of Z.mo index 56e47ff2..139cf800 100644 Binary files a/locale/de_DE/LC_MESSAGES/The Legend of Z.mo and b/locale/de_DE/LC_MESSAGES/The Legend of Z.mo differ diff --git a/locale/de_DE/LC_MESSAGES/The Legend of Z.po b/locale/de_DE/LC_MESSAGES/The Legend of Z.po index 4f750d9d..7178ac80 100644 --- a/locale/de_DE/LC_MESSAGES/The Legend of Z.po +++ b/locale/de_DE/LC_MESSAGES/The Legend of Z.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: The Legend of Z\n" -"POT-Creation-Date: 2014-04-29 13:33+0100\n" -"PO-Revision-Date: 2014-04-29 13:33+0100\n" +"POT-Creation-Date: 2014-04-29 21:29+0100\n" +"PO-Revision-Date: 2014-04-29 21:29+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: de_DE\n" @@ -162,8 +162,8 @@ msgid "Own progress: %d %%" msgstr "Persönlicher Fortschritt: %d %%" #: views/html/achievements/index.tpl:52 -#: views/html/charactergroups/group.tpl:26 -#: views/html/charactergroups/managegroup.tpl:19 +#: views/html/charactergroups/group.tpl:30 +#: views/html/charactergroups/managegroup.tpl:23 #: views/html/characters/character.tpl:36 views/html/seminarybar/index.tpl:7 msgid "Rank" msgstr "Platz" @@ -337,18 +337,18 @@ msgstr "Gruppengruppe bearbeiten" msgid "Manage Character group" msgstr "Gruppe verwalten" -#: views/html/charactergroups/group.tpl:28 -#: views/html/charactergroups/managegroup.tpl:21 +#: views/html/charactergroups/group.tpl:32 +#: views/html/charactergroups/managegroup.tpl:25 msgid "Members" msgstr "Mitglieder" -#: views/html/charactergroups/group.tpl:28 -#: views/html/charactergroups/managegroup.tpl:21 +#: views/html/charactergroups/group.tpl:32 +#: views/html/charactergroups/managegroup.tpl:25 msgid "Member" msgstr "Mitglied" -#: views/html/charactergroups/group.tpl:32 -#: views/html/charactergroups/managegroup.tpl:25 +#: views/html/charactergroups/group.tpl:36 +#: views/html/charactergroups/managegroup.tpl:29 #: views/html/characters/character.tpl:11 #: views/html/characters/character.tpl:13 views/html/characters/index.tpl:9 #: views/html/characters/manage.tpl:8 views/html/seminarymenu/index.tpl:2 @@ -356,7 +356,7 @@ msgstr "Mitglied" msgid "Characters" msgstr "Charaktere" -#: views/html/charactergroups/group.tpl:47 +#: views/html/charactergroups/group.tpl:51 #: views/html/charactergroups/groupsgroup.tpl:27 #, php-format msgid "%s-Quests" @@ -370,19 +370,19 @@ msgstr "Neue Gruppe" msgid "Create new Character groups-group" msgstr "Neue Gruppengruppe" -#: views/html/charactergroups/managegroup.tpl:42 +#: views/html/charactergroups/managegroup.tpl:46 msgid "Remove Characters" msgstr "Entferne Charaktere" -#: views/html/charactergroups/managegroup.tpl:46 +#: views/html/charactergroups/managegroup.tpl:50 msgid "Filter Characters" msgstr "Filtere Charaktere" -#: views/html/charactergroups/managegroup.tpl:52 +#: views/html/charactergroups/managegroup.tpl:56 msgid "Add Characters" msgstr "Füge Charaktere hinzu" -#: views/html/charactergroups/managegroup.tpl:58 +#: views/html/charactergroups/managegroup.tpl:62 #: views/html/questgroups/questgroup.tpl:57 views/html/quests/create.tpl:9 #: views/html/quests/index.tpl:9 msgid "Quests" @@ -427,18 +427,18 @@ msgstr "Ranking" #: views/html/characters/character.tpl:67 #: views/html/characters/character.tpl:73 #: views/html/characters/character.tpl:79 -#: views/html/characters/character.tpl:91 views/html/quests/index.tpl:37 +#: views/html/characters/character.tpl:97 views/html/quests/index.tpl:37 #: views/html/seminaries/index.tpl:29 views/html/seminarybar/index.tpl:6 #: views/html/seminarybar/index.tpl:42 #, php-format msgid "%d XPs" msgstr "%d XP" -#: views/html/characters/character.tpl:100 views/html/seminarybar/index.tpl:14 +#: views/html/characters/character.tpl:106 views/html/seminarybar/index.tpl:14 msgid "Last Quest" msgstr "Letzter Speicherpunkt" -#: views/html/characters/character.tpl:106 +#: views/html/characters/character.tpl:112 msgid "Topic progress" msgstr "Thematischer Fortschritt" @@ -446,54 +446,44 @@ msgstr "Thematischer Fortschritt" msgid "Manage" msgstr "Verwalten" -#: views/html/characters/index.tpl:20 views/html/characters/manage.tpl:15 -#: views/html/error/index.tpl:8 views/html/error/index.tpl:9 -#: views/html/introduction/index.tpl:7 views/html/users/create.tpl:9 -#: views/html/users/create.tpl:10 views/html/users/edit.tpl:9 -#: views/html/users/edit.tpl:10 views/html/users/login.tpl:12 -#: views/html/users/login.tpl:13 views/html/users/register.tpl:81 -#: views/html/users/register.tpl:82 -msgid "Username" -msgstr "Benutzername" +#: views/html/characters/index.tpl:20 views/html/characters/register.tpl:42 +#: views/html/characters/register.tpl:43 +msgid "Character name" +msgstr "Charaktername" -#: views/html/characters/index.tpl:21 views/html/characters/manage.tpl:16 -#: views/html/quests/create.tpl:29 views/html/quests/create.tpl:30 +#: views/html/characters/index.tpl:21 views/html/quests/create.tpl:29 +#: views/html/quests/create.tpl:30 msgid "XPs" msgstr "XP" -#: views/html/characters/index.tpl:22 views/html/characters/manage.tpl:17 -#: views/html/users/user.tpl:37 -msgid "Roles" -msgstr "Rollen" +#: views/html/characters/index.tpl:22 +msgid "Role" +msgstr "Rolle" -#: views/html/characters/index.tpl:27 views/html/characters/manage.tpl:22 -msgid "Set properties" -msgstr "Setze Eigenschaften" +#: views/html/characters/index.tpl:27 +msgid "Sort list" +msgstr "Liste sortieren" -#: views/html/characters/index.tpl:39 views/html/characters/manage.tpl:36 -#: views/html/characters/manage.tpl:53 views/html/characters/manage.tpl:61 +#: views/html/characters/index.tpl:37 views/html/characters/manage.tpl:32 +#: views/html/characters/manage.tpl:47 views/html/characters/manage.tpl:55 msgid "Admin" msgstr "Administrator" -#: views/html/characters/index.tpl:40 views/html/characters/manage.tpl:37 -#: views/html/characters/manage.tpl:54 views/html/characters/manage.tpl:62 +#: views/html/characters/index.tpl:38 views/html/characters/manage.tpl:33 +#: views/html/characters/manage.tpl:48 views/html/characters/manage.tpl:56 msgid "Moderator" msgstr "Moderator" -#: views/html/characters/index.tpl:41 views/html/characters/manage.tpl:38 -#: views/html/characters/manage.tpl:56 views/html/characters/manage.tpl:64 +#: views/html/characters/index.tpl:39 views/html/characters/manage.tpl:34 +#: views/html/characters/manage.tpl:50 views/html/characters/manage.tpl:58 msgid "User" msgstr "Benutzer" -#: views/html/characters/manage.tpl:25 -msgid "Selection" -msgstr "Auswahl" - -#: views/html/characters/manage.tpl:51 +#: views/html/characters/manage.tpl:45 msgid "Add role" msgstr "Füge Rolle hinzu" -#: views/html/characters/manage.tpl:59 +#: views/html/characters/manage.tpl:53 msgid "Remove role" msgstr "Entferne Rolle" @@ -527,10 +517,6 @@ msgstr "Der Charaktername ist ungültig" msgid "Character properties" msgstr "Charaktereigenschaften" -#: views/html/characters/register.tpl:42 views/html/characters/register.tpl:43 -msgid "Character name" -msgstr "Charaktername" - #: views/html/characters/register.tpl:60 #, php-format msgid "The Seminary field “%s” is invalid" @@ -546,6 +532,15 @@ msgstr "Kursfelder" msgid "Login" msgstr "Login" +#: views/html/error/index.tpl:8 views/html/error/index.tpl:9 +#: views/html/introduction/index.tpl:7 views/html/users/create.tpl:9 +#: views/html/users/create.tpl:10 views/html/users/edit.tpl:9 +#: views/html/users/edit.tpl:10 views/html/users/login.tpl:12 +#: views/html/users/login.tpl:13 views/html/users/register.tpl:81 +#: views/html/users/register.tpl:82 +msgid "Username" +msgstr "Benutzername" + #: views/html/error/index.tpl:10 views/html/error/index.tpl:11 #: views/html/introduction/index.tpl:8 views/html/users/create.tpl:17 #: views/html/users/create.tpl:18 views/html/users/edit.tpl:16 @@ -737,7 +732,7 @@ msgstr "speichern" msgid "Create new seminary" msgstr "Neuen Kurs erstellen" -#: views/html/seminaries/index.tpl:32 +#: views/html/seminaries/index.tpl:33 #, php-format msgid "created by %s on %s" msgstr "erstellt von %s am %s" @@ -903,6 +898,16 @@ msgstr "Das Passwort ist ungültig" msgid "Register" msgstr "Registrieren" +#: views/html/users/user.tpl:37 +msgid "Roles" +msgstr "Rollen" + +#~ msgid "Set properties" +#~ msgstr "Setze Eigenschaften" + +#~ msgid "Selection" +#~ msgstr "Auswahl" + #, fuzzy #~ msgid "%d XPs" #~ msgstr "%d XP" diff --git a/views/html/characters/index.tpl b/views/html/characters/index.tpl index e6435812..9da8f406 100644 --- a/views/html/characters/index.tpl +++ b/views/html/characters/index.tpl @@ -14,16 +14,17 @@ -
diff --git a/views/html/characters/manage.tpl b/views/html/characters/manage.tpl index e1312d17..e340944a 100644 --- a/views/html/characters/manage.tpl +++ b/views/html/characters/manage.tpl @@ -11,14 +11,15 @@