MDL-73774 timeline: Prevent ID duplication

This commit is contained in:
Huong Nguyen 2022-04-21 15:56:57 +07:00
parent 5500d143f4
commit e29cbbc715
4 changed files with 17 additions and 6 deletions

View file

@ -59,6 +59,12 @@ class main implements renderable, templatable {
*/ */
public $limit; public $limit;
/** @var int Number of timeline instances displayed. */
protected static $timelineinstances = 0;
/** @var int This timeline instance's ID. */
protected $timelineinstanceid = 0;
/** /**
* main constructor. * main constructor.
* *
@ -70,6 +76,10 @@ class main implements renderable, templatable {
$this->order = $order ? $order : BLOCK_TIMELINE_SORT_BY_DATES; $this->order = $order ? $order : BLOCK_TIMELINE_SORT_BY_DATES;
$this->filter = $filter ? $filter : BLOCK_TIMELINE_FILTER_BY_7_DAYS; $this->filter = $filter ? $filter : BLOCK_TIMELINE_FILTER_BY_7_DAYS;
$this->limit = $limit ? $limit : BLOCK_TIMELINE_ACTIVITIES_LIMIT_DEFAULT; $this->limit = $limit ? $limit : BLOCK_TIMELINE_ACTIVITIES_LIMIT_DEFAULT;
// Increment the timeline instances count on initialisation.
self::$timelineinstances++;
// Assign this instance an ID based on the latest timeline instances count.
$this->timelineinstanceid = self::$timelineinstances;
} }
/** /**
@ -160,6 +170,7 @@ class main implements renderable, templatable {
$filters = $this->get_filters_as_booleans(); $filters = $this->get_filters_as_booleans();
$offsets = $this->get_filter_offsets(); $offsets = $this->get_filter_offsets();
$contextvariables = [ $contextvariables = [
'timelineinstanceid' => $this->timelineinstanceid,
'midnight' => usergetmidnight(time()), 'midnight' => usergetmidnight(time()),
'coursepages' => [$formattedcourses], 'coursepages' => [$formattedcourses],
'urls' => [ 'urls' => [

View file

@ -23,7 +23,7 @@
{} {}
}} }}
<div id="block-timeline-{{uniqid}}" class="block-timeline" data-region="timeline"> <div id="block-timeline-{{uniqid}}-{{timelineinstanceid}}" class="block-timeline" data-region="timeline">
<div class="p-0 px-2"> <div class="p-0 px-2">
<div class="row no-gutters"> <div class="row no-gutters">
<div class="mr-2 mb-1"> <div class="mr-2 mb-1">
@ -52,7 +52,7 @@ function(
$, $,
Main Main
) { ) {
var root = $('#block-timeline-{{uniqid}}'); var root = $('#block-timeline-{{uniqid}}-{{timelineinstanceid}}');
Main.init(root); Main.init(root);
}); });
{{/js}} {{/js}}

View file

@ -34,7 +34,7 @@
<div id="menusortby" role="menu" class="dropdown-menu dropdown-menu-right list-group hidden" data-show-active-item data-skip-active-class="true"> <div id="menusortby" role="menu" class="dropdown-menu dropdown-menu-right list-group hidden" data-show-active-item data-skip-active-class="true">
<a <a
class="dropdown-item" class="dropdown-item"
href="#view_dates_{{uniqid}}" href="#view_dates_{{uniqid}}-{{timelineinstanceid}}"
data-toggle="tab" data-toggle="tab"
data-filtername="sortbydates" data-filtername="sortbydates"
{{#sorttimelinedates}}aria-current="true"{{/sorttimelinedates}} {{#sorttimelinedates}}aria-current="true"{{/sorttimelinedates}}
@ -45,7 +45,7 @@
</a> </a>
<a <a
class="dropdown-item" class="dropdown-item"
href="#view_courses_{{uniqid}}" href="#view_courses_{{uniqid}}-{{timelineinstanceid}}"
data-toggle="tab" data-toggle="tab"
data-filtername="sortbycourses" data-filtername="sortbycourses"
{{#sorttimelinecourses}}aria-current="true"{{/sorttimelinecourses}} {{#sorttimelinecourses}}aria-current="true"{{/sorttimelinecourses}}

View file

@ -50,7 +50,7 @@
}} }}
<div data-region="timeline-view"> <div data-region="timeline-view">
<div class="tab-content"> <div class="tab-content">
<div class="tab-pane {{#sorttimelinedates}}active show{{/sorttimelinedates}} fade" data-limit="{{limit}}" data-region="view-dates" id="view_dates_{{uniqid}}"> <div class="tab-pane {{#sorttimelinedates}}active show{{/sorttimelinedates}} fade" data-limit="{{limit}}" data-region="view-dates" id="view_dates_{{uniqid}}-{{timelineinstanceid}}">
{{> block_timeline/view-dates }} {{> block_timeline/view-dates }}
</div> </div>
<div <div
@ -63,7 +63,7 @@
data-days-offset="{{daysoffset}}" data-days-offset="{{daysoffset}}"
data-no-events-url="{{urls.noevents}}" data-no-events-url="{{urls.noevents}}"
{{#overdue}}data-filter-overdue="{{overdue}}"{{/overdue}} {{#overdue}}data-filter-overdue="{{overdue}}"{{/overdue}}
id="view_courses_{{uniqid}}" id="view_courses_{{uniqid}}-{{timelineinstanceid}}"
> >
{{> block_timeline/view-courses }} {{> block_timeline/view-courses }}
</div> </div>