From efa25b857cc0a2c7bc70a7ec31e614a2a2f25a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 17 Dec 2019 13:26:34 +0100 Subject: [PATCH 1/7] MOBILE-3213 courses: Check download courses on all related blocks --- .../addon-block-recentlyaccessedcourses.html | 4 ++-- .../recentlyaccessedcourses.ts | 15 +++++++++++++++ .../addon-block-starredcourses.html | 4 ++-- .../components/starredcourses/starredcourses.ts | 15 +++++++++++++++ 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/addon-block-recentlyaccessedcourses.html b/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/addon-block-recentlyaccessedcourses.html index 7aadba0cb..aede44831 100644 --- a/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/addon-block-recentlyaccessedcourses.html +++ b/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/addon-block-recentlyaccessedcourses.html @@ -1,6 +1,6 @@

{{ 'addon.block_recentlyaccessedcourses.pluginname' | translate }}

-
+
@@ -13,7 +13,7 @@
- +
diff --git a/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/recentlyaccessedcourses.ts b/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/recentlyaccessedcourses.ts index aa7dbdd02..4b61bfeb1 100644 --- a/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/recentlyaccessedcourses.ts +++ b/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/recentlyaccessedcourses.ts @@ -37,10 +37,13 @@ export class AddonBlockRecentlyAccessedCoursesComponent extends CoreBlockBaseCom icon: '', badge: '' }; + downloadCourseEnabled: boolean; + downloadCoursesEnabled: boolean; protected prefetchIconsInitialized = false; protected isDestroyed; protected coursesObserver; + protected updateSiteObserver; protected courseIds = []; protected fetchContentDefaultError = 'Error getting recent courses data.'; @@ -58,6 +61,17 @@ export class AddonBlockRecentlyAccessedCoursesComponent extends CoreBlockBaseCom */ ngOnInit(): void { + // Refresh the enabled flags if enabled. + this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite(); + this.downloadCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite(); + + // Refresh the enabled flags if site is updated. + this.updateSiteObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => { + this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite(); + this.downloadCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite(); + + }, this.sitesProvider.getCurrentSiteId()); + this.coursesObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_MY_COURSES_UPDATED, () => { this.refreshContent(); }, this.sitesProvider.getCurrentSiteId()); @@ -154,5 +168,6 @@ export class AddonBlockRecentlyAccessedCoursesComponent extends CoreBlockBaseCom ngOnDestroy(): void { this.isDestroyed = true; this.coursesObserver && this.coursesObserver.off(); + this.updateSiteObserver && this.updateSiteObserver.off(); } } diff --git a/src/addon/block/starredcourses/components/starredcourses/addon-block-starredcourses.html b/src/addon/block/starredcourses/components/starredcourses/addon-block-starredcourses.html index a6b1d49b7..af38133a9 100644 --- a/src/addon/block/starredcourses/components/starredcourses/addon-block-starredcourses.html +++ b/src/addon/block/starredcourses/components/starredcourses/addon-block-starredcourses.html @@ -1,6 +1,6 @@

{{ 'addon.block_starredcourses.pluginname' | translate }}

-
+
@@ -13,7 +13,7 @@
- +
diff --git a/src/addon/block/starredcourses/components/starredcourses/starredcourses.ts b/src/addon/block/starredcourses/components/starredcourses/starredcourses.ts index e5cabc99c..8acddb2a2 100644 --- a/src/addon/block/starredcourses/components/starredcourses/starredcourses.ts +++ b/src/addon/block/starredcourses/components/starredcourses/starredcourses.ts @@ -37,10 +37,13 @@ export class AddonBlockStarredCoursesComponent extends CoreBlockBaseComponent im icon: '', badge: '' }; + downloadCourseEnabled: boolean; + downloadCoursesEnabled: boolean; protected prefetchIconsInitialized = false; protected isDestroyed; protected coursesObserver; + protected updateSiteObserver; protected courseIds = []; protected fetchContentDefaultError = 'Error getting starred courses data.'; @@ -58,6 +61,17 @@ export class AddonBlockStarredCoursesComponent extends CoreBlockBaseComponent im */ ngOnInit(): void { + // Refresh the enabled flags if enabled. + this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite(); + this.downloadCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite(); + + // Refresh the enabled flags if site is updated. + this.updateSiteObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => { + this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite(); + this.downloadCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite(); + + }, this.sitesProvider.getCurrentSiteId()); + this.coursesObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_MY_COURSES_UPDATED, () => { this.refreshContent(); }, this.sitesProvider.getCurrentSiteId()); @@ -154,5 +168,6 @@ export class AddonBlockStarredCoursesComponent extends CoreBlockBaseComponent im ngOnDestroy(): void { this.isDestroyed = true; this.coursesObserver && this.coursesObserver.off(); + this.updateSiteObserver && this.updateSiteObserver.off(); } } From 81d45266ca74de898545fa0b5f04f746c9a55a0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 17 Dec 2019 16:39:46 +0100 Subject: [PATCH 2/7] MOBILE-3213 styles: Fix styles on timeline block --- .../timeline/components/events/events.scss | 29 +++++++++++++++++++ src/theme/dark.scss | 1 + 2 files changed, 30 insertions(+) diff --git a/src/addon/block/timeline/components/events/events.scss b/src/addon/block/timeline/components/events/events.scss index 76da48072..e284f0d24 100644 --- a/src/addon/block/timeline/components/events/events.scss +++ b/src/addon/block/timeline/components/events/events.scss @@ -14,3 +14,32 @@ ion-app.app-root addon-block-timeline-events { pointer-events: auto; } } + +ion-app.app-root core-courses-course-progress addon-block-timeline-events { + @include media-breakpoint-up(md) { + .hidden-tablet { + display: block !important; + opacity: 1 !important; + &.button[disabled] { + opacity: .4 !important; + } + } + .hidden-phone { + display: none !important; + opacity: 0 !important; + } + } + @include media-breakpoint-up(lg) { + .hidden-tablet { + display: none !important; + opacity: 0 !important; + } + .hidden-phone { + display: block !important; + opacity: 1 !important; + &.button[disabled] { + opacity: .4 !important; + } + } + } +} diff --git a/src/theme/dark.scss b/src/theme/dark.scss index 0e034de87..01c373d06 100644 --- a/src/theme/dark.scss +++ b/src/theme/dark.scss @@ -25,6 +25,7 @@ ion-app.app-root .ion-page { color: $core-dark-link-color; } + .core-tabs-bar, .core-tabs-bar *, .core-tabs-bar .tab-slide, .ion-page, From c255feeeefa3077439721535a32f8130c12efd07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 17 Dec 2019 17:07:40 +0100 Subject: [PATCH 3/7] MOBILE-3213 assign: Discard grade drafts after successful sync --- src/addon/mod/assign/providers/assign-sync.ts | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/addon/mod/assign/providers/assign-sync.ts b/src/addon/mod/assign/providers/assign-sync.ts index 41b43f74e..8b5bcfbb1 100644 --- a/src/addon/mod/assign/providers/assign-sync.ts +++ b/src/addon/mod/assign/providers/assign-sync.ts @@ -29,6 +29,7 @@ import { CoreSyncBaseProvider } from '@classes/base-sync'; import { AddonModAssignProvider, AddonModAssignAssign } from './assign'; import { AddonModAssignOfflineProvider } from './assign-offline'; import { AddonModAssignSubmissionDelegate } from './submission-delegate'; +import { AddonModAssignFeedbackDelegate } from './feedback-delegate'; /** * Data returned by an assign sync. @@ -55,13 +56,22 @@ export class AddonModAssignSyncProvider extends CoreSyncBaseProvider { protected componentTranslate: string; - constructor(loggerProvider: CoreLoggerProvider, sitesProvider: CoreSitesProvider, appProvider: CoreAppProvider, - syncProvider: CoreSyncProvider, textUtils: CoreTextUtilsProvider, translate: TranslateService, - private courseProvider: CoreCourseProvider, private eventsProvider: CoreEventsProvider, - private assignProvider: AddonModAssignProvider, private assignOfflineProvider: AddonModAssignOfflineProvider, - private utils: CoreUtilsProvider, private submissionDelegate: AddonModAssignSubmissionDelegate, - private gradesHelper: CoreGradesHelperProvider, timeUtils: CoreTimeUtilsProvider, - private logHelper: CoreCourseLogHelperProvider) { + constructor(loggerProvider: CoreLoggerProvider, + sitesProvider: CoreSitesProvider, + appProvider: CoreAppProvider, + syncProvider: CoreSyncProvider, + textUtils: CoreTextUtilsProvider, + translate: TranslateService, + timeUtils: CoreTimeUtilsProvider, + protected courseProvider: CoreCourseProvider, + protected eventsProvider: CoreEventsProvider, + protected assignProvider: AddonModAssignProvider, + protected assignOfflineProvider: AddonModAssignOfflineProvider, + protected utils: CoreUtilsProvider, + protected submissionDelegate: AddonModAssignSubmissionDelegate, + protected feedbackDelegate: AddonModAssignFeedbackDelegate, + protected gradesHelper: CoreGradesHelperProvider, + protected logHelper: CoreCourseLogHelperProvider) { super('AddonModAssignSyncProvider', loggerProvider, sitesProvider, appProvider, syncProvider, textUtils, translate, timeUtils); @@ -403,9 +413,19 @@ export class AddonModAssignSyncProvider extends CoreSyncBaseProvider { return this.assignProvider.submitGradingFormOnline(assign.id, userId, offlineData.grade, offlineData.attemptnumber, offlineData.addattempt, offlineData.workflowstate, offlineData.applytoall, offlineData.outcomes, offlineData.plugindata, siteId).then(() => { + // Grades sent. + // Discard grades drafts. + const promises = []; + if (status.feedback && status.feedback.plugins) { + status.feedback.plugins.forEach((plugin) => { + promises.push(this.feedbackDelegate.discardPluginFeedbackData(assign.id, userId, plugin, siteId)); + }); + } - // Grades sent, update cached data. No need to block the user for this. - this.assignProvider.getSubmissionStatus(assign.id, userId, undefined, false, true, true, siteId); + // Update cached data. + promises.push(this.assignProvider.getSubmissionStatus(assign.id, userId, undefined, false, true, true, siteId)); + + return Promise.all(promises); }).catch((error) => { if (error && this.utils.isWebServiceError(error)) { // The WebService has thrown an error, this means it cannot be submitted. Discard the offline data. From a0cd139d9cadfabff1d5ff2c5e6e61c46e3dfc2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 18 Dec 2019 10:34:39 +0100 Subject: [PATCH 4/7] MOBILE-3213 workshop: Fix static definition --- src/addon/mod/workshop/providers/helper.ts | 2 +- src/addon/mod/workshop/providers/workshop.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/addon/mod/workshop/providers/helper.ts b/src/addon/mod/workshop/providers/helper.ts index 66ae24140..ad82e99e9 100644 --- a/src/addon/mod/workshop/providers/helper.ts +++ b/src/addon/mod/workshop/providers/helper.ts @@ -68,7 +68,7 @@ export class AddonModWorkshopHelperProvider { const task = this.getTask(tasks, taskCode); if (task) { - return task.completed; + return !!task.completed; } // Task not found, assume true. diff --git a/src/addon/mod/workshop/providers/workshop.ts b/src/addon/mod/workshop/providers/workshop.ts index 866b321a8..ec8fc292e 100644 --- a/src/addon/mod/workshop/providers/workshop.ts +++ b/src/addon/mod/workshop/providers/workshop.ts @@ -33,9 +33,9 @@ export class AddonModWorkshopProvider { static PHASE_ASSESSMENT = 30; static PHASE_EVALUATION = 40; static PHASE_CLOSED = 50; - static EXAMPLES_VOLUNTARY: 0; - static EXAMPLES_BEFORE_SUBMISSION: 1; - static EXAMPLES_BEFORE_ASSESSMENT: 2; + static EXAMPLES_VOLUNTARY = 0; + static EXAMPLES_BEFORE_SUBMISSION = 1; + static EXAMPLES_BEFORE_ASSESSMENT = 2; static SUBMISSION_TYPE_DISABLED = 0; static SUBMISSION_TYPE_AVAILABLE = 1; static SUBMISSION_TYPE_REQUIRED = 2; From bd4db3ff014507bede7100095364a0d16495fe86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 18 Dec 2019 11:32:38 +0100 Subject: [PATCH 5/7] MOBILE-3213 database: Do not allow to set widths or heights --- src/addon/mod/data/components/index/index.ts | 4 +++- src/addon/mod/data/data.scss | 13 +++++++++++++ src/addon/mod/data/providers/helper.ts | 6 ++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/addon/mod/data/components/index/index.ts b/src/addon/mod/data/components/index/index.ts index af1ab14b6..ebd311e52 100644 --- a/src/addon/mod/data/components/index/index.ts +++ b/src/addon/mod/data/components/index/index.ts @@ -286,6 +286,7 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp let entriesHTML = this.dataHelper.getTemplate(this.data, 'listtemplateheader', this.fieldsArray); + console.error(entriesHTML); // Get first entry from the whole list. if (!this.search.searching || !this.firstEntry) { this.firstEntry = this.entries[0].id; @@ -305,7 +306,8 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp }); entriesHTML += this.dataHelper.getTemplate(this.data, 'listtemplatefooter', this.fieldsArray); - this.entriesRendered = entriesHTML; + this.entriesRendered = this.domUtils.fixHtml(entriesHTML); + console.error(entriesHTML); // Pass the input data to the component. this.jsData = { diff --git a/src/addon/mod/data/data.scss b/src/addon/mod/data/data.scss index 1bce48a43..f99ba5150 100644 --- a/src/addon/mod/data/data.scss +++ b/src/addon/mod/data/data.scss @@ -3,6 +3,7 @@ white-space: normal; word-break: break-word; padding: $content-padding; + @include safe-area-padding-horizontal($content-padding !important, $content-padding !important); background-color: $white; border-top-width: 1px; border-bottom-width: 1px; @@ -31,6 +32,18 @@ @extend .col; min-height: auto; } + + // Do not let block elements to define widths or heights. + address, article, aside, blockquote, canvas, dd, div, dl, dt, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, + header, hr, li, main, nav, noscript, ol, p, pre, section, table, tfoot, ul, video { + width: auto !important; + height: auto !important; + min-width: auto !important; + min-height: auto !important; + // Avoid having one entry over another. + max-height: none !important; + + } } page-addon-mod-data-search, diff --git a/src/addon/mod/data/providers/helper.ts b/src/addon/mod/data/providers/helper.ts index f59e62e5d..2d48ef390 100644 --- a/src/addon/mod/data/providers/helper.ts +++ b/src/addon/mod/data/providers/helper.ts @@ -599,8 +599,10 @@ export class AddonModDataHelperProvider { getTemplate(data: any, type: string, fields: any[]): string { let template = data[type] || this.getDefaultTemplate(type, fields); - // Try to fix syntax errors so the template can be parsed by Angular. - template = this.domUtils.fixHtml(template); + if (type != 'listtemplateheader' && type != 'listtemplatefooter') { + // Try to fix syntax errors so the template can be parsed by Angular. + template = this.domUtils.fixHtml(template); + } // Add core-link directive to links. template = template.replace(/]*href="[^>]*)>/ig, (match, attributes) => { From bed497d54d1cee15ec3b5451d163e1593ad855bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 18 Dec 2019 11:46:46 +0100 Subject: [PATCH 6/7] MOBILE-3213 style: Add position fallback --- src/theme/variables.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/theme/variables.scss b/src/theme/variables.scss index ebab93935..8688e1339 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -474,6 +474,7 @@ $core-dd-question-colors: $white, $blue-light, #DCDCDC, #D8BFD8, #87CEFA, #DAA52 } @mixin safe-area-position($top: null, $end: null, $bottom: null, $start: null) { + @include position-horizontal($start, $end); @include safe-position-horizontal($start, $end); top: $top; bottom: $bottom; From 7a1b49cae12c3ef62e19140e41cb21667dd26756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 18 Dec 2019 12:36:57 +0100 Subject: [PATCH 7/7] MOBILE-3213 workshop: Disable refreshers when inform --- .../mod/workshop/components/index/index.ts | 1 + .../workshop/pages/assessment/assessment.html | 2 +- .../edit-submission/edit-submission.html | 3 --- .../pages/edit-submission/edit-submission.ts | 20 ------------------- .../workshop/pages/submission/submission.html | 2 +- .../workshop/pages/submission/submission.ts | 4 ++++ 6 files changed, 7 insertions(+), 25 deletions(-) diff --git a/src/addon/mod/workshop/components/index/index.ts b/src/addon/mod/workshop/components/index/index.ts index ebef564d2..d14b2b04e 100644 --- a/src/addon/mod/workshop/components/index/index.ts +++ b/src/addon/mod/workshop/components/index/index.ts @@ -154,6 +154,7 @@ export class AddonModWorkshopIndexComponent extends CoreCourseModuleMainActivity promises.push(this.workshopProvider.invalidateReviewerAssesmentsData(this.workshop.id)); } promises.push(this.workshopProvider.invalidateGradesData(this.workshop.id)); + promises.push(this.workshopProvider.invalidateWorkshopWSData(this.workshop.id)); } return Promise.all(promises); diff --git a/src/addon/mod/workshop/pages/assessment/assessment.html b/src/addon/mod/workshop/pages/assessment/assessment.html index 96b65ea32..76229b26a 100644 --- a/src/addon/mod/workshop/pages/assessment/assessment.html +++ b/src/addon/mod/workshop/pages/assessment/assessment.html @@ -9,7 +9,7 @@ - + diff --git a/src/addon/mod/workshop/pages/edit-submission/edit-submission.html b/src/addon/mod/workshop/pages/edit-submission/edit-submission.html index c1530b1f2..71b1e535d 100644 --- a/src/addon/mod/workshop/pages/edit-submission/edit-submission.html +++ b/src/addon/mod/workshop/pages/edit-submission/edit-submission.html @@ -9,9 +9,6 @@ - - -
diff --git a/src/addon/mod/workshop/pages/edit-submission/edit-submission.ts b/src/addon/mod/workshop/pages/edit-submission/edit-submission.ts index 10864c6ee..816a29b46 100644 --- a/src/addon/mod/workshop/pages/edit-submission/edit-submission.ts +++ b/src/addon/mod/workshop/pages/edit-submission/edit-submission.ts @@ -274,26 +274,6 @@ export class AddonModWorkshopEditSubmissionPage implements OnInit, OnDestroy { return false; } - /** - * Pull to refresh. - * - * @param refresher Refresher. - */ - refreshSubmission(refresher: any): void { - if (this.loaded) { - const promises = []; - - promises.push(this.workshopProvider.invalidateSubmissionData(this.workshopId, this.submission.id)); - promises.push(this.workshopProvider.invalidateSubmissionsData(this.workshopId)); - - Promise.all(promises).finally(() => { - return this.fetchSubmissionData(); - }).finally(() => { - refresher.complete(); - }); - } - } - /** * Save the submission. */ diff --git a/src/addon/mod/workshop/pages/submission/submission.html b/src/addon/mod/workshop/pages/submission/submission.html index cb56ca01f..41fbecd1d 100644 --- a/src/addon/mod/workshop/pages/submission/submission.html +++ b/src/addon/mod/workshop/pages/submission/submission.html @@ -12,7 +12,7 @@ - + diff --git a/src/addon/mod/workshop/pages/submission/submission.ts b/src/addon/mod/workshop/pages/submission/submission.ts index 464b2e3e3..3fb884e5f 100644 --- a/src/addon/mod/workshop/pages/submission/submission.ts +++ b/src/addon/mod/workshop/pages/submission/submission.ts @@ -373,6 +373,10 @@ export class AddonModWorkshopSubmissionPage implements OnInit, OnDestroy { promises.push(this.workshopProvider.invalidateAssessmentData(this.workshopId, this.assessmentId)); } + if (this.assessmentUserId) { + promises.push(this.workshopProvider.invalidateReviewerAssesmentsData(this.workshopId, this.assessmentId)); + } + return Promise.all(promises).finally(() => { this.eventsProvider.trigger(AddonModWorkshopProvider.ASSESSMENT_INVALIDATED, this.siteId);