Merge branch 's11_MDL-28284_filepicker_module_master' of git://github.com/dongsheng...
authorSam Hemelryk <sam.hemelryk@gmail.com>
Tue, 2 Aug 2011 05:42:44 +0000 (13:42 +0800)
committerSam Hemelryk <sam.hemelryk@gmail.com>
Tue, 2 Aug 2011 05:42:44 +0000 (13:42 +0800)
62 files changed:
auth/db/auth.php
auth/ldap/auth.php
backup/moodle2/backup_stepslib.php
backup/moodle2/restore_stepslib.php
backup/util/dbops/restore_dbops.class.php
comment/lib.php
course/lib.php
enrol/cohort/addinstance.php
enrol/cohort/ajax.php
enrol/cohort/lib.php
filter/mediaplugin/lang/en/filter_mediaplugin.php
install.php
install/css.php [new file with mode: 0644]
install/lang/bg/install.php
install/lang/fr/install.php
lib/accesslib.php
lib/adminlib.php
lib/cronlib.php
lib/datalib.php
lib/db/access.php
lib/db/upgradelib.php
lib/deprecatedlib.php
lib/externallib.php
lib/installlib.php
lib/moodlelib.php
lib/outputrequirementslib.php
lib/pagelib.php
lib/pluginlib.php
lib/setuplib.php
mod/quiz/edit.php
mod/quiz/renderer.php
mod/scorm/db/install.xml
mod/scorm/db/upgrade.php
mod/scorm/lang/en/scorm.php
mod/scorm/module.js
mod/scorm/version.php
mod/url/lang/en/url.php
mod/url/mod_form.php
question/category.php
question/edit.php
question/editlib.php
question/export.php
question/import.php
question/question.php
repository/youtube/lib.php
theme/arialist/config.php
theme/binarius/config.php
theme/boxxie/config.php
theme/brick/config.php
theme/canvas/config.php
theme/canvas/style/core.css
theme/formfactor/config.php
theme/fusion/config.php
theme/index.php
theme/leatherbound/config.php
theme/magazine/config.php
theme/nimble/config.php
theme/nonzero/config.php
theme/overlay/config.php
theme/serenity/config.php
theme/sky_high/config.php
version.php

