From b23881299c1a5b172c1e94bdd5eb51a37369d6db Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 13 Mar 2019 11:28:36 +0100 Subject: [PATCH 001/263] MOBILE-2900 courses: Exclude enrolled user count from WS call --- src/classes/site.ts | 3 ++- src/core/courses/providers/courses.ts | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index 04d133a2c..2a0bf52a3 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -176,7 +176,8 @@ export class CoreSite { 3.3: 2017051503, 3.4: 2017111300, 3.5: 2018051700, - 3.6: 2018120300 + 3.6: 2018120300, + 3.7: 2019030700 // @todo: Replace it with the right 3.7 date when released }; // Rest of variables. diff --git a/src/core/courses/providers/courses.ts b/src/core/courses/providers/courses.ts index d4e492aa8..42e3ff7c5 100644 --- a/src/core/courses/providers/courses.ts +++ b/src/core/courses/providers/courses.ts @@ -682,14 +682,19 @@ export class CoreCoursesProvider { return this.sitesProvider.getSite(siteId).then((site) => { const userId = site.getUserId(), - data = { + data: any = { userid: userId }, preSets = { cacheKey: this.getUserCoursesCacheKey(), + getCacheUsingCacheKey: true, omitExpires: !!preferCache }; + if (site.isVersionGreaterEqualThan('3.7')) { + data.returnusercount = 0; + } + return site.read('core_enrol_get_users_courses', data, preSets); }); } From bc931df813b97db216f7638fc0d908e0a6bd1bb6 Mon Sep 17 00:00:00 2001 From: sam marshall Date: Wed, 6 Mar 2019 14:33:16 +0000 Subject: [PATCH 002/263] MOBILE-2906 Add course option type that appears in menu This allows addons to add items to the course menu. The items work in the same way as other course options, except that instead of appearing as a tab, they appear as an option in the course menu. --- src/core/course/pages/section/section.html | 1 + src/core/course/pages/section/section.ts | 22 ++- src/core/course/providers/helper.ts | 44 ++++-- src/core/course/providers/options-delegate.ts | 147 +++++++++++++++++- 4 files changed, 196 insertions(+), 18 deletions(-) diff --git a/src/core/course/pages/section/section.html b/src/core/course/pages/section/section.html index 2f47b9f38..ea12ab46f 100644 --- a/src/core/course/pages/section/section.html +++ b/src/core/course/pages/section/section.html @@ -15,6 +15,7 @@ + diff --git a/src/core/course/pages/section/section.ts b/src/core/course/pages/section/section.ts index 7246d3fd9..2ef55918c 100644 --- a/src/core/course/pages/section/section.ts +++ b/src/core/course/pages/section/section.ts @@ -24,7 +24,8 @@ import { CoreCourseProvider } from '../../providers/course'; import { CoreCourseHelperProvider } from '../../providers/helper'; import { CoreCourseFormatDelegate } from '../../providers/format-delegate'; import { CoreCourseModulePrefetchDelegate } from '../../providers/module-prefetch-delegate'; -import { CoreCourseOptionsDelegate, CoreCourseOptionsHandlerToDisplay } from '../../providers/options-delegate'; +import { CoreCourseOptionsDelegate, CoreCourseOptionsHandlerToDisplay, + CoreCourseOptionsMenuHandlerToDisplay } from '../../providers/options-delegate'; import { CoreCourseSyncProvider } from '../../providers/sync'; import { CoreCourseFormatComponent } from '../../components/format/format'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; @@ -49,6 +50,7 @@ export class CoreCourseSectionPage implements OnDestroy { sectionId: number; sectionNumber: number; courseHandlers: CoreCourseOptionsHandlerToDisplay[]; + courseMenuHandlers: CoreCourseOptionsMenuHandlerToDisplay[] = []; dataLoaded: boolean; downloadEnabled: boolean; downloadEnabledIcon = 'square-outline'; // Disabled by default. @@ -301,6 +303,11 @@ export class CoreCourseSectionPage implements OnDestroy { } })); + // Load the course menu handlers. + promises.push(this.courseOptionsDelegate.getMenuHandlersToDisplay(this.injector, this.course).then((handlers) => { + this.courseMenuHandlers = handlers; + })); + // Load the course format options when course completion is enabled to show completion progress on sections. if (this.course.enablecompletion && this.coursesProvider.isGetCoursesByFieldAvailable()) { promises.push(this.coursesProvider.getCoursesByField('id', this.course.id).catch(() => { @@ -417,7 +424,8 @@ export class CoreCourseSectionPage implements OnDestroy { * Prefetch the whole course. */ prefetchCourse(): void { - this.courseHelper.confirmAndPrefetchCourse(this.prefetchCourseData, this.course, this.sections, this.courseHandlers) + this.courseHelper.confirmAndPrefetchCourse(this.prefetchCourseData, this.course, this.sections, + this.courseHandlers, this.courseMenuHandlers) .then(() => { if (this.downloadEnabled) { // Recalculate the status. @@ -459,6 +467,16 @@ export class CoreCourseSectionPage implements OnDestroy { this.navCtrl.push('CoreCoursesCoursePreviewPage', {course: this.course, avoidOpenCourse: true}); } + /** + * Opens a menu item registered to the delegate. + * + * @param {CoreCourseMenuHandlerToDisplay} item Item to open + */ + openMenuItem(item: CoreCourseOptionsMenuHandlerToDisplay): void { + const params = Object.assign({ course: this.course}, item.data.pageParams); + this.navCtrl.push(item.data.page, params); + } + /** * Page destroyed. */ diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index aa57300b6..e137ac30c 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -25,7 +25,8 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUtilsProvider } from '@providers/utils/utils'; -import { CoreCourseOptionsDelegate, CoreCourseOptionsHandlerToDisplay } from './options-delegate'; +import { CoreCourseOptionsDelegate, CoreCourseOptionsHandlerToDisplay, + CoreCourseOptionsMenuHandlerToDisplay } from './options-delegate'; import { CoreSiteHomeProvider } from '@core/sitehome/providers/sitehome'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; import { CoreCourseProvider } from './course'; @@ -273,10 +274,11 @@ export class CoreCourseHelperProvider { * @param {any} course Course to prefetch. * @param {any[]} [sections] List of course sections. * @param {CoreCourseOptionsHandlerToDisplay[]} courseHandlers List of course handlers. + * @param {CoreCourseOptionsMenuHandlerToDisplay[]} menuHandlers List of course menu handlers. * @return {Promise} Promise resolved when the download finishes, rejected if an error occurs or the user cancels. */ - confirmAndPrefetchCourse(data: any, course: any, sections?: any[], courseHandlers?: CoreCourseOptionsHandlerToDisplay[]) - : Promise { + confirmAndPrefetchCourse(data: any, course: any, sections?: any[], courseHandlers?: CoreCourseOptionsHandlerToDisplay[], + menuHandlers?: CoreCourseOptionsMenuHandlerToDisplay[]): Promise { const initialIcon = data.prefetchCourseIcon, initialTitle = data.title, @@ -297,15 +299,23 @@ export class CoreCourseHelperProvider { // Confirm the download. return this.confirmDownloadSizeSection(course.id, undefined, sections, true).then(() => { // User confirmed, get the course handlers if needed. - if (courseHandlers) { - promise = Promise.resolve(courseHandlers); - } else { - promise = this.courseOptionsDelegate.getHandlersToDisplay(this.injector, course); + const subPromises = []; + if (!courseHandlers) { + subPromises.push(this.courseOptionsDelegate.getHandlersToDisplay(this.injector, course) + .then((cHandlers) => { + courseHandlers = cHandlers; + })); + } + if (!menuHandlers) { + subPromises.push(this.courseOptionsDelegate.getMenuHandlersToDisplay(this.injector, course) + .then((mHandlers) => { + menuHandlers = mHandlers; + })); } - return promise.then((handlers: CoreCourseOptionsHandlerToDisplay[]) => { + return Promise.all(subPromises).then(() => { // Now we have all the data, download the course. - return this.prefetchCourse(course, sections, handlers, siteId); + return this.prefetchCourse(course, sections, courseHandlers, menuHandlers, siteId); }).then(() => { // Download successful. return true; @@ -340,6 +350,7 @@ export class CoreCourseHelperProvider { const subPromises = []; let sections, handlers, + menuHandlers, success = true; // Get the sections and the handlers. @@ -349,9 +360,12 @@ export class CoreCourseHelperProvider { subPromises.push(this.courseOptionsDelegate.getHandlersToDisplay(this.injector, course).then((cHandlers) => { handlers = cHandlers; })); + subPromises.push(this.courseOptionsDelegate.getMenuHandlersToDisplay(this.injector, course).then((mHandlers) => { + menuHandlers = mHandlers; + })); promises.push(Promise.all(subPromises).then(() => { - return this.prefetchCourse(course, sections, handlers, siteId); + return this.prefetchCourse(course, sections, handlers, menuHandlers, siteId); }).catch((error) => { success = false; @@ -1162,11 +1176,12 @@ export class CoreCourseHelperProvider { * @param {any} course The course to prefetch. * @param {any[]} sections List of course sections. * @param {CoreCourseOptionsHandlerToDisplay[]} courseHandlers List of course options handlers. + * @param {CoreCourseOptionsMenuHandlerToDisplay[]} courseMenuHandlers List of course menu handlers. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the download finishes. */ - prefetchCourse(course: any, sections: any[], courseHandlers: CoreCourseOptionsHandlerToDisplay[], siteId?: string) - : Promise { + prefetchCourse(course: any, sections: any[], courseHandlers: CoreCourseOptionsHandlerToDisplay[], + courseMenuHandlers: CoreCourseOptionsMenuHandlerToDisplay[], siteId?: string): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); if (this.courseDwnPromises[siteId] && this.courseDwnPromises[siteId][course.id]) { @@ -1195,6 +1210,11 @@ export class CoreCourseHelperProvider { promises.push(handler.prefetch(course)); } }); + courseMenuHandlers.forEach((handler) => { + if (handler.prefetch) { + promises.push(handler.prefetch(course)); + } + }); // Prefetch other data needed to render the course. if (this.coursesProvider.isGetCoursesByFieldAvailable()) { diff --git a/src/core/course/providers/options-delegate.ts b/src/core/course/providers/options-delegate.ts index 961c61939..cccfde281 100644 --- a/src/core/course/providers/options-delegate.ts +++ b/src/core/course/providers/options-delegate.ts @@ -31,6 +31,12 @@ export interface CoreCourseOptionsHandler extends CoreDelegateHandler { */ priority: number; + /** + * True if this handler should appear in menu rather than as a tab. + * @type {boolean} + */ + isMenuHandler?: boolean; + /** * Whether or not the handler is enabled for a certain course. * @@ -70,6 +76,21 @@ export interface CoreCourseOptionsHandler extends CoreDelegateHandler { prefetch?(course: any): Promise; } +/** + * Interface that course options handlers implement if they appear in the menu rather than as a tab. + */ +export interface CoreCourseOptionsMenuHandler extends CoreCourseOptionsHandler { + /** + * Returns the data needed to render the handler. + * + * @param {Injector} injector Injector. + * @param {number} courseId The course ID. + * @return {CoreCourseOptionsMenuHandlerData|Promise} Data or promise resolved with data. + */ + getMenuDisplayData(injector: Injector, courseId: number): + CoreCourseOptionsMenuHandlerData | Promise; +} + /** * Data needed to render a course handler. It's returned by the handler. */ @@ -99,6 +120,41 @@ export interface CoreCourseOptionsHandlerData { componentData?: any; } +/** + * Data needed to render a course menu handler. It's returned by the handler. + */ +export interface CoreCourseOptionsMenuHandlerData { + /** + * Title to display for the handler. + * @type {string} + */ + title: string; + + /** + * Class to add to the displayed handler. + * @type {string} + */ + class?: string; + + /** + * Name of the page to load for the handler. + * @type {string} + */ + page: string; + + /** + * Params to pass to the page (other than 'course' which is always sent). + * @type {any} + */ + pageParams?: any; + + /** + * Name of the icon to display for the handler. + * @type {string} + */ + icon: string; // Name of the icon to display in the tab. +} + /** * Data returned by the delegate for each handler. */ @@ -130,6 +186,37 @@ export interface CoreCourseOptionsHandlerToDisplay { prefetch?(course: any): Promise; } +/** + * Additional data returned if it is a menu item. + */ +export interface CoreCourseOptionsMenuHandlerToDisplay { + /** + * Data to display. + * @type {CoreCourseOptionsMenuHandlerData} + */ + data: CoreCourseOptionsMenuHandlerData; + + /** + * Name of the handler, or name and sub context (AddonMessages, AddonMessages:blockContact, ...). + * @type {string} + */ + name: string; + + /** + * The highest priority is displayed first. + * @type {number} + */ + priority?: number; + + /** + * Called when a course is downloaded. It should prefetch all the data to be able to see the addon in offline. + * + * @param {any} course The course. + * @return {Promise} Promise resolved when done. + */ + prefetch?(course: any): Promise; +} + /** * Service to interact with plugins to be shown in each course (participants, learning plans, ...). */ @@ -139,7 +226,8 @@ export class CoreCourseOptionsDelegate extends CoreDelegate { protected lastUpdateHandlersForCoursesStart: any = {}; protected coursesHandlers: { [courseId: number]: { - access?: any, navOptions?: any, admOptions?: any, deferred?: PromiseDefer, enabledHandlers?: CoreCourseOptionsHandler[] + access?: any, navOptions?: any, admOptions?: any, deferred?: PromiseDefer, + enabledHandlers?: CoreCourseOptionsHandler[], enabledMenuHandlers?: CoreCourseOptionsMenuHandler[] } } = {}; @@ -258,6 +346,43 @@ export class CoreCourseOptionsDelegate extends CoreDelegate { */ getHandlersToDisplay(injector: Injector, course: any, refresh?: boolean, isGuest?: boolean, navOptions?: any, admOptions?: any): Promise { + return > this.getHandlersToDisplayInternal( + false, injector, course, refresh, isGuest, navOptions, admOptions); + } + + /** + * Get the list of menu handlers that should be displayed for a course. + * This function should be called only when the handlers need to be displayed, since it can call several WebServices. + * + * @param {Injector} injector Injector. + * @param {any} course The course object. + * @param {boolean} [refresh] True if it should refresh the list. + * @param {boolean} [isGuest] Whether it's guest. + * @param {any} [navOptions] Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions. + * @param {any} [admOptions] Course admin options for current user. See CoreCoursesProvider.getUserAdministrationOptions. + * @return {Promise} Promise resolved with array of handlers. + */ + getMenuHandlersToDisplay(injector: Injector, course: any, refresh?: boolean, isGuest?: boolean, + navOptions?: any, admOptions?: any): Promise { + return > this.getHandlersToDisplayInternal( + true, injector, course, refresh, isGuest, navOptions, admOptions); + } + + /** + * Get the list of menu handlers that should be displayed for a course. + * This function should be called only when the handlers need to be displayed, since it can call several WebServices. + * + * @param {boolean} menu If true, gets menu handlers; false, gets tab handlers + * @param {Injector} injector Injector. + * @param {any} course The course object. + * @param {boolean} refresh True if it should refresh the list. + * @param {boolean} isGuest Whether it's guest. + * @param {any} navOptions Course navigation options for current user. See CoreCoursesProvider.getUserNavigationOptions. + * @param {any} admOptions Course admin options for current user. See CoreCoursesProvider.getUserAdministrationOptions. + * @return {Promise} Promise resolved with array of handlers. + */ + protected getHandlersToDisplayInternal(menu: boolean, injector: Injector, course: any, refresh: boolean, isGuest: boolean, + navOptions: any, admOptions: any): Promise { course.id = parseInt(course.id, 10); const accessData = { @@ -278,8 +403,16 @@ export class CoreCourseOptionsDelegate extends CoreDelegate { }).then(() => { const promises = []; - this.coursesHandlers[course.id].enabledHandlers.forEach((handler) => { - promises.push(Promise.resolve(handler.getDisplayData(injector, course)).then((data) => { + let handlerList; + if (menu) { + handlerList = this.coursesHandlers[course.id].enabledMenuHandlers; + } else { + handlerList = this.coursesHandlers[course.id].enabledHandlers; + } + + handlerList.forEach((handler) => { + const getFunction = menu ? handler.getMenuDisplayData : handler.getDisplayData; + promises.push(Promise.resolve(getFunction.call(handler, injector, course)).then((data) => { handlersToDisplay.push({ data: data, priority: handler.priority, @@ -444,6 +577,7 @@ export class CoreCourseOptionsDelegate extends CoreDelegate { updateHandlersForCourse(courseId: number, accessData: any, navOptions?: any, admOptions?: any): Promise { const promises = [], enabledForCourse = [], + enabledForCourseMenu = [], siteId = this.sitesProvider.getCurrentSiteId(), now = Date.now(); @@ -456,7 +590,11 @@ export class CoreCourseOptionsDelegate extends CoreDelegate { promises.push(Promise.resolve(handler.isEnabledForCourse(courseId, accessData, navOptions, admOptions)) .then((enabled) => { if (enabled) { - enabledForCourse.push(handler); + if (handler.isMenuHandler) { + enabledForCourseMenu.push( handler); + } else { + enabledForCourse.push(handler); + } } else { return Promise.reject(null); } @@ -476,6 +614,7 @@ export class CoreCourseOptionsDelegate extends CoreDelegate { if (this.isLastUpdateCourseCall(courseId, now) && this.sitesProvider.getCurrentSiteId() === siteId) { // Update the coursesHandlers array with the new enabled addons. this.coursesHandlers[courseId].enabledHandlers = enabledForCourse; + this.coursesHandlers[courseId].enabledMenuHandlers = enabledForCourseMenu; this.loaded[courseId] = true; // Resolve the promise. From 2b7d59b1a3901af14a897671c283624e6de2f9c7 Mon Sep 17 00:00:00 2001 From: sam marshall Date: Wed, 27 Mar 2019 14:27:58 +0000 Subject: [PATCH 003/263] MOBILE-2940 core-icon: label does not work on Ionic icons --- src/components/icon/core-icon.html | 2 +- src/components/icon/icon.ts | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/components/icon/core-icon.html b/src/components/icon/core-icon.html index 8e4a85f3a..7c89b545c 100644 --- a/src/components/icon/core-icon.html +++ b/src/components/icon/core-icon.html @@ -1 +1 @@ - \ No newline at end of file +
diff --git a/src/components/icon/icon.ts b/src/components/icon/icon.ts index 0321a6485..4bf697b05 100644 --- a/src/components/icon/icon.ts +++ b/src/components/icon/icon.ts @@ -13,6 +13,7 @@ // limitations under the License. import { Component, Input, OnInit, OnDestroy, ElementRef } from '@angular/core'; +import { Config } from 'ionic-angular'; /** * Core Icon is a component that enabled a posibility to add fontawesome icon to the html. It's recommended if both fontawesome @@ -42,7 +43,7 @@ export class CoreIconComponent implements OnInit, OnDestroy { protected element: HTMLElement; protected newElement: HTMLElement; - constructor(el: ElementRef) { + constructor(el: ElementRef, private config: Config) { this.element = el.nativeElement; } @@ -50,9 +51,11 @@ export class CoreIconComponent implements OnInit, OnDestroy { * Component being initialized. */ ngOnInit(): void { + // Use a new created element to avoid ion-icon working. + // This is necessary to make the FontAwesome stuff work. + // It is also required to stop Ionic overriding the aria-label attribute. + this.newElement = document.createElement('ion-icon'); if (this.name.startsWith('fa-')) { - // Use a new created element to avoid ion-icon working. - this.newElement = document.createElement('ion-icon'); this.newElement.classList.add('icon'); this.newElement.classList.add('fa'); this.newElement.classList.add(this.name); @@ -63,7 +66,10 @@ export class CoreIconComponent implements OnInit, OnDestroy { this.newElement.classList.add('fa-' + this.color); } } else { - this.newElement = this.element.firstElementChild; + const mode = this.config.get('iconMode'); + this.newElement.classList.add('icon'); + this.newElement.classList.add('icon-' + mode); + this.newElement.classList.add('ion-' + mode + '-' + this.name); } !this.ariaLabel && this.newElement.setAttribute('aria-hidden', 'true'); From 6718d36d6cf80588711e38b0e15c8e28050cdb09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Mon, 25 Mar 2019 10:32:46 +0100 Subject: [PATCH 004/263] MOBILE-2937 ux: Smooth top tabs show and hide --- src/components/tabs/tab.ts | 5 ++++- src/components/tabs/tabs.scss | 2 ++ src/components/tabs/tabs.ts | 29 +++++++++++++++++++++++------ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/components/tabs/tab.ts b/src/components/tabs/tab.ts index e47563acc..884ed7e15 100644 --- a/src/components/tabs/tab.ts +++ b/src/components/tabs/tab.ts @@ -122,10 +122,13 @@ export class CoreTabComponent implements OnInit, OnDestroy { // Setup tab scrolling. setTimeout(() => { + // TODO: Solve undefined this.scroll on tab change. + if (this.scroll) { this.scroll.getScrollElement().onscroll = (e): void => { - this.tabs.showHideTabs(e); + this.tabs.showHideTabs(e.target); }; + this.tabs.showHideTabs(this.scroll.getScrollElement()); } }, 1); } diff --git a/src/components/tabs/tabs.scss b/src/components/tabs/tabs.scss index 8d6c3a5e1..dcad7fd56 100644 --- a/src/components/tabs/tabs.scss +++ b/src/components/tabs/tabs.scss @@ -118,8 +118,10 @@ ion-app.app-root core-tabs { &.tabs-hidden { .core-tabs-bar { display: none !important; + transform: translateY(0) !important; } .core-tabs-content-container { + transform: translateY(0) !important; padding-bottom: 0 !important; } } diff --git a/src/components/tabs/tabs.ts b/src/components/tabs/tabs.ts index d15eec81a..7d8944949 100644 --- a/src/components/tabs/tabs.ts +++ b/src/components/tabs/tabs.ts @@ -63,6 +63,7 @@ export class CoreTabsComponent implements OnInit, AfterViewInit, OnChanges, OnDe numTabsShown = 0; direction = 'ltr'; description = ''; + lastScroll = 0; protected originalTabsContainer: HTMLElement; // The container of the original tabs. It will include each tab's content. protected initialized = false; @@ -406,22 +407,38 @@ export class CoreTabsComponent implements OnInit, AfterViewInit, OnChanges, OnDe /** * Show or hide the tabs. This is used when the user is scrolling inside a tab. * - * @param {any} e Scroll event. + * @param {any} scrollElement Scroll element to check scroll position. */ - showHideTabs(e: any): void { + showHideTabs(scrollElement: any): void { if (!this.tabBarHeight) { // We don't have the tab bar height, this means the tab bar isn't shown. return; } - if (this.tabsShown && e.target.scrollTop - this.tabBarHeight > this.tabBarHeight) { - this.tabBarElement.classList.add('tabs-hidden'); + const scroll = parseInt(scrollElement.scrollTop, 10); + if (scroll == this.lastScroll) { + // Ensure scroll has been modified to avoid flicks. + return; + } + + if (this.tabsShown && scroll > this.tabBarHeight) { this.tabsShown = false; - } else if (!this.tabsShown && e.target.scrollTop < this.tabBarHeight) { - this.tabBarElement.classList.remove('tabs-hidden'); + + // Hide tabs. + this.tabBarElement.classList.add('tabs-hidden'); + } else if (!this.tabsShown && scroll <= this.tabBarHeight) { this.tabsShown = true; + this.tabBarElement.classList.remove('tabs-hidden'); this.calculateSlides(); } + + if (this.tabsShown) { + // Smooth translation. + this.topTabsElement.style.transform = 'translateY(-' + scroll + 'px)'; + this.originalTabsContainer.style.transform = 'translateY(-' + scroll + 'px)'; + this.originalTabsContainer.style.paddingBottom = this.tabBarHeight - scroll + 'px'; + } + this.lastScroll = parseInt(scrollElement.scrollTop, 10); } /** From 3878ea71417e0b2c09f26285ca3615bb61cf4da5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Mon, 25 Mar 2019 13:08:44 +0100 Subject: [PATCH 005/263] MOBILE-2937 tabs: Solve hide tabs on dynamic components --- src/components/tabs/tab.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/tabs/tab.ts b/src/components/tabs/tab.ts index 884ed7e15..6a64fb9f1 100644 --- a/src/components/tabs/tab.ts +++ b/src/components/tabs/tab.ts @@ -66,7 +66,7 @@ export class CoreTabComponent implements OnInit, OnDestroy { @Output() ionSelect: EventEmitter = new EventEmitter(); @ContentChild(TemplateRef) template: TemplateRef; // Template defined by the content. - @ContentChild(Content) scroll: Content; + @ContentChild(Content) content: Content; element: HTMLElement; // The core-tab element. loaded = false; @@ -122,13 +122,15 @@ export class CoreTabComponent implements OnInit, OnDestroy { // Setup tab scrolling. setTimeout(() => { - // TODO: Solve undefined this.scroll on tab change. + // Workarround to solve undefined this.scroll on tab change. + const scroll: HTMLElement = this.content ? this.content.getScrollElement() : + this.element.querySelector('ion-content > .scroll-content'); - if (this.scroll) { - this.scroll.getScrollElement().onscroll = (e): void => { + if (scroll) { + scroll.onscroll = (e): void => { this.tabs.showHideTabs(e.target); }; - this.tabs.showHideTabs(this.scroll.getScrollElement()); + this.tabs.showHideTabs(scroll); } }, 1); } From aac1f24185b73e36d9e7c3763f550a2d96e82a1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Mon, 25 Mar 2019 13:18:18 +0100 Subject: [PATCH 006/263] MOBILE-2937 tabs: Review tab badge style --- src/components/tabs/tabs.scss | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/components/tabs/tabs.scss b/src/components/tabs/tabs.scss index dcad7fd56..5dfa3c960 100644 --- a/src/components/tabs/tabs.scss +++ b/src/components/tabs/tabs.scss @@ -36,13 +36,6 @@ ion-app.app-root .core-tabs-bar { @include margin(null, 5px, null, null); } - ion-badge.tab-badge { - position: relative; - @include position(auto, auto, auto, auto); - @include margin(null, null, null, 5px); - - } - &[aria-selected=true] { color: $core-top-tabs-color-active !important; border-bottom-color: $core-top-tabs-border-active !important; From 0a2b197cd4e46a310ba7868e15d91c1d59315ae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 26 Mar 2019 10:51:24 +0100 Subject: [PATCH 007/263] MOBILE-2851 users: Show participants last course access when available --- .../user/components/participants/core-user-participants.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/user/components/participants/core-user-participants.html b/src/core/user/components/participants/core-user-participants.html index d1faf712d..61e8944b5 100644 --- a/src/core/user/components/participants/core-user-participants.html +++ b/src/core/user/components/participants/core-user-participants.html @@ -11,7 +11,8 @@

-

{{ 'core.lastaccess' | translate }}: {{ participant.lastaccess | coreTimeAgo }}

+

{{ 'core.lastaccess' | translate }}: {{ participant.lastcourseaccess | coreTimeAgo }}

+

{{ 'core.lastaccess' | translate }}: {{ participant.lastaccess | coreTimeAgo }}

From af7872f8624875b13d1ab4bf3832f9e953cfeb81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 5 Mar 2019 14:02:56 +0100 Subject: [PATCH 008/263] MOBILE-2873 sync: Force manual sync --- .../messages/providers/mainmenu-handler.ts | 3 +- .../messages/providers/sync-cron-handler.ts | 3 +- src/addon/mod/assign/providers/assign-sync.ts | 18 +++++++----- .../mod/assign/providers/sync-cron-handler.ts | 5 ++-- .../mod/choice/providers/sync-cron-handler.ts | 7 +++-- src/addon/mod/choice/providers/sync.ts | 23 +++++++++------ .../mod/data/providers/sync-cron-handler.ts | 5 ++-- src/addon/mod/data/providers/sync.ts | 17 +++++++---- .../feedback/providers/sync-cron-handler.ts | 5 ++-- src/addon/mod/feedback/providers/sync.ts | 15 ++++++---- .../mod/forum/providers/sync-cron-handler.ts | 5 ++-- src/addon/mod/forum/providers/sync.ts | 29 ++++++++++++------- .../glossary/providers/sync-cron-handler.ts | 5 ++-- src/addon/mod/glossary/providers/sync.ts | 16 ++++++---- src/addon/mod/lesson/providers/lesson-sync.ts | 19 +++++++----- .../mod/lesson/providers/sync-cron-handler.ts | 5 ++-- src/addon/mod/quiz/providers/quiz-sync.ts | 14 +++++---- .../mod/quiz/providers/sync-cron-handler.ts | 5 ++-- src/addon/mod/scorm/providers/scorm-sync.ts | 14 +++++---- .../mod/scorm/providers/sync-cron-handler.ts | 5 ++-- .../mod/survey/providers/sync-cron-handler.ts | 5 ++-- src/addon/mod/survey/providers/sync.ts | 16 ++++++---- .../mod/wiki/providers/sync-cron-handler.ts | 5 ++-- src/addon/mod/wiki/providers/wiki-sync.ts | 16 ++++++---- .../workshop/providers/sync-cron-handler.ts | 5 ++-- src/addon/mod/workshop/providers/sync.ts | 20 +++++++------ src/addon/notes/providers/notes-sync.ts | 12 +++++--- .../notes/providers/sync-cron-handler.ts | 7 +++-- .../notifications/providers/cron-handler.ts | 10 ++++--- src/core/course/providers/log-cron-handler.ts | 7 +++-- .../course/providers/sync-cron-handler.ts | 7 +++-- src/core/course/providers/sync.ts | 10 +++---- src/core/rating/providers/sync.ts | 10 +++++-- src/providers/cron.ts | 11 ++++--- 34 files changed, 221 insertions(+), 138 deletions(-) diff --git a/src/addon/messages/providers/mainmenu-handler.ts b/src/addon/messages/providers/mainmenu-handler.ts index 170d86082..150b6c994 100644 --- a/src/addon/messages/providers/mainmenu-handler.ts +++ b/src/addon/messages/providers/mainmenu-handler.ts @@ -165,9 +165,10 @@ export class AddonMessagesMainMenuHandler implements CoreMainMenuHandler, CoreCr * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { + execute(siteId?: string, force?: boolean): Promise { if (this.sitesProvider.isCurrentSite(siteId)) { this.refreshBadge(); } diff --git a/src/addon/messages/providers/sync-cron-handler.ts b/src/addon/messages/providers/sync-cron-handler.ts index 79dc464a3..466a593c3 100644 --- a/src/addon/messages/providers/sync-cron-handler.ts +++ b/src/addon/messages/providers/sync-cron-handler.ts @@ -30,9 +30,10 @@ export class AddonMessagesSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { + execute(siteId?: string, force?: boolean): Promise { return this.messagesSync.syncAllDiscussions(siteId); } diff --git a/src/addon/mod/assign/providers/assign-sync.ts b/src/addon/mod/assign/providers/assign-sync.ts index cff8c421a..f65b2f393 100644 --- a/src/addon/mod/assign/providers/assign-sync.ts +++ b/src/addon/mod/assign/providers/assign-sync.ts @@ -109,27 +109,29 @@ export class AddonModAssignSyncProvider extends CoreSyncBaseProvider { /** * Try to synchronize all the assignments in a certain site or in all sites. * + * @param {boolean} force Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllAssignments(siteId?: string): Promise { - return this.syncOnSites('all assignments', this.syncAllAssignmentsFunc.bind(this), [], siteId); + syncAllAssignments(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all assignments', this.syncAllAssignmentsFunc.bind(this), [force], siteId); } /** * Sync all assignments on a site. * + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. * @param {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllAssignmentsFunc(siteId?: string): Promise { + protected syncAllAssignmentsFunc(siteId?: string, force?: boolean): Promise { // Get all assignments that have offline data. return this.assignOfflineProvider.getAllAssigns(siteId).then((assignIds) => { - const promises = []; - // Sync all assignments that haven't been synced for a while. - assignIds.forEach((assignId) => { - promises.push(this.syncAssignIfNeeded(assignId, siteId).then((data) => { + const promises = assignIds.map((assignId) => { + const promise = force ? this.syncAssign(assignId, siteId) : this.syncAssignIfNeeded(assignId, siteId); + + return promise.then((data) => { if (data && data.updated) { // Sync done. Send event. this.eventsProvider.trigger(AddonModAssignSyncProvider.AUTO_SYNCED, { @@ -137,7 +139,7 @@ export class AddonModAssignSyncProvider extends CoreSyncBaseProvider { warnings: data.warnings }, siteId); } - })); + }); }); return Promise.all(promises); diff --git a/src/addon/mod/assign/providers/sync-cron-handler.ts b/src/addon/mod/assign/providers/sync-cron-handler.ts index fe68ccddd..fbfb6600c 100644 --- a/src/addon/mod/assign/providers/sync-cron-handler.ts +++ b/src/addon/mod/assign/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModAssignSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.assignSync.syncAllAssignments(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.assignSync.syncAllAssignments(siteId, force); } /** diff --git a/src/addon/mod/choice/providers/sync-cron-handler.ts b/src/addon/mod/choice/providers/sync-cron-handler.ts index af6cb8e81..92d88b52b 100644 --- a/src/addon/mod/choice/providers/sync-cron-handler.ts +++ b/src/addon/mod/choice/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModChoiceSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. - * @return {Promise} Promise resolved when done, rejected if failure. + * @param {boolean} [force] Wether the execution is forced (manual sync). + * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.choiceSync.syncAllChoices(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.choiceSync.syncAllChoices(siteId, force); } /** diff --git a/src/addon/mod/choice/providers/sync.ts b/src/addon/mod/choice/providers/sync.ts index 9a14b71d4..bcdc0b848 100644 --- a/src/addon/mod/choice/providers/sync.ts +++ b/src/addon/mod/choice/providers/sync.ts @@ -67,26 +67,29 @@ export class AddonModChoiceSyncProvider extends CoreCourseActivitySyncBaseProvid /** * Try to synchronize all the choices in a certain site or in all sites. * + * @param {boolean} force Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllChoices(siteId?: string): Promise { - return this.syncOnSites('choices', this.syncAllChoicesFunc.bind(this), undefined, siteId); + syncAllChoices(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('choices', this.syncAllChoicesFunc.bind(this), [force], siteId); } /** * Sync all pending choices on a site. * - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} force Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllChoicesFunc(siteId?: string): Promise { + protected syncAllChoicesFunc(siteId?: string, force?: boolean): Promise { return this.choiceOffline.getResponses(siteId).then((responses) => { - const promises = []; - // Sync all responses. - responses.forEach((response) => { - promises.push(this.syncChoiceIfNeeded(response.choiceid, response.userid, siteId).then((result) => { + const promises = responses.map((response) => { + const promise = force ? this.syncChoice(response.choiceid, response.userid, siteId) : + this.syncChoiceIfNeeded(response.choiceid, response.userid, siteId); + + return promise.then((result) => { if (result && result.updated) { // Sync successful, send event. this.eventsProvider.trigger(AddonModChoiceSyncProvider.AUTO_SYNCED, { @@ -95,8 +98,10 @@ export class AddonModChoiceSyncProvider extends CoreCourseActivitySyncBaseProvid warnings: result.warnings }, siteId); } - })); + }); }); + + return Promise.all(promises); }); } diff --git a/src/addon/mod/data/providers/sync-cron-handler.ts b/src/addon/mod/data/providers/sync-cron-handler.ts index 31a3db30a..c67e7a102 100644 --- a/src/addon/mod/data/providers/sync-cron-handler.ts +++ b/src/addon/mod/data/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModDataSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.dataSync.syncAllDatabases(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.dataSync.syncAllDatabases(siteId, force); } /** diff --git a/src/addon/mod/data/providers/sync.ts b/src/addon/mod/data/providers/sync.ts index aeb16b190..6b5768adf 100644 --- a/src/addon/mod/data/providers/sync.ts +++ b/src/addon/mod/data/providers/sync.ts @@ -66,19 +66,22 @@ export class AddonModDataSyncProvider extends CoreSyncBaseProvider { /** * Try to synchronize all the databases in a certain site or in all sites. * + * @param {boolean} force Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllDatabases(siteId?: string): Promise { - return this.syncOnSites('all databases', this.syncAllDatabasesFunc.bind(this), undefined, siteId); + syncAllDatabases(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all databases', this.syncAllDatabasesFunc.bind(this), [force], siteId); } /** * Sync all pending databases on a site. - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * + * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} force Wether to force sync not depending on last execution. * @param {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllDatabasesFunc(siteId?: string): Promise { + protected syncAllDatabasesFunc(siteId?: string, force?: boolean): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); const promises = []; @@ -93,8 +96,10 @@ export class AddonModDataSyncProvider extends CoreSyncBaseProvider { return; } - promises[action.dataid] = this.syncDatabaseIfNeeded(action.dataid, siteId) - .then((result) => { + promises[action.dataid] = force ? this.syncDatabase(action.dataid, siteId) : + this.syncDatabaseIfNeeded(action.dataid, siteId); + + promises[action.dataid].then((result) => { if (result && result.updated) { // Sync done. Send event. this.eventsProvider.trigger(AddonModDataSyncProvider.AUTO_SYNCED, { diff --git a/src/addon/mod/feedback/providers/sync-cron-handler.ts b/src/addon/mod/feedback/providers/sync-cron-handler.ts index 6ace28013..94d43e905 100644 --- a/src/addon/mod/feedback/providers/sync-cron-handler.ts +++ b/src/addon/mod/feedback/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModFeedbackSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.feedbackSync.syncAllFeedbacks(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.feedbackSync.syncAllFeedbacks(siteId, force); } /** diff --git a/src/addon/mod/feedback/providers/sync.ts b/src/addon/mod/feedback/providers/sync.ts index 6c6e008a4..08604869a 100644 --- a/src/addon/mod/feedback/providers/sync.ts +++ b/src/addon/mod/feedback/providers/sync.ts @@ -71,20 +71,22 @@ export class AddonModFeedbackSyncProvider extends CoreCourseActivitySyncBaseProv /** * Try to synchronize all the feedbacks in a certain site or in all sites. * + * @param {boolean} force Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllFeedbacks(siteId?: string): Promise { - return this.syncOnSites('all feedbacks', this.syncAllFeedbacksFunc.bind(this), undefined, siteId); + syncAllFeedbacks(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all feedbacks', this.syncAllFeedbacksFunc.bind(this), [force], siteId); } /** * Sync all pending feedbacks on a site. * - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} force Wether to force sync not depending on last execution. * @param {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllFeedbacksFunc(siteId?: string): Promise { + protected syncAllFeedbacksFunc(siteId?: string, force?: boolean): Promise { // Sync all new responses. return this.feedbackOffline.getAllFeedbackResponses(siteId).then((responses) => { const promises = {}; @@ -97,7 +99,10 @@ export class AddonModFeedbackSyncProvider extends CoreCourseActivitySyncBaseProv continue; } - promises[response.feedbackid] = this.syncFeedbackIfNeeded(response.feedbackid, siteId).then((result) => { + promises[response.feedbackid] = force ? this.syncFeedback(response.feedbackid, siteId) : + this.syncFeedbackIfNeeded(response.feedbackid, siteId); + + promises[response.feedbackid].then((result) => { if (result && result.updated) { // Sync successful, send event. this.eventsProvider.trigger(AddonModFeedbackSyncProvider.AUTO_SYNCED, { diff --git a/src/addon/mod/forum/providers/sync-cron-handler.ts b/src/addon/mod/forum/providers/sync-cron-handler.ts index 860368b25..53a2406e7 100644 --- a/src/addon/mod/forum/providers/sync-cron-handler.ts +++ b/src/addon/mod/forum/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModForumSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.forumSync.syncAllForums(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.forumSync.syncAllForums(siteId, force); } /** diff --git a/src/addon/mod/forum/providers/sync.ts b/src/addon/mod/forum/providers/sync.ts index 8d63ccfc5..a829d2662 100644 --- a/src/addon/mod/forum/providers/sync.ts +++ b/src/addon/mod/forum/providers/sync.ts @@ -69,19 +69,21 @@ export class AddonModForumSyncProvider extends CoreSyncBaseProvider { * Try to synchronize all the forums in a certain site or in all sites. * * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllForums(siteId?: string): Promise { - return this.syncOnSites('all forums', this.syncAllForumsFunc.bind(this), [], siteId); + syncAllForums(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all forums', this.syncAllForumsFunc.bind(this), [force], siteId); } /** * Sync all forums on a site. * - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {string} siteId Site ID to sync. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllForumsFunc(siteId?: string): Promise { + protected syncAllForumsFunc(siteId: string, force?: boolean): Promise { const sitePromises = []; // Sync all new discussions. @@ -94,8 +96,10 @@ export class AddonModForumSyncProvider extends CoreSyncBaseProvider { return; } - promises[discussion.forumid] = this.syncForumDiscussionsIfNeeded(discussion.forumid, discussion.userid, siteId) - .then((result) => { + promises[discussion.forumid] = force ? this.syncForumDiscussions(discussion.forumid, discussion.userid, siteId) : + this.syncForumDiscussionsIfNeeded(discussion.forumid, discussion.userid, siteId); + + promises[discussion.forumid].then((result) => { if (result && result.updated) { // Sync successful, send event. this.eventsProvider.trigger(AddonModForumSyncProvider.AUTO_SYNCED, { @@ -120,8 +124,10 @@ export class AddonModForumSyncProvider extends CoreSyncBaseProvider { return; } - promises[reply.discussionid] = this.syncDiscussionRepliesIfNeeded(reply.discussionid, reply.userid, siteId) - .then((result) => { + promises[reply.discussionid] = force ? this.syncDiscussionReplies(reply.discussionid, reply.userid, siteId) : + this.syncDiscussionRepliesIfNeeded(reply.discussionid, reply.userid, siteId); + + promises[reply.discussionid].then((result) => { if (result && result.updated) { // Sync successful, send event. this.eventsProvider.trigger(AddonModForumSyncProvider.AUTO_SYNCED, { @@ -137,7 +143,7 @@ export class AddonModForumSyncProvider extends CoreSyncBaseProvider { return Promise.all(this.utils.objectToArray(promises)); })); - sitePromises.push(this.syncRatings(undefined, undefined, siteId)); + sitePromises.push(this.syncRatings(undefined, undefined, force, siteId)); return Promise.all(sitePromises); } @@ -282,13 +288,14 @@ export class AddonModForumSyncProvider extends CoreSyncBaseProvider { * * @param {number} [cmId] Course module to be synced. If not defined, sync all forums. * @param {number} [discussionId] Discussion id to be synced. If not defined, sync all discussions. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved if sync is successful, rejected otherwise. */ - syncRatings(cmId?: number, discussionId?: number, siteId?: string): Promise { + syncRatings(cmId?: number, discussionId?: number, force?: boolean, siteId?: string): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); - return this.ratingSync.syncRatings('mod_forum', 'post', 'module', cmId, discussionId, siteId).then((results) => { + return this.ratingSync.syncRatings('mod_forum', 'post', 'module', cmId, discussionId, force, siteId).then((results) => { let updated = false; const warnings = []; const promises = []; diff --git a/src/addon/mod/glossary/providers/sync-cron-handler.ts b/src/addon/mod/glossary/providers/sync-cron-handler.ts index 77ea930d8..d952ce356 100644 --- a/src/addon/mod/glossary/providers/sync-cron-handler.ts +++ b/src/addon/mod/glossary/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModGlossarySyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.glossarySync.syncAllGlossaries(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.glossarySync.syncAllGlossaries(siteId, force); } /** diff --git a/src/addon/mod/glossary/providers/sync.ts b/src/addon/mod/glossary/providers/sync.ts index 3a0dbe0e2..c3eefdafd 100644 --- a/src/addon/mod/glossary/providers/sync.ts +++ b/src/addon/mod/glossary/providers/sync.ts @@ -68,19 +68,21 @@ export class AddonModGlossarySyncProvider extends CoreSyncBaseProvider { * Try to synchronize all the glossaries in a certain site or in all sites. * * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllGlossaries(siteId?: string): Promise { - return this.syncOnSites('all glossaries', this.syncAllGlossariesFunc.bind(this), [], siteId); + syncAllGlossaries(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all glossaries', this.syncAllGlossariesFunc.bind(this), [force], siteId); } /** * Sync all glossaries on a site. * - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {string} siteId Site ID to sync. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllGlossariesFunc(siteId?: string): Promise { + protected syncAllGlossariesFunc(siteId: string, force?: boolean): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); const promises = []; @@ -97,8 +99,10 @@ export class AddonModGlossarySyncProvider extends CoreSyncBaseProvider { continue; } - promises[entry.glossaryid] = this.syncGlossaryEntriesIfNeeded(entry.glossaryid, entry.userid, siteId) - .then((result) => { + promises[entry.glossaryid] = force ? this.syncGlossaryEntries(entry.glossaryid, entry.userid, siteId) : + this.syncGlossaryEntriesIfNeeded(entry.glossaryid, entry.userid, siteId); + + promises[entry.glossaryid].then((result) => { if (result && result.updated) { // Sync successful, send event. this.eventsProvider.trigger(AddonModGlossarySyncProvider.AUTO_SYNCED, { diff --git a/src/addon/mod/lesson/providers/lesson-sync.ts b/src/addon/mod/lesson/providers/lesson-sync.ts index 907e8f4d3..1a1abdaf6 100644 --- a/src/addon/mod/lesson/providers/lesson-sync.ts +++ b/src/addon/mod/lesson/providers/lesson-sync.ts @@ -186,26 +186,31 @@ export class AddonModLessonSyncProvider extends CoreCourseActivitySyncBaseProvid * Try to synchronize all the lessons in a certain site or in all sites. * * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllLessons(siteId?: string): Promise { - return this.syncOnSites('all lessons', this.syncAllLessonsFunc.bind(this), [], siteId); + syncAllLessons(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all lessons', this.syncAllLessonsFunc.bind(this), [force], siteId); } /** * Sync all lessons on a site. * - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {string} siteId Site ID to sync. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllLessonsFunc(siteId?: string): Promise { + protected syncAllLessonsFunc(siteId: string, force?: boolean): Promise { // Get all the lessons that have something to be synchronized. return this.lessonOfflineProvider.getAllLessonsWithData(siteId).then((lessons) => { // Sync all lessons that haven't been synced for a while. const promises = []; - lessons.forEach((lesson) => { - promises.push(this.syncLessonIfNeeded(lesson.id, false, siteId).then((result) => { + lessons.map((lesson) => { + const promise = force ? this.syncLesson(lesson.id, false, false, siteId) : + this.syncLessonIfNeeded(lesson.id, false, siteId); + + return promise.then((result) => { if (result && result.updated) { // Sync successful, send event. this.eventsProvider.trigger(AddonModLessonSyncProvider.AUTO_SYNCED, { @@ -213,7 +218,7 @@ export class AddonModLessonSyncProvider extends CoreCourseActivitySyncBaseProvid warnings: result.warnings }, siteId); } - })); + }); }); return Promise.all(promises); diff --git a/src/addon/mod/lesson/providers/sync-cron-handler.ts b/src/addon/mod/lesson/providers/sync-cron-handler.ts index 0ede470f1..3d204645a 100644 --- a/src/addon/mod/lesson/providers/sync-cron-handler.ts +++ b/src/addon/mod/lesson/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModLessonSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.lessonSync.syncAllLessons(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.lessonSync.syncAllLessons(siteId, force); } /** diff --git a/src/addon/mod/quiz/providers/quiz-sync.ts b/src/addon/mod/quiz/providers/quiz-sync.ts index 854fb8a83..e14b3f1d6 100644 --- a/src/addon/mod/quiz/providers/quiz-sync.ts +++ b/src/addon/mod/quiz/providers/quiz-sync.ts @@ -190,19 +190,21 @@ export class AddonModQuizSyncProvider extends CoreCourseActivitySyncBaseProvider * Try to synchronize all the quizzes in a certain site or in all sites. * * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllQuizzes(siteId?: string): Promise { - return this.syncOnSites('all quizzes', this.syncAllQuizzesFunc.bind(this), [], siteId); + syncAllQuizzes(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all quizzes', this.syncAllQuizzesFunc.bind(this), [force], siteId); } /** * Sync all quizzes on a site. * - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {string} siteId Site ID to sync. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllQuizzesFunc(siteId?: string): Promise { + protected syncAllQuizzesFunc(siteId?: string, force?: boolean): Promise { // Get all offline attempts. return this.quizOfflineProvider.getAllAttempts(siteId).then((attempts) => { const quizzes = [], @@ -227,7 +229,9 @@ export class AddonModQuizSyncProvider extends CoreCourseActivitySyncBaseProvider // Quiz not blocked, try to synchronize it. promises.push(this.quizProvider.getQuizById(quiz.courseid, quiz.id, false, false, siteId).then((quiz) => { - return this.syncQuizIfNeeded(quiz, false, siteId).then((data) => { + const promise = force ? this.syncQuiz(quiz, false, siteId) : this.syncQuizIfNeeded(quiz, false, siteId); + + return promise.then((data) => { if (data && data.warnings && data.warnings.length) { // Store the warnings to show them when the user opens the quiz. return this.setSyncWarnings(quiz.id, data.warnings, siteId).then(() => { diff --git a/src/addon/mod/quiz/providers/sync-cron-handler.ts b/src/addon/mod/quiz/providers/sync-cron-handler.ts index 2866f3a08..2c3c1bcbe 100644 --- a/src/addon/mod/quiz/providers/sync-cron-handler.ts +++ b/src/addon/mod/quiz/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModQuizSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.quizSync.syncAllQuizzes(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.quizSync.syncAllQuizzes(siteId, force); } /** diff --git a/src/addon/mod/scorm/providers/scorm-sync.ts b/src/addon/mod/scorm/providers/scorm-sync.ts index 683cfd450..163c4cd7a 100644 --- a/src/addon/mod/scorm/providers/scorm-sync.ts +++ b/src/addon/mod/scorm/providers/scorm-sync.ts @@ -443,20 +443,22 @@ export class AddonModScormSyncProvider extends CoreCourseActivitySyncBaseProvide /** * Try to synchronize all the SCORMs in a certain site or in all sites. * + * @param {boolean} force Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllScorms(siteId?: string): Promise { - return this.syncOnSites('all SCORMs', this.syncAllScormsFunc.bind(this), [], siteId); + syncAllScorms(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all SCORMs', this.syncAllScormsFunc.bind(this), [force], siteId); } /** * Sync all SCORMs on a site. * - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {string} siteId Site ID to sync. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllScormsFunc(siteId?: string): Promise { + protected syncAllScormsFunc(siteId: string, force?: boolean): Promise { // Get all offline attempts. return this.scormOfflineProvider.getAllAttempts(siteId).then((attempts) => { @@ -481,7 +483,9 @@ export class AddonModScormSyncProvider extends CoreCourseActivitySyncBaseProvide if (!this.syncProvider.isBlocked(AddonModScormProvider.COMPONENT, scorm.id, siteId)) { promises.push(this.scormProvider.getScormById(scorm.courseId, scorm.id, '', false, siteId).then((scorm) => { - return this.syncScormIfNeeded(scorm, siteId).then((data) => { + const promise = force ? this.syncScorm(scorm, siteId) : this.syncScormIfNeeded(scorm, siteId); + + return promise.then((data) => { if (typeof data != 'undefined') { // We tried to sync. Send event. this.eventsProvider.trigger(AddonModScormSyncProvider.AUTO_SYNCED, { diff --git a/src/addon/mod/scorm/providers/sync-cron-handler.ts b/src/addon/mod/scorm/providers/sync-cron-handler.ts index 797eeb4bb..33999d0cb 100644 --- a/src/addon/mod/scorm/providers/sync-cron-handler.ts +++ b/src/addon/mod/scorm/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModScormSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.scormSync.syncAllScorms(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.scormSync.syncAllScorms(siteId, force); } /** diff --git a/src/addon/mod/survey/providers/sync-cron-handler.ts b/src/addon/mod/survey/providers/sync-cron-handler.ts index 1949d9e14..f3e2e9552 100644 --- a/src/addon/mod/survey/providers/sync-cron-handler.ts +++ b/src/addon/mod/survey/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModSurveySyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.surveySync.syncAllSurveys(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.surveySync.syncAllSurveys(siteId, force); } /** diff --git a/src/addon/mod/survey/providers/sync.ts b/src/addon/mod/survey/providers/sync.ts index d38b0a898..f9b070175 100644 --- a/src/addon/mod/survey/providers/sync.ts +++ b/src/addon/mod/survey/providers/sync.ts @@ -68,23 +68,29 @@ export class AddonModSurveySyncProvider extends CoreCourseActivitySyncBaseProvid * Try to synchronize all the surveys in a certain site or in all sites. * * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllSurveys(siteId?: string): Promise { - return this.syncOnSites('all surveys', this.syncAllSurveysFunc.bind(this), undefined, siteId); + syncAllSurveys(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all surveys', this.syncAllSurveysFunc.bind(this), [force], siteId); } /** * Sync all pending surveys on a site. - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * + * @param {string} siteId Site ID to sync. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllSurveysFunc(siteId?: string): Promise { + protected syncAllSurveysFunc(siteId: string, force?: boolean): Promise { // Get all survey answers pending to be sent in the site. return this.surveyOffline.getAllData(siteId).then((entries) => { // Sync all surveys. const promises = entries.map((entry) => { - return this.syncSurveyIfNeeded(entry.surveyid, entry.userid, siteId).then((result) => { + const promise = force ? this.syncSurvey(entry.surveyid, entry.userid, siteId) : + this.syncSurveyIfNeeded(entry.surveyid, entry.userid, siteId); + + return promise.then((result) => { if (result && result.answersSent) { // Sync successful, send event. this.eventsProvider.trigger(AddonModSurveySyncProvider.AUTO_SYNCED, { diff --git a/src/addon/mod/wiki/providers/sync-cron-handler.ts b/src/addon/mod/wiki/providers/sync-cron-handler.ts index ce1fa6980..c74a439fe 100644 --- a/src/addon/mod/wiki/providers/sync-cron-handler.ts +++ b/src/addon/mod/wiki/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModWikiSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.wikiSync.syncAllWikis(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.wikiSync.syncAllWikis(siteId, force); } /** diff --git a/src/addon/mod/wiki/providers/wiki-sync.ts b/src/addon/mod/wiki/providers/wiki-sync.ts index cfd37e1a0..9fa0200c9 100644 --- a/src/addon/mod/wiki/providers/wiki-sync.ts +++ b/src/addon/mod/wiki/providers/wiki-sync.ts @@ -143,19 +143,21 @@ export class AddonModWikiSyncProvider extends CoreSyncBaseProvider { * Try to synchronize all the wikis in a certain site or in all sites. * * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllWikis(siteId?: string): Promise { - return this.syncOnSites('all wikis', this.syncAllWikisFunc.bind(this), [], siteId); + syncAllWikis(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all wikis', this.syncAllWikisFunc.bind(this), [force], siteId); } /** * Sync all wikis on a site. * - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {string} siteId Site ID to sync. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllWikisFunc(siteId?: string): Promise { + protected syncAllWikisFunc(siteId: string, force?: boolean): Promise { // Get all the pages created in offline. return this.wikiOfflineProvider.getAllNewPages(siteId).then((pages) => { const promises = [], @@ -171,8 +173,10 @@ export class AddonModWikiSyncProvider extends CoreSyncBaseProvider { for (const id in subwikis) { const subwiki = subwikis[id]; - promises.push(this.syncSubwikiIfNeeded(subwiki.subwikiid, subwiki.wikiid, subwiki.userid, subwiki.groupid, - siteId).then((result) => { + const promise = force ? this.syncSubwiki(subwiki.subwikiid, subwiki.wikiid, subwiki.userid, subwiki.groupid, siteId) + : this.syncSubwikiIfNeeded(subwiki.subwikiid, subwiki.wikiid, subwiki.userid, subwiki.groupid, siteId); + + promises.push(promise.then((result) => { if (result && result.updated) { // Sync successful, send event. diff --git a/src/addon/mod/workshop/providers/sync-cron-handler.ts b/src/addon/mod/workshop/providers/sync-cron-handler.ts index 05f6a011f..3202ff253 100644 --- a/src/addon/mod/workshop/providers/sync-cron-handler.ts +++ b/src/addon/mod/workshop/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonModWorkshopSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.workshopSync.syncAllWorkshops(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.workshopSync.syncAllWorkshops(siteId, force); } /** diff --git a/src/addon/mod/workshop/providers/sync.ts b/src/addon/mod/workshop/providers/sync.ts index 74f7619cf..e30f6c387 100644 --- a/src/addon/mod/workshop/providers/sync.ts +++ b/src/addon/mod/workshop/providers/sync.ts @@ -76,25 +76,27 @@ export class AddonModWorkshopSyncProvider extends CoreSyncBaseProvider { * Try to synchronize all workshops that need it and haven't been synchronized in a while. * * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved when the sync is done. */ - syncAllWorkshops(siteId?: string): Promise { - return this.syncOnSites('all workshops', this.syncAllWorkshopsFunc.bind(this), [], siteId); + syncAllWorkshops(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all workshops', this.syncAllWorkshopsFunc.bind(this), [force], siteId); } /** * Sync all workshops on a site. * - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {string} siteId Site ID to sync. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllWorkshopsFunc(siteId?: string): Promise { + protected syncAllWorkshopsFunc(siteId: string, force?: boolean): Promise { return this.workshopOffline.getAllWorkshops(siteId).then((workshopIds) => { - const promises = []; - // Sync all workshops that haven't been synced for a while. - workshopIds.forEach((workshopId) => { - promises.push(this.syncWorkshopIfNeeded(workshopId, siteId).then((data) => { + const promises = workshopIds.map((workshopId) => { + const promise = force ? this.syncWorkshop(workshopId, siteId) : this.syncWorkshopIfNeeded(workshopId, siteId); + + return promise.then((data) => { if (data && data.updated) { // Sync done. Send event. this.eventsProvider.trigger(AddonModWorkshopSyncProvider.AUTO_SYNCED, { @@ -102,7 +104,7 @@ export class AddonModWorkshopSyncProvider extends CoreSyncBaseProvider { warnings: data.warnings }, siteId); } - })); + }); }); return Promise.all(promises); diff --git a/src/addon/notes/providers/notes-sync.ts b/src/addon/notes/providers/notes-sync.ts index 376e5b673..77b7039c3 100644 --- a/src/addon/notes/providers/notes-sync.ts +++ b/src/addon/notes/providers/notes-sync.ts @@ -48,19 +48,21 @@ export class AddonNotesSyncProvider extends CoreSyncBaseProvider { * Try to synchronize all the notes in a certain site or in all sites. * * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllNotes(siteId?: string): Promise { - return this.syncOnSites('all notes', this.syncAllNotesFunc.bind(this), [], siteId); + syncAllNotes(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('all notes', this.syncAllNotesFunc.bind(this), [force], siteId); } /** * Synchronize all the notes in a certain site * * @param {string} siteId Site ID to sync. + * @param {boolean} force Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - private syncAllNotesFunc(siteId: string): Promise { + private syncAllNotesFunc(siteId: string, force: boolean): Promise { return this.notesOffline.getAllNotes(siteId).then((notes) => { // Get all the courses to be synced. const courseIds = []; @@ -72,7 +74,9 @@ export class AddonNotesSyncProvider extends CoreSyncBaseProvider { // Sync all courses. const promises = courseIds.map((courseId) => { - return this.syncNotesIfNeeded(courseId, siteId).then((warnings) => { + const promise = force ? this.syncNotes(courseId, siteId) : this.syncNotesIfNeeded(courseId, siteId); + + return promise.then((warnings) => { if (typeof warnings != 'undefined') { // Sync successful, send event. this.eventsProvider.trigger(AddonNotesSyncProvider.AUTO_SYNCED, { diff --git a/src/addon/notes/providers/sync-cron-handler.ts b/src/addon/notes/providers/sync-cron-handler.ts index 25d5d2c24..dcd1ad5d6 100644 --- a/src/addon/notes/providers/sync-cron-handler.ts +++ b/src/addon/notes/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class AddonNotesSyncCronHandler implements CoreCronHandler { * Receives the ID of the site affected, undefined for all sites. * * @param {string} [siteId] ID of the site affected, undefined for all sites. - * @return {Promise} Promise resolved when done, rejected if failure. + * @param {boolean} [force] Wether the execution is forced (manual sync). + * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { - return this.notesSync.syncAllNotes(siteId); + execute(siteId?: string, force?: boolean): Promise { + return this.notesSync.syncAllNotes(siteId, force); } /** diff --git a/src/addon/notifications/providers/cron-handler.ts b/src/addon/notifications/providers/cron-handler.ts index 78f317c41..e58c11898 100644 --- a/src/addon/notifications/providers/cron-handler.ts +++ b/src/addon/notifications/providers/cron-handler.ts @@ -65,12 +65,14 @@ export class AddonNotificationsCronHandler implements CoreCronHandler { /** * Execute the process. + * Receives the ID of the site affected, undefined for all sites. * - * @param {string} [siteId] ID of the site affected. If not defined, all sites. - * @return {Promise} Promise resolved when done. If the promise is rejected, this function will be called again often, - * it shouldn't be abused. + * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). + * @return {Promise} Promise resolved when done, rejected if failure. If the promise is rejected, this function + * will be called again often, it shouldn't be abused. */ - execute(siteId?: string): Promise { + execute(siteId?: string, force?: boolean): Promise { if (this.sitesProvider.isCurrentSite(siteId)) { this.eventsProvider.trigger(AddonNotificationsProvider.READ_CRON_EVENT, {}, this.sitesProvider.getCurrentSiteId()); } diff --git a/src/core/course/providers/log-cron-handler.ts b/src/core/course/providers/log-cron-handler.ts index c04dea1b7..063a37ea6 100644 --- a/src/core/course/providers/log-cron-handler.ts +++ b/src/core/course/providers/log-cron-handler.ts @@ -28,12 +28,13 @@ export class CoreCourseLogCronHandler implements CoreCronHandler { /** * Execute the process. - * Receives the ID of the site affected, undefined for the current site. + * Receives the ID of the site affected, undefined for all sites. * - * @param {string} [siteId] ID of the site affected, undefined for the current site. + * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { + execute(siteId?: string, force?: boolean): Promise { return this.sitesProvider.getSite(siteId).then((site) => { return this.courseProvider.logView(site.getSiteHomeId(), undefined, site.getId()); }); diff --git a/src/core/course/providers/sync-cron-handler.ts b/src/core/course/providers/sync-cron-handler.ts index 4e85dd398..1ea0b3784 100644 --- a/src/core/course/providers/sync-cron-handler.ts +++ b/src/core/course/providers/sync-cron-handler.ts @@ -30,10 +30,11 @@ export class CoreCourseSyncCronHandler implements CoreCronHandler { * Execute the process. * Receives the ID of the site affected, undefined for all sites. * - * @param {string} [siteId] ID of the site affected, undefined for all sites. - * @return {Promise} Promise resolved when done, rejected if failure. + * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). + * @return {Promise} Promise resolved when done, rejected if failure. */ - execute(siteId?: string): Promise { + execute(siteId?: string, force?: boolean): Promise { const promises = []; // Sync activity logs even if the activity does not have sync handler. // This will sync all the activity logs even if there's nothing else to sync and also recources. diff --git a/src/core/course/providers/sync.ts b/src/core/course/providers/sync.ts index 058fba729..14c66dd08 100644 --- a/src/core/course/providers/sync.ts +++ b/src/core/course/providers/sync.ts @@ -62,11 +62,9 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { */ protected syncAllCoursesFunc(siteId?: string): Promise { return this.courseOffline.getAllManualCompletions(siteId).then((completions) => { - const promises = []; - // Sync all courses. - completions.forEach((completion) => { - promises.push(this.syncCourseIfNeeded(completion.courseid, siteId).then((result) => { + const promises = completions.map((completion) => { + return this.syncCourseIfNeeded(completion.courseid, siteId).then((result) => { if (result && result.updated) { // Sync successful, send event. this.eventsProvider.trigger(CoreCourseSyncProvider.AUTO_SYNCED, { @@ -74,8 +72,10 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { warnings: result.warnings }, siteId); } - })); + }); }); + + return Promise.all(promises); }); } diff --git a/src/core/rating/providers/sync.ts b/src/core/rating/providers/sync.ts index 0f34ce359..341797fe2 100644 --- a/src/core/rating/providers/sync.ts +++ b/src/core/rating/providers/sync.ts @@ -59,19 +59,23 @@ export class CoreRatingSyncProvider extends CoreSyncBaseProvider { * @param {string} [contextLevel] Context level: course, module, user, etc. * @param {numnber} [instanceId] Context instance id. * @param {number} [itemSetId] Item set id. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ syncRatings(component: string, ratingArea: string, contextLevel?: string, instanceId?: number, itemSetId?: number, - siteId?: string): Promise<{itemSet: CoreRatingItemSet, updated: number[], warnings: string[]}[]> { + force?: boolean, siteId?: string): Promise<{itemSet: CoreRatingItemSet, updated: number[], warnings: string[]}[]> { siteId = siteId || this.sitesProvider.getCurrentSiteId(); return this.ratingOffline.getItemSets(component, ratingArea, contextLevel, instanceId, itemSetId, siteId) .then((itemSets) => { const results = []; const promises = itemSets.map((itemSet) => { - return this.syncItemSetIfNeeded(component, ratingArea, itemSet.contextLevel, itemSet.instanceId, - itemSet.itemSetId, siteId).then((result) => { + const promise = force ? this.syncItemSet(component, ratingArea, itemSet.contextLevel, itemSet.instanceId, + itemSet.itemSetId, siteId) : this.syncItemSetIfNeeded(component, ratingArea, itemSet.contextLevel, + itemSet.instanceId, itemSet.itemSetId, siteId); + + return promise.then((result) => { if (result.updated) { // Sync successful, send event. this.eventsProvider.trigger(CoreRatingSyncProvider.SYNCED_EVENT, { diff --git a/src/providers/cron.ts b/src/providers/cron.ts index 99d12b95d..b29bc654f 100644 --- a/src/providers/cron.ts +++ b/src/providers/cron.ts @@ -63,10 +63,11 @@ export interface CoreCronHandler { * Execute the process. * * @param {string} [siteId] ID of the site affected. If not defined, all sites. + * @param {boolean} [force] Determines if it's a forced execution. * @return {Promise} Promise resolved when done. If the promise is rejected, this function will be called again often, * it shouldn't be abused. */ - execute?(siteId?: string): Promise; + execute?(siteId?: string, force?: boolean): Promise; /** * Whether the handler is running. Used internally by the provider, there's no need to set it. @@ -181,7 +182,7 @@ export class CoreCronDelegate { this.queuePromise = this.queuePromise.catch(() => { // Ignore errors in previous handlers. }).then(() => { - return this.executeHandler(name, siteId).then(() => { + return this.executeHandler(name, force, siteId).then(() => { this.logger.debug(`Execution of handler '${name}' was a success.`); return this.setHandlerLastExecutionTime(name, Date.now()).then(() => { @@ -204,16 +205,18 @@ export class CoreCronDelegate { * Run a handler, cancelling the execution if it takes more than MAX_TIME_PROCESS. * * @param {string} name Name of the handler. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @param {string} [siteId] Site ID. If not defined, all sites. * @return {Promise} Promise resolved when the handler finishes or reaches max time, rejected if it fails. */ - protected executeHandler(name: string, siteId?: string): Promise { + protected executeHandler(name: string, force?: boolean, siteId?: string): Promise { return new Promise((resolve, reject): void => { let cancelTimeout; this.logger.debug('Executing handler: ' + name); + // Wrap the call in Promise.resolve to make sure it's a promise. - Promise.resolve(this.handlers[name].execute(siteId)).then(resolve).catch(reject).finally(() => { + Promise.resolve(this.handlers[name].execute(siteId, force)).then(resolve).catch(reject).finally(() => { clearTimeout(cancelTimeout); }); From a26fbeab92bfdef8ab7d857320efd6569d12398b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 6 Mar 2019 10:44:57 +0100 Subject: [PATCH 009/263] MOBILE-2873 sync: Fix course log syncing --- src/core/course/providers/log-helper.ts | 2 +- .../course/providers/sync-cron-handler.ts | 12 ++------- src/core/course/providers/sync.ts | 25 ++++++++++++------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/core/course/providers/log-helper.ts b/src/core/course/providers/log-helper.ts index 9ec8ea25b..89b76231f 100644 --- a/src/core/course/providers/log-helper.ts +++ b/src/core/course/providers/log-helper.ts @@ -227,7 +227,7 @@ export class CoreCourseLogHelperProvider { * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - syncAll(siteId?: string): Promise { + syncSite(siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const siteId = site.getId(); diff --git a/src/core/course/providers/sync-cron-handler.ts b/src/core/course/providers/sync-cron-handler.ts index 1ea0b3784..8f3adc3a6 100644 --- a/src/core/course/providers/sync-cron-handler.ts +++ b/src/core/course/providers/sync-cron-handler.ts @@ -15,7 +15,6 @@ import { Injectable } from '@angular/core'; import { CoreCronHandler } from '@providers/cron'; import { CoreCourseSyncProvider } from './sync'; -import { CoreCourseLogHelperProvider } from './log-helper'; /** * Synchronization cron handler. @@ -24,7 +23,7 @@ import { CoreCourseLogHelperProvider } from './log-helper'; export class CoreCourseSyncCronHandler implements CoreCronHandler { name = 'CoreCourseSyncCronHandler'; - constructor(private courseSync: CoreCourseSyncProvider, private logHelper: CoreCourseLogHelperProvider) {} + constructor(private courseSync: CoreCourseSyncProvider) {} /** * Execute the process. @@ -35,14 +34,7 @@ export class CoreCourseSyncCronHandler implements CoreCronHandler { * @return {Promise} Promise resolved when done, rejected if failure. */ execute(siteId?: string, force?: boolean): Promise { - const promises = []; - // Sync activity logs even if the activity does not have sync handler. - // This will sync all the activity logs even if there's nothing else to sync and also recources. - promises.push(this.logHelper.syncAll(siteId)); - - promises.push(this.courseSync.syncAllCourses(siteId)); - - return Promise.all(promises); + return this.courseSync.syncAllCourses(siteId); } /** diff --git a/src/core/course/providers/sync.ts b/src/core/course/providers/sync.ts index 14c66dd08..887eaa1c0 100644 --- a/src/core/course/providers/sync.ts +++ b/src/core/course/providers/sync.ts @@ -13,18 +13,19 @@ // limitations under the License. import { Injectable } from '@angular/core'; -import { CoreLoggerProvider } from '@providers/logger'; +import { TranslateService } from '@ngx-translate/core'; import { CoreSyncBaseProvider } from '@classes/base-sync'; +import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreAppProvider } from '@providers/app'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; +import { CoreEventsProvider } from '@providers/events'; +import { CoreSyncProvider } from '@providers/sync'; import { CoreCourseOfflineProvider } from './course-offline'; import { CoreCourseProvider } from './course'; -import { CoreEventsProvider } from '@providers/events'; -import { TranslateService } from '@ngx-translate/core'; -import { CoreSyncProvider } from '@providers/sync'; +import { CoreCourseLogHelperProvider } from './log-helper'; /** * Service to sync course offline data. This only syncs the offline data of the course itself, not the offline data of @@ -39,7 +40,7 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { protected appProvider: CoreAppProvider, private courseOffline: CoreCourseOfflineProvider, private eventsProvider: CoreEventsProvider, private courseProvider: CoreCourseProvider, translate: TranslateService, private utils: CoreUtilsProvider, protected textUtils: CoreTextUtilsProvider, - syncProvider: CoreSyncProvider, timeUtils: CoreTimeUtilsProvider) { + syncProvider: CoreSyncProvider, timeUtils: CoreTimeUtilsProvider, protected logHelper: CoreCourseLogHelperProvider) { super('CoreCourseSyncProvider', loggerProvider, sitesProvider, appProvider, syncProvider, textUtils, translate, timeUtils); } @@ -61,9 +62,13 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ protected syncAllCoursesFunc(siteId?: string): Promise { - return this.courseOffline.getAllManualCompletions(siteId).then((completions) => { + const p1 = []; + + p1.push(this.logHelper.syncSite(siteId)); + + p1.push(this.courseOffline.getAllManualCompletions(siteId).then((completions) => { // Sync all courses. - const promises = completions.map((completion) => { + const p2 = completions.map((completion) => { return this.syncCourseIfNeeded(completion.courseid, siteId).then((result) => { if (result && result.updated) { // Sync successful, send event. @@ -75,8 +80,10 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { }); }); - return Promise.all(promises); - }); + return Promise.all(p2); + })); + + return Promise.all(p1); } /** From 910ee50600eb64747aba16e550ceeb17fca0f166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 5 Mar 2019 17:09:07 +0100 Subject: [PATCH 010/263] MOBILE-2873 sync: Sync activities on course prefetch --- .../mod/assign/providers/prefetch-handler.ts | 15 ++++++- .../mod/choice/providers/prefetch-handler.ts | 22 +++++++++- src/addon/mod/choice/providers/sync.ts | 5 ++- src/addon/mod/data/components/index/index.ts | 15 ++----- .../mod/data/providers/prefetch-handler.ts | 24 ++++++++++- src/addon/mod/data/providers/sync.ts | 7 ++-- .../feedback/providers/prefetch-handler.ts | 23 ++++++++++- src/addon/mod/forum/components/index/index.ts | 13 +----- .../mod/forum/providers/prefetch-handler.ts | 26 +++++++++++- .../mod/glossary/components/index/index.ts | 15 ++----- .../glossary/providers/prefetch-handler.ts | 25 ++++++++++- src/addon/mod/glossary/providers/sync.ts | 7 ++-- .../mod/lesson/providers/prefetch-handler.ts | 22 +++++++++- .../mod/quiz/providers/prefetch-handler.ts | 15 +++++++ .../mod/scorm/providers/prefetch-handler.ts | 22 +++++++++- .../mod/survey/providers/prefetch-handler.ts | 22 +++++++++- src/addon/mod/survey/providers/sync.ts | 5 ++- .../mod/wiki/providers/prefetch-handler.ts | 15 ++++++- .../workshop/providers/prefetch-handler.ts | 15 ++++++- src/core/course/providers/helper.ts | 25 ++++++----- .../providers/module-prefetch-delegate.ts | 41 ++++++++++++++++++- 21 files changed, 306 insertions(+), 73 deletions(-) diff --git a/src/addon/mod/assign/providers/prefetch-handler.ts b/src/addon/mod/assign/providers/prefetch-handler.ts index cae9b6fec..1cc2a6faa 100644 --- a/src/addon/mod/assign/providers/prefetch-handler.ts +++ b/src/addon/mod/assign/providers/prefetch-handler.ts @@ -28,6 +28,7 @@ import { CoreGradesHelperProvider } from '@core/grades/providers/helper'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonModAssignProvider } from './assign'; import { AddonModAssignHelperProvider } from './helper'; +import { AddonModAssignSyncProvider } from './assign-sync'; import { AddonModAssignFeedbackDelegate } from './feedback-delegate'; import { AddonModAssignSubmissionDelegate } from './submission-delegate'; @@ -47,7 +48,8 @@ export class AddonModAssignPrefetchHandler extends CoreCourseActivityPrefetchHan protected textUtils: CoreTextUtilsProvider, protected feedbackDelegate: AddonModAssignFeedbackDelegate, protected submissionDelegate: AddonModAssignSubmissionDelegate, protected courseHelper: CoreCourseHelperProvider, protected groupsProvider: CoreGroupsProvider, protected gradesHelper: CoreGradesHelperProvider, - protected userProvider: CoreUserProvider, protected assignHelper: AddonModAssignHelperProvider) { + protected userProvider: CoreUserProvider, protected assignHelper: AddonModAssignHelperProvider, + protected syncProvider: AddonModAssignSyncProvider) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -454,4 +456,15 @@ export class AddonModAssignPrefetchHandler extends CoreCourseActivityPrefetchHan return Promise.all(promises); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + return this.syncProvider.syncAssign(module.instance, siteId); + } } diff --git a/src/addon/mod/choice/providers/prefetch-handler.ts b/src/addon/mod/choice/providers/prefetch-handler.ts index 0b2f74eba..c12bf6902 100644 --- a/src/addon/mod/choice/providers/prefetch-handler.ts +++ b/src/addon/mod/choice/providers/prefetch-handler.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Injectable } from '@angular/core'; +import { Injectable, Injector } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; @@ -22,6 +22,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/activity-prefetch-handler'; import { CoreUserProvider } from '@core/user/providers/user'; +import { AddonModChoiceSyncProvider } from './sync'; import { AddonModChoiceProvider } from './choice'; /** @@ -34,10 +35,12 @@ export class AddonModChoicePrefetchHandler extends CoreCourseActivityPrefetchHan component = AddonModChoiceProvider.COMPONENT; updatesNames = /^configuration$|^.*files$|^answers$/; + protected syncProvider: AddonModChoiceSyncProvider; // It will be injected later to prevent circular dependencies. + constructor(translate: TranslateService, appProvider: CoreAppProvider, utils: CoreUtilsProvider, courseProvider: CoreCourseProvider, filepoolProvider: CoreFilepoolProvider, sitesProvider: CoreSitesProvider, domUtils: CoreDomUtilsProvider, protected choiceProvider: AddonModChoiceProvider, - protected userProvider: CoreUserProvider) { + protected userProvider: CoreUserProvider, protected injector: Injector) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -133,4 +136,19 @@ export class AddonModChoicePrefetchHandler extends CoreCourseActivityPrefetchHan invalidateModule(module: any, courseId: number): Promise { return this.choiceProvider.invalidateChoiceData(courseId); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + if (!this.syncProvider) { + this.syncProvider = this.injector.get(AddonModChoiceSyncProvider); + } + + return this.syncProvider.syncChoice(module.instance, undefined, siteId); + } } diff --git a/src/addon/mod/choice/providers/sync.ts b/src/addon/mod/choice/providers/sync.ts index bcdc0b848..5d7e82d7f 100644 --- a/src/addon/mod/choice/providers/sync.ts +++ b/src/addon/mod/choice/providers/sync.ts @@ -127,12 +127,13 @@ export class AddonModChoiceSyncProvider extends CoreCourseActivitySyncBaseProvid * Synchronize a choice. * * @param {number} choiceId Choice ID to be synced. - * @param {number} userId User the answers belong to. + * @param {number} [userId] User the answers belong to. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved if sync is successful, rejected otherwise. */ - syncChoice(choiceId: number, userId: number, siteId?: string): Promise { + syncChoice(choiceId: number, userId?: number, siteId?: string): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); + userId = userId || this.sitesProvider.getCurrentSiteUserId(); const syncId = this.getSyncId(choiceId, userId); if (this.isSyncing(syncId, siteId)) { diff --git a/src/addon/mod/data/components/index/index.ts b/src/addon/mod/data/components/index/index.ts index ddd5975a9..caaae195f 100644 --- a/src/addon/mod/data/components/index/index.ts +++ b/src/addon/mod/data/components/index/index.ts @@ -27,6 +27,7 @@ import { AddonModDataHelperProvider } from '../../providers/helper'; import { AddonModDataOfflineProvider } from '../../providers/offline'; import { AddonModDataSyncProvider } from '../../providers/sync'; import { AddonModDataComponentsModule } from '../components.module'; +import { AddonModDataPrefetchHandler } from '../../providers/prefetch-handler'; /** * Component that displays a data index page. @@ -82,7 +83,7 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp constructor(injector: Injector, private dataProvider: AddonModDataProvider, private dataHelper: AddonModDataHelperProvider, private dataOffline: AddonModDataOfflineProvider, @Optional() content: Content, - private dataSync: AddonModDataSyncProvider, private timeUtils: CoreTimeUtilsProvider, + private prefetchHandler: AddonModDataPrefetchHandler, private timeUtils: CoreTimeUtilsProvider, private groupsProvider: CoreGroupsProvider, private commentsProvider: CoreCommentsProvider, private modalCtrl: ModalController, private utils: CoreUtilsProvider, protected navCtrl: NavController, private ratingOffline: CoreRatingOfflineProvider) { @@ -520,17 +521,7 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp * @return {Promise} Promise resolved when done. */ protected sync(): Promise { - const promises = [ - this.dataSync.syncDatabase(this.data.id), - this.dataSync.syncRatings(this.data.coursemodule) - ]; - - return Promise.all(promises).then((results) => { - return results.reduce((a, b) => ({ - updated: a.updated || b.updated, - warnings: (a.warnings || []).concat(b.warnings || []), - }), {updated: false}); - }); + return this.prefetchHandler.sync(this.module); } /** diff --git a/src/addon/mod/data/providers/prefetch-handler.ts b/src/addon/mod/data/providers/prefetch-handler.ts index 85c54d10e..8ac16c797 100644 --- a/src/addon/mod/data/providers/prefetch-handler.ts +++ b/src/addon/mod/data/providers/prefetch-handler.ts @@ -26,6 +26,7 @@ import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/activity-prefetch-handler'; import { CoreRatingProvider } from '@core/rating/providers/rating'; import { AddonModDataProvider } from './data'; +import { AddonModDataSyncProvider } from './sync'; import { AddonModDataHelperProvider } from './helper'; /** @@ -43,7 +44,7 @@ export class AddonModDataPrefetchHandler extends CoreCourseActivityPrefetchHandl domUtils: CoreDomUtilsProvider, protected dataProvider: AddonModDataProvider, protected timeUtils: CoreTimeUtilsProvider, protected dataHelper: AddonModDataHelperProvider, protected groupsProvider: CoreGroupsProvider, protected commentsProvider: CoreCommentsProvider, - private ratingProvider: CoreRatingProvider) { + private ratingProvider: CoreRatingProvider, protected syncProvider: AddonModDataSyncProvider) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -301,4 +302,25 @@ export class AddonModDataPrefetchHandler extends CoreCourseActivityPrefetchHandl return Promise.all(promises); }); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + const promises = [ + this.syncProvider.syncDatabase(module.instance, siteId), + this.syncProvider.syncRatings(module.id, true, siteId) + ]; + + return Promise.all(promises).then((results) => { + return results.reduce((a, b) => ({ + updated: a.updated || b.updated, + warnings: (a.warnings || []).concat(b.warnings || []), + }), {updated: false}); + }); + } } diff --git a/src/addon/mod/data/providers/sync.ts b/src/addon/mod/data/providers/sync.ts index 6b5768adf..cb1465820 100644 --- a/src/addon/mod/data/providers/sync.ts +++ b/src/addon/mod/data/providers/sync.ts @@ -114,7 +114,7 @@ export class AddonModDataSyncProvider extends CoreSyncBaseProvider { return Promise.all(this.utils.objectToArray(promises)); })); - promises.push(this.syncRatings(undefined, siteId)); + promises.push(this.syncRatings(undefined, force, siteId)); return Promise.all(promises); } @@ -362,13 +362,14 @@ export class AddonModDataSyncProvider extends CoreSyncBaseProvider { * Synchronize offline ratings. * * @param {number} [cmId] Course module to be synced. If not defined, sync all databases. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved if sync is successful, rejected otherwise. */ - syncRatings(cmId?: number, siteId?: string): Promise { + syncRatings(cmId?: number, force?: boolean, siteId?: string): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); - return this.ratingSync.syncRatings('mod_data', 'entry', 'module', cmId, 0, siteId).then((results) => { + return this.ratingSync.syncRatings('mod_data', 'entry', 'module', cmId, 0, force, siteId).then((results) => { let updated = false; const warnings = []; const promises = []; diff --git a/src/addon/mod/feedback/providers/prefetch-handler.ts b/src/addon/mod/feedback/providers/prefetch-handler.ts index ab9528fc7..2e6d0ed7a 100644 --- a/src/addon/mod/feedback/providers/prefetch-handler.ts +++ b/src/addon/mod/feedback/providers/prefetch-handler.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Injectable } from '@angular/core'; +import { Injectable, Injector } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; @@ -25,6 +25,7 @@ import { AddonModFeedbackProvider } from './feedback'; import { AddonModFeedbackHelperProvider } from './helper'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreGroupsProvider } from '@providers/groups'; +import { AddonModFeedbackSyncProvider } from './sync'; import { CoreUserProvider } from '@core/user/providers/user'; /** @@ -37,11 +38,14 @@ export class AddonModFeedbackPrefetchHandler extends CoreCourseActivityPrefetchH component = AddonModFeedbackProvider.COMPONENT; updatesNames = /^configuration$|^.*files$|^attemptsfinished|^attemptsunfinished$/; + protected syncProvider: AddonModFeedbackSyncProvider; // It will be injected later to prevent circular dependencies. + constructor(translate: TranslateService, appProvider: CoreAppProvider, utils: CoreUtilsProvider, courseProvider: CoreCourseProvider, filepoolProvider: CoreFilepoolProvider, sitesProvider: CoreSitesProvider, domUtils: CoreDomUtilsProvider, protected feedbackProvider: AddonModFeedbackProvider, protected userProvider: CoreUserProvider, protected feedbackHelper: AddonModFeedbackHelperProvider, - protected timeUtils: CoreTimeUtilsProvider, protected groupsProvider: CoreGroupsProvider) { + protected timeUtils: CoreTimeUtilsProvider, protected groupsProvider: CoreGroupsProvider, + protected injector: Injector) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -239,4 +243,19 @@ export class AddonModFeedbackPrefetchHandler extends CoreCourseActivityPrefetchH }); }); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + if (!this.syncProvider) { + this.syncProvider = this.injector.get(AddonModFeedbackSyncProvider); + } + + return this.syncProvider.syncFeedback(module.instance, siteId); + } } diff --git a/src/addon/mod/forum/components/index/index.ts b/src/addon/mod/forum/components/index/index.ts index 036697410..38551d2ff 100644 --- a/src/addon/mod/forum/components/index/index.ts +++ b/src/addon/mod/forum/components/index/index.ts @@ -376,18 +376,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom * @return {Promise} Promise resolved when done. */ protected sync(): Promise { - const promises = []; - - promises.push(this.forumSync.syncForumDiscussions(this.forum.id)); - promises.push(this.forumSync.syncForumReplies(this.forum.id)); - promises.push(this.forumSync.syncRatings(this.forum.cmid)); - - return Promise.all(promises).then((results) => { - return results.reduce((a, b) => ({ - updated: a.updated || b.updated, - warnings: (a.warnings || []).concat(b.warnings || []), - }), {updated: false}); - }); + return this.prefetchHandler.sync(this.module); } /** diff --git a/src/addon/mod/forum/providers/prefetch-handler.ts b/src/addon/mod/forum/providers/prefetch-handler.ts index 03e60a6ba..1da5e7b71 100644 --- a/src/addon/mod/forum/providers/prefetch-handler.ts +++ b/src/addon/mod/forum/providers/prefetch-handler.ts @@ -24,6 +24,7 @@ import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/acti import { CoreGroupsProvider } from '@providers/groups'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonModForumProvider } from './forum'; +import { AddonModForumSyncProvider } from './sync'; import { CoreRatingProvider } from '@core/rating/providers/rating'; /** @@ -46,7 +47,8 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand private groupsProvider: CoreGroupsProvider, private userProvider: CoreUserProvider, private forumProvider: AddonModForumProvider, - private ratingProvider: CoreRatingProvider) { + private ratingProvider: CoreRatingProvider, + private syncProvider: AddonModForumSyncProvider) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -264,4 +266,26 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand } }); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + const promises = []; + + promises.push(this.syncProvider.syncForumDiscussions(module.instance, undefined, siteId)); + promises.push(this.syncProvider.syncForumReplies(module.instance, undefined, siteId)); + promises.push(this.syncProvider.syncRatings(module.id, undefined, true, siteId)); + + return Promise.all(promises).then((results) => { + return results.reduce((a, b) => ({ + updated: a.updated || b.updated, + warnings: (a.warnings || []).concat(b.warnings || []), + }), {updated: false}); + }); + } } diff --git a/src/addon/mod/glossary/components/index/index.ts b/src/addon/mod/glossary/components/index/index.ts index e05699f71..f44df70c6 100644 --- a/src/addon/mod/glossary/components/index/index.ts +++ b/src/addon/mod/glossary/components/index/index.ts @@ -23,6 +23,7 @@ import { AddonModGlossaryProvider } from '../../providers/glossary'; import { AddonModGlossaryOfflineProvider } from '../../providers/offline'; import { AddonModGlossarySyncProvider } from '../../providers/sync'; import { AddonModGlossaryModePickerPopoverComponent } from '../mode-picker/mode-picker'; +import { AddonModGlossaryPrefetchHandler } from '../../providers/prefetch-handler'; type FetchMode = 'author_all' | 'cat_all' | 'newest_first' | 'recently_updated' | 'search' | 'letter_all'; @@ -68,7 +69,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity private popoverCtrl: PopoverController, private glossaryProvider: AddonModGlossaryProvider, private glossaryOffline: AddonModGlossaryOfflineProvider, - private glossarySync: AddonModGlossarySyncProvider, + private prefetchHandler: AddonModGlossaryPrefetchHandler, private ratingOffline: CoreRatingOfflineProvider) { super(injector); } @@ -219,17 +220,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity * @return {Promise} Promise resolved when done. */ protected sync(): Promise { - const promises = [ - this.glossarySync.syncGlossaryEntries(this.glossary.id), - this.glossarySync.syncRatings(this.glossary.coursemodule) - ]; - - return Promise.all(promises).then((results) => { - return results.reduce((a, b) => ({ - updated: a.updated || b.updated, - warnings: (a.warnings || []).concat(b.warnings || []), - }), {updated: false}); - }); + return this.prefetchHandler.sync(this.module); } /** diff --git a/src/addon/mod/glossary/providers/prefetch-handler.ts b/src/addon/mod/glossary/providers/prefetch-handler.ts index 024fece96..2436dd1b8 100644 --- a/src/addon/mod/glossary/providers/prefetch-handler.ts +++ b/src/addon/mod/glossary/providers/prefetch-handler.ts @@ -24,6 +24,7 @@ import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/acti import { CoreUserProvider } from '@core/user/providers/user'; import { AddonModGlossaryProvider } from './glossary'; import { CoreRatingProvider } from '@core/rating/providers/rating'; +import { AddonModGlossarySyncProvider } from './sync'; /** * Handler to prefetch forums. @@ -44,7 +45,8 @@ export class AddonModGlossaryPrefetchHandler extends CoreCourseActivityPrefetchH domUtils: CoreDomUtilsProvider, private userProvider: CoreUserProvider, private ratingProvider: CoreRatingProvider, - private glossaryProvider: AddonModGlossaryProvider) { + private glossaryProvider: AddonModGlossaryProvider, + private syncProvider: AddonModGlossarySyncProvider) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -187,4 +189,25 @@ export class AddonModGlossaryPrefetchHandler extends CoreCourseActivityPrefetchH return Promise.all(promises); }); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + const promises = [ + this.syncProvider.syncGlossaryEntries(module.instance, undefined, siteId), + this.syncProvider.syncRatings(module.id, undefined, siteId) + ]; + + return Promise.all(promises).then((results) => { + return results.reduce((a, b) => ({ + updated: a.updated || b.updated, + warnings: (a.warnings || []).concat(b.warnings || []), + }), {updated: false}); + }); + } } diff --git a/src/addon/mod/glossary/providers/sync.ts b/src/addon/mod/glossary/providers/sync.ts index c3eefdafd..746563f67 100644 --- a/src/addon/mod/glossary/providers/sync.ts +++ b/src/addon/mod/glossary/providers/sync.ts @@ -118,7 +118,7 @@ export class AddonModGlossarySyncProvider extends CoreSyncBaseProvider { return Promise.all(this.utils.objectToArray(promises)); })); - promises.push(this.syncRatings(undefined, siteId)); + promises.push(this.syncRatings(undefined, force, siteId)); return Promise.all(promises); } @@ -259,13 +259,14 @@ export class AddonModGlossarySyncProvider extends CoreSyncBaseProvider { * Synchronize offline ratings. * * @param {number} [cmId] Course module to be synced. If not defined, sync all glossaries. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved if sync is successful, rejected otherwise. */ - syncRatings(cmId?: number, siteId?: string): Promise { + syncRatings(cmId?: number, force?: boolean, siteId?: string): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); - return this.ratingSync.syncRatings('mod_glossary', 'entry', 'module', cmId, 0, siteId).then((results) => { + return this.ratingSync.syncRatings('mod_glossary', 'entry', 'module', cmId, 0, force, siteId).then((results) => { let updated = false; const warnings = []; const promises = []; diff --git a/src/addon/mod/lesson/providers/prefetch-handler.ts b/src/addon/mod/lesson/providers/prefetch-handler.ts index 3660a90cd..cdc03d516 100644 --- a/src/addon/mod/lesson/providers/prefetch-handler.ts +++ b/src/addon/mod/lesson/providers/prefetch-handler.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Injectable } from '@angular/core'; +import { Injectable, Injector } from '@angular/core'; import { ModalController } from 'ionic-angular'; import { TranslateService } from '@ngx-translate/core'; import { CoreAppProvider } from '@providers/app'; @@ -24,6 +24,7 @@ import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreGroupsProvider } from '@providers/groups'; import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/activity-prefetch-handler'; import { AddonModLessonProvider } from './lesson'; +import { AddonModLessonSyncProvider } from './lesson-sync'; /** * Handler to prefetch lessons. @@ -36,10 +37,12 @@ export class AddonModLessonPrefetchHandler extends CoreCourseActivityPrefetchHan // Don't check timers to decrease positives. If a user performs some action it will be reflected in other items. updatesNames = /^configuration$|^.*files$|^grades$|^gradeitems$|^pages$|^answers$|^questionattempts$|^pagesviewed$/; + protected syncProvider: AddonModLessonSyncProvider; // It will be injected later to prevent circular dependencies. + constructor(translate: TranslateService, appProvider: CoreAppProvider, utils: CoreUtilsProvider, courseProvider: CoreCourseProvider, filepoolProvider: CoreFilepoolProvider, sitesProvider: CoreSitesProvider, domUtils: CoreDomUtilsProvider, protected modalCtrl: ModalController, protected groupsProvider: CoreGroupsProvider, - protected lessonProvider: AddonModLessonProvider) { + protected lessonProvider: AddonModLessonProvider, protected injector: Injector) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -429,4 +432,19 @@ export class AddonModLessonPrefetchHandler extends CoreCourseActivityPrefetchHan }); }); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + if (!this.syncProvider) { + this.syncProvider = this.injector.get(AddonModLessonSyncProvider); + } + + return this.syncProvider.syncLesson(module.instance, false, false, siteId); + } } diff --git a/src/addon/mod/quiz/providers/prefetch-handler.ts b/src/addon/mod/quiz/providers/prefetch-handler.ts index d292dc958..7a4387058 100644 --- a/src/addon/mod/quiz/providers/prefetch-handler.ts +++ b/src/addon/mod/quiz/providers/prefetch-handler.ts @@ -554,4 +554,19 @@ export class AddonModQuizPrefetchHandler extends CoreCourseActivityPrefetchHandl } }); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + if (!this.syncProvider) { + this.syncProvider = this.injector.get(AddonModQuizSyncProvider); + } + + return this.syncProvider.syncQuiz(module.instance, false, siteId); + } } diff --git a/src/addon/mod/scorm/providers/prefetch-handler.ts b/src/addon/mod/scorm/providers/prefetch-handler.ts index c6f19e138..161f3243c 100644 --- a/src/addon/mod/scorm/providers/prefetch-handler.ts +++ b/src/addon/mod/scorm/providers/prefetch-handler.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Injectable } from '@angular/core'; +import { Injectable, Injector } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; @@ -24,6 +24,7 @@ import { CoreFileProvider } from '@providers/file'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/activity-prefetch-handler'; import { AddonModScormProvider } from './scorm'; +import { AddonModScormSyncProvider } from './scorm-sync'; /** * Progress event used when downloading a SCORM. @@ -58,10 +59,12 @@ export class AddonModScormPrefetchHandler extends CoreCourseActivityPrefetchHand component = AddonModScormProvider.COMPONENT; updatesNames = /^configuration$|^.*files$|^tracks$/; + protected syncProvider: AddonModScormSyncProvider; // It will be injected later to prevent circular dependencies. + constructor(translate: TranslateService, appProvider: CoreAppProvider, utils: CoreUtilsProvider, courseProvider: CoreCourseProvider, filepoolProvider: CoreFilepoolProvider, sitesProvider: CoreSitesProvider, domUtils: CoreDomUtilsProvider, protected fileProvider: CoreFileProvider, protected textUtils: CoreTextUtilsProvider, - protected scormProvider: AddonModScormProvider) { + protected scormProvider: AddonModScormProvider, protected injector: Injector) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -423,4 +426,19 @@ export class AddonModScormPrefetchHandler extends CoreCourseActivityPrefetchHand return Promise.all(promises); }); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + if (!this.syncProvider) { + this.syncProvider = this.injector.get(AddonModScormSyncProvider); + } + + return this.syncProvider.syncScorm(module.instance, siteId); + } } diff --git a/src/addon/mod/survey/providers/prefetch-handler.ts b/src/addon/mod/survey/providers/prefetch-handler.ts index e6b785486..c1ffba84a 100644 --- a/src/addon/mod/survey/providers/prefetch-handler.ts +++ b/src/addon/mod/survey/providers/prefetch-handler.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Injectable } from '@angular/core'; +import { Injectable, Injector } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; @@ -22,6 +22,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/activity-prefetch-handler'; import { AddonModSurveyProvider } from './survey'; +import { AddonModSurveySyncProvider } from './sync'; import { AddonModSurveyHelperProvider } from './helper'; /** @@ -34,10 +35,12 @@ export class AddonModSurveyPrefetchHandler extends CoreCourseActivityPrefetchHan component = AddonModSurveyProvider.COMPONENT; updatesNames = /^configuration$|^.*files$|^answers$/; + protected syncProvider: AddonModSurveySyncProvider; // It will be injected later to prevent circular dependencies. + constructor(translate: TranslateService, appProvider: CoreAppProvider, utils: CoreUtilsProvider, courseProvider: CoreCourseProvider, filepoolProvider: CoreFilepoolProvider, sitesProvider: CoreSitesProvider, domUtils: CoreDomUtilsProvider, protected surveyProvider: AddonModSurveyProvider, - protected surveyHelper: AddonModSurveyHelperProvider) { + protected surveyHelper: AddonModSurveyHelperProvider, protected injector: Injector) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -126,4 +129,19 @@ export class AddonModSurveyPrefetchHandler extends CoreCourseActivityPrefetchHan return Promise.all(promises); }); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + if (!this.syncProvider) { + this.syncProvider = this.injector.get(AddonModSurveySyncProvider); + } + + return this.syncProvider.syncSurvey(module.instance, undefined, siteId); + } } diff --git a/src/addon/mod/survey/providers/sync.ts b/src/addon/mod/survey/providers/sync.ts index f9b070175..e2e459a18 100644 --- a/src/addon/mod/survey/providers/sync.ts +++ b/src/addon/mod/survey/providers/sync.ts @@ -130,12 +130,13 @@ export class AddonModSurveySyncProvider extends CoreCourseActivitySyncBaseProvid * Synchronize a survey. * * @param {number} surveyId Survey ID. - * @param {number} userId User the answers belong to. + * @param {number} [userId] User the answers belong to. If not defined, current user. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved if sync is successful, rejected otherwise. */ - syncSurvey(surveyId: number, userId: number, siteId?: string): Promise { + syncSurvey(surveyId: number, userId?: number, siteId?: string): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); + userId = userId || this.sitesProvider.getCurrentSiteUserId(); const syncId = this.getSyncId(surveyId, userId); if (this.isSyncing(syncId, siteId)) { diff --git a/src/addon/mod/wiki/providers/prefetch-handler.ts b/src/addon/mod/wiki/providers/prefetch-handler.ts index a8848db0c..02762895c 100644 --- a/src/addon/mod/wiki/providers/prefetch-handler.ts +++ b/src/addon/mod/wiki/providers/prefetch-handler.ts @@ -27,6 +27,7 @@ import { CoreCourseHelperProvider } from '@core/course/providers/helper'; import { CoreGradesHelperProvider } from '@core/grades/providers/helper'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonModWikiProvider } from './wiki'; +import { AddonModWikiSyncProvider } from './wiki-sync'; /** * Handler to prefetch wikis. @@ -42,7 +43,8 @@ export class AddonModWikiPrefetchHandler extends CoreCourseActivityPrefetchHandl courseProvider: CoreCourseProvider, filepoolProvider: CoreFilepoolProvider, sitesProvider: CoreSitesProvider, domUtils: CoreDomUtilsProvider, protected wikiProvider: AddonModWikiProvider, protected userProvider: CoreUserProvider, protected textUtils: CoreTextUtilsProvider, protected courseHelper: CoreCourseHelperProvider, - protected groupsProvider: CoreGroupsProvider, protected gradesHelper: CoreGradesHelperProvider) { + protected groupsProvider: CoreGroupsProvider, protected gradesHelper: CoreGradesHelperProvider, + protected syncProvider: AddonModWikiSyncProvider) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -210,4 +212,15 @@ export class AddonModWikiPrefetchHandler extends CoreCourseActivityPrefetchHandl return Promise.all(promises); }); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + return this.syncProvider.syncWiki(module.instance, module.course, module.id, siteId); + } } diff --git a/src/addon/mod/workshop/providers/prefetch-handler.ts b/src/addon/mod/workshop/providers/prefetch-handler.ts index ccdb6c4d2..b6da65262 100644 --- a/src/addon/mod/workshop/providers/prefetch-handler.ts +++ b/src/addon/mod/workshop/providers/prefetch-handler.ts @@ -24,6 +24,7 @@ import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/acti import { CoreGroupsProvider } from '@providers/groups'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonModWorkshopProvider } from './workshop'; +import { AddonModWorkshopSyncProvider } from './sync'; import { AddonModWorkshopHelperProvider } from './helper'; /** @@ -47,7 +48,8 @@ export class AddonModWorkshopPrefetchHandler extends CoreCourseActivityPrefetchH private groupsProvider: CoreGroupsProvider, private userProvider: CoreUserProvider, private workshopProvider: AddonModWorkshopProvider, - private workshopHelper: AddonModWorkshopHelperProvider) { + private workshopHelper: AddonModWorkshopHelperProvider, + private syncProvider: AddonModWorkshopSyncProvider) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -365,4 +367,15 @@ export class AddonModWorkshopPrefetchHandler extends CoreCourseActivityPrefetchH }); }); } + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync(module: any, siteId?: string): Promise { + return this.syncProvider.syncWorkshop(module.instance, siteId); + } } diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index a79546849..aca768b0d 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -294,6 +294,7 @@ export class CoreCourseHelperProvider { } return promise.then((sections) => { + // Confirm the download. return this.confirmDownloadSizeSection(course.id, undefined, sections, true).then(() => { // User confirmed, get the course handlers if needed. @@ -1317,18 +1318,22 @@ export class CoreCourseHelperProvider { section.isDownloading = true; - // Validate the section needs to be downloaded and calculate amount of modules that need to be downloaded. - promises.push(this.prefetchDelegate.getModulesStatus(section.modules, courseId, section.id).then((result) => { - if (result.status == CoreConstants.DOWNLOADED || result.status == CoreConstants.NOT_DOWNLOADABLE) { - // Section is downloaded or not downloadable, nothing to do. - return; - } + // Sync the modules first. + promises.push(this.prefetchDelegate.syncModules(section.modules).then(() => { + // Validate the section needs to be downloaded and calculate amount of modules that need to be downloaded. + return this.prefetchDelegate.getModulesStatus(section.modules, courseId, section.id).then((result) => { + if (result.status == CoreConstants.DOWNLOADED || result.status == CoreConstants.NOT_DOWNLOADABLE) { + // Section is downloaded or not downloadable, nothing to do. - return this.prefetchSingleSection(section, result, courseId); - }, (error) => { - section.isDownloading = false; + return ; + } - return Promise.reject(error); + return this.prefetchSingleSection(section, result, courseId); + }, (error) => { + section.isDownloading = false; + + return Promise.reject(error); + }); })); // Download the files in the section description. diff --git a/src/core/course/providers/module-prefetch-delegate.ts b/src/core/course/providers/module-prefetch-delegate.ts index 24ca8c933..7691f5276 100644 --- a/src/core/course/providers/module-prefetch-delegate.ts +++ b/src/core/course/providers/module-prefetch-delegate.ts @@ -206,6 +206,15 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler { * @return {Promise} Promise resolved when done. */ removeFiles?(module: any, courseId: number): Promise; + + /** + * Sync a module. + * + * @param {any} module Module. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + sync?(module: any, siteId?: any): Promise; } /** @@ -1139,12 +1148,42 @@ export class CoreCourseModulePrefetchDelegate extends CoreDelegate { // Check if the module has a prefetch handler. if (handler) { - return handler.prefetch(module, courseId, single); + return this.syncModule(module).then(() => { + return handler.prefetch(module, courseId, single); + }); } return Promise.resolve(); } + /** + * Sync a group of modules. + * + * @param {any[]} modules Array of modules to sync. + * @return {Promise} Promise resolved when finished. + */ + syncModules(modules: any[]): Promise { + return Promise.all(modules.map((module) => { + return this.syncModule(module); + })); + } + + /** + * Sync a module. + * + * @param {any} module Module to sync. + * @return {Promise} Promise resolved when finished. + */ + syncModule(module: any): Promise { + const handler = this.getPrefetchHandlerFor(module); + + const promise = handler && handler.sync ? handler.sync(module) : Promise.resolve(); + + return promise.catch(() => { + // Ignore errors. + }); + } + /** * Prefetches a list of modules using their prefetch handlers. * If a prefetch already exists for this site and id, returns the current promise. From 2469d903a73ac6f337b139b3e7d2187e0d7cf9e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 8 Mar 2019 10:24:08 +0100 Subject: [PATCH 011/263] MOBILE-2873 blog: Show blog icon on the tab bar if needed --- src/core/course/providers/sync.ts | 15 ++++++++++----- src/core/mainmenu/pages/menu/menu.scss | 16 ++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/core/course/providers/sync.ts b/src/core/course/providers/sync.ts index 887eaa1c0..2c091a863 100644 --- a/src/core/course/providers/sync.ts +++ b/src/core/course/providers/sync.ts @@ -49,19 +49,21 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { * Try to synchronize all the courses in a certain site or in all sites. * * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - syncAllCourses(siteId?: string): Promise { - return this.syncOnSites('courses', this.syncAllCoursesFunc.bind(this), undefined, siteId); + syncAllCourses(siteId?: string, force?: boolean): Promise { + return this.syncOnSites('courses', this.syncAllCoursesFunc.bind(this), [force], siteId); } /** * Sync all courses on a site. * - * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {string} siteId Site ID to sync. If not defined, sync all sites. + * @param {boolean} force Wether the execution is forced (manual sync). * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ - protected syncAllCoursesFunc(siteId?: string): Promise { + protected syncAllCoursesFunc(siteId: string, force: boolean): Promise { const p1 = []; p1.push(this.logHelper.syncSite(siteId)); @@ -69,7 +71,10 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { p1.push(this.courseOffline.getAllManualCompletions(siteId).then((completions) => { // Sync all courses. const p2 = completions.map((completion) => { - return this.syncCourseIfNeeded(completion.courseid, siteId).then((result) => { + const promise = force ? this.syncCourse(completion.courseid, siteId) : + this.syncCourseIfNeeded(completion.courseid, siteId); + + return promise.then((result) => { if (result && result.updated) { // Sync successful, send event. this.eventsProvider.trigger(CoreCourseSyncProvider.AUTO_SYNCED, { diff --git a/src/core/mainmenu/pages/menu/menu.scss b/src/core/mainmenu/pages/menu/menu.scss index 2fa0db196..5b532fcb8 100644 --- a/src/core/mainmenu/pages/menu/menu.scss +++ b/src/core/mainmenu/pages/menu/menu.scss @@ -17,4 +17,20 @@ ion-app.app-root page-core-mainmenu { font-size: 23px; height: 23px; } + + .ion-md-fa-newspaper-o, + .ion-ios-fa-newspaper-o, + .ion-ios-fa-newspaper-o-outline, + .ion-wp-fa-newspaper-o, + .ion-fa-newspaper-o { + @extend .fa-newspaper-o; + @extend .fa; + font-size: 22px; + height: 22px; + } + + .ion-ios-fa-newspaper-o-outline { + font-size: 23px; + height: 23px; + } } From d767b7514e82e52454eaf2e6892c60d902ed501a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 8 Mar 2019 10:24:25 +0100 Subject: [PATCH 012/263] MOBILE-2873 sync: Sync fixes --- src/addon/mod/assign/providers/assign-sync.ts | 4 +- .../mod/assign/providers/prefetch-handler.ts | 3 +- .../mod/choice/providers/prefetch-handler.ts | 3 +- src/addon/mod/choice/providers/sync.ts | 166 +++++++++--------- src/addon/mod/data/components/index/index.ts | 2 +- .../mod/data/providers/prefetch-handler.ts | 3 +- src/addon/mod/data/providers/sync.ts | 2 +- .../feedback/providers/prefetch-handler.ts | 3 +- src/addon/mod/feedback/providers/sync.ts | 2 +- src/addon/mod/forum/components/index/index.ts | 2 +- .../mod/forum/providers/prefetch-handler.ts | 3 +- .../mod/glossary/components/index/index.ts | 2 +- .../glossary/providers/prefetch-handler.ts | 3 +- .../mod/lesson/providers/prefetch-handler.ts | 3 +- src/addon/mod/quiz/providers/helper.ts | 2 +- .../mod/quiz/providers/prefetch-handler.ts | 4 +- .../mod/scorm/providers/prefetch-handler.ts | 3 +- src/addon/mod/scorm/providers/scorm-sync.ts | 2 +- .../mod/survey/providers/prefetch-handler.ts | 3 +- src/addon/mod/survey/providers/sync.ts | 148 ++++++++-------- .../mod/wiki/providers/prefetch-handler.ts | 3 +- .../workshop/providers/prefetch-handler.ts | 3 +- src/core/course/providers/helper.ts | 2 +- .../providers/module-prefetch-delegate.ts | 15 +- 24 files changed, 203 insertions(+), 183 deletions(-) diff --git a/src/addon/mod/assign/providers/assign-sync.ts b/src/addon/mod/assign/providers/assign-sync.ts index f65b2f393..049b44ba3 100644 --- a/src/addon/mod/assign/providers/assign-sync.ts +++ b/src/addon/mod/assign/providers/assign-sync.ts @@ -109,8 +109,8 @@ export class AddonModAssignSyncProvider extends CoreSyncBaseProvider { /** * Try to synchronize all the assignments in a certain site or in all sites. * - * @param {boolean} force Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} force Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ syncAllAssignments(siteId?: string, force?: boolean): Promise { @@ -120,8 +120,8 @@ export class AddonModAssignSyncProvider extends CoreSyncBaseProvider { /** * Sync all assignments on a site. * - * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} [force] Wether to force sync not depending on last execution. * @param {Promise} Promise resolved if sync is successful, rejected if sync fails. */ protected syncAllAssignmentsFunc(siteId?: string, force?: boolean): Promise { diff --git a/src/addon/mod/assign/providers/prefetch-handler.ts b/src/addon/mod/assign/providers/prefetch-handler.ts index 1cc2a6faa..2bac491cc 100644 --- a/src/addon/mod/assign/providers/prefetch-handler.ts +++ b/src/addon/mod/assign/providers/prefetch-handler.ts @@ -461,10 +461,11 @@ export class AddonModAssignPrefetchHandler extends CoreCourseActivityPrefetchHan * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { return this.syncProvider.syncAssign(module.instance, siteId); } } diff --git a/src/addon/mod/choice/providers/prefetch-handler.ts b/src/addon/mod/choice/providers/prefetch-handler.ts index c12bf6902..eb8a72d4b 100644 --- a/src/addon/mod/choice/providers/prefetch-handler.ts +++ b/src/addon/mod/choice/providers/prefetch-handler.ts @@ -141,10 +141,11 @@ export class AddonModChoicePrefetchHandler extends CoreCourseActivityPrefetchHan * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { if (!this.syncProvider) { this.syncProvider = this.injector.get(AddonModChoiceSyncProvider); } diff --git a/src/addon/mod/choice/providers/sync.ts b/src/addon/mod/choice/providers/sync.ts index 5d7e82d7f..965a1b06d 100644 --- a/src/addon/mod/choice/providers/sync.ts +++ b/src/addon/mod/choice/providers/sync.ts @@ -67,8 +67,8 @@ export class AddonModChoiceSyncProvider extends CoreCourseActivitySyncBaseProvid /** * Try to synchronize all the choices in a certain site or in all sites. * - * @param {boolean} force Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} force Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ syncAllChoices(siteId?: string, force?: boolean): Promise { @@ -132,94 +132,96 @@ export class AddonModChoiceSyncProvider extends CoreCourseActivitySyncBaseProvid * @return {Promise} Promise resolved if sync is successful, rejected otherwise. */ syncChoice(choiceId: number, userId?: number, siteId?: string): Promise { - siteId = siteId || this.sitesProvider.getCurrentSiteId(); - userId = userId || this.sitesProvider.getCurrentSiteUserId(); + return this.sitesProvider.getSite(siteId).then((site) => { + userId = userId || site.getUserId(); + siteId = site.getId(); - const syncId = this.getSyncId(choiceId, userId); - if (this.isSyncing(syncId, siteId)) { - // There's already a sync ongoing for this discussion, return the promise. - return this.getOngoingSync(syncId, siteId); - } - - this.logger.debug(`Try to sync choice '${choiceId}' for user '${userId}'`); - - let courseId; - const result = { - warnings: [], - updated: false - }; - - // Sync offline logs. - const syncPromise = this.logHelper.syncIfNeeded(AddonModChoiceProvider.COMPONENT, choiceId, siteId).catch(() => { - // Ignore errors. - }).then(() => { - return this.choiceOffline.getResponse(choiceId, siteId, userId).catch(() => { - // No offline data found, return empty object. - return {}; - }); - }).then((data) => { - if (!data.choiceid) { - // Nothing to sync. - return; + const syncId = this.getSyncId(choiceId, userId); + if (this.isSyncing(syncId, siteId)) { + // There's already a sync ongoing for this discussion, return the promise. + return this.getOngoingSync(syncId, siteId); } - if (!this.appProvider.isOnline()) { - // Cannot sync in offline. - return Promise.reject(null); - } + this.logger.debug(`Try to sync choice '${choiceId}' for user '${userId}'`); - courseId = data.courseid; + let courseId; + const result = { + warnings: [], + updated: false + }; - // Send the responses. - let promise; - - if (data.deleting) { - // A user has deleted some responses. - promise = this.choiceProvider.deleteResponsesOnline(choiceId, data.responses, siteId); - } else { - // A user has added some responses. - promise = this.choiceProvider.submitResponseOnline(choiceId, data.responses, siteId); - } - - return promise.then(() => { - result.updated = true; - - return this.choiceOffline.deleteResponse(choiceId, siteId, userId); - }).catch((error) => { - if (this.utils.isWebServiceError(error)) { - // The WebService has thrown an error, this means that responses cannot be submitted. Delete them. - result.updated = true; - - return this.choiceOffline.deleteResponse(choiceId, siteId, userId).then(() => { - // Responses deleted, add a warning. - result.warnings.push(this.translate.instant('core.warningofflinedatadeleted', { - component: this.componentTranslate, - name: data.name, - error: this.textUtils.getErrorMessageFromError(error) - })); - }); + // Sync offline logs. + const syncPromise = this.logHelper.syncIfNeeded(AddonModChoiceProvider.COMPONENT, choiceId, siteId).catch(() => { + // Ignore errors. + }).then(() => { + return this.choiceOffline.getResponse(choiceId, siteId, userId).catch(() => { + // No offline data found, return empty object. + return {}; + }); + }).then((data) => { + if (!data.choiceid) { + // Nothing to sync. + return; } - // Couldn't connect to server, reject. - return Promise.reject(error); - }); - }).then(() => { - if (courseId) { - // Data has been sent to server, prefetch choice if needed. - return this.courseProvider.getModuleBasicInfoByInstance(choiceId, 'choice', siteId).then((module) => { - return this.prefetchAfterUpdate(module, courseId, undefined, siteId); - }).catch(() => { - // Ignore errors. - }); - } - }).then(() => { - // Sync finished, set sync time. - return this.setSyncTime(syncId, siteId); - }).then(() => { - // All done, return the warnings. - return result; - }); + if (!this.appProvider.isOnline()) { + // Cannot sync in offline. + return Promise.reject(null); + } - return this.addOngoingSync(syncId, syncPromise, siteId); + courseId = data.courseid; + + // Send the responses. + let promise; + + if (data.deleting) { + // A user has deleted some responses. + promise = this.choiceProvider.deleteResponsesOnline(choiceId, data.responses, siteId); + } else { + // A user has added some responses. + promise = this.choiceProvider.submitResponseOnline(choiceId, data.responses, siteId); + } + + return promise.then(() => { + result.updated = true; + + return this.choiceOffline.deleteResponse(choiceId, siteId, userId); + }).catch((error) => { + if (this.utils.isWebServiceError(error)) { + // The WebService has thrown an error, this means that responses cannot be submitted. Delete them. + result.updated = true; + + return this.choiceOffline.deleteResponse(choiceId, siteId, userId).then(() => { + // Responses deleted, add a warning. + result.warnings.push(this.translate.instant('core.warningofflinedatadeleted', { + component: this.componentTranslate, + name: data.name, + error: this.textUtils.getErrorMessageFromError(error) + })); + }); + } + + // Couldn't connect to server, reject. + return Promise.reject(error); + }); + }).then(() => { + if (courseId) { + // Data has been sent to server, prefetch choice if needed. + return this.courseProvider.getModuleBasicInfoByInstance(choiceId, 'choice', siteId).then((module) => { + return this.prefetchAfterUpdate(module, courseId, undefined, siteId); + }).catch(() => { + // Ignore errors. + }); + } + }).then(() => { + // Sync finished, set sync time. + return this.setSyncTime(syncId, siteId); + }).then(() => { + // All done, return the warnings. + return result; + }); + + return this.addOngoingSync(syncId, syncPromise, siteId); + }); } } diff --git a/src/addon/mod/data/components/index/index.ts b/src/addon/mod/data/components/index/index.ts index caaae195f..54c6d61cd 100644 --- a/src/addon/mod/data/components/index/index.ts +++ b/src/addon/mod/data/components/index/index.ts @@ -521,7 +521,7 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp * @return {Promise} Promise resolved when done. */ protected sync(): Promise { - return this.prefetchHandler.sync(this.module); + return this.prefetchHandler.sync(this.module, this.courseId); } /** diff --git a/src/addon/mod/data/providers/prefetch-handler.ts b/src/addon/mod/data/providers/prefetch-handler.ts index 8ac16c797..5586ef558 100644 --- a/src/addon/mod/data/providers/prefetch-handler.ts +++ b/src/addon/mod/data/providers/prefetch-handler.ts @@ -307,10 +307,11 @@ export class AddonModDataPrefetchHandler extends CoreCourseActivityPrefetchHandl * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { const promises = [ this.syncProvider.syncDatabase(module.instance, siteId), this.syncProvider.syncRatings(module.id, true, siteId) diff --git a/src/addon/mod/data/providers/sync.ts b/src/addon/mod/data/providers/sync.ts index cb1465820..5bfe991bd 100644 --- a/src/addon/mod/data/providers/sync.ts +++ b/src/addon/mod/data/providers/sync.ts @@ -66,8 +66,8 @@ export class AddonModDataSyncProvider extends CoreSyncBaseProvider { /** * Try to synchronize all the databases in a certain site or in all sites. * - * @param {boolean} force Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} force Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ syncAllDatabases(siteId?: string, force?: boolean): Promise { diff --git a/src/addon/mod/feedback/providers/prefetch-handler.ts b/src/addon/mod/feedback/providers/prefetch-handler.ts index 2e6d0ed7a..b6ab91297 100644 --- a/src/addon/mod/feedback/providers/prefetch-handler.ts +++ b/src/addon/mod/feedback/providers/prefetch-handler.ts @@ -248,10 +248,11 @@ export class AddonModFeedbackPrefetchHandler extends CoreCourseActivityPrefetchH * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { if (!this.syncProvider) { this.syncProvider = this.injector.get(AddonModFeedbackSyncProvider); } diff --git a/src/addon/mod/feedback/providers/sync.ts b/src/addon/mod/feedback/providers/sync.ts index 08604869a..c643f237b 100644 --- a/src/addon/mod/feedback/providers/sync.ts +++ b/src/addon/mod/feedback/providers/sync.ts @@ -71,8 +71,8 @@ export class AddonModFeedbackSyncProvider extends CoreCourseActivitySyncBaseProv /** * Try to synchronize all the feedbacks in a certain site or in all sites. * - * @param {boolean} force Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} force Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ syncAllFeedbacks(siteId?: string, force?: boolean): Promise { diff --git a/src/addon/mod/forum/components/index/index.ts b/src/addon/mod/forum/components/index/index.ts index 38551d2ff..999974f31 100644 --- a/src/addon/mod/forum/components/index/index.ts +++ b/src/addon/mod/forum/components/index/index.ts @@ -376,7 +376,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom * @return {Promise} Promise resolved when done. */ protected sync(): Promise { - return this.prefetchHandler.sync(this.module); + return this.prefetchHandler.sync(this.module, this.courseId); } /** diff --git a/src/addon/mod/forum/providers/prefetch-handler.ts b/src/addon/mod/forum/providers/prefetch-handler.ts index 1da5e7b71..2b03e2525 100644 --- a/src/addon/mod/forum/providers/prefetch-handler.ts +++ b/src/addon/mod/forum/providers/prefetch-handler.ts @@ -271,10 +271,11 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { const promises = []; promises.push(this.syncProvider.syncForumDiscussions(module.instance, undefined, siteId)); diff --git a/src/addon/mod/glossary/components/index/index.ts b/src/addon/mod/glossary/components/index/index.ts index f44df70c6..1f473e081 100644 --- a/src/addon/mod/glossary/components/index/index.ts +++ b/src/addon/mod/glossary/components/index/index.ts @@ -220,7 +220,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity * @return {Promise} Promise resolved when done. */ protected sync(): Promise { - return this.prefetchHandler.sync(this.module); + return this.prefetchHandler.sync(this.module, this.courseId); } /** diff --git a/src/addon/mod/glossary/providers/prefetch-handler.ts b/src/addon/mod/glossary/providers/prefetch-handler.ts index 2436dd1b8..fb283d9b4 100644 --- a/src/addon/mod/glossary/providers/prefetch-handler.ts +++ b/src/addon/mod/glossary/providers/prefetch-handler.ts @@ -194,10 +194,11 @@ export class AddonModGlossaryPrefetchHandler extends CoreCourseActivityPrefetchH * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { const promises = [ this.syncProvider.syncGlossaryEntries(module.instance, undefined, siteId), this.syncProvider.syncRatings(module.id, undefined, siteId) diff --git a/src/addon/mod/lesson/providers/prefetch-handler.ts b/src/addon/mod/lesson/providers/prefetch-handler.ts index cdc03d516..01eed6fa3 100644 --- a/src/addon/mod/lesson/providers/prefetch-handler.ts +++ b/src/addon/mod/lesson/providers/prefetch-handler.ts @@ -437,10 +437,11 @@ export class AddonModLessonPrefetchHandler extends CoreCourseActivityPrefetchHan * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { if (!this.syncProvider) { this.syncProvider = this.injector.get(AddonModLessonSyncProvider); } diff --git a/src/addon/mod/quiz/providers/helper.ts b/src/addon/mod/quiz/providers/helper.ts index af9d466a8..fbf0d5f61 100644 --- a/src/addon/mod/quiz/providers/helper.ts +++ b/src/addon/mod/quiz/providers/helper.ts @@ -49,7 +49,7 @@ export class AddonModQuizHelperProvider { getAndCheckPreflightData(quiz: any, accessInfo: any, preflightData: any, attempt: any, offline?: boolean, prefetch?: boolean, title?: string, siteId?: string, retrying?: boolean): Promise { - const rules = accessInfo.activerulenames; + const rules = accessInfo && accessInfo.activerulenames; let isPreflightCheckRequired = false; // Check if the user needs to input preflight data. diff --git a/src/addon/mod/quiz/providers/prefetch-handler.ts b/src/addon/mod/quiz/providers/prefetch-handler.ts index 7a4387058..9c9c65704 100644 --- a/src/addon/mod/quiz/providers/prefetch-handler.ts +++ b/src/addon/mod/quiz/providers/prefetch-handler.ts @@ -567,6 +567,8 @@ export class AddonModQuizPrefetchHandler extends CoreCourseActivityPrefetchHandl this.syncProvider = this.injector.get(AddonModQuizSyncProvider); } - return this.syncProvider.syncQuiz(module.instance, false, siteId); + return this.quizProvider.getQuiz(module.course, module.id).then((quiz) => { + return this.syncProvider.syncQuiz(quiz, false, siteId); + }); } } diff --git a/src/addon/mod/scorm/providers/prefetch-handler.ts b/src/addon/mod/scorm/providers/prefetch-handler.ts index 161f3243c..d64ad764b 100644 --- a/src/addon/mod/scorm/providers/prefetch-handler.ts +++ b/src/addon/mod/scorm/providers/prefetch-handler.ts @@ -431,10 +431,11 @@ export class AddonModScormPrefetchHandler extends CoreCourseActivityPrefetchHand * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { if (!this.syncProvider) { this.syncProvider = this.injector.get(AddonModScormSyncProvider); } diff --git a/src/addon/mod/scorm/providers/scorm-sync.ts b/src/addon/mod/scorm/providers/scorm-sync.ts index 163c4cd7a..bb6074179 100644 --- a/src/addon/mod/scorm/providers/scorm-sync.ts +++ b/src/addon/mod/scorm/providers/scorm-sync.ts @@ -443,8 +443,8 @@ export class AddonModScormSyncProvider extends CoreCourseActivitySyncBaseProvide /** * Try to synchronize all the SCORMs in a certain site or in all sites. * - * @param {boolean} force Wether to force sync not depending on last execution. * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {boolean} force Wether to force sync not depending on last execution. * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. */ syncAllScorms(siteId?: string, force?: boolean): Promise { diff --git a/src/addon/mod/survey/providers/prefetch-handler.ts b/src/addon/mod/survey/providers/prefetch-handler.ts index c1ffba84a..83945c844 100644 --- a/src/addon/mod/survey/providers/prefetch-handler.ts +++ b/src/addon/mod/survey/providers/prefetch-handler.ts @@ -134,10 +134,11 @@ export class AddonModSurveyPrefetchHandler extends CoreCourseActivityPrefetchHan * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { if (!this.syncProvider) { this.syncProvider = this.injector.get(AddonModSurveySyncProvider); } diff --git a/src/addon/mod/survey/providers/sync.ts b/src/addon/mod/survey/providers/sync.ts index e2e459a18..0a57a0258 100644 --- a/src/addon/mod/survey/providers/sync.ts +++ b/src/addon/mod/survey/providers/sync.ts @@ -135,87 +135,89 @@ export class AddonModSurveySyncProvider extends CoreCourseActivitySyncBaseProvid * @return {Promise} Promise resolved if sync is successful, rejected otherwise. */ syncSurvey(surveyId: number, userId?: number, siteId?: string): Promise { - siteId = siteId || this.sitesProvider.getCurrentSiteId(); - userId = userId || this.sitesProvider.getCurrentSiteUserId(); + return this.sitesProvider.getSite(siteId).then((site) => { + userId = userId || site.getUserId(); + siteId = site.getId(); - const syncId = this.getSyncId(surveyId, userId); - if (this.isSyncing(syncId, siteId)) { - // There's already a sync ongoing for this survey and user, return the promise. - return this.getOngoingSync(syncId, siteId); - } - - this.logger.debug(`Try to sync survey '${surveyId}' for user '${userId}'`); - - let courseId; - const result = { - warnings: [], - answersSent: false - }; - - // Sync offline logs. - const syncPromise = this.logHelper.syncIfNeeded(AddonModSurveyProvider.COMPONENT, surveyId, siteId).catch(() => { - // Ignore errors. - }).then(() => { - // Get answers to be sent. - return this.surveyOffline.getSurveyData(surveyId, siteId, userId).catch(() => { - // No offline data found, return empty object. - return {}; - }); - }).then((data) => { - if (!data.answers || !data.answers.length) { - // Nothing to sync. - return; + const syncId = this.getSyncId(surveyId, userId); + if (this.isSyncing(syncId, siteId)) { + // There's already a sync ongoing for this survey and user, return the promise. + return this.getOngoingSync(syncId, siteId); } - if (!this.appProvider.isOnline()) { - // Cannot sync in offline. - return Promise.reject(null); - } + this.logger.debug(`Try to sync survey '${surveyId}' for user '${userId}'`); - courseId = data.courseid; + let courseId; + const result = { + warnings: [], + answersSent: false + }; - // Send the answers. - return this.surveyProvider.submitAnswersOnline(surveyId, data.answers, siteId).then(() => { - result.answersSent = true; - - // Answers sent, delete them. - return this.surveyOffline.deleteSurveyAnswers(surveyId, siteId, userId); - }).catch((error) => { - if (this.utils.isWebServiceError(error)) { - - // The WebService has thrown an error, this means that answers cannot be submitted. Delete them. - result.answersSent = true; - - return this.surveyOffline.deleteSurveyAnswers(surveyId, siteId, userId).then(() => { - // Answers deleted, add a warning. - result.warnings.push(this.translate.instant('core.warningofflinedatadeleted', { - component: this.componentTranslate, - name: data.name, - error: this.textUtils.getErrorMessageFromError(error) - })); - }); + // Sync offline logs. + const syncPromise = this.logHelper.syncIfNeeded(AddonModSurveyProvider.COMPONENT, surveyId, siteId).catch(() => { + // Ignore errors. + }).then(() => { + // Get answers to be sent. + return this.surveyOffline.getSurveyData(surveyId, siteId, userId).catch(() => { + // No offline data found, return empty object. + return {}; + }); + }).then((data) => { + if (!data.answers || !data.answers.length) { + // Nothing to sync. + return; } - // Couldn't connect to server, reject. - return Promise.reject(error); - }); - }).then(() => { - if (courseId) { - // Data has been sent to server, update survey data. - return this.courseProvider.getModuleBasicInfoByInstance(surveyId, 'survey', siteId).then((module) => { - return this.prefetchAfterUpdate(module, courseId, undefined, siteId); - }).catch(() => { - // Ignore errors. - }); - } - }).then(() => { - // Sync finished, set sync time. - return this.setSyncTime(syncId, siteId); - }).then(() => { - return result; - }); + if (!this.appProvider.isOnline()) { + // Cannot sync in offline. + return Promise.reject(null); + } - return this.addOngoingSync(syncId, syncPromise, siteId); + courseId = data.courseid; + + // Send the answers. + return this.surveyProvider.submitAnswersOnline(surveyId, data.answers, siteId).then(() => { + result.answersSent = true; + + // Answers sent, delete them. + return this.surveyOffline.deleteSurveyAnswers(surveyId, siteId, userId); + }).catch((error) => { + if (this.utils.isWebServiceError(error)) { + + // The WebService has thrown an error, this means that answers cannot be submitted. Delete them. + result.answersSent = true; + + return this.surveyOffline.deleteSurveyAnswers(surveyId, siteId, userId).then(() => { + // Answers deleted, add a warning. + result.warnings.push(this.translate.instant('core.warningofflinedatadeleted', { + component: this.componentTranslate, + name: data.name, + error: this.textUtils.getErrorMessageFromError(error) + })); + }); + } + + // Couldn't connect to server, reject. + return Promise.reject(error); + }); + }).then(() => { + if (courseId) { + // Data has been sent to server, update survey data. + return this.courseProvider.getModuleBasicInfoByInstance(surveyId, 'survey', siteId).then((module) => { + return this.prefetchAfterUpdate(module, courseId, undefined, siteId); + }).catch(() => { + // Ignore errors. + }); + } + }).then(() => { + // Sync finished, set sync time. + return this.setSyncTime(syncId, siteId); + }).then(() => { + return result; + }); + + return this.addOngoingSync(syncId, syncPromise, siteId); + }); } } diff --git a/src/addon/mod/wiki/providers/prefetch-handler.ts b/src/addon/mod/wiki/providers/prefetch-handler.ts index 02762895c..5aaa5d158 100644 --- a/src/addon/mod/wiki/providers/prefetch-handler.ts +++ b/src/addon/mod/wiki/providers/prefetch-handler.ts @@ -217,10 +217,11 @@ export class AddonModWikiPrefetchHandler extends CoreCourseActivityPrefetchHandl * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { return this.syncProvider.syncWiki(module.instance, module.course, module.id, siteId); } } diff --git a/src/addon/mod/workshop/providers/prefetch-handler.ts b/src/addon/mod/workshop/providers/prefetch-handler.ts index b6da65262..9ec409fa3 100644 --- a/src/addon/mod/workshop/providers/prefetch-handler.ts +++ b/src/addon/mod/workshop/providers/prefetch-handler.ts @@ -372,10 +372,11 @@ export class AddonModWorkshopPrefetchHandler extends CoreCourseActivityPrefetchH * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { return this.syncProvider.syncWorkshop(module.instance, siteId); } } diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index aca768b0d..fa1fd33f5 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -1319,7 +1319,7 @@ export class CoreCourseHelperProvider { section.isDownloading = true; // Sync the modules first. - promises.push(this.prefetchDelegate.syncModules(section.modules).then(() => { + promises.push(this.prefetchDelegate.syncModules(section.modules, courseId).then(() => { // Validate the section needs to be downloaded and calculate amount of modules that need to be downloaded. return this.prefetchDelegate.getModulesStatus(section.modules, courseId, section.id).then((result) => { if (result.status == CoreConstants.DOWNLOADED || result.status == CoreConstants.NOT_DOWNLOADABLE) { diff --git a/src/core/course/providers/module-prefetch-delegate.ts b/src/core/course/providers/module-prefetch-delegate.ts index 7691f5276..25aae46ab 100644 --- a/src/core/course/providers/module-prefetch-delegate.ts +++ b/src/core/course/providers/module-prefetch-delegate.ts @@ -211,10 +211,11 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler { * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync?(module: any, siteId?: any): Promise; + sync?(module: any, courseId: number, siteId?: any): Promise; } /** @@ -1148,7 +1149,7 @@ export class CoreCourseModulePrefetchDelegate extends CoreDelegate { // Check if the module has a prefetch handler. if (handler) { - return this.syncModule(module).then(() => { + return this.syncModule(module, courseId).then(() => { return handler.prefetch(module, courseId, single); }); } @@ -1160,11 +1161,12 @@ export class CoreCourseModulePrefetchDelegate extends CoreDelegate { * Sync a group of modules. * * @param {any[]} modules Array of modules to sync. + * @param {number} courseId Course ID the module belongs to. * @return {Promise} Promise resolved when finished. */ - syncModules(modules: any[]): Promise { + syncModules(modules: any[], courseId: number): Promise { return Promise.all(modules.map((module) => { - return this.syncModule(module); + return this.syncModule(module, courseId); })); } @@ -1172,12 +1174,13 @@ export class CoreCourseModulePrefetchDelegate extends CoreDelegate { * Sync a module. * * @param {any} module Module to sync. + * @param {number} courseId Course ID the module belongs to. * @return {Promise} Promise resolved when finished. */ - syncModule(module: any): Promise { + syncModule(module: any, courseId: number): Promise { const handler = this.getPrefetchHandlerFor(module); - const promise = handler && handler.sync ? handler.sync(module) : Promise.resolve(); + const promise = handler && handler.sync ? handler.sync(module, courseId) : Promise.resolve(); return promise.catch(() => { // Ignore errors. From bf235058647d0ff5a8bc186b65ece2487d1e749d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 8 Mar 2019 16:30:59 +0100 Subject: [PATCH 013/263] MOBILE-2873 quiz: Avoid start new attempt if first synced --- .../mod/quiz/providers/prefetch-handler.ts | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/addon/mod/quiz/providers/prefetch-handler.ts b/src/addon/mod/quiz/providers/prefetch-handler.ts index 9c9c65704..b4ec1137c 100644 --- a/src/addon/mod/quiz/providers/prefetch-handler.ts +++ b/src/addon/mod/quiz/providers/prefetch-handler.ts @@ -239,7 +239,16 @@ export class AddonModQuizPrefetchHandler extends CoreCourseActivityPrefetchHandl * @return {Promise} Promise resolved when done. */ prefetch(module: any, courseId?: number, single?: boolean, dirPath?: string, canStart: boolean = true): Promise { + if (module.attemptFinished) { + // Delete the value so it does not block anything if true. + delete module.attemptFinished; + + // Quiz got synced recently and an attempt has finished. Do not prefetch. + return Promise.resolve(); + } + return this.prefetchPackage(module, courseId, single, this.prefetchQuiz.bind(this), undefined, canStart); + } /** @@ -559,16 +568,25 @@ export class AddonModQuizPrefetchHandler extends CoreCourseActivityPrefetchHandl * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { if (!this.syncProvider) { this.syncProvider = this.injector.get(AddonModQuizSyncProvider); } - return this.quizProvider.getQuiz(module.course, module.id).then((quiz) => { - return this.syncProvider.syncQuiz(quiz, false, siteId); + return this.quizProvider.getQuiz(courseId, module.id).then((quiz) => { + return this.syncProvider.syncQuiz(quiz, false, siteId).then((results) => { + module.attemptFinished = (results && results.attemptFinished) || false; + + return results; + }).catch(() => { + // Ignore errors. + + module.attemptFinished = false; + }); }); } } From f2b63eac766b4344149573d9e90cbd5a4628a016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 29 Mar 2019 14:02:56 +0100 Subject: [PATCH 014/263] MOBILE-2873 lang: Fix langindex.json --- scripts/aot.sh | 2 +- scripts/langindex.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/aot.sh b/scripts/aot.sh index f10a70790..12aed8d2e 100755 --- a/scripts/aot.sh +++ b/scripts/aot.sh @@ -17,7 +17,7 @@ if [ $TRAVIS_BRANCH == 'integration' ] || [ $TRAVIS_BRANCH == 'master' ] || [ $T version=`grep versionname src/config.json| cut -d: -f2|cut -d'"' -f2` date=`date +%Y%m%d`'00' - pushd ../../moodle-local_moodlemobileapp + pushd ../moodle-local_moodlemobileapp sed -ie "s/release[ ]*=[ ]*'[^']*';/release = '$version';/1" version.php sed -ie "s/version[ ]*=[ ]*[0-9]*;/version = $date;/1" version.php rm version.phpe diff --git a/scripts/langindex.json b/scripts/langindex.json index d86efa26d..c87666a88 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -1342,6 +1342,7 @@ "core.favourites": "moodle", "core.filename": "repository", "core.filenameexist": "local_moodlemobileapp", + "core.filenotfound": "resource", "core.fileuploader.addfiletext": "repository", "core.fileuploader.audio": "local_moodlemobileapp", "core.fileuploader.camera": "local_moodlemobileapp", From b6a6dd13f6b5566658580045d773db335d7d1789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Mon, 1 Apr 2019 11:58:57 +0200 Subject: [PATCH 015/263] MOBILE-2873 sync: Sync before prefetch single module --- src/core/course/providers/helper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index fa1fd33f5..26471354e 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -1245,7 +1245,7 @@ export class CoreCourseHelperProvider { return promise.catch(() => { // Ignore errors. }).then(() => { - return handler.prefetch(module, courseId, true); + return this.prefetchDelegate.prefetchModule(module, courseId, true); }); }); } From 727fe58a5259890594ca1f7435afffe638cd0eb5 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 14 Mar 2019 14:11:33 +0100 Subject: [PATCH 016/263] MOBILE-2921 push: Move pushnotifications to core --- .../airnotifier/pages/devices/devices.ts | 4 +- .../components/discussions/discussions.ts | 4 +- src/addon/messages/messages.module.ts | 4 +- .../group-conversations.ts | 4 +- .../messages/providers/mainmenu-handler.ts | 8 +-- .../notifications/notifications.module.ts | 4 +- src/addon/notifications/pages/list/list.ts | 4 +- .../providers/mainmenu-handler.ts | 8 +-- src/app/app.module.ts | 4 +- src/core/compile/providers/compile.ts | 4 +- src/core/login/pages/sites/sites.ts | 4 +- .../pushnotifications/providers/delegate.ts | 4 +- .../providers/pushnotifications.ts | 56 +++++++++---------- .../providers/register-cron-handler.ts | 8 +-- .../providers/unregister-cron-handler.ts | 8 +-- .../pushnotifications.module.ts | 38 ++++++------- src/core/settings/pages/about/about.ts | 4 +- upgrade.txt | 4 ++ 18 files changed, 89 insertions(+), 85 deletions(-) rename src/{addon => core}/pushnotifications/providers/delegate.ts (96%) rename src/{addon => core}/pushnotifications/providers/pushnotifications.ts (90%) rename src/{addon => core}/pushnotifications/providers/register-cron-handler.ts (88%) rename src/{addon => core}/pushnotifications/providers/unregister-cron-handler.ts (82%) rename src/{addon => core}/pushnotifications/pushnotifications.module.ts (70%) diff --git a/src/addon/messageoutput/airnotifier/pages/devices/devices.ts b/src/addon/messageoutput/airnotifier/pages/devices/devices.ts index 0bea819b4..ddb966afa 100644 --- a/src/addon/messageoutput/airnotifier/pages/devices/devices.ts +++ b/src/addon/messageoutput/airnotifier/pages/devices/devices.ts @@ -15,7 +15,7 @@ import { Component, OnDestroy } from '@angular/core'; import { IonicPage } from 'ionic-angular'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; -import { AddonPushNotificationsProvider } from '@addon/pushnotifications/providers/pushnotifications'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; import { AddonMessageOutputAirnotifierProvider } from '../../providers/airnotifier'; /** @@ -34,7 +34,7 @@ export class AddonMessageOutputAirnotifierDevicesPage implements OnDestroy { protected updateTimeout: any; constructor(private domUtils: CoreDomUtilsProvider, private airnotifierProivder: AddonMessageOutputAirnotifierProvider, - private pushNotificationsProvider: AddonPushNotificationsProvider ) { + private pushNotificationsProvider: CorePushNotificationsProvider ) { } /** diff --git a/src/addon/messages/components/discussions/discussions.ts b/src/addon/messages/components/discussions/discussions.ts index b072b719b..983e27a13 100644 --- a/src/addon/messages/components/discussions/discussions.ts +++ b/src/addon/messages/components/discussions/discussions.ts @@ -21,7 +21,7 @@ import { AddonMessagesProvider } from '../../providers/messages'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreAppProvider } from '@providers/app'; -import { AddonPushNotificationsDelegate } from '@addon/pushnotifications/providers/delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; /** * Component that displays the list of discussions. @@ -54,7 +54,7 @@ export class AddonMessagesDiscussionsComponent implements OnDestroy { constructor(private eventsProvider: CoreEventsProvider, sitesProvider: CoreSitesProvider, translate: TranslateService, private messagesProvider: AddonMessagesProvider, private domUtils: CoreDomUtilsProvider, navParams: NavParams, private appProvider: CoreAppProvider, platform: Platform, private utils: CoreUtilsProvider, - pushNotificationsDelegate: AddonPushNotificationsDelegate) { + pushNotificationsDelegate: CorePushNotificationsDelegate) { this.search.loading = translate.instant('core.searching'); this.loadingMessages = translate.instant('core.loading'); diff --git a/src/addon/messages/messages.module.ts b/src/addon/messages/messages.module.ts index 9ea151d83..b05391378 100644 --- a/src/addon/messages/messages.module.ts +++ b/src/addon/messages/messages.module.ts @@ -35,7 +35,7 @@ import { CoreLocalNotificationsProvider } from '@providers/local-notifications'; import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { CoreSettingsDelegate } from '@core/settings/providers/delegate'; import { AddonMessagesSettingsHandler } from './providers/settings-handler'; -import { AddonPushNotificationsDelegate } from '@addon/pushnotifications/providers/delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreUpdateManagerProvider } from '@providers/update-manager'; @@ -75,7 +75,7 @@ export class AddonMessagesModule { localNotifications: CoreLocalNotificationsProvider, messagesProvider: AddonMessagesProvider, sitesProvider: CoreSitesProvider, linkHelper: CoreContentLinksHelperProvider, updateManager: CoreUpdateManagerProvider, settingsHandler: AddonMessagesSettingsHandler, settingsDelegate: CoreSettingsDelegate, - pushNotificationsDelegate: AddonPushNotificationsDelegate, utils: CoreUtilsProvider, + pushNotificationsDelegate: CorePushNotificationsDelegate, utils: CoreUtilsProvider, addContactHandler: AddonMessagesAddContactUserHandler, blockContactHandler: AddonMessagesBlockContactUserHandler, contactRequestLinkHandler: AddonMessagesContactRequestLinkHandler) { // Register handlers. diff --git a/src/addon/messages/pages/group-conversations/group-conversations.ts b/src/addon/messages/pages/group-conversations/group-conversations.ts index 332bae82c..d2fe94280 100644 --- a/src/addon/messages/pages/group-conversations/group-conversations.ts +++ b/src/addon/messages/pages/group-conversations/group-conversations.ts @@ -21,7 +21,7 @@ import { AddonMessagesProvider } from '../../providers/messages'; import { AddonMessagesOfflineProvider } from '../../providers/messages-offline'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreUtilsProvider } from '@providers/utils/utils'; -import { AddonPushNotificationsDelegate } from '@addon/pushnotifications/providers/delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; import { CoreSplitViewComponent } from '@components/split-view/split-view'; import { CoreUserProvider } from '@core/user/providers/user'; @@ -84,7 +84,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { constructor(eventsProvider: CoreEventsProvider, sitesProvider: CoreSitesProvider, translate: TranslateService, private messagesProvider: AddonMessagesProvider, private domUtils: CoreDomUtilsProvider, navParams: NavParams, private navCtrl: NavController, platform: Platform, private utils: CoreUtilsProvider, - pushNotificationsDelegate: AddonPushNotificationsDelegate, private messagesOffline: AddonMessagesOfflineProvider, + pushNotificationsDelegate: CorePushNotificationsDelegate, private messagesOffline: AddonMessagesOfflineProvider, private userProvider: CoreUserProvider) { this.loadingString = translate.instant('core.loading'); diff --git a/src/addon/messages/providers/mainmenu-handler.ts b/src/addon/messages/providers/mainmenu-handler.ts index 170d86082..0e530613a 100644 --- a/src/addon/messages/providers/mainmenu-handler.ts +++ b/src/addon/messages/providers/mainmenu-handler.ts @@ -22,8 +22,8 @@ import { CoreAppProvider } from '@providers/app'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreLocalNotificationsProvider } from '@providers/local-notifications'; -import { AddonPushNotificationsProvider } from '@addon/pushnotifications/providers/pushnotifications'; -import { AddonPushNotificationsDelegate } from '@addon/pushnotifications/providers/delegate'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; import { CoreEmulatorHelperProvider } from '@core/emulator/providers/helper'; /** @@ -50,8 +50,8 @@ export class AddonMessagesMainMenuHandler implements CoreMainMenuHandler, CoreCr constructor(private messagesProvider: AddonMessagesProvider, private sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider, private appProvider: CoreAppProvider, private localNotificationsProvider: CoreLocalNotificationsProvider, private textUtils: CoreTextUtilsProvider, - private pushNotificationsProvider: AddonPushNotificationsProvider, utils: CoreUtilsProvider, - pushNotificationsDelegate: AddonPushNotificationsDelegate, private emulatorHelper: CoreEmulatorHelperProvider) { + private pushNotificationsProvider: CorePushNotificationsProvider, utils: CoreUtilsProvider, + pushNotificationsDelegate: CorePushNotificationsDelegate, private emulatorHelper: CoreEmulatorHelperProvider) { eventsProvider.on(AddonMessagesProvider.UNREAD_CONVERSATION_COUNTS_EVENT, (data) => { this.unreadCount = data.favourites + data.individual + data.group; diff --git a/src/addon/notifications/notifications.module.ts b/src/addon/notifications/notifications.module.ts index 3dbd875f4..ff86d5f29 100644 --- a/src/addon/notifications/notifications.module.ts +++ b/src/addon/notifications/notifications.module.ts @@ -26,7 +26,7 @@ import { CoreLocalNotificationsProvider } from '@providers/local-notifications'; import { CoreSitesProvider } from '@providers/sites'; import { CoreUrlUtilsProvider } from '@providers/utils/url'; import { CoreUtilsProvider } from '@providers/utils/utils'; -import { AddonPushNotificationsDelegate } from '@addon/pushnotifications/providers/delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; import { AddonModForumProvider } from '@addon/mod/forum/providers/forum'; // List of providers (without handlers). @@ -52,7 +52,7 @@ export class AddonNotificationsModule { cronDelegate: CoreCronDelegate, cronHandler: AddonNotificationsCronHandler, zone: NgZone, appProvider: CoreAppProvider, utils: CoreUtilsProvider, sitesProvider: CoreSitesProvider, notificationsProvider: AddonNotificationsProvider, localNotifications: CoreLocalNotificationsProvider, - linkHelper: CoreContentLinksHelperProvider, pushNotificationsDelegate: AddonPushNotificationsDelegate, + linkHelper: CoreContentLinksHelperProvider, pushNotificationsDelegate: CorePushNotificationsDelegate, urlUtils: CoreUrlUtilsProvider, forumProvider: AddonModForumProvider) { mainMenuDelegate.registerHandler(mainMenuHandler); diff --git a/src/addon/notifications/pages/list/list.ts b/src/addon/notifications/pages/list/list.ts index 62add77ad..2799cc8ee 100644 --- a/src/addon/notifications/pages/list/list.ts +++ b/src/addon/notifications/pages/list/list.ts @@ -21,7 +21,7 @@ import { CoreEventsProvider, CoreEventObserver } from '@providers/events'; import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { AddonNotificationsProvider } from '../../providers/notifications'; -import { AddonPushNotificationsDelegate } from '@addon/pushnotifications/providers/delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; /** * Page that displays the list of notifications. @@ -48,7 +48,7 @@ export class AddonNotificationsListPage { constructor(navParams: NavParams, private domUtils: CoreDomUtilsProvider, private eventsProvider: CoreEventsProvider, private sitesProvider: CoreSitesProvider, private textUtils: CoreTextUtilsProvider, private utils: CoreUtilsProvider, private notificationsProvider: AddonNotificationsProvider, - private pushNotificationsDelegate: AddonPushNotificationsDelegate) { + private pushNotificationsDelegate: CorePushNotificationsDelegate) { } /** diff --git a/src/addon/notifications/providers/mainmenu-handler.ts b/src/addon/notifications/providers/mainmenu-handler.ts index 8866d14a8..a73fd6065 100644 --- a/src/addon/notifications/providers/mainmenu-handler.ts +++ b/src/addon/notifications/providers/mainmenu-handler.ts @@ -18,8 +18,8 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreMainMenuHandler, CoreMainMenuHandlerData } from '@core/mainmenu/providers/delegate'; import { AddonNotificationsProvider } from './notifications'; -import { AddonPushNotificationsProvider } from '@addon/pushnotifications/providers/pushnotifications'; -import { AddonPushNotificationsDelegate } from '@addon/pushnotifications/providers/delegate'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; /** * Handler to inject an option into main menu. @@ -41,8 +41,8 @@ export class AddonNotificationsMainMenuHandler implements CoreMainMenuHandler { constructor(eventsProvider: CoreEventsProvider, private sitesProvider: CoreSitesProvider, utils: CoreUtilsProvider, private notificationsProvider: AddonNotificationsProvider, - private pushNotificationsProvider: AddonPushNotificationsProvider, - pushNotificationsDelegate: AddonPushNotificationsDelegate) { + private pushNotificationsProvider: CorePushNotificationsProvider, + pushNotificationsDelegate: CorePushNotificationsDelegate) { eventsProvider.on(AddonNotificationsProvider.READ_CHANGED_EVENT, (data) => { this.updateBadge(data.siteId); diff --git a/src/app/app.module.ts b/src/app/app.module.ts index fbcdc4cb5..71ce98128 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -121,7 +121,7 @@ import { AddonMessageOutputModule } from '@addon/messageoutput/messageoutput.mod import { AddonMessageOutputAirnotifierModule } from '@addon/messageoutput/airnotifier/airnotifier.module'; import { AddonMessagesModule } from '@addon/messages/messages.module'; import { AddonNotesModule } from '../addon/notes/notes.module'; -import { AddonPushNotificationsModule } from '@addon/pushnotifications/pushnotifications.module'; +import { CorePushNotificationsModule } from '@core/pushnotifications/pushnotifications.module'; import { AddonNotificationsModule } from '@addon/notifications/notifications.module'; import { AddonRemoteThemesModule } from '@addon/remotethemes/remotethemes.module'; import { AddonQbehaviourModule } from '@addon/qbehaviour/qbehaviour.module'; @@ -201,6 +201,7 @@ export const CORE_PROVIDERS: any[] = [ CoreCommentsModule, CoreBlockModule, CoreRatingModule, + CorePushNotificationsModule, AddonBadgesModule, AddonBlogModule, AddonCalendarModule, @@ -241,7 +242,6 @@ export const CORE_PROVIDERS: any[] = [ AddonMessagesModule, AddonNotesModule, AddonNotificationsModule, - AddonPushNotificationsModule, AddonRemoteThemesModule, AddonQbehaviourModule, AddonQtypeModule diff --git a/src/core/compile/providers/compile.ts b/src/core/compile/providers/compile.ts index a17d62a8a..111db31e7 100644 --- a/src/core/compile/providers/compile.ts +++ b/src/core/compile/providers/compile.ts @@ -35,6 +35,7 @@ import { CORE_QUESTION_PROVIDERS } from '@core/question/question.module'; import { CORE_SHAREDFILES_PROVIDERS } from '@core/sharedfiles/sharedfiles.module'; import { CORE_SITEHOME_PROVIDERS } from '@core/sitehome/sitehome.module'; import { CORE_USER_PROVIDERS } from '@core/user/user.module'; +import { CORE_PUSHNOTIFICATIONS_PROVIDERS } from '@core/pushnotifications/pushnotifications.module'; import { IONIC_NATIVE_PROVIDERS } from '@core/emulator/emulator.module'; // Import only this provider to prevent circular dependencies. @@ -114,7 +115,6 @@ import { ADDON_MOD_WIKI_PROVIDERS } from '@addon/mod/wiki/wiki.module'; import { ADDON_MOD_WORKSHOP_PROVIDERS } from '@addon/mod/workshop/workshop.module'; import { ADDON_NOTES_PROVIDERS } from '@addon/notes/notes.module'; import { ADDON_NOTIFICATIONS_PROVIDERS } from '@addon/notifications/notifications.module'; -import { ADDON_PUSHNOTIFICATIONS_PROVIDERS } from '@addon/pushnotifications/pushnotifications.module'; import { ADDON_REMOTETHEMES_PROVIDERS } from '@addon/remotethemes/remotethemes.module'; // Import some addon modules that define components, directives and pipes. Only import the important ones. @@ -233,7 +233,7 @@ export class CoreCompileProvider { .concat(ADDON_MOD_QUIZ_PROVIDERS).concat(ADDON_MOD_RESOURCE_PROVIDERS).concat(ADDON_MOD_SCORM_PROVIDERS) .concat(ADDON_MOD_SURVEY_PROVIDERS).concat(ADDON_MOD_URL_PROVIDERS).concat(ADDON_MOD_WIKI_PROVIDERS) .concat(ADDON_MOD_WORKSHOP_PROVIDERS).concat(ADDON_NOTES_PROVIDERS).concat(ADDON_NOTIFICATIONS_PROVIDERS) - .concat(ADDON_PUSHNOTIFICATIONS_PROVIDERS).concat(ADDON_REMOTETHEMES_PROVIDERS).concat(CORE_BLOCK_PROVIDERS); + .concat(CORE_PUSHNOTIFICATIONS_PROVIDERS).concat(ADDON_REMOTETHEMES_PROVIDERS).concat(CORE_BLOCK_PROVIDERS); // We cannot inject anything to this constructor. Use the Injector to inject all the providers into the instance. for (const i in providers) { diff --git a/src/core/login/pages/sites/sites.ts b/src/core/login/pages/sites/sites.ts index 7140382d6..5f6c8a8c0 100644 --- a/src/core/login/pages/sites/sites.ts +++ b/src/core/login/pages/sites/sites.ts @@ -19,7 +19,7 @@ import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider, CoreSiteBasicInfo } from '@providers/sites'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; -import { AddonPushNotificationsProvider } from '@addon/pushnotifications/providers/pushnotifications'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; import { CoreLoginHelperProvider } from '../../providers/helper'; /** @@ -37,7 +37,7 @@ export class CoreLoginSitesPage { constructor(private domUtils: CoreDomUtilsProvider, private textUtils: CoreTextUtilsProvider, private sitesProvider: CoreSitesProvider, private loginHelper: CoreLoginHelperProvider, logger: CoreLoggerProvider, - private translate: TranslateService, private pushNotificationsProvider: AddonPushNotificationsProvider) { + private translate: TranslateService, private pushNotificationsProvider: CorePushNotificationsProvider) { this.logger = logger.getInstance('CoreLoginSitesPage'); } diff --git a/src/addon/pushnotifications/providers/delegate.ts b/src/core/pushnotifications/providers/delegate.ts similarity index 96% rename from src/addon/pushnotifications/providers/delegate.ts rename to src/core/pushnotifications/providers/delegate.ts index 61ca92ce5..dbd0f12fe 100644 --- a/src/addon/pushnotifications/providers/delegate.ts +++ b/src/core/pushnotifications/providers/delegate.ts @@ -20,14 +20,14 @@ import { Subject } from 'rxjs'; * Service to handle push notifications actions to perform when clicked and received. */ @Injectable() -export class AddonPushNotificationsDelegate { +export class CorePushNotificationsDelegate { protected logger; protected observables: { [s: string]: Subject } = {}; protected counterHandlers: { [s: string]: string } = {}; constructor(loggerProvider: CoreLoggerProvider) { - this.logger = loggerProvider.getInstance('AddonPushNotificationsDelegate'); + this.logger = loggerProvider.getInstance('CorePushNotificationsDelegate'); this.observables['click'] = new Subject(); this.observables['receive'] = new Subject(); } diff --git a/src/addon/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts similarity index 90% rename from src/addon/pushnotifications/providers/pushnotifications.ts rename to src/core/pushnotifications/providers/pushnotifications.ts index df36c3bed..2fa632956 100644 --- a/src/addon/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -23,7 +23,7 @@ import { CoreInitDelegate } from '@providers/init'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider, CoreSiteSchema } from '@providers/sites'; import { CoreSitesFactoryProvider } from '@providers/sites-factory'; -import { AddonPushNotificationsDelegate } from './delegate'; +import { CorePushNotificationsDelegate } from './delegate'; import { CoreLocalNotificationsProvider } from '@providers/local-notifications'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreTextUtilsProvider } from '@providers/utils/text'; @@ -37,7 +37,7 @@ import { CoreSite } from '@classes/site'; /** * Data needed to register a device in a Moodle site. */ -export interface AddonPushNotificationsRegisterData { +export interface CorePushNotificationsRegisterData { /** * App ID. * @type {string} @@ -85,19 +85,19 @@ export interface AddonPushNotificationsRegisterData { * Service to handle push notifications. */ @Injectable() -export class AddonPushNotificationsProvider { +export class CorePushNotificationsProvider { protected logger; protected pushID: string; protected appDB: SQLiteDB; - static COMPONENT = 'AddonPushNotificationsProvider'; + static COMPONENT = 'CorePushNotificationsProvider'; - // Variables for database. + // Variables for database. The name still contains the name "addon" for backwards compatibility. static BADGE_TABLE = 'addon_pushnotifications_badge'; static PENDING_UNREGISTER_TABLE = 'addon_pushnotifications_pending_unregister'; static REGISTERED_DEVICES_TABLE = 'addon_pushnotifications_registered_devices'; protected appTablesSchema: SQLiteDBTableSchema[] = [ { - name: AddonPushNotificationsProvider.BADGE_TABLE, + name: CorePushNotificationsProvider.BADGE_TABLE, columns: [ { name: 'siteid', @@ -115,7 +115,7 @@ export class AddonPushNotificationsProvider { primaryKeys: ['siteid', 'addon'] }, { - name: AddonPushNotificationsProvider.PENDING_UNREGISTER_TABLE, + name: CorePushNotificationsProvider.PENDING_UNREGISTER_TABLE, columns: [ { name: 'siteid', @@ -138,11 +138,11 @@ export class AddonPushNotificationsProvider { } ]; protected siteSchema: CoreSiteSchema = { - name: 'AddonPushNotificationsProvider', + name: 'AddonPushNotificationsProvider', // The name still contains "Addon" for backwards compatibility. version: 1, tables: [ { - name: AddonPushNotificationsProvider.REGISTERED_DEVICES_TABLE, + name: CorePushNotificationsProvider.REGISTERED_DEVICES_TABLE, columns: [ { name: 'appid', @@ -179,12 +179,12 @@ export class AddonPushNotificationsProvider { }; constructor(logger: CoreLoggerProvider, protected appProvider: CoreAppProvider, private initDelegate: CoreInitDelegate, - protected pushNotificationsDelegate: AddonPushNotificationsDelegate, protected sitesProvider: CoreSitesProvider, + protected pushNotificationsDelegate: CorePushNotificationsDelegate, protected sitesProvider: CoreSitesProvider, private badge: Badge, private localNotificationsProvider: CoreLocalNotificationsProvider, private utils: CoreUtilsProvider, private textUtils: CoreTextUtilsProvider, private push: Push, private configProvider: CoreConfigProvider, private device: Device, private zone: NgZone, private translate: TranslateService, private platform: Platform, private sitesFactory: CoreSitesFactoryProvider) { - this.logger = logger.getInstance('AddonPushNotificationsProvider'); + this.logger = logger.getInstance('CorePushNotificationsProvider'); this.appDB = appProvider.getDB(); this.appDB.createTablesFromSchema(this.appTablesSchema); this.sitesProvider.registerSiteSchema(this.siteSchema); @@ -207,7 +207,7 @@ export class AddonPushNotificationsProvider { * @return {Promise} Resolved when done. */ cleanSiteCounters(siteId: string): Promise { - return this.appDB.deleteRecords(AddonPushNotificationsProvider.BADGE_TABLE, {siteid: siteId} ).finally(() => { + return this.appDB.deleteRecords(CorePushNotificationsProvider.BADGE_TABLE, {siteid: siteId} ).finally(() => { this.updateAppCounter(); }); } @@ -267,9 +267,9 @@ export class AddonPushNotificationsProvider { /** * Get data to register the device in Moodle. * - * @return {AddonPushNotificationsRegisterData} Data. + * @return {CorePushNotificationsRegisterData} Data. */ - protected getRegisterData(): AddonPushNotificationsRegisterData { + protected getRegisterData(): CorePushNotificationsRegisterData { return { appid: CoreConfigConstants.app_id, name: this.device.manufacturer || '', @@ -338,7 +338,7 @@ export class AddonPushNotificationsProvider { })); Promise.all(promises).then(() => { - this.localNotificationsProvider.schedule(localNotif, AddonPushNotificationsProvider.COMPONENT, data.site); + this.localNotificationsProvider.schedule(localNotif, CorePushNotificationsProvider.COMPONENT, data.site); }); } @@ -381,11 +381,11 @@ export class AddonPushNotificationsProvider { const promises = []; // Remove the device from the local DB. - promises.push(site.getDb().deleteRecords(AddonPushNotificationsProvider.REGISTERED_DEVICES_TABLE, + promises.push(site.getDb().deleteRecords(CorePushNotificationsProvider.REGISTERED_DEVICES_TABLE, this.getRegisterData())); // Remove pending unregisters for this site. - promises.push(this.appDB.deleteRecords(AddonPushNotificationsProvider.PENDING_UNREGISTER_TABLE, {siteid: site.id})); + promises.push(this.appDB.deleteRecords(CorePushNotificationsProvider.PENDING_UNREGISTER_TABLE, {siteid: site.id})); return Promise.all(promises).catch(() => { // Ignore errors. @@ -397,7 +397,7 @@ export class AddonPushNotificationsProvider { } // Store the pending unregister so it's retried again later. - return this.appDB.insertRecord(AddonPushNotificationsProvider.PENDING_UNREGISTER_TABLE, { + return this.appDB.insertRecord(CorePushNotificationsProvider.PENDING_UNREGISTER_TABLE, { siteid: site.id, siteurl: site.getURL(), token: site.getToken(), @@ -587,7 +587,7 @@ export class AddonPushNotificationsProvider { // Now register the device. return site.write('core_user_add_user_device', this.utils.clone(data)).then((response) => { // Insert the device in the local DB. - return site.getDb().insertRecord(AddonPushNotificationsProvider.REGISTERED_DEVICES_TABLE, data) + return site.getDb().insertRecord(CorePushNotificationsProvider.REGISTERED_DEVICES_TABLE, data) .catch((error) => { // Ignore errors. }); @@ -595,7 +595,7 @@ export class AddonPushNotificationsProvider { } }).finally(() => { // Remove pending unregisters for this site. - this.appDB.deleteRecords(AddonPushNotificationsProvider.PENDING_UNREGISTER_TABLE, {siteid: site.id}).catch(() => { + this.appDB.deleteRecords(CorePushNotificationsProvider.PENDING_UNREGISTER_TABLE, {siteid: site.id}).catch(() => { // Ignore errors. }); }); @@ -609,7 +609,7 @@ export class AddonPushNotificationsProvider { * @return {Promise} Promise resolved with the stored badge counter for the addon or site or 0 if none. */ protected getAddonBadge(siteId?: string, addon: string = 'site'): Promise { - return this.appDB.getRecord(AddonPushNotificationsProvider.BADGE_TABLE, {siteid: siteId, addon: addon}).then((entry) => { + return this.appDB.getRecord(CorePushNotificationsProvider.BADGE_TABLE, {siteid: siteId, addon: addon}).then((entry) => { return (entry && entry.number) || 0; }).catch(() => { return 0; @@ -627,10 +627,10 @@ export class AddonPushNotificationsProvider { if (siteId) { // Check if the site has a pending unregister. - promise = this.appDB.getRecords(AddonPushNotificationsProvider.REGISTERED_DEVICES_TABLE, {siteid: siteId}); + promise = this.appDB.getRecords(CorePushNotificationsProvider.REGISTERED_DEVICES_TABLE, {siteid: siteId}); } else { // Get all pending unregisters. - promise = this.appDB.getAllRecords(AddonPushNotificationsProvider.PENDING_UNREGISTER_TABLE); + promise = this.appDB.getAllRecords(CorePushNotificationsProvider.PENDING_UNREGISTER_TABLE); } return promise.then((results) => { @@ -665,7 +665,7 @@ export class AddonPushNotificationsProvider { number: value }; - return this.appDB.insertRecord(AddonPushNotificationsProvider.BADGE_TABLE, entry).then(() => { + return this.appDB.insertRecord(CorePushNotificationsProvider.BADGE_TABLE, entry).then(() => { return value; }); } @@ -673,21 +673,21 @@ export class AddonPushNotificationsProvider { /** * Check if device should be registered (and unregistered first). * - * @param {AddonPushNotificationsRegisterData} data Data of the device. + * @param {CorePushNotificationsRegisterData} data Data of the device. * @param {CoreSite} site Site to use. * @return {Promise<{register: boolean, unregister: boolean}>} Promise resolved with booleans: whether to register/unregister. */ - protected shouldRegister(data: AddonPushNotificationsRegisterData, site: CoreSite) + protected shouldRegister(data: CorePushNotificationsRegisterData, site: CoreSite) : Promise<{register: boolean, unregister: boolean}> { // Check if the device is already registered. - return site.getDb().getRecords(AddonPushNotificationsProvider.REGISTERED_DEVICES_TABLE, { + return site.getDb().getRecords(CorePushNotificationsProvider.REGISTERED_DEVICES_TABLE, { appid: data.appid, uuid: data.uuid }).catch(() => { // Ignore errors. return []; - }).then((records: AddonPushNotificationsRegisterData[]) => { + }).then((records: CorePushNotificationsRegisterData[]) => { let isStored = false, versionOrPushChanged = false; diff --git a/src/addon/pushnotifications/providers/register-cron-handler.ts b/src/core/pushnotifications/providers/register-cron-handler.ts similarity index 88% rename from src/addon/pushnotifications/providers/register-cron-handler.ts rename to src/core/pushnotifications/providers/register-cron-handler.ts index fd3ea87ff..0f04874b5 100644 --- a/src/addon/pushnotifications/providers/register-cron-handler.ts +++ b/src/core/pushnotifications/providers/register-cron-handler.ts @@ -14,16 +14,16 @@ import { Injectable } from '@angular/core'; import { CoreCronHandler } from '@providers/cron'; -import { AddonPushNotificationsProvider } from './pushnotifications'; +import { CorePushNotificationsProvider } from './pushnotifications'; /** * Cron handler to force a register on a Moodle site when a site is manually synchronized. */ @Injectable() -export class AddonPushNotificationsRegisterCronHandler implements CoreCronHandler { - name = 'AddonPushNotificationsRegisterCronHandler'; +export class CorePushNotificationsRegisterCronHandler implements CoreCronHandler { + name = 'CorePushNotificationsRegisterCronHandler'; - constructor(private pushNotificationsProvider: AddonPushNotificationsProvider) {} + constructor(private pushNotificationsProvider: CorePushNotificationsProvider) {} /** * Check whether the sync can be executed manually. Call isSync if not defined. diff --git a/src/addon/pushnotifications/providers/unregister-cron-handler.ts b/src/core/pushnotifications/providers/unregister-cron-handler.ts similarity index 82% rename from src/addon/pushnotifications/providers/unregister-cron-handler.ts rename to src/core/pushnotifications/providers/unregister-cron-handler.ts index 548d44bd0..f533efaa0 100644 --- a/src/addon/pushnotifications/providers/unregister-cron-handler.ts +++ b/src/core/pushnotifications/providers/unregister-cron-handler.ts @@ -14,16 +14,16 @@ import { Injectable } from '@angular/core'; import { CoreCronHandler } from '@providers/cron'; -import { AddonPushNotificationsProvider } from './pushnotifications'; +import { CorePushNotificationsProvider } from './pushnotifications'; /** * Cron handler to retry pending unregisters. */ @Injectable() -export class AddonPushNotificationsUnregisterCronHandler implements CoreCronHandler { - name = 'AddonPushNotificationsUnregisterCronHandler'; +export class CorePushNotificationsUnregisterCronHandler implements CoreCronHandler { + name = 'CorePushNotificationsUnregisterCronHandler'; - constructor(private pushNotificationsProvider: AddonPushNotificationsProvider) {} + constructor(private pushNotificationsProvider: CorePushNotificationsProvider) {} /** * Execute the process. diff --git a/src/addon/pushnotifications/pushnotifications.module.ts b/src/core/pushnotifications/pushnotifications.module.ts similarity index 70% rename from src/addon/pushnotifications/pushnotifications.module.ts rename to src/core/pushnotifications/pushnotifications.module.ts index d36a0ce43..d8d562108 100644 --- a/src/addon/pushnotifications/pushnotifications.module.ts +++ b/src/core/pushnotifications/pushnotifications.module.ts @@ -14,10 +14,10 @@ import { NgModule } from '@angular/core'; import { Platform } from 'ionic-angular'; -import { AddonPushNotificationsProvider } from './providers/pushnotifications'; -import { AddonPushNotificationsDelegate } from './providers/delegate'; -import { AddonPushNotificationsRegisterCronHandler } from './providers/register-cron-handler'; -import { AddonPushNotificationsUnregisterCronHandler } from './providers/unregister-cron-handler'; +import { CorePushNotificationsProvider } from './providers/pushnotifications'; +import { CorePushNotificationsDelegate } from './providers/delegate'; +import { CorePushNotificationsRegisterCronHandler } from './providers/register-cron-handler'; +import { CorePushNotificationsUnregisterCronHandler } from './providers/unregister-cron-handler'; import { CoreCronDelegate } from '@providers/cron'; import { CoreEventsProvider } from '@providers/events'; import { CoreLoggerProvider } from '@providers/logger'; @@ -25,9 +25,9 @@ import { CoreLocalNotificationsProvider } from '@providers/local-notifications'; import { CoreUpdateManagerProvider } from '@providers/update-manager'; // List of providers (without handlers). -export const ADDON_PUSHNOTIFICATIONS_PROVIDERS: any[] = [ - AddonPushNotificationsProvider, - AddonPushNotificationsDelegate +export const CORE_PUSHNOTIFICATIONS_PROVIDERS: any[] = [ + CorePushNotificationsProvider, + CorePushNotificationsDelegate ]; @NgModule({ @@ -36,20 +36,20 @@ export const ADDON_PUSHNOTIFICATIONS_PROVIDERS: any[] = [ imports: [ ], providers: [ - AddonPushNotificationsProvider, - AddonPushNotificationsDelegate, - AddonPushNotificationsRegisterCronHandler, - AddonPushNotificationsUnregisterCronHandler + CorePushNotificationsProvider, + CorePushNotificationsDelegate, + CorePushNotificationsRegisterCronHandler, + CorePushNotificationsUnregisterCronHandler ] }) -export class AddonPushNotificationsModule { - constructor(platform: Platform, pushNotificationsProvider: AddonPushNotificationsProvider, eventsProvider: CoreEventsProvider, +export class CorePushNotificationsModule { + constructor(platform: Platform, pushNotificationsProvider: CorePushNotificationsProvider, eventsProvider: CoreEventsProvider, localNotificationsProvider: CoreLocalNotificationsProvider, loggerProvider: CoreLoggerProvider, updateManager: CoreUpdateManagerProvider, cronDelegate: CoreCronDelegate, - registerCronHandler: AddonPushNotificationsRegisterCronHandler, - unregisterCronHandler: AddonPushNotificationsUnregisterCronHandler) { + registerCronHandler: CorePushNotificationsRegisterCronHandler, + unregisterCronHandler: CorePushNotificationsUnregisterCronHandler) { - const logger = loggerProvider.getInstance('AddonPushNotificationsModule'); + const logger = loggerProvider.getInstance('CorePushNotificationsModule'); // Register the handlers. cronDelegate.register(registerCronHandler); @@ -80,13 +80,13 @@ export class AddonPushNotificationsModule { }); // Listen for local notification clicks (generated by the app). - localNotificationsProvider.registerClick(AddonPushNotificationsProvider.COMPONENT, + localNotificationsProvider.registerClick(CorePushNotificationsProvider.COMPONENT, pushNotificationsProvider.notificationClicked.bind(pushNotificationsProvider)); // Allow migrating the table from the old app to the new schema. updateManager.registerAppTableMigration({ name: 'mma_pushnotifications_badge', - newName: AddonPushNotificationsProvider.BADGE_TABLE, + newName: CorePushNotificationsProvider.BADGE_TABLE, fields: [ { name: 'siteid', @@ -96,6 +96,6 @@ export class AddonPushNotificationsModule { }); // Migrate the component name. - updateManager.registerLocalNotifComponentMigration('mmaPushNotifications', AddonPushNotificationsProvider.COMPONENT); + updateManager.registerLocalNotifComponentMigration('mmaPushNotifications', CorePushNotificationsProvider.COMPONENT); } } diff --git a/src/core/settings/pages/about/about.ts b/src/core/settings/pages/about/about.ts index 3c6497f49..1c339f5c1 100644 --- a/src/core/settings/pages/about/about.ts +++ b/src/core/settings/pages/about/about.ts @@ -22,7 +22,7 @@ import { CoreLangProvider } from '@providers/lang'; import { CoreLocalNotificationsProvider } from '@providers/local-notifications'; import { CoreSitesProvider } from '@providers/sites'; import { CoreConfigConstants } from '../../../../configconstants'; -import { AddonPushNotificationsProvider } from '@addon/pushnotifications/providers/pushnotifications'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; /** * Page that displays the about settings. @@ -58,7 +58,7 @@ export class CoreSettingsAboutPage { constructor(platform: Platform, device: Device, appProvider: CoreAppProvider, fileProvider: CoreFileProvider, initDelegate: CoreInitDelegate, langProvider: CoreLangProvider, sitesProvider: CoreSitesProvider, - localNotificationsProvider: CoreLocalNotificationsProvider, pushNotificationsProvider: AddonPushNotificationsProvider) { + localNotificationsProvider: CoreLocalNotificationsProvider, pushNotificationsProvider: CorePushNotificationsProvider) { const currentSite = sitesProvider.getCurrentSite(); diff --git a/upgrade.txt b/upgrade.txt index bf90adbac..3a771557b 100644 --- a/upgrade.txt +++ b/upgrade.txt @@ -1,6 +1,10 @@ This files describes API changes in the Moodle Mobile app, information provided here is intended especially for developers. +=== 3.7.0 === + +- The pushnotifications addon has been moved to core. All imports of that addon need to be fixed to use the right path and name. + === 3.6.1 === - The local notifications plugin was updated to its latest version. The new API has some breaking changes, so please check its documentation if you're using local notifications. Also, you need to run "npm install" to update the ionic-native library. From 3182f0ff06a0aa10a71de948799b3f99022c3982 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 15 Mar 2019 08:42:08 +0100 Subject: [PATCH 017/263] MOBILE-2921 push: Use new code for push click handlers --- src/addon/messages/messages.module.ts | 19 +-- .../messages/providers/push-click-handler.ts | 77 +++++++++++ src/addon/mod/forum/forum.module.ts | 9 +- .../mod/forum/providers/push-click-handler.ts | 68 ++++++++++ .../notifications/notifications.module.ts | 49 +------ .../providers/push-click-handler.ts | 56 ++++++++ .../pushnotifications/providers/delegate.ts | 128 ++++++++++++++++-- 7 files changed, 337 insertions(+), 69 deletions(-) create mode 100644 src/addon/messages/providers/push-click-handler.ts create mode 100644 src/addon/mod/forum/providers/push-click-handler.ts create mode 100644 src/addon/notifications/providers/push-click-handler.ts diff --git a/src/addon/messages/messages.module.ts b/src/addon/messages/messages.module.ts index b05391378..2dd05562f 100644 --- a/src/addon/messages/messages.module.ts +++ b/src/addon/messages/messages.module.ts @@ -29,6 +29,7 @@ import { AddonMessagesContactRequestLinkHandler } from './providers/contact-requ import { AddonMessagesDiscussionLinkHandler } from './providers/discussion-link-handler'; import { AddonMessagesIndexLinkHandler } from './providers/index-link-handler'; import { AddonMessagesSyncCronHandler } from './providers/sync-cron-handler'; +import { AddonMessagesPushClickHandler } from './providers/push-click-handler'; import { CoreAppProvider } from '@providers/app'; import { CoreSitesProvider } from '@providers/sites'; import { CoreLocalNotificationsProvider } from '@providers/local-notifications'; @@ -63,7 +64,8 @@ export const ADDON_MESSAGES_PROVIDERS: any[] = [ AddonMessagesDiscussionLinkHandler, AddonMessagesIndexLinkHandler, AddonMessagesSyncCronHandler, - AddonMessagesSettingsHandler + AddonMessagesSettingsHandler, + AddonMessagesPushClickHandler ] }) export class AddonMessagesModule { @@ -77,7 +79,7 @@ export class AddonMessagesModule { settingsHandler: AddonMessagesSettingsHandler, settingsDelegate: CoreSettingsDelegate, pushNotificationsDelegate: CorePushNotificationsDelegate, utils: CoreUtilsProvider, addContactHandler: AddonMessagesAddContactUserHandler, blockContactHandler: AddonMessagesBlockContactUserHandler, - contactRequestLinkHandler: AddonMessagesContactRequestLinkHandler) { + contactRequestLinkHandler: AddonMessagesContactRequestLinkHandler, pushClickHandler: AddonMessagesPushClickHandler) { // Register handlers. mainMenuDelegate.registerHandler(mainmenuHandler); contentLinksDelegate.registerHandler(indexLinkHandler); @@ -89,6 +91,7 @@ export class AddonMessagesModule { cronDelegate.register(syncHandler); cronDelegate.register(mainmenuHandler); settingsDelegate.registerHandler(settingsHandler); + pushNotificationsDelegate.registerClickHandler(pushClickHandler); // Sync some discussions when device goes online. network.onConnect().subscribe(() => { @@ -134,18 +137,6 @@ export class AddonMessagesModule { localNotifications.registerClick(AddonMessagesProvider.PUSH_SIMULATION_COMPONENT, notificationClicked); } - // Register push notification clicks. - pushNotificationsDelegate.on('click').subscribe((notification) => { - if (utils.isFalseOrZero(notification.notif)) { - // Execute the callback in the Angular zone, so change detection doesn't stop working. - zone.run(() => { - notificationClicked(notification); - }); - - return true; - } - }); - // Allow migrating the table from the old app to the new schema. updateManager.registerSiteTableMigration({ name: 'mma_messages_offline_messages', diff --git a/src/addon/messages/providers/push-click-handler.ts b/src/addon/messages/providers/push-click-handler.ts new file mode 100644 index 000000000..a5fc3acf0 --- /dev/null +++ b/src/addon/messages/providers/push-click-handler.ts @@ -0,0 +1,77 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { AddonMessagesProvider } from './messages'; + +/** + * Handler for messaging push notifications clicks. + */ +@Injectable() +export class AddonMessagesPushClickHandler implements CorePushNotificationsClickHandler { + name = 'AddonMessagesPushClickHandler'; + priority = 200; + featureName = 'CoreMainMenuDelegate_AddonMessages'; + + constructor(private utils: CoreUtilsProvider, private messagesProvider: AddonMessagesProvider, + private linkHelper: CoreContentLinksHelperProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + if (this.utils.isTrueOrOne(notification.notif)) { + return false; + } + + // Check that messaging is enabled. + return this.messagesProvider.isPluginEnabled(notification.site); + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + return this.messagesProvider.invalidateDiscussionsCache(notification.site).catch(() => { + // Ignore errors. + }).then(() => { + // Check if group messaging is enabled, to determine which page should be loaded. + return this.messagesProvider.isGroupMessagingEnabledInSite(notification.site).then((enabled) => { + const pageParams: any = {}; + let pageName = 'AddonMessagesIndexPage'; + if (enabled) { + pageName = 'AddonMessagesGroupConversationsPage'; + } + + // Check if we have enough information to open the conversation. + if (notification.convid && enabled) { + pageParams.conversationId = Number(notification.convid); + } else if (notification.userfromid) { + pageParams.discussionUserId = Number(notification.userfromid); + } + + return this.linkHelper.goInSite(undefined, pageName, pageParams, notification.site); + }); + }); + } +} diff --git a/src/addon/mod/forum/forum.module.ts b/src/addon/mod/forum/forum.module.ts index b925af0b4..215c343e6 100644 --- a/src/addon/mod/forum/forum.module.ts +++ b/src/addon/mod/forum/forum.module.ts @@ -17,6 +17,7 @@ import { CoreCronDelegate } from '@providers/cron'; import { CoreCourseModuleDelegate } from '@core/course/providers/module-delegate'; import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate'; import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; import { AddonModForumProvider } from './providers/forum'; import { AddonModForumOfflineProvider } from './providers/offline'; import { AddonModForumHelperProvider } from './providers/helper'; @@ -27,6 +28,7 @@ import { AddonModForumSyncCronHandler } from './providers/sync-cron-handler'; import { AddonModForumIndexLinkHandler } from './providers/index-link-handler'; import { AddonModForumDiscussionLinkHandler } from './providers/discussion-link-handler'; import { AddonModForumListLinkHandler } from './providers/list-link-handler'; +import { AddonModForumPushClickHandler } from './providers/push-click-handler'; import { AddonModForumComponentsModule } from './components/components.module'; import { CoreUpdateManagerProvider } from '@providers/update-manager'; @@ -54,7 +56,8 @@ export const ADDON_MOD_FORUM_PROVIDERS: any[] = [ AddonModForumSyncCronHandler, AddonModForumIndexLinkHandler, AddonModForumListLinkHandler, - AddonModForumDiscussionLinkHandler + AddonModForumDiscussionLinkHandler, + AddonModForumPushClickHandler ] }) export class AddonModForumModule { @@ -62,7 +65,8 @@ export class AddonModForumModule { prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModForumPrefetchHandler, cronDelegate: CoreCronDelegate, syncHandler: AddonModForumSyncCronHandler, linksDelegate: CoreContentLinksDelegate, indexHandler: AddonModForumIndexLinkHandler, discussionHandler: AddonModForumDiscussionLinkHandler, - updateManager: CoreUpdateManagerProvider, listLinkHandler: AddonModForumListLinkHandler) { + updateManager: CoreUpdateManagerProvider, listLinkHandler: AddonModForumListLinkHandler, + pushNotificationsDelegate: CorePushNotificationsDelegate, pushClickHandler: AddonModForumPushClickHandler) { moduleDelegate.registerHandler(moduleHandler); prefetchDelegate.registerHandler(prefetchHandler); @@ -70,6 +74,7 @@ export class AddonModForumModule { linksDelegate.registerHandler(indexHandler); linksDelegate.registerHandler(discussionHandler); linksDelegate.registerHandler(listLinkHandler); + pushNotificationsDelegate.registerClickHandler(pushClickHandler); // Allow migrating the tables from the old app to the new schema. updateManager.registerSiteTablesMigration([ diff --git a/src/addon/mod/forum/providers/push-click-handler.ts b/src/addon/mod/forum/providers/push-click-handler.ts new file mode 100644 index 000000000..145d5bf88 --- /dev/null +++ b/src/addon/mod/forum/providers/push-click-handler.ts @@ -0,0 +1,68 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreUrlUtilsProvider } from '@providers/utils/url'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { AddonModForumProvider } from './forum'; + +/** + * Handler for forum push notifications clicks. + */ +@Injectable() +export class AddonModForumPushClickHandler implements CorePushNotificationsClickHandler { + name = 'AddonModForumPushClickHandler'; + priority = 200; + featureName = 'CoreCourseModuleDelegate_AddonModForum'; + + constructor(private utils: CoreUtilsProvider, private forumProvider: AddonModForumProvider, + private urlUtils: CoreUrlUtilsProvider, private linkHelper: CoreContentLinksHelperProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + return this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'mod_forum' && + notification.name == 'posts'; + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + const contextUrlParams = this.urlUtils.extractUrlParams(notification.contexturl), + pageParams: any = { + courseId: Number(notification.courseid), + discussionId: Number(contextUrlParams.d), + }; + + if (contextUrlParams.urlHash) { + pageParams.postId = Number(contextUrlParams.urlHash.replace('p', '')); + } + + return this.forumProvider.invalidateDiscussionPosts(pageParams.discussionId).catch(() => { + // Ignore errors. + }).then(() => { + return this.linkHelper.goInSite(undefined, 'AddonModForumDiscussionPage', pageParams, notification.site); + }); + } +} diff --git a/src/addon/notifications/notifications.module.ts b/src/addon/notifications/notifications.module.ts index ff86d5f29..b19fd72dc 100644 --- a/src/addon/notifications/notifications.module.ts +++ b/src/addon/notifications/notifications.module.ts @@ -17,6 +17,7 @@ import { AddonNotificationsProvider } from './providers/notifications'; import { AddonNotificationsMainMenuHandler } from './providers/mainmenu-handler'; import { AddonNotificationsSettingsHandler } from './providers/settings-handler'; import { AddonNotificationsCronHandler } from './providers/cron-handler'; +import { AddonNotificationsPushClickHandler } from './providers/push-click-handler'; import { CoreAppProvider } from '@providers/app'; import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { CoreMainMenuDelegate } from '@core/mainmenu/providers/delegate'; @@ -24,10 +25,8 @@ import { CoreSettingsDelegate } from '@core/settings/providers/delegate'; import { CoreCronDelegate } from '@providers/cron'; import { CoreLocalNotificationsProvider } from '@providers/local-notifications'; import { CoreSitesProvider } from '@providers/sites'; -import { CoreUrlUtilsProvider } from '@providers/utils/url'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; -import { AddonModForumProvider } from '@addon/mod/forum/providers/forum'; // List of providers (without handlers). export const ADDON_NOTIFICATIONS_PROVIDERS: any[] = [ @@ -44,6 +43,7 @@ export const ADDON_NOTIFICATIONS_PROVIDERS: any[] = [ AddonNotificationsMainMenuHandler, AddonNotificationsSettingsHandler, AddonNotificationsCronHandler, + AddonNotificationsPushClickHandler ] }) export class AddonNotificationsModule { @@ -53,43 +53,14 @@ export class AddonNotificationsModule { appProvider: CoreAppProvider, utils: CoreUtilsProvider, sitesProvider: CoreSitesProvider, notificationsProvider: AddonNotificationsProvider, localNotifications: CoreLocalNotificationsProvider, linkHelper: CoreContentLinksHelperProvider, pushNotificationsDelegate: CorePushNotificationsDelegate, - urlUtils: CoreUrlUtilsProvider, forumProvider: AddonModForumProvider) { + pushClickHandler: AddonNotificationsPushClickHandler) { mainMenuDelegate.registerHandler(mainMenuHandler); settingsDelegate.registerHandler(settingsHandler); cronDelegate.register(cronHandler); + pushNotificationsDelegate.registerClickHandler(pushClickHandler); const notificationClicked = (notification: any): void => { - - // Temporary fix to make forum notifications work. This will be improved in next release. - if (notification.moodlecomponent == 'mod_forum' && notification.name == 'posts') { - sitesProvider.isFeatureDisabled('CoreCourseModuleDelegate_AddonModForum', notification.site).then((disabled) => { - if (disabled) { - // Forum is disabled, stop. - return; - } - - const contextUrlParams = urlUtils.extractUrlParams(notification.contexturl), - pageParams: any = { - courseId: Number(notification.courseid), - discussionId: Number(contextUrlParams.d), - }; - - if (contextUrlParams.urlHash) { - pageParams.postId = Number(contextUrlParams.urlHash.replace('p', '')); - } - - forumProvider.invalidateDiscussionPosts(pageParams.discussionId).catch(() => { - // Ignore errors. - }).then(() => { - linkHelper.goInSite(undefined, 'AddonModForumDiscussionPage', pageParams, notification.site); - }); - }); - } else { - goToNotifications(notification); - } - }; - const goToNotifications = (notification: any): void => { sitesProvider.isFeatureDisabled('CoreMainMenuDelegate_AddonNotifications', notification.site).then((disabled) => { if (disabled) { // Notifications are disabled, stop. @@ -106,17 +77,5 @@ export class AddonNotificationsModule { // Listen for clicks in simulated push notifications. localNotifications.registerClick(AddonNotificationsProvider.PUSH_SIMULATION_COMPONENT, notificationClicked); } - - // Register push notification clicks. - pushNotificationsDelegate.on('click').subscribe((notification) => { - if (utils.isTrueOrOne(notification.notif)) { - // Execute the callback in the Angular zone, so change detection doesn't stop working. - zone.run(() => { - notificationClicked(notification); - }); - - return true; - } - }); } } diff --git a/src/addon/notifications/providers/push-click-handler.ts b/src/addon/notifications/providers/push-click-handler.ts new file mode 100644 index 000000000..74baeaa4d --- /dev/null +++ b/src/addon/notifications/providers/push-click-handler.ts @@ -0,0 +1,56 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { AddonNotificationsProvider } from './notifications'; + +/** + * Handler for non-messaging push notifications clicks. + */ +@Injectable() +export class AddonNotificationsPushClickHandler implements CorePushNotificationsClickHandler { + name = 'AddonNotificationsPushClickHandler'; + priority = 0; // Low priority so it's used as a fallback if no other handler treats the notification. + featureName = 'CoreMainMenuDelegate_AddonNotifications'; + + constructor(private utils: CoreUtilsProvider, private notificationsProvider: AddonNotificationsProvider, + private linkHelper: CoreContentLinksHelperProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + return this.utils.isTrueOrOne(notification.notif); + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + return this.notificationsProvider.invalidateNotificationsList(notification.site).catch(() => { + // Ignore errors. + }).then(() => { + return this.linkHelper.goInSite(undefined, 'AddonNotificationsListPage', undefined, notification.site); + }); + } +} diff --git a/src/core/pushnotifications/providers/delegate.ts b/src/core/pushnotifications/providers/delegate.ts index dbd0f12fe..8f64a4ed5 100644 --- a/src/core/pushnotifications/providers/delegate.ts +++ b/src/core/pushnotifications/providers/delegate.ts @@ -14,8 +14,50 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; +import { CoreSitesProvider } from '@providers/sites'; +import { CoreUtilsProvider } from '@providers/utils/utils'; import { Subject } from 'rxjs'; +/** + * Interface that all click handlers must implement. + */ +export interface CorePushNotificationsClickHandler { + /** + * A name to identify the handler. + * @type {string} + */ + name: string; + + /** + * Handler's priority. The highest priority is treated first. + * @type {number} + */ + priority?: number; + + /** + * Name of the feature this handler is related to. + * It will be used to check if the feature is disabled (@see CoreSite.isFeatureDisabled). + * @type {string} + */ + featureName?: string; + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler. + */ + handles(notification: any): boolean | Promise; + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise; +} + /** * Service to handle push notifications actions to perform when clicked and received. */ @@ -24,11 +66,11 @@ export class CorePushNotificationsDelegate { protected logger; protected observables: { [s: string]: Subject } = {}; + protected clickHandlers: { [s: string]: CorePushNotificationsClickHandler } = {}; protected counterHandlers: { [s: string]: string } = {}; - constructor(loggerProvider: CoreLoggerProvider) { + constructor(loggerProvider: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private utils: CoreUtilsProvider) { this.logger = loggerProvider.getInstance('CorePushNotificationsDelegate'); - this.observables['click'] = new Subject(); this.observables['receive'] = new Subject(); } @@ -36,9 +78,61 @@ export class CorePushNotificationsDelegate { * Function called when a push notification is clicked. Sends notification to handlers. * * @param {any} notification Notification clicked. + * @return {Promise} Promise resolved when done. */ - clicked(notification: any): void { - this.observables['click'].next(notification); + clicked(notification: any): Promise { + if (!notification) { + return; + } + + const promises = []; + let handlers: CorePushNotificationsClickHandler[] = []; + + for (const name in this.clickHandlers) { + const handler = this.clickHandlers[name]; + + // Check if the handler is disabled for the site. + promises.push(this.isFeatureDisabled(handler, notification.site).then((disabled) => { + if (!disabled) { + // Check if the handler handles the notification. + return Promise.resolve(handler.handles(notification)).then((handles) => { + if (handles) { + handlers.push(handler); + } + }); + } + })); + } + + return this.utils.allPromises(promises).catch(() => { + // Ignore errors. + }).then(() => { + // Sort by priority. + handlers = handlers.sort((a, b) => { + return a.priority <= b.priority ? 1 : -1; + }); + + if (handlers[0]) { + // Execute the first one. + handlers[0].handleClick(notification); + } + }); + } + + /** + * Check if a handler's feature is disabled for a certain site. + * + * @param {CorePushNotificationsClickHandler} handler Handler to check. + * @param {string} siteId The site ID to check. + * @return {Promise} Promise resolved with boolean: whether the handler feature is disabled. + */ + protected isFeatureDisabled(handler: CorePushNotificationsClickHandler, siteId: string): Promise { + if (handler.featureName) { + // Check if the feature is disabled. + return this.sitesProvider.isFeatureDisabled(handler.featureName, siteId); + } else { + return Promise.resolve(false); + } } /** @@ -52,13 +146,12 @@ export class CorePushNotificationsDelegate { } /** - * Register a push notifications observable for click and receive notification event. - * When a notification is clicked or received, the observable will receive a notification to treat. - * let observer = pushNotificationsDelegate.on('click').subscribe((notification) => { + * Register a push notifications observable for a certain event. Right now, only receive is supported. + * let observer = pushNotificationsDelegate.on('receive').subscribe((notification) => { * ... * observer.unsuscribe(); * - * @param {string} eventName Only click and receive are permitted. + * @param {string} eventName Only receive is permitted. * @return {Subject} Observer to subscribe. */ on(eventName: string): Subject { @@ -72,6 +165,25 @@ export class CorePushNotificationsDelegate { return this.observables[eventName]; } + /** + * Register a click handler. + * + * @param {CorePushNotificationsClickHandler} handler The handler to register. + * @return {boolean} True if registered successfully, false otherwise. + */ + registerClickHandler(handler: CorePushNotificationsClickHandler): boolean { + if (typeof this.clickHandlers[handler.name] !== 'undefined') { + this.logger.log(`Addon '${handler.name}' already registered`); + + return false; + } + + this.logger.log(`Registered addon '${handler.name}'`); + this.clickHandlers[handler.name] = handler; + + return true; + } + /** * Register a push notifications handler for update badge counter. * From 34d77d8d143978768aa5baef511ae19b77377023 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 15 Mar 2019 13:18:04 +0100 Subject: [PATCH 018/263] MOBILE-2921 push: Support contact request notifications --- src/addon/messages/providers/push-click-handler.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/addon/messages/providers/push-click-handler.ts b/src/addon/messages/providers/push-click-handler.ts index a5fc3acf0..f6fcf3c0e 100644 --- a/src/addon/messages/providers/push-click-handler.ts +++ b/src/addon/messages/providers/push-click-handler.ts @@ -15,7 +15,7 @@ import { Injectable } from '@angular/core'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; -import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; import { AddonMessagesProvider } from './messages'; /** @@ -28,7 +28,7 @@ export class AddonMessagesPushClickHandler implements CorePushNotificationsClick featureName = 'CoreMainMenuDelegate_AddonMessages'; constructor(private utils: CoreUtilsProvider, private messagesProvider: AddonMessagesProvider, - private linkHelper: CoreContentLinksHelperProvider) {} + private loginHelper: CoreLoginHelperProvider) {} /** * Check if a notification click is handled by this handler. @@ -37,7 +37,7 @@ export class AddonMessagesPushClickHandler implements CorePushNotificationsClick * @return {boolean} Whether the notification click is handled by this handler */ handles(notification: any): boolean | Promise { - if (this.utils.isTrueOrOne(notification.notif)) { + if (this.utils.isTrueOrOne(notification.notif) && notification.name != 'messagecontactrequests') { return false; } @@ -70,7 +70,7 @@ export class AddonMessagesPushClickHandler implements CorePushNotificationsClick pageParams.discussionUserId = Number(notification.userfromid); } - return this.linkHelper.goInSite(undefined, pageName, pageParams, notification.site); + return this.loginHelper.redirect(pageName, pageParams, notification.site); }); }); } From 881b7675cff0b8a82648a1a35dcef580ab51a08e Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 15 Mar 2019 14:42:47 +0100 Subject: [PATCH 019/263] MOBILE-2921 notification: Mark as read when push clicked --- .../messages/providers/mainmenu-handler.ts | 3 ++- src/addon/messages/providers/messages.ts | 17 +++++++----- .../notifications/providers/notifications.ts | 26 ++++++++++--------- .../providers/push-click-handler.ts | 16 ++++++++++-- 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/src/addon/messages/providers/mainmenu-handler.ts b/src/addon/messages/providers/mainmenu-handler.ts index 0e530613a..4b83ae499 100644 --- a/src/addon/messages/providers/mainmenu-handler.ts +++ b/src/addon/messages/providers/mainmenu-handler.ts @@ -76,7 +76,8 @@ export class AddonMessagesMainMenuHandler implements CoreMainMenuHandler, CoreCr // If a message push notification is received, refresh the count. pushNotificationsDelegate.on('receive').subscribe((notification) => { // New message received. If it's from current site, refresh the data. - if (utils.isFalseOrZero(notification.notif) && this.sitesProvider.isCurrentSite(notification.site)) { + const isMessage = utils.isFalseOrZero(notification.notif) || notification.name == 'messagecontactrequests'; + if (isMessage && this.sitesProvider.isCurrentSite(notification.site)) { this.refreshBadge(notification.site); } }); diff --git a/src/addon/messages/providers/messages.ts b/src/addon/messages/providers/messages.ts index c81d27e65..6bf99d882 100644 --- a/src/addon/messages/providers/messages.ts +++ b/src/addon/messages/providers/messages.ts @@ -1863,16 +1863,19 @@ export class AddonMessagesProvider { /** * Mark message as read. * - * @param {number} messageId ID of message to mark as read + * @param {number} messageId ID of message to mark as read + * @param {string} [siteId] Site ID. If not defined, current site. * @returns {Promise} Promise resolved with boolean marking success or not. */ - markMessageRead(messageId: number): Promise { - const params = { - messageid: messageId, - timeread: this.timeUtils.timestamp() - }; + markMessageRead(messageId: number, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + const params = { + messageid: messageId, + timeread: this.timeUtils.timestamp() + }; - return this.sitesProvider.getCurrentSite().write('core_message_mark_message_read', params); + return site.write('core_message_mark_message_read', params); + }); } /** diff --git a/src/addon/notifications/providers/notifications.ts b/src/addon/notifications/providers/notifications.ts index ebe5a1359..1b9219fe8 100644 --- a/src/addon/notifications/providers/notifications.ts +++ b/src/addon/notifications/providers/notifications.ts @@ -262,23 +262,25 @@ export class AddonNotificationsProvider { * Mark a single notification as read. * * @param {number} notificationId ID of notification to mark as read + * @param {string} [siteId] Site ID. If not defined, current site. * @returns {Promise} Resolved when done. * @since 3.5 */ - markNotificationRead(notificationId: number): Promise { - const currentSite = this.sitesProvider.getCurrentSite(); + markNotificationRead(notificationId: number, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { - if (currentSite.wsAvailable('core_message_mark_notification_read')) { - const params = { - notificationid: notificationId, - timeread: this.timeUtils.timestamp() - }; + if (site.wsAvailable('core_message_mark_notification_read')) { + const params = { + notificationid: notificationId, + timeread: this.timeUtils.timestamp() + }; - return currentSite.write('core_message_mark_notification_read', params); - } else { - // Fallback for versions prior to 3.5. - return this.messageProvider.markMessageRead(notificationId); - } + return site.write('core_message_mark_notification_read', params); + } else { + // Fallback for versions prior to 3.5. + return this.messageProvider.markMessageRead(notificationId, site.id); + } + }); } /** diff --git a/src/addon/notifications/providers/push-click-handler.ts b/src/addon/notifications/providers/push-click-handler.ts index 74baeaa4d..4d8d2f382 100644 --- a/src/addon/notifications/providers/push-click-handler.ts +++ b/src/addon/notifications/providers/push-click-handler.ts @@ -13,6 +13,7 @@ // limitations under the License. import { Injectable } from '@angular/core'; +import { CoreEventsProvider } from '@providers/events'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; @@ -28,7 +29,7 @@ export class AddonNotificationsPushClickHandler implements CorePushNotifications featureName = 'CoreMainMenuDelegate_AddonNotifications'; constructor(private utils: CoreUtilsProvider, private notificationsProvider: AddonNotificationsProvider, - private linkHelper: CoreContentLinksHelperProvider) {} + private linkHelper: CoreContentLinksHelperProvider, private eventsProvider: CoreEventsProvider) {} /** * Check if a notification click is handled by this handler. @@ -37,7 +38,18 @@ export class AddonNotificationsPushClickHandler implements CorePushNotifications * @return {boolean} Whether the notification click is handled by this handler */ handles(notification: any): boolean | Promise { - return this.utils.isTrueOrOne(notification.notif); + if (this.utils.isTrueOrOne(notification.notif)) { + // Notification clicked, mark as read. Don't block for this. + this.notificationsProvider.markNotificationRead(notification.savedmessageid, notification.site).then(() => { + this.eventsProvider.trigger(AddonNotificationsProvider.READ_CHANGED_EVENT, null, notification.site); + }).catch(() => { + // Ignore errors. + }); + + return true; + } + + return false; } /** From 6536ffecadc4229d9127cebb3d8c6558974b390e Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 18 Mar 2019 10:59:36 +0100 Subject: [PATCH 020/263] MOBILE-2921 assign: Support assign push clicks --- src/addon/mod/assign/assign.module.ts | 9 ++- .../assign/providers/push-click-handler.ts | 62 +++++++++++++++++++ .../mod/forum/providers/push-click-handler.ts | 2 +- 3 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 src/addon/mod/assign/providers/push-click-handler.ts diff --git a/src/addon/mod/assign/assign.module.ts b/src/addon/mod/assign/assign.module.ts index 39a87ad9d..74fe86c4e 100644 --- a/src/addon/mod/assign/assign.module.ts +++ b/src/addon/mod/assign/assign.module.ts @@ -17,6 +17,7 @@ import { CoreCronDelegate } from '@providers/cron'; import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; import { CoreCourseModuleDelegate } from '@core/course/providers/module-delegate'; import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; import { AddonModAssignProvider } from './providers/assign'; import { AddonModAssignOfflineProvider } from './providers/assign-offline'; import { AddonModAssignSyncProvider } from './providers/assign-sync'; @@ -30,6 +31,7 @@ import { AddonModAssignPrefetchHandler } from './providers/prefetch-handler'; import { AddonModAssignSyncCronHandler } from './providers/sync-cron-handler'; import { AddonModAssignIndexLinkHandler } from './providers/index-link-handler'; import { AddonModAssignListLinkHandler } from './providers/list-link-handler'; +import { AddonModAssignPushClickHandler } from './providers/push-click-handler'; import { AddonModAssignSubmissionModule } from './submission/submission.module'; import { AddonModAssignFeedbackModule } from './feedback/feedback.module'; import { CoreUpdateManagerProvider } from '@providers/update-manager'; @@ -64,7 +66,8 @@ export const ADDON_MOD_ASSIGN_PROVIDERS: any[] = [ AddonModAssignPrefetchHandler, AddonModAssignSyncCronHandler, AddonModAssignIndexLinkHandler, - AddonModAssignListLinkHandler + AddonModAssignListLinkHandler, + AddonModAssignPushClickHandler ] }) export class AddonModAssignModule { @@ -72,13 +75,15 @@ export class AddonModAssignModule { prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModAssignPrefetchHandler, cronDelegate: CoreCronDelegate, syncHandler: AddonModAssignSyncCronHandler, updateManager: CoreUpdateManagerProvider, contentLinksDelegate: CoreContentLinksDelegate, linkHandler: AddonModAssignIndexLinkHandler, - listLinkHandler: AddonModAssignListLinkHandler) { + listLinkHandler: AddonModAssignListLinkHandler, pushNotificationsDelegate: CorePushNotificationsDelegate, + pushClickHandler: AddonModAssignPushClickHandler) { moduleDelegate.registerHandler(moduleHandler); prefetchDelegate.registerHandler(prefetchHandler); cronDelegate.register(syncHandler); contentLinksDelegate.registerHandler(linkHandler); contentLinksDelegate.registerHandler(listLinkHandler); + pushNotificationsDelegate.registerClickHandler(pushClickHandler); // Allow migrating the tables from the old app to the new schema. updateManager.registerSiteTablesMigration([ diff --git a/src/addon/mod/assign/providers/push-click-handler.ts b/src/addon/mod/assign/providers/push-click-handler.ts new file mode 100644 index 000000000..abe6fa608 --- /dev/null +++ b/src/addon/mod/assign/providers/push-click-handler.ts @@ -0,0 +1,62 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreUrlUtilsProvider } from '@providers/utils/url'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; +import { AddonModAssignProvider } from './assign'; + +/** + * Handler for assign push notifications clicks. + */ +@Injectable() +export class AddonModAssignPushClickHandler implements CorePushNotificationsClickHandler { + name = 'AddonModAssignPushClickHandler'; + priority = 200; + featureName = 'CoreCourseModuleDelegate_AddonModAssign'; + + constructor(private utils: CoreUtilsProvider, private assignProvider: AddonModAssignProvider, + private urlUtils: CoreUrlUtilsProvider, private courseHelper: CoreCourseHelperProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + return this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'mod_assign' && + notification.name == 'assign_notification'; + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + const contextUrlParams = this.urlUtils.extractUrlParams(notification.contexturl), + courseId = Number(notification.courseid), + moduleId = Number(contextUrlParams.id); + + return this.assignProvider.invalidateContent(moduleId, courseId, notification.site).catch(() => { + // Ignore errors. + }).then(() => { + return this.courseHelper.navigateToModule(moduleId, notification.site, courseId); + }); + } +} diff --git a/src/addon/mod/forum/providers/push-click-handler.ts b/src/addon/mod/forum/providers/push-click-handler.ts index 145d5bf88..4a224a843 100644 --- a/src/addon/mod/forum/providers/push-click-handler.ts +++ b/src/addon/mod/forum/providers/push-click-handler.ts @@ -59,7 +59,7 @@ export class AddonModForumPushClickHandler implements CorePushNotificationsClick pageParams.postId = Number(contextUrlParams.urlHash.replace('p', '')); } - return this.forumProvider.invalidateDiscussionPosts(pageParams.discussionId).catch(() => { + return this.forumProvider.invalidateDiscussionPosts(pageParams.discussionId, notification.site).catch(() => { // Ignore errors. }).then(() => { return this.linkHelper.goInSite(undefined, 'AddonModForumDiscussionPage', pageParams, notification.site); From 17ff0ec01a4d86a17b8de4222f04e94db6b5cb6d Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 18 Mar 2019 12:48:49 +0100 Subject: [PATCH 021/263] MOBILE-2921 feedback: Support feedback push clicks --- src/addon/mod/feedback/feedback.module.ts | 9 ++- src/addon/mod/feedback/providers/helper.ts | 50 +++++++++++++- .../feedback/providers/push-click-handler.ts | 69 +++++++++++++++++++ .../providers/show-entries-link-handler.ts | 39 +---------- 4 files changed, 128 insertions(+), 39 deletions(-) create mode 100644 src/addon/mod/feedback/providers/push-click-handler.ts diff --git a/src/addon/mod/feedback/feedback.module.ts b/src/addon/mod/feedback/feedback.module.ts index ded66de7e..7811fc5cd 100644 --- a/src/addon/mod/feedback/feedback.module.ts +++ b/src/addon/mod/feedback/feedback.module.ts @@ -17,6 +17,7 @@ import { CoreCronDelegate } from '@providers/cron'; import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; import { CoreCourseModuleDelegate } from '@core/course/providers/module-delegate'; import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; import { AddonModFeedbackComponentsModule } from './components/components.module'; import { AddonModFeedbackModuleHandler } from './providers/module-handler'; import { AddonModFeedbackProvider } from './providers/feedback'; @@ -29,6 +30,7 @@ import { AddonModFeedbackPrintLinkHandler } from './providers/print-link-handler import { AddonModFeedbackListLinkHandler } from './providers/list-link-handler'; import { AddonModFeedbackHelperProvider } from './providers/helper'; import { AddonModFeedbackPrefetchHandler } from './providers/prefetch-handler'; +import { AddonModFeedbackPushClickHandler } from './providers/push-click-handler'; import { AddonModFeedbackSyncProvider } from './providers/sync'; import { AddonModFeedbackSyncCronHandler } from './providers/sync-cron-handler'; import { AddonModFeedbackOfflineProvider } from './providers/offline'; @@ -62,7 +64,8 @@ export const ADDON_MOD_FEEDBACK_PROVIDERS: any[] = [ AddonModFeedbackCompleteLinkHandler, AddonModFeedbackPrintLinkHandler, AddonModFeedbackListLinkHandler, - AddonModFeedbackSyncCronHandler + AddonModFeedbackSyncCronHandler, + AddonModFeedbackPushClickHandler ] }) export class AddonModFeedbackModule { @@ -74,7 +77,8 @@ export class AddonModFeedbackModule { showEntriesLinkHandler: AddonModFeedbackShowEntriesLinkHandler, showNonRespondentsLinkHandler: AddonModFeedbackShowNonRespondentsLinkHandler, completeLinkHandler: AddonModFeedbackCompleteLinkHandler, - printLinkHandler: AddonModFeedbackPrintLinkHandler, listLinkHandler: AddonModFeedbackListLinkHandler) { + printLinkHandler: AddonModFeedbackPrintLinkHandler, listLinkHandler: AddonModFeedbackListLinkHandler, + pushNotificationsDelegate: CorePushNotificationsDelegate, pushClickHandler: AddonModFeedbackPushClickHandler) { moduleDelegate.registerHandler(moduleHandler); prefetchDelegate.registerHandler(prefetchHandler); @@ -86,6 +90,7 @@ export class AddonModFeedbackModule { contentLinksDelegate.registerHandler(printLinkHandler); contentLinksDelegate.registerHandler(listLinkHandler); cronDelegate.register(syncHandler); + pushNotificationsDelegate.registerClickHandler(pushClickHandler); // Allow migrating the tables from the old app to the new schema. updateManager.registerSiteTableMigration({ diff --git a/src/addon/mod/feedback/providers/helper.ts b/src/addon/mod/feedback/providers/helper.ts index 538dde0c2..45c7b8a3a 100644 --- a/src/addon/mod/feedback/providers/helper.ts +++ b/src/addon/mod/feedback/providers/helper.ts @@ -16,6 +16,10 @@ import { Injectable } from '@angular/core'; import { NavController, ViewController } from 'ionic-angular'; import { AddonModFeedbackProvider } from './feedback'; import { CoreUserProvider } from '@core/user/providers/user'; +import { CoreCourseProvider } from '@core/course/providers/course'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { CoreSitesProvider } from '@providers/sites'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { TranslateService } from '@ngx-translate/core'; @@ -32,7 +36,9 @@ export class AddonModFeedbackHelperProvider { constructor(protected feedbackProvider: AddonModFeedbackProvider, protected userProvider: CoreUserProvider, protected textUtils: CoreTextUtilsProvider, protected translate: TranslateService, - protected timeUtils: CoreTimeUtilsProvider) { + protected timeUtils: CoreTimeUtilsProvider, protected domUtils: CoreDomUtilsProvider, + protected courseProvider: CoreCourseProvider, protected linkHelper: CoreContentLinksHelperProvider, + protected sitesProvider: CoreSitesProvider) { } /** @@ -193,6 +199,48 @@ export class AddonModFeedbackHelperProvider { }); } + /** + * Handle a show entries link. + * + * @param {NavController} navCtrl Nav controller to use to navigate. Can be undefined/null. + * @param {any} params URL params. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + handleShowEntriesLink(navCtrl: NavController, params: any, siteId?: string): Promise { + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + + const modal = this.domUtils.showModalLoading(), + moduleId = params.id; + + return this.courseProvider.getModuleBasicInfo(moduleId, siteId).then((module) => { + let stateParams; + + if (typeof params.showcompleted == 'undefined') { + // Param showcompleted not defined. Show entry list. + stateParams = { + module: module, + courseId: module.course + }; + + return this.linkHelper.goInSite(navCtrl, 'AddonModFeedbackRespondentsPage', stateParams, siteId); + } + + return this.feedbackProvider.getAttempt(module.instance, params.showcompleted, true, siteId).then((attempt) => { + stateParams = { + moduleId: module.id, + attempt: attempt, + feedbackId: module.instance, + courseId: module.course + }; + + return this.linkHelper.goInSite(navCtrl, 'AddonModFeedbackAttemptPage', stateParams, siteId); + }); + }).finally(() => { + modal.dismiss(); + }); + } + /** * Add Image profile url field on attempts * diff --git a/src/addon/mod/feedback/providers/push-click-handler.ts b/src/addon/mod/feedback/providers/push-click-handler.ts new file mode 100644 index 000000000..675e7d0dd --- /dev/null +++ b/src/addon/mod/feedback/providers/push-click-handler.ts @@ -0,0 +1,69 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreUrlUtilsProvider } from '@providers/utils/url'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; +import { AddonModFeedbackProvider } from './feedback'; +import { AddonModFeedbackHelperProvider } from './helper'; + +/** + * Handler for feedback push notifications clicks. + */ +@Injectable() +export class AddonModFeedbackPushClickHandler implements CorePushNotificationsClickHandler { + name = 'AddonModFeedbackPushClickHandler'; + priority = 200; + featureName = 'CoreCourseModuleDelegate_AddonModFeedback'; + + constructor(private utils: CoreUtilsProvider, private feedbackHelper: AddonModFeedbackHelperProvider, + private urlUtils: CoreUrlUtilsProvider, private courseHelper: CoreCourseHelperProvider, + private feedbackProvider: AddonModFeedbackProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + if (this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'mod_feedback' && + (notification.name == 'submission' || notification.name == 'message')) { + + return this.feedbackProvider.isPluginEnabled(notification.site); + } + + return false; + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + const contextUrlParams = this.urlUtils.extractUrlParams(notification.contexturl), + courseId = Number(notification.courseid), + moduleId = Number(contextUrlParams.id); + + if (notification.name == 'submission') { + return this.feedbackHelper.handleShowEntriesLink(undefined, contextUrlParams, notification.site); + } else { + return this.courseHelper.navigateToModule(moduleId, notification.site, courseId); + } + } +} diff --git a/src/addon/mod/feedback/providers/show-entries-link-handler.ts b/src/addon/mod/feedback/providers/show-entries-link-handler.ts index d10c156da..498703386 100644 --- a/src/addon/mod/feedback/providers/show-entries-link-handler.ts +++ b/src/addon/mod/feedback/providers/show-entries-link-handler.ts @@ -15,10 +15,8 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; -import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { AddonModFeedbackProvider } from './feedback'; -import { CoreCourseProvider } from '@core/course/providers/course'; -import { CoreDomUtilsProvider } from '@providers/utils/dom'; +import { AddonModFeedbackHelperProvider } from './helper'; /** * Content links handler for feedback show entries questions. @@ -30,8 +28,7 @@ export class AddonModFeedbackShowEntriesLinkHandler extends CoreContentLinksHand featureName = 'CoreCourseModuleDelegate_AddonModFeedback'; pattern = /\/mod\/feedback\/show_entries\.php.*([\?\&](id|showcompleted)=\d+)/; - constructor(private linkHelper: CoreContentLinksHelperProvider, private feedbackProvider: AddonModFeedbackProvider, - private courseProvider: CoreCourseProvider, private domUtils: CoreDomUtilsProvider) { + constructor(private feedbackProvider: AddonModFeedbackProvider, private feedbackHelper: AddonModFeedbackHelperProvider) { super(); } @@ -48,37 +45,7 @@ export class AddonModFeedbackShowEntriesLinkHandler extends CoreContentLinksHand CoreContentLinksAction[] | Promise { return [{ action: (siteId, navCtrl?): void => { - const modal = this.domUtils.showModalLoading(), - moduleId = params.id; - - this.courseProvider.getModuleBasicInfo(moduleId, siteId).then((module) => { - let stateParams; - - if (typeof params.showcompleted == 'undefined') { - // Param showcompleted not defined. Show entry list. - stateParams = { - moduleId: module.id, - module: module, - courseId: module.course - }; - - return this.linkHelper.goInSite(navCtrl, 'AddonModFeedbackRespondentsPage', stateParams, siteId); - } - - return this.feedbackProvider.getAttempt(module.instance, params.showcompleted, true, siteId).then((attempt) => { - stateParams = { - moduleId: module.id, - attempt: attempt, - attemptId: attempt.id, - feedbackId: module.instance, - courseId: module.course - }; - - return this.linkHelper.goInSite(navCtrl, 'AddonModFeedbackAttemptPage', stateParams, siteId); - }); - }).finally(() => { - modal.dismiss(); - }); + this.feedbackHelper.handleShowEntriesLink(navCtrl, params, siteId); } }]; } From a38fcf6d6f203af25c85f44715794ee1b6c60184 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 18 Mar 2019 13:40:21 +0100 Subject: [PATCH 022/263] MOBILE-2921 badges: Support badges push clicks --- src/addon/badges/badges.module.ts | 9 ++- .../badges/providers/push-click-handler.ts | 64 +++++++++++++++++++ 2 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 src/addon/badges/providers/push-click-handler.ts diff --git a/src/addon/badges/badges.module.ts b/src/addon/badges/badges.module.ts index 380fe0046..20163a208 100644 --- a/src/addon/badges/badges.module.ts +++ b/src/addon/badges/badges.module.ts @@ -17,8 +17,10 @@ import { AddonBadgesProvider } from './providers/badges'; import { AddonBadgesUserHandler } from './providers/user-handler'; import { AddonBadgesMyBadgesLinkHandler } from './providers/mybadges-link-handler'; import { AddonBadgesBadgeLinkHandler } from './providers/badge-link-handler'; +import { AddonBadgesPushClickHandler } from './providers/push-click-handler'; import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; import { CoreUserDelegate } from '@core/user/providers/user-delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; // List of providers (without handlers). export const ADDON_BADGES_PROVIDERS: any[] = [ @@ -34,16 +36,19 @@ export const ADDON_BADGES_PROVIDERS: any[] = [ AddonBadgesProvider, AddonBadgesUserHandler, AddonBadgesMyBadgesLinkHandler, - AddonBadgesBadgeLinkHandler + AddonBadgesBadgeLinkHandler, + AddonBadgesPushClickHandler ] }) export class AddonBadgesModule { constructor(userDelegate: CoreUserDelegate, userHandler: AddonBadgesUserHandler, contentLinksDelegate: CoreContentLinksDelegate, myBadgesLinkHandler: AddonBadgesMyBadgesLinkHandler, - badgeLinkHandler: AddonBadgesBadgeLinkHandler) { + badgeLinkHandler: AddonBadgesBadgeLinkHandler, + pushNotificationsDelegate: CorePushNotificationsDelegate, pushClickHandler: AddonBadgesPushClickHandler) { userDelegate.registerHandler(userHandler); contentLinksDelegate.registerHandler(myBadgesLinkHandler); contentLinksDelegate.registerHandler(badgeLinkHandler); + pushNotificationsDelegate.registerClickHandler(pushClickHandler); } } diff --git a/src/addon/badges/providers/push-click-handler.ts b/src/addon/badges/providers/push-click-handler.ts new file mode 100644 index 000000000..555a99240 --- /dev/null +++ b/src/addon/badges/providers/push-click-handler.ts @@ -0,0 +1,64 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; +import { AddonBadgesProvider } from './badges'; + +/** + * Handler for badges push notifications clicks. + */ +@Injectable() +export class AddonBadgesPushClickHandler implements CorePushNotificationsClickHandler { + name = 'AddonBadgesPushClickHandler'; + priority = 200; + featureName = 'CoreUserDelegate_AddonBadges'; + + constructor(private utils: CoreUtilsProvider, private badgesProvider: AddonBadgesProvider, + private loginHelper: CoreLoginHelperProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + // @todo: Support 'badgecreatornotice' once we receive the hash or contexturl. + if (this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'moodle' && + notification.name == 'badgerecipientnotice') { + return this.badgesProvider.isPluginEnabled(notification.site); + } + + return false; + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + // @todo: Go to the badge page once we receive the hash or contexturl. + + return this.badgesProvider.invalidateUserBadges(0, Number(notification.usertoid), notification.site).catch(() => { + // Ignore errors. + }).then(() => { + return this.loginHelper.redirect('AddonBadgesUserBadgesPage', {}, notification.site); + }); + } +} From e8ab5edc2acaa9369a781df4169b3b72a004b690 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 19 Mar 2019 08:19:16 +0100 Subject: [PATCH 023/263] MOBILE-2921 enrol: Support enrolment expiry push clicks --- src/core/course/pages/section/section.ts | 6 +- src/core/course/providers/default-format.ts | 14 ++-- src/core/course/providers/format-delegate.ts | 8 +- src/core/course/providers/helper.ts | 31 +++++--- src/core/courses/courses.module.ts | 9 ++- .../providers/enrol-push-click-handler.ts | 79 +++++++++++++++++++ .../providers/participants-link-handler.ts | 23 +++++- 7 files changed, 145 insertions(+), 25 deletions(-) create mode 100644 src/core/courses/providers/enrol-push-click-handler.ts diff --git a/src/core/course/pages/section/section.ts b/src/core/course/pages/section/section.ts index 7246d3fd9..032a98e49 100644 --- a/src/core/course/pages/section/section.ts +++ b/src/core/course/pages/section/section.ts @@ -303,10 +303,10 @@ export class CoreCourseSectionPage implements OnDestroy { // Load the course format options when course completion is enabled to show completion progress on sections. if (this.course.enablecompletion && this.coursesProvider.isGetCoursesByFieldAvailable()) { - promises.push(this.coursesProvider.getCoursesByField('id', this.course.id).catch(() => { + promises.push(this.coursesProvider.getCourseByField('id', this.course.id).catch(() => { // Ignore errors. - }).then((courses) => { - courses && courses[0] && Object.assign(this.course, courses[0]); + }).then((course) => { + course && Object.assign(this.course, course); if (this.course.courseformatoptions) { this.course.courseformatoptions = this.utils.objectToKeyValueMap(this.course.courseformatoptions, diff --git a/src/core/course/providers/default-format.ts b/src/core/course/providers/default-format.ts index 5fe027ce5..6cc8e1562 100644 --- a/src/core/course/providers/default-format.ts +++ b/src/core/course/providers/default-format.ts @@ -113,10 +113,10 @@ export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler { return sections[0]; } else { // Try to retrieve the marker. - promise = this.coursesProvider.getCoursesByField('id', course.id).catch(() => { + promise = this.coursesProvider.getCourseByField('id', course.id).catch(() => { // Ignore errors. - }).then((courses) => { - return courses && courses[0] && courses[0].marker; + }).then((course) => { + return course && course.marker; }); } @@ -156,10 +156,14 @@ export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler { * * @param {NavController} navCtrl The NavController instance to use. * @param {any} course The course to open. It should contain a "format" attribute. + * @param {any} [params] Params to pass to the course page. * @return {Promise} Promise resolved when done. */ - openCourse(navCtrl: NavController, course: any): Promise { - return navCtrl.push('CoreCourseSectionPage', { course: course }); + openCourse(navCtrl: NavController, course: any, params?: any): Promise { + params = params || {}; + Object.assign(params, { course: course }); + + return navCtrl.push('CoreCourseSectionPage', params); } /** diff --git a/src/core/course/providers/format-delegate.ts b/src/core/course/providers/format-delegate.ts index 40a2668d4..b65560ced 100644 --- a/src/core/course/providers/format-delegate.ts +++ b/src/core/course/providers/format-delegate.ts @@ -92,9 +92,10 @@ export interface CoreCourseFormatHandler extends CoreDelegateHandler { * * @param {NavController} navCtrl The NavController instance to use. * @param {any} course The course to open. It should contain a "format" attribute. + * @param {any} [params] Params to pass to the course page. * @return {Promise} Promise resolved when done. */ - openCourse?(navCtrl: NavController, course: any): Promise; + openCourse?(navCtrl: NavController, course: any, params?: any): Promise; /** * Return the Component to use to display the course format instead of using the default one. @@ -337,10 +338,11 @@ export class CoreCourseFormatDelegate extends CoreDelegate { * * @param {NavController} navCtrl The NavController instance to use. * @param {any} course The course to open. It should contain a "format" attribute. + * @param {any} [params] Params to pass to the course page. * @return {Promise} Promise resolved when done. */ - openCourse(navCtrl: NavController, course: any): Promise { - return this.executeFunctionOnEnabled(course.format, 'openCourse', [navCtrl, course]); + openCourse(navCtrl: NavController, course: any, params?: any): Promise { + return this.executeFunctionOnEnabled(course.format, 'openCourse', [navCtrl, course, params]); } /** diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index a79546849..be5872490 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -1401,22 +1401,35 @@ export class CoreCourseHelperProvider { * * @param {NavController} navCtrl The nav controller to use. * @param {any} course Course to open + * @param {any} [params] Params to pass to the course page. + * @return {Promise} Promise resolved when done. */ - openCourse(navCtrl: NavController, course: any): void { + openCourse(navCtrl: NavController, course: any, params?: any): Promise { if (this.sitePluginsProvider.sitePluginPromiseExists('format_' + course.format)) { // This course uses a custom format plugin, wait for the format plugin to finish loading. const loading = this.domUtils.showModalLoading(); - this.sitePluginsProvider.sitePluginLoaded('format_' + course.format).then(() => { + + return this.sitePluginsProvider.sitePluginLoaded('format_' + course.format).then(() => { // The format loaded successfully, but the handlers wont be registered until all site plugins have loaded. if (this.sitePluginsProvider.sitePluginsFinishedLoading) { loading.dismiss(); - this.courseFormatDelegate.openCourse(navCtrl, course); + + return this.courseFormatDelegate.openCourse(navCtrl, course, params); } else { - const observer = this.eventsProvider.on(CoreEventsProvider.SITE_PLUGINS_LOADED, () => { - loading.dismiss(); - this.courseFormatDelegate.openCourse(navCtrl, course); - observer && observer.off(); - }); + // Wait for plugins to be loaded. + const deferred = this.utils.promiseDefer(), + observer = this.eventsProvider.on(CoreEventsProvider.SITE_PLUGINS_LOADED, () => { + loading.dismiss(); + observer && observer.off(); + + this.courseFormatDelegate.openCourse(navCtrl, course, params).then((response) => { + deferred.resolve(response); + }).catch((error) => { + deferred.reject(error); + }); + }); + + return deferred.promise; } }).catch(() => { // The site plugin failed to load. The user needs to restart the app to try loading it again. @@ -1425,7 +1438,7 @@ export class CoreCourseHelperProvider { }); } else { // No custom format plugin. We don't need to wait for anything. - this.courseFormatDelegate.openCourse(navCtrl, course); + return this.courseFormatDelegate.openCourse(navCtrl, course, params); } } } diff --git a/src/core/courses/courses.module.ts b/src/core/courses/courses.module.ts index 81f632e9f..1a7294425 100644 --- a/src/core/courses/courses.module.ts +++ b/src/core/courses/courses.module.ts @@ -20,8 +20,10 @@ import { CoreCoursesDashboardProvider } from './providers/dashboard'; import { CoreCoursesCourseLinkHandler } from './providers/course-link-handler'; import { CoreCoursesIndexLinkHandler } from './providers/courses-index-link-handler'; import { CoreCoursesDashboardLinkHandler } from './providers/dashboard-link-handler'; +import { CoreCoursesEnrolPushClickHandler } from './providers/enrol-push-click-handler'; import { CoreMainMenuDelegate } from '@core/mainmenu/providers/delegate'; import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; // List of providers (without handlers). export const CORE_COURSES_PROVIDERS: any[] = [ @@ -41,18 +43,21 @@ export const CORE_COURSES_PROVIDERS: any[] = [ CoreDashboardMainMenuHandler, CoreCoursesCourseLinkHandler, CoreCoursesIndexLinkHandler, - CoreCoursesDashboardLinkHandler + CoreCoursesDashboardLinkHandler, + CoreCoursesEnrolPushClickHandler ], exports: [] }) export class CoreCoursesModule { constructor(mainMenuDelegate: CoreMainMenuDelegate, contentLinksDelegate: CoreContentLinksDelegate, mainMenuHandler: CoreDashboardMainMenuHandler, courseLinkHandler: CoreCoursesCourseLinkHandler, - indexLinkHandler: CoreCoursesIndexLinkHandler, dashboardLinkHandler: CoreCoursesDashboardLinkHandler) { + indexLinkHandler: CoreCoursesIndexLinkHandler, dashboardLinkHandler: CoreCoursesDashboardLinkHandler, + pushNotificationsDelegate: CorePushNotificationsDelegate, pushClickHandler: CoreCoursesEnrolPushClickHandler) { mainMenuDelegate.registerHandler(mainMenuHandler); contentLinksDelegate.registerHandler(courseLinkHandler); contentLinksDelegate.registerHandler(indexLinkHandler); contentLinksDelegate.registerHandler(dashboardLinkHandler); + pushNotificationsDelegate.registerClickHandler(pushClickHandler); } } diff --git a/src/core/courses/providers/enrol-push-click-handler.ts b/src/core/courses/providers/enrol-push-click-handler.ts new file mode 100644 index 000000000..795b0c603 --- /dev/null +++ b/src/core/courses/providers/enrol-push-click-handler.ts @@ -0,0 +1,79 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; + +/** + * Handler for enrol push notifications clicks. + */ +@Injectable() +export class CoreCoursesEnrolPushClickHandler implements CorePushNotificationsClickHandler { + name = 'CoreCoursesEnrolPushClickHandler'; + priority = 200; + + constructor(private utils: CoreUtilsProvider, private domUtils: CoreDomUtilsProvider, + private courseHelper: CoreCourseHelperProvider, private loginHelper: CoreLoginHelperProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + return this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent.indexOf('enrol_') === 0 && + notification.name == 'expiry_notification'; + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + const courseId = Number(notification.courseid), + modal = this.domUtils.showModalLoading(); + + return this.courseHelper.getCourse(courseId, notification.site).then((result) => { + const params: any = { + course: result.course + }; + let page; + + if (notification.contexturl && notification.contexturl.indexOf('user/index.php') != -1) { + // Open the participants tab. + page = 'CoreCourseSectionPage'; + params.selectedTab = 'CoreUserParticipants'; + } else if (result.enrolled) { + // User is still enrolled, open the course. + page = 'CoreCourseSectionPage'; + } else { + // User not enrolled anymore, open the preview page. + page = 'CoreCoursesCoursePreviewPage'; + } + + return this.loginHelper.redirect(page, params, notification.site); + }).catch((error) => { + this.domUtils.showErrorModalDefault(error, 'Error getting course.'); + }).finally(() => { + modal.dismiss(); + }); + } +} diff --git a/src/core/user/providers/participants-link-handler.ts b/src/core/user/providers/participants-link-handler.ts index 910b57eb6..1a219a754 100644 --- a/src/core/user/providers/participants-link-handler.ts +++ b/src/core/user/providers/participants-link-handler.ts @@ -13,9 +13,11 @@ // limitations under the License. import { Injectable } from '@angular/core'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; import { CoreLoginHelperProvider } from '@core/login/providers/helper'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; import { CoreUserProvider } from './user'; /** @@ -27,7 +29,8 @@ export class CoreUserParticipantsLinkHandler extends CoreContentLinksHandlerBase featureName = 'CoreCourseOptionsDelegate_CoreUserParticipants'; pattern = /\/user\/index\.php/; - constructor(private userProvider: CoreUserProvider, private loginHelper: CoreLoginHelperProvider) { + constructor(private userProvider: CoreUserProvider, private loginHelper: CoreLoginHelperProvider, + private courseHelper: CoreCourseHelperProvider, private domUtils: CoreDomUtilsProvider) { super(); } @@ -46,8 +49,22 @@ export class CoreUserParticipantsLinkHandler extends CoreContentLinksHandlerBase return [{ action: (siteId, navCtrl?): void => { - // Always use redirect to make it the new history root (to avoid "loops" in history). - this.loginHelper.redirect('CoreUserParticipantsPage', {courseId: courseId}, siteId); + const modal = this.domUtils.showModalLoading(); + + this.courseHelper.getCourse(courseId, siteId).then((result) => { + const params: any = { + course: result.course, + selectedTab: 'CoreUserParticipants' + }; + + // Always use redirect to make it the new history root (to avoid "loops" in history). + return this.loginHelper.redirect('CoreCourseSectionPage', params, siteId); + }).catch(() => { + // Cannot get course for some reason, just open the participants page. + this.loginHelper.redirect('CoreUserParticipantsPage', {courseId: courseId}, siteId); + }).finally(() => { + modal.dismiss(); + }); } }]; } From ac96739e398146da3c0a025d239f85fada7d22e8 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 19 Mar 2019 11:58:28 +0100 Subject: [PATCH 024/263] MOBILE-2921 quiz: Support quiz push clicks --- src/addon/mod/quiz/providers/helper.ts | 79 ++++++++++++++++++- .../mod/quiz/providers/push-click-handler.ts | 74 +++++++++++++++++ .../mod/quiz/providers/review-link-handler.ts | 54 +------------ src/addon/mod/quiz/quiz.module.ts | 9 ++- 4 files changed, 162 insertions(+), 54 deletions(-) create mode 100644 src/addon/mod/quiz/providers/push-click-handler.ts diff --git a/src/addon/mod/quiz/providers/helper.ts b/src/addon/mod/quiz/providers/helper.ts index af9d466a8..3eb4f5225 100644 --- a/src/addon/mod/quiz/providers/helper.ts +++ b/src/addon/mod/quiz/providers/helper.ts @@ -13,13 +13,16 @@ // limitations under the License. import { Injectable } from '@angular/core'; -import { ModalController } from 'ionic-angular'; +import { ModalController, NavController } from 'ionic-angular'; import { TranslateService } from '@ngx-translate/core'; +import { CoreSitesProvider } from '@providers/sites'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { AddonModQuizProvider } from './quiz'; import { AddonModQuizOfflineProvider } from './quiz-offline'; import { AddonModQuizAccessRuleDelegate } from './access-rules-delegate'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; /** * Helper service that provides some features for quiz. @@ -29,7 +32,9 @@ export class AddonModQuizHelperProvider { constructor(private domUtils: CoreDomUtilsProvider, private translate: TranslateService, private utils: CoreUtilsProvider, private accessRuleDelegate: AddonModQuizAccessRuleDelegate, private quizProvider: AddonModQuizProvider, - private modalCtrl: ModalController, private quizOfflineProvider: AddonModQuizOfflineProvider) { } + private modalCtrl: ModalController, private quizOfflineProvider: AddonModQuizOfflineProvider, + private courseHelper: CoreCourseHelperProvider, private sitesProvider: CoreSitesProvider, + private linkHelper: CoreContentLinksHelperProvider) { } /** * Validate a preflight data or show a modal to input the preflight data if required. @@ -156,6 +161,76 @@ export class AddonModQuizHelperProvider { return this.domUtils.getContentsOfElement(element, '.grade'); } + /** + * Get a quiz ID by attempt ID. + * + * @param {number} attemptId Attempt ID. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved with the quiz ID. + */ + getQuizIdByAttemptId(attemptId: number, siteId?: string): Promise { + // Use getAttemptReview to retrieve the quiz ID. + return this.quizProvider.getAttemptReview(attemptId, undefined, false, siteId).then((reviewData) => { + if (reviewData.attempt && reviewData.attempt.quiz) { + return reviewData.attempt.quiz; + } + + return Promise.reject(null); + }); + } + + /** + * Handle a review link. + * + * @param {NavController} navCtrl Nav controller, can be undefined/null. + * @param {number} attemptId Attempt ID. + * @param {number} [page] Page to load, -1 to all questions in same page. + * @param {number} [courseId] Course ID. + * @param {number} [quizId] Quiz ID. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + handleReviewLink(navCtrl: NavController, attemptId: number, page?: number, courseId?: number, quizId?: number, + siteId?: string): Promise { + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + + const modal = this.domUtils.showModalLoading(); + let promise; + + if (quizId) { + promise = Promise.resolve(quizId); + } else { + // Retrieve the quiz ID using the attempt ID. + promise = this.getQuizIdByAttemptId(attemptId); + } + + return promise.then((id) => { + quizId = id; + + // Get the courseId if we don't have it. + if (courseId) { + return courseId; + } else { + return this.courseHelper.getModuleCourseIdByInstance(quizId, 'quiz', siteId); + } + }).then((courseId) => { + // Go to the review page. + const pageParams = { + quizId: quizId, + attemptId: attemptId, + courseId: courseId, + page: isNaN(page) ? -1 : page + }; + + return this.linkHelper.goInSite(navCtrl, 'AddonModQuizReviewPage', pageParams, siteId); + }).catch((error) => { + + this.domUtils.showErrorModalDefault(error, 'An error occurred while loading the required data.'); + }).finally(() => { + modal.dismiss(); + }); + } + /** * Add some calculated data to the attempt. * diff --git a/src/addon/mod/quiz/providers/push-click-handler.ts b/src/addon/mod/quiz/providers/push-click-handler.ts new file mode 100644 index 000000000..2373bd622 --- /dev/null +++ b/src/addon/mod/quiz/providers/push-click-handler.ts @@ -0,0 +1,74 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreUrlUtilsProvider } from '@providers/utils/url'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; +import { AddonModQuizProvider } from './quiz'; +import { AddonModQuizHelperProvider } from './helper'; + +/** + * Handler for quiz push notifications clicks. + */ +@Injectable() +export class AddonModQuizPushClickHandler implements CorePushNotificationsClickHandler { + name = 'AddonModQuizPushClickHandler'; + priority = 200; + featureName = 'CoreCourseModuleDelegate_AddonModQuiz'; + + protected SUPPORTED_NAMES = ['submission', 'confirmation', 'attempt_overdue']; + + constructor(private utils: CoreUtilsProvider, private quizProvider: AddonModQuizProvider, + private urlUtils: CoreUrlUtilsProvider, private courseHelper: CoreCourseHelperProvider, + private quizHelper: AddonModQuizHelperProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + return this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'mod_quiz' && + this.SUPPORTED_NAMES.indexOf(notification.name) != -1; + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + const contextUrlParams = this.urlUtils.extractUrlParams(notification.contexturl), + courseId = Number(notification.courseid); + + if (notification.name == 'submission') { + // A student made a submission, go to view the attempt. + return this.quizHelper.handleReviewLink(undefined, Number(contextUrlParams.attempt), Number(contextUrlParams.page), + courseId, undefined, notification.site); + } else { + // Open the activity. + const moduleId = Number(contextUrlParams.id); + + return this.quizProvider.invalidateContent(moduleId, courseId, notification.site).catch(() => { + // Ignore errors. + }).then(() => { + return this.courseHelper.navigateToModule(moduleId, notification.site, courseId); + }); + } + } +} diff --git a/src/addon/mod/quiz/providers/review-link-handler.ts b/src/addon/mod/quiz/providers/review-link-handler.ts index 2aa6dece7..b5d36dfc3 100644 --- a/src/addon/mod/quiz/providers/review-link-handler.ts +++ b/src/addon/mod/quiz/providers/review-link-handler.ts @@ -13,12 +13,10 @@ // limitations under the License. import { Injectable } from '@angular/core'; -import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; -import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; -import { CoreCourseHelperProvider } from '@core/course/providers/helper'; import { AddonModQuizProvider } from './quiz'; +import { AddonModQuizHelperProvider } from './helper'; /** * Handler to treat links to quiz review. @@ -29,8 +27,7 @@ export class AddonModQuizReviewLinkHandler extends CoreContentLinksHandlerBase { featureName = 'CoreCourseModuleDelegate_AddonModQuiz'; pattern = /\/mod\/quiz\/review\.php.*([\&\?]attempt=\d+)/; - constructor(protected domUtils: CoreDomUtilsProvider, protected quizProvider: AddonModQuizProvider, - protected courseHelper: CoreCourseHelperProvider, protected linkHelper: CoreContentLinksHelperProvider) { + constructor(protected quizProvider: AddonModQuizProvider, protected quizHelper: AddonModQuizHelperProvider) { super(); } @@ -50,56 +47,13 @@ export class AddonModQuizReviewLinkHandler extends CoreContentLinksHandlerBase { return [{ action: (siteId, navCtrl?): void => { - // Retrieve the quiz ID using the attempt ID. - const modal = this.domUtils.showModalLoading(), - attemptId = parseInt(params.attempt, 10), + const attemptId = parseInt(params.attempt, 10), page = parseInt(params.page, 10); - let quizId; - this.getQuizIdByAttemptId(attemptId).then((id) => { - quizId = id; - - // Get the courseId if we don't have it. - if (courseId) { - return courseId; - } else { - return this.courseHelper.getModuleCourseIdByInstance(quizId, 'quiz', siteId); - } - }).then((courseId) => { - // Go to the review page. - const pageParams = { - quizId: quizId, - attemptId: attemptId, - courseId: courseId, - page: params.showall ? -1 : (isNaN(page) ? -1 : page) - }; - - this.linkHelper.goInSite(navCtrl, 'AddonModQuizReviewPage', pageParams, siteId); - }).catch((error) => { - - this.domUtils.showErrorModalDefault(error, 'An error occurred while loading the required data.'); - }).finally(() => { - modal.dismiss(); - }); + this.quizHelper.handleReviewLink(navCtrl, attemptId, page, courseId, undefined, siteId); } }]; } - /** - * Get a quiz ID by attempt ID. - * - * @param {number} attemptId Attempt ID. - * @return {Promise} Promise resolved with the quiz ID. - */ - protected getQuizIdByAttemptId(attemptId: number): Promise { - // Use getAttemptReview to retrieve the quiz ID. - return this.quizProvider.getAttemptReview(attemptId).then((reviewData) => { - if (reviewData.attempt && reviewData.attempt.quiz) { - return reviewData.attempt.quiz; - } - - return Promise.reject(null); - }); - } /** * Check if the handler is enabled for a certain site (site + user) and a URL. diff --git a/src/addon/mod/quiz/quiz.module.ts b/src/addon/mod/quiz/quiz.module.ts index 5f10410cb..93cc7ae2f 100644 --- a/src/addon/mod/quiz/quiz.module.ts +++ b/src/addon/mod/quiz/quiz.module.ts @@ -17,6 +17,7 @@ import { CoreCronDelegate } from '@providers/cron'; import { CoreCourseModuleDelegate } from '@core/course/providers/module-delegate'; import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate'; import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; import { AddonModQuizAccessRuleDelegate } from './providers/access-rules-delegate'; import { AddonModQuizProvider } from './providers/quiz'; import { AddonModQuizOfflineProvider } from './providers/quiz-offline'; @@ -29,6 +30,7 @@ import { AddonModQuizIndexLinkHandler } from './providers/index-link-handler'; import { AddonModQuizGradeLinkHandler } from './providers/grade-link-handler'; import { AddonModQuizReviewLinkHandler } from './providers/review-link-handler'; import { AddonModQuizListLinkHandler } from './providers/list-link-handler'; +import { AddonModQuizPushClickHandler } from './providers/push-click-handler'; import { AddonModQuizComponentsModule } from './components/components.module'; import { CoreUpdateManagerProvider } from '@providers/update-manager'; @@ -79,7 +81,8 @@ export const ADDON_MOD_QUIZ_PROVIDERS: any[] = [ AddonModQuizIndexLinkHandler, AddonModQuizGradeLinkHandler, AddonModQuizReviewLinkHandler, - AddonModQuizListLinkHandler + AddonModQuizListLinkHandler, + AddonModQuizPushClickHandler ] }) export class AddonModQuizModule { @@ -88,7 +91,8 @@ export class AddonModQuizModule { cronDelegate: CoreCronDelegate, syncHandler: AddonModQuizSyncCronHandler, linksDelegate: CoreContentLinksDelegate, indexHandler: AddonModQuizIndexLinkHandler, gradeHandler: AddonModQuizGradeLinkHandler, reviewHandler: AddonModQuizReviewLinkHandler, updateManager: CoreUpdateManagerProvider, - listLinkHandler: AddonModQuizListLinkHandler) { + listLinkHandler: AddonModQuizListLinkHandler, + pushNotificationsDelegate: CorePushNotificationsDelegate, pushClickHandler: AddonModQuizPushClickHandler) { moduleDelegate.registerHandler(moduleHandler); prefetchDelegate.registerHandler(prefetchHandler); @@ -97,6 +101,7 @@ export class AddonModQuizModule { linksDelegate.registerHandler(gradeHandler); linksDelegate.registerHandler(reviewHandler); linksDelegate.registerHandler(listLinkHandler); + pushNotificationsDelegate.registerClickHandler(pushClickHandler); // Allow migrating the tables from the old app to the new schema. updateManager.registerSiteTableMigration({ From a83ebdfec8f30b8deb9b79b7670d3ee521ce2505 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 19 Mar 2019 13:30:24 +0100 Subject: [PATCH 025/263] MOBILE-2921 course: Support course request push clicks --- src/core/courses/courses.module.ts | 10 +- .../providers/request-push-click-handler.ts | 97 +++++++++++++++++++ 2 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 src/core/courses/providers/request-push-click-handler.ts diff --git a/src/core/courses/courses.module.ts b/src/core/courses/courses.module.ts index 1a7294425..a166ad5db 100644 --- a/src/core/courses/courses.module.ts +++ b/src/core/courses/courses.module.ts @@ -21,6 +21,7 @@ import { CoreCoursesCourseLinkHandler } from './providers/course-link-handler'; import { CoreCoursesIndexLinkHandler } from './providers/courses-index-link-handler'; import { CoreCoursesDashboardLinkHandler } from './providers/dashboard-link-handler'; import { CoreCoursesEnrolPushClickHandler } from './providers/enrol-push-click-handler'; +import { CoreCoursesRequestPushClickHandler } from './providers/request-push-click-handler'; import { CoreMainMenuDelegate } from '@core/mainmenu/providers/delegate'; import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; @@ -44,7 +45,8 @@ export const CORE_COURSES_PROVIDERS: any[] = [ CoreCoursesCourseLinkHandler, CoreCoursesIndexLinkHandler, CoreCoursesDashboardLinkHandler, - CoreCoursesEnrolPushClickHandler + CoreCoursesEnrolPushClickHandler, + CoreCoursesRequestPushClickHandler ], exports: [] }) @@ -52,12 +54,14 @@ export class CoreCoursesModule { constructor(mainMenuDelegate: CoreMainMenuDelegate, contentLinksDelegate: CoreContentLinksDelegate, mainMenuHandler: CoreDashboardMainMenuHandler, courseLinkHandler: CoreCoursesCourseLinkHandler, indexLinkHandler: CoreCoursesIndexLinkHandler, dashboardLinkHandler: CoreCoursesDashboardLinkHandler, - pushNotificationsDelegate: CorePushNotificationsDelegate, pushClickHandler: CoreCoursesEnrolPushClickHandler) { + pushNotificationsDelegate: CorePushNotificationsDelegate, enrolPushClickHandler: CoreCoursesEnrolPushClickHandler, + requestPushClickHandler: CoreCoursesRequestPushClickHandler) { mainMenuDelegate.registerHandler(mainMenuHandler); contentLinksDelegate.registerHandler(courseLinkHandler); contentLinksDelegate.registerHandler(indexLinkHandler); contentLinksDelegate.registerHandler(dashboardLinkHandler); - pushNotificationsDelegate.registerClickHandler(pushClickHandler); + pushNotificationsDelegate.registerClickHandler(enrolPushClickHandler); + pushNotificationsDelegate.registerClickHandler(requestPushClickHandler); } } diff --git a/src/core/courses/providers/request-push-click-handler.ts b/src/core/courses/providers/request-push-click-handler.ts new file mode 100644 index 000000000..af8688605 --- /dev/null +++ b/src/core/courses/providers/request-push-click-handler.ts @@ -0,0 +1,97 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreSitesProvider } from '@providers/sites'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; +import { CoreTextUtilsProvider } from '@providers/utils/text'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreCoursesProvider } from '@core/courses/providers/courses'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; + +/** + * Handler for course request push notifications clicks. + */ +@Injectable() +export class CoreCoursesRequestPushClickHandler implements CorePushNotificationsClickHandler { + name = 'CoreCoursesRequestPushClickHandler'; + priority = 200; + + protected SUPPORTED_NAMES = ['courserequested', 'courserequestapproved', 'courserequestrejected']; + + constructor(private utils: CoreUtilsProvider, private domUtils: CoreDomUtilsProvider, private sitesProvider: CoreSitesProvider, + private courseHelper: CoreCourseHelperProvider, private loginHelper: CoreLoginHelperProvider, + private textUtils: CoreTextUtilsProvider, private coursesProvider: CoreCoursesProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + // Don't support 'courserequestrejected', that way the app will open the notifications page. + return this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'moodle' && + (notification.name == 'courserequested' || notification.name == 'courserequestapproved'); + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + const courseId = Number(notification.courseid); + + if (notification.name == 'courserequested') { + // Feature not supported in the app, open in browser. + return this.sitesProvider.getSite(notification.site).then((site) => { + const url = this.textUtils.concatenatePaths(site.getURL(), 'course/pending.php'); + + return site.openInBrowserWithAutoLogin(url); + }); + } else { + // Open the course. + const modal = this.domUtils.showModalLoading(); + + return this.coursesProvider.invalidateUserCourses(notification.site).catch(() => { + // Ignore errors. + }).then(() => { + return this.courseHelper.getCourse(courseId, notification.site); + }).then((result) => { + const params: any = { + course: result.course + }; + let page; + + if (result.enrolled) { + // User is still enrolled, open the course. + page = 'CoreCourseSectionPage'; + } else { + // User not enrolled (shouldn't happen), open the preview page. + page = 'CoreCoursesCoursePreviewPage'; + } + + return this.loginHelper.redirect(page, params, notification.site); + }).catch((error) => { + this.domUtils.showErrorModalDefault(error, 'Error getting course.'); + }).finally(() => { + modal.dismiss(); + }); + } + } +} From bb7e1217a9e67b1067e32983b2528512ade7fc3f Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 20 Mar 2019 11:32:19 +0100 Subject: [PATCH 026/263] MOBILE-2921 competency: Support push clicks and link clicks --- src/addon/competency/competency.module.ts | 25 ++++- .../providers/competency-link-handler.ts | 74 +++++++++++++ src/addon/competency/providers/competency.ts | 14 +++ .../competency/providers/plan-link-handler.ts | 68 ++++++++++++ .../providers/plans-link-handler.ts | 69 ++++++++++++ .../providers/push-click-handler.ts | 100 ++++++++++++++++++ .../providers/user-competency-link-handler.ts | 68 ++++++++++++ 7 files changed, 416 insertions(+), 2 deletions(-) create mode 100644 src/addon/competency/providers/competency-link-handler.ts create mode 100644 src/addon/competency/providers/plan-link-handler.ts create mode 100644 src/addon/competency/providers/plans-link-handler.ts create mode 100644 src/addon/competency/providers/push-click-handler.ts create mode 100644 src/addon/competency/providers/user-competency-link-handler.ts diff --git a/src/addon/competency/competency.module.ts b/src/addon/competency/competency.module.ts index c321e8a20..b7aecb757 100644 --- a/src/addon/competency/competency.module.ts +++ b/src/addon/competency/competency.module.ts @@ -18,10 +18,17 @@ import { AddonCompetencyHelperProvider } from './providers/helper'; import { AddonCompetencyCourseOptionHandler } from './providers/course-option-handler'; import { AddonCompetencyMainMenuHandler } from './providers/mainmenu-handler'; import { AddonCompetencyUserHandler } from './providers/user-handler'; +import { AddonCompetencyCompetencyLinkHandler } from './providers/competency-link-handler'; +import { AddonCompetencyPlanLinkHandler } from './providers/plan-link-handler'; +import { AddonCompetencyPlansLinkHandler } from './providers/plans-link-handler'; +import { AddonCompetencyUserCompetencyLinkHandler } from './providers/user-competency-link-handler'; +import { AddonCompetencyPushClickHandler } from './providers/push-click-handler'; import { AddonCompetencyComponentsModule } from './components/components.module'; import { CoreCourseOptionsDelegate } from '@core/course/providers/options-delegate'; import { CoreMainMenuDelegate } from '@core/mainmenu/providers/delegate'; import { CoreUserDelegate } from '@core/user/providers/user-delegate'; +import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; // List of providers (without handlers). export const ADDON_COMPETENCY_PROVIDERS: any[] = [ @@ -40,16 +47,30 @@ export const ADDON_COMPETENCY_PROVIDERS: any[] = [ AddonCompetencyHelperProvider, AddonCompetencyCourseOptionHandler, AddonCompetencyMainMenuHandler, - AddonCompetencyUserHandler + AddonCompetencyUserHandler, + AddonCompetencyCompetencyLinkHandler, + AddonCompetencyPlanLinkHandler, + AddonCompetencyPlansLinkHandler, + AddonCompetencyUserCompetencyLinkHandler, + AddonCompetencyPushClickHandler ] }) export class AddonCompetencyModule { constructor(mainMenuDelegate: CoreMainMenuDelegate, mainMenuHandler: AddonCompetencyMainMenuHandler, courseOptionsDelegate: CoreCourseOptionsDelegate, courseOptionHandler: AddonCompetencyCourseOptionHandler, - userDelegate: CoreUserDelegate, userHandler: AddonCompetencyUserHandler) { + userDelegate: CoreUserDelegate, userHandler: AddonCompetencyUserHandler, + contentLinksDelegate: CoreContentLinksDelegate, competencyLinkHandler: AddonCompetencyCompetencyLinkHandler, + planLinkHandler: AddonCompetencyPlanLinkHandler, plansLinkHandler: AddonCompetencyPlansLinkHandler, + userComptencyLinkHandler: AddonCompetencyUserCompetencyLinkHandler, + pushNotificationsDelegate: CorePushNotificationsDelegate, pushClickHandler: AddonCompetencyPushClickHandler) { mainMenuDelegate.registerHandler(mainMenuHandler); courseOptionsDelegate.registerHandler(courseOptionHandler); userDelegate.registerHandler(userHandler); + contentLinksDelegate.registerHandler(competencyLinkHandler); + contentLinksDelegate.registerHandler(planLinkHandler); + contentLinksDelegate.registerHandler(plansLinkHandler); + contentLinksDelegate.registerHandler(userComptencyLinkHandler); + pushNotificationsDelegate.registerClickHandler(pushClickHandler); } } diff --git a/src/addon/competency/providers/competency-link-handler.ts b/src/addon/competency/providers/competency-link-handler.ts new file mode 100644 index 000000000..a85c8d1bb --- /dev/null +++ b/src/addon/competency/providers/competency-link-handler.ts @@ -0,0 +1,74 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; +import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { AddonCompetencyProvider } from './competency'; + +/** + * Handler to treat links to a competency in a plan or in a course. + */ +@Injectable() +export class AddonCompetencyCompetencyLinkHandler extends CoreContentLinksHandlerBase { + name = 'AddonCompetencyCompetencyLinkHandler'; + pattern = /\/admin\/tool\/lp\/(user_competency_in_course|user_competency_in_plan)\.php/; + + constructor(private linkHelper: CoreContentLinksHelperProvider, private competencyProvider: AddonCompetencyProvider) { + super(); + } + + /** + * Get the list of actions for a link (url). + * + * @param {string[]} siteIds List of sites the URL belongs to. + * @param {string} url The URL to treat. + * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} + * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @return {CoreContentLinksAction[]|Promise} List of (or promise resolved with list of) actions. + */ + getActions(siteIds: string[], url: string, params: any, courseId?: number): + CoreContentLinksAction[] | Promise { + courseId = courseId || params.courseid || params.cid; + + return [{ + action: (siteId, navCtrl?): void => { + this.linkHelper.goInSite(navCtrl, 'AddonCompetencyCompetencyPage', { + planId: params.planid, + competencyId: params.competencyid, + courseId: courseId, + userId: params.userid + }, siteId); + } + }]; + } + + /** + * Check if the handler is enabled for a certain site (site + user) and a URL. + * If not defined, defaults to true. + * + * @param {string} siteId The site ID. + * @param {string} url The URL to treat. + * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} + * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @return {boolean|Promise} Whether the handler is enabled for the URL and site. + */ + isEnabled(siteId: string, url: string, params: any, courseId?: number): boolean | Promise { + // Handler is disabled if all competency features are disabled. + return this.competencyProvider.allCompetenciesDisabled(siteId).then((disabled) => { + return !disabled; + }); + } +} diff --git a/src/addon/competency/providers/competency.ts b/src/addon/competency/providers/competency.ts index 28fae6304..455c2fd93 100644 --- a/src/addon/competency/providers/competency.ts +++ b/src/addon/competency/providers/competency.ts @@ -42,6 +42,20 @@ export class AddonCompetencyProvider { this.logger = loggerProvider.getInstance('AddonCompetencyProvider'); } + /** + * Check if all competencies features are disabled. + * + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved with boolean: whether all competency features are disabled. + */ + allCompetenciesDisabled(siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return site.isFeatureDisabled('CoreMainMenuDelegate_AddonCompetency') && + site.isFeatureDisabled('CoreCourseOptionsDelegate_AddonCompetency') && + site.isFeatureDisabled('CoreUserDelegate_AddonCompetency'); + }); + } + /** * Get cache key for user learning plans data WS calls. * diff --git a/src/addon/competency/providers/plan-link-handler.ts b/src/addon/competency/providers/plan-link-handler.ts new file mode 100644 index 000000000..1e20c5fe7 --- /dev/null +++ b/src/addon/competency/providers/plan-link-handler.ts @@ -0,0 +1,68 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; +import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { AddonCompetencyProvider } from './competency'; + +/** + * Handler to treat links to a plan. + */ +@Injectable() +export class AddonCompetencyPlanLinkHandler extends CoreContentLinksHandlerBase { + name = 'AddonCompetencyPlanLinkHandler'; + pattern = /\/admin\/tool\/lp\/plan\.php.*([\?\&]id=\d+)/; + + constructor(private linkHelper: CoreContentLinksHelperProvider, private competencyProvider: AddonCompetencyProvider) { + super(); + } + + /** + * Get the list of actions for a link (url). + * + * @param {string[]} siteIds List of sites the URL belongs to. + * @param {string} url The URL to treat. + * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} + * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @return {CoreContentLinksAction[]|Promise} List of (or promise resolved with list of) actions. + */ + getActions(siteIds: string[], url: string, params: any, courseId?: number): + CoreContentLinksAction[] | Promise { + + return [{ + action: (siteId, navCtrl?): void => { + this.linkHelper.goInSite(navCtrl, 'AddonCompetencyPlanPage', { planId: params.id }, siteId); + } + }]; + } + + /** + * Check if the handler is enabled for a certain site (site + user) and a URL. + * If not defined, defaults to true. + * + * @param {string} siteId The site ID. + * @param {string} url The URL to treat. + * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} + * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @return {boolean|Promise} Whether the handler is enabled for the URL and site. + */ + isEnabled(siteId: string, url: string, params: any, courseId?: number): boolean | Promise { + // Handler is disabled if all competency features are disabled. + return this.competencyProvider.allCompetenciesDisabled(siteId).then((disabled) => { + return !disabled; + }); + } +} diff --git a/src/addon/competency/providers/plans-link-handler.ts b/src/addon/competency/providers/plans-link-handler.ts new file mode 100644 index 000000000..a99280f3a --- /dev/null +++ b/src/addon/competency/providers/plans-link-handler.ts @@ -0,0 +1,69 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; +import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; +import { AddonCompetencyProvider } from './competency'; + +/** + * Handler to treat links to user plans. + */ +@Injectable() +export class AddonCompetencyPlansLinkHandler extends CoreContentLinksHandlerBase { + name = 'AddonCompetencyPlansLinkHandler'; + pattern = /\/admin\/tool\/lp\/plans\.php/; + + constructor(private loginHelper: CoreLoginHelperProvider, private competencyProvider: AddonCompetencyProvider) { + super(); + } + + /** + * Get the list of actions for a link (url). + * + * @param {string[]} siteIds List of sites the URL belongs to. + * @param {string} url The URL to treat. + * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} + * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @return {CoreContentLinksAction[]|Promise} List of (or promise resolved with list of) actions. + */ + getActions(siteIds: string[], url: string, params: any, courseId?: number): + CoreContentLinksAction[] | Promise { + + return [{ + action: (siteId, navCtrl?): void => { + // Always use redirect to make it the new history root (to avoid "loops" in history). + this.loginHelper.redirect('AddonCompetencyPlanListPage', { userId: params.userid }, siteId); + } + }]; + } + + /** + * Check if the handler is enabled for a certain site (site + user) and a URL. + * If not defined, defaults to true. + * + * @param {string} siteId The site ID. + * @param {string} url The URL to treat. + * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} + * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @return {boolean|Promise} Whether the handler is enabled for the URL and site. + */ + isEnabled(siteId: string, url: string, params: any, courseId?: number): boolean | Promise { + // Handler is disabled if all competency features are disabled. + return this.competencyProvider.allCompetenciesDisabled(siteId).then((disabled) => { + return !disabled; + }); + } +} diff --git a/src/addon/competency/providers/push-click-handler.ts b/src/addon/competency/providers/push-click-handler.ts new file mode 100644 index 000000000..eca567205 --- /dev/null +++ b/src/addon/competency/providers/push-click-handler.ts @@ -0,0 +1,100 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreUrlUtilsProvider } from '@providers/utils/url'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; +import { AddonCompetencyProvider } from './competency'; + +/** + * Handler for competencies push notifications clicks. + */ +@Injectable() +export class AddonCompetencyPushClickHandler implements CorePushNotificationsClickHandler { + name = 'AddonCompetencyPushClickHandler'; + priority = 200; + + constructor(private utils: CoreUtilsProvider, private urlUtils: CoreUrlUtilsProvider, + private competencyProvider: AddonCompetencyProvider, private loginHelper: CoreLoginHelperProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + if (this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'moodle' && + (notification.name == 'competencyplancomment' || notification.name == 'competencyusercompcomment')) { + // If all competency features are disabled, don't handle the click. + return this.competencyProvider.allCompetenciesDisabled(notification.site).then((disabled) => { + return !disabled; + }); + } + + return false; + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + const contextUrlParams = this.urlUtils.extractUrlParams(notification.contexturl); + + if (notification.name == 'competencyplancomment') { + // Open the learning plan. + const planId = Number(contextUrlParams.id); + + return this.competencyProvider.invalidateLearningPlan(planId, notification.site).catch(() => { + // Ignore errors. + }).then(() => { + return this.loginHelper.redirect('AddonCompetencyPlanPage', { planId: planId }, notification.site); + }); + } else { + + if (notification.contexturl && notification.contexturl.indexOf('user_competency_in_plan.php') != -1) { + // Open the competency. + const courseId = Number(notification.course), + competencyId = Number(contextUrlParams.competencyid), + planId = Number(contextUrlParams.planid), + userId = Number(contextUrlParams.userid); + + return this.competencyProvider.invalidateCompetencyInPlan(planId, competencyId, notification.site).catch(() => { + // Ignore errors. + }).then(() => { + return this.loginHelper.redirect('AddonCompetencyCompetencyPage', { + planId: planId, + competencyId: competencyId, + courseId: courseId, + userId: userId + }, notification.site); + }); + } else { + // Open the list of plans. + const userId = Number(contextUrlParams.userid); + + return this.competencyProvider.invalidateLearningPlans(userId, notification.site).catch(() => { + // Ignore errors. + }).then(() => { + return this.loginHelper.redirect('AddonCompetencyPlanListPage', { userId: userId }, notification.site); + }); + } + } + } +} diff --git a/src/addon/competency/providers/user-competency-link-handler.ts b/src/addon/competency/providers/user-competency-link-handler.ts new file mode 100644 index 000000000..06cee4f90 --- /dev/null +++ b/src/addon/competency/providers/user-competency-link-handler.ts @@ -0,0 +1,68 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; +import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { AddonCompetencyProvider } from './competency'; + +/** + * Handler to treat links to a usr competency. + */ +@Injectable() +export class AddonCompetencyUserCompetencyLinkHandler extends CoreContentLinksHandlerBase { + name = 'AddonCompetencyUserCompetencyLinkHandler'; + pattern = /\/admin\/tool\/lp\/user_competency\.php.*([\?\&]id=\d+)/; + + constructor(private linkHelper: CoreContentLinksHelperProvider, private competencyProvider: AddonCompetencyProvider) { + super(); + } + + /** + * Get the list of actions for a link (url). + * + * @param {string[]} siteIds List of sites the URL belongs to. + * @param {string} url The URL to treat. + * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} + * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @return {CoreContentLinksAction[]|Promise} List of (or promise resolved with list of) actions. + */ + getActions(siteIds: string[], url: string, params: any, courseId?: number): + CoreContentLinksAction[] | Promise { + + return [{ + action: (siteId, navCtrl?): void => { + this.linkHelper.goInSite(navCtrl, 'AddonCompetencyCompetencySummaryPage', { competencyId: params.id }, siteId); + } + }]; + } + + /** + * Check if the handler is enabled for a certain site (site + user) and a URL. + * If not defined, defaults to true. + * + * @param {string} siteId The site ID. + * @param {string} url The URL to treat. + * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} + * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @return {boolean|Promise} Whether the handler is enabled for the URL and site. + */ + isEnabled(siteId: string, url: string, params: any, courseId?: number): boolean | Promise { + // Handler is disabled if all competency features are disabled. + return this.competencyProvider.allCompetenciesDisabled(siteId).then((disabled) => { + return !disabled; + }); + } +} From 9e831bdf7afa790492448b0ed2730242ffd8426f Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 1 Apr 2019 14:42:26 +0200 Subject: [PATCH 027/263] MOBILE-2921 lesson: Support lesson grade push clicks --- src/addon/mod/lesson/lesson.module.ts | 9 +- .../lesson/providers/push-click-handler.ts | 117 ++++++++++++++++++ .../grades/providers/user-link-handler.ts | 48 +++++-- src/core/login/providers/helper.ts | 28 +++-- .../providers/participants-link-handler.ts | 6 +- 5 files changed, 184 insertions(+), 24 deletions(-) create mode 100644 src/addon/mod/lesson/providers/push-click-handler.ts diff --git a/src/addon/mod/lesson/lesson.module.ts b/src/addon/mod/lesson/lesson.module.ts index caad60d06..0c1e194ec 100644 --- a/src/addon/mod/lesson/lesson.module.ts +++ b/src/addon/mod/lesson/lesson.module.ts @@ -17,6 +17,7 @@ import { CoreCronDelegate } from '@providers/cron'; import { CoreCourseModuleDelegate } from '@core/course/providers/module-delegate'; import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate'; import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; +import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; import { AddonModLessonComponentsModule } from './components/components.module'; import { AddonModLessonProvider } from './providers/lesson'; import { AddonModLessonOfflineProvider } from './providers/lesson-offline'; @@ -29,6 +30,7 @@ import { AddonModLessonIndexLinkHandler } from './providers/index-link-handler'; import { AddonModLessonGradeLinkHandler } from './providers/grade-link-handler'; import { AddonModLessonReportLinkHandler } from './providers/report-link-handler'; import { AddonModLessonListLinkHandler } from './providers/list-link-handler'; +import { AddonModLessonPushClickHandler } from './providers/push-click-handler'; import { CoreUpdateManagerProvider } from '@providers/update-manager'; // List of providers (without handlers). @@ -56,7 +58,8 @@ export const ADDON_MOD_LESSON_PROVIDERS: any[] = [ AddonModLessonIndexLinkHandler, AddonModLessonGradeLinkHandler, AddonModLessonReportLinkHandler, - AddonModLessonListLinkHandler + AddonModLessonListLinkHandler, + AddonModLessonPushClickHandler ] }) export class AddonModLessonModule { @@ -65,7 +68,8 @@ export class AddonModLessonModule { cronDelegate: CoreCronDelegate, syncHandler: AddonModLessonSyncCronHandler, linksDelegate: CoreContentLinksDelegate, indexHandler: AddonModLessonIndexLinkHandler, gradeHandler: AddonModLessonGradeLinkHandler, reportHandler: AddonModLessonReportLinkHandler, updateManager: CoreUpdateManagerProvider, - listLinkHandler: AddonModLessonListLinkHandler) { + listLinkHandler: AddonModLessonListLinkHandler, pushNotificationsDelegate: CorePushNotificationsDelegate, + pushClickHandler: AddonModLessonPushClickHandler) { moduleDelegate.registerHandler(moduleHandler); prefetchDelegate.registerHandler(prefetchHandler); @@ -74,6 +78,7 @@ export class AddonModLessonModule { linksDelegate.registerHandler(gradeHandler); linksDelegate.registerHandler(reportHandler); linksDelegate.registerHandler(listLinkHandler); + pushNotificationsDelegate.registerClickHandler(pushClickHandler); // Allow migrating the tables from the old app to the new schema. updateManager.registerSiteTablesMigration([ diff --git a/src/addon/mod/lesson/providers/push-click-handler.ts b/src/addon/mod/lesson/providers/push-click-handler.ts new file mode 100644 index 000000000..841298c52 --- /dev/null +++ b/src/addon/mod/lesson/providers/push-click-handler.ts @@ -0,0 +1,117 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; +import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; +import { CoreGradesProvider } from '@core/grades/providers/grades'; +import { AddonModLessonProvider } from './lesson'; + +/** + * Handler for lesson push notifications clicks. + */ +@Injectable() +export class AddonModLessonPushClickHandler implements CorePushNotificationsClickHandler { + name = 'AddonModLessonPushClickHandler'; + priority = 200; + featureName = 'CoreCourseModuleDelegate_AddonModLesson'; + + constructor(private utils: CoreUtilsProvider, private lessonProvider: AddonModLessonProvider, + private loginHelper: CoreLoginHelperProvider, private domUtils: CoreDomUtilsProvider, + private courseHelper: CoreCourseHelperProvider, private gradesProvider: CoreGradesProvider) {} + + /** + * Check if a notification click is handled by this handler. + * + * @param {any} notification The notification to check. + * @return {boolean} Whether the notification click is handled by this handler + */ + handles(notification: any): boolean | Promise { + if (this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'mod_lesson' && + notification.name == 'graded_essay') { + + return this.lessonProvider.isPluginEnabled(notification.site); + } + + return false; + } + + /** + * Handle the notification click. + * + * @param {any} notification The notification to check. + * @return {Promise} Promise resolved when done. + */ + handleClick(notification: any): Promise { + const data = notification.customdata || {}, + courseId = Number(notification.courseid), + moduleId = Number(data.cmid), + modal = this.domUtils.showModalLoading(); + let promise; + + if (moduleId) { + // Try to open the module grade directly. Check if it's possible. + promise = this.gradesProvider.isGradeItemsAvalaible(notification.site).catch(() => { + return false; + }); + } else { + promise = Promise.resolve(false); + } + + return promise.then((getGrades) => { + + if (getGrades) { + return this.gradesProvider.getGradeItems(courseId, undefined, undefined, notification.site).then((items) => { + // Find the item of th module. + const item = items.find((item) => { + return moduleId == item.cmid; + }); + + if (item) { + // Open the item directly. + const pageParams: any = { + courseId: courseId, + gradeId: item.id + }; + + this.loginHelper.redirect('CoreGradesGradePage', pageParams, notification.site); + } + + return Promise.reject(null); + }); + } else { + return Promise.reject(null); + } + + }).catch(() => { + // Cannot get grade items or there's no need to. Open the course with the grades tab selected. + return this.courseHelper.getCourse(courseId, notification.site).then((result) => { + const pageParams: any = { + course: result.course, + selectedTab: 'CoreGrades' + }; + + this.loginHelper.redirect('CoreCourseSectionPage', pageParams, notification.site); + }); + }).catch(() => { + // Cannot get course for some reason, just open the grades page. + return this.loginHelper.redirect('CoreGradesCoursePage', {course: {id: courseId}}, notification.site); + }).finally(() => { + modal.dismiss(); + }); + } +} diff --git a/src/core/grades/providers/user-link-handler.ts b/src/core/grades/providers/user-link-handler.ts index 91e0d4f19..62ff332d6 100644 --- a/src/core/grades/providers/user-link-handler.ts +++ b/src/core/grades/providers/user-link-handler.ts @@ -15,7 +15,10 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreGradesProvider } from './grades'; /** @@ -26,7 +29,9 @@ export class CoreGradesUserLinkHandler extends CoreContentLinksHandlerBase { name = 'CoreGradesUserLinkHandler'; pattern = /\/grade\/report\/user\/index.php/; - constructor(private linkHelper: CoreContentLinksHelperProvider, private gradesProvider: CoreGradesProvider) { + constructor(private linkHelper: CoreContentLinksHelperProvider, private gradesProvider: CoreGradesProvider, + private domUtils: CoreDomUtilsProvider, private courseHelper: CoreCourseHelperProvider, + private loginHelper: CoreLoginHelperProvider) { super(); } @@ -41,14 +46,39 @@ export class CoreGradesUserLinkHandler extends CoreContentLinksHandlerBase { */ getActions(siteIds: string[], url: string, params: any, courseId?: number): CoreContentLinksAction[] | Promise { + courseId = courseId || params.id; + return [{ action: (siteId, navCtrl?): void => { - const pageParams = { - course: {id: courseId}, - userId: params.userid ? parseInt(params.userid, 10) : false, - }; - // Always use redirect to make it the new history root (to avoid "loops" in history). - this.linkHelper.goInSite(navCtrl, 'CoreGradesCoursePage', pageParams, siteId); + const userId = params.userid ? parseInt(params.userid, 10) : false; + + if (userId) { + // Open the grades page directly. + const pageParams = { + course: {id: courseId}, + userId: userId, + }; + + this.linkHelper.goInSite(navCtrl, 'CoreGradesCoursePage', pageParams, siteId); + } else { + // No userid, open the course with the grades tab selected. + const modal = this.domUtils.showModalLoading(); + + this.courseHelper.getCourse(courseId, siteId).then((result) => { + const pageParams: any = { + course: result.course, + selectedTab: 'CoreGrades' + }; + + // Use redirect to prevent loops in the navigation. + return this.loginHelper.redirect('CoreCourseSectionPage', pageParams, siteId); + }).catch(() => { + // Cannot get course for some reason, just open the grades page. + return this.linkHelper.goInSite(navCtrl, 'CoreGradesCoursePage', {course: {id: courseId}}, siteId); + }).finally(() => { + modal.dismiss(); + }); + } } }]; } @@ -64,10 +94,10 @@ export class CoreGradesUserLinkHandler extends CoreContentLinksHandlerBase { * @return {boolean|Promise} Whether the handler is enabled for the URL and site. */ isEnabled(siteId: string, url: string, params: any, courseId?: number): boolean | Promise { - if (!courseId) { + if (!courseId && !params.id) { return false; } - return this.gradesProvider.isPluginEnabledForCourse(courseId, siteId); + return this.gradesProvider.isPluginEnabledForCourse(courseId || params.id, siteId); } } diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index 3d84c5232..21154313c 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -591,26 +591,28 @@ export class CoreLoginHelperProvider { * @param {string} page Name of the page to load. * @param {any} params Params to pass to the page. * @param {string} siteId Site to load. + * @return {Promise} Promise resolved when done. */ - protected loadSiteAndPage(page: string, params: any, siteId: string): void { + protected loadSiteAndPage(page: string, params: any, siteId: string): Promise { const navCtrl = this.appProvider.getRootNavController(); if (siteId == CoreConstants.NO_SITE_ID) { // Page doesn't belong to a site, just load the page. - navCtrl.setRoot(page, params); + return navCtrl.setRoot(page, params); } else { const modal = this.domUtils.showModalLoading(); - this.sitesProvider.loadSite(siteId, page, params).then((loggedIn) => { + + return this.sitesProvider.loadSite(siteId, page, params).then((loggedIn) => { if (loggedIn) { // Due to DeepLinker, we need to remove the path from the URL before going to main menu. // IonTabs checks the URL to determine which path to load for deep linking, so we clear the URL. this.location.replaceState(''); - navCtrl.setRoot('CoreMainMenuPage', { redirectPage: page, redirectParams: params }); + return navCtrl.setRoot('CoreMainMenuPage', { redirectPage: page, redirectParams: params }); } }).catch((error) => { // Site doesn't exist. - navCtrl.setRoot('CoreLoginSitesPage'); + return navCtrl.setRoot('CoreLoginSitesPage'); }).finally(() => { modal.dismiss(); }); @@ -794,8 +796,9 @@ export class CoreLoginHelperProvider { * @param {string} page Name of the page to load. * @param {any} params Params to pass to the page. * @param {string} [siteId] Site to load. If not defined, current site. + * @return {Promise} Promise resolved when done. */ - redirect(page: string, params?: any, siteId?: string): void { + redirect(page: string, params?: any, siteId?: string): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); if (this.sitesProvider.isLoggedIn()) { @@ -804,10 +807,11 @@ export class CoreLoginHelperProvider { if (this.sitePluginsProvider.hasSitePluginsLoaded) { // The site has site plugins so the app will be restarted. Store the data and logout. this.appProvider.storeRedirect(siteId, page, params); - this.sitesProvider.logout(); + + return this.sitesProvider.logout(); } else { - this.sitesProvider.logout().then(() => { - this.loadSiteAndPage(page, params, siteId); + return this.sitesProvider.logout().then(() => { + return this.loadSiteAndPage(page, params, siteId); }); } } else { @@ -815,11 +819,13 @@ export class CoreLoginHelperProvider { } } else { if (siteId) { - this.loadSiteAndPage(page, params, siteId); + return this.loadSiteAndPage(page, params, siteId); } else { - this.appProvider.getRootNavController().setRoot('CoreLoginSitesPage'); + return this.appProvider.getRootNavController().setRoot('CoreLoginSitesPage'); } } + + return Promise.resolve(); } /** diff --git a/src/core/user/providers/participants-link-handler.ts b/src/core/user/providers/participants-link-handler.ts index 1a219a754..b9bb3eddd 100644 --- a/src/core/user/providers/participants-link-handler.ts +++ b/src/core/user/providers/participants-link-handler.ts @@ -18,6 +18,7 @@ import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-han import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; import { CoreLoginHelperProvider } from '@core/login/providers/helper'; import { CoreCourseHelperProvider } from '@core/course/providers/helper'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { CoreUserProvider } from './user'; /** @@ -30,7 +31,8 @@ export class CoreUserParticipantsLinkHandler extends CoreContentLinksHandlerBase pattern = /\/user\/index\.php/; constructor(private userProvider: CoreUserProvider, private loginHelper: CoreLoginHelperProvider, - private courseHelper: CoreCourseHelperProvider, private domUtils: CoreDomUtilsProvider) { + private courseHelper: CoreCourseHelperProvider, private domUtils: CoreDomUtilsProvider, + private linkHelper: CoreContentLinksHelperProvider) { super(); } @@ -61,7 +63,7 @@ export class CoreUserParticipantsLinkHandler extends CoreContentLinksHandlerBase return this.loginHelper.redirect('CoreCourseSectionPage', params, siteId); }).catch(() => { // Cannot get course for some reason, just open the participants page. - this.loginHelper.redirect('CoreUserParticipantsPage', {courseId: courseId}, siteId); + return this.linkHelper.goInSite(navCtrl, 'CoreUserParticipantsPage', {courseId: courseId}, siteId); }).finally(() => { modal.dismiss(); }); From 44a39fd763706adfd874dd279ea73badd2a08438 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 22 Mar 2019 11:08:47 +0100 Subject: [PATCH 028/263] MOBILE-2927 notification: Use new notifications WS --- .../notifications/notifications.module.ts | 5 +- src/addon/notifications/pages/list/list.ts | 61 +++--------- src/addon/notifications/providers/helper.ts | 93 +++++++++++++++++++ .../notifications/providers/notifications.ts | 84 ++++++++++++++++- 4 files changed, 194 insertions(+), 49 deletions(-) create mode 100644 src/addon/notifications/providers/helper.ts diff --git a/src/addon/notifications/notifications.module.ts b/src/addon/notifications/notifications.module.ts index b19fd72dc..d5042b001 100644 --- a/src/addon/notifications/notifications.module.ts +++ b/src/addon/notifications/notifications.module.ts @@ -14,6 +14,7 @@ import { NgModule, NgZone } from '@angular/core'; import { AddonNotificationsProvider } from './providers/notifications'; +import { AddonNotificationsHelperProvider } from './providers/helper'; import { AddonNotificationsMainMenuHandler } from './providers/mainmenu-handler'; import { AddonNotificationsSettingsHandler } from './providers/settings-handler'; import { AddonNotificationsCronHandler } from './providers/cron-handler'; @@ -30,7 +31,8 @@ import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers // List of providers (without handlers). export const ADDON_NOTIFICATIONS_PROVIDERS: any[] = [ - AddonNotificationsProvider + AddonNotificationsProvider, + AddonNotificationsHelperProvider ]; @NgModule({ @@ -40,6 +42,7 @@ export const ADDON_NOTIFICATIONS_PROVIDERS: any[] = [ ], providers: [ AddonNotificationsProvider, + AddonNotificationsHelperProvider, AddonNotificationsMainMenuHandler, AddonNotificationsSettingsHandler, AddonNotificationsCronHandler, diff --git a/src/addon/notifications/pages/list/list.ts b/src/addon/notifications/pages/list/list.ts index 2799cc8ee..3b8d1751a 100644 --- a/src/addon/notifications/pages/list/list.ts +++ b/src/addon/notifications/pages/list/list.ts @@ -21,6 +21,7 @@ import { CoreEventsProvider, CoreEventObserver } from '@providers/events'; import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { AddonNotificationsProvider } from '../../providers/notifications'; +import { AddonNotificationsHelperProvider } from '../../providers/helper'; import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; /** @@ -40,15 +41,14 @@ export class AddonNotificationsListPage { canMarkAllNotificationsAsRead = false; loadingMarkAllNotificationsAsRead = false; - protected readCount = 0; - protected unreadCount = 0; protected cronObserver: CoreEventObserver; protected pushObserver: Subscription; constructor(navParams: NavParams, private domUtils: CoreDomUtilsProvider, private eventsProvider: CoreEventsProvider, private sitesProvider: CoreSitesProvider, private textUtils: CoreTextUtilsProvider, private utils: CoreUtilsProvider, private notificationsProvider: AddonNotificationsProvider, - private pushNotificationsDelegate: CorePushNotificationsDelegate) { + private pushNotificationsDelegate: CorePushNotificationsDelegate, + private notificationsHelper: AddonNotificationsHelperProvider) { } /** @@ -79,53 +79,17 @@ export class AddonNotificationsListPage { protected fetchNotifications(refresh?: boolean): Promise { this.loadMoreError = false; - if (refresh) { - this.readCount = 0; - this.unreadCount = 0; - } + return this.notificationsHelper.getNotifications(refresh ? [] : this.notifications).then((result) => { + result.notifications.forEach(this.formatText.bind(this)); - const limit = AddonNotificationsProvider.LIST_LIMIT; - - return this.notificationsProvider.getUnreadNotifications(this.unreadCount, limit).then((unread) => { - const promises = []; - - unread.forEach(this.formatText.bind(this)); - - /* Don't add the unread notifications to this.notifications yet. If there are no unread notifications - that causes that the "There are no notifications" message is shown in pull to refresh. */ - this.unreadCount += unread.length; - - if (unread.length < limit) { - // Limit not reached. Get read notifications until reach the limit. - const readLimit = limit - unread.length; - promises.push(this.notificationsProvider.getReadNotifications(this.readCount, readLimit).then((read) => { - read.forEach(this.formatText.bind(this)); - this.readCount += read.length; - if (refresh) { - this.notifications = unread.concat(read); - } else { - this.notifications = this.notifications.concat(unread, read); - } - this.canLoadMore = read.length >= readLimit; - }).catch((error) => { - if (unread.length == 0) { - this.domUtils.showErrorModalDefault(error, 'addon.notifications.errorgetnotifications', true); - this.loadMoreError = true; // Set to prevent infinite calls with infinite-loading. - } - })); + if (refresh) { + this.notifications = result.notifications; } else { - if (refresh) { - this.notifications = unread; - } else { - this.notifications = this.notifications.concat(unread); - } - this.canLoadMore = true; + this.notifications = this.notifications.concat(result.notifications); } + this.canLoadMore = result.canLoadMore; - return Promise.all(promises).then(() => { - // Mark retrieved notifications as read if they are not. - this.markNotificationsAsRead(unread); - }); + this.markNotificationsAsRead(result.notifications); }).catch((error) => { this.domUtils.showErrorModalDefault(error, 'addon.notifications.errorgetnotifications', true); this.loadMoreError = true; // Set to prevent infinite calls with infinite-loading. @@ -162,6 +126,11 @@ export class AddonNotificationsListPage { if (notifications.length > 0) { const promises = notifications.map((notification) => { + if (notification.read) { + // Already read, don't mark it. + return Promise.resolve(); + } + return this.notificationsProvider.markNotificationRead(notification.id); }); diff --git a/src/addon/notifications/providers/helper.ts b/src/addon/notifications/providers/helper.ts new file mode 100644 index 000000000..f9c9e80bf --- /dev/null +++ b/src/addon/notifications/providers/helper.ts @@ -0,0 +1,93 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreSitesProvider } from '@providers/sites'; +import { AddonNotificationsProvider } from './notifications'; + +/** + * Service that provides some helper functions for notifications. + */ +@Injectable() +export class AddonNotificationsHelperProvider { + + constructor(private notificationsProvider: AddonNotificationsProvider, private sitesProvider: CoreSitesProvider) { + } + + /** + * Get some notifications. It will try to use the new WS if available. + * + * @param {any[]} notifications Current list of loaded notifications. It's used to calculate the offset. + * @param {number} [limit] Number of notifications to get. Defaults to LIST_LIMIT. + * @param {boolean} [toDisplay=true] True if notifications will be displayed to the user, either in view or in a notification. + * @param {boolean} [forceCache] True if it should return cached data. Has priority over ignoreCache. + * @param {boolean} [ignoreCache] True if it should ignore cached data (it will always fail in offline or server down). + * @param {string} [siteId] Site ID. If not defined, use current site. + * @return {Promise<{notifications: any[], canLoadMore: boolean}>} Promise resolved with notifications and if can load more. + */ + getNotifications(notifications: any[], limit?: number, toDisplay: boolean = true, forceCache?: boolean, ignoreCache?: boolean, + siteId?: string): Promise<{notifications: any[], canLoadMore: boolean}> { + + notifications = notifications || []; + limit = limit || AddonNotificationsProvider.LIST_LIMIT; + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + + return this.notificationsProvider.isPopupAvailable(siteId).then((available) => { + + if (available) { + return this.notificationsProvider.getPopupNotifications(notifications.length, limit, toDisplay, forceCache, + ignoreCache, siteId); + + } else { + // Fallback to get_messages. We need 2 calls, one for read and the other one for unread. + const unreadFrom = notifications.reduce((total, current) => { + return total + (current.read ? 0 : 1); + }, 0); + + return this.notificationsProvider.getUnreadNotifications(unreadFrom, limit, toDisplay, forceCache, ignoreCache, + siteId).then((unread) => { + + let promise; + + if (unread.length < limit) { + // Limit not reached. Get read notifications until reach the limit. + const readLimit = limit - unread.length, + readFrom = notifications.length - unreadFrom; + + promise = this.notificationsProvider.getReadNotifications(readFrom, readLimit, toDisplay, forceCache, + ignoreCache, siteId).then((read) => { + return unread.concat(read); + }).catch((error): any => { + if (unread.length > 0) { + // We were able to get some unread, return only the unread ones. + return unread; + } + + return Promise.reject(error); + }); + } else { + promise = Promise.resolve(unread); + } + + return promise.then((notifications) => { + return { + notifications: notifications, + canLoadMore: notifications.length >= limit + }; + }); + }); + } + }); + } +} diff --git a/src/addon/notifications/providers/notifications.ts b/src/addon/notifications/providers/notifications.ts index 1b9219fe8..b52578a53 100644 --- a/src/addon/notifications/providers/notifications.ts +++ b/src/addon/notifications/providers/notifications.ts @@ -45,9 +45,10 @@ export class AddonNotificationsProvider { * Function to format notification data. * * @param {any[]} notifications List of notifications. + * @param {boolean} [read] Whether the notifications are read or unread. * @return {Promise} Promise resolved with notifications. */ - protected formatNotificationsData(notifications: any[]): Promise { + protected formatNotificationsData(notifications: any[], read?: boolean): Promise { const promises = notifications.map((notification) => { // Set message to show. if (notification.contexturl && notification.contexturl.indexOf('/mod/forum/') >= 0) { @@ -55,6 +56,7 @@ export class AddonNotificationsProvider { } else { notification.mobiletext = notification.fullmessage; } + // Try to set courseid the notification belongs to. const cid = notification.fullmessagehtml.match(/course\/view\.php\?id=([^"]*)/); if (cid && cid[1]) { @@ -71,6 +73,11 @@ export class AddonNotificationsProvider { }); } + notification.notification = 1; + if (typeof read != 'undefined') { + notification.read = read; + } + return Promise.resolve(notification); }); @@ -154,7 +161,7 @@ export class AddonNotificationsProvider { if (response.messages) { const notifications = response.messages; - return this.formatNotificationsData(notifications).then(() => { + return this.formatNotificationsData(notifications, read).then(() => { if (this.appProvider.isDesktop() && toDisplay && !read && limitFrom === 0) { // Store the last received notification. Don't block the user for this. this.emulatorHelper.storeLastReceivedNotification( @@ -170,6 +177,67 @@ export class AddonNotificationsProvider { }); } + /** + * Get notifications from site using the new WebService. + * + * @param {number} offset Position of the first notification to get. + * @param {number} [limit] Number of notifications to get. Defaults to LIST_LIMIT. + * @param {boolean} [toDisplay=true] True if notifications will be displayed to the user, either in view or in a notification. + * @param {boolean} [forceCache] True if it should return cached data. Has priority over ignoreCache. + * @param {boolean} [ignoreCache] True if it should ignore cached data (it will always fail in offline or server down). + * @param {string} [siteId] Site ID. If not defined, use current site. + * @return {Promise<{notifications: any[], canLoadMore: boolean}>} Promise resolved with notifications and if can load more. + * @since 3.2 + */ + getPopupNotifications(offset: number, limit?: number, toDisplay: boolean = true, forceCache?: boolean, ignoreCache?: boolean, + siteId?: string): Promise<{notifications: any[], canLoadMore: boolean}> { + + limit = limit || AddonNotificationsProvider.LIST_LIMIT; + + this.logger.debug('Get popup notifications from ' + offset + '. Limit: ' + limit); + + return this.sitesProvider.getSite(siteId).then((site) => { + const data = { + useridto: site.getUserId(), + newestfirst: 1, + offset: offset, + limit: limit + 1 // Get one more to calculate canLoadMore. + }, + preSets = { + cacheKey: this.getNotificationsCacheKey(), + omitExpires: forceCache, + getFromCache: forceCache || !ignoreCache, + emergencyCache: forceCache || !ignoreCache, + }; + + // Get notifications. + return site.read('message_popup_get_popup_notifications', data, preSets).then((response) => { + if (response.notifications) { + const result: any = { + canLoadMore: response.notifications.length > limit + }, + notifications = response.notifications.slice(0, limit); + + result.notifications = notifications; + + return this.formatNotificationsData(notifications).then(() => { + const first = notifications[0]; + + if (this.appProvider.isDesktop() && toDisplay && offset === 0 && first && !first.read) { + // Store the last received notification. Don't block the user for this. + this.emulatorHelper.storeLastReceivedNotification( + AddonNotificationsProvider.PUSH_SIMULATION_COMPONENT, first, siteId); + } + + return result; + }); + } else { + return Promise.reject(null); + } + }); + }); + } + /** * Get read notifications from site. * @@ -244,6 +312,18 @@ export class AddonNotificationsProvider { }); } + /** + * Returns whether or not popup WS is available for a certain site. + * + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved with true if available, resolved with false or rejected otherwise. + */ + isPopupAvailable(siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return site.wsAvailable('message_popup_get_popup_notifications'); + }); + } + /** * Mark all message notification as read. * From c9820170291dc6f3bf7c7639c5b95c75a3350e04 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 22 Mar 2019 13:08:03 +0100 Subject: [PATCH 029/263] MOBILE-2927 emulator: Adapt push simulation to new behaviour --- src/addon/notifications/providers/cron-handler.ts | 7 +++++-- src/core/emulator/providers/helper.ts | 12 +++++------- src/core/emulator/providers/local-notifications.ts | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/addon/notifications/providers/cron-handler.ts b/src/addon/notifications/providers/cron-handler.ts index 78f317c41..687b970e9 100644 --- a/src/addon/notifications/providers/cron-handler.ts +++ b/src/addon/notifications/providers/cron-handler.ts @@ -21,6 +21,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreEmulatorHelperProvider } from '@core/emulator/providers/helper'; import { AddonNotificationsProvider } from './notifications'; +import { AddonNotificationsHelperProvider } from './helper'; /** * Notifications cron handler. @@ -32,7 +33,7 @@ export class AddonNotificationsCronHandler implements CoreCronHandler { constructor(private appProvider: CoreAppProvider, private eventsProvider: CoreEventsProvider, private sitesProvider: CoreSitesProvider, private localNotifications: CoreLocalNotificationsProvider, private notificationsProvider: AddonNotificationsProvider, private textUtils: CoreTextUtilsProvider, - private emulatorHelper: CoreEmulatorHelperProvider) {} + private emulatorHelper: CoreEmulatorHelperProvider, private notificationsHelper: AddonNotificationsHelperProvider) {} /** * Get the time between consecutive executions. @@ -91,7 +92,9 @@ export class AddonNotificationsCronHandler implements CoreCronHandler { * @return {Promise} Promise resolved with the notifications. */ protected fetchNotifications(siteId: string): Promise { - return this.notificationsProvider.getUnreadNotifications(0, undefined, true, false, true, siteId); + return this.notificationsHelper.getNotifications([], undefined, true, false, true, siteId).then((result) => { + return result.notifications; + }); } /** diff --git a/src/core/emulator/providers/helper.ts b/src/core/emulator/providers/helper.ts index fc10a32a2..fc64ed0eb 100644 --- a/src/core/emulator/providers/helper.ts +++ b/src/core/emulator/providers/helper.ts @@ -161,17 +161,15 @@ export class CoreEmulatorHelperProvider implements CoreInitHandler { // There is a new notification, show it. return getDataFn(notification).then((titleAndText) => { + // Set some calculated data. + notification.site = siteId; + notification.name = notification.name || notification.eventtype; + const localNotif: ILocalNotification = { id: 1, - trigger: { - at: new Date() - }, title: titleAndText.title, text: titleAndText.text, - data: { - notif: notification, - site: siteId - } + data: notification }; return this.localNotifProvider.schedule(localNotif, component, siteId); diff --git a/src/core/emulator/providers/local-notifications.ts b/src/core/emulator/providers/local-notifications.ts index 3b943aba1..73d6ebfc4 100644 --- a/src/core/emulator/providers/local-notifications.ts +++ b/src/core/emulator/providers/local-notifications.ts @@ -630,7 +630,7 @@ export class LocalNotificationsMock extends LocalNotifications { * @return {number} Trigger time. */ protected getNotificationTriggerAt(notification: ILocalNotification): number { - const triggerAt = (notification.trigger && notification.trigger.at) || 0; + const triggerAt = (notification.trigger && notification.trigger.at) || new Date(); if (typeof triggerAt != 'number') { return triggerAt.getTime(); From 1146eea0fa30b4c62c7cea87ef40e5b27122b487 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 25 Mar 2019 14:40:05 +0100 Subject: [PATCH 030/263] MOBILE-2927 messages: Detect push in group conversations --- src/addon/messages/messages.module.ts | 4 +- .../messages/providers/mainmenu-handler.ts | 57 ++++++++++++++++++- src/addon/messages/providers/messages.ts | 34 +++++++++-- 3 files changed, 84 insertions(+), 11 deletions(-) diff --git a/src/addon/messages/messages.module.ts b/src/addon/messages/messages.module.ts index 2dd05562f..8cc6a9b7b 100644 --- a/src/addon/messages/messages.module.ts +++ b/src/addon/messages/messages.module.ts @@ -121,8 +121,8 @@ export class AddonMessagesModule { // Check if we have enough information to open the conversation. if (notification.convid && enabled) { pageParams.conversationId = Number(notification.convid); - } else if (notification.userfromid) { - pageParams.discussionUserId = Number(notification.userfromid); + } else if (notification.userfromid || notification.useridfrom) { + pageParams.discussionUserId = Number(notification.userfromid || notification.useridfrom); } linkHelper.goInSite(undefined, pageName, pageParams, notification.site); diff --git a/src/addon/messages/providers/mainmenu-handler.ts b/src/addon/messages/providers/mainmenu-handler.ts index 4b83ae499..155e0c2e8 100644 --- a/src/addon/messages/providers/mainmenu-handler.ts +++ b/src/addon/messages/providers/mainmenu-handler.ts @@ -229,8 +229,59 @@ export class AddonMessagesMainMenuHandler implements CoreMainMenuHandler, CoreCr * @return {Promise} Promise resolved with the notifications. */ protected fetchMessages(siteId?: string): Promise { - return this.messagesProvider.getUnreadReceivedMessages(true, false, true, siteId).then((response) => { - return response.messages; + return this.sitesProvider.getSite(siteId).then((site) => { + if (site.isVersionGreaterEqualThan('3.7')) { + + // Use get conversations WS to be able to get group conversations messages. + return this.messagesProvider.getConversations(undefined, undefined, 0, site.id, undefined, false, true) + .then((result) => { + + // Find the first unmuted conversation. + const conv = result.conversations.find((conversation) => { + return !conversation.ismuted; + }); + + if (conv.isread) { + // The conversation is read, no unread messages. + return []; + } + + const currentUserId = site.getUserId(), + message = conv.messages[0]; // Treat only the last message, is the one we're interested. + + if (!message || message.useridfrom == currentUserId) { + // No last message or not from current user. Return empty list. + return []; + } + + // Add some calculated data. + message.contexturl = ''; + message.contexturlname = ''; + message.convid = conv.id; + message.fullmessage = message.text; + message.fullmessageformat = 0; + message.fullmessagehtml = ''; + message.notification = 0; + message.read = 0; + message.smallmessage = message.smallmessage || message.text; + message.subject = conv.name; + message.timecreated = message.timecreated * 1000; + message.timeread = 0; + message.useridto = currentUserId; + message.usertofullname = site.getInfo().fullname; + + const userFrom = conv.members.find((member) => { + return member.id == message.useridfrom; + }); + message.userfromfullname = userFrom && userFrom.fullname; + + return [message]; + }); + } else { + return this.messagesProvider.getUnreadReceivedMessages(true, false, true, siteId).then((response) => { + return response.messages; + }); + } }); } @@ -242,7 +293,7 @@ export class AddonMessagesMainMenuHandler implements CoreMainMenuHandler, CoreCr */ protected getTitleAndText(message: any): Promise { const data = { - title: message.userfromfullname, + title: message.name || message.userfromfullname, }; return this.textUtils.formatText(message.text, true, true).catch(() => { diff --git a/src/addon/messages/providers/messages.ts b/src/addon/messages/providers/messages.ts index 6bf99d882..bfa615909 100644 --- a/src/addon/messages/providers/messages.ts +++ b/src/addon/messages/providers/messages.ts @@ -882,14 +882,20 @@ export class AddonMessagesProvider { result.messages = result.messages.slice(0, limitTo); } + let lastReceived; + result.messages.forEach((message) => { // Convert time to milliseconds. message.timecreated = message.timecreated ? message.timecreated * 1000 : 0; + + if (!lastReceived && message.useridfrom != userId) { + lastReceived = message; + } }); - if (this.appProvider.isDesktop() && params.useridto == userId && limitFrom === 0) { + if (this.appProvider.isDesktop() && limitFrom === 0 && lastReceived) { // Store the last received message (we cannot know if it's unread or not). Don't block the user for this. - this.storeLastReceivedMessageIfNeeded(conversationId, result.messages[0], site.getId()); + this.storeLastReceivedMessageIfNeeded(conversationId, lastReceived, site.getId()); } if (excludePending) { @@ -923,11 +929,13 @@ export class AddonMessagesProvider { * @param {number} [limitFrom=0] The offset to start at. * @param {string} [siteId] Site ID. If not defined, use current site. * @param {number} [userId] User ID. If not defined, current user in the site. + * @param {boolean} [forceCache] True if it should return cached data. Has priority over ignoreCache. + * @param {boolean} [ignoreCache] True if it should ignore cached data (it will always fail in offline or server down). * @return {Promise} Promise resolved with the conversations. * @since 3.6 */ - getConversations(type?: number, favourites?: boolean, limitFrom: number = 0, siteId?: string, userId?: number) - : Promise<{conversations: any[], canLoadMore: boolean}> { + getConversations(type?: number, favourites?: boolean, limitFrom: number = 0, siteId?: string, userId?: number, + forceCache?: boolean, ignoreCache?: boolean): Promise<{conversations: any[], canLoadMore: boolean}> { return this.sitesProvider.getSite(siteId).then((site) => { userId = userId || site.getUserId(); @@ -941,6 +949,13 @@ export class AddonMessagesProvider { limitnum: this.LIMIT_MESSAGES + 1, }; + if (forceCache) { + preSets['omitExpires'] = true; + } else if (ignoreCache) { + preSets['getFromCache'] = false; + preSets['emergencyCache'] = false; + } + if (typeof type != 'undefined' && type != null) { params.type = type; } @@ -951,8 +966,15 @@ export class AddonMessagesProvider { return site.read('core_message_get_conversations', params, preSets).then((response) => { // Format the conversations, adding some calculated fields. const conversations = response.conversations.slice(0, this.LIMIT_MESSAGES).map((conversation) => { - return this.formatConversation(conversation, userId); - }); + return this.formatConversation(conversation, userId); + }), + conv = conversations[0], + lastMessage = conv && conv.messages[0]; + + if (this.appProvider.isDesktop() && limitFrom === 0 && lastMessage && !conv.sentfromcurrentuser) { + // Store the last received message (we cannot know if it's unread or not). Don't block the user for this. + this.storeLastReceivedMessageIfNeeded(conv.id, lastMessage, site.getId()); + } return { conversations: conversations, From b9aa0e0a9081ea0d7d13b5965868a0c71a93539f Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 26 Mar 2019 11:20:44 +0100 Subject: [PATCH 031/263] MOBILE-2927 notifications: Make push simulation use new delegate --- .../notifications/notifications.module.ts | 28 ++++++------------- .../notifications/providers/cron-handler.ts | 2 +- .../notifications/providers/notifications.ts | 2 ++ .../providers/push-click-handler.ts | 4 ++- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/addon/notifications/notifications.module.ts b/src/addon/notifications/notifications.module.ts index d5042b001..2a2b94021 100644 --- a/src/addon/notifications/notifications.module.ts +++ b/src/addon/notifications/notifications.module.ts @@ -20,13 +20,11 @@ import { AddonNotificationsSettingsHandler } from './providers/settings-handler' import { AddonNotificationsCronHandler } from './providers/cron-handler'; import { AddonNotificationsPushClickHandler } from './providers/push-click-handler'; import { CoreAppProvider } from '@providers/app'; -import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { CoreInitDelegate } from '@providers/init'; import { CoreMainMenuDelegate } from '@core/mainmenu/providers/delegate'; import { CoreSettingsDelegate } from '@core/settings/providers/delegate'; import { CoreCronDelegate } from '@providers/cron'; import { CoreLocalNotificationsProvider } from '@providers/local-notifications'; -import { CoreSitesProvider } from '@providers/sites'; -import { CoreUtilsProvider } from '@providers/utils/utils'; import { CorePushNotificationsDelegate } from '@core/pushnotifications/providers/delegate'; // List of providers (without handlers). @@ -53,9 +51,8 @@ export class AddonNotificationsModule { constructor(mainMenuDelegate: CoreMainMenuDelegate, mainMenuHandler: AddonNotificationsMainMenuHandler, settingsDelegate: CoreSettingsDelegate, settingsHandler: AddonNotificationsSettingsHandler, cronDelegate: CoreCronDelegate, cronHandler: AddonNotificationsCronHandler, zone: NgZone, - appProvider: CoreAppProvider, utils: CoreUtilsProvider, sitesProvider: CoreSitesProvider, - notificationsProvider: AddonNotificationsProvider, localNotifications: CoreLocalNotificationsProvider, - linkHelper: CoreContentLinksHelperProvider, pushNotificationsDelegate: CorePushNotificationsDelegate, + appProvider: CoreAppProvider, localNotifications: CoreLocalNotificationsProvider, + initDelegate: CoreInitDelegate, pushNotificationsDelegate: CorePushNotificationsDelegate, pushClickHandler: AddonNotificationsPushClickHandler) { mainMenuDelegate.registerHandler(mainMenuHandler); @@ -63,22 +60,13 @@ export class AddonNotificationsModule { cronDelegate.register(cronHandler); pushNotificationsDelegate.registerClickHandler(pushClickHandler); - const notificationClicked = (notification: any): void => { - sitesProvider.isFeatureDisabled('CoreMainMenuDelegate_AddonNotifications', notification.site).then((disabled) => { - if (disabled) { - // Notifications are disabled, stop. - return; - } - - notificationsProvider.invalidateNotificationsList().finally(() => { - linkHelper.goInSite(undefined, 'AddonNotificationsListPage', undefined, notification.site); - }); - }); - }; - if (appProvider.isDesktop()) { // Listen for clicks in simulated push notifications. - localNotifications.registerClick(AddonNotificationsProvider.PUSH_SIMULATION_COMPONENT, notificationClicked); + localNotifications.registerClick(AddonNotificationsProvider.PUSH_SIMULATION_COMPONENT, (notification) => { + initDelegate.ready().then(() => { + pushNotificationsDelegate.clicked(notification); + }); + }); } } } diff --git a/src/addon/notifications/providers/cron-handler.ts b/src/addon/notifications/providers/cron-handler.ts index 687b970e9..e16ed9a1f 100644 --- a/src/addon/notifications/providers/cron-handler.ts +++ b/src/addon/notifications/providers/cron-handler.ts @@ -105,7 +105,7 @@ export class AddonNotificationsCronHandler implements CoreCronHandler { */ protected getTitleAndText(notification: any): Promise { const data = { - title: notification.userfromfullname, + title: notification.subject || notification.userfromfullname, text: notification.mobiletext.replace(/-{4,}/ig, '') }; data.text = this.textUtils.replaceNewLines(data.text, '
'); diff --git a/src/addon/notifications/providers/notifications.ts b/src/addon/notifications/providers/notifications.ts index b52578a53..d268cff1a 100644 --- a/src/addon/notifications/providers/notifications.ts +++ b/src/addon/notifications/providers/notifications.ts @@ -73,7 +73,9 @@ export class AddonNotificationsProvider { }); } + notification.moodlecomponent = notification.component; notification.notification = 1; + notification.notif = 1; if (typeof read != 'undefined') { notification.read = read; } diff --git a/src/addon/notifications/providers/push-click-handler.ts b/src/addon/notifications/providers/push-click-handler.ts index 4d8d2f382..11450bb23 100644 --- a/src/addon/notifications/providers/push-click-handler.ts +++ b/src/addon/notifications/providers/push-click-handler.ts @@ -40,7 +40,9 @@ export class AddonNotificationsPushClickHandler implements CorePushNotifications handles(notification: any): boolean | Promise { if (this.utils.isTrueOrOne(notification.notif)) { // Notification clicked, mark as read. Don't block for this. - this.notificationsProvider.markNotificationRead(notification.savedmessageid, notification.site).then(() => { + const notifId = notification.savedmessageid || notification.id; + + this.notificationsProvider.markNotificationRead(notifId, notification.site).then(() => { this.eventsProvider.trigger(AddonNotificationsProvider.READ_CHANGED_EVENT, null, notification.site); }).catch(() => { // Ignore errors. From 98863624997aa20edc89bea27a943a2a2e19a05e Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 2 Apr 2019 10:51:09 +0200 Subject: [PATCH 032/263] MOBILE-2953 push: Use customdata in push click handlers --- src/addon/badges/providers/push-click-handler.ts | 13 ++++++++++--- src/addon/mod/forum/providers/push-click-handler.ts | 9 ++++++--- src/addon/mod/quiz/providers/push-click-handler.ts | 3 ++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/addon/badges/providers/push-click-handler.ts b/src/addon/badges/providers/push-click-handler.ts index 555a99240..1aabf4f28 100644 --- a/src/addon/badges/providers/push-click-handler.ts +++ b/src/addon/badges/providers/push-click-handler.ts @@ -37,9 +37,10 @@ export class AddonBadgesPushClickHandler implements CorePushNotificationsClickHa * @return {boolean} Whether the notification click is handled by this handler */ handles(notification: any): boolean | Promise { - // @todo: Support 'badgecreatornotice' once we receive the hash or contexturl. + const data = notification.customdata || {}; + if (this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'moodle' && - notification.name == 'badgerecipientnotice') { + (notification.name == 'badgerecipientnotice' || (notification.name == 'badgecreatornotice' && data.hash))) { return this.badgesProvider.isPluginEnabled(notification.site); } @@ -53,8 +54,14 @@ export class AddonBadgesPushClickHandler implements CorePushNotificationsClickHa * @return {Promise} Promise resolved when done. */ handleClick(notification: any): Promise { - // @todo: Go to the badge page once we receive the hash or contexturl. + const data = notification.customdata || {}; + if (data.hash) { + // We have the hash, open the badge directly. + return this.loginHelper.redirect('AddonBadgesIssuedBadgePage', {courseId: 0, badgeHash: data.hash}, notification.site); + } + + // No hash, open the list of user badges. return this.badgesProvider.invalidateUserBadges(0, Number(notification.usertoid), notification.site).catch(() => { // Ignore errors. }).then(() => { diff --git a/src/addon/mod/forum/providers/push-click-handler.ts b/src/addon/mod/forum/providers/push-click-handler.ts index 4a224a843..01cff72f8 100644 --- a/src/addon/mod/forum/providers/push-click-handler.ts +++ b/src/addon/mod/forum/providers/push-click-handler.ts @@ -50,13 +50,16 @@ export class AddonModForumPushClickHandler implements CorePushNotificationsClick */ handleClick(notification: any): Promise { const contextUrlParams = this.urlUtils.extractUrlParams(notification.contexturl), + data = notification.customdata || {}, pageParams: any = { courseId: Number(notification.courseid), - discussionId: Number(contextUrlParams.d), + discussionId: Number(contextUrlParams.d || data.discussionid), + cmId: Number(data.cmid), + forumId: Number(data.instance) }; - if (contextUrlParams.urlHash) { - pageParams.postId = Number(contextUrlParams.urlHash.replace('p', '')); + if (data.postid || contextUrlParams.urlHash) { + pageParams.postId = Number(data.postid || contextUrlParams.urlHash.replace('p', '')); } return this.forumProvider.invalidateDiscussionPosts(pageParams.discussionId, notification.site).catch(() => { diff --git a/src/addon/mod/quiz/providers/push-click-handler.ts b/src/addon/mod/quiz/providers/push-click-handler.ts index 2373bd622..799d32808 100644 --- a/src/addon/mod/quiz/providers/push-click-handler.ts +++ b/src/addon/mod/quiz/providers/push-click-handler.ts @@ -54,12 +54,13 @@ export class AddonModQuizPushClickHandler implements CorePushNotificationsClickH */ handleClick(notification: any): Promise { const contextUrlParams = this.urlUtils.extractUrlParams(notification.contexturl), + data = notification.customdata || {}, courseId = Number(notification.courseid); if (notification.name == 'submission') { // A student made a submission, go to view the attempt. return this.quizHelper.handleReviewLink(undefined, Number(contextUrlParams.attempt), Number(contextUrlParams.page), - courseId, undefined, notification.site); + courseId, data.instance, notification.site); } else { // Open the activity. const moduleId = Number(contextUrlParams.id); From 4033b6c4a638d387aaef33a031892f531df65b5b Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 3 Apr 2019 09:29:02 +0200 Subject: [PATCH 033/263] MOBILE-2953 notifications: Add default action to open in browser --- .../components/actions/actions.ts | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/addon/notifications/components/actions/actions.ts b/src/addon/notifications/components/actions/actions.ts index 459ebdb8c..2b34fa41b 100644 --- a/src/addon/notifications/components/actions/actions.ts +++ b/src/addon/notifications/components/actions/actions.ts @@ -13,7 +13,9 @@ // limitations under the License. import { Component, Input, OnInit } from '@angular/core'; +import { NavController } from 'ionic-angular'; import { CoreContentLinksDelegate, CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; +import { CoreSitesProvider } from '@providers/sites'; /** * Component that displays the actions for a notification. @@ -28,14 +30,38 @@ export class AddonNotificationsActionsComponent implements OnInit { actions: CoreContentLinksAction[] = []; - constructor(private contentLinksDelegate: CoreContentLinksDelegate) {} + constructor(private contentLinksDelegate: CoreContentLinksDelegate, private sitesProvider: CoreSitesProvider) {} /** * Component being initialized. */ ngOnInit(): void { + if (!this.contextUrl) { + // No contexturl, nothing to do. + return; + } + this.contentLinksDelegate.getActionsFor(this.contextUrl, this.courseId).then((actions) => { + if (!actions.length) { + // URL is not supported. Add an action to open it in browser. + actions.push({ + message: 'core.view', + icon: 'eye', + action: this.defaultAction.bind(this) + }); + } + this.actions = actions; }); } + + /** + * Default action. Open in browser. + * + * @param {string} siteId Site ID to use. + * @param {NavController} [navCtrl] NavController. + */ + protected defaultAction(siteId: string, navCtrl?: NavController): void { + this.sitesProvider.getCurrentSite().openInBrowserWithAutoLogin(this.contextUrl); + } } From 0ceaf895575a1d70922ec3e8be04eacdb17088c5 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 3 Apr 2019 14:48:46 +0200 Subject: [PATCH 034/263] MOBILE-2953 blog: Fix blog link handler feature name --- src/addon/blog/providers/index-link-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/addon/blog/providers/index-link-handler.ts b/src/addon/blog/providers/index-link-handler.ts index 176aec76e..189fad7a3 100644 --- a/src/addon/blog/providers/index-link-handler.ts +++ b/src/addon/blog/providers/index-link-handler.ts @@ -24,7 +24,7 @@ import { AddonBlogProvider } from './blog'; @Injectable() export class AddonBlogIndexLinkHandler extends CoreContentLinksHandlerBase { name = 'AddonBlogIndexLinkHandler'; - featureName = 'CoreUserDelegate_AddonBlog'; + featureName = 'CoreUserDelegate_AddonBlog:blogs'; pattern = /\/blog\/index\.php/; constructor(private blogProvider: AddonBlogProvider, private loginHelper: CoreLoginHelperProvider) { From 65702106f723a8335de307e3c87b2309cf08b904 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 3 Apr 2019 15:38:34 +0200 Subject: [PATCH 035/263] MOBILE-2953 notifications: Pass customdata to link actions --- .../providers/discussion-link-handler.ts | 14 ++- .../lesson/providers/push-click-handler.ts | 67 ++----------- .../mod/quiz/providers/push-click-handler.ts | 2 +- .../mod/quiz/providers/review-link-handler.ts | 9 +- .../components/actions/actions.ts | 3 +- src/addon/notifications/pages/list/list.html | 2 +- .../notifications/providers/notifications.ts | 35 ++++--- src/core/contentlinks/providers/delegate.ts | 8 +- src/core/contentlinks/providers/helper.ts | 14 ++- src/core/grades/providers/helper.ts | 97 ++++++++++++++++++- .../grades/providers/user-link-handler.ts | 44 ++------- 11 files changed, 170 insertions(+), 125 deletions(-) diff --git a/src/addon/mod/forum/providers/discussion-link-handler.ts b/src/addon/mod/forum/providers/discussion-link-handler.ts index f4962baf0..d1c5399be 100644 --- a/src/addon/mod/forum/providers/discussion-link-handler.ts +++ b/src/addon/mod/forum/providers/discussion-link-handler.ts @@ -38,16 +38,26 @@ export class AddonModForumDiscussionLinkHandler extends CoreContentLinksHandlerB * @param {string} url The URL to treat. * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @param {any} [data] Extra data to handle the URL. * @return {CoreContentLinksAction[]|Promise} List of (or promise resolved with list of) actions. */ - getActions(siteIds: string[], url: string, params: any, courseId?: number): + getActions(siteIds: string[], url: string, params: any, courseId?: number, data?: any): CoreContentLinksAction[] | Promise { + data = data || {}; + return [{ action: (siteId, navCtrl?): void => { - const pageParams = { + const pageParams: any = { courseId: courseId || parseInt(params.courseid, 10) || parseInt(params.cid, 10), discussionId: parseInt(params.d, 10), + cmId: data.cmid && parseInt(data.cmid, 10), + forumId: data.instance && parseInt(data.instance, 10) }; + + if (data.postid || params.urlHash) { + pageParams.postId = parseInt(data.postid || params.urlHash.replace('p', '')); + } + this.linkHelper.goInSite(navCtrl, 'AddonModForumDiscussionPage', pageParams, siteId); } }]; diff --git a/src/addon/mod/lesson/providers/push-click-handler.ts b/src/addon/mod/lesson/providers/push-click-handler.ts index 841298c52..649436683 100644 --- a/src/addon/mod/lesson/providers/push-click-handler.ts +++ b/src/addon/mod/lesson/providers/push-click-handler.ts @@ -14,12 +14,9 @@ import { Injectable } from '@angular/core'; import { CoreUtilsProvider } from '@providers/utils/utils'; -import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; -import { CoreLoginHelperProvider } from '@core/login/providers/helper'; -import { CoreCourseHelperProvider } from '@core/course/providers/helper'; import { CoreGradesProvider } from '@core/grades/providers/grades'; -import { AddonModLessonProvider } from './lesson'; +import { CoreGradesHelperProvider } from '@core/grades/providers/helper'; /** * Handler for lesson push notifications clicks. @@ -30,9 +27,8 @@ export class AddonModLessonPushClickHandler implements CorePushNotificationsClic priority = 200; featureName = 'CoreCourseModuleDelegate_AddonModLesson'; - constructor(private utils: CoreUtilsProvider, private lessonProvider: AddonModLessonProvider, - private loginHelper: CoreLoginHelperProvider, private domUtils: CoreDomUtilsProvider, - private courseHelper: CoreCourseHelperProvider, private gradesProvider: CoreGradesProvider) {} + constructor(private utils: CoreUtilsProvider, private gradesHelper: CoreGradesHelperProvider, + private gradesProvider: CoreGradesProvider) {} /** * Check if a notification click is handled by this handler. @@ -44,7 +40,7 @@ export class AddonModLessonPushClickHandler implements CorePushNotificationsClic if (this.utils.isTrueOrOne(notification.notif) && notification.moodlecomponent == 'mod_lesson' && notification.name == 'graded_essay') { - return this.lessonProvider.isPluginEnabled(notification.site); + return this.gradesProvider.isPluginEnabledForCourse(Number(notification.courseid), notification.site); } return false; @@ -59,59 +55,8 @@ export class AddonModLessonPushClickHandler implements CorePushNotificationsClic handleClick(notification: any): Promise { const data = notification.customdata || {}, courseId = Number(notification.courseid), - moduleId = Number(data.cmid), - modal = this.domUtils.showModalLoading(); - let promise; + moduleId = Number(data.cmid); - if (moduleId) { - // Try to open the module grade directly. Check if it's possible. - promise = this.gradesProvider.isGradeItemsAvalaible(notification.site).catch(() => { - return false; - }); - } else { - promise = Promise.resolve(false); - } - - return promise.then((getGrades) => { - - if (getGrades) { - return this.gradesProvider.getGradeItems(courseId, undefined, undefined, notification.site).then((items) => { - // Find the item of th module. - const item = items.find((item) => { - return moduleId == item.cmid; - }); - - if (item) { - // Open the item directly. - const pageParams: any = { - courseId: courseId, - gradeId: item.id - }; - - this.loginHelper.redirect('CoreGradesGradePage', pageParams, notification.site); - } - - return Promise.reject(null); - }); - } else { - return Promise.reject(null); - } - - }).catch(() => { - // Cannot get grade items or there's no need to. Open the course with the grades tab selected. - return this.courseHelper.getCourse(courseId, notification.site).then((result) => { - const pageParams: any = { - course: result.course, - selectedTab: 'CoreGrades' - }; - - this.loginHelper.redirect('CoreCourseSectionPage', pageParams, notification.site); - }); - }).catch(() => { - // Cannot get course for some reason, just open the grades page. - return this.loginHelper.redirect('CoreGradesCoursePage', {course: {id: courseId}}, notification.site); - }).finally(() => { - modal.dismiss(); - }); + return this.gradesHelper.goToGrades(courseId, undefined, moduleId, undefined, notification.site); } } diff --git a/src/addon/mod/quiz/providers/push-click-handler.ts b/src/addon/mod/quiz/providers/push-click-handler.ts index 799d32808..43397a59b 100644 --- a/src/addon/mod/quiz/providers/push-click-handler.ts +++ b/src/addon/mod/quiz/providers/push-click-handler.ts @@ -60,7 +60,7 @@ export class AddonModQuizPushClickHandler implements CorePushNotificationsClickH if (notification.name == 'submission') { // A student made a submission, go to view the attempt. return this.quizHelper.handleReviewLink(undefined, Number(contextUrlParams.attempt), Number(contextUrlParams.page), - courseId, data.instance, notification.site); + courseId, Number(data.instance), notification.site); } else { // Open the activity. const moduleId = Number(contextUrlParams.id); diff --git a/src/addon/mod/quiz/providers/review-link-handler.ts b/src/addon/mod/quiz/providers/review-link-handler.ts index b5d36dfc3..516499fd0 100644 --- a/src/addon/mod/quiz/providers/review-link-handler.ts +++ b/src/addon/mod/quiz/providers/review-link-handler.ts @@ -38,19 +38,22 @@ export class AddonModQuizReviewLinkHandler extends CoreContentLinksHandlerBase { * @param {string} url The URL to treat. * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @param {any} [data] Extra data to handle the URL. * @return {CoreContentLinksAction[]|Promise} List of (or promise resolved with list of) actions. */ - getActions(siteIds: string[], url: string, params: any, courseId?: number): + getActions(siteIds: string[], url: string, params: any, courseId?: number, data?: any): CoreContentLinksAction[] | Promise { courseId = courseId || params.courseid || params.cid; + data = data || {}; return [{ action: (siteId, navCtrl?): void => { const attemptId = parseInt(params.attempt, 10), - page = parseInt(params.page, 10); + page = parseInt(params.page, 10), + quizId = data.instance && parseInt(data.instance, 10); - this.quizHelper.handleReviewLink(navCtrl, attemptId, page, courseId, undefined, siteId); + this.quizHelper.handleReviewLink(navCtrl, attemptId, page, courseId, quizId, siteId); } }]; } diff --git a/src/addon/notifications/components/actions/actions.ts b/src/addon/notifications/components/actions/actions.ts index 2b34fa41b..7835d3829 100644 --- a/src/addon/notifications/components/actions/actions.ts +++ b/src/addon/notifications/components/actions/actions.ts @@ -27,6 +27,7 @@ import { CoreSitesProvider } from '@providers/sites'; export class AddonNotificationsActionsComponent implements OnInit { @Input() contextUrl: string; @Input() courseId: number; + @Input() data?: any; // Extra data to handle the URL. actions: CoreContentLinksAction[] = []; @@ -41,7 +42,7 @@ export class AddonNotificationsActionsComponent implements OnInit { return; } - this.contentLinksDelegate.getActionsFor(this.contextUrl, this.courseId).then((actions) => { + this.contentLinksDelegate.getActionsFor(this.contextUrl, this.courseId, undefined, this.data).then((actions) => { if (!actions.length) { // URL is not supported. Add an action to open it in browser. actions.push({ diff --git a/src/addon/notifications/pages/list/list.html b/src/addon/notifications/pages/list/list.html index 19b3805cd..b931c6768 100644 --- a/src/addon/notifications/pages/list/list.html +++ b/src/addon/notifications/pages/list/list.html @@ -27,7 +27,7 @@

- + diff --git a/src/addon/notifications/providers/notifications.ts b/src/addon/notifications/providers/notifications.ts index d268cff1a..64a19c10f 100644 --- a/src/addon/notifications/providers/notifications.ts +++ b/src/addon/notifications/providers/notifications.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreAppProvider } from '@providers/app'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; +import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUserProvider } from '@core/user/providers/user'; import { CoreEmulatorHelperProvider } from '@core/emulator/providers/helper'; @@ -37,7 +38,8 @@ export class AddonNotificationsProvider { constructor(logger: CoreLoggerProvider, private appProvider: CoreAppProvider, private sitesProvider: CoreSitesProvider, private timeUtils: CoreTimeUtilsProvider, private userProvider: CoreUserProvider, - private emulatorHelper: CoreEmulatorHelperProvider, private messageProvider: AddonMessagesProvider) { + private emulatorHelper: CoreEmulatorHelperProvider, private messageProvider: AddonMessagesProvider, + private textUtils: CoreTextUtilsProvider) { this.logger = logger.getInstance('AddonNotificationsProvider'); } @@ -57,11 +59,27 @@ export class AddonNotificationsProvider { notification.mobiletext = notification.fullmessage; } - // Try to set courseid the notification belongs to. - const cid = notification.fullmessagehtml.match(/course\/view\.php\?id=([^"]*)/); - if (cid && cid[1]) { - notification.courseid = cid[1]; + notification.moodlecomponent = notification.component; + notification.notification = 1; + notification.notif = 1; + if (typeof read != 'undefined') { + notification.read = read; } + + if (typeof notification.customdata == 'string') { + notification.customdata = this.textUtils.parseJSON(notification.customdata, {}); + } + + // Try to set courseid the notification belongs to. + if (notification.customdata && notification.customdata.courseid) { + notification.courseid = notification.customdata.courseid; + } else { + const cid = notification.fullmessagehtml.match(/course\/view\.php\?id=([^"]*)/); + if (cid && cid[1]) { + notification.courseid = cid[1]; + } + } + if (notification.useridfrom > 0) { // Try to get the profile picture of the user. return this.userProvider.getProfile(notification.useridfrom, notification.courseid, true).then((user) => { @@ -73,13 +91,6 @@ export class AddonNotificationsProvider { }); } - notification.moodlecomponent = notification.component; - notification.notification = 1; - notification.notif = 1; - if (typeof read != 'undefined') { - notification.read = read; - } - return Promise.resolve(notification); }); diff --git a/src/core/contentlinks/providers/delegate.ts b/src/core/contentlinks/providers/delegate.ts index 21b1da364..b753ac02e 100644 --- a/src/core/contentlinks/providers/delegate.ts +++ b/src/core/contentlinks/providers/delegate.ts @@ -56,9 +56,10 @@ export interface CoreContentLinksHandler { * @param {string} url The URL to treat. * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @param {any} [data] Extra data to handle the URL. * @return {CoreContentLinksAction[]|Promise} List of (or promise resolved with list of) actions. */ - getActions(siteIds: string[], url: string, params: any, courseId?: number): + getActions(siteIds: string[], url: string, params: any, courseId?: number, data?: any): CoreContentLinksAction[] | Promise; /** @@ -157,9 +158,10 @@ export class CoreContentLinksDelegate { * @param {string} url URL to handle. * @param {number} [courseId] Course ID related to the URL. Optional but recommended. * @param {string} [username] Username to use to filter sites. + * @param {any} [data] Extra data to handle the URL. * @return {Promise} Promise resolved with the actions. */ - getActionsFor(url: string, courseId?: number, username?: string): Promise { + getActionsFor(url: string, courseId?: number, username?: string, data?: any): Promise { if (!url) { return Promise.resolve([]); } @@ -187,7 +189,7 @@ export class CoreContentLinksDelegate { return; } - return Promise.resolve(handler.getActions(siteIds, url, params, courseId)).then((actions) => { + return Promise.resolve(handler.getActions(siteIds, url, params, courseId, data)).then((actions) => { if (actions && actions.length) { // Set default values if any value isn't supplied. actions.forEach((action) => { diff --git a/src/core/contentlinks/providers/helper.ts b/src/core/contentlinks/providers/helper.ts index e36e5a20b..6b0dfa3ab 100644 --- a/src/core/contentlinks/providers/helper.ts +++ b/src/core/contentlinks/providers/helper.ts @@ -23,6 +23,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUrlUtilsProvider } from '@providers/utils/url'; +import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreLoginHelperProvider } from '@core/login/providers/helper'; import { CoreContentLinksDelegate, CoreContentLinksAction } from './delegate'; import { CoreConstants } from '@core/constants'; @@ -40,7 +41,7 @@ export class CoreContentLinksHelperProvider { private contentLinksDelegate: CoreContentLinksDelegate, private appProvider: CoreAppProvider, private domUtils: CoreDomUtilsProvider, private urlUtils: CoreUrlUtilsProvider, private translate: TranslateService, private initDelegate: CoreInitDelegate, eventsProvider: CoreEventsProvider, private textUtils: CoreTextUtilsProvider, - private sitePluginsProvider: CoreSitePluginsProvider, private zone: NgZone) { + private sitePluginsProvider: CoreSitePluginsProvider, private zone: NgZone, private utils: CoreUtilsProvider) { this.logger = logger.getInstance('CoreContentLinksHelperProvider'); // Listen for app launched URLs. If we receive one, check if it's a content link. @@ -88,18 +89,23 @@ export class CoreContentLinksHelperProvider { * @param {string} pageName Name of the page to go. * @param {any} [pageParams] Params to send to the page. * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. */ - goInSite(navCtrl: NavController, pageName: string, pageParams: any, siteId?: string): void { + goInSite(navCtrl: NavController, pageName: string, pageParams: any, siteId?: string): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); + const deferred = this.utils.promiseDefer(); + // Execute the code in the Angular zone, so change detection doesn't stop working. this.zone.run(() => { if (navCtrl && siteId == this.sitesProvider.getCurrentSiteId()) { - navCtrl.push(pageName, pageParams); + navCtrl.push(pageName, pageParams).then(deferred.resolve, deferred.reject); } else { - this.loginHelper.redirect(pageName, pageParams, siteId); + this.loginHelper.redirect(pageName, pageParams, siteId).then(deferred.resolve, deferred.reject); } }); + + return deferred.promise; } /** diff --git a/src/core/grades/providers/helper.ts b/src/core/grades/providers/helper.ts index 8f206340d..6403ddc36 100644 --- a/src/core/grades/providers/helper.ts +++ b/src/core/grades/providers/helper.ts @@ -13,6 +13,7 @@ // limitations under the License. import { Injectable } from '@angular/core'; +import { NavController } from 'ionic-angular'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; @@ -22,6 +23,9 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUrlUtilsProvider } from '@providers/utils/url'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; /** * Service that provides some features regarding grades information. @@ -33,7 +37,9 @@ export class CoreGradesHelperProvider { constructor(logger: CoreLoggerProvider, private coursesProvider: CoreCoursesProvider, private gradesProvider: CoreGradesProvider, private sitesProvider: CoreSitesProvider, private textUtils: CoreTextUtilsProvider, private courseProvider: CoreCourseProvider, - private domUtils: CoreDomUtilsProvider, private urlUtils: CoreUrlUtilsProvider, private utils: CoreUtilsProvider) { + private domUtils: CoreDomUtilsProvider, private urlUtils: CoreUrlUtilsProvider, private utils: CoreUtilsProvider, + private linkHelper: CoreContentLinksHelperProvider, private loginHelper: CoreLoginHelperProvider, + private courseHelper: CoreCourseHelperProvider) { this.logger = logger.getInstance('CoreGradesHelperProvider'); } @@ -381,6 +387,95 @@ export class CoreGradesHelperProvider { return []; } + /** + * Go to view grades. + * + * @param {number} courseId Course ID t oview. + * @param {number} [userId] User to view. If not defined, current user. + * @param {number} [moduleId] Module to view. If not defined, view all course grades. + * @param {NavController} [navCtrl] NavController to use. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + goToGrades(courseId: number, userId?: number, moduleId?: number, navCtrl?: NavController, siteId?: string): Promise { + + const modal = this.domUtils.showModalLoading(); + let currentUserId; + + return this.sitesProvider.getSite(siteId).then((site) => { + siteId = site.id; + currentUserId = site.getUserId(); + + if (moduleId) { + // Try to open the module grade directly. Check if it's possible. + return this.gradesProvider.isGradeItemsAvalaible(siteId).then((getGrades) => { + if (!getGrades) { + return Promise.reject(null); + } + }); + } else { + return Promise.reject(null); + } + + }).then(() => { + + // Can get grades. Do it. + return this.gradesProvider.getGradeItems(courseId, userId, undefined, siteId).then((items) => { + // Find the item of the module. + const item = items.find((item) => { + return moduleId == item.cmid; + }); + + if (item) { + // Open the item directly. + const pageParams: any = { + courseId: courseId, + userId: userId, + gradeId: item.id + }; + + return this.linkHelper.goInSite(navCtrl, 'CoreGradesGradePage', pageParams, siteId).catch(() => { + // Ignore errors. + }); + } + + return Promise.reject(null); + }); + + }).catch(() => { + + // Cannot get grade items or there's no need to. + if (userId && userId != currentUserId) { + // View another user grades. Open the grades page directly. + const pageParams = { + course: {id: courseId}, + userId: userId + }; + + return this.linkHelper.goInSite(navCtrl, 'CoreGradesCoursePage', pageParams, siteId).catch(() => { + // Ignore errors. + }); + } + + // View own grades. Open the course with the grades tab selected. + return this.courseHelper.getCourse(courseId, siteId).then((result) => { + const pageParams: any = { + course: result.course, + selectedTab: 'CoreGrades' + }; + + return this.loginHelper.redirect('CoreCourseSectionPage', pageParams, siteId).catch(() => { + // Ignore errors. + }); + }); + }).catch(() => { + // Cannot get course for some reason, just open the grades page. + return this.linkHelper.goInSite(navCtrl, 'CoreGradesCoursePage', {course: {id: courseId}}, siteId); + }).finally(() => { + modal.dismiss(); + }); + } + /** * Invalidate the grade items for a certain module. * diff --git a/src/core/grades/providers/user-link-handler.ts b/src/core/grades/providers/user-link-handler.ts index 62ff332d6..738c1c0db 100644 --- a/src/core/grades/providers/user-link-handler.ts +++ b/src/core/grades/providers/user-link-handler.ts @@ -15,11 +15,8 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; -import { CoreCourseHelperProvider } from '@core/course/providers/helper'; -import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; -import { CoreLoginHelperProvider } from '@core/login/providers/helper'; -import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreGradesProvider } from './grades'; +import { CoreGradesHelperProvider } from './helper'; /** * Handler to treat links to user grades. @@ -29,9 +26,7 @@ export class CoreGradesUserLinkHandler extends CoreContentLinksHandlerBase { name = 'CoreGradesUserLinkHandler'; pattern = /\/grade\/report\/user\/index.php/; - constructor(private linkHelper: CoreContentLinksHelperProvider, private gradesProvider: CoreGradesProvider, - private domUtils: CoreDomUtilsProvider, private courseHelper: CoreCourseHelperProvider, - private loginHelper: CoreLoginHelperProvider) { + constructor(private gradesProvider: CoreGradesProvider, private gradesHelper: CoreGradesHelperProvider) { super(); } @@ -42,43 +37,20 @@ export class CoreGradesUserLinkHandler extends CoreContentLinksHandlerBase { * @param {string} url The URL to treat. * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @param {any} [data] Extra data to handle the URL. * @return {CoreContentLinksAction[]|Promise} List of (or promise resolved with list of) actions. */ - getActions(siteIds: string[], url: string, params: any, courseId?: number): + getActions(siteIds: string[], url: string, params: any, courseId?: number, data?: any): CoreContentLinksAction[] | Promise { courseId = courseId || params.id; + data = data || {}; return [{ action: (siteId, navCtrl?): void => { - const userId = params.userid ? parseInt(params.userid, 10) : false; + const userId = params.userid && parseInt(params.userid, 10), + moduleId = data.cmid && parseInt(data.cmid, 10); - if (userId) { - // Open the grades page directly. - const pageParams = { - course: {id: courseId}, - userId: userId, - }; - - this.linkHelper.goInSite(navCtrl, 'CoreGradesCoursePage', pageParams, siteId); - } else { - // No userid, open the course with the grades tab selected. - const modal = this.domUtils.showModalLoading(); - - this.courseHelper.getCourse(courseId, siteId).then((result) => { - const pageParams: any = { - course: result.course, - selectedTab: 'CoreGrades' - }; - - // Use redirect to prevent loops in the navigation. - return this.loginHelper.redirect('CoreCourseSectionPage', pageParams, siteId); - }).catch(() => { - // Cannot get course for some reason, just open the grades page. - return this.linkHelper.goInSite(navCtrl, 'CoreGradesCoursePage', {course: {id: courseId}}, siteId); - }).finally(() => { - modal.dismiss(); - }); - } + this.gradesHelper.goToGrades(courseId, userId, moduleId, navCtrl, siteId); } }]; } From 9134933217c9f4f75d2471e9f8fab7b14af18c2e Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Mon, 18 Mar 2019 12:41:34 +0100 Subject: [PATCH 036/263] MOBILE-2838 ws: Don't store POST request promises Since MOBILE-2900 POST request promises are not reused in CoreWSProvider. --- src/providers/ws.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/providers/ws.ts b/src/providers/ws.ts index bc2cd80fc..7145ae55f 100644 --- a/src/providers/ws.ts +++ b/src/providers/ws.ts @@ -525,9 +525,9 @@ export class CoreWSProvider { } // Perform the post request. - let promise = this.http.post(siteUrl, ajaxData, options).timeout(CoreConstants.WS_TIMEOUT).toPromise(); + const promise = this.http.post(siteUrl, ajaxData, options).timeout(CoreConstants.WS_TIMEOUT).toPromise(); - promise = promise.then((data: any) => { + return promise.then((data: any) => { // Some moodle web services return null. // If the responseExpected value is set to false, we create a blank object if the response is null. if (!data && !preSets.responseExpected) { @@ -608,10 +608,6 @@ export class CoreWSProvider { return Promise.reject(this.createFakeWSError('core.serverconnection', true)); }); - - promise = this.setPromiseHttp(promise, 'post', preSets.siteUrl, ajaxData); - - return promise; } /** From 732e3fccb67f768db77dc586ed5a5f7fafbbe611 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Mon, 18 Mar 2019 14:23:21 +0100 Subject: [PATCH 037/263] MOBILE-2838 site: Index functions by name to speed up wsAvailable --- src/classes/site.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index b9068bd13..e103ab63a 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -217,6 +217,7 @@ export class CoreSite { this.wsProvider = injector.get(CoreWSProvider); this.logger = logger.getInstance('CoreWSProvider'); + this.setInfo(infos); this.calculateOfflineDisabled(); if (this.id) { @@ -349,6 +350,14 @@ export class CoreSite { */ setInfo(infos: any): void { this.infos = infos; + + // Index function by name to speed up wsAvailable method. + if (infos && infos.functions) { + infos.functionsByName = {}; + infos.functions.forEach((func) => { + infos.functionsByName[func.name] = func; + }); + } } /** @@ -711,11 +720,8 @@ export class CoreSite { return false; } - for (let i = 0; i < this.infos.functions.length; i++) { - const func = this.infos.functions[i]; - if (func.name == method) { - return true; - } + if (this.infos.functionsByName[method]) { + return true; } // Let's try again with the compatibility prefix. From 76bbc30ed9232aff11003ffff60378370cc0eb2e Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Mon, 18 Mar 2019 14:29:23 +0100 Subject: [PATCH 038/263] MOBULE-2838 ws: convertValuesToString improvements - Skip null and undefined values. They were ignored when sent as POST parameters but are not accepted when sent as JSON. - Return null instead if some string become empty after stripping Unicode. Previously we were throwing an exception. - Convert boolean to "0" and "1". Previously we wre using "true" and "false", which are only accepted as POST parameters. --- src/classes/site.ts | 7 ++-- src/core/user/providers/user.ts | 4 +- src/providers/ws.ts | 68 ++++++++++++++++++++++----------- 3 files changed, 50 insertions(+), 29 deletions(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index e103ab63a..a78ff9911 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -573,10 +573,9 @@ export class CoreSite { const originalData = data; - // Convert the values to string before starting the cache process. - try { - data = this.wsProvider.convertValuesToString(data, wsPreSets.cleanUnicode); - } catch (e) { + // Convert arguments to strings before starting the cache process. + data = this.wsProvider.convertValuesToString(data, wsPreSets.cleanUnicode); + if (data == null) { // Empty cleaned text found. return Promise.reject(this.utils.createFakeWSError('core.unicodenotsupportedcleanerror', true)); } diff --git a/src/core/user/providers/user.ts b/src/core/user/providers/user.ts index 928fb7bff..dd87758d8 100644 --- a/src/core/user/providers/user.ts +++ b/src/core/user/providers/user.ts @@ -250,8 +250,8 @@ export class CoreUserProvider { this.logger.debug(`Get user with ID '${userId}'`); wsName = 'core_user_get_users_by_field'; data = { - 'field': 'id', - 'values[0]': userId + field: 'id', + values: [userId] }; } diff --git a/src/providers/ws.ts b/src/providers/ws.ts index 7145ae55f..10eb3821e 100644 --- a/src/providers/ws.ts +++ b/src/providers/ws.ts @@ -284,32 +284,55 @@ export class CoreWSProvider { /** * Converts an objects values to strings where appropriate. - * Arrays (associative or otherwise) will be maintained. + * Arrays (associative or otherwise) will be maintained, null values will be removed. * * @param {object} data The data that needs all the non-object values set to strings. * @param {boolean} [stripUnicode] If Unicode long chars need to be stripped. - * @return {object} The cleaned object, with multilevel array and objects preserved. + * @return {object} The cleaned object or null if some strings becomes empty after stripping Unicode. */ - convertValuesToString(data: object, stripUnicode?: boolean): object { - let result; - if (!Array.isArray(data) && typeof data == 'object') { - result = {}; - } else { - result = []; - } + convertValuesToString(data: any, stripUnicode?: boolean): any { + const result: any = Array.isArray(data) ? [] : {}; - for (const el in data) { - if (typeof data[el] == 'object') { - result[el] = this.convertValuesToString(data[el], stripUnicode); - } else { - if (typeof data[el] == 'string') { - result[el] = stripUnicode ? this.textUtils.stripUnicode(data[el]) : data[el]; - if (stripUnicode && data[el] != result[el] && result[el].trim().length == 0) { - throw new Error(); - } - } else { - result[el] = data[el] + ''; + for (const key in data) { + let value = data[key]; + + if (value == null) { + // Skip null or undefined value. + continue; + } else if (typeof value == 'object') { + // Object or array. + value = this.convertValuesToString(value, stripUnicode); + if (value == null) { + return null; } + } else if (typeof value == 'string') { + if (stripUnicode) { + const stripped = this.textUtils.stripUnicode(value); + if (stripped != value && stripped.trim().length == 0) { + return null; + } + value = stripped; + } + } else if (typeof value == 'boolean') { + /* Moodle does not allow "true" or "false" in WS parameters, only in POST parameters. + We've been using "true" and "false" for WS settings "filter" and "fileurl", + we keep it this way to avoid changing cache keys. */ + if (key == 'moodlewssettingfilter' || key == 'moodlewssettingfileurl') { + value = value ? 'true' : 'false'; + } else { + value = value ? '1' : '0'; + } + } else if (typeof value == 'number') { + value = String(value); + } else { + // Unknown type. + continue; + } + + if (Array.isArray(result)) { + result.push(value); + } else { + result[key] = value; } } @@ -688,9 +711,8 @@ export class CoreWSProvider { preSets.responseExpected = true; } - try { - data = this.convertValuesToString(data, preSets.cleanUnicode); - } catch (e) { + data = this.convertValuesToString(data || {}, preSets.cleanUnicode); + if (data == null) { // Empty cleaned text found. errorResponse.message = this.translate.instant('core.unicodenotsupportedcleanerror'); From 21971a9ab4680e483af87facbf8f50d235d94382 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Mon, 18 Mar 2019 14:38:58 +0100 Subject: [PATCH 039/263] MBOILE-2838 site: Batch WS calls to reduce the number of HTTP requests --- src/classes/site.ts | 175 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 173 insertions(+), 2 deletions(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index a78ff9911..00bb1abe2 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -26,7 +26,7 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUrlUtilsProvider } from '@providers/utils/url'; -import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CoreUtilsProvider, PromiseDefer } from '@providers/utils/utils'; import { CoreConstants } from '@core/constants'; import { CoreConfigConstants } from '../configconstants'; import { Md5 } from 'ts-md5/dist/md5'; @@ -113,6 +113,17 @@ export interface CoreSiteWSPreSets { * @type {string} */ typeExpected?: string; + + /** + * Wehther a pending request in the queue matching the same function and arguments can be reused instead of adding + * a new request to the queue. Defaults to true for read requests. + */ + reusePending?: boolean; + + /** + * Whether the request will be be sent immediately as a single request. Defaults to false. + */ + skipQueue?: boolean; } /** @@ -144,6 +155,18 @@ export interface LocalMobileResponse { coreSupported?: boolean; } +/** + * Info of a request waiting in the queue. + */ +interface RequestQueueItem { + cacheId: string; + method: string; + data: any; + preSets: CoreSiteWSPreSets; + wsPreSets: CoreWSPreSets; + deferred: PromiseDefer; +} + /** * Class that represents a site (combination of site + user). * It will have all the site data and provide utility functions regarding a site. @@ -151,6 +174,9 @@ export interface LocalMobileResponse { * the tables are created in all the sites, not just the current one. */ export class CoreSite { + static REQUEST_QUEUE_DELAY = 50; // Maximum number of miliseconds to wait before processing the queue. + static REQUEST_QUEUE_LIMIT = 10; // Maximum number of requests allowed in the queue. + // List of injected services. This class isn't injectable, so it cannot use DI. protected appProvider: CoreAppProvider; protected dbProvider: CoreDbProvider; @@ -186,6 +212,8 @@ export class CoreSite { protected lastAutoLogin = 0; protected offlineDisabled = false; protected ongoingRequests: { [cacheId: string]: Promise } = {}; + protected requestQueue: RequestQueueItem[] = []; + protected requestQueueTimeout = null; /** * Create a site. @@ -476,6 +504,9 @@ export class CoreSite { if (typeof preSets.saveToCache == 'undefined') { preSets.saveToCache = true; } + if (typeof preSets.reusePending == 'undefined') { + preSets.reusePending = true; + } return this.request(method, data, preSets); } @@ -592,7 +623,7 @@ export class CoreSite { const promise = this.getFromCache(method, data, preSets, false, originalData).catch(() => { // Do not pass those options to the core WS factory. - return this.wsProvider.call(method, data, wsPreSets).then((response) => { + return this.callOrEnqueueRequest(method, data, preSets, wsPreSets).then((response) => { if (preSets.saveToCache) { this.saveToCache(method, data, response, preSets); } @@ -707,6 +738,146 @@ export class CoreSite { }); } + /** + * Adds a request to the queue or calls it immediately when not using the queue. + * + * @param {string} method The WebService method to be called. + * @param {any} data Arguments to pass to the method. + * @param {CoreSiteWSPreSets} preSets Extra options related to the site. + * @param {CoreWSPreSets} wsPreSets Extra options related to the WS call. + * @returns {Promise} Promise resolved with the response when the WS is called. + */ + protected callOrEnqueueRequest(method: string, data: any, preSets: CoreSiteWSPreSets, wsPreSets: CoreWSPreSets): Promise { + if (preSets.skipQueue || !this.wsAvailable('tool_mobile_call_external_functions')) { + return this.wsProvider.call(method, data, wsPreSets); + } + + const cacheId = this.getCacheId(method, data); + + // Check if there is an identical request waiting in the queue (read requests only by default). + if (preSets.reusePending) { + const request = this.requestQueue.find((request) => request.cacheId == cacheId); + if (request) { + return request.deferred.promise; + } + } + + const request: RequestQueueItem = { + cacheId, + method, + data, + preSets, + wsPreSets, + deferred: {} + }; + + request.deferred.promise = new Promise((resolve, reject): void => { + request.deferred.resolve = resolve; + request.deferred.reject = reject; + }); + + this.requestQueue.push(request); + + if (this.requestQueue.length >= CoreSite.REQUEST_QUEUE_LIMIT) { + this.processRequestQueue(); + } else if (!this.requestQueueTimeout) { + this.requestQueueTimeout = setTimeout(this.processRequestQueue.bind(this), CoreSite.REQUEST_QUEUE_DELAY); + } + + return request.deferred.promise; + } + + /** + * Call the enqueued web service requests. + */ + protected processRequestQueue(): void { + this.logger.debug(`Processing request queue (${this.requestQueue.length} requests)`); + + // Clear timeout if set. + if (this.requestQueueTimeout) { + clearTimeout(this.requestQueueTimeout); + this.requestQueueTimeout = null; + } + + // Extract all requests from the queue. + const requests = this.requestQueue; + this.requestQueue = []; + + if (requests.length == 1) { + // Only one request, do a regular web service call. + this.wsProvider.call(requests[0].method, requests[0].data, requests[0].wsPreSets).then((data) => { + requests[0].deferred.resolve(data); + }).catch((error) => { + requests[0].deferred.reject(error); + }); + + return; + } + + const data = { + requests: requests.map((request) => { + const args = {}; + const settings = {}; + + // Separate WS settings from function arguments. + Object.keys(request.data).forEach((key) => { + let value = request.data[key]; + const match = /^moodlews(setting.*)$/.exec(key); + if (match) { + if (match[1] == 'settingfilter' || match[1] == 'settingfileurl') { + // Undo special treatment of these settings in CoreWSProvider.convertValuesToString. + value = (value == 'true' ? '1' : '0'); + } + settings[match[1]] = value; + } else { + args[key] = value; + } + }); + + return { + function: request.method, + arguments: JSON.stringify(args), + ...settings + }; + }) + }; + + const wsPresets: CoreWSPreSets = { + siteUrl: this.siteUrl, + wsToken: this.token, + }; + + this.wsProvider.call('tool_mobile_call_external_functions', data, wsPresets).then((data) => { + if (!data || !data.responses) { + return Promise.reject(null); + } + + requests.forEach((request, i) => { + const response = data.responses[i]; + + if (!response) { + // Request not executed, enqueue again. + this.callOrEnqueueRequest(request.method, request.data, request.preSets, request.wsPreSets); + } else if (response.error) { + request.deferred.reject(this.textUtils.parseJSON(response.exception)); + } else { + let responseData = this.textUtils.parseJSON(response.data); + // Match the behaviour of CoreWSProvider.call when no response is expected. + if (!responseData && (typeof wsPresets.responseExpected == 'undefined' || wsPresets.responseExpected)) { + responseData = {}; + } + request.deferred.resolve(responseData); + } + }); + + }).catch((error) => { + // Error not specific to a single request, reject all promises. + requests.forEach((request) => { + request.deferred.reject(error); + }); + }); + } + /** * Check if a WS is available in this site. * From c3e016403815c810bf43ef6e982d1c92e7d5c911 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 4 Apr 2019 15:06:29 +0200 Subject: [PATCH 040/263] MOBILE-2838 site: Use "tool_mobile_call_external_functions" for all calls --- src/classes/site.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index 00bb1abe2..63b779716 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -176,6 +176,8 @@ interface RequestQueueItem { export class CoreSite { static REQUEST_QUEUE_DELAY = 50; // Maximum number of miliseconds to wait before processing the queue. static REQUEST_QUEUE_LIMIT = 10; // Maximum number of requests allowed in the queue. + // @todo Set REQUEST_QUEUE_FORCE_WS to false before the release. + static REQUEST_QUEUE_FORCE_WS = true; // Use "tool_mobile_call_external_functions" even for calling a single function. // List of injected services. This class isn't injectable, so it cannot use DI. protected appProvider: CoreAppProvider; @@ -803,7 +805,7 @@ export class CoreSite { const requests = this.requestQueue; this.requestQueue = []; - if (requests.length == 1) { + if (requests.length == 1 && !CoreSite.REQUEST_QUEUE_FORCE_WS) { // Only one request, do a regular web service call. this.wsProvider.call(requests[0].method, requests[0].data, requests[0].wsPreSets).then((data) => { requests[0].deferred.resolve(data); From c682ff867391f1ef61d3063203ed17ff7f9c85c9 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 4 Apr 2019 15:13:02 +0200 Subject: [PATCH 041/263] MOBILE-2838 site: Skip request queue for "core_webservice_get_site_info" calls --- src/classes/site.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index 63b779716..8f01c4ad6 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -481,7 +481,8 @@ export class CoreSite { // The get_site_info WS call won't be cached. const preSets = { getFromCache: false, - saveToCache: false + saveToCache: false, + skipQueue: true }; // Reset clean Unicode to check if it's supported again. From 88137554d858cb4939a509b60983422fb8f4e648 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 2 Apr 2019 16:02:27 +0200 Subject: [PATCH 042/263] MOBILE-2948 assign: Fix prefetch for teachers --- .../pages/submission-list/submission-list.ts | 36 +++--- src/addon/mod/assign/providers/assign.ts | 118 ------------------ src/addon/mod/assign/providers/helper.ts | 97 +++++++++++++- .../mod/assign/providers/prefetch-handler.ts | 70 ++++++----- 4 files changed, 148 insertions(+), 173 deletions(-) diff --git a/src/addon/mod/assign/pages/submission-list/submission-list.ts b/src/addon/mod/assign/pages/submission-list/submission-list.ts index 8ce653613..abf2cd778 100644 --- a/src/addon/mod/assign/pages/submission-list/submission-list.ts +++ b/src/addon/mod/assign/pages/submission-list/submission-list.ts @@ -55,7 +55,7 @@ export class AddonModAssignSubmissionListPage implements OnInit, OnDestroy { protected gradedObserver; // Observer to refresh data when a grade changes. protected submissionsData: any; - constructor(navParams: NavParams, sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider, + constructor(navParams: NavParams, protected sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider, protected domUtils: CoreDomUtilsProvider, protected translate: TranslateService, protected assignProvider: AddonModAssignProvider, protected assignOfflineProvider: AddonModAssignOfflineProvider, protected assignHelper: AddonModAssignHelperProvider, protected groupsProvider: CoreGroupsProvider) { @@ -142,32 +142,26 @@ export class AddonModAssignSubmissionListPage implements OnInit, OnDestroy { * @return {Promise} Resolved when done. */ setGroup(groupId: number): Promise { - let participants, - grades; - this.groupId = groupId; this.haveAllParticipants = true; - // Get the participants. - return this.assignHelper.getParticipants(this.assign, this.groupId).then((parts) => { - this.haveAllParticipants = true; - participants = parts; - }).catch(() => { + if (!this.sitesProvider.getCurrentSite().wsAvailable('mod_assign_list_participants')) { + // Submissions are not displayed in Moodle 3.1 without the local plugin, see MOBILE-2968. this.haveAllParticipants = false; - }).then(() => { - if (!this.assign.markingworkflow) { - // Get assignment grades only if workflow is not enabled to check grading date. - return this.assignProvider.getAssignmentGrades(this.assign.id).then((assignmentGrades) => { - grades = assignmentGrades; - }); - } - }).then(() => { - // We want to show the user data on each submission. - return this.assignProvider.getSubmissionsUserData(this.submissionsData.submissions, this.courseId, this.assign.id, - this.assign.blindmarking && !this.assign.revealidentities, participants); - }).then((submissions) => { + this.submissions = []; + return Promise.resolve(); + } + + // Fetch submissions and grades. + const promises = [ + this.assignHelper.getSubmissionsUserData(this.assign, this.submissionsData.submissions, this.groupId), + // Get assignment grades only if workflow is not enabled to check grading date. + !this.assign.markingworkflow ? this.assignProvider.getAssignmentGrades(this.assign.id) : Promise.resolve(null), + ]; + + return Promise.all(promises).then(([submissions, grades]) => { // Filter the submissions to get only the ones with the right status and add some extra data. const getNeedGrading = this.selectedStatus == AddonModAssignProvider.NEED_GRADING, searchStatus = getNeedGrading ? AddonModAssignProvider.SUBMISSION_STATUS_SUBMITTED : this.selectedStatus, diff --git a/src/addon/mod/assign/providers/assign.ts b/src/addon/mod/assign/providers/assign.ts index 93e8204f0..461548f7e 100644 --- a/src/addon/mod/assign/providers/assign.ts +++ b/src/addon/mod/assign/providers/assign.ts @@ -315,27 +315,6 @@ export class AddonModAssignProvider { return this.ROOT_CACHE_KEY + 'assigngrades:' + assignId; } - /** - * Find participant on a list. - * - * @param {any[]} participants List of participants. - * @param {number} id ID of the participant to get. - * @return {any} Participant, undefined if not found. - */ - protected getParticipantFromUserId(participants: any[], id: number): any { - if (participants) { - for (const i in participants) { - if (participants[i].id == id) { - // Remove the participant from the list and return it. - const participant = participants[i]; - delete participants[i]; - - return participant; - } - } - } - } - /** * Returns the color name for a given grading status name. * @@ -616,103 +595,6 @@ export class AddonModAssignProvider { } } - /** - * Get user data for submissions since they only have userid. - * - * @param {any[]} submissions Submissions to get the data for. - * @param {number} courseId ID of the course the submissions belong to. - * @param {number} assignId ID of the assignment the submissions belong to. - * @param {boolean} [blind] Whether the user data need to be blinded. - * @param {any[]} [participants] List of participants in the assignment. - * @param {boolean} [ignoreCache] True if it should ignore cached data (it will always fail in offline or server down). - * @param {string} [siteId] Site id (empty for current site). - * @return {Promise} Promise always resolved. Resolve param is the formatted submissions. - */ - getSubmissionsUserData(submissions: any[], courseId: number, assignId: number, blind?: boolean, participants?: any[], - ignoreCache?: boolean, siteId?: string): Promise { - - const promises = [], - subs = [], - hasParticipants = participants && participants.length > 0; - - if (!hasParticipants) { - return Promise.resolve([]); - } - - submissions.forEach((submission) => { - submission.submitid = submission.userid > 0 ? submission.userid : submission.blindid; - if (submission.submitid <= 0) { - return; - } - - const participant = this.getParticipantFromUserId(participants, submission.submitid); - if (!participant) { - // Avoid permission denied error. Participant not found on list. - return; - } - - if (!blind) { - submission.userfullname = participant.fullname; - submission.userprofileimageurl = participant.profileimageurl; - } - - submission.manyGroups = !!participant.groups && participant.groups.length > 1; - if (participant.groupname) { - submission.groupid = participant.groupid; - submission.groupname = participant.groupname; - } - - let promise; - if (submission.userid > 0 && blind) { - // Blind but not blinded! (Moodle < 3.1.1, 3.2). - delete submission.userid; - - promise = this.getAssignmentUserMappings(assignId, submission.submitid, ignoreCache, siteId).then((blindId) => { - submission.blindid = blindId; - }); - } - - promise = promise || Promise.resolve(); - - promises.push(promise.then(() => { - // Add to the list. - if (submission.userfullname || submission.blindid) { - subs.push(submission); - } - })); - }); - - return Promise.all(promises).then(() => { - if (hasParticipants) { - // Create a submission for each participant left in the list (the participants already treated were removed). - participants.forEach((participant) => { - const submission: any = { - submitid: participant.id - }; - - if (!blind) { - submission.userid = participant.id; - submission.userfullname = participant.fullname; - submission.userprofileimageurl = participant.profileimageurl; - } else { - submission.blindid = participant.id; - } - - if (participant.groupname) { - submission.groupid = participant.groupid; - submission.groupname = participant.groupname; - } - submission.status = participant.submitted ? AddonModAssignProvider.SUBMISSION_STATUS_SUBMITTED : - AddonModAssignProvider.SUBMISSION_STATUS_NEW; - - subs.push(submission); - }); - } - - return subs; - }); - } - /** * Given a list of plugins, returns the plugin names that aren't supported for editing. * diff --git a/src/addon/mod/assign/providers/helper.ts b/src/addon/mod/assign/providers/helper.ts index 6b64d5c1b..7942f91bf 100644 --- a/src/addon/mod/assign/providers/helper.ts +++ b/src/addon/mod/assign/providers/helper.ts @@ -153,7 +153,7 @@ export class AddonModAssignHelperProvider { * @param {number} [groupId] Group Id. * @param {boolean} [ignoreCache] True if it should ignore cached data (it will always fail in offline or server down). * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved with the list of participants and summary of submissions. */ getParticipants(assign: any, groupId?: number, ignoreCache?: boolean, siteId?: string): Promise { groupId = groupId || 0; @@ -288,6 +288,101 @@ export class AddonModAssignHelperProvider { }); } + /** + * Get user data for submissions since they only have userid. + * + * @param {any} assign Assignment object. + * @param {any[]} submissions Submissions to get the data for. + * @param {number} [groupId] Group Id. + * @param {boolean} [ignoreCache] True if it should ignore cached data (it will always fail in offline or server down). + * @param {string} [siteId] Site id (empty for current site). + * @return {Promise} Promise always resolved. Resolve param is the formatted submissions. + */ + getSubmissionsUserData(assign: any, submissions: any[], groupId?: number, ignoreCache?: boolean, siteId?: string): + Promise { + return this.getParticipants(assign, groupId).then((participants) => { + const blind = assign.blindmarking && !assign.revealidentities; + const promises = []; + const result = []; + + participants = this.utils.arrayToObject(participants, 'id'); + + submissions.forEach((submission) => { + submission.submitid = submission.userid > 0 ? submission.userid : submission.blindid; + if (submission.submitid <= 0) { + return; + } + + const participant = participants[submission.submitid]; + if (participant) { + delete participants[submission.submitid]; + } else { + // Avoid permission denied error. Participant not found on list. + return; + } + + if (!blind) { + submission.userfullname = participant.fullname; + submission.userprofileimageurl = participant.profileimageurl; + } + + submission.manyGroups = !!participant.groups && participant.groups.length > 1; + if (participant.groupname) { + submission.groupid = participant.groupid; + submission.groupname = participant.groupname; + } + + let promise; + if (submission.userid > 0 && blind) { + // Blind but not blinded! (Moodle < 3.1.1, 3.2). + delete submission.userid; + + promise = this.assignProvider.getAssignmentUserMappings(assign.id, submission.submitid, ignoreCache, siteId). + then((blindId) => { + submission.blindid = blindId; + }); + } + + promise = promise || Promise.resolve(); + + promises.push(promise.then(() => { + // Add to the list. + if (submission.userfullname || submission.blindid) { + result.push(submission); + } + })); + }); + + return Promise.all(promises).then(() => { + // Create a submission for each participant left in the list (the participants already treated were removed). + this.utils.objectToArray(participants).forEach((participant) => { + const submission: any = { + submitid: participant.id + }; + + if (!blind) { + submission.userid = participant.id; + submission.userfullname = participant.fullname; + submission.userprofileimageurl = participant.profileimageurl; + } else { + submission.blindid = participant.id; + } + + if (participant.groupname) { + submission.groupid = participant.groupid; + submission.groupname = participant.groupname; + } + submission.status = participant.submitted ? AddonModAssignProvider.SUBMISSION_STATUS_SUBMITTED : + AddonModAssignProvider.SUBMISSION_STATUS_NEW; + + result.push(submission); + }); + + return result; + }); + }); + } + /** * Check if the feedback data has changed for a certain submission and assign. * diff --git a/src/addon/mod/assign/providers/prefetch-handler.ts b/src/addon/mod/assign/providers/prefetch-handler.ts index cae9b6fec..7837ee180 100644 --- a/src/addon/mod/assign/providers/prefetch-handler.ts +++ b/src/addon/mod/assign/providers/prefetch-handler.ts @@ -103,8 +103,8 @@ export class AddonModAssignPrefetchHandler extends CoreCourseActivityPrefetchHan if (data.canviewsubmissions) { // Teacher, get all submissions. - return this.assignProvider.getSubmissionsUserData(data.submissions, courseId, assign.id, blindMarking, - undefined, false, siteId).then((submissions) => { + return this.assignHelper.getSubmissionsUserData(assign, data.submissions, 0, false, siteId) + .then((submissions) => { const promises = []; @@ -289,11 +289,10 @@ export class AddonModAssignPrefetchHandler extends CoreCourseActivityPrefetchHan protected prefetchSubmissions(assign: any, courseId: number, moduleId: number, userId: number, siteId: string): Promise { // Get submissions. return this.assignProvider.getSubmissions(assign.id, true, siteId).then((data) => { - const promises = [], - blindMarking = assign.blindmarking && !assign.revealidentities; + const promises = []; if (data.canviewsubmissions) { - // Teacher. Do not send participants to getSubmissionsUserData to retrieve user profiles. + // Teacher, prefetch all submissions. promises.push(this.groupsProvider.getActivityGroupInfo(assign.cmid, false, undefined, siteId).then((groupInfo) => { const groupProms = []; if (!groupInfo.groups || groupInfo.groups.length == 0) { @@ -301,8 +300,8 @@ export class AddonModAssignPrefetchHandler extends CoreCourseActivityPrefetchHan } groupInfo.groups.forEach((group) => { - groupProms.push(this.assignProvider.getSubmissionsUserData(data.submissions, courseId, assign.id, - blindMarking, undefined, true, siteId).then((submissions) => { + groupProms.push(this.assignHelper.getSubmissionsUserData(assign, data.submissions, group.id, true, siteId) + .then((submissions) => { const subPromises = []; @@ -334,37 +333,41 @@ export class AddonModAssignPrefetchHandler extends CoreCourseActivityPrefetchHan } return Promise.all(subPromises); - })); + }).then(() => { + // Participiants already fetched, we don't need to ignore cache now. + return this.assignHelper.getParticipants(assign, group.id, false, siteId).then((participants) => { + const promises = []; - // Get list participants. - groupProms.push(this.assignHelper.getParticipants(assign, group.id, true, siteId).then((participants) => { - participants.forEach((participant) => { - if (participant.profileimageurl) { - this.filepoolProvider.addToQueueByUrl(siteId, participant.profileimageurl); - } + participants.forEach((participant) => { + if (participant.profileimageurl) { + promises.push(this.filepoolProvider.addToQueueByUrl(siteId, participant.profileimageurl)); + } + }); + + return Promise.all(promises); + }).catch(() => { + // Fail silently (Moodle < 3.2). }); - }).catch(() => { - // Fail silently (Moodle < 3.2). })); }); return Promise.all(groupProms); })); - } else { - // Student. - promises.push( - this.assignProvider.getSubmissionStatusWithRetry(assign, userId, undefined, false, true, true, siteId) - .then((subm) => { - return this.prefetchSubmission(assign, courseId, moduleId, subm, userId, siteId); - }).catch((error) => { - // Ignore if the user can't view their own submission. - if (error.errorcode != 'nopermission') { - return Promise.reject(error); - } - }) - ); } + // Prefetch own submission, we need to do this for teachers too so the response with error is cached. + promises.push( + this.assignProvider.getSubmissionStatusWithRetry(assign, userId, undefined, false, true, true, siteId) + .then((subm) => { + return this.prefetchSubmission(assign, courseId, moduleId, subm, userId, siteId); + }).catch((error) => { + // Ignore if the user can't view their own submission. + if (error.errorcode != 'nopermission') { + return Promise.reject(error); + } + }) + ); + promises.push(this.groupsProvider.activityHasGroups(assign.cmid, siteId, true)); promises.push(this.groupsProvider.getActivityAllowedGroups(assign.cmid, undefined, siteId, true)); @@ -422,6 +425,11 @@ export class AddonModAssignPrefetchHandler extends CoreCourseActivityPrefetchHan } } + // Prefetch grade items. + if (userId) { + promises.push(this.gradesHelper.getGradeModuleItems(courseId, moduleId, userId, undefined, siteId, true)); + } + // Prefetch feedback. if (submission.feedback) { // Get profile and image of the grader. @@ -429,10 +437,6 @@ export class AddonModAssignPrefetchHandler extends CoreCourseActivityPrefetchHan userIds.push(submission.feedback.grade.grader); } - if (userId) { - promises.push(this.gradesHelper.getGradeModuleItems(courseId, moduleId, userId, undefined, siteId, true)); - } - // Prefetch feedback plugins data. if (submission.feedback.plugins) { submission.feedback.plugins.forEach((plugin) => { From 38b1308f0b44322a12fb6dbdcb51f804110921a5 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 8 Apr 2019 10:45:14 +0200 Subject: [PATCH 043/263] MOBILE-2901 file: Support offline files for Nextcloud --- src/addon/mod/resource/providers/helper.ts | 3 ++- src/addon/mod/resource/providers/prefetch-handler.ts | 7 ++++++- src/assets/lang/en.json | 1 + src/classes/site.ts | 3 ++- src/core/course/components/module/module.ts | 7 +++++-- src/core/course/providers/module-prefetch-delegate.ts | 2 ++ 6 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/addon/mod/resource/providers/helper.ts b/src/addon/mod/resource/providers/helper.ts index b6d0f3aa6..ad461c6a5 100644 --- a/src/addon/mod/resource/providers/helper.ts +++ b/src/addon/mod/resource/providers/helper.ts @@ -113,7 +113,8 @@ export class AddonModResourceHelperProvider { * @return {boolean} Whether the resource should be displayed embeded. */ isDisplayedEmbedded(module: any, display: number): boolean { - if (!module.contents.length || !this.fileProvider.isAvailable() || this.isNextcloudFile(module)) { + if (!module.contents.length || !this.fileProvider.isAvailable() || + (!this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7') && this.isNextcloudFile(module))) { return false; } diff --git a/src/addon/mod/resource/providers/prefetch-handler.ts b/src/addon/mod/resource/providers/prefetch-handler.ts index 7c05f8fbc..bd439d42d 100644 --- a/src/addon/mod/resource/providers/prefetch-handler.ts +++ b/src/addon/mod/resource/providers/prefetch-handler.ts @@ -130,7 +130,12 @@ export class AddonModResourcePrefetchHandler extends CoreCourseResourcePrefetchH * @return {Promise} Promise resolved with true if downloadable, resolved with false otherwise. */ isDownloadable(module: any, courseId: number): Promise { - // Don't allow downloading Nextcloud files for now. + if (this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7')) { + // Nextcloud files are downloadable from 3.7 onwards. + return Promise.resolve(true); + } + + // Don't allow downloading Nextcloud files in older sites. return this.loadContents(module, courseId, false).then(() => { return !this.resourceHelper.isNextcloudFile(module); }); diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 8fd9e1499..8e7ff5128 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -1342,6 +1342,7 @@ "core.favourites": "Starred", "core.filename": "Filename", "core.filenameexist": "File name already exists: {{$a}}", + "core.filenotfound": "File not found, sorry.", "core.fileuploader.addfiletext": "Add file", "core.fileuploader.audio": "Audio", "core.fileuploader.camera": "Camera", diff --git a/src/classes/site.ts b/src/classes/site.ts index b9068bd13..9d4bc1e7c 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -176,7 +176,8 @@ export class CoreSite { 3.3: 2017051503, 3.4: 2017111300, 3.5: 2018051700, - 3.6: 2018120300 + 3.6: 2018120300, + 3.7: 2019030700 // @todo: Replace it with the right 3.7 date when released }; // Rest of variables. diff --git a/src/core/course/components/module/module.ts b/src/core/course/components/module/module.ts index a22125152..ed1c7bbf4 100644 --- a/src/core/course/components/module/module.ts +++ b/src/core/course/components/module/module.ts @@ -86,12 +86,15 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { if (data.componentId === this.module.id && this.prefetchHandler && data.component === this.prefetchHandler.component) { + // Call determineModuleStatus to get the right status to display. + const status = this.prefetchDelegate.determineModuleStatus(this.module, data.status); + if (this.downloadEnabled) { // Download is enabled, show the status. - this.showStatus(data.status); + this.showStatus(status); } else if (this.module.handlerData.updateStatus) { // Download isn't enabled but the handler defines a updateStatus function, call it anyway. - this.module.handlerData.updateStatus(data.status); + this.module.handlerData.updateStatus(status); } } }, this.sitesProvider.getCurrentSiteId()); diff --git a/src/core/course/providers/module-prefetch-delegate.ts b/src/core/course/providers/module-prefetch-delegate.ts index 24ca8c933..c81e20b43 100644 --- a/src/core/course/providers/module-prefetch-delegate.ts +++ b/src/core/course/providers/module-prefetch-delegate.ts @@ -377,6 +377,8 @@ export class CoreCourseModulePrefetchDelegate extends CoreDelegate { } } else if (handler.determineStatus) { // The handler implements a determineStatus function. Apply it. + canCheck = canCheck || this.canCheckUpdates(); + return handler.determineStatus(module, status, canCheck); } } From 7276ae18168cba38bff41857e936208382a19007 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 9 Apr 2019 08:29:01 +0200 Subject: [PATCH 044/263] MOBILE-2977 config: Bump version numbers --- config.xml | 2 +- desktop/assets/windows/AppXManifest.xml | 2 +- package.json | 2 +- src/config.json | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config.xml b/config.xml index 0a1343541..7b63be85a 100644 --- a/config.xml +++ b/config.xml @@ -1,5 +1,5 @@ - + Moodle Moodle official app Moodle Mobile team diff --git a/desktop/assets/windows/AppXManifest.xml b/desktop/assets/windows/AppXManifest.xml index f674c51dc..4d53ac2d3 100644 --- a/desktop/assets/windows/AppXManifest.xml +++ b/desktop/assets/windows/AppXManifest.xml @@ -6,7 +6,7 @@ + Version="3.7.0.0" /> Moodle Desktop Moodle Pty Ltd. diff --git a/package.json b/package.json index 221a31a47..6c671a00e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "moodlemobile", - "version": "3.6.1", + "version": "3.7.0", "description": "The official app for Moodle.", "author": { "name": "Moodle Pty Ltd.", diff --git a/src/config.json b/src/config.json index 94700c03c..0c50767de 100644 --- a/src/config.json +++ b/src/config.json @@ -2,8 +2,8 @@ "app_id": "com.moodle.moodlemobile", "appname": "Moodle Mobile", "desktopappname": "Moodle Desktop", - "versioncode": 3610, - "versionname": "3.6.1", + "versioncode": 3700, + "versionname": "3.7.0-dev", "cache_expiration_time": 300000, "default_lang": "en", "languages": { From 80de9fec7f1eac83f6db4c71effe2315ff98c938 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 9 Apr 2019 08:57:29 +0200 Subject: [PATCH 045/263] MOBILE-2977 config: Unlock plugins and libraries --- config.xml | 42 ++++++------- package.json | 172 +++++++++++++++++++++++++-------------------------- 2 files changed, 107 insertions(+), 107 deletions(-) diff --git a/config.xml b/config.xml index 7b63be85a..9601f2cdf 100644 --- a/config.xml +++ b/config.xml @@ -112,33 +112,33 @@ - - + + - - - - + + + + - - + + - - - - + + + + - - - - - - - - - + + + + + + + + + diff --git a/package.json b/package.json index 6c671a00e..ee9784dba 100644 --- a/package.json +++ b/package.json @@ -39,100 +39,100 @@ "windows.store": "electron-windows-store --input-directory .\\desktop\\dist\\win-unpacked --output-directory .\\desktop\\store --flatten true -a .\\resources\\desktop -m .\\desktop\\assets\\windows\\AppXManifest.xml --package-version 0.0.0.0 --package-name MoodleDesktop" }, "dependencies": { - "@angular/animations": "5.2.10", - "@angular/common": "5.2.10", - "@angular/compiler": "5.2.10", - "@angular/compiler-cli": "5.2.10", - "@angular/core": "5.2.10", - "@angular/forms": "5.2.10", - "@angular/http": "5.2.10", - "@angular/platform-browser": "5.2.10", - "@angular/platform-browser-dynamic": "5.2.10", - "@ionic-native/badge": "4.17.0", - "@ionic-native/camera": "4.17.0", - "@ionic-native/clipboard": "4.17.0", - "@ionic-native/core": "4.11.0", - "@ionic-native/device": "4.17.0", - "@ionic-native/file": "4.17.0", - "@ionic-native/file-opener": "4.17.0", - "@ionic-native/file-transfer": "4.17.0", - "@ionic-native/globalization": "4.17.0", - "@ionic-native/in-app-browser": "4.17.0", - "@ionic-native/keyboard": "4.17.0", - "@ionic-native/local-notifications": "4.17.0", - "@ionic-native/media-capture": "4.17.0", - "@ionic-native/network": "4.17.0", - "@ionic-native/push": "4.17.0", - "@ionic-native/screen-orientation": "4.17.0", - "@ionic-native/splash-screen": "4.17.0", - "@ionic-native/sqlite": "4.17.0", - "@ionic-native/status-bar": "4.17.0", - "@ionic-native/web-intent": "4.17.0", - "@ionic-native/zip": "4.17.0", - "@ngx-translate/core": "8.0.0", - "@ngx-translate/http-loader": "2.0.1", - "@types/cordova": "0.0.34", - "@types/cordova-plugin-file-transfer": "0.0.3", - "@types/cordova-plugin-globalization": "0.0.3", - "@types/cordova-plugin-network-information": "0.0.3", - "@types/node": "8.10.19", - "@types/promise.prototype.finally": "2.0.2", - "chart.js": "2.7.2", - "com-darryncampbell-cordova-plugin-intent": "1.1.1", + "@angular/animations": "^5.2.10", + "@angular/common": "^5.2.10", + "@angular/compiler": "^5.2.10", + "@angular/compiler-cli": "^5.2.10", + "@angular/core": "^5.2.10", + "@angular/forms": "^5.2.10", + "@angular/http": "^5.2.10", + "@angular/platform-browser": "^5.2.10", + "@angular/platform-browser-dynamic": "^5.2.10", + "@ionic-native/badge": "^4.17.0", + "@ionic-native/camera": "^4.17.0", + "@ionic-native/clipboard": "^4.17.0", + "@ionic-native/core": "^4.11.0", + "@ionic-native/device": "^4.17.0", + "@ionic-native/file": "^4.17.0", + "@ionic-native/file-opener": "^4.17.0", + "@ionic-native/file-transfer": "^4.17.0", + "@ionic-native/globalization": "^4.17.0", + "@ionic-native/in-app-browser": "^4.17.0", + "@ionic-native/keyboard": "^4.17.0", + "@ionic-native/local-notifications": "^4.17.0", + "@ionic-native/media-capture": "^4.17.0", + "@ionic-native/network": "^4.17.0", + "@ionic-native/push": "^4.17.0", + "@ionic-native/screen-orientation": "^4.17.0", + "@ionic-native/splash-screen": "^4.17.0", + "@ionic-native/sqlite": "^4.17.0", + "@ionic-native/status-bar": "^4.17.0", + "@ionic-native/web-intent": "^4.17.0", + "@ionic-native/zip": "^4.17.0", + "@ngx-translate/core": "^8.0.0", + "@ngx-translate/http-loader": "^2.0.1", + "@types/cordova": "^0.0.34", + "@types/cordova-plugin-file-transfer": "^0.0.3", + "@types/cordova-plugin-globalization": "^0.0.3", + "@types/cordova-plugin-network-information": "^0.0.3", + "@types/node": "^8.10.19", + "@types/promise.prototype.finally": "^2.0.2", + "chart.js": "^2.7.2", + "com-darryncampbell-cordova-plugin-intent": "^1.1.1", "cordova-android": "7.1.2", - "cordova-android-support-gradle-release": "2.0.1", - "cordova-clipboard": "1.2.1", + "cordova-android-support-gradle-release": "^2.0.1", + "cordova-clipboard": "^1.2.1", "cordova-ios": "4.5.5", - "cordova-plugin-badge": "0.8.8", - "cordova-plugin-camera": "4.0.3", - "cordova-plugin-customurlscheme": "4.3.0", - "cordova-plugin-device": "2.0.2", - "cordova-plugin-file": "6.0.1", + "cordova-plugin-badge": "^0.8.8", + "cordova-plugin-camera": "^4.0.3", + "cordova-plugin-customurlscheme": "^4.3.0", + "cordova-plugin-device": "^2.0.2", + "cordova-plugin-file": "^6.0.1", "cordova-plugin-file-opener2": "2.0.19", - "cordova-plugin-file-transfer": "1.7.1", - "cordova-plugin-globalization": "1.11.0", - "cordova-plugin-inappbrowser": "3.0.0", - "cordova-plugin-ionic-keyboard": "2.1.3", + "cordova-plugin-file-transfer": "^1.7.1", + "cordova-plugin-globalization": "^1.11.0", + "cordova-plugin-inappbrowser": "^3.0.0", + "cordova-plugin-ionic-keyboard": "^2.1.3", "cordova-plugin-local-notification": "0.9.0-beta.3", - "cordova-plugin-media-capture": "3.0.2", - "cordova-plugin-network-information": "2.0.1", - "cordova-plugin-screen-orientation": "3.0.1", - "cordova-plugin-splashscreen": "5.0.2", - "cordova-plugin-statusbar": "2.4.2", - "cordova-plugin-whitelist": "1.3.3", - "cordova-plugin-zip": "3.1.0", - "cordova-sqlite-storage": "2.6.0", - "cordova-support-google-services": "1.2.1", - "es6-promise-plugin": "4.2.2", - "font-awesome": "4.7.0", + "cordova-plugin-media-capture": "^3.0.2", + "cordova-plugin-network-information": "^2.0.1", + "cordova-plugin-screen-orientation": "^3.0.1", + "cordova-plugin-splashscreen": "^5.0.2", + "cordova-plugin-statusbar": "^2.4.2", + "cordova-plugin-whitelist": "^1.3.3", + "cordova-plugin-zip": "^3.1.0", + "cordova-sqlite-storage": "^2.6.0", + "cordova-support-google-services": "^1.2.1", + "es6-promise-plugin": "^4.2.2", + "font-awesome": "^4.7.0", "ionic-angular": "3.9.3", - "ionicons": "3.0.0", - "jszip": "3.1.5", - "moment": "2.22.2", - "nl.kingsquare.cordova.background-audio": "1.0.1", - "phonegap-plugin-multidex": "1.0.0", + "ionicons": "^3.0.0", + "jszip": "^3.1.5", + "moment": "^2.22.2", + "nl.kingsquare.cordova.background-audio": "^1.0.1", + "phonegap-plugin-multidex": "^1.0.0", "phonegap-plugin-push": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#moodle-v2", - "promise.prototype.finally": "3.1.0", - "rxjs": "5.5.11", - "sw-toolbox": "3.6.0", - "ts-md5": "1.2.4", - "web-animations-js": "2.3.1", - "zone.js": "0.8.26" + "promise.prototype.finally": "^3.1.0", + "rxjs": "^5.5.11", + "sw-toolbox": "^3.6.0", + "ts-md5": "^1.2.4", + "web-animations-js": "^2.3.1", + "zone.js": "^0.8.26" }, "devDependencies": { - "@ionic/app-scripts": "3.2.2", - "electron-builder-lib": "20.23.1", - "electron-rebuild": "1.8.1", - "gulp": "4.0.0", - "gulp-clip-empty-files": "0.1.2", - "gulp-flatten": "0.4.0", - "gulp-rename": "1.3.0", - "gulp-slash": "1.1.3", - "gulp-util": "3.0.8", - "node-loader": "0.6.0", - "through": "2.3.8", - "typescript": "2.6.2", - "webpack-merge": "4.1.2" + "@ionic/app-scripts": "^3.2.2", + "electron-builder-lib": "^20.23.1", + "electron-rebuild": "^1.8.1", + "gulp": "^4.0.0", + "gulp-clip-empty-files": "^0.1.2", + "gulp-flatten": "^0.4.0", + "gulp-rename": "^1.3.0", + "gulp-slash": "^1.1.3", + "gulp-util": "^3.0.8", + "node-loader": "^0.6.0", + "through": "^2.3.8", + "typescript": "^2.6.2", + "webpack-merge": "^4.1.2" }, "browser": { "electron": false From 19143109c3063aa00d1ba68947275aadb6fe968f Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 13:01:56 +0200 Subject: [PATCH 046/263] MOBILE-2949 compile: Do not update data before compiling template This prevents errors when the templata and data are changed and they have different properties than the old template and data. --- src/core/compile/components/compile-html/compile-html.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/compile/components/compile-html/compile-html.ts b/src/core/compile/components/compile-html/compile-html.ts index fd7b82ec9..18d98604d 100644 --- a/src/core/compile/components/compile-html/compile-html.ts +++ b/src/core/compile/components/compile-html/compile-html.ts @@ -58,6 +58,7 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { protected componentRef: ComponentRef; protected element; protected differ: any; // To detect changes in the jsData input. + protected creatingComponent = false; constructor(protected compileProvider: CoreCompileProvider, protected cdr: ChangeDetectorRef, element: ElementRef, @Optional() protected navCtrl: NavController, differs: KeyValueDiffers, protected domUtils: CoreDomUtilsProvider, @@ -70,7 +71,7 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { * Detect and act upon changes that Angular can’t or won’t detect on its own (objects and arrays). */ ngDoCheck(): void { - if (this.componentInstance) { + if (this.componentInstance && !this.creatingComponent) { // Check if there's any change in the jsData object. const changes = this.differ.diff(this.jsData); if (changes) { @@ -91,6 +92,7 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { this.text) { // Create a new component and a new module. + this.creatingComponent = true; this.compileProvider.createAndCompileComponent(this.text, this.getComponentClass(), this.extraImports) .then((factory) => { // Destroy previous components. @@ -107,6 +109,8 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { this.domUtils.showErrorModal(error); this.loaded = true; + }).finally(() => { + this.creatingComponent = false; }); } } From 8f1c66445fc8a8474b2c0ad39f2ff54166d58ab9 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 13:12:13 +0200 Subject: [PATCH 047/263] MOBILE-2949 compile: Event that notifies compilation status --- src/core/compile/components/compile-html/compile-html.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/core/compile/components/compile-html/compile-html.ts b/src/core/compile/components/compile-html/compile-html.ts index 18d98604d..a263241d9 100644 --- a/src/core/compile/components/compile-html/compile-html.ts +++ b/src/core/compile/components/compile-html/compile-html.ts @@ -48,6 +48,7 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { @Input() extraProviders: any[] = []; // Extra providers. @Input() forceCompile: string | boolean; // Set it to true to force compile even if the text/javascript hasn't changed. @Output() created: EventEmitter = new EventEmitter(); // Will emit an event when the component is instantiated. + @Output() compiling: EventEmitter = new EventEmitter(); // Event that indicates whether the template is being compiled. // Get the container where to put the content. @ViewChild('dynamicComponent', { read: ViewContainerRef }) container: ViewContainerRef; @@ -93,6 +94,7 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { // Create a new component and a new module. this.creatingComponent = true; + this.compiling.emit(true); this.compileProvider.createAndCompileComponent(this.text, this.getComponentClass(), this.extraImports) .then((factory) => { // Destroy previous components. @@ -111,6 +113,7 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { this.loaded = true; }).finally(() => { this.creatingComponent = false; + this.compiling.emit(false); }); } } From 8e9af2fdda29393c877ae4586c4fe94c1ff02c36 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 13:27:44 +0200 Subject: [PATCH 048/263] MOBILE-2949 comments: Event that notifies loading status --- src/core/comments/components/comments/comments.ts | 12 +++++++++--- .../comments/components/comments/core-comments.html | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/core/comments/components/comments/comments.ts b/src/core/comments/components/comments/comments.ts index 079716675..2e5303a8e 100644 --- a/src/core/comments/components/comments/comments.ts +++ b/src/core/comments/components/comments/comments.ts @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Component, Input, OnChanges, SimpleChange } from '@angular/core'; -import { NavParams, NavController } from 'ionic-angular'; +import { Component, EventEmitter, Input, OnChanges, Output, SimpleChange } from '@angular/core'; +import { NavController } from 'ionic-angular'; import { CoreCommentsProvider } from '../../providers/comments'; /** @@ -31,11 +31,15 @@ export class CoreCommentsCommentsComponent implements OnChanges { @Input() area = ''; @Input() page = 0; @Input() title?: string; + @Input() displaySpinner = true; // Whether to display the loading spinner. + @Output() onLoading: EventEmitter; // Eevent that indicates whether the component is loading data. commentsLoaded = false; commentsCount: number; - constructor(navParams: NavParams, private navCtrl: NavController, private commentsProvider: CoreCommentsProvider) {} + constructor(private navCtrl: NavController, private commentsProvider: CoreCommentsProvider) { + this.onLoading = new EventEmitter(); + } /** * View loaded. @@ -56,6 +60,7 @@ export class CoreCommentsCommentsComponent implements OnChanges { protected fetchData(): void { this.commentsLoaded = false; + this.onLoading.emit(true); this.commentsProvider.getComments(this.contextLevel, this.instanceId, this.component, this.itemId, this.area, this.page) .then((comments) => { @@ -64,6 +69,7 @@ export class CoreCommentsCommentsComponent implements OnChanges { this.commentsCount = -1; }).finally(() => { this.commentsLoaded = true; + this.onLoading.emit(false); }); } diff --git a/src/core/comments/components/comments/core-comments.html b/src/core/comments/components/comments/core-comments.html index 1b30e656a..7dad81877 100644 --- a/src/core/comments/components/comments/core-comments.html +++ b/src/core/comments/components/comments/core-comments.html @@ -1,4 +1,4 @@ - +
{{ 'core.commentscount' | translate : {'$a': commentsCount} }}
From d8c76b0c35037a60f62eeed7f9dc25c29ee4f1c2 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 13:29:11 +0200 Subject: [PATCH 049/263] MOBILE-2949 rating: Event that notifies rate component loading status --- src/core/rating/components/rate/rate.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/rating/components/rate/rate.ts b/src/core/rating/components/rate/rate.ts index 581de6e66..b2c897523 100644 --- a/src/core/rating/components/rate/rate.ts +++ b/src/core/rating/components/rate/rate.ts @@ -35,6 +35,7 @@ export class CoreRatingRateComponent implements OnChanges { @Input() aggregateMethod: number; @Input() scaleId: number; @Input() userId: number; + @Output() onLoading: EventEmitter; // Eevent that indicates whether the component is loading data. @Output() onUpdate: EventEmitter; // Event emitted when the rating is updated online. item: CoreRatingInfoItem; @@ -43,6 +44,7 @@ export class CoreRatingRateComponent implements OnChanges { constructor(private domUtils: CoreDomUtilsProvider, private translate: TranslateService, private ratingProvider: CoreRatingProvider, private ratingOffline: CoreRatingOfflineProvider) { + this.onLoading = new EventEmitter(); this.onUpdate = new EventEmitter(); } @@ -77,6 +79,7 @@ export class CoreRatingRateComponent implements OnChanges { }); } + this.onLoading.emit(true); this.ratingOffline.getRating(this.contextLevel, this.instanceId, this.ratingInfo.component, this.ratingInfo.ratingarea, this.itemId).then((rating) => { this.rating = rating.rating; @@ -86,6 +89,8 @@ export class CoreRatingRateComponent implements OnChanges { } else { this.rating = CoreRatingProvider.UNSET_RATING; } + }).finally(() => { + this.onLoading.emit(false); }); } From 65f0407659a8a618ba7a0eab9ec1ff11b98a4cbb Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 13:30:30 +0200 Subject: [PATCH 050/263] MOBILE-2949 data: Display loading spinner until all entry info is loaded --- src/addon/mod/data/pages/entry/entry.html | 10 ++-- src/addon/mod/data/pages/entry/entry.ts | 56 ++++++++++++++++++----- 2 files changed, 49 insertions(+), 17 deletions(-) diff --git a/src/addon/mod/data/pages/entry/entry.html b/src/addon/mod/data/pages/entry/entry.html index 1767dc9c0..aef6d0da0 100644 --- a/src/addon/mod/data/pages/entry/entry.html +++ b/src/addon/mod/data/pages/entry/entry.html @@ -4,10 +4,10 @@ - + - +
@@ -25,14 +25,14 @@
- +
- + - + diff --git a/src/addon/mod/data/pages/entry/entry.ts b/src/addon/mod/data/pages/entry/entry.ts index 6f6cf7649..2c568ab8d 100644 --- a/src/addon/mod/data/pages/entry/entry.ts +++ b/src/addon/mod/data/pages/entry/entry.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Component, ViewChild, OnDestroy } from '@angular/core'; +import { ChangeDetectorRef, Component, ViewChild, OnDestroy } from '@angular/core'; import { Content, IonicPage, NavParams, NavController } from 'ionic-angular'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; @@ -51,6 +51,9 @@ export class AddonModDataEntryPage implements OnDestroy { moduleName = 'data'; component = AddonModDataProvider.COMPONENT; entryLoaded = false; + renderingEntry = false; + loadingComments = false; + loadingRating = false; selectedGroup = 0; entry: any; offlineActions = []; @@ -61,18 +64,19 @@ export class AddonModDataEntryPage implements OnDestroy { data: any; groupInfo: any; showComments: any; - entryRendered = ''; + entryHtml = ''; siteId: string; extraImports = [AddonModDataComponentsModule]; jsData; ratingInfo: CoreRatingInfo; + isPullingToRefresh = false; // Whether the last fetching of data was started by a pull-to-refresh action constructor(params: NavParams, protected utils: CoreUtilsProvider, protected groupsProvider: CoreGroupsProvider, protected domUtils: CoreDomUtilsProvider, protected fieldsDelegate: AddonModDataFieldsDelegate, protected courseProvider: CoreCourseProvider, protected dataProvider: AddonModDataProvider, protected dataOffline: AddonModDataOfflineProvider, protected dataHelper: AddonModDataHelperProvider, - sitesProvider: CoreSitesProvider, protected navCtrl: NavController, - protected eventsProvider: CoreEventsProvider) { + sitesProvider: CoreSitesProvider, protected navCtrl: NavController, protected eventsProvider: CoreEventsProvider, + private cdr: ChangeDetectorRef) { this.module = params.get('module') || {}; this.entryId = params.get('entryId') || null; this.courseId = params.get('courseId'); @@ -122,12 +126,15 @@ export class AddonModDataEntryPage implements OnDestroy { /** * Fetch the entry data. * - * @param {boolean} refresh If refresh the current data or not. - * @return {Promise} Resolved when done. + * @param {boolean} [refresh] Whether to refresh the current data or not. + * @param {boolean} [isPtr] Whether is a pull to refresh action. + * @return {Promise} Resolved when done. */ - protected fetchEntryData(refresh?: boolean): Promise { + protected fetchEntryData(refresh?: boolean, isPtr?: boolean): Promise { let fieldsArray; + this.isPullingToRefresh = isPtr; + return this.dataProvider.getDatabase(this.courseId, this.module.id).then((data) => { this.title = data.name || this.title; this.data = data; @@ -176,7 +183,7 @@ export class AddonModDataEntryPage implements OnDestroy { const actions = this.dataHelper.getActions(this.data, this.access, this.entry); const templte = this.data.singletemplate || this.dataHelper.getDefaultTemplate('single', fieldsArray); - this.entryRendered = this.dataHelper.displayShowFields(templte, fieldsArray, this.entry, this.offset, 'show', actions); + this.entryHtml = this.dataHelper.displayShowFields(templte, fieldsArray, this.entry, this.offset, 'show', actions); this.showComments = actions.comments; const entries = {}; @@ -191,7 +198,7 @@ export class AddonModDataEntryPage implements OnDestroy { }).catch((message) => { if (!refresh) { // Some call failed, retry without using cache since it might be a new activity. - return this.refreshAllData(); + return this.refreshAllData(isPtr); } this.domUtils.showErrorModalDefault(message, 'core.course.errorgetmodule', true); @@ -219,9 +226,10 @@ export class AddonModDataEntryPage implements OnDestroy { /** * Refresh all the data. * + * @param {boolean} [isPtr] Whether is a pull to refresh action. * @return {Promise} Promise resolved when done. */ - protected refreshAllData(): Promise { + protected refreshAllData(isPtr?: boolean): Promise { const promises = []; promises.push(this.dataProvider.invalidateDatabaseData(this.courseId)); @@ -232,7 +240,7 @@ export class AddonModDataEntryPage implements OnDestroy { } return Promise.all(promises).finally(() => { - return this.fetchEntryData(true); + return this.fetchEntryData(true, isPtr); }); } @@ -244,7 +252,7 @@ export class AddonModDataEntryPage implements OnDestroy { */ refreshDatabase(refresher?: any): Promise { if (this.entryLoaded) { - return this.refreshAllData().finally(() => { + return this.refreshAllData(true).finally(() => { refresher && refresher.complete(); }); } @@ -310,6 +318,30 @@ export class AddonModDataEntryPage implements OnDestroy { }); } + /** + * Function called when entry is being rendered. + */ + setRenderingEntry(rendering: boolean): void { + this.renderingEntry = rendering; + this.cdr.detectChanges(); + } + + /** + * Function called when comments component is loading data. + */ + setLoadingComments(loading: boolean): void { + this.loadingComments = loading; + this.cdr.detectChanges(); + } + + /** + * Function called when rate component is loading data. + */ + setLoadingRating(loading: boolean): void { + this.loadingRating = loading; + this.cdr.detectChanges(); + } + /** * Function called when rating is updated online. */ From 546667d11ac2ae6b8b16fb558d0854142ad93095 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 9 Apr 2019 14:42:09 +0200 Subject: [PATCH 051/263] MOBILE-2962 messages: Support self conversations --- scripts/langindex.json | 4 + src/addon/messages/lang/en.json | 3 + .../messages/pages/discussion/discussion.html | 18 ++- .../messages/pages/discussion/discussion.ts | 20 ++- .../group-conversations.html | 6 +- .../group-conversations.ts | 6 +- .../messages/providers/mainmenu-handler.ts | 2 +- src/addon/messages/providers/messages.ts | 138 ++++++++++++++++-- .../providers/user-send-message-handler.ts | 9 +- src/assets/lang/en.json | 4 + 10 files changed, 177 insertions(+), 33 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index d86efa26d..7f4fb4d09 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -179,6 +179,7 @@ "addon.messages.contacts": "message", "addon.messages.decline": "message", "addon.messages.deleteallconfirm": "message", + "addon.messages.deleteallselfconfirm": "message", "addon.messages.deleteconversation": "message", "addon.messages.deletemessage": "local_moodlemobileapp", "addon.messages.deletemessageconfirmation": "local_moodlemobileapp", @@ -217,6 +218,8 @@ "addon.messages.searchnocontactsfound": "message", "addon.messages.searchnomessagesfound": "message", "addon.messages.searchnononcontactsfound": "message", + "addon.messages.selfconversation": "message", + "addon.messages.selfconversationdefaultmessage": "message", "addon.messages.sendcontactrequest": "message", "addon.messages.showdeletemessages": "local_moodlemobileapp", "addon.messages.type_blocked": "local_moodlemobileapp", @@ -1342,6 +1345,7 @@ "core.favourites": "moodle", "core.filename": "repository", "core.filenameexist": "local_moodlemobileapp", + "core.filenotfound": "resource", "core.fileuploader.addfiletext": "repository", "core.fileuploader.audio": "local_moodlemobileapp", "core.fileuploader.camera": "local_moodlemobileapp", diff --git a/src/addon/messages/lang/en.json b/src/addon/messages/lang/en.json index 1b542a0c7..b5aa51b7e 100644 --- a/src/addon/messages/lang/en.json +++ b/src/addon/messages/lang/en.json @@ -18,6 +18,7 @@ "contacts": "Contacts", "decline": "Decline", "deleteallconfirm": "Are you sure you would like to delete this entire conversation? This will not delete it for other conversation participants.", + "deleteallselfconfirm": "Are you sure you would like to delete this entire personal conversation?", "deleteconversation": "Delete conversation", "deletemessage": "Delete message", "deletemessageconfirmation": "Are you sure you want to delete this message? It will only be deleted from your messaging history and will still be viewable by the user who sent or received the message.", @@ -56,6 +57,8 @@ "searchnocontactsfound": "No contacts found", "searchnomessagesfound": "No messages found", "searchnononcontactsfound": "No non contacts found", + "selfconversation": "Personal space", + "selfconversationdefaultmessage": "Save draft messages, links, notes etc. to access later.", "sendcontactrequest": "Send contact request", "showdeletemessages": "Show delete messages", "type_blocked": "Blocked", diff --git a/src/addon/messages/pages/discussion/discussion.html b/src/addon/messages/pages/discussion/discussion.html index 7fb8da636..f93a8b6af 100644 --- a/src/addon/messages/pages/discussion/discussion.html +++ b/src/addon/messages/pages/discussion/discussion.html @@ -10,15 +10,15 @@ - - + + - - + + - - + + @@ -26,6 +26,12 @@ + + +

{{ 'addon.messages.selfconversation' | translate }}

+

{{ 'addon.messages.selfconversationdefaultmessage' | translate }}

+
+
diff --git a/src/addon/messages/pages/discussion/discussion.ts b/src/addon/messages/pages/discussion/discussion.ts index 25cdcab13..d87bc12ba 100644 --- a/src/addon/messages/pages/discussion/discussion.ts +++ b/src/addon/messages/pages/discussion/discussion.ts @@ -85,6 +85,7 @@ export class AddonMessagesDiscussionPage implements OnDestroy { footerType: 'message' | 'blocked' | 'requiresContact' | 'requestSent' | 'requestReceived' | 'unable'; requestContactSent = false; requestContactReceived = false; + isSelf = false; constructor(private eventsProvider: CoreEventsProvider, sitesProvider: CoreSitesProvider, navParams: NavParams, private userProvider: CoreUserProvider, private navCtrl: NavController, private messagesSync: AddonMessagesSyncProvider, @@ -402,7 +403,13 @@ export class AddonMessagesDiscussionPage implements OnDestroy { if (conversationId) { promise = Promise.resolve(conversationId); } else { - promise = this.messagesProvider.getConversationBetweenUsers(userId, undefined, true).then((conversation) => { + if (userId == this.currentUserId && this.messagesProvider.isSelfConversationEnabled()) { + promise = this.messagesProvider.getSelfConversation(); + } else { + promise = this.messagesProvider.getConversationBetweenUsers(userId, undefined, true); + } + + promise = promise.then((conversation) => { fallbackConversation = conversation; return conversation.id; @@ -434,6 +441,7 @@ export class AddonMessagesDiscussionPage implements OnDestroy { if (!this.isGroup) { this.userId = conversation.userid; } + this.isSelf = conversation.type == AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_SELF; return true; } else { @@ -442,7 +450,9 @@ export class AddonMessagesDiscussionPage implements OnDestroy { }); }, (error) => { // Probably conversation does not exist or user is offline. Try to load offline messages. - return this.messagesOffline.getMessages(userId).then((messages) => { + this.isSelf = userId == this.currentUserId; + + return this.messagesOffline.getMessages(userId).then((messages): any => { if (messages && messages.length) { // We have offline messages, this probably means that the conversation didn't exist. Don't display error. messages.forEach((message) => { @@ -455,6 +465,8 @@ export class AddonMessagesDiscussionPage implements OnDestroy { // Display the error. return Promise.reject(error); } + + return false; }); }); } @@ -1123,7 +1135,9 @@ export class AddonMessagesDiscussionPage implements OnDestroy { * @param {Function} [done] Function to call when done. */ deleteConversation(done?: () => void): void { - this.domUtils.showConfirm(this.translate.instant('addon.messages.deleteallconfirm')).then(() => { + const confirmMessage = 'addon.messages.' + (this.isSelf ? 'deleteallselfconfirm' : 'deleteallconfirm'); + + this.domUtils.showConfirm(this.translate.instant(confirmMessage)).then(() => { this.deleteIcon = 'spinner'; return this.messagesProvider.deleteConversation(this.conversation.id).then(() => { diff --git a/src/addon/messages/pages/group-conversations/group-conversations.html b/src/addon/messages/pages/group-conversations/group-conversations.html index 10d5c3052..bcb05e861 100644 --- a/src/addon/messages/pages/group-conversations/group-conversations.html +++ b/src/addon/messages/pages/group-conversations/group-conversations.html @@ -91,12 +91,12 @@ - + - +

@@ -109,7 +109,7 @@

{{ 'addon.messages.you' | translate }} - +

diff --git a/src/addon/messages/pages/group-conversations/group-conversations.ts b/src/addon/messages/pages/group-conversations/group-conversations.ts index 332bae82c..72a8fa546 100644 --- a/src/addon/messages/pages/group-conversations/group-conversations.ts +++ b/src/addon/messages/pages/group-conversations/group-conversations.ts @@ -63,7 +63,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { count: 0, unread: 0 }; - typeIndividual = AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL; + typeGroup = AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP; currentListEl: HTMLElement; protected loadingString: string; @@ -182,7 +182,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { // Update unread conversation counts. this.cronObserver = eventsProvider.on(AddonMessagesProvider.UNREAD_CONVERSATION_COUNTS_EVENT, (data) => { this.favourites.unread = data.favourites; - this.individual.unread = data.individual; + this.individual.unread = data.individual + data.self; // Self is only returned if it's not favourite. this.group.unread = data.group; }, this.siteId); @@ -400,7 +400,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { return this.messagesProvider.getConversationCounts(this.siteId); }).then((counts) => { this.favourites.count = counts.favourites; - this.individual.count = counts.individual; + this.individual.count = counts.individual + counts.self; // Self is only returned if it's not favourite. this.group.count = counts.group; }); } diff --git a/src/addon/messages/providers/mainmenu-handler.ts b/src/addon/messages/providers/mainmenu-handler.ts index 170d86082..33b79f016 100644 --- a/src/addon/messages/providers/mainmenu-handler.ts +++ b/src/addon/messages/providers/mainmenu-handler.ts @@ -54,7 +54,7 @@ export class AddonMessagesMainMenuHandler implements CoreMainMenuHandler, CoreCr pushNotificationsDelegate: AddonPushNotificationsDelegate, private emulatorHelper: CoreEmulatorHelperProvider) { eventsProvider.on(AddonMessagesProvider.UNREAD_CONVERSATION_COUNTS_EVENT, (data) => { - this.unreadCount = data.favourites + data.individual + data.group; + this.unreadCount = data.favourites + data.individual + data.group + data.self; this.orMore = data.orMore; this.updateBadge(data.siteId); }); diff --git a/src/addon/messages/providers/messages.ts b/src/addon/messages/providers/messages.ts index c81d27e65..2a6462cc0 100644 --- a/src/addon/messages/providers/messages.ts +++ b/src/addon/messages/providers/messages.ts @@ -47,6 +47,7 @@ export class AddonMessagesProvider { static MESSAGE_PRIVACY_SITE = 2; // Privacy setting for being messaged by anyone on the site. static MESSAGE_CONVERSATION_TYPE_INDIVIDUAL = 1; // An individual conversation. static MESSAGE_CONVERSATION_TYPE_GROUP = 2; // A group conversation. + static MESSAGE_CONVERSATION_TYPE_SELF = 3; // A self conversation. static LIMIT_CONTACTS = 50; static LIMIT_MESSAGES = 50; static LIMIT_INITIAL_USER_SEARCH = 3; @@ -297,14 +298,15 @@ export class AddonMessagesProvider { conversation.lastmessagedate = lastMessage ? lastMessage.timecreated : null; conversation.sentfromcurrentuser = lastMessage ? lastMessage.useridfrom == userId : null; - if (conversation.type == AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL) { - const otherUser = conversation.members.reduce((carry, member) => { - if (!carry && member.id != userId) { - carry = member; - } + if (conversation.type != AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP) { + const isIndividual = conversation.type == AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL, + otherUser = conversation.members.reduce((carry, member) => { + if (!carry && ((isIndividual && member.id != userId) || (!isIndividual && member.id == userId))) { + carry = member; + } - return carry; - }, null); + return carry; + }, null); conversation.name = conversation.name ? conversation.name : otherUser.fullname; conversation.imageurl = conversation.imageurl ? conversation.imageurl : otherUser.profileimageurl; @@ -478,6 +480,16 @@ export class AddonMessagesProvider { return this.ROOT_CACHE_KEY + 'memberInfo:' + userId + ':' + otherUserId; } + /** + * Get cache key for get self conversation. + * + * @param {number} userId User ID. + * @return {string} Cache key. + */ + protected getCacheKeyForSelfConversation(userId: number): string { + return this.ROOT_CACHE_KEY + 'selfconversation:' + userId; + } + /** * Get common cache key for get user conversations. * @@ -948,7 +960,21 @@ export class AddonMessagesProvider { params.favourites = favourites ? 1 : 0; } - return site.read('core_message_get_conversations', params, preSets).then((response) => { + if (site.isVersionGreaterEqualThan('3.7') && type != AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP) { + // Add self conversation to the list. + params.mergeself = 1; + } + + return site.read('core_message_get_conversations', params, preSets).catch((error) => { + if (params.mergeself) { + // Try again without the new param. Maybe the user is offline and he has a previous request cached. + delete params.mergeself; + + return site.read('core_message_get_conversations', params, preSets); + } + + return Promise.reject(error); + }).then((response) => { // Format the conversations, adding some calculated fields. const conversations = response.conversations.slice(0, this.LIMIT_MESSAGES).map((conversation) => { return this.formatConversation(conversation, userId); @@ -966,11 +992,11 @@ export class AddonMessagesProvider { * Get conversation counts by type. * * @param {string} [siteId] Site ID. If not defined, use current site. - * @return {Promise} Promise resolved with favourite, individual and - * group conversation counts. + * @return {Promise} Promise resolved with favourite, + * individual, group and self conversation counts. * @since 3.6 */ - getConversationCounts(siteId?: string): Promise<{favourites: number, individual: number, group: number}> { + getConversationCounts(siteId?: string): Promise<{favourites: number, individual: number, group: number, self: number}> { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { @@ -981,7 +1007,8 @@ export class AddonMessagesProvider { const counts = { favourites: result.favourites, individual: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL], - group: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP] + group: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP], + self: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_SELF] || 0 }; return counts; @@ -1337,6 +1364,40 @@ export class AddonMessagesProvider { }); } + /** + * Get a self conversation. + * + * @param {number} [messageOffset=0] Offset for messages list. + * @param {number} [messageLimit=1] Limit of messages. Defaults to 1 (last message). + * We recommend getConversationMessages to get them. + * @param {boolean} [newestFirst=true] Whether to order messages by newest first. + * @param {string} [siteId] Site ID. If not defined, use current site. + * @param {string} [userId] User ID to get the self conversation for. If not defined, current user in the site. + * @return {Promise} Promise resolved with the response. + * @since 3.7 + */ + getSelfConversation(messageOffset: number = 0, messageLimit: number = 1, newestFirst: boolean = true, siteId?: string, + userId?: number): Promise { + + return this.sitesProvider.getSite(siteId).then((site) => { + userId = userId || site.getUserId(); + + const preSets = { + cacheKey: this.getCacheKeyForSelfConversation(userId) + }, + params: any = { + userid: userId, + messageoffset: messageOffset, + messagelimit: messageLimit, + newestmessagesfirst: newestFirst ? 1 : 0 + }; + + return site.read('core_message_get_self_conversation', params, preSets).then((conversation) => { + return this.formatConversation(conversation, userId); + }); + }); + } + /** * Get unread conversation counts by type. * @@ -1344,10 +1405,10 @@ export class AddonMessagesProvider { * @return {Promise} Resolved with the unread favourite, individual and group conversation counts. */ getUnreadConversationCounts(siteId?: string): - Promise<{favourites: number, individual: number, group: number, orMore?: boolean}> { + Promise<{favourites: number, individual: number, group: number, self: number, orMore?: boolean}> { return this.sitesProvider.getSite(siteId).then((site) => { - let promise: Promise<{favourites: number, individual: number, group: number, orMore?: boolean}>; + let promise: Promise<{favourites: number, individual: number, group: number, self: number, orMore?: boolean}>; if (this.isGroupMessagingEnabled()) { // @since 3.6 @@ -1359,7 +1420,8 @@ export class AddonMessagesProvider { return { favourites: result.favourites, individual: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL], - group: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP] + group: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP], + self: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_SELF] || 0 }; }); @@ -1374,7 +1436,7 @@ export class AddonMessagesProvider { }; promise = site.read('core_message_get_unread_conversations_count', params, preSets).then((count) => { - return { favourites: 0, individual: count, group: 0 }; + return { favourites: 0, individual: count, group: 0, self: 0 }; }); } else { // Fallback call. @@ -1399,6 +1461,7 @@ export class AddonMessagesProvider { favourites: 0, individual: count, group: 0, + self: 0, orMore: count > this.LIMIT_MESSAGES }; }); @@ -1696,6 +1759,21 @@ export class AddonMessagesProvider { ]); } + /** + * Invalidate a self conversation. + * + * @param {string} [siteId] Site ID. If not defined, current site. + * @param {number} [userId] User ID. If not defined, current user in the site. + * @return {Promise} Resolved when done. + */ + invalidateSelfConversation(siteId?: string, userId?: number): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + userId = userId || site.getUserId(); + + return site.invalidateWsCacheForKey(this.getCacheKeyForSelfConversation(userId)); + }); + } + /** * Invalidate unread conversation counts cache. * @@ -1860,6 +1938,34 @@ export class AddonMessagesProvider { return this.sitesProvider.wsAvailableInCurrentSite('core_message_data_for_messagearea_search_messages'); } + /** + * Returns whether or not self conversation is supported in a certain site. + * + * @param {CoreSite} [site] Site. If not defined, current site. + * @return {boolean} If related WS is available on the site. + * @since 3.7 + */ + isSelfConversationEnabled(site?: CoreSite): boolean { + site = site || this.sitesProvider.getCurrentSite(); + + return site.wsAvailable('core_message_get_self_conversation'); + } + + /** + * Returns whether or not self conversation is supported in a certain site. + * + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved with boolean: whether related WS is available on a certain site. + * @since 3.7 + */ + isSelfConversationEnabledInSite(siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return this.isSelfConversationEnabled(site); + }).catch(() => { + return false; + }); + } + /** * Mark message as read. * diff --git a/src/addon/messages/providers/user-send-message-handler.ts b/src/addon/messages/providers/user-send-message-handler.ts index e42a2ca67..a80b90ade 100644 --- a/src/addon/messages/providers/user-send-message-handler.ts +++ b/src/addon/messages/providers/user-send-message-handler.ts @@ -49,7 +49,14 @@ export class AddonMessagesSendMessageUserHandler implements CoreUserProfileHandl * @return {boolean|Promise} Promise resolved with true if enabled, resolved with false otherwise. */ isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise { - return user.id != this.sitesProvider.getCurrentSiteUserId(); + const currentSite = this.sitesProvider.getCurrentSite(); + + if (!currentSite) { + return false; + } + + // From 3.7 you can send messages to yourself. + return user.id != currentSite.getUserId() || currentSite.isVersionGreaterEqualThan('3.7'); } /** diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 8fd9e1499..a6b658a3d 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -179,6 +179,7 @@ "addon.messages.contacts": "Contacts", "addon.messages.decline": "Decline", "addon.messages.deleteallconfirm": "Are you sure you would like to delete this entire conversation? This will not delete it for other conversation participants.", + "addon.messages.deleteallselfconfirm": "Are you sure you would like to delete this entire personal conversation?", "addon.messages.deleteconversation": "Delete conversation", "addon.messages.deletemessage": "Delete message", "addon.messages.deletemessageconfirmation": "Are you sure you want to delete this message? It will only be deleted from your messaging history and will still be viewable by the user who sent or received the message.", @@ -217,6 +218,8 @@ "addon.messages.searchnocontactsfound": "No contacts found", "addon.messages.searchnomessagesfound": "No messages found", "addon.messages.searchnononcontactsfound": "No non contacts found", + "addon.messages.selfconversation": "Personal space", + "addon.messages.selfconversationdefaultmessage": "Save draft messages, links, notes etc. to access later.", "addon.messages.sendcontactrequest": "Send contact request", "addon.messages.showdeletemessages": "Show delete messages", "addon.messages.type_blocked": "Blocked", @@ -1342,6 +1345,7 @@ "core.favourites": "Starred", "core.filename": "Filename", "core.filenameexist": "File name already exists: {{$a}}", + "core.filenotfound": "File not found, sorry.", "core.fileuploader.addfiletext": "Add file", "core.fileuploader.audio": "Audio", "core.fileuploader.camera": "Camera", From bbfe831846eb1ce2526ba66b23d6ee1a3d05aa04 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 10 Apr 2019 12:17:45 +0200 Subject: [PATCH 052/263] MOBILE-2962 messages: Keep scroll position when loading previous --- .../messages/pages/discussion/discussion.ts | 49 ++++++++++++++++++- .../core-infinite-loading.html | 8 +-- .../infinite-loading/infinite-loading.ts | 46 ++++++++++++++++- 3 files changed, 96 insertions(+), 7 deletions(-) diff --git a/src/addon/messages/pages/discussion/discussion.ts b/src/addon/messages/pages/discussion/discussion.ts index d87bc12ba..fb0f2299a 100644 --- a/src/addon/messages/pages/discussion/discussion.ts +++ b/src/addon/messages/pages/discussion/discussion.ts @@ -27,6 +27,7 @@ import { CoreLoggerProvider } from '@providers/logger'; import { CoreAppProvider } from '@providers/app'; import { coreSlideInOut } from '@classes/animations'; import { CoreSplitViewComponent } from '@components/split-view/split-view'; +import { CoreInfiniteLoadingComponent } from '@components/infinite-loading/infinite-loading'; import { Md5 } from 'ts-md5/dist/md5'; import * as moment from 'moment'; @@ -41,6 +42,7 @@ import * as moment from 'moment'; }) export class AddonMessagesDiscussionPage implements OnDestroy { @ViewChild(Content) content: Content; + @ViewChild(CoreInfiniteLoadingComponent) infinite: CoreInfiniteLoadingComponent; siteId: string; protected fetching: boolean; @@ -381,6 +383,9 @@ export class AddonMessagesDiscussionPage implements OnDestroy { message.showUserData = this.showUserData(message, this.messages[index - 1]); }); + // Call resize to recalculate the dimensions. + this.content && this.content.resize(); + // Notify that there can be a new message. this.notifyNewMessage(); @@ -825,11 +830,28 @@ export class AddonMessagesDiscussionPage implements OnDestroy { * @return {Promise} Resolved when done. */ loadPrevious(infiniteComplete?: any): Promise { + let infiniteHeight = this.infinite ? this.infinite.getHeight() : 0; + const scrollHeight = this.domUtils.getScrollHeight(this.content); + // If there is an ongoing fetch, wait for it to finish. return this.waitForFetch().finally(() => { this.pagesLoaded++; - this.fetchMessages().catch((error) => { + this.fetchMessages().then(() => { + + // Try to keep the scroll position. + const scrollBottom = scrollHeight - this.domUtils.getScrollTop(this.content); + + if (this.canLoadMore && infiniteHeight && this.infinite) { + // The height of the infinite is different while spinner is shown. Add that difference. + infiniteHeight = infiniteHeight - this.infinite.getHeight(); + } else if (!this.canLoadMore) { + // Can't load more, take into account the full height of the infinite loading since it will disappear now. + infiniteHeight = infiniteHeight || (this.infinite ? this.infinite.getHeight() : 0); + } + + this.keepScroll(scrollHeight, scrollBottom, infiniteHeight); + }).catch((error) => { this.loadMoreError = true; // Set to prevent infinite calls with infinite-loading. this.pagesLoaded--; this.domUtils.showErrorModalDefault(error, 'addon.messages.errorwhileretrievingmessages', true); @@ -839,6 +861,31 @@ export class AddonMessagesDiscussionPage implements OnDestroy { }); } + /** + * Keep scroll position after loading previous messages. + * We don't use resizeContent because the approach used is different and it isn't easy to calculate these positions. + */ + protected keepScroll(oldScrollHeight: number, oldScrollBottom: number, infiniteHeight: number, retries?: number): void { + retries = retries || 0; + + setTimeout(() => { + const newScrollHeight = this.domUtils.getScrollHeight(this.content); + + if (newScrollHeight == oldScrollHeight) { + // Height hasn't changed yet. Retry if max retries haven't been reached. + if (retries <= 10) { + this.keepScroll(oldScrollHeight, oldScrollBottom, infiniteHeight, retries + 1); + } + + return; + } + + const scrollTo = newScrollHeight - oldScrollBottom + infiniteHeight; + + this.domUtils.scrollTo(this.content, 0, scrollTo, 0); + }, 30); + } + /** * Content or scroll has been resized. For content, only call it if it's been added on top. */ diff --git a/src/components/infinite-loading/core-infinite-loading.html b/src/components/infinite-loading/core-infinite-loading.html index 35a8285a8..8775a5b60 100644 --- a/src/components/infinite-loading/core-infinite-loading.html +++ b/src/components/infinite-loading/core-infinite-loading.html @@ -1,5 +1,5 @@ -
+
@@ -9,12 +9,12 @@
- + -
+
@@ -24,6 +24,6 @@
-
+
\ No newline at end of file diff --git a/src/components/infinite-loading/infinite-loading.ts b/src/components/infinite-loading/infinite-loading.ts index 101e303d4..977eba6b7 100644 --- a/src/components/infinite-loading/infinite-loading.ts +++ b/src/components/infinite-loading/infinite-loading.ts @@ -12,8 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Component, Input, Output, EventEmitter, OnChanges, SimpleChange, Optional } from '@angular/core'; +import { Component, Input, Output, EventEmitter, OnChanges, SimpleChange, Optional, ViewChild, ElementRef } from '@angular/core'; import { InfiniteScroll, Content } from 'ionic-angular'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; /** * Component to show a infinite loading trigger and spinner while more data is being loaded. @@ -31,11 +32,16 @@ export class CoreInfiniteLoadingComponent implements OnChanges { @Input() position = 'bottom'; @Output() action: EventEmitter<() => void>; // Will emit an event when triggered. + @ViewChild('topbutton') topButton: ElementRef; + @ViewChild('infinitescroll') infiniteEl: ElementRef; + @ViewChild('bottombutton') bottomButton: ElementRef; + @ViewChild('spinnercontainer') spinnerContainer: ElementRef; + loadingMore = false; // Hide button and avoid loading more. protected infiniteScroll: InfiniteScroll; - constructor(@Optional() private content: Content) { + constructor(@Optional() private content: Content, private domUtils: CoreDomUtilsProvider) { this.action = new EventEmitter(); } @@ -77,6 +83,18 @@ export class CoreInfiniteLoadingComponent implements OnChanges { * Complete loading. */ complete(): void { + if (this.position == 'top') { + // Wait a bit before allowing loading more, otherwise it could be re-triggered automatically when it shouldn't. + setTimeout(this.completeLoadMore.bind(this), 400); + } else { + this.completeLoadMore(); + } + } + + /** + * Complete loading. + */ + protected completeLoadMore(): void { this.loadingMore = false; this.infiniteScroll && this.infiniteScroll.complete(); this.infiniteScroll = undefined; @@ -89,4 +107,28 @@ export class CoreInfiniteLoadingComponent implements OnChanges { }); } + /** + * Get the height of the element. + * + * @return {number} Height. + */ + getHeight(): number { + return this.getElementHeight(this.topButton) + this.getElementHeight(this.infiniteEl) + + this.getElementHeight(this.bottomButton) + this.getElementHeight(this.spinnerContainer); + } + + /** + * Get the height of an element. + * + * @param {ElementRef} element Element ref. + * @return {number} Height. + */ + protected getElementHeight(element: ElementRef): number { + if (element && element.nativeElement) { + return this.domUtils.getElementHeight(element.nativeElement, true, true, true); + } + + return 0; + } + } From 94c1f4fd0dc457d41bb1b8bd78712a8fa2a04fd3 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 10 Apr 2019 13:26:09 +0200 Subject: [PATCH 053/263] MOBILE-2962 user: Display online status for current user --- src/components/user-avatar/user-avatar.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/user-avatar/user-avatar.ts b/src/components/user-avatar/user-avatar.ts index cb1243e1d..a8e9d6bc7 100644 --- a/src/components/user-avatar/user-avatar.ts +++ b/src/components/user-avatar/user-avatar.ts @@ -44,7 +44,6 @@ export class CoreUserAvatarComponent implements OnInit, OnChanges, OnDestroy { // Variable to check if we consider this user online or not. // @TODO: Use setting when available (see MDL-63972) so we can use site setting. protected timetoshowusers = 300000; // Miliseconds default. - protected myUser = false; protected currentUserId: number; protected pictureObs; @@ -91,9 +90,6 @@ export class CoreUserAvatarComponent implements OnInit, OnChanges, OnDestroy { this.userId = this.userId || (this.user && (this.user.userid || this.user.id)); this.courseId = this.courseId || (this.user && this.user.courseid); - - // If not available we cannot ensure the avatar is from the current user. - this.myUser = this.userId && this.userId == this.currentUserId; } /** @@ -102,7 +98,7 @@ export class CoreUserAvatarComponent implements OnInit, OnChanges, OnDestroy { * @return boolean */ isOnline(): boolean { - if (this.myUser || this.utils.isFalseOrZero(this.user.isonline)) { + if (this.utils.isFalseOrZero(this.user.isonline)) { return false; } From e01dfefbe723d14b61cf8b608b33f5278bd9ccee Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 11 Apr 2019 16:05:08 +0200 Subject: [PATCH 054/263] MOBILE-2982 lang: Fix load lang strings for plugins --- src/providers/lang.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/providers/lang.ts b/src/providers/lang.ts index 266421412..04f8283ee 100644 --- a/src/providers/lang.ts +++ b/src/providers/lang.ts @@ -58,7 +58,7 @@ export class CoreLangProvider { * @param {string} [prefix] A prefix to add to all keys. */ addSitePluginsStrings(lang: string, strings: any, prefix?: string): void { - lang = lang.replace('_', '-'); // Use the app format instead of Moodle format. + lang = lang.replace(/_/g, '-'); // Use the app format instead of Moodle format. // Initialize structure if it doesn't exist. if (!this.sitePluginsStrings[lang]) { @@ -307,7 +307,7 @@ export class CoreLangProvider { return; } - lang = values[2].replace('_', '-'); // Use the app format instead of Moodle format. + lang = values[2].replace(/_/g, '-'); // Use the app format instead of Moodle format. if (!this.customStrings[lang]) { this.customStrings[lang] = {}; @@ -363,7 +363,7 @@ export class CoreLangProvider { * @param {string} value String value. */ loadString(langObject: any, lang: string, key: string, value: string): void { - lang = lang.replace('_', '-'); // Use the app format instead of Moodle format. + lang = lang.replace(/_/g, '-'); // Use the app format instead of Moodle format. if (this.translate.translations[lang]) { // The language is loaded. From 6eab6068f4bb3eb21a71f28bce59ee5f3b0c74ff Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 9 Apr 2019 15:35:24 +0200 Subject: [PATCH 055/263] MOBILE-2978 forum: Private reply --- scripts/langindex.json | 2 + .../components/post/addon-mod-forum-post.html | 9 +++- src/addon/mod/forum/components/post/post.ts | 15 +++++- src/addon/mod/forum/lang/en.json | 2 + .../forum/pages/discussion/discussion.html | 6 +-- .../mod/forum/pages/discussion/discussion.ts | 15 +++++- src/addon/mod/forum/providers/forum.ts | 52 +++++++++++++++++++ src/addon/mod/forum/providers/helper.ts | 7 ++- .../mod/forum/providers/prefetch-handler.ts | 11 +++- src/assets/lang/en.json | 3 ++ 10 files changed, 112 insertions(+), 10 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index d86efa26d..37f6829ca 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -496,7 +496,9 @@ "addon.mod_forum.modulenameplural": "forum", "addon.mod_forum.numdiscussions": "local_moodlemobileapp", "addon.mod_forum.numreplies": "local_moodlemobileapp", + "addon.mod_forum.postisprivatereply": "forum", "addon.mod_forum.posttoforum": "forum", + "addon.mod_forum.privatereply": "forum", "addon.mod_forum.re": "forum", "addon.mod_forum.refreshdiscussions": "local_moodlemobileapp", "addon.mod_forum.refreshposts": "local_moodlemobileapp", diff --git a/src/addon/mod/forum/components/post/addon-mod-forum-post.html b/src/addon/mod/forum/components/post/addon-mod-forum-post.html index 6592dabb2..3c827084a 100644 --- a/src/addon/mod/forum/components/post/addon-mod-forum-post.html +++ b/src/addon/mod/forum/components/post/addon-mod-forum-post.html @@ -13,6 +13,9 @@ +
+ {{ 'addon.mod_forum.postisprivatereply' | translate }} +
@@ -25,7 +28,7 @@ - + @@ -45,6 +48,10 @@ + + {{ 'addon.mod_forum.privatereply' | translate }} + + diff --git a/src/addon/mod/forum/components/post/post.ts b/src/addon/mod/forum/components/post/post.ts index d245ddff0..454d80ab5 100644 --- a/src/addon/mod/forum/components/post/post.ts +++ b/src/addon/mod/forum/components/post/post.ts @@ -44,6 +44,7 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy { @Input() originalData: any; // Object with the original post data. Usually shared between posts. @Input() trackPosts: boolean; // True if post is being tracked. @Input() forum: any; // The forum the post belongs to. Required for attachments and offline posts. + @Input() accessInfo: any; // Forum access information. @Input() defaultSubject: string; // Default subject to set to new posts. @Input() ratingInfo?: CoreRatingInfo; // Rating info item. @Output() onPostChange: EventEmitter; // Event emitted when a reply is posted or modified. @@ -95,9 +96,11 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy { * @param {boolean} [isEditing] True it's an offline reply beeing edited, false otherwise. * @param {string} [subject] Subject of the reply. * @param {string} [message] Message of the reply. + * @param {boolean} [isPrivate] True if it's private reply. * @param {any[]} [files] Reply attachments. */ - protected setReplyData(replyingTo?: number, isEditing?: boolean, subject?: string, message?: string, files?: any[]): void { + protected setReplyData(replyingTo?: number, isEditing?: boolean, subject?: string, message?: string, files?: any[], + isPrivate?: boolean): void { // Delete the local files from the tmp folder if any. this.uploaderProvider.clearTmpFiles(this.replyData.files); @@ -106,6 +109,7 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy { this.replyData.subject = subject || this.defaultSubject || ''; this.replyData.message = message || null; this.replyData.files = files || []; + this.replyData.isprivatereply = !!isPrivate; // Update rich text editor. this.messageControl.setValue(this.replyData.message); @@ -114,6 +118,7 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy { this.originalData.subject = this.replyData.subject; this.originalData.message = this.replyData.message; this.originalData.files = this.replyData.files.slice(); + this.originalData.isprivatereply = this.replyData.isprivatereply; } /** @@ -163,7 +168,8 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy { this.syncId = this.forumSync.getDiscussionSyncId(this.discussionId); this.syncProvider.blockOperation(AddonModForumProvider.COMPONENT, this.syncId); - this.setReplyData(this.post.parent, true, this.post.subject, this.post.message, this.post.attachments); + this.setReplyData(this.post.parent, true, this.post.subject, this.post.message, this.post.attachments, + this.post.isprivatereply); }).catch(() => { // Cancelled. }); @@ -206,6 +212,11 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy { // Add some HTML to the message if needed. message = this.textUtils.formatHtmlLines(message); + // Set private option if checked. + if (this.replyData.isprivatereply) { + options.private = true; + } + // Upload attachments first if any. if (files.length) { promise = this.forumHelper.uploadOrStoreReplyFiles(this.forum.id, replyingTo, files, false).catch((error) => { diff --git a/src/addon/mod/forum/lang/en.json b/src/addon/mod/forum/lang/en.json index 214e828d0..c0ae05283 100644 --- a/src/addon/mod/forum/lang/en.json +++ b/src/addon/mod/forum/lang/en.json @@ -24,7 +24,9 @@ "modulenameplural": "Forums", "numdiscussions": "{{numdiscussions}} discussions", "numreplies": "{{numreplies}} replies", + "postisprivatereply": "This post was made privately and is not visible to all users.", "posttoforum": "Post to forum", + "privatereply": "Reply privately", "re": "Re:", "refreshdiscussions": "Refresh discussions", "refreshposts": "Refresh posts", diff --git a/src/addon/mod/forum/pages/discussion/discussion.html b/src/addon/mod/forum/pages/discussion/discussion.html index 01be9ede2..99adf295a 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.html +++ b/src/addon/mod/forum/pages/discussion/discussion.html @@ -31,13 +31,13 @@ - + - + @@ -49,7 +49,7 @@ - +
diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index 7cf56cdf0..48c5949ba 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -47,6 +47,7 @@ export class AddonModForumDiscussionPage implements OnDestroy { courseId: number; discussionId: number; forum: any; + accessInfo: any; discussion: any; posts: any[]; discussionLoaded = false; @@ -63,11 +64,13 @@ export class AddonModForumDiscussionPage implements OnDestroy { subject: '', message: null, // Null means empty or just white space. files: [], + isprivatereply: false, }; originalData = { subject: null, // Null means original data is not set. message: null, // Null means empty or just white space. files: [], + isprivatereply: false, }; refreshIcon = 'spinner'; syncIcon = 'spinner'; @@ -318,9 +321,14 @@ export class AddonModForumDiscussionPage implements OnDestroy { this.forumId = forum.id; this.cmId = forum.cmid; this.forum = forum; + }).then(() => { + return this.forumProvider.getAccessInformation(this.forum.id).then((accessInfo) => { + this.accessInfo = accessInfo; + }); }).catch(() => { // Ignore errors. this.forum = {}; + this.accessInfo = {}; }); }).then(() => { return this.ratingOffline.hasRatings('mod_forum', 'post', 'module', this.cmId, this.discussionId).then((hasRatings) => { @@ -420,7 +428,12 @@ export class AddonModForumDiscussionPage implements OnDestroy { this.refreshIcon = 'spinner'; this.syncIcon = 'spinner'; - return this.forumProvider.invalidateDiscussionPosts(this.discussionId).catch(() => { + const promises = [ + this.forumProvider.invalidateDiscussionPosts(this.discussionId), + this.forumProvider.invalidateAccessInformation(this.forumId) + ]; + + return this.utils.allPromises(promises).catch(() => { // Ignore errors. }).then(() => { return this.fetchPosts(sync, showErrors); diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index 83f1db720..e4bc9f978 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -79,6 +79,16 @@ export class AddonModForumProvider { return this.ROOT_CACHE_KEY + 'forum:' + courseId; } + /** + * Get cache key for forum access information WS calls. + * + * @param {number} forumId Forum ID. + * @return {string} Cache key. + */ + protected getAccessInformationCacheKey(forumId: number): string { + return this.ROOT_CACHE_KEY + 'accessInformation:' + forumId; + } + /** * Get cache key for forum discussion posts WS calls. * @@ -365,6 +375,34 @@ export class AddonModForumProvider { }); } + /** + * Get access information for a given forum. + * + * @param {number} forumId Forum ID. + * @param {boolean} [forceCache] True to always get the value from cache. false otherwise. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Object with access information. + * @since 3.7 + */ + getAccessInformation(forumId: number, forceCache?: boolean, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + if (!site.wsAvailable('mod_forum_get_forum_access_information')) { + // Access information not available for 3.6 or older sites. + return Promise.resolve({}); + } + + const params = { + forumid: forumId + }; + const preSets = { + cacheKey: this.getAccessInformationCacheKey(forumId), + omitExpires: forceCache + }; + + return site.read('mod_forum_get_forum_access_information', params, preSets); + }); + } + /** * Get forum discussion posts. * @@ -537,6 +575,7 @@ export class AddonModForumProvider { promises.push(this.invalidateForumData(courseId)); promises.push(this.invalidateDiscussionsList(forum.id)); promises.push(this.invalidateCanAddDiscussion(forum.id)); + promises.push(this.invalidateAccessInformation(forum.id)); response.discussions.forEach((discussion) => { promises.push(this.invalidateDiscussionPosts(discussion.discussion)); @@ -547,6 +586,19 @@ export class AddonModForumProvider { }); } + /** + * Invalidates access information. + * + * @param {number} forumId Forum ID. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when the data is invalidated. + */ + invalidateAccessInformation(forumId: number, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return site.invalidateWsCacheForKey(this.getAccessInformationCacheKey(forumId)); + }); + } + /** * Invalidates forum discussion posts. * diff --git a/src/addon/mod/forum/providers/helper.ts b/src/addon/mod/forum/providers/helper.ts index e039cdf7b..d33c6ef28 100644 --- a/src/addon/mod/forum/providers/helper.ts +++ b/src/addon/mod/forum/providers/helper.ts @@ -54,7 +54,8 @@ export class AddonModForumHelperProvider { postread: false, subject: offlineReply.subject, totalscore: 0, - userid: offlineReply.userid + userid: offlineReply.userid, + isprivatereply: offlineReply.options && offlineReply.options.private }, promises = []; @@ -164,6 +165,10 @@ export class AddonModForumHelperProvider { return true; } + if (post.isprivatereply != original.isprivatereply) { + return true; + } + return this.uploaderProvider.areFileListDifferent(post.files, original.files); } diff --git a/src/addon/mod/forum/providers/prefetch-handler.ts b/src/addon/mod/forum/providers/prefetch-handler.ts index 03e60a6ba..a3f70f913 100644 --- a/src/addon/mod/forum/providers/prefetch-handler.ts +++ b/src/addon/mod/forum/providers/prefetch-handler.ts @@ -183,8 +183,10 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand protected prefetchForum(module: any, courseId: number, single: boolean, siteId: string): Promise { // Get the forum data. return this.forumProvider.getForum(courseId, module.id).then((forum) => { + const promises = []; + // Prefetch the posts. - return this.getPostsForPrefetch(forum).then((posts) => { + promises.push(this.getPostsForPrefetch(forum).then((posts) => { const promises = []; // Prefetch user profiles. @@ -201,7 +203,12 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand promises.push(this.prefetchGroupsInfo(forum, courseId, forum.cancreatediscussions)); return Promise.all(promises); - }); + })); + + // Prefetch access information. + promises.push(this.forumProvider.getAccessInformation(forum.id)); + + return Promise.all(promises); }); } diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 8fd9e1499..782fa21f1 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -496,7 +496,9 @@ "addon.mod_forum.modulenameplural": "Forums", "addon.mod_forum.numdiscussions": "{{numdiscussions}} discussions", "addon.mod_forum.numreplies": "{{numreplies}} replies", + "addon.mod_forum.postisprivatereply": "This post was made privately and is not visible to all users.", "addon.mod_forum.posttoforum": "Post to forum", + "addon.mod_forum.privatereply": "Reply privately", "addon.mod_forum.re": "Re:", "addon.mod_forum.refreshdiscussions": "Refresh discussions", "addon.mod_forum.refreshposts": "Refresh posts", @@ -1342,6 +1344,7 @@ "core.favourites": "Starred", "core.filename": "Filename", "core.filenameexist": "File name already exists: {{$a}}", + "core.filenotfound": "File not found, sorry.", "core.fileuploader.addfiletext": "Add file", "core.fileuploader.audio": "Audio", "core.fileuploader.camera": "Camera", From dd4688f3d475b76f66af41138063d3ac4450e390 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 18 Apr 2019 08:51:28 +0200 Subject: [PATCH 056/263] MOBILE-2984 config: Allow overriding site name --- src/assets/lang/en.json | 1 + src/classes/site.ts | 14 ++++++++++++++ src/config.json | 1 + src/core/courses/pages/dashboard/dashboard.ts | 2 +- src/core/login/pages/credentials/credentials.ts | 3 ++- src/core/login/pages/email-signup/email-signup.ts | 3 ++- src/core/login/pages/reconnect/reconnect.ts | 2 +- src/core/mainmenu/pages/more/more.html | 2 +- src/core/mainmenu/pages/more/more.ts | 2 ++ .../pages/synchronization/synchronization.ts | 2 +- src/providers/sites.ts | 2 +- 11 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 8fd9e1499..8e7ff5128 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -1342,6 +1342,7 @@ "core.favourites": "Starred", "core.filename": "Filename", "core.filenameexist": "File name already exists: {{$a}}", + "core.filenotfound": "File not found, sorry.", "core.fileuploader.addfiletext": "Add file", "core.fileuploader.audio": "Audio", "core.fileuploader.camera": "Camera", diff --git a/src/classes/site.ts b/src/classes/site.ts index b9068bd13..2bf7c2c69 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -305,6 +305,20 @@ export class CoreSite { return this.infos && this.infos.siteid || 1; } + /** + * Get site name. + * + * @return {string} Site name. + */ + getSiteName(): string { + if (CoreConfigConstants.sitename) { + // Overridden by config. + return CoreConfigConstants.sitename; + } else { + return this.infos && this.infos.sitename || ''; + } + } + /** * Set site ID. * diff --git a/src/config.json b/src/config.json index 0c50767de..5fed47bf6 100644 --- a/src/config.json +++ b/src/config.json @@ -67,6 +67,7 @@ }, "customurlscheme": "moodlemobile", "siteurl": "", + "sitename": "", "multisitesdisplay": "", "skipssoconfirmation": false, "forcedefaultlanguage": false, diff --git a/src/core/courses/pages/dashboard/dashboard.ts b/src/core/courses/pages/dashboard/dashboard.ts index fccd91e7b..6171a18ed 100644 --- a/src/core/courses/pages/dashboard/dashboard.ts +++ b/src/core/courses/pages/dashboard/dashboard.ts @@ -131,7 +131,7 @@ export class CoreCoursesDashboardPage implements OnDestroy { * Load the site name. */ protected loadSiteName(): void { - this.siteName = this.sitesProvider.getCurrentSite().getInfo().sitename; + this.siteName = this.sitesProvider.getCurrentSite().getSiteName(); } /** diff --git a/src/core/login/pages/credentials/credentials.ts b/src/core/login/pages/credentials/credentials.ts index 6297b353b..b061c58c4 100644 --- a/src/core/login/pages/credentials/credentials.ts +++ b/src/core/login/pages/credentials/credentials.ts @@ -24,6 +24,7 @@ import { CoreLoginHelperProvider } from '../../providers/helper'; import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { CoreConfigConstants } from '../../../../configconstants'; /** * Page to enter the user credentials. @@ -142,7 +143,7 @@ export class CoreLoginCredentialsPage { */ protected treatSiteConfig(): void { if (this.siteConfig) { - this.siteName = this.siteConfig.sitename; + this.siteName = CoreConfigConstants.sitename ? CoreConfigConstants.sitename : this.siteConfig.sitename; this.logoUrl = this.siteConfig.logourl || this.siteConfig.compactlogourl; this.authInstructions = this.siteConfig.authinstructions || this.translate.instant('core.login.loginsteps'); this.canSignup = this.siteConfig.registerauth == 'email' && !this.loginHelper.isEmailSignupDisabled(this.siteConfig); diff --git a/src/core/login/pages/email-signup/email-signup.ts b/src/core/login/pages/email-signup/email-signup.ts index b038da362..128a37f67 100644 --- a/src/core/login/pages/email-signup/email-signup.ts +++ b/src/core/login/pages/email-signup/email-signup.ts @@ -23,6 +23,7 @@ import { CoreWSProvider } from '@providers/ws'; import { CoreLoginHelperProvider } from '../../providers/helper'; import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms'; import { CoreUserProfileFieldDelegate } from '@core/user/providers/user-profile-field-delegate'; +import { CoreConfigConstants } from '../../../../configconstants'; /** * Page to signup using email. @@ -191,7 +192,7 @@ export class CoreLoginEmailSignupPage { */ protected treatSiteConfig(siteConfig: any): boolean { if (siteConfig && siteConfig.registerauth == 'email' && !this.loginHelper.isEmailSignupDisabled(siteConfig)) { - this.siteName = siteConfig.sitename; + this.siteName = CoreConfigConstants.sitename ? CoreConfigConstants.sitename : siteConfig.sitename; this.authInstructions = siteConfig.authinstructions; this.ageDigitalConsentVerification = siteConfig.agedigitalconsentverification; this.supportName = siteConfig.supportname; diff --git a/src/core/login/pages/reconnect/reconnect.ts b/src/core/login/pages/reconnect/reconnect.ts index 03f17efa8..4114678c4 100644 --- a/src/core/login/pages/reconnect/reconnect.ts +++ b/src/core/login/pages/reconnect/reconnect.ts @@ -80,7 +80,7 @@ export class CoreLoginReconnectPage { this.username = site.infos.username; this.siteUrl = site.infos.siteurl; - this.siteName = site.infos.sitename; + this.siteName = site.getSiteName(); // Check logoURL if user avatar is not set. if (this.site.avatar.startsWith(site.infos.siteurl + '/theme/image.php')) { diff --git a/src/core/mainmenu/pages/more/more.html b/src/core/mainmenu/pages/more/more.html index 02e3ec7d6..e723bc44a 100644 --- a/src/core/mainmenu/pages/more/more.html +++ b/src/core/mainmenu/pages/more/more.html @@ -1,6 +1,6 @@ - + diff --git a/src/core/mainmenu/pages/more/more.ts b/src/core/mainmenu/pages/more/more.ts index 869b7f9ed..9027f7012 100644 --- a/src/core/mainmenu/pages/more/more.ts +++ b/src/core/mainmenu/pages/more/more.ts @@ -31,6 +31,7 @@ export class CoreMainMenuMorePage implements OnDestroy { handlers: CoreMainMenuHandlerData[]; handlersLoaded: boolean; siteInfo: any; + siteName: string; logoutLabel: string; showWeb: boolean; showHelp: boolean; @@ -91,6 +92,7 @@ export class CoreMainMenuMorePage implements OnDestroy { config = currentSite.getStoredConfig(); this.siteInfo = currentSite.getInfo(); + this.siteName = currentSite.getSiteName(); this.logoutLabel = 'core.mainmenu.' + (config && config.tool_mobile_forcelogout == '1' ? 'logout' : 'changesite'); this.showWeb = !currentSite.isFeatureDisabled('CoreMainMenuDelegate_website'); this.showHelp = !currentSite.isFeatureDisabled('CoreMainMenuDelegate_help'); diff --git a/src/core/settings/pages/synchronization/synchronization.ts b/src/core/settings/pages/synchronization/synchronization.ts index 48c7299ab..e6c81b5e7 100644 --- a/src/core/settings/pages/synchronization/synchronization.ts +++ b/src/core/settings/pages/synchronization/synchronization.ts @@ -50,7 +50,7 @@ export class CoreSettingsSynchronizationPage implements OnDestroy { const siteEntry = this.sites.find((siteEntry) => siteEntry.id == site.id); if (siteEntry) { siteEntry.siteUrl = siteInfo.siteurl; - siteEntry.siteName = siteInfo.sitename; + siteEntry.siteName = site.getSiteName(); siteEntry.fullName = siteInfo.fullname; } }); diff --git a/src/providers/sites.ts b/src/providers/sites.ts index 9ae995e8b..abd23fad7 100644 --- a/src/providers/sites.ts +++ b/src/providers/sites.ts @@ -1009,7 +1009,7 @@ export class CoreSitesProvider { id: site.id, siteUrl: site.siteUrl, fullName: siteInfo && siteInfo.fullname, - siteName: siteInfo && siteInfo.sitename, + siteName: CoreConfigConstants.sitename ? CoreConfigConstants.sitename : siteInfo && siteInfo.sitename, avatar: siteInfo && siteInfo.userpictureurl }; formattedSites.push(basicInfo); From c712703ece6025d08fa3ffa0f3ce6c76de0086b8 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 18 Apr 2019 10:12:37 +0200 Subject: [PATCH 057/263] MOBILE-2955 quiz: Update page when download finishes --- src/addon/mod/quiz/components/index/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/addon/mod/quiz/components/index/index.ts b/src/addon/mod/quiz/components/index/index.ts index 2ccfb71f7..30851c387 100644 --- a/src/addon/mod/quiz/components/index/index.ts +++ b/src/addon/mod/quiz/components/index/index.ts @@ -511,6 +511,12 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp */ protected showStatus(status: string, previousStatus?: string): void { this.showStatusSpinner = status == CoreConstants.DOWNLOADING; + + if (status == CoreConstants.DOWNLOADED && previousStatus == CoreConstants.DOWNLOADING) { + // Quiz downloaded now, maybe a new attempt was created. Load content again. + this.loaded = false; + this.loadContent(); + } } /** From 3ec25faf65be28ab90e5fa447bc41b5fb860efa7 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 18 Apr 2019 12:47:01 +0200 Subject: [PATCH 058/263] MOBILE-2817 lesson: Remove continue button if not needed --- src/addon/mod/lesson/pages/player/player.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/addon/mod/lesson/pages/player/player.ts b/src/addon/mod/lesson/pages/player/player.ts index 10e5e3ab0..ab32eb9d6 100644 --- a/src/addon/mod/lesson/pages/player/player.ts +++ b/src/addon/mod/lesson/pages/player/player.ts @@ -570,10 +570,15 @@ export class AddonModLessonPlayerPage implements OnInit, OnDestroy { // Button to continue. if (this.lesson.review && !result.correctanswer && !result.noanswer && !result.isessayquestion && !result.maxattemptsreached) { - this.processData.buttons.push({ - label: 'addon.mod_lesson.reviewquestioncontinue', - pageId: result.newpageid - }); + /* If both the "Yes, I'd like to try again" and "No, I just want to go on to the next question" point to the + same page then don't show the "No, I just want to go on to the next question" button. It's confusing. */ + if (this.pageData.page.id != result.newpageid) { + // Button to continue the lesson (the page to go is configured by the teacher). + this.processData.buttons.push({ + label: 'addon.mod_lesson.reviewquestioncontinue', + pageId: result.newpageid + }); + } } else { this.processData.buttons.push({ label: 'addon.mod_lesson.continue', From 4edf05d975f6198278fe8bc6d1db0da8ecdb33d4 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 18 Apr 2019 13:04:36 +0200 Subject: [PATCH 059/263] MOBILE-2817 lesson: Support new 'Other answers' option --- src/addon/mod/lesson/providers/lesson.ts | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/addon/mod/lesson/providers/lesson.ts b/src/addon/mod/lesson/providers/lesson.ts index a364d1693..bfad310ed 100644 --- a/src/addon/mod/lesson/providers/lesson.ts +++ b/src/addon/mod/lesson/providers/lesson.ts @@ -156,6 +156,8 @@ export class AddonModLessonProvider { */ static MULTIANSWER_DELIMITER = '@^#|'; + static LESSON_OTHER_ANSWERS = '@#wronganswer#@'; + // Variables for database. static PASSWORD_TABLE = 'addon_mod_lesson_password'; protected siteSchema: CoreSiteSchema = { @@ -793,6 +795,8 @@ export class AddonModLessonProvider { break; } } + + this.checkOtherAnswers(lesson, pageData, result); } /** @@ -907,6 +911,8 @@ export class AddonModLessonProvider { } } + this.checkOtherAnswers(lesson, pageData, result); + result.userresponse = studentAnswer; result.studentanswer = this.textUtils.s(studentAnswer); // Clean student answer as it goes to output. } @@ -945,6 +951,33 @@ export class AddonModLessonProvider { } } + /** + * Check the "other answers" value. + * + * @param {any} lesson Lesson. + * @param {any} pageData Result of getPageData for the page to process. + * @param {AddonModLessonCheckAnswerResult} result Object where to store the result. + */ + protected checkOtherAnswers(lesson: any, pageData: any, result: AddonModLessonCheckAnswerResult): void { + // We could check here to see if we have a wrong answer jump to use. + if (result.answerid == 0) { + // Use the all other answers jump details if it is set up. + const lastAnswer = pageData.answers[pageData.answers.length - 1] || {}; + + // Double check that this is the OTHER_ANSWERS answer. + if (typeof lastAnswer.answer == 'string' && + lastAnswer.answer.indexOf(AddonModLessonProvider.LESSON_OTHER_ANSWERS) != -1) { + result.newpageid = lastAnswer.jumpto; + result.response = lastAnswer.response; + + if (lesson.custom) { + result.correctanswer = lastAnswer.score > 0; + } + result.answerid = lastAnswer.id; + } + } + } + /** * Create a list of pages indexed by page ID based on a list of pages. * From 40e22638419988a7a1a9437b45c294a515c53c09 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 23 Apr 2019 09:37:53 +0200 Subject: [PATCH 060/263] MOBILE-2954 config: Disable Firebase analytics --- config.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config.xml b/config.xml index 9601f2cdf..4b3c43d65 100644 --- a/config.xml +++ b/config.xml @@ -146,6 +146,12 @@ + + + + + YES + From 7b479c8b151b2accfc8c1709424a8c6a7fc7cad9 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 24 Apr 2019 13:43:10 +0200 Subject: [PATCH 061/263] MOBILE-2944 course: Hide completion for teachers --- src/core/course/components/format/core-course-format.html | 2 +- src/core/course/pages/section-selector/section-selector.ts | 3 ++- .../course-progress/core-courses-course-progress.html | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/course/components/format/core-course-format.html b/src/core/course/components/format/core-course-format.html index cf1712652..6a022a002 100644 --- a/src/core/course/components/format/core-course-format.html +++ b/src/core/course/components/format/core-course-format.html @@ -27,7 +27,7 @@
- + diff --git a/src/core/course/pages/section-selector/section-selector.ts b/src/core/course/pages/section-selector/section-selector.ts index f438ceef9..6186fe8ca 100644 --- a/src/core/course/pages/section-selector/section-selector.ts +++ b/src/core/course/pages/section-selector/section-selector.ts @@ -36,7 +36,8 @@ export class CoreCourseSectionSelectorPage { this.selected = navParams.get('selected'); const course = navParams.get('course'); - if (course && course.enablecompletion && course.courseformatoptions && course.courseformatoptions.coursedisplay == 1) { + if (course && course.enablecompletion && course.courseformatoptions && course.courseformatoptions.coursedisplay == 1 && + course.completionusertracked !== false) { this.sections.forEach((section) => { let complete = 0, total = 0; diff --git a/src/core/courses/components/course-progress/core-courses-course-progress.html b/src/core/courses/components/course-progress/core-courses-course-progress.html index 4e2757ebb..ed633bbac 100644 --- a/src/core/courses/components/course-progress/core-courses-course-progress.html +++ b/src/core/courses/components/course-progress/core-courses-course-progress.html @@ -30,7 +30,7 @@
- + From ec6332583c1679a9c8578ff7d35a94a3c8e3567e Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 25 Apr 2019 14:49:56 +0200 Subject: [PATCH 062/263] MOBILE-2994 lesson: Prefetch embedded files in essays --- .../mod/lesson/providers/prefetch-handler.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/lesson/providers/prefetch-handler.ts b/src/addon/mod/lesson/providers/prefetch-handler.ts index 3660a90cd..8fba4a13c 100644 --- a/src/addon/mod/lesson/providers/prefetch-handler.ts +++ b/src/addon/mod/lesson/providers/prefetch-handler.ts @@ -388,7 +388,24 @@ export class AddonModLessonPrefetchHandler extends CoreCourseActivityPrefetchHan } retakePromises.push(this.lessonProvider.getUserRetake(lesson.id, lastRetake.try, student.id, false, - true, siteId)); + true, siteId).then((attempt) => { + if (!attempt || !attempt.answerpages) { + return; + } + + // Download embedded files in essays. + const files = []; + attempt.answerpages.forEach((answerPage) => { + if (answerPage.page.qtype != AddonModLessonProvider.LESSON_PAGE_ESSAY) { + return; + } + answerPage.answerdata.answers.forEach((answer) => { + files.push(...this.domUtils.extractDownloadableFilesFromHtmlAsFakeFileObjects(answer[0])); + }); + }); + + return this.filepoolProvider.addFilesToQueue(siteId, files, this.component, module.id); + })); }); return Promise.all(retakePromises); From 17107911143e86841d02830d928df36c265c3b8b Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 25 Apr 2019 14:51:05 +0200 Subject: [PATCH 063/263] MOBILE-2994 lesson: Teachers can prefetch all lessons --- .../mod/lesson/providers/prefetch-handler.ts | 105 +++++++++--------- 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/src/addon/mod/lesson/providers/prefetch-handler.ts b/src/addon/mod/lesson/providers/prefetch-handler.ts index 8fba4a13c..a4d46c0cb 100644 --- a/src/addon/mod/lesson/providers/prefetch-handler.ts +++ b/src/addon/mod/lesson/providers/prefetch-handler.ts @@ -211,12 +211,12 @@ export class AddonModLessonPrefetchHandler extends CoreCourseActivityPrefetchHan const siteId = this.sitesProvider.getCurrentSiteId(); return this.lessonProvider.getLesson(courseId, module.id, false, false, siteId).then((lesson) => { - if (!this.lessonProvider.isLessonOffline(lesson)) { - return false; - } - // Check if there is any prevent access reason. return this.lessonProvider.getAccessInformation(lesson.id, false, false, siteId).then((info) => { + if (!info.canviewreports && !this.lessonProvider.isLessonOffline(lesson)) { + return false; + } + // It's downloadable if there are no prevent access reasons or there is just 1 and it's password. return !info.preventaccessreasons || !info.preventaccessreasons.length || (info.preventaccessreasons.length == 1 && this.lessonProvider.isPasswordProtected(info)); @@ -270,7 +270,7 @@ export class AddonModLessonPrefetchHandler extends CoreCourseActivityPrefetchHan lesson = data.lesson || lesson; accessInfo = data.accessInfo; - if (!this.lessonProvider.leftDuringTimed(accessInfo)) { + if (this.lessonProvider.isLessonOffline(lesson) && !this.lessonProvider.leftDuringTimed(accessInfo)) { // The user didn't left during a timed session. Call launch retake to make sure there is a started retake. return this.lessonProvider.launchRetake(lesson.id, password, undefined, false, siteId).then(() => { const promises = []; @@ -298,65 +298,68 @@ export class AddonModLessonPrefetchHandler extends CoreCourseActivityPrefetchHan promises.push(this.filepoolProvider.addFilesToQueue(siteId, files, this.component, module.id)); // Get the list of pages. - promises.push(this.lessonProvider.getPages(lesson.id, password, false, true, siteId).then((pages) => { - const subPromises = []; - let hasRandomBranch = false; + if (this.lessonProvider.isLessonOffline(lesson)) { + promises.push(this.lessonProvider.getPages(lesson.id, password, false, true, siteId).then((pages) => { + const subPromises = []; + let hasRandomBranch = false; - // Get the data for each page. - pages.forEach((data) => { - // Check if any page has a RANDOMBRANCH jump. - if (!hasRandomBranch) { - for (let i = 0; i < data.jumps.length; i++) { - if (data.jumps[i] == AddonModLessonProvider.LESSON_RANDOMBRANCH) { - hasRandomBranch = true; - break; + // Get the data for each page. + pages.forEach((data) => { + // Check if any page has a RANDOMBRANCH jump. + if (!hasRandomBranch) { + for (let i = 0; i < data.jumps.length; i++) { + if (data.jumps[i] == AddonModLessonProvider.LESSON_RANDOMBRANCH) { + hasRandomBranch = true; + break; + } } } - } - // Get the page data. We don't pass accessInfo because we don't need to calculate the offline data. - subPromises.push(this.lessonProvider.getPageData(lesson, data.page.id, password, false, true, false, - true, undefined, undefined, siteId).then((pageData) => { + // Get the page data. We don't pass accessInfo because we don't need to calculate the offline data. + subPromises.push(this.lessonProvider.getPageData(lesson, data.page.id, password, false, true, false, + true, undefined, undefined, siteId).then((pageData) => { - // Download the page files. - let pageFiles = pageData.contentfiles || []; + // Download the page files. + let pageFiles = pageData.contentfiles || []; - pageData.answers.forEach((answer) => { - if (answer.answerfiles && answer.answerfiles.length) { - pageFiles = pageFiles.concat(answer.answerfiles); - } - if (answer.responsefiles && answer.responsefiles.length) { - pageFiles = pageFiles.concat(answer.responsefiles); - } - }); + pageData.answers.forEach((answer) => { + if (answer.answerfiles && answer.answerfiles.length) { + pageFiles = pageFiles.concat(answer.answerfiles); + } + if (answer.responsefiles && answer.responsefiles.length) { + pageFiles = pageFiles.concat(answer.responsefiles); + } + }); - return this.filepoolProvider.addFilesToQueue(siteId, pageFiles, this.component, module.id); + return this.filepoolProvider.addFilesToQueue(siteId, pageFiles, this.component, module.id); + })); + }); + + // Prefetch the list of possible jumps for offline navigation. Do it here because we know hasRandomBranch. + subPromises.push(this.lessonProvider.getPagesPossibleJumps(lesson.id, false, true, siteId).catch((error) => { + if (hasRandomBranch) { + // The WebSevice probably failed because RANDOMBRANCH aren't supported if the user hasn't seen any page. + return Promise.reject(this.translate.instant('addon.mod_lesson.errorprefetchrandombranch')); + } else { + return Promise.reject(error); + } })); - }); - // Prefetch the list of possible jumps for offline navigation. Do it here because we know hasRandomBranch. - subPromises.push(this.lessonProvider.getPagesPossibleJumps(lesson.id, false, true, siteId).catch((error) => { - if (hasRandomBranch) { - // The WebSevice probably failed because RANDOMBRANCH aren't supported if the user hasn't seen any page. - return Promise.reject(this.translate.instant('addon.mod_lesson.errorprefetchrandombranch')); - } else { - return Promise.reject(error); - } + return Promise.all(subPromises); })); - return Promise.all(subPromises); - })); + // Prefetch user timers to be able to calculate timemodified in offline. + promises.push(this.lessonProvider.getTimers(lesson.id, false, true, siteId).catch(() => { + // Ignore errors. + })); - // Prefetch user timers to be able to calculate timemodified in offline. - promises.push(this.lessonProvider.getTimers(lesson.id, false, true, siteId).catch(() => { - // Ignore errors. - })); + // Prefetch viewed pages in last retake to calculate progress. + promises.push(this.lessonProvider.getContentPagesViewedOnline(lesson.id, retake, false, true, siteId)); - // Prefetch viewed pages in last retake to calculate progress. - promises.push(this.lessonProvider.getContentPagesViewedOnline(lesson.id, retake, false, true, siteId)); - - // Prefetch question attempts in last retake for offline calculations. - promises.push(this.lessonProvider.getQuestionsAttemptsOnline(lesson.id, retake, false, undefined, false, true, siteId)); + // Prefetch question attempts in last retake for offline calculations. + promises.push(this.lessonProvider.getQuestionsAttemptsOnline(lesson.id, retake, false, undefined, false, true, + siteId)); + } if (accessInfo.canviewreports) { // Prefetch reports data. From a34f3ae7a9da0c450aa9339aa8dbb96d11e32bb3 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 25 Apr 2019 16:31:17 +0200 Subject: [PATCH 064/263] MOBILE-2993 grades: Fix icon class parsing --- src/core/grades/providers/helper.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/grades/providers/helper.ts b/src/core/grades/providers/helper.ts index 8f206340d..e921cd9b7 100644 --- a/src/core/grades/providers/helper.ts +++ b/src/core/grades/providers/helper.ts @@ -449,8 +449,8 @@ export class CoreGradesHelperProvider { row['image'] = src[1]; } else if (text.indexOf(' -1) { row['itemtype'] = 'unknown'; - const src = text.match(/class="fa-([^ ]*)"/); - row['icon'] = src[1]; + const src = text.match(/ Date: Thu, 25 Apr 2019 16:36:17 +0200 Subject: [PATCH 065/263] MOBILE-2998 quiz: Fix drag and drop in Moodle 3.7 --- src/addon/mod/quiz/pages/player/player.html | 2 +- src/addon/mod/quiz/pages/review/review.html | 2 +- src/addon/mod/quiz/providers/prefetch-handler.ts | 4 ++-- src/addon/qtype/ddmarker/providers/handler.ts | 5 +++-- src/core/question/components/question/question.ts | 3 ++- src/core/question/providers/delegate.ts | 8 +++++--- src/core/question/providers/helper.ts | 12 ++++++++---- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/addon/mod/quiz/pages/player/player.html b/src/addon/mod/quiz/pages/player/player.html index 77795828b..62b15934f 100644 --- a/src/addon/mod/quiz/pages/player/player.html +++ b/src/addon/mod/quiz/pages/player/player.html @@ -58,7 +58,7 @@ - +
diff --git a/src/addon/mod/quiz/pages/review/review.html b/src/addon/mod/quiz/pages/review/review.html index f7682f1b2..3dba297ac 100644 --- a/src/addon/mod/quiz/pages/review/review.html +++ b/src/addon/mod/quiz/pages/review/review.html @@ -75,7 +75,7 @@ - +
diff --git a/src/addon/mod/quiz/providers/prefetch-handler.ts b/src/addon/mod/quiz/providers/prefetch-handler.ts index d292dc958..780064c7d 100644 --- a/src/addon/mod/quiz/providers/prefetch-handler.ts +++ b/src/addon/mod/quiz/providers/prefetch-handler.ts @@ -409,7 +409,7 @@ export class AddonModQuizPrefetchHandler extends CoreCourseActivityPrefetchHandl data.questions.forEach((question) => { questionPromises.push(this.questionHelper.prefetchQuestionFiles( - question, this.component, quiz.coursemodule, siteId)); + question, this.component, quiz.coursemodule, siteId, attempt.uniqueid)); }); return Promise.all(questionPromises); @@ -437,7 +437,7 @@ export class AddonModQuizPrefetchHandler extends CoreCourseActivityPrefetchHandl data.questions.forEach((question) => { questionPromises.push(this.questionHelper.prefetchQuestionFiles( - question, this.component, quiz.coursemodule, siteId)); + question, this.component, quiz.coursemodule, siteId, attempt.uniqueid)); }); return Promise.all(questionPromises); diff --git a/src/addon/qtype/ddmarker/providers/handler.ts b/src/addon/qtype/ddmarker/providers/handler.ts index aaf0c781f..38ecfd1ba 100644 --- a/src/addon/qtype/ddmarker/providers/handler.ts +++ b/src/addon/qtype/ddmarker/providers/handler.ts @@ -112,10 +112,11 @@ export class AddonQtypeDdMarkerHandler implements CoreQuestionHandler { * Get the list of files that needs to be downloaded in addition to the files embedded in the HTML. * * @param {any} question Question. + * @param {number} usageId Usage ID. * @return {string[]} List of URLs. */ - getAdditionalDownloadableFiles(question: any): string[] { - this.questionHelper.extractQuestionScripts(question); + getAdditionalDownloadableFiles(question: any, usageId: number): string[] { + this.questionHelper.extractQuestionScripts(question, usageId); if (question.amdArgs && typeof question.amdArgs[1] !== 'undefined') { // Moodle 3.6+. diff --git a/src/core/question/components/question/question.ts b/src/core/question/components/question/question.ts index 8e0129760..fbb31b6cf 100644 --- a/src/core/question/components/question/question.ts +++ b/src/core/question/components/question/question.ts @@ -34,6 +34,7 @@ export class CoreQuestionComponent implements OnInit { @Input() component: string; // The component the question belongs to. @Input() componentId: number; // ID of the component the question belongs to. @Input() attemptId: number; // Attempt ID. + @Input() usageId: number; // Usage ID. @Input() offlineEnabled?: boolean | string; // Whether the question can be answered in offline. @Output() buttonClicked: EventEmitter; // Will emit an event when a behaviour button is clicked. @Output() onAbort: EventEmitter; // Will emit an event if the question should be aborted. @@ -86,7 +87,7 @@ export class CoreQuestionComponent implements OnInit { }; // Treat the question. - this.questionHelper.extractQuestionScripts(this.question); + this.questionHelper.extractQuestionScripts(this.question, this.usageId); // Handle question behaviour. const behaviour = this.questionDelegate.getBehaviourForQuestion(this.question, this.question.preferredBehaviour); diff --git a/src/core/question/providers/delegate.ts b/src/core/question/providers/delegate.ts index 2d3451beb..3dc33326d 100644 --- a/src/core/question/providers/delegate.ts +++ b/src/core/question/providers/delegate.ts @@ -112,9 +112,10 @@ export interface CoreQuestionHandler extends CoreDelegateHandler { * Get the list of files that needs to be downloaded in addition to the files embedded in the HTML. * * @param {any} question Question. + * @param {number} usageId Usage ID. * @return {string[]} List of URLs. */ - getAdditionalDownloadableFiles?(question: any): string[]; + getAdditionalDownloadableFiles?(question: any, usageId: number): string[]; } /** @@ -274,11 +275,12 @@ export class CoreQuestionDelegate extends CoreDelegate { * Get the list of files that needs to be downloaded in addition to the files embedded in the HTML. * * @param {any} question Question. + * @param {number} usageId Usage ID. * @return {string[]} List of URLs. */ - getAdditionalDownloadableFiles(question: any): string[] { + getAdditionalDownloadableFiles(question: any, usageId: number): string[] { const type = this.getTypeName(question); - return this.executeFunctionOnEnabled(type, 'getAdditionalDownloadableFiles', [question]) || []; + return this.executeFunctionOnEnabled(type, 'getAdditionalDownloadableFiles', [question, usageId]) || []; } } diff --git a/src/core/question/providers/helper.ts b/src/core/question/providers/helper.ts index cb0fe8eb1..01f85c86e 100644 --- a/src/core/question/providers/helper.ts +++ b/src/core/question/providers/helper.ts @@ -239,8 +239,9 @@ export class CoreQuestionHelperProvider { * It will also search for init_question functions of the question type and add the object to an 'initObjects' property. * * @param {any} question Question. + * @param {number} usageId Usage ID. */ - extractQuestionScripts(question: any): void { + extractQuestionScripts(question: any, usageId: number): void { question.scriptsCode = ''; question.initObjects = null; question.amdArgs = null; @@ -272,7 +273,8 @@ export class CoreQuestionHelperProvider { } const amdRegExp = new RegExp('require\\(\\["qtype_' + question.type + '/question"\\], ' + - 'function\\(amd\\) \\{ amd\.init\\(("q' + question.slot + '".*?)\\); \\}\\);;', 'm'); + 'function\\(amd\\) \\{ amd\.init\\(("(q|question-' + usageId + '-)' + question.slot + + '".*?)\\); \\}\\);;', 'm'); const amdMatch = match.match(amdRegExp); if (amdMatch) { // Try to convert the arguments to an array and add them to the question. @@ -506,9 +508,11 @@ export class CoreQuestionHelperProvider { * @param {string} [component] The component to link the files to. If not defined, question component. * @param {string|number} [componentId] An ID to use in conjunction with the component. If not defined, question ID. * @param {string} [siteId] Site ID. If not defined, current site. + * @param {number} [usageId] Usage ID. Required in Moodle 3.7+. * @return {Promise} Promise resolved when all the files have been downloaded. */ - prefetchQuestionFiles(question: any, component?: string, componentId?: string | number, siteId?: string): Promise { + prefetchQuestionFiles(question: any, component?: string, componentId?: string | number, siteId?: string, usageId?: number) + : Promise { const urls = this.domUtils.extractDownloadableFilesFromHtml(question.html); if (!component) { @@ -516,7 +520,7 @@ export class CoreQuestionHelperProvider { componentId = question.id; } - urls.push(...this.questionDelegate.getAdditionalDownloadableFiles(question)); + urls.push(...this.questionDelegate.getAdditionalDownloadableFiles(question, usageId)); return this.sitesProvider.getSite(siteId).then((site) => { const promises = []; From 1b8b142646e7c26357fec5e62cbf6bcbebb66f3d Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 26 Apr 2019 09:31:12 +0200 Subject: [PATCH 066/263] MOBILE-2996 login: Prevent overriding user if sso+logout --- src/core/login/providers/helper.ts | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index 21154313c..0083ee413 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -442,22 +442,8 @@ export class CoreLoginHelperProvider { * @return {Promise} Promise resolved when the user is authenticated with the token. */ handleSSOLoginAuthentication(siteUrl: string, token: string, privateToken?: string): Promise { - if (this.sitesProvider.isLoggedIn()) { - // User logged in, he is reconnecting. Retrieve username. - const info = this.sitesProvider.getCurrentSite().getInfo(); - if (typeof info != 'undefined' && typeof info.username != 'undefined') { - return this.sitesProvider.updateSiteToken(info.siteurl, info.username, token, privateToken).then(() => { - return this.sitesProvider.updateSiteInfoByUrl(info.siteurl, info.username); - }, () => { - // Error updating token, return proper error message. - return Promise.reject(this.translate.instant('core.login.errorupdatesite')); - }); - } - - return Promise.reject(this.translate.instant('core.login.errorupdatesite')); - } else { - return this.sitesProvider.newSite(siteUrl, token, privateToken); - } + // Always create a new site to prevent overriding data if another user credentials were introduced. + return this.sitesProvider.newSite(siteUrl, token, privateToken); } /** From 486ad67a31ef0ad36686e6d0e6bee88b58925ba7 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 23 Apr 2019 13:31:41 +0200 Subject: [PATCH 067/263] MOBILE-2928 couse: Use openCourse when opening in current site --- src/addon/mod/feedback/pages/form/form.ts | 8 +- src/assets/lang/en.json | 1 + src/core/course/providers/course.ts | 63 +++++++++++++- src/core/course/providers/default-format.ts | 18 +++- src/core/course/providers/helper.ts | 84 +++++++++---------- .../courses/providers/course-link-handler.ts | 36 +++++--- src/core/login/providers/helper.ts | 55 ++++++++---- src/core/siteplugins/providers/helper.ts | 3 +- src/core/siteplugins/providers/siteplugins.ts | 26 +++++- 9 files changed, 215 insertions(+), 79 deletions(-) diff --git a/src/addon/mod/feedback/pages/form/form.ts b/src/addon/mod/feedback/pages/form/form.ts index 0d8bbf9fa..82e24a29b 100644 --- a/src/addon/mod/feedback/pages/form/form.ts +++ b/src/addon/mod/feedback/pages/form/form.ts @@ -24,6 +24,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreAppProvider } from '@providers/app'; import { CoreEventsProvider } from '@providers/events'; import { CoreCourseProvider } from '@core/course/providers/course'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; import { CoreLoginHelperProvider } from '@core/login/providers/helper'; import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { CoreSitesProvider } from '@providers/sites'; @@ -69,7 +70,7 @@ export class AddonModFeedbackFormPage implements OnDestroy { protected eventsProvider: CoreEventsProvider, protected feedbackSync: AddonModFeedbackSyncProvider, network: Network, protected translate: TranslateService, protected loginHelper: CoreLoginHelperProvider, protected linkHelper: CoreContentLinksHelperProvider, sitesProvider: CoreSitesProvider, - @Optional() private content: Content, zone: NgZone) { + @Optional() private content: Content, zone: NgZone, protected courseHelper: CoreCourseHelperProvider) { this.module = navParams.get('module'); this.courseId = navParams.get('courseId'); @@ -325,10 +326,7 @@ export class AddonModFeedbackFormPage implements OnDestroy { modal.dismiss(); }); } else { - // Use redirect to make the course the new history root (to avoid "loops" in history). - this.loginHelper.redirect('CoreCourseSectionPage', { - course: { id: this.courseId } - }, this.currentSite.getId()); + this.courseHelper.getAndOpenCourse(undefined, this.courseId, {}, this.currentSite.getId()); } } diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 8fd9e1499..8e7ff5128 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -1342,6 +1342,7 @@ "core.favourites": "Starred", "core.filename": "Filename", "core.filenameexist": "File name already exists: {{$a}}", + "core.filenotfound": "File not found, sorry.", "core.fileuploader.addfiletext": "Add file", "core.fileuploader.audio": "Audio", "core.fileuploader.camera": "Camera", diff --git a/src/core/course/providers/course.ts b/src/core/course/providers/course.ts index e16318b09..c960b7c51 100644 --- a/src/core/course/providers/course.ts +++ b/src/core/course/providers/course.ts @@ -13,16 +13,20 @@ // limitations under the License. import { Injectable } from '@angular/core'; +import { NavController } from 'ionic-angular'; import { TranslateService } from '@ngx-translate/core'; import { CoreAppProvider } from '@providers/app'; import { CoreEventsProvider } from '@providers/events'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider, CoreSiteSchema } from '@providers/sites'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSiteWSPreSets, CoreSite } from '@classes/site'; import { CoreConstants } from '../../constants'; import { CoreCourseOfflineProvider } from './course-offline'; +import { CoreSitePluginsProvider } from '@core/siteplugins/providers/siteplugins'; +import { CoreCourseFormatDelegate } from './format-delegate'; /** * Service that provides some features regarding a course. @@ -96,7 +100,9 @@ export class CoreCourseProvider { constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private eventsProvider: CoreEventsProvider, private utils: CoreUtilsProvider, private timeUtils: CoreTimeUtilsProvider, private translate: TranslateService, - private courseOffline: CoreCourseOfflineProvider, private appProvider: CoreAppProvider) { + private courseOffline: CoreCourseOfflineProvider, private appProvider: CoreAppProvider, + private courseFormatDelegate: CoreCourseFormatDelegate, private sitePluginsProvider: CoreSitePluginsProvider, + private domUtils: CoreDomUtilsProvider) { this.logger = logger.getInstance('CoreCourseProvider'); this.sitesProvider.registerSiteSchema(this.siteSchema); @@ -899,6 +905,61 @@ export class CoreCourseProvider { return !!module.url; } + /** + * Wait for any course format plugin to load, and open the course page. + * + * If the plugin's promise is resolved, the course page will be opened. If it is rejected, they will see an error. + * If the promise for the plugin is still in progress when the user tries to open the course, a loader + * will be displayed until it is complete, before the course page is opened. If the promise is already complete, + * they will see the result immediately. + * + * This function must be in here instead of course helper to prevent circular dependencies. + * + * @param {NavController} navCtrl The nav controller to use. If not defined, the course will be opened in main menu. + * @param {any} course Course to open + * @param {any} [params] Other params to pass to the course page. + * @return {Promise} Promise resolved when done. + */ + openCourse(navCtrl: NavController, course: any, params?: any): Promise { + const loading = this.domUtils.showModalLoading(); + + // Wait for site plugins to be fetched. + return this.sitePluginsProvider.waitFetchPlugins().then(() => { + if (this.sitePluginsProvider.sitePluginPromiseExists('format_' + course.format)) { + // This course uses a custom format plugin, wait for the format plugin to finish loading. + + return this.sitePluginsProvider.sitePluginLoaded('format_' + course.format).then(() => { + // The format loaded successfully, but the handlers wont be registered until all site plugins have loaded. + if (this.sitePluginsProvider.sitePluginsFinishedLoading) { + return this.courseFormatDelegate.openCourse(navCtrl, course, params); + } else { + // Wait for plugins to be loaded. + const deferred = this.utils.promiseDefer(), + observer = this.eventsProvider.on(CoreEventsProvider.SITE_PLUGINS_LOADED, () => { + observer && observer.off(); + + this.courseFormatDelegate.openCourse(navCtrl, course, params).then((response) => { + deferred.resolve(response); + }).catch((error) => { + deferred.reject(error); + }); + }); + + return deferred.promise; + } + }).catch(() => { + // The site plugin failed to load. The user needs to restart the app to try loading it again. + this.domUtils.showErrorModal('core.courses.errorloadplugins', true); + }); + } else { + // No custom format plugin. We don't need to wait for anything. + return this.courseFormatDelegate.openCourse(navCtrl, course, params); + } + }).finally(() => { + loading.dismiss(); + }); + } + /** * Change the course status, setting it to the previous status. * diff --git a/src/core/course/providers/default-format.ts b/src/core/course/providers/default-format.ts index 6cc8e1562..b445158a9 100644 --- a/src/core/course/providers/default-format.ts +++ b/src/core/course/providers/default-format.ts @@ -12,9 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Injectable } from '@angular/core'; +import { Injectable, Injector } from '@angular/core'; import { NavController } from 'ionic-angular'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; import { CoreCourseFormatHandler } from './format-delegate'; /** @@ -25,7 +26,9 @@ export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler { name = 'CoreCourseFormatDefault'; format = 'default'; - constructor(private coursesProvider: CoreCoursesProvider) { } + protected loginHelper: CoreLoginHelperProvider; // Inject it later to prevent circular dependencies. + + constructor(protected coursesProvider: CoreCoursesProvider, protected injector: Injector) { } /** * Whether or not the handler is enabled on a site level. @@ -154,7 +157,7 @@ export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler { * getCourseFormatComponent because it will display the course handlers at the top. * Your page should include the course handlers using CoreCoursesDelegate. * - * @param {NavController} navCtrl The NavController instance to use. + * @param {NavController} navCtrl The NavController instance to use. If not defined, please use loginHelper.redirect. * @param {any} course The course to open. It should contain a "format" attribute. * @param {any} [params] Params to pass to the course page. * @return {Promise} Promise resolved when done. @@ -163,7 +166,14 @@ export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler { params = params || {}; Object.assign(params, { course: course }); - return navCtrl.push('CoreCourseSectionPage', params); + if (navCtrl) { + return navCtrl.push('CoreCourseSectionPage', params); + } else { + // Open the course in the "phantom" tab. + this.loginHelper = this.loginHelper || this.injector.get(CoreLoginHelperProvider); + + return this.loginHelper.redirect('CoreCourseSectionPage', params); + } } /** diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index be5872490..ba486f2a9 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -36,8 +36,6 @@ import { CoreLoginHelperProvider } from '@core/login/providers/helper'; import { CoreConstants } from '@core/constants'; import { CoreSite } from '@classes/site'; import * as moment from 'moment'; -import { CoreSitePluginsProvider } from '@core/siteplugins/providers/siteplugins'; -import { CoreCourseFormatDelegate } from '@core/course/providers/format-delegate'; /** * Prefetch info of a module. @@ -125,8 +123,7 @@ export class CoreCourseHelperProvider { private courseOptionsDelegate: CoreCourseOptionsDelegate, private siteHomeProvider: CoreSiteHomeProvider, private eventsProvider: CoreEventsProvider, private fileHelper: CoreFileHelperProvider, private appProvider: CoreAppProvider, private fileProvider: CoreFileProvider, private injector: Injector, - private coursesProvider: CoreCoursesProvider, private courseOffline: CoreCourseOfflineProvider, - private courseFormatDelegate: CoreCourseFormatDelegate, private sitePluginsProvider: CoreSitePluginsProvider) { } + private coursesProvider: CoreCoursesProvider, private courseOffline: CoreCourseOfflineProvider) { } /** * This function treats every module on the sections provided to load the handler data, treat completion @@ -794,6 +791,30 @@ export class CoreCourseHelperProvider { }); } + /** + * Get a course, wait for any course format plugin to load, and open the course page. It basically chains the functions + * getCourse and openCourse. + * + * @param {NavController} navCtrl The nav controller to use. If not defined, the course will be opened in main menu. + * @param {number} courseId Course ID. + * @param {any} [params] Other params to pass to the course page. + * @param {string} [siteId] Site ID. If not defined, current site. + */ + getAndOpenCourse(navCtrl: NavController, courseId: number, params?: any, siteId?: string): Promise { + const modal = this.domUtils.showModalLoading(); + + return this.getCourse(courseId, siteId).then((data) => { + return data.course; + }).catch(() => { + // Cannot get course, return a "fake". + return { id: courseId }; + }).then((course) => { + modal.dismiss(); + + return this.openCourse(navCtrl, course, params, siteId); + }); + } + /** * Check if the course has a block with that name. * @@ -1121,14 +1142,17 @@ export class CoreCourseHelperProvider { // Check if site home is available. return this.siteHomeProvider.isAvailable().then(() => { this.loginHelper.redirect('CoreSiteHomeIndexPage', params, siteId); + }).finally(() => { + modal.dismiss(); }); } else { - this.loginHelper.redirect('CoreCourseSectionPage', params, siteId); + modal.dismiss(); + + return this.getAndOpenCourse(undefined, courseId, params, siteId); } }).catch((error) => { - this.domUtils.showErrorModalDefault(error, 'core.course.errorgetmodule', true); - }).finally(() => { modal.dismiss(); + this.domUtils.showErrorModalDefault(error, 'core.course.errorgetmodule', true); }); } @@ -1399,46 +1423,22 @@ export class CoreCourseHelperProvider { * will be displayed until it is complete, before the course page is opened. If the promise is already complete, * they will see the result immediately. * - * @param {NavController} navCtrl The nav controller to use. + * @param {NavController} navCtrl The nav controller to use. If not defined, the course will be opened in main menu. * @param {any} course Course to open * @param {any} [params] Params to pass to the course page. + * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - openCourse(navCtrl: NavController, course: any, params?: any): Promise { - if (this.sitePluginsProvider.sitePluginPromiseExists('format_' + course.format)) { - // This course uses a custom format plugin, wait for the format plugin to finish loading. - const loading = this.domUtils.showModalLoading(); - - return this.sitePluginsProvider.sitePluginLoaded('format_' + course.format).then(() => { - // The format loaded successfully, but the handlers wont be registered until all site plugins have loaded. - if (this.sitePluginsProvider.sitePluginsFinishedLoading) { - loading.dismiss(); - - return this.courseFormatDelegate.openCourse(navCtrl, course, params); - } else { - // Wait for plugins to be loaded. - const deferred = this.utils.promiseDefer(), - observer = this.eventsProvider.on(CoreEventsProvider.SITE_PLUGINS_LOADED, () => { - loading.dismiss(); - observer && observer.off(); - - this.courseFormatDelegate.openCourse(navCtrl, course, params).then((response) => { - deferred.resolve(response); - }).catch((error) => { - deferred.reject(error); - }); - }); - - return deferred.promise; - } - }).catch(() => { - // The site plugin failed to load. The user needs to restart the app to try loading it again. - loading.dismiss(); - this.domUtils.showErrorModal('core.courses.errorloadplugins', true); - }); + openCourse(navCtrl: NavController, course: any, params?: any, siteId?: string): Promise { + if (!siteId || siteId == this.sitesProvider.getCurrentSiteId()) { + // Current site, we can open the course. + return this.courseProvider.openCourse(navCtrl, course, params); } else { - // No custom format plugin. We don't need to wait for anything. - return this.courseFormatDelegate.openCourse(navCtrl, course, params); + // We need to load the site first. + params = params || {}; + Object.assign(params, { course: course }); + + return this.loginHelper.redirect(CoreLoginHelperProvider.OPEN_COURSE, params, siteId); } } } diff --git a/src/core/courses/providers/course-link-handler.ts b/src/core/courses/providers/course-link-handler.ts index 092ac130d..010dcdbb2 100644 --- a/src/core/courses/providers/course-link-handler.ts +++ b/src/core/courses/providers/course-link-handler.ts @@ -19,8 +19,8 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; -import { CoreLoginHelperProvider } from '@core/login/providers/helper'; import { CoreCourseProvider } from '@core/course/providers/course'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; import { CoreCoursesProvider } from './courses'; /** @@ -34,9 +34,9 @@ export class CoreCoursesCourseLinkHandler extends CoreContentLinksHandlerBase { protected waitStart = 0; constructor(private sitesProvider: CoreSitesProvider, private coursesProvider: CoreCoursesProvider, - private loginHelper: CoreLoginHelperProvider, private domUtils: CoreDomUtilsProvider, + private domUtils: CoreDomUtilsProvider, private translate: TranslateService, private courseProvider: CoreCourseProvider, - private textUtils: CoreTextUtilsProvider) { + private textUtils: CoreTextUtilsProvider, private courseHelper: CoreCourseHelperProvider) { super(); } @@ -55,7 +55,6 @@ export class CoreCoursesCourseLinkHandler extends CoreContentLinksHandlerBase { const sectionId = params.sectionid ? parseInt(params.sectionid, 10) : null, pageParams: any = { - course: { id: courseId }, sectionId: sectionId || null }; let sectionNumber = typeof params.section != 'undefined' ? parseInt(params.section, 10) : NaN; @@ -80,8 +79,8 @@ export class CoreCoursesCourseLinkHandler extends CoreContentLinksHandlerBase { // Ignore errors. }); } else { - // Use redirect to make the course the new history root (to avoid "loops" in history). - this.loginHelper.redirect('CoreCourseSectionPage', pageParams, siteId); + // Don't pass the navCtrl to make the course the new history root (to avoid "loops" in history). + this.courseHelper.getAndOpenCourse(undefined, courseId, pageParams, siteId); } } }]; @@ -121,9 +120,12 @@ export class CoreCoursesCourseLinkHandler extends CoreContentLinksHandlerBase { protected actionEnrol(courseId: number, url: string, pageParams: any): Promise { const modal = this.domUtils.showModalLoading(), isEnrolUrl = !!url.match(/(\/enrol\/index\.php)|(\/course\/enrol\.php)/); + let course; // Check if user is enrolled in the course. - return this.coursesProvider.getUserCourse(courseId).catch(() => { + return this.coursesProvider.getUserCourse(courseId).then((courseObj) => { + course = courseObj; + }).catch(() => { // User is not enrolled in the course. Check if can self enrol. return this.canSelfEnrol(courseId).then(() => { modal.dismiss(); @@ -134,7 +136,9 @@ export class CoreCoursesCourseLinkHandler extends CoreContentLinksHandlerBase { return promise.then(() => { // Enrol URL or user confirmed. - return this.selfEnrol(courseId).catch((error) => { + return this.selfEnrol(courseId).then((courseObj) => { + course = courseObj; + }).catch((error) => { if (error) { this.domUtils.showErrorModal(error); } @@ -170,10 +174,22 @@ export class CoreCoursesCourseLinkHandler extends CoreContentLinksHandlerBase { }); }); }).then(() => { + // Check if we need to retrieve the course. + if (!course) { + return this.courseHelper.getCourse(courseId).then((data) => { + return data.course; + }).catch(() => { + // Cannot get course, return a "fake". + return { id: courseId }; + }); + } + + return course; + }).then((course) => { modal.dismiss(); - // Use redirect to make the course the new history root (to avoid "loops" in history). - this.loginHelper.redirect('CoreCourseSectionPage', pageParams, this.sitesProvider.getCurrentSiteId()); + // Now open the course. + this.courseHelper.openCourse(undefined, course, pageParams); }); } diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index 21154313c..25e312ab8 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -28,6 +28,7 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUrlUtilsProvider } from '@providers/utils/url'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitePluginsProvider } from '@core/siteplugins/providers/siteplugins'; +import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreConfigConstants } from '../../../configconstants'; import { CoreConstants } from '@core/constants'; import { Md5 } from 'ts-md5/dist/md5'; @@ -72,6 +73,8 @@ export interface CoreLoginSSOData { */ @Injectable() export class CoreLoginHelperProvider { + static OPEN_COURSE = 'open_course'; + protected logger; protected isSSOConfirmShown = false; protected isOpenEditAlertShown = false; @@ -83,7 +86,7 @@ export class CoreLoginHelperProvider { private eventsProvider: CoreEventsProvider, private appProvider: CoreAppProvider, private utils: CoreUtilsProvider, private urlUtils: CoreUrlUtilsProvider, private configProvider: CoreConfigProvider, private platform: Platform, private initDelegate: CoreInitDelegate, private sitePluginsProvider: CoreSitePluginsProvider, - private location: Location, private alertCtrl: AlertController) { + private location: Location, private alertCtrl: AlertController, private courseProvider: CoreCourseProvider) { this.logger = logger.getInstance('CoreLoginHelper'); } @@ -423,13 +426,7 @@ export class CoreLoginHelperProvider { * @return {Promise} Promise resolved when done. */ goToSiteInitialPage(navCtrl?: NavController, page?: string, params?: any, options?: NavOptions): Promise { - navCtrl = navCtrl || this.appProvider.getRootNavController(); - - // Due to DeepLinker, we need to remove the path from the URL before going to main menu. - // IonTabs checks the URL to determine which path to load for deep linking, so we clear the URL. - this.location.replaceState(''); - - return navCtrl.setRoot('CoreMainMenuPage', { redirectPage: page, redirectParams: params }, options); + return this.openMainMenu(navCtrl, page, params, options); } /** @@ -604,11 +601,7 @@ export class CoreLoginHelperProvider { return this.sitesProvider.loadSite(siteId, page, params).then((loggedIn) => { if (loggedIn) { - // Due to DeepLinker, we need to remove the path from the URL before going to main menu. - // IonTabs checks the URL to determine which path to load for deep linking, so we clear the URL. - this.location.replaceState(''); - - return navCtrl.setRoot('CoreMainMenuPage', { redirectPage: page, redirectParams: params }); + return this.openMainMenu(navCtrl, page, params); } }).catch((error) => { // Site doesn't exist. @@ -626,7 +619,39 @@ export class CoreLoginHelperProvider { * @param {any} params Params to pass to the page. */ protected loadPageInMainMenu(page: string, params: any): void { - this.eventsProvider.trigger(CoreEventsProvider.LOAD_PAGE_MAIN_MENU, { redirectPage: page, redirectParams: params }); + if (page == CoreLoginHelperProvider.OPEN_COURSE) { + // Use the openCourse function. + this.courseProvider.openCourse(undefined, params.course, params); + } else { + this.eventsProvider.trigger(CoreEventsProvider.LOAD_PAGE_MAIN_MENU, { redirectPage: page, redirectParams: params }); + } + } + + /** + * Open the main menu, loading a certain page. + * + * @param {NavController} navCtrl NavController. + * @param {string} page Name of the page to load. + * @param {any} params Params to pass to the page. + * @param {NavOptions} [options] Navigation options. + * @return {Promise} Promise resolved when done. + */ + protected openMainMenu(navCtrl: NavController, page: string, params: any, options?: NavOptions): Promise { + navCtrl = navCtrl || this.appProvider.getRootNavController(); + + // Due to DeepLinker, we need to remove the path from the URL before going to main menu. + // IonTabs checks the URL to determine which path to load for deep linking, so we clear the URL. + this.location.replaceState(''); + + if (page == CoreLoginHelperProvider.OPEN_COURSE) { + // Load the main menu first, and then open the course. + return navCtrl.setRoot('CoreMainMenuPage').finally(() => { + return this.courseProvider.openCourse(undefined, params.course, params); + }); + } else { + // Open the main menu. + return navCtrl.setRoot('CoreMainMenuPage', { redirectPage: page, redirectParams: params }, options); + } } /** @@ -793,7 +818,7 @@ export class CoreLoginHelperProvider { /** * Redirect to a new page, setting it as the root page and loading the right site if needed. * - * @param {string} page Name of the page to load. + * @param {string} page Name of the page to load. Special cases: OPEN_COURSE (to open course page). * @param {any} params Params to pass to the page. * @param {string} [siteId] Site to load. If not defined, current site. * @return {Promise} Promise resolved when done. diff --git a/src/core/siteplugins/providers/helper.ts b/src/core/siteplugins/providers/helper.ts index cc78d9509..395b777d5 100644 --- a/src/core/siteplugins/providers/helper.ts +++ b/src/core/siteplugins/providers/helper.ts @@ -107,8 +107,9 @@ export class CoreSitePluginsHelperProvider { }).finally(() => { eventsProvider.trigger(CoreEventsProvider.SITE_PLUGINS_LOADED, {}, data.siteId); }); - } + }).finally(() => { + this.sitePluginsProvider.setPluginsFetched(); }); }); diff --git a/src/core/siteplugins/providers/siteplugins.ts b/src/core/siteplugins/providers/siteplugins.ts index 43fd975c7..20036c9be 100644 --- a/src/core/siteplugins/providers/siteplugins.ts +++ b/src/core/siteplugins/providers/siteplugins.ts @@ -21,7 +21,7 @@ import { CoreLoggerProvider } from '@providers/logger'; import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { CoreSitesProvider } from '@providers/sites'; import { CoreTextUtilsProvider } from '@providers/utils/text'; -import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CoreUtilsProvider, PromiseDefer } from '@providers/utils/utils'; import { CoreConfigConstants } from '../../../configconstants'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; import { CoreEventsProvider } from '@providers/events'; @@ -67,6 +67,7 @@ export class CoreSitePluginsProvider { protected logger; protected sitePlugins: {[name: string]: CoreSitePluginsHandler} = {}; // Site plugins registered. protected sitePluginPromises: {[name: string]: Promise} = {}; // Promises of loading plugins. + protected fetchPluginsDeferred: PromiseDefer; hasSitePluginsLoaded = false; sitePluginsFinishedLoading = false; @@ -75,10 +76,17 @@ export class CoreSitePluginsProvider { private filepoolProvider: CoreFilepoolProvider, private coursesProvider: CoreCoursesProvider, private textUtils: CoreTextUtilsProvider, private eventsProvider: CoreEventsProvider) { this.logger = logger.getInstance('CoreUserProvider'); + const observer = this.eventsProvider.on(CoreEventsProvider.SITE_PLUGINS_LOADED, () => { this.sitePluginsFinishedLoading = true; observer && observer.off(); }); + + // Initialize deferred at start and on logout. + this.fetchPluginsDeferred = this.utils.promiseDefer(); + eventsProvider.on(CoreEventsProvider.LOGOUT, () => { + this.fetchPluginsDeferred = this.utils.promiseDefer(); + }); } /** @@ -531,6 +539,13 @@ export class CoreSitePluginsProvider { this.sitePluginPromises[component] = promise; } + /** + * Set plugins fetched. + */ + setPluginsFetched(): void { + this.fetchPluginsDeferred.resolve(); + } + /** * Is a plugin being initialised for the specified component? * @@ -550,4 +565,13 @@ export class CoreSitePluginsProvider { sitePluginLoaded(component: string): Promise { return this.sitePluginPromises[component]; } + + /** + * Wait for fetch plugins to be done. + * + * @return {Promise} Promise resolved when site plugins have been fetched. + */ + waitFetchPlugins(): Promise { + return this.fetchPluginsDeferred.promise; + } } From 19eeb3dfd655bee0c0da99ce06811ff925db565e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 26 Apr 2019 11:08:14 +0200 Subject: [PATCH 068/263] MOBILE-2999 travis: Force node version 11 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cedbc149d..99d62eeae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ dist: xenial group: edge language: node_js -node_js: stable +node_js: 11 before_cache: - rm -rf $HOME/.cache/electron-builder/wine From 2fd38c1a9cc834ae7e52f89aa29c7f0e4bc18b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 26 Apr 2019 11:08:42 +0200 Subject: [PATCH 069/263] MOBILE-2999 package: Fix phonegap-plugin-push version --- package-lock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index d970a674d..efde4ebc4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "moodlemobile", - "version": "3.6.1", + "version": "3.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3600,7 +3600,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -5972,7 +5972,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -8575,7 +8575,7 @@ "integrity": "sha512-1wvc3iQOQpEBaQbXgLxA2JUiLSQ2azdF/bF29ghXDiQJWSpQ1BF8gSuqttM8WZoj081Ps8OKL0gYxdDBkFNPqA==" }, "phonegap-plugin-push": { - "version": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#9b1d9fe575d1f21b517327c480e7fe0f73280e7a", + "version": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#b2fb84bab47d2a86e934893394d8667eec82f0e8", "from": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#moodle-v2", "requires": { "babel-plugin-add-header-comment": "^1.0.3", From f1884b5317d3e52b532add7841adcc0238756b8a Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 26 Apr 2019 10:07:26 +0200 Subject: [PATCH 070/263] MOBILE-2983 calendar: Highlight set reminder title and change button --- src/addon/calendar/pages/event/event.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/addon/calendar/pages/event/event.html b/src/addon/calendar/pages/event/event.html index c00376085..35cfc9758 100644 --- a/src/addon/calendar/pages/event/event.html +++ b/src/addon/calendar/pages/event/event.html @@ -68,11 +68,11 @@ - {{ 'addon.calendar.setnewreminder' | translate }} +

{{ 'addon.calendar.setnewreminder' | translate }}

- +
From 86398b02c39f7423122fe3572b07089a464eceaa Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Fri, 26 Apr 2019 12:41:17 +0200 Subject: [PATCH 071/263] MOBILE-2960 format-text: Improve Vimeo embedding for 3.7 onwards --- src/directives/format-text.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/directives/format-text.ts b/src/directives/format-text.ts index d840c8a84..9dcb4c15f 100644 --- a/src/directives/format-text.ts +++ b/src/directives/format-text.ts @@ -590,7 +590,7 @@ export class CoreFormatTextDirective implements OnChanges { // Check if it's a Vimeo video. If it is, use the wsplayer script instead to make restricted videos work. const matches = iframe.src.match(/https?:\/\/player\.vimeo\.com\/video\/([0-9]+)/); if (matches && matches[1]) { - const newUrl = this.textUtils.concatenatePaths(site.getURL(), '/media/player/vimeo/wsplayer.php?video=') + + let newUrl = this.textUtils.concatenatePaths(site.getURL(), '/media/player/vimeo/wsplayer.php?video=') + matches[1] + '&token=' + site.getToken(); // Width and height are mandatory, we need to calculate them. @@ -614,8 +614,12 @@ export class CoreFormatTextDirective implements OnChanges { } } - // Always include the width and height in the URL. - iframe.src = newUrl + '&width=' + width + '&height=' + height; + // Width and height parameters are required in 3.6 and older sites. + if (!site.isVersionGreaterEqualThan('3.7')) { + newUrl += '&width=' + width + '&height=' + height; + } + iframe.src = newUrl; + if (!iframe.width) { iframe.width = width; } From 6243eda09729dceb6e78f3871c3ac8a0c906201f Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Mon, 1 Apr 2019 13:47:26 +0100 Subject: [PATCH 072/263] MOBILE-2951 web-services: make it easier to debug web service calls We add a redundant &wsfunction=web_service_method_name to the URL for web service requests, so that it is easier to find the call you are interested in when debugging using brower tools. Similarly, we add info= to calls to lib/ajax/service.php, matching what is done in Moodle web application JavaScript. --- src/providers/ws.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/providers/ws.ts b/src/providers/ws.ts index 10eb3821e..0cc906f5a 100644 --- a/src/providers/ws.ts +++ b/src/providers/ws.ts @@ -234,7 +234,9 @@ export class CoreWSProvider { args: this.convertValuesToString(data) }]; - siteUrl = preSets.siteUrl + '/lib/ajax/service.php'; + // The info= parameter has no function. It is just to help with debugging. + // We call it info to match the parameter name use by Moodle's AMD ajax module. + siteUrl = preSets.siteUrl + '/lib/ajax/service.php?info=' + method; const promise = this.http.post(siteUrl, JSON.stringify(ajaxData)).timeout(CoreConstants.WS_TIMEOUT).toPromise(); @@ -547,8 +549,13 @@ export class CoreWSProvider { options['responseType'] = 'text'; } + // We add the method name to the URL purely to help with debugging. + // This duplicates what is in the ajaxData, but that does no harm. + // POST variables take precedence over GET. + const requestUrl = siteUrl + '&wsfunction=' + method; + // Perform the post request. - const promise = this.http.post(siteUrl, ajaxData, options).timeout(CoreConstants.WS_TIMEOUT).toPromise(); + const promise = this.http.post(requestUrl, ajaxData, options).timeout(CoreConstants.WS_TIMEOUT).toPromise(); return promise.then((data: any) => { // Some moodle web services return null. From b2cf777bec7f0637dafa8a5dc76aee0a70a6afae Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 8 Apr 2019 12:28:02 +0200 Subject: [PATCH 073/263] MOBILE-2947 notification: Apply color to small icon --- src/config.json | 3 ++- src/core/pushnotifications/providers/pushnotifications.ts | 3 ++- src/providers/local-notifications.ts | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/config.json b/src/config.json index 0c50767de..25d51bc90 100644 --- a/src/config.json +++ b/src/config.json @@ -70,5 +70,6 @@ "multisitesdisplay": "", "skipssoconfirmation": false, "forcedefaultlanguage": false, - "privacypolicy": "https:\/\/moodle.org\/mod\/page\/view.php?id=8148" + "privacypolicy": "https:\/\/moodle.org\/mod\/page\/view.php?id=8148", + "notificoncolor": "#f98012" } diff --git a/src/core/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts index 2fa632956..108f43601 100644 --- a/src/core/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -241,7 +241,8 @@ export class CorePushNotificationsProvider { return { android: { sound: !!soundEnabled, - icon: 'smallicon' + icon: 'smallicon', + iconColor: CoreConfigConstants.notificoncolor }, ios: { alert: 'true', diff --git a/src/providers/local-notifications.ts b/src/providers/local-notifications.ts index 49ea21312..de8e89e94 100644 --- a/src/providers/local-notifications.ts +++ b/src/providers/local-notifications.ts @@ -25,6 +25,7 @@ import { CoreTextUtilsProvider } from './utils/text'; import { CoreUtilsProvider } from './utils/utils'; import { SQLiteDB, SQLiteDBTableSchema } from '@classes/sqlitedb'; import { CoreConstants } from '@core/constants'; +import { CoreConfigConstants } from '../configconstants'; import { Subject, Subscription } from 'rxjs'; /* @@ -481,6 +482,7 @@ export class CoreLocalNotificationsProvider { if (this.platform.is('android')) { notification.icon = notification.icon || 'res://icon'; notification.smallIcon = notification.smallIcon || 'res://smallicon'; + notification.color = notification.color || CoreConfigConstants.notificoncolor; const led: any = notification.led || {}; notification.led = { From 407a33b5cd2c49eacf1cdbfacdb2cf285bbbbc22 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 11 Apr 2019 10:20:28 +0200 Subject: [PATCH 074/263] MOBILE-2907 resource: Use customdata and afterlink if possible --- src/addon/mod/resource/providers/helper.ts | 25 +++++-- .../mod/resource/providers/module-handler.ts | 34 ++++++--- .../resource/providers/prefetch-handler.ts | 17 +++-- src/providers/utils/mimetype.ts | 70 +++++++++++++++---- 4 files changed, 115 insertions(+), 31 deletions(-) diff --git a/src/addon/mod/resource/providers/helper.ts b/src/addon/mod/resource/providers/helper.ts index ad461c6a5..2d357c615 100644 --- a/src/addon/mod/resource/providers/helper.ts +++ b/src/addon/mod/resource/providers/helper.ts @@ -113,12 +113,17 @@ export class AddonModResourceHelperProvider { * @return {boolean} Whether the resource should be displayed embeded. */ isDisplayedEmbedded(module: any, display: number): boolean { - if (!module.contents.length || !this.fileProvider.isAvailable() || + if ((!module.contents.length && !module.contentsinfo) || !this.fileProvider.isAvailable() || (!this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7') && this.isNextcloudFile(module))) { - return false; } - const ext = this.mimetypeUtils.getFileExtension(module.contents[0].filename); + let ext; + + if (module.contentsinfo) { + ext = this.mimetypeUtils.getExtension(module.contentsinfo.mimetypes[0]); + } else { + ext = this.mimetypeUtils.getFileExtension(module.contents[0].filename); + } return (display == this.DISPLAY_EMBED || display == this.DISPLAY_AUTO) && this.mimetypeUtils.canBeEmbedded(ext); } @@ -130,12 +135,18 @@ export class AddonModResourceHelperProvider { * @return {boolean} Whether the resource should be displayed in an iframe. */ isDisplayedInIframe(module: any): boolean { - if (!module.contents.length || !this.fileProvider.isAvailable()) { + if ((!module.contents.length && !module.contentsinfo) || !this.fileProvider.isAvailable()) { return false; } - const ext = this.mimetypeUtils.getFileExtension(module.contents[0].filename), + let mimetype; + + if (module.contentsinfo) { + mimetype = module.contentsinfo.mimetypes[0]; + } else { + const ext = this.mimetypeUtils.getFileExtension(module.contents[0].filename); mimetype = this.mimetypeUtils.getMimeType(ext); + } return mimetype == 'text/html'; } @@ -147,6 +158,10 @@ export class AddonModResourceHelperProvider { * @return {boolean} Whether it's a Nextcloud file. */ isNextcloudFile(module: any): boolean { + if (module.contentsinfo) { + return module.contentsinfo.repositorytype == 'nextcloud'; + } + return module.contents && module.contents[0] && module.contents[0].repositorytype == 'nextcloud'; } diff --git a/src/addon/mod/resource/providers/module-handler.ts b/src/addon/mod/resource/providers/module-handler.ts index 5dc520d7b..905f192e5 100644 --- a/src/addon/mod/resource/providers/module-handler.ts +++ b/src/addon/mod/resource/providers/module-handler.ts @@ -121,8 +121,16 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { * @return {Promise} Resolved when done. */ protected hideOpenButton(module: any, courseId: number): Promise { - return this.courseProvider.loadModuleContents(module, courseId, undefined, false, false, undefined, this.modName) - .then(() => { + let promise; + + if (module.contentsinfo) { + // No need to load contents. + promise = Promise.resolve(); + } else { + promise = this.courseProvider.loadModuleContents(module, courseId, undefined, false, false, undefined, this.modName); + } + + return promise.then(() => { return this.prefetchDelegate.getModuleStatus(module, courseId).then((status) => { return status !== CoreConstants.DOWNLOADED || this.resourceHelper.isDisplayedInIframe(module); }); @@ -141,7 +149,7 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { let infoFiles = [], options: any = {}; - // Check if the button needs to be shown or not. This also loads the module contents. + // Check if the button needs to be shown or not. promises.push(this.hideOpenButton(module, courseId).then((hideOpenButton) => { handlerData.buttons[0].hidden = hideOpenButton; })); @@ -164,7 +172,13 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { }, extra = []; - if (files && files.length) { + if (module.contentsinfo) { + // No need to use the list of files. + const mimetype = module.contentsinfo.mimetypes[0]; + resourceData.icon = this.mimetypeUtils.getMimetypeIcon(mimetype); + resourceData.extra = this.textUtils.cleanTags(module.afterlink); + + } else if (files && files.length) { const file = files[0]; resourceData.icon = this.mimetypeUtils.getFileIcon(file.filename); @@ -178,11 +192,12 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { return result + file.filesize; }, 0); } + extra.push(this.textUtils.bytesToSize(size, 1)); } if (options.showtype) { - // We should take it from options.filedetails.size if avalaible ∫but it's already translated. + // We should take it from options.filedetails.size if avalaible but it's already translated. extra.push(this.mimetypeUtils.getMimetypeDescription(file)); } @@ -203,12 +218,15 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { {$a: this.timeUtils.userDate(file.timecreated * 1000, 'core.strftimedatetimeshort') })); } } - } - if (resourceData.icon == '') { + if (resourceData.icon == '') { + resourceData.icon = this.courseProvider.getModuleIconSrc(this.modName, module.modicon); + } + resourceData.extra += extra.join(' '); + } else { + // No files, just set the icon. resourceData.icon = this.courseProvider.getModuleIconSrc(this.modName, module.modicon); } - resourceData.extra += extra.join(' '); return resourceData; }); diff --git a/src/addon/mod/resource/providers/prefetch-handler.ts b/src/addon/mod/resource/providers/prefetch-handler.ts index bd439d42d..7c3e7be65 100644 --- a/src/addon/mod/resource/providers/prefetch-handler.ts +++ b/src/addon/mod/resource/providers/prefetch-handler.ts @@ -51,11 +51,18 @@ export class AddonModResourcePrefetchHandler extends CoreCourseResourcePrefetchH * @return {string} Status to display. */ determineStatus(module: any, status: string, canCheck: boolean): string { - if (status == CoreConstants.DOWNLOADED && module && module.contents) { - // If the first file is an external file, always display the module as outdated. - const mainFile = module.contents[0]; - if (mainFile && mainFile.isexternalfile) { - return CoreConstants.OUTDATED; + if (status == CoreConstants.DOWNLOADED && module) { + // If the main file is an external file, always display the module as outdated. + if (module.contentsinfo) { + if (module.contentsinfo.repositorytype) { + // It's an external file. + return CoreConstants.OUTDATED; + } + } else if (module.contents) { + const mainFile = module.contents[0]; + if (mainFile && mainFile.isexternalfile) { + return CoreConstants.OUTDATED; + } } } diff --git a/src/providers/utils/mimetype.ts b/src/providers/utils/mimetype.ts index 7ec3c895f..cac90bcb0 100644 --- a/src/providers/utils/mimetype.ts +++ b/src/providers/utils/mimetype.ts @@ -138,6 +138,37 @@ export class CoreMimetypeUtilsProvider { } } + /** + * Get the URL of the icon of an extension. + * + * @param {string} extension Extension. + * @return {string} Icon URL. + */ + getExtensionIcon(extension: string): string { + const icon = this.getExtensionIconName(extension) || 'unknown'; + + return this.getFileIconForType(icon); + } + + /** + * Get the name of the icon of an extension. + * + * @param {string} extension Extension. + * @return {string} Icon. Undefined if not found. + */ + getExtensionIconName(extension: string): string { + if (this.extToMime[extension]) { + if (this.extToMime[extension].icon) { + return this.extToMime[extension].icon; + } else { + const type = this.extToMime[extension].type.split('/')[0]; + if (type == 'video' || type == 'text' || type == 'image' || type == 'document' || type == 'audio') { + return type; + } + } + } + } + /** * Get the "type" (string) of an extension, something like "image", "video" or "audio". * @@ -172,19 +203,8 @@ export class CoreMimetypeUtilsProvider { * @return {string} The path to a file icon. */ getFileIcon(filename: string): string { - const ext = this.getFileExtension(filename); - let icon = 'unknown'; - - if (ext && this.extToMime[ext]) { - if (this.extToMime[ext].icon) { - icon = this.extToMime[ext].icon; - } else { - const type = this.extToMime[ext].type.split('/')[0]; - if (type == 'video' || type == 'text' || type == 'image' || type == 'document' || type == 'audio') { - icon = type; - } - } - } + const ext = this.getFileExtension(filename), + icon = this.getExtensionIconName(ext) || 'unknown'; return this.getFileIconForType(icon); } @@ -407,6 +427,30 @@ export class CoreMimetypeUtilsProvider { } } + /** + * Get the icon of a mimetype. + * + * @param {string} mimetype Mimetype. + * @return {string} Type of the mimetype. + */ + getMimetypeIcon(mimetype: string): string { + mimetype = mimetype.split(';')[0]; // Remove codecs from the mimetype if any. + + const extensions = this.mimeToExt[mimetype] || []; + let icon = 'unknown'; + + for (let i = 0; i < extensions.length; i++) { + const iconName = this.getExtensionIconName(extensions[i]); + + if (iconName) { + icon = iconName; + break; + } + } + + return this.getFileIconForType(icon); + } + /** * Given a group name, return the translated name. * From 44eb98da3e27625f210268c99a33ea2c44bf026e Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Fri, 26 Apr 2019 16:51:43 +0200 Subject: [PATCH 075/263] MOBILE-2838 site: Fix checking whether no response is expected --- src/classes/site.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index 8f01c4ad6..6584fe467 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -866,7 +866,8 @@ export class CoreSite { } else { let responseData = this.textUtils.parseJSON(response.data); // Match the behaviour of CoreWSProvider.call when no response is expected. - if (!responseData && (typeof wsPresets.responseExpected == 'undefined' || wsPresets.responseExpected)) { + const responseExpected = typeof wsPresets.responseExpected == 'undefined' || wsPresets.responseExpected; + if (!responseExpected && (responseData == null || responseData === '')) { responseData = {}; } request.deferred.resolve(responseData); From 9c4617ae6282655d81dd80ce42043fcd8d414b28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 11 Apr 2019 16:23:31 +0200 Subject: [PATCH 076/263] MOBILE-2979 course: Align download icons --- src/core/course/components/format/core-course-format.html | 4 ++-- src/core/course/components/format/format.scss | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/course/components/format/core-course-format.html b/src/core/course/components/format/core-course-format.html index cf1712652..d2c81ada0 100644 --- a/src/core/course/components/format/core-course-format.html +++ b/src/core/course/components/format/core-course-format.html @@ -10,7 +10,7 @@ -
+
+ + + + + + + + +

{{ section.name }}

+
+ + + {{ section.totalSize | coreBytesToSize }} + + +
+
+ + +
+ + + {{ module.name }} + + + + {{ module.totalSize | coreBytesToSize }} + + + +
+
+
+
+
+ + diff --git a/src/addon/storagemanager/pages/course-storage/course-storage.module.ts b/src/addon/storagemanager/pages/course-storage/course-storage.module.ts new file mode 100644 index 000000000..19db12630 --- /dev/null +++ b/src/addon/storagemanager/pages/course-storage/course-storage.module.ts @@ -0,0 +1,36 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { NgModule } from '@angular/core'; +import { IonicPageModule } from 'ionic-angular'; +import { TranslateModule } from '@ngx-translate/core'; +import { CoreComponentsModule } from '@components/components.module'; +import { CoreDirectivesModule } from '@directives/directives.module'; +import { CorePipesModule } from '@pipes/pipes.module'; +import { AddonStorageManagerCourseStoragePage } from './course-storage'; + +@NgModule({ + declarations: [ + AddonStorageManagerCourseStoragePage, + ], + imports: [ + CoreComponentsModule, + CoreDirectivesModule, + CorePipesModule, + IonicPageModule.forChild(AddonStorageManagerCourseStoragePage), + TranslateModule.forChild() + ], +}) +export class AddonStorageManagerCourseStoragePageModule { +} diff --git a/src/addon/storagemanager/pages/course-storage/course-storage.scss b/src/addon/storagemanager/pages/course-storage/course-storage.scss new file mode 100644 index 000000000..2c03e4984 --- /dev/null +++ b/src/addon/storagemanager/pages/course-storage/course-storage.scss @@ -0,0 +1,28 @@ +ion-app.app-root page-addon-storagemanager-course-storage { + .item-md.item-block .item-inner { + padding-right: 0; + padding-left: 0; + } + ion-card.section ion-card-header.card-header { + border-bottom: 1px solid $list-border-color; + margin-bottom: 8px; + padding-top: 8px; + padding-bottom: 8px; + } + ion-card.section h2 { + font-weight: bold; + font-size: 2rem; + } + .size { + margin-top: 4px; + } + .size ion-icon { + margin-right: 4px; + } + .core-module-icon { + margin-right: 4px; + width: 16px; + height: 16px; + display: inline; + } +} diff --git a/src/addon/storagemanager/pages/course-storage/course-storage.ts b/src/addon/storagemanager/pages/course-storage/course-storage.ts new file mode 100644 index 000000000..ed0403151 --- /dev/null +++ b/src/addon/storagemanager/pages/course-storage/course-storage.ts @@ -0,0 +1,163 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Component, ViewChild } from '@angular/core'; +import { IonicPage, Content, NavParams } from 'ionic-angular'; +import { CoreCourseProvider } from '@core/course/providers/course'; +import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; +import { TranslateService } from '@ngx-translate/core'; + +/** + * Page that displays the amount of file storage used by each activity on the course, and allows + * the user to delete these files. + */ +@IonicPage({ segment: 'addon-storagemanager-course-storage' }) +@Component({ + selector: 'page-addon-storagemanager-course-storage', + templateUrl: 'course-storage.html', +}) +export class AddonStorageManagerCourseStoragePage { + @ViewChild(Content) content: Content; + + course: any; + loaded: boolean; + sections: any; + totalSize: number; + + constructor(navParams: NavParams, + private courseProvider: CoreCourseProvider, + private prefetchDelegate: CoreCourseModulePrefetchDelegate, + private courseHelperProvider: CoreCourseHelperProvider, + private domUtils: CoreDomUtilsProvider, + private translate: TranslateService) { + + this.course = navParams.get('course'); + } + + /** + * View loaded. + */ + ionViewDidLoad(): void { + this.courseProvider.getSections(this.course.id, false, true).then((sections) => { + this.courseHelperProvider.addHandlerDataForModules(sections, this.course.id); + this.sections = sections; + this.totalSize = 0; + + const allPromises = []; + this.sections.forEach((section) => { + section.totalSize = 0; + section.modules.forEach((module) => { + module.parentSection = section; + // Note: This function only gets the size for modules which are downloadable. + // For other modules it always returns 0, even if they have downloaded some files. + // However there is no 100% reliable way to actually track the files in this case. + // You can maybe guess it based on the component and componentid. + // But these aren't necessarily consistent, for example mod_frog vs mmaModFrog. + // There is nothing enforcing correct values. + // Most modules which have large files are downloadable, so I think this is sufficient. + const promise = this.prefetchDelegate.getModuleDownloadedSize(module, this.course.id). + then((size) => { + module.totalSize = size; + section.totalSize += size; + this.totalSize += size; + }); + allPromises.push(promise); + }); + }); + + Promise.all(allPromises).then(() => { + this.loaded = true; + }); + }); + } + + /** + * The user has requested a delete for the whole course data. + * + * (This works by deleting data for each module on the course that has data.) + */ + deleteForCourse(): void { + const modules = []; + this.sections.forEach((section) => { + section.modules.forEach((module) => { + if (module.totalSize > 0) { + modules.push(module); + } + }); + }); + + this.deleteModules(modules); + } + + /** + * The user has requested a delete for a section's data. + * + * (This works by deleting data for each module in the section that has data.) + * + * @param {any} section Section object with information about section and modules + */ + deleteForSection(section: any): void { + const modules = []; + section.modules.forEach((module) => { + if (module.totalSize > 0) { + modules.push(module); + } + }); + + this.deleteModules(modules); + } + + /** + * The user has requested a delete for a module's data + * + * @param {any} module Module details + */ + deleteForModule(module: any): void { + if (module.totalSize > 0) { + this.deleteModules([module]); + } + } + + /** + * Deletes the specified modules, showing the loading overlay while it happens. + * + * @param {any[]} modules Modules to delete + * @return Promise Once deleting has finished + */ + protected deleteModules(modules: any[]): Promise { + const modal = this.domUtils.showModalLoading(); + + const promises = []; + modules.forEach((module) => { + // Remove the files. + const promise = this.prefetchDelegate.removeModuleFiles(module, this.course.id).then(() => { + // When the files are removed, update the size. + module.parentSection.totalSize -= module.totalSize; + this.totalSize -= module.totalSize; + module.totalSize = 0; + }); + promises.push(promise); + }); + + return Promise.all(promises).then(() => { + modal.dismiss(); + }).catch((error) => { + modal.dismiss(); + + this.domUtils.showErrorModalDefault(error, this.translate.instant('core.errordeletefile')); + }); + } +} diff --git a/src/addon/storagemanager/providers/coursemenu-handler.ts b/src/addon/storagemanager/providers/coursemenu-handler.ts new file mode 100644 index 000000000..e2aad3def --- /dev/null +++ b/src/addon/storagemanager/providers/coursemenu-handler.ts @@ -0,0 +1,62 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreCourseOptionsMenuHandler, CoreCourseOptionsMenuHandlerData } from '@core/course/providers/options-delegate'; + +/** + * Handler to inject an option into course menu so that user can get to the manage storage page. + */ +@Injectable() +export class AddonStorageManagerCourseMenuHandler implements CoreCourseOptionsMenuHandler { + name = 'AddonStorageManager'; + priority = 500; + isMenuHandler = true; + + /** + * Checks if the handler is enabled for specified course. This handler is always available. + * + * @param {number} courseId Course id + * @param {any} accessData Access data + * @param {any} [navOptions] Navigation options if any + * @param {any} [admOptions] Admin options if any + * @return {boolean | Promise} True + */ + isEnabledForCourse(courseId: number, accessData: any, navOptions?: any, admOptions?: any): boolean | Promise { + return true; + } + + /** + * Check if the handler is enabled on a site level. + * + * @return {boolean | Promise} Whether or not the handler is enabled on a site level. + */ + isEnabled(): boolean | Promise { + return true; + } + + /** + * Returns the data needed to render the handler. + * + * @return {CoreCourseOptionsMenuHandlerData} Data needed to render the handler. + */ + getMenuDisplayData(): CoreCourseOptionsMenuHandlerData { + return { + icon: 'cube', + title: 'addon.storagemanager.managestorage', + page: 'AddonStorageManagerCourseStoragePage', + class: 'addon-storagemanager-coursemenu-handler' + }; + } +} diff --git a/src/addon/storagemanager/storagemanager.module.ts b/src/addon/storagemanager/storagemanager.module.ts new file mode 100644 index 000000000..9590abb60 --- /dev/null +++ b/src/addon/storagemanager/storagemanager.module.ts @@ -0,0 +1,34 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { NgModule } from '@angular/core'; +import { AddonStorageManagerCourseMenuHandler } from '@addon/storagemanager/providers/coursemenu-handler'; +import { CoreCourseOptionsDelegate } from '@core/course/providers/options-delegate'; + +@NgModule({ + declarations: [], + imports: [ + ], + providers: [ + AddonStorageManagerCourseMenuHandler + ], + exports: [] +}) +export class AddonStorageManagerModule { + constructor(private courseOptionsDelegate: CoreCourseOptionsDelegate, + private courseMenuHandler: AddonStorageManagerCourseMenuHandler) { + // Register handlers. + this.courseOptionsDelegate.registerHandler(this.courseMenuHandler); + } +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 71ce98128..aecc2cbe8 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -126,6 +126,7 @@ import { AddonNotificationsModule } from '@addon/notifications/notifications.mod import { AddonRemoteThemesModule } from '@addon/remotethemes/remotethemes.module'; import { AddonQbehaviourModule } from '@addon/qbehaviour/qbehaviour.module'; import { AddonQtypeModule } from '@addon/qtype/qtype.module'; +import { AddonStorageManagerModule } from '@addon/storagemanager/storagemanager.module'; // For translate loader. AoT requires an exported function for factories. export function createTranslateLoader(http: HttpClient): TranslateHttpLoader { @@ -244,7 +245,8 @@ export const CORE_PROVIDERS: any[] = [ AddonNotificationsModule, AddonRemoteThemesModule, AddonQbehaviourModule, - AddonQtypeModule + AddonQtypeModule, + AddonStorageManagerModule ], bootstrap: [IonicApp], entryComponents: [ diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index a6b658a3d..ef8a0e835 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -881,6 +881,11 @@ "addon.notifications.notifications": "Notifications", "addon.notifications.playsound": "Play sound", "addon.notifications.therearentnotificationsyet": "There are no notifications.", + "addon.storagemanager.deletecourse": "Offload all course data", + "addon.storagemanager.deletedatafrom": "Offload data from {{name}}", + "addon.storagemanager.info": "Files stored on your device make the app work faster, and when offline. You can safely offload them if you need to free up storage space.", + "addon.storagemanager.managestorage": "Manage storage", + "addon.storagemanager.storageused": "File storage used:", "assets.countries.AD": "Andorra", "assets.countries.AE": "United Arab Emirates", "assets.countries.AF": "Afghanistan", From affe05a9d5762ca7c36368859e2023059285d2fb Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 16:28:25 +0200 Subject: [PATCH 079/263] MOBILE-2856 data: Interfaces for WS and offline data --- src/addon/mod/data/components/index/index.ts | 3 - src/addon/mod/data/pages/edit/edit.ts | 3 - src/addon/mod/data/pages/entry/entry.ts | 3 - src/addon/mod/data/providers/data.ts | 126 ++++++++++++++---- src/addon/mod/data/providers/helper.ts | 83 +++++++----- src/addon/mod/data/providers/offline.ts | 46 ++++--- .../mod/data/providers/prefetch-handler.ts | 14 +- src/addon/mod/data/providers/sync.ts | 16 +-- 8 files changed, 193 insertions(+), 101 deletions(-) diff --git a/src/addon/mod/data/components/index/index.ts b/src/addon/mod/data/components/index/index.ts index 54c6d61cd..ac4d95546 100644 --- a/src/addon/mod/data/components/index/index.ts +++ b/src/addon/mod/data/components/index/index.ts @@ -327,9 +327,6 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp }); entries.entries.forEach((entry) => { - // Index contents by fieldid. - entry.contents = this.utils.arrayToObject(entry.contents, 'fieldid'); - if (typeof this.offlineActions[entry.id] != 'undefined') { promises.push(this.dataHelper.applyOfflineActions(entry, this.offlineActions[entry.id], this.fieldsArray)); } else { diff --git a/src/addon/mod/data/pages/edit/edit.ts b/src/addon/mod/data/pages/edit/edit.ts index 4ca834934..ce8ccd06a 100644 --- a/src/addon/mod/data/pages/edit/edit.ts +++ b/src/addon/mod/data/pages/edit/edit.ts @@ -158,9 +158,6 @@ export class AddonModDataEditPage { }).then((entry) => { if (entry) { entry = entry.entry; - - // Index contents by fieldid. - entry.contents = this.utils.arrayToObject(entry.contents, 'fieldid'); } else { entry = { contents: {} diff --git a/src/addon/mod/data/pages/entry/entry.ts b/src/addon/mod/data/pages/entry/entry.ts index 2c568ab8d..0ae32b2be 100644 --- a/src/addon/mod/data/pages/entry/entry.ts +++ b/src/addon/mod/data/pages/entry/entry.ts @@ -171,9 +171,6 @@ export class AddonModDataEntryPage implements OnDestroy { this.ratingInfo = entry.ratinginfo; entry = entry.entry; - // Index contents by fieldid. - entry.contents = this.utils.arrayToObject(entry.contents, 'fieldid'); - fieldsArray = this.utils.objectToArray(this.fields); return this.dataHelper.applyOfflineActions(entry, this.offlineActions, fieldsArray); diff --git a/src/addon/mod/data/providers/data.ts b/src/addon/mod/data/providers/data.ts index a50cf5156..31caaf80f 100644 --- a/src/addon/mod/data/providers/data.ts +++ b/src/addon/mod/data/providers/data.ts @@ -21,6 +21,67 @@ import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModDataOfflineProvider } from './offline'; import { AddonModDataFieldsDelegate } from './fields-delegate'; +import { CoreRatingInfo } from '@core/rating/providers/rating'; + +/** + * Database entry (online or offline). + */ +export interface AddonModDataEntry { + id: number; // Negative for offline entries. + userid: number; + groupid: number; + dataid: number; + timecreated: number; + timemodified: number; + approved: boolean; + canmanageentry: boolean; + fullname: string; + contents: AddonModDataEntryFields; + deleted?: boolean; // Entry is deleted offline. + hasOffline?: boolean; // Entry has offline actions. +} + +/** + * Entry field content. + */ +export interface AddonModDataEntryField { + fieldid: number; + content: string; + content1: string; + content2: string; + content3: string; + content4: string; + files: any[]; +} + +/** + * Entry contents indexed by field id. + */ +export interface AddonModDataEntryFields { + [fieldid: number]: AddonModDataEntryField; +} + +/** + * List of entries returned by web service and helper functions. + */ +export interface AddonModDataEntries { + entries: AddonModDataEntry[]; // Online entries. + totalcount: number; // Total count of online entries or found entries. + maxcount?: number; // Total count of online entries. Only returned when searching. + offlineEntries?: AddonModDataEntry[]; // Offline entries. + hasOfflineActions?: boolean; // Whether the database has offline data. + hasOfflineRatings?: boolean; // Whether the database has offline ratings. +} + +/** + * Subfield form data. + */ +export interface AddonModDataSubfieldData { + fieldid: number; + subfield?: string; + value?: string; // Value encoded in JSON. + files?: any[]; +} /** * Service that provides some features for databases. @@ -49,13 +110,13 @@ export class AddonModDataProvider { * @param {number} courseId Course ID. * @param {any} contents The fields data to be created. * @param {number} [groupId] Group id, 0 means that the function will determine the user group. - * @param {any} fields The fields that define the contents. + * @param {any[]} fields The fields that define the contents. * @param {string} [siteId] Site ID. If not defined, current site. * @param {boolean} [forceOffline] Force editing entry in offline. * @return {Promise} Promise resolved when the action is done. */ - addEntry(dataId: number, entryId: number, courseId: number, contents: any, groupId: number = 0, fields: any, siteId?: string, - forceOffline: boolean = false): Promise { + addEntry(dataId: number, entryId: number, courseId: number, contents: AddonModDataSubfieldData[], groupId: number = 0, + fields: any, siteId?: string, forceOffline: boolean = false): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); // Convenience function to store a data to be synchronized later. @@ -93,12 +154,12 @@ export class AddonModDataProvider { * Adds a new entry to a database. It does not cache calls. It will fail if offline or cannot connect. * * @param {number} dataId Database ID. - * @param {any} data The fields data to be created. + * @param {any[]} data The fields data to be created. * @param {number} [groupId] Group id, 0 means that the function will determine the user group. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the action is done. */ - addEntryOnline(dataId: number, data: any, groupId?: number, siteId?: string): Promise { + addEntryOnline(dataId: number, data: AddonModDataSubfieldData[], groupId?: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const params = { databaseid: dataId, @@ -184,7 +245,7 @@ export class AddonModDataProvider { * @param {any} contents The contents data of the fields. * @return {any} Array of notifications if any or false. */ - protected checkFields(fields: any, contents: any): any { + protected checkFields(fields: any, contents: AddonModDataSubfieldData[]): any[] | false { const notifications = [], contentsIndexed = {}; @@ -289,13 +350,13 @@ export class AddonModDataProvider { * @param {number} dataId Database ID. * @param {number} entryId Entry ID. * @param {number} courseId Course ID. - * @param {any} contents The contents data to be updated. + * @param {any[]} contents The contents data to be updated. * @param {any} fields The fields that define the contents. * @param {string} [siteId] Site ID. If not defined, current site. * @param {boolean} forceOffline Force editing entry in offline. * @return {Promise} Promise resolved when the action is done. */ - editEntry(dataId: number, entryId: number, courseId: number, contents: any, fields: any, siteId?: string, + editEntry(dataId: number, entryId: number, courseId: number, contents: AddonModDataSubfieldData[], fields: any, siteId?: string, forceOffline: boolean = false): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); @@ -370,11 +431,11 @@ export class AddonModDataProvider { * Updates an existing entry. It does not cache calls. It will fail if offline or cannot connect. * * @param {number} entryId Entry ID. - * @param {any} data The fields data to be updated. + * @param {any[]} data The fields data to be updated. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the action is done. */ - editEntryOnline(entryId: number, data: number, siteId?: string): Promise { + editEntryOnline(entryId: number, data: AddonModDataSubfieldData[], siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const params = { entryid: entryId, @@ -397,11 +458,11 @@ export class AddonModDataProvider { * @param {boolean} [forceCache] True to always get the value from cache, false otherwise. Default false. * @param {boolean} [ignoreCache] True if it should ignore cached data (it will always fail in offline or server down). * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved when done. + * @return {Promise} Promise resolved when done. */ fetchAllEntries(dataId: number, groupId: number = 0, sort: string = '0', order: string = 'DESC', perPage: number = AddonModDataProvider.PER_PAGE, forceCache: boolean = false, ignoreCache: boolean = false, - siteId?: string): Promise { + siteId?: string): Promise { siteId = siteId || this.sitesProvider.getCurrentSiteId(); return this.fetchEntriesRecursive(dataId, groupId, sort, order, perPage, forceCache, ignoreCache, [], 0, siteId); @@ -420,10 +481,10 @@ export class AddonModDataProvider { * @param {any} entries Entries already fetch (just to concatenate them). * @param {number} page Page of records to return. * @param {string} siteId Site ID. - * @return {Promise} Promise resolved when done. + * @return {Promise} Promise resolved when done. */ protected fetchEntriesRecursive(dataId: number, groupId: number, sort: string, order: string, perPage: number, - forceCache: boolean, ignoreCache: boolean, entries: any, page: number, siteId: string): Promise { + forceCache: boolean, ignoreCache: boolean, entries: any, page: number, siteId: string): Promise { return this.getEntries(dataId, groupId, sort, order, page, perPage, forceCache, ignoreCache, siteId) .then((result) => { entries = entries.concat(result.entries); @@ -595,11 +656,11 @@ export class AddonModDataProvider { * @param {boolean} [forceCache=false] True to always get the value from cache, false otherwise. Default false. * @param {boolean} [ignoreCache=false] True if it should ignore cached data (it'll always fail in offline or server down). * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved when the database is retrieved. + * @return {Promise} Promise resolved when the database is retrieved. */ getEntries(dataId: number, groupId: number = 0, sort: string = '0', order: string = 'DESC', page: number = 0, perPage: number = AddonModDataProvider.PER_PAGE, forceCache: boolean = false, ignoreCache: boolean = false, - siteId?: string): Promise { + siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { // Always use sort and order params to improve cache usage (entries are identified by params). const params = { @@ -622,7 +683,13 @@ export class AddonModDataProvider { preSets['emergencyCache'] = false; } - return site.read('mod_data_get_entries', params, preSets); + return site.read('mod_data_get_entries', params, preSets).then((response) => { + response.entries.forEach((entry) => { + entry.contents = this.utils.arrayToObject(entry.contents, 'fieldid'); + }); + + return response; + }); }); } @@ -654,9 +721,10 @@ export class AddonModDataProvider { * @param {number} entryId Entry ID. * @param {boolean} [ignoreCache=false] True if it should ignore cached data (it'll always fail in offline or server down). * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved when the database entry is retrieved. + * @return {Promise<{entry: AddonModDataEntry, ratinginfo: CoreRatingInfo}>} Promise resolved when the entry is retrieved. */ - getEntry(dataId: number, entryId: number, ignoreCache: boolean = false, siteId?: string): Promise { + getEntry(dataId: number, entryId: number, ignoreCache: boolean = false, siteId?: string): + Promise<{entry: AddonModDataEntry, ratinginfo: CoreRatingInfo}> { return this.sitesProvider.getSite(siteId).then((site) => { const params = { entryid: entryId, @@ -671,7 +739,11 @@ export class AddonModDataProvider { preSets['emergencyCache'] = false; } - return site.read('mod_data_get_entry', params, preSets); + return site.read('mod_data_get_entry', params, preSets).then((response) => { + response.entry.contents = this.utils.arrayToObject(response.entry.contents, 'fieldid'); + + return response; + }); }); } @@ -871,16 +943,16 @@ export class AddonModDataProvider { * @param {number} dataId The data instance id. * @param {number} [groupId=0] Group id, 0 means that the function will determine the user group. * @param {string} [search] Search text. It will be used if advSearch is not defined. - * @param {any} [advSearch] Advanced search data. + * @param {any[]} [advSearch] Advanced search data. * @param {string} [sort] Sort by this field. * @param {string} [order] The direction of the sorting. * @param {number} [page=0] Page of records to return. * @param {number} [perPage=PER_PAGE] Records per page to return. Default on AddonModDataProvider.PER_PAGE. * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved when the action is done. + * @return {Promise} Promise resolved when the action is done. */ searchEntries(dataId: number, groupId: number = 0, search?: string, advSearch?: any, sort?: string, order?: string, - page: number = 0, perPage: number = AddonModDataProvider.PER_PAGE, siteId?: string): Promise { + page: number = 0, perPage: number = AddonModDataProvider.PER_PAGE, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const params = { databaseid: dataId, @@ -911,7 +983,13 @@ export class AddonModDataProvider { params['advsearch'] = advSearch; } - return site.read('mod_data_search_entries', params, preSets); + return site.read('mod_data_search_entries', params, preSets).then((response) => { + response.entries.forEach((entry) => { + entry.contents = this.utils.arrayToObject(entry.contents, 'fieldid'); + }); + + return response; + }); }); } } diff --git a/src/addon/mod/data/providers/helper.ts b/src/addon/mod/data/providers/helper.ts index c713f3674..930d63e15 100644 --- a/src/addon/mod/data/providers/helper.ts +++ b/src/addon/mod/data/providers/helper.ts @@ -18,8 +18,8 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploader'; import { AddonModDataFieldsDelegate } from './fields-delegate'; -import { AddonModDataOfflineProvider } from './offline'; -import { AddonModDataProvider } from './data'; +import { AddonModDataOfflineProvider, AddonModDataOfflineAction } from './offline'; +import { AddonModDataProvider, AddonModDataEntry, AddonModDataEntryFields } from './data'; /** * Service that provides helper functions for datas. @@ -35,15 +35,19 @@ export class AddonModDataHelperProvider { /** * Returns the record with the offline actions applied. * - * @param {any} record Entry to modify. - * @param {any} offlineActions Offline data with the actions done. - * @param {any} fields Entry defined fields indexed by fieldid. - * @return {any} Modified entry. + * @param {AddonModDataEntry} record Entry to modify. + * @param {AddonModDataOfflineAction[]} offlineActions Offline data with the actions done. + * @param {any[]} fields Entry defined fields indexed by fieldid. + * @return {Promise} Promise resolved when done. */ - applyOfflineActions(record: any, offlineActions: any[], fields: any[]): any { + applyOfflineActions(record: AddonModDataEntry, offlineActions: AddonModDataOfflineAction[], fields: any[]): + Promise { const promises = []; offlineActions.forEach((action) => { + record.timemodified = action.timemodified; + record.hasOffline = true; + switch (action.action) { case 'approve': record.approved = true; @@ -56,6 +60,8 @@ export class AddonModDataHelperProvider { break; case 'add': case 'edit': + record.groupid = action.groupid; + const offlineContents = {}; action.fields.forEach((offlineContent) => { @@ -77,10 +83,12 @@ export class AddonModDataHelperProvider { promises.push(this.getStoredFiles(record.dataid, record.id, field.id).then((offlineFiles) => { record.contents[field.id] = this.fieldsDelegate.overrideData(field, record.contents[field.id], offlineContents[field.id], offlineFiles); + record.contents[field.id].fieldid = field.id; })); } else { record.contents[field.id] = this.fieldsDelegate.overrideData(field, record.contents[field.id], offlineContents[field.id]); + record.contents[field.id].fieldid = field.id; } }); break; @@ -97,15 +105,16 @@ export class AddonModDataHelperProvider { /** * Displays fields for being shown. * - * @param {string} template Template HMTL. - * @param {any[]} fields Fields that defines every content in the entry. - * @param {any} entry Entry. - * @param {number} offset Entry offset. - * @param {string} mode Mode list or show. - * @param {any} actions Actions that can be performed to the record. - * @return {string} Generated HTML. + * @param {string} template Template HMTL. + * @param {any[]} fields Fields that defines every content in the entry. + * @param {any} entry Entry. + * @param {number} offset Entry offset. + * @param {string} mode Mode list or show. + * @param {AddonModDataOfflineAction[]} actions Actions that can be performed to the record. + * @return {string} Generated HTML. */ - displayShowFields(template: string, fields: any[], entry: any, offset: number, mode: string, actions: any): string { + displayShowFields(template: string, fields: any[], entry: any, offset: number, mode: string, + actions: AddonModDataOfflineAction[]): string { if (!template) { return ''; } @@ -256,17 +265,17 @@ export class AddonModDataHelperProvider { * Retrieve the entered data in the edit form. * We don't use ng-model because it doesn't detect changes done by JavaScript. * - * @param {any} inputData Array with the entered form values. - * @param {Array} fields Fields that defines every content in the entry. - * @param {number} [dataId] Database Id. If set, files will be uploaded and itemId set. - * @param {number} entryId Entry Id. - * @param {any} entryContents Original entry contents indexed by field id. - * @param {boolean} offline True to prepare the data for an offline uploading, false otherwise. - * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} That contains object with the answers. + * @param {any} inputData Array with the entered form values. + * @param {Array} fields Fields that defines every content in the entry. + * @param {number} [dataId] Database Id. If set, files will be uploaded and itemId set. + * @param {number} entryId Entry Id. + * @param {AddonModDataEntryFields} entryContents Original entry contents. + * @param {boolean} offline True to prepare the data for an offline uploading, false otherwise. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} That contains object with the answers. */ - getEditDataFromForm(inputData: any, fields: any, dataId: number, entryId: number, entryContents: any, offline: boolean = false, - siteId?: string): Promise { + getEditDataFromForm(inputData: any, fields: any, dataId: number, entryId: number, entryContents: AddonModDataEntryFields, + offline: boolean = false, siteId?: string): Promise { if (!inputData) { return Promise.resolve({}); } @@ -322,13 +331,13 @@ export class AddonModDataHelperProvider { /** * Retrieve the temp files to be updated. * - * @param {any} inputData Array with the entered form values. - * @param {Array} fields Fields that defines every content in the entry. - * @param {number} [dataId] Database Id. If set, fils will be uploaded and itemId set. - * @param {any} entryContents Original entry contents indexed by field id. - * @return {Promise} That contains object with the files. + * @param {any} inputData Array with the entered form values. + * @param {any[]} fields Fields that defines every content in the entry. + * @param {number} [dataId] Database Id. If set, fils will be uploaded and itemId set. + * @param {AddonModDataEntryFields} entryContents Original entry contents indexed by field id. + * @return {Promise} That contains object with the files. */ - getEditTmpFiles(inputData: any, fields: any, dataId: number, entryContents: any): Promise { + getEditTmpFiles(inputData: any, fields: any[], dataId: number, entryContents: AddonModDataEntryFields): Promise { if (!inputData) { return Promise.resolve([]); } @@ -403,13 +412,13 @@ export class AddonModDataHelperProvider { /** * Check if data has been changed by the user. * - * @param {any} inputData Array with the entered form values. - * @param {any} fields Fields that defines every content in the entry. - * @param {number} [dataId] Database Id. If set, fils will be uploaded and itemId set. - * @param {any} entryContents Original entry contents indexed by field id. - * @return {Promise} True if changed, false if not. + * @param {any} inputData Object with the entered form values. + * @param {any[]} fields Fields that defines every content in the entry. + * @param {number} [dataId] Database Id. If set, fils will be uploaded and itemId set. + * @param {AddonModDataEntryFields} entryContents Original entry contents indexed by field id. + * @return {Promise} True if changed, false if not. */ - hasEditDataChanged(inputData: any, fields: any, dataId: number, entryContents: any): Promise { + hasEditDataChanged(inputData: any, fields: any[], dataId: number, entryContents: AddonModDataEntryFields): Promise { const promises = fields.map((field) => { return this.fieldsDelegate.hasFieldDataChanged(field, inputData, entryContents[field.id]); }); diff --git a/src/addon/mod/data/providers/offline.ts b/src/addon/mod/data/providers/offline.ts index 0c773f978..92e38cb25 100644 --- a/src/addon/mod/data/providers/offline.ts +++ b/src/addon/mod/data/providers/offline.ts @@ -19,6 +19,20 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreFileProvider } from '@providers/file'; import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploader'; import { SQLiteDB } from '@classes/sqlitedb'; +import { AddonModDataSubfieldData } from './data'; + +/** + * Entry action stored offline. + */ +export interface AddonModDataOfflineAction { + dataid: number; + courseid: number; + groupid: number; + action: string; + entryid: number; // Negative for offline entries. + fields: AddonModDataSubfieldData[]; + timemodified: number; +} /** * Service to handle Offline data. @@ -175,10 +189,10 @@ export class AddonModDataOfflineProvider { /** * Get all the stored entry data from all the databases. * - * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved with entries. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved with entries. */ - getAllEntries(siteId?: string): Promise { + getAllEntries(siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { return site.getDb().getAllRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE); }).then((entries) => { @@ -189,11 +203,11 @@ export class AddonModDataOfflineProvider { /** * Get all the stored entry data from a certain database. * - * @param {number} dataId Database ID. - * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved with entries. + * @param {number} dataId Database ID. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved with entries. */ - getDatabaseEntries(dataId: number, siteId?: string): Promise { + getDatabaseEntries(dataId: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { return site.getDb().getRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId}); }).then((entries) => { @@ -208,9 +222,9 @@ export class AddonModDataOfflineProvider { * @param {number} entryId Database entry Id. * @param {string} action Action to be done * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved with entry. + * @return {Promise} Promise resolved with entry. */ - getEntry(dataId: number, entryId: number, action: string, siteId?: string): Promise { + getEntry(dataId: number, entryId: number, action: string, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { return site.getDb().getRecord(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId, entryid: entryId, action: action}); @@ -225,9 +239,9 @@ export class AddonModDataOfflineProvider { * @param {number} dataId Database ID. * @param {number} entryId Database entry Id. * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved with entry actions. + * @return {Promise} Promise resolved with entry actions. */ - getEntryActions(dataId: number, entryId: number, siteId?: string): Promise { + getEntryActions(dataId: number, entryId: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { return site.getDb().getRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId, entryid: entryId}); }).then((entries) => { @@ -286,10 +300,10 @@ export class AddonModDataOfflineProvider { /** * Parse "fields" of an offline record. * - * @param {any} record Record object - * @return {any} Record object with columns parsed. + * @param {any} record Record object + * @return {AddonModDataOfflineAction} Record object with columns parsed. */ - protected parseRecord(record: any): any { + protected parseRecord(record: any): AddonModDataOfflineAction { record.fields = this.textUtils.parseJSON(record.fields); return record; @@ -308,8 +322,8 @@ export class AddonModDataOfflineProvider { * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved if stored, rejected if failure. */ - saveEntry(dataId: number, entryId: number, action: string, courseId: number, groupId?: number, fields?: any[], - timemodified?: number, siteId?: string): Promise { + saveEntry(dataId: number, entryId: number, action: string, courseId: number, groupId?: number, + fields?: AddonModDataSubfieldData[], timemodified?: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { timemodified = timemodified || new Date().getTime(); diff --git a/src/addon/mod/data/providers/prefetch-handler.ts b/src/addon/mod/data/providers/prefetch-handler.ts index 5586ef558..a0a0d297a 100644 --- a/src/addon/mod/data/providers/prefetch-handler.ts +++ b/src/addon/mod/data/providers/prefetch-handler.ts @@ -25,7 +25,7 @@ import { CoreCommentsProvider } from '@core/comments/providers/comments'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/activity-prefetch-handler'; import { CoreRatingProvider } from '@core/rating/providers/rating'; -import { AddonModDataProvider } from './data'; +import { AddonModDataProvider, AddonModDataEntry } from './data'; import { AddonModDataSyncProvider } from './sync'; import { AddonModDataHelperProvider } from './helper'; @@ -57,10 +57,10 @@ export class AddonModDataPrefetchHandler extends CoreCourseActivityPrefetchHandl * @param {boolean} [forceCache] True to always get the value from cache, false otherwise. Default false. * @param {boolean} [ignoreCache] True if it should ignore cached data (it will always fail in offline or server down). * @param {string} [siteId] Site ID. - * @return {Promise} All unique entries. + * @return {Promise} All unique entries. */ protected getAllUniqueEntries(dataId: number, groups: any[], forceCache: boolean = false, ignoreCache: boolean = false, - siteId?: string): Promise { + siteId?: string): Promise { const promises = groups.map((group) => { return this.dataProvider.fetchAllEntries(dataId, group.id, undefined, undefined, undefined, forceCache, ignoreCache, siteId); @@ -139,14 +139,14 @@ export class AddonModDataPrefetchHandler extends CoreCourseActivityPrefetchHandl /** * Returns the file contained in the entries. * - * @param {any[]} entries List of entries to get files from. - * @return {any[]} List of files. + * @param {AddonModDataEntry[]} entries List of entries to get files from. + * @return {any[]} List of files. */ - protected getEntriesFiles(entries: any[]): any[] { + protected getEntriesFiles(entries: AddonModDataEntry[]): any[] { let files = []; entries.forEach((entry) => { - entry.contents.forEach((content) => { + this.utils.objectToArray(entry.contents).forEach((content) => { files = files.concat(content.files); }); }); diff --git a/src/addon/mod/data/providers/sync.ts b/src/addon/mod/data/providers/sync.ts index 5bfe991bd..03590485a 100644 --- a/src/addon/mod/data/providers/sync.ts +++ b/src/addon/mod/data/providers/sync.ts @@ -20,7 +20,7 @@ import { CoreAppProvider } from '@providers/app'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; -import { AddonModDataOfflineProvider } from './offline'; +import { AddonModDataOfflineProvider, AddonModDataOfflineAction } from './offline'; import { AddonModDataProvider } from './data'; import { AddonModDataHelperProvider } from './helper'; import { CoreEventsProvider } from '@providers/events'; @@ -174,7 +174,7 @@ export class AddonModDataSyncProvider extends CoreSyncBaseProvider { // No offline data found, return empty object. return []; }); - }).then((offlineActions) => { + }).then((offlineActions: AddonModDataOfflineAction[]) => { if (!offlineActions.length) { // Nothing to sync. return; @@ -226,13 +226,13 @@ export class AddonModDataSyncProvider extends CoreSyncBaseProvider { /** * Synchronize an entry. * - * @param {any} data Database. - * @param {any} entryActions Entry actions. - * @param {any} result Object with the result of the sync. - * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved if success, rejected otherwise. + * @param {any} data Database. + * @param {AddonModDataOfflineAction[]} entryActions Entry actions. + * @param {any} result Object with the result of the sync. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved if success, rejected otherwise. */ - protected syncEntry(data: any, entryActions: any[], result: any, siteId?: string): Promise { + protected syncEntry(data: any, entryActions: AddonModDataOfflineAction[], result: any, siteId?: string): Promise { let discardError, timePromise, entryId = 0, From 3d0e7d14e101b03fe7ccea89fe6fc33f39f6821d Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 17:24:25 +0200 Subject: [PATCH 080/263] MOBILE-2856 data: Fix error when adding entry offline --- src/addon/mod/data/providers/data.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/addon/mod/data/providers/data.ts b/src/addon/mod/data/providers/data.ts index 31caaf80f..f79ab69a2 100644 --- a/src/addon/mod/data/providers/data.ts +++ b/src/addon/mod/data/providers/data.ts @@ -137,6 +137,8 @@ export class AddonModDataProvider { fieldnotifications: notifications }); } + + return storeOffline(); } return this.addEntryOnline(dataId, contents, groupId, siteId).catch((error) => { From 6b0f08695fe1cd4f25a965d94fdd6a52bf9dcd7a Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 17:39:26 +0200 Subject: [PATCH 081/263] MOBILE-2856 data: Helper functions for fetching entries --- src/addon/mod/data/components/index/index.ts | 173 +++++------------ src/addon/mod/data/pages/edit/edit.ts | 19 +- src/addon/mod/data/pages/entry/entry.html | 4 +- src/addon/mod/data/pages/entry/entry.ts | 30 +-- src/addon/mod/data/providers/helper.ts | 192 +++++++++++++++---- src/addon/mod/data/providers/offline.ts | 17 +- 6 files changed, 222 insertions(+), 213 deletions(-) diff --git a/src/addon/mod/data/components/index/index.ts b/src/addon/mod/data/components/index/index.ts index ac4d95546..3236fbd37 100644 --- a/src/addon/mod/data/components/index/index.ts +++ b/src/addon/mod/data/components/index/index.ts @@ -20,11 +20,9 @@ import { CoreGroupsProvider, CoreGroupInfo } from '@providers/groups'; import { CoreCourseModuleMainActivityComponent } from '@core/course/classes/main-activity-component'; import { CoreCommentsProvider } from '@core/comments/providers/comments'; import { CoreRatingProvider } from '@core/rating/providers/rating'; -import { CoreRatingOfflineProvider } from '@core/rating/providers/offline'; import { CoreRatingSyncProvider } from '@core/rating/providers/sync'; import { AddonModDataProvider } from '../../providers/data'; import { AddonModDataHelperProvider } from '../../providers/helper'; -import { AddonModDataOfflineProvider } from '../../providers/offline'; import { AddonModDataSyncProvider } from '../../providers/sync'; import { AddonModDataComponentsModule } from '../components.module'; import { AddonModDataPrefetchHandler } from '../../providers/prefetch-handler'; @@ -65,8 +63,6 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp advanced: [] }; hasNextPage = false; - offlineActions: any; - offlineEntries: any; entriesRendered = ''; extraImports = [AddonModDataComponentsModule]; jsData; @@ -81,12 +77,19 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp protected ratingOfflineObserver: any; protected ratingSyncObserver: any; - constructor(injector: Injector, private dataProvider: AddonModDataProvider, private dataHelper: AddonModDataHelperProvider, - private dataOffline: AddonModDataOfflineProvider, @Optional() content: Content, - private prefetchHandler: AddonModDataPrefetchHandler, private timeUtils: CoreTimeUtilsProvider, - private groupsProvider: CoreGroupsProvider, private commentsProvider: CoreCommentsProvider, - private modalCtrl: ModalController, private utils: CoreUtilsProvider, protected navCtrl: NavController, - private ratingOffline: CoreRatingOfflineProvider) { + constructor( + injector: Injector, + @Optional() content: Content, + private dataProvider: AddonModDataProvider, + private dataHelper: AddonModDataHelperProvider, + private prefetchHandler: AddonModDataPrefetchHandler, + private timeUtils: CoreTimeUtilsProvider, + private groupsProvider: CoreGroupsProvider, + private commentsProvider: CoreCommentsProvider, + private modalCtrl: ModalController, + private utils: CoreUtilsProvider, + protected navCtrl: NavController) { + super(injector, content); // Refresh entries on change. @@ -233,8 +236,6 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp this.selectedGroup = groupInfo.groups[0].id; } } - - return this.fetchOfflineEntries(); }); }).then(() => { return this.dataProvider.getFields(this.data.id).then((fields) => { @@ -270,21 +271,19 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp // Update values for current group. this.access.canaddentry = accessData.canaddentry; - if (this.search.searching) { - const text = this.search.searchingAdvanced ? undefined : this.search.text, - advanced = this.search.searchingAdvanced ? this.search.advanced : undefined; + const search = this.search.searching && !this.search.searchingAdvanced ? this.search.text : undefined; + const advSearch = this.search.searching && this.search.searchingAdvanced ? this.search.advanced : undefined; - return this.dataProvider.searchEntries(this.data.id, this.selectedGroup, text, advanced, this.search.sortBy, - this.search.sortDirection, this.search.page); - } else { - return this.dataProvider.getEntries(this.data.id, this.selectedGroup, this.search.sortBy, this.search.sortDirection, - this.search.page); - } + return this.dataHelper.fetchEntries(this.data, this.fieldsArray, this.selectedGroup, search, advSearch, + this.search.sortBy, this.search.sortDirection, this.search.page); }).then((entries) => { - const numEntries = (entries && entries.entries && entries.entries.length) || 0; - this.isEmpty = !numEntries && !Object.keys(this.offlineActions).length && !Object.keys(this.offlineEntries).length; + const numEntries = entries.entries.length; + const numOfflineEntries = entries.offlineEntries.length; + this.isEmpty = !numEntries && !entries.offlineEntries.length; this.hasNextPage = numEntries >= AddonModDataProvider.PER_PAGE && ((this.search.page + 1) * AddonModDataProvider.PER_PAGE) < entries.totalcount; + this.hasOffline = entries.hasOfflineActions; + this.hasOfflineRatings = entries.hasOfflineRatings; this.entriesRendered = ''; if (typeof entries.maxcount != 'undefined') { @@ -298,76 +297,40 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp } if (!this.isEmpty) { - const siteInfo = this.sitesProvider.getCurrentSite().getInfo(), - promises = []; + this.entries = entries.offlineEntries.concat(entries.entries); - this.utils.objectToArray(this.offlineEntries).forEach((offlineActions) => { - const offlineEntry = offlineActions.find((offlineEntry) => offlineEntry.action == 'add'); + let entriesHTML = this.data.listtemplateheader || ''; - if (offlineEntry) { - const entry = { - id: offlineEntry.entryid, - canmanageentry: true, - approved: !this.data.approval || this.data.manageapproved, - dataid: offlineEntry.dataid, - groupid: offlineEntry.groupid, - timecreated: -offlineEntry.entryid, - timemodified: -offlineEntry.entryid, - userid: siteInfo.userid, - fullname: siteInfo.fullname, - contents: {} - }; + // Get first entry from the whole list. + if (!this.search.searching || !this.firstEntry) { + this.firstEntry = this.entries[0].id; + } - if (offlineActions.length > 0) { - promises.push(this.dataHelper.applyOfflineActions(entry, offlineActions, this.fieldsArray)); - } else { - promises.push(Promise.resolve(entry)); - } - } + const template = this.data.listtemplate || this.dataHelper.getDefaultTemplate('list', this.fieldsArray); + + const entriesById = {}; + this.entries.forEach((entry, index) => { + entriesById[entry.id] = entry; + + const actions = this.dataHelper.getActions(this.data, this.access, entry); + const offset = this.search.searching ? undefined : + this.search.page * AddonModDataProvider.PER_PAGE + index - numOfflineEntries; + + entriesHTML += this.dataHelper.displayShowFields(template, this.fieldsArray, entry, offset, 'list', actions); }); + entriesHTML += this.data.listtemplatefooter || ''; - entries.entries.forEach((entry) => { - if (typeof this.offlineActions[entry.id] != 'undefined') { - promises.push(this.dataHelper.applyOfflineActions(entry, this.offlineActions[entry.id], this.fieldsArray)); - } else { - promises.push(Promise.resolve(entry)); - } - }); + this.entriesRendered = entriesHTML; - return Promise.all(promises).then((entries) => { - this.entries = entries; - - let entriesHTML = this.data.listtemplateheader || ''; - - // Get first entry from the whole list. - if (entries && entries[0] && (!this.search.searching || !this.firstEntry)) { - this.firstEntry = entries[0].id; - } - - const template = this.data.listtemplate || this.dataHelper.getDefaultTemplate('list', this.fieldsArray); - - const entriesById = {}; - entries.forEach((entry, index) => { - entriesById[entry.id] = entry; - - const actions = this.dataHelper.getActions(this.data, this.access, entry); - const offset = this.search.page * AddonModDataProvider.PER_PAGE + index; - - entriesHTML += this.dataHelper.displayShowFields(template, this.fieldsArray, entry, offset, 'list', - actions); - }); - entriesHTML += this.data.listtemplatefooter || ''; - - this.entriesRendered = entriesHTML; - - // Pass the input data to the component. - this.jsData = { - fields: this.fields, - entries: entriesById, - data: this.data, - gotoEntry: this.gotoEntry.bind(this) - }; - }); + // Pass the input data to the component. + this.jsData = { + fields: this.fields, + entries: entriesById, + data: this.data, + module: this.module, + group: this.selectedGroup, + gotoEntry: this.gotoEntry.bind(this) + }; } else if (!this.search.searching) { // Empty and no searching. this.canSearch = false; @@ -476,42 +439,6 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp this.navCtrl.push('AddonModDataEntryPage', params); } - /** - * Fetch offline entries. - * - * @return {Promise} Resolved then done. - */ - protected fetchOfflineEntries(): Promise { - // Check if there are entries stored in offline. - return this.dataOffline.getDatabaseEntries(this.data.id).then((offlineEntries) => { - this.hasOffline = !!offlineEntries.length; - - this.offlineActions = {}; - this.offlineEntries = {}; - - // Only show offline entries on first page. - if (this.search.page == 0 && this.hasOffline) { - offlineEntries.forEach((entry) => { - if (entry.entryid > 0) { - if (typeof this.offlineActions[entry.entryid] == 'undefined') { - this.offlineActions[entry.entryid] = []; - } - this.offlineActions[entry.entryid].push(entry); - } else { - if (typeof this.offlineActions[entry.entryid] == 'undefined') { - this.offlineEntries[entry.entryid] = []; - } - this.offlineEntries[entry.entryid].push(entry); - } - }); - } - }).then(() => { - return this.ratingOffline.hasRatings('mod_data', 'entry', 'module', this.data.coursemodule).then((hasRatings) => { - this.hasOfflineRatings = hasRatings; - }); - }); - } - /** * Performs the sync of the activity. * diff --git a/src/addon/mod/data/pages/edit/edit.ts b/src/addon/mod/data/pages/edit/edit.ts index ce8ccd06a..bed268873 100644 --- a/src/addon/mod/data/pages/edit/edit.ts +++ b/src/addon/mod/data/pages/edit/edit.ts @@ -45,7 +45,6 @@ export class AddonModDataEditPage { protected data: any; protected entryId: number; protected entry: any; - protected offlineActions = []; protected fields = {}; protected fieldsArray = []; protected siteId: string; @@ -145,28 +144,14 @@ export class AddonModDataEditPage { }); } }).then(() => { - return this.dataOffline.getEntryActions(this.data.id, this.entryId); - }).then((actions) => { - this.offlineActions = actions; - return this.dataProvider.getFields(this.data.id); }).then((fieldsData) => { this.fieldsArray = fieldsData; this.fields = this.utils.arrayToObject(fieldsData, 'id'); - return this.dataHelper.getEntry(this.data, this.entryId, this.offlineActions); + return this.dataHelper.fetchEntry(this.data, fieldsData, this.entryId); }).then((entry) => { - if (entry) { - entry = entry.entry; - } else { - entry = { - contents: {} - }; - } - - return this.dataHelper.applyOfflineActions(entry, this.offlineActions, this.fieldsArray); - }).then((entryData) => { - this.entry = entryData; + this.entry = entry.entry; this.editFormRender = this.displayEditFields(); }).catch((message) => { diff --git a/src/addon/mod/data/pages/entry/entry.html b/src/addon/mod/data/pages/entry/entry.html index aef6d0da0..20e8d31d0 100644 --- a/src/addon/mod/data/pages/entry/entry.html +++ b/src/addon/mod/data/pages/entry/entry.html @@ -9,7 +9,7 @@ -
+
{{ 'core.hasdatatosync' | translate: {$a: moduleName} }}
@@ -31,7 +31,7 @@ - + diff --git a/src/addon/mod/data/pages/entry/entry.ts b/src/addon/mod/data/pages/entry/entry.ts index 0ae32b2be..07b3ee48f 100644 --- a/src/addon/mod/data/pages/entry/entry.ts +++ b/src/addon/mod/data/pages/entry/entry.ts @@ -23,7 +23,6 @@ import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreRatingInfo } from '@core/rating/providers/rating'; import { AddonModDataProvider } from '../../providers/data'; import { AddonModDataHelperProvider } from '../../providers/helper'; -import { AddonModDataOfflineProvider } from '../../providers/offline'; import { AddonModDataSyncProvider } from '../../providers/sync'; import { AddonModDataFieldsDelegate } from '../../providers/fields-delegate'; import { AddonModDataComponentsModule } from '../../components/components.module'; @@ -46,6 +45,7 @@ export class AddonModDataEntryPage implements OnDestroy { protected syncObserver: any; // It will observe the sync auto event. protected entryChangedObserver: any; // It will observe the changed entry event. protected fields = {}; + protected fieldsArray = []; title = ''; moduleName = 'data'; @@ -56,8 +56,6 @@ export class AddonModDataEntryPage implements OnDestroy { loadingRating = false; selectedGroup = 0; entry: any; - offlineActions = []; - hasOffline = false; previousOffset: number; nextOffset: number; access: any; @@ -74,7 +72,7 @@ export class AddonModDataEntryPage implements OnDestroy { constructor(params: NavParams, protected utils: CoreUtilsProvider, protected groupsProvider: CoreGroupsProvider, protected domUtils: CoreDomUtilsProvider, protected fieldsDelegate: AddonModDataFieldsDelegate, protected courseProvider: CoreCourseProvider, protected dataProvider: AddonModDataProvider, - protected dataOffline: AddonModDataOfflineProvider, protected dataHelper: AddonModDataHelperProvider, + protected dataHelper: AddonModDataHelperProvider, sitesProvider: CoreSitesProvider, protected navCtrl: NavController, protected eventsProvider: CoreEventsProvider, private cdr: ChangeDetectorRef) { this.module = params.get('module') || {}; @@ -131,8 +129,6 @@ export class AddonModDataEntryPage implements OnDestroy { * @return {Promise} Resolved when done. */ protected fetchEntryData(refresh?: boolean, isPtr?: boolean): Promise { - let fieldsArray; - this.isPullingToRefresh = isPtr; return this.dataProvider.getDatabase(this.courseId, this.module.id).then((data) => { @@ -155,32 +151,22 @@ export class AddonModDataEntryPage implements OnDestroy { this.selectedGroup = groupInfo.groups[0].id; } } - - return this.dataOffline.getEntryActions(this.data.id, this.entryId); }); - }).then((actions) => { - this.offlineActions = actions; - this.hasOffline = !!actions.length; - + }).then(() => { return this.dataProvider.getFields(this.data.id).then((fieldsData) => { this.fields = this.utils.arrayToObject(fieldsData, 'id'); + this.fieldsArray = fieldsData; - return this.dataHelper.getEntry(this.data, this.entryId, this.offlineActions); + return this.dataHelper.fetchEntry(this.data, fieldsData, this.entryId); }); }).then((entry) => { + this.entry = entry.entry; this.ratingInfo = entry.ratinginfo; - entry = entry.entry; - - fieldsArray = this.utils.objectToArray(this.fields); - - return this.dataHelper.applyOfflineActions(entry, this.offlineActions, fieldsArray); - }).then((entryData) => { - this.entry = entryData; const actions = this.dataHelper.getActions(this.data, this.access, this.entry); - const templte = this.data.singletemplate || this.dataHelper.getDefaultTemplate('single', fieldsArray); - this.entryHtml = this.dataHelper.displayShowFields(templte, fieldsArray, this.entry, this.offset, 'show', actions); + const templte = this.data.singletemplate || this.dataHelper.getDefaultTemplate('single', this.fieldsArray); + this.entryHtml = this.dataHelper.displayShowFields(templte, this.fieldsArray, this.entry, this.offset, 'show', actions); this.showComments = actions.comments; const entries = {}; diff --git a/src/addon/mod/data/providers/helper.ts b/src/addon/mod/data/providers/helper.ts index 930d63e15..c2428fabb 100644 --- a/src/addon/mod/data/providers/helper.ts +++ b/src/addon/mod/data/providers/helper.ts @@ -19,7 +19,9 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploader'; import { AddonModDataFieldsDelegate } from './fields-delegate'; import { AddonModDataOfflineProvider, AddonModDataOfflineAction } from './offline'; -import { AddonModDataProvider, AddonModDataEntry, AddonModDataEntryFields } from './data'; +import { AddonModDataProvider, AddonModDataEntry, AddonModDataEntryFields, AddonModDataEntries } from './data'; +import { CoreRatingInfo } from '@core/rating/providers/rating'; +import { CoreRatingOfflineProvider } from '@core/rating/providers/offline'; /** * Service that provides helper functions for datas. @@ -30,7 +32,7 @@ export class AddonModDataHelperProvider { constructor(private sitesProvider: CoreSitesProvider, protected dataProvider: AddonModDataProvider, private translate: TranslateService, private fieldsDelegate: AddonModDataFieldsDelegate, private dataOffline: AddonModDataOfflineProvider, private fileUploaderProvider: CoreFileUploaderProvider, - private textUtils: CoreTextUtilsProvider) { } + private textUtils: CoreTextUtilsProvider, private ratingOffline: CoreRatingOfflineProvider) { } /** * Returns the record with the offline actions applied. @@ -156,6 +158,153 @@ export class AddonModDataHelperProvider { return template; } + /** + * Get online and offline entries, or search entries. + * + * @param {any} data Database object. + * @param {any[]} fields The fields that define the contents. + * @param {number} [groupId=0] Group ID. + * @param {string} [search] Search text. It will be used if advSearch is not defined. + * @param {any[]} [advSearch] Advanced search data. + * @param {string} [sort=0] Sort the records by this field id, reserved ids are: + * 0: timeadded + * -1: firstname + * -2: lastname + * -3: approved + * -4: timemodified. + * Empty for using the default database setting. + * @param {string} [order=DESC] The direction of the sorting: 'ASC' or 'DESC'. + * Empty for using the default database setting. + * @param {number} [page=0] Page of records to return. + * @param {number} [perPage=PER_PAGE] Records per page to return. Default on PER_PAGE. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when the database is retrieved. + */ + fetchEntries(data: any, fields: any[], groupId: number = 0, search?: string, advSearch?: any[], sort: string = '0', + order: string = 'DESC', page: number = 0, perPage: number = AddonModDataProvider.PER_PAGE, siteId?: string): + Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + const offlineActions = {}; + const result: AddonModDataEntries = { + entries: [], + totalcount: 0, + offlineEntries: [] + }; + + const offlinePromise = this.dataOffline.getDatabaseEntries(data.id, site.id).then((actions) => { + result.hasOfflineActions = !!actions.length; + + actions.forEach((action) => { + if (typeof offlineActions[action.entryid] == 'undefined') { + offlineActions[action.entryid] = []; + } + offlineActions[action.entryid].push(action); + + // We only display new entries in the first page when not searching. + if (action.action == 'add' && page == 0 && !search && !advSearch && + (!action.groupid || !groupId || action.groupid == groupId)) { + result.offlineEntries.push({ + id: action.entryid, + canmanageentry: true, + approved: !data.approval || data.manageapproved, + dataid: data.id, + groupid: action.groupid, + timecreated: -action.entryid, + timemodified: -action.entryid, + userid: site.getUserId(), + fullname: site.getInfo().fullname, + contents: {} + }); + } + }); + + // Sort offline entries by creation time. + result.offlineEntries.sort((entry1, entry2) => entry2.timecreated - entry1.timecreated); + }); + + const ratingsPromise = this.ratingOffline.hasRatings('mod_data', 'entry', 'module', data.coursemodule) + .then((hasRatings) => { + result.hasOfflineRatings = hasRatings; + }); + + let fetchPromise: Promise; + if (search || advSearch) { + fetchPromise = this.dataProvider.searchEntries(data.id, groupId, search, advSearch, sort, order, page, perPage, + site.id).then((fetchResult) => { + result.entries = fetchResult.entries; + result.totalcount = fetchResult.totalcount; + result.maxcount = fetchResult.maxcount; + }); + } else { + fetchPromise = this.dataProvider.getEntries(data.id, groupId, sort, order, page, perPage, false, false, site.id) + .then((fetchResult) => { + result.entries = fetchResult.entries; + result.totalcount = fetchResult.totalcount; + }); + } + + return Promise.all([offlinePromise, ratingsPromise, fetchPromise]).then(() => { + // Apply offline actions to online and offline entries. + const promises = []; + result.entries.forEach((entry) => { + promises.push(this.applyOfflineActions(entry, offlineActions[entry.id] || [], fields)); + }); + result.offlineEntries.forEach((entry) => { + promises.push(this.applyOfflineActions(entry, offlineActions[entry.id] || [], fields)); + }); + + return Promise.all(promises); + }).then(() => { + return result; + }); + }); + } + + /** + * Fetch an online or offline entry. + * + * @param {any} data Database. + * @param {any[]} fields List of database fields. + * @param {number} entryId Entry ID. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise<{entry: AddonModDataEntry, ratinginfo?: CoreRatingInfo}>} Promise resolved with the entry. + */ + fetchEntry(data: any, fields: any[], entryId: number, siteId?: string): + Promise<{entry: AddonModDataEntry, ratinginfo?: CoreRatingInfo}> { + return this.sitesProvider.getSite(siteId).then((site) => { + return this.dataOffline.getEntryActions(data.id, entryId, site.id).then((offlineActions) => { + let promise: Promise<{entry: AddonModDataEntry, ratinginfo?: CoreRatingInfo}>; + + if (entryId > 0) { + // Online entry. + promise = this.dataProvider.getEntry(data.id, entryId, false, site.id); + } else { + // Offline entry or new entry. + promise = Promise.resolve({ + entry: { + id: entryId, + userid: site.getUserId(), + groupid: 0, + dataid: data.id, + timecreated: -entryId, + timemodified: -entryId, + approved: !data.approval || data.manageapproved, + canmanageentry: true, + fullname: site.getInfo().fullname, + contents: [], + } + }); + } + + return promise.then((response) => { + return this.applyOfflineActions(response.entry, offlineActions, fields).then(() => { + return response; + }); + }); + }); + }); + } + /** * Returns an object with all the actions that the user can do over the record. * @@ -352,45 +501,6 @@ export class AddonModDataHelperProvider { }); } - /** - * Get an online or offline entry. - * - * @param {any} data Database. - * @param {number} entryId Entry ID. - * @param {any} [offlineActions] Offline data with the actions done. Required for offline entries. - * @param {string} [siteId] Site ID. If not defined, current site. - * @return {Promise} Promise resolved with the entry. - */ - getEntry(data: any, entryId: number, offlineActions?: any, siteId?: string): Promise { - if (entryId > 0) { - // It's an online entry, get it from WS. - return this.dataProvider.getEntry(data.id, entryId, false, siteId); - } - - // It's an offline entry, search it in the offline actions. - return this.sitesProvider.getSite(siteId).then((site) => { - const offlineEntry = offlineActions.find((offlineAction) => offlineAction.action == 'add'); - - if (offlineEntry) { - const siteInfo = site.getInfo(); - - return {entry: { - id: offlineEntry.entryid, - canmanageentry: true, - approved: !data.approval || data.manageapproved, - dataid: offlineEntry.dataid, - groupid: offlineEntry.groupid, - timecreated: -offlineEntry.entryid, - timemodified: -offlineEntry.entryid, - userid: siteInfo.userid, - fullname: siteInfo.fullname, - contents: {} - } - }; - } - }); - } - /** * Get a list of stored attachment files for a new entry. See $mmaModDataHelper#storeFiles. * diff --git a/src/addon/mod/data/providers/offline.ts b/src/addon/mod/data/providers/offline.ts index 92e38cb25..2d6d6ca4a 100644 --- a/src/addon/mod/data/providers/offline.ts +++ b/src/addon/mod/data/providers/offline.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider, CoreSiteSchema } from '@providers/sites'; import { CoreTextUtilsProvider } from '@providers/utils/text'; +import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreFileProvider } from '@providers/file'; import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploader'; import { SQLiteDB } from '@classes/sqlitedb'; @@ -101,7 +102,8 @@ export class AddonModDataOfflineProvider { }; constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private textUtils: CoreTextUtilsProvider, - private fileProvider: CoreFileProvider, private fileUploaderProvider: CoreFileUploaderProvider) { + private fileProvider: CoreFileProvider, private fileUploaderProvider: CoreFileUploaderProvider, + private utils: CoreUtilsProvider) { this.logger = logger.getInstance('AddonModDataOfflineProvider'); this.sitesProvider.registerSiteSchema(this.siteSchema); } @@ -201,7 +203,7 @@ export class AddonModDataOfflineProvider { } /** - * Get all the stored entry data from a certain database. + * Get all the stored entry actions from a certain database, sorted by modification time. * * @param {number} dataId Database ID. * @param {string} [siteId] Site ID. If not defined, current site. @@ -209,7 +211,7 @@ export class AddonModDataOfflineProvider { */ getDatabaseEntries(dataId: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { - return site.getDb().getRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId}); + return site.getDb().getRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId}, 'timemodified'); }).then((entries) => { return entries.map(this.parseRecord.bind(this)); }); @@ -257,11 +259,10 @@ export class AddonModDataOfflineProvider { * @return {Promise} Promise resolved with boolean: true if has offline answers, false otherwise. */ hasOfflineData(dataId: number, siteId?: string): Promise { - return this.getDatabaseEntries(dataId, siteId).then((entries) => { - return !!entries.length; - }).catch(() => { - // No offline data found, return false. - return false; + return this.sitesProvider.getSite(siteId).then((site) => { + return this.utils.promiseWorks( + site.getDb().recordExists(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId}) + ); }); } From fccf79bbd26c668dbea1be90a5df4280446a41aa Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 18:06:27 +0200 Subject: [PATCH 082/263] MOBILE-2856 data: Fix syncing entries with multiple actions --- src/addon/mod/data/providers/sync.ts | 161 ++++++++++++++++----------- 1 file changed, 94 insertions(+), 67 deletions(-) diff --git a/src/addon/mod/data/providers/sync.ts b/src/addon/mod/data/providers/sync.ts index 03590485a..0553511c4 100644 --- a/src/addon/mod/data/providers/sync.ts +++ b/src/addon/mod/data/providers/sync.ts @@ -235,26 +235,32 @@ export class AddonModDataSyncProvider extends CoreSyncBaseProvider { protected syncEntry(data: any, entryActions: AddonModDataOfflineAction[], result: any, siteId?: string): Promise { let discardError, timePromise, - entryId = 0, + entryId = entryActions[0].entryid, offlineId, deleted = false; - const promises = []; - - // Sort entries by timemodified. - entryActions = entryActions.sort((a: any, b: any) => a.timemodified - b.timemodified); - - entryId = entryActions[0].entryid; + const editAction = entryActions.find((action) => action.action == 'add' || action.action == 'edit'); + const approveAction = entryActions.find((action) => action.action == 'approve' || action.action == 'disapprove'); + const deleteAction = entryActions.find((action) => action.action == 'delete'); if (entryId > 0) { - timePromise = this.dataProvider.getEntry(data.id, entryId, false, siteId).then((entry) => { + timePromise = this.dataProvider.getEntry(data.id, entryId, true, siteId).then((entry) => { return entry.entry.timemodified; - }).catch(() => { - return -1; + }).catch((error) => { + if (error && this.utils.isWebServiceError(error)) { + // The WebService has thrown an error, this means the entry has been deleted. + return Promise.resolve(-1); + } + + return Promise.reject(error); }); - } else { + } else if (editAction) { + // New entry. offlineId = entryId; timePromise = Promise.resolve(0); + } else { + // New entry but the add action is missing, discard. + timePromise = Promise.resolve(-1); } return timePromise.then((timemodified) => { @@ -266,58 +272,11 @@ export class AddonModDataSyncProvider extends CoreSyncBaseProvider { return this.dataOffline.deleteAllEntryActions(data.id, entryId, siteId); } - entryActions.forEach((action) => { - let actionPromise; - const proms = []; - - entryId = action.entryid > 0 ? action.entryid : entryId; - - if (action.fields) { - action.fields.forEach((field) => { - // Upload Files if asked. - const value = this.textUtils.parseJSON(field.value); - if (value.online || value.offline) { - let files = value.online || []; - const fileProm = value.offline ? this.dataHelper.getStoredFiles(action.dataid, entryId, field.fieldid) : - Promise.resolve([]); - - proms.push(fileProm.then((offlineFiles) => { - files = files.concat(offlineFiles); - - return this.dataHelper.uploadOrStoreFiles(action.dataid, 0, entryId, field.fieldid, files, false, - siteId).then((filesResult) => { - field.value = JSON.stringify(filesResult); - }); - })); - } - }); - } - - actionPromise = Promise.all(proms).then(() => { - // Perform the action. - switch (action.action) { - case 'add': - return this.dataProvider.addEntryOnline(action.dataid, action.fields, data.groupid, siteId) - .then((result) => { - entryId = result.newentryid; - }); - case 'edit': - return this.dataProvider.editEntryOnline(entryId, action.fields, siteId); - case 'approve': - return this.dataProvider.approveEntryOnline(entryId, true, siteId); - case 'disapprove': - return this.dataProvider.approveEntryOnline(entryId, false, siteId); - case 'delete': - return this.dataProvider.deleteEntryOnline(entryId, siteId).then(() => { - deleted = true; - }); - default: - break; - } - }); - - promises.push(actionPromise.catch((error) => { - if (error && error.wserror) { + if (deleteAction) { + return this.dataProvider.deleteEntryOnline(entryId, siteId).then(() => { + deleted = true; + }).catch((error) => { + if (error && this.utils.isWebServiceError(error)) { // The WebService has thrown an error, this means it cannot be performed. Discard. discardError = this.textUtils.getErrorMessageFromError(error); } else { @@ -328,11 +287,79 @@ export class AddonModDataSyncProvider extends CoreSyncBaseProvider { // Delete the offline data. result.updated = true; - return this.dataOffline.deleteEntry(action.dataid, action.entryid, action.action, siteId); - })); - }); + return this.dataOffline.deleteAllEntryActions(deleteAction.dataid, deleteAction.entryid, siteId); + }); + } + + let editPromise; + + if (editAction) { + editPromise = Promise.all(editAction.fields.map((field) => { + // Upload Files if asked. + const value = this.textUtils.parseJSON(field.value); + if (value.online || value.offline) { + let files = value.online || []; + const fileProm = value.offline ? + this.dataHelper.getStoredFiles(editAction.dataid, entryId, field.fieldid) : + Promise.resolve([]); + + return fileProm.then((offlineFiles) => { + files = files.concat(offlineFiles); + + return this.dataHelper.uploadOrStoreFiles(editAction.dataid, 0, entryId, field.fieldid, files, + false, siteId).then((filesResult) => { + field.value = JSON.stringify(filesResult); + }); + }); + } + })).then(() => { + if (editAction.action == 'add') { + return this.dataProvider.addEntryOnline(editAction.dataid, editAction.fields, editAction.groupid, siteId) + .then((result) => { + entryId = result.newentryid; + }); + } else { + return this.dataProvider.editEntryOnline(entryId, editAction.fields, siteId); + } + }).catch((error) => { + if (error && this.utils.isWebServiceError(error)) { + // The WebService has thrown an error, this means it cannot be performed. Discard. + discardError = this.textUtils.getErrorMessageFromError(error); + } else { + // Couldn't connect to server, reject. + return Promise.reject(error); + } + }).then(() => { + // Delete the offline data. + result.updated = true; + + return this.dataOffline.deleteEntry(editAction.dataid, editAction.entryid, editAction.action, siteId); + }); + } else { + editPromise = Promise.resolve(); + } + + if (approveAction) { + editPromise = editPromise.then(() => { + return this.dataProvider.approveEntryOnline(entryId, approveAction.action == 'approve', siteId); + }).catch((error) => { + if (error && this.utils.isWebServiceError(error)) { + // The WebService has thrown an error, this means it cannot be performed. Discard. + discardError = this.textUtils.getErrorMessageFromError(error); + } else { + // Couldn't connect to server, reject. + return Promise.reject(error); + } + }).then(() => { + // Delete the offline data. + result.updated = true; + + return this.dataOffline.deleteEntry(approveAction.dataid, approveAction.entryid, approveAction.action, siteId); + }); + } + + return editPromise; - return Promise.all(promises); }).then(() => { if (discardError) { // Submission was discarded, add a warning. From cd77fb2f4e294e0cf06b5d79bc13fdb00cd814d1 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 18:24:28 +0200 Subject: [PATCH 083/263] MOBILE-2856 data: Fix single entry view for offline entries --- src/addon/mod/data/pages/entry/entry.ts | 95 ++++++++++++++++--------- 1 file changed, 60 insertions(+), 35 deletions(-) diff --git a/src/addon/mod/data/pages/entry/entry.ts b/src/addon/mod/data/pages/entry/entry.ts index 07b3ee48f..cb17d7dfa 100644 --- a/src/addon/mod/data/pages/entry/entry.ts +++ b/src/addon/mod/data/pages/entry/entry.ts @@ -135,8 +135,13 @@ export class AddonModDataEntryPage implements OnDestroy { this.title = data.name || this.title; this.data = data; - return this.setEntryIdFromOffset(data.id, this.offset, this.selectedGroup).then(() => { - return this.dataProvider.getDatabaseAccessInformation(data.id); + return this.dataProvider.getFields(this.data.id).then((fieldsData) => { + this.fields = this.utils.arrayToObject(fieldsData, 'id'); + this.fieldsArray = fieldsData; + }); + }).then(() => { + return this.setEntryFromOffset().then(() => { + return this.dataProvider.getDatabaseAccessInformation(this.data.id); }); }).then((accessData) => { this.access = accessData; @@ -153,20 +158,11 @@ export class AddonModDataEntryPage implements OnDestroy { } }); }).then(() => { - return this.dataProvider.getFields(this.data.id).then((fieldsData) => { - this.fields = this.utils.arrayToObject(fieldsData, 'id'); - this.fieldsArray = fieldsData; - - return this.dataHelper.fetchEntry(this.data, fieldsData, this.entryId); - }); - }).then((entry) => { - this.entry = entry.entry; - this.ratingInfo = entry.ratinginfo; - const actions = this.dataHelper.getActions(this.data, this.access, this.entry); - const templte = this.data.singletemplate || this.dataHelper.getDefaultTemplate('single', this.fieldsArray); - this.entryHtml = this.dataHelper.displayShowFields(templte, this.fieldsArray, this.entry, this.offset, 'show', actions); + const template = this.data.singletemplate || this.dataHelper.getDefaultTemplate('single', this.fieldsArray); + this.entryHtml = this.dataHelper.displayShowFields(template, this.fieldsArray, this.entry, this.offset, 'show', + actions); this.showComments = actions.comments; const entries = {}; @@ -176,7 +172,9 @@ export class AddonModDataEntryPage implements OnDestroy { this.jsData = { fields: this.fields, entries: entries, - data: this.data + data: this.data, + module: this.module, + group: this.selectedGroup }; }).catch((message) => { if (!refresh) { @@ -249,7 +247,7 @@ export class AddonModDataEntryPage implements OnDestroy { */ setGroup(groupId: number): Promise { this.selectedGroup = groupId; - this.offset = 0; + this.offset = null; this.entry = null; this.entryId = null; this.entryLoaded = false; @@ -258,46 +256,73 @@ export class AddonModDataEntryPage implements OnDestroy { } /** - * Convenience function to translate offset to entry identifier and set next/previous entries. + * Convenience function to fetch the entry and set next/previous entries. * - * @param {number} dataId Data Id. - * @param {number} [offset] Offset of the entry. - * @param {number} [groupId] Group Id to get the entry. * @return {Promise} Resolved when done. */ - protected setEntryIdFromOffset(dataId: number, offset?: number, groupId?: number): Promise { - if (typeof offset != 'number') { + protected setEntryFromOffset(): Promise { + const emptyOffset = typeof this.offset != 'number'; + + if (emptyOffset && typeof this.entryId == 'number') { // Entry id passed as navigation parameter instead of the offset. // We don't display next/previous buttons in this case. this.nextOffset = null; this.previousOffset = null; - return Promise.resolve(); + return this.dataHelper.fetchEntry(this.data, this.fieldsArray, this.entryId).then((entry) => { + this.entry = entry.entry; + this.ratingInfo = entry.ratinginfo; + }); } const perPage = AddonModDataProvider.PER_PAGE; - const page = Math.floor(offset / perPage); - const pageOffset = offset % perPage; + const page = !emptyOffset && this.offset >= 0 ? Math.floor(this.offset / perPage) : 0; - return this.dataProvider.getEntries(dataId, groupId, undefined, undefined, page, perPage).then((entries) => { - if (!entries || !entries.entries || !entries.entries.length || pageOffset >= entries.entries.length) { - return Promise.reject(null); + return this.dataHelper.fetchEntries(this.data, this.fieldsArray, this.selectedGroup, undefined, undefined, '0', 'DESC', + page, perPage).then((entries) => { + + const pageEntries = entries.offlineEntries.concat(entries.entries); + let pageIndex; // Index of the entry when concatenating offline and online page entries. + if (emptyOffset) { + // No offset passed, display the first entry. + pageIndex = 0; + } else if (this.offset > 0) { + // Online entry. + pageIndex = this.offset % perPage + entries.offlineEntries.length; + } else { + // Offline entry. + pageIndex = this.offset + entries.offlineEntries.length; } - this.entryId = entries.entries[pageOffset].id; - this.previousOffset = offset > 0 ? offset - 1 : null; - if (pageOffset + 1 < entries.entries.length) { + this.entry = pageEntries[pageIndex]; + this.entryId = this.entry.id; + + this.previousOffset = page > 0 || pageIndex > 0 ? this.offset - 1 : null; + + let promise; + + if (pageIndex + 1 < pageEntries.length) { // Not the last entry on the page; - this.nextOffset = offset + 1; - } else if (entries.entries.length < perPage) { + this.nextOffset = this.offset + 1; + } else if (pageEntries.length < perPage) { // Last entry of the last page. this.nextOffset = null; } else { // Last entry of the page, check if there are more pages. - return this.dataProvider.getEntries(dataId, groupId, undefined, undefined, page + 1, perPage).then((entries) => { - this.nextOffset = entries && entries.entries && entries.entries.length > 0 ? offset + 1 : null; + promise = this.dataProvider.getEntries(this.data.id, this.selectedGroup, '0', 'DESC', page + 1, perPage) + .then((entries) => { + this.nextOffset = entries && entries.entries && entries.entries.length > 0 ? this.offset + 1 : null; }); } + + return Promise.resolve(promise).then(() => { + if (this.entryId > 0) { + // Online entry, we need to fetch the the rating info. + return this.dataProvider.getEntry(this.data.id, this.entryId).then((entry) => { + this.ratingInfo = entry.ratinginfo; + }); + } + }); }); } From b810862fcaa5fb35fff72c3100988fd3c1761d90 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 18:27:01 +0200 Subject: [PATCH 084/263] MOBILE-2856 data: Go to first page when changing group --- src/addon/mod/data/components/index/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/addon/mod/data/components/index/index.ts b/src/addon/mod/data/components/index/index.ts index 3236fbd37..dcae5876c 100644 --- a/src/addon/mod/data/components/index/index.ts +++ b/src/addon/mod/data/components/index/index.ts @@ -395,6 +395,7 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp */ setGroup(groupId: number): Promise { this.selectedGroup = groupId; + this.search.page = 0; return this.fetchEntriesData().catch((message) => { this.domUtils.showErrorModalDefault(message, 'core.course.errorgetmodule', true); From e6f9ecebcca5886486d26963b5103f5c773e5449 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 10 Apr 2019 18:19:52 +0200 Subject: [PATCH 085/263] MOBILE-2856 data: Fix actions for offline entries --- .../mod/data/components/action/action.ts | 101 ++++++++++------ .../action/addon-mod-data-action.html | 10 +- .../data/providers/approve-link-handler.ts | 52 +-------- .../mod/data/providers/delete-link-handler.ts | 61 +--------- src/addon/mod/data/providers/helper.ts | 109 +++++++++++++++++- 5 files changed, 187 insertions(+), 146 deletions(-) diff --git a/src/addon/mod/data/components/action/action.ts b/src/addon/mod/data/components/action/action.ts index 32be60ec3..9e96c3d1a 100644 --- a/src/addon/mod/data/components/action/action.ts +++ b/src/addon/mod/data/components/action/action.ts @@ -12,10 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. import { Component, Input, OnInit, Injector } from '@angular/core'; +import { NavController } from 'ionic-angular'; import { CoreEventsProvider } from '@providers/events'; import { AddonModDataProvider } from '../../providers/data'; +import { AddonModDataHelperProvider } from '../../providers/helper'; import { AddonModDataOfflineProvider } from '../../providers/offline'; import { CoreSitesProvider } from '@providers/sites'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { CoreUserProvider } from '@core/user/providers/user'; /** @@ -30,6 +33,8 @@ export class AddonModDataActionComponent implements OnInit { @Input() action: string; // The field to render. @Input() entry?: any; // The value of the field. @Input() database: any; // Database object. + @Input() module: any; // Module object. + @Input() group: number; // Module object. @Input() offset?: number; // Offset of the entry. siteId: string; @@ -39,11 +44,72 @@ export class AddonModDataActionComponent implements OnInit { constructor(protected injector: Injector, protected dataProvider: AddonModDataProvider, protected dataOffline: AddonModDataOfflineProvider, protected eventsProvider: CoreEventsProvider, - sitesProvider: CoreSitesProvider, protected userProvider: CoreUserProvider) { + sitesProvider: CoreSitesProvider, protected userProvider: CoreUserProvider, private navCtrl: NavController, + protected linkHelper: CoreContentLinksHelperProvider, private dataHelper: AddonModDataHelperProvider) { this.rootUrl = sitesProvider.getCurrentSite().getURL(); this.siteId = sitesProvider.getCurrentSiteId(); } + /** + * Component being initialized. + */ + ngOnInit(): void { + if (this.action == 'userpicture') { + this.userProvider.getProfile(this.entry.userid, this.database.courseid).then((profile) => { + this.userPicture = profile.profileimageurl; + }); + } + } + + /** + * Approve the entry. + */ + approveEntry(): void { + this.dataHelper.approveOrDisapproveEntry(this.database.id, this.entry.id, true, this.database.courseid); + } + + /** + * Show confirmation modal for deleting the entry. + */ + deleteEntry(): void { + this.dataHelper.showDeleteEntryModal(this.database.id, this.entry.id, this.database.courseid); + } + + /** + * Disapprove the entry. + */ + disapproveEntry(): void { + this.dataHelper.approveOrDisapproveEntry(this.database.id, this.entry.id, false, this.database.courseid); + } + + /** + * Go to the edit page of the entry. + */ + editEntry(): void { + const pageParams = { + courseId: this.database.course, + module: this.module, + entryId: this.entry.id + }; + + this.linkHelper.goInSite(this.navCtrl, 'AddonModDataEditPage', pageParams); + } + + /** + * Go to the view page of the entry. + */ + viewEntry(): void { + const pageParams: any = { + courseId: this.database.course, + module: this.module, + entryId: this.entry.id, + group: this.group, + offset: this.offset + }; + + this.linkHelper.goInSite(this.navCtrl, 'AddonModDataEntryPage', pageParams); + } + /** * Undo delete action. * @@ -60,37 +126,4 @@ export class AddonModDataActionComponent implements OnInit { this.eventsProvider.trigger(AddonModDataProvider.ENTRY_CHANGED, {dataId: dataId, entryId: entryId}, this.siteId); }); } - - /** - * Component being initialized. - */ - ngOnInit(): void { - switch (this.action) { - case 'more': - this.url = this.rootUrl + '/mod/data/view.php?d= ' + this.entry.dataid + '&rid=' + this.entry.id; - if (typeof this.offset == 'number') { - this.url += '&mode=single&page=' + this.offset; - } - break; - case 'edit': - this.url = this.rootUrl + '/mod/data/edit.php?d= ' + this.entry.dataid + '&rid=' + this.entry.id; - break; - case 'delete': - this.url = this.rootUrl + '/mod/data/view.php?d= ' + this.entry.dataid + '&delete=' + this.entry.id; - break; - case 'approve': - this.url = this.rootUrl + '/mod/data/view.php?d= ' + this.entry.dataid + '&approve=' + this.entry.id; - break; - case 'disapprove': - this.url = this.rootUrl + '/mod/data/view.php?d= ' + this.entry.dataid + '&disapprove=' + this.entry.id; - break; - case 'userpicture': - this.userProvider.getProfile(this.entry.userid, this.database.courseid).then((profile) => { - this.userPicture = profile.profileimageurl; - }); - break; - default: - break; - } - } } diff --git a/src/addon/mod/data/components/action/addon-mod-data-action.html b/src/addon/mod/data/components/action/addon-mod-data-action.html index 2faa09162..41a44e5fa 100644 --- a/src/addon/mod/data/components/action/addon-mod-data-action.html +++ b/src/addon/mod/data/components/action/addon-mod-data-action.html @@ -1,12 +1,12 @@ - + - + - + @@ -14,11 +14,11 @@ - + - + diff --git a/src/addon/mod/data/providers/approve-link-handler.ts b/src/addon/mod/data/providers/approve-link-handler.ts index 5e7a88a7d..5084b8fb3 100644 --- a/src/addon/mod/data/providers/approve-link-handler.ts +++ b/src/addon/mod/data/providers/approve-link-handler.ts @@ -16,9 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; import { AddonModDataProvider } from './data'; -import { CoreCourseProvider } from '@core/course/providers/course'; -import { CoreDomUtilsProvider } from '@providers/utils/dom'; -import { CoreEventsProvider } from '@providers/events'; +import { AddonModDataHelperProvider } from './helper'; /** * Content links handler for database approve/disapprove entry. @@ -30,29 +28,10 @@ export class AddonModDataApproveLinkHandler extends CoreContentLinksHandlerBase featureName = 'CoreCourseModuleDelegate_AddonModData'; pattern = /\/mod\/data\/view\.php.*([\?\&](d|approve|disapprove)=\d+)/; - constructor(private dataProvider: AddonModDataProvider, private courseProvider: CoreCourseProvider, - private domUtils: CoreDomUtilsProvider, private eventsProvider: CoreEventsProvider) { + constructor(private dataProvider: AddonModDataProvider, private dataHelper: AddonModDataHelperProvider) { super(); } - /** - * Convenience function to help get courseId. - * - * @param {number} dataId Database Id. - * @param {string} siteId Site Id, if not set, current site will be used. - * @param {number} courseId Course Id if already set. - * @return {Promise} Resolved with course Id when done. - */ - protected getActivityCourseIdIfNotSet(dataId: number, siteId: string, courseId: number): Promise { - if (courseId) { - return Promise.resolve(courseId); - } - - return this.courseProvider.getModuleBasicInfoByInstance(dataId, 'data', siteId).then((module) => { - return module.course; - }); - } - /** * Get the list of actions for a link (url). * @@ -66,34 +45,11 @@ export class AddonModDataApproveLinkHandler extends CoreContentLinksHandlerBase CoreContentLinksAction[] | Promise { return [{ action: (siteId, navCtrl?): void => { - const modal = this.domUtils.showModalLoading(), - dataId = parseInt(params.d, 10), + const dataId = parseInt(params.d, 10), entryId = parseInt(params.approve, 10) || parseInt(params.disapprove, 10), approve = parseInt(params.approve, 10) ? true : false; - this.getActivityCourseIdIfNotSet(dataId, siteId, courseId).then((cId) => { - courseId = cId; - - // Approve/disapprove entry. - return this.dataProvider.approveEntry(dataId, entryId, approve, courseId, siteId).catch((message) => { - this.domUtils.showErrorModalDefault(message, 'addon.mod_data.errorapproving', true); - - return Promise.reject(null); - }); - }).then(() => { - const promises = []; - promises.push(this.dataProvider.invalidateEntryData(dataId, entryId, siteId)); - promises.push(this.dataProvider.invalidateEntriesData(dataId, siteId)); - - return Promise.all(promises); - }).then(() => { - this.eventsProvider.trigger(AddonModDataProvider.ENTRY_CHANGED, {dataId: dataId, entryId: entryId}, siteId); - - this.domUtils.showToast(approve ? 'addon.mod_data.recordapproved' : 'addon.mod_data.recorddisapproved', true, - 3000); - }).finally(() => { - modal.dismiss(); - }); + this.dataHelper.approveOrDisapproveEntry(dataId, entryId, approve, courseId, siteId); } }]; } diff --git a/src/addon/mod/data/providers/delete-link-handler.ts b/src/addon/mod/data/providers/delete-link-handler.ts index 5ba8f1b31..8da37ba6b 100644 --- a/src/addon/mod/data/providers/delete-link-handler.ts +++ b/src/addon/mod/data/providers/delete-link-handler.ts @@ -13,13 +13,10 @@ // limitations under the License. import { Injectable } from '@angular/core'; -import { TranslateService } from '@ngx-translate/core'; import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; import { AddonModDataProvider } from './data'; -import { CoreCourseProvider } from '@core/course/providers/course'; -import { CoreDomUtilsProvider } from '@providers/utils/dom'; -import { CoreEventsProvider } from '@providers/events'; +import { AddonModDataHelperProvider } from './helper'; /** * Content links handler for database delete entry. @@ -31,30 +28,10 @@ export class AddonModDataDeleteLinkHandler extends CoreContentLinksHandlerBase { featureName = 'CoreCourseModuleDelegate_AddonModData'; pattern = /\/mod\/data\/view\.php.*([\?\&](d|delete)=\d+)/; - constructor(private dataProvider: AddonModDataProvider, private courseProvider: CoreCourseProvider, - private domUtils: CoreDomUtilsProvider, private eventsProvider: CoreEventsProvider, - private translate: TranslateService) { + constructor(private dataProvider: AddonModDataProvider, private dataHelper: AddonModDataHelperProvider) { super(); } - /** - * Convenience function to help get courseId. - * - * @param {number} dataId Database Id. - * @param {string} siteId Site Id, if not set, current site will be used. - * @param {number} courseId Course Id if already set. - * @return {Promise} Resolved with course Id when done. - */ - protected getActivityCourseIdIfNotSet(dataId: number, siteId: string, courseId: number): Promise { - if (courseId) { - return Promise.resolve(courseId); - } - - return this.courseProvider.getModuleBasicInfoByInstance(dataId, 'data', siteId).then((module) => { - return module.course; - }); - } - /** * Get the list of actions for a link (url). * @@ -68,38 +45,10 @@ export class AddonModDataDeleteLinkHandler extends CoreContentLinksHandlerBase { CoreContentLinksAction[] | Promise { return [{ action: (siteId, navCtrl?): void => { + const dataId = parseInt(params.d, 10); + const entryId = parseInt(params.delete, 10); - this.domUtils.showConfirm(this.translate.instant('addon.mod_data.confirmdeleterecord')).then(() => { - const modal = this.domUtils.showModalLoading(), - dataId = parseInt(params.d, 10), - entryId = parseInt(params.delete, 10); - - return this.getActivityCourseIdIfNotSet(dataId, siteId, courseId).then((cId) => { - courseId = cId; - - // Delete entry. - return this.dataProvider.deleteEntry(dataId, entryId, courseId, siteId).catch((message) => { - this.domUtils.showErrorModalDefault(message, 'addon.mod_data.errordeleting', true); - - return Promise.reject(null); - }); - }).then(() => { - const promises = []; - promises.push(this.dataProvider.invalidateEntryData(dataId, entryId, siteId)); - promises.push(this.dataProvider.invalidateEntriesData(dataId, siteId)); - - return Promise.all(promises); - }).then(() => { - this.eventsProvider.trigger(AddonModDataProvider.ENTRY_CHANGED, {dataId: dataId, entryId: entryId, - deleted: true}, siteId); - - this.domUtils.showToast('addon.mod_data.recorddeleted', true, 3000); - }).finally(() => { - modal.dismiss(); - }); - }).catch(() => { - // Nothing to do. - }); + this.dataHelper.showDeleteEntryModal(dataId, entryId, courseId); } }]; } diff --git a/src/addon/mod/data/providers/helper.ts b/src/addon/mod/data/providers/helper.ts index c2428fabb..b5aaadcec 100644 --- a/src/addon/mod/data/providers/helper.ts +++ b/src/addon/mod/data/providers/helper.ts @@ -14,8 +14,12 @@ import { Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; +import { CoreEventsProvider } from '@providers/events'; import { CoreSitesProvider } from '@providers/sites'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploader'; import { AddonModDataFieldsDelegate } from './fields-delegate'; import { AddonModDataOfflineProvider, AddonModDataOfflineAction } from './offline'; @@ -32,7 +36,9 @@ export class AddonModDataHelperProvider { constructor(private sitesProvider: CoreSitesProvider, protected dataProvider: AddonModDataProvider, private translate: TranslateService, private fieldsDelegate: AddonModDataFieldsDelegate, private dataOffline: AddonModDataOfflineProvider, private fileUploaderProvider: CoreFileUploaderProvider, - private textUtils: CoreTextUtilsProvider, private ratingOffline: CoreRatingOfflineProvider) { } + private textUtils: CoreTextUtilsProvider, private eventsProvider: CoreEventsProvider, private utils: CoreUtilsProvider, + private domUtils: CoreDomUtilsProvider, private courseProvider: CoreCourseProvider, + private ratingOffline: CoreRatingOfflineProvider) {} /** * Returns the record with the offline actions applied. @@ -104,6 +110,46 @@ export class AddonModDataHelperProvider { }); } + /** + * Approve or disapprove a database entry. + * + * @param {number} dataId Database ID. + * @param {number} entryId Entry ID. + * @param {boolaen} approve True to approve, false to disapprove. + * @param {number} [courseId] Course ID. It not defined, it will be fetched. + * @param {string} [siteId] Site ID. If not defined, current site. + */ + approveOrDisapproveEntry(dataId: number, entryId: number, approve: boolean, courseId?: number, siteId?: string): void { + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + + const modal = this.domUtils.showModalLoading('core.sending', true); + + this.getActivityCourseIdIfNotSet(dataId, courseId, siteId).then((courseId) => { + // Approve/disapprove entry. + return this.dataProvider.approveEntry(dataId, entryId, approve, courseId, siteId).catch((message) => { + this.domUtils.showErrorModalDefault(message, 'addon.mod_data.errorapproving', true); + + return Promise.reject(null); + }); + }).then(() => { + const promises = []; + promises.push(this.dataProvider.invalidateEntryData(dataId, entryId, siteId)); + promises.push(this.dataProvider.invalidateEntriesData(dataId, siteId)); + + return Promise.all(promises).catch(() => { + // Ignore errors. + }); + }).then(() => { + this.eventsProvider.trigger(AddonModDataProvider.ENTRY_CHANGED, {dataId: dataId, entryId: entryId}, siteId); + + this.domUtils.showToast(approve ? 'addon.mod_data.recordapproved' : 'addon.mod_data.recorddisapproved', true, 3000); + }).catch(() => { + // Ignore error, it was already displayed. + }).finally(() => { + modal.dismiss(); + }); + } + /** * Displays fields for being shown. * @@ -146,8 +192,8 @@ export class AddonModDataHelperProvider { } else if (action == 'approvalstatus') { render = this.translate.instant('addon.mod_data.' + (entry.approved ? 'approved' : 'notapproved')); } else { - render = ''; + render = ''; } template = template.replace(replace, render); } else { @@ -337,6 +383,24 @@ export class AddonModDataHelperProvider { }; } + /** + * Convenience function to get the course id of the database. + * + * @param {number} dataId Database id. + * @param {number} [courseId] Course id, if known. + * @param {string} [siteId] Site id, if not set, current site will be used. + * @return {Promise} Resolved with course Id when done. + */ + protected getActivityCourseIdIfNotSet(dataId: number, courseId?: number, siteId?: string): Promise { + if (courseId) { + return Promise.resolve(courseId); + } + + return this.courseProvider.getModuleBasicInfoByInstance(dataId, 'data', siteId).then((module) => { + return module.course; + }); + } + /** * Returns the default template of a certain type. * @@ -543,6 +607,45 @@ export class AddonModDataHelperProvider { }); } + /** + * Displays a confirmation modal for deleting an entry. + * + * @param {number} dataId Database ID. + * @param {number} entryId Entry ID. + * @param {number} [courseId] Course ID. It not defined, it will be fetched. + * @param {string} [siteId] Site ID. If not defined, current site. + */ + showDeleteEntryModal(dataId: number, entryId: number, courseId?: number, siteId?: string): void { + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + + this.domUtils.showConfirm(this.translate.instant('addon.mod_data.confirmdeleterecord')).then(() => { + const modal = this.domUtils.showModalLoading(); + + return this.getActivityCourseIdIfNotSet(dataId, courseId, siteId).then((courseId) => { + return this.dataProvider.deleteEntry(dataId, entryId, courseId, siteId); + }).catch((message) => { + this.domUtils.showErrorModalDefault(message, 'addon.mod_data.errordeleting', true); + + return Promise.reject(null); + }).then(() => { + return this.utils.allPromises([ + this.dataProvider.invalidateEntryData(dataId, entryId, siteId), + this.dataProvider.invalidateEntriesData(dataId, siteId) + ]).catch(() => { + // Ignore errors. + }); + }).then(() => { + this.eventsProvider.trigger(AddonModDataProvider.ENTRY_CHANGED, {dataId, entryId, deleted: true}, siteId); + + this.domUtils.showToast('addon.mod_data.recorddeleted', true, 3000); + }).finally(() => { + modal.dismiss(); + }); + }).catch(() => { + // Ignore error, it was already displayed. + }); + } + /** * Given a list of files (either online files or local files), store the local files in a local folder * to be submitted later. From 791d9b4afadd6bcaa03c3325e6064d3f2a56a689 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 4 Apr 2019 16:02:40 +0200 Subject: [PATCH 086/263] MOBILE-2860 message: Allow conversations to be muted --- scripts/langindex.json | 2 + src/addon/messages/lang/en.json | 2 + .../messages/pages/discussion/discussion.html | 2 + .../messages/pages/discussion/discussion.ts | 31 ++++++++ .../group-conversations.html | 1 + .../group-conversations.ts | 17 ++++- src/addon/messages/providers/messages.ts | 75 +++++++++++++++++++ src/assets/lang/en.json | 2 + 8 files changed, 131 insertions(+), 1 deletion(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index 7d6305fb2..bd5af73bb 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -197,6 +197,7 @@ "addon.messages.messagenotsent": "local_moodlemobileapp", "addon.messages.messagepreferences": "message", "addon.messages.messages": "message", + "addon.messages.muteconversation": "message", "addon.messages.newmessage": "message", "addon.messages.newmessages": "local_moodlemobileapp", "addon.messages.nocontactrequests": "message", @@ -230,6 +231,7 @@ "addon.messages.unabletomessage": "message", "addon.messages.unblockuser": "message", "addon.messages.unblockuserconfirm": "message", + "addon.messages.unmuteconversation": "message", "addon.messages.useentertosend": "message", "addon.messages.useentertosenddescdesktop": "local_moodlemobileapp", "addon.messages.useentertosenddescmac": "local_moodlemobileapp", diff --git a/src/addon/messages/lang/en.json b/src/addon/messages/lang/en.json index b5aa51b7e..f428c85c7 100644 --- a/src/addon/messages/lang/en.json +++ b/src/addon/messages/lang/en.json @@ -36,6 +36,7 @@ "messagenotsent": "The message was not sent. Please try again later.", "messagepreferences": "Message preferences", "messages": "Messages", + "muteconversation": "Mute", "newmessage": "New message", "newmessages": "New messages", "nocontactrequests": "No contact requests", @@ -69,6 +70,7 @@ "unabletomessage": "You are unable to message this user", "unblockuser": "Unblock user", "unblockuserconfirm": "Are you sure you want to unblock {{$a}}?", + "unmuteconversation": "Unmute", "useentertosend": "Use enter to send", "useentertosenddescdesktop": "If disabled, you can use Ctrl+Enter to send the message.", "useentertosenddescmac": "If disabled, you can use Cmd+Enter to send the message.", diff --git a/src/addon/messages/pages/discussion/discussion.html b/src/addon/messages/pages/discussion/discussion.html index f93a8b6af..fb5602317 100644 --- a/src/addon/messages/pages/discussion/discussion.html +++ b/src/addon/messages/pages/discussion/discussion.html @@ -5,6 +5,7 @@ + @@ -15,6 +16,7 @@ + diff --git a/src/addon/messages/pages/discussion/discussion.ts b/src/addon/messages/pages/discussion/discussion.ts index fb0f2299a..dae1a0f12 100644 --- a/src/addon/messages/pages/discussion/discussion.ts +++ b/src/addon/messages/pages/discussion/discussion.ts @@ -88,6 +88,8 @@ export class AddonMessagesDiscussionPage implements OnDestroy { requestContactSent = false; requestContactReceived = false; isSelf = false; + muteEnabled = false; + muteIcon = 'volume-off'; constructor(private eventsProvider: CoreEventsProvider, sitesProvider: CoreSitesProvider, navParams: NavParams, private userProvider: CoreUserProvider, private navCtrl: NavController, private messagesSync: AddonMessagesSyncProvider, @@ -99,6 +101,7 @@ export class AddonMessagesDiscussionPage implements OnDestroy { this.siteId = sitesProvider.getCurrentSiteId(); this.currentUserId = sitesProvider.getCurrentSiteUserId(); this.groupMessagingEnabled = this.messagesProvider.isGroupMessagingEnabled(); + this.muteEnabled = this.messagesProvider.isMuteConversationEnabled(); this.logger = logger.getInstance('AddonMessagesDiscussionPage'); @@ -443,6 +446,7 @@ export class AddonMessagesDiscussionPage implements OnDestroy { this.conversationImage = conversation.imageurl; this.isGroup = conversation.type == AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP; this.favouriteIcon = conversation.isfavourite ? 'fa-star-o' : 'fa-star'; + this.muteIcon = conversation.ismuted ? 'volume-up' : 'volume-off'; if (!this.isGroup) { this.userId = conversation.userid; } @@ -1107,6 +1111,33 @@ export class AddonMessagesDiscussionPage implements OnDestroy { }); } + /** + * Change the mute state of the current conversation. + * + * @param {Function} [done] Function to call when done. + */ + changeMute(done?: () => void): void { + this.muteIcon = 'spinner'; + + this.messagesProvider.muteConversation(this.conversation.id, !this.conversation.ismuted).then(() => { + this.conversation.ismuted = !this.conversation.ismuted; + + // Get the conversation data so it's cached. Don't block the user for this. + this.messagesProvider.getConversation(this.conversation.id, undefined, true); + + this.eventsProvider.trigger(AddonMessagesProvider.UPDATE_CONVERSATION_LIST_EVENT, { + conversationId: this.conversation.id, + action: 'mute', + value: this.conversation.ismuted + }, this.siteId); + }).catch((error) => { + this.domUtils.showErrorModalDefault(error, 'Error changing muted state.'); + }).finally(() => { + this.muteIcon = this.conversation.ismuted ? 'volume-up' : 'volume-off'; + done && done(); + }); + } + /** * Calculate whether there are pending contact requests. */ diff --git a/src/addon/messages/pages/group-conversations/group-conversations.html b/src/addon/messages/pages/group-conversations/group-conversations.html index bcb05e861..ec74e6a41 100644 --- a/src/addon/messages/pages/group-conversations/group-conversations.html +++ b/src/addon/messages/pages/group-conversations/group-conversations.html @@ -101,6 +101,7 @@

+

{{ conversation.unreadcount }} diff --git a/src/addon/messages/pages/group-conversations/group-conversations.ts b/src/addon/messages/pages/group-conversations/group-conversations.ts index a97006ea1..94af243d1 100644 --- a/src/addon/messages/pages/group-conversations/group-conversations.ts +++ b/src/addon/messages/pages/group-conversations/group-conversations.ts @@ -166,8 +166,23 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { }); // Update conversations if we receive an event to do so. - this.updateConversationListObserver = eventsProvider.on(AddonMessagesProvider.UPDATE_CONVERSATION_LIST_EVENT, () => { + this.updateConversationListObserver = eventsProvider.on(AddonMessagesProvider.UPDATE_CONVERSATION_LIST_EVENT, (data) => { + if (data && data.action == 'mute') { + // If the conversation is displayed, change its muted value. + const expandedOption = this.getExpandedOption(); + + if (expandedOption && expandedOption.conversations) { + const conversation = this.findConversation(data.conversationId, undefined, expandedOption); + if (conversation) { + conversation.ismuted = data.value; + } + } + + return; + } + this.refreshData(); + }, this.siteId); // If a message push notification is received, refresh the view. diff --git a/src/addon/messages/providers/messages.ts b/src/addon/messages/providers/messages.ts index 47c238b8e..b651a09a2 100644 --- a/src/addon/messages/providers/messages.ts +++ b/src/addon/messages/providers/messages.ts @@ -1938,6 +1938,34 @@ export class AddonMessagesProvider { }); } + /** + * Returns whether or not a site supports muting or unmuting a conversation. + * + * @param {CoreSite} [site] The site to check, undefined for current site. + * @return {boolean} If related WS is available on current site. + * @since 3.7 + */ + isMuteConversationEnabled(site?: CoreSite): boolean { + site = site || this.sitesProvider.getCurrentSite(); + + return site.wsAvailable('core_message_mute_conversations'); + } + + /** + * Returns whether or not a site supports muting or unmuting a conversation. + * + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved with boolean: whether related WS is available on a certain site. + * @since 3.7 + */ + isMuteConversationEnabledInSite(siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return this.isMuteConversationEnabled(site); + }).catch(() => { + return false; + }); + } + /** * Returns whether or not the plugin is enabled in a certain site. * @@ -2043,6 +2071,53 @@ export class AddonMessagesProvider { return this.sitesProvider.getCurrentSite().write('core_message_mark_all_messages_as_read', params, preSets); } + /** + * Mute or unmute a conversation. + * + * @param {number} conversationId Conversation ID. + * @param {boolean} set Whether to mute or unmute. + * @param {string} [siteId] Site ID. If not defined, use current site. + * @param {number} [userId] User ID. If not defined, current user in the site. + * @return {Promise} Resolved when done. + */ + muteConversation(conversationId: number, set: boolean, siteId?: string, userId?: number): Promise { + return this.muteConversations([conversationId], set, siteId, userId); + } + + /** + * Mute or unmute some conversations. + * + * @param {number[]} conversations Conversation IDs. + * @param {boolean} set Whether to mute or unmute. + * @param {string} [siteId] Site ID. If not defined, use current site. + * @param {number} [userId] User ID. If not defined, current user in the site. + * @return {Promise} Resolved when done. + */ + muteConversations(conversations: number[], set: boolean, siteId?: string, userId?: number): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + userId = userId || site.getUserId(); + + const params = { + userid: userId, + conversationids: conversations + }, + wsName = set ? 'core_message_mute_conversations' : 'core_message_unmute_conversations'; + + return site.write(wsName, params).then(() => { + // Invalidate the conversations data. + const promises = []; + + conversations.forEach((conversationId) => { + promises.push(this.invalidateConversation(conversationId, site.getId(), userId)); + }); + + return Promise.all(promises).catch(() => { + // Ignore errors. + }); + }); + }); + } + /** * Refresh the number of contact requests sent to the current user. * diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 9142565fb..55d53bf21 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -197,6 +197,7 @@ "addon.messages.messagenotsent": "The message was not sent. Please try again later.", "addon.messages.messagepreferences": "Message preferences", "addon.messages.messages": "Messages", + "addon.messages.muteconversation": "Mute", "addon.messages.newmessage": "New message", "addon.messages.newmessages": "New messages", "addon.messages.nocontactrequests": "No contact requests", @@ -230,6 +231,7 @@ "addon.messages.unabletomessage": "You are unable to message this user", "addon.messages.unblockuser": "Unblock user", "addon.messages.unblockuserconfirm": "Are you sure you want to unblock {{$a}}?", + "addon.messages.unmuteconversation": "Unmute", "addon.messages.useentertosend": "Use enter to send", "addon.messages.useentertosenddescdesktop": "If disabled, you can use Ctrl+Enter to send the message.", "addon.messages.useentertosenddescmac": "If disabled, you can use Cmd+Enter to send the message.", From 258a646f200a9300249939e9ee36ffc798d1c09b Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 12 Apr 2019 14:24:26 +0200 Subject: [PATCH 087/263] MOBILE-2961 push: Use push channel in some local notifications --- src/core/pushnotifications/providers/pushnotifications.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts index 108f43601..f155eb8be 100644 --- a/src/core/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -321,7 +321,8 @@ export class CorePushNotificationsProvider { id: 1, data: data, title: '', - text: '' + text: '', + channel: 'PushPluginChannel' }, promises = []; From b0c33b1526b91bce03251ff7c12b25387cbd3482 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 16 Apr 2019 17:10:58 +0200 Subject: [PATCH 088/263] MOBILE-2961 push: Use notification icon in foreground --- src/core/pushnotifications/providers/pushnotifications.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/core/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts index f155eb8be..28bbc77f8 100644 --- a/src/core/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -339,6 +339,13 @@ export class CorePushNotificationsProvider { localNotif.text = notification.message; })); + if (this.utils.isTrueOrOne(data.extrafeatures)) { + // Extra features enabled. + localNotif.icon = notification.image; + // This feature isn't supported by the official plugin, we use a fork. + ( localNotif).iconType = data['image-type']; + } + Promise.all(promises).then(() => { this.localNotificationsProvider.schedule(localNotif, CorePushNotificationsProvider.COMPONENT, data.site); }); From 7723648638581992d42d97378868c5da5d19f88e Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 17 Apr 2019 13:17:24 +0200 Subject: [PATCH 089/263] MOBILE-2961 push: Group push notifications in foreground --- .../providers/pushnotifications.ts | 31 +++++++++++++------ src/providers/local-notifications.ts | 13 ++++++-- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/core/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts index 28bbc77f8..de508f430 100644 --- a/src/core/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -318,13 +318,14 @@ export class CorePushNotificationsProvider { // If the app is in foreground when the notification is received, it's not shown. Let's show it ourselves. if (this.localNotificationsProvider.isAvailable()) { const localNotif: ILocalNotification = { - id: 1, + id: data.notId || 1, data: data, title: '', text: '', channel: 'PushPluginChannel' }, - promises = []; + promises = [], + extraFeatures = this.utils.isTrueOrOne(data.extrafeatures); // Apply formatText to title and message. promises.push(this.textUtils.formatText(notification.title, true, true).then((formattedTitle) => { @@ -333,21 +334,33 @@ export class CorePushNotificationsProvider { localNotif.title = notification.title; })); - promises.push(this.textUtils.formatText(notification.message, true, true).then((formattedMessage) => { - localNotif.text = formattedMessage; - }).catch(() => { - localNotif.text = notification.message; + promises.push(this.textUtils.formatText(notification.message, true, true).catch(() => { + // Error formatting, use the original message. + return notification.message; + }).then((formattedMessage) => { + if (extraFeatures && this.utils.isFalseOrZero(data.notif)) { + // It's a message, use messaging style. Ionic Native doesn't specify this option. + ( localNotif).text = [ + { + message: formattedMessage, + person: data.conversationtype == 2 ? data.userfromfullname : '' + } + ]; + } else { + localNotif.text = formattedMessage; + } })); - if (this.utils.isTrueOrOne(data.extrafeatures)) { - // Extra features enabled. + if (extraFeatures) { + // Use a different icon if needed. localNotif.icon = notification.image; // This feature isn't supported by the official plugin, we use a fork. ( localNotif).iconType = data['image-type']; } Promise.all(promises).then(() => { - this.localNotificationsProvider.schedule(localNotif, CorePushNotificationsProvider.COMPONENT, data.site); + this.localNotificationsProvider.schedule(localNotif, CorePushNotificationsProvider.COMPONENT, data.site, + true); }); } diff --git a/src/providers/local-notifications.ts b/src/providers/local-notifications.ts index de8e89e94..036803306 100644 --- a/src/providers/local-notifications.ts +++ b/src/providers/local-notifications.ts @@ -470,10 +470,19 @@ export class CoreLocalNotificationsProvider { * be unique inside its component and site. * @param {string} component Component triggering the notification. It is used to generate unique IDs. * @param {string} siteId Site ID. + * @param {boolean} [alreadyUnique] Whether the ID is already unique. * @return {Promise} Promise resolved when the notification is scheduled. */ - schedule(notification: ILocalNotification, component: string, siteId: string): Promise { - return this.getUniqueNotificationId(notification.id, component, siteId).then((uniqueId) => { + schedule(notification: ILocalNotification, component: string, siteId: string, alreadyUnique?: boolean): Promise { + let promise; + + if (alreadyUnique) { + promise = Promise.resolve(notification.id); + } else { + promise = this.getUniqueNotificationId(notification.id, component, siteId); + } + + return promise.then((uniqueId) => { notification.id = uniqueId; notification.data = notification.data || {}; notification.data.component = component; From f04c5a4d3cc2a68aa627dac22277db1d78318524 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 25 Apr 2019 17:48:18 +0200 Subject: [PATCH 090/263] MOBILE-2961 config: Use fork of local and push plugins --- config.xml | 4 ++-- package-lock.json | 13 ++++++------- package.json | 4 ++-- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/config.xml b/config.xml index 4b3c43d65..ad5096d54 100644 --- a/config.xml +++ b/config.xml @@ -129,7 +129,7 @@ - + @@ -139,7 +139,7 @@ - + diff --git a/package-lock.json b/package-lock.json index efde4ebc4..4e89f7b0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3173,9 +3173,8 @@ "integrity": "sha512-6ucQ6FdlLdBm8kJfFnzozmBTjru/0xekHP/dAhjoCZggkGRlgs8TsUJFkxa/bV+qi7Dlo50JjmpE4UMWAO+aOQ==" }, "cordova-plugin-local-notification": { - "version": "0.9.0-beta.3", - "resolved": "https://registry.npmjs.org/cordova-plugin-local-notification/-/cordova-plugin-local-notification-0.9.0-beta.3.tgz", - "integrity": "sha512-L3Z1velxrkm9nHFcvLnMgBPZjKFt6hwM6hn1lA+JFwIR26Yw6UF72z+/lRMBclAcOxBIDYCqeaLgvezmajjuEg==" + "version": "git+https://github.com/moodlemobile/cordova-plugin-local-notifications.git#5b2f3073a1c1fb39cad3566be792445c343db2c6", + "from": "git+https://github.com/moodlemobile/cordova-plugin-local-notifications.git#moodle" }, "cordova-plugin-media-capture": { "version": "3.0.2", @@ -3600,7 +3599,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -5972,7 +5971,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -8575,8 +8574,8 @@ "integrity": "sha512-1wvc3iQOQpEBaQbXgLxA2JUiLSQ2azdF/bF29ghXDiQJWSpQ1BF8gSuqttM8WZoj081Ps8OKL0gYxdDBkFNPqA==" }, "phonegap-plugin-push": { - "version": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#b2fb84bab47d2a86e934893394d8667eec82f0e8", - "from": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#moodle-v2", + "version": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#cf8101e86adb774ae1d7ad6b65fb9d8802673f4b", + "from": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#moodle-v3", "requires": { "babel-plugin-add-header-comment": "^1.0.3", "install": "^0.8.2" diff --git a/package.json b/package.json index ee9784dba..0c5fc0d62 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "cordova-plugin-globalization": "^1.11.0", "cordova-plugin-inappbrowser": "^3.0.0", "cordova-plugin-ionic-keyboard": "^2.1.3", - "cordova-plugin-local-notification": "0.9.0-beta.3", + "cordova-plugin-local-notification": "git+https://github.com/moodlemobile/cordova-plugin-local-notifications.git#moodle", "cordova-plugin-media-capture": "^3.0.2", "cordova-plugin-network-information": "^2.0.1", "cordova-plugin-screen-orientation": "^3.0.1", @@ -111,7 +111,7 @@ "moment": "^2.22.2", "nl.kingsquare.cordova.background-audio": "^1.0.1", "phonegap-plugin-multidex": "^1.0.0", - "phonegap-plugin-push": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#moodle-v2", + "phonegap-plugin-push": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#moodle-v3", "promise.prototype.finally": "^3.1.0", "rxjs": "^5.5.11", "sw-toolbox": "^3.6.0", From 8723e5b68486e5265be34e7142ac97bd6a364717 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 26 Apr 2019 15:10:38 +0200 Subject: [PATCH 091/263] MOBILE-2975 blocks: Allow disabling blocks and always show courses --- src/classes/delegate.ts | 7 +- src/core/block/providers/delegate.ts | 36 +++ .../courses/components/components.module.ts | 13 +- .../components/my-courses/my-courses.html | 14 + .../components/my-courses/my-courses.ts | 242 ++++++++++++++++++ .../courses/pages/dashboard/dashboard.html | 19 +- src/core/courses/pages/dashboard/dashboard.ts | 22 ++ .../courses/pages/my-courses/my-courses.html | 25 +- .../courses/pages/my-courses/my-courses.ts | 224 +--------------- 9 files changed, 356 insertions(+), 246 deletions(-) create mode 100644 src/core/courses/components/my-courses/my-courses.html create mode 100644 src/core/courses/components/my-courses/my-courses.ts diff --git a/src/classes/delegate.ts b/src/classes/delegate.ts index 61fd14b76..db6726933 100644 --- a/src/classes/delegate.ts +++ b/src/classes/delegate.ts @@ -15,6 +15,7 @@ import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreEventsProvider } from '@providers/events'; +import { CoreSite } from '@classes/site'; export interface CoreDelegateHandler { /** @@ -272,10 +273,10 @@ export class CoreDelegate { * Check if feature is enabled or disabled in the site, depending on the feature prefix and the handler name. * * @param {CoreDelegateHandler} handler Handler to check. - * @param {any} site Site to check. - * @return {boolean} Whether is enabled or disabled in site. + * @param {CoreSite} site Site to check. + * @return {boolean} Whether is enabled or disabled in site. */ - protected isFeatureDisabled(handler: CoreDelegateHandler, site: any): boolean { + protected isFeatureDisabled(handler: CoreDelegateHandler, site: CoreSite): boolean { return typeof this.featurePrefix != 'undefined' && site.isFeatureDisabled(this.featurePrefix + handler.name); } diff --git a/src/core/block/providers/delegate.ts b/src/core/block/providers/delegate.ts index 363dff591..0275350be 100644 --- a/src/core/block/providers/delegate.ts +++ b/src/core/block/providers/delegate.ts @@ -18,6 +18,7 @@ import { CoreEventsProvider } from '@providers/events'; import { CoreSitesProvider } from '@providers/sites'; import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate'; import { CoreBlockDefaultHandler } from './default-block-handler'; +import { CoreSite } from '@classes/site'; /** * Interface that all blocks must implement. @@ -87,6 +88,30 @@ export class CoreBlockDelegate extends CoreDelegate { super('CoreBlockDelegate', logger, sitesProvider, eventsProvider); } + /** + * Check if blocks are disabled in a certain site. + * + * @param {CoreSite} [site] Site. If not defined, use current site. + * @return {boolean} Whether it's disabled. + */ + areBlocksDisabledInSite(site?: CoreSite): boolean { + site = site || this.sitesProvider.getCurrentSite(); + + return site.isFeatureDisabled('NoDelegate_SiteBlocks'); + } + + /** + * Check if blocks are disabled in a certain site. + * + * @param {string} [siteId] Site Id. If not defined, use current site. + * @return {Promise} Promise resolved with true if disabled, rejected or resolved with false otherwise. + */ + areBlocksDisabled(siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return this.areBlocksDisabledInSite(site); + }); + } + /** * Get the display data for a certain block. * @@ -121,4 +146,15 @@ export class CoreBlockDelegate extends CoreDelegate { isBlockSupported(name: string): boolean { return this.hasHandler(name, true); } + + /** + * Check if feature is enabled or disabled in the site, depending on the feature prefix and the handler name. + * + * @param {CoreDelegateHandler} handler Handler to check. + * @param {CoreSite} site Site to check. + * @return {boolean} Whether is enabled or disabled in site. + */ + protected isFeatureDisabled(handler: CoreDelegateHandler, site: CoreSite): boolean { + return this.areBlocksDisabledInSite(site) || super.isFeatureDisabled(handler, site); + } } diff --git a/src/core/courses/components/components.module.ts b/src/core/courses/components/components.module.ts index 45b2671cb..ccb458973 100644 --- a/src/core/courses/components/components.module.ts +++ b/src/core/courses/components/components.module.ts @@ -19,15 +19,17 @@ import { TranslateModule } from '@ngx-translate/core'; import { CoreComponentsModule } from '@components/components.module'; import { CoreDirectivesModule } from '@directives/directives.module'; import { CorePipesModule } from '@pipes/pipes.module'; -import { CoreCoursesCourseProgressComponent } from '../components/course-progress/course-progress'; -import { CoreCoursesCourseListItemComponent } from '../components/course-list-item/course-list-item'; -import { CoreCoursesCourseOptionsMenuComponent } from '../components/course-options-menu/course-options-menu'; +import { CoreCoursesCourseProgressComponent } from './course-progress/course-progress'; +import { CoreCoursesCourseListItemComponent } from './course-list-item/course-list-item'; +import { CoreCoursesCourseOptionsMenuComponent } from './course-options-menu/course-options-menu'; +import { CoreCoursesMyCoursesComponent } from './my-courses/my-courses'; @NgModule({ declarations: [ CoreCoursesCourseProgressComponent, CoreCoursesCourseListItemComponent, - CoreCoursesCourseOptionsMenuComponent + CoreCoursesCourseOptionsMenuComponent, + CoreCoursesMyCoursesComponent ], imports: [ CommonModule, @@ -42,7 +44,8 @@ import { CoreCoursesCourseOptionsMenuComponent } from '../components/course-opti exports: [ CoreCoursesCourseProgressComponent, CoreCoursesCourseListItemComponent, - CoreCoursesCourseOptionsMenuComponent + CoreCoursesCourseOptionsMenuComponent, + CoreCoursesMyCoursesComponent ], entryComponents: [ CoreCoursesCourseOptionsMenuComponent diff --git a/src/core/courses/components/my-courses/my-courses.html b/src/core/courses/components/my-courses/my-courses.html new file mode 100644 index 000000000..06ca202b8 --- /dev/null +++ b/src/core/courses/components/my-courses/my-courses.html @@ -0,0 +1,14 @@ + + + + + + + + + + + +

{{ 'core.courses.searchcoursesadvice' | translate }}

+
+
diff --git a/src/core/courses/components/my-courses/my-courses.ts b/src/core/courses/components/my-courses/my-courses.ts new file mode 100644 index 000000000..fc0817350 --- /dev/null +++ b/src/core/courses/components/my-courses/my-courses.ts @@ -0,0 +1,242 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core'; +import { Searchbar } from 'ionic-angular'; +import { CoreEventsProvider } from '@providers/events'; +import { CoreSitesProvider } from '@providers/sites'; +import { CoreDomUtilsProvider } from '@providers/utils/dom'; +import { CoreCoursesProvider } from '../../providers/courses'; +import { CoreCoursesHelperProvider } from '../../providers/helper'; +import { CoreCourseHelperProvider } from '@core/course/providers/helper'; +import { CoreCourseOptionsDelegate } from '@core/course/providers/options-delegate'; + +/** + * Component that displays the list of courses the user is enrolled in. + */ +@Component({ + selector: 'core-courses-my-courses', + templateUrl: 'my-courses.html', +}) +export class CoreCoursesMyCoursesComponent implements OnInit, OnDestroy { + @ViewChild('searchbar') searchbar: Searchbar; + + courses: any[]; + filteredCourses: any[]; + searchEnabled: boolean; + filter = ''; + showFilter = false; + coursesLoaded = false; + prefetchCoursesData: any = {}; + downloadAllCoursesEnabled: boolean; + + protected prefetchIconInitialized = false; + protected myCoursesObserver; + protected siteUpdatedObserver; + protected isDestroyed = false; + protected courseIds = ''; + + constructor(private coursesProvider: CoreCoursesProvider, + private domUtils: CoreDomUtilsProvider, private eventsProvider: CoreEventsProvider, + private sitesProvider: CoreSitesProvider, private courseHelper: CoreCourseHelperProvider, + private courseOptionsDelegate: CoreCourseOptionsDelegate, private coursesHelper: CoreCoursesHelperProvider) { } + + /** + * Component being initialized. + */ + ngOnInit(): void { + this.searchEnabled = !this.coursesProvider.isSearchCoursesDisabledInSite(); + this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite(); + + this.fetchCourses().finally(() => { + this.coursesLoaded = true; + }); + + this.myCoursesObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_MY_COURSES_UPDATED, () => { + this.fetchCourses(); + }, this.sitesProvider.getCurrentSiteId()); + + // Refresh the enabled flags if site is updated. + this.siteUpdatedObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => { + const wasEnabled = this.downloadAllCoursesEnabled; + + this.searchEnabled = !this.coursesProvider.isSearchCoursesDisabledInSite(); + this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite(); + + if (!wasEnabled && this.downloadAllCoursesEnabled && this.coursesLoaded) { + // Download all courses is enabled now, initialize it. + this.initPrefetchCoursesIcon(); + } + }, this.sitesProvider.getCurrentSiteId()); + } + + /** + * Fetch the user courses. + * + * @return {Promise} Promise resolved when done. + */ + protected fetchCourses(): Promise { + return this.coursesProvider.getUserCourses().then((courses) => { + const promises = [], + courseIds = courses.map((course) => { + return course.id; + }); + + this.courseIds = courseIds.join(','); + + promises.push(this.coursesHelper.loadCoursesExtraInfo(courses)); + + if (this.coursesProvider.canGetAdminAndNavOptions()) { + promises.push(this.coursesProvider.getCoursesAdminAndNavOptions(courseIds).then((options) => { + courses.forEach((course) => { + course.navOptions = options.navOptions[course.id]; + course.admOptions = options.admOptions[course.id]; + }); + })); + } + + return Promise.all(promises).then(() => { + this.courses = courses; + this.filteredCourses = this.courses; + this.filter = ''; + + this.initPrefetchCoursesIcon(); + }); + }).catch((error) => { + this.domUtils.showErrorModalDefault(error, 'core.courses.errorloadcourses', true); + }); + } + + /** + * Refresh the courses. + * + * @param {any} refresher Refresher. + */ + refreshCourses(refresher: any): void { + const promises = []; + + promises.push(this.coursesProvider.invalidateUserCourses()); + promises.push(this.courseOptionsDelegate.clearAndInvalidateCoursesOptions()); + if (this.courseIds) { + promises.push(this.coursesProvider.invalidateCoursesByField('ids', this.courseIds)); + } + + Promise.all(promises).finally(() => { + + this.prefetchIconInitialized = false; + this.fetchCourses().finally(() => { + refresher.complete(); + }); + }); + } + + /** + * Show or hide the filter. + */ + switchFilter(): void { + this.filter = ''; + this.showFilter = !this.showFilter; + this.filteredCourses = this.courses; + if (this.showFilter) { + setTimeout(() => { + this.searchbar.setFocus(); + }, 500); + } + } + + /** + * The filter has changed. + * + * @param {any} Received Event. + */ + filterChanged(event: any): void { + const newValue = event.target.value && event.target.value.trim().toLowerCase(); + if (!newValue || !this.courses) { + this.filteredCourses = this.courses; + } else { + // Use displayname if avalaible, or fullname if not. + if (this.courses.length > 0 && typeof this.courses[0].displayname != 'undefined') { + this.filteredCourses = this.courses.filter((course) => { + return course.displayname.toLowerCase().indexOf(newValue) > -1; + }); + } else { + this.filteredCourses = this.courses.filter((course) => { + return course.fullname.toLowerCase().indexOf(newValue) > -1; + }); + } + } + } + + /** + * Prefetch all the courses. + * + * @return {Promise} Promise resolved when done. + */ + prefetchCourses(): Promise { + const initialIcon = this.prefetchCoursesData.icon; + + this.prefetchCoursesData.icon = 'spinner'; + this.prefetchCoursesData.badge = ''; + + return this.courseHelper.confirmAndPrefetchCourses(this.courses, (progress) => { + this.prefetchCoursesData.badge = progress.count + ' / ' + progress.total; + }).then(() => { + this.prefetchCoursesData.icon = 'ion-android-refresh'; + }).catch((error) => { + if (!this.isDestroyed) { + this.domUtils.showErrorModalDefault(error, 'core.course.errordownloadingcourse', true); + this.prefetchCoursesData.icon = initialIcon; + } + }).finally(() => { + this.prefetchCoursesData.badge = ''; + }); + } + + /** + * Initialize the prefetch icon for the list of courses. + */ + protected initPrefetchCoursesIcon(): void { + if (this.prefetchIconInitialized || !this.downloadAllCoursesEnabled) { + // Already initialized. + return; + } + + this.prefetchIconInitialized = true; + + if (!this.courses || this.courses.length < 2) { + // Not enough courses. + this.prefetchCoursesData.icon = ''; + + return; + } + + this.courseHelper.determineCoursesStatus(this.courses).then((status) => { + let icon = this.courseHelper.getCourseStatusIconAndTitleFromStatus(status).icon; + if (icon == 'spinner') { + // It seems all courses are being downloaded, show a download button instead. + icon = 'cloud-download'; + } + this.prefetchCoursesData.icon = icon; + }); + } + + /** + * Page destroyed. + */ + ngOnDestroy(): void { + this.isDestroyed = true; + this.myCoursesObserver && this.myCoursesObserver.off(); + this.siteUpdatedObserver && this.siteUpdatedObserver.off(); + } +} diff --git a/src/core/courses/pages/dashboard/dashboard.html b/src/core/courses/pages/dashboard/dashboard.html index d648f0cbe..f9eff8228 100644 --- a/src/core/courses/pages/dashboard/dashboard.html +++ b/src/core/courses/pages/dashboard/dashboard.html @@ -7,7 +7,12 @@ - + + + + + + @@ -46,5 +51,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/core/courses/pages/dashboard/dashboard.ts b/src/core/courses/pages/dashboard/dashboard.ts index 6171a18ed..cff6155b2 100644 --- a/src/core/courses/pages/dashboard/dashboard.ts +++ b/src/core/courses/pages/dashboard/dashboard.ts @@ -24,6 +24,7 @@ import { CoreSiteHomeProvider } from '@core/sitehome/providers/sitehome'; import { CoreSiteHomeIndexComponent } from '@core/sitehome/components/index/index'; import { CoreCoursesProvider } from '../../providers/courses'; import { CoreCoursesDashboardProvider } from '../../providers/dashboard'; +import { CoreCoursesMyCoursesComponent } from '../../components/my-courses/my-courses'; /** * Page that displays the dashboard. @@ -37,6 +38,7 @@ export class CoreCoursesDashboardPage implements OnDestroy { @ViewChild(CoreTabsComponent) tabsComponent: CoreTabsComponent; @ViewChild(CoreSiteHomeIndexComponent) siteHomeComponent: CoreSiteHomeIndexComponent; @ViewChildren(CoreBlockComponent) blocksComponents: QueryList; + @ViewChild(CoreCoursesMyCoursesComponent) mcComponent: CoreCoursesMyCoursesComponent; firstSelectedTab: number; siteHomeEnabled = false; @@ -186,6 +188,26 @@ export class CoreCoursesDashboardPage implements OnDestroy { }); } + /** + * Refresh the dashboard data and My Courses. + * + * @param {any} refresher Refresher. + */ + refreshMyCourses(refresher: any): void { + // First of all, refresh dashboard blocks, maybe a new block was added and now we can display the dashboard. + this.dashboardProvider.invalidateDashboardBlocks().finally(() => { + return this.loadDashboardContent(); + }).finally(() => { + if (!this.dashboardEnabled) { + // Dashboard still not enabled. Refresh my courses. + this.mcComponent && this.mcComponent.refreshCourses(refresher); + } else { + this.tabsComponent.selectTab(1); + refresher.complete(); + } + }); + } + /** * Toggle download enabled. */ diff --git a/src/core/courses/pages/my-courses/my-courses.html b/src/core/courses/pages/my-courses/my-courses.html index 2129adec0..c23f5cc59 100644 --- a/src/core/courses/pages/my-courses/my-courses.html +++ b/src/core/courses/pages/my-courses/my-courses.html @@ -3,33 +3,20 @@ {{ 'core.courses.mycourses' | translate }} - - - - + + + - + - - - - - - - - - - - -

{{ 'core.courses.searchcoursesadvice' | translate }}

-
-
+
diff --git a/src/core/courses/pages/my-courses/my-courses.ts b/src/core/courses/pages/my-courses/my-courses.ts index bf874e962..3ca35b8a9 100644 --- a/src/core/courses/pages/my-courses/my-courses.ts +++ b/src/core/courses/pages/my-courses/my-courses.ts @@ -12,15 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Component, OnDestroy, ViewChild } from '@angular/core'; -import { IonicPage, Searchbar, NavController } from 'ionic-angular'; -import { CoreEventsProvider } from '@providers/events'; -import { CoreSitesProvider } from '@providers/sites'; -import { CoreDomUtilsProvider } from '@providers/utils/dom'; -import { CoreCoursesProvider } from '../../providers/courses'; -import { CoreCoursesHelperProvider } from '../../providers/helper'; -import { CoreCourseHelperProvider } from '@core/course/providers/helper'; -import { CoreCourseOptionsDelegate } from '@core/course/providers/options-delegate'; +import { Component, ViewChild } from '@angular/core'; +import { IonicPage, NavController } from 'ionic-angular'; +import { CoreCoursesMyCoursesComponent } from '../../components/my-courses/my-courses'; /** * Page that displays the list of courses the user is enrolled in. @@ -30,131 +24,10 @@ import { CoreCourseOptionsDelegate } from '@core/course/providers/options-delega selector: 'page-core-courses-my-courses', templateUrl: 'my-courses.html', }) -export class CoreCoursesMyCoursesPage implements OnDestroy { - @ViewChild('searchbar') searchbar: Searchbar; +export class CoreCoursesMyCoursesPage { + @ViewChild(CoreCoursesMyCoursesComponent) mcComponent: CoreCoursesMyCoursesComponent; - courses: any[]; - filteredCourses: any[]; - searchEnabled: boolean; - filter = ''; - showFilter = false; - coursesLoaded = false; - prefetchCoursesData: any = {}; - downloadAllCoursesEnabled: boolean; - - protected prefetchIconInitialized = false; - protected myCoursesObserver; - protected siteUpdatedObserver; - protected isDestroyed = false; - protected courseIds = ''; - - constructor(private navCtrl: NavController, private coursesProvider: CoreCoursesProvider, - private domUtils: CoreDomUtilsProvider, private eventsProvider: CoreEventsProvider, - private sitesProvider: CoreSitesProvider, private courseHelper: CoreCourseHelperProvider, - private courseOptionsDelegate: CoreCourseOptionsDelegate, private coursesHelper: CoreCoursesHelperProvider) { } - - /** - * View loaded. - */ - ionViewDidLoad(): void { - this.searchEnabled = !this.coursesProvider.isSearchCoursesDisabledInSite(); - this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite(); - - this.fetchCourses().finally(() => { - this.coursesLoaded = true; - }); - - this.myCoursesObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_MY_COURSES_UPDATED, () => { - this.fetchCourses(); - }, this.sitesProvider.getCurrentSiteId()); - - // Refresh the enabled flags if site is updated. - this.siteUpdatedObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => { - const wasEnabled = this.downloadAllCoursesEnabled; - - this.searchEnabled = !this.coursesProvider.isSearchCoursesDisabledInSite(); - this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite(); - - if (!wasEnabled && this.downloadAllCoursesEnabled && this.coursesLoaded) { - // Download all courses is enabled now, initialize it. - this.initPrefetchCoursesIcon(); - } - }, this.sitesProvider.getCurrentSiteId()); - } - - /** - * Fetch the user courses. - * - * @return {Promise} Promise resolved when done. - */ - protected fetchCourses(): Promise { - return this.coursesProvider.getUserCourses().then((courses) => { - const promises = [], - courseIds = courses.map((course) => { - return course.id; - }); - - this.courseIds = courseIds.join(','); - - promises.push(this.coursesHelper.loadCoursesExtraInfo(courses)); - - if (this.coursesProvider.canGetAdminAndNavOptions()) { - promises.push(this.coursesProvider.getCoursesAdminAndNavOptions(courseIds).then((options) => { - courses.forEach((course) => { - course.navOptions = options.navOptions[course.id]; - course.admOptions = options.admOptions[course.id]; - }); - })); - } - - return Promise.all(promises).then(() => { - this.courses = courses; - this.filteredCourses = this.courses; - this.filter = ''; - - this.initPrefetchCoursesIcon(); - }); - }).catch((error) => { - this.domUtils.showErrorModalDefault(error, 'core.courses.errorloadcourses', true); - }); - } - - /** - * Refresh the courses. - * - * @param {any} refresher Refresher. - */ - refreshCourses(refresher: any): void { - const promises = []; - - promises.push(this.coursesProvider.invalidateUserCourses()); - promises.push(this.courseOptionsDelegate.clearAndInvalidateCoursesOptions()); - if (this.courseIds) { - promises.push(this.coursesProvider.invalidateCoursesByField('ids', this.courseIds)); - } - - Promise.all(promises).finally(() => { - - this.prefetchIconInitialized = false; - this.fetchCourses().finally(() => { - refresher.complete(); - }); - }); - } - - /** - * Show or hide the filter. - */ - switchFilter(): void { - this.filter = ''; - this.showFilter = !this.showFilter; - this.filteredCourses = this.courses; - if (this.showFilter) { - setTimeout(() => { - this.searchbar.setFocus(); - }, 500); - } - } + constructor(private navCtrl: NavController) { } /** * Go to search courses. @@ -162,89 +35,4 @@ export class CoreCoursesMyCoursesPage implements OnDestroy { openSearch(): void { this.navCtrl.push('CoreCoursesSearchPage'); } - - /** - * The filter has changed. - * - * @param {any} Received Event. - */ - filterChanged(event: any): void { - const newValue = event.target.value && event.target.value.trim().toLowerCase(); - if (!newValue || !this.courses) { - this.filteredCourses = this.courses; - } else { - // Use displayname if avalaible, or fullname if not. - if (this.courses.length > 0 && typeof this.courses[0].displayname != 'undefined') { - this.filteredCourses = this.courses.filter((course) => { - return course.displayname.toLowerCase().indexOf(newValue) > -1; - }); - } else { - this.filteredCourses = this.courses.filter((course) => { - return course.fullname.toLowerCase().indexOf(newValue) > -1; - }); - } - } - } - - /** - * Prefetch all the courses. - * - * @return {Promise} Promise resolved when done. - */ - prefetchCourses(): Promise { - const initialIcon = this.prefetchCoursesData.icon; - - this.prefetchCoursesData.icon = 'spinner'; - this.prefetchCoursesData.badge = ''; - - return this.courseHelper.confirmAndPrefetchCourses(this.courses, (progress) => { - this.prefetchCoursesData.badge = progress.count + ' / ' + progress.total; - }).then(() => { - this.prefetchCoursesData.icon = 'ion-android-refresh'; - }).catch((error) => { - if (!this.isDestroyed) { - this.domUtils.showErrorModalDefault(error, 'core.course.errordownloadingcourse', true); - this.prefetchCoursesData.icon = initialIcon; - } - }).finally(() => { - this.prefetchCoursesData.badge = ''; - }); - } - - /** - * Initialize the prefetch icon for the list of courses. - */ - protected initPrefetchCoursesIcon(): void { - if (this.prefetchIconInitialized || !this.downloadAllCoursesEnabled) { - // Already initialized. - return; - } - - this.prefetchIconInitialized = true; - - if (!this.courses || this.courses.length < 2) { - // Not enough courses. - this.prefetchCoursesData.icon = ''; - - return; - } - - this.courseHelper.determineCoursesStatus(this.courses).then((status) => { - let icon = this.courseHelper.getCourseStatusIconAndTitleFromStatus(status).icon; - if (icon == 'spinner') { - // It seems all courses are being downloaded, show a download button instead. - icon = 'cloud-download'; - } - this.prefetchCoursesData.icon = icon; - }); - } - - /** - * Page destroyed. - */ - ngOnDestroy(): void { - this.isDestroyed = true; - this.myCoursesObserver && this.myCoursesObserver.off(); - this.siteUpdatedObserver && this.siteUpdatedObserver.off(); - } } From 65c202c998adc5a1aecd6e96e392d1065ac9b462 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 26 Apr 2019 15:36:43 +0200 Subject: [PATCH 092/263] MOBILE-2975 comments: Allow disable comments --- .../entries/addon-blog-entries.html | 2 +- src/addon/blog/components/entries/entries.ts | 7 +++- .../addon-mod-assign-submission-comments.html | 2 +- .../submission/comments/component/comments.ts | 4 ++ src/addon/mod/data/pages/entry/entry.html | 2 +- src/addon/mod/data/pages/entry/entry.ts | 5 ++- .../comments/components/comments/comments.ts | 38 +++++++++++++++++-- .../components/comments/core-comments.html | 2 +- src/core/comments/providers/comments.ts | 25 ++++++++++++ 9 files changed, 77 insertions(+), 10 deletions(-) diff --git a/src/addon/blog/components/entries/addon-blog-entries.html b/src/addon/blog/components/entries/addon-blog-entries.html index 9312a00cd..670e4d276 100644 --- a/src/addon/blog/components/entries/addon-blog-entries.html +++ b/src/addon/blog/components/entries/addon-blog-entries.html @@ -29,7 +29,7 @@
- + diff --git a/src/addon/blog/components/entries/entries.ts b/src/addon/blog/components/entries/entries.ts index 54f84d30a..b66db02a3 100644 --- a/src/addon/blog/components/entries/entries.ts +++ b/src/addon/blog/components/entries/entries.ts @@ -18,6 +18,7 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreSitesProvider } from '@providers/sites'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonBlogProvider } from '../../providers/blog'; +import { CoreCommentsProvider } from '@core/comments/providers/comments'; /** * Component that displays the blog entries. @@ -47,9 +48,11 @@ export class AddonBlogEntriesComponent implements OnInit { showMyIssuesToggle = false; onlyMyEntries = false; component = AddonBlogProvider.COMPONENT; + commentsEnabled: boolean; constructor(protected blogProvider: AddonBlogProvider, protected domUtils: CoreDomUtilsProvider, - protected userProvider: CoreUserProvider, sitesProvider: CoreSitesProvider) { + protected userProvider: CoreUserProvider, sitesProvider: CoreSitesProvider, + protected commentsProvider: CoreCommentsProvider) { this.currentUserId = sitesProvider.getCurrentSiteUserId(); } @@ -81,6 +84,8 @@ export class AddonBlogEntriesComponent implements OnInit { this.filter['tagid'] = this.tagId; } + this.commentsEnabled = !this.commentsProvider.areCommentsDisabledInSite(); + this.fetchEntries().then(() => { this.blogProvider.logView(this.filter).catch(() => { // Ignore errors. diff --git a/src/addon/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html b/src/addon/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html index 07a5ae68e..be2ba466f 100644 --- a/src/addon/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html +++ b/src/addon/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html @@ -1,4 +1,4 @@ - +

{{plugin.name}}

diff --git a/src/addon/mod/assign/submission/comments/component/comments.ts b/src/addon/mod/assign/submission/comments/component/comments.ts index 31f62de86..98c8be9e0 100644 --- a/src/addon/mod/assign/submission/comments/component/comments.ts +++ b/src/addon/mod/assign/submission/comments/component/comments.ts @@ -27,8 +27,12 @@ import { AddonModAssignSubmissionPluginComponent } from '../../../classes/submis export class AddonModAssignSubmissionCommentsComponent extends AddonModAssignSubmissionPluginComponent { @ViewChild(CoreCommentsCommentsComponent) commentsComponent: CoreCommentsCommentsComponent; + commentsEnabled: boolean; + constructor(protected commentsProvider: CoreCommentsProvider) { super(); + + this.commentsEnabled = !commentsProvider.areCommentsDisabledInSite(); } /** diff --git a/src/addon/mod/data/pages/entry/entry.html b/src/addon/mod/data/pages/entry/entry.html index 20e8d31d0..ebbc2e2fa 100644 --- a/src/addon/mod/data/pages/entry/entry.html +++ b/src/addon/mod/data/pages/entry/entry.html @@ -31,7 +31,7 @@ - + diff --git a/src/addon/mod/data/pages/entry/entry.ts b/src/addon/mod/data/pages/entry/entry.ts index cb17d7dfa..51e95ce9c 100644 --- a/src/addon/mod/data/pages/entry/entry.ts +++ b/src/addon/mod/data/pages/entry/entry.ts @@ -26,6 +26,7 @@ import { AddonModDataHelperProvider } from '../../providers/helper'; import { AddonModDataSyncProvider } from '../../providers/sync'; import { AddonModDataFieldsDelegate } from '../../providers/fields-delegate'; import { AddonModDataComponentsModule } from '../../components/components.module'; +import { CoreCommentsProvider } from '@core/comments/providers/comments'; /** * Page that displays the view entry page. @@ -68,13 +69,14 @@ export class AddonModDataEntryPage implements OnDestroy { jsData; ratingInfo: CoreRatingInfo; isPullingToRefresh = false; // Whether the last fetching of data was started by a pull-to-refresh action + commentsEnabled: boolean; constructor(params: NavParams, protected utils: CoreUtilsProvider, protected groupsProvider: CoreGroupsProvider, protected domUtils: CoreDomUtilsProvider, protected fieldsDelegate: AddonModDataFieldsDelegate, protected courseProvider: CoreCourseProvider, protected dataProvider: AddonModDataProvider, protected dataHelper: AddonModDataHelperProvider, sitesProvider: CoreSitesProvider, protected navCtrl: NavController, protected eventsProvider: CoreEventsProvider, - private cdr: ChangeDetectorRef) { + private cdr: ChangeDetectorRef, protected commentsProvider: CoreCommentsProvider) { this.module = params.get('module') || {}; this.entryId = params.get('entryId') || null; this.courseId = params.get('courseId'); @@ -91,6 +93,7 @@ export class AddonModDataEntryPage implements OnDestroy { * View loaded. */ ionViewDidLoad(): void { + this.commentsEnabled = !this.commentsProvider.areCommentsDisabledInSite(); this.fetchEntryData(); // Refresh data if this discussion is synchronized automatically. diff --git a/src/core/comments/components/comments/comments.ts b/src/core/comments/components/comments/comments.ts index 2e5303a8e..6538a0874 100644 --- a/src/core/comments/components/comments/comments.ts +++ b/src/core/comments/components/comments/comments.ts @@ -12,9 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Component, EventEmitter, Input, OnChanges, Output, SimpleChange } from '@angular/core'; +import { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChange } from '@angular/core'; import { NavController } from 'ionic-angular'; import { CoreCommentsProvider } from '../../providers/comments'; +import { CoreEventsProvider } from '@providers/events'; +import { CoreSitesProvider } from '@providers/sites'; /** * Component that displays the count of comments. @@ -23,7 +25,7 @@ import { CoreCommentsProvider } from '../../providers/comments'; selector: 'core-comments', templateUrl: 'core-comments.html', }) -export class CoreCommentsCommentsComponent implements OnChanges { +export class CoreCommentsCommentsComponent implements OnChanges, OnDestroy { @Input() contextLevel: string; @Input() instanceId: number; @Input() component: string; @@ -36,9 +38,26 @@ export class CoreCommentsCommentsComponent implements OnChanges { commentsLoaded = false; commentsCount: number; + disabled = false; - constructor(private navCtrl: NavController, private commentsProvider: CoreCommentsProvider) { + protected updateSiteObserver; + + constructor(private navCtrl: NavController, private commentsProvider: CoreCommentsProvider, + sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider) { this.onLoading = new EventEmitter(); + + this.disabled = this.commentsProvider.areCommentsDisabledInSite(); + + // Update visibility if current site info is updated. + this.updateSiteObserver = eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => { + const wasDisabled = this.disabled; + + this.disabled = this.commentsProvider.areCommentsDisabledInSite(); + + if (wasDisabled && !this.disabled) { + this.fetchData(); + } + }, sitesProvider.getCurrentSiteId()); } /** @@ -59,6 +78,10 @@ export class CoreCommentsCommentsComponent implements OnChanges { } protected fetchData(): void { + if (this.disabled) { + return; + } + this.commentsLoaded = false; this.onLoading.emit(true); @@ -77,7 +100,7 @@ export class CoreCommentsCommentsComponent implements OnChanges { * Opens the comments page. */ openComments(): void { - if (this.commentsCount > 0) { + if (!this.disabled && this.commentsCount > 0) { // Open a new state with the interpolated contents. this.navCtrl.push('CoreCommentsViewerPage', { contextLevel: this.contextLevel, @@ -90,4 +113,11 @@ export class CoreCommentsCommentsComponent implements OnChanges { }); } } + + /** + * Component destroyed. + */ + ngOnDestroy(): void { + this.updateSiteObserver && this.updateSiteObserver.off(); + } } diff --git a/src/core/comments/components/comments/core-comments.html b/src/core/comments/components/comments/core-comments.html index 7dad81877..e7b71e041 100644 --- a/src/core/comments/components/comments/core-comments.html +++ b/src/core/comments/components/comments/core-comments.html @@ -1,4 +1,4 @@ - +
{{ 'core.commentscount' | translate : {'$a': commentsCount} }}
diff --git a/src/core/comments/providers/comments.ts b/src/core/comments/providers/comments.ts index db3978029..2d876990d 100644 --- a/src/core/comments/providers/comments.ts +++ b/src/core/comments/providers/comments.ts @@ -14,6 +14,7 @@ import { Injectable } from '@angular/core'; import { CoreSitesProvider } from '@providers/sites'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features regarding comments. @@ -25,6 +26,30 @@ export class CoreCommentsProvider { constructor(private sitesProvider: CoreSitesProvider) {} + /** + * Check if Calendar is disabled in a certain site. + * + * @param {CoreSite} [site] Site. If not defined, use current site. + * @return {boolean} Whether it's disabled. + */ + areCommentsDisabledInSite(site?: CoreSite): boolean { + site = site || this.sitesProvider.getCurrentSite(); + + return site.isFeatureDisabled('NoDelegate_CoreComments'); + } + + /** + * Check if comments are disabled in a certain site. + * + * @param {string} [siteId] Site Id. If not defined, use current site. + * @return {Promise} Promise resolved with true if disabled, rejected or resolved with false otherwise. + */ + areCommentsDisabled(siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return this.areCommentsDisabledInSite(site); + }); + } + /** * Get cache key for get comments data WS calls. * From e449496b45e7af0feb88f9e7c883d73b3283b5ce Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 26 Apr 2019 16:12:09 +0200 Subject: [PATCH 093/263] MOBILE-2975 dashboard: Allow disabling dashboard --- .../block/timeline/providers/timeline.ts | 8 +++- src/core/courses/pages/dashboard/dashboard.ts | 12 ++++-- .../providers/dashboard-link-handler.ts | 17 ++++++++- src/core/courses/providers/dashboard.ts | 30 +++++++++++++++ .../courses/providers/mainmenu-handler.ts | 38 ++++++++++++++++--- 5 files changed, 93 insertions(+), 12 deletions(-) diff --git a/src/addon/block/timeline/providers/timeline.ts b/src/addon/block/timeline/providers/timeline.ts index 942ba4ba5..148aed267 100644 --- a/src/addon/block/timeline/providers/timeline.ts +++ b/src/addon/block/timeline/providers/timeline.ts @@ -14,6 +14,7 @@ import { Injectable } from '@angular/core'; import { CoreSitesProvider } from '@providers/sites'; +import { CoreCoursesDashboardProvider } from '@core/courses/providers/dashboard'; import * as moment from 'moment'; /** @@ -26,7 +27,7 @@ export class AddonBlockTimelineProvider { // Cache key was maintained when moving the functions to this file. It comes from core myoverview. protected ROOT_CACHE_KEY = 'myoverview:'; - constructor(private sitesProvider: CoreSitesProvider) { } + constructor(private sitesProvider: CoreSitesProvider, private dashboardProvider: CoreCoursesDashboardProvider) { } /** * Get calendar action events for the given course. @@ -218,6 +219,11 @@ export class AddonBlockTimelineProvider { */ isAvailable(siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { + // First check if dashboard is disabled. + if (this.dashboardProvider.isDisabledInSite(site)) { + return false; + } + return site.wsAvailable('core_calendar_get_action_events_by_courses') && site.wsAvailable('core_calendar_get_action_events_by_timesort'); }); diff --git a/src/core/courses/pages/dashboard/dashboard.ts b/src/core/courses/pages/dashboard/dashboard.ts index cff6155b2..94bd5243a 100644 --- a/src/core/courses/pages/dashboard/dashboard.ts +++ b/src/core/courses/pages/dashboard/dashboard.ts @@ -142,8 +142,8 @@ export class CoreCoursesDashboardPage implements OnDestroy { * @return {Promise} Promise resolved when done. */ protected loadDashboardContent(): Promise { - return this.dashboardProvider.isAvailable().then((enabled) => { - if (enabled) { + return this.dashboardProvider.isAvailable().then((available) => { + if (available) { this.userId = this.sitesProvider.getCurrentSiteUserId(); return this.dashboardProvider.getDashboardBlocks().then((blocks) => { @@ -154,10 +154,14 @@ export class CoreCoursesDashboardPage implements OnDestroy { // Cannot get the blocks, just show dashboard if needed. this.loadFallbackBlocks(); }); + } else if (!this.dashboardProvider.isDisabledInSite()) { + // Not available, but not disabled either. Use fallback. + this.loadFallbackBlocks(); + } else { + // Disabled. + this.blocks = []; } - // Not enabled, check separated tabs. - this.loadFallbackBlocks(); }).finally(() => { this.dashboardEnabled = this.blockDelegate.hasSupportedBlock(this.blocks); this.dashboardLoaded = true; diff --git a/src/core/courses/providers/dashboard-link-handler.ts b/src/core/courses/providers/dashboard-link-handler.ts index bd325c80e..26f00164e 100644 --- a/src/core/courses/providers/dashboard-link-handler.ts +++ b/src/core/courses/providers/dashboard-link-handler.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreContentLinksHandlerBase } from '@core/contentlinks/classes/base-handler'; import { CoreContentLinksAction } from '@core/contentlinks/providers/delegate'; import { CoreLoginHelperProvider } from '@core/login/providers/helper'; +import { CoreDashboardMainMenuHandler } from './mainmenu-handler'; /** * Handler to treat links to my overview. @@ -23,10 +24,9 @@ import { CoreLoginHelperProvider } from '@core/login/providers/helper'; @Injectable() export class CoreCoursesDashboardLinkHandler extends CoreContentLinksHandlerBase { name = 'CoreCoursesMyOverviewLinkHandler'; - featureName = 'CoreMainMenuDelegate_CoreCourses'; pattern = /\/my\/?$/; - constructor(private loginHelper: CoreLoginHelperProvider) { + constructor(private loginHelper: CoreLoginHelperProvider, private mainMenuHandler: CoreDashboardMainMenuHandler) { super(); } @@ -48,4 +48,17 @@ export class CoreCoursesDashboardLinkHandler extends CoreContentLinksHandlerBase } }]; } + + /** + * Check if the handler is enabled for a certain site (site + user) and a URL. + * + * @param {string} siteId The site ID. + * @param {string} url The URL to treat. + * @param {any} params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1} + * @param {number} [courseId] Course ID related to the URL. Optional but recommended. + * @return {boolean|Promise} Whether the handler is enabled for the URL and site. + */ + isEnabled(siteId: string, url: string, params: any, courseId?: number): boolean | Promise { + return this.mainMenuHandler.isEnabledForSite(siteId); + } } diff --git a/src/core/courses/providers/dashboard.ts b/src/core/courses/providers/dashboard.ts index 7270bf539..5f2a2792d 100644 --- a/src/core/courses/providers/dashboard.ts +++ b/src/core/courses/providers/dashboard.ts @@ -14,6 +14,7 @@ import { Injectable } from '@angular/core'; import { CoreSitesProvider } from '@providers/sites'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features regarding course overview. @@ -83,7 +84,36 @@ export class CoreCoursesDashboardProvider { */ isAvailable(siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { + // First check if it's disabled. + if (this.isDisabledInSite(site)) { + return false; + } + return site.wsAvailable('core_block_get_dashboard_blocks'); }); } + + /** + * Check if Site Home is disabled in a certain site. + * + * @param {string} [siteId] Site Id. If not defined, use current site. + * @return {Promise} Promise resolved with true if disabled, rejected or resolved with false otherwise. + */ + isDisabled(siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return this.isDisabledInSite(site); + }); + } + + /** + * Check if Site Home is disabled in a certain site. + * + * @param {CoreSite} [site] Site. If not defined, use current site. + * @return {boolean} Whether it's disabled. + */ + isDisabledInSite(site?: CoreSite): boolean { + site = site || this.sitesProvider.getCurrentSite(); + + return site.isFeatureDisabled('CoreMainMenuDelegate_CoreCoursesDashboard'); + } } diff --git a/src/core/courses/providers/mainmenu-handler.ts b/src/core/courses/providers/mainmenu-handler.ts index 6f4679e48..4b32ced23 100644 --- a/src/core/courses/providers/mainmenu-handler.ts +++ b/src/core/courses/providers/mainmenu-handler.ts @@ -13,22 +13,25 @@ // limitations under the License. import { Injectable } from '@angular/core'; +import { CoreSitesProvider } from '@providers/sites'; import { CoreCoursesProvider } from './courses'; import { CoreMainMenuHandler, CoreMainMenuHandlerData } from '@core/mainmenu/providers/delegate'; import { CoreCoursesDashboardProvider } from '../providers/dashboard'; import { CoreSiteHomeProvider } from '@core/sitehome/providers/sitehome'; import { AddonBlockTimelineProvider } from '@addon/block/timeline/providers/timeline'; +import { CoreBlockDelegate } from '@core/block/providers/delegate'; /** * Handler to add Dashboard into main menu. */ @Injectable() export class CoreDashboardMainMenuHandler implements CoreMainMenuHandler { - name = 'CoreDashboard'; // Old name CoreCourses cannot be used because it would be all disabled by site. + name = 'CoreHome'; // This handler contains several different features, so we use a generic name like "CoreHome". priority = 1100; constructor(private coursesProvider: CoreCoursesProvider, private dashboardProvider: CoreCoursesDashboardProvider, - private siteHomeProvider: CoreSiteHomeProvider, private timelineProvider: AddonBlockTimelineProvider) { } + private siteHomeProvider: CoreSiteHomeProvider, private timelineProvider: AddonBlockTimelineProvider, + private blockDelegate: CoreBlockDelegate, private sitesProvider: CoreSitesProvider) { } /** * Check if the handler is enabled on a site level. @@ -36,15 +39,40 @@ export class CoreDashboardMainMenuHandler implements CoreMainMenuHandler { * @return {boolean | Promise} Whether or not the handler is enabled on a site level. */ isEnabled(): boolean | Promise { + return this.isEnabledForSite(); + } + + /** + * Check if the handler is enabled on a certain site. + * + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {boolean | Promise} Whether or not the handler is enabled on a site level. + */ + isEnabledForSite(siteId?: string): Promise { + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + + const promises = []; + let blocksEnabled, + dashboardAvailable; + + // Check if blocks and 3.6 dashboard is enabled. + promises.push(this.blockDelegate.areBlocksDisabled(siteId).then((disabled) => { + blocksEnabled = !disabled; + })); + + promises.push(this.dashboardProvider.isAvailable().then((available) => { + dashboardAvailable = available; + })); + // Check if 3.6 dashboard is enabled. - return this.dashboardProvider.isAvailable().then((enabled) => { - if (enabled) { + return Promise.all(promises).then(() => { + if (dashboardAvailable && blocksEnabled) { return true; } // Check if my overview is enabled. return this.timelineProvider.isAvailable().then((enabled) => { - if (enabled) { + if (enabled && blocksEnabled) { return true; } From ff1a336fa66f563026cad6a252f182ed7b05c901 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 29 Apr 2019 10:14:12 +0200 Subject: [PATCH 094/263] MOBILE-2975 rating: Allow disabling rating --- .../rating/components/aggregate/aggregate.ts | 21 +++++++++++--- .../aggregate/core-rating-aggregate.html | 2 +- .../components/rate/core-rating-rate.html | 2 +- src/core/rating/components/rate/rate.ts | 28 ++++++++++++++++--- src/core/rating/providers/rating.ts | 26 ++++++++++++++++- 5 files changed, 68 insertions(+), 11 deletions(-) diff --git a/src/core/rating/components/aggregate/aggregate.ts b/src/core/rating/components/aggregate/aggregate.ts index 75148751a..f763ddfa3 100644 --- a/src/core/rating/components/aggregate/aggregate.ts +++ b/src/core/rating/components/aggregate/aggregate.ts @@ -12,10 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Component, Input, OnChanges, SimpleChange } from '@angular/core'; +import { Component, Input, OnChanges, SimpleChange, OnDestroy } from '@angular/core'; import { ModalController } from 'ionic-angular'; import { CoreEventsProvider } from '@providers/events'; import { CoreRatingProvider, CoreRatingInfo, CoreRatingInfoItem } from '@core/rating/providers/rating'; +import { CoreSitesProvider } from '@providers/sites'; /** * Component that displays the aggregation of a rating item. @@ -24,7 +25,7 @@ import { CoreRatingProvider, CoreRatingInfo, CoreRatingInfoItem } from '@core/ra selector: 'core-rating-aggregate', templateUrl: 'core-rating-aggregate.html' }) -export class CoreRatingAggregateComponent implements OnChanges { +export class CoreRatingAggregateComponent implements OnChanges, OnDestroy { @Input() ratingInfo: CoreRatingInfo; @Input() contextLevel: string; @Input() instanceId: number; @@ -33,12 +34,23 @@ export class CoreRatingAggregateComponent implements OnChanges { @Input() scaleId: number; @Input() courseId?: number; + disabled = false; protected labelKey: string; protected showCount: boolean; protected item: CoreRatingInfoItem; protected aggregateObserver; + protected updateSiteObserver; - constructor(private eventsProvider: CoreEventsProvider, private modalCtrl: ModalController) {} + constructor(private eventsProvider: CoreEventsProvider, private modalCtrl: ModalController, + private ratingProvider: CoreRatingProvider, sitesProvider: CoreSitesProvider) { + + this.disabled = this.ratingProvider.isRatingDisabledInSite(); + + // Update visibility if current site info is updated. + this.updateSiteObserver = eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => { + this.disabled = this.ratingProvider.isRatingDisabledInSite(); + }, sitesProvider.getCurrentSiteId()); + } /** * Detect changes on input properties. @@ -86,7 +98,7 @@ export class CoreRatingAggregateComponent implements OnChanges { * Open the individual ratings page. */ openRatings(): void { - if (!this.ratingInfo.canviewall || !this.item.count) { + if (!this.ratingInfo.canviewall || !this.item.count || this.disabled) { return; } @@ -108,5 +120,6 @@ export class CoreRatingAggregateComponent implements OnChanges { */ ngOnDestroy(): void { this.aggregateObserver && this.aggregateObserver.off(); + this.updateSiteObserver && this.updateSiteObserver.off(); } } diff --git a/src/core/rating/components/aggregate/core-rating-aggregate.html b/src/core/rating/components/aggregate/core-rating-aggregate.html index 2f3b3b063..16cd20ce9 100644 --- a/src/core/rating/components/aggregate/core-rating-aggregate.html +++ b/src/core/rating/components/aggregate/core-rating-aggregate.html @@ -1,4 +1,4 @@ - + {{ labelKey | translate }}{{ 'core.labelsep' | translate }} {{ item.aggregatestr || '-' }} ({{ item.count }}) diff --git a/src/core/rating/components/rate/core-rating-rate.html b/src/core/rating/components/rate/core-rating-rate.html index cbf5357b3..eafe8f6f1 100644 --- a/src/core/rating/components/rate/core-rating-rate.html +++ b/src/core/rating/components/rate/core-rating-rate.html @@ -1,4 +1,4 @@ - + {{ 'core.rating.rating' | translate }} {{ scaleItem.name }} diff --git a/src/core/rating/components/rate/rate.ts b/src/core/rating/components/rate/rate.ts index b2c897523..a8426ea78 100644 --- a/src/core/rating/components/rate/rate.ts +++ b/src/core/rating/components/rate/rate.ts @@ -12,11 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Component, EventEmitter, Input, OnChanges, Output, SimpleChange } from '@angular/core'; +import { Component, EventEmitter, Input, OnChanges, Output, SimpleChange, OnDestroy } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { CoreRatingProvider, CoreRatingInfo, CoreRatingInfoItem, CoreRatingScale } from '@core/rating/providers/rating'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreRatingOfflineProvider } from '@core/rating/providers/offline'; +import { CoreEventsProvider } from '@providers/events'; +import { CoreSitesProvider } from '@providers/sites'; /** * Component that displays the user rating select. @@ -25,7 +27,7 @@ import { CoreRatingOfflineProvider } from '@core/rating/providers/offline'; selector: 'core-rating-rate', templateUrl: 'core-rating-rate.html' }) -export class CoreRatingRateComponent implements OnChanges { +export class CoreRatingRateComponent implements OnChanges, OnDestroy { @Input() ratingInfo: CoreRatingInfo; @Input() contextLevel: string; // Context level: course, module, user, etc. @Input() instanceId: number; // Context instance id. @@ -41,11 +43,22 @@ export class CoreRatingRateComponent implements OnChanges { item: CoreRatingInfoItem; scale: CoreRatingScale; rating: number; + disabled = false; + protected updateSiteObserver; + + constructor(private domUtils: CoreDomUtilsProvider, private translate: TranslateService, eventsProvider: CoreEventsProvider, + private ratingProvider: CoreRatingProvider, private ratingOffline: CoreRatingOfflineProvider, + sitesProvider: CoreSitesProvider) { - constructor(private domUtils: CoreDomUtilsProvider, private translate: TranslateService, - private ratingProvider: CoreRatingProvider, private ratingOffline: CoreRatingOfflineProvider) { this.onLoading = new EventEmitter(); this.onUpdate = new EventEmitter(); + + this.disabled = this.ratingProvider.isRatingDisabledInSite(); + + // Update visibility if current site info is updated. + this.updateSiteObserver = eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => { + this.disabled = this.ratingProvider.isRatingDisabledInSite(); + }, sitesProvider.getCurrentSiteId()); } /** @@ -113,4 +126,11 @@ export class CoreRatingRateComponent implements OnChanges { modal.dismiss(); }); } + + /** + * Component being destroyed. + */ + ngOnDestroy(): void { + this.updateSiteObserver && this.updateSiteObserver.off(); + } } diff --git a/src/core/rating/providers/rating.ts b/src/core/rating/providers/rating.ts index 8756daec7..e14e4593f 100644 --- a/src/core/rating/providers/rating.ts +++ b/src/core/rating/providers/rating.ts @@ -13,7 +13,7 @@ // limitations under the License. import { Injectable } from '@angular/core'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { CoreAppProvider } from '@providers/app'; import { CoreEventsProvider } from '@providers/events'; import { CoreSitesProvider } from '@providers/sites'; @@ -302,6 +302,30 @@ export class CoreRatingProvider { }); } + /** + * Check if rating is disabled in a certain site. + * + * @param {CoreSite} [site] Site. If not defined, use current site. + * @return {boolean} Whether it's disabled. + */ + isRatingDisabledInSite(site?: CoreSite): boolean { + site = site || this.sitesProvider.getCurrentSite(); + + return site.isFeatureDisabled('NoDelegate_CoreRating'); + } + + /** + * Check if rating is disabled in a certain site. + * + * @param {string} [siteId] Site Id. If not defined, use current site. + * @return {Promise} Promise resolved with true if disabled, rejected or resolved with false otherwise. + */ + isRatingDisabled(siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return this.isRatingDisabledInSite(site); + }); + } + /** * Prefetch individual ratings. * From af25634bd2072974a6a666c267be989015114850 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 5 Apr 2019 09:20:17 +0200 Subject: [PATCH 095/263] MOBILE-2963 message: Show only one message when no results found --- scripts/langindex.json | 3 -- src/addon/messages/lang/en.json | 3 -- src/addon/messages/pages/search/search.html | 59 +++++++++++---------- src/addon/messages/pages/search/search.ts | 3 -- src/assets/lang/en.json | 3 -- 5 files changed, 30 insertions(+), 41 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index bd5af73bb..a0eddf6a0 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -216,9 +216,6 @@ "addon.messages.requests": "moodle", "addon.messages.requirecontacttomessage": "message", "addon.messages.searchcombined": "message", - "addon.messages.searchnocontactsfound": "message", - "addon.messages.searchnomessagesfound": "message", - "addon.messages.searchnononcontactsfound": "message", "addon.messages.selfconversation": "message", "addon.messages.selfconversationdefaultmessage": "message", "addon.messages.sendcontactrequest": "message", diff --git a/src/addon/messages/lang/en.json b/src/addon/messages/lang/en.json index f428c85c7..4767ed3ba 100644 --- a/src/addon/messages/lang/en.json +++ b/src/addon/messages/lang/en.json @@ -55,9 +55,6 @@ "requests": "Requests", "requirecontacttomessage": "You need to request {{$a}} to add you as a contact to be able to message them.", "searchcombined": "Search people and messages", - "searchnocontactsfound": "No contacts found", - "searchnomessagesfound": "No messages found", - "searchnononcontactsfound": "No non contacts found", "selfconversation": "Personal space", "selfconversationdefaultmessage": "Save draft messages, links, notes etc. to access later.", "sendcontactrequest": "Send contact request", diff --git a/src/addon/messages/pages/search/search.html b/src/addon/messages/pages/search/search.html index 4a9ba7621..77dd31713 100644 --- a/src/addon/messages/pages/search/search.html +++ b/src/addon/messages/pages/search/search.html @@ -18,42 +18,43 @@ + +
- {{ item.titleString | translate }} - - {{ item.emptyString | translate }} - + + {{ item.titleString | translate }} - - - -

- - -

- - {{result.lastmessagedate | coreDateDayOrTime}} - -

- {{ 'addon.messages.you' | translate }} - -

-
+ + + +

+ + +

+ + {{result.lastmessagedate | coreDateDayOrTime}} + +

+ {{ 'addon.messages.you' | translate }} + +

+
- - -
- -
-
- -
+ + +
+ +
+
+ +
+
\ No newline at end of file diff --git a/src/addon/messages/pages/search/search.ts b/src/addon/messages/pages/search/search.ts index 6e51b1e20..892b26c28 100644 --- a/src/addon/messages/pages/search/search.ts +++ b/src/addon/messages/pages/search/search.ts @@ -38,7 +38,6 @@ export class AddonMessagesSearchPage implements OnDestroy { contacts = { type: 'contacts', titleString: 'addon.messages.contacts', - emptyString: 'addon.messages.searchnocontactsfound', results: [], canLoadMore: false, loadingMore: false @@ -46,7 +45,6 @@ export class AddonMessagesSearchPage implements OnDestroy { nonContacts = { type: 'noncontacts', titleString: 'addon.messages.noncontacts', - emptyString: 'addon.messages.searchnononcontactsfound', results: [], canLoadMore: false, loadingMore: false @@ -54,7 +52,6 @@ export class AddonMessagesSearchPage implements OnDestroy { messages = { type: 'messages', titleString: 'addon.messages.messages', - emptyString: 'addon.messages.searchnomessagesfound', results: [], canLoadMore: false, loadingMore: false, diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 55d53bf21..c8a128106 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -216,9 +216,6 @@ "addon.messages.requests": "Requests", "addon.messages.requirecontacttomessage": "You need to request {{$a}} to add you as a contact to be able to message them.", "addon.messages.searchcombined": "Search people and messages", - "addon.messages.searchnocontactsfound": "No contacts found", - "addon.messages.searchnomessagesfound": "No messages found", - "addon.messages.searchnononcontactsfound": "No non contacts found", "addon.messages.selfconversation": "Personal space", "addon.messages.selfconversationdefaultmessage": "Save draft messages, links, notes etc. to access later.", "addon.messages.sendcontactrequest": "Send contact request", From 4490dc94c827801b3778eed67ad44bad6b6a5313 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 5 Apr 2019 13:17:54 +0200 Subject: [PATCH 096/263] MOBILE-2963 message: Highlight search results --- src/addon/messages/pages/search/search.html | 4 ++-- src/addon/messages/pages/search/search.ts | 16 +++++++++++++ src/app/app.scss | 5 +++++ src/directives/format-text.ts | 3 ++- src/providers/utils/text.ts | 25 ++++++++++++++++++++- 5 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/addon/messages/pages/search/search.html b/src/addon/messages/pages/search/search.html index 77dd31713..86e701fe4 100644 --- a/src/addon/messages/pages/search/search.html +++ b/src/addon/messages/pages/search/search.html @@ -33,7 +33,7 @@

- +

@@ -41,7 +41,7 @@

{{ 'addon.messages.you' | translate }} - +

diff --git a/src/addon/messages/pages/search/search.ts b/src/addon/messages/pages/search/search.ts index 892b26c28..14d5b6ab1 100644 --- a/src/addon/messages/pages/search/search.ts +++ b/src/addon/messages/pages/search/search.ts @@ -175,17 +175,20 @@ export class AddonMessagesSearchPage implements OnDestroy { if (!loadMore || loadMore == 'contacts') { this.contacts.results.push(...newContacts); this.contacts.canLoadMore = canLoadMoreContacts; + this.setHighlight(newContacts, true); } if (!loadMore || loadMore == 'noncontacts') { this.nonContacts.results.push(...newNonContacts); this.nonContacts.canLoadMore = canLoadMoreNonContacts; + this.setHighlight(newNonContacts, true); } if (!loadMore || loadMore == 'messages') { this.messages.results.push(...newMessages); this.messages.canLoadMore = canLoadMoreMessages; this.messages.loadMoreError = false; + this.setHighlight(newMessages, false); } if (!loadMore) { @@ -238,6 +241,19 @@ export class AddonMessagesSearchPage implements OnDestroy { } } + /** + * Set the highlight values for each entry. + * + * @param {any[]} results Results to highlight. + * @param {boolean} isUser Whether the results are from a user search or from a message search. + */ + setHighlight(results: any[], isUser: boolean): void { + results.forEach((result) => { + result.highlightName = isUser ? this.query : undefined; + result.highlightMessage = !isUser ? this.query : undefined; + }); + } + /** * Component destroyed. */ diff --git a/src/app/app.scss b/src/app/app.scss index f9c07d4f9..9c1b3803b 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -1050,6 +1050,11 @@ ion-modal, contain: size layout style; } +// Highlight text. +.matchtext { + background-color: lighten($blue, 40%); +} + // Styles for desktop apps only. ion-app.platform-desktop { video::-webkit-media-text-track-display { diff --git a/src/directives/format-text.ts b/src/directives/format-text.ts index d840c8a84..df0a5aeb1 100644 --- a/src/directives/format-text.ts +++ b/src/directives/format-text.ts @@ -55,6 +55,7 @@ export class CoreFormatTextDirective implements OnChanges { // If you want to avoid this use class="inline" at the same time to use display: inline-block. @Input() fullOnClick?: boolean | string; // Whether it should open a new page with the full contents on click. @Input() fullTitle?: string; // Title to use in full view. Defaults to "Description". + @Input() highlight?: string; // Text to highlight. @Output() afterRender?: EventEmitter; // Called when the data is rendered. protected element: HTMLElement; @@ -348,7 +349,7 @@ export class CoreFormatTextDirective implements OnChanges { // Apply format text function. return this.textUtils.formatText(this.text, this.utils.isTrueOrOne(this.clean), - this.utils.isTrueOrOne(this.singleLine)); + this.utils.isTrueOrOne(this.singleLine), undefined, this.highlight); }).then((formatted) => { const div = document.createElement('div'), canTreatVimeo = site && site.isVersionGreaterEqualThan(['3.3.4', '3.4']); diff --git a/src/providers/utils/text.ts b/src/providers/utils/text.ts index 9bef61b2f..5bdb70ca4 100644 --- a/src/providers/utils/text.ts +++ b/src/providers/utils/text.ts @@ -396,9 +396,10 @@ export class CoreTextUtilsProvider { * @param {boolean} [clean] Whether HTML tags should be removed. * @param {boolean} [singleLine] Whether new lines should be removed. Only valid if clean is true. * @param {number} [shortenLength] Number of characters to shorten the text. + * @param {number} [highlight] Text to highlight. * @return {Promise} Promise resolved with the formatted text. */ - formatText(text: string, clean?: boolean, singleLine?: boolean, shortenLength?: number): Promise { + formatText(text: string, clean?: boolean, singleLine?: boolean, shortenLength?: number, highlight?: string): Promise { return this.treatMultilangTags(text).then((formatted) => { if (clean) { formatted = this.cleanTags(formatted, singleLine); @@ -406,6 +407,9 @@ export class CoreTextUtilsProvider { if (shortenLength > 0) { formatted = this.shortenText(formatted, shortenLength); } + if (highlight) { + formatted = this.highlightText(formatted, highlight); + } return formatted; }); @@ -452,6 +456,25 @@ export class CoreTextUtilsProvider { return /<[a-z][\s\S]*>/i.test(text); } + /** + * Highlight all occurrences of a certain text inside another text. It will add some HTML code to highlight it. + * + * @param {string} text Full text. + * @param {string} searchText Text to search and highlight. + * @return {string} Highlighted text. + */ + highlightText(text: string, searchText: string): string { + if (!text || typeof text != 'string') { + return ''; + } else if (!searchText) { + return text; + } + + const regex = new RegExp('(' + searchText + ')', 'gi'); + + return text.replace(regex, '$1'); + } + /** * Check if HTML content is blank. * From df20087b92313a34f943cc3437f0ba1a82cb1206 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 5 Apr 2019 15:36:52 +0200 Subject: [PATCH 097/263] MOBILE-2963 messages: Expand option with unread messages first --- .../group-conversations.ts | 63 +++++++++---------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/src/addon/messages/pages/group-conversations/group-conversations.ts b/src/addon/messages/pages/group-conversations/group-conversations.ts index 94af243d1..92b81f75e 100644 --- a/src/addon/messages/pages/group-conversations/group-conversations.ts +++ b/src/addon/messages/pages/group-conversations/group-conversations.ts @@ -266,7 +266,12 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { const promises = []; promises.push(this.fetchConversationCounts()); - promises.push(this.messagesProvider.getContactRequestsCount(this.siteId)); // View updated by the event observer. + + // View updated by the events observers. + promises.push(this.messagesProvider.getContactRequestsCount(this.siteId)); + if (refreshUnreadCounts) { + promises.push(this.messagesProvider.refreshUnreadConversationCounts(this.siteId)); + } return Promise.all(promises).then(() => { if (typeof this.favourites.expanded == 'undefined') { @@ -276,9 +281,9 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { // We don't know which option it belongs to, so we need to fetch the data for all of them. const promises = []; - promises.push(this.fetchDataForOption(this.favourites, false, refreshUnreadCounts)); - promises.push(this.fetchDataForOption(this.group, false, refreshUnreadCounts)); - promises.push(this.fetchDataForOption(this.individual, false, refreshUnreadCounts)); + promises.push(this.fetchDataForOption(this.favourites, false)); + promises.push(this.fetchDataForOption(this.group, false)); + promises.push(this.fetchDataForOption(this.individual, false)); return Promise.all(promises).then(() => { // All conversations have been loaded, find the one we need to load and expand its option. @@ -286,13 +291,13 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { if (conversation) { const option = this.getConversationOption(conversation); - return this.expandOption(option, refreshUnreadCounts); + return this.expandOption(option); } else { // Conversation not found, just open the default option. this.calculateExpandedStatus(); // Now load the data for the expanded option. - return this.fetchDataForExpandedOption(refreshUnreadCounts); + return this.fetchDataForExpandedOption(); } }); } @@ -302,7 +307,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { } // Now load the data for the expanded option. - return this.fetchDataForExpandedOption(refreshUnreadCounts); + return this.fetchDataForExpandedOption(); }).catch((error) => { this.domUtils.showErrorModalDefault(error, 'addon.messages.errorwhileretrievingdiscussions', true); }).finally(() => { @@ -314,9 +319,9 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { * Calculate which option should be expanded initially. */ protected calculateExpandedStatus(): void { - this.favourites.expanded = this.favourites.count != 0; - this.group.expanded = this.favourites.count == 0 && this.group.count != 0; - this.individual.expanded = this.favourites.count == 0 && this.group.count == 0; + this.favourites.expanded = this.favourites.count != 0 && !this.group.unread && !this.individual.unread; + this.group.expanded = !this.favourites.expanded && this.group.count != 0 && !this.individual.unread; + this.individual.expanded = !this.favourites.expanded && !this.group.expanded; this.loadCurrentListElement(); } @@ -324,26 +329,16 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { /** * Fetch data for the expanded option. * - * @param {booleam} [refreshUnreadCounts=true] Whether to refresh unread counts. * @return {Promise} Promise resolved when done. */ - protected fetchDataForExpandedOption(refreshUnreadCounts: boolean = true): Promise { + protected fetchDataForExpandedOption(): Promise { const expandedOption = this.getExpandedOption(); if (expandedOption) { - return this.fetchDataForOption(expandedOption, false, refreshUnreadCounts); - } else { - // All options are collapsed, update the counts. - const promises = []; - - promises.push(this.fetchConversationCounts()); - if (refreshUnreadCounts) { - // View updated by event observer. - promises.push(this.messagesProvider.refreshUnreadConversationCounts(this.siteId)); - } - - return Promise.all(promises); + return this.fetchDataForOption(expandedOption, false); } + + return Promise.resolve(); } /** @@ -351,10 +346,10 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { * * @param {any} option The option to fetch data for. * @param {boolean} [loadingMore} Whether we are loading more data or just the first ones. - * @param {booleam} [refreshUnreadCounts=true] Whether to refresh unread counts. + * @param {booleam} [getCounts] Whether to get counts data. * @return {Promise} Promise resolved when done. */ - fetchDataForOption(option: any, loadingMore?: boolean, refreshUnreadCounts: boolean = true): Promise { + fetchDataForOption(option: any, loadingMore?: boolean, getCounts?: boolean): Promise { option.loadMoreError = false; const limitFrom = loadingMore ? option.conversations.length : 0, @@ -375,12 +370,11 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { promises.push(this.messagesOffline.getAllMessages().then((data) => { offlineMessages = data; })); + } + if (getCounts) { promises.push(this.fetchConversationCounts()); - if (refreshUnreadCounts) { - // View updated by the event observer. - promises.push(this.messagesProvider.refreshUnreadConversationCounts(this.siteId)); - } + promises.push(this.messagesProvider.refreshUnreadConversationCounts(this.siteId)); } return Promise.all(promises).then(() => { @@ -650,7 +644,8 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { option.expanded = false; this.loadCurrentListElement(); } else { - this.expandOption(option).catch((error) => { + // Pass getCounts=true to update the counts everytime the user expands an option. + this.expandOption(option, true).catch((error) => { this.domUtils.showErrorModalDefault(error, 'addon.messages.errorwhileretrievingdiscussions', true); }); } @@ -660,10 +655,10 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { * Expand a certain option. * * @param {any} option The option to expand. - * @param {booleam} [refreshUnreadCounts=true] Whether to refresh unread counts. + * @param {booleam} [getCounts] Whether to get counts data. * @return {Promise} Promise resolved when done. */ - protected expandOption(option: any, refreshUnreadCounts: boolean = true): Promise { + protected expandOption(option: any, getCounts?: boolean): Promise { // Collapse all and expand the right one. this.favourites.expanded = false; this.group.expanded = false; @@ -672,7 +667,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { option.expanded = true; option.loading = true; - return this.fetchDataForOption(option, false, refreshUnreadCounts).then(() => { + return this.fetchDataForOption(option, false, getCounts).then(() => { this.loadCurrentListElement(); }).catch((error) => { option.expanded = false; From a43f0bb5fc48860c504cf577d5c55ea9ac73b12a Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 26 Apr 2019 09:02:17 +0200 Subject: [PATCH 098/263] MOBILE-2963 message: Improve accessibility in messaging --- scripts/langindex.json | 2 ++ src/addon/messages/lang/en.json | 2 ++ src/addon/messages/pages/discussion/discussion.html | 8 ++++---- .../pages/group-conversations/group-conversations.html | 2 +- src/assets/lang/en.json | 2 ++ src/components/context-menu/context-menu.ts | 6 +++--- .../context-menu/core-context-menu-popover.html | 2 +- 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index a0eddf6a0..83f7a1edb 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -177,6 +177,7 @@ "addon.messages.contactname": "local_moodlemobileapp", "addon.messages.contactrequestsent": "message", "addon.messages.contacts": "message", + "addon.messages.conversationactions": "message", "addon.messages.decline": "message", "addon.messages.deleteallconfirm": "message", "addon.messages.deleteallselfconfirm": "message", @@ -198,6 +199,7 @@ "addon.messages.messagepreferences": "message", "addon.messages.messages": "message", "addon.messages.muteconversation": "message", + "addon.messages.mutedconversation": "message", "addon.messages.newmessage": "message", "addon.messages.newmessages": "local_moodlemobileapp", "addon.messages.nocontactrequests": "message", diff --git a/src/addon/messages/lang/en.json b/src/addon/messages/lang/en.json index 4767ed3ba..3a298fdff 100644 --- a/src/addon/messages/lang/en.json +++ b/src/addon/messages/lang/en.json @@ -16,6 +16,7 @@ "contactname": "Contact name", "contactrequestsent": "Contact request sent", "contacts": "Contacts", + "conversationactions": "Conversation actions menu", "decline": "Decline", "deleteallconfirm": "Are you sure you would like to delete this entire conversation? This will not delete it for other conversation participants.", "deleteallselfconfirm": "Are you sure you would like to delete this entire personal conversation?", @@ -37,6 +38,7 @@ "messagepreferences": "Message preferences", "messages": "Messages", "muteconversation": "Mute", + "mutedconversation": "Muted conversation", "newmessage": "New message", "newmessages": "New messages", "nocontactrequests": "No contact requests", diff --git a/src/addon/messages/pages/discussion/discussion.html b/src/addon/messages/pages/discussion/discussion.html index fb5602317..1d0566463 100644 --- a/src/addon/messages/pages/discussion/discussion.html +++ b/src/addon/messages/pages/discussion/discussion.html @@ -1,16 +1,16 @@ - + - - + + - + diff --git a/src/addon/messages/pages/group-conversations/group-conversations.html b/src/addon/messages/pages/group-conversations/group-conversations.html index ec74e6a41..c32cdec85 100644 --- a/src/addon/messages/pages/group-conversations/group-conversations.html +++ b/src/addon/messages/pages/group-conversations/group-conversations.html @@ -101,7 +101,7 @@

- +

{{ conversation.unreadcount }} diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index c8a128106..e3028b828 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -177,6 +177,7 @@ "addon.messages.contactname": "Contact name", "addon.messages.contactrequestsent": "Contact request sent", "addon.messages.contacts": "Contacts", + "addon.messages.conversationactions": "Conversation actions menu", "addon.messages.decline": "Decline", "addon.messages.deleteallconfirm": "Are you sure you would like to delete this entire conversation? This will not delete it for other conversation participants.", "addon.messages.deleteallselfconfirm": "Are you sure you would like to delete this entire personal conversation?", @@ -198,6 +199,7 @@ "addon.messages.messagepreferences": "Message preferences", "addon.messages.messages": "Messages", "addon.messages.muteconversation": "Mute", + "addon.messages.mutedconversation": "Muted conversation", "addon.messages.newmessage": "New message", "addon.messages.newmessages": "New messages", "addon.messages.nocontactrequests": "No contact requests", diff --git a/src/components/context-menu/context-menu.ts b/src/components/context-menu/context-menu.ts index 1f674eebd..ff6413b67 100644 --- a/src/components/context-menu/context-menu.ts +++ b/src/components/context-menu/context-menu.ts @@ -31,10 +31,10 @@ import { Subject } from 'rxjs'; }) export class CoreContextMenuComponent implements OnInit, OnDestroy { @Input() icon?: string; // Icon to be shown on the navigation bar. Default: Kebab menu icon. - @Input() title?: string; // Aria label and text to be shown on the top of the popover. + @Input() title?: string; // Text to be shown on the top of the popover. + @Input('aria-label') ariaLabel?: string; // Aria label to be shown on the top of the popover. hideMenu = true; // It will be unhidden when items are added. - ariaLabel: string; expanded = false; protected items: CoreContextMenuItemComponent[] = []; protected itemsMovedToParent: CoreContextMenuItemComponent[] = []; @@ -70,7 +70,7 @@ export class CoreContextMenuComponent implements OnInit, OnDestroy { */ ngOnInit(): void { this.icon = this.icon || 'more'; - this.ariaLabel = this.title || this.translate.instant('core.info'); + this.ariaLabel = this.ariaLabel || this.title || this.translate.instant('core.info'); } /** diff --git a/src/components/context-menu/core-context-menu-popover.html b/src/components/context-menu/core-context-menu-popover.html index 18905549d..d785687be 100644 --- a/src/components/context-menu/core-context-menu-popover.html +++ b/src/components/context-menu/core-context-menu-popover.html @@ -1,6 +1,6 @@ {{title}} - + From 758ecfd7a9246d31eeec162618006e09c25a1b56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 26 Apr 2019 17:36:27 +0200 Subject: [PATCH 099/263] MOBILE-2963 messages: Add message tails to match web --- .../messages/pages/discussion/discussion.html | 3 ++- .../messages/pages/discussion/discussion.scss | 24 +++++++++++++++++++ .../messages/pages/discussion/discussion.ts | 12 ++++++++++ src/app/app.scss | 2 +- src/theme/variables.scss | 2 ++ 5 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/addon/messages/pages/discussion/discussion.html b/src/addon/messages/pages/discussion/discussion.html index 1d0566463..74dba5553 100644 --- a/src/addon/messages/pages/discussion/discussion.html +++ b/src/addon/messages/pages/discussion/discussion.html @@ -47,7 +47,7 @@ -

+

{{ members[message.useridfrom].fullname }}
@@ -64,6 +64,7 @@ +
diff --git a/src/addon/messages/pages/discussion/discussion.scss b/src/addon/messages/pages/discussion/discussion.scss index b09449b24..2445c99e4 100644 --- a/src/addon/messages/pages/discussion/discussion.scss +++ b/src/addon/messages/pages/discussion/discussion.scss @@ -47,6 +47,9 @@ ion-app.app-root page-addon-messages-discussion { min-height: 0; position: relative; @include core-transition(width); + // This is needed to display bubble tails. + overflow: visible; + contain: none; core-format-text > p:only-child { display: inline; @@ -127,6 +130,15 @@ ion-app.app-root page-addon-messages-discussion { line-height: initial; } } + + .tail { + content: ''; + width: 0; + height: 0; + border: 0.5rem solid transparent; + position: absolute; + touch-action: none; + } } .addon-message.addon-message-mine + .addon-message-no-user.addon-message-mine, @@ -158,6 +170,18 @@ ion-app.app-root page-addon-messages-discussion { height: 16px; } } + + .tail { + @include position(null, 0, 0, null); + @include margin-horizontal(null, -0.5rem); + border-bottom-color: $item-message-mine-bg; + } + } + + .addon-message-not-mine .tail { + @include position(null, null, 0, 0); + @include margin-horizontal(-0.5rem, null); + border-bottom-color: $item-message-bg; } .toolbar-title { diff --git a/src/addon/messages/pages/discussion/discussion.ts b/src/addon/messages/pages/discussion/discussion.ts index dae1a0f12..3fecd7867 100644 --- a/src/addon/messages/pages/discussion/discussion.ts +++ b/src/addon/messages/pages/discussion/discussion.ts @@ -384,6 +384,7 @@ export class AddonMessagesDiscussionPage implements OnDestroy { this.messages.forEach((message, index): any => { message.showDate = this.showDate(message, this.messages[index - 1]); message.showUserData = this.showUserData(message, this.messages[index - 1]); + message.showTail = this.showTail(message, this.messages[index + 1]); }); // Call resize to recalculate the dimensions. @@ -1046,6 +1047,17 @@ export class AddonMessagesDiscussionPage implements OnDestroy { (!prevMessage || prevMessage.useridfrom != message.useridfrom || message.showDate); } + /** + * Check if a css tail should be shown. + * + * @param {any} message Current message where to show the user info. + * @param {any} [nextMessage] Next message. + * @return {boolean} Whether user data should be shown. + */ + showTail(message: any, nextMessage?: any): boolean { + return !nextMessage || nextMessage.useridfrom != message.useridfrom || nextMessage.showDate; + } + /** * Toggles delete state. */ diff --git a/src/app/app.scss b/src/app/app.scss index 9c1b3803b..2782088e0 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -1052,7 +1052,7 @@ ion-modal, // Highlight text. .matchtext { - background-color: lighten($blue, 40%); + background-color: $core-text-hightlight-background-color; } // Styles for desktop apps only. diff --git a/src/theme/variables.scss b/src/theme/variables.scss index 80a7b6d61..3cedb3059 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -263,6 +263,8 @@ $core-rte-min-height: 80px; $core-toolbar-button-image-width: 32px; +$core-text-hightlight-background-color: lighten($blue, 40%) !default; + // Timer variables. $core-timer-warn-color: $red !default; $core-timer-iterations: 15 !default; From 99809afbad527e7c1fa6f5c1aeaed48e0ea5bd76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 24 Apr 2019 14:08:09 +0200 Subject: [PATCH 100/263] MOBILE-2895 course: Show modules downloaded status --- scripts/langindex.json | 1 + src/assets/lang/en.json | 1 + src/components/components.module.ts | 3 + .../core-download-refresh.html | 17 ++++++ .../download-refresh/download-refresh.scss | 16 ++++++ .../download-refresh/download-refresh.ts | 55 +++++++++++++++++++ .../components/format/core-course-format.html | 12 +--- src/core/course/components/format/format.ts | 9 +-- .../module-completion/module-completion.scss | 2 + .../components/module/core-course-module.html | 13 +---- src/core/course/components/module/module.scss | 7 ++- src/core/course/components/module/module.ts | 20 +++---- src/core/course/providers/helper.ts | 18 +++--- src/lang/en.json | 1 + 14 files changed, 120 insertions(+), 55 deletions(-) create mode 100644 src/components/download-refresh/core-download-refresh.html create mode 100644 src/components/download-refresh/download-refresh.scss create mode 100644 src/components/download-refresh/download-refresh.ts diff --git a/scripts/langindex.json b/scripts/langindex.json index 7d6305fb2..59804cc25 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -1329,6 +1329,7 @@ "core.dismiss": "local_moodlemobileapp", "core.done": "survey", "core.download": "moodle", + "core.downloaded": "local_moodlemobileapp", "core.downloading": "local_moodlemobileapp", "core.edit": "moodle", "core.emptysplit": "local_moodlemobileapp", diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 9142565fb..c9ab4d688 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -1329,6 +1329,7 @@ "core.dismiss": "Dismiss", "core.done": "Done", "core.download": "Download", + "core.downloaded": "Downloaded", "core.downloading": "Downloading", "core.edit": "Edit", "core.emptysplit": "This page will appear blank if the left panel is empty or is loading.", diff --git a/src/components/components.module.ts b/src/components/components.module.ts index e72475548..434b1213d 100644 --- a/src/components/components.module.ts +++ b/src/components/components.module.ts @@ -34,6 +34,7 @@ import { CoreContextMenuPopoverComponent } from './context-menu/context-menu-pop import { CoreCoursePickerMenuPopoverComponent } from './course-picker-menu/course-picker-menu-popover'; import { CoreChartComponent } from './chart/chart'; import { CoreChronoComponent } from './chrono/chrono'; +import { CoreDownloadRefreshComponent } from './download-refresh/download-refresh'; import { CoreLocalFileComponent } from './local-file/local-file'; import { CoreSitePickerComponent } from './site-picker/site-picker'; import { CoreTabsComponent } from './tabs/tabs'; @@ -72,6 +73,7 @@ import { CoreStyleComponent } from './style/style'; CoreCoursePickerMenuPopoverComponent, CoreChartComponent, CoreChronoComponent, + CoreDownloadRefreshComponent, CoreLocalFileComponent, CoreSitePickerComponent, CoreTabsComponent, @@ -118,6 +120,7 @@ import { CoreStyleComponent } from './style/style'; CoreContextMenuItemComponent, CoreChartComponent, CoreChronoComponent, + CoreDownloadRefreshComponent, CoreLocalFileComponent, CoreSitePickerComponent, CoreTabsComponent, diff --git a/src/components/download-refresh/core-download-refresh.html b/src/components/download-refresh/core-download-refresh.html new file mode 100644 index 000000000..c9b23a15a --- /dev/null +++ b/src/components/download-refresh/core-download-refresh.html @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/download-refresh/download-refresh.scss b/src/components/download-refresh/download-refresh.scss new file mode 100644 index 000000000..52ed6dbf1 --- /dev/null +++ b/src/components/download-refresh/download-refresh.scss @@ -0,0 +1,16 @@ +ion-app.app-root core-download-refresh { + button, ion-icon { + cursor: pointer; + pointer-events: auto; + text-align: center; + } + + .core-icon-downloaded { + font-size: 1.8em; + } + + .spinner { + /*@include position(null, 13px, null, null); + position: absolute;*/ + } +} diff --git a/src/components/download-refresh/download-refresh.ts b/src/components/download-refresh/download-refresh.ts new file mode 100644 index 000000000..87d964c9b --- /dev/null +++ b/src/components/download-refresh/download-refresh.ts @@ -0,0 +1,55 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Component, Input, Output, EventEmitter } from '@angular/core'; +import { CoreConstants } from '@core/constants'; + +/** + * Component to show a download button with refresh option, the spinner and the status of it. + * + * Usage: + * + */ +@Component({ + selector: 'core-download-refresh', + templateUrl: 'core-download-refresh.html' +}) +export class CoreDownloadRefreshComponent { + @Input() status: string; // Download status. + @Input() enabled = false; // Whether the download is enabled. + @Input() loading = true; // Force loading status when is not downloading. + @Input() canTrustDownload = false; // If false, refresh will be shown if downloaded. + @Output() action: EventEmitter; // Will emit an event when the item clicked. + + statusDownloaded = CoreConstants.DOWNLOADED; + statusNotDownloaded = CoreConstants.NOT_DOWNLOADED; + statusOutdated = CoreConstants.OUTDATED; + statusDownloading = CoreConstants.DOWNLOADING; + + constructor() { + this.action = new EventEmitter(); + } + + /** + * Download clicked. + * + * @param {Event} e Click event. + * @param {boolean} refresh Whether it's refreshing. + */ + download(e: Event, refresh: boolean): void { + e.preventDefault(); + e.stopPropagation(); + this.action.emit(refresh); + } +} diff --git a/src/core/course/components/format/core-course-format.html b/src/core/course/components/format/core-course-format.html index 2600ed8fc..9ba99a96c 100644 --- a/src/core/course/components/format/core-course-format.html +++ b/src/core/course/components/format/core-course-format.html @@ -90,17 +90,9 @@
- - - - {{section.count}} / {{section.total}} - - + +
diff --git a/src/core/course/components/format/format.ts b/src/core/course/components/format/format.ts index 8c5bdbffe..1c87d2aed 100644 --- a/src/core/course/components/format/format.ts +++ b/src/core/course/components/format/format.ts @@ -119,7 +119,7 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy { this.courseHelper.calculateSectionStatus(section, this.course.id, false).then(() => { if (section.isDownloading && !prefetchDelegate.isBeingDownloaded(downloadId)) { // All the modules are now downloading, set a download all promise. - this.prefetch(section, false); + this.prefetch(section); } }); } @@ -339,13 +339,10 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy { /** * Confirm and prefetch a section. If the section is "all sections", prefetch all the sections. * - * @param {Event} e Click event. * @param {any} section Section to download. + * @param {boolean} refresh Refresh clicked (not used). */ - prefetch(e: Event, section: any): void { - e.preventDefault(); - e.stopPropagation(); - + prefetch(section: any, refresh: boolean = false): void { section.isCalculating = true; this.courseHelper.confirmDownloadSizeSection(this.course.id, section, this.sections).then(() => { this.prefetchSection(section, true); diff --git a/src/core/course/components/module-completion/module-completion.scss b/src/core/course/components/module-completion/module-completion.scss index 95674dc1c..23a677924 100644 --- a/src/core/course/components/module-completion/module-completion.scss +++ b/src/core/course/components/module-completion/module-completion.scss @@ -1,4 +1,6 @@ ion-app.app-root core-course-module-completion a { + display: block; + img { padding: 5px; width: 30px; diff --git a/src/core/course/components/module/core-course-module.html b/src/core/course/components/module/core-course-module.html index af880f447..6958c4dca 100644 --- a/src/core/course/components/module/core-course-module.html +++ b/src/core/course/components/module/core-course-module.html @@ -10,23 +10,12 @@
- - - - - + - - -

diff --git a/src/core/course/components/module/module.scss b/src/core/course/components/module/module.scss index 2541dd63a..2efad78fd 100644 --- a/src/core/course/components/module/module.scss +++ b/src/core/course/components/module/module.scss @@ -36,6 +36,8 @@ ion-app.app-root core-course-module { flex-flow: row; align-items: center; z-index: 1; + justify-content: space-around; + align-content: center; } .core-module-buttons core-course-module-completion, @@ -44,9 +46,8 @@ ion-app.app-root core-course-module { pointer-events: auto; } - .core-module-buttons-more .spinner { - @include position(null, 13px, null, null); - position: absolute; + .core-module-buttons core-course-module-completion { + text-align: center; } } diff --git a/src/core/course/components/module/module.ts b/src/core/course/components/module/module.ts index ed1c7bbf4..b4d8cba41 100644 --- a/src/core/course/components/module/module.ts +++ b/src/core/course/components/module/module.ts @@ -21,7 +21,6 @@ import { CoreCourseHelperProvider } from '../../providers/helper'; import { CoreCourseProvider } from '../../providers/course'; import { CoreCourseModuleHandlerButton } from '../../providers/module-delegate'; import { CoreCourseModulePrefetchDelegate, CoreCourseModulePrefetchHandler } from '../../providers/module-prefetch-delegate'; -import { CoreConstants } from '../../../constants'; /** * Component to display a module entry in a list of modules. @@ -52,9 +51,9 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { } @Output() completionChanged?: EventEmitter; // Will emit an event when the module completion changes. - showDownload: boolean; // Whether to display the download button. - showRefresh: boolean; // Whether to display the refresh button. - spinner: boolean; // Whether to display a spinner. + downloadStatus: string; + canCheckUpdates: boolean; + spinner: boolean; // Whether to display a loading spinner. downloadEnabled: boolean; // Whether the download of sections and modules is enabled. protected prefetchHandler: CoreCourseModulePrefetchHandler; @@ -81,6 +80,7 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { if (this.module.handlerData.showDownloadButton) { // Listen for changes on this module status, even if download isn't enabled. this.prefetchHandler = this.prefetchDelegate.getPrefetchHandlerFor(this.module); + this.canCheckUpdates = this.prefetchDelegate.canCheckUpdates(); this.statusObserver = this.eventsProvider.on(CoreEventsProvider.PACKAGE_STATUS_CHANGED, (data) => { if (data.componentId === this.module.id && this.prefetchHandler && @@ -135,13 +135,9 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { /** * Download the module. * - * @param {Event} event Click event. * @param {boolean} refresh Whether it's refreshing. */ - download(event: Event, refresh: boolean): void { - event.preventDefault(); - event.stopPropagation(); - + download(refresh: boolean): void { if (!this.prefetchHandler) { return; } @@ -168,10 +164,8 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { */ protected showStatus(status: string): void { if (status) { - this.spinner = status === CoreConstants.DOWNLOADING; - this.showDownload = status === CoreConstants.NOT_DOWNLOADED; - this.showRefresh = status === CoreConstants.OUTDATED || - (!this.prefetchDelegate.canCheckUpdates() && status === CoreConstants.DOWNLOADED); + this.spinner = false; + this.downloadStatus = status; if (this.module.handlerData.updateStatus) { this.module.handlerData.updateStatus(status); diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index 90df6282a..d1eb53fe5 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -197,11 +197,9 @@ export class CoreCourseHelperProvider { result.status = CoreConstants.DOWNLOADING; } + section.downloadStatus = result.status; + section.canCheckUpdates = this.prefetchDelegate.canCheckUpdates(); // Set this section data. - section.showDownload = result.status === CoreConstants.NOT_DOWNLOADED; - section.showRefresh = result.status === CoreConstants.OUTDATED || - (!this.prefetchDelegate.canCheckUpdates() && result.status === CoreConstants.DOWNLOADED); - if (result.status !== CoreConstants.DOWNLOADING || !this.prefetchDelegate.isBeingDownloaded(section.id)) { section.isDownloading = false; section.total = 0; @@ -250,9 +248,8 @@ export class CoreCourseHelperProvider { return Promise.all(promises).then(() => { if (allSectionsSection) { // Set "All sections" data. - allSectionsSection.showDownload = allSectionsStatus === CoreConstants.NOT_DOWNLOADED; - allSectionsSection.showRefresh = allSectionsStatus === CoreConstants.OUTDATED || - (!this.prefetchDelegate.canCheckUpdates() && allSectionsStatus === CoreConstants.DOWNLOADED); + allSectionsSection.downloadStatus = allSectionsStatus; + allSectionsSection.canCheckUpdates = this.prefetchDelegate.canCheckUpdates(); allSectionsSection.isDownloading = allSectionsStatus === CoreConstants.DOWNLOADING; } }).finally(() => { @@ -981,7 +978,7 @@ export class CoreCourseHelperProvider { */ getCourseStatusIconAndTitleFromStatus(status: string): {icon: string, title: string} { if (status == CoreConstants.DOWNLOADED) { - // Always show refresh icon, we cannot knew if there's anything new in course options. + // Always show refresh icon, we cannot know if there's anything new in course options. return { icon: 'refresh', title: 'core.course.refreshcourse' @@ -1330,9 +1327,8 @@ export class CoreCourseHelperProvider { return this.utils.allPromises(promises).then(() => { // Set "All sections" data. - section.showDownload = allSectionsStatus === CoreConstants.NOT_DOWNLOADED; - section.showRefresh = allSectionsStatus === CoreConstants.OUTDATED || - (!this.prefetchDelegate.canCheckUpdates() && allSectionsStatus === CoreConstants.DOWNLOADED); + section.downloadStatus = allSectionsStatus; + section.canCheckUpdates = this.prefetchDelegate.canCheckUpdates(); section.isDownloading = allSectionsStatus === CoreConstants.DOWNLOADING; }).finally(() => { section.isDownloading = false; diff --git a/src/lang/en.json b/src/lang/en.json index 27e5e170f..d1e2a0c96 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -72,6 +72,7 @@ "dismiss": "Dismiss", "done": "Done", "download": "Download", + "downloaded": "Downloaded", "downloading": "Downloading", "edit": "Edit", "emptysplit": "This page will appear blank if the left panel is empty or is loading.", From 5b5dcd8b79d74b8aa7f78078926b615c1602fbcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 24 Apr 2019 14:11:43 +0200 Subject: [PATCH 101/263] MOBILE-2895 file: Show download status on files --- .../download-refresh/download-refresh.scss | 9 +++------ src/components/file/core-file.html | 7 +++---- src/components/file/file.scss | 15 ++++++++++++++ src/components/file/file.ts | 20 ++++++++----------- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/components/download-refresh/download-refresh.scss b/src/components/download-refresh/download-refresh.scss index 52ed6dbf1..46381a154 100644 --- a/src/components/download-refresh/download-refresh.scss +++ b/src/components/download-refresh/download-refresh.scss @@ -1,16 +1,13 @@ ion-app.app-root core-download-refresh { + font-size: 1.4rem; + button, ion-icon { cursor: pointer; pointer-events: auto; text-align: center; } - .core-icon-downloaded { + ion-icon, .core-icon-downloaded { font-size: 1.8em; } - - .spinner { - /*@include position(null, 13px, null, null); - position: absolute;*/ - } } diff --git a/src/components/file/core-file.html b/src/components/file/core-file.html index 1ae020dfa..071deec11 100644 --- a/src/components/file/core-file.html +++ b/src/components/file/core-file.html @@ -3,13 +3,12 @@

{{fileName}}

{{ fileSizeReadable }}

{{ timemodified * 1000 | coreFormatDate }}

+
- + +
-
diff --git a/src/components/file/file.scss b/src/components/file/file.scss index a39dcde10..227c565b8 100644 --- a/src/components/file/file.scss +++ b/src/components/file/file.scss @@ -7,6 +7,10 @@ ion-app.app-root { .card-ios core-file + core-file > .item-ios.item-block > .item-inner, core-file + core-file > .item-ios.item-block > .item-inner { border-top: $hairlines-width solid $list-ios-border-color; + .buttons { + min-height: 53px; + min-width: 58px; + } } .card-wp core-file + core-file > .item-wp.item-block > .item-inner, @@ -16,5 +20,16 @@ ion-app.app-root { core-file > .item.item-block > .item-inner { border-bottom: 0; + @include padding(null, 0, null, null); + .buttons { + display: flex; + flex-flow: row; + align-items: center; + z-index: 1; + justify-content: space-around; + align-content: center; + min-height: 52px; + min-width: 53px; + } } } \ No newline at end of file diff --git a/src/components/file/file.ts b/src/components/file/file.ts index 53fb53aa6..22d0c98af 100644 --- a/src/components/file/file.ts +++ b/src/components/file/file.ts @@ -44,9 +44,7 @@ export class CoreFileComponent implements OnInit, OnDestroy { @Input() showTime?: boolean | string = true; // Whether show file time modified. @Output() onDelete?: EventEmitter; // Will notify when the delete button is clicked. - isDownloaded: boolean; isDownloading: boolean; - showDownload: boolean; fileIcon: string; fileName: string; fileSizeReadable: string; @@ -110,13 +108,10 @@ export class CoreFileComponent implements OnInit, OnDestroy { */ protected calculateState(): Promise { return this.filepoolProvider.getFileStateByUrl(this.siteId, this.fileUrl, this.timemodified).then((state) => { - const canDownload = this.sitesProvider.getCurrentSite().canDownloadFiles(); + this.canDownload = this.sitesProvider.getCurrentSite().canDownloadFiles(); this.state = state; - this.isDownloaded = state === CoreConstants.DOWNLOADED || state === CoreConstants.OUTDATED; - this.isDownloading = canDownload && state === CoreConstants.DOWNLOADING; - this.showDownload = canDownload && (state === CoreConstants.NOT_DOWNLOADED || state === CoreConstants.OUTDATED || - (this.alwaysDownload && state === CoreConstants.DOWNLOADED)); + this.isDownloading = this.canDownload && state === CoreConstants.DOWNLOADING; }); } @@ -139,12 +134,12 @@ export class CoreFileComponent implements OnInit, OnDestroy { /** * Download a file and, optionally, open it afterwards. * - * @param {Event} e Click event. + * @param {Event} [e] Click event. * @param {boolean} openAfterDownload Whether the file should be opened after download. */ - download(e: Event, openAfterDownload: boolean): void { - e.preventDefault(); - e.stopPropagation(); + download(e?: Event, openAfterDownload: boolean = false): void { + e && e.preventDefault(); + e && e.stopPropagation(); let promise; @@ -168,7 +163,8 @@ export class CoreFileComponent implements OnInit, OnDestroy { return; } - if (!this.appProvider.isOnline() && (!openAfterDownload || (openAfterDownload && !this.isDownloaded))) { + if (!this.appProvider.isOnline() && (!openAfterDownload || (openAfterDownload && + !(this.state === CoreConstants.DOWNLOADED || this.state === CoreConstants.OUTDATED)))) { this.domUtils.showErrorModal('core.networkerrormsg', true); return; From 84c2986ec91ca3caeed47f48c3a75e9b202043d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 30 Apr 2019 12:15:00 +0200 Subject: [PATCH 102/263] MOBILE-2907 resource: Fix blank block warning --- src/addon/mod/resource/providers/helper.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/addon/mod/resource/providers/helper.ts b/src/addon/mod/resource/providers/helper.ts index 2d357c615..3b3f53d4d 100644 --- a/src/addon/mod/resource/providers/helper.ts +++ b/src/addon/mod/resource/providers/helper.ts @@ -115,6 +115,7 @@ export class AddonModResourceHelperProvider { isDisplayedEmbedded(module: any, display: number): boolean { if ((!module.contents.length && !module.contentsinfo) || !this.fileProvider.isAvailable() || (!this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7') && this.isNextcloudFile(module))) { + return false; } let ext; From 228943eb09d9f38a3350e27f7a3f5a7940902685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Mon, 15 Apr 2019 13:20:03 +0200 Subject: [PATCH 103/263] MOBILE-2956 notifications: Improve notifications info --- src/addon/notifications/pages/list/list.html | 15 ++++++++++----- src/addon/notifications/pages/list/list.scss | 5 +++++ .../notifications/providers/notifications.ts | 10 +++++++--- src/components/user-avatar/core-user-avatar.html | 1 + src/components/user-avatar/user-avatar.scss | 10 ++++++++++ src/components/user-avatar/user-avatar.ts | 1 + 6 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 src/addon/notifications/pages/list/list.scss diff --git a/src/addon/notifications/pages/list/list.html b/src/addon/notifications/pages/list/list.html index b931c6768..bd523d6ba 100644 --- a/src/addon/notifications/pages/list/list.html +++ b/src/addon/notifications/pages/list/list.html @@ -18,11 +18,16 @@
- - -

{{notification.userfromfullname}}

-
-

{{notification.timecreated | coreDateDayOrTime}}

+ + + +

+

+ {{notification.timecreated | coreDateDayOrTime}} + + +

+

diff --git a/src/addon/notifications/pages/list/list.scss b/src/addon/notifications/pages/list/list.scss new file mode 100644 index 000000000..122b8e4dc --- /dev/null +++ b/src/addon/notifications/pages/list/list.scss @@ -0,0 +1,5 @@ +page-addon-notifications-list .core-notification-icon { + width: 34px; + height: 34px; + margin: 10px !important; +} \ No newline at end of file diff --git a/src/addon/notifications/providers/notifications.ts b/src/addon/notifications/providers/notifications.ts index 64a19c10f..1cd0f9806 100644 --- a/src/addon/notifications/providers/notifications.ts +++ b/src/addon/notifications/providers/notifications.ts @@ -52,9 +52,12 @@ export class AddonNotificationsProvider { */ protected formatNotificationsData(notifications: any[], read?: boolean): Promise { const promises = notifications.map((notification) => { + // Set message to show. - if (notification.contexturl && notification.contexturl.indexOf('/mod/forum/') >= 0) { + if (notification.component && notification.component == 'mod_forum') { notification.mobiletext = notification.smallmessage; + } else if (notification.component && notification.component == 'moodle' && notification.name == 'insights') { + notification.mobiletext = notification.fullmessagehtml; } else { notification.mobiletext = notification.fullmessage; } @@ -73,10 +76,10 @@ export class AddonNotificationsProvider { // Try to set courseid the notification belongs to. if (notification.customdata && notification.customdata.courseid) { notification.courseid = notification.customdata.courseid; - } else { + } else if (!notification.courseid) { const cid = notification.fullmessagehtml.match(/course\/view\.php\?id=([^"]*)/); if (cid && cid[1]) { - notification.courseid = cid[1]; + notification.courseid = parseInt(cid[1], 10); } } @@ -84,6 +87,7 @@ export class AddonNotificationsProvider { // Try to get the profile picture of the user. return this.userProvider.getProfile(notification.useridfrom, notification.courseid, true).then((user) => { notification.profileimageurlfrom = user.profileimageurl; + notification.userfromfullname = user.fullname; return notification; }).catch(() => { diff --git a/src/components/user-avatar/core-user-avatar.html b/src/components/user-avatar/core-user-avatar.html index 15b7a35f9..21783350d 100644 --- a/src/components/user-avatar/core-user-avatar.html +++ b/src/components/user-avatar/core-user-avatar.html @@ -1,4 +1,5 @@ + \ No newline at end of file diff --git a/src/components/user-avatar/user-avatar.scss b/src/components/user-avatar/user-avatar.scss index 5962d9658..c5296a850 100644 --- a/src/components/user-avatar/user-avatar.scss +++ b/src/components/user-avatar/user-avatar.scss @@ -12,6 +12,16 @@ ion-avatar[core-user-avatar] { background-color: $core-online-color; } } + + .core-avatar-extra-icon { + margin: 0 !important; + border-radius: 0 !important; + background: none; + position: absolute; + @include position(null, -4px, -4px, null); + width: 24px; + height: 24px; + } } .toolbar ion-avatar[core-user-avatar] .contact-status { diff --git a/src/components/user-avatar/user-avatar.ts b/src/components/user-avatar/user-avatar.ts index a8e9d6bc7..298ace24a 100644 --- a/src/components/user-avatar/user-avatar.ts +++ b/src/components/user-avatar/user-avatar.ts @@ -38,6 +38,7 @@ export class CoreUserAvatarComponent implements OnInit, OnChanges, OnDestroy { @Input() protected userId?: number; // If provided or found it will be used to link the image to the profile. @Input() protected courseId?: number; @Input() checkOnline = false; // If want to check and show online status. + @Input() extraIcon?: string; // Extra icon to show near the avatar. avatarUrl?: string; From 4e98e6588b414a309d8f1c8939b8d6ff0fc2078c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 18 Apr 2019 12:26:00 +0200 Subject: [PATCH 104/263] MOBILE-2966 quiz: Clear answer in multiple choice single answer --- scripts/langindex.json | 1 + src/addon/mod/quiz/lang/en.json | 1 + .../multichoice/component/addon-qtype-multichoice.html | 3 +++ src/addon/qtype/multichoice/component/multichoice.ts | 7 +++++++ src/assets/lang/en.json | 1 + src/core/question/classes/base-question-component.ts | 4 ++++ 6 files changed, 17 insertions(+) diff --git a/scripts/langindex.json b/scripts/langindex.json index 7d6305fb2..2f31199ff 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -637,6 +637,7 @@ "addon.mod_quiz.attemptquiznow": "quiz", "addon.mod_quiz.attemptstate": "quiz", "addon.mod_quiz.cannotsubmitquizdueto": "local_moodlemobileapp", + "addon.mod_quiz.clearchoice": "qtype_multichoice", "addon.mod_quiz.comment": "quiz", "addon.mod_quiz.completedon": "quiz", "addon.mod_quiz.confirmclose": "quiz", diff --git a/src/addon/mod/quiz/lang/en.json b/src/addon/mod/quiz/lang/en.json index 18a699dda..c5be9879f 100644 --- a/src/addon/mod/quiz/lang/en.json +++ b/src/addon/mod/quiz/lang/en.json @@ -6,6 +6,7 @@ "attemptquiznow": "Attempt quiz now", "attemptstate": "State", "cannotsubmitquizdueto": "This quiz attempt cannot be submitted for the following reasons:", + "clearchoice": "Clear my choice", "comment": "Comment", "completedon": "Completed on", "confirmclose": "Once you submit, you will no longer be able to change your answers for this attempt.", diff --git a/src/addon/qtype/multichoice/component/addon-qtype-multichoice.html b/src/addon/qtype/multichoice/component/addon-qtype-multichoice.html index c41b376b9..56ac05cc3 100644 --- a/src/addon/qtype/multichoice/component/addon-qtype-multichoice.html +++ b/src/addon/qtype/multichoice/component/addon-qtype-multichoice.html @@ -32,6 +32,9 @@
+
+ +
diff --git a/src/addon/qtype/multichoice/component/multichoice.ts b/src/addon/qtype/multichoice/component/multichoice.ts index ec23880d5..e481c0f2f 100644 --- a/src/addon/qtype/multichoice/component/multichoice.ts +++ b/src/addon/qtype/multichoice/component/multichoice.ts @@ -35,4 +35,11 @@ export class AddonQtypeMultichoiceComponent extends CoreQuestionBaseComponent im ngOnInit(): void { this.initMultichoiceComponent(); } + + /** + * Clear selected choices. + */ + clear(): void { + this.question.singleChoiceModel = null; + } } diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 9142565fb..93ba504e9 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -637,6 +637,7 @@ "addon.mod_quiz.attemptquiznow": "Attempt quiz now", "addon.mod_quiz.attemptstate": "State", "addon.mod_quiz.cannotsubmitquizdueto": "This quiz attempt cannot be submitted for the following reasons:", + "addon.mod_quiz.clearchoice": "Clear my choice", "addon.mod_quiz.comment": "Comment", "addon.mod_quiz.completedon": "Completed on", "addon.mod_quiz.confirmclose": "Once you submit, you will no longer be able to change your answers for this attempt.", diff --git a/src/core/question/classes/base-question-component.ts b/src/core/question/classes/base-question-component.ts index 1a1dfafa0..c20654f32 100644 --- a/src/core/question/classes/base-question-component.ts +++ b/src/core/question/classes/base-question-component.ts @@ -448,6 +448,8 @@ export class CoreQuestionBaseComponent { this.question.options = []; + this.question.disabled = true; + for (const i in options) { const element = options[i], option: any = { @@ -461,6 +463,8 @@ export class CoreQuestionBaseComponent { this.question.optionsName = option.name; + this.question.disabled = this.question.disabled && element.disabled; + // Get the label with the question text. const label = questionEl.querySelector('label[for="' + option.id + '"]'); if (label) { From 0735453589a925002519b91c984128304df2f1a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 24 Apr 2019 09:49:10 +0200 Subject: [PATCH 105/263] MOBILE-2945 course: Display course custom fields in preview page --- .../pages/course-preview/course-preview.html | 10 ++++++++++ .../pages/course-preview/course-preview.scss | 4 ++++ .../pages/course-preview/course-preview.ts | 15 +++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/src/core/courses/pages/course-preview/course-preview.html b/src/core/courses/pages/course-preview/course-preview.html index 3dc0e4701..66a641bd1 100644 --- a/src/core/courses/pages/course-preview/course-preview.html +++ b/src/core/courses/pages/course-preview/course-preview.html @@ -32,6 +32,16 @@ + + + +
+ : + +
+
+
+
diff --git a/src/core/courses/pages/course-preview/course-preview.scss b/src/core/courses/pages/course-preview/course-preview.scss index 3994f5cc9..9b34624df 100644 --- a/src/core/courses/pages/course-preview/course-preview.scss +++ b/src/core/courses/pages/course-preview/course-preview.scss @@ -15,4 +15,8 @@ ion-app.app-root page-core-courses-course-preview { width: 100%; } } + .core-customfieldvalue core-format-text { + display: inline; + } + } diff --git a/src/core/courses/pages/course-preview/course-preview.ts b/src/core/courses/pages/course-preview/course-preview.ts index 51d2253e4..53fc896dd 100644 --- a/src/core/courses/pages/course-preview/course-preview.ts +++ b/src/core/courses/pages/course-preview/course-preview.ts @@ -233,6 +233,18 @@ export class CoreCoursesCoursePreviewPage implements OnDestroy { this.canAccessCourse = false; }); }); + }).finally(() => { + if (!this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7')) { + return this.coursesProvider.isGetCoursesByFieldAvailableInSite().then((available) => { + if (available) { + return this.coursesProvider.getCourseByField('id', this.course.id).then((course) => { + this.course.customfields = course.customfields; + }); + } + }).catch(() => { + // Ignore errors. + }); + } }).finally(() => { this.dataLoaded = true; }); @@ -386,6 +398,9 @@ export class CoreCoursesCoursePreviewPage implements OnDestroy { promises.push(this.coursesProvider.invalidateCourse(this.course.id)); promises.push(this.coursesProvider.invalidateCourseEnrolmentMethods(this.course.id)); promises.push(this.courseOptionsDelegate.clearAndInvalidateCoursesOptions(this.course.id)); + if (this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7')) { + promises.push(this.coursesProvider.invalidateCoursesByField('id', this.course.id)); + } if (this.guestInstanceId) { promises.push(this.coursesProvider.invalidateCourseGuestEnrolmentInfo(this.guestInstanceId)); } From e6a29aacd63f8ec944763f64477e4108852a3ef7 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Mon, 15 Apr 2019 13:18:45 +0200 Subject: [PATCH 106/263] MOBILE-2985 forum: Simplified form when adding discussions and replies --- scripts/langindex.json | 2 + .../components/post/addon-mod-forum-post.html | 19 +++++++--- src/addon/mod/forum/components/post/post.ts | 11 ++++++ src/addon/mod/forum/lang/en.json | 2 + .../pages/new-discussion/new-discussion.html | 37 +++++++++++-------- .../pages/new-discussion/new-discussion.ts | 18 ++++++++- src/assets/lang/en.json | 2 + 7 files changed, 69 insertions(+), 22 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index 74e8da77f..a0a90351c 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -479,6 +479,7 @@ "addon.mod_forum.addanewdiscussion": "forum", "addon.mod_forum.addanewquestion": "forum", "addon.mod_forum.addanewtopic": "forum", + "addon.mod_forum.advanced": "forum", "addon.mod_forum.cannotadddiscussion": "forum", "addon.mod_forum.cannotadddiscussionall": "forum", "addon.mod_forum.cannotcreatediscussion": "forum", @@ -508,6 +509,7 @@ "addon.mod_forum.refreshdiscussions": "local_moodlemobileapp", "addon.mod_forum.refreshposts": "local_moodlemobileapp", "addon.mod_forum.reply": "forum", + "addon.mod_forum.replyplaceholder": "forum", "addon.mod_forum.subject": "forum", "addon.mod_forum.unread": "forum", "addon.mod_forum.unreadpostsnumber": "forum", diff --git a/src/addon/mod/forum/components/post/addon-mod-forum-post.html b/src/addon/mod/forum/components/post/addon-mod-forum-post.html index 3c827084a..a1d0e09d9 100644 --- a/src/addon/mod/forum/components/post/addon-mod-forum-post.html +++ b/src/addon/mod/forum/components/post/addon-mod-forum-post.html @@ -45,13 +45,20 @@ {{ 'addon.mod_forum.message' | translate }} - - - - - {{ 'addon.mod_forum.privatereply' | translate }} - + + + + + {{ 'addon.mod_forum.advanced' | translate }} + + + + + {{ 'addon.mod_forum.privatereply' | translate }} + + + diff --git a/src/addon/mod/forum/components/post/post.ts b/src/addon/mod/forum/components/post/post.ts index 454d80ab5..92251ae5c 100644 --- a/src/addon/mod/forum/components/post/post.ts +++ b/src/addon/mod/forum/components/post/post.ts @@ -52,6 +52,7 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy { messageControl = new FormControl(); uniqueId: string; + advanced = false; // Display all form fields. protected syncId: string; @@ -119,6 +120,9 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy { this.originalData.message = this.replyData.message; this.originalData.files = this.replyData.files.slice(); this.originalData.isprivatereply = this.replyData.isprivatereply; + + // Show advanced fields if any of them has not the default value. + this.advanced = this.replyData.files.length > 0 || this.originalData.isprivatereply; } /** @@ -325,6 +329,13 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy { this.forumProvider.invalidateDiscussionPosts(this.discussionId); } + /** + * Show or hide advanced form fields. + */ + toggleAdvanced(): void { + this.advanced = !this.advanced; + } + /** * Component being destroyed. */ diff --git a/src/addon/mod/forum/lang/en.json b/src/addon/mod/forum/lang/en.json index c0ae05283..42fb302a5 100644 --- a/src/addon/mod/forum/lang/en.json +++ b/src/addon/mod/forum/lang/en.json @@ -2,6 +2,7 @@ "addanewdiscussion": "Add a new discussion topic", "addanewquestion": "Add a new question", "addanewtopic": "Add a new topic", + "advanced": "Advanced", "cannotadddiscussion": "Adding discussions to this forum requires group membership.", "cannotadddiscussionall": "You do not have permission to add a new discussion topic for all participants.", "cannotcreatediscussion": "Could not create new discussion", @@ -31,6 +32,7 @@ "refreshdiscussions": "Refresh discussions", "refreshposts": "Refresh posts", "reply": "Reply", + "replyplaceholder": "Write your reply...", "subject": "Subject", "unread": "Unread", "unreadpostsnumber": "{{$a}} unread posts" diff --git a/src/addon/mod/forum/pages/new-discussion/new-discussion.html b/src/addon/mod/forum/pages/new-discussion/new-discussion.html index 1003dd05a..236b8bcef 100644 --- a/src/addon/mod/forum/pages/new-discussion/new-discussion.html +++ b/src/addon/mod/forum/pages/new-discussion/new-discussion.html @@ -21,21 +21,28 @@ {{ 'addon.mod_forum.message' | translate }} - - {{ 'addon.mod_forum.group' | translate }} - - {{ group.name }} - - - - {{ 'addon.mod_forum.discussionsubscription' | translate }} - - - - {{ 'addon.mod_forum.discussionpinned' | translate }} - - - + + + + {{ 'addon.mod_forum.advanced' | translate }} + + + + {{ 'addon.mod_forum.group' | translate }} + + {{ group.name }} + + + + {{ 'addon.mod_forum.discussionsubscription' | translate }} + + + + {{ 'addon.mod_forum.discussionpinned' | translate }} + + + + diff --git a/src/addon/mod/forum/pages/new-discussion/new-discussion.ts b/src/addon/mod/forum/pages/new-discussion/new-discussion.ts index bb5c7f95a..aaad29946 100644 --- a/src/addon/mod/forum/pages/new-discussion/new-discussion.ts +++ b/src/addon/mod/forum/pages/new-discussion/new-discussion.ts @@ -61,6 +61,7 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { pin: false, files: [] }; + advanced = false; // Display all form fields. protected courseId: number; protected cmId: number; @@ -193,11 +194,19 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { this.messageControl.setValue(discussion.message); // Treat offline attachments if any. + let promise; if (discussion.options.attachmentsid && discussion.options.attachmentsid.offline) { - return this.forumHelper.getNewDiscussionStoredFiles(this.forumId, this.timeCreated).then((files) => { + promise = this.forumHelper.getNewDiscussionStoredFiles(this.forumId, this.timeCreated).then((files) => { this.newDiscussion.files = files; }); } + + return Promise.resolve(promise).then(() => { + // Show advanced fields by default if any of them has not the default value. + if (!this.newDiscussion.subscribe || this.newDiscussion.pin || this.newDiscussion.files.length) { + this.advanced = true; + } + }); }); })); } @@ -497,6 +506,13 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { }); } + /** + * Show or hide advanced form fields. + */ + toggleAdvanced(): void { + this.advanced = !this.advanced; + } + /** * Check if we can leave the page or not. * diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 7ed4e00c2..f5aa4c783 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -479,6 +479,7 @@ "addon.mod_forum.addanewdiscussion": "Add a new discussion topic", "addon.mod_forum.addanewquestion": "Add a new question", "addon.mod_forum.addanewtopic": "Add a new topic", + "addon.mod_forum.advanced": "Advanced", "addon.mod_forum.cannotadddiscussion": "Adding discussions to this forum requires group membership.", "addon.mod_forum.cannotadddiscussionall": "You do not have permission to add a new discussion topic for all participants.", "addon.mod_forum.cannotcreatediscussion": "Could not create new discussion", @@ -508,6 +509,7 @@ "addon.mod_forum.refreshdiscussions": "Refresh discussions", "addon.mod_forum.refreshposts": "Refresh posts", "addon.mod_forum.reply": "Reply", + "addon.mod_forum.replyplaceholder": "Write your reply...", "addon.mod_forum.subject": "Subject", "addon.mod_forum.unread": "Unread", "addon.mod_forum.unreadpostsnumber": "{{$a}} unread posts", From c5d344d674eaffab4234b6ebb81a13b5564780cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 30 Apr 2019 12:41:19 +0200 Subject: [PATCH 107/263] MOBILE-3004 ionic: Set status bar background color --- src/app/app.component.ts | 22 +++++++++++++++++++--- src/config.json | 8 +++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index dec433beb..3df8327a3 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -23,6 +23,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreLoginHelperProvider } from '@core/login/providers/helper'; import { Keyboard } from '@ionic-native/keyboard'; import { ScreenOrientation } from '@ionic-native/screen-orientation'; +import { CoreConfigConstants } from '../configconstants'; @Component({ templateUrl: 'app.html' @@ -43,10 +44,25 @@ export class MoodleMobileApp implements OnInit { platform.ready().then(() => { // Okay, so the platform is ready and our plugins are available. // Here you can do any higher level native things you might need. - if (platform.is('android')) { - statusBar.styleLightContent(); + + // Set StatusBar properties. + if (typeof CoreConfigConstants.statusbarbgios == 'string' && platform.is('ios')) { + // IOS Status bar properties. + statusBar.overlaysWebView(false); + statusBar.backgroundColorByHexString(CoreConfigConstants.statusbarbgios); + CoreConfigConstants.statusbarlighttextios ? statusBar.styleLightContent() : statusBar.styleDefault(); + } else if (typeof CoreConfigConstants.statusbarbgandroid == 'string' && platform.is('android')) { + // Android Status bar properties. + statusBar.backgroundColorByHexString(CoreConfigConstants.statusbarbgandroid); + CoreConfigConstants.statusbarlighttextandroid ? statusBar.styleLightContent() : statusBar.styleDefault(); + } else if (typeof CoreConfigConstants.statusbarbg == 'string') { + // Generic Status bar properties. + platform.is('ios') && statusBar.overlaysWebView(false); + statusBar.backgroundColorByHexString(CoreConfigConstants.statusbarbg); + CoreConfigConstants.statusbarlighttext ? statusBar.styleLightContent() : statusBar.styleDefault(); } else { - statusBar.styleDefault(); + // Default Status bar properties. + platform.is('android') ? statusBar.styleLightContent() : statusBar.styleDefault(); } keyboard.hideFormAccessoryBar(false); diff --git a/src/config.json b/src/config.json index 31ba31f68..e259e3e0a 100644 --- a/src/config.json +++ b/src/config.json @@ -72,5 +72,11 @@ "skipssoconfirmation": false, "forcedefaultlanguage": false, "privacypolicy": "https:\/\/moodle.org\/mod\/page\/view.php?id=8148", - "notificoncolor": "#f98012" + "notificoncolor": "#f98012", + "statusbarbg": false, + "statusbarlighttext": false, + "statusbarbgios": false, + "statusbarlighttextios": false, + "statusbarbgandroid": false, + "statusbarlighttextandroid": false } From 9add3c3f6292fc04bc35ac310ad21bc857063878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 2 May 2019 12:51:33 +0200 Subject: [PATCH 108/263] MOBILE-3005 docker: Do not install cordova on docker --- Dockerfile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index d884d988f..29b541eb6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,15 +11,17 @@ EXPOSE 35729 # Port 53703 is the Chrome dev logger port. EXPOSE 53703 -# MoodleMobile uses Cordova, Ionic, and Gulp. -RUN npm install -g cordova ionic gulp && rm -rf /root/.npm +# MoodleMobile uses Ionic and Gulp. +RUN npm i -g ionic gulp && rm -rf /root/.npm WORKDIR /app COPY . /app -# The setup script will handle npm installation, cordova setup, and gulp setup. -RUN npm run setup && rm -rf /root/.npm +# Install npm libraries and run gulp to initialize the project. +RUN npm install && gulp && rm -rf /root/.npm + +RUN ionic info # Provide a Healthcheck command for easier use in CI. HEALTHCHECK --interval=10s --timeout=3s --start-period=30s CMD curl -f http://localhost:8100 || exit 1 From be5cbfd728a6c1e7b4b2b2294fb888eb9065fbe8 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 6 May 2019 14:44:03 +0200 Subject: [PATCH 109/263] MOBILE-2964 message: Support delete messages for all users --- scripts/langindex.json | 1 + src/addon/messages/lang/en.json | 1 + .../messages/pages/discussion/discussion.ts | 20 +++++++++++--- src/addon/messages/providers/messages.ts | 27 +++++++++++++++++-- src/assets/lang/en.json | 1 + src/providers/utils/dom.ts | 8 +++--- 6 files changed, 49 insertions(+), 9 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index a2efd09d1..6a41036ab 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -182,6 +182,7 @@ "addon.messages.deleteallconfirm": "message", "addon.messages.deleteallselfconfirm": "message", "addon.messages.deleteconversation": "message", + "addon.messages.deleteforeveryone": "message", "addon.messages.deletemessage": "local_moodlemobileapp", "addon.messages.deletemessageconfirmation": "local_moodlemobileapp", "addon.messages.errordeletemessage": "local_moodlemobileapp", diff --git a/src/addon/messages/lang/en.json b/src/addon/messages/lang/en.json index 3a298fdff..071d2fd73 100644 --- a/src/addon/messages/lang/en.json +++ b/src/addon/messages/lang/en.json @@ -21,6 +21,7 @@ "deleteallconfirm": "Are you sure you would like to delete this entire conversation? This will not delete it for other conversation participants.", "deleteallselfconfirm": "Are you sure you would like to delete this entire personal conversation?", "deleteconversation": "Delete conversation", + "deleteforeveryone": "Delete for me and everyone", "deletemessage": "Delete message", "deletemessageconfirmation": "Are you sure you want to delete this message? It will only be deleted from your messaging history and will still be viewable by the user who sent or received the message.", "errordeletemessage": "Error while deleting the message.", diff --git a/src/addon/messages/pages/discussion/discussion.ts b/src/addon/messages/pages/discussion/discussion.ts index 3fecd7867..0022208e6 100644 --- a/src/addon/messages/pages/discussion/discussion.ts +++ b/src/addon/messages/pages/discussion/discussion.ts @@ -809,11 +809,25 @@ export class AddonMessagesDiscussionPage implements OnDestroy { * @param {number} index Index where the message is to delete it from the view. */ deleteMessage(message: any, index: number): void { - const langKey = message.pending ? 'core.areyousure' : 'addon.messages.deletemessageconfirmation'; - this.domUtils.showConfirm(this.translate.instant(langKey)).then(() => { + const canDeleteAll = this.conversation && this.conversation.candeletemessagesforallusers, + langKey = message.pending || canDeleteAll ? 'core.areyousure' : 'addon.messages.deletemessageconfirmation', + options: any = {}; + + if (canDeleteAll && !message.pending) { + // Show delete for all checkbox. + options.inputs = [{ + type: 'checkbox', + name: 'deleteforall', + checked: false, + value: true, + label: this.translate.instant('addon.messages.deleteforeveryone') + }]; + } + + this.domUtils.showConfirm(this.translate.instant(langKey), undefined, undefined, undefined, options).then((data) => { const modal = this.domUtils.showModalLoading('core.deleting', true); - return this.messagesProvider.deleteMessage(message).then(() => { + return this.messagesProvider.deleteMessage(message, data && data[0]).then(() => { // Remove message from the list without having to wait for re-fetch. this.messages.splice(index, 1); this.removeMessage(message.hash); diff --git a/src/addon/messages/providers/messages.ts b/src/addon/messages/providers/messages.ts index b651a09a2..fbaccdd11 100644 --- a/src/addon/messages/providers/messages.ts +++ b/src/addon/messages/providers/messages.ts @@ -244,12 +244,17 @@ export class AddonMessagesProvider { * Delete a message (online or offline). * * @param {any} message Message to delete. + * @param {boolean} [deleteForAll] Whether the message should be deleted for all users. * @return {Promise} Promise resolved when the message has been deleted. */ - deleteMessage(message: any): Promise { + deleteMessage(message: any, deleteForAll?: boolean): Promise { if (message.id) { // Message has ID, it means it has been sent to the server. - return this.deleteMessageOnline(message.id, message.read); + if (deleteForAll) { + return this.deleteMessageForAllOnline(message.id); + } else { + return this.deleteMessageOnline(message.id, message.read); + } } // It's an offline message. @@ -283,6 +288,24 @@ export class AddonMessagesProvider { }); } + /** + * Delete a message for all users. + * + * @param {number} id Message ID. + * @param {number} [userId] User we want to delete the message for. If not defined, use current user. + * @return {Promise} Promise resolved when the message has been deleted. + */ + deleteMessageForAllOnline(id: number, userId?: number): Promise { + const params: any = { + messageid: id, + userid: userId || this.sitesProvider.getCurrentSiteUserId() + }; + + return this.sitesProvider.getCurrentSite().write('core_message_delete_message_for_all_users', params).then(() => { + return this.invalidateDiscussionCache(userId); + }); + } + /** * Format a conversation. * diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 66ca0a25a..aca180965 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -182,6 +182,7 @@ "addon.messages.deleteallconfirm": "Are you sure you would like to delete this entire conversation? This will not delete it for other conversation participants.", "addon.messages.deleteallselfconfirm": "Are you sure you would like to delete this entire personal conversation?", "addon.messages.deleteconversation": "Delete conversation", + "addon.messages.deleteforeveryone": "Delete for me and everyone", "addon.messages.deletemessage": "Delete message", "addon.messages.deletemessageconfirmation": "Are you sure you want to delete this message? It will only be deleted from your messaging history and will still be viewable by the user who sent or received the message.", "addon.messages.errordeletemessage": "Error while deleting the message.", diff --git a/src/providers/utils/dom.ts b/src/providers/utils/dom.ts index bf303e859..fe2b67500 100644 --- a/src/providers/utils/dom.ts +++ b/src/providers/utils/dom.ts @@ -991,9 +991,9 @@ export class CoreDomUtilsProvider { * @param {string} [okText] Text of the OK button. * @param {string} [cancelText] Text of the Cancel button. * @param {any} [options] More options. See https://ionicframework.com/docs/api/components/alert/AlertController/ - * @return {Promise} Promise resolved if the user confirms and rejected with a canceled error if he cancels. + * @return {Promise} Promise resolved if the user confirms and rejected with a canceled error if he cancels. */ - showConfirm(message: string, title?: string, okText?: string, cancelText?: string, options?: any): Promise { + showConfirm(message: string, title?: string, okText?: string, cancelText?: string, options?: any): Promise { return new Promise((resolve, reject): void => { const hasHTMLTags = this.textUtils.hasHTMLTags(message); let promise; @@ -1023,8 +1023,8 @@ export class CoreDomUtilsProvider { }, { text: okText || this.translate.instant('core.ok'), - handler: (): void => { - resolve(); + handler: (data: any): void => { + resolve(data); } } ]; From 470dbf2cba5d886460961b5806e7832afe68fe45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 7 May 2019 11:33:15 +0200 Subject: [PATCH 110/263] MOBILE-2964 styles: Improve alert styling --- src/app/app.scss | 19 +++++++++++++++++++ src/providers/utils/dom.ts | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/app/app.scss b/src/app/app.scss index 2782088e0..7037530ac 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -595,6 +595,25 @@ ion-app.app-root { .alert-message { overflow-y: auto; } + ion-alert.core-nohead { + + &.alert-md .alert-message { + padding-top: $alert-md-message-padding-bottom; + } + &.alert-ios .alert-message { + padding-top: $alert-ios-message-padding-bottom; + } + &.alert-wp .alert-message { + padding-top: $alert-wp-message-padding-bottom; + } + .alert-head { + display: none; + } + } + + ion-alert .alert-checkbox-group { + border: 0; + } ion-toast.core-toast-success .toast-wrapper{ background: $green-dark; diff --git a/src/providers/utils/dom.ts b/src/providers/utils/dom.ts index fe2b67500..e8e22ed1a 100644 --- a/src/providers/utils/dom.ts +++ b/src/providers/utils/dom.ts @@ -990,7 +990,7 @@ export class CoreDomUtilsProvider { * @param {string} [title] Title of the modal. * @param {string} [okText] Text of the OK button. * @param {string} [cancelText] Text of the Cancel button. - * @param {any} [options] More options. See https://ionicframework.com/docs/api/components/alert/AlertController/ + * @param {any} [options] More options. See https://ionicframework.com/docs/v3/api/components/alert/AlertController/ * @return {Promise} Promise resolved if the user confirms and rejected with a canceled error if he cancels. */ showConfirm(message: string, title?: string, okText?: string, cancelText?: string, options?: any): Promise { From bf17c1653bf98e87f5fef126b5b3f1c894c5b2a1 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 16 Apr 2019 16:55:33 +0200 Subject: [PATCH 111/263] MOBILE-2988 forum: Add the ability to lock discussions manually --- scripts/langindex.json | 2 + src/addon/mod/forum/components/index/index.ts | 7 +- src/addon/mod/forum/lang/en.json | 2 + .../forum/pages/discussion/discussion.html | 4 +- .../mod/forum/pages/discussion/discussion.ts | 86 ++++++++++++++----- src/addon/mod/forum/providers/forum.ts | 23 +++++ src/addon/mod/forum/providers/helper.ts | 35 ++++++++ src/assets/lang/en.json | 2 + 8 files changed, 137 insertions(+), 24 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index a2efd09d1..71ed9574f 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -494,11 +494,13 @@ "addon.mod_forum.errorgetgroups": "local_moodlemobileapp", "addon.mod_forum.forumnodiscussionsyet": "local_moodlemobileapp", "addon.mod_forum.group": "local_moodlemobileapp", + "addon.mod_forum.locked": "forum", "addon.mod_forum.message": "forum", "addon.mod_forum.modeflatnewestfirst": "forum", "addon.mod_forum.modeflatoldestfirst": "forum", "addon.mod_forum.modenested": "forum", "addon.mod_forum.modulenameplural": "forum", + "addon.mod_forum.notlocked": "forum", "addon.mod_forum.numdiscussions": "local_moodlemobileapp", "addon.mod_forum.numreplies": "local_moodlemobileapp", "addon.mod_forum.postisprivatereply": "forum", diff --git a/src/addon/mod/forum/components/index/index.ts b/src/addon/mod/forum/components/index/index.ts index 999974f31..b3c8769e7 100644 --- a/src/addon/mod/forum/components/index/index.ts +++ b/src/addon/mod/forum/components/index/index.ts @@ -58,6 +58,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom protected replyObserver: any; protected newDiscObserver: any; protected viewDiscObserver: any; + protected changeDiscObserver: any; hasOfflineRatings: boolean; protected ratingOfflineObserver: any; @@ -94,6 +95,8 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom this.eventReceived.bind(this, true)); this.replyObserver = this.eventsProvider.on(AddonModForumProvider.REPLY_DISCUSSION_EVENT, this.eventReceived.bind(this, false)); + this.changeDiscObserver = this.eventsProvider.on(AddonModForumProvider.CHANGE_DISCUSSION_EVENT, + this.eventReceived.bind(this, false)); // Select the current opened discussion. this.viewDiscObserver = this.eventsProvider.on(AddonModForumProvider.VIEW_DISCUSSION_EVENT, (data) => { @@ -446,9 +449,8 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom courseId: this.courseId, cmId: this.module.id, forumId: this.forum.id, - discussionId: discussion.discussion, + discussion: discussion, trackPosts: this.trackPosts, - locked: discussion.locked }; this.splitviewCtrl.push('AddonModForumDiscussionPage', params); } @@ -480,6 +482,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom this.newDiscObserver && this.newDiscObserver.off(); this.replyObserver && this.replyObserver.off(); this.viewDiscObserver && this.viewDiscObserver.off(); + this.changeDiscObserver && this.changeDiscObserver.off(); this.ratingOfflineObserver && this.ratingOfflineObserver.off(); this.ratingSyncObserver && this.ratingSyncObserver.off(); } diff --git a/src/addon/mod/forum/lang/en.json b/src/addon/mod/forum/lang/en.json index 42fb302a5..ea720c2ff 100644 --- a/src/addon/mod/forum/lang/en.json +++ b/src/addon/mod/forum/lang/en.json @@ -18,11 +18,13 @@ "errorgetgroups": "Error getting group settings.", "forumnodiscussionsyet": "There are no discussions yet in this forum.", "group": "Group", + "locked": "Locked", "message": "Message", "modeflatnewestfirst": "Display replies flat, with newest first", "modeflatoldestfirst": "Display replies flat, with oldest first", "modenested": "Display replies in nested form", "modulenameplural": "Forums", + "notlocked": "Lock", "numdiscussions": "{{numdiscussions}} discussions", "numreplies": "{{numreplies}} replies", "postisprivatereply": "This post was made privately and is not visible to all users.", diff --git a/src/addon/mod/forum/pages/discussion/discussion.html b/src/addon/mod/forum/pages/discussion/discussion.html index 99adf295a..434ac76e2 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.html +++ b/src/addon/mod/forum/pages/discussion/discussion.html @@ -13,6 +13,8 @@ + + @@ -26,7 +28,7 @@ {{ 'core.hasdatatosync' | translate:{$a: discussionStr} }} - + {{ 'addon.mod_forum.discussionlocked' | translate }} diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index 48c5949ba..8b3a81a42 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -54,7 +54,6 @@ export class AddonModForumDiscussionPage implements OnDestroy { defaultSubject: string; isOnline: boolean; isSplitViewOn: boolean; - locked: boolean; postHasOffline: boolean; sort: SortType = 'flat-oldest'; trackPosts: boolean; @@ -108,9 +107,9 @@ export class AddonModForumDiscussionPage implements OnDestroy { this.courseId = navParams.get('courseId'); this.cmId = navParams.get('cmId'); this.forumId = navParams.get('forumId'); - this.discussionId = navParams.get('discussionId'); + this.discussion = navParams.get('discussion'); + this.discussionId = this.discussion ? this.discussion.discussion : navParams.get('discussionId'); this.trackPosts = navParams.get('trackPosts'); - this.locked = navParams.get('locked'); this.postId = navParams.get('postId'); this.isOnline = this.appProvider.isOnline(); @@ -222,7 +221,7 @@ export class AddonModForumDiscussionPage implements OnDestroy { } /** - * Convenience function to get forum discussions. + * Convenience function to get the posts. * * @param {boolean} [sync] Whether to try to synchronize the discussion. * @param {boolean} [showErrors] Whether to show errors in a modal. @@ -243,11 +242,12 @@ export class AddonModForumDiscussionPage implements OnDestroy { let onlinePosts = []; const offlineReplies = []; let hasUnreadPosts = false; + let ratingInfo; return syncPromise.then(() => { return this.forumProvider.getDiscussionPosts(this.discussionId).then((response) => { onlinePosts = response.posts; - this.ratingInfo = response.ratinginfo; + ratingInfo = response.ratinginfo; }).then(() => { // Check if there are responses stored in offline. return this.forumOffline.getDiscussionReplies(this.discussionId).then((replies) => { @@ -285,34 +285,23 @@ export class AddonModForumDiscussionPage implements OnDestroy { }); }); }).then(() => { - const posts = offlineReplies.concat(onlinePosts); - this.discussion = this.forumProvider.extractStartingPost(posts); - - if (!this.discussion) { - return Promise.reject('Invalid forum discussion'); - } + let posts = offlineReplies.concat(onlinePosts); // If sort type is nested, normal sorting is disabled and nested posts will be displayed. if (this.sort == 'nested') { // Sort first by creation date to make format tree work. this.forumProvider.sortDiscussionPosts(posts, 'ASC'); - this.posts = this.utils.formatTree(posts, 'parent', 'id', this.discussion.id); + posts = this.utils.formatTree(posts, 'parent', 'id', this.discussion.id); } else { // Set default reply subject. const direction = this.sort == 'flat-newest' ? 'DESC' : 'ASC'; this.forumProvider.sortDiscussionPosts(posts, direction); - this.posts = posts; } this.defaultSubject = this.translate.instant('addon.mod_forum.re') + ' ' + this.discussion.subject; this.replyData.subject = this.defaultSubject; // Now try to get the forum. return this.fetchForum().then((forum) => { - if (this.discussion.userfullname && this.discussion.parent == 0 && forum.type == 'single') { - // Hide author for first post and type single. - this.discussion.userfullname = null; - } - // "forum.istracked" is more reliable than "trackPosts". if (typeof forum.istracked != 'undefined') { this.trackPosts = forum.istracked; @@ -321,14 +310,44 @@ export class AddonModForumDiscussionPage implements OnDestroy { this.forumId = forum.id; this.cmId = forum.cmid; this.forum = forum; - }).then(() => { - return this.forumProvider.getAccessInformation(this.forum.id).then((accessInfo) => { + + const promises = []; + + promises.push(this.forumProvider.getAccessInformation(this.forum.id).then((accessInfo) => { this.accessInfo = accessInfo; - }); + })); + + // Fetch the discussion if not passed as parameter. + if (!this.discussion) { + promises.push(this.forumHelper.getDiscussionById(forum.id, this.discussionId).then((discussion) => { + this.discussion = discussion; + }).catch(() => { + // Ignore errors. + })); + } + + return Promise.all(promises); }).catch(() => { // Ignore errors. this.forum = {}; this.accessInfo = {}; + }).then(() => { + const startingPost = this.forumProvider.extractStartingPost(posts); + if (startingPost) { + // Update discussion data from first post. + this.discussion = Object.assign(this.discussion || {}, startingPost); + } else if (!this.discussion) { + // The discussion object was not passed as parameter and there is no starting post. + return Promise.reject('Invalid forum discussion.'); + } + + if (this.discussion.userfullname && this.discussion.parent == 0 && this.forum.type == 'single') { + // Hide author for first post and type single. + this.discussion.userfullname = null; + } + + this.posts = posts; + this.ratingInfo = ratingInfo; }); }).then(() => { return this.ratingOffline.hasRatings('mod_forum', 'post', 'module', this.cmId, this.discussionId).then((hasRatings) => { @@ -454,6 +473,31 @@ export class AddonModForumDiscussionPage implements OnDestroy { return this.fetchPosts(); } + /** + * Lock or unlock the discussion. + * + * @param {boolean} locked True to lock the discussion, false to unlock. + */ + setLockState(locked: boolean): void { + const modal = this.domUtils.showModalLoading('core.sending', true); + + this.forumProvider.setLockState(this.forumId, this.discussionId, locked).then((response) => { + this.discussion.locked = response.locked; + + const data = { + forumId: this.forumId, + discussionId: this.discussionId, + cmId: this.cmId, + locked: this.discussion.locked + }; + this.eventsProvider.trigger(AddonModForumProvider.CHANGE_DISCUSSION_EVENT, data, this.sitesProvider.getCurrentSiteId()); + }).catch((error) => { + this.domUtils.showErrorModal(error); + }).finally(() => { + modal.dismiss(); + }); + } + /** * New post added. */ diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index e4bc9f978..520ed72c5 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -34,6 +34,7 @@ export class AddonModForumProvider { static NEW_DISCUSSION_EVENT = 'addon_mod_forum_new_discussion'; static REPLY_DISCUSSION_EVENT = 'addon_mod_forum_reply_discussion'; static VIEW_DISCUSSION_EVENT = 'addon_mod_forum_view_discussion'; + static CHANGE_DISCUSSION_EVENT = 'addon_mod_forum_lock_discussion'; static MARK_READ_EVENT = 'addon_mod_forum_mark_read'; protected ROOT_CACHE_KEY = 'mmaModForum:'; @@ -761,6 +762,28 @@ export class AddonModForumProvider { }); } + /** + * Lock or unlock a discussion. + * + * @param {number} forumId Forum id. + * @param {number} discussionId DIscussion id. + * @param {boolean} locked True to lock, false to unlock. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resvoled when done. + * @since 3.7 + */ + setLockState(forumId: number, discussionId: number, locked: boolean, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + const params = { + forumid: forumId, + discussionid: discussionId, + targetstate: locked ? 0 : 1 + }; + + return site.write('mod_forum_set_lock_state', params); + }); + } + /** * Store the users data from a discussions/posts list. * diff --git a/src/addon/mod/forum/providers/helper.ts b/src/addon/mod/forum/providers/helper.ts index d33c6ef28..eeeb4a0f7 100644 --- a/src/addon/mod/forum/providers/helper.ts +++ b/src/addon/mod/forum/providers/helper.ts @@ -15,6 +15,7 @@ import { Injectable } from '@angular/core'; import { CoreFileProvider } from '@providers/file'; import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploader'; +import { CoreSitesProvider } from '@providers/sites'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonModForumProvider } from './forum'; import { AddonModForumOfflineProvider } from './offline'; @@ -25,8 +26,10 @@ import { AddonModForumOfflineProvider } from './offline'; @Injectable() export class AddonModForumHelperProvider { constructor(private fileProvider: CoreFileProvider, + private sitesProvider: CoreSitesProvider, private uploaderProvider: CoreFileUploaderProvider, private userProvider: CoreUserProvider, + private forumProvider: AddonModForumProvider, private forumOffline: AddonModForumOfflineProvider) {} /** @@ -119,6 +122,38 @@ export class AddonModForumHelperProvider { }); } + /** + * Get a forum discussion by id. + * + * This function is inefficient because it needs to fetch all discussion pages in the worst case. + * + * @param {number} forumId Forum ID. + * @param {number} discussionId Discussion ID. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved with the discussion data. + */ + getDiscussionById(forumId: number, discussionId: number, siteId?: string): Promise { + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + + const findDiscussion = (page: number): Promise => { + return this.forumProvider.getDiscussions(forumId, page, false, siteId).then((response) => { + if (response.discussions && response.discussions.length > 0) { + const discussion = response.discussions.find((discussion) => discussion.id == discussionId); + if (discussion) { + return discussion; + } + if (response.canLoadMore) { + return findDiscussion(page + 1); + } + } + + return Promise.reject(null); + }); + }; + + return findDiscussion(0); + } + /** * Get a list of stored attachment files for a new discussion. See AddonModForumHelper#storeNewDiscussionFiles. * diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 66ca0a25a..c4340c998 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -494,11 +494,13 @@ "addon.mod_forum.errorgetgroups": "Error getting group settings.", "addon.mod_forum.forumnodiscussionsyet": "There are no discussions yet in this forum.", "addon.mod_forum.group": "Group", + "addon.mod_forum.locked": "Locked", "addon.mod_forum.message": "Message", "addon.mod_forum.modeflatnewestfirst": "Display replies flat, with newest first", "addon.mod_forum.modeflatoldestfirst": "Display replies flat, with oldest first", "addon.mod_forum.modenested": "Display replies in nested form", "addon.mod_forum.modulenameplural": "Forums", + "addon.mod_forum.notlocked": "Lock", "addon.mod_forum.numdiscussions": "{{numdiscussions}} discussions", "addon.mod_forum.numreplies": "{{numreplies}} replies", "addon.mod_forum.postisprivatereply": "This post was made privately and is not visible to all users.", From aa57a51c2e16165c58acffa38487c951b89b0c88 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 30 Apr 2019 10:59:32 +0200 Subject: [PATCH 112/263] MOBILE-2914 icon: Slash parameter --- src/assets/fonts/slash-icon.woff | Bin 0 -> 1144 bytes src/components/icon/icon.scss | 41 ++++++++++++++++++++++++++++++- src/components/icon/icon.ts | 5 ++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/assets/fonts/slash-icon.woff diff --git a/src/assets/fonts/slash-icon.woff b/src/assets/fonts/slash-icon.woff new file mode 100644 index 0000000000000000000000000000000000000000..5e02178e49592d116b528e2e58d8b017adf71b4b GIT binary patch literal 1144 zcmXT-cXRU(3GruOV5wl>W&i@V3I;|HjR~CH+!PoXm~DVE{}>n;c~?x(Q+9I;@dfG) z0gB0haA(N#AMP%$Za^`RItj42D1(T9u)YycPYRF^lw(K;JCMYmoSRs{z`*nd$TtVd zIWh1tUCl^M1gc@=0Ez+CGnk3|*uF9YCP&>Sq9{<=|lW z-;kSF0pv5r0QqcS%oMzTconFCl@4Hy}kvRMNd7=VZgqAoEpVa|aArw$x2nf#K6nc3OC zC9URc!kH7CBB=?ilL8K$XkcNw6ca2VCGkb_%go;Y(#A&&q>bk|1}0!`j;Hn3i z(>r0WACsd<>-i7qJe?aCZIIGdY&`p>jg3qAh{MuWl`DD%db4vR=EQPIRoAk3$scI{ z%xSZ^r?ZuH_spI5|IV&XV~Bac&2;>|)c1L;vnoEv9F*jnw|d9H?a!rVDSe7LzO>@o zorFJgr!FeRBK|IUtA)h~+w-eVQstf_WPEy}HNlJie@=DisgUVpzM>UY^jKVIeeZOh(C#&@PH z*y1Pu?AEiDH$9dfa?n)uxBAB3VjSxZj<1A-w1xypHa9kb4UC^84%UdVu_~NpYEjtt z@Be>+Pyba{c(J*eu}Msha9H%|AU{LqbGAodeQ6BM|9g3kIdn~ADb!ztg<=tyCUMr z4hf6XhraCI{g6lQ+x>gOd)O^i6GfB1lc!r={30d0-WZ4*N~8YNTa2{r3A zw-(nqrUs@}xpg+VZCchev2o$jzNTcqpsc{ors|}^!Ys~7#uH*$SeSTxdV0JT-u+$2 z@+SGt_V>>_YtQ^XQup%jjc@+_x%cO%U6g0E_y5D0@Z9^itg6;wqtDZoUZ2U_`&l}z zXvv%8+!>MgqHiBi{A~SqzEXCsbNbIMQGLD>*IdqeUVdiIv4h{UyF9jMnDdJ>{B{X< zho=7q201oCHZg^>EJu0-co>*YGiU+x6u1PrUR}Hi$Y!|lW+#XO(z{(*fHVs*uL1yl CwzmTS literal 0 HcmV?d00001 diff --git a/src/components/icon/icon.scss b/src/components/icon/icon.scss index bacc56f37..f909e876e 100644 --- a/src/components/icon/icon.scss +++ b/src/components/icon/icon.scss @@ -13,4 +13,43 @@ -webkit-transform: scale(-1, 1); transform: scale(-1, 1); } -} \ No newline at end of file +} + +// Center font awesome icons + +.icon.fa::before { + width: 1em; + text-align: center; +} + +// Slash + +@font-face { + font-family: "Moodle Slash Icon"; + font-style: normal; + font-weight: 400; + src: url("#{$font-path}/slash-icon.woff") format("woff"); +} + +.icon-slash { + position: relative; +} + +.icon-slash::after { + content: "/"; + font-family: "Moodle Slash Icon"; + font-size: 0.75em; + margin-top: 0.125em; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + text-align: center; + color: color($colors, danger); +} + +.icon-slash.fa::after { + font-size: 1em; + margin-top: 0; +} diff --git a/src/components/icon/icon.ts b/src/components/icon/icon.ts index 4bf697b05..bfedf4001 100644 --- a/src/components/icon/icon.ts +++ b/src/components/icon/icon.ts @@ -29,6 +29,7 @@ export class CoreIconComponent implements OnInit, OnDestroy { // Common params. @Input() name: string; @Input('color') color?: string; + @Input('slash') slash?: boolean; // Display a red slash over the icon. // Ionicons params. @Input('isActive') isActive?: boolean; @@ -94,6 +95,10 @@ export class CoreIconComponent implements OnInit, OnDestroy { } } + if (this.slash) { + this.newElement.classList.add('icon-slash'); + } + this.element.parentElement.replaceChild(this.newElement, this.element); } From dd1076f994dd6e54a428141d670581436838b280 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 30 Apr 2019 11:05:06 +0200 Subject: [PATCH 113/263] MOBILE-2914 context-menu: Icon slash parameter --- src/components/context-menu/context-menu-item.ts | 1 + src/components/context-menu/core-context-menu-popover.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/context-menu/context-menu-item.ts b/src/components/context-menu/context-menu-item.ts index e748dee34..0870cbcd3 100644 --- a/src/components/context-menu/context-menu-item.ts +++ b/src/components/context-menu/context-menu-item.ts @@ -39,6 +39,7 @@ export class CoreContextMenuItemComponent implements OnInit, OnDestroy, OnChange // If is "spinner" an spinner will be shown. // If no icon or spinner is selected, no action or link will work. // If href but no iconAction is provided arrow-right will be used. + @Input() iconSlash?: boolean; // Display a red slash over the icon. @Input() ariaDescription?: string; // Aria label to add to iconDescription. @Input() ariaAction?: string; // Aria label to add to iconAction. If not set, it will be equal to content. @Input() href?: string; // Link to go if no action provided. diff --git a/src/components/context-menu/core-context-menu-popover.html b/src/components/context-menu/core-context-menu-popover.html index d785687be..69ffdadf7 100644 --- a/src/components/context-menu/core-context-menu-popover.html +++ b/src/components/context-menu/core-context-menu-popover.html @@ -3,7 +3,7 @@ - + {{item.badge}} From ec5ec8036f7715d8bafb3b8bf5b3fb8cfd65b7eb Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 30 Apr 2019 11:39:55 +0200 Subject: [PATCH 114/263] MOBILE-2914 messages: New unstar and add/remove contact icons --- .../messages/pages/discussion/discussion.html | 4 ++-- src/addon/messages/pages/discussion/discussion.ts | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/addon/messages/pages/discussion/discussion.html b/src/addon/messages/pages/discussion/discussion.html index 74dba5553..98289dd93 100644 --- a/src/addon/messages/pages/discussion/discussion.html +++ b/src/addon/messages/pages/discussion/discussion.html @@ -13,14 +13,14 @@ - + - + diff --git a/src/addon/messages/pages/discussion/discussion.ts b/src/addon/messages/pages/discussion/discussion.ts index 3fecd7867..c7794abbc 100644 --- a/src/addon/messages/pages/discussion/discussion.ts +++ b/src/addon/messages/pages/discussion/discussion.ts @@ -80,9 +80,10 @@ export class AddonMessagesDiscussionPage implements OnDestroy { isGroup = false; members: any = {}; // Members that wrote a message, indexed by ID. favouriteIcon = 'fa-star'; + favouriteIconSlash = false; deleteIcon = 'trash'; blockIcon = 'close-circle'; - addRemoveIcon = 'add'; + addRemoveIcon = 'person'; otherMember: any; // Other member information (individual conversations only). footerType: 'message' | 'blocked' | 'requiresContact' | 'requestSent' | 'requestReceived' | 'unable'; requestContactSent = false; @@ -244,7 +245,6 @@ export class AddonMessagesDiscussionPage implements OnDestroy { this.title = member.fullname; } this.blockIcon = this.otherMember && this.otherMember.isblocked ? 'checkmark-circle' : 'close-circle'; - this.addRemoveIcon = this.otherMember && this.otherMember.iscontact ? 'remove' : 'add'; })); } else { this.otherMember = null; @@ -446,7 +446,8 @@ export class AddonMessagesDiscussionPage implements OnDestroy { this.title = conversation.name; this.conversationImage = conversation.imageurl; this.isGroup = conversation.type == AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP; - this.favouriteIcon = conversation.isfavourite ? 'fa-star-o' : 'fa-star'; + this.favouriteIcon = 'fa-star'; + this.favouriteIconSlash = conversation.isfavourite; this.muteIcon = conversation.ismuted ? 'volume-up' : 'volume-off'; if (!this.isGroup) { this.userId = conversation.userid; @@ -1118,7 +1119,8 @@ export class AddonMessagesDiscussionPage implements OnDestroy { }).catch((error) => { this.domUtils.showErrorModalDefault(error, 'Error changing favourite state.'); }).finally(() => { - this.favouriteIcon = this.conversation.isfavourite ? 'fa-star-o' : 'fa-star'; + this.favouriteIcon = 'fa-star'; + this.favouriteIconSlash = this.conversation.isfavourite; done && done(); }); } @@ -1306,7 +1308,7 @@ export class AddonMessagesDiscussionPage implements OnDestroy { }).catch((error) => { this.domUtils.showErrorModalDefault(error, 'core.error', true); }).finally(() => { - this.addRemoveIcon = this.otherMember.iscontact ? 'remove' : 'add'; + this.addRemoveIcon = 'person'; }); } @@ -1381,7 +1383,7 @@ export class AddonMessagesDiscussionPage implements OnDestroy { }).catch((error) => { this.domUtils.showErrorModalDefault(error, 'core.error', true); }).finally(() => { - this.addRemoveIcon = this.otherMember.iscontact ? 'remove' : 'add'; + this.addRemoveIcon = 'person'; }); } From 5b74fd104f4bdadd1d197ae4429c475e45639703 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 30 Apr 2019 11:40:42 +0200 Subject: [PATCH 115/263] MOBILE-2914 courses: New unstar icon --- .../course-options-menu/core-courses-course-options-menu.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/courses/components/course-options-menu/core-courses-course-options-menu.html b/src/core/courses/components/course-options-menu/core-courses-course-options-menu.html index 7be6638ba..9e17624b8 100644 --- a/src/core/courses/components/course-options-menu/core-courses-course-options-menu.html +++ b/src/core/courses/components/course-options-menu/core-courses-course-options-menu.html @@ -16,7 +16,7 @@

{{ 'core.courses.addtofavourites' | translate }}

- +

{{ 'core.courses.removefromfavourites' | translate }}

From 8cdca2ebd9f516d082db61fec66ec1a65adb2484 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 30 Apr 2019 12:57:44 +0200 Subject: [PATCH 116/263] MOBILE-2989 forum: Add ability to star and pin discussions --- scripts/langindex.json | 7 ++ .../index/addon-mod-forum-index.html | 6 +- .../mod/forum/components/index/index.scss | 3 + .../components/post/addon-mod-forum-post.html | 6 +- src/addon/mod/forum/components/post/post.scss | 5 ++ src/addon/mod/forum/lang/en.json | 7 ++ .../forum/pages/discussion/discussion.html | 4 ++ .../mod/forum/pages/discussion/discussion.ts | 64 +++++++++++++++++++ src/addon/mod/forum/providers/forum.ts | 40 ++++++++++++ src/assets/lang/en.json | 7 ++ .../course-progress/course-progress.scss | 2 - src/theme/variables.scss | 1 + 12 files changed, 148 insertions(+), 4 deletions(-) create mode 100644 src/addon/mod/forum/components/post/post.scss diff --git a/scripts/langindex.json b/scripts/langindex.json index d2658bf07..f6ce38df0 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -478,6 +478,7 @@ "addon.mod_forum.addanewdiscussion": "forum", "addon.mod_forum.addanewquestion": "forum", "addon.mod_forum.addanewtopic": "forum", + "addon.mod_forum.addtofavourites": "forum", "addon.mod_forum.advanced": "forum", "addon.mod_forum.cannotadddiscussion": "forum", "addon.mod_forum.cannotadddiscussionall": "forum", @@ -492,9 +493,11 @@ "addon.mod_forum.erroremptysubject": "forum", "addon.mod_forum.errorgetforum": "local_moodlemobileapp", "addon.mod_forum.errorgetgroups": "local_moodlemobileapp", + "addon.mod_forum.favouriteupdated": "forum", "addon.mod_forum.forumnodiscussionsyet": "local_moodlemobileapp", "addon.mod_forum.group": "local_moodlemobileapp", "addon.mod_forum.locked": "forum", + "addon.mod_forum.lockupdated": "forum", "addon.mod_forum.message": "forum", "addon.mod_forum.modeflatnewestfirst": "forum", "addon.mod_forum.modeflatoldestfirst": "forum", @@ -503,15 +506,19 @@ "addon.mod_forum.notlocked": "forum", "addon.mod_forum.numdiscussions": "local_moodlemobileapp", "addon.mod_forum.numreplies": "local_moodlemobileapp", + "addon.mod_forum.pindiscussion": "forum", + "addon.mod_forum.pinupdated": "forum", "addon.mod_forum.postisprivatereply": "forum", "addon.mod_forum.posttoforum": "forum", "addon.mod_forum.privatereply": "forum", "addon.mod_forum.re": "forum", "addon.mod_forum.refreshdiscussions": "local_moodlemobileapp", "addon.mod_forum.refreshposts": "local_moodlemobileapp", + "addon.mod_forum.removefromfavourites": "forum", "addon.mod_forum.reply": "forum", "addon.mod_forum.replyplaceholder": "forum", "addon.mod_forum.subject": "forum", + "addon.mod_forum.unpindiscussion": "forum", "addon.mod_forum.unread": "forum", "addon.mod_forum.unreadpostsnumber": "forum", "addon.mod_glossary.addentry": "glossary", diff --git a/src/addon/mod/forum/components/index/addon-mod-forum-index.html b/src/addon/mod/forum/components/index/addon-mod-forum-index.html index 47b6037c1..3bb9fee79 100644 --- a/src/addon/mod/forum/components/index/addon-mod-forum-index.html +++ b/src/addon/mod/forum/components/index/addon-mod-forum-index.html @@ -45,7 +45,11 @@ -

+

+ + + +

{{discussion.created | coreDateDayOrTime}} diff --git a/src/addon/mod/forum/components/index/index.scss b/src/addon/mod/forum/components/index/index.scss index 5234ac16e..09429a4e4 100644 --- a/src/addon/mod/forum/components/index/index.scss +++ b/src/addon/mod/forum/components/index/index.scss @@ -2,4 +2,7 @@ ion-app.app-root addon-mod-forum-index { .addon-forum-discussion-selected { border-top: 5px solid $core-splitview-selected; } + .addon-forum-star { + color: $core-star-color; + } } diff --git a/src/addon/mod/forum/components/post/addon-mod-forum-post.html b/src/addon/mod/forum/components/post/addon-mod-forum-post.html index a1d0e09d9..8918cadb5 100644 --- a/src/addon/mod/forum/components/post/addon-mod-forum-post.html +++ b/src/addon/mod/forum/components/post/addon-mod-forum-post.html @@ -1,7 +1,11 @@ -

+

+ + + +

{{ 'core.notsent' | translate }} diff --git a/src/addon/mod/forum/components/post/post.scss b/src/addon/mod/forum/components/post/post.scss new file mode 100644 index 000000000..43358381e --- /dev/null +++ b/src/addon/mod/forum/components/post/post.scss @@ -0,0 +1,5 @@ +ion-app.app-root addon-mod-forum-post { + .addon-forum-star { + color: $core-star-color; + } +} diff --git a/src/addon/mod/forum/lang/en.json b/src/addon/mod/forum/lang/en.json index ea720c2ff..7305a22b7 100644 --- a/src/addon/mod/forum/lang/en.json +++ b/src/addon/mod/forum/lang/en.json @@ -2,6 +2,7 @@ "addanewdiscussion": "Add a new discussion topic", "addanewquestion": "Add a new question", "addanewtopic": "Add a new topic", + "addtofavourites": "Star this discussion", "advanced": "Advanced", "cannotadddiscussion": "Adding discussions to this forum requires group membership.", "cannotadddiscussionall": "You do not have permission to add a new discussion topic for all participants.", @@ -16,9 +17,11 @@ "erroremptysubject": "Post subject cannot be empty.", "errorgetforum": "Error getting forum data.", "errorgetgroups": "Error getting group settings.", + "favouriteupdated": "Your star option has been updated.", "forumnodiscussionsyet": "There are no discussions yet in this forum.", "group": "Group", "locked": "Locked", + "lockupdated": "The lock option has been updated.", "message": "Message", "modeflatnewestfirst": "Display replies flat, with newest first", "modeflatoldestfirst": "Display replies flat, with oldest first", @@ -27,15 +30,19 @@ "notlocked": "Lock", "numdiscussions": "{{numdiscussions}} discussions", "numreplies": "{{numreplies}} replies", + "pindiscussion": "Pin this discussion", + "pinupdated": "The pin option has been updated.", "postisprivatereply": "This post was made privately and is not visible to all users.", "posttoforum": "Post to forum", "privatereply": "Reply privately", "re": "Re:", "refreshdiscussions": "Refresh discussions", "refreshposts": "Refresh posts", + "removefromfavourites": "Unstar this discussion", "reply": "Reply", "replyplaceholder": "Write your reply...", "subject": "Subject", + "unpindiscussion": "Unpin this discussion", "unread": "Unread", "unreadpostsnumber": "{{$a}} unread posts" } diff --git a/src/addon/mod/forum/pages/discussion/discussion.html b/src/addon/mod/forum/pages/discussion/discussion.html index 434ac76e2..73ca29418 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.html +++ b/src/addon/mod/forum/pages/discussion/discussion.html @@ -15,6 +15,10 @@ + + + + diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index 8b3a81a42..0f076b58b 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -76,6 +76,7 @@ export class AddonModForumDiscussionPage implements OnDestroy { discussionStr = ''; component = AddonModForumProvider.COMPONENT; cmId: number; + canPin = false; protected forumId: number; protected postId: number; @@ -349,6 +350,13 @@ export class AddonModForumDiscussionPage implements OnDestroy { this.posts = posts; this.ratingInfo = ratingInfo; }); + }).then(() => { + // Use the canAddDiscussion WS to check if the user can pin discussions. + return this.forumProvider.canAddDiscussionToAll(this.forumId).then((response) => { + this.canPin = !!response.canpindiscussions; + }).catch(() => { + this.canPin = false; + }); }).then(() => { return this.ratingOffline.hasRatings('mod_forum', 'post', 'module', this.cmId, this.discussionId).then((hasRatings) => { this.hasOfflineRatings = hasRatings; @@ -491,6 +499,62 @@ export class AddonModForumDiscussionPage implements OnDestroy { locked: this.discussion.locked }; this.eventsProvider.trigger(AddonModForumProvider.CHANGE_DISCUSSION_EVENT, data, this.sitesProvider.getCurrentSiteId()); + + this.domUtils.showToast('addon.mod_forum.lockupdated', true); + }).catch((error) => { + this.domUtils.showErrorModal(error); + }).finally(() => { + modal.dismiss(); + }); + } + + /** + * Pin or unpin the discussion. + * + * @param {boolean} pinned True to pin the discussion, false to unpin it. + */ + setPinState(pinned: boolean): void { + const modal = this.domUtils.showModalLoading('core.sending', true); + + this.forumProvider.setPinState(this.discussionId, pinned).then(() => { + this.discussion.pinned = pinned; + + const data = { + forumId: this.forumId, + discussionId: this.discussionId, + cmId: this.cmId, + pinned: this.discussion.pinned + }; + this.eventsProvider.trigger(AddonModForumProvider.CHANGE_DISCUSSION_EVENT, data, this.sitesProvider.getCurrentSiteId()); + + this.domUtils.showToast('addon.mod_forum.pinupdated', true); + }).catch((error) => { + this.domUtils.showErrorModal(error); + }).finally(() => { + modal.dismiss(); + }); + } + + /** + * Star or unstar the discussion. + * + * @param {boolean} starred True to star the discussion, false to unstar it. + */ + toggleFavouriteState(starred: boolean): void { + const modal = this.domUtils.showModalLoading('core.sending', true); + + this.forumProvider.toggleFavouriteState(this.discussionId, starred).then(() => { + this.discussion.starred = starred; + + const data = { + forumId: this.forumId, + discussionId: this.discussionId, + cmId: this.cmId, + starred: this.discussion.starred + }; + this.eventsProvider.trigger(AddonModForumProvider.CHANGE_DISCUSSION_EVENT, data, this.sitesProvider.getCurrentSiteId()); + + this.domUtils.showToast('addon.mod_forum.favouriteupdated', true); }).catch((error) => { this.domUtils.showErrorModal(error); }).finally(() => { diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index 520ed72c5..91f1d2dad 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -784,6 +784,46 @@ export class AddonModForumProvider { }); } + /** + * Pin or unpin a discussion. + * + * @param {number} discussionId Discussion id. + * @param {boolean} locked True to pin, false to unpin. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resvoled when done. + * @since 3.7 + */ + setPinState(discussionId: number, pinned: boolean, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + const params = { + discussionid: discussionId, + targetstate: pinned ? 1 : 0 + }; + + return site.write('mod_forum_set_pin_state', params); + }); + } + + /** + * Star or unstar a discussion. + * + * @param {number} discussionId Discussion id. + * @param {boolean} starred True to star, false to unstar. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resvoled when done. + * @since 3.7 + */ + toggleFavouriteState(discussionId: number, starred: boolean, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + const params = { + discussionid: discussionId, + targetstate: starred ? 1 : 0 + }; + + return site.write('mod_forum_toggle_favourite_state', params); + }); + } + /** * Store the users data from a discussions/posts list. * diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 5cbef339b..90e9eb8f4 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -478,6 +478,7 @@ "addon.mod_forum.addanewdiscussion": "Add a new discussion topic", "addon.mod_forum.addanewquestion": "Add a new question", "addon.mod_forum.addanewtopic": "Add a new topic", + "addon.mod_forum.addtofavourites": "Star this discussion", "addon.mod_forum.advanced": "Advanced", "addon.mod_forum.cannotadddiscussion": "Adding discussions to this forum requires group membership.", "addon.mod_forum.cannotadddiscussionall": "You do not have permission to add a new discussion topic for all participants.", @@ -492,9 +493,11 @@ "addon.mod_forum.erroremptysubject": "Post subject cannot be empty.", "addon.mod_forum.errorgetforum": "Error getting forum data.", "addon.mod_forum.errorgetgroups": "Error getting group settings.", + "addon.mod_forum.favouriteupdated": "Your star option has been updated.", "addon.mod_forum.forumnodiscussionsyet": "There are no discussions yet in this forum.", "addon.mod_forum.group": "Group", "addon.mod_forum.locked": "Locked", + "addon.mod_forum.lockupdated": "The lock option has been updated.", "addon.mod_forum.message": "Message", "addon.mod_forum.modeflatnewestfirst": "Display replies flat, with newest first", "addon.mod_forum.modeflatoldestfirst": "Display replies flat, with oldest first", @@ -503,15 +506,19 @@ "addon.mod_forum.notlocked": "Lock", "addon.mod_forum.numdiscussions": "{{numdiscussions}} discussions", "addon.mod_forum.numreplies": "{{numreplies}} replies", + "addon.mod_forum.pindiscussion": "Pin this discussion", + "addon.mod_forum.pinupdated": "The pin option has been updated.", "addon.mod_forum.postisprivatereply": "This post was made privately and is not visible to all users.", "addon.mod_forum.posttoforum": "Post to forum", "addon.mod_forum.privatereply": "Reply privately", "addon.mod_forum.re": "Re:", "addon.mod_forum.refreshdiscussions": "Refresh discussions", "addon.mod_forum.refreshposts": "Refresh posts", + "addon.mod_forum.removefromfavourites": "Unstar this discussion", "addon.mod_forum.reply": "Reply", "addon.mod_forum.replyplaceholder": "Write your reply...", "addon.mod_forum.subject": "Subject", + "addon.mod_forum.unpindiscussion": "Unpin this discussion", "addon.mod_forum.unread": "Unread", "addon.mod_forum.unreadpostsnumber": "{{$a}} unread posts", "addon.mod_glossary.addentry": "Add a new entry", diff --git a/src/core/courses/components/course-progress/course-progress.scss b/src/core/courses/components/course-progress/course-progress.scss index fe3712586..471a710bf 100644 --- a/src/core/courses/components/course-progress/course-progress.scss +++ b/src/core/courses/components/course-progress/course-progress.scss @@ -1,5 +1,3 @@ -$core-star-color: $core-color !default; - ion-app.app-root core-courses-course-progress { ion-card.card { display: flex; diff --git a/src/theme/variables.scss b/src/theme/variables.scss index 3cedb3059..be50dc556 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -126,6 +126,7 @@ $popover-width: 280px !default; $item-divider-background: $gray-lighter !default; $item-divider-color: $black !default; +$core-star-color: $core-color !default; // Moodle Mobile variables // -------------------------------------------------- From ad6d5019f1d55435067161d6b532547cc00f4eb9 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 2 May 2019 10:42:46 +0200 Subject: [PATCH 117/263] MOBILE-2989 forum: Check whether the set pin state WS is available --- src/addon/mod/forum/pages/discussion/discussion.ts | 14 +++++++++----- src/addon/mod/forum/providers/forum.ts | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index 0f076b58b..50bff42b8 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -351,12 +351,16 @@ export class AddonModForumDiscussionPage implements OnDestroy { this.ratingInfo = ratingInfo; }); }).then(() => { - // Use the canAddDiscussion WS to check if the user can pin discussions. - return this.forumProvider.canAddDiscussionToAll(this.forumId).then((response) => { - this.canPin = !!response.canpindiscussions; - }).catch(() => { + if (this.forumProvider.isSetPinStateAvailableForSite()) { + // Use the canAddDiscussion WS to check if the user can pin discussions. + return this.forumProvider.canAddDiscussionToAll(this.forumId).then((response) => { + this.canPin = !!response.canpindiscussions; + }).catch(() => { + this.canPin = false; + }); + } else { this.canPin = false; - }); + } }).then(() => { return this.ratingOffline.hasRatings('mod_forum', 'post', 'module', this.cmId, this.discussionId).then((hasRatings) => { this.hasOfflineRatings = hasRatings; diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index 91f1d2dad..6bd80e7bd 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -14,6 +14,7 @@ import { Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; +import { CoreSite } from '@classes/site'; import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreGroupsProvider } from '@providers/groups'; @@ -784,6 +785,19 @@ export class AddonModForumProvider { }); } + /** + * Returns whether the set pin state WS is available. + * + * @param {CoreSite} [site] Site. If not defined, current site. + * @return {boolean} Whether it's available. + * @since 3.7 + */ + isSetPinStateAvailableForSite(site?: CoreSite): boolean { + site = site || this.sitesProvider.getCurrentSite(); + + return this.sitesProvider.wsAvailableInCurrentSite('mod_forum_set_pin_state'); + } + /** * Pin or unpin a discussion. * From 6ae25efd519a995a83ffd0a23c067cb93aebd501 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 6 May 2019 12:01:31 +0200 Subject: [PATCH 118/263] MOBILE-3008 core: Filter undefined in objectToArrayOfObjects --- src/core/course/pages/section/section.ts | 2 +- src/providers/utils/utils.ts | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/core/course/pages/section/section.ts b/src/core/course/pages/section/section.ts index 79ab769cf..c1dada99d 100644 --- a/src/core/course/pages/section/section.ts +++ b/src/core/course/pages/section/section.ts @@ -52,7 +52,7 @@ export class CoreCourseSectionPage implements OnDestroy { courseHandlers: CoreCourseOptionsHandlerToDisplay[]; courseMenuHandlers: CoreCourseOptionsMenuHandlerToDisplay[] = []; dataLoaded: boolean; - downloadEnabled: boolean; + downloadEnabled = false; downloadEnabledIcon = 'square-outline'; // Disabled by default. prefetchCourseData = { prefetchCourseIcon: 'spinner', diff --git a/src/providers/utils/utils.ts b/src/providers/utils/utils.ts index 8a45fa2d2..2276eaf85 100644 --- a/src/providers/utils/utils.ts +++ b/src/providers/utils/utils.ts @@ -977,14 +977,21 @@ export class CoreUtilsProvider { objectToArrayOfObjects(obj: object, keyName: string, valueName: string, sortByKey?: boolean, sortByValue?: boolean): any[] { // Get the entries from an object or primitive value. const getEntries = (elKey, value): any[] | any => { - if (typeof value == 'object') { + if (typeof value == 'undefined' || value == null) { + // Filter undefined and null values. + return; + } else if (typeof value == 'object') { // It's an object, return at least an entry for each property. const keys = Object.keys(value); let entries = []; keys.forEach((key) => { - const newElKey = elKey ? elKey + '[' + key + ']' : key; - entries = entries.concat(getEntries(newElKey, value[key])); + const newElKey = elKey ? elKey + '[' + key + ']' : key, + subEntries = getEntries(newElKey, value[key]); + + if (subEntries) { + entries = entries.concat(subEntries); + } }); return entries; From 73b890a014781c3f4b9abd9b2a1e41ed7ca3b1fb Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 7 May 2019 17:56:21 +0200 Subject: [PATCH 119/263] MOBILE-2962 message: Hide mute in self conversations --- src/addon/messages/pages/discussion/discussion.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/addon/messages/pages/discussion/discussion.html b/src/addon/messages/pages/discussion/discussion.html index 74dba5553..10170272e 100644 --- a/src/addon/messages/pages/discussion/discussion.html +++ b/src/addon/messages/pages/discussion/discussion.html @@ -16,7 +16,7 @@ - + From 80bb413eebb6e50044cddee40ba59c917e2cdec1 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 29 Apr 2019 16:16:31 +0200 Subject: [PATCH 120/263] MOBILE-2938 notifications: Support appurl field --- .../components/actions/actions.ts | 27 +++++++++++--- .../providers/push-click-handler.ts | 35 ++++++++++++++++--- 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/src/addon/notifications/components/actions/actions.ts b/src/addon/notifications/components/actions/actions.ts index 7835d3829..2d56bc768 100644 --- a/src/addon/notifications/components/actions/actions.ts +++ b/src/addon/notifications/components/actions/actions.ts @@ -37,12 +37,29 @@ export class AddonNotificationsActionsComponent implements OnInit { * Component being initialized. */ ngOnInit(): void { - if (!this.contextUrl) { - // No contexturl, nothing to do. + if (!this.contextUrl && (!this.data || !this.data.appurl)) { + // No URL, nothing to do. return; } - this.contentLinksDelegate.getActionsFor(this.contextUrl, this.courseId, undefined, this.data).then((actions) => { + let promise; + + // Treat appurl first if any. + if (this.data && this.data.appurl) { + promise = this.contentLinksDelegate.getActionsFor(this.data.appurl, this.courseId, undefined, this.data); + } else { + promise = Promise.resolve([]); + } + + promise.then((actions) => { + if (!actions.length && this.contextUrl) { + // No appurl or cannot handle it. Try with contextUrl. + return this.contentLinksDelegate.getActionsFor(this.contextUrl, this.courseId, undefined, this.data); + } + + return actions; + }).then((actions) => { + if (!actions.length) { // URL is not supported. Add an action to open it in browser. actions.push({ @@ -63,6 +80,8 @@ export class AddonNotificationsActionsComponent implements OnInit { * @param {NavController} [navCtrl] NavController. */ protected defaultAction(siteId: string, navCtrl?: NavController): void { - this.sitesProvider.getCurrentSite().openInBrowserWithAutoLogin(this.contextUrl); + const url = (this.data && this.data.appurl) || this.contextUrl; + + this.sitesProvider.getCurrentSite().openInBrowserWithAutoLogin(url); } } diff --git a/src/addon/notifications/providers/push-click-handler.ts b/src/addon/notifications/providers/push-click-handler.ts index 11450bb23..54178d1bf 100644 --- a/src/addon/notifications/providers/push-click-handler.ts +++ b/src/addon/notifications/providers/push-click-handler.ts @@ -61,10 +61,37 @@ export class AddonNotificationsPushClickHandler implements CorePushNotifications * @return {Promise} Promise resolved when done. */ handleClick(notification: any): Promise { - return this.notificationsProvider.invalidateNotificationsList(notification.site).catch(() => { - // Ignore errors. - }).then(() => { - return this.linkHelper.goInSite(undefined, 'AddonNotificationsListPage', undefined, notification.site); + let promise; + + // Try to handle the appurl first. + if (notification.customdata && notification.customdata.appurl) { + promise = this.linkHelper.handleLink(notification.customdata.appurl); + } else { + promise = Promise.resolve(false); + } + + return promise.then((treated) => { + + if (!treated) { + // No link or cannot be handled by the app. Try to handle the contexturl now. + if (notification.contexturl) { + return this.linkHelper.handleLink(notification.contexturl); + } else { + return false; + } + } + + return true; + }).then((treated) => { + + if (!treated) { + // No link or cannot be handled by the app. Open the notifications page. + return this.notificationsProvider.invalidateNotificationsList(notification.site).catch(() => { + // Ignore errors. + }).then(() => { + return this.linkHelper.goInSite(undefined, 'AddonNotificationsListPage', undefined, notification.site); + }); + } }); } } From d550f1d18dda89e5a0d54de16f5ce93dca9ddd23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 3 May 2019 11:53:34 +0200 Subject: [PATCH 121/263] MOBILE-2959 ionic: Add a shade to Android status bar --- .../remotethemes/providers/remotethemes.ts | 11 ++++- src/app/app.component.ts | 23 +--------- src/config.json | 6 ++- src/providers/app.ts | 44 ++++++++++++++++++- 4 files changed, 59 insertions(+), 25 deletions(-) diff --git a/src/addon/remotethemes/providers/remotethemes.ts b/src/addon/remotethemes/providers/remotethemes.ts index f0555d656..7b30b31ce 100644 --- a/src/addon/remotethemes/providers/remotethemes.ts +++ b/src/addon/remotethemes/providers/remotethemes.ts @@ -14,6 +14,7 @@ import { Injectable } from '@angular/core'; import { Http } from '@angular/http'; +import { CoreAppProvider } from '@providers/app'; import { CoreFileProvider } from '@providers/file'; import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreLoggerProvider } from '@providers/logger'; @@ -34,7 +35,8 @@ export class AddonRemoteThemesProvider { protected stylesEls: {[siteId: string]: {element: HTMLStyleElement, hash: string}} = {}; constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private fileProvider: CoreFileProvider, - private filepoolProvider: CoreFilepoolProvider, private http: Http, private utils: CoreUtilsProvider) { + private filepoolProvider: CoreFilepoolProvider, private http: Http, private utils: CoreUtilsProvider, + private appProvider: CoreAppProvider) { this.logger = logger.getInstance('AddonRemoteThemesProvider'); } @@ -75,6 +77,9 @@ export class AddonRemoteThemesProvider { styles.forEach((style) => { this.disableElement(style, true); }); + + // Set StatusBar properties. + this.appProvider.setStatusBarColor(); } /** @@ -91,6 +96,10 @@ export class AddonRemoteThemesProvider { } else { element.disabled = false; element.removeAttribute('disabled'); + + if (element.innerHTML != '') { + this.appProvider.resetStatusBarColor(); + } } } diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 3df8327a3..293c8d407 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -14,7 +14,6 @@ import { Component, OnInit, NgZone } from '@angular/core'; import { Platform, IonicApp } from 'ionic-angular'; -import { StatusBar } from '@ionic-native/status-bar'; import { CoreAppProvider } from '@providers/app'; import { CoreEventsProvider } from '@providers/events'; import { CoreLangProvider } from '@providers/lang'; @@ -23,7 +22,6 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreLoginHelperProvider } from '@core/login/providers/helper'; import { Keyboard } from '@ionic-native/keyboard'; import { ScreenOrientation } from '@ionic-native/screen-orientation'; -import { CoreConfigConstants } from '../configconstants'; @Component({ templateUrl: 'app.html' @@ -35,7 +33,7 @@ export class MoodleMobileApp implements OnInit { protected logger; protected lastUrls = {}; - constructor(private platform: Platform, statusBar: StatusBar, logger: CoreLoggerProvider, keyboard: Keyboard, + constructor(private platform: Platform, logger: CoreLoggerProvider, keyboard: Keyboard, private eventsProvider: CoreEventsProvider, private loginHelper: CoreLoginHelperProvider, private zone: NgZone, private appProvider: CoreAppProvider, private langProvider: CoreLangProvider, private sitesProvider: CoreSitesProvider, private screenOrientation: ScreenOrientation, app: IonicApp) { @@ -46,24 +44,7 @@ export class MoodleMobileApp implements OnInit { // Here you can do any higher level native things you might need. // Set StatusBar properties. - if (typeof CoreConfigConstants.statusbarbgios == 'string' && platform.is('ios')) { - // IOS Status bar properties. - statusBar.overlaysWebView(false); - statusBar.backgroundColorByHexString(CoreConfigConstants.statusbarbgios); - CoreConfigConstants.statusbarlighttextios ? statusBar.styleLightContent() : statusBar.styleDefault(); - } else if (typeof CoreConfigConstants.statusbarbgandroid == 'string' && platform.is('android')) { - // Android Status bar properties. - statusBar.backgroundColorByHexString(CoreConfigConstants.statusbarbgandroid); - CoreConfigConstants.statusbarlighttextandroid ? statusBar.styleLightContent() : statusBar.styleDefault(); - } else if (typeof CoreConfigConstants.statusbarbg == 'string') { - // Generic Status bar properties. - platform.is('ios') && statusBar.overlaysWebView(false); - statusBar.backgroundColorByHexString(CoreConfigConstants.statusbarbg); - CoreConfigConstants.statusbarlighttext ? statusBar.styleLightContent() : statusBar.styleDefault(); - } else { - // Default Status bar properties. - platform.is('android') ? statusBar.styleLightContent() : statusBar.styleDefault(); - } + this.appProvider.setStatusBarColor(); keyboard.hideFormAccessoryBar(false); diff --git a/src/config.json b/src/config.json index e259e3e0a..cd7c0fd99 100644 --- a/src/config.json +++ b/src/config.json @@ -77,6 +77,8 @@ "statusbarlighttext": false, "statusbarbgios": false, "statusbarlighttextios": false, - "statusbarbgandroid": false, - "statusbarlighttextandroid": false + "statusbarbgandroid": "#df7310", + "statusbarlighttextandroid": true, + "statusbarbgremotetheme": "#000000", + "statusbarlighttextremotetheme": true } diff --git a/src/providers/app.ts b/src/providers/app.ts index 6fa8ad847..f61dca669 100644 --- a/src/providers/app.ts +++ b/src/providers/app.ts @@ -16,11 +16,13 @@ import { Injectable, NgZone } from '@angular/core'; import { Platform, App, NavController, MenuController } from 'ionic-angular'; import { Keyboard } from '@ionic-native/keyboard'; import { Network } from '@ionic-native/network'; +import { StatusBar } from '@ionic-native/status-bar'; import { CoreDbProvider } from './db'; import { CoreLoggerProvider } from './logger'; import { CoreEventsProvider } from './events'; import { SQLiteDB } from '@classes/sqlitedb'; +import { CoreConfigConstants } from '../configconstants'; /** * Data stored for a redirect to another page/site. @@ -72,7 +74,7 @@ export class CoreAppProvider { constructor(dbProvider: CoreDbProvider, private platform: Platform, private keyboard: Keyboard, private appCtrl: App, private network: Network, logger: CoreLoggerProvider, events: CoreEventsProvider, zone: NgZone, - private menuCtrl: MenuController) { + private menuCtrl: MenuController, private statusBar: StatusBar) { this.logger = logger.getInstance('CoreAppProvider'); this.db = dbProvider.getDB(this.DBNAME); @@ -490,4 +492,44 @@ export class CoreAppProvider { return index >= 0 && !!this.backActions.splice(index, 1); }; } + + /** + * Set StatusBar color depending on platform. + */ + setStatusBarColor(): void { + if (typeof CoreConfigConstants.statusbarbgios == 'string' && this.platform.is('ios')) { + // IOS Status bar properties. + this.statusBar.overlaysWebView(false); + this.statusBar.backgroundColorByHexString(CoreConfigConstants.statusbarbgios); + CoreConfigConstants.statusbarlighttextios ? this.statusBar.styleLightContent() : this.statusBar.styleDefault(); + } else if (typeof CoreConfigConstants.statusbarbgandroid == 'string' && this.platform.is('android')) { + // Android Status bar properties. + this.statusBar.backgroundColorByHexString(CoreConfigConstants.statusbarbgandroid); + CoreConfigConstants.statusbarlighttextandroid ? this.statusBar.styleLightContent() : this.statusBar.styleDefault(); + } else if (typeof CoreConfigConstants.statusbarbg == 'string') { + // Generic Status bar properties. + this.platform.is('ios') && this.statusBar.overlaysWebView(false); + this.statusBar.backgroundColorByHexString(CoreConfigConstants.statusbarbg); + CoreConfigConstants.statusbarlighttext ? this.statusBar.styleLightContent() : this.statusBar.styleDefault(); + } else { + // Default Status bar properties. + this.platform.is('android') ? this.statusBar.styleLightContent() : this.statusBar.styleDefault(); + } + } + + /** + * Reset StatusBar color if any was set. + */ + resetStatusBarColor(): void { + if (typeof CoreConfigConstants.statusbarbgremotetheme == 'string' && + ((typeof CoreConfigConstants.statusbarbgios == 'string' && this.platform.is('ios')) || + (typeof CoreConfigConstants.statusbarbgandroid == 'string' && this.platform.is('android')) || + typeof CoreConfigConstants.statusbarbg == 'string')) { + // If the status bar has been overriden and there's a fallback color for remote themes, use it now. + this.platform.is('ios') && this.statusBar.overlaysWebView(false); + this.statusBar.backgroundColorByHexString(CoreConfigConstants.statusbarbgremotetheme); + CoreConfigConstants.statusbarlighttextremotetheme ? + this.statusBar.styleLightContent() : this.statusBar.styleDefault(); + } + } } From 38a7dd355e568c3f92be7b44c02f658cdf3bcb66 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 8 May 2019 11:36:51 +0200 Subject: [PATCH 122/263] MOBILE-3010 core: Support Bootstrap tooltips --- src/components/bs-tooltip/bs-tooltip.scss | 2 + src/components/bs-tooltip/bs-tooltip.ts | 33 +++++++++++++ .../bs-tooltip/core-bs-tooltip.html | 4 ++ src/components/components.module.ts | 10 ++-- src/directives/format-text.ts | 2 + src/providers/utils/dom.ts | 46 +++++++++++++++++-- 6 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 src/components/bs-tooltip/bs-tooltip.scss create mode 100644 src/components/bs-tooltip/bs-tooltip.ts create mode 100644 src/components/bs-tooltip/core-bs-tooltip.html diff --git a/src/components/bs-tooltip/bs-tooltip.scss b/src/components/bs-tooltip/bs-tooltip.scss new file mode 100644 index 000000000..54640d936 --- /dev/null +++ b/src/components/bs-tooltip/bs-tooltip.scss @@ -0,0 +1,2 @@ +ion-app.app-root core-bs-tooltip { +} diff --git a/src/components/bs-tooltip/bs-tooltip.ts b/src/components/bs-tooltip/bs-tooltip.ts new file mode 100644 index 000000000..8248fa9f1 --- /dev/null +++ b/src/components/bs-tooltip/bs-tooltip.ts @@ -0,0 +1,33 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Component } from '@angular/core'; +import { NavParams } from 'ionic-angular'; + +/** + * Component to display a Bootstrap Tooltip in a popover. + */ +@Component({ + selector: 'core-bs-tooltip', + templateUrl: 'core-bs-tooltip.html' +}) +export class CoreBSTooltipComponent { + content: string; + html: boolean; + + constructor(navParams: NavParams) { + this.content = navParams.get('content') || ''; + this.html = !!navParams.get('html'); + } +} diff --git a/src/components/bs-tooltip/core-bs-tooltip.html b/src/components/bs-tooltip/core-bs-tooltip.html new file mode 100644 index 000000000..198b17159 --- /dev/null +++ b/src/components/bs-tooltip/core-bs-tooltip.html @@ -0,0 +1,4 @@ + +

+

{{content}}

+
\ No newline at end of file diff --git a/src/components/components.module.ts b/src/components/components.module.ts index e72475548..b562dbec3 100644 --- a/src/components/components.module.ts +++ b/src/components/components.module.ts @@ -52,6 +52,7 @@ import { CoreIonTabComponent } from './ion-tabs/ion-tab'; import { CoreInfiniteLoadingComponent } from './infinite-loading/infinite-loading'; import { CoreUserAvatarComponent } from './user-avatar/user-avatar'; import { CoreStyleComponent } from './style/style'; +import { CoreBSTooltipComponent } from './bs-tooltip/bs-tooltip'; @NgModule({ declarations: [ @@ -89,12 +90,14 @@ import { CoreStyleComponent } from './style/style'; CoreIonTabComponent, CoreInfiniteLoadingComponent, CoreUserAvatarComponent, - CoreStyleComponent + CoreStyleComponent, + CoreBSTooltipComponent ], entryComponents: [ CoreContextMenuPopoverComponent, CoreCoursePickerMenuPopoverComponent, - CoreRecaptchaModalComponent + CoreRecaptchaModalComponent, + CoreBSTooltipComponent ], imports: [ IonicModule, @@ -134,7 +137,8 @@ import { CoreStyleComponent } from './style/style'; CoreIonTabComponent, CoreInfiniteLoadingComponent, CoreUserAvatarComponent, - CoreStyleComponent + CoreStyleComponent, + CoreBSTooltipComponent ] }) export class CoreComponentsModule {} diff --git a/src/directives/format-text.ts b/src/directives/format-text.ts index c54b4389d..8cfbd3067 100644 --- a/src/directives/format-text.ts +++ b/src/directives/format-text.ts @@ -442,6 +442,8 @@ export class CoreFormatTextDirective implements OnChanges { this.iframeUtils.treatFrame(frame); }); + this.domUtils.handleBootstrapTooltips(div); + return div; }); } diff --git a/src/providers/utils/dom.ts b/src/providers/utils/dom.ts index bf303e859..d9c192341 100644 --- a/src/providers/utils/dom.ts +++ b/src/providers/utils/dom.ts @@ -14,8 +14,8 @@ import { Injectable, SimpleChange } from '@angular/core'; import { - LoadingController, Loading, ToastController, Toast, AlertController, Alert, Platform, Content, - ModalController + LoadingController, Loading, ToastController, Toast, AlertController, Alert, Platform, Content, PopoverController, + ModalController, } from 'ionic-angular'; import { DomSanitizer } from '@angular/platform-browser'; import { TranslateService } from '@ngx-translate/core'; @@ -24,6 +24,7 @@ import { CoreAppProvider } from '../app'; import { CoreConfigProvider } from '../config'; import { CoreUrlUtilsProvider } from './url'; import { CoreConstants } from '@core/constants'; +import { CoreBSTooltipComponent } from '@components/bs-tooltip/bs-tooltip'; import { Md5 } from 'ts-md5/dist/md5'; import { Subject } from 'rxjs'; @@ -65,7 +66,7 @@ export class CoreDomUtilsProvider { constructor(private translate: TranslateService, private loadingCtrl: LoadingController, private toastCtrl: ToastController, private alertCtrl: AlertController, private textUtils: CoreTextUtilsProvider, private appProvider: CoreAppProvider, private platform: Platform, private configProvider: CoreConfigProvider, private urlUtils: CoreUrlUtilsProvider, - private modalCtrl: ModalController, private sanitizer: DomSanitizer) { + private modalCtrl: ModalController, private sanitizer: DomSanitizer, private popoverCtrl: PopoverController) { // Check if debug messages should be displayed. configProvider.get(CoreConstants.SETTINGS_DEBUG_DISPLAY, false).then((debugDisplay) => { @@ -564,6 +565,45 @@ export class CoreDomUtilsProvider { return this.instances[id]; } + /** + * Handle bootstrap tooltips in a certain element. + * + * @param {HTMLElement} element Element to check. + */ + handleBootstrapTooltips(element: HTMLElement): void { + const els = Array.from(element.querySelectorAll('[data-toggle="tooltip"]')); + + els.forEach((el) => { + const content = el.getAttribute('title') || el.getAttribute('data-original-title'), + trigger = el.getAttribute('data-trigger') || 'hover focus', + treated = el.getAttribute('data-bstooltip-treated'); + + if (!content || treated === 'true' || + (trigger.indexOf('hover') == -1 && trigger.indexOf('focus') == -1 && trigger.indexOf('click') == -1)) { + return; + } + + el.setAttribute('data-bstooltip-treated', 'true'); // Mark it as treated. + + // Store the title in data-original-title instead of title, like BS does. + el.setAttribute('data-original-title', content); + el.setAttribute('title', ''); + + el.addEventListener('click', (e) => { + const html = el.getAttribute('data-html'); + + const popover = this.popoverCtrl.create(CoreBSTooltipComponent, { + content: content, + html: html === 'true' + }); + + popover.present({ + ev: e + }); + }); + }); + } + /** * Check if an element is outside of screen (viewport). * From 1f42ea990aec449008afa7cd73f189cdbd368878 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 8 May 2019 12:05:36 +0200 Subject: [PATCH 123/263] MOBILE-3010 resource: Fix error if no mimetype --- src/addon/mod/resource/providers/module-handler.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/resource/providers/module-handler.ts b/src/addon/mod/resource/providers/module-handler.ts index 905f192e5..573546982 100644 --- a/src/addon/mod/resource/providers/module-handler.ts +++ b/src/addon/mod/resource/providers/module-handler.ts @@ -175,7 +175,9 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { if (module.contentsinfo) { // No need to use the list of files. const mimetype = module.contentsinfo.mimetypes[0]; - resourceData.icon = this.mimetypeUtils.getMimetypeIcon(mimetype); + if (mimetype) { + resourceData.icon = this.mimetypeUtils.getMimetypeIcon(mimetype); + } resourceData.extra = this.textUtils.cleanTags(module.afterlink); } else if (files && files.length) { From a2a291f4d25286c7fba04f99d172195877633d1a Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 8 May 2019 14:46:50 +0200 Subject: [PATCH 124/263] MOBILE-3003 feedback: Display range in numeric questions --- scripts/langindex.json | 2 ++ src/addon/mod/feedback/lang/en.json | 2 ++ src/addon/mod/feedback/pages/form/form.html | 1 + src/addon/mod/feedback/pages/form/form.scss | 3 ++ src/addon/mod/feedback/providers/helper.ts | 34 +++++++++++++++++++-- src/assets/lang/en.json | 2 ++ 6 files changed, 41 insertions(+), 3 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index 2560b10c6..4e3c2d93d 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -453,6 +453,8 @@ "addon.mod_feedback.feedbackclose": "feedback", "addon.mod_feedback.feedbackopen": "feedback", "addon.mod_feedback.mapcourses": "feedback", + "addon.mod_feedback.maximal": "feedback", + "addon.mod_feedback.minimal": "feedback", "addon.mod_feedback.mode": "feedback", "addon.mod_feedback.modulenameplural": "feedback", "addon.mod_feedback.next_page": "feedback", diff --git a/src/addon/mod/feedback/lang/en.json b/src/addon/mod/feedback/lang/en.json index 01eec2c06..68e0a2b12 100644 --- a/src/addon/mod/feedback/lang/en.json +++ b/src/addon/mod/feedback/lang/en.json @@ -12,6 +12,8 @@ "feedback_is_not_open": "The feedback is not open", "feedback_submitted_offline": "This feedback has been saved to be submitted later.", "mapcourses": "Map feedback to courses", + "maximal": "Maximum", + "minimal": "Minimum", "mode": "Mode", "modulenameplural": "Feedback", "next_page": "Next page", diff --git a/src/addon/mod/feedback/pages/form/form.html b/src/addon/mod/feedback/pages/form/form.html index 29405ccb4..2725d3525 100644 --- a/src/addon/mod/feedback/pages/form/form.html +++ b/src/addon/mod/feedback/pages/form/form.html @@ -18,6 +18,7 @@ {{item.itemnumber}}. + {{item.postfix}}
diff --git a/src/addon/mod/feedback/pages/form/form.scss b/src/addon/mod/feedback/pages/form/form.scss index f4674d933..95b1e2c54 100644 --- a/src/addon/mod/feedback/pages/form/form.scss +++ b/src/addon/mod/feedback/pages/form/form.scss @@ -12,4 +12,7 @@ ion-app.app-root page-addon-mod-feedback-form { .item-wp .addon-mod_feedback-form-content { @include margin($item-wp-padding-media-top, ($item-wp-padding-end / 2), $item-wp-padding-media-bottom, 0); } + .addon-mod_feedback-postfix { + font-size: 1.4rem; + } } \ No newline at end of file diff --git a/src/addon/mod/feedback/providers/helper.ts b/src/addon/mod/feedback/providers/helper.ts index 45c7b8a3a..e66a24287 100644 --- a/src/addon/mod/feedback/providers/helper.ts +++ b/src/addon/mod/feedback/providers/helper.ts @@ -22,6 +22,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; +import { CoreUtilsProvider } from '@providers/utils/utils'; import { TranslateService } from '@ngx-translate/core'; /** @@ -38,7 +39,7 @@ export class AddonModFeedbackHelperProvider { protected textUtils: CoreTextUtilsProvider, protected translate: TranslateService, protected timeUtils: CoreTimeUtilsProvider, protected domUtils: CoreDomUtilsProvider, protected courseProvider: CoreCourseProvider, protected linkHelper: CoreContentLinksHelperProvider, - protected sitesProvider: CoreSitesProvider) { + protected sitesProvider: CoreSitesProvider, protected utils: CoreUtilsProvider) { } /** @@ -346,9 +347,13 @@ export class AddonModFeedbackHelperProvider { item.template = 'numeric'; const range = item.presentation.split(AddonModFeedbackProvider.LINE_SEP) || []; - item.rangefrom = range.length > 0 ? parseInt(range[0], 10) || '' : ''; - item.rangeto = range.length > 1 ? parseInt(range[1], 10) || '' : ''; + range[0] = range.length > 0 ? parseInt(range[0], 10) : undefined; + range[1] = range.length > 1 ? parseInt(range[1], 10) : undefined; + + item.rangefrom = typeof range[0] == 'number' && !isNaN(range[0]) ? range[0] : ''; + item.rangeto = typeof range[1] == 'number' && !isNaN(range[1]) ? range[1] : ''; item.value = typeof item.rawValue != 'undefined' ? parseFloat(item.rawValue) : ''; + item.postfix = this.getNumericBoundariesForDisplay(item.rangefrom, item.rangeto); return item; } @@ -493,4 +498,27 @@ export class AddonModFeedbackHelperProvider { return item; } + /** + * Returns human-readable boundaries (min - max). + * Based on Moodle's get_boundaries_for_display. + * + * @param {number} rangeFrom Range from. + * @param {number} rangeTo Range to. + * @return {string} Human-readable boundaries. + */ + protected getNumericBoundariesForDisplay(rangeFrom: number, rangeTo: number): string { + const rangeFromSet = typeof rangeFrom == 'number', + rangeToSet = typeof rangeTo == 'number'; + + if (!rangeFromSet && rangeToSet) { + return ' (' + this.translate.instant('addon.mod_feedback.maximal') + ': ' + this.utils.formatFloat(rangeTo) + ')'; + } else if (rangeFromSet && !rangeToSet) { + return ' (' + this.translate.instant('addon.mod_feedback.minimal') + ': ' + this.utils.formatFloat(rangeFrom) + ')'; + } else if (!rangeFromSet && !rangeToSet) { + return ''; + } + + return ' (' + this.utils.formatFloat(rangeFrom) + ' - ' + this.utils.formatFloat(rangeTo) + ')'; + } + } diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 19b1b4666..12840934a 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -453,6 +453,8 @@ "addon.mod_feedback.feedbackclose": "Allow answers to", "addon.mod_feedback.feedbackopen": "Allow answers from", "addon.mod_feedback.mapcourses": "Map feedback to courses", + "addon.mod_feedback.maximal": "Maximum", + "addon.mod_feedback.minimal": "Minimum", "addon.mod_feedback.mode": "Mode", "addon.mod_feedback.modulenameplural": "Feedback", "addon.mod_feedback.next_page": "Next page", From 3cbc07e376ca5be40a1492f3f7ce6445fe1ba9d2 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Fri, 10 May 2019 14:58:42 +0200 Subject: [PATCH 125/263] MOBILE-2900 core: Update Moodle 3.7 version number --- src/classes/site.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index caf6f40a0..ec988b24b 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -205,7 +205,7 @@ export class CoreSite { 3.4: 2017111300, 3.5: 2018051700, 3.6: 2018120300, - 3.7: 2019030700 // @todo: Replace it with the right 3.7 date when released + 3.7: 2019052000 }; // Rest of variables. From 5b70fca402a13dc805b14567a7706139ef630621 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Fri, 10 May 2019 15:27:18 +0200 Subject: [PATCH 126/263] MOBILE-2985 forum: Private reply checkbox displayed by default --- .../mod/forum/components/post/addon-mod-forum-post.html | 8 ++++---- src/addon/mod/forum/components/post/post.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/addon/mod/forum/components/post/addon-mod-forum-post.html b/src/addon/mod/forum/components/post/addon-mod-forum-post.html index 8918cadb5..cb8ffc1b3 100644 --- a/src/addon/mod/forum/components/post/addon-mod-forum-post.html +++ b/src/addon/mod/forum/components/post/addon-mod-forum-post.html @@ -51,6 +51,10 @@ {{ 'addon.mod_forum.message' | translate }} + + {{ 'addon.mod_forum.privatereply' | translate }} + + @@ -58,10 +62,6 @@ - - {{ 'addon.mod_forum.privatereply' | translate }} - - diff --git a/src/addon/mod/forum/components/post/post.ts b/src/addon/mod/forum/components/post/post.ts index 92251ae5c..581c7eefe 100644 --- a/src/addon/mod/forum/components/post/post.ts +++ b/src/addon/mod/forum/components/post/post.ts @@ -122,7 +122,7 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy { this.originalData.isprivatereply = this.replyData.isprivatereply; // Show advanced fields if any of them has not the default value. - this.advanced = this.replyData.files.length > 0 || this.originalData.isprivatereply; + this.advanced = this.replyData.files.length > 0; } /** From d3420d9be68818ea98402f3d979a8d6b02be808f Mon Sep 17 00:00:00 2001 From: Mark Johnson Date: Wed, 1 May 2019 14:20:25 +0100 Subject: [PATCH 127/263] MOBILE-2939 offline: Improve download confirm and error messages. --- src/core/constants.ts | 2 + src/core/course/lang/en.json | 10 +++-- src/providers/filepool.ts | 21 +++++++--- src/providers/utils/dom.ts | 81 ++++++++++++++++++++++++++++-------- src/providers/utils/text.ts | 2 +- 5 files changed, 89 insertions(+), 27 deletions(-) diff --git a/src/core/constants.ts b/src/core/constants.ts index 2fc8bfc79..ea038eece 100644 --- a/src/core/constants.ts +++ b/src/core/constants.ts @@ -23,6 +23,8 @@ export class CoreConstants { static SECONDS_MINUTE = 60; static WIFI_DOWNLOAD_THRESHOLD = 104857600; // 100MB. static DOWNLOAD_THRESHOLD = 10485760; // 10MB. + static MINIMUM_FREE_SPACE = 10485760; // 10MB. + static IOS_FREE_SPACE_THRESHOLD = 524288000; // 500MB. static DONT_SHOW_ERROR = 'CoreDontShowError'; static NO_SITE_ID = 'NoSite'; diff --git a/src/core/course/lang/en.json b/src/core/course/lang/en.json index 0a2229b22..314f3a81c 100644 --- a/src/core/course/lang/en.json +++ b/src/core/course/lang/en.json @@ -4,10 +4,12 @@ "activitynotyetviewablesiteupgradeneeded": "Your organisation's Moodle installation needs to be updated.", "allsections": "All sections", "askadmintosupport": "Contact the site administrator and tell them you want to use this activity with the Moodle Mobile app.", + "availablespace": " You currently have about {{available}} free space.", "confirmdeletemodulefiles": "Are you sure you want to delete these files?", - "confirmdownload": "You are about to download {{size}}. Are you sure you want to continue?", - "confirmdownloadunknownsize": "It was not possible to calculate the size of the download. Are you sure you want to continue?", - "confirmpartialdownloadsize": "You are about to download at least {{size}}. Are you sure you want to continue?", + "confirmdownload": "You are about to download {{size}}.{{availableSpace}} Are you sure you want to continue?", + "confirmdownloadunknownsize": "It was not possible to calculate the size of the download.{{availableSpace}} Are you sure you want to continue?", + "confirmpartialdownloadsize": "You are about to download at least {{size}}.{{availableSpace}} Are you sure you want to continue?", + "confirmlimiteddownload": "You are not currently connected to WiFi. ", "contents": "Contents", "couldnotloadsectioncontent": "Could not load the section content. Please try again later.", "couldnotloadsections": "Could not load the sections. Please try again later.", @@ -18,6 +20,8 @@ "errorgetmodule": "Error getting activity data.", "hiddenfromstudents": "Hidden from students", "hiddenoncoursepage": "Available but not shown on course page", + "insufficientavailablespace": "You are trying to download {{size}}. This will leave your device with insufficient space to operate normally. Please clear some storage space first.", + "insufficientavailablequota": "Your device could not allocate space to save this download. It may be reserving space for app and system updates. Please clear some storage space first.", "manualcompletionnotsynced": "Manual completion not synchronised.", "nocontentavailable": "No content available at the moment.", "overriddennotice": "Your final grade from this activity was manually adjusted.", diff --git a/src/providers/filepool.ts b/src/providers/filepool.ts index d148c7f72..7b3725174 100644 --- a/src/providers/filepool.ts +++ b/src/providers/filepool.ts @@ -1122,10 +1122,10 @@ export class CoreFilepoolProvider { return Promise.all(promises).then(() => { // Success prefetching, store package as downloaded. return this.storePackageStatus(siteId, CoreConstants.DOWNLOADED, component, componentId, extra); - }).catch(() => { + }).catch((error) => { // Error downloading, go back to previous status and reject the promise. return this.setPackagePreviousStatus(siteId, component, componentId).then(() => { - return Promise.reject(null); + return Promise.reject(error); }); }); @@ -2566,18 +2566,26 @@ export class CoreFilepoolProvider { dropFromQueue = true; } + let errorMessage = null; + // Some Android devices restrict the amount of usable storage using quotas. + // If this quota would be exceeded by the download, it throws an exception. + // We catch this exception here, and report a meaningful error message to the user. + if (errorObject instanceof FileTransferError && errorObject.exception.includes('EDQUOT')) { + errorMessage = 'core.course.insufficientavailablequota'; + } + if (dropFromQueue) { this.logger.debug('Item dropped from queue due to error: ' + fileUrl, errorObject); return this.removeFromQueue(siteId, fileId).catch(() => { // Consider this as a silent error, never reject the promise here. }).then(() => { - this.treatQueueDeferred(siteId, fileId, false); + this.treatQueueDeferred(siteId, fileId, false, errorMessage); this.notifyFileDownloadError(siteId, fileId); }); } else { // We considered the file as legit but did not get it, failure. - this.treatQueueDeferred(siteId, fileId, false); + this.treatQueueDeferred(siteId, fileId, false, errorMessage); this.notifyFileDownloadError(siteId, fileId); return Promise.reject(errorObject); @@ -2912,13 +2920,14 @@ export class CoreFilepoolProvider { * @param {string} siteId The site ID. * @param {string} fileId The file ID. * @param {boolean} resolve True if promise should be resolved, false if it should be rejected. + * @param {string} error String identifier for error message, if rejected. */ - protected treatQueueDeferred(siteId: string, fileId: string, resolve: boolean): void { + protected treatQueueDeferred(siteId: string, fileId: string, resolve: boolean, error?: string): void { if (this.queueDeferreds[siteId] && this.queueDeferreds[siteId][fileId]) { if (resolve) { this.queueDeferreds[siteId][fileId].resolve(); } else { - this.queueDeferreds[siteId][fileId].reject(); + this.queueDeferreds[siteId][fileId].reject(error); } delete this.queueDeferreds[siteId][fileId]; } diff --git a/src/providers/utils/dom.ts b/src/providers/utils/dom.ts index 912b0dc49..1af9102c2 100644 --- a/src/providers/utils/dom.ts +++ b/src/providers/utils/dom.ts @@ -23,6 +23,7 @@ import { CoreTextUtilsProvider } from './text'; import { CoreAppProvider } from '../app'; import { CoreConfigProvider } from '../config'; import { CoreUrlUtilsProvider } from './url'; +import { CoreFileProvider } from '@providers/file'; import { CoreConstants } from '@core/constants'; import { CoreBSTooltipComponent } from '@components/bs-tooltip/bs-tooltip'; import { Md5 } from 'ts-md5/dist/md5'; @@ -66,7 +67,8 @@ export class CoreDomUtilsProvider { constructor(private translate: TranslateService, private loadingCtrl: LoadingController, private toastCtrl: ToastController, private alertCtrl: AlertController, private textUtils: CoreTextUtilsProvider, private appProvider: CoreAppProvider, private platform: Platform, private configProvider: CoreConfigProvider, private urlUtils: CoreUrlUtilsProvider, - private modalCtrl: ModalController, private sanitizer: DomSanitizer, private popoverCtrl: PopoverController) { + private modalCtrl: ModalController, private sanitizer: DomSanitizer, private popoverCtrl: PopoverController, + private fileProvider: CoreFileProvider) { // Check if debug messages should be displayed. configProvider.get(CoreConstants.SETTINGS_DEBUG_DISPLAY, false).then((debugDisplay) => { @@ -128,28 +130,73 @@ export class CoreDomUtilsProvider { */ confirmDownloadSize(size: any, message?: string, unknownMessage?: string, wifiThreshold?: number, limitedThreshold?: number, alwaysConfirm?: boolean): Promise { - wifiThreshold = typeof wifiThreshold == 'undefined' ? CoreConstants.WIFI_DOWNLOAD_THRESHOLD : wifiThreshold; - limitedThreshold = typeof limitedThreshold == 'undefined' ? CoreConstants.DOWNLOAD_THRESHOLD : limitedThreshold; + const readableSize = this.textUtils.bytesToSize(size.size, 2); - if (size.size < 0 || (size.size == 0 && !size.total)) { - // Seems size was unable to be calculated. Show a warning. - unknownMessage = unknownMessage || 'core.course.confirmdownloadunknownsize'; + const getAvailableBytes = new Promise((resolve): void => { + if (this.appProvider.isDesktop()) { + // Free space calculation is not supported on desktop. + resolve(null); + } else { + this.fileProvider.calculateFreeSpace().then((availableBytes) => { + if (this.platform.is('android')) { + return availableBytes; + } else { + // Space calculation is not accurate on iOS, but it gets more accurate when space is lower. + // We'll only use it when space is <500MB, or we're downloading more than twice the reported space. + if (availableBytes < CoreConstants.IOS_FREE_SPACE_THRESHOLD || size.size > availableBytes / 2) { + return availableBytes; + } else { + return null; + } + } + }).then((availableBytes) => { + resolve(availableBytes); + }); + } + }); - return this.showConfirm(this.translate.instant(unknownMessage)); - } else if (!size.total) { - // Filesize is only partial. - const readableSize = this.textUtils.bytesToSize(size.size, 2); + const getAvailableSpace = getAvailableBytes.then((availableBytes: number) => { + if (availableBytes === null) { + return ''; + } else { + const availableSize = this.textUtils.bytesToSize(availableBytes, 2); + if (this.platform.is('android') && size.size > availableBytes - CoreConstants.MINIMUM_FREE_SPACE) { + return Promise.reject(this.translate.instant('core.course.insufficientavailablespace', { size: readableSize })); + } - return this.showConfirm(this.translate.instant('core.course.confirmpartialdownloadsize', { size: readableSize })); - } else if (alwaysConfirm || size.size >= wifiThreshold || + return this.translate.instant('core.course.availablespace', {available: availableSize}); + } + }); + + return getAvailableSpace.then((availableSpace) => { + wifiThreshold = typeof wifiThreshold == 'undefined' ? CoreConstants.WIFI_DOWNLOAD_THRESHOLD : wifiThreshold; + limitedThreshold = typeof limitedThreshold == 'undefined' ? CoreConstants.DOWNLOAD_THRESHOLD : limitedThreshold; + + let wifiPrefix = ''; + if (this.appProvider.isNetworkAccessLimited()) { + wifiPrefix = this.translate.instant('core.course.confirmlimiteddownload'); + } + + if (size.size < 0 || (size.size == 0 && !size.total)) { + // Seems size was unable to be calculated. Show a warning. + unknownMessage = unknownMessage || 'core.course.confirmdownloadunknownsize'; + + return this.showConfirm(wifiPrefix + this.translate.instant(unknownMessage, {availableSpace: availableSpace})); + } else if (!size.total) { + // Filesize is only partial. + + return this.showConfirm(wifiPrefix + this.translate.instant('core.course.confirmpartialdownloadsize', + { size: readableSize, availableSpace: availableSpace })); + } else if (alwaysConfirm || size.size >= wifiThreshold || (this.appProvider.isNetworkAccessLimited() && size.size >= limitedThreshold)) { - message = message || 'core.course.confirmdownload'; - const readableSize = this.textUtils.bytesToSize(size.size, 2); + message = message || 'core.course.confirmdownload'; - return this.showConfirm(this.translate.instant(message, { size: readableSize })); - } + return this.showConfirm(wifiPrefix + this.translate.instant(message, + { size: readableSize, availableSpace: availableSpace })); + } - return Promise.resolve(); + return Promise.resolve(); + }); } /** diff --git a/src/providers/utils/text.ts b/src/providers/utils/text.ts index 5bdb70ca4..7c30d9ec9 100644 --- a/src/providers/utils/text.ts +++ b/src/providers/utils/text.ts @@ -113,7 +113,7 @@ export class CoreTextUtilsProvider { */ bytesToSize(bytes: number, precision: number = 2): string { - if (typeof bytes == 'undefined' || bytes < 0) { + if (typeof bytes == 'undefined' || bytes === null || bytes < 0) { return this.translate.instant('core.notapplicable'); } From 19e0cf59e54c9f90149bfffc09255ac1099665c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 6 Mar 2019 14:54:40 +0100 Subject: [PATCH 128/263] MOBILE-2903 menu: Show menu items depending on device width --- src/components/ion-tabs/ion-tabs.ts | 4 +++ src/core/mainmenu/pages/menu/menu.ts | 43 +++++++++++++++++-------- src/core/mainmenu/pages/more/more.ts | 39 ++++++++++++++-------- src/core/mainmenu/providers/mainmenu.ts | 19 +++++++++++ 4 files changed, 78 insertions(+), 27 deletions(-) diff --git a/src/components/ion-tabs/ion-tabs.ts b/src/components/ion-tabs/ion-tabs.ts index deeb76a53..76fff38fe 100644 --- a/src/components/ion-tabs/ion-tabs.ts +++ b/src/components/ion-tabs/ion-tabs.ts @@ -223,6 +223,10 @@ export class CoreIonTabsComponent extends Tabs implements OnDestroy { * @param {CoreIonTabComponent} tab The tab to remove. */ remove(tab: CoreIonTabComponent): void { + if (tab.isSelected) { + // TODO: If selected we should move this navigation to the phantom tab. + } + // First search in the list of initialized tabs. let index = this._tabs.indexOf(tab); diff --git a/src/core/mainmenu/pages/menu/menu.ts b/src/core/mainmenu/pages/menu/menu.ts index ae3f68830..05d1afcff 100644 --- a/src/core/mainmenu/pages/menu/menu.ts +++ b/src/core/mainmenu/pages/menu/menu.ts @@ -30,6 +30,7 @@ import { CoreMainMenuDelegate, CoreMainMenuHandlerToDisplay } from '../../provid }) export class CoreMainMenuPage implements OnDestroy { tabs: CoreMainMenuHandlerToDisplay[] = []; + allHandlers: CoreMainMenuHandlerToDisplay[]; loaded = false; redirectPage: string; redirectParams: any; @@ -42,7 +43,8 @@ export class CoreMainMenuPage implements OnDestroy { @ViewChild('mainTabs') mainTabs: CoreIonTabsComponent; constructor(private menuDelegate: CoreMainMenuDelegate, private sitesProvider: CoreSitesProvider, navParams: NavParams, - private navCtrl: NavController, private eventsProvider: CoreEventsProvider, private cdr: ChangeDetectorRef) { + private navCtrl: NavController, private eventsProvider: CoreEventsProvider, private cdr: ChangeDetectorRef, + private mainMenuProvider: CoreMainMenuProvider) { // Check if the menu was loaded with a redirect. const redirectPage = navParams.get('redirectPage'); @@ -78,10 +80,32 @@ export class CoreMainMenuPage implements OnDestroy { this.subscription = this.menuDelegate.getHandlers().subscribe((handlers) => { // Remove the handlers that should only appear in the More menu. - handlers = handlers.filter((handler) => { + this.allHandlers = handlers.filter((handler) => { return !handler.onlyInMore; }); - handlers = handlers.slice(0, CoreMainMenuProvider.NUM_MAIN_HANDLERS); // Get main handlers. + + this.initHandlers(); + + if (this.loaded && this.pendingRedirect) { + // Wait for tabs to be initialized and then handle the redirect. + setTimeout(() => { + if (this.pendingRedirect) { + this.handleRedirect(this.pendingRedirect); + delete this.pendingRedirect; + } + }); + } + }); + + window.addEventListener('resize', this.initHandlers.bind(this)); + } + + /** + * Init handlers on change (size or handlers). + */ + initHandlers(): void { + if (this.allHandlers) { + const handlers = this.allHandlers.slice(0, this.mainMenuProvider.getNumItems()); // Get main handlers. // Re-build the list of tabs. If a handler is already in the list, use existing object to prevent re-creating the tab. const newTabs = []; @@ -105,17 +129,7 @@ export class CoreMainMenuPage implements OnDestroy { }); this.loaded = this.menuDelegate.areHandlersLoaded(); - - if (this.loaded && this.pendingRedirect) { - // Wait for tabs to be initialized and then handle the redirect. - setTimeout(() => { - if (this.pendingRedirect) { - this.handleRedirect(this.pendingRedirect); - delete this.pendingRedirect; - } - }); - } - }); + } } /** @@ -153,5 +167,6 @@ export class CoreMainMenuPage implements OnDestroy { ngOnDestroy(): void { this.subscription && this.subscription.unsubscribe(); this.redirectObs && this.redirectObs.off(); + window.removeEventListener('resize', this.initHandlers.bind(this)); } } diff --git a/src/core/mainmenu/pages/more/more.ts b/src/core/mainmenu/pages/more/more.ts index 9027f7012..03fc83452 100644 --- a/src/core/mainmenu/pages/more/more.ts +++ b/src/core/mainmenu/pages/more/more.ts @@ -29,6 +29,7 @@ import { CoreMainMenuProvider, CoreMainMenuCustomItem } from '../../providers/ma }) export class CoreMainMenuMorePage implements OnDestroy { handlers: CoreMainMenuHandlerData[]; + allHandlers: CoreMainMenuHandlerData[]; handlersLoaded: boolean; siteInfo: any; siteName: string; @@ -58,32 +59,44 @@ export class CoreMainMenuMorePage implements OnDestroy { ionViewDidLoad(): void { // Load the handlers. this.subscription = this.menuDelegate.getHandlers().subscribe((handlers) => { - // Calculate the main handlers to not display them in this view. - const mainHandlers = handlers.filter((handler) => { - return !handler.onlyInMore; - }).slice(0, CoreMainMenuProvider.NUM_MAIN_HANDLERS); + this.allHandlers = handlers; - // Get only the handlers that don't appear in the main view. - this.handlers = []; - handlers.forEach((handler) => { - if (mainHandlers.indexOf(handler) == -1) { - this.handlers.push(handler); - } - }); - - this.handlersLoaded = this.menuDelegate.areHandlersLoaded(); + this.initHandlers(); }); + + window.addEventListener('resize', this.initHandlers.bind(this)); } /** * Page destroyed. */ ngOnDestroy(): void { + window.removeEventListener('resize', this.initHandlers.bind(this)); + if (this.subscription) { this.subscription.unsubscribe(); } } + /** + * Init handlers on change (size or handlers). + */ + initHandlers(): void { + if (this.allHandlers) { + // Calculate the main handlers not to display them in this view. + const mainHandlers = this.allHandlers.filter((handler) => { + return !handler.onlyInMore; + }).slice(0, this.mainMenuProvider.getNumItems()); + + // Get only the handlers that don't appear in the main view. + this.handlers = this.allHandlers.filter((handler) => { + return mainHandlers.indexOf(handler) == -1; + }); + + this.handlersLoaded = this.menuDelegate.areHandlersLoaded(); + } + } + /** * Load the site info required by the view. */ diff --git a/src/core/mainmenu/providers/mainmenu.ts b/src/core/mainmenu/providers/mainmenu.ts index ac38ef92b..e0fa54e02 100644 --- a/src/core/mainmenu/providers/mainmenu.ts +++ b/src/core/mainmenu/providers/mainmenu.ts @@ -52,6 +52,7 @@ export interface CoreMainMenuCustomItem { @Injectable() export class CoreMainMenuProvider { static NUM_MAIN_HANDLERS = 4; + static ITEM_MIN_WIDTH = 72; // Min with of every item, based on 5 items on a 360 pixel wide screen. constructor(private langProvider: CoreLangProvider, private sitesProvider: CoreSitesProvider) { } @@ -158,4 +159,22 @@ export class CoreMainMenuProvider { }); }); } + + /** + * Get the number of items to be shown on the main menu bar. + * + * @return {number} Number of items depending on the device width. + */ + getNumItems(): number { + if (window && window.innerWidth) { + let numElements; + + numElements = Math.floor(window.innerWidth / CoreMainMenuProvider.ITEM_MIN_WIDTH); + + // Set a mínimum elements to show and skip more button. + return numElements > 1 ? numElements - 1 : 1; + } + + return CoreMainMenuProvider.NUM_MAIN_HANDLERS; + } } From 809753aac1ce382b32bd9a89bc2088e203ac3dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 7 Mar 2019 12:08:25 +0100 Subject: [PATCH 129/263] MOBILE-2903 menu: Move menu to side on tablet --- src/components/ion-tabs/core-ion-tabs.html | 2 +- src/components/ion-tabs/ion-tabs.scss | 27 +++++++++++++++++ src/components/ion-tabs/ion-tabs.ts | 4 --- src/core/mainmenu/pages/menu/menu.html | 4 +-- src/core/mainmenu/pages/menu/menu.ts | 26 +++++++++++++++++ src/core/mainmenu/providers/delegate.ts | 6 ++++ src/core/mainmenu/providers/mainmenu.ts | 34 ++++++++++++++++++++-- 7 files changed, 94 insertions(+), 9 deletions(-) diff --git a/src/components/ion-tabs/core-ion-tabs.html b/src/components/ion-tabs/core-ion-tabs.html index e255871b6..d662320ef 100644 --- a/src/components/ion-tabs/core-ion-tabs.html +++ b/src/components/ion-tabs/core-ion-tabs.html @@ -7,7 +7,7 @@
-
+
diff --git a/src/components/ion-tabs/ion-tabs.scss b/src/components/ion-tabs/ion-tabs.scss index 22cf41ef9..a4efdc295 100644 --- a/src/components/ion-tabs/ion-tabs.scss +++ b/src/components/ion-tabs/ion-tabs.scss @@ -1,3 +1,5 @@ +$core-sidetab-size: 60px !default; + ion-app.app-root core-ion-tabs { .tabbar { z-index: 101; // For some reason, the regular z-index isn't enough with our tabs, use a higher one. @@ -21,6 +23,31 @@ ion-app.app-root core-ion-tabs { .tab-badge.badge { background-color: $ion-tabs-badge-color; } + + &[tabsplacement="side"] { + .tabbar { + @include float(start); + width: $core-sidetab-size; + height: 100%; + flex-direction: column; + .tab-button { + width: 100%; + .tab-badge.badge { + @include position(calc(50% - 30px), 2px, null, null); + } + } + } + + .tabcontent { + width: calc(100% - #{($core-sidetab-size)}); + position: absolute; + @include position(0, 0, 0, 0); + core-ion-tab { + @include position(0, 0, 0, $core-sidetab-size); + position: relative; + } + } + } } ion-app.app-root.ios core-ion-tabs .core-ion-tabs-loading { diff --git a/src/components/ion-tabs/ion-tabs.ts b/src/components/ion-tabs/ion-tabs.ts index 76fff38fe..deeb76a53 100644 --- a/src/components/ion-tabs/ion-tabs.ts +++ b/src/components/ion-tabs/ion-tabs.ts @@ -223,10 +223,6 @@ export class CoreIonTabsComponent extends Tabs implements OnDestroy { * @param {CoreIonTabComponent} tab The tab to remove. */ remove(tab: CoreIonTabComponent): void { - if (tab.isSelected) { - // TODO: If selected we should move this navigation to the phantom tab. - } - // First search in the list of initialized tabs. let index = this._tabs.indexOf(tab); diff --git a/src/core/mainmenu/pages/menu/menu.html b/src/core/mainmenu/pages/menu/menu.html index 9faebad6f..9ee9cf395 100644 --- a/src/core/mainmenu/pages/menu/menu.html +++ b/src/core/mainmenu/pages/menu/menu.html @@ -1,5 +1,5 @@ - + - + diff --git a/src/core/mainmenu/pages/menu/menu.ts b/src/core/mainmenu/pages/menu/menu.ts index 05d1afcff..358b840bc 100644 --- a/src/core/mainmenu/pages/menu/menu.ts +++ b/src/core/mainmenu/pages/menu/menu.ts @@ -35,6 +35,7 @@ export class CoreMainMenuPage implements OnDestroy { redirectPage: string; redirectParams: any; showTabs = false; + tabsPlacement = 'bottom'; protected subscription; protected redirectObs: any; @@ -105,6 +106,8 @@ export class CoreMainMenuPage implements OnDestroy { */ initHandlers(): void { if (this.allHandlers) { + this.tabsPlacement = this.mainMenuProvider.getTabPlacement(this.navCtrl); + const handlers = this.allHandlers.slice(0, this.mainMenuProvider.getNumItems()); // Get main handlers. // Re-build the list of tabs. If a handler is already in the list, use existing object to prevent re-creating the tab. @@ -118,9 +121,32 @@ export class CoreMainMenuPage implements OnDestroy { return tab.title == handler.title && tab.icon == handler.icon; }); + tab ? tab.hide = false : null; + handler.hide = false; + newTabs.push(tab || handler); } + // Maintain tab in phantom mode in case is not visible. + const selectedTab = this.mainTabs.getSelected(); + if (selectedTab) { + const oldTab = this.tabs.find((tab) => { + return tab.page == selectedTab.root && tab.icon == selectedTab.tabIcon; + }); + + if (oldTab) { + // Check if the selected handler is visible. + const isVisible = newTabs.some((newTab) => { + return oldTab.title == newTab.title && oldTab.icon == newTab.icon; + }); + + if (!isVisible) { + oldTab.hide = true; + newTabs.push(oldTab); + } + } + } + this.tabs = newTabs; // Sort them by priority so new handlers are in the right position. diff --git a/src/core/mainmenu/providers/delegate.ts b/src/core/mainmenu/providers/delegate.ts index 9f7ea3bdf..a32d6e040 100644 --- a/src/core/mainmenu/providers/delegate.ts +++ b/src/core/mainmenu/providers/delegate.ts @@ -111,6 +111,12 @@ export interface CoreMainMenuHandlerToDisplay extends CoreMainMenuHandlerData { * @type {number} */ priority?: number; + + /** + * Hide tab. Used then resizing. + * @type {[type]} + */ + hide?: boolean; } /** diff --git a/src/core/mainmenu/providers/mainmenu.ts b/src/core/mainmenu/providers/mainmenu.ts index e0fa54e02..b6eeefc75 100644 --- a/src/core/mainmenu/providers/mainmenu.ts +++ b/src/core/mainmenu/providers/mainmenu.ts @@ -13,6 +13,7 @@ // limitations under the License. import { Injectable } from '@angular/core'; +import { NavController } from 'ionic-angular'; import { CoreLangProvider } from '@providers/lang'; import { CoreSitesProvider } from '@providers/sites'; import { CoreConfigConstants } from '../../../configconstants'; @@ -53,8 +54,11 @@ export interface CoreMainMenuCustomItem { export class CoreMainMenuProvider { static NUM_MAIN_HANDLERS = 4; static ITEM_MIN_WIDTH = 72; // Min with of every item, based on 5 items on a 360 pixel wide screen. + protected tablet = false; - constructor(private langProvider: CoreLangProvider, private sitesProvider: CoreSitesProvider) { } + constructor(private langProvider: CoreLangProvider, private sitesProvider: CoreSitesProvider) { + this.tablet = window && window.innerWidth && window.innerWidth >= 576 && window.innerHeight >= 576; + } /** * Get a list of custom menu items for a certain site. @@ -169,7 +173,12 @@ export class CoreMainMenuProvider { if (window && window.innerWidth) { let numElements; - numElements = Math.floor(window.innerWidth / CoreMainMenuProvider.ITEM_MIN_WIDTH); + if (this.tablet) { + // Tablet, menu will be displayed vertically. + numElements = Math.floor(window.innerHeight / CoreMainMenuProvider.ITEM_MIN_WIDTH); + } else { + numElements = Math.floor(window.innerWidth / CoreMainMenuProvider.ITEM_MIN_WIDTH); + } // Set a mínimum elements to show and skip more button. return numElements > 1 ? numElements - 1 : 1; @@ -177,4 +186,25 @@ export class CoreMainMenuProvider { return CoreMainMenuProvider.NUM_MAIN_HANDLERS; } + + /** + * Get tabs placement depending on the device size. + * + * @param {NavController} navCtrl NavController to resize the content. + * @return {string} Tabs placement including side value. + */ + getTabPlacement(navCtrl: NavController): string { + const tablet = window && window.innerWidth && window.innerWidth >= 576 && window.innerHeight >= 576; + + if (tablet != this.tablet) { + this.tablet = tablet; + + // Resize so content margins can be updated. + setTimeout(() => { + navCtrl.resize(); + }, 500); + } + + return tablet ? 'side' : 'bottom'; + } } From 12d75f14b2fca7471ad2182970147ce08f9d1f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 2 May 2019 11:59:22 +0200 Subject: [PATCH 130/263] MOBILE-2903 menu: Disable responsive menu items is set on site --- src/components/ion-tabs/core-ion-tabs.html | 2 +- src/core/mainmenu/providers/mainmenu.ts | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/components/ion-tabs/core-ion-tabs.html b/src/components/ion-tabs/core-ion-tabs.html index d662320ef..123d340c1 100644 --- a/src/components/ion-tabs/core-ion-tabs.html +++ b/src/components/ion-tabs/core-ion-tabs.html @@ -1,5 +1,5 @@
- +
diff --git a/src/core/mainmenu/providers/mainmenu.ts b/src/core/mainmenu/providers/mainmenu.ts index b6eeefc75..59eab0b7a 100644 --- a/src/core/mainmenu/providers/mainmenu.ts +++ b/src/core/mainmenu/providers/mainmenu.ts @@ -170,7 +170,7 @@ export class CoreMainMenuProvider { * @return {number} Number of items depending on the device width. */ getNumItems(): number { - if (window && window.innerWidth) { + if (!this.isResponsiveMainMenuItemsDisabledInCurrentSite() && window && window.innerWidth) { let numElements; if (this.tablet) { @@ -207,4 +207,15 @@ export class CoreMainMenuProvider { return tablet ? 'side' : 'bottom'; } + + /** + * Check if responsive main menu items is disabled in the current site. + * + * @return {boolean} Whether it's disabled. + */ + protected isResponsiveMainMenuItemsDisabledInCurrentSite(): boolean { + const site = this.sitesProvider.getCurrentSite(); + + return site && site.isFeatureDisabled('NoDelegate_ResponsiveMainMenuItems'); + } } From 42a208c8e9e162e08403e43dd7c8cc928b172c36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Mon, 13 May 2019 12:42:19 +0200 Subject: [PATCH 131/263] MOBILE-2981 style: Fix style dropdown arrow on ion-select --- src/app/app.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/app.scss b/src/app/app.scss index 7037530ac..5d129a009 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -383,7 +383,7 @@ ion-app.app-root { color: $core-select-placeholder-color; } - &.select-disabled, .select-icon .select-icon-inner { + &.select-disabled .select-icon .select-icon-inner { color: $text-color; } @each $color-name, $color-base, $color-contrast in get-colors($colors) { From b585c742c282232ca85adeff2c1bc7cf9ecb592f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Mon, 13 May 2019 13:07:41 +0200 Subject: [PATCH 132/263] MOBILE-3017 calendar: Wrap text on calendar reminder dates --- src/addon/calendar/pages/event/event.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/addon/calendar/pages/event/event.html b/src/addon/calendar/pages/event/event.html index 35cfc9758..3c40c931a 100644 --- a/src/addon/calendar/pages/event/event.html +++ b/src/addon/calendar/pages/event/event.html @@ -57,7 +57,7 @@

{{ 'addon.calendar.reminders' | translate }}

- +

{{ 'core.defaultvalue' | translate :{$a: ((event.timestart - defaultTime) * 1000) | coreFormatDate } }}

{{ reminder.time * 1000 | coreFormatDate }}

diff --git a/src/addon/mod/forum/components/index/index.ts b/src/addon/mod/forum/components/index/index.ts index 60ee32288..762df73f4 100644 --- a/src/addon/mod/forum/components/index/index.ts +++ b/src/addon/mod/forum/components/index/index.ts @@ -48,6 +48,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom discussions = []; offlineDiscussions = []; selectedDiscussion = 0; // Disucssion ID or negative timecreated if it's an offline discussion. + canAddDiscussion = false; addDiscussionText = this.translate.instant('addon.mod_forum.addanewdiscussion'); availabilityMessage: string; @@ -199,10 +200,18 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom }); } }).then(() => { - // Check if the activity uses groups. - return this.groupsProvider.getActivityGroupMode(this.forum.cmid).then((mode) => { - this.usesGroups = (mode === CoreGroupsProvider.SEPARATEGROUPS || mode === CoreGroupsProvider.VISIBLEGROUPS); - }); + return Promise.all([ + // Check if the activity uses groups. + this.groupsProvider.getActivityGroupMode(this.forum.cmid).then((mode) => { + this.usesGroups = (mode === CoreGroupsProvider.SEPARATEGROUPS || mode === CoreGroupsProvider.VISIBLEGROUPS); + }), + this.forumProvider.getAccessInformation(this.forum.id).then((accessInfo) => { + // Disallow adding discussions if cut-off date is reached and the user has not the capability to override it. + // Just in case the forum was fetched from WS when the cut-off date was not reached but it is now. + const cutoffDateReached = this.forumHelper.isCutoffDateReached(this.forum) && !accessInfo.cancanoverridecutoff; + this.canAddDiscussion = this.forum.cancreatediscussions && !cutoffDateReached; + }), + ]); }).then(() => { return Promise.all([ this.fetchOfflineDiscussion(), @@ -370,6 +379,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom if (this.forum) { promises.push(this.forumProvider.invalidateDiscussionsList(this.forum.id)); promises.push(this.groupsProvider.invalidateActivityGroupMode(this.forum.cmid)); + promises.push(this.forumProvider.invalidateAccessInformation(this.forum.id)); } return Promise.all(promises); diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index 9d0a44fee..3aee91f1b 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -318,6 +318,14 @@ export class AddonModForumDiscussionPage implements OnDestroy { promises.push(this.forumProvider.getAccessInformation(this.forum.id).then((accessInfo) => { this.accessInfo = accessInfo; + + // Disallow replying if cut-off date is reached and the user has not the capability to override it. + // Just in case the posts were fetched from WS when the cut-off date was not reached but it is now. + if (this.forumHelper.isCutoffDateReached(forum) && !accessInfo.cancanoverridecutoff) { + posts.forEach((post) => { + post.canreply = false; + }); + } })); // Fetch the discussion if not passed as parameter. From 8f0032bb7b38a4593e69fd460737e22c9b48d66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 14 May 2019 09:52:49 +0200 Subject: [PATCH 135/263] MOBILE-2903 menu: Show 5 items max on phones --- src/core/mainmenu/providers/mainmenu.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/core/mainmenu/providers/mainmenu.ts b/src/core/mainmenu/providers/mainmenu.ts index 59eab0b7a..5f8fe59ed 100644 --- a/src/core/mainmenu/providers/mainmenu.ts +++ b/src/core/mainmenu/providers/mainmenu.ts @@ -178,6 +178,9 @@ export class CoreMainMenuProvider { numElements = Math.floor(window.innerHeight / CoreMainMenuProvider.ITEM_MIN_WIDTH); } else { numElements = Math.floor(window.innerWidth / CoreMainMenuProvider.ITEM_MIN_WIDTH); + + // Set a maximum elements to show and skip more button. + numElements = numElements >= 5 ? 5 : numElements; } // Set a mínimum elements to show and skip more button. From f20e34db5c5f3f064c40b6af58d7acab81f7b68e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 14 May 2019 12:48:29 +0200 Subject: [PATCH 136/263] MOBILE-2851 user: Fix user not enrolled message --- scripts/langindex.json | 5 ++++ src/addon/notes/providers/user-handler.ts | 2 +- src/assets/lang/en.json | 1 + src/core/user/pages/profile/profile.html | 5 ++-- src/core/user/pages/profile/profile.ts | 2 ++ src/core/user/providers/user-delegate.ts | 36 +++++++++++------------ src/core/user/providers/user-handler.ts | 2 +- src/lang/en.json | 1 + 8 files changed, 32 insertions(+), 22 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index f3702f753..1afd0fd4a 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -1266,9 +1266,11 @@ "core.course.activitynotyetviewablesiteupgradeneeded": "local_moodlemobileapp", "core.course.allsections": "local_moodlemobileapp", "core.course.askadmintosupport": "local_moodlemobileapp", + "core.course.availablespace": "local_moodlemobileapp", "core.course.confirmdeletemodulefiles": "local_moodlemobileapp", "core.course.confirmdownload": "local_moodlemobileapp", "core.course.confirmdownloadunknownsize": "local_moodlemobileapp", + "core.course.confirmlimiteddownload": "local_moodlemobileapp", "core.course.confirmpartialdownloadsize": "local_moodlemobileapp", "core.course.contents": "local_moodlemobileapp", "core.course.couldnotloadsectioncontent": "local_moodlemobileapp", @@ -1280,6 +1282,8 @@ "core.course.errorgetmodule": "local_moodlemobileapp", "core.course.hiddenfromstudents": "moodle", "core.course.hiddenoncoursepage": "moodle", + "core.course.insufficientavailablequota": "local_moodlemobileapp", + "core.course.insufficientavailablespace": "local_moodlemobileapp", "core.course.manualcompletionnotsynced": "local_moodlemobileapp", "core.course.nocontentavailable": "local_moodlemobileapp", "core.course.overriddennotice": "grades", @@ -1586,6 +1590,7 @@ "core.nopermissions": "error", "core.noresults": "moodle", "core.notapplicable": "local_moodlemobileapp", + "core.notenrolledprofile": "moodle", "core.notice": "moodle", "core.notingroup": "moodle", "core.notsent": "local_moodlemobileapp", diff --git a/src/addon/notes/providers/user-handler.ts b/src/addon/notes/providers/user-handler.ts index a348ffb13..c7a37d061 100644 --- a/src/addon/notes/providers/user-handler.ts +++ b/src/addon/notes/providers/user-handler.ts @@ -72,7 +72,7 @@ export class AddonNotesUserHandler implements CoreUserProfileHandler { isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise { // Active course required. if (!courseId || user.id == this.sitesProvider.getCurrentSiteUserId()) { - return Promise.resolve(false); + return false; } if (typeof this.noteEnabledCache[courseId] != 'undefined') { diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 40e85aa93..7cbba2a50 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -1590,6 +1590,7 @@ "core.nopermissions": "Sorry, but you do not currently have permissions to do that ({{$a}}).", "core.noresults": "No results", "core.notapplicable": "n/a", + "core.notenrolledprofile": "This profile is not available because this user is not enrolled in this course.", "core.notice": "Notice", "core.notingroup": "Sorry, but you need to be part of a group to see this page.", "core.notsent": "Not sent", diff --git a/src/core/user/pages/profile/profile.html b/src/core/user/pages/profile/profile.html index 57d96674e..fae5a9edd 100644 --- a/src/core/user/pages/profile/profile.html +++ b/src/core/user/pages/profile/profile.html @@ -8,7 +8,7 @@ - + @@ -58,8 +58,9 @@ - + + \ No newline at end of file diff --git a/src/core/user/pages/profile/profile.ts b/src/core/user/pages/profile/profile.ts index 957de53e7..46fb41d6a 100644 --- a/src/core/user/pages/profile/profile.ts +++ b/src/core/user/pages/profile/profile.ts @@ -46,6 +46,7 @@ export class CoreUserProfilePage { user: any; title: string; isDeleted = false; + isEnrolled = true; canChangeProfilePicture = false; actionHandlers: CoreUserProfileHandlerData[] = []; newPageHandlers: CoreUserProfileHandlerData[] = []; @@ -85,6 +86,7 @@ export class CoreUserProfilePage { this.fetchUser().then(() => { return this.userProvider.logView(this.userId, this.courseId).catch((error) => { this.isDeleted = error.errorcode === 'userdeleted'; + this.isEnrolled = error.errorcode !== 'notenrolledprofile'; }); }).finally(() => { this.userLoaded = true; diff --git a/src/core/user/providers/user-delegate.ts b/src/core/user/providers/user-delegate.ts index 7bab647d1..92796f273 100644 --- a/src/core/user/providers/user-delegate.ts +++ b/src/core/user/providers/user-delegate.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { NavController } from 'ionic-angular'; import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; +import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreEventsProvider } from '@providers/events'; @@ -173,7 +174,8 @@ export class CoreUserDelegate extends CoreDelegate { }} = {}; constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, - private coursesProvider: CoreCoursesProvider, protected eventsProvider: CoreEventsProvider) { + private coursesProvider: CoreCoursesProvider, protected eventsProvider: CoreEventsProvider, + protected utils: CoreUtilsProvider) { super('CoreUserDelegate', loggerProvider, sitesProvider, eventsProvider); eventsProvider.on(CoreUserDelegate.UPDATE_HANDLER_EVENT, (data) => { @@ -266,25 +268,23 @@ export class CoreUserDelegate extends CoreDelegate { for (const name in this.enabledHandlers) { // Checks if the handler is enabled for the user. const handler = this.handlers[name], - isEnabledForUser = handler.isEnabledForUser(user, courseId, navOptions, admOptions), - promise = Promise.resolve(isEnabledForUser).then((enabled) => { - if (enabled) { - userData.handlers.push({ - name: name, - data: handler.getDisplayData(user, courseId), - priority: handler.priority, - type: handler.type || CoreUserDelegate.TYPE_NEW_PAGE - }); - } else { - return Promise.reject(null); - } - }).catch(() => { - // Nothing to do here, it is not enabled for this user. - }); - promises.push(promise); + isEnabledForUser = handler.isEnabledForUser(user, courseId, navOptions, admOptions); + + promises.push(Promise.resolve(isEnabledForUser).then((enabled) => { + if (enabled) { + userData.handlers.push({ + name: name, + data: handler.getDisplayData(user, courseId), + priority: handler.priority, + type: handler.type || CoreUserDelegate.TYPE_NEW_PAGE + }); + } + }).catch(() => { + // Nothing to do here, it is not enabled for this user. + })); } - return Promise.all(promises).then(() => { + return this.utils.allPromises(promises).then(() => { // Sort them by priority. userData.handlers.sort((a, b) => { return b.priority - a.priority; diff --git a/src/core/user/providers/user-handler.ts b/src/core/user/providers/user-handler.ts index 15956dd8e..699f1fac2 100644 --- a/src/core/user/providers/user-handler.ts +++ b/src/core/user/providers/user-handler.ts @@ -48,7 +48,7 @@ export class CoreUserProfileMailHandler implements CoreUserProfileHandler { */ isEnabledForUser(user: any, courseId: number, navOptions?: any, admOptions?: any): boolean | Promise { // Not current user required. - return user.id != this.sitesProvider.getCurrentSite().getUserId() && user.email; + return user.id != this.sitesProvider.getCurrentSite().getUserId() && !!user.email; } /** diff --git a/src/lang/en.json b/src/lang/en.json index d1e2a0c96..0fb6bb5bd 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -172,6 +172,7 @@ "nopermissions": "Sorry, but you do not currently have permissions to do that ({{$a}}).", "noresults": "No results", "notapplicable": "n/a", + "notenrolledprofile": "This profile is not available because this user is not enrolled in this course.", "notice": "Notice", "notingroup": "Sorry, but you need to be part of a group to see this page.", "notsent": "Not sent", From e413c956987ee29515716ae5870de158940ae0eb Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 14 May 2019 13:42:33 +0200 Subject: [PATCH 137/263] MOBILE-2851 core: Fix promise never finished when retry request --- src/classes/site.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index ec988b24b..5331b38a1 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -794,6 +794,17 @@ export class CoreSite { request.deferred.reject = reject; }); + return this.enqueueRequest(request); + } + + /** + * Adds a request to the queue. + * + * @param {RequestQueueItem} request The request to enqueue. + * @returns {Promise} Promise resolved with the response when the WS is called. + */ + protected enqueueRequest(request: RequestQueueItem): Promise { + this.requestQueue.push(request); if (this.requestQueue.length >= CoreSite.REQUEST_QUEUE_LIMIT) { @@ -875,7 +886,7 @@ export class CoreSite { if (!response) { // Request not executed, enqueue again. - this.callOrEnqueueRequest(request.method, request.data, request.preSets, request.wsPreSets); + this.enqueueRequest(request); } else if (response.error) { request.deferred.reject(this.textUtils.parseJSON(response.exception)); } else { From 9b296d8ee5e1ea990ae3def06a5d4d6af6179a4f Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 14 May 2019 17:26:30 +0200 Subject: [PATCH 138/263] MOBILE-2966 quiz: Fix multichoice question broken due to clear option --- src/addon/mod/quiz/pages/player/player.html | 2 +- src/core/question/classes/base-question-component.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/quiz/pages/player/player.html b/src/addon/mod/quiz/pages/player/player.html index 62b15934f..9470bec15 100644 --- a/src/addon/mod/quiz/pages/player/player.html +++ b/src/addon/mod/quiz/pages/player/player.html @@ -135,8 +135,8 @@
- {{ 'core.openinbrowser' | translate }} + diff --git a/src/core/question/classes/base-question-component.ts b/src/core/question/classes/base-question-component.ts index c20654f32..c36375f8b 100644 --- a/src/core/question/classes/base-question-component.ts +++ b/src/core/question/classes/base-question-component.ts @@ -461,6 +461,11 @@ export class CoreQuestionBaseComponent { }, parent = element.parentElement; + if (option.value == '-1') { + // It's the clear choice option, ignore it. + continue; + } + this.question.optionsName = option.name; this.question.disabled = this.question.disabled && element.disabled; From 85864a4b518067b6e35290dbcbb7bad0dc38d04f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 14 May 2019 16:27:35 +0200 Subject: [PATCH 139/263] MOBILE-2952 quiz: Fix match question vertical align --- src/addon/qtype/match/component/match.scss | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/addon/qtype/match/component/match.scss b/src/addon/qtype/match/component/match.scss index 89e49a50b..91f127a0c 100644 --- a/src/addon/qtype/match/component/match.scss +++ b/src/addon/qtype/match/component/match.scss @@ -7,4 +7,11 @@ ion-app.app-root addon-qtype-match { bottom: 50%; margin-bottom: -7px; } + + ion-col.col { + align-self: center; + > p { + margin: 0; + } + } } From 1f776ccbc2d5c943700794d1e522a156c8586494 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 14 May 2019 17:03:20 +0200 Subject: [PATCH 140/263] MOBILE-3016 calendar: Display calendar icon in notifications --- src/addon/calendar/providers/calendar.ts | 1 + src/assets/img/icons/calendar.png | Bin 0 -> 514 bytes 2 files changed, 1 insertion(+) create mode 100644 src/assets/img/icons/calendar.png diff --git a/src/addon/calendar/providers/calendar.ts b/src/addon/calendar/providers/calendar.ts index 14ad8d69b..73bf0217f 100644 --- a/src/addon/calendar/providers/calendar.ts +++ b/src/addon/calendar/providers/calendar.ts @@ -646,6 +646,7 @@ export class AddonCalendarProvider { id: reminderId, title: event.name, text: this.timeUtils.userDate(event.timestart * 1000, 'core.strftimedaydatetime', true), + icon: 'file://assets/img/icons/calendar.png', trigger: { at: new Date(time) }, diff --git a/src/assets/img/icons/calendar.png b/src/assets/img/icons/calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..e825eeee4c685d011779c5f824609f7e112c5b70 GIT binary patch literal 514 zcmV+d0{#7oP)LpwFUf^${8+>aJob?)m~Ef=DaW2k54KC3o6IHzE`h z7#F6c4T?=tLSpaP3=@VkbB1&88HkVoy)_c+xc3FH4P25AsdX@A$rdD2x|KOP<&QCX>nD!t@dN5Rr$uIqUWP zEP0l?&?*p-25=L0k|wYeJdWcuvgApU16SQ{_u!YdcNjfL20Y&vvTFaHc~wO2famFS z`ckb{cdfN+(w+w>Y37wp`x zQ30bu6|Tr==_z51xekKB0>^y+&d)2}L}cjuerxvO3m Date: Fri, 15 Mar 2019 16:38:44 +0000 Subject: [PATCH 141/263] MOBILE-2935 Support site plugins for blocks on dashboard page --- src/core/block/components/block/block.ts | 42 ++++++++++-- src/core/block/providers/delegate.ts | 29 +++++++- src/core/compile/providers/compile.ts | 2 + .../classes/handlers/block-handler.ts | 60 ++++++++++++++++ .../siteplugins/components/block/block.ts | 68 +++++++++++++++++++ .../block/core-siteplugins-block.html | 1 + .../components/components.module.ts | 4 ++ src/core/siteplugins/providers/helper.ts | 29 +++++++- 8 files changed, 229 insertions(+), 6 deletions(-) create mode 100644 src/core/siteplugins/classes/handlers/block-handler.ts create mode 100644 src/core/siteplugins/components/block/block.ts create mode 100644 src/core/siteplugins/components/block/core-siteplugins-block.html diff --git a/src/core/block/components/block/block.ts b/src/core/block/components/block/block.ts index 4d6b67dc0..8f239a981 100644 --- a/src/core/block/components/block/block.ts +++ b/src/core/block/components/block/block.ts @@ -12,9 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Component, Input, OnInit, Injector, ViewChild } from '@angular/core'; +import { Component, Input, OnInit, Injector, ViewChild, OnDestroy } from '@angular/core'; import { CoreBlockDelegate } from '../../providers/delegate'; import { CoreDynamicComponent } from '@components/dynamic-component/dynamic-component'; +import { Subscription } from 'rxjs'; +import { CoreEventsProvider } from '@providers/events'; /** * Component to render a block. @@ -23,7 +25,7 @@ import { CoreDynamicComponent } from '@components/dynamic-component/dynamic-comp selector: 'core-block', templateUrl: 'core-block.html' }) -export class CoreBlockComponent implements OnInit { +export class CoreBlockComponent implements OnInit, OnDestroy { @ViewChild(CoreDynamicComponent) dynamicComponent: CoreDynamicComponent; @Input() block: any; // The block to render. @@ -37,7 +39,10 @@ export class CoreBlockComponent implements OnInit { class: string; // CSS class to apply to the block. loaded = false; - constructor(protected injector: Injector, protected blockDelegate: CoreBlockDelegate) { } + blockSubscription: Subscription; + + constructor(protected injector: Injector, protected blockDelegate: CoreBlockDelegate, + protected eventsProvider: CoreEventsProvider) { } /** * Component being initialized. @@ -50,9 +55,28 @@ export class CoreBlockComponent implements OnInit { } // Get the data to render the block. + this.initBlock(); + } + + /** + * Get block display data and initialises the block once this is available. If the block is not + * supported at the moment, try again if the available blocks are updated (because it comes + * from a site plugin). + */ + initBlock(): void { this.blockDelegate.getBlockDisplayData(this.injector, this.block, this.contextLevel, this.instanceId).then((data) => { if (!data) { - // Block not supported, don't render it. + // Block not supported, don't render it. But, site plugins might not have finished loading. + // Subscribe to the observable in block delegate that will tell us if blocks are updated. + // We can retry init later if that happens. + this.blockSubscription = this.blockDelegate.blocksUpdateObservable.subscribe({ + next: (): void => { + this.blockSubscription.unsubscribe(); + delete this.blockSubscription; + this.initBlock(); + } + }); + return; } @@ -73,6 +97,16 @@ export class CoreBlockComponent implements OnInit { }); } + /** + * On destroy of the component, clear up any subscriptions. + */ + ngOnDestroy(): void { + if (this.blockSubscription) { + this.blockSubscription.unsubscribe(); + delete this.blockSubscription; + } + } + /** * Refresh the data. * diff --git a/src/core/block/providers/delegate.ts b/src/core/block/providers/delegate.ts index 0275350be..a319d9b06 100644 --- a/src/core/block/providers/delegate.ts +++ b/src/core/block/providers/delegate.ts @@ -19,6 +19,8 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate'; import { CoreBlockDefaultHandler } from './default-block-handler'; import { CoreSite } from '@classes/site'; +import { CoreSitePluginsProvider } from '@core/siteplugins/providers/siteplugins'; +import { Subject } from 'rxjs'; /** * Interface that all blocks must implement. @@ -83,9 +85,12 @@ export class CoreBlockDelegate extends CoreDelegate { protected featurePrefix = 'CoreBlockDelegate_'; + blocksUpdateObservable: Subject; + constructor(logger: CoreLoggerProvider, sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider, - protected defaultHandler: CoreBlockDefaultHandler) { + protected defaultHandler: CoreBlockDefaultHandler, protected sitePluginsProvider: CoreSitePluginsProvider) { super('CoreBlockDelegate', logger, sitesProvider, eventsProvider); + this.blocksUpdateObservable = new Subject(); } /** @@ -157,4 +162,26 @@ export class CoreBlockDelegate extends CoreDelegate { protected isFeatureDisabled(handler: CoreDelegateHandler, site: CoreSite): boolean { return this.areBlocksDisabledInSite(site) || super.isFeatureDisabled(handler, site); } + + /** + * Gets the handler name for a given block name. + * + * @param {string} name Block name e.g. 'activity_modules' + * @return {string} Full name of corresponding handler + */ + getHandlerName(name: string): string { + if (!this.isBlockSupported(name)) { + return ''; + } + + return this.getHandler(name, true).name; + } + + /** + * Called when there are new block handlers available. Informs anyone who subscribed to the + * observable. + */ + updateData(): void { + this.blocksUpdateObservable.next(); + } } diff --git a/src/core/compile/providers/compile.ts b/src/core/compile/providers/compile.ts index 111db31e7..7b76555ce 100644 --- a/src/core/compile/providers/compile.ts +++ b/src/core/compile/providers/compile.ts @@ -78,6 +78,7 @@ import { CoreBlockComponentsModule } from '@core/block/components/components.mod import { CoreCourseUnsupportedModuleComponent } from '@core/course/components/unsupported-module/unsupported-module'; import { CoreCourseFormatSingleActivityComponent } from '@core/course/formats/singleactivity/components/singleactivity'; import { CoreSitePluginsModuleIndexComponent } from '@core/siteplugins/components/module-index/module-index'; +import { CoreSitePluginsBlockComponent } from '@core/siteplugins/components/block/block'; import { CoreSitePluginsCourseOptionComponent } from '@core/siteplugins/components/course-option/course-option'; import { CoreSitePluginsCourseFormatComponent } from '@core/siteplugins/components/course-format/course-format'; import { CoreSitePluginsQuestionComponent } from '@core/siteplugins/components/question/question'; @@ -269,6 +270,7 @@ export class CoreCompileProvider { instance['CoreCourseUnsupportedModuleComponent'] = CoreCourseUnsupportedModuleComponent; instance['CoreCourseFormatSingleActivityComponent'] = CoreCourseFormatSingleActivityComponent; instance['CoreSitePluginsModuleIndexComponent'] = CoreSitePluginsModuleIndexComponent; + instance['CoreSitePluginsBlockComponent'] = CoreSitePluginsBlockComponent; instance['CoreSitePluginsCourseOptionComponent'] = CoreSitePluginsCourseOptionComponent; instance['CoreSitePluginsCourseFormatComponent'] = CoreSitePluginsCourseFormatComponent; instance['CoreSitePluginsQuestionComponent'] = CoreSitePluginsQuestionComponent; diff --git a/src/core/siteplugins/classes/handlers/block-handler.ts b/src/core/siteplugins/classes/handlers/block-handler.ts new file mode 100644 index 000000000..ef16a70e2 --- /dev/null +++ b/src/core/siteplugins/classes/handlers/block-handler.ts @@ -0,0 +1,60 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injector } from '@angular/core'; +import { CoreSitePluginsBaseHandler } from './base-handler'; +import { CoreBlockHandler, CoreBlockHandlerData } from '@core/block/providers/delegate'; +import { CoreSitePluginsBlockComponent } from '@core/siteplugins/components/block/block'; + +/** + * Handler to support a block using a site plugin. + */ +export class CoreSitePluginsBlockHandler extends CoreSitePluginsBaseHandler implements CoreBlockHandler { + + constructor(name: string, public blockName: string, protected handlerSchema: any, protected initResult: any) { + super(name); + } + + /** + * Gets display data for this block. The class and title can be provided either by data from + * the handler schema (mobile.php) or using default values. + * + * @param {Injector} injector Injector + * @param {any} block Block data + * @param {string} contextLevel Context level (not used) + * @param {number} instanceId Instance if (not used) + * @return {CoreBlockHandlerData|Promise} Data or promise resolved with the data + */ + getDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number): + CoreBlockHandlerData | Promise { + let title, + className; + if (this.handlerSchema.displaydata && this.handlerSchema.displaydata.title) { + title = this.handlerSchema.displaydata.title; + } else { + title = 'plugins.block_' + block.name + '.pluginname'; + } + if (this.handlerSchema.displaydata && this.handlerSchema.displaydata.class) { + className = this.handlerSchema.displaydata.class; + } else { + className = 'block_' + block.name; + } + + return { + title: title, + class: className, + component: CoreSitePluginsBlockComponent + }; + } +} diff --git a/src/core/siteplugins/components/block/block.ts b/src/core/siteplugins/components/block/block.ts new file mode 100644 index 000000000..d1e927add --- /dev/null +++ b/src/core/siteplugins/components/block/block.ts @@ -0,0 +1,68 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Component, OnChanges, Input, ViewChild, Injector } from '@angular/core'; +import { CoreSitePluginsProvider } from '../../providers/siteplugins'; +import { CoreSitePluginsPluginContentComponent } from '../plugin-content/plugin-content'; +import { CoreBlockBaseComponent } from '@core/block/classes/base-block-component'; +import { CoreBlockDelegate } from '@core/block/providers/delegate'; + +/** + * Component that displays the index of a course format site plugin. + */ +@Component({ + selector: 'core-site-plugins-block', + templateUrl: 'core-siteplugins-block.html', +}) +export class CoreSitePluginsBlockComponent extends CoreBlockBaseComponent implements OnChanges { + @Input() block: any; + @Input() contextLevel: number; + @Input() instanceId: number; + + @ViewChild(CoreSitePluginsPluginContentComponent) content: CoreSitePluginsPluginContentComponent; + + component: string; + method: string; + args: any; + initResult: any; + + constructor(protected injector: Injector, protected sitePluginsProvider: CoreSitePluginsProvider, + protected blockDelegate: CoreBlockDelegate) { + super(injector, 'CoreSitePluginsBlockComponent'); + } + + /** + * Detect changes on input properties. + */ + ngOnChanges(): void { + if (!this.component) { + // Initialize the data. + const handlerName = this.blockDelegate.getHandlerName(this.block.name); + const handler = this.sitePluginsProvider.getSitePluginHandler(handlerName); + if (handler) { + this.component = handler.plugin.component; + this.method = handler.handlerSchema.method; + this.args = { }; + this.initResult = handler.initResult; + } + } + } + + /** + * Pass on content invalidation by refreshing content in the plugin content component. + */ + protected invalidateContent(): Promise { + return Promise.resolve(this.content.refreshContent()); + } +} diff --git a/src/core/siteplugins/components/block/core-siteplugins-block.html b/src/core/siteplugins/components/block/core-siteplugins-block.html new file mode 100644 index 000000000..94fd9c04f --- /dev/null +++ b/src/core/siteplugins/components/block/core-siteplugins-block.html @@ -0,0 +1 @@ + diff --git a/src/core/siteplugins/components/components.module.ts b/src/core/siteplugins/components/components.module.ts index 9619ee02e..ebc7d03b9 100644 --- a/src/core/siteplugins/components/components.module.ts +++ b/src/core/siteplugins/components/components.module.ts @@ -29,11 +29,13 @@ import { CoreSitePluginsQuizAccessRuleComponent } from './quiz-access-rule/quiz- import { CoreSitePluginsAssignFeedbackComponent } from './assign-feedback/assign-feedback'; import { CoreSitePluginsAssignSubmissionComponent } from './assign-submission/assign-submission'; import { CoreSitePluginsWorkshopAssessmentStrategyComponent } from './workshop-assessment-strategy/workshop-assessment-strategy'; +import { CoreSitePluginsBlockComponent } from '@core/siteplugins/components/block/block'; @NgModule({ declarations: [ CoreSitePluginsPluginContentComponent, CoreSitePluginsModuleIndexComponent, + CoreSitePluginsBlockComponent, CoreSitePluginsCourseOptionComponent, CoreSitePluginsCourseFormatComponent, CoreSitePluginsUserProfileFieldComponent, @@ -56,6 +58,7 @@ import { CoreSitePluginsWorkshopAssessmentStrategyComponent } from './workshop-a exports: [ CoreSitePluginsPluginContentComponent, CoreSitePluginsModuleIndexComponent, + CoreSitePluginsBlockComponent, CoreSitePluginsCourseOptionComponent, CoreSitePluginsCourseFormatComponent, CoreSitePluginsUserProfileFieldComponent, @@ -68,6 +71,7 @@ import { CoreSitePluginsWorkshopAssessmentStrategyComponent } from './workshop-a ], entryComponents: [ CoreSitePluginsModuleIndexComponent, + CoreSitePluginsBlockComponent, CoreSitePluginsCourseOptionComponent, CoreSitePluginsCourseFormatComponent, CoreSitePluginsUserProfileFieldComponent, diff --git a/src/core/siteplugins/providers/helper.ts b/src/core/siteplugins/providers/helper.ts index 395b777d5..ef7b93a60 100644 --- a/src/core/siteplugins/providers/helper.ts +++ b/src/core/siteplugins/providers/helper.ts @@ -64,6 +64,8 @@ import { CoreSitePluginsQuizAccessRuleHandler } from '../classes/handlers/quiz-a import { CoreSitePluginsAssignFeedbackHandler } from '../classes/handlers/assign-feedback-handler'; import { CoreSitePluginsAssignSubmissionHandler } from '../classes/handlers/assign-submission-handler'; import { CoreSitePluginsWorkshopAssessmentStrategyHandler } from '../classes/handlers/workshop-assessment-strategy-handler'; +import { CoreBlockDelegate } from '@core/block/providers/delegate'; +import { CoreSitePluginsBlockHandler } from '@core/siteplugins/classes/handlers/block-handler'; /** * Helper service to provide functionalities regarding site plugins. It basically has the features to load and register site @@ -92,7 +94,7 @@ export class CoreSitePluginsHelperProvider { private assignSubmissionDelegate: AddonModAssignSubmissionDelegate, private translate: TranslateService, private assignFeedbackDelegate: AddonModAssignFeedbackDelegate, private appProvider: CoreAppProvider, private workshopAssessmentStrategyDelegate: AddonWorkshopAssessmentStrategyDelegate, - private courseProvider: CoreCourseProvider) { + private courseProvider: CoreCourseProvider, private blockDelegate: CoreBlockDelegate) { this.logger = logger.getInstance('CoreSitePluginsHelperProvider'); @@ -478,6 +480,10 @@ export class CoreSitePluginsHelperProvider { promise = Promise.resolve(this.registerQuestionBehaviourHandler(plugin, handlerName, handlerSchema)); break; + case 'CoreBlockDelegate': + promise = Promise.resolve(this.registerBlockHandler(plugin, handlerName, handlerSchema, result)); + break; + case 'AddonMessageOutputDelegate': promise = Promise.resolve(this.registerMessageOutputHandler(plugin, handlerName, handlerSchema, result)); break; @@ -611,6 +617,27 @@ export class CoreSitePluginsHelperProvider { }); } + /** + * Given a handler in a plugin, register it in the block delegate. + * + * @param {any} plugin Data of the plugin. + * @param {string} handlerName Name of the handler in the plugin. + * @param {any} handlerSchema Data about the handler. + * @param {any} initResult Result of init function. + * @return {string|Promise} A string (or a promise resolved with a string) to identify the handler. + */ + protected registerBlockHandler(plugin: any, handlerName: string, handlerSchema: any, initResult: any): + string | Promise { + + const uniqueName = this.sitePluginsProvider.getHandlerUniqueName(plugin, handlerName), + blockName = (handlerSchema.moodlecomponent || plugin.component).replace('block_', ''); + + this.blockDelegate.registerHandler( + new CoreSitePluginsBlockHandler(uniqueName, blockName, handlerSchema, initResult)); + + return uniqueName; + } + /** * Given a handler in a plugin, register it in the course format delegate. * From bc4b6969668b480628dc0e016c1b516aa0cbea92 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 20 Mar 2019 16:15:07 +0100 Subject: [PATCH 142/263] MOBILE-2835 desktop: Remove data when unistall nsis --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 0c5fc0d62..2ca42cae4 100644 --- a/package.json +++ b/package.json @@ -227,6 +227,9 @@ }, "snap": { "confinement": "classic" + }, + "nsis": { + "deleteAppDataOnUninstall": true } } } From daa34a7caad3ec6ff451ef5ceb65ed312192074a Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 16 Apr 2019 18:23:22 +0200 Subject: [PATCH 143/263] MOBILE-2986 desktop: Add shortcut to open dev tools --- desktop/electron.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/desktop/electron.js b/desktop/electron.js index 343f81a5b..5e10f57b7 100644 --- a/desktop/electron.js +++ b/desktop/electron.js @@ -68,6 +68,14 @@ function createWindow() { // Append some text to the user agent. mainWindow.webContents.setUserAgent(mainWindow.webContents.getUserAgent() + ' ' + userAgent); + + // Add shortcut to open dev tools: Control/Cmd + Alt + I. + mainWindow.webContents.on('before-input-event', function(e, input) { + // The "meta" key is Cmd in MacOS and Control in Windows/Linux. + if (input.type == 'keyDown' && !input.isAutoRepeat && input.code == 'KeyI' && input.alt && input.meta) { + mainWindow.webContents.toggleDevTools(); + } + }, true) } // Make sure that only a single instance of the app is running. @@ -221,22 +229,18 @@ function setAppMenu() { submenu: [ { label: 'Cut', - accelerator: 'CmdOrCtrl+X', role: 'cut' }, { label: 'Copy', - accelerator: 'CmdOrCtrl+C', role: 'copy' }, { label: 'Paste', - accelerator: 'CmdOrCtrl+V', role: 'paste' }, { label: 'Select All', - accelerator: 'CmdOrCtrl+A', role: 'selectall' } ] From 9181455ffdec5e08461689f1549afce80f1d076b Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 25 Apr 2019 10:44:23 +0200 Subject: [PATCH 144/263] MOBILE-2915 desktop: Fix password change opened only once --- .../emulator/classes/inappbrowserobject.ts | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/core/emulator/classes/inappbrowserobject.ts b/src/core/emulator/classes/inappbrowserobject.ts index 95b23898f..1f45c7ba1 100644 --- a/src/core/emulator/classes/inappbrowserobject.ts +++ b/src/core/emulator/classes/inappbrowserobject.ts @@ -224,31 +224,38 @@ export class InAppBrowserObjectMock { } }; - switch (name) { - case 'loadstart': - this.window.webContents.on('did-start-loading', received); + if (!this.window.isDestroyed() && !this.window.webContents.isDestroyed()) { + switch (name) { + case 'loadstart': + this.window.webContents.on('did-start-loading', received); - if (this.isSSO) { - // Linux doesn't support custom URL Schemes. Check if launch page is loaded. - this.window.webContents.on('did-finish-load', finishLoad); - } - break; + if (this.isSSO) { + // Linux doesn't support custom URL Schemes. Check if launch page is loaded. + this.window.webContents.on('did-finish-load', finishLoad); + } + break; - case 'loadstop': - this.window.webContents.on('did-finish-load', received); - break; + case 'loadstop': + this.window.webContents.on('did-finish-load', received); + break; - case 'loaderror': - this.window.webContents.on('did-fail-load', received); - break; - case 'exit': - this.window.on('close', received); - break; - default: + case 'loaderror': + this.window.webContents.on('did-fail-load', received); + break; + case 'exit': + this.window.on('close', received); + break; + default: + } } return (): void => { // Unsubscribing. We need to remove the listeners. + if (this.window.isDestroyed() || this.window.webContents.isDestroyed()) { + // Page has been destroyed already, no need to remove listeners. + return; + } + switch (name) { case 'loadstart': this.window.webContents.removeListener('did-start-loading', received); From ded6099f43c8f5fe739add46114b1f88ff452141 Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Tue, 7 May 2019 12:42:23 +0200 Subject: [PATCH 145/263] MOBILE-2999 package: Fix phonegap-plugin-push version --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4e89f7b0c..29a9576ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3599,7 +3599,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -5971,7 +5971,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { From 29b959e0f8f721bb9502a73e123267b3700b84fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 7 May 2019 13:38:34 +0200 Subject: [PATCH 146/263] MOBILE-2915 scripts: Package desktop app images --- scripts/linux.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/linux.sh b/scripts/linux.sh index ef76cd0a5..571102f5b 100755 --- a/scripts/linux.sh +++ b/scripts/linux.sh @@ -27,6 +27,10 @@ if [ ! -z $GIT_ORG_PRIVATE ] && [ ! -z $GIT_TOKEN ] ; then mv *i386.AppImage linux-ia32.AppImage mv Moodle*.AppImage linux-x64.AppImage ls + + tar -czvf MoodleDesktop32.tar.gz linux-ia32.AppImage + tar -czvf MoodleDesktop64.tar.gz linux-x64.AppImage + rm *.AppImage git add . git commit -m "Linux desktop versions from Travis build $TRAVIS_BUILD_NUMBER" From 046fc79719e198f05cf84212d19dd9a0f64366d3 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 7 May 2019 15:16:39 +0200 Subject: [PATCH 147/263] MOBILE-2986 desktop: Adapt shortcut to platform for dev tools --- desktop/electron.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/desktop/electron.js b/desktop/electron.js index 5e10f57b7..a526fa466 100644 --- a/desktop/electron.js +++ b/desktop/electron.js @@ -6,6 +6,7 @@ const url = require('url'); const fs = require('fs'); const os = require('os'); const userAgent = 'MoodleMobile'; +const isMac = os.platform().indexOf('darwin') != -1; // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is garbage collected. @@ -69,10 +70,10 @@ function createWindow() { // Append some text to the user agent. mainWindow.webContents.setUserAgent(mainWindow.webContents.getUserAgent() + ' ' + userAgent); - // Add shortcut to open dev tools: Control/Cmd + Alt + I. + // Add shortcut to open dev tools: Cmd + Option + I in MacOS, Ctrl + Shift + I in Windows/Linux. mainWindow.webContents.on('before-input-event', function(e, input) { - // The "meta" key is Cmd in MacOS and Control in Windows/Linux. - if (input.type == 'keyDown' && !input.isAutoRepeat && input.code == 'KeyI' && input.alt && input.meta) { + if (input.type == 'keyDown' && !input.isAutoRepeat && input.code == 'KeyI' && + ((isMac && input.alt && input.meta) || (!isMac && input.shift && input.control))) { mainWindow.webContents.toggleDevTools(); } }, true) @@ -83,7 +84,7 @@ function createWindow() { // See https://github.com/electron/electron/issues/15958 var gotTheLock = app.requestSingleInstanceLock(); -if (!gotTheLock && os.platform().indexOf('darwin') == -1) { +if (!gotTheLock && !isMac) { // It's not the main instance of the app, kill it. app.exit(); return; From 90f9980bca285a10d9de830e191681d7457324ba Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 9 May 2019 15:22:07 +0200 Subject: [PATCH 148/263] MOBILE-2915 desktop: Fix resume in desktop --- src/core/emulator/emulator.module.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/emulator/emulator.module.ts b/src/core/emulator/emulator.module.ts index a74809625..fd903e89b 100644 --- a/src/core/emulator/emulator.module.ts +++ b/src/core/emulator/emulator.module.ts @@ -211,7 +211,8 @@ export const IONIC_NATIVE_PROVIDERS = [ ] }) export class CoreEmulatorModule { - constructor(appProvider: CoreAppProvider, initDelegate: CoreInitDelegate, helper: CoreEmulatorHelperProvider) { + constructor(appProvider: CoreAppProvider, initDelegate: CoreInitDelegate, helper: CoreEmulatorHelperProvider, + platform: Platform) { const win = window; // Convert the "window" to "any" type to be able to use non-standard properties. // Emulate Custom URL Scheme plugin in desktop apps. @@ -224,7 +225,7 @@ export class CoreEmulatorModule { // Listen for 'resume' events. require('electron').ipcRenderer.on('coreAppFocused', () => { - document.dispatchEvent(new Event('resume')); + platform.resume.emit(); }); } From af28ed2732e529cccf3d674c3618d4ac153645ca Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 7 May 2019 11:29:15 +0200 Subject: [PATCH 149/263] MOBILE-2992 rating: Helper function to merge rating infos --- src/core/rating/providers/rating.ts | 38 +++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/core/rating/providers/rating.ts b/src/core/rating/providers/rating.ts index e14e4593f..1b9104459 100644 --- a/src/core/rating/providers/rating.ts +++ b/src/core/rating/providers/rating.ts @@ -326,6 +326,44 @@ export class CoreRatingProvider { }); } + /** + * Convenience function to merge two or more rating infos of the same instance. + * + * @param {CoreRatingInfo[]} ratingInfos Array of rating infos. + * @return {CoreRatingInfo} Merged rating info or null. + */ + mergeRatingInfos(ratingInfos: CoreRatingInfo[]): CoreRatingInfo { + let result: CoreRatingInfo = null; + const scales = {}; + const ratings = {}; + + ratingInfos.forEach((ratingInfo) => { + if (!ratingInfo) { + // Skip null rating infos. + return; + } + + if (!result) { + result = Object.assign({}, ratingInfo); + } + + (ratingInfo.scales || []).forEach((scale) => { + scales[scale.id] = scale; + }); + + (ratingInfo.ratings || []).forEach((rating) => { + ratings[rating.itemid] = rating; + }); + }); + + if (result) { + result.scales = this.utils.objectToArray(scales); + result.ratings = this.utils.objectToArray(ratings); + } + + return result; + } + /** * Prefetch individual ratings. * From b6e15defddbac35b62070f201d70ca06cd9045c9 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 7 May 2019 13:09:55 +0200 Subject: [PATCH 150/263] MOBILE-2992 forum: Fix can add discussion WS invalidation --- src/addon/mod/forum/providers/forum.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index 6bd80e7bd..4a8429e4a 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -58,7 +58,7 @@ export class AddonModForumProvider { * @return {string} Cache key. */ protected getCanAddDiscussionCacheKey(forumId: number, groupId: number): string { - return this.getCommonCanAddDiscussionCacheKey(forumId) + ':' + groupId; + return this.getCommonCanAddDiscussionCacheKey(forumId) + groupId; } /** @@ -68,7 +68,7 @@ export class AddonModForumProvider { * @return {string} Cache key. */ protected getCommonCanAddDiscussionCacheKey(forumId: number): string { - return this.ROOT_CACHE_KEY + 'canadddiscussion:' + forumId; + return this.ROOT_CACHE_KEY + 'canadddiscussion:' + forumId + ':'; } /** From 65055653be65c58c1ce59df8a2fe6ff3b614ebd7 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Fri, 10 May 2019 10:50:11 +0200 Subject: [PATCH 151/263] MOBILE-2992 user: Get and sync preferences --- src/core/user/providers/offline.ts | 114 +++++++++++++++++ src/core/user/providers/sync-cron-handler.ts | 48 +++++++ src/core/user/providers/sync.ts | 100 +++++++++++++++ src/core/user/providers/user.ts | 125 ++++++++++++++++++- src/core/user/user.module.ts | 15 ++- 5 files changed, 396 insertions(+), 6 deletions(-) create mode 100644 src/core/user/providers/offline.ts create mode 100644 src/core/user/providers/sync-cron-handler.ts create mode 100644 src/core/user/providers/sync.ts diff --git a/src/core/user/providers/offline.ts b/src/core/user/providers/offline.ts new file mode 100644 index 000000000..36ccc4c05 --- /dev/null +++ b/src/core/user/providers/offline.ts @@ -0,0 +1,114 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreSitesProvider, CoreSiteSchema } from '@providers/sites'; + +/** + * Structure of offline user preferences. + */ +export interface CoreUserOfflinePreference { + name: string; + value: string; + onlinevalue: string; +} + +/** + * Service to handle offline user preferences. + */ +@Injectable() +export class CoreUserOfflineProvider { + + // Variables for database. + static PREFERENCES_TABLE = 'user_preferences'; + protected siteSchema: CoreSiteSchema = { + name: 'CoreUserOfflineProvider', + version: 1, + tables: [ + { + name: CoreUserOfflineProvider.PREFERENCES_TABLE, + columns: [ + { + name: 'name', + type: 'TEXT', + unique: true, + notNull: true + }, + { + name: 'value', + type: 'TEXT' + }, + { + name: 'onlinevalue', + type: 'TEXT' + }, + ] + } + ] + }; + + constructor(private sitesProvider: CoreSitesProvider) { + this.sitesProvider.registerSiteSchema(this.siteSchema); + } + + /** + * Get preferences that were changed offline. + * + * @return {Promise} Promise resolved with list of preferences. + */ + getChangedPreferences(siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return site.getDb().getRecordsSelect(CoreUserOfflineProvider.PREFERENCES_TABLE, 'value != onlineValue'); + }); + } + + /** + * Get an offline preference. + * + * @param {string} name Name of the preference. + * @return {Promise} Promise resolved with the preference, rejected if not found. + */ + getPreference(name: string, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + const conditions = { name }; + + return site.getDb().getRecord(CoreUserOfflineProvider.PREFERENCES_TABLE, conditions); + }); + } + + /** + * Set an offline preference. + * + * @param {string} name Name of the preference. + * @param {string} value Value of the preference. + * @param {string} onlineValue Online value of the preference. If unedfined, preserve previously stored value. + * @return {Promise} Promise resolved when done. + */ + setPreference(name: string, value: string, onlineValue?: string, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + let promise: Promise; + if (typeof onlineValue == 'undefined') { + promise = this.getPreference(name, site.id).then((preference) => preference.onlinevalue); + } else { + promise = Promise.resolve(onlineValue); + } + + return promise.then((onlineValue) => { + const record = { name, value, onlinevalue: onlineValue }; + + return site.getDb().insertRecord(CoreUserOfflineProvider.PREFERENCES_TABLE, record); + }); + }); + } +} diff --git a/src/core/user/providers/sync-cron-handler.ts b/src/core/user/providers/sync-cron-handler.ts new file mode 100644 index 000000000..a51b2da8b --- /dev/null +++ b/src/core/user/providers/sync-cron-handler.ts @@ -0,0 +1,48 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreCronHandler } from '@providers/cron'; +import { CoreUserSyncProvider } from './sync'; + +/** + * Synchronization cron handler. + */ +@Injectable() +export class CoreUserSyncCronHandler implements CoreCronHandler { + name = 'CoreUserSyncCronHandler'; + + constructor(private userSync: CoreUserSyncProvider) {} + + /** + * Execute the process. + * Receives the ID of the site affected, undefined for all sites. + * + * @param {string} [siteId] ID of the site affected, undefined for all sites. + * @param {boolean} [force] Wether the execution is forced (manual sync). + * @return {Promise} Promise resolved when done, rejected if failure. + */ + execute(siteId?: string, force?: boolean): Promise { + return this.userSync.syncPreferences(siteId); + } + + /** + * Get the time between consecutive executions. + * + * @return {number} Time between consecutive executions (in ms). + */ + getInterval(): number { + return 300000; // 5 minutes. + } +} diff --git a/src/core/user/providers/sync.ts b/src/core/user/providers/sync.ts new file mode 100644 index 000000000..c63e8dc61 --- /dev/null +++ b/src/core/user/providers/sync.ts @@ -0,0 +1,100 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { CoreLoggerProvider } from '@providers/logger'; +import { CoreSitesProvider } from '@providers/sites'; +import { CoreSyncBaseProvider } from '@classes/base-sync'; +import { CoreAppProvider } from '@providers/app'; +import { CoreUserOfflineProvider } from './offline'; +import { CoreUserProvider } from './user'; +import { CoreTextUtilsProvider } from '@providers/utils/text'; +import { CoreTimeUtilsProvider } from '@providers/utils/time'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { TranslateService } from '@ngx-translate/core'; +import { CoreSyncProvider } from '@providers/sync'; + +/** + * Service to sync user preferences. + */ +@Injectable() +export class CoreUserSyncProvider extends CoreSyncBaseProvider { + + static AUTO_SYNCED = 'core_user_autom_synced'; + + constructor(loggerProvider: CoreLoggerProvider, sitesProvider: CoreSitesProvider, appProvider: CoreAppProvider, + translate: TranslateService, syncProvider: CoreSyncProvider, textUtils: CoreTextUtilsProvider, + private userOffline: CoreUserOfflineProvider, private userProvider: CoreUserProvider, + private utils: CoreUtilsProvider, timeUtils: CoreTimeUtilsProvider) { + super('CoreUserSync', loggerProvider, sitesProvider, appProvider, syncProvider, textUtils, translate, timeUtils); + } + + /** + * Try to synchronize user preferences in a certain site or in all sites. + * + * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @return {Promise} Promise resolved if sync is successful, rejected if sync fails. + */ + syncPreferences(siteId?: string): Promise { + const syncFunctionLog = 'all user preferences'; + + return this.syncOnSites(syncFunctionLog, this.syncPreferencesFunc.bind(this), [], siteId); + } + + /** + * Sync user preferences of a site. + * + * @param {string} [siteId] Site ID to sync. If not defined, sync all sites. + * @param {Promise} Promise resolved if sync is successful, rejected if sync fails. + */ + protected syncPreferencesFunc(siteId?: string): Promise { + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + + const syncId = 'preferences'; + + if (this.isSyncing(syncId, siteId)) { + // There's already a sync ongoing, return the promise. + return this.getOngoingSync(syncId, siteId); + } + + const warnings = []; + + this.logger.debug(`Try to sync user preferences`); + + const syncPromise = this.userOffline.getChangedPreferences(siteId).then((preferences) => { + return this.utils.allPromises(preferences.map((preference) => { + return this.userProvider.getUserPreferenceOnline(preference.name, siteId).then((onlineValue) => { + if (preference.onlinevalue != onlineValue) { + // Prefernce was changed on web while the app was offline, do not sync. + return this.userOffline.setPreference(preference.name, onlineValue, onlineValue, siteId); + } + + return this.userProvider.setUserPreference(name, preference.value, siteId).catch((error) => { + if (this.utils.isWebServiceError(error)) { + warnings.push(this.textUtils.getErrorMessageFromError(error)); + } else { + // Couldn't connect to server, reject. + return Promise.reject(error); + } + }); + }); + })); + }).then(() => { + // All done, return the warnings. + return warnings; + }); + + return this.addOngoingSync(syncId, syncPromise, siteId); + } +} diff --git a/src/core/user/providers/user.ts b/src/core/user/providers/user.ts index dd87758d8..085a73502 100644 --- a/src/core/user/providers/user.ts +++ b/src/core/user/providers/user.ts @@ -15,9 +15,11 @@ import { Injectable } from '@angular/core'; import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreLoggerProvider } from '@providers/logger'; -import { CoreSite } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { CoreSitesProvider, CoreSiteSchema } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CoreAppProvider } from '@providers/app'; +import { CoreUserOfflineProvider } from './offline'; /** * Service to provide user functionalities. @@ -59,7 +61,8 @@ export class CoreUserProvider { protected logger; constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private utils: CoreUtilsProvider, - private filepoolProvider: CoreFilepoolProvider) { + private filepoolProvider: CoreFilepoolProvider, private appProvider: CoreAppProvider, + private userOffline: CoreUserOfflineProvider) { this.logger = logger.getInstance('CoreUserProvider'); this.sitesProvider.registerSiteSchema(this.siteSchema); } @@ -272,6 +275,67 @@ export class CoreUserProvider { }); } + /** + * Get a user preference (online or offline). + * + * @param {string} name Name of the preference. + * @param {string} [siteId] Site Id. If not defined, use current site. + * @return {string} Preference value or null if preference not set. + */ + getUserPreference(name: string, siteId?: string): Promise { + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + + return this.userOffline.getPreference(name, siteId).catch(() => { + return null; + }).then((preference) => { + if (preference && !this.appProvider.isOnline()) { + // Offline, return stored value. + return preference.value; + } + + return this.getUserPreferenceOnline(name, siteId).then((wsValue) => { + if (preference && preference.value != preference.onlinevalue && preference.onlinevalue == wsValue) { + // Sync is pending for this preference, return stored value. + return preference.value; + } + + return this.userOffline.setPreference(name, wsValue, wsValue).then(() => { + return wsValue; + }); + }); + }); + } + + /** + * Get cache key for a user preference WS call. + * + * @param {string} name Preference name. + * @return {string} Cache key. + */ + protected getUserPreferenceCacheKey(name: string): string { + return this.ROOT_CACHE_KEY + 'preference:' + name; + } + + /** + * Get a user preference online. + * + * @param {string} name Name of the preference. + * @param {string} [siteId] Site Id. If not defined, use current site. + * @return {string} Preference value or null if preference not set. + */ + getUserPreferenceOnline(name: string, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + const data = { name }; + const preSets: CoreSiteWSPreSets = { + cacheKey: this.getUserPreferenceCacheKey(data.name) + }; + + return site.read('core_user_get_user_preferences', data, preSets).then((result) => { + return result.preferences[0] ? result.preferences[0].value : null; + }); + }); + } + /** * Invalidates user WS calls. * @@ -298,6 +362,19 @@ export class CoreUserProvider { }); } + /** + * Invalidate user preference. + * + * @param {string} name Name of the preference. + * @param {string} [siteId] Site Id. If not defined, use current site. + * @return {Promise} Promise resolved when the data is invalidated. + */ + invalidateUserPreference(name: string, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return site.invalidateWsCacheForKey(this.getUserPreferenceCacheKey(name)); + }); + } + /** * Check if course participants is disabled in a certain site. * @@ -455,6 +532,45 @@ export class CoreUserProvider { return Promise.all(promises); } + /** + * Set a user preference (online or offline). + * + * @param {string} name Name of the preference. + * @param {string} value Value of the preference. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved on success. + */ + setUserPreference(name: string, value: string, siteId?: string): Promise { + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + + let isOnline = this.appProvider.isOnline(); + let promise: Promise; + + if (isOnline) { + const preferences = [{type: name, value}]; + promise = this.updateUserPreferences(preferences, undefined, undefined, siteId).catch((error) => { + // Preference not saved online. + isOnline = false; + + return Promise.reject(error); + }); + } else { + promise = Promise.resolve(); + } + + return promise.finally(() => { + // Update stored online value if saved online. + const onlineValue = isOnline ? value : undefined; + + return Promise.all([ + this.userOffline.setPreference(name, value, onlineValue), + this.invalidateUserPreference(name).catch(() => { + // Ignore error. + }) + ]); + }); + } + /** * Update a preference for a user. * @@ -478,13 +594,14 @@ export class CoreUserProvider { /** * Update some preferences for a user. * - * @param {any} preferences List of preferences. + * @param {{name: string, value: string}[]} preferences List of preferences. * @param {boolean} [disableNotifications] Whether to disable all notifications. Undefined to not update this value. * @param {number} [userId] User ID. If not defined, site's current user. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved if success. */ - updateUserPreferences(preferences: any, disableNotifications: boolean, userId?: number, siteId?: string): Promise { + updateUserPreferences(preferences: {type: string, value: string}[], disableNotifications?: boolean, userId?: number, + siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { userId = userId || site.getUserId(); diff --git a/src/core/user/user.module.ts b/src/core/user/user.module.ts index d2886ffe3..845f2179e 100644 --- a/src/core/user/user.module.ts +++ b/src/core/user/user.module.ts @@ -26,6 +26,10 @@ import { CoreUserParticipantsCourseOptionHandler } from './providers/course-opti import { CoreUserParticipantsLinkHandler } from './providers/participants-link-handler'; import { CoreCourseOptionsDelegate } from '@core/course/providers/options-delegate'; import { CoreUserComponentsModule } from './components/components.module'; +import { CoreCronDelegate } from '@providers/cron'; +import { CoreUserOfflineProvider } from './providers/offline'; +import { CoreUserSyncProvider } from './providers/sync'; +import { CoreUserSyncCronHandler } from './providers/sync-cron-handler'; // List of providers (without handlers). export const CORE_USER_PROVIDERS: any[] = [ @@ -33,6 +37,8 @@ export const CORE_USER_PROVIDERS: any[] = [ CoreUserProfileFieldDelegate, CoreUserProvider, CoreUserHelperProvider, + CoreUserOfflineProvider, + CoreUserSyncProvider ]; @NgModule({ @@ -46,10 +52,13 @@ export const CORE_USER_PROVIDERS: any[] = [ CoreUserProfileFieldDelegate, CoreUserProvider, CoreUserHelperProvider, + CoreUserOfflineProvider, + CoreUserSyncProvider, CoreUserProfileMailHandler, CoreUserProfileLinkHandler, CoreUserParticipantsCourseOptionHandler, - CoreUserParticipantsLinkHandler + CoreUserParticipantsLinkHandler, + CoreUserSyncCronHandler, ] }) export class CoreUserModule { @@ -57,12 +66,14 @@ export class CoreUserModule { eventsProvider: CoreEventsProvider, sitesProvider: CoreSitesProvider, userProvider: CoreUserProvider, contentLinksDelegate: CoreContentLinksDelegate, userLinkHandler: CoreUserProfileLinkHandler, courseOptionHandler: CoreUserParticipantsCourseOptionHandler, linkHandler: CoreUserParticipantsLinkHandler, - courseOptionsDelegate: CoreCourseOptionsDelegate) { + courseOptionsDelegate: CoreCourseOptionsDelegate, cronDelegate: CoreCronDelegate, + syncHandler: CoreUserSyncCronHandler) { userDelegate.registerHandler(userProfileMailHandler); courseOptionsDelegate.registerHandler(courseOptionHandler); contentLinksDelegate.registerHandler(userLinkHandler); contentLinksDelegate.registerHandler(linkHandler); + cronDelegate.register(syncHandler); eventsProvider.on(CoreEventsProvider.USER_DELETED, (data) => { // Search for userid in params. From da2a835670edd194e349ee07aa311a94906b5994 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 7 May 2019 11:30:56 +0200 Subject: [PATCH 152/263] MOBILE-2992 forum: Sort discussions --- scripts/langindex.json | 7 + .../index/addon-mod-forum-index.html | 24 ++- .../mod/forum/components/index/index.scss | 8 + src/addon/mod/forum/components/index/index.ts | 79 +++++++- src/addon/mod/forum/lang/en.json | 6 + .../sort-order-selector.html | 19 ++ .../sort-order-selector.module.ts | 33 ++++ .../sort-order-selector.ts | 51 +++++ src/addon/mod/forum/providers/forum.ts | 174 +++++++++++++++--- src/addon/mod/forum/providers/helper.ts | 2 +- .../mod/forum/providers/prefetch-handler.ts | 47 +++-- src/assets/lang/en.json | 7 + src/lang/en.json | 1 + 13 files changed, 401 insertions(+), 57 deletions(-) create mode 100644 src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.html create mode 100644 src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.module.ts create mode 100644 src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.ts diff --git a/scripts/langindex.json b/scripts/langindex.json index 1afd0fd4a..0cbd6b03a 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -483,6 +483,12 @@ "addon.mod_forum.addanewtopic": "forum", "addon.mod_forum.addtofavourites": "forum", "addon.mod_forum.advanced": "forum", + "addon.mod_forum.bycreateddesc": "local_moodlemobileapp", + "addon.mod_forum.bycreatedasc": "local_moodlemobileapp", + "addon.mod_forum.bylastpostdesc": "local_moodlemobileapp", + "addon.mod_forum.bylastpostasc": "local_moodlemobileapp", + "addon.mod_forum.byrepliesdesc": "local_moodlemobileapp", + "addon.mod_forum.byrepliesasc": "local_moodlemobileapp", "addon.mod_forum.cannotadddiscussion": "forum", "addon.mod_forum.cannotadddiscussionall": "forum", "addon.mod_forum.cannotcreatediscussion": "forum", @@ -1734,6 +1740,7 @@ "core.sizemb": "moodle", "core.sizetb": "local_moodlemobileapp", "core.sorry": "local_moodlemobileapp", + "core.sort": "moodle", "core.sortby": "moodle", "core.start": "grouptool", "core.strftimedate": "langconfig", diff --git a/src/addon/mod/forum/components/index/addon-mod-forum-index.html b/src/addon/mod/forum/components/index/addon-mod-forum-index.html index f0f1fa603..9d93ce8b0 100644 --- a/src/addon/mod/forum/components/index/addon-mod-forum-index.html +++ b/src/addon/mod/forum/components/index/addon-mod-forum-index.html @@ -8,6 +8,7 @@ + @@ -30,6 +31,21 @@ {{ availabilityMessage }} + +
+ +
+
+ +
+ +
+ @@ -86,14 +102,6 @@ - -
- -
-
- diff --git a/src/addon/mod/forum/components/index/index.scss b/src/addon/mod/forum/components/index/index.scss index 09429a4e4..733686a59 100644 --- a/src/addon/mod/forum/components/index/index.scss +++ b/src/addon/mod/forum/components/index/index.scss @@ -2,7 +2,15 @@ ion-app.app-root addon-mod-forum-index { .addon-forum-discussion-selected { border-top: 5px solid $core-splitview-selected; } + .addon-forum-star { color: $core-star-color; } + + button.core-button-select .core-section-selector-text { + overflow: hidden; + text-overflow: ellipsis; + line-height: 2em; + white-space: nowrap; + } } diff --git a/src/addon/mod/forum/components/index/index.ts b/src/addon/mod/forum/components/index/index.ts index 762df73f4..6b8a5994c 100644 --- a/src/addon/mod/forum/components/index/index.ts +++ b/src/addon/mod/forum/components/index/index.ts @@ -13,7 +13,7 @@ // limitations under the License. import { Component, Optional, Injector, ViewChild } from '@angular/core'; -import { Content, NavController } from 'ionic-angular'; +import { Content, ModalController, NavController } from 'ionic-angular'; import { CoreSplitViewComponent } from '@components/split-view/split-view'; import { CoreCourseModuleMainActivityComponent } from '@core/course/classes/main-activity-component'; import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate'; @@ -52,6 +52,11 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom addDiscussionText = this.translate.instant('addon.mod_forum.addanewdiscussion'); availabilityMessage: string; + sortingAvailable: boolean; + sortOrders = []; + selectedSortOrder = null; + sortOrderSelectorExpanded = false; + protected syncEventName = AddonModForumSyncProvider.AUTO_SYNCED; protected page = 0; protected trackPosts = false; @@ -69,6 +74,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom constructor(injector: Injector, @Optional() protected content: Content, protected navCtrl: NavController, + protected modalCtrl: ModalController, protected groupsProvider: CoreGroupsProvider, protected userProvider: CoreUserProvider, protected forumProvider: AddonModForumProvider, @@ -79,6 +85,9 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom protected prefetchHandler: AddonModForumPrefetchHandler, protected ratingOffline: CoreRatingOfflineProvider) { super(injector); + + this.sortingAvailable = this.forumProvider.isDiscussionListSortingAvailable(); + this.sortOrders = this.forumProvider.getAvailableSortOrders(); } /** @@ -162,7 +171,9 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom protected fetchContent(refresh: boolean = false, sync: boolean = false, showErrors: boolean = false): Promise { this.loadMoreError = false; - return this.forumProvider.getForum(this.courseId, this.module.id).then((forum) => { + const promises = []; + + promises.push(this.forumProvider.getForum(this.courseId, this.module.id).then((forum) => { this.forum = forum; this.description = forum.intro || this.description; @@ -212,7 +223,11 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom this.canAddDiscussion = this.forum.cancreatediscussions && !cutoffDateReached; }), ]); - }).then(() => { + })); + + promises.push(this.fetchSortOrderPreference()); + + return Promise.all(promises).then(() => { return Promise.all([ this.fetchOfflineDiscussion(), this.fetchDiscussions(refresh), @@ -291,7 +306,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom this.page = 0; } - return this.forumProvider.getDiscussions(this.forum.id, this.page).then((response) => { + return this.forumProvider.getDiscussions(this.forum.id, this.selectedSortOrder.value, this.page).then((response) => { let promise; if (this.usesGroups) { promise = this.forumProvider.formatDiscussionsGroups(this.forum.cmid, response.discussions); @@ -366,6 +381,27 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom }); } + /** + * Convenience function to fetch the sort order preference. + * + * @return {Promise} Promise resolved when done. + */ + protected fetchSortOrderPreference(): Promise { + let promise; + if (this.sortingAvailable) { + promise = this.userProvider.getUserPreference(AddonModForumProvider.PREFERENCE_SORTORDER).then((value) => { + return value ? parseInt(value, 10) : null; + }); + } else { + // Use default. + promise = Promise.resolve(null); + } + + return promise.then((value) => { + this.selectedSortOrder = this.sortOrders.find((sortOrder) => sortOrder.value === value) || this.sortOrders[0]; + }); + } + /** * Perform the invalidate content function. * @@ -382,6 +418,10 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom promises.push(this.forumProvider.invalidateAccessInformation(this.forum.id)); } + if (this.sortingAvailable) { + promises.push(this.userProvider.invalidateUserPreference(AddonModForumProvider.PREFERENCE_SORTORDER)); + } + return Promise.all(promises); } @@ -484,6 +524,37 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom this.selectedDiscussion = 0; } + /** + * Display the sort order selector modal. + * + * @param {MouseEvent} event Event. + */ + showSortOrderSelector(event: MouseEvent): void { + if (!this.sortingAvailable) { + return; + } + + const params = { sortOrders: this.sortOrders, selected: this.selectedSortOrder.value }; + const modal = this.modalCtrl.create('AddonModForumSortOrderSelectorPage', params); + modal.onDidDismiss((sortOrder) => { + this.sortOrderSelectorExpanded = false; + + if (sortOrder && sortOrder.value != this.selectedSortOrder.value) { + this.selectedSortOrder = sortOrder; + this.page = 0; + this.userProvider.setUserPreference(AddonModForumProvider.PREFERENCE_SORTORDER, sortOrder.value.toFixed(0)) + .then(() => { + this.showLoadingAndFetch(); + }).catch((error) => { + this.domUtils.showErrorModalDefault(error, 'Error updating preference.'); + }); + } + }); + + modal.present({ev: event}); + this.sortOrderSelectorExpanded = true; + } + /** * Component being destroyed. */ diff --git a/src/addon/mod/forum/lang/en.json b/src/addon/mod/forum/lang/en.json index 04f70e158..0b0181230 100644 --- a/src/addon/mod/forum/lang/en.json +++ b/src/addon/mod/forum/lang/en.json @@ -4,6 +4,12 @@ "addanewtopic": "Add a new topic", "addtofavourites": "Star this discussion", "advanced": "Advanced", + "bycreateddesc": "By creation date in descending order", + "bycreatedasc": "By creation date in ascending order", + "bylastpostdesc": "By last post in descending order", + "bylastpostasc": "By last post in ascending order", + "byrepliesdesc": "By number of replies in descending order", + "byrepliesasc": "By number of replies in ascending order", "cannotadddiscussion": "Adding discussions to this forum requires group membership.", "cannotadddiscussionall": "You do not have permission to add a new discussion topic for all participants.", "cannotcreatediscussion": "Could not create new discussion", diff --git a/src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.html b/src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.html new file mode 100644 index 000000000..a3411deea --- /dev/null +++ b/src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.html @@ -0,0 +1,19 @@ + + + {{ 'core.sort' | translate }} + + + + + + + + + +

+
+
+
+
diff --git a/src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.module.ts b/src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.module.ts new file mode 100644 index 000000000..9a10ae395 --- /dev/null +++ b/src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.module.ts @@ -0,0 +1,33 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { NgModule } from '@angular/core'; +import { IonicPageModule } from 'ionic-angular'; +import { TranslateModule } from '@ngx-translate/core'; +import { CoreComponentsModule } from '@components/components.module'; +import { CoreDirectivesModule } from '@directives/directives.module'; +import { AddonModForumSortOrderSelectorPage } from './sort-order-selector'; + +@NgModule({ + declarations: [ + AddonModForumSortOrderSelectorPage, + ], + imports: [ + CoreComponentsModule, + CoreDirectivesModule, + IonicPageModule.forChild(AddonModForumSortOrderSelectorPage), + TranslateModule.forChild() + ], +}) +export class AddonModForumSortOrderSelectorPagePageModule {} diff --git a/src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.ts b/src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.ts new file mode 100644 index 000000000..0d83646a6 --- /dev/null +++ b/src/addon/mod/forum/pages/sort-order-selector/sort-order-selector.ts @@ -0,0 +1,51 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Component } from '@angular/core'; +import { IonicPage, NavParams, ViewController } from 'ionic-angular'; + +/** + * Page that displays the sort selector. + */ +@IonicPage({ segment: 'addon-mod-forum-sort-order-selector' }) +@Component({ + selector: 'page-addon-mod-forum-sort-order-selector', + templateUrl: 'sort-order-selector.html', +}) +export class AddonModForumSortOrderSelectorPage { + + sortOrders = []; + selected: number; + + constructor(navParams: NavParams, private viewCtrl: ViewController) { + this.sortOrders = navParams.get('sortOrders'); + this.selected = navParams.get('selected'); + } + + /** + * Close the modal. + */ + closeModal(): void { + this.viewCtrl.dismiss(); + } + + /** + * Select a sort order. + * + * @param {any} sortOrder Selected sort order. + */ + selectSortOrder(sortOrder: any): void { + this.viewCtrl.dismiss(sortOrder); + } +} diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index 4a8429e4a..cb78875be 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -14,7 +14,7 @@ import { Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; -import { CoreSite } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreGroupsProvider } from '@providers/groups'; @@ -38,6 +38,14 @@ export class AddonModForumProvider { static CHANGE_DISCUSSION_EVENT = 'addon_mod_forum_lock_discussion'; static MARK_READ_EVENT = 'addon_mod_forum_mark_read'; + static PREFERENCE_SORTORDER = 'forum_discussionlistsortorder'; + static SORTORDER_LASTPOST_DESC = 1; + static SORTORDER_LASTPOST_ASC = 2; + static SORTORDER_CREATED_DESC = 3; + static SORTORDER_CREATED_ASC = 4; + static SORTORDER_REPLIES_DESC = 5; + static SORTORDER_REPLIES_ASC = 6; + protected ROOT_CACHE_KEY = 'mmaModForum:'; constructor(private appProvider: CoreAppProvider, @@ -105,10 +113,17 @@ export class AddonModForumProvider { * Get cache key for forum discussions list WS calls. * * @param {number} forumId Forum ID. - * @return {string} Cache key. + * @param {number} sortOrder Sort order. + * @return {string} Cache key. */ - protected getDiscussionsListCacheKey(forumId: number): string { - return this.ROOT_CACHE_KEY + 'discussions:' + forumId; + protected getDiscussionsListCacheKey(forumId: number, sortOrder: number): string { + let key = this.ROOT_CACHE_KEY + 'discussions:' + forumId; + + if (sortOrder != AddonModForumProvider.SORTORDER_LASTPOST_DESC) { + key += ':' + sortOrder; + } + + return key; } /** @@ -452,10 +467,64 @@ export class AddonModForumProvider { }); } + /** + * Return whether discussion lists can be sorted. + * + * @param {CoreSite} [site] Site. If not defined, current site. + * @return {boolean} True if discussion lists can be sorted. + */ + isDiscussionListSortingAvailable(site?: CoreSite): boolean { + site = site || this.sitesProvider.getCurrentSite(); + + return site.isVersionGreaterEqualThan('3.7'); + } + + /** + * Return the list of available sort orders. + * + * @return {{label: string, value: number}[]} List of sort orders. + */ + getAvailableSortOrders(): {label: string, value: number}[] { + const sortOrders = [ + { + label: 'addon.mod_forum.bylastpostdesc', + value: AddonModForumProvider.SORTORDER_LASTPOST_DESC + }, + ]; + + if (this.isDiscussionListSortingAvailable()) { + sortOrders.push( + { + label: 'addon.mod_forum.bylastpostasc', + value: AddonModForumProvider.SORTORDER_LASTPOST_ASC + }, + { + label: 'addon.mod_forum.bycreateddesc', + value: AddonModForumProvider.SORTORDER_CREATED_DESC + }, + { + label: 'addon.mod_forum.bycreatedasc', + value: AddonModForumProvider.SORTORDER_CREATED_ASC + }, + { + label: 'addon.mod_forum.byrepliesdesc', + value: AddonModForumProvider.SORTORDER_REPLIES_DESC + }, + { + label: 'addon.mod_forum.byrepliesasc', + value: AddonModForumProvider.SORTORDER_REPLIES_ASC + } + ); + } + + return sortOrders; + } + /** * Get forum discussions. * * @param {number} forumId Forum ID. + * @param {number} [sortOrder] Sort order. * @param {number} [page=0] Page. * @param {boolean} [forceCache] True to always get the value from cache. false otherwise. * @param {string} [siteId] Site ID. If not defined, current site. @@ -463,23 +532,59 @@ export class AddonModForumProvider { * - discussions: List of discussions. * - canLoadMore: True if there may be more discussions to load. */ - getDiscussions(forumId: number, page: number = 0, forceCache?: boolean, siteId?: string): Promise { + getDiscussions(forumId: number, sortOrder?: number, page: number = 0, forceCache?: boolean, siteId?: string): Promise { + sortOrder = sortOrder || AddonModForumProvider.SORTORDER_LASTPOST_DESC; + return this.sitesProvider.getSite(siteId).then((site) => { - const params = { + let method = 'mod_forum_get_forum_discussions_paginated'; + const params: any = { forumid: forumId, - sortby: 'timemodified', - sortdirection: 'DESC', page: page, perpage: AddonModForumProvider.DISCUSSIONS_PER_PAGE }; - const preSets: any = { - cacheKey: this.getDiscussionsListCacheKey(forumId) + + if (site.wsAvailable('mod_forum_get_forum_discussions')) { + // Since Moodle 3.7. + method = 'mod_forum_get_forum_discussions'; + params.sortorder = sortOrder; + } else { + if (sortOrder == AddonModForumProvider.SORTORDER_LASTPOST_DESC) { + params.sortby = 'timemodified'; + params.sortdirection = 'DESC'; + } else { + // Sorting not supported with the old WS method. + return Promise.reject(null); + } + } + const preSets: CoreSiteWSPreSets = { + cacheKey: this.getDiscussionsListCacheKey(forumId, sortOrder) }; if (forceCache) { preSets.omitExpires = true; } - return site.read('mod_forum_get_forum_discussions_paginated', params, preSets).then((response) => { + return site.read(method, params, preSets).catch((error) => { + // Try to get the data from cache stored with the old WS method. + if (!this.appProvider.isOnline() && method == 'mod_forum_get_forum_discussion' && + sortOrder == AddonModForumProvider.SORTORDER_LASTPOST_DESC) { + + const params = { + forumid: forumId, + page: page, + perpage: AddonModForumProvider.DISCUSSIONS_PER_PAGE, + sortby: 'timemodified', + sortdirection: 'DESC' + }; + const preSets: CoreSiteWSPreSets = { + cacheKey: this.getDiscussionsListCacheKey(forumId, sortOrder), + omitExpires: true + }; + + return site.read('mod_forum_get_forum_discussions_paginated', params, preSets); + } + + return Promise.reject(error); + }).then((response) => { if (response) { this.storeUserData(response.discussions); @@ -499,7 +604,8 @@ export class AddonModForumProvider { * If a page fails, the discussions until that page will be returned along with a flag indicating an error occurred. * * @param {number} forumId Forum ID. - * @param {boolean} forceCache True to always get the value from cache, false otherwise. + * @param {number} [sortOrder] Sort order. + * @param {boolean} [forceCache] True to always get the value from cache, false otherwise. * @param {number} [numPages] Number of pages to get. If not defined, all pages. * @param {number} [startPage] Page to start. If not defined, first page. * @param {string} [siteId] Site ID. If not defined, current site. @@ -507,8 +613,8 @@ export class AddonModForumProvider { * - discussions: List of discussions. * - error: True if an error occurred, false otherwise. */ - getDiscussionsInPages(forumId: number, forceCache?: boolean, numPages?: number, startPage?: number, siteId?: string) - : Promise { + getDiscussionsInPages(forumId: number, sortOrder?: number, forceCache?: boolean, numPages?: number, startPage?: number, + siteId?: string): Promise { if (typeof numPages == 'undefined') { numPages = -1; } @@ -525,7 +631,7 @@ export class AddonModForumProvider { const getPage = (page: number): Promise => { // Get page discussions. - return this.getDiscussions(forumId, page, forceCache, siteId).then((response) => { + return this.getDiscussions(forumId, sortOrder, page, forceCache, siteId).then((response) => { result.discussions = result.discussions.concat(response.discussions); numPages--; @@ -569,22 +675,32 @@ export class AddonModForumProvider { invalidateContent(moduleId: number, courseId: number): Promise { // Get the forum first, we need the forum ID. return this.getForum(courseId, moduleId).then((forum) => { - // We need to get the list of discussions to be able to invalidate their posts. - return this.getDiscussionsInPages(forum.id, true).then((response) => { - // Now invalidate the WS calls. - const promises = []; + const promises = []; - promises.push(this.invalidateForumData(courseId)); - promises.push(this.invalidateDiscussionsList(forum.id)); - promises.push(this.invalidateCanAddDiscussion(forum.id)); - promises.push(this.invalidateAccessInformation(forum.id)); + promises.push(this.invalidateForumData(courseId)); + promises.push(this.invalidateDiscussionsList(forum.id)); + promises.push(this.invalidateCanAddDiscussion(forum.id)); + promises.push(this.invalidateAccessInformation(forum.id)); - response.discussions.forEach((discussion) => { - promises.push(this.invalidateDiscussionPosts(discussion.discussion)); - }); + this.getAvailableSortOrders().forEach((sortOrder) => { + // We need to get the list of discussions to be able to invalidate their posts. + promises.push(this.getDiscussionsInPages(forum.id, sortOrder.value, true).then((response) => { + // Now invalidate the WS calls. + const promises = []; - return this.utils.allPromises(promises); + response.discussions.forEach((discussion) => { + promises.push(this.invalidateDiscussionPosts(discussion.discussion)); + }); + + return this.utils.allPromises(promises); + })); }); + + if (this.isDiscussionListSortingAvailable()) { + promises.push(this.userProvider.invalidateUserPreference(AddonModForumProvider.PREFERENCE_SORTORDER)); + } + + return this.utils.allPromises(promises); }); } @@ -623,7 +739,9 @@ export class AddonModForumProvider { */ invalidateDiscussionsList(forumId: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { - return site.invalidateWsCacheForKey(this.getDiscussionsListCacheKey(forumId)); + return this.utils.allPromises(this.getAvailableSortOrders().map((sortOrder) => { + return site.invalidateWsCacheForKey(this.getDiscussionsListCacheKey(forumId, sortOrder.value)); + })); }); } diff --git a/src/addon/mod/forum/providers/helper.ts b/src/addon/mod/forum/providers/helper.ts index 3e5928bde..5c568c911 100644 --- a/src/addon/mod/forum/providers/helper.ts +++ b/src/addon/mod/forum/providers/helper.ts @@ -162,7 +162,7 @@ export class AddonModForumHelperProvider { siteId = siteId || this.sitesProvider.getCurrentSiteId(); const findDiscussion = (page: number): Promise => { - return this.forumProvider.getDiscussions(forumId, page, false, siteId).then((response) => { + return this.forumProvider.getDiscussions(forumId, undefined, page, false, siteId).then((response) => { if (response.discussions && response.discussions.length > 0) { const discussion = response.discussions.find((discussion) => discussion.id == discussionId); if (discussion) { diff --git a/src/addon/mod/forum/providers/prefetch-handler.ts b/src/addon/mod/forum/providers/prefetch-handler.ts index ec799c6b2..ab8461414 100644 --- a/src/addon/mod/forum/providers/prefetch-handler.ts +++ b/src/addon/mod/forum/providers/prefetch-handler.ts @@ -25,7 +25,7 @@ import { CoreGroupsProvider } from '@providers/groups'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonModForumProvider } from './forum'; import { AddonModForumSyncProvider } from './sync'; -import { CoreRatingProvider } from '@core/rating/providers/rating'; +import { CoreRatingProvider, CoreRatingInfo } from '@core/rating/providers/rating'; /** * Handler to prefetch forums. @@ -107,26 +107,36 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand * @return {Promise} Promise resolved with array of posts. */ protected getPostsForPrefetch(forum: any): Promise { - // Get discussions in first 2 pages. - return this.forumProvider.getDiscussionsInPages(forum.id, false, 2).then((response) => { - if (response.error) { - return Promise.reject(null); - } + const posts = {}; + const ratingInfos: CoreRatingInfo[] = []; - const promises = []; - let posts = []; + const promises = this.forumProvider.getAvailableSortOrders().map((sortOrder) => { + // Get discussions in first 2 pages. + return this.forumProvider.getDiscussionsInPages(forum.id, sortOrder.value, false, 2).then((response) => { + if (response.error) { + return Promise.reject(null); + } - response.discussions.forEach((discussion) => { - promises.push(this.forumProvider.getDiscussionPosts(discussion.discussion).then((response) => { - posts = posts.concat(response.posts); + const promises = []; - return this.ratingProvider.prefetchRatings('module', forum.cmid, forum.scale, forum.course, - response.ratinginfo); - })); + response.discussions.forEach((discussion) => { + promises.push(this.forumProvider.getDiscussionPosts(discussion.discussion).then((response) => { + response.posts.forEach((post) => { + posts[post.id] = post; + }); + ratingInfos.push(response.ratinginfo); + })); + }); + + return Promise.all(promises); }); + }); - return Promise.all(promises).then(() => { - return posts; + return Promise.all(promises).then(() => { + const ratingInfo = this.ratingProvider.mergeRatingInfos(ratingInfos); + + return this.ratingProvider.prefetchRatings('module', forum.cmid, forum.scale, forum.course, ratingInfo).then(() => { + return this.utils.objectToArray(posts); }); }); } @@ -210,6 +220,11 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand // Prefetch access information. promises.push(this.forumProvider.getAccessInformation(forum.id)); + // Prefetch sort order preference. + if (this.forumProvider.isDiscussionListSortingAvailable()) { + promises.push(this.userProvider.getUserPreference(AddonModForumProvider.PREFERENCE_SORTORDER)); + } + return Promise.all(promises); }); } diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 7cbba2a50..83315fe76 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -483,6 +483,12 @@ "addon.mod_forum.addanewtopic": "Add a new topic", "addon.mod_forum.addtofavourites": "Star this discussion", "addon.mod_forum.advanced": "Advanced", + "addon.mod_forum.bycreatedasc": "By creation date in ascending order", + "addon.mod_forum.bycreateddesc": "By creation date in descending order", + "addon.mod_forum.bylastpostasc": "By last post in ascending order", + "addon.mod_forum.bylastpostdesc": "By last post in descending order", + "addon.mod_forum.byrepliesasc": "By number of replies in ascending order", + "addon.mod_forum.byrepliesdesc": "By number of replies in descending order", "addon.mod_forum.cannotadddiscussion": "Adding discussions to this forum requires group membership.", "addon.mod_forum.cannotadddiscussionall": "You do not have permission to add a new discussion topic for all participants.", "addon.mod_forum.cannotcreatediscussion": "Could not create new discussion", @@ -1734,6 +1740,7 @@ "core.sizemb": "MB", "core.sizetb": "TB", "core.sorry": "Sorry...", + "core.sort": "Sort", "core.sortby": "Sort by", "core.start": "Start", "core.strftimedate": "%d %B %Y", diff --git a/src/lang/en.json b/src/lang/en.json index 0fb6bb5bd..64042e606 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -223,6 +223,7 @@ "sizemb": "MB", "sizetb": "TB", "sorry": "Sorry...", + "sort": "Sort", "sortby": "Sort by", "start": "Start", "strftimedate": "%d %B %Y", From d7f0724a3b7633da633559160957617a856d2048 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 16 May 2019 09:52:08 +0200 Subject: [PATCH 153/263] MOBILE-2992 forum: Use web strings --- scripts/langindex.json | 12 ++++++------ src/addon/mod/forum/lang/en.json | 12 ++++++------ src/addon/mod/forum/providers/forum.ts | 12 ++++++------ src/assets/lang/en.json | 12 ++++++------ 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index 0cbd6b03a..ff7a935dd 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -483,18 +483,18 @@ "addon.mod_forum.addanewtopic": "forum", "addon.mod_forum.addtofavourites": "forum", "addon.mod_forum.advanced": "forum", - "addon.mod_forum.bycreateddesc": "local_moodlemobileapp", - "addon.mod_forum.bycreatedasc": "local_moodlemobileapp", - "addon.mod_forum.bylastpostdesc": "local_moodlemobileapp", - "addon.mod_forum.bylastpostasc": "local_moodlemobileapp", - "addon.mod_forum.byrepliesdesc": "local_moodlemobileapp", - "addon.mod_forum.byrepliesasc": "local_moodlemobileapp", "addon.mod_forum.cannotadddiscussion": "forum", "addon.mod_forum.cannotadddiscussionall": "forum", "addon.mod_forum.cannotcreatediscussion": "forum", "addon.mod_forum.couldnotadd": "forum", "addon.mod_forum.cutoffdatereached": "forum", "addon.mod_forum.discussion": "forum", + "addon.mod_forum.discussionlistsortbycreatedasc": "forum", + "addon.mod_forum.discussionlistsortbycreateddesc": "forum", + "addon.mod_forum.discussionlistsortbylastpostasc": "forum", + "addon.mod_forum.discussionlistsortbylastpostdesc": "forum", + "addon.mod_forum.discussionlistsortbyrepliesasc": "forum", + "addon.mod_forum.discussionlistsortbyrepliesdesc": "forum", "addon.mod_forum.discussionlocked": "forum", "addon.mod_forum.discussionpinned": "forum", "addon.mod_forum.discussionsubscription": "forum", diff --git a/src/addon/mod/forum/lang/en.json b/src/addon/mod/forum/lang/en.json index 0b0181230..5b2935e89 100644 --- a/src/addon/mod/forum/lang/en.json +++ b/src/addon/mod/forum/lang/en.json @@ -4,18 +4,18 @@ "addanewtopic": "Add a new topic", "addtofavourites": "Star this discussion", "advanced": "Advanced", - "bycreateddesc": "By creation date in descending order", - "bycreatedasc": "By creation date in ascending order", - "bylastpostdesc": "By last post in descending order", - "bylastpostasc": "By last post in ascending order", - "byrepliesdesc": "By number of replies in descending order", - "byrepliesasc": "By number of replies in ascending order", "cannotadddiscussion": "Adding discussions to this forum requires group membership.", "cannotadddiscussionall": "You do not have permission to add a new discussion topic for all participants.", "cannotcreatediscussion": "Could not create new discussion", "couldnotadd": "Could not add your post due to an unknown error", "cutoffdatereached": "The cut-off date for posting to this forum is reached so you can no longer post to it.", "discussion": "Discussion", + "discussionlistsortbycreatedasc": "Sort by creation date in ascending order", + "discussionlistsortbycreateddesc": "Sort by creation date in descending order", + "discussionlistsortbylastpostasc": "Sort by last post creation date in ascending order", + "discussionlistsortbylastpostdesc": "Sort by last post creation date in descending order", + "discussionlistsortbyrepliesasc": "Sort by number of replies in ascending order", + "discussionlistsortbyrepliesdesc": "Sort by number of replies in descending order", "discussionlocked": "This discussion has been locked so you can no longer reply to it.", "discussionpinned": "Pinned", "discussionsubscription": "Discussion subscription", diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index cb78875be..0f6683e11 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -487,7 +487,7 @@ export class AddonModForumProvider { getAvailableSortOrders(): {label: string, value: number}[] { const sortOrders = [ { - label: 'addon.mod_forum.bylastpostdesc', + label: 'addon.mod_forum.discussionlistsortbylastpostdesc', value: AddonModForumProvider.SORTORDER_LASTPOST_DESC }, ]; @@ -495,23 +495,23 @@ export class AddonModForumProvider { if (this.isDiscussionListSortingAvailable()) { sortOrders.push( { - label: 'addon.mod_forum.bylastpostasc', + label: 'addon.mod_forum.discussionlistsortbylastpostasc', value: AddonModForumProvider.SORTORDER_LASTPOST_ASC }, { - label: 'addon.mod_forum.bycreateddesc', + label: 'addon.mod_forum.discussionlistsortbycreateddesc', value: AddonModForumProvider.SORTORDER_CREATED_DESC }, { - label: 'addon.mod_forum.bycreatedasc', + label: 'addon.mod_forum.discussionlistsortbycreatedasc', value: AddonModForumProvider.SORTORDER_CREATED_ASC }, { - label: 'addon.mod_forum.byrepliesdesc', + label: 'addon.mod_forum.discussionlistsortbyrepliesdesc', value: AddonModForumProvider.SORTORDER_REPLIES_DESC }, { - label: 'addon.mod_forum.byrepliesasc', + label: 'addon.mod_forum.discussionlistsortbyrepliesasc', value: AddonModForumProvider.SORTORDER_REPLIES_ASC } ); diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 83315fe76..373327eeb 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -483,18 +483,18 @@ "addon.mod_forum.addanewtopic": "Add a new topic", "addon.mod_forum.addtofavourites": "Star this discussion", "addon.mod_forum.advanced": "Advanced", - "addon.mod_forum.bycreatedasc": "By creation date in ascending order", - "addon.mod_forum.bycreateddesc": "By creation date in descending order", - "addon.mod_forum.bylastpostasc": "By last post in ascending order", - "addon.mod_forum.bylastpostdesc": "By last post in descending order", - "addon.mod_forum.byrepliesasc": "By number of replies in ascending order", - "addon.mod_forum.byrepliesdesc": "By number of replies in descending order", "addon.mod_forum.cannotadddiscussion": "Adding discussions to this forum requires group membership.", "addon.mod_forum.cannotadddiscussionall": "You do not have permission to add a new discussion topic for all participants.", "addon.mod_forum.cannotcreatediscussion": "Could not create new discussion", "addon.mod_forum.couldnotadd": "Could not add your post due to an unknown error", "addon.mod_forum.cutoffdatereached": "The cut-off date for posting to this forum is reached so you can no longer post to it.", "addon.mod_forum.discussion": "Discussion", + "addon.mod_forum.discussionlistsortbycreatedasc": "Sort by creation date in ascending order", + "addon.mod_forum.discussionlistsortbycreateddesc": "Sort by creation date in descending order", + "addon.mod_forum.discussionlistsortbylastpostasc": "Sort by last post creation date in ascending order", + "addon.mod_forum.discussionlistsortbylastpostdesc": "Sort by last post creation date in descending order", + "addon.mod_forum.discussionlistsortbyrepliesasc": "Sort by number of replies in ascending order", + "addon.mod_forum.discussionlistsortbyrepliesdesc": "Sort by number of replies in descending order", "addon.mod_forum.discussionlocked": "This discussion has been locked so you can no longer reply to it.", "addon.mod_forum.discussionpinned": "Pinned", "addon.mod_forum.discussionsubscription": "Discussion subscription", From ae12465815bdf5eacaa84fde8b1af0aa0002b7f7 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 16 May 2019 10:00:39 +0200 Subject: [PATCH 154/263] MOBILE-2977 core: Fix npm vulnerabilities --- package-lock.json | 50 ++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 29a9576ab..ceda881f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1387,7 +1387,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -3599,7 +3598,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -4081,10 +4080,9 @@ } }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esrecurse": { "version": "4.2.1", @@ -5252,9 +5250,9 @@ } }, "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -5971,7 +5969,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -6671,10 +6669,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -9960,8 +9957,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { "version": "1.14.2", @@ -10178,14 +10174,28 @@ "dev": true }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "dev": true, "requires": { "block-stream": "*", - "fstream": "^1.0.2", + "fstream": "^1.0.12", "inherits": "2" + }, + "dependencies": { + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + } } }, "temp-file": { From 518b891bdce4c0eeafa1aee192cc372e6ef7bd2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 16 May 2019 10:05:51 +0200 Subject: [PATCH 155/263] MOBILE-3031 gulp: Add combine scss task --- gulpfile.js | 132 +++++++++++++++++++++++++++++++++++++++++++++- package-lock.json | 20 +++++++ package.json | 1 + 3 files changed, 151 insertions(+), 2 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index c4deb448f..f0bc12a16 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -8,6 +8,8 @@ var gulp = require('gulp'), gutil = require('gulp-util'), flatten = require('gulp-flatten'), npmPath = require('path'), + concat = require('gulp-concat'), + bufferFrom = require('buffer-from') File = gutil.File, exec = require('child_process').exec, license = '' + @@ -113,7 +115,7 @@ function treatMergedData(data) { mergedOrdered[k] = merged[k]; }); - return new Buffer(JSON.stringify(mergedOrdered, null, 4)); + return bufferFrom(JSON.stringify(mergedOrdered, null, 4)); } /** @@ -257,7 +259,7 @@ gulp.task('config', function(done) { contents += '}\n'; - file.contents = new Buffer(contents); + file.contents = bufferFrom(contents); this.emit('data', file); })) .pipe(rename('configconstants.ts')) @@ -296,3 +298,129 @@ gulp.task('copy-component-templates', function(done) { .on('end', done); }); +/** + * Finds the file and returns its content. + * + * @param {string} capture Import file path. + * @param {string} baseDir Directory where the file was found. + * @param {string} paths Alternative paths where to find the imports. + * @param {Array} parsedFiles Yet parsed files to reduce size of the result. + * @return {string} Partially combined scss. + */ +function getReplace(capture, baseDir, paths, parsedFiles) { + var parse = path.parse(path.resolve(baseDir, capture + '.scss')); + var file = parse.dir + '/' + parse.name; + + + if (!fs.existsSync(file + '.scss')) { + // File not found, might be a partial file. + file = parse.dir + '/_' + parse.name; + } + + // If file still not found, try to find the file in the alternative paths. + var x = 0; + while (!fs.existsSync(file + '.scss') && paths.length > x) { + parse = path.parse(path.resolve(paths[x], capture + '.scss')); + file = parse.dir + '/' + parse.name; + + x++; + } + + file = file + '.scss'; + + if (!fs.existsSync(file)) { + // File not found. Leave the import there. + console.log('File "' + capture + '" not found'); + return '@import "' + capture + '";'; + } + + if (parsedFiles.indexOf(file) >= 0) { + console.log('File "' + capture + '" already parsed'); + // File was already parsed, leave the import commented. + return '// @import "' + capture + '";'; + } + + parsedFiles.push(file); + var text = fs.readFileSync(file); + + // Recursive call. + return scssCombine(text, parse.dir, paths, parsedFiles); +} + +/** + * Combine scss files with its imports + * + * @param {string} content Scss string to read. + * @param {string} baseDir Directory where the file was found. + * @param {string} paths Alternative paths where to find the imports. + * @param {Array} parsedFiles Yet parsed files to reduce size of the result. + * @return {string} Scss string with the replaces done. + */ +function scssCombine(content, baseDir, paths, parsedFiles) { + + // Content is a Buffer, convert to string. + if (typeof content != "string") { + content = content.toString(); + } + + // Search of single imports. + var regex = /@import[ ]*['"](.*)['"][ ]*;/g; + + if (regex.test(content)) { + return content.replace(regex, function(m, capture) { + if (capture == "bmma") { + return m; + } + + return getReplace(capture, baseDir, paths, parsedFiles); + }); + } + + // Search of multiple imports. + regex = /@import(?:[ \n]+['"](.*)['"][,]?[ \n]*)+;/gm; + if (regex.test(content)) { + return content.replace(regex, function(m, capture) { + var text = ""; + + // Divide the import into multiple files. + regex = /['"]([^'"]*)['"]/g; + var captures = m.match(regex); + for (var x in captures) { + text += getReplace(captures[x].replace(/['"]+/g, ''), baseDir, paths, parsedFiles) + "\n"; + } + + return text; + }); + } + + return content; +} + +gulp.task('combine-scss', function(done) { + var paths = [ + 'node_modules/ionic-angular/themes/', + 'node_modules/font-awesome/scss/', + 'node_modules/ionicons/dist/scss/' + ]; + + var parsedFiles = []; + + gulp.src([ + './src/theme/variables.scss', + './node_modules/ionic-angular/themes/ionic.globals.*.scss', + './node_modules/ionic-angular/themes/ionic.components.scss', + './src/**/*.scss']) // define a source files + .pipe(through(function(file, encoding, callback) { + if (file.isNull()) { + return; + } + + parsedFiles.push(file); + file.contents = bufferFrom(scssCombine(file.contents, path.dirname(file.path), paths, parsedFiles)); + + this.emit('data', file); + })) // combine them based on @import and save it to stream + .pipe(concat('combined.scss')) // concat the stream output in single file + .pipe(gulp.dest('.')) // save file to destination. + .on('end', done); +}); diff --git a/package-lock.json b/package-lock.json index 4e89f7b0c..4c1c5ba12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2521,6 +2521,15 @@ "typedarray": "^0.0.6" } }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -5869,6 +5878,17 @@ "through2": "~2.0.1" } }, + "gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "dev": true, + "requires": { + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" + } + }, "gulp-flatten": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.4.0.tgz", diff --git a/package.json b/package.json index 0c5fc0d62..2134183c4 100644 --- a/package.json +++ b/package.json @@ -125,6 +125,7 @@ "electron-rebuild": "^1.8.1", "gulp": "^4.0.0", "gulp-clip-empty-files": "^0.1.2", + "gulp-concat": "^2.6.1", "gulp-flatten": "^0.4.0", "gulp-rename": "^1.3.0", "gulp-slash": "^1.1.3", From a8e4aee2cad1f1ab02f608d839c379b157060126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 16 May 2019 12:56:42 +0200 Subject: [PATCH 156/263] MOBILE-3034 forum: Delete Empty box add discussion button --- .../mod/forum/components/index/addon-mod-forum-index.html | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/addon/mod/forum/components/index/addon-mod-forum-index.html b/src/addon/mod/forum/components/index/addon-mod-forum-index.html index 9d93ce8b0..bc35c9d06 100644 --- a/src/addon/mod/forum/components/index/addon-mod-forum-index.html +++ b/src/addon/mod/forum/components/index/addon-mod-forum-index.html @@ -31,12 +31,7 @@ {{ availabilityMessage }} - -
- -
+
From 60c09134b199a17966dbf083bffb4f4db447ab42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 16 May 2019 12:57:41 +0200 Subject: [PATCH 157/263] MOBILE-3034 course: Style module availability info --- scripts/langindex.json | 1 + src/assets/lang/en.json | 1 + .../components/module/core-course-module.html | 7 +++++-- src/core/course/components/module/module.scss | 13 +++++++++++++ .../pages/section-selector/section-selector.scss | 2 +- src/lang/en.json | 1 + 6 files changed, 22 insertions(+), 3 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index ff7a935dd..941a96d56 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -1654,6 +1654,7 @@ "core.resourcedisplayopen": "moodle", "core.resources": "moodle", "core.restore": "moodle", + "core.restricted": "moodle", "core.retry": "local_moodlemobileapp", "core.save": "moodle", "core.search": "moodle", diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 373327eeb..0fbb6a521 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -1654,6 +1654,7 @@ "core.resourcedisplayopen": "Open", "core.resources": "Resources", "core.restore": "Restore", + "core.restricted": "Restricted", "core.retry": "Retry", "core.save": "Save", "core.search": "Search", diff --git a/src/core/course/components/module/core-course-module.html b/src/core/course/components/module/core-course-module.html index 6958c4dca..55686efd0 100644 --- a/src/core/course/components/module/core-course-module.html +++ b/src/core/course/components/module/core-course-module.html @@ -19,13 +19,16 @@
-
+
{{ 'core.course.hiddenfromstudents' | translate }} {{ 'core.course.hiddenoncoursepage' | translate }} - +
+ {{ 'core.restricted' | translate }} + +
{{ 'core.course.manualcompletionnotsynced' | translate }}
diff --git a/src/core/course/components/module/module.scss b/src/core/course/components/module/module.scss index 2efad78fd..410482e76 100644 --- a/src/core/course/components/module/module.scss +++ b/src/core/course/components/module/module.scss @@ -51,6 +51,19 @@ ion-app.app-root core-course-module { } } + .core-module-more-info { + ion-badge { + @include text-align('start'); + } + + .core-module-availabilityinfo { + font-size: 90%; + ul { + margin-block-start: 0.5em; + } + } + } + .core-not-clickable:active, .core-not-clickable.activated { background-color: $list-background-color; diff --git a/src/core/course/pages/section-selector/section-selector.scss b/src/core/course/pages/section-selector/section-selector.scss index c35e93f93..fa325a001 100644 --- a/src/core/course/pages/section-selector/section-selector.scss +++ b/src/core/course/pages/section-selector/section-selector.scss @@ -10,6 +10,6 @@ ion-app.app-root page-core-course-section-selector { } ion-badge { - text-align: left; + @include text-align('start'); } } \ No newline at end of file diff --git a/src/lang/en.json b/src/lang/en.json index 64042e606..5e594fcc6 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -202,6 +202,7 @@ "resourcedisplayopen": "Open", "resources": "Resources", "restore": "Restore", + "restricted": "Restricted", "retry": "Retry", "save": "Save", "search": "Search", From 1071e9208ec242bcc8f1225bdb40ec35135b76fc Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 16 May 2019 12:59:55 +0200 Subject: [PATCH 158/263] MOBILE-3033 core: Fix collisions in site plugin stored data --- src/classes/delegate.ts | 17 +++++++++++++++++ src/core/block/providers/delegate.ts | 14 -------------- .../assign-feedback/assign-feedback.ts | 6 ++++-- .../assign-submission/assign-submission.ts | 6 ++++-- .../components/course-format/course-format.ts | 8 ++++++-- .../components/module-index/module-index.ts | 9 ++++++--- .../question-behaviour/question-behaviour.ts | 6 ++++-- .../siteplugins/components/question/question.ts | 6 ++++-- .../quiz-access-rule/quiz-access-rule.ts | 6 ++++-- .../user-profile-field/user-profile-field.ts | 6 ++++-- .../workshop-assessment-strategy.ts | 6 ++++-- src/core/siteplugins/providers/helper.ts | 8 ++++---- 12 files changed, 61 insertions(+), 37 deletions(-) diff --git a/src/classes/delegate.ts b/src/classes/delegate.ts index db6726933..5710cbdd9 100644 --- a/src/classes/delegate.ts +++ b/src/classes/delegate.ts @@ -163,6 +163,23 @@ export class CoreDelegate { return enabled ? this.enabledHandlers[handlerName] : this.handlers[handlerName]; } + /** + * Gets the handler full name for a given name. This is useful when the handlerNameProperty is different than "name". + * E.g. blocks are indexed by blockName. If you call this function passing the blockName it will return the name. + * + * @param {string} name Name used to indentify the handler. + * @return {string} Full name of corresponding handler. + */ + getHandlerName(name: string): string { + const handler = this.getHandler(name, true); + + if (!handler) { + return ''; + } + + return handler.name; + } + /** * Check if function exists on a handler. * diff --git a/src/core/block/providers/delegate.ts b/src/core/block/providers/delegate.ts index a319d9b06..47b90ecda 100644 --- a/src/core/block/providers/delegate.ts +++ b/src/core/block/providers/delegate.ts @@ -163,20 +163,6 @@ export class CoreBlockDelegate extends CoreDelegate { return this.areBlocksDisabledInSite(site) || super.isFeatureDisabled(handler, site); } - /** - * Gets the handler name for a given block name. - * - * @param {string} name Block name e.g. 'activity_modules' - * @return {string} Full name of corresponding handler - */ - getHandlerName(name: string): string { - if (!this.isBlockSupported(name)) { - return ''; - } - - return this.getHandler(name, true).name; - } - /** * Called when there are new block handlers available. Informs anyone who subscribed to the * observable. diff --git a/src/core/siteplugins/components/assign-feedback/assign-feedback.ts b/src/core/siteplugins/components/assign-feedback/assign-feedback.ts index b8e1d8dcb..4fc0fe2eb 100644 --- a/src/core/siteplugins/components/assign-feedback/assign-feedback.ts +++ b/src/core/siteplugins/components/assign-feedback/assign-feedback.ts @@ -16,6 +16,7 @@ import { Component, OnInit, Input } from '@angular/core'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitePluginsProvider } from '../../providers/siteplugins'; import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component'; +import { AddonModAssignFeedbackDelegate } from '@addon/mod/assign/providers/feedback-delegate'; /** * Component that displays an assign feedback plugin created using a site plugin. @@ -33,7 +34,8 @@ export class CoreSitePluginsAssignFeedbackComponent extends CoreSitePluginsCompi @Input() canEdit: boolean; // Whether the user can edit. @Input() edit: boolean; // Whether the user is editing. - constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) { + constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider, + protected assignFeedbackDelegate: AddonModAssignFeedbackDelegate) { super(sitePluginsProvider, utils); } @@ -51,7 +53,7 @@ export class CoreSitePluginsAssignFeedbackComponent extends CoreSitePluginsCompi this.jsData.canEdit = this.canEdit; if (this.plugin) { - this.getHandlerData('assignfeedback_' + this.plugin.type); + this.getHandlerData(this.assignFeedbackDelegate.getHandlerName(this.plugin.type)); } } diff --git a/src/core/siteplugins/components/assign-submission/assign-submission.ts b/src/core/siteplugins/components/assign-submission/assign-submission.ts index cd7af884e..f034caf41 100644 --- a/src/core/siteplugins/components/assign-submission/assign-submission.ts +++ b/src/core/siteplugins/components/assign-submission/assign-submission.ts @@ -16,6 +16,7 @@ import { Component, OnInit, Input } from '@angular/core'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitePluginsProvider } from '../../providers/siteplugins'; import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component'; +import { AddonModAssignSubmissionDelegate } from '@addon/mod/assign/providers/submission-delegate'; /** * Component that displays an assign submission plugin created using a site plugin. @@ -32,7 +33,8 @@ export class CoreSitePluginsAssignSubmissionComponent extends CoreSitePluginsCom @Input() edit: boolean; // Whether the user is editing. @Input() allowOffline: boolean; // Whether to allow offline. - constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) { + constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider, + protected assignSubmissionDelegate: AddonModAssignSubmissionDelegate) { super(sitePluginsProvider, utils); } @@ -49,7 +51,7 @@ export class CoreSitePluginsAssignSubmissionComponent extends CoreSitePluginsCom this.jsData.allowOffline = this.allowOffline; if (this.plugin) { - this.getHandlerData('assignsubmission_' + this.plugin.type); + this.getHandlerData(this.assignSubmissionDelegate.getHandlerName(this.plugin.type)); } } diff --git a/src/core/siteplugins/components/course-format/course-format.ts b/src/core/siteplugins/components/course-format/course-format.ts index 9673a7a26..3f4407c6e 100644 --- a/src/core/siteplugins/components/course-format/course-format.ts +++ b/src/core/siteplugins/components/course-format/course-format.ts @@ -16,6 +16,7 @@ import { Component, OnChanges, Input, ViewChild, Output, EventEmitter } from '@a import { CoreSitePluginsProvider } from '../../providers/siteplugins'; import { CoreSitePluginsPluginContentComponent } from '../plugin-content/plugin-content'; import { CoreCourseFormatComponent } from '@core/course/components/format/format'; +import { CoreCourseFormatDelegate } from '@core/course/providers/format-delegate'; /** * Component that displays the index of a course format site plugin. @@ -46,7 +47,8 @@ export class CoreSitePluginsCourseFormatComponent implements OnChanges { initResult: any; data: any; - constructor(protected sitePluginsProvider: CoreSitePluginsProvider) { } + constructor(protected sitePluginsProvider: CoreSitePluginsProvider, + protected courseFormatDelegate: CoreCourseFormatDelegate) { } /** * Detect changes on input properties. @@ -55,7 +57,9 @@ export class CoreSitePluginsCourseFormatComponent implements OnChanges { if (this.course && this.course.format) { if (!this.component) { // Initialize the data. - const handler = this.sitePluginsProvider.getSitePluginHandler(this.course.format); + const handlerName = this.courseFormatDelegate.getHandlerName(this.course.format), + handler = this.sitePluginsProvider.getSitePluginHandler(handlerName); + if (handler) { this.component = handler.plugin.component; this.method = handler.handlerSchema.method; diff --git a/src/core/siteplugins/components/module-index/module-index.ts b/src/core/siteplugins/components/module-index/module-index.ts index f24cc0685..3e231ecf4 100644 --- a/src/core/siteplugins/components/module-index/module-index.ts +++ b/src/core/siteplugins/components/module-index/module-index.ts @@ -17,7 +17,7 @@ import { TranslateService } from '@ngx-translate/core'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitePluginsProvider } from '../../providers/siteplugins'; -import { CoreCourseModuleMainComponent } from '@core/course/providers/module-delegate'; +import { CoreCourseModuleDelegate, CoreCourseModuleMainComponent } from '@core/course/providers/module-delegate'; import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate'; import { CoreCourseHelperProvider } from '@core/course/providers/helper'; import { CoreSitePluginsPluginContentComponent } from '../plugin-content/plugin-content'; @@ -60,7 +60,8 @@ export class CoreSitePluginsModuleIndexComponent implements OnInit, OnDestroy, C constructor(protected sitePluginsProvider: CoreSitePluginsProvider, protected courseHelper: CoreCourseHelperProvider, protected prefetchDelegate: CoreCourseModulePrefetchDelegate, protected textUtils: CoreTextUtilsProvider, - protected translate: TranslateService, protected utils: CoreUtilsProvider) { } + protected translate: TranslateService, protected utils: CoreUtilsProvider, + protected moduleDelegate: CoreCourseModuleDelegate) { } /** * Component being initialized. @@ -69,7 +70,9 @@ export class CoreSitePluginsModuleIndexComponent implements OnInit, OnDestroy, C this.refreshIcon = 'spinner'; if (this.module) { - const handler = this.sitePluginsProvider.getSitePluginHandler(this.module.modname); + const handlerName = this.moduleDelegate.getHandlerName(this.module.modname), + handler = this.sitePluginsProvider.getSitePluginHandler(handlerName); + if (handler) { this.component = handler.plugin.component; this.method = handler.handlerSchema.method; diff --git a/src/core/siteplugins/components/question-behaviour/question-behaviour.ts b/src/core/siteplugins/components/question-behaviour/question-behaviour.ts index 0f0bcee48..17970be85 100644 --- a/src/core/siteplugins/components/question-behaviour/question-behaviour.ts +++ b/src/core/siteplugins/components/question-behaviour/question-behaviour.ts @@ -16,6 +16,7 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitePluginsProvider } from '../../providers/siteplugins'; import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component'; +import { CoreQuestionBehaviourDelegate } from '@core/question/providers/behaviour-delegate'; /** * Component that displays a question behaviour created using a site plugin. @@ -33,7 +34,8 @@ export class CoreSitePluginsQuestionBehaviourComponent extends CoreSitePluginsCo @Output() buttonClicked: EventEmitter; // Should emit an event when a behaviour button is clicked. @Output() onAbort: EventEmitter; // Should emit an event if the question should be aborted. - constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) { + constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider, + protected questionBehaviourDelegate: CoreQuestionBehaviourDelegate) { super(sitePluginsProvider, utils); } @@ -51,7 +53,7 @@ export class CoreSitePluginsQuestionBehaviourComponent extends CoreSitePluginsCo this.jsData.onAbort = this.onAbort; if (this.question) { - this.getHandlerData('qbehaviour_' + this.question.preferredBehaviour); + this.getHandlerData(this.questionBehaviourDelegate.getHandlerName(this.question.preferredBehaviour)); } } } diff --git a/src/core/siteplugins/components/question/question.ts b/src/core/siteplugins/components/question/question.ts index 012d23af9..2765ea707 100644 --- a/src/core/siteplugins/components/question/question.ts +++ b/src/core/siteplugins/components/question/question.ts @@ -16,6 +16,7 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitePluginsProvider } from '../../providers/siteplugins'; import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component'; +import { CoreQuestionDelegate } from '@core/question/providers/delegate'; /** * Component that displays a question created using a site plugin. @@ -33,7 +34,8 @@ export class CoreSitePluginsQuestionComponent extends CoreSitePluginsCompileInit @Output() buttonClicked: EventEmitter; // Should emit an event when a behaviour button is clicked. @Output() onAbort: EventEmitter; // Should emit an event if the question should be aborted. - constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) { + constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider, + protected questionDelegate: CoreQuestionDelegate) { super(sitePluginsProvider, utils); } @@ -51,7 +53,7 @@ export class CoreSitePluginsQuestionComponent extends CoreSitePluginsCompileInit this.jsData.onAbort = this.onAbort; if (this.question) { - this.getHandlerData('qtype_' + this.question.type); + this.getHandlerData(this.questionDelegate.getHandlerName('qtype_' + this.question.type)); } } } diff --git a/src/core/siteplugins/components/quiz-access-rule/quiz-access-rule.ts b/src/core/siteplugins/components/quiz-access-rule/quiz-access-rule.ts index caa3f382c..b80f62c76 100644 --- a/src/core/siteplugins/components/quiz-access-rule/quiz-access-rule.ts +++ b/src/core/siteplugins/components/quiz-access-rule/quiz-access-rule.ts @@ -17,6 +17,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitePluginsProvider } from '../../providers/siteplugins'; import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component'; import { FormGroup } from '@angular/forms'; +import { AddonModQuizAccessRuleDelegate } from '@addon/mod/quiz/providers/access-rules-delegate'; /** * Component that displays a quiz access rule created using a site plugin. @@ -33,7 +34,8 @@ export class CoreSitePluginsQuizAccessRuleComponent extends CoreSitePluginsCompi @Input() siteId: string; // Site ID. @Input() form: FormGroup; // Form where to add the form control. - constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) { + constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider, + protected accessRulesDelegate: AddonModQuizAccessRuleDelegate) { super(sitePluginsProvider, utils); } @@ -50,7 +52,7 @@ export class CoreSitePluginsQuizAccessRuleComponent extends CoreSitePluginsCompi this.jsData.form = this.form; if (this.rule) { - this.getHandlerData(this.rule); + this.getHandlerData(this.accessRulesDelegate.getHandlerName(this.rule)); } } } diff --git a/src/core/siteplugins/components/user-profile-field/user-profile-field.ts b/src/core/siteplugins/components/user-profile-field/user-profile-field.ts index 5e460eb5a..201b95930 100644 --- a/src/core/siteplugins/components/user-profile-field/user-profile-field.ts +++ b/src/core/siteplugins/components/user-profile-field/user-profile-field.ts @@ -17,6 +17,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitePluginsProvider } from '../../providers/siteplugins'; import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component'; import { FormGroup } from '@angular/forms'; +import { CoreUserProfileFieldDelegate } from '@core/user/providers/user-profile-field-delegate'; /** * Component that displays a user profile field created using a site plugin. @@ -33,7 +34,8 @@ export class CoreSitePluginsUserProfileFieldComponent extends CoreSitePluginsCom @Input() signup = false; // True if editing the field in signup. Defaults to false. @Input() registerAuth?: string; // Register auth method. E.g. 'email'. - constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) { + constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider, + protected profileFieldDelegate: CoreUserProfileFieldDelegate) { super(sitePluginsProvider, utils); } @@ -51,7 +53,7 @@ export class CoreSitePluginsUserProfileFieldComponent extends CoreSitePluginsCom this.jsData.registerAuth = this.registerAuth; if (this.field) { - this.getHandlerData('profilefield_' + (this.field.type || this.field.datatype)); + this.getHandlerData(this.profileFieldDelegate.getHandlerName(this.field.type || this.field.datatype)); } } } diff --git a/src/core/siteplugins/components/workshop-assessment-strategy/workshop-assessment-strategy.ts b/src/core/siteplugins/components/workshop-assessment-strategy/workshop-assessment-strategy.ts index 3da761007..5c5b8c53f 100644 --- a/src/core/siteplugins/components/workshop-assessment-strategy/workshop-assessment-strategy.ts +++ b/src/core/siteplugins/components/workshop-assessment-strategy/workshop-assessment-strategy.ts @@ -16,6 +16,7 @@ import { Component, OnInit, Input } from '@angular/core'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitePluginsProvider } from '../../providers/siteplugins'; import { CoreSitePluginsCompileInitComponent } from '../../classes/compile-init-component'; +import { AddonWorkshopAssessmentStrategyDelegate } from '@addon/mod/workshop/providers/assessment-strategy-delegate'; /** * Component that displays a workshop assessment strategy plugin created using a site plugin. @@ -32,7 +33,8 @@ export class CoreSitePluginsWorkshopAssessmentStrategyComponent extends CoreSite @Input() fieldErrors: any; @Input() strategy: string; - constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider) { + constructor(sitePluginsProvider: CoreSitePluginsProvider, utils: CoreUtilsProvider, + private workshopAssessmentStrategyDelegate: AddonWorkshopAssessmentStrategyDelegate) { super(sitePluginsProvider, utils); } @@ -48,6 +50,6 @@ export class CoreSitePluginsWorkshopAssessmentStrategyComponent extends CoreSite this.jsData.fieldErrors = this.fieldErrors; this.jsData.strategy = this.strategy; - this.getHandlerData('workshopform_' + this.strategy); + this.getHandlerData(this.workshopAssessmentStrategyDelegate.getHandlerName(this.strategy)); } } diff --git a/src/core/siteplugins/providers/helper.ts b/src/core/siteplugins/providers/helper.ts index ef7b93a60..b55378728 100644 --- a/src/core/siteplugins/providers/helper.ts +++ b/src/core/siteplugins/providers/helper.ts @@ -548,7 +548,7 @@ export class CoreSitePluginsHelperProvider { this.logger.debug('Register site plugin', plugin, handlerSchema); // Execute the main method and its JS. The template returned will be used in the right component. - return this.executeMethodAndJS(plugin, handlerSchema.method).then((result) => { + return this.executeMethodAndJS(plugin, handlerSchema.method).then((result): any => { // Create and register the handler. const uniqueName = this.sitePluginsProvider.getHandlerUniqueName(plugin, handlerName), @@ -571,7 +571,7 @@ export class CoreSitePluginsHelperProvider { delegate.registerHandler(handler); - return handlerSchema.moodlecomponent || plugin.component; + return uniqueName; }).catch((err) => { this.logger.error('Error executing main method', plugin.component, handlerSchema.method, err); }); @@ -654,7 +654,7 @@ export class CoreSitePluginsHelperProvider { formatName = (handlerSchema.moodlecomponent || plugin.component).replace('format_', ''); this.courseFormatDelegate.registerHandler(new CoreSitePluginsCourseFormatHandler(uniqueName, formatName, handlerSchema)); - return formatName; + return uniqueName; } /** @@ -777,7 +777,7 @@ export class CoreSitePluginsHelperProvider { this.sitePluginsProvider, plugin.component, uniqueName, modName, handlerSchema)); } - return modName; + return uniqueName; } /** From 3e9326d4774c6b016bd903a43daa3ff82ab01225 Mon Sep 17 00:00:00 2001 From: sam marshall Date: Thu, 16 May 2019 16:10:37 +0100 Subject: [PATCH 159/263] MOBILE-2905 Fix bug with NaN appearing for size --- .../pages/course-storage/course-storage.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/addon/storagemanager/pages/course-storage/course-storage.ts b/src/addon/storagemanager/pages/course-storage/course-storage.ts index ed0403151..18769c1c9 100644 --- a/src/addon/storagemanager/pages/course-storage/course-storage.ts +++ b/src/addon/storagemanager/pages/course-storage/course-storage.ts @@ -61,6 +61,7 @@ export class AddonStorageManagerCourseStoragePage { section.totalSize = 0; section.modules.forEach((module) => { module.parentSection = section; + module.totalSize = 0; // Note: This function only gets the size for modules which are downloadable. // For other modules it always returns 0, even if they have downloaded some files. // However there is no 100% reliable way to actually track the files in this case. @@ -70,9 +71,12 @@ export class AddonStorageManagerCourseStoragePage { // Most modules which have large files are downloadable, so I think this is sufficient. const promise = this.prefetchDelegate.getModuleDownloadedSize(module, this.course.id). then((size) => { - module.totalSize = size; - section.totalSize += size; - this.totalSize += size; + // There are some cases where the return from this is not a valid number. + if (!isNaN(size)) { + module.totalSize = Number(size); + section.totalSize += size; + this.totalSize += size; + } }); allPromises.push(promise); }); From a8037b80b7884762556cee4acdfe41c767ffd0f5 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 15 May 2019 13:56:05 +0200 Subject: [PATCH 160/263] MOBILE-3001 core: Improve performance of uniqueArray --- src/providers/utils/utils.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/providers/utils/utils.ts b/src/providers/utils/utils.ts index 2276eaf85..5c2475fd1 100644 --- a/src/providers/utils/utils.ts +++ b/src/providers/utils/utils.ts @@ -1258,18 +1258,16 @@ export class CoreUtilsProvider { */ uniqueArray(array: any[], key?: string): any[] { const filtered = [], - unique = [], - len = array.length; + unique = {}; // Use an object to make it faster to check if it's duplicate. - for (let i = 0; i < len; i++) { - const entry = array[i], - value = key ? entry[key] : entry; + array.forEach((entry) => { + const value = key ? entry[key] : entry; - if (unique.indexOf(value) == -1) { - unique.push(value); + if (!unique[value]) { + unique[value] = true; filtered.push(entry); } - } + }); return filtered; } From 75b4982224c5b91c079296a67b35d92957a48075 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 15 May 2019 13:56:52 +0200 Subject: [PATCH 161/263] MOBILE-3001 course: Don't prefetch ratings and profiles --- .../mod/data/providers/prefetch-handler.ts | 8 +--- .../feedback/providers/prefetch-handler.ts | 25 +++--------- .../mod/forum/providers/prefetch-handler.ts | 40 ++++++------------- .../glossary/providers/prefetch-handler.ts | 22 +++------- 4 files changed, 26 insertions(+), 69 deletions(-) diff --git a/src/addon/mod/data/providers/prefetch-handler.ts b/src/addon/mod/data/providers/prefetch-handler.ts index a0a0d297a..eeb51206f 100644 --- a/src/addon/mod/data/providers/prefetch-handler.ts +++ b/src/addon/mod/data/providers/prefetch-handler.ts @@ -24,7 +24,6 @@ import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreCommentsProvider } from '@core/comments/providers/comments'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/activity-prefetch-handler'; -import { CoreRatingProvider } from '@core/rating/providers/rating'; import { AddonModDataProvider, AddonModDataEntry } from './data'; import { AddonModDataSyncProvider } from './sync'; import { AddonModDataHelperProvider } from './helper'; @@ -44,7 +43,7 @@ export class AddonModDataPrefetchHandler extends CoreCourseActivityPrefetchHandl domUtils: CoreDomUtilsProvider, protected dataProvider: AddonModDataProvider, protected timeUtils: CoreTimeUtilsProvider, protected dataHelper: AddonModDataHelperProvider, protected groupsProvider: CoreGroupsProvider, protected commentsProvider: CoreCommentsProvider, - private ratingProvider: CoreRatingProvider, protected syncProvider: AddonModDataSyncProvider) { + protected syncProvider: AddonModDataSyncProvider) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); } @@ -285,10 +284,7 @@ export class AddonModDataPrefetchHandler extends CoreCourseActivityPrefetchHandl }); info.entries.forEach((entry) => { - promises.push(this.dataProvider.getEntry(database.id, entry.id, true, siteId).then((entry) => { - return this.ratingProvider.prefetchRatings('module', module.id, database.scale, courseId, entry.ratinginfo, - siteId); - })); + promises.push(this.dataProvider.getEntry(database.id, entry.id, true, siteId)); if (database.comments) { promises.push(this.commentsProvider.getComments('module', database.coursemodule, 'mod_data', entry.id, diff --git a/src/addon/mod/feedback/providers/prefetch-handler.ts b/src/addon/mod/feedback/providers/prefetch-handler.ts index b6ab91297..097e31331 100644 --- a/src/addon/mod/feedback/providers/prefetch-handler.ts +++ b/src/addon/mod/feedback/providers/prefetch-handler.ts @@ -26,7 +26,6 @@ import { AddonModFeedbackHelperProvider } from './helper'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreGroupsProvider } from '@providers/groups'; import { AddonModFeedbackSyncProvider } from './sync'; -import { CoreUserProvider } from '@core/user/providers/user'; /** * Handler to prefetch feedbacks. @@ -43,7 +42,7 @@ export class AddonModFeedbackPrefetchHandler extends CoreCourseActivityPrefetchH constructor(translate: TranslateService, appProvider: CoreAppProvider, utils: CoreUtilsProvider, courseProvider: CoreCourseProvider, filepoolProvider: CoreFilepoolProvider, sitesProvider: CoreSitesProvider, domUtils: CoreDomUtilsProvider, protected feedbackProvider: AddonModFeedbackProvider, - protected userProvider: CoreUserProvider, protected feedbackHelper: AddonModFeedbackHelperProvider, + protected feedbackHelper: AddonModFeedbackHelperProvider, protected timeUtils: CoreTimeUtilsProvider, protected groupsProvider: CoreGroupsProvider, protected injector: Injector) { @@ -187,35 +186,21 @@ export class AddonModFeedbackPrefetchHandler extends CoreCourseActivityPrefetchH p2.push(this.feedbackProvider.getAnalysis(feedback.id, undefined, true, siteId)); p2.push(this.groupsProvider.getActivityGroupInfo(feedback.coursemodule, true, undefined, siteId, true) .then((groupInfo) => { - const p3 = [], - userIds = []; + const p3 = []; if (!groupInfo.groups || groupInfo.groups.length == 0) { groupInfo.groups = [{id: 0}]; } groupInfo.groups.forEach((group) => { p3.push(this.feedbackProvider.getAnalysis(feedback.id, group.id, true, siteId)); - p3.push(this.feedbackProvider.getAllResponsesAnalysis(feedback.id, group.id, true, siteId) - .then((responses) => { - responses.attempts.forEach((attempt) => { - userIds.push(attempt.userid); - }); - })); + p3.push(this.feedbackProvider.getAllResponsesAnalysis(feedback.id, group.id, true, siteId)); if (!accessData.isanonymous) { - p3.push(this.feedbackProvider.getAllNonRespondents(feedback.id, group.id, true, siteId) - .then((responses) => { - responses.users.forEach((user) => { - userIds.push(user.userid); - }); - })); + p3.push(this.feedbackProvider.getAllNonRespondents(feedback.id, group.id, true, siteId)); } }); - return Promise.all(p3).then(() => { - // Prefetch user profiles. - return this.userProvider.prefetchProfiles(userIds, courseId, siteId); - }); + return Promise.all(p3); })); } diff --git a/src/addon/mod/forum/providers/prefetch-handler.ts b/src/addon/mod/forum/providers/prefetch-handler.ts index ab8461414..7aa93b409 100644 --- a/src/addon/mod/forum/providers/prefetch-handler.ts +++ b/src/addon/mod/forum/providers/prefetch-handler.ts @@ -22,10 +22,8 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/activity-prefetch-handler'; import { CoreGroupsProvider } from '@providers/groups'; -import { CoreUserProvider } from '@core/user/providers/user'; import { AddonModForumProvider } from './forum'; import { AddonModForumSyncProvider } from './sync'; -import { CoreRatingProvider, CoreRatingInfo } from '@core/rating/providers/rating'; /** * Handler to prefetch forums. @@ -45,9 +43,7 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand sitesProvider: CoreSitesProvider, domUtils: CoreDomUtilsProvider, private groupsProvider: CoreGroupsProvider, - private userProvider: CoreUserProvider, private forumProvider: AddonModForumProvider, - private ratingProvider: CoreRatingProvider, private syncProvider: AddonModForumSyncProvider) { super(translate, appProvider, utils, courseProvider, filepoolProvider, sitesProvider, domUtils); @@ -107,9 +103,6 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand * @return {Promise} Promise resolved with array of posts. */ protected getPostsForPrefetch(forum: any): Promise { - const posts = {}; - const ratingInfos: CoreRatingInfo[] = []; - const promises = this.forumProvider.getAvailableSortOrders().map((sortOrder) => { // Get discussions in first 2 pages. return this.forumProvider.getDiscussionsInPages(forum.id, sortOrder.value, false, 2).then((response) => { @@ -120,25 +113,14 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand const promises = []; response.discussions.forEach((discussion) => { - promises.push(this.forumProvider.getDiscussionPosts(discussion.discussion).then((response) => { - response.posts.forEach((post) => { - posts[post.id] = post; - }); - ratingInfos.push(response.ratinginfo); - })); + promises.push(this.forumProvider.getDiscussionPosts(discussion.discussion)); }); return Promise.all(promises); }); }); - return Promise.all(promises).then(() => { - const ratingInfo = this.ratingProvider.mergeRatingInfos(ratingInfos); - - return this.ratingProvider.prefetchRatings('module', forum.cmid, forum.scale, forum.course, ratingInfo).then(() => { - return this.utils.objectToArray(posts); - }); - }); + return Promise.all(promises); } /** @@ -201,14 +183,18 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand promises.push(this.getPostsForPrefetch(forum).then((posts) => { const promises = []; - // Prefetch user profiles. - const userIds = posts.map((post) => post.userid).filter((userId) => !!userId); - promises.push(this.userProvider.prefetchProfiles(userIds).catch(() => { - // Ignore failures. - })); + // Gather user profile images. + const avatars = {}; // List of user avatars, preventing duplicates. - // Prefetch intro files, attachments and embedded files. - const files = this.getIntroFilesFromInstance(module, forum).concat(this.getPostsFiles(posts)); + posts.forEach((post) => { + if (post.userpictureurl) { + avatars[post.userpictureurl] = true; + } + }); + + // Prefetch intro files, attachments, embedded files and user avatars. + const files = this.getIntroFilesFromInstance(module, forum).concat(this.getPostsFiles(posts)) + .concat(Object.keys(avatars)); promises.push(this.filepoolProvider.addFilesToQueue(siteId, files, this.component, module.id)); // Prefetch groups data. diff --git a/src/addon/mod/glossary/providers/prefetch-handler.ts b/src/addon/mod/glossary/providers/prefetch-handler.ts index fb283d9b4..e43835243 100644 --- a/src/addon/mod/glossary/providers/prefetch-handler.ts +++ b/src/addon/mod/glossary/providers/prefetch-handler.ts @@ -21,9 +21,7 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/activity-prefetch-handler'; -import { CoreUserProvider } from '@core/user/providers/user'; import { AddonModGlossaryProvider } from './glossary'; -import { CoreRatingProvider } from '@core/rating/providers/rating'; import { AddonModGlossarySyncProvider } from './sync'; /** @@ -43,8 +41,6 @@ export class AddonModGlossaryPrefetchHandler extends CoreCourseActivityPrefetchH filepoolProvider: CoreFilepoolProvider, sitesProvider: CoreSitesProvider, domUtils: CoreDomUtilsProvider, - private userProvider: CoreUserProvider, - private ratingProvider: CoreRatingProvider, private glossaryProvider: AddonModGlossaryProvider, private syncProvider: AddonModGlossarySyncProvider) { @@ -163,24 +159,18 @@ export class AddonModGlossaryPrefetchHandler extends CoreCourseActivityPrefetchH promises.push(this.glossaryProvider.fetchAllEntries(this.glossaryProvider.getEntriesByLetter, [glossary.id, 'ALL'], false, siteId).then((entries) => { const promises = []; - const userIds = []; + const avatars = {}; // List of user avatars, preventing duplicates. - // Fetch user avatars. entries.forEach((entry) => { // Fetch individual entries. - promises.push(this.glossaryProvider.getEntry(entry.id, siteId).then((entry) => { - // Fetch individual ratings. - return this.ratingProvider.prefetchRatings('module', module.id, glossary.scale, courseId, entry.ratinginfo, - siteId); - })); + promises.push(this.glossaryProvider.getEntry(entry.id, siteId)); - userIds.push(entry.userid); + if (entry.userpictureurl) { + avatars[entry.userpictureurl] = true; + } }); - // Prefetch user profiles. - promises.push(this.userProvider.prefetchProfiles(userIds, courseId, siteId)); - - const files = this.getFilesFromGlossaryAndEntries(module, glossary, entries); + const files = this.getFilesFromGlossaryAndEntries(module, glossary, entries).concat(Object.keys(avatars)); promises.push(this.filepoolProvider.addFilesToQueue(siteId, files, this.component, module.id)); return Promise.all(promises); From cab44018a612410e7c1c3ef518b4d05a248030ec Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 9 May 2019 14:27:28 +0200 Subject: [PATCH 162/263] MOBILE-3013 core: Support handling root URLs --- src/addon/mod/url/providers/helper.ts | 2 +- src/addon/mod/url/providers/module-handler.ts | 2 +- .../providers/push-click-handler.ts | 2 +- src/classes/site.ts | 2 +- src/core/contentlinks/providers/helper.ts | 182 ++++++++++++++---- src/core/login/pages/init/init.ts | 6 +- src/core/login/providers/helper.ts | 37 ++++ src/directives/link.ts | 2 +- src/providers/utils/text.ts | 18 ++ 9 files changed, 204 insertions(+), 49 deletions(-) diff --git a/src/addon/mod/url/providers/helper.ts b/src/addon/mod/url/providers/helper.ts index 5a2c0dec9..4620fce98 100644 --- a/src/addon/mod/url/providers/helper.ts +++ b/src/addon/mod/url/providers/helper.ts @@ -33,7 +33,7 @@ export class AddonModUrlHelperProvider { */ open(url: string): void { const modal = this.domUtils.showModalLoading(); - this.contentLinksHelper.handleLink(url).then((treated) => { + this.contentLinksHelper.handleLink(url, undefined, undefined, true, true).then((treated) => { if (!treated) { return this.sitesProvider.getCurrentSite().openInBrowserWithAutoLoginIfSameSite(url); } diff --git a/src/addon/mod/url/providers/module-handler.ts b/src/addon/mod/url/providers/module-handler.ts index 9cf493fd9..a4ba652a5 100644 --- a/src/addon/mod/url/providers/module-handler.ts +++ b/src/addon/mod/url/providers/module-handler.ts @@ -79,7 +79,7 @@ export class AddonModUrlModuleHandler implements CoreCourseModuleHandler { handler.courseProvider.loadModuleContents(module, courseId, undefined, false, false, undefined, handler.modName) .then(() => { // Check if the URL can be handled by the app. If so, always open it directly. - return handler.contentLinksHelper.canHandleLink(module.contents[0].fileurl, courseId); + return handler.contentLinksHelper.canHandleLink(module.contents[0].fileurl, courseId, undefined, true); }).then((canHandle) => { if (canHandle) { // URL handled by the app, open it directly. diff --git a/src/addon/notifications/providers/push-click-handler.ts b/src/addon/notifications/providers/push-click-handler.ts index 54178d1bf..ce39f5d17 100644 --- a/src/addon/notifications/providers/push-click-handler.ts +++ b/src/addon/notifications/providers/push-click-handler.ts @@ -65,7 +65,7 @@ export class AddonNotificationsPushClickHandler implements CorePushNotifications // Try to handle the appurl first. if (notification.customdata && notification.customdata.appurl) { - promise = this.linkHelper.handleLink(notification.customdata.appurl); + promise = this.linkHelper.handleLink(notification.customdata.appurl, undefined, undefined, true); } else { promise = Promise.resolve(false); } diff --git a/src/classes/site.ts b/src/classes/site.ts index 5331b38a1..446570344 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -1370,7 +1370,7 @@ export class CoreSite { return false; } - const siteUrl = this.urlUtils.removeProtocolAndWWW(this.siteUrl); + const siteUrl = this.textUtils.removeEndingSlash(this.urlUtils.removeProtocolAndWWW(this.siteUrl)); url = this.urlUtils.removeProtocolAndWWW(url); return url.indexOf(siteUrl) == 0; diff --git a/src/core/contentlinks/providers/helper.ts b/src/core/contentlinks/providers/helper.ts index 6b0dfa3ab..8347684c9 100644 --- a/src/core/contentlinks/providers/helper.ts +++ b/src/core/contentlinks/providers/helper.ts @@ -29,6 +29,7 @@ import { CoreContentLinksDelegate, CoreContentLinksAction } from './delegate'; import { CoreConstants } from '@core/constants'; import { CoreConfigConstants } from '../../../configconstants'; import { CoreSitePluginsProvider } from '@core/siteplugins/providers/siteplugins'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features regarding content links. @@ -54,11 +55,27 @@ export class CoreContentLinksHelperProvider { * @param {string} url URL to handle. * @param {number} [courseId] Course ID related to the URL. Optional but recommended. * @param {string} [username] Username to use to filter sites. + * @param {boolean} [checkRoot] Whether to check if the URL is the root URL of a site. * @return {Promise} Promise resolved with a boolean: whether the URL can be handled. */ - canHandleLink(url: string, courseId?: number, username?: string): Promise { - return this.contentLinksDelegate.getActionsFor(url, undefined, username).then((actions) => { - return !!this.getFirstValidAction(actions); + canHandleLink(url: string, courseId?: number, username?: string, checkRoot?: boolean): Promise { + let promise; + + if (checkRoot) { + promise = this.isStoredRootURL(url, username); + } else { + promise = Promise.resolve({}); + } + + return promise.then((data) => { + if (data.site) { + // URL is the root of the site, can handle it. + return true; + } + + return this.contentLinksDelegate.getActionsFor(url, undefined, username).then((actions) => { + return !!this.getFirstValidAction(actions); + }); }).catch(() => { return false; }); @@ -148,10 +165,16 @@ export class CoreContentLinksHelperProvider { // Wait for the app to be ready. this.initDelegate.ready().then(() => { - // Check if the site is stored. - return this.sitesProvider.getSiteIdsFromUrl(url, false, username); - }).then((siteIds) => { - if (siteIds.length) { + // Check if it's the root URL. + return this.isStoredRootURL(url, username); + }).then((data) => { + + if (data.site) { + // Root URL. + modal.dismiss(); + + return this.handleRootURL(data.site, false); + } else if (data.hasSites) { modal.dismiss(); // Dismiss modal so it doesn't collide with confirms. return this.handleLink(url, username).then((treated) => { @@ -161,11 +184,13 @@ export class CoreContentLinksHelperProvider { }); } else { // Get the site URL. - const siteUrl = this.contentLinksDelegate.getSiteUrl(url); - if (!siteUrl) { - this.domUtils.showErrorModal('core.login.invalidsite', true); + let siteUrl = this.contentLinksDelegate.getSiteUrl(url), + urlToOpen = url; - return; + if (!siteUrl) { + // Site URL not found, use the original URL since it could be the root URL of the site. + siteUrl = url; + urlToOpen = undefined; } // Check that site exists. @@ -176,7 +201,7 @@ export class CoreContentLinksHelperProvider { pageParams = { siteUrl: result.siteUrl, username: username, - urlToOpen: url, + urlToOpen: urlToOpen, siteConfig: result.config }; let promise, @@ -210,14 +235,12 @@ export class CoreContentLinksHelperProvider { this.loginHelper.confirmAndOpenBrowserForSSOLogin( result.siteUrl, result.code, result.service, result.config && result.config.launchurl); } else if (!hasSitePluginsLoaded) { - this.appProvider.getRootNavController().setRoot(pageName, pageParams); + return this.loginHelper.goToNoSitePage(undefined, pageName, pageParams); } }); }).catch((error) => { - if (error) { - this.domUtils.showErrorModal(error); - } + this.domUtils.showErrorModalDefault(error, this.translate.instant('core.login.invalidsite')); }); } }).finally(() => { @@ -234,42 +257,119 @@ export class CoreContentLinksHelperProvider { * @param {string} [username] Username related with the URL. E.g. in 'http://myuser@m.com', url would be 'http://m.com' and * the username 'myuser'. Don't use it if you don't want to filter by username. * @param {NavController} [navCtrl] Nav Controller to use to navigate. + * @param {boolean} [checkRoot] Whether to check if the URL is the root URL of a site. + * @param {boolean} [openBrowserRoot] Whether to open in browser if it's root URL and it belongs to current site. * @return {Promise} Promise resolved with a boolean: true if URL was treated, false otherwise. */ - handleLink(url: string, username?: string, navCtrl?: NavController): Promise { - // Check if the link should be treated by some component/addon. - return this.contentLinksDelegate.getActionsFor(url, undefined, username).then((actions) => { - const action = this.getFirstValidAction(actions); - if (action) { - if (!this.sitesProvider.isLoggedIn()) { - // No current site. Perform the action if only 1 site found, choose the site otherwise. - if (action.sites.length == 1) { - action.action(action.sites[0], navCtrl); - } else { - this.goToChooseSite(url); - } - } else if (action.sites.length == 1 && action.sites[0] == this.sitesProvider.getCurrentSiteId()) { - // Current site. - action.action(action.sites[0], navCtrl); - } else { - // Not current site or more than one site. Ask for confirmation. - this.domUtils.showConfirm(this.translate.instant('core.contentlinks.confirmurlothersite')).then(() => { + handleLink(url: string, username?: string, navCtrl?: NavController, checkRoot?: boolean, openBrowserRoot?: boolean) + : Promise { + let promise; + + if (checkRoot) { + promise = this.isStoredRootURL(url, username); + } else { + promise = Promise.resolve({}); + } + + return promise.then((data) => { + if (data.site) { + // URL is the root of the site. + this.handleRootURL(data.site, openBrowserRoot); + + return true; + } + + // Check if the link should be treated by some component/addon. + return this.contentLinksDelegate.getActionsFor(url, undefined, username).then((actions) => { + const action = this.getFirstValidAction(actions); + if (action) { + if (!this.sitesProvider.isLoggedIn()) { + // No current site. Perform the action if only 1 site found, choose the site otherwise. if (action.sites.length == 1) { action.action(action.sites[0], navCtrl); } else { this.goToChooseSite(url); } - }).catch(() => { - // User canceled. - }); + } else if (action.sites.length == 1 && action.sites[0] == this.sitesProvider.getCurrentSiteId()) { + // Current site. + action.action(action.sites[0], navCtrl); + } else { + // Not current site or more than one site. Ask for confirmation. + this.domUtils.showConfirm(this.translate.instant('core.contentlinks.confirmurlothersite')).then(() => { + if (action.sites.length == 1) { + action.action(action.sites[0], navCtrl); + } else { + this.goToChooseSite(url); + } + }).catch(() => { + // User canceled. + }); + } + + return true; } - return true; + return false; + }).catch(() => { + return false; + }); + }); + } + + /** + * Handle a root URL of a site. + * + * @param {CoreSite} site Site to handle. + * @param {boolean} [openBrowserRoot] Whether to open in browser if it's root URL and it belongs to current site. + * @return {Promise} Promise resolved when done. + */ + handleRootURL(site: CoreSite, openBrowserRoot?: boolean): Promise { + const currentSite = this.sitesProvider.getCurrentSite(); + + if (currentSite && currentSite.getURL() == site.getURL()) { + // Already logged in. + if (openBrowserRoot) { + return site.openInBrowserWithAutoLogin(site.getURL()); } - return false; - }).catch(() => { - return false; + return Promise.resolve(); + } else { + // Login in the site. + return this.loginHelper.redirect('', {}, site.getId()); + } + } + + /** + * Check if a URL is the root URL of any of the stored sites. If so, return the site ID. + * + * @param {string} url URL to check. + * @param {string} username Username to check. + * @return {Promise<{site: CoreSite, hasSites: boolean}>} Promise resolved with site and whether there is any site to treat + * the URL. Site will be undefined if it isn't the root URL of any stored site. + */ + isStoredRootURL(url: string, username: string): Promise<{site: CoreSite, hasSites: boolean}> { + // Check if the site is stored. + return this.sitesProvider.getSiteIdsFromUrl(url, true, username).then((siteIds) => { + const result = { + hasSites: siteIds.length > 0, + site: undefined + }; + + if (result.hasSites) { + // If more than one site is returned it usually means there are different users stored. Use any of them. + return this.sitesProvider.getSite(siteIds[0]).then((site) => { + const siteUrl = this.textUtils.removeEndingSlash(this.urlUtils.removeProtocolAndWWW(site.getURL())), + treatedUrl = this.textUtils.removeEndingSlash(this.urlUtils.removeProtocolAndWWW(url)); + + if (siteUrl == treatedUrl) { + result.site = site; + } + + return result; + }); + } + + return result; }); } } diff --git a/src/core/login/pages/init/init.ts b/src/core/login/pages/init/init.ts index 3758d04c3..a33c0b2d5 100644 --- a/src/core/login/pages/init/init.ts +++ b/src/core/login/pages/init/init.ts @@ -43,7 +43,7 @@ export class CoreLoginInitPage { this.initDelegate.ready().then(() => { // Check if there was a pending redirect. const redirectData = this.appProvider.getRedirect(); - if (redirectData.siteId && redirectData.page) { + if (redirectData.siteId) { // Unset redirect data. this.appProvider.storeRedirect('', '', ''); @@ -63,8 +63,8 @@ export class CoreLoginInitPage { return this.loadPage(); }); } else { - // No site to load, just open the state. - return this.navCtrl.setRoot(redirectData.page, redirectData.params, { animate: false }); + // No site to load, open the page. + return this.loginHelper.goToNoSitePage(this.navCtrl, redirectData.page, redirectData.params); } } } diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index 679d9cbae..4967148dd 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -416,6 +416,43 @@ export class CoreLoginHelperProvider { } } + /** + * Open a page that doesn't belong to any site. + * + * @param {NavController} [navCtrl] Nav Controller. + * @param {string} [page] Page to open. + * @param {any} [params] Params of the page. + * @return {Promise} Promise resolved when done. + */ + goToNoSitePage(navCtrl: NavController, page: string, params?: any): Promise { + navCtrl = navCtrl || this.appProvider.getRootNavController(); + + if (page == 'CoreLoginSitesPage') { + // Just open the page as root. + return navCtrl.setRoot(page, params); + } else { + // Check if there is any site stored. + return this.sitesProvider.hasSites().then((hasSites) => { + if (hasSites) { + // There are sites stored, open sites page first to be able to go back. + navCtrl.setRoot('CoreLoginSitesPage'); + + return navCtrl.push(page, page, {animate: false}); + } else { + if (page != 'CoreLoginSitePage') { + // Open the new site page to be able to go back. + navCtrl.setRoot('CoreLoginSitePage'); + + return navCtrl.push(page, page, {animate: false}); + } else { + // Just open the page as root. + return navCtrl.setRoot(page, params); + } + } + }); + } + } + /** * Go to the initial page of a site depending on 'userhomepage' setting. * diff --git a/src/directives/link.ts b/src/directives/link.ts index 5746fbf51..0540eb83f 100644 --- a/src/directives/link.ts +++ b/src/directives/link.ts @@ -68,7 +68,7 @@ export class CoreLinkDirective implements OnInit { event.stopPropagation(); if (this.utils.isTrueOrOne(this.capture)) { - this.contentLinksHelper.handleLink(href, undefined, navCtrl).then((treated) => { + this.contentLinksHelper.handleLink(href, undefined, navCtrl, true, true).then((treated) => { if (!treated) { this.navigate(href); } diff --git a/src/providers/utils/text.ts b/src/providers/utils/text.ts index 7c30d9ec9..a21ba8838 100644 --- a/src/providers/utils/text.ts +++ b/src/providers/utils/text.ts @@ -551,6 +551,24 @@ export class CoreTextUtilsProvider { return typeof defaultValue != 'undefined' ? defaultValue : json; } + /** + * Remove ending slash from a path or URL. + * + * @param {string} text Text to treat. + * @return {string} Treated text. + */ + removeEndingSlash(text: string): string { + if (!text) { + return ''; + } + + if (text.slice(-1) == '/') { + return text.substr(0, text.length - 1); + } + + return text; + } + /** * Replace all characters that cause problems with files in Android and iOS. * From 99f79b9ff9005932ca7054e2ee2002554f5ff383 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 14 May 2019 08:55:37 +0200 Subject: [PATCH 163/263] MOBILE-3013 core: Support new kind of URL schemes --- scripts/langindex.json | 1 + src/app/app.component.ts | 43 +- src/app/app.module.ts | 5 +- src/assets/lang/en.json | 1 + src/core/contentlinks/lang/en.json | 3 +- .../pages/choose-site/choose-site.ts | 51 +- src/core/contentlinks/providers/helper.ts | 52 +- .../login/pages/credentials/credentials.ts | 20 +- src/core/login/providers/helper.ts | 45 +- src/core/mainmenu/pages/menu/menu.ts | 19 +- src/providers/sites.ts | 56 ++- src/providers/urlschemes.ts | 461 ++++++++++++++++++ src/providers/utils/url.ts | 18 +- 13 files changed, 649 insertions(+), 126 deletions(-) create mode 100644 src/providers/urlschemes.ts diff --git a/scripts/langindex.json b/scripts/langindex.json index ff7a935dd..ecdecb58d 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -1264,6 +1264,7 @@ "core.contentlinks.confirmurlothersite": "local_moodlemobileapp", "core.contentlinks.errornoactions": "local_moodlemobileapp", "core.contentlinks.errornosites": "local_moodlemobileapp", + "core.contentlinks.errorredirectothersite": "local_moodlemobileapp", "core.continue": "moodle", "core.copiedtoclipboard": "local_moodlemobileapp", "core.course": "moodle", diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 293c8d407..1be81e471 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -19,6 +19,9 @@ import { CoreEventsProvider } from '@providers/events'; import { CoreLangProvider } from '@providers/lang'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; +import { CoreUrlUtilsProvider } from '@providers/utils/url'; +import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CoreCustomURLSchemesProvider } from '@providers/urlschemes'; import { CoreLoginHelperProvider } from '@core/login/providers/helper'; import { Keyboard } from '@ionic-native/keyboard'; import { ScreenOrientation } from '@ionic-native/screen-orientation'; @@ -32,11 +35,13 @@ export class MoodleMobileApp implements OnInit { rootPage: any = 'CoreLoginInitPage'; protected logger; protected lastUrls = {}; + protected lastInAppUrl: string; constructor(private platform: Platform, logger: CoreLoggerProvider, keyboard: Keyboard, private eventsProvider: CoreEventsProvider, private loginHelper: CoreLoginHelperProvider, private zone: NgZone, private appProvider: CoreAppProvider, private langProvider: CoreLangProvider, private sitesProvider: CoreSitesProvider, - private screenOrientation: ScreenOrientation, app: IonicApp) { + private screenOrientation: ScreenOrientation, app: IonicApp, private urlSchemesProvider: CoreCustomURLSchemesProvider, + private utils: CoreUtilsProvider, private urlUtils: CoreUrlUtilsProvider) { this.logger = logger.getInstance('AppComponent'); platform.ready().then(() => { @@ -98,13 +103,39 @@ export class MoodleMobileApp implements OnInit { // Check URLs loaded in any InAppBrowser. this.eventsProvider.on(CoreEventsProvider.IAB_LOAD_START, (event) => { - this.loginHelper.inAppBrowserLoadStart(event.url); + // URLs with a custom scheme can be prefixed with "http://" or "https://", we need to remove this. + const url = event.url.replace(/^https?:\/\//, ''); + + if (this.urlSchemesProvider.isCustomURL(url)) { + // Close the browser if it's a valid SSO URL. + this.urlSchemesProvider.handleCustomURL(url); + this.utils.closeInAppBrowser(false); + + } else if (this.platform.is('android')) { + // Check if the URL has a custom URL scheme. In Android they need to be opened manually. + const urlScheme = this.urlUtils.getUrlProtocol(url); + if (urlScheme && urlScheme !== 'file' && urlScheme !== 'cdvfile') { + // Open in browser should launch the right app if found and do nothing if not found. + this.utils.openInBrowser(url); + + // At this point the InAppBrowser is showing a "Webpage not available" error message. + // Try to navigate to last loaded URL so this error message isn't found. + if (this.lastInAppUrl) { + this.utils.openInApp(this.lastInAppUrl); + } else { + // No last URL loaded, close the InAppBrowser. + this.utils.closeInAppBrowser(false); + } + } else { + this.lastInAppUrl = url; + } + } }); // Check InAppBrowser closed. this.eventsProvider.on(CoreEventsProvider.IAB_EXIT, () => { this.loginHelper.waitingForBrowser = false; - this.loginHelper.lastInAppUrl = ''; + this.lastInAppUrl = ''; this.loginHelper.checkLogout(); }); @@ -131,14 +162,10 @@ export class MoodleMobileApp implements OnInit { this.lastUrls[url] = Date.now(); this.eventsProvider.trigger(CoreEventsProvider.APP_LAUNCHED_URL, url); + this.urlSchemesProvider.handleCustomURL(url); }); }; - // Listen for app launched URLs. If we receive one, check if it's a SSO authentication. - this.eventsProvider.on(CoreEventsProvider.APP_LAUNCHED_URL, (url) => { - this.loginHelper.appLaunchedByURL(url); - }); - // Load custom lang strings. This cannot be done inside the lang provider because it causes circular dependencies. const loadCustomStrings = (): void => { const currentSite = this.sitesProvider.getCurrentSite(), diff --git a/src/app/app.module.ts b/src/app/app.module.ts index aecc2cbe8..4a174e542 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -59,6 +59,7 @@ import { CoreUpdateManagerProvider } from '@providers/update-manager'; import { CorePluginFileDelegate } from '@providers/plugin-file-delegate'; import { CoreSyncProvider } from '@providers/sync'; import { CoreFileHelperProvider } from '@providers/file-helper'; +import { CoreCustomURLSchemesProvider } from '@providers/urlschemes'; // Core modules. import { CoreComponentsModule } from '@components/components.module'; @@ -161,7 +162,8 @@ export const CORE_PROVIDERS: any[] = [ CoreUpdateManagerProvider, CorePluginFileDelegate, CoreSyncProvider, - CoreFileHelperProvider + CoreFileHelperProvider, + CoreCustomURLSchemesProvider ]; @NgModule({ @@ -280,6 +282,7 @@ export const CORE_PROVIDERS: any[] = [ CorePluginFileDelegate, CoreSyncProvider, CoreFileHelperProvider, + CoreCustomURLSchemesProvider, { provide: HTTP_INTERCEPTORS, useClass: CoreInterceptor, diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 373327eeb..da3cb02ed 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -1264,6 +1264,7 @@ "core.contentlinks.confirmurlothersite": "This link belongs to another site. Do you want to open it?", "core.contentlinks.errornoactions": "Couldn't find an action to perform with this link.", "core.contentlinks.errornosites": "Couldn't find any site to handle this link.", + "core.contentlinks.errorredirectothersite": "The redirect URL cannot point to a different site.", "core.continue": "Continue", "core.copiedtoclipboard": "Text copied to clipboard", "core.course": "Course", diff --git a/src/core/contentlinks/lang/en.json b/src/core/contentlinks/lang/en.json index 833ba3e3a..460c6acac 100644 --- a/src/core/contentlinks/lang/en.json +++ b/src/core/contentlinks/lang/en.json @@ -3,5 +3,6 @@ "chooseaccounttoopenlink": "Choose an account to open the link with.", "confirmurlothersite": "This link belongs to another site. Do you want to open it?", "errornoactions": "Couldn't find an action to perform with this link.", - "errornosites": "Couldn't find any site to handle this link." + "errornosites": "Couldn't find any site to handle this link.", + "errorredirectothersite": "The redirect URL cannot point to a different site." } \ No newline at end of file diff --git a/src/core/contentlinks/pages/choose-site/choose-site.ts b/src/core/contentlinks/pages/choose-site/choose-site.ts index 64bfceead..b10a36bc7 100644 --- a/src/core/contentlinks/pages/choose-site/choose-site.ts +++ b/src/core/contentlinks/pages/choose-site/choose-site.ts @@ -14,10 +14,12 @@ import { Component, OnInit } from '@angular/core'; import { IonicPage, NavController, NavParams } from 'ionic-angular'; +import { TranslateService } from '@ngx-translate/core'; import { CoreSitesProvider } from '@providers/sites'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreContentLinksDelegate, CoreContentLinksAction } from '../../providers/delegate'; import { CoreContentLinksHelperProvider } from '../../providers/helper'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; /** * Page to display the list of sites to choose one to perform a content link action. @@ -33,10 +35,11 @@ export class CoreContentLinksChooseSitePage implements OnInit { sites: any[]; loaded: boolean; protected action: CoreContentLinksAction; + protected isRootURL: boolean; constructor(private navCtrl: NavController, navParams: NavParams, private contentLinksDelegate: CoreContentLinksDelegate, - private sitesProvider: CoreSitesProvider, private domUtils: CoreDomUtilsProvider, - private contentLinksHelper: CoreContentLinksHelperProvider) { + private sitesProvider: CoreSitesProvider, private domUtils: CoreDomUtilsProvider, private translate: TranslateService, + private contentLinksHelper: CoreContentLinksHelperProvider, private loginHelper: CoreLoginHelperProvider) { this.url = navParams.get('url'); } @@ -48,19 +51,35 @@ export class CoreContentLinksChooseSitePage implements OnInit { return this.leaveView(); } - // Get the action to perform. - this.contentLinksDelegate.getActionsFor(this.url).then((actions) => { - this.action = this.contentLinksHelper.getFirstValidAction(actions); - if (!this.action) { - return Promise.reject(null); - } + // Check if it's the root URL. + this.sitesProvider.isStoredRootURL(this.url).then((data): any => { + if (data.site) { + // It's the root URL. + this.isRootURL = true; + return data.siteIds; + } else if (data.siteIds.length) { + // Not root URL, but the URL belongs to at least 1 site. Check if there is any action to treat the link. + return this.contentLinksDelegate.getActionsFor(this.url).then((actions): any => { + this.action = this.contentLinksHelper.getFirstValidAction(actions); + if (!this.action) { + return Promise.reject(this.translate.instant('core.contentlinks.errornoactions')); + } + + return this.action.sites; + }); + } else { + // No sites to treat the URL. + return Promise.reject(this.translate.instant('core.contentlinks.errornosites')); + } + }).then((siteIds) => { // Get the sites that can perform the action. - return this.sitesProvider.getSites(this.action.sites).then((sites) => { - this.sites = sites; - }); - }).catch(() => { - this.domUtils.showErrorModal('core.contentlinks.errornosites', true); + return this.sitesProvider.getSites(siteIds); + }).then((sites) => { + this.sites = sites; + + }).catch((error) => { + this.domUtils.showErrorModalDefault(error, 'core.contentlinks.errornosites', true); this.leaveView(); }).finally(() => { this.loaded = true; @@ -80,7 +99,11 @@ export class CoreContentLinksChooseSitePage implements OnInit { * @param {string} siteId Site ID. */ siteClicked(siteId: string): void { - this.action.action(siteId, this.navCtrl); + if (this.isRootURL) { + this.loginHelper.redirect('', {}, siteId); + } else { + this.action.action(siteId, this.navCtrl); + } } /** diff --git a/src/core/contentlinks/providers/helper.ts b/src/core/contentlinks/providers/helper.ts index 8347684c9..bfd8b47b2 100644 --- a/src/core/contentlinks/providers/helper.ts +++ b/src/core/contentlinks/providers/helper.ts @@ -44,9 +44,6 @@ export class CoreContentLinksHelperProvider { private initDelegate: CoreInitDelegate, eventsProvider: CoreEventsProvider, private textUtils: CoreTextUtilsProvider, private sitePluginsProvider: CoreSitePluginsProvider, private zone: NgZone, private utils: CoreUtilsProvider) { this.logger = logger.getInstance('CoreContentLinksHelperProvider'); - - // Listen for app launched URLs. If we receive one, check if it's a content link. - eventsProvider.on(CoreEventsProvider.APP_LAUNCHED_URL, this.handleCustomUrl.bind(this)); } /** @@ -62,7 +59,7 @@ export class CoreContentLinksHelperProvider { let promise; if (checkRoot) { - promise = this.isStoredRootURL(url, username); + promise = this.sitesProvider.isStoredRootURL(url, username); } else { promise = Promise.resolve({}); } @@ -139,6 +136,7 @@ export class CoreContentLinksHelperProvider { * * @param {string} url URL to handle. * @return {boolean} True if the URL should be handled by this component, false otherwise. + * @deprecated Please use CoreCustomURLSchemesProvider.handleCustomURL instead. */ handleCustomUrl(url: string): boolean { const contentLinksScheme = CoreConfigConstants.customurlscheme + '://link'; @@ -166,7 +164,7 @@ export class CoreContentLinksHelperProvider { // Wait for the app to be ready. this.initDelegate.ready().then(() => { // Check if it's the root URL. - return this.isStoredRootURL(url, username); + return this.sitesProvider.isStoredRootURL(url, username); }).then((data) => { if (data.site) { @@ -174,7 +172,7 @@ export class CoreContentLinksHelperProvider { modal.dismiss(); return this.handleRootURL(data.site, false); - } else if (data.hasSites) { + } else if (data.siteIds.length > 0) { modal.dismiss(); // Dismiss modal so it doesn't collide with confirms. return this.handleLink(url, username).then((treated) => { @@ -266,7 +264,7 @@ export class CoreContentLinksHelperProvider { let promise; if (checkRoot) { - promise = this.isStoredRootURL(url, username); + promise = this.sitesProvider.isStoredRootURL(url, username); } else { promise = Promise.resolve({}); } @@ -321,12 +319,14 @@ export class CoreContentLinksHelperProvider { * * @param {CoreSite} site Site to handle. * @param {boolean} [openBrowserRoot] Whether to open in browser if it's root URL and it belongs to current site. + * @param {boolean} [checkToken] Whether to check that token is the same to verify it's current site. If false or not defined, + * only the URL will be checked. * @return {Promise} Promise resolved when done. */ - handleRootURL(site: CoreSite, openBrowserRoot?: boolean): Promise { + handleRootURL(site: CoreSite, openBrowserRoot?: boolean, checkToken?: boolean): Promise { const currentSite = this.sitesProvider.getCurrentSite(); - if (currentSite && currentSite.getURL() == site.getURL()) { + if (currentSite && currentSite.getURL() == site.getURL() && (!checkToken || currentSite.getToken() == site.getToken())) { // Already logged in. if (openBrowserRoot) { return site.openInBrowserWithAutoLogin(site.getURL()); @@ -338,38 +338,4 @@ export class CoreContentLinksHelperProvider { return this.loginHelper.redirect('', {}, site.getId()); } } - - /** - * Check if a URL is the root URL of any of the stored sites. If so, return the site ID. - * - * @param {string} url URL to check. - * @param {string} username Username to check. - * @return {Promise<{site: CoreSite, hasSites: boolean}>} Promise resolved with site and whether there is any site to treat - * the URL. Site will be undefined if it isn't the root URL of any stored site. - */ - isStoredRootURL(url: string, username: string): Promise<{site: CoreSite, hasSites: boolean}> { - // Check if the site is stored. - return this.sitesProvider.getSiteIdsFromUrl(url, true, username).then((siteIds) => { - const result = { - hasSites: siteIds.length > 0, - site: undefined - }; - - if (result.hasSites) { - // If more than one site is returned it usually means there are different users stored. Use any of them. - return this.sitesProvider.getSite(siteIds[0]).then((site) => { - const siteUrl = this.textUtils.removeEndingSlash(this.urlUtils.removeProtocolAndWWW(site.getURL())), - treatedUrl = this.textUtils.removeEndingSlash(this.urlUtils.removeProtocolAndWWW(url)); - - if (siteUrl == treatedUrl) { - result.site = site; - } - - return result; - }); - } - - return result; - }); - } } diff --git a/src/core/login/pages/credentials/credentials.ts b/src/core/login/pages/credentials/credentials.ts index b061c58c4..20b3d2116 100644 --- a/src/core/login/pages/credentials/credentials.ts +++ b/src/core/login/pages/credentials/credentials.ts @@ -21,8 +21,6 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreLoginHelperProvider } from '../../providers/helper'; -import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; -import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { CoreConfigConstants } from '../../../../configconstants'; @@ -56,8 +54,7 @@ export class CoreLoginCredentialsPage { constructor(private navCtrl: NavController, navParams: NavParams, fb: FormBuilder, private appProvider: CoreAppProvider, private sitesProvider: CoreSitesProvider, private loginHelper: CoreLoginHelperProvider, private domUtils: CoreDomUtilsProvider, private translate: TranslateService, private utils: CoreUtilsProvider, - private eventsProvider: CoreEventsProvider, private contentLinksDelegate: CoreContentLinksDelegate, - private contentLinksHelper: CoreContentLinksHelperProvider) { + private eventsProvider: CoreEventsProvider) { this.siteUrl = navParams.get('siteUrl'); this.siteConfig = navParams.get('siteConfig'); @@ -220,20 +217,7 @@ export class CoreLoginCredentialsPage { this.siteId = id; - if (this.urlToOpen) { - // There's a content link to open. - return this.contentLinksDelegate.getActionsFor(this.urlToOpen, undefined, username).then((actions) => { - const action = this.contentLinksHelper.getFirstValidAction(actions); - if (action && action.sites.length) { - // Action should only have 1 site because we're filtering by username. - action.action(action.sites[0]); - } else { - return this.loginHelper.goToSiteInitialPage(); - } - }); - } else { - return this.loginHelper.goToSiteInitialPage(); - } + return this.loginHelper.goToSiteInitialPage(undefined, undefined, undefined, undefined, this.urlToOpen); }); }).catch((error) => { this.loginHelper.treatUserTokenError(siteUrl, error, username, password); diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index 4967148dd..de1c7214f 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -41,7 +41,7 @@ export interface CoreLoginSSOData { * The site's URL. * @type {string} */ - siteUrl?: string; + siteUrl: string; /** * User's token. @@ -78,7 +78,6 @@ export class CoreLoginHelperProvider { protected logger; protected isSSOConfirmShown = false; protected isOpenEditAlertShown = false; - lastInAppUrl: string; waitingForBrowser = false; constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private domUtils: CoreDomUtilsProvider, @@ -126,6 +125,7 @@ export class CoreLoginHelperProvider { * * @param {string} url URL received. * @return {boolean} True if it's a SSO URL, false otherwise. + * @deprecated Please use CoreCustomURLSchemesProvider.handleCustomURL instead. */ appLaunchedByURL(url: string): boolean { const ssoScheme = CoreConfigConstants.customurlscheme + '://token='; @@ -437,13 +437,13 @@ export class CoreLoginHelperProvider { // There are sites stored, open sites page first to be able to go back. navCtrl.setRoot('CoreLoginSitesPage'); - return navCtrl.push(page, page, {animate: false}); + return navCtrl.push(page, params, {animate: false}); } else { if (page != 'CoreLoginSitePage') { // Open the new site page to be able to go back. navCtrl.setRoot('CoreLoginSitePage'); - return navCtrl.push(page, page, {animate: false}); + return navCtrl.push(page, params, {animate: false}); } else { // Just open the page as root. return navCtrl.setRoot(page, params); @@ -460,10 +460,11 @@ export class CoreLoginHelperProvider { * @param {string} [page] Name of the page to load after loading the main page. * @param {any} [params] Params to pass to the page. * @param {NavOptions} [options] Navigation options. + * @param {string} [url] URL to open once the main menu is loaded. * @return {Promise} Promise resolved when done. */ - goToSiteInitialPage(navCtrl?: NavController, page?: string, params?: any, options?: NavOptions): Promise { - return this.openMainMenu(navCtrl, page, params, options); + goToSiteInitialPage(navCtrl?: NavController, page?: string, params?: any, options?: NavOptions, url?: string): Promise { + return this.openMainMenu(navCtrl, page, params, options, url); } /** @@ -494,33 +495,10 @@ export class CoreLoginHelperProvider { * Function called when a page starts loading in any InAppBrowser window. * * @param {string} url Loaded url. + * @deprecated */ inAppBrowserLoadStart(url: string): void { - // URLs with a custom scheme can be prefixed with "http://" or "https://", we need to remove this. - url = url.replace(/^https?:\/\//, ''); - - if (this.appLaunchedByURL(url)) { - // Close the browser if it's a valid SSO URL. - this.utils.closeInAppBrowser(false); - } else if (this.platform.is('android')) { - // Check if the URL has a custom URL scheme. In Android they need to be opened manually. - const urlScheme = this.urlUtils.getUrlProtocol(url); - if (urlScheme && urlScheme !== 'file' && urlScheme !== 'cdvfile') { - // Open in browser should launch the right app if found and do nothing if not found. - this.utils.openInBrowser(url); - - // At this point the InAppBrowser is showing a "Webpage not available" error message. - // Try to navigate to last loaded URL so this error message isn't found. - if (this.lastInAppUrl) { - this.utils.openInApp(this.lastInAppUrl); - } else { - // No last URL loaded, close the InAppBrowser. - this.utils.closeInAppBrowser(false); - } - } else { - this.lastInAppUrl = url; - } - } + // This function is deprecated. } /** @@ -657,9 +635,10 @@ export class CoreLoginHelperProvider { * @param {string} page Name of the page to load. * @param {any} params Params to pass to the page. * @param {NavOptions} [options] Navigation options. + * @param {string} [url] URL to open once the main menu is loaded. * @return {Promise} Promise resolved when done. */ - protected openMainMenu(navCtrl: NavController, page: string, params: any, options?: NavOptions): Promise { + protected openMainMenu(navCtrl: NavController, page: string, params: any, options?: NavOptions, url?: string): Promise { navCtrl = navCtrl || this.appProvider.getRootNavController(); // Due to DeepLinker, we need to remove the path from the URL before going to main menu. @@ -673,7 +652,7 @@ export class CoreLoginHelperProvider { }); } else { // Open the main menu. - return navCtrl.setRoot('CoreMainMenuPage', { redirectPage: page, redirectParams: params }, options); + return navCtrl.setRoot('CoreMainMenuPage', { redirectPage: page, redirectParams: params, urlToOpen: url }, options); } } diff --git a/src/core/mainmenu/pages/menu/menu.ts b/src/core/mainmenu/pages/menu/menu.ts index 358b840bc..7db8a3b67 100644 --- a/src/core/mainmenu/pages/menu/menu.ts +++ b/src/core/mainmenu/pages/menu/menu.ts @@ -19,6 +19,8 @@ import { CoreEventsProvider } from '@providers/events'; import { CoreIonTabsComponent } from '@components/ion-tabs/ion-tabs'; import { CoreMainMenuProvider } from '../../providers/mainmenu'; import { CoreMainMenuDelegate, CoreMainMenuHandlerToDisplay } from '../../providers/delegate'; +import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; /** * Page that displays the main menu of the app. @@ -40,12 +42,14 @@ export class CoreMainMenuPage implements OnDestroy { protected subscription; protected redirectObs: any; protected pendingRedirect: any; + protected urlToOpen: string; @ViewChild('mainTabs') mainTabs: CoreIonTabsComponent; constructor(private menuDelegate: CoreMainMenuDelegate, private sitesProvider: CoreSitesProvider, navParams: NavParams, private navCtrl: NavController, private eventsProvider: CoreEventsProvider, private cdr: ChangeDetectorRef, - private mainMenuProvider: CoreMainMenuProvider) { + private mainMenuProvider: CoreMainMenuProvider, private linksDelegate: CoreContentLinksDelegate, + private linksHelper: CoreContentLinksHelperProvider) { // Check if the menu was loaded with a redirect. const redirectPage = navParams.get('redirectPage'); @@ -55,6 +59,8 @@ export class CoreMainMenuPage implements OnDestroy { redirectParams: navParams.get('redirectParams') }; } + + this.urlToOpen = navParams.get('urlToOpen'); } /** @@ -155,6 +161,17 @@ export class CoreMainMenuPage implements OnDestroy { }); this.loaded = this.menuDelegate.areHandlersLoaded(); + }); + + if (this.urlToOpen) { + // There's a content link to open. + this.linksDelegate.getActionsFor(this.urlToOpen, undefined).then((actions) => { + const action = this.linksHelper.getFirstValidAction(actions); + if (action && action.sites.length) { + // Action should only have 1 site because we're filtering by username. + action.action(action.sites[0]); + } + }); } } diff --git a/src/providers/sites.ts b/src/providers/sites.ts index abd23fad7..f673c9609 100644 --- a/src/providers/sites.ts +++ b/src/providers/sites.ts @@ -565,9 +565,14 @@ export class CoreSitesProvider { * @param {string} siteUrl The site url. * @param {string} token User's token. * @param {string} [privateToken=''] User's private token. - * @return {Promise} A promise resolved when the site is added and the user is authenticated. + * @param {boolean} [login=true] Whether to login the user in the site. Defaults to true. + * @return {Promise} A promise resolved with siteId when the site is added and the user is authenticated. */ - newSite(siteUrl: string, token: string, privateToken: string = ''): Promise { + newSite(siteUrl: string, token: string, privateToken: string = '', login: boolean = true): Promise { + if (typeof login != 'boolean') { + login = true; + } + // Create a "candidate" site to fetch the site info. const candidateSite = this.sitesFactory.makeSite(undefined, siteUrl, token, undefined, privateToken); @@ -585,13 +590,18 @@ export class CoreSitesProvider { // Try to get the site config. return this.getSiteConfig(candidateSite).then((config) => { candidateSite.setConfig(config); + // Add site to sites list. this.addSite(siteId, siteUrl, token, info, privateToken, config); - // Turn candidate site into current site. - this.currentSite = candidateSite; this.sites[siteId] = candidateSite; - // Store session. - this.login(siteId); + + if (login) { + // Turn candidate site into current site. + this.currentSite = candidateSite; + // Store session. + this.login(siteId); + } + this.eventsProvider.trigger(CoreEventsProvider.SITE_ADDED, info, siteId); return siteId; @@ -1477,4 +1487,38 @@ export class CoreSitesProvider { delete this.siteSchemasMigration[site.id]; }); } + + /** + * Check if a URL is the root URL of any of the stored sites. + * + * @param {string} url URL to check. + * @param {string} [username] Username to check. + * @return {Promise<{site: CoreSite, siteIds: string[]}>} Promise resolved with site to use and the list of sites that have + * the URL. Site will be undefined if it isn't the root URL of any stored site. + */ + isStoredRootURL(url: string, username?: string): Promise<{site: CoreSite, siteIds: string[]}> { + // Check if the site is stored. + return this.getSiteIdsFromUrl(url, true, username).then((siteIds) => { + const result = { + siteIds: siteIds, + site: undefined + }; + + if (siteIds.length > 0) { + // If more than one site is returned it usually means there are different users stored. Use any of them. + return this.getSite(siteIds[0]).then((site) => { + const siteUrl = this.textUtils.removeEndingSlash(this.urlUtils.removeProtocolAndWWW(site.getURL())), + treatedUrl = this.textUtils.removeEndingSlash(this.urlUtils.removeProtocolAndWWW(url)); + + if (siteUrl == treatedUrl) { + result.site = site; + } + + return result; + }); + } + + return result; + }); + } } diff --git a/src/providers/urlschemes.ts b/src/providers/urlschemes.ts new file mode 100644 index 000000000..fdfda01f3 --- /dev/null +++ b/src/providers/urlschemes.ts @@ -0,0 +1,461 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injectable } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; +import { CoreAppProvider } from './app'; +import { CoreInitDelegate } from './init'; +import { CoreLoggerProvider } from './logger'; +import { CoreSitesProvider } from './sites'; +import { CoreDomUtilsProvider } from './utils/dom'; +import { CoreTextUtilsProvider } from './utils/text'; +import { CoreUrlUtilsProvider } from './utils/url'; +import { CoreUtilsProvider } from './utils/utils'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; +import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; +import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate'; +import { CoreSitePluginsProvider } from '@core/siteplugins/providers/siteplugins'; +import { CoreConfigConstants } from '../configconstants'; +import { CoreConstants } from '@core/constants'; + +/** + * All params that can be in a custom URL scheme. + */ +export interface CoreCustomURLSchemesParams { + /** + * The site's URL. + * @type {string} + */ + siteUrl: string; + + /** + * User's token. If set, user will be authenticated. + * @type {string} + */ + token?: string; + + /** + * User's private token. + * @type {string} + */ + privateToken?: string; + + /** + * Username. + * @type {string} + */ + username?: string; + + /** + * URL to open once authenticated. + * @type {string} + */ + redirect?: any; + + /** + * Name of the page to go once authenticated. + * @type {string} + */ + pageName?: string; + + /** + * Params to pass to the page. + * @type {string} + */ + pageParams?: any; +} + +/* + * Provider to handle custom URL schemes. + */ +@Injectable() +export class CoreCustomURLSchemesProvider { + protected logger; + + constructor(logger: CoreLoggerProvider, private appProvider: CoreAppProvider, private utils: CoreUtilsProvider, + private loginHelper: CoreLoginHelperProvider, private linksHelper: CoreContentLinksHelperProvider, + private initDelegate: CoreInitDelegate, private domUtils: CoreDomUtilsProvider, private urlUtils: CoreUrlUtilsProvider, + private sitesProvider: CoreSitesProvider, private textUtils: CoreTextUtilsProvider, + private linksDelegate: CoreContentLinksDelegate, private translate: TranslateService, + private sitePluginsProvider: CoreSitePluginsProvider) { + this.logger = logger.getInstance('CoreCustomURLSchemesProvider'); + } + + /** + * Handle an URL received by custom URL scheme. + * + * @param {string} url URL to treat. + * @return {Promise} Promise resolved when done. + */ + handleCustomURL(url: string): Promise { + if (!this.isCustomURL(url)) { + return Promise.reject(null); + } + + let modal, + isSSOToken = false, + data: CoreCustomURLSchemesParams; + + // Wait for app to be ready. + return this.initDelegate.ready().then(() => { + url = this.textUtils.decodeURIComponent(url); + + // Some platforms like Windows add a slash at the end. Remove it. + // Some sites add a # at the end of the URL. If it's there, remove it. + url = url.replace(/\/?#?\/?$/, ''); + + modal = this.domUtils.showModalLoading(); + + // Get the data from the URL. + if (this.isCustomURLToken(url)) { + isSSOToken = true; + + return this.getCustomURLTokenData(url); + } else if (this.isCustomURLLink(url)) { + return this.getCustomURLLinkData(url); + } else { + return this.getCustomURLData(url); + } + }).then((result) => { + data = result; + + if (data.redirect && data.redirect.indexOf(data.siteUrl) == -1) { + // Redirect URL must belong to the same site. Reject. + return Promise.reject(this.translate.instant('core.contentlinks.errorredirectothersite')); + } + + // First of all, authenticate the user if needed. + const currentSite = this.sitesProvider.getCurrentSite(); + + if (data.token) { + if (!currentSite || currentSite.getToken() != data.token) { + return this.sitesProvider.newSite(data.siteUrl, data.token, data.privateToken, isSSOToken); + } else { + return this.sitesProvider.getCurrentSiteId(); + } + } + }).then((siteId) => { + if (isSSOToken) { + // Site created and authenticated, open the page to go. + if (data.pageName) { + // State defined, go to that state instead of site initial page. + this.appProvider.getRootNavController().push(data.pageName, data.pageParams); + } else { + this.loginHelper.goToSiteInitialPage(); + } + + return; + } + + let promise; + + if (siteId) { + // Site created, we know the site to use. + promise = Promise.resolve([siteId]); + } else { + // Check if the site is stored. + promise = this.sitesProvider.getSiteIdsFromUrl(data.siteUrl, true, data.username); + } + + return promise.then((siteIds) => { + if (siteIds.length > 1) { + // More than one site to treat the URL, let the user choose. + this.linksHelper.goToChooseSite(data.redirect || data.siteUrl); + + } else if (siteIds.length == 1) { + // Only one site, handle the link. + return this.sitesProvider.getSite(siteIds[0]).then((site) => { + if (!data.redirect) { + // No redirect, go to the root URL if needed. + + return this.linksHelper.handleRootURL(site, false, true); + } else { + // Handle the redirect link. + modal.dismiss(); // Dismiss modal so it doesn't collide with confirms. + + /* Always use the username from the site in this case. If the link has a username and a token, + this will make sure that the link is opened with the user the token belongs to. */ + const username = site.getInfo().username || data.username; + + return this.linksHelper.handleLink(data.redirect, username).then((treated) => { + if (!treated) { + this.domUtils.showErrorModal('core.contentlinks.errornoactions', true); + } + }); + } + }); + + } else { + // Site not stored. Try to add the site. + return this.sitesProvider.checkSite(data.siteUrl).then((result) => { + // Site exists. We'll allow to add it. + const ssoNeeded = this.loginHelper.isSSOLoginNeeded(result.code), + pageName = 'CoreLoginCredentialsPage', + pageParams = { + siteUrl: result.siteUrl, + username: data.username, + urlToOpen: data.redirect, + siteConfig: result.config + }; + let promise, + hasSitePluginsLoaded = false; + + modal.dismiss(); // Dismiss modal so it doesn't collide with confirms. + + if (!this.sitesProvider.isLoggedIn()) { + // Not logged in, no need to confirm. If SSO the confirm will be shown later. + promise = Promise.resolve(); + } else { + // Ask the user before changing site. + const confirmMsg = this.translate.instant('core.contentlinks.confirmurlothersite'); + promise = this.domUtils.showConfirm(confirmMsg).then(() => { + if (!ssoNeeded) { + hasSitePluginsLoaded = this.sitePluginsProvider.hasSitePluginsLoaded; + if (hasSitePluginsLoaded) { + // Store the redirect since logout will restart the app. + this.appProvider.storeRedirect(CoreConstants.NO_SITE_ID, pageName, pageParams); + } + + return this.sitesProvider.logout().catch(() => { + // Ignore errors (shouldn't happen). + }); + } + }); + } + + return promise.then(() => { + if (ssoNeeded) { + this.loginHelper.confirmAndOpenBrowserForSSOLogin( + result.siteUrl, result.code, result.service, result.config && result.config.launchurl); + } else if (!hasSitePluginsLoaded) { + return this.loginHelper.goToNoSitePage(undefined, pageName, pageParams); + } + }); + + }); + } + }); + + }).catch((error) => { + if (error && isSSOToken) { + // An error occurred, display the error and logout the user. + this.loginHelper.treatUserTokenError(data.siteUrl, error); + this.sitesProvider.logout(); + } else { + this.domUtils.showErrorModalDefault(error, this.translate.instant('core.login.invalidsite')); + } + }).finally(() => { + modal.dismiss(); + + if (isSSOToken) { + this.appProvider.finishSSOAuthentication(); + } + }); + + } + + /** + * Get the data from a custom URL scheme. The structure of the URL is: + * moodlemobile://username@domain.com?token=TOKEN&privatetoken=PRIVATETOKEN&redirect=http://domain.com/course/view.php?id=2 + * + * @param {string} url URL to treat. + * @return {Promise} Promise resolved with the data. + */ + protected getCustomURLData(url: string): Promise { + const urlScheme = CoreConfigConstants.customurlscheme + '://'; + if (url.indexOf(urlScheme) == -1) { + return Promise.reject(null); + } + + // App opened using custom URL scheme. + this.logger.debug('Treating custom URL scheme: ' + url); + + // Delete the sso scheme from the URL. + url = url.replace(urlScheme, ''); + + // Detect if there's a user specified. + const username = this.urlUtils.getUsernameFromUrl(url); + if (username) { + url = url.replace(username + '@', ''); // Remove the username from the URL. + } + + // Get the params of the URL. + const params = this.urlUtils.extractUrlParams(url); + + // Remove the params to get the site URL. + if (url.indexOf('?') != -1) { + url = url.substr(0, url.indexOf('?')); + } + + return Promise.resolve({ + siteUrl: url, + username: username, + token: params.token, + privateToken: params.privateToken, + redirect: params.redirect + }); + } + + /** + * Get the data from a "link" custom URL scheme. This kind of URL is deprecated. + * + * @param {string} url URL to treat. + * @return {Promise} Promise resolved with the data. + */ + protected getCustomURLLinkData(url: string): Promise { + const contentLinksScheme = CoreConfigConstants.customurlscheme + '://link='; + if (url.indexOf(contentLinksScheme) == -1) { + return Promise.reject(null); + } + + // App opened using custom URL scheme. + this.logger.debug('Treating custom URL scheme with link param: ' + url); + + // Delete the sso scheme from the URL. + url = url.replace(contentLinksScheme, ''); + + // Detect if there's a user specified. + const username = this.urlUtils.getUsernameFromUrl(url); + if (username) { + url = url.replace(username + '@', ''); // Remove the username from the URL. + } + + // First of all, check if it's the root URL of a site. + return this.sitesProvider.isStoredRootURL(url, username).then((data): any => { + + if (data.site) { + // Root URL. + return { + siteUrl: data.site.getURL(), + username: username + }; + + } else if (data.siteIds.length > 0) { + // Not the root URL, but at least 1 site supports the URL. Get the site URL from the list of sites. + return this.sitesProvider.getSite(data.siteIds[0]).then((site) => { + return { + siteUrl: site.getURL(), + username: username, + redirect: url + }; + }); + + } else { + // Get the site URL. + let siteUrl = this.linksDelegate.getSiteUrl(url), + redirect = url; + + if (!siteUrl) { + // Site URL not found, use the original URL since it could be the root URL of the site. + siteUrl = url; + redirect = undefined; + } + + return { + siteUrl: siteUrl, + username: username, + redirect: redirect + }; + } + }); + } + + /** + * Get the data from a "token" custom URL scheme. This kind of URL is deprecated. + * + * @param {string} url URL to treat. + * @return {Promise} Promise resolved with the data. + */ + protected getCustomURLTokenData(url: string): Promise { + const ssoScheme = CoreConfigConstants.customurlscheme + '://token='; + if (url.indexOf(ssoScheme) == -1) { + return Promise.reject(null); + } + + if (this.appProvider.isSSOAuthenticationOngoing()) { + // Authentication ongoing, probably duplicated request. + return Promise.reject(null); + } + + if (this.appProvider.isDesktop()) { + // In desktop, make sure InAppBrowser is closed. + this.utils.closeInAppBrowser(true); + } + + // App opened using custom URL scheme. Probably an SSO authentication. + this.appProvider.startSSOAuthentication(); + this.logger.debug('App launched by URL with an SSO'); + + // Delete the sso scheme from the URL. + url = url.replace(ssoScheme, ''); + + // Some platforms like Windows add a slash at the end. Remove it. + // Some sites add a # at the end of the URL. If it's there, remove it. + url = url.replace(/\/?#?\/?$/, ''); + + // Decode from base64. + try { + url = atob(url); + } catch (err) { + // Error decoding the parameter. + this.logger.error('Error decoding parameter received for login SSO'); + + return null; + } + + return this.loginHelper.validateBrowserSSOLogin(url); + } + + /** + * Check whether a URL is a custom URL scheme. + * + * @param {string} url URL to check. + * @return {boolean} Whether it's a custom URL scheme. + */ + isCustomURL(url: string): boolean { + if (!url) { + return false; + } + + return url.indexOf(CoreConfigConstants.customurlscheme + '://') != -1; + } + + /** + * Check whether a URL is a custom URL scheme with the "link" param (deprecated). + * + * @param {string} url URL to check. + * @return {boolean} Whether it's a custom URL scheme. + */ + isCustomURLLink(url: string): boolean { + if (!url) { + return false; + } + + return url.indexOf(CoreConfigConstants.customurlscheme + '://link=') != -1; + } + + /** + * Check whether a URL is a custom URL scheme with a "token" param (deprecated). + * + * @param {string} url URL to check. + * @return {boolean} Whether it's a custom URL scheme. + */ + isCustomURLToken(url: string): boolean { + if (!url) { + return false; + } + + return url.indexOf(CoreConfigConstants.customurlscheme + '://token=') != -1; + } +} diff --git a/src/providers/utils/url.ts b/src/providers/utils/url.ts index 35a1655ba..a2c38837a 100644 --- a/src/providers/utils/url.ts +++ b/src/providers/utils/url.ts @@ -52,12 +52,28 @@ export class CoreUrlUtilsProvider { */ extractUrlParams(url: string): any { const regex = /[?&]+([^=&]+)=?([^&]*)?/gi, + subParamsPlaceholder = '@@@SUBPARAMS@@@', params: any = {}, - urlAndHash = url.split('#'); + urlAndHash = url.split('#'), + questionMarkSplit = urlAndHash[0].split('?'); + let subParams; + + if (questionMarkSplit.length > 2) { + // There is more than one question mark in the URL. This can happen if any of the params is a URL with params. + // We only want to treat the first level of params, so we'll remove this second list of params and restore it later. + questionMarkSplit.splice(0, 2); + + subParams = '?' + questionMarkSplit.join('?'); + urlAndHash[0] = urlAndHash[0].replace(subParams, subParamsPlaceholder); + } urlAndHash[0].replace(regex, (match: string, key: string, value: string): string => { params[key] = typeof value != 'undefined' ? value : ''; + if (subParams) { + params[key] = params[key].replace(subParamsPlaceholder, subParams); + } + return match; }); From 15aac08bddc55c3d20275102972fdeb7ce2fbd4f Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 14 May 2019 10:44:44 +0200 Subject: [PATCH 164/263] MOBILE-3013 core: Support URLs without protocol in new schemes --- src/providers/urlschemes.ts | 50 +++++++++++++++++++++++++++++++------ src/providers/utils/url.ts | 2 +- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/providers/urlschemes.ts b/src/providers/urlschemes.ts index fdfda01f3..5f0b89b17 100644 --- a/src/providers/urlschemes.ts +++ b/src/providers/urlschemes.ts @@ -140,8 +140,23 @@ export class CoreCustomURLSchemesProvider { if (data.token) { if (!currentSite || currentSite.getToken() != data.token) { - return this.sitesProvider.newSite(data.siteUrl, data.token, data.privateToken, isSSOToken); + // Token belongs to a different site, create it. It doesn't matter if it already exists. + let promise; + + if (!data.siteUrl.match(/^https?:\/\//)) { + // URL doesn't have a protocol and it's required to be able to create the site. Check which one to use. + promise = this.sitesProvider.checkSite(data.siteUrl).then((result) => { + data.siteUrl = result.siteUrl; + }); + } else { + promise = Promise.resolve(); + } + + return promise.then(() => { + return this.sitesProvider.newSite(data.siteUrl, data.token, data.privateToken, isSSOToken); + }); } else { + // Token belongs to current site, no need to create it. return this.sitesProvider.getCurrentSiteId(); } } @@ -298,12 +313,33 @@ export class CoreCustomURLSchemesProvider { url = url.substr(0, url.indexOf('?')); } - return Promise.resolve({ - siteUrl: url, - username: username, - token: params.token, - privateToken: params.privateToken, - redirect: params.redirect + let promise; + + if (!url.match(/https?:\/\//)) { + // Url doesn't have a protocol. Check if the site is stored in the app to be able to determine the protocol. + promise = this.sitesProvider.getSiteIdsFromUrl(url, true, username).then((siteIds) => { + if (siteIds.length) { + // There is at least 1 site with this URL. Use it to know the full URL. + return this.sitesProvider.getSite(siteIds[0]).then((site) => { + return site.getURL(); + }); + } else { + // No site stored with this URL, just use the URL as it is. + return url; + } + }); + } else { + promise = Promise.resolve(url); + } + + return promise.then((url) => { + return { + siteUrl: url, + username: username, + token: params.token, + privateToken: params.privateToken, + redirect: params.redirect + }; }); } diff --git a/src/providers/utils/url.ts b/src/providers/utils/url.ts index a2c38837a..3035f53c8 100644 --- a/src/providers/utils/url.ts +++ b/src/providers/utils/url.ts @@ -245,7 +245,7 @@ export class CoreUrlUtilsProvider { getUsernameFromUrl(url: string): string { if (url.indexOf('@') > -1) { // Get URL without protocol. - const withoutProtocol = url.replace(/.*?:\/\//, ''), + const withoutProtocol = url.replace(/^[^?@\/]*:\/\//, ''), matches = withoutProtocol.match(/[^@]*/); // Make sure that @ is at the start of the URL, not in a param at the end. From 47ac489b24a588f4d848b5c1e8a20112052bc9d5 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 14 May 2019 10:54:30 +0200 Subject: [PATCH 165/263] MOBILE-3013 core: Support relative URLs in redirect --- src/providers/urlschemes.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/providers/urlschemes.ts b/src/providers/urlschemes.ts index 5f0b89b17..214a925c4 100644 --- a/src/providers/urlschemes.ts +++ b/src/providers/urlschemes.ts @@ -130,7 +130,7 @@ export class CoreCustomURLSchemesProvider { }).then((result) => { data = result; - if (data.redirect && data.redirect.indexOf(data.siteUrl) == -1) { + if (data.redirect && data.redirect.match(/^https?:\/\//) && data.redirect.indexOf(data.siteUrl) == -1) { // Redirect URL must belong to the same site. Reject. return Promise.reject(this.translate.instant('core.contentlinks.errorredirectothersite')); } @@ -173,6 +173,11 @@ export class CoreCustomURLSchemesProvider { return; } + if (data.redirect && !data.redirect.match(/^https?:\/\//)) { + // Redirect is a relative URL. Append the site URL. + data.redirect = this.textUtils.concatenatePaths(data.siteUrl, data.redirect); + } + let promise; if (siteId) { From 2829e4ee311096c9221320eded9b4a1b0601e6dd Mon Sep 17 00:00:00 2001 From: sam marshall Date: Thu, 16 May 2019 17:08:12 +0100 Subject: [PATCH 166/263] MOBILE-2935 Dashboard blocks: Fix code review problems --- src/core/block/components/block/block.ts | 6 +++--- src/core/siteplugins/classes/handlers/block-handler.ts | 2 +- .../components/block/core-siteplugins-block.html | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/block/components/block/block.ts b/src/core/block/components/block/block.ts index 8f239a981..fffba5683 100644 --- a/src/core/block/components/block/block.ts +++ b/src/core/block/components/block/block.ts @@ -69,13 +69,13 @@ export class CoreBlockComponent implements OnInit, OnDestroy { // Block not supported, don't render it. But, site plugins might not have finished loading. // Subscribe to the observable in block delegate that will tell us if blocks are updated. // We can retry init later if that happens. - this.blockSubscription = this.blockDelegate.blocksUpdateObservable.subscribe({ - next: (): void => { + this.blockSubscription = this.blockDelegate.blocksUpdateObservable.subscribe( + (): void => { this.blockSubscription.unsubscribe(); delete this.blockSubscription; this.initBlock(); } - }); + ); return; } diff --git a/src/core/siteplugins/classes/handlers/block-handler.ts b/src/core/siteplugins/classes/handlers/block-handler.ts index ef16a70e2..8ee9dd059 100644 --- a/src/core/siteplugins/classes/handlers/block-handler.ts +++ b/src/core/siteplugins/classes/handlers/block-handler.ts @@ -33,7 +33,7 @@ export class CoreSitePluginsBlockHandler extends CoreSitePluginsBaseHandler impl * @param {Injector} injector Injector * @param {any} block Block data * @param {string} contextLevel Context level (not used) - * @param {number} instanceId Instance if (not used) + * @param {number} instanceId Instance id (not used) * @return {CoreBlockHandlerData|Promise} Data or promise resolved with the data */ getDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number): diff --git a/src/core/siteplugins/components/block/core-siteplugins-block.html b/src/core/siteplugins/components/block/core-siteplugins-block.html index 94fd9c04f..015e3dc49 100644 --- a/src/core/siteplugins/components/block/core-siteplugins-block.html +++ b/src/core/siteplugins/components/block/core-siteplugins-block.html @@ -1 +1 @@ - + From bcc7b4b672013db0eb46b1608dffdc274499d0d6 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 17 May 2019 09:17:07 +0200 Subject: [PATCH 167/263] MOBILE-3001 core: Fix rebase errors --- src/addon/mod/forum/providers/prefetch-handler.ts | 2 ++ src/core/mainmenu/pages/menu/menu.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/forum/providers/prefetch-handler.ts b/src/addon/mod/forum/providers/prefetch-handler.ts index 7aa93b409..7b82c8d3c 100644 --- a/src/addon/mod/forum/providers/prefetch-handler.ts +++ b/src/addon/mod/forum/providers/prefetch-handler.ts @@ -20,6 +20,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; +import { CoreUserProvider } from '@core/user/providers/user'; import { CoreCourseActivityPrefetchHandlerBase } from '@core/course/classes/activity-prefetch-handler'; import { CoreGroupsProvider } from '@providers/groups'; import { AddonModForumProvider } from './forum'; @@ -42,6 +43,7 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand filepoolProvider: CoreFilepoolProvider, sitesProvider: CoreSitesProvider, domUtils: CoreDomUtilsProvider, + private userProvider: CoreUserProvider, private groupsProvider: CoreGroupsProvider, private forumProvider: AddonModForumProvider, private syncProvider: AddonModForumSyncProvider) { diff --git a/src/core/mainmenu/pages/menu/menu.ts b/src/core/mainmenu/pages/menu/menu.ts index 7db8a3b67..a28a33e4f 100644 --- a/src/core/mainmenu/pages/menu/menu.ts +++ b/src/core/mainmenu/pages/menu/menu.ts @@ -161,7 +161,7 @@ export class CoreMainMenuPage implements OnDestroy { }); this.loaded = this.menuDelegate.areHandlersLoaded(); - }); + } if (this.urlToOpen) { // There's a content link to open. From 072d6dde3e889390551895710fec4ab82909b7ed Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 17 May 2019 15:59:19 +0200 Subject: [PATCH 168/263] MOBILE-2969 quiz: Fix review attempt when it shouldn't --- src/addon/mod/quiz/pages/attempt/attempt.ts | 7 ++++++- src/addon/mod/quiz/providers/quiz.ts | 3 ++- src/classes/site.ts | 12 +++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/addon/mod/quiz/pages/attempt/attempt.ts b/src/addon/mod/quiz/pages/attempt/attempt.ts index ed6abe247..8119dbea7 100644 --- a/src/addon/mod/quiz/pages/attempt/attempt.ts +++ b/src/addon/mod/quiz/pages/attempt/attempt.ts @@ -119,7 +119,12 @@ export class AddonModQuizAttemptPage implements OnInit { accessInfo = quizAccessInfo; if (accessInfo.canreviewmyattempts) { - return this.quizProvider.getAttemptReview(this.attemptId, -1).catch(() => { + // Check if the user can review the attempt. + return this.quizProvider.invalidateAttemptReviewForPage(this.attemptId, -1).catch(() => { + // Ignore errors. + }).then(() => { + return this.quizProvider.getAttemptReview(this.attemptId, -1); + }).catch(() => { // Error getting the review, assume the user cannot review the attempt. accessInfo.canreviewmyattempts = false; }); diff --git a/src/addon/mod/quiz/providers/quiz.ts b/src/addon/mod/quiz/providers/quiz.ts index 8861537f6..ee121b63a 100644 --- a/src/addon/mod/quiz/providers/quiz.ts +++ b/src/addon/mod/quiz/providers/quiz.ts @@ -403,7 +403,8 @@ export class AddonModQuizProvider { page: page }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getAttemptReviewCacheKey(attemptId, page) + cacheKey: this.getAttemptReviewCacheKey(attemptId, page), + cacheErrors: ['noreview'] }; if (ignoreCache) { diff --git a/src/classes/site.ts b/src/classes/site.ts index 446570344..8812cb7a1 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -124,6 +124,11 @@ export interface CoreSiteWSPreSets { * Whether the request will be be sent immediately as a single request. Defaults to false. */ skipQueue?: boolean; + + /** + * Cache the response if it returns an errorcode present in this list. + */ + cacheErrors?: string[]; } /** @@ -713,6 +718,11 @@ export class CoreSite { } else if (typeof preSets.emergencyCache !== 'undefined' && !preSets.emergencyCache) { this.logger.debug(`WS call '${method}' failed. Emergency cache is forbidden, rejecting.`); + return Promise.reject(error); + } else if (preSets.cacheErrors && preSets.cacheErrors.indexOf(error.errorcode) != -1) { + // Save the error instead of deleting the cache entry so the same content is displayed in offline. + this.saveToCache(method, data, error, preSets); + return Promise.reject(error); } @@ -735,7 +745,7 @@ export class CoreSite { }); }).then((response) => { // Check if the response is an error, this happens if the error was stored in the cache. - if (response && typeof response.exception !== 'undefined') { + if (response && (typeof response.exception != 'undefined' || typeof response.errorcode != 'undefined')) { return Promise.reject(response); } From 8b02d60d92a5b8d7d727221a2480617a50c40abc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 17 May 2019 16:55:56 +0200 Subject: [PATCH 169/263] MOBILE-3037 ionic: Execute gulp before ionic serve --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index d2a159715..6e62a638e 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "build": "ionic-app-scripts build", "lint": "ionic-app-scripts lint", "ionic:build": "node --max-old-space-size=16384 ./node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js build", + "ionic:serve:before": "gulp", "ionic:serve": "gulp watch | ionic-app-scripts serve", "ionic:build:before": "gulp", "ionic:watch:before": "gulp", From fb6e095abeb1755935e58be0f95b09f8a4652304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 16 May 2019 17:41:49 +0200 Subject: [PATCH 170/263] MOBILE-3035 settings: Delete cache data when clearing files --- scripts/langindex.json | 1 + src/assets/lang/en.json | 3 +- src/core/settings/lang/en.json | 3 +- .../pages/space-usage/space-usage.html | 16 +++-- .../settings/pages/space-usage/space-usage.ts | 67 ++++++++++++++++--- src/core/user/providers/user.ts | 3 +- src/providers/filepool.ts | 9 ++- src/providers/sites.ts | 24 +++++++ 8 files changed, 104 insertions(+), 22 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index 53faeef0b..43ba30b47 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -1710,6 +1710,7 @@ "core.settings.privacypolicy": "local_moodlemobileapp", "core.settings.pushid": "local_moodlemobileapp", "core.settings.reportinbackground": "local_moodlemobileapp", + "core.settings.entriesincache": "local_moodlemobileapp", "core.settings.settings": "moodle", "core.settings.showdownloadoptions": "local_moodlemobileapp", "core.settings.sites": "moodle", diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 9a3acd3d6..70f0b0601 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -1680,7 +1680,7 @@ "core.settings.currentlanguage": "Current language", "core.settings.debugdisplay": "Display debug messages", "core.settings.debugdisplaydescription": "If enabled, error modals will display more data about the error if possible.", - "core.settings.deletesitefiles": "Are you sure that you want to delete the downloaded files from the site '{{sitename}}'?", + "core.settings.deletesitefiles": "Are you sure that you want to delete the downloaded files and cached data from the site '{{sitename}}'? You won't be able to use the app in offline mode.", "core.settings.deletesitefilestitle": "Delete site files", "core.settings.deviceinfo": "Device info", "core.settings.deviceos": "Device OS", @@ -1692,6 +1692,7 @@ "core.settings.enablerichtexteditor": "Enable text editor", "core.settings.enablerichtexteditordescription": "If enabled, a text editor will be available when entering content.", "core.settings.enablesyncwifi": "Allow sync only when on Wi-Fi", + "core.settings.entriesincache": "{{$a}} entries in cache", "core.settings.errordeletesitefiles": "Error deleting site files.", "core.settings.errorsyncsite": "Error synchronising site data. Please check your Internet connection and try again.", "core.settings.estimatedfreespace": "Estimated free space", diff --git a/src/core/settings/lang/en.json b/src/core/settings/lang/en.json index a960ccf02..d2b371887 100644 --- a/src/core/settings/lang/en.json +++ b/src/core/settings/lang/en.json @@ -12,7 +12,7 @@ "currentlanguage": "Current language", "debugdisplay": "Display debug messages", "debugdisplaydescription": "If enabled, error modals will display more data about the error if possible.", - "deletesitefiles": "Are you sure that you want to delete the downloaded files from the site '{{sitename}}'?", + "deletesitefiles": "Are you sure that you want to delete the downloaded files and cached data from the site '{{sitename}}'? You won't be able to use the app in offline mode.", "deletesitefilestitle": "Delete site files", "deviceinfo": "Device info", "deviceos": "Device OS", @@ -42,6 +42,7 @@ "privacypolicy": "Privacy policy", "pushid": "Push notifications ID", "reportinbackground": "Report errors automatically", + "entriesincache": "{{$a}} entries in cache", "settings": "Settings", "showdownloadoptions": "Show download options", "sites": "Sites", diff --git a/src/core/settings/pages/space-usage/space-usage.html b/src/core/settings/pages/space-usage/space-usage.html index 00d578ba9..8b93dcf93 100644 --- a/src/core/settings/pages/space-usage/space-usage.html +++ b/src/core/settings/pages/space-usage/space-usage.html @@ -9,16 +9,22 @@ -

-

{{ site.fullName }}

-

{{ site.spaceUsage | coreBytesToSize }}

-

{{ 'core.settings.total' | translate }}

-

{{ totalUsage | coreBytesToSize }}

+
+

{{ totalUsage | coreBytesToSize }}

+

{{ 'core.settings.entriesincache' | translate: { $a: totalEntries } }}

+
diff --git a/src/core/settings/pages/space-usage/space-usage.ts b/src/core/settings/pages/space-usage/space-usage.ts index 3fec9f5d1..457ee82b2 100644 --- a/src/core/settings/pages/space-usage/space-usage.ts +++ b/src/core/settings/pages/space-usage/space-usage.ts @@ -35,6 +35,7 @@ export class CoreSettingsSpaceUsagePage { sites = []; currentSiteId = ''; totalUsage = 0; + totalEntries = 0; constructor(private filePoolProvider: CoreFilepoolProvider, private sitesProvider: CoreSitesProvider, private textUtils: CoreTextUtilsProvider, @@ -63,9 +64,17 @@ export class CoreSettingsSpaceUsagePage { // Get space usage. const promises = this.sites.map((siteEntry) => { return this.sitesProvider.getSite(siteEntry.id).then((site) => { - return site.getSpaceUsage().then((size) => { + const proms2 = []; + + proms2.push(this.calcSiteClearRows(site).then((rows) => { + siteEntry.cacheEntries = rows; + })); + + proms2.push(site.getSpaceUsage().then((size) => { siteEntry.spaceUsage = size; - }); + })); + + return Promise.all(proms2); }); }); @@ -77,13 +86,14 @@ export class CoreSettingsSpaceUsagePage { * Convenience function to calculate total usage. */ protected calculateTotalUsage(): void { - let total = 0; + let totalSize = 0, + totalEntries = 0; this.sites.forEach((site) => { - if (site.spaceUsage) { - total += parseInt(site.spaceUsage, 10); - } + totalSize += (site.spaceUsage ? parseInt(site.spaceUsage, 10) : 0); + totalEntries += (site.cacheEntries ? parseInt(site.cacheEntries, 10) : 0); }); - this.totalUsage = total; + this.totalUsage = totalSize; + this.totalEntries = totalEntries; } /** @@ -123,11 +133,33 @@ export class CoreSettingsSpaceUsagePage { } /** - * Deletes files of a site. + * Calculate the number of rows to be deleted on a site. + * + * @param {any} site Site object. + * @return {Promise} If there are rows to delete or not. + */ + protected calcSiteClearRows(site: any): Promise { + const clearTables = this.sitesProvider.getSiteTableSchemasToClear(); + + let totalEntries = 0; + + const promises = clearTables.map((name) => { + return site.getDb().countRecords(name).then((rows) => { + totalEntries += rows; + }); + }); + + return Promise.all(promises).then(() => { + return totalEntries; + }); + } + + /** + * Deletes files of a site and the tables that can be cleared. * * @param {any} siteData Site object with space usage. */ - deleteSiteFiles(siteData: any): void { + deleteSiteStorage(siteData: any): void { this.textUtils.formatText(siteData.siteName).then((siteName) => { const title = this.translate.instant('core.settings.deletesitefilestitle'); const message = this.translate.instant('core.settings.deletesitefiles', {sitename: siteName}); @@ -135,7 +167,14 @@ export class CoreSettingsSpaceUsagePage { this.domUtils.showConfirm(message, title).then(() => { return this.sitesProvider.getSite(siteData.id); }).then((site) => { - site.deleteFolder().then(() => { + + // Clear cache tables. + const cleanSchemas = this.sitesProvider.getSiteTableSchemasToClear(); + const promises = cleanSchemas.map((name) => { + return site.getDb().deleteRecords(name); + }); + + promises.push(site.deleteFolder().then(() => { this.filePoolProvider.clearAllPackagesStatus(site.id); this.filePoolProvider.clearFilepool(site.id); this.updateSiteUsage(siteData, 0); @@ -151,7 +190,13 @@ export class CoreSettingsSpaceUsagePage { this.updateSiteUsage(siteData, size); }); } - }); + }).finally(() => { + this.calcSiteClearRows(site).then((rows) => { + siteData.cacheEntries = rows; + }); + })); + + return Promise.all(promises); }).catch(() => { // Ignore cancelled confirmation modal. }); diff --git a/src/core/user/providers/user.ts b/src/core/user/providers/user.ts index 085a73502..fe1ec6c7c 100644 --- a/src/core/user/providers/user.ts +++ b/src/core/user/providers/user.ts @@ -36,6 +36,7 @@ export class CoreUserProvider { protected siteSchema: CoreSiteSchema = { name: 'CoreUserProvider', version: 1, + canBeCleared: [ this.USERS_TABLE ], tables: [ { name: this.USERS_TABLE, @@ -53,7 +54,7 @@ export class CoreUserProvider { name: 'profileimageurl', type: 'TEXT' } - ] + ], } ] }; diff --git a/src/providers/filepool.ts b/src/providers/filepool.ts index 7b3725174..2be089ba3 100644 --- a/src/providers/filepool.ts +++ b/src/providers/filepool.ts @@ -306,7 +306,7 @@ export class CoreFilepoolProvider { primaryKeys: ['siteId', 'fileId'] } ]; - protected siteSchma: CoreSiteSchema = { + protected siteSchema: CoreSiteSchema = { name: 'CoreFilepoolProvider', version: 1, tables: [ @@ -447,7 +447,7 @@ export class CoreFilepoolProvider { this.appDB = this.appProvider.getDB(); this.appDB.createTablesFromSchema(this.appTablesSchema); - this.sitesProvider.registerSiteSchema(this.siteSchma); + this.sitesProvider.registerSiteSchema(this.siteSchema); initDelegate.ready().then(() => { // Waiting for the app to be ready to start processing the queue. @@ -857,7 +857,10 @@ export class CoreFilepoolProvider { */ clearFilepool(siteId: string): Promise { return this.sitesProvider.getSiteDb(siteId).then((db) => { - return db.deleteRecords(this.FILES_TABLE); + return Promise.all([ + db.deleteRecords(this.FILES_TABLE), + db.deleteRecords(this.LINKS_TABLE) + ]); }); } diff --git a/src/providers/sites.ts b/src/providers/sites.ts index f673c9609..31fc08b64 100644 --- a/src/providers/sites.ts +++ b/src/providers/sites.ts @@ -145,6 +145,13 @@ export interface CoreSiteSchema { */ version: number; + /** + * Names of the tables of the site schema that can be cleared. + * + * @type {string[]} + */ + canBeCleared?: string[]; + /** * Tables to create when installing or upgrading the schema. */ @@ -270,6 +277,7 @@ export class CoreSitesProvider { protected siteSchema: CoreSiteSchema = { name: 'CoreSitesProvider', version: 1, + canBeCleared: [ CoreSite.WS_CACHE_TABLE ], tables: [ { name: CoreSite.WS_CACHE_TABLE, @@ -1521,4 +1529,20 @@ export class CoreSitesProvider { return result; }); } + + /** + * Returns the Site Schema names that can be cleared on space storage. + * + * @return {string[]} Name of the site schemas. + */ + getSiteTableSchemasToClear(): string[] { + let reset = []; + for (const name in this.siteSchemas) { + if (this.siteSchemas[name].canBeCleared) { + reset = reset.concat(this.siteSchemas[name].canBeCleared); + } + } + + return reset; + } } From 3bb1d1f264b62db676131202003089aa834e10bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 17 May 2019 11:49:39 +0200 Subject: [PATCH 171/263] MOBILE-3035 menu: Fix fontawesome main menu icons --- src/components/ion-tabs/ion-tabs.scss | 9 ++++----- src/core/mainmenu/pages/menu/menu.scss | 7 +++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/components/ion-tabs/ion-tabs.scss b/src/components/ion-tabs/ion-tabs.scss index a4efdc295..48c459042 100644 --- a/src/components/ion-tabs/ion-tabs.scss +++ b/src/components/ion-tabs/ion-tabs.scss @@ -5,14 +5,13 @@ ion-app.app-root core-ion-tabs { z-index: 101; // For some reason, the regular z-index isn't enough with our tabs, use a higher one. .core-ion-tabs-loading { + height: 100%; width: 100%; - display: table; + display: flex; + align-items: center; + justify-content: center; .core-ion-tabs-loading-spinner { - display: table-cell; - text-align: center; - vertical-align: middle; - .spinner circle, .spinner line { stroke: $white; } diff --git a/src/core/mainmenu/pages/menu/menu.scss b/src/core/mainmenu/pages/menu/menu.scss index 5b532fcb8..a5114c071 100644 --- a/src/core/mainmenu/pages/menu/menu.scss +++ b/src/core/mainmenu/pages/menu/menu.scss @@ -1,4 +1,10 @@ ion-app.app-root page-core-mainmenu { + ion-icon { + text-overflow: unset; + overflow: visible; + text-align: center; + } + .ion-md-fa-graduation-cap, .ion-ios-fa-graduation-cap, .ion-ios-fa-graduation-cap-outline, @@ -8,6 +14,7 @@ ion-app.app-root page-core-mainmenu { @extend .fa; font-size: 21px; height: 21px; + } .ion-ios-fa-graduation-cap-outline { From c43d0e5820508203e11a03ce02f2f0a0e85b91bf Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 2 May 2019 10:45:36 +0200 Subject: [PATCH 172/263] MOBILE-2957 fcm: Log notification open if foreground --- .../providers/pushnotifications.ts | 23 +++++++++++++++++++ .../pushnotifications.module.ts | 8 +++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/core/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts index de508f430..c03e2be92 100644 --- a/src/core/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -292,6 +292,29 @@ export class CorePushNotificationsProvider { return this.getAddonBadge(siteId); } + /** + * Log a firebase event. + * + * @param {string} name Name of the event. + * @param {any} data Data of the event. + * @param {boolean} [filter] Whether to filter the data. This is useful when logging a full notification. + * @return {Promise} Promise resolved when done. This promise is never rejected. + */ + logEvent(name: string, data: any, filter?: boolean): Promise { + const win = window; // This feature is only present in our fork of the plugin. + + if (win.PushNotification && win.PushNotification.logEvent) { + return new Promise((resolve, reject): void => { + win.PushNotification.logEvent(resolve, (error) => { + this.logger.error('Error logging firebase event', name, error); + resolve(); + }, name, data, !!filter); + }); + } + + return Promise.resolve(); + } + /** * Function called when a push notification is clicked. Redirect the user to the right state. * diff --git a/src/core/pushnotifications/pushnotifications.module.ts b/src/core/pushnotifications/pushnotifications.module.ts index d8d562108..d804e4270 100644 --- a/src/core/pushnotifications/pushnotifications.module.ts +++ b/src/core/pushnotifications/pushnotifications.module.ts @@ -80,8 +80,12 @@ export class CorePushNotificationsModule { }); // Listen for local notification clicks (generated by the app). - localNotificationsProvider.registerClick(CorePushNotificationsProvider.COMPONENT, - pushNotificationsProvider.notificationClicked.bind(pushNotificationsProvider)); + localNotificationsProvider.registerClick(CorePushNotificationsProvider.COMPONENT, (notification: any) => { + // Log notification open event. + pushNotificationsProvider.logEvent('moodle_notification_open', notification, true); + + pushNotificationsProvider.notificationClicked(notification); + }); // Allow migrating the table from the old app to the new schema. updateManager.registerAppTableMigration({ From 822dd057ef4c9322c116419a587462c430ef6f0c Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 3 May 2019 09:36:42 +0200 Subject: [PATCH 173/263] MOBILE-2957 fcm: Log events in Firebase too --- src/addon/blog/providers/blog.ts | 6 +- .../competency/pages/competency/competency.ts | 9 ++- .../competencysummary/competencysummary.ts | 5 +- src/addon/competency/providers/competency.ts | 45 +++++++++++---- .../mod/assign/components/index/index.ts | 6 +- src/addon/mod/assign/providers/assign.ts | 19 +++++-- src/addon/mod/book/components/index/index.ts | 2 +- src/addon/mod/book/providers/book.ts | 6 +- src/addon/mod/chat/components/index/index.ts | 2 +- src/addon/mod/chat/providers/chat.ts | 5 +- .../mod/choice/components/index/index.ts | 2 +- src/addon/mod/choice/providers/choice.ts | 6 +- src/addon/mod/data/components/index/index.ts | 2 +- src/addon/mod/data/providers/data.ts | 6 +- .../mod/feedback/components/index/index.ts | 2 +- src/addon/mod/feedback/pages/form/form.ts | 2 +- src/addon/mod/feedback/providers/feedback.ts | 6 +- .../mod/folder/components/index/index.ts | 2 +- src/addon/mod/folder/providers/folder.ts | 6 +- src/addon/mod/forum/components/index/index.ts | 2 +- .../mod/forum/pages/discussion/discussion.ts | 2 +- src/addon/mod/forum/providers/forum.ts | 12 ++-- .../mod/glossary/components/index/index.ts | 2 +- src/addon/mod/glossary/pages/entry/entry.ts | 2 +- src/addon/mod/glossary/providers/glossary.ts | 12 ++-- src/addon/mod/imscp/components/index/index.ts | 2 +- src/addon/mod/imscp/providers/imscp.ts | 6 +- .../mod/lesson/components/index/index.ts | 2 +- src/addon/mod/lesson/providers/lesson.ts | 6 +- src/addon/mod/lti/components/index/index.ts | 2 +- src/addon/mod/lti/providers/lti.ts | 5 +- src/addon/mod/lti/providers/module-handler.ts | 2 +- src/addon/mod/page/components/index/index.ts | 2 +- src/addon/mod/page/providers/page.ts | 5 +- src/addon/mod/quiz/components/index/index.ts | 2 +- src/addon/mod/quiz/pages/player/player.ts | 5 +- src/addon/mod/quiz/pages/review/review.ts | 2 +- src/addon/mod/quiz/providers/quiz-sync.ts | 3 +- src/addon/mod/quiz/providers/quiz.ts | 31 +++++++--- .../mod/resource/components/index/index.ts | 2 +- src/addon/mod/resource/providers/helper.ts | 2 +- src/addon/mod/resource/providers/resource.ts | 6 +- src/addon/mod/scorm/components/index/index.ts | 2 +- src/addon/mod/scorm/pages/player/player.ts | 2 +- src/addon/mod/scorm/providers/scorm.ts | 16 +++--- .../mod/survey/components/index/index.ts | 2 +- src/addon/mod/survey/providers/survey.ts | 6 +- src/addon/mod/url/components/index/index.ts | 2 +- src/addon/mod/url/providers/module-handler.ts | 2 +- src/addon/mod/url/providers/url.ts | 5 +- src/addon/mod/wiki/components/index/index.ts | 6 +- src/addon/mod/wiki/providers/wiki.ts | 12 ++-- .../mod/workshop/components/index/index.ts | 2 +- .../workshop/pages/submission/submission.ts | 2 +- src/addon/mod/workshop/providers/workshop.ts | 12 ++-- src/addon/notes/providers/notes.ts | 5 +- src/core/course/pages/section/section.ts | 2 +- src/core/course/providers/course.ts | 13 +++-- src/core/course/providers/log-cron-handler.ts | 2 +- src/core/course/providers/log-helper.ts | 44 +++++++++++++- src/core/grades/providers/grades.ts | 28 +++++++-- .../providers/pushnotifications.ts | 57 +++++++++++++++++++ src/core/sitehome/components/index/index.ts | 21 ++++--- src/core/user/pages/profile/profile.ts | 2 +- src/core/user/providers/user.ts | 23 +++++--- src/providers/utils/utils.ts | 18 ++++++ 66 files changed, 395 insertions(+), 147 deletions(-) diff --git a/src/addon/blog/providers/blog.ts b/src/addon/blog/providers/blog.ts index adc15b1f2..e5387cb65 100644 --- a/src/addon/blog/providers/blog.ts +++ b/src/addon/blog/providers/blog.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; /** * Service to handle blog entries. @@ -27,7 +28,8 @@ export class AddonBlogProvider { protected ROOT_CACHE_KEY = 'addonBlog:'; protected logger; - constructor(logger: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, protected utils: CoreUtilsProvider) { + constructor(logger: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider, protected utils: CoreUtilsProvider, + protected pushNotificationsProvider: CorePushNotificationsProvider) { this.logger = logger.getInstance('AddonBlogProvider'); } @@ -102,6 +104,8 @@ export class AddonBlogProvider { * @return {Promise} Promise to be resolved when done. */ logView(filter: any = {}, siteId?: string): Promise { + this.pushNotificationsProvider.logViewListEvent('blog', 'core_blog_view_entries', filter, siteId); + return this.sitesProvider.getSite(siteId).then((site) => { const data = { filters: this.utils.objectToArrayOfObjects(filter, 'name', 'value') diff --git a/src/addon/competency/pages/competency/competency.ts b/src/addon/competency/pages/competency/competency.ts index 9552e75a6..dc7e76c9d 100644 --- a/src/addon/competency/pages/competency/competency.ts +++ b/src/addon/competency/pages/competency/competency.ts @@ -55,13 +55,16 @@ export class AddonCompetencyCompetencyPage { */ ionViewDidLoad(): void { this.fetchCompetency().then(() => { + const name = this.competency && this.competency.competency && this.competency.competency.competency && + this.competency.competency.competency.shortname; + if (this.planId) { - this.competencyProvider.logCompetencyInPlanView(this.planId, this.competencyId, this.planStatus, this.userId) - .catch(() => { + this.competencyProvider.logCompetencyInPlanView(this.planId, this.competencyId, this.planStatus, name, + this.userId).catch(() => { // Ignore errors. }); } else { - this.competencyProvider.logCompetencyInCourseView(this.courseId, this.competencyId, this.userId).catch(() => { + this.competencyProvider.logCompetencyInCourseView(this.courseId, this.competencyId, name, this.userId).catch(() => { // Ignore errors. }); } diff --git a/src/addon/competency/pages/competencysummary/competencysummary.ts b/src/addon/competency/pages/competencysummary/competencysummary.ts index 3045f44f3..db4c7a32d 100644 --- a/src/addon/competency/pages/competencysummary/competencysummary.ts +++ b/src/addon/competency/pages/competencysummary/competencysummary.ts @@ -41,7 +41,10 @@ export class AddonCompetencyCompetencySummaryPage { */ ionViewDidLoad(): void { this.fetchCompetency().then(() => { - this.competencyProvider.logCompetencyView(this.competencyId).catch(() => { + const name = this.competency.competency && this.competency.competency.competency && + this.competency.competency.competency.shortname; + + this.competencyProvider.logCompetencyView(this.competencyId, name).catch(() => { // Ignore errors. }); }).finally(() => { diff --git a/src/addon/competency/providers/competency.ts b/src/addon/competency/providers/competency.ts index 455c2fd93..7786b75a6 100644 --- a/src/addon/competency/providers/competency.ts +++ b/src/addon/competency/providers/competency.ts @@ -15,6 +15,7 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; /** * Service to handle caompetency learning plans. @@ -38,7 +39,8 @@ export class AddonCompetencyProvider { protected logger; - constructor(loggerProvider: CoreLoggerProvider, private sitesProvider: CoreSitesProvider) { + constructor(loggerProvider: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, + protected pushNotificationsProvider: CorePushNotificationsProvider) { this.logger = loggerProvider.getInstance('AddonCompetencyProvider'); } @@ -471,13 +473,15 @@ export class AddonCompetencyProvider { * @param {number} planId ID of the plan. * @param {number} competencyId ID of the competency. * @param {number} planStatus Current plan Status to decide what action should be logged. + * @param {string} [name] Name of the competency. * @param {number} [userId] User ID. If not defined, current user. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logCompetencyInPlanView(planId: number, competencyId: number, planStatus: number, userId?: number, siteId?: string) - : Promise { + logCompetencyInPlanView(planId: number, competencyId: number, planStatus: number, name?: string, userId?: number, + siteId?: string): Promise { if (planId && competencyId) { + return this.sitesProvider.getSite(siteId).then((site) => { userId = userId || site.getUserId(); @@ -488,13 +492,17 @@ export class AddonCompetencyProvider { }, preSets = { typeExpected: 'boolean' - }; + }, + wsName = planStatus == AddonCompetencyProvider.STATUS_COMPLETE ? + 'core_competency_user_competency_plan_viewed' : 'core_competency_user_competency_viewed_in_plan'; - if (planStatus == AddonCompetencyProvider.STATUS_COMPLETE) { - return site.write('core_competency_user_competency_plan_viewed', params, preSets); - } else { - return site.write('core_competency_user_competency_viewed_in_plan', params, preSets); - } + this.pushNotificationsProvider.logViewEvent(competencyId, name, 'competency', wsName, { + planid: planId, + planstatus: planStatus, + userid: userId + }, siteId); + + return site.write(wsName, params, preSets); }); } @@ -506,11 +514,14 @@ export class AddonCompetencyProvider { * * @param {number} courseId ID of the course. * @param {number} competencyId ID of the competency. + * @param {string} [name] Name of the competency. * @param {number} [userId] User ID. If not defined, current user. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logCompetencyInCourseView(courseId: number, competencyId: number, userId?: number, siteId?: string): Promise { + logCompetencyInCourseView(courseId: number, competencyId: number, name?: string, userId?: number, siteId?: string) + : Promise { + if (courseId && competencyId) { return this.sitesProvider.getSite(siteId).then((site) => { userId = userId || site.getUserId(); @@ -523,8 +534,14 @@ export class AddonCompetencyProvider { const preSets = { typeExpected: 'boolean' }; + const wsName = 'core_competency_user_competency_viewed_in_course'; - return site.write('core_competency_user_competency_viewed_in_course', params, preSets); + this.pushNotificationsProvider.logViewEvent(competencyId, name, 'competency', wsName, { + courseid: courseId, + userid: userId + }, siteId); + + return site.write(wsName, params, preSets); }); } @@ -535,10 +552,11 @@ export class AddonCompetencyProvider { * Report the competency as being viewed. * * @param {number} competencyId ID of the competency. + * @param {string} [name] Name of the competency. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logCompetencyView(competencyId: number, siteId?: string): Promise { + logCompetencyView(competencyId: number, name?: string, siteId?: string): Promise { if (competencyId) { return this.sitesProvider.getSite(siteId).then((site) => { const params = { @@ -547,6 +565,9 @@ export class AddonCompetencyProvider { const preSets = { typeExpected: 'boolean' }; + const wsName = 'core_competency_competency_viewed'; + + this.pushNotificationsProvider.logViewEvent(competencyId, name, 'competency', wsName, {}, siteId); return site.write('core_competency_competency_viewed', params, preSets); }); diff --git a/src/addon/mod/assign/components/index/index.ts b/src/addon/mod/assign/components/index/index.ts index 7cd42a015..013c6b378 100644 --- a/src/addon/mod/assign/components/index/index.ts +++ b/src/addon/mod/assign/components/index/index.ts @@ -80,7 +80,7 @@ export class AddonModAssignIndexComponent extends CoreCourseModuleMainActivityCo this.userId = this.sitesProvider.getCurrentSiteUserId(); this.loadContent(false, true).then(() => { - this.assignProvider.logView(this.assign.id).then(() => { + this.assignProvider.logView(this.assign.id, this.assign.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. @@ -88,12 +88,12 @@ export class AddonModAssignIndexComponent extends CoreCourseModuleMainActivityCo if (this.canViewAllSubmissions) { // User can see all submissions, log grading view. - this.assignProvider.logGradingView(this.assign.id).catch(() => { + this.assignProvider.logGradingView(this.assign.id, this.assign.name).catch(() => { // Ignore errors. }); } else if (this.canViewOwnSubmission) { // User can only see their own submission, log view the user submission. - this.assignProvider.logSubmissionView(this.assign.id).catch(() => { + this.assignProvider.logSubmissionView(this.assign.id, this.assign.name).catch(() => { // Ignore errors. }); } diff --git a/src/addon/mod/assign/providers/assign.ts b/src/addon/mod/assign/providers/assign.ts index 461548f7e..1b785e8b5 100644 --- a/src/addon/mod/assign/providers/assign.ts +++ b/src/addon/mod/assign/providers/assign.ts @@ -911,16 +911,19 @@ export class AddonModAssignProvider { * Report an assignment submission as being viewed. * * @param {number} assignId Assignment ID. + * @param {string} [name] Name of the assign. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logSubmissionView(assignId: number, siteId?: string): Promise { + logSubmissionView(assignId: number, name?: string, siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { const params = { assignid: assignId }; - return site.write('mod_assign_view_submission_status', params); + return this.logHelper.logSingle('mod_assign_view_submission_status', params, AddonModAssignProvider.COMPONENT, + assignId, name, 'assign', {}, siteId); }); } @@ -928,30 +931,34 @@ export class AddonModAssignProvider { * Report an assignment grading table is being viewed. * * @param {number} assignId Assignment ID. + * @param {string} [name] Name of the assign. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logGradingView(assignId: number, siteId?: string): Promise { + logGradingView(assignId: number, name?: string, siteId?: string): Promise { const params = { assignid: assignId }; - return this.logHelper.log('mod_assign_view_grading_table', params, AddonModAssignProvider.COMPONENT, assignId, siteId); + return this.logHelper.logSingle('mod_assign_view_grading_table', params, AddonModAssignProvider.COMPONENT, assignId, + name, 'assign', {}, siteId); } /** * Report an assign as being viewed. * * @param {number} assignId Assignment ID. + * @param {string} [name] Name of the assign. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(assignId: number, siteId?: string): Promise { + logView(assignId: number, name?: string, siteId?: string): Promise { const params = { assignid: assignId }; - return this.logHelper.log('mod_assign_view_assign', params, AddonModAssignProvider.COMPONENT, assignId, siteId); + return this.logHelper.logSingle('mod_assign_view_assign', params, AddonModAssignProvider.COMPONENT, assignId, name, + 'assign', {}, siteId); } /** diff --git a/src/addon/mod/book/components/index/index.ts b/src/addon/mod/book/components/index/index.ts index 75ad3beb1..1dd820508 100644 --- a/src/addon/mod/book/components/index/index.ts +++ b/src/addon/mod/book/components/index/index.ts @@ -184,7 +184,7 @@ export class AddonModBookIndexComponent extends CoreCourseModuleMainResourceComp this.nextChapter = this.bookProvider.getNextChapter(this.chapters, chapterId); // Chapter loaded, log view. We don't return the promise because we don't want to block the user for this. - this.bookProvider.logView(this.module.instance, chapterId).then(() => { + this.bookProvider.logView(this.module.instance, chapterId, this.module.name).then(() => { // Module is completed when last chapter is viewed, so we only check completion if the last is reached. if (!this.nextChapter) { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); diff --git a/src/addon/mod/book/providers/book.ts b/src/addon/mod/book/providers/book.ts index e322284c6..4cb37834b 100644 --- a/src/addon/mod/book/providers/book.ts +++ b/src/addon/mod/book/providers/book.ts @@ -380,15 +380,17 @@ export class AddonModBookProvider { * * @param {number} id Module ID. * @param {string} chapterId Chapter ID. + * @param {string} [name] Name of the book. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, chapterId: string, siteId?: string): Promise { + logView(id: number, chapterId: string, name?: string, siteId?: string): Promise { const params = { bookid: id, chapterid: chapterId }; - return this.logHelper.log('mod_book_view_book', params, AddonModBookProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_book_view_book', params, AddonModBookProvider.COMPONENT, id, name, 'book', + {chapterid: chapterId}, siteId); } } diff --git a/src/addon/mod/chat/components/index/index.ts b/src/addon/mod/chat/components/index/index.ts index a04cf11d0..585c6f4e8 100644 --- a/src/addon/mod/chat/components/index/index.ts +++ b/src/addon/mod/chat/components/index/index.ts @@ -47,7 +47,7 @@ export class AddonModChatIndexComponent extends CoreCourseModuleMainActivityComp super.ngOnInit(); this.loadContent().then(() => { - this.chatProvider.logView(this.chat.id).then(() => { + this.chatProvider.logView(this.chat.id, this.chat.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/chat/providers/chat.ts b/src/addon/mod/chat/providers/chat.ts index f12107dc4..ed86a56d5 100644 --- a/src/addon/mod/chat/providers/chat.ts +++ b/src/addon/mod/chat/providers/chat.ts @@ -87,15 +87,16 @@ export class AddonModChatProvider { * Report a chat as being viewed. * * @param {number} id Chat instance ID. + * @param {string} [name] Name of the chat. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { chatid: id }; - return this.logHelper.log('mod_chat_view_chat', params, AddonModChatProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_chat_view_chat', params, AddonModChatProvider.COMPONENT, id, name, 'chat', {}, siteId); } /** diff --git a/src/addon/mod/choice/components/index/index.ts b/src/addon/mod/choice/components/index/index.ts index fb2243153..b543e4013 100644 --- a/src/addon/mod/choice/components/index/index.ts +++ b/src/addon/mod/choice/components/index/index.ts @@ -67,7 +67,7 @@ export class AddonModChoiceIndexComponent extends CoreCourseModuleMainActivityCo if (!this.choice) { return; } - this.choiceProvider.logView(this.choice.id).then(() => { + this.choiceProvider.logView(this.choice.id, this.choice.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch((error) => { // Ignore errors. diff --git a/src/addon/mod/choice/providers/choice.ts b/src/addon/mod/choice/providers/choice.ts index b94e92b9c..7d1dd0e00 100644 --- a/src/addon/mod/choice/providers/choice.ts +++ b/src/addon/mod/choice/providers/choice.ts @@ -371,15 +371,17 @@ export class AddonModChoiceProvider { * Report the choice as being viewed. * * @param {string} id Choice ID. + * @param {string} [name] Name of the choice. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { choiceid: id }; - return this.logHelper.log('mod_choice_view_choice', params, AddonModChoiceProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_choice_view_choice', params, AddonModChoiceProvider.COMPONENT, id, name, 'choice', + {}, siteId); } /** diff --git a/src/addon/mod/data/components/index/index.ts b/src/addon/mod/data/components/index/index.ts index dcae5876c..37a806f43 100644 --- a/src/addon/mod/data/components/index/index.ts +++ b/src/addon/mod/data/components/index/index.ts @@ -129,7 +129,7 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp return; } - this.dataProvider.logView(this.data.id).then(() => { + this.dataProvider.logView(this.data.id, this.data.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/data/providers/data.ts b/src/addon/mod/data/providers/data.ts index f79ab69a2..47f8fc64d 100644 --- a/src/addon/mod/data/providers/data.ts +++ b/src/addon/mod/data/providers/data.ts @@ -928,15 +928,17 @@ export class AddonModDataProvider { * Report the database as being viewed. * * @param {number} id Module ID. + * @param {string} [name] Name of the data. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { databaseid: id }; - return this.logHelper.log('mod_data_view_database', params, AddonModDataProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_data_view_database', params, AddonModDataProvider.COMPONENT, id, name, 'data', {}, + siteId); } /** diff --git a/src/addon/mod/feedback/components/index/index.ts b/src/addon/mod/feedback/components/index/index.ts index 55ffc4d21..953a8c8bd 100644 --- a/src/addon/mod/feedback/components/index/index.ts +++ b/src/addon/mod/feedback/components/index/index.ts @@ -113,7 +113,7 @@ export class AddonModFeedbackIndexComponent extends CoreCourseModuleMainActivity super.ngOnInit(); this.loadContent(false, true).then(() => { - this.feedbackProvider.logView(this.feedback.id).catch(() => { + this.feedbackProvider.logView(this.feedback.id, this.feedback.name).catch(() => { // Ignore errors. }); }).finally(() => { diff --git a/src/addon/mod/feedback/pages/form/form.ts b/src/addon/mod/feedback/pages/form/form.ts index 82e24a29b..65a21bec8 100644 --- a/src/addon/mod/feedback/pages/form/form.ts +++ b/src/addon/mod/feedback/pages/form/form.ts @@ -95,7 +95,7 @@ export class AddonModFeedbackFormPage implements OnDestroy { */ ionViewDidLoad(): void { this.fetchData().then(() => { - this.feedbackProvider.logView(this.feedback.id, true).then(() => { + this.feedbackProvider.logView(this.feedback.id, this.feedback.name, true).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/feedback/providers/feedback.ts b/src/addon/mod/feedback/providers/feedback.ts index 14976deb3..23327ca75 100644 --- a/src/addon/mod/feedback/providers/feedback.ts +++ b/src/addon/mod/feedback/providers/feedback.ts @@ -1124,17 +1124,19 @@ export class AddonModFeedbackProvider { * Report the feedback as being viewed. * * @param {number} id Module ID. + * @param {string} [name] Name of the feedback. * @param {boolean} [formViewed=false] True if form was viewed. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, formViewed: boolean = false, siteId?: string): Promise { + logView(id: number, name?: string, formViewed: boolean = false, siteId?: string): Promise { const params = { feedbackid: id, moduleviewed: formViewed ? 1 : 0 }; - return this.logHelper.log('mod_feedback_view_feedback', params, AddonModFeedbackProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_feedback_view_feedback', params, AddonModFeedbackProvider.COMPONENT, id, name, + 'feedback', {moduleviewed: params.moduleviewed}, siteId); } /** diff --git a/src/addon/mod/folder/components/index/index.ts b/src/addon/mod/folder/components/index/index.ts index 6b735e53d..d8c296b00 100644 --- a/src/addon/mod/folder/components/index/index.ts +++ b/src/addon/mod/folder/components/index/index.ts @@ -55,7 +55,7 @@ export class AddonModFolderIndexComponent extends CoreCourseModuleMainResourceCo this.refreshIcon = 'refresh'; } else { this.loadContent().then(() => { - this.folderProvider.logView(this.module.instance).then(() => { + this.folderProvider.logView(this.module.instance, this.module.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/folder/providers/folder.ts b/src/addon/mod/folder/providers/folder.ts index f26369af8..eff8af19c 100644 --- a/src/addon/mod/folder/providers/folder.ts +++ b/src/addon/mod/folder/providers/folder.ts @@ -133,14 +133,16 @@ export class AddonModFolderProvider { * Report a folder as being viewed. * * @param {number} id Module ID. + * @param {string} [name] Name of the folder. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { folderid: id }; - return this.logHelper.log('mod_folder_view_folder', params, AddonModFolderProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_folder_view_folder', params, AddonModFolderProvider.COMPONENT, id, name, 'folder', + {}, siteId); } } diff --git a/src/addon/mod/forum/components/index/index.ts b/src/addon/mod/forum/components/index/index.ts index 6b8a5994c..2911bd925 100644 --- a/src/addon/mod/forum/components/index/index.ts +++ b/src/addon/mod/forum/components/index/index.ts @@ -152,7 +152,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom } } - this.forumProvider.logView(this.forum.id).then(() => { + this.forumProvider.logView(this.forum.id, this.forum.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch((error) => { // Ignore errors. diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index 3aee91f1b..3f4405bb9 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -384,7 +384,7 @@ export class AddonModForumDiscussionPage implements OnDestroy { if (forceMarkAsRead || (hasUnreadPosts && this.trackPosts)) { // // Add log in Moodle and mark unread posts as readed. - this.forumProvider.logDiscussionView(this.discussionId, this.forumId || -1).catch(() => { + this.forumProvider.logDiscussionView(this.discussionId, this.forumId || -1, this.forum.name).catch(() => { // Ignore errors. }).finally(() => { // Trigger mark read posts. diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index 0f6683e11..d7cb51411 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -771,15 +771,17 @@ export class AddonModForumProvider { * Report a forum as being viewed. * * @param {number} id Module ID. + * @param {string} [name] Name of the forum. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { forumid: id }; - return this.logHelper.log('mod_forum_view_forum', params, AddonModForumProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_forum_view_forum', params, AddonModForumProvider.COMPONENT, id, name, 'forum', {}, + siteId); } /** @@ -787,15 +789,17 @@ export class AddonModForumProvider { * * @param {number} id Discussion ID. * @param {number} forumId Forum ID. + * @param {string} [name] Name of the forum. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logDiscussionView(id: number, forumId: number, siteId?: string): Promise { + logDiscussionView(id: number, forumId: number, name?: string, siteId?: string): Promise { const params = { discussionid: id }; - return this.logHelper.log('mod_forum_view_forum_discussion', params, AddonModForumProvider.COMPONENT, forumId, siteId); + return this.logHelper.logSingle('mod_forum_view_forum_discussion', params, AddonModForumProvider.COMPONENT, forumId, name, + 'forum', params, siteId); } /** diff --git a/src/addon/mod/glossary/components/index/index.ts b/src/addon/mod/glossary/components/index/index.ts index 1f473e081..558eac531 100644 --- a/src/addon/mod/glossary/components/index/index.ts +++ b/src/addon/mod/glossary/components/index/index.ts @@ -109,7 +109,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity } } - this.glossaryProvider.logView(this.glossary.id, this.viewMode).then(() => { + this.glossaryProvider.logView(this.glossary.id, this.viewMode, this.glossary.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch((error) => { // Ignore errors. diff --git a/src/addon/mod/glossary/pages/entry/entry.ts b/src/addon/mod/glossary/pages/entry/entry.ts index 03da1c30d..7bbf4f0bf 100644 --- a/src/addon/mod/glossary/pages/entry/entry.ts +++ b/src/addon/mod/glossary/pages/entry/entry.ts @@ -51,7 +51,7 @@ export class AddonModGlossaryEntryPage { */ ionViewDidLoad(): void { this.fetchEntry().then(() => { - this.glossaryProvider.logEntryView(this.entry.id, this.componentId).catch(() => { + this.glossaryProvider.logEntryView(this.entry.id, this.componentId, this.glossary.name).catch(() => { // Ignore errors. }); }).finally(() => { diff --git a/src/addon/mod/glossary/providers/glossary.ts b/src/addon/mod/glossary/providers/glossary.ts index a4014f0d0..1e7ba968b 100644 --- a/src/addon/mod/glossary/providers/glossary.ts +++ b/src/addon/mod/glossary/providers/glossary.ts @@ -867,16 +867,18 @@ export class AddonModGlossaryProvider { * * @param {number} glossaryId Glossary ID. * @param {string} mode The mode in which the glossary was viewed. + * @param {string} [name] Name of the glossary. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(glossaryId: number, mode: string, siteId?: string): Promise { + logView(glossaryId: number, mode: string, name?: string, siteId?: string): Promise { const params = { id: glossaryId, mode: mode }; - return this.logHelper.log('mod_glossary_view_glossary', params, AddonModGlossaryProvider.COMPONENT, glossaryId, siteId); + return this.logHelper.logSingle('mod_glossary_view_glossary', params, AddonModGlossaryProvider.COMPONENT, glossaryId, name, + 'glossary', {mode: mode}, siteId); } /** @@ -884,14 +886,16 @@ export class AddonModGlossaryProvider { * * @param {number} entryId Entry ID. * @param {number} glossaryId Glossary ID. + * @param {string} [name] Name of the glossary. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logEntryView(entryId: number, glossaryId: number, siteId?: string): Promise { + logEntryView(entryId: number, glossaryId: number, name?: string, siteId?: string): Promise { const params = { id: entryId }; - return this.logHelper.log('mod_glossary_view_entry', params, AddonModGlossaryProvider.COMPONENT, glossaryId, siteId); + return this.logHelper.logSingle('mod_glossary_view_entry', params, AddonModGlossaryProvider.COMPONENT, glossaryId, name, + 'glossary', {entryid: entryId}, siteId); } } diff --git a/src/addon/mod/imscp/components/index/index.ts b/src/addon/mod/imscp/components/index/index.ts index 7ca40d13c..11e53d2b2 100644 --- a/src/addon/mod/imscp/components/index/index.ts +++ b/src/addon/mod/imscp/components/index/index.ts @@ -52,7 +52,7 @@ export class AddonModImscpIndexComponent extends CoreCourseModuleMainResourceCom super.ngOnInit(); this.loadContent().then(() => { - this.imscpProvider.logView(this.module.instance).then(() => { + this.imscpProvider.logView(this.module.instance, this.module.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/imscp/providers/imscp.ts b/src/addon/mod/imscp/providers/imscp.ts index 5cc7b9258..df58e9b46 100644 --- a/src/addon/mod/imscp/providers/imscp.ts +++ b/src/addon/mod/imscp/providers/imscp.ts @@ -309,14 +309,16 @@ export class AddonModImscpProvider { * Report a IMSCP as being viewed. * * @param {string} id Module ID. + * @param {string} [name] Name of the imscp. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { imscpid: id }; - return this.logHelper.log('mod_imscp_view_imscp', params, AddonModImscpProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_imscp_view_imscp', params, AddonModImscpProvider.COMPONENT, id, name, 'imscp', {}, + siteId); } } diff --git a/src/addon/mod/lesson/components/index/index.ts b/src/addon/mod/lesson/components/index/index.ts index 3750b56dc..8a0acdba1 100644 --- a/src/addon/mod/lesson/components/index/index.ts +++ b/src/addon/mod/lesson/components/index/index.ts @@ -345,7 +345,7 @@ export class AddonModLessonIndexComponent extends CoreCourseModuleMainActivityCo * Log viewing the lesson. */ protected logView(): void { - this.lessonProvider.logViewLesson(this.lesson.id, this.password).then(() => { + this.lessonProvider.logViewLesson(this.lesson.id, this.password, this.lesson.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch((error) => { // Ignore errors. diff --git a/src/addon/mod/lesson/providers/lesson.ts b/src/addon/mod/lesson/providers/lesson.ts index bfad310ed..55c4763e1 100644 --- a/src/addon/mod/lesson/providers/lesson.ts +++ b/src/addon/mod/lesson/providers/lesson.ts @@ -3017,10 +3017,11 @@ export class AddonModLessonProvider { * * @param {string} id Module ID. * @param {string} [password] Lesson password (if any). + * @param {string} [name] Name of the assign. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logViewLesson(id: number, password?: string, siteId?: string): Promise { + logViewLesson(id: number, password?: string, name?: string, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const params: any = { lessonid: id @@ -3030,7 +3031,8 @@ export class AddonModLessonProvider { params.password = password; } - return this.logHelper.log('mod_lesson_view_lesson', params, AddonModLessonProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_lesson_view_lesson', params, AddonModLessonProvider.COMPONENT, id, name, + 'lesson', {}, siteId); }); } diff --git a/src/addon/mod/lti/components/index/index.ts b/src/addon/mod/lti/components/index/index.ts index 40ccaa4f0..f61c1e50f 100644 --- a/src/addon/mod/lti/components/index/index.ts +++ b/src/addon/mod/lti/components/index/index.ts @@ -95,7 +95,7 @@ export class AddonModLtiIndexComponent extends CoreCourseModuleMainActivityCompo launch(): void { this.ltiProvider.getLtiLaunchData(this.lti.id).then((launchData) => { // "View" LTI. - this.ltiProvider.logView(this.lti.id).then(() => { + this.ltiProvider.logView(this.lti.id, this.lti.name).then(() => { this.checkCompletion(); }).catch((error) => { // Ignore errors. diff --git a/src/addon/mod/lti/providers/lti.ts b/src/addon/mod/lti/providers/lti.ts index 44163818a..fa88da045 100644 --- a/src/addon/mod/lti/providers/lti.ts +++ b/src/addon/mod/lti/providers/lti.ts @@ -213,14 +213,15 @@ export class AddonModLtiProvider { * Report the LTI as being viewed. * * @param {string} id LTI id. + * @param {string} [name] Name of the lti. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params: any = { ltiid: id }; - return this.logHelper.log('mod_lti_view_lti', params, AddonModLtiProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_lti_view_lti', params, AddonModLtiProvider.COMPONENT, id, name, 'lti', {}, siteId); } } diff --git a/src/addon/mod/lti/providers/module-handler.ts b/src/addon/mod/lti/providers/module-handler.ts index 72ca2f2ba..351fd9020 100644 --- a/src/addon/mod/lti/providers/module-handler.ts +++ b/src/addon/mod/lti/providers/module-handler.ts @@ -91,7 +91,7 @@ export class AddonModLtiModuleHandler implements CoreCourseModuleHandler { this.ltiProvider.getLti(courseId, module.id).then((ltiData) => { return this.ltiProvider.getLtiLaunchData(ltiData.id).then((launchData) => { // "View" LTI. - this.ltiProvider.logView(ltiData.id).then(() => { + this.ltiProvider.logView(ltiData.id, ltiData.name).then(() => { this.courseProvider.checkModuleCompletion(courseId, module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/page/components/index/index.ts b/src/addon/mod/page/components/index/index.ts index 4cf4ef924..254bc0f38 100644 --- a/src/addon/mod/page/components/index/index.ts +++ b/src/addon/mod/page/components/index/index.ts @@ -53,7 +53,7 @@ export class AddonModPageIndexComponent extends CoreCourseModuleMainResourceComp this.canGetPage = this.pageProvider.isGetPageWSAvailable(); this.loadContent().then(() => { - this.pageProvider.logView(this.module.instance).then(() => { + this.pageProvider.logView(this.module.instance, this.module.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/page/providers/page.ts b/src/addon/mod/page/providers/page.ts index cfdce8b11..a196d9efc 100644 --- a/src/addon/mod/page/providers/page.ts +++ b/src/addon/mod/page/providers/page.ts @@ -148,14 +148,15 @@ export class AddonModPageProvider { * Report a page as being viewed. * * @param {number} id Module ID. + * @param {string} [name] Name of the page. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { pageid: id }; - return this.logHelper.log('mod_page_view_page', params, AddonModPageProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_page_view_page', params, AddonModPageProvider.COMPONENT, id, name, 'page', {}, siteId); } } diff --git a/src/addon/mod/quiz/components/index/index.ts b/src/addon/mod/quiz/components/index/index.ts index 30851c387..32eef2714 100644 --- a/src/addon/mod/quiz/components/index/index.ts +++ b/src/addon/mod/quiz/components/index/index.ts @@ -85,7 +85,7 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp return; } - this.quizProvider.logViewQuiz(this.quizData.id).then(() => { + this.quizProvider.logViewQuiz(this.quizData.id, this.quizData.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch((error) => { // Ignore errors. diff --git a/src/addon/mod/quiz/pages/player/player.ts b/src/addon/mod/quiz/pages/player/player.ts index 12bf38f2b..75da900d8 100644 --- a/src/addon/mod/quiz/pages/player/player.ts +++ b/src/addon/mod/quiz/pages/player/player.ts @@ -457,7 +457,7 @@ export class AddonModQuizPlayerPage implements OnInit, OnDestroy { }); // Mark the page as viewed. We'll ignore errors in this call. - this.quizProvider.logViewAttempt(this.attempt.id, page, this.preflightData, this.offline).catch((error) => { + this.quizProvider.logViewAttempt(this.attempt.id, page, this.preflightData, this.offline, this.quiz).catch((error) => { // Ignore errors. }); @@ -484,7 +484,8 @@ export class AddonModQuizPlayerPage implements OnInit, OnDestroy { this.attempt.dueDateWarning = this.quizProvider.getAttemptDueDateWarning(this.quiz, this.attempt); // Log summary as viewed. - this.quizProvider.logViewAttemptSummary(this.attempt.id, this.preflightData, this.quizId).catch((error) => { + this.quizProvider.logViewAttemptSummary(this.attempt.id, this.preflightData, this.quizId, this.quiz.name) + .catch((error) => { // Ignore errors. }); }); diff --git a/src/addon/mod/quiz/pages/review/review.ts b/src/addon/mod/quiz/pages/review/review.ts index 6d1bc331d..218d7cd60 100644 --- a/src/addon/mod/quiz/pages/review/review.ts +++ b/src/addon/mod/quiz/pages/review/review.ts @@ -81,7 +81,7 @@ export class AddonModQuizReviewPage implements OnInit { */ ngOnInit(): void { this.fetchData().then(() => { - this.quizProvider.logViewAttemptReview(this.attemptId, this.quizId).catch((error) => { + this.quizProvider.logViewAttemptReview(this.attemptId, this.quizId, this.quiz.name).catch((error) => { // Ignore errors. }); }).finally(() => { diff --git a/src/addon/mod/quiz/providers/quiz-sync.ts b/src/addon/mod/quiz/providers/quiz-sync.ts index e14b3f1d6..9f7226e9d 100644 --- a/src/addon/mod/quiz/providers/quiz-sync.ts +++ b/src/addon/mod/quiz/providers/quiz-sync.ts @@ -392,8 +392,9 @@ export class AddonModQuizSyncProvider extends CoreCourseActivitySyncBaseProvider // Answers sent, now set the current page if the attempt isn't finished. if (!finish) { + // Don't pass the quiz instance because we don't want to trigger a Firebase event in this case. return this.quizProvider.logViewAttempt(onlineAttempt.id, offlineAttempt.currentpage, preflightData, - false).catch(() => { + false, undefined, siteId).catch(() => { // Ignore errors. }); } diff --git a/src/addon/mod/quiz/providers/quiz.ts b/src/addon/mod/quiz/providers/quiz.ts index ee121b63a..00ba2a92e 100644 --- a/src/addon/mod/quiz/providers/quiz.ts +++ b/src/addon/mod/quiz/providers/quiz.ts @@ -27,6 +27,7 @@ import { CoreQuestionDelegate } from '@core/question/providers/delegate'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModQuizAccessRuleDelegate } from './access-rules-delegate'; import { AddonModQuizOfflineProvider } from './quiz-offline'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; /** * Service that provides some features for quiz. @@ -63,7 +64,8 @@ export class AddonModQuizProvider { private gradesHelper: CoreGradesHelperProvider, private questionDelegate: CoreQuestionDelegate, private filepoolProvider: CoreFilepoolProvider, private timeUtils: CoreTimeUtilsProvider, private accessRulesDelegate: AddonModQuizAccessRuleDelegate, private quizOfflineProvider: AddonModQuizOfflineProvider, - private domUtils: CoreDomUtilsProvider, private logHelper: CoreCourseLogHelperProvider) { + private domUtils: CoreDomUtilsProvider, private logHelper: CoreCourseLogHelperProvider, + protected pushNotificationsProvider: CorePushNotificationsProvider) { this.logger = logger.getInstance('AddonModQuizProvider'); } @@ -1533,10 +1535,13 @@ export class AddonModQuizProvider { * @param {number} [page=0] Page number. * @param {any} [preflightData] Preflight required data (like password). * @param {boolean} [offline] Whether attempt is offline. + * @param {string} [quiz] Quiz instance. If set, a Firebase event will be stored. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logViewAttempt(attemptId: number, page: number = 0, preflightData: any = {}, offline?: boolean, siteId?: string): Promise { + logViewAttempt(attemptId: number, page: number = 0, preflightData: any = {}, offline?: boolean, quiz?: any, + siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { const params = { attemptid: attemptId, @@ -1549,6 +1554,10 @@ export class AddonModQuizProvider { if (offline) { promises.push(this.quizOfflineProvider.setAttemptCurrentPage(attemptId, page, site.getId())); } + if (quiz) { + this.pushNotificationsProvider.logViewEvent(quiz.id, quiz.name, 'quiz', 'mod_quiz_view_attempt', + {attemptid: attemptId, page: page}, siteId); + } return Promise.all(promises); }); @@ -1559,15 +1568,17 @@ export class AddonModQuizProvider { * * @param {number} attemptId Attempt ID. * @param {number} quizId Quiz ID. + * @param {string} [name] Name of the quiz. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logViewAttemptReview(attemptId: number, quizId: number, siteId?: string): Promise { + logViewAttemptReview(attemptId: number, quizId: number, name?: string, siteId?: string): Promise { const params = { attemptid: attemptId }; - return this.logHelper.log('mod_quiz_view_attempt_review', params, AddonModQuizProvider.COMPONENT, quizId, siteId); + return this.logHelper.logSingle('mod_quiz_view_attempt_review', params, AddonModQuizProvider.COMPONENT, quizId, name, + 'quiz', params, siteId); } /** @@ -1576,31 +1587,35 @@ export class AddonModQuizProvider { * @param {number} attemptId Attempt ID. * @param {any} preflightData Preflight required data (like password). * @param {number} quizId Quiz ID. + * @param {string} [name] Name of the quiz. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logViewAttemptSummary(attemptId: number, preflightData: any, quizId: number, siteId?: string): Promise { + logViewAttemptSummary(attemptId: number, preflightData: any, quizId: number, name?: string, siteId?: string): Promise { const params = { attemptid: attemptId, preflightdata: this.utils.objectToArrayOfObjects(preflightData, 'name', 'value', true) }; - return this.logHelper.log('mod_quiz_view_attempt_summary', params, AddonModQuizProvider.COMPONENT, quizId, siteId); + return this.logHelper.logSingle('mod_quiz_view_attempt_summary', params, AddonModQuizProvider.COMPONENT, quizId, name, + 'quiz', {attemptid: attemptId}, siteId); } /** * Report a quiz as being viewed. * * @param {number} id Module ID. + * @param {string} [name] Name of the quiz. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logViewQuiz(id: number, siteId?: string): Promise { + logViewQuiz(id: number, name?: string, siteId?: string): Promise { const params = { quizid: id }; - return this.logHelper.log('mod_quiz_view_quiz', params, AddonModQuizProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_quiz_view_quiz', params, AddonModQuizProvider.COMPONENT, id, name, 'quiz', {}, + siteId); } /** diff --git a/src/addon/mod/resource/components/index/index.ts b/src/addon/mod/resource/components/index/index.ts index 2c1283958..ab8ccffac 100644 --- a/src/addon/mod/resource/components/index/index.ts +++ b/src/addon/mod/resource/components/index/index.ts @@ -53,7 +53,7 @@ export class AddonModResourceIndexComponent extends CoreCourseModuleMainResource this.canGetResource = this.resourceProvider.isGetResourceWSAvailable(); this.loadContent().then(() => { - this.resourceProvider.logView(this.module.instance).then(() => { + this.resourceProvider.logView(this.module.instance, this.module.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/resource/providers/helper.ts b/src/addon/mod/resource/providers/helper.ts index 3b3f53d4d..0f216e4aa 100644 --- a/src/addon/mod/resource/providers/helper.ts +++ b/src/addon/mod/resource/providers/helper.ts @@ -179,7 +179,7 @@ export class AddonModResourceHelperProvider { // Download and open the file from the resource contents. return this.courseHelper.downloadModuleAndOpenFile(module, courseId, AddonModResourceProvider.COMPONENT, module.id, module.contents).then(() => { - this.resourceProvider.logView(module.instance).then(() => { + this.resourceProvider.logView(module.instance, module.name).then(() => { this.courseProvider.checkModuleCompletion(courseId, module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/resource/providers/resource.ts b/src/addon/mod/resource/providers/resource.ts index 725cbc473..995092907 100644 --- a/src/addon/mod/resource/providers/resource.ts +++ b/src/addon/mod/resource/providers/resource.ts @@ -150,14 +150,16 @@ export class AddonModResourceProvider { * Report the resource as being viewed. * * @param {number} id Module ID. + * @param {string} [name] Name of the resource. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { resourceid: id }; - return this.logHelper.log('mod_resource_view_resource', params, AddonModResourceProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_resource_view_resource', params, AddonModResourceProvider.COMPONENT, id, name, + 'resource', {}, siteId); } } diff --git a/src/addon/mod/scorm/components/index/index.ts b/src/addon/mod/scorm/components/index/index.ts index de725b272..fce78f99c 100644 --- a/src/addon/mod/scorm/components/index/index.ts +++ b/src/addon/mod/scorm/components/index/index.ts @@ -83,7 +83,7 @@ export class AddonModScormIndexComponent extends CoreCourseModuleMainActivityCom return; } - this.scormProvider.logView(this.scorm.id).then(() => { + this.scormProvider.logView(this.scorm.id, this.scorm.name).then(() => { this.checkCompletion(); }).catch((error) => { // Ignore errors. diff --git a/src/addon/mod/scorm/pages/player/player.ts b/src/addon/mod/scorm/pages/player/player.ts index 49f2cd000..63d148aca 100644 --- a/src/addon/mod/scorm/pages/player/player.ts +++ b/src/addon/mod/scorm/pages/player/player.ts @@ -370,7 +370,7 @@ export class AddonModScormPlayerPage implements OnInit, OnDestroy { } // Trigger SCO launch event. - this.scormProvider.logLaunchSco(this.scorm.id, sco.id).catch(() => { + this.scormProvider.logLaunchSco(this.scorm.id, sco.id, this.scorm.name).catch(() => { // Ignore errors. }); } diff --git a/src/addon/mod/scorm/providers/scorm.ts b/src/addon/mod/scorm/providers/scorm.ts index 0ee62a7f7..712020716 100644 --- a/src/addon/mod/scorm/providers/scorm.ts +++ b/src/addon/mod/scorm/providers/scorm.ts @@ -1421,21 +1421,19 @@ export class AddonModScormProvider { * * @param {number} scormId SCORM ID. * @param {number} scoId SCO ID. + * @param {string} [name] Name of the SCORM. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logLaunchSco(scormId: number, scoId: number, siteId?: string): Promise { + logLaunchSco(scormId: number, scoId: number, name?: string, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const params = { scormid: scormId, scoid: scoId }; - return site.write('mod_scorm_launch_sco', params).then((response) => { - if (!response || !response.status) { - return Promise.reject(null); - } - }); + return this.logHelper.logSingle('mod_scorm_launch_sco', params, AddonModScormProvider.COMPONENT, scormId, name, + 'scorm', {scoid: scoId}, siteId); }); } @@ -1443,15 +1441,17 @@ export class AddonModScormProvider { * Report a SCORM as being viewed. * * @param {string} id Module ID. + * @param {string} [name] Name of the SCORM. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { scormid: id }; - return this.logHelper.log('mod_scorm_view_scorm', params, AddonModScormProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_scorm_view_scorm', params, AddonModScormProvider.COMPONENT, id, name, 'scorm', {}, + siteId); } /** diff --git a/src/addon/mod/survey/components/index/index.ts b/src/addon/mod/survey/components/index/index.ts index 3a7eb4151..8b6cfbb65 100644 --- a/src/addon/mod/survey/components/index/index.ts +++ b/src/addon/mod/survey/components/index/index.ts @@ -53,7 +53,7 @@ export class AddonModSurveyIndexComponent extends CoreCourseModuleMainActivityCo this.userId = this.sitesProvider.getCurrentSiteUserId(); this.loadContent(false, true).then(() => { - this.surveyProvider.logView(this.survey.id).then(() => { + this.surveyProvider.logView(this.survey.id, this.survey.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/survey/providers/survey.ts b/src/addon/mod/survey/providers/survey.ts index ff376e2f8..1a1d2547f 100644 --- a/src/addon/mod/survey/providers/survey.ts +++ b/src/addon/mod/survey/providers/survey.ts @@ -213,15 +213,17 @@ export class AddonModSurveyProvider { * Report the survey as being viewed. * * @param {number} id Module ID. + * @param {string} [name] Name of the assign. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { surveyid: id }; - return this.logHelper.log('mod_survey_view_survey', params, AddonModSurveyProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_survey_view_survey', params, AddonModSurveyProvider.COMPONENT, id, name, 'survey', + {}, siteId); } /** diff --git a/src/addon/mod/url/components/index/index.ts b/src/addon/mod/url/components/index/index.ts index d5c92ec80..842d14194 100644 --- a/src/addon/mod/url/components/index/index.ts +++ b/src/addon/mod/url/components/index/index.ts @@ -178,7 +178,7 @@ export class AddonModUrlIndexComponent extends CoreCourseModuleMainResourceCompo * @return {Promise} Promise resolved when done. */ protected logView(): Promise { - return this.urlProvider.logView(this.module.instance).then(() => { + return this.urlProvider.logView(this.module.instance, this.module.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/url/providers/module-handler.ts b/src/addon/mod/url/providers/module-handler.ts index a4ba652a5..fb51ea3bc 100644 --- a/src/addon/mod/url/providers/module-handler.ts +++ b/src/addon/mod/url/providers/module-handler.ts @@ -173,7 +173,7 @@ export class AddonModUrlModuleHandler implements CoreCourseModuleHandler { * @param {number} courseId The course ID. */ protected openUrl(module: any, courseId: number): void { - this.urlProvider.logView(module.instance).then(() => { + this.urlProvider.logView(module.instance, module.name).then(() => { this.courseProvider.checkModuleCompletion(courseId, module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/url/providers/url.ts b/src/addon/mod/url/providers/url.ts index e7e02b85a..3e63ebf9f 100644 --- a/src/addon/mod/url/providers/url.ts +++ b/src/addon/mod/url/providers/url.ts @@ -217,14 +217,15 @@ export class AddonModUrlProvider { * Report the url as being viewed. * * @param {number} id Module ID. + * @param {string} [name] Name of the assign. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { urlid: id }; - return this.logHelper.log('mod_url_view_url', params, AddonModUrlProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_url_view_url', params, AddonModUrlProvider.COMPONENT, id, name, 'url', {}, siteId); } } diff --git a/src/addon/mod/wiki/components/index/index.ts b/src/addon/mod/wiki/components/index/index.ts index 25bc9af76..941417a68 100644 --- a/src/addon/mod/wiki/components/index/index.ts +++ b/src/addon/mod/wiki/components/index/index.ts @@ -104,13 +104,13 @@ export class AddonModWikiIndexComponent extends CoreCourseModuleMainActivityComp } if (this.isMainPage) { - this.wikiProvider.logView(this.wiki.id).then(() => { + this.wikiProvider.logView(this.wiki.id, this.wiki.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch((error) => { // Ignore errors. }); } else { - this.wikiProvider.logPageView(this.pageId, this.wiki.id).catch(() => { + this.wikiProvider.logPageView(this.pageId, this.wiki.id, this.wiki.name).catch(() => { // Ignore errors. }); } @@ -341,7 +341,7 @@ export class AddonModWikiIndexComponent extends CoreCourseModuleMainActivityComp this.currentPage = data.pageId; this.showLoadingAndFetch(true, false).then(() => { - this.wikiProvider.logPageView(this.currentPage, this.wiki.id).catch(() => { + this.wikiProvider.logPageView(this.currentPage, this.wiki.id, this.wiki.name).catch(() => { // Ignore errors. }); }); diff --git a/src/addon/mod/wiki/providers/wiki.ts b/src/addon/mod/wiki/providers/wiki.ts index 42dcd8b1c..e20543769 100644 --- a/src/addon/mod/wiki/providers/wiki.ts +++ b/src/addon/mod/wiki/providers/wiki.ts @@ -655,30 +655,34 @@ export class AddonModWikiProvider { * * @param {number} id Page ID. * @param {number} wikiId Wiki ID. + * @param {string} [name] Name of the wiki. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logPageView(id: number, wikiId: number, siteId?: string): Promise { + logPageView(id: number, wikiId: number, name?: string, siteId?: string): Promise { const params = { pageid: id }; - return this.logHelper.log('mod_wiki_view_page', params, AddonModWikiProvider.COMPONENT, wikiId, siteId); + return this.logHelper.logSingle('mod_wiki_view_page', params, AddonModWikiProvider.COMPONENT, wikiId, name, 'wiki', + params, siteId); } /** * Report the wiki as being viewed. * * @param {number} id Wiki ID. + * @param {string} [name] Name of the wiki. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { wikiid: id }; - return this.logHelper.log('mod_wiki_view_wiki', params, AddonModWikiProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_wiki_view_wiki', params, AddonModWikiProvider.COMPONENT, id, name, 'wiki', {}, + siteId); } /** diff --git a/src/addon/mod/workshop/components/index/index.ts b/src/addon/mod/workshop/components/index/index.ts index 1515e91da..e158670bf 100644 --- a/src/addon/mod/workshop/components/index/index.ts +++ b/src/addon/mod/workshop/components/index/index.ts @@ -107,7 +107,7 @@ export class AddonModWorkshopIndexComponent extends CoreCourseModuleMainActivity return; } - this.workshopProvider.logView(this.workshop.id).then(() => { + this.workshopProvider.logView(this.workshop.id, this.workshop.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch((error) => { // Ignore errors. diff --git a/src/addon/mod/workshop/pages/submission/submission.ts b/src/addon/mod/workshop/pages/submission/submission.ts index e4cb2cd5f..77d82fec2 100644 --- a/src/addon/mod/workshop/pages/submission/submission.ts +++ b/src/addon/mod/workshop/pages/submission/submission.ts @@ -130,7 +130,7 @@ export class AddonModWorkshopSubmissionPage implements OnInit, OnDestroy { */ ngOnInit(): void { this.fetchSubmissionData().then(() => { - this.workshopProvider.logViewSubmission(this.submissionId, this.workshopId).then(() => { + this.workshopProvider.logViewSubmission(this.submissionId, this.workshopId, this.workshop.name).then(() => { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); }).catch(() => { // Ignore errors. diff --git a/src/addon/mod/workshop/providers/workshop.ts b/src/addon/mod/workshop/providers/workshop.ts index 5d0e3165e..86e0c3525 100644 --- a/src/addon/mod/workshop/providers/workshop.ts +++ b/src/addon/mod/workshop/providers/workshop.ts @@ -1362,15 +1362,17 @@ export class AddonModWorkshopProvider { * Report the workshop as being viewed. * * @param {number} id Workshop ID. + * @param {string} [name] Name of the workshop. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(id: number, siteId?: string): Promise { + logView(id: number, name?: string, siteId?: string): Promise { const params = { workshopid: id }; - return this.logHelper.log('mod_workshop_view_workshop', params, AddonModWorkshopProvider.COMPONENT, id, siteId); + return this.logHelper.logSingle('mod_workshop_view_workshop', params, AddonModWorkshopProvider.COMPONENT, id, name, + 'workshop', siteId); } /** @@ -1378,14 +1380,16 @@ export class AddonModWorkshopProvider { * * @param {number} id Submission ID. * @param {number} workshopId Workshop ID. + * @param {string} [name] Name of the workshop. * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when the WS call is successful. */ - logViewSubmission(id: number, workshopId: number, siteId?: string): Promise { + logViewSubmission(id: number, workshopId: number, name?: string, siteId?: string): Promise { const params = { submissionid: id }; - return this.logHelper.log('mod_workshop_view_submission', params, AddonModWorkshopProvider.COMPONENT, workshopId, siteId); + return this.logHelper.logSingle('mod_workshop_view_submission', params, AddonModWorkshopProvider.COMPONENT, workshopId, + name, 'workshop', params, siteId); } } diff --git a/src/addon/notes/providers/notes.ts b/src/addon/notes/providers/notes.ts index 8226e0139..78fb79c1c 100644 --- a/src/addon/notes/providers/notes.ts +++ b/src/addon/notes/providers/notes.ts @@ -21,6 +21,7 @@ import { CoreSiteWSPreSets } from '@classes/site'; import { TranslateService } from '@ngx-translate/core'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonNotesOfflineProvider } from './notes-offline'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; /** * Service to handle notes. @@ -33,7 +34,7 @@ export class AddonNotesProvider { constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private appProvider: CoreAppProvider, private utils: CoreUtilsProvider, private translate: TranslateService, private userProvider: CoreUserProvider, - private notesOffline: AddonNotesOfflineProvider) { + private notesOffline: AddonNotesOfflineProvider, protected pushNotificationsProvider: CorePushNotificationsProvider) { this.logger = logger.getInstance('AddonNotesProvider'); } @@ -318,6 +319,8 @@ export class AddonNotesProvider { userid: userId || 0 }; + this.pushNotificationsProvider.logViewListEvent('notes', 'core_notes_view_notes', params, site.getId()); + return site.write('core_notes_view_notes', params); }); } diff --git a/src/core/course/pages/section/section.ts b/src/core/course/pages/section/section.ts index c1dada99d..e8b3d75bb 100644 --- a/src/core/course/pages/section/section.ts +++ b/src/core/course/pages/section/section.ts @@ -213,7 +213,7 @@ export class CoreCourseSectionPage implements OnDestroy { let promise; // Add log in Moodle. - this.courseProvider.logView(this.course.id, this.sectionNumber).catch(() => { + this.courseProvider.logView(this.course.id, this.sectionNumber, undefined, this.course.fullname).catch(() => { // Ignore errors. }); diff --git a/src/core/course/providers/course.ts b/src/core/course/providers/course.ts index c960b7c51..e5207faca 100644 --- a/src/core/course/providers/course.ts +++ b/src/core/course/providers/course.ts @@ -27,6 +27,7 @@ import { CoreConstants } from '../../constants'; import { CoreCourseOfflineProvider } from './course-offline'; import { CoreSitePluginsProvider } from '@core/siteplugins/providers/siteplugins'; import { CoreCourseFormatDelegate } from './format-delegate'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; /** * Service that provides some features regarding a course. @@ -102,7 +103,7 @@ export class CoreCourseProvider { private utils: CoreUtilsProvider, private timeUtils: CoreTimeUtilsProvider, private translate: TranslateService, private courseOffline: CoreCourseOfflineProvider, private appProvider: CoreAppProvider, private courseFormatDelegate: CoreCourseFormatDelegate, private sitePluginsProvider: CoreSitePluginsProvider, - private domUtils: CoreDomUtilsProvider) { + private domUtils: CoreDomUtilsProvider, protected pushNotificationsProvider: CorePushNotificationsProvider) { this.logger = logger.getInstance('CoreCourseProvider'); this.sitesProvider.registerSiteSchema(this.siteSchema); @@ -811,18 +812,22 @@ export class CoreCourseProvider { * @param {number} courseId Course ID. * @param {number} [sectionNumber] Section number. * @param {string} [siteId] Site ID. If not defined, current site. + * @param {string} [name] Name of the course. * @return {Promise} Promise resolved when the WS call is successful. */ - logView(courseId: number, sectionNumber?: number, siteId?: string): Promise { + logView(courseId: number, sectionNumber?: number, siteId?: string, name?: string): Promise { const params: any = { - courseid: courseId - }; + courseid: courseId + }, + wsName = 'core_course_view_course'; if (typeof sectionNumber != 'undefined') { params.sectionnumber = sectionNumber; } return this.sitesProvider.getSite(siteId).then((site) => { + this.pushNotificationsProvider.logViewEvent(courseId, name, 'course', wsName, {sectionnumber: sectionNumber}, siteId); + return site.write('core_course_view_course', params).then((response) => { if (!response.status) { return Promise.reject(null); diff --git a/src/core/course/providers/log-cron-handler.ts b/src/core/course/providers/log-cron-handler.ts index 063a37ea6..e708cf056 100644 --- a/src/core/course/providers/log-cron-handler.ts +++ b/src/core/course/providers/log-cron-handler.ts @@ -36,7 +36,7 @@ export class CoreCourseLogCronHandler implements CoreCronHandler { */ execute(siteId?: string, force?: boolean): Promise { return this.sitesProvider.getSite(siteId).then((site) => { - return this.courseProvider.logView(site.getSiteHomeId(), undefined, site.getId()); + return this.courseProvider.logView(site.getSiteHomeId(), undefined, site.getId(), site.getInfo().sitename); }); } diff --git a/src/core/course/providers/log-helper.ts b/src/core/course/providers/log-helper.ts index 89b76231f..36ccf4ab8 100644 --- a/src/core/course/providers/log-helper.ts +++ b/src/core/course/providers/log-helper.ts @@ -18,6 +18,7 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreAppProvider } from '@providers/app'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; /** * Helper to manage logging to Moodle. @@ -62,7 +63,7 @@ export class CoreCourseLogHelperProvider { constructor(protected sitesProvider: CoreSitesProvider, protected timeUtils: CoreTimeUtilsProvider, protected textUtils: CoreTextUtilsProvider, protected utils: CoreUtilsProvider, - protected appProvider: CoreAppProvider) { + protected appProvider: CoreAppProvider, protected pushNotificationsProvider: CorePushNotificationsProvider) { this.sitesProvider.registerSiteSchema(this.siteSchema); } @@ -196,6 +197,47 @@ export class CoreCourseLogHelperProvider { }); } + /** + * Perform log online. Data will be saved offline for syncing. + * It also triggers a Firebase view_item event. + * + * @param {string} ws WS name. + * @param {any} data Data to send to the WS. + * @param {string} component Component name. + * @param {number} componentId Component ID. + * @param {string} [name] Name of the viewed item. + * @param {string} [category] Category of the viewed item. + * @param {string} [eventData] Data to pass to the Firebase event. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + logSingle(ws: string, data: any, component: string, componentId: number, name?: string, category?: string, eventData?: any, + siteId?: string): Promise { + this.pushNotificationsProvider.logViewEvent(componentId, name, category, ws, eventData, siteId); + + return this.log(ws, data, component, componentId, siteId); + } + + /** + * Perform log online. Data will be saved offline for syncing. + * It also triggers a Firebase view_item_list event. + * + * @param {string} ws WS name. + * @param {any} data Data to send to the WS. + * @param {string} component Component name. + * @param {number} componentId Component ID. + * @param {string} category Category of the viewed item. + * @param {string} [eventData] Data to pass to the Firebase event. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. + */ + logList(ws: string, data: any, component: string, componentId: number, category: string, eventData?: any, siteId?: string) + : Promise { + this.pushNotificationsProvider.logViewListEvent(category, ws, eventData, siteId); + + return this.log(ws, data, component, componentId, siteId); + } + /** * Save activity log for offline sync. * diff --git a/src/core/grades/providers/grades.ts b/src/core/grades/providers/grades.ts index 4647b6ed6..59b25b1d2 100644 --- a/src/core/grades/providers/grades.ts +++ b/src/core/grades/providers/grades.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; /** * Service to provide grade functionalities. @@ -33,7 +34,7 @@ export class CoreGradesProvider { protected logger; constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, - private coursesProvider: CoreCoursesProvider) { + private coursesProvider: CoreCoursesProvider, protected pushNotificationsProvider: CorePushNotificationsProvider) { this.logger = logger.getInstance('CoreGradesProvider'); } @@ -326,12 +327,25 @@ export class CoreGradesProvider { * * @param {number} courseId Course ID. * @param {number} userId User ID. + * @param {string} [name] Course name. If not set, it will be calculated. * @return {Promise} Promise resolved when done. */ - logCourseGradesView(courseId: number, userId: number): Promise { + logCourseGradesView(courseId: number, userId: number, name?: string): Promise { userId = userId || this.sitesProvider.getCurrentSiteUserId(); - return this.sitesProvider.getCurrentSite().write('gradereport_user_view_grade_report', { + const wsName = 'gradereport_user_view_grade_report'; + + if (!name) { + this.coursesProvider.getUserCourse(courseId, true).catch(() => { + return {}; + }).then((course) => { + this.pushNotificationsProvider.logViewEvent(courseId, course.fullname || '', 'grades', wsName, {userid: userId}); + }); + } else { + this.pushNotificationsProvider.logViewEvent(courseId, name, 'grades', wsName, {userid: userId}); + } + + return this.sitesProvider.getCurrentSite().write(wsName, { courseid: courseId, userid: userId }); @@ -348,8 +362,12 @@ export class CoreGradesProvider { courseId = this.sitesProvider.getCurrentSiteHomeId(); } - return this.sitesProvider.getCurrentSite().write('gradereport_overview_view_grade_report', { + const params = { courseid: courseId - }); + }; + + this.pushNotificationsProvider.logViewListEvent('grades', 'gradereport_overview_view_grade_report', params); + + return this.sitesProvider.getCurrentSite().write('gradereport_overview_view_grade_report', params); } } diff --git a/src/core/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts index c03e2be92..28de7b014 100644 --- a/src/core/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -315,6 +315,63 @@ export class CorePushNotificationsProvider { return Promise.resolve(); } + /** + * Log a firebase view_item event. + * + * @param {number|string} itemId The item ID. + * @param {string} itemName The item name. + * @param {string} itemCategory The item category. + * @param {string} wsName Name of the WS. + * @param {any} [data] Other data to pass to the event. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. This promise is never rejected. + */ + logViewEvent(itemId: number | string, itemName: string, itemCategory: string, wsName: string, data?: any, siteId?: string) + : Promise { + data = data || {}; + + // Add "moodle" to the name of all extra params. + data = this.utils.prefixKeys(data, 'moodle'); + data['moodleaction'] = wsName; + data['moodlesiteid'] = siteId || this.sitesProvider.getCurrentSiteId(); + + if (itemId) { + data['item_id'] = itemId; + } + if (itemName) { + data['item_name'] = itemName; + } + if (itemCategory) { + data['item_category'] = itemCategory; + } + + return this.logEvent('view_item', data, false); + } + + /** + * Log a firebase view_item_list event. + * + * @param {string} itemCategory The item category. + * @param {string} wsName Name of the WS. + * @param {any} [data] Other data to pass to the event. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved when done. This promise is never rejected. + */ + logViewListEvent(itemCategory: string, wsName: string, data?: any, siteId?: string): Promise { + data = data || {}; + + // Add "moodle" to the name of all extra params. + data = this.utils.prefixKeys(data, 'moodle'); + data['moodleaction'] = wsName; + data['moodlesiteid'] = siteId || this.sitesProvider.getCurrentSiteId(); + + if (itemCategory) { + data['item_category'] = itemCategory; + } + + return this.logEvent('view_item_list', data, false); + } + /** * Function called when a push notification is clicked. Redirect the user to the right state. * diff --git a/src/core/sitehome/components/index/index.ts b/src/core/sitehome/components/index/index.ts index 9bf86850d..354881d3b 100644 --- a/src/core/sitehome/components/index/index.ts +++ b/src/core/sitehome/components/index/index.ts @@ -20,6 +20,7 @@ import { CoreCourseHelperProvider } from '@core/course/providers/helper'; import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate'; import { CoreBlockDelegate } from '@core/block/providers/delegate'; import { CoreBlockComponent } from '@core/block/components/block/block'; +import { CoreSite } from '@classes/site'; /** * Component that displays site home index. @@ -37,12 +38,14 @@ export class CoreSiteHomeIndexComponent implements OnInit { hasSupportedBlock: boolean; items: any[] = []; siteHomeId: number; + currentSite: CoreSite; blocks = []; - constructor(private domUtils: CoreDomUtilsProvider, private sitesProvider: CoreSitesProvider, + constructor(private domUtils: CoreDomUtilsProvider, sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider, private courseHelper: CoreCourseHelperProvider, private prefetchDelegate: CoreCourseModulePrefetchDelegate, private blockDelegate: CoreBlockDelegate) { - this.siteHomeId = sitesProvider.getCurrentSite().getSiteHomeId(); + this.currentSite = sitesProvider.getCurrentSite(); + this.siteHomeId = this.currentSite.getSiteHomeId(); } /** @@ -60,14 +63,13 @@ export class CoreSiteHomeIndexComponent implements OnInit { * @param {any} refresher Refresher. */ doRefresh(refresher: any): void { - const promises = [], - currentSite = this.sitesProvider.getCurrentSite(); + const promises = []; promises.push(this.courseProvider.invalidateSections(this.siteHomeId)); - promises.push(currentSite.invalidateConfig().then(() => { + promises.push(this.currentSite.invalidateConfig().then(() => { // Config invalidated, fetch it again. - return currentSite.getConfig().then((config) => { - currentSite.setConfig(config); + return this.currentSite.getConfig().then((config) => { + this.currentSite.setConfig(config); }); })); @@ -102,7 +104,7 @@ export class CoreSiteHomeIndexComponent implements OnInit { protected loadContent(): Promise { this.hasContent = false; - const config = this.sitesProvider.getCurrentSite().getStoredConfig() || { numsections: 1 }; + const config = this.currentSite.getStoredConfig() || { numsections: 1 }; if (config.frontpageloggedin) { // Items with index 1 and 3 were removed on 2.5 and not being supported in the app. @@ -142,7 +144,8 @@ export class CoreSiteHomeIndexComponent implements OnInit { } // Add log in Moodle. - this.courseProvider.logView(this.siteHomeId).catch(() => { + this.courseProvider.logView(this.siteHomeId, undefined, undefined, + this.currentSite && this.currentSite.getInfo().sitename).catch(() => { // Ignore errors. }); diff --git a/src/core/user/pages/profile/profile.ts b/src/core/user/pages/profile/profile.ts index 46fb41d6a..fd3875f0d 100644 --- a/src/core/user/pages/profile/profile.ts +++ b/src/core/user/pages/profile/profile.ts @@ -84,7 +84,7 @@ export class CoreUserProfilePage { */ ionViewDidLoad(): void { this.fetchUser().then(() => { - return this.userProvider.logView(this.userId, this.courseId).catch((error) => { + return this.userProvider.logView(this.userId, this.courseId, this.user.fullname).catch((error) => { this.isDeleted = error.errorcode === 'userdeleted'; this.isEnrolled = error.errorcode !== 'notenrolledprofile'; }); diff --git a/src/core/user/providers/user.ts b/src/core/user/providers/user.ts index fe1ec6c7c..aa844e9e3 100644 --- a/src/core/user/providers/user.ts +++ b/src/core/user/providers/user.ts @@ -20,6 +20,7 @@ import { CoreSitesProvider, CoreSiteSchema } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreAppProvider } from '@providers/app'; import { CoreUserOfflineProvider } from './offline'; +import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; /** * Service to provide user functionalities. @@ -63,7 +64,7 @@ export class CoreUserProvider { constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private utils: CoreUtilsProvider, private filepoolProvider: CoreFilepoolProvider, private appProvider: CoreAppProvider, - private userOffline: CoreUserOfflineProvider) { + private userOffline: CoreUserOfflineProvider, private pushNotificationsProvider: CorePushNotificationsProvider) { this.logger = logger.getInstance('CoreUserProvider'); this.sitesProvider.registerSiteSchema(this.siteSchema); } @@ -432,18 +433,22 @@ export class CoreUserProvider { * Log User Profile View in Moodle. * @param {number} userId User ID. * @param {number} [courseId] Course ID. + * @param {string} [name] Name of the user. * @return {Promise} Promise resolved when done. */ - logView(userId: number, courseId?: number): Promise { + logView(userId: number, courseId?: number, name?: string): Promise { const params = { - userid: userId - }; + userid: userId + }, + wsName = 'core_user_view_user_profile'; if (courseId) { params['courseid'] = courseId; } - return this.sitesProvider.getCurrentSite().write('core_user_view_user_profile', params); + this.pushNotificationsProvider.logViewEvent(userId, name, 'user', wsName, {courseid: courseId}); + + return this.sitesProvider.getCurrentSite().write(wsName, params); } /** @@ -452,9 +457,13 @@ export class CoreUserProvider { * @return {Promise} Promise resolved when done. */ logParticipantsView(courseId?: number): Promise { - return this.sitesProvider.getCurrentSite().write('core_user_view_user_list', { + const params = { courseid: courseId - }); + }; + + this.pushNotificationsProvider.logViewListEvent('user', 'core_user_view_user_list', params); + + return this.sitesProvider.getCurrentSite().write('core_user_view_user_list', params); } /** diff --git a/src/providers/utils/utils.ts b/src/providers/utils/utils.ts index 5c2475fd1..1569b505d 100644 --- a/src/providers/utils/utils.ts +++ b/src/providers/utils/utils.ts @@ -1049,6 +1049,24 @@ export class CoreUtilsProvider { return mapped; } + /** + * Add a prefix to all the keys in an object. + * + * @param {any} data Object. + * @param {string} prefix Prefix to add. + * @return {any} Prefixed object. + */ + prefixKeys(data: any, prefix: string): any { + const newObj = {}, + keys = Object.keys(data); + + keys.forEach((key) => { + newObj[prefix + key] = data[key]; + }); + + return newObj; + } + /** * Similar to AngularJS $q.defer(). * From 5810946b96e6db6d6ed37cae6b5983f0e4269ab7 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 7 May 2019 10:40:28 +0200 Subject: [PATCH 174/263] MOBILE-2957 fcm: Log notification dismissed event in foreground --- .../pushnotifications.module.ts | 6 ++ src/providers/local-notifications.ts | 83 ++++++++++++++++--- 2 files changed, 77 insertions(+), 12 deletions(-) diff --git a/src/core/pushnotifications/pushnotifications.module.ts b/src/core/pushnotifications/pushnotifications.module.ts index d804e4270..a907ab8ac 100644 --- a/src/core/pushnotifications/pushnotifications.module.ts +++ b/src/core/pushnotifications/pushnotifications.module.ts @@ -87,6 +87,12 @@ export class CorePushNotificationsModule { pushNotificationsProvider.notificationClicked(notification); }); + // Listen for local notification dismissed events. + localNotificationsProvider.registerObserver('clear', CorePushNotificationsProvider.COMPONENT, (notification: any) => { + // Log notification dismissed event. + pushNotificationsProvider.logEvent('moodle_notification_dismiss', notification, true); + }); + // Allow migrating the table from the old app to the new schema. updateManager.registerAppTableMigration({ name: 'mma_pushnotifications_badge', diff --git a/src/providers/local-notifications.ts b/src/providers/local-notifications.ts index 036803306..5417b5ff3 100644 --- a/src/providers/local-notifications.ts +++ b/src/providers/local-notifications.ts @@ -102,6 +102,10 @@ export class CoreLocalNotificationsProvider { }; protected triggerSubscription: Subscription; protected clickSubscription: Subscription; + protected clearSubscription: Subscription; + protected cancelSubscription: Subscription; + protected addSubscription: Subscription; + protected updateSubscription: Subscription; constructor(logger: CoreLoggerProvider, private localNotifications: LocalNotifications, private platform: Platform, private appProvider: CoreAppProvider, private utils: CoreUtilsProvider, private configProvider: CoreConfigProvider, @@ -113,16 +117,31 @@ export class CoreLocalNotificationsProvider { this.appDB.createTablesFromSchema(this.tablesSchema); platform.ready().then(() => { + // Listen to events. this.triggerSubscription = localNotifications.on('trigger').subscribe((notification: ILocalNotification) => { this.trigger(notification); + + this.handleEvent('trigger', notification); }); this.clickSubscription = localNotifications.on('click').subscribe((notification: ILocalNotification) => { - if (notification && notification.data) { - this.logger.debug('Notification clicked: ', notification.data); + this.handleEvent('click', notification); + }); - this.notifyClick(notification.data); - } + this.clearSubscription = localNotifications.on('clear').subscribe((notification: ILocalNotification) => { + this.handleEvent('clear', notification); + }); + + this.cancelSubscription = localNotifications.on('cancel').subscribe((notification: ILocalNotification) => { + this.handleEvent('cancel', notification); + }); + + this.addSubscription = localNotifications.on('add').subscribe((notification: ILocalNotification) => { + this.handleEvent('add', notification); + }); + + this.updateSubscription = localNotifications.on('update').subscribe((notification: ILocalNotification) => { + this.handleEvent('update', notification); }); // Create the default channel for local notifications. @@ -290,6 +309,20 @@ export class CoreLocalNotificationsProvider { }); } + /** + * Handle an event triggered by the local notifications plugin. + * + * @param {string} eventName Name of the event. + * @param {any} notification Notification. + */ + protected handleEvent(eventName: string, notification: any): void { + if (notification && notification.data) { + this.logger.debug('Notification event: ' + eventName + '. Data:', notification.data); + + this.notifyEvent(eventName, notification.data); + } + } + /** * Returns whether local notifications plugin is installed. * @@ -328,12 +361,22 @@ export class CoreLocalNotificationsProvider { * @param {any} data Data received by the notification. */ notifyClick(data: any): void { + this.notifyEvent('click', data); + } + + /** + * Notify a certain event to observers. Only the observers with the same component as the notification will be notified. + * + * @param {string} eventName Name of the event to notify. + * @param {any} data Data received by the notification. + */ + notifyEvent(eventName: string, data: any): void { // Execute the code in the Angular zone, so change detection doesn't stop working. this.zone.run(() => { const component = data.component; if (component) { - if (this.observables[component]) { - this.observables[component].next(data); + if (this.observables[eventName] && this.observables[eventName][component]) { + this.observables[eventName][component].next(data); } } }); @@ -385,18 +428,34 @@ export class CoreLocalNotificationsProvider { * @return {any} Object with an "off" property to stop listening for clicks. */ registerClick(component: string, callback: Function): any { - this.logger.debug(`Register observer '${component}' for notification click.`); + return this.registerObserver('click', component, callback); + } - if (typeof this.observables[component] == 'undefined') { - // No observable for this component, create a new one. - this.observables[component] = new Subject(); + /** + * Register an observer to be notified when a certain event is fired for a notification belonging to a certain component. + * + * @param {string} eventName Name of the event to listen to. + * @param {string} component Component to listen notifications for. + * @param {Function} callback Function to call with the data received by the notification. + * @return {any} Object with an "off" property to stop listening for events. + */ + registerObserver(eventName: string, component: string, callback: Function): any { + this.logger.debug(`Register observer '${component}' for event '${eventName}'.`); + + if (typeof this.observables[eventName] == 'undefined') { + this.observables[eventName] = {}; } - this.observables[component].subscribe(callback); + if (typeof this.observables[eventName][component] == 'undefined') { + // No observable for this component, create a new one. + this.observables[eventName][component] = new Subject(); + } + + this.observables[eventName][component].subscribe(callback); return { off: (): void => { - this.observables[component].unsubscribe(callback); + this.observables[eventName][component].unsubscribe(callback); } }; } From 4a913ce0ab80dff02c94cce2aa94545dac2c9549 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 20 May 2019 12:40:44 +0200 Subject: [PATCH 175/263] MOBILE-2957 config: Add variable to enable analytics --- src/config.json | 3 ++- src/core/pushnotifications/providers/pushnotifications.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/config.json b/src/config.json index cd7c0fd99..57216340b 100644 --- a/src/config.json +++ b/src/config.json @@ -80,5 +80,6 @@ "statusbarbgandroid": "#df7310", "statusbarlighttextandroid": true, "statusbarbgremotetheme": "#000000", - "statusbarlighttextremotetheme": true + "statusbarlighttextremotetheme": true, + "enableanalytics": false } diff --git a/src/core/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts index 28de7b014..3a48abfc7 100644 --- a/src/core/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -303,7 +303,7 @@ export class CorePushNotificationsProvider { logEvent(name: string, data: any, filter?: boolean): Promise { const win = window; // This feature is only present in our fork of the plugin. - if (win.PushNotification && win.PushNotification.logEvent) { + if (CoreConfigConstants.enableanalytics && win.PushNotification && win.PushNotification.logEvent) { return new Promise((resolve, reject): void => { win.PushNotification.logEvent(resolve, (error) => { this.logger.error('Error logging firebase event', name, error); From e25306b0b2fb2a4af672377b9185719fa3df689a Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 16 May 2019 15:04:45 +0200 Subject: [PATCH 176/263] MOBILE-3018 forum: Post a copy to all groups --- scripts/langindex.json | 3 + .../index/addon-mod-forum-index.html | 4 +- src/addon/mod/forum/lang/en.json | 2 + .../pages/new-discussion/new-discussion.html | 6 +- .../pages/new-discussion/new-discussion.ts | 95 +++++++------- src/addon/mod/forum/providers/forum.ts | 67 ++-------- src/addon/mod/forum/providers/helper.ts | 116 ++++++++++++++++++ src/addon/mod/forum/providers/offline.ts | 3 +- src/addon/mod/forum/providers/sync.ts | 69 +++++++---- src/assets/lang/en.json | 3 + src/lang/en.json | 1 + 11 files changed, 235 insertions(+), 134 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index 53faeef0b..76f5cc4a8 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -503,6 +503,7 @@ "addon.mod_forum.erroremptysubject": "forum", "addon.mod_forum.errorgetforum": "local_moodlemobileapp", "addon.mod_forum.errorgetgroups": "local_moodlemobileapp", + "addon.mod_forum.errorposttoallgroups": "local_moodlemobileapp", "addon.mod_forum.favouriteupdated": "forum", "addon.mod_forum.forumnodiscussionsyet": "local_moodlemobileapp", "addon.mod_forum.group": "local_moodlemobileapp", @@ -520,6 +521,7 @@ "addon.mod_forum.pinupdated": "forum", "addon.mod_forum.postisprivatereply": "forum", "addon.mod_forum.posttoforum": "forum", + "addon.mod_forum.posttomygroups": "forum", "addon.mod_forum.privatereply": "forum", "addon.mod_forum.re": "forum", "addon.mod_forum.refreshdiscussions": "local_moodlemobileapp", @@ -1219,6 +1221,7 @@ "core.agelocationverification": "moodle", "core.ago": "message", "core.all": "moodle", + "core.allgroups": "moodle", "core.allparticipants": "moodle", "core.android": "local_moodlemobileapp", "core.answer": "moodle", diff --git a/src/addon/mod/forum/components/index/addon-mod-forum-index.html b/src/addon/mod/forum/components/index/addon-mod-forum-index.html index bc35c9d06..0aecbb757 100644 --- a/src/addon/mod/forum/components/index/addon-mod-forum-index.html +++ b/src/addon/mod/forum/components/index/addon-mod-forum-index.html @@ -31,7 +31,7 @@ {{ availabilityMessage }} - +
@@ -41,7 +41,7 @@
- + diff --git a/src/addon/mod/forum/lang/en.json b/src/addon/mod/forum/lang/en.json index 5b2935e89..8cabc5750 100644 --- a/src/addon/mod/forum/lang/en.json +++ b/src/addon/mod/forum/lang/en.json @@ -24,6 +24,7 @@ "erroremptysubject": "Post subject cannot be empty.", "errorgetforum": "Error getting forum data.", "errorgetgroups": "Error getting group settings.", + "errorposttoallgroups": "Could not create new discussion in all groups.", "favouriteupdated": "Your star option has been updated.", "forumnodiscussionsyet": "There are no discussions yet in this forum.", "group": "Group", @@ -41,6 +42,7 @@ "pinupdated": "The pin option has been updated.", "postisprivatereply": "This post was made privately and is not visible to all users.", "posttoforum": "Post to forum", + "posttomygroups": "Post a copy to all groups", "privatereply": "Reply privately", "re": "Re:", "refreshdiscussions": "Refresh discussions", diff --git a/src/addon/mod/forum/pages/new-discussion/new-discussion.html b/src/addon/mod/forum/pages/new-discussion/new-discussion.html index 236b8bcef..95bb6e5ce 100644 --- a/src/addon/mod/forum/pages/new-discussion/new-discussion.html +++ b/src/addon/mod/forum/pages/new-discussion/new-discussion.html @@ -27,9 +27,13 @@ {{ 'addon.mod_forum.advanced' | translate }} + + {{ 'addon.mod_forum.posttomygroups' | translate }} + + {{ 'addon.mod_forum.group' | translate }} - + {{ group.name }} diff --git a/src/addon/mod/forum/pages/new-discussion/new-discussion.ts b/src/addon/mod/forum/pages/new-discussion/new-discussion.ts index aaad29946..be2fb7383 100644 --- a/src/addon/mod/forum/pages/new-discussion/new-discussion.ts +++ b/src/addon/mod/forum/pages/new-discussion/new-discussion.ts @@ -53,15 +53,18 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { forum: any; showForm = false; groups = []; + groupIds = []; newDiscussion = { subject: '', message: null, // Null means empty or just white space. + postToAllGroups: false, groupId: 0, subscribe: true, pin: false, files: [] }; advanced = false; // Display all form fields. + accessInfo: any = {}; protected courseId: number; protected cmId: number; @@ -146,9 +149,13 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { return promise.then((forumGroups) => { if (forumGroups.length > 0) { this.groups = forumGroups; + this.groupIds = forumGroups.map((group) => group.id).filter((id) => id > 0); // Do not override group id. this.newDiscussion.groupId = this.newDiscussion.groupId || forumGroups[0].id; this.showGroups = true; + if (this.groupIds.length <= 1) { + this.newDiscussion.postToAllGroups = false; + } } else { const message = mode === CoreGroupsProvider.SEPARATEGROUPS ? 'addon.mod_forum.cannotadddiscussionall' : 'addon.mod_forum.cannotadddiscussion'; @@ -159,6 +166,7 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { })); } else { this.showGroups = false; + this.newDiscussion.postToAllGroups = false; // Use the canAddDiscussion WS to check if the user can add attachments and pin discussions. promises.push(this.forumProvider.canAddDiscussionToAll(this.forumId).then((response) => { @@ -174,10 +182,18 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { this.forum = forum; })); + // Get access information. + promises.push(this.forumProvider.getAccessInformation(this.forumId).then((accessInfo) => { + this.accessInfo = accessInfo; + })); + + return Promise.all(promises); + }).then(() => { // If editing a discussion, get offline data. if (this.timeCreated && !refresh) { this.syncId = this.forumSync.getForumSyncId(this.forumId); - promises.push(this.forumSync.waitForSync(this.syncId).then(() => { + + return this.forumSync.waitForSync(this.syncId).then(() => { // Do not block if the scope is already destroyed. if (!this.isDestroyed) { this.syncProvider.blockOperation(AddonModForumProvider.COMPONENT, this.syncId); @@ -186,7 +202,13 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { return this.forumOffline.getNewDiscussion(this.forumId, this.timeCreated).then((discussion) => { this.hasOffline = true; discussion.options = discussion.options || {}; - this.newDiscussion.groupId = discussion.groupid ? discussion.groupid : this.newDiscussion.groupId; + if (discussion.groupid == AddonModForumProvider.ALL_GROUPS) { + this.newDiscussion.groupId = this.groups[0].id; + this.newDiscussion.postToAllGroups = true; + } else { + this.newDiscussion.groupId = discussion.groupid; + this.newDiscussion.postToAllGroups = false; + } this.newDiscussion.subject = discussion.subject; this.newDiscussion.message = discussion.message; this.newDiscussion.subscribe = discussion.options.discussionsubscribe; @@ -203,15 +225,15 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { return Promise.resolve(promise).then(() => { // Show advanced fields by default if any of them has not the default value. - if (!this.newDiscussion.subscribe || this.newDiscussion.pin || this.newDiscussion.files.length) { + if (!this.newDiscussion.subscribe || this.newDiscussion.pin || this.newDiscussion.files.length || + this.groups.length > 0 && this.newDiscussion.groupId != this.groups[0].id || + this.newDiscussion.postToAllGroups) { this.advanced = true; } }); }); - })); + }); } - - return Promise.all(promises); }).then(() => { if (!this.originalData) { // Initialize original data. @@ -232,9 +254,9 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { * Validate which of the groups returned by getActivityAllowedGroups in visible groups should be shown to post to. * * @param {any[]} forumGroups Forum groups. - * @return {Promise} Promise resolved when done. + * @return {Promise} Promise resolved with the list of groups. */ - protected validateVisibleGroups(forumGroups: any[]): Promise { + protected validateVisibleGroups(forumGroups: any[]): Promise { // We first check if the user can post to all the groups. return this.forumProvider.canAddDiscussionToAll(this.forumId).catch(() => { // The call failed, let's assume he can't. @@ -331,7 +353,7 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { if (canAdd) { groups.unshift({ courseid: this.courseId, - id: -1, + id: AddonModForumProvider.ALL_PARTICIPANTS, name: this.translate.instant('core.allparticipants') }); } @@ -362,14 +384,14 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { /** * Convenience function to update or return to discussions depending on device. * - * @param {number} [discussionId] Id of the new discussion. + * @param {number} [discussionIds] Ids of the new discussions. * @param {number} [discTimecreated] The time created of the discussion (if offline). */ - protected returnToDiscussions(discussionId?: number, discTimecreated?: number): void { + protected returnToDiscussions(discussionIds?: number[], discTimecreated?: number): void { const data: any = { forumId: this.forumId, cmId: this.cmId, - discussionId: discussionId, + discussionIds: discussionIds, discTimecreated: discTimecreated }; this.eventsProvider.trigger(AddonModForumProvider.NEW_DISCUSSION_EVENT, data, this.sitesProvider.getCurrentSiteId()); @@ -383,6 +405,7 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { this.newDiscussion.subject = ''; this.newDiscussion.message = null; this.newDiscussion.files = []; + this.newDiscussion.postToAllGroups = false; this.messageEditor.clearText(); this.originalData = this.utils.clone(this.newDiscussion); @@ -414,13 +437,11 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { const subject = this.newDiscussion.subject; let message = this.newDiscussion.message; const pin = this.newDiscussion.pin; - const groupId = this.newDiscussion.groupId; const attachments = this.newDiscussion.files; const discTimecreated = this.timeCreated || Date.now(); const options: any = { discussionsubscribe: !!this.newDiscussion.subscribe }; - let saveOffline = false; if (!subject) { this.domUtils.showErrorModal('addon.mod_forum.erroremptysubject', true); @@ -434,51 +455,29 @@ export class AddonModForumNewDiscussionPage implements OnDestroy { } const modal = this.domUtils.showModalLoading('core.sending', true); - let promise; // Add some HTML to the message if needed. message = this.textUtils.formatHtmlLines(message); - // Upload attachments first if any. - if (attachments.length) { - promise = this.forumHelper.uploadOrStoreNewDiscussionFiles(this.forumId, discTimecreated, attachments, false) - .catch(() => { - // Cannot upload them in online, save them in offline. - saveOffline = true; - - return this.forumHelper.uploadOrStoreNewDiscussionFiles(this.forumId, discTimecreated, attachments, true); - }); - } else { - promise = Promise.resolve(); + if (pin) { + options.discussionpinned = true; } - promise.then((attach) => { - if (attach) { - options.attachmentsid = attach; - } - if (pin) { - options.discussionpinned = true; - } + const groupIds = this.newDiscussion.postToAllGroups ? this.groupIds : [this.newDiscussion.groupId]; - if (saveOffline) { - // Save discussion in offline. - return this.forumOffline.addNewDiscussion(this.forumId, forumName, this.courseId, subject, - message, options, groupId, discTimecreated).then(() => { - // Don't return anything. - }); - } else { - // Try to send it to server. - // Don't allow offline if there are attachments since they were uploaded fine. - return this.forumProvider.addNewDiscussion(this.forumId, forumName, this.courseId, subject, message, options, - groupId, undefined, discTimecreated, !attachments.length); - } - }).then((discussionId) => { - if (discussionId) { + this.forumHelper.addNewDiscussion(this.forumId, forumName, this.courseId, subject, message, attachments, options, groupIds, + discTimecreated).then((discussionIds) => { + if (discussionIds) { // Data sent to server, delete stored files (if any). this.forumHelper.deleteNewDiscussionStoredFiles(this.forumId, discTimecreated); } - this.returnToDiscussions(discussionId, discTimecreated); + if (discussionIds && discussionIds.length < groupIds.length) { + // Some discussions could not be created. + this.domUtils.showErrorModalDefault(null, 'addon.mod_forum.errorposttoallgroups', true); + } + + this.returnToDiscussions(discussionIds, discTimecreated); }).catch((message) => { this.domUtils.showErrorModalDefault(message, 'addon.mod_forum.cannotcreatediscussion', true); }).finally(() => { diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index 0f6683e11..8bdb7bffa 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -46,6 +46,9 @@ export class AddonModForumProvider { static SORTORDER_REPLIES_DESC = 5; static SORTORDER_REPLIES_ASC = 6; + static ALL_PARTICIPANTS = -1; + static ALL_GROUPS = -2; + protected ROOT_CACHE_KEY = 'mmaModForum:'; constructor(private appProvider: CoreAppProvider, @@ -126,62 +129,6 @@ export class AddonModForumProvider { return key; } - /** - * Add a new discussion. - * - * @param {number} forumId Forum ID. - * @param {string} name Forum name. - * @param {number} courseId Course ID the forum belongs to. - * @param {string} subject New discussion's subject. - * @param {string} message New discussion's message. - * @param {any} [options] Options (subscribe, pin, ...). - * @param {string} [groupId] Group this discussion belongs to. - * @param {string} [siteId] Site ID. If not defined, current site. - * @param {number} [timeCreated] The time the discussion was created. Only used when editing discussion. - * @param {boolean} allowOffline True if it can be stored in offline, false otherwise. - * @return {Promise} Promise resolved with discussion ID if sent online, resolved with false if stored offline. - */ - addNewDiscussion(forumId: number, name: string, courseId: number, subject: string, message: string, options?: any, - groupId?: number, siteId?: string, timeCreated?: number, allowOffline?: boolean): Promise { - siteId = siteId || this.sitesProvider.getCurrentSiteId(); - - // Convenience function to store a message to be synchronized later. - const storeOffline = (): Promise => { - return this.forumOffline.addNewDiscussion(forumId, name, courseId, subject, message, options, - groupId, timeCreated, siteId).then(() => { - return false; - }); - }; - - // If we are editing an offline discussion, discard previous first. - let discardPromise; - if (timeCreated) { - discardPromise = this.forumOffline.deleteNewDiscussion(forumId, timeCreated, siteId); - } else { - discardPromise = Promise.resolve(); - } - - return discardPromise.then(() => { - if (!this.appProvider.isOnline() && allowOffline) { - // App is offline, store the action. - return storeOffline(); - } - - return this.addNewDiscussionOnline(forumId, subject, message, options, groupId, siteId).then((id) => { - // Success, return the discussion ID. - return id; - }).catch((error) => { - if (!allowOffline || this.utils.isWebServiceError(error)) { - // The WebService has thrown an error or offline not supported, reject. - return Promise.reject(error); - } - - // Couldn't connect to server, store in offline. - return storeOffline(); - }); - }); - } - /** * Add a new discussion. It will fail if offline or cannot connect. * @@ -268,7 +215,7 @@ export class AddonModForumProvider { * - cancreateattachment (boolean) */ canAddDiscussionToAll(forumId: number): Promise { - return this.canAddDiscussion(forumId, -1); + return this.canAddDiscussion(forumId, AddonModForumProvider.ALL_PARTICIPANTS); } /** @@ -309,6 +256,7 @@ export class AddonModForumProvider { return this.groupsProvider.getActivityAllowedGroups(cmId).then((forumGroups) => { const strAllParts = this.translate.instant('core.allparticipants'); + const strAllGroups = this.translate.instant('core.allgroups'); // Turn groups into an object where each group is identified by id. const groups = {}; @@ -318,8 +266,11 @@ export class AddonModForumProvider { // Format discussions. discussions.forEach((disc) => { - if (disc.groupid === -1) { + if (disc.groupid == AddonModForumProvider.ALL_PARTICIPANTS) { disc.groupname = strAllParts; + } else if (disc.groupid == AddonModForumProvider.ALL_GROUPS) { + // Offline discussions only. + disc.groupname = strAllGroups; } else { const group = groups[disc.groupid]; if (group) { diff --git a/src/addon/mod/forum/providers/helper.ts b/src/addon/mod/forum/providers/helper.ts index 5c568c911..fb46fab35 100644 --- a/src/addon/mod/forum/providers/helper.ts +++ b/src/addon/mod/forum/providers/helper.ts @@ -14,10 +14,12 @@ import { Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; +import { CoreAppProvider } from '@providers/app'; import { CoreFileProvider } from '@providers/file'; import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploader'; import { CoreSitesProvider } from '@providers/sites'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; +import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonModForumProvider } from './forum'; import { AddonModForumOfflineProvider } from './offline'; @@ -33,9 +35,123 @@ export class AddonModForumHelperProvider { private uploaderProvider: CoreFileUploaderProvider, private timeUtils: CoreTimeUtilsProvider, private userProvider: CoreUserProvider, + private appProvider: CoreAppProvider, + private utils: CoreUtilsProvider, private forumProvider: AddonModForumProvider, private forumOffline: AddonModForumOfflineProvider) {} + /** + * Add a new discussion. + * + * @param {number} forumId Forum ID. + * @param {string} name Forum name. + * @param {number} courseId Course ID the forum belongs to. + * @param {string} subject New discussion's subject. + * @param {string} message New discussion's message. + * @param {any[]} [attachments] New discussion's attachments. + * @param {any} [options] Options (subscribe, pin, ...). + * @param {number[]} [groupIds] Groups this discussion belongs to. + * @param {number} [timeCreated] The time the discussion was created. Only used when editing discussion. + * @param {string} [siteId] Site ID. If not defined, current site. + * @return {Promise} Promise resolved with ids of the created discussions or null if stored offline + */ + addNewDiscussion(forumId: number, name: string, courseId: number, subject: string, message: string, attachments?: any[], + options?: any, groupIds?: number[], timeCreated?: number, siteId?: string): Promise { + + siteId = siteId || this.sitesProvider.getCurrentSiteId(); + groupIds = groupIds && groupIds.length > 0 ? groupIds : [0]; + + let saveOffline = false; + const attachmentsIds = []; + let offlineAttachments: any; + + // Convenience function to store a message to be synchronized later. + const storeOffline = (): Promise => { + // Multiple groups, the discussion is being posted to all groups. + const groupId = groupIds.length > 1 ? AddonModForumProvider.ALL_GROUPS : groupIds[0]; + + if (offlineAttachments) { + options.attachmentsid = offlineAttachments; + } + + return this.forumOffline.addNewDiscussion(forumId, name, courseId, subject, message, options, + groupId, timeCreated, siteId).then(() => { + return null; + }); + }; + + // First try to upload attachments, once per group. + let promise; + if (attachments && attachments.length > 0) { + const promises = groupIds.map(() => { + return this.uploadOrStoreNewDiscussionFiles(forumId, timeCreated, attachments, false).then((attach) => { + attachmentsIds.push(attach); + }); + }); + + promise = Promise.all(promises).catch(() => { + // Cannot upload them in online, save them in offline. + saveOffline = true; + + return this.uploadOrStoreNewDiscussionFiles(forumId, timeCreated, attachments, true).then((attach) => { + offlineAttachments = attach; + }); + }); + } else { + promise = Promise.resolve(); + } + + return promise.then(() => { + // If we are editing an offline discussion, discard previous first. + let discardPromise; + if (timeCreated) { + discardPromise = this.forumOffline.deleteNewDiscussion(forumId, timeCreated, siteId); + } else { + discardPromise = Promise.resolve(); + } + + return discardPromise.then(() => { + if (saveOffline || !this.appProvider.isOnline()) { + return storeOffline(); + } + + const errors = []; + const discussionIds = []; + + const promises = groupIds.map((groupId, index) => { + const grouOptions = this.utils.clone(options); + if (attachmentsIds[index]) { + grouOptions.attachmentsid = attachmentsIds[index]; + } + + return this.forumProvider.addNewDiscussionOnline(forumId, subject, message, grouOptions, groupId, siteId) + .then((discussionId) => { + discussionIds.push(discussionId); + }).catch((error) => { + errors.push(error); + }); + }); + + return Promise.all(promises).then(() => { + if (errors.length == groupIds.length) { + // All requests have failed. + for (let i = 0; i < errors.length; i++) { + if (this.utils.isWebServiceError(errors[i]) || attachments.length > 0) { + // The WebService has thrown an error or offline not supported, reject. + return Promise.reject(errors[i]); + } + } + + // Couldn't connect to server, store offline. + return storeOffline(); + } + + return discussionIds; + }); + }); + }); + } + /** * Convert offline reply to online format in order to be compatible with them. * diff --git a/src/addon/mod/forum/providers/offline.ts b/src/addon/mod/forum/providers/offline.ts index a5223f786..af6a08b11 100644 --- a/src/addon/mod/forum/providers/offline.ts +++ b/src/addon/mod/forum/providers/offline.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreFileProvider } from '@providers/file'; import { CoreSitesProvider, CoreSiteSchema } from '@providers/sites'; import { CoreTextUtilsProvider } from '@providers/utils/text'; +import { AddonModForumProvider } from './forum'; /** * Service to handle offline forum. @@ -248,7 +249,7 @@ export class AddonModForumOfflineProvider { subject: subject, message: message, options: JSON.stringify(options || {}), - groupid: groupId || -1, + groupid: groupId || AddonModForumProvider.ALL_PARTICIPANTS, userid: userId || site.getUserId(), timecreated: timeCreated || new Date().getTime() }; diff --git a/src/addon/mod/forum/providers/sync.ts b/src/addon/mod/forum/providers/sync.ts index a829d2662..5ad34cbb6 100644 --- a/src/addon/mod/forum/providers/sync.ts +++ b/src/addon/mod/forum/providers/sync.ts @@ -21,6 +21,7 @@ import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploa import { CoreAppProvider } from '@providers/app'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreEventsProvider } from '@providers/events'; +import { CoreGroupsProvider } from '@providers/groups'; import { CoreSitesProvider } from '@providers/sites'; import { CoreSyncProvider } from '@providers/sync'; import { CoreTextUtilsProvider } from '@providers/utils/text'; @@ -46,6 +47,7 @@ export class AddonModForumSyncProvider extends CoreSyncBaseProvider { appProvider: CoreAppProvider, courseProvider: CoreCourseProvider, private eventsProvider: CoreEventsProvider, + private groupsProvider: CoreGroupsProvider, loggerProvider: CoreLoggerProvider, sitesProvider: CoreSitesProvider, syncProvider: CoreSyncProvider, @@ -222,38 +224,57 @@ export class AddonModForumSyncProvider extends CoreSyncBaseProvider { const promises = []; discussions.forEach((data) => { - data.options = data.options || {}; + let groupsPromise; + if (data.groupid == AddonModForumProvider.ALL_GROUPS) { + // Fetch all group ids. + groupsPromise = this.forumProvider.getForumById(data.courseid, data.forumid, siteId).then((forum) => { + return this.groupsProvider.getActivityAllowedGroups(forum.cmid).then((groups) => { + return groups.map((group) => group.id); + }); + }); + } else { + groupsPromise = Promise.resolve([data.groupid]); + } - // First of all upload the attachments (if any). - const promise = this.uploadAttachments(forumId, data, true, siteId, userId).then((itemId) => { - // Now try to add the discussion. - data.options.attachmentsid = itemId; + promises.push(groupsPromise.then((groupIds) => { + const errors = []; - return this.forumProvider.addNewDiscussionOnline(forumId, data.subject, data.message, - data.options, data.groupid, siteId); - }); + return Promise.all(groupIds.map((groupId) => { + // First of all upload the attachments (if any). + return this.uploadAttachments(forumId, data, true, siteId, userId).then((itemId) => { + // Now try to add the discussion. + const options = this.utils.clone(data.options || {}); + options.attachmentsid = itemId; - promises.push(promise.then(() => { - result.updated = true; + return this.forumProvider.addNewDiscussionOnline(forumId, data.subject, data.message, options, + groupId, siteId); + }).catch((error) => { + errors.push(error); + }); + })).then(() => { + if (errors.length == groupIds.length) { + // All requests have failed, reject if errors were not returned by WS. + for (let i = 0; i < errors.length; i++) { + if (!this.utils.isWebServiceError(errors[i])) { + return Promise.reject(errors[i]); + } + } + } - return this.deleteNewDiscussion(forumId, data.timecreated, siteId, userId); - }).catch((error) => { - if (this.utils.isWebServiceError(error)) { - // The WebService has thrown an error, this means that responses cannot be submitted. Delete them. + // All requests succeeded, some failed or all failed with a WS error. result.updated = true; return this.deleteNewDiscussion(forumId, data.timecreated, siteId, userId).then(() => { - // Responses deleted, add a warning. - result.warnings.push(this.translate.instant('core.warningofflinedatadeleted', { - component: this.componentTranslate, - name: data.name, - error: this.textUtils.getErrorMessageFromError(error) - })); + if (errors.length == groupIds.length) { + // All requests failed with WS error. + result.warnings.push(this.translate.instant('core.warningofflinedatadeleted', { + component: this.componentTranslate, + name: data.name, + error: this.textUtils.getErrorMessageFromError(errors[0]) + })); + } }); - } else { - // Couldn't connect to server, reject. - return Promise.reject(error); - } + }); })); }); diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 9a3acd3d6..311fb6fcc 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -503,6 +503,7 @@ "addon.mod_forum.erroremptysubject": "Post subject cannot be empty.", "addon.mod_forum.errorgetforum": "Error getting forum data.", "addon.mod_forum.errorgetgroups": "Error getting group settings.", + "addon.mod_forum.errorposttoallgroups": "Could not create new discussion in all groups.", "addon.mod_forum.favouriteupdated": "Your star option has been updated.", "addon.mod_forum.forumnodiscussionsyet": "There are no discussions yet in this forum.", "addon.mod_forum.group": "Group", @@ -520,6 +521,7 @@ "addon.mod_forum.pinupdated": "The pin option has been updated.", "addon.mod_forum.postisprivatereply": "This post was made privately and is not visible to all users.", "addon.mod_forum.posttoforum": "Post to forum", + "addon.mod_forum.posttomygroups": "Post a copy to all groups", "addon.mod_forum.privatereply": "Reply privately", "addon.mod_forum.re": "Re:", "addon.mod_forum.refreshdiscussions": "Refresh discussions", @@ -1219,6 +1221,7 @@ "core.agelocationverification": "Age and location verification", "core.ago": "{{$a}} ago", "core.all": "All", + "core.allgroups": "All groups", "core.allparticipants": "All participants", "core.android": "Android", "core.answer": "Answer", diff --git a/src/lang/en.json b/src/lang/en.json index 5e594fcc6..bf2f305e5 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -4,6 +4,7 @@ "agelocationverification": "Age and location verification", "ago": "{{$a}} ago", "all": "All", + "allgroups": "All groups", "allparticipants": "All participants", "android": "Android", "answer": "Answer", From 699813c6407e723ef842cc44c327156f2e5f16c6 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 21 May 2019 10:21:40 +0200 Subject: [PATCH 177/263] MOBILE-3039 core: Fix failed downloads loading forever --- src/providers/filepool.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/filepool.ts b/src/providers/filepool.ts index 2be089ba3..09d873f94 100644 --- a/src/providers/filepool.ts +++ b/src/providers/filepool.ts @@ -2573,7 +2573,7 @@ export class CoreFilepoolProvider { // Some Android devices restrict the amount of usable storage using quotas. // If this quota would be exceeded by the download, it throws an exception. // We catch this exception here, and report a meaningful error message to the user. - if (errorObject instanceof FileTransferError && errorObject.exception.includes('EDQUOT')) { + if (errorObject instanceof FileTransferError && errorObject.exception && errorObject.exception.includes('EDQUOT')) { errorMessage = 'core.course.insufficientavailablequota'; } From 0f3c6099b33bec9e0c89226085dffa172b701aa2 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 21 May 2019 10:22:13 +0200 Subject: [PATCH 178/263] MOBILE-3039 core: Fix allPromises error detection --- src/providers/utils/utils.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/providers/utils/utils.ts b/src/providers/utils/utils.ts index 1569b505d..d3d09bf47 100644 --- a/src/providers/utils/utils.ts +++ b/src/providers/utils/utils.ts @@ -84,17 +84,19 @@ export class CoreUtilsProvider { return new Promise((resolve, reject): void => { const total = promises.length; let count = 0, + hasFailed = false, error; promises.forEach((promise) => { promise.catch((err) => { + hasFailed = true; error = err; }).finally(() => { count++; if (count === total) { // All promises have finished, reject/resolve. - if (error) { + if (hasFailed) { reject(error); } else { resolve(); From 51edb78d40029e0a51638f63fb5ee5ce4325eff4 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 21 May 2019 10:55:35 +0200 Subject: [PATCH 179/263] MOBILE-3039 core: Clear course status if site data cleared --- src/components/icon/icon.ts | 16 +++++++++++----- src/core/course/pages/section/section.ts | 2 +- src/core/course/providers/course.ts | 3 ++- .../course-progress/course-progress.ts | 2 +- .../pages/course-preview/course-preview.ts | 2 +- .../settings/pages/space-usage/space-usage.ts | 5 ++++- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/components/icon/icon.ts b/src/components/icon/icon.ts index bfedf4001..82e53d165 100644 --- a/src/components/icon/icon.ts +++ b/src/components/icon/icon.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Component, Input, OnInit, OnDestroy, ElementRef } from '@angular/core'; +import { Component, Input, OnChanges, OnDestroy, ElementRef, SimpleChange } from '@angular/core'; import { Config } from 'ionic-angular'; /** @@ -25,7 +25,7 @@ import { Config } from 'ionic-angular'; selector: 'core-icon', templateUrl: 'core-icon.html', }) -export class CoreIconComponent implements OnInit, OnDestroy { +export class CoreIconComponent implements OnChanges, OnDestroy { // Common params. @Input() name: string; @Input('color') color?: string; @@ -49,9 +49,15 @@ export class CoreIconComponent implements OnInit, OnDestroy { } /** - * Component being initialized. + * Detect changes on input properties. */ - ngOnInit(): void { + ngOnChanges(changes: {[name: string]: SimpleChange}): void { + if (!changes.name || !this.name) { + return; + } + + const oldElement = this.newElement ? this.newElement : this.element; + // Use a new created element to avoid ion-icon working. // This is necessary to make the FontAwesome stuff work. // It is also required to stop Ionic overriding the aria-label attribute. @@ -99,7 +105,7 @@ export class CoreIconComponent implements OnInit, OnDestroy { this.newElement.classList.add('icon-slash'); } - this.element.parentElement.replaceChild(this.newElement, this.element); + oldElement.parentElement.replaceChild(this.newElement, oldElement); } /** diff --git a/src/core/course/pages/section/section.ts b/src/core/course/pages/section/section.ts index e8b3d75bb..468cbf8b3 100644 --- a/src/core/course/pages/section/section.ts +++ b/src/core/course/pages/section/section.ts @@ -114,7 +114,7 @@ export class CoreCourseSectionPage implements OnDestroy { if (this.downloadCourseEnabled) { // Listen for changes in course status. this.courseStatusObserver = eventsProvider.on(CoreEventsProvider.COURSE_STATUS_CHANGED, (data) => { - if (data.courseId == this.course.id) { + if (data.courseId == this.course.id || data.courseId == CoreCourseProvider.ALL_COURSES_CLEARED) { this.updateCourseStatus(data.status); } }, sitesProvider.getCurrentSiteId()); diff --git a/src/core/course/providers/course.ts b/src/core/course/providers/course.ts index e5207faca..af6daecd4 100644 --- a/src/core/course/providers/course.ts +++ b/src/core/course/providers/course.ts @@ -38,6 +38,7 @@ export class CoreCourseProvider { static STEALTH_MODULES_SECTION_ID = -1; static ACCESS_GUEST = 'courses_access_guest'; static ACCESS_DEFAULT = 'courses_access_default'; + static ALL_COURSES_CLEARED = -1; static COMPLETION_TRACKING_NONE = 0; static COMPLETION_TRACKING_MANUAL = 1; @@ -158,7 +159,7 @@ export class CoreCourseProvider { this.logger.debug('Clear all course status for site ' + site.id); return site.getDb().deleteRecords(this.COURSE_STATUS_TABLE).then(() => { - this.triggerCourseStatusChanged(-1, CoreConstants.NOT_DOWNLOADED, site.id); + this.triggerCourseStatusChanged(CoreCourseProvider.ALL_COURSES_CLEARED, CoreConstants.NOT_DOWNLOADED, site.id); }); }); } diff --git a/src/core/courses/components/course-progress/course-progress.ts b/src/core/courses/components/course-progress/course-progress.ts index f91778759..8c0a9811b 100644 --- a/src/core/courses/components/course-progress/course-progress.ts +++ b/src/core/courses/components/course-progress/course-progress.ts @@ -97,7 +97,7 @@ export class CoreCoursesCourseProgressComponent implements OnInit, OnDestroy { // Listen for status change in course. this.courseStatusObserver = this.eventsProvider.on(CoreEventsProvider.COURSE_STATUS_CHANGED, (data) => { - if (data.courseId == this.course.id) { + if (data.courseId == this.course.id || data.courseId == CoreCourseProvider.ALL_COURSES_CLEARED) { this.updateCourseStatus(data.status); } }, this.sitesProvider.getCurrentSiteId()); diff --git a/src/core/courses/pages/course-preview/course-preview.ts b/src/core/courses/pages/course-preview/course-preview.ts index 53fc896dd..b230fee56 100644 --- a/src/core/courses/pages/course-preview/course-preview.ts +++ b/src/core/courses/pages/course-preview/course-preview.ts @@ -81,7 +81,7 @@ export class CoreCoursesCoursePreviewPage implements OnDestroy { if (this.downloadCourseEnabled) { // Listen for status change in course. this.courseStatusObserver = this.eventsProvider.on(CoreEventsProvider.COURSE_STATUS_CHANGED, (data) => { - if (data.courseId == this.course.id) { + if (data.courseId == this.course.id || data.courseId == CoreCourseProvider.ALL_COURSES_CLEARED) { this.updateCourseStatus(data.status); } }, this.sitesProvider.getCurrentSiteId()); diff --git a/src/core/settings/pages/space-usage/space-usage.ts b/src/core/settings/pages/space-usage/space-usage.ts index 457ee82b2..afd45fcd2 100644 --- a/src/core/settings/pages/space-usage/space-usage.ts +++ b/src/core/settings/pages/space-usage/space-usage.ts @@ -20,6 +20,7 @@ import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreSitesProvider } from '@providers/sites'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; +import { CoreCourseProvider } from '@core/course/providers/course'; /** * Page that displays the space usage settings. @@ -39,7 +40,8 @@ export class CoreSettingsSpaceUsagePage { constructor(private filePoolProvider: CoreFilepoolProvider, private sitesProvider: CoreSitesProvider, private textUtils: CoreTextUtilsProvider, - private translate: TranslateService, private domUtils: CoreDomUtilsProvider, appProvider: CoreAppProvider) { + private translate: TranslateService, private domUtils: CoreDomUtilsProvider, appProvider: CoreAppProvider, + private courseProvider: CoreCourseProvider) { this.currentSiteId = this.sitesProvider.getCurrentSiteId(); } @@ -178,6 +180,7 @@ export class CoreSettingsSpaceUsagePage { this.filePoolProvider.clearAllPackagesStatus(site.id); this.filePoolProvider.clearFilepool(site.id); this.updateSiteUsage(siteData, 0); + this.courseProvider.clearAllCoursesStatus(site.id); }).catch((error) => { if (error && error.code === FileError.NOT_FOUND_ERR) { // Not found, set size 0. From 1c033bf023da538eb30eca0d3fc494dd384d4c92 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 21 May 2019 12:34:23 +0200 Subject: [PATCH 180/263] MOBILE-3039 local-notif: Fix event listening In the plugin documentation it says there is an event named 'add', but in Ionic Native is called 'schedule' --- src/providers/local-notifications.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/providers/local-notifications.ts b/src/providers/local-notifications.ts index 5417b5ff3..308ffb4c7 100644 --- a/src/providers/local-notifications.ts +++ b/src/providers/local-notifications.ts @@ -136,8 +136,8 @@ export class CoreLocalNotificationsProvider { this.handleEvent('cancel', notification); }); - this.addSubscription = localNotifications.on('add').subscribe((notification: ILocalNotification) => { - this.handleEvent('add', notification); + this.addSubscription = localNotifications.on('schedule').subscribe((notification: ILocalNotification) => { + this.handleEvent('schedule', notification); }); this.updateSubscription = localNotifications.on('update').subscribe((notification: ILocalNotification) => { From aabe2bf729fce422606a5beebf548393e3ff8085 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 21 May 2019 11:58:16 +0200 Subject: [PATCH 181/263] MOBILE-3039 config: Change repo URL of cordova-plugin-local-notification --- config.xml | 2 +- package-lock.json | 89 ++++++++++++++++++++++++++++++++++------------- package.json | 2 +- 3 files changed, 67 insertions(+), 26 deletions(-) diff --git a/config.xml b/config.xml index ad5096d54..1392e093e 100644 --- a/config.xml +++ b/config.xml @@ -129,7 +129,7 @@ - + diff --git a/package-lock.json b/package-lock.json index 501386db5..dff2e0e2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -519,12 +519,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -539,17 +541,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -666,7 +671,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -678,6 +684,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -692,6 +699,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -699,12 +707,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -723,6 +733,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -803,7 +814,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -815,6 +827,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -936,6 +949,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -1387,6 +1401,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -3181,8 +3196,8 @@ "integrity": "sha512-6ucQ6FdlLdBm8kJfFnzozmBTjru/0xekHP/dAhjoCZggkGRlgs8TsUJFkxa/bV+qi7Dlo50JjmpE4UMWAO+aOQ==" }, "cordova-plugin-local-notification": { - "version": "git+https://github.com/moodlemobile/cordova-plugin-local-notifications.git#5b2f3073a1c1fb39cad3566be792445c343db2c6", - "from": "git+https://github.com/moodlemobile/cordova-plugin-local-notifications.git#moodle" + "version": "git+https://github.com/moodlemobile/cordova-plugin-local-notification.git#5b2f3073a1c1fb39cad3566be792445c343db2c6", + "from": "git+https://github.com/moodlemobile/cordova-plugin-local-notification.git#moodle" }, "cordova-plugin-media-capture": { "version": "3.0.2", @@ -4091,7 +4106,8 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esrecurse": { "version": "4.2.1", @@ -4813,7 +4829,8 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -4831,11 +4848,13 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4848,15 +4867,18 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -4959,7 +4981,8 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -4969,6 +4992,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4981,17 +5005,20 @@ "minimatch": { "version": "3.0.4", "bundled": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5008,6 +5035,7 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5080,7 +5108,8 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5090,6 +5119,7 @@ "once": { "version": "1.4.0", "bundled": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5165,7 +5195,8 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true + "bundled": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -5195,6 +5226,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5212,6 +5244,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5250,11 +5283,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "yallist": { "version": "3.0.2", - "bundled": true + "bundled": true, + "optional": true } } }, @@ -6692,6 +6727,7 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -9977,7 +10013,8 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "sshpk": { "version": "1.14.2", @@ -11238,12 +11275,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11263,7 +11302,8 @@ "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", @@ -11411,6 +11451,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } diff --git a/package.json b/package.json index 6e62a638e..9ac42bcc7 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "cordova-plugin-globalization": "^1.11.0", "cordova-plugin-inappbrowser": "^3.0.0", "cordova-plugin-ionic-keyboard": "^2.1.3", - "cordova-plugin-local-notification": "git+https://github.com/moodlemobile/cordova-plugin-local-notifications.git#moodle", + "cordova-plugin-local-notification": "git+https://github.com/moodlemobile/cordova-plugin-local-notification.git#moodle", "cordova-plugin-media-capture": "^3.0.2", "cordova-plugin-network-information": "^2.0.1", "cordova-plugin-screen-orientation": "^3.0.1", From 1647cad957e2942302c852f0dda1e5f512c5e869 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 21 May 2019 12:54:31 +0200 Subject: [PATCH 182/263] MOBILE-3039 message: Fix confirm delete self conv messages --- src/addon/messages/pages/discussion/discussion.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/addon/messages/pages/discussion/discussion.ts b/src/addon/messages/pages/discussion/discussion.ts index 96548bee7..853494ce1 100644 --- a/src/addon/messages/pages/discussion/discussion.ts +++ b/src/addon/messages/pages/discussion/discussion.ts @@ -811,7 +811,8 @@ export class AddonMessagesDiscussionPage implements OnDestroy { */ deleteMessage(message: any, index: number): void { const canDeleteAll = this.conversation && this.conversation.candeletemessagesforallusers, - langKey = message.pending || canDeleteAll ? 'core.areyousure' : 'addon.messages.deletemessageconfirmation', + langKey = message.pending || canDeleteAll || this.isSelf ? 'core.areyousure' : + 'addon.messages.deletemessageconfirmation', options: any = {}; if (canDeleteAll && !message.pending) { From a767b3f450a9e80ff2d3e5a09aa210241aaf0c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 21 May 2019 13:55:43 +0200 Subject: [PATCH 183/263] MOBILE-3038 competency: Adapt information to new fields show on web --- scripts/langindex.json | 5 +- .../course/addon-competency-course.html | 68 ++++++++++++------- src/addon/competency/lang/en.json | 3 + .../pages/competencies/competencies.html | 2 +- .../pages/competency/competency.html | 20 +++--- src/addon/competency/pages/plan/plan.html | 7 +- .../competency/pages/planlist/planlist.html | 2 +- src/assets/lang/en.json | 3 + 8 files changed, 74 insertions(+), 36 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index 43ba30b47..f8ef1bf84 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -111,9 +111,11 @@ "addon.competency.myplans": "tool_lp", "addon.competency.noactivities": "tool_lp", "addon.competency.nocompetencies": "local_moodlemobileapp", + "addon.competency.nocompetenciesincourse": "tool_lp", "addon.competency.nocrossreferencedcompetencies": "tool_lp", "addon.competency.noevidence": "tool_lp", "addon.competency.noplanswerecreated": "tool_lp", + "addon.competency.nouserplanswithcompetency": "competency", "addon.competency.path": "tool_lp", "addon.competency.planstatusactive": "competency", "addon.competency.planstatuscomplete": "competency", @@ -126,6 +128,7 @@ "addon.competency.reviewstatus": "tool_lp", "addon.competency.status": "tool_lp", "addon.competency.template": "tool_lp", + "addon.competency.uponcoursecompletion": "tool_lp", "addon.competency.usercompetencystatus_idle": "competency", "addon.competency.usercompetencystatus_inreview": "competency", "addon.competency.usercompetencystatus_waitingforreview": "competency", @@ -1692,6 +1695,7 @@ "core.settings.enablerichtexteditor": "local_moodlemobileapp", "core.settings.enablerichtexteditordescription": "local_moodlemobileapp", "core.settings.enablesyncwifi": "local_moodlemobileapp", + "core.settings.entriesincache": "local_moodlemobileapp", "core.settings.errordeletesitefiles": "local_moodlemobileapp", "core.settings.errorsyncsite": "local_moodlemobileapp", "core.settings.estimatedfreespace": "local_moodlemobileapp", @@ -1710,7 +1714,6 @@ "core.settings.privacypolicy": "local_moodlemobileapp", "core.settings.pushid": "local_moodlemobileapp", "core.settings.reportinbackground": "local_moodlemobileapp", - "core.settings.entriesincache": "local_moodlemobileapp", "core.settings.settings": "moodle", "core.settings.showdownloadoptions": "local_moodlemobileapp", "core.settings.sites": "moodle", diff --git a/src/addon/competency/components/course/addon-competency-course.html b/src/addon/competency/components/course/addon-competency-course.html index c8636ff41..041646947 100644 --- a/src/addon/competency/components/course/addon-competency-course.html +++ b/src/addon/competency/components/course/addon-competency-course.html @@ -4,18 +4,19 @@ - - {{ 'addon.competency.coursecompetencyratingsarepushedtouserplans' | translate }} - - - {{ 'addon.competency.coursecompetencyratingsarenotpushedtouserplans' | translate }} - - - {{ 'addon.competency.progress' | translate }}: - {{ 'addon.competency.xcompetenciesproficientoutofyincourse' | translate:{$a: {x: competencies.statistics.proficientcompetencycount, y: competencies.statistics.competencycount} } }} ({{ competencies.statistics.proficientcompetencypercentageformatted }}%) + + + {{ 'addon.competency.coursecompetencyratingsarepushedtouserplans' | translate }} + + + {{ 'addon.competency.coursecompetencyratingsarenotpushedtouserplans' | translate }} + + + + {{ 'addon.competency.xcompetenciesproficientoutofyincourse' | translate:{$a: {x: competencies.statistics.proficientcompetencycount, y: competencies.statistics.competencycount} } }} - + {{ 'addon.competency.competenciesmostoftennotproficientincourse' | translate }}:

@@ -25,42 +26,63 @@ -

{{ 'addon.competency.competencies' | translate }}

+

{{ 'addon.competency.coursecompetencies' | translate }}

- +
- - {{competency.competency.shortname}} {{competency.competency.idnumber}} + +

{{competency.competency.shortname}} {{competency.competency.idnumber}}

{{ competency.usercompetencycourse.gradename }} -
+ -
+

-

+

{{ 'addon.competency.path' | translate }} - {{ competency.comppath.framework.name }} + {{ competency.comppath.framework.name }} + {{ competency.comppath.framework.name }} +  /  -  / {{ ancestor.name }} + {{ ancestor.name }} + {{ ancestor.name }} +  / 
+
+ {{ 'addon.competency.uponcoursecompletion' | translate }} + + + + + +
- {{ 'addon.competency.activities' | translate }}: - + {{ 'addon.competency.activities' | translate }} +

{{ 'addon.competency.noactivities' | translate }} - - +

+
+
+ {{ 'addon.competency.userplans' | translate }} +

+ {{ 'addon.competency.nouserplanswithcompetency' | translate }} +

+ + + +
diff --git a/src/addon/competency/lang/en.json b/src/addon/competency/lang/en.json index a36bacbd7..e09256cb0 100644 --- a/src/addon/competency/lang/en.json +++ b/src/addon/competency/lang/en.json @@ -23,9 +23,11 @@ "myplans": "My learning plans", "noactivities": "No activities", "nocompetencies": "No competencies", + "nocompetenciesincourse": "No competencies have been linked to this course.", "nocrossreferencedcompetencies": "No other competencies have been cross-referenced to this competency.", "noevidence": "No evidence", "noplanswerecreated": "No learning plans were created.", + "nouserplanswithcompetency": "No learning plans contain this competency.", "path": "Path:", "planstatusactive": "Active", "planstatuscomplete": "Complete", @@ -38,6 +40,7 @@ "reviewstatus": "Review status", "status": "Status", "template": "Learning plan template", + "uponcoursecompletion": "Upon course completion:", "usercompetencystatus_idle": "Idle", "usercompetencystatus_inreview": "In review", "usercompetencystatus_waitingforreview": "Waiting for review", diff --git a/src/addon/competency/pages/competencies/competencies.html b/src/addon/competency/pages/competencies/competencies.html index 6319eafd3..b89d3a0e0 100644 --- a/src/addon/competency/pages/competencies/competencies.html +++ b/src/addon/competency/pages/competencies/competencies.html @@ -11,7 +11,7 @@ - {{ competency.competency.shortname }} {{competency.competency.idnumber}} +

{{ competency.competency.shortname }} {{competency.competency.idnumber}}

{{ competency.usercompetency.gradename }} {{ competency.usercompetencycourse.gradename }}
diff --git a/src/addon/competency/pages/competency/competency.html b/src/addon/competency/pages/competency/competency.html index 34bf134cc..dc048e446 100644 --- a/src/addon/competency/pages/competency/competency.html +++ b/src/addon/competency/pages/competency/competency.html @@ -21,9 +21,13 @@
{{ 'addon.competency.path' | translate }} - {{ competency.competency.comppath.framework.name }} + {{ competency.competency.comppath.framework.name }} + {{ competency.competency.comppath.framework.name }} +  /  -  / {{ ancestor.name }} + {{ ancestor.name }} + {{ ancestor.name }} +  /  @@ -38,21 +42,21 @@
- {{ 'addon.competency.activities' | translate }}: - + {{ 'addon.competency.activities' | translate }} +

{{ 'addon.competency.noactivities' | translate }} - +

- {{ 'addon.competency.reviewstatus' | translate }}: + {{ 'addon.competency.reviewstatus' | translate }} {{ competency.usercompetency.statusname }} - {{ 'addon.competency.proficient' | translate }}: + {{ 'addon.competency.proficient' | translate }} {{ 'core.yes' | translate }} @@ -61,7 +65,7 @@ - {{ 'addon.competency.rating' | translate }}: + {{ 'addon.competency.rating' | translate }} {{ competency.usercompetency.gradename }} diff --git a/src/addon/competency/pages/plan/plan.html b/src/addon/competency/pages/plan/plan.html index f84bc276e..f8c5a91da 100644 --- a/src/addon/competency/pages/plan/plan.html +++ b/src/addon/competency/pages/plan/plan.html @@ -16,6 +16,9 @@ + + + {{ 'addon.competency.status' | translate }}: {{ plan.plan.statusname }} @@ -36,13 +39,13 @@ - {{ 'addon.competency.learningplancompetencies' | translate }} +

{{ 'addon.competency.learningplancompetencies' | translate }}

{{ 'addon.competency.nocompetencies' | translate }} - {{competency.competency.shortname}} {{competency.competency.idnumber}} +

{{competency.competency.shortname}} {{competency.competency.idnumber}}

{{ competency.usercompetency.gradename }}
diff --git a/src/addon/competency/pages/planlist/planlist.html b/src/addon/competency/pages/planlist/planlist.html index 9088d2cf6..485ce2a45 100644 --- a/src/addon/competency/pages/planlist/planlist.html +++ b/src/addon/competency/pages/planlist/planlist.html @@ -15,7 +15,7 @@

{{ plan.name }}

{{ 'addon.competency.duedate' | translate }}: {{ plan.duedate * 1000 | coreFormatDate :'strftimedatetimeshort' }}

- {{ plan.statusname }} + {{ plan.statusname }}
diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index 70f0b0601..a8b19c023 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -111,9 +111,11 @@ "addon.competency.myplans": "My learning plans", "addon.competency.noactivities": "No activities", "addon.competency.nocompetencies": "No competencies", + "addon.competency.nocompetenciesincourse": "No competencies have been linked to this course.", "addon.competency.nocrossreferencedcompetencies": "No other competencies have been cross-referenced to this competency.", "addon.competency.noevidence": "No evidence", "addon.competency.noplanswerecreated": "No learning plans were created.", + "addon.competency.nouserplanswithcompetency": "No learning plans contain this competency.", "addon.competency.path": "Path:", "addon.competency.planstatusactive": "Active", "addon.competency.planstatuscomplete": "Complete", @@ -126,6 +128,7 @@ "addon.competency.reviewstatus": "Review status", "addon.competency.status": "Status", "addon.competency.template": "Learning plan template", + "addon.competency.uponcoursecompletion": "Upon course completion:", "addon.competency.usercompetencystatus_idle": "Idle", "addon.competency.usercompetencystatus_inreview": "In review", "addon.competency.usercompetencystatus_waitingforreview": "Waiting for review", From c76e7f3fcd32a62f06f4fc2e27d2f9610f55d382 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 21 May 2019 15:41:05 +0200 Subject: [PATCH 184/263] MOBILE-3039 message: Fix menu items shown after delete conversation --- src/addon/messages/pages/discussion/discussion.html | 4 ++-- src/addon/messages/pages/discussion/discussion.ts | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/addon/messages/pages/discussion/discussion.html b/src/addon/messages/pages/discussion/discussion.html index a3b2cee6f..8363436b7 100644 --- a/src/addon/messages/pages/discussion/discussion.html +++ b/src/addon/messages/pages/discussion/discussion.html @@ -17,8 +17,8 @@ - - + + diff --git a/src/addon/messages/pages/discussion/discussion.ts b/src/addon/messages/pages/discussion/discussion.ts index 853494ce1..1b0036998 100644 --- a/src/addon/messages/pages/discussion/discussion.ts +++ b/src/addon/messages/pages/discussion/discussion.ts @@ -1253,8 +1253,6 @@ export class AddonMessagesDiscussionPage implements OnDestroy { action: 'delete' }, this.siteId); - this.conversationId = undefined; - this.conversation = undefined; this.messages = []; }).finally(() => { this.deleteIcon = 'trash'; From 455b78d98f3cff1fbe50d4f6cbd5725f81197b7b Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 22 May 2019 09:07:04 +0200 Subject: [PATCH 185/263] MOBILE-3039 core: Wait a bit before displaying loading modal --- src/core/course/providers/default-format.ts | 5 ++++- src/providers/utils/dom.ts | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/core/course/providers/default-format.ts b/src/core/course/providers/default-format.ts index b445158a9..e03341376 100644 --- a/src/core/course/providers/default-format.ts +++ b/src/core/course/providers/default-format.ts @@ -167,7 +167,10 @@ export class CoreCourseFormatDefaultHandler implements CoreCourseFormatHandler { Object.assign(params, { course: course }); if (navCtrl) { - return navCtrl.push('CoreCourseSectionPage', params); + // Don't return the .push promise, we don't want to display a loading modal during the page transition. + navCtrl.push('CoreCourseSectionPage', params); + + return Promise.resolve(); } else { // Open the course in the "phantom" tab. this.loginHelper = this.loginHelper || this.injector.get(CoreLoginHelperProvider); diff --git a/src/providers/utils/dom.ts b/src/providers/utils/dom.ts index 1af9102c2..4f4fdab17 100644 --- a/src/providers/utils/dom.ts +++ b/src/providers/utils/dom.ts @@ -1250,11 +1250,14 @@ export class CoreDomUtilsProvider { content: text }), dismiss = loader.dismiss.bind(loader); - let isDismissed = false; + let isPresented = false, + isDismissed = false; // Override dismiss to prevent dismissing a modal twice (it can throw an error and cause problems). loader.dismiss = (data, role, navOptions): Promise => { - if (isDismissed) { + if (!isPresented || isDismissed) { + isDismissed = true; + return Promise.resolve(); } @@ -1263,7 +1266,13 @@ export class CoreDomUtilsProvider { return dismiss(data, role, navOptions); }; - loader.present(); + // Wait a bit before presenting the modal, to prevent it being displayed if dissmiss is called fast. + setTimeout(() => { + if (!isDismissed) { + isPresented = true; + loader.present(); + } + }, 40); return loader; } From 27a0a8fcdf5d93b8eb8547ac69f4d16496e43a6c Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Wed, 22 May 2019 12:31:15 +0200 Subject: [PATCH 186/263] MOBILE-2898 courses: Display done icon when course download finishes --- src/core/course/providers/helper.ts | 5 ++++- .../course-progress/core-courses-course-progress.html | 6 +++++- .../courses/components/course-progress/course-progress.scss | 6 ++++++ .../courses/components/course-progress/course-progress.ts | 1 + src/core/courses/pages/course-preview/course-preview.html | 3 ++- src/core/courses/pages/course-preview/course-preview.ts | 1 + 6 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index d1eb53fe5..7259db9b8 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -264,7 +264,7 @@ export class CoreCourseHelperProvider { * This function will set the icon to "spinner" when starting and it will also set it back to the initial icon if the * user cancels. All the other updates of the icon should be made when CoreEventsProvider.COURSE_STATUS_CHANGED is received. * - * @param {any} data An object where to store the course icon and title: "prefetchCourseIcon" and "title". + * @param {any} data An object where to store the course icon and title: "prefetchCourseIcon", "title" and "downloadSucceeded". * @param {any} course Course to prefetch. * @param {any[]} [sections] List of course sections. * @param {CoreCourseOptionsHandlerToDisplay[]} courseHandlers List of course handlers. @@ -279,6 +279,7 @@ export class CoreCourseHelperProvider { siteId = this.sitesProvider.getCurrentSiteId(); let promise; + data.downloadSucceeded = false; data.prefetchCourseIcon = 'spinner'; data.title = 'core.downloading'; @@ -313,6 +314,8 @@ export class CoreCourseHelperProvider { return this.prefetchCourse(course, sections, courseHandlers, menuHandlers, siteId); }).then(() => { // Download successful. + data.downloadSucceeded = true; + return true; }); }, (error): any => { diff --git a/src/core/courses/components/course-progress/core-courses-course-progress.html b/src/core/courses/components/course-progress/core-courses-course-progress.html index ed633bbac..985d92008 100644 --- a/src/core/courses/components/course-progress/core-courses-course-progress.html +++ b/src/core/courses/components/course-progress/core-courses-course-progress.html @@ -14,7 +14,8 @@
@@ -24,6 +25,9 @@ + + + diff --git a/src/addon/mod/data/pages/edit/edit.ts b/src/addon/mod/data/pages/edit/edit.ts index bed268873..35e74cd06 100644 --- a/src/addon/mod/data/pages/edit/edit.ts +++ b/src/addon/mod/data/pages/edit/edit.ts @@ -94,7 +94,7 @@ export class AddonModDataEditPage { * @return {boolean | Promise} Resolved if we can leave it, rejected if not. */ ionViewCanLeave(): boolean | Promise { - if (this.forceLeave) { + if (this.forceLeave || !this.entry) { return true; } From 235297ca280d4a5ebc88953093b3f268b901e088 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 17 May 2019 10:04:23 +0200 Subject: [PATCH 199/263] MOBILE-3036 core: Define different cache expiration times --- src/classes/site.ts | 53 +++++++++++++++++++++++++++++++++++++++------ src/config.json | 5 ++++- upgrade.txt | 1 + 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index 8812cb7a1..6db77a1f8 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -117,11 +117,13 @@ export interface CoreSiteWSPreSets { /** * Wehther a pending request in the queue matching the same function and arguments can be reused instead of adding * a new request to the queue. Defaults to true for read requests. + * @type {boolean} */ reusePending?: boolean; /** * Whether the request will be be sent immediately as a single request. Defaults to false. + * @type {boolean} */ skipQueue?: boolean; @@ -129,6 +131,14 @@ export interface CoreSiteWSPreSets { * Cache the response if it returns an errorcode present in this list. */ cacheErrors?: string[]; + + /** + * Update frequency. This value determines how often the cached data will be updated. Possible values: + * CoreSite.FREQUENCY_USUALLY, CoreSite.FREQUENCY_OFTEN, CoreSite.FREQUENCY_SOMETIMES, CoreSite.FREQUENCY_RARELY. + * Defaults to CoreSite.FREQUENCY_USUALLY. + * @type {number} + */ + updateFrequency?: number; } /** @@ -184,6 +194,12 @@ export class CoreSite { // @todo Set REQUEST_QUEUE_FORCE_WS to false before the release. static REQUEST_QUEUE_FORCE_WS = true; // Use "tool_mobile_call_external_functions" even for calling a single function. + // Constants for cache update frequency. + static FREQUENCY_USUALLY = 0; + static FREQUENCY_OFTEN = 1; + static FREQUENCY_SOMETIMES = 2; + static FREQUENCY_RARELY = 3; + // List of injected services. This class isn't injectable, so it cannot use DI. protected appProvider: CoreAppProvider; protected dbProvider: CoreDbProvider; @@ -213,6 +229,14 @@ export class CoreSite { 3.7: 2019052000 }; + // Possible cache update frequencies. + protected UPDATE_FREQUENCIES = [ + CoreConfigConstants.cache_update_frequency_usually || 420000, + CoreConfigConstants.cache_update_frequency_often || 1200000, + CoreConfigConstants.cache_update_frequency_sometimes || 3600000, + CoreConfigConstants.cache_update_frequency_rarely || 43200000 + ]; + // Rest of variables. protected logger; protected db: SQLiteDB; @@ -1016,11 +1040,22 @@ export class CoreSite { return promise.then((entry) => { const now = Date.now(); + let expirationTime; preSets.omitExpires = preSets.omitExpires || !this.appProvider.isOnline(); if (!preSets.omitExpires) { - if (now > entry.expirationTime) { + let expirationDelay = this.UPDATE_FREQUENCIES[preSets.updateFrequency] || + this.UPDATE_FREQUENCIES[CoreSite.FREQUENCY_USUALLY]; + + if (this.appProvider.isNetworkAccessLimited()) { + // Not WiFi, increase the expiration delay a 50% to decrease the data usage in this case. + expirationDelay *= 1.5; + } + + expirationTime = entry.expirationTime + expirationDelay; + + if (now > expirationTime) { this.logger.debug('Cached element found, but it is expired'); return Promise.reject(null); @@ -1028,8 +1063,12 @@ export class CoreSite { } if (typeof entry != 'undefined' && typeof entry.data != 'undefined') { - const expires = (entry.expirationTime - now) / 1000; - this.logger.info(`Cached element found, id: ${id} expires in ${expires} seconds`); + if (!expirationTime) { + this.logger.info(`Cached element found, id: ${id}. Expiration time ignored.`); + } else { + const expires = (expirationTime - now) / 1000; + this.logger.info(`Cached element found, id: ${id}. Expires in expires in ${expires} seconds`); + } return this.textUtils.parseJSON(entry.data, {}); } @@ -1064,15 +1103,15 @@ export class CoreSite { } return promise.then(() => { + // Since 3.7, the expiration time contains the time the entry is modified instead of the expiration time. + // We decided to reuse this field to prevent modifying the database table. const id = this.getCacheId(method, data), entry: any = { id: id, - data: JSON.stringify(response) + data: JSON.stringify(response), + expirationTime: Date.now() }; - let cacheExpirationTime = CoreConfigConstants.cache_expiration_time; - cacheExpirationTime = isNaN(cacheExpirationTime) ? 300000 : cacheExpirationTime; - entry.expirationTime = new Date().getTime() + cacheExpirationTime; if (preSets.cacheKey) { entry.key = preSets.cacheKey; } diff --git a/src/config.json b/src/config.json index 7ad4f4a2b..8ddd8d8e4 100644 --- a/src/config.json +++ b/src/config.json @@ -4,7 +4,10 @@ "desktopappname": "Moodle Desktop", "versioncode": 3700, "versionname": "3.7.0-dev", - "cache_expiration_time": 300000, + "cache_update_frequency_usually": 420000, + "cache_update_frequency_often": 1200000, + "cache_update_frequency_sometimes": 3600000, + "cache_update_frequency_rarely": 43200000, "default_lang": "en", "languages": { "ar": "عربي", diff --git a/upgrade.txt b/upgrade.txt index 3a771557b..56a1634dd 100644 --- a/upgrade.txt +++ b/upgrade.txt @@ -4,6 +4,7 @@ information provided here is intended especially for developers. === 3.7.0 === - The pushnotifications addon has been moved to core. All imports of that addon need to be fixed to use the right path and name. +- Now the expirationTime of cache entries contains the time the entry was modified, not the expiration time. This is to allow calculating dynamic expiration times. We decided to reuse the same field to prevent modifying the database table. === 3.6.1 === From 75ce4633629bbbe993bf596fc63e8db504e2e9db Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 20 May 2019 12:20:46 +0200 Subject: [PATCH 200/263] MOBILE-3036 core: Apply update frequency to all WS calls --- src/addon/badges/providers/badges.ts | 8 +++-- src/addon/blog/providers/blog.ts | 4 ++- src/addon/calendar/providers/calendar.ts | 9 ++++-- src/addon/competency/providers/competency.ts | 19 ++++++++---- .../providers/coursecompletion.ts | 2 ++ src/addon/files/providers/files.ts | 6 ++-- .../airnotifier/providers/airnotifier.ts | 4 ++- src/addon/messages/providers/messages.ts | 21 ++++++++----- src/addon/mod/assign/providers/assign.ts | 14 +++++---- src/addon/mod/book/providers/book.ts | 4 ++- src/addon/mod/chat/providers/chat.ts | 9 ++++-- src/addon/mod/choice/providers/choice.ts | 8 +++-- src/addon/mod/data/providers/data.ts | 13 +++++--- src/addon/mod/feedback/providers/feedback.ts | 8 +++-- src/addon/mod/folder/providers/folder.ts | 4 ++- src/addon/mod/forum/providers/forum.ts | 3 +- src/addon/mod/glossary/providers/glossary.ts | 22 +++++++++----- src/addon/mod/imscp/providers/imscp.ts | 4 ++- src/addon/mod/label/providers/label.ts | 3 +- src/addon/mod/lesson/providers/lesson.ts | 14 +++++---- src/addon/mod/lti/providers/lti.ts | 4 ++- src/addon/mod/page/providers/page.ts | 4 ++- src/addon/mod/quiz/providers/quiz.ts | 14 +++++---- src/addon/mod/resource/providers/resource.ts | 4 ++- src/addon/mod/scorm/providers/scorm.ts | 11 ++++--- src/addon/mod/survey/providers/survey.ts | 8 +++-- src/addon/mod/url/providers/url.ts | 4 ++- src/addon/mod/wiki/providers/wiki.ts | 17 +++++++---- src/addon/mod/workshop/providers/workshop.ts | 16 ++++++---- src/addon/notes/providers/notes.ts | 30 +++++++++++-------- .../notifications/providers/notifications.ts | 4 ++- src/core/comments/providers/comments.ts | 3 +- src/core/course/providers/course.ts | 13 +++++--- src/core/courses/providers/courses.ts | 24 ++++++++++----- src/core/courses/providers/dashboard.ts | 3 +- src/core/rating/providers/rating.ts | 3 +- src/core/siteplugins/providers/siteplugins.ts | 2 ++ src/core/user/providers/user.ts | 9 ++++-- src/providers/groups.ts | 11 ++++--- 39 files changed, 242 insertions(+), 121 deletions(-) diff --git a/src/addon/badges/providers/badges.ts b/src/addon/badges/providers/badges.ts index 2245ad1fb..019341e39 100644 --- a/src/addon/badges/providers/badges.ts +++ b/src/addon/badges/providers/badges.ts @@ -15,6 +15,7 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; +import { CoreSite } from '@classes/site'; /** * Service to handle badges. @@ -79,11 +80,12 @@ export class AddonBadgesProvider { courseid : courseId, userid : userId }, - presets = { - cacheKey: this.getBadgesCacheKey(courseId, userId) + preSets = { + cacheKey: this.getBadgesCacheKey(courseId, userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; - return site.read('core_badges_get_user_badges', data, presets).then((response) => { + return site.read('core_badges_get_user_badges', data, preSets).then((response) => { if (response && response.badges) { return response.badges; } else { diff --git a/src/addon/blog/providers/blog.ts b/src/addon/blog/providers/blog.ts index e5387cb65..90b875283 100644 --- a/src/addon/blog/providers/blog.ts +++ b/src/addon/blog/providers/blog.ts @@ -17,6 +17,7 @@ import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; +import { CoreSite } from '@classes/site'; /** * Service to handle blog entries. @@ -76,7 +77,8 @@ export class AddonBlogProvider { }; const preSets = { - cacheKey: this.getEntriesCacheKey(filter) + cacheKey: this.getEntriesCacheKey(filter), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_blog_get_entries', data, preSets); diff --git a/src/addon/calendar/providers/calendar.ts b/src/addon/calendar/providers/calendar.ts index 73bf0217f..bfcb87110 100644 --- a/src/addon/calendar/providers/calendar.ts +++ b/src/addon/calendar/providers/calendar.ts @@ -292,7 +292,8 @@ export class AddonCalendarProvider { getEvent(id: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getEventCacheKey(id) + cacheKey: this.getEventCacheKey(id), + updateFrequency: CoreSite.FREQUENCY_RARELY }, data = { options: { @@ -332,7 +333,8 @@ export class AddonCalendarProvider { cacheKey: this.getEventCacheKey(id) }, data = { - eventid: id + eventid: id, + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_calendar_get_calendar_event_by_id', data, preSets).then((response) => { @@ -469,7 +471,8 @@ export class AddonCalendarProvider { // We need to retrieve cached data using cache key because we have timestamp in the params. const preSets = { cacheKey: this.getEventsListCacheKey(daysToStart, daysInterval), - getCacheUsingCacheKey: true + getCacheUsingCacheKey: true, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_calendar_get_calendar_events', data, preSets).then((response) => { diff --git a/src/addon/competency/providers/competency.ts b/src/addon/competency/providers/competency.ts index 7786b75a6..f2ba8f2a6 100644 --- a/src/addon/competency/providers/competency.ts +++ b/src/addon/competency/providers/competency.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; +import { CoreSite } from '@classes/site'; /** * Service to handle caompetency learning plans. @@ -156,7 +157,8 @@ export class AddonCompetencyProvider { userid: userId }, preSets = { - cacheKey: this.getLearningPlansCacheKey(userId) + cacheKey: this.getLearningPlansCacheKey(userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('tool_lp_data_for_plans_page', params, preSets).then((response) => { @@ -185,7 +187,8 @@ export class AddonCompetencyProvider { planid: planId }, preSets = { - cacheKey: this.getLearningPlanCacheKey(planId) + cacheKey: this.getLearningPlanCacheKey(planId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('tool_lp_data_for_plan_page', params, preSets).then((response) => { @@ -216,7 +219,8 @@ export class AddonCompetencyProvider { competencyid: competencyId }, preSets = { - cacheKey: this.getCompetencyInPlanCacheKey(planId, competencyId) + cacheKey: this.getCompetencyInPlanCacheKey(planId, competencyId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('tool_lp_data_for_user_competency_summary_in_plan', params, preSets).then((response) => { @@ -253,7 +257,8 @@ export class AddonCompetencyProvider { userid: userId }, preSets: any = { - cacheKey: this.getCompetencyInCourseCacheKey(courseId, competencyId, userId) + cacheKey: this.getCompetencyInCourseCacheKey(courseId, competencyId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -291,7 +296,8 @@ export class AddonCompetencyProvider { userid: userId }, preSets: any = { - cacheKey: this.getCompetencySummaryCacheKey(competencyId, userId) + cacheKey: this.getCompetencySummaryCacheKey(competencyId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -327,7 +333,8 @@ export class AddonCompetencyProvider { courseid: courseId }, preSets: any = { - cacheKey: this.getCourseCompetenciesCacheKey(courseId) + cacheKey: this.getCourseCompetenciesCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { diff --git a/src/addon/coursecompletion/providers/coursecompletion.ts b/src/addon/coursecompletion/providers/coursecompletion.ts index fba2e064d..262bb8e3b 100644 --- a/src/addon/coursecompletion/providers/coursecompletion.ts +++ b/src/addon/coursecompletion/providers/coursecompletion.ts @@ -17,6 +17,7 @@ import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; +import { CoreSite } from '@classes/site'; /** * Service to handle course completion. @@ -108,6 +109,7 @@ export class AddonCourseCompletionProvider { }; preSets.cacheKey = this.getCompletionCacheKey(courseId, userId); + preSets.updateFrequency = preSets.updateFrequency || CoreSite.FREQUENCY_SOMETIMES; return site.read('core_completion_get_course_completion_status', data, preSets).then((data) => { if (data.completionstatus) { diff --git a/src/addon/files/providers/files.ts b/src/addon/files/providers/files.ts index 8cad3e251..1db49f1da 100644 --- a/src/addon/files/providers/files.ts +++ b/src/addon/files/providers/files.ts @@ -77,7 +77,8 @@ export class AddonFilesProvider { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getFilesListCacheKey(params) + cacheKey: this.getFilesListCacheKey(params), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_files_get_files', params, preSets); @@ -171,7 +172,8 @@ export class AddonFilesProvider { userid: userId }, preSets = { - cacheKey: this.getPrivateFilesInfoCacheKey(userId) + cacheKey: this.getPrivateFilesInfoCacheKey(userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_user_get_private_files_info', params, preSets); diff --git a/src/addon/messageoutput/airnotifier/providers/airnotifier.ts b/src/addon/messageoutput/airnotifier/providers/airnotifier.ts index f8ca5be71..129c1ebf0 100644 --- a/src/addon/messageoutput/airnotifier/providers/airnotifier.ts +++ b/src/addon/messageoutput/airnotifier/providers/airnotifier.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreConfigConstants } from '../../../../configconstants'; +import { CoreSite } from '@classes/site'; /** * Service to handle Airnotifier message output. @@ -81,7 +82,8 @@ export class AddonMessageOutputAirnotifierProvider { appid: CoreConfigConstants.app_id }; const preSets = { - cacheKey: this.getUserDevicesCacheKey() + cacheKey: this.getUserDevicesCacheKey(), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('message_airnotifier_get_user_devices', data, preSets).then((data) => { diff --git a/src/addon/messages/providers/messages.ts b/src/addon/messages/providers/messages.ts index fbaccdd11..b4181773a 100644 --- a/src/addon/messages/providers/messages.ts +++ b/src/addon/messages/providers/messages.ts @@ -571,7 +571,8 @@ export class AddonMessagesProvider { userid: userId }, preSets = { - cacheKey: this.getCacheKeyForBlockedContacts(userId) + cacheKey: this.getCacheKeyForBlockedContacts(userId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; return site.read('core_message_get_blocked_users', params, preSets); @@ -590,7 +591,8 @@ export class AddonMessagesProvider { getContacts(siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getCacheKeyForContacts() + cacheKey: this.getCacheKeyForContacts(), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; return site.read('core_message_get_contacts', undefined, preSets).then((contacts) => { @@ -632,7 +634,8 @@ export class AddonMessagesProvider { limitnum: limitNum <= 0 ? 0 : limitNum + 1 }; const preSets = { - cacheKey: this.getCacheKeyForUserContacts() + cacheKey: this.getCacheKeyForUserContacts(), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; return site.read('core_message_get_user_contacts', params, preSets).then((contacts) => { @@ -673,7 +676,8 @@ export class AddonMessagesProvider { limitnum: limitNum <= 0 ? 0 : limitNum + 1 }; const preSets = { - cacheKey: this.getCacheKeyForContactRequests() + cacheKey: this.getCacheKeyForContactRequests(), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; return site.read('core_message_get_contact_requests', data, preSets).then((requests) => { @@ -837,7 +841,8 @@ export class AddonMessagesProvider { } const preSets = { - cacheKey: this.getCacheKeyForConversationMembers(userId, conversationId) + cacheKey: this.getCacheKeyForConversationMembers(userId, conversationId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }, params: any = { userid: userId, @@ -1272,7 +1277,8 @@ export class AddonMessagesProvider { userId = userId || site.getUserId(); const preSets = { - cacheKey: this.getCacheKeyForMemberInfo(userId, otherUserId) + cacheKey: this.getCacheKeyForMemberInfo(userId, otherUserId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }, params: any = { referenceuserid: userId, @@ -1312,7 +1318,8 @@ export class AddonMessagesProvider { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getMessagePreferencesCacheKey() + cacheKey: this.getMessagePreferencesCacheKey(), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_message_get_user_message_preferences', {}, preSets).then((data) => { diff --git a/src/addon/mod/assign/providers/assign.ts b/src/addon/mod/assign/providers/assign.ts index 1b785e8b5..26c6ecf41 100644 --- a/src/addon/mod/assign/providers/assign.ts +++ b/src/addon/mod/assign/providers/assign.ts @@ -25,7 +25,7 @@ import { CoreGradesProvider } from '@core/grades/providers/grades'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModAssignSubmissionDelegate } from './submission-delegate'; import { AddonModAssignOfflineProvider } from './assign-offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { CoreInterceptor } from '@classes/interceptor'; /** @@ -146,7 +146,8 @@ export class AddonModAssignProvider { includenotenrolledcourses: 1 }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getAssignmentCacheKey(courseId) + cacheKey: this.getAssignmentCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -215,7 +216,8 @@ export class AddonModAssignProvider { assignmentids: [assignId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getAssignmentUserMappingsCacheKey(assignId) + cacheKey: this.getAssignmentUserMappingsCacheKey(assignId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (ignoreCache) { @@ -437,7 +439,8 @@ export class AddonModAssignProvider { assignmentids: [assignId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getSubmissionsCacheKey(assignId) + cacheKey: this.getSubmissionsCacheKey(assignId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (ignoreCache) { @@ -642,7 +645,8 @@ export class AddonModAssignProvider { filter: '' }, preSets: CoreSiteWSPreSets = { - cacheKey: this.listParticipantsCacheKey(assignId, groupId) + cacheKey: this.listParticipantsCacheKey(assignId, groupId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (ignoreCache) { diff --git a/src/addon/mod/book/providers/book.ts b/src/addon/mod/book/providers/book.ts index 4cb37834b..1655ed164 100644 --- a/src/addon/mod/book/providers/book.ts +++ b/src/addon/mod/book/providers/book.ts @@ -23,6 +23,7 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; +import { CoreSite } from '@classes/site'; /** * A book chapter inside the toc list. @@ -97,7 +98,8 @@ export class AddonModBookProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getBookDataCacheKey(courseId) + cacheKey: this.getBookDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_book_get_books_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/chat/providers/chat.ts b/src/addon/mod/chat/providers/chat.ts index ed86a56d5..4e6b6df9b 100644 --- a/src/addon/mod/chat/providers/chat.ts +++ b/src/addon/mod/chat/providers/chat.ts @@ -18,7 +18,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreUserProvider } from '@core/user/providers/user'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { CoreUtilsProvider } from '@providers/utils/utils'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; /** * Service that provides some features for chats. @@ -47,7 +47,8 @@ export class AddonModChatProvider { courseids: [courseId] }; const preSets: CoreSiteWSPreSets = { - cacheKey: this.getChatsCacheKey(courseId) + cacheKey: this.getChatsCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_chat_get_chats_by_courses', params, preSets).then((response) => { @@ -214,6 +215,7 @@ export class AddonModChatProvider { }; const preSets: CoreSiteWSPreSets = { cacheKey: this.getSessionsCacheKey(chatId, groupId, showAll), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { preSets.getFromCache = false; @@ -252,7 +254,8 @@ export class AddonModChatProvider { groupid: groupId }; const preSets: CoreSiteWSPreSets = { - cacheKey: this.getSessionMessagesCacheKey(chatId, sessionStart, groupId) + cacheKey: this.getSessionMessagesCacheKey(chatId, sessionStart, groupId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { preSets.getFromCache = false; diff --git a/src/addon/mod/choice/providers/choice.ts b/src/addon/mod/choice/providers/choice.ts index 7d1dd0e00..770afa6c0 100644 --- a/src/addon/mod/choice/providers/choice.ts +++ b/src/addon/mod/choice/providers/choice.ts @@ -19,7 +19,7 @@ import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModChoiceOfflineProvider } from './offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; /** * Service that provides some features for choices. @@ -187,7 +187,8 @@ export class AddonModChoiceProvider { }; const preSets: CoreSiteWSPreSets = { cacheKey: this.getChoiceDataCacheKey(courseId), - omitExpires: forceCache + omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { @@ -252,7 +253,8 @@ export class AddonModChoiceProvider { choiceid: choiceId }; const preSets: CoreSiteWSPreSets = { - cacheKey: this.getChoiceOptionsCacheKey(choiceId) + cacheKey: this.getChoiceOptionsCacheKey(choiceId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { diff --git a/src/addon/mod/data/providers/data.ts b/src/addon/mod/data/providers/data.ts index 47f8fc64d..63e53e364 100644 --- a/src/addon/mod/data/providers/data.ts +++ b/src/addon/mod/data/providers/data.ts @@ -22,6 +22,7 @@ import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModDataOfflineProvider } from './offline'; import { AddonModDataFieldsDelegate } from './fields-delegate'; import { CoreRatingInfo } from '@core/rating/providers/rating'; +import { CoreSite } from '@classes/site'; /** * Database entry (online or offline). @@ -538,7 +539,8 @@ export class AddonModDataProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getDatabaseDataCacheKey(courseId) + cacheKey: this.getDatabaseDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { preSets['omitExpires'] = true; @@ -675,7 +677,8 @@ export class AddonModDataProvider { order: order }, preSets = { - cacheKey: this.getEntriesCacheKey(dataId, groupId) + cacheKey: this.getEntriesCacheKey(dataId, groupId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (forceCache) { @@ -733,7 +736,8 @@ export class AddonModDataProvider { returncontents: 1 }, preSets = { - cacheKey: this.getEntryCacheKey(dataId, entryId) + cacheKey: this.getEntryCacheKey(dataId, entryId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -775,7 +779,8 @@ export class AddonModDataProvider { databaseid: dataId }, preSets = { - cacheKey: this.getFieldsCacheKey(dataId) + cacheKey: this.getFieldsCacheKey(dataId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { diff --git a/src/addon/mod/feedback/providers/feedback.ts b/src/addon/mod/feedback/providers/feedback.ts index 23327ca75..a9aed0880 100644 --- a/src/addon/mod/feedback/providers/feedback.ts +++ b/src/addon/mod/feedback/providers/feedback.ts @@ -20,7 +20,7 @@ import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreAppProvider } from '@providers/app'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModFeedbackOfflineProvider } from './offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; /** * Service that provides some features for feedbacks. @@ -583,7 +583,8 @@ export class AddonModFeedbackProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getFeedbackCacheKey(courseId) + cacheKey: this.getFeedbackCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { @@ -650,7 +651,8 @@ export class AddonModFeedbackProvider { feedbackid: feedbackId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getItemsDataCacheKey(feedbackId) + cacheKey: this.getItemsDataCacheKey(feedbackId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { diff --git a/src/addon/mod/folder/providers/folder.ts b/src/addon/mod/folder/providers/folder.ts index eff8af19c..ce3336634 100644 --- a/src/addon/mod/folder/providers/folder.ts +++ b/src/addon/mod/folder/providers/folder.ts @@ -18,6 +18,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for folder. @@ -61,7 +62,8 @@ export class AddonModFolderProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getFolderCacheKey(courseId) + cacheKey: this.getFolderCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_folder_get_folders_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index 72f90fc3d..3659e11ef 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -298,7 +298,8 @@ export class AddonModForumProvider { courseids: [courseId] }; const preSets = { - cacheKey: this.getForumDataCacheKey(courseId) + cacheKey: this.getForumDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_forum_get_forums_by_courses', params, preSets); diff --git a/src/addon/mod/glossary/providers/glossary.ts b/src/addon/mod/glossary/providers/glossary.ts index 1e7ba968b..bd6862d68 100644 --- a/src/addon/mod/glossary/providers/glossary.ts +++ b/src/addon/mod/glossary/providers/glossary.ts @@ -71,7 +71,8 @@ export class AddonModGlossaryProvider { courseids: [courseId] }; const preSets = { - cacheKey: this.getCourseGlossariesCacheKey(courseId) + cacheKey: this.getCourseGlossariesCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_glossary_get_glossaries_by_courses', params, preSets).then((result) => { @@ -134,7 +135,8 @@ export class AddonModGlossaryProvider { }; const preSets = { cacheKey: this.getEntriesByAuthorCacheKey(glossaryId, letter, field, sort), - omitExpires: forceCache + omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_entries_by_author', params, preSets); @@ -182,7 +184,8 @@ export class AddonModGlossaryProvider { }; const preSets = { cacheKey: this.getEntriesByCategoryCacheKey(glossaryId, categoryId), - omitExpires: forceCache + omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_entries_by_category', params, preSets); @@ -254,7 +257,8 @@ export class AddonModGlossaryProvider { }; const preSets = { cacheKey: this.getEntriesByDateCacheKey(glossaryId, order, sort), - omitExpires: forceCache + omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_entries_by_date', params, preSets); @@ -311,7 +315,8 @@ export class AddonModGlossaryProvider { }; const preSets = { cacheKey: this.getEntriesByLetterCacheKey(glossaryId, letter), - omitExpires: forceCache + omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_entries_by_letter', params, preSets); @@ -378,6 +383,7 @@ export class AddonModGlossaryProvider { const preSets = { cacheKey: this.getEntriesBySearchCacheKey(glossaryId, query, fullSearch, order, sort), omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_entries_by_search', params, preSets); @@ -444,7 +450,8 @@ export class AddonModGlossaryProvider { limit: limit }; const preSets = { - cacheKey: this.getCategoriesCacheKey(glossaryId) + cacheKey: this.getCategoriesCacheKey(glossaryId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_categories', params, preSets).then((response) => { @@ -496,7 +503,8 @@ export class AddonModGlossaryProvider { id: entryId }; const preSets = { - cacheKey: this.getEntryCacheKey(entryId) + cacheKey: this.getEntryCacheKey(entryId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_glossary_get_entry_by_id', params, preSets).then((response) => { diff --git a/src/addon/mod/imscp/providers/imscp.ts b/src/addon/mod/imscp/providers/imscp.ts index df58e9b46..86166f3c2 100644 --- a/src/addon/mod/imscp/providers/imscp.ts +++ b/src/addon/mod/imscp/providers/imscp.ts @@ -20,6 +20,7 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for IMSCP. @@ -162,7 +163,8 @@ export class AddonModImscpProvider { courseids: [courseId] }; const preSets = { - cacheKey: this.getImscpDataCacheKey(courseId) + cacheKey: this.getImscpDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_imscp_get_imscps_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/label/providers/label.ts b/src/addon/mod/label/providers/label.ts index b40b11ac9..2b4e79534 100644 --- a/src/addon/mod/label/providers/label.ts +++ b/src/addon/mod/label/providers/label.ts @@ -59,7 +59,8 @@ export class AddonModLabelProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getLabelDataCacheKey(courseId) + cacheKey: this.getLabelDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { diff --git a/src/addon/mod/lesson/providers/lesson.ts b/src/addon/mod/lesson/providers/lesson.ts index 55c4763e1..f84ce3eb6 100644 --- a/src/addon/mod/lesson/providers/lesson.ts +++ b/src/addon/mod/lesson/providers/lesson.ts @@ -22,7 +22,7 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreGradesProvider } from '@core/grades/providers/grades'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { AddonModLessonOfflineProvider } from './lesson-offline'; /** @@ -1436,7 +1436,8 @@ export class AddonModLessonProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getLessonDataCacheKey(courseId) + cacheKey: this.getLessonDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { @@ -1761,7 +1762,8 @@ export class AddonModLessonProvider { lessonid: lessonId, }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getPagesCacheKey(lessonId) + cacheKey: this.getPagesCacheKey(lessonId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (typeof password == 'string') { @@ -2118,7 +2120,8 @@ export class AddonModLessonProvider { groupid: groupId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getRetakesOverviewCacheKey(lessonId, groupId) + cacheKey: this.getRetakesOverviewCacheKey(lessonId, groupId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (forceCache) { @@ -2348,7 +2351,8 @@ export class AddonModLessonProvider { lessonattempt: retake }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getUserRetakeCacheKey(lessonId, userId, retake) + cacheKey: this.getUserRetakeCacheKey(lessonId, userId, retake), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (forceCache) { diff --git a/src/addon/mod/lti/providers/lti.ts b/src/addon/mod/lti/providers/lti.ts index fa88da045..b9c1eea85 100644 --- a/src/addon/mod/lti/providers/lti.ts +++ b/src/addon/mod/lti/providers/lti.ts @@ -21,6 +21,7 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreUrlUtilsProvider } from '@providers/utils/url'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; +import { CoreSite } from '@classes/site'; export interface AddonModLtiParam { name: string; @@ -108,7 +109,8 @@ export class AddonModLtiProvider { courseids: [courseId] }; const preSets: any = { - cacheKey: this.getLtiCacheKey(courseId) + cacheKey: this.getLtiCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return this.sitesProvider.getCurrentSite().read('mod_lti_get_ltis_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/page/providers/page.ts b/src/addon/mod/page/providers/page.ts index a196d9efc..95ac2f311 100644 --- a/src/addon/mod/page/providers/page.ts +++ b/src/addon/mod/page/providers/page.ts @@ -19,6 +19,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { CoreFilepoolProvider } from '@providers/filepool'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for page. @@ -63,7 +64,8 @@ export class AddonModPageProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getPageCacheKey(courseId) + cacheKey: this.getPageCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_page_get_pages_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/quiz/providers/quiz.ts b/src/addon/mod/quiz/providers/quiz.ts index 00ba2a92e..cb36b5928 100644 --- a/src/addon/mod/quiz/providers/quiz.ts +++ b/src/addon/mod/quiz/providers/quiz.ts @@ -21,7 +21,7 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUtilsProvider } from '@providers/utils/utils'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { CoreGradesHelperProvider } from '@core/grades/providers/helper'; import { CoreQuestionDelegate } from '@core/question/providers/delegate'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; @@ -570,7 +570,8 @@ export class AddonModQuizProvider { grade: grade }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getFeedbackForGradeCacheKey(quizId, grade) + cacheKey: this.getFeedbackForGradeCacheKey(quizId, grade), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -687,7 +688,8 @@ export class AddonModQuizProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getQuizDataCacheKey(courseId) + cacheKey: this.getQuizDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { @@ -829,7 +831,8 @@ export class AddonModQuizProvider { quizid: quizId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getQuizRequiredQtypesCacheKey(quizId) + cacheKey: this.getQuizRequiredQtypesCacheKey(quizId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -991,7 +994,8 @@ export class AddonModQuizProvider { includepreviews: includePreviews ? 1 : 0 }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getUserAttemptsCacheKey(quizId, userId) + cacheKey: this.getUserAttemptsCacheKey(quizId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (offline) { diff --git a/src/addon/mod/resource/providers/resource.ts b/src/addon/mod/resource/providers/resource.ts index 995092907..3de250b9b 100644 --- a/src/addon/mod/resource/providers/resource.ts +++ b/src/addon/mod/resource/providers/resource.ts @@ -19,6 +19,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { CoreFilepoolProvider } from '@providers/filepool'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for resources. @@ -61,7 +62,8 @@ export class AddonModResourceProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getResourceCacheKey(courseId) + cacheKey: this.getResourceCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_resource_get_resources_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/scorm/providers/scorm.ts b/src/addon/mod/scorm/providers/scorm.ts index 712020716..9d4c041c4 100644 --- a/src/addon/mod/scorm/providers/scorm.ts +++ b/src/addon/mod/scorm/providers/scorm.ts @@ -24,7 +24,7 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { AddonModScormOfflineProvider } from './scorm-offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { CoreConstants } from '@core/constants'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; @@ -547,7 +547,8 @@ export class AddonModScormProvider { ignoremissingcompletion: ignoreMissing ? 1 : 0 }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getAttemptCountCacheKey(scormId, userId) + cacheKey: this.getAttemptCountCacheKey(scormId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -835,7 +836,8 @@ export class AddonModScormProvider { scormid: scormId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getScosCacheKey(scormId) + cacheKey: this.getScosCacheKey(scormId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -1070,7 +1072,8 @@ export class AddonModScormProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getScormDataCacheKey(courseId) + cacheKey: this.getScormDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { diff --git a/src/addon/mod/survey/providers/survey.ts b/src/addon/mod/survey/providers/survey.ts index 1a1d2547f..824b7bd33 100644 --- a/src/addon/mod/survey/providers/survey.ts +++ b/src/addon/mod/survey/providers/survey.ts @@ -20,7 +20,7 @@ import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModSurveyOfflineProvider } from './offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; /** * Service that provides some features for surveys. @@ -52,7 +52,8 @@ export class AddonModSurveyProvider { surveyid: surveyId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getQuestionsCacheKey(surveyId) + cacheKey: this.getQuestionsCacheKey(surveyId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -106,7 +107,8 @@ export class AddonModSurveyProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getSurveyCacheKey(courseId) + cacheKey: this.getSurveyCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { diff --git a/src/addon/mod/url/providers/url.ts b/src/addon/mod/url/providers/url.ts index 3e63ebf9f..13261f104 100644 --- a/src/addon/mod/url/providers/url.ts +++ b/src/addon/mod/url/providers/url.ts @@ -20,6 +20,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { CoreConstants } from '@core/constants'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for urls. @@ -114,7 +115,8 @@ export class AddonModUrlProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getUrlCacheKey(courseId) + cacheKey: this.getUrlCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_url_get_urls_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/wiki/providers/wiki.ts b/src/addon/mod/wiki/providers/wiki.ts index e20543769..4523f541b 100644 --- a/src/addon/mod/wiki/providers/wiki.ts +++ b/src/addon/mod/wiki/providers/wiki.ts @@ -22,7 +22,7 @@ import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModWikiOfflineProvider } from './wiki-offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; export interface AddonModWikiSubwikiListData { /** @@ -134,7 +134,8 @@ export class AddonModWikiProvider { pageid: pageId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getPageContentsCacheKey(pageId) + cacheKey: this.getPageContentsCacheKey(pageId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (offline) { @@ -215,7 +216,8 @@ export class AddonModWikiProvider { userid: userId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getSubwikiFilesCacheKey(wikiId, groupId, userId) + cacheKey: this.getSubwikiFilesCacheKey(wikiId, groupId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (offline) { @@ -299,7 +301,8 @@ export class AddonModWikiProvider { }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getSubwikiPagesCacheKey(wikiId, groupId, userId) + cacheKey: this.getSubwikiPagesCacheKey(wikiId, groupId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (offline) { @@ -352,7 +355,8 @@ export class AddonModWikiProvider { wikiid: wikiId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getSubwikisCacheKey(wikiId) + cacheKey: this.getSubwikisCacheKey(wikiId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (offline) { @@ -408,7 +412,8 @@ export class AddonModWikiProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getWikiDataCacheKey(courseId) + cacheKey: this.getWikiDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_wiki_get_wikis_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/workshop/providers/workshop.ts b/src/addon/mod/workshop/providers/workshop.ts index 86e0c3525..bae7854f0 100644 --- a/src/addon/mod/workshop/providers/workshop.ts +++ b/src/addon/mod/workshop/providers/workshop.ts @@ -19,6 +19,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModWorkshopOfflineProvider } from './offline'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for workshops. @@ -212,7 +213,8 @@ export class AddonModWorkshopProvider { courseids: [courseId] }; const preSets: any = { - cacheKey: this.getWorkshopDataCacheKey(courseId) + cacheKey: this.getWorkshopDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { @@ -355,7 +357,8 @@ export class AddonModWorkshopProvider { workshopid: workshopId }; const preSets: any = { - cacheKey: this.getUserPlanDataCacheKey(workshopId) + cacheKey: this.getUserPlanDataCacheKey(workshopId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (offline) { @@ -408,7 +411,8 @@ export class AddonModWorkshopProvider { groupid: groupId }; const preSets: any = { - cacheKey: this.getSubmissionsDataCacheKey(workshopId, userId, groupId) + cacheKey: this.getSubmissionsDataCacheKey(workshopId, userId, groupId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (offline) { @@ -539,7 +543,8 @@ export class AddonModWorkshopProvider { perpage: perPage || AddonModWorkshopProvider.PER_PAGE }; const preSets: any = { - cacheKey: this.getGradesReportDataCacheKey(workshopId, groupId) + cacheKey: this.getGradesReportDataCacheKey(workshopId, groupId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (offline) { @@ -1004,7 +1009,8 @@ export class AddonModWorkshopProvider { mode: mode || 'assessment' }; const preSets: any = { - cacheKey: this.getAssessmentFormDataCacheKey(workshopId, assessmentId, mode) + cacheKey: this.getAssessmentFormDataCacheKey(workshopId, assessmentId, mode), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (offline) { diff --git a/src/addon/notes/providers/notes.ts b/src/addon/notes/providers/notes.ts index 78fb79c1c..006a78093 100644 --- a/src/addon/notes/providers/notes.ts +++ b/src/addon/notes/providers/notes.ts @@ -17,7 +17,7 @@ import { CoreAppProvider } from '@providers/app'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitesProvider } from '@providers/sites'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { TranslateService } from '@ngx-translate/core'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonNotesOfflineProvider } from './notes-offline'; @@ -160,20 +160,23 @@ export class AddonNotesProvider { // The only way to detect if it's enabled is to perform a WS call. // We use an invalid user ID (-1) to avoid saving the note if the user has permissions. const data = { - notes: [ - { - userid: -1, - publishstate: 'personal', - courseid: courseId, - text: '', - format: 1 - } - ] - }; + notes: [ + { + userid: -1, + publishstate: 'personal', + courseid: courseId, + text: '', + format: 1 + } + ] + }, + preSets = { + updateFrequency: CoreSite.FREQUENCY_RARELY + }; /* Use .read to cache data and be able to check it in offline. This means that, if a user loses the capabilities to add notes, he'll still see the option in the app. */ - return this.utils.promiseWorks(site.read('core_notes_create_notes', data)); + return this.utils.promiseWorks(site.read('core_notes_create_notes', data, preSets)); }); } @@ -232,7 +235,8 @@ export class AddonNotesProvider { } const preSets: CoreSiteWSPreSets = { - cacheKey: this.getNotesCacheKey(courseId, userId) + cacheKey: this.getNotesCacheKey(courseId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { diff --git a/src/addon/notifications/providers/notifications.ts b/src/addon/notifications/providers/notifications.ts index 1cd0f9806..db8b5b62b 100644 --- a/src/addon/notifications/providers/notifications.ts +++ b/src/addon/notifications/providers/notifications.ts @@ -21,6 +21,7 @@ import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUserProvider } from '@core/user/providers/user'; import { CoreEmulatorHelperProvider } from '@core/emulator/providers/helper'; import { AddonMessagesProvider } from '@addon/messages/providers/messages'; +import { CoreSite } from '@classes/site'; /** * Service to handle notifications. @@ -121,7 +122,8 @@ export class AddonNotificationsProvider { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getNotificationPreferencesCacheKey() + cacheKey: this.getNotificationPreferencesCacheKey(), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_message_get_user_notification_preferences', {}, preSets).then((data) => { diff --git a/src/core/comments/providers/comments.ts b/src/core/comments/providers/comments.ts index 2d876990d..9808a0c83 100644 --- a/src/core/comments/providers/comments.ts +++ b/src/core/comments/providers/comments.ts @@ -102,7 +102,8 @@ export class CoreCommentsProvider { }; const preSets = { - cacheKey: this.getCommentsCacheKey(contextLevel, instanceId, component, itemId, area, page) + cacheKey: this.getCommentsCacheKey(contextLevel, instanceId, component, itemId, area, page), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_comment_get_comments', params, preSets).then((response) => { diff --git a/src/core/course/providers/course.ts b/src/core/course/providers/course.ts index af6daecd4..1815352ea 100644 --- a/src/core/course/providers/course.ts +++ b/src/core/course/providers/course.ts @@ -258,7 +258,8 @@ export class CoreCourseProvider { courseid: courseId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getCourseBlocksCacheKey(courseId) + cacheKey: this.getCourseBlocksCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_block_get_course_blocks', params, preSets).then((result) => { @@ -336,7 +337,8 @@ export class CoreCourseProvider { options: [] }; const preSets: CoreSiteWSPreSets = { - omitExpires: preferCache + omitExpires: preferCache, + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (includeStealth) { @@ -446,7 +448,8 @@ export class CoreCourseProvider { cmid: moduleId }, preSets = { - cacheKey: this.getModuleCacheKey(moduleId) + cacheKey: this.getModuleCacheKey(moduleId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_course_module', params, preSets).then((response) => { @@ -502,7 +505,8 @@ export class CoreCourseProvider { module: module }, preSets = { - cacheKey: this.getModuleBasicInfoByInstanceCacheKey(id, module) + cacheKey: this.getModuleBasicInfoByInstanceCacheKey(id, module), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_course_module_by_instance', params, preSets).then((response) => { @@ -629,6 +633,7 @@ export class CoreCourseProvider { return this.sitesProvider.getSite(siteId).then((site) => { preSets = preSets || {}; preSets.cacheKey = this.getSectionsCacheKey(courseId); + preSets.updateFrequency = preSets.updateFrequency || CoreSite.FREQUENCY_RARELY; const params = { courseid: courseId, diff --git a/src/core/courses/providers/courses.ts b/src/core/courses/providers/courses.ts index 21c22ebbf..9f53303c2 100644 --- a/src/core/courses/providers/courses.ts +++ b/src/core/courses/providers/courses.ts @@ -63,7 +63,8 @@ export class CoreCoursesProvider { addsubcategories: addSubcategories ? 1 : 0 }, preSets = { - cacheKey: this.getCategoriesCacheKey(categoryId, addSubcategories) + cacheKey: this.getCategoriesCacheKey(categoryId, addSubcategories), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_categories', data, preSets); @@ -271,7 +272,8 @@ export class CoreCoursesProvider { courseid: id }, preSets = { - cacheKey: this.getCourseEnrolmentMethodsCacheKey(id) + cacheKey: this.getCourseEnrolmentMethodsCacheKey(id), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_enrol_get_course_enrolment_methods', params, preSets); @@ -301,7 +303,8 @@ export class CoreCoursesProvider { instanceid: instanceId }, preSets = { - cacheKey: this.getCourseGuestEnrolmentInfoCacheKey(instanceId) + cacheKey: this.getCourseGuestEnrolmentInfoCacheKey(instanceId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('enrol_guest_get_instance_info', params, preSets).then((response) => { @@ -343,7 +346,8 @@ export class CoreCoursesProvider { } }, preSets = { - cacheKey: this.getCoursesCacheKey(ids) + cacheKey: this.getCoursesCacheKey(ids), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_courses', data, preSets); @@ -445,7 +449,8 @@ export class CoreCoursesProvider { value: field ? value : '' }, preSets = { - cacheKey: this.getCoursesByFieldCacheKey(field, value) + cacheKey: this.getCoursesByFieldCacheKey(field, value), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_courses_by_field', data, preSets).then((courses) => { @@ -604,7 +609,8 @@ export class CoreCoursesProvider { courseids: courseIds }, preSets = { - cacheKey: this.getUserAdministrationOptionsCacheKey(courseIds) + cacheKey: this.getUserAdministrationOptionsCacheKey(courseIds), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_user_administration_options', params, preSets).then((response) => { @@ -650,7 +656,8 @@ export class CoreCoursesProvider { courseids: courseIds }, preSets = { - cacheKey: this.getUserNavigationOptionsCacheKey(courseIds) + cacheKey: this.getUserNavigationOptionsCacheKey(courseIds), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_user_navigation_options', params, preSets).then((response) => { @@ -728,7 +735,8 @@ export class CoreCoursesProvider { preSets = { cacheKey: this.getUserCoursesCacheKey(), getCacheUsingCacheKey: true, - omitExpires: !!preferCache + omitExpires: !!preferCache, + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (site.isVersionGreaterEqualThan('3.7')) { diff --git a/src/core/courses/providers/dashboard.ts b/src/core/courses/providers/dashboard.ts index 5f2a2792d..24ac80e2c 100644 --- a/src/core/courses/providers/dashboard.ts +++ b/src/core/courses/providers/dashboard.ts @@ -49,7 +49,8 @@ export class CoreCoursesDashboardProvider { const params = { }, preSets = { - cacheKey: this.getDashboardBlocksCacheKey(userId) + cacheKey: this.getDashboardBlocksCacheKey(userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (userId) { diff --git a/src/core/rating/providers/rating.ts b/src/core/rating/providers/rating.ts index 1b9104459..1b482dd08 100644 --- a/src/core/rating/providers/rating.ts +++ b/src/core/rating/providers/rating.ts @@ -251,7 +251,8 @@ export class CoreRatingProvider { sort: sort }; const preSets: CoreSiteWSPreSets = { - cacheKey: this.getItemRatingsCacheKey(contextLevel, instanceId, component, ratingArea, itemId, scaleId, sort) + cacheKey: this.getItemRatingsCacheKey(contextLevel, instanceId, component, ratingArea, itemId, scaleId, sort), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { preSets.getFromCache = false; diff --git a/src/core/siteplugins/providers/siteplugins.ts b/src/core/siteplugins/providers/siteplugins.ts index 20036c9be..8739e4722 100644 --- a/src/core/siteplugins/providers/siteplugins.ts +++ b/src/core/siteplugins/providers/siteplugins.ts @@ -234,6 +234,8 @@ export class CoreSitePluginsProvider { preSets = preSets || {}; preSets.cacheKey = this.getContentCacheKey(component, method, args); + preSets.updateFrequency = typeof preSets.updateFrequency != 'undefined' ? preSets.updateFrequency : + CoreSite.FREQUENCY_OFTEN; return this.sitesProvider.getCurrentSite().read('tool_mobile_get_content', data, preSets); }).then((result) => { diff --git a/src/core/user/providers/user.ts b/src/core/user/providers/user.ts index aa844e9e3..5b6141006 100644 --- a/src/core/user/providers/user.ts +++ b/src/core/user/providers/user.ts @@ -151,7 +151,8 @@ export class CoreUserProvider { } ] }, preSets: any = { - cacheKey: this.getParticipantsListCacheKey(courseId) + cacheKey: this.getParticipantsListCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -235,7 +236,8 @@ export class CoreUserProvider { protected getUserFromWS(userId: number, courseId?: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const presets = { - cacheKey: this.getUserCacheKey(userId) + cacheKey: this.getUserCacheKey(userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; let wsName, data; @@ -329,7 +331,8 @@ export class CoreUserProvider { return this.sitesProvider.getSite(siteId).then((site) => { const data = { name }; const preSets: CoreSiteWSPreSets = { - cacheKey: this.getUserPreferenceCacheKey(data.name) + cacheKey: this.getUserPreferenceCacheKey(data.name), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_user_get_user_preferences', data, preSets).then((result) => { diff --git a/src/providers/groups.ts b/src/providers/groups.ts index f2ce0b146..a6507bc1f 100644 --- a/src/providers/groups.ts +++ b/src/providers/groups.ts @@ -16,7 +16,7 @@ import { Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { CoreSitesProvider } from './sites'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; /** * Group info for an activity. @@ -89,7 +89,8 @@ export class CoreGroupsProvider { userid: userId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getActivityAllowedGroupsCacheKey(cmId, userId) + cacheKey: this.getActivityAllowedGroupsCacheKey(cmId, userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -196,7 +197,8 @@ export class CoreGroupsProvider { cmid: cmId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getActivityGroupModeCacheKey(cmId) + cacheKey: this.getActivityGroupModeCacheKey(cmId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -283,7 +285,8 @@ export class CoreGroupsProvider { courseid: courseId }, preSets = { - cacheKey: this.getUserGroupsInCourseCacheKey(courseId, userId) + cacheKey: this.getUserGroupsInCourseCacheKey(courseId, userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_group_get_course_user_groups', data, preSets).then((response) => { From 5356418f681bee29db086385f0270cec446e5e15 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 20 May 2019 13:12:24 +0200 Subject: [PATCH 201/263] MOBILE-3036 forum: Fix used WS not invalidated in discussion --- src/addon/mod/forum/pages/discussion/discussion.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index 3f4405bb9..d145ca7f3 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -472,7 +472,8 @@ export class AddonModForumDiscussionPage implements OnDestroy { const promises = [ this.forumProvider.invalidateForumData(this.courseId), this.forumProvider.invalidateDiscussionPosts(this.discussionId), - this.forumProvider.invalidateAccessInformation(this.forumId) + this.forumProvider.invalidateAccessInformation(this.forumId), + this.forumProvider.invalidateCanAddDiscussion(this.forumId) ]; return this.utils.allPromises(promises).catch(() => { From 155413377b518d814a2d8356979c1a2fa4d7933b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 23 May 2019 15:33:55 +0200 Subject: [PATCH 202/263] MOBILE-3045 ionic: Update branding --- resources/android/icon.png | Bin 60216 -> 28264 bytes resources/android/icon.png.md5 | 2 +- resources/android/icon/drawable-hdpi-icon.png | Bin 2510 -> 2199 bytes resources/android/icon/drawable-ldpi-icon.png | Bin 1330 -> 1193 bytes resources/android/icon/drawable-mdpi-icon.png | Bin 1627 -> 1447 bytes .../android/icon/drawable-xhdpi-icon.png | Bin 3380 -> 2846 bytes .../android/icon/drawable-xxhdpi-icon.png | Bin 5294 -> 4271 bytes .../android/icon/drawable-xxxhdpi-icon.png | Bin 7317 -> 5590 bytes .../splash/drawable-land-hdpi-screen.png | Bin 31329 -> 14301 bytes .../splash/drawable-land-ldpi-screen.png | Bin 10622 -> 5224 bytes .../splash/drawable-land-mdpi-screen.png | Bin 17017 -> 8303 bytes .../splash/drawable-land-xhdpi-screen.png | Bin 55068 -> 24188 bytes .../splash/drawable-land-xxhdpi-screen.png | Bin 76931 -> 31537 bytes .../splash/drawable-land-xxxhdpi-screen.png | Bin 103960 -> 41246 bytes .../splash/drawable-port-hdpi-screen.png | Bin 32184 -> 14867 bytes .../splash/drawable-port-ldpi-screen.png | Bin 10708 -> 5368 bytes .../splash/drawable-port-mdpi-screen.png | Bin 17489 -> 8612 bytes .../splash/drawable-port-xhdpi-screen.png | Bin 56768 -> 25291 bytes .../splash/drawable-port-xxhdpi-screen.png | Bin 79424 -> 32738 bytes .../splash/drawable-port-xxxhdpi-screen.png | Bin 105239 -> 42758 bytes resources/desktop/Square150x150Logo.png | Bin 8451 -> 2896 bytes resources/desktop/Square44x44Logo.png | Bin 2347 -> 932 bytes resources/desktop/StoreLogo.png | Bin 57343 -> 18809 bytes resources/desktop/Wide310x150Logo.png | Bin 8426 -> 3070 bytes resources/desktop/icon.icns | Bin 182124 -> 107680 bytes resources/desktop/icon.ico | Bin 29285 -> 105840 bytes resources/ios/icon.png | Bin 57343 -> 18809 bytes resources/ios/icon.png.md5 | 2 +- resources/ios/icon/icon-1024.png | Bin 31658 -> 23610 bytes resources/ios/icon/icon-40.png | Bin 1352 -> 1518 bytes resources/ios/icon/icon-40@2x.png | Bin 2654 -> 2746 bytes resources/ios/icon/icon-40@3x.png | Bin 4005 -> 3947 bytes resources/ios/icon/icon-50.png | Bin 1594 -> 1672 bytes resources/ios/icon/icon-50@2x.png | Bin 3323 -> 3340 bytes resources/ios/icon/icon-60.png | Bin 1945 -> 2136 bytes resources/ios/icon/icon-60@2x.png | Bin 4005 -> 3947 bytes resources/ios/icon/icon-60@3x.png | Bin 6336 -> 5762 bytes resources/ios/icon/icon-72.png | Bin 2379 -> 2550 bytes resources/ios/icon/icon-72@2x.png | Bin 4950 -> 4719 bytes resources/ios/icon/icon-76.png | Bin 2492 -> 2667 bytes resources/ios/icon/icon-76@2x.png | Bin 5256 -> 4898 bytes resources/ios/icon/icon-83.5@2x.png | Bin 5884 -> 5388 bytes resources/ios/icon/icon-small.png | Bin 1039 -> 1195 bytes resources/ios/icon/icon-small@2x.png | Bin 1891 -> 2077 bytes resources/ios/icon/icon-small@3x.png | Bin 2845 -> 2976 bytes resources/ios/icon/icon.png | Bin 1887 -> 2062 bytes resources/ios/icon/icon@2x.png | Bin 3835 -> 3784 bytes .../ios/splash/Default-568h@2x~iphone.png | Bin 49733 -> 22258 bytes resources/ios/splash/Default-667h.png | Bin 59727 -> 26694 bytes resources/ios/splash/Default-736h.png | Bin 116865 -> 49479 bytes .../ios/splash/Default-Landscape-736h.png | Bin 113084 -> 47416 bytes .../ios/splash/Default-Landscape@2x~ipad.png | Bin 117163 -> 47077 bytes .../ios/splash/Default-Landscape@~ipadpro.png | Bin 137216 -> 55504 bytes .../ios/splash/Default-Landscape~ipad.png | Bin 48402 -> 20256 bytes .../ios/splash/Default-Portrait@2x~ipad.png | Bin 117542 -> 48050 bytes .../ios/splash/Default-Portrait@~ipadpro.png | Bin 138982 -> 56701 bytes .../ios/splash/Default-Portrait~ipad.png | Bin 48701 -> 20741 bytes resources/ios/splash/Default@2x~iphone.png | Bin 42846 -> 18946 bytes .../splash/Default@2x~universal~anyany.png | Bin 147781 -> 65795 bytes resources/ios/splash/Default~iphone.png | Bin 17489 -> 8612 bytes resources/splash.png | Bin 108809 -> 55907 bytes resources/splash.png.md5 | 2 +- src/assets/icon/favicon.ico | Bin 29285 -> 105840 bytes src/assets/icon/icon.png | Bin 57343 -> 18809 bytes src/assets/img/login_logo.png | Bin 18363 -> 16563 bytes src/assets/img/splash_logo.png | Bin 18080 -> 16563 bytes src/theme/variables.scss | 6 +++--- 67 files changed, 6 insertions(+), 6 deletions(-) mode change 100755 => 100644 resources/android/icon.png diff --git a/resources/android/icon.png b/resources/android/icon.png old mode 100755 new mode 100644 index bb6b82176e14e5c4fc65972bda34466576cf235b..59ea30d89fb68bbae5b3342335c4f9e97f5a7806 GIT binary patch literal 28264 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 O(*OCGPS!!IU;hJ?w@RD< literal 60216 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 qF*z+TH7znTR53Id|}v00008SpY-(f z)6>(XrKNUuc2ZDKIX5>dC@3Hv9xf~`j*X4&?d{*-;i#yna&K%a$ZeiR!UP%Nkv3MJv}`*H#amgGcPSIC?zIJM@Z1j z$^ZKG{nM@ct!Db1M*5dM`kF%frda&Ji~i}=|Nj2w;M&KroUWsoo0*o5kC1b9c34) z{O{uY@Z|jd|NHyJ95 z$e8@Lcln7T`=e9;`u6_uw6XNmq+{c@BjAg{J@I++`jpQ8Tp7J z{^!#D(yRQvg!+Gg68e4)`=3hsn?(G@lm6hw`Gp(#h#~yRn);qg`Gp+))v^4%g8uB= z{K%L8{Q3Uq)%ko2`khGnnL+t|4E)5A{@}&=haUds(f!`S{J)3%z={3OrT_f+{mr8O z;>rBNjr_le{KSv|004tmRgC}u00neXPE#D9_5JjM-F=gg0tp_{;MlIP00009a7bBm z0000;0000;07l7cJ^%m#mXo&vEPruua&hzU^6|6dR3soMBrGB-CN3c~2z3Q`gYc($>+{(>E{#@{Np5OwCXgv6)*~T3OrJ+SxnkIyyPKxVpJ} zczSvJ`1&C!@(&0M3JwVk3y+A5ijIkmi%&>QN=`~lPDxEeC`!-B%*x8n$$!nuFDNW3 zE-6haD@!U*swgY3tU@TNt^v}ub@dI6P0cN>ZDnO;?H!$6-4$htJ-u*6ef>as!o*3F zr%atTea6g+vZPtFS?A0J8Z~b|T+xCBKziY##Y>hhV`W|LnOv5%0w}O@RawRAHE>01 z*8=HviR(9PbY*3oy(y_Id4DrdV9VChifsr*+kL=_%93`VDB4+yY|^gXL@3&`mk34s z_WKc5#Ogo!VpnJRMA6JAx2Db2mn9Ly@($BtI+@e03~!qSaf7zbYo>YV{&C-bY%cC zFflkSFgPtRIaDwa_=xBvhE diff --git a/resources/android/icon/drawable-mdpi-icon.png b/resources/android/icon/drawable-mdpi-icon.png index 9952bcbb54bd32644c493ce8a988808e9f3cd53f..33e7a52b1ab743095aca41ae23196fec82a1454d 100644 GIT binary patch delta 1331 zcmZ`%eNfT|07Xr#D>kn$myw~f4>k1%NC=iEAEstG9j2zPET^emmROu-%7^AhnX-wc zsmCn8wX!g$)f_u3y-v}{l7S!0GEanJ$q#-AKbZS}dw1{Nz4z|kUr({2bv=LES~~;+ zku-q3V%WvG5;X2z`jC@&5YrR);KdlWLf z*ioM4sUi0|+b1U{tt)y%W4vjs!`O30B9X}Da*IZ3s300RE(R{f*nS4;xeOM2n&(E~ zMH$GxhJ_w5MIsTbQGz#!P*Eb#^_{B>M6=-zo_Um;lP3x8Z4nE`L?haO~G zj5@RIscAxFdh-Z=FM$^(Oz+rz7HBnn0)H4=J!QVzUE!)YT>L(QfuM*X#qWj{t7`jd zWOF(^g#NbRS-_@Mv+hFZ@oWSFHTf@XsC(;j5C~gD7@ZOwI+UE0^yBH&JsSZ$76$;2 z96Ql#;=b7y7Zx=pk-QQgx{chAlun35l^H>{==#JdHa$c6*T?zyPL7*5Zgr*FRkqdi z6*UQZ%Dd{H@!VWd=)K24c|{zd5&~J$4<2kr>(R+nAr`;3%`<0fsLTg3yrKTaol}xT z$FnnL`}ON>ooacq>vjxAz|DR3*jwHXE4we)Uqk*~jd|Dc7E?<&OHp6Kpq7Z7n(ahx z5%E0bUH7H!)IpZoIp&u%*~2P2>M6_X=ay4rC%%&UsTFLFAL?47yBuMo8|U*jX2qmC zWF10B4>nE=mM|(f1oTnT6@N&U<+%JjjIZ_B=Nus<<>}S^%SrmH*+Kf?1jl7*3SYa0 zbp%D{MWK3L2QgnnFyC-Lyj<5lx)Whr2iPICqGMGWdnad-H$d>l;iIvBWWb+{!+8M! h834+EO&3?WAf0yqcMYpvUs=5vA}lz9exI7e`v+V;zRCaq delta 1549 zcmV+o2J-o*3)>8k83+ad00374`G=7qOMd_cVoOIv00000008+zyMF)x010qNS#tmY z07w7;07w8v$!k6U00mG3~ zh8v@40yjqSMsAFX@&{=66ZDP?6R*7^NTS9F4FsZmC?K_lFDbA~i`%knchASnynkM7 zr9HIJ(n7XXo@6fe>^tvyo_S~9cV==B5k#a*MD~kFAaftVDAz6#L5WBgup4M+e&H;z zU5Us~z@|#GnIZNo5h(!+D$Qhu2$YCOrCH1dy3zz53aB)JhXN{1V7Bldlw%Pgj$=xt z68U@{r4+5Ltth4Do`5h685$ZQn}5l0slT88OP9FZ-%lo+VPIg8`ucj_e}6k|ZEg2` zpk^e%#4*qpPcnPd?pAXJ^NKCx1@@ zthHpbS&kn+!QmrE=>7dP*=&|#v4}MW=Nuw}I0ryOLnH5OdzWq7-lMMW@qY(Gep&*8 zAfWe;K6-k3IC1P3hOhOLvPA+(W39vUJQywJ)>@QObap<=haZ2$#*LfseeZ#hzpH>^ zDd66oQy2iZO9{o*QFu)}pnCQV^5^ zwAO6dx|L6M?xePMA(V2sa|dvL9fI5iB+QqimRf*%vT0BEJk8Al+FVr*>29Qr=p zt9;&RzlM)N!kbC*;>zvcNa)e|uM{XB$^44_;dA^gUqN-<^aYfiTTrQqMt+KPx`xF~ z&7{+5j4_N93KVYM#5qT7V#ElG8XDNLO7nK}pDgrZgxjjF2!Co(J8Jm`R4R?joJ9J6 z1~)bUXdn02A>6s2&>h|PDBuoAX<YiTk@_zAKW+*{gz)>*Lbg+($xys$UK^ zp4Qx(D@Y1xSq;_o^Ed*FR-l)@Fns00000NkvXXu0mjfs%6iI diff --git a/resources/android/icon/drawable-xhdpi-icon.png b/resources/android/icon/drawable-xhdpi-icon.png index e169ccfe84819324e45073317d0f05e425bdc7f0..1503f3377bb4e193b2e38dcdf19dff15a30ad968 100644 GIT binary patch delta 2740 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%0A!yC{&IQe} zmh&s2ud$)B$)u_HEE>WwtnTovR`Lrba1b{(N5Bx!3UK^xC_q+2NX7=mtHu!ZUzYMG znX05>Nh&xaY*6~;{PJi}DE=^-0aie0BtMeXzpis3Pp(0@Yhy6y<=iyR$ljZ{fuCiX zppw{ua_CG}f+s{#!Cw+P&FW^vYY5Dmwc{y}-Z!_kkyx1y=9u;&CjO)xpQt@3xlYgn zpj>@B7~vDm*gZ$hpWMcx&-+3=UX#)Wf}$;xA!omL|379JTnF@0VHN5;Q{e?KyA~00 z>>L~%6%u{xL#iEMc?#@)4OgXY{PwnQOl&Os_3ICPe3DaA81-Q=b{-x#50Ch_;x;?& zG}2}cp^Ggn0UcENwL+OD%&)&fI5{7Xcu^=aDaU350jB%z?k`D#xx*scftWjD(Vo*H z1%<8B1xr7JH(kfe9F%HQ0op4&{`X=h>Wt+%Tmu6?w6v%{4-Q^kUCk*kPikw^`qtHz zhQSD=_RJ{{ypO&C)PA|Dv0?_V^qJR&LZN|2^ReE6L32S=csZD!>DCD)#K_(E=-@Ri!_%qp|b~xjwgA0CWQAa*m*FP}< zaSGW6Wrv-Jx(#4*nwm05c96E7W+W6G>Bq4A*$mDI22Rv@ayC8PaG9)fbrc+tM+?C~J9pOIO;OSb@W7opKy};iO6d<>4QcCc={U#17!c!mW+dg zL-XO!VE=#s#yH(>gdCVJ`AHb`J9k%3adDhO)6>e()2C-)t>b!@JAq3>LdOoyNZ_lmJkk@KrksE77kd zR-Y%T-RL=$yyQb~fqeQwaG_K#jWEpl>EY<)WKVZDI6}C#-$0-t!5A6&A@<(W6&~7BKIw8#f9&kzFZufoI#}1m~0F{{;Vx9G5ScUp?6N~ zD(V(48m9R@A(QXoE(}Vfm`Xbrn$lXF9%Eih`q z@4f^d?i@^e-;|X#f8&YK?jAU7h-(eK5cZg@%k29Uzdpg6Mt{lDv`!pa{4z-+{Td@` zw_X~reS=l14Y#Hqf((0kZ^xLSKzIZLT-)4SsU3HGKx_%6rKP>6wD4Vu;plFjS9r}T2W0GJm9w~$ZYVaVkQ7qHr}iK!Bxte+m1aNXp|wS$7nR+y=5XV|xr~PO zK6=Z?8-m!JI_>SzT3Lcb@5jO^Ve8%5-*I7M2Dn2{#%11;H7bvwt4`DOZ98G`({bu+ z3Hqyl{^-JcPB&XkLqpZp$IH8_BqaLUeYr@ETlIfVcn2>a{gc&o7!L{x3NB?I=jQ}x zQD>^a1y0|Kt-3yIT-Kzr6sRUr^8@~u+ZJ)3KlvwouNGEbQsOdQ=Lrb8I9{o#tE+mt zao6UG+S5Of&E{Q`9&o;Vh@0Ij?tVj{B|S_9?x_Ig+wI8`-Yl9x{3+(eL{P-)%9Hk4p($jou`n%`;VEczu%{otJFz_DFSe3+J_6$0P zh^;>E$&`I(qp~b$diBx#UdYSY{gP*VOQ&r!sn)VtS&?nL?_7f{XjY3i{$|`f3$Tx8 z`7v&G9jm2Mt>my|kF%a|DE}yYQs&zest}|!?}y8DG3o+GYiE5|vW7F)$P*p1epOmg zt%;Qld)`)YK4zp@W3W=<7b~g4Va5cYicyJl+Cp|1M-M*pj@bz}VjJ1gqR1CI&R_jlN)m#@bq0Hga^mr#(Y1j0QRFf!@W-BX}6oaMoy67j| z88oaC&g%rM>P|QRjP;7}IYGlYd?)*>I^;;_X!F?b?AbY(v2pcP64;4>9~b>FI{c zi_=F)WK-@YJc^BRV((hdMe5}7Eia_jva^DB_W|t+{~&D$@l0xf?efKWTkBkj+7iNy z;*th?YbLXgtH+*Kba`(m+Mc|9zWCO+Bel>t%SA1dgp&q_T8IgJp$

9sI(Lb-nb& z6e%GJj_nv5A0HhVX>SZzw{3bVnUIjsx*un*_%klx6j!Mc_VrwzsxPU0gHP9WW2RL+ z^l18eyUMxK?;dkDIpm(LX&sqH(u1ddC8!W}o;uGajmJ=Z*N5mIwO6qLh9fwkG=tkW zd<}{DdQSJ`K2$(%Qwe!$P4&P9fk&V_C-O8DigeFP-Hz36J#uWp6x@DqVQHBfuJod& z!rH4%{djXyTlyN7frhg(eN!xut*QmofKV84+iXm>`}ja-E??7{HB8+PF`!^3`>os` znlkHuF#eFLh(?UnM&vHCIugp^L06YvlJX?=0C<%DO*m)akOz+|+!C`V5K%>?TCiB^ z%VlK3y%5gawO{QtoldCc0tIoi9Pm&vWXgp9Oi;wEj1FxiG|ThD@I|_0u8??t=^XG# zB2=$WGmr6tA-Ax{3UcFKELd6}b|peP{FuY8dS*XA&<^MF81ZE&_F9Uhja%52qTMiH zrDw*)MHs32n&q)7mi~-Z9eVHSj^`08?U$us1oMd@saqdTej#0S4s3B?>2yDev);&b z`v%q*%^(gguBD}(RE&CPBRE#F-S95iVR^d&acr7iYJriQoMtB5^y7#tT_;*qP;98d zZw11^v2b?0OUhY6bUW}WzcP!Xg?NehHXCGYeZ=vxkSx%NM1l zXxm)=6e_c|oGqbLK_hoZM@K2}M@P!%=jV=HYD9(Fd9fuyQn3*qAI}@b`xfrIy`WdV zsE7s!(V&rs%88`v*(mkBWPl9l^+Lu)0T|W6t^z@ z5GE{fSW@+m>hJF#`|%^E_M0yz*GS?fS|f<&j+4`1?^|&hN7GtlyQb)8b>$a+Ll){L!_jA-3O36ohGV>g;do4x1nfTN<*E7 z|GYhT_WA9j{bd&~P&f{Je~Gn0(mz};BeQt;u4^@pMQ&8<^Pj^Nc5mPgh%o?nqdnl- z2X<)2*vQ74ByHZ$oI|f|8oLuq7;~caL{h1ja#PL?@t(|Eu|bdtW#)&ETb(eDd}({3-TK~KC35yMP9y%Q z|8LjxfA&rJTQ+=jl#-~TadSxTyCUE~Fn4s0hl(`nusN~atgcxYHIBMp&M%AR?!d1z zDU&zP2gt`%Ez-@syrwOHav}?Lgds#YPa>SC_}(;xeayoTqN2uA*x^|~JDbGzJFtbZ zwHMN4t#|`OJ(Q{{u^DY&`NY~$2^+u=$Q5|K{_DCso#0o!IXA?z;qt}ytImkKNU|CV zQwn-Ots~593vE6(j+aK!M=@0EOO>VDSs=N|6#+yFMKbXSu^B|3Jenf?&u?9&EzUWG zxgv%I@eIXF`XrBN!F3QHspSU<`s>;HBkudVLLWSFB>_NAMpi{qMnO{U<{episEjgH rPEK4#1}Y;Hk9&mw9|E44xYq literal 5294 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 literal 7317 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 q#Kq4q$+(SQH| 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

5_#zIU?YR(#>(V8lGES1d%lrG1Vwr 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 diff --git a/resources/android/splash/drawable-land-ldpi-screen.png b/resources/android/splash/drawable-land-ldpi-screen.png index 4c5494c7e22f3f6358c5f1ac0bfc1db1542994e5..c043d3597ef9395e1a678bd4c8e827a6a50a8c82 100644 GIT binary patch literal 5224 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 JSL;G!{{vAInM@DiMB#IVc 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 UKx>-Ei35O#>bm!9)$Ahv4+63f)&Kwi diff --git a/resources/android/splash/drawable-land-mdpi-screen.png b/resources/android/splash/drawable-land-mdpi-screen.png index f407585075aa03d0894c3bb3fe24045a20509213..d5eab5c1d5d147057b2a7261c46c433019602935 100644 GIT binary patch literal 8303 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 literal 17017 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 E0GS0McmMzZ diff --git a/resources/android/splash/drawable-land-xhdpi-screen.png b/resources/android/splash/drawable-land-xhdpi-screen.png index 20ab9081db2011aa642bae9fec9c9e6200a92c0c..0398df2bdae7435fe15e38b8701cd7ea6c0ecc5d 100644 GIT binary patch literal 24188 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 diff --git a/resources/android/splash/drawable-land-xxhdpi-screen.png b/resources/android/splash/drawable-land-xxhdpi-screen.png index b9183d9b5723691ba1a75cf66716d42078a20c47..bcb36cc1286c905261c9dd41697e91e5ccab6b06 100644 GIT binary patch literal 31537 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 literal 76931 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

dK^OGU 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

Qks;8O8Z}& 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 Tg3O8zFhKP6jL#J5p1<`!jjWBd diff --git a/resources/android/splash/drawable-land-xxxhdpi-screen.png b/resources/android/splash/drawable-land-xxxhdpi-screen.png index 99d09c9f4a0f33ed2b6700c8e7052a3b79bb9acd..686f1313291294d7e486e32cce8f852e9d647516 100644 GIT binary patch literal 41246 zcmeFZ`CHQI_djkkl{2}`>(#5YajVHCE45s5m$u1J!BWZ0t#V6E$y{&)YMgYMN(x*O zMQRjH+)7i!jm*+;fx<0ZKvN;yP*G73_&k|;|N8v{zSlKedGS=>=6T=uxzBl=$9bIY zUx2!(?fQ9_l9G}d`21N5clr(P@HeGZC zUf6lv&E+ic3_Lc^G^2s1A8(!ajZ;!m*{%55ri3rl0zR$;K6}bLX=GlSTo}UhHQtcX z?|-a1k+VLIt?bKE7+8|#|NZ#bwHsG6 zitegdX=xt|eEBFk85io78yXel76mI`x6b=R$OirL%aIE2+J--SE4?@Z9?tVpNLZn; zE%s~3;3k2WT;b{Z_y1hJ{#^;U zd&T3K;r6$GUnnV=9#B%OB=ETL<2GPT6pxc`Kit{&&*hcV{|@=@TK;Q9N=pBpo`2m2 z;1mD#m;VNeeUWTO8-KGf1v^34F1h1{)GmB8T|hwhrGY&Do}*5xBZ^@ zlI-P}Vls}L@*DC7*4smDLd4P09SlCbWHB~o#LHJN>}Y({GBOhxy?LD^=x1h z27<3ll1<9#ZH|Ncc*Z7nS90JKIX7EZ!-#NyQlv9?>ICgQet>}jTUZO zSC8w2!;Gcrv`)>CuP$=?LB1tsTmxVu4*s32-wXgqd%&yg%cfL5Y z`0m~5^~Lc5r_}Wj9-Y8yL#8&sIYpWJC|iu<%6Y{&t*N50xuGgnZKxZ2y`gc2WRB#! zYG?xE-3i?f*y)|)4z~l?2h-UHzvq-j++Lb!pJ&w>HzNe}p(?++=+TCotXe}62aVQ4 zu6~~9P|?S?7ZC^$Du=PPm9}^9Ugkn#|J+(FN-Ex3(vaUmEh(dq;c&PIql%e7YgO=1 zw;t+H%;4BA?^QEt+O=y3QrG8cz~I79XEZ_;x2Cx3n=GuUUqgt1-O73u?9vc3jt{Is zd=Wl!o^1-;O6$X0my-_zt3#Qu?OB-u$)=L~3)mr$tBPst{zE}`6_o-LXsX6Jp146M zDCo)3b*K&P$-T*LvBNlvZ=8U$3!4RP4h1%FdK*$w8#P>g^ytx&Y;0+Srz^OuANWUm z|Ng9zv9ZSJ&=bkU;kB;}s%))>(ae!9`roD*J_yp3DI7$hmSRRr21nIW^=t0M^;@y( zqkIzQzdQl^X>W#HKD%j1^0^F5nQQ5>a?e%;HNPdCq=3#s*j#%#V>SbKmQm zZs>-xa8DK0n@!fGf5a zQgC8s$PeCE3Mp8bNY@DK%F<;4FC{LH<)f&?`}gn1H;;dKnHU*4`;vF%XERXXr&KE# zjFgRKu~?4sO$MWxy;kjyTpN7AuqL1X=X(_F;2pz5x{Ic4CkGgFJ|Iku;d;;HWtx37hosf z5^55?2F-z4yuA+w$i=rmMn!0)hScAz8SXiw;gqeI#ri0mQPs%COBS2W6HvpjzM)y8oL>1S00OOdBRMQrWnQ>ZZt8{okpI(G_m-Mr(1^Oo4%liVEv>gjY3HCQe(3 z3hGfTO7mjVkyOzl1Tdk1VSc=Qeqmwn>gwvXQ-U`g?1O^|ty-t4Q@VnWAW69VXc-aJ zl*>?zs&fulk&{uTYA!C@`0UoyIMFzQS6UF$tx4VZFou#WB(HvU(H!n4;PKtSGHa+L zxtZ`qk|P!wpHcdbNym6ZGzvA}g*pmH&iQ!_*Z(uBV+L>%?hGZhtkWgy3q87su_sYA zttW;9Q=?Brk7NV(Q^paL_4AK5BtQYn@2pJ}^j{oK5KB?OLB72<=))Tqpb*t>zW({) z)h@KcN7-T(BTlhj7z&vuS0~!jDI#{NFrSfTG#rGMUMC5dZxOGv1g@{+QNJVv0ETV` z9Oxbm*@Ol+6TOic#{?TkY$~|wx5I{jg-yIkc)gba3<0lhT^~tXuOs$BY{vh-u?W1v zYKQ0*)~mXY4EJsSq8XGH%N7=irXRu6g0VOL8D;l>0Z)3%-}lOb!!9?(!bna*Op^(5 z!5ZlkMG`!jZKBW5 z--J4EPH%nEkX~pLNZQP!hAP1(GcR|AD+b(1QMiZ7NSEql2M31&z}LEMcA>Yr(iY>0 zJ?R?GPoZUXU%uMW$Th10k^c)*Y$afD!j&RXi*XHdAxg9B`Rw1mxlF;wza__qEJ?l< zW4LidiNEv86U=m{HoSLnyxG#uj&j+sKqshO@DcFCP2(|tJ9lH$SL54@6rNd@%Z3VY zJ8!)dtA2IRwze-0I|dx!&2KIsJO;H|OyL!!Dr_E@TxCG>`kTwcqGjM90RBVB0D%N) zJO^PzW2>o`mlqkOFodLYe^2bqXZzOTiMnj;D4gn~zwuW2cAxd|G&@xQ2^h|Q`t)OO zZ*Q#bmf4^{By8b1nZwbN(S9I62t@t-_)95`z(7j2Sw8|t>heWW_J=ZyJ6jO!GF55Ub z_!XUWrPr=fedYzxjI1XDK+@ZO1I2_{rd1odJE%5ex6ZIdZK9ceqAWfUuohr9`Fy@N zY!LrRbR(rTQ1N1@klVLOAxbFziL6kJuRQ5!_qW4o`_kIpRL#bkb>`7Pf2=sinQ5gu;7D=9GU#_@Bf1WY^ob8&&S(_c>TGLw7l3^to~w-L(w|I3($+|lfs&{GG zuiMLX(xDC5lKlMqG?|ddFyDG-KFveRc*0p9YD(;Um(_MNL)t~NUJ%3L z`d;HvL!FgYOub=Fsf&tAfq_tHB2>n0vPx|7R=J+|Ku>YUa50WtbiN4(MgZOlYHf#e zPsAj(=F(%K^A|$+I!D#^;@an4ee%e6c-pJ)Z^2Um_j@o6U^e9rP@`~9 z2-J`;S?J>uBRFecjqz6R`9d793o+sSxo$T*hnSWafk9yS0TL)pZY?!D5bKntpNOM} zFssxFLb7q46R-w16c%;#!NsU4GTGCWwl*9@q)JDrea6nq_vgnbmO!ZVtqX%xj5vaF zD8MSvoJ3=|AlXb1ow3!+m>vb*jGNBC_x6EikL8<>ZB_;?!?DwtM^#a!4mt5g8Jge9u=zMo2>iTttFtd6g{&5CFy{fbW+87L@;z4* z{=jU+T&+KEyB;YB8!+nG5ber}4eGAW#0C_2s^4_ut{cXsdhJ~|7N%muPDF4swte(w z`r_OxJ&cCbxe1X-a(%dwanRG0DLYyO1DY_qSv~}}{pD)J;a zb8x&pIruh&Twb3Z_o1mDyJlR5FG?wl`?ZI+nzX)#DqF?X!aaa{!3AiPvg)i^jixNB z^~~Gi%$RrI%ncy85-@Dg1mFcMm5$sxM}EX`O;}+8lhhe|8vA<6 zFt!­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

olmx??8{ydARNVCC#;Z;sitB`lQu3z;{Cj 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 z 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

rplSLG;a3)6?Ey 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 V3e+VvLr?*^pk<(0s$m!Te*lJwgZTge diff --git a/resources/desktop/Square150x150Logo.png b/resources/desktop/Square150x150Logo.png index 9d9206792eded766f2d4eb7397cd219cf9664ee7..95de043c2cbd7d1acb552b5d0415cdbf209842e7 100644 GIT binary patch literal 2896 zcmcImc{tQx7awiLRJLY9mXe)l%vgso-?EI#zC=-sjwN?&sWd&vVZ`=XuUO3p3-xkYf-K2y_@@ za?XmwQ~wZn4`-#gPF8c+K2P*TGzj!6>EM>je$M`ctBKV`5a_ln2o&=d2(-z8Vx~c$ zP&f!Q>kI;+(m^1hpsZR;U5?_w_4CH(K)ZitPJPj14#E>;;&7AWt?v(U0rHtx4#*vX zxoF5ewqJ-(OgdrDkS_=X(Z`%a+hD)V69X?mXGGqPJY$Na>K~K`Cvs!uTXNpZrzT2B z2<%E!T&zg{)=YULyn6PG=xNnQr4MY!a{V!mKENT6*xzf=|e6}9$>7js0;Wt23_40sn z_dxD(Lk0Qdr6nv(baRri29irLz$h2KdGG&Dk>7*jQs>{-7(mq#aduRI?qg-9_4{eih5{(eO*T7QFABwq4td=6Bqb#;l+LwltSKI@u0lP|9jNe4+T)~b`O-;mhwvIrY9%otiEiz(5z6!^rHrj z&?D9Ze0_b*&69pSROJ^G6kMAh&?Md>kp%@H#>U1RzZsm7nW=pAJXWWZ!O*$=%ge{7 zq&MFNq6}MGUA_7yc;fv7(XfTVrQ7u`i`g#eM4hmO{#S8@MJvDT_u`X|>j(Jx`FVL^ zfB(!4w(Rcd;XAHZ=hh~;%KZW{s}MpP3JndduCAV+pEqrFq}`g&J$pAVKi^iA82=*o zWqEmdO-&7*9*xCbnz?j}vB0Ew&h?f<4U6GbCI)D{SrMh8Vxjx_c_NWGdq@_Eq?DDN z($usk1_{KTgy`t#l$Msx&CNa4!i0;^tn^>=IMF78a8-J3FhWq$JLJw?>Lt z<3BK5A2E_eNx$(EM#$^$@5fHIKjY?;@H#_KB@hS?#k6C?wSI*^ccH1FRAy=bwS@FJbN{O9KC+|#E|OFkWe!;d|X zGbgpTw`XnnV+3hr@U?8A<2ynd*ey8potuj5B>Af{+>(c)E*8iS;bhWGPf=!Oruqd< z11l@5o#lzN_f=IqyDEBhv;JBOxM2OPMlT~xoH%WH>er8!j6)hH{=~hmZfkjhkx`J) zTC{)jIBr=-c5diZgG>XJ^*U(#V9Oq>+B)UI_&BIg>9UDCl#qvA8f_^lQ7q~y4)(}> z=^VeVjB6M1)T3jlPPjN-8RoS`Wvx z;$3tll3K@D;lnFe_n|ojI=4zVJ+rvT$Eb|3h^%uCVdzpnqUGL>mv!xqOLyN;Y);WX zx~$uP+ub=LXSQ#kS{kEdSN3xwQt^;$)}DOosSy}YPlU$~YCF|hF;ZwEjl#{%edNdy z)!H?zt|FU(NN8|Gi1F<31J^y{s7qAEeJS=@2t=&?q6PDsn9|b;+I1#aF%{C+V8IeD z%K_9GPgPMfSo&P~CCloBJCfnMpc+}L)(`0RWeHvi_rFct4$eFvA3k)eexY6u_tz?NEP@@U)KP+{8d^~8 zsu(p)Kw(5-Q|g8Hl`lr6$m^O1U`XqRc`^65wJ%4emiVghH>@K)DIcO^-5q|24D*c+ zYV)|Hix(Ca28___3kxUvU%5IsIFRXvEuu`@?C)V0y9Nsp=eVmh^F~wNgf=uMN_~4` zC7+FIy%8G|PIr2u_0x&%KQ2I7|$+M-XQP{-K87H!^W zu*}?ciwJ4-5Fd~rq%a3|6)EH%Y)6uUd8&*Hw!mHBnNX`ebLQRb5yzdzy2CWiU%rFi zfeACcJkYPmtASc$oyxowT%V>V$wC3d!?&$@XU9%nWW3oGah zr-|#kH?M1|Iy4R?Fx+6@6$+4PEVV|9>08$ege>$bvz;A|UdxT?NhZOXN&aPRZjZUb zsXck^*Du|OwNo*}O&}OdE+SeVqZFkJp_iB$io8TLd*h*((U0u0E0Y)h zN@n`mDdO*mu#Vn`A46Pv6}vmCNVpG>rf4*p0H8S7CxQ_6y)00vD<+75C?8FfCx9gl z14|A7Xd~8RIdiAF>G}DuC|l=XH|Rrsmo}g35}fieelP;kI){io(eG#aRVc@uXMyStJ? z5dcmTo*NVhe5TkX5(rftN3hCV3Tn?TKn?5f@Y$V=je!;x6-`Y{+-dqC{rRq4+LI?S z9LWODi5*F!AsP7zY$M62%+w6*MO}6ljKyv?ba{RGBNndkY1K*oR~=1KWl~q-Hyc?V zQci}&sSb*{0AMMDGeA4J8qbUco$R{sWm13tKmx&Tw(kzGJ)vfB)7jYc|J5@6r|xSC z_aoyT#{7gop3_~*gcx25adQcAN4W;Oa~KE#SJhUAt1BarHmXPzQVj)1D8UgZI6Ol` nmh~?N{()}Z9^wCHfY3rAHU4Q}DiS-!F#ur<&CXQ-&awXh_uNgh literal 8451 zcmdUVWmFv9((XX8!Gi@2F2OYn?#|#cH~|KS!7aFk;5H-#_YhoyThQR{78o=@(BR}F z=e+lP-@R+y|M&JSzr$1sqIrOaK6YqogRS^)$o(4h*!XyC{4hH~kpH#tn0Dvbq0B~Rq00@5o0A9Fc zwrGkz8GtT|2JQd=7UAE41jxuF1pts{?Q|d>5U{GSCCrKQjTOuS%IV|e@`Qe(^bvkq zIzc_&(D*nxI=c(|h|&EEA^f!dtLCDk`4_~)L5vOp)}WDrxj|_JIQcob>BKQ|8wTV9qpusfzqN}d@p&yiN;rcD7S&#d-V~-?QM@}(iFB=;#FE68ltHO`R`+*O)Z`bcGuR5+Sf0_d3jt ztIZAY&+?J5^h{^$u^P+`(Eh&?=2$-K!oq4{;RpKGg+a5GI7LX*q(L7u#$73|b7qe8 zZ(C4fPzsS#S~x*kd6TyqpG!*6qh*ncii%{Q&G}!=T+MGbu7`D8X3oO82@?h;7Z;=B z<8kZ1e$6i`Lfsw9>bd*XnXt2CUH3RtW!C)+Pdqq^I`H~EvTf-Q2|pxs09_FiBSJc0 z0~cv>jfPwV1|1G~-ws1soF%zYjA5j$U%ic=w^}Z09D74w_tpthqx4+uw z52uCD;SzgNsBM#Z1elvtg@FS1+mb4X#y8&Hf}F-p=H;VG((Z@Xu9V{bq<6oMdVV`C zpNtiQ1LsuW)8ynDng-FE$pkvOx<9%epM6*aQ6xw_nymQ!tYGRK3o4Rflr#Qnegn8s zF(?T6{N)Rl&3Ja-_Y`JV*^|Tdge(zni=JheEcNzHTJ+1Ypa1Zgi4o@e`v0ElAxuq8u#)oUe(^fe7a zrc2beh#tyHvi&fx)`KL5hKJ*(#Zx0LhMT6~A?R#Ws>u7G)>^T*zs-ktMt#ml1#1pw z_3xId-#MIsxSyk*RMSMlE|*P+AHj(+t+_E zNITC1^m-E=UT%Uc&TmMbh!H=a(J62^+(T6ag`!|B+#GX?-tIM?4ALi<52gD3g23NA zd=|ent0!QozCUK3Rew%Np60aLLJVs=MKkp~l{;jDD94a+${vLSF{V2SB-_RAdqo{m zF=Ij$&G&P>PAoTcX{}eweeUXCHMb|n-;xMlD36QZv5TKZtK%=xEnkww75*XjuJ-?# zikU(qB;9E{E%M9!5*8R{CVq#NDeS%k`aWF@mT`3ja%f?PRz`6%61Zxsbh4+LWDg|3 zm2&rZO;AV@Cd8pL-cqE7+;o#k^Hp$WKsW#g}n=_wN zdYodyz0&V&As-h#cc+waMUGj_O<|fZcvrw5H-@0@+jIQsGu@E%zQcJ;Qd)x(Nu`Sc ziBK+3{PRHhCt~g5%u{FN)+oKxXy)v$^v-+e%*+h;r@V2mfF8PSD5-X}e@wD{7E!8y zddNV7!~ACRZuY>>s;a)JB0+QI05Q5B_?wPag7U+%68pwn6pgKfZ-m9-fn2ura8fcz z3eS7W~lM&HRPwR{@}~% zjPPEjYzsmFI472b)ZURefT}SjX-x7)QorFo7e=&_)oM5%bfZ&S1=o*w#Jql;#-a9b zbB;VGnTxQ3ZSC1_R|UnTo0$TmXjDHf1zWtfb$Fo=VB+d%E-2U&xAnW$c|~V6z+}vB`)m#=WVApR#N~PG6ER*+9XHFb`pw2csJw1BTYgL~K>q`i{kXdmX z=8)%`QzjEYTnLm2=4ppa%~p~j88tfhyieEL07qh$u?@L`w^ZxVhvJ0k1><{LFpU+u;}(Zt{jl!BH+2PN;^oQDl`4 z4`F3U-!#NjnGrOO$T%R+1o=_Is*G&p0~^{Z3Pj6d;Ph&uYbwUKUy4BiMb3(gRnP84 zAE($5wRbOxW705F`Dt=rJFmP;*DLQDtN5hZ-7iy*2|nCeT3j`Gaok^POR*{SwU5SxLJ?G579%Ntu}(<{^#hYThsW!IfS7?482_a!f4Ic~2(omE``ZPvmFW_nPstW#j(~*ot93Qm3aCMVjd-TV+ z6t*LO0!}Ys$@vs5cQbfJoMUJSPwd-3E#@O`q0b${wR{zU`^#kIY0tyb%3OrHGThFP6?_~T-RC5Aama_>^Q?;{^d(u3u#1P;mSS<#@E$r; zeY?e~SEYJGnP(;thYxnM*Z`A`vrcOH>M7x0_N2aKHz*`(@~^g%`rr{JBqhl_ul@sj zoHx@>JPs?fTwlj{1-)=gS5x!NShLeE?)~+C$!Q-~z;{Zn-1d{mo5eqUM`!2vh_C$g zu8w#s^vge9u46aeaKuY{b#0r6&z}2rb;rgp*zm-Irch?e)+6~`UuAxd*-$lmry)b1 zx#V}O$kbhaocb(1x467JSx$rZ5q;j<_4Yf~7d^|q9jd0XHX=bdb2UCQkC;DlpBmoU zuZrHvc=B>sf`yU(0)%FXM~BY3Qc`NB2krfrn60Tg<%46iN4-Is=D1w}-%&S!&PuVr zG52@n%iQqk2xhemM{Ax;d*L_vzkgI)zxKJg7yjNN2RbW9;Ot&f2yXl$qnT}&0;e@& za8|jD`zek+7(HJ~r>-9sM4TWOE*JrQu!g|`a&sNF=e4HN8*x6#<_(GX0`(48c zk8I;-EfnTa91mkR+t={vJn9`j7iqDoNtV9l(|ZMcj~05U-D3ggJRm&^a#%I;Is49hnpWlCS6>jK zvZ_(brcAjScFiUsX>lh(NaI|&0b$`?Mno)wd0Ub_eBjf|JS&ZutUFQM_TP^wYv^4> zAS5v!#q831#Z~lehib@zi)^aFMUb%{W85Tne8?(8R|<+5pvJQ}PoLeo z3U>K8qwU)Zi+sROEyJ!F+>-;P$`|?XsQaq?d?i;E66w=oHDS8`2>?5 z9x~{QoHFRQIRx_0&nbpwIe=cCx_OB&lIBI(MwJu8UgklC-EWD6MV82_wC3kwqoQ!D z(}l;i1o5o&zSio7K+X=qB2=?KQ#P6xJY!I<=-)>P?T^@-<3atTbR}no&NgQ0Op$krR_v?4(_x5 z%ChS&k&c=qwg2W&MBQcT!qB5E3rx;UHj`Z!F_5TA4kX*zv<$d3Qi3b!6}_A5^9cIx zggp5Zx4lwxPPr4hUC*xv){Ct!#eSIcATwzBaK_Nsa1!!P=I&}zs-#Ya47!?nfBx3O zN8=J!0A*S!%Hmj9@}W0v?(S1?Fq7B!0cO@2ZHxrstMzCx%srB2wxFVvePkSZKE$k% z>}Q_OwKL%t$vo-jB#6dwe{+d3-uhj;3Y0N0Z2v%)?3u@*{vU6^ms%H?%G^32Z?eWs!rWCz$(yO^7a0LbGfGCFrn8y&+zDSP(6i`4H`N*l4V z`iPr+yZ!ww`=wN459ReOc=NRMOYU{jMx>3sG5f2!ea=#Qg$HZYGYb^4%k*aH9&@O} z&l?_?ehXx~KnrQh)=TH|i1E$U3J32hJWWUGZxlt`hM+|#5#^y7>d;qq`yv-hw226t zS2qP6EX><-!)zm4hVOOlDqATZ^R$8%O>y0sytd_daJOR$Y$4U8K_VqU_ky1(8Z}>d zv~C#5fe+M3hHeN_n{WxHJk*|gvXRN7pjio!K@l& z3EmW)gDg^snzXgXXXA)EyWXd7C^-z3krt~nDMH7gg0@G$br>#7q;lv8)F;2Nm5Qop zw)9gYAV_eRsIm$YQ`y9xmP-kPsqj>C zEG8Gky~F$3b>fW5WZwr)odF651=0pEz3#IlJK3Yl-wqcB$_nkxe!?VU*%7}+g(De> zt9FrCk>nDkv7eWo5`(}efqD6dOc=^kgAL~9iyjU1$JU-NyFL4_jiLn-x=lQ=q&{(T zx{yJ!_clm4s%NcQ zG-O(l2qDUJ`1kXU*tQl1BE`7cWl>Ql&f`ypAywc2yt)Dk;4A})pdnn@W-0_F-*guf<+}oyWhKDETn& z(3yuv{vbvcx}62#F8!!Vj#{8=`chyuoxCMVPq_~FpoISeS?2r7rz1DtF+V1nqRBYK zZz$&$c<*&b>ksZd`3|^&RYX;;uFlY!x0f_tqwTn zTsb`zIeC%rKf_u2y8MtiOH}XBPZ2)HD=^}w1ESnkP155L?uRo4^T@q43Z?1rzJ-4(p(7^?e0 z(D|gg29#hWr3eIFRrZdskzSaWnl7ALR~6$u8Rt9vGH&%0(dnX+jX=w}234kYb?xi? z^70wkP4z7MofOg0rXR)I*ZV<#h$QZ>m|e%kys!Gk5Pb3^0i<~%L1TB$3X2~+Jj6uy zUwnGdT7_J_ZBuH)PI}vMB$bAp^5KVs3_s@LMF0`ONe^-=Gr!HNZ#kPpnddf5S-3&# z?|3LQA;m2ga&Ga?=eRRMZWTr(bXE(*OcaUVgn+)ERA0p%I1Sz}54`!-Oy5+sPhC@R zRkuLFCG%F3O!?+oKUJ6oem+WvV{V)Tdtt$yGLE3>HDcdM*$9wcEkFc{JrBrExyp#o zk|tZnbl(CCZa8;f9LZ4Mny(vsDeZ|oB2QwSoKX({lD6ofD)eVm_ZMhvgqnVgaho!X z__8teC*J?8warYGo9Jw#%W5GtfBa-Bfv#qswkaw*pE2t@F9LRBNb!|{i;E-6dbO#f zF{y^La(H~G_JgXLfNVB)xAIG>DFld>RRI`4rPky^bTx)1ZrV<4BWwYhGl&W^ne`|y z0KMdrbEgZ%DlCr4A)Vif#!ZhpNA3v`PkYnR2%Nqg`S`ML#GsDb``Fmnebjj5 z0}o*evwA+yM4ECmuVbmQjpDQ4O* z^OXvI#vdeD)L4>Tvc-%E@7EWGj{u9-?0iBs8p)hj%T{Q3qI>tkYSB9pbk+UbP;|ZU zfR4!S7EIvcV2bx;-&oG;I@ z+f$~e1u>29LY7L)jqb>GxPpiXj~@wjCTwC{jO?}Eee>Sb4yc|HHN+F(L{jf*nQY|g z(EA!7b{@qFqD_cl#G5cY-C0$Xw@~UKYVkwb(kyp~HStg^ko9s}WZ)y(jyoS?idR|! zEoBZC42)TstYG#4)u;z&M2xcV*yjZe%D8dDLes=f?e&b#D;H)bLn>MA<-w;s*_(QcYewyV2S=svXcX+Ll4-kCe|kl51_%nzaY)n4KsTkN8PsrE8U^u%#vh z1fAZT4JPpyD!{dM6^5_m;t#W}y%kw%QB^uVYFkTFd6aq@PX!T~Q{7n}!EUF%#UEC^33?dr6f?~>|#=#LWrAV%oJ3Mvj_2OXXTR_6L98`H$ zjBq8Ea9D%e$o{N*=z3v=&zk<#1G+e6!_@$#at=7#AcLX;Ve*+39DG`%6}VSO2wH7y zy`aBu$ve?zG3;&=uI!ABEjq)Syja8R&qhe!)(P@*%94Fnj+_Kri5VVI?Wbqy3O#(x z!jwNkjcj&woAl%y_&uC5YG`e~k7=Qtxq#<=CEjEc@4HL-*0=pU1D1jIn!$wE%cL1p zZ2w>-r+jUkV>dW5lT3%LuN!Yu1A5rpG%@(2JfzM3CF`;~1VqD!!&D`DwZK^*(P-Dn z-1duYTO%#$XPor+Um7@8PN~UmeiFP7#V8&47qoXNoi#x!{SJ?LkGxyYQpg^*R2xg3 zKD$AU7OoNF0QNa88S60u7xly3lo4HyJ9*I#5_!Fl6`j}QVbLoLibg+^NW@N>LOQ3j z`AJ2h(AmDneH8PHB)lTqaaDKPq~CHf#c|sz8;2kY*lxNi{^S0pMUD_WDR3#h&r@u+|!&M?k5zFL$FwUaoC=SW0hKc2}+DHOU!o zU-=FX{PDfvc(wvWgVcK*iHbsmg@N(zvkhzQ{8Y2UfX}|Y;wGnF>uF^nBVEeB&&Otj z{7+eZwHBnbQ@P%%YzwyPcMs2iuG27Pc=@W6^UO*rk;dwyKx|2#q?0qrlCuv4Z;Gj#GiS1~}O8&R@R%!}oWk8d+hu29ZrtCGLQ04JUV;Yrcs6OFd2K+FiTrxRCAHJabkC(g$DSkNU3eG^T>+DelP>XPlvUBqhQTw zYbq_fyW<~>C+a^KTz0C|Sd)m#?N-i*C^XLLp%QJ?yhDnr;_r{H1eOigK6<`R?~eym z?unis9^{gfR%P?Qje+(uE20v5QrC+e_EQRQOIQ2Mg#rZ>!?rw4Y$p7WNI0@C=+W6s zK6|YbS0Q1|5hq9n5}9`oC73ES&J0(JP=_M%`zQ`DpAOd}2^<|8(VzXQ zsc;V*e|>C@x@CbKNp$0MP{R?h(v2BeaZ-p8$!>`y*)jIl+N0;AWz0U@*EuB^oHK7$ zJT3-*JD`$(2-`=Fau-QxeJ`4dB-EV>&#nhN&!4w$ zv5%YVwm*Q3d@m|-OuYTcP9Y`rL5`xG-%en_mkY=3HY!2QQbQxJKhpwrOI=@askJ|k zk3hJ1GQ}Tm=8)U{HWd?^0efXl!>&VkDSWS|R{MXlB$x((qzkA6W z`PR0OZMZbGLV#q+K+AM^oJ5>eq~`%`hSf0;~#VzHQ8xWRinkfzZxjXsmWGK Hn}_}vk@?`- diff --git a/resources/desktop/Square44x44Logo.png b/resources/desktop/Square44x44Logo.png index 6db08c2081ad6c29b5a28249505fb9bf965acd3d..df2f21b2d007673915715b48938a0e38382fb4d5 100644 GIT binary patch delta 862 zcmV-k1EKt@5~K%^83+Ra001dksxy%xK7RpsP)t-s|NsB^`1sh^*tod3nwpw_e}86X zW@Tk%-rnBo>gu(%wSam{_f!Z^63Bl`@FooP=8QR zRaI5+@9q58x%Z)3^n@t%fFSgPB=(w3`ox$1`10)R>~wT=M@L6NK|wt|Jxx6@?Tb42 zuXFW_GyL1X(9qCJOG`R7GR$x!^nxV(;mXg?&rMBDKsYkPY$f%MIP`-h_L)mwUS4)~ zcIC;k^n@q(q+b5@?)a)}{p;J+jek*{T`7A|ENMwDXh<%6X<4PErQ_q{`L%uYfg%3! z=KlBb^n@n+(y+O?x%QJn`^~5O(5&^1H};lC`pTpBlR^8@uKU!p_K`mJn@{@6qDV+c z;o;%-kv~*aRL#xJdwYAt#KgL~y28T3`T6 z009+AL_t(I%VS^|1;Y(6GBLBTvaxdzRLIH2&BMzF1pER7R0;|Si|~PgsF*ljl@gLt zd@vv_gIB4noID=_C@6x&lz)^}RMoJkRoCD{0h(G2+B&*=dV2Z>hDNALjZLKGP0h?j z5Q;4>qEy7&#}}-| z&!5340L%)+bVg8cNN8AiL?i=46i7vM3{WgK4#bQ{R-6DP6G7rhAb(aeh?N2sOa(F1 zkQGbGg2;4`cm{}-31Ve|rLsZH9Aw40c~}(Z<4{~sNP^;`ViFXWl#-yhtegbJ5HJ)K zS7ZP|C5Tl8Vrhc~t3k{fhEXsQ0RRik0000bbVXQnWMOn=I&E)cX=Zr$GdeOjIx{vaFfuwYFiIJM;{X5v07*qoM6N<$f>dCer2qf` literal 2347 zcmZ`*dpwhEAHOx!oRjlm7(!t)5;L-zggG{HNM^$fvzd7e#YD5pAxR`jD~C#Yp2(r7 zZxa{x954^&*!~ApXwA5F-|z4DyY4^kqaJRK(h_PC002lk z?ZJ2nXXCZ8L0tHTr2C5qCs7jG6%7D??U0U&WR0I<>l;FAzyO#wh0 z901p?#l4%S5&Oi#+YcLF|{hh*yw1xV*dT8&W(nGbknOc~_ zp>`75+S(|3NEp%!v-@YbaAyk*XE10;7%VTtfiMv=OkxwF z8Np1G=vdt!BLC6BgvJu-WEz7^jn-b%4JJ_I7`9O8n$fT4N1hCF*gsCuu|LZa76@BA zfti`YVZXG6p{O+!xr<7n(L-Znh5B}8sPD}G!v693!FQ*VLxq{H<@1aGZ|r~h9^q65 zRoFE;ndlVF2&D_nenumHy8VB~Pc0N|t?+*};zyUiqrx`ZNuXfAuFOti-4ILog^2T< zFld}Fn7=O|3g@j5_;$?g3^~Kj=w^HQgNvnmnCtEA+s1W21#`9ZI$)V>Ja%PveS}5- z{L37zMIyoC9!G7L9;Z+ZBw=BAq+H3_q4dJ35ib`P60$cbXQtT3{G3fU*2Y6h&z4Mj zM4UVHbU2BB=+TBw_WDXySveo+IPv-B?4isI5~}!RDmQbXR(jxSnH*tcc5EA7%viH{ zXE{)whMSq5xQz~ik26?K_(q;+8anG*ZS99>_$@|-)KDGeTDS`PVZZ`YgGeN*Kp-9C zKk%-)4tW7Z(@FpsUhbd1tapFNOM5PmkT1S?tR_A0l{PKgnKFAJp0V zP4Vk6eW@!yu_+`bFN#8OogV3u;rEZX-91<6;^f*qu?T-syZt02tL@bkSJ_>|=GcJa zos5KPvB|i6tGR$90l6wDw!NXkI+2$-b(R*}w-cXL2Np?Ki2hlJFHGdHtP+LcLoVveT0XM?P(qU6T?HHyt5k{5M#MAJmtxSof22zKC2=wZR? z!CUU<%XwYnCJ*47;1Cc_rh5^6%F7@@rQJDjbu%nwq_wL?A}SL+I1ndOA)Aun;`mVq z+Pq;!J!as;#T^Q*^Gwll#WZ(+(FomWKTf(XerQ@Rwa%P0-}c5}p=VzZx2_tp;G%hg zlA(QFbNxEf1}2M@0GUhVSV!t8Q4Ti}Br%iw<*{bRC?|_d6oM3o!k@Ra@4Xv5MOWUP zDW5qkzPr^kU3D?CdEZ7A%_By7++kz{EMlhUTa_smm%YNJq z!tckez4OCI7L8xUzUyCbXhrrKLswKQ?HUOk&m zb(VhW`&kENBg+$XB^f48>@9?8u`~Nd#W%smWIb;v+?bP_jZC@B*WkI$)%BjrSaOC& z=8<$8mp&-XNI(`KZLG$Ptxr7LdJc3aN2;q?rlcOp5_ozCmQ507g3=lqv<%BWDkxUX z$T7H$tKN$Z*rWhj4mYkB{aX`w^`pV5z$w-Zj^KqIeqjr#cw#`>${w+LM#JIx5!ZY9 zRb`5~=&I$9piqP0eUx9{?f8273 zV@g?i7@YUC<-EAgl|3bQRWH+bTHl_rdc9)esOuS~FlA+~-+c&rL&MBRHh(;ZTv;3A ztfqT`c%ho+ih$Vn7$&Qt@K7&*!{O~%Q>C%ZR#?{Jc}d`S(|~+jF6bV;{G^v0SG+@C z%+tt#+Me!p`a0OgPf4<*2&i&tHg zCZe`P_-RomHaDH zH;7XuQ0T0$so9L3&)J3@6*Q^hcBCP|Xj0GkwJ^QcIL${-SMV`W2yT~;+u7*J+Q^RP zakVU2^rEJ2m1RY#6n)#Hcw*SZHNy-mzYz!C7a!%4oI~-RgZ>El^h=sLD{ekn?xC2~ zvEoZ*B?Z=#zUbMj%1lspzvNND!ba+#39GWwDIYVbzx1%>J>RDu+|wV4V$F9SF8rp_ z>=fvoWdUM}Ef{Te)AlqKUy-J{Q1HA4Ac+fksE1NXx^TFoJk i=6O>32n__k^&5awgPQP?0}ihJk~lfIVXAlH5C07h!U0?W diff --git a/resources/desktop/StoreLogo.png b/resources/desktop/StoreLogo.png index de5b0f4c688e048074c1a177e49cbc8274bcdb35..f41b1f803f81f000f94f0c185431034ab3a96a35 100644 GIT binary patch literal 18809 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 diff --git a/resources/desktop/Wide310x150Logo.png b/resources/desktop/Wide310x150Logo.png index 0b7e6c110feb6f19934a63747c0df224efbde0cf..05b810bed6139fe3ad8117b334ca76ad287d4cda 100644 GIT binary patch literal 3070 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 literal 8426 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 RHVhRv^@}W>{+;=G`9E1hj70zd literal 182124 zcmd?RRcsx>)~&nN@-j0sW6aFVjyaAQV~UxX8DeIp*fBFZW@ct)W@h_jZ~YHP_g>wn z^L8G(OC`-}m1b2}56y3=&5djv0iZ!Eb0Zd30015;TuDI+5e^Ry001D$NQ-~_*9!mV zf`R&XFEzK{_}2g(ze$M#Dklhz0RXsW8F7*CZoqSGODl{;TmiOLy-SaF&H)7ka{@7# zow%tGEHQI(yF?mLeDQbD(v_)F3bgk$^*>X^sw+b8i(kK#elLwjD-lhSmYJ!~gC#Mv zL;J#6;x4o!btMM%)}`m!-nub(=jCeZGWg&zj%PQLuK1VF_2M=2(*AO6Dg6fyqx>vd zTP5gQAV_Nt%!BSQK1quF*kJ+nef5@)F_Mt5^|) zN1#(HS27;QfaU6kw3^~HINaI2=7xfXo?cyzxVW%!a(2$kZzr_2wr=jTT+a&(qljOs z*~NBy-cPY9p)|$wS^>*JX|a1e-b3bz;^8SvRlh!7D*7kIHd-Bj!+3rlY5JotA_6=S z`oNhKcqPz#y|*kbE&bXLQ*>Vd)e@X`8Vwvac96S*Lqy&^TV~__=8D0$>4BV;L#Q&U z(_zKq?T!RCvtkc1V-GkwqCsoN2j*~LJa00k6{cy|*HFa{o8Pm@~J0A1Bt zS2{--X5aO09m{Ci-VR0s-_2kL@2L%m&==qcwuynIe#g{Wz@s2{Sd-btBV=b^DRf83 zGZ4969NZm8lOD(`NN7jOgGUOKp-KP*QuGR&Z|L%-VpLb#OF#aK(YFID;e+j zXPuUgDx=`kI>)3M77SyDx{5v7RKLCDyCJo@?OL779ORCP8Rl5AF2=%+jLXetmCF+^ zEW--5P|y`&3i)Kl4yPYStXGBo18S%+fx6muQ_yO;R$`nSY#!}q2!8#6aMy*?0VOWA z6mn{hDNF|k@OLnCq|L>|D(N@?ly~~~&fCbt@eI>nDYw1MU>`zgOFUs7mfw@VYc1HX!w%a(h&uAJbgLZbOXHv?3)S<7Jd1% zdJu~*=682`-Wf7Gh_pM>>1xP*A==rAhb_fkAN<4^_i+{_rKG6_ms179vcEYqT8}pz zK9m&!e`0nieE3K97eby|*i|cs*9C2NU3=8iZsp>(_ZxMXcQyWSuTZEYWiMAs);?ku zT?OJs$&!J%vzN@SMcrOwxs|P{X1s}w~Q70*Uso~ zb!gKi)?a7C(ardM2#9Qc8XkPZ&Ob1Ue6WA%(C`<@x!B$QNrMxVF|EHN>R(BUhc^&> zLt8JfFY5f8NcpmTN{ZKi$3(pUIzcScA3cU#^*}W;4EMu&3~|LmDM+~Z_=?xc1X zBL(STGqXRy#B<&FIlJFtL{8|k?Uk{k)1A#?u}Ug7Gz})EUNQhU{-q-+iHNtOA4*s%C z4Lbd%^)e(!MB#UfhA2gkcaBVDyzx1uKR_XyJ2;P$PFY>{$`Mv@qAp;dIrkaHC$95kY{I7li{>QosueCU?RSL2Vg_LLB$c_YQ0w45?ai(g1t~6o4^w?Yz z9=JAIX6Odj5X0;fS}z-V%{KtUL==p!7?LD8f)AcZvl*;jjw0&Z`f_xkO3_syu|S~y z`f3PtgrF$9rp(oiw`gC-SH0xkS3Bf8=PEJndbspeh}{(v3c+wFcHd)D-_{L;JfqD)BWng@=%=LtqVVG3IpJjRr?Sadwmf8FdoVr@kliM0FH5`N8GUz1mxi}E*(r>Og zJkb>nw~Y66?9x)>D^=(r(Dqt>1aS#>M!j&q6}Czy41fHRN}Hr$S1p1fQco^TJSaDs z;-Hk}`$lJlY+Is-u665SiLAcyIx1O4=@95Kgw{sruOBC1Ni>KX7q4GFP&- zEj3j?9ahZgM3K~(SRs2J@6v#0Mpb$Bg2t{^Fis!{IV)^>;6qfV z@Yus+;sptL!W{gGbgs3RBjU;Qe%8s=s+F3kO#WdLom{q5Hd&FwPYmZS<@~R& zvefzrn^^ed-QnI6>t3(<&re$A!d)g9kf;`YbFUuGC+7 z_@YCQ3hwy#!qke-s5?wbxq08r-=^)5I*LoUgPK0;8>A$icWHd-d|0u3KcDA!qal@Y z9_(p5zk7O{efwl(!weRY^E3XAZW~X{mK+Um*bANv8rXSwa$G2=J2v$e^ z85pekk^fDw^_Rq6e%JwI+k3NS{%xHzIeeq0*&j0f^=?j2{5Q_-%309f=HVlX8{+J$ z+%pck)m4Bz^8$=%_lJ<{cg?Js9-R7rf)*enp&(uf3yJ0lmM7xn0E3l?|x!Yw1AVw;aK$QS1qmuqd z=4-kFS`lfY3{@7@ET;^*X{r;e7;DyX{hutC_*jPJVCb=hV9>Jz94w_J@y)JyC0c$fD2%Q^1KrDxF2RWWzfp&Qu!Xb zpg(0KWAO_VQ}eHiG$>*tj-f+ja#v8jO5We^ES_tDhIe^%g0LD^e_*xd2&EZ@N+z+N z3}s*hgOv&tmf(zjFpT9f3NL&_+?~+Tle*#jB}?|}f1v_a=4EFhbWA0Mfaw=<(114A zrv!~3GXVXDdX3HBj9Uaub2F>3UV%k`j;OKVxUBBXi-oQ zn8qG9(d}Lg5d|%`k5Xx89+^W}+7B&7I9y$54nPY0ssp0bdsl+^{|oFib_J|@GjrDS zZ>gCNrTn5hAr!&V!H1j61t23L;v)6!UjIH2RYvIoS@jMJPngynU0zDr+A{rZZMDBx zC~CQjJ_CX8Gz<<)ZPqVOPsM)z zECM#==R;5{WC~ka(nYsDQy~%Z2FWW51Oo&3l2@DU$<@j=Y-}*;o=VsFL?QM-f><~u z-{F2vW(Nynb%i1m599?x*ZiC$dW$BB*)JU(nOd3)y7>i{c&$*-W-XK;7V;se>ipn+Xn&z~IbR75CH7f5vz(ML(-VU@7|V*F z04BS{(k|YbKU|6(v$NhMsj8as*%J^JDeV3fdgZzJdm4ip(f>>9{BXo<0HrHH@b4#< zLD3RZ=k);oQmZRdqwQw&y`o^a7~qf{Fke6zKc3yV0_;ccMjg5y2*#5k;^re`A$&+V*zq#2 zT3l7dC5|gEoM4Xnse=K6DV`2cBlg+q0$Qy$BAzZ*_3p+9{pb_)-QcIUu#sd?JOMCVyhYzHeZjsCkF?fAA?>!jL zxbEAH*)2iDm#a~$)DX$FkdKfapDsSWbUj-O zSM+^hd%AG_B#OXh;(Sh`eJXu}r1tA##eJ@`Jek$^Jm=tlJ*%_YkJ*irBIR)%=jQXmFFN>bm zlRPyEN#13)ZBc777)_|r>cZf2-x)*F+u^yKB&#Gw0_DE8!53EX&b|;*YgQ7r^&*Q$ zs+}9P;1g8AmGNg}QU#*8v#PwjuQEk{U}rSN&hSv*{(Qj9kzee@SP#-KM7Q&IS$&N=9cm)qTMu~4igE~dNM&KpEdE#v4?OtMUZ(aGJlaaZRQMkVgT&#SD$#HY04z6E@%P*8bkQFO*W*<4A1(lmXm5qNB2|Zs4rW67JDye}@?K_`Ck>QroQ& zF@AIgA07*~qi$fHuU}1*OQiJlDZ0k23W9lVSeg$4Xyk{6kB3< zAoso)c|a5t_%9*U*Wz@9Z)MqhwjHpmiUj1iA(7XqxmdJxvW9$!Q_w_ifX5Bbs{9e!W`~}^nHsoCocP75h(*c!#hqXU zi1#x{ep`cd9$nA3T7`PE{5CqWVJ9rcm1H}3H#8!0F z*1|d8BOaZecMm^smcFEt23)KneZD{D2doE4!bV%~TjWJA@~(F< z8Y5dtxlDRAhZ2J(T$mYc;l-TO;V@NcH*zmSU+&O$k7Xmu3sZD3du2ZeCNNz|YKcn9 zmK`(C3_WbL>0kV~v2@!S6q3}WKZz4|gLz|LMAFj;92>aovR;Ld(x0WvkeI@6e-%}| zuYtk8bGINsuR*XMLL)2#;Q9o7aqfAQF7pUWt|Ga)5Rz~@Zso5q_zNX)n$SbVCI5p2 zR7{`VpxtSLk7TVAfzMX;LpdrCII`p1ct?2W`HiI@WTtq$Fm?AGI@Gufx!I%_Y!Sam}P)G1*mbH+j+U$zG@~W?k=YE~S#6&^jti{5EdQ%P{`nK&JjOl-M?4#wJS3pLG9sqZ3ZX-df?GbK9@TC{ z>{JE|V+_eLTPaO=(YepMw%F#6=qR}M;cZu1NeRck^*8$v`n&d$wE3Pt-WJ1&?w1@z zshL{(u;f82J1`p2{-qD^0j`<-208f0RDqa0oxp8!5V5 z^d*unA&(N+9vm4`BlaOZ{jN|;1@moL z%{t>0{Vj~3&OAJY8a>SMmzrNVeJ^Ruc+0@c*`fpyo2Ws=l~x1bzO8op+D)OBt;ro_ zaji!ft}dBj@UhZtaIKFB!T6vSpX_Lvku_Y5U6rcLx0-76$U?}(ZHlpQs zWYTv#@|~RL?t1?!QN@jI4G|UH*7PHsK}|c!P|!C8HYb_r!E@e@h8+gjyUZPrQr|Ew zzu7JdjR1UMwD1C0qZ;mWP*k^MX1(9qk&?H?S{}20V%(Rr z({+qVD(qnQy|$0yKXt9R9#M`^TqLdcp+i>FpQpJ-fvHGbJo{08np5{+vvJ$4Ye^)+-p#;J2I;lgzySz(?m{W)lfH zXed@iUw!agV}5>~9j&A~O}%nDrA*n1h%D3!us#cgdWrz+Ud4Zsn+3J-mfWu~>wraP z$w`uw)muJ58Yyou6Kf!~YyxvO_ak5cIw&VGG|?y^fgkVlC$~y!Q^F4os1)+Rv1EPH zhd9q0g}hkk093z#5W0nk^I#t9<9M#znuaoy$-|p+DhK0X{3-K!ZLx3Hk#(8}2i7CI zOef6g^MYDDi7UR_`$kVax~^MQOqX4l!}4HX#?_L6n_%AfvAp+uEZ>k%4a#9BEH97( zAuvV-9pRxzpqC?b_xt9EDOOc$`<*zO-D1x#Qw4{WX4qxy4y4Bg#hx^d6!TO#EUhb< z9C%4UMr2I5z&Q2X!Wmc!!h3Cx#dlkDVwDRosY+14m&XX7MugZd;`J(cZOmyFMU)&Q zk5tN%n2g-v#gN%OfZCuc?5~p$b z-1a90?j^goIj;nj9S0U$dxI=jQ@UYyRwi`1(jv7ISUUvK0o?Np*snJ>;^}EFm30j4 z+2RE?Y3O`qvAS)b<4>JoMiFwFhMHVmWXtsPLoYxeLYao|wLPs=@^G05fR&VF+1mdQrS^A*?Y zBSOE=aniaU+4l(oqT>K{jR!vN>CD%icDZ!07hX{I$fAA4I|EDalDuB1QTllmT{MhveY?xGl`* zh`x5bb5A>`d%{)?jIZroS6q5!Fxgh_U2Kd-aZcT`l8p}q3iH5Ykvpskk=K35o>g&- zx_(m*XoZ1Ybp}lQ>Lf3=ng+SeF*{MPB;}vYPcZx8`yYpLHmHbVIMWj#TD<5eiYA=TF=RCf#IK5m7`dB31!mf zB|K*PCqGUNIHHl0^2pH#TjaprU_OcQ*zi77`DOw_06dR^ZCfK`%11x8o#rhWI~SKx zcL1cR%%a)?$Tl=9JF3f2|54C*83)nddQX^iR6c)ltL80#16@y*$~_$oO<6i*=$9hN z`%EA^shMzkcp=Hm?d|-WI9Dr?3mx{1yaJ#TlDwz5eoX*d8qM}g)9NC`1g)cTIa))w z+8i}sbs}Go4p+}R1P4LB`n1*|(hsg~Mo}ny?7-%(#4vRd`vacu-sbo_vdeIenS^9; zcR#kyy&EL|O80`a&WM2upCOIH=-sfqYKP5?-l^#95!>u~2Y*hAj1Z zMlT--w1(@&d!}fJi}i(O6vAlD6IRA0kiQ+%Bgvd3MB$_da_@~&WJHY*>^pE)+{o8< zDf}X9bHTBYo14I*W0!a}nwjS=4{G!`R!g3uU*!HFF%X0?%$Ht6hXOGoQ6!Az@N$5r zU6i%#y7KQ8p;7w7UHu7K7`QN1O=e>Wne42UzgRs=HMK%3a(CdwM``7q>H?{0P<%E^ z7_@5F39RQ}&I*7yEiS0UiHHR^2N-TWPH%1mxZE5O(t?tO*LbO3*||$wg{-bDKY*dO zBO7>|&q)hdUmp8?{X9=nvDFs?|27RMYS-r>HQe9gJMU*MaKL>(7KEz-10(@pKaisZhmAlBU$ zslksaGTK-xvIjS;jV}x5k}Ls9MM5@iz-52@_P6!i7U%pd+pWKBq+b0iWEvR?WFRx< z4Myg1y#O~0@a?Z9A3FoPO_WbKTgFFZx~l!G+8l_L*5(WjWoVT+Efvtw;q1vnng zLEVzVuoX10dYe9zgfjXi+;%OLn#!-iLj|nctAUiKt8nCYVOX+fe~Pw2BMd@E?<##R zP8Z55?DlMM{>9k0nb6Dk=4uFfN^%@&37kjT<)J{(y_PmW13itmC0lN8fC&y+ML`(I zZwcd(Pfw?mQu#L~;r0-r_Iavm82qUk5Kkn0j*Rz>A|)eY-V(~!)o9sZDpJ2eKv4&3 z>Z5%fHkudZienxe4HTNZ9AF&6j$+FWlcDzMT{xzc0Hlx5waP0e3Xr@F4Tz(>Lr##XQJ&-bv$d%GSO&?G-~gMGt5UGYM~U~e09>>om1Y#o zJV1w1yp{*=OtgugDiRaD+uM)pn{pUuBJ2Z+@F%Se(lA6D_$bwl%@wMLOU%eH>P5V3+poT_?7XqeH-m?Bzsnw84 zG{Zs5758tNM}jq=RQ~StF=F(uDSGo3&u~MaP&u> zvVTbP$g2K$OP#Bt8r11)de#h`5~;JNUeZl}eFNH9lK(@_= zK8sJ$CrUH8-$Pl6 z`KSTJvp}Xb8KxqbJSyhjG^NBpEbt$)dUTe`;H6(FGzMXabFulJOrVTt5Los;;n^;! z*0Wx=Q=;I>QgQE|=ujFa5dWO#IGv*GY24 z`Vd_9*J~Lx@GdkX)N+gdfgbP=aQtsngoONe_{?0o?cEP^6`~ zWtQ|N;HeMW>4U_uwuB?25F2Z*skD==G?Od(lFTjBH$|0LHivq@ZtW_deAwim1PY>FDJG(Ca3c+ zKeAYSFciv}vXy7Gb$=u3s_B&jj^_<)fG*mhOt$_APs&Z#D+0UlTT-(VapOOyN>`x* zsuH*m%b(os{e9^JmVdp!7|b(z8?GY>^b^)NZH2)Iy)Y#3#a)F4`74iT$cS|!Fd3!# z|GZcFH?EQZh#g}Ge-ph{cj3wXM8@4poXO$US95RqUhse(kBJOz`TiM9{eh;v+V2a!dy5JX{vJ?7{(F0S{4E&pAsMS2-lt%L6!% zJex5W7(fXF3zS?_Vf-viu;TWU019|LdG>hvZ`jZR`9s9kv$>UHb$>O>RK(kEI`6;d z)6j!yU^FySe(;5yTcd!W>6`4c9gJYC1)lbbf@^^I5VdHO_qjwgpkKn>LTn)Y>{DVU=1>WzWzq>IVS<}#3aQk;9oF6 zhx9e7!C~jWv82590Hn)xb4K&?%idf*iQFTUYApbIBb-(jqxS3OA+@UI=kHNR`B<`8 z(Jl*Mn*p~XKH%s5dGCUMlo(uvQdi!8GsFs}AB-Wy@YG=s=Xe{NVi1#@*x_$%Mh* z0cJc(;IBA9OaNu(bGnm+Fr;5HP$D-7RSBrnlU608{+|%s|0_e9X~8;+?WKozc|D>e z-!!JDmoPw}_@XL9B7F(X(SLel33b z!dg6jxZt0=ti^6S0KspM;_>RFV3YY&-ip1kGa`z3yG*B+OEfW7bE*~ii+=zdd>DLO81*y(;0Yqk1U zH98k7XQ+XlYxI}NC+pipSNA;y$w%aRnffIg%5OpZuv?} z^jtsIk@&R>nd>R^mjhtV^ z5Q&gNDZ^dkwyZW2_QJ(`GK+*PcE$3#3Pllv#APir_#fZOZtkl-)4cBTiR1qM<-N5k zLg_sC0nG_}_mu+3ZZ89iY0NBjK&P{Ue$VZWFXJSV~6(jIK?*6*E zX+xAxGF*@*hts%0BMtrzF(lHsl%DwN^m}zN?(F-zxm*57hvy>WGN^a85L>TWZ>*!H zQEi2fw*VwgeJyQMdR#ud%;_p3eR}5UE=aUI*lL<%!jH?T3!M(r>Pj5@*!d}N6YBef zo5p3E-C{Fqq;OY6gQ5hC{bNPJLoXs-n48b*{f{>Dc-)zls`*~`V>4M4G3hl+k?!H+*`ocaZn0X&MTKR!ve!VNm$$W*DeUeiGi#cTOyxr$@nyat0pUgXa*bQE`wmEacyKZMS(8h#2l0~$>3sa0ke%~RQ z1FT4Kk7g{z7G@~;Ri6p@T!u`GuQy*m9#u%2errd8cZYc3knnbw)M8Zjk>*a4uZ}&T z5|7ipr<2S8YWp!gO5Cm9(N^yE)N}8f37enqieF`ABf_bBV2S}lu`$OD zUQ=|?69l|&N{yW_rB*BTG99;BmjyOVnVrH~t6IT(zh8*Rw`(+khBCG=e2}27yb&RG zGx|4^{iJG%%!DfM^Qt}F%a?}lO$L8sWhoVqf5H8G56zc(P>+`-4^WnLJ8CYbrHGPJ zn%b?h_3G{N>ho5kf__#I;Y*%Jf80jEWJ^9oT(H%%3-NQM%w9lN;UYh=Y(G=08C5^F zwL=K$ZGP~>lo$;vj>>aYNNs))kB%hiZFZEt8KKfWuwep*w!@_-Yp$S`M>}su=x)Z? zCWo3j->p@M@GMSEo=5h-X=<8VICBCudNb^b%k%#TJ7#S&!u%XQTIXV7UqtvZNa{5r zw3$o^?9$2^k1j2xOEUz` zfnqmD`9g`U7k@{^zgfQb43~Kg7VNPDv{#{5n<-eK*Q+friiF-v-oWH%M>blWA}4q! z^5aBe=zi~)8@J`D<|unGd@px@0bda8{uri|_yBFGia{278Ge3B%9Zcp7 zhGpDoZ2x3DQj{T8LIWA_&!|{8alDhq@RJEWbt4y`sl7CuF67gdLm6#PCqFXWKe$($ ztiS*UyX`i%NlONs19GX9q7i* z%BJk&%;Ln+h#5bsA2g$TWC`o!kwpw8cTib~b_J8XUtoz;Hsnmu{ib*A^d@dHI9he} zJj{!{Uf6P&ys-NpM{rk948Eh zs;=LJ)cdWUFUWOS6-$7Ktf2k=SFV57{6y+(H&DZSplJwU z_~ZpsysI(A!Td^jyNDMZK%=)P2qu~ZPhWItusVwX)!m!>h-Zicl8ZDY#74gOQ^H#+K&gxvYwMZ*_^Fe0*_Q7cj;e-I|+k;Hu;x zzi!)Z(i^v_>qpBmM$U++MA+V`L6vfe-hvD2t5S^`(yvDvUO5odoSC8<$2{DgO(M=d zjeS+*_{z>nGpIdZ7L(X} z@=n}9iyauyM?Lo4)qKwL>`(~XW!wIlw()#eU?^}7wSa)#L^1>yhs4mEC;lc}#;xI@fG@n^(Rpiz682Uk3C#4r15d6@#c zs^3TXXpJ0Xd;Qk_so;py2^nwAroQ-nhuTgV7w7rWgSw=fTSsMgbCef>`rv&txVcdN z)vjW@Yik&o$q2g5#8!V{EAy$5$(1Y!Pg+`97U(?Hj{AyEwozAQ=2~dsEHb+m7>ojd zG_{YuKJnjrJ=XJA>s7tDG`5UCm5mc-Ajxs);r2>CjoWU8g&Pd8H_5v_&K1%R^RiQN z`<8YOX-;;%*rfYIW0!gJ@F2q(0e-QKBkOo;U5=Z(7P#kaNcz6;L#&_#R%~rZ>B*-) zlJ7emoIfD_^7!^;iNFBM57axIDF9C^VTd%s!7;C^+Qa!8WzI+bj_V&(cn_R; zVgb-bkr!hVPI2cqiQHVUFz+=FW6tTUquIqq`)ff%gG8yY9}fNVwHv6<*c#p$+tY@e z`vT}5lUrCMtf5bo&@}fjig>SE+x)<8@vMN-q80tvG%}G5wd_=>m3AeevV%P05%+pzS zJv?pQU&ydc{(O!34Ab<^-p{dLFcmJDdAXU@MFDl8jp02s!!f>InokRPJ%y3_Xlk}> zc0l)v2rk@E?4ejZ){(q@(XnyaA$gBo`|he&S;0r{SQ;&(c@%IrU^c(ls2OXNLxZ99EN1(e^nWCOz2Li`2Z@Fv|2 z9Cwyb*&*X4*MBDX$+{D6_zF*CUdH9{Kjpriv_Gb!F>{0nFqD+Y8OL%-_d03{k$B($eNcy6Dr9%iQlL)UDeR&LL(82*+PM}y^T*Z zL$T#m%_LlNP9r^~z2ES8VDp$&HqLU$S3Q3Y-5!>i%nJ9hLmvcO$t#HdCgBgCI7I&v z;3>&(ixN|@UZc1^$ntrW=|8-QUZcYS)QAj6MD!R(@mu3gdhEN-XAKfjc;k&pF^N*|6SNA;vb~Q{hA{l{q8D2d4+NUTlp6kfG z*LNPWQM@Xp*ZdjFc{al3`c}g188s*7pwRti%`h7+;z~K~Y4O2<1brnL4Buw`-Vy9A z()&s(2dCtoWL=?9LW)47gz4cEx0OIJJUR5?RP*E2BoT}E)A%@B0fL$pnh?^?V_vcl z^i2Ls%KlOEs?supWvRkQ<}a=S{<#RomggHu-&U)0>qL2PRh%~Tc!xQ-isEfcVGoK4 zoQoZj@72jox`9O30<7Bc8SfadfCWQ>C3Gk#>$;Wce)T|PhwOyeCl}(&;NG`ilQcj0 zMNo#c3R0dX`~d5<_mrCL4oPoEgO8)}l(J*aW#*9C&9!3Mme3a3Dd0WHR zwb`mLr*{l7R#bL`>VXcy6#v8{pIYXWOpIkH;;H>(`#OZ*G8p9gsMrd1d}7dX%? zj!}y8Fd2E>W!W{^8!r2svxn8As%>;@6*6EoV^2`fXDr8PIflG*DOUx%Jh_ zgP?`t_Pmu{-Ns~MS(hp*Vo&Q6NI(SfD8KqyNq>r~*%7&zLJmLaq37Rmt`|Qd{$(2} z!EU!0IEc@HWo4MTA9z>WfuVZ@XQ0e?w_Zdpopuyqx9*jVa~_6au__sd$=MyEH&^4O zA2H=tX;%^3sC_~@qYxAj_5~}7q5Kl_G3_ReExZqd?Bq10PvuNJZsU~U*H&opCVQ#W zI=LixTO=5n%a`asNwKUn>lHE|D6^9d#7y75z<>fqH)!v@Cm{V83MhnPTrW2mV)$Qh z9$E`v-=CDnx-SV8zPj>1{(xHM{0;?? zElm!mOc?2ddbS*0bR7-3Id@kGMXl*JUV63h+`p(4f&x`l)Hui1JRtN*g!E=~iJL5# z%y1zfbnuHb@R7il)M~f?(J00pe!E6v7H}-Oo5oUysp~Fp8nj)4J{T!%(Aj~Q5#w=r z6Formx`;wWSW_&D45WrR?>D5L6nM;Ba~NgV;A2XG32QZvVH1u`El{-b)L6^X$2jih zh;Ofj(#Z;hDCmPE*DZcn%Q(SrE$4%QfaYiqOmW=x{DNT^Iz86)B|*rsB}mQdyJ*=( zqS7E7`xn|a4Q7Em-SQ4T}$as_i7QBKIT^>_rdfIJV?|=dzD^%2%;eis{5yc z90icylhS@na#G$xj&-EV;Y4)FoiHe8TDkVw`faZRoAUZhD6I80N4}qazIdBFYN(Y|ya*ZJ z*&D@jgg{0&{He#K>!E+hM`4|vbtuiZDrn)IGpPG~XKv!k&}?SlNx>wu2%(&XX(Ak8 zaBj4kky+3S$-yP?*+wxf=~!kdpYza05$TqvpozImZ5>xpSSWc&$EoIjMFE0UoZmnb^i~v7VFYN5`sHRrbwLo>b9syrZ1D{1hgJ&Uy)0!d!X|Zg zUIrB1%ywS?^nn=MXz|SueEL;0AvoH~ePB$ArxmJ@6?eF~L=Mk;Ai6882xHlEw-P(~ zvbZ+Ui{^WF*|+|HIClqA4%bkU>!MiwQlzCH1~z=lBMmx15n?9~(c@wr@%R4Xbh`QV zX~4A*7R1T*b5bITLef0A3Vsd+cy;o9{o$T0~Di#yx$)Ge}DVv=*pT{*t*fjmb zm))%CGH@^&(Hm7ujg*80u7Wroo!-dj*oe*U8>ms9ucHSbXrkJpH!gb?u+(!L^6z+y zryNE)+g<8*QEtZETV~(9r+c>9@*9;@{%~AFNa}2?)O%t6^K>`7+ZIDgA!SvR53!_L@bq~qN-JW5kDKl-ic93s3Tn2dwyBnp4 z2lbOc8k!RrO8}Mv#_@trcRGK?n7n~*uaUFQS#r{~{GoPV`iL~o_`jIUP!}bf8cV(5 zE%VOMd!p|b&qEdv`$KM49kVo3$B_wyvqb}hyZ1e#41}!@P^TV8MXfJ!eLrp~{#Z?cy&9-%6CiCPc2VM3w!1b+@5+5nW=lGBNix(m)U(T%Z}TI0(X~^ z+bxP~F8QJmzPe7CM|qiiCE!by_q^y~PX*O+MK>kBN1>H~1)wi(%<{dOB7N>pP#oEK zhn~{cX5tF*++SG2N+VYccz`!?b*N}dHA`8)w(wt9v=Dw_oqM356q2x(Ms~n8%HI6E zB)m=Mf(>E&bQ?#T)EVT!n~Btqog*-k%$0J`r}3MUl*YMn8{o=bErffdfR`E8^ijTR zsxvf*8gsSlo+*Vh-`Fjk>QGYriVV6Qmh|ab=>1TK^L-yIP%qBW08u#O&Q&6yo~3#_cW2_rEoG0 zRR)ji#uvrXFcr8qR^(KU|YWcygVm6iW`7oOmz zGpT#UawlCT`?((WJukUR_*}Y-D|}=};&<&=ql|3*V(K`V>_oe6>zLxyC}`36RArQK zXwti=Tip1BfUx}SW+pLyw;b<7e(Gnl@4JBfT%lRxZEsWl2T2qI+ltFO*}?XxnB`s} zNbD?1x&{D|3iq^fgz%iahg+6D_HR$0UCHIh<;b(r{JP22cGvN@8|cUJXeo4pn2;ad ztP6cjB?#tv4I&qo#|g+y0%43ZX~K}}=F>=Vj#a=m}pstSml^mNC*S>7O``dbv~_YrL>j8PFm*%A}f=@RS95YLDFe9%0Oe zap>cXWOhp~B&%a1ugr$bf+AdF&VN{-zByq-A}=CUYeB)v&1d_Vk)(Ej$^E!!Bmv?LyW_MVR0Vz^n3$MZ&X`V#1U~+*KZ^Uc4vh_2i9vl&$oX{|E{zx zb{e~M*I$WVt)YXmDVhoVh0Egur&=qunc#me4C_z0Yn|i^gh8{T&vN@G@v{(QtOrtcquEWAPJZbMD{I5rzY!IDS7S5oQP4kx(AK zIi7uzd{^JtH4{Ng@M$6LdFPfMZTOUy+eMySc@@Cn?!CO@`0ZknYHE+tmQcVckBG8B z&MzHxD3yUxjCrg?g>YRy)m0~{-R-#0CF7u+k(+FI2XWSoqlnM)=tjKgHpaK4O?$o8 zma-kqimNVw-R8n_+^!@^3~vGUX+uQ_J^%>1)b6BH{xA04GAgd6d-!Y`YurL`CqM#0 zf)kwJ5FiBi0KtMMNU+93kj6bofIuKfu;A`43GVK04RrT3_dfUe-+5;~%!gTPX1xm* zy;h&ob*lE+ReRU2I`un6oYp7_zuYq_uRD-cNw<}vynUaV-1?QyK?VV(Du5oDo)f<~ zc!00uf7_8(iz20fJM}>bthB>4tmx7C6m5Ks&WE%jtr9@5sL1I;AHg-KH0i7eKc~j> zvn_qGVQj9@UHzfXTM5^uqoD$3im`z zKs>`QX}ur>S5anYM%TiJc_ug+UJx&{sa4bHGvyNkX=~1Rc8S@+Me7xV`Dd6DC9_|N0Yrf~N|K`hYQVInNQJw2?_2D}uM?;t6Y0f(_j z(dyd$Jw9Nkeqx|o8+rFjD_dz-KK+_T%HNu&(*gt{7kX+F8VYA$?TT}9+N}v+|Je=* z2-!?DoJ%wJa~$TX+rSAtvl^^@)X=!mGiB&#tS9-)=)63xI`)4vwz)4 z7iT#mg(`+lwFflJ$#bFQ9o^AwO1qj&78eGg8>pNmLVfQ%#xhc-PK=0g)pYGUV=>Ovm)&I1Zc~g9NUnZ3z_!qd~qu9r@tyo>qI>CHYBd zs3{3;nMcdh>uF85tf*?0&lzO%d*r1j<@@c;2Ehe>V}WH%x~8kEHxk?ad6`~jN5V6Y zZ5gBZOk9gOirv<7?75U400UGjM&)`s4}Y`20K9hMQI0|VvNQV#{w0ms6R65$Tk1Q_ zDVJW(2oNQP9^snClh+)YLidWCjdfQ^elIY^u+Ch)6d--VgC=0v+s!YoY;{3G7$ZLL z)U|~~e7Sa1d7<;Q$C(8j)k{>GNZJaP66fs8>Em~nZCWW05&IzoVh>nIKxdy&pummD zwD%&lW1{Xn+obI1AQ{SG*dDzCse>e`uv;;J^FnaP=HSNzBe-m6KT`SOf#Vmp+Gt?K z#!}%r-9r7oESK{7sG(JV_w;;|*c|G(h_+i(%-mm(^gh1c6F&6v^{{-;6h@I)yLt1| z%yTA;rebNo+nPf?Z{L%9`U1LCb+#G~n@aw6QwhXag5dU#X%$&!RZGDu_dn>pZbX%9 z-T;ptu2`M-d4Rygy{=oNt!0}-NzCvgK`}KBkn9$VJ!%bzgv0Rh`YApCQ&Ts;nBjDz zEH`xwlol318mJ3|g>?|y;a$Wv=;;7awYV*qA=mtt-3s91gZr;-i8Fs!R3DGrCIG&< z^6nyDsNna2lTf#;5xfo{I89}TVabg@7jTs6d{LFT2I=jyn^e%5SAi<^i`OX5mv2rUIo-edI1KtHv zrJ>c6Iq%5{4S^>cTxZxC93LL_Y9xK0+{#m?<%z`QityL!SAfsFg;u0st|fMDa`(A> zo48GSarBB-GV%p02Bwzs$})kn^{5^B{AY^j))Uw7^xs-xdsu+9DFzivGm@4fyZt{6 z2YSz4nX?#pY!3*@62UyUJ{fW#Zjz_yPoY!!T*)EtFyL7@v5h4BAF4Le0`~Nox3@)! zz05&1FB#Ay7{uDCttzU-7tPTyDU+~t*NR(R7){?b?7^0V+n04erlmGo!OpDDiFNFtGgMUh&nkbs%dDFXErR$OjTXe1c*!&AZ&rsV0-JRs(H9LK7I zQFbi$-YvEyqWCrRW`pZ3ybQMTS5~Jjb>X+OR5o6*et^JieJWeaiIw$d;HqPI;Rnb& z>#5u|wRYQ+{GQw^oA-Eb3NEYNokln8D|}M*mc}om599o-d}VsR0*;u(BTC|33Y0XL z6ts!IW1C|Ypm$(k4hZ);2+UQiZ3<7`ZqhSMTo}riW@nF*6Ht7x1%_PFKW?uY3b7pK z@)`!Vh;-`237d5)L`!8w#m%D@id@fTrn@S#79xiCl3wkrkGD&@6A;3AYr@+WZzgUj>GwgOxQZ?D`m= zZ$1Udhs}f?}&{)qh6_fHSko@p_Voz-Xbk%*GV$IHg{e;G3HT0SRg<65#UZ9LX-T*>5wF0m;DN!a zxz24UB4RMdTOZV)6YO|vNea+RAWb@5NKLgJ_uY&To5Q57Tb#qmy|sABVZlrQNwUp=b58#ewTLybD-$;p&U>bYlxk z_(ml0z?ePzmk)Nh(+{$I&uSskDvENVVN(&#@6axx>Aa3Wf5*qS5_ zc4C7_e56IQo*Q@VYCa*LIp|EoCb6o=HC%cCV{t)?XL>k#zJFR3#BWpN47{bVa5x{gcgjyJ277hRIO8+&z%c!mmtI+ijTF|+H)o#;b3YCTQ&)LWCx3W908od56{F#AF4t2f9M z5ZqzkHR|fTgr4h(LwgtF+#6OMzPEQvZ?V-#Cz}&}Jj_(0wwq_ogi${{(#2-JwANiwMXH<6e=R#n^f@@p>cAweUvRD9H~sjxk)QJt^>`sURFkQ)inXsG z&I8<<^(v}s9LIRuqoNGi&_`JtP@G&`dzeG!6&*i1&0v?!&*zqPrPARt$aB3RDz#(y>8bNz~)a{Gi3nbdMx-z^M`D8P0+9&iWgQ zYwc}6UXZHwgYEn2>Z-yV1PJeyjXo&y1L#$G;q8|UGT zh7;7_dlr-~=B6@ZkQT`>$P@0>M&AQPAp{OQyEse}hjU<~hbXIdL@Ac(V=1c0Fqe+Y zjRt6i7ed!*2MqVN#kiF94c1|Y2)tU@#VoL6vj$@(4OqqcGfyPaF2+lOiwTnfV48JO z?ovr+PJCq4nG-<};VYKU?6N55XD`-aS-wWl6=bGCIAj#{$J>wXm~L6qbnqQeYAYGu zp0!C$;~F9T9z|Rgh9>Uu@geZLdEKc5CNK*)FXAKb8jqS1Sd|-Yt{NcQE!g|hpT*OA zG3)n>_Gk5lDyfA}a)GN*=&>sC_!;4qbc@t7qbJvFOv=<1Zu>JY>Oky;Bh%jp3m!nn zV!zlgy8stm9oy=on#G zUASeBm+U+yOolE-1f)maPf?71Xd?j>qU2`Nv?)ZH>Dw&d;-0>ALG;spXn6gE^L?L> zDx}wIV~)*nrKq+3ShaN@mQY^rD*2ITp&6eYBq+u9`wfSWXNQ473n6(M*z1JThBKmT z+7^2*4G+zt_`rT49ZQn?0mAf?t`7> z`Ocqb?gxfUpRQO=@%M@+xUVmqqc|u^>Xl>Fa*Amr!an8r+lsdcMf?2XCeHG%t|GzmU)4C6b=TQ+%Xr z68y{{tQeOhwBaF3gc>uSub~Q?%TKkhSTV#v4v-2<|D%KM?2K-it3GG7q_fM56fafP z$a1G;pk9-A3Wtni$5+|#T+$tJ%qM#C3~wqwu@fbqDf^?ddv0AzB&}&8P>lj7C2@r8 z0tbf|TE`p%y*l-7)2;|vD+%iiqZe^f#zwt5W2?5zBtK5ilW+8hDr7YXO)-v8Qjh|S zy-!Yds2eOQAH03+l;7~MUqe&m6=*H%Vb24#G_p-G;tq{j2y+>}c!|zRQ9DkdTTfeI z&0N%OVDd9B@daip^K%yw?Wg%~5~licd1*U0dzr@YNKIQhb%ET}i}V8Dv$b0W@_7SL zyneJ;PK*>|J+jcA>a^+$&4W#tBwj#qcs`a6R&H8lDML^p0h|igJodL)`O36j#9Wno z+KS?e!x8E3`>~L>{W1kz)=Sx1&7UV_Zu+(M9artp={}N6_aDZsxn{Oo&{(5Tm!uKM zt>f?ZD}N;eEeAZZ;Cv(Qki391f6D6fRa*Zh-0bV4 zsA+e+PY);2J9b)Ms_6IQ_x?CxsC{V0bA4=)&@m^1TUs0hE@;`RSE5h|vP=%353_0T zekeYz{)v9hnvIi`-k0=Z6x3u$JOELWFSp^p$S=bpI2WdzKpt*x6LF}eK5_x}~q65Xy`Z#*2Zpw4K6xC~Z zxBx=D3eDFMa)FYMvbwZ=qD9XJxT>Q#74x);e6V2~{Us(6w zU6SF$mzN%cTZvmHo(is_N1uF~T;*N}Ck^~o+n)hA3VZoyX8(oW)^Q}Wrw+Qhkc!!W z>(B^xQ=6TWWVp4Tyt}whQzZ(nT{Bl+k!fZ*cCFEJ#My`jsT&L9pw&>7$BwZ80e8F(jaE#8^2UdBa{&ShUy4Hh1F zsnN7%7m3OKfos^E;iiw+*7$ABmr&W4Vvk?ad{d?M9I|7YcJpM&;oh!6k*f&UGXw!D z!%ue_+N`ztLl{>o7#w-H9W$lHg@`EaP7~+8dTF?!fiqDKeu^!Cf4F#))|{G6q1;-g ze-;m91E>qMUExl?_8|%jNUXJa2k?Bm_Ikt7*q&Cl+fUPiCG$yPi&HPtEUeSmc_^c$ zLcXyqTs)2g)s%?+y7Hr*K6kTc;s^A&0}j~^^MhQV%(4|r2gc9jRc&4q{W2$@(aCSA z3ND%(T>lZ`ZOc0NOH4EtF2HTy@O~iCk6jJ&Hg4vGaKW~R8yO3`=G@Rp6-;jasLw6$ zW$1AR&X~cola{}Ic^`g};hm%K5jKP9r9=SzyBC20&R@>*dbCGr%{jh*1WH2)yo3rsI6vzORA0 z1@B8i53qr8WPphc{@?a;OW$$E~cs9mg%8~1S zGaqg@_TvDPK0uH6i2Tf`z5}w50$dGLS0G+}`bq(gv2i%WLVQ*NKj8bA1$qDi>Jb8b zBQwP@GB8lE!8r5iv9BXT7_&gROws5lOX$5-fJV0_yfG7z?b|eRA~bW!$12!L@;bw$ z{y_Pb^7EY>o3z^mT}Oy(`_oZj_Q-4kQ*S`h%V$F$FVsHdgV=zYpIg?@!HbpdPx@fS z0A-hG+U$CnFUj<4Tz@PaRc&I=*O9n`Dbbx882(fz^GL$2>AC4_{Xml;0%jS2w;12= zR{RGbH4bdiM4{$D_O0o%#J5T~fq59}+r^U)H^18NAYqNHk-t=_3h>3QJ5J)c+7#LY z7?NUMi<1=uF@n*dI8Wy(>5$L^;7*%v*LD=z*7miuJL1yoE~8xx9#g>icz`++m>}W+ zS(+rWG{E*zGx}C#=?OZ3A0SkrO?%O<`_14BQZ)~#fzw0)-*V}FWvP!DN1;`Xi{eM< zXopB>;(>pg6umOAg{f}*8G#!>7r1)M0+0|1+IHKlry~mb7wHmpl=hJz6;v;8V8R$w=(%Aolc17S4#sbCHpZU1KC2ferLW z`i17&Lk`{54?rg^`a5DoeFTJ@{_v0remg{J1;-r46#~BnFH)(G5L&N2@E?<<_X2{+ zQxEgxJM}yv&5{K)1nPAFyFOBXX*v3OV2dM0Q0erN4;$}y88D9UDZj&K$wYK8S^Bt$ zT6$h)(8IE)?B;mf zC)0Py>4`{K=$5Xca*CbKg|Gu_rRW8L0RAS;akQsPB)X*JM3)k@scFpC1xWFosz4Sd zfaGM43b=I9;VY_^KN}I^`Jgove`MU>+(j^md=He}A*~TH2LaZY4ichiS!ar-LTS0Y z>1sI&Sv(ad{0Mb^m5IzLnib8374U<{Xzg(ac_1<`9;dA^MsHh;^ z*^E(^e9{XlU3e2_yqU%64iz44JtH_F&G&BHd=@8$hnfU5^{>f^oq3uF$J#E;qj8E64u!1}J zVOrmNlX7+A3`}Vq?~=oyn*3;q^Vtqn)6Dh}myv8$sQf5g!^;k;b_ zK)V$!ZVpji<0BS5wtRaOlQ*RLndEWO$QYi7BklT=3IhI^=N?kAH^wg>ec~HmXVTF_ z4Y&yLsffLthDYIfM!O7JpYga$tRMa`G|N@ANAhx@1W| zI7EUL`7*rPAAUINUsgNKuZ{c7wG!l`)v3}bxii;C6A|BUZz;6KyuYRB*^Wgfy;Srf zKg?q>t@Ia7Hou3_Z*Phfy4P>6BCf`5nm-CZf{i?&_IvL-adjel@SlEPNrVe4|oFmeDBS1;pk@DHVM zbi?LfF48>>+Nkp@xg#Rk@X-S1jL}ib*wIepJ-}x^!)oRYLSu#B)scRW4~^qjv-}X% z!D{Frm>CH?dU92BS7+ra;K-oxUG^X=k7~nSsU}AeW;pHDfz&s%!WLHJGaF|Ze8Z%3OBy!iWeIhWD5`e0H z7iEkSpeXygK<&k$kvooYvBZD|0D-d!XoR-xAypnmup};3B-RS|@i92CQl&o|Hd)Fjl=ASxZa0!1OCZwyk z_@=wmhWVahzGs;48Rq{V!_xN*^F70S&oJLJ%=ZlQ zJ;Qv@FyAxG_YCtr!+g&$-!shj4D&t1e9ti7GtBo4^F70S&oJLJ%=ZlQJ;Qv@FyAxG z_YCtr!+g&$-!shj4D&t1e9ti7GtBo4^F70S&oJLJ%=ZlQJ;Qv@FyAxG_YCtr!+g&$ z-!shj4D&t1e9ti7GtBo4^F70S&oJLJ%>SDc*Y^zbJ;VIJCBw`I0042NUdcFSZmF1hgWcH?RN%&hc>?03h-E_6mA+6NtdtsOvmIT*2W` zC>VhXzrDL29SVgbpiqAV4h(U9c?-Y(>kygt<_dY@>h3q>!R<91adY>%X+iw25}=>W zEW%+he*_3A=|-g&FXRL%$9A>?&ND#kQGLUlKSB(?b)5U0iu3Jz@F(Lg1RMdoLe#1M zI!b?kcm<9@-skl!qT2cZk^S)!5fO8XRK^;j#%2TY)%zS45qAql;KC3UuQw4X_UADF zPj|;~M1T4|qT$;WytEt^i@<^-%l`Y5^?xVe!hZ!^FZX%|IYkP%^+goG18CjK$r(io z2wOk?CeQR303dq~C`Z5$x95mLK;@w|VCRxV8!6z`2qFcriEsy;BNSfWAO)O5WB`^B z9)J^=g5KW(CIS`_*2rTrk(<8+th3)jbq9?JuIjSuBd?T;wdLLGTgj+mn4w%OdR~LR&HFZMbpCA+6k~!&f)Sj&DJyfHWb|TR^=l{wvlzZT#Xyec}AR z?S&h--+slgnBeQ^*II>z_0{hWhPEa0hng>DmOCs`RYbl-WfuySyytkR47DXP23~p_ z{#wjkdU+rBD(OacI|K)kRp;ZG`WVKu&#WMR!jI=|Idj->;V zg1-Im8T~wH|F=k{AQd9unt-wKsjAEHdUZG`hyDmsLyPKo(faU+g@5fg=&AuXgD-CO zlN~2H-rJNg&@opCV$<1&dh(UwLYYiM#GV-ATdKReGX*_B1!`o2seAgAR~p>HT#*Qb{fEWWWsy zzRX-7&9bNtn%mCtj-E^s6wogTC&KOc`$%yX~LC4zRtYjy%LT(VK0uRni? zmS*|S9gzcxkehxVeZ9`ycvj-La&7MPj!r016BJjjew2z15D4jjU}%Wc(joUzM1^rP z!=+DYC~YMEkpRq~PKaWQ-cxK$=s|M872rr`w!?Ng=EuL0iU#15)Pk24X+SfVuHTJ- znBYaVREgb$+<#X}j~u-Y;T6scKdb=B(#@s4HIhrC1OQkmWw_|}5PWm!T-+vGg&z6+ zng;*E?jK=QFn}7q^PxZq3AM`*t(m&;%%v08yb*8yiu(hQu)Ts>(;Om#z#z+mY>A>by#1@K{3V?!HsMk# zz=gB+(y^y=$x@7OODPzPrH0~hVr8`i*VN6-=dCGGh?b<~{U1Fb_mg%~0#gs|Hp_sn zfZ?BA_+jQLSXh8j;4&QZLC^Rtn}75b>uZd$l>f9!WJ&(LGT=ZbY~XK<(f`xX$bsWQfZD0j&KuF%)bz+QXQ+<~vAmRTCW2LcYH{h6 zDqxT2lwsk&hKFqBbVxPBnS;QNp7?adSUJSP&vvl<%4&x*4Pb0$P9Gwmr;?jt+J$q#KF`$og#NE9A|zW}`3Z39 zPz{GjP!q;o4FqSb7eY@xO#FHX_yPZ}iw#D}l8aFEn06b{{O2Y|Y56GN+@(zz)GRa9 z*)u^}TkiDV*~+%KUSjgx`gOQ^RaWT%!8#-@8>~KyEuE#;o*$(7GHdbfJi_0#yur9s zn`T1PKq?K8c$Cgh8eR18$QB+N?Z2kRA3zW|{x6LT0MTw=18URLU&eKAW@7+i{WDGp zycmf0TeKkIv)FBXPHF$D)@gt6=25@(!5}%D?%Z&AL!KY70HbeHgj2()pr~m7Z8a?% zFTm6XS6w|-s)2o>A(Qfz^o z`O#u2zy+=|gWac7-~H3v*XWn30Bde8qLD7*YB!@={$;f%eyk;VHMbWiLWBR(6Ng-j z>ovof*;54*cQkcW6`QO-M3;dreilFI{PU@wi#+-He09cu%j%2-Z(f9hm*rGY(~ox$myF;w zH7tgZ|MBytpaB}Rp8Yis7cpUpbOeIoqiMtE7UHf$1mI#li5k70aA2(L@X|v3C5CBlcKlbb|90K0-aDjVc1AeU*cC3?uT5SG( z6Xd`LfS&WU+u6r}A6>HTYM812s><4M@aFZO2Y`uzd0+kEf3if8$pQfF*Z@bT&3y0w zUGsk>4}Q-9y51(k9GG`7`0pji7h<)z!hpWG1q8ZIQecXIT44(z@*PIkj{#1yS^qxA zh<0lzN%Ud5&i0?WB?qzqrg;C;IU>6c2ITRBWz}Dt|26ab-|zKv-#-51dG77w|2_XO ziR1rX&R~*c%Ct zX3?vqKwcVRyG#b|O`@{LU}3-T;=s-*Fsqv*3B*Ix3#yhqDmu;@rx;vHu;xo?;Y+c$ zAi+%^7#MhRkuBqL)k7rgd|PAK;Gxm$2MfW=Y4f?+cULku&v`djqc=W2DDqC<^mPwM z8)5P*G!<0tyd(YPkd`xgNybQGZwBdMd&MUS#Kz1}UaO&=;M2{#{9ih~u#Pa2lL>!R z=^N2DH6~x!^?9wV1vG7EC$~0F7P%31Zf@o4U|ei$EiJ7v(NZm2Tic+34kkzgeZ5;F zqus=h(QDV>m><%EcR_$=2-pVj4OgFiiZIy_%|%gMDLojpNFus9m$1ZT7%fgHs&&qM z$wb|ViPr2oDr$m0ZS9{Ny-LR`LF%s6_1q0TDQbV3B9q;)uWfnz7(I@v+J7rOD6V;wztcSjm>Zt z+wT{iSUn&9QcrJkGjrG%Dt;zKbF7&~UNnsU`4|1&@DYfn0!Rj`7c0nsLD7U_F;Rl4 zn*z1WpJFVAI^AB6yRJ1+<-#v!9e1~U`@gBW0CR2)+exo*$T*@!-W9X6vunEKeas+3 z$0V+&>%6&GOC&lk@(8F_`(5VvP9h(DgG-l9b?~&3rr!N9q5iN*(-$^L7yGA3$Ikgj z=Js9ChP1gBH1Mt;!4LEbY817?j5#?bA+@%~z2uUD!-JhJ1>awLi_IocjC+7R zv73u^hF4*pm(cKs!L}bKI%|C-&|AuVpaaxnm!yQXrDsZLfQy9vf=){RAt<5r&W_fR z2gMUaDQv;9e;B^k{eHN)+nVp4_x#;hwdITfX`N?g_WXk=XbKh?19F^I`*m~~OxK$x9t;GLwgsEB8^b!!@(LH?MCB(lmbA3gUeSe4l?HXVQay`l zV0Nhv3y00jJkP#xjI&kYanfL@A~b>a9rk!F-q1cx-Ii;A^2_1$|6DR7nrQDh%XFlG zOWx;s$d=~_-sbi%Gg(;cuZ1z6lU);E;nK-3#l>Sm`!4IrX{+zW}sHUYxo4x~Mte z4?Mh57h>W-vvFqzyAUuIU=l&Ai&Mf2Bw_H1efDRcx;L|<6V=&mZ;Ii$v-1nY-0AS< z`5Pj+Q#@7GS5ZF4>7n_B>A*nF24zi42uGRgpf1|pO0tYmt)2`**D@$f&N(7+5=TmA zYIbqzH^=_eiVo%<3G}S_`pf=91YBn=hYnWYKw7DRU|Z5JW8e-XEOQ0C9T_b9ra}N@ z_Lg`S8Fe7m8k1X_5G6mA(S1?3Dzxp;zcJ_n$hj7*ei!r0326MAV{0q=gWaSO`bAxZ z;iGFwd$n@vmR`@=CtmX9qp#jpr%mO)nj=n5gyN9(HY94#&mtxaFfDsyWlz2w-sa4C zZho1;VnU?&a206_c-j3h(+LE#-b#lL2|Zii zx@D8QNH4myX!bia_Pp(7ttia7Zu(iP_k>-jQ0?(_(KW5*R<(%Q)`HxD;fjTSa9f*G zB(5g6ZY0hSft3Y|^0J3cfSRBiWv0NS+lQJef{r+^8_#&h=X^B${8b+@{P*{VWe0CV zTJ~g+rBAyL|L8;kX6y;CaPaM{rHjd*&$+noZSi>SpHEuQ^}wO|8L`S!R)>SJ!8knm z^SMvFV@1im>o`Ccz%bcyjiGf^mZeGQ<`=#4R3qD+c{;#kl|ov!cr&dwfYQdZ#k zPv14O3Iy##Re~-??=I((FPUG~V``q4tw$B!etGWR_jX{`tAdc}X2bLJ43(eRV`$Wi zRQ%VJr&c4A*M`gMOy#RuxQfzSEOQ)eY%_h;M8$q5O0smij4&Ld_Ye5Y6EwJG_z2e| z`1siP|L_-{Y@*1d1DBkenytKUauiZ#36uYTk^$UBj*D{+x4J=UAAAKbCh6J&L<`RZ z?dJ+^_7MAv2r;xgJl3&6JG(y#JJh4Gd-B}n1ZrKUkENy<<}udxLGf6IDy<%o_~s{l zJ!@}yQr?@@U|5D)t(>&;I%kJR1$2=b)kFkP5Gq7`67Fq6mxoq6J4!SWn0npF%M7$3 zl@NKSgd6za_X&vn)!fH!$lMXT8&~7i*S!v&S~aOJhlAyL%6TcX2W6C*;ip22YEu5} zleP1lx$UE%Omx!k0Lhchc&y7)&Gp3~d*AoX$6ff)qtL@&jW9R^FY+E`?(Q+vVdLH2 zXI9vptQU2j32>PX`H!(&>bLz!%ycuwD)WznfcB)~O#uG9l}SMR`x-_QvTd`VLoFyp zn^oeThA+!dE%r6PQ-sG;fq|4qrq)bV6D|Da`~X7@;Djx@VNj75kzhNl$#Dj!e9lWv8#Zv^_UctSSu# zuYPbeKV2M|%A)&1L763zxtNamQ$`nLGX*(l9GpXm*~}XiBBP89w>VCz=p$HVf|fFK zs8Cgg!wZ~S&BDKGG_ix&sSimYS|Muf8qKx}^n6txj)Y7O_DkCiKDCccPct;18<=!; zdml`!sU)%ILR|&~kgjez>`wisO@oEnaiR(W4PQf^e01n!+HQtl@0JryUefyN#_)`A3NJfPFY|6 zPO_^;PUaw|SN6;$T{n$iDyw}xg=Sn)xSgyidXnTK`q)c*uFrSZN9F1MT+Bs4)_!zu zmFMR2k*~7`vk%yaP8W3hve5aPK2S^dEK^fvzql~>leoM%WwXdQx!iX|IC?JLEaZPk z>+?Ht^iQw`4OrYo$8m>4xHbmyXFhQSC7VR`^<`uT*}Y!B<6yG2Ka<9B+Uc3i7EqV( z?G5Ej89m0{5nDKsd#sdl!ICxcT>Ug5uL_+$qB>TzicoV#%dO7oPQ#wrchIfjgp)J* zWb@?&2QSB*P;5lvxa}XAEeu&aram11j+Y=YEVGn~eX#G?)v7Qz+w61m(i3rWm|${K z#np@4hlua-VFKA!c^^0AP9b`C0bRwfiy0B^PiNnsZ4|<2bXzV5#?{Poo29A`r#OqW zi(@AeABrhw2KW!HW4aFd#vgi+GN+qy*U*Hi@(rMY)e~C>Y2*O_D1rHJ6N7Lr@;6P* zwB68|1-RW!TG?Dki{V|TQR{}>3{fH@I)_P$b7fVaQOxTCe3lv0P3NV8-{hm~ZWhC53JoJTb$cK|x3T~8ga_}CCRmX3V%52+ zSZL^1Vc*4t*X>_6i;MIp7G-QoIt*i*3J7lb>#OLY9Ed0*f!`&O@P~`|Ip5iRA;xNr z%~Rq0bQPCQUnh`S&{YoFM*n4wwmAVrJqFsMYpxT zGR@Ki-Z&zx-Z}a`)ZMt77~?_70?`49xk|SZ#iGcej~eY~t9vVi94;x+e>Ph!ir3zh z)W7c(+KdS;6O>43GZPgxka(7Q8I);9GGiDkh|(hFM1il9goEoV7NzH}=X_>y60;V@ zyLq!Kb-hnRqYj&#UVuvj^plY_6@)ZVLTR2~G{Fj)W`>PwV}1wIn`>dL86(25ddcg^ zDdNPI03Nk#P6?jAf@851ueQD_{wig(fW9FEHiri8aR6E+ovC6&dS9lAkjk!e)2Y6` zz2kr8(^nahacvFZ-~k%510`{=AQ`72Nas-E_=@CY>^f4I$uUC&v*rjW z$n{!y?ThjTrwH%mA?(NSWM*2v`kaRu3*ZGhU_o=V@iyV=+Dv{EXcX6qo;){;7?EkV zMS29uy9s}Pjk|%&YwNd;K~%+7MOU@J+d)Bso_;RJ=x#bc!={`0!@jx?ySX`yGJSph zWpBK7W7Q8s=_XK+q4w~jLs5zB&)*1chsIv1pe{)=G22pCzZdZ~EVwzZk#BEEa~3ky zLoZrhmP*f^dQw~y%0D&hcYQ`N?|S>33b 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 diff --git a/resources/ios/icon.png b/resources/ios/icon.png index de5b0f4c688e048074c1a177e49cbc8274bcdb35..f41b1f803f81f000f94f0c185431034ab3a96a35 100644 GIT binary patch literal 18809 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 diff --git a/resources/ios/icon.png.md5 b/resources/ios/icon.png.md5 index 5b1a29b92..d951fb13a 100644 --- a/resources/ios/icon.png.md5 +++ b/resources/ios/icon.png.md5 @@ -1 +1 @@ -3ac2bf0bded2c5da7d213095c12ead29 \ No newline at end of file +5225afcaf865b3e218501903bef688e0 \ No newline at end of file diff --git a/resources/ios/icon/icon-1024.png b/resources/ios/icon/icon-1024.png index 10123998d7d3bcbd3426b3db208879a0a85c34aa..377e167bf06a166f79f111fe2fed8b50aefb2274 100644 GIT binary patch literal 23610 zcmeIac{r5q`#*l8Xi><%D-|hQ$U3Mjm1Hetk9vqC*#|SzBeK)eqGXF~$x_*}7t+R% zv1Bc>G}ei+kNKYW^nTv&&+-2Let&+C@9{m3M+cMJbzk>&o!7a(&hxw@P0twa*e0|M zL699MPw1H=$R_yjCS(gMeBeb7hN8c@95p_QATQ##uV35@zcYE88y-UnTSb1tFA~lt z%#9HQyB|Raw-96%E)gaW#8&}9$c_l2@eo1yuP0ZUX~7>@os10i;1j-9j#uH~W9#)3 z7rf!o-RL*dG3mzv2x23DQtzl`K=1TG;KKpmkR|%k*FW~(4V$`E99As3w(Ce_Mg-^c zZRI>>`85Z7yN*$3h=ZGL+qSqyV}n9V&oym6AQ5nL(ZE#Ll3Dte{;mWJ)19fCQ?H2X zbvjPwH*XzMa?w^ApAWFLlDl-+d(8I__D8ex!NesVw^D0aSP>!o+-VHD!dx9D^y9Du z`csz`B@6PNfc``TInkdIEX?S~C0+Ctm{3V~Jmx~e z)8T>VU*8zb-#Mi!Hbvi9s*5ixDpPW zpY&L#_InfcgMxy{k)ie$78bVG-)yGL_}6J}3p++u2U2cD5K}3z^bcfh`0&dO;`V-o zItsqXzD9%ExZC67y#rn=qlwM9wdq9cHiUgESonqZchS?b=Zhuy4xKOlsjJgG{+;8V zpwb_W`uui04dFYCFq@HZb};*8Z+?w_8u{vy=KBoi)Nq?4K3c9)`i$mu3CRL+e2a;I9fhCwfPU8ZDDHT$=<`x;%n#ceZu)L5kyBl%@Cn4M)Ea0+xZSfjHd?4 zrNT3oX|s57q7FUy(1n+cpT>9W=H7og;*pZeJH=*^yXgJ`VSmSa;RuhU6xLA^4d;a$ zUNnmdE4j4Bc#XV6*R$g&f;gV&3E--Y&6y#l>FA{5R*SE-4uR2h2QKD zp9PVL5Dt8#kbB6!S`BE$Nz|G@{W(ns-@$~pva%vyVJBdg`jzDB)_?Wj=`;%y7%vGP zQ)6$byEE)gUelNUGbb(X{z0qkRD(TAe|(PEE?=!+ZDYe23fy68H9b8|0axxCRu4a- zWA*&}9js7jV+5DvFivThxJw{9uH_@UrX0zbp$*&54X_CEL)hX@qIAxjpr+|SH zHZviFZcNgV+0nWbX zX+eQ32>yYbISbWhv7oD;lhu{p#R{WrcF7PtOG{u{t(6~lcP) zOY=qNjU&1bHi1K-)+3dLS?rP2rmqm2H`Zp;(3`>ecGX42{I)nQpo59-9FO4}7#PTN zx$^|&(lCB|fr5epkTBgvm}B=$6Td^u5N*c)ap5~1|C#>tul_J5U$|6QTB;&fJ@@vZ zqO$?{08%dwf^z(XiHV68ZK30_*Z_VwQp)MgpPTbs-h2}AX*=rm^>SjP5 zAVKZ$l2ci`#?$b)>T%3$f-2Op))ZmyvCok}#-65CSLwS_CUKwS zst)Z`|B--B?ExIPa90QOt!`;B2!l@xS8;w9Q!)2;dnS+$_|8!i)U>AS_qSmTD)hhh z7M;5r*45R8j)9?qa0G~^F0g_DdRpq8O^+8G%^Og>0XNU^w1qJETkB`Xy(V8qc(j0FB z>TN=b8A-U0nh_jr(xJI#X;2tlP)TWNR_dnEQ(5Mbb!%01(Qv{wX3{+7L?&eQ4uU9` zfH*wV^q3654dIcz)sI}k^H{{dgCe*dA6 zGn2PHu75m`(iO35)d5~Wi%TVCW$#c< z2d!}e7M!cZgb4hFDj{^r_0{gWxYyp}2EfiR_{V?quL80ObR3v_MbE+Nipj#NVGz6+ zREff&y!_wET#s-8zq?b(onCa>QuEZ;SI&!5Um3o_UB~yrN`IUN=1q&_HqlZ<`GT+& zEbPnc-`_sO1o`#*cH2?fj&rD&im$c<^A4jX@bp84-7r!Dg2xljs;V@_uoF+vbvU8Z zy0&MK?xugg_i1$by`lCl(6)Fku(nhYM1l);c^w=Kuc45orso%44Hs6;M3uUCXQyu3 z;r{E#2d|%5iSM4=7E1ylO@Kh0JwnC3t1(&K8=aVv??993?d>%;`7_-AzldEg0dnN~ z%B}NR1(3n1>-hz**_tH-e}8}S$pnmM0--S=M_;{(82(p(v_v^<{7R(!xNDM~%5p)5XB#DT zsamR4hrXU`DFbQ`2~9wdsf5`01!9uQL6FeL*qxU=K0j3S`mistangalic03u(_nnR z{aUFm>FhF5b$$AJrx7H<*#RB-Hx*_j}zA#R*&j_6?p3 z6_1&3)s&BFasnk^&k4IPdI`H8yM(5m{)EC;@HIcsbFI@3t7$72P){?3;`0 z1(r%)E~2j%Ew2#qVjMc_*DdoqNp}e?YSSeh!x_PWJWGM&(A+N0|Hbr zUDn57vzeJ07%c00?ONPCQAej0Y$Up;-KP-3XPD@rs;51=qic1v#q%{-U-HTNb0XL4 znHX-0SkTlRI9i2UTakpw&D;4JQ6A{B@r>1v=F3WDxf*)x2`4xTXVz&$^blng6}X15 zdod%*#j#d%b?6Ex&Eh5)ww|4!pCV20s~uinPD-IBOL+?uBJ_EcI;kqUptI0+TyBi* zc-w#JTGl;?E=$jH^#-^uvbfcbGy_o4u)dwr_fJvYaNrdFW4@3b2C${8;L>=lO_w*z zmiO^M^oAkV~f#0@H9i?mhA8$-BcqzvzaYnup*)2opkX$)qLZ zsMh>6rhG8L9X5y+x(`Iv)!TxY@^`wa%+#*URQ$|-JPe=nt~!@4^%P&EP~!1ggOoUb zR6gboGb0O`phMmjln)AZJK#eOp;lSMkzkynp~7(9T+%|!O_-1XUQqLIM&fnE%KL8^ zp`>qbZ@+`xnNS}isKju{9z1vetc)BnLI|QHh&Eoi5aZD8gHZy)C%i|=ggW!5)3hbVZLBgR zAA`Yw#tPN*_V!N3Z>)IDydFo-w76jt^3nc9Yl9{qz%%40~e_SzKc zjO(UtK`yz|R;iRU`bwJDfNysbM2xU~R)!x3Zkvd#tSrjP3y%<8Kl_01VX#8s;bxr; zuaffeoKzO}W0Hn(F($#o++Lv1(bH`6goi7-v?f=8RvzxI+weto6FeLU8W%+jnekTi z8g4`nY4tv$d%SOXeZv#K)<>Dhj0Z+zcgiw9puPNt<6Yo*3P1R8U~>pKDWol-x36zx zvClK!y{P6$Dr^>=^4gcDCn>LqA#!nQ!x89|WCJAq$#dJ+hp$!s%!XNTocUHoXE1C6 z%xAP$ek_x6w0ScPVow3#(+f8tLT}%OZ68^kEQ+_e_IjU&rY7t>oRFQJUGeSD?ZXh& zF-}N#3&MT{Jaj!9pDAS43^FE((n*s;bR~I;-t!Yg4Z>O{GDg5mSF= zB-9>!qkimUffu#Ys`NUr9g+o?Dm7pbS(&c_-{V-CGK4d;|_Z1so}PaFyfrUQg`;B{RZ>2q@cw z+qC?h11~_Qh|{?yyNf_^zb74K6XkJOe#`F!=AOYD2bl;z_++hlP!ys+c)kU~{QKCQ zx-kNZd$g%}CQXk4T3{S_ETVfD4Hjo{OH~x`LJnbrf`H}$kN#yef)_HyV^3xM1x~VV z+E#?U0-}~fwX|u^<`nm!206RE6(K?Jh2b6ASS%lj)0~-$&{4R=yDcn$zBVL|U-HNQ z&27{B5mQyv;R{~t8;XMo`)=yADa2{7PE@S_`s6&-^8(%URemM{P8FQD06y%v>Ql3g2(EZjlr&!H$qEhW~oQPjWx`{+6#5*J)jcR#+BMSeEPiJaS?t!rFf=Jan~?$~7=8jKd>5Nrrm&9;@E^ zGrKF|#(a4BS?kQU!!p|%3=E(6`ZN}|n+Y7*zpcP|W4UYxJ?3LE$>9p&`Bvm=JGe69 zLqN>oaUFUf=$zUi30;FTYTs`yuaE1912|%W2_s=OGAhYoxdqk&rJd0kl~^;3E8$99h@d2Y3wjc}J znFv-F02Z?ip>|S6#OZ3kIa%Q4BEWIWI`naR-MB`@~1J;Ei!r+7p@8aS>L$B zEWKj>rkRMUN`~nP%udHPPUJ9n?R=^OJ{G~_nnRJklU?8pwzWZU6FhNTJc=V^;<(v$ z-NVbIXJ&T4&M$0yf08SgRQ0_c-?W}+r=IpC2aY|eN{p|`jwAX@p`o5vcSD9kur2ul z@?i@iNS>I8m@KN(W++k=5hOCb|JVo8y$m7TcV1@Jo8%~$jHRy*hSaY^db8e31_dE! z$tT$fZzl#aOZvhEOnbepd89;n%%rnZH!DbNBE&2#F20M$ua7K`sn!X8N|Xm}Ct-sE zC$=DS?Y(5*PBwE7>e~ss>n01@YmX;F7Q4-C$`4WZvfg|PeAz$WBR%aKd~Z=hJBoYJ z2(vZ)+9m=!$*r^k^v$rl!%XnwcZuAq#X0dzVw@aZi~1kK&t z6Ag&fHW}mJ#jjO3>99XFx45^63%SRE3%a+6H{waM?O+jD-$Y=2abxsj#bU4f2w2o; zG-mNedd>j)87&|3(@4>y7eG$d^1;H16ui~K=Nffv>hcA>QdR1n2x(QrE96Ks?THv^ zaUZPS<@02H!Od<)`DSsCT{m@hXy2d@87PvWj=lt97pGGxf0$dt*d^XA@y}wspZf zG!RhNcD`ptyc)Uka!C5K;$kr~nuQUALqh;c?zQNpP2^T@cxIH$KHjq}3_Lv6 z{RsOpKw!P5OS|7K)zL$&7TF{W;zR_k9723gLv%pBhqJKzRW*@Bm2cO?`;iYQxbjF% z@!ucO5g0u_BxvS#3d82A%UmyE4(>4OJ{IAq`7eT3egQKH=%Ha)x2?BvNlD4m)Gw+7 z9__y4XWMC$o(81k0oKPB0xAb&q=MCC3~Qt^`ja7W)7?ZkiaK_b`$fU~(3}d;Sm0@^ z#^m#g*?sEppstf_|xID*2b0A#O&S^!s1Pf&S;-4lOFcE5Yfk;>CDTe0U<&>16) z%PTi`KEv@A@#w)JA~-5SXHaFlQetB0RW1pTcDMkOBjImNhwkk+8c@&a`@Sc&f_$q} zSZo~__V6^Vec?egYv+7uP}=eZpN;V_Gj|7w7L|*S-Q&=}B%Pt@@%SYrW7!oTdSv+q z@Xc>wN8=Zu^xIQm*1;oBJ6{mb$k$wb=pn^~)U?8o-w z>ES~%9on4tfAZ@+$y1>UIVNx;WLE$KD4j((6%^T+yUdzi)SBAMHC}g(Himy?8JVrR z9%5-vFXsyTLh#I&3(?ZR2OPDu`fRd(_D?Ndzh0Fj;zPl#kfD3nZ3+=v5#KfdJt0cw z7$)Zz#i1D{Z^RXGPRjS1{*dpaH(E;Xl`~eCOB(V$3x0!mu?Kpj=#(Ul?yQZ&M;A}6 z)f`9~^1Hxea0Vh0fm@phxDra>hQrE7D<=T9QSGFw?bTSR=3CzCfgJ(?ZNIVDol()p z5^zbs?ONK&KLH;tlj5hn3?vk0ee{_K#(atO>1=`lQJrgR|jAUMf`V+ zeS0xL>E!OZIz*&oWxHZOg_)@@;=5cdOQkAt8cLP3bR1cpqj+-`CP%*`EkrwNBpZTB z_Fc@n;<9#?${SP%dguH)Q*N}=6TYGT&tdekvn$1Pt`^TK<&6F>o{!z8^E2k(#e=D> zJ4qX5D$DNQWt_76F5KVIonkVwsd zxQ)##HH}*TYnBeHA!PaOZHA-AiT!h=^i%HS1N8_uIKbr2{1FIw{^$=Fi8U*z{HTaf z{mIwtD3Ov~i}W3dHW{OKRt8t-25d2hmtdcOgAu|)ciXn-umH5K8}^2^zZX12gFV{ zd{FJRyY9{n$vu@b6?-yFV?IXW=gC7;({ZiBI>X<@54X*Kqng<)`Y5N-I;CU!)u|%s zamh?`hM;u3T2#6l(XdT^l1+D4X3{gS7GbOAhhsOZ2TxyY=wQkY`Bpb%nXf+{zp)!T zMw6x{ZW7Q9>w3{1yl9oFJPMf?f(93|hk@9k0TGH@z_B@}Y22_&emPmMwMxGc=9)zL zYTUhPVzr4sbFC0>OdCbar5|MeEJ%y`ShAF3&rCYnWx^Cd&dV8&c35}P0uKekrG(eq zelur$=ES+oq6_=vA|oP>Wi`Fg`SHA$+pgSUS1JFvVaJt3J)WpMekPi9pAv#*JOKBr zO{B6&yiQ4Sqok-lkMfeuqo0w{O$brJdVh`>RLGm?ZW%tuFk`lR^?+9FPne_T+Fg!mxZ(IcufG zJw2px@R<<~v_YHUS9=y13E4HuIDTW?w~7WH|3ig~$Jm9B9D=+fSVTR@v5bw4p(ru@ z&GpKaNbn_4_scww2Te6Qy{Pz^CTS285fNdQX`ru%CPg7!WPH@rU?3nu;RQ2Dt`AiD zws&-JgU5vy06_8pP&+O=JG=I-uCkvYkc4E6=tSaW7k2WAPOP{8n+pdtKGp8Vjls9Xic9mU3n5dnb6YHX& z*O>i^_Xz7P>w?9XLz6#$MuN8s#yCD=$CKgvb=~bRzTYN88bwb}4~T^>Z8ca}r#Y>6 zxmMVNT@df)yo^jl-`(%4zRVV$JySNZ9A6jpUyJ~# zV;(HoaW@Uboq*YPUU1k{tRrhvHg(ohnCyZSdqBS2nUrg$=thz@aY5`YUYJIkh}6m% zsO$(&TxaR=DsA;`_nKbItepD}VmmE?EQEIETX|}XuA3O6=&CYn&$F}n<|g1Ya)`Ex z8OF@ctnFZ8XGZU%gn&o7iz!|F>P$O*iwV>Fc2KVtFf^~*gdF9)bPZOS?$D{xZO~kb z7wqIE0w{Eq1;$r{Lso>fd2v355o5gr)l6vl8lvYJJRIR`CjHc&xs47Ee&&eIh6|}n z7C@q&ZRl+P&K6<&0CUYazcAYJ;a%eCP0JPyA4@A1CQ93_TUXEe-(_yn5G<-vtGVHZ=clp!>X>ii$XJ`fgOK;IGswh_FiGeDkAeyaZImmhp*+g$ z(tq(Skgl7Gs%dQ6dJ##9V8w~7-pqjov=7eQ(U!<4wT=E1e?b@&F({|KmeH-^AzIH4 z;?uBOAk|L56~9J`JI-ikr8Xh+JV?52OvS>(Qbpf;(Hl%8jV`@$j*a~p&BPN5=eHm< zM{jxB5vRro(klT+W(1`IJz%0z%`Mm;1*Z&re{#16uDO^Kk&P4R=BieM+}+*D7uXfL z5kfU>bYt49cV%<_WMRr=rg{TF!&iFp^7tIIuX#*; zArmq6i+TFv^eSmLyU8`2MZF(4vg&H&f^0!nC_Kpfo*~;!7W+V!54db)f`Iuv*=&O;8VKpaz}^zq5*X7{(1E-&11AE}76 zgVR@z=_QA?(>}@Pq%vLbYW!l@ia2K8c%6)8Hf0NoSf=mvi2hlnw#+u+IpAH(-+9>t ztkPFtCs*%o)tuww(5G6Is#fBTC{ee)4@cV2`6OKsUFQRO zjYHzq+Jov~U3D>3xe6(4TBRhF{r#UX=&>e?F7p1a5|Zx4v%M76N71hqZ_IHha8}}0 zUq{%Rl>UhY`n?xKuKr+0T-lqB$;xR2hkWkIR085%wY1vMuAE)FMiy+F1A>sJf~g!4 zVq04+vdm9nm?kn$DGt9fEQq%72Yai~RykXJ*lqFwY-9&|$TKrmbz&ukf6ha8sIAK~ zYI&;N-ELZ3;ts%I6REULl2ZB;;Ih3)v6+#P5qWFjPUk^txQ&PdgWgNdyu_wBP_I~|oO#eMh?Qt0nf z$#i-lz$h4_?z=@JBPOcJoq17ENH!GfRu62`#o*PIAaSvDTvgA57KIXOnJbs$i2t1UcXmSZRzyLK7f$o`@vdg{=(Q}^ z93v)v#-y@&o`9L7VCKh~G@ZACh`KOZgR!;#V9eELP5jvfvHqujLYW0&nnbHFs^qvEMuT`b#t-J@!@8)h}NV0(x z37iK*$2gq4DqjfxSaSMBnj+T>y?*UBOY$-0d3PpqxFXL?KqU{C_Nte=^FGmVy2&N8 z65wrqoyzas(M0`QbMNXW0vB|kf=BXqO%BUAp}mIkQ?k3Uupu9KUZ8QCae-OCv-Q1f z5&oJW1p#5@+tq77F6YytCc7P7H15i&D~e&@>JlrzSNd#UYf z{WWGbRm$5W{ZWYJ5Im-xkq;q+TSY{?S|mr*VO&EjwML>?&jP(pt<~-OxR$mntL6+K zgE^@sD=96K05N?q>s|U05s_PfSHz|z@nTF`qXt*}^%vAMZ{sZU4N%NZra3JUyOsR{ znxE#9G|&S(#V9~x-f_jp8&x-UBC73S8?L&eW74zq2h!qx=k6^&5;K#|vM(9f*3hiK z65*W@+^B9gd7itbu1ckHd{CrQN9!S0Xh+8Q9Xc3N4v^&BPOb4+D`6d6FasZU(QQz7 zJLVreJm;%e*z~hW`N7+Wtqh#+(c(?%k|V86m$pM1CYTh&_+B0UbK*69t)14!v8S@n z!o+z?z8r4vGkLk5xqCd0RqBDeR=+|%$ijpW{-xJ4E?)EtpM!>9Y$#sn6d?EQ>x=lf zuJ{3NW6$;T$3@rc%)Rk>Q~!RP>;A<&DaBhJ#=t^%*yk?ullE81eM;SFKUUp3J=*Itacx``Toh-sRQJV(OPp z95{ouWBiUrc~1f_k<~*DP^ttDEoH2HmN$HI*%Id7U1LH&3@iT&PH^so&f^gwq}Uk^ zGWZ>Wy=((V??W!Ih$2L6x}lu1&Y?I}gcE3bVPQ@T?>;B34^L8@I<6B1yRj$|Ectjl zRj^@W(Z#HH?J3DZ0DQESv*fJ`d$%HO#AGIcmj4?sAc>l)PH~*k#0M< zE@=#8L37$t_35vMaBB?o8luCoohdVQvZsPf;vWDC1VHfW%wJCcKQNq+AqH+>b%5~% zWM}K-V9tjyr>RHhb~C#TAF`mr(=A9yah4JSY21O%1JT9pKoUlo3R=XlQ*)}g5?}j; z#GN^sj3=(DbO{FBcODcs&I#H7_5y)c*ru`HdXO&Oy260zp|wGb?W;{be^n-6Jo%)AD4YR+**1RGOA_}ulDLd>9EQKu#T}{6c)MiF zO|Z(VoihdgLYF6j6z^k3)ZHPx=Lr7BLdg`TNo&vD{R4Wch z_<_x}$nA0!5{$wibIZZGb~G(R7F5oCn`>tqaD%`rH6`4F-zX}4RlmRVEIy*Q@-iy1 zyTQIcXhk^T-}{pg$Dzg6Xk7;iwL7D6tW?eE4#*x1FV|QQ)7yDIwXYW*%xu#*Lj7wB zl5mPigV&Fe1=;u1;88v~$dt|jPWc0NP%qR?xmDmzdj|FO4ZjoijQJ#Ar{xEQ9HhHP z^4pZPlIYEJUo+j+vmG`%yjcVBXE2gBD3W}IJZV96Ovv5%UXJQQSl>;g{=p%eF-v73 zD=5x_B0)(;;mKzgZElO~(j)5xs9B@Wwey z{uU!l*zV_TT8EQ{yuuD{a4?76(PV&9B28={Xhdc`9j!F_E zQ`w5ph32ZQBuI+~o*@fXAM5y;7Q2WKnhZB2d^qR()xxZQI)bF+*oMmB`9lV9%x@ZUQP_HnGo^oxtKRj8rQB}8EIeZ@%WuMIDYbpK#PklpV{?aKO8MY zs$4A3ESvfeH{8ev_FCF)SfW}KxZE<&GUL_!XwwCxUJzkd;g&iR<6k?U;suQk&5Wo$ zFaK?^qM16SDAT=5CnxnSr@8hrF$303QtJ5=U`=5R#~>$~{508phkTd`DGLLSxuvD0 zXd6<oM>vx3nPUjxm>K zaz8Knol-M7a&vTaxpR1InffLBeE0Ncgtc{c${Rb{0) zanFmEl<+RwXHAiJD@Phn4z%0F2Ds|)o3Z{PQg^{Rl2>#k8QW5S1&~PSdQku4^Fyv? zQGeTWIm@1RKNd@i(`qMDA-BJe-D$MDWp0AbX|DcjpdGU&b5Y)+^sxgBg``SgkMIID$HA9cznkZ-G|E0idDEwmdpL-uu- zXYh!y^YYyHJgFUS_pi*x&jf8?GP?2QU#mZE6+eZ!Ic+A$H<~#pJm4RwPY`*%6ShC+e zpbozot>+5+lkPB;`^#*W59xXSv3=GUb5qn5Dqij_h8$nerbdGmb}Ur^h@EiM1U!3) z9KGH0*JkC@KQsi5q@dpx8heK8(&Xme8{L1nWWMh~Nua&|PG~{kHWc->M2q{O=BnZ$ z)Z&v*?f?M)mUP^J(ldFQHZaSbWApE&>t;OiT#7>>*J_2lH}$1vL|Drn{NXxz_};=`tYkhHzOi=MVkT^vTkTqWE>c)v5XrklGT@`@&ix=whUS^l;fap z<>3(z>!~{WhTO1~eAuyjI|B_ZA=IbtV!iX_XpW&}cvkA0oib>F1vu*-v}mAnLSO2c(vxFzC%G{*q*|FVDOI$TC)*=QY?C5LLn9hjHqFDic#)`PQLJ?x& z04G~2tY%T{qN6+72*oBA;0VyjA?ejElIsBPz+kgGen-2vwUQX-&@1J#Td-1eJ zz^M1gx^TJ&i;|FrqEXSTiM(uk2Rww%50#$_Rh67`Hh1?teXZbKYXjDqs7fdH zjEmC0>Ea^}&fGY`V=yC9T51G(KI?`NS}H`{wt6y9he<-URJ)o-=?CDwlHJI+`w*#T zrMAsRh4p4DfK*%WKIg;ZbR|fUubg)ztJUc_S*Gb(>#^rEGVjQR$DU8gG=6LyPS?7d zo@E)`-cl;iXB*pYTngZ$Q0C)jie*`R+}2oCkvWdZ*!Gsk_>i!Ro>~W^c5d9RJ+>Ql zY*TN0o~pTZ3pm1?N@q3iU88bkozg3MrQ~hqQJ>b3u7hH#uX7L|AD^eG`o~Ha@8?Oe zS3n||`*x?(aIu@n%lq4B{iyGu&{yVlSIjVv?)oLpvHaM*-Mp8=f94Ro zIDZpmEqjBn%> z7~6Y4i$CJestdI}midBOyOUa;`7TFGNo5__$tQFYJR&q8sU6}xZVoXZ)Q&yGveKR_ zk5-Vl1$1#cL%ZSeX5QZO`Ge>3JGFL5IG4t$;iiml zI+?NA75PX)eg@K3991O>iiah4>=>a~A9rIqQ?_QN97&MkPyJv7Ku?~ODO=XbB5$F9 z>||Pd#i_eZDajRJ)Ew&+uQnT3ferAkLdrH}l}K*m#2= zQmoIctJBkO#Iy|we73S(N_aC{#EurpuobU?+waDSz6KC}+w6se6=Xue2xK<6zj4VU zvlDEWkG_1tYcM4emfb~C5|D0sX@z^Q+wLp&>wC=Uo;{32j0OUA{Ul zV;yr5H;f<(+T?=N^MMqjO%c#xJ)A#ipWitQ-61D1@l0d)UIhnWe!d$IO6Fja5U=fi zG&e86I6zRJo{;~%_NoqqB=?+g4dJHgmDpT%qnbZ84zi1TzjMd*frmZED%yE(9J$OfKko;8)TAY&I*g&gxp{Lvk z!#&}$lkeBJwPcQ=$>3#sme&vwd{eDkY2gDa^!@_U7LY8LeEV2FOW0L4>CfQ^^5YCL z5ehzqbN;M1^u*<)Ze38yNf>(rPg;M}db^kn2J{?78&F=4rxw(vAxJD#lmcYKdhAm! z$`6}|Ca>~@uh_E$awC3iQ1{^s?R7RGb!byPv;ikz<=WC9SI-Yy7|jL|m)b79v*sp_5x}iyhybbCBZ{I3~g~*05ChJyPotg~obV3Yj8I z*Sy4+TE`lShbU98rl(b?*%|~F38&3^om*cL2J$oNXV6-QKAKl5E3%_e1^M;8{VjU> z{6n7TqW!Q?EABM<@ji@z#w<=9-9H*K!vyEX)#W!%vpj+#myX5Mjk z4v(Fnws7mBYry8Bg#`YhW#kf2{|t1Re%l$+4^3U=llNH=1VJrH-;;CsO+aq{v)mG3$OtkqNt*9EGV13ymEnIs@Z<6lJ)Em~$d!?a*`4C!aH` z1AWhVv*&voeYAnI3Lc~T$0mXY$$=>yy6I8@ zGb8!4!LvVaLHcs*n00SWqW3C5s>!1bik^X^C(HY|(Q5*(%=Jg0>wlxIsC;Sa6*0Tk z2(Df-Kzdkdq6qYhCalUa!GZ;0!3+M#`Le4Q(1HVaNdxRx67Gej8~#=5qFZTF4va$- z(%~7!(4mQ|Gd4j<>L>yGcLdOYhIf=QR37lZAKX=Hc z?73WdmCsM}qD^qEp1_5a4MW$@^H0-VZlwVmE8`YJ=!=OC??$dRLEar)ZyN2_pKt|0 zqxy3o=h@fF(Ki?&3Z|O~1)S*rTsOgApeGobY?+xH50V43aOkoLH=zs(eM`c?wIF!e zLi^XRk5=Vii}3a$bPxfwkrVVW=gsbc!O%EY24x_bh2^tX(3#jbp@TxAYSCZnbrFTgiQG;hZ4NFcN5 z%Pe3F+<_p}{jfi1#2V1K&0yg4L6}1z0-1wXBxKb-{`+C!9OCv%#NFr}rk*fkjEMTn znKWmRwY=H=aB&BSO%wzVoiuO2g<$cJy9HT|Xt!D0-?NKZvCs9x)b3;fJ*z`rl(;MU=S3rvHUn*82VGr5<0wdT>U4+sk^C9%LDd<4a#R31J z%E8(k_#H8o2eqX3BjGq1yY_o;HJ}#0Cmi1i9sj1~zgaSu9~4@Qkc!MAG?rBk)Vlxs z&S&Et2sEFXGeixYJOvd-BzzCtAPT6LZ`Cwf{qD~JL}uNGT+OLj>^*1@BVd-;H#0SL zI%Ek3yPCohWT1_!vb&~Gu6&xI%AoAMhY9T*w!7Aiayvqb20MdxGFA2$Dxnw9MX`xM zQ&BsRVYYno?7uGp2B8Mpca7$UzJ3isr#jk^Z4Bz;`MLZ&fC+$APr)@5h^ZUOM#t#F zt~Fhu#Sm@q!_~BaCra|){(I32Z=ja9uc+KAztenZ9}I?lwy}W%1pn&yogoTP(J#%j zjpi2w?$F=Y{HA);=IUA2rr|{r@CD15$W(=XBbuMhZ>fVMF!cR{RxpLKqIOcA1$03y zP9*m2LNCJh(#03LFChOO8;YVHv>TfLVp-IO+I?GO*T}or$@yt0U?%y)c2O!XghDR7 zBgbTRe)?Z>2xCv;ZP_5<`>&bPM7%#MD&F|9s+ z*iV}1jrY41p^X%(&EWkmm!UZ4oHWlcn5u#A@#x~QobVPr!!%Y2_%q6yx}sCi#P(vg zcJ10yGeZpm8<zr|fP`JZu_(;-5H ze~*B+0;wiIP|H?m@NC9zb2H(U7mU6kl;1anho;*o zOMlZyz!9)45}!P)G&&JVT4o!K?YihMsG`_3xL8)+RD7|)p6Z8kFagVj>=ICP(yOKx zc!qTL{Y{_~KZx{oq678FzXyHwtfLJ>XCv-w-`~$VF=020wIZYEb?F##VnWt4&}gcp z;?*$t`w>gUMqpwFmtp;?uK`cdH_5S~l*7XL6cN`Zfv`u`qN|K>zp^c4Pi{pUZg|NO_q{-cflPro#Jj?VHH z=X2}Y(YUvub@ut_pZB?R(dV*;^Nq{!fgDy)RF_pykv*(rsi>r(qN1Usd{99_LqVaJ lKLquy|8s+f=cOxu1pfcukbkP_2CCRj>YvdoJm&c4{{q@iLc;(6 literal 31658 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 diff --git a/resources/ios/icon/icon-40.png b/resources/ios/icon/icon-40.png index 7f59b6edc7a9a6236542d3c59fdf40f414aecffc..d257a53035e66fb907617cd1bb2389164a5bc6df 100644 GIT binary patch delta 1427 zcmZ{iSx{346ovy>6lhiUu&9tAAqiks5`(nL0J2pO(}JaRBqS~H@E3yA3Af+`R6?RbN-q0$xW4Jg$d&J z@KCNlilRE54nYtYhF4ctH5$$M_;_b$XH88_VPT;_AdtyqYPGtjr|0tJ%klB?K|w(b z27^o{<8U}E7Aq7AmzI_w2oi}z0RaId63NBI#m&vl)6>(#!^7L#yREHFhrsB+wTkLs z{k4UKh4S+9urP6$tE(%M$@KE_;&Qq3^Yid3qz|G}sY**reSLii1OlB-r&6gtK0ZxN z4|F;d`S4=3?*lNI{4iJ&0*bIe znmHic2nfx=3|sYCCe&FnJUo2i!iCn>R&h&9OI=-^ySqD^<%RcT3HP{bvg`l}4oJ5G zB{(q06_jlSGaY~wvz6O?002fuM-z@6B@+p3FD8>g*AEtpMWa%k@mmiEkXEG5fOrci z!GjWKP-F*Y+Jo87pv)CWF@+xgytueHI5?=)YEPv8gmogg(^zCNg+U;aT<|y+n^SZy zUvrMJoMjJWJ8SMFAkzcL%xlg4R4@apKF>y1wId@V&#$FQf*tvRv~PA%B6oTmKOA?x z;>PrcDUG~Bm1Y4-@yi!|Q5agj@->+41d6vHvm;$yUAkI6nq>~>;?>z(R%CcoIf0-k ztmp@`#EziU1xT~d+)YGbt+pu>6xkzFPltwvBofK;Ey1GD5|Fxp;>}==8@!;OHeBayi`$mG++#KijgdZkjiQhf-_umN)j z>O8VeH3OtuYZ}wFt@&WqCS>ZFc%|YyAkh#=U9VeIARmW-)D5cR7*zrWNH&4TyY*PY zBW=*1rBHVTB) z@zgISNrC&5F_>CP#W4qp3hE8cpt zgZEm3Eo*}je*KdYiN%iJMX;gNw*yznW51FV6*Ptf1_$-ZO?$e@6bg|)~|akEpEjY6fm~Sv@N;DJoYu&@-NW zZ@jjp0Kk@TvD4e4S`IH+7%Oh}7Tey7`t5YAIzEs2j%+$uCnNHCQGZAzK?Si>x1L5f zA0K@ri&b77A&WTJq9VIgLu(rxajdCKvbP}i`8(_AW~C7)^Q*uKgJY%}HuL!5d~sk7 zamU%(#dRI$?(9xK6(R3T`kQ^imBwzsC<^wj3(X+;5&0P6juR?w`z+llS33~)i_hAK zv@ap(@R*-nDdV&)2-z#sc*fZ0J5xs_T)<0OLF2{V|(cuC1tElh_*l3z4Nar zLYVS>Mo&_gWTF&BX14ucm@7A0FMb?qxMy$e&b$Vr(7^qdLV*B-R1AieKOC}<-1$lm z(AE_Hs1$x|ihvV$QlJ+MjY8e-L1B8(=v*qD!(?)3+w~-HC=_A5W8r@c35on82h;!G VV9cs=|6K3D1o`jrtMfe|{Rcp>)4l)z delta 1232 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 K^y*+vvHt=dDCgM# delta 2528 zcmb7GX*d*&7PiO8E@Ti=w!xUO&I~dkyBd+bY*~{LSsKPV2BXMQ*^{ZyWXsY-wh@D@ zeKIlDWckEcL$Y1>-~Dla-1|J|Jm=D#Wh#A1+PK91iK8JQyU@(41uL2`&r{3_XPnCnqTO)bx(2Y@E#h0`xUmDjRMp zo%_77<*)56u;#CQhc`f_b=_7$_<3HQM~Fu}M&CyDnP*@i!A12N5w%eCXx;q;dwleE zYBJK^xP+EBKJK`+k9g%X1c5+0dU`njo#pmze%ap^2CysT09sML#1Fglbj*5+{Mg6v zb$_^X;%~V@Bg~AChe!O#8yl#GMrZj;8C-Jmc_7g9?p>TeF`g#Qjpugrsq6}K-5adN{uVdVp7*`%)u!{_G$QH^@30!^|)^{MLk30Gmjfv2}qCB~49oZYt}l zFgH|gb8O5W`&!$+)XKhG$)a^N_+f3&en>g`N&s3S*-L4lFgzybTI)7vuUAMzi%U!# z5tTyuAs?|k+*fcsbnszX7+A>iVomn%KbE&HEtzwL5QU+38#z?5B=siuNh4V^L}rN# zXzSZjv3#NV*4U3HBh%B<*I^_=Wq<4~COdWz=NS)0tWl|?AY-;ZW;M`>dXprzUL-NM zp{$l^aKy_v)+sE-({P)lzD86*Z)({*upT8=Ic)x_0U3}^ar6r+ntcTT3lxBDLq)jnjBYzMj+47m8-Ra)V5!af z@YT+P27-`urywdYxUPW&$u;_gks8MugkZZ9@Q-;aMV|vNEOmZ)rg(h7-aMxv^t!O1 z4d*w*)$|%A>SZ@P+ep7xei{D3=B?nc2S&v>VZ_Dier9Qf=i$&bq zAlV_R%^RF5r}j3Yi+g*`YR5r2=Ilh_&wDpoJNBZp*I#0iP)a?Pp2JSIsyT~k%d^yu zXgTtI#=H;Qq*v!spfg|g8-GFML&H}xg_QlRC+LR;00`zh#*FP-SmQe^kXm3ANKf!} zc3^fXP(gA|NBrP<+#Hj*oh4+5HSxDyp~A$3mTLcYB51n&j#L5l`3ok^;{uu@LRQ$O z-a)A53f8n`lJXVU^&;fS$`Za)eExB=YFqnk)LF5lV2`w8mBbHTDtV@I`0gJ%sKK<5 z;9yr#MHHS+x~iD8e#Q}4@kmXHMD((_Eov~S-nIDt3D~~B#V-P#ri#QO!$gke)C5-U zBP*upvT-y}K=bKGKRiz0XX!?pk{dFu-=ND9P=IRj&;x&BEm(ihO1uG$f~jh|j`WTk zWv%*O@EM-~(%7(t4$>ydU_e=!I~9^2-^Vg0KCT@4)>xc5&6uynLW%D z2%b1T_vuH>O3?H!&bZ!V*8L=T0oUStaqZr2*AP-Zj6Xc4-4tJ|#+wDjk!me>)5@d4 z3`xmf_h$y9_hyEQ;-<hH(_QVONIir~|LxcEEdw#eK5d(`ou8SjYq35pZAb?$8Dd+Z!3UChgKR8Wdn>e^b6 z*8QoD_I9R^;WL((v$$AzFc&r{0;@f5(=E;h$V{cz?Y*#=XXkL8Pv@J(=-^|H$Qu1@ z3+~(U?h|_0XO1QO6l2guAl>33MsFWbSJn5yJZt+K_`D4?i*RF9utG)#(L`o=e`?nr z8~%39X2`C=HILiWJ0pMnO0n+bZ=On%U4~KMnB9pkQkFcK6m!5wK~+~7r4=5pr!HuU z{1siXo4@B(9os&<92MGVS7j3|oGpjnKg@9`aOT6xK3ww`Gq0H92okI(H!o?HKDt<1 zDe7E!4CL;RJRDbGE9=JG0H)jLmoxYt*gSBO<2R6O&Q^@=rn_u#M zSca|MbrfNb;OXVfvtFiYUO)1;eo=Tng4 zbvZc2%0qd?%BNGg@RS>X88rb9L$c$n9AK;yQ38735~?^J`3i(N!dR!+=ICl1D_y>V zex_4f&Ovn6<)Z7xi#bxsPh1&hkyQ4rd!r`Bk#KJ3!tKGIJ#PGO-L?t5u1h%4 z=W8av7$sjQJP@2|sK%3X7BW?>%%r-VAC7hZtXvMuw5}=ACLIsfV{hR5sn^e}e8(=9 z=xyX-xb2uWwKA;U@1$2rZfW?TKz4ArUu=V6#oc@vYmn~*iL1FI<#J|*5zAFUuCr!x zV7bip{}1$@FexA@FIwwCai_{l^-`#@L#UT~s5i_r#QQWbLBQ%dD&SMoy$RNWX@X%I mn#y1>3=HO%*0Ilu28dq%@3eb#?9bDIOlHQ`Mpei=@&5ur9l{a- diff --git a/resources/ios/icon/icon-40@3x.png b/resources/ios/icon/icon-40@3x.png index e7b0b937cfb9873efd971b3aecb7296092bb0909..f9c0c04901bbc895846b5df1aeb1b397cab1bddf 100644 GIT binary patch literal 3947 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 St+mhq0000v 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 O0S8+bn_8>uiT?wK>JTOX diff --git a/resources/ios/icon/icon-60.png b/resources/ios/icon/icon-60.png index 1935253619389c23703d3fe10bfb752bc8f7886b..f3ae32330986d2d29993a5ebfe39b70e6b2e8fd6 100644 GIT binary patch delta 2024 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 b@b-@#eg1bsN6H!!Ab_+r^bsZM4+H-LY2AmK literal 4005 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 F|1Wuf7@+_F literal 6336 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 mfF&dX_vn593xVHLS1;~G;1J_U;GDGiT5)A diff --git a/resources/ios/icon/icon-72.png b/resources/ios/icon/icon-72.png index d530e8e1f330846daa2abf9bec8d5cfc9adcac09..8ebd26a51d441afdb752d0202f0e5d68a3ce5150 100644 GIT binary patch delta 2405 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 delta 2269 zcma);Svb^<9>=L6St283$uL7qreqjV&Z*@LID+$x>cq zpEQ|d$;@O6!%)^Jgk*m^=iHogo^x?7zR&OC`+RPGH=plMaF;kG2H-K{;rX5O9Yg~j z9sxshV=O*&_*=G%pBzKJ70_(DJyX57eM$dS@+b2IF`;;fqy$!7HNqYTs>&B| z#~yBrP>TJpV!Z}JL=anKzf{)paM#t+ySjUNG_0gs67wbd50Wzm=jKT7{P#BC=DZbFLtRV8f>H5ONpI^?F)YaYi zFv%fcE!0$2Qk)y^Ln)N7lNmEB_t&Ue(h6xw~KjKd_f_FIaP{>d&@`ZDQl5a#mTLXk+qUn0pXFD2YMk3 zo`>$uK<0w(RE(AbAfG{q8Q?{ zbYl}K^!x0k%XgQzR@W*3f0{!T~5O_1rlDzkGn7F{*6RvD3;S2VRNI-F#gCE}J%1%wjiDqiGfp&axwu_ANTFc2F z&1cb_nZP6Wk{4_fY80V+Gs3xF*_GP8A?fO4na^@83dZe~qK5My9STfB!II78=5VE{ zm+q-fFHxb*o4t9gkr9&De)u05ahjjv{`f>EsB-xUyu@>QrPjtF(83$~?q8s>v~QHo zT>xao?Eb-i04xS>OmYRTyP9|>9sTo4VVcKtxY|~hp<0At0l`o#s$FWzTRtA;7%2uz zQ412omDzsn$l|+YN+V@(w>Q&kJW2Vs#(802&7Y9!{fINnFZ7K-&ad%Pc$JeVFs!5WP{|I6;K{-Q_t^yk>e56>w4Q50LY2@IX}2B| zmi@U~n6}7WCJ_;~X1Vfn<5CZ9C+|*+vXAfG*W2=92|fX(;rh$@h=z@^1?@L;H}wL3 zncKUWIKyT`+_Ge!?pmjx#a8Xj_tmtnpSjC?yW$&~o3yxvhkIJ*8CVtIo+UluDV89= zz;y!0alGV1$Tcdy!dA*+kM5>EOouu({@VGHB3$>u{bLI*hqwDqLEGl3BG##H|ry&{d#a8WJxj8=NEfhsVCTF z*v4Pi#@(Y{jbaVEmy8vn%XXmJTnfRVbp0%C};c^u6b| zo8vkTwN-i*RHTewY;QfGBZ+|N0K86}&_;ecb4t+Jym_me+YU7UvCqII)EkkJuBU}5 zMoJ9lrnZaH#_yiC6s3@^pI=ybVG*PrWOW#JK4JUslK;% zIXEbuy{@x&f%qn--+T9a6P+S9@xB`L-ttsEVmiD~ggy4qAD!p_OPB4js;>H8xaK5$ zAfjLWLCmEOYk>Rp@cQ!mX{Vl?I*y$OLFZ>`(4GfR_{>#$5A^}@45--_G91y3B@YJO zxl8bdn7I-7e5=RPX+I()FQVok9ErYo`xi9{l=+8@h{rGw{+C!0d~n4`-L$$S4Ca2t zG$XR+^*`Def~BxQjM=p`7nwn@2ww;J!QmZIGHQ?59BlffpU^0~+)6&O_^#qW7R`b( zvd&#Q&F>2EX95QG!=BJM0xnN(c z2Kc+R4qRRGrno?zzr(0R*Y4BH;3!guZErom8CtrfJlc!4_JngT`-tz)H1^P`8AGjh zP0#|%5<^zsXuuGzEW0RObJPFN$p5bDB?U_@nW!YZLEi6?p&VplALQW{Y%leXf4eXNF*AG3|tcN`wznZhKJ9!uzwQ&6WCW#%lZxQn44G| JR~lW3_#4H~KF9z7 diff --git a/resources/ios/icon/icon-72@2x.png b/resources/ios/icon/icon-72@2x.png index ce2a7efda74c4593ca67bcdb1c51a25368fca178..42c444fa8c6fa704de82c87618a0b64fd367eebb 100644 GIT binary patch literal 4719 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 diff --git a/resources/ios/icon/icon-small.png b/resources/ios/icon/icon-small.png index 6ae30e55b18571b8a4663e0c2458c91456545d65..f7978170fdb911af710a84ca794dcc74944be526 100644 GIT binary patch delta 1083 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 delta 1744 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 aW_X05|37_7vrL)oI83gijq4H4vHu3Pv1Ydb delta 2739 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 delta 1744 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 diff --git a/resources/ios/splash/Default-568h@2x~iphone.png b/resources/ios/splash/Default-568h@2x~iphone.png index f6f96fe2c61c936f3255ec65bc6c14850c31223b..9e7f3dde58f7d2b45d1f58b4d07a45f3ab5c5d49 100644 GIT binary patch literal 22258 zcmeFY`CF3d8#eA#lQo%snr3p$t;MuWE%%+8W>j)v#w9Da7ShOY2^9r_X)K$@)RNM~ zg=XAFOf45s5y&i!+{Tpz!OUDh0T%?>->2`N@IBt&-tjnmkVkyHx9hyG>pai<{x5+( zJHOfcjgF4aPO$G!K{`5{e$&y}lDKUva0it)3tV-!#GVc~t)ufYZ-?sg*TDO)5J5ga z>eLUI@PRk`uKETA03Wr~(fRF;j*bGj_1l7uPRa=#9l<3X9k-`CI);fQ?Z0{ezu0=k z&*vxL75I{$q2hp-?TNk@5IQ-^0J#HFP>T*~BE`-irJCzSai=s^rlmo$tT?`ukl! zOziqvZ~wMOr?yRmHOhD`T=alA50Mah=zqhMb`;oaaDL|3JM|(``}|~hO4PdR{F-Yh zhYZ)zIqZ#THV0bfQ=qd&=kSC7F8__ef9v4CF!&D&{zJn5knsN*B=px_2kGeK?uQpQ z_p`moBs{5oQAwC)oBKst)r@OaUU`z(WO$x5Q%C3HyOW!?opKh0jlt*}D-MMn2aC#t z-kS}^Ux3BNQAL8sO@*K^cZzM7fwln(g9NQxrX7a|1ysr&gjKV#!wZAnn=X59Kc(aS z=!t`~CN7J(Q5Rxdg|7nNO4xP&P-t=Lzg1r1yU6XYjt^9~Eg0Z8vkuW}GCf)%4hc{2 z;b8ThHL8xkarN()F~CC#LW7%XoZ|gsD5?8X#paJH0vvBr--TnN+qX@=@MM-%l!5I| z>x>usuyi)v%hcI&>1R&rZfADq^)1W1v-u_+lSa)DRwwbekuFd0Zyd)dG}M~$)hkS?PK7U=!#gAunWf3T zL+#kHgTIdA%P@;NiBq$OyVYzLN%zaJ&`?1;y=SPS3f71e^OkrtcghqN9ZwaKCzD44 z+Jt1zE%|I=?2Q{owX+OWp$Sg4(mTCPN9MTcp)zOerL5)01~_MFqREOfdCTw1pJm8< zqXz<WrXRo-F zWlYNlp!sN-sNb40nO|Gqev}o3hR3(_t0K_CmNxlZaT8*Gpl@(6HYw?3z{qi*tBff~ z1FLs*G=xya1g=qPLD>A0hKy@5F)?q!r!SBN&9{JhQ99WUa z$oSUjtl3?(&Pxw1dRfcsO0|DLz%>*KC0~2)71{xeMM+Y(k^FA-#$AsYqe0&h2N=OJ z1-|N`BZF^xc$F$lZaRl{Og zQ_@T~HDgJzeP3;?YCNTMI`QddUH#7!gVlY0xSYe)i{B$h)z4a<#c zCh@?#X;D#;KLiq+nku!azGq-5J!kAQSLTUc{r8@i14H7+cx>e{y&Xn~ zNw?UgBZ6$%=QGA_;QO`5$!$88U#q%6sxx1Hn9Nw~H`2dXR8}?sOb!{&NiF~ zqezL2J@Etd^5y-u*p=+HCXlkpRn$6DvikK$Y=F+KkOw~e?nf=n&5yHf=`Lc77`?WV zhx1@X<1krWmw~x0XqYn2duMufxo&)My%DF?+~l@9f@BC#VIf^o*_+pYBw9x_2sCR{ zFnccl^LThdzmg}TcWBk(!FiBYJ{z~}6hHaYBF?Q6{UTM&EA0VkR^+qMnpqFkw1M`| zo~=5vuuTuUM51ha3cT1hV|qvWy!%v<0cPRMmr)v7T(@&~FNSl-*0z*eE<3komf$pU zIiINE-{f_qyJ~=*Jlg_1U`{mcY@(0o{Mzs{JOLf~z!RN;w7zM7o#c zFN0Yo1bb`1ZSi@_&#@d!;X+avn1oW{=iMSel zi?LtlLRf7>dHBVP?{z^NogK5*3CvipwW4NtagMQb3=nCNRtW#U;T(xlow0P)yf;tv zF7Go7D`c%!Sa}}lnqKBvVVeVx|Nh_;ltRHxSs3Z#W1dzBG?83CRIUDZV_dIiFdtpw z!Hj)IK2xim31j5rHkF<)tS)>gJT8K`NB9m~uKSbtIn2Jf5M#2Xy*;Pfk zY+DofIi74R3RxT7({pju%&8W;y%trjrU)AD!P#%yph^3UZ0b95(Q4=o%P~n7l!T

=X4^0p1NwX9WjgsNycrJkxPqhZg@t`6W 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�SaX@ZcT`KkaX;uFQt)FU1~`jMa+(U=i1ee&e4 z9ip>3x01)~nWHsajDtZc>~4FZLlYR+`xi#YD-bDKYwC1y&ua6Vcko3!sotT*5~M|N zwTY_Kyj%Azs`qpGwwcUGASRM-DQs1Dn<1EMgh84WaN@-u-5U!W2*MvveL1?=@YBzZ zdndrdZxxBxoS^m#R}RpiidNtx(*E@`QBM`W+MZ2$pV@9;H08FKSSsC{_l_Ju+G#ut z7|R3Icf^5fZw-JtYN~>!A>!4}mi-Zw$Q0Z)i+?V9ZgS7XTN*iW$&Q)vKQ4`up~~`L z;#vow^(P5*JuQ#Pz8!cpLGBM9L66r4f#kX)SbjM`11TMxBOWfbd0k+;qXO#baX%Ma z{f8R)F$+4^3a|?{W1ER(iplv3FJMmKssdv5P^y1IAld795!Ykl+aJ5Cb_|O;k=mNY zkmA9!9HKBPT=)Bnq3v-SPE~~DZ~I7?f~Y5omq0@EZoaB*^|b?0Sqpfh4o@Hg>?Vm4 z6nE7og`vdKDdJkPsrr+X|JF=s>*ESyU)f_pUo7Cxpj2T$?+7-<-8dHoxwq0{aPOZR z;mBum3jn(vAQhIV?m;;g_Qn7+mn4iv&)0GPcvo?Hj9fz&`NlZc33nLWgCTj1b6?-9 zoe30pXU=D5bca@E0Zv^b#3xssiBws8hH(3BQI8X-OvNPH^TC$RJ$q=D-&CzaJOVfLX= zT5t@oss79^Ewn->K&Vc)HI@-I-J@dmn%bpBP#D}wKK%%ZJa$sc~2aat8QWr_0 z^%u=?4violtJeHY+GqpO9}bBjSF=&xB)s_}fyAo9YYkiz=t?c#>BXKCP3-{X!Z-cz ztb>X?jYkEA5Mh;ML>l#Qq!|^#Bz#v#A5vM*3r;qawo2l5L zx|*@eBbLHR4Rop$HZQfamKOZ5FhI;TDEfT6U)wC_-;Z7A*xKx%da6J<)g znSP2?X9e^lV>sHhs+>CWoaI=bxMka^+(sw7?Q^%(KXhNL{PUhbm+TMRdSQ*_rKc-g zfxT`yUfHO6Irf(r-*wsbshzyy{un3qc+@LK#?El6p#AOhcC+Pp79w!fq;4I(S}QC+ zxY=Pa=GHfwn_Ie6Hl1I7m>Jj6xx4GP|1STH!GG)EzcBa@3jRaF|B&!MB>WEv|3kw6 zknlew{Qr%F|7Sn{Gu!*-8s$WGPY0g1s#@Y2QIe8al4_M)lnSI6j0_Adbq!2)jf_JK vjjc>gt&A+S4GgRd49c@)CZK4@%}>cptHiB=&3uUtPy>UftDnm{r-UW|5YOTC literal 49733 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 M-%PJo*Xf`C16A*WK>z>% diff --git a/resources/ios/splash/Default-667h.png b/resources/ios/splash/Default-667h.png index bb7d2b3d90fe5bcb4bd9b1fab3e462e32412b07e..9b6ee14a54bb72699a673809151c34394c72c068 100644 GIT binary patch literal 26694 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 Uz#hR+Bp6_V4#4iO-y3`B-|9mj*Z=?k literal 59727 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 Vigmd$@P<9k7ZB%b&tCui{{WePwDAA{ literal 116865 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⋘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 diff --git a/resources/ios/splash/Default-Landscape-736h.png b/resources/ios/splash/Default-Landscape-736h.png index c5eabae52816ecf2ddbbc7fd550e0cab78f02ce3..7cfc62946cb6b82ad420de9e988802040da04908 100644 GIT binary patch literal 47416 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 CvP`D{ literal 113084 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�P-{`5p{gc9F8fb|XX82c?+L=!p3a6$M ze~I|umTCPseDCc3xHVO?MhbCo%}HN!i}O%gSvCJZyGCIfnv-BfKkjH_t!?m_wFYuv z9k6JCYT3$5%*UCMqls9rc%|t)ODC4C7*`5lL%jbQGBKi-7pn&LL6LxkLW5U^NAkl8 z!UB5D3jiq0;o0y6m9w+w_r~q{)RNuhq$7Txnj02qQ%PTiUmM&~M5zl{pnr?XMmCJ( z^)|gc=X&vC{klJ=OaZ+<%d%?o2iyREW{)!obI zkc8R2nZ2Cu%}^v#7aG6fb0+S9b z?-!ezQAOBzkdVrk>48_L6}133#sKgF1(w&4BQEpE5_6kCe`DOErj3Cn$Y}6>B0Jhj zty{wCO$FnJebDw>v47I@Lzyr`BJ9%wD!d{GJNl;z}!MO03*vU|oJA zw>NajPk(mEadK2=V`0rn41-rnW%I3FgW}fX<15}*?3}gNAI4nIh&BW>wnSS410WGY zy=uN(AiREAdinna2msv*@QgqGW7Dwz96h9rEoY7yPqf5&wa*S?_|88FWOL=+ zT6bi?G-eW@+!K%oGl8O>tSNRv@f9h;pTLSCOu}I+hr3RLIzrJ|6=7h1Gjf5b%DSpF z37^r!t&f1;o!y(&%i(13HlH&9=oV7ni#Q63q0qJlEWrP1OmFZ+CRv;nFm>HOF1f`- zjMVz-{xB`s4UcseQ%<|e!v_Hm;)7J!r%((G_ccya+8w>6RrLG}kvhGhCr$M?MfCR$ zcCK1SY@I!zId6rTU^-BUFR!xr1iF4% z_2PSHdB37{W_&+=1Fpn`Ppd35Uo&(h4xkbtn_9CukPK7frE%9Au8>PUfzCu(X{h%I zmIKOvpF?EB?@3uK7L1b!{@caQwb+PHXA`kz_@uu7^KCC#NaAL4d%D4bG=B<5!e@%G zKfyWKUB=SlqUzd3Y-G?n|9Rdgj@yjz`uXbOkWx!wN?6saRR4T0zxTCY5i%PXfU#{P zv`I8|)8CXV`YbC#rh(Mow)VH&s9**}Q#jK(ZtJT-YuE?6{+{4z4APPxP1G(@0YX|t zX(FP2J{qeF-d&Vd+ySy7*pK1A2ccfmOJGTE(BC4iq0lHR8qmI3ARnWK$A0^|rzw9W zdEd~CRW{_UtX90-slytuw)2Q{#-0yy_jPx&(}v(T8&FizTZ9`Z8s)h;2jM`=4QIGR zNZ)?!sQ-lOAU%&j$Byhze6}W0E)WLa+vrPt{)<4>)bh%<0d4580v6G?n5`eQ?`;Wo zf!W=I+@)%~z668y_Mu!wHl%yTv=$})OLCy*&(Y2}k(Fd2Z%@P-bSo@;kx3rzsphHf zS}JJdjylVozLcO}tzQ9>)87M0KB;MI2Lk z!t@Lb59FLg71|o0fwloX1UWB=JL=Fcb&u%d406q%)-#Fs)*+E`y9akzu`@_+apSOJ zwdY$^mI?TG>Pag=GXk$g^-?0!1zVZ}RzEugd6m5{J7D{m&Zwd&)HO13Fu$FYmspFf zB)1N?9p>?DI^QejlgNgu=WBT`y!L$HX*sZ`J&%Q#cspT}y0OiO)fMcu!iWMz!F*LD zz1r~|g%cM@K@ZsLcj1%E4j<)ph&`9S>c^j>wTiw!@~E)I>-oa;k*_*@ z%Xoc_&D;9%RMst_c;Lswap|Ax-yVv@VKQm-ydp4;qV;i9v8yNgK z&ziL(&ZqLPsCJP_7JTp|lEG1ogOtiTLI)X^8Oe^gG@R7=@UPDd1m)Rn+5fe*?!KwO zmeKq%#)fjZ<;AR9J7P;JKgzLZ(4^WiFwdx^wwC_15>U;8?881za={WPi4pA)%z`#G zjjTTiBpAm?K(GW^)4y>n116jc-!6)9H$86lq;YBg0djtYDk=fpd_e3^HU-oXe#w`a z_#^lBOiLiLOAmu7=@=Zw^m#gbWNr}*@Elji#JFn1IXK5Ti`N%I#PnA~$4ndo&=Rxyx-8mVFfE$SgtGd^nQUlp2-iVg1Qk`1sn;@S4YJ)I4TX zzn=wO8}flH+SzA$(U)L{yNSH%Z08NQ(6SAfWV6{MVqh28Mx81kZlLl^*E4L{s_>l` z*D#TSDT-!C-pUQDiMr)pjg5$JY7(a>LW^fGO9CK9Ql3>X3(P7ED~gIVA-KOpJh5Q7 zyASaU^?i^pC`}tTqkmnQL&i=8_ltykb64EFZGNk^xl$7f4KHR#v0tmmma6zb|A+rd!=$G`QXN*?=2Sb`ZDYX z2|&NK{aEn5BiwK1MkMqPIKJASGJNS6;}}9my>q!-8}y^A;(8N;YU>g~RcAx^WZ}Tt zK}Am4+EDe>&cZHhKf1yUPE0skzzvC@-~J8o;;$#m{-7mH?U@SH_tV2bb{SvY#_RH# zUzCij2>#j>Rn{VUn(8_`@>Z+ATg@?|A zyd#TIH;G)Rro$f8!an2$|(7c(nkUPIWVtME@RhB6L zMB2*wkE11@$A1l16F{y9K^uqa$bW`<2dXEan9*A)6b&Y@!Z59qIN@t+>+#;iYK4a6 zPmTPpN_m_M@6RfLhdt)!*Vh5Gx&iCZ4%VUj>y@Ny(f`Lxac9+s90qB@>79-oy{TDu zF;|X{SnatC)?xZC9z^C-j=>JWfz$Tj!f%C>;8E!b*uYD{@LYi3C|DD~=^K|^`Jspp z__o7SJgeCghzAN^Wg+c(=6#&n-BZDXYNLp)&|%oqzk4&AQ1SH4k9;97nqS|f0M(C} z(mnQ8O~`@v*kxyV^O5D5fy|*iI>!q@=!8T)1hj)RFc9Q{)`w7Mzr6RZliiR{V1Jrg zxhgr`Q{cw9Cu08DuX#{9A!ifcO`o{oiPzY=GXS z#y&G)o&p6$L6>FyGqfrq2ULuNp@modnQejn-<^#^YnHTV{AS613tD3shH~`)-+9B$ z<&goi%MxydoM8IjaK0s}uNSo2(qjUFgav9vGX014l9Y!U_Z$NcUT^G0#C|YMU5C#? z0G}Y!5r_?R^*93UP{65x*~bZpR4sA1!(=YU8kOK|=#bOVkX(^xpU4_Km)ar{n`9fB zVXK28rW%}qu=tE-0p8`?9fAJ&9#De0z=aGbNnS^tb40C~x0u`je%t}3wfvig!!3;8 z-_|LPdHt zO(`gC)6DF=ai6r4t4oKXm@RkKu#%3!>x`*KRJN5*sc1is=S*;}H`;g(ZmZCZ9n%n7 z<BGEH$GmqQBDHYaE2`8p9TA8%CRdZ=W1J*MxV8jx7Hs_H@oXrone5!(Afy#~7` zv2Qsl4sbW{On}c1tju0COJtS09|Vp6Ttvv5Tf~v|S0jyJ$_LXE3cLxtZO{Xlmv=r{ zrELX`eR7LDouiZCP!R>#75I6it6|R4S1bK**6IzZZ{Al=Q{Py!=OT({0zU}WS&9`{ z%;Jj5r(Zx`pv@E1nG$QL!#u?_gpWj(+6=z{hUwV5O(H)^OZpm~pJV8@Gjdfn`PNd# zm}2X6S;4-Vw*)VTmW8&~hLJyEq1$p2aSOZ{1T#80kMU!*t^dKDe0ekg7 zWry$b_~s{x(2V(r3nsrDU3%wYNke6Or4xyU2eN#t=%|J&C}92FJ!EJs_;;Tv1APVX zjP}YL5?b3bZ_v9-IAAhNdKrny3i)+<>I+zX!jM`fV9Eel1UJlLQTyS;1eglc>bNW~1zM^Lo)$NU;3H7k~3 zmzLF8t93&(c#njzGw#fc-DJWn0~Li}Hu-=R9O$BJP`Z|7^Yfd2vUod0S!}jmSqd}! z-|>I?+;pbv>ZPw|Jg>+)y0xaLI8~(&_Ak3(x`_bCxG0XqRauf!a@W zCW-M9(0USx3I?~ZaG1t+L*5JIfw<madW`Z`CX@}N=Qm|HljBOt6V;T9M-k)-xLjDQI1C4w zT+VE3IcOvVR^+C#3ht?f0?$kuS`T@(B{{~gEP5`xM=W-IMp(zTmG+^J>rlQ4o&+TU z@$dCX>;{R1*>G3`wN`^G2DAixG+Zn5$%`uqK|ADB5GmZ%{|U`wI=i}PX6x(NW;GiV3qCd`Mu%&9hZjMJ#-0esJN2g!Ig#qy! z)(ho+uaR8`Dj3lc)SVaM={|-uOR<4u%*xT~?#(tRvo>@gHe$K!+xje1q{^PQGC2ea z06_OCsQd`52GnT@Pn#IgtEftcX$q(5wY^w$-H#izoZ2lzwn2r9LknK3Dsg>!#Ftdav)ZCw;FdNrL2h$ zx>}ei;KnRjrfOKdBy*Gn1);(1{2Wel$A7vW=A8Mh0%VP_?qCxgSydW2LGy0d`T0AS z2>3Gi&8k_qC}bi|G%s1G>QkHz6~g-4V_~kapUVSB;XB}Vpg3c}m)L+{l!L6k7nDLd zkwyjAd;IH+rs>@cjOUrKy4c;ERJ<~<;#4fXHKvA?BmbSy%LV-?=r@NR^6(sYuCWM6 zUe|nd0r_6( zfChxAD4YH>E?a5cm<@^>p@q9mWqyK7{5(TbZ1s?RZX}$Ug1}A@VE|n{63-y)Or8lKNuK0vxkNXy>6=Y8_lEc2bK3m$XOI9(ZTae5(gbS@3%TE6azR zKfQ-H;RTnb-U={`De$!#z2L8TgbnIPR}iM}c4bXLC8*gBy{USyF83ozGX_DL^9y}% zUDhL;;K z`Qp&6tkDe3`dkD3+eZRS#Du2wNE5umw$dT%7!h>wj!NqpICXlUF`HMUx>K(W?67=LJ@!!MXaIsndVJDaQ zb@!AeQryk;R6iTkR9aUyaX+)!owHUhs7>v3pctDe+e#W4?Q$nFjYyeWoof_tf)u^YNENR4*K;|ku8EVI7fhzJ9%@m@T08RpL|7P9)SoucES zy>U1@UFaX6yc4o4o)CqAbA*i^Hdygk+>r{K@DO|Bw@!otqmE! zbj5H&Si@_WP?{xXeu#E@Eq}jmXNvXtj|S6VgALzzI55`-bk!f^n2HwZqX4G}2Og~w z`I5&yhhKWDZV1B-lgVc+$3jFlxcWXN{WXB$oYQtoJ0^)N7TDm^@!*KvFh(QZ^$>Ig zJMvDqytj1ruQeK{H|IpmdPV$o1hY6RG){k!wAYJeJg-$O3rz>J8?<&h9|yO4gGQwA z88736^?(*t1&pWaHlQ~hEus*^zrHLU!Wq6ajy#Nr9=J0-V=M{HJqT(th?Im?P%a>% zxbTcf@)@}oexy&g!} zzi#aA(5O|G!vOkcuNhw)IEkGE;yL)?pJBze!MTSFa*9+?q%>&=h)}JWYxcZWeU#?f zoaMQ#O~u14UTbcseY?duA+ZK4Ajb|0ZlKd@M;95iwBjpeet|6A<|hN+98I0v=b`YP|(Zk6~OCN+*!R; z!pNFUAD`Sw29kL7XLc2dbj^I zRB0cQ*_W2rwIxDh_Djv&m`7HCJ~~ppHi1eEGjc+!Vg{U>Yj;6%6SAgFmfb`JqJuD# z4JI&Ox+((T_^n*{+RIwpyR|i9=WHT5Fb^q)c_WZ3vy1&ey9|-qz`tR1urgxWg8p*g z`|Ez{k3mW3@Jlc2F7N(LC7rS+;=m%lSn8*Smh5K*m9_Ond!W7Jfcf4yKJ1bsa_ixO@{xFz4v?;arXZk6X%{nr2t{Z^IOeX5-{sM1t2)Pxp;IMYo*G~K` zuHJx-9NlJ3Ax}-ry5(q0Zyqq)+eA zh4dL)#B+}b44sb@?#)phib!ii^g*(>3DE-bR-0kY-;81=*efAKS zFB}T~z}D@GK*RkGv3?h`V=O)c;=+sPW_kRQy25rGAUdcFDwivwdqJ>M_`E>sAK`)Z zQ08k7r23m7K>tuoHnF-^R`Fr}%}DPiz0#nOY1sxu;|H^6{E~)3K$XZe6y>9Z8+;QG zgq)*fBpz`mXxEe7T}gg_E}r}wI8$W6A6lHsl7)<~J=(z*Md-@{)ntiO0Mcpow0+RR zVfg#s>Er=4Gik_y#^`*mK|)q9cCKn2!o0gZwJAirWk@hEHQqT>`Js{8WsPp6;z{o0 zdVchVc&yrqm_CzgM0#L-Bb}#zm6wKflHm-%`Rog~`5o*ND?XO!9aVy?4BPskV_ z*e+Q_-oyWy(1o{~Q$17_IE|KKrkN%kCIJ+jp(90>vB>x{G9-Ci(@RS02QF~6WANpQ zn*NR*kRg$v8V21+2i^ER)U&9BZ>I(iZ{n3S>_5mcVBFfQ<*-t?cl>_H=E=jpqORse_aW7l|>Bt)?`*@MrI z#%6;&4)EiJT~QCNvQ#RPCbXgt)-U^}TLCmfQ9aAx=2VFT&bZof z5*xe)I;57tnjaW7KE(!OX0X%DaO!;=&3f8EGCnW)M|{~%@){;;tHlbYz|%gbS{jWB z%;gNjzxpRoG@Fn9KkL2EaS>RX-oLi{SIl$p(A%u3=l%u%F|`F=0<-u-?VE4Ar+za8 z9c+86O8twu88d@Fs4e7kxx#qc-?pmT=Wc)Bdn;!8vshr4ao@bXd-u%y%XH?;_wrrR zE$@@J+ppa+dF5uab60QNxp(gtFM|ze+QT65b?=X7(zAQ5^Y4A{DxM2ojgk$TpU_`l zy61lG=Hv#mcJ2Sh>l4@8uiZ9ztHE89o?+Cm{AjKA!#m*t2i{jy;?De3uEZ;)yT5 z@#bmp8!3hE`zPl=-2eYvbgp{v^W3?>I}>*9-73vcvGPB&fJ@6{_rtt83=9maC9V-A zDTyViR>?)FK#IZ0z|cb10EjF@49u)d4XjK|wG9lc3=9MmEW%JU)78&qol`;+02AV{b^rhX diff --git a/resources/ios/splash/Default-Landscape@2x~ipad.png b/resources/ios/splash/Default-Landscape@2x~ipad.png index d79da749a3e285b8082bfa83d616ce4f2baa297d..c7a2b2494bdb60128c2aa1708eea23040edfc7f4 100644 GIT binary patch literal 47077 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 literal 117163 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%0ASX}&nlu^78ule<3HpQ(vB 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
_N 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

C+r{OvM~}jB;N1_y-bgZ?z?U&<)g1 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ÐbFwJKGZss;~p9w|4nX+1(@O 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%0Ajn4J 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 diff --git a/resources/ios/splash/Default-Landscape~ipad.png b/resources/ios/splash/Default-Landscape~ipad.png index 75d69a3c26a530514737eb182021231457ab471b..995decfa1b2048e0ff5ec4c76bbd7a1a27cab4cb 100644 GIT binary patch literal 20256 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 literal 48402 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⁢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 LU%l{(-LwA#TYWmD diff --git a/resources/ios/splash/Default-Portrait@2x~ipad.png b/resources/ios/splash/Default-Portrait@2x~ipad.png index f933400ccee20075484f6772a12fc9a926ffb4d3..5a9b090904e0247696e836ccbfe64d25a1cf412f 100644 GIT binary patch literal 48050 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 z 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 literal 117542 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 literal 138982 zcmeFZ`#;qA`#=61LTxf_ZHq0`mX3_mDuzMXQYmaI$vDTnN;%EQahSG)Efyhz#wkfh zii&ZZ64Ef^P)W{(nL)^mnVi4ZbK2ME{rU^OKW(?$7SHG7aXqfb^*G$G>waC&y=rG; zwc>|gen1dp#ex05A3>0%@Z%2;m&(IG)-G_H0$dmZxbMA8RJBED3Y7bJt zSto#B)_d+hau`9vHX{h_5`xUYBN`t;f^-pN*bPDOsR*L%&nWxD6kf=CSX=!L|H7YX z%kn7rXPN(gM>2veUyc5ULDCs2&>cDO`|hJ5A4j{L5%TuCOF-X${`}kYUkm(efqyOVuLb_Kz`qvw*8=}q;9m>;Yk_|)@c*X;`g+Ti(Qu?? zp{tUXG#@OHfnR9V(jcbUex`QrSix{hHX8I)c%kiRVZzMq6x=#zD;)G1St`-KcyU zH}vuPG&c3_xhB$w1oXE>PxS9>edRe;`8Y-v)$JSvZU~Z^wmh;F6`y=fiUXH!^p zQBeV2Crg#+`vEt7;oAQ^aNDFjZ=r168!V4%>MIrQwu3&0uqzDVLEla^7DZA@`3fp* zC$x!;bk3~3=B!FZ^qrzR+JIlP*W5x|Dr2V}`ruSx2R31(Be)_5{SEDC5rCV)gqT)n z!_R%vPIq5@gQ4HE;eKPu>FA^S<-jqI|Ngteq2X|lE!8^NH z=>sBe4zqt!*lQ>Yzp{Rpn)P$(s6zHyzh%&Bvvk@Y>R}{P(pGp-dKK;Frl!1rJkBy# zgP(~k_zRg}ERRBr;xE9DeM_X1rq3h(yP|f&0~Hqhg-`}wY9K>AZFHP{Xp3xF5Mq}l z?Xm)$V#4do=E#7-O89Zk4gNw_l};!iic4Vf;nEJjLI;+KJSEnFXiq`|=>>fKgTnv}gS$ zee(xS!+l-WmVKS%J4Bb4dOb?eyhOUFPR#5}QxPtA|1-i2da;aMfm#nI-4E~muP*DI zKE%p@mZhMa)%OL}Ngq{VB9?u)EKuBUDlgY(;s+a%)-N5z6=!yU7i+n~$Ls;_;DG^Y zhg6sk5=P!|a1~E=CPWe%9C|S53OsXDMkR?pCnmpPxVruA(7Og_f3FTbEDycmFIoid z(7n1eInF5~+MCEsSJKZ2QibYkv03?UBS%%v8(y4|D*OGhlJfn=y0j&UDoSqWQTZ%r zi_|jRyyQ6>n!8&i+14k-QnRLbU|T< zd#g63$-E|Qr4>u1>!Q-TYUH$YjjWM5udTEeRQmVbUhw%=N-kpq@?8HX)>c&dRu(iy zc!BP07mgA_())?^2l_ZwdV1=}0qo-(MI_kZCzgx!vGkPH`Cnk4DUW1S-6u-EHvcJ5#%FEV%cRZ?>{S6MpT+CEU-Pm)-@-hYFs1! zKq{_ASU2X*nBJV1L;h0>Z7no$R}4BF`W}>5uO=$(_UlnfXmWzqpH$&xYInEt?pTto zdt`=rez14&205YL%7g~=y@&MuF&;brck$|i{^H}Ecjw7za=d^5Mm_re7P?nbuf{xB zCtejNH1;SYkm_rd&+@(?j*7tu@;iDMbY#w{5&!KX44N+r~0-49@l^ZXR6^#{_CV*6Du@d5T5H%>L zul3R9*?oo_tqD2?v#QjtfQ`=Pjyt?_+e8nT`e5MAiY{+#s&hJKcfp@ zif(?|BVyk>x2)16p~7tg6_yr=c1K08LPft1%-Llg{^}jWm^Q8`58@F+71#tuH_(m_ z#IYu>dVm~Hu}|e9hS;Rbnj8HQVQoY20@Ke$e!k*p17laDJye`A@@qm1@i#6PozoTc z#+kSgQyto|b|3i;GBj`w!)VZDbt%GaFWt?3U;TeHG6=6(%K6cP+VeB(Ke(GbFFyo1 zk8U#2;2wV$@s*7X4VsyvobI0`GL7sW1Uc&s@A&nDeT>oN;YPcVxl>zd8;M3-sTq%> zLyG!u`J0I^X)}}&G29C3S1?0T8*0MRSeVhTke_Hg>}LR`SYpn)tGJoTgRYq?N@rXB8$LpT99R(?^#6y6TDat-B94qmZ!%_ zTBBUW>PVfz%I2Hyv{_YHu|LscGc+{$)n#V9K2w%8rMN^i`0I?zi~=GfeKoLZ(yVN} zHd2-q0k1wkLL~aYu`fXl*I4T{K&A9XSIW~)qSt`_j9D3UL#IB}w`Wp4Y#gov3nf1V zeobFJ6~)AUvQ@i^2SZY$-a!xxDVlxM1BIN6BEcxtxBoF(5|A&a0X>~CucYw<_A6>GAP$3 zz0JceoBPu=K1SdpSc{~h2Jc&k3oXbUStm}s&v3?{3?Fm;;g8EDvZwUA0<>YRzk5uc z%q3-U1qL6i;55F}^D(o;#im||%LA8RnCpYM$-tqZ=@C~tTXLs5EWJM;dO6=iRdU`G zu**;3wcFj#c-U05wWvaI0Rfa1gm&*m^x#dYu5{apOB^BZrmi5!BD>H_YV`9S!7pJ2 z?4AHk-iomBDYd@VtHrAFcbnv<3`L3v@inx0{I~TTp`a8OUZ2L$al_VNhz;naGWH8P z%yM*r-Uoc8n5ngUa#a923jp2?=1pBWN7ZomxcQz)-|wit?ZkZoupQDT)Y#1#%`B?0aNE$Tsy>? zsNdfAa%Nqa9I_KVt!hj@KH7!n9rcavh}^BQL(Em>Q?r(jkojwn6AjRS@~L%XU04Ra z@`Wn$+H)(!E3%DEm#2(HKOhzE@E-4vIj>a7X{Zu;jbmo?f1W+)w#E|_`qV5jRFI!UHLlN!Hp9^T;CNbWr+az|$Y$c(%Cjq2OU)Mv0jE>A zc|yiq7*&fZgSf)N(0;=;)V1=6qgGh4D(yjtwS^AcN1s21p$*V`BcbMU$B7w6%=~Nb zC`{_rk|m-?G<3j}US|03pQ;lZ{?!c4;wB z11QD{vkCQ?G6}DpWb{GL=$Mfw3#OE1$ls_A*NAuj&SlSbT+|Y;ro|~P8Gvg|;Ue;x zzY6(?ZowO+C)QfV!zBb@iOhMgUmp|GHmmwtr9M=i7J}*^qkPtr|20yaZ5F;1=~P|% zx^GpO67F$*^G4(qx)#Ocj`Iwq@w`OawDhFzeBN2<=eM!qHTmj_7j{yh1`NUg_80sx4l#$TYNSFGuC!99s@+wdLB zi~W}c!w|W%Cr6c$x1T(i>dN;dE%O2RCA3yp3zj0WPA#`OoL{LFE{7ObsAd0LvsMyt zmD-gRz3}}S^4~%atmlubhZVjs!&qQ(sU!XysMt!4TytbA8d-F`sO{35DbM8aNbv~b zr*QX0a~*+rO8UMA-V>WNyCcic_kdBfV8tbk+`Qo_N@T1#r1;uU$Z`m9EXf*!D+&;g z-#^AJi=Ihf>u{lc0coY1c{hgj7FD%lEb=ecG_;*@hjOWHJGa-F>HI6)fPi9y!_P#O zS!3V5g}y`1I!bY^ok0|WMz{>zo$mrE)kHH^+JwV;W<=3d9^D7A4+Q{Y%E>ip< z@Mq^U&DY&&%n$J+rOjwVe-pIfwV2p16trQDOY;S?P0=%6XP&}6fW6wiBZi`icy!{@ zILM00|6oIEZx+svVoozopCC1nYV(%9n>XcgL{y@kt0lKnposXQr%oKWtSG*Rlh-@j zA-kO%*^eJL^TS!+t?R^$k+22*^e>$NV>D~@3Lp>@&gK`B1rnE;{2xebhIQ9lc;Rl1 z^IlF7XS(YrmLSBJAnuPjl8xk~p z@1Itb!Qtd~&hj%Ijbd0kuE?gstuxDCAmW~tw5cMDI%rk#Iniq^HN&bz(rgkOxIk-3 zsd6B){0)^`B>`W<)VqCoTp5Jr52wQIsx|$bC`i5A#g<2GN|PP))}@)K0`9Sgh5Ykt zsTh_WwCYn;)*BHFo0e6kR5AY~%O8cH=>fFLWVfTO{A3Z@26R(6;Jn|ry)zbtX;aBR zla}u%>C$!ph^AC=Jy*IBoG~nSRM=PlKZ7Ey+zq%gnwF#>SD<~JJ^Uc!d)94x`SmX zGRhC0fvZTwjLSs&v|&$)`ddkA z1h|dJ0(vmxM;h^p%n7zGYnu2vZqQ+Dgue{=8J2#1*7EEi(Qk1$Zk}t3(ORT(elD0* zyV9I_*Nh%n-!g~~lcD8<)e_iyoAF`4SkZYc+UCZqVezyvT3?UT$joFlD>^C-jc+09 zwHz1xXPtAVWnsjiDFVJE_+aidVX3s$w_fjC4DalQzXRYxAlygBgGRWS>SNi^l9O|>%Uq{B$OoumGu1rr3= z8riB~vbO{J0)iS`ZcjuVG4t}-t08dvCN~=bmm|4hKHWgxVk0W5z7`d=FUnI;tT3yH zWPx}0=}3SURXw*_qImGT(>Uz^LX;jE*V1cL)<}xSxDmip3)#Usfh&q{>GhextY^Sg zea64z>7iZqe7|+h-Vn~|UWxe>fl~&n>&=8Wbwd2^1!t4V^bb31J}dB5Bn%amApU0H z_jrHsT&LVoU&?nGI*VC}`Ypo1X%O|j)suY0-&_{MB%^?( z9iGIGAdnZKj@eoVs!9AErx-5cmd?ns2kf2~Q}?6Byq&6}`Ti?v!0!*~vJIZ)pG(6m zL$1N@VNH35e>0WM041rS<4M$uo)K4u3_NU2FGZi5yGJWi3>@X{3D>A3kd`7e8B`NB zY)@7j`#iqW$`7FNTNCfkLUE=7cC7!R^jz?|cYn@WKKZW1nlM;Nj1+d$*HrF7e?$ zS&k%1eZDWBkA#~j_f#8OA&1b#k+?8=Qx9|()cy#5j5Zz`$@Jm#*yTKkjN!;g~ zUwlq9#pquuWf*B+iSl!IlFo^qWpK_swmtf(;^he+Gkcs;YKA)vPi+0(`lbz%dI`2% zU7+K{O&hq0&f{-p5j?y(TN(%7ky^cEiuDxjE-r8QLV5nTYt`bN)rhY*Y`y^EuMzq2 zAp7sCAuqqwzYUhDDk|s}XYtz781dF$z7RhZ@FM1i<`DmlV3Tz`kN#a55Az>PQ4Dv@ z)?_fu`Az;vae%6kj-T&`I>(;6JV`JIi|m4{f~ALBSJhS@R(8_XL0Gg4z1E+foaymb zeX)kPliM^nAbnG<8jJLKz@ht4FZU{V=7g=oh~SKk`0@@T604)a5WU}1>B~E(D9@n}SA zt+Y7=tg!>8n0M3mGK^YXRs_+vF#kc2NR+Vw$Y<0ZK|~_hBS`c#E)!x-l^4b`_^;2A zefki*(w~noo1Lv}vm&Yxqw8Sm9`g0C2b4$naHTZWxICs8%T6##AiM_W_d`q&kzbIT zKd!hJ@kjY7E%KAE8D>3gaFL})SGq0d$@LleEqBvVz5`cYMaJRH z1fK|MmHD~G9~9pE+aLwtb8FA7qN?MxdQlNG9J?jRML6+&yOcGuC|@(@#B`)3;+J6u7y@@}f{UmB+L%9!zEz{!QwS|Cx( zvz75yJ56VOw+As`1-cTj$FXy+64=_j|p4Vw>@|l@-gX6yjW<>d+ z(5>(^Uo-yqxCZavaOK0msMH z1g~|T!5-r==va<|G)c4m`f?RDtroT)o*7pl{9uoqfKY?Zt{dUc?8?w0V+v#u_4sI* zj26y=^7wb1YQexSVH{6ejGIPbBG=Ql@N?_zt_;(BWisnKgvC{ra2=5ayDn0f&_*DF0Zx@?aQ5p>o6NSD z4d03FqeF@N6uA6>T^S7PY6$C*)EMglMVtmVueX;nNt9Uo^JJu1ieo|54+WV~S6$#h zGeu4}=VfWX0G-C0{6d_We>8hpV!*jd#-JG-+O;y*j}-1=tPL~`r8v8R^1~NMl*t3i5RDVWia?P*kB@HhR|o2j`Oqxh*Ie+aWGsWi#iBI4gqT zSf{07i*sy#8-8?6#DpXN^mtWx>0wx7yXZ=Md<@67>|4RC+a)2g5`rk!!!q;cvCPFS zRJgoC@Q+@YwOlUdI6h}+V_zH?`jZ(qMo%O)3${4Vy`TQID^wc$x$W!Li1@A>-`zBW z!&Sdtmv-lxA?clL;3_~O2+Kn7^KYkHXVb>uuwqe%fOQsct}@P;SEa(P55Z^LoX^=# zqWdZ?OQ-{Ol6Vr_S8Uj~f^dy12=WH5C*33tmSaMS+NXh6Ih;iID;o_mGQX;c^jAspIzGX*4gsl@^bCz+SG!ui_?%!d$ zOS#>XDWcqo9PYB>jUu&RuTm#o^p}j{#oIC1Fcm90xk#t0N%hi67pgZQmZt<^|KKg( zbW=hqvzsXN^gigS|w(jHj_X8n}ni z!BONug*Gi0#Q?L|7V66E@P)!Mmn*?dE2O>+Y2;gTwdar~I?CeK`EIWI;~NID6ySd= ziF>#&G{*wEb#|BY79Wg|8Wv;^p}Wzs%mtzRGm81aC`qvb%KU0U_UE{>4#(RA8z<;- zmCU&YRje#oMC`!<@V`=^EaOaGe9MgHbXYa_R*JYgI0~!)2vcgDFk`%5$5Y4VgDU1C z@AzP0E{E!1l>eydEX8|A-U-Kc3pH}eA-p6pmeWR5e&|~RG{|t|b?Q-Gj2($**{+Vy zqS6k)qNv>ae0g_$BbPFkLl);!f;GBPw9=(#^|En4hM3N{+-|av%m$5f_D)2{5h#s{ zx@d}RBc;-apFaD5qekIGCXbEf1gm3tNcOLO%ldZs$(7nl*rOZq!R^Mg4r)5Dz7SaF z;HFsj?(45Po2 zdO}-g6Hst#rL!%s@`E3e0%-vtO?fD_9|Fq93hW7MIIk$Z%jt#Z}(_ve}?i*v8@KAM7={RG_HXY^TyIAW%|El5h7rx6M&wBuLFB%Drd@~G{ryt?9j_>ToT`u=tNS|-f zisH@7qq%;TYd226Z178FrRPv31vroQ-iru0g9>-K7WGWL3uWxxlLv8WQA6X&m7vvy z1!gz~vFD$^*P`tw8C5ethnWlIKfiB|omD_clYZyUiN{RCoC`f2)C_`~(0Q+izT~5!e zYdftiUXGmkdY*Q2wB5MORqWgHrRb?sPeF%?mz)tqJCBmOECi;lK-ZI`#d;` zpmJw5;5zJ~@;_r(lCq3)4(XP?*v1iqQsJUz!3F>PhZ$s;Q*<1#&0V9|dyI2&9|NzL zT5P`RPMZ!YPaxbhYZp-5KTaQ_bnRQ2XJ{kt+KMd!S);V+7J$9Fi z4{o=VIm#;v_3g%ab8oXHc<1!<-y0!2;LZyS3Z3ZEB=Nd3ipKJC^+ZNnW?#lKtWSu? zg#G=$6$2XS(Az(k{uJ@3&2c38nU8N)Fb%EkdHr@UheBt-^xl+3N7gleju>5L;IGub zuF%X${Uli#;Cq-75WJaC)h_t-)c$=OvwUDlNDa_Ad2JVmZ5&O8#u6bMh|Q^Ie!!0P zb-f@$uqa!D2m>wf&`vXOtBoe)C&ZW z_a+#M9~NMo&VJ#Q!8uV+c8kJ%f@3>8GWi&K6o9&2mb-xQi4@bWGq$*CU&Nqc-a5SV zr;NSPg+WZyFNwuIV>n|>6|C9Y_k)-aIs;Bk12ft;uB{&;C@W)2mTD%oBt)0vg0mYZ zVc~HRuA9;@trZ;I=o~0B7Z2O30Ec}ATBb6sIRpwhb^(GZvA-{^9LkNXAn=(lb8(9s zNc4B4`<6*t+0eij&%TetHbAcwre$5Fv{!EUbAK1wK|pGPqHGs?Jxg!K>3!bKIOSSr z{osaWPl0N^n_puoR8lSX2E*^DT$fu7kO*Yo`s+E!bAF(^(Z+6#+-fg1+#e=mQS?SN zj!ttXjFh5;Z814DnhyFs5*1~k@CL!21?h@R2xR=n+6Iq|YvGn>jkH?R8QuE9ua`dc zhM{t6ET@!IO}xhv0YVjN=@7>5qiu7++gn(_6;K_YLpW^rJH@*1~QI4GR6%qe;rI zP}BF#O9I+mn<{~H)6gev428L$ak)y;(n(gs9f66bmRQ?l%fUztyy;)#2~V7cL=oZq zQyP`dR_%n2VA@GEl?x*U=2XV_M2<8cC}Dq63ZL0U3fm{`7J)ZSM!SK6C9MtT@sJ7# zf6@!(5KBaF2PaR*kTL#Hd5vya=6N|mKj zEN=T6DBPMc|Gr=UnPr`CsL81%w_xWEwe-7Fqhm8B@9;V;w{-GHAWQ=~@!J~<3k{r8 zVGi#LQ9ZJ~UoogtsD$?MK>IZJzd-vGoqt_=+3a}>3W7}wGLJ7q9=PWR|G$;!r5gn! zC8Fi;e8V%VvYhp0t^*KCMkZEPTh`$m+l1%xfbj`3QzI1>BC)5|uXie0UTVS*Sxcq1 z=fvC4>(oH<(pTWZb?unH5E)kG8!GKHMM3*K$wG(?0Jlo?*xCiQZA19az&_)qV;R#0VKee^K5UE43r zZ2dK;1yUDar`v=t`503*|opkbE|qx>SEV+7M>1BbXJmvO-R z7>iEE6J%+wl0x<>&fL@k5o1Kb9t?;z?m{_N_pL}VWS;tJW~N(7DhXDnDhJwI@*bu zhqaLymI^LqW|;7tMOfPrhw<7HyMt;Voe_5t|BEnHxi-kRh1H4;!I8I>{U zl^1vsJL^>5{3iHt|~98rWcKj?YeTBc0P0|D7!t*BNz29Ktth!zsamfo3CAfHa}Utx4|CHpv8liU^_7YgU{ke{?+krB zh-Fg@uBh`)x$ggDTKqnx_|pZgcTE3GhsoN38=`ONk!H7DitY>zrx*}4bRmz-(i31k z+Jt$$Lru>vD*-PSfM>)La(?Bdls_~MSO0M2vOCR~nXOhM_t9sj;mdkMhZ2ThnkIn# zEVhoayP2s&@CesUZ@DWXNp1umsoXFvYpaumr zW%<~4@?zJ(S+zh=caH*_f+DB8PU_|2rQ_xb>f%7CLLv(SuLo~d!?hhgub_rYNRo{E zRlPmSIto`qr>6P9Vb1#vq%#HDlnI6lV4mryT(JLGU#dga2J8jqk(t_qn&MAJYB+L3 zYUl1V1vaphm^RoAXOre8b{RWGGwv}5%x%zAhm!aLkhlI&S<&?ZB33kOKtIhjc4Cq? z8am`N8aim(V50A>Beyab+60ovok!9kTY3R~NdeEZe2y7e5W06{y;i8=_)eAO{1XC8Y2Mpjy%qfK+FyXma~ZxQ$L4 z{gJcSFkl>iO4b)LEg?G7{Q-f`MX{)^`*danV`gQ%t)!*j*if4Rc|-?#Ol5KD(eQ$B zoqN;v7E#q|DKbjhzDPULBg$$W5B31Y;|UQ;KC6O`S3y&>%P|>~yFc zbew;wrx)dM$3_**N(Yj~ls?z|KOF(=u$97VLQLbUPDt|Q4HHCFS?p)MWxxkJ*{0LYrj39Vxy+o5=C2S5Y%A_9pY;IcNkly3GOPS!JC z>koM`R&WD0FR3_h$hvXUq8`2j^3SciAPH!3KdaYI{irYm2x3bKyR(w`c>X;z=@s`6 zk2@q)d!Z&t76-HZmOMwp8#|q;dUdF1JU?PYA5>i0s^PM{Z;gMUh@B)h zt8|=K8w54b87qu3z^;~)vLgd$?@g~VXsC)egLFy|8e!5#quU!gjtDiq6R8?h$fAt!%eKra`7=tE^xc|*^gL&8CvZ>u z8#7bySyv65Wt~<;EQ0T0i|xspq(khDvyn3&_PMq z^0!W12tHFV5PLdwpvOiT90I^jC}+_JFCs^{_wzC0ua9`9k?m8Xw+F}k3);k51Z7>Q zNnCF^V>$mS;%eGJ&%S>U_mnFp3~=yKjoiBoQTgB2CAQAx`x`S-?^#y8C9-tok?fnV zqWiC=B?|KfuZNpBf5+T-f?VHM==LT{!HB+_Hbt4b=c9a;*`|}!Cd8P+YU2+?=w_yF zGj=_x&MawzvGZYp4oy`L;6Uma?g zZUuAvtq$4kP|8inEcz$ACi46psp{R3EwOdh`L!(&jF_OKw^|qIF#h_l?x7xc1|m*} zo`QLe3;6589&y!W{5OBE4Ku}+wg+G&IU}J5Iv1ass!eKo%P7I|5vItzvU3b~S7z871&{8dhm!|6jj}%sA+G zSiFL!3Jk!x)ARs?W&s}8Z$|mDVO#K#6dY_^Ot~sTJ9-t{w%P!W&zoO`JHtY3tsqgY z9xiWT2+VGh^~hJs3?x>dlVH`(ZPs*HB$_kq$Xl7;sEd&>)Hl0E3d4g?Q% zwZjLh8_UvT?zA&Xuxi``Cx@Pz3OYbZs6C)N_tzfH;&^`F#OCflAm2-5gd8i zB|4@ffHIxQF3sd^I@jAad7EV2xa1+k1V=WR`P()or)qDDX&e#s8P3P%vQe}T;pked zP}9-m-eN=AD5o>;)W@nV9#;>NWD%SLZ*{NyG3Y)oG%NU(m z(F7StWpx^x&l<$xT-y$Fl@j&0cnK1;^;S=$>_RMpt}fDG2^v$9_x1!)AO!?q1VK0w z+utPRmcI=Oik`Y&9&w`%C0879#Ge99D}c(~ZXK~QD|MTm(~+M;!7TdS>+)-$c1UI8 zeDQ$$ucK%zt){cps;%D#H#ifNki2V~b@W+SiM?mOYm7B))3^OS4fMefV6 zjpdVei5$RPwx&1$PrP$8QaR~BXi^d7bxP{85Fnk8CV$h_*R%I{ep_quP1Ge{03(R0 z8yMp!#bb1ZwA)Y~wnh0_Ju~9u`^uZX(@B$?|CwtH+<%b`STFmcynzIVgYkMEMYFtDBQ5_||WrMbFZbsZ=q@rd5NV>cEi#zFL=Bu;Yj0bKkE=2=F zprg0@+ZcDI8w_38S_}zG`fYZ(3EG>@^qsb!yfeU0S@9QYsRQ9E=_y?3$+h~`KBm*tAqJo7ia&bZR_zod0o+) zYPyTKts8I~s(bh>8UiV1T?MpkA$I1`Y}#;&`Jh2UVy@-$r>3k$I9+RQ6MjF;PD<6* zjD9#do`b@n&O8}PHC@7|RKF(NfKts;*Ai>?b&3QsL}fP9_C=s{g0?nRT2sQBYgI3} zGkBo!M)Ka{9VM-3;7DIE26lj_yN-2(c&EpDah90?Lx&DiHXkY4oYj#`IM^f$d;eY@ zfr5^_V_VF_BEK9oc+}`NNE9v+LXAz>diEc1Ar}r5xb^fWt4c9YwXk&kaW%f=KBfGS1PZppnRhfdq>lB3p47~rP94JzM5k|=H%P$_s zOIifC^#9+us5fAIM8htB09CllN8q`Z3KX&FXCfpyzB>_>9C~RuGkd1MMd{mdfv)-Ue+9*Zoh}cNe zDzMt1 zO~qDr@SQ}d(?`p`r=|ze&=Dmj=!m?w06($D{wd*X)5ZQs;Mnmv*Y_h4U*`|C7q@8! zALJyjYe<8ok%bRJY))e@!P1;M_FF?IoAMP~vuYY>xclq$Y_oROCp|w|NW@jbG+)WdN5S*#QANS^WEu$AN zQ*AYXo^H@n=`=Rxe|xGCpxln|fkg8JZlRwm%P4HC9r^?J&@AZ7E$gvMjDNa9`CH$a z(?CXjS2w?LobMs++A*rbVnWxxTQkHNGz={}-!j;$zk#&pis;bk(DhJfTzcfA<-k+Z zZE36YUvCrc2t(u7mUEC@_J{9QI>1CkXPuyu*0%gO~LVFp0LgO$el}y`fng4$931?=ClP-M1YHG`ddzcvW#up zmM{4#j~F?%n$r$AChBXRO88@lMEMTiRPjpqWJlq3%OIWU&?DwOq<>|TdoowW|^9>!Px%D&r5;n z;3SH$E=N*sA6lk*YA&P1$y@Dge%2EPGo8ps9^Z&E87}hsED#!!3P=iSlbipm?N31L zaS}vW=YM*RW=K@kD&Bv^G&&NIx4_h^)K+gZ>?nBxm>fA1)V#rOPu(TOhP1>Y3-`sI zO60F35tjJ9FP@j=xbR2>SnBh{6(RQXs&_3!o?EftGHX;8aoBu*;dyX0!S+MjKi&TT z@7e6W>!zcw)v=Rixfi|4RITW!_b?`&>ird4z-#ZnHMYGh;?b3393e0m)LqRVO}{J^8kCo?li z!cATm{;a?t`wq+~Xm7LLlQ}#>|HEavy{$ZD;)cJ-`n5iD@g^imCuWjBWCgjh|cqKb51kHJz1{RsEvlX-dbMJFz$4xy^>BDfH z?#bZSP6W@XsV%$%Z)7gRg`bWnj76F+M+t|#T*4mZOc$IRV!m$XG}T8qc#| zP;z`gdRVnEV0yqYn-(?hg6Lj&8Wr(?cdu$;Y`TnhW1fH_^Yn++NXXbo_4S2?FQ#)V zB%UI`Hy8YT#<)_rGu8Y-p*aETzf2Z+?C_>$EP35FuyA#FRe|H6t1SenzBsY0*m`;{ zWa+X_75P-#XzL0CWQvHe)xa<#Jn&RpcF|y8bf_uPECsP`3xXz(GcP)$`Fxh1jFb^Dq5>7Q34(&K49}Od-XJtsoxm7??88{Q zK!&_YirEjW#Ucheezg`0GNjq7u_t)ftCWFH8%&-jP@!-d;(hoWbCceBRyRu2UlyC; z&R30eSHCvcUO=V1$zVJSeE!DAmV+)J1ZXL@P5TZtTu;cK{AfZN zNwptq7d`pA3S5V{z$<-td07>p%z(@Xx#MNxmTke4dESF(Z?tDJwrDCGf&`^$(qyxN zrq!OzH$LNxN1irJy1)aR09zh-EvyRor0r-v`chK}kdylbGJtI)3t#;=Od;sKFV|-y9e8BPs^3uFdAQ6Q}dRK$-4$^}P zu~I0l8%$`cp1{eU%slE6&O56{KF_WA9Swo;W!_hdF$BWwX!tj_ZDasd&Dk%v5C!JI z(`k%i>Fm91`=BUw;@BJ6w&Zp1ivL#v#M!@u4Q(OGgw#R_8|o7{>yRaZ{la^m$^dx0 zhm1#)AMJ}_3D7vH`iOe=oq@ZVc~bKw|1stjCXM+G;-QQ=)_p52OIn2wLhb9>g}B+Q ziW2Gc&!oWgWkH3I0aLrf4Sx`<2cHFV-fzooWK*8RWpeUALyfb)rX|Ky9sIT%IQq?v zrK0KPsYc3&#evxW6QKtdoTM3QT1{z5O_(36Z=N3=B!X{}B&T{Wbj;1UOg2BG7bwR$ zw0^~h&Ak08^U!kWeLJUUQ$}-YcpF1q zcZ|CZKHK7b;5AyHY2m6~$H|+Fgf*xqcI&^HW2j3B@N}-ataGR}`kkwP=D>2+bs|FL zzqh1wt%j?PbB=|6xjL!@fI@jX9@^fbSLkber*Z>+XwhVdV3i^53ygtq7h6l)j1Kdsw#D zsIh1!(>gnoce|!4-}_M0u>)_^VdWwDPrH_=ZtBo@Ea(mL=@RN}=`!$D57?bqgG6d(nuu^yo|3u1kur^_+v-rGwALqU7(1 zsH!%?QqyW{f@A=@2lMt5SMDv(@QbHF_-w4OWbC{del++@-F@c$ z0uw{)J@Q5uFvw&m%Y=S^_7ABE8rlhkb0Y$87#v)Zz=(Mp39BTB)#?$W>mHjmG zxcAbP1p8^lYY5??3^n5s=1!k9(k45YmwJCCJ>_ymV@h#wRamj&?B6S-&AM19{D?`{+GGo z)ij4WlRsjpzgWhz%OtJaqQc(4jgXq&Bkq!-E)*B)YeuweIdxa-+2UKG^CSwKVPVD` z*|ursYmA%D;+3~<@lt;wT##%|@cG}dSy@osra8ayMsi-6sB*s)F-Q1=Mrxd<1w=R9 ze2s3kZ=tsNMWw8f9_#$}Q~9LB+4h08+1rVh_%(m8raaG2;&%~w%IruhT=+{y)$_|*BeKgA)P9y-^UUfeW)*H2&5nT1gtE!q;>mTL7 zf_Ljvn^G9#r1u4Ql54AAG;4R1FrY<-^>A*j;g;~g*oDlIt^Us*{R0 zdp}6OH(a)wyy+B84V*;pgvpf^XX5UUjHTSOe9mzkj6A$$_V(h-++V71Em?m#s%^;A zT-?^_=WHTKHZk_`crKlYp~7#T2$X@!{uX_I)()LT&}*>)iT;pVB)lhdG}_}Q^xrLG zfnR*zRO=2{&YSs68$j)Kqq1l1 z2Ms*lK;W4x|sa4Xd)%=}tjpSozwZi$Mr&Qp7=m4Krbp$)>{9QI+!%0hhTxn$H-Jyw7b^2P17YIt8O|_$3kaoN5oPX=kM7&dj(&_Uf(ue2&Z1lmq9FfF?C`KHG9(J|0ruqLF2M>VYAt zuEu=q6MXJ02uw3hg}&Vo3`vf&YYdJN$sTdTBhgTCZ5I4xxG~J_wW^{lkt?O|-#&{`qI)-l-z<&#u8RCp zz!Us^b1m@FlNFa8k!&z@XlHaAnCC`A23(s89MJE|S7eQxCgtA7iYouEG7G9$GLmR) z2&u3$tHe2BS70vS+u2!8MgR4#-PQ4=1Q?m`iWo@!f)+z48F_qGAneC%42Pt}GvZml z&yxe+1LCH%lpWf(n(xXBt0GUhA++gZQI8?Mxj{ZkBd z^=^n2lTj5{(BAeAEmmw`gzZjEdEk)=i`@7Jb$$Xk@xIDySn7@frhTU9A8-XS-B8r{ z3ujpu^mhXHFsO{^AJ-={2uh&%_>TnnJ0$qn=vdTJN9z1Bga6TBml|ZjefVjb9Qn5s zqs7A*J#%Ju)s@WlmbU0P6gx*GTsl?22Y)9-u2@gBk?I z%T)w4n=YUiG8A5aJ}3Qp%%^lc&<%v>4fxUUGj&giYlJZFNz|x1iimFhFn0Tc!s;_u zV8YlS~*H%}s!_5vfLbeKU;7NO^EF^UTQM zMmt!I5L2``Z{qNj!p(Q>S&2DCZx_(C;dd!txRzF=mU9|Wk#h?EKlkpM|1bh&;RHbb z^#s2&RZofUCXYJ#d4MhQ34Vy1`nzho|JouU&$0lA#*a}ZYEat-UlvHeW=83udL0GV zkqP#Mp&A7uw_S#=X9~8jnkmf8nVC7=v=(u@bSe7z8gy}^wbTMpRSM@izddUU!8Z-I zKesTfDw*u)gnWdHBoZiP?#*zZDc$6hAmM>E8ie-R zn12@h25F&I@H~a=yXzv;2$?pnBR#eybAswShat)Gz#|1V=&h)0`Uq?OzWK^WRSVY= z@wRVTH~fRdfBV+8l760DM)6#~KHeOw>rxWa^Qg@AF**lBL)Rlf10Fj%UIBAx$U^#D z-f6@gca5r5eD}Un(>nSeK;BuVTK~Y^AjEJdE4WIz_(S~@3iDz3u8c`QR8)tPDgP|X z)6Xj)lzyok`3x2C$E3O@X@qfX;T#1>l9A$QWMmquGppS+tmy2r;5Kjuj#sN>x;`V^ zf8O&}(eBbN_+$-xc>LI-#WN#cQnnbPSC`b8pu(q?Wpn9k+!TBBr#i|5(BXA5Cby6d zH>RZAlkSS#s2_lc8vA2Drgg^n*C&gw4yhGE6gP_xQ?-mY?AS%~nVYMcdhi%u(c#Vz zx$YT%S4p?2PCm>@2V&n|^WAJoWGN`XI{r>W-hmiZYZ&}Gks*acFIOv_`suw6gvjeZ z_?!3E8g>-xQN9s*E_g3nwD&f9=`ucz+{#*ul)4P+NZ$AqZoenIt<`|y3FFw9L=?zS z8hPx1kcH=IVP%UR;Y-xa+LV)m|J#2|Sb^9dL}PEA#qud8K?fg|QGR^)4EWS3|<+eoEfQ zur_`c{9h<&hWDecJ2*u>n>ybhwM3k8*5Ft=^{NddTDpje7*W4TRHT@vGLI&vam*z0 zW^d~^N42e=P2G8sbr9hwMQj;*@>}-u}qRO_7?lTPCS+tW5$f7m?2~7cip3&&-4BL+p9Uw zb=}u}-tY51=Q_7_%pZXE3b0c8dwr5Y`Lby%^h>n8vla+7FguX&#&mwXbtxI|RPbgj zhiQpA+p`n8Tia?M6i@1`+0$j<@PcQk)_MA=DcI4{^o75~1XRIg+3_&MP^_cpk{xNG zAD94G7@Ayhkz586dH7m?3x4f`>Ft^+MDK4zo%8ZJ>IZ&7z&u2&PUHmus-FrEnV0m zdkYK@sypdXDzGv&1B(JJX(>G_sqvi>3({S!@{(Hv z#SK^?c#2STv?<9^jelikgC1td5Yhx;3H80%x&x3M9x^TC2YoltqqX`nEHR<4;kmaq{aTNRvCggyB1WNnq4OESf$+L+9aqEiu$VUkJmZP@n zP!#786LUn7y)KXeYQfcftV-TNm&Jp=zKiwI+hNAku&5+!tmdhzEV8HuuP+WrZ)Xxc z-h;`1r!JDYoxyRry%s+>eE7FF>`a(#$VI91`s4By>X(CM)ceHy%4y&Nq#@`sR+-QT zL_tQvFjqK!Fy#$++IfG0l+ag`TYuUDF9byeG;kHM3A5z)Ak+W z+s?Vp_>eHTQ@32j788{L*9COybo4qBQ^M(IG{N`)Fy5tJK3=TVx{7(P<5|LQe6$1A z0Z&g6JHX;TM(o^r_fb@0q<0TfMfRAQC;c#tvN^U=)_8LM8x%SOl-yt1lezDKtuXK^`#A%)CKwuzu9c% z{IC>Y9cyNRkTrO*;4QXE;2~B{&~dPcpO?Kbl?2AQRDzP`_ovZ{wzW9JCVE9Gm2?g} z*6(+TX!6Re)%a#{C_MxWo4G2+`*YT~Um2b~Im3XsYIR=w^y&x{T*Cv*l77pxGweqeOjoO@@)M@(-y0Sg*z#aC) z0MPyuwD8k(Q&G>%rg>MEf0u+7fv30Z1!z`?kI6NO(nXiw`vlIO|NWqr{g)^bpe$}X zH8c?)D6^KT{TAHuuNMaW$u4l2h>HW&XGjQ7VXPU9w&mDfvObf(uqhm-K>NPE`;3%k zqHY$q9O#vpGsY-^%CfFH<>x~8ZSO$bDtCLEO9CPF!2*?8KD*}GmYxcF#=;&V@o|~# zCB*u0LUi->^RMoqXQbT?_rO6CQMmdKEZxks)M_4c+kR-xveLVUjvif^N>E=;EDr^J z4d#|N4W)|*hOdF9;)%l5?y}xtnc{NIsMmi$4+edl0chRrex4bGTlER@@T{Va;#VGN z<*l|@!&sx+Vj`uTTYjuq#NewT=qwuu2{k9#>FajE2jr*=?P;;cpv%x%N}!f9XzJi5 zY~~*Of$RzQ2Uiu??7y8&Eb$@8fL&}XE*#!~l6c?=5_FaF@Sp|Yb_ z;O^(0TB3L3=AMa8&)sL)4icXm48gguUTa)j?k4|n&AC({C>*jR%XR3Y39knyc831J ztm%KK&R~qdD?&a0>QKxb&e^%|}<~#r$G9=5j zNTUg_I%W4P9f9*e5f8PtQN%ri$IOB_21I(;l zhKH{`h07|jc-9tcuh9V#%2;cU$G;Rf%Cfv8| zRbcMJuT+0}{23r=-xy0*NCqHT??_IOIro0-=ym7?U?p?-^=wnG(fC1>Q`*#lJ!MBH zFLezl0^z{N$S-1@_H*HG=9ZTsb6wc!0ePU_pvCMkd6Sph;^U4V){Eb1KA8M^5l?qM z$OZj0WA4bMRTdIzQgTXSUv1c-bhV3k)MZ7lrRE*9wc?1NRF(6rct*^EOdSWxv~X4` zWoVKxWIkI-8wN*KYSnjXQ%13_{TK-SvbW`W=W{5u1YH3~O)devzFNvn6but))^ zX%f}X&XoNUV5U;}sR@x1yW?2U@^T3-(SOL$Exi(#&6E7cPPXo2Y5HXw-vKWV8BXY~ zqWvK0(v*tCA5g9?q6ZVR8A@UTmmsfYp7dBGm|rpOHJzn7*&lI}XfmHOk*`5I1qO0#1ZvI)yBv55KIY)^VZ0hO{SesayKkbuNNIRUE=1vsgfQllMKkN?v zz7QvrX1?}59~gnpzvs=BrwQyNSAF4L8(i3!x+N<67-E50bppPixkC+h18BlGLFaNZ}^@4xR*c5p%pB!qVCW`}nT{-1X5s#elrO&vk*mS{#m*mdGfAF;>EWqLYCZ!CM_*1TFCta^wDoPgRp>&!`gOcgARbPhAt zf9nzvMD;Esr#0}>pC3N~cu+Myz}?*1JKpO>iMsJu+)-!RQ~fc@a+UYX$G8$OQBQh) zj^yQ86NO`u4LhHwM*5hkyO;MyEc)jb2}o-7`8^RNp|2+U4&^AUw&q+0M2eDMyFO$-{q}1LB8?-+Q|%{c6Gls< z#s5h%y`%z{c*c5qmTjLxPdn?pNZmhtRcP_*8wLPhNG!vE*5D6y-f~bt0ZYr=X%wug z5-4-OQEmhC{Zt;;rU(C;ML{FfIm#I2v#LtKTvxWY`tM{rPU^5869mDHB>^GnXyMQL zf`6BEU8nsI=#F1hr}WB&rqXAkJSPteN!14Mq|!YEH{UPzRZo+>6SIN5Pjg|JFWs&o zK&B+Q50n7;R0UP-&o^y@12aqk91WJ2db)f(^%Og&tKUpVa$f;M1H>0^iF(!z64MRR zYbN{+K*J(%>-^)PDM8TreaO5a#DmOvd@2g;`a5GjZCn1LfP@ zd|AcrB1-=)!D}wBt-%yVPmnfh$CsHorEQ~^R5%*|Q_n(Bq=H^A_Vbni;gE5;g;?nl z?~fc!)g*vx@z=w>DGkB$v!8)Hl((X_bT&ArXiGFOrlx+$%8qOfAJ_1{qc2a*BdN>D?@E;LN<JOlDT?(Qnw}UPpEevgu$Ior*s;)?|>)fG|E4i zRK0%mrtdR2T5s5JUsq+cD8WSb#6t3ytuD?d?9@o*iLyj?Zrf&R&8*3PxxO8J+1k57 zQ2|zP_Sc^1O6+z&4Kzhr-)oskHGoAS_VnXqG8p7C>o zX4KpQU5hct4{MWm#*@^l!bUA@6+)KxLIdW0I+pGo=7Vm zT2gv-jIir>Ycju!!%mU)!SdLDp*bcSzkSWp%CWT)yd9dLQZx9Se7}|^VrdVe`35w{ zEd%0{rwQ);9ct?8DzjhcCX?D+dcVNMn(s0#8^~(b1q5t68ovn0H z)%$~cNw}l8#eP$lNzn6<9-dxnyUL-yjG}goiRD$zsVw#!_JCFBn?87aH81}l>RRL_ z`im`rn=+*BPmuDvJsv3@>-*(rvUC(KA)c~u?wG{gQ{cixKPTxX3wPgDR`fFe(#D0EL z_A+X!2{i}%a_<=q0V|(zCk8ys?A0mx_hqF^k~;v_$85L%8=S!kAWp#HnVrv_u6q&g zullf);=ogpGMA<{{UZRo(q9_RX#brH;r0eHGennWJPMf}!{SCNrTVj6RIt@BV<9}`$PSJG>Z?c*-V)0BHEEB(bG4EEobxL$zE{Jo03R746#khFBb?qcE`{AgdYL82Bk zhO={a0`;1Z%khvMr!zRmy{xCn_gJj%nduxh_h6$#Jjwpr4FBMbj?18Bp7K5So#8;& z1%P*#MxsAnPMi1YsyfQd?6GE;r`tDd8eJA`zs3vrOWqwMu+g5FRPc(n0*-40=XLMsBdlo#~;4*>e9w5I|+TP%}MX4%N@_mad0m=oa57^Y^ zsBW{yyX04cs6u$z_)u|g6I4I#XZ-zszZy4a*7={AB?WX|waS@`mWsrRO@d9{u6B#J zk#Aw%bl^!)`%mu%lo$e z;w>bSN&Byj+Vy1f>A@6YG6&RH@RMwGtpglV$;>4j_&M3OM95a6u&>$n@M`PerT2?e#QcM;* zm&bd$Y*)YT4U$-oOp0EE36$L{kdk&ZtfdzFwvVk$)Ag(soPZBn<-7sqOba^?{`jim z>cyNtc_7HwZ&#{6O$*&20==1cYqFhgK&Mqr#UK@3VEq#0*5I@+0($voIHj;S5gu3I zY|IRQ4JWrqsXuApq+dc6dePfcf!CL#e(O3iIi$u4s3^aY7(9|}%wu+{|M>@KP55j) zr}ugoD^ujN$du2E^N9T;tU8Tflmmluj_Rm4{Ti)-K26bG`Vh6G@tT*sb!$G1>D;zt zozd~vwo*POn7hS8T^(R~RvzWdd3dPln?>YMq@#wxG%&f_J$7NjA1qiM)`--HEXfJ_Td97v6hR6$!N5PaEOUjNp%Sx1>XLH(y zrj3`L(;O)8s+}DoCBB?=rQZh0I8pWc5##qn1JG#AW(=nRrveR$;7buWA8%RJmkx4? zJxf1cF260Ilzy<*fkouQhUd9{wh$kKXZTrmK-9wgirW_Rv&EIOG_;{rU{*i!66o+r zAE8f8h+vqG{lH~) z?hT{_?Y8FTD?2T&xPjTDB^EOeEdRUhc{;3Q{3Pc#lGXZ4D1&{sdByl$B0++^FP)=nH`_@1)K$- z10bA#y-N1?zez8V-3a`kp4JX3|1u(C_s7n4E!$eXC;ByFOPj#_V(-yP>QiNTM{ot; z#I^&{_+bztaQ^;qqnl;HqLyP#&0yjia3Wk}LtUigL3o-1Wt_=i*-p|Ag~3PRIu+?% z*VKG{cZmej2DL)EtQ^4g(vj?WYkcM65DB@$DoTunWh>}$;d-*I+~pGq~m4X-aB-qJ959<8H`d#M0Ogr9DtWH-- zf}E7$`2+wWqbV}Q1eG-dP@71{`)jz^14CtZF6#adS^c$mDb&T?XCCZOyLxh5z-y=s z$nlzaqM#T+)@zN8%N1X=?kwdxu?>zU*D4Qf%CbmGlRA_{Ri8?Y^CoH zg!R)&_z`cw5S+l%P07=H1M3t6?-V^%)CJt@)BLyxKx1Ct%{rc#vKMSb2I0RIP0$&4 zoQf3zbNJtd{IF$-5M1*>!4V&FhPQ`%QK+SopA-uG+~VlBItQ&^GIDs6D(J*_vJs9&pSX z-kWT9%-219?jpqmTr~EK-}HEO+|g_9mFfCK(aj-P3G@+@CWuJ?u&x4{ODEnRVn13v zYY(!Qr9DUr|7!7#Nu6;4y@O=+L|Mw0fgufn+PO(bxyGq6Cs5`9H}%cqUmlNFFthV* z@cP%4R`8W3H9!9$-%1?>9Z&_Yp*&dxS=}-(q)fqsgX?qE-D8W_QfHC(TE-<@yrfp* zVmQa#2UlJ#y*&-?Hkb3FK)^F9?*n3Q?M9-~!L9`7PNywIXEm)5shg}O&tgCsI0CkT zOHug$01J-hs5_3()qP@>3+-bwFn`!s(!YSJm^V$Ku0yOlvag{x3!^^jYtcQ#53)n- zq`SowsZC~D{%=jmcibGIj3Z(d?w&qrt#+2Ejob$yGgHAaB=uFgX2_De`<7EtbN#+k z>lK|MuvhpVNQ>Md4d!E% zfVnZz^bz}zX}0c5exR7T@&oT>bF(IX@Zd+N-k9f(J^xZI(4+`eEI7lBIgDUebe+^g z)=MboH-8qb4V=qda8y|$ZBT=4K5VuRxJ$)s7}|NKZy*9z99M$OugFpI{dlAa$ZKn% z?9}vagdVZVS?pXOX?}-Ukk3zpT3l`P6mVvw;K09_IX`?LZx{h8pWqu>pSOyY)Jo6# zHz-YW2*(ZU7Ji9+JlO-bo%gC)9FI-&YrqdO0XeQkmewVvBGHO$V!*28IFr3CKoV{3@*l1pc>XA|wi zHcc$p1@2m#?JIxFL);5{(rkj%1bvOBrE_6uT)eE$d#GMi?J}ij#>#vJ6ohDdu!hYb zd9o1g+DlbHeeWlju|sE%j-%Y1#oZBaMF5wK~P1=Fb`;js)G-> zkt1K|$zEJd^N@Gdoir~&Kb?_2xV8n(Uu6KDYr6vUQY$w^HGWV9ggn%hJ;?DRFxdYw z<<0`r@KalsD?1ZPkku1AMP!cah0t$6<_s$Yfuf&+P%ym7B#| zfKC%2`Wj4%L7UH3f$J{+Lab;m0qApEJB{toi=CQB7UwO3et@efeWe6O$l3E;y(c`~p`_*;uIpP8Gzi{d8%c8@O1=H|&Wn!yLlEUi>rM5lk;|G5B$jcm3e{6jvE9eeF}(?`0n zS^zX9JgZ&7zg_}Pfp+v+g$2!;WKu#7yhcC*FR`=IsRROgFx%5BmB*bc>DfCd00XA3 zg;dc!&$>-f#82Am;vNdK!~B4krGiJ70%2FcDd@XFF1JbiV5`;daCBBn_m>nXXL+_9 zn+w2#-Ysz9b&ufAjDH%Y4|rCf^7I}vJf6KtgcBb#^YUL|unOIn&vxviy0=`=3+Djn z%);=V!8U(rk@7c(lKoK?s=UCy8)_F_kTHkqYiv zI6sp5$PcDQLzga`Gega_ql1BfUu`lKe5-gFt!GkB`46J>N&Hh*lr|4W+&QL}-I7)N zqMRNM3g_-DU&22Ky^Rd|H=hUF)X|RYs#Zdi16Q{}`9)s^96-23{hI{YfkwQ_#3(R@ z{@BX)71fpL`wdP}gcUTna2~j}BAJGYd=7)Q4Q?X`va|(CE@zbwXMKz=@0%jUz}wx{ z?_CrQYhrM+;BFU~@wei+5^tkY=kR!8HE?kq*;+!cob#g;ywBc#C`kJ0Zms%#hoHF2 z&-S$)lN=Y_{|GZ2Lq6Lpe(QL`*O8>$qaRB9E^Qu~^3031x{96XS=8Traq6Dx#a?M= z&s!}9CyXjZ+H&^tUub-z)5>+hB<|KGuA`gcw6^n_9IfZ3ji}!f>8GdS7e4tCmY>sC z4sdST67$)uvwX1RJqkVdffW||V_MArik$&6%ohE6SiFC4Cf6bHE_9!V(yRC2vPFj8 zkMsFS)`+**#jVRn!c>nvL$?tJ1G>}KyOsST4nN)Rw(ZHIyx|qiaf`&hy{XU8k+#pJ znexV+gcLjZw+_ybKM-+eBu9UWqgQY7&EuUdI*W10^XoUfE)+`S4JQmH>lLqMsno}_t6QY<@4lCGRAqg3O{o+t#R0;j$n%Gk1}j7x3%wa= zCnDo`qRN20f#5^hs&RX9!jK25YbdUV^uQg`;E$~nW|U&_NQ(~k(j*lxlpM#}5eJ8O z@6<0n4!HSw>gpl;qQH|8rfyVHD`rZ+UnP5hKU0)>Fm9pH*|MYfp=e^TnsYEGv_t+! z;W_&@O*wkzhzog|Z(h6LFb3H}x3O{L@mdTY^Nc1=2nhv1DqmO`4}MJTs-c}oB*|wQ1$x{{&uc^q0o5xt&MYeHL9oS#9b)k(Kh>CtnG^JLw`}L z)cKl@CJH@5^na4W_NCblhV8+9-D0FvA`>8gY&6?2joke_A1&daPZNy&i+Z;IlnYqb zN+SoPs2e-#VbL`tJ|Uqn~#22abY4iT)!A{wRwJ+tlGYo7!R?6P!Y~!8i8~lDWUVRKfP6Wc@>}9CK2{`?FBNt^orh zuKlcO1c7p^)w)N42Rij`Axmk@)u$x_b%E;p@Syl0SfDU^n%m!61gRUoOA!jIxVNnF z%ThafxGhtT4-J<0&_=vJL#K4^`Z2lIhWkqqoRDGe%sD>SCuZ7=6iiX6z{pS3fwclLp=%JP zQSsC+Z0%`QnJv%S6D!9!uuXiKTv~t}wntzjBWp}7JWq~uLYJx4`H^pJQ2ly70g^7! zW|}!FS)|vmYpIHhVF8|vegy(TDCngysgcz)7vJ-|0h0s{Lb!?PLzOtRQD+pbpo6!( zT5#vL(Q-dtDBmchUDq0EI(;O$MFi=ab5MMMujWN6NZOG%sSVQqaf!r5cy(CE)AWSJIFXZ-X=N3_QaokW+v(L5a!rV{x4edH|t<|9>@DlL^ z%aQKch}!;O#8xQyi;9gHYedxJE|ChBXdjo7)&Br1)hX1_u1j@83C@*F_&^$udXHMP z(hm54)QzKrVBp{xuBOyOr}MAfh<^TQ;9HA1Bq>H3#CCt{q_#Qqtnk&SInf-mQ|%FF z@lC6eAtqw+uN=&m!PNatlt({G5*)xi6&Z>}m#F^h(kB*%cbLq-g-A0!iLRycTOj6_ zlq*QqKcfEDC$Mr^0|LdOPOXla8xdH7p)41%gr7ePWt_h`kL{o-3i$NMkWn(fcYQGS zihoUpK%0AZr42&>>iw!>dlHyJCJWRE^w7dh3^%sCp;NU@-;70weYI5dm=_$F(>Psg*FvS&892(LT>sb{D_d%Dj+&F5Y#H z-=omUqK(e)e?fo#43zOI!wiGH$jkR&Ue%&g^l;#XXH7>jw`($Z7b@P_iek4xK3`e( zqFAC}jpT({&52>Ng6L380C`$t$HM))(nzxw>oQdyD8u%|3rs%K_$0yA*@?Dh(Ir+K zb)$R&G>ua~sA7$Ilw^Q_?uV4z>z}GEw;lLX@J15E$xNJmq(j}n=|VCyOf8G+2YAm; z9F0%K^=O{RQ4wp_51>7<)H5je3V%MoK-EG}kASa9*Q&(@t951zJZeThF}o6H(@!_* zFuZf2-cK-9m)9IKctf8C?fxJx9bzLkFptmb61XEn8cNjCB94UA)|}I?cQGyeV?!6YSwbn|`!W z7vW;*xNCC!ytETjH#bBYf!?zMzF@#lcHZw`nwB?lEU*(sm%QOhEne!o462yPwOJ-1 zam+oN%ggbI?n8RN76=BxgCG_~(B~Bao)FOcRTSYCP5BARkLK^Re)R zngNkCeqM~FJ!d2_nJ6|Iu|>JbXp7P-?hldZNuxq;1c@O2{)|@sIX-_vh)w!`T-&__ zTx*Dwm%NG_)FY0!4jmcTO~mCZGQ&i>gU@xJjeFp;ug&#aOQh(|zx7Afd#cXQDyL?5 z2H*I0FjJI#Fs@7{Yuu<_RZGi36fz>VWXJR=Ez3!%4MGHFg=Ed<_JtWTW;zNhpni80OoQ%H_!3GC! z2SDamOEQJpBge>Na+8>+U_JboC4G!k)BK0$9zue07I4wo{m0_#yCv%&vhS!&eAI zGmpQ)0BUl@Aq&0Iy0GMU4{g4JU(Z}aZTB)w1NlE~Z59&38#M`E-0^Mv`G~L9+K&r( zDU*|7W-ElGEAnM~SUW2A(xISMt;ebI9$Ff1eDSOi@KTm1G%FehE|pVk1LdgZxKEN= zJV_KE$C0W;Ujn8C=?YviA!s4hySI5%si1u6iUJ6U;!7gX){_f6E|d4I6mHP;8{$z~ zA5-$vSZx>5=igazKDvj_Ojg+^O*-h^i1pgl_STTt75l_dtn`@qe=tJeu0*F0WOnDw zGX-Z^X3>O%$459Y59}_8qAD8udc$75rJDMwGIx4LGh=ugE6x&^LWdnge?u~xpDXw* zv;lZQkUt{8mw5sY*l*?_WfgTudR-ud4j0tyB#w7SN9?+sp<0ypQ}CbJiIF3&(Gt4) z#xyAF+U-qLO_=uxXkZ%Kb8+U+{sp|lFvTZbm?3 zsVO8B5yUfy-Wf4Y!^{|#cu`Pi@wuvRMndjTM&rNQkuU&BD-E-$LI$s&_x^L z$;)vnS%ZCgqX@Q@EcMDy8k-%io@zO?AO>%Fx{n*8 z)j#q%rMqU@8b&MVf zrICl93!|f~yyLJSqIVKf?LuwR2j(~7uD=O*%?n93-#Q;}P!OnVZH%1Mtm$7V#(`}% zrf1%9o#n3SseddMbgx3`#n@y=D%56liHrhP_yW_@ zwLuKc83%%&CXpZ)e$S6guIy&-d$W=JsxEcYh$g!>5U}m7&)3JY8YNAYb08JFq z@YCJ#44hz)UvvO6-^?`freHk^i9(D9Wu@;>+yiuIV1%JBVo~BPHhWNHBM*~tKCa-? zvi)ctpl(ilF?*YN=>;e@R>BrMuXxCZ+5V*?Z!LXy#~Sn)iW6mDpDdhe#AGCl(Zi`I(XajSgfGspUODqz3z31J|U&%@sY z9ADW+Av2xtXQ&;+FN5e}OfNG*z1mdX2bkKcpUvAQwB3kfN?t=ZUFUIan+%E(B`3aKzY(w7RSZaG`t+{yYhN3oJi{H^mt~?+%vB=f> z0nZu8XiI!}u&x1tYVSq8jWk;+O8FhjAEgv{E8Y_PS%2{$`yH`Cv^}&=d zboJH8CPB;K+CO3ZHzMRC=4>oA<$A9k*{RW4!SzCGobrDR!Lbew<5zaE4%&Z~A4EVI z8ctdH6AWGW6=>0$d_v^l#aOG~Qfki@xY_LuSw+wt4l?{v1~tvO1{vG&bZvQ%SI@@` z$guZE_Z!%sqiT(U8fJVYZXm6)+QFQ(q_|=#TV}QxR&J`NRam?@*F_=shS<^~tlZ#i z5rSs!`iIL=1<}HghR@#y6T^~BLn#@b7GZfH)#w1elKb4oqd+-P#Zps@7T_l(K$e>k@&5`~r+hEsw4I{3}EqWFNs+h$)j-XdBKLJisFPx8ajs6!Q^A)>n z&bG`PbJJCQw;dvXNwJZ`+BFw&_v59`pKMjk-;gkZ5#8$8#E4(uEsg>T#5>rZLUC5O z@P!o0GuO<)WfhMCF9}A5XuC3$zn?V3>ZVjrUXk^>Sg2@nQsa30f~yqM5{?7}RSw^& zU*MaNL3^{67(A{X8ZdDsZv;D=9p#he6kSZEd)gjjH9!B(-#23KjVmF~AJG63(G>*3}SRs7>LPToGmQR{cbeWW~VEhkVS4bxs?T)0n zt1&4iE_ceYd8+$chaT+D^(l(uFWvGy9Bsn=H1G6b)k#LuHm1pQPFEju1)1>fxvh#9 z@WD0_yF=aQ(6b8Kg?%rpSDx#w5&I7m3~u!TXE}6(O=~Tyc5*}~ z$9ZtQ2UE)xb(J5+zskbm7tSeqZ#Kq?Mj(v7mf6v<3F?2sCWdn zh8VpcZGw(d*;lZLQdGug{v{UoYLoaX;BuALUqxyjYP&9&oFqt-)j)a&V_koWVPtM6Olz4?g&AgF(y zH2h_T&5MaGnuvV*TR$oUi!FFIOxLn6JvgbeRypPK^tqhm(0k$sVJXYmkQ19m86B04 zH_Gw(xu=hW6e4mLDixW7=}bV*a8=dSB*} z4Mvb4?3%NP?e6lEUtIot7ux^zkjC=gBda-!5$K4AKXgOJNSei6x;`x_ZU)g*yW6WG z&}V0TAF9Mtu|fYocts=~s8Mqz@UFFUJ4VKPrihK)3X2Yg$gRY5L_e-g|EHuEds#p{ zn*UHKXBdRy$>li|Dx|+=I+dnt@G3@m(|}sxWK;~;_TRR&KTut+M=GfY1)NHpfA=#% zhJw0CKw|xSXl4XW#X8qJieS@Q^#=VsuovcBzs!NJ`hI@!Rp9XH>?_7B(cGvJdIU<$ z%Q70(_#r9l&dg-$&puJBLm_z;bntN%PSq_5UcgiYJMzaKfL@X5yFeqnRCE&x+n$pe zTV(ZQeK0&AFR@MV0zm=m-*0ykHy!aHuM{NA3Zjjrs>DTk>}U_Yt=OPTFc{l22j0NM zBA*FH(xv$Oaz30Igpb_98Uj`nrqN89>#XE*cE3j24|?__ty|kJLZtu4iy%QvKv>OX zV22f3&_fS5%Y*4Vn<;Df6)m(bgWGz_!L8p)6GauIC`V=Xn@kfNz^iNwgv|#k-$>dW z1D{*;k*df@;Zt2+^3LSu(vTi>6v{qFWdLo|u|bz}*JBi;Q$-aD_RQvjOnv)9?t>bM z{ewgsRLcKcZrF`=}2n$>X? z!R&Vv!*$Jy+9f9sl1oiGN>YRdj8pdNTASaWE@--(A0G`|+G~9H2-gR}M8o1dz?@%? zJexSh^$Z&f`kb4_r$dR~>9wiH>vPBq8D( z9mR|J95+IUKr2b%ZbYD`c%f4qj;06f<5P91H_QLc3v?7GY#k?t^WWMsI(cyhT)o%U zmOolC=2h!&b4D&9L~Gy=#2J;|%b|ZRI)fw}Y&OW-);s_h1#O zfbEwMGa*D@R_xQ=&3+EIS?|sOYqkH^T6sJ8Nw?+wceX{FxuLA@6&k9}CY=QjapIdM z-E9yIbxhv28dUu2%+)MYZAK#}KgpVy9&%XGReenR(~Fhoq$twEoAyhBbiBkj>pVoM}aOT+>IR6Q|xEq z6D;E~>1^e;iG`_JPBSfb%CKiT9N7)4V1H4)-7qxE38r9qi4IeWl<}KU<1+{vOAiNk zxItE-?=`UPRQXtpfdu2VN?46~d&KLkuH<~CR&k+eF=F7XB+Fb(X%%|?p*$1Cs8l90 zWn7Dm>8-hHafa@llFk*aMZ_5(u>AEmI+{(1mi|6mi2-lY!-1VF#S_7Gc(Ux3oP@S+c&0)nYzzM`YdG1zn zX}YLF<{rSxP!$#Nh6Q=L*8Dx=*n*`i$iOJ3R*@7%h5KA|Yt!T15TQcNJQ!CZn<%PP zq~M_cjAq(JcpPAbF17NT|jSd>%?=PVi!Q*@Jd4J7b z*V@;*po#E}D%UEydDFiKJuOgkU?<@{SCEhGUT*DQDs7p{pb}wa`fxa|EE}u45M1=V z^IL^)`-R5d?_AJFisz4(Nf1jmN(imQ%;PNEaMbuAs{Sv`r-x9`xw~n?J8S4Cux?o- zZgn$C%KwSD`Fz|^x4JCe$6=%}bI@`_wg8)Bdb@|#Qd}EQD%Gcs<%Vj$R1T?QN!E{MD(K0;xjPQ{Dzjrrg|g957NOg2VBOob|oRvOcL@xxyfX@qep-_gc z-^*cpg;hN1*obCnE%Fq1(526S46R>4>x zs)%xBtEL=qvM~G86;Kf%4wO;MEMLPqzC9zym$Ch1`y-lX-xY0T{ij=n{;6@lSJnem z?@+ibAl{$5QG4NMyzyhaR%Pr_%%6pV-tXFbx>0MqRZAV9dr#DSwNWQ7w)q=Ct$^<6 z*`7jG`PqQtzm!HK+jeksRB96v!u>pu0GTDDV=?#4LVS#Ov20{nLt^l=Ij&j2sj*YJ z<#TfH>Tm7)Rr6Yu*_9kv`4(ejpWT&hiMZkUlS4nk1t&Z zae}oJ!Ng)BWH~g9>Eh}=DZCoURpZnWe6_$b=MsC9^FDYls z_MQ3dS1_CQ%&UU8`#b+>kO3A8)J6nYYyIhgW=~da<{5O8s8ipY}>MX_2N_Wc|bsB3?=G( z<10uIrqQ@-tPZU8)W?4M9!4w(b+zuJWY8C?-#|0B#P^^DWpW*F&=L|~y%8Wb0HX-l`){MRk(xF1h8 zOsTzYI`&xZ))R4;_P}((=uWEMVOO!Ne*WAj$$d?lY~fYfNy|sjJ16G;ESbp#J$h6E z-gV;xSHONn4GSBAMg+w9#Z=d@hd-pcL&%@He+2I`%s>u4mW$BxW#njx`GucRYgGh~ zuMJM%O_MpL5j|%gm6|sv8ToKSH#{$I|Av3cM>aj^om*6|E8a=gQ3MAIqhI4t=77M) zh#Dd|YaB;^z7ss5ZMdD!cXz=H9Z<{P=3|o52E<9xNA8x*PsSvKN!4S}XOSJk1@hdP zO5Cs}Ytfk&{^Z+UxbhJU>W?b7Y&Ve|^mDc660?uX`|d7%p<~v>R&C0wCB-}-@WWiP z2dJ$NpT$~;Vy$I!17hNar6lz?P1z@RfqPj8?&s^ZLIdbY`z5MqIJc!a@|Br;Hj?YV!Gu6XDC- ze(rO+eX-yOR=V9GR<+e^%@eCYxcbd;;luDlm+cFthqIL#MaA!U zq3%!bdOlQ`H72C`n8E>h00hwN@H4V}=&bdz(k~`RrQHt%t=gCwO$(Sg&5tZVS{~3U z;B=@c!Sa!=eM@M+;6LvqsMl7Np;Pj{+Fe2KUOs-wrspCxFSaU97@5j}lEkm`j7*hV z`!~-}w zZ!45`NI%lQ57gp7JQ$m(O*Z0J+WbJZbg@v=o93I}A$#_1=cUQR~ zE6L#O5RDT>Q#8p%3we(V5y6ItXuZzzw=bWWfcBV-NAz=wRPL#mg zq$jT3UDdw3ix(xC7Ya0ML^t|r?}M*B;SlQW~27Z2Ht^3g(# zG&e_Z?ki{qFZlL-*r}7*Z&kxwr>~8Gr^W}4w49;tx01N{>WNMw4oGDsA(d4G^(E1` z2Wp%0x04bv-A#VUy`U?-U?_1M|3Nrk z`?Z>O{_*p>o`JFgjlfBuaTy&iL6Dnk0*QlS#j|h)9rQ|}dR+2hTK6P$`FM66C$#gf z>UKxni}!Q?nuUqDecbP_IG?B4(JTZ$s&QIWwYPg%;A2U!MX>!YXaOO~+}Wkg6A z%S=gRZBb-jlHHIdO9mxNvKBLiMz$eCmYJ~+zjJ%O|JUo^>s8NF?&X~OoO7M)dSCDN zb&d~d$Jz)42HA%8umobaIW8v9`&|4NoGXaNrCRo=i;*E#@&((l89UsT8GkYNwQ|Bb z7j$%QPEz1OnjR{TrD2bn^%qZar1y|k&M!{NLrJx2e5a-xr|d&30z;47(#{*4I1=SL`unPWWMgZqIAzE3UJA7|v{=2M!WuwEc2jNEnY=1>= zvR-zN9+E=Xo*bzb!z5V&;2RK&uG~5}0CF`|S-_#5D0cmKg2aK3g6_P2qto#+$Odp) z#xA{Dim~EVC7{7Tuf}C@#N4M}UGV>NH8Bvh#X??CNy5(L=9QvrC#7?eSb~cnl%$@@ ztkJ%aFB0GH<303)p)14~VomGD>s+LmnvUD$?yk5fjBH1$O zv$NA5&XNGHMUTTtj-HZnZ67vQ$8&&TTppEXTcOcjziHS6P2Q(F`TEZbt70tSl;>>W zKb{>XS0Jn$x~Yl^HMc5Av>nEK#!_TjyEF#!6xyqDJnnq03{$@g%J{kX`p*feN)=pm z&$WvK48-+cqDM?=?xG;&3Ywh`=JfoiJ(j`yrJN$pyohHWV~wq06;1h zggQfYpwpIDTjVr8n@~GubZ1`-XM8EAqWh7Mi~wce`4l;OWY!SdRrhvagOHq3wocpI zm$j#fU=9J7J zi@Nv_DU}V_XO<*$7;T385&P1*Z&+J4Uh9~<2lEBD2cQN*dL~}#q(OsO0#<%@J%8|g z`8s*%G&VBAAWNMz(8edpydMc=PLb0yd?byFtx5c>EpyCL%=RAWL0JUUyxGmWu->N? zrEI-xSSP!*fH7PXy#B|a7=YI0L}BK>OeOVt%4I_Bqr?LL;kiGCR}iKHB``NBduYVG zv-IinjCJ#wf(u5>w#`(V$4Nk_-#yHC!Z*ZByiK&j;S~n&FAw+@h8PhOPwg2M)^+?-b5AfFeOeV9>x*h+>N1`ag8s6ot260osFtH8JfIe) zd=r_pz$gT++|QbPZSA(DtfJUnJB7lm$vaXSh4v)3gI~?*Bn$NOvdO*puYBce zL8Q?`OIZRWOA*VndqT_|O=Dk5#VYX&dgYL{>2o$MGymfk6_3ypns_PQ7E!oEnh~zLsr+4Ahf7IHm+wRsaRHc zCpnam0noF7G}{DH4$@EQh27=%8XqwZtSKhXme1tZqzv?XvE1E9mFBPNg&Zae9lK`| z7{Q5OO_!xIIA;F6&faa$jACE982Mj*)w^-h_gPDK)H|ECVjkMu86Hp%Q%mGLwVPo_OGvDw`L|7VnQb{;e#yN}8U(Qo>7fFZ~;Kr6PV z#+-;h|3I|p8Q_s8XkHT3f(Y zV&B3uZg|9_;^k(p@1k3(qS)*!3Zx{oCv&6T5EnnA^&os%`6Ge8E(j+?7RTL#bsfO$C&a0j~^q+Dk`Uptj4%h_U>(j=(NC7PFH z37S$2_VwVFhcf=HBdd>;A35Wg8+k4nUo8=wu%7|otQ_^Sm(**0geh+5tW3QHQ&A#H z`J{WqjPwcfOh8P{AAB5|&`$@|lfA?C#8sWz`W${HkAfsM%BYr*bJ7quqSqZ2q9UFO z$|}8%l+DFqeIdOwj(hRnlgYJkOZw?%$@&XYl+?}F7JpcwAGoCZ#L2P9x+Hz(h7{$6 zWdhppH_2YyB;@&mjBNu z7*7BEw^<geJ=kAenNMCROU`Ufv@il{W*e}H#Eqn<1nBthXN5KDv= z#S;PK?1i%a!mFFtn_0xFTE~}6YS!Q{+O@Mfs@k7S+YHqE7YhI=P|GXiNDE% zoj{_*M|-eWn{q9;UTDJC+Kmpze6@u?EWokq0RCNW6Ob54iIR@KmufdW_=VVHj!Cq) zeXwCw4N`gb(dx`2F>$P)hy^xJ8rTq^OCip4*SZ8qXOO7!Y@oRbn3kOVZcrYV_N^mu zf~P}}PO{fnQS<5s!Ma|cw^hLD{OPIu!YT8algI7>4!xwPLcHFpog$1><#R^*;vJ4t*~(* z$JSB3^SOg=K*^Ec%AC8T+?%r(iAtc)db((=dc9 zM6`+PUEwn0syI2-S)3$@NwBlzCx#r!ofh<3yjVb({96jEFAzFGa;7p^9jhEr&Xo^G z)$u3oCT1QkYn%6ExdS{ok33sx&YdIY=-m0lQb39+Wv6svh&IT59Tz;0NcJ2NVC9L&m70s-zFV%yn>3i^Zb-{V&HYE zlXAc(QEiLgr7)=TmxPi)bt?xxqUr{q4RRR^d^wL~yn;gxDN4@Y{!LQwqcZ4aCRfrg zLSbVYDz%Oq!n-L5vvgy@jdH6PhM4<}icIJ>BX}07WM03H>E5 z6R&)1>^W?g609QKX#0Nzl%96GJnz+&+am`G*`fWyXPp&DaWGatK)2|sNWEIeRZu3A z^s)AtpoCJJA5-ZC$Yih@oE;mc_0hXlLGn!zUCGU97p#|?e50`!1RSN?Q++itszzn9 z{!aM6o(C2^6$)9@L6WBRUxZ0Oi;Z>-)10$yX?RJFTtgLc7xH7b?f)2eLV6+f%22;;ctk=)ayXeuK& z)G6^KH}qIt0lWBM-45V3zyxE>r!T#&&l~(!0rUqi5+XQaVlWQA{%ae@${TO63<$h~ zW@(Bba_ch<{us6wJH7znR}JS-NHg^))m(TL8fe8bE+|*~{~4K$g}M39<)gbLppXeo z%KI61tc~+qK%0XBiDQHA=w##E6rN-EG((()sEoi5qa4s3#pb=A^`Px3wNKFGLps_wZ&l77Wc$tAg9l8Dr{UK0f*T?kKzF}xR-y_#ZKVZa zA@KkFZFTV1QBs^0s-pCJ{nwx>@9!O%^u$nAKuD;Z_|n=Td#2F9X{D)a(5a6giGTv%%5n zXOt@m^e^}EZh38XHMmX0zm0QOQ`yDWm3YhMBYNa2+1hakt3awKGu&| zK>dxJebZ^Tf#t+|p5cL4)~7a6!ha^*0_ckXYJQL@t?-u1*+yEyWqEO}EH%it#mSZROP+;g1~CH3zHAzm&hQeQ83l z_6JFHW4#t0%yUr3^p_iVm!+Kma2{qSDzcmnL4S&6O~mJCW9^4?X5zTA_P1Mf9k?8C z8Tw@Uc5*#Ht4ODk1~$vGkZg02ptF1I?F61L`a$>)^I5CtCjv40*GWZ_2JBRXj=`~L znZQX4O3n%2cLvRE3L769`kUA893?8kFm<$M8%JhQ7vJ*?JU5lXyFPws9%fZQJbA)@ zK~84Qqh9MkEHIsjHci&_FUFWLTcy=}%++Yg0L~6I-~6kfLME_?lK;X%-uLYmr0E{c z`Sl!BDXQS#tR2PDYisDcWboH5&=(Nt)eWfbSKAXlcJmgP0W_hBe)K@rE*5T1KTl2V z-QA}-T57Ju{5 zzlaKfu@iYOuEI^A_L=5{!X0^RwgJqzQcknINX7+$BWFu;Qt-}#WX}hp{w1Z(-irn8 zMyDIx6E~Vg&Il8cg0rz^oQICktF`~nzue1nA9EZe@*vT@innKk+?^Cy5hYW$Fo<4= zJ>lwoG#~l9GMC4?>nC%D?Z#{&+;GpgOM(dw{mY^Hx(q=6meEhg9N>m*KDO3`QbVUu zNXX@OECmarCP23{qsofwe*e$+bB6zP{k}7^=_VK|SO5TH8A^WYF{lr*K*27oYv}eNH-}RI&A;qcAvs`=uGG%l?F}U~Ot<`kxibHG>;|I!G-DV%e5`+&og*;l-Xe4( ziD-_*I>vmD-mhv11A;Osom*y~i}hfmt1PnMK8MPdW|rVCVcR*NegCd~7jXvM6oa@S zN3$=8%MZ2zEj2m~q^TTOGs-ZNgEixK+)dyFK#IApgTpDl#LX%R|JoOztk$Of>J9+P z&G1}gIc@WoNpc!eW^+V0T1Q?2cRF$()=WI>1{VOIOC(4M8tr+5`B(h3537_~{0469 z>B`WDK|AkP z*7u~J!zqZ8^QOGaW{|Afg~Y7oNH(7zX$NN~fhZN+o3$L$ndfnS0kGvEYl}6vg2#d^ z7X_=+7C5PazjA>bk{KtF9CukoQk?9(KI2&?VNkTI!T{h)o}sIP%(cDv_*WWGvoPnt zy^y0w_Y8sORW`6qY?D0Eoqcil_UHuTW&yH0K%v3yCHq+J+dy(hk<(B<*QN=muYreN zdNy#l$UeCja1YJb7P^ScH{v$@bH{pUr$mS|yP%@l$9c<&JqU`W|ZI(46gwX*j_NyuH>J78$<`NZqq zDYXWmM8XH#Q6h73i;`c(;;ndpJ^!d_*)fy3D)ChDuFeBMzm2jB2J^{F$EwZ#WFhu$ zL0SK9gfL)V^j^aIHpfy`5BD?7!im9hbR0I~x(Ug)vn0)FH_qV{wJYTu1IL2?>kUC~ z4cF}}0OklovO%oxhxP)#B0#vqxu*|7r3q43&K|H zbeM(IIT{igFkVk9%|Q9f4>*YfcG8*Fz}%p^mD3hKJBc!$+>okcz>~ii0;<0ty|}`C z)3Uty;M%riy3=Lj9s_?5Di}L)2r;2`4xVQQr~%r205b)` zVp>kti#Q3_+!C6;N}%iQT-Byjfy}Az`9^r`b0D6raE!J`TN%Ua76gKAZEGjoSz^$y zHtU1&QhmqhoII(8c8`{~%z7k>xn|`B*pIr0*H+S_5jT~mYCr!h9r5|wxX8ASYih1Y zf&pKw=UJ8{l94Fo3oYJZv|1ib{<8TU+shsN5nG&PpES5^B$T@YP)h1@A2Pfye#|RS zvw`Ej#5vNVDI*{DBQxIzqRGW9XL-U2?7=&|n^=HxvKjxp1Ec#3jBdx&DTfM?(f?qY zvl|WxGT{jp+*|GyfkwV>mC&UQ#l|DG{msLWP21&*11CEj<19eTPPFG?18RskDn4P! z@HN1`{@jk_orz~X5ooK&GHW9`QMPdJyu=TNFC{D$8x=PCyZ1=*@455h8{gD^q8!Y} zJAxuepn3rCb*F7Z&+wt#j^gc>y^9H|qS+rsPG7S!!T}P;x7fa&{i!iY($QguNr zG8aVdu+yUKykw~}!wh~P_9ivR^W+kUg<^|kQt z`yU=-NbbXu?5>c^2-X1g`g21y*uZ%#b5&y&l^w(ss0(<-LoXj+ zpjma{=LV=nV13uB0f z$+;JdAgHX96Uu55!FJMQ<3zFCV3u{HcdnIAT740%<5JaNYDbH{|M1#X<2ybI%#h{2 z_7DITM~jjk^#v4&TD>WmG*A`6<*1O2ceGhOmPgxv04uB+@Q=Cq*#-AYjcYT<%@n~o z5kMENrMmJ^=itKxo8Wdad2aUU$v*BWQELEiaamQ-xIk1qsV^5VZ}JI1C_Iiuz&aDe zO2Vx^mp`?X$NbIwsooaN_u+iMu8bR%|KawLnR~wRrlKa{wx3I$s+ho^(86t-L*X_A zrLCRV1L*~=rCn{BK_#J`)o0G*f}e_-E2VJjkB+ZOV#6i+10blrh4SyUyfn~x;m3vE zS#Knf)M@ecamyL-Ri;KjKKzYQ9w_8CH$V}`_Gzh^2p(g+*JYlG5J;w5_Eh{^ydZbg z+Fy=l^WVlPVAu1lfsx#LQ;iDYS2F%J`yZ2ER(S_H^D6kVS(n&xEmoi{?hk5apXo&@ z^{#blKVgk^noFrcUyUX@g#S)7@vAuYaLRJ693VB7#iCoZXg9p$6)jw-f$itBmq9!m z`S4PXDLX$%&y$C)f871m2)f^td152%5zr2-Mqk#HsCGxKanGeL$U!T}eL_5z=HA3JiC*I)q*&?RRNzddh78PR-u^0 zz${y~IVQng_}39kg(!8?1YD;LCigs0Bue)RYxMqrAbYFE*F}@@Pl4CqMa!Ufl5A$V zA8)4h76Xr0j$8o3aDrC^$PGd}+PKS08GI+jp+)VEtm<5?cvmptU@xb0fJU&VcKC|| zh2Sli48p1LC7eBN6?z4zztoO;h1`ouZGv4JU>?G=+Lg@VSpv-mZ{I)P7}if&?z>cW zYFz9Qz^N4oT9hGv zI%ePPCi*}>zpyl)V19y-qm};3%_B#lEGbnxsdU==WgJ}ag(BV?zMR457m^(`8EGr$ zPI#(v;V#T24uA>Y#fat{f0D@EJ}=UQez-PKS3sCIm7&O#be9kQV=xr zIc;s@KE?yo2Mg-MB?KqC86k{lW@Z7g^0_c>_zug8e z_E!SV6x!!^1a@f-c3+khuOso{)02xt0}k@ac5z3=7kjBhhvy({V$h4oC-!2lL?w^F-9P+_m_}$9}qp zaWG@)4`1^6LwK$|+m#9&F3J^gF$&9KNsbOzRIwkvO;#yo0e6qyp=wmYr{tc<*=*q` z%z^WAOi><%pk`#_SWH}1x6lN7m)K?9m3|3ev>+o~Ty;JJ1Oz%7%yU466lp$}?dFjLJVscy5uMF}>DVh)>R+LnY@g$|Du;YemK-Tlanw37006RJ-6uUlymD!x#MY+BJ=m)+cc)i-J z4?;Al!%C*#V!p4&s2Wz3ns`@U;9$JfH4i;nRS}~qo3jAwq(n(~8AIj+w^4C`&J2I5 z|AE=iKsW%rJz1vJaj99M>wrux#T{?$``s)GNRk%vR!+M)nR~@raChb^ArGG|S)y7l ztmErL&_dTDmG~j6dr{HgyTIN~SW#Kf^NdBsamQFYOY84?hI_jvsC}n%RGzbPp9%r& zb3s|TqDY9*y^kM)iui@GIa*~$avaUcR>_)02Rs0$`xGs3^~B1fv@P(uU;8jTGyIr+ zcqu=A=(gX!KHiFBYz7s4-`%F>`|oc?^(@4}lz<6LJEd7q>GX?HiYv)XYZ@hq+ zBH3|$Mi#g}9Q()@{J~UujBH#3T5paiv#Xcj2!i(a*II*;f`7el?6QHna%6*YHn*_= z15`uAzXj0Zn%k>x#@Z9Uz7J_KNK|+F*EL{G9rXvmSF|{q<-xVlzHw90!W7iCE08D< zO@5OX7LNn1txTO(J+EeU^4k)98`68t#}m1vpPA|l26)jZ@Jb1dtNzH%MB|czgD~^l z6(uiRjC|t7F=U=OQBo%;9B>vaut2xQo29q6+!{EVd5?n;j=wyUl@8wZ^Z{vd21sYBLy5vwMh z2PXo~E+(HfLy>>DnPUava$YXCyAHq?KppVqdPtn)X90J971}*@^EN3H@#{IldL+95 zMjjKe4b7D#l-wmIW0bj}YjAld&I#UHwcZJ1Fr0n5ZA3@v=5JKC-19~-+L9K8{DHp; z63_Q@OJ@*rbfD{YHZ6R(p^8upKXSh?{Z;$UqDQAX9(M{gr_!KeE`xmR+G9 zuUB#HmJwxVTGE@KLq{ohKqf{H@iTlcq<-JVI0-s#gy?(_Ye z&C=vk4Ud$ht-V0*AcjhdR$f4oIF`GX5zJz6vz8xP3WkHLPUj^wHRVkSAcI z9KKVXEYsk6#qBsvU$tR%5bWg8S&(Yb;~RC!_vz9A3FNXw6JKk8n&d}2gCf_yjerG? zock=EX0vU>o@zynSLqBi%D=lcs^df3MwkIZoqj03(@Z_Z}cY zF;S@kki}9Mdnuz^r8k_B!Dn{?R6B^f70BGbm=rjqO9Z<$Kp0E%&#uU61RQcbb7G*+ z_h%iM-{6BLS7+{vFH9q-N^q{xC7@@?@rmR zSFd%rt(Q+vT6KWL?`-?({?gJMV~ho5Zw_~sV)8Xm+NEtU6b&|jwVa4@vtHBgkP^(n z^kQDaQTu=g%6sv_qO{G8Kd5Xh`c6Be_9>s<39#5-jGvO7{S?MopI>WpSS7T8dI_Wl zX5qV)Lqzj^-rSDtQ}-D^afDS@m^CWYik9=>vT!NSxzeTX0s=KX(JY@k95<2zc|e^U zm})Y`W)eEF<{ib4l`nXh4r~+xG9q55EDXXcJ}k{QE{dD3 zGXl#9ZhRk#oMj-!jcABxy z*?dt!+C6{1&L739D79ChwgN!Cig*L~Jkl7=p&rW|c%&mk66Ui)@?nwtCeMeI1D2p! zr2k#7%h3s*IFV<|{g(y|Ln>rFxk2_!6OugF%?X9wLyMy>IBEB)0ypE+tJ^;TM&=S& zHua(ELs?{%oB(Ps?C$b4K;=`!d6n@XvViT4%nib;k(CzCIL(H}t}RWJwK z?yj|s%t|1d>|)mY5ZI^^nO^y*Ii6!rglX48v{#>kjg@1+@d5-1e+IfaI}uZ0&hVaH zrbU*SEhTlu1V?YC+sQ7VB$S4%e+}*FP0a=q;Setc$Tmkh91PG1h+0`+D;rM_){ zC|}atFdN^PRS&mw}pj*d7v{9anu7FW(PyIR(`tq)8 zwH2ccARo2;8~00;+lTTM_0GG>%UrY4H)V{4l>L8~bN);(3;_x_HN%ZR zdt06Z{`dBe!5*fdXps=yI1U*hN;0UUx7#QHu63>-QJHqM)%_j}e8cwEnSGsknkk3< zK}ta16nLdj@*@mS$)PaxO?Z>Ip4F5S+`|RQq>QUND+lxhvLeyVr)e~8EZ7p*+Bh~V zgAd*x@DYnqe2a0cV*>8>u$*i|)P?Mzl7=4M}bX4+4X@TfPNtzQc&_ATb`)%A>kc^U42B28*29hEJ*aR8cmKoGn-0YS@c`wj&z zX;V7D`5ZFi6nu=Txt4zlW2C3&!vI`^%W$J$GIv+D}(@6~0EQ0alN%svee-bFVH8@Nc8C4>bd zF~H9jo2pj`C`YV!2KG$btN(hr8u%N9>};{)oUc-YtN=_;8vi(=h2?^7`iXOK6*eRe zyeXaPE|-|)vUx!t0b-=LSnYfY@V$+p$44n+K%mzNHsZyYIOObjNJU5w7eG^QmHj=m z1&XlNs7~9dSDIDOCGETWXV2HABK7{wqP&~-j)|({dQiCrLA(g4vz>Tk=HFZ4!C)uO zmYZsn^8_pYXr3c^EC2y1`s}|Z99Vs%pf|0f;2bu7?R0O=X ze}!bAJUJoj^MrCyK)l_rc|gvv7i-+>2CT52Fy%IodvYm>kPr1qU^t;Wetbz$OLO8V zx;UzI7f%#&LGe&0{(y!j|I5_N^uKDWF%Z+B+|Hd(2G#!{yBg@tKLBly%TZ{n2x1-t z`Ik>0R(WtM8(g19j#tynjQ^YY7Lzm#Qc{6x!0TuybGOJ zJ8`dGiGrtAdQ3K~Z9GPW`(?g-3I9o2+o;S8xt><5_~Ga<>in(Q=tq881TNTX9x!&8si=j8rrM<0cxsDf2CM9LWz-r7Ex8H zHg*Q34~S~((Q{p=G2nM*6Wd2E{awVhPt=tcew*CB?0R;PL(gE^dmEFhAhM%uK)!jS zP@+Y)g}BMpK>&8IJlKBT9-xTww7h`ifSi7Tw^>D{)AT~i`1YU9qB{F3cB5K%#_9Si z%sBddD^LZ~rX?`5i~p8bfnG59a2+lUMk=-0x&KK<+aI!K!CQ~v;E z+oePPG`8r>xlsz*(O0oi$2%z#LE1RHLs6)x5q8cNa9T0KY0-_1<~HaxKXj=fBN4ah ztpm4;vnDj2To1@r4pDU+^8>?=9tI>8#r}Vt` zIZ}UQz5Y<0nqhHUWV&L6LF2Kbb!rfMtR8+O1i1oB9Z_5LLkoM9cj794Z}{Jcvv*d$ zYHki)qR-P66NV^gdtXll@WQ5l+{oSvqjRQV!k#yRzf&8+quG6`h4X#GrhMColCsm! zGx{+dRcZ?jtVT--AAF%;2;=yLTXL!}D2@nO)Ykoc6d4}ByRtZKfO!a{`WyxOA2xVL zBIje6^Uj~5aCU*<=Efzd6=EH7G~7M7-=m45%Z;wS`RvwDO%Eh#J87=h7pEL3mh+2^ z{p*oGVfgwgwkqKvA_LFAK;MmP%=j9)JFb8V`0J=j49$Px04Hg!@ zZdfUF#O6^e<0_4;ykaz?A*gW?Krfwx(}B+c{~nNA^8HoRQ*|RkBE#1|s;*4&rq9t8 zlZFCP$oADgGDa7L8=h6(owpxep&`88){=j!`)LM>xkymzmZzwe{Cln95VIYE3?0RI z@HALpfcKh=m?%Xu%Yv9^jB-g5}c~Nai8UdAs_)Rh*8f)OdJa2{(H_dyInt z$SKO;*+KA24qjOU#WxcULwMt`@L7TI(@D1#cP5`Fw7%YnOP`OMZi}^Dw zdml?xgtIZJsDR(1p=(>jmBpy?m98&{vYV}^+2zM}-mh1cJKUPsAgcL-bCHdTd#u4an(2Lwhr6{AL*SFj+Ee};oHPqAuM*{RB8fL)3-##0&>s| z;P{Z)79%0NoL|Cu@l?;|SWr_t9$^8JuG%=K#SFgiOYbJGz?F_x`rLcpgNomo zye=I;YD#fay7U8V7jXOnx}fzuo_c#ih;5dk9{chMcW(eVDFe82 zYxR$h0FVy)YFXb8s60i@3nb<#@bp{NqoIDoPcQFi@9g!Pe|PJhPtnbt+nWk&FL z&L6t?@$TlI=WgFd&r+G{Dh}`Omfw26-Tm%2QMVe$=<)P!f2eL@yk}@4?VToe5&_DI zw9xhfPwq7bth=W6tLS|d^#N|!sah)MhL>aeXoPztdpn3wBQ+iLBb%i2l>Ka**9kTT zBX2+JR4$dSFoLw57jTYa_7#tn{Xv?|>fZK^F-ZWyXvCpqdW2iMvieN{F-`;mOa)e! zI+PPOa*-3#BjZAT8*N6~QoV7DKj}Z1&Te4D+S+P{>_dM>td~2#L)QMWn7t_D@M^(b zYS2Oro1YK~opuL^0#LQbEqoq>fK|TJ*4+=<{AxVp4{*R#PG_y`jKqb`HHEDjg{~*4 zlK)X-r`YSBb#tF^n7^g(Ip^HSNWO*Ea=`5;{{>tPvom6QA+GlB-+*SL9W3G5`{NKI zfB;sa-lHv`PVf(CyTlL0nEciRg-6(*z2ln}m#=Jo3at!*BPp6@2O0ZzchsJfI9Va0`a`6+jYEeUAb zAK$j;y@zW1?=D1?CX_k&wqPF4tu0Ngj0EtjeSKfas;AElv25p3R<`c_Y?vAx@PnAK z1e8lPUrd53KY;eZ11VZqP&a$0`U3|fsp@04N8~U?@XV4)KxX(l5izez3VV;j6|mBF zewgf}3keC`-TXBFZYd4Z)iw7Wx&4G)IJ$MY+T&ZAN5HWcn14jYchEl{K70rU*SAu) zX6Y?^e0b-dKr#7F%5j*>C$bmSe4&9ar869 zv+^tJUq&&6t_tFhAG2!PzD?}Aq0{pVZxav%$*3G8~(5F&wtQ!|hlh^Ii+clF8m zbtGbfw;i4O^O^uDA`Z1RgbtnRw8yA)cJTblOM+WhS$G6UnZ>@iRzMm&M_!1Kk z>O*Y_i1{_!#Nj8sVs-Unz8?|W@^mtxhF&r3g>#)Vo%0OJyew`kO!0s9aYSEn?IP%% z(tb6D88_`1{tC812QZ0%j~bcqvNNo(?(;UzcjRW%YTM<4TN_QRa$ll@&-+&D+xg2L z9(Ttl4{S#2u5oUXYZ_1PJiuvDys6%Faz(XgHVU(|%!~=&Fr~WbMoe5EPvKu<`&T6iU)pKf9=&nbPwzjaJgLuOwKP*q7eMj_WfJFV2KE?$FkUerX`U8nx5`+S0n*iIdzw#Rv-S?0gp)J(E%0y^@`->w>#I6*`@@wh%sn zn`q;E=R2x1T!$&V`fYA_bo(7@ee&6g^UfDsChnu|S|*W5C;xb{RKBuRlT}S|#*rp; zS6}-2ycuPajnaq0`?ptCvrNSi)-hr8BRZ~Xnq;;vZYA|c0dKKoko0n`_08UEt2=WA zysa4>97qt|TMmnW;%RoNxGLqwj$;g6ent1+C)@F1z>oo!{t~aG)UX1h{C@eeRhJWbD~s#q#KW98z_6_RjZbrW z!&+(0)$)G51djZi)1j-JT1kNlh5HR0{ASD4!iwt0b(p}mt^m;azP zxi?Y1q)--)HaEhz+mQqN@ZfAQY^=WMOT8LL=ZX%syC0joOz-`)2-|(Xp2EDf8>X=t@Q1?dX*)#^^hb>YLTo-F2f<`rWU~ooc9RNeMq{vO{}3 zJPB{ZzcxASOg_TQ{{~SlZfAR%PPl%jthPU#esA0;=vcZI`vyBG#pgoyIeTv?OT%Mj z^2t9xPW;d@k7t#0e@$RnOlZX+%P;@>A{?iTTfWFjZ>qyJDQSAV3w@I+@Lu{$$T$6C zKDDGZzjhEk>*9vyilth^f@d$z-eE5_uJ;X1j-oVbmYl~}xkOrd_iHbD+UN$yfa}8K zR#J&TOQ1WwXT1GmB=__cVQ!ABb06&7S$%h1&!-Bai26D=dnereDVN+}cpohRn8Db0Z7i9GQYpT*UX0Cf{4z)ThXIUq@9O zwtBnSJ7j0YO=472)nS#g-*rZl0d3s(lU2?c;nRA!)%rbH|LA( zja8qJ?(LTM+11^c(>iulu4UgB-_Pp>nNEi;PjWKSTc~L1`D-M_YA~&OiruX%<>psE3;snhR|7P#efo181BaV%BT~X3WHzc?g??hj_QcQ9Ars@{_5Qc6*6`c;;hJHAt>#QM&9h#kVJlZRHz-X$ zqg!q2DYrJJBOsTR&LfzEd_Rc8?|#%RgtepJhlMQZ4$}yTgtj-%&P6{73#5qraO|jU zsm9()_mAE?=c~0AitkVdY2e!^N=SIS7yX-6aXH_;^)=Oro2~uZ`CNXeMFUES)F1(Z!w8B3 zDk?RAA|g@(h9V^d1}OporH25aw*a9gft356=x?p>d;fXwTH{D0_nv#sKD#~7-X|dK z^v3x~-vwC7G%mYgmtJ)VIK{!7&oGxiG@9ofAmfh2XZ>_dTQn*A!d2j~b-Wn;f zcC7oPfj>waz&E(#zOOJB$M{d(LK`OJ%RC|v| zL+9!vYhu`mZK?e1(x4yiSZn)mh)jfYrn+^S%_;(EKhI8b@>t?p36Iw*Bvw9x>#YK0~iXb-@j$|m|f~X*2 z$e-DRAAX`XGZu%o1-noYiiaQg`*-Epm)G-!bP7%6qI~_b_fT;o$8E1OlUGnp~)s8sz=s z1N>i%)F5QEz{*t<<+Utk$9F|qA(q$t+#lUoE~8K#!UxFpbDFY}_GQm?uddD| zH#+-}KtT}AkoWDK+N`5YN=-N8hZb2*5m6p?Mf0S(tdT&7(#DTg4o5+bBne80*Hj&6 z6IsqQ$%AU(=eH8TtZ()-a6$xEwH{QPM(ScX&Jkjvap1=H`={|lUgP)I+-~md)(7nf z3;;prX;{Hojlg(Tg@n;Q>C#){i^);;UY~(|G63zN#X@rN`HBLI+hYt|R_5Ny0T8z4 z+Lg3~3_9@Lo8BDbEVrY{nJH`2?@A;J@zW?S5&{!raXXbrS!+E7g0di15vNgIlcCNO z&JA}9TZQfzB3wqZ6bdUOocK}5-e?8pE$aM|N>MO>E*?%YGj!s(Sc0r%HfS^Ysk^#@X0cT`BfUw*)JY7ui_>}f3nO3{6( zd%@*Szs_paO>(*6%d*5%8t7Aelv*6&4+sl=tV_c}$JMa|Y?O`uN~`w$I}@f!!id9U z7fjpu{nNxh|0nf`*U3Naw9d~R5{J>y)Y;GgI$i628#=fHdjFsHu4)H+a;Jzf&ZS$Q zW9I``<^Zd!mx!AquK>|k5s2bu`c{{^lE*H9}hip|l-?(k5~%*tK0m41vD|W2SGexNbh+*t)9N zIzXPxE67*?q{b`zM*k^QmUb5NBs_%!J^a~)EBx8dJ4t*319*2yp1p2p{k8iD1vm+T zExwY3pcxFIgO~$_$m#a&uNvq|-xaQ#1}_z5;MG>S z5Y^s&$W_*Hl2hsvK#CP zH8RC_n|ATHpcY1oJs8C;@L8Gs~cSbVxfJdx$7IpoIpSDV)2uJ)9y@LktUzHC;ey-(KKX=5g0|(N=uY+96g!K|e%q|BEVRoaL zQ0~(TBD9t1#$iNQWP*HD=x$l)U=Kgxt+>zB{YF;{(b(r z5=!)Ml;`duOnYQ&0XBF%*r%(Dq*Cy9=xsK&tM@EcxH3O)zL3Zt7i?dql~Nr~>bsMu zqBX&W5V!4wITD&6^eewF`m4UrB{jIKlHbqPXlOqwVvuRsd#u)OstXOswQzC*%`pKa zaJs_boMZaeoDe1ZP;tz?GH!(-sehXBaMu>pVLOC-pDTkpaSnvDNwX$|WnnhF<$ztY zs7+11b!S_Ip>2iEP(yXc1*9PQEz-QeThZGEG_S4ZFy4Dq8%w?OCx-e^QhKN@tB08VRyrUrz{C)GJj!Egg`M z)E5`hTUB@S=fydAE!l*x)i#pq>UX0Aq5ht#7$s>@Q{g??lmI{}O! z^e5wqA_2NpgHfev_X5kA-uDmqMFb;RJBbhfEtlwnUy*S;HJ-}EwsfE+$p2Th2+s&QM!~3U(G8wyoES{;bdiXTzI3P zr0zIHVW)Il7?!j839!o9IkAWA$OhGniA?r z=d}!PeO)4@JSj&KkXk%&Ny6DZWCFfwrZ21GZrd%gq|F|;KV<8EuL>2ztVU{z? z4froI;SvsE88t-MDJAW{@+5?e zD%W?1$4ajz;RgmV-Pq5_@UB*>KVj|)LCBqrFihm3GNHYuA`1)gcVf3 zeLg%;kx13zqTOv+``{1SNn1o`%bi9-hCUD&nQ(bPFJbCtXx%#kh596L#EyAS0pVGg z%BNEc7R589H-YHE8>}-QTXFSmo|(Y(^kp}ig?#3n4>dE(Fm0n4#A3LLHA>`Yr$Y7y(7;*3`N6NwAPkM)^tR+%76{5ajL|4{|tHvI8qQxD~9i?&-dN z&xUV+k3nf06i-NmTIdrV^n_0!;0Of_NiL?>+__<|v5dmrdp+jqH;tp-4tI}>0*6|o zvQhG=oU8g*nTJHf)2&Mc4@_77xtcuX9r1idElKkmZe>c)pJ!KZFSK>nBCn@U1j_gnWEnFEFf)bSLX11QJZ&!Shj?CbiKQQ`FY z=k&yI`u+5~=wmL+9SPgkGS|!`!tsSPUXCm|jmkdh)A77F2{a_oSt>`QQ7phb*0zP%^C%P>;Z@ zhP5wL&eSK^$PoOH9c>H=5>6uOaG)*@8U)<6tqRO%5|Bj}?*O!>eVbN_gid*Uxrxv# z^bZLmxXzh4SGR)H!lIO9@#yiYPI;)=qZchKI>$#sNBfeIcJrLj^)NN+Zvv@*=;80b z$;mMWN(f@TKo<{43K(qT>7lR$I@+KOmPiUISWSIXe?4O}py7l<7tWr!W(>KDGRJ1O zR!L{lJWKWbHm51Oi}+PZVCHO|QB<9_0V@kCuIePezgp<^IMp1!w^jkl`;Aoc_H7pn zewqnCjgi_teSc$G4GWeB?n1;d{>ISNOud-6L{gc!DtO)G(A-0toh01{Lfw!tez4e;~v(eLNh-3akNIJ+-&cDv$+GhlVO zhr5l%gD9O|Gy(-@p*v15Y*gK!=kfbqOf3tJXdc+DT=4d7xQvW;WTt2W!H)(+&rNJxTzdw(97Tu%W?f$u7!K>VpkpzMb zD@MfwGWfW+q2Z%AP6_YMDHs|W`Ww}i=iuhnl?MR0F1pyy?q6F$oYJ@d7hP6O{m(?= zsNT`pg6Rs4O8tTLIYaBX&M-g;Dvm8spXiclA#uv z2@hGave-4-g${1~g#lwsIX5#;kvKDeR{U*sraDlBFHszvRc)vrxImUtF(ckO9;cZo z{C3&Ph})Od!bAd>TF|3)RdMnlsm1rh*PJ4ji5&}q#^l9U`#+(yx@)Cyi{yi+Z@B!!0-Wzv59knyK!C%M;XD|m1kb7(D& z1?p1zW6Y<(Z*ohd&-CpJ%h-f>*l$-?@6nxNP<*!?!+(?tf252kA-gT4FZxaxVC0lf z=n+08Gugoryl2ikOZq&Dv5hkeQ_~^^kVrfu<@yE4A&PN*wys-Rwq9S=7lg-j=ck0I z630Q!D=Zqfeh#S@*fT?S4uc(CqIaUAl~Yg~=QSo&9vv^MozXN)5;CN+VypBJfK9X! z6!Tu}S(ZqPX6@E*2vU~SjzmKC$~Rn$jg9}ll*hR(k~L5NaR_XPfVPmPo_IhfAm^&s zV#(H+*+%zOvo+lHn(yWd1(E>Fj;mZFe1oYsOcanaJmvBsd}V!J`J67loH~D%Q5xIo z{l;(Nn%71ra}aC9>TQ`AV|X|SLM3%0@6i3)X~BxaNLaV{tJ4+Sle6x3pNvBtk% zUO2Mc+0~lzZMgoJ^l8=Cu?*Sx{v*p*<<+7Sg}v8SRkn02HeX&CSps3(yBj1yaZNu8M zCpJ|ATvnyTja1$e9uW>+Z{aK99+(IJ47z;<9osJ~y#vgMKXVyTj##(7Q~i_lCW1%(zXR>TmtOlpgU0Py>Ssvjig!dnpL*u|Puf;kDc|rcE${glGJSrP z%9WPQ%*!LV#3UI6eVM#O!k%|k+7$pi1YX`SO#x@>b^74v9|glxg!OTnyA0~_Zp+c9>;yfCUh%>-~9OM2F=-?~+ddsYpe{&>K-WNsvKaAI4X( z&68<4u_o4pPq^0i^oIBWn-a^;aO^8|;`!!)i6TT+jNP^INSxG-m^=-lE|AQhoqw*vC&1YBBKrpS7+ z`59f)49u>l5AVajKaOEgfekYyvL8$(#d2*VsR-r*2sUJ7Qse&RCTA@%$_LnCkC({t zffQ!pl_Vsim_;f98&;gncJL}*AQZhi=NuACrD5Q|YHDiyNAeuRbAiZF_>4Zy!_6pd z=Uc>?M}ghNCmK_jzhNo8oTm}Ay#70!l&~A58kJF~s;e~cI?=$B!}BeuE?GWVQT`*a zh?^_zD|ZG2)u7G6E3}ZXdh5s2%;@EkO@@_jA*K~ILm#ZHwP#M@xo1FD_ca$^S@M;c zEjwYB6dd@eA`13bPSVIL$0?n{GwUs^pM9Poo+`H-OxI8@rv@ydGA_wSN^RtW6k|`l zCGK{q5QLs>h4cjHEWlNKj+71C_wd|OrqUHXO@(iczY^Uq)Wvwn;X8lEo$E?E_%s#1 zU1zOvvfMZ0COrBrm(ww>a?0&DTJQmz3JyUm?|r;o3Se8P`zXMU#*ml_-} z4eZpmfHl9j6VXWq-d|4tX7L8>D%C1El{UStUO;o!t2NrH0O1Q+jLlM?9;o5&bbH%q zP0*yo76!lj^5$GXc0(9QVbs5dy%*ef^e@8pvPjxqH?R$( zv_X>8)wLmfud#m(M~TzI=7*GX%2*aAiZ@tckP58C{6p zt#?mhFNuaKSYfG{DwQarD_UpZ_@nU7FB7H-!qixdT+k`MN7)K=3wNWHdn^qKZ7yO? zo1a-8X?;JgbQNo*e@rlSm`qr+0tv$N4tKG0x;E}Ma?}0NLXW|mQNdj@Q;<&|dg6_Q zX_0PYBkdSC$a;Z!nxN}f)DP|&RA{p2T8fAY7NcDS!JnyKLvi^tT4Z#>DZD_`;ZUW@ zF|DHuNQ~_!kx`r`c}q20ced!3y~Lk=u@cbF8ZP@F@6dTBQ|VmtMISiX?)+z2-DhKU`;8-iC)o{CCGe2GZS-8?SNe*jeq7@ z^iJtb*Yv$p>A~B_u!52$p6>!PaI~`HI*uKUkBm9B`)lRls1gM(r_*7l}@H%nS#8mZ)RRARmcW^@|(}5!|0%2ZFyagMEWXKnP=WDkxpbX(#sC zGX`*1J(ynU{URX~n}pb6Fx7jG^#qntAQcetoZdVNl3wSQSHOLiQb_RY-^Sn49h4C; zO^r3lq(yJk9~x+J=E{>oH7zqq2V$aTs3=>_^BA6)%gv-s84-X*j zFS<_4`nr5CfdE!EG6gru(?r6Ugy1^4Ah`3HZ|teDucjP zr!~(seo&Yhx5JW4=IG8fHEtI5dm6sa=X>l?DKWs}%V+y23^Cy4>B#lqn~YH1P$jEe z55{~`zwn%ioV?lV!#ZGXqK`x2n5;LVJImvZ0p+;PoUakU7sNWLF^{3aR-C}7l&0x6q6>#md zESJYmO4C|Sml@9WqbtS$FZ@J)y~LM#5JQ2Ihq|rzM>-TnIEzi145Vr5XSGW2zDiM1 z=Ijie%xSv>NMptCekzv0C7I%h4<&RC0AcLv>Sovc;%3zlhBvtmTw8vUU0}d4mFSZh ziIg}LFe4h?Nj{vccU{1xOmmhhxmQ-1GroW*lel4;q)NDEWOpB`j;ZFK1K=W2Sh4_zp!0 zxqYT{f8~1Ud=%aR68CNZ*M=IE0BLINRShLE2FNw?&Mk#ObZHLli4kJclzJh)eDG0ICupe&D^vUsI?IO50zl*&v)%48G6JRh`t1`WScRzXjV9p zD%U-d&Slblc zHX({FoFb5<|JBvevJ86vObwx!KrbkL@vWr z0-Cg{X>KeRN~%U`{~}8y^kKmgr!zCPxINQU z9+fHz7YES*Y{3wV`y#@_Bc&uj!~%ln-((WBlMsc2q$Ju0x_Qmss9`vX1}p)sGoar; zPX|>p1Ycp4jtd$ey;?Qs+intsb;m!rR2^#)#K}rRLVY@~b;lYF4aRUa=|x={4u=NT z%_A!Tk}G~oWy1<@rDG{bd}}I#-w%=lIdcnB?_${Z100UC=FHDGP1-E9;#a;?LIyVc zXu2|0|KX|IawXm(v+l1F<@3Ze%2H<2s_Tai1+_Sh9nyP38ov$2;jVxb8fYjJw}$@$ z2pQmdp5%t}6WB2T#3p1ECs15O-KMFA9+{@8#S^K7>dLjwOrWEuGE*zpxGpX(@-rljrM75arrunK7BZj$O zS(u0fx}_X%&q!x-ycT~^h{2uiZ)W*IY5n8W?o2c-GHjQl+`olQYt-aLMys8yFZbZ1 z{@AQoe}9qhMA)&-%BO7T&lUUqRsH_q7!nTo{j(@;8z3?^9FWZSbI}?X>j7Xt zp`DB1U_Ldr1UML30&46YaUsn0mA3oOC70h^-ToAIWEq9pdYKQ7Sv%S;a0BaU$X0ko z&(l$WgjeJeDD$+A{=4C>?T9} zclL%gnG#LHaJhpFSSspTDE(VP$Kf*E)IaPP$w>|rI$`{moN}Aa*0z?P*8c=wryeW! z?MZhx2x?|0qD<~AEbj`%DG!2SAFXY#gL=1BB6y&x5ek)7)IDQ+7P!miTaXKJ9+TYZ zgoKW)8|OkpBFdwifUU zj>Q06n|D)1TBD+JMZ)HMK+SsS{e6mz8>sj4eIj!hs8&mEcbiIlvi!!3$tL?A<@(yJa;K^6b>K79U$Y4A$- z4E}&!;l$Ul2n)5eH?ADh52pEjV^6(OP2o1*>2;5O9P^TuxKG^y%E69_T_P0E_+aSk znfODVIsK;+bf3s#NhdkQKL&e$qa=jBuVzUOw?LHhR$zV%Pxkt8!} zVuFD$kQtGIp@V+z+>d)^Ts(0*$W|Hn{oxn62((nidT8od^eX;ojBUXxX>H}cc8X!w zAW_;v4SKFVmnCU*OuS`6B}Jj{$0B5Rq3}VU8r986Fmee$V!LwJNwdOp29SFYMBQp9 zWu0X3W`K!NJU0zYUgfkfTW*qsBl+AaVpVaTbZlba7auc8SA@gIpt}!*hAWdp9h*M+ z0EMoj7Li^Njhe2f0GRJDkUH8>gM0#nqdPDIgTz9EZc~GwCf|0eF(@9QfoVhyt~iGr!!-l*Jv{D-L9q&_I53;)WR0-VH(Z&m595r)=!s?YyhZO6C( zNxUkvQj&UTiMQ@c9Bsk=-l#JKx>=ZPgv52ipj(m(Al}cLjfIB5pTB$=LY@wcH|^+l#0x4G`(vNN)cTlzk1v(m8h(rgYds0_^c|a^G{;h!;urpi}{X(;`IO|C=WmOFUL8;n%J-3R5F zzTzfIzv0y^)j(}!K#&k`YxWKKjIFd*;BvxG5;`9y1r73nGWyRpR#!Y6uw8%LL$dUQ zLd^6a1X=4>0^A5R%n;ufGE%bQKL+LUp=wn@>dryCM9PXA;&D@dO|LUD2 z+!KO+_RIaQ?)gk=eb;}tT9xfq**@f*$_3F9@F)9B@pm{j;_tK&FA|{!>l$9*miU5Q z0MiA>UW2dyTNN7yr5WELm$Vq`DsGev4O$QvA3<-$lzS*mR_`Ft+MwFC@9gOZfa=N( zaCPH<6`+wvY2iViV2xe|1>na}>0s-TUtei+lLLd?ohYOK!NECJ;eKG1>J$KDQe>VOo%Zf#GDp>j6WeOF>lKeDkxnd zLfeQ2hCH@d*sH|m63p{hbHQs^6kgD=>0uBN*b66}7=^Jrj|21H$||E@V-YqJYKWf8l&)L!t5AaG@)oH!SW;b z<-o>}@SYB{2MBib~9k`+I8Tuet%IFdbZE4`?gwqvxt^PHAyXnD<%5pBJ>xhvI zSLyj)pRJ)M@@}ecpKTR4j06MJ@o9Fip9R>NP2&iLWV=unB&T9#-lgJ7sT9Gb&P{~b z87)G@@%^5hK>d#IQ-OmEY2N{B#OX?Ti47!Ne?dN}8ZOSx$XYlRN|K|DeyDGUN{@QDj&l&i8zqnftb!B*&hd zCG?L-K;&Bv28Kl4_4^kP-6q956u$ep{{?y1JYvujCtxj z*F7T$)b;Rvz<}HqcwYq;{gqn(fg^!fK~=+TkA|xrBY*n!sQ#AN+;R&wT1d$Ke?Ug`%2PyLiBNxivA5LkciiuvYCw(Z_cEK_F`Ij8PR*rE=rHY9e{FhQ zw%zR37u|bJl^t}bz<9;48aNp{l%;?HIq3jD0bH*@`(<$5(er7ZNv_Gf_^|JR0d&05 z65h#V8v=(HKVgOwRp3rirJ;~{kgW+@(p9qprJp{-Z_1r3kH9Ti9h(-%7TktKAeSJ% z)4pH&V>4RkrFe{{ia=>nxJnm^X@qp=5azA?UQAxS%yIItdBZVj00J^Av)*lpu~Jw9 zv3rVMitZh}W4A4}c3g-ZSqQD?RAG=-R>?C}ziiE^vv8Q5bPSyB}cC8nZl`<5>>Hr z8u3KGfSxfS@SEpv7RA_##lQ-n;L9Sq*`G{ZS0EM5%1Pr8L3bk8D>vQc41(5L$)u&uY5pf5ffUzAdaX|t51wmQ`nc;hX z299Y*PDTJLk>5dg4oT$=P?$4aAbwvSmx>S?3gNzm;Z5D00m5b+dH6zLhFWDkZgn7S z&fggZKwL2tGq-mBhs&LGXN*dsDNzy=!i=o36VFQM!(Wqr2K zyl@?Rq`hD0W2UrFPS>k!XS0?WtKaTYrT=OU#D8Y8?4aglWGm{_Ece*9QlJYa-hMIQ z(+0F(>#hg4R&@jY=)iT8sCS3+RSHw0GoUKvz1-uwup`$*%xCvdG5oD&MRX&o^@r1#zj@hxQPtB^z30Q&WKtnlSPN#Gk{=nI$SQA0ZlP<| z(YcyRIoYwvCkHTWFP`>7y{tSv(6(g213=%CRz8oYxc1wn^h)pdKOKqCt-oX-L-Pty z2lF3Rv>?Y+BMR%l-*uj;PG&w;UM}N6bBYOy(xq+Bnf~o+Akm~<+25t7i)FK6UC4mAvXIU23 zo5X>&{P#Z-@pN39Qa5RC(FrO#^1NJA*%YLraVi>!>jrCsg={qnEs#0mp|pA7UQi}o zyd;0)73!Kp)*dsXyveuR`42Lv6UL`O&}O)K5Re??LQVi4hB$JekAUZtxKQa}Gg-cJ z5j$_Q27y$j6b3wUa?4K*^@)=)1uVnS6<#5;H5jRm;D&hCxd&N`ec_}<;rj|(piimz zLw<{|X9v&~o2p^~eLXc{fscrK<7g;*>urQwrfKEpem>1`P(M9^&X+A%W%vK60hvJm z!4ZsDf!(?fL<~<ARw}0yLkDwV1M9^@Uhga!T83Y4jMVvp zYQX6CZ{0@b>h^!JnSN0d=D{)a?%`VIAH(&XY>6N zFNU4}tXT5h=mbz%IPlZys&z_e{bb$h#%ppCGk|B$GO@^XWlsj{3ju@hS5I(gdj9nR zOsn!GqGXlDW~{_{BIX$6pgBBU5 zk~2XSS011g5&Q(r9ZOfMoc_nB%Q1(az`dG)9~ZR2C)EnWdELcz-A67yGj*-0*^kBrF!|A0zaoSy@Pg-FGcXk zz#%dc_aB78q1fUj`V%1bFz9{+VE&{an3XkrmodA2Oi;=H5E%ti7uJ*e`Igr7B#_5r z%v=xLV$>v4B5yVhw`NAt)=nS@^|%D#{M%u!;Av`y?r*oOp55GI2A2eJoTekoO7H}) z;Ey8*BJ7;0Ou4&qjV<{(lJ22X9BH> zn#p>5&duWIjtza^LOf!~=LJV&yGl-e&Ist`@2n6CnV zM098FC|@WI8xw`dDIGzybs{MBxLrvroC{zNJzc%;T{lzeoQ;~&smzX-LtfsY0^bjt z$IPv^kEslU5dVke>l&@x7@1O^Pp3zHZ++-v62Rc{!fNHl+@#;|hi{UF(g4RdF|>03 z0{329YyHgBvsFCbqkcb%mmBtLv)}r;*+KeDZl}VXdkU4uM)W4+qzaQ!{i02-uVtD& zgI6Bj@+o$wYF)38Iny~O^l_#PIyL#!$EmE_t<*j+gPrh^&VEp|;v$!*BuMY*T)}Wf z!&8E#Oq#Nxz2c6&qqL16Ykvg}=DyGS?Ru$i^$fsL0Q=igZK@?jSi7B@ih4CZyPlnR zB;=60ASoeOfd&A}U;9(}gVq562n4CXAsJ>y9d26Lb+T*hX(uI7IQoo!fSW+k z`|grx!kENnev;aUsZG+pHu05bN|p<%;CXQZ7S4sno~%7Lcu`sstnO_5afSg%uRr8< z@7Mv*enb)XvHQIkcP+j7g<;zIRMc(Gq;C;S$t@p8ib^);K5+rm7tUMY&;svV>Su@m zh1wSEr5mHpRtb)*w2fMK_QJYQG@NFYKPlNTBXj0(mimQd4;$* zjYKhjNbC%y9sIRW-W{jN=cc#H8U!@BxBj7k-dqWis3YwFkkxSb4j&3l7SvtSCW+98 zrjvKme`k-JIUWx(_L)<1LHd3#2cp=Ol7 zQw_|8D`J1!^QV)cx*ma+NCl~OV7#y`t_CadV1Jbp+VJLTF3llaN3x2@X8KdXOOv_m zxlZ^JG5&|}5R@j5*0*;LVIJXq#W&^RG+SU$RO%L7UIXbJY(7`tTuvHrgY;6U+ZGYNogY1zc!d63LbBmRU_9|or04w^Jy*fXiWZ?^qgdTsrgj;Xg` z(*E+?N;tCH<_aqvdWGWLdQ0)?_NwjXaYugeX=1Ng?9$vry!sV|e_84&q}OmWOdt9i z;_ffFyzU-jsvH{7htMsl8g(B$frki4Ag7;8p7jS&0qhrAnl}mVBdP%zVsM}HKbv?0 zPq9TxnwAo%>bLpm@^?z@(6b$2b`Xj5bxY~Yk~6PXHnRZnMvOwqhfWhgopb^)?rHKa z(MiIt>Yq~d{4qGHF({;?@qZy62+^uk4Ylw1a{{J!96t$i{k3l0mb&<60P|$&J$%EL zd;dV;>t8WuNe2Hh{(Anf{sS#USOadV0B#z5>+?WN5BTMJwa60NG_tr*48%E>PUd1bL8W3-1|pT( zJ+nQw)(<3Uwl8z?5BTQ_^Mt-PdSR5h zwxK&SvsrmK&D>6mf;+bZkvZDh94}m4hxPr~2H2R?t5^l z8WdkYPPjZ_3P@y?0qE&J7J`5xM<*WF^EvAG`)~iSDdP6I&=K)-z_q&rq}8b>zL`ia z4-2MlSuT^M`LKaLQ$J|>`~o607TmwrTIG=8xuMa^t5n={srRkAnbg@^hRL9KS(6$= zgC`9E9T*DBajK0mDzG79)oQ6BxOV)@nmTOl1ER&f z{MO)CQTeaIvQ%gdiKNy@0`xb4HNlt@%+>k%;97=73-H6%`H68k)W978m}kYh>f(B5 zwgcPnMdLZJd z8iN`{nEpcqR^>-hX7n{Ka~@#=Ok;(NYTW95G4BeG9NjqRXsEcdTR}x5B_vwZ zK>$Ezys++?7xWME><$Co1Xi2hSFMkHr0H;+zkF?G^}eW(z8tet`kl7}_mIBV*O@rA z=8y?T**ZV(xk3Px9~(%V2hqn}NYzX+Tw<$u1A;5<2*5{Gw#=I`?{NYSn(;L{dI8a_ zyjeNblvo!5EN#8y*#VwIfvB{^NHBeSVcVusJuOScXHQP4+%OZsu?`qB*p|Ojxjr{%!wmQ1zeL ze6IMt>Ghiw;9}@rV}76xuN3-ib>hCKmqKBGSo zlPEE4L)T(ZGxa3UN90>Thv#n^k`&d;flJc;A(A%7RXG9rFwBr5i27i614MjwV)O;lK|FeYcbeG<<%KB6ZBjYd5Ho%(8r)S@f-mRaxGxyYYCXo977b zNDHP1Kso3Xjq!D6eB8uL!EpX}vAzW@2$*hPLGA1Z*wQ4RO@*R|`*eDvxKjq4Mlb)+ zT!;H$dfkhb`BVl@kI*?J1x+eP+=Q0FnK7AugX+fccmFW(xGCDGTJ?_c{%F zAJoQlU?Ty~;PfEiV|m#~?7qfImoOxJ1QG~Fid)CoA6yS?yd@u~78|ka< zrlRvRW9Opc6i4^V(;NQQ02I6!aG1F`h@XGOYAz5VWwRU0aG(2_q-V*k&DShhs&vj} ztJu5Ga~x9)*_kA)lu$oGGMX- zp_)Pp_KxVzz_5mb1_HvTYptF7#{|`y8f?`k2b1hPb8<1$CCX(A;lnY5sRJo z_s3E}rwFsPl;p!99Pg@k+cR|9vH=x0$W@p;ZB*q`KQZxdiLvT2!#UrMSUhOGv7Mnd z4hMpMH~4I&tzUw?L>ENB_bSlG=kQn|Df8CTdbZl1qoQ|4oUlXbD@W_$%6ew7!rjX& z|IcAYCWt#tyil*Vzi9hyCsMt1@!Pac=7jrg2Y3G2g$*%aL~hk3b4NlnoDc9ue+*BY z1Z@hcCZcyLgdRq-m~t697UBJ|OG{4N(LU1a`!?^3w1QUuT3A}Oto_gh;P;)l`g&q? zkhl7{S~jM*>tU$U_S#lETql0_bo0XSjezkULChJXAZ}52U^Fu6wRk$8+UxwRT~92n z7@gDteH|*sRjr%tQ^+sG|69le+1pGrZFKF`%L;zlHY=OvR5kN#oZmovIQTiVel%jJ5r z!eOen|8i@+QncW+`nYu?OB=NCxcz6GwWC-rK-oR`mOc5!rIT@SKr{evRPN)y-Rn0& zp_?n;h_j|E!+2oVH`H`nR5kzfjW$#xJB@z3=w^G^ZC#_#swG-|_U75mp^+c-Gk z8fx92Q?OB6RbzbOCn+gx$nCJWIUE3==CACBKvz^Z*Pv%wKmT&*e`$-gYL(~UgF%+` z^9^pA;8?WtVMWr=q%;}@rGYlr=GF4&evMpJw#!F2sbenFWd;7XRhk9r7=IE3p!}`K zt>*h3q{FS}mjqnOc2Dh-v(`P<;x9&zJs08Gtm%NyxA z*em>+{~DEZfDAdb-e+6?<5S{;Lmb{0L|)tSsYd@HIQbDAO#(c!lj2xyx>_Yb0xBJG zdu#UWDdE`*vu9f%Rb0@qb(B-guz6lJEN_^Z~)m%VHE!`$V!^5I;Aj2s9o_f1FwbOqXkehhsa(cK^y9|4(1+2@f;J8U!T1LFbU zW{%7w{r}5EpwQndwWQ4Di&#-N96Os2jV>++(kGJ;wFQ>qp3Q}SmJ58eG1%t9{RXYK`^#<7X)kaJXL-y{Fj~lbvU}E_ z-`Z(xpA71$l!Mj@(!{P%^ztYbx3&d>*z+&sPCW3peIooq>M*pNNJ(_d?qWt_X)BRk z$`(EuEtDg{pMU3X1HU6-I;IJI2Yq9dz@)KUdD#%)dx4|m7ubjAS>MEQf=`VRc&J@(PdgYGc{vhtE3uxD3Jyo%G0MsYflii&^Q||@MO2D0@5lD_=Eo0io`))>mDV80ot0md-Hw==e_|9bWq4I@sZ!upW6{;N-nQL>4C2?q|;KyL>_`8d_kncB~kAQ)B$ASj1K> zXNGs*nC70{(y0 zv@L$YZe$5gQgNu{KxQnYoFCf>8r*bxdyL(r$VgTHmbV42vj3&>CDgZ?e1Q4^cWqVC zjOcb_%xa{xM=lMCRN_Iw$2lisKSp*fzXhAk)5CoCk4$Y17^zjwAwR{6cdV3bYS8gX zaCdz(Tg}f_mGUk0YbdA#6FzTBteyRqr{Lg(;glJltii7~Tlbg~)v;&`8^>3@wDDf@ zI|}pTw>&p#RL{Ro@*2U?fG+DPiC=P5v-h_3t+WCE?*@a)YJ7?pgyD1yvD|R2H_{CA z(=%$V#~!Cum)}~aI^=8N++)u~%I;f{m4!x9V!9W+G?n9!$EGohoc^^;z-33p3=n8HPd1@lkgO6cFoFMo-1hHQwUfpmQgjKDQd~;Ci(GK|)0n3@2 zb3Wm8o@*5I{iZ`cc71cOY@%Xxp7Jen#R_umI1u|&^c`Mhrj_rmIC7Qxz>4Tby;X5V zm3BT@l_Rf8-o-lheGeWMo4=8GI=15GRMHD{eLr{^58-9kAgqL%Z>ZP)tofvvX9N(y zY1>i^vfIFSosr?cechky{eely#29v$X$9v5pq#a<1Q8Or;A(x6-5n z)*$E^9qpQhYa0lL!f3tr%zO>nL8$WIU_r-vZ~QFI;mRwNJReUuT#c^l!ImgvuOH*asb-*#`yZ$N0@0=E+?~a6-#J*uEq`-08?*!(;C==W<^m#1%(3qJza^ahqaq zZu4UFmJacY;3xgKp`?VJfu}QWhSO?1GgFBpawE25(PlZa)DNQzzBqipkaY`;1T+zd z+Kt=nC5IR<(QMh@E39OoS-Opife`CY#Z+l$Tqv`XYFzyrb zX+dh~2zGq&3HbSy5Jk_u}5Bl=kHWcbEs4$ymT&W&c&XBV&?PZq-tL+w4T z;PuSA9S1I7GUhViv_C6Cw^kJ=^keiHsJgvNx`&R~{-$Ws=Rwt0z## ziM5Cup%p+@MPw!;#**~J$o|A{5_Vxd| z-z#}1_s=F0R8hO=7n{4Tgvc&Qa=3>TY`b8jW~v75h8{M^C{N4??7W@LE5O43Ssarb z&|9r1(KSk%;u9MEdiO!?@%S;r(N$Eq^@ z+J9;GsH4mM6bf|mlFClp?LktoE={7Xi1To5bDS&x<_g!D)Wsc(vY@3QOaxW3(^ZA6 zGk*5ahRJ#8ELU0y+76h@Kcqo>>;DJ~3-K*SP8ri)ackGwlFB2me`qz&#mm_@_EX?%SWGf{D>qz(N2apCy12Is~f5Ba0Yj8@3=otWdZeA|k5-YH(H2Wj=XPf8b&tZ%=QOnm- zNbLw?Qwy3px(=EBbn!>2Iwd+qc%sR_J3Up|hZ+{;dw@5CSQ~j06<7k=yge<9SO+WB zax1)PQixvvF86H|>=~}Dji!VxUSIMau3GE+iMMl(aT4;BRf++he{mIK_hFC4!V0&W z&GBS-XQ6B9M);CYbAxwZ!|!vwvV%oJx`9~tJnKk%tNZ;5V5PweFQlOUnk^G?5<+Pu zk+p8j7rucPVU^Go1=#MYEpFr1eW?B7HmqHLw}xYP7-X63H+ssP zOCCurQ|bEqsK5<3Kg1H(PmMSQF2!W8YeA0Nu8csiJD`dc+IQ@p=-*M8gQICX`=RCz zlWYDZWY>qNdf@>m_Sc6d+Mcq+BiUth3InO$cM*=i3CP2#6)F-dCpgec8dng3zdQdBf8GXmaLY1Bc4cDU8Ij|_aoqGcZBI1F@RhalQ8p$8C^qB(=-uIl-cV;Cwm!3P(H=>&l#Q zBeC{=P3(OMdCEZSpt*>pUUHSvlJVnpgu~4#FfzTTHRQbq$@Fv`b<080ku~r=O`_La zxI0ES_SYf~0|YYdCoDYTAzP;%g_m3RU#vwX7ZY=;yT26>*7~)5fF8R9SMpwWcgUBX zHe)_$e*m=ac@xhElFdt==V`m)s^PmRNB77#HLTk=8AA(-^Q+t9GLgft=&s=FQ$kG~z;OjM;- zuet;4Ivq|7XrTyEC(_!k zeb^tES=;hO6rwJt#yGT-U%b3iH{pjFoDaY&*v}a3dzr~!xo2pU3kFKpy+1e~>76_@ z9JRjb`R5DT-1~`sopA60ydxSeI}NTl1kbx{20=R*TnR3B|4+MZv)ZXNWCZcOj%}V% z2(JcH;v1#Qf6wl}h{@NRx9LmQ4eDgSKywXIQh4L0cH93>$r#8&)8D+2)_d%PslXqJ zJ*Fc(e5e1c5#5?Oo-}$ACbp8B5pyv62wP_aEDu%pSjhMT@^z~{2fe4jTxF$T+x0)Hep9Wwt2Uq=v* z({EP?nP}g8nyntra6`@E`R!MnNEwawP|Qg$p~P2M{R ziNDWQ+U^dBW6dT_U!W^~N)!yTqQgeJ2px^a`6a;ToIaj|b3;$>`5ZF4c9NuF^uaw8h)V_}*5a2#O5Gjn+Eev8x0G ztRMBQ@F>qxB$wgWjj!R-P@jPmXH?R$9UdT~k`~jQ^U9ERs|9K4vAec;(kV@_eNPwk zT9MutH8^}07tQqEK~^zgj>r}HN^M!leeM+y`GI*e*YOz+llOXA2ALV8B;`LEhg)mm z1s>(9P$#bPN!_jcRliVy-LU-#;=0P?yQf~7C&9V7yy!7* znFV+|3`ZFDEfn9^1p3z=U0iUUA%loK?ug$pZ+s8WHLSlc2>q)sf}O&u<);(0!UH!b zioQNPwfigQ!m5ZSCkK9Eg70c5XtbTBF!WqbxK$J4;rI*QAK4@dGm04JF7!3=FVIL% zZLUA+Yn%PdiQTh9nkX9G@)iH|5^8VQek$(R`HAy!h!uC^1{97u~$Z42wwGepq z#(Z^~ll2(UDo0jzHTPZ>u>`nXMM(A*sU%3@_nu4>_nuUzzpG zc5x&Ewb81+qk^;|wkTg)Wj7<&Yd!Y#g+bcR!Hi2uI zcA9Y?2mLg+)A_S$;(+pulTG&bBY|_saevPWxVM=p9$3U|RJZh;-)m zm~B0uY1|`$=Q^GuQ7OeS-uDtzZ*e~)ND~h%WUf9b>F*(^e$F>{qVbmIf8H|Nf_D`L zs`>cDs0-A5Y^HUHAsf?9vGwpDY_1(%LcXFf=MJ69NlC3l(A3wsxm?m( zODdwRf3#K5{Pyt zfk(txCWGjAd9A;zfXo<3B;A)8z5qvWZEG3~vOLUhWj%s*9y8X+?TL=72R?zhz3@LM zU20}sc_|HO>Gl(YQ^yv$ZG=tT3lTC(Z5uuB;i*I;T=cYjX`6<&IU>0|g^?pRAC@ z4YxMIen)T4^jok^2W#0g3GzqeW)Bu4=tmk(UeccPJde%J7)gQH{}$|vRr;?9{d*D( zz13K=Y@Z*ozNv51J66(faHZ2(`*x%buw?_cR?!nro0P9TPOmk?r|p!r@=9r02#!UV z#1c1G=gZypmSND50-B9RMJd=tACcn2TDxHK z4sVMgh&rr$WNCYPwW6j0?~g&@6}HX`B>nqL5>e&lpjPB(FoMI zj3&l8l>I8`Oy?J4zF@!^V(V05PUM(2tY z?X@t>&}DE-jWU+|T*uZfvqk@9{4geZ8TF}9-O`e{_iU4;Hj})LHv4GR{-gSTBb^_5o$iOijA$Ec!jbfZ((Q;J1sDk+zUB7+Xw~ftroFA!Ita)sO0HU zVl-mfOHRLp93!P^ms#3n!Z!naH}I_4s$zFSwYIr)R=ShjeEbk5)4jwfR;dB1)HAt1 z4dzp0Btk$}&+UWN>n?G##ceiv(O=+`B+6EMgE1QX0)QX5Y$o(PWL3Q?j;w1Pjm!(r zdlS{BRof|w%&c<4uS#KjL#HK)ambqWGc-bKXkkBC3w;wB?`F<1n&`btcR{O{6Lp6m zT~Hri`P+D#Y0aF$@8UnJR&(;{j9*;9M?a<`C3dkt(LA6PE!XzrOt}h|mL{-T(g*xH zp7fwg`tiC;@$wYB{2JWU7C=*zlB$wAV{80B&-ySS2?OhkKE!gtFUM*gY=en5&yw7B z=tFB`jmnBlVWGs#9T4#CL)9jU|9W(^e!P}9lwGP~XDP*dR;hH<*NPlfQc9CRx@_VvoP1U1 z0ad<;J7s*o@%|{a2e@9K-TrtZ$sv~m zhfD$@b)h#6C#$|X9rTG(`qG&5aEZ?FJNe4$(}LCTvXE(Krt3vrTzz(HwwjH%UT& z;DzL|jeh7k5L*!W0(iiABn^!!B_vt6T^OFC&ALmucU&PnxgeTi{~pCuYTHp^VbPP3&*BnUhtiMk;-U{%M!oDOXnH8C%9OhJnn z4=Xc~lUbo6z$b8u<2~+FOKKEj(&`E}smx;8fYlGQzH=Ic9!jMM8 zi`SUBRhllnD(uXXxBP{)%aFs|{^A^*9SkfupzE$C^`oJ82%=tAw@(ut)t*N0j; zm8u&!%+~h|-*#hMC=#d}oOIMUMft=j8)6mEdj)}Wqn_fjP;%XB-!0JcHciaIESi6o zLexeT@Py-B>%Im<3EJ?0AgY*j4NK+SFSYyx^mOs)16L+IH((B4zv_Pt=(vF9J02xX zfsdAQE}%P}teA}p1NvZ^Q&R>dx2?Y{%?C#X8M=)Z>iE${Gb=Qu$!FP9BJMbkVemod z_k{_(e3gB{#Gxrr2GZrkB8DokoM#(Fw#=E9ZP3DPZ#`_beq> z8%1ZYx!_{T5lWZS(xw`An+!Q#(UXDoyRPv4wd{)FMX5UTNZ+Hrv&KAe)0~>F=-s}V z^yVXqJBM(B6I+qFL1QOu`uaB67loOktskEe=?heE^6i+Nm==&Ksa`d;Airv3Hw7{x z>Sot%iSR2fZ2_2K-`w2#cQ7SodpB>TpSP@CK1yQ7FV)RCS%qD(cbQw=_&p=Ox>Z1(L{|mn_xWfqmK8Y9YR!F{N#X z?DJEGom{5xHSO>}0m7+MIa|W)rwtdqZxz4BD?dXf zX^h4I-@?wVlHatuFE*{i#ZFBU(LG-Qan|?BK_$fK zDFT*6k+{%-023Om4iXBqsszw! z${690{T$xt?WYz(1-3O~QObt3=QAhLJ{E@M0872?$1SE&lo$hI%G#^0F#}gx-|JZA z7zKb_6)^CHE>I-l5OjM*Iui5^5U%9s4xZ9tKaYB81mn{UfS({_)Yf=X2<)M zY#GK5)n zH!w!A{FWOH#v|}*^TJ2&)5gSlK{0PIx4~fiZrBml3h9+MF~x?V^E;TRFSmgA53=n1 zqI=nf{J+;Qh`b8FPmNZTowOGc!NCVVVK6d1rkSQp^q) zYwz1Kh>FTvp00{#oe`lcha%g$J5ySpH)o@h;w-^=GZxZL;76Mzrr<`k1QwrRUd!=v zGd~hjh8LF&qP7@9S?FIvd3eYHL3z%)PdIM@bF|4Ox54Y4BHD~k_RxdBf*EVj-u+TB z8*UBq)APSJ`iArF=q>euEHvxf0G-qZT~0ipC@)pLH3o?5K84f{_m%|aur|)Em=%*5 zXC!iNn-}5Mw6-6YLXWhhb-3fEJ}CedUqP-rJPkI*w&uDLWH)bvhXpX+ZqjS`lSEtL zj{eGi+ADi{(_PvWF-T_-r$))Ygc7A6#M@81Leq%dr|X83Au0mt4VMo_$|3U!qjT8v zyK7Q)D{3_STjG?B$IfON098bNSg<^2|JNPDp3Oc4X#@>q_`3KVpLfJf;VV3@CIUP_ z%M*F=)~Q%qqFXC#!P6-5zBakdqkt@wO6981i05ALMZUaMu94TY-GoOiasGf${WnYsqJ4p-DTA2w%!V>Z zwYK33dD)jDdUO5Ay6*&Iq?FFKh{cqjc%QLr{3{YDGGf^56WoW9Zs0QSo}}22x+7r; z60%**e__j7>*kkAuIW2`f@K*-Y_Tr|79{dFtnb<*Q!y4 z2830aNRZ{upjAk!&y zO?cnnGM}}sBlUp#@sF%=3gYGO<-0mB9Pdq8$xDTV_dA6oTJU9z zroNSx!_ud7E=H?>7swx zylG^c*Q6Oosz3+V9hB&iBhj5nowzhZzit9SIehuHp$ReB>0!&pUawm-%HD$&zh7Ut zFZRHLTFed5gAfoXu3-s#VgR0bB3YjW&KT)lF+pKukdtu#C za!0kl8%w%K3V4NF1Dx&hfBxZYVvkqv_j`c~%a2@@2%<68?x52YSKx6poLp?Wdo-wp zNuKWdzSXNmG3UMYHO4Gpq9ucyU&25>KB3E4N&fW#aCYL43CdQh*7MGIxwJ+851K7? zvz|EKnD_a8w>Ov1B7ICFhnxh!XWhglPSVioi&lL0)2M`4F) zE;|?}9KyYRaI9S0@;_*Rg#I)1%CN(mC=FuD`)Zh&vovP<73R(c3Yv7^2@ZK5y`l`9 z5owbg#xK{Hq8_1*1#$a%>R^*CR4y2T6z%sr& zT55h);b@xg!xpOvz6>m==nP28T{OuVdH1^iX$>dMH-Ml(t=r;OZ{2SWEUI<$%RB|5 zdbY}p#51`WeNC*Mf$1tc$>26~xFUxbi^EhHBX5~%;?vNei`j9Qqr7rCv5mJFS*V$9 zH45ARrpK;zm~cGyAA6ut|OZl}J?at_-$GEca|1It>{_JYoh^2>o?8T5D*>IY@f5GJwwExjyI&Rpzr3t zOtb~w4YF>alM886nc`6KD!I8+OBNFPcwak6`y{W90;X$=ZBDK;=OA!G#<|e^&IhLe zUT#C)jriIu|J(~fp_3ib7N5p18KeJGaPHLz?I4;mi4H14VMmIjn-t-Lis1Q2yvNjXw0% z-vjGzK4s{AP*mpHrVF{55ECVV-3X_vkosYbO7MGgwzO0*fSJb@WqqA?@E#(S$H6p4 zjqAul=j4%lrGKiHO~zSFXh*7-S1DWRssbUPe;N(^vhIhS1L+T zlBaD`I)TgCHLxh5Kq~TsA0?lq=Kd%W0q?cG12XHSE-h^t^De-U#e{=kVzT+)TOu1` zeoL$J`c^a;OgOD{E%>m6U!@6cC}eHxd0FC`F)$+M1rMi=@_v_ddZ3dK;~F8>-uaE3 zaVhDnk4bU==&7nDkb0~wOYAI^Hq=j^`Za+cnUGvEPK7fv)!aTr{jUtKqT>%=q5a(k zJw0{j+LwJxBI+J(Iey5GTj#gXrra5C<)Wh)O}f#wVodA%61M%kDlWn5h+JyXdcLk! zSCy>e!e z$LLZEK1wISwQt|;9>`6^6|n&glsOv)G7%gnT#`e6kV<3JWXUpM)Y0=rhq#4sK8UHP z6T}jcG!?;6grWq|iY2F?Rla+N{ao4ZTEd#KAFPCOsF{YAmY*I28Fqgf{WrZOL2JAe zg#;og?e3flg8QD*xrZmOg|$OcxOB-P|J#d;VHid*li z`CrtkjdB2Zv0ZRNJHDtR*bVlj=K#O2AI^( z`t@8?88(vVmCX%Pl+UrMrWm*3%c#$VDh`&(4C8)Z6OP(*OW4)pw9X~PFtCnEuPvpb zicF^VMgS3kC1%Rog|=8~p+fchnCus|PFVtHtY6Pi>KVB0*aTQ^6lq{46Yii~p_S7Z z<|jA2bX1|SmO45Vf%QJ3xdd3SMR|n5zg%;s81u(?)(4lkjwmh72ItU1vXpUZwcgG7 z_+um>eue2B2XGTdw}lTK%14P3ujLP6i zbQ}fyQq&Eem4*e!02l3^R=MmOe~y@V4R~gyU#h)T)CCuTR`GKKlZoK(r=aM$pA{$) zS`>L9$Q+QJ>bpew`pom;0fX}ZD>#XAG?(IbzL9Ii*tI z9qqDfcA4g*%(>VfbEdxGcxhrC+c-KA^z<@y%S%hah&)ih4JxGhqKL$?-4GPO=zH2S z)dl8@mqf}9Vd_n@#uKWodg~;1)`FilBT(=AoTDom@{9egod~cpGaAc$5$M7Fjr)23 z+P2vQHQ=u|{;5lQ;?;IVkG8SrBw{U!i_fK1f1csDL7)Dj6~r{uGrGPN{?&1Vv4x~4 z==h*|Q;F&#k1;Wj7y?kef-fj+YS%3_`PckX*1&T)N>4}_#fZQI2^sTI-Uq!@*2X$z zcST-->RXmipZLYDuJ~LoO=w_iF+8t*W}F22qu(cuYG42YmUBZ?L(BXs$j$QNbNuSb z|8hSUVWd~cNW>pC9BHLz8_7Fg$h_n+u8x^o!TW}^Mfq6uj+ptfa52wt1UsZSekb#S z_dfWt#tT}Zlgqqqt^sD*d~EnH_>`h+=Cn~ow7x#pWuNpAH%cSUs6-F3gGE#f~< zyIXPYScibkvDF%1=Zx}(uGW#1^TY2hB5(TZ87*xd<;Vi7-l-SwAL9fHXLQyzn!!3LP0V*(T#+;s7SMI*{PbWjxH>drHlJ*%jdcYIyeJa8r zGS-fzl5+g{>BDAoJL?3=JnQa})8S>J-WV8M8zlAL3IeG-Q9g)cj&g_o==&ty_lbMa zvNzfaFGHwBBqlYSfLZrP?w9bp{4J++*m|MtqPKVPyzA4ma|TxUG&%dJ6hNrW&O_QO zp^I6SZ+&n7X1)Yqxn06*{7K*Z%+ibWmM1cyidQ1q|8CBA*DGpz`y>fJh!(L0bZA1M z)2MAn<6exWc#;tc>V9?4BCDqy&G!T#dYM#|gjfR!sF-;5#Ov)_%_&S6xJ53wg_8`S zkj(-H{#Ep>)pbDtXj`f=w!dUxSg@xA(rcDMy&%$Ta3aFH?yXfCTJg=RlflP0`F!ie zii=3^V#!ha_X80(MKYv>Pl*a#I|J6jPsl>fk#`&);9lmZp9j!_K7hLQwJ+Ia7wHAL zcGZg46Wg7dgP3|RIz@tV1M>kk6gg)4IAaFUOMW5uC;F9*v%W z^+e^GCt9>OG<)zag0=w4g0?g&hAjiGOEl3%NTWO;$DJ8>;Bzf3;UpCZ?{e7%&xaEZ z`w@(S`We~g3~xaGN#abFTXlswT-P_CUt4+n?-PbW-Iaf)yHosb)V-V0E#(9E;A9z2 zEH%gmi)=RV&460RT@ZYu;uN$aq43noK6L9-h;GCX!LX>#Bhp{v$ z<;E>?e>l=o>}!^1gyX#!bw>AKll>%qZokKr5#%tCC?>;oar7oq6#RDncdbziNA)V3 zNs%QcuJ3|XD7^{z;|-7hF{=~#Hb50~bt0IAvak3QL9ls1YnJ8dRnZyEWesEGG7A=q zz9|fA%#S}W16e@R;PFg zqs`*UFmRjxvW64YMYMb?e%HWK>zX8u+x!IB#`~Eox3q!BERrE>4D)G1rl#B)bsk?a z^WAszE6qx%TlHml7c@|MIU=QZKgMv<_G*@I{P&3S5J`9eU-7v0k1Un|1jNPjdxO!l z>5Se<$J|;bZzOpx%#I?M@1tE{_49YTvkbAHCdv%#3mg{aHkrQbtrjfc@SZ4Z1$rkq zIlUI(IdkU{KW=q0uZ2#aJrFm=H`f30h_xXvV-(1ADQhU6{iyGURSRJ5SI+~;NI+T_ zgmqI6K;0QDM?pE(j!GE_0yX!LgO9LhlR(C0iR9R%cy)ik!)fn{IWRpW3dj-jX`(09 z(3X&~bCv`WCGF>hz)0`B(({nTRi&oyWCLF8H!A+ZK!lHCLR;tkLo2*KdC8t#xlcsh z9i}wokacD)^Gw2*8S>5NeWVNfdk*tHf+h8vaef;#aChB0=M)Ijs{bwww9^?y1~z?) zW|U`!5q;Zqm@YC62bVfE<4SB;vRZC7z@qCipX?DJLfmi>`vFKD9OrU?y7nlZU;48G zsC=tE{qmtX;A7E-D+KM>1M)|}S=f0sPs89(OU2G8$w4kAZ+%y9vK zqu5V1OCB|}%D#BrB1;{8l`O(=!bQ0pa!(sVB6CHNHgKYtKb6~N;9~i9ZS(n+UUc>) zAw&^3csAT*k9S4A<=tOp1-DCra$6E|%ejUXL>o@M zsB`VpL~zPZb45IY(tV7yh`qO<#Q`-N+T#m{Kjix;UcP(GgGOGR8JhDhCe_Ia;6?z6z(BH!qt+mmb9*_*z#qJ znCJQ%Cy~~B3{vrD&Bno2(Y@;!mvA`LFn!BfT5g-CEy<>zV=Q*YD*`uV&cFNV`G6yX z^FFGAbkG90Ji|7ki6wchOHiM13&ZdtBJHY%$=`!VR0FyEi!)H+qd0qePbJ@K_ZX`M zud8n}b9>}ckt}0#!C4V42GNn<4Si6OZR+&7sB+90Dz(H06;s9uDi~hz;ZSPN#yPj! zq2Kk%vB~!tpHn2=thz^1VFsX_aM5XS{=mzzyBx~Uyd3)rSgo>tAj1htFg(yyqRz8u zuN+BQfBX|#=*ukH6-{hqN|a+~jP=5;t2ai{kn@h_JH`EXZKm&(nzR{F`E8}-_FeuG zNO`h8DffS~{e~NsH@gf_O7E$qHn|}2P=uute0k?_Rrp*`Y0Sio4rATJZYw*Ltbz(n zm>s1rD)Q1+jPc(~&6$V=7Y?~gl~OwW)dlZz$w=$>?}I`!MI@}-5XK^}y;~fn1V!5V zd`4E5?-B;P(sMPP(qLfBa(%9U6>21~cIV}oaVKtXj+}9bI!i}8SjV|XG`kP|NhcW3 zmE%Y-G@?&==5Sk}RAP=J4Nu}a{3Fh_goBTkp6bI$Kh9t-opEr)Sw|3QG5esGHof_7 zx-7Pc^ZY4TvUZMBciNHMt_ZtC2i|d=G^28>OOEQLbYJI%jFUl{&Py9-zByMkMzNC( zP;ku<;%tSkbXOJQf(zZ~l;{)@fNFU;>rUtQ1vlY#y=csltdzfuZv{>0y^wX{ijG9J z7#yn1i)fcGEnC0KU3m?r$mB3cql~MNK)sIo%|`7#X?zqku_Y>rBs4j2<}{RI%>AXa zb#q$$yNb#n08o=ipn@y7wWcLaJE)g5pR4w~FJ5lccU=eWi4YyhT+)v;w6|*mtAQ2N zr@S;ws=tD%A2?DmvZ}T0hefTYsLoc`E9NjLh0U5ybTmLx1VB0tochlp20zAs~UfeciDqh*X%L%!QaOgY&`7`BR=3*FClL-Gf9h}mJxs&ee}1J)N~L> zv2#OeF)u-~e>^6CYswk-#Xetp!@U=ld#S{UGH$h-8!$%9$&Aq0f!JL}>sb00J~L}+ z6g_OQWa8&ersm1K3|dES{IN-Ff-dI|=@|>E7_t0zLubaHDv8Z0T${e;htUx8BYdmn z(N1^H3l&pwlvt!R0MD3IApDn~1G5I4_Quf)PbbX>WH;zoZfyq`%w}xX3~NXkigFE5 z6utvVLEj~B>jxPstp%Vu;i<~x>)NMy)96WG#d&ZzkNLpGnr-e|{=Vk;Bd4RtgYzrN zpJ4Z`>)oIq+>ifciHWB8*^ivY(L{55eVzl#4R(ISiP=R?1;A>x@Z=(Z?ee)Q;A_nU znQrt7cYIwII!fYQbq`R4?enAAiE`+AtUa{XAIkCjbVYiACJ1N}5!cCd12`DdBN$Om zUDiGm?C^^*imeMxkSG0>w>mA+07>gLU_YwWE(4W*_!uf&M^GAeux14@9vF(0LF@Sh z_71j3tvC%5&G19HPifpQ9S5MIb#O#r;0#;sGsYsP{+G@Z+PClYpC+?Sv+sYi|29_` zMVY0l`Udq*JS|eb)>xwhYOL(%F=L5}g51htpc76#NDMd1`)ryeu=oV?WBl}JM|F=O zUGvV=1c_fFaYrFa{AQ#_i*IO<9Vl)N>>hlo47dHzZ=SkkP0)FO;1~3L4msb_4_JRawtmgs=^Y%d{2K06^BM z_uBytCs)BBQOQ5T)2bzI&KIWb$QJPT#aeg&#%{rj1hD54u%X0+!xYSHGy)`5d4HIS zP7VqNK2H2k>+Uq&dJLtvm1N{l#TT{>YeD}8;aoUSv@c-AW`IA~Y~X+VDYdq}A)vQtqX#U8CUCGyi+B2HJ zL0UNTMV^6m5lg4G%+f`1w0FZ>-t4L7(CK83J4e~vA+raT%mS4|1f+;T`tWrxNsy(9lO!9Nus6vfTP!CSxVC}jGhpTGEBV`Onk+DHH}8Kh2vYDM2HyUpNoT zxo~*#qp{R+FKZ%&ySU{+7ks^g>9yk54Rlc<&UG**vv(P~3{d^!50&5IR9zCJ(Qfj8 z0-@2R+Sxm_8Xd4)g~cgcgWz~@Qn2DVH)gQ_7GqhQDSrfilQpl;+pj@3Y3RL<4Wa_J z6f8RCxe)4Mjw1{;lS+N0_wJD)C7e6;;e^!b8F^wYAh;U1uzLfdo(!9hUlZxu^SEWx ztno$mb5Oc*bmT8risIP-=|TW-0k5#rF1PhAE(=@9uqpo-dz3eaZzL|a4Voh*lJJDW za@!9RA_mqcEuup4scKy19kzrAj_r&ZSh9-3PN z2Wi7k{YS{Qz3*Rd-5=<5kkVkx{4BG~^(Vb?o+wF^j&gMQxOEn3kqZ}1^QcF!BB;Rs ze3YT<_4W{`sJT4q`i7aK?l&o_P8S{!1Jmxb&jYx2ln|tKhyw7{4%^(@x9^uS4wJaC0-hjF9 zK3<$8^*s1Dh0OuDw=0Zmijo!qTdSTo2)6W1-sN7AeaoXpYjgHp-glC(6ZL;(0^J*E zM3gnSKY!dMf0smgpx(otI?P~U8#fDTA2VDvQ-{?;c(3tkXV-H;I9Ih?@y_Mp4v0T~ z$RjO9-)sa7=p#_t16*eUqd>hc-nC-j4Sy|dW|;E)M^v>Q%&CO4$Vy?HCxq(w_<6#q z&yoK~H0t*tJa1DLI{xq0TQ?l94{}qrOEH_~s443PLiK&>5FtRr?Y^xEUcNE(fZ%*i zxPTZfytDkLx`SP&WP^PM1L)6hHOwO2kNUc{_k)zL1!jdJ*=0UaFFI<5Pyv^jkJb&o z;S)@Fw$pl5qdD-Q&aE9QlNjxYcOn98S^j!d2APnKL)rW%7}Q5d+p8`0_NMZXgQQ2? zVvA)13{M?M0_bnXwWs-ue) zk!E!{8bFZKhrToU_}`mRFg1C#@F{T8iR5Q3x)bkP+;;zSvl0)z#FjLtT{+ScI&7_C z9zm!EWAm(0^#vN{(%Y(otdD1cUcCmj7tL=w-~6vk)Lc>nN5r00eXtJ^#E+-^4oY-_ zGpJUKO-$6516s*?bWh$tU$=to{*O!sBfC<9w(YOcM5M30WzZf=>4oT^9ygAv!WYy;PHy?q4z3!*$(1U5^wNO(HOqt4cpPX5*@pT3hcf z7izk=5EEQqkkzQ5PV3uA&|L6NMNOZ#FE%9!lxdDyNMa{vpgjF-y$ z2Nh@$tL6%<1@5b2k6T78#}}4b=iSGuYv=rEZ(0X==3~w3BI!bl-tYjZc)IdHAM9i# zj$dLY%xqKwv}3sLd;kW4Y&yom{>CLJ&2VBc^phO@57*jDv7uEdM?Gy@&4N5?BL+b| zuI*!>yz_FrN2CRGzxw!f>+Fz==b@DoN-48mXrbN?A$ zNE+IJt{P%DbfTInTC(cy2Vk75ivZ?~80!ZHV_*rq)Ff@2zp^VWnKSyNNxfhU>jy|W(n8m4#$dw3qU81;uv_2_6_EK)SAJDT zmy711b#?E$9n{zE*anxbrm){yO zw2B-lv1qQ%{d}Qf&VaRd>szZMqhL`*nhQEfq`)`f9wDl*<+mP?XTo)*_7Q-H#uUv& z#_b@bMb8%{s@W|K+(?MIah5+{_WIXn?ER(&0}pspYbp4?&6@ zxP@oGo&EdWze*JW85AL6K$L(GLcl&O)K&qRhmdGxc$P^BgUl!@ zh9N<~Fb@hOAVZK~B81_$Z@|9y{r%Z~%IUf1-kiPnT5GS}{iH~;5v{#5O)BznEV8eA z)pGBx7)3n;?{}fM#Rso*RV`P*Oy;?X2#$3d>kd{=t@D7e0dtychdjvbMMb^A7U*j< z2`tsF$81ym!0MypA`G%0BFK9Bd^UKi1S?`a<);ZRaE?^wooaw0Q@uXO=$<~ED^cfH zc8Klh5f|YlBoOP&EyNiC4N_wt!i}TsB&z_X4Xd!}Cx@G?-W&RG{$c#9esSF(lhq|#v1-zl&?de}A z1wFjq^{)RW&_=2H7T(%T%KSL!F4+nz!;0PQ!>`kE_sn5phR64f8p(}-TMbXix`Lh2 z;o!-FEzTF%h{72VN zPMMh^2-%fL|T^Q#JYuJa5zN8g=LXyJ5VoRU(<8ugHW z(p3HSeASS*vwMM)3(=O@w7NrN^R87Ru)03c&XG!dk+uWBJzx-8!Vn-_X@5aCq@Zdd zDrm!^ZZC#4jGHVOr%0Qnwwa75E)98~c5h>Q5(;y|5G>3-o&d_u7)R>uMpv@bz6+gdt*^EV-|1{5u7Sqx?gB;0QrdD>knSN>LQ%H3+va^fveHh@ zMA+@jTtr*{Rc*=dw`x<5jJm_7b{@J~v#}{3541bshqX39ZU1@Ca!6kZ#Rr$__3id_#kYk{#2>I`&xd5n`4YZ@!4z1Xj ze0?s-{KUBgJaI4QZBS<@fz?kf(C`e1>gxUb=Jfif@SO_i2s|!SXXpDjBkv4YJq5fS zbc+IBn1Ddr!R}Qq(Zjk?Qz5IIOPX$m;74B5)|;-Yjz5)&MNG0jU!qLHrfv}^*QO6# zlb+u+6}G*$goCpxPF5my%gX3S-XKn{~qXKqc4IY+A zlblUem;NcJRJ;X$c7|^yP>+o61!CXB?9kQcaLOrNJ{|eg{XzC%h>sH=Z6my)&QwGD z1ph?D6fthAnSeU>_#{8A&z;ES`ufFpA4KG{>o=+Xi{CQ~jTE3k!DE~J_62J)tCKr! zEKAN-X20<2 ze^#Hro->ANYaZSqwngaY3Z)>9k_t9znYx~<>c4A4UaZd^gNZmzl?|IQ2m+v@DX(uY5vkgzHMwJfUArk zRm-_1^y;t0WWv+L$yJ7wDw)E*XuwpiIAp3%p98mBir%2+Y7+~M@pqJD`ti*#g)_@<5(4G(5 z=sly#(kcE`)1%s(ua(cqn=Cgh&Ef-6W_tStW#higd+No(deV2w zfagE;HoAT4bd|LPeT(ZOz8}yORE($67+Cr=Z!RNqaM{3sT%5vvTqjN+@FEL^VSX4u zAdyg!UP?>g>Q4<|9J8t&@@twRKp&?QO_wfv z%v27B{hZ#~$0r2P6-w-1^(5*csGiS)Ec}tkp?w^z)lQd2+%h|D6|6yo;!t)WZ0{gG z?XjDJZgaTYE-CKPtb5l?wAN;{SI@nb$MwuiyH_|BPlc(Vy@T}q1-vX$n{hCZ1+zzi zl%D%QG^@HrI!z}N1u>RWM^vV6-6^3roj|Q}1CA-9fBSSB8*qnNi>xsEJpYijs|-O{4nYssIblr)3Sp`%_C zfMea}2-%dwA#al9cRGktVvUuUtHzv#@V{3ZTTIxvWm`SmXLJA40*f^qjK|eMG5X=O z2*@5;=PG}u$`t)hg%oDIJ}Mm3K|{;M3_U!7#(eJ;t4s*3cbK%ilF zYbjRoIs4_?O%2tjaWzFoNU$y3s9u?hOIKgDCz^9e$Xb7(@>w!EIVGZ4!`e}e#oRI9 z=DxUxD(3N$iXkIqrQnIoS*iw!^&L1H-SqGMI{!N#ZAe98Rr#Z1z5O=Me`q-6jx8gd z0x`m=9Q@5Z(k{Ar6A|`<(VTi8-~Aow#wSf5^no_3ijvwVAf5h)SH`=atM>n0-%m0O zTLBs6IAQ8XBUdmB+plTy2ZLXyKyr?oK%_a??h(JNc79p(dSLgIvH#4|Jr4m(4hZjw-r?aP$uD``uzh)R|hrbu>#-iJZN2)i~KmBS>kKas~ zSdP`e+Aw=lD^#q_x7;Mx3@;@WUVjNksga@T#X6(*F$D_cwgDrPgg) z)arO`h-~ee&Z9pxFmJzn#Fii>8QuALR+HLZtkVFs_$G#PK79-M$;Eoat1%M?`M}G= zx@^{xg6sK4|Ef(1BpEkreuT~Yi>Em+TQ^R?C>XF>M5Qh~HqCvhmBb$oqX(THqEEaF6{@zsB>Ty7Mq+))0qdJl)K#^b zh7KClC2W+NIH~A5M{*+Sa3Yg@qbjV$6*gipI2`{#=a1I;)k}RAAI>b=I_*mf?lI19 ztj`J3(e!uWMjf8qeVPYuKzC_iZ6?ZENYTZ^(VVmIXnC3swUc3HT~T-G7F(xF$)eqI z+c|Id$(|Z@TL@(Gw#v-7OxNaq(%IhP-f&IefC{usq)l^H_z=Pe;=Q%W|97U2#|*}*{1f~^C!WU#rss~ zr`9V&fse321nWjTyiNE{uOh?l?AVCxlYa-ZtMZwS3MTi`{+U%|`F{BkG1n53VK>IJ zNw6)+GQG*YMKZPLSt0jYGGNZMHd9SeX$?E|iTr7!IO&+Ny$k~aak$hjXEw6D73c%K zEF`smOi$!7sn*OIRKs>l`3FvI1aF3YX1$s@QMnQgy|# z#2G;TT$N2Xs!nSooPBa0#M|=k>J~88eW9S)vtrjg^jiayDHm>mdbo%EC`!KPnaTc0 z{ZQYF+6sDx+^a2(mD6-0q|XN0{Nf?8Vi$fE-eROdrwa1BN*e8zUw@8rr2^7e^5Q?M zm?M&WSLKf&Si?}V1~Y-SpR#&%iR+JCdz^nx`eSd0%dDgA%9r$MXn5IIDxmU8yoWRT?hfpAUSCI&^_=VoKNrL~ z!?VgHf)3uJq;wY~(~tCs1<6v7l%X)=vLEL?DUdvAje@?X zODn!t%p8dJY*ul+=H&Vh{nt;W z_UAVWdR`dg@K-Dxh!x)c%tYG$|G9og0`@`}cMIoEQx8$rsT}~l|6WDRuFUlw{=vdk z>DV)psef%gkFCxZKdN+LR9v!R-!qMPKYg2cfJIe(G<*i{8l*)$ISE3~8vMkzuampy zeaiuFR;`{Ur!Id}pDAtC6U%!vKH;#2C`*~zYv1HVEYoM?YH4ut>SD!j;d-kW42y7>`ETp)Ntms+i!WS%J;Aha!eQPb7Vud;@@Ic8>zYQ z!XF^;GfuG-=6>NbgQfU-od}1VsKe`38gdabu2kf)l8g`h3O^&<*~D_~HtW2o+K#vf zI@ZLTg2kYQox<(0Mq%TJg^KLQhUFPUDcH_5cpUTOsO{AKenqLfhVbq~h%w_ApXIN| ziP!HwUy&#fArA#gv4d(U(=Ql~3Vxi#3VHc3;+G2lkSO_MHP7mL?eNA=28~TFH+RLU zVa?w!BOguc^|OQWd8`wqEQmPhOb70Hr_<4h)+Xa1lCV2DjD}xn&63_r1sHGg&0hA> ztmkdY(Ldzz(@$~G&lw1oi#OU+Z%<{-=5|$fZq(}#3XgcPB7@ve9uYW?ga#beF<=;R zT)NB>m~<8#>E_6(^VSBR&g4WpPQ+lB7qnM}jyur-M)51qElEioGAFE-pO+=Y!xcz7 zH4Hv#m{XukN|a{-8h7|n;|AGAIJz(tcj4cYQ)6F?8W$*Ya^&CkV+F-8hD@U6-GLE+ z#$wpt2|Wr>jc5P=icx2Lcm+1~kteL?i}{^bO{quyzWwle*2MhkNXSFR^% zqQ9PIM=XAN);!G?P4FX?tKjH3>qp0p8tutd`j2?ivF2!QBE~Vf>w*N$W>F8<@}b)U z5)R2?Mz6wSSI_mjp|2GV4dZ@%-MR|@yxM*uSjM(ju_OzB3Q(+z!#;Wkpx0*VuhYgh zX#&+jP~*|%MdDLaIzYpPZnS=6`5O1w?czfcJ-u)WW|nxk(;k5|Ro*o)xE)aTZ9GN< zLN4~zRQ~RUj)Vi z$RdruuT1RlQ0K3$Ow7AW)*zPuJV}T*jer|AgR)$gDCfX6?FBY&nk`)xTdKSPyl#;l zGz4xKFzcPTBWu=ZG2poej+yY6D3kNQ-@%2mtI zPmY;EZz`Qtg&9UfT}sgdzr7#=W|k*ut!Bqk7H`V8zaUd0mX=d+2n~Xu=s$Dbp1)0j z8}`zhaL3F;l(VzxL{Kkyoe`=-!hRPKbHTZ!gKI`X;0NvKJz_z|pQy^3#@Gj)MGGG+ zh`aoHH=-BmMvRyL} zSeeiDocwqwbNThq375KLQ%#IfELNI9k_jU~Vy9}kC-{w%V`fW@Z_+>zl47Pq3{Fe- z-{u-Neq`+2(q_aKvUq_^w_Cl;|5MZ5nii!b!LJfHWu$7J6+Own4TKQ_=o|P9XhY=4 z@zaDOZK?QG{*7pI{9L%;A0wtil}(*|O6Z~^c^9HLSG9KgLsEZGF}K6P)z2(FSZbeT z#}>QvAg|Cd6A7>#wU|*>WJ|6qSh!A??`|R<+5Fgy&mm5H(y3j}tBn3q4@Wo-@wzJ=Ng#>U9%(4K*=+dbZ6KNwGb#ljBOleGTLq3-&{vc=~Bk zA27GwNDSmz4H!bM{+fT7Bi4W=R4w~nSuzR_7hC9MR3jjhtz;3=SD6F6NFiyNd$2)J zqsPvkYFd~-Lq2eK(OFl2>=Y}`nEY@q>!@0oCm&fjtWbcTYKUksaTjt{dl_;Zh2fh2j_E^ zW&loSw%GL~a{Yd{A9cHefc|HV7isdt-PgX}Vl(0zytj7E#?0MzA`6gz^}>5qDW`dM z3CQJA(-i8j3%6c;*4<1XDNBSrt6397w09Sxscq|%q}UN)?Shozq-<+C3$w-a$%(qH znE?GGF$WRw-Cn>tcJx6Bt_~JH1B|SK;JzAf??0l3z>&?{hXp%1v@ox?*R|#8?zmUg z1lgsvw3yk9c5Ba0UtV_p7#g3d)Fd(o)f*b5T>Bndugoa9K;B%L(?Kjs?@<^_M+BVx7)k_>C8 z+1dbhAF$Fk%b5Sk=$A+X1bHVE?_|GzO>qeIY3)sXq+%T!1+c}$9^lVI;db$fH&|+B z6q>p;)_5C;f3zjECuUM|-KCHh=xv4=)`jxflmpk}6~wJfx>Jza`z&-X0-n zK05idCbH7coAa}Z@v#rOQy`mr6*X+(94pC4KgT4V4_jYzG|$=WAIirarvfg^)I6*9 z^y6?zRZBy+t~%?Lk6(F}KvRLF|273dgZY0g7=dd<1Y;7`gbP}Ui9G;tI~)zybfyxA zr^X3@a-!9i8q~koX8LX=?&*^6!@Q=P>1@s&ze>eSS z-#pe6ApEqph&xH-^;Zu-aE5-5+3uYD&O~Za2ipMGfWQ9jmxHFGr2Ot1OG`tE;W=YA z_{eJ@KPuxV;hQTifY(D$&UsHai}NL68$c+92dW>&t%Pin(=^EQI=O5 z=u+4@3!N}1M-n3^1=39)!oeQ=COKYt6GO=690BnH7?B|-;}TO24M-FgMr|r@fssi` zYB`Qr&84&ZYER;aGfIoni3VN-X8eECf64dPmOr|}e=l`&*Gkpk)wRmd-=x-YgU02% z>D^hF{;~X`Pb=Dr#(gLK7iU+j%Rk-{d}@F5BDC(Lzgb4tPecya_YpXxZj=<%-66N@ zQFEs{{%Fr%VLZJg%l0;hH|9`c%UU|Px7NGEKg)KcBK9p9M%r-%L80Q_teA90xfcP1 zPEv{m%f5xC8BUcT^^4Q|U}&^~v#a|}wIjYzOegp8iavLdsJ?WvD7t&K5RvMzj*q+2i}1!5 zsIz0E3iMtD(5ex0K6cS6K8IF>(J^Uj#)4x|*t<;)dhxhfWQX}HmGNRbTCHurbLlw5 z=g=WXOv6yq@Y;?7>#K&lq>ZBGL&BO?dt$Zdh6Q=Tn$ID2tXE-@T$oh`{pBEjJx>^K z{51)$r^mPAW05ZGyU@v%K@;uO+B9vE62_~RmlkdpeM)_PR@fRISlL!u*C!|+Cp3dy zKV|jj+qD@amhZLbZ78U|(dQVCss-4)@G{1OrmTeet>G6RTlc>u;k3q9Hs zNh#H)T-7TmLbjAXf7Ht|u@5>Yd=_fxSfooV&I$5A0LI%#x2s6&aU^pg`YUqO*JDbpHf0CmA|8(u9%!pts)4WL zM|St+39z7bfHug4dFC>1my|HqA*OWvA&gs4Mz=pn$AS&;Rl{P2uysA^UVasKiqAV& z$ph1MI?_azHtT<5ef&Yf?z3hp-dA5vvDLj%1$si5A+&;wZSO zuLo8Sma^2x{MI8cLW{J?enFJ-$jg#{0=Wc^4qoqGr7!QxZ1pNlWapdbxT8H&kvznNCE7MnfXZ8PKd1NY?}TWFj*dg)YRA9UU1 zb?~kSlD`7uzPTea2Z~#uvj5*e>77V63pGg|Ms1$pxkkvX)Ola=R|qg%5B*qkAT4%? z?Wm+PRbz69b@MOAF;^=GOGL-#5wK)qBPT0GqwVjMLbpu3s|}aKB9;RGv&8%|lfgiX zM*xJpyA9=#h5h*uyL#T&7MX{mC~4ZP*VE^wC;v1{nVeM$clgJ?l;BUKh2^S8gSM{* z(~C76pkY3xDq;uEjl@mD6H-$;A(F_+bJhpk{I|aOq0ndd_>kjN^oxIDPHj2|cCeL! zE40t6I3ktOq#)OF+C(x3$9{ZMgQ}0bBe+`ZC!s;oejBnxdGD+9x0#Z{j+o`$O?$SFY zX!8hO#_~7l5v!s4?)F8py2wz4On8aZ$P$avII7_Qq*g;fIUn{%%;+sD>?6AS`mxQA(flsLgc>hdBH45j6VC&qy1RuiA&EA! zslm{1lsgVh+^7ERc4k7@kNW0h}>#3uDZd$Ms%`}AQM9#U~I|W67ty8WBX55UkAm5R9 zt$p)|>ysT*kLi|+ zgGisZ+|)5{3^wBbmeLCuE@*O|#)qaP%p3B2S;>E0u$9moMxyt6ML74Rn)A(@Z`P7f zZR+!LaS?w#A9AFV zkg)>eVA`tmG&1Dy%B*%-ClIq6kx#PDpOKWsxLU0U<2~n+M4e0dZL15IyhtRpBiQMw zB;*1=)HzwaQ2oU&)ZCF-Tl(iJz!u{yuwmZNp315Lw#crV_gMBxeDJ@v5K7H5SyT5h z1efw;Q(4Rgt^+NS+SjB;zW0HN&G@!%T}E$rdmLbn1R5LMH3wTvGUbGZGZ?G!3jbdo zlGvAu?Z9;+U#^e-u-sRZq!^%zKT@5Rz}3?>xh^$w%D~uXx|c9P+3QDmjWiZNazgv8 z{VVvNwcgiH$xJ`3R*n4#GH4*3?qdl^r!h1Ch5mwE4Ghd!Jth97WT_^PjlU}F`a6=f zE$ziBHOkDHh7)#$B#TaH5pF2ehNpI!Bcb1x1o&XbTIE?j%xh|Gi2=LMblHgfH!vBb z&VWgQEIAQCJx`j?A`YLKDEbDgWKmJ6G$&P0LXRR;0BLm}8 z7r5javkkS}V%|LCjXs~fPSq$1Y+4Ml{QaRutkT$Lca>1jlxQMl&fK}Gl_Lew8$lJU zJRo#|8?ux?R59Cqn->(9LkME6aWPAevVhTV|RZ4&Hp` z`U<>Ub1K6!oNBBf)Fel6p@?(~>qUf||4tudr zZ>XhJ##PDxou0w3!v~|LNOEGQeyHnXeOzrqUMdRoz27M^$r?ezH#|2AP7v@l=;n%- z{_y^|*vGZ&Zig{ZlG+RmF-0Z{xTS()>=pR^oqTrB)RS>;6j)C8&Z^Y7iuDL6yL(5r zux@Dp>@Q@%*Tcp~JEN5Jma%}P{$1pGFH?h^x%`QDO2Waza);mQ(=sdbMG!igo>L4} z{MU<5gwK)pA%jir1q6b9ocCs}pPk3 zxLX(Gsn)~bDA;tX_3rKrUHwaz>^KCv&tumvg@6&-GYk`rh+Z>x*RPy z?vPxsH~1Bi0%{q1F5R|=cj&cYEUvsq;pm5-?y&*(pA_fa&Md`WZR<|V)3E+)O#f6S zKo#dsstpq7Y!q6n!u7^O)t^49GZ^$Sk(LK-9dbrJ(ymk0YNTVDemCRZkvo?7}qsXy417+mwCqL3)m|yj$nnWq>uh?Hhy0u4r+u%grymd|R_boo+PoS_FV=S~S7iJ=t~E!)(5gjx+6X(Oca2;-~3?sfpFR zN0~NAK7dq~QQPOzD6(rX635X>+yerrXRRBrRB|^%Z3?MCcueEO)F-y|wM0B_wTI{w z);{Vh94K3e818aYAG_Mtlbok%{})Uk`Jc0o1~)lBrEjMt*J~%}-Rd>rViTV4)WtP} z*kr{dv@&@W)1NH=t#Di??8l2IgyYD9V{YmY3Sq&&Lt!S_%NV@sQRn^MKWIz~45N-+ zMdWjTFV|dm*R628Xw&0AgK_Ppd{1=IWe;@GQ{w@{%9O3WE=W<2FnI_}=9t?*I%x!# z%%M}_hK*-!N_Q68BB&u!(AUVmTKr!898Rw0z}a`YDA};Xzvz<;x-V!VY+fQXUiSx- zfpyB$%Cp0Ua85@65*mPuVx}Gj4=&TYQZ7qgDp)9Q#ClPHecP(SV1A=B>amQOJqKB6 z;J*vKx<^$(UZm76RPsIHcakoPe=rBt*SRO;xEzShb!}s@kMkCT7|JN$QGAng{tJIGNFl(9URk9RpCsuZG*=eTQ+;mc2=4|&HYCI zW~x|uIAe&NI9-5oAzsIlrxf!iDFH>PhrfNA9sN@23PW_vN>-b3}R?5k$`4!O&!KIx+-0>c5|P zYL#K=#RZ>ZePBrbj;Iutaqq%1J9WWSHQ--g#IdWxC>$Q9(u z$w=yalZjDmS!fIednjT(KCjm;?a-MotLM-N?^LZ$skL>uquQ1Z+`H#`wc57yn;dPl z(O+5SCsdQ5u+zn%+U!cA4&EyUSOJ;3^t>n?Gkf>o#K@I6daLKmr0lEPLMScM2QZ&VVye+kj{5V>F;G}zm#DbEjyv1-;xg`(hXpZdD>3z&+cY#Ab@j!bcE1od8@WDE4x;m#KX^>E+Jmtccp zz|X|wf0$YjHa*ws0}Bg6^P6}zti}8?@;bi+tJPD9pLW<#(?+xTe{6t|NMuc`=j~sB znN`t|7!UuULxOWtV1(c83=Y5^17&hMo7<#{&wF3-mTpk zlM&bgLPz=(KdfT@j&6iKx~Ovy9F4sO`=rf2-1FBWtQilk5H6w>bSu1l+mc$-&mVfQ zhI}EU?GaKp1zC0Hc5v-di?0hMz@MZHm8>Gjpb{5t-M~fu*WUaUaiFN^HboMcH64K{ zV@|~(Z^o9W2e>hFhr1Ry0iT*R_-`Evm1yg*;OP>@m^uSE9opty8qaWQ4YxO3zc_Yl z+W!q#DM%kwBhrLJj>UFk*<6Kx1 zttVQpKE025YoK8Fdc3=L5IGwcE;tiaKp%+gjtFaAXj}Y0k&3Q2v}G(&j5qF$R$gS) z%5M^WMQyUcKr7RkAf42b`9iRbgV7XA6QL zY=d`CSZsSaIw5pka(A5SE9IuA3*2V=+oy+Lx6~~#O_V7=Kc=TXZ_*cDGMljmi=SC9 zD9To3eKQ1L!;M)Xu!R~?26luF>eNYcZ2qi5JpQaO}{;bh>%rf_X1W0+}R^ccP+I- z#mOsTC~+ksxqj`$Pes!+)$-p6_Z*rlz60}#K%q@ZAg3kP>JvN*lWk-%in{q)Wuwnw zQlhsb3|roUo{miz@`E8olCtIs;-fyzzJC1Ox1r-US~AymqF(?s7_z+<*_UOn3u9wn z2!eH}QxgU|Tpl|%VyfYq+uCakOb7xDhV!bDysJ}!ez5DUNL$!WWx8)3xnf2ME7o4j zhz)`PWTr7!>kTXE8oe1r18)NIm{{}XW#lpS4R@hJ)s(-47<&|amh+1w*kByc5Ei}u zk%F}!&6-|o9t!1}M`Qb+T4;9kFrau8LF8A9AhKTi-c5UQvf0fljd1}a?wDKKP>-XT zGWK|%i6<%${RGv1_=7p3NbC@A1WaTxTUMyH*zX!-F}!n-^&bu8dA{l5HOS!R zl&Hs>kc27=@P_r3;t?Y0jf91bzAkn1W0vwjRx6l*PHk{>>2ZDmXBR7o-;9J9Z$Z0z ze8*k^KSsvnUdRHdWjZbhcnKOpu6-KA>*}YLh$7{ik))q8t%ptXe2R{G0avI3ya-}u zKXSm>cnEx6r6#!eK}_JX-d>QeuP>2vSgFMglTx<`oZ8kM=w-kxvqTv<2~Pv$-X(Zx zr-v-|&SAx4N^+-Qk|Vwksy-@gqW{3ggCJzh-wy&weNc8?>1nV5X9TUDyi4dv_4&bo z#OFc3x86dava595D|V4!0^H8iQ|dAPL<7#fI`+mxJb^Ssqvi=KsRQ100Rnn<*PLwY z9jmpMVZZJqEpJhS9E0&btSUT)#tmwxR_MDp6#jh(zt)i&Hs7?|;r_*KJz`-L7Lg4> z7ic|0p9f*9%7?Ie5Sz)Cf;?qTZ&J}XB8G+otb@|#!q5j=uOsdkPqo>5@R0y?ny>v) zEg7-(o=N9CKw3#1<{>xK;O{pMiCF>jbLnfF%_0gPh$ELcX- zLy+6*b2aLkl*f14QN-*8$@lO%aDGl=>R_~+EQtcY5@ICOJ#Z;(wwydExQhy2A01EjJ66r=QSPD_(a;-^TtOy{+Y9JY)aWy7}g# z)9$`p1Kur!+207;v6B}vZlhHlM~}(ev{=4#E>gb-5*T%1JFOB)9g+{rVovL3A^X2B zg<{3eUxbeUYo38%y&r>t(--OL5od<88Tv*OQVr~X1LZsuC~PWKR?nvp>Nw|tu24lr z(;kW2hDyk;qk@7g9qYxqfe>qw_(})&kLBOAfNwNbLP@p0&8*)^D9&W9ruMwJRU-*S zWEZ>tAo=nVjo zMVR+%n2wbit~A*&kag*RzC95Y#umKW$={nbCq|Kpy#@Wrs$D>hiM7EuFL};>-S< zR477QmNOrTJ>;ug`gsvg%k5B2^B43YgFwJmm)^rnY?aitP0YGGh&tET&>#0{E~y$T z1Oz)XLk-3`)}MC&{t-;qrRn0yfLYxo^+7GFArj?;zv};EHDI|4Q@SbSR}o&B@KJe% zqF)xPQRxCj)D@(1K)w}QMlP#O7qMXNo-@x?G0)?a0kMGO2c1lE*!Qf_BilxF_^)g@ z(?FYExpF`f)!W|Ozu>2+i)vW{G3Mj@U2Ao~w)-$7v&KNt37&!u#37{PW#ya98a`iM zDzx>(qI67|bj}AAla#XlXyy9!0VYx!?;)0f2gJQZkpCvb%ktLHLS1uzuVRN(`3J5{ zR;$5k!A&MQpl>V`{%j>~-K$|GbWcR?SxiI=ot7Od>46!ow4XG<}Y^a-J&AT0s6ZlWFi&R~E#NnaGNvwPHQo*|utk1q&syO!UtgaJoNAgMcciI0lBZ z0$Y(5UyJNxT}g6HNgTPi64f9&?QR505M=HUaUE8?l#%KnL@NBn_7h6iPUl28(zc9*+kVGb$6nBp61m{4Mf_iN=OK2ig;;|-#uF>DdgQTN^F z={;~q`Ea(v9eEVL5wSneH}}xjOdAeE(tRW&Hd@a~1Pun{PH|dd{rXlko#F#j5vO#- z^`4dz=5gT$!|u%!b?9P+i2Kpt`=aIk3EsER5}l2j7~2mmw>k?;wUgjlG)%3~aq-Lv zv?PE@LGN3QRRzF&ehs{vH3UYRtoB0E-E;=?(AwE0%*zF{?&fZ@tyj$&`b-(iZOTS5 zZuN$>bf3ix@a!hMetgn$cf7aXpTTlmZPbybtl|7|imf;siFWl2FlGgML2c^ca>d)d zVHRdhALue8{;Q`^`A?&d%@%9NWDoNv@n>aboLs;I?Mm~r57WCsV5m~LHSRw;)lLVv z8$r*3@qR>KYm<_7{eWP?^LNT7zMwcB-*W(F$g%^E=0ytgq4EtVyJXpX4<6@&!Y)+E zUGv`wsxX%fX4d&hDqcR3(|^ClIOJ|j44`;(+aokl8vndk9f6wkCw9g28r2z5=3Jfr7Dak`y$jxJxP~*R%Z7?EWb1^Dl5?AGF95 zA;#<3#ODZViGfq0qU~U$Ns%><3V!^y*4@B{eXgEkCHhwdnCJimH-DbKDQ|#x{X5)?)PcKH$RLPkX2@L8ray*iVH9OI1-VsG}zDBUx|QzssM2f#c0V zf%SLmB+0`@*tLYC_U~W51{80Pi+ck_03`ip3M5e5T+4+wRvjH!SMccz0iza)F$8)_Q1b3DFij9}rDkG|6bI`Ze1MCtNG<)RA#ruEEGCr9PfexW$K%VBp^gas&sM$r+Qh{LGq$y}k<0 z=fqO{Qf8ihKaZ+l+qUu>&P{I|d#~Z?b`)8_@Y3YG1F=gKs$RG8-zJtUCc~trl;(C$DPC`JzIS=qi9%1BBxUn~19>)f+;!oS3}d&u!#i z@Dw#;Xj7QZQSh?16Y3Gk>^=<w<_hW;}TL=p{$dW1(HVWzH z#AG$UA%i9S1vrDkv0WGEryuR^;AX~4LLQxH#|+grSxc`$3;%4~E_VkNK#Jx)wu5X{*Dbi! z)m<*G+_`QjL*7bX(;`%$U55;7Q!E!V7|5GVRIQB=G-|*W3P(?n3QAWyxtYni`s<0r z8cZ!HL%VX9AeDH8BG2L4@H1d@-IOEJMc9OwzJ6&P^I2{EC)d9C0M)@6*?NtPWEIJ5 z&dVMCKiD@PTr;TZjnxt?w!pY3L2+qhkR&%6YRg)laq0(abC-vuBp1D70J+^HWY^Di z^6XpV4ETu>?$J;`4`RQ!S@=|5Jl+_=hXK+2zJ#rc!e(C?1-{PMTytsU!A$`+K*w-_jwxZll37@jM9(DD- zEbk4GmX`0ptx34n5K!=ZRRL@Uy?!Xv08+kIw)xPS!BQ{XPWj=P>2~WG zM880?jZ~O(t-f?1aqSD#^n0JoV z8TVhWcab-_NAK7^IEJ9CH3NX09_>bq4kbGP%s*w#peB-TGrZqojxIA1%#Zx7Y)j$0 z{WCD;)2M2N77h>q60`}0|BzkD1wx(v8eS+Te)R_lAXCCwMLa1$8-O+bL>s;Vaw^_j ze>vip%`N5tNW@;yD~d#*_r8Gaam$Pf9RRTI@U&5nX$!+jHgq!`^S+wS`BL7J$#8)w z#5G9<^01$@oP_d_$6aE1uR!A_ee$xKjKX}mw{J^QGMFYKZ>14_?DtRfzYRcq);o3W zSb34%M)|lHNC|!EW>!7Y4S1Z}MR`by0M)3G14W#KAeC=O04m3JGFoF&kn4SlN;iF_S?#vz3wbt_yhE$jKzkw;pu44NfFF_gG6B~d`soyR;>v}L>HiA-mXDeRn;M% z*uk@Ji!*{z6bOjBOqC=Hot%|3;7U^eRl~3{rRK5WzLeN_FegQfMP7Hd%E7=(*vcUt z`**E=yE}N%^{`Z5hy0iSXQ{-+aG8n>^^qP;EJ+z=FY?b0DK*R%=}2b|6Hh4n%lW{I-4 zA7;ZlO$omVlVAd3;PV2p7D%o9jcNWg73=k|~nO1?WJn^vykNuRX6r zWU#b!q&Qk5O;T&NB&gPk;b4J;eRVH91a@K_wWVOHJ)Lj`*~Rt8wRh`S+5WgpraGPc^A#PwbYeNk zCSlCG2wT;2(w#T&C}ou1B9-;wr#MD05iH4JJDyi|fzl7}+nSuJah>~eJ3ut35*yQ_ zEJ3bXOT_lHV3K}8ZY_u{s^-%X;M~0GK5}Uv~vIC6bLJ{8<4>NU2N;J^{ z({F8XoO>+gy5!Z3?W`BRlI?Io5<`Q#=zRA0$agw0q*P%e&cODSy^ltV zDQH}c&h3?OEa5SLKN3s;fsL(Oq3@X}_iY0Vpww4VgpRg1Jum|X9*O(;kv_sB#n+mJ zW}E8agipbKT3-S|z3H-pjDyt+w)zggN6qfhMSh98kX)c^NDVP$3z+M2e@oVf>m8 zavW5m6^Gor=sE8e5 zh&wth88Q~8)A%aQ&P{J}^vot1RaEJmo*$Mo3fU518VT@S__Zdd!{82%(vdrG8}C(I zwFxkf8dG`%QzRrXFr7FY*v`j4M9tx#vj@m=Z28o|S3b~%^) zhs7HYkor(Xx(2Gjs-rdSf3IP=m@^I-NWiK^;JmWPb5N1b|=s&SA$+(VN8S z8O$C*wzpMgwT^}PmXJvB6Z>${-QvA-77MEhBy0pvA~9Iir`S&)kDdxZNjEqxw>kmt zMVI4e3^22>uW1Y&cjP7PaoYAo(lB6>zM3&?>(o(Jbb<_uH@;WBENksIHz2{vR#vq6 zoG));KOL#TLEf}?Jwbp7%Ntb`{`2QK5cPD;ng69?{yCCBWM+4^h}BorZ4TCFZ*9n1 z-p=&6D}2x>mZSz`4kzqUCHT9wzK)Z+0mW9WqT2#YP6BTetUdt12&Hd|wt+b>h(9$E z71GMSeVF3|L(hCewG-wm@P2J6>4$=5Un?mEHvjTg281(7@%JV~Of}D zS3o7S#tPk&DEdhzK@b5t{1hCKvTEcZE5+eHyow_{(WZp^hnjWH+e4kHqwfea44|2* zK?<0=)Q4|nj>F8S!|*X9n&Gh;5yEMhEcK?~1dDplQBxnT&U(lKUIdVY+bR+cVHj>^ zwLX|u7=fn0wPQ~Dfr@!(a#v+8h@Y>j?Kdk*=0(_L814}B_Msn|5W2lK+};eJ_#;St z+jagCu>vop45b6fS+3DJK$YMc$$?~Gy{@JCOw}b(0>H}Rx(aGUA7>ycDFaId#ue{QSIxeqDyF0zn=ax7kg*AxSQ3BSeu~z;c9Hmpd(J52T^0}pzw3zik&b`9~dp-ZwjyNehxZICkHl|v#;!VY4 zNVp24D~EIMFP&RG*kHP9g^GJA)18(t29^ui2U6X)?M`68KB$|KDa!2ubBMbyc&sOY zk=FMDirf=`IYuW#)B#R?^XXrv86RQLCHyNh^&2`WMB>XasJ<(_eV9@QU^4a93Yzre zWTi=X3Od#AG~n=Hu{5lAeZ~C(TZ!$yIkhdq0A-XQ{};$apE@lpo4Qg``x?Q(r#JM&0Nb;E(aB7b6ciMUNmnZv1r{bObfLfd9LNvs|rnz|k>F8YQ5djqx`xX@tiPacFKsgKy5R{JH+zkE=!#;JJikX&6!lUG(?}_5K1QXh2d3ScmhOe z;Wb!l+4V-`#Lg(4bZ-KZ+s2IYs#wPIU8AZaL#8Nu4M9l~041r#;>mTYoK2siU>|pK zBKJCR?twvfSZ6@qHr@?jW zbn`B}2+bTN?;K0_l!e7yUPk)*pKEQ(e`*|esl{SHx#|!3sM6xxZjZfgxz$DL!MYk` zGG`$Sn#xMFu7U2=BQIGxGg%3ABs@CJ{|e+dK*|q4OaNR)7P4wTx0P3y*3d0YX6lSJ zP)Q<-3HS&sXAHYk?H{1sSyI8XWv75&27Cu!!>{r_|JXq+?14Q7jZ7eU zMshZI9cqFS(*pS?p)}PAQ^Ee(@yWA!aIs(3hYY6dd*X1t^Jz>h$nyV7~h* z0at&=9Yk{wtrzBTVuCHMRQkxTbQ038(EgUvDe5j=Rw&8A+tBMV_6|G2YzvC-NttsF z$x$#RvIVFEcAD_**!Q95QzE}X^?m9sHy|)1IYNrh;sF>~kcx{Sf`IVru?Wzl>Zh-o zKz;Aj~|8>?o0{{c|OgX zEe^;>9^+gQbk!ovNoqZoXkHh! z9VG+QvXJxt+WYRWrjzdB2`E?)Tv-uanhkYDqzHxP) z?sbd!68aqSe%y{5X{mr?4tW)v!_UV0%|-s#l_8ZP8T_MU2ABaS*9A(eR)$7wU($v4rHSAPVd$ zh3xx~E5!s4hjqV&@o;3u4u~RAdCD2@;rqxMmnv8!=0IrvS2X-6PG%yxW!7yH2JN@o zE%@)CVwn5vMcruI7}QOGC)GFZX&HazU#%(jaD!(ff~o0`MOGlsJ*7gSJ>!^Jb5l(J zT}%D%(2GG7crd+5H z+Y5V)H>u{s=4fNFtt9#&5U0+IKLk_DpNjV$?mu&04Fh{x zbjpn1h62jVgBZ->u`?u zIZUzwcmu`BfbH}TbdYwNgrLB56`-6x+EjH5(d{Q(pg=bv%ny?l60T})^uSOaU^b4J ztc7h_0-O;tCPP4G@UcNkPlulL-$CGc;_yM-@}a547F#J>mVs9UQ>P!k#gHB|clL@8 z1*{)si6>3H8)hCN{bWt8+2A+`1R<@m%b z1_9?|^vi8BpvR+>+N;DbVToIgnMvz)&)(fr=iDFDIl&X>2vQfISF{DCO8B4@aKZRn z4A>tW42#~T7pa}ueGLaZU?rYLvaMW`*%d6hf<>~8o3}`&rg?yG3T#~}4}uD&tNZ{M zB1M!#V9NO$DQ1D>+C}RiG%x9#{tL))54QR;ZH$Y96IFBEC}g~7>!`bu|4Mpc&aY4z z)YJxihTP{v|40KBEe|1OAQfUwH6Rv_t!X8ratgxcgZ~_)^xFTn3dil%LgU%LqUa*i z(*^eam=Mz2|5FCo=wueSC5H|!HTJTw& z{7|W4^*<8z(hOo|oLrSdGTt~iLv4bjZ8B2urZzcYAUsAHOht1@7hb8;>vH~Rt?5J}xsWpH=lQ5L z1(W{NSBa~H%cO%#F*k4!I>5N@HXpNAsLhbmIKsxRpo&K6uZ<%+1Q#mSCH0@eSNq*> zP3hD^KA7m${&cHp`kRz_S>vbSJv4KR85LeJYCzJwwA`#4xmkw(5Rm8Kboy!UKN|6e zE~9VKQ@vJ`!p&{ID5H(cSE=Pnk)3b^9}J^aE#CR2L8CGi8p9Z66v=4{;b9vPv!k%Sip`C9qYOH$Aks z(v63(aQ62|8HH0B76y4yVJByWy#k}jQvsD|L(>S3I~!YMN{Vb~>q`eOQk#9vTV`0{ zmdj8e0CIif=3vQIWGejrhH?Rd2=>}cv^|a*&t8AfxB=ns7Zu6T%Fq;Cg`IewpEd7rrkA`l;p=U|M^@JZBouZsnkq8LWT_cD#m2cpm(Y@%Wwc&WlN9@B6lbqgn3rgh6$N@Z_Y4>m|26T8a9DU zAQ6rO35+qOP)vNvxzDs>Wp+Q9n2^4-(}-3^Xb74K z>lBqqI7vV>ZXNite0xPclM`SW&f++GHL_rFbz#soI!Zfq$dd+5uQuC?tjed2jA*F? zq{7Iy9dO%2$mCORu+sd8F;|D?Y^e;T!M;|(s3-1AVxx+592*{D_Fszk4`$$4VvQll zn!%-Iqvo~F;55N>>4C>vJdTBJfsE_8?bt+hl-^+ztqa{dH~^6Zj9RDFd!(cdrt|n3}r`PlC7AEQ|+1kIRf&KoQkE)GgL~)wQU=`^-oYEUwRQlFiWMid$3Bb7|1@)_ch~ zc`392vfu-Mvd!aE>|$(=Z{f(Oo;SP$DeLUa?Oq?z}@+M*!jYskJ~rH(~4!6AC7~mh2B(EHhiM?J8{w% z)5{z8+7DuB-Eo+Ap!)GZ@U%_ADN^Z}PRJA`*VCrcz;5H@Ko@X*DZ*C|RsjU9{N%j% zb1;8nUF6bwh!xd1()ak3Q;Oi8vsYIux2R8djGNwHc1e8!avLu4k?5ltDuPR5F0#?| z)L@ojh*p+B>?*t)GXLUz=W}F|9u(8v_7C#{slXG0hPA=p7F=XH2n8nfFf#mG<9fCUiM* zB@`gLEPsz^7x+(VVP72l@87^UEJy^%e@Q4!9cwsv($e;fxEE_BV|rUv1Yg) zTPy1$AmaCBgYw7nt2J>?SrbWMF`1WyLIqIinWpc5zqKH;`GEZxP=J;$Mf?!Z!0?|U z9H1IGR2U@7(wI%MC7~8lV3evKNLdsH5@g zqhINDj_#@K#r)oVZXSv)q9qU^<#|h{0uw<%f=GM|_UTWNgu5Up+j6hn zS!4HJ<#hQ6+1Lm*CiUl|nd-#oZ8Sr&Ts2zy8YnGKUayeAHGuvercc=I(x$cKVU5$CPAutv}4gEVRN zjnS`+5{oOi?kzX+zbVa}<~gFkj)Am;h!`Kq=^r=u8PHvndxC!D*; z)m;m*CEF%07aMpwOtyN4=V!vLjxY95j_)_X2L=^d7ZsdhWO{-(pvLU7PJqbM@lny^Oa_>xU9*JZVIbP3 z1&tNIAEOQEDVqD8JKdIFziG;apQr9rydl-k0V_6Db~KyEN>_JcDW3*Cvqfh%!;+OO5bsr{}aZLj1M0kaBl<)4@Blw83DFonMTUX zfg14<#K^+~1jD}SW3Ek1bzubXa#U**M4GA5n7;880Uak`L-QYH+Ya2JhBe|VhoO}o>U{q)4M9Kti>WT`@G-{K}^$Zm6 zv&Wl5Yy&zc?DW^|^8nUtdD8#22beaG!g8A!!cL1al~rM<=Ru_301xi$(T$orj^H`; z@Q|G%aA{y=wgbM9Rsq^5AI8>u&46Um02WuWQs~Tk^W|Coj5@GoYD3X2gjW3c(DvS2 z3F09@sUCorgi&E{01R7j{Q-vk0C)}o=2meXbW5Dgqpj*&%>JF$JapFRr!M_-sCgJ{ z>8u7Af7eLQsU}mXkQwn?-ua>HTYItt3Z=pGPOBbrI1NykCOSrd1+Ua!yZ$f+r8;@5V* z&Xd);)Sd>VF6WtdF)(iuEk5qOcbsV*03|JsG5>(yHgxlz2^5#1e>caQ#{@$nrBhyl z^G=geF&B5XlSsExC?E{Q2Lz2kXfgzxLj2!6g2%KiKP>tTwgf1ne53d-!*ZZc|B3}< z4+pa~#7MBsVLcqat@TrP@>lmQ+;lECv|Al=Wr?U%4RIqIc~GoDElV{Qj8WD`&})cOd7cJHWt56yWP@ z9__FYd@XCdVW7dNPn9r`7OccQ5YvJkE6!Z;DSgRI?1DUpsqh$Ujk@^o9pLH?geM|d zpDz7e|Df6b4Fno)Fy-Bu_L4pMTbP^r+fJI3=AQNp>E{YJsV_wLX*(!Or@H5%p#D_V z&3mxuFeeP^e8pN=iyAEh4N$0n3%Y|Gkma%k?eAEx2W5Xjr3aRpzNN*yTu)OJ8qJ2M z>?lW7;aAIw`M*=Et9(G{2&+VS9UmE+eHP&ZWI8YzAXW!hqH@%ys?cazY%mwt;r%`Ca)br7D7KGH@b@T)sLXXgBgc}~e zrLT>7d5^25bsNQ^QPT8Nr#^T_q}qH(Glog8txmU>ab$j$YB-Mg(Nej#|4&s>JM-7Euer%pptSxRPiOpDGBU=-)9pR%aF)l;;dLt)?}DgW`}DF>$7M^yi=#<^kcZi*Wq3i{G^;_k6>q zfxeR#O|q2g^B}eHDLyp(D9x8wM#2XQw=yyzZCxDXM?64Eq{M}-vRe;3=#`*oWkFDg z4fSm-@Ou;sYOw;?JFd{^3%Fe|A;6(66M4+qn%8;9pfKi=VF>`qNl=uwEY~-hdYzZ* zdM@9XQAtW(g&eN%AH4Tg+>^?Ss{Qhx=Bm)VK~*vAPzCm6^YH9>ueQfY_B}e4!l2Ey z%TS6iczuXF#xWsX;CZi2!nn|tc9KBJ=KAt+ew%lmf8~#Pz^8vd4gE5w-4V*ZU3}lV zc2M5ix3wfil^h%CYh^=MoF4y*Ltz>N${P~9W59t{c!HM%&@GO(wlN7&faC(K2PfWQ8jXL_81O(2e5h~xgBiZ zd3R4+a18b4UgseLSZn^}8tM0m%5H~F4ZURA>dZ{wBmG1<)i}hvLjMTLxmjV8dB4+H zL3zU_vPAuZr3l4Y7=}jDHXFL1JHg7)FrBCa6VXSzEv|28a2OKgAszX;9>0szUW*x*gsFA*v*p0<; zrrqf6EBNx+*Hu-~;~PZfp6d#J65?(Y8~7%wzM+H@XVGT|iv@{lz$<&6@l?81@M>a+ z^X6Jk+hbPe#I_NP69<1N`eVD34=A@gGg)w8gmDq8`Ctu2hW1~t4Zr4$@Tz8@pbvy0 z+F*Qp9pjgo8f?4f+~pjKRAGX?a!F7z6`4sgCRF zOKFLDRNVWh`Nl<{&+g4%DoUp1CaR zgF)@apqx6cWfyZ~Wb16k#yzjXYt{zqMey24A-w+Md64`jG@k&9ZRlu7bkw&Z&0bX)RrYs+74V2mvKaU@ms#6X~f! z&=f(zY?p``{g%_Fw&pwpHjSy@Y%hi7!-`X#V3X!`&0^zxR!R^^5Fx||nMQao*Vh@Rz&OD(pj1{m zqJqw&pbIH1g4}&w-nD$AnyIMRxi>G3%&V5AK}`%4sP$dt@<{u5TS7|V^i*}*_hcLo zm@QvZ5<%dDHE&HG#oNC|1iP~ec1H~yH1wwyhRZ!%AW_BlaDU_2=Y3#PxY&IZX*>v; z&8ui70pn{Ml};4SIbV=DM*Rt*ZEmz6CUT0^%gC+~4Hc~&U6U-H>beD;>sW6L5fZg_ ziesAjWxW$~x|snlb8wg=n@vhkx@}qI%Ntd}bd`R6WtT_A1rRj?J5m?IqvG^fObt(0n)>)$diEz)?|{X*JbKB9lioU4eM@@m zS!E`0@6`oUKgexG)&vf9;nXFgS_k9Y&qZyj9-4XvCfEX}?D)QdJ=!1F`>y?atXmEk zyR)wsu0b=jo5BlY{K(`=;D)krR_69_$L{Pj;qRibC!g7uG$EM%2S&)Zw3^40(& z0<|->*VmjUa~M0uD=i8ZsLY+5{K2pG29UT)^!myH`mY3<_O1NbB7JBN+8LC^j)+x` z$Bs!-q@RYcddjwDytvIR-8hB}zKktdG`CT;v|BQb!$qv%VymA(N#!x-T>#?fCQH=Zm39Kc+@bJ5-6$bJD7hI#0F&#z zk})+Rf5F)jaeyJoG&!B7z(lH3UGzSUxYYdoxAeiLPmIUQe z3m%xmW~<*{af>Rml?0O^aY=Hi&lX^k|GPC<;n4YnIo;{e>G7T}8OE2gkIoR(v+66h~V4j!0K@QY-e9E#OMyyFS!C=U9@HNo%AuqZW0ck#7z>9!JEb#5ro=N!`%P$2NOSBetBmf{})CpfEwlwc48(3ducmw z(Byk2x5gMI{H6%Swp)N;d%98cnNE-Xpw#|wQBQ6-*m=zb)z9N}2tg@BHI+~?AYKy9 z2EnYW6f%5W>V4y8uEg1JJ1xsW{Y0;+^`Cfa;>_A$ikdAw2y-W)2sSQzPs>n`fRGP4 z_hvBZWewhe37Y3W?P%5F$OEv{xMhZbv?DGJQZ;WT*KzHOTH zGT$i_oy3t{!7#6l|ASfCXuD@9s8;|k7U&a_q$2ilbsUsCA6K|)oDk)dEu~SHFLQbf z_%VJ*kIadwEwqmV}#ddTG(ltDIDE1XL!nc>`P)sD;I#Q9G& zAiA~Oy1b4{|84qS4Q0dd>{S7*?c{IF)%g?xb>erFdPfY^+T-4B8vH=x@{L3joO=Zk z3(?NSApcd>p@N9_Fih-nJAx*P`_YT&R%!(NJENCHdNlIBIOfMyEEJD}s1qLPt6w@B z5FltjT~mS-+PC6RC(+I2_S8`Z>&N`(A&xkG-vZ$J(~UU{U@qCb`_+jQE6r zWht&6UtQ#&OHIKj;Cjv+aHYt#*{VqeX(sZfH+m~_uP52$zn})uTSyMo*L{vNSoqTD zK+Qy~V`=DE!T#|SbSzKRFBSdCkf+PhwxRmF?-y>%vCPB=b#lJSQzy^LAvaiBzQWR$ z?O|DE5j9uHe+J0Y!=NcKX79rM>{H+IAwQdP4N(tN-?QCM}cypjQPbwfMX*uU^nUU(_F(q?IdWas)^P^%T_fN`Kp+t%7*`GX#y<= zzts)3k?NH&@IOzVMf+qW5QT)-2$?z=CDP+2LmzFN1@t1ARWn6zB1)qJKQ6>q3L2Xo z$=>5fKgQgo$t^wJd8ii5%bKZFPM?7Ys2}!WfavW{S?w7(MGc(#vyK;T$i350f(tHM zajl}6HyQoWi+nYjG(%QJ=CBI!+svBVI9+(N0TCyeV0$TE>k9gOmc%~TT&IIi6mj|$ zM3YtKC<0cFL7A+uah;2z6-wM&Y9FfcFM4bszBq7~U?eJ&@2%mzKd_b4Vhd=tpg zZ@PQxa@cEOM4cBoOIi~xCggXyy=k}`KKsn|Orrv>%K>L!(mukbKzx~z zKF`%_8#my%sqM|&@#BJ91OwM0Xq}?@25{M_jf+=-*7iitIr2;2SmtT_OHRLtr#;o) ze#mImYrdn=v>=BVr2V$E8M+rj`j98EdiU%XPekK83_W_+P)`NPBfqzkPrhh}mIrub zmubIN6<)oc1N{^-7o+z;@$$TPQ#%71oHzq(%(``EXysk~{AjuD7mPfdy}YD5y#{N$ z`%|>v!ta2)9S$~9upDPddF%_lP_Fi^aAkXbvH20}JC-yvbxqT7%8BY%$86CNj72t} zv_*ith-g@#8k}9)oFXzzv4AJ1BP-T;zMqrnquw5mXoH5)IVepYYe;G&P}cg~&uOuL zkVi0H2^W2ObOm2wNV^zD*J0u8cERWu(q8*kU4-?S;%MA>0gQ-ru-heUoZ0@*kQ&fa z=8rXOCo=W^#xY-VL@_8ncBjLRct!X6l09P@^2xeL?GS9QQP}-dW|ceHBd%}*uhSeC zuWRWTtOSL*|)4FPb9Eo<*zZzSyKu*2ft%65&+t zz}`2it!|S&U@g3q*}nY)b+H(VH(r`}k^4rGl~*>6btMK1O}w#p+)1usJi^w1%(Upo zA!nj)H??#iqT5I?9y@`SAB2OauePd9JI;rbsu<8gE09L0jHEG8r1!=#7S_r~AZ~(( z>Ggfnp^vL&3~3f-ai}ua;nq5v{(6-?7Q#i89N%Of5)r6Y?}v0&;jrs!*~&G!Wrv zd=~kQfLcU5`%B5z!F{%Zra%(>f`;!yZ?v$CvWQ~__CJ0{ z+kkbYu<{;nTyiAf8`$@f4*ap}`1pAR)+L@fPjfrMTOfpj7#sUZPwtL27hNequSdV$ zdiHiOSFRYtv%VI)daH>NR-Hk?+_SfTX=XtqW!8Kn zU1((3xxG0^R&3Nh%l%R}*tp;g}53GYC!@Ag@p(8xj_ zamc;z%m>>P1g$|0vGz8oIusBi0O3;AlBP79^hywCgA}r2IXqtCaYczWRCbZ4t&PsX zxkRSKyjTi(hPa<+KX&}v;NF*S7ZVc>KYFVd)G+Q?AY`saZtG!Bwbe3t+N=VO2Qa8V z?~2>W$Zbk~cRHqWdP=KJ#F0X|vT&YO`pNMP1HM8lbxoA?WAxpZnOpj5`-#jcgE;M; zN?NMsP9(n@20cm2wpkzBQ@PHYKw(!b5Yq_UxafRy??iNwynq(V#IX+pv1OYra*1W$ zKf@Kx&^~sn5nCRFzZujcx}`~u=SfpEZ|lWT$RNBycUIrR2ZW@ByqpkP+S*@28bF%JD&t&!X>(~BE#|?V025WJ&ZKPImmx%KkpiB{fmXfoC`o z$D3(1MH*kBJjN%bRyN#oY^`G|qRw+a|y1Nj1O=-v?Q1Efu=ZY0@DuK}Cgx$54+j`th62v&@kjt{Ghst9_W56V31S$*YbD?O%o+(aaZk=mR_BHG{g)oMyGy(0luoGG->hl zOAs?QpXOG8j+3v1RZY}(7&dBIqWXu>$5Em+a1#&?FBYsoCL86*J}zAND~ltGvQ%La zcE~+U7n6eYoAWcRCCMm~PXJNf`NgdyMK}OnOv9*(|_;5Jf zzKU|Er@Ib)7T%i&$E2lx&OErK6x$MdpHO?_`M!mCgZj1D8b=R-8PIRJZx7=*xg5${ zw*>W+?G6A=0Ho;0k(<{R5bYQ2vU6H4K3tx(Dt&M%n<__)ZZAkKCc*WF*cL#${5Nw- zVWj*;xZ1Vg6*+^_43=&MVIJslQp@(Ib}$^h*WEU((&>tg^+qZ5iFoMab)VOA!Y^^F z#nCc2&-C$|XomUC3T|i>DfBn%-V+^<3vlTgYfB(~SR_pIq@l*%hYluVH^@sc5ISC;?kR*;|vDsw7$&YZCI3oE)(d*j4 z;5(-vRj(4#5R|5WsC7&sJC@{qA(&`nOL7v?37Zow5m zFSv>9nI3XiB+qm66g-5?A~8lwwg@CQqF@>Nbpy<|G%Z4@GEW4T>f4;j-7T!5&NFMp zQ$2NE^_tQ-zoE?_x1)QGnnq!TD!lHC?Ky9^cNtmg5R**|ViT>oR}Hl#k(>&&5iA$G zM-k+}MbNl<;;err<;y4WT0W^tc&|*GitN_HwC&W*dcRF~dlGg*{v|EkxuUs^a8{@h z1}F_%xWhM=+evG(l|X0;F5c~`%=K1cLFaIW(1l;bIQC;x%l*I!tG0f;BTuO5gH-77 z%ZqX?Z>7rie83-lwqKm1Od*6%h@)LVmL|@->2UWL&)+>GS8Ta{>LST`$&s!@{Daq> zgr-(30Hq`>5JWGLo;Xs8fDVZPn4ZdR1uR@*9oG+8CG0}lMnsPxs*Qvg9AU5!(#6(Ti)d2UuJ+@=a%8e%>E75Y z+d)Z1Y>;e_iIVNY7saIEdvVK<-AcK;w2r{f?P}nl2x0)-e)5Dh1460qf`oPW+QN0F z*_$%)GKhW|gCwjq*>)BM4nIQ3o3*1$YW%qp1wy|tv7nx@JRX=h1!SA-iYLKao1-GZ zp2a?e?Sb)bdSnT*Ub_VGH&yN$bn*Y{s*4ZwuhvVewA8+DN8>vS#Wa^ECZ~>}@=_0<`TK1Zs0?#KB|H!Sk+0vASNaH5<)9-89 z`X%W2S}AnG{*39~!EUSQRcKz=pubfMuNx69e5U>My2tj?mLtHd_5P-s)^&0aN`T8A zz3xgveZROIj=`gIMOuMhvRO{9mmm@oTLJIoV#x=j*cS--4jw^gl*2AFKbVED+o(GSy&NVki8VjoCxe?fM7u#NO3 zH__@6G~C*-@w)KN1GOAJfp%M zDp6n+M6XDThKk^nT|5A7gWuWSAKC?TjCTAbPlmD#r5RyEud`iP&lna*o~7$Nw{w3( z^f_!>Hn0?012Ds4ff{|hlLJ9%yWwlvQcX6dUcvx~FbXNw$&R|3q=L5%@ovY?I zE||v6o6Epn1|3JKfQ*tc{2oLVz8H*#{O{nFLrcT3d_$!{`0xgs#g8h>1;d_({6KdtB@l|i`oROc z-0G)`=q<#ak-G+91T=wtLxU4jyK5eXpTw?-4PiM7-LR}0*RbAoq4%fQ=Rb*j*DwQ^ zt^)?p2ue}dX7KT3<3t*oet@bw<{bppPsEhnoI!A=Vsbs5W^5~UD&;8r&{O^{^id8xzZ(w2ewcyFf2*t{=s6D` zmiS5_dNI~XKaBX$a_I^W1y|yohg?NTL^s2}55r+}GY#7^NZ?Sum8UfOf*OK}+lV(! z!#QuMP!CkMHI#LU?N+4;nb13SO(U0^sp4#p-MAlT?=CL$vH=zjwn?Dg?mpzw+^{!D zcz21~=EsUWSVSox5JZ2AF~XdT%_Gg<0=w7W6Xu8``gyFU>W9#i=PNmj*g7k<P!6*x-;KkC3Hl$ zRD)Au2LuZI283ud|EJIVpBq4?rpe6$0y5a&_19Dos-<8f(%@f+t_bk)1gt;)25dQo zX+9}bITaWo(_Mb>{6ZtGz*)7#v8Cv z;uVh|^ftX;5}_s7=|{d3yHtR=1G51E@c~O?ljet*Cq{Oo&9!lZNDo9YEk=(*RzB%@tXVd_i`roIRuhHkTq;Wy!15Jq>ER;u zh|~kimNtKhAnIvS+Fugc@3deRbeDOs+M2Tuwyq-vbQ=K-Z64Cj@~K=!@8fIl4dD}} z5kuoxwGS{leb?;eF$}Z$|FSLr^Dl(M_J01qqndx>riXWSh1 z?Oh$=|B#l3CVra+{7>(=hOWMjhW?HnTQxNFH8iqLYIpo!0M3^k&Xc|V-vDJx0zltK P=)m4Xf28cTyZ(Ow$qr($ diff --git a/resources/ios/splash/Default-Portrait~ipad.png b/resources/ios/splash/Default-Portrait~ipad.png index 69d44bc2c0888280cfdc86d8d5a3ba4b04bbd001..a430930f263463573ee4d124d4ad42936d6b71bf 100644 GIT binary patch literal 20741 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 M-%rh_ul)Ld07|k7fdBvi literal 48701 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 W3)Y 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 z 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 ZlJI~2LZnE(s#=@dQSTqhzCZiZ{{n|?$HD*r literal 147781 zcmeEuhg(xw6Zb_FEQn=SB}&mnR77bJgg^k7U5Y5!0i{Wcib_e44slUf*9ZtmGZYsP z6$BKO4p9`OB@_`+0w^U3V2~Q=-`pGDec$i<7rym*b~U-@%$YN1&XnKG&5a}G#;aFu zUWp*cYEzTnjv>g(9Q42CV(?8G-(WrbwUl(=@BsvQ61i&b>@xT)LOy2vE0W8U=D~-p zPA10=BZ&VF1fgC-kQw-j%0&=wRRkGyKoCL#f^71jmmJlF2V#z9#=pVe@MqevGz9)y z;bCG;MvzrMq5p{>NpvZgj+p*-;DqnTVfLBJ+jZjh9C5i9?#I!;RU$WdF*C#Wd+4X+ z&KDbxES@zAJ7I$JU6>Or2F(dXF|yeI{+i?P*ZlXRfxB4te?P^lTcLXp{z;2{x%)r= zMvzR2QzHL-+U1gu3Pt$GKr!^>fBuai2XQ$|{`qvI&SAqpAE?LvUFtu=_*a1ckp%Lu zTKs#jgv#)*wfN^!{A+Iibs|D#_}2^n_fq^DTl^!7f7Rk2QT!Wn{u{FkmEqq^yGZ&KJ*${yaOvmcu@$g$Z+d4?Dp&-pSm-X4Q@8_eBZ9uQTwP zjrcDOx9rfAgeoIU`O|*tJ)Y~;my0V#V={w1!fZbwQDk@Wa5+mX7bVd2gKp=`wHvxV z%@EZtqBe=j6M_K@lduOK#Hv&1$b=N(QWsrlE8RYg$!K1{My?lP1K;8g?Ec2*P!A}f zW2GH2n883Y^hD2|P;9!^YYb7K+R=_()hVCBIX9p{gn_D%srOE?D|6l^pqK;IK}fNo zUUh@X=rAXF8%FZ56b4UtsHC5ua?0wk$v+84+El4-aM+Xg6y0V1S|Pz|^+U^w;)PRx z5`rT=QdK9Y&!w-}2gmcSvO) z(8MTgjlx*Yk7yG+AJrh3e4ah478Y7OKZ}1UKvaA9X z!9F1X*6_wkvU)Vg@tM3&-3LkL=*(_-)^rV{>!A`#_`nog-|)4(P|WWey&YwbdR-`! zc6>?bNZ`(%`u8KD_hfxBKCS-3<{e>4MV{d6y;Hk*eMGp}Attti2WKA``|!1L&er?1 zN-bi@`<`&(}yo@td+g`r<}^r4Ri|c z(T5sFWLr^zfr8ViQ&Zy$B?a)vU>hd?9%87zD<@(JUftD2!_FR6k(EN`BXNlO7N7Op z*9mtzaCzvlh6*3pODsve8n8SgV2a#yE~-=tdnSr;VL<3L;D6zZ3_HE8lMu2OiXGL~ z+xNCwdUYcga8JE9^_~P`4&vDQCTI7VX!uAtD2L_P)cT?a;#-C7m4M%x@mJ}x{9I%G zs?`#>AJ2rRT%xw!d7sb9G=2F~kA%xF3NHXbb(izcJ}an|G%H*qM(uBmXT~FmRoeA3 zOB__>PZ_D%!7iy5ezjRQk)nnHmuKCt6TB(S^ z=Dhr|2uoB;9IP=GJj4xull4?VdiKK;+9;}9dxR8o9cgbZ_)C#t5~EHYV@{Qb3GD&U zuL%!8kdw0W5gJwvQv&lMahRvNLHO8#{-+Lt2u4>bfnBmicUy}c4`Y|uUmbLPq@kX= z0b{)=8B<2O%Y%g4Vo^qkgjK;jF@z%twBm(q%hNWDYmpIdJyjzH9~=z z8Yz~r8pn>nKpR`zx5h&)yg&?*Rda0^6O<)u04WLKHHwr{cJ*K)3_Cmf#~8zb)Azta}!b&ZK;hu2a_apV8s%+0Iys|C4V8&p%aYju|I40I)Dfh=L+#e$%i7&bWoK%kC@}?Y$V0#8aC-L6( z!*flJ@p^#_6Myk~cekh@h$!|JR=9?V-r;bV{gBrcO8@05-L4?H)vvj)zk6Q7j&tju z82uqtu`}@n>7oLu8P#){O1*8~+Hma166~y1_2r*vXzxGO%UlwId)9JQq^|^%t-*0j z>l*5PFA|xwj^cF2^1R?UsRT9o-Zl*!%6}6LqfS=aapvZ@qY+=hW2e(8SHXBhN&Glo z3yLCXD=;YzI5@nJB)!?w`MZM#EBG=l&2y*I+vmRCaEX5yKroI48d^K~eG4LN+*9>c zz@ZenLjG2a0RJpiQ=jy@ty7yiB4J$|Gdj3g0=*bk!tJ%I8Qo3Ae_6@LF|@%tH2Qi6 zGnWJHW!V0Xu(U2+W`-Z+Z(?}M&Npb-IPI%?JMD+9Zi=bTk(wiy?3iKAor+X#zgu?> zR%es(HgI$f>X-y*q#{ifQq^+)I>t;{b=|q@+v8rEAihJd(CbW9llU;ue^IMyUgYiB z*LBP7Y?I>)fVUo3Y%<-cL31bP)jIxaL?8FWE9`1t875uEYRueeRp(#QV_qY6ZbBl| z9s8H}wrOLc^$;4}DK)RVH^&`T36@eX808F~EhETPorI;89neUKp(*A*?y<3~Hv&-& zO|6WS`0V@I*IPLZwN5`{s?noSRp_U+3bh(m*DbC5YOK6unIKo{5{$VyS7iSh(o58I zB>P^!V_a53SVIEd83x$nK(%XkL&-h%d{M+y!fLwK!Alm?s-ErGsYrZr{VeSvj`Wlo zS8lo0?}a#K)ttURy*_}Qx2ILU#SFQ3H^+kEFDbb+ts5>;}^)<0f-cf zs&RL8a2`9*4{uSCZoToOvwR}8CQ+0zDPcv%nRl5j!pyR>=%%9>=lFUhtS@CE4tioa zeq|;8Dws%8ut#bvMs69rz4QWBQZJ}_4lGb=uXKj)$u7CD4}P!^T~Y{ik#qf!+Wec;CRvt>po z6}v}$ZDS$wijQ!4xs7RKoBhE&SP9umru{w0^Mz4xMLn*mDOsx9*~S-?hM|iwys&G+ zci45(qGrg`l{R25VyW($*}|IbH-B99;Au((x*Vn%9tyn={Rwtpik1qNC$I}rk5`|R z?q9~5lsfsoRSjqf!`EDgLnqBD-8}82`}qi4>Z$r4ql2gEmPG8B&tnI80-ygV{gbzr z(v*iil@gXC?IKaUv8wKLh#qAXYzv2~KXtd5r8lKijPn|NIYTcDy`3eJRc(Y4up9|k z>;`_yN@Jn~hT!>P2Fb?yPPYoa$Aj^rAD6*aQ^XX3=14nfm^V%~n(H%1I$3|-A<=$m zcW|&a%md9W#O|?Hy=r!t9cLi$d%Z1U6~0bMAD72uF`kB@nb~FG?qhGCT3ybp@92?4 zCY)Z^*`ro0Kj)q$uquqahh6ev9kQ2lF`a0jEPsk-$#MCyN<4NyK2%ZN_5?9&i~BqW zkTR#&N%g+o=FH6M)HOk1GlUl9!>a^zOiiM*XBR^IHZHhv+cLx`nmk6}TFop)kX=sb z$$$InXuH)6{pR>vxNJp#Sy~lH9JGpOetf~NB$R*|)q#EyFn~K^s<(lu~_YC0_HleCal`wMT@V?p2*vF7XsYAH@+(wTv zyBU3paNyPgMWEy>B7dI>EFWW^*@jqC%3i3<>fL^4?orEl?}b9btt779g}|269Hu z9PWs$zkMiq2~|Su_K<2?S$G$#8PI{XSe9Xxx~)TdrZk1g;m{ByFE97y+wZbr@fxxd*@~Vf<1}A3Ip>g1dy9ZhU)8yDa@NQ4a{8vCIPjV@k-W^2 zUJ697OEG1Af15zjHgj)po(!a~p!Lo^i!0!`>=CV*pIeyLYkc|O`|0ZVn)&IbE&nlp zs`{ddP7_yTY*}yo7;Y8v7dqnJKa z>*3;?Mq1m|?UHYf7e$B+sQE(&MG|)A1J1q$sZ21K;AYnsaVRe)gSYUS?mX$Ukr2(h z$8lN+M@H_53qs>*_qt|ywsCL z+4+*8r%t(Q`RR+kJUv6K{;&ybE#{Ox@Nn*f7&s1ai`?6z?55RaZ+OlGi!!5opM zG{n6k7X%mSC(NG>;v_F+WfMxu<0^{(2oTGuj=GbL%d=xy;0C8U zH{9y?-~QlU;co?cSfuK($0_|QMI*&L?;gp>BNB-Sn83eVej}Y`ndh`mE5%%(HU@jS z?24K=+F9Rc$+^|7JdKHlqkKsNA|#Be3vjqKt-LEGa8oZkqr>Q=KcC%7sczxGFh~;_ zx-={8y6o)srg7iugin5#(8Ifm`dttD(H2er&1R{SlmL0%ssmv0p`(arU3#;6Gui;&8mC7INKCb>~xY2D7Q3rcsz-F zcC9S!nJs3iI658)RC8!_T)IC_kJa2A5LOQM${f8aQFU7fVa@bPPfABBUX1!x!V2%} z?Y*a}o;)E)3WnWc$m!PGp6|#d+QuOu!Tp?7h?A7&6iH%#gfdWbvpWNdg@Jw4?PACB zcpNSEt$Q^U^u5Tt@tF(m)wR7+b}3E?)AUjpCk%uYX_+aljh-c23?t{Yj)MshakDq_ zbmER`vCCcGL7bwC#RY8KVPe)@u)Zmhv!3@6)%_}zsoq01sujBCJ}e$=)fa29# z^Zhm4uevf*pZAD3*g_gxqs7;ik>&i}%%On2o5KQ9g8JY8jO&pWN!zL7J$07imm(S2 z{E1uwTDlOA3Yg+_XfnYrqWP2d%$ZdDQmQVHd%1jCSH8+=Vv61lj&Lgm{8G-In518Z zah@e-?v95Z3aFf|-WXN&%`-^s8b=Bzn_gHGC;4^^V{8#Ws3xVIf=tPG3)x0Bv!yS)x?r2 zi_KsWEG{_ZY%_M(e5$oW%^$MhUv3Am+NL_Soqj$hm6uy{jxSaIHLIY8<_CMgG%x2h z(yvxNoSrvNd9ji6yCq*!=3;q`m=eXYtYjm{o3?Hs7$t8Et_TxQ&MTAt{mH`dlBD0o z`D%fFf*@7rvnQ*g+|*J&S&(MALuyWT;A1dk%av4yveVoiOgIxtc2wXi(Vq9~xNu($ zgN)9eC`x6*Gj{?6B5~*yba1WSTgh|Qu>~%twdGw0f?wI#1?{|LpKuFJvbnG?J-dzb zhj#)$m@99n@?-ROt_OcUzW=63#6$E@Ptn0{7mCKETD-kpc$r$ zEdU0+SX&M<`~#W*5;&DP!3372(jfljvsh|>X!|5Qao6GtYVBp8# z>a%HcxldfMyp2`Xs(%D5-9EZmNgjgrH*Y<3L|<;UHhIAQNaZRe;pD35@t3BCMT6A#s)YaTS3`8i1=QY7-^#3-+z7 z0K&|d=O-a$!mbC+wQ1aR4cI@8`A%cOT)#5nJUbo0c)JsTyAc=4cc6`bKbHYfpb(Ly zIevigAQWvjj4u*J${ZPx`dk$>&%0IsnOCfzIstJtmPAq4(E{~&pEc%nv+f3PiSY&E zJvqjeX0(u}zTT61Vqgphh*ez{{$Q`qV7h2+q)+fQ)`#!?39Pb`SgWWgMhONvvN1zPTis{A)7a4mMbHHKo3?<)u=I-yszM0YaEkR7t=? zq>kB{bw~30VWj%$WeC*^Rn`1Eo=rQ6y7%L2CcI>91ss|PmwA&uuifj0+opFvo+F{j zhLC+17P_2~TEXktz@EDwGsG=XA+0h{&&!)4{S2Y8zAJq?VRo!`9)y6E;J!t?jFL=g zu6HLCN93aZ;~O2^OtmM3-R=ZGro(YKi6fW;Nl}w-d5QO*KD@KNiLB538HpH8jT@;+ zw5u^0-=C~|f0GO-1XhIm_NT~gA7JlxJg|`rMO0SbM$g*BrYz#h1G6Ge&)D7_7o}=|wPso6#07_# z$(_^tl2QcMPKaY=MABNu_5Y3;nK)`(2rw&>Uy)kLS{?b`G0>)d>!?nUZk*o7Lo5)k zILdO=-XIU4y)HSh`F9z1Zf&s$v{Xk8sqe^1|1=`;bBNi4_Qn z^?o|%GVK7IeQuR?n_9!{-#15E!pi{cL&`Aj!X`wF{1;LuMt|Sb%cHDj-uRhMI62k1 zH+?k$|EG=d%%8b`n4=8#eZD{YpX9a4e&&cganWMtdq(&ug`iLRZ9jis_6IM^)dViX z*L!uCb1!egY|Lc*_Jkg`EiBiWh|}#eVJ`fsr^h?1o6KyS&fo15zt89~#i@*-FJC`O znK50{ohdkr9(Fe>qIldd;mCC?}pNA?Ya zj;uj1tG}si_;%8w=_cWfKAWPuI?LVsCX+Q}KTD!MX3rMm_|%DSwqps}D5M^UF=sk< zZoBrZMM=|3lM;F){<9=sWZAlXB0J(+-=?_(MhxG zY`G5GZJBTUJeCP0d|zkhbiVZU)~k-|({m)1PFsv7*cSoQN`WO3zp6ABQ|0JxxZ*G4Y)bi{+ZHOByxz>e83V7h5o7 zWao#~emlFg>b{@WO|^*!p&<%Bw+SDXAzP!-c+2geOj^c3@b>bX6LaZYPf6z0g3fIY zSL~czw&&$C<^3G?N6W6>xOnH|?-wrr2%qv(-W@%7fuGtEV8YV>LlO`b)U6S~36j7G zzSO4O*0VXxTFiSl>Wa?!8i!5{-heuprTbOW!ov%GR* zZtU2q0O6Dh|rKT z{klzKKY~0)-Kc8e>jP$v1IFlfLc;j`^Z*n}M?I+${9ONc9MPcGN+;f1;85` zc2fNmByHB?^`koty`~B%K5}f-=Q$|rhbV6;|2BGCXD;a~KhkW3=`niTam|fHn1)7f z)aeXKTiB9PacJK#i3dP6r?-lTSlza?nvMtO7o%69D_>mNH;ip60PqJid2>*{Q5FBX zA#yuxYF?t8Z8!pnlz|0gX1!HXgUbH;%AU`5%?c#-^v3)>rXXp@r02Ii!eKprF}Cx7 z*A#x@3Ne}EHH9QXP0!DJQubkQX+d;=8FL};wFt@46)G^Kb20ovNwq1@gAXn z-tc}8NZW1<8K=ElmpU8mH-$>T3X63G2e;H`^apK!9{R46#2p53oP`rTQcKkcKim0y zqTJq##1pN4U0|V4h6oCcLm0&M#`qhF{jA2IxGun87U*h-&*(3t5a##OM(1Z0A~wa4 z7l*ehR^r7Ghi&M+u~G5VjY+Ux=tLLT><<|I5>u^Wb=G0U#q1CMEmg1Lj)@<@VA?6`H<0nM;||q zn|YMkjY5>?%UU{aj^~h~iYzYJ^W>|a&0)i_o|@5TM2q1a(1${Hr|bxihN`X~jU|D_|-Dety4KRLQY*A?mm^4ak1Ej6dGXTzp~%?R}qYGphQwMcDK zbn}|Z$RTmh1LDoX-L7MgeC1AWR*!;;-sYTZqmzW>P;S#c3m>GOt^wou#&K>7_;sbZKFtrtwAQ(m!+aWdM zp5d|g?>bGbBU_raN>Cr_%~vhx@Y=ch7pvQ&gPnAiRjvG+$1Q||GW&M)o1>E1i+ZXL z%IBBgj@8icIrd(D0*|>-tLvo)EsY-MFtxlcpErDUuq06Bd|x~^1{!~q(d>nxsc3j3 zmR?&N^Her7U2Q@OYNE7GGhaSiP?hk9HB<-cKX^&Yzi5xt;Hi5wZEW*G{$zFpAdZu-6pTrLbRuFRBBJLYwNz`WKkHW)A} zX}aji&b@CZhiBb0UYbChU?TJJmTSY5O^b|KnK*PRAXl)xmBxA+9b~@iRMd`aYV;$N zrQ#j73s!uni@LKLHfFLp`DF8FH$|t)So%Y3V@J^L9;%9B=&e}#jl|<#viI(eQ+&bs zS@YK(`P|IfXeb$>{=GC6uVoR=%A~|Zk00e&Gu> zzbY5u4``fXjtvgZ9~1YH$2}*;w;UD@5<#RecR@c2vz|4qz(uy8vm*H&RY4-BzG$3^ z0I)Uw^Pu)jfO6*D*Jqs$4#d)bba6x}pY6LHrKUkX$Sj}midX>G+2v_WjQ~_r-la!V zo}HRr$ysj{a)Xl^t^IicTrDa|gQwS;jeo6v2OJ7o>OD(J!@K;d*+?|*3EB!X5~KcW zwqxg%)j<_S?N;@j&Px#oDG1Z3CsxQuU8CJd{7GH*UOYfu#N_c99g%M->y%hhkgs`6 zYO#rNEoNVe)V7i9=E1C^{c_ZOilI@l^z(klz4-THgtOvH5!Gr|YL?M2QWD_eYIuCL z-s+U~ObtZ4p${F*G|Qgy8o}MpWGD% zieHD1kKONEiu9nZgVdiDoo>g{P5pjS=V!)1X#w0JxLh(c-Y8ZTT61Tm%87BRb7pT7 z680;=Ql;2ZCQ=dGoe$M_61&%-AXa;`_YRI^{zlRFHsC_zP~d8I@4c93o=&e47aBW= zkYZxXj?iI2f_cz@({xkB?SAZ&cM_B!+PzQiY#r0NT#9~cER=PI zQS740`c>NYZBD1VuF(RxPWs8VhAeHmh5@XGI&AYVQX_kk=i^itfJdMVYu!b8q})+e zhP7e~11jVxPa`XSIN?Poou8HVT}>Pz4Nuv=k~yd|eywZ;4y*@?O{b+_yJz}qbw-&ss~xUU33*BKq`NV18#LYP13lf-JLB?Jx}VI*FCPj1o?(miVgO!NRPQjQ?xGS zd@_@poold!N^#w@Fd!5GvLZNZ{!i@KRLvx(fmW zcuqRD;KNmzKT(yyhsUb^ReCo<0AkDyfGBOgVWwHvy~PifyNNEhiCwdcJ)YVBHN}06 z?ZvF@(=%VenX9f^^qaP$lgh6>`M9fOCUuGWNI#@(ojAakjA{dtAWiwS!XMS9R;2DQyw?g51rANxF@f=B^G zYmj>d>WFB@A7HX2%GR_Hu&h$PA%j01{qzb;9AT)S{!nR1?-XoL(G9l8b=*R1YZ^km zHG7)XnAbSnrdHj_{QlKUpj^T+tNTcVx*nE45OOEZV!?pr1o|P$~EGbAgF81kG;0e?AL0(whrl&*(N~9_5|hDB#JQf z?CgO^c5_gf<{vPVZ<`S)x87?9TxCCE}V?6Eo^IBF&cRJ4W#4FMrK2MfN`7BMJK zt#n^)I}oQ@R1&S%-P#<_bYd_&S}>8WMV+d{6}GrC9H8^pBsUclw|X+6txsBt2*zdx zH`A8av~U2jdRH8tanDJRgC0A!T!OXW9xS&4-Jc-(H<&BPRZigihzo1^yGp|nV|y8KFqK7sCC~`Gn(W^ z&V761>wVc&zCcOJzkHw~XfV)%Kr*ZAfb%rK%nQzYu{T%{$R=NDd>$_gH4AW*@dev% z%yv~ZllMua=|E9j`>rQVy&E4k6l8IXSs1|NPb0{$X#Ul3e|BqHKm}jBbl{`e8Wzu0 zf(ShTO*dv6P6hD)5)sM9N6{@g+t_y|0DjZ+mRWYC@lISpfF43cPz}WM^rX2dc>&Da z;;E*WZZp~z;p3h=a^9BrE1%(~TouWNlr-kRXDKoJJYJT&xGg!ee>i0gl7<3jRBMXd zMhdH)=)}2rhS#IbhRO~2X@H@h64Fndaz^`|+QtF)J7Ci-d5j<2K5kYkjx?d&eGCc0 znl&JWw;dYovIJlA{T!Z$Eb|ZRqMP3q0vza!WDt3@x^8wx6^GJV8hY)e6K8z(Zl0Sa zLaj#Q82)>|*e2~WzY5uQ@<-YB*x329Jd|t~6i(Y%bWE_V=^*`$A0d#rD;MQkp?{dZ z8c9Qg3#yK{tP+J87ggYUtSKd$&fA>tlAr)fHRYlIn(c$$^VJ2$d zJ)Se2!vAL`9nEH$Ug6YA32SJYowQRle74)jAu?0Yq7l+=qlnWXi6ZAv6td@FviREM z0&nIAwU{{$uV0JJHWo;K?m~=pXFASGy_Btv0l3w(Bw$Z@eD3s5Mv=+*D@-w@2`$Jm zP7>DqLLd#%pE&K9W;NGhF1@49R^$;h+Q~!nR%)(%sS=m}Wa6q#&72Hg!3CAEgD0w3 zmR#LvF8wjNIwG-8-*_j~rXVNYAP`Ns(QegIxBQ!|zdloH81ON|z(|6kBB&7jFanzC zKX~uAuUY#HhbDus4W^qzQD~CFl;$ypvGp#wX8mT(6-to>Ch_4EMYj?&ZAt=l?W*k?`%jwHDH$3AhZ zV0IwLMigc_k~yCCH~B^GG{H4`UMqPxs{l&Vk!u9V+kp+If)7fWHU8EOR8giQmg=}3 ztZmocf-oFWh1^Y%wF1S^u&+7vR4zSoo&tDmuOw0i6ZP~!QqLz|eqKkI-RrljT`i#I zkm57}4hZXjWSmQ`*$4;J*sc~cT*Gye3$itCPo(QG{Or!YQT;|J>0+r4m-guqTtQ9> z_Nbh0qB*_P!=dkgyX7)*rTw?(wa}uD8&^9LFJ2U8X@v(UfDo1q#USI7i z%0C)1X-(d-%^H>*8hh+*5KZqz>q(*v3EF+#VB%*itG=9-JrX_3)%DRxV`25}))THi0(;bf! zHQS794keF!*UJln(F&3`=k#VJYuTP=w3ec7%NCFx? zFxJT!%gErpneBTcJ7>9P!J#)_0^FNgQ1-4P+|xydjk@NCRmGQ!OZ!dVwyXVwFs`B6 zGc~Bi=O#QPS6udU?lRsq!g~;AhoayQ`X<|CX;DK`&X=83rxYhEC_0Om{nn3pH!Kx4 zvQdcyNg}~@Fe&f&#$rKh74#rjWVw-pk&@OY48_ckC_x7sb+ot?E)%)vEhy^|%}64P-pt;P1a6y0YRPiqM; z;i20Lbf4xzM~em$P1i>U{plUP51n2UC2I5(rkWJVf)W3$fh9@6FAGpOVgg-k$yeXbl|<&{x=KwZ%}yzfrcmlT_gV-p%HTziPP8etCo!TbDk8DO z6?CEN(!{r<;Ogf7&GerTURhtUq~R;Hv0>C|fXKVTXOB@>@6m%fj4~|C(^?A*JH0Ts z28P8UGLW`~1Yd;VRGsZ+BHetlx!-MOI#%=Vp)34kR-V&~h(zce`IcG=RRRWuAo)88 zIN|Z}jfsV=FUinMga1pJGsUR_0tBto^ha{HeGPhp;6xGTj zXfssWU8ejW${i(rQI-n@*yJy|R*AFq76JTg`b`C!d)ua^a#JAtY$-LZ?^bl@taGlx z&Kc`+dFnme8(63dTd&=QvfeK}k5*fk2x2ds;V0<#;GuiIn6mjU`#=aQGqSd23}mNZ zd>Z<}yU?i93#JGCGu@ci2h(3_t8Vd$-cVMWCAO*oiXd43+z9INPA@3?mG+sueZO~& z@HLyQ#|!m`ed=4)&csVUtqX~@i)dxf(?xu|7EK(Q>MlY^iBGHas;Q*@SxA_=V!=S+TtGnFy(6M;d)6gU`#C-lhnw zW*+QO42jRN^#YxV6GzfeXC0OKNhheNin>$K5@uh}1n+a5=+5j;&zNmeaEq5_lfCOjg?&R!X9}+#DAZ+p!KtInqxr7| z=VE^@5(zPmgD(U6*UOD(dcG}(99UP`tgh?71U%4MNt0#a%YO)Tp5X}zpalk!)RU)o z4)jb?DpHvhW_v+PX79|w|2U+c3*73Dl}6a;%@eVg2Otc#e zNuVwHGEVotMu#UwW^^UTcG`MfscqIij-Im)%5@NBiz=nQRpEHJ#M8R+JIYuD!0{Y_ zGIYKxetk|>ZxAgTeBe#1Zd{hxeMwwj?6i#S#q=y;{P7NbPXKMJ z`^4p$UD%{3Un;4syD-pKlH4*Q z)(To$<6pnDJ~;3{lQ%7p1yEq`N#~@c8w%ImK!kNSLnHd9##FgQQ3vHyV84+g;=G z1m8w8Qz$~)hUk^mi80)R^>bJqKu$0Lp6}NINgT+V{_yxlger&1TZ1wqo@8!Ka2bp` zP~Gjc53+sR#;QJMA17qB0Lo z8ZA`hLZs0cGO}QBaZJ!jZ}%$+JglE8v%TL!Yh04_ahoCMQ1a6sMP!e6gH`cu`jxaX zy}v^_6ad=MP^IWoW#vtYy#w*8drJROwl|ZrSLll5le#`1DouqR$ky*HHb6W*56$Io z!uI>D=f~@Jjezvb_d9)O(Q{vhbZw$qPs==)I4FC%(eZl2tUr8KGx^^tPsK z0_kac&xj}dGd*wa6NU&t$>Qx8Iaz(;FIhFJ3tx(z&Hk)!Cf6j7kaK1Yrn03tWGIXreZOJNxvrNh|lN5H|d*msHdJ%OSSGd#T`D>TSow$*z$7X-nlo&u4eEj%i(2P+*~d z1zdqWKN`4l+j(pHpEfv6vQh!h%^Duz^+Jqcw%FMyppRRwOEZ*BTtFW4H)bh!_ zwkjufm`%=2aR)72g)lCmk!6JX@&sc+0r$sz@X`>Y*whB4{}g(P?^@=sBHG|2aT|5h z3IPH-d;IZhYp5BcRhObu@%m4FYMZyQ>Qaf?XS_}or?%EWGk+xi;g`!Vvn;!pIV~~5 zr<6tV1+5)EwLuvY!zHPsb)2Fx65K5~kF>qub9)H33*WmGjKg)6LZ`)mn*)+P zBG3=ZuEWo%@NEmz`L zPZ#VYnKdX1$R!_)?c19*&J^uz3g4y_02qRQm?rRry2WB0j*a#wklr@9DBIDCa(W?6 zKlKjFxu2Cn->XLQA0SblKnWq;EyZ*H*4FfqiYH6-{hG%Bzc99k^xOp3;ms`edT~cT zz>>KXNkEa)BU$xw-%I3Z&T$-JwaR9^I`~kx^)ITGsjJe zi9gsVcZ);ydn3vSNVBI~p=Qwf)WUFWN3?p~JY5zVN}**ReR-M&uXS38-GP?Y`vgW07WONhtv^nwA17s>|{-GF2Uvib3aUpD9{e+IcSs<7zk~K zyA_?v*3n}1GP@G5jgQbhu`|iFM$aS;g}Z5OE^C|qmyx*yG*|$D#EZ|k2rZfF>)%Eb zqDrG93Y*bz;nc4KOq@_Tk}^Tbgl~%LdvDgxp}SyWRRrJ5`%IK+YjKw)N#;~zZ)XqT z01bFBq4*^HT0=5Emwu_A)uj!01Wj0}o&?%5f-^S?ou8njLAua|g$;vT%}}x!!GEHl zaqZvx;bpk$-$sf<(a7O@Fh#HZ4$B>gsF{UJ2%BxGYBceIr(=GgTtAUBU1F!zP$+$~ z|5s?~cv$u->1B4dH(||tBXz5p*!PBYg7l%{T)G>OxIGT(FPhEJ+g(hy*383^+$e5Q zubaCo+0}YJTps<;?j(I~ITg7Bm2@wEn9*al2jhPudF)MRPf8ZEQ+%E=kR zQ2?!0(;mV5`ySTUnD`ipU#3+}eXi2`azv|v%657{JI$8-IHMkin%_NWpL<&C z5y!SY*}?pGHs^6MUm1iz8uPSCPU_;5Tzxs_`X0&Pg{jZdZrpK= z`9ANc|59<~ML}~2+U? zH>+FTU2I-@;AqBQ%{Q0qT`RKpuO+{q-oL5b^Y*U2{ztP`+Y}jm(!rfmSt9q#{!1V0 zp8szBLf$&|P<6CIUG(oKe^I>g<$T!AoAi$I593}V^Ze&icHxVk1wkn+aVe9(6$fX7 zf-4t4j(i*%_1|{ny1mT_Zd8|ohEKa4n{Z{gBoa4F(i~T3*)S!y*7xRpTG;$acj4od zUm}NHvgqB;<{O8P=YCXsZh3+K$aXh$hK7;OZa}mmu3vkSkz#y-pIcrsG1O(bSe4jV z)_{k1>K^pYxRorszK6Y$7w4KXn|L@+Ay<-PJE?m-AafwM&JQr+fFf_`Z*4niop18> zc2cQZp7MN&pl#8^6~88AuV;!lP~kF$f_9KJRmh!rvlmMy^STNzRKBx&Sey+#R8~>$ zaNi{@KgaLgK-exYX=FdQj1RUg9So5!NDS9@^|V92PqpdFRNy>U4;0x8Iw(W-^LIC9 zPnmtalT_*$xl#t9o}CT@E3Ud>;!;s0`le3vq2ODjl7+;q}7*Ts5L>FX#yLn@!O!Ud*kTyHp8Sk%;7C$%i2kQ06 zrM{6z%=<|uVx)a*@STrmZ3wW7=fYhmO+9Eri~BKWAiJ=#$+UlTVlX;)#`?ra`}1sm zxLW*p;^zo9xdwRD4rO~tY`)aTz5@tP#E9`G@Kh`_!vNK^u0#3q&g z0yn0i;ni*=-~PJ&Z=e~S@)|yc=E*bOL&bRkoQ2thTEEV0HEXFQ4sO94Z`BvmS#y_% zg7Zo!d0hpLmG8_S7XR2w7@F-AuB@a!Xxdf`dT}{9*C)GkWHi^-n_pp(Ra&`pd`sk; zt%y-S>0JW7)~~_6kcsEDl+Up9KJ0yd`~v?kBBov6`rbniy~xS$Zw#+X))KKj-8;j{ z_3v&xWKO!$>$wBTC|)QSavV}U)Y^B5Ie9MF)hBcOknFxe+hVsjmmek{BU=t1y(fy~ zYj=Ycdw1OBy!>;FAp&Kn^W;crV(s}yA))4*yN`(*YzV%8tHzJc?7Tcgh%ql$@_8&| z<`EG=m=2)mMYSr2s-yfR9~PH-4>o-rMP)n4yuo>^f%`lzP`vE z=TbK97UT#?T%e009`|<^N&-HT@k(VgCF;yhHeu@BY_O}BE`CcWncAD7i(lA$xG1&q z?_lZV#R~%Rcefb#!NACp&g*qVr7P$Ofr3!opTItB4o*81`iGy`K(c>wJp8guz+lk+ zajlfZODtTIY5T06kGtH)sPudiR^d(kTDyM zO(^zSgHYwI;r5N`+nBRbJLT2LHRduU-h&SW^9{Yet}kQ?NX~pxP!0XbnpWIx1;!=o zXWA)=w!E3SD?HojT+89O4~lB!H?q8G5$a(pt7TMvi~hC$hZ4Kt3s723CN1S}t0D9; zzvm}C{{Fu0E5*9vZVbv&$3w%BIvEfU%93N`#2msHgv)3^(#w!F{G$D1YvwYO6?d(r zYs%h}267scomL6hI&#hhV)fad@~`>nuF|tCVgCI;gnr?`YiBP(LQ&bT!oS^+S&#P_ zK2dDhp2F4{aoSj;mgk+g-;7*iLT*o<6xnZ|3yM|;F%eMIcc#2AuGoM(r10rH`^=$ay4_J$Z0ACIN?};UGb6GMxz@ z;7uRbfs=Zd<)3$1#=D|XLej~6NR>1Np=VVtsqI(M$buuql4L!aw(VdM_5D3^TSS|` z!jx%)&0|b7M^Vw-oLJM`I-YgKq@nYn#U$#{_@$BB($(}hmkJw>o&mAq)}5fhp+Ul) zXYi%J^2ik}!GD-3J{^u~jw7l$;yk&WERMz3sD$FwBcu*zXMd-WBO?Ya4gHp~`B3w?9-eDEmsz`|Q&I8EBpbWAn&tv4=;T|YrxaG>XmRX~AFv2;OsDsJ-bf$)lx@!LSMLosoM zj@V{~WiP{P9#%(Y#7BA4*%Xsg-U}xKym{^ABk+qph2k-|y>Bkg`hNSMkC=`6w?-D& zMRatr0%sc2{JS5`Kl)!vIe}HXkrQ_oR#7MB9-?=F+j0-QEPHk^L>Hfwn)seWyL$Wk z#`k);sn78#@$RmrXTsgPbe+YLXDmm~JhyMNQ{3I4FVteq3fP>K#dU?y*OE69btt^1 zY_m#!(4>BZdkjjd|C7YkeRhR|-dVi^7Gr*;8LFA6hy>Z}kS~(f^9N>j!UD z_P)5IwfMS0ri8);>9pt0$gu(kNcShTj;AHn*tZ9cpOC4T_6m0OFXWH&-dD~PZup1H zodkVE6||S?-=fd3V5L52X;AXUILWmIPC6Rub=^Eu4EArd8Y&LH&m_yTH~tja7PRfb z@x?*g?5XT`*~j94=HV^itm$7rqfQE!8Iq8iqW{G3beFO%VPdc)&&_f^(n)iC)bh>y zp1eA-qS_(Hy-ZI#*J3mX8MH5VYYV>PpXqH{f946Q!##U2!5Ch*Ka$~XQvc~_KmJkY zW3rHlT74jMZI4IA;{vhnwFJ2WG!Q~Vh_?Oe5h`D4En}y?BFMA8EpQ7~%8j`zU0OKr zS33FdBN%liY>4jOmK13{Fm~xGGXBj!iPh0qvqvzb7jHg~I=RQEv!3al_sdob`9D-$ zdmxnA`yXAm+O*p)Wpn9<4GB{*u9e+{qTKJ-%q$f#n8q!;ZP`i`F@~8@%cL2%GD)so zgqSf??sBUz6T>KjS)_i?JG9^Z{nZ~ePv<@7yyx?IKF{YlFPPu;;RRSZ5;8U{P?Qr$ z(S=$$8n+pba4AsSgy%j@ca#MWe`qcjGd>?n%^QU%1HZT+Xe(!=YMK4`6Y9WL1Zz)g z#uB&bp7-O+dTJ0xU&530ZSdC?h_AU4V+K{8%v8za!mwhU+CD=b-Cok<3E0%O>puAV ztpE)okqwt?{W;*5uo;ImtQW(27(o^h6Od&%2AfgqDwEh;R?Hvyd@TdN7^Agp)=}hk z-<@ugR*`#zMg#}do1Ms%rl{^&xf2Jkb9$LIsflVB9$kea6;)Q??FI8Xo6wv$S@Wnc z;(Fd&3Kw^&GJCx*Qn=|NRHY_|u1mVZ1AS8WC2) zl=L#Y&(Kfve%J&GEp;Kf?yDwwV43{1q`7$fmwedZ)i`!5S`M6h`DNljp-AQ7-Zz&Jr1yyTITmElyyaVXV{;TaabvFk%B6-O`TzF z*AXP06eE*z$gAGSHikS;WjVjdX1?ytpJw#uyIW8t=&OSnosk@6S=KZw?EW;$$EP#f zme(|=+&nP0LE@uVY+(pwXfbAo`mb}nsbY0l@?eB|azca~{;V9fMHao?v^_dPcvl?E zKdUHyeW~2uwSB(YVUJ3e-8JBhE*>UHM9+~&2ig|l+HoYcW5@20QaB*iz!dp7IGPm% zcsYtJ)07?O0pJS#1vT(|wdD3W4rQ-s%+Q9)+Hlv>hZwO%UN_l)L}1qt-THP+ijr2@ z8YV93(aTT)$Ts?3_5718iplQtb{(=NOqlX~_XcjPL^okE)~iRU`xK*+Ouxncs6=}E z5X(I+d_EGI}<5o?Pq83H0PQ zJN23<6JAh1`0AcQm<=ltt{T}(s%XAli?*9S3M8vVonc|uaRm-BkBD$-%DMpb#vozzs<-33<9Js~fu7Mb% zj&y6c*SeZeftp0RfsCjbGBIZR8cyivvVILTy z`I|-S`ue87{pWb5xr@99O+lqz@7QC7e?#q@KGNi-Ylix+0jN^qlhrLfM>3(m1J>^= z4oh?|%#&Z0a7gBl)X!2pd5Igkx*N)hw0ZAF7dUqZzGdz??}*TXG;K?hloBUD5nMC? zu}<%vT^`gOFy8g`0bfU`pdV$;YO!Ow>#F02$D(Uu&NWB$$@4p~H4>IX>#0@kl~Q7` z7^q1Wb@~OwIs22!BYdKjgl-4(#3ZyjfAJ^t!Z_)|-qo8gg!l(+8mOqyx|&ZwXM0`! zwVhW9dgZ7iV;vjsjf#gpG(*5+{)MqKJDW{*of?*HcQnmu>YHl+;=*Sou1@Wal=w85 zJ$Yoz@({>sHF!*P#G3ZaIg8xO-R0!CKQo{k#EPSY`uiVXI$c(iTYiHFV!k6gjKOIy zkP@AA-y#zX;clb;eY*ws@5=m&2tw2B;04X|cwYpG>DGp+xdpK9Taa~ERG&4U%Y_yk zqbb-wQs5!9e=)$K&CuYYHV;X6iLQtfaidKaY0lF-_FonOnPElBRkn213|NiYzW7Wx z=iU;6M0*|i9(0RR?KGo^_Z{WJA`x|dpzbt~FOz>XpZz|6j{3e1!{Z$Vj*(^4C*>G+ zc^aO~sm-3F6np&g18C&cIMc5aQrp|<7}%e-h+~4H3Ki~YetT@_EyJt0C*@U1Q*UAf zINE#!?O2{Dtx}4obnP{q=q-F%RBd#a5bo#sYe;|AvOBfJNp$@FB1;%!%!hKYrdVjj zS=n(3Sj`#j0CGyB=L znVK$LHMz>ixMHfPm*rP>g_=UA zK$A#Nw@mytDGdC!ZF+rdkZ5Y`GLutjl{`w-fXvYzntd9LIl3g)a%S|W2$7%gfa3To z1;a{l#$fP^IDHz)jO{1p$&EzAFVhUhr}i$?JnIv-qx5j+Z;M0>b>)!n6WhOSr7iSEd@f5tG6WVF* zQI4bbx2>%bZc@^uL-`wdE<3vcR36`kN4wKfpc%pFg5<5pL}jA)zQhwDM)s@LIibYj z*O|2#YQtFYXjHZ|Np~x@iq(iv@SH4IoT5Ky$m{<^DPvEJ-t38NR$hEDxYw-Ehk8t;P$qc`%lDj-t85=%Fy~nCXsh)`Voaa!Wp;f zjQ$tBA=dw9>k!Nqs{2!zuZbhplm0Igi1Rc%VoEB%*6{9!1KP!J{lnDqbjz~-$0l0x ztddt?*Mof;b~pd#+|`TF^wxr-&>p)bGnYh&1yFqCzpM9qy5^R0@%UhQ4NzU|7iYsMR7%2sO(a5oTlv zT;^>4^nW>nZ0E=2;u9`=mw{R3&S~~ovcD6;UXYYu1IUYNwT0E^n-s?keN+J#hCb1Ma-}vHww#Wf$m#1%XzErtgihw;uMbtS_mJ9)J+wpeGDC+Jr-h=53v2O+MZjTA0x74r9 zipmVPoVYVRVO@2MEqSV0+1CX!xi>Mcz+S0A0;d7<{jFAYM*s2 zlSS8nOf>3^B~ zAc^zlXLLd(h#$-?VwPVX4jrVkZdH-e7z6$rvhK5iS2vcpnSSV5mPlr*OA_A|nYMV=96 zly0qBkM2yP7rLU#J*F=L)^$$MjSPxKSILr*swXY<=waNgcM47j7Dgo?uZpJ5DO3g( zPN2IlR`b}F*=M5uf560Y2KW zP}n}-An#t3wklQQ9%aEz7=)Cy=%Sam?f!-R!3?O*rK*;DCvx>Pkt~LN&!@y)aIxQ} zFTelGVyK)$39sl}16=|vz~&4XSXVeutH%%8z#V0B7?$2^F0n-qO&@&8=o`QsgrBp*RQ*IlNmwHk>j3kaOO{k#{Eu zP&&S2k1~gQUEV`+UP+ zKcL|qeBpvQuiDQ2+YNy-D5>c1^|Du|62mB~jXulFh&g9v30P3w+&jy|M?6b$rC#lG zJFU&G{`qN*LjI5qyhF<;k-AxARk^pg#~F)oHjbzvCzbgxZuiQ$)ED8{`ujsk zLPEVK##Rs_S8d%Hk|b=YMACoe6yqf_VPsv@chBMBjI}?S4?$yZ3NDLMZI@uRl#^Oi zgIXlku@JqBd-720e%R0JNMfCao(gU*h#G9)CA8XrUE3eCW5?7xvfz8c zc~f*%;h?c0lrumi*NAP2-YKx_m&xA)Z@Q3P~ zIOmNWdAUf=4Q5}c>W$5X@}JySKHvADvuNhkba6!Xg|E>T@*m~TSn-cOOw;-DXQEsN z8bx`I=%DXbw_PT?dd*cI;r$DLdE&m9`OXne(T0JW-*B3RR%YC}a4f;T0qV6Li&=86 z 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%0DKQo6)R$F{*nm7$AMeGc)=-

L~Htcp#SmDBvyuiIfDN9`Dz+lcE_lHEmS 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 diff --git a/resources/ios/splash/Default~iphone.png b/resources/ios/splash/Default~iphone.png index 4eb0e5831dcca38159736f9672f3b8245c727947..ff0484e500fb5fed5c3701a4756a18fd3ca5de11 100644 GIT binary patch literal 8612 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 diff --git a/resources/splash.png b/resources/splash.png index c597baed247bedf3e84b1a96fd25ff934aa5943e..e7889ccf91e612b8a62d5ff911239c96d31360fd 100644 GIT binary patch literal 55907 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

CNLufl*b6as(quMR#({!th>U$wrya zK*EP>DZ98onF2*0hTH9i+u?r%3j(t8;!9wHGK<{?awEDgXDozP%4A*(gGaYpjSAQ# z6-xOUOGQtW@(jA60n*64`SxN?5t=-OT!P&0%xXRuXGf<(&cF)1M7EOQfye z|D_^!E`RE?dz5UIEwUbAtZwu0YETg7vW+Eeb%f&_ zAiSaT_8pRL@#E26Zh?ZzZ4HS1v0VqEd^}~Vx#NRWUv|~l@}Kdl(FjL_js^Tw&r!3o zKoIC}CsxmK&?glEXZw0Dyp@f^&Rk5QVMisX7FpGw?sZITyG*uPRAH0ZtMaVnuFT)s z|1={Q+g3ih;2Kt=i^HF!rr-_E$6C^sL)Dp2XV(*yTV!hMajIA7zuuoM)c0y^?W7snSW-sb_SQEjDV@z zY2LaAK-|O*NMxq!z1KE2cqA4=6@I=!kJp!V-i(tmHW@(HO@!K9jqgToITtLxfE}0G zD6Rc0=qLz}$dHOg0em2Spzz@zC2Wrv^6jq9D34J>NorS5Gpl^q8|0+iXDbNrr&Yo> zHxlCs_dMjY8_N*;^@_SJ`=hJf{X1s>xy1S0GHGM z;drtG+leA-mA0rQ3_C~^v)W$%egQGtUDh}GCw@)Qqv!L+qrZ#4_Vx}maONAEGi0u45Y*OoEVivK4<$H z1!`p_wG>B|+cj`r%PL*Y|-^>OTz)= z33FQkYH4kx{Bi;)B%Jc`%S zJ)ML^%{@a|Z6+%J3Y!oARj~7yjKcW_n+IafD<9Bu;AU;~!i+>716^InZ)69fKM30x zxSL+3)I>Uk`DjxdVU+_{YAR@b55^FRP|Mu;T+9m%=&g#eYC& zd}t_N)g9@#L~e934r3{&`6NJ_3L58=KYwC)wbzuwo({Esa78z)~!^bw)v{9bCq=Q2E#SVdIhC2dsnK z^)$bKoU80l^hBztG*A7bH@uQECdIB&WZXO^5rqntyXAUo(H5LrgxG=O4wf#q9F#Bz zOl}ZTiQlWXHR7p;Kw1T982XV`RhE>%0cYl%5+uy+oBZYk#jt*ZLdmxh*i6jJWt(i( zVYZfF2~3oXT%FvW?mYsFZGG^b8Q-MlwpJfazOH&KHfIJu>5Zub>Zj&Wqu0`d*am)k zrP%A>%7EXh<>IG-GcbmP@2?ha?dumqWN75`m?uoPYR_SDtE3N2ML2~c?oZ=vi#kB zC+Xvloy-DXgzetNe@;uS$pI2HllUxg4w3_qX4$T5<5jR4m)IOo=Cz!lq1DEH2dj*? z*x^(#q>Tjy3|D%`WQC@Kv5AC;HT$2D3GLs*{61do7o6^DtcJzgSVu$v3lD)P-NqbM z)O~m_*7ct5&ePDT&6mo_mINWDUw`vlpGFla+?iP37#99#f2mPdWwPKNBTz_7S=wJu zQ^_8&Grt(YHrt^kNNcCyV8R*pHXbR?%{^Ld^s`NV__SHm=6p+9*%9|m)sjy( zU|dBUH+4sCa~&FWsE&%q`vJe-Uq#D`H(pN6)yzxOy{8+Bq(#BZAdDRs>aJT*J1_S4 zkG_xYfFGXEXz@Rz5Qqrgsw2vY)56^ET3R{{$?Rzp4yJvJyMW3i$k*+nLyam9X@kKO zGm-d%RpjjsuBk%d;aMg|3~9f`1IADCy7>#PyZ{1labjQ@ko_H#0CMy9KNtU{?yuPV zEjljmaYT1#E@cBrJeb=|{;=|j%9x%{%joMT+A|kMhc&vB+eBxJcBV}Y4 z@wk|=)a(;8sQENy4bu^9{nyc3&hR)cUx@Cu=L(*EO+&KiSN@d*JU)7@lwfr^u}CTs zy^{v@iV?k`8P*uM1}-5%9oFqC`~Bv3zaP|dbV7ot1TZhprLVf-qkHG4y;Cj1G_r$O zK3i|ts0qLEsZf<0GC<5bmXjx^%a&dFPP*dhpj^rL-3xy(-pu_eUQ=^Baq4qIFCdm+ zgERJ+F=KGn=Ci#5U(yiBKvrzp0zpfTpNf=EKsdiT2vxR=(64_)6Jem8>}xeES?%2) zmn`Sogv7ZtR?Iz)wbTlE<3_?bg{Uax(}}Pp%ny# z5NTgFS_oz8EWNF|n^nVYW>L>vhD+wdsv#Wvl;RW@k`FqzPn~<`7{cJ_@=xY-<2j8w(WrH$p zs(mOCmZ8NepW~nQ)J>^utwm7j!@2B-fkPg0>$H$9yz|N=GP7!8AB$@Vk$uR&NRW!N zi-d~pdyO7{UJh+u-gG@_GxG&`eGM(>ooO2>k{?O1sQT$Dfx6sUA;rF^ z5N2lIsHE@^Op@oso$;PDE3&n-9-!&|!>DW4tr z=+&f?`Z|4NtfVccf^A+;Yw~ipT3$w^dgd9(a)af>Ta|SvD=G*(tyTO!MhEVFEAabnc4b$i&LigAh%|O<}wUHaWWbXukSah5jM? z92jj#U2#u7F)2R{ZveedX!X3-&<~!ur@Ozl$e-73O~`cE&sF#JAZO9SQn{szl%)XX zqQo|jbRg4A5zX>7*XpuwjXMhG?VE>D)vkEfro-3`9z;o+6*ODkQ4BX=O7N%&T4*g~3R;k)Fgy<|VLx%?IFN-cT)CNATuUMZe1lBRg$+Ltni2q%gB0Kt z&$C&i{pk9$83nHN?oFODR?PL7aYKX4J6x^DYIvyxuzHJ>KY8>j{dI?p*u%BQdC z{kEA3?3B5ayiwI%QyX)|Jw2{$E82CaIGu|Sz4V|~bLs%KD7IeP-EQfb)c9?4$&R>J zJm9LnW(2&`fyR#!6hFZqeuW)Xw_6gCcZ&`^FTAbaMIIai!{y>p=`Sl;gQJ4N{fbJ$ zxa?a-K{3wFBl{_eP2&Y@tDTRT^7bhT%#^t?E-8O#0$`85b(!EuO*?uU`EziWhJJO) z=3T?b_wN*xe2$%^;KddtVJ0zc=dpXHbEo*Ys`{%K=H#6Gsw1Eq*Z)O!W9FhreenyZ z9bv~a_2WA2>u9wKdTtYLJl3W&FcTE8l+hx!9>WwE+tN70 z-ESc_V8K{sKhfiqYX-Z(Yjmk0jPH|dRzWkQdG5u^Cw(B?p4y8Nsb5z-PsR0BvGV7> z;{x_ksmSYa@!MwFuY$PK9gLlb6!ieVY_tsSEja8z-$>cb_85>qUA24crIMq0&Q$zv z2Yuvsqv0>Pin^lMy?Wy-aw2^SG@2LFl?RB9p5O7UvI1g@8{D10htisnrTb+iBSUsy zu_EsqE<>|@+3w^Oq#e?|?_A}rDP;csT>jI8BWaALwTkoOkt)Pz`paHztx)wW^d*Pw zz4!s0^M=9i-P+(bwr?wG__=MfI%6B@n2wd%fP?mc4cQN66sS2f_=9I|}b-RkgV z?P+fkExNa+f_*_H`s?2cVwB3co)pDusqD~82|D5r>9B)^cy|5l-;Uo|*gz;h95;pnrg1e(1V~6g<{4To z+OTks$Wcg?sSyOtqmza5Wc$@4<~48=k#;JY+r5M=2S&Vvh$X&C8rLR`-XP7Be<77U z$5kSF!{^^7w^7xvBhLuK=1P>_MCXW36i;^H({rqj z#?AI@3k`PTV|RE|UHS0N?b z`6tugQ3h}`+Lz6!XCcCSy>8jeTt*Y}RRuxYLnK;F6Bxkp(1QJ*s+iQ^@%mC!JKq&O z4X0}eSxGg!Mr{J4x5Cb?&;fa^!f0bp{HwpumnyatzUQtf;Q!C-8^tUEJc0tpMu;J# z7>Xy-TN6qZg%e*BslMCs#Oof%pKscCe`*23S{#Hup8qlIt*YS|I3w~ByBYnq;$z4w z!IL6lv|?{gErh3~B-d(2s7IB3-~K7e_Pc!Yln_bb$u#vOJ__yboaWEH+TJ)Pwav@O z@*4foggdAZ{1Q+&Kz}d2b)acg#xq}Ffyd@7 z-OX(rq28BihhRd-Xy>W^Pfoe6A?1jyA@%UbfBI3Xq$0doDS>=%eB-p)7vlTPM<7ziOC zIa%a$kEh$?DHT&^+!&jfb+BP;Dx0Ns%WC5!h&f2KkBsx6QF#FoNSUefT>y!guMqUIH2Mvxq)*P32JO7 zzkwbK3wjDJ{$V>lv0rhXf|wd`&8keAY4r{T_JEIhC81bWex%Z8q`a50I&~Z2Oh49L zATY?OXi^MNncAe(c+FBmwjt+&tFCU+XB6u_pNt3X6*GE}*$!b5D#6Z0Ea^#KFmqOCPKzB#$2(<}o#X6nxM;S<-v3W61~ZLI2m zZ>XK=GZ*p%ZJ19ZcZ?<@0%hF%2y@uGP#ZbCC1Iyp1>va!mfM)jboidah~w?VpVaG{ z40E^No(1%EiXGT&02y|t-oOhRs^)6LyxI2HQ!85jiDWP8m)`k)C``c~Mqrn$EX$9O z8*VA{*z-e}?tp`lSAu^AzD%vu4|?(_E_egP1~`ZN2s#BY*s%h$G5ETM>U?<_suy{2 zD#Vox&J-S>p2>oRIn=w~_1kk@#6fc?$@%E}szM}KhBv($v4hFS>-?h7h);usSk*tW z^&5{`Ofoa6_9teQp?1LCmHUrWeQ$rM`9#Zk;zZ7Q1EaNh;eWw6*!4)UwG%dT&p}!~ zYTB_S@vfV_=j2epe1d9~H^+g;;yj`G>?puyG8wQ3)6DK#dTM?hvIqS>w;xb7T;_ zp*Uk7Ts;EWwt8^}__c)MPj(@k1yS*CpbBa z@SnzG*bmK`qhy>y<3)vs4!T0&DhjJb6@UrncU4eVzW@hTWD3y}eTL?PztcPI1n!!7Jr2kc&_GECth_@>Hb-{u-C9lJI3U1c3FnjEa3q|YfLsWAG}&9D?);A*rr%>eZE<5S zgUB)oW8oCr8X^R%YgmJI*X#oQgJ#3$-i=n5pso8;)aJ7DvCWZJ9U5DwciJiK1BJ8U z9i6$V8_*Z|!4X02T&Nuz*OTd^Ps+Z_B_G|Uc!R$vAmFsVy$s$6iFLGO0#sQ;Us6@y zIg)J0KTgc9Aec%mNmzkJ1sO@;dn~G)?ojsS2^GUUPcHRxr5zbd};lLJ7 z+j>7cRiwwV`&dw*44_#V(7rLeMznfocr&zo&FC9El6$o_*9ttHvyle&p$2WUaq5b` zr9Le7q<0F&)_*&`vU}WDeh+G;8)-ASw;r%>$EnxNMDC8Mv;Sy(W?awsV?s-EfqSjS zTgJEZV>|_avWDB{wVBQXU0OeNy5Vzdb1@bRf|&l(3mH(g7a%Fb=Hy6(9e@E$U*eF$ zd+R>EuHjO`=AI2}PWVHOO@>v37XS7Mm;*t{Ll$9su9-duM3b%}BSXBe>3K3>wB&lL zP6GH8CgnB)q)C+<7@N-I*ijxRjp*y@Y{0h-$$0=b1lI2k2Q1tO+t{L1R~5e?p5TX= zOn%_DMJ{K8;a-2PRSsBtCHV^in%9U^kz%i&jafbAvll*E(?mxz2Laq&&(L zip(-H@`^?Tx%b5#&6->Fthp>Q_lcqI|D79L!{@wA=GMt7d!Lt7InLld-ApPn@5Xc{ zseep)Etedjyxl*(u-1@nr29HIqIQ}#8nB$J$U=yS$!z7|#+1&|t-D6YU1cG$+v%Ne zP-2Pz30XLpNPht0fcGY$-`)hgFYW&wB?k+(T`pgB*%-S?BjW-n?gnbg%olhH_o%#O z?Uf!Kt&v++Rh7YR_0KHq_UkK(BtQNyqIUd$0bZcr9?!Xu!QaGtoP8E>trb4G@)YzbEm+Nn48m45ix zsa(6I3XsHVkw)qi7tOHoOC?8~l&SVYa2Ve?uRa@lQNapeT@A_vym*q2v*LZ*c_U;j zl?;q|Zs|&=98Xbw+_S+TNI$A@_j7xf%b9!W@HD&(cIQOAnD2ig6q zl;gebQ1V-`u%)QBP(Lg~-PtEoLv5G4GnX|8^p}M1(3+B_Rf4W$3n}nIGj^dVyM(+X z?XwT1^w#!i{XciQeQ}F!QB!fl;IroD;^#k)`aSwBTS%8r21|3$!exP=xRu>B4J;XMwiDYlVXB+xhMhB#r${HNEsGKK%rVUcH1T zA(Mfx-U-B63u~l1hE!_TN{NQ5CW@XYNiH0r11$lBCs)2<5-*3PN9EG;;flNciT>%B zkMZ;0K2NAAFL3kA0Xb|IN1Orq;^XZKl9P*Ks}+^bJ*+S{DSWpxth?ZP{(e|!wX*Na z7RjZ=!R2E)4nSjGKtR~p9dDl`r;CZnQL$UV8{({=+?)dC^V6_obmx zpGZFNVinjEp0XF_)$h^_&7y`zJg5OeI%%dk$4Zh*EC2w^dr)tx`^zPW^Uh1@KPie$ zF|T*(O86`IWs7V8^`#pUFnks>zZtsQcd8ZT6pUP6O?1%7$BVtysm8kk3F>nXPJ@PES@7;N(7@0?$H{B!}i7LLH2R+Qj~ zEu8Dq%l{dW@c%e+lJlg=EzV!gb@;;n-^}wg=yLFXdjU8II0VR{TX1jyT!&=v{~H-_ zX8n)=4hevR1K>I&fI|ZK7YT3@0vsaghXoEv^^jB#UE$Cb z01N!Db*;nn^#A$v^lPQq7Y@=-Q5xF1Y($S7a{nRs|6snu4%tIjICOS08mz-f60m98}YbN z4fr3@%X(Vs;1JjVU>;g70N+sfXj}OKKy?KDivgM0tnek-bsYl@vRR5FRODPNKN7M4 z;08MC=S%}8);{a`AJ<_d#&@*JyG$P*OYc-FJ&_2gN)B$N=j47oDbh^t{nh{Q3tWWo zhv-0y_}|Bba}@tR0aZcFzmGU_zW-j5=lwSloJjfaCHFnX{~qrdp^Tt^5PIEz9srCjX#Q&0s|0MCh zWa3{*{4bgK&m{i;OePMQ&`Lz#|IWXcdAeTW$C)dI_Qx7`-mxjhWT9^s0X;Ieb%nim>p~ zvnAKAtWqBM2H!zg`D7PvJz(HSpC9&Z)0>r3HU%D>8HaY-H!mBA+!VwBdjCZ zH^RkwIP?`IZ;imeJ)8Moe5QAzHGG3tAxv9(wnOG0TyY(p#$1FBl}M;Oo3NX*j6PSW zqe99RxOgXbLai89pg;oJ4UN0Nv#FwzeA3jbP1agBIt84p)4J;hj0Eg5Z6 z68(!YLbswMQ25hzlMbKJ&Oiyj;V>v0_(yO=(^jL}3HU$ch3N8YujaTA&O0VYAx{W5 zVbIpvUkvMZq$X->V~@MQ2)Ep!U6+6}l~Bpplg8ee)Temt`mHzf=2$=6_aR{sYNuB*En4lH91G91^>nx^v}H`6M-uLgA4K*`%PqRZ!UWLevA zhJDY=5#zEGNFxJ)RU6f8Q{O(bMfe=cSWH@ST9+9V!#}E1an6fv!Bl;3y)XXmX-o@z ze?1?SMQhJ(mR-!#VD5%?_6c-9ErL8Km|rxJzTYvaq44Lj!NTnr&`oFL_3ZM=_-|h~ z?{KaP{Q%#y5VUD$367tsUi)%Y*~ab18ydK(Axg_$r_@+VC`bF{pgGEUS!X!^G`fo5 zJM%H0&}#9|9dZG^5mW#i5NxunhEvugcfj4=FZ+y*GzkEYP!B^cuSMTy+_=nc-hED5 z2GTZTh!SXYH~iTNqSgRo(Il+q)hH+}Uv~68{lLW79#9GJsYq_*e6ooFI8XF-Lig6# z3^=Bu^{_W9{@o1ZhZm)U{BpR56TotclrMfGb#;QvMx&}P;6oT9nT;E>yqU%X8vmoNhq#Q!2 z3CF!9tgR#ZXps(|I{HcW);jqD9RTIV=$5k;kNN0upDaGB-ZKB2LHo1e=1dDfEo%L^Gv*(N$m|o((#U?iE6pMY zKp(-ZDy=m1jw7juwqu45sBNHONo1pvt#dqa$`$Hxr39aJb&uF|J$yIWpdI-EasFt+RG z6V$>lY74*O2wxq}p1NqG9kF;-vD>(DG<=Pv$^!#(g;2T4y;Lx&Zn`0=D7vcl#!kEO zsYyc^2|$=p4rlm&tCr5WF-Y9Z(op!UU{S7BZ4AG;6TVS=Qcs*?zOb+~CU@l z3Wrn{qrx+KWKbaCE0R0=xuI-fmCsk?9{hqOd`bUY!0St6Kh|jPw`|@-O7kj(7XYPV zXk0j*hSbZizdD4|b@9}$$w=(;>%=es(1wZ~$0wU6_4>8LAHzP|+KI0Q2e;y+hyg-| z%6P~=Q3ywU?B^fGQ*yETleyw9f;cFUcr~~u68tc8@Kx}M@9y<$eVlc_Y$=Rx0gyu2 zPK@gO2ZsuyFR=}KaoJVRZf8IG`fu<>g5Re$YWJ$73AhLjr)hnFIR%O7WhvC;D)-oy`OoWsw5Bo5uIqJPlT2zu`5Mc4b!*RIDcIhltMLE;GCdRI)1_=)H@s3(e_${stya1?-L z)IcobNXl~Ku-rT0b!L~`c;1{41V9zlWHq(BsZa(9E+_5d75z5&@TS*S4+gX zEF}))?&Z6^QV3zzn)%|%U~oG) z((|IglK8}Gs8^vNxhqpy7(W>SNs_I*^|B#Kf#SI<&u zNkQ*M6AIj!k*Aj#WIRGbzdak} zT7s}om}@Li*g_rK!0KhMdUum)o$l~f+|tc=g^XJ%mQF6lS(}Glq~ka)cSpv(KkC^p?f>S$CjVccJvxtlmivW!DR+PVoWAO^}L0LV$!+23Bx^{%bmS*b}mUCSKRpa zsc-O_)E$v$Ewxx+gyy0+!PPrXe4a?+yUfD*?!Lkh6)`g?rWI5TQI3BeR4h~_}P zVoz?!c3xbA5U+)<7`1aYEJ*?%_8^bL>3cR`u#^Zoi-20%zJ5Lhytc^Vv`$v{Q;OJK zeIw^`@RSVT*iZ%huKlZ}UPCgr`KK-kjYN0!m)B@aE|Nl z^zF2?zznnirDiO7=PVDS5N;*NU3px|Eb(u8k}zEF9O|30*ZrIpP8uS|zE|@(f6`w3 zrSK%o3|J5W?nKBV-n`;4@c}QUx9wd+YUNf+L9h)4K(3(FWL5vwlDka2;dSWZI?k&j z+19Pa1VP0Ug%8np`&_f#^oZ+&=K94QR%b!>T^NdE(FG^G24bCv$??rBQ(IfmfP$IN z*9#+A5Z&YD<3cq=F8iK#Gv@hi4C+dH6#UTv`!|bibDf^P%D1U?)e8qDuK$~IQP1uk8n83Ws?hrg zcs9!&C?Qc(hJ*$Fsl@*L!hm^Al_uac?GRKoxBHSLfFm*ZU=<274lQWjC-1cTo@7^x ztYMkrub3f`_`&jvybC1&FNkVA#PTpprbF_|#?@eFNpq*Kq^Gh+0sRM>xj9)Gjqki&*3oe2NyO#gGQaH|rc5+XSmV7h$K`N3*f zd?^RlFRV@A`r5ap^Ru>!p_yjjEL092t<({+k;C}4J#wzxZ+cfk&qyA&%(E!gqnyDO z2KxQZ=j^wM99++^KY~wGZWi799*JR>pTELM50H^Y#(qNIxs$W@q}bV6QC zIhD6zK&xCA2KWe6a_Z2obvQ;W=)9ID4>^NaMp_TN zTwW=Cr(G>jWbdW_V4nToT>uL@kb-jax>-IxS)r8oW$Gshv7lq5)A|-q&C;0{&OhIa z4qgK|WmKf}XTePRd0|bTeBr(hg~$erf%|Sr1tfuEI^RjjK(!=FUN|IAUm*2Fll+_g zJF?2b{`r&HtCD3za!b7eTlcZR88xln+gLF0HC^g8U+8vY2V)eMcf20Yt7L&nAAQuk z2w-jR2bo~wFhQD_-YQ9FxL|NGj6x~Ypl)%eoxQO1Ryx+F|Ht<8?g|Mq6`@>nAg@aX zW~?)z#2#G-+D4hWk-m{Z#pR7!8GiVt_Djl@K>FGb=!^*MX-G9q<+a3ob|#uvG<*UL zyE+%a^De0uk3V*l$akMbYG zid|42)^YD6>ELc*F%b^oY!)$%1}D2ltJ^M|sRWD_$?S~zu8rT) z8und_n;5YEl^-~s5eakL_o%%uU_niCrm90VVo~M(z5Lky%$K@iDTYL+dpip$!H)u{ zIKek$pnzW{yn_`JX|p$VX_!mYF~z22vl6JluRdJpR(xCLYfVUw22|WpzIU1 z{!Pnl9U{9+G})9MP;2IMg}Qf}(Q_*)Qyl=#K}hqYXKMJ+LZJ#PRqmkiJd;JvIZ5WL zJ0B?D^DwaR!(tiM05j$aV1ZA(^Cb?XTAcX)JSHwYG{Bgv61*_}2&+#Y6-YDQ0NttJ zD481gVV%?Z<9P@-^*K{t^T)&qB(SNAiuooaSX`%+I)?7LT~q6y=f31e4=?!2>g?$B zqkexrAM)QcDNGWmqibc#X+M&=Br|rY)8d!6NInzJ*1}~LR@EyXAjvk}WPq1X$oYaF zvgw|)>o96z+kd2Y&Vr7b2H?F=w#&bQgp{};^_Q5z5uA6Y*wf~)JEz{Znu8Ef15@E> zlqtsBL^xw9<0FNnK!&6EtwP+q%qCLdmv@EChQ7HLgG;$>nRMz2O%nCa9L4ZZ6&gpq!&2#Q`Vj1F{bi>>570ygb& zLHYh3I>Uap1kYsv+)1c792G#pNfr$wec)yH>4mjo^`k5WeW5Tzq9`s9g&Ox>94%PZ zR%b9}M2xB0SUj|tOhoWfB}_OjWDkSzqN=$W_(z;0S};s1jN%uIw~XM8&WwaeQ)3Z) z98cfx!n-5OO-%qvMsZ^52^J^Dc!8MYwf=m!}80JdA_imTzG_L1T;2QfsE^tizp07xsbYmaLAzs&!B~}K5H-S zlU>2q(~0`&hLlY@c08Sfo2XXXQTtjef*aQ)v<*7kdVifLpt&QN!tqus3Uye<4`kf8 zfjti@bronp=&dV zH`^(Fj>{*18+XkBmUe$qqw#L2dQw}EoD*eq7;aZrfVtD7aFkl@O?%sU}*y@xu z=7Mn?lL5Yg{U2}A-_KDs=${b4#1MNYVt_5m!d@CJh-M|XDrbzKF1r*mwO@B!QLUla z$Qq+iG?NT?$iP186ryjT@|iWy^_DqRBeZG7XK?o;`s_;w8?C(O#1o=aU?HFYiNk%m zc^10p?O(zS5fmNbw%&KGsUJG*KhwR6!m0gS_$U{Udkjst8z#gx5|mqJJo(tT=DHVb zWlH**TG4M7R+GUBlx{I3Eo>PiXzbBN&N2EjVW3B%9{3tZ;tar5G=}xmJJUm5Xk3qZoCs z_^M6-a+Rlvcs`w_q$Z8YGHars!>fqZIOzH!MZT+5BY)sk)DiUvJn z5#%wc(Xa7Z5(rl4Y8qt7o?5S%)(xYJ$a-vXnz37uzmTlF`F$HMBppLQB1EV)hB;WZ zf3bwNj8fv7#*Y6=+(cQKIdFK)(w>P0^{5yapqm_=a8Aor5ER0%Ige14y(%v&I6<&O z+xu1WV1p8}`2I01c=@2JnV9LEGKOf>*1IhJ)N&DRek_#f&CV)#N+7t*#Rrh7>wx@r za6eyDEm4e*hve`PeAwF6mumUM;huW5;Kza26meZHw`y>Yjk<5A8JCi?Aa@hbWfAFGT=t`Q>< zWNqbj1s$Fm160r;er)|6iRfM;$pZs}{j$jMR4dBw$K|{^GcP?pY9xXmT5HWq^2hhL`H5&0X+;VeEP_l zl_Dm4OE=r|=vNFfjSk-W;&~pM ze(7sI*n9dz!F8`@?ptVaXg6(%+ys0NKl*RB+HEn8SCAlaV{g0O_{6*m+0I_5yVLu3 z{Q}@6DumF=Hly&*&$}6klHQyP6^{K;Q5^PV+Dt25e-xy;8sQoFx0Sxl3|IoLICu7xM4I_>dOo4>8T&;eLaOa4dQ5 z_xkUj^%G|$=zE;m#wlk`)l;6i&kT}K<586DdBWs3y;bDQYa$~_j8Aud8I<{ntb;!I zl-_wX-xB;gl)eLr)q%R0+4}bEO6O!_tNe1eslidM^cR-{9Q@|#1#i2c2wQU3aRjE| zJLtOZXWpnX{hZrr*JmP5B@?dXotm693r;;O=eNcb__>v2ZIwv?V$_R9y=KCNT{ys? zDg6+;U`t0pxL?TPuu?U5xgk-y{Snt#7+*_J=d`J3V=hZiv#Q!`{o9z5H-leG?P|$J z13^2BQ?g6r_0|&R?I+MVDbZ!qJnq6}xj;g`Tka5UnyE)G=Pl*ap$o&7e@-Jc4`Qug z6MF~^djr#e$_x)e0;NFC|mfbAPQaq8_$7o76#H@XBy>;ipr&_&dI@LO2Q)cCrW>mlnHL8K} zuQ4VL1}+rBVP!;?*cX50^Bc;Z!*I)X{EqW7gw983E+F9H+gV!eQbT}q%hSZ!R>KAi z!Hl_vVzw3{qQK`AG<%;POXk^>?)-1hlMEd}1gMG{&#eS{Ft{`leZ|rjcMyT9k8q_( zFZWKi=53Z#jqQqFAn^utU_!IR*7 zWw|Xahp~PoxJ!Uan-vvhQ4`>E0^Rq$ig`)Khg*Nd6`Ms)f-bR!DLSF~NG9m%(ZmCV znjiLgp@LPRmV;YEm|Q*ZFuCWy2_r!3;^@UE@7^}`gk1Jlq2TUbm$rk#%Qhs8>|%Cx z!I#U6$~2dA0*lHXTb2-GwMt+tk`<+bj3Ll$@ja;TkXWbHL;theU3yyO?EXd{_YqX_Lb=efUFPpLZ`<;@S3Wm+Of7^k8AA zpVxLo4c%W8?%&#S$l_{WS3WKx6D@Kq-Sn~Zw~EKFTyu4HG(TS^NZ{*&{)rHH^}qlf z-FA)%j)rz7ZY6STiJHY?SOjC6W4aXgsZQ0*a<&=*4;mg69q~<;t6wZS zrUh&|R(TRN>DOX+>HWwix`j=(d!g<+;y6B3dG9;|=@ICzsJ^0YgAfW1#Wv zW4Q1jjdDmdA>?y<%RxHI&moztd61%woZ?uyucLA zB{;uNkz^bxL&-Mxm2mP|sh^S2Y2!Yq zx7r*8v1M%&0}1x``wBah1w&D+@m0oulYS;N}ho-pNJQrHI_ z?x;?RU|xrl!_v`lUgEhiytX#Aae(~6DV^GkU4q}CI`(D+rzgS z@nv~yh|J5kNf(8y)=-4cx0$=^Jw#@7hxRKRTnq;%=#t^Ip~x0^&J7#+AR21;N@t6W zY&RIaX9Sr1Q3tsX(_!u;S|q{9!o*aJ(UfwSG~jteK*%-cmu5i}S0MX{!pl{xHn|ye zYb6*D5G4hmsyd9}W{@wttAK5-YY2F7&7gibkRrhQOa*Kn;I^ny!&FA|>?Bvr9JSDV zL3c4fV^*$0i3EMyQb67{{~WWiDy+8pLb(bUJqEJT62PJLIVV>!Y!N2r@(7CKpSdTV z5h*qgFd=KFS2buJr^{B?p&;WaCUiy z5JPDxl0-CFml?QxEx@dCkB8ceWaA@PnZD(PN|hf~0gep6CKm#5%r(hvw}_5f&9&Z= zZzz~0R1a~3D^+y(6%6QtK^A{q0l0LP!s6ICxlNa7$Y!_ou6)^}tRIms#dNrZ5IyLF zpcg_E{t7y9SpYblkXaTviTl&}J}X^KxReR!RwJi$Ed<=1AA-lFN)Vv>3bFS739wo{ zAr2!2u4?haZ&v36i9e<2_S|blM{J>@jzYLW@~(qET4OTgXaT=33GtN|F1IAN9oQWI zMc#WaREgeQ@Sb{euf*O^EqQ<^V9mRJlT)@-rjJSdvT%Bp!eh!Z1!DV zH`7OHh=2y5`5q%7r_BN8(o#~)sE=I5g$+!~JI!TiS1}uiAO*q&xpdrR=@1BVNugwa z6l3jupk!Z*3;hyiS<`C^upa znPSx?+wa+a`Sp86syVW*^NSZrXMu#{-=TvuXpuz1;Oh(Jx~yLD93kQ-o@h?{d>2YF zM@HC|vGg#Lbc5~4pUaMscb&T zQr!m?)L#DbjC zECW`yJXoE+)h=4Od#+%O_eX?1KK+>bjul$*=~Fj#o_-HqJ`Gwj?u-J^)GWc`HX!)U zu_}I*v3MczRWa(#x=x5}#?L-&n1w^U)_xHMW-w6brzgE*J&o_#9>&^5E;th(tSg+rqO%!+?t z?vYi{asQ+wLe4_W%Iz7k_ISku5oT)x0=MWJ5*sO7=^=LR`6R1{I#(M8G`MiuY!El_ zzo4SuBJs+h-8rZ+`{>r&b)D{(@=DO&PQz{*((&okv-=d@GJn(`Womnb>E^BB zoztoPEx z=BQKwX=i~06swW9A76tc%7ec>Pw03l3^Y3ySa0#Cr40)2p58SiGL5p~!p{()Q4y^u za>p8UJsdkeVz}2zM5Ss?h&4zRo-*1x+8BK?;HV?IuC306vxjBqpcoqn`;$)$s@-b^ zT6LJ*IXri(wOkT2J`Yd|c8o8YIpJ4kX}_M+_WybA35N+TRsgWSPJ`k6W33wPRGs3_ zr0_LUm=2fs9`0egl6zZ9ku|48j)w1;IEr^&09@&WgG=fnS;mkJ*c4I}h}A0PYcJX< zE~KQgbTb+&DLzT}rK7>`0p+_(jEG7w%&xKoTjsj|RQrhuX&db8Qf|!e&l_^miLdd8 zl$!NlKH_g#(ndyq;~7Zkf=dflhcJ%C5tcp?t`+!eTZLA%D2ZrZBM7%Zf=gPb^LO(KXHRAs(fhYJ?Dk zoJv;q8C)Mte0UT#`L@4y>2aqLi`qRDPyNBZxO}P4|HtfXGaZr9CviT2cj;L_b9s7o z{^49&+UsHZnO2#8I^H|BJqB}IWhos+YdVXkROXytUHtqPl%UDmk7qFg+(RRh@AOXa z3Pp=><3p)(Mo*yKD11Sy?EI6pklxi0S_T}6r*L<;(l&oCymWd9939>JfSf1DHV z#6-DWtgSHc@|ROv##u%8dYuMO&8$5V8x@$aUQLq)CeUhT4*DOISa+e5UWIWzj(0Mn z_?UmSlRa(Q>2Eq`5G6ctP-uKzMaO*tPMQ~|0sLrE(DRAY+5#STAYFE&@^4c}V9Sc^ zIm@)e^JNFxlELpiuo9nfg&>Q+K?5G6c~Qo3&d_>VIOB={$ypVS3}FUMrN9~Xn&N)U z$-j=NvKhKs8-~~sGKo?zA}rzDXr|8ugznJ%J4KEqql_*hUBL0%LdZeX@i{`@Uy=iM z4{BKgT>rZZ;JGOG!t25F63mtJP=-3K)U4)$Fb*`*TCN|3QSZ3lE8m0G6S76Hjv1uP zrNeEQB8UF9oldsexWj%Yz>XSpgIf9~EZfuu8J*f&Gm{4B1c);YN2|c}xpBjrQ^Y%~x9r-y7zt(J${7jkENST%jjvV+qx^}l!_VH^q zM;++FxctUcAEtPOb{aCj`|F9@u`F6-Y+hGCk$vHi)_=Ifw|J>pWQ?cqgJNkJpmtsv|LpX=1Rrsv))jO`a=eqg9+ z2V49XiE`1CE%v(m3}zqk*TFrlPs(dAqhIrv9E-rZ*d2@it49+vyZ3^7o{+JRB|jM^ zdw)g(#v;O5fR=~7`tWH94)825K04Tzxrd@G;sS!F>T*XYUpX9AEt6bM23h+eH7dwJ zD9l7>7*TCq77#Cs4_yXPG&gW#caKo?ofjJ7vN1p0)Sa2SV06fr4{yR?OAgbGb}&C^ zQ2Bj9({9%+<_j{=sBj)7*bdGN4Htjiye)jP$UsYI%SzSOyxwdw=y-IrOa*BpY~=*E zf`<^eRpEN7noIx8v36U@UBj1KJV_&NG_@V?BD9Kr#=(siY_|S6NC>XJ%V^w%H#ZTH zn`o0X?B|hI)G+d#c@;b49w+kl=>+WLb@K$-)|XVPAVr~94Zw^(+-T4KxPFWEGVo!7 z2jrQQxkD1m`#W1RHE!OU8c?TJyzk1*xNuX>h35YR@teCVPuy5iX^}o7vU|#+;rJm_ zTw=|#z8pS<^ce2;JT`t}`a&!JKqGNo`LLbQyiLT<|vK%y6uicu6i_L7L z8U9Xmox0DE>7N6awNLlnKZUm?lD@RJUrb7wG-I5(zt|ZYnI8k|F5^Puu_2}UhJ9dD z3y8P<;MvFLqtWmX^p?h$$iTX!Va!>9Qe~^(b3a0zO?B{@^ZZ|*X&KAP%&i^Ib7Tii z4`FP2@1y0kIu>$d6{iIu_??dKh#R^3DfPdco7+-eH4jtvrenr;L4<~7t@&+ufgleJ zP#gjzs%}T266@rClPZb+^_Hd#ez5vL>ulAdV?^cxyINL3PE76n^F!nu%dfo>FiqJI zJl4XfGsu6xJKdEiRhCf0x1T&%%4y$ot*TBfF>%lH#1YtZu{WW>^Bu6mi?N5YE|kN; zIEz|UO|;g^VwRj1xm|TVE5-S``@wA%oP%T-(EkF@tdyn>-j^Gdt1k8*n2{l~3D@2| zDLrm)Wpd^Ljel6gD}O0jrJFS2L^HwAR2Cee&m6tI13!`I4Fb2SCL! zyKADH8}X{hI3Sg3@iaAZ4q~MJJI8I0w=0GY#E(x0E(C=%n^IT*n4MCPvol=cf55R{ zpela^Yae5$3xB;3@9DSia^pr$jEzE)nHchsS?%nz3Y!O8p9@S*?it`6&W%u1!Op*C z{qqc>4JkXA3myzunSNXO$k(cQu7NfHw?MJ1^lnJxTbf&;4S1+^)An5?4@>puTdS(g zu9)}ed9%kgkJP)x$yIj3Hzsi1KU!5wnGlkXmn@6QLyg>mey)9fB8)MLfF_o^;jgM4 z(s<{*lgA#J`lE#N0hwj@uKvuf8o2gyQnvr+QMb3Gf}RdF8xJg{a&U;afbXh40l)k^|ZKonf2&@U{SDw)2`lbGWW}d(g z5RZYj<7PT!xS@NaXlqEADk8N}YvkEp_XXLCX>WMdWf2 z>xmns`uQ6Vy{hh*k5;KKl<>3a#y=vZ?d_s2&pWVwXb{gRFTZ7w=(ti!XO9nuzt*aO zAQZI}2^1oncu?KgW8N8d3Kl_BfWy0}hHLk1Pn{8te@QeW2}4+E z7W3xyXkFOuAy9?yQ^R<4vbMYLyi6SJq|8~4dJ9he{OzD~@JIos0o7#pphy-jlOc+b zvF>?ka7h&w=ZX+sX~}~uDW8p(Mw|;ZJ~H+;IxOGOh_Os^DH*`hTn&cIXX+}X07nMB zuj4ED$_Sfy<8ZtB8+|6|b{ugeLyu=^=T@m>o>>;Pvs=Sso!(tK7%{pSVbsh;dr3Oi z!F39qf7m17@@rU`MSx6OBHBf7E-E!xmYu3W(HsWAc)mf{f%1gA>C@r4>+=>)9rEs&Do+aZ2(BQ!c`3FanO_QghhAMF+LhZK_f z+j{*?`d$;}J&uM=wPfa6*iUMD6X`^WsTPfeIPLSwTwVK;u!&N&Cd1E|+MvGVxjRV~ zTR~QL+5)W-Q;*q1uZs@u3JTu7D9yl3-PZ$C_!)?gAIBrdUJg7u8=pbUUjO6Q>YWr8 zo4mgb--md-2h-B_&c;J3<$NK`ujTa&_Ur_oG~gR8 zo^C^9Y#}K=TZ3jPEW<_bXPUZ{1o2^oL*AoS!cIeYCT2Sy-s)r>}QX zQ=~2C)8YC1{rxcQ55U7pRB0|Y(tO7^hIeMu;`*99sVSq}4TFuyXe}ncSpDGS3x#`U zFp(t758eh1Ybk*tR9@NbH#y1Y~ z0{_&oo;6#ItpvMF74cT-Csk{It9_4yfot#XKr&~W2+ zbazmkxXJZ3yL;epw_AYYV!;cE4X@>7*x|Gv_l2?Kx`!sQm68&fc(VUA>?~3MdrB_0 zS_Y2hlQ&e4azZq3@9)$jx?Pd}95cdmQ~B4enL0iOr>YJ1_M;EFlsUNJtw)4mO^{XI zav*}1?uMu01r9OsH)2IL!lahDlNjYG)|So0Ppi%AgI<(jn3-$PFRMp&KVO#r5H+Fn zyS#{}d4attz~YBnWeQcbQ}c1%k&{;@Xr0a8MbFCL!yw0C6#h}1H@4(A^{}baA%PYo zb}dOQuQa_dawD;PJ;~;Ieldx?Sp`X)m5&kPeDLWE4sDV4k86ziXAbkQ%Tow&q*F8wE(v=Z)@Ke&UUV*g*eEd9^mtmY zKo~`;51W%r@gjEymL&~{6iXv92knL=~zC!HmHI5SX732v5GFS<$iZ-(51UkUlZ50D@qi&Ryl#mK=Y|K32Sum3 zk_4Igc04T@`;rEu+nY~D8M2p;%T#5b*Hw>?xl8f$kwLV)-&Cf(;Yuw@L9>qf*h$q& z_F1<=PvZ>Z&2(AdhX(KY&tU;EqXpMYcN|w49lFrmT8c`(jC%d%W1pzLM-(oPl!OQP zyZEEOV#x{cS^{HY0_+gu-hEcobnVOjfT3@bgEu;fQ%OE@*B+y7>p${w=7RH^Mj{VQ z-Ob;TFaT^%G)iI7GYcf*!BUve@dvbs&a)fQ)s7{Vj*l`mu7&l6&5Bu?34FNl5${u+ z+6jBnN+(T2z_%w`l86Jn^Gs>u|IH%-N~7fV*Upj>Qy2grk*m@~#pDM%ZaedO{u zl_p7d-K_{`*%I~7(=51fEd*NCA+4{zDF{1utB>8<3W8_QBrmUA+ap&{dwjY{bGs_j zqb9kN0$#OBF0 z951hPx{i~FQ0Hnm6JzmLQM(&|O!ek#A1glx=&_hvxs{eN z(i%3dDPKyiVp*BTzFjaAiM99+vSI%Om;6mkMkF6=Kc+td>vH^!u~V8HakRlXF0^wZ z4-!AHO;Sp5*T)Ne#jpjRSJuRF!okZ-k?#ujD^u$C4LaLM3_Pg9y9a@|4?{h*$Lu5pDuYJ+G$fce zX4P*<*}AIB-blB+$M%>QRv0za`#?ey3~fAM1gFO$O{%5JGt0Mu;@OnDvj z6>o?>vX(#3YKhd5%-R?)^lNZz06xcHs=I+d#Tt~ic1`{ZqtAeh*EeHKYNR`V^V#_p zcXC;#gtWZ}Q7{HEx|P_-bm>U|cJ$cd_oLq=Cbh>p^R2Ig*TmxrgmA(aA`>Z=hG2iJ zinKdh*gFv};`mf?{}IGhm9*X>v*$TW28;r_1R3WCL*lLjVq3(0n<{uJhUIUf({xl@ z+k_kKQ`*(`AAF0Ywh2F%FC6cAIV>Rta-aikG*wBtG0Iz>uP4r~ZVfnmDRaZz(`UGe zC4f31#Wm>MMCC&dGwBpBr996iX7ld}7`UprCj zUfwZd?N^-8q$T%YKdjF0F-MYLb;2cS0;b6-jU5;0cW|{duN>EVdhRAxtDBsyWIbi>E{onx7L+>o2)rF1n5rtcC)`sA(Ff6i}&@_lytd^W$|GOFQ~ zQwiIn=||$W$qFyig~4a&UV;tz%sTbIc9 z>%xwik%sYN&6Dzb%>k`Vn)1fV+%XP^Y1l&g>nV0Y;PR9QhcV8XcvNv+k>b}aOQynLvt=`#`@@u|zpOvh3!|2M35qk!_vfww2W?i+qPUedz(uU`Rq^W1e{s?F;f{qttIH;ch%@HRXs*-7~|<#5pr zTT`!#Bzg`;Kmj`5OkVTUe2ZO(-)V{4iYqqX!>V)aj@Ku|2pzM>_&(m+lk^^1WAV78 zVJ5&U;4*vM3~7LvWba$mBQ_49pmTKrbGgUe;DTtQC6=trRhjZGboa0S;d(4EN7Hby}u7}ZjHTc{h~)< zM5_BY6P>R781a4{Gh;!#>Ovd80o{G~^2&SU-)hJro&FL|xsf%`yV`3Wu4@4tvW1=U zCt;Ctke+|HR+-P34?noT`Nda*S@x)Z{S#rhBzOXNQXp-Xg;ACmQH4CuZ1`+xW}fu0Lv|O;1YWzY{ycckWEv zm(B}Z_^rjMFBnZ`Sr(q_-0%4~8_&vMuE1MLxE04|+8)ki9$(l`@qHirLy<|`Vxj2^ zsH|0edA}wOGOOK-Ct2#8*Y;eX3L@$G}->koQ62 z{fN(Eu~@!Z5`+tSMt6`{qq2k=X&-Z!juy%CYm;&3n^sn)q}7w*7MlK?QrNd%^Gm@< zcAlgfh=EaY=7L;3f19)GU_{zLqhTR;3l-&@Gpjx3wIgzLO;P=8ioKJPm!BJvQ5F>a zgZT!xH=U;kjvHuYH@^OE2=X5akzlGhZ*gwmg8n%Kowor_MAg^cSv{3 zL0Y=IyE~MY)I)c7N_Tgtbf-v2DV>5e3f}k)KJWK`_RL;;ue?^wFx9h3WmcZpiB(MM zXS0DV4nC|)`+jY)y|R77p&S%u{e9KpUav*HtDCwzpyz)kLKjwWS;1mW zjr5;OEku>j0a;HKmxwIn$#s1u=PPlzS*kXecRRm^WG(&=+GPF-3Dac8m%ptq`RWIT zHRs^6IN$FfB3kOX$hmZ2QOx+S8;A_jQFy&_+fC~QFF54K7Q7a>vq3Iz^zBF>XU2dE zaKuQ)1{AA+h^&0;T?4;AQ6R)gx&mVIeT2ta^Eq3;NhL0PKiul!!k>D;5JlZe5DJe( zKSPpyexCqI$>VUP*(rXB6r*hamkQ1>x+(HL{Q66Z^3EsDdYd*&> zJLD4<28y|a8~!pfzKNqh!1^eCPG;SWq;HWcSf0B%{T>@ssZpj?$Y}#$+Gq$wV%%1{ z09o{AHrc_WY6Kc5qIs~#r_1_Br*DK{+?hy1?m7zNUg{GF1NsgLw7)e0PlTuQ9DLTS ziFkv?kpnu{lL}`e7-sphGvxvC`CyHeE~*(=ej-Ms8bk_UA|t^^&8uX_z9uoG(s9fVD6kQlc)Y;#h=XL#luls=LmoOe4T z<8g-lICq;7!Y1f;#(fs-=00M-1O-k2`Yck2SG#pRALrNJ%L= zM!nU#uGnDg%Hx>c^4Dx?Km}|}>kIWba3V$3mi;_LCQkdYax>l^gdtkp?=EN<>;hiM zJ~u0m!9cO#2SuzPXa2`CR8x1yCeeMy77^D=XpwpbtE_9J7@*~J?4E5<1CL?5TxZ$K~^RD*grL$}E7 zjPYzOYzsq2ry9C{nmns?Hqx*g8#^=oP_qgDuG(|c2t0Vjep`@q|AEHyRCJSABqzzk zn;9ov)0#fF<-PJ@UH3bCPB$cj{0^2#S73_dNFdD0&~HKbuQ9aGvvJg2cC0c{Q<=SR z_UnYR$}k~TN%%{;A@lFh45l|?ett5ol6^GD zdLv*7h9Fpl3dc_D^?~k7XX0JxlU#AJqm+mI z;!yiLg#r%+^+zAq7`ERv)AW|k%t+5q-u|&W#Bcblgchd*oZoher$fH}*cL(Fp+@OL z1Yzx)xi^$i@Vv4AsjBjSMwu3hgg6(k)(-}62b zwJ^ZiPQ3>c#vpzRewAxCx&N0Y@DePh%m!KDt^aC-*>f2bi803BZX26YKGNnfJa^pn zSGZU!CEH-g9!yFM!o<6>z;i^nKggbm*BIDg&!9XtSclsPz`Q0|T=Le#0IT1B zw9nV8>2^9V5Tn`PK@({_soq=GoHMl4Xg*iTlI;f>WiQUhwOT)_Bd*%kBTy z0$|R$#~cHsz58Gj-%%x6L}-V7i1oFWw6)-;4BO{Ja+XRU=4!?LZoSBa2}lQZ)~`zg z)`)8t z-nH+!3)RhEy#$*JX+R9*V1wB6oTvOje>6+f_F(GKuFdZeT8%%wPR*+0U^$rwSc`lg zQHoQj!(jFn;k+J1zBdz5oOvyb+H;GAfsqCQ=UH}rl)eR+q2#No-_^geT=evf0s5Lp zA4;FLa^imNfmTFcP`H5!QQZejco(l@W8NsEc_Q{%1sA;9-L~pu)UZzLe04;G6z|%b zuWQYM9DFYT-&Bwhl@b@mdA}~K92u&I-NDr4NAP)xN@8jkvdRp+#q_gce4deZPV_T8 z%ZY{*=7I@1pncu+&Zs6hx5pmr^PoE}{4i$=eJJ||ri?$FqzUt@mQFUflO(p-`6886 z6Q_W)5aBaVCjEPSJSp*e2(IFLUt;bgITEl0A>OdFd133v02}wdz|!unuMX?Y% zuHtv}C`cg@DDVQ$Ny8)3FTSLN+IN;%8m=27dJBS9BUUK!W@UPHuwXi>Pc)+@P7~Oa z0u`=k?>AGF8*VcKd%EXLEuoWFQ0m4gzm{TDdqQo+{x*v`y)Z>X-@NujPbQkIwLv!m z9h86FWasBj2=w^Nlh?tXHmnxTGgn|Kn5M0cid(!v$HphIhv+Y_W^ziHT1KTX0acJQ zMBCUQ<-rqiTxo+!ke7;<@x2~(9+3+gWc}gRSo#ok_;%~44of=ZpRekJZ58zw6Ry4n zTQyo)m6vpU$hZ>BR#8Pd3qJcDez$4ABQ<;Sk9UU{WL&UTi9*G@L*%RY}0RzIB^&+=6VrQNC2MeN@Dd}R5)?EyC}cME0Keb;*Vct zXM0-j*vcI?ty=ddH+C{AUQvi$WW9t9o=d(3-hwH#MqPklev!9EX@(BzNB5(cyYp%d zsH)xkjQ(z15C2>-cB!@*bMyXJia_&=cF`VCi6CBM7U}leGwMnAausJ>T5#?^ZtB&T zK&m&qgGR@GClI_HJ`Djw0_p#?0ImrUJ|h_6*ZWvxeL9UYTT`mBDdl5+KF9cWQBTY| z2Cd{5KmdxiLXfB_RU6LY^ zcD$4^|Ap@7fwic9!ySgM?v8@UIUV3M528O+tUbMd4W2PVNkp3JfDn?p(>T}5O^ZJ) zKn!qB^<g1ny@oQ4&TYR^NO?5A4|TUQPrfU$@^o-?lDBq#IP@r#*ggsY^0o zKViO`Rs27jzE;dze4TP%aEKl=`TpU%zZuyugah@AzQ8lg$vN~!^`4g3K2*LfYQN7SPo(G<@D8lB!oB4=4*sgb z0=7DSw%qg33sBv4{@U815okL zICGkJw9Vo+xH2E)crhA@{;iG(0Wt{RP^wExwSDjRU5sP6{WG18p#df=`d-Q4DNrH3 z8=bqWc29Azynah}%T!DbCz6AS>iF)rp5STq`>xBxh0y)0mg_@skk}RgZk)FR?WY2L z$k{!z3p7!<4*-mWwImfWztsoSaRkqj96>b1&8I;T>hEJ{-jo#b1tCu!S^m1oy0RK! zXYmGVUmnwF&%PgMG4>K8r|)8i_VqkDN7re-W-!DrUdO^OFwOHnghh4RRw7skdAz=C z++x-7y^RZLs#KzczxhuK+UI%j2jx2q=1zeF<8>Rzbw~5P*i;(j@7%DnP?`MYh^rM= z?pPmW#YKJW)c-nQkGwMn*2Nfy-u0b2G#2_)pEuYMNXJT{IPIHJ-C*Vg$bdMEi=)ze zOX)va=m{pHv%8!1&jU+8w5p=lAx|~yJolC_M1km<2zN4#_qw0y zn85*9(bidnf8QiD8pj#AJoPh1`Pt;zT3?y9CU*qdY?MbwVn+Ly`NHI5a$9b}*DXsd9oL($WKJ1BT918;)Tp7T2uC z1PJ_v8enZbhln8sHhMz2^_kXAvn8+mCa-$bPsIix${G_9a4!0@sk_@PR2QVLaaDNPME28P(dEi;XxwyNG_j-sT(Dl9 z=ekN*6e!`wY-#ci0yiMT5X^ z7iNG2luF-n5;)cHy3;ROxKHX*zxk@sE>?eI;06|VO^cJYoFVfDdVG0>VbhA8588<8 z?X8m_2MjG(;Vn3Q?15#?WsOspoHs&Xd`Tzzp*>e6w_-m4sIE4#-2oLb2?%PZ<|MW+N(KS6lPDicKE3Op%0oA#+PY9EhSy_vnMZUjC>heQQnQgwEKsv#M zSD$n#IzM-hoX2tqyZ(&~dqaz-R~5CEwC#}2X!S|IMC(Y-`GrS>=WEP*6QX~i@i`)^ z^V(4yS#yq13zwVx6j2KKJNk3JpI66KwEHjhHd`shN>}($$FarSJWC0ikt?6n@`WZ6 zLp?b}dMD87YkFIIH&6c07pild`={Mi)SXE{ZEIh0P)}Qad;v!ny@m+}+Ynv$%;I47F}71C5&EjO!Bn1!GQKQiHlPs%8{zxv@y<3&vF#TFJtW3e zpBO#Pj--4GJ`3MhxB7h4Vc&yhrV|y`S%(N%i8U>A-P zyjLq1O>r~I(^j8)!MrUOe@(|)J&MrQieFdjBH|aELIhB9^WT#MA;Yy6-NxqM91EX_ z@+??lENpggd}}>zNRbLwo>k&%tBez+SbMkfp<+Xo&-$DfoD%^OPyM9{h9A+DBW9o` zWSSVv9yfe7dhZKCB~uEgmStvl7a8rv0GF`Hs6WQuux4aosDgRfed?sR;>v=b?bHcOzHQ2x)9%;952 zTS63*#wEWFyCYwt5xH-jq8za(SWC!4Q9 zjPq?|EVZTbhw%}NYd<0f;VC;NF<3FEyAp0`l4C-iu#3#?EDSJp}#}@AbKs=ZO$|3x1w|GCs4ky;V zD!*+K@(+AaFRS#c5&mUYXeivKf&H#Q-R9d}7$;Kf@>{rV|3@&rH0t=nW=+nDye9Pj zsHkBcfN|UMb`lFGBs93IeH_Yb$y6O>tHXxt(zRn3s1G?(SiN*sB^ZR)nqvIxk^PDW zSBAqaJq(V(mbw%J(*NSQEk3(FoTt&L<>FxybRvQ?;y`$5wxw_u2z!kX$lN&0G+ned z=6aiz$#~NF9S8emxhABKyckNYFFLfE@^x`0c1Uv0l=l}Y&qNWoI!J+kdi z*In3|`iawiN?_=@{)eYL%dlrGjjPHJS6&uUuYZk;{C?Tr}*?;yA$FVs>2H|3aqW zF9ai@N5z7xfb>-32TLlwI}3yJzaH3g;P^s+f;A&q#_Hth3aDLmr!J*~EsvBAOx`Ezco==trt zSrtPRiOXwe{Z!p(yJ`EU8aVE)okuer?5OAVKbgKqfTaiu*v%Fei&B>pEiS6p5Sy9V z0PS`f;HkH`^1lzUpGg!~*uhr1#znB8o^Us|UyRjIzA|*wlwG2Sqcn*U%nit0L?M>o z^o@e-z4z>e_20Xxv>@cZG!3%QGXJKMpJl8gyp0-a8TOd3!0rRPvAB?9GL7`;+K5C* zY1t2Q#CuT0HGV0Ql&DYV90FPV@Bh2`K*$iQ$!=gQUr#map6XJ=AyAU^)HvMIfDP+E zL^$VG1tfmQ2krkY$ZnnmvhYWSIq(YzO)yAVsjAc;2XT+ z1xX`}9;%t!9e2EjtlrC`!MkzVNZolYif{9u3j;F=<|uH>?Ndp^_you>`JvB#^gv5@ z(xHHaRbLdsho|h;M`qFYkaL3ua@gpw;z}0Agyr4oMWVUK$3zYot{Fasdu^o0wF84_ z4@K@auQHe8Xaq9VrYY#cHpXg4Ru5WQ@z*7K8eA}&FMku!tL!D|%ferhdm(s%F&mm) z*92+`;K_ILElBwL{nU&wI3aaN(Q1GAlK{@!TdNbIosa4I@1}@PN)g4F&}Ict0z73& z4Sn9z0lt$@y*ZDnRBYIh>XJDlBkuDICewk0d8-7D+R4uBz42;p&xK=NzIru8T&>0< zOUE0(2>I8A#PXZr^c~Lln=1DN?g%GK(B_jzv>t+!W_C7FdYfB`_e&$U6t6}*QNPiDG%fmq zaMwTv5o||tc904xdM+hrHUZ1w?Ew}+;>WR) z4aOY}-Q67$pVv3o93@s(?bb*>B_v&ufe$j7rQtymz$4|eLNqY`inQyh>2lYPUzOf* z<2l&ALVC*?Pzbs;DQh=j~07D)Y5ZCqy?%(ev#vRkww_*aC$R;yFKE5)6w5`MDoHbK-_n4jksm(cFOt*N#eqcqov7t& zAG{|xHuVXbQ2&Q4)WW{UeL&jLzF|Kfen)1{op=S79sm0=dMz}CY=1c1{yaFy!G>mb(FN}MLbMyT)(!=d@;<>cj5|J*5>~}fRLK%hQqjZ9U ziu$axZOFtB#T5*GcN+GtDGDCf@%BszrSoGJNRp27FUAGUZ#Hfy0*IA1e^9#Kz z`MSt9D5mfEA?NRYYy>2kj{4Euir>uy08z{i2F)r?Jgs(_ z;apQG_la@>_R_X!c4ISRjdran-xh3>Z>t+RjIxz%Y8-3L66`%@vB_vLDJt3Aa}2Ul zOfqwH3eh;C(I{wBV!wB=kr6C_shydR6+Q2IS&U-B{CawSo`?sj-HDM{xMyr+zks9f zOXw^AdCfy=Z;E+EOblJHBy(!7` zy|d*9U;8l`_Nf65y);S2&0K4+*&h0d5*t58c=^cUW_4S&)@jq0QJce9RP`5kIJP?~ zFy_cw-jW?=gb)Ja`=a!-$pk=-lM)`JN>PNPAW2Wa(Dqg`>OLKqf!His8~{3MGSla# zf!yQEhHy1ERKVe^K?_zZ}$6$Y^;z)Gk~#{)Ywb3FPD$SlW;>azfG@ zb^vT}vI*yamq4n9vqa-dTJjM3i1D%>4Qtf5^^iN7w$Lt?=Vzb5HEaggA4vJsrUcB6{)%CAP7k^yAg&IUc|1tr~0jJo1k_MS;~1}EvhLybXYL8Vy-6n zA&62TjU~Q-faR%_(;Cc1=?=~qy45?Vuk9Rf7HeeVJ*#$_VBa19KF2!l0zFZ_90=eQ z0zQ7){blZAcjt#nM;($oZmNpZE+RaGTdQH3D3(yyoGjC8N{6dzwTe1SL1jo10o}G? zN5bp_h{c{m7rDrV_R5lKMU9L}yZkw`HpL*ZWQ$r2JC0pBY^P&k}72 zyA!$KUDtMdiT)N8nRZ<+(sFl$(iBU1LnU-P3lxI1yTUCARdiy>rphLuBi%*;>t*C3 zptM*PXN;Uc7TG?`?$ z6N&>~BmkrsI1m?~ehN7*E5Rl9E=z84_DMG6Bum6V%Lj_Pr(Eux#X+YyNsH`$<^doR7*I?|2A&et%%<4>EDd=l(} zh=73|?Pt0q8DdeR7~44C0%!7TEKRPs6p12->ENZ^RhNy!`k{@Q3r45{zr+dnJnrx9 z`4!6zdEF@Wc2!O~4me$|)(Z*~0rBE6C4pzhRpDWaB@_^y@Uw&SBRk-qFeteD+1pl) z$k23fupnEG^LY7?v#qI0|D5l~dzSX5{h}#s&O#Zrh=91`DkiuVzitGc;DHLz?6>7F z1Bc@MJ&Zf7pQU7NMUnP+>{tKxc-bJLAgL!$?@5Gm(!<8%DLgd)I}0EKtFoT%@`r{s z9Sz2~?BLaC*xHfn;616Pic7c^Dk+o;9WTA6(kODWB-h^%fFUys(E@$*Y^#a4AI{IX zsuqAo^rLX)*9QkwR8l58&E;3LZ8UEP>^EZpKnE@jNEp=|NF@ymg`Nf27p6q9z?2x* z6o{)Tq+Mf?NnyoX=n1x6e4e2V3|2os$ybG7mQKs_AQg*BqqKg}fhpPNz1X&qkEY(t_19ZQ;L!K*p9jg7GpKl~qNu zpbrv!twjzHlN=SNv5@n@%MG;0AoScUg~7YnfW!5O>l z+OGl}zx~09XdyGMs4eH8k1wG63Bj|`N)oL4*y!TSsQuBn> zx1je*#E@hZ8f5U;leuv}eq#MyAp91)n*UVJf4xE8^{}c2ZP&-qr>0n*SRaa7&HwGJ zC*i>Xu6KwJ1)Qy9KF#Budnd7Fmf6>4tMEmuMif*f`*kb#PgF4|iN&|bm-*P?4l2Q# zh2yIfl&k0B=pK~YQKLiwj2&E12UPP9CT3V|Fdvvy#-!2hqlQx-(Nig|Ltl{QO*dmg@KywezluIOQK*MKf1n)X;N4ppkQ{fOVT9NrzC=vYz{m&YsHoDSL_;?X z?PZ%&|7ZdS06$+baIXnx>lot7r?FWJ8pcUN1iy#GjULqc=eP$o$yhE;{_-OhNtyVz5Qv2vl^93iy`0AN|8Cez8-;OLeBy zAJY|SYL|-8X3>&xH@4?7vRt8_AR|vA<9Y;_^p0l>`q-?XcWGQvFT4_WAc`=5GElrb0$H-$t+ z7}(~?m?tbWwAv%D4W=ZFkLs#pm>LW#@s~~HWvy+D4f}PiO6TU-?UGlbr z9&hmoUMxhDv395#xNhd4D`CDQuOP9y#gH`;(gN(K9AJ zs_5;M8dtcH1KQT3f-r;Bak2><q9Y?qDpkqyXe_(FMu)TB7pv7m=$uU%Z zQ!6%vB`TKWub629UwI;03zIb?ge_f?mNmxE$g^4n;dH*gi7NK;dC*Y;QB-g_<130} zC@ZqX*%JW}Z|%{RpFPN(zQ;Z|RGIMTMl@K-!kYtNb zPb(slO#I}9t=KVflAlxlV0DG9Xnc?{kU?g2Qu{(ugIDJf3iqPcw_p&DY(JWnGCWamE@A`KaZ<6*o%N3qbsVE4PAA@ zF>6gu$t9yjHb$$X-JLN7=|s2#bDvC7V*H3nq6fS*i4krBPY>|t030%eSn4q?Y_EId zX^T*^95w$4q4Yx)ck0e`N+?+H&X3S>{y7|tLkqTX4w7@2x$z@EU!(Gtw2R)ag!SK0;7!a2OSOe;*3I(u24L8fNayn8*<*2JMaxEh z)_~^+@I8IN)Hs++q%YTabc3ZBzc?Xf^e}eeQmRggl2nB2q}u{gq8NjoUWi?@aUu2A zn=C3+8i0G_q_AK9E;FOBB8w|PwdZTNe^qHF-Co1j5;>WXVSLk-K8HN%sE^1%Vu1&q zjzvCmZ?!Tgk?m-i8M#_^8|G_&Eex_nO?~SAYgOg1R6{3(A44seKyDy5CW~C2#jSi% zMS?OvmQxp{2KzMTf|}LS$MVIT#9UK$Y28^nc`Tr|q7vX52QN1UMW>AreDioo2K(pO zyM^1Aq+aFPnHCtFuBoi0fG!p;5y&terdvdpH9te%zo8VJQ=vDJZ7rcWj!zBDK;L)e zLB8Q%95G%q5HL>e-XRX8T2_UZKB-DOv<9=1+l5~K;cQqBHhHh_2ESqOg+qw9>=KW& zZ--Ig?X{6_u*1`%Cx!Ka-IA^xxR$j)UbOb^$xm@eJ^9xYcxE&eMF+GE zQu8jhLW?5cQKROD!PbubL?i=J-!8H>G z({FYNJjFLN;j`PLmy6Sx$fWJU)S3;Zc)p@UTz#wLVSZZz6gu!Uh4j4N%vJ>!>Y^7|@K`H?t zC}X*x&pJ%(Mw~#Z#EQj&#ZwoZ*y_~s7822`jH#pQ=BTiSo9Sr=*xz_alSl=#rD4e~F_7R^=`-gtjw4p$!Q(d)-5&L}OfUFE| zbKHkSfm(p=Nt|dl*4~B?0Lds5XaLp{>y_s)#SyIwha!h}HPm%!^V(>S63&MVRI-7_ zJa(PQ_NHr|twqsiof{9)mFCiBMPu1QEG4Z{#Nm5cNVd{X7P#vTCWVW!KHBhN#EbyV zf%@$8BfBw%LH4@7K#-Y|re8x8xJaSo#F}X?mClVP`5X*nxavGLNojm_)GK6sAtQS2rO1gHk@1u$q0z<*!hiV#vq(?8B36TWnu;64$!vrqP_qFLiu?ST9TrG&q= zQdBi1B{#x3A2@DNOBEGPMto=(RNs2^swK+B4 z3cT!8)DP3)Sw2R$AO`!&;JTfO$ZeUnZlaSj)%`wQxL<9wcIpOV3AeP&g+CkhVkBv$ zez-Mp(+ChJhqGNU0bnh&mEL=dqs5kGfCihTMMpmDwJf)m0+Qa6f=h&ZIMjCEY_USx z>c)i<;&}jSu?@RAk*L{CVO4=6_{I4z8mRmR(Ct((_x%?n)a;Q|`L zNLIA%W3c81=yU93`M<~m8j#uDE^7;+7i=zh&^_!#lk|l=#os`UC8Ei9TiRSb zqL5Tc=OAy`?8>Yh_wi8NF20>%8SkqVOv)hnK8PU5l6@&U&ou42-^=__g-J2^quH$7 z?urgDTCq^Kq+*a2AGFKnABs?mA-7?6Uxm7|m3*rRAFjLND~OZ|3Q%I>q!@aPhU(#+7_ad{P2ZI*0& zvaiV53Js9Ii3`kqPB(n@z9tc>=AV40nseMS5qi{`dyG+qrv7s~l#V~NYb3fNywaF- zXOdGCYBnwIUyG$v0N&Z=tI>~5TodUQh$QWo;?(=8jW2kWmVsTa7ea6T72QK(JrsUBr zv#CNDR@uHQD0k)ym8RFURCP6 z9Msax>oat#pDn)$a+5mN45mEYuTyx1mG zi8yT?OdD~-#nNe0E?_WHqcKDuQT^z3!Ux2H=ByF8>GD87HbG2r)}`fOZT~W&^`j+2 zqj0PRJ^UtJHhjdOk6mBmVEpbg{j0(O(AT1QT&%boI|3t*SVYEW{11wn`k8`-`=*Bc zYw5CcrRoM=y>wJ}xM*NwpKmreu;e1gO)%=FYY(veK=##CmZ*5*Fg#?^ zjpoq2_R4;tcgd5ai1dt2pK_NtIFqRQ4w0iWKpii@{<7iYyzR5oFN+^aQI%!lTlEQ* z8(jZ}23x;c7G0LF@mIV!5;sadSeMsk(NM&Oz}F}=lnWPZnR~UGYAoLx_-0PWSWsqf z!DfZARv={wMo>2Jgn>zJ8=;g03X@Mfgt9iGv9qp?_MMUT56|MN*1LanJGR-m{)|xm z<4tLZ92F0`I&J0R$IWI0(z{}eI?UPp^X(eL56+vR7q$b-q9m&9f!@XBH%6H^c!ihX zZPX4XX7La#A&=xZnqMtYJ4xHpEswF{qD2CI-H5?NPR~^L=zl6p zY08vqjIXG;8=lUuJfiHV*_$fXt=C@ZHm{jIi`T&5z@>N+v0ohgRe|-ovFDB5jsLh+Es3zX=IK5MmnTn)!VQVGC$9VXptNl#>QZ{z5C58>aV6KfK5fQY z`&mya+Y3ecR7E%0KD-TTzI!ODkgl3PmE(5|NR^L)iB$@YDJ{}& zTIR~T?$OxA+C09EZ$ct>PMTH&K_bCC1}%q>be0Q zS0)1D-j-Y+5Dx&hU-okOPOYwdNK;JA(L&d0U_i%!I}%u6J4pd6by5nfjc+k%BDw4z zE<^KPZs5`^1`0vuF6zl9PjP7CH-lg)Suh}Ri|i@nvIQt#`_!SN8Zy^ z6fT4_79p+#^W0Cdg_vB7{c_TwfSNI_!hRws!2HdS3mYY?=qrG_eK1*XykrdDBG4S2 zHiF{6=FbB(jw9Se5KbP>r0h3OGM$@>iLg2%2e3)SB^W`W!#y3CaqjUlY>+iGh@w-v zbrJr`YF)8+(dy0FXa{_0V{b-EZ=|{O&zH*-GeT6zkp?Uz(a=e|^c)wlqn<%Eq{xL5 zsacna<+MbH*Ig{;eQcX{wWVI+YdRLfgDXL`VQ?*>>s-YXvXFZlCAT}xZlzFj%FD%p zmOD3ZX~YxI!|z<+FqSYDz!Hpyi2EGmYxX)pk;8CPQf)R9MU4xVm4YLMM9gfzQPpc3 zw#dV-KaNGi=`4ydDH7oaf4YQGcR@H5;K-NE*KZU1hEDN%&1LFPlMt^ZpCgEv!he^q z&XstOn4)k7qL2*k9j&HCW8CO+Rg6mBb!bh%nD6vw0-1|i6F#pH5pSj=XX}T4-(~k_ z@pz>z67wK0M!A{p>4JN?FOUvEFVdLusFpD%Vay%EkI&Y?*jq?3;5`v>nmT~mJQ-js z?C{dbh`QhC-nr8nZ1Ze@=dz0wgOZjywr3PZ5)uz_pD@>ccbpV73yeS;_W?{w$nxEB z+vsvHCYhu*fPt2PWkDDkji*e7VQsDY9f=Z?lE(Te{t*^tX@o~}wfoIBU>pR}wv_lC zjiF*s&>t8Mr;mk<;zQkNpMTCChe)A5xnlalEHmAC5AybpN61v!Itl;PwK~u4bD@u1 zZ~KSg9V1Vewsa|H4jZCC%AbHzjxR+@=|9=cdE2KGlmq;?R=q4Gh7cKT3fy&@e>5o| zcT|FZFa?id(l&olGB|zv1NifHU?`nL1jR3b&vW=%<7=m^X11G2F2`Fp3dSE+T$5V0 zp~4s@DNjC?)^?nXcD4*l#NoDeW*L?#4_6oz#za`JLB}NSQA(QR;Ers;1-_hPQvx#C zrj&~9r^uz})2PMv+_;5BNLwRi8ER{n&cZz(Y*GS;5QEAWFsMUs%S5Nc^GMU1_RaL> zgK?u)N)RMtWEjxO<8PG^kpffs;7u=9wp_@xX?)yPk$PfQOa)qTrz&z&mdlyKX??;{ zvhgy>+FBx_IIp=2lK|YzuLu5W*f!w30B$0u1u|Hul5IPi_Mt6ob^-B);;O3kCONzK ztl0QP$N)SXJT|u%Aui}`aOIAB=IFqcl9=wDeaJ#J+Qbb;I0MZ*?FMR_3$!%~v=w`4 z*vAdtLi_42n5a5PtL8RBXD)wByry-yh`H{F>$ib)&Va-nFWi6H*A}Z->6`Z+RfI4X zO@HdE;Q2>2uN9jpB>`K<-q=rNC61D#LHw2Mnn=WvPp?L@D91+9WOW#1-9kwnh{_Km zqJzEJeQiRqwm`bsSY^FIlSxj5R&;=%rxHr^1R_{U4mTfp+Y5OKt?4t}H>)icZ#5Hn zr@4se_U1;A?#~8}^kiUE4VP+--|9_rLwDzF6RVR{X{10VHlU~Lg*(!=3r$354?i3p zBX`B4erdh|HVcq`BNZw=ag0hGynou}E!ACF+2%&OoHlcgsZA0&4ATzCBqA|aR(eB* zjH72$V74deS@-_sfC;I? zr<*R&UskEJK+JBc!)-+$-qa%jDyczr_QLn9s=3!R)1UdlgPpD1XEHl7cEf3s3EnT_cl|vjl9yA*Y{QKH{A9ndBQFhq$WN;4(~dpX)YLR z^)H=L-Ec+NgVk6ga@t41k}xqy)271CneMxR;D@c#Wy; z4}eyoj!OkraSsMU26JmCkusV|rX*pIq)rQ@I6>wmTU}0U-30gtmgo6eq(|Q1^uzGT zR+T1mbZM#dY*dD4D7~m~K?DslZ1Df6u~Mb@3+Zr-@J5ED5-F)0g>|iH_~_DAtYx-I zg%XxprJ_%1m@Eq-rFXavlt_;NS_qp&)#%oFzR=8pO^53kmF|m~ z`T`H~rVtgzV*0;SXjbhM+uVxO4c%ucS`H(8&uPMOq6$lqNtWpJL$X9WUu9JA?F>fm zhK1&5a?1ZfIp9xflKk=J82Xc^p9g8?WyUA6L{~RC7L2kfYbE&ug{vTwxg9W#l~Ooy z2lFpQaY_0_T$hDdHpz0XB3FItG@+9`8zY2632cC3(62DaFvQsQp-X%uua3wIARhm_yQNUj=X@a-&@ z9@BC0r4)-^lLHD*q3jt^%a7XGa7y&qNk@A01S%RT$9H$G49dm9we(ztOQz@)naJ;* z;U^pt#UPOwe1LZG3Mqn203XGs?8xxzH3K8nBjIg6^s^aYYUCe)PG=(gOOqvE)>QMq zUk}IWc*$l4F*;B)8$-L>M@He_2|aWU)r|(pY&v_9-SaC3#ZEB*@q2J5dRHMoJj+Nu z*e0b6_zDbS{*2^*{OeM&PB$5{jIpfE39%&;y_QIVp!S2BcU_96*YS4M8NelT7iqxg z3UXCwE4ftd;?gz9>=yg%yh{Q%0X5oEe&Jg{rDY(+>pmtgX5#iG`e1EY{s7b>2k8c3 z1r&xT*Uw3}vy#bfb{~nkBe@<5RAsjn#}uL%X+nH8>OUF`KQhD z&t!5|q&A>vU{<3~HD`vdH>uyPQ8{@_Cu8t!MZ;r>3w{B_griot?;~(o(*jIof|LP{ z8#n=2@Bto!U9PX2h`KgxU(|S;`AQZ7 zaylkH7PynoiUG(s)gaZ4mo4k9Spo*Q_NC%Sa9>sTSGxKP8!*N&==0~DhsMDy_@&hD z8HOJTv^G7S)Lz`Rn!TnzTDn&e_>-tO=kZ6z$``4*K6LW03LYpa;aYGAuv_8iYXAIZWD{BUC&vE>30ivlEC!1>5kYxPlH^*FgE8V0Z^ED+IQ zHu8YMgKZK{Tb`^e?UA_H@a?Z=ee5sg@roMn_r>B{nVQ_Z-$#{}6mOsAkN)T@26boO zfT=x_;X7}#^z1v*CIY?iPg!c3HRX8v#D*hQx|uindEUfu;wL5RcA`9Waks&DsbZL{ z@h6^qp>BL=acObslIQ{j_y_*4W5qOr|A?)OG-3a8rf(l$c_xK*5~UnxP(+>NB`FsM zAr1z80?4j3r%kfqe~Wt#p_|6Gx(U&z*|JWae7Omm!j<$~{2467P5bJmOXfCuKSf4THIY&KDWOQ53;Lo52?fluNqi)86`vf&RpZ6f{9C; z--Ll4+KS>xzC)O47yDvR70h^TgJ=|RcK+qKb{1AEVOajcE#{ZM}!aDZ&*e45Gzp711t z*S|G}OIix+qk5?qY^sCV=n~r}7!FpLZZB&3>qAq*{UuC~YVZFaOxpa_uVJR+2DOb_Pl5mT7ck8R1f_O(JKqd= z7Zo!0#+>G*`gbRLaT-B4O7N<5qii)&;8|i1;|&tS_jk|vEsfltW)l{^E>L^uqHoks znrdoq&+jBa;k7ldED8`a0{>;T?VKt6`Rwnw-G+6=y=DPDjO|_1sBZ7%#bYgbk~lkU zCv{y>sxO?lm8gLWt)LJP8R!Jwh*a1S)X5*vsTWt~pD^37Y%X8V=&0rXVdLnOhAo%w$HWKI<$nJJ?X#nh7oRXj@_gm@Vm?OjXf%~eez#K*M2j8i`ABB-$Syl zyCYgixhJ34{pNpl6u(kE6AM;AjD6>3@3{R<<8F0AcS`-*)Rm!YZ^Zjv*51}P*kr!R zuWm<>RRnITYu~MR#K8hZ-O2W&pJPi}xgCaU>;5FORBKNdZWCNjsxG=0^j}5J==^9} zfp~Ea$0nmPP*eNycSVbk)lbrEG*M3^0M_AO?+O2zT!jw<7C&e-(^|N6?$Ldufo0!* zMc-Tj3;#nJBgz!8Va5PeQ!ftqmNnY;jG%xU49PPl9A<(xPF?JD=&8gD5%k9ZBx(RJJIoZAwedF#0ydGEbdu~Mqsm?#y!=GE?`Un!>#ZaJ`xXB%sz6L(yD z2Fks~O=Y&{Ih0U;Z_y8h@*5oqJpz)z8^9WFTP_n{Mbkh%iL$LOT?C~4gN0u&o%Gbu zEH254fmF!jgZqazy8LrpI$#ZS6K$g`I=_Zqw|FpolLMWvEpFFo00E{4aquZG#H(DNj`={mgjy!-NyTc+GT&Y_!&!xPUdLDD@zB(2WY? z-^6u3YOwmpw_4EXLip-B{}X^=QPuO2(zkysL6NL_U7R9&e5(`?y64ya%c}KVmwg(N z{YBEH^FFhuB%F##{*3{B9~=2y(G?m?Sz?Q;iib8K5;BUF`w-*3p9yNGLut>4=&f*W zy+rF_ghap)I5}5d;8Xa}_sF7g>?4|@ny_rb{o z86IjW4|p=x+|-|QwEHM7p?aTa{1f;|K%4;hW2pSf_Tz`L+pXvN^?)NC;~z61$X7!9 zT`K*@!sn>Fi|>!KUao@$hhQMr746NL&l%+*pm2--8)pdz^Opj}6M6$a&IQh>vyt?EW z-`RDpqLI!#r)MNZtZj7H{)bu)yh2zFKST78_a7R5Z%yE=*)e;YSXT3ejpJaewL`tNL#onlnO6ue)C3ocm2R44`T%S2$@US^ zh1n2tvZhBU55?NN$r5FAiXgoa{zW|B*Y;)}`;*czsRk%>Z?Kh8+zV!A${E;Av!vIhOom`L5s{ z@y6>vK&Is?s&W>5sw}+Xm`n>~dBi(6(11lnz&}FJqxdO^D#z)q$*pocd)WMee}%g6 z_%UU0S1=vN)H8uQ9BrJS6t=w|WP0WOJMI3p_aB}FTdCx%6Gn*y8+j8v3jw!7-p7<^ z!Z>Bfwr2b-(L?-NucMa3>5QM2|p63*_7lin|%)>cm$+te$eEb0#s!r7o`u-g4sLYVvP=k<_w#y zYh<2OMXWj^eb={W!1%9EP|$<2jU`l$JCCN4quBt350{4Vc0*^=P zAozmj&&IujMVfF~IOu(zrBN1ZHZT|^*C@h@-*z3W{9bA6x(m{XLg0vL2S4ZeUKCJE zngL&ZJkQB5GYU{X4lK@GHDTjt79P+@#tgPiv?wEA*T6H9Mhx> zB#(*I$VLAu-zE4f3;u`tbl^Q}Z9_om%z4Jqwz<2tMvky_q|#G_v4B0j{V5%nFCNk6n2=Rz&?egE${mBQ>Bb2TIg@1Xr!a zH0SEaT*ijUFD)=biB2uGKQb265kksWfd()y7+#zF)#h^I@y2o`RwVd3(fRrOZ#DJ zf;aLm-UP~D#?*XuBj!KM5`kzO{1jIb;o6`XqCXb@rg56BdgPC(!HXRR*sREvK`Jwd z{);nbu*Lb7W95R#wd~pb`#LVn@>U~Xh7(d>FL1i)ao8){{XTqn-IF%?$~y$bl8o(Cmmr`GXfni}Xpl#*K@3>sw(ew5+S@JYId@kl-2E_SLGF;~p{{68GAs2I) z<4hn9rbUB@g{{bw!GwY358b+2{PV(FbP_waML%%V0s|m@9Hh%ZMz2#jL?&O!)y{WA z3s2fKWHtTq5%DdstSyL`(ZYTdDmKhTD*nYkp&1C$ad>R0mcl{W+Di132iRx_H(zjN z+vE{>9(l5(q~_`?Zhn@wfINo}qr^daSBPPhIG2d7s@zTs2$lLFZ_xq-y)5ct;WU4p z3n+^PkANNM!9^jyW}%Q%aLpt~>~%E@aoM^B83zSw`Beq6pE-xTFX6-I_q0JAKOQI0jc}cnD$JRYt&I zgOG<{v_wE8TeA2W=(g8G2&?XV4T!qm#tr;OkgAC#&>Tk+a!obUt=zc&(Ywf9%i@p7 z3sMfrE5$}rT^B5X{SN=}`&Pt`IGlioMAQQ8gncDZ($-+riQE$o_}gj3wbe)5PdmO) zhdC9p)0iROJSao*wicq1I#Vt`}2iKot{u6WkJX~bq{1zp9^JY4HT{ZDV$Xc^Ls=p!g?V4zNi)NJrx@}@t9PT zmBqwuVmiOf2lHVU8Sy3inv>9<*K}=Kk5cYt12nW(f~qm!yIZ5R>+Oq8x0YzdYrsgC z%NDlLp&n z#wTU-=i?5p-JTtIK!=1rs?~**TS-)%L#II|o#>g8uLWsV0Vuv8IQG~wBmOQia>JpOojkt?5Pt|Cqde{zaEGxeO9#@FvO zWU?y$q8Np@)|1}qzat_kzVLUQHcUhEF=G%T1)b1;)pZlb-vJA+r;WvHy+lM9O%J$R z4rZMzpe%E1(fvn0#oYv(w@R;4=FeP?I=-!2>zCdUg#N-0RUUkz`vKvknB(v4qaB^e zZ<7T?9pjyWDgiAgP)0;il9|q&wXaSa&G6OWbkdM=xI)<~jjcgK53kb85qXlEp!Z!srfgFd|o`frmjXoV=eIi!H zA%KBD_z~3}y;MOUvdV1QY{4n2VvsERe(1ML{i>KndDG0v5S>0h= z3%zQ>w+b$f3HvC!u}xxCWvz~GDnOV3&;`wvLEsI7WP+gPX1B`CFvJ-+Km2(1?|dq% zPlfw9jlBy^X|J=1+_SHEjQWzXtgBqB?4Sc+^65)#$ElZZ5VMtcoRe9Eunn;Bpp62! z%2oit4^Q5Kmx11n|F$2iWhhm93|HW!H9eASd~AE*w=}65o0@t`TWyY2(s@u`}C5hOr-6%+tSDGjkpGuoGOb{7SPCPSm^wgFnC;;n8f;0rh z2nPIoi&i67U1F$}+`VTcR1*U*ZLTty0DOefLgB=2f7u=8`!To^=8R^WEuyNY!od}B z@#9T~8%gHFe}Bh~xZS^QG7A)e=|YZ$8U_o;M{J9!TfUe7w!o1T11(Oso+#@0t-@Zo zm@gd*bUT+JFm}7J=3h;gw(fWTE{*$|+D_VN2ELN8&?4&QQMLh<1CUs_3tV?um&f#l z--~58!JTK1=*LhdfU?Kf_m<6tA~uE!=>@agOBptS>g-4`kuFAkvAchvn-%Ck_`O)4UI3iw@h^iT_nK6@Tm9A|5G<`LEn{aA ze)ywp_B$+$tP47GC&sHTHG90kct+uK60Qi%6km45JKydTKc4tfItnCN1POv}0QeCY zmf}P7c^(yGhF-|EUXmA=aza2R^LhGvx_#}}A*M&;u=j&v5-+`IHD4d1@p{!r1YD)UEYL`#*SYml6E&KZd??(52{q(qy}-9Fq{ynp;FL zAgjCy?i8b*g8f^W9K%xNPait`#zlGwQIUD$kOc&)852Lvp;Ae|9JsQw&*)O*lUxM;;_-8A+ z1`BteYqeRR3=O-H*xxg0{dU&G^MwYVcz7*cG2g~fKf_NgPv(;t)JX9R;^*t9$qrFEgY;JlMtBV`)c6MM^%Z~OrNZr=iIjmG15%p- zmP!OrDuBWZ0NeKpg6D();4c+MBl@z*TKYh)wMejEt9D}$&()u#i9P#Ud9UN~W~GO#>)`iY40t7qY0YMa-@%~t(w>F1YFWLN z52DkhEMO%u8+DKMD|5;752nu(3FH)lghR4>uPZS{jcmyN{Qa1 zz1)&T#owR1Q2~WFVb4iG&f$vg&|uTd4eU&L;hSG^8n3;}j<;Ai3O}fH6kKCGajIMJ z+I6a<0-XR&#vFD&(|=zxhE35Z<5fIPn4K9z9Y&2WlMXcAQ5O#%@cVhdpWiJD=+xhO zYRNTJzz*Jb4eFX-Jjoq~${Rw*&JCxUnogGoB+>~sxvvsW{1Pf{2ftG?OHqL1Q&B0Q zriS+~FNQX{VFjbzFl|j21igL~4!aC*fSob(+~!U~uK#hj2W(->t`l+UqQd{>Z$RSz zK(-16j*V9g=s{^LiNag(yJhe|Y{_mJOOtp=IZD+p(|aX6^Ky+>7t@XRNfb1m99uZK z*mb!aatJWTrtT`a?~i~+)nmQw9hfQjE71AX>t6A=_ZqP-3D{lF=bz~93TIc zSEKptAaxL41;RSSJ|ntCkt?$mxdrn(`HcimmHwE%rn;IUW-~+(bkm6&q$ICOB&$(U z@+q3}N?MSWv^pZo8MpxCxU+LG`hD#jJ~)^tRm#bz##fiG!`P+etesrsva1faGEfU+ z8P0C<^ZlfvvV`kR&DTh8Jj@Kl_Nd|EnH0{Z?&svv>^gU^`x%I_U4)68*ey=8YOvhu z^)hHei^KkPW*>GRoU43LRJfHor{<&_*u{9pMK*F>?;ffyj)y=c?9k*EbnE4-dsj@HVCVpK)#}==uB~nf_?YOk!R=0&jBCIa( z3cf{1KR=aL^hTQtY-`{6lhW2&b%V1z>D^Q6F#1(H{6-&nZJs6z87AM!pKY3f>VW)i z2sV8&E#^*?-yy;b+_T^QgO*PTNwxZ3=~$PbdEwtcoFa&df!iNeS?|l;^o5(w)fbMV zGnZ%(LHqBFe1p5~HW^Q`y;H?}Prc_Lt$C32tHr??zsY>ium$m5ZE#)D^0v{JDHmyO zz^x9hUnWrRvEfJ+p(Vu+9t4<@1dQE=a zp`Myw{0OsL`um1+Qj?j045chMhs0(v|#CzrN3hDf!6kEzp}y z&s4H*O_$vS*KTm5+)~Y;%0~%dnjGff3@#9x)FQ(pQWA4=kpl`pXefh#1esh-$M`(L zd`yAX-LJn-DXocQKF#Yp{_ee9DNS6yZhoP#rHAevQ%|J#?+;V$0!{5F@~osBNz9M) zX|y1Oyf~NaJ;a=#%3#V8Q?B0j+>JdKBLH2i#nbHn%)YHlMmj2HTI4$X!@Qa94CF2|Hub|gwUNtsVF4~O>D zg)u;fV5|H)w7_m%h`RAGIwp`LU4g}Hp3!XD@Y@*R`T}s77Rbb{$$4=(r|E=dAa6NlH(IlqQ0lAyj zBz<|C`&enF^$2+{3(N)V@?saf+!1}WggZ~$$Nixuc)-IGVdR9Kp8fz`!v0(9 zb^W~vI}wSDLFXQJ%BPnt@ePpCr-wq%38tuB|6bg-gy-RM!>?#pv?o3%pv*oRY) zt3`t*Z)ol(pFnfD6bVEt<>t{A)73TnO`kSp&yBq8Rlz@-u=^Gjna`XH z2JS}Xx8BM~GsVhZ(*pUQI_H#2O-WTZ(q(j5$BBH0`TpA;t(`yTB|~9ewFE1ILrSlt ziS^)CnG+wb{4~G#?UQq@Fn}&fb9}J6>3-D>$$t~26R;7#sl{1On_M^Blhy_lY>*Y| z$lrf_Hig0;hC%#M=}=}nvm0^UcZ0%Ja>c|(AoXutT@M%PmcGAz(0&RLEqe^y4G}0~ z!F)AuJ}OGWm7%$dNm9Ae9&N{8b(mWx=>@FJ&G$T`eEwE9jffV4m2h_KwVjy zznw9AvnN54+Ce%j)`{HVAR@O$6LwFbwWR}M4ZlNu4-?k$vt)UQr1)4V>b@U4_#0j+ zxd0V`2a-k^?^?h6`*6ABn?Qz|Nxzp9_0rPFWYWCg;=huOFxzQ|FaQkvh@~<$bwriF zf$)}|G1AAs;4whf%}eGu%g#Ua{J}phr}Gh9Cae}y+dGI?$px>(a37ptmJZ|#IlS1# zWWsQ0>z)`*EQ_*u7{C+_>co>0zE7%2nQ{R;e|`tsx$F;LE{iTb25bz44I58kxMTcb zFN!_oGI7}vbOrEou8;fplf3{zP;#H5&knlS+(5t3Qx~d^3f&sm;8XVC1y*KpnFp$| zp{li>$0U2k=USC88Bh%Bt7h%2kV?1N0uOWSL|6#VtwvHV7)@CZ7WGCLrU$ys1MXeU z)Yh^QyOMG&Q`6gJ7NioU4)gNgxgwf_BBHt!l*aD@#H+N#Qv1~On}3*HE4MJXw&8=F zIfWV&!x!uzh?HKaL>$;YON;-p6YtF0{1tfBF=|B6o_zAi`*P zmIz!A%m*+u%B0JUyJbt4C-@^6DutT*vRA}3(0uv8X}R=SYm`#%My(0?5?OgcM@hrj zOl^Am)A!-IfLl878H#~5vMb(hZLG0|(ER1bM(o|8nY_?Ky^upc+r3 zyf=p*t2yBV@%#-~fehx!0^PK~(yQNqE?8k5SNMojOO!Bj;QgdI%H{GT4~BR$L(3FR z(>{DTaK1B9OvR#beyTm(j5%l;6vB5lD)_`%TIKlQTOHrl7few#pJ?Qc@Y%X)FDVd+ z@^<9*gXnkP6+8TC$zO8svgU9anSwXLyPkKYAGHAg6dVv_=KfL&=x>LI!ONZ5FQm_6 z3cTb*EZ^wXqq1GWdNK1jwvjZ@YAMwyI=-|*xDJ{wXErmno-{4TJF(s&>}qFIFTF#J zIv^Erj=len9shc|{NCR5=!d#`i2zcVuOH_eUY)&FWWMp9LapN7Z0i0ta? zpCDo6M}k?%V{ckOXWc&ilJ~j`;bC~={qjOs!9e#+5PaVh^QTf1`y)`-Fi}xaksW>b zGdnvw$;=ns#Q+mMdl7VE2GC$q0VZ17Xq8;Y2j5}E1rsVNN$iloy>mZA`pGChW$_w~ z@OchiaOqn4%B+LFnco5gw^HUbTkUp?Xgzd2hu3Am3qe$Kxl>9f^&>w`fd!XYvK*SO z%i<=`-Jv*_3vm(4?HS%vRP`YIH$>9WQ+rSMQv310V&jfTdHKVU6F;_#!hKMEIb)FU zS^ptTB5&F@hDa&hAyev4P1-E&>Lh05aJXc1WpRYHRQHv+7LTez=taQ%{O&EUErk|?yWTuNteMV2-r8;zYC*7t4%(X@Z^YcD$> z!*5n2N`68KIYRzQ(<$N44%<7HscVPu4hfNBB{l92<=6v%4iFpQTpf5}DS=23NBTjZ z;Bk00iVv7pHZy;j%jHQg_$`alrO1dQVt_#f6FK~;EKo_Ip+mPd0K`G&pPSzcJ9y}x zx947&Y=le6#jcaZauQLS4)EVOd#TcD<=>=&;>L_i%&nNhJZL(FV)jV=Q8%-5z2!n3 zyPrboK0dEMQOLBh8VqkgiHC?M3{qkQy1RY-Fg$qYWdAPZ+*io6vvdWY95hV+Yyzi` z!fmo{{cJo~SD#YoWz2ETlJK7{xL2`C@kH-X=qZ{nKigUk*3 zwL@kYS}XGwdc++^Y*T9YVw{a4=XJ_Y3pd^fkBMqa6f7gUtf4TYGR>4v{-08eo&x0FakLzmk{Xy5B*>BPB(>JV0 zGwDnvUmFsPDVlE9bfSi!l!Y6%n0E#$qGl8#qAz#>+tUWtO}sE5B;6=?xiZvg4v0Q3 z(+?F!5d3?2Z8dGb z!(VIbGI94iuUTL{r@F`kQ8)$~>fk&q%nGgv7?FV@Q{qAg@01O~ExRIO%5fRvE8r?C z!6hz->eXP8e$fJz~isXAbr~XB=?onBk;%&1}59kWls0id=DhW zju&utO4V;Oh)A=OFUIaB47#AC@wk*=!cEnH7&y6B*_3{nX`RPRC1W5dhaFUj1`Lzf z9i4W=kkny*wPETg8>W*D=wJNd$#NmXsv4D! zMj`TemlAg4I+Xc9{?t>_r=&H#c+cj&fEE*_vvo`%+f1Q!hhz_{9C`aPO-T_OjkO^KeMs8d5Sl(MDIT7oz&~pzWtB4-oG+a*NjC01 z_yO8Vi8-{kAAS>l{ojf?HZzbZO9smX_m&~*dLm$8MvxQ}pR2VkU+sZO>=QY?X>+Mx+&Drd8JxkZ2I0M7+R1^(RnM8jFk-{ zeotu87>x?0k@KOl7@Itt30u1x0`7Zz@Nn(f8O2y#)_WO(ztu?Ln%ckiDN5 zWQtIcz4ufA#~?X75MO))Z2Yx%oBYr49PjQ~&M*3Gvk>hwoY5-*`==#(;}M1Ux@6o^ z*BXrB>8lXVG%W1V&4@xc>DPQB9(-{F8aBj$a{VY{Nfj-A3(#lqe> zfE#h)xvN*wc)*U$h4F1Oc=iN%`M{?IFLwez|X#ODA0|#J8r9x&C zN+f*o7^u=Kn{v67-zB+D0s|ejS&jX-*XiF{vk%efLZ$AY56N}f1SXxm2>%^lX;H=b zTo?$fqfs}c+zlLM2t>owhOaj6sqCb!<&6kNAXy%)Q!ym~{&t^1#lQ*Kl=$sX0yQUI z*kKrZTWEU<13_82EgS%fa8;-oM!o^ z+{=-rha)7$Xpzgby7b|pZcKYmt9!3UU{fm@L`-cMrC=4-QJFc5B{|5Dvj8+s4`O^X5dN*lTU3?AU@Q z!!x|KHI7qj8T*S~N+j%HdyWT#gB~G^e3L3p-|x0>FIb=`DDo6JxpPJ{ zw6K@Ctx7N?d(ZXgD}e@3tqi)*&f42Ad7zGzP$iBu_mjf?$TQ+ojMt}|@JKNRuHxGc z#keZ@wT}(xt>9%U2%DHl-6E}0gZdrU+_gm-VCxrnd}p-b#0^H=W|A&5zM=N=)qmPx znX^?o5mAXo2aYI(3MP3pELH5WfTxX7g319Gkz;#HahKRp~Ug+tzdK z-zgfgz4s@y?Loi_iSoxh^|+tisEu`!Ro3s%sV49QY+ zR`x~PFYU8R$_S%qo0K2Vv`xknhE!8fSoIq4f7uh}zxjq~bf0Ivhw7I2yB|$3ty-Js zKh8aeHxbegd)yq;Pm~ZRt(%IdfFW5iMX)o0e#7g%t#DSwiYkb6vF*w}7q!A|m^_o6 zsDYAhSI#edyBq@xM&1{AUqi#y?HDzC-2g{ojz4(3R}Jm zJz*G<-c2wvVqy?}k~>m=`WQ&MJiC`k?%iJ^zvRB_x9EN{D2<=ogw#1Ci8#5WH#xYy zdAoquGnYK@(>avd{k<$B-T0d`N-eBhtvzXfy$~}H?Id~cOr(zt)Wa^_xz|k7eB~I zehCh&<1+h_O4>r9a!)yhj}Qn-aP|y(?K_Ojtkzp0nUfO``u16R5o2EXAjfT6gd^S5 z6w!#@m`t2JVGuTXJB!4p8W|Z4Ni(_ZUzA-qymWAIKsX`bN9l;mHWH;n<4pWKa)0h* zoM5wi5or!Z+8x|nj;1H@Z*+Eb`cNC=?dn~{JRC4lum7-HZ`z#$Nzs`y=)|rhla_sZ zFfGcu!_D@Mx{HiK=`9&?I#b1pvfI!pokZ^J7KuRFiEWQ}cQZ;`oTmIwn7OOI9`R00 zn?{4rr@CTzD&WaZ9Q3g&mK-q51Cv5QXIkx*vUA2F)p|@2=Z4n2(PI?_=4ch2oJteo zzcs6-V059T=CB(|&XBk?nyJ;(dQ=a)mve-i0y^)N5o~SkU2HEdPEJm0`mZp+wrSzX z!JmiIqO`f(oF9Oae?Gidsse@0Yxj53)|ob~#C(ux$%r1tR9(!YJEtS4=X7vvRpjkVZ_^`Oqavn6;J1>RcGc-fcJCkda*V)5`qT zrweCsP`u-_>zi(qh~wV{H#0wzY?t6&9VV&$M-1qDdOg6ELzJ{*TY6hJL5Wq8qJv5D zHI%lr)kcGrfQhfcRyqR6Mc^3nwN7s(vvxu2UEvc!M41SpN*dH7c^4m4)7)I0xeN^F z|8Wk_FkJk)p?(REG{sBT)Yi7v<>%*CIbb}6GTASobtpu?Z$T`3L>YC-J82tqXs-xW zPm}M;GboHa?2W#rv)b3S!ik}>Z(CLc!J`J=_!5!}HnLilGq3`o4a zGVm;o(QsGESAV$cpdPEN_x*2;zyWJi?qg;|%=n;smqZPvGu~V&e`59Y*}U`}6lB9_ zmaeJT4eHAtD-+0SYJskTt>L(`XhaHs~<7S$gnv9K&QKtBXVXwA$DY4CoVM)+mTDQolVNBz~5;I9HL%n3G?Hr4Dok&z5CIC4E|b5)h2{^|RY!{2coxH_H;#kgcU>X8Xlm z`579y9K>o)Rh@H2bH(;dO^LeVv@7K);0+ta=XizhvjcEn;JB_S8ymu8wQjI-Xv z%1_dmqwVaE{1A~6VPh^M0l_1S4F|B@#owm_z{bxN5%%z9T(my$q;thTt)Pd&_v$+h zg$c&vlQ&V+PHW~bQIdcf`OyH^(Y%GWQmB#yn|V=p_+#Nh<9ATWTzX*8)t3jb!i`o>F@8ymg`O zY!QjuEp0lWl}@{WES}x4tAf*U; zwz#dEFgJrlf?tS03P4KrCfHvnk^a`%*V@v=#KePiM9ax$;K5I**Bgg_di*ylu%DQr zXZr^;0drT+myHaEwECJu6A8iJ4mcv$|bvv&po0 zE$+er&|rz+y|DgyBhyDo@fLiFme%@Rt#gYAQN75-6d)+nnFL`QmR@c+=|X!4ie_B8 z_SrD*mO!6Za9B4GTJ-mH=_cv+>>lM+H~qXb>Py)+&?~76Jb3pi!0SPVMtRJe&GZVW za_REVI{=4R1ki>B0AbGWX$2?J3l|^ck*#HAWi_70wFi_&#`2Ag7mIj_CSO0$P5-1e zLE&-irc390^7uKS5{SXRIWu$27^61~Gthhf!f6*jT}Iv2@SrvaQ#6IM8x5drbI**l zvsb@7Vc66TT=p?m-7|J4s)Lqd1__Mcf-3i`J0+fn&C2Ql_->b1+hNs|x-6F`w~VQ7 zF~!LIK`x;M{iez)TxWv7QIEfjz`*D;g#B$F3D@Mox^L9I^P<=ti=Sg{jZA>alPm)e za#-BF5m%6E9q4<}1jD0X_*Hhi3|GF#s=73Gd?-BtfloO=HKQ7LOXuJL$FVMKXlhec z7x)4Deb?4vUFg7*DK@kf}nd!Zwc4iFkq3)U) zvBfS|eRWfa4%nK2d~7XCoGm>Ge>{ktM%%ppMYJ_b?^mk(uEKvC{YOjAF4=&%tr8Ta zN+x&h?FU}b#+d!|se>9GS+DYj$JXCGW8{Jc&$XCh^D~uL@>MEteaLs{WffQzA!?)K z0+c_1SO~BfZ07S6xD1QQ#UGnr?zA=?M11b*>O#QqeoN>fC~m{W3^N4%i92G4<2%@K zhrFAx(dO%>OOul$6KC2B@=MS;%+f;3$8H)h>}%2T*6ukxg}23oh6} z|Jj44?XKkwuhaN!I;NTn1_GsoQKi0419v!~tM2fmm6c#Rvb6Q6IZbK-J5nQ%KIW%% zv^m7Ex!O;(?I=~2$HO)1C(tp_>n%L7Fqm@W-A6Jdy_V6rS)CX91hr81&R4=8)s5yRN|C>52*}_X)gFQx`>c`($30~{QUQE{g+JmCe zSx+;g&%Q63qQb6QxhjO}A!KRx)AjLhQK`FOe%iAa0oxWiWpBJ4I-`3|f{%LhU(1}f z8l^Q%c8tAixz2%JNft;4odH{TSO(dovkQ|hmk5PvfZp?wY1et}NY?Oy3Viczm?HOC zkb2>h2Tuqn$o?^bx-y zN^Qb6!s;;>@VOc%=SY#le3j7|9?gw=*Yasy7WiEV>zfia`joWQELZJi?}B?eV{~~T zt^M|_)rf`J%qjUt<*tG>{nDKmPRDYuVik$p{8m;2zI~6f*-x+FjW*ocTD{ToW%)Y< z!B(aU!UDxTGPoX;;)kfW^dUjIExr;i!!AP6Wp}HPqv6W9Z&w&nC4_T=y7_Ff$+z^< z?}}8%89Rqln_iY_Yiobi)?UIaqRa!%YCe1K*GwhiaUddIywv9x5}KMXTdLX3cWFQ; znnsqLy@Z!L%|7+6(ceksVYUvECE&OT;I*!p#{;XUtdFc1w(8_d<4?tK){|hRWpD%$Z{HLVpau0eeuC zX3#D69rk6vqDC%mb=>`<2W4T5aO~R)x9K~uA9a6+WQXDP6vK0?p>L|G+7y)l zfH((4P%qjLhOWBunA{dF=i=MVDbHK;edUgvj=B4(epbD@_O}kQ&Bew%^mlG3$^3d; z`Qpxm$j`#&Z_8U+pMECMo+YQg$d~6NTBxX|v8!y%mzQVcrD_-|``IF~tv{8<)H|8P zRmxvcMt}JWY!W&L1F{-GZ3ouAvO}d19l;RculK49QsvV180clhW;Ch{<-w97vw&lznf~Pw9kjX z=cA2Bs5i^s!d+e(HGet3e^z=Z9<>$;#N<`yH+6^mdWqX=To-sQW4ZBD$}jw-qxzQt zX>zY$S|;l_1`fD%F!1K;^V&+d@~SU|f<90C*i}O#RLyMG=&{c?oZ7|fcUf-c)51tF zCHhZV!F3V&Yj?7K0^-4)(b204hUo$!CG?Jmj}Z3;RZDWUj^yY8R;`0G@pV2iDt=Ce3OSUN}cd zJn)G>%-u9x+<19DUpnu3pm!~9G2FCa9X5!HNXnNNmXuHNXn1J`GH10hPhykHJ~mfb zKWFLMA-C`hOdzswuLUz2|B%VzvjM%4xl3arY-?@05Va+pe2L~kA6srD%d-PlC)SZg z#>f*FZ2B6zA{erttoSzviaWPRj8wRu?!)q>k4EC1!(ZOZsi=j$_f@z+k|aH^w}12Q zE|S{$cjnl$osh5Sm#_U)!AZkk zJM6>j_xyeJZ?kY;W<;lw(0!>KbN-twsQK0ZW{GCAfIRN7`2rhP zTD9|@!Qj98A1Y!N;xD)Jn!;1pFYZh}S~pkOD~$j(<-vcB;@HB0y}ABc-vdWusrj9@0@m;2GR&Kx&T2NmMbL5Yri}xVDN@9r{BTZh6m2r@LRx+?BZ`O10H?{tc zs;>a5vWwP!&mpB-8l(j2l7>UKl+xWD0#YJ}lnXc{y@G1Ea3`y6HGA9jKZTGY0yfrh&u)d(6@D4G zL)P0KSXI9)4$2dFC}Yf?lR>XASsgKV){+eGUL{LazMvc#&hgL9glnTi{i~_y(5GT-h${t##t@^R zpn#HO9owz$xMwzmpA6Kz>vsf$P0RV=k{{pVJOgEqiO8p7d^ zw_$_D-ZnAxHMQS+bp~Aaq6mRs6=K|dmI8ySydk9Pe=7BK;gER4BGvwCikexk>r?S(VP}WD zQ#+17@E*Hul~96P`pZyg;7N|T6`DtTFrC0Y(8%X5BUhg6b2E#bF(OaQd?7O_)t4)F zzLas1&qUBn#tlLR6d&OOeF#Nuh2f9e&}#168|(N85$kQXuRkp;w0^3tZ}@$(k@AIx zJYp@HVqP4zQ<1?o@|lnt0ZA}$9)?21hcS>U0;{8+afW$06ve^hb=#3)UqG)5D1GY8f4@VI zaxiU!!R(-t?HE67SZRXWs}iANwE@^$U5*lm?&X)MmTfC5MlF)Xq;3rXMTkbanT4C%w96&?2=l1g zudHd$v~|A8BFJI-M?!WB6Su>F-e3=@?~JZFYYv|q9lu0t#-F8rPB;)yZqGLO$zJM_ z6b-u&6v^0G`-x{OLU!xrmkg7rp?^b*d%|iH@Ys$YfHGX%EP(`mw)Q?%D-sfc8hHjO zN88X7gGgEsqGqGyt>)wC;+&c64RM)F8y(;$ICXf z_TQl0S({3^!s58k_Cj71*9FN^sq~Wo`(nT-6$bT0q0+g+s_Q2Y@rF6eU*OEdcu0Ot z8S1RunD{=-ebawYVlnFZC)DxBsHw#}zkvg+ROy{Zzy6S3`zV6!zH-xYdglv6iFE!- z%FugU2qMcxjcxe5i7!8+1Ifx(eDoho!P^l4n%P^^PsL&xIR8qAIyU@j8%RK0r$GYz=Z#{zx?BEg|^rO>H zl|w3B68bnnC(HHQhDj#SWQlUpTGQR-mql5yB?(G5I#mXrQYIvTt<|sGm^ixdR)%GodJOH-E;r^v+c<@f2qSD zq22H&2eC;6{oWkG$skChe^c(gV^HI}B*^Tw@Im$E+=L9ZgVJ;Wp{xQ}ht5BGqKB2w z4M4{KcE-u)<4L8!1Bc?0{hm5PSk;G$6u|7A+5PzZ+w5SYpcuDAAV7PBuX6_GuD9Ig z5*W_DF!M|CPys;6g#)DzXI+mB&=Cb(A;gRqcY}Wffxx2n*!F3fq-5&2_qNL?-)Byu zk!IV`zip+iTVx`u`wp*tq|u4$%a%-@iO8RPI?UJgl1GNqSm#!3AgFy4$_1S|endC5S1 zTkMbFM9ry4)U?=#mA}VB=-V}58#GSMO5eX3&NT^i6>U89=j+7E{lTCMtCO{HI{Vy1 zTJOi`UF7&9emTa#^zV5xEnpYe1IG_RvC!a){)<^@#L7HzV@kw#=;z$J-tK`**SoFi z_nQWj({`xM%^7ZP^>;{k~Fli>;jffIszNAHzYGM*2zy zc8PW;a)0M;HpQA;`P3(0Vh%eR7Pp{$#?^V~zf+;G2Yr_K=KZby$C~8_itTTkfjA#Q z+!-Q~TO^KLp7Uos)+MP0z8_hJiWVW_H9KfyY~MCdH2w2bRyXcs$=LYMaesdn>D=#W zW4!pa9t#(xYqREOc zAke0FkZbMFU-~9xe-^gCpA?e+`-|NGK_GChkWdoJB1T6?dnEPweT)P)@z@R`o|-2n zlp=3T;eLi0Jb}PV{8)hIbl=U%YFX=N`5ysfG!Ul0kL2O zr&?N2Ve`E)QP!iQ15fxRa)C}yoA_0w-371Bw}W|yJy;_8#@n7~|KwCLz0X^NM0Zo>}L;5n_w0Ku=} z$gU+Uz5gt05Bf<^;(dk{wf?nCNAsjNS@AXy2S|^Qd5+jH$TN~zp2I^@S;0j4=~+D( zj=!g9o5-2uUYGIJfFnSQiv2<^@8rMuyjtV^9i*jC_VSNizQ%toh;MhM`4oEiJthgS z-$QHQ?n||9YGx*L>Xku&?@EbepA7vvO!}I$G^~Z@bKWO^{yV|r61`{sMSgt!*?6H2D~MA3x#izy6ZR1J4b{6Z?1SO3((GWMtrEgZJ+MX$@9>8uIrNJq+RcE9kTr z{f9mQ{A;Zcl_DW62K!ZzGsGI;-T=8YNa%8IGIzSZVtbMZtQ|1*`}uwcv0BpP#}75) z`}-U<;s^G=aZ3ArnIm2P>*W#xJiJN6yLL&D#)`IBL1upb%*S>^CkBE*`%{WQMf_N% zyi@RyCjJj*=S_EvIc?(K3Z>t->EpmoZlh>O8-uVR}1Yk(PgfG75x_e1? z-KXrndYHQnpbQ|w4!+r{1rmTo201&q-zfLtCVf0>@j(M71QqatV@WKk`yIM-ro2I; z_ab=Y95=V?d)$q?O5aMuy*%{07oNF1GiUC;2#b%-rkc?91F;>}%V_W~Ck<4g*_3Po zufAizK#{ybCa}`$Bf>pOi=Vdkqg3OL`kw=0G_Aht_x@Jw<~1H;FI$VZ*MHt5zMI+I zH@rGeRsdr_M+HdGV5@hr*Z!&r;nxQK2}1X))6=ZW0qy;IzjiTDC3AIa46!_5sFKR< zJlyFLZ2R%lrH6;R<9sc?X?&+k@1}g0v+;NJ@tI6JsOCPqsPMOBABg(4d5LKe11bhj z3~YWN_N9_z7I}F3UgE3pgD@xxrSyeQsfjbJ8+Qh^&mOrkxGz;c2USd$>(~7kqrqg1 zeg)NTKjk5@?}<%`8X?TZuJ(7oMHW%|Gm+i}XSHJ%M2Fs8KU)(;5ol`vGX4F>s{ya_ z6Mka9AA970W^%s<@Mv8AnKT3T6$1XqW>E$p>24~`8`!*L?u)ho@9jNde(JCOlF}#H zlkR=$Sk0?|qamJk;31SO3@Y4*&P!g5^5s4sLz~C9_YJwmEzI%j8f1VmmHPXs6J7GJ zN*>+vYAOiq3}sM;8j9o-q<@a}t*BhVIv9lABbxrw=R4YG`ciA1?xZ%ySF7_k^~%p* zfqGEjBTScuD;=ckvss&8*U^K+G}j9|oASriZSO#M&e8}B0ECbQ%UB=YTPF=Z#6DO2 zS$)14n*D-g)fdnRcty6;)&QWR!JSFbm)*!VYJsPcU448~^t)Er3YhW;l%I##lRt!e zZPoEr%}ss$=HF=)@_YU1(@)atxz&F&@MwahevkS~im;DX&7Ju_)$DbZj=%e@HUc!%vy|8KVvp6|h0Ec0e&6KEm?E2S(b#S(Vn&TIhOO zdcE;#6DWCZUuXeMya7Rsh>LFr{YTc(s0|B@WFi()CbF{f))} zR}I3!GWY1aV8amhuhCi_-unTy%*F&tUaT1!Pm%*b5=$ogOakJeq5cjTX4THF?a zhnz>_%VmUcEU*e8N0;DW_OA6{dIRq#T=YL;8j6`iQZ-S> z!`+w0&@~{xt$OWz9~8BBIDQE3klJ|Fg@lts32b-?cQ3zXgk=s&o~q>0^WV7DXYC!o z?40;^0BS{`-rXON0%WoOFSOAnP>y*{L{{>AHe%ZIZ zvI^<&ubY+iUpxLCew|I9ML=;^g#}^^|7Y0KhxTosRv2Gtp^a+xr!gdM&o^x54fAd} zC|S42u*I5Z0@(AnoR&ts`*%X8Cs?3Z^!3M3um!l7Ay^v&AqT8=$nmkjGwRiSL&Z80#aEWNb)fuk8u~jf>EqJFlrPc}BOuy!68#w#y|fFY5Ju0KH!r4 z3S4)*?k3<9A)k;Y2{9fU!-Ze1wtng4lwpng`Omjf65pctP;SVe~I_?dA z5Yy_PD&k)GGcmYm!Gp0=Jpk;iUx>8sPKLbKD|*sm&75RCA3)lA1Xx#qa1>1Fz;vLM z)K_oCU^f9g4hS7U!3<3v1o{l#yBQ$hS@g_PYwzl7=vOqeL4zir0vpCI^5QAvS%ZG0r2s?n`eC_0;%qmt^sqxWiS(RF^0GS?RAE~f!vwU1Z$YMU zDC5M)q-J!xl+2Yi?i9@B?)Rx>20#`2hyd*)%w?#+qK>L~cMH92?8|-;zm4_n;{BpQ z9H<%o3DwA(o0iL?YW@AvK50e+KLPOSTme-C@YGst3U_}vWs6Y(K7xXj{lJ(;Yo59V zW$f)JP-z39iUfh}nPe8l`WI#|XO_RpH^7y0>pES%VMMeQPZBqd5bH_3>Jfj%hWq$L zd1;DNA~02A{p`1Rle$OMIRseop z%v3g&)WLT-t+o5iqhw*DWHY}!1Srq%#2jAldYbSS=;+;Ju-pqDZR|T*J^oCnFSsH+&aHXR^qH-hA5o8dnN~mL7o_)21Hm|Hu~QSf zpCYs=#-Iq9*tIfRI)v<-(|4Pgfqno2_IE)9xgIj#e*DsX^gv7E6`O?hke-3%X^=t+ zx&XjKN~Cehf$WTl}~gN#J`kANz)mNzTk8*g%aME=yO zVIVTKhVGl6a)lT=T-+Q!wc&C5VS1bo1EJ)yh&f~Z6@Fp=MO+AgB(_Mt5Mz8I_RedA zzxawGmBC`c5w|)!(VsU_>l7gU+I`Memg2PICBoLDvVGllaIrSl94-01cbzxK7LZ?n zSev`A!Wh>Yu_DPJk^-C_Y)#P9hYMN8z%AD?3Mo;xukQY{aD+9D5o>%50m&0F%PsU6 zd@8Cg&k9a3FRp5FWT!g8LbpBQaQt>KL10|6K~XV#rX3 z9dly8ia3f*WrPNJEgwLGkRl+c(o&K^tFgOGJaw0V_rw3b@V~b~wlQCEdl<=edl)ew z=sp;kHrcZbaN^5DD_-*j3C^J(RT^a25>QJCyb9Fn>gHkLa@df@2%}CUG0Q!q6BS^2 zpau!84(O(BHWBU6IWZ#x^*3>m~O1%}_kjRhGX z-cNajmC0jZL8dSmJGLT;+Bf;;Ry&>dYmGtN7v~=~>xG0_(WoQ)~9seIoN9sxl zslh4#A;E{A44r>A<1u9pCWHWG76>WyI|FO*HmAJ(8=gzC^2U!^|<`)&3L8Y7^DqboR;5A97odr4CBIfe5i*Nb2#lnZ27S}nb0H9FwZmj0&3}NNrvTsw}Ivw z#Y2oQF<#pKX)fZb}vFtE%b-J+)}>NO8`o!O$g!uQm|f}&`^BW{7=bWa#l^HG~?R6 zl-HjVyD*3FAXk_N9J0i3PB91PM<_8z?lvU0rU{zXU|H(U+4dP#3Y%ux z)hg~v2Yh9pEWS}{=9%%V9-t!y-#)QZfkzp=|a+Mfe62d7QX8&!3p;)Y;Hi z=X+bpP<4*Afb&TijgQHi07&Hxa+6hT%^*)G@30g)N%w%4+nEaR(A!|II^jn z^d<-wOE<*C5^x{o40^@~j)9{l<&7i2=XF>2?$oJpM^ID6^+8mevy6@C6i_U%LC7zJ z(C7t|R;ajKFQe}iF%uzDjG=G|wZRcl7hVcSG}hLuj80?EumQ`UjsS2(N`4c=ZZX&G z7(t}W(@;-ebOE^`3mzg3?2f8;kRHrZV>gUxD|}YiGw)3(voFjBhmRa8MKL^)PgmsH zpJ#bY<4Hx=EQAYSRT=>~hcQ8(wYVfomQxM3?cR1|m|?^bWEhonwq$|&ma@H&3#!5d zF`izvFbD3qPXWZ!(hW5{&8-DnzGUxU0=9bV2t}D;jk{c2JWr6Jcu+dXf<1$f5weyk zJxD9_FsF}_PVu5vHt3^ijG@F}u>XVx$_?*%^~C`;1gW9G>Gb%QgB-fz!n6;EGq|n` zXzu4G$FhkV+2-5O;ZEOzS}1@L9|Eympi%0p*!!@n*z;8(uCclP(^pR|+zkiqpuk10 z1U#XBSeXRaNhqSc?xqMaG*kA#>+_(L4-V+&1}%yMA@(lcX(1#w+(;5F4%y7MwMJj|D1uDiI z{K4*mtuvErDL!{Q>J3pS1|Fp_(hJrK=Gp_tz9`PwF+CGi@il{V>7)|J=QK75|C0~$ z>L^Z?LT>H&(+SHP19)_Yth2P=BVd6as{q-%Y(2jNPJ~PML{jdhXbkYsMrdWSRu<+I3fz{Ty-hPn_%$! zQd4KqFTs}y3F`!~1z~<6`mr^86*nv+{A_Qe1^_dWdIwD3C;pJQT0lQ%Hfn=4>29Q@Xzy z)u+^g4#RWqSwvR>Ib+Xf+@6l|QtHG!pFmCb$5cQ2X;^szJp&o<3Y*?W<8k|!a`ces z2@31EHd1$TQAh6Kwx{N}`5!k8sb3$U*^K#c2ThF_b2sHy@_bWb$-N;@ny#S)E3E>@NsweaNbQH++@xc>*0|3Wpx|z5rIp*3W^d3B%1- z{zkX!*{^sf`sXD9Hs`BCse$M+LpC{QqbfX)vPEbg-Y_-kVk7NO*r36c+=&Kl$lkz5 z#Hs^#515mGJp$656)2nbV#(VO1xVu1LrlJQcqO>HXBwS_J9+!g61(4NsjO9?GLBXJ zi|CSMMO;fvG*#R>MX=cVmSJG(Ew+U}5V7ASAX5P$()Z~9!kHEWm@0-M0~~(}Equ@@ z^bWEF4h^H?oaB}$ecZ;V+x4CJu%RcIpL@|ie9YU|;7SuReb-3+Uy!rNaD&NWVkD?+RK zntZ}~f(c}IAPo+cd&!Sg?)9WIq1G0g4P`WXreW-3ES6iuZv3}N^HXPBQ&v>&pT-Bs zYxL3n%0}j3S&jjTAWJ1Fd&>xj*)4?jeZsu%q`tCJ#mpA}&w;JlFW|@h6<&ggo7ALNly_EcOd~6QOmd-Mhj|y%IVnD+(Xn;9Yt;bhLDOOOqSHimv zPrfJRA@Ud-1H>71NT?W%rJ*j15hnT4conuc1EsT=jNYk{n76^?0*(NnSzxG;ep|^x zk@OOFwrhStnsREk6zI{L>srbKxpIItpg2ZWsDA11pp~6uj!a55fNRe#B`?;91}Ypi z((wrcasn{xxB@Kq25l3_pPVIPGqVy|b%xiua7A&eJp30E8DcOsA#W)psl;1vR)YtW zXzpocBO>mH!)H%)Httz7$DGZdyp9HhyC81inh;#()-`u(|P4V(9bqOb&I zsw!64T1C)?#SVnf)#N94*>I!?vR{sYgS7QP@Yzh78$*x&LD>fP^HVJ*`>Us}KUhBz z#busowBCb8OUFOrC=fVuQA+Q~jzvs^6woq~1$6>D`}-ap9PQtxZj^zmxfqr|iA*3S z)Vo^Ho(pUhU>T}Qc(7xzZ=C6NaQUY4@G$;D`7jWvzfh7=(YN_RWWF{xlFNHC{Xx~4 zICVzV`v05*Unh<7cz$HBxVO>;u1|_K)=tzQDaXQFS%+za;6QoiIEbAcJjxE7y&lCK zXzH1#WaO>NfixHF8_j!sONxN9$r@K%6!j2K&YBBwp8e+G`zU8<+14{>Kv9WShyg;b z1H*YpFRVAyM-db8Oj%8oG<+vvK8N)z&dRR0k5R6hIfcl?$;JmUj*5fvc%RZeG%sq8 z%W|4F7ubFkO7h48b;iD$y-)KCp8yQ#pGQ1kx2)k)wo(u!{cz#zCgc*+U1a+P9oMyo z76U_T9wg=H zj2b{S3@8bgeD6j!2pR?qqJfQNIG>hq^nE53-BkI7nBa?B>kVsq+*TaO3JsMJLFdtg z_3%<*c#Rf}@i|xyiltnoCW(g>vhS5LWfS-xWwTXc5+TAds;UZ;RSy>keO{YloB(=_ zp)Qo|B-=|9ylx}DtnlFx8g`b~!J9Q(L@!#lQz#dJ|1D!M(|s2+uNq73)jN~_>b>%{1SDAJTPfdtvZps_7M5{;;=nU5b!J>~M_*UBkD%@`D{lq|9xF)*&n3<*Wi^a z{4?zy#-dP@D>NC5+{K7N@1X#@&X6s(JY3D-R@K2bgLO zA=b=vphq1)s6?9OE$_$p1*ReU&#hM3BYwUrX3d5b%%LZz*(GMLD3dtHMH}5+#e~t} zzrAfK4eYcP?U&!K0 zFb`TGb7SPhKy>9)f8T%M^3B4iM5HMGF-%b|$W^+`M){@Fl=f0`_*MTDxg>vLYL6 zmP{N|Mdgt7g8}CKLa0Omc;RzQNPFjzUh$+=v$^6{b|M5-?LaFJz+Ym}qGASeAPQ+?JNXy4v{V!*Wj7!QxMkPCpZ3M?SzgjAG=Bo=)?)(0NW*X zC$9kOUW<~`Ngw0AQ!bqXNx!Hq`4rh7#kKDj(fuWWwT%SFktDDNEiV(H6BCI@wfk~s z4A{{Gm#TRm3(j3Uj0!aHI1g>BXdW z1j+56KJ;Z&XzwIiKd;dlex`$8NIG`Up1f!#Sict;Gm;+pAR-JE)Sx4+Qqu+k@37d> ze>>q@NbyRg@@P3OUC;=80J@HCfUaW+pz9br$Xk({1gTgoP4a2mhjm|U``lE&JVM)H z3!haL=dTK7y%Qyl}iu{CIjL$`&oY9X;Igo6&8`RLdo&##I;I=^$7BpheuG}g)%pk z{|sWL#>oWz-^kK|6klP*lbw)mM`>^dv-#`RK{2_tW>PjG8UKGfpQIlOqkx;R9^uZIrDR(eH+oDI?!haEiuApzIeRJEn&=672S;r{3( z%`UmEf&;e{elbxkBZpEfO4GJSJh1=#*mFm&*4PHW2x|p0HUsbGIR_F$j~2D|)8)Ej zi$op!w~Z~m;$Neaov8o&N}kKA`bB7mCTcT-Jf~_ z+Hy_4Sz%^+Af!>f`^XkRBK5ZGtRgz>*{tE9M(&WO6SBtiIz{EuO_h@O(a=GTUT?A* z+OBfSr5rWmm=MKZY_b$42q{AGgd9tefO&kKmkNjMxl+xON1Sadj>Z=uZ)|sMiM~ha z2@m5?W96gz5El4qBjLb~B8ogh_qE7`2gPr{6(pL4r9Uw~RYOL|C%F55jud;u0EfO! zL1ea|Tn)fqXz=B97w_yhYqFLX``BR>LryPp@zB*x!!ZE%1XN*(yIoA-#F6Xr_AR3w zFRO)np)>bIM)D@z^pMxkqa!Jy%rWGm7k_I`=6lHR zP0eS0AD%)sk&lWKI2?%kz>d{*%v2{&bfm6muc{7k!g^YsY$5+pCmS$TnZWJ?tp;5r zsc};!w~LO@-0!5#lYUrLTN^ct;W8T~WE>KvfbIj!1+}dCm`c^Gr5C&G+p`924RCA( zb7c!^?&|YW^S~2vp$$MC^=w}+OjWj#HBY&Dnw+Kx{M`0bW=?uQ)6k#azP&Y|7x@LU zW7_cITj4(xv~C4HxOO&2lu$KLa>tjOoXgiU#^?IMqVQ*uaaNMLS$+q22}%Rz_xhcy zzESHla>t2y;?xy6zI`Q0T8IPPb#06aWrio3^lAuJL4*G|qK8MPROni%c4BOp(aGkG zw@AXR38$^&^-OcQSMWq+!4jaT5bjOF6n{D4maC%M=q6V4ul!F{t)j}kF)JB~5jW0U zP$XCku5;SiR6423&fL5&jQ#~&BmBqDw%GC;I+c<~sn_LfVyuZ>K2O;mC{9q6`95>S z$_3B_SQTts0dcwu?fFsHo%M$%p!+F-3#$9+9frx>uy|~=e{AiZWyXNS?($)Fhb;2l zHJf7002cwTM&HK9r;1lFs0pYk)Z9hQIrzD9XmIp#5^<2Fkz?F0S*tU(m)+EeVU_dS zpRo-Ca8w43#CREQ+`?QuxtnO-cUu2fJIblSvY}HK+91QOm5`8X@>8yf=;ZhT}^m4eH#vq3u`KHTFVlo2o4OA5N*gA9$MTJ*4&%^>cb!u{P0A`QMKrs|o0!T(BDZdHOz3CI|7mW# zd;gOb!^S%YniC3kMo_R&ML)sn5#r>EJnT}+NmUbuNIq0;N=9Pz2;rV!si8h2n9tw& z%GC6E1l5DNz3P@-kV%EB^45#TW^d|ve1l%i?N~s=KzWfS*s@Pd&G78h)OmS$PWz_W zzqaV%Yk%fw))|giz**3907d+(olr(JBH-}{H%aOiUxvTURW{d&{~bhyB-ZJuBeM^$ z&Xb9(#GIUp^l0G>(<7(g)Q!3KH`##tMb_(FCgc`ys}xF5nL-0UX7nk?C&(jR^aA)k zeZ97*miVxCL8yUW+XuB2gKD1)KSm0$6nva|Ohy|dL!J8c6kMo)W+ZQlsBUMu&x4=n zf^-3BFG$;VQ4Q zAi2+}@9P$0Dcr&znwauTfezy=NOV$L=rQVJo)&NUg*c=h32oO)t=s{8^9-nXDS zOSuKswpn8%x`%~M!5yrrI<>|DmDLJSMXhG|bIKUAvZU<7J8cN6?hFW?MJ)1YGQH4( zqeYip{pP;&g4@aE#miHU@L%<9oxU^{uvyPm7}4$2lo~FzqSYM(N3}w}EC~8t$L=#< zJ8s3XH}_q;75-UK#3f~RS|{oCnnd%`thTP1qB3~~&S=#KeYaUE#1bkvF$}KbtuV+5oDZR%UhDMpv>+&Mz*f(V!tNv)hC96kr_SB3QvR=A+46G#LzEB%h4l1d5GT8{j8Z&p$fp zt$3CjMY%O0_RVZV&6&TVGJe_Fjm{D=ocLxk7a`9BLq=k}!LhWy{b=Ij%Y_Hr0*z0t zw?5d-^4)H=LxS|TzVe=SJP-l~{!R~$bYtt^-PA1f=7y0^mzE%0t$Q#wze+% z=tH$4?wut=6RY-3m(^l}Ag1WAr0>}$P150fda%49RuIr29_1|8Uaf`ok=q7P6>6_{ zGufrx34F_;eno$onOKGq^QTs}Tldi_Ef7McFiCptIscYco)724(BB`;G5Bzc_HrvE zxg-y{P3K_FPl7&rk)S({u!3%+IMo%iI5n;3AxxiLD&4mG#?W>u+1Mv|eONH2Xme>w z=W`(}uUinbujCqW24j6~_ME#!H9ug2KD>l@QiKQ)75b-OYlS7$1-G$2G8)Mj~d(cBUU@I0x3LUXOoQsHanL`_nCo^z;Nyx^d`jnYH10_}Tc z(w|iv5b~9RkjxqhWT>vHABIyI|MjO|a#tt^ziLxXN9a5h=r}5>fc1el?i?84i1JDJ- zGIj0zQprEv=GU?P8w1FKhB>je9|0M01U7-klD*iCp>JL8`>7h`vtl1bfgLuNflf}r zH|6`{SJP`unZb_kt2Tky@I(Fp{bQE5tMw6(q54#kDV!(A=`9W+u zdS;Y*fh|0;$M*vGy;YT>MnCxKNpTAo1=5Ewy=&2BO?ahV_+0BcgcVz39oUjmj7NV` zCk}T#)^!pN*Bbq$zEx8)v`2`H<$ic)`SYhEMS-&;U4|cfC^7nE4jB3rnmFHQW35Uv zB8$kmNc0PYQrli=#zQS(5t{6GQbt@CK6hRyoC!^ahU$Y6IkxwlyyxKB ze5FgN;L+x$QPs?wsDq-nXiVgUIS!IQloFjFZ_h`)H67$6`uW99S49&GS zn#ryjh6`8USG2+=r6lz--xgLDYr=GYgN=JR*;*(4MflEU&dvGB0(}$|bFc{xU8tZM zspb9sx;u~|`z^owkkd{Ib}&9SxGb2^w1HV-Yh%SB%U)Tl0q3(6|0OiO zmc9TLXLYQa&pf|c%r3iUnzskt?em^t7aFjbpan>djW6HEo-Bht0u!RdgUq{d)}~YC zRHx-8u}B_XYsJ!LX}8n%bC*~oA#*sT&K)CDh*P1R0~_(dsroI5t0|otgEzN*rH1Q$ zf#;*M}qvpZ7Ox$E42E=N;TJZ5QX z9uh(s1?%bVx-Mfjml(l1MW6WW$8L69nZ@rh2Fje~!{?|~D|abLvKrGfjKkq$C=Ig? zJ5)GO`s%FPC14*VhOuO0tWb;jZ3=y_)#H{!V=bGbkI&s@N|eooDorX)hMOA;qWDP| ziu`1R1%>~H@jE)7OP*8q_pVUhsi;2ZNAiPd;cAlUSNvT_ukDZ_bk?Ezc<5c$a&Ql_ zTuRWGPn#Vc6SvT6Iyko|p2fjM4cXEx?0%`d$)3{=4e4+rd4uQM0cuK@vf#DdpdFe( zw$IdVIR7rAV^iiB$tB46r7U+jl+4&kbg!T`lyD&HmW4lkuKw@Km=$&xjuGNQNnk{) zgr|lzNkm%mNSa>9>-}~L4{pbSDD`$Zg4~U(jlO*Gtmy8W8itlpZr`GiH?*e4cgvUj zhu|pTM7gUz`nN$mUdcV7cLY1%chnK8K>9ZNccuMV?QR-x%w8_A4^OkJc*L~X9^8j0 zMYo=;1xOpuxscto-x%M0nODp~#txhx#3|FWGcWEq6Amx9qBF1|ichaw(saqBaHQ+m z!9+>44jV04_5EfIoa4^LqN{oG7si9kb|dO|g0xob>anVA{D9Wt)gASoIUrNEYMrM) z)rQ}2d+l<@y?uxKcDIt*00uF?^0=f=oPR$2ifek}!P0IH?HmPV4|w^W%o%@cC31b# zovT(nB3Sp*9nBIu8!N)i_YQqRDg5!r-|$r&Ft5oFqaP8+eQAKR z#~Fw7-mqt{rtsy*?VV^E_EFT9;pgCN**eVWA};@c7e5nM8oyRZy)#E2Kt1&so>2N> zan{A11I?2StXN%bUFp-uvzYs$4?MC3ws0_HMH0E9=i(wG{P*ehcVC+ZBoOpa zf>BFnm1s@@e@Z|^onf=HD%xyCBa~Ee>#|xnW{~?1mztv8)+}st{@}4s3;ygDh`@x6 z)P{LdX{>YUmCg_5dGki;Z>nP678d8uNUCv()~^b+2zA~V%cFUsgQ4^^4VOK@8cZ0r zD6xCqhQHD$Hm0ucqpp{;T20HP?8|*x4v15dA6cQ*>ACJCwjrJOyXF_w*qghB;jygosYssJx6Fe= zAny9Lw0YmFk(?IE<%sX^V~u7hcVDzL$U-%!@DW2~=lkD}x!wHJ9?ze*1(R3~yw+j& z;X9p6{#{L4^~=@#%w%#7=AWnz_00Mf`Fc7BEbnJZTqMcaJ-l|+um zN@3IgaskRD$0MANV_H=XuU%*z(VmWjpz5xy#m^?)7d|u$=rSFFDT_q1T=oJSG7Rasoyi1eXOj)JV0bAf#rf!?{~i9gK(E zv?+0`+z3WGj`{lD+vgo8{~9LC^QsZRN%v(IOZFnjTwVU+tP+4#u+!Jk_o&$P{YAw* zPBdxw34gnEB(jxqi?^mpWXAc0K>(r8lrgW-jx!e?>_)hMq|zw#`EM}@5_JoGcG|6l zZ+W2u^;7A;GKW16e(<#x&D7+g`CYG#uRN!Qx^mAz`npEkdk0XW;RJ^A=(E9X^I!}S z9!j_-TBQ-|F9`i=#wSzRJVD=oyNuD1jOv!C_&phPC<+?!fI$y8fVUnp{(gV=X0FQk zzJM14+7Un0CX%`E9sZ25*lvsC6Z?&ix)u>PD+i3TI7b;z8m(}9eUjC zuoA(|faYk$%y zUyU-gU`@7ZAHt$9)=Dx1L|+lh-o_am!AB0hUV@Iu^w2YYS#)1_->-rWf2!X?8gt&` z6vHbmfw4j}xtEUm{3E!0S5nrK@s2bTP?XjZ7Do)2$W!rxSNq5N30+G zb!?)7%A`g{?dhX4<@FmZ$qHAY2H;frT*ulT`5UfZU%vlZILi>;wVx{5P0}1}(#A_ehj@n#1>%~Dz&36lR zP1xZ|?3WqWcpZ6Q6t}snn{d>hYJ9?|yV6Otl4!^1>`0-rR7e^gKQ-n*5Zy=I#ai7^ zp1+5u9S%Zs--Z)-T2w(&)_0ZOdF~tgZQ!$d*{rNgVvN-HR4kq40zwsl{Pe|kCa(Qp z;HdNO_g8p2ME9jEcXC+XXJ-^UyzANL*yliB4Z&)lBI*N?_8x^{kWy}D-J8M5gJgV|Qe<3rs?ZL&T+f6emRNZ- zk>02WuZ5ad-+CzT`dMeAZD%{D4IjeH-<@S%lv8&##?eHY<4=O@7fC*`dg7k17BX}8 z9idPeaLen_QP3h0pI@jBn+2i8BgM*3E_x*=iRV7|ki1}}E$d5z&w1z&!hL0?Od_RA z`L$mlOT!#VsVCKc`~HWgs}6|riMHRegdio|AV^9n-5{xibV^8fg9ri(3Mh>9fXsW@o0LjNyhS zYHyx~&xzf|!|ICeZXn?_dy}h`&AJiRNxU$l*C$N?R?y72_=xF)$(dHvc=(0?s>5>T zD^jEi8m96oZv8xTaH98MqP$gM6=n;-67s$8t2A!a`;9mS9q#;J%!8BLW$JV|(#%PkzO{#(IdlJjXSZEnR}m62l>-AG9*>MyN4rf>o<8hHvTy~Z4o1~1(1 zZaCJT)5i!HaaLbeMB3Pjxd0;vH99}mjPWuWO&geZbEPyQ`pibiu@3j+U0OSbGxPeC zmn{X6OIfmM-Qwn7WJ&NoD8e>^h>}^5IiU09=yJpk!B6Iq3zr)MXz6=DW8KL{Nd8k-xOh;nLS@m}cIgW+ih|u+{w^zv*Z!&`bP2uKIhJe&A7tKjV0%x58y;=|TveY(zLgctUCx>;O&A*Yjn!i`v9lh5I$n|C& z>}mwUe9(J3x0GMh(0fWE9^8_~0ttzax4h4>se>u-xgCabXK%|)G>QL;G&jhf6<8^m z=v}_f6A0Q-{^Z^o^6>LfC>W?WvEmaF5$xewb_zhAzKBhwvOy za((HVVD~n#fgR0IF*TFO6WNZJqIdtXlpC#&(vMANF(c;@*oe#BrI^w++-k6Q*)P&&+gt@Ll>6-asOZw= zpl3QS!+IfBP+CCXM`$ar{G!d$78<5D((CH22{Q9+Ri6Hc*;V$=P;*ivSetUzBpld3 zgmgoNA1y1@u+Yh|lQ1&cj_K`!wv0=bF3|Cm#G0@|(uBOmwW`?(`r+Y9%rsQt;?4WQ zzv+^yS=8fY?}(=~u3xR=7gz91sZ^Q8ro~Grl%#XcIDM&(a9#}j(Fa`vn}k#avAx;z zwz5P#@6mDwaPG9_bdX>v#9yI*x}>Bpmgwmxtx>hS3iufWQhwDcD<(!U8h`U zC9z{aG}_VQ%JLl?jDJby{85u-Z;MvXn&`W2hGalRwze5oe`-vx4NYRKN_b;~)FiIj z!k61!>F<7Y82gZItG-^=0`aY!n+;b^G1t-l0GnlX%{xeGz6IYe zx4#q3XAE7Lg(o#?!cn9GVfFi}x7zF2n=bOh%p^AYA5AC{`i5f9-V@>8_xOU?sr-;;1LrDp?EY0$F`aVmo-y741E1)?0>PPfiuo6POs1nI~ zH{U{rZUuqEC1P15;eopCxUtTJ=rggIaR-dyZUk!9Jx!)AC=e$GEv(a@BSah0#WC<+ zt}c%p$Xk(M(Pr#oA`o0myXtbmwQTV>latUdU}Z!7k&)p#2$nC@|Y)+0|)ve3HZ%Joa=Y2b(pl7I-_-P zyD*}jlq3eBfe*aZ-0)2CN}W>O!V)eQ(y`&s zw(5wWi{jD`99eb6p-MPs@g~M~%GIi@Z=`IP$MP#v4KfV}TD3`8%ZoT1grHElZA=8a zvHRhkZDRir>#&M`!%e)(xqeWlj zgNU#~4}mxBnX#LDqrr)LeXp|l6~Q7#Tv?p#lpf4P{b%dANTq>>&AYnWKk*9QY44{oFP)KKRVy{4mfU{kr#SXh-Af}Fe6nFve5RP`J2xCfO#f!W19#9V#Zq6>S#ptsE7DjjhXHS|&=wR!?Q z^z4-^T>-#3W&=1oEYp;EWXK~l69E!MyyY}McT+FY#iOOx94?b*uGJwYTCasxCe+;& zbUJJx@U=>aXC1)a8TphL7$Sp*sJ&=~4zXw&fAcU%+dkq2|KMFKxv>J|$HlrCDoI9I zRnRxs5ZD5|cC>32kn9sKgedJ#vHeSd!yIS~Z7+bptR9EAAO0Ld16nQUR?Gj`G0gvO0e^{F-njU;rKxi{XZx{CS~lao1%#mykepj_6yd ztZ`6jjp(k{EujJ&Z@ln7kiGaZq^z~`v!T%j>2CNk9kMW+I}`maMg11xSTw;`V_L}K zPlo8*K((5Ah?kK+-Xxn3LV+)2x!2#1F)MxxB2BG{TbRBU5ouqsczMl0+tjB?nz+us z!!KEq+wl-VFqgZV;wA0F68Qo_^penj)m=+V!Ric!LzC=?e6l{btB7Txgr7-|1R&zh zkF0N*!w{rTiZxpGHj;d){xkjFd&-`~=frRNmfKxk<_}rpubO5CD`wb3)}a~`$3aWMW27gW#e=q=4;!V8 zw>`-E_TRr-u^8~Tm1~~APRviA#I8i_KW_W-r-H#AEmW#MN(g3zJ*%^M{3ILu-fi9p z5ZHC|MlLSVObVmdZS(u97f+6ni0hIJPEUEH&zUVnN~bp*8PF!^;Ywkyj}O7V0>%%K zm#qo!vdb*Aa4;SDnH^j+74oevvCH5r0QXXgTI)PRI!Ex zA&i|nuIg4zV(79{4SI|mF7plqR%N?)ve4KBVtYW|%rQu%(Gs3zj6PPfAZki>@Raxg zcAybGGa7vIbWDO(L1eE7>=kb?vZ zFS91`gIf^78Ms1go~QGAonMJVF}Hr245gb=Ruw}Qtjw!u9fK;|wD%uS!*;%8t1WmG z+&-WM8Nrt!471EEsuq_*CTu_Zb^gf!L+&!xw#A1*%8FB6X+EC0!4s}axlhsl@tVuY zn|o2_a~f4F0XUwIl23&K4YR#Q#_@2Ok58wtw!zX~nu^;8x2y+Zu?+$j=HLlandbuO zhQg4@VyyqyoIpyivJay{K^CQSiE;ADiLE~1RDZ~?FTD+D2m;W1M~aowwHadpB|9F) z(e?mICcaU=JS_PAEMqQ+{Gf3q)%iFhncK9PgYb40&tWhmT~Q4}sY5Suz_VSF%k_fv#5`r-ju z76DkPa-*t{1Dy^QYVklWey8NU5ShVon(L3+IyLg9Iz}Jx0A!}?pZ(${)20-lVi@~!WN`gQcP!}VPSsJ$zL|&$vPfiD>mNx`Tl3=@Mh4uo&pr@ z1T#eG0{jGr?Z(31YdN-M#-*|LID~&0-|#!ktF@+vHl{)~ahL2bqE?>7tnxYD=+ zFGg;5a*UPwUluP)5&YDFqB&}Ub7E4ZtZaTgm$z@V_`r$#fHM=u>j!_e55lPHb<1i# zj@6d>XOSmfxXt`I>Ls&>-?KYZ7luV&3BT5QiNC2-(1Z>*?8bv$vk6lOK_{Bf`CU{P z&F}uZU&|dX-K|zhYQJK3_87uGGFY9UZ|)Rlm+8OvYkJMhrSw*u)fpv(2m|R2g6pHG zwi7;Wj-CHUWO(4w*Hib3N7v0La$U$5`Oegb%(}KqG*T4e1(+ZDO?D!QX-58;N?^7# z#;OaKt$QxHd!GX;bG)^Ws1aV16)~j3{=V0hFKpe{37FrnC=m@Qm*F#9PiKbD;e6d` zXLxDvY^XY^&GEuThL;Dz+YODCsvQ^}WOc#@ zIef=#_H#R{PXu%exte}Bf}y+zwEqRc8p(E=(U|%Vni{Ez3E!p@M_?|)%}e9 zK3ukb2Nxv_8iy7b;O%}Q-!#;`MR7YYWw4=o+{my*Nj7WZ-u(~-_LOcE0XH=bIX*D8x!&O^* z_a$#3wjn)32&g<<)a1v&BA-lmL!Q`)Bl<;W`d9s|Fn&t%nq?`wIkDRzU5RBRCm_&{ zWpRwwa3u(o|WPoKj?W?>i!n_N}0Qy{AL3seTUeDkxXEVv9+!=_ZqJ1yncJ?P9TkAol$mt-SMhl z;u_sk%HXN;H#|sUdI03wa+A>2Hy&o_i&%+o-WM*p_kt!LrSLQ1FNXCZY$QV@-olRG ze_=Mqv+FSLxKGqo8_uzN0V!T$Y(1fOm~VE zjY$0+-BoGudZ`essASvU@XwRf(B}4vxR!f88WJ9$?rL@u_q8*Up{CHEJ2WzZlxEQc zpbPz*zJ^z;{sihVgAP3F^<@L?I*7<`gGdB+x0babw{E02n|DGylN;MT2PgxuE7I|# z2N}tg`9Emv-y1W3ZXk;5hu43&g!m%EA|@gjxKg#*TUgT8ibNe%31U$UXFGY6+N{DM zbMM}A&vdCA-4MX(F-pjUrBw5IMkQ)uKO=q|D%wS2(3cZ~TSHeA2nrl$`HzX!vkyeG zUP&rR;W5yXLIZa>7--+=o6UZm-XXxYum(j6D7F(&^|Nje1)6Ps`A}8O7rETyXBbVr za22YIP@+4Z2XCce!Ntz*BcT3sRZ#sza=cObFySA$D4=3EI#HOR; zHoCU5*8ZszvSvTI-WQw6lVu&TdmT|b(d4b5urRAx08WuA`HSkuzSSDpc|OAZz_e2Z88!RCM~cxMv4uXD@ta3S3kZFmSi9ttt*C6?BI_Rl4NqHEvMbzj= zG>yH~gIN!)Y{5f6*Bjd>sZ92snuj9N*jgsBPB{GJkCZA z^TjJWX)8>2otg^nk7cm%SsVb@?FrUecPs19>f|>OZI!^En8A^1%7c~xf!X6YxcpUh z-K8NP4|bYxodjgg;2WSggjiEnpobH79Z`p^MNvAfpPwH^KEp73`4~GikZPGbj^>>FWO`-Qj-K{${c z2#3h_3a81^sBJp`SzCt|%Gcb#`4@Dc8v}kX`0LIAP8kQmS**Jv{I=S}ibj=~Z$U-f zY_|Z7NG}Sex@^heXn9fmP&Mlp#}C!t$gjNA1cAAizVT77V|T`)`~d^{Pry+AD#1&g z{UguGRz>vjnu^TO*{bmIuZ>RD%hnqgOuCdD`7|!jVi?OgI^oeI^c&?%WQwGZEC0Ox zSYftOlwrH-cpt_t<~{S&aH^MVzd^NAvPWeSRER4@&CVh7`WPovaT$ z<4-rDHBw=g-?tjy*;2>~Emtf*{74fy_QAoz)zy9#6ZhB%8&WF&(SV&}d2b?^og$`9 zpj=f;>{ljJ;%uZ_#lSt*gcF{cJRfp-C#xAz0U^k-J}N zb8jr>HmkwSOkpp(<81?}QWDBO|LWiRqW7-u{QtB7GaDLfk7FK{*a_ShoE_k9^XV}$!3)b1 zy~~SA%)Louw(T5zCHS&BgwLsk34CN3tTGB~g}!bGt|_n^HRyNGh`tLW!&}++hJ5Zy zVL@-Ww_U2>!I(K0j@KZUP2>bclIM`^|kX$J3Z|C+9c z#Zt|ZX~vt0r}319vOuVU0K<#tyB3gPW}3i=G%N&!!vO-Dx_lE1{rnd5!HQ~SbB9mH z_qf}lA2h3#S7`^w zKcx<<5G7kk4>&{U=xcX%njXe?42!_50ag0;r{g&V;+u|aqi0!+AH*m2_YF+!g1ug) zM>TDew#57S;fTF^vV|pRO5xe|dqlIS0_@L4bFlq$%W7TRKU=Ee2*yehKda6^gOZ-2 z<*v7=h)EdjGVS`9Js61|O$GPL?t~vOpeO6 z7Vnopd^`9_3p=-i?2>jr_B$b9s;^><{*nyGlggx-?@<>~L#n7;h0X~2hmAI0;hGKJ zP#{{{^@#CUn-F(-S7JJ^Rht+OYN-*aTKxXsohi(&u zDr2SF-(1gk_}AxOcXxyM=eaU%S@E2dL)=fHEk&CdAGr+tD5nIe%$}i))g^zDN5`*a zw?-UZ7hi2Gg98d4gQ6Iy{GLeBo}Ssq~?PjwV{yRe(fDkrub&40vPz+2YTD z`{kP@_!S6|P>1d(-45SJhuql_p^5$MyAF&mNRirEoQTc#c&kS(lS#U*eLB2!{*Ui( zU_;C(Fha;zc;2G^!`$|Kv%5TX(4b^-^-o`A0j^oVfpo>pog%zwu4AOxN3ra4=r4){ z5fOHgX!s55*%HC0RK3HuF2qyaQX07gv7mpyvrUsdGh-GIe-leFK=)7bYo^2DhH;pT zcm1b4r^`b2_ZXz9#u0sq_!VOlwi+d0rW!SPbYPqjtVCl*2L^jvOFl*Km1(iV1AZE4 zRn@sU-!zcp2e;MtGnefgIkWPr&yvg-JchHBvnz{cp_u|N_wJ)1S-~2oGzk7KZ-Ar)58S#BQsGc5jjj}#B4BIV-OxOh$+HJ@!7~6`j?+2^{`2bMmm4-&30=3 zeEQ(^$v-NgC*wAm@sgg?#900YZ#V&p*+8`2*OtP`;;Wt#n;u$CES`@meTt?e-lE=z z(e=e9=v$`?Mzp_MquCW9f(2Ui0L$#{nI%g_YoOzf!)~^G>9n*~otdQEi9F!{>$efH zFk|Fcl-mpLyFe91%uYoox*=N)%7w7Vomn*>Q~K6o=&Hax91}A~#B?voNOxY)cWETh zKJ*tK1ib?KFr>2#Z7vTHSK^et+C2=%qKlNq)YFPj?6edw)?UW=u+NEE1A+l zqNpfruLIt@$_=6+l8>&8{@g5y&2Zg|q6WSV?2aY}C)N(8YoU$H1ww476vf;aH-JPs zbEhiDLz|?Y>&4D}jOJ2{-{XXlEXVa&mjfiV)KIP05EiXp$!$ey3a62hppP^d1pEuH6GIrk zk!U?`)92N@|45T8Y3$T(2p!$yB?VpZ7Ic8hy!Bf@ky7b)U1+!xEOfo)UXX+cwo`$O|m;`KN9o8TI;rmXV5h?Xdk zm+rKj$KMKVqtWC>>(D@tRskB7*6=I&;L{MIEm*|;t0v;uc%b)<14=JGs5K12b)$$9Hrr%%w%)BgC?+5*0F_+YiDt@x-bid(Ks;lr~@#W&tG z-ZeAPy~dB~(9g3Mo<%m)Y;Ao|Hkp$E^XLj9oM zuOIlt&yvJ_2F4A=~dru|RO zpeze=F9L>up-n#mGb>|^gExK7OOb0n%3~YYwp3Pe%9<IYE-EVINRiGi%M456| z`r{(Ip@wf-B1Nlo$R^=<#=kb){SgyS`#wEP{9tXD^SC5ZP?K^~PGJvITHg$4vgLUL z0P~jtrtRD^9R&DMo+-jT*v15vr&j=+R?zYphI;Cr(@8Xo!~84Thlz0`Z^{8(ZMpVs z8540L0Q+~oW3e%>me0-icWht!qy$u@^>h1q%sUY$iQHbv(YF(Z=urj2qp6hj)X?*a z)Vm|HkT6i%Lz!i@{i&+4 z>!A(-y2KzF%7FuVG*o`ShFaxTyyF~*k^Sd=`%}#`D0D!)1ibOC2Md)L8E36AXwB+O zpS5?Z+^)jl89%z?tl<>_=%7uwE1(6SmS_8-4Ladz@~#9~eyv^vNc2R}MqiUxMwwFD zc7_oP%SkCD4Wey2?r`aX-%OtHEMsvxw(u;Hf2eS=aW$VFxjc8BG& zJe7E9FdR-8C0zE<8QfgM4`$&DqUO=@4MPS(V<%<*z?N3C|9;jp4$PDY@tqZca_U*C zsn~GEdvy8Gzv6s^nS+~riUxg&UeTW-l-eeTTkgCo@T2bq1d2efq8Jr%)KO(|4ge~#|H&tyI+Cb&V zH(c;A+KjQWZoe=*(9x7bM<@@j!kJ-3cK7k2ixA`}C9t&EC%io-1w)xS!s(sY%O`jE zpGardQe_aAWMak|+iz+U@J9Ir^p^Tv)k3H37Ps?$C22`QYN&KZph9<;d2ON_Hi;bC zFPjdxu@UvJ^u@WA!Y^LMDe^_bDGNRS*n!g+4e=KhEGoY~rx3)9;#ihr`5Go>;qQO- zQ}n=zKtlmZ@=HU&JMX!d{q{ZHh+UIJw-zj9Dr(r$bx(UZf~!I!@pq)vk$kKsJO%ii zIZx17(4Vq7+=I>XV}G$$qEqSb&EST)ih}9qRH+HxJz3OPR&rQO`07t29UPyL7>*q( zmGLA=A!)c)`E+^d-Sqc-$#;-25c@z$Jx(3vE;}`^-4%$Ni1)r)d_VUP+P`IT|mgh4?RkLP#yznvb* zJ;PWW556x(A(KJ!zJ|BzS)C1u&Q%x3<|YF!;z0noW8gu=j}IIq1)-tpnHsBGqgjEq zXLX^pW_h@&xzFwy)$b@D{@RNRUQ!kmPUh0SHmDz094o*?{su7;`EX{auS+3urZ$UM z;rWL+N#)6fA0{TReq%AUFC&+KZfO+Mh70})cGJiDS8D7rd~7s4Yva9h7ym_Qq%Uhd zse9^a%E3|zAgf{Wb=_AyR@(~MGxyXY`g$YjK5;>%YwIYXvcdjqq=2$Ul^w?miq_j^ z*0=t&Um*$B{zM@(@hbSSM*OJ<@2*yCeueSgdn5#@bb_Pu!~i!F)>WRRKWO}t50V$Y z-0xyji9;dmexlkA_<>we_>nJv!sj1p6bOc{1&v<{XN~EBLLgX7MIIZM_F*zw!*6HM zQK(KCaMzjWvC&^HhPean7{Xs@@W+118{>Buf{x5*9~~iVHPM}52kyW{xE>KLhy+Y) ze#MIYk?9xpwdGiLYC!OU19=q7u^^rHjxn8Z@SYnbh8&1$CXPV)^c^}70ce@9q3>+4 zVpZ=D_fuTd27~6x!%Mp*mUZsIm9gy&>y&1$M{>?gOoCBUjC5h{n0KUMsIfKwIZE~j z&ys{ktocDa5wHFgvrC(Qj(UqPL=1boCu_JK0IryL9K70_0uoV#2iY`!&NfM|wg=Eg zMaqDpvk)*j6A#003uKT1qrR{4-BIgP#Gchi6U>79&1WSNo#19vy>aUDF$_FJm zUT_8`4k1Xqodi9L1MD?5lbuTqglOE?q~|nIyLz({2y)EUXBa){5hTyeBL2oZA1npu zP_qR$eaj>-p@vojKGLJ{MnmDivm%oBVKnKG()ixyB?jz;5GEJE>bGlOuD!j~<1spGWl z-aY#|s6>47DK+l^2EpoXkK!R(?!L?iUT_U!L(zMWXCWz^@;UehrRE{h@XZglo=I3( z=U;h~{y#2xi^C@9zAc(cs#nBl-f#vMULnX{w_}+UAr!z4Lok0$8_o~{2JwU9EHZbsOvh(X)KLd#t4nP`4QEQEa?(y4 z4+F+4p%&oV&{nv1>K1)l+s>VqA4{4NSoRcAWaPIb9U;1(X-18vcL3@aAY#+m$I8+sPNaNC(0K?eWsKkV);~l( zMTZ;x?IzbNk%l#j_7;9xO zXti)-_tgUoJy;hvCJ7dAHXeI4Iv2as1Gx=-1|B*^`#3RAgfI$;kj*v~Dy#==+u9wC zCp<{+k|JrMxvUl5f~T~I|KT*VeC~1g5f+;9(&0H601FsExq{*t|2{8%3d?uwSytEz zg*K?5tLSFDa8C$v3TZAW80P<%mLR74J>wGQg{QB=ocw90u>F+C7S=YhwlatciOlSe zBCDRoh2Vu4mlWWHu249wsgY%|0s}60DzBOdlsjJ#zBW!+Qm#@;B*6ivWlA59eR2cz z)sL)a0*^)mAzM(3KpcvNm2lR2u6G=_3p-!T>jK?Aj1)`pR!*fajv@BcV!Rwr3xe~8 z*`ON0Js<`ngDnN(msyt|Y*x?cK$7>9!(sU(-#Jqa$8aVvbuHFAM(EQ`;@Qc zU`?GNAaGA^ALF@L?WDadN4_lr`x~g>(0Z zDH|I3RGOq?hhF^qX$`Ra+uvDw4Zq<`0pHedh=V}EIb>4)*3T}5Vr3bcF9VzFAQ8TA z+vq)^CC!VyNXhRM^otdebI7shc+2^=Llz1EL;`f%R_vo>BNZz~T%%T)KVu*RxgOxj zV2O7kUx>e8S#hY~Ff zxE`l6HWU8cThRB55_Bk}R!Asr{C55#LHLiWsN<#9CX>Hmzx=K}ubuyREI)7Mr%xKX zX6KRe34F#(N{puPAe?=h%V$LJoohtVV30}Vm(aAUXR^@tACaOeTY(WKoYm@N@Jr$tFQkbo1QyGF_nx*-6#GVV z3&%u3YH()kIJc;Xi{f<#6;a*JohFHd>qf(DV~7fPZ)AHzFVO-)yTHtAk-*g2Hg7Z| zE~b4!;hb6y+^#g%kZ)YSIDccnP!mPUJLWufsQi!Hlf z4m#WZctM-TmNgSJk@&~0C(KqlJW78~G^l$Q?QO{sLs#HU(KD{gYc}aYdy*LY3uD9s znOb~d&YSP=4PUp;?FpfAf2r@YxRrIp!N4N~VPbA#N|zM?di&qO@PcN$ldWcJ-q}Bq zS?={%uA0c=W8TO9R+3j72%Kjo7p?rT!*m+eEVQF7>Q-v#a<|&O9+t%le{%%Z>huvu z{3yS#viBwpL%694mag<24*sCBoE&Nk-80v^6p|`@sV2`M?-MdeZ5dd`l_h-f=~=ag z{rcvS1Y-3wZ2Xx?7?}+1lbR5+Yz;;Eh=SKm?V3|dDlx;=g?{jVHyO~LLMYvg~9ifV6!+0uH&8oJ^*L*Ep?%Iman2LD&ISl5`p=QXf`2hYD)q6b?Ra!$X|k0%uY5H7F5rz=bZZ ze+c^EgF~L{t_{fOmu}uMB0M2HnnpiMIOK~3eHG&mEy*9nvxn?h=PzPPzj^}{Y-|y% zwErrZS>L07yg08>Q{bz|;(d9~dJe8Xq6bsiccJ!WSL$Ffnu*@O#GFx+$z_Q!0favx zS;}U!yG%7cs^|_G?&8eB*{CD^Aj%+ta4^_;3$?+es_~?{&p1Tm-t=~Zc3jbu+Jw`+ zpS%Eb{|2MBlYs&<0kjyxxzUsL2S-k?+*I?iO_NU4-+Rc1WdUq&)85pqiBZ-0-Tve@ zA?ID$a~nm4r}jYyY~Xu7=6gAGHT;&+vnLVJp7joKbr z^@;Mql@vr(K!{l3WOay+zK9Zj+J3b-qrIs-1c@byQSvRZ&>7LSK%kwu@V*&@)HABtO}GE)zDmb-XH&p*T4sCRiW_r=Tn5{$KjH7rG_@Q|oBw>rH2CZ*Gz z)a+o)l^y@ZS$x=hpW-dil%;R$8<+_7d1!+o5$F+lfnEf15;_PV$x;^Qh##@vgWZ}X zIT7r(%D=7@-s+g9#XT|l9hWc1*a4(e(jU|*!GS@f@|7mIf`fv(Nah0@7Mbj6m;X~% zixxt$mHi7Eib4WJs=7btfg_$HcBifgFP830MJ#9zq_t2voZM&$fBHe5+)1_QZw*G| zc=y2P&tB;n)_lU^g5S{~)M-+nJC}SWPWR`ae5yfiN@!;9`Cq;}AeS>@)In46EV6Vm zv*U1_Mc%CtNn)pqQ52L$A>XvB!17*mcFw!>H2tk6`&VsUhzRpE<%Dq229n z!H>k^kO}Hwyx4uCFL7eUC3;e{*-st9UpaC=&RITsR7h$@bZl8IlGwk}^DimZP&ovz zW5KLZRTxjfOw||uM*Ee$E_4@C9&V(F@Ai4m5bXV9>Xk`ZW8Q4ekX-0GAtq!G{+l8A zcBh#9>@6)yA(@PJO%PtHXlLARp8bogFsJ9kw~y{l;q# zLCX$$!vB8W<$k_1qP|D#X$#rM+Izt}q#4V}OW-{rIO+}xNYL1O^K!I2%5%FzRS&iz zcJQ*u6JggKuhueJL3zjW`hceC-fj!*pU#D$maI0XFuhwOZj;fc^n;+6U&VFWS-Gcu+JX@ZXS>0I9zS~IcY3Qj?eKYgeNU7fCHwhtcp3kSpFVEZE zK{jK`Sw7S0rhtXa17Scqt$9+FcZRK^+0gT|w|~n%!?nj7xBfKB$#M}7vpyRVS9Yd@ zZ#zK`)zqf3AoRKWAOxJebV5fy1$Rq89o|$%6zMNQ)uPcql3c|`?meDP9S5T4$4I$f zy;kqc@i@)=egy@I_yRQ^h!_kSHB!5zF*kfA7eIjA*~XKJuGH(Bni*4^YmU~he5*6T z#~hqf!Nnc5{8=oy1k1t%8m)2+O?s#ClE1?8Aj~{=*`as1yg$(qQJ8DCvpjvzEy4sg z`!~O9?fGX(=v6yv_fM2Av*hAijpX1jI4&6KcmceYdymdoQzrzwgGMLO$5PYe@BJ^M zHMWuxIEaU+Ko&6YQ^mm7`57$-w(!Fnk;n6?UuCP~i;8N^D?a2zb7o}b$AKtvV#;DOTu@!aKFxh;HItW|g z)&R>|cVK}sQ1}j^`qtw5^0ylSLrd5TP;dp$p)}=6l{G2HWnbNrkIR!{E#q2i15M0E zb?Jc^2f%WQR)UJxyDeUx1NYX(&s%#Oj#8t`Oj^J6Ji$}=#2RtJh0*Eaz|tNZBw~Pu z5CiLigiszqsRfIW=6M+^CFi~&y|fwZkUCisLNhV7#|R@Q5F&YYhh=>g6S*QhsJ6Sc z90u;K>qQxK+&7CD5)FDqHFG*)o5P6G`hph`NwpNfB=_f-1JWFq(lhU zIOUxN*f8V07!l|v*ly6)?(`fg23i!9SPUuuiWpBShW`Eus~h<-X-bSF&w;CE;a4g@ z0nzO4oiusaKXQlV@BxDRZar2kE%22_0CI$^av%}w>7v@U!L8L89bwSSBU(%H)DUV& zmT|7#mgv1A-M=y&l6Md0iQOxK*a5!%QgCfG9;)0P(@VAog7G|!l#z}RwxYX@=Ol9w z1yMFNWc=u85xxiq)3OGjv9b~X)rwOO#u4QUdF8K&%m!XR6|fiVGc^pGq@^gyp{o3l z^zVy+AXZk&@Q1EY`sIUO{5}apONG}vFhtmMWYAuNxXw z@!ZI?Wx@BqO@UMaqU|xG3tEd{*&5NbIr}v`Z&jZaE zU!t0o<6=KnL|aq_0ZiQyzDy^b+{cgO;^o)--9J)_CTrb--e1(6;PPMW*VosKk__z0x2{eC#y&qT1cQ|5Kul zLK+bz1t=9f_?3F0gZ-aMZgx=-b}0u68nFzsAymW{-EzQYsxo7g-MXre6la>{`LgFp z71P}Byv#wxN+V_v_E0x?L5pDDB0|324E(Fk_|xm1%ltUj z2_-XCYCbjeX_qLM8d@`fh`eahf^&N|bgmB6A{*94 z{Nk!YklZY@(y?pVk}VIk2S7dKB1p6ceP7U{x%0P))Y(M#C<`JIb=y- z9{0ov6&leO9vBKimt;?rApSFO6Ha-0`Qwb)^chMu(vx>=oIms-K>PkG8n1-!ks*EfGo<%+$?ert4C%lC zdhMo=_`)i$`q~gegRRg;)MyA8r zM`~|}31Cy&Xa_{Vl+4I2#kktvUe_-71XI@IAmI~QvdEp43pNL3-NRY&e1#1qn;lF_ zMDj7f6mu1aU$F~yw0}$C@4tYlNw6G@LGRytso*8vDd4@69a(8&@;9R1<0IJTXCYeuO<#Jlcu%kWgGFJIxKKa*!994bSRsdIJg zN6Bw@?N|MvZaSQ~6Ip@eggFOo%?Clp`Q#*8doLefU?Y07L0lO?<4r*|XvPKyUv|+v z2+XVt0^ugtWoRqSo1Ub|*==}4eFBNFEsMshHt9dxmPicp}u0Y<0E&tnNI;=T{~cAB|v@w#W*H8e;ReIqORDKK#;nT zE|Q6gCl^Echw=T5B$T01;D9;?W`1pmgrv5I_85_!Fr)^eF+|{`21q~(;4ArL@oxPw z#_88V%!TzIC0#Phn>@kGUZ%>^4eABAYB7v+QE0%Be?c`Cp;*UeLg)DfGzxPWzvf49 zo)q(Ol#5%L=-W?(PA-#A=%P<^Nx>Mv?!+~Le1Luc%9tvcdo#{kPWDfBRB#Z<`TjDI z1;60bv=6@%i@mQDUvoPngaAUvs@Lg7zb%aoEG)KD0x_v$Pj1-=;6U^M3NXE>ki>QM zn%1EUkCf9kVYf_90P&_xrU6{zY6VyWq{oMX4+XxMYjnt||A!D=#ER_PU#>I*eJn&ZJiLXsJhA=fMU0aNa zSTk=jpvJ=5#6D ziQV7~VxXN$J(Pg*zuit2G-pCw$$n61$3l5BDC20z2v=*|jEY9?UfI%O#4R7l%|Si* zqfJH6AZ?T}Z2l?!FqKALq!+82Gx%0qAnupQO*KOxoAT zPiJ6&0OM%C4j>9iXtfu+y0rvHm&| zh}@hs59mD%O3@Ytk-4Y>z;`=`>aRq-+M>ZOw7X<6NN7<8)u}bz?(NgbAV9PHyn_G} z5Up}MNhuMt_FVB&dMs3y-pnkq>4yB(E2J}Y3-@0R46(ZS(B#*Z0!u)PrvKrQ&#nj4 ze)s1OlH4=qc0|lx5Jw&hIPQqp?zW@T1-ICsZ1lKJLP*0adQbv_{pC9cEAw8p3{=;> z&d!r=j>p1-ZgSM&@$*aMu3^G;hN(%g4HRNEsk{L5?DcP+AKt`l0yV(7UiNr6>!0sW z=PO5H*QzD=KBNJqh3t|i9BGLm{S*x7polBh4=O>e==c~62-BJ7%j8QEBFN8#hA%Wq z7hheYBT|gMp|%3fKRvRU;2HGL{A)3|#@_DB2zokoG~t z)1csQc8Nb&E9m}V*Ye5LcN_lQKMk`QY2mOGC7l7^fy!w~<$_h^b%03rP`;^FR`s%Z85;M|OXnZn6oi-QNDC~P7pE1kN@w2zQu;!JbH|tTP|n+*>~mtwD;u?F?ZkNcV^lY?UFVnD(#XM z+N4rxPm4B#7NzY;(#lXNv}s>SizKBeS~Y}9(n2KLpb{-ov@hRt$MgRF1)m?E`Dtce z=iYnnxo5xUb#KT1FFUA@qxsTTver0l82aW zt+o?V(mZbXYBT(U=c}orx(t+gX5a{ z67f@Ev8e1JOCS5&Gh|&)xiIp69-ER@BF{`RRC6ZhMI;?N%6e>yff9+`j3+8#s#V2N zZ${sYp6Y5Y{lImGbu0z(49^s^-DYfV0zSECeX zmTVuJ@Y$42s)2eEUP6u?o##9r2j5jhYDr>{*ZA4lEu`b>`(cAn<StGbEDfL-Npr?;VDj6w}8-eKU`~Sq$xRrMcQL|(q*J5$qUhR&;Rb`ed zp|0JcRZ`Y+A2#?AMg5{zhRKs>X~81j zG}-ccKr-Lo7Wzmu7Fswok^i=!q-;2JT3F}JmX_~63&tIp_rCQgwcj`(S30UnNV>1P zDh2KgWamG)-0dVpl~;Z+b(t;O2Pk>EC_Vb#f2Vgh_w0^PNue}pkG3zSXt2CndmVZV zMAd1@@Hv4(WPTd~P9?cYthB4=&#dm%iU_mIHoV_-QR3OYVrhZext!>&72VpLXp0gK z^@h>MGj&i@OWN@Mh~RVY*2$0UF^6*I;;#hEOX!&o71|HkH*+98`QBzO6op%u52MW+ zJlUxWpJYqoh?844ap}+emRTOkFOOciXjmnEXGNY(g+OzKJ7(6xIgaV-ls5gKT$0pP zhRWz_zwy{2-cO(Ws&mF07{}9-L(`5fN4)Wdw=!W91Fyr56X^1#vEU1%DX1*X+JG=8 zw{?%{@mbY+?YhMgt)r1s1T<>ye0L3sAt4P{D8CziP5|VDD1UxhS#D&cnOWQs__%y^ zEGE^223Q=hP`Q{cKXL>oS;MW084tqc!o%D!q5Ldf6BR&5s#h zIr#tKcVhVHzwj216792F2wm{x5wn>WxFj~#~fchUu6oM z-qifD%`_0PJFY&EdB3_mGvR(%c*FNi8_+O5^We*z2=032aOhKWQtBaQ3$+L9kpE!M z#oxTAt)q9&K7R?PsoZMC`$o?Rt_r>8Btw@|yblaRi44K3qWTop#BH6-$lbsT5J<-> zV=;{GY&`A3mKX62Yq8YpON8yl-2VKVjfPq? zg6>Y0UdAg>1AHW!r%o9=IkTJ+2+6hPYAg#$dC9UNMDZ@o!P2FDy3SkX=n=QPI;rHUdfP#EueDN-8K_Aoci9nW%pe@k@2-4sEqrIKy^cJT z$W}@yL=$cuQq(&2jOw#3FZhb&z^e3pkwoWZ`+8VWGuGpV!|KZ%c12U%ITJH^9chr z_v9{b0!;z%;qMZHU)d!460E+bD&?|n^$?vYv=Tw*qzg)|=|_p=7rTV(P~};mxgxWo zXWj?kIw^{h+oRLYb49}43tR@fT?X~QLX&!V>201+gk}L&79h#y?=`gaD0adLQwYtplS@vUo@3#I$Pu-HJLi_bkZhc~) zjI$!U9l)~9O)eOfR}-hILQb_C5ID_R%_4f0`sXV1-5y!qx@h&rk4Q~mq^mf}ZiTF2 zWFXfkNjMPbQ#JJC_hGdux^>cE8_5fQRaOuJ=8O#Q+Y7*AQkU&aPoRe8`bAGl`oea#?RG^I5_qhY#@`0h)+B@Xsdk*9=e```gTksg~%p-j?Dx ziFDuOJ25?`+e+;$TQDlu87WUd9x2T(yE_Rcj!?CD?4pEp?^(e`tj3-5k9rYz~FuIyl8Y@5oRtgAvm=qT>h z=XSo_FuK__ZU~GxWrXy%)j3++$$mNF_d9R)6xYIw{##C~GKY0vsE#sF4&q4;Z|LC| z)u4U&2&yTmJ|s2V$M%cByV49}IPTjeMP>WPXzes%N6w|DvyY$J`VgtCITf#a)}aP4y~zAQD$u2NAg;q5*yYb) zVMEl@mZpCaHSY#TQm=4j-<j2sv#jN@J!?Hb6)J^VK2zlOpJJ19SisxYx*ZO z@v=>%u#{>|S()d02~@-iukrzf><(FX5`=zF{VX9IxZD)|>H*oe0PcEY3HH}3nQ1SE zBw7_)P!WlG7!yZOp==nr%c~8S5I~3q=KTVDN%pJx2BBW&(qK0v6#5^sqkVXmKb!8r zEE{N<^rf$v7H>)xqaN{4QaTXk;wgb4*KimVwLw{=8@`~h*mcB6rydM!cy1Ag z?1YCB$9Un`b9qU~x zU6}0Kbsf=ovDR$Pu-9IvsA3O3OU4#O>8IQhRKhpuN2%1PAK{2RbxznC`ELe|Svks9 zt`4(=vnKkC$nKd_48h-6^sjJdTIXHzdPqc)cs^mxud_*p28Nm->1_|4%K3JQ*BKDjS$5fxcuyR0B5u} z;iL9MQn?hby>Dsx+qaC!4v)I;!9-A9nLNxjEbpb)g%D1?9_4q*ikzW$#132DsB)G& zO{7{8L{o8pbH%eQRvrp!@VePEDQeNz{k)P}oC27#uaesi@_LOqURs0pGg6#@e6%^c zLnlzHTrC6-V_q6ste&~)cW<2KlU!ereqNv<aq1~GVvIO4sQ*i(Ri5J+4PD_hu%LvUWydy8%R{A8}htGv#qF|lJ?A&N9t$#N1r z?Mav%yl|GUO|STbv=RZsCIW2jmp}bNl$~efYakW-&bT9Q)GsU6Et>Bb!{lfc#UNI{ ziqx^44xNmlC$_%bbZdXD-=poHWo%`C#Y>G-9(HLBi19r!s~C|uT*gSL!?IKC*Wp_# zw|Jt|jaR4YLY1L=P0%sc$J(@G7hQSF3Se}YR37ecq2{d+#qAVF$N~MtOLC{mW>dIc zWSjN~umnf-2z(m(v8?dm7^ht-38T`GF>zDJg~ z3m#3W9wnf$PLP~izgWj__sK1eT6IWKLSMFAHoqkDomX~>zrcD5AkR69x*{6FVw1JO z^8`v4=A5Dyh`e!>w^)6)PcMF#jRTX1rrWWs*wkA$#N;@YkUx$ZD|<()Wq$CaJ3~Y# zwe?c0ro)WUPg-XTOB2uK>#9%}9)L<$@TF>KN)3Gyw))qHyQyDupA~mcQ z?WY(QTh5su3kKbGLl==B! z`}sG;KO*jO+xdGm_qqxA*aaSRx@nui$b9>KDGSQO%v^J*4wyN_>eZRoHU@-#&Wy+B z1LtLgzfGCOChX9t%ITF2?thjS4;z&jiIpesK9xEG^x-g&;Ymg+bx9y>r^hhe4 zhot5+wAE+aB5eA-UTeB(Kw{_13ODj}tl4;J--jZfhlnbJyDi%gp!$+;mHcqMChO$( zxrYjN$$om0njhb4oVnBRqJ86-{P%5V+(AFf@}uB1jP#7dg!{mkl%TexrlO_wy*#2Z z6BXlHdW4y4DD8IrNKoc|SX?Z#p$~E!vhIOPRj_O5>c;%F2VFN2MPxQgA37N#yd6&L zzV#5e@b_Q|K~_s`Qm(HLO2q?G}OD)*(b~zl6j0dqU5}3+-2yj0I6ra+?VyE%8{?wzIE@5r~>ipg1p^GobFA z)%WCI0OEg?sN1h<5<*lW?>!NTOT7YUcr?SlW(1N?k59xe;4qo`|POQ+rxvt`nS&xABYDP)QPAMG4=Vt#4W$ea5f-36=K`U`j&X>RPbg; z%jdUx7$`eQs1;kof1VSZ?yO9WqI&U*zuu-t5ma(h4DET3b~GA>?{QvGi0w-Po{L zG?+H8%iF6ac36z`VsDh}I=83FZ8S#Ijl&C;lhZM9W68GpakuoagPyq}0T%@LLng$$ zJZ~sp-zNb9mM_Mr;<{=$&iIU1O)t7AaqXmv>=P&WX#g zhnc?vWKc0u9hDM-m;YA_u(h#r3S9QZZqAOaS!cMlDrr4YlTQkI#e9?q5O`rT`BahF z|L_`6m&JKUFF&vO+_9;4a%s;>vgLQGN)~9q1x&D%-+A=3L~xF&(${GPXJn@C(aqQ{ z735vAv_eElkAUsgzMPflg2i#Ey0k?+SHC`g12rLLO{kdAlOL%Z(9s^4C)E%tch@T@ zJcuKT=Kcw_+y!y&k$iD*ng1{!_{h%FMo8INY8vA z_tCJLjXRhj1bij4*=+2Eq|dpweS$vRmqW|7A8_tt{TsPZK^>l%S!nfbEEG?+%24s- zt3DmvBfD+e+l75LpUH4tB*by(K-yI%`}~VjMwIhgGs>*DJ=wXxgZ!(NM=mA#X89R! zv4jnXjF*C{J&bs#Ru+zb{BVtfmpqwFE4e~ycpbXK2W194A z9fJ+q#mKN(Bc9LsF>nD(>dmx#&O{D0se*euQ}du;+6Zk84i{kDT82IRM`2y;_1k2k zW%h`PY(iu|U=qrwxh)jk)cnbpcew5BRhxScYVeNSs^zU4eWVX?je^A)S*n~)(^$Nje!uU=c+LOo{#C`xve^%y0#zWXXE=sw4U1Pwx; zbxjn4Oi&bn=TO(kX`hWMc=c0%>T!#9`DKQA7f~e6#c$CW>KZG&3cNX|fJrkAWm7Iv zgRwpbCqxFZf0%!-C4eay4puC%-e)Df__Y&lud~9U(KZr~Wp$Qf}H%vM+}OCFdIp^)bQg8idVVL4(_3)@b4s3q9T@a}elR zi+VU8B;+D*{^Iro!=Zd3NK-9gi_vdHT~};Ql-kFB6qKsY?Y)Af&kj2{M!=+L8!^G1 z!L(mYJ>kG!peAMWkSH6bC2nuIcI*}wSq&^^mG>#lCCyKq2_KjG_e^}X?NyWQ=T@K+ zzbSr6dpbA_c_b7}pD)@7^Tji=^<>d&MBDete_0>9Qoq6s*JR__Dr&8%bcds7MHjB| zwDtT-Pa?4IcILXHlgeYA`i&jcV&9o&2qE6k8^Uix(Iq}mr?hcvUQ0GT{gCw`zY(Pj ziwk@DKbyX%AZagwSQEW~07zg>n&_${n`&w<%Bryf07r|S+VcmMoiDF1$9>6F-o#~2r$6ibu_1o;rbpaO8w?(t{&{^l3QCC%DFBB z#4iSP4on_O=bE-$cATim-K3Sd6r7&=+BbdzndkA3B&4QZSJot=06Z<*WMyWHiH@}N zoaB7Ip9vy_W)ZfL%lQCNgU}A#4_`_kSI)8#1#*d&>kq_;MD)t?&(R7Gp0mpS!AnGO zSb*)5LCAfhd!IFx=5y!R)HBs}?W~uO>MMn)4135FTw(cRtR-kq`%TX`zuB|3?v3Q# z;=Qpe8W{U2W=j=tUh;^$-M3cY^hlJ=RbypKC)NXb4zLl1t%$6`caF~Go<`z6&AP2s zsaRv`a|k?fzRS!D5e{icu*2`|$^M}tpOop_h@T_>w& zN!BXux5tDUh+{$Ld6C{NGu-LYz$eiTGRvns?FSd1cBrco;#)Z>g(}M|L%uYTo zbA7T4a$+mkip70SK^J`-0_rOG6i~A;E!M8@;z`+m8B)>Yha^te+ze6p$gQN4a#ujC z%%SR@Jc7zESdkE`pVodU6AF@v#MDbataa0OP^~EzO8ujn$nO$6kE%`w019LAh%@_Fdu!s8po>---XU8?S@aEV|*!8n{IH@><(BFHFJ zbHaXL>j{dp`2p98pg+><5Lp{WM+HAE{8}cq#RDgQmr>fVo606BdBpBPav$Sgn}$|l zjgr&4a;h>W2_jdLSPsn_+X^7+FU)e`mqC~X)LAXG*3uq6kPn|HnduJR4!4n6hiHMg z_tPvZQ7b-!X+<2QS7Qu(?T0o{EL(-^MG4UuWEUOeE7UP$pw^SueiLJNzwBmPBjw}? zhw)=c^*=O&DMx+f?EH1Feffp~g0f~qH@ldW(@BK(E4RvvB$= zmbBm&x#fgTDV;ilWj_I;=fKXU$g_zWp^}_KWw7?r!2jrHmcMy;PQ)<4B>c%|)(fY_tbwQ32*Ex7zi@h=G>7`xNBzd;a zZ%iI@zwYd{wf}CU=lEnZ!%nDo&jKEyIIo+>%q<$VSY;?tQ(oNc|JwTeim?HU7sKEE zW5n(+=x;R4=frYGLOgeFCEcJ!#GF$=PDo6O2byDAsXa{^J$#=w^vF@|{k-{7HoI@L zvhe4)&OHqTB#$i`&Cq~QopT!;clVdgcL@A7pQ{K-T~wiJK}05CR!BIN^Uu#ARwwp% z(_EL=O~x_FW1%frbLv>~IeV zrkEteZ`m)JVvQ}9YBV2IIjRLlp8c>{$`dfnhmaTifay`RBS$`dd{6tulAw;;-eUL0 zcq*e^x2{Vg(zkSxf3#&YyM^!9m7McBu1~TYM?@Tt8x}r%ot&m~fc0;hiZaU2*d40k zzEwWqox_uX(&&RFBWfOAqvBzd%v(SHDJ8bP?>@U!@kxxNjg$KblJGdY>p1iKcoM+bXi}3yeFx}OruCn zrUp*A6UKu==v3?f;YwPqnVI9T&S2H~=TC}*-~epA9-`TnX!e%*ldVOU8L312I2}Zl z!R*uBJ2)L8YCmnLd+?qvn=(=DbJ8C1K?#^aHuho^6EFF%X-vr(dF>e$gc^jzkHw5^ z0h`K)akZ{v$)M)+82RB$Xyvbb9qS@VXjp({IkQv0cG3HLv5Nk2swL&Mp*i4B_s$TG zNVaJbD&A-Jif8^VD%?i|#|`274@A3~^KMTe+RZ4{!lxI`dszXx9E(;v+q<&5by8(B?mcu~n>eB{mC6K40$UHNyL@x;KY>>^$N&7PI$-*-!k~ex6q?fI z4qX|XTJ#Vgs&BR`H9LOFQ?op1n?vFOMz}HfCgzbz?m|RVm$P|j=DTdJLV^u2ZzcvA zz^ER31XRJlqMyKKdr#xR&MM7dpKs(aQAfy}a6ZOp`|V&AO_{#CULo;*tLDAV{@0N{ z;x6!1k&brImjOqKjK_|;!+k!}nWlYZhsf4z4obkN*rubPp@Bsgi6dM}rmB4gGatE1 z&oxQ9f=;1MW6bgE0WakWjB<}wi)&LJ^c7#_)t&CCr1SPITD2t65{2pxJkYvES zWf1zhEhnl-AoN@f;jp6YctvwxNKwMmmk>J!ZZ1QNEE9&nLiWeMj$2;osf_LM+$EHjaWn59;k^V1#*M=Ye{}DS++f$=!hrw1;ahB(Si8fx&q#ip{(t zCEwxHV9IOMlDMbZzyc^Hk5RtWxo*~aPrKL9>k)Rv!CQMzL9sp{1%1I$VuUN5#!i<` z?MtLolGbT*Z-6)g+g8}dV+xY?vzVD*E+vvR1h+Rc8_FtgQkr!q?afib2VP;QLcsclqE=C@zi<8k z3jWb!+XE>!3*1xNPz&-ikZgK&FMUP#3s3yYW=-_37csblb@Fs5G47|Ir*dGJL(ee= z=;aih{7i+YfkCQ8JzicoChdw|pb*IWUyjLqY&w&$@!~(^)*6u)A&a;kOU`}2aNC;{{Q2QS6`f?D4KAevTf z)jjOOkESHm-+w5|Pscq<+)eQiMvG26`Vc_;ggZLA-&sq`2GHAwdZ;dQH-g?tVD zXKZ1^k`1xbr-b|UH!~uNEtUtWFx0VI6j`}tIRBP$y!0lBz2CtK9*W}eXkvw^wOHC7 ztT;#i$sLRAL3xnTBjf!Q$fN8ZEsRW)%NVO?_HHxiBnn!=EvwWG^mZGe)4+RQ+-la% z^ERCNr15ZKy#mN5-36J{c+>aovCLtIpC3O&1iEMhr(aeCk-#-+VE1DPFN|sj*G@dA zic5F^bJOkBq{=3yq#fwP>OZg<^EYvd###aNd0o*u>bunhQ6Jy~yqkk&hB;m<7&+3A z_tGr!ED7l-V`TmLH!;<2@y{YnPG4nmW&gVck0_CKSq~IJI@hk+p(-e2)u1CUd!0}b z?>vR}nuTqFgw9>8zbP;0vnaiIiIt0W7q0`@Zmc;`$BuQC0oK(_w4oNBau|>ub2D0)TV2)p`5@%& z>r^I!hK5*=C=42mCzCI@iD{%))Q2b(c?<$FdNvb^<~%7b;F6Qu_QbeDCv-7J%UMh# z{jzeTBMC~?YXL1B$0L>_0{MO&%IwDi?XN*(N_~WRMrZR&^g*yBf@;;uH2~`FH!d_m z1zAjO$F52cB{!)Z+YA;s9koQjn+ivkl*Ex zG50T8K01y6qR*ISq{TtKz4%!sj3lBVO7?>X^s)ie_)Hm{nTYrEUVnW&q|yfS1V#~k zbQhp_+<#`S!cnfO*slTT;YvEVE@D2k{j*s{hH97jJsz2{y_I>;gq{AVbut7c^qV!` zY3)C*a8{EENJvLYEwhW{KP=MF`tdFg^&@bIJ60Abx9uCDHvFfiyT?7>P5od8ajpkZ zj?ZbJ(Vx%9$37SGFop30b#~Av+!roF$<%BtOzf_w9tB?a|4THba1nGmLI`0a`By(d z#*GEh2F~ETW++zWP_Fh9V%rzmVCT^?eRd0gDoU7B1vaLanSwSZ5m4i_AFR8M6dq6K z3=R-fU;Sc{`AUbrf84B=35qUTZek$F?K~(@;}*c$)2BmmTWWOQ!G~`7^8paO*bWYC1KZ-i zVhKyATD+1zF75Xr>U9Kp1H5L$|3ewS^EDC#*ex5{o zTLPp+GdPSvlstZRl(7uooajR%<}iObFD%zv8VKmACjz<;9feCqFOFsAi07xNr>;M1& diff --git a/resources/splash.png.md5 b/resources/splash.png.md5 index 74038fbe1..808167787 100644 --- a/resources/splash.png.md5 +++ b/resources/splash.png.md5 @@ -1 +1 @@ -32dca3a9cd3c8e9d241f68a0850d2ace \ No newline at end of file +4d2128e5cc9659b321956c1178057980 \ No newline at end of file diff --git a/src/assets/icon/favicon.ico b/src/assets/icon/favicon.ico index 4c516e7b580430e13ea0619449f42d9c93eb6b64..483c9647ca89f20932866fdbbd7628bb424df68e 100644 GIT binary patch literal 105840 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 diff --git a/src/assets/icon/icon.png b/src/assets/icon/icon.png index de5b0f4c688e048074c1a177e49cbc8274bcdb35..f41b1f803f81f000f94f0c185431034ab3a96a35 100644 GIT binary patch literal 18809 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 diff --git a/src/assets/img/login_logo.png b/src/assets/img/login_logo.png index 8a2e142b23deeb742b4f80b89863f409fdeaf395..0cbb69d0e497af9fb7d6aec5c53e8cbb32af1219 100644 GIT binary patch literal 16563 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 Gg#0hkRK1?6f^_mdDb&5 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 Date: Fri, 24 May 2019 11:36:25 +0200 Subject: [PATCH 203/263] MOBILE-3039 styles: Fix some row styles --- src/addon/mod/quiz/components/index/index.scss | 4 ++++ src/app/app.ios.scss | 12 ++++++++++++ src/app/app.md.scss | 9 ++++++++- src/app/app.scss | 5 +++++ src/app/app.wp.scss | 7 +++++++ 5 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/quiz/components/index/index.scss b/src/addon/mod/quiz/components/index/index.scss index 1488b3628..69ad61736 100644 --- a/src/addon/mod/quiz/components/index/index.scss +++ b/src/addon/mod/quiz/components/index/index.scss @@ -4,6 +4,10 @@ ion-app.app-root addon-mod-quiz-index { .addon-mod_quiz-table-header .item-inner { background-image: none; font-size: 0.9em; + + .col[text-center] { + @include padding-horizontal(0); + } } .item-inner ion-label { diff --git a/src/app/app.ios.scss b/src/app/app.ios.scss index a2f7085af..f5b16d95e 100644 --- a/src/app/app.ios.scss +++ b/src/app/app.ios.scss @@ -25,6 +25,18 @@ ion-app.app-root.ios { @include margin($item-ios-padding-icon-top, null, $item-ios-padding-icon-bottom, 0); } + .item-ios ion-icon[item-start] + .item-inner, + .item-ios ion-icon[item-start] + .item-input, + .item-ios img[item-start] + .item-inner, + .item-ios img[item-start] + .item-input { + @include margin-horizontal($item-ios-padding-start, null); + } + + .item-ios ion-avatar[item-start] + .item-inner, + .item-ios ion-avatar[item-start] + .item-input { + @include margin-horizontal(0, null); + } + @each $color-name, $color-base, $color-contrast in get-colors($colors-ios) { .core-#{$color-name}-card { diff --git a/src/app/app.md.scss b/src/app/app.md.scss index 5322bbc19..8a7745585 100644 --- a/src/app/app.md.scss +++ b/src/app/app.md.scss @@ -21,9 +21,16 @@ ion-app.app-root.md { @include margin-horizontal($item-md-padding-start + ($item-md-padding-start / 2) - 1, null); } + .item-md ion-icon[item-start] + .item-inner, + .item-md ion-icon[item-start] + .item-input, .item-md img[item-start] + .item-inner, .item-md img[item-start] + .item-input { - @include margin-horizontal($item-md-padding-start + ($item-md-padding-start / 2), null); + @include margin-horizontal($item-md-padding-start, null); + } + + .item-md ion-avatar[item-start] + .item-inner, + .item-md ion-avatar[item-start] + .item-input { + @include margin-horizontal(0, null); } @each $color-name, $color-base, $color-contrast in get-colors($colors-md) { diff --git a/src/app/app.scss b/src/app/app.scss index 1c9b9a924..b6a5a1205 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -103,6 +103,11 @@ ion-app.app-root { border: 0; } + .item h2 { + text-overflow: inherit; + overflow: inherit; + } + .core-nav-item-selected, .item.core-nav-item-selected { @include core-selected-item($core-splitview-selected); } diff --git a/src/app/app.wp.scss b/src/app/app.wp.scss index 0acc39941..b91fb4f10 100644 --- a/src/app/app.wp.scss +++ b/src/app/app.wp.scss @@ -18,11 +18,18 @@ ion-app.app-root.wp { .item-wp ion-spinner[item-start] + .item-inner, .item-wp ion-spinner[item-start] + .item-input, + .item-wp ion-icon[item-start] + .item-inner, + .item-wp ion-icon[item-start] + .item-input, .item-wp img[item-start] + .item-inner, .item-wp img[item-start] + .item-input { @include margin-horizontal(($item-wp-padding-start / 2), null); } + .item-wp ion-avatar[item-start] + .item-inner, + .item-wp ion-avatar[item-start] + .item-input { + @include margin-horizontal(0, null); + } + @each $color-name, $color-base, $color-contrast in get-colors($colors-wp) { .core-#{$color-name}-card { @extend .card-wp ; From f06e25d1cde480efc36c71dc50b8a610b2bf0c7e Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Fri, 24 May 2019 12:48:44 +0200 Subject: [PATCH 204/263] MOBILE-3049 sitehome: Fix activities not displayed --- .../sitemainmenu/components/sitemainmenu/sitemainmenu.ts | 2 +- src/core/sitehome/components/index/index.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/addon/block/sitemainmenu/components/sitemainmenu/sitemainmenu.ts b/src/addon/block/sitemainmenu/components/sitemainmenu/sitemainmenu.ts index 02c044771..0f3355219 100644 --- a/src/addon/block/sitemainmenu/components/sitemainmenu/sitemainmenu.ts +++ b/src/addon/block/sitemainmenu/components/sitemainmenu/sitemainmenu.ts @@ -75,7 +75,7 @@ export class AddonBlockSiteMainMenuComponent extends CoreBlockBaseComponent impl */ protected fetchContent(): Promise { return this.courseProvider.getSections(this.siteHomeId, false, true).then((sections) => { - this.block = sections[0]; + this.block = sections.find((section) => section.section == 0); if (this.block) { this.block.hasContent = this.courseHelper.sectionHasContent(this.block); diff --git a/src/core/sitehome/components/index/index.ts b/src/core/sitehome/components/index/index.ts index 354881d3b..c21f2b1d9 100644 --- a/src/core/sitehome/components/index/index.ts +++ b/src/core/sitehome/components/index/index.ts @@ -137,7 +137,7 @@ export class CoreSiteHomeIndexComponent implements OnInit { return this.courseProvider.getSections(this.siteHomeId, false, true).then((sections) => { // Check "Include a topic section" setting from numsections. - this.section = config.numsections ? sections[1] : false; + this.section = config.numsections ? sections.find((section) => section.section == 1) : false; if (this.section) { this.section.hasContent = this.courseHelper.sectionHasContent(this.section); this.hasContent = this.courseHelper.addHandlerDataForModules([this.section], this.siteHomeId) || this.hasContent; @@ -164,7 +164,8 @@ export class CoreSiteHomeIndexComponent implements OnInit { this.blocks = []; // Cannot get the blocks, just show site main menu if needed. - if (sections[0] && this.courseHelper.sectionHasContent(sections[0])) { + const section = sections.find((section) => section.section == 0); + if (section && this.courseHelper.sectionHasContent(section)) { this.blocks.push({ name: 'site_main_menu' }); From 11ba0beb85d6448c230efe519fdda11c70509c95 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 24 May 2019 13:00:20 +0200 Subject: [PATCH 205/263] MOBILE-3050 lesson: Fix lesson in offline in 3.7 --- src/addon/mod/lesson/providers/lesson.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/lesson/providers/lesson.ts b/src/addon/mod/lesson/providers/lesson.ts index 55c4763e1..d8323b3bf 100644 --- a/src/addon/mod/lesson/providers/lesson.ts +++ b/src/addon/mod/lesson/providers/lesson.ts @@ -508,7 +508,12 @@ export class AddonModLessonProvider { return; } - if (typeof data['answer[text]'] != 'undefined') { + // The name was changed to "answer_editor" in 3.7. Before it was just "answer". Support both cases. + if (typeof data['answer_editor[text]'] != 'undefined') { + studentAnswer = data['answer_editor[text]']; + } else if (typeof data.answer_editor == 'object') { + studentAnswer = data.answer_editor.text; + } else if (typeof data['answer[text]'] != 'undefined') { studentAnswer = data['answer[text]']; } else if (typeof data.answer == 'object') { studentAnswer = data.answer.text; From 6d09de4877899374a425aab552951b088d9ec218 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 24 May 2019 15:30:49 +0200 Subject: [PATCH 206/263] MOBILE-3039 calendar: Fix WS error when viewing event --- src/addon/calendar/providers/calendar.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/addon/calendar/providers/calendar.ts b/src/addon/calendar/providers/calendar.ts index bfcb87110..40dcd2208 100644 --- a/src/addon/calendar/providers/calendar.ts +++ b/src/addon/calendar/providers/calendar.ts @@ -330,11 +330,11 @@ export class AddonCalendarProvider { getEventById(id: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getEventCacheKey(id) + cacheKey: this.getEventCacheKey(id), + updateFrequency: CoreSite.FREQUENCY_RARELY }, data = { - eventid: id, - updateFrequency: CoreSite.FREQUENCY_RARELY + eventid: id }; return site.read('core_calendar_get_calendar_event_by_id', data, preSets).then((response) => { From 0508917c6ac55d16d10e8d3c2b3c487a3aa66f3e Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Fri, 24 May 2019 16:18:55 +0200 Subject: [PATCH 207/263] MOBILE-3039 forum: Display prefetch icon --- src/addon/mod/forum/components/index/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/addon/mod/forum/components/index/index.ts b/src/addon/mod/forum/components/index/index.ts index 2911bd925..973b3efd7 100644 --- a/src/addon/mod/forum/components/index/index.ts +++ b/src/addon/mod/forum/components/index/index.ts @@ -244,6 +244,9 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom this.domUtils.showErrorModalDefault(message, 'addon.mod_forum.errorgetforum', true); this.loadMoreError = true; // Set to prevent infinite calls with infinite-loading. + }).then(() => { + // All data obtained, now fill the context menu. + this.fillContextMenu(refresh); }); } From afa6399010e8f759b0c4c6c4d6dbda110f991794 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 24 May 2019 16:19:30 +0200 Subject: [PATCH 208/263] MOBILE-3039 core: Fix white-space in checkbox in modals --- src/app/app.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app/app.scss b/src/app/app.scss index 1c9b9a924..746fc281d 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -982,6 +982,10 @@ ion-app.app-root { line-height: 1; } } + + ion-alert .alert-checkbox-button .alert-checkbox-label { + white-space: normal; + } } @each $color-name, $color-base, $color-contrast in get-colors($colors) { From f24ab4e4b1b3018c3f464d15f8e822d178faba25 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Mon, 27 May 2019 11:24:32 +0200 Subject: [PATCH 209/263] MOBILE-3018 forum: Fix error after creating discussion --- src/addon/mod/forum/components/index/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/addon/mod/forum/components/index/index.ts b/src/addon/mod/forum/components/index/index.ts index 973b3efd7..b3a4209b6 100644 --- a/src/addon/mod/forum/components/index/index.ts +++ b/src/addon/mod/forum/components/index/index.ts @@ -475,9 +475,11 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom // If it's a new discussion in tablet mode, try to open it. if (isNewDiscussion && this.splitviewCtrl.isOn()) { - if (data.discussionId) { + if (data.discussionIds) { // Discussion sent to server, search it in the list of discussions. - const discussion = this.discussions.find((disc) => { return disc.discussion == data.discussionId; }); + const discussion = this.discussions.find((disc) => { + return data.discussionIds.indexOf(disc.discussion) >= 0; + }); if (discussion) { this.openDiscussion(discussion); } From bcebdcceb66a0f3842e3a53540614deef0418956 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 27 May 2019 13:18:27 +0200 Subject: [PATCH 210/263] MOBILE-3039 core: Lock plugin and libraries versions --- config.xml | 42 +++++------ package-lock.json | 77 ++++++-------------- package.json | 174 +++++++++++++++++++++++----------------------- 3 files changed, 128 insertions(+), 165 deletions(-) diff --git a/config.xml b/config.xml index 1392e093e..b2055031e 100644 --- a/config.xml +++ b/config.xml @@ -112,33 +112,33 @@ - - + + - - - - + + + + - - + + - - - - + + + + - - - - - - - - - + + + + + + + + + diff --git a/package-lock.json b/package-lock.json index dff2e0e2c..a9576807d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -519,14 +519,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -541,20 +539,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -671,8 +666,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -684,7 +678,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -699,7 +692,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -707,14 +699,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -733,7 +723,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -814,8 +803,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -827,7 +815,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -949,7 +936,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4829,8 +4815,7 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true, - "optional": true + "bundled": true }, "aproba": { "version": "1.2.0", @@ -4848,13 +4833,11 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4867,18 +4850,15 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true, - "optional": true + "bundled": true }, "concat-map": { "version": "0.0.1", - "bundled": true, - "optional": true + "bundled": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, - "optional": true + "bundled": true }, "core-util-is": { "version": "1.0.2", @@ -4981,8 +4961,7 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, - "optional": true + "bundled": true }, "ini": { "version": "1.3.5", @@ -4992,7 +4971,6 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5005,20 +4983,17 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true, - "optional": true + "bundled": true }, "minipass": { "version": "2.2.4", "bundled": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5035,7 +5010,6 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -5108,8 +5082,7 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, - "optional": true + "bundled": true }, "object-assign": { "version": "4.1.1", @@ -5119,7 +5092,6 @@ "once": { "version": "1.4.0", "bundled": true, - "optional": true, "requires": { "wrappy": "1" } @@ -5195,8 +5167,7 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true, - "optional": true + "bundled": true }, "safer-buffer": { "version": "2.1.2", @@ -5226,7 +5197,6 @@ "string-width": { "version": "1.0.2", "bundled": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5244,7 +5214,6 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5283,13 +5252,11 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, - "optional": true + "bundled": true }, "yallist": { "version": "3.0.2", - "bundled": true, - "optional": true + "bundled": true } } }, @@ -11275,14 +11242,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11302,8 +11267,7 @@ "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", @@ -11451,7 +11415,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } diff --git a/package.json b/package.json index 9ac42bcc7..91b804947 100644 --- a/package.json +++ b/package.json @@ -40,101 +40,101 @@ "windows.store": "electron-windows-store --input-directory .\\desktop\\dist\\win-unpacked --output-directory .\\desktop\\store --flatten true -a .\\resources\\desktop -m .\\desktop\\assets\\windows\\AppXManifest.xml --package-version 0.0.0.0 --package-name MoodleDesktop" }, "dependencies": { - "@angular/animations": "^5.2.10", - "@angular/common": "^5.2.10", - "@angular/compiler": "^5.2.10", - "@angular/compiler-cli": "^5.2.10", - "@angular/core": "^5.2.10", - "@angular/forms": "^5.2.10", - "@angular/http": "^5.2.10", - "@angular/platform-browser": "^5.2.10", - "@angular/platform-browser-dynamic": "^5.2.10", - "@ionic-native/badge": "^4.17.0", - "@ionic-native/camera": "^4.17.0", - "@ionic-native/clipboard": "^4.17.0", - "@ionic-native/core": "^4.11.0", - "@ionic-native/device": "^4.17.0", - "@ionic-native/file": "^4.17.0", - "@ionic-native/file-opener": "^4.17.0", - "@ionic-native/file-transfer": "^4.17.0", - "@ionic-native/globalization": "^4.17.0", - "@ionic-native/in-app-browser": "^4.17.0", - "@ionic-native/keyboard": "^4.17.0", - "@ionic-native/local-notifications": "^4.17.0", - "@ionic-native/media-capture": "^4.17.0", - "@ionic-native/network": "^4.17.0", - "@ionic-native/push": "^4.17.0", - "@ionic-native/screen-orientation": "^4.17.0", - "@ionic-native/splash-screen": "^4.17.0", - "@ionic-native/sqlite": "^4.17.0", - "@ionic-native/status-bar": "^4.17.0", - "@ionic-native/web-intent": "^4.17.0", - "@ionic-native/zip": "^4.17.0", - "@ngx-translate/core": "^8.0.0", - "@ngx-translate/http-loader": "^2.0.1", - "@types/cordova": "^0.0.34", - "@types/cordova-plugin-file-transfer": "^0.0.3", - "@types/cordova-plugin-globalization": "^0.0.3", - "@types/cordova-plugin-network-information": "^0.0.3", - "@types/node": "^8.10.19", - "@types/promise.prototype.finally": "^2.0.2", - "chart.js": "^2.7.2", - "com-darryncampbell-cordova-plugin-intent": "^1.1.1", + "@angular/animations": "5.2.10", + "@angular/common": "5.2.10", + "@angular/compiler": "5.2.10", + "@angular/compiler-cli": "5.2.10", + "@angular/core": "5.2.10", + "@angular/forms": "5.2.10", + "@angular/http": "5.2.10", + "@angular/platform-browser": "5.2.10", + "@angular/platform-browser-dynamic": "5.2.10", + "@ionic-native/badge": "4.17.0", + "@ionic-native/camera": "4.17.0", + "@ionic-native/clipboard": "4.17.0", + "@ionic-native/core": "4.11.0", + "@ionic-native/device": "4.17.0", + "@ionic-native/file": "4.17.0", + "@ionic-native/file-opener": "4.17.0", + "@ionic-native/file-transfer": "4.17.0", + "@ionic-native/globalization": "4.17.0", + "@ionic-native/in-app-browser": "4.17.0", + "@ionic-native/keyboard": "4.17.0", + "@ionic-native/local-notifications": "4.17.0", + "@ionic-native/media-capture": "4.17.0", + "@ionic-native/network": "4.17.0", + "@ionic-native/push": "4.17.0", + "@ionic-native/screen-orientation": "4.17.0", + "@ionic-native/splash-screen": "4.17.0", + "@ionic-native/sqlite": "4.17.0", + "@ionic-native/status-bar": "4.17.0", + "@ionic-native/web-intent": "4.17.0", + "@ionic-native/zip": "4.17.0", + "@ngx-translate/core": "8.0.0", + "@ngx-translate/http-loader": "2.0.1", + "@types/cordova": "0.0.34", + "@types/cordova-plugin-file-transfer": "0.0.3", + "@types/cordova-plugin-globalization": "0.0.3", + "@types/cordova-plugin-network-information": "0.0.3", + "@types/node": "8.10.19", + "@types/promise.prototype.finally": "2.0.2", + "chart.js": "2.7.2", + "com-darryncampbell-cordova-plugin-intent": "1.1.7", "cordova-android": "7.1.2", - "cordova-android-support-gradle-release": "^2.0.1", - "cordova-clipboard": "^1.2.1", + "cordova-android-support-gradle-release": "3.0.0", + "cordova-clipboard": "1.2.1", "cordova-ios": "4.5.5", - "cordova-plugin-badge": "^0.8.8", - "cordova-plugin-camera": "^4.0.3", - "cordova-plugin-customurlscheme": "^4.3.0", - "cordova-plugin-device": "^2.0.2", - "cordova-plugin-file": "^6.0.1", + "cordova-plugin-badge": "0.8.8", + "cordova-plugin-camera": "4.0.3", + "cordova-plugin-customurlscheme": "4.3.0", + "cordova-plugin-device": "2.0.2", + "cordova-plugin-file": "6.0.1", "cordova-plugin-file-opener2": "2.0.19", - "cordova-plugin-file-transfer": "^1.7.1", - "cordova-plugin-globalization": "^1.11.0", - "cordova-plugin-inappbrowser": "^3.0.0", - "cordova-plugin-ionic-keyboard": "^2.1.3", + "cordova-plugin-file-transfer": "1.7.1", + "cordova-plugin-globalization": "1.11.0", + "cordova-plugin-inappbrowser": "3.0.0", + "cordova-plugin-ionic-keyboard": "2.1.3", "cordova-plugin-local-notification": "git+https://github.com/moodlemobile/cordova-plugin-local-notification.git#moodle", - "cordova-plugin-media-capture": "^3.0.2", - "cordova-plugin-network-information": "^2.0.1", - "cordova-plugin-screen-orientation": "^3.0.1", - "cordova-plugin-splashscreen": "^5.0.2", - "cordova-plugin-statusbar": "^2.4.2", - "cordova-plugin-whitelist": "^1.3.3", - "cordova-plugin-zip": "^3.1.0", - "cordova-sqlite-storage": "^2.6.0", - "cordova-support-google-services": "^1.2.1", - "es6-promise-plugin": "^4.2.2", - "font-awesome": "^4.7.0", + "cordova-plugin-media-capture": "3.0.2", + "cordova-plugin-network-information": "2.0.1", + "cordova-plugin-screen-orientation": "3.0.1", + "cordova-plugin-splashscreen": "5.0.2", + "cordova-plugin-statusbar": "2.4.2", + "cordova-plugin-whitelist": "1.3.3", + "cordova-plugin-zip": "3.1.0", + "cordova-sqlite-storage": "2.6.0", + "cordova-support-google-services": "1.2.1", + "es6-promise-plugin": "4.2.2", + "font-awesome": "4.7.0", "ionic-angular": "3.9.3", - "ionicons": "^3.0.0", - "jszip": "^3.1.5", - "moment": "^2.22.2", - "nl.kingsquare.cordova.background-audio": "^1.0.1", - "phonegap-plugin-multidex": "^1.0.0", + "ionicons": "3.0.0", + "jszip": "3.1.5", + "moment": "2.22.2", + "nl.kingsquare.cordova.background-audio": "1.0.1", + "phonegap-plugin-multidex": "1.0.0", "phonegap-plugin-push": "git+https://github.com/moodlemobile/phonegap-plugin-push.git#moodle-v3", - "promise.prototype.finally": "^3.1.0", - "rxjs": "^5.5.11", - "sw-toolbox": "^3.6.0", - "ts-md5": "^1.2.4", - "web-animations-js": "^2.3.1", - "zone.js": "^0.8.26" + "promise.prototype.finally": "3.1.0", + "rxjs": "5.5.11", + "sw-toolbox": "3.6.0", + "ts-md5": "1.2.4", + "web-animations-js": "2.3.1", + "zone.js": "0.8.26" }, "devDependencies": { - "@ionic/app-scripts": "^3.2.2", - "electron-builder-lib": "^20.23.1", - "electron-rebuild": "^1.8.1", - "gulp": "^4.0.0", - "gulp-clip-empty-files": "^0.1.2", - "gulp-concat": "^2.6.1", - "gulp-flatten": "^0.4.0", - "gulp-rename": "^1.3.0", - "gulp-slash": "^1.1.3", - "gulp-util": "^3.0.8", - "node-loader": "^0.6.0", - "through": "^2.3.8", - "typescript": "^2.6.2", - "webpack-merge": "^4.1.2" + "@ionic/app-scripts": "3.2.2", + "electron-builder-lib": "20.23.1", + "electron-rebuild": "1.8.1", + "gulp": "4.0.0", + "gulp-clip-empty-files": "0.1.2", + "gulp-concat": "2.6.1", + "gulp-flatten": "0.4.0", + "gulp-rename": "1.3.0", + "gulp-slash": "1.1.3", + "gulp-util": "3.0.8", + "node-loader": "0.6.0", + "through": "2.3.8", + "typescript": "2.6.2", + "webpack-merge": "4.1.2" }, "browser": { "electron": false From 24fb3d999c32b28e6a32783072688813ba0b8f91 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 27 May 2019 13:34:50 +0200 Subject: [PATCH 211/263] MOBILE-3039 core: Don't force WS queue --- src/classes/site.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index 6db77a1f8..afafeada4 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -191,8 +191,7 @@ interface RequestQueueItem { export class CoreSite { static REQUEST_QUEUE_DELAY = 50; // Maximum number of miliseconds to wait before processing the queue. static REQUEST_QUEUE_LIMIT = 10; // Maximum number of requests allowed in the queue. - // @todo Set REQUEST_QUEUE_FORCE_WS to false before the release. - static REQUEST_QUEUE_FORCE_WS = true; // Use "tool_mobile_call_external_functions" even for calling a single function. + static REQUEST_QUEUE_FORCE_WS = false; // Use "tool_mobile_call_external_functions" even for calling a single function. // Constants for cache update frequency. static FREQUENCY_USUALLY = 0; From 7f32b2763aae375100951930a1378652607a502a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Mon, 27 May 2019 13:26:20 +0200 Subject: [PATCH 212/263] MOBILE-2873 scorm: Fix scorm sync before prefetch --- src/addon/mod/scorm/providers/prefetch-handler.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/scorm/providers/prefetch-handler.ts b/src/addon/mod/scorm/providers/prefetch-handler.ts index ceb157f56..4b4dd8038 100644 --- a/src/addon/mod/scorm/providers/prefetch-handler.ts +++ b/src/addon/mod/scorm/providers/prefetch-handler.ts @@ -443,6 +443,8 @@ export class AddonModScormPrefetchHandler extends CoreCourseActivityPrefetchHand this.syncProvider = this.injector.get(AddonModScormSyncProvider); } - return this.syncProvider.syncScorm(module.instance, siteId); + return this.scormProvider.getScorm(courseId, module.id, module.url, false, siteId).then((scorm) => { + return this.syncProvider.syncScorm(scorm, siteId); + }); } } From 4f1cd6a94e56af2367e5b9dd93e9bc3d32eb3a3a Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 27 May 2019 16:32:31 +0200 Subject: [PATCH 213/263] MOBILE-2873 course: Invalidate data after sync before prefetch --- .../providers/module-prefetch-delegate.ts | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/core/course/providers/module-prefetch-delegate.ts b/src/core/course/providers/module-prefetch-delegate.ts index 7bad6fa23..efb256400 100644 --- a/src/core/course/providers/module-prefetch-delegate.ts +++ b/src/core/course/providers/module-prefetch-delegate.ts @@ -1168,7 +1168,12 @@ export class CoreCourseModulePrefetchDelegate extends CoreDelegate { */ syncModules(modules: any[], courseId: number): Promise { return Promise.all(modules.map((module) => { - return this.syncModule(module, courseId); + return this.syncModule(module, courseId).then(() => { + // Invalidate course updates. + return this.invalidateCourseUpdates(courseId).catch(() => { + // Ignore errors. + }); + }); })); } @@ -1182,11 +1187,18 @@ export class CoreCourseModulePrefetchDelegate extends CoreDelegate { syncModule(module: any, courseId: number): Promise { const handler = this.getPrefetchHandlerFor(module); - const promise = handler && handler.sync ? handler.sync(module, courseId) : Promise.resolve(); + if (handler && handler.sync) { + return handler.sync(module, courseId).then((result) => { + // Always invalidate status cache for this module. We cannot know if data was sent to server or not. + this.invalidateModuleStatusCache(module); - return promise.catch(() => { - // Ignore errors. - }); + return result; + }).catch(() => { + // Ignore errors. + }); + } + + return Promise.resolve(); } /** From 838646f08555e15fac49692032e2b6b82518beaf Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 28 May 2019 09:13:11 +0200 Subject: [PATCH 214/263] MOBILE-3039 core: Fix load logged out site with SSO --- src/core/login/providers/helper.ts | 2 ++ src/providers/sites.ts | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index af5b97243..2d4bbc62f 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -938,6 +938,8 @@ export class CoreLoginHelperProvider { promise.then(() => { this.waitingForBrowser = true; + this.sitesProvider.unsetCurrentSite(); // We need to unset current site to make authentication work fine. + this.openBrowserForSSOLogin(result.siteUrl, result.code, result.service, result.config && result.config.launchurl, data.pageName, data.params); }).catch(() => { diff --git a/src/providers/sites.ts b/src/providers/sites.ts index 31fc08b64..de7424c1b 100644 --- a/src/providers/sites.ts +++ b/src/providers/sites.ts @@ -1181,6 +1181,13 @@ export class CoreSitesProvider { }); } + /** + * Unset current site. + */ + unsetCurrentSite(): void { + this.currentSite = undefined; + } + /** * Updates a site's token. * From eb01a001bc295f9324a838789879ab5ecce30b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 28 May 2019 09:42:47 +0200 Subject: [PATCH 215/263] MOBILE-3005 docker: Remove ionic info from the script --- Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 29b541eb6..d7a27002c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,8 +21,6 @@ COPY . /app # Install npm libraries and run gulp to initialize the project. RUN npm install && gulp && rm -rf /root/.npm -RUN ionic info - # Provide a Healthcheck command for easier use in CI. HEALTHCHECK --interval=10s --timeout=3s --start-period=30s CMD curl -f http://localhost:8100 || exit 1 From a7e391bd1ee536a0c08db094ad1258f9706b2179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 28 May 2019 09:42:47 +0200 Subject: [PATCH 216/263] MOBILE-3039 forum: Load subject when avalaible --- src/addon/mod/forum/pages/discussion/discussion.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index d145ca7f3..2d6b9af79 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -299,8 +299,6 @@ export class AddonModForumDiscussionPage implements OnDestroy { const direction = this.sort == 'flat-newest' ? 'DESC' : 'ASC'; this.forumProvider.sortDiscussionPosts(posts, direction); } - this.defaultSubject = this.translate.instant('addon.mod_forum.re') + ' ' + this.discussion.subject; - this.replyData.subject = this.defaultSubject; // Now try to get the forum. return this.fetchForum().then((forum) => { @@ -343,6 +341,10 @@ export class AddonModForumDiscussionPage implements OnDestroy { this.forum = {}; this.accessInfo = {}; }).then(() => { + this.defaultSubject = this.translate.instant('addon.mod_forum.re') + ' ' + + (this.discussion ? this.discussion.subject : ""); + this.replyData.subject = this.defaultSubject; + const startingPost = this.forumProvider.extractStartingPost(posts); if (startingPost) { // Update discussion data from first post. From 3e948fa2d93eb88153ed8de8876747467e0c754c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 28 May 2019 10:14:36 +0200 Subject: [PATCH 217/263] MOBILE-3039 tabs: Fix hide tabbar on tablet --- src/components/ion-tabs/ion-tabs.scss | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/ion-tabs/ion-tabs.scss b/src/components/ion-tabs/ion-tabs.scss index 48c459042..fabba1828 100644 --- a/src/components/ion-tabs/ion-tabs.scss +++ b/src/components/ion-tabs/ion-tabs.scss @@ -37,6 +37,13 @@ ion-app.app-root core-ion-tabs { } } + .tabbar[hidden] + .tabcontent { + width: 100%; + core-ion-tab { + @include position(0, 0, 0, 0); + } + } + .tabcontent { width: calc(100% - #{($core-sidetab-size)}); position: absolute; From aa151774d8f49c28bbb56207a04bcc6ad5751d11 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 28 May 2019 10:20:36 +0200 Subject: [PATCH 218/263] MOBILE-2840 scorm: Fix blank page on refresh --- src/addon/mod/scorm/components/index/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/addon/mod/scorm/components/index/index.ts b/src/addon/mod/scorm/components/index/index.ts index 181342b58..6672548b7 100644 --- a/src/addon/mod/scorm/components/index/index.ts +++ b/src/addon/mod/scorm/components/index/index.ts @@ -245,12 +245,12 @@ export class AddonModScormIndexComponent extends CoreCourseModuleMainActivityCom return Promise.all(promises).then(() => { // Check whether to launch the SCORM immediately. - if (typeof this.skip == 'undefined' && !this.hasOffline && !this.errorMessage && + if (typeof this.skip == 'undefined') { + this.skip = !this.hasOffline && !this.errorMessage && (!this.scorm.lastattemptlock || this.scorm.attemptsLeft > 0) && this.accessInfo.canskipview && !this.accessInfo.canviewreport && this.scorm.skipview >= AddonModScormProvider.SKIPVIEW_FIRST && - (this.scorm.skipview == AddonModScormProvider.SKIPVIEW_ALWAYS || this.lastAttempt == 0)) { - this.skip = true; + (this.scorm.skipview == AddonModScormProvider.SKIPVIEW_ALWAYS || this.lastAttempt == 0); } }); }); From 4a758cba74d3a1db714b556c821396c541442bb4 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 28 May 2019 10:22:55 +0200 Subject: [PATCH 219/263] MOBILE-3039 course: Fix prefetch avatars in forum and glossary --- src/addon/mod/forum/providers/prefetch-handler.ts | 6 ++++-- src/addon/mod/glossary/providers/prefetch-handler.ts | 6 +++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/addon/mod/forum/providers/prefetch-handler.ts b/src/addon/mod/forum/providers/prefetch-handler.ts index 7b82c8d3c..04e3289f8 100644 --- a/src/addon/mod/forum/providers/prefetch-handler.ts +++ b/src/addon/mod/forum/providers/prefetch-handler.ts @@ -195,8 +195,10 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand }); // Prefetch intro files, attachments, embedded files and user avatars. - const files = this.getIntroFilesFromInstance(module, forum).concat(this.getPostsFiles(posts)) - .concat(Object.keys(avatars)); + const avatarFiles = Object.keys(avatars).map((url) => { + return { fileurl: url }; + }); + const files = this.getIntroFilesFromInstance(module, forum).concat(this.getPostsFiles(posts)).concat(avatarFiles); promises.push(this.filepoolProvider.addFilesToQueue(siteId, files, this.component, module.id)); // Prefetch groups data. diff --git a/src/addon/mod/glossary/providers/prefetch-handler.ts b/src/addon/mod/glossary/providers/prefetch-handler.ts index e43835243..ba5be62f3 100644 --- a/src/addon/mod/glossary/providers/prefetch-handler.ts +++ b/src/addon/mod/glossary/providers/prefetch-handler.ts @@ -170,7 +170,11 @@ export class AddonModGlossaryPrefetchHandler extends CoreCourseActivityPrefetchH } }); - const files = this.getFilesFromGlossaryAndEntries(module, glossary, entries).concat(Object.keys(avatars)); + // Prefetch intro files, entries files and user avatars. + const avatarFiles = Object.keys(avatars).map((url) => { + return { fileurl: url }; + }); + const files = this.getFilesFromGlossaryAndEntries(module, glossary, entries).concat(avatarFiles); promises.push(this.filepoolProvider.addFilesToQueue(siteId, files, this.component, module.id)); return Promise.all(promises); From f70a95b0b9466e4149e226bf930abf754d33e0f7 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 28 May 2019 10:46:30 +0200 Subject: [PATCH 220/263] MOBILE-3039 grades: Fix repeated calls when prefetching grades --- .../grades/providers/course-option-handler.ts | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/src/core/grades/providers/course-option-handler.ts b/src/core/grades/providers/course-option-handler.ts index 7b253f723..ae04b5574 100644 --- a/src/core/grades/providers/course-option-handler.ts +++ b/src/core/grades/providers/course-option-handler.ts @@ -16,7 +16,6 @@ import { Injectable, Injector } from '@angular/core'; import { CoreCourseOptionsHandler, CoreCourseOptionsHandlerData } from '@core/course/providers/options-delegate'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreGradesProvider } from './grades'; -import { CoreGradesHelperProvider } from './helper'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; import { CoreGradesCourseComponent } from '../components/course/course'; @@ -28,8 +27,7 @@ export class CoreGradesCourseOptionHandler implements CoreCourseOptionsHandler { name = 'CoreGrades'; priority = 400; - constructor(private gradesProvider: CoreGradesProvider, private coursesProvider: CoreCoursesProvider, - private gradesHelper: CoreGradesHelperProvider) {} + constructor(private gradesProvider: CoreGradesProvider, private coursesProvider: CoreCoursesProvider) {} /** * Should invalidate the data to determine if the handler is enabled for a certain course. @@ -100,20 +98,6 @@ export class CoreGradesCourseOptionHandler implements CoreCourseOptionsHandler { * @return {Promise} Promise resolved when done. */ prefetch(course: any): Promise { - return this.gradesProvider.getCourseGradesTable(course.id, undefined, undefined, true).then((table) => { - const promises = []; - - table = this.gradesHelper.formatGradesTable(table); - - if (table && table.rows) { - table.rows.forEach((row) => { - if (row.itemtype != 'category') { - promises.push(this.gradesHelper.getGradeItem(course.id, row.id, undefined, undefined, true)); - } - }); - } - - return Promise.all(promises); - }); + return this.gradesProvider.getCourseGradesTable(course.id, undefined, undefined, true); } } From 4a0858e430a17c4237ee106d765403765a70d043 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 28 May 2019 11:17:54 +0200 Subject: [PATCH 221/263] MOBILE-3039 core: Fix package-lock file --- package-lock.json | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index a9576807d..24f38ee3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2473,9 +2473,9 @@ "dev": true }, "com-darryncampbell-cordova-plugin-intent": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/com-darryncampbell-cordova-plugin-intent/-/com-darryncampbell-cordova-plugin-intent-1.1.1.tgz", - "integrity": "sha512-h+V54+qCFY1h5csX8lAKTxBn5DdbP/8/sm7vS6X0WZPI+OTKycxeoJC+oGtPHhlvTh4gSEVW5/MkDqANRcmaug==" + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/com-darryncampbell-cordova-plugin-intent/-/com-darryncampbell-cordova-plugin-intent-1.1.7.tgz", + "integrity": "sha512-e+CIaOTpZ7r178tmCijZcm/o5nJIWVnQaUrwm5xwX1zc5zutVCtz1oH3xqq6gzNk05C9i7n96xdenODHMYpiMw==" }, "combined-stream": { "version": "1.0.6", @@ -2817,18 +2817,18 @@ } }, "cordova-android-support-gradle-release": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cordova-android-support-gradle-release/-/cordova-android-support-gradle-release-2.0.1.tgz", - "integrity": "sha512-HlX75PN8b9y3LIlAFLQspSbO7dr7hTRi2/n4A2Hz4AHb7NxiVt6VU+6j+JcseDveVdddh1sKMZd0xPtFMVNjXA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cordova-android-support-gradle-release/-/cordova-android-support-gradle-release-3.0.0.tgz", + "integrity": "sha512-vyiqQ6N9Qb+4xRizWSpUX/LyJ1HaDN0piWc8xoS9Hx9YodIS3vyi1UpQyfLQmCixoeLVcRieKXjuSMXnUrv1dw==", "requires": { - "semver": "5.1.0", - "xml2js": "~0.4.19" + "q": "^1.4.1", + "semver": "5.6.0" }, "dependencies": { "semver": { - "version": "5.1.0", - "resolved": "http://registry.npmjs.org/semver/-/semver-5.1.0.tgz", - "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU=" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" } } }, @@ -8579,7 +8579,7 @@ }, "pegjs": { "version": "0.10.0", - "resolved": "http://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", + "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" }, "performance-now": { @@ -8815,6 +8815,11 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -9607,7 +9612,8 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true }, "scss-tokenizer": { "version": "0.2.3", @@ -12207,6 +12213,7 @@ "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, "requires": { "sax": ">=0.6.0", "xmlbuilder": "~9.0.1" @@ -12215,7 +12222,8 @@ "xmlbuilder": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true }, "xmldom": { "version": "0.1.27", From 57b3ed23b20ab684d293e99bfd9f5438b1fd6c88 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Tue, 28 May 2019 12:34:33 +0200 Subject: [PATCH 222/263] MOBILE-2992 user: Fix sync preferences --- src/core/user/providers/sync.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/user/providers/sync.ts b/src/core/user/providers/sync.ts index c63e8dc61..62de2f679 100644 --- a/src/core/user/providers/sync.ts +++ b/src/core/user/providers/sync.ts @@ -80,7 +80,7 @@ export class CoreUserSyncProvider extends CoreSyncBaseProvider { return this.userOffline.setPreference(preference.name, onlineValue, onlineValue, siteId); } - return this.userProvider.setUserPreference(name, preference.value, siteId).catch((error) => { + return this.userProvider.setUserPreference(preference.name, preference.value, siteId).catch((error) => { if (this.utils.isWebServiceError(error)) { warnings.push(this.textUtils.getErrorMessageFromError(error)); } else { From 7ef6f49e7a52ce9d8b11ad1afdb99d274f9b7dd7 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 28 May 2019 21:06:43 +0800 Subject: [PATCH 223/263] MOBILE-2925: Cache the npm cache directory --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 99d62eeae..c75db89dc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ before_cache: cache: directories: - - node_modules + - $HOME/.npm - $HOME/.cache/electron - $HOME/.cache/electron-builder From 548bf24c1abc37cccd7a029e6c635e136fdb023b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 28 May 2019 17:13:44 +0200 Subject: [PATCH 224/263] MOBILE-3039 lang: Reword some strings --- src/addon/storagemanager/lang/en.json | 2 +- src/assets/lang/en.json | 4 ++-- src/core/course/lang/en.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/addon/storagemanager/lang/en.json b/src/addon/storagemanager/lang/en.json index a65866e55..a3491b8b9 100644 --- a/src/addon/storagemanager/lang/en.json +++ b/src/addon/storagemanager/lang/en.json @@ -1,7 +1,7 @@ { "deletecourse": "Offload all course data", "deletedatafrom": "Offload data from {{name}}", - "info": "Files stored on your device make the app work faster, and when offline. You can safely offload them if you need to free up storage space.", + "info": "Files stored on your device make the app work faster and enable the app to be used offline. You can safely offload files if you need to free up storage space.", "managestorage": "Manage storage", "storageused": "File storage used:" } diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index f23ea7924..ac7f5821e 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -915,7 +915,7 @@ "addon.notifications.therearentnotificationsyet": "There are no notifications.", "addon.storagemanager.deletecourse": "Offload all course data", "addon.storagemanager.deletedatafrom": "Offload data from {{name}}", - "addon.storagemanager.info": "Files stored on your device make the app work faster, and when offline. You can safely offload them if you need to free up storage space.", + "addon.storagemanager.info": "Files stored on your device make the app work faster and enable the app to be used offline. You can safely offload files if you need to free up storage space.", "addon.storagemanager.managestorage": "Manage storage", "addon.storagemanager.storageused": "File storage used:", "assets.countries.AD": "Andorra", @@ -1283,7 +1283,7 @@ "core.course.confirmdeletemodulefiles": "Are you sure you want to delete these files?", "core.course.confirmdownload": "You are about to download {{size}}.{{availableSpace}} Are you sure you want to continue?", "core.course.confirmdownloadunknownsize": "It was not possible to calculate the size of the download.{{availableSpace}} Are you sure you want to continue?", - "core.course.confirmlimiteddownload": "You are not currently connected to WiFi. ", + "core.course.confirmlimiteddownload": "You are not currently connected to Wi-Fi. ", "core.course.confirmpartialdownloadsize": "You are about to download at least {{size}}.{{availableSpace}} Are you sure you want to continue?", "core.course.contents": "Contents", "core.course.couldnotloadsectioncontent": "Could not load the section content. Please try again later.", diff --git a/src/core/course/lang/en.json b/src/core/course/lang/en.json index 314f3a81c..2d2d0156f 100644 --- a/src/core/course/lang/en.json +++ b/src/core/course/lang/en.json @@ -9,7 +9,7 @@ "confirmdownload": "You are about to download {{size}}.{{availableSpace}} Are you sure you want to continue?", "confirmdownloadunknownsize": "It was not possible to calculate the size of the download.{{availableSpace}} Are you sure you want to continue?", "confirmpartialdownloadsize": "You are about to download at least {{size}}.{{availableSpace}} Are you sure you want to continue?", - "confirmlimiteddownload": "You are not currently connected to WiFi. ", + "confirmlimiteddownload": "You are not currently connected to Wi-Fi. ", "contents": "Contents", "couldnotloadsectioncontent": "Could not load the section content. Please try again later.", "couldnotloadsections": "Could not load the sections. Please try again later.", From 76f470effd58ebaf5dafcb5fa2336453b7da7c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 29 May 2019 11:03:02 +0200 Subject: [PATCH 225/263] MOBILE-3039 lang: Fix ratings lang index --- scripts/langindex.json | 18 +++++++++--------- scripts/moodle_to_json.php | 10 +++++++++- .../mod/forum/pages/discussion/discussion.ts | 2 +- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/scripts/langindex.json b/scripts/langindex.json index bc3172875..7381c6fc8 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -485,7 +485,7 @@ "addon.mod_forum.addanewquestion": "forum", "addon.mod_forum.addanewtopic": "forum", "addon.mod_forum.addtofavourites": "forum", - "addon.mod_forum.advanced": "forum", + "addon.mod_forum.advanced": "moodle", "addon.mod_forum.cannotadddiscussion": "forum", "addon.mod_forum.cannotadddiscussionall": "forum", "addon.mod_forum.cannotcreatediscussion": "forum", @@ -1645,14 +1645,14 @@ "core.question.questionno": "question", "core.question.requiresgrading": "question", "core.quotausage": "moodle", - "core.rating.aggregateavg": "moodle", - "core.rating.aggregatecount": "moodle", - "core.rating.aggregatemax": "moodle", - "core.rating.aggregatemin": "moodle", - "core.rating.aggregatesum": "moodle", - "core.rating.noratings": "moodle", - "core.rating.rating": "moodle", - "core.rating.ratings": "moodle", + "core.rating.aggregateavg": "rating", + "core.rating.aggregatecount": "rating", + "core.rating.aggregatemax": "rating", + "core.rating.aggregatemin": "rating", + "core.rating.aggregatesum": "rating", + "core.rating.noratings": "rating", + "core.rating.rating": "rating", + "core.rating.ratings": "rating", "core.redirectingtosite": "local_moodlemobileapp", "core.refresh": "moodle", "core.remove": "moodle", diff --git a/scripts/moodle_to_json.php b/scripts/moodle_to_json.php index 2eccc8c1d..2abf2a6c2 100644 --- a/scripts/moodle_to_json.php +++ b/scripts/moodle_to_json.php @@ -34,9 +34,11 @@ $config_langs = array_keys(get_object_vars($config['languages'])); // Set languages to do. If script is called using a language it will be used as unique. if (isset($argv[1]) && !empty($argv[1])) { $forcedetect = false; + define('TOTRANSLATE', true); $languages = explode(',', $argv[1]); } else { $forcedetect = true; + define('TOTRANSLATE', false); $languages = $config_langs; } @@ -160,6 +162,9 @@ function build_lang($lang, $keys, $total) { $file = LANGPACKSFOLDER.'/'.$langfoldername.'/'.$value->file.'.php'; // Apply translations. if (!file_exists($file)) { + if (TOTRANSLATE) { + echo "\n\t\To translate $value->string on $value->file"; + } continue; } @@ -169,7 +174,7 @@ function build_lang($lang, $keys, $total) { if (!isset($string[$value->string])) { // Not yet translated. Do not override. if (!$langFile) { - // Load lang fils just once. + // Load lang files just once. $langFile = file_get_contents(ASSETSPATH.$lang.'.json'); $langFile = (array) json_decode($langFile); } @@ -177,6 +182,9 @@ function build_lang($lang, $keys, $total) { $translations[$key] = $langFile[$key]; $local++; } + if (TOTRANSLATE) { + echo "\n\t\tTo translate $value->string on $value->file"; + } continue; } else { $text = $string[$value->string]; diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index 2d6b9af79..f8514dd5f 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -342,7 +342,7 @@ export class AddonModForumDiscussionPage implements OnDestroy { this.accessInfo = {}; }).then(() => { this.defaultSubject = this.translate.instant('addon.mod_forum.re') + ' ' + - (this.discussion ? this.discussion.subject : ""); + (this.discussion ? this.discussion.subject : ''); this.replyData.subject = this.defaultSubject; const startingPost = this.forumProvider.extractStartingPost(posts); From 1a01d7da331bf6761fb1b2c52139d65f2b674c98 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 29 May 2019 13:14:09 +0200 Subject: [PATCH 226/263] MOBILE-3039 book: Fix check automatic completion --- src/addon/mod/book/components/index/index.ts | 2 +- src/addon/mod/forum/pages/discussion/discussion.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/addon/mod/book/components/index/index.ts b/src/addon/mod/book/components/index/index.ts index 1dd820508..1b154d373 100644 --- a/src/addon/mod/book/components/index/index.ts +++ b/src/addon/mod/book/components/index/index.ts @@ -186,7 +186,7 @@ export class AddonModBookIndexComponent extends CoreCourseModuleMainResourceComp // Chapter loaded, log view. We don't return the promise because we don't want to block the user for this. this.bookProvider.logView(this.module.instance, chapterId, this.module.name).then(() => { // Module is completed when last chapter is viewed, so we only check completion if the last is reached. - if (!this.nextChapter) { + if (this.nextChapter == '0') { this.courseProvider.checkModuleCompletion(this.courseId, this.module.completiondata); } }).catch(() => { diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index 2d6b9af79..f8514dd5f 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -342,7 +342,7 @@ export class AddonModForumDiscussionPage implements OnDestroy { this.accessInfo = {}; }).then(() => { this.defaultSubject = this.translate.instant('addon.mod_forum.re') + ' ' + - (this.discussion ? this.discussion.subject : ""); + (this.discussion ? this.discussion.subject : ''); this.replyData.subject = this.defaultSubject; const startingPost = this.forumProvider.extractStartingPost(posts); From a68b9a61b82a23be880fce85c3070a744b7ea744 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 29 May 2019 15:07:54 +0200 Subject: [PATCH 227/263] MOBILE-3039 core: Fix URL scheme launched when it shouldn't --- config.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/config.xml b/config.xml index b2055031e..57488f7ba 100644 --- a/config.xml +++ b/config.xml @@ -37,6 +37,7 @@ + From d0beca075a279630ee02c4e5f26c8836eff80a1e Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 29 May 2019 15:24:43 +0200 Subject: [PATCH 228/263] MOBILE-3039 core: Fix reconnect screen shown again when it shouldn't --- src/classes/site.ts | 2 ++ src/providers/sites.ts | 42 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index afafeada4..9253f83e6 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -680,6 +680,8 @@ export class CoreSite { (error.errorcode == 'accessexception' && error.message.indexOf('Invalid token - token expired') > -1)) { if (initialToken !== this.token && !retrying) { // Token has changed, retry with the new token. + preSets.getFromCache = false; // Don't check cache now. Also, it will skip ongoingRequests. + return this.request(method, data, preSets, true); } else if (this.appProvider.isSSOAuthenticationOngoing()) { // There's an SSO authentication ongoing, wait for it to finish and try again. diff --git a/src/providers/sites.ts b/src/providers/sites.ts index de7424c1b..19f117a6a 100644 --- a/src/providers/sites.ts +++ b/src/providers/sites.ts @@ -582,22 +582,48 @@ export class CoreSitesProvider { } // Create a "candidate" site to fetch the site info. - const candidateSite = this.sitesFactory.makeSite(undefined, siteUrl, token, undefined, privateToken); + let candidateSite = this.sitesFactory.makeSite(undefined, siteUrl, token, undefined, privateToken), + isNewSite = true; return candidateSite.fetchSiteInfo().then((info) => { const result = this.isValidMoodleVersion(info); if (result == this.VALID_VERSION) { - // Set site ID and info. const siteId = this.createSiteID(info.siteurl, info.username); - candidateSite.setId(siteId); - candidateSite.setInfo(info); - // Create database tables before login and before any WS call. - return this.migrateSiteSchemas(candidateSite).then(() => { + // Check if the site already exists. + return this.getSite(siteId).catch(() => { + // Not exists. + }).then((site) => { + if (site) { + // Site already exists, update its data and use it. + isNewSite = false; + candidateSite = site; + candidateSite.setToken(token); + candidateSite.setPrivateToken(privateToken); + candidateSite.setInfo(info); + + } else { + // New site, set site ID and info. + isNewSite = true; + candidateSite.setId(siteId); + candidateSite.setInfo(info); + + // Create database tables before login and before any WS call. + return this.migrateSiteSchemas(candidateSite); + } + + }).then(() => { // Try to get the site config. - return this.getSiteConfig(candidateSite).then((config) => { - candidateSite.setConfig(config); + return this.getSiteConfig(candidateSite).catch((error) => { + // Ignore errors if it's not a new site, we'll use the config already stored. + if (isNewSite) { + return Promise.reject(error); + } + }).then((config) => { + if (typeof config != 'undefined') { + candidateSite.setConfig(config); + } // Add site to sites list. this.addSite(siteId, siteUrl, token, info, privateToken, config); From d530d2b95e9893fb8e2a1f56682134a59ce3cde4 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 29 May 2019 17:19:53 +0200 Subject: [PATCH 229/263] MOBILE-3039 ios: Make avatars circled in shared files choose --- src/core/sharedfiles/pages/choose-site/choose-site.html | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/core/sharedfiles/pages/choose-site/choose-site.html b/src/core/sharedfiles/pages/choose-site/choose-site.html index eab31f622..ca01e2cb3 100644 --- a/src/core/sharedfiles/pages/choose-site/choose-site.html +++ b/src/core/sharedfiles/pages/choose-site/choose-site.html @@ -10,10 +10,12 @@

{{ 'core.sharedfiles.chooseaccountstorefile' | translate }}

{{fileName}}

-
- + + + {{ 'core.pictureof' | translate:{$a: site.fullname} }} +

{{site.fullName}}

-

+

{{site.siteUrl}}

From 136869cc04985a558f7327427e24dc082ab87685 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 29 May 2019 18:25:35 +0200 Subject: [PATCH 230/263] MOBILE-3039 push: Fix sync errors caused by pushnotifications --- .../providers/pushnotifications.ts | 13 +++++++++++-- .../providers/register-cron-handler.ts | 2 +- src/providers/utils/utils.ts | 4 ++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/core/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts index 3a48abfc7..430d78000 100644 --- a/src/core/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -200,6 +200,15 @@ export class CorePushNotificationsProvider { }); } + /** + * Check whether the device can be registered in Moodle to receive push notifications. + * + * @return {boolean} Whether the device can be registered in Moodle. + */ + canRegisterOnMoodle(): boolean { + return this.pushID && this.appProvider.isMobile(); + } + /** * Delete all badge records for a given site. * @@ -658,7 +667,7 @@ export class CorePushNotificationsProvider { registerDeviceOnMoodle(siteId?: string, forceUnregister?: boolean): Promise { this.logger.debug('Register device on Moodle.'); - if (!this.pushID || !this.appProvider.isMobile()) { + if (!this.canRegisterOnMoodle()) { return Promise.reject(null); } @@ -729,7 +738,7 @@ export class CorePushNotificationsProvider { if (siteId) { // Check if the site has a pending unregister. - promise = this.appDB.getRecords(CorePushNotificationsProvider.REGISTERED_DEVICES_TABLE, {siteid: siteId}); + promise = this.appDB.getRecords(CorePushNotificationsProvider.PENDING_UNREGISTER_TABLE, {siteid: siteId}); } else { // Get all pending unregisters. promise = this.appDB.getAllRecords(CorePushNotificationsProvider.PENDING_UNREGISTER_TABLE); diff --git a/src/core/pushnotifications/providers/register-cron-handler.ts b/src/core/pushnotifications/providers/register-cron-handler.ts index 0f04874b5..e2bc48b2c 100644 --- a/src/core/pushnotifications/providers/register-cron-handler.ts +++ b/src/core/pushnotifications/providers/register-cron-handler.ts @@ -42,7 +42,7 @@ export class CorePushNotificationsRegisterCronHandler implements CoreCronHandler * @return {Promise} Promise resolved when done, rejected if failure. */ execute(siteId?: string): Promise { - if (!siteId) { + if (!siteId || !this.pushNotificationsProvider.canRegisterOnMoodle()) { // It's not a specific site, don't do anything. return Promise.resolve(); } diff --git a/src/providers/utils/utils.ts b/src/providers/utils/utils.ts index d3d09bf47..e1595c75b 100644 --- a/src/providers/utils/utils.ts +++ b/src/providers/utils/utils.ts @@ -742,11 +742,11 @@ export class CoreUtilsProvider { * @return {boolean} Whether the error was returned by the WebService. */ isWebServiceError(error: any): boolean { - return typeof error.warningcode != 'undefined' || (typeof error.errorcode != 'undefined' && + return error && (typeof error.warningcode != 'undefined' || (typeof error.errorcode != 'undefined' && error.errorcode != 'invalidtoken' && error.errorcode != 'userdeleted' && error.errorcode != 'upgraderunning' && error.errorcode != 'forcepasswordchangenotice' && error.errorcode != 'usernotfullysetup' && error.errorcode != 'sitepolicynotagreed' && error.errorcode != 'sitemaintenance' && - (error.errorcode != 'accessexception' || error.message.indexOf('Invalid token - token expired') == -1)); + (error.errorcode != 'accessexception' || error.message.indexOf('Invalid token - token expired') == -1))); } /** From 3eb0c81c462b6c0a647990646cb383b73a8dc2ab Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 30 May 2019 10:12:37 +0200 Subject: [PATCH 231/263] MOBILE-3039 core: Fix getStoredConfig error in synchronize --- src/core/mainmenu/pages/more/more.ts | 2 ++ src/providers/sites.ts | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/mainmenu/pages/more/more.ts b/src/core/mainmenu/pages/more/more.ts index 03fc83452..c91d984bb 100644 --- a/src/core/mainmenu/pages/more/more.ts +++ b/src/core/mainmenu/pages/more/more.ts @@ -72,6 +72,8 @@ export class CoreMainMenuMorePage implements OnDestroy { */ ngOnDestroy(): void { window.removeEventListener('resize', this.initHandlers.bind(this)); + this.langObserver && this.langObserver.off(); + this.updateSiteObserver && this.updateSiteObserver.off(); if (this.subscription) { this.subscription.unsubscribe(); diff --git a/src/providers/sites.ts b/src/providers/sites.ts index 19f117a6a..b64da98fd 100644 --- a/src/providers/sites.ts +++ b/src/providers/sites.ts @@ -27,6 +27,7 @@ import { CoreConfigConstants } from '../configconstants'; import { CoreSite } from '@classes/site'; import { SQLiteDB, SQLiteDBTableSchema } from '@classes/sqlitedb'; import { Md5 } from 'ts-md5/dist/md5'; +import { Location } from '@angular/common'; /** * Response of checking if a site exists and its configuration. @@ -320,7 +321,7 @@ export class CoreSitesProvider { constructor(logger: CoreLoggerProvider, private http: HttpClient, private sitesFactory: CoreSitesFactoryProvider, private appProvider: CoreAppProvider, private translate: TranslateService, private urlUtils: CoreUrlUtilsProvider, - private eventsProvider: CoreEventsProvider, private textUtils: CoreTextUtilsProvider, + private eventsProvider: CoreEventsProvider, private textUtils: CoreTextUtilsProvider, private location: Location, private utils: CoreUtilsProvider) { this.logger = logger.getInstance('CoreSitesProvider'); @@ -1161,6 +1162,9 @@ export class CoreSitesProvider { promises.push(this.appDB.deleteRecords(this.CURRENT_SITE_TABLE, { id: 1 })); return Promise.all(promises).finally(() => { + // Due to DeepLinker, we need to remove the path from the URL, otherwise some pages are re-created when they shouldn't. + this.location.replaceState(''); + this.eventsProvider.trigger(CoreEventsProvider.LOGOUT, {}, siteId); }); } From 1ab815442822aabfb261ce59aa7ace9c3e494bb7 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 30 May 2019 12:20:07 +0200 Subject: [PATCH 232/263] MOBILE-3039 push: Fix appurl from push notifs in iOS --- src/core/pushnotifications/providers/pushnotifications.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts index 430d78000..992a311be 100644 --- a/src/core/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -403,6 +403,11 @@ export class CorePushNotificationsProvider { const data = notification ? notification.additionalData : {}; this.sitesProvider.getSite(data.site).then(() => { + + if (typeof data.customdata == 'string') { + data.customdata = this.textUtils.parseJSON(data.customdata, {}); + } + if (this.utils.isTrueOrOne(data.foreground)) { // If the app is in foreground when the notification is received, it's not shown. Let's show it ourselves. if (this.localNotificationsProvider.isAvailable()) { From b2c63f450382388d07a213621b2e5141d0d12527 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 30 May 2019 12:28:13 +0200 Subject: [PATCH 233/263] MOBILE-3039 core: Allow forcing offline mode from javascript console --- src/providers/app.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/providers/app.ts b/src/providers/app.ts index 50deda52a..abbf4dd9f 100644 --- a/src/providers/app.ts +++ b/src/providers/app.ts @@ -73,6 +73,7 @@ export class CoreAppProvider { protected backActions = []; protected mainMenuId = 0; protected mainMenuOpen: number; + protected forceOffline = false; constructor(dbProvider: CoreDbProvider, private platform: Platform, private keyboard: Keyboard, private appCtrl: App, private network: Network, logger: CoreLoggerProvider, private events: CoreEventsProvider, zone: NgZone, @@ -102,6 +103,9 @@ export class CoreAppProvider { this.platform.registerBackButtonAction(() => { this.backButtonAction(); }, 100); + + // Export the app provider so Behat tests can change the forceOffline flag. + ( window).appProvider = this; } /** @@ -257,6 +261,10 @@ export class CoreAppProvider { * @return {boolean} Whether the app is online. */ isOnline(): boolean { + if (this.forceOffline) { + return false; + } + let online = this.network.type !== null && this.network.type != Connection.NONE && this.network.type != Connection.UNKNOWN; // Double check we are not online because we cannot rely 100% in Cordova APIs. Also, check it in browser. if (!online && navigator.onLine) { @@ -567,4 +575,13 @@ export class CoreAppProvider { this.statusBar.styleLightContent() : this.statusBar.styleDefault(); } } + + /** + * Set value of forceOffline flag. If true, the app will think the device is offline. + * + * @param {boolean} value Value to set. + */ + setForceOffline(value: boolean): void { + this.forceOffline = !!value; + } } From f4cd6f37b043644ba76d5ba898d1817fab283bb9 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 30 May 2019 13:35:28 +0200 Subject: [PATCH 234/263] MOBILE-3039 core: Fix old custom URL links in iOS --- src/providers/urlschemes.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/providers/urlschemes.ts b/src/providers/urlschemes.ts index 6617e627e..83b189c3a 100644 --- a/src/providers/urlschemes.ts +++ b/src/providers/urlschemes.ts @@ -125,10 +125,6 @@ export class CoreCustomURLSchemesProvider { // Some sites add a # at the end of the URL. If it's there, remove it. url = url.replace(/\/?#?\/?$/, ''); - // In iOS, the protocol after the scheme doesn't have ":". Add it. - // E.g. "moodlemobile://https://..." is received as "moodlemobile://https//..." - url = url.replace(/\/\/(https?)\/\//, '//$1://'); - modal = this.domUtils.showModalLoading(); // Get the data from the URL. @@ -137,8 +133,14 @@ export class CoreCustomURLSchemesProvider { return this.getCustomURLTokenData(url); } else if (this.isCustomURLLink(url)) { + // In iOS, the protocol after the scheme doesn't have ":". Add it. + url = url.replace(/\/\/link=(https?)\/\//, '//link=$1://'); + return this.getCustomURLLinkData(url); } else { + // In iOS, the protocol after the scheme doesn't have ":". Add it. + url = url.replace(/\/\/(https?)\/\//, '//$1://'); + return this.getCustomURLData(url); } }).then((result) => { From 09b95dbd97f1960798a819a10d064b72da48c623 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 30 May 2019 11:12:36 +0200 Subject: [PATCH 235/263] MOBILE-3039 data: Fix required textarea fields offline --- src/addon/mod/data/fields/textarea/providers/handler.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/addon/mod/data/fields/textarea/providers/handler.ts b/src/addon/mod/data/fields/textarea/providers/handler.ts index 1c1a0bc0d..28ad00b9a 100644 --- a/src/addon/mod/data/fields/textarea/providers/handler.ts +++ b/src/addon/mod/data/fields/textarea/providers/handler.ts @@ -103,11 +103,9 @@ export class AddonModDataFieldTextareaHandler extends AddonModDataFieldTextHandl return this.translate.instant('addon.mod_data.errormustsupplyvalue'); } - const found = inputData.some((input) => { - return !input.subfield && this.textUtils.htmlIsBlank(input.value); - }); + const value = inputData.find((value) => value.subfield == ''); - if (!found) { + if (!value || this.textUtils.htmlIsBlank(value.value)) { return this.translate.instant('addon.mod_data.errormustsupplyvalue'); } } From b7088b6886de096c4bdda8b0e7c066c5348a27c5 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 30 May 2019 11:44:47 +0200 Subject: [PATCH 236/263] MOBILE-3039 data: Don't display error when comments are disabled --- src/addon/mod/data/pages/entry/entry.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/addon/mod/data/pages/entry/entry.html b/src/addon/mod/data/pages/entry/entry.html index ebbc2e2fa..4bc24c4a6 100644 --- a/src/addon/mod/data/pages/entry/entry.html +++ b/src/addon/mod/data/pages/entry/entry.html @@ -31,7 +31,7 @@ - + From 5143897570b51ebd3641e4a06871c453ddea4da5 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 30 May 2019 14:44:41 +0200 Subject: [PATCH 237/263] MOBILE-3039 workshop: Hide save button if user can't edit assessment --- src/addon/mod/workshop/pages/submission/submission.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/addon/mod/workshop/pages/submission/submission.html b/src/addon/mod/workshop/pages/submission/submission.html index 7a77c3f44..70fdbb714 100644 --- a/src/addon/mod/workshop/pages/submission/submission.html +++ b/src/addon/mod/workshop/pages/submission/submission.html @@ -2,7 +2,7 @@ -

5+wln$y*3R59i_s|+)9TcpW$PIXBEyl+0PM3c;Z?mA3y zRT39z%n(`}WB2dYdi=+bk%z}_=ymSW0;{H(JREnUL7D}yC0DmGvNdUPEfRbP@jCMe zNPJojMGN%FLkGXqy1L)WBcoHEhR{&s{M?ZYomL%0(=;NQUU zU=28Y*~Wf-{?sYk#qhx;@q?tQy^qmicf(uTiGTVzA9`Qg5$#%7U&>zx?>0&WHl2Il z0HqB`*4n6quw4$CC4s~9iW`c4ebDW#TPGgk34tK=DP-4*H&7@3`{Qu_%R7Ae`SsA( z|GtjF*Lm=DE&K}yU-958CjL7SzGC86O#F(8Uor7(b@&wtzarsRB>akmUy<-D5`IO( zuSob63BMxYS0wz3gkO>HD-wQ1!mmj96$$_UL_!sY-;t8(nqCB+Jhjd+?x#y}h+yzU ztB{yb@UqUz!qV}$h3#=G>+_b@PBu2+*VMwo$-+WKd};E3T@V?KK!zp%zc0XcCFOn@ PVdzgjKh~YR`rH2j#qDb@ literal 103960 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 ZJhA^jfm>889}qys=gt3>f7bQp{{hroii-dM diff --git a/resources/android/splash/drawable-port-hdpi-screen.png b/resources/android/splash/drawable-port-hdpi-screen.png index c8b75602a21a25a7f78db4bf070982b847bec1ea..8256b58de7ee9e57261c08de3776f6493bb69838 100644 GIT binary patch literal 14867 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 diff --git a/resources/android/splash/drawable-port-ldpi-screen.png b/resources/android/splash/drawable-port-ldpi-screen.png index 1546693dec3062a59aabfc2400a43b35d34be389..d41cda737f190d1b16b0f23dc86d6a5cae18cbc4 100644 GIT binary patch literal 5368 zcmeHLXE+;N`;Sq3wP>sgrAF1JY9&S$)e5>)jas!@yH-U|V%4ZoB}P4uq64*KB~}t1 z6{CnfLW>$fjabQ>_v8P=|NHylIoCPY@7(9Ue%E#GGw%Dkeo0oArraDN8~^}-+uZD? z4IQ@u00sj#7Wyo9b>|)(m^}>d8Ug?{>71v|=jb*=kd3Jkpo$>2MmHo}&1~)h01+|( zKy(}ca7Vqtodj`Vh9+zO`yyT94vAOL`q z|G$F)kY6AK0Pt^`-!!}*Hnlk${@&pw48LQ zND(TFHsQM0aTy{1^nAC#w?t;7Lm7TaTQk@~-!gh^@>;4*#NWi|o7QTV0wO{GVZzJlQ3urnu9S;@6#)W+H53 zQJKVceyt!v@BVU!b%$C_L?Si?a)q|#;jbuYM3z|0*1|=D&h$#^m>&5`>^;~?AUx>6 zNOIU7IM{V+YIc-*-Do6TeE~q3-zypC{wPzh9#?OVi9LADt8o^d4FfU?JQk}Lp>pk4 zuYl+;%uTHij*`i=1c+S6?5mbnQlPU$d)E%z}a+OZGGT9erqM-P6a}J&fS9 z#YE{VJgRaV`~2XmL+iU#QLPa=_16G0Pt)fj(IK>ul*44nK*m-rh6D$1FTCcheLksH z1Uq=#(%Kq8u)dn(>FFsk7<5t5uBUw#)bIl_1mS~(04 ztL*zWo8}3-Kl|4F3AVp=}C<^8Q&FT;X)0FqZW8{dprTys~yFO+sJ? zS)+;oyg7`mf<6{&_7%s>zbIL6YW685#8}|%5wou+f52J;eBtn0d54tuLMy7_!K+?0 zxdnZHLX8WS1HJcAd8bz@J;Pmib93`fp-#?Ua&pPBdV{7)^Ai)ju8_!VQNNbFFY`3V z%-?{c&#mn1x%?51u~rLLD^Y9sC8%w*?p}lIFTvJA$JNF72g^`c*7nHY(+~WS$v*l* zp*?!1^0`a-P~Tin7t zc{AULh};kL|0s}oVc|F4+$ZBY3Hl1S=1w$j_R=UT0oQ(n8}IZeX6)nH&!d@{dlN{i zy;ez4^qMp>J&yE$(97D?fG>NhAXV;q765Tp)$dh2{!zDp_%9< z-&6BkL$)~d=CTDXpY%yrLNpOcGEoG3fm8b*=G|5!FG&NVG{6s2g*VhIWANvVo^H)F z+r#$9q#&X~LJP@QKUZT@R_>o_C5g%!Wc{>`gE>PUAB$#Z#~g%UvFkU_j;4V`<)O|h z)H|Q|%&GSzmX{&u^N0wu`KTwb0d0d#2=Ja>t45Wxf}+)Cj2%4EF!zZ>WyivG?@)X5 zsn$HVxr8N9T*~>KP`Pa@SLOxhSFDrzCMO2YzqS zCk&^Pa2_<*^2xVz`YndJvnP^WWr9Ny{*g)|GFeK^StFVXo~T~|BUeHV-8q&Y%q-_E zLr(RMlB=;{DPno=$2(4*h8e66mKW06Cm>(;`T1*z$4@Sh>Xk#bw1JMX*r6PEBls`fCSzux2gW zfByDhdxaUCK)O9N@VAR+#W(25 zG-j!uMLZ!W?OOkDCp=j`5FBRD8cKk_)t&qHR(BAF@S`pj`=9L>|J?sWV3H6EVxJ@O zVwN9x7A5IMIJON>0enZ?W)@d)4c4$taYTgtxZX{njWlG-B%mI2H*k0!zb+VVZ`?3& zxp_59wf1rXLWcgW*_ErM^k__Snv4vH7IVU>!5gh=+%%hZ-{hmkv~~eR1ZmgW>g$O( z7J)BWiAP}^Mn9!@kNYTzd=oj7flY!em6dZZ;wmqQf3~irs01*}(B{u8BM799-V@ z*s7#e-JGC`IWJ}HS6ryrU*OT^)H*{^gb=yS74x)3k4}CqGAyGnycfat1b&{3=`9&G zo2bp7s^nZ}vX#Q8kqpMu(oiNOvAEcw8b-@D=0X8g)pL5d?XREcaovOJn>aavDl03c zL<5svGn!WVTiqDp>vq4hEEV!9HDO1YpQD0jBQg>djw3v(q!DtE0Xf%=$SM2x4jA{^ z#8_(+m8qz7y%)Lh736-cL7_q+Qlyx~I$2D;=5hk=)BaBp4~>b`JfT`so?Q{=3O{Kx z`tMyA>B2o|g(x%F=i?v-;W<|QY{*AMzuU+`e(MfbE?zrLP0itn2{U@RrSDAF385k~ zT2+lZgSDS?5%^d(oRj)zXM!9CtUlnU-+jK~DDA7p-4vgi#ct(EKCY1TAXC2M#x!vq z4wIRUB8`{dVX`VH7^P2Wg?%b_se>UhRv~ApPn=-*5PNA)#Qulj-|AgBM|AJ4XKu~j zymyMuIEshn^*O?TCe{n>E8o=z-TeKxiE!3dv`jnxt}YlIWgKl2KeQuN!Gnt_XnW{X z_m2Hix-k)PT(cxL!a+@(|C_QVV06eLcQ@8s78}%W&ZDdE80xlrF7D;LXyK`~8>+7^ zAfW(U3%UL2?YAT0u6ItPGLQoX4J!1nJ!?)va+v7Nj75#E3Vi<^GV>OgiC(K~g&It* z2Yr;xPg)h8!fxAzb;h2%Qw-LpZbZ)tXK<6!3)2;}@Mqm4(p|sG`*Pt`QNkdtT-KI8 z5H*3K{ENS0AKx(bl|LY%ke?OjZ{;gPTLiKriD_tcgtE0>I1rnE@?qrmj43O8G@c?w zh;Ez=*qhR#mzrJo;$))5NEp(b3EN`Y3!)v~U=-hF7r);DI%M6MKCTGfS+0!ZhJ5nV zeQa*yUKvhcK#j^4NT`dX31m{6o0<9Ngw}b>X_y zloto3@Expt#qE1V`0+c@PiJ_>RhTM)S#(4C1m`l7{WnS1Hl&@;6g|z8mIeL%x)i=A zczWK$>-so&M7^GMX&{v6Y?>W5JJggjq$R}q=4o(hHjxe1zCRy&;kc=8di9T$a!HdN z=8oWJ*bY^ufnGQrPrb;=>Q%>$JwyEis&j1|`pAx4bKsmAJ#*uL&C1xNPvwr5$AniU zM|`Vu0)9;;@{SNid`!)pBC1>Y!`>X3^h^vAQ5$oZT}2V;oB8tegJ^^n5fpH~`=2i; z;qpajq-e<>ccF=k^ErXvzEInqOYMai(jFR-4bEUS9RvBsYo8PR6N*8m{a;`iGI0c_ z3yr5@wUmjqN#?9)nM%zmZd=p%f>8MCX~rW1|MW@f^!T`V3aX6jSA2a_K)T`_C#{TJ{u}te3&1k7$6|DDmK0PU*DRgb(^`iU4eqc$| z<*qn#?_09iZ~qB!5)pJlIas0Hy1GlTnh`JJJ%it_PGqE3YN_>;v?6DjC}AOXU+2r* z>rDTvSd@VOl`8&~X#Urgs}o2GLx;Ym6Js7-4ZIR;VjJw{9PF;+8t6_3fSQV`wxWur zqMG`BRdpQ=4SH8lQPELRp%!(>{~y8&KR2&u;r~A&y*n(2P5_vjSl+BMdK&v5sYTPn literal 10708 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 diff --git a/resources/android/splash/drawable-port-mdpi-screen.png b/resources/android/splash/drawable-port-mdpi-screen.png index bcd6c707fb2027ee43f05477c1fe8812e979a37a..ac8009538039cd7c1cbe1987a603c13e188f07e7 100644 GIT binary patch literal 8612 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 KDtY+FtN#LVds>nJ literal 17489 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 diff --git a/resources/android/splash/drawable-port-xhdpi-screen.png b/resources/android/splash/drawable-port-xhdpi-screen.png index 93a5badd24f895682f13ed15721949e069aa2c7e..3defde5164ec075e936267e3a1fca70a14ef348c 100644 GIT binary patch literal 25291 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 z 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 IySNMg0ng}{0RR91 literal 56768 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�*$GM_&Nw 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 SMT-UiJoYwct(z>plK%tEs%UQj diff --git a/resources/android/splash/drawable-port-xxhdpi-screen.png b/resources/android/splash/drawable-port-xxhdpi-screen.png index 728d9f4c12c4c4f357b91ffbaed015c387d3343f..00c8a805534a8a84ba0a926c0a9cfe1ebf8fffae 100644 GIT binary patch literal 32738 zcmeFY_g|9x|37X^JFiMlC(DMTa%JX7a}Q3#K@LisxpG$yTxfzy9m`Hyn&1c*m8hX6 zsiirP%*@>7!hzs6aG)ZhAn?6NaM&Ak+3vEKSXKIg9iM%``K~Ajt1Dua zy|N78Zhrd`P44d(XP=r)KG;qK;S?XXO{{d+)I{~M2o|0cI548g z{Vwv%J;0X-NteX{BfL7g_cm~L>%Wu#Z1A5S{I?eViwFP3#Q*k%|F*;bQiA`|qW@CE z|I*|CAi{sh=>G*|^cwkA3P7(f2#ZRbUxmbTXlX9jH;HoUwM4v`*rwAU=Pm0ifM4G4 z{MschHdb7Td1FoD^lpH7K7^ZyH%{Vi$m2|O#VjmpL404#+5EUpzWiCZY3Y0l)p~~rY zOwm(iEhyxD_6!v|mz|>L`9=mfaHW<;QtfrjvhMZ#!H}Jf+-sP>|FhWN>PIcG&xqG~ z!I(%LqZeMIZ!m8v(JNmCsIC$Jl&4u8Uvu%s@5S=p49LP_*Z<6t|2zc-lCWE4VORW} zlr7-5cNw-#E-2hS4)@eEBRh%2yn}x(%B`}+KBR`e0G|5JzFh#Z@WA=c2fO~CIC;GC z+Fa~G@eK+mLFh$+cUIfplzzfn6%#YuyZ83wd%c78sjVy8)Rj|_kG%l?<@Rm2Q=3#x zXX&;b$|{S`8uznczC50^H7%hJoaG-p=eNgPj+1=Xj zFHpTgR=JHU&D;gEJQpiLD+?*OV_CYPr0M-j!FKY2! zU0{2f+$aed8?!>iCX#Utl~5JgMh@5+%#G89F)N>D(g2I;4Gatb6L;N{aza4?xFFaq8~gI*C&(RnA-SxKZb8Vz^}7Cu*4|Z&b&d;P?-}VVVBrQs@TCLO7rX32rX8R0X?6X zupC@JpBo%GveQ&6YR2VFMIo7+?Z|q~RORv#F{?59V zD6(+vSx~n^DPZc)zJNRD_^f)$BDlak7b_bzT|6Qzn%A?4v$?^Q9mDV32UuKPef{jP zIuo+t(CR|Y*;P&F>;MGG3wZyw=9~;_O(v>St@QZ%L9x$*zaBi~Kcc-kr=zR;f0xVg zjB(Q>ZS+&42kb`cqk_=>At4tq7>ruV^s9Ze*HdeN8B`aC-*rKRvygcX5tRT8eS^1K zZ1ut3+jj^);S;fE%G+LZ0e|Y+Tpq_L9XWD@%a}`ed%#KV?bO8;8p%Y)>%I?-H(WPA zovKv`QkjwwdmwRE>}uB%>|ZwU0PHy}lo4)cRyC^asLO0+=7`OG`?seOi-umimMtUTY~X-MAz#Z!t0X3%ib|g{LB|Q{Q~=EihrX zX(e7%5N);p--v#D1+a#{wYTeDyjXSN3hRgVY;Sk>>{Cd*@Bcl`4!aNH`(0N|OsYWa zpw(NSRk`G^zn2$|H(0v9mX0!|cp*argMxI8jIcxHE`2CbOW^?j@8qdEU|HG05YR+k zDatsQQmHq4LhQj4JF#TN?r_&t?Jcj^3HbKv6HtCSYG=bL$zg*2BK^N#t)EDhQ_())^3#aV$L{7MQMinGd(Z zNF@HrO8bdL&iW8BQ4fL~8~AOKq=Y}Ec37dy4-2(&B#;8>R3W8b$AyNeK&-@NnTU+;? z-`)Bcf<&_VwD+P`lN7o&>ZoY?)^qxIKY8}c!`$6c>UTM-7J1i4Ru_@N5YnnHIIZbN zHDr6qNmGg=yNIvc6pkvEtCGuv388uQpm#A2K#s`IKYpL(`R!tQyn?KxY zi4S!9E0xIIM&7B%b#1gzq2(6z1+#tG$zlhe5Lid!RaI4`x+WWmfc+PM_3xa>$VpTq zZw8aIgUs1jHi;q?EWa8*XOw#WZYoku0s(j6V9G%ENoOtGR02kKJYtV$a`|VIC`PvG z;jOP4VB1QB(jW}OlfYfFEs0f*YQ)r=5z0qf(w`|$9PQXD^Y?|P91TWyIH{?qvfPic ziO|{iQgFVPi<@H@+<`S(b0bW*5i>eL;17WH@}%cpQJs}%)G-};YAO^Zb?4%j$8A!2 z1!T~ZkBBp-WeX@V`5h)vc#pPOTQ`?QjGx=7wU;v9%W}FXztbH8;`C||>ga`t#aPU{ zIy?>T!W=E=SgQ07gY@ITW%VV#!&qx$zaEk5aLG$oOogdRTUAhrE9yFs4&hxBLaKdz zS)F6=UHpt(CX;tno|E~~>XF4PG;x46n{(t`ifIUFHG6Zg(Lg^yw@#J80w-VA1b0^9 z^Fywzy0V=rMqX5yX|(+;Ej48Plc{Q|V>F+sLS5zxjGisA8pd=ni1AoxC@+TjoPM1& zQ#(r=cVN}4WAkW@RHhd@YRrx!89-Vtt=l8c4P6rmBkHoH>!) zO?)SDzGf=I1x$)UGUZM|=~2k)P1 z1ID4kt&YoyGR*FY)JLU{ATw>v^a>DsxsGA?JY<_0U@4N`Xp{?+p#er!ZkLtM2ajC! zh{4z!w2h4U4}m*6IcmcNxxTISz+lvY!IZj^5Uj&uU$nJ%@79)8ImVjFQ~Di6Xo8j4 z1t^Z^xI*I6wvQI1XHGV{IynJ5>G$q#+eCgH%4EDYv@2aOl3skFizWAuj6|anr_z%E zBbg5M1g1Y%WL$$ozu>Gp3PY`WLO;|;0z}d#|l=%cXkiJ{2ednPbj#vKn zY-T%-7N7hVOD+8G6oe7+(H^Sm7A>CL6URc*^Q2H)t)tZeHb6ihU_{T8S=Ra~X0rXVG3T^F%M0-_n)Fo3l1zR0BTVc;=YnPhjf~C zkU|)jomKmW&Qir2P7&1l674&!0I!ZvJtP&Pjc5PqOxp}SK7w#53pU3x$E1pz*{L1f zX5dj6qN%G&X-;6;zTmyOm ze}WfCbK>J1W2u?UvhVJo37K4GeX`An+w-H0g4bT+a)S3K8Ci(t|*8=+?3q%>FL zmASsNP-=KjFv-aF(RMY(8GuP^^NubkQ$e0NmdeSRzopKzE4m&OuYIuAbz^%h{ptiV6e zsxviFZNf!lzj?CG?EW&1z7tsn6L9@~dmfU8-%!-$`Pt7%^B|T0QG}o$qbtTxF-)Ef zG=V=uU~R=$FE)bB@-jJ-2v#7O`}B$MOV9Uzg(3Y!jIXI1JTe7?D_qaevfh3hRO}i% zc%@#mZc)y4bMI}}Z^yK@KHMEBiJ#n~@LdA5)$%(D2GSq)6wyv$#^=X`u33QrY0YXq zmAqd2EY<|Bu?TL9U>dyr^?yM!6+$bqOHrqT(g^zG>s*P#s|ClG@$ zbwgTqMtK*muMutHctzqw(%UPE+8T%nUZqLD=o{Z5VR52ka}gb>&#=F=E73Ju3emRk z#MRzHJm3<>F`#gFFehU{EQc;D#74O6VVn=%1I2ZQ9r zX>B0(`%dN5&Om*_H#A2EAN4a2>b1j^4yFVW!~Az`T_(XeCGP#?X%^I*A4{n7%=7QN zeg6BK^G_XN?XQ%<(46>a7%2?mRMBP9p$vA~97MKi()*GP-GoBr3 z!Fd)WV@%IQg%9g)9+r2LU-xm)S?ShsQ|Tq_LDa?l(N8|L$N#)e=XjnP5KW70;X{oW z21~`y4{TJmnjk@zf2S%*zpc#aNo{OMgksmXyaE0fT#0a#uB;oY z;x|!JHF^7z^hPPhD(Qj@DXi^bVSghVi<`eejMc0x{Ygcou8WLO-14zL%w+J#YN zL}3m-|GEn0Qr5>LudvkfPYXKm7(6Pdj3}@#J7tdURTe>vA&E}xEeG!HZV)PiS*C>- zjfyf60}HwI-57NVAAD!afpETBQRG?dOY8X+YfdpLhuI)i9M$1I5H~F)m#>3(6`5BK z%o%b(v>-x20Rzv!wc z#M+2(qVq#J!gHhWiC5ju2JOvwTw5Ei@o3M-nz{ZB&}z>h5K9Xd1d%CO>XMNUOb#BT z*D*#Ny@iX8-rF!jop;tVIQpqm5{sbQa9CH0F_~*LrG{SVoJY_TLd*J^G&p(+*4xkO zN~5M~B(BbI#P>+qiX{j9>QpCo<3!uIg?<~Y9$@!%u5itGb8g<{L89xpXldsC%4N-5 z$$SNqAS+GNdK@E9bY`v*23hMA6|Qd_7~oIBN*boq(H&2f)N^6xgY#GWU86i2iC|F? z2+OS1D(3&=4T%{1Y2y-c$~mNT6E7lwu5&mbd*1l5^B=p4F9#&xElM?)7rnAc3{xk6;M` zfvAA)twEW$r94e?32W6Ezi)$35Y!Q1iKzZ}d6sXl-VAK5W>nfU8GxgRCyV%@JtNK2jD4eZEd@yip}$* zQ~W6&89BHHRZ#RdGi-rPjoi;PVksAeGM-zLDQysH<-Kr=jl6?Um;ZhnHPxGfhZYNm zarnA9UbL5xuLdzfZXB&^dpN6r(%`&9;hv={`<3TF9*o0I41t3J`Uwu696EF&E}%h6 zSdh8k)$~4h)nQ+b#nra*U~(qSik=Z7=zrC68++;P68Dn?g*TFmrxh}BC|yp8dcUAW z^y7kNE&lcGKW$TVhMc^uS&A^56;k!66k@~|ZrxRa!((hKuL}yub}X~;{se)@`eNdP z)x1ALIcJYK?tm-vjqw}1(~G<>U;Na zZ2*@8SQ(G_wKgLzHL3>5T>((=Hi+Gy(|k#_@V+m=F+sBf=I7`8Sq51hqobqSe^Xgp z?*BSkK~f4@DZWIIH-b@IKb3q+viwhvV;zpf@B6Gc>+A(sk85eC2iZC!QKwm@9!T)G z9snJAd~Mp<=C&ayDl(MWgR^B3>6t6)qDymFnP-*L`u7W&4a8#ZYwzo|sL&rrT(o9Z z8_7DiFw`hF1d97Dx{!^}=KH`IZJ%`Fx|Sk{QVV~B(tww@kJQlK>9 zA9;bJ!Rn$m!tA)pBIUVyi0hY|;&xlhC`J+kH602@L3OXiyJfje$ac<-4aO##lB9O7 z80YNV>X&o3Y`?Fa>i6^ei*%uVS(oS>V-vmhF)8@h>K5q-Rn@p-mN}Sbo=roB*>EL9 zr{}gIGXFdTXb&H3{nm6UM#;T4q=Qcv37eJzw7MeN-it1dGnj-Ay-L z4L5kZ#Ubw4@|R~E=}6k0NABcwqcP#xhpn8rMbs_9@RI+1zOEo0?3Z9!;-CW*T-&g z%D~sL!8(*FDVgrJjYBk3J)`)zM=CoG4klNERhqD#2P&!!B z$3I?l>AWx9nXkRHYb%_wCfimo0{|Le zL(Rk4C(L*sI`+kV{%WDZU_D3TxmIk6XbNW|3RXC^%#oBm3?yoS03!?Vj#wRNK9kUPVJmB@lBqfq4220p5DNVC z4(jdw(^n6*wEFb9c;*U0LXUoO4Hni!-P4g|URUK`ffFtynh78x*5$dFy)6NM{ttl@ z(g~V^=l&Oxyjm1rO?z<7?$0Zy9xOvBAxn zU`I+y%24K{g)&H74FXK`Hw z6(qHEb#>KJ&Q7fKcRL!&?p}SrP=`4SGhr1rt#>1J2DH+sq4MQ{Lqoh=vbAUt1$rxM z{^&YG`vo=L38BDyjIUe!{s$RZ;Ae1Ru~;HF7C(1}j--B?>)jBpiNJxdQ;*V;;@&;KeddEA!%SGXV7#AQrDxKfB%T@4pzLq? zY#IeD*;`DpCaMgXDcunbavM@xuRTyZcQk1=Pqrg3dl1|i_>v`q0s-Lz646~H6=uGw z{UW5%M1Z;L7UDSqQ_m8uCB)HGLvV`r4>Z6F!S27W5#E)-`zMV}X zNTzNUX^4}awT_QwY|)-ytJ&`=Dk2YbZx?tN@icxUKaUZZfr+^2VU==-eHCxRf9S5- zHx;Oig-)I7Xq*kxvrYvdI?Fr(kKFhU%Foc^n@vn{5btcs zK!F#b>^!h#f_2a&6sDWF+w9`Si~S37S!eC~SSwx`7-z@0_I>W`C1|WHb(Md+cI3n; zbszy(cfCO!6Y7E&4UxfI2^zZOjYzCr*EGBSJSko1%xpAAt?ur4eXhvIC`%oUbsylb zj_Ym~p$evdNsPL_-`Yw!%h`O#NZ4BL=zb^RgM7=n8OA;;Dn4Hq*c_KYDP||zp(LrvQ9cc|t1yicsdOX3e_yHEwZG4h?w za?i5Ab@B&t5~21^LynbCDE;pZDlcHF$Mdbres27tE_{$keKH|v+W@U08O=s7_RQO$;`bX+AeSPpHWhY`>K^t3hq3azc(+_N%Bv!X~PG9yOYC;4SRhQz~ z&kQs}j5ubgA=>?uz2p6&X_UP&NeOd8pnoN)&ljb_=utib@GfgR(x-ZDs)QBNi}s=a z#EybV3$(%UuGFLa)I7@zCkzsK_7~XbWc(xrCFQY~R{VR4 zfIPjgB%a!pM;qqL+p@{_8PVUMva!A?GxoOIBMT+8^(Y2vMnKRMd3W@}q-tx_BR}IF z0)9LsvKMWXmasE(w8m^??e+-^{M=yL!fayb*rj@PLapk=(~|ZuwJ+9A%11DSN+ElrFV5aL9VJXE zr%EEfHgm9!bcBnJ`NjSCBF);V7e5&OVJZyyfz0u;BT!rUiI52=7cfkPGw9hdIPcF} z!53ct=6ulkwLDz0>y=Nbd#R|6ZWA{Qh2}?YCb7(j7~z7*J(8toquc-L9Ht?syH_b# z9<%PzWhfDiJ8_n+7?W^f()Y?Xl^kib1eXl8E%f#7UCcMOkF8A<<; z&%8wLj45u|;5rlv@BkfQ7CskaxDiL`b;R-ez$8UA=jY~1M+1(;^8+FWx7GUME~n@g z7OsD)!RT3)9^bfKQkfSy4mes`Ba|NJ1Yq3)-Y`TJS|@qZ?VBb2yMw(-BN4)iLSLr-Qo0X{73!%PfCV@e zhAh7!Gd%%ZMr<|^bP37+%o6{Qp?=8@?^^MqtIcZ}g9go@6W&H&7VrF-xPV@N%ChD@ z7M(xAlKjF6KU^WfTk~a!q-eNxycIrPfWvdK2cQXSb>i%GsrMOGmAS}`P4xl(j*0GO zC;b-hjYPJ_|G)T3fJ&2H-ME?3uKUO1kt8pmq8$0VI6Xu}IC=4Tlpw)Ht5WVZ%Z61$ z##Yn%4@!7;`dt9#6q0fThwDvEG?`PB|F{a{x=iIBw~6}}r`BhvHB{vNQuu_Pjo`cF zoyjRWs5VhGc#53KTVa(LPJQ4z?>u=p+n`knkRB>C7@H&32qe0cG$xOdnu0HWU_T!*hw(9-;^@0oeZb9Y39FZ3ix9rE@UWGh65))Sp-o zI?CUtMGq)CCU6pfa38Om88i4?#v<1#%%vc2eHv%C5TOOB5^nKD!WGw)r$7vW+eY#f z2jbS%p$Xh%M{fbhPSJ+7^3&U!bNkLO4$B6zUeaK)y+|FE-94crs;;<=3^la3h z@taWMTz1d0a@!* z+}8TJb~Hez&ZO;+K6~y*QPCe{IO?X>fMChpjgrJ-l*Z4tF`73~s*CdUig@F)PDf9J zDHOBPvCg}m3_E_%Xr)v%Cz{xce-j6?ayLh!i*WfX!NA-o@Omz9$rYkL-m##y0Ll%v z$g9{e=4wNqfbfj8CQ$2*57jZ5a4fVEG{<0=>!K{g;(STSCM8_w;J$GdShNm0b>Uy# z&Y9!lNoH#HsDN*YvwIlkT-ChQ#<#Z3LG{JY{f7z%j=%VSl-gswm=eI(f2-AX&WU5a|NvUAR&h=q{PiCDqsN(359c8IuKN# zN>ZAeq3gW;plR`kbkB{hqd|Cf(r+FnqUXod8#YOOy!Cp_PjFcxuykw}Boa;3((cY{ zrp-Q(U=K4V2nLB!AQ5$M9n&PIw0T>xV`TOYvh&IFJ*wtfez2|b%=E@ASp8$s3tH)b%RNK*F{O)SUU$?&{#fr9-l!O z4c!5)YGh@1VPb~xm0y*|hMvbm01+Q+CjUVK*PuBo6OFohdRb28&U0uR%?=aVT3XYh zC#&=KmwZ6LLseq8h=-ndc9-cYbft3S=KOHX`x>!wnaAX7$gzjHuA@8ywg?c|j# zJLSeGnzEXLAh%`r&7z9^Dx6yPfu@Ud=AsvlE=>m5M&!mryg^ols5#nOKz9f+y!*p& zReMiIJkcY|Hm#UnEi#z%L;2izE$4Yt8Egz^mecbPl*-4eW|t1WMsDI8cmlA|^v``3 z*lzn`L#`b|_yc8I6{&5t*|O=i!rD%$zUyza@+jJy?G04@z8vQ6l|no$UuJl((Yonk zo4o9j*Ke8^RvZlyK8+IL(T}qOE!Nhe3k3?|hcpCFK+j@O0j?Bqoh?^_p0U10u6}!S z*;=wCDYq-R3os!$F~&;RvoCfwttN2&U1<3_ zN8?ES8trLFKGT2PBO`I>(T_KGVk*w1AetLK-FJEA)AY9NtW&|DV04gFU*T4xQkoxm zz1MK&nMd?bi@1JFVP;LQvHHx+Oi!OAGQMlQdBI@6P211*lKAdmU?61 zutw~*{>LvPGaYrcY>}2TI6gr2vRZ8lFyL%1I`l1pt0L#T#t#hvG(EhlG*<&_ss9Y- z+G3_Lp|C@eZZ8;lM1L}17>+B|Tv*`3y>^0u3ObrsD|PVLxs#XYngFezKU0Hl4HwAt z$L$=b=DxA-!SM}Hikx|$bH^i!S|W1rd^9S@H&XlBC)vw4G)%xw0P1-8o8e>#a3*L^ z`aMLGm2;RM0VXJQ%!Ap*^($^-Vdlp}!zX0W%M^pu$mfW2%iADaFVySfr6`>ztqqM9 z4O)p-^D&{<69nFp#~vB~g%mNjx5tKt6l}`~O69ufda}juim&-xkV9dFu)puMMy}VS zZ_ij}-+gx;OJwQLhi8!EUa~wrmHjY;FyS?(3CupC|Ah0S2YChF*krI64x%xh9 zPS%XX>uOBKJ`&9%rKTCwmOP;2p~jgC?kzH0Zjx>{*XNW#RQ!run}WkVbn`F-xsJ}P z1L>vK@R{Nc62+i=E$zY!C9DlVFkbJh(L!vQ&2afUN#CAlsSm_W0W7W-(KZk!H|4As z;IMohKG8l9M?J7vIVdUg@aAXWV<9?KG1pQJkM{iFuK$Y0@$=Nu%wslMUWFk3={f?j zS*RE33#5d<9!flngV#*-uZ%l*a|yF}g)Xl{5*E5+ubQ``k|?rHFHcsWNt;c;Dziy~ zjs}(I-#oFGVEe3;KaI+(e@C}p+3x%$bIe^*yftGHU``YGIhN5{onQXB-)?@fptSj7 z$No}n)5%5sL&po+O?8KkYC#eNIMtbQsmXltMfIg-Ed)3kQBv3jiJi zqrHd*t5@ovxB;XmYt+aku)(FoB@4SO zgDuaUIj*(%ES4E<0#|7yRj8X_@3*Ear3-~5uY1Q4m~N?bAuX4prJs-SoltauopN@z zI{YBd2RBE6oP1Vm{&`sBqt*8HS_-r6bH` zD|+NutFm!Tn+C-YTeTGbK$STQP{I1ooC}^r*U?P(g{nRv-wTF%3wnPhZ&l-%C4Km) zj&zlzee3hBgK6)8qHyOcs%5b~54`XPC}VmHBY6cj{c0^hum)&=4F*J?rBpf5mIMF3 z&p&wbdzdh?nqSgVwpg@(JBhnk1w#8yT$G5|H+L4C72OqGxT?rVSWrMC&PxoRzNHjU zz-&k_*=aT?b-hTCIezP_>}}T)Knnn+zyS_Fdv<#fyR25mkXCb$Og7*yo*f_o@5oh= ze?>*)(yWKQyDp|CEw{4>n3l)w%bmYJMZ>IKtd-r|pq{Q9$h^R}?I(k1rsw2T%;c`< zc5k2Ax7EVTZz~(>hzL>@)E{=T7dN|H@KH@a-()>f!`@g+k@WGHMbt_Sw1@tLeX%ao zK4F1^>AhxI`wq+lJLBW~A;qrszE9O3_3+(+3h(SE)%38!SWmrx>KWc(o%h9f?beh? z5~E?31~V`#RAd}Ib)lq|`7FASH)FHo4qx@kv@nM7JN(-SJ;CX3GTu~TdR>`~%~(X& z@_{ye?=VV9GdH;;#OiQKGKp;E`Eosi_`PM(PWIB-d{MXbLbLDtw<8(Sh+}#$CN{QP z-oz{3kOrev+_>L=qbNy4I%AT1Ij$GukiVMQBA6EQB3EKot}!)SN}6YKA6M@I+P0Dd z?nOrGfCu(8De;i#jm@%aOQe@hY$s*LkVPQB^>#d+IGTv{BH}8H&&-YaNvMNji{Gw5m z;vc5jW~5~k(dkw+{=fM|?@G5pg6Z-_wO#}`%JZ4h=R?VtS@n8DC4BLJn6+Jbp(&Pb zp}#m#^L1slG^5Q)ZZkY3x^PPiy>+C znJt{@ZsLXq)j*c@@p`mp=}XrF-^jTyQfbyzyv!EapNIElH{hNr6jZp@{kmY~-*&O% z>(8PI@~2AlJy!AyW-m-7$^;$hc)8NPEUc65W#syqaeFVi<^2}h`(=fhDkJ@Tx3XI5 zU>;F^Db&Qn&WNDzdGQ~?H5ob71ms&9c;QQqR^|-49HXPwhjMd}J1mNCMbt$-<|xqI7srJ9sx?kEtk&`1x<BBOI5J#-;Psl|Ac?l3OV`zoZ#)_X{ zl9o?0gB|h(8}r*`7DzXRS>p7Ds_GF{6;6ocR+Pse0akyhC-K4DzlrT)U4XW;Yw(Z( z^+j-Hy-FROcF@WrMI*zq+}?O5b>2Dc{S~9Cz#rxMxkI^74yFSRj`e-C05YVnb(F|5 z?|mq^-U`(MFfbGU^3;Ws(XYh$?<-A}=Zqix-i*eldlsc z9wvQ0>-xU?;FE)>l@Z? zjGkC7>)@a797L8tVcYgcK3E-{oezZO$J|VrQOMXXBqzPD#8lhHeS;2==liUp%;6JF z63E(OT9r{7FHm`%M{9(#M*Ej8nv{tbm)S-zxf&tJXzgSBZe0R3n{o(*72fo(#JpHz zK&_XJplnK8$qks+E*1_#-7Ra12X2so^kfEe6l0XBzIsd*hs!M2$&K51GWKPmmKFnb zU|mn~v(&xviVmq-$p8mgFee%%r_>}*-l7y>Lv}VEf?P)JHmTTqY&au7ocY>BYw{IP zOgwR-a-%6~p_dxodI(Uq_YJvtn~`4(uGd}58hIm|0J~T9X#CxUy8+GCF#x>?JJ~Ig z`?9xl*`LYb(*<)ILP~hT zgR8~$mWzZ&Ow}IGiH6Zbrv=Ld7B2?9ApeEETT%rekY1axnsn>viAWU{mGuc$qQP%@ z^iL}VGv2!wh8Kn!YxVdMX&3O$fB{pE$iw&d25Kv?Uk;%4+EvH(RVVgL)J6X}TgLET zkW1}cuEdjd8PDFf6Pc=*_7c;(?{l}#Y=s^rtVVgn&1p%?Xo@W;k(DajKTZ9_%*WP zMj)~D8BKJeR$C_&{jq%+t|`%e`mMgDA(@1p1L^k5->tc}mAsCx zDbkB+^hFQJr*CW>;G0=e|z4uTdoUr=7MB00%7HF2>HP3Vo)u>K9{=c zzGTPU*wgXKrqsQ}HHvwsx73I*kAjZN$YaMYevxm!{K7rfQm5JXXT7XaYtF5D&9<%1 zpBl4{m)xxb5d1HG1C2WUM%C~v+x!={mFCuuIc8G7ZYX@d)8`j>Py5QO*psg;*7oAP zxcKMmO`Y~kGeCU%iGRA;<@0Mmd#v*TzBs(W7XYmoUc?*|pey7vE>p36sqp8%`t73; zF2H62ztbCZUlS8->F%wCM)bY$qBGX&R>!L&LHWR-D24`IT_!sL&&{rZTA7;GueQ-$o z`}0@HCQBO{5;k{b%hCff9v2SYEIa1uSJb=!lsT&cA;FeGTl!7{{E7t{`91}|Qd~F| zGYQ!zdklCu%jBur@#S7o{e>=|+sUul<#_h&uo*KBF12{vQtrd1TX)HE@g+cauW+yE zq_AmZdS7Pt8y`IL)V&6O%TIp~9)`V-bu-IB+*^EYethyYfZ|Tvs*emnce6x|e(h;X zqq@^^_hoBSdjFMK)dC1%1j~zj)o1o<=)l2p`JEE=26Z3^9XqwMZDI<@ne_Eu&KMc! zt?xOP+&YDko~YV$zeHdbm$4Bfqd`@!c>Z>f{~R)xAQh=oG)#5s!ya9ZcptQ~q5&qJoQeRAm zUAuhl6N2yAQ7D%b*B~)=+Chn-I#C3zpuS)I)yV-@o$c}ZEYUCrEyxVeX*8*i4UQb- z$qp_q|Eqtl^{G?O4-vw(Qt{rUcMFzWk1p^Km^q3EEjv8Q{u6K@W8v0J)Y#q9fSGU4 z0h#)r4@SqCMS1^QSvrTfFK&j7a)-kBVUfcY65IabdcAV7#kBf}M+Y>AzzrSDnFR$k zXQF~nUtDfv9xWF!ULsvinY(dG*1xN#V`JFALN_<$cR`@ce~9Pb~r(G}MatI~Ptyd?bu20Ajyu4b zRE(ByO4N;r!#9|{<>-45bk<$O9jRHPRJ^w`raUh=WNWpI(=j_Xk64ud#n(L^>AifN zwAMKrp=J8v;f!^zgM(6!d{;o^2DYO>l(`4yb`HIPmM!RIi)=cf3Ii8*Vy->@>ib@X zhfh9!=MP}h{!JxITNG~KRp)>$JGQJ0Xv0G;AF@pyavEr@5mpRxmL=Ln zmO9mEfknhb?Iuk9Oqli4U;X<_U@|PcLzMKZ>V0$}~z+KT~CmPM$RCnm>Ek3TG zZzf?}C4o3QKuvJYLLRgqHJg8^n{ z!^+KVVb$Pm(a}@#Inl#Pa4m_#e-;D77M3Omm4ey*g{;>Fwh65=4lt7M&o5?0_nGJ0 zs?x7l`9{93Hg_%o3Zsud=3B0w1X@#o4gqGe))L&_rreEG+rVt?=$P*1`Bm=Szu>UFeQv4+ zRgMNIQ%)LEoYE4`nN?gmaObh&T$+?srVosz3v?+~c#(_&qTxb|vljINdq^Np-`Zaa=mGSZ$|9HWEgtQDpnm`ni z39+=s4a&G6YwEc|@VuVFCW(9%pkTHJ94gF6*#CvUY6;W6qBLG<2j{$RnYLEbdi8wp ztsq1$~_MgQlIr#8LIodIRXTGEtI@%S0Ej#>~PT-S1d zESrBibc}11f1XhG_zX{x{}=PM#_zNzSsj%A{5jBj6K4-Jof;SAD|AeiAFpsV9=3}c z*2QF`z0d;a-7b0-V&GlUR&j}InUo3UcQ*({V*vMU$#tWUTp_j;@ld-Z@7SOmNd-eI=Tpn{vnUp&Z$bI z^KA@>opYsZlXF$Lrn(E>kV62YGKZ4Sss#;*I!&N3dQA8gry)p+eHjd;3^XVN>kONH zG1iso*<;Rk0~=v8Y-yF{_(mO0fw#3toz-<_d7oxypccb-&^!6>tM0D*PG%E)v{rw6 zWIWJs_+kGs?#+Bb#jK60>d=JIYG^|Bj{{BY+zlZkR%eq33QHbIi?{e?Oi0}T3EBw; zsEb%vqc5*KRpAD6Zhfbgp1W)8ooKK(4(PNp2MJCI^$%bkTHOfqQ-{)pPaSiFZpMA0 z(MuXf6hl6olpLSXEfA_Es$-k=PPps6i98i@O0UX%P7!rm6p(xNch?i3-oDNpedhm( zciJ&vkZK(-@M&5~$d+9@cDX1vuk335WQKtXG`#S+hArj+?IT=!D^ zTc)aD6rjF=AwW#uF6@>)`J3=)hqs46QrkXwC9y5=g^DN!h z9e2=K;EClmZ~i z>-%g)Z`+kjo?QLc>Sh@DTgrwOe?nTdFlYUrpl;maLlF12(@KLapy~m+Sgmp3gI%=lR_C`+mLe2j-~V zwWlxdYEnoIfzUUJ#Tif*s=7ZtnUSoH&bE#ssS?;I_ifE%I~Lxj8Me{)wMa)j>zurr zx9v>0%B!zg_L05DU1}Q&5y(dxJE!1rGga9RL1naG7Y?b~R~m|i;8y>H{7Zf&uctSZ zRAOjFdJYia5|D#ALHlhQ{8~<#jM~Tb*(21kktwSgJOi?2hcQTc88R~IZuhD`6y(0B z+Jfxz5mVu(6cQK2H-GBjKmIRJP?G2l%od3zw&t?~#AugjgwOXLMcPv4dZ@*-Dn($> zRu>JH?VG{oHG6h6Pd^mvOcMmaKsiI+H}FZ^F*>ybE$5M81VJCpGLpu5dl!1R*D&^! z$&JN3Zt4A{H?Ln{aas(i&f*hMwH7K99=mO2hUYZkFB9}V&+8Q1z+)=-`w9=lzh7D% z_F5Zu?yQ^-X>sagAzSQvm|I*~+)Vgd(&-?J!7WT^Hx}D(D_krJfBQ4m=JdpF3`9dz zt+<~6wAPHeQUAU3ktjjQMlQhK*=75Bv#ZqoORHpPds7dxLp0!=ld$aGP=}u7UsE0& zA~CY=D!ACP%~sQQEb%6@K=CcQVRoo&-@qaN?zekaNDBZb%`C@pm1XY9bkL5G{hWuq zbEmr`A%YTNQ`v+)>%95CocB#plL}zM-X=Fp`tr4z-rr}DOUL23AoQpg=$5f;Rogu& zlW4##ribp6-$`@VczNyda;adRF(_OZCAKa!c5ggXPlU7uUWl9j;!?D-hz$EXJzpzn zU{3(4Rq&dbu--4T8r+CJ7;AwRy@pmulIc!qV`b_gr^~Is*7|d56}!D%2s{Bu@qMm@ z|8V~baC7eLX?U^wH|+kkAC#*`%i=dPwTJJl-#SoPb>hz{f>;L!nA*+LEd9d5%O>8; z*xF%_h2#(B@z*~|d);v1e0n$y6Z-(NTmg>ya%W!Cz#!8EUkqRV&z)%f=f5S*{Ucb!*0A#nr>%x;+t(nJjoRdSVAOXg@!*R(Dv1EVc7dgy4a=C9(S18TaI6_ znI$YF;`>ga&eq?U63P7I$KeA?tmSiR_Vg|?{cHhYr9QVi&mOY%FtPGNcG9}iQ(OPy zd>=pd4%zR3(U4@Xi8+N?mqs-MsxmjfTlwyZHnGj?>p%hX@74M8Or-RpW^vg^d+t~a z*i&F3Z@-2kdyZt{K45+6ab5xmkC9zGD#t!R>wGA^aWoASz15-8tW93SOp<~2gV>X2}(08e-Dkzrak;_`4_fPt^m{6TXnL{yC#?QVR_}puHBpaE`Ylc@O>W>XWO}_mEa5#%E_(d|XVMo?3}i{LiBE;6YskNIBZX%p zW+5&4c95h z&h?-P;&djJV-K%@H0UR1$tnBx{9E~T8jw(ed_=;MGoonag`y73U`_zZZqg}JDY@>Z z3+(0WsUpn6dr;cIv)12bExBt2;_AXb?&#B+MjhA0FA(Ed{bknNB7SI|`m0HnqE0a$ zfLCzt7+FVwdxbGPav`f8Y297nTp`IUag;OwIhsoXzR*89j5F=rH1hqcugX0OUe~lT zuNaR+u&i1Mg8Mk98&f&x*WDYeEWZ%h}8137SRt|Y5>+V&e&ol3X5ev(|WFHKq$L(NJ?6*FXber z9~abvlDu21fkP+Y2kgpRzSv(3#0{vFBTvhT`ti&*~`)J;Oh@a^I3ST3^l1S zNeYVRKdwFulQ@~YhIGLD?HR(vwS)bQOV&${B-93y<*2bg^e1fV#U%^(gJWIKQ}DU&Zl@#aZxv*45x4NUfV*?|a@4-`QutIts^cA#6(` zfGpIO$4@$!t==B3_!Pd9*cu}?#M4W#t)oqR+}3KX6(fP2=g`<@N7;nxb$7GMkm@Th zS6E?o{32fvK8^@w^$&xo{W+~{waC{gx+_0BG+%4#!cz_Q@#;5u3Q3_CSel};m>3i2 zB2~BG+~@&NmjA}cyL_|gi33ocH;1-ZlnM{(e7id`mCC4cD_`A|K&fr5N162Ff|)Vk zk$WBa-HYtR!dJvZ-Z)RW7oAn_7tsFOPjuu5VUyMI^{Y&4UX6UHJ)IxvRooYqs84O9 z`hTdhn5A^nqBKy?zXhmp1+Q$n zUU#??MQoibK}>DlMGCp_d`xJ^ zIdFiD+%-nu@sWK4@1;&sT-DrLn3+U_`(R2~gw8t3j2?^|X>*EO|DujLb;HQF-db4C zjF+G)B;CFaovB_@`t9``t`EB4k7lsYsp7i7JIt?`ej_|!%i^p+EMv17i5<#D*z#+D z*@b(ecJ?8}#DEi>Anz9~~`|PAj*^plCu`^HVS|R5=e?>nJEZ zgTp6MCf>GgtjW?mRdV1HA596nDG1r14`$2i0dKgbV z#^i)y;=6RRGwz8K^xh$Zg3}u5kNP0ELn*c=t$uzZb>V95h%u-T9rM4Q{fdA0dE6h%GPg3OYTupJzg)sE^2-yT~ z$jmHXour@TKhx3plQUX6N#JL1ZHodcj+6Gt{n&4!Ck+LtaNR6);XxiY;oYoKA|-Q1 zG*i??TwRnr0OpazaGc8W+iOCn{Qn#pgsdT+&%Y&M`yc;pv zWS@;-1B3Dt-vh2M(o;Pj9$5To9Nugw7*=G6?M$eRarX|N#Vd-C6=(TFbO(me2Y2}- zEWKhft-BlTyTZv1FoXxinB5G5@BWMJbL=m}fxW`R@9XLrS8L(?oES|Awfr@#w+$ND zC|KWU-YW0*M0ckRclSIkY;&#-sR&UFkUd$Pf34;p$|dmjBd(srJ@OYVuWu&*uJF%} z`$tZ>3<0uLU)NCV-rYM{N}RKMHD&lqTX3uSl>25_qsjN1>$7t1$v(z-w!FwE4dMgY z)t;1aMLwp(XcK@)%S&5Vzc-60Wtgj7#7@GQt&8%&8{mX_E&tap^{X>#ENP4X7?v%t zO@9zJnBnmUyk+g9aVq9+YlQ|_^a+JGnXjUL zQvW4J>Yu~!OV2<8rqI5E1zkfv4~~1{x%n-8mp1QsiAlG&2_$>ArNoifge&r&I{%c@ zp?aI*KQ+K?op*MzohN4D@tUbuEsj{e$NJPb@I`IKZ2Rc}pafNZf9*`k%}k7Ju8nm! zi3=Otzg}vHI5l?N#w-FecxmG8UT>m`hCMG(qCJNY(~-}!T^mywV5|%ebDN2euMyW{ z6FYr)%DVk6m+Lx4{5Cvyp6VU|_rhYgf;9NaL&;nlb~$RMM9jHj8p+;b8hn;k&N>01>W;jQb(ly7(*V7MsL z>K;}*fKSApAtScX%?wHTMZ=tzDk6L;oe9>)FA*&`#6i)+HU|J+q}WKWPW~))-<39V zp9J8dV}l7(bfB+QBQY^q)1~BKyc?Q<4Zi_8kJvK;ad~Xeazd4(C+ev=HP+G@3!T!4 z53w}l)4O}lnBNTZ>?f+bia*+eZQEiwnb|sn8jKsX-??fOwYR6HWTjfxWW6(nXtA)n zd#(2gq2pwHjZ$&Y0FjABs7ZPOl=-~Ey$)9B=9c=qSyr?`+@x!4zk`pytVG}rP)pzN)+`2#irDrJ$SbSf)Z6!sd0aqiI(oz7}tOluyl@(0JL?2Zhu0QiMuA1)E;3# z23XbZW?-z#%=&>g%abns~ z435IzJ&sq4?|-aEK8l|xR;)r4EsujJSr*)R{HlIx*`tp>7_)Y#3lI! z$gFwK4X)o&N*c9`_?(OH=xTOVdg?c(9v&z6*UU2vC*>qIy)1qW;Zn5h4ity*%36sh z%hA`4b*cN)-;FxKgDp2~HYDFT;P1s#Q{&GLuj%q9AW*>$;U$i1E6H zf|(p;>I+X*TjQ^)v48$x^x{HW{u(g!5rWc-q|c)Z7|eb-b(MDYr|B1lKU-w;&&B@P zWtqDclvlxaBgV0(hc@?)OIv)>9KKBN{gs>Zo|ggod39|$+kp?@mg{Kz(P1b(U$Abd z32J%i%F&%!k$Oq&2E8A1X71YNtp4}c=l7SrDkv1~I~f`!vtJn?o4x?pr4x;BS3j#1 zcHR#Bklc9WgVMtNvkVFV6MwFC0x&$Wd0rZ5k!FB)KsP&5l%{%RUSmAm=Y0yvIvKpw|JZ_R{1T9Zzh@%y8)(1av-Z&Sn4DSn#u)W9xoTuZkf8<7SvaH@A7(=(MD ziq7q2tLuF-;wZeE1!fSI68otG*@Y*TuO}@Z-=NK{mu>jlov}9N>18U7a zIrd$8tA>4rYrg=Jjr$vaDj%)sNb3gZkEeO1DwpHj86yT4?A>353j zY;>_*0TLxOob#YT?O6Tl&9J?Ak#T3@LI=&g*j5I=&mdIQo;2$V?4#GySH?5 z=i@MOe9GL*ji`oKyhf*wcIUK2e&3d~<_eH=Z~#{2uPibElJBYOY#ZZemdQU@@~&pG zC;7|%V+dQpRUqKJ7}`S0Cq@zUHNI<%4`H#T$+MV3wt=J0h0WQ{nO||OtZGjPu~xM@ ziuW#=ebxvRs+^qQ1mCpmKKqCvF@ zl#>bdo4D?odjh?)A%QcoIx2b6Nod~J!v3B(V2_D{*B|wa^G{PSw2K>w0*QD=4$-># zYN34|$41&CFRj`3L4juYt4boz)F%9}Y*qB2E~47oMvzoo>|_J6dK(Z*sPt&Mwx(23 zS%SG11E|YiOP!35kIBKjf1$l;ex(!hC@uP=eDe$5GIS4r|hA!(38vJy(^S zb}i-J5n3r!F5y&TKkHv(UAN)~{BJ_DMBp}mx>bgDmMyt`zE}DE>PIxru20E`| zzHmv>SZjI79S^x|pWW52SaX2F51# zDD>HN{@&y(k2RA|@4lZ-_P=N`jp4C}yim?m?(1$FXxTKynA;cHJv4&Egs{Zdv&xS2 zAZNcJxhY#d#)zS-y7%LdX#vjmBPB)t@z)3JchgH~<=68_qDzdA5E67MN3dQ?Y+iZ? zb_581Jg4{i0n=DVXgWbZ>|Yh90QjKkcfGJ)6@zf-z>my6&~`8(YN-V67u9CLf0Cm^ z7?xWufjyut5_W8H-cr)(DaPyxBcloX1Ww-21jpeX5`#}?uZ(AvJ^nGI|KYDoqzjzw+?jXe(H!i$kQcbFqUHxF|4IR7fy>6 zew?s4Hl5>zav!8m-JSwtxgMI<4HAT>Sr@>(y?(4qHe295Uo$iy(~eKt{7EqbQhy~v zJ{20g_aCbOI3saHI@V+Kp!-&M>N8)P6c)hFbP+r&+8`bC~)Ddh@FaI#Xf%+ab|*n7ADyZzl-b+0p-D#<+L3ROvS@{c8ar>e51=@<1c~(1Df#k%8cc zl!=k?aeX5*eG`bQF~ri;6nq^sGO{!>5)@&5(qtDJrKqZwwoy$XO-D zFyf_jcI-u=UP`a;W7X&V`TPmrAKtIqtygT<^>|#*$Md?b`~A8e*Xxyf8e z5Qr2OV~2-8L|Y*c=za+(_@u#8_Z|34EYRA~8Um@!ko@7Z9{etH4u8-FQvFPM8vLT} zhrv5SATe4HNIVq+Sp^@(PeC9Nh7ib%Hw0pS0|Jo`yVZ2m0(=4W#T~Q*e}jMivAur@ z`~?fcxSfMQBxQwvL?F4h6o5JeYiE5tYHY6g`~!`H(aV>b0z>~|IUn9836n#tv%7{E z@Q2?}mg?3r^Wmh6KKq+|rEQ-dy|&h?uISz#r8;`sR$e4zuqzn*Z=+r{2I{;IrQfn zjSUL%us=d}BBF+We$3qF4bl3eid+wG{qv(uQM|~FKg(d`3?Z_=*0zyIT?h64^CSA` ze;5DnvHW(1|9Z=RgXq7x0i`fv*F~EK(=3JJfIJDX1~NL6B10VRxLlkp8`J*rU~f*=3m3V zkZMc(3tzv(Cxnu)?KxDgX@!A)T>X2XCTI zCANWmkGBh{PDFOA6n%3HtoGp7XpcJ|;ayb37O0T2R8aiW|J9<7Zgu;t+iD0T6MTdz zJKt~=Y2!k{mBG*&+k~d=gu@?D5o%#ygMiL@q2{zW)YAr|Vu+Bn!DtGNeH3iCfV9zQ z-49mr6tbsGB+bJn1;x1UX(R`}&J_y1p%vyJeAj<6b(BDpg{GxS3YUS0JvK&D^(4Uq zcA5%zY8S5Zi+5cxT%voX6y_Vg%e+2$Hpm9U6t1%*YnzECcf@fF)&x}RZHLYFf~6#Y zT`7kZBInxul&)HnpSSu;K9iQUfp>s?21IPLLZg118hpNZvVgxnFd2sK78>~|sSvAX z5#X=yGP4!#Vm>)%h_>4!d}24l{g0D+XveVzYiS8M6ug6qND}Vc-hM<=Tvc+*ZQklO zTY}l$-bhXF&u9Bx3~s4tQ6-Xq1K`!*9?RKF-!4!I znr@%TFk83SYrMcd7eBPzk5Uw($%2*`+72Q#MEhU2`=s-S}Fh&_fJXYm}YtW9tt*kq>yJRr`;5;m|tFtsY7mkC2}53v%Qji2PddinaPA=-bv@M9S59?vIT00+V29US?pR4=f&F z_hYUBTYN>J54t$2cIVW}-S>+BTx{F_zyQ2BJ5k_QxdRrDzDkjOWK;)Z6iT1LH<)^V zbBE_(WPKIEQ5d&-PkO7IYJFRtbN#9ch2p6|+iNHx>x%^6aa%K66-kLb+e26P{DjM& zeT@$iKfM9ry8(R1l)aFdGV#zZ>QIVP%(N3+Wv4gd9m^061@_x*uT8!(x`s>aNu<(t zWqnSul<5AHkLUu1Zb`jCIq>wQZO52w2x~ZSv%}2Rl|0#7o3!mzz-eIA1rTJ_-w2LC zL(66MZ@A7d@|?PG)$L$a4Y^tzi#(8-`g;^JMRPZdcV-VX$lOVsvk-rfg^%h zpL(rf`Y?hnbhpg+SjG=x`@)+Xg$_fCA$ki4aOMtQNzK}S*rI}KnX80P7yU99ZBO}_ znLeaSB#Ye0tW4G6cD~~|5Dwb-*YWQ?KC;WKHp%wc23e#sc;w10r3l&Vk?r1V5(82> zPT$d`VG7x{SvpoSA8plzMWPSf4Lbj8r5QV;ZnSzGzl8}9~30N7^c6O?Eu1}mL zBg}@KWIxMaUkOu}OUK!7wR0f^f>IqSVr8Rr%A@(|HN?5nhz`n5p=l3M(kvMEvDWA9YXF zs)T_`1Dox_aBTgwf4s8B+FSo!yI--;uf*TfaV#XwC0s;{oxP}004zGwyAm4hohYs5 z)Z`v@<-UUa_ge|oAC={6!&^Id zxIn+VT+qunr&g6#z7ae=V;hx?-StL4_FjXTX4iH;MUicHqG zhBuTtMf3J#&+L9TLF8KR6r~XYEx&7)9y!^iyZgx&8t`ZHT7;Zl zRKfGt-XRjTqJb$RTBS-*R3c}+3{?-r{y)U=q-`QadCD zvVMDkNfc>VC9iDw!H2BqtG9=*@`hR_af8I4W@fyM_hEN)y~v)tReojO4G{A~X`OAQ zCnsv7XS&FTTG+ehYPm1v1)oRKE=ix5M;udVm~kc-3;|hyWkbo`ZKVhLjAAaoDASC3 z`flKFqt_5uaTn1y!Jhj649%qW7NsH-;<3vl<)Ppq|K_XPC4mqw5|HxK;k~Or!nokFCZ&; zDMj%%MU$RMO|8?4-fLKA)^MX4p;~R$hd_?vzOgS3@C9!CMn0Y5m!9jlfTS2ya9-MN z`D?&jkI}&?Q7;`xJJ4rm0$f>b4B9ugMEtrj%|Ity#*9ENy8Zr+-}{0la~919*J8YK zX-Art3CL%(gX5EKd7iUYtP6A-{>Q&%i*62k#&(M|cTG5a-_<{=nJw-&;5tC!>>>1o^tCG#CRfeQ!@4DLUX?UJ_2j;Rm@zVe}J=ATNW%n;f#aWxsratPQWF&W0;F?Lxh1h*L_Sr%t z?kx@qtHxGo&ZA!Yiow4qm14AKS>JWA*QP$ z;?axkhI9SOQQT*Q;C{CC)(R=;B%$AsGgvT?7|_==ov$aJ5h(7(o7{hN_lfQ7ueA8c z3Azcn9}}D)Vg@yaOPi2}Sg!X&V=~g-L;tpjTdpHE=j>HgKJw%Mx%~6ISKj&bCX=V! z;C{^ZB#}{bzIZx+IcTKHV|VO$S&m=l+ihvgo>y-n$Fz)+ebN)^hS=D8nmM^jXK{ll z$C)XkP%=AMEnHq8lOa0IlLB|_5RI@WQPZ>kW(9{MV+Qs%U#usVi=Iw z!xuS%vt+!C5zQz44ll`6DyBp{;*AQ_8;4Q5;xKZsxhbXZG>LE;xo!trn$qn()mx8x zIHZ(gC4^dCjM^=SkuvA11I|31fhAT?638Zn1)Iz2{{e7!m&DnW#>moHug zo? zhZ4U_k;N$p-W_uf%Z`%&a0ant<{B$~X}u^1#gvXKnc-JDQx2?F2|00eCt~hmu}-|( zN||OWwz`a=NO$&u2;zsVImbN|Bfz^nJ=|`-u}J0_;%oA9o;aP7rMt#U{3wFGA` zD-dO=^1VLK#a%k6P_H4g2d1e_Lc)NvolyruA?78s#Riu+pb&dc_;kCo6TN4O@U;Z} z2s>Q<`WxLI2-?iV13^bcAgH}hC>RG=P78sZx>TUyksqFp7d3w&4)xZ-sF>k~OR&Y^ zv9;ef%Lx(?ZYAZ#NAr(+ zP({oXkmAEglOX;!H}|KWQ~672-EW^;yIdqlCUy+9CSIEMWG3&aSkCrr#P~p@6FS?j z+c^@KumV)Qe2n%4VPDJIx3}I;Rcn)dDqi>G%0C`!GI1ExK6>n(A!H)dzZvH?#sna^|&*ItQF%6;_=@(-x z4=7JQZpUv^?raQr&bP$Cb0@~skL170wHFf&Q^6>YVuzU4;6ZAm3%oqSW$dCX=IZ%I zpR9f=Lulx3!&8ONu`BA9{n#O364=8vwKL(4oulFsc6d{s`0911os<7=UBSA1`-+s7 zn6*D!UgYJW%ABFIGSFtAB6migDbPNe9Ug*@==zXg^}f|SyOO{@eWrk*Qfs+O&j{|e zsP63AXoVePj`SJ=dG(O^ZH^hJSRh}NZv~hw5^JbDa!`+QR?@0uz4>&LLkObO>1^|r zcF3Gk5amEnj4>&@QWv$hqyQCMBWX5le%h4sKH4WW;Zb5-MN`uc{iW-tFlxSTGYNB$j^uN(gMJE7Z#9haA%`Ii=NvmnBU0JJ z8J{(YGpvSPCet$W*0pLGifh=R9Y>Efnqr$YMxG$xtsPrJ;{Pn|CUCqo+}^a2uXe)9 zQduBAo4baUjKrHc=AQGj(lrk-u&SK$;w0fKTzPhYu$)kV1{yg2rvC`Eu zQV$x||GhSI+DJ@vp#Ya|t7DRvVM8z|;ud9$}qn zS`mSl7F|%sD5eOdf#oQZp1EFmP*$9Mt#{@$;m#%oip~vYlvlXt$$8MZ3JD^2y)>i_ zX$ApHa#gEx{Z`(K0;p>yNMEqZR1Ww3qItA_C|(c+>xWv<6^HR;CIUL?nQ46FI@7*xM^Fqa`0C^59F8ir6DGRY zLbzo#qHtIvm?39&-^4m|N2&=PD!M?#C~|?#&R`=3U`<`(EOE5I4yxmoA)zXn%VGY< zj14{zPbnR{%ioGk+y6$o6%Td6hhv7o zZ<=h>@?e!!lydlB@8VmC9^5FjKvU<2)LZMcI2~e%%6V)IQ+aDb=jM1#sV0q}Eat(> z(z@pC3k6O$IUoGlR;_JrmYv)~L_DOn+KcWI`PvZ1q>5Z~Cb+33;~Li0U&>xun0UnPdqwZ(81;q7}r0VJt)lPt+YRO9#a; zr#MA}xsj_?@&Y<0N$IR}GBd$^O~1ygDN@ITQRG*l1p_h?hm?Va_uU*-`gUYTmdQLm+(GgJ9vtgN#CISLaRTB*=2U<6KoJmkmLebYZI8K8 zrKn>~dl?>_gWzhAGRqHMzPf)@c*Zf{jQLyalU-t6cs)~94uoAc=B$R-C^wbf-AFDK z%O2Ad(+`TEACbkHuk+pw!EOGA9YEWsiAkXV%LAoQC8$290i^$|Riu?9G2?hRfqqE? zeMZARO-{wcZx;loAmPxj?wBDamAmXV2sE~X7S>|MaJ=h!e4>=)biY3O6t=&gy?)&i zrV{HoD%pyJQjx}(!QWOH_q^-b4N}8$$L2RLIZ=cA9n3b{HTw4yI}hXLKs8e(hkiD$1dXFvX<6;R<(H-&`BD87fG~ygNC! z;HyEsO=!l9D4B<2E1jl@n1LhcCLrJTzw!ZWqi+Br;t_l)(OO&lXi8t&JMXR5dA}Dt zvM~mTCzOauA;YPmUR9=jM8D4<31n6RypKBaFX{pL^A@)%u@HP>zL*N~>cRC>!ZXbQ z2Q+|eie--(lX-IqFJb7yls$0w&pXguLcb!>eQM=?#Qu1c&hi4a8lvZusbftM)2GiA zVDkdl49osqXgj2l!F9&Y$&4JY0CV2yoO>5)&<^9>fUZ zu+#I!$+vg0`&OE#X5T+oPw{A(ylH+Vh^ZK!NCqxq$=&_EsM@a1yN8Hp_s=>%gwEq5Xo5{mu~>5rlES(dLX(pf z+Z$^fb6jo=p{KMHH1Dno{bXGO!NM2=3al>D}G%$PWI zIKR%P@2&T}x2*62CQ^qIzB*Ln5&Q_o)(!t&0_8|k)OSIWRn?P1y%ME$O!|v(c?Z(Q zrjJUqjNGmcuO_vNT-)G#a}xt0rbo`HG~({id2PVG+CMK7{{W&KGbz^;3o~a9?N8eg zqNqPz`Y?=B+Nlli8J4wGkXA{d4e#)1Jf2>7K9zAKyB{3;EA6^`KYw!FJxqD4#vAFS?? zeE?KtgYK3ZmOoX|g&5G|Eb^b!+yF8SzJqAcR6=HyXQ9m=05iX)Tmfc=ZE9NUSJe16 z!o;On=>k}GHeo5%itT=>DBbHr@Iwd++q)@*V~1_+u&_DiGSf?6Bq?!8ehHbKGac>>(;N7CZEsQK^@BIYW*mg z>Z7e?u#S>M2r1m%v%y0WrYLsw669*^hwRs`rK%yT+~D-by&ORQ};R-N}a1X3mph$ zpK)CIX?YUu)!nh-qB8fK;~}}c?#YgWQoc2!XvSo8^Ihq&fp^wt`%0!SN1sr=pk?bJ zVzy$_bCDiF&SC~unCg@GO}XNdR+k$+`h)yM-MNZu-fdx(VUg$jP|W

- +

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

diff --git a/src/addon/mod/workshop/components/submission/addon-mod-workshop-submission.html b/src/addon/mod/workshop/components/submission/addon-mod-workshop-submission.html index 180f298c8..7a3cf4d86 100644 --- a/src/addon/mod/workshop/components/submission/addon-mod-workshop-submission.html +++ b/src/addon/mod/workshop/components/submission/addon-mod-workshop-submission.html @@ -32,7 +32,7 @@ - +

{{ 'addon.mod_workshop.feedbackby' | translate : {$a: evaluateByProfile.fullname} }}

From e4e91bd150e72b5f002d721131c547fe07937500 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Thu, 30 May 2019 15:54:54 +0200 Subject: [PATCH 239/263] MOBILE-3039 workshop: Fix viewing assessment offline --- src/addon/mod/workshop/providers/helper.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/addon/mod/workshop/providers/helper.ts b/src/addon/mod/workshop/providers/helper.ts index 4007b223a..c4d6560b0 100644 --- a/src/addon/mod/workshop/providers/helper.ts +++ b/src/addon/mod/workshop/providers/helper.ts @@ -159,7 +159,7 @@ export class AddonModWorkshopHelperProvider { * @return {Promise} Resolved with the assessment. */ getReviewerAssessmentById(workshopId: number, assessmentId: number, userId: number = 0, siteId?: string): Promise { - return this.workshopProvider.getAssessment(workshopId, assessmentId, siteId).catch(() => { + return this.workshopProvider.getAssessment(workshopId, assessmentId, siteId).catch((error) => { return this.workshopProvider.getReviewerAssessments(workshopId, userId, undefined, undefined, siteId) .then((assessments) => { for (const x in assessments) { @@ -168,13 +168,10 @@ export class AddonModWorkshopHelperProvider { } } - return false; + // Not found, return original error. + return Promise.reject(error); }); }).then((assessment) => { - if (!assessment) { - return false; - } - return this.workshopProvider.getAssessmentForm(workshopId, assessmentId, undefined, undefined, undefined, siteId) .then((assessmentForm) => { assessment.form = assessmentForm; From 57ddf266ce6ea06badc5c1ca3c1cad2d9519f425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 30 May 2019 10:50:34 +0200 Subject: [PATCH 240/263] MOBILE-3039 styles: Improve word wrapping and scroll styles --- src/app/app.scss | 8 ++++++++ src/components/download-refresh/download-refresh.scss | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/src/app/app.scss b/src/app/app.scss index ec8fdefeb..ed48ce3d0 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -224,6 +224,8 @@ ion-app.app-root { /** Styles of elements inside the directive should be placed in format-text.scss */ core-format-text { user-select: text; + word-break: break-word; + word-wrap: break-word; &[maxHeight], &[ng-reflect-max-height] { @@ -939,6 +941,12 @@ ion-app.app-root { pointer-events: initial; } + // Avoid scroll bouncing on iOS if disabled. + &.disable-scroll .ion-page .content-ios .scroll-content::before, + &.disable-scroll .ion-page .content-ios .scroll-content::after { + content: none; + } + .core-iframe-offline-disabled { display: none !important; } diff --git a/src/components/download-refresh/download-refresh.scss b/src/components/download-refresh/download-refresh.scss index 46381a154..2ac72a335 100644 --- a/src/components/download-refresh/download-refresh.scss +++ b/src/components/download-refresh/download-refresh.scss @@ -1,5 +1,12 @@ ion-app.app-root core-download-refresh { font-size: 1.4rem; + display: flex; + flex-flow: row; + align-items: center; + z-index: 1; + justify-content: space-around; + align-content: center; + min-height: 44px; button, ion-icon { cursor: pointer; From 8d450d324fce63fdab22f7d4b2f360f23941f85a Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 30 May 2019 16:56:38 +0200 Subject: [PATCH 241/263] MOBILE-3039 push: Fix crash when push received in foreground in iOS --- src/core/pushnotifications/providers/pushnotifications.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/pushnotifications/providers/pushnotifications.ts b/src/core/pushnotifications/providers/pushnotifications.ts index 992a311be..c61bf7a29 100644 --- a/src/core/pushnotifications/providers/pushnotifications.ts +++ b/src/core/pushnotifications/providers/pushnotifications.ts @@ -419,6 +419,7 @@ export class CorePushNotificationsProvider { channel: 'PushPluginChannel' }, promises = [], + isAndroid = this.platform.is('android'), extraFeatures = this.utils.isTrueOrOne(data.extrafeatures); // Apply formatText to title and message. @@ -432,7 +433,7 @@ export class CorePushNotificationsProvider { // Error formatting, use the original message. return notification.message; }).then((formattedMessage) => { - if (extraFeatures && this.utils.isFalseOrZero(data.notif)) { + if (extraFeatures && isAndroid && this.utils.isFalseOrZero(data.notif)) { // It's a message, use messaging style. Ionic Native doesn't specify this option. ( localNotif).text = [ { @@ -445,7 +446,7 @@ export class CorePushNotificationsProvider { } })); - if (extraFeatures) { + if (extraFeatures && isAndroid) { // Use a different icon if needed. localNotif.icon = notification.image; // This feature isn't supported by the official plugin, we use a fork. From 2ad861b1e4bf61954859002d12ae0211a48d01f7 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 31 May 2019 07:50:32 +0200 Subject: [PATCH 242/263] MOBILE-3039 core: Close popover when download finishes in activity --- .../mod/assign/components/index/addon-mod-assign-index.html | 2 +- .../mod/book/components/index/addon-mod-book-index.html | 2 +- .../mod/chat/components/index/addon-mod-chat-index.html | 2 +- .../mod/choice/components/index/addon-mod-choice-index.html | 2 +- .../mod/data/components/index/addon-mod-data-index.html | 2 +- .../feedback/components/index/addon-mod-feedback-index.html | 2 +- .../mod/folder/components/index/addon-mod-folder-index.html | 2 +- .../mod/forum/components/index/addon-mod-forum-index.html | 2 +- .../glossary/components/index/addon-mod-glossary-index.html | 2 +- .../mod/imscp/components/index/addon-mod-imscp-index.html | 2 +- .../mod/lesson/components/index/addon-mod-lesson-index.html | 2 +- .../mod/page/components/index/addon-mod-page-index.html | 2 +- .../mod/quiz/components/index/addon-mod-quiz-index.html | 2 +- .../resource/components/index/addon-mod-resource-index.html | 2 +- .../mod/scorm/components/index/addon-mod-scorm-index.html | 2 +- .../mod/survey/components/index/addon-mod-survey-index.html | 2 +- .../mod/wiki/components/index/addon-mod-wiki-index.html | 2 +- .../workshop/components/index/addon-mod-workshop-index.html | 2 +- src/core/course/classes/main-resource-component.ts | 6 ++++-- src/core/course/providers/helper.ts | 6 +++++- 20 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/addon/mod/assign/components/index/addon-mod-assign-index.html b/src/addon/mod/assign/components/index/addon-mod-assign-index.html index edf43166f..aac1c7ea8 100644 --- a/src/addon/mod/assign/components/index/addon-mod-assign-index.html +++ b/src/addon/mod/assign/components/index/addon-mod-assign-index.html @@ -6,7 +6,7 @@ - + diff --git a/src/addon/mod/book/components/index/addon-mod-book-index.html b/src/addon/mod/book/components/index/addon-mod-book-index.html index b5ce9efc2..6f4e0be3a 100644 --- a/src/addon/mod/book/components/index/addon-mod-book-index.html +++ b/src/addon/mod/book/components/index/addon-mod-book-index.html @@ -8,7 +8,7 @@ - + diff --git a/src/addon/mod/chat/components/index/addon-mod-chat-index.html b/src/addon/mod/chat/components/index/addon-mod-chat-index.html index f76b8f8f8..3aaa3b0ce 100644 --- a/src/addon/mod/chat/components/index/addon-mod-chat-index.html +++ b/src/addon/mod/chat/components/index/addon-mod-chat-index.html @@ -5,7 +5,7 @@ - + diff --git a/src/addon/mod/choice/components/index/addon-mod-choice-index.html b/src/addon/mod/choice/components/index/addon-mod-choice-index.html index 59a85ab7b..a9e81b5f6 100644 --- a/src/addon/mod/choice/components/index/addon-mod-choice-index.html +++ b/src/addon/mod/choice/components/index/addon-mod-choice-index.html @@ -6,7 +6,7 @@ - + diff --git a/src/addon/mod/data/components/index/addon-mod-data-index.html b/src/addon/mod/data/components/index/addon-mod-data-index.html index d6c306669..dd2beb9a0 100644 --- a/src/addon/mod/data/components/index/addon-mod-data-index.html +++ b/src/addon/mod/data/components/index/addon-mod-data-index.html @@ -11,7 +11,7 @@ - + diff --git a/src/addon/mod/feedback/components/index/addon-mod-feedback-index.html b/src/addon/mod/feedback/components/index/addon-mod-feedback-index.html index 9fef582e3..bc403c9e0 100644 --- a/src/addon/mod/feedback/components/index/addon-mod-feedback-index.html +++ b/src/addon/mod/feedback/components/index/addon-mod-feedback-index.html @@ -6,7 +6,7 @@ - + diff --git a/src/addon/mod/folder/components/index/addon-mod-folder-index.html b/src/addon/mod/folder/components/index/addon-mod-folder-index.html index 62cda2e8e..c59ab5ac7 100644 --- a/src/addon/mod/folder/components/index/addon-mod-folder-index.html +++ b/src/addon/mod/folder/components/index/addon-mod-folder-index.html @@ -5,7 +5,7 @@ - + diff --git a/src/addon/mod/forum/components/index/addon-mod-forum-index.html b/src/addon/mod/forum/components/index/addon-mod-forum-index.html index 0aecbb757..8a7dae440 100644 --- a/src/addon/mod/forum/components/index/addon-mod-forum-index.html +++ b/src/addon/mod/forum/components/index/addon-mod-forum-index.html @@ -6,7 +6,7 @@ - + diff --git a/src/addon/mod/glossary/components/index/addon-mod-glossary-index.html b/src/addon/mod/glossary/components/index/addon-mod-glossary-index.html index b5617f259..4695adab9 100644 --- a/src/addon/mod/glossary/components/index/addon-mod-glossary-index.html +++ b/src/addon/mod/glossary/components/index/addon-mod-glossary-index.html @@ -10,7 +10,7 @@ - + diff --git a/src/addon/mod/imscp/components/index/addon-mod-imscp-index.html b/src/addon/mod/imscp/components/index/addon-mod-imscp-index.html index eab430fd2..a07aa6be4 100644 --- a/src/addon/mod/imscp/components/index/addon-mod-imscp-index.html +++ b/src/addon/mod/imscp/components/index/addon-mod-imscp-index.html @@ -8,7 +8,7 @@ - + diff --git a/src/addon/mod/lesson/components/index/addon-mod-lesson-index.html b/src/addon/mod/lesson/components/index/addon-mod-lesson-index.html index 5e1c4d20b..55cc163c8 100644 --- a/src/addon/mod/lesson/components/index/addon-mod-lesson-index.html +++ b/src/addon/mod/lesson/components/index/addon-mod-lesson-index.html @@ -6,7 +6,7 @@ - + diff --git a/src/addon/mod/page/components/index/addon-mod-page-index.html b/src/addon/mod/page/components/index/addon-mod-page-index.html index 8c2c78a40..819cef352 100644 --- a/src/addon/mod/page/components/index/addon-mod-page-index.html +++ b/src/addon/mod/page/components/index/addon-mod-page-index.html @@ -5,7 +5,7 @@ - + diff --git a/src/addon/mod/quiz/components/index/addon-mod-quiz-index.html b/src/addon/mod/quiz/components/index/addon-mod-quiz-index.html index 5113cd105..bb204717c 100644 --- a/src/addon/mod/quiz/components/index/addon-mod-quiz-index.html +++ b/src/addon/mod/quiz/components/index/addon-mod-quiz-index.html @@ -6,7 +6,7 @@ - + diff --git a/src/addon/mod/resource/components/index/addon-mod-resource-index.html b/src/addon/mod/resource/components/index/addon-mod-resource-index.html index 7a964f220..45056cdcd 100644 --- a/src/addon/mod/resource/components/index/addon-mod-resource-index.html +++ b/src/addon/mod/resource/components/index/addon-mod-resource-index.html @@ -5,7 +5,7 @@ - + diff --git a/src/addon/mod/scorm/components/index/addon-mod-scorm-index.html b/src/addon/mod/scorm/components/index/addon-mod-scorm-index.html index 92fb199a2..20ca8751f 100644 --- a/src/addon/mod/scorm/components/index/addon-mod-scorm-index.html +++ b/src/addon/mod/scorm/components/index/addon-mod-scorm-index.html @@ -6,7 +6,7 @@ - + diff --git a/src/addon/mod/survey/components/index/addon-mod-survey-index.html b/src/addon/mod/survey/components/index/addon-mod-survey-index.html index 01645b24b..da07713d4 100644 --- a/src/addon/mod/survey/components/index/addon-mod-survey-index.html +++ b/src/addon/mod/survey/components/index/addon-mod-survey-index.html @@ -6,7 +6,7 @@ - + diff --git a/src/addon/mod/wiki/components/index/addon-mod-wiki-index.html b/src/addon/mod/wiki/components/index/addon-mod-wiki-index.html index 0a8a6c5b1..3d8834595 100644 --- a/src/addon/mod/wiki/components/index/addon-mod-wiki-index.html +++ b/src/addon/mod/wiki/components/index/addon-mod-wiki-index.html @@ -18,7 +18,7 @@ - + diff --git a/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html b/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html index f778b5f19..0e2e89af6 100644 --- a/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html +++ b/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html @@ -6,7 +6,7 @@ - + diff --git a/src/core/course/classes/main-resource-component.ts b/src/core/course/classes/main-resource-component.ts index 42727c13f..b2a153add 100644 --- a/src/core/course/classes/main-resource-component.ts +++ b/src/core/course/classes/main-resource-component.ts @@ -251,9 +251,11 @@ export class CoreCourseModuleMainResourceComponent implements OnInit, OnDestroy, /** * Prefetch the module. + * + * @param {Function} [done] Function to call when done. */ - prefetch(): void { - this.courseHelper.contextMenuPrefetch(this, this.module, this.courseId); + prefetch(done?: () => void): void { + this.courseHelper.contextMenuPrefetch(this, this.module, this.courseId, done); } /** diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index 7259db9b8..0a7b95247 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -465,9 +465,10 @@ export class CoreCourseHelperProvider { * @param {any} instance The component instance that has the context menu. It should have prefetchStatusIcon and isDestroyed. * @param {any} module Module to be prefetched * @param {number} courseId Course ID the module belongs to. + * @param {Function} [done] Function to call when done. It will close the context menu. * @return {Promise} Promise resolved when done. */ - contextMenuPrefetch(instance: any, module: any, courseId: number): Promise { + contextMenuPrefetch(instance: any, module: any, courseId: number, done?: () => void): Promise { const initialIcon = instance.prefetchStatusIcon; instance.prefetchStatusIcon = 'spinner'; // Show spinner since this operation might take a while. @@ -477,6 +478,9 @@ export class CoreCourseHelperProvider { return this.domUtils.confirmDownloadSize(size).then(() => { return this.prefetchDelegate.prefetchModule(module, courseId, true); }); + }).then(() => { + // Success, close menu. + done && done(); }).catch((error) => { instance.prefetchStatusIcon = initialIcon; From 06a4c357d9000fbf3885594e00c945ae28cdc35e Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 31 May 2019 08:31:42 +0200 Subject: [PATCH 243/263] MOBILE-3039 core: Fix redirect treated again when it shouldn't --- src/core/mainmenu/pages/menu/menu.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/mainmenu/pages/menu/menu.ts b/src/core/mainmenu/pages/menu/menu.ts index 5f03fb21f..d06d413c2 100644 --- a/src/core/mainmenu/pages/menu/menu.ts +++ b/src/core/mainmenu/pages/menu/menu.ts @@ -171,7 +171,10 @@ export class CoreMainMenuPage implements OnDestroy { if (this.urlToOpen) { // There's a content link to open. - this.linksDelegate.getActionsFor(this.urlToOpen, undefined).then((actions) => { + const url = this.urlToOpen; + delete this.urlToOpen; + + this.linksDelegate.getActionsFor(url, undefined).then((actions) => { const action = this.linksHelper.getFirstValidAction(actions); if (action && action.sites.length) { // Action should only have 1 site because we're filtering by username. From 509222e2d2dd4def4b61bd2bae537ea16e75a0d0 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Fri, 31 May 2019 12:47:49 +0200 Subject: [PATCH 244/263] MOBILE-3039 rte: Fix height calculation in Android --- src/components/rich-text-editor/rich-text-editor.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/rich-text-editor/rich-text-editor.ts b/src/components/rich-text-editor/rich-text-editor.ts index 5d2da5941..59fdabe77 100644 --- a/src/components/rich-text-editor/rich-text-editor.ts +++ b/src/components/rich-text-editor/rich-text-editor.ts @@ -148,7 +148,10 @@ export class CoreRichTextEditorComponent implements AfterContentInit, OnDestroy // Editor is ready, adjust Height if needed. let height; - if (this.platform.is('ios') && this.kbHeight > 0) { + if (this.platform.is('android')) { + // Android, ignore keyboard height because web view is resized. + height = this.domUtils.getContentHeight(this.content) - this.getSurroundingHeight(this.element); + } else if (this.platform.is('ios') && this.kbHeight > 0) { // Keyboard open in iOS. // In this case, the header disappears or is scrollable, so we need to adjust the calculations. height = window.innerHeight - this.getSurroundingHeight(this.element); From ea22e6556f895126bfc293e334af65dd2a2bed5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Mon, 3 Jun 2019 11:36:27 +0200 Subject: [PATCH 245/263] MOBILE-3039 course: Hide download when offline disabled --- .../myoverview/addon-block-myoverview.html | 4 ++-- .../myoverview/components/myoverview/myoverview.ts | 14 ++++++++++++++ .../course/pages/list-mod-type/list-mod-type.html | 2 +- .../course/pages/list-mod-type/list-mod-type.ts | 7 ++++++- src/core/course/pages/section/section.ts | 3 ++- src/core/courses/providers/courses.ts | 4 ++-- .../components/index/core-sitehome-index.html | 2 +- src/core/sitehome/components/index/index.ts | 2 ++ 8 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/addon/block/myoverview/components/myoverview/addon-block-myoverview.html b/src/addon/block/myoverview/components/myoverview/addon-block-myoverview.html index 9b3cfa183..598c204f0 100644 --- a/src/addon/block/myoverview/components/myoverview/addon-block-myoverview.html +++ b/src/addon/block/myoverview/components/myoverview/addon-block-myoverview.html @@ -1,7 +1,7 @@

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

-
+
@@ -36,7 +36,7 @@ - + diff --git a/src/addon/block/myoverview/components/myoverview/myoverview.ts b/src/addon/block/myoverview/components/myoverview/myoverview.ts index e577c5161..b36202f7e 100644 --- a/src/addon/block/myoverview/components/myoverview/myoverview.ts +++ b/src/addon/block/myoverview/components/myoverview/myoverview.ts @@ -62,11 +62,14 @@ export class AddonBlockMyOverviewComponent extends CoreBlockBaseComponent implem showHidden = false; showSelectorFilter = false; showSortFilter = false; + downloadCourseEnabled: boolean; + downloadCoursesEnabled: boolean; protected prefetchIconsInitialized = false; protected isDestroyed; protected downloadButtonObserver; protected coursesObserver; + protected updateSiteObserver; protected courseIds = []; protected fetchContentDefaultError = 'Error getting my overview data.'; @@ -96,6 +99,16 @@ export class AddonBlockMyOverviewComponent extends CoreBlockBaseComponent implem } }); + 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()); @@ -336,6 +349,7 @@ export class AddonBlockMyOverviewComponent extends CoreBlockBaseComponent implem ngOnDestroy(): void { this.isDestroyed = true; this.coursesObserver && this.coursesObserver.off(); + this.updateSiteObserver && this.updateSiteObserver.off(); this.downloadButtonObserver && this.downloadButtonObserver.off(); } } diff --git a/src/core/course/pages/list-mod-type/list-mod-type.html b/src/core/course/pages/list-mod-type/list-mod-type.html index b131fb912..7315af183 100644 --- a/src/core/course/pages/list-mod-type/list-mod-type.html +++ b/src/core/course/pages/list-mod-type/list-mod-type.html @@ -12,7 +12,7 @@ - + diff --git a/src/core/course/pages/list-mod-type/list-mod-type.ts b/src/core/course/pages/list-mod-type/list-mod-type.ts index 2a1694243..37220ae4a 100644 --- a/src/core/course/pages/list-mod-type/list-mod-type.ts +++ b/src/core/course/pages/list-mod-type/list-mod-type.ts @@ -18,6 +18,7 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreCourseProvider } from '../../providers/course'; import { CoreCourseModuleDelegate } from '../../providers/module-delegate'; import { CoreCourseHelperProvider } from '../../providers/helper'; +import { CoreSitesProvider } from '@providers/sites'; import { CoreConstants } from '@core/constants'; /** @@ -33,13 +34,15 @@ export class CoreCourseListModTypePage { modules = []; title: string; loaded = false; + downloadEnabled = false; protected courseId: number; protected modName: string; protected archetypes = {}; // To speed up the check of modules. constructor(navParams: NavParams, private courseProvider: CoreCourseProvider, private moduleDelegate: CoreCourseModuleDelegate, - private domUtils: CoreDomUtilsProvider, private courseHelper: CoreCourseHelperProvider) { + private domUtils: CoreDomUtilsProvider, private courseHelper: CoreCourseHelperProvider, + private sitesProvider: CoreSitesProvider) { this.title = navParams.get('title'); this.courseId = navParams.get('courseId'); @@ -50,6 +53,8 @@ export class CoreCourseListModTypePage { * View loaded. */ ionViewDidLoad(): void { + this.downloadEnabled = !this.sitesProvider.getCurrentSite().isOfflineDisabled(); + this.fetchData().finally(() => { this.loaded = true; }); diff --git a/src/core/course/pages/section/section.ts b/src/core/course/pages/section/section.ts index 468cbf8b3..c2d67c3f1 100644 --- a/src/core/course/pages/section/section.ts +++ b/src/core/course/pages/section/section.ts @@ -87,7 +87,8 @@ export class CoreCourseSectionPage implements OnDestroy { // Get the title to display. We dont't have sections yet. this.title = courseFormatDelegate.getCourseTitle(this.course); - this.displayEnableDownload = courseFormatDelegate.displayEnableDownload(this.course); + this.displayEnableDownload = !sitesProvider.getCurrentSite().isOfflineDisabled() && + courseFormatDelegate.displayEnableDownload(this.course); this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite(); // Check if the course format requires the view to be refreshed when completion changes. diff --git a/src/core/courses/providers/courses.ts b/src/core/courses/providers/courses.ts index 9f53303c2..c50cc9656 100644 --- a/src/core/courses/providers/courses.ts +++ b/src/core/courses/providers/courses.ts @@ -167,7 +167,7 @@ export class CoreCoursesProvider { isDownloadCourseDisabledInSite(site?: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('NoDelegate_CoreCourseDownload'); + return site.isOfflineDisabled() || site.isFeatureDisabled('NoDelegate_CoreCourseDownload'); } /** @@ -191,7 +191,7 @@ export class CoreCoursesProvider { isDownloadCoursesDisabledInSite(site?: CoreSite): boolean { site = site || this.sitesProvider.getCurrentSite(); - return site.isFeatureDisabled('NoDelegate_CoreCoursesDownload'); + return site.isOfflineDisabled() || site.isFeatureDisabled('NoDelegate_CoreCoursesDownload'); } /** diff --git a/src/core/sitehome/components/index/core-sitehome-index.html b/src/core/sitehome/components/index/core-sitehome-index.html index 6472f3418..a8a1ed1bb 100644 --- a/src/core/sitehome/components/index/core-sitehome-index.html +++ b/src/core/sitehome/components/index/core-sitehome-index.html @@ -7,7 +7,7 @@ - + diff --git a/src/core/sitehome/components/index/index.ts b/src/core/sitehome/components/index/index.ts index c21f2b1d9..34aa44057 100644 --- a/src/core/sitehome/components/index/index.ts +++ b/src/core/sitehome/components/index/index.ts @@ -40,6 +40,7 @@ export class CoreSiteHomeIndexComponent implements OnInit { siteHomeId: number; currentSite: CoreSite; blocks = []; + downloadEnabled: boolean; constructor(private domUtils: CoreDomUtilsProvider, sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider, private courseHelper: CoreCourseHelperProvider, @@ -52,6 +53,7 @@ export class CoreSiteHomeIndexComponent implements OnInit { * Component being initialized. */ ngOnInit(): void { + this.downloadEnabled = !this.currentSite.isOfflineDisabled(); this.loadContent().finally(() => { this.dataLoaded = true; }); From 55fe415c53050170e35e387ff014d23c61d74efe Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Mon, 3 Jun 2019 11:50:42 +0200 Subject: [PATCH 246/263] MOBILE-3039 styles: Fix text wrapping in block buttons --- src/app/app.scss | 51 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/app/app.scss b/src/app/app.scss index ed48ce3d0..41759e8ef 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -678,7 +678,7 @@ ion-app.app-root { > ion-icon { color: $color-base; position: absolute; - @include position(0, null, null, 16px) + @include position(0, null, null, 16px); height: 100%; font-size: 24px; display: flex; @@ -1103,3 +1103,52 @@ ion-app.platform-desktop { } } } + +// Fix text wrapping in block buttons. +.button-block[text-wrap] { + height: auto; + + // Changed from "strict" because the size depends on child elements. + contain: content; + + // Add vertical padding, we cannot rely on a fixed height + centering like in normal buttons. + .item-md & { + padding-top: .5357em; + padding-bottom: .5357em; + } + .item-md &.item-button { + padding-top: .6em; + padding-bottom: .6em; + } + .item-ios & { + padding-top: .9em; + padding-bottom: .9em; + } + .item-ios &.item-button { + padding-top: .7846em; + padding-bottom: .7846em; + } + + // Keep a consistent height with normal buttons if text does not wrap. + display: flex; + flex-flow: row; + align-items: center; + &.button-md { + min-height: $button-md-height; + } + &.button-large-md { + min-height: $button-md-large-height; + } + &.button-small-md { + min-height: $button-md-small-height; + } + &.button-ios { + min-height: $button-ios-height; + } + &.button-large-ios { + min-height: $button-ios-large-height; + } + &.button-small-ios { + min-height: $button-ios-small-height; + } +} From 35656ab1e0ad767d6b72904301239e345f5f03c9 Mon Sep 17 00:00:00 2001 From: Albert Gasset Date: Mon, 3 Jun 2019 11:54:00 +0200 Subject: [PATCH 247/263] MOBILE-3039 lesson: Wrap text in buttons --- src/addon/mod/lesson/pages/player/player.html | 10 +++++----- .../mod/lesson/pages/user-retake/user-retake.html | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/addon/mod/lesson/pages/player/player.html b/src/addon/mod/lesson/pages/player/player.html index 0c2e2ac0b..6c83c1f4b 100644 --- a/src/addon/mod/lesson/pages/player/player.html +++ b/src/addon/mod/lesson/pages/player/player.html @@ -108,7 +108,7 @@ - + @@ -175,7 +175,7 @@ - + @@ -185,7 +185,7 @@ - + @@ -212,8 +212,8 @@
- {{ 'addon.mod_lesson.finish' | translate }} - {{ button.label | translate }} + {{ 'addon.mod_lesson.finish' | translate }} + {{ button.label | translate }}
diff --git a/src/addon/mod/lesson/pages/user-retake/user-retake.html b/src/addon/mod/lesson/pages/user-retake/user-retake.html index 3b35e37e4..60c19802b 100644 --- a/src/addon/mod/lesson/pages/user-retake/user-retake.html +++ b/src/addon/mod/lesson/pages/user-retake/user-retake.html @@ -78,7 +78,7 @@ - +

From cb6a9876c361dd0480b5a2113f9d277ca5cdad45 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 3 Jun 2019 18:26:47 +0200 Subject: [PATCH 248/263] MOBILE-3039 ios: Fix 'More' option in file uploader --- src/app/app.ios.scss | 13 +++++++++++++ .../fileuploader/providers/file-handler.ts | 18 +++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/app/app.ios.scss b/src/app/app.ios.scss index f5b16d95e..2655a2276 100644 --- a/src/app/app.ios.scss +++ b/src/app/app.ios.scss @@ -98,4 +98,17 @@ ion-app.app-root.ios { border-color: $checkbox-ios-icon-border-color-off; background-color: $checkbox-ios-background-color-off; } + + // File Uploader + // In iOS the input is 1 level higher, so the styles are different. + .action-sheet-ios input.core-fileuploader-file-handler-input { + position: absolute; + @include position(null, 0, null, 0); + min-width: 100%; + min-height: $action-sheet-ios-button-min-height; + opacity: 0; + outline: none; + z-index: 100; + cursor: pointer; + } } \ No newline at end of file diff --git a/src/core/fileuploader/providers/file-handler.ts b/src/core/fileuploader/providers/file-handler.ts index 4479880f0..36bda2bf4 100644 --- a/src/core/fileuploader/providers/file-handler.ts +++ b/src/core/fileuploader/providers/file-handler.ts @@ -71,6 +71,7 @@ export class CoreFileUploaderFileHandler implements CoreFileUploaderHandler { if (element) { const input = document.createElement('input'); input.setAttribute('type', 'file'); + input.classList.add('core-fileuploader-file-handler-input'); if (mimetypes && mimetypes.length && (!this.platform.is('android') || mimetypes.length == 1)) { // Don't use accept attribute in Android with several mimetypes, it's not supported. input.setAttribute('accept', mimetypes.join(', ')); @@ -112,7 +113,22 @@ export class CoreFileUploaderFileHandler implements CoreFileUploaderHandler { }); }); - element.appendChild(input); + if (this.platform.is('ios')) { + // In iOS, the click on the input stopped working for some reason. We need to put it 1 level higher. + element.parentElement.appendChild(input); + + // Animate the button when the input is clicked. + input.addEventListener('mousedown', () => { + element.classList.add('activated'); + }); + input.addEventListener('mouseup', () => { + this.platform.timeout(() => { + element.classList.remove('activated'); + }, 80); + }); + } else { + element.appendChild(input); + } } } }; From 7e649138d768283c14bf04b7529cd942a8d35951 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 4 Jun 2019 12:12:15 +0200 Subject: [PATCH 249/263] MOBILE-3039 forum: Fix attachments not downloaded on prefetch --- .../mod/forum/providers/prefetch-handler.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/forum/providers/prefetch-handler.ts b/src/addon/mod/forum/providers/prefetch-handler.ts index 04e3289f8..6241dce19 100644 --- a/src/addon/mod/forum/providers/prefetch-handler.ts +++ b/src/addon/mod/forum/providers/prefetch-handler.ts @@ -122,7 +122,24 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand }); }); - return Promise.all(promises); + return Promise.all(promises).then((results) => { + // Each order has returned its own list of posts. Merge all the lists, preventing duplicates. + const posts = [], + postIds = {}; // To make the array unique. + + results.forEach((orderResults) => { + orderResults.forEach((orderResult) => { + orderResult.posts.forEach((post) => { + if (!postIds[post.id]) { + postIds[post.id] = true; + posts.push(post); + } + }); + }); + }); + + return posts; + }); } /** From 5f0eda12357885ad497f8142d89165161d045bbd Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 4 Jun 2019 12:53:11 +0200 Subject: [PATCH 250/263] MOBILE-3039 glossary: Fix edit offline entry --- src/addon/mod/glossary/pages/edit/edit.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/addon/mod/glossary/pages/edit/edit.ts b/src/addon/mod/glossary/pages/edit/edit.ts index 8520727b6..837b0e760 100644 --- a/src/addon/mod/glossary/pages/edit/edit.ts +++ b/src/addon/mod/glossary/pages/edit/edit.ts @@ -88,6 +88,7 @@ export class AddonModGlossaryEditPage implements OnInit { if (entry) { this.entry.concept = entry.concept || ''; this.entry.definition = entry.definition || ''; + this.entry.timecreated = entry.timecreated || 0; this.originalData = { concept: this.entry.concept, From bec71ce95234ae6d27368dec46d57dbbb27206f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 5 Jun 2019 09:54:48 +0200 Subject: [PATCH 251/263] MOBILE-3039 login: Fix credentials css --- src/core/login/pages/credentials/credentials.html | 2 +- src/core/login/pages/reconnect/reconnect.html | 2 +- src/core/login/pages/reconnect/reconnect.scss | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/login/pages/credentials/credentials.html b/src/core/login/pages/credentials/credentials.html index 84a2e5c8a..dcadd2e23 100644 --- a/src/core/login/pages/credentials/credentials.html +++ b/src/core/login/pages/credentials/credentials.html @@ -23,7 +23,7 @@

{{siteUrl}}

-
+ diff --git a/src/core/login/pages/reconnect/reconnect.html b/src/core/login/pages/reconnect/reconnect.html index a99821964..ce0edcde6 100644 --- a/src/core/login/pages/reconnect/reconnect.html +++ b/src/core/login/pages/reconnect/reconnect.html @@ -25,7 +25,7 @@ {{ 'core.login.reconnectdescription' | translate }}

- +