Skip to content
Snippets Groups Projects
Commit 4099f603 authored by Ron Lucke's avatar Ron Lucke Committed by Till Glöggler
Browse files

fix #2756

Closes #2756

Merge request studip/studip!1866
parent e1d1166f
No related branches found
No related tags found
No related merge requests found
...@@ -5,16 +5,26 @@ ...@@ -5,16 +5,26 @@
<col /> <col />
</colgroup> </colgroup>
<thead> <thead>
<tr> <tr class="sortable">
<th><translate>Status</translate></th> <th>{{ $gettext('Status') }}</th>
<th><translate>Aufgabentitel</translate></th> <th :class="getSortClass('task-title')" @click="sort('task-title')">
<th><translate>Teilnehmende/Gruppen</translate></th> {{ $gettext('Aufgabentitel') }}
<th><translate class="responsive-hidden">Seite</translate></th> </th>
<th><translate>bearbeitet</translate></th> <th :class="getSortClass('solver-name')" @click="sort('solver-name')">
<th><translate>Abgabefrist</translate></th> {{ $gettext('Teilnehmende/Gruppen') }}
<th><translate>Abgabe</translate></th> </th>
<th class="responsive-hidden renewal"><translate>Verlängerungsanfrage</translate></th> <th class="responsive-hidden" :class="getSortClass('page-title')" @click="sort('page-title')">
<th class="responsive-hidden feedback"><translate>Feedback</translate></th> {{ $gettext('Seite') }}
</th>
<th :class="getSortClass('progress')" @click="sort('progress')">
{{ $gettext('bearbeitet') }}
</th>
<th :class="getSortClass('submission-date')" @click="sort('submission-date')">
{{ $gettext('Abgabefrist') }}
</th>
<th>{{ $gettext('Abgabe') }}</th>
<th class="responsive-hidden renewal">{{ $gettext('Verlängerungsanfrage') }}</th>
<th class="responsive-hidden feedback">{{ $gettext('Feedback') }}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
...@@ -73,14 +83,14 @@ ...@@ -73,14 +83,14 @@
class="button" class="button"
@click="solveRenewalRequest(task)" @click="solveRenewalRequest(task)"
> >
<translate>Anfrage bearbeiten</translate> {{ $gettext('Anfrage bearbeiten') }}
</button> </button>
<span v-show="task.attributes.renewal === 'declined'"> <span v-show="task.attributes.renewal === 'declined'">
<studip-icon shape="decline" role="status-red" /> <studip-icon shape="decline" role="status-red" />
<translate>Anfrage abgelehnt</translate> {{ $gettext('Anfrage abgelehnt') }}
</span> </span>
<span v-show="task.attributes.renewal === 'granted'"> <span v-show="task.attributes.renewal === 'granted'">
<translate>verlängert bis</translate>: {{ $gettext('verlängert bis') }}:
{{ getReadableDate(task.attributes['renewal-date']) }} {{ getReadableDate(task.attributes['renewal-date']) }}
</span> </span>
<studip-icon <studip-icon
...@@ -102,7 +112,7 @@ ...@@ -102,7 +112,7 @@
" "
> >
<studip-icon shape="accept" role="status-green" /> <studip-icon shape="accept" role="status-green" />
<translate>Feedback gegeben</translate> {{ $gettext('Feedback gegeben') }}
<studip-icon <studip-icon
:title="$gettext('Feedback bearbeiten')" :title="$gettext('Feedback bearbeiten')"
class="edit" class="edit"
...@@ -117,7 +127,7 @@ ...@@ -117,7 +127,7 @@
class="button" class="button"
@click="addFeedback(task)" @click="addFeedback(task)"
> >
<translate>Feedback geben</translate> {{ $gettext('Feedback geben') }}
</button> </button>
</td> </td>
</tr> </tr>
...@@ -147,18 +157,18 @@ ...@@ -147,18 +157,18 @@
<template v-slot:dialogContent> <template v-slot:dialogContent>
<form class="default" @submit.prevent=""> <form class="default" @submit.prevent="">
<label> <label>
<translate>Fristverlängerung</translate> {{ $gettext('Fristverlängerung') }}
<select v-model="currentDialogTask.attributes.renewal"> <select v-model="currentDialogTask.attributes.renewal">
<option value="declined"> <option value="declined">
<translate>ablehnen</translate> {{ $gettext('ablehnen') }}
</option> </option>
<option value="granted"> <option value="granted">
<translate>gewähren</translate> {{ $gettext('gewähren') }}
</option> </option>
</select> </select>
</label> </label>
<label v-if="currentDialogTask.attributes.renewal === 'granted'"> <label v-if="currentDialogTask.attributes.renewal === 'granted'">
<translate>neue Frist</translate> {{ $gettext('neue Frist') }}
<courseware-date-input v-model="currentDialogTask.attributes['renewal-date']" class="size-l" /> <courseware-date-input v-model="currentDialogTask.attributes['renewal-date']" class="size-l" />
</label> </label>
</form> </form>
...@@ -188,7 +198,7 @@ ...@@ -188,7 +198,7 @@
/> />
<form class="default" @submit.prevent=""> <form class="default" @submit.prevent="">
<label> <label>
<translate>Feedback</translate> {{ $gettext('Feedback') }}
<textarea v-model="currentDialogFeedback.attributes.content" /> <textarea v-model="currentDialogFeedback.attributes.content" />
</label> </label>
</form> </form>
...@@ -210,7 +220,7 @@ ...@@ -210,7 +220,7 @@
<template v-slot:dialogContent> <template v-slot:dialogContent>
<form class="default" @submit.prevent=""> <form class="default" @submit.prevent="">
<label> <label>
<translate>Feedback</translate> {{ $gettext('Feedback') }}
<textarea v-model="currentDialogFeedback.attributes.content" /> <textarea v-model="currentDialogFeedback.attributes.content" />
</label> </label>
</form> </form>
...@@ -264,6 +274,8 @@ export default { ...@@ -264,6 +274,8 @@ export default {
close: this.$gettext('Schließen'), close: this.$gettext('Schließen'),
}, },
}, },
sortBy: 'task-title',
sortASC: true,
}; };
}, },
computed: { computed: {
...@@ -278,7 +290,7 @@ export default { ...@@ -278,7 +290,7 @@ export default {
showTasksDistributeDialog: 'showTasksDistributeDialog' showTasksDistributeDialog: 'showTasksDistributeDialog'
}), }),
tasks() { tasks() {
return this.allTasks.map((task) => { const tasks = this.allTasks.map((task) => {
const result = { const result = {
task, task,
taskGroup: this.relatedTaskGroups({ parent: task, relationship: 'task-group' }), taskGroup: this.relatedTaskGroups({ parent: task, relationship: 'task-group' }),
...@@ -287,13 +299,16 @@ export default { ...@@ -287,13 +299,16 @@ export default {
user: null, user: null,
group: null, group: null,
feedback: null, feedback: null,
solverName: null
}; };
let solver = task.relationships.solver.data; let solver = task.relationships.solver.data;
if (solver.type === 'users') { if (solver.type === 'users') {
result.user = this.userById({ id: solver.id }); result.user = this.userById({ id: solver.id });
result.solverName = result.user.attributes['formatted-name'];
} }
if (solver.type === 'status-groups') { if (solver.type === 'status-groups') {
result.group = this.statusGroupById({ id: solver.id }); result.group = this.statusGroupById({ id: solver.id });
result.solverName = result.group.attributes['name'];
} }
const feedbackId = task.relationships['task-feedback'].data?.id; const feedbackId = task.relationships['task-feedback'].data?.id;
...@@ -303,6 +318,8 @@ export default { ...@@ -303,6 +318,8 @@ export default {
return result; return result;
}); });
return this.sortTasks(tasks);
}, },
managerUrl() { managerUrl() {
return STUDIP.URLHelper.getURL('dispatch.php/course/courseware/manager', {cid: this.context.id}); return STUDIP.URLHelper.getURL('dispatch.php/course/courseware/manager', {cid: this.context.id});
...@@ -396,7 +413,69 @@ export default { ...@@ -396,7 +413,69 @@ export default {
include: 'solver, structural-element, task-feedback, task-group, task-group.lecturer' include: 'solver, structural-element, task-feedback, task-group, task-group.lecturer'
} }
}); });
},
getSortClass(col) {
if (col === this.sortBy) {
return this.sortASC ? 'sortasc' : 'sortdesc';
}
},
sort(sortBy) {
if (this.sortBy === sortBy) {
this.sortASC = !this.sortASC;
} else {
this.sortBy = sortBy;
}
},
sortTasks(tasks) {
switch (this.sortBy) {
case 'task-title':
tasks = tasks.sort((a, b) => {
if (this.sortASC) {
return a.taskGroup.attributes.title < b.taskGroup.attributes.title ? -1 : 1;
} else {
return a.taskGroup.attributes.title > b.taskGroup.attributes.title ? -1 : 1;
}
});
break;
case 'solver-name':
tasks = tasks.sort((a, b) => {
if (this.sortASC) {
return a.solverName < b.solverName ? -1 : 1;
} else {
return a.solverName > b.solverName ? -1 : 1;
} }
});
break;
case 'page-title':
tasks = tasks.sort((a, b) => {
if (this.sortASC) {
return a.element.attributes.title < b.element.attributes.title ? -1 : 1;
} else {
return a.element.attributes.title > b.element.attributes.title ? -1 : 1;
}
});
break;
case 'progress':
tasks = tasks.sort((a, b) => {
if (this.sortASC) {
return a.task.attributes.progress < b.task.attributes.progress ? -1 : 1;
} else {
return a.task.attributes.progress > b.task.attributes.progress ? -1 : 1;
}
});
break;
case 'submission-date':
tasks = tasks.sort((a, b) => {
if (this.sortASC) {
return new Date(a.task.attributes['submission-date']) - new Date(b.task.attributes['submission-date']);
} else {
return new Date(b.task.attributes['submission-date']) - new Date(a.task.attributes['submission-date']);
}
});
break;
}
return tasks;
},
}, },
}; };
</script> </script>
...@@ -59,7 +59,12 @@ export default { ...@@ -59,7 +59,12 @@ export default {
return `${STUDIP.URLHelper.base_url}dispatch.php/course/courseware/courseware/${unitId}?cid=${STUDIP.URLHelper.parameters.cid}#/structural_element/${element.id}`; return `${STUDIP.URLHelper.base_url}dispatch.php/course/courseware/courseware/${unitId}?cid=${STUDIP.URLHelper.parameters.cid}#/structural_element/${element.id}`;
}, },
getReadableDate(date) { getReadableDate(date) {
return new Date(date).toLocaleDateString(); let locale = navigator.language ? navigator.language : 'de-DE';
return new Date(date).toLocaleDateString(locale, {
year: "numeric",
month: "2-digit",
day: "2-digit",
});
}, },
}, },
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment