1) update Quest stati

2) add SubmissionNotValidException and -handling for Quests
This commit is contained in:
coderkun 2014-04-04 13:26:49 +02:00
commit f3fca171e2
11 changed files with 268 additions and 108 deletions

View file

@ -254,6 +254,88 @@
return 1;
}
/**
* Get Characters that solved a Quest.
*
* @param int $questId ID of Quest to get Characters for
* @return array Characters data
*/
public function getCharactersSolvedQuest($questId)
{
return $data = $this->db->query(
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.user_id, characters.xps, characters.xplevel, charactertypes.name AS charactertype_name, charactertypes.url AS charactertypes_url, media.url AS avatar_url, media.description AS avatar_description '.
'FROM v_characters AS characters '.
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
'LEFT JOIN avatars ON avatars.id = characters.avatar_id '.
'LEFT JOIN avatarpictures ON avatarpictures.media_id = avatars.avatarpicture_id '.
'LEFT JOIN media ON media.id = avatarpictures.media_id '.
'WHERE EXISTS ('.
'SELECT character_id FROM quests_characters WHERE character_id = characters.id AND quest_id = ? AND status = ?'.
')',
'ii',
$questId,
QuestsModel::QUEST_STATUS_SOLVED
);
}
/**
* Get Characters that did not solv a Quest.
*
* @param int $questId ID of Quest to get Characters for
* @return array Characters data
*/
public function getCharactersUnsolvedQuest($questId)
{
return $data = $this->db->query(
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.user_id, characters.xps, characters.xplevel, charactertypes.name AS charactertype_name, charactertypes.url AS charactertypes_url, media.url AS avatar_url, media.description AS avatar_description '.
'FROM v_characters AS characters '.
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
'LEFT JOIN avatars ON avatars.id = characters.avatar_id '.
'LEFT JOIN avatarpictures ON avatarpictures.media_id = avatars.avatarpicture_id '.
'LEFT JOIN media ON media.id = avatarpictures.media_id '.
'WHERE EXISTS ('.
'SELECT character_id FROM quests_characters WHERE character_id = characters.id AND quest_id = ? AND status = ?'.
') AND NOT EXISTS ('.
'SELECT character_id FROM quests_characters WHERE character_id = characters.id AND quest_id = ? AND status = ?'.
')',
'iiii',
$questId, QuestsModel::QUEST_STATUS_UNSOLVED,
$questId, QuestsModel::QUEST_STATUS_SOLVED
);
}
/**
* Get Characters that sent a submission for a Quest.
*
* @param int $questId ID of Quest to get Characters for
* @return array Characters data
*/
public function getCharactersSubmittedQuest($questId)
{
return $data = $this->db->query(
'SELECT characters.id, characters.created, characters.charactertype_id, characters.name, characters.url, characters.user_id, characters.xps, characters.xplevel, charactertypes.name AS charactertype_name, charactertypes.url AS charactertypes_url, media.url AS avatar_url, media.description AS avatar_description '.
'FROM v_characters AS characters '.
'LEFT JOIN charactertypes ON charactertypes.id = characters.charactertype_id '.
'LEFT JOIN avatars ON avatars.id = characters.avatar_id '.
'LEFT JOIN avatarpictures ON avatarpictures.media_id = avatars.avatarpicture_id '.
'LEFT JOIN media ON media.id = avatarpictures.media_id '.
'WHERE EXISTS ('.
'SELECT character_id FROM quests_characters WHERE character_id = characters.id AND quest_id = ? AND status = ?'.
') AND NOT EXISTS ('.
'SELECT character_id FROM quests_characters WHERE character_id = characters.id AND quest_id = ? AND status = ?'.
') AND NOT EXISTS ('.
'SELECT character_id FROM quests_characters WHERE character_id = characters.id AND quest_id = ? AND status = ?'.
')',
'iiiiii',
$questId, QuestsModel::QUEST_STATUS_SUBMITTED,
$questId, QuestsModel::QUEST_STATUS_UNSOLVED,
$questId, QuestsModel::QUEST_STATUS_SOLVED
);
}
}
?>

View file

@ -24,19 +24,25 @@
*
* @var int;
*/
const QUEST_STATUS_ENTERED = 1;
const QUEST_STATUS_ENTERED = 0;
/**
* Quest-status: Solved
* Quest-status: submitted
*
* @var int;
*/
const QUEST_STATUS_SOLVED = 0;
const QUEST_STATUS_SUBMITTED = 1;
/**
* Quest-status: Unsolved
*
* @var int;
*/
const QUEST_STATUS_UNSOLVED = -1;
const QUEST_STATUS_UNSOLVED = 2;
/**
* Quest-status: Solved
*
* @var int;
*/
const QUEST_STATUS_SOLVED = 3;
@ -184,14 +190,14 @@
/**
* Mark a Quest as solved for a Character.
* Mark a Quest as submitted for a Character.
*
* @param int $questId ID of Quest to mark as solved
* @param int $characterId ID of Character that solved the Quest
* @param int $questId ID of Quest to mark as unsolved
* @param int $characterId ID of Character that unsolved the Quest
*/
public function setQuestSolved($questId, $characterId)
public function setQuestSubmitted($questId, $characterId)
{
$this->setQuestStatus($questId, $characterId, static::QUEST_STATUS_SOLVED);
$this->setQuestStatus($questId, $characterId, static::QUEST_STATUS_SUBMITTED);
}
@ -207,6 +213,18 @@
}
/**
* Mark a Quest as solved for a Character.
*
* @param int $questId ID of Quest to mark as solved
* @param int $characterId ID of Character that solved the Quest
*/
public function setQuestSolved($questId, $characterId)
{
$this->setQuestStatus($questId, $characterId, static::QUEST_STATUS_SOLVED, false);
}
/**
* Determine if the given Character has entered a Quest.
*
@ -279,48 +297,6 @@
}
/**
* Get Characters that solved a Quest.
*
* @param int $questId ID of Quest to get Characters for
* @return array Characters data
*/
public function getCharactersSolvedQuest($questId)
{
return $data = $this->db->query(
'SELECT character_id, created, text '.
'FROM questtypes_submit_characters '.
'WHERE quest_id = ? AND EXISTS ('.
'SELECT character_id FROM quests_characters WHERE quest_id = questtypes_submit_characters.quest_id AND status = ?'.
')',
'ii',
$questId,
static::QUEST_STATUS_SOLVED
);
}
/**
* Get Characters that did not solved a Quest.
*
* @param int $questId ID of Quest to get Characters for
* @return array Characters data
*/
public function getCharactersUnsolvedQuest($questId)
{
return $data = $this->db->query(
'SELECT character_id, created, text '.
'FROM questtypes_submit_characters '.
'WHERE quest_id = ? AND NOT EXISTS ('.
'SELECT character_id FROM quests_characters WHERE quest_id = questtypes_submit_characters.quest_id AND status = ?'.
')',
'ii',
$questId,
static::QUEST_STATUS_SOLVED
);
}
/**