public function __construct(Student $student, RoomDamage $damage) { $this->banner_id = $student->getBannerId(); $this->damage_id = $damage->getId(); $this->state = 'new'; $this->amount = null; }
/** * Create a new RoomChangeParticipant * * @param RoomChangeRequest $request * @param Student $student * @param HMS_Bed $fromBed */ public function __construct(RoomChangeRequest $request, Student $student, HMS_Bed $fromBed) { $this->id = 0; $this->request_id = $request->getId(); $this->banner_id = $student->getBannerId(); $this->from_bed = $fromBed->getId(); // Set initial state $this->setState(new ParticipantStateNew($this, time(), null, UserStatus::getUsername())); }
private function populateSharedFields($term, Student $student) { $this->app->setTerm($term); $this->app->setBannerId($student->getBannerId()); $this->app->setUsername($student->getUsername()); $this->app->setGender($student->getGender()); $this->app->setStudentType($student->getType()); $this->app->setApplicationTerm($student->getApplicationTerm()); $doNotCall = $this->context->get('do_not_call'); $areaCode = $this->context->get('area_code'); $exchange = $this->context->get('exchange'); $number = $this->context->get('number'); /* Phone Number */ /* if(is_null($doNotCall)){ //test('ohh hai',1); // do not call checkbox was not selected, so check the number if(is_null($areaCode) || is_null($exchange) || is_null($number)){ throw new InvalidArgumentException('Please provide a cell-phone number or click the checkbox stating that you do not wish to share your number with us.'); } } */ if (is_null($doNotCall)) { $this->app->setCellPhone($areaCode . $exchange . $number); } else { $this->app->setCellPhone(null); } /* Meal Plan */ $mealOption = $this->context->get('meal_option'); if (!isset($mealOption)) { //throw new InvalidArgumentException('Missing meal option from context.'); } $this->app->setMealPlan($mealOption); /* Emergency Contact */ $this->app->setEmergencyContactName($this->context->get('emergency_contact_name')); $this->app->setEmergencyContactRelationship($this->context->get('emergency_contact_relationship')); $this->app->setEmergencyContactPhone($this->context->get('emergency_contact_phone')); $this->app->setEmergencyContactEmail($this->context->get('emergency_contact_email')); /* Missing Persons */ $this->app->setMissingPersonName($this->context->get('missing_person_name')); $this->app->setMissingPersonRelationship($this->context->get('missing_person_relationship')); $this->app->setMissingPersonPhone($this->context->get('missing_person_phone')); $this->app->setMissingPersonEmail($this->context->get('missing_person_email')); /* Medical Conditions */ $this->app->setEmergencyMedicalCondition($this->context->get('emergency_medical_condition')); /* Special Needs */ $specialNeeds = $this->context->get('special_needs'); isset($specialNeeds['physical_disability']) ? $this->app->setPhysicalDisability(true) : null; isset($specialNeeds['psych_disability']) ? $this->app->setPsychDisability(true) : null; isset($specialNeeds['gender_need']) ? $this->app->setGenderNeed(true) : null; isset($specialNeeds['medical_need']) ? $this->app->setMedicalNeed(true) : null; if ($student->isInternational()) { $this->app->setInternational(true); } else { $this->app->setInternational(false); } }
public static function getParticipantByRequestStudent(RoomChangeRequest $request, Student $student) { $db = PdoFactory::getPdoInstance(); $query = "SELECT * FROM hms_room_change_curr_participant WHERE request_id = :request_id and banner_id = :bannerId"; $stmt = $db->prepare($query); $params = array('request_id' => $request->getId(), 'bannerId' => $student->getBannerId()); $stmt->execute($params); $stmt->setFetchMode(PDO::FETCH_CLASS, 'RoomChangeParticipantRestored'); return $stmt->fetch(); }
public function getMenuBlockView(Student $student) { PHPWS_Core::initModClass('hms', 'HMS_RLC_Assignment.php'); PHPWS_Core::initModClass('hms', 'HMS_Assignment.php'); PHPWS_Core::initModClass('hms', 'RlcSelfSelectionMenuBlockView.php'); PHPWS_Core::initModClass('hms', 'HMS_Lottery.php'); $rlcAssignment = HMS_RLC_Assignment::getAssignmentByUsername($student->getUsername(), $this->getTerm()); $roomAssignment = HMS_Assignment::getAssignmentByBannerId($student->getBannerId(), $this->getTerm()); $roommateRequests = HMS_Lottery::get_lottery_roommate_invites($student->getUsername(), $this->term); return new RlcSelfSelectionMenuBlockView($this->term, $this->getStartDate(), $this->getEndDate(), $rlcAssignment, $roomAssignment, $roommateRequests); }
public static function getContractByStudentTerm(Student $student, $term) { PHPWS_Core::initModClass('hms', 'Contract.php'); $db = PdoFactory::getPdoInstance(); $query = 'SELECT * FROM hms_contract WHERE banner_id = :bannerId AND term = :term'; $stmt = $db->prepare($query); $params = array('bannerId' => $student->getBannerId(), 'term' => $term); $stmt->execute($params); $stmt->setFetchMode(PDO::FETCH_CLASS, 'ContractRestored'); return $stmt->fetch(); }
public function __construct(Student $student, HMS_Bed $bed, $term, $checkinBy, $keyCode) { $this->setBannerId($student->getBannerId()); $this->setBedPersistentId($bed->getPersistentId()); $this->setBedId($bed->getId()); $this->setTerm($term); $this->setRoomId($bed->get_parent()->getId()); $this->setCheckinDate(time()); $this->setCheckinby($checkinBy); $this->setKeyCode($keyCode); }
public function refreshCache(Student $student, $term) { // Double check the TTL... Caching something in APC with a ttl of zero means it will be stored forever // HMS takes a TTL of zero to mean "don't cache it at all" if ($this->ttl > 0) { // Store the actual user object $key = $this->makeCacheKey($student->getBannerId(), $term); apc_store($key, $student, $this->ttl); // Store a secondary key for username->BannerId lookup $key = $student->getUsername() . $term; apc_store($key, $student->getBannerId(), $this->ttl); } }
/** * Returns the HousingApplication object (of a specific child type) for the given term, * or null if no Housing Application exists. * * Uses BannerIDs to lookup students. * Replaces HousingApplication::getApplicationByUser() * * @param Student $student * @param string $term * @param string $applicationType * @throws DatabaseException * @throws InvalidArgumentException */ public static function getAppByStudent(Student $student, $term, $applicationType = NULL) { PHPWS_Core::initModClass('hms', 'HousingApplication.php'); PHPWS_Core::initModClass('hms', 'FallApplication.php'); PHPWS_Core::initModClass('hms', 'SpringApplication.php'); PHPWS_Core::initModClass('hms', 'SummerApplication.php'); PHPWS_Core::initModClass('hms', 'LotteryApplication.php'); PHPWS_Core::initModClass('hms', 'WaitingListApplication.php'); $db = new PHPWS_DB('hms_new_application'); $db->addWhere('banner_id', $student->getBannerId()); $db->addWhere('term', $term); if (!is_null($applicationType)) { $db->addWhere('application_type', $applicationType); } $result = $db->select('row'); if (PHPWS_Error::logIfError($result)) { throw new DatabaseException($result->toString()); } if ($result == null) { return null; } switch ($result['application_type']) { case 'fall': $app = new FallApplication($result['id']); break; case 'spring': $app = new SpringApplication($result['id']); break; case 'summer': $app = new SummerApplication($result['id']); break; case 'lottery': $app = new LotteryApplication($result['id']); break; case 'offcampus_waiting_list': $app = new WaitingListApplication($result['id']); break; default: throw new InvalidArgumentException('Unknown application type: ' . $result['application_type']); } return $app; }
public static function getLastCheckoutForStudent(Student $student) { $db = new PHPWS_DB('hms_checkin'); $db->addWhere('banner_id', $student->getBannerId()); $db->addWhere('checkout_date', null, '!='); $db->addOrder(array('term DESC', 'checkout_date DESC')); $result = $db->getObjects('RestoredCheckin'); if (PHPWS_Error::logIfError($result)) { throw new DatabaseException($result->toString()); } if (sizeof($result) <= 0) { return array(); } return array_shift($result); }
/** * Does all the checks necessary to assign a student and makes the assignment * * The $room_id and $bed_id fields are optional, but one or the other must be specificed * * @param Student $student * @param Integer $term * @param Integer $room_id * @param Integer $bed_id * @param Integer $meal_plan * @param String $notes * @param boolean $lottery * @param string $reason * @throws InvalidArgumentException * @throws AssignmentException * @throws DatabaseException * @throws Exception */ public static function assignStudent(Student $student, $term, $room_id = NULL, $bed_id = NULL, $meal_plan, $notes = "", $lottery = FALSE, $reason) { /** * Can't check permissions here because there are some student-facing commands that needs to make assignments (e.g. * the lottery/re-application code) * * if(!UserStatus::isAdmin() || !Current_User::allow('hms', 'assignment_maintenance')) { * PHPWS_Core::initModClass('hms', 'exception/PermissionException.php'); * throw new PermissionException('You are not allowed to edit student assignments.'); * } */ PHPWS_Core::initModClass('hms', 'HMS_Residence_Hall.php'); PHPWS_Core::initModClass('hms', 'HMS_Floor.php'); PHPWS_Core::initModClass('hms', 'HMS_Room.php'); PHPWS_Core::initModClass('hms', 'HMS_Bed.php'); PHPWS_Core::initModClass('hms', 'HMS_Activity_Log.php'); PHPWS_Core::initModClass('hms', 'BannerQueue.php'); PHPWS_Core::initModClass('hms', 'AssignmentHistory.php'); PHPWS_Core::initModClass('hms', 'exception/AssignmentException.php'); $username = $student->getUsername(); // Make sure a username was entered if (!isset($username) || $username == '') { throw new InvalidArgumentException('Bad username.'); } $username = strtolower($username); if ($student->getType() == TYPE_WITHDRAWN) { throw new AssignmentException('Invalid student type. Student is withdrawn.'); } if (HMS_Assignment::checkForAssignment($username, $term)) { throw new AssignmentException('The student is already assigned.'); } if (isset($bed_id)) { // A bed_id was given, so create that bed object $vacant_bed = new HMS_Bed($bed_id); if (!$vacant_bed) { throw new AssignmentException('Null bed object.'); } // Get the room that this bed is in $room = $vacant_bed->get_parent(); } else { if (isset($room_id)) { // A room_id was given, so create that room object $room = new HMS_Room($room_id); // And find a vacant bed in that room $beds = $room->getBedsWithVacancies(); $vacant_bed = $beds[0]; } else { // Both the bed and room IDs were null, so return an error throw new AssignmentException('No room nor bed specified.'); } } if (!$room) { throw new AssignmentException('Null room object.'); } // Make sure the room has a vacancy if (!$room->has_vacancy()) { throw new AssignmentException('The room is full.'); } // Make sure the room is not offline if ($room->offline) { throw new AssignmentException('The room is offline'); } // Double check that the bed is in the same term as we're being requested to assign for if ($vacant_bed->getTerm() != $term) { throw new AssignmentException('The bed\'s term and the assignment term do not match.'); } // Double check that the resulting bed is empty if ($vacant_bed->get_number_of_assignees() > 0) { throw new AssignmentException('The bed is not empty.'); } // Issue a warning if the bed was reserved for room change //TODO Move this to the room change view /* if ($vacant_bed->room_change_reserved != 0) { NQ::simple('hms', hms\NotificationView::WARNING, 'Room was reserved for room change'); } */ // Check that the room's gender and the student's gender match $student_gender = $student->getGender(); if (is_null($student_gender)) { throw new AssignmentException('Student gender is null.'); } // Genders must match unless the room is COED if ($room->getGender() != $student_gender && $room->getGender() != COED) { throw new AssignmentException('Room gender does not match the student\'s gender.'); } // We probably shouldn't check permissions inside this method, since sometimes this can be // called from student-facing interfaces.. But, since I want to be really careful with co-ed rooms, // I'm going to take the extra step of making sure no students are putting themselves in co-ed rooms. if ($room->getGender() == COED && !Current_User::allow('hms', 'coed_assignment')) { throw new AssignmentException('You do not have permission to make assignments for Co-ed rooms.'); } // Create the floor object $floor = $room->get_parent(); if (!$floor) { throw new AssignmentException('Null floor object.'); } // Create the hall object $hall = $floor->get_parent(); if (!$hall) { throw new AssignmentException('Null hall object.'); } if ($meal_plan == BANNER_MEAL_NONE) { $meal_plan = NULL; } // Determine which meal plan to use // If this is a freshmen student and they've somehow selected none or low, give them standard if ($student->getType() == TYPE_FRESHMEN && ($meal_plan == BANNER_MEAL_NONE || $meal_plan == BANNER_MEAL_LOW)) { $meal_plan = BANNER_MEAL_STD; // If a student is living in a dorm which requires a meal plan and they've selected none, give them low } else { if ($hall->meal_plan_required == 1 && $meal_plan == BANNER_MEAL_NONE) { $meal_plan = BANNER_MEAL_LOW; } } /** * *************************** * Temporary Assignment HACK * * *************************** */ // Check for an assignment in the temp assignment table $db = new PHPWS_DB('hms_temp_assignment'); $db->addWhere('banner_id', $student->getBannerId()); $result = $db->select(); if (PHPWS_Error::logIfError($result)) { throw new DatabaseException($result->toString()); } if (sizeof($result) > 0) { // Queue an unassign for this student $soap = SOAP::getInstance(UserStatus::getUsername(), UserStatus::isAdmin() ? SOAP::ADMIN_USER : SOAP::STUDENT_USER); try { $soap->removeRoomAssignment($student->getBannerId(), $term, 'TMPR', $result[0]['room_number'], 100); // Hard-code to 100% refund } catch (Exception $e) { throw $e; } $db = new PHPWS_DB('hms_temp_assignment'); $db->addValue('banner_id', null); $db->addWhere('room_number', $result[0]['room_number']); $db->update(); if (PHPWS_Error::logIfError($result)) { throw new DatabaseException($result->toString()); } NQ::simple('hms', hms\NotificationView::WARNING, 'Temporary assignment was removed.'); } // Send this off to the queue for assignment in banner $banner_success = BannerQueue::queueAssignment($student, $term, $hall, $vacant_bed, 'HOME', $meal_plan); if ($banner_success !== TRUE) { throw new AssignmentException('Error while adding the assignment to the Banner queue.'); } // Make the assignment in HMS $assignment = new HMS_Assignment(); $assignment->setBannerId($student->getBannerId()); $assignment->asu_username = $username; $assignment->bed_id = $vacant_bed->id; $assignment->term = $term; $assignment->letter_printed = 0; $assignment->email_sent = 0; $assignment->meal_option = $meal_plan; $assignment->reason = $reason; $assignment->application_term = $student->getApplicationTerm(); $assignment->class = $student->getComputedClass($term); // If this was a lottery assignment, flag it as such if ($lottery) { $assignment->lottery = 1; if (!isset($reason)) { // Automatically tag reason as lottery $assignment->reason = ASSIGN_LOTTERY; } } else { $assignment->lottery = 0; } $result = $assignment->save(); if (!$result || PHPWS_Error::logIfError($result)) { throw new DatabaseException($result->toString()); } // Log the assignment HMS_Activity_Log::log_activity($username, ACTIVITY_ASSIGNED, UserStatus::getUsername(), $term . ' ' . $hall->hall_name . ' ' . $room->room_number . ' ' . $notes); // Insert assignment into History table AssignmentHistory::makeAssignmentHistory($assignment); // Look for roommates and flag their assignments as needing a new letter $room_id = $assignment->get_room_id(); $room = new HMS_Room($room_id); // Go to the room level to get all the roommates $assignees = $room->get_assignees(); // get an array of student objects for those assigned to this room if (sizeof($assignees) > 1) { foreach ($assignees as $roommate) { // Skip this student if ($roommate->getUsername() == $username) { continue; } $roommate_assign = HMS_Assignment::getAssignment($roommate->getUsername(), $term); $roommate_assign->letter_printed = 0; $roommate_assign->email_sent = 0; $roommate_assign->save(); } } // Return Sucess return true; }
private static function setPhoneNumbers(Student $student) { $db = new PHPWS_DB('hms_student_phone_cache'); $db->addWhere('banner_id', $student->getBannerId()); $result = $db->delete(); // Silently log any errors PHPWS_Error::logIfError($result); $db = new PHPWS_DB('hms_student_phone_cache'); $phoneList = $student->getPhoneNumberList(); foreach ($phoneList as $number) { $db->reset(); $obj = new stdClass(); $obj->number = $number; $obj->banner_id = $student->getBannerId(); $result = $db->saveObject($obj); PHPWS_Error::logIfError($result); } }
private function sendInvite(Student $student) { $this->output[] = "Inviting {$student->getUsername()} ({$student->getBannerId()})"; // Update the winning student's invite try { $entry = HousingApplicationFactory::getAppByStudent($student, $this->term, 'lottery'); $entry->invited_on = $this->now; $entry->save(); } catch (Exception $e) { $this->output[] = 'Error while trying to select a winning student. Exception: ' . $e->getMessage(); return; } // Update the total count $this->numInvitesSent['TOTAL']++; // Send the notification email HMS_Email::send_lottery_invite($student->getUsername(), $student->getName(), $this->academicYear); // Log that the invite was sent HMS_Activity_Log::log_activity($student->getUsername(), ACTIVITY_LOTTERY_INVITED, UserStatus::getUsername(), "Expires on " . date('m/d/Y h:i:s a', $this->expireTime)); }
public static function getRequestPendingCheckout(Student $student, $term) { $db = PdoFactory::getPdoInstance(); $query = "SELECT hms_room_change_curr_request.* FROM hms_room_change_curr_request\n JOIN hms_room_change_curr_participant ON hms_room_change_curr_request.id = hms_room_change_curr_participant.request_id\n WHERE\n term = :term AND\n banner_id = :bannerId AND\n hms_room_change_curr_request.state_name = 'Approved' AND\n hms_room_change_curr_participant.state_name = 'InProcess'"; $stmt = $db->prepare($query); $stmt->execute(array('term' => $term, 'bannerId' => $student->getBannerId())); $results = $stmt->fetchAll(PDO::FETCH_CLASS, 'RoomChangeRequestRestored'); // If more than one pending request is found, throw an exception if (sizeof($results) > 1) { throw new InvalidArgumentException('More than one pending room change detected.'); } else { if (sizeof($results) == 0) { return null; } else { return $results[0]; } } }