Merge branch 'MDL-21250-capitalized-strings' of git://github.com/mudrd8mz/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 22 Feb 2011 14:35:50 +0000 (15:35 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 22 Feb 2011 14:35:50 +0000 (15:35 +0100)
24 files changed:
lib/conditionlib.php
lib/moodlelib.php
message/lib.php
mod/feedback/lib.php
mod/feedback/show_entries.php
mod/lesson/pagetypes/essay.php
mod/lesson/pagetypes/matching.php
mod/lesson/pagetypes/multichoice.php
mod/lesson/pagetypes/numerical.php
mod/lesson/pagetypes/shortanswer.php
mod/lesson/pagetypes/truefalse.php
mod/lesson/renderer.php
mod/quiz/attemptlib.php
mod/quiz/lang/en/quiz.php
mod/quiz/overrides.php
mod/quiz/report/overview/report.php
mod/quiz/review.php
mod/quiz/reviewquestion.php
mod/workshop/form/accumulative/backup/moodle2/restore_workshopform_accumulative_subplugin.class.php
mod/workshop/form/comments/backup/moodle2/restore_workshopform_comments_subplugin.class.php
mod/workshop/form/numerrors/backup/moodle2/restore_workshopform_numerrors_subplugin.class.php
mod/workshop/form/rubric/backup/moodle2/restore_workshopform_rubric_subplugin.class.php
rating/index.php
rating/lib.php

