id, false, $cm); $context = get_context_instance(CONTEXT_MODULE, $cm->id); switch ($mode) { case 'add': // Ensure that we came from view.php if (!confirm_sesskey() or !data_submitted()) { print_error('invalidformdata'); } break; case 'save': if (confirm_sesskey() and $form = data_submitted($CFG->wwwroot.'/mod/lesson/view.php')) { $name = trim(optional_param('name', '', PARAM_CLEAN)); // Make sure it is not empty if (empty($name)) { lesson_set_message(get_string('missingname', 'lesson')); $mode = 'add'; break; } // Check for censored words $filterwords = explode(',', get_string('censorbadwords')); foreach ($filterwords as $filterword) { if (strstr($name, $filterword)) { lesson_set_message(get_string('namereject', 'lesson')); $mode = 'add'; break; } } // Bad word was found if ($mode == 'add') { break; } $params = array ("lessonid" => $lesson->id, "userid" => $USER->id); if (!$grades = $DB->get_records_select('lesson_grades', "lessonid = :lessonid", $params, 'completed')) { print_error('cannotfindfirstgrade', 'lesson'); } if (!$newgrade = $DB->get_record_sql("SELECT * FROM {lesson_grades} WHERE lessonid = :lessonid AND userid = :userid ORDER BY completed DESC", $params, true)) { print_error('cannotfindnewestgrade', 'lesson'); } // Check for multiple submissions if ($DB->record_exists('lesson_high_scores', array('gradeid' => $newgrade->id))) { print_error('onpostperpage', 'lesson'); } // Find out if we need to delete any records if ($highscores = $DB->get_records_sql("SELECT h.*, g.grade FROM {lesson_grades} g, {lesson_high_scores} h WHERE h.gradeid = g.id AND h.lessonid = :lessonid ORDER BY g.grade DESC", $params)) { // Only count unique scores in our total for max high scores $uniquescores = array(); foreach ($highscores as $highscore) { $uniquescores[$highscore->grade] = 1; } if (count($uniquescores) >= $lesson->maxhighscores) { // Top scores list is full, might need to delete a score $flag = true; // See if the new score is already listed in the top scores list // if it is listed, then dont need to delete any records foreach ($highscores as $highscore) { if ($newgrade->grade == $highscore->grade) { $flag = false; } } if ($flag) { // Pushing out the lowest score (could be multiple records) $lowscore = 0; foreach ($highscores as $highscore) { if (empty($lowscore) or $lowscore > $highscore->grade) { $lowscore = $highscore->grade; } } // Now, delete all high scores with the low score foreach ($highscores as $highscore) { if ($highscore->grade == $lowscore) { $DB->delete_records('lesson_high_scores', array('id' => $highscore->id)); } } } } } $newhighscore = new stdClass; $newhighscore->lessonid = $lesson->id; $newhighscore->userid = $USER->id; $newhighscore->gradeid = $newgrade->id; $newhighscore->nickname = $name; if (!$DB->insert_record('lesson_high_scores', $newhighscore)) { print_error('cannotinserthighscore', 'lesson'); } // Log it add_to_log($course->id, 'lesson', 'update highscores', "highscores.php?id=$cm->id", $name, $cm->id); lesson_set_message(get_string('postsuccess', 'lesson'), 'notifysuccess'); redirect("$CFG->wwwroot/mod/lesson/highscores.php?id=$cm->id&link=1"); } else { print_error('invalidformdata'); } break; } // Log it add_to_log($course->id, 'lesson', 'view highscores', "highscores.php?id=$cm->id", $lesson->name, $cm->id); lesson_print_header($cm, $course, $lesson, 'highscores'); switch ($mode) { case 'add': print_simple_box_start('center'); echo '