40 $this->db = $DIC->database();
41 $this->
user = $DIC->user();
42 $this->assignment = $a_assignment;
43 $this->assignment_id = $a_assignment->
getId();
51 $set =
$ilDB->query(
"SELECT count(*) cnt" .
52 " FROM exc_assignment_peer" .
53 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
54 $cnt =
$ilDB->fetchAssoc($set);
55 return (
bool) $cnt[
"cnt"];
68 $set =
$ilDB->query(
"SELECT DISTINCT(user_id)" .
69 " FROM exc_returned" .
70 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
71 " AND (filename IS NOT NULL OR atext IS NOT NULL)");
72 while ($row =
$ilDB->fetchAssoc($set)) {
73 $user_ids[] = (
int) $row[
"user_id"];
84 if (!$this->assignment->afterDeadlineStrict()) {
93 foreach ($user_ids as $rater_id) {
94 foreach ($distribution->getPeersOfRater($rater_id) as $peer_id) {
95 $ilDB->manipulate(
"INSERT INTO exc_assignment_peer" .
96 " (ass_id, giver_id, peer_id)" .
97 " VALUES (" .
$ilDB->quote($this->assignment_id,
"integer") .
98 ", " .
$ilDB->quote($rater_id,
"integer") .
99 ", " .
$ilDB->quote($peer_id,
"integer") .
")");
117 foreach (array_keys($reviews) as $giver_id) {
120 foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
121 $crit->setPeerReviewContext($this->assignment, $giver_id, $peer_id);
122 $crit->resetReview();
128 $ilDB->manipulate(
"DELETE FROM exc_assignment_peer" .
129 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
141 $peer_ids = $invalid_peer_ids = $invalid_giver_ids = $all_reviews = array();
143 $peer_ids[] = $peer_id;
145 if (!in_array($peer_id, $all_valid) ||
146 !in_array($peer_id, $all_exc)) {
147 $invalid_peer_ids[] = $peer_id;
149 foreach ($reviews as $giver_id =>
$valid) {
150 if (!in_array($giver_id, $all_valid) ||
151 !in_array($peer_id, $all_exc)) {
152 $invalid_giver_ids[] = $giver_id;
154 $all_reviews[$peer_id][$giver_id] =
$valid;
158 $invalid_giver_ids = array_unique($invalid_giver_ids);
160 $missing_user_ids = array();
161 foreach ($all_valid as $user_id) {
163 if (!in_array($user_id, $peer_ids)) {
164 $missing_user_ids[] = $user_id;
168 $not_returned_ids = array();
169 foreach ($all_exc as $user_id) {
170 if (!in_array($user_id, $all_valid)) {
171 $not_returned_ids[] = $user_id;
176 "invalid" => (count($missing_user_ids) ||
177 count($invalid_peer_ids) ||
178 count($invalid_giver_ids)),
179 "missing_user_ids" => $missing_user_ids,
180 "not_returned_ids" => $not_returned_ids,
181 "invalid_peer_ids" => $invalid_peer_ids,
182 "invalid_giver_ids" => $invalid_giver_ids,
183 "reviews" => $all_reviews);
195 if ($item[
"peer_id"] == $a_peer_id) {
202 $data = $peer[
"pcomment"];
204 $items = unserialize(
$data, [
'allowed_classes' =>
false]);
205 if (!is_array($items)) {
207 $items = array(
"text" =>
$data);
222 $set =
$ilDB->query(
"SELECT *" .
223 " FROM exc_assignment_peer" .
224 " WHERE giver_id = " .
$ilDB->quote($a_user_id,
"integer") .
225 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
226 " ORDER BY peer_id");
227 while ($row =
$ilDB->fetchAssoc($set)) {
228 $row[
"seq"] = ++$idx;
241 if ($peer[
"peer_id"] == $a_peer_id) {
242 return (
int) $peer[
"seq"];
253 $data = $a_data[
"pcomment"];
256 $values = unserialize(
$data, [
'allowed_classes' =>
false]);
259 if (!is_array($values)) {
261 $values = array(
"text" =>
$data);
265 foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
266 $crit_id = $crit->getId()
269 $crit->setPeerReviewContext(
274 if (!$crit->validate($values[$crit_id] ?? null)) {
277 if ($crit->hasValue($values[$crit_id] ?? null)) {
287 bool $a_only_valid =
false 294 $set =
$ilDB->query(
"SELECT *" .
295 " FROM exc_assignment_peer" .
296 " WHERE peer_id = " .
$ilDB->quote($a_user_id,
"integer") .
297 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
298 " ORDER BY peer_id");
299 while ($row =
$ilDB->fetchAssoc($set)) {
300 if (!$a_only_valid ||
304 $row[
"seq"] = ++$idx;
313 bool $a_only_valid =
true 319 $set =
$ilDB->query(
"SELECT *" .
320 " FROM exc_assignment_peer" .
321 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
322 " ORDER BY peer_id");
323 while ($row =
$ilDB->fetchAssoc($set)) {
325 if (!$a_only_valid ||
327 $res[$row[
"peer_id"]][$row[
"giver_id"]] =
$valid;
340 $set =
$ilDB->query(
"SELECT ass_id" .
341 " FROM exc_assignment_peer" .
342 " WHERE giver_id = " .
$ilDB->quote(
$ilUser->getId(),
"integer") .
343 " AND peer_id = " .
$ilDB->quote($a_peer_id,
"integer") .
344 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
345 $row =
$ilDB->fetchAssoc($set);
346 return ((
int) ($row[
"ass_id"] ?? 0) > 0);
355 $ilDB->manipulate(
"UPDATE exc_assignment_peer" .
357 " WHERE giver_id = " .
$ilDB->quote(
$ilUser->getId(),
"integer") .
358 " AND peer_id = " .
$ilDB->quote($a_peer_id,
"integer") .
359 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
370 "pcomment" => serialize($a_values),
371 "peer_id" => $a_peer_id,
376 $sql =
"UPDATE exc_assignment_peer" .
378 ",pcomment = " .
$ilDB->quote(serialize($a_values),
"text") .
379 ",is_valid = " .
$ilDB->quote((
int)
$valid,
"integer") .
380 " WHERE giver_id = " .
$ilDB->quote(
$ilUser->getId(),
"integer") .
381 " AND peer_id = " .
$ilDB->quote($a_peer_id,
"integer") .
382 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer");
384 $ilDB->manipulate($sql);
388 bool $a_validate =
true,
389 int $a_user_id = null
400 $set =
$ilDB->query(
"SELECT *" .
401 " FROM exc_assignment_peer" .
402 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
403 " AND giver_id = " .
$ilDB->quote($a_user_id,
"integer"));
404 while ($row =
$ilDB->fetchAssoc($set)) {
419 $set =
$ilDB->query(
"SELECT COUNT(DISTINCT(user_id)) cnt" .
420 " FROM exc_returned" .
421 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
422 $cnt =
$ilDB->fetchAssoc($set);
423 $cnt = (
int) $cnt[
"cnt"];
437 if (!$this->assignment->getPeerReviewSimpleUnlock()) {
438 $needed = $this->assignment->getPeerReviewMin();
443 $min = min($max, $needed);
455 if (!$this->assignment->afterDeadlineStrict()) {
467 switch ($this->assignment->getPeerReviewValid()) {
469 return (
bool) $no_of_feedbacks;
473 $min = min($max, $this->assignment->getPeerReviewMin());
475 return (($min - $no_of_feedbacks) < 1);
484 $ilDB = $DIC->database();
488 "SELECT DISTINCT(giver_id) FROM exc_assignment_peer " .
489 " WHERE ass_id = " .
$ilDB->quote($a_ass_id,
"integer") .
490 " AND tstamp is NULL" 493 while ($row =
$ilDB->fetchAssoc($set)) {
494 $user_ids[] = $row[
"giver_id"];
static getLogger(string $a_component_id)
Get component logger.
countGivenFeedback(bool $a_validate=true, int $a_user_id=null)
getPeerReviewsByPeerId(int $a_user_id, bool $a_only_valid=false)
isFeedbackValidForPassed(int $a_user_id)
static lookupGiversWithPendingFeedback(int $a_ass_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
ilExAssignment $assignment
static now()
Return current timestamp in Y-m-d H:i:s format.
const PEER_REVIEW_VALID_ALL
const PEER_REVIEW_VALID_ONE
updatePeerReviewTimestamp(int $a_peer_id)
getNumberOfMissingFeedbacksForReceived()
getPeerMaskedId(int $a_giver_id, int $a_peer_id)
validatePeerReview(array $a_data)
getPeerReviewsByGiver(int $a_user_id)
getPeerReviewValues(int $a_giver_id, int $a_peer_id)
hasPeerReviewAccess(int $a_peer_id)
updatePeerReview(int $a_peer_id, array $a_values)
getValidPeerReviewUsers()
Calculates peer review distribution (rater to peer assignments)
const PEER_REVIEW_VALID_NONE
getAllPeerReviews(bool $a_only_valid=true)
static _getMembers(int $a_obj_id)
getMaxPossibleFeedbacks()
__construct(ilExAssignment $a_assignment)
validatePeerReviewGroups()