index 6b862e8..83b79d3 100644 (file)
@@ -557,7 +557,7 @@ WHERE
      */
     private function get_cached_grade_score($gradeitemid, $grabthelot=false, $userid=0) {
         global $USER, $DB, $SESSION;
-        if ($userid==0 || $userid=$USER->id) {
+        if ($userid==0 || $userid==$USER->id) {
             // For current user, go via cache in session
             if (empty($SESSION->gradescorecache) || $SESSION->gradescorecacheuserid!=$USER->id) {
                 $SESSION->gradescorecache = array();
index c9542bd..41d3298 100644 (file)
@@ -7454,14 +7454,14 @@ function check_php_version($version='5.2.4') {
           if (strpos($agent, 'AppleWebKit') === false) {
               return false;
           }
-          // Look for AppleWebKit, excluding strings with OmniWeb, Shiira and SimbianOS and any other mobile devices
+          // Look for AppleWebKit, excluding strings with OmniWeb, Shiira and SymbianOS and any other mobile devices
           if (strpos($agent, 'OmniWeb')) { // Reject OmniWeb
               return false;
           }
           if (strpos($agent, 'Shiira')) { // Reject Shiira
               return false;
           }
-          if (strpos($agent, 'SimbianOS')) { // Reject SimbianOS
+          if (strpos($agent, 'SymbianOS')) { // Reject SymbianOS
               return false;
           }
           if (strpos($agent, 'Android')) { // Reject Androids too
index 8dfc3e7..df8535c 100644 (file)
@@ -432,18 +432,6 @@ function message_print_contacts($onlinecontacts, $offlinecontacts, $strangers, $
     if ($countstrangers && ($countonlinecontacts + $countofflinecontacts == 0)) {  // Extra help
         echo html_writer::tag('div','('.get_string('addsomecontactsincoming', 'message').')',array('class' => 'note'));
     }
-
-    /*if ($refresh) {
-        $PAGE->requires->js_init_call('M.core_message.init_refresh_page', array(60*1000, $PAGE->url->out(false)));
-
-        echo $OUTPUT->container_start('messagejsautorefresh note center');
-        echo get_string('pagerefreshes', 'message', $CFG->message_contacts_refresh);
-        echo $OUTPUT->container_end();
-
-        echo $OUTPUT->container_start('messagejsmanualrefresh aligncenter');
-        echo $OUTPUT->single_button(message_remove_url_params($PAGE->url), get_string('refresh'));
-        echo $OUTPUT->container_end();
-    }*/
 }
 
 /**
@@ -607,8 +595,6 @@ function message_print_search($advancedsearch = false, $user1=null) {
         $combinedsearchstring = '';
     }
 
-    //$PAGE->requires->js_init_call('M.core_message.init_search_page', array($combinedsearchstring));
-
     if ($doingsearch) {
         if ($advancedsearch) {
 
@@ -641,26 +627,6 @@ function message_print_search($advancedsearch = false, $user1=null) {
     }
 }
 
-/*function message_print_settings() {
-    global $USER, $OUTPUT, $PAGE;
-
-    if ($frm = data_submitted() and confirm_sesskey()) {
-
-        $pref = array();
-        $pref['message_beepnewmessage'] = (isset($frm->beepnewmessage)) ? '1' : '0';
-        $pref['message_blocknoncontacts'] = (isset($frm->blocknoncontacts)) ? '1' : '0';
-
-        set_user_preferences($pref);
-
-        redirect(message_remove_url_params($PAGE->url), get_string('settingssaved', 'message'), 1);
-    }
-
-    $cbbeepnewmessage = (get_user_preferences('message_beepnewmessage', 0) == '1') ? 'checked="checked"' : '';
-    $cbblocknoncontacts = (get_user_preferences('message_blocknoncontacts', 0) == '1') ? 'checked="checked"' : '';
-
-    include('settings.html');
-}*/
-
 /**
  * Get the users recent conversations meaning all the people they've recently
  * sent or received a message from plus the most recent message sent to or received from each other user
@@ -1244,9 +1210,6 @@ function message_print_search_results($frm, $showicontext=false, $user1=null) {
         echo $OUTPUT->notification(get_string('emptysearchstring', 'message'));
     }
 
-    //echo '<br />';
-    //echo $OUTPUT->single_button(new moodle_url($PAGE->url, array('tab' => 'search')), get_string('newsearch', 'message'));
-
     echo html_writer::end_tag('div');
 }
 
@@ -1419,7 +1382,6 @@ function message_history_link($userid1, $userid2, $return=false, $keywords='', $
             'resizable' => true);
 
     $link = new moodle_url('/message/index.php?history='.MESSAGE_HISTORY_ALL."&user=$userid1&id=$userid2$keywords$position");
-    //$action = new popup_action('click', $link, "message_history_$userid1", $popupoptions);
     $action = null;
     $str = $OUTPUT->action_link($link, $fulllink, $action, array('title' => $strmessagehistory));
 
@@ -2153,37 +2115,6 @@ function message_move_userfrom_unread2read($userid) {
     return true;
 }
 
-/*function message_get_popup_messages($destuserid, $fromuserid=NULL){
-    global $DB;
-
-    $processor = $DB->get_record('message_processors', array('name' => 'popup'));
-
-    $messagesproc = $DB->get_records('message_working', array('processorid' => $processor->id), 'id ASC');
-
-    //for every message to process check if it's for current user and process
-    $messages = array();
-    foreach ($messagesproc as $msgp){
-        $query = array('id' => $msgp->unreadmessageid, 'useridto' => $destuserid);
-        if ($fromuserid){
-            $query['useridfrom'] = $fromuserid;
-        }
-        if ($message = $DB->get_record('message', $query)){
-            $messages[] = $message;
-            /// Move the entry to the other table
-            $message->timeread = time();
-            $messageid = $message->id;
-            unset($message->id);
-
-            //delete what we've processed and check if can move message
-            $DB->delete_records('message_working', array('id' => $msgp->id));
-            if ( $DB->count_records('message_working', array('unreadmessageid' => $messageid)) == 0){
-                message_mark_message_read($message, time(), true);
-            }
-        }
-    }
-    return $messages;
-}*/
-
 /**
 * marks ALL messages being sent from $fromuserid to $touserid as read
 * @param int $touserid the id of the message recipient
index aed8b5c..1d238e9 100644 (file)
@@ -2111,7 +2111,7 @@ function feedback_get_group_values($item, $groupid = false, $courseid = false, $
     //if the groupid is given?
     if (intval($groupid) > 0) {
         if($ignore_empty) {
-            $ignore_empty_select = "AND fbc.value != ''";
+            $ignore_empty_select = "AND fbv.value != ''";
         }
         else {
             $ignore_empty_select = "";
index 429f374..3a4edd7 100644 (file)
@@ -104,7 +104,7 @@ if($do_show == 'showentries'){
         $baseurl = new moodle_url('/mod/feedback/show_entries.php');
         $baseurl->params(array('id'=>$id, 'do_show'=>$do_show, 'showall'=>$showall));
 
-        $tablecolumns = array('userpic', 'fullname', 'timemodified');
+        $tablecolumns = array('userpic', 'fullname', 'c.timemodified');
         $tableheaders = array(get_string('userpic'), get_string('fullnameuser'), get_string('date'));
 
         if(has_capability('mod/feedback:deletesubmissions', $context)) {
index 2ae796f..2f7d4f9 100644 (file)
@@ -252,7 +252,9 @@ class lesson_display_answer_form_essay extends moodleform {
         $mform = $this->_form;
         $contents = $this->_customdata['contents'];
 
-        $mform->addElement('header', 'pageheader', $OUTPUT->box($contents, 'contents'));
+        $mform->addElement('header', 'pageheader');
+
+        $mform->addElement('html', $OUTPUT->container($contents, 'contents'));
 
         $options = new stdClass;
         $options->para = false;
@@ -270,4 +272,4 @@ class lesson_display_answer_form_essay extends moodleform {
         $this->add_action_buttons(null, get_string("pleaseenteryouranswerinthebox", "lesson"));
     }
 
-}
\ No newline at end of file
+}
index 43335c0..3e40c63 100644 (file)
@@ -483,7 +483,9 @@ class lesson_display_answer_form_matching extends moodleform {
         $lessonid = $this->_customdata['lessonid'];
         $contents = $this->_customdata['contents'];
 
-        $mform->addElement('header', 'pageheader', $OUTPUT->box($contents, 'contents'));
+        $mform->addElement('header', 'pageheader');
+
+        $mform->addElement('html', $OUTPUT->container($contents, 'contents'));
 
         $options = new stdClass;
         $options->para = false;
@@ -514,4 +516,4 @@ class lesson_display_answer_form_matching extends moodleform {
         $this->add_action_buttons(null, get_string("pleasematchtheabovepairs", "lesson"));
     }
 
-}
\ No newline at end of file
+}
index a9d912f..f29268f 100644 (file)
@@ -485,7 +485,10 @@ class lesson_display_answer_form_multichoice_singleanswer extends moodleform {
             $attempt = new stdClass();
             $attempt->answerid = null;
         }
-        $mform->addElement('header', 'pageheader', $OUTPUT->box($contents, 'contents'));
+
+        $mform->addElement('header', 'pageheader');
+
+        $mform->addElement('html', $OUTPUT->container($contents, 'contents'));
 
         $options = new stdClass;
         $options->para = false;
@@ -524,7 +527,9 @@ class lesson_display_answer_form_multichoice_multianswer extends moodleform {
         $lessonid = $this->_customdata['lessonid'];
         $contents = $this->_customdata['contents'];
 
-        $mform->addElement('header', 'pageheader', $OUTPUT->box($contents, 'contents'));
+        $mform->addElement('header', 'pageheader');
+
+        $mform->addElement('html', $OUTPUT->container($contents, 'contents'));
 
         $options = new stdClass;
         $options->para = false;
index 56b1784..18fb54f 100644 (file)
@@ -264,7 +264,9 @@ class lesson_display_answer_form_numerical extends moodleform {
         $mform = $this->_form;
         $contents = $this->_customdata['contents'];
 
-        $mform->addElement('header', 'pageheader', $OUTPUT->box($contents, 'contents'));
+        $mform->addElement('header', 'pageheader');
+
+        $mform->addElement('html', $OUTPUT->container($contents, 'contents'));
 
         $options = new stdClass;
         $options->para = false;
@@ -282,4 +284,4 @@ class lesson_display_answer_form_numerical extends moodleform {
         $this->add_action_buttons(null, get_string("pleaseenteryouranswerinthebox", "lesson"));
     }
 
-}
\ No newline at end of file
+}
index 62e0a8e..821d614 100644 (file)
@@ -331,7 +331,9 @@ class lesson_display_answer_form_shortanswer extends moodleform {
         $mform = $this->_form;
         $contents = $this->_customdata['contents'];
 
-        $mform->addElement('header', 'pageheader', $OUTPUT->box($contents, 'contents'));
+        $mform->addElement('header', 'pageheader');
+
+        $mform->addElement('html', $OUTPUT->container($contents, 'contents'));
 
         $options = new stdClass;
         $options->para = false;
index 5bdbe22..61a1a7e 100644 (file)
@@ -299,7 +299,9 @@ class lesson_display_answer_form_truefalse extends moodleform {
             $attempt->answerid = null;
         }
 
-        $mform->addElement('header', 'pageheader', $OUTPUT->box($contents, 'contents'));
+        $mform->addElement('header', 'pageheader');
+
+        $mform->addElement('html', $OUTPUT->container($contents, 'contents'));
 
         $options = new stdClass();
         $options->para = false;
@@ -326,4 +328,4 @@ class lesson_display_answer_form_truefalse extends moodleform {
         $this->add_action_buttons(null, get_string("pleasecheckoneanswer", "lesson"));
     }
 
-}
\ No newline at end of file
+}
index 82ad996..696b8b9 100644 (file)
@@ -283,7 +283,7 @@ class mod_lesson_renderer extends plugin_renderer_base {
 
             $cell = new html_table_cell();
             $cell->colspan = 2;
-            $cell->style = 'text-align:center';
+            $cell->style = 'text-align:left';
             $cell->text = $page->contents;
             $pagetable->data[] = new html_table_row(array($cell));
 
index 9039f25..7817e98 100644 (file)
@@ -592,6 +592,29 @@ class quiz_attempt extends quiz {
                 (!$this->is_preview_user() || $this->attempt->preview);
     }
 
+    /**
+     * Is the current user allowed to review this attempt. This applies when
+     * {@link is_own_attempt()} returns false.
+     * @return bool whether the review should be allowed.
+     */
+    public function is_review_allowed() {
+        if (!$this->has_capability('mod/quiz:viewreports')) {
+            return false;
+        }
+
+        $cm = $this->get_cm();
+        if ($this->has_capability('moodle/site:accessallgroups') ||
+                groups_get_activity_groupmode($cm) != SEPARATEGROUPS) {
+            return true;
+        }
+
+        // Check the users have at least one group in common.
+        $teachersgroups = groups_get_activity_allowed_groups($cm);
+        $studentsgroups = groups_get_all_groups($cm->course, $this->attempt->userid, $cm->groupingid);
+        return $teachersgroups && $studentsgroups &&
+                array_intersect(array_keys($teachersgroups), array_keys($studentsgroups));
+    }
+
     /**
      * Check the appropriate capability to see whether this user may review their own attempt.
      * If not, prints an error.
index dcb90e7..353cc16 100644 (file)
@@ -531,6 +531,7 @@ $string['noquestionsnotinuse'] = 'This random question is not in use, since its
 $string['noquestionsonpage'] = 'Empty page';
 $string['noresponse'] = 'No response';
 $string['noreview'] = 'You are not allowed to review this quiz';
+$string['noreviewattempt'] = 'You are not allowed to review this attempt.';
 $string['noreviewshort'] = 'Not permitted';
 $string['noreviewuntil'] = 'You are not allowed to review this quiz until {$a}';
 $string['noreviewuntilshort'] = 'Available {$a}';
index 0535793..5f5c6da 100644 (file)
@@ -98,7 +98,7 @@ if ($groupmode) {
 }
 else {
     $colname = get_string('user');
-    $sql = 'SELECT o.*, u.firstname, u.lastname, u.id as uid
+    $sql = 'SELECT o.*, u.firstname, u.lastname
                 FROM {quiz_overrides} o JOIN {user} u
                 ON o.userid = u.id
                 WHERE o.quiz = ?
index 7a9b5e1..767e31c 100644 (file)
@@ -202,18 +202,33 @@ class quiz_overview_report extends quiz_default_report {
         if (!$nostudents || ($attemptsmode == QUIZ_REPORT_ATTEMPTS_ALL)) {
 
             // Construct the SQL
-            $fields = $DB->sql_concat('u.id', '\'#\'', 'COALESCE(qa.attempt, 0)').' AS uniqueid, ';
+            $fields = $DB->sql_concat('u.id', "'#'", 'COALESCE(qa.attempt, 0)') . ' AS uniqueid,';
             if ($qmsubselect) {
-                $fields .=
-                    "(CASE " .
-                    "   WHEN $qmsubselect THEN 1" .
-                    "   ELSE 0 " .
-                    "END) AS gradedattempt, ";
+                $fields .= "\n(CASE WHEN $qmsubselect THEN 1 ELSE 0 END) AS gradedattempt,";
             }
 
-            $fields .='qa.uniqueid AS attemptuniqueid, qa.id AS attempt, ' .
-                'u.id AS userid, u.idnumber, u.firstname, u.lastname, u.picture, u.imagealt, u.email, '.
-                'qa.sumgrades, qa.timefinish, qa.timestart, qa.timefinish - qa.timestart AS duration ';
+            $fields .= '
+                    qa.uniqueid AS attemptuniqueid,
+                    qa.id AS attempt,
+                    u.id AS userid,
+                    u.idnumber,
+                    u.firstname,
+                    u.lastname,
+                    u.picture,
+                    u.imagealt,
+                    u.email,
+                    qa.sumgrades,
+                    qa.timefinish,
+                    qa.timestart,
+                    CASE WHEN qa.timefinish = 0 THEN null
+                         WHEN qa.timefinish > qa.timestart THEN qa.timefinish - qa.timestart
+                         ELSE 0 END AS duration';
+            // To explain that last bit, in MySQL, qa.timestart and qa.timefinish
+            // are unsigned. Since MySQL 5.5.5, when they introduced strict mode,
+            // subtracting a larger unsigned int from a smaller one gave an error.
+            // Therefore, we avoid doing that. timefinish can be non-zero and less
+            // than timestart when you have two load-balanced servers with very
+            // badly synchronised clocks, and a student does a really quick attempt.
 
             // This part is the same for all cases - join users and quiz_attempts tables
             $from = '{user} u ';
index e3714d0..240de7b 100644 (file)
     $accessmanager = $attemptobj->get_access_manager(time());
     $options = $attemptobj->get_review_options();
 
-/// Permissions checks for normal users who do not have quiz:viewreports capability.
-    if (!$attemptobj->has_capability('mod/quiz:viewreports')) {
-    /// Can't review other users' attempts.
-        if (!$attemptobj->is_own_attempt()) {
-            quiz_error($attemptobj->get_quiz(), 'notyourattempt');
-        }
-    /// Can't review during the attempt - send them back to the attempt page.
+    // Check permissions.
+    if ($attemptobj->is_own_attempt()) {
         if (!$attemptobj->is_finished()) {
             redirect($attemptobj->attempt_url(0, $page));
-        }
-    /// Can't review unless Students may review -> Responses option is turned on.
-        if (!$options->responses) {
+        } else if (!$options->responses) {
             $accessmanager->back_to_view_page($attemptobj->is_preview_user(),
-                    $accessmanager->cannot_review_message($options));
+                    $accessmanager->cannot_review_message($attemptobj->get_attempt_state()));
         }
+
+    } else if (!$attemptobj->is_review_allowed()) {
+        throw new moodle_quiz_exception($attemptobj, 'noreviewattempt');
     }
 
 /// Load the questions and states needed by this page.
index 48d87ed..a61851e 100644 (file)
     $accessmanager = $attemptobj->get_access_manager(time());
     $options = $attemptobj->get_review_options();
 
-/// Permissions checks for normal users who do not have quiz:viewreports capability.
-    if (!$attemptobj->has_capability('mod/quiz:viewreports')) {
-    /// Can't review during the attempt - send them back to the attempt page.
+    // Check permissions.
+    if ($attemptobj->is_own_attempt()) {
         if (!$attemptobj->is_finished()) {
             echo $OUTPUT->header();
             echo $OUTPUT->notification(get_string('cannotreviewopen', 'quiz'));
             echo $OUTPUT->close_window_button();
             echo $OUTPUT->footer();
             die;
-        }
-    /// Can't review other users' attempts.
-        if (!$attemptobj->is_own_attempt()) {
-            echo $OUTPUT->header();
-            echo $OUTPUT->notification(get_string('notyourattempt', 'quiz'));
-            echo $OUTPUT->close_window_button();
-            echo $OUTPUT->footer();
-            die;
-        }
-
-    /// Can't review unless Students may review -> Responses option is turned on.
-        if (!$options->responses) {
+        } else if (!$options->responses) {
             $accessmanager = $attemptobj->get_access_manager(time());
             echo $OUTPUT->header();
             echo $OUTPUT->notification($accessmanager->cannot_review_message($attemptobj->get_review_options()));
@@ -60,6 +48,9 @@
             echo $OUTPUT->footer();
             die;
         }
+
+    } else if (!$attemptobj->is_review_allowed()) {
+        throw new moodle_quiz_exception($attemptobj, 'noreviewattempt');
     }
 
 /// Load the questions and states.
index 69e56c9..dc2418b 100644 (file)
@@ -112,7 +112,7 @@ class restore_workshopform_accumulative_subplugin extends restore_subplugin {
         $this->set_mapping($this->get_namefor('dimension'), $oldid, $newitemid, true);
 
         // Process files for this workshopform_accumulative->id only
-        $this->add_related_files('workshopform_accumulative', 'description', 'workshopform_accumulative', null, $oldid);
+        $this->add_related_files('workshopform_accumulative', 'description', $this->get_namefor('dimension'), null, $oldid);
     }
 
     /**
index 8374ef0..d72d72d 100644 (file)
@@ -109,7 +109,7 @@ class restore_workshopform_comments_subplugin extends restore_subplugin {
         $this->set_mapping($this->get_namefor('dimension'), $oldid, $newitemid, true);
 
         // Process files for this workshopform_comments->id only
-        $this->add_related_files('workshopform_comments', 'description', 'workshopform_comments', null, $oldid);
+        $this->add_related_files('workshopform_comments', 'description', $this->get_namefor('dimension'), null, $oldid);
     }
 
     /**
index 33a19c2..ce81fcb 100644 (file)
@@ -124,7 +124,7 @@ class restore_workshopform_numerrors_subplugin extends restore_subplugin {
         $this->set_mapping($this->get_namefor('dimension'), $oldid, $newitemid, true);
 
         // Process files for this workshopform_numerrors->id only
-        $this->add_related_files('workshopform_numerrors', 'description', 'workshopform_numerrors', null, $oldid);
+        $this->add_related_files('workshopform_numerrors', 'description', $this->get_namefor('dimension'), null, $oldid);
     }
 
     /**
index 472af01..35b4000 100644 (file)
@@ -128,7 +128,7 @@ class restore_workshopform_rubric_subplugin extends restore_subplugin {
         $this->set_mapping($this->get_namefor('dimension'), $oldid, $newitemid, true);
 
         // Process files for this workshopform_rubric->id only
-        $this->add_related_files('workshopform_rubric', 'description', 'workshopform_rubric', null, $oldid);
+        $this->add_related_files('workshopform_rubric', 'description', $this->get_namefor('dimension'), null, $oldid);
     }
 
     /**
index 41d085e..ff9b121 100644 (file)
@@ -92,12 +92,13 @@ if (!$ratings) {
     echo "<th class=\"header\" scope=\"col\"><a href=\"index.php?$sortargs&amp;sort=time\">$strtime</a></th>";
     echo "</tr>";
 
-    $maxrating = count($scalemenu);
+    //if the scale was changed after ratings were submitted some ratings may have a value above the current maximum
+    $maxrating = count($scalemenu) - 1;
     foreach ($ratings as $rating) {
         //Undo the aliasing of the user id column from user_picture::fields()
         //we could clone the rating object or preserve the rating id if we needed it again
         //but we don't
-        $rating->id = $rating->uid;
+        $rating->id = $rating->userid;
 
         echo '<tr class="ratingitemheader">';
         echo "<td>";
index b53abf2..29313e2 100644 (file)
@@ -217,7 +217,7 @@ class rating_manager {
             $sortclause = "ORDER BY $options->sort";
         }
 
-        $userfields = user_picture::fields('u', null, 'uid');
+        $userfields = user_picture::fields('u', null, 'userid');
         $sql = "SELECT r.id, r.rating, r.itemid, r.userid, r.timemodified, $userfields
                 FROM {rating} r
                 LEFT JOIN {user} u ON r.userid = u.id