diff --git a/headergame.php b/headergame.php index 7d1d326..4bf2a0f 100755 --- a/headergame.php +++ b/headergame.php @@ -1,82 +1,92 @@ . - require_once(dirname(__FILE__) . '/../../config.php'); - require_once($CFG->libdir.'/gradelib.php'); - require_once($CFG->dirroot.'/mod/game/locallib.php'); - require_once($CFG->libdir . '/completionlib.php'); +require_once(dirname(__FILE__) . '/../../config.php'); +require_once($CFG->libdir.'/gradelib.php'); +require_once($CFG->dirroot.'/mod/game/locallib.php'); +require_once($CFG->libdir . '/completionlib.php'); - $id = optional_param('id', 0, PARAM_INT); // Course Module ID, or - $q = optional_param('q', 0, PARAM_INT); // game ID +$id = optional_param('id', 0, PARAM_INT); // Course Module ID. +$q = optional_param('q', 0, PARAM_INT); // Game ID. - if ($id) { - if (! $cm = get_coursemodule_from_id('game', $id)) { - print_error('invalidcoursemodule'); - } - if (! $course = $DB->get_record('course', array('id' => $cm->course))) { - print_error('coursemisconf'); - } - if (! $game = $DB->get_record('game', array('id' => $cm->instance))) { - print_error('invalidcoursemodule'); - } - } else { - if (! $game = $DB->get_record('game', array('id' => $q))) { - print_error('invalidgameid q='.$q, 'game'); - } - if (! $course = $DB->get_record('course', array('id' => $game->course))) { - print_error('invalidcourseid'); - } - if (! $cm = get_coursemodule_from_instance('game', $game->id, $course->id)) { - print_error('invalidcoursemodule'); - } +if ($id) { + if (!$cm = get_coursemodule_from_id('game', $id)) { + print_error('invalidcoursemodule'); } + if (! $course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); + } + if (! $game = $DB->get_record('game', array('id' => $cm->instance))) { + print_error('invalidcoursemodule'); + } +} else { + if (! $game = $DB->get_record('game', array('id' => $q))) { + print_error('invalidgameid q='.$q, 'game'); + } + if (!$course = $DB->get_record('course', array('id' => $game->course))) { + print_error('invalidcourseid'); + } + if (!$cm = get_coursemodule_from_instance('game', $game->id, $course->id)) { + print_error('invalidcoursemodule'); + } +} -/// Check login and get context. - require_login($course->id, false, $cm); - $context = game_get_context_module_instance( $cm->id); - require_capability('mod/game:view', $context); - -/// Cache some other capabilites we use several times. - $canattempt = has_capability('mod/game:attempt', $context); - $canreviewmine = has_capability('mod/game:reviewmyattempts', $context); +// Check login and get context. +require_login($course->id, false, $cm); +$context = game_get_context_module_instance( $cm->id); +require_capability('mod/game:view', $context); -/// Create an object to manage all the other (non-roles) access rules. - $timenow = time(); - //$accessmanager = new game_access_manager(game::create($game->id, $USER->id), $timenow); +// Cache some other capabilites we use several times. +$canattempt = has_capability('mod/game:attempt', $context); +$canreviewmine = has_capability('mod/game:reviewmyattempts', $context); -/// If no questions have been set up yet redirect to edit.php - //if (!$game->questions && has_capability('mod/game:manage', $context)) { - // redirect($CFG->wwwroot . '/mod/game/edit.php?cmid=' . $cm->id); - //} +// Create an object to manage all the other (non-roles) access rules. +$timenow = time(); -/// Log this request. - if( game_use_events()) - { - require( 'classes/event/course_module_viewed.php'); - \mod_game\event\course_module_viewed::viewed($game, $context)->trigger(); - }else - add_to_log($course->id, 'game', 'view', "view.php?id=$cm->id", $game->id, $cm->id); +// Log this request. +if (game_use_events()) { + require( 'classes/event/course_module_viewed.php'); + \mod_game\event\course_module_viewed::viewed($game, $context)->trigger(); +} else { + add_to_log($course->id, 'game', 'view', "view.php?id=$cm->id", $game->id, $cm->id); +} -/// Initialize $PAGE, compute blocks - $PAGE->set_url('/mod/game/view.php', array('id' => $cm->id)); +// Initialize $PAGE, compute blocks. +$PAGE->set_url('/mod/game/view.php', array('id' => $cm->id)); - $edit = optional_param('edit', -1, PARAM_BOOL); - if ($edit != -1 && $PAGE->user_allowed_editing()) { - $USER->editing = $edit; - } +$edit = optional_param('edit', -1, PARAM_BOOL); +if ($edit != -1 && $PAGE->user_allowed_editing()) { + $USER->editing = $edit; +} - // Note: MDL-19010 there will be further changes to printing header and blocks. - // The code will be much nicer than this eventually. - $title = $course->shortname . ': ' . format_string($game->name); +// Note: MDL-19010 there will be further changes to printing header and blocks. +// The code will be much nicer than this eventually. +$title = $course->shortname . ': ' . format_string($game->name); - if ($PAGE->user_allowed_editing() && !empty($CFG->showblocksonmodpages)) { - $buttons = '
'. - ''. - ''. - '
'; - $PAGE->set_button($buttons); - } +if ($PAGE->user_allowed_editing() && !empty($CFG->showblocksonmodpages)) { + $buttons = '
'. + ''. + ''. + '
'; + $PAGE->set_button($buttons); +} - $PAGE->set_title($title); - $PAGE->set_heading($course->fullname); +$PAGE->set_title($title); +$PAGE->set_heading($course->fullname); - echo $OUTPUT->header(); +echo $OUTPUT->header(); diff --git a/mod_form.php b/mod_form.php index 083be71..1777f0a 100755 --- a/mod_form.php +++ b/mod_form.php @@ -1,4 +1,19 @@ -. + /** * Form for creating and modifying a game * @@ -7,88 +22,84 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -require_once ($CFG->dirroot.'/course/moodleform_mod.php'); +require_once( $CFG->dirroot.'/course/moodleform_mod.php'); require( 'locallib.php'); class mod_game_mod_form extends moodleform_mod { - - function definition() { - global $CFG, $DB, $COURSE; + public function definition() { + global $CFG, $DB, $COURSE; $config = get_config('game'); $mform =& $this->_form; $id = $this->_instance; - if(!empty($this->_instance)){ - - if($g = $DB->get_record('game', array('id' => $id))){ + if (!empty($this->_instance)) { + if ($g = $DB->get_record('game', array('id' => $id))) { $gamekind = $g->gamekind; + } else { + print_error('incorrect game'); } - else{ - print_error('incorrect game'); - } - } - else { + } else { $gamekind = required_param('type', PARAM_ALPHA); } - - //Hidden elements + + // Hidden elements. $mform->addElement('hidden', 'gamekind', $gamekind); $mform->setDefault('gamekind', $gamekind); $mform->setType('gamekind', PARAM_ALPHA); $mform->addElement('hidden', 'type', $gamekind); $mform->setDefault('type', $gamekind); $mform->setType('type', PARAM_ALPHA); - + $mform->addElement( 'hidden', 'gameversion', game_get_version()); $mform->setType('gameversion', PARAM_INT); $mform->addElement('header', 'general', get_string('general', 'form')); - - $mform->addElement('text', 'name', 'Name', array('size'=>'64')); - if (!empty($CFG->formatstringstriptags)){ + + $mform->addElement('text', 'name', 'Name', array('size' => '64')); + if (!empty($CFG->formatstringstriptags)) { $mform->setType('name', PARAM_TEXT); - } - else{ + } else { $mform->setType('name', PARAM_CLEAN); } - if( !isset( $g)) + if (!isset( $g)) { $mform->setDefault('name', get_string( 'game_'.$gamekind, 'game')); + } $mform->addRule('name', null, 'required', null, 'client'); - $hasglossary = ($gamekind == 'hangman' || $gamekind == 'cross' || $gamekind == 'cryptex' || $gamekind == 'sudoku' || $gamekind == 'hiddenpicture' || $gamekind == 'snakes'); + $hasglossary = ($gamekind == 'hangman' || $gamekind == 'cross' || + $gamekind == 'cryptex' || $gamekind == 'sudoku' || + $gamekind == 'hiddenpicture' || $gamekind == 'snakes'); $questionsourceoptions = array(); - if($hasglossary) + if ($hasglossary) { $questionsourceoptions['glossary'] = get_string('modulename', 'glossary'); - //if( $gamekind != 'snakes' && $gamekind != 'sudoku' && - // $gamekind != 'hiddenpicture') { - $questionsourceoptions['question'] = get_string('sourcemodule_question', 'game'); - //} - if( $gamekind != 'bookquiz') + } + $questionsourceoptions['question'] = get_string('sourcemodule_question', 'game'); + if ($gamekind != 'bookquiz') { $questionsourceoptions['quiz'] = get_string('modulename', 'quiz'); - $mform->addElement('select', 'sourcemodule', get_string('sourcemodule','game'), $questionsourceoptions); + } + $mform->addElement('select', 'sourcemodule', get_string('sourcemodule', 'game'), $questionsourceoptions); - if($hasglossary){ + if ($hasglossary) { $a = array(); - if($recs = $DB->get_records('glossary', array( 'course' => $COURSE->id), 'id,name')){ - foreach($recs as $rec){ + if ($recs = $DB->get_records('glossary', array( 'course' => $COURSE->id), 'id,name')) { + foreach ($recs as $rec) { $a[$rec->id] = $rec->name; - } + } } $mform->addElement('select', 'glossaryid', get_string('sourcemodule_glossary', 'game'), $a); $mform->disabledIf('glossaryid', 'sourcemodule', 'neq', 'glossary'); - if( count( $a) == 0) + if (count( $a) == 0) { $select = 'glossaryid=-1'; - else if( count( $a) == 1) + } else if (count( $a) == 1) { $select = 'glossaryid='.$rec->id; - else - { + } else { $select = ''; - foreach($recs as $rec){ + foreach ($recs as $rec) { $select .= ','.$rec->id; } $select = 'g.id IN ('.substr( $select, 1).')'; @@ -98,8 +109,8 @@ class mod_game_mod_form extends moodleform_mod { $a = array(); $a[ ] = ''; $sql = "SELECT gc.id,gc.name,g.name as name2 FROM $table WHERE $select ORDER BY g.name,gc.name"; - if($recs = $DB->get_records_sql( $sql)){ - foreach($recs as $rec){ + if ($recs = $DB->get_records_sql( $sql)) { + foreach ($recs as $rec) { $a[$rec->id] = $rec->name2.' -> '.$rec->name; } } @@ -107,41 +118,35 @@ class mod_game_mod_form extends moodleform_mod { $mform->disabledIf('glossarycategoryid', 'sourcemodule', 'neq', 'glossary'); } - - //********************* - // Question Category - Short Answer - - if( $gamekind != 'bookquiz'){ + // Question Category - Short Answer. + if ($gamekind != 'bookquiz') { $context = game_get_context_course_instance( $COURSE->id); $select = " contextid in ($context->id)"; $a = array(); - if($recs = $DB->get_records_select('question_categories', $select, null, 'id,name')){ - foreach($recs as $rec){ + if ($recs = $DB->get_records_select('question_categories', $select, null, 'id,name')) { + foreach ($recs as $rec) { $s = $rec->name; - if(($count = $DB->count_records('question', array( 'category' => $rec->id))) != 0){ + if (($count = $DB->count_records('question', array( 'category' => $rec->id))) != 0) { $s .= " ($count)"; } $a[$rec->id] = $s; } } - + $mform->addElement('select', 'questioncategoryid', get_string('sourcemodule_questioncategory', 'game'), $a); $mform->disabledIf('questioncategoryid', 'sourcemodule', 'neq', 'question'); - //subcategories + // Subcategories. $mform->addElement('selectyesno', 'subcategories', get_string('sourcemodule_include_subcategories', 'game')); $mform->disabledIf('subcategories', 'sourcemodule', 'neq', 'question'); } - - //*********************** - // Quiz Category - - if( $gamekind != 'bookquiz'){ + // Quiz Category. + if ($gamekind != 'bookquiz') { $a = array(); - if( $recs = $DB->get_records('quiz', array( 'course' => $COURSE->id), 'id,name')){ - foreach( $recs as $rec){ + if ($recs = $DB->get_records('quiz', array( 'course' => $COURSE->id), 'id,name')) { + foreach ($recs as $rec) { $a[$rec->id] = $rec->name; } } @@ -149,80 +154,74 @@ class mod_game_mod_form extends moodleform_mod { $mform->disabledIf('quizid', 'sourcemodule', 'neq', 'quiz'); } - - //*********************** - // Book - if($gamekind == 'bookquiz'){ + // Book. + if ( $gamekind == 'bookquiz') { $a = array(); - if($recs = $DB->get_records('book', array( 'course' => $COURSE->id), 'id,name')){ - foreach($recs as $rec){ + if ($recs = $DB->get_records('book', array( 'course' => $COURSE->id), 'id,name')) { + foreach ($recs as $rec) { $a[$rec->id] = $rec->name; - } + } } $mform->addElement('select', 'bookid', get_string('sourcemodule_book', 'game'), $a); } - -//Common settings to all games - $mform->addElement('text', 'maxattempts', get_string('cross_max_attempts','game')); - $mform->setType('maxattempts', PARAM_INT); -//--------------------------------------------------------------------------- -// Grade options + // Common settings to all games. + $mform->addElement('text', 'maxattempts', get_string('cross_max_attempts', 'game')); + $mform->setType('maxattempts', PARAM_INT); + // Grade options. $mform->addElement('header', 'gradeoptions', get_string('grades', 'grades')); $mform->addElement('text', 'grade', get_string( 'grademax', 'grades'), array('size' => 4)); $mform->setType('grade', PARAM_INT); $gradingtypeoptions = array(); - $gradingtypeoptions[ GAME_GRADEHIGHEST] = get_string('gradehighest','game'); - $gradingtypeoptions[ GAME_GRADEAVERAGE] = get_string('gradeaverage','game'); - $gradingtypeoptions[ GAME_ATTEMPTFIRST] = get_string('attemptfirst','game'); - $gradingtypeoptions[ GAME_ATTEMPTLAST] = get_string('attemptlast','game'); - $mform->addElement('select', 'grademethod', get_string('grademethod','game'), $gradingtypeoptions); - + $gradingtypeoptions[ GAME_GRADEHIGHEST] = get_string('gradehighest', 'game'); + $gradingtypeoptions[ GAME_GRADEAVERAGE] = get_string('gradeaverage', 'game'); + $gradingtypeoptions[ GAME_ATTEMPTFIRST] = get_string('attemptfirst', 'game'); + $gradingtypeoptions[ GAME_ATTEMPTLAST] = get_string('attemptlast', 'game'); + $mform->addElement('select', 'grademethod', get_string('grademethod', 'game'), $gradingtypeoptions); + // Open and close dates. $mform->addElement('date_time_selector', 'timeopen', get_string('gameopen', 'game'), array('optional' => true, 'step' => 1)); $mform->addHelpButton('timeopen', 'gameopenclose', 'game'); $mform->addElement('date_time_selector', 'timeclose', get_string('gameclose', 'game'), - array('optional' => true, 'step' => 1)); - -//--------------------------------------------------------------------------- -// Bookquiz options + array('optional' => true, 'step' => 1)); - if($gamekind == 'bookquiz'){ + // Bookquiz options. + if ($gamekind == 'bookquiz') { $mform->addElement('header', 'bookquiz', get_string( 'bookquiz_options', 'game')); $bookquizlayoutoptions = array(); $bookquizlayoutoptions[0] = get_string('bookquiz_layout0', 'game'); $bookquizlayoutoptions[1] = get_string('bookquiz_layout1', 'game'); - $mform->addElement('select','param3', get_string('bookquiz_layout', 'game'), $bookquizlayoutoptions); + $mform->addElement('select', 'param3', + get_string('bookquiz_layout', 'game'), $bookquizlayoutoptions); } - -//--------------------------------------------------------------------------- -// Hangman options - if($gamekind == 'hangman'){ + // Hangman options. + if ($gamekind == 'hangman') { $mform->addElement('header', 'hangman', get_string( 'hangman_options', 'game')); $mform->addElement('text', 'param4', get_string('hangman_maxtries', 'game'), array('size' => 4)); $mform->setType('param4', PARAM_INT); $mform->addElement('selectyesno', 'param1', get_string('hangman_showfirst', 'game')); $mform->addElement('selectyesno', 'param2', get_string('hangman_showlast', 'game')); - $mform->addElement('selectyesno', 'param7', get_string('hangman_allowspaces','game')); + $mform->addElement('selectyesno', 'param7', get_string('hangman_allowspaces', 'game')); $mform->addElement('selectyesno', 'param8', get_string('hangman_allowsub', 'game')); $mform->addElement('text', 'param10', get_string( 'hangman_maximum_number_of_errors', 'game'), array('size' => 4)); $mform->setType('param10', PARAM_INT); - if( !isset( $config->hangmanimagesets)) + if (!isset( $config->hangmanimagesets)) { $number = 1; - else + } else { $number = $config->hangmanimagesets; - if( $number > 1) - { + } + if ($number > 1) { $a = array(); - for( $i=1; $i <= $number; $i++) + for ($i = 1; $i <= $number; $i++) { $a[ $i] = $i; - $mform->addElement('select', 'param3', get_string('hangman_imageset','game'), $a); + } + $mform->addElement('select', 'param3', get_string('hangman_imageset', 'game'), $a); } $mform->addElement('selectyesno', 'param5', get_string('hangman_showquestion', 'game')); @@ -231,40 +230,36 @@ class mod_game_mod_form extends moodleform_mod { $a = array(); $a = get_string_manager()->get_list_of_translations(); - $a[ ''] = '----------'; + $a[ ''] = '----------'; $a[ 'user'] = get_string('language_user_defined', 'game'); ksort( $a); - $mform->addElement('select', 'language', get_string('hangman_language','game'), $a); + $mform->addElement('select', 'language', get_string('hangman_language', 'game'), $a); - $mform->addElement('text', 'userlanguage', get_string('language_user_defined','game')); + $mform->addElement('text', 'userlanguage', get_string('language_user_defined', 'game')); $mform->setType('userlanguage', PARAM_TEXT); $mform->disabledIf('userlanguage', 'language', 'neq', 'user'); } -//--------------------------------------------------------------------------- -// Crossword options - - if($gamekind == 'cross'){ + // Crossword options. + if ($gamekind == 'cross') { $mform->addElement('header', 'cross', get_string( 'cross_options', 'game')); $mform->addElement('text', 'param1', get_string('cross_maxcols', 'game')); $mform->setType('param1', PARAM_INT); $mform->addElement('text', 'param4', get_string('cross_minwords', 'game')); - $mform->setType('param4', PARAM_INT); + $mform->setType('param4', PARAM_INT); $mform->addElement('text', 'param2', get_string('cross_maxwords', 'game')); $mform->setType('param2', PARAM_INT); - $mform->addElement('selectyesno', 'param7', get_string('hangman_allowspaces','game')); + $mform->addElement('selectyesno', 'param7', get_string('hangman_allowspaces', 'game')); $crosslayoutoptions = array(); $crosslayoutoptions[0] = get_string('cross_layout0', 'game'); $crosslayoutoptions[1] = get_string('cross_layout1', 'game'); - $mform->addElement('select','param3', get_string('cross_layout', 'game'), $crosslayoutoptions); + $mform->addElement('select', 'param3', get_string('cross_layout', 'game'), $crosslayoutoptions); $mform->setType('param5', PARAM_INT); - $mform->addElement('selectyesno', 'param6', get_string('cross_disabletransformuppercase','game')); + $mform->addElement('selectyesno', 'param6', get_string('cross_disabletransformuppercase', 'game')); } -//--------------------------------------------------------------------------- -// Cryptex options - - if($gamekind == 'cryptex'){ + // Cryptex options. + if ($gamekind == 'cryptex') { $mform->addElement('header', 'cryptex', get_string( 'cryptex_options', 'game')); $mform->addElement('text', 'param1', get_string('cross_maxcols', 'game')); $mform->setType('param1', PARAM_INT); @@ -272,15 +267,13 @@ class mod_game_mod_form extends moodleform_mod { $mform->setType('param4', PARAM_INT); $mform->addElement('text', 'param2', get_string('cross_maxwords', 'game')); $mform->setType('param2', PARAM_INT); - $mform->addElement('selectyesno', 'param7', get_string('hangman_allowspaces','game')); - $mform->addElement('text', 'param8', get_string('cryptex_maxtries','game')); + $mform->addElement('selectyesno', 'param7', get_string('hangman_allowspaces', 'game')); + $mform->addElement('text', 'param8', get_string('cryptex_maxtries', 'game')); $mform->setType('param8', PARAM_INT); } - -//--------------------------------------------------------------------------- -// Millionaire options - if($gamekind == 'millionaire'){ + // Millionaire options. + if ($gamekind == 'millionaire') { global $OUTPUT, $PAGE; $mform->addElement('header', 'millionaire', get_string( 'millionaire_options', 'game')); @@ -288,44 +281,36 @@ class mod_game_mod_form extends moodleform_mod { $mform->setDefault('param8', '#408080'); $mform->setType('param8', PARAM_TEXT); - //$mform->addElement('colorpicker', 'param8', get_string('millionaire_background', 'game')); - //$mform->registerRule('color','regex','/^#([a-fA-F0-9]{6})$/'); - //$mform->addRule('config_bgcolor','Enter a valid RGB color - # and then 6 characters','color'); - - $mform->addElement('selectyesno', 'shuffle', get_string('millionaire_shuffle','game')); + $mform->addElement('selectyesno', 'shuffle', get_string('millionaire_shuffle', 'game')); } -//--------------------------------------------------------------------------- -// Sudoku options - - if($gamekind == 'sudoku'){ + // Sudoku options. + if ($gamekind == 'sudoku') { $mform->addElement('header', 'sudoku', get_string( 'sudoku_options', 'game')); $mform->addElement('text', 'param2', get_string('sudoku_maxquestions', 'game')); $mform->setType('param2', PARAM_INT); } -//--------------------------------------------------------------------------- -// Snakes and Ladders options - - if($gamekind == 'snakes'){ + // Snakes and Ladders options. + if ($gamekind == 'snakes') { $mform->addElement('header', 'snakes', get_string( 'snakes_options', 'game')); $snakesandladdersbackground = array(); - if($recs = $DB->get_records( 'game_snakes_database', null, 'id,name')){ - foreach( $recs as $rec){ + if ($recs = $DB->get_records( 'game_snakes_database', null, 'id,name')) { + foreach ($recs as $rec) { $snakesandladdersbackground[$rec->id] = $rec->name; } } - + $snakeslayoutoptions = array(); $snakeslayoutoptions[0] = get_string('snakes_layout0', 'game'); $snakeslayoutoptions[1] = get_string('snakes_layout1', 'game'); - $mform->addElement('select','param8', get_string('bookquiz_layout', 'game'), $snakeslayoutoptions); - - if(count($snakesandladdersbackground) == 0){ + $mform->addElement('select', 'param8', get_string('bookquiz_layout', 'game'), $snakeslayoutoptions); + + if (count($snakesandladdersbackground) == 0) { require("{$CFG->dirroot}/mod/game/db/importsnakes.php"); - if($recs = $DB->get_records('game_snakes_database', null, 'id,name')){ - foreach($recs as $rec){ + if ($recs = $DB->get_records('game_snakes_database', null, 'id,name')) { + foreach ($recs as $rec) { $snakesandladdersbackground[$rec->id] = $rec->name; } } @@ -334,14 +319,14 @@ class mod_game_mod_form extends moodleform_mod { ksort( $snakesandladdersbackground); $mform->addElement('select', 'param3', get_string('snakes_background', 'game'), $snakesandladdersbackground); - //param3 = background - //param4 = itemid for file_storage - //param5 (=1 means dirty file and and have to be computed again) - //param6 = width of autogenerated picture - //param7 = height of autogenerated picture - //param8 = layout + // Param3 = background. + // Param4 = itemid for file_storage. + // Param5 (=1 means dirty file and and have to be computed again). + // Param6 = width of autogenerated picture. + // Param7 = height of autogenerated picture. + // Param8 = layout. - $attachmentoptions = array('subdirs'=>false, 'maxfiles'=>1); + $attachmentoptions = array('subdirs' => false, 'maxfiles' => 1); $mform->addElement('filepicker', 'param4', get_string('snakes_file', 'game'), $attachmentoptions); $mform->disabledIf('param4', 'param3', 'neq', '0'); @@ -379,10 +364,8 @@ class mod_game_mod_form extends moodleform_mod { $mform->setType('snakes_height', PARAM_INT); } -//--------------------------------------------------------------------------- -// Hidden Picture options - - if($gamekind == 'hiddenpicture'){ + // Hidden Picture options. + if ($gamekind == 'hiddenpicture') { $mform->addElement('header', 'hiddenpicture', get_string( 'hiddenpicture_options', 'game')); $mform->addElement('text', 'param1', get_string('hiddenpicture_across', 'game')); $mform->setType('param1', PARAM_INT); @@ -392,14 +375,14 @@ class mod_game_mod_form extends moodleform_mod { $mform->setDefault('param2', 3); $a = array(); - if($recs = $DB->get_records('glossary', array( 'course' => $COURSE->id), 'id,name')){ - foreach($recs as $rec){ + if ($recs = $DB->get_records('glossary', array( 'course' => $COURSE->id), 'id,name')) { + foreach ($recs as $rec) { $cmg = get_coursemodule_from_instance('glossary', $rec->id, $COURSE->id); $context = game_get_context_module_instance( $cmg->id); - if( $DB->record_exists( 'files', array( 'contextid' => $context->id))){ + if ($DB->record_exists( 'files', array( 'contextid' => $context->id))) { $a[$rec->id] = $rec->name; } - } + } } $mform->addElement('select', 'glossaryid2', get_string('hiddenpicture_pictureglossary', 'game'), $a); @@ -407,104 +390,98 @@ class mod_game_mod_form extends moodleform_mod { $mform->setType('param4', PARAM_INT); $mform->addELement('text', 'param5', get_string('hiddenpicture_height', 'game')); $mform->setType('param5', PARAM_INT); - $mform->addElement('selectyesno', 'param7', get_string('hangman_allowspaces','game')); + $mform->addElement('selectyesno', 'param7', get_string('hangman_allowspaces', 'game')); } -//--------------------------------------------------------------------------- -// Header/Footer options - + // Header/Footer options. $mform->addElement('header', 'headerfooteroptions', 'Header/Footer Options'); - $mform->addElement('htmleditor', 'toptext', get_string('toptext','game')); - $mform->addElement('htmleditor', 'bottomtext', get_string('bottomtext','game')); + $mform->addElement('htmleditor', 'toptext', get_string('toptext', 'game')); + $mform->addElement('htmleditor', 'bottomtext', get_string('bottomtext', 'game')); -//--------------------------------------------------------------------------- $features = new stdClass; $this->standard_coursemodule_elements($features); -//--------------------------------------------------------------------------- -// buttons + // Buttons. $this->add_action_buttons(); } - - function validation($data, $files){ + public function validation($data, $files) { $errors = parent::validation($data, $files); - + // Check open and close times are consistent. if ($data['timeopen'] != 0 && $data['timeclose'] != 0 && $data['timeclose'] < $data['timeopen']) { $errors['timeclose'] = get_string('closebeforeopen', 'quiz'); } - + return $errors; } - function set_data($default_values) { + public function set_data($defaultvalues) { global $DB; - if( isset( $default_values->type)) - { - //Default values for every game. - if( $default_values->type == 'hangman') - { - $default_values->param10 = 6; //maximum number of wrongs - }else if( $default_values->type == 'snakes') - { - $default_values->gamekind = $default_values->type; - $default_values->param3 = 1; - $default_values->questioncategoryid = 0; - }else if( $default_values->type == 'millionaire') - { - $default_values->shuffle = 1; + if (isset( $defaultvalues->type)) { + // Default values for every game. + if ($defaultvalues->type == 'hangman') { + $defaultvalues->param10 = 6; // Maximum number of wrongs. + } else if ($defaultvalues->type == 'snakes') { + $defaultvalues->gamekind = $defaultvalues->type; + $defaultvalues->param3 = 1; + $defaultvalues->questioncategoryid = 0; + } else if ($defaultvalues->type == 'millionaire') { + $defaultvalues->shuffle = 1; } - } - - if( isset( $default_values->gamekind)){ - if( $default_values->gamekind == 'hangman'){ - if( $default_values->param10 == 0) - $default_values->param10 = 6; - }else if( $default_values->gamekind == 'millionaire'){ - if( isset( $default_values->param8)) - $default_values->param8 = '#'.substr( '000000'.strtoupper( dechex( $default_values->param8)),-6); - }else if( $default_values->gamekind == 'cross') - { - if( $default_values->param5 == NULL) - $default_values->param5 = 1; + } + + if (isset( $defaultvalues->gamekind)) { + if ($defaultvalues->gamekind == 'hangman') { + if ($defaultvalues->param10 == 0) { + $defaultvalues->param10 = 6; + } + } else if ($defaultvalues->gamekind == 'millionaire') { + if (isset( $defaultvalues->param8)) { + $defaultvalues->param8 = '#'.substr( '000000'.strtoupper( dechex( $defaultvalues->param8)), -6); + } + } else if ($defaultvalues->gamekind == 'cross') { + if ($defaultvalues->param5 == null) { + $defaultvalues->param5 = 1; + } } - - if( $default_values->gamekind == 'snakes'){ - if( isset( $default_values->param9)){ - $a = explode( '#',$default_values->param9); - foreach( $a as $s){ + + if ($defaultvalues->gamekind == 'snakes') { + if (isset( $defaultvalues->param9)) { + $a = explode( '#', $defaultvalues->param9); + foreach ($a as $s) { $pos = strpos( $s, ':'); - if( $pos){ + if ($pos) { $name = substr( $s, 0, $pos); - $default_values->$name = substr( $s, $pos+1); + $defaultvalues->$name = substr( $s, $pos + 1); } } } } } - if( !isset( $default_values->gamekind)) - $default_values->gamekind = $default_values->type; - if( $default_values->gamekind == 'snakes'){ - if( isset( $default_values->param3)){ - $board = $default_values->param3; - if( $board != 0){ + if (!isset( $defaultvalues->gamekind)) { + $defaultvalues->gamekind = $defaultvalues->type; + } + if ($defaultvalues->gamekind == 'snakes') { + if (isset( $defaultvalues->param3)) { + $board = $defaultvalues->param3; + if ($board != 0) { $rec = $DB->get_record( 'game_snakes_database', array( 'id' => $board)); - $default_values->snakes_data = $rec->data; - $default_values->snakes_cols = $rec->cols; - $default_values->snakes_rows = $rec->rows; - $default_values->snakes_headerx = $rec->headerx; - $default_values->snakes_headery = $rec->headery; - $default_values->snakes_footerx = $rec->footerx; - $default_values->snakes_footery = $rec->footery; + $defaultvalues->snakes_data = $rec->data; + $defaultvalues->snakes_cols = $rec->cols; + $defaultvalues->snakes_rows = $rec->rows; + $defaultvalues->snakes_headerx = $rec->headerx; + $defaultvalues->snakes_headery = $rec->headery; + $defaultvalues->snakes_footerx = $rec->footerx; + $defaultvalues->snakes_footery = $rec->footery; } } } - - parent::set_data($default_values); + + parent::set_data($defaultvalues); } } diff --git a/pagelib.php b/pagelib.php index e66800d..c379428 100755 --- a/pagelib.php +++ b/pagelib.php @@ -1,7 +1,21 @@ -. -require_once($CFG->libdir.'/pagelib.php'); -require_once($CFG->dirroot.'/course/lib.php'); // needed for some blocks +require_once( $CFG->libdir.'/pagelib.php'); +require_once( $CFG->dirroot.'/course/lib.php'); // Needed for some blocks. define('PAGE_GAME_VIEW', 'mod-game-view'); @@ -18,75 +32,59 @@ $DEFINEDPAGES = array( PAGE_GAME_VIEW); class page_game extends page_generic_activity { - function init_quick($data) { - if(empty($data->pageid)) { + public function init_quick($data) { + if (empty($data->pageid)) { print_error('Cannot quickly initialize page: empty course id'); } $this->activityname = 'game'; parent::init_quick($data); } - function print_header($title, $morebreadcrumbs = NULL, $navigation ='') { + public function print_header($title, $morebreadcrumbs = null, $navigation ='') { global $USER, $CFG; $this->init_full(); $replacements = array( '%fullname%' => format_string($this->activityrecord->name) - ); - foreach($replacements as $search => $replace) { + ) + foreach ($replacements as $search => $replace) { $title = str_replace($search, $replace, $title); } - if($this->courserecord->id == SITEID) { + if ($this->courserecord->id == SITEID) { $breadcrumbs = array(); - } - else { + } else { $breadcrumbs = array($this->courserecord->shortname => $CFG->wwwroot.'/course/view.php?id='.$this->courserecord->id); } $breadcrumbs[get_string('modulenameplural', 'game')] = $CFG->wwwroot.'/mod/game/index.php?id='.$this->courserecord->id; - $breadcrumbs[format_string($this->activityrecord->name)] = $CFG->wwwroot.'/mod/game/view.php?id='.$this->modulerecord->id; + $breadcrumbs[format_string($this->activityrecord->name)] + = $CFG->wwwroot.'/mod/game/view.php?id='.$this->modulerecord->id; - if(!empty($morebreadcrumbs)) { + if (!empty($morebreadcrumbs)) { $breadcrumbs = array_merge($breadcrumbs, $morebreadcrumbs); } -/* - $total = count($breadcrumbs); - $current = 1; - $crumbtext = ''; - foreach($breadcrumbs as $text => $href) { - if($current++ == $total) { - $crumbtext .= ' '.$text; - } - else { - $crumbtext .= ' '.$text.' ->'; - } - } -*/ - if(empty($morebreadcrumbs) && $this->user_allowed_editing()) { + + if (empty($morebreadcrumbs) && $this->user_allowed_editing()) { $buttons = ''; - if(!empty($CFG->showblocksonmodpages)) { + if (!empty($CFG->showblocksonmodpages)) { $buttons .= ''; } $buttons .= '
'. update_module_button($this->modulerecord->id, $this->courserecord->id, get_string('modulename', 'game')).'
frametarget.' method="get" action="view.php">'. '
'. ''. - ''. - ''. + ''. + ''. '
'; - } - else { + } else { $buttons = ' '; } - //print_header($title, $this->courserecord->fullname, $crumbtext, '', '', true, $buttons, navmenu($this->courserecord, $this->modulerecord),false,$bodytags); - print_header($title, $this->courserecord->fullname, $navigation); + print_header($title, $this->courserecord->fullname, $navigation); } - function get_type() { + public function get_type() { return PAGE_GAME_VIEW; } } - -?> diff --git a/preview.php b/preview.php index 46135b8..0ef5c3a 100755 --- a/preview.php +++ b/preview.php @@ -1,4 +1,19 @@ -. + /** * This page prints a particular attempt of game * @@ -6,62 +21,63 @@ * @version $Id: preview.php,v 1.10 2012/07/25 11:16:04 bdaloukas Exp $ * @package game **/ - - require_once("../../config.php"); - require_once("lib.php"); - require_once("locallib.php"); - require_once( "hangman/play.php"); - require_once( "cross/play.php"); - require_once( "cryptex/play.php"); - require_once( "millionaire/play.php"); - require_once( "sudoku/play.php"); - require_once( "bookquiz/play.php"); - - require_once( "headergame.php"); +require_once("../../config.php"); +require_once("lib.php"); +require_once("locallib.php"); + +require_once( "hangman/play.php"); +require_once( "cross/play.php"); +require_once( "cryptex/play.php"); +require_once( "millionaire/play.php"); +require_once( "sudoku/play.php"); +require_once( "bookquiz/play.php"); + +require_once( "headergame.php"); + +$context = game_get_context_module_instance( $cm->id); - $context = game_get_context_module_instance( $cm->id); +if (!has_capability('mod/game:viewreports', $context)) { + print_error( get_string( 'only_teachers', 'game')); +} - if (!has_capability('mod/game:viewreports', $context)){ - print_error( get_string( 'only_teachers', 'game')); - } +$action = required_param('action', PARAM_ALPHANUM); +$gamekind = required_param('gamekind', PARAM_ALPHANUM); +$update = required_param('update', PARAM_INT); - $action = required_param('action', PARAM_ALPHANUM); - $gamekind = required_param('gamekind', PARAM_ALPHANUM); - $update = required_param('update', PARAM_INT); +$attemptid = required_param('attemptid', PARAM_INT); +$attempt = $DB->get_record( 'game_attempts', array('id' => $attemptid)); +$game = $DB->get_record( 'game', array( 'id' => $attempt->gameid)); +$detail = $DB->get_record( 'game_'.$gamekind, array( 'id' => $attemptid)); +$solution = ($action == 'solution'); - $attemptid = required_param('attemptid', PARAM_INT); - $attempt = $DB->get_record( 'game_attempts', array('id' => $attemptid)); - $game = $DB->get_record( 'game', array( 'id' => $attempt->gameid)); - $detail = $DB->get_record( 'game_'.$gamekind, array( 'id' => $attemptid)); - $solution = ($action == 'solution'); +$PAGE->navbar->add(get_string('preview', 'game')); - $PAGE->navbar->add(get_string('preview', 'game')); - - switch( $gamekind) - { - case 'cross': - $g = ''; - $onlyshow = true; - $endofgame = false; - $print = false; - $checkbutton = false; - $showhtmlsolutions = false; - $showhtmlprintbutton = true; - $showstudentguess = false; - game_cross_play( $update, $game, $attempt, $detail, $g, $onlyshow, $solution, $endofgame, $print, $checkbutton, $showhtmlsolutions, $showhtmlprintbutton, $showstudentguess, $context); - break; - case 'sudoku': - game_sudoku_play( $update, $game, $attempt, $detail, true, $solution, $context); - break; - case 'hangman': +switch( $gamekind) { + case 'cross': + $g = ''; + $onlyshow = true; + $endofgame = false; + $print = false; + $checkbutton = false; + $showhtmlsolutions = false; + $showhtmlprintbutton = true; + $showstudentguess = false; + game_cross_play( $update, $game, $attempt, $detail, $g, $onlyshow, $solution, + $endofgame, $print, $checkbutton, $showhtmlsolutions, $showhtmlprintbutton, + $showstudentguess, $context); + break; + case 'sudoku': + game_sudoku_play( $update, $game, $attempt, $detail, true, $solution, $context); + break; + case 'hangman': $preview = ($action == 'preview'); - game_hangman_play( $update, $game, $attempt, $detail, $preview, $solution, $context); - break; - case 'cryptex': - $crossm = $DB->get_record( 'game_cross', array('id' => $attemptid)); - game_cryptex_play( $update, $game, $attempt, $detail, $crossm, false, true, $solution, $context); - break; - } + game_hangman_play( $update, $game, $attempt, $detail, $preview, $solution, $context); + break; + case 'cryptex': + $crossm = $DB->get_record( 'game_cross', array('id' => $attemptid)); + game_cryptex_play( $update, $game, $attempt, $detail, $crossm, false, true, $solution, $context); + break; +} - echo $OUTPUT->footer(); +echo $OUTPUT->footer(); diff --git a/print.php b/print.php index 8e04fab..e3ec473 100755 --- a/print.php +++ b/print.php @@ -1,4 +1,19 @@ -. + /** * This page export the game to html * @@ -6,80 +21,78 @@ * @version $Id: print.php,v 1.7 2012/07/25 11:16:04 bdaloukas Exp $ * @package game **/ - require_once("../../config.php"); - require_once("lib.php"); - require_once("locallib.php"); - - $id = required_param('id', PARAM_INT); // Course Module ID, or - $gameid = required_param('gameid', PARAM_INT); - - $game = $DB->get_record( 'game', array( 'id' => $gameid)); - - require_login( $game->course); - - $context = game_get_context_module_instance( $id); - require_capability('mod/game:view', $context); - - game_print( $game, $id, $context); - - function game_print( $game, $update, $context){ - - if( $game->gamekind == 'cross') - game_print_cross( $game, $update, $context); - else if( $game->gamekind == 'cryptex') - game_print_cryptex( $game, $update, $context); +require_once("../../config.php"); +require_once("lib.php"); +require_once("locallib.php"); + +$id = required_param('id', PARAM_INT); // Course Module ID. +$gameid = required_param('gameid', PARAM_INT); + +$game = $DB->get_record( 'game', array( 'id' => $gameid)); + +require_login( $game->course); + +$context = game_get_context_module_instance( $id); +require_capability('mod/game:view', $context); + +game_print( $game, $id, $context); + +function game_print( $game, $update, $context) { + if ( $game->gamekind == 'cross') { + game_print_cross( $game, $update, $context); + } else if ($game->gamekind == 'cryptex') { + game_print_cryptex( $game, $update, $context); } - - function game_print_cross( $game, $update, $context) - { - require( "cross/play.php"); - - $attempt = game_getattempt( $game, $crossrec); - - $g = ''; - $onlyshow = true; - $showsolution = false; - $endofgame = false; - $print = true; - $checkbutton = false; - $showhtmlsolutions = false; - $showhtmlprintbutton = false; - $showstudentguess = false; +} + +function game_print_cross( $game, $update, $context) { + require( "cross/play.php"); + + $attempt = game_getattempt( $game, $crossrec); + + $g = ''; + $onlyshow = true; + $showsolution = false; + $endofgame = false; + $print = true; + $checkbutton = false; + $showhtmlsolutions = false; + $showhtmlprintbutton = false; + $showstudentguess = false; ?> Print -get_record_select( 'game_cross', "id=$attempt->id"); + $updateattempt = false; + $onlyshow = true; + $showsolution = false; + $showhtmlprintbutton = false; + $print = true; + $crossm = $DB->get_record_select( 'game_cross', "id=$attempt->id"); ?> Print -dirroot.'/mod/game/locallib.php'); - require_once($CFG->dirroot.'/mod/game/report/reportlib.php'); - - $id = optional_param('id',0,PARAM_INT); // Course Module ID, or - $q = optional_param('q',0,PARAM_INT); // game ID - - $mode = optional_param('mode', 'overview', PARAM_ALPHA); // Report mode - - if ($id) { - if (! $cm = get_coursemodule_from_id('game', $id)) { - print_error( "There is no coursemodule with id $id"); - } - - if (! $course = $DB->get_record('course', array( 'id' => $cm->course))) { - print_error( 'Course is misconfigured'); - } - - if (! $game = $DB->get_record( 'game', array( 'id' => $cm->instance))) { - print_error( "The game with id $cm->instance corresponding to this coursemodule $id is missing"); - } - - } else { - if (! $game = $DB->get_record( 'game', array( 'id' => $q))) { - print_error( "There is no game with id $q"); - } - if (! $course = $DB->get_record( 'course', array( 'id' => $game->course))) { - print_error( "The course with id $game->course that the game with id $a belongs to is missing"); - } - if (! $cm = get_coursemodule_from_instance( 'game', $game->id, $course->id)) { - print_error( "The course module for the game with id $q is missing"); - } +. + +// This script uses installed report plugins to print game reports. + +require_once("../../config.php"); +require_once($CFG->dirroot.'/mod/game/locallib.php'); +require_once($CFG->dirroot.'/mod/game/report/reportlib.php'); + +$id = optional_param('id', 0, PARAM_INT); // Course Module ID. +$q = optional_param('q', 0, PARAM_INT); // Game ID. + +$mode = optional_param('mode', 'overview', PARAM_ALPHA); // Report mode. + +if ($id) { + if (! $cm = get_coursemodule_from_id('game', $id)) { + print_error( "There is no coursemodule with id $id"); } - require_login($course->id, false); - $context = get_context_instance(CONTEXT_MODULE, $cm->id); - require_capability('mod/game:viewreports', $context); - - // if no questions have been set up yet redirect to edit.php - //if (!$game->questions and has_capability('mod/game:manage', $context)) { - // redirect('edit.php?gameid='.$game->id); - //} + if (! $course = $DB->get_record('course', array( 'id' => $cm->course))) { + print_error( 'Course is misconfigured'); + } - // Upgrade any attempts that have not yet been upgraded to the - // Moodle 1.5 model (they will not yet have the timestamp set) - //if ($attempts = get_records_sql("SELECT a.*". - // " FROM {$CFG->prefix}game_attempts a, {$CFG->prefix}question_states s". - // " WHERE a.game = '$game->id' AND s.attempt = a.uniqueid AND s.timestamp = 0")) { - // foreach ($attempts as $attempt) { - // game_upgrade_states($attempt); - // } - //} + if (! $game = $DB->get_record( 'game', array( 'id' => $cm->instance))) { + print_error( "The game with id $cm->instance corresponding to this coursemodule $id is missing"); + } +} else { + if (! $game = $DB->get_record( 'game', array( 'id' => $q))) { + print_error( "There is no game with id $q"); + } + if (! $course = $DB->get_record( 'course', array( 'id' => $game->course))) { + print_error( "The course with id $game->course that the game with id $a belongs to is missing"); + } + if (! $cm = get_coursemodule_from_instance( 'game', $game->id, $course->id)) { + print_error( "The course module for the game with id $q is missing"); + } +} - add_to_log($course->id, "game", "report", "report.php?id=$cm->id", "$game->id", "$cm->id"); +require_login($course->id, false); +$context = get_context_instance(CONTEXT_MODULE, $cm->id); +require_capability('mod/game:viewreports', $context); -/// Open the selected game report and display it +add_to_log($course->id, "game", "report", "report.php?id=$cm->id", "$game->id", "$cm->id"); - $mode = clean_param( $mode, PARAM_SAFEDIR); +// Open the selected game report and display it. - if (! is_readable("report/$mode/report.php")) { - print_error("Report not known ($mode)"); - } +$mode = clean_param( $mode, PARAM_SAFEDIR); - include("report/default.php"); // Parent class - include("report/$mode/report.php"); +if (! is_readable("report/$mode/report.php")) { + print_error("Report not known ($mode)"); +} - $report = new game_overview_report(); +require("report/default.php"); // Parent class. +require("report/$mode/report.php"); - if (! $report->display( $game, $cm, $course)) { // Run the report! - print_error( 'Error occurred during pre-processing!'); - } +$report = new game_overview_report(); -/// Print footer +if (! $report->display( $game, $cm, $course)) { // Run the report! + print_error( 'Error occurred during pre-processing!'); +} - echo $OUTPUT->footer($course); +// Print footer. +echo $OUTPUT->footer($course); diff --git a/review.php b/review.php index 4a0fae1..ce743d8 100755 --- a/review.php +++ b/review.php @@ -1,327 +1,327 @@ -get_record('game_attempts', array( 'id' => $attempt))) { - print_error("No such attempt ID exists"); - } - if (! $game = $DB->get_record('game', array( 'id' => $attempt->gameid))) { - print_error("The game with id $attempt->gameid belonging to attempt $attempt is missing"); - } - - game_compute_attempt_layout( $game, $attempt); - - if (! $course = $DB->get_record('course', array( 'id' => $game->course))) { - print_error("The course with id $game->course that the game with id $game->id belongs to is missing"); - } - if (! $cm = get_coursemodule_from_instance("game", $game->id, $course->id)) { - print_error("The course module for the game with id $game->id is missing"); +. + +// This page prints a review of a particular game attempt. + +require_once("../../config.php"); +require_once("locallib.php"); +require_once("../../lib/questionlib.php"); + +$attempt = required_param('attempt', PARAM_INT); // A particular attempt ID for review. +$page = optional_param('page', 0, PARAM_INT); // The required page. +$showall = optional_param('showall', 0, PARAM_BOOL); + +if (! $attempt = $DB->get_record('game_attempts', array( 'id' => $attempt))) { + print_error("No such attempt ID exists"); +} +if (! $game = $DB->get_record('game', array( 'id' => $attempt->gameid))) { + print_error("The game with id $attempt->gameid belonging to attempt $attempt is missing"); +} + +game_compute_attempt_layout( $game, $attempt); + +if (! $course = $DB->get_record('course', array( 'id' => $game->course))) { + print_error("The course with id $game->course that the game with id $game->id belongs to is missing"); +} +if (! $cm = get_coursemodule_from_instance("game", $game->id, $course->id)) { + print_error("The course module for the game with id $game->id is missing"); +} + +$grade = game_score_to_grade( $attempt->score, $game); +$feedback = game_feedback_for_grade( $grade, $attempt->gameid); + +require_login( $course->id, false, $cm); +$context = get_context_instance( CONTEXT_MODULE, $cm->id); +$coursecontext = get_context_instance( CONTEXT_COURSE, $cm->course); +$isteacher = isteacher( $game->course, $USER->id); +$options = game_get_reviewoptions( $game, $attempt, $context); +$popup = $isteacher ? 0 : $game->popup; // Controls whether this is shown in a javascript-protected window. + +add_to_log($course->id, "game", "review", "review.php?id=$cm->id&attempt=$attempt->id", "$game->id", "$cm->id"); + +// Print the page header. + +$strgames = get_string('modulenameplural', 'game'); +$strreview = get_string('review', 'game'); +$strscore = get_string('score', "game"); +$strgrade = get_string('grade'); +$strbestgrade = get_string('bestgrade', 'quiz'); +$strtimetaken = get_string('timetaken', 'game'); +$strtimecompleted = get_string('completedon', 'game'); + +$strupdatemodule = has_capability('moodle/course:manageactivities', + $coursecontext) ? update_module_button($cm->id, $course->id, get_string('modulename', 'game')) : ''; + +$strgames = get_string("modulenameplural", "game"); +$strgame = get_string("modulename", "game"); + +if (function_exists( 'build_navigation')) { + $navigation = build_navigation('', $cm); + echo $OUTPUT->heading("$course->shortname: $game->name", "$course->shortname: $game->name", $navigation, + "", "", true, update_module_button($cm->id, $course->id, $strgame), + navmenu($course, $cm)); +} else { + if ($course->category) { + $navigation = "wwwroot}/course/view.php?id=$course->id\">$course->shortname ->"; + } else { + $navigation = ''; } - $grade = game_score_to_grade( $attempt->score, $game); - $feedback = game_feedback_for_grade( $grade, $attempt->gameid); - - require_login( $course->id, false, $cm); - $context = get_context_instance( CONTEXT_MODULE, $cm->id); - $coursecontext = get_context_instance( CONTEXT_COURSE, $cm->course); - $isteacher = isteacher( $game->course, $USER->id); - $options = game_get_reviewoptions( $game, $attempt, $context); - $popup = $isteacher ? 0 : $game->popup; // Controls whether this is shown in a javascript-protected window. - - add_to_log($course->id, "game", "review", "review.php?id=$cm->id&attempt=$attempt->id", "$game->id", "$cm->id"); - -/// Print the page header - - $strgames = get_string('modulenameplural', 'game'); - $strreview = get_string('review', 'game'); - $strscore = get_string('score', "game"); - $strgrade = get_string('grade'); - $strbestgrade = get_string('bestgrade', 'quiz'); - $strtimetaken = get_string('timetaken', 'game'); - $strtimecompleted = get_string('completedon', 'game'); - - - $strupdatemodule = has_capability('moodle/course:manageactivities', $coursecontext) - ? update_module_button($cm->id, $course->id, get_string('modulename', 'game')) - : ""; - - $strgames = get_string("modulenameplural", "game"); - $strgame = get_string("modulename", "game"); - - if( function_exists( 'build_navigation')){ - $navigation = build_navigation('', $cm); - echo $OUTPUT->heading("$course->shortname: $game->name", "$course->shortname: $game->name", $navigation, - "", "", true, update_module_button($cm->id, $course->id, $strgame), - navmenu($course, $cm)); - }else{ - if ($course->category) { - $navigation = "wwwroot}/course/view.php?id=$course->id\">$course->shortname ->"; - } else { - $navigation = ''; - } - echo $OUTPUT->heading("$course->shortname: $game->name", "$course->fullname", - "$navigation id>$strgames -> $game->name", - "", "", true, update_module_button($cm->id, $course->id, $strgame), - navmenu($course, $cm)); - } - - - echo ''; // for overlib -/// Print heading and tabs if this is part of a preview - //if (has_capability('mod/game:preview', $context)) { - if ($attempt->userid == $USER->id) { // this is the report on a preview - $currenttab = 'preview'; - } else { - $currenttab = 'reports'; - $mode = ''; + echo $OUTPUT->heading("$course->shortname: $game->name", "$course->fullname", + "$navigation id>$strgames -> $game->name", + "", "", true, update_module_button($cm->id, $course->id, $strgame), + navmenu($course, $cm)); +} + +echo ''; // For overlib. + +// Print heading and tabs if this is part of a preview. +if ($attempt->userid == $USER->id) { + // This is the report on a preview. + $currenttab = 'preview'; +} else { + $currenttab = 'reports'; + $mode = ''; +} + +require('tabs.php'); + +// Load all the questions and states needed by this script. +// Load the questions needed by page. +$pagelist = $showall ? game_questions_in_game( $attempt->layout) : game_questions_on_page( $attempt->layout, $page); +$a = explode( ',', $pagelist); +$pagelist = ''; +foreach ($a as $item) { + if (substr( $item, 0, 1)) { + if (substr( $item, -1) != 'G') { + $pagelist .= ','.$item; } - include('tabs.php'); - //} else { - // print_heading(format_string($game->name)); - //} - -/// Load all the questions and states needed by this script - - // load the questions needed by page - $pagelist = $showall ? game_questions_in_game( $attempt->layout) : game_questions_on_page( $attempt->layout, $page); - $a = explode( ',', $pagelist); - $pagelist = ''; - foreach( $a as $item){ - if( substr( $item, 0, 1)){ - if( substr( $item, -1) != 'G'){ - $pagelist .= ','.$item; - } - } - } - $pagelist = substr( $pagelist, 1); - - if( $pagelist != ''){ - $sql = "SELECT q.*, i.id AS instance,i.id as iid,". - "i.score AS score,i.studentanswer". - " FROM {question} q,". - " {game_queries} i". - " WHERE i.attemptid = '$attempt->id' AND q.id = i.questionid AND (i.sourcemodule='question' or i.sourcemodule = 'quiz')". - " AND q.id IN ($pagelist)"; - - if (!$questions = $DB->get_records_sql( $sql)) { - print_error('No questions found'); - } - }else - { - $questions = array(); - } - - // Load the question type specific information - if (!get_question_options( $questions)) { - print_error('Could not load question options'); } +} + +$pagelist = substr( $pagelist, 1); - $states = game_compute_states( $game, $questions); -/// Print infobox - - //$timelimit = (int)$game->timelimit * 60; - $timelimit = 0; - $overtime = 0; - - if ($attempt->timefinish) { - if ($timetaken = ($attempt->timefinish - $attempt->timestart)) { - if($timelimit && $timetaken > ($timelimit + 60)) { - $overtime = $timetaken - $timelimit; - $overtime = format_time($overtime); - } - $timetaken = format_time($timetaken); - } else { - $timetaken = "-"; +if ($pagelist != '') { + $sql = "SELECT q.*, i.id AS instance,i.id as iid,". + "i.score AS score,i.studentanswer". + " FROM {question} q,". + " {game_queries} i". + " WHERE i.attemptid = '$attempt->id' AND q.id = i.questionid AND (i.sourcemodule='question' or i.sourcemodule = 'quiz')". + " AND q.id IN ($pagelist)"; + + if (!$questions = $DB->get_records_sql( $sql)) { + print_error('No questions found'); + } +} else { + $questions = array(); +} + +// Load the question type specific information. +if (!get_question_options( $questions)) { + print_error('Could not load question options'); +} + +$states = game_compute_states( $game, $questions); +// Print infobox. + +$timelimit = 0; +$overtime = 0; + +if ($attempt->timefinish) { + if ($timetaken = ($attempt->timefinish - $attempt->timestart)) { + if ($timelimit && $timetaken > ($timelimit + 60)) { + $overtime = $timetaken - $timelimit; + $overtime = format_time($overtime); } + $timetaken = format_time($timetaken); } else { - $timetaken = get_string('unfinished', 'game'); + $timetaken = "-"; } +} else { + $timetaken = get_string('unfinished', 'game'); +} + +$table->align = array("right", "left"); +if ($attempt->userid <> $USER->id) { + $student = $DB->get_record('user', array( 'id' => $attempt->userid)); + $picture = print_user_picture($student->id, $course->id, $student->picture, false, true); + $table->data[] = array($picture, + ''.fullname($student, true).''); +} - $table->align = array("right", "left"); - if ($attempt->userid <> $USER->id) { - $student = $DB->get_record('user', array( 'id' => $attempt->userid)); - $picture = print_user_picture($student->id, $course->id, $student->picture, false, true); - $table->data[] = array($picture, ''.fullname($student, true).''); +if (count($attempts = $DB->get_records('game_attempts', array( 'gameid' => $game->id, + 'userid' => $attempt->userid), 'attempt ASC')) > 1) { + // Print list of attempts. + $attemptlist = ''; + foreach ($attempts as $at) { + $attemptlist .= ($at->id == $attempt->id) ? ''.$at->attempt.', ' : ''.$at->attempt.', '; } - //if (has_capability('mod/game:grade', $context)){ - if( count($attempts = $DB->get_records('game_attempts', array( 'gameid' => $game->id, 'userid' => $attempt->userid), 'attempt ASC')) > 1) { - // print list of attempts - $attemptlist = ''; - foreach ($attempts as $at) { - $attemptlist .= ($at->id == $attempt->id) - ? ''.$at->attempt.', ' - : ''.$at->attempt.', '; - } - $table->data[] = array(get_string('attempts', 'game').':', trim($attemptlist, ' ,')); + $table->data[] = array(get_string('attempts', 'game').':', trim($attemptlist, ' ,')); +} + +$table->data[] = array(get_string('startedon', 'game').':', userdate($attempt->timestart)); +if ($attempt->timefinish) { + $table->data[] = array("$strtimecompleted:", userdate($attempt->timefinish)); + $table->data[] = array("$strtimetaken:", $timetaken); +} + +// If the student is allowed to see their score. +if ($options->scores) { + if ($game->grade) { + if ($overtime) { + $result->sumgrades = "0"; + $result->grade = "0.0"; } - //} - $table->data[] = array(get_string('startedon', 'game').':', userdate($attempt->timestart)); - if ($attempt->timefinish) { - $table->data[] = array("$strtimecompleted:", userdate($attempt->timefinish)); - $table->data[] = array("$strtimetaken:", $timetaken); + $a = new stdClass; + $percentage = round($attempt->score * 100, 0); + $a->grade = game_score_to_grade( $attempt->score, $game); + $a->maxgrade = $game->grade; + $table->data[] = array("$strscore:", "{$a->grade}/{$game->grade} ($percentage %)"); } - //if the student is allowed to see their score - if ($options->scores) { - if ($game->grade) { - if($overtime) { - $result->sumgrades = "0"; - $result->grade = "0.0"; - } - - $a = new stdClass; - $percentage = round($attempt->score*100, 0); - $a->grade = game_score_to_grade( $attempt->score, $game); - $a->maxgrade = $game->grade; - $table->data[] = array("$strscore:", "{$a->grade}/{$game->grade} ($percentage %)"); - //$table->data[] = array("$strgrade:", get_string('outof', 'game', $a)); +} + +if ($options->overallfeedback && $feedback) { + $table->data[] = array(get_string('feedback', 'game'), $feedback); +} + +if ($isteacher and $attempt->userid == $USER->id) { + // The teacher is at the end of a preview. Print button to start new preview. + unset($buttonoptions); + $buttonoptions['q'] = $game->id; + $buttonoptions['forcenew'] = true; + echo '
'; + print_single_button($CFG->wwwroot.'/mod/game/attempt.php', $buttonoptions, get_string('startagain', 'game')); + echo '
'; +} else { + // Print number of the attempt. + print_heading(get_string('reviewofattempt', 'game', $attempt->attempt)); +} +print_table($table); + +// Print javascript button to close the window, if necessary. +if (!$isteacher) { + include('attempt_close_js.php'); +} + +// Print the navigation panel if required. +$numpages = game_number_of_pages( $attempt->layout); +if ($numpages > 1 and !$showall) { + print_paging_bar($numpages, $page, 1, 'review.php?attempt='.$attempt->id.'&'); + echo '
'; + print_string('showall', 'game'); + echo '
'; +} + +// Print all the questions. +if ($pagelist) { + game_print_questions( $pagelist, $attempt, $questions, $options, $states, $game); +} + +// Print the navigation panel if required. +if ($numpages > 1 and !$showall) { + print_paging_bar($numpages, $page, 1, 'review.php?attempt='.$attempt->id.'&'); +} + +// Print javascript button to close the window, if necessary. +if (!$isteacher) { + require('attempt_close_js.php'); +} + +if (empty($popup)) { + echo $OUTPUT->footer($course); +} + +function game_compute_states( $game, $questions) { + global $QTYPES; + + // Restore the question sessions to their most recent states creating new sessions where required. + $states = array(); + foreach ($questions as $question) { + $state = new StdClass; + + $cmoptions->course = $game->course; + $cmoptions->optionflags->optionflags = 0; + $cmoptions->id = 0; + $cmoptions->shuffleanswers = 1; + + $state->last_graded = new StdClass; + $state->last_graded->event = QUESTION_EVENTOPEN; + + $state->raw_grade = 0; + + $attempt = 0; + if (!$QTYPES[$question->qtype]->create_session_and_responses( $question, $state, $cmoptions, $attempt)) { + print_error( 'game_compute_states: problem'); } - } - if ($options->overallfeedback && $feedback) { - $table->data[] = array(get_string('feedback', 'game'), $feedback); - } - if ($isteacher and $attempt->userid == $USER->id) { - // the teacher is at the end of a preview. Print button to start new preview - unset($buttonoptions); - $buttonoptions['q'] = $game->id; - $buttonoptions['forcenew'] = true; - echo '
'; - print_single_button($CFG->wwwroot.'/mod/game/attempt.php', $buttonoptions, get_string('startagain', 'game')); - echo '
'; - } else { // print number of the attempt - print_heading(get_string('reviewofattempt', 'game', $attempt->attempt)); - } - print_table($table); - // print javascript button to close the window, if necessary - if (!$isteacher) { - include('attempt_close_js.php'); - } + $state->event = QUESTION_EVENTOPEN; + $state->manualcomment = ''; -/// Print the navigation panel if required - $numpages = game_number_of_pages( $attempt->layout); - if ($numpages > 1 and !$showall) { - print_paging_bar($numpages, $page, 1, 'review.php?attempt='.$attempt->id.'&'); - echo '
'; - print_string('showall', 'game'); - echo '
'; - } + $state->responses = array( '' => $question->studentanswer); + $state->attempt = $question->iid; -/// Print all the questions - if( $pagelist){ - game_print_questions( $pagelist, $attempt, $questions, $options, $states, $game); + $states[ $question->id] = $state; } + return $states; +} - // Print the navigation panel if required - if ($numpages > 1 and !$showall) { - print_paging_bar($numpages, $page, 1, 'review.php?attempt='.$attempt->id.'&'); - } +function game_print_questions( $pagelist, $attempt, $questions, $options, $states, $game) { + $pagequestions = explode(',', $pagelist); + $number = game_first_questionnumber( $attempt->layout, $pagelist); + foreach ($pagequestions as $i) { + if (!isset($questions[$i])) { + echo $OUTPUT->box_start('center', '90%'); + echo '' . $number . '
'; + notify(get_string('errormissingquestion', 'quiz', $i)); + echo $OUTPUT->box_end(); + $number++; // Just guessing that the missing question would have lenght 1. + continue; + } + $options->validation = QUESTION_EVENTVALIDATE === $states[$i]->event; + $options->history = false; + unset( $options->questioncommentlink); - // print javascript button to close the window, if necessary - if (!$isteacher) { - include('attempt_close_js.php'); - } + // Print the question. + if ($i > 0) { + echo "
\n"; + } + + $questions[$i]->maxgrade = 0; - if (empty($popup)) { - echo $OUTPUT->footer($course); + $options->correct_responses = 0; + $options->feedback = 0; + $options->readonly = 0; + + global $QTYPES; + + unset( $cmoptions); + $cmoptions->course = $game->course; + $cmoptions->optionflags->optionflags = 0; + $cmoptions->id = 0; + $cmoptions->shuffleanswers = 1; + $attempt = 0; + $question = $questions[ $i]; + if (!$QTYPES[$question->qtype]->create_session_and_responses( $question, $state, $cmoptions, $attempt)) { + print_error( 'game_sudoku_showquestions_quiz: problem'); + } + $cmoptions->optionflags = 0; + print_question( $question, $states[$i], $number, $cmoptions, $options); + $number += $questions[$i]->length; } - - function game_compute_states( $game, $questions) - { - global $QTYPES; - - // Restore the question sessions to their most recent states - // creating new sessions where required - - $states = array(); - foreach ($questions as $question) { - $state = new StdClass; - - $cmoptions->course = $game->course; - $cmoptions->optionflags->optionflags = 0; - $cmoptions->id = 0; - $cmoptions->shuffleanswers = 1; - - $state->last_graded = new StdClass; - $state->last_graded->event = QUESTION_EVENTOPEN; - - $state->raw_grade = 0; - - $attempt = 0; - if (!$QTYPES[$question->qtype]->create_session_and_responses( $question, $state, $cmoptions, $attempt)) { - print_error( 'game_compute_states: problem'); - } - - $state->event = QUESTION_EVENTOPEN; - //$question->maxgrade = 100; - $state->manualcomment = ''; - - $state->responses = array( '' => $question->studentanswer); - $state->attempt = $question->iid; - - $states[ $question->id] = $state; - } - return $states; - } - - - - function game_print_questions( $pagelist, $attempt, $questions, $options, $states, $game) - { - $pagequestions = explode(',', $pagelist); - $number = game_first_questionnumber( $attempt->layout, $pagelist); - foreach ($pagequestions as $i) { - if (!isset($questions[$i])) { - echo $OUTPUT->box_start('center', '90%'); - echo '' . $number . '
'; - notify(get_string('errormissingquestion', 'quiz', $i)); - echo $OUTPUT->box_end(); - $number++; // Just guessing that the missing question would have lenght 1 - continue; - } - $options->validation = QUESTION_EVENTVALIDATE === $states[$i]->event; - //$options->history = ($isteacher and !$attempt->preview) ? 'all' : 'graded'; - $options->history = false; - unset( $options->questioncommentlink); - // Print the question - if ($i > 0) { - echo "
\n"; - } - $questions[$i]->maxgrade = 0; - - $options->correct_responses = 0; - $options->feedback = 0; - $options->readonly = 0; - - global $QTYPES; - - unset( $cmoptions); - $cmoptions->course = $game->course; - $cmoptions->optionflags->optionflags = 0; - $cmoptions->id = 0; - $cmoptions->shuffleanswers = 1; - $attempt = 0; - $question = $questions[ $i]; - if (!$QTYPES[$question->qtype]->create_session_and_responses( $question, $state, $cmoptions, $attempt)) { - print_error( 'game_sudoku_showquestions_quiz: problem'); - } - $cmoptions->optionflags = 0; - print_question( $question, $states[$i], $number, $cmoptions, $options); - $number += $questions[$i]->length; - } - } - -?> +} diff --git a/settings.php b/settings.php old mode 100644 new mode 100755 index ed99261..aaac733 --- a/settings.php +++ b/settings.php @@ -1,4 +1,19 @@ -. + /** * Form for creating and modifying a game * @@ -12,7 +27,7 @@ defined('MOODLE_INTERNAL') || die; if ($ADMIN->fulltree) { require_once(dirname(__FILE__).'/lib.php'); - // General settings + // General settings. $settings->add(new admin_setting_configcheckbox('game/hidebookquiz', get_string('hidebookquiz', 'game'), get_string('confighidebookquiz', 'game'), 0)); diff --git a/showanswers.php b/showanswers.php index d55731a..010aa23 100755 --- a/showanswers.php +++ b/showanswers.php @@ -1,4 +1,19 @@ -. + /** * This page shows the answers of the current game * @@ -6,49 +21,53 @@ * @version $Id: showanswers.php,v 1.7 2012/07/25 22:46:42 bdaloukas Exp $ * @package game **/ - - require_once("../../config.php"); - require_once( "headergame.php"); - if (!has_capability('mod/game:viewreports', $context)){ - print_error( get_string( 'only_teachers', 'game')); - } +require_once("../../config.php"); +require_once( "headergame.php"); + +if (!has_capability('mod/game:viewreports', $context)) { + print_error( get_string( 'only_teachers', 'game')); +} - $PAGE->navbar->add(get_string('showanswers', 'game')); +$PAGE->navbar->add(get_string('showanswers', 'game')); - $action = optional_param('action', "", PARAM_ALPHANUM); // action - if( $action == 'delstats') - $DB->delete_records('game_repetitions', array('gameid' => $game->id, 'userid' => $USER->id)); - if( $action == 'computestats') - game_compute_repetitions($game); +$action = optional_param('action', "", PARAM_ALPHANUM); // Action. +if ($action == 'delstats') { + $DB->delete_records('game_repetitions', array('gameid' => $game->id, 'userid' => $USER->id)); +} +if ($action == 'computestats') { + game_compute_repetitions($game); +} - echo ''.get_string('repetitions', 'game').':   '; - echo get_string('user').': '; - game_showusers($game); - echo "  wwwroot}/mod/game/showanswers.php?q=$q&action=delstats\">".get_string('clearrepetitions','game').''; - echo "   wwwroot}/mod/game/showanswers.php?q=$q&action=computestats\">".get_string('computerepetitions','game').''; - echo '

