29 $this->db = $DIC->database();
30 $this->
user = $DIC->user();
31 $this->assignment = $a_assignment;
32 $this->assignment_id = $a_assignment->
getId();
40 $set =
$ilDB->query(
"SELECT count(*) cnt" .
41 " FROM exc_assignment_peer" .
42 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
43 $cnt =
$ilDB->fetchAssoc($set);
44 return (
bool) $cnt[
"cnt"];
54 $set =
$ilDB->query(
"SELECT DISTINCT(user_id)" .
55 " FROM exc_returned" .
56 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
57 " AND (filename IS NOT NULL OR atext IS NOT NULL)");
58 while ($row =
$ilDB->fetchAssoc($set)) {
59 $user_ids[] = $row[
"user_id"];
70 if (!$this->assignment->afterDeadlineStrict()) {
77 include_once(
"./Modules/Exercise/PeerReview/class.ExcPeerReviewDistribution.php");
78 $distribution = new \ILIAS\Exercise\PeerReview\ExcPeerReviewDistribution($user_ids, $this->assignment->getPeerReviewMin());
80 foreach ($user_ids as $rater_id) {
81 foreach ($distribution->getPeersOfRater($rater_id) as $peer_id) {
82 $ilDB->manipulate(
"INSERT INTO exc_assignment_peer" .
83 " (ass_id, giver_id, peer_id)" .
84 " VALUES (" .
$ilDB->quote($this->assignment_id,
"integer") .
85 ", " .
$ilDB->quote($rater_id,
"integer") .
86 ", " .
$ilDB->quote($peer_id,
"integer") .
")");
101 foreach (array_keys($reviews) as $giver_id) {
104 foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
105 $crit->setPeerReviewContext($this->assignment, $giver_id, $peer_id);
106 $crit->resetReview();
112 $ilDB->manipulate(
"DELETE FROM exc_assignment_peer" .
113 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
125 $peer_ids = $invalid_peer_ids = $invalid_giver_ids = $all_reviews = array();
127 $peer_ids[] = $peer_id;
129 if (!in_array($peer_id, $all_valid) ||
130 !in_array($peer_id, $all_exc)) {
131 $invalid_peer_ids[] = $peer_id;
133 foreach ($reviews as $giver_id =>
$valid) {
134 if (!in_array($giver_id, $all_valid) ||
135 !in_array($peer_id, $all_exc)) {
136 $invalid_giver_ids[] = $giver_id;
138 $all_reviews[$peer_id][$giver_id] =
$valid;
142 $invalid_giver_ids = array_unique($invalid_giver_ids);
144 $missing_user_ids = array();
145 foreach ($all_valid as $user_id) {
147 if (!in_array($user_id, $peer_ids)) {
148 $missing_user_ids[] = $user_id;
152 $not_returned_ids = array();
153 foreach ($all_exc as $user_id) {
154 if (!in_array($user_id, $all_valid)) {
155 $not_returned_ids[] = $user_id;
160 "invalid" => (
sizeof($missing_user_ids) ||
161 sizeof($invalid_peer_ids) ||
162 sizeof($invalid_giver_ids)),
163 "missing_user_ids" => $missing_user_ids,
164 "not_returned_ids" => $not_returned_ids,
165 "invalid_peer_ids" => $invalid_peer_ids,
166 "invalid_giver_ids" => $invalid_giver_ids,
167 "reviews" => $all_reviews);
175 if ($item[
"peer_id"] == $a_peer_id) {
182 $data = $peer[
"pcomment"];
184 $items = @unserialize(
$data);
185 if (!is_array($items)) {
187 $items = array(
"text" =>
$data);
201 $set =
$ilDB->query(
"SELECT *" .
202 " FROM exc_assignment_peer" .
203 " WHERE giver_id = " .
$ilDB->quote($a_user_id,
"integer") .
204 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
205 " ORDER BY peer_id");
206 while ($row =
$ilDB->fetchAssoc($set)) {
207 $row[
"seq"] = ++$idx;
218 if ($peer[
"peer_id"] == $a_peer_id) {
230 $data = $a_data[
"pcomment"];
232 $values = @unserialize(
$data);
233 if (!is_array($values)) {
235 $values = array(
"text" =>
$data);
246 foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
247 $crit_id = $crit->getId()
250 $crit->setPeerReviewContext(
255 if (!$crit->validate($values[$crit_id])) {
258 if ($crit->hasValue($values[$crit_id])) {
273 $set =
$ilDB->query(
"SELECT *" .
274 " FROM exc_assignment_peer" .
275 " WHERE peer_id = " .
$ilDB->quote($a_user_id,
"integer") .
276 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
277 " ORDER BY peer_id");
278 while ($row =
$ilDB->fetchAssoc($set)) {
279 if (!$a_only_valid ||
283 $row[
"seq"] = ++$idx;
297 $set =
$ilDB->query(
"SELECT *" .
298 " FROM exc_assignment_peer" .
299 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
300 " ORDER BY peer_id");
301 while ($row =
$ilDB->fetchAssoc($set)) {
303 if (!$a_only_valid ||
305 $res[$row[
"peer_id"]][$row[
"giver_id"]] =
$valid;
317 $set =
$ilDB->query(
"SELECT ass_id" .
318 " FROM exc_assignment_peer" .
319 " WHERE giver_id = " .
$ilDB->quote(
$ilUser->getId(),
"integer") .
320 " AND peer_id = " .
$ilDB->quote($a_peer_id,
"integer") .
321 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
322 $row =
$ilDB->fetchAssoc($set);
323 return (
bool) $row[
"ass_id"];
331 $ilDB->manipulate(
"UPDATE exc_assignment_peer" .
333 " WHERE giver_id = " .
$ilDB->quote(
$ilUser->getId(),
"integer") .
334 " AND peer_id = " .
$ilDB->quote($a_peer_id,
"integer") .
335 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
344 "pcomment" => serialize($a_values),
345 "peer_id" => $a_peer_id,
350 $sql =
"UPDATE exc_assignment_peer" .
352 ",pcomment = " .
$ilDB->quote(serialize($a_values),
"text") .
353 ",is_valid = " .
$ilDB->quote((
int)
$valid,
"integer") .
354 " WHERE giver_id = " .
$ilDB->quote(
$ilUser->getId(),
"integer") .
355 " AND peer_id = " .
$ilDB->quote($a_peer_id,
"integer") .
356 " AND ass_id = " .
$ilDB->quote($this->assignment_id,
"integer");
358 $ilDB->manipulate($sql);
372 $set =
$ilDB->query(
"SELECT *" .
373 " FROM exc_assignment_peer" .
374 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer") .
375 " AND giver_id = " .
$ilDB->quote($a_user_id,
"integer"));
376 while ($row =
$ilDB->fetchAssoc($set)) {
377 if (!(
bool) $a_validate ||
391 $set =
$ilDB->query(
"SELECT COUNT(DISTINCT(user_id)) cnt" .
392 " FROM exc_returned" .
393 " WHERE ass_id = " .
$ilDB->quote($this->assignment_id,
"integer"));
394 $cnt =
$ilDB->fetchAssoc($set);
395 $cnt = (int) $cnt[
"cnt"];
409 if (!$this->assignment->getPeerReviewSimpleUnlock()) {
410 $needed = $this->assignment->getPeerReviewMin();
416 $min = min($max, $needed);
429 if (!$this->assignment->afterDeadlineStrict()) {
441 switch ($this->assignment->getPeerReviewValid()) {
443 return (
bool) $no_of_feedbacks;
447 $min = min($max, $this->assignment->getPeerReviewMin());
449 return (($min - $no_of_feedbacks) < 1);
457 $ilDB = $DIC->database();
461 "SELECT DISTINCT(giver_id) FROM exc_assignment_peer " .
462 " WHERE ass_id = " .
$ilDB->quote($a_ass_id,
"integer") .
463 " AND tstamp is NULL" 466 while ($row =
$ilDB->fetchAssoc($set)) {
467 array_push($user_ids, $row[
"giver_id"]);
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
static lookupGiversWithPendingFeedback($a_ass_id)
getNumberOfMissingFeedbacksForReceived()
validatePeerReview(array $a_data)
getPeerReviewsByGiver($a_user_id)
getValidPeerReviewUsers()
const PEER_REVIEW_VALID_NONE
getPeerReviewsByPeerId($a_user_id, $a_only_valid=false)
static getLogger($a_component_id)
Get component logger.
getPeerReviewValues($a_giver_id, $a_peer_id)
static _getMembers($a_obj_id)
getMaxPossibleFeedbacks()
__construct(ilExAssignment $a_assignment)
validatePeerReviewGroups()