Merge branch 'wip-MDL-51132-master' of https://github.com/marinaglancy/moodle
authorDan Poltawski <dan@moodle.com>
Tue, 8 Sep 2015 09:46:38 +0000 (10:46 +0100)
committerDan Poltawski <dan@moodle.com>
Tue, 8 Sep 2015 09:46:38 +0000 (10:46 +0100)
1  2 
lib/db/upgrade.php
lib/deprecatedlib.php
lib/moodlelib.php
version.php

@@@ -4530,5 -4530,33 +4530,33 @@@ function xmldb_main_upgrade($oldversion
          upgrade_main_savepoint(true, 2015090200.00);
      }
  
 -    if ($oldversion < 2015090301.00) {
++    if ($oldversion < 2015090801.00) {
+         // This upgrade script merges all tag instances pointing to the same course tag.
+         // User id is no longer used for those tag instances.
+         upgrade_course_tags();
+         // If configuration variable "Show course tags" is set, disable the block
+         // 'tags' because it can not be used for tagging courses any more.
+         if (!empty($CFG->block_tags_showcoursetags)) {
+             if ($record = $DB->get_record('block', array('name' => 'tags'), 'id, visible')) {
+                 if ($record->visible) {
+                     $DB->update_record('block', array('id' => $record->id, 'visible' => 0));
+                 }
+             }
+         }
+         // Define index idname (unique) to be dropped form tag (it's really weird).
+         $table = new xmldb_table('tag');
+         $index = new xmldb_index('idname', XMLDB_INDEX_UNIQUE, array('id', 'name'));
+         // Conditionally launch drop index idname.
+         if ($dbman->index_exists($table, $index)) {
+             $dbman->drop_index($table, $index);
+         }
+         // Main savepoint reached.
 -        upgrade_main_savepoint(true, 2015090301.00);
++        upgrade_main_savepoint(true, 2015090801.00);
+     }
      return true;
  }
@@@ -2399,23 -2399,306 +2399,327 @@@ function is_web_crawler() 
      return core_useragent::is_crawler();
  }
  
 +/**
 + * Update user's course completion statuses
 + *
 + * First update all criteria completions, then aggregate all criteria completions
 + * and update overall course completions.
 + *
 + * @deprecated since Moodle 3.0 MDL-50287 - please do not use this function any more.
 + * @todo Remove this function in Moodle 3.2 MDL-51226.
 + */
 +function completion_cron() {
 +    global $CFG;
 +    require_once($CFG->dirroot.'/completion/cron.php');
 +
 +    debugging('completion_cron() is deprecated. Functionality has been moved to scheduled tasks.', DEBUG_DEVELOPER);
 +    completion_cron_mark_started();
 +
 +    completion_cron_criteria();
 +
 +    completion_cron_completions();
 +}