'; +echo ''.get_string('repetitions', 'game').':   '; +echo get_string('user').': '; +game_showusers($game); +echo "  wwwroot}/mod/game/showanswers.php?q=$q&action=delstats\">". + get_string('clearrepetitions', 'game').''; +echo "   wwwroot}/mod/game/showanswers.php?q=$q&action=computestats\">". + get_string('computerepetitions', 'game').''; +echo '

'; - $existsbook = ($DB->get_record( 'modules', array( 'name' => 'book'), 'id,id')); - game_showanswers( $game, $existsbook, $context); +$existsbook = ($DB->get_record( 'modules', array( 'name' => 'book'), 'id,id')); +game_showanswers( $game, $existsbook, $context); - echo $OUTPUT->footer(); +echo $OUTPUT->footer(); -function game_compute_repetitions($game){ +function game_compute_repetitions($game) { global $DB, $USER; - $DB->delete_records('game_repetitions', array('gameid' => $game->id,'userid' => $USER->id)); + $DB->delete_records('game_repetitions', array('gameid' => $game->id, 'userid' => $USER->id)); $sql = "INSERT INTO {game_repetitions}( gameid,userid,questionid,glossaryentryid,repetitions) ". "SELECT $game->id,$USER->id,questionid,glossaryentryid,COUNT(*) ". "FROM {game_queries} WHERE gameid=$game->id AND userid=$USER->id GROUP BY questionid,glossaryentryid"; - if( !$DB->execute( $sql)) + if (!$DB->execute( $sql)) { print_error('Problem on computing statistics for repetitions'); + } } -function game_showusers($game) -{ +function game_showusers($game) { global $CFG, $USER; $users = array(); @@ -63,11 +82,13 @@ function game_showusers($game) if ($guest = guest_user()) { $users[$guest->id] = fullname($guest); } + $href = $CFG->wwwroot.'/mod/game/showanswers.php?q='.$game->id.'&userid='; ?> id,PARAM_INT); + $selected = optional_param('userid', $USER->id, PARAM_INT); $output = '' . "\n"; + $output .= ' ' . "\n"; } } - echo $output . '' . "\n"; } + echo $output . '' . "\n"; +} - function game_showgroups($game) - { - global $CFG, $USER, $DB; - - $groups = array(); - if( ($recs = $DB->get_records_sql( "SELECT id,name FROM {groups} WHERE courseid=$game->course ORDER BY name"))){ - foreach( $recs as $rec){ - $groups[ $rec->id] = $rec->name; - } - } +function game_showgroups($game) { + global $CFG, $USER, $DB; - ?> + $groups = array(); + if (($recs = $DB->get_records_sql( "SELECT id,name FROM {groups} WHERE courseid=$game->course ORDER BY name"))) { + foreach ($recs as $rec) { + $groups[ $rec->id] = $rec->name; + } + } + $href = $CFG->wwwroot.'/mod/game/showattempts.php?q='.$game->id.'&groupid='; +?> ' . "\n"; - $output .= ' ' . "\n"; - } + $attributes = 'onchange="javascript:onselectgroup();"'; + $name = 'group'; + $id = 'menu'.$name; + $class = 'menu'.$name; + $class = 'select ' . $class; // Add 'select' selector always. + $nothing = get_string("allgroups"); + $nothingvalue = '0'; + $options = $groups; + $selected = optional_param('groupid', 0, PARAM_INT); + + $output = '' . "\n"; } + echo $output . '' . "\n"; +} - function game_showattempts($game){ - global $CFG, $DB, $OUTPUT; - - $allowdelete = optional_param('allowdelete', 0, PARAM_INT); - - $userid = optional_param('userid',0,PARAM_INT); - $limitfrom = optional_param('limitfrom', 0, PARAM_INT); - $gamekind = $game->gamekind; - $update = get_coursemodule_from_instance( 'game', $game->id, $game->course)->id; - - //Here are user attempts - $table = "{game_attempts} as ga, {user} u, {game} as g"; - $select = "ga.userid=u.id AND ga.gameid={$game->id} AND g.id={$game->id}"; - $fields = "ga.id, u.lastname, u.firstname, ga.attempts,". - "timestart, timefinish, timelastattempt, score, ga.lastip, ga.lastremotehost"; - if( $userid != 0) - $select .= ' AND u.id='.$userid; - $sql = "SELECT COUNT(*) AS c FROM $table WHERE $select"; - $count = $DB->count_records_sql( $sql); - $maxlines = 20; - $recslimitfrom = $recslimitnum = ''; - if( $count > $maxlines){ - $recslimitfrom = ( $limitfrom ? $limitfrom * $maxlines : ''); - $recslimitnum = $maxlines; - - for($i=0; $i*$maxlines < $count; $i++){ - if( $i == $limitfrom){ - echo ($i+1).' '; - }else - { - echo "wwwroot}/mod/game/showattempts.php?q={$game->id}&limitfrom=$i&\">".($i+1).""; - echo '  '; - } +function game_showattempts($game) { + global $CFG, $DB, $OUTPUT; + + $allowdelete = optional_param('allowdelete', 0, PARAM_INT); + + $userid = optional_param('userid', 0, PARAM_INT); + $limitfrom = optional_param('limitfrom', 0, PARAM_INT); + $gamekind = $game->gamekind; + $update = get_coursemodule_from_instance( 'game', $game->id, $game->course)->id; + + // Here are user attempts. + $table = "{game_attempts} as ga, {user} u, {game} as g"; + $select = "ga.userid=u.id AND ga.gameid={$game->id} AND g.id={$game->id}"; + $fields = "ga.id, u.lastname, u.firstname, ga.attempts,". + "timestart, timefinish, timelastattempt, score, ga.lastip, ga.lastremotehost"; + if ($userid != 0) { + $select .= ' AND u.id='.$userid; + } + $sql = "SELECT COUNT(*) AS c FROM $table WHERE $select"; + $count = $DB->count_records_sql( $sql); + $maxlines = 20; + $recslimitfrom = $recslimitnum = ''; + if ($count > $maxlines) { + $recslimitfrom = ( $limitfrom ? $limitfrom * $maxlines : ''); + $recslimitnum = $maxlines; + + for ($i = 0; $i * $maxlines < $count; $i++) { + if ($i == $limitfrom) { + echo ($i + 1).' '; + } else { + echo "wwwroot}/mod/game/showattempts.php?q={$game->id}&limitfrom=$i&\">".($i + 1).""; + echo '  '; } - echo "
"; } + echo "
"; + } - $sql = "SELECT $fields FROM $table WHERE $select ORDER BY timelastattempt DESC,timestart DESC"; - if( ($recs = $DB->get_records_sql( $sql, null, $recslimitfrom, $recslimitnum)) != false){ - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo "\r\n"; + $sql = "SELECT $fields FROM $table WHERE $select ORDER BY timelastattempt DESC,timestart DESC"; + if (($recs = $DB->get_records_sql( $sql, null, $recslimitfrom, $recslimitnum)) != false) { + echo '
'.get_string( 'delete').''.get_string('user').''.get_string('lastip', 'game').''.get_string('timestart', 'game').''.get_string('timelastattempt', 'game').''.get_string('timefinish', 'game').''.get_string('score', 'game').''.get_string('attempts', 'game').''.get_string('preview', 'game').''.get_string('showsolution', 'game').'
'; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo "\r\n"; - foreach( $recs as $rec){ - echo ''; - echo ''; + echo ''; - echo ''; - echo ''; - echo '\r\n"; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - - //Show solution - echo ''; - echo "\r\n"; + echo '">'; + echo ''.get_string( 'delete').''; + } + echo ''; + echo ''; + echo ''; + echo '\r\n"; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + // Show the solution. + echo '
'.get_string( 'delete').''.get_string('user').''.get_string('lastip', 'game').''.get_string('timestart', 'game').''.get_string('timelastattempt', 'game').''.get_string('timefinish', 'game').''.get_string('score', 'game').''.get_string('attempts', 'game').''.get_string('preview', 'game').''.get_string('showsolution', 'game').'
'; - if( ($rec->timefinish == 0) or $allowdelete){ - echo "\r\nwwwroot}/mod/game/showattempts.php?attemptid={$rec->id}&q={$game->id}&action=delete"; - if( $allowdelete) - echo '&allowdelete=1'; - echo '">'; - echo ''.get_string( 'delete').''; + foreach ($recs as $rec) { + echo '
'; + if (($rec->timefinish == 0) or $allowdelete) { + echo "\r\nwwwroot}/mod/game/showattempts.php?attemptid={$rec->id}"; + echo "&q={$game->id}&action=delete"; + if ($allowdelete) { + echo '&allowdelete=1'; } - echo '
'.$rec->firstname. ' '.$rec->lastname.'
'.(strlen( $rec->lastremotehost) > 0 ? $rec->lastremotehost : $rec->lastip).'
'.( $rec->timestart != 0 ? userdate($rec->timestart) : '')."
'.( $rec->timelastattempt != 0 ? userdate($rec->timelastattempt) : '').'
'.( $rec->timefinish != 0 ? userdate($rec->timefinish) : '').'
'.round($rec->score * 100).'
'.$rec->attempts.'
'; - //Preview - if( ($gamekind == 'cross') or ($gamekind == 'sudoku') or ($gamekind == 'hangman') or ($gamekind == 'cryptex')){ - echo "\r\nwwwroot}/mod/game/preview.php?action=preview&attemptid={$rec->id}&gamekind=$gamekind"; - echo '&update='.$update."&q={$game->id}\">"; - echo ''.get_string( 'preview', 'game').''; - } - echo '
'; - if( ($gamekind == 'cross') or ($gamekind == 'sudoku') or ($gamekind == 'hangman') or ($gamekind == 'cryptex') ){ - echo "\r\nwwwroot}/mod/game/preview.php?action=solution&attemptid={$rec->id}&gamekind={$gamekind}&update=$update&&q={$game->id}\">"; - echo ''.get_string( 'showsolution', 'game').''; - } - echo '
'.$rec->firstname. ' '.$rec->lastname.'
'.(strlen( $rec->lastremotehost) > 0 ? $rec->lastremotehost : $rec->lastip).'
'.( $rec->timestart != 0 ? userdate($rec->timestart) : '')."
'.( $rec->timelastattempt != 0 ? userdate($rec->timelastattempt) : '').'
'.( $rec->timefinish != 0 ? userdate($rec->timefinish) : '').'
'.round($rec->score * 100).'
'.$rec->attempts.'
'; + + // Preview. + if (($gamekind == 'cross') or ($gamekind == 'sudoku') or ($gamekind == 'hangman') or ($gamekind == 'cryptex')) { + echo "\r\nwwwroot}/mod/game/preview.php?action=preview&"; + echo "attemptid={$rec->id}&gamekind=$gamekind"; + echo '&update='.$update."&q={$game->id}\">"; + echo ''.get_string( 'preview', 'game').''; + } + echo '
'; + if (($gamekind == 'cross') or ($gamekind == 'sudoku') or ($gamekind == 'hangman') or ($gamekind == 'cryptex') ) { + echo "\r\nwwwroot}/mod/game/preview.php?action=solution&". + "attemptid={$rec->id}&gamekind={$gamekind}&update=$update&&". + "q={$game->id}\">"; + echo ''.get_string( 'showsolution', 'game').''; } - echo "
\r\n"; + echo ''; + echo "\r\n"; } + echo "\r\n"; } +} + +function game_ondeleteattempt( $game) { + global $CFG, $DB; - function game_ondeleteattempt( $game) - { - global $CFG, $DB; - - $attemptid = required_param('attemptid', PARAM_INT); - - $attempt = $DB->get_record( 'game_attempts', array( 'id' => $attemptid)); - - switch( $game->gamekind) - { - case 'bookquiz': - $DB->delete_records( 'game_bookquiz_chapters', array( 'attemptid' => $attemptid)); - break; - } - $DB->delete_records( 'game_queries', array( 'attemptid' => $attemptid)); - $DB->delete_records( 'game_attempts', array( 'id' => $attemptid)); - } + $attemptid = required_param('attemptid', PARAM_INT); + + $attempt = $DB->get_record( 'game_attempts', array( 'id' => $attemptid)); + + switch( $game->gamekind) { + case 'bookquiz': + $DB->delete_records( 'game_bookquiz_chapters', array( 'attemptid' => $attemptid)); + break; + } + $DB->delete_records( 'game_queries', array( 'attemptid' => $attemptid)); + $DB->delete_records( 'game_attempts', array( 'id' => $attemptid)); +} diff --git a/tabs.php b/tabs.php index d89168b..3383de0 100755 --- a/tabs.php +++ b/tabs.php @@ -1,4 +1,19 @@ -. + /** * Sets up the tabs used by the game pages based on the users capabilites. * @@ -8,7 +23,7 @@ */ if (empty($game)) { - print_error('You cannot call this script in that way'); + print_error('You cannot call this script in that way'); } if (!isset($currenttab)) { $currenttab = ''; @@ -29,39 +44,34 @@ $activated = array(); global $USER; - if (has_capability('mod/game:view', $context)) { $row[] = new tabobject('info', "{$CFG->wwwroot}/mod/game/view.php?q=$game->id", get_string('info', 'game')); } if (has_capability('mod/game:viewreports', $context)) { -//if( isteacher( $game->course, $USER->id)){ - $row[] = new tabobject('reports', "{$CFG->wwwroot}/mod/game/report.php?q=$game->id", get_string('results', 'game')); -//} + $row[] = new tabobject('reports', "{$CFG->wwwroot}/mod/game/report.php?q=$game->id", get_string('results', 'game')); } if (has_capability('mod/game:preview', $context)) { $row[] = new tabobject('preview', "{$CFG->wwwroot}/mod/game/attempt.php?a=$game->id", get_string('preview', 'game')); } if (has_capability('mod/game:manage', $context)) { -//if( isteacher( $game->course, $USER->id)){ - global $USER; - $sesskey = $USER->sesskey; - $url = "{$CFG->wwwroot}/course/mod.php?update=$cm->id&return=true&sesskey=$sesskey"; + global $USER; + $sesskey = $USER->sesskey; + $url = "{$CFG->wwwroot}/course/mod.php?update=$cm->id&return=true&sesskey=$sesskey"; $row[] = new tabobject('edit', $url, get_string('edit')); -//} } -if ($currenttab == 'info' && count($row) == 1) { +if ( !($currenttab == 'info' && count($row) == 1)) { // Don't show only an info tab (e.g. to students). -} else { $tabs[] = $row; } if ($currenttab == 'reports' and isset($mode)) { $inactive[] = 'reports'; $activated[] = 'reports'; - + $allreports = get_list_of_plugins("mod/game/report"); - $reportlist = array ('overview' /*, 'regrade' , 'grading' , 'analysis'*/); // Standard reports we want to show first + // Standard reports we want to show first + $reportlist = array ('overview' /*, 'regrade' , 'grading' , 'analysis'*/); foreach ($allreports as $report) { if (!in_array($report, $reportlist)) { @@ -98,5 +108,3 @@ if ($currenttab == 'edit' and isset($mode)) { } print_tabs($tabs, $currenttab, $inactive, $activated); - -?> diff --git a/translate.php b/translate.php index 06ae926..fdea7a2 100755 --- a/translate.php +++ b/translate.php @@ -1,4 +1,19 @@ -. + /** * Check translation of module Game * @@ -21,8 +36,9 @@ require( 'locallib.php'); $moodle19dir = '/var/www/moodle19'; $context = get_context_instance(CONTEXT_COURSE, $COURSE->id); -if (!has_capability('mod/game:viewreports', $context)) +if (!has_capability('mod/game:viewreports', $context)) { error( get_string( 'only_teachers', 'game')); +} $langname = array(); $langname['ca'] = 'Català (ca)'; @@ -45,16 +61,16 @@ $langname['uk'] = 'Українська (uk)'; $langname['pt_br'] = 'Português - Brasil (pt_br)'; $langname['zh_cn'] = '简体中文 (zh_cn)'; ksort( $langname); -$a = read_dir( $CFG->dirroot.'/mod/game','php'); +$a = read_dir( $CFG->dirroot.'/mod/game', 'php'); $strings = array(); $files = array(); -foreach( $a as $file) +foreach ($a as $file) { $files[] = $file; +} sort( $files); -foreach( $files as $file) -{ - readsourcecode( $file, $strings); +foreach ($files as $file) { + readsourcecode( $file, $strings); } $strings[ 'game:attempt'] = '/db/access.php * game:attempt'; @@ -86,150 +102,151 @@ unset( $en[ 'convertto']); $langs = computelangs(); $sum = array(); $destdir = game_export_createtempdir(); -foreach( $langs as $lang) -{ - if($lang != 'en' and $lang != 'CVS' and strpos( $lang, '_utf8') == 0 and strpos( $lang, '_uft8') == 0) - { +foreach ($langs as $lang) { + if ($lang != 'en' and $lang != 'CVS' and strpos( $lang, '_utf8') == 0 and strpos( $lang, '_uft8') == 0) { computediff( $en, $lang, $strings, $langname, $sum, $destdir, $untranslated); $auntranslated[ $lang] = $untranslated; } } -$file_no_translation = 'game_lang_no_translation.zip'; -$filezip=game_create_zip( $destdir, $COURSE->id, $file_no_translation); +$filenotranslation = 'game_lang_no_translation.zip'; +$filezip = game_create_zip( $destdir, $COURSE->id, $filenotranslation); remove_dir( $destdir); -$ilang=0; +$ilang = 0; echo ''; echo ""; -foreach($sum as $s) - echo ''.$s."\r\n"; +foreach ($sum as $s) { + echo ''.$s."\r\n"; +} echo "
CounterLanguageMissing wordsPercent completed
'.(++$ilang).'
'.(++$ilang).'
"; -echo "
wwwroot}/file.php/1/export/$file_no_translation\">Words that is not translated yet in each language"; +echo "
wwwroot}/file.php/1/export/$filenotranslation\">Words that is not translated yet in each language"; -//Find missing strings on en/game.php +// Find missing strings on en/game.php. $not = array(); $prevfile = ''; -foreach( $strings as $info) -{ +foreach ($strings as $info) { $pos = strpos( $info, '*'); - $name = substr( $info, $pos+2); - $file = substr( $info, 0, $pos-1); - if( substr( $file, 0, 1) == '/') + $name = substr( $info, $pos + 2); + $file = substr( $info, 0, $pos - 1); + if (substr( $file, 0, 1) == '/') { $file = substr( $file, 1); - if( $file != $prevfile) - { + } + if ($file != $prevfile) { $prevfile = $file; } - if( !array_key_exists( $name, $en)) + if (!array_key_exists( $name, $en)) { $not[ $info] = $info; + } } -$oldfile=''; +$oldfile = ''; unset( $not[ 'tabs.php * $report']); unset( $not[ 'mod_form.php * game_\'.$gamekin']); unset( $not[ 'mod.html * game_\'.$form->gamekin']); unset( $not[ '/report/overview/report.php * fullname\')."\t".get_string(\'startedon']); unset( $not[ '/hangman/play.php * hangman_correct_\'.$ter']); -if( count( $not)) +if (count( $not)) { echo "

