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"];
60 if(
sizeof($user_ids) < 2)
65 $rater_ids = $user_ids;
68 $max = min(
sizeof($user_ids)-1, $this->assignment->getPeerReviewMin());
69 for($loop = 0; $loop < $max; $loop++)
71 $run_ids = array_combine($user_ids, $user_ids);
73 foreach($rater_ids as $rater_id)
75 $possible_peer_ids = $run_ids;
78 unset($possible_peer_ids[$rater_id]);
81 if(array_key_exists($rater_id, $matrix))
83 $possible_peer_ids = array_diff($possible_peer_ids, $matrix[$rater_id]);
87 if(!
sizeof($possible_peer_ids))
90 $run_ids = array_combine($user_ids, $user_ids);
93 $possible_peer_ids = $run_ids;
96 unset($possible_peer_ids[$rater_id]);
99 if(array_key_exists($rater_id, $matrix))
101 $possible_peer_ids = array_diff($possible_peer_ids, $matrix[$rater_id]);
106 if(
sizeof($possible_peer_ids))
108 $peer_id = array_rand($possible_peer_ids);
109 if(!array_key_exists($rater_id, $matrix))
111 $matrix[$rater_id] = array();
113 $matrix[$rater_id][] = $peer_id;
117 unset($run_ids[$peer_id]);
121 foreach($matrix as $rater_id => $peer_ids)
123 foreach($peer_ids as $peer_id)
125 $ilDB->manipulate(
"INSERT INTO exc_assignment_peer".
126 " (ass_id, giver_id, peer_id)".
127 " VALUES (".$ilDB->quote($this->assignment_id,
"integer").
128 ", ".$ilDB->quote($rater_id,
"integer").
129 ", ".$ilDB->quote($peer_id,
"integer").
")");
147 foreach(array_keys($reviews) as $giver_id)
151 foreach($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit)
153 $crit->setPeerReviewContext($this->assignment, $giver_id, $peer_id);
154 $crit->resetReview();
160 $ilDB->manipulate(
"DELETE FROM exc_assignment_peer".
161 " WHERE ass_id = ".$ilDB->quote($this->assignment_id,
"integer"));
171 include_once
"./Modules/Exercise/classes/class.ilExerciseMembers.php";
175 $peer_ids = $invalid_peer_ids = $invalid_giver_ids = $all_reviews = array();
178 $peer_ids[] = $peer_id;
180 if(!in_array($peer_id, $all_valid) ||
181 !in_array($peer_id, $all_exc))
183 $invalid_peer_ids[] = $peer_id;
185 foreach($reviews as $giver_id =>
$valid)
187 if(!in_array($giver_id, $all_valid) ||
188 !in_array($peer_id, $all_exc))
190 $invalid_giver_ids[] = $giver_id;
194 $all_reviews[$peer_id][$giver_id] =
$valid;
198 $invalid_giver_ids = array_unique($invalid_giver_ids);
200 $missing_user_ids = array();
201 foreach($all_valid as $user_id)
204 if(!in_array($user_id, $peer_ids))
206 $missing_user_ids[] = $user_id;
210 $not_returned_ids = array();
211 foreach($all_exc as $user_id)
213 if(!in_array($user_id, $all_valid))
215 $not_returned_ids[] = $user_id;
220 "invalid" => (
sizeof($missing_user_ids) ||
221 sizeof($invalid_peer_ids) ||
222 sizeof($invalid_giver_ids)),
223 "missing_user_ids" => $missing_user_ids,
224 "not_returned_ids" => $not_returned_ids,
225 "invalid_peer_ids" => $invalid_peer_ids,
226 "invalid_giver_ids" => $invalid_giver_ids,
227 "reviews" => $all_reviews);
236 if($item[
"peer_id"] == $a_peer_id)
245 $data = $peer[
"pcomment"];
248 $items = @unserialize(
$data);
249 if(!is_array($items))
252 $items = array(
"text"=>
$data);
267 $set = $ilDB->query(
"SELECT *".
268 " FROM exc_assignment_peer".
269 " WHERE giver_id = ".$ilDB->quote($a_user_id,
"integer").
270 " AND ass_id = ".$ilDB->quote($this->assignment_id,
"integer").
271 " ORDER BY peer_id");
272 while(
$row = $ilDB->fetchAssoc($set))
274 $row[
"seq"] = ++$idx;
286 if($peer[
"peer_id"] == $a_peer_id)
299 $data = $a_data[
"pcomment"];
302 $values = @unserialize(
$data);
303 if(!is_array($values))
306 $values = array(
"text"=>
$data);
317 foreach($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit)
319 $crit_id = $crit->getId()
322 $crit->setPeerReviewContext(
327 if(!$crit->validate($values[$crit_id]))
331 if($crit->hasValue($values[$crit_id]))
347 $set = $ilDB->query(
"SELECT *".
348 " FROM exc_assignment_peer".
349 " WHERE peer_id = ".$ilDB->quote($a_user_id,
"integer").
350 " AND ass_id = ".$ilDB->quote($this->assignment_id,
"integer").
351 " ORDER BY peer_id");
352 while(
$row = $ilDB->fetchAssoc($set))
359 $row[
"seq"] = ++$idx;
373 $set = $ilDB->query(
"SELECT *".
374 " FROM exc_assignment_peer".
375 " WHERE ass_id = ".$ilDB->quote($this->assignment_id,
"integer").
376 " ORDER BY peer_id");
377 while(
$row = $ilDB->fetchAssoc($set))
394 $set = $ilDB->query(
"SELECT ass_id".
395 " FROM exc_assignment_peer".
396 " WHERE giver_id = ".$ilDB->quote($ilUser->getId(),
"integer").
397 " AND peer_id = ".$ilDB->quote($a_peer_id,
"integer").
398 " AND ass_id = ".$ilDB->quote($this->assignment_id,
"integer"));
399 $row = $ilDB->fetchAssoc($set);
400 return (
bool)
$row[
"ass_id"];
407 $ilDB->manipulate(
"UPDATE exc_assignment_peer".
408 " SET tstamp = ".$ilDB->quote(
ilUtil::now(),
"timestamp").
409 " WHERE giver_id = ".$ilDB->quote($ilUser->getId(),
"integer").
410 " AND peer_id = ".$ilDB->quote($a_peer_id,
"integer").
411 " AND ass_id = ".$ilDB->quote($this->assignment_id,
"integer"));
418 $sql =
"UPDATE exc_assignment_peer".
419 " SET tstamp = ".$ilDB->quote(
ilUtil::now(),
"timestamp").
420 ",pcomment = ".$ilDB->quote(serialize($a_values),
"text").
421 " WHERE giver_id = ".$ilDB->quote($ilUser->getId(),
"integer").
422 " AND peer_id = ".$ilDB->quote($a_peer_id,
"integer").
423 " AND ass_id = ".$ilDB->quote($this->assignment_id,
"integer");
425 $ilDB->manipulate($sql);
434 $a_user_id = $ilUser->getId();
439 include_once
'./Services/Rating/classes/class.ilRating.php';
441 $set = $ilDB->query(
"SELECT *".
442 " FROM exc_assignment_peer".
443 " WHERE ass_id = ".$ilDB->quote($this->assignment_id,
"integer").
444 " AND giver_id = ".$ilDB->quote($a_user_id,
"integer"));
445 while(
$row = $ilDB->fetchAssoc($set))
447 if(!(
bool)$a_validate ||
462 $set = $ilDB->query(
"SELECT COUNT(DISTINCT(user_id)) cnt".
463 " FROM exc_returned".
464 " WHERE ass_id = ".$ilDB->quote($this->assignment_id,
"integer"));
465 $cnt = $ilDB->fetchAssoc($set);
466 $cnt = (int)$cnt[
"cnt"];
481 if(!$this->assignment->getPeerReviewSimpleUnlock())
483 $needed = $this->assignment->getPeerReviewMin();
491 $min = min($max, $needed);
505 if(!$this->assignment->afterDeadlineStrict())
519 switch($this->assignment->getPeerReviewValid())
522 return (
bool)$no_of_feedbacks;
526 $min = min($max, $this->assignment->getPeerReviewMin());
528 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)
getValidPeerReviewUsers()
const PEER_REVIEW_VALID_NONE
getPeerReviewsByPeerId($a_user_id, $a_only_valid=false)
getPeerReviewValues($a_giver_id, $a_peer_id)
getMaxPossibleFeedbacks()
__construct(ilExAssignment $a_assignment)
validatePeerReviewGroups()