785 lines
32 KiB
PHP
785 lines
32 KiB
PHP
<?php
|
||
|
||
/**
|
||
* Questlab
|
||
*
|
||
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
|
||
* @copyright 2014 – 2016 Heinrich-Heine-Universität Düsseldorf
|
||
* @license http://www.gnu.org/licenses/gpl.html
|
||
* @link https://github.com/coderkun/questlab
|
||
*/
|
||
|
||
namespace hhu\z\controllers;
|
||
|
||
|
||
/**
|
||
* Controller of the CharactergroupsAgent to display Character groups.
|
||
*
|
||
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
|
||
*/
|
||
class CharactergroupsController extends \hhu\z\controllers\SeminaryController
|
||
{
|
||
/**
|
||
* Required models
|
||
*
|
||
* @var array
|
||
*/
|
||
public $models = array('seminaries', 'charactergroups', 'charactergroupsquests', 'charactergroupsachievements', 'characters', 'avatars', 'charactertitles', 'media');
|
||
/**
|
||
* Required components
|
||
*
|
||
* @var array
|
||
*/
|
||
public $components = array('validation');
|
||
/**
|
||
* User permissions
|
||
*
|
||
* @var array
|
||
*/
|
||
public $permissions = array(
|
||
'index' => array('admin', 'moderator', 'user'),
|
||
'groupsgroup' => array('admin', 'moderator', 'user'),
|
||
'creategroupsgroup' => array('admin', 'moderator', 'user'),
|
||
'editgroupsgroup' => array('admin', 'moderator', 'user'),
|
||
'deletegroupsgroup' => array('admin', 'moderator', 'user'),
|
||
'group' => array('admin', 'moderator', 'user'),
|
||
'managegroup' => array('admin', 'moderator', 'user'),
|
||
'creategroup' => array('admin', 'moderator', 'user'),
|
||
'editgroup' => array('admin', 'moderator', 'user'),
|
||
'deletegroup' => array('admin', 'moderator', 'user')
|
||
);
|
||
/**
|
||
* User seminary permissions
|
||
*
|
||
* @var array
|
||
*/
|
||
public $seminaryPermissions = array(
|
||
'index' => array('admin', 'moderator', 'user'),
|
||
'groupsgroup' => array('admin', 'moderator', 'user'),
|
||
'creategroupsgroup' => array('admin', 'moderator'),
|
||
'editgroupsgroup' => array('admin', 'moderator'),
|
||
'deletegroupsgroup' => array('admin', 'moderator'),
|
||
'group' => array('admin', 'moderator', 'user'),
|
||
'managegroup' => array('admin', 'moderator'),
|
||
'creategroup' => array('admin', 'moderator'),
|
||
'editgroup' => array('admin', 'moderator', 'user'),
|
||
'deletegroup' => array('admin', 'moderator')
|
||
);
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Action: index.
|
||
*
|
||
* Show Character groups-groups for a Seminary.
|
||
*
|
||
* @throws \nre\exceptions\IdNotFoundException
|
||
* @param string $seminaryUrl URL-Title of a Seminary
|
||
*/
|
||
public function index($seminaryUrl)
|
||
{
|
||
// Get seminary
|
||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||
|
||
// Get Character groups-groups
|
||
$groupsgroups = $this->Charactergroups->getGroupsroupsForSeminary($seminary['id']);
|
||
|
||
|
||
// Set titile
|
||
$this->addTitleLocalized('Character Groups');
|
||
$this->addTitle($seminary['title']);
|
||
|
||
// Pass data to view
|
||
$this->set('seminary', $seminary);
|
||
$this->set('groupsgroups', $groupsgroups);
|
||
}
|
||
|
||
|
||
/**
|
||
* Action: groupsgroups.
|
||
*
|
||
* Show Character groups for a Character groups-group of a
|
||
* Seminary.
|
||
*
|
||
* @throws \nre\exceptions\IdNotFoundException
|
||
* @param string $seminaryUrl URL-Title of a Seminary
|
||
* @param string $groupsgroupUrl URL-Title of a Character groups-group
|
||
*/
|
||
public function groupsgroup($seminaryUrl, $groupsgroupUrl)
|
||
{
|
||
// Get seminary
|
||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||
|
||
// Get Character groups-group
|
||
$groupsgroup = $this->Charactergroups->getGroupsgroupByUrl($seminary['id'], $groupsgroupUrl);
|
||
|
||
// Get Character groups
|
||
$groups = $this->Charactergroups->getGroupsForGroupsgroup($groupsgroup['id'], 'xps');
|
||
|
||
// Get Character groups-group Quests
|
||
$quests = $this->Charactergroupsquests->getQuestsForCharactergroupsgroup($groupsgroup['id']);
|
||
|
||
// Get Achievements
|
||
$achievements = array();
|
||
if(count(array_intersect(array('admin', 'moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) > 0) {
|
||
$achievements = $this->Charactergroupsachievements->getAchievementsForCharactergroupsgroup(
|
||
$groupsgroup['id']
|
||
);
|
||
}
|
||
|
||
|
||
// Set titile
|
||
$this->addTitle($groupsgroup['name']);
|
||
$this->addTitleLocalized('Character Groups');
|
||
$this->addTitle($seminary['title']);
|
||
|
||
// Pass data to view
|
||
$this->set('seminary', $seminary);
|
||
$this->set('groupsgroup', $groupsgroup);
|
||
$this->set('groups', $groups);
|
||
$this->set('quests', $quests);
|
||
$this->set('achievements', $achievements);
|
||
}
|
||
|
||
|
||
/**
|
||
* Action: creategroupsgroups.
|
||
*
|
||
* Create a new Character groups-group for a Seminary.
|
||
*
|
||
* @throws \nre\exceptions\IdNotFoundException
|
||
* @param string $seminaryUrl URL-Title of a Seminary
|
||
*/
|
||
public function creategroupsgroup($seminaryUrl)
|
||
{
|
||
// Get seminary
|
||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||
|
||
// Values
|
||
$charactergroupsgroupname = '';
|
||
$preferred = false;
|
||
$fields = array('charactergroupsgroupname');
|
||
$validation = array();
|
||
|
||
// Create a new Character groups-group
|
||
if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('create')))
|
||
{
|
||
// Get params and validate them
|
||
$validation = $this->Validation->validateParams($this->request->getPostParams(), $fields);
|
||
$charactergroupsgroupname = $this->request->getPostParam('charactergroupsgroupname');
|
||
if($this->Charactergroups->characterGroupsgroupNameExists($seminary['id'], $charactergroupsgroupname)) {
|
||
$validation = $this->Validation->addValidationResult($validation, 'charactergroupsgroupname', 'exist', true);
|
||
}
|
||
$preferred = !is_null($this->request->getPostParam('preferred'));
|
||
|
||
// Create groups-group
|
||
if($validation === true)
|
||
{
|
||
$groupsgroupId = $this->Charactergroups->createGroupsgroup(
|
||
$this->Auth->getUserId(),
|
||
$seminary['id'],
|
||
$charactergroupsgroupname,
|
||
$preferred
|
||
);
|
||
|
||
// Redirect to groups-group page
|
||
$groupsgroup = $this->Charactergroups->getGroupsgroupById($groupsgroupId);
|
||
$this->redirect($this->linker->link(array('groupsgroup', $seminary['url'], $groupsgroup['url']), 1));
|
||
}
|
||
}
|
||
|
||
// Get validation settings
|
||
$validationSettings = array();
|
||
foreach($fields as &$field) {
|
||
$validationSettings[$field] = \nre\configs\AppConfig::$validation[$field];
|
||
}
|
||
|
||
|
||
// Set titile
|
||
$this->addTitleLocalized('New Character groups-group');
|
||
$this->addTitle($seminary['title']);
|
||
|
||
// Pass data to view
|
||
$this->set('seminary', $seminary);
|
||
$this->set('charactergroupsgroupname', $charactergroupsgroupname);
|
||
$this->set('preferred', $preferred);
|
||
$this->set('validation', $validation);
|
||
$this->set('validationSettings', $validationSettings);
|
||
}
|
||
|
||
|
||
/**
|
||
* Action: editgroupsgroups.
|
||
*
|
||
* Edit a Character groups-group of a Seminary.
|
||
*
|
||
* @throws \nre\exceptions\IdNotFoundException
|
||
* @param string $seminaryUrl URL-Title of a Seminary
|
||
* @param string $groupsgroupUrl URL-Title of a Character groups-group
|
||
*/
|
||
public function editgroupsgroup($seminaryUrl, $groupsgroupUrl)
|
||
{
|
||
// Get seminary
|
||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||
|
||
// Get Character groups-group
|
||
$groupsgroup = $this->Charactergroups->getGroupsgroupByUrl($seminary['id'], $groupsgroupUrl);
|
||
|
||
// Values
|
||
$charactergroupsgroupname = $groupsgroup['name'];
|
||
$preferred = $groupsgroup['preferred'];
|
||
$fields = array('charactergroupsgroupname');
|
||
$validation = array();
|
||
|
||
// Edit Character groups-group
|
||
if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('edit')))
|
||
{
|
||
// Get params and validate them
|
||
$validation = $this->Validation->validateParams($this->request->getPostParams(), $fields);
|
||
$charactergroupsgroupname = $this->request->getPostParam('charactergroupsgroupname');
|
||
if($this->Charactergroups->characterGroupsgroupNameExists($charactergroupsgroupname, $groupsgroup['id'])) {
|
||
$validation = $this->Validation->addValidationResult($validation, 'charactergroupsgroupname', 'exist', true);
|
||
}
|
||
$preferred = !is_null($this->request->getPostParam('preferred'));
|
||
|
||
// Edit groups-group
|
||
if($validation === true)
|
||
{
|
||
$this->Charactergroups->editGroupsgroup(
|
||
$groupsgroup['id'],
|
||
$charactergroupsgroupname,
|
||
$preferred
|
||
);
|
||
|
||
// Redirect to user page
|
||
$groupsgroup = $this->Charactergroups->getGroupsgroupById($groupsgroup['id']);
|
||
$this->redirect($this->linker->link(array('groupsgroup', $seminary['url'], $groupsgroup['url']), 1));
|
||
}
|
||
}
|
||
|
||
// Get validation settings
|
||
$validationSettings = array();
|
||
foreach($fields as &$field) {
|
||
$validationSettings[$field] = \nre\configs\AppConfig::$validation[$field];
|
||
}
|
||
|
||
|
||
// Set titile
|
||
$this->addTitleLocalized('Edit Character groups-group');
|
||
$this->addTitle($seminary['title']);
|
||
|
||
// Pass data to view
|
||
$this->set('seminary', $seminary);
|
||
$this->set('charactergroupsgroupname', $charactergroupsgroupname);
|
||
$this->set('preferred', $preferred);
|
||
$this->set('validation', $validation);
|
||
$this->set('validationSettings', $validationSettings);
|
||
}
|
||
|
||
|
||
/**
|
||
* Action: deletegroupsgroups.
|
||
*
|
||
* Delete a Character groups-group of a Seminary.
|
||
*
|
||
* @throws \nre\exceptions\IdNotFoundException
|
||
* @param string $seminaryUrl URL-Title of a Seminary
|
||
* @param string $groupsgroupUrl URL-Title of a Character groups-group
|
||
*/
|
||
public function deletegroupsgroup($seminaryUrl, $groupsgroupUrl)
|
||
{
|
||
// Get seminary
|
||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||
|
||
// Get Character groups-group
|
||
$groupsgroup = $this->Charactergroups->getGroupsgroupByUrl($seminary['id'], $groupsgroupUrl);
|
||
|
||
// Check request method
|
||
if($this->request->getRequestMethod() == 'POST')
|
||
{
|
||
// Check confirmation
|
||
if(!is_null($this->request->getPostParam('delete')))
|
||
{
|
||
// Delete seminary
|
||
$this->Charactergroups->deleteGroupsgroup($groupsgroup['id']);
|
||
|
||
// Redirect to overview
|
||
$this->redirect($this->linker->link(array('index', $seminary['url']), 1));
|
||
}
|
||
|
||
// Redirect to entry
|
||
$this->redirect($this->linker->link(array('groupsgroup', $seminary['url'], $groupsgroup['url']), 1));
|
||
}
|
||
|
||
|
||
// Set titile
|
||
$this->addTitleLocalized('Delete Character groups-group');
|
||
$this->addTitle($seminary['title']);
|
||
|
||
// Pass data to view
|
||
$this->set('seminary', $seminary);
|
||
$this->set('groupsgroup', $groupsgroup);
|
||
}
|
||
|
||
|
||
/**
|
||
* Action: group.
|
||
*
|
||
* Show a Character group for a Character groups-group of a
|
||
* Seminary.
|
||
*
|
||
* @throws \nre\exceptions\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 group($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);
|
||
$group['characters'] = $this->Characters->getCharactersForGroup($group['id']);
|
||
$group['rank'] = $this->Charactergroups->getXPRank($groupsgroup['id'], $group['xps']);
|
||
|
||
// Get Character avatars and titles
|
||
foreach($group['characters'] as &$character)
|
||
{
|
||
// Avatar
|
||
$avatar = $this->Avatars->getAvatarById($character['avatar_id']);
|
||
if(!is_null($avatar['small_avatarpicture_id'])) {
|
||
$character['small_avatar'] = $this->Media->getSeminaryMediaById($avatar['small_avatarpicture_id']);
|
||
}
|
||
|
||
// Title
|
||
if(!is_null($character['charactertitle_id']) && !is_null($character['gender']))
|
||
{
|
||
$title = $this->Charactertitles->getTitleById($character['charactertitle_id']);
|
||
$character['title'] = $title[($character['gender']) ? 'title_male' : 'title_female'];
|
||
}
|
||
}
|
||
|
||
// Get Character groups Quests
|
||
$quests = $this->Charactergroupsquests->getQuestsForGroup($group['id']);
|
||
|
||
// Get Achievements
|
||
$achievements = $this->Charactergroupsachievements->getAchievedAchievementsForGroup(
|
||
$group['id']
|
||
);
|
||
|
||
|
||
// Set titile
|
||
$this->addTitle($group['name']);
|
||
$this->addTitle($groupsgroup['name']);
|
||
$this->addTitle($seminary['title']);
|
||
|
||
// Pass data to view
|
||
$this->set('seminary', $seminary);
|
||
$this->set('groupsgroup', $groupsgroup);
|
||
$this->set('group', $group);
|
||
$this->set('quests', $quests);
|
||
$this->set('achievements', $achievements);
|
||
}
|
||
|
||
|
||
/**
|
||
* Action: managegroup.
|
||
*
|
||
* Manage a Character group for a Character groups-group of a
|
||
* Seminary.
|
||
*
|
||
* @throws \nre\exceptions\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':
|
||
foreach($selectedCharacters as &$characterId)
|
||
{
|
||
$this->Charactergroups->addCharacterToCharactergroup($group['id'], $characterId);
|
||
// Check Achievements
|
||
$this->Achievement->checkAchievements($seminary['id'], $characterId, array('character', 'achievement'));
|
||
}
|
||
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'], true);
|
||
$characters = array();
|
||
foreach($seminaryCharacters as &$character) {
|
||
if(!in_array($character['id'], $groupCharacterIds)) {
|
||
$characters[] = $character;
|
||
}
|
||
}
|
||
|
||
|
||
// Set titile
|
||
$this->addTitle($group['name']);
|
||
$this->addTitle($groupsgroup['name']);
|
||
$this->addTitle($seminary['title']);
|
||
|
||
// Pass data to view
|
||
$this->set('seminary', $seminary);
|
||
$this->set('groupsgroup', $groupsgroup);
|
||
$this->set('group', $group);
|
||
$this->set('quests', $quests);
|
||
$this->set('characters', $characters);
|
||
}
|
||
|
||
|
||
/**
|
||
* Action: creategroup.
|
||
*
|
||
* Create a Character group for a Character groups-group of a
|
||
* Seminary.
|
||
*
|
||
* @throws \nre\exceptions\IdNotFoundException
|
||
* @param string $seminaryUrl URL-Title of a Seminary
|
||
* @param string $groupsgroupUrl URL-Title of a Character groups-group
|
||
*/
|
||
public function creategroup($seminaryUrl, $groupsgroupUrl)
|
||
{
|
||
// Get seminary
|
||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||
|
||
// Get Character groups-group
|
||
$groupsgroup = $this->Charactergroups->getGroupsgroupByUrl($seminary['id'], $groupsgroupUrl);
|
||
|
||
// Get allowed mimetypes
|
||
$mimetypes = \nre\configs\AppConfig::$mimetypes['icons'];
|
||
|
||
// Values
|
||
$charactergroupname = '';
|
||
$motto = '';
|
||
$fields = array('charactergroupname', 'motto');
|
||
$validation = array();
|
||
|
||
// Create a new Character groups-group
|
||
if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('create')))
|
||
{
|
||
// Get params and validate them
|
||
$validation = $this->Validation->validateParams($this->request->getPostParams(), $fields);
|
||
$charactergroupname = $this->request->getPostParam('charactergroupname');
|
||
if($this->Charactergroups->characterGroupNameExists($groupsgroup['id'], $charactergroupname)) {
|
||
$validation = $this->Validation->addValidationResult($validation, 'charactergroupname', 'exist', true);
|
||
}
|
||
$motto = $this->request->getPostParam('motto');
|
||
|
||
// Validate icon
|
||
$icon = null;
|
||
if(!empty($_FILES) && array_key_exists('icon', $_FILES) && $_FILES['icon']['error'] != UPLOAD_ERR_NO_FILE)
|
||
{
|
||
$icon = $_FILES['icon'];
|
||
|
||
// Check error
|
||
if($icon['error'] !== UPLOAD_ERR_OK) {
|
||
$validation = $this->Validation->addValidationResult($validation, 'icon', 'error', $icon['error']);
|
||
}
|
||
|
||
// Check mimetype
|
||
$mediaMimetype = null;
|
||
$icon['mimetype'] = \hhu\z\Utils::getMimetype($icon['tmp_name'], $icon['type']);
|
||
foreach($mimetypes as &$mimetype) {
|
||
if($mimetype['mimetype'] == $icon['mimetype']) {
|
||
$mediaMimetype = $mimetype;
|
||
break;
|
||
}
|
||
}
|
||
if(is_null($mediaMimetype)) {
|
||
$validation = $this->Validation->addValidationResult($validation, 'icon', 'mimetype', $icon['mimetype']);
|
||
}
|
||
elseif($icon['size'] > $mediaMimetype['size']) {
|
||
$validation = $this->Validation->addValidationResult($validation, 'icon', 'size', $mediaMimetype['size']);
|
||
}
|
||
}
|
||
|
||
// Create group
|
||
if($validation === true)
|
||
{
|
||
$groupId = $this->Charactergroups->createGroup(
|
||
$this->Auth->getUserId(),
|
||
$groupsgroup['id'],
|
||
$charactergroupname,
|
||
$motto
|
||
);
|
||
$group = $this->Charactergroups->getGroupById($groupId);
|
||
|
||
// Upload icon
|
||
if(!is_null($icon))
|
||
{
|
||
$mediaId = $this->Media->createCharactergroupMedia(
|
||
$this->Auth->getUserId(),
|
||
$seminary['id'],
|
||
sprintf('charactergroup-%s', $group['url']),
|
||
'',
|
||
$icon['mimetype'],
|
||
$icon['tmp_name']
|
||
);
|
||
if($mediaId !== false) {
|
||
$this->Charactergroups->setMediaForGroup($group['id'], $mediaId);
|
||
}
|
||
}
|
||
|
||
// Redirect to group page
|
||
$this->redirect($this->linker->link(array('group', $seminary['url'], $groupsgroup['url'], $group['url']), 1));
|
||
}
|
||
}
|
||
|
||
// Get validation settings
|
||
$validationSettings = array();
|
||
foreach($fields as &$field) {
|
||
$validationSettings[$field] = \nre\configs\AppConfig::$validation[$field];
|
||
}
|
||
|
||
|
||
// Set title
|
||
$this->addTitleLocalized('New %s Character group', $groupsgroup['name']);
|
||
$this->addTitle($groupsgroup['name']);
|
||
$this->addTitle($seminary['title']);
|
||
|
||
// Pass data to view
|
||
$this->set('seminary', $seminary);
|
||
$this->set('groupsgroup', $groupsgroup);
|
||
$this->set('charactergroupname', $charactergroupname);
|
||
$this->set('motto', $motto);
|
||
$this->set('mimetypes', $mimetypes);
|
||
$this->set('validation', $validation);
|
||
$this->set('validationSettings', $validationSettings);
|
||
}
|
||
|
||
|
||
/**
|
||
* Action: editgroup.
|
||
*
|
||
* Edit a Character group for a Character groups-group of a
|
||
* Seminary.
|
||
*
|
||
* @throws \nre\exceptions\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 editgroup($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);
|
||
$group['characters'] = $this->Characters->getCharactersForGroup($group['id']);
|
||
|
||
// Check permission
|
||
if(count(array_intersect(array('admin', 'moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) == 0 && !in_array(\hhu\z\controllers\SeminaryController::$character['id'], array_map(function($c) { return $c['id']; }, $group['characters']))) {
|
||
throw new \nre\exceptions\AccessDeniedException();
|
||
}
|
||
|
||
// Get allowed mimetypes
|
||
$mimetypes = \nre\configs\AppConfig::$mimetypes['icons'];
|
||
|
||
// Values
|
||
$charactergroupname = $group['name'];
|
||
$motto = $group['motto'];
|
||
$fields = array('charactergroupname', 'motto');
|
||
$validation = array();
|
||
|
||
// Edit Character group
|
||
if($this->request->getRequestMethod() == 'POST' && !is_null($this->request->getPostParam('edit')))
|
||
{
|
||
// Get params and validate them
|
||
$validation = $this->Validation->validateParams($this->request->getPostParams(), $fields);
|
||
$charactergroupname = (count(array_intersect(array('admin','moderator'), \hhu\z\controllers\SeminaryController::$character['characterroles'])) > 0) ? $this->request->getPostParam('charactergroupname') : $group['name'];
|
||
if($this->Charactergroups->characterGroupNameExists($groupsgroup['id'], $charactergroupname, $group['id'])) {
|
||
$validation = $this->Validation->addValidationResult($validation, 'charactergroupname', 'exist', true);
|
||
}
|
||
$motto = $this->request->getPostParam('motto');
|
||
|
||
// Validate icon
|
||
$icon = null;
|
||
if(!empty($_FILES) && array_key_exists('icon', $_FILES) && $_FILES['icon']['error'] != UPLOAD_ERR_NO_FILE)
|
||
{
|
||
$icon = $_FILES['icon'];
|
||
|
||
// Check error
|
||
if($icon['error'] !== UPLOAD_ERR_OK) {
|
||
$validation = $this->Validation->addValidationResult($validation, 'icon', 'error', $icon['error']);
|
||
}
|
||
|
||
// Check mimetype
|
||
$mediaMimetype = null;
|
||
$icon['mimetype'] = \hhu\z\Utils::getMimetype($icon['tmp_name'], $icon['type']);
|
||
foreach($mimetypes as &$mimetype) {
|
||
if($mimetype['mimetype'] == $icon['mimetype']) {
|
||
$mediaMimetype = $mimetype;
|
||
break;
|
||
}
|
||
}
|
||
if(is_null($mediaMimetype)) {
|
||
$validation = $this->Validation->addValidationResult($validation, 'icon', 'mimetype', $icon['mimetype']);
|
||
}
|
||
elseif($icon['size'] > $mediaMimetype['size']) {
|
||
$validation = $this->Validation->addValidationResult($validation, 'icon', 'size', $mediaMimetype['size']);
|
||
}
|
||
}
|
||
|
||
// Edit group
|
||
if($validation === true)
|
||
{
|
||
$this->Charactergroups->editGroup(
|
||
$group['id'],
|
||
$charactergroupname,
|
||
$motto
|
||
);
|
||
$group = $this->Charactergroups->getGroupById($group['id']);
|
||
|
||
// Upload icon
|
||
if(!is_null($icon))
|
||
{
|
||
$mediaId = $this->Media->createCharactergroupMedia(
|
||
$this->Auth->getUserId(),
|
||
$seminary['id'],
|
||
sprintf('charactergroup-%s', $group['url']),
|
||
'',
|
||
$icon['mimetype'],
|
||
$icon['tmp_name']
|
||
);
|
||
if($mediaId !== false) {
|
||
$this->Charactergroups->setMediaForGroup($group['id'], $mediaId);
|
||
}
|
||
}
|
||
|
||
// Redirect to user page
|
||
$this->redirect($this->linker->link(array('group', $seminary['url'], $groupsgroup['url'], $group['url']), 1));
|
||
}
|
||
}
|
||
|
||
// Get validation settings
|
||
$validationSettings = array();
|
||
foreach($fields as &$field) {
|
||
$validationSettings[$field] = \nre\configs\AppConfig::$validation[$field];
|
||
}
|
||
|
||
|
||
// Set title
|
||
$this->addTitleLocalized('Edit %s Character group', $groupsgroup['name']);
|
||
$this->addTitle($groupsgroup['name']);
|
||
$this->addTitle($seminary['title']);
|
||
|
||
// Pass data to view
|
||
$this->set('seminary', $seminary);
|
||
$this->set('groupsgroup', $groupsgroup);
|
||
$this->set('group', $group);
|
||
$this->set('charactergroupname', $charactergroupname);
|
||
$this->set('motto', $motto);
|
||
$this->set('mimetypes', $mimetypes);
|
||
$this->set('validation', $validation);
|
||
$this->set('validationSettings', $validationSettings);
|
||
}
|
||
|
||
|
||
/**
|
||
* Action: deletegroup.
|
||
*
|
||
* Delete a Character group for a Character groups-group of a
|
||
* Seminary.
|
||
*
|
||
* @throws \nre\exceptions\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 deletegroup($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);
|
||
|
||
// Check request method
|
||
if($this->request->getRequestMethod() == 'POST')
|
||
{
|
||
// Check confirmation
|
||
if(!is_null($this->request->getPostParam('delete')))
|
||
{
|
||
// Delete seminary
|
||
$this->Charactergroups->deleteGroup($group['id']);
|
||
|
||
// Redirect to overview
|
||
$this->redirect($this->linker->link(array('groupsgroup', $seminary['url'], $groupsgroup['url']), 1));
|
||
}
|
||
|
||
// Redirect to entry
|
||
$this->redirect($this->linker->link(array('group', $seminary['url'], $groupsgroup['url'], $group['url']), 1));
|
||
}
|
||
|
||
|
||
// Set title
|
||
$this->addTitleLocalized('Delete %s Character group', $groupsgroup['name']);
|
||
$this->addTitle($groupsgroup['name']);
|
||
$this->addTitle($seminary['title']);
|
||
|
||
// Pass data to view
|
||
$this->set('seminary', $seminary);
|
||
$this->set('groupsgroup', $groupsgroup);
|
||
$this->set('group', $group);
|
||
}
|
||
|
||
}
|
||
|
||
?>
|