Skip to content

Commit f766152

Browse files
Merge remote-tracking branch 'upstream/master' into GH-7121
2 parents d1fe075 + 0b187ad commit f766152

File tree

179 files changed

+170098
-66916
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

179 files changed

+170098
-66916
lines changed

assets/css/scss/_reporting.scss

Lines changed: 572 additions & 0 deletions
Large diffs are not rendered by default.

assets/css/scss/index.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,6 @@
104104
@include meta.load-css('chat');
105105
@include meta.load-css('blog');
106106
@include meta.load-css('course_maintenance');
107+
@include meta.load-css('reporting');
107108

108109
@include meta.load-css("libs/mediaelementjs/styles");

assets/locales/en.json

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,5 +1198,23 @@
11981198
"Admin Incomplete Courses": "Admin Incomplete Courses",
11991199
"Admin Restart Courses": "Admin Restart Courses",
12001200
"Admin Dashboard": "Admin Dashboard",
1201-
"New messages": "New messages"
1202-
}
1201+
"New messages": "New messages",
1202+
"Authentication source": "Authentication source",
1203+
"Assign authentication sources to users": "Assign authentication sources to users",
1204+
"Back to user assignment page": "Back to user assignment page",
1205+
"Authentication sources assigned successfully": "Authentication sources assigned successfully",
1206+
"Tip: choose “— Just upload —” to store without sending to anyone.": "Tip: choose “— Just upload —” to store without sending to anyone.",
1207+
"Please select at least one recipient (“— Just upload —” or any user)": "Please select at least one recipient (“— Just upload —” or any user)",
1208+
"Sharing": "Sharing",
1209+
"Overwrite previous versions of same document?": "Overwrite previous versions of same document?",
1210+
"Selected files": "Selected files",
1211+
"Hide password": "Hide password",
1212+
"Show password": "Show password",
1213+
"Upload SVG logo for e-mails": "Upload SVG logo for e-mails",
1214+
"You must move or remove all learning paths from this category before deleting it.": "You must move or remove all learning paths from this category before deleting it.",
1215+
"Clear filters": "Clear filters",
1216+
"Attendances (tablet)": "Attendances (tablet)",
1217+
"Exit tablet mode": "Exit tablet mode",
1218+
"Attended": "Attended",
1219+
"No members found.": "No members found."
1220+
}

assets/vue/components/admin/BrandingSection.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,11 @@
182182

183183
<section class="grid grid-cols-1 gap-3">
184184
<div>
185-
<label class="text-xs block mb-1">{{ t('Upload email SVG') }}</label>
185+
<label class="text-xs block mb-1">{{ t('Upload SVG logo for e-mails') }}</label>
186186
<input type="file" accept=".svg,image/svg+xml" @change="onPick($event, 'emailSvg')" />
187187
</div>
188188
<div>
189-
<label class="text-xs block mb-1">{{ t('Upload email PNG (~540 px width)') }}</label>
189+
<label class="text-xs block mb-1">{{ t('Upload PNG logo for e-mails (~540 px width)') }}</label>
190190
<input type="file" accept="image/png" @change="onPick($event, 'emailPng', { recommendW:540 })" />
191191
</div>
192192
</section>

