17 $this->assignment = $a_assignment;
18 $this->assignment_id = $a_assignment->
getId();
25 $set = $ilDB->query(
"SELECT count(*) cnt".
26 " FROM exc_assignment_peer".
27 " WHERE ass_id = ".$ilDB->quote($this->assignment_id,
"integer"));
28 $cnt = $ilDB->fetchAssoc($set);
29 return (
bool)$cnt[
"cnt"];
39 $set = $ilDB->query(
"SELECT DISTINCT(user_id)".
41 " WHERE ass_id = ".$ilDB->quote($this->assignment_id,
"integer").
42 " AND (filename IS NOT NULL OR atext IS NOT NULL)");
43 while(
$row = $ilDB->fetchAssoc($set))
45 $user_ids[] =
$row[
"user_id"];
57 if (!$this->assignment->afterDeadlineStrict())
67 if(
sizeof($user_ids) < 2)
72 $rater_ids = $user_ids;
75 $max = min(
sizeof($user_ids)-1, $this->assignment->getPeerReviewMin());
76 for($loop = 0; $loop < $max; $loop++)
78 $run_ids = array_combine($user_ids, $user_ids);
80 foreach($rater_ids as $rater_id)
82 $possible_peer_ids = $run_ids;
85 unset($possible_peer_ids[$rater_id]);
88 if(array_key_exists($rater_id, $matrix))
90 $possible_peer_ids = array_diff($possible_peer_ids, $matrix[$rater_id]);
94 if(!
sizeof($possible_peer_ids))
97 $run_ids = array_combine($user_ids, $user_ids);
100 $possible_peer_ids = $run_ids;
103 unset($possible_peer_ids[$rater_id]);
106 if(array_key_exists($rater_id, $matrix))
108 $possible_peer_ids = array_diff($possible_peer_ids, $matrix[$rater_id]);
113 if(
sizeof($possible_peer_ids))
115 $peer_id = array_rand($possible_peer_ids);
116 if(!array_key_exists($rater_id, $matrix))
118 $matrix[$rater_id] =
array();
120 $matrix[$rater_id][] = $peer_id;
124 unset($run_ids[$peer_id]);
128 foreach($matrix as $rater_id => $peer_ids)
130 foreach($peer_ids as $peer_id)
132 $ilDB->manipulate(
"INSERT INTO exc_assignment_peer".
133 " (ass_id, giver_id, peer_id)".
134 " VALUES (".$ilDB->quote($this->assignment_id,
"integer").
135 ", ".$ilDB->quote($rater_id,
"integer").
136 ", ".$ilDB->quote($peer_id,
"integer").
")");
154 foreach(array_keys($reviews) as $giver_id)
158 foreach($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit)
160 $crit->setPeerReviewContext($this->assignment, $giver_id, $peer_id);
161 $crit->resetReview();
167 $ilDB->manipulate(
"DELETE FROM exc_assignment_peer".
168 " WHERE ass_id = ".$ilDB->quote($this->assignment_id,
"integer"));
178 include_once
"./Modules/Exercise/classes/class.ilExerciseMembers.php";
182 $peer_ids = $invalid_peer_ids = $invalid_giver_ids = $all_reviews =
array();
185 $peer_ids[] = $peer_id;
187 if(!in_array($peer_id, $all_valid) ||
188 !in_array($peer_id, $all_exc))
190 $invalid_peer_ids[] = $peer_id;
192 foreach($reviews as $giver_id =>
$valid)
194 if(!in_array($giver_id, $all_valid) ||
195 !in_array($peer_id, $all_exc))
197 $invalid_giver_ids[] = $giver_id;
201 $all_reviews[$peer_id][$giver_id] =
$valid;
205 $invalid_giver_ids = array_unique($invalid_giver_ids);
207 $missing_user_ids =
array();
208 foreach($all_valid as $user_id)
211 if(!in_array($user_id, $peer_ids))
213 $missing_user_ids[] = $user_id;
217 $not_returned_ids =
array();
218 foreach($all_exc as $user_id)
220 if(!in_array($user_id, $all_valid))
222 $not_returned_ids[] = $user_id;
227 "invalid" => (
sizeof($missing_user_ids) ||
228 sizeof($invalid_peer_ids) ||
229 sizeof($invalid_giver_ids)),
230 "missing_user_ids" => $missing_user_ids,
231 "not_returned_ids" => $not_returned_ids,
232 "invalid_peer_ids" => $invalid_peer_ids,
233 "invalid_giver_ids" => $invalid_giver_ids,
234 "reviews" => $all_reviews);
243 if($item[
"peer_id"] == $a_peer_id)
252 $data = $peer[
"pcomment"];
255 $items = @unserialize(
$data);
256 if(!is_array($items))
274 $set = $ilDB->query(
"SELECT *".
275 " FROM exc_assignment_peer".
276 " WHERE giver_id = ".$ilDB->quote($a_user_id,
"integer").
277 " AND ass_id = ".$ilDB->quote($this->assignment_id,
"integer").
278 " ORDER BY peer_id");
279 while(
$row = $ilDB->fetchAssoc($set))
281 $row[
"seq"] = ++$idx;
293 if($peer[
"peer_id"] == $a_peer_id)
306 $data = $a_data[
"pcomment"];
309 $values = @unserialize(
$data);
310 if(!is_array($values))
324 foreach($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit)
326 $crit_id = $crit->getId()
329 $crit->setPeerReviewContext(
334 if(!$crit->validate($values[$crit_id]))
338 if($crit->hasValue($values[$crit_id]))
354 $set = $ilDB->query(
"SELECT *".
355 " FROM exc_assignment_peer".
356 " WHERE peer_id = ".$ilDB->quote($a_user_id,
"integer").
357 " AND ass_id = ".$ilDB->quote($this->assignment_id,
"integer").
358 " ORDER BY peer_id");
359 while(
$row = $ilDB->fetchAssoc($set))
366 $row[
"seq"] = ++$idx;
380 $set = $ilDB->query(
"SELECT *".
381 " FROM exc_assignment_peer".
382 " WHERE ass_id = ".$ilDB->quote($this->assignment_id,
"integer").
383 " ORDER BY peer_id");
384 while(
$row = $ilDB->fetchAssoc($set))
401 $set = $ilDB->query(
"SELECT ass_id".
402 " FROM exc_assignment_peer".
403 " WHERE giver_id = ".$ilDB->quote($ilUser->getId(),
"integer").
404 " AND peer_id = ".$ilDB->quote($a_peer_id,
"integer").
405 " AND ass_id = ".$ilDB->quote($this->assignment_id,
"integer"));
406 $row = $ilDB->fetchAssoc($set);
407 return (
bool)
$row[
"ass_id"];
414 $ilDB->manipulate(
"UPDATE exc_assignment_peer".
415 " SET tstamp = ".$ilDB->quote(
ilUtil::now(),
"timestamp").
416 " WHERE giver_id = ".$ilDB->quote($ilUser->getId(),
"integer").
417 " AND peer_id = ".$ilDB->quote($a_peer_id,
"integer").
418 " AND ass_id = ".$ilDB->quote($this->assignment_id,
"integer"));
425 $sql =
"UPDATE exc_assignment_peer".
426 " SET tstamp = ".$ilDB->quote(
ilUtil::now(),
"timestamp").
427 ",pcomment = ".$ilDB->quote(serialize($a_values),
"text").
428 " WHERE giver_id = ".$ilDB->quote($ilUser->getId(),
"integer").
429 " AND peer_id = ".$ilDB->quote($a_peer_id,
"integer").
430 " AND ass_id = ".$ilDB->quote($this->assignment_id,
"integer");
432 $ilDB->manipulate($sql);
441 $a_user_id = $ilUser->getId();
446 include_once
'./Services/Rating/classes/class.ilRating.php';
448 $set = $ilDB->query(
"SELECT *".
449 " FROM exc_assignment_peer".
450 " WHERE ass_id = ".$ilDB->quote($this->assignment_id,
"integer").
451 " AND giver_id = ".$ilDB->quote($a_user_id,
"integer"));
452 while(
$row = $ilDB->fetchAssoc($set))
454 if(!(
bool)$a_validate ||
469 $set = $ilDB->query(
"SELECT COUNT(DISTINCT(user_id)) cnt".
470 " FROM exc_returned".
471 " WHERE ass_id = ".$ilDB->quote($this->assignment_id,
"integer"));
472 $cnt = $ilDB->fetchAssoc($set);
473 $cnt = (int)$cnt[
"cnt"];
488 if(!$this->assignment->getPeerReviewSimpleUnlock())
490 $needed = $this->assignment->getPeerReviewMin();
498 $min = min($max, $needed);
512 if(!$this->assignment->afterDeadlineStrict())
526 switch($this->assignment->getPeerReviewValid())
529 return (
bool)$no_of_feedbacks;
533 $min = min($max, $this->assignment->getPeerReviewMin());
535 return (($min-$no_of_feedbacks) < 1);
updatePeerReview($a_peer_id, array $a_values)
getId()
Get assignment id.
countGivenFeedback($a_validate=true, $a_user_id=null)
isFeedbackValidForPassed($a_user_id)
static now()
Return current timestamp in Y-m-d H:i:s format.
const PEER_REVIEW_VALID_ALL
hasPeerReviewAccess($a_peer_id)
getPeerMaskedId($a_giver_id, $a_peer_id)
const PEER_REVIEW_VALID_ONE
getAllPeerReviews($a_only_valid=true)
updatePeerReviewTimestamp($a_peer_id)
getNumberOfMissingFeedbacksForReceived()
validatePeerReview(array $a_data)
getPeerReviewsByGiver($a_user_id)
Create styles array
The data for the language used.
getValidPeerReviewUsers()
const PEER_REVIEW_VALID_NONE
getPeerReviewsByPeerId($a_user_id, $a_only_valid=false)
getPeerReviewValues($a_giver_id, $a_peer_id)
static _getMembers($a_obj_id)
getMaxPossibleFeedbacks()
__construct(ilExAssignment $a_assignment)
validatePeerReviewGroups()