1) implement basic CharactersAgent
2) use view for Character groups
This commit is contained in:
parent
3517d6d0ed
commit
2f65a89ef4
15 changed files with 311 additions and 11 deletions
43
agents/intermediate/CharactersAgent.inc
Normal file
43
agents/intermediate/CharactersAgent.inc
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* The Legend of Z
|
||||
*
|
||||
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
|
||||
* @copyright 2014 Heinrich-Heine-Universität Düsseldorf
|
||||
* @license http://www.gnu.org/licenses/gpl.html
|
||||
* @link https://bitbucket.org/coderkun/the-legend-of-z
|
||||
*/
|
||||
|
||||
namespace hhu\z\agents\intermediate;
|
||||
|
||||
|
||||
/**
|
||||
* Agent to list registered Characters and their data.
|
||||
*
|
||||
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
|
||||
*/
|
||||
class CharactersAgent extends \nre\agents\IntermediateAgent
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Action: index.
|
||||
*/
|
||||
public function index(\nre\core\Request $request, \nre\core\Response $response)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Action: character.
|
||||
*/
|
||||
public function character(\nre\core\Request $request, \nre\core\Response $response)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -24,13 +24,23 @@
|
|||
*
|
||||
* @var array
|
||||
*/
|
||||
public $models = array('users', 'userroles');
|
||||
public $models = array('users', 'userroles', 'seminaries', 'characters');
|
||||
/**
|
||||
* Current user
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $user = null;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static $seminary = null;
|
||||
/**
|
||||
* Character of current user and Seminary
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $character = null;
|
||||
|
||||
|
||||
|
||||
|
|
@ -67,6 +77,15 @@
|
|||
// Get userdata
|
||||
try {
|
||||
static::$user = $this->Users->getUserById($this->Auth->getUserId());
|
||||
|
||||
// Character
|
||||
$controller = $this->agent->getIntermediateAgent()->controller;
|
||||
if(in_array(\hhu\z\controllers\SeminaryRoleController::class, class_parents($controller)))
|
||||
{
|
||||
$seminaryUrl = $this->request->getParam(3);
|
||||
static::$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||||
static::$character = $this->Characters->getCharacterForUserAndSeminary(static::$user['id'], static::$seminary['id']);
|
||||
}
|
||||
}
|
||||
catch(\nre\exceptions\IdNotFoundException $e) {
|
||||
}
|
||||
|
|
@ -76,6 +95,8 @@
|
|||
|
||||
// Set userdata
|
||||
$this->set('loggedUser', static::$user);
|
||||
$this->set('loggedSeminary', static::$seminary);
|
||||
$this->set('loggedCharacter', static::$character);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@
|
|||
array('^([^/]+)/([^/]+)/?$', 'questgropus/questgroup/$1/$2', true),
|
||||
// z/<Seminary>/<Questgroup>/<Quest> ⇒ z/quests/quest/<Seminary>/<Questgroup>/<Quest>
|
||||
array('^([^/]+)/([^/]+)/([^/]+)/?$', 'quests/quest/$1/$2/3', true)*/
|
||||
array('characters/(?!(index|character))', 'characters/index/$1', true),
|
||||
array('charactergroups/(?!(index|groupsgroup|group))', 'charactergroups/index/$1', true),
|
||||
array('charactergroupsquests/(?!(quest))', 'charactergroupsquests/quest/$1', true),
|
||||
array('media/(.*)', 'media/$1?layout=binary', false),
|
||||
|
|
@ -100,6 +101,7 @@
|
|||
array('users/([^/]+)/(.*)', 'users/$2/$1', true),
|
||||
array('seminaries/seminary/(.*)', 'seminaries/$1', false),
|
||||
//array('seminaries/seminary/(.*)', '$1', false)
|
||||
array('characters/index/(.*)', 'characters/$1', true),
|
||||
array('charactergroup/index/(.*)', 'charactergroup/$1', true),
|
||||
array('charactergroupsquests/quest/(.*)', 'charactergroupsquests/$1', true),
|
||||
array('media/index/(.*)', 'media/$1', true)
|
||||
|
|
|
|||
|
|
@ -123,6 +123,9 @@
|
|||
// Get Character group
|
||||
$group = $this->Charactergroups->getGroupByUrl($groupsgroup['id'], $groupUrl);
|
||||
|
||||
// Get Characters
|
||||
$characters = $this->Characters->getCharactersForGroup($group['id']);
|
||||
|
||||
// Get Character groups Quests
|
||||
$quests = $this->Charactergroupsquests->getQuestsForGroup($group['id']);
|
||||
|
||||
|
|
@ -131,6 +134,7 @@
|
|||
$this->set('seminary', $seminary);
|
||||
$this->set('groupsgroup', $groupsgroup);
|
||||
$this->set('group', $group);
|
||||
$this->set('characters', $characters);
|
||||
$this->set('quests', $quests);
|
||||
}
|
||||
|
||||
|
|
|
|||
97
controllers/CharactersController.inc
Normal file
97
controllers/CharactersController.inc
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* The Legend of Z
|
||||
*
|
||||
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
|
||||
* @copyright 2014 Heinrich-Heine-Universität Düsseldorf
|
||||
* @license http://www.gnu.org/licenses/gpl.html
|
||||
* @link https://bitbucket.org/coderkun/the-legend-of-z
|
||||
*/
|
||||
|
||||
namespace hhu\z\controllers;
|
||||
|
||||
|
||||
/**
|
||||
* Controller of the Agent to list registered users and their data.
|
||||
*
|
||||
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
|
||||
*/
|
||||
class CharactersController extends \hhu\z\Controller
|
||||
{
|
||||
/**
|
||||
* User permissions
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $permissions = array(
|
||||
'index' => array('admin', 'moderator'),
|
||||
'character' => array('admin', 'moderator', 'user')
|
||||
);
|
||||
/**
|
||||
* Required models
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $models = array('seminaries', 'characters', 'users', 'charactergroups');
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Action: index.
|
||||
*
|
||||
* List registered Characters for a Seminary
|
||||
*
|
||||
* @throws IdNotFoundException
|
||||
* @param string $seminaryUrl URL-Title of a Seminary
|
||||
*/
|
||||
public function index($seminaryUrl)
|
||||
{
|
||||
// Get Seminary
|
||||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||||
|
||||
// Get registered Characters
|
||||
$characters = $this->Characters->getCharactersForSeminary($seminary['id']);
|
||||
|
||||
|
||||
// Pass data to view
|
||||
$this->set('seminary', $seminary);
|
||||
$this->set('characters', $characters);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Action: character.
|
||||
*
|
||||
* Show a Charater and its details.
|
||||
*
|
||||
* @throws IdNotFoundException
|
||||
* @param string $seminaryUrl URL-Title of a Seminary
|
||||
* @param string $characterUrl URL-name of a Charater
|
||||
*/
|
||||
public function character($seminaryUrl, $characterUrl)
|
||||
{
|
||||
// Get Seminary
|
||||
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
|
||||
|
||||
// Get Character
|
||||
$character = $this->Characters->getCharacterByUrl($seminary['id'], $characterUrl);
|
||||
|
||||
// Get User
|
||||
$user = $this->Users->getUserById($character['user_id']);
|
||||
|
||||
// Get Character groups
|
||||
$groups = $this->Charactergroups->getGroupsForCharacter($character['id']);
|
||||
|
||||
|
||||
// Pass data to view
|
||||
$this->set('seminary', $seminary);
|
||||
$this->set('character', $character);
|
||||
$this->set('user', $user);
|
||||
$this->set('groups', $groups);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -50,6 +50,8 @@
|
|||
|
||||
// Set userdata
|
||||
$this->set('loggedUser', static::$user);
|
||||
$this->set('loggedSeminary', static::$seminary);
|
||||
$this->set('loggedCharacter', static::$character);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,8 +88,8 @@
|
|||
public function getGroupsForGroupsgroup($groupsgroupId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT id, name, url '.
|
||||
'FROM charactergroups '.
|
||||
'SELECT id, name, url, xps '.
|
||||
'FROM v_charactergroups '.
|
||||
'WHERE charactergroupsgroup_id = ?',
|
||||
'i',
|
||||
$groupsgroupId
|
||||
|
|
@ -97,6 +97,26 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Character groups for a Character.
|
||||
*
|
||||
* @param int $characterId ID of the Character
|
||||
* @return array Character groups
|
||||
*/
|
||||
public function getGroupsForCharacter($characterId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT charactergroups.id, charactergroups.charactergroupsgroup_id, charactergroups.name, charactergroups.url, charactergroups.xps, charactergroupsgroups.id AS charactergroupsgroup_id, charactergroupsgroups.name AS charactergroupsgroup_name, charactergroupsgroups.url AS charactergroupsgroup_url '.
|
||||
'FROM characters_charactergroups '.
|
||||
'LEFT JOIN v_charactergroups AS charactergroups ON charactergroups.id = characters_charactergroups.charactergroup_id '.
|
||||
'LEFT JOIN charactergroupsgroups ON charactergroupsgroups.id = charactergroups.charactergroupsgroup_id '.
|
||||
'WHERE characters_charactergroups.character_id = ?',
|
||||
'i',
|
||||
$characterId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a Character group by its URL.
|
||||
*
|
||||
|
|
@ -108,8 +128,8 @@
|
|||
public function getGroupByUrl($groupsgroupId, $groupUrl)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT id, name, url '.
|
||||
'FROM charactergroups '.
|
||||
'SELECT id, name, url, xps '.
|
||||
'FROM v_charactergroups '.
|
||||
'WHERE charactergroupsgroup_id = ? AND url = ?',
|
||||
'is',
|
||||
$groupsgroupId, $groupUrl
|
||||
|
|
|
|||
|
|
@ -43,8 +43,8 @@
|
|||
public function getCharactersForUser($userId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, charactertypes.name AS charactertype_name, charactertypes.url AS charactertypes_url, seminaries.id AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
|
||||
'FROM characters '.
|
||||
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.xps, charactertypes.name AS charactertype_name, charactertypes.url AS charactertypes_url, seminaries.id AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
|
||||
'FROM v_characters AS characters '.
|
||||
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
|
||||
'LEFT JOIN seminaries ON seminaries.id = charactertypes.seminary_id '.
|
||||
'WHERE user_id = ?',
|
||||
|
|
@ -54,6 +54,46 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Characters for a Seminary.
|
||||
*
|
||||
* @param int $seminaryId ID of the Seminary
|
||||
* @return array Characters
|
||||
*/
|
||||
public function getCharactersForSeminary($seminaryId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.user_id, characters.xps, charactertypes.name AS charactertype_name, charactertypes.url AS charactertypes_url, seminaries.id AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
|
||||
'FROM v_characters AS characters '.
|
||||
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
|
||||
'LEFT JOIN seminaries ON seminaries.id = charactertypes.seminary_id '.
|
||||
'WHERE seminaries.id = ?',
|
||||
'i',
|
||||
$seminaryId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Characters for a Character group.
|
||||
*
|
||||
* @param int $groupId ID of the Character group
|
||||
* @return array Characters
|
||||
*/
|
||||
public function getCharactersForGroup($groupId)
|
||||
{
|
||||
return $this->db->query(
|
||||
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.user_id, characters.xps, charactertypes.name AS charactertype_name, charactertypes.url AS charactertypes_url '.
|
||||
'FROM v_characters AS characters '.
|
||||
'LEFT JOIN characters_charactergroups ON characters_charactergroups.character_id = characters.id '.
|
||||
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
|
||||
'WHERE characters_charactergroups.charactergroup_id = ?',
|
||||
'i',
|
||||
$groupId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the character of a user for a Seminary.
|
||||
*
|
||||
|
|
@ -65,8 +105,8 @@
|
|||
public function getCharacterForUserAndSeminary($userId, $seminaryId)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, charactertypes.name AS charactertype_name, charactertypes.url AS charactertypes_url '.
|
||||
'FROM characters '.
|
||||
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.user_id, characters.xps, charactertypes.name AS charactertype_name, charactertypes.url AS charactertypes_url '.
|
||||
'FROM v_characters AS characters '.
|
||||
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
|
||||
'WHERE characters.user_id = ? AND charactertypes.seminary_id = ?',
|
||||
'ii',
|
||||
|
|
@ -80,6 +120,33 @@
|
|||
return $data[0];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a Character by its Url.
|
||||
*
|
||||
* @throws IdNotFoundException
|
||||
* @param int $seminaryId ID of the Seminary
|
||||
* @param string $characterUrl URL-name of the Character
|
||||
* @return array Character data
|
||||
*/
|
||||
public function getCharacterByUrl($seminaryId, $characterUrl)
|
||||
{
|
||||
$data = $this->db->query(
|
||||
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.user_id, characters.xps, charactertypes.name AS charactertype_name, charactertypes.url AS charactertypes_url '.
|
||||
'FROM v_characters AS characters '.
|
||||
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
|
||||
'WHERE charactertypes.seminary_id = ? AND characters.url = ?',
|
||||
'is',
|
||||
$seminaryId, $characterUrl
|
||||
);
|
||||
if(empty($data)) {
|
||||
throw new \nre\exceptions\IdNotFoundException($characterUrl);
|
||||
}
|
||||
|
||||
|
||||
return $data[0];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,19 @@
|
|||
<h4><a href="<?=$linker->link(array('groupsgroup',$seminary['url'],$groupsgroup['url']),1)?>"><?=$groupsgroup['name']?></a></h4>
|
||||
<h5><?=$group['name']?></h5>
|
||||
|
||||
<section>
|
||||
XPs: <?=$group['xps']?>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h1><?=_('Characters')?></h1>
|
||||
<ul>
|
||||
<?php foreach($characters as &$character) : ?>
|
||||
<li><a href="<?=$linker->link(array('characters','character',$seminary['url'],$character['url']))?>"><?=$character['name']?></a> (<?=$character['xps']?> XPs)</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h1><?=_('Quests')?></h1>
|
||||
<table>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
<ul>
|
||||
<?php foreach($groups as &$group) : ?>
|
||||
<li><a href="<?=$linker->link(array('group',$seminary['url'],$groupsgroup['url'],$group['url']),1)?>"><?=$group['name']?></a></li>
|
||||
<li><a href="<?=$linker->link(array('group',$seminary['url'],$groupsgroup['url'],$group['url']),1)?>"><?=$group['name']?> (<?=$group['xps']?> XPs)</a></li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
|
||||
|
|
|
|||
19
views/html/characters/character.tpl
Normal file
19
views/html/characters/character.tpl
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<h1><?=$seminary['title']?></h1>
|
||||
<h2><?=_('Characters')?></h2>
|
||||
<h3><?=$character['name']?></h3>
|
||||
|
||||
<section>
|
||||
<p>
|
||||
XPs: <?=$character['xps']?><br />
|
||||
<?=_('User')?>: <a href="<?=$linker->link(array('users','user',$user['url']))?>"><?=$user['username']?></a><br />
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h1><?=_('Character Groups')?></h1>
|
||||
<ul>
|
||||
<?php foreach($groups as &$group) : ?>
|
||||
<li><a href="<?=$linker->link(array('charactergroups','group',$seminary['url'],$group['charactergroupsgroup_url'],$group['url']))?>"><?=$group['name']?></a> (<?=$group['xps']?> XPs)</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
</section>
|
||||
8
views/html/characters/index.tpl
Normal file
8
views/html/characters/index.tpl
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<h1><?=$seminary['title']?></h1>
|
||||
<h2><?=_('Characters')?></h2>
|
||||
|
||||
<ul>
|
||||
<?php foreach($characters as &$character) : ?>
|
||||
<li><a href="<?=$linker->link(array('character',$seminary['url'],$character['url']),1)?>"><?=$character['name']?></a> (<?=$character['xps']?> XPs)</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
|
|
@ -17,6 +17,9 @@
|
|||
<?php if(!is_null($loggedUser)) : ?>
|
||||
<div id="user">
|
||||
<a href="<?=$linker->link(array('users',$loggedUser['url']))?>"><?=$loggedUser['username']?></a>
|
||||
<?php if(!is_null($loggedCharacter)) : ?>
|
||||
<?=_('as')?> <a href="<?=$linker->link(array('characters','character',$loggedSeminary['url'],$loggedCharacter['url']))?>"><?=$loggedCharacter['name']?></a> (<?=$loggedCharacter['xps']?> XPs)
|
||||
<?php endif ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
</header>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
<li><a href="<?=$linker->link('delete', 3)?>"><?=_('Delete seminary')?></a></li>
|
||||
</nav>
|
||||
<nav>
|
||||
<li><a href="<?=$linker->link(array('characters',$seminary['url']))?>"><?=_('Characters')?></a></li>
|
||||
<li><a href="<?=$linker->link(array('charactergroups',$seminary['url']))?>"><?=_('Character Groups')?></a></li>
|
||||
</nav>
|
||||
<p>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<h3><?=_('Characters')?></h3>
|
||||
<ul>
|
||||
<?php foreach($characters as &$character) : ?>
|
||||
<li><?=$character['name']?> (<a href="<?=$linker->link(array('seminaries',$character['seminary_url']))?>"><?=$character['seminary_title']?></a>)</li>
|
||||
<li><a href="<?=$linker->link(array('characters','character',$character['seminary_url'],$character['url']))?>"><?=$character['name']?></a> (<?=$character['xps']?> XPs) (<a href="<?=$linker->link(array('seminaries',$character['seminary_url']))?>"><?=$character['seminary_title']?></a>)</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue