29 $this->db = $DIC->database();
30 $this->
user = $DIC->user();
31 $this->assignment = $a_assignment;
32 $this->assignment_id = $a_assignment->
getId();
39 $set =
$ilDB->query(
"SELECT count(*) cnt" .
40 " FROM exc_assignment_peer" .
41 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
42 $cnt =
$ilDB->fetchAssoc($set);
43 return (
bool) $cnt[
"cnt"];
53 $set =
$ilDB->query(
"SELECT DISTINCT(user_id)" .
54 " FROM exc_returned" .
55 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
56 " AND (filename IS NOT NULL OR atext IS NOT NULL)");
58 $user_ids[] =
$row[
"user_id"];
69 if (!$this->assignment->afterDeadlineStrict()) {
77 if (
sizeof($user_ids) < 2) {
81 $rater_ids = $user_ids;
84 $max = min(
sizeof($user_ids)-1, $this->assignment->getPeerReviewMin());
85 for ($loop = 0; $loop < $max; $loop++) {
86 $run_ids = array_combine($user_ids, $user_ids);
88 foreach ($rater_ids as $rater_id) {
89 $possible_peer_ids = $run_ids;
92 unset($possible_peer_ids[$rater_id]);
95 if (array_key_exists($rater_id, $matrix)) {
96 $possible_peer_ids = array_diff($possible_peer_ids, $matrix[$rater_id]);
100 if (!
sizeof($possible_peer_ids)) {
102 $run_ids = array_combine($user_ids, $user_ids);
105 $possible_peer_ids = $run_ids;
108 unset($possible_peer_ids[$rater_id]);
111 if (array_key_exists($rater_id, $matrix)) {
112 $possible_peer_ids = array_diff($possible_peer_ids, $matrix[$rater_id]);
117 if (
sizeof($possible_peer_ids)) {
118 $peer_id = array_rand($possible_peer_ids);
119 if (!array_key_exists($rater_id, $matrix)) {
120 $matrix[$rater_id] =
array();
122 $matrix[$rater_id][] = $peer_id;
126 unset($run_ids[$peer_id]);
130 foreach ($matrix as $rater_id => $peer_ids) {
131 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") .
")");
151 foreach (array_keys($reviews) as $giver_id) {
154 foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
155 $crit->setPeerReviewContext($this->assignment, $giver_id, $peer_id);
156 $crit->resetReview();
162 $ilDB->manipulate(
"DELETE FROM exc_assignment_peer" .
163 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
172 include_once
"./Modules/Exercise/classes/class.ilExerciseMembers.php";
176 $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)) {
182 $invalid_peer_ids[] = $peer_id;
184 foreach ($reviews as $giver_id =>
$valid) {
185 if (!in_array($giver_id, $all_valid) ||
186 !in_array($peer_id, $all_exc)) {
187 $invalid_giver_ids[] = $giver_id;
189 $all_reviews[$peer_id][$giver_id] =
$valid;
193 $invalid_giver_ids = array_unique($invalid_giver_ids);
195 $missing_user_ids =
array();
196 foreach ($all_valid as $user_id) {
198 if (!in_array($user_id, $peer_ids)) {
199 $missing_user_ids[] = $user_id;
203 $not_returned_ids =
array();
204 foreach ($all_exc as $user_id) {
205 if (!in_array($user_id, $all_valid)) {
206 $not_returned_ids[] = $user_id;
211 "invalid" => (
sizeof($missing_user_ids) ||
212 sizeof($invalid_peer_ids) ||
213 sizeof($invalid_giver_ids)),
214 "missing_user_ids" => $missing_user_ids,
215 "not_returned_ids" => $not_returned_ids,
216 "invalid_peer_ids" => $invalid_peer_ids,
217 "invalid_giver_ids" => $invalid_giver_ids,
218 "reviews" => $all_reviews);
226 if ($item[
"peer_id"] == $a_peer_id) {
233 $data = $peer[
"pcomment"];
235 $items = @unserialize(
$data);
236 if (!is_array($items)) {
252 $set =
$ilDB->query(
"SELECT *" .
253 " FROM exc_assignment_peer" .
254 " WHERE giver_id = " .
$ilDB->quote($a_user_id,
"integer") .
255 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
256 " ORDER BY peer_id");
258 $row[
"seq"] = ++$idx;
269 if ($peer[
"peer_id"] == $a_peer_id) {
281 $data = $a_data[
"pcomment"];
283 $values = @unserialize(
$data);
284 if (!is_array($values)) {
297 foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
298 $crit_id = $crit->getId()
301 $crit->setPeerReviewContext(
306 if (!$crit->validate($values[$crit_id])) {
309 if ($crit->hasValue($values[$crit_id])) {
324 $set =
$ilDB->query(
"SELECT *" .
325 " FROM exc_assignment_peer" .
326 " WHERE peer_id = " .
$ilDB->quote($a_user_id,
"integer") .
327 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
328 " ORDER BY peer_id");
330 if (!$a_only_valid ||
334 $row[
"seq"] = ++$idx;
348 $set =
$ilDB->query(
"SELECT *" .
349 " FROM exc_assignment_peer" .
350 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
351 " ORDER BY peer_id");
354 if (!$a_only_valid ||
368 $set =
$ilDB->query(
"SELECT ass_id" .
369 " FROM exc_assignment_peer" .
370 " WHERE giver_id = " .
$ilDB->quote(
$ilUser->getId(),
"integer") .
371 " AND peer_id = " .
$ilDB->quote($a_peer_id,
"integer") .
372 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
374 return (
bool)
$row[
"ass_id"];
382 $ilDB->manipulate(
"UPDATE exc_assignment_peer" .
384 " WHERE giver_id = " .
$ilDB->quote(
$ilUser->getId(),
"integer") .
385 " AND peer_id = " .
$ilDB->quote($a_peer_id,
"integer") .
386 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
394 $sql =
"UPDATE exc_assignment_peer" .
396 ",pcomment = " .
$ilDB->quote(serialize($a_values),
"text") .
397 " WHERE giver_id = " .
$ilDB->quote(
$ilUser->getId(),
"integer") .
398 " AND peer_id = " .
$ilDB->quote($a_peer_id,
"integer") .
399 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer");
401 $ilDB->manipulate($sql);
415 include_once
'./Services/Rating/classes/class.ilRating.php';
417 $set =
$ilDB->query(
"SELECT *" .
418 " FROM exc_assignment_peer" .
419 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
420 " AND giver_id = " .
$ilDB->quote($a_user_id,
"integer"));
422 if (!(
bool) $a_validate ||
436 $set =
$ilDB->query(
"SELECT COUNT(DISTINCT(user_id)) cnt" .
437 " FROM exc_returned" .
438 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
439 $cnt =
$ilDB->fetchAssoc($set);
440 $cnt = (int) $cnt[
"cnt"];
454 if (!$this->assignment->getPeerReviewSimpleUnlock()) {
455 $needed = $this->assignment->getPeerReviewMin();
461 $min = min($max, $needed);
474 if (!$this->assignment->afterDeadlineStrict()) {
486 switch ($this->assignment->getPeerReviewValid()) {
488 return (
bool) $no_of_feedbacks;
492 $min = min($max, $this->assignment->getPeerReviewMin());
494 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)
foreach($_POST as $key=> $value) $res
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()