assets/vue/components/basecomponents/BaseCalendar.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ const onCancelClick = () => {
178178
class="base-calendar-footer__button base-calendar-footer__button--primary"
179179
@click="onApplyClick"
180180
>
181-
{{ t("Ok") }}
181+
{{ t("OK") }}
182182
</button>
183183
</div>
184184
</template>

assets/vue/components/documents/ResourceFileLink.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,14 @@ export default {
2525
},
2626
computed: {
2727
getDataType() {
28-
if (this.resource.resourceNode.firstResourceFile.image) {
28+
const node = this.resource && this.resource.resourceNode
29+
const file = node && node.firstResourceFile
30+
31+
if (file && file.image) {
2932
return "image"
3033
}
31-
if (this.resource.resourceNode.firstResourceFile.video) {
34+
35+
if (file && file.video) {
3236
return "video"
3337
}
3438

assets/vue/components/documents/ResourceIcon.vue

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@
44
icon="folder-generic"
55
/>
66
<BaseIcon
7-
v-else-if="resourceData.resourceNode.firstResourceFile.image"
7+
v-else-if="isImage(resourceData)"
88
icon="file-image"
99
/>
1010
<BaseIcon
11-
v-else-if="resourceData.resourceNode.firstResourceFile.video"
11+
v-else-if="isVideo(resourceData)"
1212
icon="file-video"
1313
/>
1414
<BaseIcon
15-
v-else-if="resourceData.resourceNode.firstResourceFile.text"
15+
v-else-if="hasTextFlag"
1616
icon="file-text"
1717
/>
1818
<BaseIcon
19-
v-else-if="'application/pdf' === resourceData.resourceNode.firstResourceFile.mimeType"
19+
v-else-if="isPdfFile"
2020
icon="file-pdf"
2121
/>
2222
<BaseIcon
@@ -30,15 +30,33 @@
3030
</template>
3131

3232
<script setup>
33+
import { computed } from "vue"
3334
import BaseIcon from "../basecomponents/BaseIcon.vue"
3435
import { useFileUtils } from "../../composables/fileUtils"
3536
36-
const { isAudio } = useFileUtils()
37+
const { isImage, isVideo, isAudio } = useFileUtils()
3738
38-
defineProps({
39+
const props = defineProps({
3940
resourceData: {
4041
type: Object,
4142
required: true,
4243
},
4344
})
45+
46+
const hasTextFlag = computed(() => {
47+
const file = props.resourceData?.resourceNode?.firstResourceFile
48+
return !!file && !!file.text
49+
})
50+
51+
const isPdfFile = computed(() => {
52+
const file = props.resourceData?.resourceNode?.firstResourceFile
53+
54+
if (!file || !file.mimeType) {
55+
return false
56+
}
57+
58+
const mime = String(file.mimeType).split(";")[0].trim().toLowerCase()
59+
60+
return mime === "application/pdf"
61+
})
4462
</script>

assets/vue/components/lp/LpCategorySection.vue

Lines changed: 50 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script setup>
2-
import { computed, ref, watch, onMounted } from "vue"
2+
import { computed, onMounted, ref, watch } from "vue"
33
import { useRoute } from "vue-router"
44
import Draggable from "vuedraggable"
55
import LpCardItem from "./LpCardItem.vue"
@@ -20,6 +20,7 @@ const props = defineProps({
2020
ringDash: { type: Function, required: true },
2121
ringValue: { type: Function, required: true },
2222
buildDates: { type: Function, required: false },
23+
isSessionCategory: { type: Boolean, default: false },
2324
})
2425
const emit = defineEmits([
2526
"open",
@@ -117,22 +118,22 @@ const toggleOpen = () => {
117118
<section class="relative ml-2 rounded-2xl shadow-lg">
118119
<header class="relative bg-support-6 rounded-t-2xl flex items-center justify-between pl-0 pr-4 py-3">
119120
<span
120-
class="pointer-events-none absolute inset-y-0 -left-1.5 w-1.5 bg-support-5 rounded-l-2xl"
121121
aria-hidden
122+
class="pointer-events-none absolute inset-y-0 -left-1.5 w-1.5 bg-support-5 rounded-l-2xl"
122123
/>
123124
<div class="flex items-center gap-3">
124125
<template v-if="canEdit">
125126
<button
126-
class="w-8 h-8 grid place-content-center rounded-lg text-gray-50 hover:bg-gray-15 hover:text-gray-90"
127-
:title="t('Drag to reorder')"
128127
:aria-label="t('Drag to reorder')"
128+
:title="t('Drag to reorder')"
129+
class="w-8 h-8 grid place-content-center rounded-lg text-gray-50 hover:bg-gray-15 hover:text-gray-90"
129130
>
130131
<svg
131-
width="14"
132+
aria-hidden
133+
fill="currentColor"
132134
height="14"
133135
viewBox="0 0 14 14"
134-
fill="currentColor"
135-
aria-hidden
136+
width="14"
136137
>
137138
<circle
138139
cx="4"
@@ -169,12 +170,21 @@ const toggleOpen = () => {
169170
</template>
170171
<template v-else>
171172
<span
172-
class="inline-block w-8 h-8"
173173
aria-hidden
174+
class="inline-block w-8 h-8"
174175
></span>
175176
</template>
176177
177-
<h2 class="text-body-1 font-semibold text-gray-90">{{ displayTitle }}</h2>
178+
<h2 class="text-body-1 font-semibold text-gray-90">
179+
<span>{{ displayTitle }}</span>
180+
<!-- Display the star if it's a session category; remove the check on category.type -->
181+
<span
182+
v-if="isSessionCategory"
183+
class="ml-2 text-warning"
184+
title="Category created for a session"
185+
>★</span
186+
>
187+
</h2>
178188
</div>
179189
180190
<div class="flex items-center gap-2">
@@ -187,13 +197,13 @@ const toggleOpen = () => {
187197
>
188198
<template #button>
189199
<span
190-
class="list-none w-8 h-8 grid place-content-center rounded-lg border border-gray-25 hover:bg-gray-15 cursor-pointer"
191-
:title="t('Options')"
192200
:aria-label="t('Options')"
201+
:title="t('Options')"
202+
class="list-none w-8 h-8 grid place-content-center rounded-lg border border-gray-25 hover:bg-gray-15 cursor-pointer"
193203
>
194204
<i
195-
class="mdi mdi-dots-vertical text-lg"
196205
aria-hidden
206+
class="mdi mdi-dots-vertical text-lg"
197207
></i>
198208
</span>
199209
</template>
@@ -239,26 +249,26 @@ const toggleOpen = () => {
239249
240250
<button
241251
v-if="localList.length"
242-
:aria-expanded="isOpen ? 'true' : 'false'"
243252
:aria-controls="panelId"
244-
class="w-8 h-8 grid place-content-center rounded-lg border border-gray-25 hover:bg-gray-15 transition"
253+
:aria-expanded="isOpen ? 'true' : 'false'"
245254
:title="t('Expand') / t('Collapse')"
255+
class="w-8 h-8 grid place-content-center rounded-lg border border-gray-25 hover:bg-gray-15 transition"
246256
@click="toggleOpen"
247257
>
248258
<svg
249-
width="18"
250-
height="18"
251-
viewBox="0 0 24 24"
259+
:class="isOpen ? 'rotate-180' : ''"
260+
class="transition-transform duration-200"
252261
fill="none"
262+
height="18"
253263
stroke="currentColor"
254-
class="transition-transform duration-200"
255-
:class="isOpen ? 'rotate-180' : ''"
264+
viewBox="0 0 24 24"
265+
width="18"
256266
>
257267
<path
258268
d="M6 9l6 6 6-6"
259-
stroke-width="2"
260269
stroke-linecap="round"
261270
stroke-linejoin="round"
271+
stroke-width="2"
262272
/>
263273
</svg>
264274
</button>
@@ -272,41 +282,41 @@ const toggleOpen = () => {
272282
>
273283
<Draggable
274284
v-model="localList"
275-
item-key="iid"
276-
:disabled="!canEdit"
277-
handle=".drag-handle2"
278285
:animation="180"
279-
tag="div"
280-
class="grid gap-4 lg:grid-cols-2 xl:grid-cols-3 mt-5"
281-
ghost-class="ghosting"
286+
:disabled="!canEdit"
287+
:empty-insert-threshold="10"
288+
:fallback-on-body="true"
289+
:force-fallback="true"
290+
:prevent-on-filter="true"
282291
chosen-class="chosen"
292+
class="grid gap-4 lg:grid-cols-2 xl:grid-cols-3 mt-5"
283293
drag-class="dragging"
284-
:prevent-on-filter="true"
285-
:force-fallback="true"
286-
:fallback-on-body="true"
287-
:empty-insert-threshold="10"
288-
@start="dragging = true"
294+
ghost-class="ghosting"
295+
handle=".drag-handle"
296+
item-key="iid"
297+
tag="div"
289298
@end="onEndCat"
299+
@start="dragging = true"
290300
>
291301
<template #item="{ element }">
292302
<LpCardItem
293-
:lp="element"
303+
:buildDates="buildDates"
304+
:canAutoLaunch="canAutoLaunch"
294305
:canEdit="canEdit"
306+
:canExportPdf="canExportPdf"
307+
:canExportScorm="canExportScorm"
308+
:lp="element"
295309
:ringDash="ringDash"
296310
:ringValue="ringValue"
297-
:canExportScorm="canExportScorm"
298-
:canExportPdf="canExportPdf"
299-
:canAutoLaunch="canAutoLaunch"
300-
:buildDates="buildDates"
301-
@toggle-auto-launch="$emit('toggle-auto-launch', element)"
302-
@open="$emit('open', element)"
311+
@build="$emit('build', element)"
312+
@delete="$emit('delete', element)"
303313
@edit="$emit('edit', element)"
314+
@open="$emit('open', element)"
304315
@report="$emit('report', element)"
305316
@settings="$emit('settings', element)"
306-
@build="$emit('build', element)"
317+
@toggle-auto-launch="$emit('toggle-auto-launch', element)"
307318
@toggle-visible="$emit('toggle-visible', element)"
308319
@toggle-publish="$emit('toggle-publish', element)"
309-
@delete="$emit('delete', element)"
310320
@export-scorm="$emit('export-scorm', element)"
311321
@export-pdf="$emit('export-pdf', element)"
312322
/>

0 commit comments

Comments
 (0)