++
+ /**
+  * Returns an ordered array of tags associated with visible courses
+  * (boosted replacement of get_all_tags() allowing association with user and tagtype).
+  *
+  * @deprecated since 3.0
+  * @package  core_tag
+  * @category tag
+  * @param    int      $courseid A course id. Passing 0 will return all distinct tags for all visible courses
+  * @param    int      $userid   (optional) the user id, a default of 0 will return all users tags for the course
+  * @param    string   $tagtype  (optional) The type of tag, empty string returns all types. Currently (Moodle 2.2) there are two
+  *                              types of tags which are used within Moodle, they are 'official' and 'default'.
+  * @param    int      $numtags  (optional) number of tags to display, default of 80 is set in the block, 0 returns all
+  * @param    string   $unused   (optional) was selected sorting, moved to tag_print_cloud()
+  * @return   array
+  */
+ function coursetag_get_tags($courseid, $userid=0, $tagtype='', $numtags=0, $unused = '') {
+     debugging('Function coursetag_get_tags() is deprecated. Userid is no longer used for tagging courses.', DEBUG_DEVELOPER);
+     global $CFG, $DB;
+     // get visible course ids
+     $courselist = array();
+     if ($courseid === 0) {
+         if ($courses = $DB->get_records_select('course', 'visible=1 AND category>0', null, '', 'id')) {
+             foreach ($courses as $key => $value) {
+                 $courselist[] = $key;
+             }
+         }
+     }
+     // get tags from the db ordered by highest count first
+     $params = array();
+     $sql = "SELECT id as tkey, name, id, tagtype, rawname, f.timemodified, flag, count
+               FROM {tag} t,
+                  (SELECT tagid, MAX(timemodified) as timemodified, COUNT(id) as count
+                     FROM {tag_instance}
+                    WHERE itemtype = 'course' ";
+     if ($courseid > 0) {
+         $sql .= "    AND itemid = :courseid ";
+         $params['courseid'] = $courseid;
+     } else {
+         if (!empty($courselist)) {
+             list($usql, $uparams) = $DB->get_in_or_equal($courselist, SQL_PARAMS_NAMED);
+             $sql .= "AND itemid $usql ";
+             $params = $params + $uparams;
+         }
+     }
+     if ($userid > 0) {
+         $sql .= "    AND tiuserid = :userid ";
+         $params['userid'] = $userid;
+     }
+     $sql .= "   GROUP BY tagid) f
+              WHERE t.id = f.tagid ";
+     if ($tagtype != '') {
+         $sql .= "AND tagtype = :tagtype ";
+         $params['tagtype'] = $tagtype;
+     }
+     $sql .= "ORDER BY count DESC, name ASC";
+     // limit the number of tags for output
+     if ($numtags == 0) {
+         $tags = $DB->get_records_sql($sql, $params);
+     } else {
+         $tags = $DB->get_records_sql($sql, $params, 0, $numtags);
+     }
+     // prepare the return
+     $return = array();
+     if ($tags) {
+         // avoid print_tag_cloud()'s ksort upsetting ordering by setting the key here
+         foreach ($tags as $value) {
+             $return[] = $value;
+         }
+     }
+     return $return;
+ }
+ /**
+  * Returns an ordered array of tags
+  * (replaces popular_tags_count() allowing sorting).
+  *
+  * @deprecated since 3.0
+  * @package  core_tag
+  * @category tag
+  * @param    string $unused (optional) was selected sorting - moved to tag_print_cloud()
+  * @param    int    $numtags (optional) number of tags to display, default of 20 is set in the block, 0 returns all
+  * @return   array
+  */
+ function coursetag_get_all_tags($unused='', $numtags=0) {
+     debugging('Function coursetag_get_all_tag() is deprecated. Userid is no longer used for tagging courses.', DEBUG_DEVELOPER);
+     global $CFG, $DB;
+     // note that this selects all tags except for courses that are not visible
+     $sql = "SELECT id, name, tagtype, rawname, f.timemodified, flag, count
+         FROM {tag} t,
+         (SELECT tagid, MAX(timemodified) as timemodified, COUNT(id) as count
+             FROM {tag_instance} WHERE tagid NOT IN
+                 (SELECT tagid FROM {tag_instance} ti, {course} c
+                 WHERE c.visible = 0
+                 AND ti.itemtype = 'course'
+                 AND ti.itemid = c.id)
+         GROUP BY tagid) f
+         WHERE t.id = f.tagid
+         ORDER BY count DESC, name ASC";
+     if ($numtags == 0) {
+         $tags = $DB->get_records_sql($sql);
+     } else {
+         $tags = $DB->get_records_sql($sql, null, 0, $numtags);
+     }
+     $return = array();
+     if ($tags) {
+         foreach ($tags as $value) {
+             $return[] = $value;
+         }
+     }
+     return $return;
+ }
+ /**
+  * Returns javascript for use in tags block and supporting pages
+  *
+  * @deprecated since 3.0
+  * @package  core_tag
+  * @category tag
+  * @return   null
+  */
+ function coursetag_get_jscript() {
+     debugging('Function coursetag_get_jscript() is deprecated and obsolete.', DEBUG_DEVELOPER);
+     return '';
+ }
+ /**
+  * Returns javascript to create the links in the tag block footer.
+  *
+  * @deprecated since 3.0
+  * @package  core_tag
+  * @category tag
+  * @param    string   $elementid       the element to attach the footer to
+  * @param    array    $coursetagslinks links arrays each consisting of 'title', 'onclick' and 'text' elements
+  * @return   string   always returns a blank string
+  */
+ function coursetag_get_jscript_links($elementid, $coursetagslinks) {
+     debugging('Function coursetag_get_jscript_links() is deprecated and obsolete.', DEBUG_DEVELOPER);
+     return '';
+ }
+ /**
+  * Returns all tags created by a user for a course
+  *
+  * @deprecated since 3.0
+  * @package  core_tag
+  * @category tag
+  * @param    int      $courseid tags are returned for the course that has this courseid
+  * @param    int      $userid   return tags which were created by this user
+  */
+ function coursetag_get_records($courseid, $userid) {
+     debugging('Function coursetag_get_records() is deprecated. Userid is no longer used for tagging courses.', DEBUG_DEVELOPER);
+     global $CFG, $DB;
+     $sql = "SELECT t.id, name, rawname
+               FROM {tag} t, {tag_instance} ti
+              WHERE t.id = ti.tagid
+                  AND ti.tiuserid = :userid
+                  AND ti.itemid = :courseid
+           ORDER BY name ASC";
+     return $DB->get_records_sql($sql, array('userid'=>$userid, 'courseid'=>$courseid));
+ }
+ /**
+  * Stores a tag for a course for a user
+  *
+  * @deprecated since 3.0
+  * @package  core_tag
+  * @category tag
+  * @param    array  $tags     simple array of keywords to be stored
+  * @param    int    $courseid the id of the course we wish to store a tag for
+  * @param    int    $userid   the id of the user we wish to store a tag for
+  * @param    string $tagtype  official or default only
+  * @param    string $myurl    (optional) for logging creation of course tags
+  */
+ function coursetag_store_keywords($tags, $courseid, $userid=0, $tagtype='official', $myurl='') {
+     debugging('Function coursetag_store_keywords() is deprecated. Userid is no longer used for tagging courses.', DEBUG_DEVELOPER);
+     global $CFG;
+     require_once $CFG->dirroot.'/tag/lib.php';
+     if (is_array($tags) and !empty($tags)) {
+         foreach ($tags as $tag) {
+             $tag = trim($tag);
+             if (strlen($tag) > 0) {
+                 //tag_set_add('course', $courseid, $tag, $userid); //deletes official tags
+                 //add tag if does not exist
+                 if (!$tagid = tag_get_id($tag)) {
+                     $tag_id_array = tag_add(array($tag), $tagtype);
+                     $tagid = $tag_id_array[core_text::strtolower($tag)];
+                 }
+                 //ordering
+                 $ordering = 0;
+                 if ($current_ids = tag_get_tags_ids('course', $courseid)) {
+                     end($current_ids);
+                     $ordering = key($current_ids) + 1;
+                 }
+                 //set type
+                 tag_type_set($tagid, $tagtype);
+                 //tag_instance entry
+                 tag_assign('course', $courseid, $tagid, $ordering, $userid, 'core', context_course::instance($courseid)->id);
+             }
+         }
+     }
+ }
+ /**
+  * Deletes a personal tag for a user for a course.
+  *
+  * @deprecated since 3.0
+  * @package  core_tag
+  * @category tag
+  * @param    int      $tagid    the tag we wish to delete
+  * @param    int      $userid   the user that the tag is associated with
+  * @param    int      $courseid the course that the tag is associated with
+  */
+ function coursetag_delete_keyword($tagid, $userid, $courseid) {
+     debugging('Function coursetag_delete_keyword() is deprecated. Userid is no longer used for tagging courses.', DEBUG_DEVELOPER);
+     tag_delete_instance('course', $courseid, $tagid, $userid);
+ }
+ /**
+  * Get courses tagged with a tag
+  *
+  * @deprecated since 3.0
+  * @package  core_tag
+  * @category tag
+  * @param int $tagid
+  * @return array of course objects
+  */
+ function coursetag_get_tagged_courses($tagid) {
+     debugging('Function coursetag_get_tagged_courses() is deprecated. Userid is no longer used for tagging courses.', DEBUG_DEVELOPER);
+     global $DB;
+     $courses = array();
+     $ctxselect = context_helper::get_preload_record_columns_sql('ctx');
+     $sql = "SELECT c.*, $ctxselect
+             FROM {course} c
+             JOIN {tag_instance} t ON t.itemid = c.id
+             JOIN {context} ctx ON ctx.instanceid = c.id
+             WHERE t.tagid = :tagid AND
+             t.itemtype = 'course' AND
+             ctx.contextlevel = :contextlevel
+             ORDER BY c.sortorder ASC";
+     $params = array('tagid' => $tagid, 'contextlevel' => CONTEXT_COURSE);
+     $rs = $DB->get_recordset_sql($sql, $params);
+     foreach ($rs as $course) {
+         context_helper::preload_from_record($course);
+         if ($course->visible == 1 || has_capability('moodle/course:viewhiddencourses', context_course::instance($course->id))) {
+             $courses[$course->id] = $course;
+         }
+     }
+     return $courses;
+ }
+ /**
+  * Course tagging function used only during the deletion of a course (called by lib/moodlelib.php) to clean up associated tags
+  *
+  * @package core_tag
+  * @deprecated since 3.0
+  * @param   int      $courseid     the course we wish to delete tag instances from
+  * @param   bool     $showfeedback if we should output a notification of the delete to the end user
+  */
+ function coursetag_delete_course_tags($courseid, $showfeedback=false) {
+     debugging('Function coursetag_delete_course_tags() is deprecated. Userid is no longer used for tagging courses.', DEBUG_DEVELOPER);
+     global $DB, $OUTPUT;
+     if ($taginstances = $DB->get_recordset_select('tag_instance', "itemtype = 'course' AND itemid = :courseid",
+         array('courseid' => $courseid), '', 'tagid, tiuserid')) {
+         foreach ($taginstances as $record) {
+             tag_delete_instance('course', $courseid, $record->tagid, $record->tiuserid);
+         }
+         $taginstances->close();
+     }
+     if ($showfeedback) {
+         echo $OUTPUT->notification(get_string('deletedcoursetags', 'tag'), 'notifysuccess');
+     }
+ }
Simple merge
diff --cc version.php
@@@ -29,7 -29,7 +29,7 @@@
  
  defined('MOODLE_INTERNAL') || die();
  
- $version  = 2015090800.00;              // YYYYMMDD      = weekly release date of this DEV branch.
 -$version  = 2015090301.00;              // YYYYMMDD      = weekly release date of this DEV branch.
++$version  = 2015090801.00;              // YYYYMMDD      = weekly release date of this DEV branch.
                                          //         RR    = release increments - 00 in DEV branches.
                                          //           .XX = incremental changes.