questlab/controllers/QrController.inc

242 lines
7.6 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 QrAgent to redirect to a page from a (short) QR-code
* link.
*
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
*/
class QrController extends \hhu\z\controllers\SeminaryController
{
/**
* Required models
*
* @var array
*/
public $models = array('seminaries', 'achievements', 'charactertitles', 'charactergroups', 'charactergroupsquests', 'charactergroupsqueststations', 'charactergroupsachievements');
/**
* User permissions
*
* @var array
*/
public $permissions = array(
'a' => array('admin', 'moderator', 'user'),
'ct' => array('admin', 'moderator', 'user'),
'cgqs' => array('admin', 'moderator', 'user'),
'cga' => array('admin', 'moderator', 'user')
);
/**
* Action: a.
*
* Trigger an Achievement by a hash typically provided via a QR-code.
*
* @param $achievementConditionHash Hash value of QR-code condition of an Achievement
*/
public function a($achievementConditionHash)
{
// Check Achievement condition
$condition = $this->Achievements->getAchievementConditionQrcode(
$achievementConditionHash
);
if(empty($condition)) {
throw new \nre\exceptions\IdNotFoundException($achievementConditionHash);
}
// Get Achievement
$achievement = $this->Achievements->getAchievementById($condition['achievement_id']);
// Get Seminary
$seminary = $this->Seminaries->getSeminaryById($achievement['seminary_id']);
// Get Character
$character = $this->Characters->getCharacterForUserAndSeminary(
self::$user['id'],
$seminary['id']
);
// Set Achievement achieved
$this->Achievements->setAchievementAchieved(
$achievement['id'],
$character['id']
);
// Add notification
$this->Notification->addNotification(
\hhu\z\controllers\components\NotificationComponent::TYPE_ACHIEVEMENT,
$achievement['title'],
$this->linker->link(
array(
'achievements',
'index',
$seminary['url']
), 0, true, null, true, $achievement['url']
),
(
!is_null($achievement['achieved_achievementsmedia_id'])
? $this->linker->link(
array(
'media',
'achievement',
$seminary['url'],
$achievement['url']
)
)
: null
)
);
// Redirect to Character profile
$this->redirect(
$this->linker->link(
array(
'achievements',
'index',
$seminary['url']
)
)
);
}
/**
* Action: ct.
*
* Trigger a Character title by a hash typically provided via a QR-code.
*
* @param $titleHash Hash value of Character title
*/
public function ct($titleHash)
{
// Get Character title
$title = $this->Charactertitles->getTitleByHash($titleHash);
// Get Seminary
$seminary = $this->Seminaries->getSeminaryById($title['seminary_id']);
// Get Character
$character = $this->Characters->getCharacterForUserAndSeminary(
self::$user['id'],
$seminary['id']
);
// Assign title to Character
$this->Charactertitles->assignTitleToCharacter(
$title['id'],
$character['id']
);
// Add notification
$this->Notification->addNotification(
\hhu\z\controllers\components\NotificationComponent::TYPE_CHARACTERTITLE,
($character['gender'] === 1)
? $title['title_male']
: $title['title_female'],
$this->linker->link(
array(
'characters',
'edit',
$seminary['url'],
$character['url']
)
)
);
// Redirect
$this->redirect(
$this->linker->link(
array(
'characters',
'character',
$seminary['url'],
$character['url']
)
)
);
}
/**
* Action: cgqs.
*
* Redirect to a Character groups Quest Station.
*
* @param string $stationHash Hash of Character groups Quest Station
*/
public function cgqs($stationHash)
{
// Get station
$station = $this->Charactergroupsqueststations->getStationByHash($stationHash);
// Get Character groups Quests
$quest = $this->Charactergroupsquests->getQuestById($station['charactergroupsquest_id']);
// Get Character groups-group
$groupsgroup = $this->Charactergroups->getGroupsgroupById($quest['charactergroupsgroup_id']);
// Get seminary
$seminary = $this->Seminaries->getSeminaryById($groupsgroup['seminary_id']);
// Redirect
$this->redirect($this->linker->link(array(
'charactergroupsqueststations',
'station',
$seminary['url'],
$groupsgroup['url'],
$quest['url'],
$station['url']
)));
}
/**
* Action: cga.
*
* Redirect to a Character groups Achievements
*
* @param string $achievementHash Hash of Character groups Achievement
*/
public function cga($achievementHash)
{
// Get Achievement
$achievement = $this->Charactergroupsachievements->getAchievementByHash($achievementHash);
// Get Character groups-group
$groupsgroup = $this->Charactergroups->getGroupsgroupById($achievement['charactergroupsgroup_id']);
// Get seminary
$seminary = $this->Seminaries->getSeminaryById($groupsgroup['seminary_id']);
// Redirect
$this->redirect(
$this->linker->link(
array(
'charactergroupsachievements',
'achievement',
$seminary['url'],
$groupsgroup['url'],
$achievement['hash']
)
)
);
}
}
?>