-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
First attempt to add all HotPot files to GIT repository
- Loading branch information
Gordon Bateson
committed
Nov 10, 2012
0 parents
commit 2247b52
Showing
421 changed files
with
57,252 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
<?php | ||
|
||
// This file is part of Moodle - http://moodle.org/ | ||
// | ||
// Moodle is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
// | ||
// Moodle is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU General Public License | ||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
/** | ||
* Display an attempt page of a hotpot activity | ||
* | ||
* @package mod-hotpot | ||
* @copyright 2010 Gordon Bateson <[email protected]> | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
|
||
require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); | ||
require_once(dirname(__FILE__).'/locallib.php'); | ||
|
||
$id = optional_param('id', 0, PARAM_INT); // course_module ID, or | ||
$hp = optional_param('hp', 0, PARAM_INT); // hotpot instance ID | ||
|
||
if ($id) { | ||
$cm = get_coursemodule_from_id('hotpot', $id, 0, false, MUST_EXIST); | ||
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); | ||
$hotpot = $DB->get_record('hotpot', array('id' => $cm->instance), '*', MUST_EXIST); | ||
} else { | ||
$hotpot = $DB->get_record('hotpot', array('id' => $hp), '*', MUST_EXIST); | ||
$course = $DB->get_record('course', array('id' => $hotpot->course), '*', MUST_EXIST); | ||
$cm = get_coursemodule_from_instance('hotpot', $hotpot->id, $course->id, false, MUST_EXIST); | ||
} | ||
|
||
// Check login | ||
require_login($course, true, $cm); | ||
require_capability('mod/hotpot:attempt', $PAGE->context); | ||
add_to_log($course->id, 'hotpot', 'attempt', 'view.php?id='.$cm->id, $hotpot->id, $cm->id); | ||
|
||
// Set editing mode | ||
if ($PAGE->user_allowed_editing()) { | ||
hotpot::set_user_editing(); | ||
} | ||
|
||
// Create an object to represent the current HotPot activity | ||
$hotpot = hotpot::create($hotpot, $cm, $course, $PAGE->context); | ||
|
||
// initialize $PAGE (and compute blocks) | ||
$PAGE->set_url($hotpot->attempt_url()); | ||
$PAGE->set_title($hotpot->name); | ||
$PAGE->set_heading($course->fullname); | ||
|
||
// allow the HotPot activity to set its preferred page layout | ||
$hotpot->set_preferred_pagelayout($PAGE); | ||
|
||
/// Create an object to manage all the other (non-roles) access rules. | ||
//$timenow = time(); | ||
//$canignoretimelimits = has_capability('mod/hotpot:ignoretimelimits', $PAGE->context, null, false); | ||
//$accessmanager = new hotpot_access_manager($hotpot, $timenow, $canignoretimelimits); | ||
//$messages = $accessmanager->describe_rules(); | ||
|
||
|
||
// get renderer subtype (e.g. attempt_hp_6_jcloze_xml) | ||
// and load the appropriate renderer class for this attempt | ||
$subtype = $hotpot->get_attempt_renderer_subtype(); | ||
|
||
$subdir = str_replace('_', '/', $subtype); | ||
require_once($CFG->dirroot.'/mod/hotpot/'.$subdir.'/renderer.php'); | ||
|
||
// create the renderer for this attempt | ||
$output = $PAGE->get_renderer('mod_hotpot', $subtype); | ||
|
||
// print access warnings, if required | ||
if ($warnings = $output->entrywarnings($hotpot)) { | ||
echo $output->header(); | ||
echo $warnings; | ||
echo $output->footer(); | ||
exit; | ||
} | ||
|
||
//////////////////////////////////////////////////////////////////////////////// | ||
// Output starts here // | ||
//////////////////////////////////////////////////////////////////////////////// | ||
|
||
echo $output->render_attempt($hotpot); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
// This file is part of Moodle - http://moodle.org/ | ||
// | ||
// Moodle is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
// | ||
// Moodle is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU General Public License | ||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
/** | ||
* mod/hotpot/attempt/hp/6/jcloze/anctscan.js | ||
* | ||
* @package mod-hotpot | ||
* @copyright 2010 Gordon Bateson <[email protected]> | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
|
||
/** | ||
* JCloze_ANCT_Scan | ||
* | ||
* @param xxx sendallclicks | ||
* @param xxx forceajax | ||
*/ | ||
function JCloze_ANCT_Scan(sendallclicks, forceajax) { | ||
this.quiztype = 'JCloze'; | ||
|
||
/** | ||
* initQuestion | ||
* | ||
* @param xxx i | ||
*/ | ||
this.initQuestion = function (i) { | ||
this.questions[i].name = parseInt(i)+1; // gap number | ||
this.questions[i].type = 2; // 2 = JCloze | ||
this.questions[i].text = I[i][1][0][0]; // the correct word | ||
this.questions[i].guesses = new Array(); | ||
} | ||
|
||
/** | ||
* onclickCheck | ||
* | ||
* @param xxx iscorrect | ||
* @param xxx i | ||
* @param xxx g | ||
*/ | ||
this.onclickCheck = function (iscorrect,i,g) { | ||
if (window.Finished) { | ||
return; // quiz is already finished | ||
} | ||
|
||
if (i>=GapList.length) { | ||
i = GapList.length - 1; | ||
} | ||
|
||
// shortcut to this question | ||
var question = this.questions[i]; | ||
|
||
// increment check count (even if gap content has not changed) | ||
question.checks++; | ||
|
||
var g_max = question.guesses.length; | ||
if (g_max && g==question.guesses[g_max-1]) { | ||
// gap content has not changed | ||
return; | ||
} | ||
question.guesses[g_max] = g; | ||
|
||
// create shortcut ot array of correct or wrong responses | ||
if (iscorrect) { | ||
var responses = question.correct; | ||
} else { | ||
var responses = question.wrong; | ||
} | ||
|
||
var r_max = responses.length; | ||
for (var r=0; r<r_max; r++) { | ||
if (responses[r]==g) { | ||
// this guess has been entered before | ||
break; | ||
} | ||
} | ||
|
||
if (r==r_max) { | ||
// if this is a new g(uess), i.e. it has not been entered before | ||
// append g(uess) to the end of the array of responses | ||
responses[r] = g; | ||
} | ||
} // end function | ||
|
||
/** | ||
* setQuestionScore | ||
* | ||
* @param xxx q | ||
*/ | ||
this.setQuestionScore = function (q) { | ||
this.questions[q].score = 0; // no scores for individual gaps | ||
} | ||
|
||
/** | ||
* setScoreAndPenalties | ||
* | ||
* @param xxx forceRecalculate | ||
*/ | ||
this.setScoreAndPenalties = function (forceRecalculate) { | ||
if (forceRecalculate) { | ||
window.Score = 0; | ||
var TotGaps = GapList.length; | ||
if (TotGaps){ | ||
var TotCorrectChoices = 0; | ||
for (var i=0; i<TotGaps; i++){ | ||
if (GapList[i][1].ErrorFound){ | ||
TotCorrectChoices++; | ||
} | ||
} | ||
if (TotCorrectChoices > TotWrongChoices){ | ||
window.Score = Math.floor(100 * (TotCorrectChoices - TotWrongChoices) / TotGaps); | ||
} | ||
} | ||
} | ||
this.score = window.Score || 0; | ||
this.penalties = window.Penalties || 0; | ||
} | ||
|
||
this.init(I.length, sendallclicks, forceajax); | ||
} | ||
JCloze_ANCT_Scan.prototype = new hpQuizAttempt(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
// This file is part of Moodle - http://moodle.org/ | ||
// | ||
// Moodle is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
// | ||
// Moodle is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU General Public License | ||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
/** | ||
* mod/hotpot/attempt/hp/6/jcloze/dropdown.js | ||
* | ||
* @package mod-hotpot | ||
* @copyright 2010 Gordon Bateson <[email protected]> | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
|
||
/** | ||
* JClozeDropDown | ||
* | ||
* @param xxx sendallclicks | ||
* @param xxx forceajax | ||
*/ | ||
function JClozeDropDown(sendallclicks, forceajax) { | ||
this.quiztype = 'JCloze'; | ||
|
||
/** | ||
* initQuestion | ||
* | ||
* @param xxx i | ||
*/ | ||
this.initQuestion = function (i) { | ||
this.questions[i].name = parseInt(i)+1; // gap number | ||
this.questions[i].type = 2; // 2 = JCloze | ||
this.questions[i].text = I[i][2]; // clue text | ||
this.questions[i].guesses = new Array(); | ||
} | ||
|
||
/** | ||
* onclickCheck | ||
* | ||
* @param xxx setScores | ||
*/ | ||
this.onclickCheck = function (setScores) { | ||
var i_max = this.questions.length; | ||
for (var i=0; i<i_max; i++) { | ||
|
||
if (GapList[i][1].GapLocked) { | ||
// already correct | ||
continue; | ||
} | ||
|
||
var ii = Get_SelectedDropValue(i); | ||
if (isNaN(ii) || ii<0) { | ||
// nothing selected yet | ||
continue; | ||
} | ||
|
||
if (window.MakeIndividualDropdowns) { | ||
var is_wrong = (ii!=0); | ||
var g = I[i][1][ii][0]; | ||
var MaxNumOfTrials = I[i][1].length; | ||
} else { | ||
var is_wrong = (ii!=i); | ||
var g = I[ii][1][0][0]; | ||
var MaxNumOfTrials = GapList.length; | ||
} | ||
if (! g) { | ||
// no gap content - shouldn't happen | ||
continue; | ||
} | ||
if (setScores) { | ||
if (MaxNumOfTrials && MaxNumOfTrials > GapList[i][1].NumOfTrials){ | ||
GapList[i][1].Score = 1 - (GapList[i][1].NumOfTrials / MaxNumOfTrials); | ||
} else { | ||
GapList[i][1].Score = 0; | ||
} | ||
if (GapList[i][1].ClueAskedFor){ | ||
GapList[i][1].Score /= 2; | ||
} | ||
} | ||
|
||
// shortcut to this question | ||
var question = this.questions[i]; | ||
|
||
// increment check count (even if gap content has not changed) | ||
question.checks++; | ||
|
||
var g_max = question.guesses.length; | ||
if (g_max && g==question.guesses[g_max-1]) { | ||
// gap content has not changed | ||
continue; | ||
} | ||
|
||
// create shortcut ot array of correct or wrong responses | ||
if (is_wrong) { | ||
var responses = question.wrong; | ||
} else { | ||
var responses = question.correct; | ||
} | ||
var r_max = responses.length; | ||
for (var r=0; r<r_max; r++) { | ||
if (responses[r]==g) { | ||
// this guess has been entered before | ||
break; | ||
} | ||
} | ||
if (r==r_max) { | ||
// if this is a new g(uess), i.e. it has not been entered before | ||
// append g(uess) to the end of the array of responses | ||
responses[r] = g; | ||
} | ||
} // end for loop | ||
|
||
if (setScores) { | ||
var TotalScore = 0; | ||
for (var i=0; i<i_max; i++) { | ||
TotalScore += GapList[i][1].Score; | ||
} | ||
window.Score = Math.floor((TotalScore * 100) / i_max); | ||
} | ||
} // end function | ||
|
||
/** | ||
* setQuestionScore | ||
* | ||
* @param xxx q | ||
*/ | ||
this.setQuestionScore = function (q) { | ||
if (GapList[q]) { | ||
this.questions[q].score = Math.max(0, 100 * GapList[q][1].Score) + '%'; | ||
} | ||
} | ||
|
||
this.init(I.length, sendallclicks, forceajax); | ||
} | ||
JClozeDropDown.prototype = new hpQuizAttempt(); |
Oops, something went wrong.