diff --git a/scripts/langindex.json b/scripts/langindex.json
index be537c0a24a..df42ad92332 100644
--- a/scripts/langindex.json
+++ b/scripts/langindex.json
@@ -496,7 +496,7 @@
"addon.mod_chat.nosessionsfound": "local_moodlemobileapp",
"addon.mod_chat.saidto": "chat",
"addon.mod_chat.send": "chat",
- "addon.mod_chat.sessionstart": "chat",
+ "addon.mod_chat.sessionstartsin": "chat",
"addon.mod_chat.showincompletesessions": "local_moodlemobileapp",
"addon.mod_chat.talk": "chat",
"addon.mod_chat.viewreport": "chat",
diff --git a/scripts/update_lang_functions.sh b/scripts/update_lang_functions.sh
index 5ae2e83ab67..42834411bdf 100755
--- a/scripts/update_lang_functions.sh
+++ b/scripts/update_lang_functions.sh
@@ -22,7 +22,7 @@ function copy_lang {
lang=$1
index_keys=$(jq -r 'to_entries[] | "\"\(.key)\","' langindex.json)
- index_keys=${index_keys:0:-1}
+ index_keys=${index_keys:0:${#index_keys}-1}
hyphenlang=${lang/_/-}
langfilepath=$LANG_PATH/$hyphenlang.json
diff --git a/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html b/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html
index 90b30bb60a7..15e20f18e3a 100644
--- a/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html
+++ b/src/addons/mod/assign/components/submission/addon-mod-assign-submission.html
@@ -200,13 +200,21 @@
{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}
{{ 'addon.mod_assign.editsubmission' | translate }}
-
+
{{ 'addon.mod_assign.erroreditpluginsnotsupported' | translate }}
- {{ name }}
+
+
+ {{ 'core.openinbrowser' | translate }}
+
+
+
{{ 'addon.mod_assign.cannoteditduetostatementsubmission' | translate }}
diff --git a/src/addons/mod/assign/components/submission/submission.ts b/src/addons/mod/assign/components/submission/submission.ts
index c045ff47a89..9a2077ab858 100644
--- a/src/addons/mod/assign/components/submission/submission.ts
+++ b/src/addons/mod/assign/components/submission/submission.ts
@@ -127,6 +127,7 @@ export class AddonModAssignSubmissionComponent implements OnInit, OnDestroy, Can
canSaveGrades = false; // Whether the user can save the grades.
allowAddAttempt = false; // Allow adding a new attempt when grading.
gradeUrl?: string; // URL to grade in browser.
+ submissionUrl?: string; // URL to add/edit a submission in browser.
isPreviousAttemptEmpty = true; // Whether the previous attempt contains an empty submission.
showDates = false; // Whether to show some dates.
timeLimitFinished = false; // Whether there is a time limit and it finished, so the user will submit late.
@@ -788,6 +789,12 @@ export class AddonModAssignSubmissionComponent implements OnInit, OnDestroy, Can
*/
protected async loadUnsupportedPlugins(): Promise {
this.unsupportedEditPlugins = await AddonModAssign.getUnsupportedEditPlugins(this.userSubmission?.plugins || []);
+
+ if (this.unsupportedEditPlugins && !this.submissionUrl) {
+ const mod = await CoreCourse.getModule(this.moduleId, this.courseId, undefined, true);
+ this.submissionUrl = `${mod.url}&action=editsubmission`;
+ }
+
}
/**
diff --git a/src/addons/mod/chat/components/index/addon-mod-chat-index.html b/src/addons/mod/chat/components/index/addon-mod-chat-index.html
index 612815bbd79..a10e1a5f146 100644
--- a/src/addons/mod/chat/components/index/addon-mod-chat-index.html
+++ b/src/addons/mod/chat/components/index/addon-mod-chat-index.html
@@ -13,10 +13,10 @@
[courseId]="courseId" (completionChanged)="onCompletionChange()">
-
+
- {{ 'addon.mod_chat.sessionstart' | translate:{$a: chatInfo} }}
+ {{ 'addon.mod_chat.sessionstartsin' | translate:{$a: chatTime} }}
diff --git a/src/addons/mod/chat/components/index/index.ts b/src/addons/mod/chat/components/index/index.ts
index b298143c046..8f2941d1d05 100644
--- a/src/addons/mod/chat/components/index/index.ts
+++ b/src/addons/mod/chat/components/index/index.ts
@@ -34,10 +34,7 @@ export class AddonModChatIndexComponent extends CoreCourseModuleMainActivityComp
component = AddonModChatProvider.COMPONENT;
pluginName = 'chat';
chat?: AddonModChatChat;
- chatInfo?: {
- date: string;
- fromnow: string;
- };
+ chatTime?: string;
constructor(
protected content?: IonContent,
@@ -62,17 +59,11 @@ export class AddonModChatIndexComponent extends CoreCourseModuleMainActivityComp
this.chat = await AddonModChat.getChat(this.courseId, this.module.id);
this.description = this.chat.intro;
- const now = CoreTimeUtils.timestamp();
- const span = (this.chat.chattime || 0) - now;
-
- if (this.chat.chattime && this.chat.schedule && span > 0) {
- this.chatInfo = {
- date: CoreTimeUtils.userDate(this.chat.chattime * 1000),
- fromnow: CoreTime.formatTime(span),
- };
- } else {
- this.chatInfo = undefined;
- }
+ const chatTimeSeconds = (this.chat.chattime || 0) - CoreTimeUtils.timestamp();
+
+ this.chatTime = this.chat.schedule && chatTimeSeconds > 0
+ ? CoreTime.formatTime(chatTimeSeconds)
+ : undefined;
this.dataRetrieved.emit(this.chat);
}
diff --git a/src/addons/mod/chat/lang.json b/src/addons/mod/chat/lang.json
index 5826b5126a3..1702aa79f57 100644
--- a/src/addons/mod/chat/lang.json
+++ b/src/addons/mod/chat/lang.json
@@ -22,7 +22,7 @@
"nosessionsfound": "No sessions found",
"saidto": "said to",
"send": "Send",
- "sessionstart": "The next chat session will start on {{$a.date}}, ({{$a.fromnow}} from now)",
+ "sessionstartsin": "The next chat session will start {{$a}} from now.",
"showincompletesessions": "Show incomplete sessions",
"talk": "Talk",
"viewreport": "Past sessions"