aboutsummaryrefslogtreecommitdiff
path: root/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue
diff options
context:
space:
mode:
Diffstat (limited to 'resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue')
-rw-r--r--resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue58
1 files changed, 54 insertions, 4 deletions
diff --git a/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue b/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue
index f130f48..929f6bc 100644
--- a/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue
+++ b/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue
@@ -32,10 +32,12 @@
<li
class="cw-ribbon-breadcrumb-item cw-ribbon-breadcrumb-item-current"
:title="structuralElement.attributes.title"
- >
+ >
<span>{{ structuralElement.attributes.title || "–" }}</span>
- <span v-if="isTask">[ {{ solverName }} ]</span>
- <template v-if="!userIsTeacher && inCourse">
+ <span v-if="task">
+ [ {{ (userIsReviewer && isPeerReviewAnonymous) ? $gettext('anonym') : solverName }} ]
+ </span>
+ <template v-if="inCourse && !(userIsTeacher || userIsReviewer)">
<studip-icon
v-if="complete"
shape="accept"
@@ -133,6 +135,18 @@
</button>
</template>
</courseware-companion-box>
+ <courseware-companion-box
+ v-for="peerReview in peerReviews"
+ :key="peerReview.id"
+ mood="pointing"
+ :msgCompanion="$gettext('Sie beurteilen diese Seite im Rahmen eines Peer-Reviews.')"
+ >
+ <template #companionActions>
+ <button class="button" @click="openPeerReviewForm(peerReview)">
+ {{ $gettext('Peer-Review öffnen') }}
+ </button>
+ </template>
+ </courseware-companion-box>
<courseware-empty-element-box
v-if="empty && !showRootLayout"
:canEdit="canEdit"
@@ -610,6 +624,11 @@
<courseware-structural-element-dialog-export v-if="showExportDialog" :structuralElement="currentElement" />
<courseware-structural-element-dialog-export-pdf v-if="showPdfExportDialog" :structuralElement="currentElement" />
<courseware-structural-element-dialog-add-chooser v-if="showAddChooserDialog" />
+ <PeerReviewAssessmentDialog
+ v-model="showPeerReviewForm"
+ v-if="selectedPeerReview"
+ :review="selectedPeerReview"
+ />
<feedback-dialog
v-if="showFeedbackDialog"
:feedbackElementId="parseInt(feedbackElementId)"
@@ -669,6 +688,7 @@ import CoursewareStructuralElementDiscussion from './CoursewareStructuralElement
import CoursewareStructuralElementPermissions from './CoursewareStructuralElementPermissions.vue';
import CoursewareContentPermissions from '../CoursewareContentPermissions.vue';
import CoursewareWelcomeScreen from './CoursewareWelcomeScreen.vue';
+import PeerReviewAssessmentDialog from '../tasks/peer-review/AssessmentDialog.vue';
import CoursewareExport from '@/vue/mixins/courseware/export.js';
import CoursewareOerMessage from '@/vue/mixins/courseware/oermessage.js';
import colorMixin from '@/vue/mixins/courseware/colors.js';
@@ -713,6 +733,7 @@ export default {
StudipFiveStars,
FocusTrap,
IsoDate,
+ PeerReviewAssessmentDialog,
StockImageSelector,
StudipDialog,
StudipProgressIndicator,
@@ -779,6 +800,8 @@ export default {
uploadImageURL: null,
showStockImageSelector: false,
selectedStockImage: null,
+ showPeerReviewForm: false,
+ selectedPeerReview: null,
displayFeedback: false,
showRatingPopup: false,
@@ -795,6 +818,8 @@ export default {
consumeMode: 'consumeMode',
containerById: 'courseware-containers/byId',
relatedContainers: 'courseware-containers/related',
+ relatedPeerReviewProcesses: 'courseware-peer-review-processes/related',
+ relatedPeerReviews: 'courseware-peer-reviews/related',
relatedStructuralElements: 'courseware-structural-elements/related',
getRelatedFeedback: 'courseware-structural-element-feedback/related',
getRelatedComments: 'courseware-structural-element-comments/related',
@@ -1409,6 +1434,27 @@ export default {
),
{ length: this.commentsCounter });
},
+ userIsReviewer() {
+ return this.task ? this.task.attributes['can-peer-review'] : false;
+ },
+ peerReviews() {
+ if (this.isTask && this.userIsReviewer) {
+ return this.relatedPeerReviews({
+ parent: { id: this.task.id, type: this.task.type },
+ relationship: 'peer-reviews',
+ });
+ }
+ return [];
+ },
+ isPeerReviewAnonymous() {
+ return this.peerReviews.every(({ id, type }) => {
+ const process = this.relatedPeerReviewProcesses({
+ parent: { id, type },
+ relationship: 'process',
+ });
+ return process.attributes.configuration.anonymous;
+ });
+ },
},
methods: {
@@ -1951,7 +1997,11 @@ export default {
submitFeedback() {
this.showRatingPopup = false;
this.companionSuccess({ info: this.$gettext('Feedback wurde abgegeben.') });
- }
+ },
+ openPeerReviewForm(peerReview) {
+ this.selectedPeerReview = peerReview;
+ this.showPeerReviewForm = true;
+ },
},
created() {
this.pluginManager.registerComponentsLocally(this);