* @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\models; /** * Model of the SeminariesAgent to list registered seminaries. * * @author Oliver Hanraths */ class SeminariesModel extends \hhu\z\Model { /** * Required models * * @var array */ public $models = array('questgroupshierarchy', 'questgroups'); /** * Construct a new SeminariesModel. */ public function __construct() { parent::__construct(); } /** * Get registered seminaries. * * @return array Seminaries */ public function getSeminaries() { // Get seminaries return $this->db->query( 'SELECT id, created, created_user_id, title, url, course, description, seminarymedia_id, charactergroups_seminarymedia_id, achievements_seminarymedia_id, library_seminarymedia_id '. 'FROM seminaries '. 'ORDER BY created DESC' ); } /** * Get a seminary and its data by its ID. * * @throws IdNotFoundException * @param string $seminaryId ID of a seminary * @return array Seminary */ public function getSeminaryById($seminaryId) { $seminary = $this->db->query( 'SELECT id, created, created_user_id, title, url, course, description, seminarymedia_id, charactergroups_seminarymedia_id, achievements_seminarymedia_id, library_seminarymedia_id '. 'FROM seminaries '. 'WHERE id = ?', 'i', $seminaryId ); if(empty($seminary)) { throw new \nre\exceptions\IdNotFoundException($seminaryId); } return $seminary[0]; } /** * Get a seminary and its data by its URL-title. * * @throws IdNotFoundException * @param string $seminaryUrl URL-Title of a seminary * @return array Seminary */ public function getSeminaryByUrl($seminaryUrl) { $seminary = $this->db->query( 'SELECT id, created, created_user_id, title, url, course, description, seminarymedia_id, charactergroups_seminarymedia_id, achievements_seminarymedia_id, library_seminarymedia_id '. 'FROM seminaries '. 'WHERE url = ?', 's', $seminaryUrl ); if(empty($seminary)) { throw new \nre\exceptions\IdNotFoundException($seminaryUrl); } return $seminary[0]; } /* * Calculate sum of XPs for a Seminary. * * @param int $seminaryId ID of Seminary * @return int Total sum of XPs */ public function getTotalXPs($seminaryId) { $xps = 0; // Questgroups $questgroupshierarchy = $this->Questgroupshierarchy->getHierarchyOfSeminary($seminaryId); foreach($questgroupshierarchy as &$hierarchy) { // Get Questgroups $questgroups = $this->Questgroups->getQuestgroupsForHierarchy($hierarchy['id']); foreach($questgroups as &$questgroup) { $xps += $questgroup['achievable_xps']; } } return $xps; } /** * Check if a Seminary title already exists. * * @param string $title Seminary title to check * @param int $seminaryId Do not check this ID (for editing) * @return boolean Whether Seminary title exists or not */ public function seminaryTitleExists($title, $seminaryId=null) { $data = $this->db->query( 'SELECT id '. 'FROM seminaries '. 'WHERE title = ? OR url = ?', 'ss', $title, \nre\core\Linker::createLinkParam($title) ); return (!empty($data) && (is_null($seminaryId) || $seminaryId != $data[0]['id'])); } /** * Create a new Seminary. * * @param int $userId ID of creating user * @param string $title Title of Seminary to create * @param string $course Course of Seminary * @param string $description Description of new Seminary * @return int ID of the newly created Seminary */ public function createSeminary($userId, $title, $course, $description) { $this->db->query( 'INSERT INTO seminaries '. '(created_user_id, title, url, course, description) '. 'VALUES '. '(?, ?, ?, ?, ?)', 'issss', $userId, $title, \nre\core\Linker::createLinkParam($title), $course, $description ); return $this->db->getInsertId(); } /** * Set the moodpic for a Seminary. * * @param int $seminaryId ID of Seminary to set moodpic for * @param int $mediaId ID of moodpic media */ public function setMoodpicForSeminary($seminaryId, $mediaId) { $this->db->query( 'UPDATE seminaries '. 'SET seminarymedia_id = ? '. 'WHERE id = ?', 'ii', $mediaId, $seminaryId ); } /** * Edit a seminary. * * @throws DatamodelException * @param int $seminaryId ID of Seminary to delete * @param string $title New title of Seminary * @param string $course New course of Seminary * @param string $description New description of Seminary */ public function editSeminary($seminaryId, $title, $course, $description) { $this->db->query( 'UPDATE seminaries '. 'SET title = ?, url = ?, course = ?, description = ? '. 'WHERE id = ?', 'ssssi', $title, \nre\core\Linker::createLinkParam($title), $course, $description, $seminaryId ); } /** * Delete a seminary. * * @param int $seminaryId ID of the seminary to delete */ public function deleteSeminary($seminaryId) { $this->db->query('DELETE FROM seminaries WHERE id = ?', 'i', $seminaryId); } } ?>