diff --git a/admin/settings/appearance.php b/admin/settings/appearance.php index 7804f64ebdb..8ae08d7ed6f 100644 --- a/admin/settings/appearance.php +++ b/admin/settings/appearance.php @@ -181,7 +181,6 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp new lang_string('confignavcourselimit', 'admin'), 10, PARAM_INT)); $temp->add(new admin_setting_configcheckbox('usesitenameforsitepages', new lang_string('usesitenameforsitepages', 'admin'), new lang_string('configusesitenameforsitepages', 'admin'), 0)); $temp->add(new admin_setting_configcheckbox('linkadmincategories', new lang_string('linkadmincategories', 'admin'), new lang_string('linkadmincategories_help', 'admin'), 1)); - $temp->add(new admin_setting_configcheckbox('linkcoursesections', new lang_string('linkcoursesections', 'admin'), new lang_string('linkcoursesections_help', 'admin'), 1)); $temp->add(new admin_setting_configcheckbox('navshowfrontpagemods', new lang_string('navshowfrontpagemods', 'admin'), new lang_string('navshowfrontpagemods_help', 'admin'), 1)); $temp->add(new admin_setting_configcheckbox('navadduserpostslinks', new lang_string('navadduserpostslinks', 'admin'), new lang_string('navadduserpostslinks_help', 'admin'), 1)); diff --git a/admin/tool/componentlibrary/hugo/site/data/fontawesomeicons.json b/admin/tool/componentlibrary/hugo/site/data/fontawesomeicons.json index f5c17be08aa..d2de568eca8 100644 --- a/admin/tool/componentlibrary/hugo/site/data/fontawesomeicons.json +++ b/admin/tool/componentlibrary/hugo/site/data/fontawesomeicons.json @@ -1 +1 @@ -[{"name":"core:docs","icon":"fa-info-circle","standardicon":"\"core:docs\""},{"name":"core:book","icon":"fa-book","standardicon":"\"core:book\""},{"name":"core:help","icon":"fa-question-circle text-info","standardicon":"\"core:help\""},{"name":"core:req","icon":"fa-exclamation-circle text-danger","standardicon":"\"core:req\""},{"name":"core:a\/add_file","icon":"fa-file-o","standardicon":"\"core:a\/add_file\""},{"name":"core:a\/create_folder","icon":"fa-folder-o","standardicon":"\"core:a\/create_folder\""},{"name":"core:a\/download_all","icon":"fa-download","standardicon":"\"core:a\/download_all\""},{"name":"core:a\/help","icon":"fa-question-circle text-info","standardicon":"\"core:a\/help\""},{"name":"core:a\/logout","icon":"fa-sign-out","standardicon":"\"core:a\/logout\""},{"name":"core:a\/refresh","icon":"fa-refresh","standardicon":"\"core:a\/refresh\""},{"name":"core:a\/search","icon":"fa-search","standardicon":"\"core:a\/search\""},{"name":"core:a\/setting","icon":"fa-cog","standardicon":"\"core:a\/setting\""},{"name":"core:a\/view_icon_active","icon":"fa-th","standardicon":"\"core:a\/view_icon_active\""},{"name":"core:a\/view_list_active","icon":"fa-list","standardicon":"\"core:a\/view_list_active\""},{"name":"core:a\/view_tree_active","icon":"fa-folder","standardicon":"\"core:a\/view_tree_active\""},{"name":"core:b\/bookmark-new","icon":"fa-bookmark","standardicon":"\"core:b\/bookmark-new\""},{"name":"core:b\/document-edit","icon":"fa-pencil","standardicon":"\"core:b\/document-edit\""},{"name":"core:b\/document-new","icon":"fa-file-o","standardicon":"\"core:b\/document-new\""},{"name":"core:b\/document-properties","icon":"fa-info","standardicon":"\"core:b\/document-properties\""},{"name":"core:b\/edit-copy","icon":"fa-files-o","standardicon":"\"core:b\/edit-copy\""},{"name":"core:b\/edit-delete","icon":"fa-trash","standardicon":"\"core:b\/edit-delete\""},{"name":"core:e\/abbr","icon":"fa-comment","standardicon":"\"core:e\/abbr\""},{"name":"core:e\/absolute","icon":"fa-crosshairs","standardicon":"\"core:e\/absolute\""},{"name":"core:e\/accessibility_checker","icon":"fa-universal-access","standardicon":"\"core:e\/accessibility_checker\""},{"name":"core:e\/acronym","icon":"fa-comment","standardicon":"\"core:e\/acronym\""},{"name":"core:e\/advance_hr","icon":"fa-arrows-h","standardicon":"\"core:e\/advance_hr\""},{"name":"core:e\/align_center","icon":"fa-align-center","standardicon":"\"core:e\/align_center\""},{"name":"core:e\/align_left","icon":"fa-align-left","standardicon":"\"core:e\/align_left\""},{"name":"core:e\/align_right","icon":"fa-align-right","standardicon":"\"core:e\/align_right\""},{"name":"core:e\/anchor","icon":"fa-chain","standardicon":"\"core:e\/anchor\""},{"name":"core:e\/backward","icon":"fa-undo","standardicon":"\"core:e\/backward\""},{"name":"core:e\/bold","icon":"fa-bold","standardicon":"\"core:e\/bold\""},{"name":"core:e\/bullet_list","icon":"fa-list-ul","standardicon":"\"core:e\/bullet_list\""},{"name":"core:e\/cancel","icon":"fa-times","standardicon":"\"core:e\/cancel\""},{"name":"core:e\/cancel_solid_circle","icon":"fas fa-times-circle","standardicon":"\"core:e\/cancel_solid_circle\""},{"name":"core:e\/cell_props","icon":"fa-info","standardicon":"\"core:e\/cell_props\""},{"name":"core:e\/cite","icon":"fa-quote-right","standardicon":"\"core:e\/cite\""},{"name":"core:e\/cleanup_messy_code","icon":"fa-eraser","standardicon":"\"core:e\/cleanup_messy_code\""},{"name":"core:e\/clear_formatting","icon":"fa-i-cursor","standardicon":"\"core:e\/clear_formatting\""},{"name":"core:e\/copy","icon":"fa-clone","standardicon":"\"core:e\/copy\""},{"name":"core:e\/cut","icon":"fa-scissors","standardicon":"\"core:e\/cut\""},{"name":"core:e\/decrease_indent","icon":"fa-outdent","standardicon":"\"core:e\/decrease_indent\""},{"name":"core:e\/delete_col","icon":"fa-minus","standardicon":"\"core:e\/delete_col\""},{"name":"core:e\/delete_row","icon":"fa-minus","standardicon":"\"core:e\/delete_row\""},{"name":"core:e\/delete","icon":"fa-minus","standardicon":"\"core:e\/delete\""},{"name":"core:e\/delete_table","icon":"fa-minus","standardicon":"\"core:e\/delete_table\""},{"name":"core:e\/document_properties","icon":"fa-info","standardicon":"\"core:e\/document_properties\""},{"name":"core:e\/emoticons","icon":"fa-smile-o","standardicon":"\"core:e\/emoticons\""},{"name":"core:e\/find_replace","icon":"fa-search-plus","standardicon":"\"core:e\/find_replace\""},{"name":"core:e\/file-text","icon":"fa-file-text","standardicon":"\"core:e\/file-text\""},{"name":"core:e\/forward","icon":"fa-arrow-right","standardicon":"\"core:e\/forward\""},{"name":"core:e\/fullpage","icon":"fa-arrows-alt","standardicon":"\"core:e\/fullpage\""},{"name":"core:e\/fullscreen","icon":"fa-arrows-alt","standardicon":"\"core:e\/fullscreen\""},{"name":"core:e\/help","icon":"fa-question-circle","standardicon":"\"core:e\/help\""},{"name":"core:e\/increase_indent","icon":"fa-indent","standardicon":"\"core:e\/increase_indent\""},{"name":"core:e\/insert_col_after","icon":"fa-columns","standardicon":"\"core:e\/insert_col_after\""},{"name":"core:e\/insert_col_before","icon":"fa-columns","standardicon":"\"core:e\/insert_col_before\""},{"name":"core:e\/insert_date","icon":"fa-calendar","standardicon":"\"core:e\/insert_date\""},{"name":"core:e\/insert_edit_image","icon":"fa-picture-o","standardicon":"\"core:e\/insert_edit_image\""},{"name":"core:e\/insert_edit_link","icon":"fa-link","standardicon":"\"core:e\/insert_edit_link\""},{"name":"core:e\/insert_edit_video","icon":"fa-file-video-o","standardicon":"\"core:e\/insert_edit_video\""},{"name":"core:e\/insert_file","icon":"fa-file","standardicon":"\"core:e\/insert_file\""},{"name":"core:e\/insert_horizontal_ruler","icon":"fa-arrows-h","standardicon":"\"core:e\/insert_horizontal_ruler\""},{"name":"core:e\/insert_nonbreaking_space","icon":"fa-square-o","standardicon":"\"core:e\/insert_nonbreaking_space\""},{"name":"core:e\/insert_page_break","icon":"fa-level-down","standardicon":"\"core:e\/insert_page_break\""},{"name":"core:e\/insert_row_after","icon":"fa-plus","standardicon":"\"core:e\/insert_row_after\""},{"name":"core:e\/insert_row_before","icon":"fa-plus","standardicon":"\"core:e\/insert_row_before\""},{"name":"core:e\/insert","icon":"fa-plus","standardicon":"\"core:e\/insert\""},{"name":"core:e\/insert_time","icon":"fa-clock-o","standardicon":"\"core:e\/insert_time\""},{"name":"core:e\/italic","icon":"fa-italic","standardicon":"\"core:e\/italic\""},{"name":"core:e\/justify","icon":"fa-align-justify","standardicon":"\"core:e\/justify\""},{"name":"core:e\/layers_over","icon":"fa-level-up","standardicon":"\"core:e\/layers_over\""},{"name":"core:e\/layers","icon":"fa-window-restore","standardicon":"\"core:e\/layers\""},{"name":"core:e\/layers_under","icon":"fa-level-down","standardicon":"\"core:e\/layers_under\""},{"name":"core:e\/left_to_right","icon":"fa-chevron-right","standardicon":"\"core:e\/left_to_right\""},{"name":"core:e\/manage_files","icon":"fa-files-o","standardicon":"\"core:e\/manage_files\""},{"name":"core:e\/math","icon":"fa-calculator","standardicon":"\"core:e\/math\""},{"name":"core:e\/merge_cells","icon":"fa-compress","standardicon":"\"core:e\/merge_cells\""},{"name":"core:e\/new_document","icon":"fa-file-o","standardicon":"\"core:e\/new_document\""},{"name":"core:e\/numbered_list","icon":"fa-list-ol","standardicon":"\"core:e\/numbered_list\""},{"name":"core:e\/page_break","icon":"fa-level-down","standardicon":"\"core:e\/page_break\""},{"name":"core:e\/paste","icon":"fa-clipboard","standardicon":"\"core:e\/paste\""},{"name":"core:e\/paste_text","icon":"fa-clipboard","standardicon":"\"core:e\/paste_text\""},{"name":"core:e\/paste_word","icon":"fa-clipboard","standardicon":"\"core:e\/paste_word\""},{"name":"core:e\/prevent_autolink","icon":"fa-exclamation","standardicon":"\"core:e\/prevent_autolink\""},{"name":"core:e\/preview","icon":"fa-search-plus","standardicon":"\"core:e\/preview\""},{"name":"core:e\/print","icon":"fa-print","standardicon":"\"core:e\/print\""},{"name":"core:e\/question","icon":"fa-question","standardicon":"\"core:e\/question\""},{"name":"core:e\/redo","icon":"fa-repeat","standardicon":"\"core:e\/redo\""},{"name":"core:e\/remove_link","icon":"fa-chain-broken","standardicon":"\"core:e\/remove_link\""},{"name":"core:e\/remove_page_break","icon":"fa-remove","standardicon":"\"core:e\/remove_page_break\""},{"name":"core:e\/resize","icon":"fa-expand","standardicon":"\"core:e\/resize\""},{"name":"core:e\/restore_draft","icon":"fa-undo","standardicon":"\"core:e\/restore_draft\""},{"name":"core:e\/restore_last_draft","icon":"fa-undo","standardicon":"\"core:e\/restore_last_draft\""},{"name":"core:e\/right_to_left","icon":"fa-chevron-left","standardicon":"\"core:e\/right_to_left\""},{"name":"core:e\/row_props","icon":"fa-info","standardicon":"\"core:e\/row_props\""},{"name":"core:e\/save","icon":"fa-floppy-o","standardicon":"\"core:e\/save\""},{"name":"core:e\/screenreader_helper","icon":"fa-braille","standardicon":"\"core:e\/screenreader_helper\""},{"name":"core:e\/search","icon":"fa-search","standardicon":"\"core:e\/search\""},{"name":"core:e\/select_all","icon":"fa-arrows-h","standardicon":"\"core:e\/select_all\""},{"name":"core:e\/show_invisible_characters","icon":"fa-eye-slash","standardicon":"\"core:e\/show_invisible_characters\""},{"name":"core:e\/source_code","icon":"fa-code","standardicon":"\"core:e\/source_code\""},{"name":"core:e\/special_character","icon":"fa-pencil-square-o","standardicon":"\"core:e\/special_character\""},{"name":"core:e\/spellcheck","icon":"fa-check","standardicon":"\"core:e\/spellcheck\""},{"name":"core:e\/split_cells","icon":"fa-columns","standardicon":"\"core:e\/split_cells\""},{"name":"core:e\/strikethrough","icon":"fa-strikethrough","standardicon":"\"core:e\/strikethrough\""},{"name":"core:e\/styleparagraph","icon":"fa-font","standardicon":"\"core:e\/styleparagraph\""},{"name":"core:e\/subscript","icon":"fa-subscript","standardicon":"\"core:e\/subscript\""},{"name":"core:e\/superscript","icon":"fa-superscript","standardicon":"\"core:e\/superscript\""},{"name":"core:e\/table_props","icon":"fa-table","standardicon":"\"core:e\/table_props\""},{"name":"core:e\/table","icon":"fa-table","standardicon":"\"core:e\/table\""},{"name":"core:e\/template","icon":"fa-sticky-note","standardicon":"\"core:e\/template\""},{"name":"core:e\/text_color_picker","icon":"fa-paint-brush","standardicon":"\"core:e\/text_color_picker\""},{"name":"core:e\/text_color","icon":"fa-paint-brush","standardicon":"\"core:e\/text_color\""},{"name":"core:e\/text_highlight_picker","icon":"fa-lightbulb-o","standardicon":"\"core:e\/text_highlight_picker\""},{"name":"core:e\/text_highlight","icon":"fa-lightbulb-o","standardicon":"\"core:e\/text_highlight\""},{"name":"core:e\/tick","icon":"fa-check","standardicon":"\"core:e\/tick\""},{"name":"core:e\/toggle_blockquote","icon":"fa-quote-left","standardicon":"\"core:e\/toggle_blockquote\""},{"name":"core:e\/underline","icon":"fa-underline","standardicon":"\"core:e\/underline\""},{"name":"core:e\/undo","icon":"fa-undo","standardicon":"\"core:e\/undo\""},{"name":"core:e\/visual_aid","icon":"fa-universal-access","standardicon":"\"core:e\/visual_aid\""},{"name":"core:e\/visual_blocks","icon":"fa-audio-description","standardicon":"\"core:e\/visual_blocks\""},{"name":"core:i\/activities","icon":"fa-file-pen","standardicon":"\"core:i\/activities\""},{"name":"core:i\/addblock","icon":"fa-plus-square","standardicon":"\"core:i\/addblock\""},{"name":"core:i\/assignroles","icon":"fa-user-plus","standardicon":"\"core:i\/assignroles\""},{"name":"core:i\/asterisk","icon":"fa-asterisk","standardicon":"\"core:i\/asterisk\""},{"name":"core:i\/backup","icon":"fa-file-zip-o","standardicon":"\"core:i\/backup\""},{"name":"core:i\/badge","icon":"fa-shield","standardicon":"\"core:i\/badge\""},{"name":"core:i\/breadcrumbdivider","icon":"fa-angle-right","standardicon":"\"core:i\/breadcrumbdivider\""},{"name":"core:i\/bullhorn","icon":"fa-bullhorn","standardicon":"\"core:i\/bullhorn\""},{"name":"core:i\/calc","icon":"fa-calculator","standardicon":"\"core:i\/calc\""},{"name":"core:i\/calendar","icon":"fa-calendar","standardicon":"\"core:i\/calendar\""},{"name":"core:i\/calendareventdescription","icon":"fa-align-left","standardicon":"\"core:i\/calendareventdescription\""},{"name":"core:i\/calendareventtime","icon":"fa-clock-o","standardicon":"\"core:i\/calendareventtime\""},{"name":"core:i\/caution","icon":"fa-exclamation text-warning","standardicon":"\"core:i\/caution\""},{"name":"core:i\/checked","icon":"fa-check","standardicon":"\"core:i\/checked\""},{"name":"core:i\/checkedcircle","icon":"fa-check-circle","standardicon":"\"core:i\/checkedcircle\""},{"name":"core:i\/checkpermissions","icon":"fa-unlock-alt","standardicon":"\"core:i\/checkpermissions\""},{"name":"core:i\/cohort","icon":"fa-users","standardicon":"\"core:i\/cohort\""},{"name":"core:i\/competencies","icon":"fa-check-square-o","standardicon":"\"core:i\/competencies\""},{"name":"core:i\/completion_self","icon":"fa-user-o","standardicon":"\"core:i\/completion_self\""},{"name":"core:i\/contentbank","icon":"fa-paint-brush","standardicon":"\"core:i\/contentbank\""},{"name":"core:i\/dashboard","icon":"fa-tachometer","standardicon":"\"core:i\/dashboard\""},{"name":"core:i\/categoryevent","icon":"fa-cubes","standardicon":"\"core:i\/categoryevent\""},{"name":"core:i\/course","icon":"fa-graduation-cap","standardicon":"\"core:i\/course\""},{"name":"core:i\/courseevent","icon":"fa-graduation-cap","standardicon":"\"core:i\/courseevent\""},{"name":"core:i\/customfield","icon":"fa-hand-o-right","standardicon":"\"core:i\/customfield\""},{"name":"core:i\/db","icon":"fa-database","standardicon":"\"core:i\/db\""},{"name":"core:i\/delete","icon":"fa-trash","standardicon":"\"core:i\/delete\""},{"name":"core:i\/down","icon":"fa-arrow-down","standardicon":"\"core:i\/down\""},{"name":"core:i\/dragdrop","icon":"fa-arrows","standardicon":"\"core:i\/dragdrop\""},{"name":"core:i\/duration","icon":"fa-clock-o","standardicon":"\"core:i\/duration\""},{"name":"core:i\/emojicategoryactivities","icon":"fa-futbol-o","standardicon":"\"core:i\/emojicategoryactivities\""},{"name":"core:i\/emojicategoryanimalsnature","icon":"fa-leaf","standardicon":"\"core:i\/emojicategoryanimalsnature\""},{"name":"core:i\/emojicategoryflags","icon":"fa-flag","standardicon":"\"core:i\/emojicategoryflags\""},{"name":"core:i\/emojicategoryfooddrink","icon":"fa-cutlery","standardicon":"\"core:i\/emojicategoryfooddrink\""},{"name":"core:i\/emojicategoryobjects","icon":"fa-lightbulb-o","standardicon":"\"core:i\/emojicategoryobjects\""},{"name":"core:i\/emojicategorypeoplebody","icon":"fa-male","standardicon":"\"core:i\/emojicategorypeoplebody\""},{"name":"core:i\/emojicategoryrecent","icon":"fa-clock-o","standardicon":"\"core:i\/emojicategoryrecent\""},{"name":"core:i\/emojicategorysmileysemotion","icon":"fa-smile-o","standardicon":"\"core:i\/emojicategorysmileysemotion\""},{"name":"core:i\/emojicategorysymbols","icon":"fa-heart","standardicon":"\"core:i\/emojicategorysymbols\""},{"name":"core:i\/emojicategorytravelplaces","icon":"fa-plane","standardicon":"\"core:i\/emojicategorytravelplaces\""},{"name":"core:i\/edit","icon":"fa-pencil","standardicon":"\"core:i\/edit\""},{"name":"core:i\/email","icon":"fa-envelope","standardicon":"\"core:i\/email\""},{"name":"core:i\/empty","icon":"fa-fw","standardicon":"\"core:i\/empty\""},{"name":"core:i\/enrolmentsuspended","icon":"fa-pause","standardicon":"\"core:i\/enrolmentsuspended\""},{"name":"core:i\/enrolusers","icon":"fa-user-plus","standardicon":"\"core:i\/enrolusers\""},{"name":"core:i\/excluded","icon":"fa-minus-circle","standardicon":"\"core:i\/excluded\""},{"name":"core:i\/expired","icon":"fa-exclamation text-warning","standardicon":"\"core:i\/expired\""},{"name":"core:i\/export","icon":"fa-download","standardicon":"\"core:i\/export\""},{"name":"core:i\/link","icon":"fa-link","standardicon":"\"core:i\/link\""},{"name":"core:i\/externallink","icon":"fa-external-link","standardicon":"\"core:i\/externallink\""},{"name":"core:i\/files","icon":"fa-file","standardicon":"\"core:i\/files\""},{"name":"core:i\/filter","icon":"fa-filter","standardicon":"\"core:i\/filter\""},{"name":"core:i\/flagged","icon":"fa-flag","standardicon":"\"core:i\/flagged\""},{"name":"core:i\/folder","icon":"fa-folder","standardicon":"\"core:i\/folder\""},{"name":"core:i\/grade_correct","icon":"fa-check text-success","standardicon":"\"core:i\/grade_correct\""},{"name":"core:i\/grade_incorrect","icon":"fa-remove text-danger","standardicon":"\"core:i\/grade_incorrect\""},{"name":"core:i\/grade_partiallycorrect","icon":"fa-check-square","standardicon":"\"core:i\/grade_partiallycorrect\""},{"name":"core:i\/grades","icon":"fa-table","standardicon":"\"core:i\/grades\""},{"name":"core:i\/grading","icon":"fa-magic","standardicon":"\"core:i\/grading\""},{"name":"core:i\/gradingnotifications","icon":"fa-bell-o","standardicon":"\"core:i\/gradingnotifications\""},{"name":"core:i\/groupevent","icon":"fa-group","standardicon":"\"core:i\/groupevent\""},{"name":"core:i\/group","icon":"fa-users","standardicon":"\"core:i\/group\""},{"name":"core:i\/home","icon":"fa-home","standardicon":"\"core:i\/home\""},{"name":"core:i\/hide","icon":"fa-eye","standardicon":"\"core:i\/hide\""},{"name":"core:i\/hierarchylock","icon":"fa-lock","standardicon":"\"core:i\/hierarchylock\""},{"name":"core:i\/import","icon":"fa-level-up","standardicon":"\"core:i\/import\""},{"name":"core:i\/incorrect","icon":"fa-exclamation","standardicon":"\"core:i\/incorrect\""},{"name":"core:i\/info","icon":"fa-info","standardicon":"\"core:i\/info\""},{"name":"core:i\/invalid","icon":"fa-times text-danger","standardicon":"\"core:i\/invalid\""},{"name":"core:i\/item","icon":"fa-circle","standardicon":"\"core:i\/item\""},{"name":"core:i\/loading","icon":"fa-circle-o-notch fa-spin","standardicon":"\"core:i\/loading\""},{"name":"core:i\/loading_small","icon":"fa-circle-o-notch fa-spin","standardicon":"\"core:i\/loading_small\""},{"name":"core:i\/location","icon":"fa-map-marker","standardicon":"\"core:i\/location\""},{"name":"core:i\/lock","icon":"fa-lock","standardicon":"\"core:i\/lock\""},{"name":"core:i\/log","icon":"fa-list-alt","standardicon":"\"core:i\/log\""},{"name":"core:i\/mahara_host","icon":"fa-id-badge","standardicon":"\"core:i\/mahara_host\""},{"name":"core:i\/manual_item","icon":"fa-pencil-square-o","standardicon":"\"core:i\/manual_item\""},{"name":"core:i\/marked","icon":"fa-circle","standardicon":"\"core:i\/marked\""},{"name":"core:i\/marker","icon":"fa-circle-o","standardicon":"\"core:i\/marker\""},{"name":"core:i\/mean","icon":"fa-calculator","standardicon":"\"core:i\/mean\""},{"name":"core:i\/menu","icon":"fa-ellipsis-v","standardicon":"\"core:i\/menu\""},{"name":"core:i\/menubars","icon":"fa-bars","standardicon":"\"core:i\/menubars\""},{"name":"core:i\/messagecontentaudio","icon":"fa-headphones","standardicon":"\"core:i\/messagecontentaudio\""},{"name":"core:i\/messagecontentimage","icon":"fa-image","standardicon":"\"core:i\/messagecontentimage\""},{"name":"core:i\/messagecontentvideo","icon":"fa-film","standardicon":"\"core:i\/messagecontentvideo\""},{"name":"core:i\/messagecontentmultimediageneral","icon":"fa-file-video-o","standardicon":"\"core:i\/messagecontentmultimediageneral\""},{"name":"core:i\/mnethost","icon":"fa-external-link","standardicon":"\"core:i\/mnethost\""},{"name":"core:i\/moodle_host","icon":"fa-graduation-cap","standardicon":"\"core:i\/moodle_host\""},{"name":"core:i\/moremenu","icon":"fa-ellipsis-h","standardicon":"\"core:i\/moremenu\""},{"name":"core:i\/move_2d","icon":"fa-arrows","standardicon":"\"core:i\/move_2d\""},{"name":"core:i\/muted","icon":"fa-microphone-slash","standardicon":"\"core:i\/muted\""},{"name":"core:i\/navigationitem","icon":"fa-fw","standardicon":"\"core:i\/navigationitem\""},{"name":"core:i\/ne_red_mark","icon":"fa-remove","standardicon":"\"core:i\/ne_red_mark\""},{"name":"core:i\/new","icon":"fa-bolt","standardicon":"\"core:i\/new\""},{"name":"core:i\/news","icon":"fa-newspaper-o","standardicon":"\"core:i\/news\""},{"name":"core:i\/next","icon":"fa-chevron-right","standardicon":"\"core:i\/next\""},{"name":"core:i\/nosubcat","icon":"fa-plus-square-o","standardicon":"\"core:i\/nosubcat\""},{"name":"core:i\/notifications","icon":"fa-bell-o","standardicon":"\"core:i\/notifications\""},{"name":"core:i\/open","icon":"fa-folder-open","standardicon":"\"core:i\/open\""},{"name":"core:i\/otherevent","icon":"fa-calendar","standardicon":"\"core:i\/otherevent\""},{"name":"core:i\/outcomes","icon":"fa-tasks","standardicon":"\"core:i\/outcomes\""},{"name":"core:i\/overriden_grade","icon":"fa-edit","standardicon":"\"core:i\/overriden_grade\""},{"name":"core:i\/payment","icon":"fa-money","standardicon":"\"core:i\/payment\""},{"name":"core:i\/permissionlock","icon":"fa-lock","standardicon":"\"core:i\/permissionlock\""},{"name":"core:i\/permissions","icon":"fa-pencil-square-o","standardicon":"\"core:i\/permissions\""},{"name":"core:i\/persona_sign_in_black","icon":"fa-male","standardicon":"\"core:i\/persona_sign_in_black\""},{"name":"core:i\/portfolio","icon":"fa-id-badge","standardicon":"\"core:i\/portfolio\""},{"name":"core:i\/preview","icon":"fa-search-plus","standardicon":"\"core:i\/preview\""},{"name":"core:i\/previous","icon":"fa-chevron-left","standardicon":"\"core:i\/previous\""},{"name":"core:i\/privatefiles","icon":"fa-file-o","standardicon":"\"core:i\/privatefiles\""},{"name":"core:i\/progressbar","icon":"fa-spinner fa-spin","standardicon":"\"core:i\/progressbar\""},{"name":"core:i\/publish","icon":"fa-share","standardicon":"\"core:i\/publish\""},{"name":"core:i\/questions","icon":"fa-question","standardicon":"\"core:i\/questions\""},{"name":"core:i\/reload","icon":"fa-refresh","standardicon":"\"core:i\/reload\""},{"name":"core:i\/report","icon":"fa-area-chart","standardicon":"\"core:i\/report\""},{"name":"core:i\/repository","icon":"fa-hdd-o","standardicon":"\"core:i\/repository\""},{"name":"core:i\/restore","icon":"fa-level-up","standardicon":"\"core:i\/restore\""},{"name":"core:i\/return","icon":"fa-arrow-left","standardicon":"\"core:i\/return\""},{"name":"core:i\/risk_config","icon":"fa-exclamation text-muted","standardicon":"\"core:i\/risk_config\""},{"name":"core:i\/risk_managetrust","icon":"fa-exclamation-triangle text-warning","standardicon":"\"core:i\/risk_managetrust\""},{"name":"core:i\/risk_personal","icon":"fa-exclamation-circle text-info","standardicon":"\"core:i\/risk_personal\""},{"name":"core:i\/risk_spam","icon":"fa-exclamation text-primary","standardicon":"\"core:i\/risk_spam\""},{"name":"core:i\/risk_xss","icon":"fa-exclamation-triangle text-danger","standardicon":"\"core:i\/risk_xss\""},{"name":"core:i\/role","icon":"fa-user-md","standardicon":"\"core:i\/role\""},{"name":"core:i\/rss","icon":"fa-rss","standardicon":"\"core:i\/rss\""},{"name":"core:i\/rsssitelogo","icon":"fa-graduation-cap","standardicon":"\"core:i\/rsssitelogo\""},{"name":"core:i\/scales","icon":"fa-balance-scale","standardicon":"\"core:i\/scales\""},{"name":"core:i\/scheduled","icon":"fa-calendar-check-o","standardicon":"\"core:i\/scheduled\""},{"name":"core:i\/search","icon":"fa-search","standardicon":"\"core:i\/search\""},{"name":"core:i\/section","icon":"fa-folder-o","standardicon":"\"core:i\/section\""},{"name":"core:i\/sendmessage","icon":"fa-paper-plane","standardicon":"\"core:i\/sendmessage\""},{"name":"core:i\/settings","icon":"fa-cog","standardicon":"\"core:i\/settings\""},{"name":"core:i\/share","icon":"fa-share-square-o","standardicon":"\"core:i\/share\""},{"name":"core:i\/show","icon":"fa-eye-slash","standardicon":"\"core:i\/show\""},{"name":"core:i\/siteevent","icon":"fa-globe","standardicon":"\"core:i\/siteevent\""},{"name":"core:i\/star","icon":"fa-star","standardicon":"\"core:i\/star\""},{"name":"core:i\/star-o","icon":"fa-star-o","standardicon":"\"core:i\/star-o\""},{"name":"core:i\/star-rating","icon":"fa-star","standardicon":"\"core:i\/star-rating\""},{"name":"core:i\/stats","icon":"fa-line-chart","standardicon":"\"core:i\/stats\""},{"name":"core:i\/switch","icon":"fa-exchange","standardicon":"\"core:i\/switch\""},{"name":"core:i\/switchrole","icon":"fa-user-secret","standardicon":"\"core:i\/switchrole\""},{"name":"core:i\/trash","icon":"fa-trash","standardicon":"\"core:i\/trash\""},{"name":"core:i\/twoway","icon":"fa-arrows-h","standardicon":"\"core:i\/twoway\""},{"name":"core:i\/unchecked","icon":"fa-square-o","standardicon":"\"core:i\/unchecked\""},{"name":"core:i\/uncheckedcircle","icon":"fa-circle-o","standardicon":"\"core:i\/uncheckedcircle\""},{"name":"core:i\/unflagged","icon":"fa-flag-o","standardicon":"\"core:i\/unflagged\""},{"name":"core:i\/unlock","icon":"fa-unlock","standardicon":"\"core:i\/unlock\""},{"name":"core:i\/up","icon":"fa-arrow-up","standardicon":"\"core:i\/up\""},{"name":"core:i\/upload","icon":"fa-upload","standardicon":"\"core:i\/upload\""},{"name":"core:i\/userevent","icon":"fa-user","standardicon":"\"core:i\/userevent\""},{"name":"core:i\/user","icon":"fa-user","standardicon":"\"core:i\/user\""},{"name":"core:i\/users","icon":"fa-users","standardicon":"\"core:i\/users\""},{"name":"core:i\/valid","icon":"fa-check text-success","standardicon":"\"core:i\/valid\""},{"name":"core:i\/warning","icon":"fa-exclamation text-warning","standardicon":"\"core:i\/warning\""},{"name":"core:i\/window_close","icon":"fa-window-close","standardicon":"\"core:i\/window_close\""},{"name":"core:i\/withsubcat","icon":"fa-plus-square","standardicon":"\"core:i\/withsubcat\""},{"name":"core:i\/language","icon":"fa-language","standardicon":"\"core:i\/language\""},{"name":"core:m\/USD","icon":"fa-usd","standardicon":"\"core:m\/USD\""},{"name":"core:t\/addcontact","icon":"fa-address-card","standardicon":"\"core:t\/addcontact\""},{"name":"core:t\/add","icon":"fa-plus","standardicon":"\"core:t\/add\""},{"name":"core:t\/angles-down","icon":"fa-angles-down","standardicon":"\"core:t\/angles-down\""},{"name":"core:t\/angles-left","icon":"fa-angles-left","standardicon":"\"core:t\/angles-left\""},{"name":"core:t\/angles-right","icon":"fa-angles-right","standardicon":"\"core:t\/angles-right\""},{"name":"core:t\/angles-up","icon":"fa-angles-up","standardicon":"\"core:t\/angles-up\""},{"name":"core:t\/approve","icon":"fa-thumbs-up","standardicon":"\"core:t\/approve\""},{"name":"core:t\/assignroles","icon":"fa-user-circle","standardicon":"\"core:t\/assignroles\""},{"name":"core:t\/award","icon":"fa-trophy","standardicon":"\"core:t\/award\""},{"name":"core:t\/backpack","icon":"fa-shopping-bag","standardicon":"\"core:t\/backpack\""},{"name":"core:t\/backup","icon":"fa-arrow-circle-down","standardicon":"\"core:t\/backup\""},{"name":"core:t\/block","icon":"fa-ban","standardicon":"\"core:t\/block\""},{"name":"core:t\/block_to_dock_rtl","icon":"fa-chevron-right","standardicon":"\"core:t\/block_to_dock_rtl\""},{"name":"core:t\/block_to_dock","icon":"fa-chevron-left","standardicon":"\"core:t\/block_to_dock\""},{"name":"core:t\/blocks_drawer","icon":"fa-chevron-left","standardicon":"\"core:t\/blocks_drawer\""},{"name":"core:t\/blocks_drawer_rtl","icon":"fa-chevron-right","standardicon":"\"core:t\/blocks_drawer_rtl\""},{"name":"core:t\/calc_off","icon":"fa-calculator","standardicon":"\"core:t\/calc_off\""},{"name":"core:t\/calc","icon":"fa-calculator","standardicon":"\"core:t\/calc\""},{"name":"core:t\/check","icon":"fa-check","standardicon":"\"core:t\/check\""},{"name":"core:t\/clipboard","icon":"fa-clipboard","standardicon":"\"core:t\/clipboard\""},{"name":"core:t\/cohort","icon":"fa-users","standardicon":"\"core:t\/cohort\""},{"name":"core:t\/collapsed_empty_rtl","icon":"fa-caret-square-o-left","standardicon":"\"core:t\/collapsed_empty_rtl\""},{"name":"core:t\/collapsed_empty","icon":"fa-caret-square-o-right","standardicon":"\"core:t\/collapsed_empty\""},{"name":"core:t\/collapsed_rtl","icon":"fa-caret-left","standardicon":"\"core:t\/collapsed_rtl\""},{"name":"core:t\/collapsed","icon":"fa-caret-right","standardicon":"\"core:t\/collapsed\""},{"name":"core:t\/collapsedcaret","icon":"fa-caret-right","standardicon":"\"core:t\/collapsedcaret\""},{"name":"core:t\/collapsedchevron","icon":"fa-chevron-right","standardicon":"\"core:t\/collapsedchevron\""},{"name":"core:t\/collapsedchevron_rtl","icon":"fa-chevron-left","standardicon":"\"core:t\/collapsedchevron_rtl\""},{"name":"core:t\/collapsedchevron_up","icon":"fa-chevron-up","standardicon":"\"core:t\/collapsedchevron_up\""},{"name":"core:t\/completion_complete","icon":"fa-circle","standardicon":"\"core:t\/completion_complete\""},{"name":"core:t\/completion_fail","icon":"fa-times","standardicon":"\"core:t\/completion_fail\""},{"name":"core:t\/completion_incomplete","icon":"fa-circle-thin","standardicon":"\"core:t\/completion_incomplete\""},{"name":"core:t\/contextmenu","icon":"fa-cog","standardicon":"\"core:t\/contextmenu\""},{"name":"core:t\/copy","icon":"fa-copy","standardicon":"\"core:t\/copy\""},{"name":"core:t\/delete","icon":"fa-trash","standardicon":"\"core:t\/delete\""},{"name":"core:t\/dockclose","icon":"fa-window-close","standardicon":"\"core:t\/dockclose\""},{"name":"core:t\/dock_to_block_rtl","icon":"fa-chevron-right","standardicon":"\"core:t\/dock_to_block_rtl\""},{"name":"core:t\/dock_to_block","icon":"fa-chevron-left","standardicon":"\"core:t\/dock_to_block\""},{"name":"core:t\/download","icon":"fa-download","standardicon":"\"core:t\/download\""},{"name":"core:t\/down","icon":"fa-arrow-down","standardicon":"\"core:t\/down\""},{"name":"core:t\/downlong","icon":"fa-long-arrow-down","standardicon":"\"core:t\/downlong\""},{"name":"core:t\/dropdown","icon":"fa-cog","standardicon":"\"core:t\/dropdown\""},{"name":"core:t\/editinline","icon":"fa-pencil","standardicon":"\"core:t\/editinline\""},{"name":"core:t\/edit_menu","icon":"fa-cog","standardicon":"\"core:t\/edit_menu\""},{"name":"core:t\/editstring","icon":"fa-pencil","standardicon":"\"core:t\/editstring\""},{"name":"core:t\/edit","icon":"fa-cog","standardicon":"\"core:t\/edit\""},{"name":"core:t\/emailno","icon":"fa-ban","standardicon":"\"core:t\/emailno\""},{"name":"core:t\/email","icon":"fa-envelope-o","standardicon":"\"core:t\/email\""},{"name":"core:t\/emptystar","icon":"fa-star-o","standardicon":"\"core:t\/emptystar\""},{"name":"core:t\/enrolusers","icon":"fa-user-plus","standardicon":"\"core:t\/enrolusers\""},{"name":"core:t\/expanded","icon":"fa-caret-down","standardicon":"\"core:t\/expanded\""},{"name":"core:t\/expandedchevron","icon":"fa-chevron-down","standardicon":"\"core:t\/expandedchevron\""},{"name":"core:t\/go","icon":"fa-play","standardicon":"\"core:t\/go\""},{"name":"core:t\/grades","icon":"fa-table","standardicon":"\"core:t\/grades\""},{"name":"core:t\/groupn","icon":"fa-user","standardicon":"\"core:t\/groupn\""},{"name":"core:t\/groups","icon":"fa-user-circle","standardicon":"\"core:t\/groups\""},{"name":"core:t\/groupv","icon":"fa-user-circle-o","standardicon":"\"core:t\/groupv\""},{"name":"core:t\/hide","icon":"fa-eye","standardicon":"\"core:t\/hide\""},{"name":"core:t\/index_drawer","icon":"fa-list","standardicon":"\"core:t\/index_drawer\""},{"name":"core:t\/left","icon":"fa-arrow-left","standardicon":"\"core:t\/left\""},{"name":"core:t\/less","icon":"fa-caret-up","standardicon":"\"core:t\/less\""},{"name":"core:t\/life-ring","icon":"fa-life-ring","standardicon":"\"core:t\/life-ring\""},{"name":"core:t\/locked","icon":"fa-lock","standardicon":"\"core:t\/locked\""},{"name":"core:t\/lock","icon":"fa-unlock","standardicon":"\"core:t\/lock\""},{"name":"core:t\/locktime","icon":"fa-lock","standardicon":"\"core:t\/locktime\""},{"name":"core:t\/markasread","icon":"fa-check","standardicon":"\"core:t\/markasread\""},{"name":"core:t\/messages","icon":"fa-comments","standardicon":"\"core:t\/messages\""},{"name":"core:t\/messages-o","icon":"fa-comments-o","standardicon":"\"core:t\/messages-o\""},{"name":"core:t\/message","icon":"fa-comment-o","standardicon":"\"core:t\/message\""},{"name":"core:t\/more","icon":"fa-caret-down","standardicon":"\"core:t\/more\""},{"name":"core:t\/move","icon":"fa-arrows-v","standardicon":"\"core:t\/move\""},{"name":"core:t\/online","icon":"fa-circle","standardicon":"\"core:t\/online\""},{"name":"core:t\/passwordunmask-edit","icon":"fa-pencil","standardicon":"\"core:t\/passwordunmask-edit\""},{"name":"core:t\/passwordunmask-reveal","icon":"fa-eye","standardicon":"\"core:t\/passwordunmask-reveal\""},{"name":"core:t\/play","icon":"fa-play","standardicon":"\"core:t\/play\""},{"name":"core:t\/portfolioadd","icon":"fa-plus","standardicon":"\"core:t\/portfolioadd\""},{"name":"core:t\/preferences","icon":"fa-wrench","standardicon":"\"core:t\/preferences\""},{"name":"core:t\/preview","icon":"fa-search-plus","standardicon":"\"core:t\/preview\""},{"name":"core:t\/print","icon":"fa-print","standardicon":"\"core:t\/print\""},{"name":"core:t\/removecontact","icon":"fa-user-times","standardicon":"\"core:t\/removecontact\""},{"name":"core:t\/reload","icon":"fa-refresh","standardicon":"\"core:t\/reload\""},{"name":"core:t\/reset","icon":"fa-repeat","standardicon":"\"core:t\/reset\""},{"name":"core:t\/restore","icon":"fa-arrow-circle-up","standardicon":"\"core:t\/restore\""},{"name":"core:t\/right","icon":"fa-arrow-right","standardicon":"\"core:t\/right\""},{"name":"core:t\/sendmessage","icon":"fa-paper-plane","standardicon":"\"core:t\/sendmessage\""},{"name":"core:t\/show","icon":"fa-eye-slash","standardicon":"\"core:t\/show\""},{"name":"core:t\/sort_by","icon":"fa-sort-amount-asc","standardicon":"\"core:t\/sort_by\""},{"name":"core:t\/sort_asc","icon":"fa-sort-asc","standardicon":"\"core:t\/sort_asc\""},{"name":"core:t\/sort_desc","icon":"fa-sort-desc","standardicon":"\"core:t\/sort_desc\""},{"name":"core:t\/sort","icon":"fa-sort","standardicon":"\"core:t\/sort\""},{"name":"core:t\/stealth","icon":"fa-low-vision","standardicon":"\"core:t\/stealth\""},{"name":"core:t\/stop","icon":"fa-stop","standardicon":"\"core:t\/stop\""},{"name":"core:t\/switch_minus","icon":"fa-minus","standardicon":"\"core:t\/switch_minus\""},{"name":"core:t\/switch_plus","icon":"fa-plus","standardicon":"\"core:t\/switch_plus\""},{"name":"core:t\/switch_whole","icon":"fa-square-o","standardicon":"\"core:t\/switch_whole\""},{"name":"core:t\/tags","icon":"fa-tags","standardicon":"\"core:t\/tags\""},{"name":"core:t\/unblock","icon":"fa-commenting","standardicon":"\"core:t\/unblock\""},{"name":"core:t\/unlocked","icon":"fa-unlock-alt","standardicon":"\"core:t\/unlocked\""},{"name":"core:t\/unlock","icon":"fa-lock","standardicon":"\"core:t\/unlock\""},{"name":"core:t\/up","icon":"fa-arrow-up","standardicon":"\"core:t\/up\""},{"name":"core:t\/uplong","icon":"fa-long-arrow-up","standardicon":"\"core:t\/uplong\""},{"name":"core:t\/user","icon":"fa-user","standardicon":"\"core:t\/user\""},{"name":"core:t\/viewdetails","icon":"fa-list","standardicon":"\"core:t\/viewdetails\""},{"name":"qtype_ddmarker:crosshairs","icon":"fa-crosshairs","standardicon":"\"qtype_ddmarker:crosshairs\""},{"name":"qtype_ddmarker:grid","icon":"fa-th","standardicon":"\"qtype_ddmarker:grid\""},{"name":"mod_book:chapter","icon":"fa-bookmark-o","standardicon":"\"mod_book:chapter\""},{"name":"mod_book:nav_prev","icon":"fa-arrow-left","standardicon":"\"mod_book:nav_prev\""},{"name":"mod_book:nav_sep","icon":"fa-minus","standardicon":"\"mod_book:nav_sep\""},{"name":"mod_book:add","icon":"fa-plus","standardicon":"\"mod_book:add\""},{"name":"mod_book:nav_next","icon":"fa-arrow-right","standardicon":"\"mod_book:nav_next\""},{"name":"mod_book:nav_exit","icon":"fa-arrow-up","standardicon":"\"mod_book:nav_exit\""},{"name":"mod_choice:row","icon":"fa-info","standardicon":"\"mod_choice:row\""},{"name":"mod_choice:column","icon":"fa-columns","standardicon":"\"mod_choice:column\""},{"name":"mod_data:field\/checkbox","icon":"fa-check-square-o","standardicon":"\"mod_data:field\/checkbox\""},{"name":"mod_data:field\/date","icon":"fa-calendar-o","standardicon":"\"mod_data:field\/date\""},{"name":"mod_data:field\/file","icon":"fa-file","standardicon":"\"mod_data:field\/file\""},{"name":"mod_data:field\/latlong","icon":"fa-globe","standardicon":"\"mod_data:field\/latlong\""},{"name":"mod_data:field\/menu","icon":"fa-bars","standardicon":"\"mod_data:field\/menu\""},{"name":"mod_data:field\/multimenu","icon":"fa-bars","standardicon":"\"mod_data:field\/multimenu\""},{"name":"mod_data:field\/number","icon":"fa-hashtag","standardicon":"\"mod_data:field\/number\""},{"name":"mod_data:field\/picture","icon":"fa-picture-o","standardicon":"\"mod_data:field\/picture\""},{"name":"mod_data:field\/radiobutton","icon":"fa-circle-o","standardicon":"\"mod_data:field\/radiobutton\""},{"name":"mod_data:field\/textarea","icon":"fa-font","standardicon":"\"mod_data:field\/textarea\""},{"name":"mod_data:field\/text","icon":"fa-i-cursor","standardicon":"\"mod_data:field\/text\""},{"name":"mod_data:field\/url","icon":"fa-link","standardicon":"\"mod_data:field\/url\""},{"name":"mod_feedback:required","icon":"fa-exclamation-circle","standardicon":"\"mod_feedback:required\""},{"name":"mod_feedback:notrequired","icon":"fa-question-circle-o","standardicon":"\"mod_feedback:notrequired\""},{"name":"mod_forum:i\/pinned","icon":"fa-map-pin","standardicon":"\"mod_forum:i\/pinned\""},{"name":"mod_forum:t\/selected","icon":"fa-check","standardicon":"\"mod_forum:t\/selected\""},{"name":"mod_forum:t\/subscribed","icon":"fa-envelope-o","standardicon":"\"mod_forum:t\/subscribed\""},{"name":"mod_forum:t\/unsubscribed","icon":"fa-envelope-open-o","standardicon":"\"mod_forum:t\/unsubscribed\""},{"name":"mod_forum:t\/star","icon":"fa-star","standardicon":"\"mod_forum:t\/star\""},{"name":"mod_glossary:export","icon":"fa-download","standardicon":"\"mod_glossary:export\""},{"name":"mod_glossary:minus","icon":"fa-minus","standardicon":"\"mod_glossary:minus\""},{"name":"mod_lesson:e\/copy","icon":"fa-clone","standardicon":"\"mod_lesson:e\/copy\""},{"name":"mod_lti:warning","icon":"fa-exclamation text-warning","standardicon":"\"mod_lti:warning\""},{"name":"mod_quiz:navflagged","icon":"fa-flag","standardicon":"\"mod_quiz:navflagged\""},{"name":"mod_scorm:assetc","icon":"fa-file-archive-o","standardicon":"\"mod_scorm:assetc\""},{"name":"mod_scorm:asset","icon":"fa-file-archive-o","standardicon":"\"mod_scorm:asset\""},{"name":"mod_scorm:browsed","icon":"fa-book","standardicon":"\"mod_scorm:browsed\""},{"name":"mod_scorm:completed","icon":"fa-check-square-o","standardicon":"\"mod_scorm:completed\""},{"name":"mod_scorm:failed","icon":"fa-times","standardicon":"\"mod_scorm:failed\""},{"name":"mod_scorm:incomplete","icon":"fa-pencil-square-o","standardicon":"\"mod_scorm:incomplete\""},{"name":"mod_scorm:minus","icon":"fa-minus","standardicon":"\"mod_scorm:minus\""},{"name":"mod_scorm:notattempted","icon":"fa-square-o","standardicon":"\"mod_scorm:notattempted\""},{"name":"mod_scorm:passed","icon":"fa-check","standardicon":"\"mod_scorm:passed\""},{"name":"mod_scorm:plus","icon":"fa-plus","standardicon":"\"mod_scorm:plus\""},{"name":"mod_scorm:popdown","icon":"fa-window-close-o","standardicon":"\"mod_scorm:popdown\""},{"name":"mod_scorm:popup","icon":"fa-window-restore","standardicon":"\"mod_scorm:popup\""},{"name":"mod_scorm:suspend","icon":"fa-pause","standardicon":"\"mod_scorm:suspend\""},{"name":"mod_scorm:wait","icon":"fa-clock-o","standardicon":"\"mod_scorm:wait\""},{"name":"mod_wiki:attachment","icon":"fa-paperclip","standardicon":"\"mod_wiki:attachment\""},{"name":"mod_workshop:userplan\/task-info","icon":"fa-info text-info","standardicon":"\"mod_workshop:userplan\/task-info\""},{"name":"mod_workshop:userplan\/task-todo","icon":"fa-square-o","standardicon":"\"mod_workshop:userplan\/task-todo\""},{"name":"mod_workshop:userplan\/task-done","icon":"fa-check text-success","standardicon":"\"mod_workshop:userplan\/task-done\""},{"name":"mod_workshop:userplan\/task-fail","icon":"fa-remove text-danger","standardicon":"\"mod_workshop:userplan\/task-fail\""},{"name":"customfield_date:checked","icon":"fa-check-square-o","standardicon":"\"customfield_date:checked\""},{"name":"customfield_date:notchecked","icon":"fa-square-o","standardicon":"\"customfield_date:notchecked\""},{"name":"enrol_guest:withpassword","icon":"fa-key","standardicon":"\"enrol_guest:withpassword\""},{"name":"enrol_guest:withoutpassword","icon":"fa-unlock-alt","standardicon":"\"enrol_guest:withoutpassword\""},{"name":"enrol_lti:managedeployments","icon":"fa-sitemap","standardicon":"\"enrol_lti:managedeployments\""},{"name":"enrol_lti:platformdetails","icon":"fa-pencil-square-o","standardicon":"\"enrol_lti:platformdetails\""},{"name":"enrol_lti:enrolinstancewarning","icon":"fa-exclamation-circle text-danger","standardicon":"\"enrol_lti:enrolinstancewarning\""},{"name":"enrol_self:withkey","icon":"fa-key","standardicon":"\"enrol_self:withkey\""},{"name":"enrol_self:withoutkey","icon":"fa-sign-in","standardicon":"\"enrol_self:withoutkey\""},{"name":"block_accessreview:smile","icon":"fa-smile-o","standardicon":"\"block_accessreview:smile\""},{"name":"block_accessreview:frown","icon":"fa-frown-o","standardicon":"\"block_accessreview:frown\""},{"name":"block_accessreview:errorsfound","icon":"fa-ban","standardicon":"\"block_accessreview:errorsfound\""},{"name":"block_accessreview:f\/pdf","icon":"fa-file-pdf-o","standardicon":"\"block_accessreview:f\/pdf\""},{"name":"block_accessreview:f\/video","icon":"fa-file-video-o","standardicon":"\"block_accessreview:f\/video\""},{"name":"block_accessreview:f\/find","icon":"fa-bar-chart","standardicon":"\"block_accessreview:f\/find\""},{"name":"block_accessreview:f\/form","icon":"fa-pencil-square-o","standardicon":"\"block_accessreview:f\/form\""},{"name":"block_accessreview:f\/image","icon":"fa-image","standardicon":"\"block_accessreview:f\/image\""},{"name":"block_accessreview:f\/layout","icon":"fa-th-large","standardicon":"\"block_accessreview:f\/layout\""},{"name":"block_accessreview:f\/link","icon":"fa-link","standardicon":"\"block_accessreview:f\/link\""},{"name":"block_accessreview:f\/media","icon":"fa-play-circle-o","standardicon":"\"block_accessreview:f\/media\""},{"name":"block_accessreview:f\/table","icon":"fa-table","standardicon":"\"block_accessreview:f\/table\""},{"name":"block_accessreview:f\/text","icon":"fa-font","standardicon":"\"block_accessreview:f\/text\""},{"name":"block_accessreview:t\/fail","icon":"fa-ban","standardicon":"\"block_accessreview:t\/fail\""},{"name":"block_accessreview:t\/pass","icon":"fa-check","standardicon":"\"block_accessreview:t\/pass\""},{"name":"gradingform_guide:info","icon":"fa-info-circle","standardicon":"\"gradingform_guide:info\""},{"name":"gradingform_guide:plus","icon":"fa-plus","standardicon":"\"gradingform_guide:plus\""},{"name":"tool_brickfield:f\/award","icon":"fa-tachometer","standardicon":"\"tool_brickfield:f\/award\""},{"name":"tool_brickfield:f\/done","icon":"fa-check-circle-o","standardicon":"\"tool_brickfield:f\/done\""},{"name":"tool_brickfield:f\/done2","icon":"fa-check-square-o","standardicon":"\"tool_brickfield:f\/done2\""},{"name":"tool_brickfield:f\/error","icon":"fa-times-circle-o","standardicon":"\"tool_brickfield:f\/error\""},{"name":"tool_brickfield:f\/find","icon":"fa-bar-chart","standardicon":"\"tool_brickfield:f\/find\""},{"name":"tool_brickfield:f\/total","icon":"fa-calculator","standardicon":"\"tool_brickfield:f\/total\""},{"name":"tool_brickfield:f\/form","icon":"fa-pencil-square-o","standardicon":"\"tool_brickfield:f\/form\""},{"name":"tool_brickfield:f\/image","icon":"fa-image","standardicon":"\"tool_brickfield:f\/image\""},{"name":"tool_brickfield:f\/layout","icon":"fa-th-large","standardicon":"\"tool_brickfield:f\/layout\""},{"name":"tool_brickfield:f\/link","icon":"fa-link","standardicon":"\"tool_brickfield:f\/link\""},{"name":"tool_brickfield:f\/media","icon":"fa-play-circle-o","standardicon":"\"tool_brickfield:f\/media\""},{"name":"tool_brickfield:f\/table","icon":"fa-table","standardicon":"\"tool_brickfield:f\/table\""},{"name":"tool_brickfield:f\/text","icon":"fa-font","standardicon":"\"tool_brickfield:f\/text\""},{"name":"tool_lp:url","icon":"fa-external-link","standardicon":"\"tool_lp:url\""},{"name":"tool_policy:agreed","icon":"fa-check text-success","standardicon":"\"tool_policy:agreed\""},{"name":"tool_policy:declined","icon":"fa-times text-danger","standardicon":"\"tool_policy:declined\""},{"name":"tool_policy:pending","icon":"fa-clock-o text-warning","standardicon":"\"tool_policy:pending\""},{"name":"tool_policy:partial","icon":"fa-exclamation-triangle text-warning","standardicon":"\"tool_policy:partial\""},{"name":"tool_policy:level","icon":"fa-level-up fa-rotate-90 text-muted","standardicon":"\"tool_policy:level\""},{"name":"tool_recyclebin:trash","icon":"fa-trash","standardicon":"\"tool_recyclebin:trash\""},{"name":"tool_usertours:t\/export","icon":"fa-download","standardicon":"\"tool_usertours:t\/export\""},{"name":"tool_usertours:i\/reload","icon":"fa-refresh","standardicon":"\"tool_usertours:i\/reload\""},{"name":"tool_usertours:t\/filler","icon":"fa-spacer","standardicon":"\"tool_usertours:t\/filler\""},{"name":"atto_collapse:icon","icon":"fa-level-down","standardicon":"\"atto_collapse:icon\""},{"name":"atto_recordrtc:i\/audiortc","icon":"fa-microphone","standardicon":"\"atto_recordrtc:i\/audiortc\""},{"name":"atto_recordrtc:i\/videortc","icon":"fa-video-camera","standardicon":"\"atto_recordrtc:i\/videortc\""}] \ No newline at end of file +[{"name":"core:docs","icon":"fa-info-circle","standardicon":"\"core:docs\""},{"name":"core:book","icon":"fa-book","standardicon":"\"core:book\""},{"name":"core:help","icon":"fa-question-circle text-info","standardicon":"\"core:help\""},{"name":"core:req","icon":"fa-exclamation-circle text-danger","standardicon":"\"core:req\""},{"name":"core:a\/add_file","icon":"fa-file-o","standardicon":"\"core:a\/add_file\""},{"name":"core:a\/create_folder","icon":"fa-folder-o","standardicon":"\"core:a\/create_folder\""},{"name":"core:a\/download_all","icon":"fa-download","standardicon":"\"core:a\/download_all\""},{"name":"core:a\/help","icon":"fa-question-circle text-info","standardicon":"\"core:a\/help\""},{"name":"core:a\/logout","icon":"fa-sign-out","standardicon":"\"core:a\/logout\""},{"name":"core:a\/refresh","icon":"fa-refresh","standardicon":"\"core:a\/refresh\""},{"name":"core:a\/search","icon":"fa-search","standardicon":"\"core:a\/search\""},{"name":"core:a\/setting","icon":"fa-cog","standardicon":"\"core:a\/setting\""},{"name":"core:a\/view_icon_active","icon":"fa-th","standardicon":"\"core:a\/view_icon_active\""},{"name":"core:a\/view_list_active","icon":"fa-list","standardicon":"\"core:a\/view_list_active\""},{"name":"core:a\/view_tree_active","icon":"fa-folder","standardicon":"\"core:a\/view_tree_active\""},{"name":"core:b\/bookmark-new","icon":"fa-bookmark","standardicon":"\"core:b\/bookmark-new\""},{"name":"core:b\/document-edit","icon":"fa-pencil","standardicon":"\"core:b\/document-edit\""},{"name":"core:b\/document-new","icon":"fa-file-o","standardicon":"\"core:b\/document-new\""},{"name":"core:b\/document-properties","icon":"fa-info","standardicon":"\"core:b\/document-properties\""},{"name":"core:b\/edit-copy","icon":"fa-files-o","standardicon":"\"core:b\/edit-copy\""},{"name":"core:b\/edit-delete","icon":"fa-trash","standardicon":"\"core:b\/edit-delete\""},{"name":"core:e\/abbr","icon":"fa-comment","standardicon":"\"core:e\/abbr\""},{"name":"core:e\/absolute","icon":"fa-crosshairs","standardicon":"\"core:e\/absolute\""},{"name":"core:e\/accessibility_checker","icon":"fa-universal-access","standardicon":"\"core:e\/accessibility_checker\""},{"name":"core:e\/acronym","icon":"fa-comment","standardicon":"\"core:e\/acronym\""},{"name":"core:e\/advance_hr","icon":"fa-arrows-h","standardicon":"\"core:e\/advance_hr\""},{"name":"core:e\/align_center","icon":"fa-align-center","standardicon":"\"core:e\/align_center\""},{"name":"core:e\/align_left","icon":"fa-align-left","standardicon":"\"core:e\/align_left\""},{"name":"core:e\/align_right","icon":"fa-align-right","standardicon":"\"core:e\/align_right\""},{"name":"core:e\/anchor","icon":"fa-chain","standardicon":"\"core:e\/anchor\""},{"name":"core:e\/backward","icon":"fa-undo","standardicon":"\"core:e\/backward\""},{"name":"core:e\/bold","icon":"fa-bold","standardicon":"\"core:e\/bold\""},{"name":"core:e\/bullet_list","icon":"fa-list-ul","standardicon":"\"core:e\/bullet_list\""},{"name":"core:e\/cancel","icon":"fa-times","standardicon":"\"core:e\/cancel\""},{"name":"core:e\/cancel_solid_circle","icon":"fas fa-times-circle","standardicon":"\"core:e\/cancel_solid_circle\""},{"name":"core:e\/cell_props","icon":"fa-info","standardicon":"\"core:e\/cell_props\""},{"name":"core:e\/cite","icon":"fa-quote-right","standardicon":"\"core:e\/cite\""},{"name":"core:e\/cleanup_messy_code","icon":"fa-eraser","standardicon":"\"core:e\/cleanup_messy_code\""},{"name":"core:e\/clear_formatting","icon":"fa-i-cursor","standardicon":"\"core:e\/clear_formatting\""},{"name":"core:e\/copy","icon":"fa-clone","standardicon":"\"core:e\/copy\""},{"name":"core:e\/cut","icon":"fa-scissors","standardicon":"\"core:e\/cut\""},{"name":"core:e\/decrease_indent","icon":"fa-outdent","standardicon":"\"core:e\/decrease_indent\""},{"name":"core:e\/delete_col","icon":"fa-minus","standardicon":"\"core:e\/delete_col\""},{"name":"core:e\/delete_row","icon":"fa-minus","standardicon":"\"core:e\/delete_row\""},{"name":"core:e\/delete","icon":"fa-minus","standardicon":"\"core:e\/delete\""},{"name":"core:e\/delete_table","icon":"fa-minus","standardicon":"\"core:e\/delete_table\""},{"name":"core:e\/document_properties","icon":"fa-info","standardicon":"\"core:e\/document_properties\""},{"name":"core:e\/emoticons","icon":"fa-smile-o","standardicon":"\"core:e\/emoticons\""},{"name":"core:e\/find_replace","icon":"fa-search-plus","standardicon":"\"core:e\/find_replace\""},{"name":"core:e\/file-text","icon":"fa-file-text","standardicon":"\"core:e\/file-text\""},{"name":"core:e\/forward","icon":"fa-arrow-right","standardicon":"\"core:e\/forward\""},{"name":"core:e\/fullpage","icon":"fa-arrows-alt","standardicon":"\"core:e\/fullpage\""},{"name":"core:e\/fullscreen","icon":"fa-arrows-alt","standardicon":"\"core:e\/fullscreen\""},{"name":"core:e\/help","icon":"fa-question-circle","standardicon":"\"core:e\/help\""},{"name":"core:e\/increase_indent","icon":"fa-indent","standardicon":"\"core:e\/increase_indent\""},{"name":"core:e\/insert_col_after","icon":"fa-columns","standardicon":"\"core:e\/insert_col_after\""},{"name":"core:e\/insert_col_before","icon":"fa-columns","standardicon":"\"core:e\/insert_col_before\""},{"name":"core:e\/insert_date","icon":"fa-calendar","standardicon":"\"core:e\/insert_date\""},{"name":"core:e\/insert_edit_image","icon":"fa-picture-o","standardicon":"\"core:e\/insert_edit_image\""},{"name":"core:e\/insert_edit_link","icon":"fa-link","standardicon":"\"core:e\/insert_edit_link\""},{"name":"core:e\/insert_edit_video","icon":"fa-file-video-o","standardicon":"\"core:e\/insert_edit_video\""},{"name":"core:e\/insert_file","icon":"fa-file","standardicon":"\"core:e\/insert_file\""},{"name":"core:e\/insert_horizontal_ruler","icon":"fa-arrows-h","standardicon":"\"core:e\/insert_horizontal_ruler\""},{"name":"core:e\/insert_nonbreaking_space","icon":"fa-square-o","standardicon":"\"core:e\/insert_nonbreaking_space\""},{"name":"core:e\/insert_page_break","icon":"fa-level-down","standardicon":"\"core:e\/insert_page_break\""},{"name":"core:e\/insert_row_after","icon":"fa-plus","standardicon":"\"core:e\/insert_row_after\""},{"name":"core:e\/insert_row_before","icon":"fa-plus","standardicon":"\"core:e\/insert_row_before\""},{"name":"core:e\/insert","icon":"fa-plus","standardicon":"\"core:e\/insert\""},{"name":"core:e\/insert_time","icon":"fa-clock-o","standardicon":"\"core:e\/insert_time\""},{"name":"core:e\/italic","icon":"fa-italic","standardicon":"\"core:e\/italic\""},{"name":"core:e\/justify","icon":"fa-align-justify","standardicon":"\"core:e\/justify\""},{"name":"core:e\/layers_over","icon":"fa-level-up","standardicon":"\"core:e\/layers_over\""},{"name":"core:e\/layers","icon":"fa-window-restore","standardicon":"\"core:e\/layers\""},{"name":"core:e\/layers_under","icon":"fa-level-down","standardicon":"\"core:e\/layers_under\""},{"name":"core:e\/left_to_right","icon":"fa-chevron-right","standardicon":"\"core:e\/left_to_right\""},{"name":"core:e\/manage_files","icon":"fa-files-o","standardicon":"\"core:e\/manage_files\""},{"name":"core:e\/math","icon":"fa-calculator","standardicon":"\"core:e\/math\""},{"name":"core:e\/merge_cells","icon":"fa-compress","standardicon":"\"core:e\/merge_cells\""},{"name":"core:e\/new_document","icon":"fa-file-o","standardicon":"\"core:e\/new_document\""},{"name":"core:e\/numbered_list","icon":"fa-list-ol","standardicon":"\"core:e\/numbered_list\""},{"name":"core:e\/page_break","icon":"fa-level-down","standardicon":"\"core:e\/page_break\""},{"name":"core:e\/paste","icon":"fa-clipboard","standardicon":"\"core:e\/paste\""},{"name":"core:e\/paste_text","icon":"fa-clipboard","standardicon":"\"core:e\/paste_text\""},{"name":"core:e\/paste_word","icon":"fa-clipboard","standardicon":"\"core:e\/paste_word\""},{"name":"core:e\/prevent_autolink","icon":"fa-exclamation","standardicon":"\"core:e\/prevent_autolink\""},{"name":"core:e\/preview","icon":"fa-search-plus","standardicon":"\"core:e\/preview\""},{"name":"core:e\/print","icon":"fa-print","standardicon":"\"core:e\/print\""},{"name":"core:e\/question","icon":"fa-question","standardicon":"\"core:e\/question\""},{"name":"core:e\/redo","icon":"fa-repeat","standardicon":"\"core:e\/redo\""},{"name":"core:e\/remove_link","icon":"fa-chain-broken","standardicon":"\"core:e\/remove_link\""},{"name":"core:e\/remove_page_break","icon":"fa-remove","standardicon":"\"core:e\/remove_page_break\""},{"name":"core:e\/resize","icon":"fa-expand","standardicon":"\"core:e\/resize\""},{"name":"core:e\/restore_draft","icon":"fa-undo","standardicon":"\"core:e\/restore_draft\""},{"name":"core:e\/restore_last_draft","icon":"fa-undo","standardicon":"\"core:e\/restore_last_draft\""},{"name":"core:e\/right_to_left","icon":"fa-chevron-left","standardicon":"\"core:e\/right_to_left\""},{"name":"core:e\/row_props","icon":"fa-info","standardicon":"\"core:e\/row_props\""},{"name":"core:e\/save","icon":"fa-floppy-o","standardicon":"\"core:e\/save\""},{"name":"core:e\/screenreader_helper","icon":"fa-braille","standardicon":"\"core:e\/screenreader_helper\""},{"name":"core:e\/search","icon":"fa-search","standardicon":"\"core:e\/search\""},{"name":"core:e\/select_all","icon":"fa-arrows-h","standardicon":"\"core:e\/select_all\""},{"name":"core:e\/show_invisible_characters","icon":"fa-eye-slash","standardicon":"\"core:e\/show_invisible_characters\""},{"name":"core:e\/source_code","icon":"fa-code","standardicon":"\"core:e\/source_code\""},{"name":"core:e\/special_character","icon":"fa-pencil-square-o","standardicon":"\"core:e\/special_character\""},{"name":"core:e\/spellcheck","icon":"fa-check","standardicon":"\"core:e\/spellcheck\""},{"name":"core:e\/split_cells","icon":"fa-columns","standardicon":"\"core:e\/split_cells\""},{"name":"core:e\/strikethrough","icon":"fa-strikethrough","standardicon":"\"core:e\/strikethrough\""},{"name":"core:e\/styleparagraph","icon":"fa-font","standardicon":"\"core:e\/styleparagraph\""},{"name":"core:e\/subscript","icon":"fa-subscript","standardicon":"\"core:e\/subscript\""},{"name":"core:e\/superscript","icon":"fa-superscript","standardicon":"\"core:e\/superscript\""},{"name":"core:e\/table_props","icon":"fa-table","standardicon":"\"core:e\/table_props\""},{"name":"core:e\/table","icon":"fa-table","standardicon":"\"core:e\/table\""},{"name":"core:e\/template","icon":"fa-sticky-note","standardicon":"\"core:e\/template\""},{"name":"core:e\/text_color_picker","icon":"fa-paint-brush","standardicon":"\"core:e\/text_color_picker\""},{"name":"core:e\/text_color","icon":"fa-paint-brush","standardicon":"\"core:e\/text_color\""},{"name":"core:e\/text_highlight_picker","icon":"fa-lightbulb-o","standardicon":"\"core:e\/text_highlight_picker\""},{"name":"core:e\/text_highlight","icon":"fa-lightbulb-o","standardicon":"\"core:e\/text_highlight\""},{"name":"core:e\/tick","icon":"fa-check","standardicon":"\"core:e\/tick\""},{"name":"core:e\/toggle_blockquote","icon":"fa-quote-left","standardicon":"\"core:e\/toggle_blockquote\""},{"name":"core:e\/underline","icon":"fa-underline","standardicon":"\"core:e\/underline\""},{"name":"core:e\/undo","icon":"fa-undo","standardicon":"\"core:e\/undo\""},{"name":"core:e\/visual_aid","icon":"fa-universal-access","standardicon":"\"core:e\/visual_aid\""},{"name":"core:e\/visual_blocks","icon":"fa-audio-description","standardicon":"\"core:e\/visual_blocks\""},{"name":"core:i\/activities","icon":"fa-file-pen","standardicon":"\"core:i\/activities\""},{"name":"core:i\/addblock","icon":"fa-plus-square","standardicon":"\"core:i\/addblock\""},{"name":"core:i\/assignroles","icon":"fa-user-plus","standardicon":"\"core:i\/assignroles\""},{"name":"core:i\/asterisk","icon":"fa-asterisk","standardicon":"\"core:i\/asterisk\""},{"name":"core:i\/backup","icon":"fa-file-zip-o","standardicon":"\"core:i\/backup\""},{"name":"core:i\/badge","icon":"fa-shield","standardicon":"\"core:i\/badge\""},{"name":"core:i\/breadcrumbdivider","icon":"fa-angle-right","standardicon":"\"core:i\/breadcrumbdivider\""},{"name":"core:i\/bullhorn","icon":"fa-bullhorn","standardicon":"\"core:i\/bullhorn\""},{"name":"core:i\/calc","icon":"fa-calculator","standardicon":"\"core:i\/calc\""},{"name":"core:i\/calendar","icon":"fa-calendar","standardicon":"\"core:i\/calendar\""},{"name":"core:i\/calendareventdescription","icon":"fa-align-left","standardicon":"\"core:i\/calendareventdescription\""},{"name":"core:i\/calendareventtime","icon":"fa-clock-o","standardicon":"\"core:i\/calendareventtime\""},{"name":"core:i\/caution","icon":"fa-exclamation text-warning","standardicon":"\"core:i\/caution\""},{"name":"core:i\/checked","icon":"fa-check","standardicon":"\"core:i\/checked\""},{"name":"core:i\/checkedcircle","icon":"fa-check-circle","standardicon":"\"core:i\/checkedcircle\""},{"name":"core:i\/checkpermissions","icon":"fa-unlock-alt","standardicon":"\"core:i\/checkpermissions\""},{"name":"core:i\/cohort","icon":"fa-users","standardicon":"\"core:i\/cohort\""},{"name":"core:i\/competencies","icon":"fa-check-square-o","standardicon":"\"core:i\/competencies\""},{"name":"core:i\/completion_self","icon":"fa-user-o","standardicon":"\"core:i\/completion_self\""},{"name":"core:i\/contentbank","icon":"fa-paint-brush","standardicon":"\"core:i\/contentbank\""},{"name":"core:i\/dashboard","icon":"fa-tachometer","standardicon":"\"core:i\/dashboard\""},{"name":"core:i\/categoryevent","icon":"fa-cubes","standardicon":"\"core:i\/categoryevent\""},{"name":"core:i\/course","icon":"fa-graduation-cap","standardicon":"\"core:i\/course\""},{"name":"core:i\/courseevent","icon":"fa-graduation-cap","standardicon":"\"core:i\/courseevent\""},{"name":"core:i\/customfield","icon":"fa-hand-o-right","standardicon":"\"core:i\/customfield\""},{"name":"core:i\/db","icon":"fa-database","standardicon":"\"core:i\/db\""},{"name":"core:i\/delete","icon":"fa-trash","standardicon":"\"core:i\/delete\""},{"name":"core:i\/down","icon":"fa-arrow-down","standardicon":"\"core:i\/down\""},{"name":"core:i\/dragdrop","icon":"fa-arrows","standardicon":"\"core:i\/dragdrop\""},{"name":"core:i\/duration","icon":"fa-clock-o","standardicon":"\"core:i\/duration\""},{"name":"core:i\/emojicategoryactivities","icon":"fa-futbol-o","standardicon":"\"core:i\/emojicategoryactivities\""},{"name":"core:i\/emojicategoryanimalsnature","icon":"fa-leaf","standardicon":"\"core:i\/emojicategoryanimalsnature\""},{"name":"core:i\/emojicategoryflags","icon":"fa-flag","standardicon":"\"core:i\/emojicategoryflags\""},{"name":"core:i\/emojicategoryfooddrink","icon":"fa-cutlery","standardicon":"\"core:i\/emojicategoryfooddrink\""},{"name":"core:i\/emojicategoryobjects","icon":"fa-lightbulb-o","standardicon":"\"core:i\/emojicategoryobjects\""},{"name":"core:i\/emojicategorypeoplebody","icon":"fa-male","standardicon":"\"core:i\/emojicategorypeoplebody\""},{"name":"core:i\/emojicategoryrecent","icon":"fa-clock-o","standardicon":"\"core:i\/emojicategoryrecent\""},{"name":"core:i\/emojicategorysmileysemotion","icon":"fa-smile-o","standardicon":"\"core:i\/emojicategorysmileysemotion\""},{"name":"core:i\/emojicategorysymbols","icon":"fa-heart","standardicon":"\"core:i\/emojicategorysymbols\""},{"name":"core:i\/emojicategorytravelplaces","icon":"fa-plane","standardicon":"\"core:i\/emojicategorytravelplaces\""},{"name":"core:i\/edit","icon":"fa-pencil","standardicon":"\"core:i\/edit\""},{"name":"core:i\/email","icon":"fa-envelope","standardicon":"\"core:i\/email\""},{"name":"core:i\/empty","icon":"fa-fw","standardicon":"\"core:i\/empty\""},{"name":"core:i\/enrolmentsuspended","icon":"fa-pause","standardicon":"\"core:i\/enrolmentsuspended\""},{"name":"core:i\/enrolusers","icon":"fa-user-plus","standardicon":"\"core:i\/enrolusers\""},{"name":"core:i\/excluded","icon":"fa-minus-circle","standardicon":"\"core:i\/excluded\""},{"name":"core:i\/expired","icon":"fa-exclamation text-warning","standardicon":"\"core:i\/expired\""},{"name":"core:i\/export","icon":"fa-download","standardicon":"\"core:i\/export\""},{"name":"core:i\/link","icon":"fa-link","standardicon":"\"core:i\/link\""},{"name":"core:i\/externallink","icon":"fa-external-link","standardicon":"\"core:i\/externallink\""},{"name":"core:i\/files","icon":"fa-file","standardicon":"\"core:i\/files\""},{"name":"core:i\/filter","icon":"fa-filter","standardicon":"\"core:i\/filter\""},{"name":"core:i\/flagged","icon":"fa-flag","standardicon":"\"core:i\/flagged\""},{"name":"core:i\/folder","icon":"fa-folder","standardicon":"\"core:i\/folder\""},{"name":"core:i\/grade_correct","icon":"fa-check text-success","standardicon":"\"core:i\/grade_correct\""},{"name":"core:i\/grade_incorrect","icon":"fa-remove text-danger","standardicon":"\"core:i\/grade_incorrect\""},{"name":"core:i\/grade_partiallycorrect","icon":"fa-check-square","standardicon":"\"core:i\/grade_partiallycorrect\""},{"name":"core:i\/grades","icon":"fa-table","standardicon":"\"core:i\/grades\""},{"name":"core:i\/grading","icon":"fa-magic","standardicon":"\"core:i\/grading\""},{"name":"core:i\/gradingnotifications","icon":"fa-bell-o","standardicon":"\"core:i\/gradingnotifications\""},{"name":"core:i\/groupevent","icon":"fa-group","standardicon":"\"core:i\/groupevent\""},{"name":"core:i\/group","icon":"fa-users","standardicon":"\"core:i\/group\""},{"name":"core:i\/home","icon":"fa-home","standardicon":"\"core:i\/home\""},{"name":"core:i\/hide","icon":"fa-eye","standardicon":"\"core:i\/hide\""},{"name":"core:i\/hierarchylock","icon":"fa-lock","standardicon":"\"core:i\/hierarchylock\""},{"name":"core:i\/import","icon":"fa-level-up","standardicon":"\"core:i\/import\""},{"name":"core:i\/incorrect","icon":"fa-exclamation","standardicon":"\"core:i\/incorrect\""},{"name":"core:i\/info","icon":"fa-info","standardicon":"\"core:i\/info\""},{"name":"core:i\/invalid","icon":"fa-times text-danger","standardicon":"\"core:i\/invalid\""},{"name":"core:i\/item","icon":"fa-circle","standardicon":"\"core:i\/item\""},{"name":"core:i\/loading","icon":"fa-circle-o-notch fa-spin","standardicon":"\"core:i\/loading\""},{"name":"core:i\/loading_small","icon":"fa-circle-o-notch fa-spin","standardicon":"\"core:i\/loading_small\""},{"name":"core:i\/location","icon":"fa-map-marker","standardicon":"\"core:i\/location\""},{"name":"core:i\/lock","icon":"fa-lock","standardicon":"\"core:i\/lock\""},{"name":"core:i\/log","icon":"fa-list-alt","standardicon":"\"core:i\/log\""},{"name":"core:i\/mahara_host","icon":"fa-id-badge","standardicon":"\"core:i\/mahara_host\""},{"name":"core:i\/manual_item","icon":"fa-pencil-square-o","standardicon":"\"core:i\/manual_item\""},{"name":"core:i\/marked","icon":"fa-circle","standardicon":"\"core:i\/marked\""},{"name":"core:i\/marker","icon":"fa-circle-o","standardicon":"\"core:i\/marker\""},{"name":"core:i\/mean","icon":"fa-calculator","standardicon":"\"core:i\/mean\""},{"name":"core:i\/menu","icon":"fa-ellipsis-v","standardicon":"\"core:i\/menu\""},{"name":"core:i\/menubars","icon":"fa-bars","standardicon":"\"core:i\/menubars\""},{"name":"core:i\/messagecontentaudio","icon":"fa-headphones","standardicon":"\"core:i\/messagecontentaudio\""},{"name":"core:i\/messagecontentimage","icon":"fa-image","standardicon":"\"core:i\/messagecontentimage\""},{"name":"core:i\/messagecontentvideo","icon":"fa-film","standardicon":"\"core:i\/messagecontentvideo\""},{"name":"core:i\/messagecontentmultimediageneral","icon":"fa-file-video-o","standardicon":"\"core:i\/messagecontentmultimediageneral\""},{"name":"core:i\/mnethost","icon":"fa-external-link","standardicon":"\"core:i\/mnethost\""},{"name":"core:i\/moodle_host","icon":"fa-graduation-cap","standardicon":"\"core:i\/moodle_host\""},{"name":"core:i\/moremenu","icon":"fa-ellipsis-h","standardicon":"\"core:i\/moremenu\""},{"name":"core:i\/move_2d","icon":"fa-arrows","standardicon":"\"core:i\/move_2d\""},{"name":"core:i\/muted","icon":"fa-microphone-slash","standardicon":"\"core:i\/muted\""},{"name":"core:i\/navigationitem","icon":"fa-fw","standardicon":"\"core:i\/navigationitem\""},{"name":"core:i\/ne_red_mark","icon":"fa-remove","standardicon":"\"core:i\/ne_red_mark\""},{"name":"core:i\/new","icon":"fa-bolt","standardicon":"\"core:i\/new\""},{"name":"core:i\/news","icon":"fa-newspaper-o","standardicon":"\"core:i\/news\""},{"name":"core:i\/next","icon":"fa-chevron-right","standardicon":"\"core:i\/next\""},{"name":"core:i\/nosubcat","icon":"fa-plus-square-o","standardicon":"\"core:i\/nosubcat\""},{"name":"core:i\/notifications","icon":"fa-bell-o","standardicon":"\"core:i\/notifications\""},{"name":"core:i\/open","icon":"fa-folder-open","standardicon":"\"core:i\/open\""},{"name":"core:i\/otherevent","icon":"fa-calendar","standardicon":"\"core:i\/otherevent\""},{"name":"core:i\/outcomes","icon":"fa-tasks","standardicon":"\"core:i\/outcomes\""},{"name":"core:i\/overriden_grade","icon":"fa-edit","standardicon":"\"core:i\/overriden_grade\""},{"name":"core:i\/payment","icon":"fa-money","standardicon":"\"core:i\/payment\""},{"name":"core:i\/permissionlock","icon":"fa-lock","standardicon":"\"core:i\/permissionlock\""},{"name":"core:i\/permissions","icon":"fa-pencil-square-o","standardicon":"\"core:i\/permissions\""},{"name":"core:i\/persona_sign_in_black","icon":"fa-male","standardicon":"\"core:i\/persona_sign_in_black\""},{"name":"core:i\/portfolio","icon":"fa-id-badge","standardicon":"\"core:i\/portfolio\""},{"name":"core:i\/preview","icon":"fa-search-plus","standardicon":"\"core:i\/preview\""},{"name":"core:i\/previous","icon":"fa-chevron-left","standardicon":"\"core:i\/previous\""},{"name":"core:i\/privatefiles","icon":"fa-file-o","standardicon":"\"core:i\/privatefiles\""},{"name":"core:i\/progressbar","icon":"fa-spinner fa-spin","standardicon":"\"core:i\/progressbar\""},{"name":"core:i\/publish","icon":"fa-share","standardicon":"\"core:i\/publish\""},{"name":"core:i\/questions","icon":"fa-question","standardicon":"\"core:i\/questions\""},{"name":"core:i\/reload","icon":"fa-refresh","standardicon":"\"core:i\/reload\""},{"name":"core:i\/report","icon":"fa-area-chart","standardicon":"\"core:i\/report\""},{"name":"core:i\/repository","icon":"fa-hdd-o","standardicon":"\"core:i\/repository\""},{"name":"core:i\/restore","icon":"fa-level-up","standardicon":"\"core:i\/restore\""},{"name":"core:i\/return","icon":"fa-arrow-left","standardicon":"\"core:i\/return\""},{"name":"core:i\/risk_config","icon":"fa-exclamation text-muted","standardicon":"\"core:i\/risk_config\""},{"name":"core:i\/risk_managetrust","icon":"fa-exclamation-triangle text-warning","standardicon":"\"core:i\/risk_managetrust\""},{"name":"core:i\/risk_personal","icon":"fa-exclamation-circle text-info","standardicon":"\"core:i\/risk_personal\""},{"name":"core:i\/risk_spam","icon":"fa-exclamation text-primary","standardicon":"\"core:i\/risk_spam\""},{"name":"core:i\/risk_xss","icon":"fa-exclamation-triangle text-danger","standardicon":"\"core:i\/risk_xss\""},{"name":"core:i\/role","icon":"fa-user-md","standardicon":"\"core:i\/role\""},{"name":"core:i\/rss","icon":"fa-rss","standardicon":"\"core:i\/rss\""},{"name":"core:i\/rsssitelogo","icon":"fa-graduation-cap","standardicon":"\"core:i\/rsssitelogo\""},{"name":"core:i\/scales","icon":"fa-balance-scale","standardicon":"\"core:i\/scales\""},{"name":"core:i\/scheduled","icon":"fa-calendar-check-o","standardicon":"\"core:i\/scheduled\""},{"name":"core:i\/search","icon":"fa-search","standardicon":"\"core:i\/search\""},{"name":"core:i\/section","icon":"fa-folder-o","standardicon":"\"core:i\/section\""},{"name":"core:i\/sendmessage","icon":"fa-paper-plane","standardicon":"\"core:i\/sendmessage\""},{"name":"core:i\/settings","icon":"fa-cog","standardicon":"\"core:i\/settings\""},{"name":"core:i\/share","icon":"fa-share-square-o","standardicon":"\"core:i\/share\""},{"name":"core:i\/show","icon":"fa-eye-slash","standardicon":"\"core:i\/show\""},{"name":"core:i\/siteevent","icon":"fa-globe","standardicon":"\"core:i\/siteevent\""},{"name":"core:i\/star","icon":"fa-star","standardicon":"\"core:i\/star\""},{"name":"core:i\/star-o","icon":"fa-star-o","standardicon":"\"core:i\/star-o\""},{"name":"core:i\/star-rating","icon":"fa-star","standardicon":"\"core:i\/star-rating\""},{"name":"core:i\/stats","icon":"fa-line-chart","standardicon":"\"core:i\/stats\""},{"name":"core:i\/switch","icon":"fa-exchange","standardicon":"\"core:i\/switch\""},{"name":"core:i\/switchrole","icon":"fa-user-secret","standardicon":"\"core:i\/switchrole\""},{"name":"core:i\/trash","icon":"fa-trash","standardicon":"\"core:i\/trash\""},{"name":"core:i\/twoway","icon":"fa-arrows-h","standardicon":"\"core:i\/twoway\""},{"name":"core:i\/unchecked","icon":"fa-square-o","standardicon":"\"core:i\/unchecked\""},{"name":"core:i\/uncheckedcircle","icon":"fa-circle-o","standardicon":"\"core:i\/uncheckedcircle\""},{"name":"core:i\/unflagged","icon":"fa-flag-o","standardicon":"\"core:i\/unflagged\""},{"name":"core:i\/unlock","icon":"fa-unlock","standardicon":"\"core:i\/unlock\""},{"name":"core:i\/up","icon":"fa-arrow-up","standardicon":"\"core:i\/up\""},{"name":"core:i\/upload","icon":"fa-upload","standardicon":"\"core:i\/upload\""},{"name":"core:i\/userevent","icon":"fa-user","standardicon":"\"core:i\/userevent\""},{"name":"core:i\/user","icon":"fa-user","standardicon":"\"core:i\/user\""},{"name":"core:i\/users","icon":"fa-users","standardicon":"\"core:i\/users\""},{"name":"core:i\/valid","icon":"fa-check text-success","standardicon":"\"core:i\/valid\""},{"name":"core:i\/viewsection","icon":"fa-pager","standardicon":"\"core:i\/viewsection\""},{"name":"core:i\/warning","icon":"fa-exclamation text-warning","standardicon":"\"core:i\/warning\""},{"name":"core:i\/window_close","icon":"fa-window-close","standardicon":"\"core:i\/window_close\""},{"name":"core:i\/withsubcat","icon":"fa-plus-square","standardicon":"\"core:i\/withsubcat\""},{"name":"core:i\/language","icon":"fa-language","standardicon":"\"core:i\/language\""},{"name":"core:m\/USD","icon":"fa-usd","standardicon":"\"core:m\/USD\""},{"name":"core:t\/addcontact","icon":"fa-address-card","standardicon":"\"core:t\/addcontact\""},{"name":"core:t\/add","icon":"fa-plus","standardicon":"\"core:t\/add\""},{"name":"core:t\/angles-down","icon":"fa-angles-down","standardicon":"\"core:t\/angles-down\""},{"name":"core:t\/angles-left","icon":"fa-angles-left","standardicon":"\"core:t\/angles-left\""},{"name":"core:t\/angles-right","icon":"fa-angles-right","standardicon":"\"core:t\/angles-right\""},{"name":"core:t\/angles-up","icon":"fa-angles-up","standardicon":"\"core:t\/angles-up\""},{"name":"core:t\/approve","icon":"fa-thumbs-up","standardicon":"\"core:t\/approve\""},{"name":"core:t\/assignroles","icon":"fa-user-circle","standardicon":"\"core:t\/assignroles\""},{"name":"core:t\/award","icon":"fa-trophy","standardicon":"\"core:t\/award\""},{"name":"core:t\/backpack","icon":"fa-shopping-bag","standardicon":"\"core:t\/backpack\""},{"name":"core:t\/backup","icon":"fa-arrow-circle-down","standardicon":"\"core:t\/backup\""},{"name":"core:t\/block","icon":"fa-ban","standardicon":"\"core:t\/block\""},{"name":"core:t\/block_to_dock_rtl","icon":"fa-chevron-right","standardicon":"\"core:t\/block_to_dock_rtl\""},{"name":"core:t\/block_to_dock","icon":"fa-chevron-left","standardicon":"\"core:t\/block_to_dock\""},{"name":"core:t\/blocks_drawer","icon":"fa-chevron-left","standardicon":"\"core:t\/blocks_drawer\""},{"name":"core:t\/blocks_drawer_rtl","icon":"fa-chevron-right","standardicon":"\"core:t\/blocks_drawer_rtl\""},{"name":"core:t\/calc_off","icon":"fa-calculator","standardicon":"\"core:t\/calc_off\""},{"name":"core:t\/calc","icon":"fa-calculator","standardicon":"\"core:t\/calc\""},{"name":"core:t\/check","icon":"fa-check","standardicon":"\"core:t\/check\""},{"name":"core:t\/clipboard","icon":"fa-clipboard","standardicon":"\"core:t\/clipboard\""},{"name":"core:t\/cohort","icon":"fa-users","standardicon":"\"core:t\/cohort\""},{"name":"core:t\/collapsed_empty_rtl","icon":"fa-caret-square-o-left","standardicon":"\"core:t\/collapsed_empty_rtl\""},{"name":"core:t\/collapsed_empty","icon":"fa-caret-square-o-right","standardicon":"\"core:t\/collapsed_empty\""},{"name":"core:t\/collapsed_rtl","icon":"fa-caret-left","standardicon":"\"core:t\/collapsed_rtl\""},{"name":"core:t\/collapsed","icon":"fa-caret-right","standardicon":"\"core:t\/collapsed\""},{"name":"core:t\/collapsedcaret","icon":"fa-caret-right","standardicon":"\"core:t\/collapsedcaret\""},{"name":"core:t\/collapsedchevron","icon":"fa-chevron-right","standardicon":"\"core:t\/collapsedchevron\""},{"name":"core:t\/collapsedchevron_rtl","icon":"fa-chevron-left","standardicon":"\"core:t\/collapsedchevron_rtl\""},{"name":"core:t\/collapsedchevron_up","icon":"fa-chevron-up","standardicon":"\"core:t\/collapsedchevron_up\""},{"name":"core:t\/completion_complete","icon":"fa-circle","standardicon":"\"core:t\/completion_complete\""},{"name":"core:t\/completion_fail","icon":"fa-times","standardicon":"\"core:t\/completion_fail\""},{"name":"core:t\/completion_incomplete","icon":"fa-circle-thin","standardicon":"\"core:t\/completion_incomplete\""},{"name":"core:t\/contextmenu","icon":"fa-cog","standardicon":"\"core:t\/contextmenu\""},{"name":"core:t\/copy","icon":"fa-copy","standardicon":"\"core:t\/copy\""},{"name":"core:t\/delete","icon":"fa-trash","standardicon":"\"core:t\/delete\""},{"name":"core:t\/dockclose","icon":"fa-window-close","standardicon":"\"core:t\/dockclose\""},{"name":"core:t\/dock_to_block_rtl","icon":"fa-chevron-right","standardicon":"\"core:t\/dock_to_block_rtl\""},{"name":"core:t\/dock_to_block","icon":"fa-chevron-left","standardicon":"\"core:t\/dock_to_block\""},{"name":"core:t\/download","icon":"fa-download","standardicon":"\"core:t\/download\""},{"name":"core:t\/down","icon":"fa-arrow-down","standardicon":"\"core:t\/down\""},{"name":"core:t\/downlong","icon":"fa-long-arrow-down","standardicon":"\"core:t\/downlong\""},{"name":"core:t\/dropdown","icon":"fa-cog","standardicon":"\"core:t\/dropdown\""},{"name":"core:t\/editinline","icon":"fa-pencil","standardicon":"\"core:t\/editinline\""},{"name":"core:t\/edit_menu","icon":"fa-cog","standardicon":"\"core:t\/edit_menu\""},{"name":"core:t\/editstring","icon":"fa-pencil","standardicon":"\"core:t\/editstring\""},{"name":"core:t\/edit","icon":"fa-cog","standardicon":"\"core:t\/edit\""},{"name":"core:t\/emailno","icon":"fa-ban","standardicon":"\"core:t\/emailno\""},{"name":"core:t\/email","icon":"fa-envelope-o","standardicon":"\"core:t\/email\""},{"name":"core:t\/emptystar","icon":"fa-star-o","standardicon":"\"core:t\/emptystar\""},{"name":"core:t\/enrolusers","icon":"fa-user-plus","standardicon":"\"core:t\/enrolusers\""},{"name":"core:t\/expanded","icon":"fa-caret-down","standardicon":"\"core:t\/expanded\""},{"name":"core:t\/expandedchevron","icon":"fa-chevron-down","standardicon":"\"core:t\/expandedchevron\""},{"name":"core:t\/go","icon":"fa-play","standardicon":"\"core:t\/go\""},{"name":"core:t\/grades","icon":"fa-table","standardicon":"\"core:t\/grades\""},{"name":"core:t\/groupn","icon":"fa-user","standardicon":"\"core:t\/groupn\""},{"name":"core:t\/groups","icon":"fa-user-circle","standardicon":"\"core:t\/groups\""},{"name":"core:t\/groupv","icon":"fa-user-circle-o","standardicon":"\"core:t\/groupv\""},{"name":"core:t\/hide","icon":"fa-eye","standardicon":"\"core:t\/hide\""},{"name":"core:t\/index_drawer","icon":"fa-list","standardicon":"\"core:t\/index_drawer\""},{"name":"core:t\/left","icon":"fa-arrow-left","standardicon":"\"core:t\/left\""},{"name":"core:t\/less","icon":"fa-caret-up","standardicon":"\"core:t\/less\""},{"name":"core:t\/life-ring","icon":"fa-life-ring","standardicon":"\"core:t\/life-ring\""},{"name":"core:t\/locked","icon":"fa-lock","standardicon":"\"core:t\/locked\""},{"name":"core:t\/lock","icon":"fa-unlock","standardicon":"\"core:t\/lock\""},{"name":"core:t\/locktime","icon":"fa-lock","standardicon":"\"core:t\/locktime\""},{"name":"core:t\/markasread","icon":"fa-check","standardicon":"\"core:t\/markasread\""},{"name":"core:t\/messages","icon":"fa-comments","standardicon":"\"core:t\/messages\""},{"name":"core:t\/messages-o","icon":"fa-comments-o","standardicon":"\"core:t\/messages-o\""},{"name":"core:t\/message","icon":"fa-comment-o","standardicon":"\"core:t\/message\""},{"name":"core:t\/more","icon":"fa-caret-down","standardicon":"\"core:t\/more\""},{"name":"core:t\/move","icon":"fa-arrows-v","standardicon":"\"core:t\/move\""},{"name":"core:t\/online","icon":"fa-circle","standardicon":"\"core:t\/online\""},{"name":"core:t\/passwordunmask-edit","icon":"fa-pencil","standardicon":"\"core:t\/passwordunmask-edit\""},{"name":"core:t\/passwordunmask-reveal","icon":"fa-eye","standardicon":"\"core:t\/passwordunmask-reveal\""},{"name":"core:t\/play","icon":"fa-play","standardicon":"\"core:t\/play\""},{"name":"core:t\/portfolioadd","icon":"fa-plus","standardicon":"\"core:t\/portfolioadd\""},{"name":"core:t\/preferences","icon":"fa-wrench","standardicon":"\"core:t\/preferences\""},{"name":"core:t\/preview","icon":"fa-search-plus","standardicon":"\"core:t\/preview\""},{"name":"core:t\/print","icon":"fa-print","standardicon":"\"core:t\/print\""},{"name":"core:t\/removecontact","icon":"fa-user-times","standardicon":"\"core:t\/removecontact\""},{"name":"core:t\/reload","icon":"fa-refresh","standardicon":"\"core:t\/reload\""},{"name":"core:t\/reset","icon":"fa-repeat","standardicon":"\"core:t\/reset\""},{"name":"core:t\/restore","icon":"fa-arrow-circle-up","standardicon":"\"core:t\/restore\""},{"name":"core:t\/right","icon":"fa-arrow-right","standardicon":"\"core:t\/right\""},{"name":"core:t\/sendmessage","icon":"fa-paper-plane","standardicon":"\"core:t\/sendmessage\""},{"name":"core:t\/show","icon":"fa-eye-slash","standardicon":"\"core:t\/show\""},{"name":"core:t\/sort_by","icon":"fa-sort-amount-asc","standardicon":"\"core:t\/sort_by\""},{"name":"core:t\/sort_asc","icon":"fa-sort-asc","standardicon":"\"core:t\/sort_asc\""},{"name":"core:t\/sort_desc","icon":"fa-sort-desc","standardicon":"\"core:t\/sort_desc\""},{"name":"core:t\/sort","icon":"fa-sort","standardicon":"\"core:t\/sort\""},{"name":"core:t\/stealth","icon":"fa-low-vision","standardicon":"\"core:t\/stealth\""},{"name":"core:t\/stop","icon":"fa-stop","standardicon":"\"core:t\/stop\""},{"name":"core:t\/switch_minus","icon":"fa-minus","standardicon":"\"core:t\/switch_minus\""},{"name":"core:t\/switch_plus","icon":"fa-plus","standardicon":"\"core:t\/switch_plus\""},{"name":"core:t\/switch_whole","icon":"fa-square-o","standardicon":"\"core:t\/switch_whole\""},{"name":"core:t\/tags","icon":"fa-tags","standardicon":"\"core:t\/tags\""},{"name":"core:t\/unblock","icon":"fa-commenting","standardicon":"\"core:t\/unblock\""},{"name":"core:t\/unlocked","icon":"fa-unlock-alt","standardicon":"\"core:t\/unlocked\""},{"name":"core:t\/unlock","icon":"fa-lock","standardicon":"\"core:t\/unlock\""},{"name":"core:t\/up","icon":"fa-arrow-up","standardicon":"\"core:t\/up\""},{"name":"core:t\/uplong","icon":"fa-long-arrow-up","standardicon":"\"core:t\/uplong\""},{"name":"core:t\/user","icon":"fa-user","standardicon":"\"core:t\/user\""},{"name":"core:t\/viewdetails","icon":"fa-list","standardicon":"\"core:t\/viewdetails\""},{"name":"qtype_ddmarker:crosshairs","icon":"fa-crosshairs","standardicon":"\"qtype_ddmarker:crosshairs\""},{"name":"qtype_ddmarker:grid","icon":"fa-th","standardicon":"\"qtype_ddmarker:grid\""},{"name":"mod_book:chapter","icon":"fa-bookmark-o","standardicon":"\"mod_book:chapter\""},{"name":"mod_book:nav_prev","icon":"fa-arrow-left","standardicon":"\"mod_book:nav_prev\""},{"name":"mod_book:nav_sep","icon":"fa-minus","standardicon":"\"mod_book:nav_sep\""},{"name":"mod_book:add","icon":"fa-plus","standardicon":"\"mod_book:add\""},{"name":"mod_book:nav_next","icon":"fa-arrow-right","standardicon":"\"mod_book:nav_next\""},{"name":"mod_book:nav_exit","icon":"fa-arrow-up","standardicon":"\"mod_book:nav_exit\""},{"name":"mod_choice:row","icon":"fa-info","standardicon":"\"mod_choice:row\""},{"name":"mod_choice:column","icon":"fa-columns","standardicon":"\"mod_choice:column\""},{"name":"mod_data:field\/checkbox","icon":"fa-check-square-o","standardicon":"\"mod_data:field\/checkbox\""},{"name":"mod_data:field\/date","icon":"fa-calendar-o","standardicon":"\"mod_data:field\/date\""},{"name":"mod_data:field\/file","icon":"fa-file","standardicon":"\"mod_data:field\/file\""},{"name":"mod_data:field\/latlong","icon":"fa-globe","standardicon":"\"mod_data:field\/latlong\""},{"name":"mod_data:field\/menu","icon":"fa-bars","standardicon":"\"mod_data:field\/menu\""},{"name":"mod_data:field\/multimenu","icon":"fa-bars","standardicon":"\"mod_data:field\/multimenu\""},{"name":"mod_data:field\/number","icon":"fa-hashtag","standardicon":"\"mod_data:field\/number\""},{"name":"mod_data:field\/picture","icon":"fa-picture-o","standardicon":"\"mod_data:field\/picture\""},{"name":"mod_data:field\/radiobutton","icon":"fa-circle-o","standardicon":"\"mod_data:field\/radiobutton\""},{"name":"mod_data:field\/textarea","icon":"fa-font","standardicon":"\"mod_data:field\/textarea\""},{"name":"mod_data:field\/text","icon":"fa-i-cursor","standardicon":"\"mod_data:field\/text\""},{"name":"mod_data:field\/url","icon":"fa-link","standardicon":"\"mod_data:field\/url\""},{"name":"mod_feedback:required","icon":"fa-exclamation-circle","standardicon":"\"mod_feedback:required\""},{"name":"mod_feedback:notrequired","icon":"fa-question-circle-o","standardicon":"\"mod_feedback:notrequired\""},{"name":"mod_forum:i\/pinned","icon":"fa-map-pin","standardicon":"\"mod_forum:i\/pinned\""},{"name":"mod_forum:t\/selected","icon":"fa-check","standardicon":"\"mod_forum:t\/selected\""},{"name":"mod_forum:t\/subscribed","icon":"fa-envelope-o","standardicon":"\"mod_forum:t\/subscribed\""},{"name":"mod_forum:t\/unsubscribed","icon":"fa-envelope-open-o","standardicon":"\"mod_forum:t\/unsubscribed\""},{"name":"mod_forum:t\/star","icon":"fa-star","standardicon":"\"mod_forum:t\/star\""},{"name":"mod_glossary:export","icon":"fa-download","standardicon":"\"mod_glossary:export\""},{"name":"mod_glossary:minus","icon":"fa-minus","standardicon":"\"mod_glossary:minus\""},{"name":"mod_lesson:e\/copy","icon":"fa-clone","standardicon":"\"mod_lesson:e\/copy\""},{"name":"mod_lti:warning","icon":"fa-exclamation text-warning","standardicon":"\"mod_lti:warning\""},{"name":"mod_quiz:navflagged","icon":"fa-flag","standardicon":"\"mod_quiz:navflagged\""},{"name":"mod_scorm:assetc","icon":"fa-file-archive-o","standardicon":"\"mod_scorm:assetc\""},{"name":"mod_scorm:asset","icon":"fa-file-archive-o","standardicon":"\"mod_scorm:asset\""},{"name":"mod_scorm:browsed","icon":"fa-book","standardicon":"\"mod_scorm:browsed\""},{"name":"mod_scorm:completed","icon":"fa-check-square-o","standardicon":"\"mod_scorm:completed\""},{"name":"mod_scorm:failed","icon":"fa-times","standardicon":"\"mod_scorm:failed\""},{"name":"mod_scorm:incomplete","icon":"fa-pencil-square-o","standardicon":"\"mod_scorm:incomplete\""},{"name":"mod_scorm:minus","icon":"fa-minus","standardicon":"\"mod_scorm:minus\""},{"name":"mod_scorm:notattempted","icon":"fa-square-o","standardicon":"\"mod_scorm:notattempted\""},{"name":"mod_scorm:passed","icon":"fa-check","standardicon":"\"mod_scorm:passed\""},{"name":"mod_scorm:plus","icon":"fa-plus","standardicon":"\"mod_scorm:plus\""},{"name":"mod_scorm:popdown","icon":"fa-window-close-o","standardicon":"\"mod_scorm:popdown\""},{"name":"mod_scorm:popup","icon":"fa-window-restore","standardicon":"\"mod_scorm:popup\""},{"name":"mod_scorm:suspend","icon":"fa-pause","standardicon":"\"mod_scorm:suspend\""},{"name":"mod_scorm:wait","icon":"fa-clock-o","standardicon":"\"mod_scorm:wait\""},{"name":"mod_wiki:attachment","icon":"fa-paperclip","standardicon":"\"mod_wiki:attachment\""},{"name":"mod_workshop:userplan\/task-info","icon":"fa-info text-info","standardicon":"\"mod_workshop:userplan\/task-info\""},{"name":"mod_workshop:userplan\/task-todo","icon":"fa-square-o","standardicon":"\"mod_workshop:userplan\/task-todo\""},{"name":"mod_workshop:userplan\/task-done","icon":"fa-check text-success","standardicon":"\"mod_workshop:userplan\/task-done\""},{"name":"mod_workshop:userplan\/task-fail","icon":"fa-remove text-danger","standardicon":"\"mod_workshop:userplan\/task-fail\""},{"name":"customfield_date:checked","icon":"fa-check-square-o","standardicon":"\"customfield_date:checked\""},{"name":"customfield_date:notchecked","icon":"fa-square-o","standardicon":"\"customfield_date:notchecked\""},{"name":"enrol_guest:withpassword","icon":"fa-key","standardicon":"\"enrol_guest:withpassword\""},{"name":"enrol_guest:withoutpassword","icon":"fa-unlock-alt","standardicon":"\"enrol_guest:withoutpassword\""},{"name":"enrol_lti:managedeployments","icon":"fa-sitemap","standardicon":"\"enrol_lti:managedeployments\""},{"name":"enrol_lti:platformdetails","icon":"fa-pencil-square-o","standardicon":"\"enrol_lti:platformdetails\""},{"name":"enrol_lti:enrolinstancewarning","icon":"fa-exclamation-circle text-danger","standardicon":"\"enrol_lti:enrolinstancewarning\""},{"name":"enrol_self:withkey","icon":"fa-key","standardicon":"\"enrol_self:withkey\""},{"name":"enrol_self:withoutkey","icon":"fa-sign-in","standardicon":"\"enrol_self:withoutkey\""},{"name":"block_accessreview:smile","icon":"fa-smile-o","standardicon":"\"block_accessreview:smile\""},{"name":"block_accessreview:frown","icon":"fa-frown-o","standardicon":"\"block_accessreview:frown\""},{"name":"block_accessreview:errorsfound","icon":"fa-ban","standardicon":"\"block_accessreview:errorsfound\""},{"name":"block_accessreview:f\/pdf","icon":"fa-file-pdf-o","standardicon":"\"block_accessreview:f\/pdf\""},{"name":"block_accessreview:f\/video","icon":"fa-file-video-o","standardicon":"\"block_accessreview:f\/video\""},{"name":"block_accessreview:f\/find","icon":"fa-bar-chart","standardicon":"\"block_accessreview:f\/find\""},{"name":"block_accessreview:f\/form","icon":"fa-pencil-square-o","standardicon":"\"block_accessreview:f\/form\""},{"name":"block_accessreview:f\/image","icon":"fa-image","standardicon":"\"block_accessreview:f\/image\""},{"name":"block_accessreview:f\/layout","icon":"fa-th-large","standardicon":"\"block_accessreview:f\/layout\""},{"name":"block_accessreview:f\/link","icon":"fa-link","standardicon":"\"block_accessreview:f\/link\""},{"name":"block_accessreview:f\/media","icon":"fa-play-circle-o","standardicon":"\"block_accessreview:f\/media\""},{"name":"block_accessreview:f\/table","icon":"fa-table","standardicon":"\"block_accessreview:f\/table\""},{"name":"block_accessreview:f\/text","icon":"fa-font","standardicon":"\"block_accessreview:f\/text\""},{"name":"block_accessreview:t\/fail","icon":"fa-ban","standardicon":"\"block_accessreview:t\/fail\""},{"name":"block_accessreview:t\/pass","icon":"fa-check","standardicon":"\"block_accessreview:t\/pass\""},{"name":"gradingform_guide:info","icon":"fa-info-circle","standardicon":"\"gradingform_guide:info\""},{"name":"gradingform_guide:plus","icon":"fa-plus","standardicon":"\"gradingform_guide:plus\""},{"name":"tool_brickfield:f\/award","icon":"fa-tachometer","standardicon":"\"tool_brickfield:f\/award\""},{"name":"tool_brickfield:f\/done","icon":"fa-check-circle-o","standardicon":"\"tool_brickfield:f\/done\""},{"name":"tool_brickfield:f\/done2","icon":"fa-check-square-o","standardicon":"\"tool_brickfield:f\/done2\""},{"name":"tool_brickfield:f\/error","icon":"fa-times-circle-o","standardicon":"\"tool_brickfield:f\/error\""},{"name":"tool_brickfield:f\/find","icon":"fa-bar-chart","standardicon":"\"tool_brickfield:f\/find\""},{"name":"tool_brickfield:f\/total","icon":"fa-calculator","standardicon":"\"tool_brickfield:f\/total\""},{"name":"tool_brickfield:f\/form","icon":"fa-pencil-square-o","standardicon":"\"tool_brickfield:f\/form\""},{"name":"tool_brickfield:f\/image","icon":"fa-image","standardicon":"\"tool_brickfield:f\/image\""},{"name":"tool_brickfield:f\/layout","icon":"fa-th-large","standardicon":"\"tool_brickfield:f\/layout\""},{"name":"tool_brickfield:f\/link","icon":"fa-link","standardicon":"\"tool_brickfield:f\/link\""},{"name":"tool_brickfield:f\/media","icon":"fa-play-circle-o","standardicon":"\"tool_brickfield:f\/media\""},{"name":"tool_brickfield:f\/table","icon":"fa-table","standardicon":"\"tool_brickfield:f\/table\""},{"name":"tool_brickfield:f\/text","icon":"fa-font","standardicon":"\"tool_brickfield:f\/text\""},{"name":"tool_lp:url","icon":"fa-external-link","standardicon":"\"tool_lp:url\""},{"name":"tool_policy:agreed","icon":"fa-check text-success","standardicon":"\"tool_policy:agreed\""},{"name":"tool_policy:declined","icon":"fa-times text-danger","standardicon":"\"tool_policy:declined\""},{"name":"tool_policy:pending","icon":"fa-clock-o text-warning","standardicon":"\"tool_policy:pending\""},{"name":"tool_policy:partial","icon":"fa-exclamation-triangle text-warning","standardicon":"\"tool_policy:partial\""},{"name":"tool_policy:level","icon":"fa-level-up fa-rotate-90 text-muted","standardicon":"\"tool_policy:level\""},{"name":"tool_recyclebin:trash","icon":"fa-trash","standardicon":"\"tool_recyclebin:trash\""},{"name":"tool_usertours:t\/export","icon":"fa-download","standardicon":"\"tool_usertours:t\/export\""},{"name":"tool_usertours:i\/reload","icon":"fa-refresh","standardicon":"\"tool_usertours:i\/reload\""},{"name":"tool_usertours:t\/filler","icon":"fa-spacer","standardicon":"\"tool_usertours:t\/filler\""},{"name":"atto_collapse:icon","icon":"fa-level-down","standardicon":"\"atto_collapse:icon\""},{"name":"atto_recordrtc:i\/audiortc","icon":"fa-microphone","standardicon":"\"atto_recordrtc:i\/audiortc\""},{"name":"atto_recordrtc:i\/videortc","icon":"fa-video-camera","standardicon":"\"atto_recordrtc:i\/videortc\""}] \ No newline at end of file diff --git a/blocks/section_links/renderer.php b/blocks/section_links/renderer.php index a1ebe8756bb..ac47accb753 100644 --- a/blocks/section_links/renderer.php +++ b/blocks/section_links/renderer.php @@ -57,7 +57,11 @@ class block_section_links_renderer extends plugin_renderer_base { if ($section->highlight) { $sectiontext = html_writer::tag('strong', $sectiontext); } - $html .= html_writer::link(course_get_url($course, $section->section), $sectiontext, $attributes); + $html .= html_writer::link( + course_get_url($course, $section->section, ['navigation' => true]), + $sectiontext, + $attributes + ); $html .= html_writer::end_tag('li').' '; } $html .= html_writer::end_tag('ol'); @@ -78,4 +82,4 @@ class block_section_links_renderer extends plugin_renderer_base { return $html; } -} \ No newline at end of file +} diff --git a/course/format/classes/base.php b/course/format/classes/base.php index f95acd80905..3faf702a909 100644 --- a/course/format/classes/base.php +++ b/course/format/classes/base.php @@ -711,15 +711,14 @@ abstract class base { * @param int|stdClass $section Section object from database or just field course_sections.section * if null the course view page is returned * @param array $options options for view URL. At the moment core uses: - * 'navigation' (bool) if true and section has no separate page, the function returns null - * 'sr' (int) used by multipage formats to specify to which section to return + * 'navigation' (bool) if true and section not empty, the function returns section page; otherwise, it returns course page. + * 'sr' (int) used by course formats to specify to which section to return * 'expanded' (bool) if true the section will be shown expanded, true by default * @return null|moodle_url */ public function get_view_url($section, $options = array()) { - global $CFG; $course = $this->get_course(); - $url = new moodle_url('/course/view.php', array('id' => $course->id)); + $url = new moodle_url('/course/view.php', ['id' => $course->id]); if (array_key_exists('sr', $options)) { $sectionno = $options['sr']; @@ -728,9 +727,10 @@ abstract class base { } else { $sectionno = $section; } - if (empty($CFG->linkcoursesections) && !empty($options['navigation']) && $sectionno !== null) { - // By default assume that sections are never displayed on separate pages. - return null; + if ((!empty($options['navigation']) || array_key_exists('sr', $options)) && $sectionno !== null) { + // Display section on separate page. + $sectioninfo = $this->get_section($sectionno); + return new moodle_url('/course/section.php', ['id' => $sectioninfo->id]); } if ($this->uses_sections() && $sectionno !== null) { // The url includes the parameter to expand the section by default. @@ -743,6 +743,7 @@ abstract class base { } $url->set_anchor('section-'.$sectionno); } + return $url; } @@ -1915,4 +1916,13 @@ abstract class base { return get_fast_modinfo($course)->get_section_info_by_id($newsection->id); } + + /** + * Get the required javascript files for the course format. + * + * @return array The list of javascript files required by the course format. + */ + public function get_required_jsfiles(): array { + return []; + } } diff --git a/course/format/classes/output/local/content.php b/course/format/classes/output/local/content.php index e7d1ec4bf6f..225f9037ff8 100644 --- a/course/format/classes/output/local/content.php +++ b/course/format/classes/output/local/content.php @@ -86,12 +86,8 @@ class content implements named_templatable, renderable { global $PAGE; $format = $this->format; - // Most formats uses section 0 as a separate section so we remove from the list. $sections = $this->export_sections($output); $initialsection = ''; - if (!empty($sections)) { - $initialsection = array_shift($sections); - } $data = (object)[ 'title' => $format->page_title(), // This method should be in the course_format class. @@ -188,7 +184,6 @@ class content implements named_templatable, renderable { $singlesection = $this->format->get_section_number(); if ($singlesection) { return [ - $modinfo->get_section_info(0), $modinfo->get_section_info($singlesection), ]; } diff --git a/course/format/classes/output/local/content/section.php b/course/format/classes/output/local/content/section.php index 29402de5394..63b39372df5 100644 --- a/course/format/classes/output/local/content/section.php +++ b/course/format/classes/output/local/content/section.php @@ -147,7 +147,8 @@ class section implements named_templatable, renderable { 'summary' => $summary->export_for_template($output), 'highlightedlabel' => $format->get_section_highlighted_name(), 'sitehome' => $course->id == SITEID, - 'editing' => $PAGE->user_is_editing() + 'editing' => $PAGE->user_is_editing(), + 'displayonesection' => ($course->id != SITEID && $format->get_section_number() !== 0), ]; $haspartials = []; diff --git a/course/format/classes/output/local/content/section/controlmenu.php b/course/format/classes/output/local/content/section/controlmenu.php index 8f5cdb509b6..7c22c048a08 100644 --- a/course/format/classes/output/local/content/section/controlmenu.php +++ b/course/format/classes/output/local/content/section/controlmenu.php @@ -135,7 +135,13 @@ class controlmenu implements named_templatable, renderable { $baseurl = course_get_url($course, $sectionreturn); $baseurl->param('sesskey', sesskey()); - $controls = []; + $controls['view'] = [ + 'url' => new moodle_url('/course/section.php', ['id' => $section->id]), + 'icon' => 'i/viewsection', + 'name' => get_string('view'), + 'pixattr' => ['class' => ''], + 'attr' => ['class' => 'icon view'], + ]; if (!$isstealth && has_capability('moodle/course:update', $coursecontext, $user)) { if ($section->section > 0 @@ -291,9 +297,8 @@ class controlmenu implements named_templatable, renderable { ], $coursecontext) ) { $sectionlink = new moodle_url( - '/course/view.php', - ['id' => $course->id], - "sectionid-{$section->id}-title" + '/course/section.php', + ['id' => $section->id] ); $controls['permalink'] = [ 'url' => $sectionlink, diff --git a/course/format/classes/output/local/content/section/header.php b/course/format/classes/output/local/content/section/header.php index 5bccdbf82ce..0e2cb03eda9 100644 --- a/course/format/classes/output/local/content/section/header.php +++ b/course/format/classes/output/local/content/section/header.php @@ -76,14 +76,28 @@ class header implements named_templatable, renderable { 'id' => $section->id, ]; - $data->title = $output->section_title_without_link($section, $course); + $data->editing = $format->show_editor(); + + if ($course->id == SITEID) { + $data->title = $output->section_title_without_link($section, $course); + $data->sitehome = true; + } else { + if ($format->get_section_number() === 0) { + // All sections are displayed. + if (!$data->editing) { + $data->title = $output->section_title($section, $course); + } else { + $data->title = $output->section_title_without_link($section, $course); + } + } else { + // Only one section is displayed. + $data->displayonesection = true; + $data->title = $output->section_title_without_link($section, $course); + } + } $coursedisplay = $format->get_course_display(); - $data->headerdisplaymultipage = false; - if ($coursedisplay == COURSE_DISPLAY_MULTIPAGE) { - $data->headerdisplaymultipage = true; - $data->title = $output->section_title($section, $course); - } + $data->headerdisplaymultipage = ($coursedisplay == COURSE_DISPLAY_MULTIPAGE); if ($section->section > $format->get_last_section_number()) { // Stealth sections (orphaned) has special title. @@ -94,16 +108,8 @@ class header implements named_templatable, renderable { $data->ishidden = true; } - if ($course->id == SITEID) { - $data->sitehome = true; - } - - $data->editing = $format->show_editor(); - - if (!$format->show_editor() && $coursedisplay == COURSE_DISPLAY_MULTIPAGE && empty($data->issinglesection)) { - if ($section->uservisible) { - $data->url = course_get_url($course, $section->section); - } + if (!$data->editing && $section->uservisible) { + $data->url = course_get_url($course, $section->section, ['navigation' => true]); } $data->name = get_section_name($course, $section); $data->selecttext = $format->get_format_string('selectsection', $data->name); diff --git a/course/format/classes/output/local/content/sectionnavigation.php b/course/format/classes/output/local/content/sectionnavigation.php index ac3770f4dd5..ddf8295cf6f 100644 --- a/course/format/classes/output/local/content/sectionnavigation.php +++ b/course/format/classes/output/local/content/sectionnavigation.php @@ -100,7 +100,7 @@ class sectionnavigation implements named_templatable, renderable { $data->previoushidden = true; } $data->previousname = get_section_name($course, $sections[$back]); - $data->previousurl = course_get_url($course, $back); + $data->previousurl = course_get_url($course, $back, ['navigation' => true]); $data->hasprevious = true; } $back--; @@ -114,7 +114,7 @@ class sectionnavigation implements named_templatable, renderable { $data->nexthidden = true; } $data->nextname = get_section_name($course, $sections[$forward]); - $data->nexturl = course_get_url($course, $forward); + $data->nexturl = course_get_url($course, $forward, ['navigation' => true]); $data->hasnext = true; } $forward++; diff --git a/course/format/classes/output/local/state/section.php b/course/format/classes/output/local/state/section.php index a9e32f95640..74dbae531cd 100644 --- a/course/format/classes/output/local/state/section.php +++ b/course/format/classes/output/local/state/section.php @@ -83,7 +83,7 @@ class section implements renderable { 'rawtitle' => $section->name, 'cmlist' => [], 'visible' => !empty($section->visible), - 'sectionurl' => course_get_url($course, $section->section)->out(), + 'sectionurl' => course_get_url($course, $section->section, ['navigation' => true])->out(), 'current' => $format->is_section_current($section), 'indexcollapsed' => $indexcollapsed, 'contentcollapsed' => $contentcollapsed, diff --git a/course/format/singleactivity/lib.php b/course/format/singleactivity/lib.php index 6a2dd522006..283052c2913 100644 --- a/course/format/singleactivity/lib.php +++ b/course/format/singleactivity/lib.php @@ -45,22 +45,12 @@ class format_singleactivity extends core_courseformat\base { * @param int|stdClass $section Section object from database or just field course_sections.section * if null the course view page is returned * @param array $options options for view URL. At the moment core uses: - * 'navigation' (bool) if true and section has no separate page, the function returns null - * 'sr' (int) used by multipage formats to specify to which section to return + * 'navigation' (bool) ignored by this format + * 'sr' (int) ignored by this format * @return null|moodle_url */ public function get_view_url($section, $options = array()) { - $sectionnum = $section; - if (is_object($sectionnum)) { - $sectionnum = $section->section; - } - if ($sectionnum == 1) { - return new moodle_url('/course/view.php', array('id' => $this->courseid, 'section' => 1)); - } - if (!empty($options['navigation']) && $section !== null) { - return null; - } - return new moodle_url('/course/view.php', array('id' => $this->courseid)); + return new moodle_url('/course/view.php', ['id' => $this->courseid]); } /** diff --git a/course/format/singleactivity/tests/format_singleactivity_test.php b/course/format/singleactivity/tests/format_singleactivity_test.php new file mode 100644 index 00000000000..d2ce3158a23 --- /dev/null +++ b/course/format/singleactivity/tests/format_singleactivity_test.php @@ -0,0 +1,77 @@ +. + +namespace format_singleactivity; + +/** + * Single activity course format related unit tests. + * + * @package format_singleactivity + * @copyright 2023 Sara Arjona + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @covers \format_singleactivity + */ +class format_singleactivity_test extends \advanced_testcase { + + /** + * Test for get_view_url(). + * + * @covers ::get_view_url + */ + public function test_get_view_url(): void { + global $CFG; + $this->resetAfterTest(); + + // Generate a course with two sections (0 and 1) and two modules. + $generator = $this->getDataGenerator(); + $course1 = $generator->create_course(['format' => 'singleactivity']); + course_create_sections_if_missing($course1, [0, 1]); + + $data = (object)['id' => $course1->id]; + $format = course_get_format($course1); + $format->update_course_format_options($data); + + // In page. + $this->assertNotEmpty($format->get_view_url(null)); + $this->assertNotEmpty($format->get_view_url(0)); + $this->assertNotEmpty($format->get_view_url(1)); + + // Navigation. + $this->assertStringContainsString('course/view.php', $format->get_view_url(0)); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1)); + $this->assertStringContainsString('course/view.php', $format->get_view_url(0, ['navigation' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1, ['navigation' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(0, ['sr' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1, ['sr' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(0, ['sr' => 0])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1, ['sr' => 0])); + } + + /** + * Test get_required_jsfiles(). + * + * @covers ::get_required_jsfiles + */ + public function test_get_required_jsfiles(): void { + $this->resetAfterTest(); + + $generator = $this->getDataGenerator(); + + $course = $generator->create_course(['format' => 'singleactivity']); + $format = course_get_format($course); + $this->assertEmpty($format->get_required_jsfiles()); + } +} diff --git a/course/format/social/lib.php b/course/format/social/lib.php index 24c4ac3d44b..79c21bb0a98 100644 --- a/course/format/social/lib.php +++ b/course/format/social/lib.php @@ -41,15 +41,12 @@ class format_social extends core_courseformat\base { * @param int|stdClass $section Section object from database or just field course_sections.section * if null the course view page is returned * @param array $options options for view URL. At the moment core uses: - * 'navigation' (bool) if true and section has no separate page, the function returns null - * 'sr' (int) used by multipage formats to specify to which section to return + * 'navigation' (bool) ignored by this format + * 'sr' (int) ignored by this format * @return null|moodle_url */ public function get_view_url($section, $options = array()) { - if (!empty($options['navigation']) && $section !== null) { - return null; - } - return new moodle_url('/course/view.php', array('id' => $this->courseid)); + return new moodle_url('/course/view.php', ['id' => $this->courseid]); } /** diff --git a/course/format/social/tests/format_social_test.php b/course/format/social/tests/format_social_test.php new file mode 100644 index 00000000000..6868cef5cbc --- /dev/null +++ b/course/format/social/tests/format_social_test.php @@ -0,0 +1,77 @@ +. + +namespace format_social; + +/** + * Social course format related unit tests. + * + * @package format_social + * @copyright 2023 Sara Arjona + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @covers \format_social + */ +class format_social_test extends \advanced_testcase { + + /** + * Test for get_view_url(). + * + * @covers ::get_view_url + */ + public function test_get_view_url(): void { + global $CFG; + $this->resetAfterTest(); + + // Generate a course with two sections (0 and 1) and two modules. + $generator = $this->getDataGenerator(); + $course1 = $generator->create_course(['format' => 'social']); + course_create_sections_if_missing($course1, [0, 1]); + + $data = (object)['id' => $course1->id]; + $format = course_get_format($course1); + $format->update_course_format_options($data); + + // In page. + $this->assertNotEmpty($format->get_view_url(null)); + $this->assertNotEmpty($format->get_view_url(0)); + $this->assertNotEmpty($format->get_view_url(1)); + + // Navigation. + $this->assertStringContainsString('course/view.php', $format->get_view_url(0)); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1)); + $this->assertStringContainsString('course/view.php', $format->get_view_url(0, ['navigation' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1, ['navigation' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(0, ['sr' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1, ['sr' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(0, ['sr' => 0])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1, ['sr' => 0])); + } + + /** + * Test get_required_jsfiles(). + * + * @covers ::get_required_jsfiles + */ + public function test_get_required_jsfiles(): void { + $this->resetAfterTest(); + + $generator = $this->getDataGenerator(); + + $course = $generator->create_course(['format' => 'social']); + $format = course_get_format($course); + $this->assertEmpty($format->get_required_jsfiles()); + } +} diff --git a/course/format/templates/local/content/section/content.mustache b/course/format/templates/local/content/section/content.mustache index c9ede9023f8..832b1b508fd 100644 --- a/course/format/templates/local/content/section/content.mustache +++ b/course/format/templates/local/content/section/content.mustache @@ -148,7 +148,7 @@ {{/header}}
+ class="content {{^iscoursedisplaymultipage}}{{^sitehome}}{{^displayonesection}}course-content-item-content collapse {{^contentcollapsed}}show{{/contentcollapsed}}{{/displayonesection}}{{/sitehome}}{{/iscoursedisplaymultipage}}">
{{#summary}} {{$ core_courseformat/local/content/section/summary }} diff --git a/course/format/templates/local/content/section/header.mustache b/course/format/templates/local/content/section/header.mustache index 4bae5645de9..d5afc551a38 100644 --- a/course/format/templates/local/content/section/header.mustache +++ b/course/format/templates/local/content/section/header.mustache @@ -47,30 +47,36 @@ {{/sitehome}} {{^sitehome}} - + {{/displayonesection}} + {{^displayonesection}} + + {{/displayonesection}} {{/sitehome}} {{/headerdisplaymultipage}} diff --git a/course/format/tests/base_test.php b/course/format/tests/base_test.php index 6517f8935fa..6852286d097 100644 --- a/course/format/tests/base_test.php +++ b/course/format/tests/base_test.php @@ -20,6 +20,7 @@ * @package core_course * @copyright 2014 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @covers \core_courseformat\base * @coversDefaultClass \core_courseformat\base */ class base_test extends advanced_testcase { @@ -199,14 +200,14 @@ class base_test extends advanced_testcase { } /** - * Test for get_view_url() to ensure that the url is only given for the correct cases + * Test for get_view_url(). + * + * @covers ::get_view_url */ - public function test_get_view_url() { + public function test_get_view_url(): void { global $CFG; $this->resetAfterTest(); - $linkcoursesections = $CFG->linkcoursesections; - // Generate a course with two sections (0 and 1) and two modules. Course format is set to 'testformat'. // This will allow us to test the default implementation of get_view_url. $generator = $this->getDataGenerator(); @@ -218,22 +219,20 @@ class base_test extends advanced_testcase { $format->update_course_format_options($data); // In page. - $CFG->linkcoursesections = 0; - $this->assertNotEmpty($format->get_view_url(null)); - $this->assertNotEmpty($format->get_view_url(0)); - $this->assertNotEmpty($format->get_view_url(1)); - $CFG->linkcoursesections = 1; $this->assertNotEmpty($format->get_view_url(null)); $this->assertNotEmpty($format->get_view_url(0)); $this->assertNotEmpty($format->get_view_url(1)); // Navigation. - $CFG->linkcoursesections = 0; - $this->assertNull($format->get_view_url(1, ['navigation' => 1])); - $this->assertNull($format->get_view_url(0, ['navigation' => 1])); - $CFG->linkcoursesections = 1; - $this->assertNotEmpty($format->get_view_url(1, ['navigation' => 1])); - $this->assertNotEmpty($format->get_view_url(0, ['navigation' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(0)); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1)); + $this->assertStringContainsString('course/section.php', $format->get_view_url(0, ['navigation' => 1])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(1, ['navigation' => 1])); + // When sr parameter is defined, the section.php page should be returned. + $this->assertStringContainsString('course/section.php', $format->get_view_url(0, ['sr' => 1])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(1, ['sr' => 1])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(0, ['sr' => 0])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(1, ['sr' => 0])); // Expand section. // The current course format $format uses the format 'testformat' which does not use sections. @@ -756,6 +755,21 @@ class base_test extends advanced_testcase { ], ]; } + + /** + * Test get_required_jsfiles(). + * + * @covers ::get_required_jsfiles + */ + public function test_get_required_jsfiles(): void { + $this->resetAfterTest(); + + $generator = $this->getDataGenerator(); + + $course = $generator->create_course(['format' => 'testformat']); + $format = course_get_format($course); + $this->assertEmpty($format->get_required_jsfiles()); + } } /** diff --git a/course/format/tests/behat/bulk_show_one_section_actions.feature b/course/format/tests/behat/bulk_show_one_section_actions.feature index 1fe665a21f2..ad9facee5c7 100644 --- a/course/format/tests/behat/bulk_show_one_section_actions.feature +++ b/course/format/tests/behat/bulk_show_one_section_actions.feature @@ -1,5 +1,5 @@ @core @core_courseformat @core_course @show_editor @javascript -Feature: Bulk course section actions one section per page. +Feature: Bulk course section actions one section per page In order to edit the course section in one section per page setting As a teacher I need to be able to edit sections in bulk in both display modes. @@ -33,8 +33,10 @@ Feature: Bulk course section actions one section per page. Scenario: Bulk section edit is only available when multiple sections are displayed Given I click on "Select topic Topic 1" "checkbox" And I should see "1 selected" in the "sticky-footer" "region" + And I click on "Close bulk actions" "button" in the "sticky-footer" "region" # Move to single topic page. - When I click on "Topic 1" "link" in the "region-main" "region" + And I open section "1" edit menu + When I click on "View" "link" in the "Topic 1" "section" And I click on "Bulk actions" "button" Then "Select topic Topic 1" "checkbox" should not exist diff --git a/course/format/tests/behat/course_manageactivities.feature b/course/format/tests/behat/course_manageactivities.feature index d9245a9c844..1833a123e1f 100644 --- a/course/format/tests/behat/course_manageactivities.feature +++ b/course/format/tests/behat/course_manageactivities.feature @@ -1,5 +1,5 @@ @core @core_courseformat @show_editor -Feature: Verify edit utils availability. +Feature: Verify edit utils availability In order to edit the course activities As a student with capability 'moodle/course:manageactivities' I need to be able to use the edit utils. @@ -49,16 +49,17 @@ Feature: Verify edit utils availability. Then I should not see "Edit mode" @javascript - Scenario: Edit tools should be available to students with the capability 'moodle/course:manageactivities', - but should not be allowed to add and edit sections without having 'moodle/course:update' + Scenario: Edit tools should be available to students with manageactivities capability but not allowed to add sections without course:update Given I log in as "author1" When I am on "Course 1" course homepage And I turn editing mode on Then I should see "Add an activity or resource" - And I should not see "Add topic" + But I should not see "Add topic" And I open "Activity sample 1" actions menu And I should see "Edit settings" - And ".section_action_menu" "css_element" should not exist in the "Topic 1" "section" + And I open section "1" edit menu + And I should not see "Edit settings" + And I should see "View" @javascript Scenario: Section adding should be available to students if they also have the capability 'moodle/course:update'. diff --git a/course/format/tests/behat/section_page.feature b/course/format/tests/behat/section_page.feature new file mode 100644 index 00000000000..366bec94d72 --- /dev/null +++ b/course/format/tests/behat/section_page.feature @@ -0,0 +1,82 @@ +@core @core_courseformat +Feature: Single section course page + In order to improve the course page + As a user + I need to be able to see a section in a single page + + Background: + Given the following "course" exists: + | fullname | Course 1 | + | shortname | C1 | + | category | 0 | + | numsections | 3 | + And the following "activities" exist: + | activity | name | course | idnumber | section | + | assign | Activity sample 0.1 | C1 | sample1 | 0 | + | assign | Activity sample 1.1 | C1 | sample1 | 1 | + | assign | Activity sample 1.2 | C1 | sample2 | 1 | + | assign | Activity sample 1.3 | C1 | sample3 | 1 | + | assign | Activity sample 2.1 | C1 | sample3 | 2 | + | assign | Activity sample 2.2 | C1 | sample3 | 2 | + And the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + Given I am on the "C1" "Course" page logged in as "teacher1" + + @javascript + Scenario: Collapsed sections are always expanded in the single section page + Given I press "Collapse all" + And I should not see "Activity sample 1.1" in the "region-main" "region" + When I click on "Topic 1" "link" in the "region-main" "region" + Then I should see "Activity sample 1.1" + And I should see "Activity sample 1.2" + And I should see "Activity sample 1.3" + And I should not see "Activity sample 2.1" in the "region-main" "region" + And I should not see "Activity sample 2.1" in the "region-main" "region" + + Scenario: General section is not displayed in the single section page + When I click on "Topic 1" "link" in the "region-main" "region" + Then I should not see "General" in the "region-main" "region" + And I should not see "Activity sample 0.1" in the "region-main" "region" + And I should see "Activity sample 1.1" + And I should see "Activity sample 1.2" + And I should see "Activity sample 1.3" + And I should not see "Activity sample 2.1" in the "region-main" "region" + And I should not see "Activity sample 2.1" in the "region-main" "region" + + @javascript + Scenario: The view action for sections displays the single section page + Given I turn editing mode on + And I open section "1" edit menu + When I click on "View" "link" in the "Topic 1" "section" + Then I should not see "General" in the "region-main" "region" + And I should not see "Activity sample 0.1" in the "region-main" "region" + And I should see "Activity sample 1.1" + And I should see "Activity sample 1.2" + And I should see "Activity sample 1.3" + And I should not see "Activity sample 2.1" in the "region-main" "region" + And I should not see "Activity sample 2.1" in the "region-main" "region" + And I am on "Course 1" course homepage + And I open section "2" edit menu + And I click on "View" "link" in the "Topic 2" "section" + And I should not see "General" in the "region-main" "region" + And I should not see "Activity sample 0.1" in the "region-main" "region" + And I should not see "Activity sample 1.1" + And I should not see "Activity sample 1.2" + And I should not see "Activity sample 1.3" + And I should see "Activity sample 2.1" in the "region-main" "region" + And I should see "Activity sample 2.1" in the "region-main" "region" + # The following steps will need to be changed in MDL-80248, when the General section will be displayed in isolation. + But I am on "Course 1" course homepage + And I open section "0" edit menu + And I click on "View" "link" in the "General" "section" + And I should see "General" in the "region-main" "region" + And I should see "Activity sample 0.1" in the "region-main" "region" + And I should see "Activity sample 1.1" + And I should see "Activity sample 1.2" + And I should see "Activity sample 1.3" + And I should see "Activity sample 2.1" in the "region-main" "region" + And I should see "Activity sample 2.1" in the "region-main" "region" diff --git a/course/format/topics/lib.php b/course/format/topics/lib.php index b745164ca0d..c3a6181751c 100644 --- a/course/format/topics/lib.php +++ b/course/format/topics/lib.php @@ -108,45 +108,26 @@ class format_topics extends core_courseformat\base { * @param int|stdClass $section Section object from database or just field course_sections.section * if omitted the course view page is returned * @param array $options options for view URL. At the moment core uses: - * 'navigation' (bool) if true and section has no separate page, the function returns null - * 'sr' (int) used by multipage formats to specify to which section to return + * 'navigation' (bool) if true and section not empty, the function returns section page; otherwise, it returns course page. + * 'sr' (int) used by course formats to specify to which section to return * @return null|moodle_url */ public function get_view_url($section, $options = []) { - global $CFG; $course = $this->get_course(); - $url = new moodle_url('/course/view.php', ['id' => $course->id]); - - $sr = null; if (array_key_exists('sr', $options)) { - $sr = $options['sr']; - } - if (is_object($section)) { + $sectionno = $options['sr']; + } else if (is_object($section)) { $sectionno = $section->section; } else { $sectionno = $section; } - if ($sectionno !== null) { - if ($sr !== null) { - if ($sr) { - $usercoursedisplay = COURSE_DISPLAY_MULTIPAGE; - $sectionno = $sr; - } else { - $usercoursedisplay = COURSE_DISPLAY_SINGLEPAGE; - } - } else { - $usercoursedisplay = $course->coursedisplay ?? COURSE_DISPLAY_SINGLEPAGE; - } - if ($sectionno != 0 && $usercoursedisplay == COURSE_DISPLAY_MULTIPAGE) { - $url->param('section', $sectionno); - } else { - if (empty($CFG->linkcoursesections) && !empty($options['navigation'])) { - return null; - } - $url->set_anchor('section-'.$sectionno); - } + if ((!empty($options['navigation']) || array_key_exists('sr', $options)) && $sectionno !== null) { + // Display section on separate page. + $sectioninfo = $this->get_section($sectionno); + return new moodle_url('/course/section.php', ['id' => $sectioninfo->id]); } - return $url; + + return new moodle_url('/course/view.php', ['id' => $course->id]); } /** @@ -457,6 +438,15 @@ class format_topics extends core_courseformat\base { $formatoptions['indentation'] = get_config('format_topics', 'indentation'); return $formatoptions; } + + /** + * Get the required javascript files for the course format. + * + * @return array The list of javascript files required by the course format. + */ + public function get_required_jsfiles(): array { + return ['/course/format/topics/format.js']; + } } /** diff --git a/course/format/topics/tests/format_topics_test.php b/course/format/topics/tests/format_topics_test.php index eca87a7f7cc..8581f9083ef 100644 --- a/course/format/topics/tests/format_topics_test.php +++ b/course/format/topics/tests/format_topics_test.php @@ -29,6 +29,7 @@ require_once($CFG->dirroot . '/course/lib.php'); * @package format_topics * @copyright 2015 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @covers \format_topics */ class format_topics_test extends \advanced_testcase { @@ -232,16 +233,14 @@ class format_topics_test extends \advanced_testcase { } /** - * Test for get_view_url() to ensure that the url is only given for the correct cases. + * Test for get_view_url(). * - * @return void + * @covers ::get_view_url */ - public function test_get_view_url() { + public function test_get_view_url(): void { global $CFG; $this->resetAfterTest(); - $linkcoursesections = $CFG->linkcoursesections; - // Generate a course with two sections (0 and 1) and two modules. $generator = $this->getDataGenerator(); $course1 = $generator->create_course(['format' => 'topics']); @@ -252,21 +251,34 @@ class format_topics_test extends \advanced_testcase { $format->update_course_format_options($data); // In page. - $CFG->linkcoursesections = 0; - $this->assertNotEmpty($format->get_view_url(null)); - $this->assertNotEmpty($format->get_view_url(0)); - $this->assertNotEmpty($format->get_view_url(1)); - $CFG->linkcoursesections = 1; $this->assertNotEmpty($format->get_view_url(null)); $this->assertNotEmpty($format->get_view_url(0)); $this->assertNotEmpty($format->get_view_url(1)); // Navigation. - $CFG->linkcoursesections = 0; - $this->assertNull($format->get_view_url(1, ['navigation' => 1])); - $this->assertNull($format->get_view_url(0, ['navigation' => 1])); - $CFG->linkcoursesections = 1; - $this->assertNotEmpty($format->get_view_url(1, ['navigation' => 1])); - $this->assertNotEmpty($format->get_view_url(0, ['navigation' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(0)); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1)); + $this->assertStringContainsString('course/section.php', $format->get_view_url(0, ['navigation' => 1])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(1, ['navigation' => 1])); + // When sr parameter is defined, the section.php page should be returned. + $this->assertStringContainsString('course/section.php', $format->get_view_url(0, ['sr' => 1])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(1, ['sr' => 1])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(0, ['sr' => 0])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(1, ['sr' => 0])); + } + + /** + * Test get_required_jsfiles(). + * + * @covers ::get_required_jsfiles + */ + public function test_get_required_jsfiles(): void { + $this->resetAfterTest(); + + $generator = $this->getDataGenerator(); + + $course = $generator->create_course(['format' => 'topics']); + $format = course_get_format($course); + $this->assertNotEmpty($format->get_required_jsfiles()); } } diff --git a/course/format/upgrade.txt b/course/format/upgrade.txt index f6b2c0eb073..5e4c0233f9d 100644 --- a/course/format/upgrade.txt +++ b/course/format/upgrade.txt @@ -7,6 +7,8 @@ Overview of this plugin type at https://moodledev.io/docs/apis/plugintypes/forma valid section move mutation. * The state action core_courseformat\stateactions::section_move is deprecated and replaced by core_courseformat\stateactions::section_move_after. +* $CFG->linkcoursesections setting has been completely removed because it's not required anymore. From now on, sections will be +always linked because a new page, section.php, has been created to display any single section. === 4.3 === * New core_courseformat\output\activitybadge class that can be extended by any module to display content near the activity name. diff --git a/course/format/weeks/lib.php b/course/format/weeks/lib.php index d0eb7436997..89529917993 100644 --- a/course/format/weeks/lib.php +++ b/course/format/weeks/lib.php @@ -118,45 +118,26 @@ class format_weeks extends core_courseformat\base { * @param int|stdClass $section Section object from database or just field course_sections.section * if omitted the course view page is returned * @param array $options options for view URL. At the moment core uses: - * 'navigation' (bool) if true and section has no separate page, the function returns null - * 'sr' (int) used by multipage formats to specify to which section to return + * 'navigation' (bool) if true and section not empty, the function returns section page; otherwise, it returns course page. + * 'sr' (int) used by course formats to specify to which section to return * @return null|moodle_url */ public function get_view_url($section, $options = array()) { - global $CFG; $course = $this->get_course(); - $url = new moodle_url('/course/view.php', array('id' => $course->id)); - - $sr = null; if (array_key_exists('sr', $options)) { - $sr = $options['sr']; - } - if (is_object($section)) { + $sectionno = $options['sr']; + } else if (is_object($section)) { $sectionno = $section->section; } else { $sectionno = $section; } - if ($sectionno !== null) { - if ($sr !== null) { - if ($sr) { - $usercoursedisplay = COURSE_DISPLAY_MULTIPAGE; - $sectionno = $sr; - } else { - $usercoursedisplay = COURSE_DISPLAY_SINGLEPAGE; - } - } else { - $usercoursedisplay = $course->coursedisplay ?? COURSE_DISPLAY_SINGLEPAGE; - } - if ($sectionno != 0 && $usercoursedisplay == COURSE_DISPLAY_MULTIPAGE) { - $url->param('section', $sectionno); - } else { - if (empty($CFG->linkcoursesections) && !empty($options['navigation'])) { - return null; - } - $url->set_anchor('section-'.$sectionno); - } + if ((!empty($options['navigation']) || array_key_exists('sr', $options)) && $sectionno !== null) { + // Display section on separate page. + $sectioninfo = $this->get_section($sectionno); + return new moodle_url('/course/section.php', ['id' => $sectioninfo->id]); } - return $url; + + return new moodle_url('/course/view.php', ['id' => $course->id]); } /** @@ -631,6 +612,15 @@ class format_weeks extends core_courseformat\base { $formatoptions['indentation'] = get_config('format_weeks', 'indentation'); return $formatoptions; } + + /** + * Get the required javascript files for the course format. + * + * @return array The list of javascript files required by the course format. + */ + public function get_required_jsfiles(): array { + return ['/course/format/weeks/format.js']; + } } /** diff --git a/course/format/weeks/tests/format_weeks_test.php b/course/format/weeks/tests/format_weeks_test.php index 82f82ced5a2..9daaacff752 100644 --- a/course/format/weeks/tests/format_weeks_test.php +++ b/course/format/weeks/tests/format_weeks_test.php @@ -29,6 +29,7 @@ require_once($CFG->dirroot . '/course/lib.php'); * @package format_weeks * @copyright 2015 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @covers \format_weeks */ class format_weeks_test extends \advanced_testcase { @@ -229,14 +230,14 @@ class format_weeks_test extends \advanced_testcase { } /** - * Test for get_view_url() to ensure that the url is only given for the correct cases + * Test for get_view_url(). + * + * @covers ::get_view_url */ - public function test_get_view_url() { + public function test_get_view_url(): void { global $CFG; $this->resetAfterTest(); - $linkcoursesections = $CFG->linkcoursesections; - // Generate a course with two sections (0 and 1) and two modules. $generator = $this->getDataGenerator(); $course1 = $generator->create_course(array('format' => 'weeks')); @@ -247,22 +248,34 @@ class format_weeks_test extends \advanced_testcase { $format->update_course_format_options($data); // In page. - $CFG->linkcoursesections = 0; - $this->assertNotEmpty($format->get_view_url(null)); - $this->assertNotEmpty($format->get_view_url(0)); - $this->assertNotEmpty($format->get_view_url(1)); - $CFG->linkcoursesections = 1; $this->assertNotEmpty($format->get_view_url(null)); $this->assertNotEmpty($format->get_view_url(0)); $this->assertNotEmpty($format->get_view_url(1)); // Navigation. - $CFG->linkcoursesections = 0; - $this->assertNull($format->get_view_url(1, ['navigation' => 1])); - $this->assertNull($format->get_view_url(0, ['navigation' => 1])); - $CFG->linkcoursesections = 1; - $this->assertNotEmpty($format->get_view_url(1, ['navigation' => 1])); - $this->assertNotEmpty($format->get_view_url(0, ['navigation' => 1])); + $this->assertStringContainsString('course/view.php', $format->get_view_url(0)); + $this->assertStringContainsString('course/view.php', $format->get_view_url(1)); + $this->assertStringContainsString('course/section.php', $format->get_view_url(0, ['navigation' => 1])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(1, ['navigation' => 1])); + // When sr parameter is defined, the section.php page should be returned. + $this->assertStringContainsString('course/section.php', $format->get_view_url(0, ['sr' => 1])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(1, ['sr' => 1])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(0, ['sr' => 0])); + $this->assertStringContainsString('course/section.php', $format->get_view_url(1, ['sr' => 0])); } + /** + * Test get_required_jsfiles(). + * + * @covers ::get_required_jsfiles + */ + public function test_get_required_jsfiles(): void { + $this->resetAfterTest(); + + $generator = $this->getDataGenerator(); + + $course = $generator->create_course(['format' => 'weeks']); + $format = course_get_format($course); + $this->assertNotEmpty($format->get_required_jsfiles()); + } } diff --git a/course/section.php b/course/section.php new file mode 100644 index 00000000000..01e1aba09ea --- /dev/null +++ b/course/section.php @@ -0,0 +1,193 @@ +. + +/** + * Display a course section. + * + * @package core_course + * @copyright 2023 Sara Arjona + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once('../config.php'); +require_once('lib.php'); +require_once($CFG->libdir.'/completionlib.php'); + +redirect_if_major_upgrade_required(); + +$sectionid = required_param('id', PARAM_INT); +// This parameter is used by the classic theme to force editing on. +$edit = optional_param('edit', -1, PARAM_BOOL); + +$section = $DB->get_record('course_sections', ['id' => $sectionid], '*', MUST_EXIST); + +// Defined here to avoid notices on errors. +$PAGE->set_url('/course/section.php', ['id' => $sectionid]); + +if ($section->course == SITEID) { + // The home page is not a real course. + redirect($CFG->wwwroot .'/?redirect=0'); +} + +$course = get_course($section->course); +// Fix course format if it is no longer installed. +$format = course_get_format($course); +$course->format = $format->get_format(); + +// When the course format doesn't support sections, redirect to course page. +if (!course_format_uses_sections($course->format)) { + redirect(new moodle_url('/course/view.php', ['id' => $course->id])); +} + +// Prevent caching of this page to stop confusion when changing page after making AJAX changes. +$PAGE->set_cacheable(false); + +context_helper::preload_course($course->id); +$context = context_course::instance($course->id, MUST_EXIST); + +require_login($course); + +// Must set layout before getting section info. See MDL-47555. +$PAGE->set_pagelayout('course'); +$PAGE->add_body_class('limitedwidth'); + +// Get section details and check it exists. +$modinfo = get_fast_modinfo($course); +$coursesections = $modinfo->get_section_info($section->section, MUST_EXIST); + +// Check user is allowed to see it. +if (!$coursesections->uservisible) { + // Check if coursesection has conditions affecting availability and if + // so, output availability info. + if ($coursesections->visible && $coursesections->availableinfo) { + $sectionname = get_section_name($course, $coursesections); + $message = get_string('notavailablecourse', '', $sectionname); + redirect(course_get_url($course), $message, null, \core\output\notification::NOTIFY_ERROR); + } else { + // Note: We actually already know they don't have this capability + // or uservisible would have been true; this is just to get the + // correct error message shown. + require_capability('moodle/course:viewhiddensections', $context); + } +} + +$PAGE->set_pagetype('course-view-' . $course->format); +$PAGE->set_other_editing_capability('moodle/course:update'); +$PAGE->set_other_editing_capability('moodle/course:manageactivities'); +$PAGE->set_other_editing_capability('moodle/course:activityvisibility'); +$PAGE->set_other_editing_capability('moodle/course:sectionvisibility'); +$PAGE->set_other_editing_capability('moodle/course:movesections'); + +$renderer = $PAGE->get_renderer('format_' . $course->format); + +// This is used by the Classic theme to change the editing mode based on the 'edit' parameter value. +if (!isset($USER->editing)) { + $USER->editing = 0; +} +if ($PAGE->user_allowed_editing()) { + if (($edit == 1) && confirm_sesskey()) { + $USER->editing = 1; + $url = new moodle_url($PAGE->url, ['notifyeditingon' => 1]); + redirect($url); + } else if (($edit == 0) && confirm_sesskey()) { + $USER->editing = 0; + if (!empty($USER->activitycopy) && $USER->activitycopycourse == $course->id) { + $USER->activitycopy = false; + $USER->activitycopycourse = null; + } + redirect($PAGE->url); + } +} + +// This is used by the Classic theme, to display the Turn editing on/off button. +// We are currently keeping the button here from 1.x to help new teachers figure out what to do, even though the link also appears +// in the course admin block. It also means you can back out of a situation where you removed the admin block. +if ($PAGE->user_allowed_editing()) { + $buttons = $OUTPUT->edit_button($PAGE->url); + $PAGE->set_button($buttons); +} + +// Make the title more specific when editing, for accessibility reasons. +$editingtitle = ''; +if ($PAGE->user_is_editing()) { + $editingtitle = 'editing'; +} +$sectionname = get_string('sectionname', "format_$course->format"); +$sectiontitle = get_section_name($course, $section); +$PAGE->set_title( + get_string( + 'coursesectiontitle' . $editingtitle, + 'moodle', + ['course' => $course->fullname, 'sectiontitle' => $sectiontitle, 'sectionname' => $sectionname] + ) +); + +// Add bulk editing control. +$bulkbutton = $renderer->bulk_editing_button($format); +if (!empty($bulkbutton)) { + $PAGE->add_header_action($bulkbutton); +} + +$PAGE->set_heading($course->fullname); +echo $OUTPUT->header(); + +// Show communication room status notification. +if (core_communication\api::is_available() && has_capability('moodle/course:update', $context)) { + $communication = \core_communication\api::load_by_instance( + $context, + 'core_course', + 'coursecommunication', + $course->id + ); + $communication->show_communication_room_status_notification(); +} + +// Display a warning if asynchronous backups are pending for this course. +if ($PAGE->user_is_editing()) { + require_once($CFG->dirroot . '/backup/util/helper/async_helper.class.php'); + if (async_helper::is_async_pending($course->id, 'course', 'backup')) { + echo $OUTPUT->notification(get_string('pendingasyncedit', 'backup'), 'warning'); + } +} + +echo $renderer->container_start('course-content'); + +// Include course AJAX. +include_course_ajax($course, $modinfo->get_used_module_names()); + +$format->set_section_number($section->section); +$outputclass = $format->get_output_classname('content'); +$widget = new $outputclass($format); +echo $renderer->render($widget); + +// Include course format javascript files. +$jsfiles = $format->get_required_jsfiles(); +foreach ($jsfiles as $jsfile) { + $PAGE->requires->js($jsfile); +} + +echo $renderer->container_end(); + +// Trigger course viewed event. +course_view($context, $section->section); + +// Load the view JS module if completion tracking is enabled for this course. +$completion = new completion_info($course); +if ($completion->is_enabled()) { + $PAGE->requires->js_call_amd('core_course/view', 'init'); +} + +echo $OUTPUT->footer(); diff --git a/course/tests/behat/activity_resource_delete.feature b/course/tests/behat/activity_resource_delete.feature index 7ccea2de327..874d0528dba 100644 --- a/course/tests/behat/activity_resource_delete.feature +++ b/course/tests/behat/activity_resource_delete.feature @@ -31,7 +31,7 @@ Feature: Delete activity and resource works correctly And I open "Glossary 1" actions menu And I click on "Delete" "link" in the "Glossary 1" activity And I click on "Delete" "button" in the "Delete activity?" "dialogue" - # Confirm that glossary is successfully deleted + # Confirm that glossary is successfully deleted. And I should not see "Glossary 1" # Reload the page and confirm that both the label and glossary are really deleted And I reload the page diff --git a/course/tests/behat/course_controls.feature b/course/tests/behat/course_controls.feature index 8963446847d..38270953cb6 100644 --- a/course/tests/behat/course_controls.feature +++ b/course/tests/behat/course_controls.feature @@ -16,7 +16,7 @@ Feature: Course activity controls works as expected # * Course controls with paged mode in a section's page @javascript @_cross_browser - Scenario Outline: General activities course controls using topics and weeks formats, and paged mode and not paged mode works as expected + Scenario Outline: Check activities using topics and weeks formats, and paged mode and not paged mode Given the following "users" exist: | username | firstname | lastname | email | | teacher1 | Teacher | 1 | teacher1@example.com | @@ -30,15 +30,14 @@ Feature: Course activity controls works as expected | activity | course | section | name | | forum | C1 | 1 | Test forum name 1 | | forum | C1 | 1 | Test forum name 2 | - And I log in as "teacher1" - And I am on "Course 1" course homepage with editing mode on + And I am on the "Course 1" course page logged in as "teacher1" When I click on "link" in the "region-main" "region" + And I turn editing mode on And I add the "Recent activity" block And I open the action menu in "Recent activity" "block" And I click on "Delete Recent activity block" "link" And I click on "Delete" "button" in the "Delete block?" "dialogue" And "section" exist - And "section" exist And I open "Test forum name 1" actions menu And I click on "Edit settings" "link" in the "Test forum name 1" activity And I should see "Updating Forum" @@ -76,14 +75,16 @@ Feature: Course activity controls works as expected Examples: | courseformat | coursedisplay | targetpage | should_see_other_sections | should_see_other_sections_following_block_sections_links | belowpage | - | topics | 0 | "General" | should | should | "Topic 2" | - | topics | 1 | "Topic 1" | should not | should not | "Topic 2" | + | topics | 0 | "General" | should | should not | "Topic 2" | | topics | 1 | "General" | should | should not | "Topic 2" | - | weeks | 0 | "General" | should | should | "8 January - 14 January" | - | weeks | 1 | "1 January - 7 January" | should not | should not | "8 January - 14 January" | + | topics | 0 | "Topic 1" | should not | should not | "Topic 2" | + | topics | 1 | "Topic 1" | should not | should not | "Topic 2" | + | weeks | 0 | "General" | should | should not | "8 January - 14 January" | | weeks | 1 | "General" | should | should not | "8 January - 14 January" | + | weeks | 0 | "1 January - 7 January" | should not | should not | "8 January - 14 January" | + | weeks | 1 | "1 January - 7 January" | should not | should not | "8 January - 14 January" | - Scenario Outline: General activities course controls using topics and weeks formats, and paged mode and not paged mode works as expected without javascript + Scenario Outline: Check, without javascript, activities using topics and weeks formats, and paged mode and not paged mode Given the following "users" exist: | username | firstname | lastname | email | | teacher1 | Teacher | 1 | teacher1@example.com | @@ -97,9 +98,9 @@ Feature: Course activity controls works as expected | activity | name | course | idnumber | section | | forum | Test forum name 1 | C1 | 0001 | 1 | | forum | Test forum name 2 | C1 | 0002 | 1 | - And I log in as "teacher1" - And I am on "Course 1" course homepage with editing mode on + And I am on the "Course 1" course page logged in as "teacher1" When I click on "link" in the "region-main" "region" + And I turn editing mode on And I add the "Recent activity" block And I open the action menu in "Recent activity" "block" And I click on "Delete Recent activity block" "link" @@ -121,28 +122,27 @@ Feature: Course activity controls works as expected And I should see "Test forum name 2" And I should see "Edited test forum name 2" And I hide section "1" - And "section" exist And section "1" should be hidden And all activities in section "1" should be hidden And I show section "1" - And "section" exist And section "1" should be visible And the following config values are set as admin: | unaddableblocks | | theme_boost| And I add the "Section links" block - And "section" exist And I should see "1 2 3 4 5" in the "Section links" "block" And I click on "2" "link" in the "Section links" "block" And I see "Test forum name 2" Examples: | courseformat | coursedisplay | targetpage | should_see_other_sections | should_see_other_sections_following_block_sections_links | belowpage | - | topics | 0 | "General" | should | should | "Topic 2" | - | topics | 1 | "Topic 1" | should not | should not | "Topic 2" | + | topics | 0 | "General" | should | should not | "Topic 2" | | topics | 1 | "General" | should | should not | "Topic 2" | - | weeks | 0 | "General" | should | should | "8 January - 14 January" | - | weeks | 1 | "1 January - 7 January" | should not | should not | "8 January - 14 January" | + | topics | 0 | "Topic 1" | should not | should not | "Topic 2" | + | topics | 1 | "Topic 1" | should not | should not | "Topic 2" | + | weeks | 0 | "General" | should | should not | "8 January - 14 January" | | weeks | 1 | "General" | should | should not | "8 January - 14 January" | + | weeks | 0 | "1 January - 7 January" | should not | should not | "8 January - 14 January" | + | weeks | 1 | "1 January - 7 January" | should not | should not | "8 January - 14 January" | @javascript Scenario Outline: Indentation should allow one level only diff --git a/course/tests/behat/move_sections.feature b/course/tests/behat/move_sections.feature index b8c5164788c..feb64c8ab3b 100644 --- a/course/tests/behat/move_sections.feature +++ b/course/tests/behat/move_sections.feature @@ -17,17 +17,19 @@ Feature: Sections can be moved And the following "activities" exist: | activity | name | course | idnumber | section | | forum | Test forum name | C1 | forum1 | 1 | - And I log in as "teacher1" - And I am on "Course 1" course homepage with editing mode on Scenario: Move up and down a section with Javascript disabled in a single page course + Given I log in as "teacher1" + And I am on "Course 1" course homepage with editing mode on When I move down section "1" Then I should see "Test forum name" in the "Topic 2" "section" And I move up section "2" And I should see "Test forum name" in the "Topic 1" "section" Scenario: Move up and down a section with Javascript disabled in the course home of a course using paged mode - Given I navigate to "Settings" in current page administration + Given I log in as "teacher1" + And I am on "Course 1" course homepage with editing mode on + And I navigate to "Settings" in current page administration And I set the following fields to these values: | Course layout | Show one section per page | And I press "Save and display" @@ -37,11 +39,13 @@ Feature: Sections can be moved And I should see "Test forum name" in the "Topic 1" "section" Scenario: Sections can not be moved with Javascript disabled in a section page of a course using paged mode - Given I navigate to "Settings" in current page administration + Given I am on the "Course 1" course page logged in as "teacher1" + And I navigate to "Settings" in current page administration And I set the following fields to these values: | Course layout | Show one section per page | And I press "Save and display" - When I follow "Topic 2" + When I click on "Topic 2" "link" in the "region-main" "region" + And I turn editing mode on Then "Topic 1" "section" should not exist And "Topic 3" "section" should not exist And "Move down" "link" should not exist @@ -49,6 +53,8 @@ Feature: Sections can be moved @javascript Scenario: Move section with javascript + Given I log in as "teacher1" + And I am on "Course 1" course homepage with editing mode on When I open section "1" edit menu And I click on "Move" "link" in the "Topic 1" "section" And I click on "Topic 3" "link" in the ".modal-body" "css_element" diff --git a/course/tests/behat/paged_course_navigation.feature b/course/tests/behat/paged_course_navigation.feature index ce6523ce746..fefa309bed1 100644 --- a/course/tests/behat/paged_course_navigation.feature +++ b/course/tests/behat/paged_course_navigation.feature @@ -48,7 +48,8 @@ Feature: Course paged mode | chat | C1 | Chat room | When I log in as "admin" And I am on "Course 1" course homepage with editing mode on - And I click on "link" in the "section" + And I open section edit menu + And I click on "View" "link" in the "section" And I should see in the "div.single-section" "css_element" And I should see in the ".single-section div.nextsection" "css_element" And I should not see in the ".single-section" "css_element" @@ -57,9 +58,9 @@ Feature: Course paged mode And I should not see in the ".single-section" "css_element" Examples: - | courseformat | section1 | section2 | prevunexistingsection | - | topics | "Topic 1" | "Topic 2" | "Topic 0" | - | weeks | "1 January - 7 January" | "8 January - 14 January" | "25 December - 31 December" | + | courseformat | section1 | sectionnumber1 | section2 | prevunexistingsection | + | topics | "Topic 1" | "1" | "Topic 2" | "Topic 0" | + | weeks | "1 January - 7 January" | "1" | "8 January - 14 January" | "25 December - 31 December" | Scenario Outline: Weekly and topics course formats with Javascript disabled Given the following "courses" exist: diff --git a/lang/en/admin.php b/lang/en/admin.php index ff66d1db2dc..3aea88af19f 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -793,8 +793,6 @@ $string['libcurlwarning'] = 'It has been detected that libcurl doesn\'t have CUR $string['licensesettings'] = 'Licence settings'; $string['linkadmincategories'] = 'Link admin categories'; $string['linkadmincategories_help'] = 'If enabled admin setting categories will be displayed as links in the navigation and will lead to the admin category pages.'; -$string['linkcoursesections'] = 'Always link course sections'; -$string['linkcoursesections_help'] = 'Always try to provide a link for course sections. Course sections are usually only shown as links if the course format displays a single section per page. If this setting is enabled a link will always be provided.'; $string['loading'] = 'Loading'; $string['localetext'] = 'Sitewide locale'; $string['localstringcustomization'] = 'Local string customization'; @@ -1638,3 +1636,5 @@ $string['unsettheme'] = 'Unset theme'; // Deprecated since Moodle 4.4. $string['taskdeletecachetext'] = 'Delete old text cache records'; $string['themesettings'] = 'Theme settings'; +$string['linkcoursesections'] = 'Always link course sections'; +$string['linkcoursesections_help'] = 'Always try to provide a link for course sections. Course sections are usually only shown as links if the course format displays a single section per page. If this setting is enabled a link will always be provided.'; diff --git a/lang/en/deprecated.txt b/lang/en/deprecated.txt index ab6432d6f21..3db1a425c0b 100644 --- a/lang/en/deprecated.txt +++ b/lang/en/deprecated.txt @@ -115,3 +115,5 @@ taskdeletecachetext,core_admin themesettings,core_admin copycourseheading,core_backup backupcourse,core_backup +linkcoursesections,core_admin +linkcoursesections_help,core_admin diff --git a/lib/classes/output/icon_system_fontawesome.php b/lib/classes/output/icon_system_fontawesome.php index 8a1f6cae02a..afd79775c3f 100644 --- a/lib/classes/output/icon_system_fontawesome.php +++ b/lib/classes/output/icon_system_fontawesome.php @@ -346,6 +346,7 @@ class icon_system_fontawesome extends icon_system_font { 'core:i/user' => 'fa-user', 'core:i/users' => 'fa-users', 'core:i/valid' => 'fa-check text-success', + 'core:i/viewsection' => 'fa-pager', 'core:i/warning' => 'fa-exclamation text-warning', 'core:i/window_close' => 'fa-window-close', 'core:i/withsubcat' => 'fa-plus-square', diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index b805206224c..d0a47fcc39e 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -856,5 +856,13 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2023110900.00); } + if ($oldversion < 2023120100.01) { + // The $CFG->linkcoursesections setting has been removed because it's not required anymore. + // From now, sections will be always linked because a new page, section.php, has been created to display a single section. + unset_config('linkcoursesections'); + + upgrade_main_savepoint(true, 2023120100.01); + } + return true; } diff --git a/pix/i/viewsection.svg b/pix/i/viewsection.svg new file mode 100644 index 00000000000..31ec744bc5c --- /dev/null +++ b/pix/i/viewsection.svg @@ -0,0 +1 @@ + diff --git a/version.php b/version.php index 5024b851df7..0b368dce6f1 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2023120100.00; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2023120100.01; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes. $release = '4.4dev (Build: 20231201)'; // Human-friendly version name