Missing strings on en/game.php
"; -foreach( $not as $key => $value) -{ +} +foreach ($not as $key => $value) { $pos = strpos( $value, '*'); $file = trim( substr( $value, 0, $pos)); - $key = trim( substr( $value, $pos+1)); - if( $key == 'convertfrom' or $key == 'convertto') + $key = trim( substr( $value, $pos + 1)); + if ($key == 'convertfrom' or $key == 'convertto') { continue; - - if( substr( $file, 0, 1) == '/') + } + + if (substr( $file, 0, 1) == '/') { $file = substr( $file, 1); - if( $file != $oldfile) - { + } + if ($file != $oldfile) { echo "
//$file
\r\n"; - $fileold=$file; + $fileold = $file; } echo '$'."string[ '$key'] = \"\";
"; } -//Finds translations to en that are not used now +// Finds translations to en that are not used now. $ret = ''; -foreach( $en as $key => $value) -{ - if( !array_key_exists( $key, $strings)) +foreach ($en as $key => $value) { + if (!array_key_exists( $key, $strings)) { $ret .= "$key = $value
"; + } } -if( $ret != '') +if ($ret != '') { echo '
Translations that are not used

'.$ret; +} -//Creates the zip files of translations +// Creates the zip files of translations. $destdir = game_export_createtempdir(); sort( $strings); -foreach( $langname as $lang => $name) -{ - $strings_lang = readlangfile( $lang, $header); - if (empty($string_lang)) { +foreach ($langname as $lang => $name) { + $stringslang = readlangfile( $lang, $header); + if (empty($stringlang)) { continue; } $ret = ''; - - foreach( $strings_lang as $key => $value) - { - if( !array_key_exists( $key, $en)) - { - if( $key != 'convertfrom' and $key != 'convertto') + + foreach ($stringslang as $key => $value) { + if (!array_key_exists( $key, $en)) { + if ($key != 'convertfrom' and $key != 'convertto') { $ret .= '
'.$key."\r\n"; + } } } - if( $ret != '') + if ($ret != '') { echo '
Unused translation for lang '.$lang.'

