add cache-table for character data instead of using database view (solves issue #324)

This commit is contained in:
coderkun 2014-06-08 14:11:21 +02:00
commit b09d4abc06
6 changed files with 233 additions and 106 deletions

View file

@ -24,7 +24,7 @@
*
* @var array
*/
public $models = array('seminaries', 'characters', 'users', 'charactergroups', 'charactertypes', 'seminarycharacterfields', 'avatars', 'media', 'quests', 'questgroups', 'questtopics');
public $models = array('seminaries', 'characters', 'users', 'charactergroups', 'charactertypes', 'seminarycharacterfields', 'avatars', 'media', 'quests', 'questgroups', 'questtopics', 'xplevels');
/**
* Required components
*
@ -94,7 +94,7 @@
$characters = $this->Characters->getCharactersForSeminarySorted($seminary['id'], $sortorder, $limit, $offset);
foreach($characters as &$character)
{
$character['xplevel'] = $this->Characters->getXPLevelOfCharacters($character['id']);
$character['xplevel'] = $this->Xplevels->getXPLevelById($character['xplevel_id']);
$character['user'] = $this->Users->getUserById($character['user_id']);
$character['characterroles'] = array_map(function($r) { return $r['name']; }, $this->Characterroles->getCharacterrolesForCharacterById($character['id']));
$character['characterfields'] = array();
@ -137,8 +137,7 @@
// Get Character
$character = $this->Characters->getCharacterByUrl($seminary['id'], $characterUrl);
$character['quest_xps'] = $this->Characters->getQuestXPsOfCharacter($character['id']);
$character['xplevel'] = $this->Characters->getXPLevelOfCharacters($character['id']);
$character['xplevel'] = $this->Xplevels->getXPLevelById($character['xplevel_id']);
$character['rank'] = $this->Characters->getXPRank($seminary['id'], $character['xps']);
// Get User
@ -424,7 +423,7 @@
$characters = $this->Characters->getCharactersForSeminarySorted($seminary['id'], $sortorder);
foreach($characters as &$character)
{
$character['xplevel'] = $this->Characters->getXPLevelOfCharacters($character['id']);
$character['xplevel'] = $this->Xplevels->getXPLevelById($character['xplevel_id']);
$character['user'] = $this->Users->getUserById($character['user_id']);
$character['characterroles'] = array_map(function($r) { return $r['name']; }, $this->Characterroles->getCharacterrolesForCharacterById($character['id']));
$character['characterfields'] = array();

View file

@ -24,7 +24,7 @@
*
* @var array
*/
public $models = array('seminaries', 'questgroups', 'quests', 'questtexts', 'media', 'questtypes', 'questgroupshierarchy');
public $models = array('seminaries', 'questgroups', 'quests', 'questtexts', 'media', 'questtypes', 'questgroupshierarchy', 'xplevels');
/**
* User permissions
*
@ -638,7 +638,7 @@
$this->Quests->setQuestSolved($quest['id'], $character['id']);
// Notify of XP-level change
$newXPLevel = $this->Characters->getXPLevelOfCharacters($character['id']);
$newXPLevel = $this->Xplevels->getXPLevelById($character['xplevel_id']);
if($newXPLevel['level'] > $character['xplevel']) {
$this->Notification->addNotification(
\hhu\z\controllers\components\NotificationComponent::TYPE_LEVELUP,
@ -868,12 +868,13 @@
private function sendSubmissionMail($seminary, $questgroup, $quest, $character)
{
// Get system moderators
$moderators = $this->Users->getUsersWithRole('moderator');
$moderators = $this->Characters->getCharactersWithRole('moderator');
// Send notification mail
try {
foreach($moderators as &$moderator)
{
$user = $this->Users->getUserById($moderator['user_id']);
\hhu\z\Utils::sendMail(
$moderator['email'],
'charactersubmission',

View file

@ -25,7 +25,7 @@
*
* @var array
*/
public $models = array('characters', 'quests', 'questgroups', 'achievements', 'charactergroups', 'avatars', 'media');
public $models = array('characters', 'quests', 'questgroups', 'achievements', 'charactergroups', 'avatars', 'media', 'xplevels');
@ -49,7 +49,7 @@
if(is_null($character)) {
return;
}
$character['xplevel'] = $this->Characters->getXPLevelOfCharacters($character['id']);
$character['xplevel'] = $this->Xplevels->getXPLevelById($character['xplevel_id']);
$character['rank'] = $this->Characters->getXPRank($seminary['id'], $character['xps']);
// Get “last” Quest

View file

@ -36,7 +36,7 @@
*
* @var array
*/
public $models = array('users', 'userroles', 'characters', 'characterroles', 'avatars', 'media');
public $models = array('users', 'userroles', 'characters', 'characterroles', 'avatars', 'media', 'xplevels');
/**
* Required components
*
@ -116,7 +116,7 @@
$character['characterroles'] = array_map(function($a) { return $a['name']; }, $character['characterroles']);
// Level
$character['xplevel'] = $this->Characters->getXPLevelOfCharacters($character['id']);
$character['xplevel'] = $this->Xplevels->getXPLevelById($character['xplevel_id']);
// Avatar
$avatar = $this->Avatars->getAvatarById($character['avatar_id']);