add some checks to not throw IdNotFound exception for empty Quests (fixes #9)

This commit is contained in:
oliver 2015-04-09 15:52:11 +02:00
commit dec602da34
7 changed files with 68 additions and 52 deletions

View file

@ -99,7 +99,7 @@
{
// Get Boss-Fight
$fight = $this->Bossfight->getBossFight($quest['id']);
if(!is_null($fight['boss_seminarymedia_id'])) {
if(!is_null($fight) && !is_null($fight['boss_seminarymedia_id'])) {
$fight['bossmedia'] = $this->Media->getSeminaryMediaById($fight['boss_seminarymedia_id']);
}

View file

@ -71,7 +71,6 @@
/**
* Get a Boss-Fight.
*
* @throws \nre\exceptions\IdNotFoundException
* @param int $questId ID of Quest
* @return array Boss-Fight data
*/
@ -84,12 +83,11 @@
'i',
$questId
);
if(empty($data)) {
throw new \nre\exceptions\IdNotFoundException($questId);
if(!empty($data)) {
return $data[0];
}
return $data[0];
return null;
}

View file

@ -1,34 +1,36 @@
<?php if(!is_null($fight)) : ?>
<div class="cf">
<section class="opponent">
<p class="fwb"><?=$character['name']?></p>
<p class="portrait"><img src="<?=$linker->link(array('media','avatar',$seminary['url'],$character['charactertype_url'],$character['xplevel']))?>" class="hero" /></p>
<p>
<?php if($lives['character'] > 0) : ?>
<?php foreach(range(1,$lives['character']) as $i) : ?>
<i class="fa fa-heart fa-fw"></i>
<?php endforeach ?>
<?php else : ?>
<?=_('lost')?>
<?php endif ?>
</p>
</section>
<section class="opponent">
<p class="fwb"><?=$fight['bossname']?></p>
<p class="portrait"><img src="<?=$linker->link(array('media','seminary',$seminary['url'],$fight['bossmedia']['url']))?>" class="boss" /></p>
<p>
<?php if($lives['boss'] > 0) : ?>
<?php foreach(range(1,$lives['boss']) as $i) : ?>
<i class="fa fa-heart fa-fw"></i>
<?php endforeach ?>
<?php else : ?>
<b><?=_('lost')?></b>
<?php endif ?>
</p>
</section>
<section class="opponent">
<p class="fwb"><?=$character['name']?></p>
<p class="portrait"><img src="<?=$linker->link(array('media','avatar',$seminary['url'],$character['charactertype_url'],$character['xplevel']))?>" class="hero" /></p>
<p>
<?php if($lives['character'] > 0) : ?>
<?php foreach(range(1,$lives['character']) as $i) : ?>
<i class="fa fa-heart fa-fw"></i>
<?php endforeach ?>
<?php else : ?>
<?=_('lost')?>
<?php endif ?>
</p>
</section>
<section class="opponent">
<p class="fwb"><?=$fight['bossname']?></p>
<p class="portrait"><img src="<?=$linker->link(array('media','seminary',$seminary['url'],$fight['bossmedia']['url']))?>" class="boss" /></p>
<p>
<?php if($lives['boss'] > 0) : ?>
<?php foreach(range(1,$lives['boss']) as $i) : ?>
<i class="fa fa-heart fa-fw"></i>
<?php endforeach ?>
<?php else : ?>
<b><?=_('lost')?></b>
<?php endif ?>
</p>
</section>
</div>
<?php endif ?>
<?php if(!is_null($stage)) : ?>
<p><?=\hhu\z\Utils::t($stage['text'])?></p>
<form method="post" action="<?=$linker->link(null,0,false,null,true,'task')?>">
<input type="hidden" name="stage" value="<?=$stage['id']?>" />
<ul class="bossfight cf">
@ -49,3 +51,4 @@
<?php endif ?>
</ul>
</form>
<?php endif ?>

View file

@ -131,18 +131,26 @@
{
// Get Drag&Drop field
$dndField = $this->Dragndrop->getDragndrop($quest['id']);
$dndField['media'] = $this->Media->getSeminaryMediaById($dndField['questmedia_id']);
if(!is_null($dndField) && !is_null($dndField['questmedia_id'])) {
$dndField['media'] = $this->Media->getSeminaryMediaById($dndField['questmedia_id']);
}
// Get Drags
$drags = array();
$dragsByIndex = $this->Dragndrop->getDrags($dndField['quest_id']);
foreach($dragsByIndex as &$drag) {
$drag['media'] = $this->Media->getSeminaryMediaById($drag['questmedia_id']);
$drags[$drag['id']] = $drag;
}
if(!is_null($dndField))
{
$dragsByIndex = $this->Dragndrop->getDrags($dndField['quest_id']);
foreach($dragsByIndex as &$drag) {
$drag['media'] = $this->Media->getSeminaryMediaById($drag['questmedia_id']);
$drags[$drag['id']] = $drag;
}
}
// Get Drops
$drops = $this->Dragndrop->getDrops($dndField['quest_id']);
$drops = array();
if(!is_null($dndField)) {
$this->Dragndrop->getDrops($dndField['quest_id']);
}
// Get Character answers
if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']) || $this->request->getGetParam('status') == 'solved')

View file

@ -172,18 +172,19 @@
// Get current question
$question = $this->Multiplechoice->getQuestionOfQuest($quest['id'], $pos);
// Get answers
$question['answers'] = $this->Multiplechoice->getAnswersOfQuestion($question['id']);
// Get previous user answers
if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']) || $this->request->getGetParam('status') == 'solved')
{
foreach($question['answers'] as &$answer) {
$answer['useranswer'] = $this->Multiplechoice->getCharacterSubmission($answer['id'], $character['id']);
}
}
if(!is_null($question))
{
// Get answers
$question['answers'] = $this->Multiplechoice->getAnswersOfQuestion($question['id']);
// Get previous user answers
if($this->request->getGetParam('show-answer') == 'true' || !$this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']) || $this->request->getGetParam('status') == 'solved')
{
foreach($question['answers'] as &$answer) {
$answer['useranswer'] = $this->Multiplechoice->getCharacterSubmission($answer['id'], $character['id']);
}
}
}
// Pass data to view

View file

@ -134,12 +134,16 @@
$correctAnswersCount += $this->isMatching($field['regex'], $field['answer']);
}
}
// Show count
$showcount = (count($this->request->getGetParams()) > 1);
// Pass data to view
$this->set('task', $task);
$this->set('fields', $fields);
$this->set('count', $correctAnswersCount);
$this->set('showcount', $showcount);
}

View file

@ -9,6 +9,8 @@
<?php endforeach ?>
<?=$t->t(mb_substr($task['text'], $posStart, mb_strlen($task['text'], 'UTF-8')-$posStart, 'UTF-8'))?>
</p>
<?php if($showcount) : ?>
<p><?=sprintf(_('You filled %d of %d fields correctly'), $count, count($fields))?>.</p>
<?php endif ?>
<input type="submit" name="submit" value="<?=_('solve')?>" />
</form>