diff --git a/lib/classes/JsonApi/Routes/Courseware/Authority.php b/lib/classes/JsonApi/Routes/Courseware/Authority.php index 1c7c9034192d7bccdffec29beae3320510db3fbd..da1724af36b18b87707a3958072c4af51fb71992 100644 --- a/lib/classes/JsonApi/Routes/Courseware/Authority.php +++ b/lib/classes/JsonApi/Routes/Courseware/Authority.php @@ -328,7 +328,7 @@ class Authority public static function canDeleteTask(User $user, Task $resource): bool { - return self::canCreateTasks($user, $resource->structural_element); + return self::canCreateTasks($user, $resource->structural_element) && !$resource->userIsASolver($user); } public static function canCreateTaskFeedback(User $user, Task $resource): bool diff --git a/lib/classes/JsonApi/Schemas/Courseware/Task.php b/lib/classes/JsonApi/Schemas/Courseware/Task.php index 32d4a187b4dabe6b754dceebb5266681f4cb49b0..a87d335b64ee4bac500ebd0d58ce0a79d8a54e00 100644 --- a/lib/classes/JsonApi/Schemas/Courseware/Task.php +++ b/lib/classes/JsonApi/Schemas/Courseware/Task.php @@ -33,7 +33,7 @@ class Task extends SchemaProvider 'submission-date' => date('c', $resource['submission_date']), 'submitted' => (bool) $resource['submitted'], 'renewal' => empty($resource['renewal']) ? null : (string) $resource['renewal'], - 'renewal-date' => $resource['renewal_date'] ? date('c', $resource['renewal_date']) : null, + 'renewal-date' => date('c', $resource['renewal_date']), 'mkdate' => date('c', $resource['mkdate']), 'chdate' => date('c', $resource['chdate']), ]; diff --git a/resources/vue/components/courseware/CoursewareDashboardStudents.vue b/resources/vue/components/courseware/CoursewareDashboardStudents.vue index 6ad27bfa25d22127c5ac5657e046f59493f6da42..025ad745700ca39e6daac1f2a578aeaa82b5a7b1 100644 --- a/resources/vue/components/courseware/CoursewareDashboardStudents.vue +++ b/resources/vue/components/courseware/CoursewareDashboardStudents.vue @@ -355,6 +355,7 @@ export default { }, solveRenewalRequest(task) { this.currentDialogTask = _.cloneDeep(task); + this.currentDialogTask.attributes['renewal-date'] = new Date().toISOString(); this.showRenewalDialog = true; }, updateRenewal() { diff --git a/resources/vue/components/courseware/CoursewareDashboardTasks.vue b/resources/vue/components/courseware/CoursewareDashboardTasks.vue index 501fc47a56e58bf1a78f245daf5860d90f6fc39e..e1329baebb6c3bc3a61ed10b77238dba5441ff9a 100644 --- a/resources/vue/components/courseware/CoursewareDashboardTasks.vue +++ b/resources/vue/components/courseware/CoursewareDashboardTasks.vue @@ -39,7 +39,7 @@ <td> <a :href="getLinkToElement(element.id)">{{ element.attributes.title }}</a> </td> - <td>{{ task.attributes.progress.toFixed(2) }}%</td> + <td>{{ task.attributes?.progress?.toFixed(2) || '-'}}%</td> <td>{{ getReadableDate(task.attributes['submission-date']) }}</td> <td> <studip-icon v-if="task.attributes.submitted" shape="accept" role="status-green" /> @@ -198,7 +198,7 @@ export default { return menuItems; }, async renewalRequest(task) { - let attributes = {}; + let attributes = task.attributes; attributes.renewal = 'pending'; await this.updateTask({ attributes: attributes,