Merge branch 'wip-MDL-31627-master' of git://github.com/marinaglancy/moodle
authorSam Hemelryk <sam@moodle.com>
Mon, 20 Feb 2012 04:25:48 +0000 (17:25 +1300)
committerSam Hemelryk <sam@moodle.com>
Mon, 20 Feb 2012 04:25:48 +0000 (17:25 +1300)
44 files changed:
backup/moodle2/restore_stepslib.php
blog/rsslib.php
enrol/ldap/lang/en/enrol_ldap.php
lang/en/langconfig.php
lib/db/install.xml
lib/db/upgrade.php
lib/moodlelib.php
lib/rsslib.php
lib/simpletest/testmoodlelib.php
message/index.php
mod/assignment/lib.php
mod/assignment/type/upload/assignment.class.php
mod/assignment/type/uploadsingle/assignment.class.php
mod/data/rsslib.php
mod/forum/rsslib.php
mod/glossary/db/install.xml
mod/glossary/db/upgrade.php
mod/glossary/formats/entrylist/entrylist_format.php
mod/glossary/lang/en/glossary.php
mod/glossary/mod_form.php
mod/glossary/rsslib.php
mod/glossary/showentry.php
mod/glossary/version.php
mod/glossary/view.php
mod/lesson/backup/moodle2/restore_lesson_stepslib.php
mod/lesson/lib.php
mod/scorm/datamodels/debug.js.php
mod/scorm/datamodels/scorm_datamodels.js [deleted file]
mod/scorm/lang/en/scorm.php
mod/scorm/lib.php
mod/scorm/locallib.php
mod/scorm/mod_form.php
mod/scorm/module.js
mod/scorm/report/basic/report.php
mod/scorm/report/interactions/report.php
mod/scorm/styles.css
repository/filepicker.js
rss/file.php
rss/renderer.php
version.php
webservice/lib.php
webservice/rest/locallib.php
webservice/rest/server.php
webservice/soap/locallib.php

index 2aebdcf..acf17be 100644 (file)
@@ -1124,6 +1124,12 @@ class restore_course_structure_step extends restore_structure_step {
             unset($data->idnumber);
         }
 
+        // Any empty value for course->hiddensections will lead to 0 (default, show collapsed).
+        // It has been reported that some old 1.9 courses may have it null leading to DB error. MDL-31532
+        if (empty($data->hiddensections)) {
+            $data->hiddensections = 0;
+        }
+
         // Only restrict modules if original course was and target site too for new courses
         $data->restrictmodules = $data->restrictmodules && !empty($CFG->restrictmodulesfor) && $CFG->restrictmodulesfor == 'all';
 
index 03c84ca..a851cbe 100644 (file)
@@ -1,8 +1,41 @@
 <?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/>.
