assign Character titles via QR-codes (implements #118)

This commit is contained in:
oliver 2016-03-26 17:36:23 +01:00
parent 40d2aa5768
commit eddc4036cf
6 changed files with 101 additions and 3 deletions

View file

@ -25,7 +25,7 @@
*
* @var array
*/
public $models = array('seminaries', 'achievements', 'charactergroups', 'charactergroupsquests', 'charactergroupsqueststations', 'charactergroupsachievements');
public $models = array('seminaries', 'achievements', 'charactertitles', 'charactergroups', 'charactergroupsquests', 'charactergroupsqueststations', 'charactergroupsachievements');
@ -103,6 +103,47 @@
}
/**
* 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']
);
// Redirect
$this->redirect(
$this->linker->link(
array(
'characters',
'character',
$seminary['url'],
$character['url']
)
)
);
}
/**
* Action: cgqs.
*

View file

@ -24,7 +24,7 @@
*
* @var array
*/
public $models = array('seminaries', 'achievements', 'charactergroups', 'charactergroupsquests', 'charactergroupsqueststations', 'charactergroupsachievements');
public $models = array('seminaries', 'achievements', 'charactertitles', 'charactergroups', 'charactergroupsquests', 'charactergroupsqueststations', 'charactergroupsachievements');
@ -88,6 +88,37 @@
}
/**
* Action: charactertitles
*
* Display a QR-code for a Character title.
*
* @throws \nre\exceptions\IdNotFoundException
* @param string $seminaryUrl URL-Title of a Seminary
* @param string $titleHash Hash of Character title
* @param int $size Size of QR-code (default: 1)
*/
public function charactertitle($seminaryUrl, $titleHash, $size=1)
{
// Get seminary
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
// Get Character title
$title = $this->Charactertitles->getTitleByHash($titleHash);
// Generate QR-code
$url = $this->linker->link(array('qr', 'ct', $title['hash']), 0, true, null, true, null, true);
$file = $this->generateQRcode($url, $size);
if(is_null($file)) {
return;
}
// Pass data to view
$this->set('file', $file);
}
/**
* Action: charactergroupsqueststation
*

View file

@ -69,7 +69,7 @@
public function getTitleByHash($titleHash)
{
$data = $this->db->query(
'SELECT id, hash, title_male, title_female '.
'SELECT id, seminary_id, hash, title_male, title_female '.
'FROM charactertitles '.
'WHERE hash = ?',
's',
@ -123,6 +123,26 @@
}
/**
* Add a Character title to the list of titles for a Character.
*
* @param int $titleId ID of title to assign
* @param int $characterId ID of Character to assign title to
*/
public function assignTitleToCharacter($titleId, $characterId)
{
$this->db->query(
'INSERT IGNORE INTO characters_charactertitles '.
'(character_id, charactertitle_id) '.
'VALUES '.
'(?, ?)',
'ii',
$characterId,
$titleId
);
}
/**
* Check if a title for a Characters already exists.
*

View file

@ -0,0 +1 @@
<?=$file?>

View file

@ -16,6 +16,11 @@
<ul class="admin">
<li><a href="<?=$linker->link(array('edit',$seminary['url'],$title['hash']),1)?>"><?=_('edit')?></a></li>
<li><a href="<?=$linker->link(array('delete',$seminary['url'],$title['hash']),1)?>"><?=_('delete')?></a></li>
<li>
<a href="<?=$linker->link(array('qrcodes','charactertitle',$seminary['url'],$title['hash'],'50'))?>">
<i class="fa fa-qrcode"></i>
</a>
</li>
</ul>
</li>
<?php endforeach ?>

0
views/html/qr/ct.tpl Normal file
View file