store the total amount of achievable XPs for a Questgroup in the database instead of calculating it every time (Issue #281)

This commit is contained in:
coderkun 2014-05-15 18:17:51 +02:00
commit ea828a88dc
10 changed files with 211 additions and 209 deletions

View file

@ -35,7 +35,8 @@
'seminary' => array('admin', 'moderator', 'user'),
'create' => array('admin', 'moderator'),
'edit' => array('admin', 'moderator', 'user'),
'delete' => array('admin', 'moderator', 'user')
'delete' => array('admin', 'moderator', 'user'),
'calculatexps' => array('admin', 'moderator', 'user')
);
/**
* User seminary permissions
@ -45,7 +46,8 @@
public $seminaryPermissions = array(
'seminary' => array('admin', 'moderator', 'user', 'guest'),
'edit' => array('admin'),
'delete' => array('admin')
'delete' => array('admin'),
'calculatexps' => array('admin', 'moderator')
);
@ -134,10 +136,8 @@
$questgroup['text'] = \hhu\z\Utils::shortenString($text, 100, 120).' …';
}
// Get cumulated data
$data = $this->Questgroups->getCumulatedDataForQuestgroup($questgroup['id'], $character['id']);
$questgroup['xps'] = $data['xps'];
$questgroup['character_xps'] = $data['character_xps'];
// Get Character XPs
$questgroup['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($questgroup['id'], $character['id']);
// Get Media
$questgroup['picture'] = null;
@ -264,6 +264,38 @@
$this->set('seminary', $seminary);
}
/**
* Action: calculatexps.
*
* (Re-) Calculate the amount of achievable XPs for a Seminary.
*
* @throws IdNotFoundException
* @param string $seminaryUrl URL-Title of a Seminary
*/
public function calculatexps($seminaryUrl)
{
// Get Seminary
$seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl);
// Questgrouphierarchy and Questgroups
$questgroupshierarchy = $this->Questgroupshierarchy->getHierarchyOfSeminary($seminary['id']);
foreach($questgroupshierarchy as &$hierarchy)
{
// Get Questgroups
$hierarchy['questgroups'] = $this->Questgroups->getQuestgroupsForHierarchy($hierarchy['id']);
foreach($hierarchy['questgroups'] as &$questgroup)
{
// Calculate achievable XPs
$this->Questgroups->calculateXPsForQuestgroup($questgroup['id']);
}
}
// Redirect to Questgroup
$this->redirect($this->linker->link(array('seminary', $seminary['url']), 1));
}
}
?>