aboutsummaryrefslogtreecommitdiff
path: root/lib/models/Courseware/Task.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/models/Courseware/Task.php')
-rw-r--r--lib/models/Courseware/Task.php41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/models/Courseware/Task.php b/lib/models/Courseware/Task.php
index d409676..3d82b64 100644
--- a/lib/models/Courseware/Task.php
+++ b/lib/models/Courseware/Task.php
@@ -78,6 +78,14 @@ class Task extends \SimpleORMap
'foreign_key' => 'feedback_id',
];
+ $config['has_many']['peer_reviews'] = [
+ 'class_name' => PeerReview::class,
+ 'assoc_foreign_key' => 'task_id',
+ 'on_delete' => 'delete',
+ 'on_store' => 'store',
+ 'order_by' => 'ORDER BY mkdate',
+ ];
+
$config['additional_fields']['solver'] = [
'get' => 'getSolver',
'set' => false,
@@ -162,6 +170,14 @@ class Task extends \SimpleORMap
}
/**
+ * @param \User|\Seminar_User $user
+ */
+ public function userIsAPeerReviewer($user): bool
+ {
+ return $this->isPeerReviewed() && $this->isPeerReviewedBy($user);
+ }
+
+ /**
* @return \User|\Statusgruppen|null the solver
*/
public function getSolver()
@@ -235,6 +251,31 @@ class Task extends \SimpleORMap
$this->store();
}
+ public function isPeerReviewed(): bool
+ {
+ return PeerReview::countBySql('task_id = ?', [$this->getId()]) !== 0;
+ }
+
+ /**
+ * @param \User|\Seminar_User $user
+ */
+ public function isPeerReviewedBy($user): bool
+ {
+ $sql = 'task_id = ? AND reviewer_id = ? AND reviewer_type = "autor"';
+ if (PeerReview::countBySql($sql, [$this->getId(), $user->id]) !== 0) {
+ return true;
+ }
+
+ $sql = 'SELECT reviewer_id FROM cw_peer_reviews WHERE task_id = ? AND reviewer_type = "group"';
+ foreach (\DBManager::get()->fetchFirst($sql, [$this->getId()]) as $reviewerId) {
+ if (\Statusgruppen::isMemberOf($reviewerId, $user->id)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
private function getStructuralElementProgress(StructuralElement $structural_element): float
{
$containers = Container::findBySQL('structural_element_id = ?', [intval($structural_element->id)]);