pass Seminary, Questgroup, Quest and Character data to QuesttypeAgents

This commit is contained in:
coderkun 2014-03-22 13:31:59 +01:00
commit 4f1ec44c77
6 changed files with 128 additions and 88 deletions

View file

@ -32,22 +32,26 @@
/**
* Save the answers of a Character for a Quest.
*
* @param int $questId ID of Quest to save answers for
* @param int $characterId ID of Character to save answers of
* @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 $answers Character answers for the Quest
*/
public abstract function saveAnswersOfCharacter($questId, $characterId, $answers);
public abstract function saveAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers);
/**
* Check if answers of a Character for a Quest match the correct ones.
*
* @param int $questId ID of Quest to match answers for
* @param int $characterId ID of Character to match answers of
* @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 $answers Character answers for the Quest
* @return boolean True/false for a right/wrong answer or null for moderator evaluation
*/
public abstract function matchAnswersOfCharacter($questId, $characterId, $answers);
public abstract function matchAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers);
/**
@ -55,10 +59,12 @@
*
* Show the task of a Quest.
*
* @param int $questId ID of Quest to show
* @param int $characterId ID of Character
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
*/
public abstract function quest($questId, $characterId);
public abstract function quest($seminary, $questgroup, $quest, $character);
@ -67,10 +73,12 @@
*
* Show the submission of a Character for a Quest.
*
* @param int $questId ID of Quest to show submission for
* @param int $characterId ID of Character to show submission of
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
*/
public abstract function submission($questId, $characterId);
public abstract function submission($seminary, $questgroup, $quest, $character);

View file

