/** * Renders HTML to display one course module in a course section * * This includes link, content, availability, completion info and additional information * that module type wants to display (i.e. number of unread forum posts) * * This function calls: * {@link core_course_renderer::course_section_cm_name()} * {@link core_course_renderer::course_section_cm_text()} * {@link core_course_renderer::course_section_cm_availability()} * {@link core_course_renderer::course_section_cm_completion()} * {@link course_get_cm_edit_actions()} * {@link core_course_renderer::course_section_cm_edit_actions()} * * @param stdClass $course * @param completion_info $completioninfo * @param cm_info $mod * @param int|null $sectionreturn * @param array $displayoptions * @return string */ public function course_section_cm($course, &$completioninfo, cm_info $mod, $sectionreturn, $displayoptions = array()) { $output = ''; // We return empty string (because course module will not be displayed at all) // if: // 1) The activity is not visible to users // and // 2) The 'availableinfo' is empty, i.e. the activity was // hidden in a way that leaves no info, such as using the // eye icon. if (!$mod->uservisible && empty($mod->availableinfo)) { return $output; } $indentclasses = 'mod-indent'; if (!empty($mod->indent)) { $indentclasses .= ' mod-indent-' . $mod->indent; if ($mod->indent > 15) { $indentclasses .= ' mod-indent-huge'; } } $output .= html_writer::start_tag('div'); if ($this->page->user_is_editing()) { $output .= course_get_cm_move($mod, $sectionreturn); } $output .= html_writer::start_tag('div', array('class' => 'mod-indent-outer')); // This div is used to indent the content. $output .= html_writer::div('', $indentclasses); // Start a wrapper for the actual content to keep the indentation consistent $output .= html_writer::start_tag('div'); // Display the link to the module (or do nothing if module has no url) $cmname = $this->course_section_cm_name($mod, $displayoptions); if (!empty($cmname)) { // Start the div for the activity title, excluding the edit icons. $output .= html_writer::start_tag('div', array('class' => 'activityinstance')); $output .= $cmname; // Module can put text after the link (e.g. forum unread) $output .= $mod->afterlink; // Closing the tag which contains everything but edit icons. Content part of the module should not be part of this. $output .= html_writer::end_tag('div'); // .activityinstance } // If there is content but NO link (eg label), then display the // content here (BEFORE any icons). In this case cons must be // displayed after the content so that it makes more sense visually // and for accessibility reasons, e.g. if you have a one-line label // it should work similarly (at least in terms of ordering) to an // activity. $contentpart = $this->course_section_cm_text($mod, $displayoptions); $url = $mod->url; if (empty($url)) { $output .= $contentpart; } $modicons = ''; if ($this->page->user_is_editing()) { $editactions = course_get_cm_edit_actions($mod, $mod->indent, $sectionreturn); $modicons .= ' ' . $this->course_section_cm_edit_actions($editactions, $mod, $displayoptions); $modicons .= $mod->afterediticons; } $modicons .= $this->course_section_cm_completion($course, $completioninfo, $mod, $displayoptions); if (!empty($modicons)) { $output .= html_writer::span($modicons, 'actions'); } // If there is content AND a link, then display the content here // (AFTER any icons). Otherwise it was displayed before if (!empty($url)) { $output .= $contentpart; } // show availability info (if module is not available) $output .= $this->course_section_cm_availability($mod, $displayoptions); $output .= html_writer::end_tag('div'); // $indentclasses // End of indentation div. $output .= html_writer::end_tag('div'); $output .= html_writer::end_tag('div'); return $output; }
/** * Renders HTML to display one course module in a course section * * This includes link, content, availability, completion info and additional information * that module type wants to display (i.e. number of unread forum posts) * * This function calls: * {@link core_course_renderer::course_section_cm_name()} * {@link cm_info::get_after_link()} * {@link core_course_renderer::course_section_cm_text()} * {@link core_course_renderer::course_section_cm_availability()} * {@link core_course_renderer::course_section_cm_completion()} * {@link course_get_cm_edit_actions()} * {@link core_course_renderer::course_section_cm_edit_actions()} * * @param stdClass $course * @param completion_info $completioninfo * @param cm_info $mod * @param int|null $sectionreturn * @param array $displayoptions * @return string */ public function course_section_cm($course, &$completioninfo, cm_info $mod, $sectionreturn, $displayoptions = array()) { $output = ''; // We return empty string (because course module will not be displayed at all) // if: // 1) The activity is not visible to users // and // 2) The 'availableinfo' is empty, i.e. the activity was // hidden in a way that leaves no info, such as using the // eye icon. if (!$mod->uservisible && empty($mod->availableinfo)) { return $output; } $output .= "<div class='asset-wrapper'>"; // Start the div for the activity content. $output .= "<div class='activityinstance'>"; // Display the link to the module (or do nothing if module has no url). $cmname = $this->course_section_cm_name($mod, $displayoptions); $assetlink = ''; // SHAME - For moodles ajax show/hide call to work it needs activityinstance > a to add a class of dimmed to. // This dimmed class is of course inaccessible junk. if (!empty($cmname)) { $assetlink = "<a></a><h4 class='snap-asset-link'>" . $cmname . "</h4>"; } // Meta. $assetmeta = "<div class='snap-meta'>"; // Activity/resource type. $snapmodtype = $this->get_mod_type($mod)[0]; $assetmeta .= "<span class='snap-assettype'>" . $snapmodtype . "</span>"; if (!empty($mod->groupingid) && has_capability('moodle/course:managegroups', context_course::instance($mod->course))) { // Grouping label. $groupings = groups_get_all_groupings($mod->course); $assetmeta .= "<span class='snap-groupinglabel'>" . format_string($groupings[$mod->groupingid]->name) . "</span>"; // TBD - add a title to show this is the Grouping... } // Draft status - always output, shown via css of parent. $assetmeta .= "<span class='draft_info'>" . get_string('draft', 'theme_snap') . "</span>"; $availabilityinfo = $this->course_section_cm_availability($mod, $displayoptions); if ($availabilityinfo !== '') { $conditionalinfo = get_string('conditional', 'theme_snap'); $assetmeta .= "<span class='conditional_info'>{$conditionalinfo}</span>"; $assetmeta .= "<div class='availabilityinfo'>{$availabilityinfo}</div>"; } $assetmeta .= "</div>"; // Close asset-meta. $contentpart = $this->course_section_cm_text($mod, $displayoptions); // Build output. $output .= $assetlink . $assetmeta . $contentpart; if (!empty($cmname)) { // Module can put text after the link (e.g. forum unread). $output .= $mod->afterlink; } $output .= "</div>"; // Close activity instance. // Build up edit icons. $modicons = ''; if ($this->page->user_is_editing()) { $editactions = $this->course_get_cm_edit_actions($mod, $sectionreturn); $modicons .= $this->course_section_cm_edit_actions($editactions, $mod, $displayoptions); $modicons .= $mod->afterediticons; $modicons .= course_get_cm_move($mod, $sectionreturn); } if (!$this->page->user_is_editing()) { $modicons .= $this->course_section_cm_completion($course, $completioninfo, $mod, $displayoptions); } // Add actions menu. if ($modicons) { $output .= "<div class='actions' role='region' aria-label='actions'>"; $output .= $modicons; $output .= "</div>"; } $output .= "</div>"; // Close clearfix. return $output; }