add Character titles and let Characters choose gender and title

This commit is contained in:
oliver 2016-03-26 15:46:37 +01:00
commit 320a583753
6 changed files with 354 additions and 36 deletions

View file

@ -44,7 +44,7 @@
{
return $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, character.gender, characters.charactertitle_id, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
'seminaries.id AS seminary_id, seminaries.url AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
@ -99,7 +99,7 @@
{
return $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
'seminaries.id AS seminary_id, seminaries.url AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
@ -141,7 +141,7 @@
return $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
'seminaries.id AS seminary_id, seminaries.url AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
@ -166,7 +166,7 @@
case 'role':
return $this->db->query(
'SELECT DISTINCT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
'seminaries.id AS seminary_id, seminaries.url AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
@ -188,7 +188,7 @@
default:
return $this->db->query(
'SELECT DISTINCT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
'seminaries.id AS seminary_id, seminaries.url AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
@ -222,7 +222,7 @@
{
return $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel '.
'FROM characters '.
@ -250,7 +250,7 @@
{
$data = $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel '.
'FROM characters '.
@ -282,7 +282,7 @@
{
$data = $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel '.
'FROM characters '.
@ -313,7 +313,7 @@
{
$data = $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel '.
'FROM characters '.
@ -325,7 +325,7 @@
$characterId
);
if(empty($data)) {
throw new \nre\exceptions\IdNotFoundException($characterUrl);
throw new \nre\exceptions\IdNotFoundException($characterId);
}
@ -342,7 +342,7 @@
public function getCharactersWithRole($characterrole)
{
return $this->db->query(
'SELECT characters.id, characters.created, characters.user_id, characters.name, characters.url '.
'SELECT characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id '.
'FROM characters '.
'LEFT JOIN characters_characterroles ON characters_characterroles.character_id = characters.id '.
'LEFT JOIN characterroles ON characterroles.id = characters_characterroles.characterrole_id '.
@ -366,7 +366,7 @@
{
return $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
'count(DISTINCT achievement_id) AS c '.
@ -433,7 +433,7 @@
{
$data = $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel '.
'FROM characters '.
@ -469,7 +469,7 @@
{
return $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel '.
'FROM characters '.
@ -498,7 +498,7 @@
{
return $data = $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
'quests_characters.created AS submission_created '.
@ -529,7 +529,7 @@
{
return $data = $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
'quests_characters.created AS submission_created '.
@ -560,7 +560,7 @@
{
return $data = $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps,cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
'quests_characters.created AS submission_created '.
@ -592,7 +592,7 @@
{
return $this->db->query(
'SELECT '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'characters.id, characters.created, characters.user_id, characters.name, characters.url, characters.gender, characters.charactertitle_id, cache_characters.xps, cache_characters.quest_xps, cache_characters.avatar_id, '.
'charactertypes.id AS charactertype_id, charactertypes.name AS charactertype_name, charactertypes.url AS charactertype_url, '.
'xplevels.id AS xplevel_id, xplevels.level AS xplevel, '.
'seminaries.id AS seminary_id, seminaries.url AS seminary_url, seminaries.title AS seminary_title, seminaries.url AS seminary_url '.
@ -636,23 +636,25 @@
/**
* Create a new Character.
*
* @param int $userId User-ID that creates the new character
* @param int $charactertypeId ID of type of new Character
* @param int $userId User-ID that creates the new character
* @param int $charactertypeId ID of type of new Character
* @param string $characterName Name for the new Character
* @return int ID of Character
* @param int $gender Gender of new Character
* @return int ID of Character
*/
public function createCharacter($userId, $charactertypeId, $characterName)
public function createCharacter($userId, $charactertypeId, $characterName, $gender)
{
$this->db->query(
'INSERT INTO characters '.
'(user_id, charactertype_id, name, url) '.
'(user_id, charactertype_id, name, url, gender) '.
'VALUES '.
'(?, ?, ?, ?)',
'iiss',
'(?, ?, ?, ?, ?)',
'iissi',
$userId,
$charactertypeId,
$characterName,
\nre\core\Linker::createLinkParam($characterName)
\nre\core\Linker::createLinkParam($characterName),
$gender
);
@ -663,20 +665,24 @@
/**
* Edit a new Character.
*
* @param int $characterId ID of the Character to edit
* @param int $charactertypeId ID of new type of Character
* @param int $characterId ID of the Character to edit
* @param int $charactertypeId ID of new type of Character
* @param string $characterName New name for Character
* @param int $gender New gender of Character
* @param int $charactertitleId ID of new Character title
*/
public function editCharacter($characterId, $charactertypeId, $characterName)
public function editCharacter($characterId, $charactertypeId, $characterName, $gender, $charactertitleId)
{
$this->db->query(
'UPDATE characters '.
'SET charactertype_id = ?, name = ?, url = ? '.
'SET charactertype_id = ?, name = ?, url = ?, gender = ?, charactertitle_id = ? '.
'WHERE id = ?',
'issi',
'issiii',
$charactertypeId,
$characterName,
\nre\core\Linker::createLinkParam($characterName),
$gender,
$charactertitleId,
$characterId
);
}

View file

@ -0,0 +1,175 @@
<?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\models;
/**
* Model to interact with Charactertitles-table.
*
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
*/
class CharactertitlesModel extends \hhu\z\Model
{
/**
* Construct a new CharactertitlesModel.
*/
public function __construct()
{
parent::__construct();
}
/**
* Get a Character title by its ID.
*
* @throws \nre\exceptions\IdNotFoundException
* @param int $titleId ID of title
* @return array Title data
*/
public function getTitleById($titleId)
{
$data = $this->db->query(
'SELECT id, title_male, title_female '.
'FROM charactertitles '.
'WHERE id = ?',
'i',
$titleId
);
if(empty($data)) {
throw new \nre\exceptions\IdNotFoundException($titleId);
}
return $data[0];
}
/**
* Get all titles a Character owns.
*
* @param int $characterId ID of Character to get titles for
* @return array List of title data
*/
public function getTitlesForCharacter($characterId)
{
return $this->db->query(
'SELECT charactertitles.id, title_male, title_female '.
'FROM characters_charactertitles '.
'INNER JOIN charactertitles ON charactertitles.id = characters_charactertitles.charactertitle_id '.
'WHERE characters_charactertitles.character_id = ? '.
'ORDER BY title_male, title_female ',
'i',
$characterId
);
}
// TODO addTitleToCharacter
/**
* TODO Check if a Character title already exists.
*
* @param string $title Character title to check
* @param int $seminaryId ID of Seminary
* @param int $questId Do not check this ID (for editing)
* @return boolean Whether Character title exists or not
*/
public function characterTitleExists($titleMale, $titleFemale, $seminaryId, $titleId=null)
{
$data = $this->db->query(
'SELECT id '.
'FROM charactertitles '.
'WHERE seminary_id = ? AND (title_male = ? OR title_female = ?)',
'iss',
$seminaryId,
$titleMale,
$titleFemale
//\nre\core\Linker::createLinkParam($title)
);
return (!empty($data) && (is_null($titleId) || $titleId != $data[0]['id']));
}
/**
* TODO Create a new Character title.
*
* @param int $userId User-ID that creates the new title
* @param int $seminaryId ID of Questgroup
* @param string $titleMale Title for male Characters
* @param string $titleFemale Title for female Characters
* @return int ID of new Character title
*/
public function createTitle($userId, $seminaryId, $titleMale, $titleFemale)
{
$this->db->query(
'INSERT INTO charactertitles '.
'(created_user_id, seminary_id, title_male, title_female) '.
'VALUES '.
'(?, ?, ?, ?)',
'iiss',
$userId, $seminaryId,
$titleMale, $titleFemale
//\nre\core\Linker::createLinkParam($title),
);
return $this->db->getInsertId();
}
/**
* TODO Edit a Character title.
*
* @param int $titleId ID of Character title to edit
* @param string $titleMale Title for male Characters
* @param string $titleFemale Title for female Characters
*/
public function editTitle($titleId, $titleMale, $titleFemale)
{
$this->db->query(
'UPDATE charactertitles '.
'SET title_male = ?, title_female = ? '.
'WHERE id = ?',
'ssi',
$titleMale,
$titleFemale,
//\nre\core\Linker::createLinkParam($title),
$titleId
);
}
/**
* TODO Delete a Character title.
*
* @param int $titleId ID of Character title to delete
*/
public function deleteTitle($titleId)
{
$this->db->query(
'DELETE FROM charactertitles '.
'WHERE id = ?',
'i',
$titleId
);
}
}
?>