From d0c94a1e84c7b452b0cc91da333982373fb06bb2 Mon Sep 17 00:00:00 2001 From: Tony Levi Date: Fri, 6 Jan 2012 15:56:45 +1030 Subject: [PATCH 1/3] MDL-26037: restore/import: check through all courses instead of only first 250 --- backup/util/ui/restore_ui_components.php | 30 ++++++++++++++---------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/backup/util/ui/restore_ui_components.php b/backup/util/ui/restore_ui_components.php index adae38a6474f8..744fafcbc56fc 100644 --- a/backup/util/ui/restore_ui_components.php +++ b/backup/util/ui/restore_ui_components.php @@ -164,22 +164,26 @@ final public function search() { $this->totalcount = 0; $contextlevel = $this->get_itemcontextlevel(); list($sql, $params) = $this->get_searchsql(); - $resultset = $DB->get_recordset_sql($sql, $params, 0, 250); - foreach ($resultset as $result) { - context_instance_preload($result); - $context = get_context_instance($contextlevel, $result->id); - if (count($this->requiredcapabilities) > 0) { - foreach ($this->requiredcapabilities as $cap) { - if (!has_capability($cap['capability'], $context, $cap['user'])) { - continue 2; + $blocksz = 5000; + $offs = 0; + while ($resultset = $DB->get_records_sql($sql, $params, $offs, $blocksz)){ + foreach ($resultset as $result) { + context_instance_preload($result); + $context = get_context_instance($contextlevel, $result->id); + if (count($this->requiredcapabilities) > 0) { + foreach ($this->requiredcapabilities as $cap) { + if (!has_capability($cap['capability'], $context, $cap['user'])) { + continue 2; + } } } + $this->results[$result->id] = $result; + $this->totalcount++; + if ($this->totalcount >= self::$MAXRESULTS) { + break 2; + } } - $this->results[$result->id] = $result; - $this->totalcount++; - if ($this->totalcount >= self::$MAXRESULTS) { - break; - } + $offs += $blocksz; } return $this->totalcount; From a4df8560cc01556ce70d3b04fa09f40162794cb6 Mon Sep 17 00:00:00 2001 From: Tony Levi Date: Fri, 6 Jan 2012 15:58:08 +1030 Subject: [PATCH 2/3] MDL-26037: import: display search box even when no courses are currently displayed --- backup/util/ui/renderer.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backup/util/ui/renderer.php b/backup/util/ui/renderer.php index 08454409e316c..d6e2ff2b5c321 100644 --- a/backup/util/ui/renderer.php +++ b/backup/util/ui/renderer.php @@ -568,6 +568,12 @@ public function render_import_course_search(import_course_search $component) { $output = html_writer::start_tag('div', array('class' => 'import-course-search')); if ($component->get_count() === 0) { $output .= $this->output->notification(get_string('nomatchingcourses', 'backup')); + + $output .= html_writer::start_tag('div', array('class'=>'ics-search')); + $output .= html_writer::empty_tag('input', array('type'=>'text', 'name'=>restore_course_search::$VAR_SEARCH, 'value'=>$component->get_search())); + $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'searchcourses', 'value'=>get_string('search'))); + $output .= html_writer::end_tag('div'); + $output .= html_writer::end_tag('div'); return $output; } From cb7fc350cb586f7cfb1bf00c0483071201b21e4f Mon Sep 17 00:00:00 2001 From: "Eloy Lafuente (stronk7)" Date: Mon, 27 Feb 2012 02:18:58 +0100 Subject: [PATCH 3/3] MDL-26037 restore: fixes for mssql, php 5.4 and small improvs --- backup/util/ui/restore_ui_components.php | 25 +++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/backup/util/ui/restore_ui_components.php b/backup/util/ui/restore_ui_components.php index 744fafcbc56fc..b95681dee5afc 100644 --- a/backup/util/ui/restore_ui_components.php +++ b/backup/util/ui/restore_ui_components.php @@ -166,21 +166,32 @@ final public function search() { list($sql, $params) = $this->get_searchsql(); $blocksz = 5000; $offs = 0; - while ($resultset = $DB->get_records_sql($sql, $params, $offs, $blocksz)){ + // Get total number, to avoid some incorrect iterations + $countsql = preg_replace('/ORDER BY.*/', '', $sql); + $totalcourses = $DB->count_records_sql("SELECT COUNT(*) FROM ($countsql) sel", $params); + // User to be checked is always the same (usually null, get it form first element) + $firstcap = reset($this->requiredcapabilities); + $userid = isset($firstcap['user']) ? $firstcap['user'] : null; + // Extract caps to check, this saves us a bunch of iterations + $requiredcaps = array(); + foreach ($this->requiredcapabilities as $cap) { + $requiredcaps[] = $cap['capability']; + } + // Iterate while we have records and haven't reached MAXRESULTS + while ($totalcourses > $offs and $this->totalcount < self::$MAXRESULTS) { + $resultset = $DB->get_records_sql($sql, $params, $offs, $blocksz); foreach ($resultset as $result) { context_instance_preload($result); $context = get_context_instance($contextlevel, $result->id); - if (count($this->requiredcapabilities) > 0) { - foreach ($this->requiredcapabilities as $cap) { - if (!has_capability($cap['capability'], $context, $cap['user'])) { - continue 2; - } + if (count($requiredcaps) > 0) { + if (!has_all_capabilities($requiredcaps, $context, $userid)) { + continue; } } $this->results[$result->id] = $result; $this->totalcount++; if ($this->totalcount >= self::$MAXRESULTS) { - break 2; + break; } } $offs += $blocksz;