MDL-51883 libraries: 3.1 final deprecation in lib/deprecatedlib.php
authorMihail Geshoski <mihail@moodle.com>
Wed, 1 Aug 2018 02:32:37 +0000 (10:32 +0800)
committerMihail Geshoski <mihail@moodle.com>
Wed, 1 Aug 2018 02:32:37 +0000 (10:32 +0800)
lib/deprecatedlib.php
lib/upgrade.txt
tag/tests/events_test.php
tag/tests/taglib_test.php
tag/upgrade.txt

index daf12c4..cb2c2d0 100644 (file)
@@ -274,84 +274,56 @@ function get_context_instance($contextlevel, $instance = 0, $strictness = IGNORE
 /* === End of long term deprecated api list === */
 
 /**
- * Adds a file upload to the log table so that clam can resolve the filename to the user later if necessary
- *
  * @deprecated since 2.7 - use new file picker instead
- *
  */
-function clam_log_upload($newfilepath, $course=null, $nourl=false) {
+function clam_log_upload() {
     throw new coding_exception('clam_log_upload() can not be used any more, please use file picker instead');
 }
 
 /**
- * This function logs to error_log and to the log table that an infected file has been found and what's happened to it.
- *
  * @deprecated since 2.7 - use new file picker instead
- *
  */
-function clam_log_infected($oldfilepath='', $newfilepath='', $userid=0) {
+function clam_log_infected() {
     throw new coding_exception('clam_log_infected() can not be used any more, please use file picker instead');
 }
 
 /**
- * Some of the modules allow moving attachments (glossary), in which case we need to hunt down an original log and change the path.
- *
  * @deprecated since 2.7 - use new file picker instead
- *
  */
-function clam_change_log($oldpath, $newpath, $update=true) {
+function clam_change_log() {
     throw new coding_exception('clam_change_log() can not be used any more, please use file picker instead');
 }
 
 /**
- * Replaces the given file with a string.
- *
  * @deprecated since 2.7 - infected files are now deleted in file picker
- *
  */
-function clam_replace_infected_file($file) {
+function clam_replace_infected_file() {
     throw new coding_exception('clam_replace_infected_file() can not be used any more, please use file picker instead');
 }
 
 /**
- * Deals with an infected file - either moves it to a quarantinedir
- * (specified in CFG->quarantinedir) or deletes it.
- *
- * If moving it fails, it deletes it.
- *
  * @deprecated since 2.7
  */
-function clam_handle_infected_file($file, $userid=0, $basiconly=false) {
+function clam_handle_infected_file() {
     throw new coding_exception('clam_handle_infected_file() can not be used any more, please use file picker instead');
 }
 
 /**
- * If $CFG->runclamonupload is set, we scan a given file. (called from {@link preprocess_files()})
- *
  * @deprecated since 2.7
  */
-function clam_scan_moodle_file(&$file, $course) {
+function clam_scan_moodle_file() {
     throw new coding_exception('clam_scan_moodle_file() can not be used any more, please use file picker instead');
 }
 
 
 /**
- * Checks whether the password compatibility library will work with the current
- * version of PHP. This cannot be done using PHP version numbers since the fix
- * has been backported to earlier versions in some distributions.
- *
- * See https://github.com/ircmaxell/password_compat/issues/10 for more details.
- *
  * @deprecated since 2.7 PHP 5.4.x should be always compatible.
- *
  */
 function password_compat_not_supported() {
     throw new coding_exception('Do not use password_compat_not_supported() - bcrypt is now always available');
 }
 
 /**
- * Factory method that was returning moodle_session object.
- *
  * @deprecated since 2.6
  */
 function session_get_instance() {
@@ -359,8 +331,6 @@ function session_get_instance() {
 }
 
 /**
- * Returns true if legacy session used.
- *
  * @deprecated since 2.6
  */
 function session_is_legacy() {
@@ -368,8 +338,6 @@ function session_is_legacy() {
 }
 
 /**
- * Terminates all sessions, auth hooks are not executed.
- *
  * @deprecated since 2.6
  */
 function session_kill_all() {
@@ -377,45 +345,34 @@ function session_kill_all() {
 }
 
 /**
- * Mark session as accessed, prevents timeouts.
- *
  * @deprecated since 2.6
  */
-function session_touch($sid) {
+function session_touch() {
     throw new coding_exception('session_touch() is removed, use \core\session\manager::touch_session() instead');
 }
 
 /**
- * Terminates one sessions, auth hooks are not executed.
- *
  * @deprecated since 2.6
  */
-function session_kill($sid) {
+function session_kill() {
     throw new coding_exception('session_kill() is removed, use \core\session\manager::kill_session() instead');
 }
 
 /**
- * Terminates all sessions of one user, auth hooks are not executed.
- *
  * @deprecated since 2.6
  */
-function session_kill_user($userid) {
+function session_kill_user() {
     throw new coding_exception('session_kill_user() is removed, use \core\session\manager::kill_user_sessions() instead');
 }
 
 /**
- * Setup $USER object - called during login, loginas, etc.
- *
- * Call sync_user_enrolments() manually after log-in, or log-in-as.
- *
  * @deprecated since 2.6
  */
-function session_set_user($user) {
+function session_set_user() {
     throw new coding_exception('session_set_user() is removed, use \core\session\manager::set_user() instead');
 }
 
 /**
- * Is current $USER logged-in-as somebody else?
  * @deprecated since 2.6
  */
 function session_is_loggedinas() {
@@ -423,7 +380,6 @@ function session_is_loggedinas() {
 }
 
 /**
- * Returns the $USER object ignoring current login-as session
  * @deprecated since 2.6
  */
 function session_get_realuser() {
@@ -431,36 +387,29 @@ function session_get_realuser() {
 }
 
 /**
- * Login as another user - no security checks here.
  * @deprecated since 2.6
  */
-function session_loginas($userid, $context) {
+function session_loginas() {
     throw new coding_exception('session_loginas() is removed, use \core\session\manager::loginas() instead');
 }
 
 /**
- * Minify JavaScript files.
- *
  * @deprecated since 2.6
  */
-function js_minify($files) {
+function js_minify() {
     throw new coding_exception('js_minify() is removed, use core_minify::js_files() or core_minify::js() instead.');
 }
 
 /**
- * Minify CSS files.
- *
  * @deprecated since 2.6
  */
-function css_minify_css($files) {
+function css_minify_css() {
     throw new coding_exception('css_minify_css() is removed, use core_minify::css_files() or core_minify::css() instead.');
 }
 
 // === Deprecated before 2.6.0 ===
 
 /**
- * Hack to find out the GD version by parsing phpinfo output
- *
  * @deprecated
  */
 function check_gd_version() {
@@ -468,8 +417,6 @@ function check_gd_version() {
 }
 
 /**
- * Not used any more, the account lockout handling is now
- * part of authenticate_user_login().
  * @deprecated
  */
 function update_login_count() {
@@ -477,7 +424,6 @@ function update_login_count() {
 }
 
 /**
- * Not used any more, replaced by proper account lockout.
  * @deprecated
  */
 function reset_login_count() {
@@ -487,7 +433,7 @@ function reset_login_count() {
 /**
  * @deprecated
  */
-function update_log_display_entry($module, $action, $mtable, $field) {
+function update_log_display_entry() {
 
     throw new coding_exception('The update_log_display_entry() is removed, please use db/log.php description file instead.');
 }
@@ -496,7 +442,7 @@ function update_log_display_entry($module, $action, $mtable, $field) {
  * @deprecated use the text formatting in a standard way instead (http://docs.moodle.org/dev/Output_functions)
  *             this was abused mostly for embedding of attachments
  */
-function filter_text($text, $courseid = NULL) {
+function filter_text() {
     throw new coding_exception('filter_text() can not be used anymore, use format_text(), format_string() etc instead.');
 }
 
@@ -508,89 +454,40 @@ function httpsrequired() {
 }
 
 /**
- * Given a physical path to a file, returns the URL through which it can be reached in Moodle.
- *
  * @deprecated since 3.1 - replacement legacy file API methods can be found on the moodle_url class, for example:
  * The moodle_url::make_legacyfile_url() method can be used to generate a legacy course file url. To generate
  * course module file.php url the moodle_url::make_file_url() should be used.
- *
- * @param string $path Physical path to a file
- * @param array $options associative array of GET variables to append to the URL
- * @param string $type (questionfile|rssfile|httpscoursefile|coursefile)
- * @return string URL to file
  */
-function get_file_url($path, $options=null, $type='coursefile') {
-    debugging('Function get_file_url() is deprecated, please use moodle_url factory methods instead.', DEBUG_DEVELOPER);
-    global $CFG;
-
-    $path = str_replace('//', '/', $path);
-    $path = trim($path, '/'); // no leading and trailing slashes
-
-    // type of file
-    switch ($type) {
-       case 'questionfile':
-            $url = $CFG->wwwroot."/question/exportfile.php";
-            break;
-       case 'rssfile':
-            $url = $CFG->wwwroot."/rss/file.php";
-            break;
-         case 'coursefile':
-        default:
-            $url = $CFG->wwwroot."/file.php";
-    }
-
-    if ($CFG->slasharguments) {
-        $parts = explode('/', $path);
-        foreach ($parts as $key => $part) {
-        /// anchor dash character should not be encoded
-            $subparts = explode('#', $part);
-            $subparts = array_map('rawurlencode', $subparts);
-            $parts[$key] = implode('#', $subparts);
-        }
-        $path  = implode('/', $parts);
-        $ffurl = $url.'/'.$path;
-        $separator = '?';
-    } else {
-        $path = rawurlencode('/'.$path);
-        $ffurl = $url.'?file='.$path;
-        $separator = '&amp;';
-    }
-
-    if ($options) {
-        foreach ($options as $name=>$value) {
-            $ffurl = $ffurl.$separator.$name.'='.$value;
-            $separator = '&amp;';
-        }
-    }
-
-    return $ffurl;
+function get_file_url() {
+    throw new coding_exception('get_file_url() can not be used anymore. Please use ' .
+        'moodle_url factory methods instead.');
 }
 
 /**
  * @deprecated use get_enrolled_users($context) instead.
  */
-function get_course_participants($courseid) {
+function get_course_participants() {
     throw new coding_exception('get_course_participants() can not be used any more, use get_enrolled_users() instead.');
 }
 
 /**
  * @deprecated use is_enrolled($context, $userid) instead.
  */
-function is_course_participant($userid, $courseid) {
+function is_course_participant() {
     throw new coding_exception('is_course_participant() can not be used any more, use is_enrolled() instead.');
 }
 
 /**
  * @deprecated
  */
-function get_recent_enrolments($courseid, $timestart) {
+function get_recent_enrolments() {
     throw new coding_exception('get_recent_enrolments() is removed as it returned inaccurate results.');
 }
 
 /**
  * @deprecated use clean_param($string, PARAM_FILE) instead.
  */
-function detect_munged_arguments($string, $allowdots=1) {
+function detect_munged_arguments() {
     throw new coding_exception('detect_munged_arguments() can not be used any more, please use clean_param(,PARAM_FILE) instead.');
 }
 
@@ -744,35 +641,35 @@ function zip_files($originalfiles, $destination) {
 /**
  * @deprecated use groups_get_all_groups() instead.
  */
-function mygroupid($courseid) {
+function mygroupid() {
     throw new coding_exception('mygroupid() can not be used any more, please use groups_get_all_groups() instead.');
 }
 
 /**
  * @deprecated since Moodle 2.0 MDL-14617 - please do not use this function any more.
  */
-function groupmode($course, $cm=null) {
+function groupmode() {
     throw new coding_exception('groupmode() can not be used any more, please use groups_get_* instead.');
 }
 
 /**
  * @deprecated Since year 2006 - please do not use this function any more.
  */
-function set_current_group($courseid, $groupid) {
+function set_current_group() {
     throw new coding_exception('set_current_group() can not be used anymore, please use $SESSION->currentgroup[$courseid] instead');
 }
 
 /**
  * @deprecated Since year 2006 - please do not use this function any more.
  */
-function get_current_group($courseid, $full = false) {
+function get_current_group() {
     throw new coding_exception('get_current_group() can not be used any more, please use groups_get_* instead');
 }
 
 /**
  * @deprecated Since Moodle 2.8
  */
-function groups_filter_users_by_course_module_visible($cm, $users) {
+function groups_filter_users_by_course_module_visible() {
     throw new coding_exception('groups_filter_users_by_course_module_visible() is removed. ' .
             'Replace with a call to \core_availability\info_module::filter_user_list(), ' .
             'which does basically the same thing but includes other restrictions such ' .
@@ -782,7 +679,7 @@ function groups_filter_users_by_course_module_visible($cm, $users) {
 /**
  * @deprecated Since Moodle 2.8
  */
-function groups_course_module_visible($cm, $userid=null) {
+function groups_course_module_visible() {
     throw new coding_exception('groups_course_module_visible() is removed, use $cm->uservisible to decide whether the current
         user can ' . 'access an activity.', DEBUG_DEVELOPER);
 }
@@ -790,7 +687,7 @@ function groups_course_module_visible($cm, $userid=null) {
 /**
  * @deprecated since 2.0
  */
-function error($message, $link='') {
+function error() {
     throw new coding_exception('notlocalisederrormessage', 'error', $link, $message, 'error() is a removed, please call
             print_error() instead of error()');
 }
@@ -806,7 +703,7 @@ function current_theme() {
 /**
  * @deprecated
  */
-function formerr($error) {
+function formerr() {
     throw new coding_exception('formerr() is removed. Please change your code to use $OUTPUT->error_text($string).');
 }
 
@@ -820,21 +717,21 @@ function skip_main_destination() {
 /**
  * @deprecated use $OUTPUT->container() instead.
  */
-function print_container($message, $clearfix=false, $classes='', $idbase='', $return=false) {
+function print_container() {
     throw new coding_exception('print_container() can not be used any more. Please use $OUTPUT->container() instead.');
 }
 
 /**
  * @deprecated use $OUTPUT->container_start() instead.
  */
-function print_container_start($clearfix=false, $classes='', $idbase='', $return=false) {
+function print_container_start() {
     throw new coding_exception('print_container_start() can not be used any more. Please use $OUTPUT->container_start() instead.');
 }
 
 /**
  * @deprecated use $OUTPUT->container_end() instead.
  */
-function print_container_end($return=false) {
+function print_container_end() {
     throw new coding_exception('print_container_end() can not be used any more. Please use $OUTPUT->container_end() instead.');
 }
 
@@ -848,16 +745,14 @@ function notify() {
 /**
  * @deprecated use $OUTPUT->continue_button() instead.
  */
-function print_continue($link, $return = false) {
+function print_continue() {
     throw new coding_exception('print_continue() can not be used any more. Please use $OUTPUT->continue_button() instead.');
 }
 
 /**
  * @deprecated use $PAGE methods instead.
  */
-function print_header($title='', $heading='', $navigation='', $focus='',
-                      $meta='', $cache=true, $button='&nbsp;', $menu=null,
-                      $usexml=false, $bodytags='', $return=false) {
+function print_header() {
 
     throw new coding_exception('print_header() can not be used any more. Please use $PAGE methods instead.');
 }
@@ -865,8 +760,7 @@ function print_header($title='', $heading='', $navigation='', $focus='',
 /**
  * @deprecated use $PAGE methods instead.
  */
-function print_header_simple($title='', $heading='', $navigation='', $focus='', $meta='',
-                       $cache=true, $button='&nbsp;', $menu='', $usexml=false, $bodytags='', $return=false) {
+function print_header_simple() {
 
     throw new coding_exception('print_header_simple() can not be used any more. Please use $PAGE methods instead.');
 }
@@ -874,7 +768,7 @@ function print_header_simple($title='', $heading='', $navigation='', $focus='',
 /**
  * @deprecated use $OUTPUT->block() instead.
  */
-function print_side_block($heading='', $content='', $list=NULL, $icons=NULL, $footer='', $attributes = array(), $title='') {
+function print_side_block() {
     throw new coding_exception('print_side_block() can not be used any more, please use $OUTPUT->block() instead.');
 }
 
@@ -997,17 +891,14 @@ function print_arrow($direction='up', $strsort=null, $return=false) {
 /**
  * @deprecated since Moodle 2.0
  */
-function choose_from_menu ($options, $name, $selected='', $nothing='choose', $script='',
-                           $nothingvalue='0', $return=false, $disabled=false, $tabindex=0,
-                           $id='', $listbox=false, $multiple=false, $class='') {
+function choose_from_menu() {
     throw new coding_exception('choose_from_menu() is removed. Please change your code to use html_writer::select().');
-
 }
 
 /**
  * @deprecated use $OUTPUT->help_icon_scale($courseid, $scale) instead.
  */
-function print_scale_menu_helpbutton($courseid, $scale, $return=false) {
+function print_scale_menu_helpbutton() {
     throw new coding_exception('print_scale_menu_helpbutton() can not be used any more. '.
         'Please use $OUTPUT->help_icon_scale($courseid, $scale) instead.');
 }
@@ -1015,7 +906,7 @@ function print_scale_menu_helpbutton($courseid, $scale, $return=false) {
 /**
  * @deprecated use html_writer::checkbox() instead.
  */
-function print_checkbox($name, $value, $checked = true, $label = '', $alt = '', $script='', $return=false) {
+function print_checkbox() {
     throw new coding_exception('print_checkbox() can not be used any more. Please use html_writer::checkbox() instead.');
 }
 
@@ -1049,21 +940,21 @@ function update_module_button($cmid, $ignored, $string) {
 /**
  * @deprecated use $OUTPUT->navbar() instead
  */
-function print_navigation ($navigation, $separator=0, $return=false) {
+function print_navigation () {
     throw new coding_exception('print_navigation() can not be used any more, please update use $OUTPUT->navbar() instead.');
 }
 
 /**
  * @deprecated Please use $PAGE->navabar methods instead.
  */
-function build_navigation($extranavlinks, $cm = null) {
+function build_navigation() {
     throw new coding_exception('build_navigation() can not be used any more, please use $PAGE->navbar methods instead.');
 }
 
 /**
  * @deprecated not relevant with global navigation in Moodle 2.x+
  */
-function navmenu($course, $cm=NULL, $targetwindow='self') {
+function navmenu() {
     throw new coding_exception('navmenu() can not be used any more, it is no longer relevant with global navigation.');
 }
 
@@ -1073,21 +964,21 @@ function navmenu($course, $cm=NULL, $targetwindow='self') {
 /**
  * @deprecated please use calendar_event::create() instead.
  */
-function add_event($event) {
+function add_event() {
     throw new coding_exception('add_event() can not be used any more, please use calendar_event::create() instead.');
 }
 
 /**
  * @deprecated please calendar_event->update() instead.
  */
-function update_event($event) {
+function update_event() {
     throw new coding_exception('update_event() is removed, please use calendar_event->update() instead.');
 }
 
 /**
  * @deprecated please use calendar_event->delete() instead.
  */
-function delete_event($id) {
+function delete_event() {
     throw new coding_exception('delete_event() can not be used any more, please use '.
         'calendar_event->delete() instead.');
 }
@@ -1095,7 +986,7 @@ function delete_event($id) {
 /**
  * @deprecated please use calendar_event->toggle_visibility(false) instead.
  */
-function hide_event($event) {
+function hide_event() {
     throw new coding_exception('hide_event() can not be used any more, please use '.
         'calendar_event->toggle_visibility(false) instead.');
 }
@@ -1103,14 +994,13 @@ function hide_event($event) {
 /**
  * @deprecated please use calendar_event->toggle_visibility(true) instead.
  */
-function show_event($event) {
+function show_event() {
     throw new coding_exception('show_event() can not be used any more, please use '.
         'calendar_event->toggle_visibility(true) instead.');
 }
 
 /**
  * @deprecated since Moodle 2.2 use core_text::xxxx() instead.
- * @see core_text
  */
 function textlib_get_instance() {
     throw new coding_exception('textlib_get_instance() can not be used any more, please use '.
@@ -1119,156 +1009,78 @@ function textlib_get_instance() {
 
 /**
  * @deprecated since 2.4
- * @see get_section_name()
- * @see format_base::get_section_name()
-
  */
-function get_generic_section_name($format, stdClass $section) {
+function get_generic_section_name() {
     throw new coding_exception('get_generic_section_name() is deprecated. Please use appropriate functionality from class format_base');
 }
 
 /**
- * Returns an array of sections for the requested course id
- *
- * It is usually not recommended to display the list of sections used
- * in course because the course format may have it's own way to do it.
- *
- * If you need to just display the name of the section please call:
- * get_section_name($course, $section)
- * {@link get_section_name()}
- * from 2.4 $section may also be just the field course_sections.section
- *
- * If you need the list of all sections it is more efficient to get this data by calling
- * $modinfo = get_fast_modinfo($courseorid);
- * $sections = $modinfo->get_section_info_all()
- * {@link get_fast_modinfo()}
- * {@link course_modinfo::get_section_info_all()}
- *
- * Information about one section (instance of section_info):
- * get_fast_modinfo($courseorid)->get_sections_info($section)
- * {@link course_modinfo::get_section_info()}
- *
  * @deprecated since 2.4
  */
-function get_all_sections($courseid) {
-
+function get_all_sections() {
     throw new coding_exception('get_all_sections() is removed. See phpdocs for this function');
 }
 
 /**
- * This function is deprecated, please use {@link course_add_cm_to_section()}
- * Note that course_add_cm_to_section() also updates field course_modules.section and
- * calls rebuild_course_cache()
- *
  * @deprecated since 2.4
  */
-function add_mod_to_section($mod, $beforemod = null) {
+function add_mod_to_section() {
     throw new coding_exception('Function add_mod_to_section() is removed, please use course_add_cm_to_section()');
 }
 
 /**
- * Returns a number of useful structures for course displays
- *
- * Function get_all_mods() is deprecated in 2.4
- * Instead of:
- * <code>
- * get_all_mods($courseid, $mods, $modnames, $modnamesplural, $modnamesused);
- * </code>
- * please use:
- * <code>
- * $mods = get_fast_modinfo($courseorid)->get_cms();
- * $modnames = get_module_types_names();
- * $modnamesplural = get_module_types_names(true);
- * $modnamesused = get_fast_modinfo($courseorid)->get_used_module_names();
- * </code>
- *
  * @deprecated since 2.4
  */
-function get_all_mods($courseid, &$mods, &$modnames, &$modnamesplural, &$modnamesused) {
+function get_all_mods() {
     throw new coding_exception('Function get_all_mods() is removed. Use get_fast_modinfo() and get_module_types_names() instead. See phpdocs for details');
 }
 
 /**
- * Returns course section - creates new if does not exist yet
- *
- * This function is deprecated. To create a course section call:
- * course_create_sections_if_missing($courseorid, $sections);
- * to get the section call:
- * get_fast_modinfo($courseorid)->get_section_info($sectionnum);
- *
- * @see course_create_sections_if_missing()
- * @see get_fast_modinfo()
  * @deprecated since 2.4
  */
-function get_course_section($section, $courseid) {
+function get_course_section() {
     throw new coding_exception('Function get_course_section() is removed. Please use course_create_sections_if_missing() and get_fast_modinfo() instead.');
 }
 
 /**
  * @deprecated since 2.4
- * @see format_weeks::get_section_dates()
  */
-function format_weeks_get_section_dates($section, $course) {
+function format_weeks_get_section_dates() {
     throw new coding_exception('Function format_weeks_get_section_dates() is removed. It is not recommended to'.
             ' use it outside of format_weeks plugin');
 }
 
 /**
- * Deprecated. Instead of:
- * list($content, $name) = get_print_section_cm_text($cm, $course);
- * use:
- * $content = $cm->get_formatted_content(array('overflowdiv' => true, 'noclean' => true));
- * $name = $cm->get_formatted_name();
- *
  * @deprecated since 2.5
- * @see cm_info::get_formatted_content()
- * @see cm_info::get_formatted_name()
  */
-function get_print_section_cm_text(cm_info $cm, $course) {
+function get_print_section_cm_text() {
     throw new coding_exception('Function get_print_section_cm_text() is removed. Please use '.
             'cm_info::get_formatted_content() and cm_info::get_formatted_name()');
 }
 
 /**
- * Deprecated. Please use:
- * $courserenderer = $PAGE->get_renderer('core', 'course');
- * $output = $courserenderer->course_section_add_cm_control($course, $section, $sectionreturn,
- *    array('inblock' => $vertical));
- * echo $output;
- *
  * @deprecated since 2.5
- * @see core_course_renderer::course_section_add_cm_control()
  */
-function print_section_add_menus($course, $section, $modnames = null, $vertical=false, $return=false, $sectionreturn=null) {
+function print_section_add_menus() {
     throw new coding_exception('Function print_section_add_menus() is removed. Please use course renderer '.
             'function course_section_add_cm_control()');
 }
 
 /**
- * Deprecated. Please use:
+ * @deprecated since 2.5. Please use:
  * $courserenderer = $PAGE->get_renderer('core', 'course');
  * $actions = course_get_cm_edit_actions($mod, $indent, $section);
  * return ' ' . $courserenderer->course_section_cm_edit_actions($actions);
- *
- * @deprecated since 2.5
- * @see course_get_cm_edit_actions()
- * @see core_course_renderer->course_section_cm_edit_actions()
  */
-function make_editing_buttons(stdClass $mod, $absolute_ignored = true, $moveselect = true, $indent=-1, $section=null) {
+function make_editing_buttons() {
     throw new coding_exception('Function make_editing_buttons() is removed, please see PHPdocs in '.
             'lib/deprecatedlib.php on how to replace it');
 }
 
 /**
- * Deprecated. Please use:
- * $courserenderer = $PAGE->get_renderer('core', 'course');
- * echo $courserenderer->course_section_cm_list($course, $section, $sectionreturn,
- *     array('hidecompletion' => $hidecompletion));
- *
  * @deprecated since 2.5
- * @see core_course_renderer::course_section_cm_list()
  */
-function print_section($course, $section, $mods, $modnamesused, $absolute=false, $width="100%", $hidecompletion=false, $sectionreturn=null) {
+function print_section() {
     throw new coding_exception('Function print_section() is removed. Please use course renderer function '.
             'course_section_cm_list() instead.');
 }
@@ -1276,14 +1088,14 @@ function print_section($course, $section, $mods, $modnamesused, $absolute=false,
 /**
  * @deprecated since 2.5
  */
-function print_overview($courses, array $remote_courses=array()) {
+function print_overview() {
     throw new coding_exception('Function print_overview() is removed. Use block course_overview to display this information');
 }
 
 /**
  * @deprecated since 2.5
  */
-function print_recent_activity($course) {
+function print_recent_activity() {
     throw new coding_exception('Function print_recent_activity() is removed. It is not recommended to'.
             ' use it outside of block_recent_activity');
 }
@@ -1291,28 +1103,22 @@ function print_recent_activity($course) {
 /**
  * @deprecated since 2.5
  */
-function delete_course_module($id) {
+function delete_course_module() {
     throw new coding_exception('Function delete_course_module() is removed. Please use course_delete_module() instead.');
 }
 
 /**
  * @deprecated since 2.5
  */
-function update_category_button($categoryid = 0) {
+function update_category_button() {
     throw new coding_exception('Function update_category_button() is removed. Pages to view '.
             'and edit courses are now separate and no longer depend on editing mode.');
 }
 
 /**
- * This function is deprecated! For list of categories use
- * coursecat::make_all_categories($requiredcapability, $excludeid, $separator)
- * For parents of one particular category use
- * coursecat::get($id)->get_parents()
- *
  * @deprecated since 2.5
  */
-function make_categories_list(&$list, &$parents, $requiredcapability = '',
-        $excludeid = 0, $category = NULL, $path = "") {
+function make_categories_list() {
     throw new coding_exception('Global function make_categories_list() is removed. Please use '.
             'coursecat::make_categories_list() and coursecat::get_parents()');
 }
@@ -1320,329 +1126,179 @@ function make_categories_list(&$list, &$parents, $requiredcapability = '',
 /**
  * @deprecated since 2.5
  */
-function category_delete_move($category, $newparentid, $showfeedback=true) {
+function category_delete_move() {
     throw new coding_exception('Function category_delete_move() is removed. Please use coursecat::delete_move() instead.');
 }
 
 /**
  * @deprecated since 2.5
  */
-function category_delete_full($category, $showfeedback=true) {
+function category_delete_full() {
     throw new coding_exception('Function category_delete_full() is removed. Please use coursecat::delete_full() instead.');
 }
 
 /**
- * This function is deprecated. Please use
- * $coursecat = coursecat::get($category->id);
- * if ($coursecat->can_change_parent($newparentcat->id)) {
- *     $coursecat->change_parent($newparentcat->id);
- * }
- *
- * Alternatively you can use
- * $coursecat->update(array('parent' => $newparentcat->id));
- *
- * @see coursecat::change_parent()
- * @see coursecat::update()
  * @deprecated since 2.5
  */
-function move_category($category, $newparentcat) {
+function move_category() {
     throw new coding_exception('Function move_category() is removed. Please use coursecat::change_parent() instead.');
 }
 
 /**
- * This function is deprecated. Please use
- * coursecat::get($category->id)->hide();
- *
- * @see coursecat::hide()
  * @deprecated since 2.5
  */
-function course_category_hide($category) {
+function course_category_hide() {
     throw new coding_exception('Function course_category_hide() is removed. Please use coursecat::hide() instead.');
 }
 
 /**
- * This function is deprecated. Please use
- * coursecat::get($category->id)->show();
- *
- * @see coursecat::show()
  * @deprecated since 2.5
  */
-function course_category_show($category) {
+function course_category_show() {
     throw new coding_exception('Function course_category_show() is removed. Please use coursecat::show() instead.');
 }
 
 /**
- * This function is deprecated.
- * To get the category with the specified it please use:
- * coursecat::get($catid, IGNORE_MISSING);
- * or
- * coursecat::get($catid, MUST_EXIST);
- *
- * To get the first available category please use
- * coursecat::get_default();
- *
- * @deprecated since 2.5
+ * @deprecated since 2.5. Please use coursecat::get($catid, IGNORE_MISSING) or coursecat::get($catid, MUST_EXIST).
  */
-function get_course_category($catid=0) {
+function get_course_category() {
     throw new coding_exception('Function get_course_category() is removed. Please use coursecat::get(), see phpdocs for more details');
 }
 
 /**
- * This function is deprecated. It is replaced with the method create() in class coursecat.
- * {@link coursecat::create()} also verifies the data, fixes sortorder and logs the action
- *
  * @deprecated since 2.5
  */
-function create_course_category($category) {
-    throw new coding_exception('Function create_course_category() is removed. Please use coursecat::create(), see phpdocs for more details');
+function create_course_category() {
+    throw new coding_exception('Function create_course_category() is removed. Please use coursecat::create()');
 }
 
 /**
- * This function is deprecated.
- *
- * To get visible children categories of the given category use:
- * coursecat::get($categoryid)->get_children();
- * This function will return the array or coursecat objects, on each of them
- * you can call get_children() again
- *
- * @see coursecat::get()
- * @see coursecat::get_children()
- *
- * @deprecated since 2.5
+ * @deprecated since 2.5. Please use coursecat::get() and coursecat::get_children()
  */
-function get_all_subcategories($catid) {
-    throw new coding_exception('Function get_all_subcategories() is removed. Please use appropriate methods() of coursecat
-            class. See phpdocs for more details');
+function get_all_subcategories() {
+    throw new coding_exception('Function get_all_subcategories() is removed. Please use appropriate methods() ' .
+            'of coursecat class.');
 }
 
 /**
- * This function is deprecated. Please use functions in class coursecat:
- * - coursecat::get($parentid)->has_children()
- * tells if the category has children (visible or not to the current user)
- *
- * - coursecat::get($parentid)->get_children()
- * returns an array of coursecat objects, each of them represents a children category visible
- * to the current user (i.e. visible=1 or user has capability to view hidden categories)
- *
- * - coursecat::get($parentid)->get_children_count()
- * returns number of children categories visible to the current user
- *
- * - coursecat::count_all()
- * returns total count of all categories in the system (both visible and not)
- *
- * - coursecat::get_default()
- * returns the first category (usually to be used if count_all() == 1)
- *
- * @deprecated since 2.5
+ * @deprecated since 2.5. Please use coursecat::get($parentid)->get_children().
  */
-function get_child_categories($parentid) {
-    throw new coding_exception('Function get_child_categories() is removed. Use coursecat::get_children() or see phpdocs for
-            more details.');
+function get_child_categories() {
+    throw new coding_exception('Function get_child_categories() is removed. Use coursecat::get_children().');
 }
 
 /**
- *
  * @deprecated since 2.5
- *
- * This function is deprecated. Use appropriate functions from class coursecat.
- * Examples:
- *
- * coursecat::get($categoryid)->get_children()
- * - returns all children of the specified category as instances of class
- * coursecat, which means on each of them method get_children() can be called again.
- * Only categories visible to the current user are returned.
- *
- * coursecat::get(0)->get_children()
- * - returns all top-level categories visible to the current user.
- *
- * Sort fields can be specified, see phpdocs to {@link coursecat::get_children()}
- *
- * coursecat::make_categories_list()
- * - returns an array of all categories id/names in the system.
- * Also only returns categories visible to current user and can additionally be
- * filetered by capability, see phpdocs to {@link coursecat::make_categories_list()}
- *
- * make_categories_options()
- * - Returns full course categories tree to be used in html_writer::select()
- *
- * Also see functions {@link coursecat::get_children_count()}, {@link coursecat::count_all()},
- * {@link coursecat::get_default()}
  */
-function get_categories($parent='none', $sort=NULL, $shallow=true) {
-    throw new coding_exception('Function get_categories() is removed. Please use coursecat::get_children() or see phpdocs for other alternatives');
+function get_categories() {
+    throw new coding_exception('Function get_categories() is removed. Please use ' .
+            'appropriate functions from class coursecat');
 }
 
 /**
-* This function is deprecated, please use course renderer:
-* $renderer = $PAGE->get_renderer('core', 'course');
-* echo $renderer->course_search_form($value, $format);
-*
 * @deprecated since 2.5
 */
-function print_course_search($value="", $return=false, $format="plain") {
+function print_course_search() {
     throw new coding_exception('Function print_course_search() is removed, please use course renderer');
 }
 
 /**
- * This function is deprecated, please use:
- * $renderer = $PAGE->get_renderer('core', 'course');
- * echo $renderer->frontpage_my_courses()
- *
  * @deprecated since 2.5
  */
 function print_my_moodle() {
-    throw new coding_exception('Function print_my_moodle() is removed, please use course renderer function frontpage_my_courses()');
+    throw new coding_exception('Function print_my_moodle() is removed, please use course renderer ' .
+            'function frontpage_my_courses()');
 }
 
 /**
- * This function is deprecated, it is replaced with protected function
- * {@link core_course_renderer::frontpage_remote_course()}
- * It is only used from function {@link core_course_renderer::frontpage_my_courses()}
- *
  * @deprecated since 2.5
  */
-function print_remote_course($course, $width="100%") {
+function print_remote_course() {
     throw new coding_exception('Function print_remote_course() is removed, please use course renderer');
 }
 
 /**
- * This function is deprecated, it is replaced with protected function
- * {@link core_course_renderer::frontpage_remote_host()}
- * It is only used from function {@link core_course_renderer::frontpage_my_courses()}
- *
  * @deprecated since 2.5
  */
-function print_remote_host($host, $width="100%") {
+function print_remote_host() {
     throw new coding_exception('Function print_remote_host() is removed, please use course renderer');
 }
 
 /**
  * @deprecated since 2.5
- *
- * See http://docs.moodle.org/dev/Courses_lists_upgrade_to_2.5
  */
-function print_whole_category_list($category=NULL, $displaylist=NULL, $parentslist=NULL, $depth=-1, $showcourses = true, $categorycourses=NULL) {
+function print_whole_category_list() {
     throw new coding_exception('Function print_whole_category_list() is removed, please use course renderer');
 }
 
 /**
  * @deprecated since 2.5
  */
-function print_category_info($category, $depth = 0, $showcourses = false, array $courses = null) {
+function print_category_info() {
     throw new coding_exception('Function print_category_info() is removed, please use course renderer');
 }
 
 /**
  * @deprecated since 2.5
- *
- * This function is not used any more in moodle core and course renderer does not have render function for it.
- * Combo list on the front page is displayed as:
- * $renderer = $PAGE->get_renderer('core', 'course');
- * echo $renderer->frontpage_combo_list()
- *
- * The new class {@link coursecat} stores the information about course category tree
- * To get children categories use:
- * coursecat::get($id)->get_children()
- * To get list of courses use:
- * coursecat::get($id)->get_courses()
- *
- * See http://docs.moodle.org/dev/Courses_lists_upgrade_to_2.5
  */
-function get_course_category_tree($id = 0, $depth = 0) {
-    throw new coding_exception('Function get_course_category_tree() is removed, please use course renderer or coursecat class,
-            see function phpdocs for more info');
+function get_course_category_tree() {
+    throw new coding_exception('Function get_course_category_tree() is removed, please use course ' .
+            'renderer or coursecat class, see function phpdocs for more info');
 }
 
 /**
  * @deprecated since 2.5
- *
- * To print a generic list of courses use:
- * $renderer = $PAGE->get_renderer('core', 'course');
- * echo $renderer->courses_list($courses);
- *
- * To print list of all courses:
- * $renderer = $PAGE->get_renderer('core', 'course');
- * echo $renderer->frontpage_available_courses();
- *
- * To print list of courses inside category:
- * $renderer = $PAGE->get_renderer('core', 'course');
- * echo $renderer->course_category($category); // this will also print subcategories
  */
-function print_courses($category) {
+function print_courses() {
     throw new coding_exception('Function print_courses() is removed, please use course renderer');
 }
 
 /**
  * @deprecated since 2.5
- *
- * Please use course renderer to display a course information box.
- * $renderer = $PAGE->get_renderer('core', 'course');
- * echo $renderer->courses_list($courses); // will print list of courses
- * echo $renderer->course_info_box($course); // will print one course wrapped in div.generalbox
  */
-function print_course($course, $highlightterms = '') {
+function print_course() {
     throw new coding_exception('Function print_course() is removed, please use course renderer');
 }
 
 /**
  * @deprecated since 2.5
- *
- * This function is not used any more in moodle core and course renderer does not have render function for it.
- * Combo list on the front page is displayed as:
- * $renderer = $PAGE->get_renderer('core', 'course');
- * echo $renderer->frontpage_combo_list()
- *
- * The new class {@link coursecat} stores the information about course category tree
- * To get children categories use:
- * coursecat::get($id)->get_children()
- * To get list of courses use:
- * coursecat::get($id)->get_courses()
  */
-function get_category_courses_array($categoryid = 0) {
+function get_category_courses_array() {
     throw new coding_exception('Function get_category_courses_array() is removed, please use methods of coursecat class');
 }
 
 /**
  * @deprecated since 2.5
  */
-function get_category_courses_array_recursively(array &$flattened, $category) {
+function get_category_courses_array_recursively() {
     throw new coding_exception('Function get_category_courses_array_recursively() is removed, please use methods of coursecat class', DEBUG_DEVELOPER);
 }
 
 /**
  * @deprecated since Moodle 2.5 MDL-27814 - please do not use this function any more.
  */
-function blog_get_context_url($context=null) {
+function blog_get_context_url() {
     throw new coding_exception('Function  blog_get_context_url() is removed, getting params from context is not reliable for blogs.');
 }
 
 /**
  * @deprecated since 2.5
- *
- * To get list of all courses with course contacts ('managers') use
- * coursecat::get(0)->get_courses(array('recursive' => true, 'coursecontacts' => true));
- *
- * To get list of courses inside particular category use
- * coursecat::get($id)->get_courses(array('coursecontacts' => true));
- *
- * Additionally you can specify sort order, offset and maximum number of courses,
- * see {@link coursecat::get_courses()}
  */
-function get_courses_wmanagers($categoryid=0, $sort="c.sortorder ASC", $fields=array()) {
+function get_courses_wmanagers() {
     throw new coding_exception('Function get_courses_wmanagers() is removed, please use coursecat::get_courses()');
 }
 
 /**
  * @deprecated since 2.5
  */
-function convert_tree_to_html($tree, $row=0) {
+function convert_tree_to_html() {
     throw new coding_exception('Function convert_tree_to_html() is removed. Consider using class tabtree and core_renderer::render_tabtree()');
 }
 
 /**
  * @deprecated since 2.5
  */
-function convert_tabrows_to_tree($tabrows, $selected, $inactive, $activated) {
+function convert_tabrows_to_tree() {
     throw new coding_exception('Function convert_tabrows_to_tree() is removed. Consider using class tabtree');
 }
 
@@ -1655,9 +1311,8 @@ function can_use_rotated_text() {
 
 /**
  * @deprecated since Moodle 2.2 MDL-35009 - please do not use this function any more.
- * @see context::instance_by_id($id)
  */
-function get_context_instance_by_id($id, $strictness = IGNORE_MISSING) {
+function get_context_instance_by_id() {
     throw new coding_exception('get_context_instance_by_id() is now removed, please use context::instance_by_id($id) instead.');
 }
 
@@ -1675,39 +1330,34 @@ function get_system_context($cache = true) {
 }
 
 /**
- * @see context::get_parent_context_ids()
  * @deprecated since 2.2, use $context->get_parent_context_ids() instead
  */
-function get_parent_contexts(context $context, $includeself = false) {
+function get_parent_contexts() {
     throw new coding_exception('get_parent_contexts() is removed, please use $context->get_parent_context_ids() instead.');
 }
 
 /**
  * @deprecated since Moodle 2.2
- * @see context::get_parent_context()
  */
-function get_parent_contextid(context $context) {
+function get_parent_contextid() {
     throw new coding_exception('get_parent_contextid() is removed, please use $context->get_parent_context() instead.');
 }
 
 /**
- * @see context::get_child_contexts()
  * @deprecated since 2.2
  */
-function get_child_contexts(context $context) {
+function get_child_contexts() {
     throw new coding_exception('get_child_contexts() is removed, please use $context->get_child_contexts() instead.');
 }
 
 /**
- * @see context_helper::create_instances()
  * @deprecated since 2.2
  */
-function create_contexts($contextlevel = null, $buildpaths = true) {
+function create_contexts() {
     throw new coding_exception('create_contexts() is removed, please use context_helper::create_instances() instead.');
 }
 
 /**
- * @see context_helper::cleanup_instances()
  * @deprecated since 2.2
  */
 function cleanup_contexts() {
@@ -1715,178 +1365,143 @@ function cleanup_contexts() {
 }
 
 /**
- * Populate context.path and context.depth where missing.
- *
  * @deprecated since 2.2
  */
-function build_context_path($force = false) {
+function build_context_path() {
     throw new coding_exception('build_context_path() is removed, please use context_helper::build_all_paths() instead.');
 }
 
 /**
  * @deprecated since 2.2
  */
-function rebuild_contexts(array $fixcontexts) {
+function rebuild_contexts() {
     throw new coding_exception('rebuild_contexts() is removed, please use $context->reset_paths(true) instead.');
 }
 
 /**
  * @deprecated since Moodle 2.2
- * @see context_helper::preload_course()
  */
-function preload_course_contexts($courseid) {
+function preload_course_contexts() {
     throw new coding_exception('preload_course_contexts() is removed, please use context_helper::preload_course() instead.');
 }
 
 /**
  * @deprecated since Moodle 2.2
- * @see context::update_moved()
  */
-function context_moved(context $context, context $newparent) {
+function context_moved() {
     throw new coding_exception('context_moved() is removed, please use context::update_moved() instead.');
 }
 
 /**
- * @see context::get_capabilities()
  * @deprecated since 2.2
  */
-function fetch_context_capabilities(context $context) {
+function fetch_context_capabilities() {
     throw new coding_exception('fetch_context_capabilities() is removed, please use $context->get_capabilities() instead.');
 }
 
 /**
  * @deprecated since 2.2
- * @see context_helper::preload_from_record()
  */
-function context_instance_preload(stdClass $rec) {
+function context_instance_preload() {
     throw new coding_exception('context_instance_preload() is removed, please use context_helper::preload_from_record() instead.');
 }
 
 /**
- * Returns context level name
- *
  * @deprecated since 2.2
- * @see context_helper::get_level_name()
  */
-function get_contextlevel_name($contextlevel) {
+function get_contextlevel_name() {
     throw new coding_exception('get_contextlevel_name() is removed, please use context_helper::get_level_name() instead.');
 }
 
 /**
  * @deprecated since 2.2
- * @see context::get_context_name()
  */
-function print_context_name(context $context, $withprefix = true, $short = false) {
+function print_context_name() {
     throw new coding_exception('print_context_name() is removed, please use $context->get_context_name() instead.');
 }
 
 /**
  * @deprecated since 2.2, use $context->mark_dirty() instead
- * @see context::mark_dirty()
  */
-function mark_context_dirty($path) {
+function mark_context_dirty() {
     throw new coding_exception('mark_context_dirty() is removed, please use $context->mark_dirty() instead.');
 }
 
 /**
  * @deprecated since Moodle 2.2
- * @see context_helper::delete_instance() or context::delete_content()
  */
-function delete_context($contextlevel, $instanceid, $deleterecord = true) {
-    if ($deleterecord) {
-        throw new coding_exception('delete_context() is removed, please use context_helper::delete_instance() instead.');
-    } else {
-        throw new coding_exception('delete_context() is removed, please use $context->delete_content() instead.');
-    }
+function delete_context() {
+    throw new coding_exception('delete_context() is removed, please use context_helper::delete_instance() ' .
+            'or $context->delete_content() instead.');
 }
 
 /**
  * @deprecated since 2.2
- * @see context::get_url()
  */
-function get_context_url(context $context) {
+function get_context_url() {
     throw new coding_exception('get_context_url() is removed, please use $context->get_url() instead.');
 }
 
 /**
  * @deprecated since 2.2
- * @see context::get_course_context()
  */
-function get_course_context(context $context) {
+function get_course_context() {
     throw new coding_exception('get_course_context() is removed, please use $context->get_course_context(true) instead.');
 }
 
 /**
  * @deprecated since 2.2
- * @see enrol_get_users_courses()
  */
-function get_user_courses_bycap($userid, $cap, $accessdata_ignored, $doanything_ignored, $sort = 'c.sortorder ASC', $fields = null, $limit_ignored = 0) {
-
+function get_user_courses_bycap() {
     throw new coding_exception('get_user_courses_bycap() is removed, please use enrol_get_users_courses() instead.');
 }
 
 /**
  * @deprecated since Moodle 2.2
  */
-function get_role_context_caps($roleid, context $context) {
+function get_role_context_caps() {
     throw new coding_exception('get_role_context_caps() is removed, it is really slow. Don\'t use it.');
 }
 
 /**
- * @see context::get_course_context()
  * @deprecated since 2.2
  */
-function get_courseid_from_context(context $context) {
+function get_courseid_from_context() {
     throw new coding_exception('get_courseid_from_context() is removed, please use $context->get_course_context(false) instead.');
 }
 
 /**
- * If you are using this methid, you should have something like this:
- *
- *    list($ctxselect, $ctxjoin) = context_instance_preload_sql('c.id', CONTEXT_COURSE, 'ctx');
- *
- * To prevent the use of this deprecated function, replace the line above with something similar to this:
- *
- *    $ctxselect = ', ' . context_helper::get_preload_record_columns_sql('ctx');
- *                                                                        ^
- *    $ctxjoin = "LEFT JOIN {context} ctx ON (ctx.instanceid = c.id AND ctx.contextlevel = :contextlevel)";
- *                                    ^       ^                ^        ^
- *    $params = array('contextlevel' => CONTEXT_COURSE);
- *                                      ^
- * @see context_helper:;get_preload_record_columns_sql()
  * @deprecated since 2.2
  */
-function context_instance_preload_sql($joinon, $contextlevel, $tablealias) {
+function context_instance_preload_sql() {
     throw new coding_exception('context_instance_preload_sql() is removed, please use context_helper::get_preload_record_columns_sql() instead.');
 }
 
 /**
  * @deprecated since 2.2
- * @see context::get_parent_context_ids()
  */
-function get_related_contexts_string(context $context) {
+function get_related_contexts_string() {
     throw new coding_exception('get_related_contexts_string() is removed, please use $context->get_parent_context_ids(true) instead.');
 }
 
 /**
  * @deprecated since 2.6
- * @see core_component::get_plugin_list_with_file()
  */
-function get_plugin_list_with_file($plugintype, $file, $include = false) {
+function get_plugin_list_with_file() {
     throw new coding_exception('get_plugin_list_with_file() is removed, please use core_component::get_plugin_list_with_file() instead.');
 }
 
 /**
  * @deprecated since 2.6
  */
-function check_browser_operating_system($brand) {
+function check_browser_operating_system() {
     throw new coding_exception('check_browser_operating_system is removed, please update your code to use core_useragent instead.');
 }
 
 /**
  * @deprecated since 2.6
  */
-function check_browser_version($brand, $version = null) {
+function check_browser_version() {
     throw new coding_exception('check_browser_version is removed, please update your code to use core_useragent instead.');
 }
 
@@ -1900,28 +1515,28 @@ function get_device_type() {
 /**
  * @deprecated since 2.6
  */
-function get_device_type_list($incusertypes = true) {
+function get_device_type_list() {
     throw new coding_exception('get_device_type_list is removed, please update your code to use core_useragent instead.');
 }
 
 /**
  * @deprecated since 2.6
  */
-function get_selected_theme_for_device_type($devicetype = null) {
+function get_selected_theme_for_device_type() {
     throw new coding_exception('get_selected_theme_for_device_type is removed, please update your code to use core_useragent instead.');
 }
 
 /**
  * @deprecated since 2.6
  */
-function get_device_cfg_var_name($devicetype = null) {
+function get_device_cfg_var_name() {
     throw new coding_exception('get_device_cfg_var_name is removed, please update your code to use core_useragent instead.');
 }
 
 /**
  * @deprecated since 2.6
  */
-function set_user_device_type($newdevice) {
+function set_user_device_type() {
     throw new coding_exception('set_user_device_type is removed, please update your code to use core_useragent instead.');
 }
 
@@ -1941,7 +1556,6 @@ function get_browser_version_classes() {
 
 /**
  * @deprecated since Moodle 2.6
- * @see core_user::get_support_user()
  */
 function generate_email_supportuser() {
     throw new coding_exception('generate_email_supportuser is removed, please use core_user::get_support_user');
@@ -1950,7 +1564,7 @@ function generate_email_supportuser() {
 /**
  * @deprecated since Moodle 2.6
  */
-function badges_get_issued_badge_info($hash) {
+function badges_get_issued_badge_info() {
     throw new coding_exception('Function badges_get_issued_badge_info() is removed. Please use core_badges_assertion class and methods to generate badge assertion.');
 }
 
@@ -1965,21 +1579,21 @@ function can_use_html_editor() {
 /**
  * @deprecated since Moodle 2.7, use {@link user_count_login_failures()} instead.
  */
-function count_login_failures($mode, $username, $lastlogin) {
+function count_login_failures() {
     throw new coding_exception('count_login_failures() can not be used any more, please use user_count_login_failures().');
 }
 
 /**
  * @deprecated since 2.7 MDL-33099/MDL-44088 - please do not use this function any more.
  */
-function ajaxenabled(array $browsers = null) {
+function ajaxenabled() {
     throw new coding_exception('ajaxenabled() can not be used anymore. Update your code to work with JS at all times.');
 }
 
 /**
  * @deprecated Since Moodle 2.7 MDL-44070
  */
-function coursemodule_visible_for_user($cm, $userid=0) {
+function coursemodule_visible_for_user() {
     throw new coding_exception('coursemodule_visible_for_user() can not be used any more,
             please use \core_availability\info_module::is_user_visible()');
 }
@@ -1987,27 +1601,22 @@ function coursemodule_visible_for_user($cm, $userid=0) {
 /**
  * @deprecated since Moodle 2.8 MDL-36014, MDL-35618 this functionality is removed
  */
-function enrol_cohort_get_cohorts(course_enrolment_manager $manager) {
-    throw new coding_exception('Function enrol_cohort_get_cohorts() is removed, use enrol_cohort_search_cohorts() or '.
+function enrol_cohort_get_cohorts() {
+    throw new coding_exception('Function enrol_cohort_get_cohorts() is removed, use '.
         'cohort_get_available_cohorts() instead');
 }
 
 /**
- * This function is deprecated, use {@link cohort_can_view_cohort()} instead since it also
- * takes into account current context
- *
  * @deprecated since Moodle 2.8 MDL-36014 please use cohort_can_view_cohort()
  */
-function enrol_cohort_can_view_cohort($cohortid) {
+function enrol_cohort_can_view_cohort() {
     throw new coding_exception('Function enrol_cohort_can_view_cohort() is removed, use cohort_can_view_cohort() instead');
 }
 
 /**
- * It is advisable to use {@link cohort_get_available_cohorts()} instead.
- *
  * @deprecated since Moodle 2.8 MDL-36014 use cohort_get_available_cohorts() instead
  */
-function cohort_get_visible_list($course, $onlyenrolled=true) {
+function cohort_get_visible_list() {
     throw new coding_exception('Function cohort_get_visible_list() is removed. Please use function cohort_get_available_cohorts() ".
         "that correctly checks capabilities.');
 }
@@ -2015,78 +1624,64 @@ function cohort_get_visible_list($course, $onlyenrolled=true) {
 /**
  * @deprecated since Moodle 2.8 MDL-35618 this functionality is removed
  */
-function enrol_cohort_enrol_all_users(course_enrolment_manager $manager, $cohortid, $roleid) {
+function enrol_cohort_enrol_all_users() {
     throw new coding_exception('enrol_cohort_enrol_all_users() is removed. This functionality is moved to enrol_manual.');
 }
 
 /**
  * @deprecated since Moodle 2.8 MDL-35618 this functionality is removed
  */
-function enrol_cohort_search_cohorts(course_enrolment_manager $manager, $offset = 0, $limit = 25, $search = '') {
+function enrol_cohort_search_cohorts() {
     throw new coding_exception('enrol_cohort_search_cohorts() is removed. This functionality is moved to enrol_manual.');
 }
 
 /* === Apis deprecated in since Moodle 2.9 === */
 
 /**
- * Is $USER one of the supplied users?
- *
- * $user2 will be null if viewing a user's recent conversations
- *
  * @deprecated since Moodle 2.9 MDL-49371 - please do not use this function any more.
  */
-function message_current_user_is_involved($user1, $user2) {
+function message_current_user_is_involved() {
     throw new coding_exception('message_current_user_is_involved() can not be used any more.');
 }
 
 /**
- * Print badges on user profile page.
- *
  * @deprecated since Moodle 2.9 MDL-45898 - please do not use this function any more.
  */
-function profile_display_badges($userid, $courseid = 0) {
+function profile_display_badges() {
     throw new coding_exception('profile_display_badges() can not be used any more.');
 }
 
 /**
- * Adds user preferences elements to user edit form.
- *
  * @deprecated since Moodle 2.9 MDL-45774 - Please do not use this function any more.
  */
-function useredit_shared_definition_preferences($user, &$mform, $editoroptions = null, $filemanageroptions = null) {
+function useredit_shared_definition_preferences() {
     throw new coding_exception('useredit_shared_definition_preferences() can not be used any more.');
 }
 
 
 /**
- * Convert region timezone to php supported timezone
- *
  * @deprecated since Moodle 2.9
  */
-function calendar_normalize_tz($tz) {
+function calendar_normalize_tz() {
     throw new coding_exception('calendar_normalize_tz() can not be used any more, please use core_date::normalise_timezone() instead.');
 }
 
 /**
- * Returns a float which represents the user's timezone difference from GMT in hours
- * Checks various settings and picks the most dominant of those which have a value
  * @deprecated since Moodle 2.9
  */
-function get_user_timezone_offset($tz = 99) {
+function get_user_timezone_offset() {
     throw new coding_exception('get_user_timezone_offset() can not be used any more, please use standard PHP DateTimeZone class instead');
 
 }
 
 /**
- * Returns an int which represents the systems's timezone difference from GMT in seconds
  * @deprecated since Moodle 2.9
  */
-function get_timezone_offset($tz) {
+function get_timezone_offset() {
     throw new coding_exception('get_timezone_offset() can not be used any more, please use standard PHP DateTimeZone class instead');
 }
 
 /**
- * Returns a list of timezones in the current language.
  * @deprecated since Moodle 2.9
  */
 function get_list_of_timezones() {
@@ -2094,34 +1689,30 @@ function get_list_of_timezones() {
 }
 
 /**
- * Previous internal API, it was not supposed to be used anywhere.
  * @deprecated since Moodle 2.9
  */
-function update_timezone_records($timezones) {
+function update_timezone_records() {
     throw new coding_exception('update_timezone_records() can not be used any more, please use standard PHP DateTime class instead');
 }
 
 /**
- * Previous internal API, it was not supposed to be used anywhere.
  * @deprecated since Moodle 2.9
  */
-function calculate_user_dst_table($fromyear = null, $toyear = null, $strtimezone = null) {
+function calculate_user_dst_table() {
     throw new coding_exception('calculate_user_dst_table() can not be used any more, please use standard PHP DateTime class instead');
 }
 
 /**
- * Previous internal API, it was not supposed to be used anywhere.
  * @deprecated since Moodle 2.9
  */
-function dst_changes_for_year($year, $timezone) {
+function dst_changes_for_year() {
     throw new coding_exception('dst_changes_for_year() can not be used any more, please use standard DateTime class instead');
 }
 
 /**
- * Previous internal API, it was not supposed to be used anywhere.
  * @deprecated since Moodle 2.9
  */
-function get_timezone_record($timezonename) {
+function get_timezone_record() {
     throw new coding_exception('get_timezone_record() can not be used any more, please use standard PHP DateTime class instead');
 }
 
@@ -2129,7 +1720,7 @@ function get_timezone_record($timezonename) {
 /**
  * @deprecated since Moodle 3.0 MDL-49360 - please do not use this function any more.
  */
-function get_referer($stripquery = true) {
+function get_referer() {
     throw new coding_exception('get_referer() can not be used any more. Please use get_local_referer() instead.');
 }
 
@@ -2150,15 +1741,17 @@ function completion_cron() {
 /**
  * @deprecated since 3.0
  */
-function coursetag_get_tags($courseid, $userid=0, $tagtype='', $numtags=0, $unused = '') {
-    throw new coding_exception('Function coursetag_get_tags() can not be used any more. Userid is no longer used for tagging courses.');
+function coursetag_get_tags() {
+    throw new coding_exception('Function coursetag_get_tags() can not be used any more. ' .
+            'Userid is no longer used for tagging courses.');
 }
 
 /**
  * @deprecated since 3.0
  */
-function coursetag_get_all_tags($unused='', $numtags=0) {
-    throw new coding_exception('Function coursetag_get_all_tag() can not be used any more. Userid is no longer used for tagging courses.');
+function coursetag_get_all_tags() {
+    throw new coding_exception('Function coursetag_get_all_tags() can not be used any more. Userid is no ' .
+        'longer used for tagging courses.');
 }
 
 /**
@@ -2171,1316 +1764,405 @@ function coursetag_get_jscript() {
 /**
  * @deprecated since 3.0
  */
-function coursetag_get_jscript_links($elementid, $coursetagslinks) {
+function coursetag_get_jscript_links() {
     throw new coding_exception('Function coursetag_get_jscript_links() can not be used any more and is obsolete.');
 }
 
 /**
- * @deprecated since 3.0
- */
-function coursetag_get_records($courseid, $userid) {
-    throw new coding_exception('Function coursetag_get_records() can not be used any more. Userid is no longer used for tagging courses.');
-}
-
-/**
- * @deprecated since 3.0
- */
-function coursetag_store_keywords($tags, $courseid, $userid=0, $tagtype='official', $myurl='') {
-    throw new coding_exception('Function coursetag_store_keywords() can not be used any more. Userid is no longer used for tagging courses.');
-}
-
-/**
- * @deprecated since 3.0
- */
-function coursetag_delete_keyword($tagid, $userid, $courseid) {
-    throw new coding_exception('Function coursetag_delete_keyword() can not be used any more. Userid is no longer used for tagging courses.');
-}
-
-/**
- * @deprecated since 3.0
- */
-function coursetag_get_tagged_courses($tagid) {
-    throw new coding_exception('Function coursetag_get_tagged_courses() can not be used any more. Userid is no longer used for tagging courses.');
-}
-
-/**
- * @deprecated since 3.0
- */
-function coursetag_delete_course_tags($courseid, $showfeedback=false) {
-    throw new coding_exception('Function coursetag_delete_course_tags() is deprecated. Use core_tag_tag::remove_all_item_tags().');
-}
-
-/**
- * Set the type of a tag.  At this time (version 2.2) the possible values are 'default' or 'official'.  Official tags will be
- * displayed separately "at tagging time" (while selecting the tags to apply to a record).
- *
- * @package  core_tag
- * @deprecated since 3.1
- * @param    string   $tagid tagid to modify
- * @param    string   $type either 'default' or 'official'
- * @return   bool     true on success, false otherwise
- */
-function tag_type_set($tagid, $type) {
-    debugging('Function tag_type_set() is deprecated and can be replaced with use core_tag_tag::get($tagid)->update().', DEBUG_DEVELOPER);
-    if ($tag = core_tag_tag::get($tagid, '*')) {
-        return $tag->update(array('isstandard' => ($type === 'official') ? 1 : 0));
-    }
-    return false;
-}
-
-/**
- * Set the description of a tag
- *
- * @package  core_tag
- * @deprecated since 3.1
- * @param    int      $tagid the id of the tag
- * @param    string   $description the tag's description string to be set
- * @param    int      $descriptionformat the moodle text format of the description
- *                    {@link http://docs.moodle.org/dev/Text_formats_2.0#Database_structure}
- * @return   bool     true on success, false otherwise
- */
-function tag_description_set($tagid, $description, $descriptionformat) {
-    debugging('Function tag_type_set() is deprecated and can be replaced with core_tag_tag::get($tagid)->update().', DEBUG_DEVELOPER);
-    if ($tag = core_tag_tag::get($tagid, '*')) {
-        return $tag->update(array('description' => $description, 'descriptionformat' => $descriptionformat));
-    }
-    return false;
-}
-
-/**
- * Get the array of db record of tags associated to a record (instances).
- *
- * @package core_tag
- * @deprecated since 3.1
- * @param string $record_type the record type for which we want to get the tags
- * @param int $record_id the record id for which we want to get the tags
- * @param string $type the tag type (either 'default' or 'official'). By default, all tags are returned.
- * @param int $userid (optional) only required for course tagging
- * @return array the array of tags
- */
-function tag_get_tags($record_type, $record_id, $type=null, $userid=0) {
-    debugging('Method tag_get_tags() is deprecated and replaced with core_tag_tag::get_item_tags(). ' .
-        'Component is now required when retrieving tag instances.', DEBUG_DEVELOPER);
-    $standardonly = ($type === 'official' ? core_tag_tag::STANDARD_ONLY :
-        (!empty($type) ? core_tag_tag::NOT_STANDARD_ONLY : core_tag_tag::BOTH_STANDARD_AND_NOT));
-    $tags = core_tag_tag::get_item_tags(null, $record_type, $record_id, $standardonly, $userid);
-    $rv = array();
-    foreach ($tags as $id => $t) {
-        $rv[$id] = $t->to_object();
-    }
-    return $rv;
-}
-
-/**
- * Get the array of tags display names, indexed by id.
- *
- * @package  core_tag
- * @deprecated since 3.1
- * @param    string $record_type the record type for which we want to get the tags
- * @param    int    $record_id   the record id for which we want to get the tags
- * @param    string $type        the tag type (either 'default' or 'official'). By default, all tags are returned.
- * @return   array  the array of tags (with the value returned by core_tag_tag::make_display_name), indexed by id
- */
-function tag_get_tags_array($record_type, $record_id, $type=null) {
-    debugging('Method tag_get_tags_array() is deprecated and replaced with core_tag_tag::get_item_tags_array(). ' .
-        'Component is now required when retrieving tag instances.', DEBUG_DEVELOPER);
-    $standardonly = ($type === 'official' ? core_tag_tag::STANDARD_ONLY :
-        (!empty($type) ? core_tag_tag::NOT_STANDARD_ONLY : core_tag_tag::BOTH_STANDARD_AND_NOT));
-    return core_tag_tag::get_item_tags_array('', $record_type, $record_id, $standardonly);
-}
-
-/**
- * Get a comma-separated string of tags associated to a record.
- *
- * Use {@link tag_get_tags()} to get the same information in an array.
- *
- * @package  core_tag
- * @deprecated since 3.1
- * @param    string   $record_type the record type for which we want to get the tags
- * @param    int      $record_id   the record id for which we want to get the tags
- * @param    int      $html        either TAG_RETURN_HTML or TAG_RETURN_TEXT, depending on the type of output desired
- * @param    string   $type        either 'official' or 'default', if null, all tags are returned
- * @return   string   the comma-separated list of tags.
- */
-function tag_get_tags_csv($record_type, $record_id, $html=null, $type=null) {
-    global $CFG, $OUTPUT;
-    debugging('Method tag_get_tags_csv() is deprecated. Instead you should use either ' .
-            'core_tag_tag::get_item_tags_array() or $OUTPUT->tag_list(core_tag_tag::get_item_tags()). ' .
-        'Component is now required when retrieving tag instances.', DEBUG_DEVELOPER);
-    $standardonly = ($type === 'official' ? core_tag_tag::STANDARD_ONLY :
-        (!empty($type) ? core_tag_tag::NOT_STANDARD_ONLY : core_tag_tag::BOTH_STANDARD_AND_NOT));
-    if ($html != TAG_RETURN_TEXT) {
-        return $OUTPUT->tag_list(core_tag_tag::get_item_tags('', $record_type, $record_id, $standardonly), '');
-    } else {
-        return join(', ', core_tag_tag::get_item_tags_array('', $record_type, $record_id, $standardonly, 0, false));
-    }
-}
-
-/**
- * Get an array of tag ids associated to a record.
- *
- * @package  core_tag
- * @deprecated since 3.1
- * @param    string    $record_type the record type for which we want to get the tags
- * @param    int       $record_id the record id for which we want to get the tags
- * @return   array     tag ids, indexed and sorted by 'ordering'
- */
-function tag_get_tags_ids($record_type, $record_id) {
-    debugging('Method tag_get_tags_ids() is deprecated. Please consider using core_tag_tag::get_item_tags() or similar methods.', DEBUG_DEVELOPER);
-    $tag_ids = array();
-    $tagobjects = core_tag_tag::get_item_tags(null, $record_type, $record_id);
-    foreach ($tagobjects as $tagobject) {
-        $tag = $tagobject->to_object();
-        if ( array_key_exists($tag->ordering, $tag_ids) ) {
-            $tag->ordering++;
-        }
-        $tag_ids[$tag->ordering] = $tag->id;
-    }
-    ksort($tag_ids);
-    return $tag_ids;
-}
-
-/**
- * Returns the database ID of a set of tags.
- *
- * @deprecated since 3.1
- * @param    mixed $tags one tag, or array of tags, to look for.
- * @param    bool  $return_value specify the type of the returned value. Either TAG_RETURN_OBJECT, or TAG_RETURN_ARRAY (default).
- *                               If TAG_RETURN_ARRAY is specified, an array will be returned even if only one tag was passed in $tags.
- * @return   mixed tag-indexed array of ids (or objects, if second parameter is TAG_RETURN_OBJECT), or only an int, if only one tag
- *                 is given *and* the second parameter is null. No value for a key means the tag wasn't found.
- */
-function tag_get_id($tags, $return_value = null) {
-    global $CFG, $DB;
-    debugging('Method tag_get_id() is deprecated and can be replaced with core_tag_tag::get_by_name() or core_tag_tag::get_by_name_bulk(). ' .
-        'You need to specify tag collection when retrieving tag by name', DEBUG_DEVELOPER);
-
-    if (!is_array($tags)) {
-        if(is_null($return_value) || $return_value == TAG_RETURN_OBJECT) {
-            if ($tagobject = core_tag_tag::get_by_name(core_tag_collection::get_default(), $tags)) {
-                return $tagobject->id;
-            } else {
-                return 0;
-            }
-        }
-        $tags = array($tags);
-    }
-
-    $records = core_tag_tag::get_by_name_bulk(core_tag_collection::get_default(), $tags,
-        $return_value == TAG_RETURN_OBJECT ? '*' : 'id, name');
-    foreach ($records as $name => $record) {
-        if ($return_value != TAG_RETURN_OBJECT) {
-            $records[$name] = $record->id ? $record->id : null;
-        } else {
-            $records[$name] = $record->to_object();
-        }
-    }
-    return $records;
-}
-
-/**
- * Change the "value" of a tag, and update the associated 'name'.
- *
- * @package  core_tag
- * @deprecated since 3.1
- * @param    int      $tagid  the id of the tag to modify
- * @param    string   $newrawname the new rawname
- * @return   bool     true on success, false otherwise
- */
-function tag_rename($tagid, $newrawname) {
-    debugging('Function tag_rename() is deprecated and may be replaced with core_tag_tag::get($tagid)->update().', DEBUG_DEVELOPER);
-    if ($tag = core_tag_tag::get($tagid, '*')) {
-        return $tag->update(array('rawname' => $newrawname));
-    }
-    return false;
-}
-
-/**
- * Delete one instance of a tag.  If the last instance was deleted, it will also delete the tag, unless its type is 'official'.
- *
- * @package  core_tag
- * @deprecated since 3.1
- * @param    string $record_type the type of the record for which to remove the instance
- * @param    int    $record_id   the id of the record for which to remove the instance
- * @param    int    $tagid       the tagid that needs to be removed
- * @param    int    $userid      (optional) the userid
- * @return   bool   true on success, false otherwise
- */
-function tag_delete_instance($record_type, $record_id, $tagid, $userid = null) {
-    debugging('Function tag_delete_instance() is deprecated and replaced with core_tag_tag::remove_item_tag() instead. ' .
-        'Component is required for retrieving instances', DEBUG_DEVELOPER);
-    $tag = core_tag_tag::get($tagid);
-    core_tag_tag::remove_item_tag('', $record_type, $record_id, $tag->rawname, $userid);
-}
-
-/**
- * Find all records tagged with a tag of a given type ('post', 'user', etc.)
- *
- * @package  core_tag
- * @deprecated since 3.1
- * @category tag
- * @param    string   $tag       tag to look for
- * @param    string   $type      type to restrict search to.  If null, every matching record will be returned
- * @param    int      $limitfrom (optional, required if $limitnum is set) return a subset of records, starting at this point.
- * @param    int      $limitnum  (optional, required if $limitfrom is set) return a subset comprising this many records.
- * @return   array of matching objects, indexed by record id, from the table containing the type requested
- */
-function tag_find_records($tag, $type, $limitfrom='', $limitnum='') {
-    debugging('Function tag_find_records() is deprecated and replaced with core_tag_tag::get_by_name()->get_tagged_items(). '.
-        'You need to specify tag collection when retrieving tag by name', DEBUG_DEVELOPER);
-
-    if (!$tag || !$type) {
-        return array();
-    }
-
-    $tagobject = core_tag_tag::get_by_name(core_tag_area::get_collection('', $type), $tag);
-    return $tagobject->get_tagged_items('', $type, $limitfrom, $limitnum);
-}
-
-/**
- * Adds one or more tag in the database.  This function should not be called directly : you should
- * use tag_set.
- *
- * @package core_tag
- * @deprecated since 3.1
- * @param   mixed    $tags     one tag, or an array of tags, to be created
- * @param   string   $type     type of tag to be created ("default" is the default value and "official" is the only other supported
- *                             value at this time). An official tag is kept even if there are no records tagged with it.
- * @return array     $tags ids indexed by their lowercase normalized names. Any boolean false in the array indicates an error while
- *                             adding the tag.
- */
-function tag_add($tags, $type="default") {
-    debugging('Function tag_add() is deprecated. You can use core_tag_tag::create_if_missing(), however it should not be necessary ' .
-        'since tags are created automatically when assigned to items', DEBUG_DEVELOPER);
-    if (!is_array($tags)) {
-        $tags = array($tags);
-    }
-    $objects = core_tag_tag::create_if_missing(core_tag_collection::get_default(), $tags,
-            $type === 'official');
-
-    // New function returns the tags in different format, for BC we keep the format that this function used to have.
-    $rv = array();
-    foreach ($objects as $name => $tagobject) {
-        if (isset($tagobject->id)) {
-            $rv[$tagobject->name] = $tagobject->id;
-        } else {
-            $rv[$name] = false;
-        }
-    }
-    return $rv;
-}
-
-/**
- * Assigns a tag to a record; if the record already exists, the time and ordering will be updated.
- *
- * @package core_tag
- * @deprecated since 3.1
- * @param string $record_type the type of the record that will be tagged
- * @param int $record_id the id of the record that will be tagged
- * @param string $tagid the tag id to set on the record.
- * @param int $ordering the order of the instance for this record
- * @param int $userid (optional) only required for course tagging
- * @param string|null $component the component that was tagged
- * @param int|null $contextid the context id of where this tag was assigned
- * @return bool true on success, false otherwise
- */
-function tag_assign($record_type, $record_id, $tagid, $ordering, $userid = 0, $component = null, $contextid = null) {
-    global $DB;
-    $message = 'Function tag_assign() is deprecated. Use core_tag_tag::set_item_tags() or core_tag_tag::add_item_tag() instead. ' .
-        'Tag instance ordering should not be set manually';
-    if ($component === null || $contextid === null) {
-        $message .= '. You should specify the component and contextid of the item being tagged in your call to tag_assign.';
-    }
-    debugging($message, DEBUG_DEVELOPER);
-
-    if ($contextid) {
-        $context = context::instance_by_id($contextid);
-    } else {
-        $context = context_system::instance();
-    }
-
-    // Get the tag.
-    $tag = $DB->get_record('tag', array('id' => $tagid), 'name, rawname', MUST_EXIST);
-
-    $taginstanceid = core_tag_tag::add_item_tag($component, $record_type, $record_id, $context, $tag->rawname, $userid);
-
-    // Alter the "ordering" of tag_instance. This should never be done manually and only remains here for the backward compatibility.
-    $taginstance = new stdClass();
-    $taginstance->id = $taginstanceid;
-    $taginstance->ordering     = $ordering;
-    $taginstance->timemodified = time();
-
-    $DB->update_record('tag_instance', $taginstance);
-
-    return true;
-}
-
-/**
- * Count how many records are tagged with a specific tag.
- *
- * @package core_tag
- * @deprecated since 3.1
- * @param   string   $record_type record to look for ('post', 'user', etc.)
- * @param   int      $tagid       is a single tag id
- * @return  int      number of mathing tags.
- */
-function tag_record_count($record_type, $tagid) {
-    debugging('Method tag_record_count() is deprecated and replaced with core_tag_tag::get($tagid)->count_tagged_items(). '.
-        'Component is now required when retrieving tag instances.', DEBUG_DEVELOPER);
-    return core_tag_tag::get($tagid)->count_tagged_items('', $record_type);
-}
-
-/**
- * Determine if a record is tagged with a specific tag
- *
- * @package core_tag
- * @deprecated since 3.1
- * @param   string   $record_type the record type to look for
- * @param   int      $record_id   the record id to look for
- * @param   string   $tag         a tag name
- * @return  bool/int true if it is tagged, 0 (false) otherwise
- */
-function tag_record_tagged_with($record_type, $record_id, $tag) {
-    debugging('Method tag_record_tagged_with() is deprecated and replaced with core_tag_tag::get($tagid)->is_item_tagged_with(). '.
-        'Component is now required when retrieving tag instances.', DEBUG_DEVELOPER);
-    return core_tag_tag::is_item_tagged_with('', $record_type, $record_id, $tag);
-}
-
-/**
- * Flag a tag as inappropriate.
- *
- * @deprecated since 3.1
- * @param int|array $tagids a single tagid, or an array of tagids
- */
-function tag_set_flag($tagids) {
-    debugging('Function tag_set_flag() is deprecated and replaced with core_tag_tag::get($tagid)->flag().', DEBUG_DEVELOPER);
-    $tagids = (array) $tagids;
-    foreach ($tagids as $tagid) {
-        if ($tag = core_tag_tag::get($tagid, '*')) {
-            $tag->flag();
-        }
-    }
-}
-
-/**
- * Remove the inappropriate flag on a tag.
- *
- * @deprecated since 3.1
- * @param int|array $tagids a single tagid, or an array of tagids
- */
-function tag_unset_flag($tagids) {
-    debugging('Function tag_unset_flag() is deprecated and replaced with core_tag_tag::get($tagid)->reset_flag().', DEBUG_DEVELOPER);
-    $tagids = (array) $tagids;
-    foreach ($tagids as $tagid) {
-        if ($tag = core_tag_tag::get($tagid, '*')) {
-            $tag->reset_flag();
-        }
-    }
-}
-
-/**
- * Prints or returns a HTML tag cloud with varying classes styles depending on the popularity and type of each tag.
- *
- * @deprecated since 3.1
- *
- * @param    array     $tagset Array of tags to display
- * @param    int       $nr_of_tags Limit for the number of tags to return/display, used if $tagset is null
- * @param    bool      $return     if true the function will return the generated tag cloud instead of displaying it.
- * @param    string    $sort (optional) selected sorting, default is alpha sort (name) also timemodified or popularity
- * @return string|null a HTML string or null if this function does the output
- */
-function tag_print_cloud($tagset=null, $nr_of_tags=150, $return=false, $sort='') {
-    global $OUTPUT;
-
-    debugging('Function tag_print_cloud() is deprecated and replaced with function core_tag_collection::get_tag_cloud(), '
-            . 'templateable core_tag\output\tagcloud and template core_tag/tagcloud.', DEBUG_DEVELOPER);
-
-    // Set up sort global - used to pass sort type into core_tag_collection::cloud_sort through usort() avoiding multiple sort functions.
-    if ($sort == 'popularity') {
-        $sort = 'count';
-    } else if ($sort == 'date') {
-        $sort = 'timemodified';
-    } else {
-        $sort = 'name';
-    }
-
-    if (is_null($tagset)) {
-        // No tag set received, so fetch tags from database.
-        // Always add query by tagcollid even when it's not known to make use of the table index.
-        $tagcloud = core_tag_collection::get_tag_cloud(0, false, $nr_of_tags, $sort);
-    } else {
-        $tagsincloud = $tagset;
-
-        $etags = array();
-        foreach ($tagsincloud as $tag) {
-            $etags[] = $tag;
-        }
-
-        core_tag_collection::$cloudsortfield = $sort;
-        usort($tagsincloud, "core_tag_collection::cloud_sort");
-
-        $tagcloud = new \core_tag\output\tagcloud($tagsincloud);
-    }
-
-    $output = $OUTPUT->render_from_template('core_tag/tagcloud', $tagcloud->export_for_template($OUTPUT));
-    if ($return) {
-        return $output;
-    } else {
-        echo $output;
-    }
-}
-
-/**
- * Function that returns tags that start with some text, for use by the autocomplete feature
- *
- * @package core_tag
- * @deprecated since 3.0
- * @access  private
- * @param   string   $text string that the tag names will be matched against
- * @return  mixed    an array of objects, or false if no records were found or an error occured.
- */
-function tag_autocomplete($text) {
-    debugging('Function tag_autocomplete() is deprecated without replacement. ' .
-            'New form element "tags" does proper autocomplete.', DEBUG_DEVELOPER);
-    global $DB;
-    return $DB->get_records_sql("SELECT tg.id, tg.name, tg.rawname
-                                   FROM {tag} tg
-                                  WHERE tg.name LIKE ?", array(core_text::strtolower($text)."%"));
-}
-
-/**
- * Prints a box with the description of a tag and its related tags
- *
- * @package core_tag
- * @deprecated since 3.1
- * @param   stdClass    $tag_object
- * @param   bool        $return     if true the function will return the generated tag cloud instead of displaying it.
- * @return  string/null a HTML box showing a description of the tag object and it's relationsips or null if output is done directly
- *                      in the function.
- */
-function tag_print_description_box($tag_object, $return=false) {
-    global $USER, $CFG, $OUTPUT;
-    require_once($CFG->libdir.'/filelib.php');
-
-    debugging('Function tag_print_description_box() is deprecated without replacement. ' .
-            'See core_tag_renderer for similar code.', DEBUG_DEVELOPER);
-
-    $relatedtags = array();
-    if ($tag = core_tag_tag::get($tag_object->id)) {
-        $relatedtags = $tag->get_related_tags();
-    }
-
-    $content = !empty($tag_object->description);
-    $output = '';
-
-    if ($content) {
-        $output .= $OUTPUT->box_start('generalbox tag-description');
-    }
-
-    if (!empty($tag_object->description)) {
-        $options = new stdClass();
-        $options->para = false;
-        $options->overflowdiv = true;
-        $tag_object->description = file_rewrite_pluginfile_urls($tag_object->description, 'pluginfile.php', context_system::instance()->id, 'tag', 'description', $tag_object->id);
-        $output .= format_text($tag_object->description, $tag_object->descriptionformat, $options);
-    }
-
-    if ($content) {
-        $output .= $OUTPUT->box_end();
-    }
-
-    if ($relatedtags) {
-        $output .= $OUTPUT->tag_list($relatedtags, get_string('relatedtags', 'tag'), 'tag-relatedtags');
-    }
-
-    if ($return) {
-        return $output;
-    } else {
-        echo $output;
-    }
-}
-
-/**
- * Prints a box that contains the management links of a tag
- *
- * @deprecated since 3.1
- * @param  core_tag_tag|stdClass    $tag_object
- * @param  bool        $return     if true the function will return the generated tag cloud instead of displaying it.
- * @return string|null a HTML string or null if this function does the output
- */
-function tag_print_management_box($tag_object, $return=false) {
-    global $USER, $CFG, $OUTPUT;
-
-    debugging('Function tag_print_description_box() is deprecated without replacement. ' .
-            'See core_tag_renderer for similar code.', DEBUG_DEVELOPER);
-
-    $tagname  = core_tag_tag::make_display_name($tag_object);
-    $output = '';
-
-    if (!isguestuser()) {
-        $output .= $OUTPUT->box_start('box','tag-management-box');
-        $systemcontext   = context_system::instance();
-        $links = array();
-
-        // Add a link for users to add/remove this from their interests
-        if (core_tag_tag::is_enabled('core', 'user') && core_tag_area::get_collection('core', 'user') == $tag_object->tagcollid) {
-            if (core_tag_tag::is_item_tagged_with('core', 'user', $USER->id, $tag_object->name)) {
-                $links[] = '<a href="'. $CFG->wwwroot .'/tag/user.php?action=removeinterest&amp;sesskey='. sesskey() .
-                        '&amp;tag='. rawurlencode($tag_object->name) .'">'.
-                        get_string('removetagfrommyinterests', 'tag', $tagname) .'</a>';
-            } else {
-                $links[] = '<a href="'. $CFG->wwwroot .'/tag/user.php?action=addinterest&amp;sesskey='. sesskey() .
-                        '&amp;tag='. rawurlencode($tag_object->name) .'">'.
-                        get_string('addtagtomyinterests', 'tag', $tagname) .'</a>';
-            }
-        }
-
-        // Flag as inappropriate link.  Only people with moodle/tag:flag capability.
-        if (has_capability('moodle/tag:flag', $systemcontext)) {
-            $links[] = '<a href="'. $CFG->wwwroot .'/tag/user.php?action=flaginappropriate&amp;sesskey='.
-                    sesskey() . '&amp;id='. $tag_object->id . '">'. get_string('flagasinappropriate',
-                            'tag', rawurlencode($tagname)) .'</a>';
-        }
-
-        // Edit tag: Only people with moodle/tag:edit capability who either have it as an interest or can manage tags
-        if (has_capability('moodle/tag:edit', $systemcontext) ||
-            has_capability('moodle/tag:manage', $systemcontext)) {
-            $links[] = '<a href="' . $CFG->wwwroot . '/tag/edit.php?id=' . $tag_object->id . '">' .
-                    get_string('edittag', 'tag') . '</a>';
-        }
-
-        $output .= implode(' | ', $links);
-        $output .= $OUTPUT->box_end();
-    }
-
-    if ($return) {
-        return $output;
-    } else {
-        echo $output;
-    }
-}
-
-/**
- * Prints the tag search box
- *
- * @deprecated since 3.1
- * @param  bool        $return if true return html string
- * @return string|null a HTML string or null if this function does the output
- */
-function tag_print_search_box($return=false) {
-    global $CFG, $OUTPUT;
-
-    debugging('Function tag_print_search_box() is deprecated without replacement. ' .
-            'See core_tag_renderer for similar code.', DEBUG_DEVELOPER);
-
-    $query = optional_param('query', '', PARAM_RAW);
-
-    $output = $OUTPUT->box_start('','tag-search-box');
-    $output .= '<form action="'.$CFG->wwwroot.'/tag/search.php" style="display:inline">';
-    $output .= '<div>';
-    $output .= '<label class="accesshide" for="searchform_search">'.get_string('searchtags', 'tag').'</label>';
-    $output .= '<input id="searchform_search" name="query" type="text" size="40" value="'.s($query).'" />';
-    $output .= '<button id="searchform_button" type="submit">'. get_string('search', 'tag') .'</button><br />';
-    $output .= '</div>';
-    $output .= '</form>';
-    $output .= $OUTPUT->box_end();
-
-    if ($return) {
-        return $output;
-    }
-    else {
-        echo $output;
-    }
-}
-
-/**
- * Prints the tag search results
- *
- * @deprecated since 3.1
- * @param string       $query text that tag names will be matched against
- * @param int          $page current page
- * @param int          $perpage nr of users displayed per page
- * @param bool         $return if true return html string
- * @return string|null a HTML string or null if this function does the output
- */
-function tag_print_search_results($query,  $page, $perpage, $return=false) {
-    global $CFG, $USER, $OUTPUT;
-
-    debugging('Function tag_print_search_results() is deprecated without replacement. ' .
-            'In /tag/search.php the search results are printed using the core_tag/tagcloud template.', DEBUG_DEVELOPER);
-
-    $query = clean_param($query, PARAM_TAG);
-
-    $count = count(tag_find_tags($query, false));
-    $tags = array();
-
-    if ( $found_tags = tag_find_tags($query, true,  $page * $perpage, $perpage) ) {
-        $tags = array_values($found_tags);
-    }
-
-    $baseurl = $CFG->wwwroot.'/tag/search.php?query='. rawurlencode($query);
-    $output = '';
-
-    // link "Add $query to my interests"
-    $addtaglink = '';
-    if (core_tag_tag::is_enabled('core', 'user') && !core_tag_tag::is_item_tagged_with('core', 'user', $USER->id, $query)) {
-        $addtaglink = html_writer::link(new moodle_url('/tag/user.php', array('action' => 'addinterest', 'sesskey' => sesskey(),
-            'tag' => $query)), get_string('addtagtomyinterests', 'tag', s($query)));
-    }
-
-    if ( !empty($tags) ) { // there are results to display!!
-        $output .= $OUTPUT->heading(get_string('searchresultsfor', 'tag', htmlspecialchars($query)) ." : {$count}", 3, 'main');
-
-        //print a link "Add $query to my interests"
-        if (!empty($addtaglink)) {
-            $output .= $OUTPUT->box($addtaglink, 'box', 'tag-management-box');
-        }
-
-        $nr_of_lis_per_ul = 6;
-        $nr_of_uls = ceil( sizeof($tags) / $nr_of_lis_per_ul );
-
-        $output .= '<ul id="tag-search-results">';
-        for($i = 0; $i < $nr_of_uls; $i++) {
-            foreach (array_slice($tags, $i * $nr_of_lis_per_ul, $nr_of_lis_per_ul) as $tag) {
-                $output .= '<li>';
-                $tag_link = html_writer::link(core_tag_tag::make_url($tag->tagcollid, $tag->rawname),
-                    core_tag_tag::make_display_name($tag));
-                $output .= $tag_link;
-                $output .= '</li>';
-            }
-        }
-        $output .= '</ul>';
-        $output .= '<div>&nbsp;</div>'; // <-- small layout hack in order to look good in Firefox
-
-        $output .= $OUTPUT->paging_bar($count, $page, $perpage, $baseurl);
-    }
-    else { //no results were found!!
-        $output .= $OUTPUT->heading(get_string('noresultsfor', 'tag', htmlspecialchars($query)), 3, 'main');
-
-        //print a link "Add $query to my interests"
-        if (!empty($addtaglink)) {
-            $output .= $OUTPUT->box($addtaglink, 'box', 'tag-management-box');
-        }
-    }
-
-    if ($return) {
-        return $output;
-    }
-    else {
-        echo $output;
-    }
+ * @deprecated since 3.0
+ */
+function coursetag_get_records() {
+    throw new coding_exception('Function coursetag_get_records() can not be used any more. ' .
+            'Userid is no longer used for tagging courses.');
 }
 
 /**
- * Prints a table of the users tagged with the tag passed as argument
- *
- * @deprecated since 3.1
- * @param  stdClass    $tagobject the tag we wish to return data for
- * @param  int         $limitfrom (optional, required if $limitnum is set) prints users starting at this point.
- * @param  int         $limitnum (optional, required if $limitfrom is set) prints this many users.
- * @param  bool        $return if true return html string
- * @return string|null a HTML string or null if this function does the output
+ * @deprecated since 3.0
  */
-function tag_print_tagged_users_table($tagobject, $limitfrom='', $limitnum='', $return=false) {
-
-    debugging('Function tag_print_tagged_users_table() is deprecated without replacement. ' .
-            'See core_user_renderer for similar code.', DEBUG_DEVELOPER);
-
-    //List of users with this tag
-    $tagobject = core_tag_tag::get($tagobject->id);
-    $userlist = $tagobject->get_tagged_items('core', 'user', $limitfrom, $limitnum);
+function coursetag_store_keywords() {
+    throw new coding_exception('Function coursetag_store_keywords() can not be used any more. ' .
+            'Userid is no longer used for tagging courses.');
+}
 
-    $output = tag_print_user_list($userlist, true);
+/**
+ * @deprecated since 3.0
+ */
+function coursetag_delete_keyword() {
+    throw new coding_exception('Function coursetag_delete_keyword() can not be used any more. ' .
+            'Userid is no longer used for tagging courses.');
+}
 
-    if ($return) {
-        return $output;
-    }
-    else {
-        echo $output;
-    }
+/**
+ * @deprecated since 3.0
+ */
+function coursetag_get_tagged_courses() {
+    throw new coding_exception('Function coursetag_get_tagged_courses() can not be used any more. ' .
+            'Userid is no longer used for tagging courses.');
 }
 
 /**
- * Prints an individual user box
- *
- * @deprecated since 3.1
- * @param user_object  $user  (contains the following fields: id, firstname, lastname and picture)
- * @param bool         $return if true return html string
- * @return string|null a HTML string or null if this function does the output
+ * @deprecated since 3.0
  */
-function tag_print_user_box($user, $return=false) {
-    global $CFG, $OUTPUT;
+function coursetag_delete_course_tags() {
+    throw new coding_exception('Function coursetag_delete_course_tags() is deprecated. ' .
+            'Use core_tag_tag::remove_all_item_tags().');
+}
 
-    debugging('Function tag_print_user_box() is deprecated without replacement. ' .
-            'See core_user_renderer for similar code.', DEBUG_DEVELOPER);
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get($tagid)->update() instead
+ */
+function tag_type_set() {
+    throw new coding_exception('tag_type_set() can not be used anymore. Please use ' .
+        'core_tag_tag::get($tagid)->update().');
+}
 
-    $usercontext = context_user::instance($user->id);
-    $profilelink = '';
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get($tagid)->update() instead
+ */
+function tag_description_set() {
+    throw new coding_exception('tag_description_set() can not be used anymore. Please use ' .
+        'core_tag_tag::get($tagid)->update().');
+}
 
-    if ($usercontext and (has_capability('moodle/user:viewdetails', $usercontext) || has_coursecontact_role($user->id))) {
-        $profilelink = $CFG->wwwroot .'/user/view.php?id='. $user->id;
-    }
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get_item_tags() instead
+ */
+function tag_get_tags() {
+    throw new coding_exception('tag_get_tags() can not be used anymore. Please use ' .
+        'core_tag_tag::get_item_tags().');
+}
 
-    $output = $OUTPUT->box_start('user-box', 'user'. $user->id);
-    $fullname = fullname($user);
-    $alt = '';
+/**
+ * @deprecated since 3.1
+ */
+function tag_get_tags_array() {
+    throw new coding_exception('tag_get_tags_array() can not be used anymore. Please use ' .
+        'core_tag_tag::get_item_tags_array().');
+}
 
-    if (!empty($profilelink)) {
-        $output .= '<a href="'. $profilelink .'">';
-        $alt = $fullname;
-    }
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get_item_tags_array() or $OUTPUT->tag_list(core_tag_tag::get_item_tags())
+ */
+function tag_get_tags_csv() {
+    throw new coding_exception('tag_get_tags_csv() can not be used anymore. Please use ' .
+        'core_tag_tag::get_item_tags_array() or $OUTPUT->tag_list(core_tag_tag::get_item_tags()).');
+}
 
-    $output .= $OUTPUT->user_picture($user, array('size'=>100));
-    $output .= '<br />';
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get_item_tags() instead
+ */
+function tag_get_tags_ids() {
+    throw new coding_exception('tag_get_tags_ids() can not be used anymore. Please consider using ' .
+        'core_tag_tag::get_item_tags() or similar methods.');
+}
 
-    if (!empty($profilelink)) {
-        $output .= '</a>';
-    }
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get_by_name() or core_tag_tag::get_by_name_bulk()
+ */
+function tag_get_id() {
+    throw new coding_exception('tag_get_id() can not be used anymore. Please use ' .
+        'core_tag_tag::get_by_name() or core_tag_tag::get_by_name_bulk()');
+}
 
-    //truncate name if it's too big
-    if (core_text::strlen($fullname) > 26) {
-        $fullname = core_text::substr($fullname, 0, 26) .'...';
-    }
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get($tagid)->update() instead
+ */
+function tag_rename() {
+    throw new coding_exception('tag_rename() can not be used anymore. Please use ' .
+        'core_tag_tag::get($tagid)->update()');
+}
 
-    $output .= '<strong>'. $fullname .'</strong>';
-    $output .= $OUTPUT->box_end();
+/**
+ * @deprecated since 3.1. Use core_tag_tag::remove_item_tag() instead
+ */
+function tag_delete_instance() {
+    throw new coding_exception('tag_delete_instance() can not be used anymore. Please use ' .
+        'core_tag_tag::remove_item_tag()');
+}
 
-    if ($return) {
-        return $output;
-    }
-    else {
-        echo $output;
-    }
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get_by_name()->get_tagged_items() instead
+ */
+function tag_find_records() {
+    throw new coding_exception('tag_find_records() can not be used anymore. Please use ' .
+        'core_tag_tag::get_by_name()->get_tagged_items()');
 }
 
 /**
- * Prints a list of users
- *
  * @deprecated since 3.1
- * @param  array       $userlist an array of user objects
- * @param  bool        $return if true return html string, otherwise output the result
- * @return string|null a HTML string or null if this function does the output
  */
-function tag_print_user_list($userlist, $return=false) {
+function tag_add() {
+    throw new coding_exception('tag_add() can not be used anymore. You can use ' .
+        'core_tag_tag::create_if_missing(), however it should not be necessary since tags are ' .
+        'created automatically when assigned to items');
+}
 
-    debugging('Function tag_print_user_list() is deprecated without replacement. ' .
-            'See core_user_renderer for similar code.', DEBUG_DEVELOPER);
+/**
+ * @deprecated since 3.1. Use core_tag_tag::set_item_tags() or core_tag_tag::add_item_tag() instead
+ */
+function tag_assign() {
+    throw new coding_exception('tag_assign() can not be used anymore. Please use ' .
+        'core_tag_tag::set_item_tags() or core_tag_tag::add_item_tag() instead. Tag instance ' .
+        'ordering should not be set manually');
+}
 
-    $output = '<div><ul class="inline-list">';
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get($tagid)->count_tagged_items() instead
+ */
+function tag_record_count() {
+    throw new coding_exception('tag_record_count() can not be used anymore. Please use ' .
+        'core_tag_tag::get($tagid)->count_tagged_items().');
+}
 
-    foreach ($userlist as $user){
-        $output .= '<li>'. tag_print_user_box($user, true) ."</li>\n";
-    }
-    $output .= "</ul></div>\n";
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get($tagid)->is_item_tagged_with() instead
+ */
+function tag_record_tagged_with() {
+    throw new coding_exception('tag_record_tagged_with() can not be used anymore. Please use ' .
+        'core_tag_tag::get($tagid)->is_item_tagged_with().');
+}
 
-    if ($return) {
-        return $output;
-    }
-    else {
-        echo $output;
-    }
+/**
+ * @deprecated since 3.1. Use core_tag_tag::get($tagid)->flag() instead
+ */
+function tag_set_flag() {
+    throw new coding_exception('tag_set_flag() can not be used anymore. Please use ' .
+        'core_tag_tag::get($tagid)->flag()');
 }
 
 /**
- * Function that returns the name that should be displayed for a specific tag
- *
- * @package  core_tag
- * @category tag
- * @deprecated since 3.1
- * @param    stdClass|core_tag_tag   $tagobject a line out of tag table, as returned by the adobd functions
- * @param    int      $html TAG_RETURN_HTML (default) will return htmlspecialchars encoded string, TAG_RETURN_TEXT will not encode.
- * @return   string
+ * @deprecated since 3.1. Use core_tag_tag::get($tagid)->reset_flag() instead
  */
-function tag_display_name($tagobject, $html=TAG_RETURN_HTML) {
-    debugging('Function tag_display_name() is deprecated. Use core_tag_tag::make_display_name().', DEBUG_DEVELOPER);
-    if (!isset($tagobject->name)) {
-        return '';
-    }
-    return core_tag_tag::make_display_name($tagobject, $html != TAG_RETURN_TEXT);
+function tag_unset_flag() {
+    throw new coding_exception('tag_unset_flag() can not be used anymore. Please use ' .
+        'core_tag_tag::get($tagid)->reset_flag()');
 }
 
 /**
- * Function that normalizes a list of tag names.
- *
- * @package core_tag
  * @deprecated since 3.1
- * @param   array/string $rawtags array of tags, or a single tag.
- * @param   int          $case    case to use for returned value (default: lower case). Either TAG_CASE_LOWER (default) or TAG_CASE_ORIGINAL
- * @return  array        lowercased normalized tags, indexed by the normalized tag, in the same order as the original array.
- *                       (Eg: 'Banana' => 'banana').
  */
-function tag_normalize($rawtags, $case = TAG_CASE_LOWER) {
-    debugging('Function tag_normalize() is deprecated. Use core_tag_tag::normalize().', DEBUG_DEVELOPER);
-
-    if ( !is_array($rawtags) ) {
-        $rawtags = array($rawtags);
-    }
+function tag_print_cloud() {
+    throw new coding_exception('tag_print_cloud() can not be used anymore. Please use ' .
+        'core_tag_collection::get_tag_cloud(), templateable core_tag\output\tagcloud and ' .
+        'template core_tag/tagcloud.');
+}
 
-    return core_tag_tag::normalize($rawtags, $case == TAG_CASE_LOWER);
+/**
+ * @deprecated since 3.0
+ */
+function tag_autocomplete() {
+    throw new coding_exception('tag_autocomplete() can not be used anymore. New form ' .
+        'element "tags" does proper autocomplete.');
 }
 
 /**
- * Get a comma-separated list of tags related to another tag.
- *
- * @package  core_tag
  * @deprecated since 3.1
- * @param    array    $related_tags the array returned by tag_get_related_tags
- * @param    int      $html    either TAG_RETURN_HTML (default) or TAG_RETURN_TEXT : return html links, or just text.
- * @return   string   comma-separated list
  */
-function tag_get_related_tags_csv($related_tags, $html=TAG_RETURN_HTML) {
-    global $OUTPUT;
-    debugging('Method tag_get_related_tags_csv() is deprecated. Consider '
-            . 'looping through array or using $OUTPUT->tag_list(core_tag_tag::get_item_tags())',
-        DEBUG_DEVELOPER);
-    if ($html != TAG_RETURN_TEXT) {
-        return $OUTPUT->tag_list($related_tags, '');
-    }
-
-    $tagsnames = array();
-    foreach ($related_tags as $tag) {
-        $tagsnames[] = core_tag_tag::make_display_name($tag, false);
-    }
-    return implode(', ', $tagsnames);
+function tag_print_description_box() {
+    throw new coding_exception('tag_print_description_box() can not be used anymore. ' .
+        'See core_tag_renderer for similar code');
 }
 
 /**
- * Used to require that the return value from a function is an array.
- * Only used in the deprecated function {@link tag_get_id()}
  * @deprecated since 3.1
  */
-define('TAG_RETURN_ARRAY', 0);
+function tag_print_management_box() {
+    throw new coding_exception('tag_print_management_box() can not be used anymore. ' .
+        'See core_tag_renderer for similar code');
+}
+
 /**
- * Used to require that the return value from a function is an object.
- * Only used in the deprecated function {@link tag_get_id()}
  * @deprecated since 3.1
  */
-define('TAG_RETURN_OBJECT', 1);
+function tag_print_search_box() {
+    throw new coding_exception('tag_print_search_box() can not be used anymore. ' .
+        'See core_tag_renderer for similar code');
+}
+
 /**
- * Use to specify that HTML free text is expected to be returned from a function.
- * Only used in deprecated functions {@link tag_get_tags_csv()}, {@link tag_display_name()},
- * {@link tag_get_related_tags_csv()}
  * @deprecated since 3.1
  */
-define('TAG_RETURN_TEXT', 2);
+function tag_print_search_results() {
+    throw new coding_exception('tag_print_search_results() can not be used anymore. ' .
+        'In /tag/search.php the search results are printed using the core_tag/tagcloud template.');
+}
+
 /**
- * Use to specify that encoded HTML is expected to be returned from a function.
- * Only used in deprecated functions {@link tag_get_tags_csv()}, {@link tag_display_name()},
- * {@link tag_get_related_tags_csv()}
  * @deprecated since 3.1
  */
-define('TAG_RETURN_HTML', 3);
+function tag_print_tagged_users_table() {
+    throw new coding_exception('tag_print_tagged_users_table() can not be used anymore. ' .
+        'See core_user_renderer for similar code');
+}
 
 /**
- * Used to specify that we wish a lowercased string to be returned
- * Only used in deprecated function {@link tag_normalize()}
  * @deprecated since 3.1
  */
-define('TAG_CASE_LOWER', 0);
+function tag_print_user_box() {
+    throw new coding_exception('tag_print_user_box() can not be used anymore. ' .
+        'See core_user_renderer for similar code');
+}
+
 /**
- * Used to specify that we do not wish the case of the returned string to change
- * Only used in deprecated function {@link tag_normalize()}
  * @deprecated since 3.1
  */
-define('TAG_CASE_ORIGINAL', 1);
+function tag_print_user_list() {
+    throw new coding_exception('tag_print_user_list() can not be used anymore. ' .
+        'See core_user_renderer for similar code');
+}
 
 /**
- * Used to specify that we want all related tags returned, no matter how they are related.
- * Only used in deprecated function {@link tag_get_related_tags()}
  * @deprecated since 3.1
  */
-define('TAG_RELATED_ALL', 0);
+function tag_display_name() {
+    throw new coding_exception('tag_display_name() can not be used anymore. Please use ' .
+        'core_tag_tag::make_display_name().');
+
+}
+
 /**
- * Used to specify that we only want back tags that were manually related.
- * Only used in deprecated function {@link tag_get_related_tags()}
  * @deprecated since 3.1
  */
-define('TAG_RELATED_MANUAL', 1);
+function tag_normalize() {
+    throw new coding_exception('tag_normalize() can not be used anymore. Please use ' .
+        'core_tag_tag::normalize().');
+}
+
 /**
- * Used to specify that we only want back tags where the relationship was automatically correlated.
- * Only used in deprecated function {@link tag_get_related_tags()}
  * @deprecated since 3.1
  */
-define('TAG_RELATED_CORRELATED', 2);
+function tag_get_related_tags_csv() {
+    throw new coding_exception('tag_get_related_tags_csv() can not be used anymore. Please ' .
+        'consider looping through array or using $OUTPUT->tag_list(core_tag_tag::get_item_tags()).');
+}
 
 /**
- * Set the tags assigned to a record.  This overwrites the current tags.
- *
- * This function is meant to be fed the string coming up from the user interface, which contains all tags assigned to a record.
- *
- * Due to API change $component and $contextid are now required. Instead of
- * calling  this function you can use {@link core_tag_tag::set_item_tags()} or
- * {@link core_tag_tag::set_related_tags()}
- *
- * @package core_tag
  * @deprecated since 3.1
- * @param string $itemtype the type of record to tag ('post' for blogs, 'user' for users, 'tag' for tags, etc.)
- * @param int $itemid the id of the record to tag
- * @param array $tags the array of tags to set on the record. If given an empty array, all tags will be removed.
- * @param string|null $component the component that was tagged
- * @param int|null $contextid the context id of where this tag was assigned
- * @return bool|null
- */
-function tag_set($itemtype, $itemid, $tags, $component = null, $contextid = null) {
-    debugging('Function tag_set() is deprecated. Use ' .
-        ' core_tag_tag::set_item_tags() instead', DEBUG_DEVELOPER);
-
-    if ($itemtype === 'tag') {
-        return core_tag_tag::get($itemid, '*', MUST_EXIST)->set_related_tags($tags);
-    } else {
-        $context = $contextid ? context::instance_by_id($contextid) : context_system::instance();
-        return core_tag_tag::set_item_tags($component, $itemtype, $itemid, $context, $tags);
-    }
+ */
+function tag_set() {
+    throw new coding_exception('tag_set() can not be used anymore. Please use ' .
+        'core_tag_tag::set_item_tags().');
 }
 
 /**
- * Adds a tag to a record, without overwriting the current tags.
- *
- * This function remains here for backward compatiblity. It is recommended to use
- * {@link core_tag_tag::add_item_tag()} or {@link core_tag_tag::add_related_tags()} instead
- *
- * @package core_tag
  * @deprecated since 3.1
- * @param string $itemtype the type of record to tag ('post' for blogs, 'user' for users, etc.)
- * @param int $itemid the id of the record to tag
- * @param string $tag the tag to add
- * @param string|null $component the component that was tagged
- * @param int|null $contextid the context id of where this tag was assigned
- * @return bool|null
- */
-function tag_set_add($itemtype, $itemid, $tag, $component = null, $contextid = null) {
-    debugging('Function tag_set_add() is deprecated. Use ' .
-        ' core_tag_tag::add_item_tag() instead', DEBUG_DEVELOPER);
-
-    if ($itemtype === 'tag') {
-        return core_tag_tag::get($itemid, '*', MUST_EXIST)->add_related_tags(array($tag));
-    } else {
-        $context = $contextid ? context::instance_by_id($contextid) : context_system::instance();
-        return core_tag_tag::add_item_tag($component, $itemtype, $itemid, $context, $tag);
-    }
+ */
+function tag_set_add() {
+    throw new coding_exception('tag_set_add() can not be used anymore. Please use ' .
+        'core_tag_tag::add_item_tag().');
 }
 
 /**
- * Removes a tag from a record, without overwriting other current tags.
- *
- * This function remains here for backward compatiblity. It is recommended to use
- * {@link core_tag_tag::remove_item_tag()} instead
- *
- * @package core_tag
  * @deprecated since 3.1
- * @param string $itemtype the type of record to tag ('post' for blogs, 'user' for users, etc.)
- * @param int $itemid the id of the record to tag
- * @param string $tag the tag to delete
- * @param string|null $component the component that was tagged
- * @param int|null $contextid the context id of where this tag was assigned
- * @return bool|null
  */
-function tag_set_delete($itemtype, $itemid, $tag, $component = null, $contextid = null) {
-    debugging('Function tag_set_delete() is deprecated. Use ' .
-        ' core_tag_tag::remove_item_tag() instead', DEBUG_DEVELOPER);
-    return core_tag_tag::remove_item_tag($component, $itemtype, $itemid, $tag);
+function tag_set_delete() {
+    throw new coding_exception('tag_set_delete() can not be used anymore. Please use ' .
+        'core_tag_tag::remove_item_tag().');
 }
 
 /**
- * Simple function to just return a single tag object when you know the name or something
- *
- * See also {@link core_tag_tag::get()} and {@link core_tag_tag::get_by_name()}
- *
- * @package  core_tag
  * @deprecated since 3.1
- * @param    string $field        which field do we use to identify the tag: id, name or rawname
- * @param    string $value        the required value of the aforementioned field
- * @param    string $returnfields which fields do we want returned. This is a comma seperated string containing any combination of
- *                                'id', 'name', 'rawname' or '*' to include all fields.
- * @return   mixed  tag object
  */
-function tag_get($field, $value, $returnfields='id, name, rawname, tagcollid') {
-    global $DB;
-    debugging('Function tag_get() is deprecated. Use ' .
-        ' core_tag_tag::get() or core_tag_tag::get_by_name()',
-        DEBUG_DEVELOPER);
-    if ($field === 'id') {
-        $tag = core_tag_tag::get((int)$value, $returnfields);
-    } else if ($field === 'name') {
-        $tag = core_tag_tag::get_by_name(0, $value, $returnfields);
-    } else {
-        $params = array($field => $value);
-        return $DB->get_record('tag', $params, $returnfields);
-    }
-    if ($tag) {
-        return $tag->to_object();
-    }
-    return null;
+function tag_get() {
+    throw new coding_exception('tag_get() can not be used anymore. Please use ' .
+        'core_tag_tag::get() or core_tag_tag::get_by_name().');
 }
 
 /**
- * Returns tags related to a tag
- *
- * Related tags of a tag come from two sources:
- *   - manually added related tags, which are tag_instance entries for that tag
- *   - correlated tags, which are calculated
- *
- * @package  core_tag
  * @deprecated since 3.1
- * @param    string   $tagid          is a single **normalized** tag name or the id of a tag
- * @param    int      $type           the function will return either manually (TAG_RELATED_MANUAL) related tags or correlated
- *                                    (TAG_RELATED_CORRELATED) tags. Default is TAG_RELATED_ALL, which returns everything.
- * @param    int      $limitnum       (optional) return a subset comprising this many records, the default is 10
- * @return   array    an array of tag objects
- */
-function tag_get_related_tags($tagid, $type=TAG_RELATED_ALL, $limitnum=10) {
-    debugging('Method tag_get_related_tags() is deprecated, '
-        . 'use core_tag_tag::get_correlated_tags(), core_tag_tag::get_related_tags() or '
-        . 'core_tag_tag::get_manual_related_tags()', DEBUG_DEVELOPER);
-    $result = array();
-    if ($tag = core_tag_tag::get($tagid)) {
-        if ($type == TAG_RELATED_CORRELATED) {
-            $tags = $tag->get_correlated_tags();
-        } else if ($type == TAG_RELATED_MANUAL) {
-            $tags = $tag->get_manual_related_tags();
-        } else {
-            $tags = $tag->get_related_tags();
-        }
-        $tags = array_slice($tags, 0, $limitnum);
-        foreach ($tags as $id => $tag) {
-            $result[$id] = $tag->to_object();
-        }
-    }
-    return $result;
+ */
+function tag_get_related_tags() {
+    throw new coding_exception('tag_get_related_tags() can not be used anymore. Please use ' .
+        'core_tag_tag::get_correlated_tags(), core_tag_tag::get_related_tags() or ' .
+        'core_tag_tag::get_manual_related_tags().');
 }
 
 /**
- * Delete one or more tag, and all their instances if there are any left.
- *
- * @package  core_tag
  * @deprecated since 3.1
- * @param    mixed    $tagids one tagid (int), or one array of tagids to delete
- * @return   bool     true on success, false otherwise
  */
-function tag_delete($tagids) {
-    debugging('Method tag_delete() is deprecated, use core_tag_tag::delete_tags()',
-        DEBUG_DEVELOPER);
-    return core_tag_tag::delete_tags($tagids);
+function tag_delete() {
+    throw new coding_exception('tag_delete() can not be used anymore. Please use ' .
+        'core_tag_tag::delete_tags().');
 }
 
 /**
- * Deletes all the tag instances given a component and an optional contextid.
- *
  * @deprecated since 3.1
- * @param string $component
- * @param int $contextid if null, then we delete all tag instances for the $component
  */
-function tag_delete_instances($component, $contextid = null) {
-    debugging('Method tag_delete() is deprecated, use core_tag_tag::delete_instances()',
-        DEBUG_DEVELOPER);
-    core_tag_tag::delete_instances($component, null, $contextid);
+function tag_delete_instances() {
+    throw new coding_exception('tag_delete_instances() can not be used anymore. Please use ' .
+        'core_tag_tag::delete_instances().');
 }
 
 /**
- * Clean up the tag tables, making sure all tagged object still exists.
- *
- * This should normally not be necessary, but in case related tags are not deleted when the tagged record is removed, this should be
- * done once in a while, perhaps on an occasional cron run.  On a site with lots of tags, this could become an expensive function to
- * call: don't run at peak time.
- *
- * @package core_tag
  * @deprecated since 3.1
  */
 function tag_cleanup() {
-    debugging('Method tag_cleanup() is deprecated, use \core\task\tag_cron_task::cleanup()',
-        DEBUG_DEVELOPER);
-
-    $task = new \core\task\tag_cron_task();
-    return $task->cleanup();
+    throw new coding_exception('tag_cleanup() can not be used anymore. Please use ' .
+        '\core\task\tag_cron_task::cleanup().');
 }
 
 /**
- * This function will delete numerous tag instances efficiently.
- * This removes tag instances only. It doesn't check to see if it is the last use of a tag.
- *
  * @deprecated since 3.1
- * @param array $instances An array of tag instance objects with the addition of the tagname and tagrawname
- *        (used for recording a delete event).
  */
-function tag_bulk_delete_instances($instances) {
-    debugging('Method tag_bulk_delete_instances() is deprecated, '
-        . 'use \core\task\tag_cron_task::bulk_delete_instances()',
-        DEBUG_DEVELOPER);
+function tag_bulk_delete_instances() {
+    throw new coding_exception('tag_bulk_delete_instances() can not be used anymore. Please use ' .
+        '\core\task\tag_cron_task::bulk_delete_instances().');
 
-    $task = new \core\task\tag_cron_task();
-    return $task->bulk_delete_instances($instances);
 }
 
 /**
- * Calculates and stores the correlated tags of all tags. The correlations are stored in the 'tag_correlation' table.
- *
- * Two tags are correlated if they appear together a lot. Ex.: Users tagged with "computers" will probably also be tagged with "algorithms".
- *
- * The rationale for the 'tag_correlation' table is performance. It works as a cache for a potentially heavy load query done at the
- * 'tag_instance' table. So, the 'tag_correlation' table stores redundant information derived from the 'tag_instance' table.
- *
- * @package core_tag
  * @deprecated since 3.1
- * @param   int      $mincorrelation Only tags with more than $mincorrelation correlations will be identified.
  */
-function tag_compute_correlations($mincorrelation = 2) {
-    debugging('Method tag_compute_correlations() is deprecated, '
-        . 'use \core\task\tag_cron_task::compute_correlations()',
-        DEBUG_DEVELOPER);
-
-    $task = new \core\task\tag_cron_task();
-    return $task->compute_correlations($mincorrelation);
+function tag_compute_correlations() {
+    throw new coding_exception('tag_compute_correlations() can not be used anymore. Please use ' .
+        'use \core\task\tag_cron_task::compute_correlations().');
 }
 
 /**
- * This function processes a tag correlation and makes changes in the database as required.
- *
- * The tag correlation object needs have both a tagid property and a correlatedtags property that is an array.
- *
- * @package core_tag
  * @deprecated since 3.1
- * @param   stdClass $tagcorrelation
- * @return  int/bool The id of the tag correlation that was just processed or false.
  */
-function tag_process_computed_correlation(stdClass $tagcorrelation) {
-    debugging('Method tag_process_computed_correlation() is deprecated, '
-        . 'use \core\task\tag_cron_task::process_computed_correlation()',
-        DEBUG_DEVELOPER);
-
-    $task = new \core\task\tag_cron_task();
-    return $task->process_computed_correlation($tagcorrelation);
+function tag_process_computed_correlation() {
+    throw new coding_exception('tag_process_computed_correlation() can not be used anymore. Please use ' .
+        'use \core\task\tag_cron_task::process_computed_correlation().');
 }
 
 /**
- * Tasks that should be performed at cron time
- *
- * @package core_tag
  * @deprecated since 3.1
  */
 function tag_cron() {
-    debugging('Method tag_cron() is deprecated, use \core\task\tag_cron_task::execute()',
-        DEBUG_DEVELOPER);
-
-    $task = new \core\task\tag_cron_task();
-    $task->execute();
+    throw new coding_exception('tag_cron() can not be used anymore. Please use ' .
+        'use \core\task\tag_cron_task::execute().');
 }
 
 /**
- * Search for tags with names that match some text
- *
- * @package core_tag
  * @deprecated since 3.1
- * @param   string        $text      escaped string that the tag names will be matched against
- * @param   bool          $ordered   If true, tags are ordered by their popularity. If false, no ordering.
- * @param   int/string    $limitfrom (optional, required if $limitnum is set) return a subset of records, starting at this point.
- * @param   int/string    $limitnum  (optional, required if $limitfrom is set) return a subset comprising this many records.
- * @param   int           $tagcollid
- * @return  array/boolean an array of objects, or false if no records were found or an error occured.
- */
-function tag_find_tags($text, $ordered=true, $limitfrom='', $limitnum='', $tagcollid = null) {
-    debugging('Method tag_find_tags() is deprecated without replacement', DEBUG_DEVELOPER);
-    global $DB;
-
-    $text = core_text::strtolower(clean_param($text, PARAM_TAG));
-
-    list($sql, $params) = $DB->get_in_or_equal($tagcollid ? array($tagcollid) :
-        array_keys(core_tag_collection::get_collections(true)));
-    array_unshift($params, "%{$text}%");
-
-    if ($ordered) {
-        $query = "SELECT tg.id, tg.name, tg.rawname, tg.tagcollid, COUNT(ti.id) AS count
-                    FROM {tag} tg LEFT JOIN {tag_instance} ti ON tg.id = ti.tagid
-                   WHERE tg.name LIKE ? AND tg.tagcollid $sql
-                GROUP BY tg.id, tg.name, tg.rawname
-                ORDER BY count DESC";
-    } else {
-        $query = "SELECT tg.id, tg.name, tg.rawname, tg.tagcollid
-                    FROM {tag} tg
-                   WHERE tg.name LIKE ? AND tg.tagcollid $sql";
-    }
-    return $DB->get_records_sql($query, $params, $limitfrom , $limitnum);
+ */
+function tag_find_tags() {
+    throw new coding_exception('tag_find_tags() can not be used anymore.');
 }
 
 /**
- * Get the name of a tag
- *
- * @package core_tag
  * @deprecated since 3.1
- * @param   mixed    $tagids the id of the tag, or an array of ids
- * @return  mixed    string name of one tag, or id-indexed array of strings
  */
-function tag_get_name($tagids) {
-    debugging('Method tag_get_name() is deprecated without replacement', DEBUG_DEVELOPER);
-    global $DB;
-
-    if (!is_array($tagids)) {
-        if ($tag = $DB->get_record('tag', array('id'=>$tagids))) {
-            return $tag->name;
-        }
-        return false;
-    }
-
-    $tag_names = array();
-    foreach($DB->get_records_list('tag', 'id', $tagids) as $tag) {
-        $tag_names[$tag->id] = $tag->name;
-    }
-
-    return $tag_names;
+function tag_get_name() {
+    throw new coding_exception('tag_get_name() can not be used anymore.');
 }
 
 /**
- * Returns the correlated tags of a tag, retrieved from the tag_correlation table. Make sure cron runs, otherwise the table will be
- * empty and this function won't return anything.
- *
- * Correlated tags are calculated in cron based on existing tag instances.
- *
- * @package core_tag
  * @deprecated since 3.1
- * @param   int      $tagid   is a single tag id
- * @param   int      $notused  this argument is no longer used
- * @return  array    an array of tag objects or an empty if no correlated tags are found
  */
-function tag_get_correlated($tagid, $notused = null) {
-    debugging('Method tag_get_correlated() is deprecated, '
-        . 'use core_tag_tag::get_correlated_tags()', DEBUG_DEVELOPER);
-    $result = array();
-    if ($tag = core_tag_tag::get($tagid)) {
-        $tags = $tag->get_correlated_tags(true);
-        // Convert to objects for backward-compatibility.
-        foreach ($tags as $id => $tag) {
-            $result[$id] = $tag->to_object();
-        }
-    }
-    return $result;
+function tag_get_correlated() {
+    throw new coding_exception('tag_get_correlated() can not be used anymore. Please use ' .
+        'use core_tag_tag::get_correlated_tags().');
+
 }
 
 /**
- * This function is used by print_tag_cloud, to usort() the tags in the cloud. See php.net/usort for the parameters documentation.
- * This was originally in blocks/blog_tags/block_blog_tags.php, named blog_tags_sort().
- *
- * @package core_tag
  * @deprecated since 3.1
- * @param   string $a Tag name to compare against $b
- * @param   string $b Tag name to compare against $a
- * @return  int    The result of the comparison/validation 1, 0 or -1
  */
-function tag_cloud_sort($a, $b) {
-    debugging('Method tag_cloud_sort() is deprecated, similar method can be found in core_tag_collection::cloud_sort()', DEBUG_DEVELOPER);
-    global $CFG;
-
-    if (empty($CFG->tagsort)) {
-        $tagsort = 'name'; // by default, sort by name
-    } else {
-        $tagsort = $CFG->tagsort;
-    }
-
-    if (is_numeric($a->$tagsort)) {
-        return ($a->$tagsort == $b->$tagsort) ? 0 : ($a->$tagsort > $b->$tagsort) ? 1 : -1;
-    } elseif (is_string($a->$tagsort)) {
-        return strcmp($a->$tagsort, $b->$tagsort);
-    } else {
-        return 0;
-    }
+function tag_cloud_sort() {
+    throw new coding_exception('tag_cloud_sort() can not be used anymore. Similar method can ' .
+        'be found in core_tag_collection::cloud_sort().');
 }
 
 /**
@@ -3978,162 +2660,50 @@ function events_pending_count($eventname) {
 }
 
 /**
- * Emails admins about a clam outcome
- *
  * @deprecated since Moodle 3.0 - this is a part of clamav plugin now.
- * @param string $notice The body of the email to be sent.
- * @return void
  */
-function clam_message_admins($notice) {
-    debugging('clam_message_admins() is deprecated, please use message_admins() method of \antivirus_clamav\scanner class.', DEBUG_DEVELOPER);
-
-    $antivirus = \core\antivirus\manager::get_antivirus('clamav');
-    $antivirus->message_admins($notice);
+function clam_message_admins() {
+    throw new coding_exception('clam_message_admins() can not be used anymore. Please use ' .
+        'message_admins() method of \antivirus_clamav\scanner class.');
 }
 
 /**
- * Returns the string equivalent of a numeric clam error code
- *
  * @deprecated since Moodle 3.0 - this is a part of clamav plugin now.
- * @param int $returncode The numeric error code in question.
- * @return string The definition of the error code
  */
-function get_clam_error_code($returncode) {
-    debugging('get_clam_error_code() is deprecated, please use get_clam_error_code() method of \antivirus_clamav\scanner class.', DEBUG_DEVELOPER);
-
-    $antivirus = \core\antivirus\manager::get_antivirus('clamav');
-    return $antivirus->get_clam_error_code($returncode);
+function get_clam_error_code() {
+    throw new coding_exception('get_clam_error_code() can not be used anymore. Please use ' .
+        'get_clam_error_code() method of \antivirus_clamav\scanner class.');
 }
 
 /**
- * Returns the rename action.
- *
  * @deprecated since 3.1
- * @param cm_info $mod The module to produce editing buttons for
- * @param int $sr The section to link back to (used for creating the links)
- * @return The markup for the rename action, or an empty string if not available.
  */
-function course_get_cm_rename_action(cm_info $mod, $sr = null) {
-    global $COURSE, $OUTPUT;
-
-    static $str;
-    static $baseurl;
-
-    debugging('Function course_get_cm_rename_action() is deprecated. Please use inplace_editable ' .
-        'https://docs.moodle.org/dev/Inplace_editable', DEBUG_DEVELOPER);
-
-    $modcontext = context_module::instance($mod->id);
-    $hasmanageactivities = has_capability('moodle/course:manageactivities', $modcontext);
-
-    if (!isset($str)) {
-        $str = get_strings(array('edittitle'));
-    }
+function course_get_cm_rename_action() {
+    throw new coding_exception('course_get_cm_rename_action() can not be used anymore. Please use ' .
+        'inplace_editable https://docs.moodle.org/dev/Inplace_editable.');
 
-    if (!isset($baseurl)) {
-        $baseurl = new moodle_url('/course/mod.php', array('sesskey' => sesskey()));
-    }
-
-    if ($sr !== null) {
-        $baseurl->param('sr', $sr);
-    }
-
-    // AJAX edit title.
-    if ($mod->has_view() && $hasmanageactivities && course_ajax_enabled($COURSE) &&
-        (($mod->course == $COURSE->id) || ($mod->course == SITEID))) {
-        // we will not display link if we are on some other-course page (where we should not see this module anyway)
-        return html_writer::span(
-            html_writer::link(
-                new moodle_url($baseurl, array('update' => $mod->id)),
-                $OUTPUT->pix_icon('t/editstring', '', 'moodle', array('class' => 'iconsmall visibleifjs', 'title' => '')),
-                array(
-                    'class' => 'editing_title',
-                    'data-action' => 'edittitle',
-                    'title' => $str->edittitle,
-                )
-            )
-        );
-    }
-    return '';
 }
 
-/*
- * This function returns the number of activities using the given scale in the given course.
- *
+/**
  * @deprecated since Moodle 3.1
- * @param int $courseid The course ID to check.
- * @param int $scaleid The scale ID to check
- * @return int
  */
-function course_scale_used($courseid, $scaleid) {
-    global $CFG, $DB;
-
-    debugging('course_scale_used() is deprecated and never used, plugins can implement <modname>_scale_used_anywhere, '.
-        'all implementations of <modname>_scale_used are now ignored', DEBUG_DEVELOPER);
-
-    $return = 0;
-
-    if (!empty($scaleid)) {
-        if ($cms = get_course_mods($courseid)) {
-            foreach ($cms as $cm) {
-                // Check cm->name/lib.php exists.
-                if (file_exists($CFG->dirroot.'/mod/'.$cm->modname.'/lib.php')) {
-                    include_once($CFG->dirroot.'/mod/'.$cm->modname.'/lib.php');
-                    $functionname = $cm->modname.'_scale_used';
-                    if (function_exists($functionname)) {
-                        if ($functionname($cm->instance, $scaleid)) {
-                            $return++;
-                        }
-                    }
-                }
-            }
-        }
-
-        // Check if any course grade item makes use of the scale.
-        $return += $DB->count_records('grade_items', array('courseid' => $courseid, 'scaleid' => $scaleid));
-
-        // Check if any outcome in the course makes use of the scale.
-        $return += $DB->count_records_sql("SELECT COUNT('x')
-                                             FROM {grade_outcomes_courses} goc,
-                                                  {grade_outcomes} go
-                                            WHERE go.id = goc.outcomeid
-                                                  AND go.scaleid = ? AND goc.courseid = ?",
-            array($scaleid, $courseid));
-    }
-    return $return;
+function course_scale_used() {
+    throw new coding_exception('course_scale_used() can not be used anymore. Plugins can ' .
+        'implement <modname>_scale_used_anywhere, all implementations of <modname>_scale_used are now ignored');
 }
 
 /**
- * This function returns the number of activities using scaleid in the entire site
- *
  * @deprecated since Moodle 3.1
- * @param int $scaleid
- * @param array $courses
- * @return int
  */
-function site_scale_used($scaleid, &$courses) {
-    $return = 0;
-
-    debugging('site_scale_used() is deprecated and never used, plugins can implement <modname>_scale_used_anywhere, '.
-        'all implementations of <modname>_scale_used are now ignored', DEBUG_DEVELOPER);
-
-    if (!is_array($courses) || count($courses) == 0) {
-        $courses = get_courses("all", false, "c.id, c.shortname");
-    }
-
-    if (!empty($scaleid)) {
-        if (is_array($courses) && count($courses) > 0) {
-            foreach ($courses as $course) {
-                $return += course_scale_used($course->id, $scaleid);
-            }
-        }
-    }
-    return $return;
+function site_scale_used() {
+    throw new coding_exception('site_scale_used() can not be used anymore. Plugins can implement ' .
+        '<modname>_scale_used_anywhere, all implementations of <modname>_scale_used are now ignored');
 }
 
 /**
  * @deprecated since Moodle 3.1. Use external_api::external_function_info().
  */
-function external_function_info($function, $strictness=MUST_EXIST) {
+function external_function_info() {
     throw new coding_exception('external_function_info() can not be used any'.
         'more. Please use external_api::external_function_info() instead.');
 }
@@ -5924,39 +4494,21 @@ function calendar_cron() {
 }
 
 /**
- * Previous internal API, it was not supposed to be used anywhere.
- *
- * @access private
  * @deprecated since Moodle 3.4 and removed immediately. MDL-49398.
- * @param int $userid the id of the user
- * @param context_course $coursecontext course context
- * @param array $accessdata accessdata array (modified)
- * @return void modifies $accessdata parameter
  */
-function load_course_context($userid, context_course $coursecontext, &$accessdata) {
+function load_course_context() {
     throw new coding_exception('load_course_context() is removed. Do not use private functions or data structures.');
 }
 
 /**
- * Previous internal API, it was not supposed to be used anywhere.
- *
- * @access private
  * @deprecated since Moodle 3.4 and removed immediately. MDL-49398.
- * @param int $roleid the id of the user
- * @param context $context needs path!
- * @param array $accessdata accessdata array (is modified)
- * @return array
  */
-function load_role_access_by_context($roleid, context $context, &$accessdata) {
+function load_role_access_by_context() {
     throw new coding_exception('load_role_access_by_context() is removed. Do not use private functions or data structures.');
 }
 
 /**
- * Previous internal API, it was not supposed to be used anywhere.
- *
- * @access private
  * @deprecated since Moodle 3.4 and removed immediately. MDL-49398.
- * @return void
  */
 function dedupe_user_access() {
     throw new coding_exception('dedupe_user_access() is removed. Do not use private functions or data structures.');
index f2e8d0b..ceecd29 100644 (file)
@@ -6,8 +6,14 @@ information provided here is intended especially for developers.
 * Custom AJAX handlers for the form autocomplete fields can now optionally return string in their processResults()
   callback. If a string is returned, it is displayed instead of the list if suggested items. This can be used, for
   example, to inform the user that there are too many items matching the current search criteria.
-* The following functions have been finally deprecated and can not be used any more:
-  - external_function_info()
+* The following functions have been finally deprecated and can not be used anymore:
+    - external_function_info()
+    - get_file_url()
+    - course_get_cm_rename_action()
+    - course_scale_used()
+    - site_scale_used()
+    - clam_message_admins()
+    - get_clam_error_code()
 * Following api's have been removed in behat_config_manager, please use behat_config_util instead.
     - get_features_with_tags()
     - get_components_steps_definitions()
index 078cf7b..6c15e82 100644 (file)
@@ -59,8 +59,7 @@ class core_tag_events_testcase extends advanced_testcase {
 
         // Trigger and capture the event when renaming a tag.
         $sink = $this->redirectEvents();
-        tag_rename($tag->id, 'newname');
-        $this->assertDebuggingCalled();
+        core_tag_tag::get($tag->id, '*')->update(array('rawname' => 'newname'));
         // Update the tag's name since we have renamed it.
         $tag->name = 'newname';
         $events = $sink->get_events();
@@ -74,8 +73,7 @@ class core_tag_events_testcase extends advanced_testcase {
 
         // Trigger and capture the event when setting the type of a tag.
         $sink = $this->redirectEvents();
-        tag_type_set($tag->id, 'official');
-        $this->assertDebuggingCalled();
+        core_tag_tag::get($tag->id, '*')->update(array('isstandard' => 1));
         $events = $sink->get_events();
         $event = reset($events);
 
@@ -87,8 +85,8 @@ class core_tag_events_testcase extends advanced_testcase {
 
         // Trigger and capture the event for setting the description of a tag.
         $sink = $this->redirectEvents();
-        tag_description_set($tag->id, 'description', FORMAT_MOODLE);
-        $this->assertDebuggingCalled();
+        core_tag_tag::get($tag->id, '*')->update(
+                array('description' => 'description', 'descriptionformat' => FORMAT_MOODLE));
         $events = $sink->get_events();
         $event = reset($events);
 
@@ -270,11 +268,11 @@ class core_tag_events_testcase extends advanced_testcase {
         // Create tags we are going to flag.
         $tag = $this->getDataGenerator()->create_tag();
         $tag2 = $this->getDataGenerator()->create_tag();
+        $tags = array($tag, $tag2);
 
         // Trigger and capture the event for setting the flag of a tag.
         $sink = $this->redirectEvents();
-        tag_set_flag($tag->id);
-        $this->assertDebuggingCalled();
+        core_tag_tag::get($tag->id, '*')->flag();
         $events = $sink->get_events();
         $event = reset($events);
 
@@ -289,13 +287,15 @@ class core_tag_events_testcase extends advanced_testcase {
         $this->assertEventLegacyLogData($expected, $event);
 
         // Unset the flag for both (though by default tag2 should have been created with 0 already).
-        tag_unset_flag(array($tag->id, $tag2->id));
-        $this->assertDebuggingCalled();
+        foreach ($tags as $t) {
+            core_tag_tag::get($t->id, '*')->reset_flag();
+        }
 
         // Trigger and capture the event for setting the flag for multiple tags.
         $sink = $this->redirectEvents();
-        tag_set_flag(array($tag->id, $tag2->id));
-        $this->assertDebuggingCalled();
+        foreach ($tags as $t) {
+            core_tag_tag::get($t->id, '*')->flag();
+        }
         $events = $sink->get_events();
 
         // Check that the flags were updated.
@@ -329,15 +329,14 @@ class core_tag_events_testcase extends advanced_testcase {
         // Create tags we are going to unflag.
         $tag = $this->getDataGenerator()->create_tag();
         $tag2 = $this->getDataGenerator()->create_tag();
+        $tags = array($tag, $tag2);
 
         // Flag it.
-        tag_set_flag($tag->id);
-        $this->assertDebuggingCalled();
+        core_tag_tag::get($tag->id, '*')->flag();
 
         // Trigger and capture the event for unsetting the flag of a tag.
         $sink = $this->redirectEvents();
-        tag_unset_flag($tag->id);
-        $this->assertDebuggingCalled();
+        core_tag_tag::get($tag->id, '*')->reset_flag();
         $events = $sink->get_events();
         $event = reset($events);
 
@@ -350,13 +349,15 @@ class core_tag_events_testcase extends advanced_testcase {
         $this->assertEquals(context_system::instance(), $event->get_context());
 
         // Set the flag back for both.
-        tag_set_flag(array($tag->id, $tag2->id));
-        $this->assertDebuggingCalled();
+        foreach ($tags as $t) {
+            core_tag_tag::get($t->id, '*')->flag();
+        }
 
         // Trigger and capture the event for unsetting the flag for multiple tags.
         $sink = $this->redirectEvents();
-        tag_unset_flag(array($tag->id, $tag2->id));
-        $this->assertDebuggingCalled();
+        foreach ($tags as $t) {
+            core_tag_tag::get($t->id, '*')->reset_flag();
+        }
         $events = $sink->get_events();
 
         // Check that the flags were updated.
@@ -392,8 +393,7 @@ class core_tag_events_testcase extends advanced_testcase {
 
         // Trigger and capture the event for deleting a tag.
         $sink = $this->redirectEvents();
-        tag_delete($tag->id);
-        $this->assertDebuggingCalled();
+        core_tag_tag::delete_tags($tag->id);
         $events = $sink->get_events();
         $event = reset($events);
 
@@ -408,8 +408,7 @@ class core_tag_events_testcase extends advanced_testcase {
 
         // Trigger and capture the events for deleting multiple tags.
         $sink = $this->redirectEvents();
-        tag_delete(array($tag->id, $tag2->id));
-        $this->assertDebuggingCalled();
+        core_tag_tag::delete_tags(array($tag->id, $tag2->id));
         $events = $sink->get_events();
 
         // Check that the tags were deleted and the events data is valid.
@@ -465,78 +464,6 @@ class core_tag_events_testcase extends advanced_testcase {
         }
     }
 
-    /**
-     * Test the tag deleted event while calling deprecated functions.
-     * Remove the test when the functions are removed.
-     */
-    public function test_tag_deleted_deprecated() {
-        global $DB;
-
-        $this->setAdminUser();
-
-        // Create a course.
-        $course = $this->getDataGenerator()->create_course();
-
-        // Create another tag to delete.
-        $tag = $this->getDataGenerator()->create_tag();
-
-        // Add a tag instance to a course.
-        tag_assign('course', $course->id, $tag->id, 0, 2, 'core', context_course::instance($course->id)->id);
-        $this->assertDebuggingCalled();
-
-        // Trigger and capture the event for deleting a personal tag for a user for a course.
-        $sink = $this->redirectEvents();
-        core_tag_tag::remove_item_tag('core', 'course', $course->id, $tag->rawname);
-        $events = $sink->get_events();
-        $event = $events[1];
-
-        // Check that the tag was deleted and the event data is valid.
-        $this->assertEquals(0, $DB->count_records('tag'));
-        $this->assertInstanceOf('\core\event\tag_deleted', $event);
-        $this->assertEquals(context_system::instance(), $event->get_context());
-
-        // Create a new tag we are going to delete.
-        $tag = $this->getDataGenerator()->create_tag();
-
-        // Add the tag instance to the course again as it was deleted.
-        tag_assign('course', $course->id, $tag->id, 0, 2, 'core', context_course::instance($course->id)->id);
-        $this->assertDebuggingCalled();
-
-        // Trigger and capture the event for deleting all tags in a course.
-        $sink = $this->redirectEvents();
-        core_tag_tag::remove_all_item_tags('core', 'course', $course->id);
-        $events = $sink->get_events();
-        $event = $events[1];
-
-        // Check that the tag was deleted and the event data is valid.
-        $this->assertEquals(0, $DB->count_records('tag'));
-        $this->assertInstanceOf('\core\event\tag_deleted', $event);
-        $this->assertEquals(context_system::instance(), $event->get_context());
-
-        // Create two tags we are going to delete to ensure passing multiple tags work.
-        $tag = $this->getDataGenerator()->create_tag();
-        $tag2 = $this->getDataGenerator()->create_tag();
-
-        // Add multiple tag instances now and check that it still works.
-        tag_assign('course', $course->id, $tag->id, 0, 2, 'core', context_course::instance($course->id)->id);
-        $this->assertDebuggingCalled();
-        tag_assign('course', $course->id, $tag2->id, 0, 2, 'core', context_course::instance($course->id)->id);
-        $this->assertDebuggingCalled();
-
-        // Trigger and capture the event for deleting all tags in a course.
-        $sink = $this->redirectEvents();
-        core_tag_tag::remove_all_item_tags('core', 'course', $course->id);
-        $events = $sink->get_events();
-        $events = array($events[1], $events[3]);
-
-        // Check that the tags were deleted and the events data is valid.
-        $this->assertEquals(0, $DB->count_records('tag'));
-        foreach ($events as $event) {
-            $this->assertInstanceOf('\core\event\tag_deleted', $event);
-            $this->assertEquals(context_system::instance(), $event->get_context());
-        }
-    }
-
     /**
      * Test the tag created event.
      */
index 02d747a..64a9cac 100644 (file)
@@ -39,115 +39,36 @@ class core_tag_taglib_testcase extends advanced_testcase {
     }
 
     /**
-     * Test the tag_set function.
+     * Test that the tag_set function throws an exception.
      * This function was deprecated in 3.1
      */
     public function test_tag_set_get() {
-        global $DB;
-
-        // Create a course to tag.
-        $course = $this->getDataGenerator()->create_course();
-
-        // Create the tag and tag instance.
-        tag_set('course', $course->id, array('A random tag'), 'core', context_course::instance($course->id)->id);
-        $this->assertDebuggingCalled();
-
-        // Get the tag instance that should have been created.
-        $taginstance = $DB->get_record('tag_instance', array('itemtype' => 'course', 'itemid' => $course->id), '*', MUST_EXIST);
-        $this->assertEquals('core', $taginstance->component);
-        $this->assertEquals(context_course::instance($course->id)->id, $taginstance->contextid);
-
-        $tagbyname = tag_get('name', 'A random tag');
-        $this->assertDebuggingCalled();
-        $this->assertEquals('A random tag', $tagbyname->rawname);
-
-        $this->assertEmpty(tag_get('name', 'Non existing tag'));
-        $this->assertDebuggingCalled();
-
-        $tagbyid = tag_get('id', $tagbyname->id);
-        $this->assertDebuggingCalled();
-        $this->assertEquals('A random tag', $tagbyid->rawname);
-        $tagid = $tagbyname->id;
-
-        $this->assertEmpty(tag_get('id', $tagid + 1));
-        $this->assertDebuggingCalled();
-
-        tag_set('tag', $tagid, array('Some related tag'));
-        $this->assertDebuggingCalled();
-        $relatedtags = tag_get_related_tags($tagid);
-        $this->assertDebuggingCalled();
-        $this->assertCount(1, $relatedtags);
-        $this->assertEquals('Some related tag', $relatedtags[0]->rawname);
-
-        $tagids = tag_get_id(array('A random tag', 'Some related tag'));
-        $this->assertDebuggingCalled();
-        $this->assertCount(2, $tagids);
-        $this->assertEquals($tagid, $tagids['a random tag']);
-        $this->assertEquals($relatedtags[0]->id, $tagids['some related tag']);
+        $this->expectException('coding_exception');
+        $this->expectExceptionMessage('tag_set() can not be used anymore. Please use ' .
+            'core_tag_tag::set_item_tags().');
+        tag_set();
     }
 
     /**
-     * Test the tag_set_add function.
+     * Test that tag_set_add function throws an exception.
      * This function was deprecated in 3.1
      */
     public function test_tag_set_add() {
-        global $DB;
-
-        // Create a course to tag.
-        $course = $this->getDataGenerator()->create_course();
-
-        // Create the tag and tag instance.
-        tag_set_add('course', $course->id, 'A random tag', 'core', context_course::instance($course->id)->id);
-        $this->assertDebuggingCalled();
-
-        // Get the tag instance that should have been created.
-        $taginstance = $DB->get_record('tag_instance', array('itemtype' => 'course', 'itemid' => $course->id), '*', MUST_EXIST);
-        $this->assertEquals('core', $taginstance->component);
-        $this->assertEquals(context_course::instance($course->id)->id, $taginstance->contextid);
-        $tagid = $taginstance->tagid;
-
-        tag_set_add('tag', $tagid, 'Some related tag');
-        $this->assertDebuggingCalled();
-        $relatedtags = tag_get_related_tags($tagid);
-        $this->assertDebuggingCalled();
-        $this->assertCount(1, $relatedtags);
-        $this->assertEquals('Some related tag', $relatedtags[0]->rawname);
+        $this->expectException('coding_exception');
+        $this->expectExceptionMessage('tag_set_add() can not be used anymore. Please use ' .
+            'core_tag_tag::add_item_tag().');
+        tag_set_add();
     }
 
     /**
-     * Test the tag_set_delete function.
+     * Test that tag_set_delete function returns an exception.
      * This function was deprecated in 3.1
      */
     public function test_tag_set_delete() {
-        global $DB;
-
-        // Create a course to tag.
-        $course = $this->getDataGenerator()->create_course();
-
-        // Create the tag and tag instance we are going to delete.
-        tag_set_add('course', $course->id, 'A random tag', 'core', context_course::instance($course->id)->id);
-        $this->assertDebuggingCalled();
-
-        // Call the tag_set_delete function.
-        tag_set_delete('course', $course->id, 'a random tag', 'core', context_course::instance($course->id)->id);
-        $this->assertDebuggingCalled();
-
-        // Now check that there are no tags or tag instances.
-        $this->assertEquals(0, $DB->count_records('tag'));
-        $this->assertEquals(0, $DB->count_records('tag_instance'));
-
-        // Add tag again, add and remove related tag.
-        tag_set_add('course', $course->id, 'A random tag', 'core', context_course::instance($course->id)->id);
-        $this->assertDebuggingCalled();
-        $taginstance = $DB->get_record('tag_instance', array('itemtype' => 'course', 'itemid' => $course->id), '*', MUST_EXIST);
-        $tagid = $taginstance->tagid;
-        tag_set_add('tag', $tagid, 'Some related tag');
-        $this->assertDebuggingCalled();
-        tag_set_delete('tag', $tagid, 'Some related tag');
-        $this->assertDebuggingCalled();
-        $relatedtags = tag_get_related_tags($tagid);
-        $this->assertDebuggingCalled();
-        $this->assertCount(0, $relatedtags);
+        $this->expectException('coding_exception');
+        $this->expectExceptionMessage('tag_set_delete() can not be used anymore. Please use ' .
+            'core_tag_tag::remove_item_tag().');
+        tag_set_delete();
     }
 
     /**
@@ -174,32 +95,14 @@ class core_tag_taglib_testcase extends advanced_testcase {
     }
 
     /**
-     * Test the tag_assign function.
+     * Test that tag_assign function throws an exception.
      * This function was deprecated in 3.1
      */
     public function test_tag_assign() {
-        global $DB;
-
-        // Create a course to tag.
-        $course = $this->getDataGenerator()->create_course();
-
-        // Create the tag.
-        $tag = $this->getDataGenerator()->create_tag();
-        $tag2 = $this->getDataGenerator()->create_tag();
-
-        // Tag the course with the tag we created.
-        tag_assign('course', $course->id, $tag->id, 0, 0, 'core', context_course::instance($course->id)->id);
-        $this->assertDebuggingCalled();
-
-        // Get the tag instance that should have been created.
-        $taginstance = $DB->get_record('tag_instance', array('itemtype' => 'course', 'itemid' => $course->id), '*', MUST_EXIST);
-        $this->assertEquals('core', $taginstance->component);
-        $this->assertEquals(context_course::instance($course->id)->id, $taginstance->contextid);
-
-        // Now call the tag_assign function without specifying the component or
-        // contextid and ensure the function debugging is called twice.
-        tag_assign('course', $course->id, $tag2->id, 0, 0);
-        $this->assertDebuggingCalled();
+        $this->expectException('coding_exception');
+        $this->expectExceptionMessage('tag_assign() can not be used anymore. Please use core_tag_tag::set_item_tags() ' .
+            'or core_tag_tag::add_item_tag() instead.');
+        tag_assign();
     }
 
     /**
@@ -362,7 +265,7 @@ class core_tag_taglib_testcase extends advanced_testcase {
     }
 
     /**
-     * Test for function tag_compute_correlations() that is part of tag cron
+     * Test for function compute_correlations() that is part of tag cron
      */
     public function test_correlations() {
         global $DB;
@@ -401,7 +304,7 @@ class core_tag_taglib_testcase extends advanced_testcase {
         $this->assertCount(1, $correlatedtags); // Duplicates are filtered out here.
         $this->assertEquals('cats', $correlatedtags[0]->rawname);
 
-        // Make sure tag_get_correlated() returns 'dogs' and 'puppy' as the correlated tags to the 'dog'.
+        // Make sure get_correlated_tags() returns 'dogs' and 'puppy' as the correlated tags to the 'dog'.
         $correlatedtags = core_tag_tag::get($tags['dog'])->get_correlated_tags(true);
         $this->assertCount(6, $correlatedtags); // 2 tags times 3 instances.
 
@@ -416,31 +319,26 @@ class core_tag_taglib_testcase extends advanced_testcase {
         $this->assertEquals('kitten', $relatedtags[0]->rawname);
         $this->assertEquals('cats', $relatedtags[1]->rawname);
 
-        // Also test deprecated method tag_get_related_tags() and tag_get_correlated().
-        $correlatedtags = array_values(tag_get_correlated($tags['cat']));
-        $this->assertDebuggingCalled();
+        // Also test get_correlated_tags().
+        $correlatedtags = array_values(core_tag_tag::get($tags['cat'])->get_correlated_tags(true));
         $this->assertCount(3, $correlatedtags); // This will return all existing instances but they all point to the same tag.
         $this->assertEquals('cats', $correlatedtags[0]->rawname);
         $this->assertEquals('cats', $correlatedtags[1]->rawname);
         $this->assertEquals('cats', $correlatedtags[2]->rawname);
 
-        $correlatedtags = array_values(tag_get_related_tags($tags['cat'], TAG_RELATED_CORRELATED));
-        $this->assertDebuggingCalled();
+        $correlatedtags = array_values(core_tag_tag::get($tags['cat'])->get_correlated_tags());
         $this->assertCount(1, $correlatedtags); // Duplicates are filtered out here.
         $this->assertEquals('cats', $correlatedtags[0]->rawname);
 
-        $correlatedtags = array_values(tag_get_correlated($tags['dog']));
-        $this->assertDebuggingCalled();
+        $correlatedtags = array_values(core_tag_tag::get($tags['dog'])->get_correlated_tags(true));
         $this->assertCount(6, $correlatedtags); // 2 tags times 3 instances.
 
-        $correlatedtags = array_values(tag_get_related_tags($tags['dog'], TAG_RELATED_CORRELATED));
-        $this->assertDebuggingCalled();
+        $correlatedtags = array_values(core_tag_tag::get($tags['dog'])->get_correlated_tags());
         $this->assertCount(2, $correlatedtags);
         $this->assertEquals('dogs', $correlatedtags[0]->rawname);
         $this->assertEquals('puppy', $correlatedtags[1]->rawname);
 
-        $relatedtags = array_values(tag_get_related_tags($tags['cat']));
-        $this->assertDebuggingCalled();
+        $relatedtags = array_values(core_tag_tag::get($tags['cat'])->get_related_tags());
         $this->assertCount(2, $relatedtags);
         $this->assertEquals('kitten', $relatedtags[0]->rawname);
         $this->assertEquals('cats', $relatedtags[1]->rawname);
@@ -461,19 +359,15 @@ class core_tag_taglib_testcase extends advanced_testcase {
         $correlatedtag = reset($correlatedtags);
         $this->assertEquals(array_keys((array)$relatedtag->to_object()), array_keys((array)$correlatedtag->to_object()));
 
-        // Make sure tag_get_correlated() and tag_get_tags() return the same set of fields.
-        // Both functions were deprecated in 3.1.
-        $relatedtags = tag_get_tags('tag', $tags['cat']);
-        $this->assertDebuggingCalled();
+        $relatedtags = core_tag_tag::get_item_tags(null, 'tag', $tags['cat']);
         $relatedtag = reset($relatedtags);
-        $correlatedtags = tag_get_correlated($tags['cat']);
-        $this->assertDebuggingCalled();
+        $correlatedtags = core_tag_tag::get($tags['cat'])->get_correlated_tags();
         $correlatedtag = reset($correlatedtags);
         $this->assertEquals(array_keys((array)$relatedtag), array_keys((array)$correlatedtag));
     }
 
     /**
-     * Test for function tag_cleanup() that is part of tag cron
+     * Test for function cleanup() that is part of tag cron
      */
     public function test_cleanup() {
         global $DB;
@@ -497,7 +391,6 @@ class core_tag_taglib_testcase extends advanced_testcase {
         // Manually remove the instances pointing on tags 'dog' and 'fish'.
         $DB->execute('DELETE FROM {tag_instance} WHERE tagid in (?,?)', array($dogtag->id, $fishtag->id));
 
-        // Call tag_cleanup().
         $task->cleanup();
 
         // Tag 'cat' is still present because it's used. Tag 'dog' is present because it's standard.
@@ -509,7 +402,6 @@ class core_tag_taglib_testcase extends advanced_testcase {
         // Delete user without using API function.
         $DB->update_record('user', array('id' => $user->id, 'deleted' => 1));
 
-        // Call tag_cleanup().
         $task->cleanup();
 
         // Tag 'cat' was now deleted too.
@@ -519,7 +411,6 @@ class core_tag_taglib_testcase extends advanced_testcase {
         core_tag_tag::set_item_tags('core', 'course', 1231231, context_system::instance(), array('bird'));
         $this->assertTrue($DB->record_exists('tag', array('name' => 'bird')));
 
-        // Call tag_cleanup().
         $task->cleanup();
 
         // Tag 'bird' was now deleted because the related record does not exist in the DB.
@@ -535,7 +426,6 @@ class core_tag_taglib_testcase extends advanced_testcase {
         // Some hacker removes the tag without using API.
         $DB->delete_records('tag', array('id' => $sometag->id));
 
-        // Call tag_cleanup().
         $task->cleanup();
 
         // The tag instances were also removed.
@@ -834,15 +724,13 @@ class core_tag_taglib_testcase extends advanced_testcase {
         $this->assertEquals(array('Tag2', 'Tag3'), array_values(core_tag_tag::get_item_tags_array('core', 'user', $user2->id)));
 
         $tag11 = core_tag_tag::get_by_name($collid1, 'Tag1');
-        $related11 = tag_get_related_tags($tag11->id, TAG_RELATED_MANUAL);
-        $this->assertDebuggingCalled();
+        $related11 = core_tag_tag::get($tag11->id)->get_manual_related_tags();
         $related11 = array_map('core_tag_tag::make_display_name', $related11);
         sort($related11); // Order of related tags may be random.
         $this->assertEquals('Tag2, Tag4', join(', ', $related11));
 
         $tag21 = core_tag_tag::get_by_name($collid2, 'TAG1');
-        $related21 = tag_get_related_tags($tag21->id, TAG_RELATED_MANUAL);
-        $this->assertDebuggingCalled();
+        $related21 = core_tag_tag::get($tag21->id)->get_manual_related_tags();
         $related21 = array_map('core_tag_tag::make_display_name', $related21);
         sort($related21); // Order of related tags may be random.
         $this->assertEquals('Tag2, Tag4', join(', ', $related21));
@@ -887,22 +775,15 @@ class core_tag_taglib_testcase extends advanced_testcase {
         $this->assertEquals($collid2, $user2tags[2]->tagcollid);
     }
 
+    /**
+     * Tests that tag_normalize function throws an exception.
+     * This function was deprecated in 3.1
+     */
     public function test_normalize() {
-        $tagset = array('Cat', ' Dog  ', '<Mouse', '<>', 'mouse', 'Dog');
-
-        // Test function tag_normalize() that was deprecated in 3.1.
-        $this->assertEquals(array('Cat' => 'Cat', 'Dog' => 'Dog', '<Mouse' => 'Mouse', '<>' => '', 'mouse' => 'mouse'),
-            tag_normalize($tagset, TAG_CASE_ORIGINAL));
-        $this->assertDebuggingCalled();
-        $this->assertEquals(array('Cat' => 'cat', 'Dog' => 'dog', '<Mouse' => 'mouse', '<>' => '', 'mouse' => 'mouse'),
-            tag_normalize($tagset, TAG_CASE_LOWER));
-        $this->assertDebuggingCalled();
-
-        // Test replacement function core_tag_tag::normalize().
-        $this->assertEquals(array('Cat' => 'Cat', 'Dog' => 'Dog', '<Mouse' => 'Mouse', '<>' => '', 'mouse' => 'mouse'),
-            core_tag_tag::normalize($tagset, false));
-        $this->assertEquals(array('Cat' => 'cat', 'Dog' => 'dog', '<Mouse' => 'mouse', '<>' => '', 'mouse' => 'mouse'),
-            core_tag_tag::normalize($tagset, true));
+        $this->expectException('coding_exception');
+        $this->expectExceptionMessage('tag_normalize() can not be used anymore. Please use ' .
+            'core_tag_tag::normalize().');
+        tag_normalize();
     }
 
     /**
index b0490bf..532597d 100644 (file)
@@ -1,6 +1,52 @@
 This files describes API changes in tagging, information provided
 here is intended especially for developers.
 
+=== 3.6 ===
+
+* The following functions have been finally deprecated and can not be used anymore:
+  * tag_type_set()
+  * tag_description_set()
+  * tag_get_tags()
+  * tag_get_tags_array()
+  * tag_get_tags_csv()
+  * tag_get_tags_ids()
+  * tag_get_id()
+  * tag_rename()
+  * tag_delete_instance()
+  * tag_add()
+  * tag_assign()
+  * tag_record_count()
+  * tag_record_tagged_with()
+  * tag_set_flag()
+  * tag_unset_flag()
+  * tag_print_cloud()
+  * tag_print_description_box()
+  * tag_print_management_box()
+  * tag_print_search_box()
+  * tag_print_search_results()
+  * tag_print_tagged_users_table()
+  * tag_print_user_box()
+  * tag_print_user_list()
+  * tag_display_name
+  * tag_normalize
+  * tag_get_related_tags_csv()
+  * tag_set()
+  * tag_set_add()
+  * tag_set_delete()
+  * tag_get()
+  * tag_get_related_tags()
+  * tag_delete
+  * tag_delete_instances()
+  * tag_cleanup()
+  * tag_bulk_delete_instances()
+  * tag_compute_correlations()
+  * tag_process_computed_correlation()
+  * tag_cron()
+  * tag_find_tags()
+  * tag_get_name()
+  * tag_get_correlated()
+  * tag_cloud_sort()
+
 === 3.1 ===
 
 * Each plugin must define the tag areas it uses in plugindir/db/tag.php