'.substr( $ret, 4)."\r\n"; + } $ret = $header; - foreach( $strings as $info) - { + foreach ($strings as $info) { $pos = strpos( $info, '*'); - $name = substr( $info, $pos+2); - $file = substr( $info, 0, $pos-1); - if( substr( $file, 0, 1) == '/') + $name = substr( $info, $pos + 2); + $file = substr( $info, 0, $pos - 1); + if (substr( $file, 0, 1) == '/') { $file = substr( $file, 1); - if( $file != $prevfile) - { + } + if ($file != $prevfile) { $prevfile = $file; $ret .= "\r\n//".$file."\r\n"; } - if( array_key_exists( $name, $strings_lang)) - $ret .= '$string'."[ '$name'] = ".$strings_lang[ $name]."\r\n"; + if (array_key_exists( $name, $stringslang)) { + $ret .= '$string'."[ '$name'] = ".$stringslang[ $name]."\r\n"; + } } - if( $lang != 'en') - { + if ($lang != 'en') { $untranslated = $auntranslated[ $lang]; - if( $untranslated != '') + if ($untranslated != '') { $ret .= "\r\n//Untranslated\r\n".$untranslated; + } } mkdir( $destdir.'/'.$lang); $file = $destdir.'/'.$lang.'/game.php'; file_put_contents( $file, $ret); } -$file_sorted = 'game_lang_sorted.zip'; -$filezip=game_create_zip( $destdir, $COURSE->id, $file_sorted); +$filesorted = 'game_lang_sorted.zip'; +$filezip = game_create_zip( $destdir, $COURSE->id, $filesorted); remove_dir( $destdir); -echo "
wwwroot}/file.php/1/export/$file_sorted\">Sorted translation files"; +echo "
wwwroot}/file.php/1/export/$filesorted\">Sorted translation files"; asort( $en); $sprev = ''; $keyprev = ''; $ret = ''; -foreach( $en as $key => $s) -{ - if( $s == $sprev) +foreach ($en as $key => $s) { + if ($s == $sprev) { $ret .= "$key$keyprev$s\r\n"; + } $sprev = $s; $keyprev = $key; } -if( $ret != '') - echo '
Same translations

'.$ret.'
Word1Word2Translation
'; +if ($ret != '') { + echo '
Same translations

'; + echo ''.$ret.'
Word1Word2Translation
'; +} -function readlangfile( $lang, &$header) -{ +function readlangfile( $lang, &$header) { global $CFG; $file = $CFG->dirroot.'/mod/game/lang/'.$lang.'/game.php'; @@ -242,45 +259,45 @@ function readlangfile( $lang, &$header) $lines = file( $file); $header = ''; $endofheader = false; - foreach( $lines as $line) - { - if( $endofheader == false) - { - if( strpos( $line, '//') === false) + foreach ($lines as $line) { + if ($endofheader == false) { + if (strpos( $line, '//') === false) { $endofheader = true; - else + } else { $header .= $line; + } } - if( splitlangdefinition($line,$name,$trans)) + if (splitlangdefinition($line, $name, $trans)) { $a[ $name] = $trans; + } } - - if( $lang != 'en') + + if ($lang != 'en') { readlangfile_repairmoodle19( $lang, $a); + } return $a; } -function splitlangdefinition($line,&$name,&$trans) -{ +function splitlangdefinition($line, &$name, &$trans) { $pos1 = strpos( $line, '='); - if( $pos1 == 0) + if ($pos1 == 0) { return false; + } $pos2 = strpos( $line, '//'); - if( $pos2 != 0 or substr( $line, 0, 2) == '//') - { - if( $pos2 < $pos1) - return false; //Commented line + if ($pos2 != 0 or substr( $line, 0, 2) == '//') { + if ($pos2 < $pos1) { + return false; // Commented line. + } } - - $name = trim(substr( $line, 0, $pos1-1)); - $trans = trim(substr( $line, $pos1+1)); + + $name = trim(substr( $line, 0, $pos1 - 1)); + $trans = trim(substr( $line, $pos1 + 1)); $pos = strpos( $name, '\''); - if( $pos) - { - $name = substr( $name, $pos+1); + if ($pos) { + $name = substr( $name, $pos + 1); $pos = strrpos( $name, '\''); $name = substr( $name, 0, $pos); } @@ -288,122 +305,124 @@ function splitlangdefinition($line,&$name,&$trans) return true; } -function readsourcecode( $file, &$strings) -{ +function readsourcecode( $file, &$strings) { global $CFG; $lines = file( $file); - foreach( $lines as $line) - { + foreach ($lines as $line) { parseline( $strings, $line, $file); } return $strings; } -function parseline( &$strings, $line, $filename) -{ +function parseline( &$strings, $line, $filename) { global $CFG; - + $filename = substr( $filename, strlen( $CFG->dirroot.'/mod/game/')); - if( strpos($filename, '/')) + if (strpos($filename, '/')) { $filename = '/'.$filename; + } $pos0 = 0; - for(;;) - { + for (;;) { $pos = strpos( $line, 'get_string', $pos0); - if( $pos == false) + if ($pos == false) { $pos = strpos( $line, 'print_string', $pos0); - if( $pos === false) + } + if ($pos === false) { break; + } $pos1 = strpos( $line, '(', $pos); $pos2 = strpos( $line, ',', $pos); $pos3 = strpos( $line, ')', $pos); - if( $pos1 == 0 or $pos2 == 0 or $pos3 == 0) - { - $pos0 = $pos+1; + if ($pos1 == 0 or $pos2 == 0 or $pos3 == 0) { + $pos0 = $pos + 1; continue; } - $name = gets( substr( $line, $pos1+1, $pos2-$pos1-1)); - $file = gets( substr( $line, $pos2+1, $pos3-$pos2-1)); + $name = gets( substr( $line, $pos1 + 1, $pos2 - $pos1 - 1)); + $file = gets( substr( $line, $pos2 + 1, $pos3 - $pos2 - 1)); - if( $file == 'game') - { - if( !array_key_exists( $name, $strings)) + if ($file == 'game') { + if (!array_key_exists( $name, $strings)) { $strings[ $name] = $filename.' * '.$name; - }else - { + } + } else { $pos4 = strpos($file, '\''); - if( $pos4) + if ($pos4) { $file = substr( $file, 0, $pos4); - + } $pos4 = strpos($file, '"'); - if($pos4) + if ($pos4) { $file = substr( $file, 0, $pos4); + } - if( $file == 'game') - { - if( !array_key_exists( $name, $strings)) + if ($file == 'game') { + if (!array_key_exists( $name, $strings)) { $strings[ $name] = $filename.' * '.$name; + } } } - $pos0 = $pos+1; + $pos0 = $pos + 1; } } -function gets( $s) -{ +function gets( $s) { $s = trim( $s); - if( substr( $s, 0, 1) == '"') + if (substr( $s, 0, 1) == '"') { $s = substr( $s, 1, -1); - if( substr( $s, 0, 1) == '\'') + } + if (substr( $s, 0, 1) == '\'') { $s = substr( $s, 1, -1); + } + return $s; } function read_dir($dir, $ext) { - if( $ext != '') + if ($ext != '') { $ext = '.' .$ext; + } $len = strlen( $ext); $a = array( $dir); $ret = array(); - while( count( $a)){ + while (count( $a)) { $dir = array_pop( $a); - if( strpos( $dir, '/lang/') != 0) + if (strpos( $dir, '/lang/') != 0) { continue; + } $d = dir($dir); while (false !== ($entry = $d->read())) { - if($entry!='.' && $entry!='..') { + if ($entry != '.' && $entry != '..') { $entry = $dir.'/'.$entry; - if(is_dir($entry)) { + if (is_dir($entry)) { $a[] = $entry; } else { - if( $len == 0) + if ($len == 0) { $ret[] = $entry; - else if( substr( $entry, -$len) == $ext) + } else if (substr( $entry, -$len) == $ext) { $ret[] = $entry; + } } } } $d->close(); - } + } - return $ret; + return $ret; } -function computelangs() -{ +function computelangs() { global $CFG; $dir = $CFG->dirroot.'/mod/game/lang'; $ret = array(); $d = dir( $dir); while (false !== ($entry = $d->read())) { - if( $entry != '.' and $entry != '..'){ - if(is_dir($dir.'/'.$entry)) { + if ($entry != '.' and $entry != '..') { + if (is_dir($dir.'/'.$entry)) { $ret[] = $entry; } } @@ -412,14 +431,12 @@ function computelangs() return $ret; } -function computediff( $en, $lang, $strings, $langname, &$sum, $outdir, &$untranslated) -{ +function computediff( $en, $lang, $strings, $langname, &$sum, $outdir, &$untranslated) { global $CFG; $untranslated = ''; - $counten=count($en); + $counten = count($en); $trans = readlangfile( $lang, $header); - foreach( $trans as $s => $key) - { + foreach ($trans as $s => $key) { unset( $en[ $s]); } @@ -427,69 +444,69 @@ function computediff( $en, $lang, $strings, $langname, &$sum, $outdir, &$untrans $lines = file( $file); $count = 0; $s = ''; - foreach( $lines as $line) - { + foreach ($lines as $line) { $s .= $line; - if( ++$count >= 3) + if (++$count >= 3) { break; + } } - + $a = array(); - foreach( $en as $name => $t) - { - if( array_key_exists( $name, $strings)) + foreach ($en as $name => $t) { + if (array_key_exists( $name, $strings)) { $file = $strings[ $name]; - else + } else { $file = ''; + } $t = strip_tags( $t); $a[ $file.' * '.$name] = '$'."string[ '$name'] = $t\r\n"; } ksort( $a); - if( array_key_exists( $lang, $langname)) + if (array_key_exists( $lang, $langname)) { $langprint = $langname[ $lang]; - else + } else { $langprint = $lang; + } - $sum[]="$langprint
".count($a)."
".round(100*($counten-count($a))/$counten,0)." %"; - $prev_file = ''; - foreach( $a as $key => $line) - { + $sum[] = "$langprint
".count($a)."
". + round(100 * ($counten - count($a)) / $counten, 0)." %"; + $prevfile = ''; + foreach ($a as $key => $line) { $pos = strpos( $key, '*'); - $file = trim( substr( $key, 0, $pos-1)); - if( substr( $file, 0, 1) == '/') + $file = trim( substr( $key, 0, $pos - 1)); + if (substr( $file, 0, 1) == '/') { $file = substr( $file, 1); - if( $file != $prev_file) - { + } + if ($file != $prevfile) { $s .= "\r\n//$file\r\n"; - $prev_file = $file; + $prevfile = $file; } $s .= $line; - $untranslated .= "//$prev_file ".$line; + $untranslated .= "//$prevfile ".$line; } $file = $outdir.'/'.$lang.'.php'; file_put_contents( $file, $s); } -//Copies the translation from Moodle 19 -function readlangfile_repairmoodle19( $lang, &$strings_lang) -{ +// Copies the translation from Moodle 19. +function readlangfile_repairmoodle19( $lang, &$stringslang) { global $moodle19dir; - - if( $moodle19dir == '') + + if ($moodle19dir == '') { return; - + } + $file = $moodle19dir.'/mod/game/lang/'.$lang.'_utf8/game.php'; $a = array(); $lines = file( $file); - foreach( $lines as $line) - { - if( splitlangdefinition($line,$name,$trans)) - { - if( !array_key_exists( $name, $strings_lang)) - $strings_lang[ $name] = $trans; + foreach ($lines as $line) { + if (splitlangdefinition($line, $name, $trans)) { + if (!array_key_exists( $name, $stringslang)) { + $stringslang[ $name] = $trans; + } } } } diff --git a/version.php b/version.php index 42094f3..843e0f8 100755 --- a/version.php +++ b/version.php @@ -1,4 +1,19 @@ -. + /** * Code fragment to define the version of game * This fragment is called by moodle_needs_upgrading() and /admin/index.php @@ -10,22 +25,22 @@ defined('MOODLE_INTERNAL') || die(); -if( !isset( $plugin)) -{ +if (!isset( $plugin)) { $plugin = new stdClass; $useplugin = 0; -}else if( $plugin == 'mod_game') -{ +} else if ($plugin == 'mod_game') { $plugin = new stdClass; $useplugin = 1; -}else +} else { $useplugin = 2; +} -$plugin->component = 'mod_game'; // Full name of the plugin (used for diagnostics) -$plugin->version = 2015122201; // The current module version (Date: YYYYMMDDXX) -$plugin->requires = 2010112400; // Requires Moodle 2.0 -$plugin->cron = 0; // Period for cron to check this module (secs) -$plugin->release = '3.36.22.1'; +$plugin->component = 'mod_game'; // Full name of the plugin (used for diagnostics). +$plugin->version = 2015122501; // The current module version (Date: YYYYMMDDXX). +$plugin->requires = 2010112400; // Requires Moodle 2.0. +$plugin->cron = 0; // Period for cron to check this module (secs). +$plugin->release = '3.36.25.1'; -if( $useplugin != 2) +if ($useplugin != 2) { $module = $plugin; +} diff --git a/view.php b/view.php index 7f7a1bf..ff211a2 100755 --- a/view.php +++ b/view.php @@ -1,308 +1,315 @@ -libdir.'/gradelib.php'); - require_once($CFG->dirroot.'/mod/game/locallib.php'); - - $id = optional_param('id', 0, PARAM_INT); // Course Module ID, or - - if (! $cm = get_coursemodule_from_id('game', $id)) { - print_error('invalidcoursemodule'); - } - if (! $course = $DB->get_record('course', array('id' => $cm->course))) { - print_error('coursemisconf'); +. + +// This page prints a particular instance of game. + +require_once(dirname(__FILE__) . '/../../config.php'); +require_once($CFG->libdir.'/gradelib.php'); +require_once($CFG->dirroot.'/mod/game/locallib.php'); + +$id = optional_param('id', 0, PARAM_INT); // Course Module ID. + +if (! $cm = get_coursemodule_from_id('game', $id)) { + print_error('invalidcoursemodule'); +} +if (! $course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); +} +if (! $game = $DB->get_record('game', array('id' => $cm->instance))) { + print_error('invalidcoursemodule'); +} + +// Check login and get context. +require_login($course->id, false, $cm); +$context = game_get_context_module_instance( $cm->id); +require_capability('mod/game:view', $context); + +$timenow = time(); + +// Cache some other capabilites we use several times. +$canattempt = true; +$strtimeopenclose = ''; +if ($timenow < $game->timeopen) { + $canattempt = false; + $strtimeopenclose = get_string('gamenotavailable', 'game', userdate($game->timeopen)); +} else if ($game->timeclose && $timenow > $game->timeclose) { + $strtimeopenclose = get_string("gameclosed", "game", userdate($game->timeclose)); + $canattempt = false; +} else { + if ($game->timeopen) { + $strtimeopenclose = get_string('gameopenedon', 'game', userdate($game->timeopen)); } - if (! $game = $DB->get_record('game', array('id' => $cm->instance))) { - print_error('invalidcoursemodule'); + if ($game->timeclose) { + $strtimeopenclose = get_string('gamecloseson', 'game', userdate($game->timeclose)); } - -/// Check login and get context. - require_login($course->id, false, $cm); - $context = game_get_context_module_instance( $cm->id); - require_capability('mod/game:view', $context); - - $timenow = time(); - -/// Cache some other capabilites we use several times. +} +if (has_capability('mod/game:manage', $context)) { $canattempt = true; - $strtimeopenclose = ''; - if ($timenow < $game->timeopen) { - $canattempt = false; - $strtimeopenclose = get_string('gamenotavailable', 'game', userdate($game->timeopen)); - } else if ($game->timeclose && $timenow > $game->timeclose) { - $strtimeopenclose = get_string("gameclosed", "game", userdate($game->timeclose)); - $canattempt = false; - } else { - if ($game->timeopen) { - $strtimeopenclose = get_string('gameopenedon', 'game', userdate($game->timeopen)); - } - if ($game->timeclose) { - $strtimeopenclose = get_string('gamecloseson', 'game', userdate($game->timeclose)); - } - } - if (has_capability('mod/game:manage', $context)) { - $canattempt = true; - } - -/// Log this request. - if( game_use_events()) - { - require( 'classes/event/course_module_viewed.php'); - \mod_game\event\course_module_viewed::viewed($game, $context)->trigger(); - }else - add_to_log($course->id, 'game', 'view', "view.php?id=$cm->id", $game->id, $cm->id); - - // Mark as viewed - $completion=new completion_info($course); - $completion->set_module_viewed($cm); - -/// Initialize $PAGE, compute blocks - $PAGE->set_url('/mod/game/view.php', array('id' => $cm->id)); - - $edit = optional_param('edit', -1, PARAM_BOOL); - if ($edit != -1 && $PAGE->user_allowed_editing()) { - $USER->editing = $edit; - } +} - $title = $course->shortname . ': ' . format_string($game->name); - - if ($PAGE->user_allowed_editing() && !empty($CFG->showblocksonmodpages)) { - $buttons = '
'. - ''. - ''. - '
'; - $PAGE->set_button($buttons); - } - - $PAGE->set_title($title); - $PAGE->set_heading($course->fullname); - - echo $OUTPUT->header(); - -/// Print game name and description - echo $OUTPUT->heading(format_string($game->name)); - -/// Display information about this game. - - echo $OUTPUT->box_start('quizinfo'); - if ($game->attempts != 1) { - echo get_string('gradingmethod', 'quiz', game_get_grading_option_name($game->grademethod)); - } - echo $OUTPUT->box_end(); - -/// Show number of attempts summary to those who can view reports. - if (has_capability('mod/game:viewreports', $context)) { - if ($strattemptnum = game_get_user_attempts($game->id, $USER->id)) { - //echo '\n"; - echo get_string( 'attempts', 'game').': '.count( $strattemptnum); - if( $game->maxattempts) - { - echo ' ('.get_string( 'max', 'quiz').': '.$game->maxattempts.')'; - } +// Log this request. +if (game_use_events()) { + require( 'classes/event/course_module_viewed.php'); + \mod_game\event\course_module_viewed::viewed($game, $context)->trigger(); +} else { + add_to_log($course->id, 'game', 'view', "view.php?id=$cm->id", $game->id, $cm->id); +} + +// Mark as viewed. +$completion = new completion_info($course); +$completion->set_module_viewed($cm); + +// Initialize $PAGE, compute blocks. +$PAGE->set_url('/mod/game/view.php', array('id' => $cm->id)); + +$edit = optional_param('edit', -1, PARAM_BOOL); +if ($edit != -1 && $PAGE->user_allowed_editing()) { + $USER->editing = $edit; +} + +$title = $course->shortname . ': ' . format_string($game->name); + +if ($PAGE->user_allowed_editing() && !empty($CFG->showblocksonmodpages)) { + $buttons = '
'. + ''. + ''. + '
'; + $PAGE->set_button($buttons); +} + +$PAGE->set_title($title); +$PAGE->set_heading($course->fullname); + +echo $OUTPUT->header(); + +// Print game name and description. +echo $OUTPUT->heading(format_string($game->name)); + +// Display information about this game. +echo $OUTPUT->box_start('quizinfo'); +if ($game->attempts != 1) { + echo get_string('gradingmethod', 'quiz', game_get_grading_option_name($game->grademethod)); +} +echo $OUTPUT->box_end(); + +// Show number of attempts summary to those who can view reports. +if (has_capability('mod/game:viewreports', $context)) { + if ($strattemptnum = game_get_user_attempts($game->id, $USER->id)) { + echo get_string( 'attempts', 'game').': '.count( $strattemptnum); + if ($game->maxattempts) { + echo ' ('.get_string( 'max', 'quiz').': '.$game->maxattempts.')'; } } - -/// Get this user's attempts. - $attempts = game_get_user_attempts($game->id, $USER->id); - $lastfinishedattempt = end($attempts); - $unfinished = false; - if ($unfinishedattempt = game_get_user_attempt_unfinished($game->id, $USER->id)) { - $attempts[] = $unfinishedattempt; - $unfinished = true; - } - $numattempts = count($attempts); - -/// Work out the final grade, checking whether it was overridden in the gradebook. - $mygrade = game_get_best_grade($game, $USER->id); - $mygradeoverridden = false; - $gradebookfeedback = ''; - - $grading_info = grade_get_grades($course->id, 'mod', 'game', $game->id, $USER->id); - if (!empty($grading_info->items)) { - $item = $grading_info->items[0]; - if (isset($item->grades[$USER->id])) { - $grade = $item->grades[$USER->id]; - - if ($grade->overridden) { - $mygrade = $grade->grade + 0; // Convert to number. - $mygradeoverridden = true; - } - if (!empty($grade->str_feedback)) { - $gradebookfeedback = $grade->str_feedback; - } +} + +// Get this user's attempts. +$attempts = game_get_user_attempts($game->id, $USER->id); +$lastfinishedattempt = end($attempts); +$unfinished = false; +if ($unfinishedattempt = game_get_user_attempt_unfinished($game->id, $USER->id)) { + $attempts[] = $unfinishedattempt; + $unfinished = true; +} +$numattempts = count($attempts); + +// Work out the final grade, checking whether it was overridden in the gradebook. +$mygrade = game_get_best_grade($game, $USER->id); +$mygradeoverridden = false; +$gradebookfeedback = ''; + +$gradinginfo = grade_get_grades($course->id, 'mod', 'game', $game->id, $USER->id); +if (!empty($gradinginfo->items)) { + $item = $gradinginfo->items[0]; + if (isset($item->grades[$USER->id])) { + $grade = $item->grades[$USER->id]; + + if ($grade->overridden) { + $mygrade = $grade->grade + 0; // Convert to number. + $mygradeoverridden = true; + } + if (!empty($grade->str_feedback)) { + $gradebookfeedback = $grade->str_feedback; } } +} -/// Print table with existing attempts - if ($attempts) { +// Print table with existing attempts. +if ($attempts) { + echo $OUTPUT->heading(get_string('summaryofattempts', 'quiz')); - echo $OUTPUT->heading(get_string('summaryofattempts', 'quiz')); + // Work out which columns we need, taking account what data is available in each attempt. + list($someoptions, $alloptions) = game_get_combined_reviewoptions($game, $attempts, $context); - // Work out which columns we need, taking account what data is available in each attempt. - list($someoptions, $alloptions) = game_get_combined_reviewoptions($game, $attempts, $context); + $attemptcolumn = $game->attempts != 1; - $attemptcolumn = $game->attempts != 1; + $gradecolumn = $someoptions->scores && ($game->grade > 0); + $overallstats = $alloptions->scores; - $gradecolumn = $someoptions->scores && ($game->grade > 0); - //$markcolumn = $gradecolumn && ($game->grade != $game->sumgrades); - $overallstats = $alloptions->scores; + // Prepare table header. + $table = new html_table(); + $table->attributes['class'] = 'generaltable gameattemptsummary'; + $table->head = array(); + $table->align = array(); + $table->size = array(); + if ($attemptcolumn) { + $table->head[] = get_string('attempt', 'game'); + $table->align[] = 'center'; + $table->size[] = ''; + } + $table->head[] = get_string('timecompleted', 'game'); + $table->align[] = 'left'; + $table->size[] = ''; - // Prepare table header - $table = new html_table(); - $table->attributes['class'] = 'generaltable gameattemptsummary'; - $table->head = array(); - $table->align = array(); - $table->size = array(); - if ($attemptcolumn) { - $table->head[] = get_string('attempt', 'game'); - $table->align[] = 'center'; - $table->size[] = ''; - } - $table->head[] = get_string('timecompleted', 'game'); - $table->align[] = 'left'; + if ($gradecolumn) { + $table->head[] = get_string('grade') . ' / ' . game_format_grade( $game, $game->grade); + $table->align[] = 'center'; $table->size[] = ''; + } - if ($gradecolumn) { - $table->head[] = get_string('grade') . ' / ' . game_format_grade( $game, $game->grade); - $table->align[] = 'center'; - $table->size[] = ''; - } + $table->head[] = get_string('timetaken', 'game'); + $table->align[] = 'left'; + $table->size[] = ''; - $table->head[] = get_string('timetaken', 'game'); - $table->align[] = 'left'; - $table->size[] = ''; + // One row for each attempt. + foreach ($attempts as $attempt) { + $attemptoptions = game_get_reviewoptions($game, $attempt, $context); + $row = array(); - // One row for each attempt - foreach ($attempts as $attempt) { - $attemptoptions = game_get_reviewoptions($game, $attempt, $context); - $row = array(); - - // Add the attempt number, making it a link, if appropriate. - if ($attemptcolumn) { - if ($attempt->preview) { - $row[] = get_string('preview', 'game'); - } else { - $row[] = $attempt->attempt; - } + // Add the attempt number, making it a link, if appropriate. + if ($attemptcolumn) { + if ($attempt->preview) { + $row[] = get_string('preview', 'game'); + } else { + $row[] = $attempt->attempt; } + } - // prepare strings for time taken and date completed - $timetaken = ''; + // Prepare strings for time taken and date completed. + $timetaken = ''; + $datecompleted = ''; + if ($attempt->timefinish > 0) { + // Attempt has finished. + $timetaken = format_time($attempt->timefinish - $attempt->timestart); + $datecompleted = userdate($attempt->timefinish); + } else { + // The a is still in progress. + $timetaken = format_time($timenow - $attempt->timestart); $datecompleted = ''; - if ($attempt->timefinish > 0) { - // attempt has finished - $timetaken = format_time($attempt->timefinish - $attempt->timestart); - $datecompleted = userdate($attempt->timefinish); - } else - { - // The a is still in progress. - $timetaken = format_time($timenow - $attempt->timestart); - $datecompleted = ''; - } - $row[] = $datecompleted; + } + $row[] = $datecompleted; - // Ouside the if because we may be showing feedback but not grades. bdaloukas - $attemptgrade = game_score_to_grade($attempt->score, $game); + // Ouside the if because we may be showing feedback but not grades. + $attemptgrade = game_score_to_grade($attempt->score, $game); - if ($gradecolumn) { - if ($attemptoptions->scores) { - $formattedgrade = game_format_grade($game, $attemptgrade); - // highlight the highest grade if appropriate - if ($overallstats && !$attempt->preview && $numattempts > 1 && !is_null($mygrade) && - $attemptgrade == $mygrade && $game->grademethod == QUIZ_GRADEHIGHEST) { + if ($gradecolumn) { + if ($attemptoptions->scores) { + $formattedgrade = game_format_grade($game, $attemptgrade); + // Highlight the highest grade if appropriate. + if ($overallstats && !$attempt->preview && $numattempts > 1 && !is_null($mygrade) && + $attemptgrade == $mygrade && $game->grademethod == QUIZ_GRADEHIGHEST) { $table->rowclasses[$attempt->attempt] = 'bestrow'; - } - - $row[] = $formattedgrade; - } else { - $row[] = ''; } - } - - $row[] = $timetaken; - if ($attempt->preview) { - $table->data['preview'] = $row; + $row[] = $formattedgrade; } else { - $table->data[$attempt->attempt] = $row; + $row[] = ''; } - } // End of loop over attempts. - echo html_writer::table($table); - } + } -/// Print information about the student's best score for this game if possible. + $row[] = $timetaken; + if ($attempt->preview) { + $table->data['preview'] = $row; + } else { + $table->data[$attempt->attempt] = $row; + } + } // End of loop over attempts. + echo html_writer::table($table); +} + +// Print information about the student's best score for this game if possible. +if ($numattempts && $gradecolumn && !is_null($mygrade)) { + $resultinfo = ''; + + if ($overallstats) { + $a = new stdClass; + $a->grade = game_format_grade($game, $mygrade); + $a->maxgrade = game_format_grade($game, $game->grade); + $a = get_string('outofshort', 'quiz', $a); + $resultinfo .= $OUTPUT->heading(get_string('yourfinalgradeis', 'game', $a), 2, 'main'); + } - if ($numattempts && $gradecolumn && !is_null($mygrade)) { - $resultinfo = ''; + if ($mygradeoverridden) { + $resultinfo .= '

'.get_string('overriddennotice', 'grades')."

\n"; + } - if ($overallstats) { - $a = new stdClass; - $a->grade = game_format_grade($game, $mygrade); - $a->maxgrade = game_format_grade($game, $game->grade); - $a = get_string('outofshort', 'quiz', $a); - $resultinfo .= $OUTPUT->heading(get_string('yourfinalgradeis', 'game', $a), 2, 'main'); - } + if ($gradebookfeedback) { + $resultinfo .= $OUTPUT->heading(get_string('comment', 'game'), 3, 'main'); + $resultinfo .= '

'.$gradebookfeedback."

\n"; + } - if ($mygradeoverridden) { - $resultinfo .= '

'.get_string('overriddennotice', 'grades')."

\n"; - } - if ($gradebookfeedback) { - $resultinfo .= $OUTPUT->heading(get_string('comment', 'game'), 3, 'main'); - $resultinfo .= '

'.$gradebookfeedback."

\n"; - } + if ($resultinfo) { + echo $OUTPUT->box($resultinfo, 'generalbox', 'feedback'); + } +} - if ($resultinfo) { - echo $OUTPUT->box($resultinfo, 'generalbox', 'feedback'); - } +// Determine if we should be showing a start/continue attempt button or a button to go back to the course page. +echo $OUTPUT->box_start('gameattempt'); +$buttontext = ''; // This will be set something if as start/continue attempt button should appear. + +if ($unfinished) { + if ($canattempt) { + $buttontext = get_string('continueattemptgame', 'game'); + } +} else { + // Game is finished. Check if max number of attempts is reached. + if (!game_can_start_new_attempt( $game)) { + $canattempt = false; } -/// Determine if we should be showing a start/continue attempt button, -/// or a button to go back to the course page. - echo $OUTPUT->box_start('gameattempt'); - $buttontext = ''; // This will be set something if as start/continue attempt button should appear. + if ($canattempt) { + echo '
'; - if ($unfinished) { - if ($canattempt) { - $buttontext = get_string('continueattemptgame', 'game'); - } - } else { - //Game is finished. Check if max number of attempts is reached - if( !game_can_start_new_attempt( $game)) - $canattempt = false; - - if ($canattempt) { - echo '
'; - if ($numattempts == 0) { - $buttontext = get_string('attemptgamenow', 'game'); - } else { - $buttontext = get_string('reattemptgame', 'game'); - } + if ($numattempts == 0) { + $buttontext = get_string('attemptgamenow', 'game'); + } else { + $buttontext = get_string('reattemptgame', 'game'); } } +} -/// Now actually print the appropriate button. +// Now actually print the appropriate button. +echo $strtimeopenclose; - echo $strtimeopenclose; +if ($buttontext) { + global $OUTPUT; - if ($buttontext) { + $strconfirmstartattempt = ''; - global $OUTPUT; + // Show the start button, in a div that is initially hidden. + echo '
'; + $url = new moodle_url($CFG->wwwroot.'/mod/game/attempt.php', array('id' => $id)); + $button = new single_button($url, $buttontext); + echo $OUTPUT->render($button); + echo "
\n"; +} else { + echo $OUTPUT->continue_button($CFG->wwwroot . '/course/view.php?id=' . $course->id); +} +echo $OUTPUT->box_end(); - $strconfirmstartattempt = ''; - - /// Show the start button, in a div that is initially hidden. - echo '
'; - $url = new moodle_url($CFG->wwwroot.'/mod/game/attempt.php', array('id' => $id)); - $button = new single_button($url, $buttontext); - echo $OUTPUT->render($button); - echo "
\n"; - } else { - echo $OUTPUT->continue_button($CFG->wwwroot . '/course/view.php?id=' . $course->id); - } - echo $OUTPUT->box_end(); - - echo $OUTPUT->footer(); +echo $OUTPUT->footer();