diff --git a/configs/AppConfig.inc b/configs/AppConfig.inc index 3575314e..6d08a01f 100644 --- a/configs/AppConfig.inc +++ b/configs/AppConfig.inc @@ -156,7 +156,7 @@ // z/// ⇒ z/quests/quest/// array('^([^/]+)/([^/]+)/([^/]+)/?$', 'quests/quest/$1/$2/3', true)*/ array('characters/(?!(index|character|register|manage))', 'characters/index/$1', true), - array('charactergroups/(?!(index|groupsgroup|group))', 'charactergroups/index/$1', true), + array('charactergroups/(?!(index|groupsgroup|group|managegroup))', 'charactergroups/index/$1', true), array('charactergroupsquests/(?!(quest))', 'charactergroupsquests/quest/$1', true), array('media/(.*)', 'media/$1?layout=binary', false), array('uploads/(.*)', 'uploads/$1?layout=binary', false), diff --git a/controllers/CharactergroupsController.inc b/controllers/CharactergroupsController.inc index 0811e6c9..7a961bf5 100644 --- a/controllers/CharactergroupsController.inc +++ b/controllers/CharactergroupsController.inc @@ -24,14 +24,15 @@ * * @var array */ - public $models = array('seminaries', 'charactergroups', 'charactergroupsquests', 'avatars', 'media'); + public $models = array('seminaries', 'charactergroups', 'charactergroupsquests', 'characters', 'avatars', 'media'); /** * User permissions * * @var array */ public $permissions = array( - 'quest' => array('admin', 'moderator', 'user') + 'quest' => array('admin', 'moderator', 'user'), + 'manage' => array('admin', 'moderator', 'user') ); /** * User seminary permissions @@ -39,7 +40,8 @@ * @var array */ public $seminaryPermissions = array( - 'quest' => array('admin', 'moderator', 'user') + 'quest' => array('admin', 'moderator', 'user'), + 'manage' => array('admin', 'moderator') ); @@ -145,6 +147,90 @@ $this->set('quests', $quests); } + + /** + * Action: managegroup. + * + * Manage a Character group for a Character groups-group of a + * Seminary. + * + * @throws IdNotFoundException + * @param string $seminaryUrl URL-Title of a Seminary + * @param string $groupsgroupUrl URL-Title of a Character groups-group + * @param string $groupUrl URL-Title of a Character group + */ + public function managegroup($seminaryUrl, $groupsgroupUrl, $groupUrl) + { + // Get seminary + $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); + + // Get Character groups-group + $groupsgroup = $this->Charactergroups->getGroupsgroupByUrl($seminary['id'], $groupsgroupUrl); + + // Get Character group + $group = $this->Charactergroups->getGroupByUrl($groupsgroup['id'], $groupUrl); + + // Manage + if($this->request->getRequestMethod() == 'POST' && !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) + { + // Add Characters to group + case 'addcharacters': + var_dump("hier"); + foreach($selectedCharacters as &$characterId) { + var_dump("add ".$characterId); + $this->Charactergroups->addCharacterToCharactergroup($group['id'], $characterId); + } + break; + // Remove Characters from group + case 'removecharacters': + foreach($selectedCharacters as &$characterId) { + $this->Charactergroups->removeCharacterFromCharactergroup($group['id'], $characterId); + } + break; + } + } + + // Get additional data for group + $group['characters'] = $this->Characters->getCharactersForGroup($group['id']); + $group['rank'] = $this->Charactergroups->getXPRank($groupsgroup['id'], $group['xps']); + + // Get Character avatars + foreach($group['characters'] as &$character) + { + $avatar = $this->Avatars->getAvatarById($character['avatar_id']); + if(!is_null($avatar['small_avatarpicture_id'])) { + $character['small_avatar'] = $this->Media->getSeminaryMediaById($avatar['small_avatarpicture_id']); + } + } + + // Get Character groups Quests + $quests = $this->Charactergroupsquests->getQuestsForGroup($group['id']); + + // Get all Characters of Seminary + $groupCharacterIds = array_map(function($c) { return $c['id']; }, $group['characters']); + $seminaryCharacters = $this->Characters->getCharactersForSeminary($seminary['id']); + $characters = array(); + foreach($seminaryCharacters as &$character) { + if(!in_array($character['id'], $groupCharacterIds)) { + $characters[] = $character; + } + } + + + // Pass data to view + $this->set('seminary', $seminary); + $this->set('groupsgroup', $groupsgroup); + $this->set('group', $group); + $this->set('quests', $quests); + $this->set('characters', $characters); + } + } ?> diff --git a/models/CharactergroupsModel.inc b/models/CharactergroupsModel.inc index e042fd10..3f24a9dc 100644 --- a/models/CharactergroupsModel.inc +++ b/models/CharactergroupsModel.inc @@ -192,6 +192,44 @@ return 1; } + + /** + * Add a Character to a Character group. + * + * @param int $groupId ID of Character group + * @param int $characterId ID of Character to add + */ + public function addCharacterToCharactergroup($groupId, $characterId) + { + $this->db->query( + 'INSERT INTO characters_charactergroups '. + '(character_id, charactergroup_id) '. + 'VALUES '. + '(?, ?)', + 'ii', + $characterId, + $groupId + ); + } + + + /** + * Remove a Character from a Character group. + * + * @param int $groupId ID of Character group + * @param int $characterId ID of Character to remove + */ + public function removeCharacterFromCharactergroup($groupId, $characterId) + { + $this->db->query( + 'DELETE FROM characters_charactergroups '. + 'WHERE charactergroup_id = ? AND character_id = ?', + 'ii', + $groupId, + $characterId + ); + } + } ?> diff --git a/views/html/charactergroups/group.tpl b/views/html/charactergroups/group.tpl index 0f6f88d3..5b5e1f4c 100644 --- a/views/html/charactergroups/group.tpl +++ b/views/html/charactergroups/group.tpl @@ -8,6 +8,13 @@
  • + + 0) : ?> + + +

    diff --git a/views/html/charactergroups/managegroup.tpl b/views/html/charactergroups/managegroup.tpl new file mode 100644 index 00000000..26ab1e7b --- /dev/null +++ b/views/html/charactergroups/managegroup.tpl @@ -0,0 +1,88 @@ + +
    + +
    + + +
    + +

    +

    ""

    +
    +
      +
    • .
    • +
    • XP
    • +
    • 1) ? _('Members') : _('Member')?>
    • +
    + +
    +

    +
    +
    +
      + +
    • + disabled="disabled"/> + +
    • + +
    + +
    +
    +
    + + +
    +
    + +
    +

    +
      + +
    • +

      + format(new \DateTime($quest['created']))?> + + / XP +

      +
    • + +
    +
    + + + + +