@ -334,7 +334,7 @@
try {
// Generate request and response
$request = clone $this->request;
$response = $this->createQuesttypeResponse('quest', $quest['id'], $character['id']);
$response = $this->createQuesttypeResponse('quest', $seminary, $questgroup, $quest, $character);
// Load Questtype Agent
$questtypeAgent = $this->loadQuesttypeAgent($questtypeClassname, $request, $response);
@ -346,10 +346,10 @@
$answers = $this->request->getPostParam('answers');
// Save answers in database
$questtypeAgent->saveAnswersOfCharacter($quest['id'], $character['id'], $answers);
$questtypeAgent->saveAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers);
// Match answers with correct ones
$status = $questtypeAgent->matchAnswersofCharacter($quest['id'], $character['id'], $answers);
$status = $questtypeAgent->matchAnswersofCharacter($seminary, $questgroup, $quest, $character, $answers);
if($status === true)
{
// Mark Quest as solved
@ -418,7 +418,7 @@
try {
// Generate request and response
$request = clone $this->request;
$response = $this->createQuesttypeResponse('submission', $quest['id'], $character['id']);
$response = $this->createQuesttypeResponse('submission', $seminary, $questgroup, $quest, $character);
// Load Questtype Agent
$questtypeAgent = $this->loadQuesttypeAgent($questtypeClassname, $request, $response);

View file

@ -27,11 +27,13 @@
/**
* Save the answers of a Character for a Quest.
*
* @param int $questId ID of Quest to save answers for
* @param int $characterId ID of Character to save answers of
* @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 $answers Character answers for the Quest
*/
public function saveAnswersOfCharacter($questId, $characterId, $answers)
public function saveAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers)
{
// Do nothing
}
@ -40,12 +42,14 @@
/**
* Check if answers of a Character for a Quest match the correct ones.
*
* @param int $questId ID of Quest to match answers for
* @param int $characterId ID of Character to match answers of
* @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 $answers Character answers for the Quest
* @return boolean True/false for a right/wrong answer or null for moderator evaluation
*/
public function matchAnswersOfCharacter($questId, $characterId, $answers)
public function matchAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers)
{
// Set status
return true;
@ -57,10 +61,12 @@
*
* Show the task of a Quest.
*
* @param int $questId ID of Quest to show
* @param int $characterId ID of Character
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
*/
public function quest($questId, $characterId)
public function quest($seminary, $questgroup, $quest, $character)
{
// Nothing to do
}
@ -71,10 +77,12 @@
*
* Show the submission of a Character for a Quest.
*
* @param int $questId ID of Quest to show submission for
* @param int $characterId ID of Character to show submission of
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
*/
public function submission($questId, $characterId)
public function submission($seminary, $questgroup, $quest, $character)
{
// Nothing to do
}

View file

@ -26,20 +26,22 @@
/**
* Save the answers of a Character for a Quest.
*
* @param int $questId ID of Quest to save answers for
* @param int $characterId ID of Character to save answers of
* @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 $answers Character answers for the Quest
*/
public function saveAnswersOfCharacter($questId, $characterId, $answers)
public function saveAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers)
{
// Get questions
$questions = $this->Multiplechoice->getQuestionsOfQuest($questId);
$questions = $this->Multiplechoice->getQuestionsOfQuest($quest['id']);
// Save answers
foreach($questions as &$question)
{
$answer = (array_key_exists(intval($question['pos'])-1, $answers)) ? true : false;
$this->Multiplechoice->setCharacterSubmission($question['id'], $characterId, $answer);
$this->Multiplechoice->setCharacterSubmission($question['id'], $character['id'], $answer);
}
}
@ -47,14 +49,16 @@
/**
* Check if answers of a Character for a Quest match the correct ones.
*
* @param int $questId ID of Quest to match answers for
* @param int $characterId ID of Character to match answers of
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
* @return boolean True/false for a right/wrong answer or null for moderator evaluation
*/
public function matchAnswersOfCharacter($questId, $characterId, $answers)
public function matchAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers)
{
// Get right answers
$tickQuestions = $this->Multiplechoice->getTickQuestionsOfQuest($questId);
$tickQuestions = $this->Multiplechoice->getTickQuestionsOfQuest($quest['id']);
// Match tick questions with user answers
$allSolved = true;
@ -83,19 +87,21 @@
* Display questions with a checkbox to let the user choose the
* right ones.
*
* @param int $questId ID of Quest to show
* @param int $characterId ID of Character
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
*/
public function quest($questId, $characterId)
public function quest($seminary, $questgroup, $quest, $character)
{
// Get questions
$questions = $this->Multiplechoice->getQuestionsOfQuest($questId);
$questions = $this->Multiplechoice->getQuestionsOfQuest($quest['id']);
foreach($questions as &$question) {
$question['answer'] = $this->Multiplechoice->getCharacterSubmission($question['id'], $characterId);
$question['answer'] = $this->Multiplechoice->getCharacterSubmission($question['id'], $character['id']);
}
// Has Character already solved Quest?
$solved = $this->Quests->hasCharacterSolvedQuest($questId, $characterId);
$solved = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']);
// Pass data to view
@ -109,15 +115,17 @@
*
* Show the submission of a Character for a Quest.
*
* @param int $questId ID of Quest to show submission for
* @param int $characterId ID of Character to show submission of
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
*/
public function submission($questId, $characterId)
public function submission($seminary, $questgroup, $quest, $character)
{
// Get questions
$questions = $this->Multiplechoice->getQuestionsOfQuest($questId);
$questions = $this->Multiplechoice->getQuestionsOfQuest($quest['id']);
foreach($questions as &$question) {
$question['answer'] = $this->Multiplechoice->getCharacterSubmission($question['id'], $characterId);
$question['answer'] = $this->Multiplechoice->getCharacterSubmission($question['id'], $character['id']);
}

View file

@ -32,18 +32,20 @@
/**
* Save the answers of a Character for a Quest.
*
* @param int $questId ID of Quest to save answers for
* @param int $characterId ID of Character to save answers of
* @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 $answers Character answers for the Quest
*/
public function saveAnswersOfCharacter($questId, $characterId, $answers)
public function saveAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers)
{
// Get already submitted answer
$characterSubmission = $this->Submit->getCharacterSubmission($questId, $characterId);
$characterSubmission = $this->Submit->getCharacterSubmission($quest['id'], $character['id']);
// Save answer
if(is_null($characterSubmission) && array_key_exists(0, $answers)) {
$this->Submit->setCharacterSubmission($questId, $characterId, $answers[0]);
$this->Submit->setCharacterSubmission($quest['id'], $character['id'], $answers[0]);
}
}
@ -51,12 +53,14 @@
/**
* Check if answers of a Character for a Quest match the correct ones.
*
* @param int $questId ID of Quest to match answers for
* @param int $characterId ID of Character to match answers of
* @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 $answers Character answers for the Quest
* @return boolean True/false for a right/wrong answer or null for moderator evaluation
*/
public function matchAnswersOfCharacter($questId, $characterId, $answers)
public function matchAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers)
{
// A moderator has to evaluate the answer
return null;
@ -69,13 +73,15 @@
* Display a big textbox to let the user enter a text that has
* to be evaluated by a moderator.
*
* @param int $questId ID of Quest to show
* @param int $characterId ID of Character
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
*/
public function quest($questId, $characterId)
public function quest($seminary, $questgroup, $quest, $character)
{
// Answer (Submission)
$characterSubmission = $this->Submit->getCharacterSubmission($questId, $characterId);
$characterSubmission = $this->Submit->getCharacterSubmission($quest['id'], $character['id']);
// Wordcount
$wordcount = 0;
@ -84,7 +90,7 @@
}
// Has Character already solved Quest?
$solved = $this->Quests->hasCharacterSolvedQuest($questId, $characterId);
$solved = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']);
// Pass data to view
@ -99,16 +105,18 @@
*
* Show the submission of a Character for a Quest.
*
* @param int $questId ID of Quest to show submission for
* @param int $characterId ID of Character to show submission of
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
*/
public function submission($questId, $characterId)
public function submission($seminary, $questgroup, $quest, $character)
{
// Get Character submission
$submission = $this->Submit->getCharacterSubmission($questId, $characterId);
$submission = $this->Submit->getCharacterSubmission($quest['id'], $character['id']);
// Status
$solved = $this->Quests->hasCharacterSolvedQuest($questId, $characterId);
$solved = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']);
// Pass data to view

View file

@ -26,21 +26,23 @@
/**
* Save the answers of a Character for a Quest.
*
* @param int $questId ID of Quest to save answers for
* @param int $characterId ID of Character to save answers of
* @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 $answers Character answers for the Quest
*/
public function saveAnswersOfCharacter($questId, $characterId, $answers)
public function saveAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers)
{
// Get regexs
$regexs = $this->Textinput->getTextinputRegexs($questId);
$regexs = $this->Textinput->getTextinputRegexs($quest['id']);
// Save answers
foreach($regexs as &$regex)
{
$pos = intval($regex['number']) - 1;
$answer = (array_key_exists($pos, $answers)) ? $answers[$pos] : '';
$this->Textinput->setCharacterSubmission($regex['id'], $characterId, $answer);
$this->Textinput->setCharacterSubmission($regex['id'], $character['id'], $answer);
}
}
@ -48,14 +50,16 @@
/**
* Check if answers of a Character for a Quest match the correct ones.
*
* @param int $questId ID of Quest to match answers for
* @param int $characterId ID of Character to match answers of
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
* @return boolean True/false for a right/wrong answer or null for moderator evaluation
*/
public function matchAnswersOfCharacter($questId, $characterId, $answers)
public function matchAnswersOfCharacter($seminary, $questgroup, $quest, $character, $answers)
{
// Get right answers
$regexs = $this->Textinput->getTextinputRegexs($questId);
$regexs = $this->Textinput->getTextinputRegexs($quest['id']);
// Match regexs with user answers
$allSolved = true;
@ -86,25 +90,27 @@
* Display a text with input fields and evaluate if user input
* matches with stored regular expressions.
*
* @param int $questId ID of Quest to show
* @param int $characterId ID of Character
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
*/
public function quest($questId, $characterId)
public function quest($seminary, $questgroup, $quest, $character)
{
// Get Task
$task = $this->Textinput->getTextinputQuest($questId);
$task = $this->Textinput->getTextinputQuest($quest['id']);
// Process text
$textParts = preg_split('/(\$\$)/', $task['text'], -1, PREG_SPLIT_NO_EMPTY);
// Get Character answers
$regexs = $this->Textinput->getTextinputRegexs($questId);
$regexs = $this->Textinput->getTextinputRegexs($quest['id']);
foreach($regexs as &$regex) {
$regex['answer'] = $this->Textinput->getCharacterSubmission($regex['id'], $characterId);
$regex['answer'] = $this->Textinput->getCharacterSubmission($regex['id'], $character['id']);
}
// Has Character already solved Quest?
$solved = $this->Quests->hasCharacterSolvedQuest($questId, $characterId);
$solved = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']);
// Pass data to view
@ -119,21 +125,23 @@
*
* Show the submission of a Character for a Quest.
*
* @param int $questId ID of Quest to show submission for
* @param int $characterId ID of Character to show submission of
* @param array $seminary Current Seminary data
* @param array $questgroup Current Questgroup data
* @param array $quest Current Quest data
* @param array $character Current Character data
*/
public function submission($questId, $characterId)
public function submission($seminary, $questgroup, $quest, $character)
{
// Get Task
$task = $this->Textinput->getTextinputQuest($questId);
$task = $this->Textinput->getTextinputQuest($quest['id']);
// Process text
$textParts = preg_split('/(\$\$)/', $task['text'], -1, PREG_SPLIT_NO_EMPTY);
// Get Character answers
$regexs = $this->Textinput->getTextinputRegexs($questId);
$regexs = $this->Textinput->getTextinputRegexs($quest['id']);
foreach($regexs as &$regex) {
$regex['answer'] = $this->Textinput->getCharacterSubmission($regex['id'], $characterId);
$regex['answer'] = $this->Textinput->getCharacterSubmission($regex['id'], $character['id']);
$regex['right'] = $this->isMatching($regex['regex'], $regex['answer']);
}