index 8f60cc3..931b4d2 100644 (file)
@@ -230,11 +230,11 @@ class auth_plugin_db extends auth_plugin_base {
             if (count($userlist)) {
                 list($notin_sql, $params) = $DB->get_in_or_equal($userlist, SQL_PARAMS_NAMED, 'u', false);
                 $params['authtype'] = $this->authtype;
-                $sql = "SELECT u.id, u.username, u.email, u.auth
+                $sql = "SELECT u.*
                           FROM {user} u
                          WHERE u.auth=:authtype AND u.deleted=0 AND u.username $notin_sql";
             } else {
-                $sql = "SELECT u.id, u.username, u.email, u.auth
+                $sql = "SELECT u.*
                           FROM {user} u
                          WHERE u.auth=:authtype AND u.deleted=0";
                 $params = array();
index 447b6a6..9f2f03c 100644 (file)
@@ -689,7 +689,7 @@ class auth_plugin_ldap extends auth_plugin_base {
         // Find users in DB that aren't in ldap -- to be removed!
         // this is still not as scalable (but how often do we mass delete?)
         if ($this->config->removeuser !== AUTH_REMOVEUSER_KEEP) {
-            $sql = 'SELECT u.id, u.username, u.email, u.auth
+            $sql = 'SELECT u.*
                       FROM {user} u
                       LEFT JOIN {tmp_extuser} e ON (u.username = e.username AND u.mnethostid = e.mnethostid)
                      WHERE u.auth = ?
index ffc310e..d1b5d24 100644 (file)
@@ -319,8 +319,9 @@ class backup_module_structure_step extends backup_structure_step {
         // attach format plugin structure to $module element, only one allowed
         $this->add_plugin_structure('format', $module, false);
 
-        // attach plagiarism plugin structure to $module element, only one allowed
-        $this->add_plugin_structure('plagiarism', $module, false);
+        // attach plagiarism plugin structure to $module element, there can be potentially
+        // many plagiarism plugins storing information about this course
+        $this->add_plugin_structure('plagiarism', $module, true);
 
         // Define the tree
         $module->add_child($availinfo);
@@ -421,8 +422,9 @@ class backup_course_structure_step extends backup_structure_step {
         // course reports can save course data if required
         $this->add_plugin_structure('coursereport', $course, true);
 
-        // attach plagiarism plugin structure to $course element, only one allowed
-        $this->add_plugin_structure('plagiarism', $course, false);
+        // attach plagiarism plugin structure to $course element, there can be potentially
+        // many plagiarism plugins storing information about this course
+        $this->add_plugin_structure('plagiarism', $course, true);
 
         // Build the tree
 
index db7740a..643c478 100644 (file)
@@ -2371,11 +2371,13 @@ class restore_create_categories_and_questions extends restore_structure_step {
 
         $category = new restore_path_element('question_category', '/question_categories/question_category');
         $question = new restore_path_element('question', '/question_categories/question_category/questions/question');
+        $hint = new restore_path_element('question_hint',
+                '/question_categories/question_category/questions/question/question_hints/question_hint');
 
         // Apply for 'qtype' plugins optional paths at question level
         $this->add_plugin_structure('qtype', $question);
 
-        return array($category, $question);
+        return array($category, $question, $hint);
     }
 
     protected function process_question_category($data) {
@@ -2484,11 +2486,11 @@ class restore_create_categories_and_questions extends restore_structure_step {
             // Adjust some columns
             $data->questionid = $newquestionid;
             // Insert record
-            $newitemid = $DB->insert_record('question_answers', $data);
+            $newitemid = $DB->insert_record('question_hints', $data);
 
-        // The question existed, we need to map the existing question_answers
+        // The question existed, we need to map the existing question_hints
         } else {
-            // Look in question_answers by answertext matching
+            // Look in question_hints by hint text matching
             $sql = 'SELECT id
                       FROM {question_hints}
                      WHERE questionid = ?
@@ -2496,7 +2498,7 @@ class restore_create_categories_and_questions extends restore_structure_step {
             $params = array($newquestionid, $data->hint);
             $newitemid = $DB->get_field_sql($sql, $params);
             // If we haven't found the newitemid, something has gone really wrong, question in DB
-            // is missing answers, exception
+            // is missing hints, exception
             if (!$newitemid) {
                 $info = new stdClass();
                 $info->filequestionid = $oldquestionid;
@@ -2505,7 +2507,7 @@ class restore_create_categories_and_questions extends restore_structure_step {
                 throw new restore_step_exception('error_question_hint_missing_in_db', $info);
             }
         }
-        // Create mapping (we'll use this intensively when restoring question_states. And also answerfeedback files)
+        // Create mapping (I'm not sure if this is really needed?)
         $this->set_mapping('question_hint', $oldid, $newitemid);
     }
 
index 0b405c8..9f6f2f6 100644 (file)
@@ -1340,7 +1340,8 @@ abstract class restore_dbops {
         $course->sortorder = 0;
         $course->timecreated  = time();
         $course->timemodified = $course->timecreated;
-        $course->visible = $category->visible;
+        // forcing skeleton courses to be hidden instead of going by $category->visible , until MDL-27790 is resolved.
+        $course->visible = 0;
 
         $courseid = $DB->insert_record('course', $course);
 
index 184e320..2d90ba7 100644 (file)
@@ -126,15 +126,6 @@ class comment {
      * @var int
      */
     protected $totalcommentcount = null;
-    /**
-     * When set to true any user to the system is able to view comments.
-     *
-     * This can be set to true by a plugin by implementing a allow_anonymous_access callback.
-     * By default it is false except on the front page.
-     *
-     * @var bool
-     */
-    protected $allowanonymousaccess = false;
 
     /**#@+
      * static variable will be used by non-js comments UI
@@ -240,18 +231,6 @@ class comment {
         $this->comment_param->commentarea = $this->commentarea;
         $this->comment_param->itemid      = $this->itemid;
 
-        $this->allowanonymousaccess = false;
-        // By default everyone can view comments on the front page
-        if ($this->context->contextlevel == CONTEXT_COURSE && $this->context->instanceid == SITEID) {
-            $this->allowanonymousaccess = true;
-        } else if ($this->context->contextlevel == CONTEXT_MODULE && $this->courseid == SITEID) {
-            $this->allowanonymousaccess = true;
-        }
-        if (!empty($this->plugintype) && !empty($this->pluginname)) {
-            // Plugins can override this if they wish.
-            $this->allowanonymousaccess = plugin_callback($this->plugintype, $this->pluginname, 'comment', 'allow_anonymous_access', array($this), $this->allowanonymousaccess);
-        }
-
         // setup notoggle
         if (!empty($options->notoggle)) {
             $this->set_notoggle($options->notoggle);
@@ -361,13 +340,8 @@ class comment {
         $this->viewcap = has_capability('moodle/comment:view', $this->context);
         if (!empty($this->plugintype)) {
             $permissions = plugin_callback($this->plugintype, $this->pluginname, 'comment', 'permissions', array($this->comment_param), array('post'=>false, 'view'=>false));
-            if ($this->allowanonymousaccess) {
-                $this->postcap = $permissions['post'];
-                $this->viewcap = $permissions['view'];
-            } else {
-                $this->postcap = $this->postcap && $permissions['post'];
-                $this->viewcap = $this->viewcap && $permissions['view'];
-            }
+            $this->postcap = $this->postcap && $permissions['post'];
+            $this->viewcap = $this->viewcap && $permissions['view'];
         }
     }
 
index 968d68f..35be49b 100644 (file)
@@ -565,7 +565,7 @@ function print_log_csv($course, $user, $date, $order='l.time DESC', $modname,
     header("Pragma: public");
 
     echo get_string('savedat').userdate(time(), $strftimedatetime)."\n";
-    echo $text;
+    echo $text."\n";
 
     if (empty($logs['logs'])) {
         return true;
@@ -2472,7 +2472,7 @@ function print_course($course, $highlightterms = '') {
         $course->summaryformat = FORMAT_MOODLE;
     }
     echo highlight($highlightterms, format_text($course->summary, $course->summaryformat, $options,  $course->id));
-    if ((!isloggedin() || is_siteadmin()) && $icons = enrol_get_course_info_icons($course)) {
+    if ($icons = enrol_get_course_info_icons($course)) {
         echo html_writer::start_tag('div', array('class'=>'enrolmenticons'));
         foreach ($icons as $icon) {
             echo $OUTPUT->render($icon);
index d35e098..bafb716 100644 (file)
@@ -35,6 +35,7 @@ $context = get_context_instance(CONTEXT_COURSE, $course->id, MUST_EXIST);
 
 require_login($course);
 require_capability('moodle/course:enrolconfig', $context);
+require_capability('enrol/cohort:config', $context);
 
 $PAGE->set_url('/enrol/cohort/addinstance.php', array('id'=>$course->id));
 $PAGE->set_pagelayout('admin');
index 83888a8..ccb8412 100644 (file)
@@ -74,6 +74,7 @@ switch ($action) {
         break;
     case 'enrolcohort':
         require_capability('moodle/course:enrolconfig', $context);
+        require_capability('enrol/cohort:config', $context);
         $roleid = required_param('roleid', PARAM_INT);
         $cohortid = required_param('cohortid', PARAM_INT);
         
@@ -87,10 +88,16 @@ switch ($action) {
         enrol_cohort_sync($manager->get_course()->id);
         break;
     case 'enrolcohortusers':
-        require_capability('moodle/course:enrolconfig', $context);
+        require_capability('enrol/manual:enrol', $context);
         $roleid = required_param('roleid', PARAM_INT);
         $cohortid = required_param('cohortid', PARAM_INT);
         $result = enrol_cohort_enrol_all_users($manager, $cohortid, $roleid);
+
+        $roles = $manager->get_assignable_roles();
+        $cohorts = enrol_cohort_get_cohorts($manager);
+        if (!array_key_exists($cohortid, $cohorts) || !array_key_exists($roleid, $roles)) {
+            throw new enrol_ajax_exception('errorenrolcohort');
+        }
         if ($result === false) {
             throw new enrol_ajax_exception('errorenrolcohortusers');
         }
index aa0c320..d8cd4e1 100644 (file)
@@ -163,7 +163,7 @@ class enrol_cohort_plugin extends enrol_plugin {
         $button->strings_for_js('users', 'moodle');
 
         // No point showing this at all if the user cant manually enrol users
-        $hasmanualinstance = has_capability('enrol/manual:manage', $manager->get_context()) && $manager->has_instance('manual');
+        $hasmanualinstance = has_capability('enrol/manual:enrol', $manager->get_context()) && $manager->has_instance('manual');
 
         $modules = array('moodle-enrol_cohort-quickenrolment', 'moodle-enrol_cohort-quickenrolment-skin');
         $function = 'M.enrol_cohort.quickenrolment.init';
index de7e98e..94062fa 100644 (file)
@@ -28,7 +28,7 @@ $string['filtername'] = 'Multimedia plugins';
 $string['flashanimation'] = 'Flash animation';
 $string['flashanimation_help'] = 'Files with extension *.swf. For security reasons this filter is used only in trusted texts.';
 $string['flashvideo'] = 'Flash video';
-$string['flashvideo_help'] = 'Files with extension *.flv and *.f4v. Plays video clips using Flowplayer, requires Flash plugin and javascript. Uses HTML 5 video fallback if multiple sources psecified.';
+$string['flashvideo_help'] = 'Files with extension *.flv and *.f4v. Plays video clips using Flowplayer, requires Flash plugin and javascript. Uses HTML 5 video fallback if multiple sources specified.';
 $string['html5audio'] = 'HTML 5 audio';
 $string['html5audio_help'] = 'Audio files with extension *.ogg, *.aac and others. It is compatible with latest web browsers only, unfortunately there is no format that is supported by all browsers.
 Workaround is to specify fallbacks separated with # (ex: http://example.org/audio.aac#http://example.org/audio.aac#http://example.org/audio.mp3#), QuickTime player is used as a fallback for old browsers, fallback can be any audio type.';
index b615587..3ff618b 100644 (file)
@@ -217,11 +217,6 @@ if (isset($_GET['help'])) {
     install_print_help_page($_GET['help']);
 }
 
-// send css?
-if (isset($_GET['css'])) {
-    install_css_styles();
-}
-
 //first time here? find out suitable dataroot
 if (is_null($CFG->dataroot)) {
     $CFG->dataroot = dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'moodledata';
diff --git a/install/css.php b/install/css.php
new file mode 100644 (file)
index 0000000..16bfaba
--- /dev/null
@@ -0,0 +1,148 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * This script prints basic CSS for the installer
+ *
+ * @package    core
+ * @subpackage install
+ * @copyright  2011 Petr Skoda (http://skodak.org)
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+if (file_exists(dirname(dirname(__FILE__)).'/config.php')) {
+    // already installed
+    die;
+}
+
+// include only the necessary stuff from themes, keep this small otherwise IE will complain...
+$files = array(
+        'base/style/pagelayout.css',
+        'base/style/core.css',
+        'standard/style/core.css',
+        'standard/style/css3.css');
+
+
+$content = '';
+
+foreach($files as $file) {
+    $content .= file_get_contents(dirname(dirname(__FILE__)).'/theme/'.$file) . "\n";
+}
+
+$content .= "
+
+h2 {
+  text-align:center;
+}
+
+#installdiv {
+  width: 800px;
+  margin-left:auto;
+  margin-right:auto;
+}
+
+#installdiv dt {
+  font-weight: bold;
+}
+
+#installdiv dd {
+  padding-bottom: 0.5em;
+}
+
+.stage {
+  margin-top: 2em;
+  margin-bottom: 2em;
+  width: 100%;
+  padding:25px;
+}
+
+#installform {
+  width: 100%;
+}
+
+#nav_buttons input {
+  margin: 5px;
+}
+
+#envresult {
+  text-align:left;
+  width: auto;
+  margin-left:10em;
+}
+
+#envresult dd {
+  color: red;
+}
+
+.formrow {
+  clear:both;
+  text-align:left;
+  padding: 8px;
+}
+
+.formrow label.formlabel {
+  display:block;
+  float:left;
+  width: 260px;
+  margin-right:5px;
+  text-align:right;
+}
+
+.formrow .forminput {
+  display:block;
+  float:left;
+}
+
+fieldset {
+  text-align:center;
+  border:none;
+}
+
+.hint {
+  display:block;
+  clear:both;
+  padding-left: 265px;
+  color: red;
+}
+
+.configphp {
+  text-align:left;
+  background-color:white;
+  padding:1em;
+  width:95%;
+}
+
+.stage6 .stage {
+  font-weight: bold;
+  color: red;
+}
+
+";
+
+// fix used urls
+$content = str_replace('[[pix:theme|hgradient]]', '../theme/standard/pix/hgradient.jpg', $content);
+$content = str_replace('[[pix:theme|vgradient]]', '../theme/standard/pix/vgradient.jpg', $content);
+
+@header('Content-Disposition: inline; filename="css.php"');
+@header('Cache-Control: no-store, no-cache, must-revalidate');
+@header('Cache-Control: post-check=0, pre-check=0', false);
+@header('Pragma: no-cache');
+@header('Expires: Mon, 20 Aug 1969 09:23:00 GMT');
+@header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
+@header('Accept-Ranges: none');
+@header('Content-Type: text/css; charset=utf-8');
+
+echo $content;
index 450193b..0112203 100644 (file)
 $string['availablelangs'] = 'Списък на наличните езици';
 $string['chooselanguagehead'] = 'Изберете език';
 $string['chooselanguagesub'] = 'Моля, изберете език за инсталацията. Този език ще бъде, също така, език по подразбиране на сайта, но може да бъде променен и по-късно след инсталирането.';
+$string['databasehost'] = 'Хост на базата данни';
+$string['databasename'] = 'Потребителско име за базата данни';
+$string['databasetypehead'] = 'Избиране на драйвер за база данни';
 $string['dataroot'] = 'Директория за данни';
+$string['dbprefix'] = 'Представка на таблиците';
 $string['dirroot'] = 'Директория на Moodle';
 $string['installation'] = 'Инсталиране';
 $string['paths'] = 'Пътища';
 $string['pathshead'] = 'Потвърждаване на пътищата';
 $string['pathssubdataroot'] = 'Тази директория е място, където Moodle, записва качваните файлове. Тази директория трябва да е достъпна за четене И ЗА ЗАПИС от потребителя на интернет сървъра (обикновено \'nobody\' или \'apache\'), но не трябва да е достъпна пряко през Интернет. Инталаторът ще се опита да създаде директорията, ако тя не съществува.';
 $string['pathssubdirroot'] = 'Пълен път до директорията на Moodle.';
-$string['pathssubwwwroot'] = 'Пълен интернет адрес, на който ще се отваря Moodle. Не е възможно Moodle да се отваря чрез различни адреси. Ако Вашият сайт има няколко адреса трябва на всеки от другите адреси да направите HTML пренасочване към този. Ако Вашият сайт се отваря както глобално от Интернет, така и от локална мрежа, настройте DNS така че потребителите от локалната мрежа също да могат да ползват глобалния адрес. Ако адресът не е коректен, моля, променете адреса в браузъра си и започнете инсталирането с правилния адрес.';
+$string['pathssubwwwroot'] = 'Пълен интернет адрес, на който ще се отваря Moodle. Не е възможно Moodle да се отваря чрез различни адреси. Ако Вашият сайт има няколко адреса трябва на всеки от другите адреси да направите пренасочване към този. Ако Вашият сайт се отваря както глобално от Интернет, така и от локална мрежа, настройте DNS, така че потребителите от локалната мрежа също да могат да ползват глобалния адрес. Ако адресът не е коректен, моля, променете адреса в браузъра си и започнете инсталирането с правилния адрес.';
 $string['wwwroot'] = 'Уеб адрес';
index adcc85a..012f814 100644 (file)
@@ -45,11 +45,15 @@ $string['environmentsub2'] = 'Chaque version de Moodle nécessite une version mi
 $string['errorsinenvironment'] = 'Échec de la vérification de l\'environnement !';
 $string['installation'] = 'Installation';
 $string['langdownloaderror'] = 'La langue {$a} n\'a pas pu être téléchargée. La suite de l\'installation se déroulera en anglais. Vous pourrez télécharger et installer d\'autres langues à la fin de l\'installation';
-$string['memorylimithelp'] = '<p>La limite de mémoire de PHP sur votre serveur est actuellement de {$a}.</p><p>Cette valeur trop basse risque de générer des problèmes de manque de mémoire pour Moodle, notamment si vous utilisez beaucoup de modules et/ou si vous avez un grand nombre d\'utilisateurs.</p><p>Il est recommandé de configurer PHP avec une limite de mémoire aussi élevée que possible, par exemple 40 Mo. Vous pouvez obtenir cela de différentes façons :</p>
+$string['memorylimithelp'] = '<p>La limite de mémoire de PHP sur votre serveur est actuellement de {$a}.</p>
+<p>Cette valeur trop basse risque de générer des problèmes de manque de mémoire pour Moodle, notamment si vous utilisez beaucoup de modules et/ou si vous avez un grand nombre d\'utilisateurs.</p>
+<p>Il est recommandé de configurer PHP avec une limite de mémoire aussi élevée que possible, par exemple 40 Mo. Vous pouvez obtenir cela de différentes façons :</p>
 <ol>
 <li>si vous en avez la possibilité, recompilez PHP avec l\'option <em>--enable-memory-limit</em>. Cela permettra à Moodle de fixer lui-même sa limite de mémoire ;</li>
 <li>si vous avez accès à votre fichier « php.ini », vous pouvez attribuer au paramètre <b>memory_limit</b> une valeur comme 40M. Si vous n\'y avez pas accès, demandez à l\'administrateur de le faire pour vous ;</li>
-<li>sur certains serveurs, vous pouvez créer dans le dossier principal de Moodle un fichier « .htaccess » contenant cette ligne : <blockquote><div>php_value memory_limit 40M</div></blockquote><p>Cependant, sur certains serveurs, cela empêchera le fonctionnement correct de <b>tous</b> les fichiers PHP (vous verrez s\'afficher des erreurs lors de la consultation de pages). Dans ce cas, vous devrez supprimer le fichier « .htaccess ».</li>
+<li>sur certains serveurs, vous pouvez créer dans le dossier principal de Moodle un fichier « .htaccess » contenant cette ligne :
+<blockquote><div>php_value memory_limit 40M</div></blockquote>
+<p>Cependant, sur certains serveurs, cela empêchera le fonctionnement correct de <b>tous</b> les fichiers PHP (vous verrez s\'afficher des erreurs lors de la consultation de pages). Dans ce cas, vous devrez supprimer le fichier « .htaccess ».</p></li>
 </ol>';
 $string['paths'] = 'Chemins';
 $string['pathserrcreatedataroot'] = 'Le dossier de données ({$a->dataroot}) ne peut pas être créé par l\'installeur.';
@@ -67,7 +71,7 @@ $string['phpversion'] = 'Version de PHP';
 $string['phpversionhelp'] = '<p>Moodle nécessite au minimum la version 4.3.0 ou 5.1.0 (5.0.x a bon nombre de problèmes).</p><p>Vous utilisez actuellement la version {$a}.</p><p>Pour que Moodle fonctionne, vous devez mettre à jour PHP ou aller chez un hébergeur ayant une version récente de PHP.<br />(Si vous avez une version 5.0.x, vous pouvez aussi re-passer à la version 4.4.x)</p>';
 $string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
 $string['welcomep20'] = 'Vous voyez cette page, car vous avez installé Moodle correctement et lancé le logiciel <b>{$a->packname} {$a->packversion}</b> sur votre ordinateur. Félicitations !';
-$string['welcomep30'] = 'Cette version du paquet <b>{$a->installername}</b> comprend des logiciels qui créent un environnement dans lequel <b>Moodle</b> va fonctionner, à savoir :';
+$string['welcomep30'] = 'Cette version de <b>{$a->installername}</b> comprend des logiciels qui créent un environnement dans lequel <b>Moodle</b> va fonctionner, à savoir :';
 $string['welcomep40'] = 'Ce paquet contient également <b>Moodle {$a->moodlerelease} ({$a->moodleversion})</b>.';
 $string['welcomep50'] = 'L\'utilisation de tous les logiciels de ce paquet est soumis à l\'acceptation de leurs licences respectives. Le paquet <b>{$a->installername}</b> est un <a href="http://www.opensource.org/docs/definition_plain.html">logiciel libre</a>. Il est distribué sous licence <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>.';
 $string['welcomep60'] = 'Les pages suivantes vous aideront pas à pas à configurer et mettre en place <b>Moodle</b> sur votre ordinateur. Il vous sera possible d\'accepter les réglages par défaut ou, facultativement, de les adapter à vos propres besoins.';
index f56aecb..03d6cf9 100644 (file)
@@ -569,9 +569,9 @@ function has_capability($capability, $context, $user = null, $doanything = true)
 
     // make sure there is a real user specified
     if ($user === null) {
-        $userid = !empty($USER->id) ? $USER->id : 0;
+        $userid = isset($USER->id) ? $USER->id : 0;
     } else {
-        $userid = !empty($user->id) ? $user->id : $user;
+        $userid = is_object($user) ? $user->id : $user;
     }
 
     // capability must exist
@@ -2841,9 +2841,9 @@ function is_guest($context, $user = null) {
 
     // make sure there is a real user specified
     if ($user === null) {
-        $userid = !empty($USER->id) ? $USER->id : 0;
+        $userid = isset($USER->id) ? $USER->id : 0;
     } else {
-        $userid = !empty($user->id) ? $user->id : $user;
+        $userid = is_object($user) ? $user->id : $user;
     }
 
     if (isguestuser($userid)) {
@@ -2914,9 +2914,9 @@ function is_enrolled($context, $user = null, $withcapability = '', $onlyactive =
 
     // make sure there is a real user specified
     if ($user === null) {
-        $userid = !empty($USER->id) ? $USER->id : 0;
+        $userid = isset($USER->id) ? $USER->id : 0;
     } else {
-        $userid = !empty($user->id) ? $user->id : $user;
+        $userid = is_object($user) ? $user->id : $user;
     }
 
     if (empty($userid)) {
@@ -3395,6 +3395,12 @@ function update_capabilities($component = 'moodle') {
     $storedcaps = array();
 
     $filecaps = load_capability_def($component);
+    foreach($filecaps as $capname=>$unused) {
+        if (!preg_match('|^[a-z]+/[a-z_0-9]+:[a-z_0-9]+$|', $capname)) {
+            debugging("Coding problem: Invalid capability name '$capname', use 'clonepermissionsfrom' field for migration.");
+        }
+    }
+
     $cachedcaps = get_cached_capabilities($component);
     if ($cachedcaps) {
         foreach ($cachedcaps as $cachedcap) {
@@ -4518,9 +4524,9 @@ function get_assignable_roles($context, $rolenamedisplay = ROLENAME_ALIAS, $with
 
     // make sure there is a real user specified
     if ($user === null) {
-        $userid = !empty($USER->id) ? $USER->id : 0;
+        $userid = isset($USER->id) ? $USER->id : 0;
     } else {
-        $userid = !empty($user->id) ? $user->id : $user;
+        $userid = is_object($user) ? $user->id : $user;
     }
 
     if (!has_capability('moodle/role:assign', $context, $userid)) {
index 4ce6885..cf21bcf 100644 (file)
@@ -7863,9 +7863,10 @@ class admin_setting_configmultiselect_modules extends admin_setting_configmultis
      * @param string $name setting name
      * @param string $visiblename localised setting name
      * @param string $description setting description
+     * @param array $defaultsetting a plain array of default module ids
      */
-    public function __construct($name, $visiblename, $description) {
-        parent::__construct($name, $visiblename, $description, array(), null);
+    public function __construct($name, $visiblename, $description, $defaultsetting = array()) {
+        parent::__construct($name, $visiblename, $description, $defaultsetting, null);
     }
 
     /**
index 9ccfc30..dc944a4 100644 (file)
@@ -219,7 +219,7 @@ function cron_run() {
 
         if (!empty($CFG->deleteincompleteusers)) {
             $cuttime = $timenow - ($CFG->deleteincompleteusers * 3600);
-            $rs = $DB->get_recordset_sql ("SELECT id, username
+            $rs = $DB->get_recordset_sql ("SELECT *
                                              FROM {user}
                                             WHERE confirmed = 1 AND lastaccess > 0
                                                   AND lastaccess < ? AND deleted = 0
index f4ba832..8aa1f84 100644 (file)
@@ -1662,6 +1662,8 @@ function add_to_log($courseid, $module, $action, $url='', $info='', $cm=0, $user
     $info = $info;
     if (!empty($url)) { // could break doing html_entity_decode on an empty var.
         $url = html_entity_decode($url);
+    } else {
+        $url = '';
     }
 
     // Restrict length of log lines to the space actually available in the
index 544ed5c..bc42449 100644 (file)
@@ -428,7 +428,6 @@ $capabilities = array(
         'contextlevel' => CONTEXT_COURSE,
         'archetypes' => array(
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW,
             'manager' => CAP_ALLOW,
         )
     ),
@@ -1349,7 +1348,6 @@ $capabilities = array(
             'student' => CAP_ALLOW,
             'teacher' => CAP_ALLOW,
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW,
             'manager' => CAP_ALLOW
         )
     ),
@@ -1619,7 +1617,6 @@ $capabilities = array(
             'student' => CAP_ALLOW,
             'teacher' => CAP_ALLOW,
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW
         )
     ),
 
@@ -1630,7 +1627,6 @@ $capabilities = array(
         'contextlevel' => CONTEXT_BLOCK,
         'archetypes' => array(
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW
         )
     ),
 
@@ -1642,19 +1638,18 @@ $capabilities = array(
             'student' => CAP_ALLOW,
             'teacher' => CAP_ALLOW,
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW
         )
     ),
     'moodle/comment:view' => array(
-
         'captype' => 'read',
         'contextlevel' => CONTEXT_COURSE,
         'archetypes' => array(
+            'frontpage' => CAP_ALLOW,
+            'guest' => CAP_ALLOW,
             'user' => CAP_ALLOW,
             'student' => CAP_ALLOW,
             'teacher' => CAP_ALLOW,
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW,
             'manager' => CAP_ALLOW
         )
     ),
@@ -1668,7 +1663,6 @@ $capabilities = array(
             'student' => CAP_ALLOW,
             'teacher' => CAP_ALLOW,
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW,
             'manager' => CAP_ALLOW
         )
     ),
@@ -1679,7 +1673,6 @@ $capabilities = array(
         'contextlevel' => CONTEXT_COURSE,
         'archetypes' => array(
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW,
             'manager' => CAP_ALLOW
         )
     ),
@@ -1766,7 +1759,6 @@ $capabilities = array(
         'archetypes' => array(
             'teacher' => CAP_ALLOW,
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW,
             'manager' => CAP_ALLOW
         )
     ),
@@ -1777,7 +1769,6 @@ $capabilities = array(
             'manager' => CAP_ALLOW,
             'teacher' => CAP_ALLOW,
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW
         )
     ),
     'moodle/community:download' => array(
@@ -1786,7 +1777,6 @@ $capabilities = array(
         'archetypes' => array(
             'manager' => CAP_ALLOW,
             'editingteacher' => CAP_ALLOW,
-            'coursecreator' => CAP_ALLOW
         )
     )
 );
index 96ccc3d..84ce362 100644 (file)
@@ -314,7 +314,9 @@ function upgrade_migrate_files_course($context, $path, $delete) {
 
         if ($item->isFile()) {
             if (!$item->isReadable()) {
-                echo $OUTPUT->notification(" File not readable, skipping: ".$fullpathname.$item->getFilename());
+                $notification = "File not readable, skipping: ".$fullpathname.$item->getFilename();
+                echo $OUTPUT->notification($notification);
+                upgrade_log(UPGRADE_LOG_NOTICE, null, $notification);
                 continue;
             }
 
@@ -327,8 +329,31 @@ function upgrade_migrate_files_course($context, $path, $delete) {
             }
 
             if ($textlib->strlen($filepath) > 255) {
-                echo $OUTPUT->notification(" File path longer than 255 chars, skipping: ".$fullpathname.$item->getFilename());
-                continue;
+                // we need something unique and reproducible, sorry no shortening possible
+                $filepath = '/directory_over_255_chars/'.md5($filepath).'/';
+                $oldfile = $fullpathname.$item->getFilename();
+                $newfile = $filepath.$item->getFilename();
+                $notification = "File path longer than 255 chars '$oldfile', file path truncated to '$newfile'";
+                echo $OUTPUT->notification($notification);
+                upgrade_log(UPGRADE_LOG_NOTICE, null, $notification);
+            }
+
+            if ($textlib->strlen($filename) > 255) {
+                //try to shorten, but look for collisions
+                $oldfile = $fullpathname.$item->getFilename();
+                $parts = explode('.', $filename);
+                $ext = array_pop($parts);
+                $name = implode('.', $parts);
+                $name = $textlib->substr($name, 0, 254-$textlib->strlen($ext));
+                $newfilename = $name . '.' . $ext;
+                if (file_exists($fullpathname.$newfilename) or $fs->file_exists($context->id, $component, $filearea, '0', $filepath, $newfilename)) {
+                    $filename = 'file_name_over_255_chars'.md5($filename).$ext; // bad luck, file with shortened name exists
+                } else {
+                    $filename = $newfilename; // shortened name should not cause collisions
+                }
+                $notification = "File name longer than 255 chars '$oldfile', file name truncated to '$filename'";
+                echo $OUTPUT->notification($notification);
+                upgrade_log(UPGRADE_LOG_NOTICE, null, $notification);
             }
 
             if (!$fs->file_exists($context->id, $component, $filearea, '0', $filepath, $filename)) {
@@ -352,7 +377,7 @@ function upgrade_migrate_files_course($context, $path, $delete) {
                 continue;
             }
             $filepath = ($filepath.$dirname.'/');
-            if ($filepath !== '/backupdata/') {
+            if ($filepath !== '/backupdata/' and $textlib->strlen($filepath) <= 255) {
                 $fs->create_directory($context->id, $component, $filearea, 0, $filepath);
             }
 
index 845d0d1..d822bda 100644 (file)
@@ -1259,7 +1259,8 @@ function execute_sql($command, $feedback=true) {
     error('execute_sql() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->record_exists_select() instead
+ * @see moodle_database::record_exists_select()
  * @param mixed $table
  * @param mixed $select
  * @return void Throws an error and does nothing
@@ -1268,7 +1269,8 @@ function record_exists_select($table, $select='') {
     error('record_exists_select() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->record_exists_sql() instead
+ * @see moodle_database::record_exists_sql()
  * @param mixed $sql
  * @return void Throws an error and does nothing
  */
@@ -1276,7 +1278,8 @@ function record_exists_sql($sql) {
     error('record_exists_sql() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->count_records_select() instead
+ * @see moodle_database::count_records_select()
  * @param mixed $table
  * @param mixed $select
  * @param mixed $countitem
@@ -1286,7 +1289,8 @@ function count_records_select($table, $select='', $countitem='COUNT(*)') {
     error('count_records_select() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->count_records_sql() instead
+ * @see moodle_database::count_records_sql()
  * @param mixed $sql
  * @return void Throws an error and does nothing
  */
@@ -1294,7 +1298,8 @@ function count_records_sql($sql) {
     error('count_records_sql() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_record_sql() instead
+ * @see moodle_database::get_record_sql()
  * @param mixed $sql
  * @param bool $expectmultiple
  * @param bool $nolimit
@@ -1304,7 +1309,8 @@ function get_record_sql($sql, $expectmultiple=false, $nolimit=false) {
     error('get_record_sql() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_record_select() instead
+ * @see moodle_database::get_record_select()
  * @param mixed $table
  * @param mixed $select
  * @param mixed $fields
@@ -1314,7 +1320,8 @@ function get_record_select($table, $select='', $fields='*') {
     error('get_record_select() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_recordset() instead
+ * @see moodle_database::get_recordset()
  * @param mixed $table
  * @param mixed $field
  * @param mixed $value
@@ -1328,7 +1335,8 @@ function get_recordset($table, $field='', $value='', $sort='', $fields='*', $lim
     error('get_recordset() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_recordset_sql() instead
+ * @see moodle_database::get_recordset_sql()
  * @param mixed $sql
  * @param mixed $limitfrom
  * @param mixed $limitnum
@@ -1378,7 +1386,8 @@ function rs_close(&$rs) {
     error('rs_close() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_records_select() instead
+ * @see moodle_database::get_records_select()
  * @param mixed $table
  * @param mixed $select
  * @param mixed $sort
@@ -1391,7 +1400,8 @@ function get_records_select($table, $select='', $sort='', $fields='*', $limitfro
     error('get_records_select() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_field_select() instead
+ * @see moodle_database::get_field_select()
  * @param mixed $table
  * @param mixed $return
  * @param mixed $select
@@ -1401,7 +1411,8 @@ function get_field_select($table, $return, $select) {
     error('get_field_select() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_field_sql() instead
+ * @see moodle_database::get_field_sql()
  * @param mixed $sql
  * @return void Throws an error and does nothing
  */
@@ -1409,7 +1420,8 @@ function get_field_sql($sql) {
     error('get_field_sql() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->delete_records_select() instead
+ * @see moodle_database::delete_records_select()
  * @param mixed $sql
  * @param mixed $select
  * @return void Throws an error and does nothing
@@ -1495,7 +1507,8 @@ function execute_sql_arr($sqlarr, $continue=true, $feedback=true) {
     error('execute_sql_arr() removed');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_records_list() instead
+ * @see moodle_database::get_records_list()
  * @param mixed $table
  * @param mixed $field
  * @param mixed $values
@@ -1509,7 +1522,8 @@ function get_records_list($table, $field='', $values='', $sort='', $fields='*',
     error('get_records_list() removed');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_recordset_list() instead
+ * @see moodle_database::get_recordset_list()
  * @param mixed $table
  * @param mixed $field
  * @param mixed $values
@@ -1523,7 +1537,8 @@ function get_recordset_list($table, $field='', $values='', $sort='', $fields='*'
     error('get_recordset_list() removed');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_records_menu() instead
+ * @see moodle_database::get_records_menu()
  * @param mixed $table
  * @param mixed $field
  * @param mixed $value
@@ -1537,7 +1552,8 @@ function get_records_menu($table, $field='', $value='', $sort='', $fields='*', $
     error('get_records_menu() removed');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_records_select_menu() instead
+ * @see moodle_database::get_records_select_menu()
  * @param mixed $table
  * @param mixed $select
  * @param mixed $sort
@@ -1550,7 +1566,8 @@ function get_records_select_menu($table, $select='', $sort='', $fields='*', $lim
     error('get_records_select_menu() removed');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_records_sql_menu() instead
+ * @see moodle_database::get_records_sql_menu()
  * @param mixed $sql
  * @param mixed $limitfrom
  * @param mixed $limitnum
@@ -1587,7 +1604,8 @@ function records_to_menu($records, $field1, $field2) {
     error('records_to_menu() removed');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->set_field_select() instead
+ * @see moodle_database::set_field_select()
  * @param mixed $table
  * @param mixed $newfield
  * @param mixed $newvalue
@@ -1599,7 +1617,8 @@ function set_field_select($table, $newfield, $newvalue, $select, $localcall = fa
     error('set_field_select() removed');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_fieldset_select() instead
+ * @see moodle_database::get_fieldset_select()
  * @param mixed $table
  * @param mixed $return
  * @param mixed $select
@@ -1609,7 +1628,8 @@ function get_fieldset_select($table, $return, $select) {
     error('get_fieldset_select() removed');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_fieldset_sql() instead
+ * @see moodle_database::get_fieldset_sql()
  * @param mixed $sql
  * @return void Throws an error and does nothing
  */
@@ -1617,7 +1637,8 @@ function get_fieldset_sql($sql) {
     error('get_fieldset_sql() removed');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->sql_like() instead
+ * @see moodle_database::sql_like()
  * @return void Throws an error and does nothing
  */
 function sql_ilike() {
@@ -1776,7 +1797,8 @@ function rollback_sql() {
     error('rollback_sql() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->insert_record() instead
+ * @see moodle_database::insert_record()
  * @param mixed $table
  * @param mixed $dataobject
  * @param mixed $returnid
@@ -1787,7 +1809,8 @@ function insert_record($table, $dataobject, $returnid=true, $primarykey='id') {
     error('insert_record() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->update_record() instead
+ * @see moodle_database::update_record()
  * @param mixed $table
  * @param mixed $dataobject
  * @return void Throws an error and does nothing
@@ -1796,7 +1819,8 @@ function update_record($table, $dataobject) {
     error('update_record() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_records() instead
+ * @see moodle_database::get_records()
  * @param mixed $table
  * @param mixed $field
  * @param mixed $value
@@ -1811,7 +1835,8 @@ function get_records($table, $field='', $value='', $sort='', $fields='*', $limit
     error('get_records() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_record() instead
+ * @see moodle_database::get_record()
  * @param mixed $table
  * @param mixed $field1
  * @param mixed $value1
@@ -1826,7 +1851,8 @@ function get_record($table, $field1, $value1, $field2='', $value2='', $field3=''
     error('get_record() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->set_field() instead
+ * @see moodle_database::set_field()
  * @param mixed $table
  * @param mixed $newfield
  * @param mixed $newvalue
@@ -1842,7 +1868,8 @@ function set_field($table, $newfield, $newvalue, $field1, $value1, $field2='', $
     error('set_field() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->count_records() instead
+ * @see moodle_database::count_records()
  * @param mixed $table
  * @param mixed $field1
  * @param mixed $value1
@@ -1856,7 +1883,8 @@ function count_records($table, $field1='', $value1='', $field2='', $value2='', $
     error('count_records() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->record_exists() instead
+ * @see moodle_database::record_exists()
  * @param mixed $table
  * @param mixed $field1
  * @param mixed $value1
@@ -1870,7 +1898,8 @@ function record_exists($table, $field1='', $value1='', $field2='', $value2='', $
     error('record_exists() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->delete_records() instead
+ * @see moodle_database::delete_records()
  * @param mixed $table
  * @param mixed $field1
  * @param mixed $value1
@@ -1884,7 +1913,8 @@ function delete_records($table, $field1='', $value1='', $field2='', $value2='',
     error('delete_records() not available anymore');
 }
 /**
- * @deprecated
+ * @deprecated use $DB->get_field() instead
+ * @see moodle_database::get_field()
  * @param mixed $table
  * @param mixed $return
  * @param mixed $field1
index 532dac1..0efc009 100644 (file)
@@ -89,6 +89,9 @@ function external_function_info($function, $strictness=MUST_EXIST) {
         if (isset($functions[$function->name]['description'])) {
             $function->description = $functions[$function->name]['description'];
         }
+        if (isset($functions[$function->name]['testclientpath'])) {
+            $function->testclientpath = $functions[$function->name]['testclientpath'];
+        }
     }
 
     return $function;
index 7b28f7c..a4ebab4 100644 (file)
@@ -243,7 +243,7 @@ function install_print_help_page($help) {
     echo '<html dir="'.(right_to_left() ? 'rtl' : 'ltr').'">
           <head>
           <link rel="shortcut icon" href="theme/standard/pix/favicon.ico" />
-          <link rel="stylesheet" type="text/css" href="'.$CFG->wwwroot.'/install.php?css=1" />
+          <link rel="stylesheet" type="text/css" href="'.$CFG->wwwroot.'/install/css.php" />
           <title>'.get_string('installation','install').'</title>
           <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
           <meta http-equiv="pragma" content="no-cache" />
@@ -290,20 +290,7 @@ function install_print_header($config, $stagename, $heading, $stagetext) {
           <head>
           <link rel="shortcut icon" href="theme/standard/pix/favicon.ico" />';
 
-    $sheets = array('pagelayout','core');
-    $csss = array();
-    foreach ($sheets as $sheet) {
-        $csss[] = $CFG->wwwroot.'/theme/base/style/'.$sheet.'.css';
-    }
-    $sheets = array('core', 'css3');
-    foreach ($sheets as $sheet) {
-        $csss[] = $CFG->wwwroot.'/theme/standard/style/'.$sheet.'.css';
-    }
-    foreach ($csss as $css) {
-        echo '<link rel="stylesheet" type="text/css" href="'.$css.'" />'."\n";
-    }
-
-    echo '<link rel="stylesheet" type="text/css" href="'.$CFG->wwwroot.'/install.php?css=1" />
+    echo '<link rel="stylesheet" type="text/css" href="'.$CFG->wwwroot.'/install/css.php" />
           <title>'.get_string('installation','install').' - Moodle '.$CFG->target_release.'</title>
           <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
           <meta http-equiv="pragma" content="no-cache" />
@@ -381,118 +368,6 @@ function install_print_footer($config, $reload=false) {
     echo '</div></body></html>';
 }
 
-
-/**
- * Prints css needed on installation page, tries to look like the rest of installation.
- * Does not return.
- *
- * @global object
- */
-function install_css_styles() {
-    global $CFG;
-
-    @header('Content-type: text/css');  // Correct MIME type
-    @header('Cache-Control: no-store, no-cache, must-revalidate');
-    @header('Cache-Control: post-check=0, pre-check=0', false);
-    @header('Pragma: no-cache');
-    @header('Expires: Mon, 20 Aug 1969 09:23:00 GMT');
-    @header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
-
-//TODO: add rtl support here, make it match new default theme MDL-21149
-
-    echo '
-
-h2 {
-  text-align:center;
-}
-
-#installdiv {
-  width: 800px;
-  margin-left:auto;
-  margin-right:auto;
-}
-
-#installdiv dt {
-  font-weight: bold;
-}
-
-#installdiv dd {
-  padding-bottom: 0.5em;
-}
-
-.stage {
-  margin-top: 2em;
-  margin-bottom: 2em;
-  width: 100%;
-  padding:25px;
-}
-
-#installform {
-  width: 100%;
-}
-
-#nav_buttons input {
-  margin: 5px;
-}
-
-#envresult {
-  text-align:left;
-  width: auto;
-  margin-left:10em;
-}
-
-#envresult dd {
-  color: red;
-}
-
-.formrow {
-  clear:both;
-  text-align:left;
-  padding: 8px;
-}
-
-.formrow label.formlabel {
-  display:block;
-  float:left;
-  width: 260px;
-  margin-right:5px;
-  text-align:right;
-}
-
-.formrow .forminput {
-  display:block;
-  float:left;
-}
-
-fieldset {
-  text-align:center;
-  border:none;
-}
-
-.hint {
-  display:block;
-  clear:both;
-  padding-left: 265px;
-  color: red;
-}
-
-.configphp {
-  text-align:left;
-  background-color:white;
-  padding:1em;
-  width:95%;
-}
-
-.stage6 .stage {
-  font-weight: bold;
-  color: red;
-}
-
-';
-
-    die;
-}
-
 /**
  * Install Moodle DB,
  * config.php must exist, there must not be any tables in db yet.
index 47e5a7b..6cf7236 100644 (file)
@@ -3462,7 +3462,7 @@ function truncate_userinfo($info) {
  *
  * Any plugin that needs to purge user data should register the 'user_deleted' event.
  *
- * @param object $user User object before delete
+ * @param stdClass $user full user object before delete
  * @return boolean always true
  */
 function delete_user($user) {
index 1197d28..8cb253e 100644 (file)
@@ -718,7 +718,7 @@ class page_requirements_manager {
             // Set Y's config.gallery to the version
             $jscode = 'Y.config.gallery='.json_encode($galleryversion).';';
         }
-        $jscode .= 'Y.use('.join(',', array_map('json_encode', $modules)).',function() {'.js_writer::function_call($function, $arguments).'})';
+        $jscode .= 'Y.use('.join(',', array_map('json_encode', $modules)).',function() {'.js_writer::function_call($function, $arguments).'});';
         if ($ondomready) {
             $jscode = "Y.on('domready', function() { $jscode });";
         }
index bc5192f..f01e74c 100644 (file)
@@ -544,7 +544,7 @@ class moodle_page {
      * @return bool
      */
     protected function magic_get_legacythemeinuse() {
-        debugging('$PAGE->legacythemeinuse is a deprecated property - please use $PAGE->devicetypeinuse and check if it is equal to legacy.', DEVELOPER_DEBUG);
+        debugging('$PAGE->legacythemeinuse is a deprecated property - please use $PAGE->devicetypeinuse and check if it is equal to legacy.', DEBUG_DEVELOPER);
         return ($this->devicetypeinuse == 'legacy');
     }
 
index 500ad75..80d6088 100644 (file)
@@ -354,6 +354,10 @@ class plugin_manager {
                 'wikimedia', 'youtube'
             ),
 
+            'scormreport' => array(
+                'basic'
+            ),
+
             'theme' => array(
                 'afterburner', 'anomaly', 'arialist', 'base', 'binarius',
                 'boxxie', 'brick', 'canvas', 'formal_white', 'formfactor',
index aeae850..d0bce1f 100644 (file)
@@ -501,6 +501,12 @@ function get_exception_info($ex) {
         }
     }
 
+    // when printing an error the continue button should never link offsite
+    if (stripos($link, $CFG->wwwroot) === false &&
+        stripos($link, $CFG->httpswwwroot) === false) {
+        $link = $CFG->wwwroot.'/';
+    }
+
     $info = new stdClass();
     $info->message     = $message;
     $info->errorcode   = $errorcode;
@@ -701,7 +707,9 @@ function initialise_fullme() {
     // Used in load balancing scenarios.
     // Do not abuse this to try to solve lan/wan access problems!!!!!
     if (empty($CFG->reverseproxy)) {
-        if (($rurl['host'] != $wwwroot['host']) or
+        if (empty($rurl['host'])) {
+            // missing host in request header, probably not a real browser, let's ignore them
+        } else if (($rurl['host'] !== $wwwroot['host']) or
                 (!empty($wwwroot['port']) and $rurl['port'] != $wwwroot['port'])) {
             // Explain the problem and redirect them to the right URL
             if (!defined('NO_MOODLE_COOKIES')) {
@@ -713,7 +721,7 @@ function initialise_fullme() {
 
     // hopefully this will stop all those "clever" admins trying to set up moodle
     // with two different addresses in intranet and Internet
-    if (!empty($CFG->reverseproxy) && $rurl['host'] == $wwwroot['host']) {
+    if (!empty($CFG->reverseproxy) && $rurl['host'] === $wwwroot['host']) {
         print_error('reverseproxyabused', 'error');
     }
 
@@ -759,7 +767,11 @@ function initialise_fullme_cli() {
  */
 function setup_get_remote_url() {
     $rurl = array();
-    list($rurl['host']) = explode(':', $_SERVER['HTTP_HOST']);
+    if (isset($_SERVER['HTTP_HOST'])) {
+        list($rurl['host']) = explode(':', $_SERVER['HTTP_HOST']);
+    } else {
+        $rurl['host'] = null;
+    }
     $rurl['port'] = $_SERVER['SERVER_PORT'];
     $rurl['path'] = $_SERVER['SCRIPT_NAME']; // Script path without slash arguments
     $rurl['scheme'] = (empty($_SERVER['HTTPS']) or $_SERVER['HTTPS'] === 'off' or $_SERVER['HTTPS'] === 'Off' or $_SERVER['HTTPS'] === 'OFF') ? 'http' : 'https';
index 5207b4b..df4668a 100644 (file)
@@ -141,7 +141,6 @@ if ($quiz_reordertool > -1) {
 $quizhasattempts = quiz_has_attempts($quiz->id);
 
 $PAGE->set_url($thispageurl);
-$PAGE->set_pagelayout('admin');
 
 $pagetitle = get_string('editingquiz', 'quiz');
 if ($quiz_reordertool) {
index e321322..0a6b765 100644 (file)
@@ -52,7 +52,7 @@ class mod_quiz_renderer extends plugin_renderer_base {
         $output .= $this->review_summary_table($summarydata, $page);
         $output .= $this->review_form($page, $showall, $displayoptions,
                 $this->questions($attemptobj, true, $slots, $page, $showall, $displayoptions),
-                $attemptobj, $showall);
+                $attemptobj);
 
         $output .= $this->review_next_navigation($attemptobj, $page, $lastpage);
         $output .= $this->footer();
@@ -194,8 +194,7 @@ class mod_quiz_renderer extends plugin_renderer_base {
      * @param quiz_attempt $attemptobj instance of quiz_attempt
      * @param bool $showall if true display attempt on one page
      */
-    public function review_form($summarydata, $page, $displayoptions, $content, $attemptobj,
-                                $showall) {
+    public function review_form($page, $showall, $displayoptions, $content, $attemptobj) {
         if ($displayoptions->flags != question_display_options::EDITABLE) {
             return $content;
         }
index ab1d6e1..ca356ba 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="mod/scorm/db" VERSION="20090420" COMMENT="XMLDB file for Moodle mod/scorm"
+<XMLDB PATH="mod/scorm/db" VERSION="20110731" COMMENT="XMLDB file for Moodle mod/scorm"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
 >
         <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" NEXT="scoid"/>
         <FIELD NAME="scoid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="id" NEXT="primaryobj"/>
         <FIELD NAME="primaryobj" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" PREVIOUS="scoid" NEXT="objectiveid"/>
-        <FIELD NAME="objectiveid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="primaryobj" NEXT="satisfiedbymeasure"/>
+        <FIELD NAME="objectiveid" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="primaryobj" NEXT="satisfiedbymeasure"/>
         <FIELD NAME="satisfiedbymeasure" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="false" DEFAULT="1" SEQUENCE="false" PREVIOUS="objectiveid" NEXT="minnormalizedmeasure"/>
         <FIELD NAME="minnormalizedmeasure" TYPE="float" LENGTH="11" NOTNULL="true" UNSIGNED="true" DEFAULT="0.0000" SEQUENCE="false" DECIMALS="4" PREVIOUS="satisfiedbymeasure"/>
       </FIELDS>
       </KEYS>
     </TABLE>
   </TABLES>
-</XMLDB>
+</XMLDB>
\ No newline at end of file
index 31d5b55..2f24c87 100644 (file)
@@ -546,6 +546,14 @@ function xmldb_scorm_upgrade($oldversion) {
         unset_config('updatetime', 'scorm');
         upgrade_mod_savepoint(true, 2011021402, 'scorm');
     }
+    
+    if ($oldversion < 2011073100) {
+        // change field type of objectiveid
+        $table = new xmldb_table('scorm_seq_objective');
+        $field = new xmldb_field('objectiveid', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'primaryobj');
+        $dbman->change_field_type($table, $field);
+        upgrade_main_savepoint(true, 2011073100, 'scorm');
+    }
 
     return true;
 }
index d51aef3..28f7956 100644 (file)
@@ -261,6 +261,8 @@ $string['started'] = 'Started on';
 $string['status'] = 'Status';
 $string['statusbar'] = 'Show the status bar';
 $string['student_response'] = 'Response';
+$string['subplugintype_scormreport'] = 'Report';
+$string['subplugintype_scormreport_plural'] = 'Reports';
 $string['suspended'] = 'Suspended';
 $string['syntax'] = 'Syntax error';
 $string['tag_error'] = 'Unknown tag ({$a->tag}) with this content: {$a->value}';
index f523509..8467dfd 100644 (file)
@@ -183,6 +183,16 @@ M.mod_scorm.init = function(Y, hide_nav, hide_toc, toc_title, window_name, launc
             }
 
             scorm_layout_widget.setStyle('height', '100%');
+            var center = scorm_layout_widget.getUnitByPosition('center');
+            center.setStyle('height', '100%');
+
+            // calculate the rough new height
+            newheight = YAHOO.util.Dom.getViewportHeight() *.82;
+            if (newheight < 600) {
+                newheight = 600;
+            }
+            scorm_layout_widget.set('height', newheight);
+
             scorm_layout_widget.render();
             scorm_resize_frame();
 
index ed58a07..14ccce0 100644 (file)
@@ -23,6 +23,6 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$module->version  = 2011060500;   // The (date) version of this module
+$module->version  = 2011073100;   // The (date) version of this module
 $module->requires = 2010080300;   // The version of Moodle that is required
 $module->cron     = 300;            // How often should cron check this module (seconds)?
index 318af1b..be6867d 100644 (file)
@@ -50,8 +50,9 @@ $string['modulenameplural'] = 'URLs';
 $string['neverseen'] = 'Never seen';
 $string['optionsheader'] = 'Options';
 $string['page-mod-url-x'] = 'Any URL module page';
-$string['parameterinfo'] = 'parameter=variable';
+$string['parameterinfo'] = '&amp;parameter=variable';
 $string['parametersheader'] = 'Parameters';
+$string['parametersheader_help'] = 'Some internal Moodle variables may be automatically appended to the URL. Type your name for the parameter into each text box(es) and then select the required matching variable.';
 $string['pluginadministration'] = 'URL module administration';
 $string['pluginname'] = 'URL';
 $string['popupheight'] = 'Popup height (in pixels)';
index ec15312..da6a720 100644 (file)
@@ -108,7 +108,8 @@ class mod_url_mod_form extends moodleform_mod {
 
         //-------------------------------------------------------
         $mform->addElement('header', 'parameterssection', get_string('parametersheader', 'url'));
-
+        $mform->addElement('static', 'parametersinfo', '', get_string('parametersheader_help', 'url'));
+        $mform->setAdvanced('parametersinfo');
 
         if (empty($this->current->parameters)) {
             $parcount = 5;
index 8b43360..5ad3de9 100644 (file)
@@ -54,7 +54,6 @@ foreach ((array)$param as $key=>$value) {
     }
 }
 $PAGE->set_url($url);
-$PAGE->set_pagelayout('standard');
 
 $qcobject = new question_category_object($pagevars['cpage'], $thispageurl, $contexts->having_one_edit_tab_cap('categories'), $param->edit, $pagevars['cat'], $param->delete,
                             $contexts->having_cap('moodle/question:add'));
index 5373a89..c52b4a4 100644 (file)
@@ -50,7 +50,6 @@ if (($cmid = optional_param('cmid', 0, PARAM_INT)) !== 0) {
     $url->param('cmid', $cmid);
 }
 $PAGE->set_url($url);
-$PAGE->set_pagelayout('standard');
 
 list($thispageurl, $contexts, $cmid, $cm, $module, $pagevars) =
         question_edit_setup('questions', '/question/edit.php');
index d7c082a..27f74a6 100644 (file)
@@ -1605,6 +1605,8 @@ function question_edit_setup($edittab, $baseurl, $requirecmid = false, $requirec
         $contexts = null;
     }
 
+    $PAGE->set_pagelayout('admin');
+
     $pagevars['qpage'] = optional_param('qpage', -1, PARAM_INT);
 
     //pass 'cat' from page to page and when 'category' comes from a drop down menu
index dec240a..172afa5 100644 (file)
@@ -28,8 +28,6 @@ require_once(dirname(__FILE__) . '/../config.php');
 require_once($CFG->dirroot . '/question/editlib.php');
 require_once($CFG->dirroot . '/question/export_form.php');
 
-$PAGE->set_pagelayout('standard');
-
 list($thispageurl, $contexts, $cmid, $cm, $module, $pagevars) =
         question_edit_setup('export', '/question/export.php');
 
index 444d32f..0001e1a 100644 (file)
@@ -42,8 +42,6 @@ if (!$category = $DB->get_record("question_categories", array('id' => $catid)))
     print_error('nocategory', 'question');
 }
 
-$PAGE->set_pagelayout('standard');
-
 $categorycontext = get_context_instance_by_id($category->contextid);
 $category->context = $categorycontext;
 //this page can be called without courseid or cmid in which case
index 1a7ec15..896a3d1 100644 (file)
@@ -103,7 +103,6 @@ if ($cmid){
     $thiscontext = get_context_instance(CONTEXT_MODULE, $cmid);
 } elseif ($courseid) {
     require_login($courseid, false);
-    $PAGE->set_pagelayout('course');
     $thiscontext = get_context_instance(CONTEXT_COURSE, $courseid);
     $module = null;
     $cm = null;
@@ -111,6 +110,7 @@ if ($cmid){
     print_error('missingcourseorcmid', 'question');
 }
 $contexts = new question_edit_contexts($thiscontext);
+$PAGE->set_pagelayout('admin');
 
 if (optional_param('addcancel', false, PARAM_BOOL)) {
     redirect($returnurl);
index a845f16..67166df 100644 (file)
@@ -57,7 +57,7 @@ class repository_youtube extends repository {
         foreach ($xml->entry as $entry) {
             $media = $entry->children('http://search.yahoo.com/mrss/');
             $title = $media->group->title;
-            $attrs = $media->group->thumbnail->attributes();
+            $attrs = $media->group->thumbnail[2]->attributes();
             $thumbnail = $attrs['url'];
             $arr = explode('/', $entry->id);
             $id = $arr[count($arr)-1];
index 90b2a46..a469b5a 100644 (file)
@@ -249,7 +249,7 @@ $THEME->rarrow      = '&rang;';
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index 3681c80..2084061 100644 (file)
@@ -244,7 +244,7 @@ $THEME->layouts = array(
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index b01ffbb..7aff519 100644 (file)
@@ -218,7 +218,7 @@ $THEME->layouts = array(
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index cd37b57..3729356 100644 (file)
@@ -240,7 +240,7 @@ $THEME->layouts = array(
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index 3ad01b0..1fdd596 100644 (file)
@@ -259,7 +259,7 @@ $THEME->hidefromselector = true;
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index 1efd840..0431db1 100644 (file)
@@ -200,7 +200,7 @@ input[type="radio"] {
 
 .maincalendar .calendarmonth th,
 .minicalendar th {
-    background: url([[pix:theme|gradient-sb]]) repeat-x 0 0;
+    background: none;
 }
 
 .maincalendar .calendar-controls {
index 0ff150d..25814bd 100644 (file)
@@ -224,7 +224,7 @@ $THEME->layouts = array(
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index 0298ace..8c2c89c 100644 (file)
@@ -245,7 +245,7 @@ $THEME->rarrow    = '&rang;';
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index 0c5f4ea..2a40a92 100644 (file)
@@ -68,7 +68,7 @@ if ($reset and confirm_sesskey()) {
     echo $output->box_start();
     echo format_text(get_string('choosereadme', 'theme_'.$theme->name), FORMAT_MOODLE);
     echo $output->box_end();
-    echo $output->continue_button($CFG->wwwroot . '/' . $CFG->admin . '/index.php');
+    echo $output->continue_button($CFG->wwwroot . '/theme/index.php');
     echo $output->footer();
     exit;
 }
index e85ce86..823f923 100644 (file)
@@ -233,7 +233,7 @@ $THEME->layouts = array(
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index ce7de8d..99b27cf 100644 (file)
@@ -199,7 +199,7 @@ $THEME->layouts = array(
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 //$THEME->rendererfactory = 'theme_simplespace_renderer_factory';
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index 680c7dd..a7fb9e3 100644 (file)
@@ -245,7 +245,7 @@ $THEME->rarrow    = '&rang;';
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index c7f5929..c5c6ace 100644 (file)
@@ -244,7 +244,7 @@ $THEME->csspostprocess = 'nonzero_process_css';
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index 8c76447..84d80a4 100644 (file)
@@ -239,7 +239,7 @@ $THEME->csspostprocess = 'overlay_process_css';
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index e4c16af..d1825f2 100644 (file)
@@ -105,7 +105,7 @@ $THEME->editor_sheets = array('editor');
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index bf51f90..8bcfe17 100644 (file)
@@ -243,7 +243,7 @@ $THEME->csspostprocess = 'sky_high_process_css';
 // include.
 ////////////////////////////////////////////////////
 
-// $THEME->renderfactory
+// $THEME->rendererfactory
 
 ////////////////////////////////////////////////////
 // Sets a custom render factory to use with the
index 9da3d69..3403345 100644 (file)
@@ -31,10 +31,10 @@ defined('MOODLE_INTERNAL') || die();
 
 
 
-$version  = 2011071900.00;              // YYYYMMDD      = weekly release date of this DEV branch
+$version  = 2011072900.00;              // YYYYMMDD      = weekly release date of this DEV branch
                                         //         RR    = release increments - 00 in DEV branches
                                         //           .XX = incremental changes
 
-$release  = '2.2dev (Build: 20110719)'; // Human-friendly version name
+$release  = '2.2dev (Build: 20110729)'; // Human-friendly version name
 
 $maturity = MATURITY_ALPHA;             // this version's maturity level