public function sendNotifications()

in synergy/server/controller/RunNotificationCtrl.php [104:164]


    public function sendNotifications($testRunId) {
        if (!$this->emailsEnabled) {
            return 0;
        }
        $processed = array();

        $meta = $this->getRunEndDateAndNotificationLimit($testRunId);
        $deadline = $meta[0];
        date_default_timezone_set('UTC');
        $now = time();
        $runEnd = strtotime($deadline);
        $daysLeft = round(($runEnd - $now ) / (60 * 60 * 24));

        if (round(($runEnd - $now ) / (60 * 60)) > ($meta[1] * 24) || $daysLeft < 0 || $meta[1] < 0) {
            return 0;
        }

        $allAssignmentsIds = array();
        $allReviewsIds = array();
        $assignments = $this->getUnfinishedAssignmentsWONotif($testRunId);

        $reviewCtrl = new ReviewCtrl();
        $reviews = $reviewCtrl->getAssignments($testRunId);

        foreach ($assignments as $assignment) {
            if (!array_key_exists($assignment->username, $processed)) {
                $n = new RunNotification($assignment->username, $assignment->runTitle, $testRunId);
                $n->email = $assignment->getEmail();
                $processed[$n->username] = $n;
            }
            $n->addAssignment($assignment);
            array_push($allAssignmentsIds, $assignment->id);
        }
        foreach ($reviews as $review) {
            if (!array_key_exists($review->username, $processed)) {
                $n = new RunNotification($review->username, $review->runTitle, $testRunId);
                $n->email = $review->getEmail();
                $processed[$n->username] = $n;
            }
            $n->addReview($review);
            array_push($allReviewsIds, $review->id);
        }

        $notified = 0;
        $ctrl = new UserCtrl();
        foreach ($processed as $user) {
            if ($ctrl->getUser($user->username)->emailNotifications) {
                $body = ($this->emailProvider->useHTML) ? $user->getEmailBodyHTML($daysLeft, $deadline) : $user->getEmailBody($daysLeft, $deadline);
                if (!is_null($user->email) && strlen($user->email) > 0) {
                    $this->emailProvider->send($this->emailProvider->compose($body, $user->getEmailSubject($daysLeft), $user->email));
                } else {
                    $this->emailProvider->send($this->emailProvider->compose($body, $user->getEmailSubject($daysLeft), $user->username . "@" . DOMAIN));
                }
                $notified++;
            }
        }

        $this->markAssignmentsNotified($allAssignmentsIds);

        return $notified;
    }