implement manageing of Character groups (at least members)

This commit is contained in:
coderkun 2014-04-24 14:32:53 +02:00
commit 651a1641d7
5 changed files with 223 additions and 4 deletions

View file

@ -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);
}
}
?>