Example #1
0
 public function sendInvites()
 {
     HMS_Activity_Log::log_activity('hms', ACTIVITY_LOTTERY_EXECUTED, 'hms');
     $this->output[] = "Lottery system invoked on " . date("d M, Y @ g:i:s", $this->now) . " ({$this->now})";
     /**
      * **
      * Check the hard cap.
      * Don't do anything if it's been reached.
      */
     if (LotteryProcess::hardCapReached($this->term)) {
         $this->output[] = 'Hard cap reached. Done!';
         return;
     }
     /**
      * *****************
      * Reminder Emails *
      * *****************
      */
     $output = array();
     if ($this->sendReminders) {
         $this->output[] = "Sending invite reminder emails...";
         $this->sendWinningReminderEmails();
         $output[] = "Sending roommate invite reminder emails...";
         $this->sendRoommateReminderEmails();
     }
     // check the jr/sr soft caps
     if (LotteryProcess::jrSoftCapReached($this->term)) {
         $this->inviteCounts[CLASS_JUNIOR][MALE] = 0;
         $this->inviteCounts[CLASS_JUNIOR][FEMALE] = 0;
     }
     if (LotteryProcess::srSoftCapReached($this->term)) {
         $this->inviteCounts[CLASS_SENIOR][MALE] = 0;
         $this->inviteCounts[CLASS_SENIOR][FEMALE] = 0;
     }
     /**
      * ****
      * Count the number of remaining entries
      * *******
      */
     try {
         // Count remaining applications by class and gender
         $this->applicationsRemaining = array();
         foreach ($this->classes as $c) {
             foreach ($this->genders as $g) {
                 $this->applicationsRemaining[$c][$g] = LotteryProcess::countRemainingApplicationsByClassGender($this->term, $c, $g);
             }
         }
     } catch (Exception $e) {
         $this->output[] = 'Error counting outstanding lottery entires, quitting. Exception: ' . $e->getMessage();
         return;
     }
     $this->output[] = "{$this->applicationsRemaining[CLASS_SENIOR][MALE]} senior male lottery entries remaining";
     $this->output[] = "{$this->applicationsRemaining[CLASS_SENIOR][FEMALE]} senior female lottery entries remaining";
     $this->output[] = "{$this->applicationsRemaining[CLASS_JUNIOR][MALE]} junior male lottery entries remaining";
     $this->output[] = "{$this->applicationsRemaining[CLASS_JUNIOR][FEMALE]} junior female lottery entries remaining";
     $this->output[] = "{$this->applicationsRemaining[CLASS_SOPHOMORE][MALE]} sophomore male lottery entries remaining";
     $this->output[] = "{$this->applicationsRemaining[CLASS_SOPHOMORE][FEMALE]} sophomore female lottery entries remaining";
     /**
      * ****************
      * Send magic winner invites
      */
     if ($this->sendMagicWinners) {
         $this->output[] = "Sending magic winner invites...";
         while (($magicWinner = $this->getMagicWinner()) != null) {
             $student = StudentFactory::getStudentByBannerId($magicWinner['banner_id'], $this->term);
             $this->sendInvite($student);
         }
     }
     /**
      * ****************
      * Send Invites
      */
     foreach ($this->classes as $c) {
         foreach ($this->genders as $g) {
             $this->output[] = "Sending {$this->inviteCounts[$c][$g]} invites for class: {$c}, gender: {$g}";
             $this->output[] = "There are {$this->applicationsRemaining[$c][$g]} remaining applicants of that class and gender.";
             // While we need to send an invite and there is an applicant remaining
             // And we haven't exceeded our batch size
             while ($this->inviteCounts[$c][$g] > $this->numInvitesSent[$c][$g] && $this->applicationsRemaining[$c][$g] >= 1 && $this->numInvitesSent['TOTAL'] <= MAX_INVITES_PER_BATCH) {
                 // Send an invite to the proper class & gender
                 $winningRow = $this->chooseWinner($c, $g);
                 $student = StudentFactory::getStudentByBannerId($winningRow['banner_id'], $this->term);
                 $this->sendInvite($student);
                 // Update counts
                 $this->numInvitesSent[$c][$g]++;
                 $this->applicationsRemaining[$c][$g]--;
             }
         }
     }
     $this->output[] = "Done. Sent {$this->numInvitesSent['TOTAL']} invites total.";
 }