At some point of time, we always need to tweak or customize the core functionality or flow of the application.
If you are aware of WordPress, then there are hooks and filters for this.
In moodle, We can extend the core features and even tweak them through events and callback functions, even without making any change in the core files.
What is moodle EVENT ?
Moodle events, are the hooks, on which you can register your functions to be called. there are many-many core events available .
you need to create a plugin , under db folder , create an observer.php file.
put following code.
// create a class name as core_event_sample_observer and write a function observe_all, function would be called as soon as user is created in system.
$observers = array(
array(
'eventname' => '\core\event\user_created',
'callback' => 'core_event_sample_observer::observe_user', 'includefile' => null,
'internal' => true,
'priority' => 9999,
),
);
You can include your class by putting file path . and you can get the user detail , by defining parameters in a function.
class core_event_sample_observer {
public static function observe_user($event){
$userid = $event->objectid; // created user id
print_R($event);
// write your code here and do the needful operation
}
}
An administrator can view a list of all types of events fromĀ Site administration > Reports > Events list.
more information can be grabbed form here,
https://docs.moodle.org/dev/Events_API#Events_API
You can execute the code in events callback but think like this as a background process, as it will not interact with page. Simply, you can not use redirect or you can not put any thing that you want to be a part of the rendereded page. For such cases, there are callbacks.
Extending through Callbacks
To solve the above challenges, we use the callback.
Callbacks are the function, in which moodles try to call during execution. These are hooks as in wordpress.
- You write the function in lib.php of your plugin in a standard format.
- The function will be called during execution. Moodle will try to check the function by including files from all the plugins.
following is the sample.
// assuming , xyz is a local plugin and callback will be done while code is being executed from standard_footer_html.
// this will include this js at footer of the moodle page.
function local_xyz_standard_footer_html() {
global $CFG, $DB, $USER;
$output = <<<STR
<script>
window.onload = function(){
alert("Hello");
}();
</script>
STR;
return $output;
}
- as you are writing this, so you do not need to customize and moodle file to inject your code into the page .
- There are many callbacks already available for core functionalities like page rendering or user login or user registration etc .
List of one-to-many callbacks
Callback | Plugin type | Version | Comments | |
---|---|---|---|---|
Navigation, see Navigation API | ||||
extend_navigation_course | Putting up a menu in the course administration menu | * | before Moodle 3.0 was only supported by report and tool plugin types | |
extend_settings_navigation | Putting up a menu in the Site Navigation menu | local, booktool | Note, modules have a one-to-one callback with the same name, see below | |
extend_navigation | local | Note, modules have a one-to-one callback with the same name, see below | ||
extend_navigation_user_settings | Putting up a menu in the User Setting menu | * | 3.0+ | before Moodle 3.0 was only supported by tool plugin types |
extend_navigation_category_settings | Putting up a menu in the Category Administration menu | * | 3.0+ | |
extend_navigation_frontpage | * | 3.1+ | ||
extend_navigation_user | * | 3.1+ | ||
My profile, see My profile API | ||||
myprofile_navigation | * | 2.9+ | ||
Before-actions hooks | ||||
course_module_background_deletion_recommended | * | 3.2+ | see upgrade.txt | |
pre_block_delete | * | 3.1+ | ||
pre_course_category_delete | * | 3.1+ | ||
pre_course_delete | * | 3.1+ | ||
pre_course_module_delete | * | 3.1+ | ||
pre_user_delete | * | 3.1+ | ||
Login_callbacks | ||||
after_config | * | 3.8+ | Triggered as soon as practical on every moodle bootstrap after config has been loaded. The $USER object is available at this point too. | |
after_require_login | * | 3.7+ | eg Add permissions logic across a site or course | |
check_password_policy | * | 3.6+ | ||
print_password_policy | * | 3.8+ (WIP) | ||
pre_signup_requests | * | 3.5 | eg to do actions before sign up such as acceptance of policies, validations, etc | |
extend_change_password_form | * | 3.8+ (WIP) | eg Injecting form elements into the change password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. | |
extend_set_password_form | * | 3.8+ (WIP) | eg Injecting form elements into the set password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. | |
extend_forgot_password_form | * | 3.8+ (WIP) | eg Injecting form elements into the forgot password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. | |
extend_signup_form | * | 3.8+ (WIP) | eg Injecting form elements into the signup form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. | |
validate_extend_change_password_form | * | 3.8+ (WIP) | eg Adding additional validation to the change password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. | |
validate_extend_set_password_form | * | 3.8+ (WIP) | eg Adding additional validation to the set password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. | |
validate_extend_forgot_password_form | * | 3.8+ (WIP) | eg Adding additional validation to the forgot password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. | |
validate_extend_signup_form | * | 3.8+ (WIP) | eg Adding additional validation to the signup form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. | |
post_change_password_requests | * | 3.8+ (WIP) | eg Fire additional actions after a user changes password. | |
post_set_password_requests | * | 3.8+ (WIP) | eg Fire additional actions after a user resets password. | |
post_forgot_password_requests | * | 3.8+ (WIP) | eg Fire additional actions after a user submits a password reset request. | |
post_signup_requests | * | 3.8+ (WIP) | eg Fire additional actions after a user creates an account. | |
Page rendering, see Output_callbacks | ||||
add_htmlattributes | * | 3.3+ | eg Add open graph xml namespace attributes | |
before_footer | * | 3.3+ | eg injecting JS across the site, like analytics | |
before_http_headers | * | 3.3+ | Setting http headers across the site like CSP | |
before_standard_html_head | * | 3.3+ | A better API alternative to appending to $CFG->additionalhtmlhead | |
before_standard_top_of_body_html | * | 3.3+ | ||
render_navbar_output | * | 3.2+ | ||
Course module edit form | ||||
coursemodule_edit_post_actions | * | 3.1+ | ||
coursemodule_standard_elements | * | 3.1+ | Takes parameters $formwrapper and $mform, allows manipulation of editing form, e.g. additional fields. See https://github.com/marcusgreen/moodle-local_callbacks | |
coursemodule_definition_after_data | * | 3.11+ | ||
coursemodule_validation | * | 3.1+ | ||
Modules | ||||
check_updates_since | mod | 3.2+ | See NEWMODULE_Documentation | |
dndupload_register | mod | |||
Admin | ||||
bulk_user_actions | * | 3.9+ | Any plugin typically an admin tool can add new bulk user actions | |
Other | ||||
get_fontawesome_icon_map | * | 3.3+ | https://docs.moodle.org/dev/Moodle_icons#Font_awesome_icons | |
get_question_bank_search_conditions | local | |||
oauth2_system_scopes | * | 3.3+ | ||
rss_get_feed | * | |||
supports_logstore | report | |||
get_shortcuts | ltisource | 3.1+ | ||
before_launch | ltisource | 2.8+ | ||
control_view_profile | * | 3.6+ | ||
store_profiling_data | * | 3.6+ | ||
override_webservice_execution | * | 3.6+ | ||
Deprecated | ||||
cron | * | See Task API | ||
delete_course | mod,report,coursereport,format | Replace with observer to course_contents_deleted event | ||
print_overview | mod | up to 3.2 | New dashboard uses Calendar API to populate events on the timeline | |
report_extend_navigation | coursereport | Plugin type coursereport is deprecated, plugin type report should be used instead |
List of one-to-one callbacks
Callback | Plugin type | Version | Comments |
---|---|---|---|
Comments support, see Comment API | |||
comment_add | * | ||
comment_display | * | ||
comment_permissions | * | ||
comment_template | * | ||
comment_url | * | ||
comment_validate | * | ||
Gradebook | |||
export_%_settings_definition | gradeexport | % is a plugin name without prefix | |
import_%_settings_definition | gradeimport | % is a plugin name without prefix | |
report_%_profilereport | gradereport | % is a plugin name without prefix | |
report_%_settings_definition | gradereport | % is a plugin name without prefix | |
Groups support, see Groups API | |||
allow_group_member_remove | * | ||
restore_group_member | * | For plugins that create their own groups | |
Installation and upgrade | |||
xmldb_%_install | * | Located in db/install.php , % refer to the full plugin name, in case of modules without prefix | |
xmldb_%_install_recovery | * | Located in db/install.php , % refer to the full plugin name, in case of modules without prefix | |
xmldb_%_uninstall | * | Located in db/uninstall.php , % refer to the full plugin name, in case of modules without prefix | |
xmldb_%_upgrade | * | Located in db/upgrade.php , % refer to the full plugin name, in case of modules without prefix | |
LTI source | |||
add_instance_hook | ltisource | ||
messagetype | ltisource | Callback name is the type of the message | |
Question bank support, see Question API | |||
question_pluginfile | * | ||
question_preview_pluginfile | * | ||
questions_in_use | * | since 3.7.5, 3.8.2 (previously only “mod”) | |
Ratings support, see Rating API | |||
rating_can_see_item_ratings | * | 2.9.2+ | |
rating_can_see_item_ratings | * | 2.9.2+ | |
rating_get_item_fields | * | ||
rating_permissions | * | ||
rating_validate | * | ||
Themes | |||
$THEME->csspostprocess | theme | ||
$THEME->extralesscallback | theme | ||
$THEME->lessvariablescallback | theme | ||
page_init | theme | ||
Modules: Calendar and dashboard | |||
core_calendar_event_action_shows_item_count | mod | 3.3+ | |
core_calendar_is_event_visible | mod | 3.3+ | |
core_calendar_provide_event_action | mod | 3.3+ | |
Modules: Course cache | |||
cm_info_dynamic | mod | ||
cm_info_view | mod | ||
get_coursemodule_info | mod | ||
Modules: Course reset | |||
reset_course_form_defaults | mod | ||
reset_course_form_definition | mod | ||
reset_userdata | mod | ||
Modules | |||
delete_instance | mod | ||
dndupload_handle | mod | ||
export_contents | mod | Used in WS get_course_contents | |
extend_settings_navigation | mod,booktool | ||
extends_navigation | mod | ||
get_completion_active_rule_descriptions | mod | 3.3+ | Must be present for modules implementing custom completion rules |
get_completion_state | mod | ||
get_extra_capabilities | mod | ||
get_file_areas | mod | ||
get_recent_mod_activity | mod | ||
get_shortcuts | mod | 3.1+ | |
grade_item_update | mod | ||
grading_areas_list | mod | ||
print_recent_activity | mod | ||
print_recent_mod_activity | mod | ||
refresh_events | mod | ||
rescale_activity_grades | mod | 3.1+ | |
scale_used_anywhere | mod | ||
update_grades | mod | ||
user_complete | mod | ||
user_outline | mod | ||
Glossary formats | |||
glossary_print_entry_% | for glossary formats | Glossary formats is not a plugin type yet, however the list of formats is not hardcoded in the mod_glossary, instead the methods similar to callbacks are used for each subfolder in mod/glossar/format. % refer to the subfolder name, the functions are expected in lib.php | |
glossary_show_entry_% | for glossary formats | – ” – | |
glossary_show_entry_% | for glossary formats | – ” – | |
glossary_show_entry_% | for glossary formats | – ” – | |
Other | |||
global_db_replace | block | ||
inplace_editable | * | See Inplace editable | |
output_fragment_* | * | 3.1+ | see Fragment |
page_type_list | * | Used when displaying page types in block configuration | |
params_for_js | atto | ||
pluginfile | * | Callback checking permissions and preparing the file for serving plugin files, see File API. Note, in case of block plugins the list of arguments is slightly different | |
restore_role_assignment | * | For plugins that create their own role assignments | |
strings_for_js | atto | ||
supports | * | Required for activity modules | |
h5p\canedit::can_edit_content | * | 4.0+ | Plugins can implement this class&method to define, if required, any custom behaviour for deciding whether an H5P content used inside the plugin can be edited or not |
Deprecated | |||
ajax_section_move | format | up to 2.3 | See Course formats |
ajax_support | format | up to 2.3 | See Course formats |
delete_course | mod | up to 3.1 | use event observer |
display_content | format | up to 2.3 | See Course formats |
get_post_actions | mod,booktool | Only called if legacy log is used on the site | |
get_section_name | format | up to 2.3 | See Course formats |
get_section_url | format | up to 2.3 | See Course formats |
get_types | mod,ltisource | up to 3.0 | Replaced with get_shortcuts in 3.1 |
get_view_actions | mod,booktool | Only called if legacy log is used on the site | |
load_content | format | up to 2.3 | See Course formats |
scale_used | mod | up to 3.0 | |
uses_sections | format | up to 2.3 | See Course formats |
question_list_instances | mod | up to 3.8 | Use “questions_in_use” instead |