improve Questtype ?submit? and store additional data for Character answers

This commit is contained in:
coderkun 2014-04-23 15:08:53 +02:00
commit 95837803a1
14 changed files with 302 additions and 38 deletions

View file

@ -24,7 +24,7 @@
*
* @var array
*/
public $models = array('quests');
public $models = array('quests', 'uploads', 'users');
@ -41,11 +41,8 @@
*/
public function saveAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers)
{
// Get already submitted answer
$characterSubmission = $this->Submit->getCharacterSubmission($quest['id'], $character['id']);
// Save answer
if(is_null($characterSubmission) && array_key_exists('answers', $_FILES))
if(array_key_exists('answers', $_FILES))
{
$answer = $_FILES['answers'];
@ -78,8 +75,17 @@
);
}
// Create filename
$filename = sprintf(
'%s,%s,%s.%s',
$character['url'],
mb_substr($quest['url'], 0, 32),
date('Ymd-His'),
mb_substr(mb_substr($answer['name'], strrpos($answer['name'], '.')+1), 0, 4)
);
// Save file
if(!$this->Submit->setCharacterSubmission($seminary['id'], $quest['id'], $this->Auth->getUserId(), $character['id'], $answer)) {
if(!$this->Submit->setCharacterSubmission($seminary['id'], $quest['id'], $this->Auth->getUserId(), $character['id'], $answer, $filename)) {
throw new \hhu\z\exceptions\SubmissionNotValidException(
new \hhu\z\exceptions\FileUploadException(error_get_last()['message'])
);
@ -88,6 +94,21 @@
}
/**
* Save additional data for the answers of a Character for a Quest.
*
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
* @param array $data Additional (POST-) data
*/
public function saveDataForCharacterAnswers($seminary, $questgroup, $quest, $character, $data)
{
$this->Submit->addCommentForCharacterAnswer($this->Auth->getUserId(), $data['submission_id'], $data['comment']);
}
/**
* Check if answers of a Character for a Quest match the correct ones.
*
@ -119,19 +140,38 @@
*/
public function quest($seminary, $questgroup, $quest, $character, $exception)
{
// Answer (Submission)
$characterSubmission = $this->Submit->getCharacterSubmission($quest['id'], $character['id']);
// Answers (Submissions)
$characterSubmissions = $this->Submit->getCharacterSubmissions($quest['id'], $character['id']);
foreach($characterSubmissions as &$submission)
{
$submission['upload'] = $this->Uploads->getSeminaryuploadById($submission['upload_id']);
$submission['comments'] = $this->Submit->getCharacterSubmissionComments($submission['id']);
foreach($submission['comments'] as &$comment)
{
try {
$comment['user'] = $this->Users->getUserById($comment['created_user_id']);
$comment['user']['character'] = $this->Characters->getCharacterForUserAndSeminary($comment['user']['id'], $seminary['id']);
}
catch(\nre\exceptions\IdNotFoundException $e) {
}
}
}
// Has Character already solved Quest?
$solved = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']);
// Last Quest status for Character
$lastStatus = $this->Quests->getLastQuestStatus($quest['id'], $character['id']);
// Get allowed mimetypes
$mimetypes = $this->Submit->getAllowedMimetypes($seminary['id']);
// Pass data to view
$this->set('submission', $characterSubmission);
$this->set('seminary', $seminary);
$this->set('submissions', $characterSubmissions);
$this->set('solved', $solved);
$this->set('lastStatus', $lastStatus);
$this->set('mimetypes', $mimetypes);
$this->set('exception', $exception);
}
@ -149,15 +189,30 @@
*/
public function submission($seminary, $questgroup, $quest, $character)
{
// Get Character submission
$submission = $this->Submit->getCharacterSubmission($quest['id'], $character['id']);
// Get Character submissions
$submissions = $this->Submit->getCharacterSubmissions($quest['id'], $character['id']);
foreach($submissions as &$submission)
{
$submission['upload'] = $this->Uploads->getSeminaryuploadById($submission['upload_id']);
$submission['comments'] = $this->Submit->getCharacterSubmissionComments($submission['id']);
foreach($submission['comments'] as &$comment)
{
try {
$comment['user'] = $this->Users->getUserById($comment['created_user_id']);
$comment['user']['character'] = $this->Characters->getCharacterForUserAndSeminary($comment['user']['id'], $seminary['id']);
}
catch(\nre\exceptions\IdNotFoundException $e) {
}
}
}
// Status
$solved = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']);
// Pass data to view
$this->set('submission', $submission);
$this->set('seminary', $seminary);
$this->set('submissions', $submissions);
$this->set('solved', $solved);
}