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)) {
 
  238                $items = array(
"text"=>
$data);
 
  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)) {
 
  286                $values = array(
"text"=>
$data);
 
  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);
 
An exception for terminatinating execution or to throw for unit testing.
getId()
Get assignment id.
const PEER_REVIEW_VALID_NONE
const PEER_REVIEW_VALID_ALL
const PEER_REVIEW_VALID_ONE
countGivenFeedback($a_validate=true, $a_user_id=null)
hasPeerReviewAccess($a_peer_id)
getAllPeerReviews($a_only_valid=true)
isFeedbackValidForPassed($a_user_id)
updatePeerReview($a_peer_id, array $a_values)
getMaxPossibleFeedbacks()
getPeerReviewsByGiver($a_user_id)
__construct(ilExAssignment $a_assignment)
getPeerReviewsByPeerId($a_user_id, $a_only_valid=false)
validatePeerReview(array $a_data)
validatePeerReviewGroups()
getValidPeerReviewUsers()
updatePeerReviewTimestamp($a_peer_id)
getPeerMaskedId($a_giver_id, $a_peer_id)
getNumberOfMissingFeedbacksForReceived()
getPeerReviewValues($a_giver_id, $a_peer_id)
static _getMembers($a_obj_id)
static now()
Return current timestamp in Y-m-d H:i:s format.
foreach($_POST as $key=> $value) $res