Merge branch 'MDL-32239' of git://github.com/timhunt/moodle
authorSam Hemelryk <sam@moodle.com>
Mon, 2 Apr 2012 02:31:30 +0000 (14:31 +1200)
committerSam Hemelryk <sam@moodle.com>
Mon, 2 Apr 2012 02:31:30 +0000 (14:31 +1200)
1  2 
question/editlib.php

diff --combined question/editlib.php
@@@ -54,11 -54,15 +54,11 @@@ function get_module_from_cmid($cmid) 
  * @param bool $noparent if true only questions with NO parent will be selected
  * @param bool $recurse include subdirectories
  * @param bool $export set true if this is called by questionbank export
 -* @author added by Howard Miller June 2004
  */
  function get_questions_category( $category, $noparent=false, $recurse=true, $export=true ) {
      global $DB;
  
 -    // questions will be added to an array
 -    $qresults = array();
 -
 -    // build sql bit for $noparent
 +    // Build sql bit for $noparent
      $npsql = '';
      if ($noparent) {
        $npsql = " and parent='0' ";
          $categorylist = array($category->id);
      }
  
 -    // get the list of questions for the category
 +    // Get the list of questions for the category
      list($usql, $params) = $DB->get_in_or_equal($categorylist);
 -    if ($questions = $DB->get_records_select('question', "category $usql $npsql", $params, 'qtype, name')) {
 +    $questions = $DB->get_records_select('question', "category $usql $npsql", $params, 'qtype, name');
  
 -        // iterate through questions, getting stuff we need
 -        foreach($questions as $question) {
 -            $question->export_process = $export;
 -            question_bank::get_qtype($question->qtype)->get_question_options($question);
 -            $qresults[] = $question;
 +    // Iterate through questions, getting stuff we need
 +    $qresults = array();
 +    foreach($questions as $key => $question) {
 +        $question->export_process = $export;
 +        $qtype = question_bank::get_qtype($question->qtype, false);
 +        if ($export && $qtype->name() == 'missingtype') {
 +            // Unrecognised question type. Skip this question when exporting.
 +            continue;
          }
 +        $qtype->get_question_options($question);
 +        $qresults[] = $question;
      }
  
      return $qresults;
@@@ -606,7 -605,8 +606,8 @@@ abstract class question_bank_action_col
      }
  
      public function get_required_fields() {
-         return array('q.id');
+         // createdby is required for permission checks.
+         return array('q.id, q.createdby');
      }
  }
  
@@@ -632,10 -632,9 +633,9 @@@ class question_bank_edit_action_column 
      }
  
      protected function display_content($question, $rowclasses) {
-         if (question_has_capability_on($question, 'edit') ||
-                 question_has_capability_on($question, 'move')) {
+         if (question_has_capability_on($question, 'edit')) {
              $this->print_icon('t/edit', $this->stredit, $this->qbank->edit_question_url($question->id));
-         } else {
+         } else if (question_has_capability_on($question, 'view')) {
              $this->print_icon('i/info', $this->strview, $this->qbank->edit_question_url($question->id));
          }
      }