on-demand release 4.2dev+
[moodle.git] / course / format / upgrade.txt
1 This files describes API changes for course formats
3 Overview of this plugin type at http://docs.moodle.org/dev/Course_formats
5 === 4.2 ===
6 * New core_courseformat\base::get_context() to get the course context directly from the format instance.
7 * New core_courseformat\base::delete_module() method. Now format plugins can extend the activity deletion logic
8   by overriding this method.
9 * The reactive course editor now uses the standard fragment library to refresh an individual section or activity card
10   in the course content. Instead of using adhoc YUI methods and webservice, the new fragment methods are:
11     - core_courseformat_output_fragment_cmitem
12     - core_courseformat_output_fragment_section
13 * New methods and outputs added for bulk editing (only available for formats compatible with reactive components):
14     - Mutations for editing the bulk data: bulkEnable, bulkReset, cmSelect, cmUnselect, sectionSelect and sectionUnselect.
15     - Output classes overridable by the plugins: content\bulkedittools, content\bulkedittoggler
16     - Renderer method: core_courseformat\output\section_renderer::bulk_editing_button
17     - New overridable checkboxes: content/cm/bulkselect.mustache and content/section/bulkselect.mustache
18 * Plugins can use the CSS class "bulk-hidden" to hide elements when the bulk editing is enabled.
19 * New core_courseformat\base::duplicate_section method to duplicate course sections and their modules within a course.
20 * The section renderer will now respect the new course view parameter 'expandsection'. If the course's view page
21   is being called with this parameter set to a section number, this section will be shown expanded.
22 * core_courseformat\base::get_view_url() now by default returns a url for the *expanded* section. This can be
23   changed by adding ['expanded' => false] to the options parameter of get_view_url().
24 * The newly introduced protected method core_courseformat\output\local\content\section::is_section_collapsed() now
25   should be used by format plugins to determine if a section should be rendered collapsed or expanded at first.
26   This method can also be overwritten by course formats, but should respect the new 'expandsection' parameter when
27   doing so.
29 === 4.1 ===
30 * New \core_courseformat\stateupdates methods add_section_remove() and add_cm_remove() have been added to replace
31   the deprecated methods add_section_delete() and add_cm_delete().
32 * The 4th param of the core_courseformat\output\local\content\cm\cmname construct is now deprecated.
33   The page edition is now detected using the course_format\base:show_editor method as the rest of the
34   core_courseformat outputs. It defaults to checking the capability 'moodle/course:manageactivities'. If different
35   capabilities are needed to check, an array of capabilities can be passed as an optional parameter to the function.
37 === 4.0 ===
38 * New core_courseformat\base::uses_course_index() to define whether the course format uses course index or not.
39 * New core_courseformat\base::supports_components() to specify if the format is compatible with reactive components.
40 * New core_courseformat\base::uses_indentation() to specify if the format is compatible with activity indentation.
41 * New core_courseformat\base::get_course_display() if the course uses COURSE_DISPLAY_SINGLEPAGE or COURSE_DISPLAY_MULTIPAGE layout.
43 === 3.10 ===
44 * Added the missing callback supports_ajax() to format_social.
46 === 3.9 ===
48 * The following functions, previously used (exclusively) by upgrade steps are not available anymore because of the upgrade cleanup performed for this version. See MDL-65809 for more info:
49     - format_topics_upgrade_remove_numsections()
50     - format_topics_upgrade_hide_extra_sections()
51     - format_topics_upgrade_add_empty_sections()
52     - format_weeks_upgrade_remove_numsections()
53     - format_weeks_upgrade_hide_extra_sections()
54     - format_weeks_upgrade_add_empty_sections()
55 * The non-ajax controls to add resources and activities are now rendered only when needed, such as when the user
56   preference is set, or when the theme sets $THEME->enablecourseajaxtheme to false. Formats which directly access
57   the '.section_add_menus' element or its children should be updated accordingly.
59 * section_header() now needs to include 'data-sectionid' => $section->section in the .section li to ensure correct section
60   selection for the Activity Chooser.
62 === 3.8 ===
64 * The following functions have been finally deprecated and can not be used anymore:
65   * section_edit_controls()
67 === 3.6 ===
68 * New method validate_format_options() cleans the values of the course/section format options before inserting them
69   in the database. Course format options can now be set in tool_uploadcourse and validation of user-submitted data is important.
70   Note that validate_format_options() is now always called when somebody creates or edits course or section and also
71   during restore and course upload. Default implementation validates against the definition of the form elements for
72   format options.
73 * The final deprecation of xxx_delete_course callback means that this function will no longer be called.
74   Please use the observer for event \core\event\course_content_deleted instead.
76 === 3.5 ===
77 * Course formats should overwrite get_config_for_external function to return the course format settings viewable by the
78   current user.
79   If the course format does not have any setting that could be considerated private (like a private/access key/token),
80   is ok to return all the settigns via the get_format_options function.
82 === 3.3 ===
83 * Javascript code for editing activities and sections was moved to an AMD module, course/rest.php is no longer
84   responsible for editing actions, instead it is done in web services. Carefully test all editing actions during upgrade.
85 * The new method format_base::allow_stealth_module_visibility() can indicate whether course format supports "stealth"
86   activities mode when they are available but not visible on course page. Course format that supports stealth mode
87   must check $cm->is_visible_on_course_page() when displaying activities list on the course page instead of $cm->uservisible.
88   For all other plugins except course formats the same property $cm->uservisible indicates if the activity contents
89   is actually available to student.
90 * Option "Number of sections" (numsections) was removed from topics and weeks formats, instead the actual number of records
91   in the course_sections table is treated as a number of sections (excluding section 0 that should always be present).
92 * Method create_course() will populate the new course with empty sections if $data->numsections is provided even if
93   "numsections" is not an option defined by the course format.
94 * course/changenumsections.php can now be used to insert sections at any positions.
95 * The variable SECTIONLEFTSIDE was changed from '.left .section-handle img' to '.left .section-handle .icon' in
96   course/format/topics/format.js and course/format/weeks/format.js due to the introduction of Font Awesome (see MDL-40759)
97   which altered the HTML. Please check if your course format relies on this selector, and if so, update it.
99 === 3.2 ===
100 * Callback delete_course is deprecated and should be replaced with observer for event \core\event\course_content_deleted
101 * Course formats can overwrite get_default_course_enddate function to set the default course end date for new courses.
102   format_base::get_default_course_enddate uses the new "Course duration" site setting to calculate the default course end date
103   from the default course start date.
104 * New method format_base::supports_news() which is used to determine whether an Announcements forum will be automatically created on
105   course creation. For course format plugin developers, please override format_base::supports_news() to return true if you want the
106   Announcements forum to be created upon course creation and remove the block names defined in format_base::get_default_blocks().
108 === 3.1 ===
109 * Course format may use the inplace_editable template to allow quick editing of section names, see
110   https://docs.moodle.org/dev/Inplace_editable and MDL-51802 for example implementation.
112 === 3.0 ===
113 * Course formats should now use section_edit_control_items and use the returned array of controls items and their attributes to create a
114   renderable menu or array of links.  Plugin calls to section_edit_controls will now include the section edit control in the returned array.
115 * The section name is now wrapped in a new span (.sectionname > span), process_sections method in format.js should be updated so .sectionname
116   DOM node's wraps the section title in a span. You can look at how to implement the change in course/format/topics/format.js or MDL-48947.
117 * New method format_base::get_default_section_name retrieves the default section name for the given course format. The base
118   implementation basically uses the implementation of format_base::get_section_name. The method can be overridden in
119   format_base subclasses that use sections (i.e. format_topics, format_weeks). In relation to the changes made for the default
120   section name, the default section name is now being shown when editing the section information.
122 === 2.9 ===
123 * Course formats may support deleting sections, see MDL-10405 for more details.
124   format_section_renderer_base::section_edit_controls() is now also called for
125   stealth sections and it also returns "delete" control.
127 === 2.8 ===
128 * The activity chooser now uses M.course.format.get_sectionwrapperclass()
129   to determine the section selector, rather than a hard-coded `li.section`.
130 * Activity duplication in /course/modduplicate.php is deprecated and is now done in /course/mod.php.  Deprecated calls will be honored by
131   redirecting to /course/mod.php for 3rd party plugin support.
132 * New method format_base::section_get_available_hook() allows plugins to override section availability.
134 === 2.7 ===
135 * The ->testedbrowsers array no longer needs to be defined in supports_ajax().
136 * format_section_renderer_base::section_hidden has an new second optional argument $courseorid.
137   If provided the section name is printed in the not available string when displaying the hidden section.
139 === 2.6 ===
141 * core_course_renderer::course_section_cm_edit_actions has two new optional arguments and now uses and action_menu component.
142 * core_course_renderer::course_section_cm has been altered to call core_course_renderer::course_section_cm_edit_actions with the two new arguments
143 * An additional course renderer function has been created which allows you to
144   specify the wrapper for a course module within a section (e.g. the <li>).  This can be
145   found in core_course_renderer::course_section_cm_list_item().
147 === 2.5 ===
149 * Functions responsible for output in course/lib.php are deprecated, the code is moved to
150   appropriate renderers: print_section(), print_section_add_menus(), get_print_section_cm_text(),
151   make_editing_buttons()
152   See functions' phpdocs in lib/deprecatedlib.php
153 * Function get_print_section_cm_text() is deprecated, replaced with methods in cm_info
155 === 2.4 ===
157 Course format API has been changed significantly. Instead of implementing callbacks course formats
158 may overwrite the class format_base. See format_legacy class for a template for upgrading course
159 format.
161 * Function settings_navigation::add_course_editing_links() is completely removed, course format
162   functions callback_XXXX_request_key() are no longer used (where XXXX is the course format name)
163 * functions get_generic_section_name(), get_all_sections(), add_mod_to_section(), get_all_mods()
164   are deprecated. See their phpdocs in lib/deprecatedlib.php on how to replace them
165 * Course formats may now have their settings.php file as the most of other plugin types
166 * Function format_section_renderer_base::is_section_current() is deprecated, overwrite/use
167   function is_section_current in format class
169 === 2.3 ===
171 * The new $course->coursedisplay option was introduced, users can now choose to display
172   a section at a time if the course formats support it:
173  - COURSE_DISPLAY_SINGLEPAGE indicates the teacher has chosen to display all sections on one page
174  - COURSE_DISPLAY_MULTIPAGE indicates the teacher has chose to have seperate pages with each section.
176 * The parameter for 'currently active section' was standardised in core:
177   - The course format is passed the currently live section through the $displaysection varaible to format.php
178   - A 'section' paramter is the standardised way to pass around the current section in a course
179   - Navigation no longer looks for custom parameters defined in callback_format_request_key