diff --git a/scripts/langindex.json b/scripts/langindex.json index e42df76d3..13ad832d5 100644 --- a/scripts/langindex.json +++ b/scripts/langindex.json @@ -1517,6 +1517,7 @@ "core.nograde": "moodle", "core.none": "moodle", "core.nopasswordchangeforced": "local_moodlemobileapp", + "core.nopermissionerror": "local_moodlemobileapp", "core.nopermissions": "error", "core.noresults": "moodle", "core.notapplicable": "local_moodlemobileapp", diff --git a/src/assets/lang/en.json b/src/assets/lang/en.json index fe2a2cea1..6bdf0834f 100644 --- a/src/assets/lang/en.json +++ b/src/assets/lang/en.json @@ -1518,6 +1518,7 @@ "core.nograde": "No grade", "core.none": "None", "core.nopasswordchangeforced": "You cannot proceed without changing your password.", + "core.nopermissionerror": "Sorry, but you do not currently have permissions to do that", "core.nopermissions": "Sorry, but you do not currently have permissions to do that ({{$a}})", "core.noresults": "No results", "core.notapplicable": "n/a", diff --git a/src/classes/site.ts b/src/classes/site.ts index 1edb3f9da..18089cc1e 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -671,6 +671,16 @@ export class CoreSite { // This should not happen. error.message = this.translate.instant('core.unicodenotsupported'); + return Promise.reject(error); + } else if (error.exception === 'required_capability_exception' || error.errorcode === 'nopermission') { + if (error.message === 'error/nopermission') { + // This error message is returned by some web services but the string does not exist. + error.message = this.translate.instant('core.nopermissionerror'); + } + + // 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); } else if (typeof preSets.emergencyCache !== 'undefined' && !preSets.emergencyCache) { this.logger.debug(`WS call '${method}' failed. Emergency cache is forbidden, rejecting.`); @@ -695,6 +705,13 @@ export class CoreSite { return Promise.reject(error); }); }); + }).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') { + return Promise.reject(response); + } + + return response; }); } diff --git a/src/lang/en.json b/src/lang/en.json index 910e6d617..7dc8b1a09 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -163,6 +163,7 @@ "nograde": "No grade", "none": "None", "nopasswordchangeforced": "You cannot proceed without changing your password.", + "nopermissionerror": "Sorry, but you do not currently have permissions to do that", "nopermissions": "Sorry, but you do not currently have permissions to do that ({{$a}})", "noresults": "No results", "notapplicable": "n/a",