1 |
efrain |
1 |
This files describes API changes for course formats
|
|
|
2 |
|
|
|
3 |
Overview of this plugin type at https://moodledev.io/docs/apis/plugintypes/format
|
|
|
4 |
|
|
|
5 |
=== 4.4.1 ===
|
|
|
6 |
* The constructor of core_courseformat\output\local\state\cm has been updated to accept a new optional parameter called is_tracked_user.
|
|
|
7 |
If is_tracked_user is pre-computed for this CM's course, it can be provided here to avoid an additional function call.
|
|
|
8 |
|
|
|
9 |
=== 4.4 ===
|
|
|
10 |
* The core_courseformat\output\local\content\section::export_for_template() is not returning hiddenfromstudents and notavailable
|
|
|
11 |
directly in the data array anymore. Instead, it returns the visibility data in the 'visibility' key. It means that templates
|
|
|
12 |
derived from core should be adjusted to use $data->visibility->hiddenfromstudents and $data->visibility->notavailable instead
|
|
|
13 |
of $data->hiddenfromstudents and $data->notavailable.
|
|
|
14 |
* The state mutations sectionMove is deprecated. From now on sectionMoveAfter is the only
|
|
|
15 |
valid section move mutation.
|
|
|
16 |
* The state action core_courseformat\stateactions::section_move is deprecated and
|
|
|
17 |
replaced by core_courseformat\stateactions::section_move_after.
|
|
|
18 |
* $CFG->linkcoursesections setting has been completely removed because it's not required anymore. From now on, sections will be
|
|
|
19 |
always linked because a new page, section.php, has been created to display any single section.
|
|
|
20 |
* Final deprecation for:
|
|
|
21 |
- core_courseformat\output\section_renderer::section_edit_control_menu
|
|
|
22 |
- core_courseformat\output\section_renderer::section_right_content
|
|
|
23 |
- core_courseformat\output\section_renderer::section_left_content
|
|
|
24 |
- core_courseformat\output\section_renderer::section_header
|
|
|
25 |
- core_courseformat\output\section_renderer::section_footer
|
|
|
26 |
- core_courseformat\output\section_renderer::start_section_list
|
|
|
27 |
- core_courseformat\output\section_renderer::end_section_list
|
|
|
28 |
- core_courseformat\output\section_renderer::section_edit_control_items
|
|
|
29 |
- core_courseformat\output\section_renderer::section_summary
|
|
|
30 |
- core_courseformat\output\section_renderer::section_activity_summary
|
|
|
31 |
- core_courseformat\output\section_renderer::section_availability_message
|
|
|
32 |
- core_courseformat\output\section_renderer::section_availability
|
|
|
33 |
- core_courseformat\output\section_renderer::course_activity_clipboard
|
|
|
34 |
- core_courseformat\output\section_renderer::get_nav_links
|
|
|
35 |
- core_courseformat\output\section_renderer::stealth_section_header
|
|
|
36 |
- core_courseformat\output\section_renderer::stealth_section_footer
|
|
|
37 |
- core_courseformat\output\section_renderer::section_nav_selection
|
|
|
38 |
- core_courseformat\output\section_renderer::print_single_section_page
|
|
|
39 |
- core_courseformat\output\section_renderer::print_multiple_section_page
|
|
|
40 |
- core_courseformat\output\section_renderer::change_number_sections
|
|
|
41 |
- core_courseformat\output\section_renderer::format_summary_text
|
|
|
42 |
- core_course_renderer::course_section_cm_edit_actions
|
|
|
43 |
- core_course_renderer::is_cm_conditionally_hidden
|
|
|
44 |
- core_course_renderer::course_section_cm_name
|
|
|
45 |
- core_course_renderer::course_section_cm_classes
|
|
|
46 |
- core_course_renderer::course_section_cm_name_title
|
|
|
47 |
- core_course_renderer::course_section_cm_text
|
|
|
48 |
- core_course_renderer::availability_info
|
|
|
49 |
- core_course_renderer::course_section_cm_availability
|
|
|
50 |
- core_course_renderer::course_section_cm_list_item
|
|
|
51 |
- core_course_renderer::course_section_cm
|
|
|
52 |
- core_course_renderer::course_section_cm_list
|
|
|
53 |
- core_course\output\course_module_name
|
|
|
54 |
- course/format/renderer.php
|
|
|
55 |
- course/format/topics/renderer.php
|
|
|
56 |
- course/format/weeks/renderer.php
|
|
|
57 |
* New core_courseformat\sectiondelegate class. The class can be extended by plugins to take control of a course section.
|
|
|
58 |
* The methods core_courseformat\base::set_section_number() and core_courseformat\base:: get_section_number() have been deprecated
|
|
|
59 |
and replaced by core_courseformat\base::set_sectionnum() and core_courseformat\base::get_sectionnum(). The new methods use the null
|
|
|
60 |
value when all the sections must be displayed (instead of 0). That way, section 0 (General), can be displayed on a single page too.
|
|
|
61 |
* The course format setting has been updated to use a choice dropdown form element instead of a select element. Third-party
|
|
|
62 |
plugins can now include the string 'plugin_description' to provide a description of the course format.
|
|
|
63 |
* A new item, initsections, has been added to the testing_data_generator::create_course() function, to let the generator rename
|
|
|
64 |
the sections to "Section X".
|
|
|
65 |
* The core_courseformat\base::get_format_string last parameter has been removed because it was erroneous.
|
|
|
66 |
* New core_courseformat\base::add_section_preference_ids() to add the section ids to course format preferences.
|
|
|
67 |
* New core_courseformat\base::remove_section_preference_ids() to remove the section ids out of course format preferences.
|
|
|
68 |
|
|
|
69 |
=== 4.3 ===
|
|
|
70 |
* New core_courseformat\output\activitybadge class that can be extended by any module to display content near the activity name.
|
|
|
71 |
The content of the afterlink feature has been moved to the end of the activity card so modules using it should check this new
|
|
|
72 |
feature which might fit better.
|
|
|
73 |
Some considerations about the activitybadge feature:
|
|
|
74 |
- The badge content is always plain text (no HTML).
|
|
|
75 |
- The badge style can be set (by default is initialized with badge-none, but it can be set by any module).
|
|
|
76 |
- An optional URL to redirect the user when the badge is clicked.
|
|
|
77 |
- An optional ID to add the element in case the module wants to add some JS to the badge events.
|
|
|
78 |
- Optionally, any other extra HTML attributes to the badge element (for example, data attributes).
|
|
|
79 |
* Protected function `core_courseformat\output\local\content\section\availability::availability_info()` has been deprecated,
|
|
|
80 |
`core_courseformat\output\local\content\section\availability::get_availability_data()` should be used instead.
|
|
|
81 |
* New course format output classes:
|
|
|
82 |
- core_courseformat\output\local\content\cm\groupmode output class to display the groupmode icon in the activity card.
|
|
|
83 |
|
|
|
84 |
=== 4.2 ===
|
|
|
85 |
* New core_courseformat\base::get_context() to get the course context directly from the format instance.
|
|
|
86 |
* New core_courseformat\base::delete_module() method. Now format plugins can extend the activity deletion logic
|
|
|
87 |
by overriding this method.
|
|
|
88 |
* The reactive course editor now uses the standard fragment library to refresh an individual section or activity card
|
|
|
89 |
in the course content. Instead of using adhoc YUI methods and webservice, the new fragment methods are:
|
|
|
90 |
- core_courseformat_output_fragment_cmitem
|
|
|
91 |
- core_courseformat_output_fragment_section
|
|
|
92 |
* New methods and outputs added for bulk editing (only available for formats compatible with reactive components):
|
|
|
93 |
- Mutations for editing the bulk data: bulkEnable, bulkReset, cmSelect, cmUnselect, sectionSelect and sectionUnselect.
|
|
|
94 |
- Output classes overridable by the plugins: content\bulkedittools, content\bulkedittoggler
|
|
|
95 |
- Renderer method: core_courseformat\output\section_renderer::bulk_editing_button
|
|
|
96 |
- New overridable checkboxes: content/cm/bulkselect.mustache and content/section/bulkselect.mustache
|
|
|
97 |
* Plugins can use the CSS class "bulk-hidden" to hide elements when the bulk editing is enabled.
|
|
|
98 |
* New core_courseformat\base::duplicate_section method to duplicate course sections and their modules within a course.
|
|
|
99 |
* The section renderer will now respect the new course view parameter 'expandsection'. If the course's view page
|
|
|
100 |
is being called with this parameter set to a section number, this section will be shown expanded.
|
|
|
101 |
* core_courseformat\base::get_view_url() now by default returns a url for the *expanded* section. This can be
|
|
|
102 |
changed by adding ['expanded' => false] to the options parameter of get_view_url().
|
|
|
103 |
* The newly introduced protected method core_courseformat\output\local\content\section::is_section_collapsed() now
|
|
|
104 |
should be used by format plugins to determine if a section should be rendered collapsed or expanded at first.
|
|
|
105 |
This method can also be overwritten by course formats, but should respect the new 'expandsection' parameter when
|
|
|
106 |
doing so.
|
|
|
107 |
* New core_courseformat\base::get_editor_custom_strings() method to customize course editor strings.
|
|
|
108 |
The returned string array is used to override section related strings in the frontend.
|
|
|
109 |
* New core_courseformat\base::get_format_string() to get strings that can be overridden by the format plugin.
|
|
|
110 |
The method will check first the string in the format_PLUGINNAME.php lang file and, if not, it will return the
|
|
|
111 |
core_courseformat string instead.
|
|
|
112 |
* New course format output classes:
|
|
|
113 |
- core_courseformat\output\local\content\cm\visibility to display the activity availability.
|
|
|
114 |
|
|
|
115 |
=== 4.1 ===
|
|
|
116 |
* New \core_courseformat\stateupdates methods add_section_remove() and add_cm_remove() have been added to replace
|
|
|
117 |
the deprecated methods add_section_delete() and add_cm_delete().
|
|
|
118 |
* The 4th param of the core_courseformat\output\local\content\cm\cmname construct is now deprecated.
|
|
|
119 |
The page edition is now detected using the course_format\base:show_editor method as the rest of the
|
|
|
120 |
core_courseformat outputs. It defaults to checking the capability 'moodle/course:manageactivities'. If different
|
|
|
121 |
capabilities are needed to check, an array of capabilities can be passed as an optional parameter to the function.
|
|
|
122 |
|
|
|
123 |
=== 4.0 ===
|
|
|
124 |
* New core_courseformat\base::uses_course_index() to define whether the course format uses course index or not.
|
|
|
125 |
* New core_courseformat\base::supports_components() to specify if the format is compatible with reactive components.
|
|
|
126 |
* New core_courseformat\base::uses_indentation() to specify if the format is compatible with activity indentation.
|
|
|
127 |
* New core_courseformat\base::get_course_display() if the course uses COURSE_DISPLAY_SINGLEPAGE or COURSE_DISPLAY_MULTIPAGE layout.
|
|
|
128 |
|
|
|
129 |
=== 3.10 ===
|
|
|
130 |
* Added the missing callback supports_ajax() to format_social.
|
|
|
131 |
|
|
|
132 |
=== 3.9 ===
|
|
|
133 |
|
|
|
134 |
* 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:
|
|
|
135 |
- format_topics_upgrade_remove_numsections()
|
|
|
136 |
- format_topics_upgrade_hide_extra_sections()
|
|
|
137 |
- format_topics_upgrade_add_empty_sections()
|
|
|
138 |
- format_weeks_upgrade_remove_numsections()
|
|
|
139 |
- format_weeks_upgrade_hide_extra_sections()
|
|
|
140 |
- format_weeks_upgrade_add_empty_sections()
|
|
|
141 |
* The non-ajax controls to add resources and activities are now rendered only when needed, such as when the user
|
|
|
142 |
preference is set, or when the theme sets $THEME->enablecourseajaxtheme to false. Formats which directly access
|
|
|
143 |
the '.section_add_menus' element or its children should be updated accordingly.
|
|
|
144 |
|
|
|
145 |
* section_header() now needs to include 'data-sectionid' => $section->section in the .section li to ensure correct section
|
|
|
146 |
selection for the Activity Chooser.
|
|
|
147 |
|
|
|
148 |
=== 3.8 ===
|
|
|
149 |
|
|
|
150 |
* The following functions have been finally deprecated and can not be used anymore:
|
|
|
151 |
* section_edit_controls()
|
|
|
152 |
|
|
|
153 |
=== 3.6 ===
|
|
|
154 |
* New method validate_format_options() cleans the values of the course/section format options before inserting them
|
|
|
155 |
in the database. Course format options can now be set in tool_uploadcourse and validation of user-submitted data is important.
|
|
|
156 |
Note that validate_format_options() is now always called when somebody creates or edits course or section and also
|
|
|
157 |
during restore and course upload. Default implementation validates against the definition of the form elements for
|
|
|
158 |
format options.
|
|
|
159 |
* The final deprecation of xxx_delete_course callback means that this function will no longer be called.
|
|
|
160 |
Please use the observer for event \core\event\course_content_deleted instead.
|
|
|
161 |
|
|
|
162 |
=== 3.5 ===
|
|
|
163 |
* Course formats should overwrite get_config_for_external function to return the course format settings viewable by the
|
|
|
164 |
current user.
|
|
|
165 |
If the course format does not have any setting that could be considerated private (like a private/access key/token),
|
|
|
166 |
is ok to return all the settigns via the get_format_options function.
|
|
|
167 |
|
|
|
168 |
=== 3.3 ===
|
|
|
169 |
* Javascript code for editing activities and sections was moved to an AMD module, course/rest.php is no longer
|
|
|
170 |
responsible for editing actions, instead it is done in web services. Carefully test all editing actions during upgrade.
|
|
|
171 |
* The new method format_base::allow_stealth_module_visibility() can indicate whether course format supports "stealth"
|
|
|
172 |
activities mode when they are available but not visible on course page. Course format that supports stealth mode
|
|
|
173 |
must check $cm->is_visible_on_course_page() when displaying activities list on the course page instead of $cm->uservisible.
|
|
|
174 |
For all other plugins except course formats the same property $cm->uservisible indicates if the activity contents
|
|
|
175 |
is actually available to student.
|
|
|
176 |
* Option "Number of sections" (numsections) was removed from topics and weeks formats, instead the actual number of records
|
|
|
177 |
in the course_sections table is treated as a number of sections (excluding section 0 that should always be present).
|
|
|
178 |
* Method create_course() will populate the new course with empty sections if $data->numsections is provided even if
|
|
|
179 |
"numsections" is not an option defined by the course format.
|
|
|
180 |
* course/changenumsections.php can now be used to insert sections at any positions.
|
|
|
181 |
* The variable SECTIONLEFTSIDE was changed from '.left .section-handle img' to '.left .section-handle .icon' in
|
|
|
182 |
course/format/topics/format.js and course/format/weeks/format.js due to the introduction of Font Awesome (see MDL-40759)
|
|
|
183 |
which altered the HTML. Please check if your course format relies on this selector, and if so, update it.
|
|
|
184 |
|
|
|
185 |
=== 3.2 ===
|
|
|
186 |
* Callback delete_course is deprecated and should be replaced with observer for event \core\event\course_content_deleted
|
|
|
187 |
* Course formats can overwrite get_default_course_enddate function to set the default course end date for new courses.
|
|
|
188 |
format_base::get_default_course_enddate uses the new "Course duration" site setting to calculate the default course end date
|
|
|
189 |
from the default course start date.
|
|
|
190 |
* New method format_base::supports_news() which is used to determine whether an Announcements forum will be automatically created on
|
|
|
191 |
course creation. For course format plugin developers, please override format_base::supports_news() to return true if you want the
|
|
|
192 |
Announcements forum to be created upon course creation and remove the block names defined in format_base::get_default_blocks().
|
|
|
193 |
|
|
|
194 |
=== 3.1 ===
|
|
|
195 |
* Course format may use the inplace_editable template to allow quick editing of section names, see
|
|
|
196 |
https://docs.moodle.org/dev/Inplace_editable and MDL-51802 for example implementation.
|
|
|
197 |
|
|
|
198 |
=== 3.0 ===
|
|
|
199 |
* Course formats should now use section_edit_control_items and use the returned array of controls items and their attributes to create a
|
|
|
200 |
renderable menu or array of links. Plugin calls to section_edit_controls will now include the section edit control in the returned array.
|
|
|
201 |
* The section name is now wrapped in a new span (.sectionname > span), process_sections method in format.js should be updated so .sectionname
|
|
|
202 |
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.
|
|
|
203 |
* New method format_base::get_default_section_name retrieves the default section name for the given course format. The base
|
|
|
204 |
implementation basically uses the implementation of format_base::get_section_name. The method can be overridden in
|
|
|
205 |
format_base subclasses that use sections (i.e. format_topics, format_weeks). In relation to the changes made for the default
|
|
|
206 |
section name, the default section name is now being shown when editing the section information.
|
|
|
207 |
|
|
|
208 |
=== 2.9 ===
|
|
|
209 |
* Course formats may support deleting sections, see MDL-10405 for more details.
|
|
|
210 |
format_section_renderer_base::section_edit_controls() is now also called for
|
|
|
211 |
stealth sections and it also returns "delete" control.
|
|
|
212 |
|
|
|
213 |
=== 2.8 ===
|
|
|
214 |
* The activity chooser now uses M.course.format.get_sectionwrapperclass()
|
|
|
215 |
to determine the section selector, rather than a hard-coded `li.section`.
|
|
|
216 |
* Activity duplication in /course/modduplicate.php is deprecated and is now done in /course/mod.php. Deprecated calls will be honored by
|
|
|
217 |
redirecting to /course/mod.php for 3rd party plugin support.
|
|
|
218 |
* New method format_base::section_get_available_hook() allows plugins to override section availability.
|
|
|
219 |
|
|
|
220 |
=== 2.7 ===
|
|
|
221 |
* The ->testedbrowsers array no longer needs to be defined in supports_ajax().
|
|
|
222 |
* format_section_renderer_base::section_hidden has an new second optional argument $courseorid.
|
|
|
223 |
If provided the section name is printed in the not available string when displaying the hidden section.
|
|
|
224 |
|
|
|
225 |
=== 2.6 ===
|
|
|
226 |
|
|
|
227 |
* core_course_renderer::course_section_cm_edit_actions has two new optional arguments and now uses and action_menu component.
|
|
|
228 |
* core_course_renderer::course_section_cm has been altered to call core_course_renderer::course_section_cm_edit_actions with the two new arguments
|
|
|
229 |
* An additional course renderer function has been created which allows you to
|
|
|
230 |
specify the wrapper for a course module within a section (e.g. the <li>). This can be
|
|
|
231 |
found in core_course_renderer::course_section_cm_list_item().
|
|
|
232 |
|
|
|
233 |
=== 2.5 ===
|
|
|
234 |
|
|
|
235 |
* Functions responsible for output in course/lib.php are deprecated, the code is moved to
|
|
|
236 |
appropriate renderers: print_section(), print_section_add_menus(), get_print_section_cm_text(),
|
|
|
237 |
make_editing_buttons()
|
|
|
238 |
See functions' phpdocs in lib/deprecatedlib.php
|
|
|
239 |
* Function get_print_section_cm_text() is deprecated, replaced with methods in cm_info
|
|
|
240 |
|
|
|
241 |
=== 2.4 ===
|
|
|
242 |
|
|
|
243 |
Course format API has been changed significantly. Instead of implementing callbacks course formats
|
|
|
244 |
may overwrite the class format_base. See format_legacy class for a template for upgrading course
|
|
|
245 |
format.
|
|
|
246 |
|
|
|
247 |
* Function settings_navigation::add_course_editing_links() is completely removed, course format
|
|
|
248 |
functions callback_XXXX_request_key() are no longer used (where XXXX is the course format name)
|
|
|
249 |
* functions get_generic_section_name(), get_all_sections(), add_mod_to_section(), get_all_mods()
|
|
|
250 |
are deprecated. See their phpdocs in lib/deprecatedlib.php on how to replace them
|
|
|
251 |
* Course formats may now have their settings.php file as the most of other plugin types
|
|
|
252 |
* Function format_section_renderer_base::is_section_current() is deprecated, overwrite/use
|
|
|
253 |
function is_section_current in format class
|
|
|
254 |
|
|
|
255 |
=== 2.3 ===
|
|
|
256 |
|
|
|
257 |
* The new $course->coursedisplay option was introduced, users can now choose to display
|
|
|
258 |
a section at a time if the course formats support it:
|
|
|
259 |
- COURSE_DISPLAY_SINGLEPAGE indicates the teacher has chosen to display all sections on one page
|
|
|
260 |
- COURSE_DISPLAY_MULTIPAGE indicates the teacher has chose to have seperate pages with each section.
|
|
|
261 |
|
|
|
262 |
* The parameter for 'currently active section' was standardised in core:
|
|
|
263 |
- The course format is passed the currently live section through the $displaysection varaible to format.php
|
|
|
264 |
- A 'section' paramter is the standardised way to pass around the current section in a course
|
|
|
265 |
- Navigation no longer looks for custom parameters defined in callback_format_request_key
|