From fba4a63741908125a1df44c63796ee057c8b1182 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 30 Jun 2021 07:38:51 +0200 Subject: [PATCH 1/8] MOBILE-3320 assign: Fix timemodified error in team submissions --- src/addons/mod/assign/components/submission/submission.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/addons/mod/assign/components/submission/submission.ts b/src/addons/mod/assign/components/submission/submission.ts index d80430bbe..baa9981b8 100644 --- a/src/addons/mod/assign/components/submission/submission.ts +++ b/src/addons/mod/assign/components/submission/submission.ts @@ -671,8 +671,8 @@ export class AddonModAssignSubmissionComponent implements OnInit, OnDestroy, Can AddonModAssign.getSubmissionGradingStatusTranslationId(this.grade.gradingStatus); } - if (this.lastAttempt?.gradingstatus == 'graded' && !this.assign!.markingworkflow) { - if (this.feedback!.gradeddate < this.lastAttempt!.submission!.timemodified) { + if (this.lastAttempt?.gradingstatus == 'graded' && !this.assign!.markingworkflow && this.userSubmission) { + if (this.feedback!.gradeddate < this.userSubmission.timemodified) { this.lastAttempt.gradingstatus = AddonModAssignProvider.GRADED_FOLLOWUP_SUBMIT; // Get grading text and color. From b36051d5d0d62d471f820775a0db790eeab06f32 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 30 Jun 2021 07:39:50 +0200 Subject: [PATCH 2/8] MOBILE-3320 assign: Fix Moodle database error when grading --- src/addons/mod/assign/services/assign.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/addons/mod/assign/services/assign.ts b/src/addons/mod/assign/services/assign.ts index a6e573451..8ebc66911 100644 --- a/src/addons/mod/assign/services/assign.ts +++ b/src/addons/mod/assign/services/assign.ts @@ -1377,6 +1377,8 @@ export class AddonModAssignProvider { // The WebService returned warnings, reject. throw new CoreWSError(warnings[0]); } + + return; } // WS not available, fallback to save_grade. From a3b35a961996747e13286e9c10b8bacb3e723f21 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 30 Jun 2021 08:12:19 +0200 Subject: [PATCH 3/8] MOBILE-3320 core: Always pass initial value to reduce function --- .../assign/pages/submission-list/submission-list.page.ts | 6 +++++- src/addons/mod/lesson/services/lesson-offline.ts | 5 ++++- src/core/features/course/components/format/format.ts | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/addons/mod/assign/pages/submission-list/submission-list.page.ts b/src/addons/mod/assign/pages/submission-list/submission-list.page.ts index 5cfd6de5b..911bbbba0 100644 --- a/src/addons/mod/assign/pages/submission-list/submission-list.page.ts +++ b/src/addons/mod/assign/pages/submission-list/submission-list.page.ts @@ -29,6 +29,7 @@ import { AddonModAssignSubmission, AddonModAssignProvider, AddonModAssign, + AddonModAssignGrade, } from '../../services/assign'; import { AddonModAssignHelper, AddonModAssignSubmissionFormatted } from '../../services/assign-helper'; import { AddonModAssignOffline } from '../../services/assign-offline'; @@ -252,7 +253,10 @@ export class AddonModAssignSubmissionListPage implements AfterViewInit, OnDestro // Get the last grade of the submission. const grade = grades .filter((grade) => grade.userid == submission.userid) - .reduce((a, b) => (a.timemodified > b.timemodified ? a : b)); + .reduce( + (a, b) => (a && a.timemodified > b.timemodified ? a : b), + undefined, + ); if (grade && grade.timemodified < submission.timemodified) { submission.gradingstatus = AddonModAssignProvider.GRADED_FOLLOWUP_SUBMIT; diff --git a/src/addons/mod/lesson/services/lesson-offline.ts b/src/addons/mod/lesson/services/lesson-offline.ts index 4a4297372..626ed383b 100644 --- a/src/addons/mod/lesson/services/lesson-offline.ts +++ b/src/addons/mod/lesson/services/lesson-offline.ts @@ -190,7 +190,10 @@ export class AddonModLessonOfflineProvider { const attempts = await this.getRetakeAttemptsForPage(lessonId, retake, retakeData.lastquestionpage, siteId); // Return the attempt with highest timemodified. - return attempts.reduce((a, b) => a.timemodified > b.timemodified ? a : b); + return attempts.reduce( + (a, b) => a && a.timemodified > b.timemodified ? a : b, + undefined, + ); } catch { // Error, return undefined. } diff --git a/src/core/features/course/components/format/format.ts b/src/core/features/course/components/format/format.ts index e03ca79a2..a76e10358 100644 --- a/src/core/features/course/components/format/format.ts +++ b/src/core/features/course/components/format/format.ts @@ -632,7 +632,7 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy { const completionModules = ( []) .concat(...this.sections!.map((section) => section.modules)) .map((module) => module.completion && module.completion > 0 ? 1 : module.completion) - .reduce((accumulator, currentValue) => (accumulator || 0) + (currentValue || 0)); + .reduce((accumulator, currentValue) => (accumulator || 0) + (currentValue || 0), 0); const moduleProgressPercent = 100 / (completionModules || 1); // Use min/max here to avoid floating point rounding errors over/under-flowing the progress bar. From 8fd64f85c0b3d176e83616dae59ed4d00651e708 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 30 Jun 2021 10:25:32 +0200 Subject: [PATCH 4/8] MOBILE-3320 assign: Fix allowed groups data not prefetched --- src/addons/mod/assign/services/handlers/prefetch.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/addons/mod/assign/services/handlers/prefetch.ts b/src/addons/mod/assign/services/handlers/prefetch.ts index f924bb67b..2c909584e 100644 --- a/src/addons/mod/assign/services/handlers/prefetch.ts +++ b/src/addons/mod/assign/services/handlers/prefetch.ts @@ -458,6 +458,11 @@ export class AddonModAssignPrefetchHandlerService extends CoreCourseActivityPref userIds.push(userSubmission.userid); } } + + if (assign.teamsubmission && submission.lastattempt.submissiongroup) { + // Prefetch group info. + promises.push(CoreGroups.getActivityAllowedGroups(assign.cmid)); + } } // Prefetch grade items. From 6a3e8073cd57563f3788f2e803d62f0ff17695e7 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 30 Jun 2021 10:27:28 +0200 Subject: [PATCH 5/8] MOBILE-3320 assign: Fix errors when feedback is undefined --- .../submission/addon-mod-assign-submission.html | 10 ++++++---- .../mod/assign/components/submission/submission.ts | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html b/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html index 433112f61..2c6a40653 100644 --- a/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html +++ b/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html @@ -280,9 +280,11 @@ - - + + + + @@ -338,7 +340,7 @@ - +

{{ 'addon.mod_assign.gradedon' | translate }}

{{ feedback!.gradeddate * 1000 | coreFormatDate }}

diff --git a/src/addons/mod/assign/components/submission/submission.ts b/src/addons/mod/assign/components/submission/submission.ts index baa9981b8..a59db45c3 100644 --- a/src/addons/mod/assign/components/submission/submission.ts +++ b/src/addons/mod/assign/components/submission/submission.ts @@ -671,8 +671,8 @@ export class AddonModAssignSubmissionComponent implements OnInit, OnDestroy, Can AddonModAssign.getSubmissionGradingStatusTranslationId(this.grade.gradingStatus); } - if (this.lastAttempt?.gradingstatus == 'graded' && !this.assign!.markingworkflow && this.userSubmission) { - if (this.feedback!.gradeddate < this.userSubmission.timemodified) { + if (this.lastAttempt?.gradingstatus == 'graded' && !this.assign!.markingworkflow && this.userSubmission && feedback) { + if (feedback.gradeddate < this.userSubmission.timemodified) { this.lastAttempt.gradingstatus = AddonModAssignProvider.GRADED_FOLLOWUP_SUBMIT; // Get grading text and color. From f0a2ff7fe4d37e0399059ab0a1127aa47c93b351 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 30 Jun 2021 12:54:30 +0200 Subject: [PATCH 6/8] MOBILE-3320 workshop: Remove unneeded ion-list attributes --- src/addons/mod/workshop/pages/assessment/assessment.html | 2 +- .../mod/workshop/pages/edit-submission/edit-submission.html | 2 +- src/addons/mod/workshop/pages/submission/submission.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/addons/mod/workshop/pages/assessment/assessment.html b/src/addons/mod/workshop/pages/assessment/assessment.html index ae932276e..3415a603c 100644 --- a/src/addons/mod/workshop/pages/assessment/assessment.html +++ b/src/addons/mod/workshop/pages/assessment/assessment.html @@ -53,7 +53,7 @@ [access]="access" [assessmentId]="assessmentId" [userId]="profile && profile.id" [strategy]="strategy"> -
+

{{ 'addon.mod_workshop.assessmentsettings' | translate }}

diff --git a/src/addons/mod/workshop/pages/edit-submission/edit-submission.html b/src/addons/mod/workshop/pages/edit-submission/edit-submission.html index 65485c52c..e39705bf9 100644 --- a/src/addons/mod/workshop/pages/edit-submission/edit-submission.html +++ b/src/addons/mod/workshop/pages/edit-submission/edit-submission.html @@ -13,7 +13,7 @@ - + diff --git a/src/addons/mod/workshop/pages/submission/submission.html b/src/addons/mod/workshop/pages/submission/submission.html index b342f27b3..eed70a42b 100644 --- a/src/addons/mod/workshop/pages/submission/submission.html +++ b/src/addons/mod/workshop/pages/submission/submission.html @@ -97,7 +97,7 @@ - +

{{ 'addon.mod_workshop.feedbackauthor' | translate }}

From 92e054e3ddd308e9376fea6ce699c80e1f96f704 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 30 Jun 2021 13:31:30 +0200 Subject: [PATCH 7/8] MOBILE-3320 messages: Fix two conversations selected after clickin push --- .../group-conversations/group-conversations.page.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/addons/messages/pages/group-conversations/group-conversations.page.ts b/src/addons/messages/pages/group-conversations/group-conversations.page.ts index 0ce9915b6..f4d884458 100644 --- a/src/addons/messages/pages/group-conversations/group-conversations.page.ts +++ b/src/addons/messages/pages/group-conversations/group-conversations.page.ts @@ -270,10 +270,13 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { async ngOnInit(): Promise { this.route.queryParams.subscribe(async (params) => { // When a child page loads this callback is triggered too. - this.selectedConversationId = - CoreNavigator.getRouteNumberParam('conversationId', { params }) ?? this.selectedConversationId; - this.selectedUserId = - CoreNavigator.getRouteNumberParam('userId', { params }) ?? this.selectedUserId; + const conversationId =CoreNavigator.getRouteNumberParam('conversationId', { params }); + const userId = CoreNavigator.getRouteNumberParam('userId', { params }); + if (conversationId || userId) { + // Update the selected ones. + this.selectedConversationId = conversationId; + this.selectedUserId = userId; + } }); await this.fetchData(); From 00ca38f8b6f694bf0ac1eb5c4e2326f68613bbf0 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 30 Jun 2021 15:18:02 +0200 Subject: [PATCH 8/8] MOBILE-3320 core: Fix redirect not working with logged out sites --- .../features/login/services/login-helper.ts | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/src/core/features/login/services/login-helper.ts b/src/core/features/login/services/login-helper.ts index 955ac5457..6f0d6ba67 100644 --- a/src/core/features/login/services/login-helper.ts +++ b/src/core/features/login/services/login-helper.ts @@ -52,9 +52,8 @@ export class CoreLoginHelperProvider { static readonly FAQ_QRCODE_IMAGE_HTML = ''; protected logger: CoreLogger; - protected isSSOConfirmShown = false; + protected sessionExpiredCheckingSite: Record = {}; protected isOpenEditAlertShown = false; - protected isOpeningReconnect = false; protected waitingForBrowser = false; constructor() { @@ -885,6 +884,12 @@ export class CoreLoginHelperProvider { return; // Site that triggered the event is not current site. } + if (this.sessionExpiredCheckingSite[siteId || '']) { + return; // Operation pending. + } + + this.sessionExpiredCheckingSite[siteId || ''] = true; + try { // Check authentication method. const result = await CoreSites.checkSite(siteUrl); @@ -895,9 +900,7 @@ export class CoreLoginHelperProvider { if (this.isSSOLoginNeeded(result.code)) { // SSO. User needs to authenticate in a browser. Check if we need to display a message. - if (!CoreApp.isSSOAuthenticationOngoing() && !this.isSSOConfirmShown && !this.waitingForBrowser) { - this.isSSOConfirmShown = true; - + if (!CoreApp.isSSOAuthenticationOngoing() && !this.waitingForBrowser) { try { if (this.shouldShowSSOConfirm(result.code)) { await CoreDomUtils.showConfirm(Translate.instant('core.login.' + @@ -917,8 +920,6 @@ export class CoreLoginHelperProvider { } catch (error) { // User cancelled, logout him. CoreSites.logout(); - } finally { - this.isSSOConfirmShown = false; } } } else { @@ -932,10 +933,8 @@ export class CoreLoginHelperProvider { }); if (providerToUse) { - if (!CoreApp.isSSOAuthenticationOngoing() && !this.isSSOConfirmShown && !this.waitingForBrowser) { + if (!CoreApp.isSSOAuthenticationOngoing() && !this.waitingForBrowser) { // Open browser to perform the OAuth. - this.isSSOConfirmShown = true; - const confirmMessage = Translate.instant('core.login.' + (currentSite.isLoggedOut() ? 'loggedoutssodescription' : 'reconnectssodescription')); @@ -955,8 +954,6 @@ export class CoreLoginHelperProvider { } catch (error) { // User cancelled, logout him. CoreSites.logout(); - } finally { - this.isSSOConfirmShown = false; } } @@ -965,14 +962,12 @@ export class CoreLoginHelperProvider { } const info = currentSite.getInfo(); - if (typeof info != 'undefined' && typeof info.username != 'undefined' && !this.isOpeningReconnect) { + if (typeof info != 'undefined' && typeof info.username != 'undefined') { // If current page is already reconnect, stop. if (CoreNavigator.isCurrent('/login/reconnect')) { return; } - this.isOpeningReconnect = true; - await CoreUtils.ignoreErrors(CoreNavigator.navigate('/login/reconnect', { params: { siteId, @@ -981,8 +976,6 @@ export class CoreLoginHelperProvider { }, reset: true, })); - - this.isOpeningReconnect = false; } } } catch (error) { @@ -992,6 +985,8 @@ export class CoreLoginHelperProvider { CoreDomUtils.showErrorModalDefault(error, 'core.networkerrormsg', true); CoreSites.logout(); } + } finally { + this.sessionExpiredCheckingSite[siteId || ''] = false; } }