+
+/**
+ * Blog RSS Management
+ *
+ * @package    core_blog
+ * @category   rss
+ * @copyright  2010 Andrew Davis
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 require_once($CFG->dirroot.'/lib/rsslib.php');
 require_once($CFG->dirroot .'/blog/lib.php');
 
+/**
+ * Build the URL for the RSS feed
+ *
+ * @param int    $contextid    The context under which the URL should be created
+ * @param int    $userid       The id of the user requesting the RSS Feed
+ * @param string $filtertype   The source of the RSS feed (site/course/group/user)
+ * @param int    $filterselect The id of the item defined by $filtertype
+ * @param int    $tagid        The id of the row in the tag table that identifies the RSS Feed
+ * @return string
+ */
 function blog_rss_get_url($contextid, $userid, $filtertype, $filterselect=0, $tagid=0) {
     $componentname = 'blog';
 
@@ -29,8 +62,15 @@ function blog_rss_get_url($contextid, $userid, $filtertype, $filterselect=0, $ta
     return rss_get_url($contextid, $userid, $componentname, $additionalargs);
 }
 
-// This function returns the icon (from theme) with the link to rss/file.php
-// needs some hacking to rss/file.php
+/**
+ * Print the link for the RSS feed with the correct RSS icon (Theme based)
+ *
+ * @param stdClass    $context      The context under which the URL should be created
+ * @param string      $filtertype   The source of the RSS feed (site/course/group/user)
+ * @param int         $filterselect The id of the item defined by $filtertype
+ * @param int         $tagid        The id of the row in the tag table that identifies the RSS Feed
+ * @param string      $tooltiptext  The tooltip to be displayed with the link
+ */
 function blog_rss_print_link($context, $filtertype, $filterselect=0, $tagid=0, $tooltiptext='') {
     global $CFG, $USER, $OUTPUT;
 
@@ -45,6 +85,15 @@ function blog_rss_print_link($context, $filtertype, $filterselect=0, $tagid=0, $
     print '<div class="mdl-right"><a href="'. $url .'"><img src="'. $rsspix .'" title="'. strip_tags($tooltiptext) .'" alt="'.get_string('rss').'" /></a></div>';
 }
 
+/**
+ * Build the URL for the RSS feed amd add it as a header
+ *
+ * @param stdClass    $context      The context under which the URL should be created
+ * @param string      $title        Name for the link to be added to the page header
+ * @param string      $filtertype   The source of the RSS feed (site/course/group/user)
+ * @param int         $filterselect The id of the item defined by $filtertype
+ * @param int         $tagid        The id of the row in the tag table that identifies the RSS Feed
+ */
 function blog_rss_add_http_header($context, $title, $filtertype, $filterselect=0, $tagid=0) {
     global $PAGE, $USER, $CFG;
 
@@ -63,8 +112,9 @@ function blog_rss_add_http_header($context, $title, $filtertype, $filterselect=0
 
 /**
  * Utility function to extract parameters needed to generate RSS URLs from the blog filters
- * @param <type> $filters
- * @return array array containing the id of the user/course/group, the relevant context and the filter type (site/user/course/group)
+ *
+ * @param  array $filters filters for the blog
+ * @return array array containing the id of the user/course/group, the relevant context and the filter type: site/user/course/group
  */
 function blog_rss_get_params($filters) {
     $thingid = $rsscontext = $filtertype = null;
@@ -99,8 +149,12 @@ function blog_rss_get_params($filters) {
     return array($thingid, $rsscontext, $filtertype);
 }
 
-
-// Generate any blog RSS feed via one function (called by ../rss/file.php)
+/**
+ * Generate any blog RSS feed via one function
+ *
+ * @param stdClass $context The context of the blog for which the feed it being generated
+ * @param array    $args    An array of arguements needed to build the feed (contextid, token, componentname, type, id, tagid)
+ */
 function blog_rss_get_feed($context, $args) {
     global $CFG, $SITE, $DB;
 
@@ -219,7 +273,14 @@ function blog_rss_get_feed($context, $args) {
     }
 }
 
-
+/**
+ * Retrieve the location and file name of a cached RSS feed
+ *
+ * @param string $type  The source of the RSS feed (site/course/group/user)
+ * @param int    $id    The id of the item defined by $type
+ * @param int    $tagid The id of the row in the tag table that identifies the RSS Feed
+ * @return string
+ */
 function blog_rss_file_name($type, $id, $tagid=0) {
     global $CFG;
 
@@ -230,7 +291,15 @@ function blog_rss_file_name($type, $id, $tagid=0) {
     }
 }
 
-//This function saves to file the rss feed specified in the parameters
+/**
+ * This function saves to file the rss feed specified in the parameters
+ *
+ * @param string $type     The source of the RSS feed (site/course/group/user)
+ * @param int    $id       The id of the item defined by $type
+ * @param int    $tagid    The id of the row in the tag table that identifies the RSS Feed
+ * @param string $contents The contents of the RSS Feed file
+ * @return bool whether the save was successful or not
+ */
 function blog_rss_save_file($type, $id, $tagid=0, $contents='') {
     global $CFG;
 
index aa92c84..df3b34f 100644 (file)
@@ -92,7 +92,7 @@ $string['phpldap_noextension'] = '<em>The PHP LDAP module does not seem to be pr
 $string['pluginname'] = 'LDAP enrolments';
 $string['pluginname_desc'] = '<p>You can use an LDAP server to control your enrolments. It is assumed your LDAP tree contains groups that map to the courses, and that each of those groups/courses will have membership entries to map to students.</p><p>It is assumed that courses are defined as groups in LDAP, with each group having multiple membership fields (<em>member</em> or <em>memberUid</em>) that contain a uniqueidentification of the user.</p><p>To use LDAP enrolment, your users <strong>must</strong> to have a valid  idnumber field. The LDAP groups must have that idnumber in the member fields for a user to be enrolled in the course. This will usually work well if you are already using LDAP Authentication.</p><p>Enrolments will be updated when the user logs in. You can also run a script to keep enrolments in synch. Look in <em>enrol/ldap/cli/sync.php</em>.</p><p>This plugin can also be set to automatically create new courses when new groups appear in LDAP.</p>';
 $string['pluginnotenabled'] = 'Plugin not enabled!';
-$string['role_mapping'] = '<p>For each rol that you want to assign from LDAP, you need to specify the list of contexts where the role courses\'s groups are located. Separate different contexts with \';\'.</p><p>You also need to specify the attribute your LDAP server uses to hold the members of a group. Usually \'member\' or \'memberUid\'</p>';
+$string['role_mapping'] = '<p>For each role that you want to assign from LDAP, you need to specify the list of contexts where the role courses\'s groups are located. Separate different contexts with \';\'.</p><p>You also need to specify the attribute your LDAP server uses to hold the members of a group. Usually \'member\' or \'memberUid\'</p>';
 $string['role_mapping_key'] = 'Map roles from LDAP ';
 $string['roles'] = 'Role mapping';
 $string['server_settings'] = 'LDAP server settings';
index 4da2ea8..7905f66 100644 (file)
@@ -39,16 +39,16 @@ $string['parentlanguage'] = '';
 $string['strftimedate'] = '%d %B %Y';
 $string['strftimedatefullshort'] = '%d/%m/%y';
 $string['strftimedateshort'] = '%d %B';
-$string['strftimedatetime'] = '%d %B %Y, %l:%M %p';
+$string['strftimedatetime'] = '%d %B %Y, %I:%M %p';
 $string['strftimedatetimeshort'] = '%d/%m/%y, %H:%M';
 $string['strftimedaydate'] = '%A, %d %B %Y';
-$string['strftimedaydatetime'] = '%A, %d %B %Y, %l:%M %p';
+$string['strftimedaydatetime'] = '%A, %d %B %Y, %I:%M %p';
 $string['strftimedayshort'] = '%A, %d %B';
 $string['strftimedaytime'] = '%a, %H:%M';
 $string['strftimemonthyear'] = '%B %Y';
 $string['strftimerecent'] = '%d %b, %H:%M';
-$string['strftimerecentfull'] = '%a, %d %b %Y, %l:%M %p';
-$string['strftimetime'] = '%l:%M %p';
+$string['strftimerecentfull'] = '%a, %d %b %Y, %I:%M %p';
+$string['strftimetime'] = '%I:%M %p';
 $string['thisdirection'] = 'ltr';
 $string['thisdirectionvertical'] = 'btt';
 $string['thislanguage'] = 'English';
index 657814d..81c5a91 100644 (file)
         <FIELD NAME="subject" TYPE="char" LENGTH="128" NOTNULL="true" SEQUENCE="false" PREVIOUS="coursemoduleid" NEXT="summary"/>
         <FIELD NAME="summary" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false" PREVIOUS="subject" NEXT="content"/>
         <FIELD NAME="content" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false" PREVIOUS="summary" NEXT="uniquehash"/>
-        <FIELD NAME="uniquehash" TYPE="char" LENGTH="128" NOTNULL="true" SEQUENCE="false" PREVIOUS="content" NEXT="rating"/>
+        <FIELD NAME="uniquehash" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="content" NEXT="rating"/>
         <FIELD NAME="rating" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="uniquehash" NEXT="format"/>
         <FIELD NAME="format" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="rating" NEXT="summaryformat"/>
         <FIELD NAME="summaryformat" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="format" NEXT="attachment"/>
index 2c28ba3..0aa4122 100644 (file)
@@ -145,6 +145,18 @@ function xmldb_main_upgrade($oldversion) {
         upgrade_main_savepoint(true, 2012020200.06);
     }
 
+    if ($oldversion < 2012021700.01) {
+        // Changing precision of field uniquehash on table post to 255
+        $table = new xmldb_table('post');
+        $field = new xmldb_field('uniquehash', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'content');
+
+        // Launch change of precision for field uniquehash
+        $dbman->change_field_precision($table, $field);
+
+        // Main savepoint reached
+        upgrade_main_savepoint(true, 2012021700.01);
+    }
+
     return true;
 }
 
index c90b3af..5c14a6e 100644 (file)
@@ -1945,9 +1945,10 @@ function make_timestamp($year, $month=1, $day=1, $hour=0, $minute=0, $second=0,
  *        {@link http://docs.moodle.org/dev/Time_API#Timezone}
  * @param bool $fixday If true (default) then the leading zero from %d is removed.
  *        If false then the leading zero is maintained.
+ * @param bool $fixhour If true (default) then the leading zero from %I is removed.
  * @return string the formatted date/time.
  */
-function userdate($date, $format = '', $timezone = 99, $fixday = true) {
+function userdate($date, $format = '', $timezone = 99, $fixday = true, $fixhour = true) {
 
     global $CFG;
 
@@ -1960,6 +1961,19 @@ function userdate($date, $format = '', $timezone = 99, $fixday = true) {
     } else if ($fixday) {
         $formatnoday = str_replace('%d', 'DD', $format);
         $fixday = ($formatnoday != $format);
+        $format = $formatnoday;
+    }
+
+    // Note: This logic about fixing 12-hour time to remove unnecessary leading
+    // zero is required because on Windows, PHP strftime function does not
+    // support the correct 'hour without leading zero' parameter (%l).
+    if (!empty($CFG->nofixhour)) {
+        // Config.php can force %I not to be fixed.
+        $fixhour = false;
+    } else if ($fixhour) {
+        $formatnohour = str_replace('%I', 'HH', $format);
+        $fixhour = ($formatnohour != $format);
+        $format = $formatnohour;
     }
 
     //add daylight saving offset for string timezones only, as we can't get dst for
@@ -1971,21 +1985,25 @@ function userdate($date, $format = '', $timezone = 99, $fixday = true) {
     $timezone = get_user_timezone_offset($timezone);
 
     if (abs($timezone) > 13) {   /// Server time
+        $datestring = strftime($format, $date);
         if ($fixday) {
-            $datestring = strftime($formatnoday, $date);
             $daystring  = ltrim(str_replace(array(' 0', ' '), '', strftime(' %d', $date)));
             $datestring = str_replace('DD', $daystring, $datestring);
-        } else {
-            $datestring = strftime($format, $date);
+        }
+        if ($fixhour) {
+            $hourstring = ltrim(str_replace(array(' 0', ' '), '', strftime(' %I', $date)));
+            $datestring = str_replace('HH', $hourstring, $datestring);
         }
     } else {
         $date += (int)($timezone * 3600);
+        $datestring = gmstrftime($format, $date);
         if ($fixday) {
-            $datestring = gmstrftime($formatnoday, $date);
             $daystring  = ltrim(str_replace(array(' 0', ' '), '', gmstrftime(' %d', $date)));
             $datestring = str_replace('DD', $daystring, $datestring);
-        } else {
-            $datestring = gmstrftime($format, $date);
+        }
+        if ($fixhour) {
+            $hourstring = ltrim(str_replace(array(' 0', ' '), '', gmstrftime(' %I', $date)));
+            $datestring = str_replace('HH', $hourstring, $datestring);
         }
     }
 
@@ -1999,8 +2017,6 @@ function userdate($date, $format = '', $timezone = 99, $fixday = true) {
        }
     }
 
-    // When using the %l (12-hour time with no leading zero), it adds unwanted spaces
-    $datestring = trim(str_replace('  ', ' ', $datestring));
     return $datestring;
 }
 
index 5cec604..01ac161 100644 (file)
 /**
  * This file contains all the common stuff to be used in RSS System
  *
- * @package    core
- * @subpackage rss
+ * @package    core_rss
+ * @category   rss
  * @copyright  1999 onwards Martin Dougiamas  {@link http://moodle.com}
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
 defined('MOODLE_INTERNAL') || die();
 
- function rss_add_http_header($context, $componentname, $componentinstance, $title) {
+/**
+ * Build the URL for the RSS feed and add it as a header
+ *
+ * @param stdClass    $context           The context under which the URL should be created
+ * @param string      $componentname     The name of the component for which the RSS feed exists
+ * @param stdClass    $componentinstance The instance of the component
+ * @param string      $title             Name for the link to be added to the page header
+ */
+function rss_add_http_header($context, $componentname, $componentinstance, $title) {
     global $PAGE, $USER;
 
     $componentid = null;
@@ -41,10 +49,14 @@ defined('MOODLE_INTERNAL') || die();
  }
 
 /**
- * This function returns the icon (from theme) with the link to rss/file.php
+ * Print the link for the RSS feed with the correct RSS icon
  *
- * @global object
- * @global object
+ * @param stdClass    $contextid     The id of the context under which the URL should be created
+ * @param int         $userid        The source of the RSS feed (site/course/group/user)
+ * @param string      $componentname The name of the component for which the feed exists
+ * @param string      $id            The name by which to call the RSS File
+ * @param string      $tooltiptext   The tooltip to be displayed with the link
+ * @return string HTML output for the RSS link
  */
 function rss_get_link($contextid, $userid, $componentname, $id, $tooltiptext='') {
     global $OUTPUT;
@@ -60,11 +72,11 @@ function rss_get_link($contextid, $userid, $componentname, $id, $tooltiptext='')
 /**
  * This function returns the URL for the RSS XML file.
  *
- * @global object
- * @param int contextid the course id
- * @param int userid the current user id
- * @param string modulename the name of the current module. For example "forum"
+ * @param int    $contextid      the course id
+ * @param int    $userid         the current user id
+ * @param string $componentname  the name of the current component. For example "forum"
  * @param string $additionalargs For modules, module instance id
+ * @return string the url of the RSS feed
  */
 function rss_get_url($contextid, $userid, $componentname, $additionalargs) {
     global $CFG;
@@ -74,7 +86,13 @@ function rss_get_url($contextid, $userid, $componentname, $additionalargs) {
 }
 
 /**
- * This function prints the icon (from theme) with the link to rss/file.php
+ * Print the link for the RSS feed with the correct RSS icon (Theme based)
+ *
+ * @param stdClass    $contextid     The id of the context under which the URL should be created
+ * @param int         $userid        The source of the RSS feed (site/course/group/user)
+ * @param string      $componentname The name of the component for which the feed exists
+ * @param string      $id            The name by which to call the RSS File
+ * @param string      $tooltiptext   The tooltip to be displayed with the link
  */
 function rss_print_link($contextid, $userid, $componentname, $id, $tooltiptext='') {
     print rss_get_link($contextid, $userid, $componentname, $id, $tooltiptext);
@@ -83,11 +101,9 @@ function rss_print_link($contextid, $userid, $componentname, $id, $tooltiptext='
 
 /**
  * Given an object, deletes all RSS files associated with it.
- * Relies on a naming convention. See rss_get_filename()
  *
- * @param string $componentname the name of the module ie 'forum'. Used to construct the cache path.
- * @param object $instance An object with an id member variable ie $forum, $glossary.
- * @return void
+ * @param string   $componentname the name of the module ie 'forum'. Used to construct the cache path.
+ * @param stdClass $instance      An object with an id member variable ie $forum, $glossary.
  */
 function rss_delete_file($componentname, $instance) {
     global $CFG;
@@ -107,9 +123,12 @@ function rss_delete_file($componentname, $instance) {
 
 /**
  * Are RSS feeds enabled for the supplied module instance?
- * @param object $instance An instance of an activity module ie $forum, $glossary.
- * @param boolean $hasrsstype Should there be a rsstype member variable?
- * @param boolean $hasrssarticles Should there be a rssarticles member variable?
+ *
+ * @param string   $modname        The name of the module to be checked
+ * @param stdClass $instance       An instance of an activity module ie $forum, $glossary.
+ * @param bool     $hasrsstype     Should there be a rsstype member variable?
+ * @param bool     $hasrssarticles Should there be a rssarticles member variable?
+ * @return bool whether or not RSS is enabled for the module
  */
 function rss_enabled_for_mod($modname, $instance=null, $hasrsstype=true, $hasrssarticles=true) {
     if ($hasrsstype) {
@@ -135,10 +154,11 @@ function rss_enabled_for_mod($modname, $instance=null, $hasrsstype=true, $hasrss
 /**
  * This function saves to file the rss feed specified in the parameters
  *
- * @global object
- * @param string $componentname the module name ie forum. Used to create a cache directory.
- * @param string $filename the name of the file to be created ie "1234"
- * @param string $contents the data to be written to the file
+ * @param string $componentname  the module name ie forum. Used to create a cache directory.
+ * @param string $filename       the name of the file to be created ie "rss.xml"
+ * @param string $contents       the data to be written to the file
+ * @param bool   $expandfilename whether or not the fullname of the RSS file should be used
+ * @return bool whether the save was successful or not
  */
 function rss_save_file($componentname, $filename, $contents, $expandfilename=true) {
     global $CFG;
@@ -167,12 +187,25 @@ function rss_save_file($componentname, $filename, $contents, $expandfilename=tru
     return $status;
 }
 
-
+/**
+ * Retrieve the location and file name of a cached RSS feed
+ *
+ * @param string $componentname the name of the component the RSS feed is being created for
+ * @param string $filename the name of the RSS FEED
+ * @return string The full name and path of the RSS file
+ */
 function rss_get_file_full_name($componentname, $filename) {
     global $CFG;
     return "$CFG->cachedir/rss/$componentname/$filename.xml";
 }
 
+/**
+ * Construct the file name of the RSS File
+ *
+ * @param stdClass $instance the instance of the source of the RSS feed
+ * @param string $sql the SQL used to produce the RSS feed
+ * @return string the name of the RSS file
+ */
 function rss_get_file_name($instance, $sql) {
     return $instance->id.'_'.md5($sql);
 }
@@ -180,8 +213,10 @@ function rss_get_file_name($instance, $sql) {
 /**
  * This function return all the common headers for every rss feed in the site
  *
- * @global object
- * @global object
+ * @param string $title       the title for the RSS Feed
+ * @param string $link        the link for the origin of the RSS feed
+ * @param string $description the description of the contents of the RSS feed
+ * @return bool|string the standard header for the RSS feed
  */
 function rss_standard_header($title = NULL, $link = NULL, $description = NULL) {
     global $CFG, $USER, $OUTPUT;
@@ -248,12 +283,19 @@ function rss_standard_header($title = NULL, $link = NULL, $description = NULL) {
     }
 }
 
-//This function returns the rss XML code for every item passed in the array
-//item->title: The title of the item
-//item->author: The author of the item. Optional !!
-//item->pubdate: The pubdate of the item
-//item->link: The link url of the item
-//item->description: The content of the item
+
+/**
+ * Generates the rss XML code for every item passed in the array
+ *
+ * item->title: The title of the item
+ * item->author: The author of the item. Optional !!
+ * item->pubdate: The pubdate of the item
+ * item->link: The link url of the item
+ * item->description: The content of the item
+ *
+ * @param array $items an array of item objects
+ * @return bool|string the rss XML code for every item passed in the array
+ */
 function rss_add_items($items) {
     global $CFG;
 
@@ -300,6 +342,12 @@ function rss_add_items($items) {
 
 /**
  * This function return all the common footers for every rss feed in the site
+ *
+ * @param string $title       Not used at all
+ * @param string $link        Not used at all
+ * @param string $description Not used at all
+ * @todo  MDL-31050 Fix/Remove this function
+ * @return string
  */
 function rss_standard_footer($title = NULL, $link = NULL, $description = NULL) {
     $status = true;
@@ -313,10 +361,12 @@ function rss_standard_footer($title = NULL, $link = NULL, $description = NULL) {
     return $result;
 }
 
+
 /**
- * This function return an error xml file (string)
- * to be sent when a rss is required (file.php)
- * and something goes wrong
+ * This function return an error xml file (string) to be sent when a rss is required (file.php) and something goes wrong
+ *
+ * @param string $errortype Type of error to send, default is rsserror
+ * @return stdClass returns a XML Feed with an error message in it
  */
 function rss_geterrorxmlfile($errortype = 'rsserror') {
     global $CFG;
@@ -344,6 +394,12 @@ function rss_geterrorxmlfile($errortype = 'rsserror') {
     return $return;
 }
 
+/**
+ * Get the ID of the user from a given RSS Token
+ *
+ * @param string $token the RSS token you would like to use to find the user id
+ * @return int The user id
+ */
 function rss_get_userid_from_token($token) {
     global $DB;
     $record = $DB->get_record('user_private_key', array('script'=>'rss','value' => $token), 'userid', IGNORE_MISSING);
@@ -353,21 +409,32 @@ function rss_get_userid_from_token($token) {
     return null;
 }
 
+/**
+ * Get the RSS Token from a given user id
+ *
+ * @param int $userid The user id
+ * @return string the RSS token for the user
+ */
 function rss_get_token($userid) {
     return get_user_key('rss', $userid);
 }
 
+/**
+ * Removes the token for the given user from the DB
+ * @param int $userid The user id for the token you wish to delete
+ */
 function rss_delete_token($userid) {
     delete_user_key('rss', $userid);
 }
 
-// ===== This function are used to write XML tags =========
-// [stronk7]: They are similar to the glossary export and backup generation
-// but I've replicated them here because they have some minor
-// diferences. Someday all they should go to a common place.
-
 /**
  * Return the xml start tag
+ *
+ * @param string $tag        the xml tag name
+ * @param int    $level      the indentation level
+ * @param bool   $endline    whether or not to start new tags on a new line
+ * @param array  $attributes the attributes of the xml tag
+ * @return string the xml start tag
  */
 function rss_start_tag($tag,$level=0,$endline=false,$attributes=null) {
     if ($endline) {
@@ -386,6 +453,10 @@ function rss_start_tag($tag,$level=0,$endline=false,$attributes=null) {
 
 /**
  * Return the xml end tag
+ * @param string $tag        the xml tag name
+ * @param int    $level      the indentation level
+ * @param bool   $endline    whether or not to start new tags on a new line
+ * @return string the xml end tag
  */
 function rss_end_tag($tag,$level=0,$endline=true) {
     if ($endline) {
@@ -397,7 +468,14 @@ function rss_end_tag($tag,$level=0,$endline=true) {
 }
 
 /**
- * Return the start tag, the contents and the end tag
+ * Return the while xml element, including content
+ *
+ * @param string $tag        the xml tag name
+ * @param int    $level      the indentation level
+ * @param bool   $endline    whether or not to start new tags on a new line
+ * @param string $content    the text to go inside the tag
+ * @param array  $attributes the attributes of the xml tag
+ * @return string the whole xml element
  */
 function rss_full_tag($tag,$level=0,$endline=true,$content,$attributes=null) {
     $st = rss_start_tag($tag,$level,$endline,$attributes);
@@ -411,19 +489,9 @@ function rss_full_tag($tag,$level=0,$endline=true,$content,$attributes=null) {
 /**
  * Adds RSS Media Enclosures for "podcasting" by including attachments that
  * are specified in the item->attachments field.
- * Note also that iTunes does some things very badly - one thing it does is
- * refuse to download ANY of your files if you're using "file.php?file=blah"
- * and can't use the more elegant "file.php/blah" slasharguments setting. It
- * stops after ".php" and assumes the files are not media files, despite what
- * is specified in the "type" attribute. Dodgy coding all round!
- *
- * Authors
- *     - Hannes Gassert <hannes@mediagonal.ch>
- *     - Dan Stowell
  *
- * @global object
- * @param    $item     object representing an RSS item
- * @return   string    RSS enclosure tags
+ * @param stdClass $item representing an RSS item
+ * @return string RSS enclosure tags
  */
 function rss_add_enclosures($item){
     global $CFG;
index 74f85cb..254b870 100644 (file)
@@ -1317,13 +1317,13 @@ class moodlelib_test extends UnitTestCase {
                 'time' => '1309514400',
                 'usertimezone' => 'America/Moncton',
                 'timezone' => '99', //dst offset and timezone offset.
-                'expectedoutput' => 'Friday, 1 July 2011, 07:00 AM'
+                'expectedoutput' => 'Friday, 1 July 2011, 7:00 AM'
             ),
             array(
                 'time' => '1309514400',
                 'usertimezone' => 'America/Moncton',
                 'timezone' => 'America/Moncton', //dst offset and timezone offset.
-                'expectedoutput' => 'Friday, 1 July 2011, 07:00 AM'
+                'expectedoutput' => 'Friday, 1 July 2011, 7:00 AM'
             ),
             array(
                 'time' => '1293876000 ',
@@ -1335,13 +1335,13 @@ class moodlelib_test extends UnitTestCase {
                 'time' => '1293876000 ',
                 'usertimezone' => 'America/Moncton',
                 'timezone' => '99', //no dst offset in jan, so just timezone offset.
-                'expectedoutput' => 'Saturday, 1 January 2011, 06:00 AM'
+                'expectedoutput' => 'Saturday, 1 January 2011, 6:00 AM'
             ),
             array(
                 'time' => '1293876000 ',
                 'usertimezone' => 'America/Moncton',
                 'timezone' => 'America/Moncton', //no dst offset in jan
-                'expectedoutput' => 'Saturday, 1 January 2011, 06:00 AM'
+                'expectedoutput' => 'Saturday, 1 January 2011, 6:00 AM'
             ),
             array(
                 'time' => '1293876000 ',
@@ -1353,7 +1353,7 @@ class moodlelib_test extends UnitTestCase {
                 'time' => '1293876000 ',
                 'usertimezone' => '-2',
                 'timezone' => '99', //take user timezone
-                'expectedoutput' => 'Saturday, 1 January 2011, 08:00 AM'
+                'expectedoutput' => 'Saturday, 1 January 2011, 8:00 AM'
             ),
             array(
                 'time' => '1293876000 ',
@@ -1365,19 +1365,19 @@ class moodlelib_test extends UnitTestCase {
                 'time' => '1293876000 ',
                 'usertimezone' => '-10',
                 'timezone' => '-2', //take this timezone
-                'expectedoutput' => 'Saturday, 1 January 2011, 08:00 AM'
+                'expectedoutput' => 'Saturday, 1 January 2011, 8:00 AM'
             ),
             array(
                 'time' => '1293876000 ',
                 'usertimezone' => '-10',
                 'timezone' => 'random/time', //this should show server time
-                'expectedoutput' => 'Saturday, 1 January 2011, 06:00 PM'
+                'expectedoutput' => 'Saturday, 1 January 2011, 6:00 PM'
             ),
             array(
                 'time' => '1293876000 ',
                 'usertimezone' => '14', //server time zone
                 'timezone' => '99', //this should show user time
-                'expectedoutput' => 'Saturday, 1 January 2011, 06:00 PM'
+                'expectedoutput' => 'Saturday, 1 January 2011, 6:00 PM'
             ),
         );
 
index 6910282..e01a813 100644 (file)
@@ -87,6 +87,9 @@ $PAGE->set_context(get_context_instance(CONTEXT_USER, $USER->id));
 $PAGE->navigation->extend_for_user($USER);
 $PAGE->set_pagelayout('course');
 
+// Disable message notification popups while the user is viewing their messages
+$PAGE->set_popup_notification_allowed(false);
+
 $context = get_context_instance(CONTEXT_SYSTEM);
 
 $user1 = null;
index 4e5ae7d..683b3de 100644 (file)
@@ -400,7 +400,8 @@ class assignment_base {
         } else {
             if (isloggedin()) {
                 if ($submission = $this->get_submission($USER->id)) {
-                    if ($submission->timemodified) {
+                    // If the submission has been completed
+                    if ($this->is_submitted_with_required_data($submission)) {
                         if ($submission->timemodified <= $this->assignment->timedue || empty($this->assignment->timedue)) {
                             $submitted = '<span class="early">'.userdate($submission->timemodified).'</span>';
                         } else {
@@ -1823,6 +1824,18 @@ class assignment_base {
         return $DB->get_record('assignment_submissions', array('assignment'=>$this->assignment->id, 'userid'=>$userid));
     }
 
+    /**
+     * Check the given submission is complete. Preliminary rows are often created in the assignment_submissions
+     * table before a submission actually takes place. This function checks to see if the given submission has actually
+     * been submitted.
+     *
+     * @param  stdClass $submission The submission we want to check for completion
+     * @return bool                 Indicates if the submission was found to be complete
+     */
+    public function is_submitted_with_required_data($submission) {
+        return $submission->timemodified;
+    }
+
     /**
      * Instantiates a new submission object for a given user
      *
index 140ed75..16818c1 100644 (file)
@@ -1152,6 +1152,18 @@ class assignment_upload extends assignment_base {
             send_temp_file($zipfile, $filename); //send file and delete after sending.
         }
     }
+
+    /**
+     * Check the given submission is complete. Preliminary rows are often created in the assignment_submissions
+     * table before a submission actually takes place. This function checks to see if the given submission has actually
+     * been submitted.
+     *
+     * @param  stdClass $submission The submission we want to check for completion
+     * @return bool                 Indicates if the submission was found to be complete
+     */
+    public function is_submitted_with_required_data($submission) {
+        return ($submission->timemodified AND $submission->data2);
+    }
 }
 
 class mod_assignment_upload_notes_form extends moodleform {
index 03f91af..bc2abe3 100644 (file)
@@ -393,6 +393,18 @@ class assignment_uploadsingle extends assignment_base {
             send_temp_file($zipfile, $filename); //send file and delete after sending.
         }
     }
+
+    /**
+     * Check the given submission is complete. Preliminary rows are often created in the assignment_submissions
+     * table before a submission actually takes place. This function checks to see if the given submission has actually
+     * been submitted.
+     *
+     * @param  stdClass $submission The submission we want to check for completion
+     * @return bool                 Indicates if the submission was found to be complete
+     */
+    public function is_submitted_with_required_data($submission) {
+        return ($submission->timemodified AND $submission->numfiles > 0);
+    }
 }
 
 class mod_assignment_uploadsingle_response_form extends moodleform {
index 25791df..3db1c44 100644 (file)
@@ -1,8 +1,37 @@
 <?php
-    // This file adds support to rss feeds generation
 
-    // This function is the main entry point to database module
-    // rss feeds generation.
+// 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 file contains all the common stuff to be used for RSS in the Database Module
+ *
+ * @package    mod_data
+ * @category   rss
+ * @copyright  1999 onwards Martin Dougiamas  {@link http://moodle.com}
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+/**
+ * Generates the Database modules RSS Feed
+ *
+ * @param strClass $context the context the feed should be created under
+ * @param array $args array of arguments to be used in the creation of the RSS Feed
+ * @return NULL|string NULL if there is nothing to return, or the file path of the cached file if there is
+ */
     function data_rss_get_feed($context, $args) {
         global $CFG, $DB;
 
@@ -52,7 +81,7 @@
             if (!$records = $DB->get_records_sql($sql, array(), 0, $data->rssarticles)) {
                 return null;
             }
-            
+
             $firstrecord = array_shift($records);  // Get the first and put it back
             array_unshift($records, $firstrecord);
 
 
         return $cachedfilepath;
     }
-
+/**
+ * Creates and returns a SQL query for the items that would be included in the RSS Feed
+ *
+ * @param stdClass $data database instance object
+ * @param int      $time epoch timestamp to compare time-modified to, 0 for all or a proper value
+ * @return string SQL query string to get the items for the databse RSS Feed
+ */
     function data_rss_get_sql($data, $time=0) {
         //do we only want new posts?
         if ($time) {
      * If there is new stuff in since $time this returns true
      * Otherwise it returns false.
      *
-     * @param object $data the data activity object
-     * @param int $time timestamp
-     * @return bool
+     * @param stdClass $data the data activity object
+     * @param int      $time timestamp
+     * @return bool true if there is new stuff for the RSS Feed
      */
     function data_rss_newstuff($data, $time) {
         global $DB;
index 7115fe7..e5b7809 100644 (file)
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
-* This file adds support to rss feeds generation
-*
-* @package mod-forum
-* @copyright 2001 Eloy Lafuente (stronk7) http://contiento.com
-* @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
-*/
+ * This file adds support to rss feeds generation
+ *
+ * @package mod_forum
+ * @category rss
+ * @copyright 2001 Eloy Lafuente (stronk7) http://contiento.com
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 
 /**
  * Returns the path to the cached rss feed contents. Creates/updates the cache if necessary.
- * @global object $CFG
- * @global object $DB
- * @param object $context the context
- * @param int $forumid the ID of the forum
- * @param array $args the arguments received in the url
+ * @param stdClass $context the context
+ * @param array    $args    the arguments received in the url
  * @return string the full path to the cached RSS feed directory. Null if there is a problem.
  */
 function forum_rss_get_feed($context, $args) {
@@ -88,8 +86,7 @@ function forum_rss_get_feed($context, $args) {
 /**
  * Given a forum object, deletes all cached RSS files associated with it.
  *
- * @param object $forum
- * @return void
+ * @param stdClass $forum
  */
 function forum_rss_delete_file($forum) {
     rss_delete_file('mod_forum', $forum);
@@ -102,10 +99,10 @@ function forum_rss_delete_file($forum) {
  * If there is new stuff in the forum since $time this returns true
  * Otherwise it returns false.
  *
- * @param object $forum the forum object
- * @param object $cm
- * @param int $time timestamp
- * @return bool
+ * @param stdClass $forum the forum object
+ * @param stdClass $cm    Course Module object
+ * @param int      $time  check for items since this epoch timestamp
+ * @return bool True for new items
  */
 function forum_rss_newstuff($forum, $cm, $time) {
     global $DB;
@@ -116,6 +113,14 @@ function forum_rss_newstuff($forum, $cm, $time) {
     return ($recs && !empty($recs));
 }
 
+/**
+ * Determines which type of SQL query is required, one for posts or one for discussions, and returns the appropriate query
+ *
+ * @param stdClass $forum the forum object
+ * @param stdClass $cm    Course Module object
+ * @param int      $time  check for items since this epoch timestamp
+ * @return string the SQL query to be used to get the Discussion/Post details from the forum table of the database
+ */
 function forum_rss_get_sql($forum, $cm, $time=0) {
     $sql = null;
 
@@ -130,6 +135,14 @@ function forum_rss_get_sql($forum, $cm, $time=0) {
     return $sql;
 }
 
+/**
+ * Generates the SQL query used to get the Discussion details from the forum table of the database
+ *
+ * @param stdClass $forum     the forum object
+ * @param stdClass $cm        Course Module object
+ * @param int      $newsince  check for items since this epoch timestamp
+ * @return string the SQL query to be used to get the Discussion details from the forum table of the database
+ */
 function forum_rss_feed_discussions_sql($forum, $cm, $newsince=0) {
     global $CFG, $DB, $USER;
 
@@ -185,6 +198,14 @@ function forum_rss_feed_discussions_sql($forum, $cm, $newsince=0) {
     return $sql;
 }
 
+/**
+ * Generates the SQL query used to get the Post details from the forum table of the database
+ *
+ * @param stdClass $forum     the forum object
+ * @param stdClass $cm        Course Module object
+ * @param int      $newsince  check for items since this epoch timestamp
+ * @return string the SQL query to be used to get the Post details from the forum table of the database
+ */
 function forum_rss_feed_posts_sql($forum, $cm, $newsince=0) {
     $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
 
@@ -228,6 +249,15 @@ function forum_rss_feed_posts_sql($forum, $cm, $newsince=0) {
     return $sql;
 }
 
+/**
+ * Retrieve the correct SQL snippet for group-only forums
+ *
+ * @param stdClass $cm           Course Module object
+ * @param int      $groupmode    the mode in which the forum's groups are operating
+ * @param bool     $currentgroup true if the user is from the a group enabled on the forum
+ * @param stdClass $modcontext   The context instance of the forum module
+ * @return string SQL Query for group details of the forum
+ */
 function forum_rss_get_group_sql($cm, $groupmode, $currentgroup, $modcontext=null) {
     $groupselect = '';
 
@@ -251,15 +281,15 @@ function forum_rss_get_group_sql($cm, $groupmode, $currentgroup, $modcontext=nul
     return $groupselect;
 }
 
-
-
-
 /**
  * This function return the XML rss contents about the forum
  * It returns false if something is wrong
  *
- * @param object $forum
- * @param bool
+ * @param stdClass $forum the forum object
+ * @param string   $sql   The SQL used to retrieve the contents from the database
+ * @return bool|string false if the contents is empty, otherwise the contents of the feed is returned
+ *
+ * @Todo MDL-31129 implement post attachment handling
  */
 function forum_rss_feed_contents($forum, $sql) {
     global $CFG, $DB;
@@ -302,7 +332,7 @@ function forum_rss_feed_contents($forum, $sql) {
             $formatoptions->trusted = $rec->posttrust;
             $item->description = format_text($rec->postmessage,$rec->postformat,$formatoptions,$forum->course);
 
-            //TODO: implement post attachment handling
+            //TODO: MDL-31129 implement post attachment handling
             /*if (!$isdiscussion) {
                 $post_file_area_name = str_replace('//', '/', "$forum->course/$CFG->moddata/forum/$forum->id/$rec->postid");
                 $post_files = get_directory_list("$CFG->dataroot/$post_file_area_name");
index e0502e8..757f028 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="mod/glossary/db" VERSION="20101115" COMMENT="XMLDB file for Moodle mod/glossary"
+<XMLDB PATH="mod/glossary/db" VERSION="20120104" COMMENT="XMLDB file for Moodle mod/glossary"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
 >
@@ -20,8 +20,9 @@
         <FIELD NAME="allowcomments" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="showall" NEXT="allowprintview"/>
         <FIELD NAME="allowprintview" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="1" SEQUENCE="false" PREVIOUS="allowcomments" NEXT="usedynalink"/>
         <FIELD NAME="usedynalink" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="1" SEQUENCE="false" PREVIOUS="allowprintview" NEXT="defaultapproval"/>
-        <FIELD NAME="defaultapproval" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="1" SEQUENCE="false" PREVIOUS="usedynalink" NEXT="globalglossary"/>
-        <FIELD NAME="globalglossary" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="defaultapproval" NEXT="entbypage"/>
+        <FIELD NAME="defaultapproval" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="1" SEQUENCE="false" PREVIOUS="usedynalink" NEXT="approvaldisplayformat"/>
+        <FIELD NAME="approvaldisplayformat" TYPE="char" LENGTH="50" NOTNULL="true" DEFAULT="default" SEQUENCE="false" COMMENT="Display Format when approving entries" PREVIOUS="defaultapproval" NEXT="globalglossary"/>
+        <FIELD NAME="globalglossary" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="approvaldisplayformat" NEXT="entbypage"/>
         <FIELD NAME="entbypage" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="10" SEQUENCE="false" PREVIOUS="globalglossary" NEXT="editalways"/>
         <FIELD NAME="editalways" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="entbypage" NEXT="rsstype"/>
         <FIELD NAME="rsstype" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="editalways" NEXT="rssarticles"/>
       </KEYS>
     </TABLE>
   </TABLES>
-</XMLDB>
\ No newline at end of file
+</XMLDB>
index 4eef079..72df2a3 100644 (file)
@@ -29,6 +29,28 @@ function xmldb_glossary_upgrade($oldversion) {
     // Moodle v2.2.0 release upgrade line
     // Put any upgrade step following this
 
+    if ($oldversion < 2012010400) {
+
+        // Define field approvaldisplayformat to be added to glossary
+        $table = new xmldb_table('glossary');
+        $field = new xmldb_field('approvaldisplayformat', XMLDB_TYPE_CHAR, '50', null, XMLDB_NOTNULL, null, 'default', 'defaultapproval');
+
+        // Conditionally launch add field approvaldisplayformat
+        if (!$dbman->field_exists($table, $field)) {
+            $dbman->add_field($table, $field);
+        }
+
+        // Set the default approvaldisplayformat for existing entries to be
+        // the existing displayformat so as not to change existing
+        // functionality
+        $sql = "UPDATE {glossary}
+                SET approvaldisplayformat = 'default'";
+        $DB->execute($sql);
+
+        // glossary savepoint reached
+        upgrade_mod_savepoint(true, 2012010400, 'glossary');
+    }
+
     return true;
 }
 
index ae1b66b..4aa37c8 100644 (file)
@@ -14,10 +14,9 @@ function glossary_show_entry_entrylist($course, $cm, $glossary, $entry, $mode=''
 
         $anchortagcontents = glossary_print_entry_concept($entry, true);
 
-        $link = "/mod/glossary/showentry.php?courseid={$course->id}&eid={$entry->id}&displayformat=dictionary";
-        $action = new popup_action('click', $link.'&popup=1', 'entry',array('title'=>'entry','width'=>600,'height'=>450));
-
-        $anchor = $OUTPUT->action_link($link, $anchortagcontents, $action);
+        $link = new moodle_url('/mod/glossary/showentry.php', array('courseid' => $course->id,
+                'eid' => $entry->id, 'displayformat' => 'dictionary'));
+        $anchor = html_writer::link($link, $anchortagcontents);
 
         echo "<div class=\"concept\">$anchor</div> ";
         echo '</td><td align="right" class="entrylowersection">';
index 535f758..78d61fa 100644 (file)
@@ -42,6 +42,8 @@ $string['allowprintview_help'] = 'If enabled, students are provided with a link
 $string['andmorenewentries'] = 'and {$a} more new entries.';
 $string['answer'] = 'Answer';
 $string['approve'] = 'Approve';
+$string['approvaldisplayformat'] = 'Approval display format';
+$string['approvaldisplayformat_help'] = 'When approving glossary items you may wish to use a different display format';
 $string['areyousuredelete'] = 'Are you sure you want to delete this entry?';
 $string['areyousuredeletecomment'] = 'Are you sure you want to delete this comment?';
 $string['areyousureexport'] = 'Are you sure you want to export this entry to';
@@ -115,6 +117,7 @@ $string['displayformat_help'] = 'There are 7 display formats:
 * Entry list - Concepts are listed as links
 * FAQ - The words QUESTION and ANSWER are appended to the concept and definition respectively';
 $string['displayformatcontinuous'] = 'Continuous without author';
+$string['displayformatdefault'] = 'Default to same as display format';
 $string['displayformatdictionary'] = 'Simple, dictionary style';
 $string['displayformatencyclopedia'] = 'Encyclopedia';
 $string['displayformatentrylist'] = 'Entry list';
index f5c21bd..4db6c90 100644 (file)
@@ -79,6 +79,12 @@ class mod_glossary_mod_form extends moodleform_mod {
         $mform->setDefault('displayformat', 'dictionary');
         $mform->addHelpButton('displayformat', 'displayformat', 'glossary');
 
+        $displayformats['default'] = get_string('displayformatdefault', 'glossary');
+        $displayformats = array_merge($displayformats, $formats);
+        $mform->addElement('select', 'approvaldisplayformat', get_string('approvaldisplayformat', 'glossary'), $displayformats);
+        $mform->setDefault('approvaldisplayformat', 'default');
+        $mform->addHelpButton('approvaldisplayformat', 'approvaldisplayformat', 'glossary');
+
         $mform->addElement('selectyesno', 'showspecial', get_string('showspecial', 'glossary'));
         $mform->setDefault('showspecial', 1);
         $mform->addHelpButton('showspecial', 'showspecial', 'glossary');
index 5134126..f4d5251 100644 (file)
@@ -1,8 +1,37 @@
 <?php
-    //This file adds support to rss feeds generation
 
-    //This function is the main entry point to glossary
-    //rss feeds generation.
+// 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 file adds support to rss feeds generation
+ *
+ * @package mod_glossary
+ * @category rss
+ * @copyright  1999 onwards Martin Dougiamas  {@link http://moodle.com}
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+/**
+ * Returns the path to the cached rss feed contents. Creates/updates the cache if necessary.
+ *
+ * @param stdClass $context the context
+ * @param array    $args    the arguments received in the url
+ * @return string the full path to the cached RSS feed directory. Null if there is a problem.
+ */
     function glossary_rss_get_feed($context, $args) {
         global $CFG, $DB, $COURSE, $USER;
 
         return $cachedfilepath;
     }
 
+    /**
+     * The appropriate SQL query for the glossary items to go into the RSS feed
+     *
+     * @param stdClass $glossary the glossary object
+     * @param int      $time     check for items since this epoch timestamp
+     * @return string the SQL query to be used to get the entried from the glossary table of the database
+     */
     function glossary_rss_get_sql($glossary, $time=0) {
         //do we only want new items?
         if ($time) {
      * If there is new stuff in since $time this returns true
      * Otherwise it returns false.
      *
-     * @param object $glossary the glossary activity object
-     * @param int $time timestamp
-     * @return bool
+     * @param stdClass $glossary the glossary activity object
+     * @param int      $time     epoch timestamp to compare new items against, 0 for everyting
+     * @return bool true if there are new items
      */
     function glossary_rss_newstuff($glossary, $time) {
         global $DB;
index bf6b29f..5170456 100644 (file)
@@ -7,7 +7,6 @@ $concept  = optional_param('concept', '', PARAM_CLEAN);
 $courseid = optional_param('courseid', 0, PARAM_INT);
 $eid      = optional_param('eid', 0, PARAM_INT); // glossary entry id
 $displayformat = optional_param('displayformat',-1, PARAM_SAFEDIR);
-$popup = optional_param('popup',0, PARAM_INT);
 
 $url = new moodle_url('/mod/glossary/showentry.php');
 $url->param('concept', $concept);
@@ -40,11 +39,7 @@ if ($eid) {
     print_error('invalidelementid');
 }
 
-if ($popup) {
-    $PAGE->set_pagelayout('popup');
-} else {
-    $PAGE->set_pagelayout('course');
-}
+$PAGE->set_pagelayout('course');
 
 if ($entries) {
     foreach ($entries as $key => $entry) {
@@ -65,9 +60,7 @@ if ($entries) {
                 continue;
             }
         }
-        if (!$popup) {
-            $entries[$key]->footer = "<p style=\"text-align:right\">&raquo;&nbsp;<a href=\"$CFG->wwwroot/mod/glossary/view.php?g=$entry->glossaryid\">".format_string($entry->glossaryname,true)."</a></p>";
-        }
+        $entries[$key]->footer = "<p style=\"text-align:right\">&raquo;&nbsp;<a href=\"$CFG->wwwroot/mod/glossary/view.php?g=$entry->glossaryid\">".format_string($entry->glossaryname,true)."</a></p>";
         add_to_log($entry->courseid, 'glossary', 'view entry', "showentry.php?eid=$entry->id", $entry->id, $entry->cmid);
     }
 }
@@ -89,9 +82,5 @@ if ($entries) {
     glossary_print_dynaentry($courseid, $entries, $displayformat);
 }
 
-if ($popup) {
-    echo $OUTPUT->close_window_button();
-}
-
 /// Show one reduced footer
 echo $OUTPUT->footer();
\ No newline at end of file
index 250d937..8c2241d 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$module->version   = 2011112900;       // The current module version (Date: YYYYMMDDXX)
+$module->version   = 2012010400;       // The current module version (Date: YYYYMMDDXX)
 $module->requires  = 2011112900;       // Requires this Moodle version
 $module->component = 'mod_glossary';   // Full name of the plugin (used for diagnostics)
 $module->cron      = 0;
index fe16b5e..b57cec6 100644 (file)
@@ -173,6 +173,11 @@ break;
 
 case 'approval':    /// Looking for entries waiting for approval
     $tab = GLOSSARY_APPROVAL_VIEW;
+    // Override the display format with the approvaldisplayformat
+    if ($glossary->approvaldisplayformat !== 'default' && ($df = $DB->get_record("glossary_formats",
+            array("name" => $glossary->approvaldisplayformat)))) {
+        $displayformat = $df->popupformatname;
+    }
     if ( !$hook and !$sortkey and !$sortorder) {
         $hook = 'ALL';
     }
index 00dc383..0ef7320 100644 (file)
@@ -30,6 +30,9 @@
  * Structure step to restore one lesson activity
  */
 class restore_lesson_activity_structure_step extends restore_activity_structure_step {
+    // Store the answers as they're received but only process them at the
+    // end of the lesson
+    protected $answers = array();
 
     protected function define_structure() {
 
@@ -94,15 +97,15 @@ class restore_lesson_activity_structure_step extends restore_activity_structure_
         global $DB;
 
         $data = (object)$data;
-        $oldid = $data->id;
         $data->lessonid = $this->get_new_parentid('lesson');
         $data->pageid = $this->get_new_parentid('lesson_page');
         $data->answer = $data->answer_text;
         $data->timemodified = $this->apply_date_offset($data->timemodified);
         $data->timecreated = $this->apply_date_offset($data->timecreated);
 
-        $newitemid = $DB->insert_record('lesson_answers', $data);
-        $this->set_mapping('lesson_answer', $oldid, $newitemid);
+        // Answers need to be processed in order, so we store them in an
+        // instance variable and insert them in the after_execute stage
+        $this->answers[$data->id] = $data;
     }
 
     protected function process_lesson_attempt($data) {
@@ -173,6 +176,13 @@ class restore_lesson_activity_structure_step extends restore_activity_structure_
     protected function after_execute() {
         global $DB;
 
+        // Answers must be sorted by id to ensure that they're shown correctly
+        ksort($this->answers);
+        foreach ($this->answers as $answer) {
+            $newitemid = $DB->insert_record('lesson_answers', $answer);
+            $this->set_mapping('lesson_answer', $answer->id, $newitemid);
+        }
+
         // Add lesson mediafile, no need to match by itemname (just internally handled context)
         $this->add_related_files('mod_lesson', 'mediafile', null);
         // Add lesson page files, by lesson_page itemname
index 6ca0738..4781fbc 100644 (file)
@@ -659,7 +659,9 @@ function lesson_process_post_save(&$lesson) {
         if ($lesson->available) {
             $event->name = $lesson->name.' ('.get_string('lessonopens', 'lesson').')';
             calendar_event::create(clone($event));
-        } else if ($lesson->deadline) {
+        }
+
+        if ($lesson->deadline) {
             $event->name      = $lesson->name.' ('.get_string('lessoncloses', 'lesson').')';
             $event->timestart = $lesson->deadline;
             $event->eventtype = 'close';
index b84547a..4cf8e10 100644 (file)
@@ -70,11 +70,11 @@ function toggleLog () {
     if (getLoggingActive() == "A") {
         AppendToLog("Moodle Logging Deactivated", 0);
         setLoggingActive('N');
-        logButton.innerHTML = '--><?php print_string('scormloggingoff', 'scorm') ?>';
+        logButton.innerHTML = '--><?php echo addslashes_js(get_string('scormloggingoff', 'scorm')); ?>';
     } else {
         setLoggingActive('A');
         AppendToLog("Moodle Logging Activated", 0);
-        logButton.innerHTML = '<?php print_string('scormloggingon', 'scorm') ?>';
+        logButton.innerHTML = '<?php echo addslashes_js(get_string('scormloggingon', 'scorm')); ?>';
         logPopUpWindow.focus();
     }
 }
@@ -747,9 +747,9 @@ logButton.id = 'mod-scorm-log-toggle';
 logButton.name = 'logToggle';
 logButton.href = 'javascript:toggleLog();';
 if (getLoggingActive() == "A") {
-    logButton.innerHTML = '<?php print_string('scormloggingon', 'scorm') ?>';
+    logButton.innerHTML = '<?php echo addslashes_js(get_string('scormloggingon', 'scorm')); ?>';
 } else {
-    logButton.innerHTML = '<?php print_string('scormloggingoff', 'scorm') ?>';
+    logButton.innerHTML = '<?php echo addslashes_js(get_string('scormloggingoff', 'scorm')); ?>';
 }
 var content = safeGetElement(document, 'scormpage');
 content.insertBefore(logButton, content.firstChild);
diff --git a/mod/scorm/datamodels/scorm_datamodels.js b/mod/scorm/datamodels/scorm_datamodels.js
deleted file mode 100644 (file)
index c199f8c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-function expandCollide(which,list,item) {
-    var el = document.ids ? document.ids[list] : document.getElementById ? document.getElementById(list) : document.all[list];
-    which = which.substring(0,(which.length));
-    var el2 = document.ids ? document.ids[which] : document.getElementById ? document.getElementById(which) : document.all[which];
-    if (el.style.display != "none") {
-        el2.src = scormdata.plusicon;
-        el.style.display='none';
-        new cookie("hide:SCORMitem" + item, 1, 356, "/").set();
-    } else {
-        el2.src = scormdata.minusicon;
-        el.style.display='block';
-        new cookie("hide:SCORMitem" + item, 1, -1, "/").set();
-    }
-}
\ No newline at end of file
index 00f9205..b5ad5d5 100644 (file)
@@ -210,7 +210,6 @@ $string['notattempted'] = 'Not attempted';
 $string['not_corr_type'] = 'Type mismatch for tag {$a->tag}';
 $string['notopenyet'] = 'Sorry, this activity is not available until {$a}';
 $string['objectives'] = 'Objectives';
-$string['onchanges'] = 'Whenever it changes';
 $string['optallstudents'] = 'all users';
 $string['optattemptsonly'] = 'users with attempts only';
 $string['optnoattemptsonly'] = 'users with no attempts only';
@@ -310,6 +309,7 @@ $string['typelocal'] = 'Uploaded package';
 $string['typelocalsync'] = 'Downloaded package';
 $string['unziperror'] = 'An error occurs during package unzip';
 $string['updatefreq'] = 'Auto-update frequency';
+$string['updatefreq_help'] = 'This allows the external package to be automatically downloaded and updated';
 $string['updatefreqdesc'] = 'This preference sets the default auto-update frequency of an activity';
 $string['validateascorm'] = 'Validate a package';
 $string['validation'] = 'Validation result';
index 6074888..e239096 100644 (file)
@@ -502,7 +502,7 @@ function scorm_cron () {
 
         mtrace('Updating scorm packages which require daily update');//We are updating
 
-        $scormsupdate = $DB->get_records('scorm', array('updatefreq'=>UPDATE_EVERYDAY));
+        $scormsupdate = $DB->get_records_select('scorm', 'updatefreq = ? AND scormtype <> ?', array(SCORM_UPDATE_EVERYDAY, SCORM_TYPE_LOCAL));
         foreach ($scormsupdate as $scormupdate) {
             scorm_parse($scormupdate, true);
         }
index 613266d..be0bede 100644 (file)
@@ -18,10 +18,9 @@ require_once("$CFG->dirroot/mod/scorm/lib.php");
 require_once("$CFG->libdir/filelib.php");
 
 /// Constants and settings for module scorm
-define('UPDATE_NEVER', '0');
-define('UPDATE_ONCHANGE', '1');
-define('UPDATE_EVERYDAY', '2');
-define('UPDATE_EVERYTIME', '3');
+define('SCORM_UPDATE_NEVER', '0');
+define('SCORM_UPDATE_EVERYDAY', '2');
+define('SCORM_UPDATE_EVERYTIME', '3');
 
 define('SCO_ALL', 0);
 define('SCO_DATA', 1);
@@ -133,10 +132,9 @@ function scorm_get_hidetoc_array() {
  * @return array an array of update frequency options
  */
 function scorm_get_updatefreq_array() {
-    return array(0 => get_string('never'),
-                 1 => get_string('onchanges', 'scorm'),
-                 2 => get_string('everyday', 'scorm'),
-                 3 => get_string('everytime', 'scorm'));
+    return array(SCORM_UPDATE_NEVER => get_string('never'),
+                 SCORM_UPDATE_EVERYDAY => get_string('everyday', 'scorm'),
+                 SCORM_UPDATE_EVERYTIME => get_string('everytime', 'scorm'));
 }
 
 /**
@@ -729,7 +727,7 @@ function scorm_course_format_display($user, $course) {
 function scorm_view_display ($user, $scorm, $action, $cm) {
     global $CFG, $DB, $PAGE, $OUTPUT;
 
-    if ($scorm->updatefreq == UPDATE_EVERYTIME) {
+    if ($scorm->scormtype != SCORM_TYPE_LOCAL && $scorm->updatefreq == SCORM_UPDATE_EVERYTIME) {
         scorm_parse($scorm, false);
     }
 
@@ -823,7 +821,7 @@ function scorm_simple_play($scorm, $user, $context, $cmid) {
 
     $result = false;
 
-    if ($scorm->updatefreq == UPDATE_EVERYTIME) {
+    if ($scorm->scormtype != SCORM_TYPE_LOCAL && $scorm->updatefreq == SCORM_UPDATE_EVERYTIME) {
         scorm_parse($scorm, false);
     }
     if (has_capability('mod/scorm:viewreport', $context)) { //if this user can view reports, don't skipview so they can see links to reports.
@@ -1507,15 +1505,6 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
         $result->toc .= '<div id="scorm_navpanel"></div>';
     }
 
-
-    if ($scorm->hidetoc == 0) {
-        $PAGE->requires->data_for_js('scormdata', array(
-                'plusicon' => $OUTPUT->pix_url('plus', 'scorm'),
-                'minusicon' => $OUTPUT->pix_url('minus', 'scorm')));
-        $PAGE->requires->js('/lib/cookies.js');
-        $PAGE->requires->js('/mod/scorm/datamodels/scorm_datamodels.js');
-    }
-
     $url = new moodle_url('/mod/scorm/player.php?a='.$scorm->id.'&currentorg='.$currentorg.$modestr);
     $result->tocmenu = $OUTPUT->single_select($url, 'scoid', $tocmenus, $sco->id, null, "tocmenu");
 
index 088634c..247b321 100644 (file)
@@ -48,27 +48,27 @@ class mod_scorm_mod_form extends moodleform_mod {
         $this->add_intro_editor(true);
 
         // Scorm types
-        $options = array(SCORM_TYPE_LOCAL => get_string('typelocal', 'scorm'));
+        $scormtypes = array(SCORM_TYPE_LOCAL => get_string('typelocal', 'scorm'));
 
         if ($cfg_scorm->allowtypeexternal) {
-            $options[SCORM_TYPE_EXTERNAL] = get_string('typeexternal', 'scorm');
+            $scormtypes[SCORM_TYPE_EXTERNAL] = get_string('typeexternal', 'scorm');
         }
 
         if ($cfg_scorm->allowtypelocalsync) {
-            $options[SCORM_TYPE_LOCALSYNC] = get_string('typelocalsync', 'scorm');
+            $scormtypes[SCORM_TYPE_LOCALSYNC] = get_string('typelocalsync', 'scorm');
         }
 
         if (!empty($CFG->repositoryactivate) and $cfg_scorm->allowtypeimsrepository) {
-            $options[SCORM_TYPE_IMSREPOSITORY] = get_string('typeimsrepository', 'scorm');
+            $scormtypes[SCORM_TYPE_IMSREPOSITORY] = get_string('typeimsrepository', 'scorm');
         }
 
         if ($cfg_scorm->allowtypeexternalaicc) {
-            $options[SCORM_TYPE_AICCURL] = get_string('typeaiccurl', 'scorm');
+            $scormtypes[SCORM_TYPE_AICCURL] = get_string('typeaiccurl', 'scorm');
         }
 
         // Reference
-        if (count($options) > 1) {
-            $mform->addElement('select', 'scormtype', get_string('scormtype', 'scorm'), $options);
+        if (count($scormtypes) > 1) {
+            $mform->addElement('select', 'scormtype', get_string('scormtype', 'scorm'), $scormtypes);
             $mform->addHelpButton('scormtype', 'scormtype', 'scorm');
             $mform->addElement('text', 'packageurl', get_string('packageurl', 'scorm'), array('size'=>60));
             $mform->setType('packageurl', PARAM_RAW);
@@ -237,11 +237,16 @@ class mod_scorm_mod_form extends moodleform_mod {
         $mform->setDefault('auto', $cfg_scorm->auto);
         $mform->setAdvanced('auto', $cfg_scorm->auto_adv);
 
-        // Update packages timing
-        $mform->addElement('select', 'updatefreq', get_string('updatefreq', 'scorm'), scorm_get_updatefreq_array());
-        $mform->setDefault('updatefreq', $cfg_scorm->updatefreq);
-        $mform->setAdvanced('updatefreq', $cfg_scorm->updatefreq_adv);
-
+        if (count($scormtypes) > 1) {
+            // Update packages timing
+            $mform->addElement('select', 'updatefreq', get_string('updatefreq', 'scorm'), scorm_get_updatefreq_array());
+            $mform->setDefault('updatefreq', $cfg_scorm->updatefreq);
+            $mform->setAdvanced('updatefreq', $cfg_scorm->updatefreq_adv);
+            $mform->addHelpButton('updatefreq', 'updatefreq', 'scorm');
+            $mform->disabledIf('updatefreq', 'scormtype', 'eq', SCORM_TYPE_LOCAL);
+        } else {
+            $mform->addElement('hidden', 'updatefreq', 0);
+        }
         //-------------------------------------------------------------------------------
         // Hidden Settings
         $mform->addElement('hidden', 'datadir', null);
index de48e11..c7f11cb 100644 (file)
@@ -196,10 +196,10 @@ M.mod_scorm.init = function(Y, hide_nav, hide_toc, toc_title, window_name, launc
 
             var left = scorm_layout_widget.getUnitByPosition('left');
             var maxwidth = parseInt(YAHOO.util.Dom.getStyle('scorm_layout', 'width'));
-            left.set('maxWidth', (maxwidth - 10));
+            left.set('maxWidth', (maxwidth - 50));
             var cwidth = left.get('width');
-            if (cwidth > (maxwidth - 10)) {
-                left.set('width', (maxwidth - 10));
+            if (cwidth > (maxwidth - 1)) {
+                left.set('width', (maxwidth - 50));
             }
 
             scorm_layout_widget.setStyle('height', '100%');
@@ -207,7 +207,7 @@ M.mod_scorm.init = function(Y, hide_nav, hide_toc, toc_title, window_name, launc
             center.setStyle('height', '100%');
 
             // calculate the rough new height
-            newheight = YAHOO.util.Dom.getViewportHeight() *.82;
+            newheight = YAHOO.util.Dom.getViewportHeight() -5;
             if (newheight < 600) {
                 newheight = 600;
             }
@@ -247,7 +247,7 @@ M.mod_scorm.init = function(Y, hide_nav, hide_toc, toc_title, window_name, launc
                     }
                 }
                 else {
-                    obj.style.width = (content.offsetWidth - 6)+'px';
+                    obj.style.width = (content.offsetWidth)+'px';
                     obj.style.height = (content.offsetHeight - 10)+'px';
                 }
             }
index a201cd4..e201ea4 100644 (file)
@@ -138,7 +138,6 @@ class scorm_basic_report extends scorm_default_report {
                     if ($sco->launch!='') {
                         $columns[]= 'scograde'.$sco->id;
                         $headers[]= format_string($sco->title);
-                        $table->head[]= format_string($sco->title);
                     }
                 }
             } else {
index 930d835..99204d1 100644 (file)
@@ -150,7 +150,6 @@ class scorm_interactions_report extends scorm_default_report {
                 if ($sco->launch != '') {
                     $columns[] = 'scograde'.$sco->id;
                     $headers[] = format_string($sco->title,'',$formattextoptions);
-                    $table->head[]= format_string($sco->title,'',$formattextoptions);
                 }
             }
 
index 3298fa9..736afa5 100644 (file)
@@ -26,6 +26,7 @@
 #page-mod-scorm-player #altfinishlink {font-size: 140%;border: 0px; padding: 0px; }
 #page-mod-scorm-player #altpopuplink  {position: left; padding: 5px; border: 0px; }
 #page-mod-scorm-player #scormmode  {float: left; border: 0px; }
+#page-mod-scorm-player.pagelayout-popup #page-content .region-content {padding: 0px; }
 
 .path-mod-scorm.forcejavascript .scorm-center { display:none;}
 .path-mod-scorm.forcejavascript .toc { display:none;}
index 804ff3f..72d0a56 100644 (file)
@@ -311,7 +311,7 @@ M.core_filepicker.init = function(Y, options) {
             if (type=='error') {
                 header = M.str.moodle.error;
             }
-            this.msg_dlg.setHeader(type);
+            this.msg_dlg.setHeader(header);
             this.msg_dlg.show();
         },
         build_tree: function(node, level) {
index 2b9c990..16976c0 100644 (file)
  * then finds and calls a function in the relevant component to
  * actually check security and create the RSS stream
  *
- * @package   moodlecore
- * @copyright 1999 onwards Martin Dougiamas  http://moodle.com
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @package    core_rss
+ * @category   rss
+ * @copyright  1999 onwards Martin Dougiamas {@link http://moodle.com}
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
 
-// Disable moodle specific debug messages and any errors in output
-define('NO_DEBUG_DISPLAY', true);//comment this out to see any error messages during RSS generation
+/** NO_DEBUG_DISPLAY - bool, Disable moodle specific debug messages and any errors in output. Set to false to see any error messages during RSS generation */
+define('NO_DEBUG_DISPLAY', true);
 
-// Sessions not used here, we recreate $USER every time we are called
+/** NO_MOODLE_COOKIES - bool, Disable the use of sessions/cookies - we recreate $USER for every call. */
 define('NO_MOODLE_COOKIES', true);
 
 require_once('../config.php');
@@ -178,8 +179,16 @@ if (empty($pathname) || !file_exists($pathname)) {
 send_file($pathname, 'rss.xml', 3600);   // Cached by browsers for 1 hour
 
 
-/*
- * Sends an error formatted as an rss file and then dies
+/**
+ * Sends an error formatted as an rss file and then exits
+ *
+ * @package core_rss
+ * @category rss
+ *
+ * @param string $error the error type, default is rsserror
+ * @param string $filename the name of the file to create (NOT USED)
+ * @param int $lifetime UNSURE (NOT USED)
+ * @uses exit
  */
 function rss_error($error='rsserror', $filename='rss.xml', $lifetime=0) {
     send_file(rss_geterrorxmlfile($error), $filename, $lifetime, false, true);
index 862bec3..3d7040c 100644 (file)
 
 /**
  * Web service documentation renderer.
- * @package   rss
- * @copyright 2010 Moodle Pty Ltd (http://moodle.com)
- * @author    Andrew Davis
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @package    core_rss
+ * @category   rss
+ * @copyright  2010 Andrew Davis
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+/**
+ * Web service documentation renderer extending the plugin_renderer_base class.
+ * @package    core_rss
+ * @category   rss
+ * @copyright  2010 Andrew Davis
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 class core_rss_renderer extends plugin_renderer_base {
     /**
-     *  Returns the html for the token reset confirmation box
-     * @param object $token to reset
+     * Returns the html for the token reset confirmation box
      * @return string html
      */
     public function user_reset_rss_token_confirmation() {
@@ -45,9 +51,8 @@ class core_rss_renderer extends plugin_renderer_base {
     }
 
     /**
-     * Display user tokens with buttons to reset them
-     * @param object $tokens
-     * @param int $userid
+     * Display a user token with buttons to reset it
+     * @param string $token The token to be displayed
      * @return string html code
      */
     public function user_rss_token_box($token) {
index 59d1d9b..c6cbbef 100644 (file)
@@ -30,7 +30,7 @@
 defined('MOODLE_INTERNAL') || die();
 
 
-$version  = 2012021700.00;              // YYYYMMDD      = weekly release date of this DEV branch
+$version  = 2012021700.01;              // YYYYMMDD      = weekly release date of this DEV branch
                                         //         RR    = release increments - 00 in DEV branches
                                         //           .XX = incremental changes
 
index ecb6a9b..bc8ece9 100644 (file)
@@ -1209,24 +1209,28 @@ class '.$classname.' {
     }
 
     /**
-     * This method parses the $_REQUEST superglobal and looks for
+     * This method parses the $_POST and $_GET superglobals and looks for
      * the following information:
      *  1/ user authentication - username+password or token (wsusername, wspassword and wstoken parameters)
      *
      * @return void
      */
     protected function parse_request() {
+
+        //Get GET and POST paramters
+        $methodvariables = array_merge($_GET,$_POST);
+
         if ($this->authmethod == WEBSERVICE_AUTHMETHOD_USERNAME) {
             //note: some clients have problems with entity encoding :-(
-            if (isset($_REQUEST['wsusername'])) {
-                $this->username = $_REQUEST['wsusername'];
+            if (isset($methodvariables['wsusername'])) {
+                $this->username = $methodvariables['wsusername'];
             }
-            if (isset($_REQUEST['wspassword'])) {
-                $this->password = $_REQUEST['wspassword'];
+            if (isset($methodvariables['wspassword'])) {
+                $this->password = $methodvariables['wspassword'];
             }
         } else {
-            if (isset($_REQUEST['wstoken'])) {
-                $this->token = $_REQUEST['wstoken'];
+            if (isset($methodvariables['wstoken'])) {
+                $this->token = $methodvariables['wstoken'];
             }
         }
     }
index 2c75799..075f6b6 100644 (file)
@@ -44,7 +44,7 @@ class webservice_rest_server extends webservice_base_server {
     }
 
     /**
-     * This method parses the $_REQUEST superglobal and looks for
+     * This method parses the $_POST and $_GET superglobals and looks for
      * the following information:
      *  1/ user authentication - username+password or token (wsusername, wspassword and wstoken parameters)
      *  2/ function name (wsfunction parameter)
@@ -53,26 +53,30 @@ class webservice_rest_server extends webservice_base_server {
      * @return void
      */
     protected function parse_request() {
+
+        //Get GET and POST paramters
+        $methodvariables = array_merge($_GET,$_POST);
+
         if ($this->authmethod == WEBSERVICE_AUTHMETHOD_USERNAME) {
-            $this->username = isset($_REQUEST['wsusername']) ? $_REQUEST['wsusername'] : null;
-            unset($_REQUEST['wsusername']);
+            $this->username = isset($methodvariables['wsusername']) ? $methodvariables['wsusername'] : null;
+            unset($methodvariables['wsusername']);
 
-            $this->password = isset($_REQUEST['wspassword']) ? $_REQUEST['wspassword'] : null;
-            unset($_REQUEST['wspassword']);
+            $this->password = isset($methodvariables['wspassword']) ? $methodvariables['wspassword'] : null;
+            unset($methodvariables['wspassword']);
 
-            $this->functionname = isset($_REQUEST['wsfunction']) ? $_REQUEST['wsfunction'] : null;
-            unset($_REQUEST['wsfunction']);
+            $this->functionname = isset($methodvariables['wsfunction']) ? $methodvariables['wsfunction'] : null;
+            unset($methodvariables['wsfunction']);
 
-            $this->parameters = $_REQUEST;
+            $this->parameters = $methodvariables;
 
         } else {
-            $this->token = isset($_REQUEST['wstoken']) ? $_REQUEST['wstoken'] : null;
-            unset($_REQUEST['wstoken']);
+            $this->token = isset($methodvariables['wstoken']) ? $methodvariables['wstoken'] : null;
+            unset($methodvariables['wstoken']);
 
-            $this->functionname = isset($_REQUEST['wsfunction']) ? $_REQUEST['wsfunction'] : null;
-            unset($_REQUEST['wsfunction']);
+            $this->functionname = isset($methodvariables['wsfunction']) ? $methodvariables['wsfunction'] : null;
+            unset($methodvariables['wsfunction']);
 
-            $this->parameters = $_REQUEST;
+            $this->parameters = $methodvariables;
         }
     }
 
index d89e0c1..ec97e05 100644 (file)
@@ -36,9 +36,6 @@ if (!webservice_protocol_is_enabled('rest')) {
 
 $restformat = optional_param('moodlewsrestformat', 'xml', PARAM_ALPHA);
 //remove the alt from the request
-if(isset($_REQUEST['moodlewsrestformat'])) {
-    unset($_REQUEST['moodlewsrestformat']);
-}
 if(isset($_GET['moodlewsrestformat'])) {
     unset($_GET['moodlewsrestformat']);
 }
index fd49087..bcc8ecb 100644 (file)
@@ -125,7 +125,7 @@ class webservice_soap_server extends webservice_zend_server {
     }
 
     /**
-     * This method parses the $_REQUEST superglobal and looks for
+     * This method parses the $_POST and $_GET superglobals and looks for
      * the following information:
      *  1/ user authentication - username+password or token (wsusername, wspassword and wstoken parameters)
      *