diff --git a/src/addon/mod/data/components/index/index.ts b/src/addon/mod/data/components/index/index.ts index ecdd5064e..0b3e22870 100644 --- a/src/addon/mod/data/components/index/index.ts +++ b/src/addon/mod/data/components/index/index.ts @@ -124,7 +124,7 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp this.selectedGroup = this.group || 0; this.loadContent(false, true).then(() => { - if (!this.data) { + if (!this.data || !this.data.id) { return; } diff --git a/src/addon/mod/wiki/components/index/index.scss b/src/addon/mod/wiki/components/index/index.scss index e7edc2e28..4e4fcb283 100644 --- a/src/addon/mod/wiki/components/index/index.scss +++ b/src/addon/mod/wiki/components/index/index.scss @@ -13,7 +13,7 @@ ion-app.app-root addon-mod-wiki-index { .addon-mod_wiki-page-content { background-color: $white; border-top: 1px solid $gray; - @include safe-area-padding-horizontal(0px, 0px); + @include safe-area-padding-horizontal(10px, 10px); @include darkmode() { background-color: $black; } diff --git a/src/addon/mod/wiki/components/index/index.ts b/src/addon/mod/wiki/components/index/index.ts index 5bb22176e..f72447642 100644 --- a/src/addon/mod/wiki/components/index/index.ts +++ b/src/addon/mod/wiki/components/index/index.ts @@ -99,14 +99,14 @@ export class AddonModWikiIndexComponent extends CoreCourseModuleMainActivityComp return; } - if (this.isMainPage) { + if (!this.pageId) { 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, this.wiki.name).catch(() => { + this.wikiProvider.logPageView(this.pageId, this.wiki.id, this.wiki.name).catch((error) => { // Ignore errors. }); } @@ -280,9 +280,11 @@ export class AddonModWikiIndexComponent extends CoreCourseModuleMainActivityComp this.currentPage = data.pageId; this.showLoadingAndFetch(true, false).then(() => { - this.wikiProvider.logPageView(this.currentPage, this.wiki.id, this.wiki.name).catch(() => { - // Ignore errors. - }); + if (this.currentPage) { + this.wikiProvider.logPageView(this.currentPage, this.wiki.id, this.wiki.name).catch(() => { + // Ignore errors. + }); + } }); // Stop listening for new page events. diff --git a/src/core/course/providers/log-helper.ts b/src/core/course/providers/log-helper.ts index f2319aad3..8792eab81 100644 --- a/src/core/course/providers/log-helper.ts +++ b/src/core/course/providers/log-helper.ts @@ -185,14 +185,17 @@ export class CoreCourseLogHelperProvider { */ protected logOnline(ws: string, data: any, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { - return site.write(ws, data).then((response) => { + // Clone to have an unmodified data object. + const wsData = Object.assign({}, data); + + return site.write(ws, wsData).then((response) => { if (!response.status) { return Promise.reject(this.utils.createFakeWSError('')); } // Remove all the logs performed. // TODO: Remove this lines when time is accepted in logs. - return this.deleteWSLogs(ws, data); + return this.deleteWSLogs(ws, data, siteId); }); }); } @@ -335,8 +338,19 @@ export class CoreCourseLogHelperProvider { */ protected syncLogs(logs: any[], siteId: string): Promise { return Promise.all(logs.map((log) => { - return this.logOnline(log.ws, this.textUtils.parseJSON(log.data), siteId).then(() => { - return this.deleteWSLogsByComponent(log.component, log.componentid, log.ws); + const data = this.textUtils.parseJSON(log.data); + + return this.logOnline(log.ws, data, siteId).catch((error) => { + const promise = this.utils.isWebServiceError(error) ? this.deleteWSLogs(log.ws, data, siteId) : Promise.resolve(); + + return promise.catch(() => { + // Ignore errors. + }).then(() => { + // The WebService has thrown an error, this means that responses cannot be submitted. + return Promise.reject(error); + }); + }).then(() => { + return this.deleteWSLogsByComponent(log.component, log.componentid, log.ws, siteId); }); })); } diff --git a/src/providers/utils/utils.ts b/src/providers/utils/utils.ts index 31834a365..4f71eede7 100644 --- a/src/providers/utils/utils.ts +++ b/src/providers/utils/utils.ts @@ -1252,7 +1252,7 @@ export class CoreUtilsProvider { * @return Sorted object. */ sortProperties(obj: object): object { - if (typeof obj == 'object' && !Array.isArray(obj)) { + if (obj != null && typeof obj == 'object' && !Array.isArray(obj)) { // It's an object, sort it. return Object.keys(obj).sort().reduce((accumulator, key) => { // Always call sort with the value. If it isn't an object, the original value will be returned.