public function execute(CommandContext $context) { if (!UserStatus::isUser()) { PHPWS_Core::initModClass('hms', 'exception/PermissionException.php'); throw new PermissionException('You do not have permission to request a roommate.'); } $term = $context->get('term'); $requestee = $context->get('username'); $requestor = UserStatus::getUsername(); if (empty($term)) { throw new InvalidArgumentException('Term was not specified.'); } $err = CommandFactory::getCommand('ShowRequestRoommate'); $err->setTerm($term); if (empty($requestee)) { NQ::simple('hms', hms\NotificationView::WARNING, 'You did not enter a username.'); $err->redirect(); } if (!PHPWS_Text::isValidInput($requestee)) { NQ::simple('hms', hms\NotificationView::WARNING, 'You entered an invalid username. Please use letters and numbers only.'); $err->redirect(); } // Attempt to Create Roommate Request PHPWS_Core::initModClass('hms', 'HMS_Roommate.php'); $request = new HMS_Roommate(); try { $request->request($requestor, $requestee, $term); } catch (RoommateCompatibilityException $rre) { NQ::simple('hms', hms\NotificationView::WARNING, $rre->getMessage()); $err->redirect(); } $request->save(); $endTime = $request->calc_req_expiration_date(); $expirationMsg = " expires on " . date('m/d/Y h:i:s a', $endTime); HMS_Activity_Log::log_activity($requestee, ACTIVITY_REQUESTED_AS_ROOMMATE, $requestor, "{$requestor} requested {$requestee}" . $expirationMsg); HMS_Activity_Log::log_activity($requestor, ACTIVITY_REQUESTED_AS_ROOMMATE, $requestee, "{$requestor} requested {$requestee}" . $expirationMsg); // Email both parties PHPWS_Core::initModClass('hms', 'HMS_Email.php'); HMS_Email::send_request_emails($request); // Notify PHPWS_Core::initModClass('hms', 'StudentFactory.php'); $student = StudentFactory::getStudentByUsername($requestee, $term); $name = $student->getName(); $fname = $student->getFirstName(); NQ::simple('hms', hms\NotificationView::SUCCESS, "You have requested {$name} to be your roommate. {$fname} has been emailed, and will need to log into HMS and approve your roommate request."); $cmd = CommandFactory::getCommand('ShowStudentMenu'); $cmd->redirect(); }
public function execute(CommandContext $context) { $id = $context->get('roommateId'); if (is_null($id)) { throw new InvalidArgumentException('Must set roommateId'); } PHPWS_Core::initModClass('hms', 'HMS_Roommate.php'); $roommate = new HMS_Roommate($id); if ($roommate->id == 0) { throw new InvalidArgumentException('Invalid roommateId ' . $id); } $username = UserStatus::getUsername(); if ($username != $roommate->requestee) { PHPWS_Core::initModClass('hms', 'exception/PermissionException.php'); throw new PermissionException("{$username} tried to confirm roommate pairing {$roommate->id}"); } $err = CommandFactory::getCommand('ShowRoommateConfirmAccept'); $err->setRoommateId($id); PHPWS_Core::initCoreClass('Captcha.php'); $verified = Captcha::verify(TRUE); if ($verified === FALSE || is_null($verified)) { NQ::Simple('hms', hms\NotificationView::ERROR, 'Sorry, please try again.'); $err->redirect(); } try { $roommate->confirm(); } catch (RoommateCompatibilityException $rce) { NQ::simple('hms', hms\NotificationView::WARNING, $rce->getMessage()); $err->redirect(); } $roommate->save(); HMS_Activity_Log::log_activity($roommate->requestor, ACTIVITY_ACCEPTED_AS_ROOMMATE, $roommate->requestee, "{$roommate->requestee} accepted request, CAPTCHA: {$verified}"); HMS_Activity_Log::log_activity($roommate->requestee, ACTIVITY_ACCEPTED_AS_ROOMMATE, $roommate->requestor, "{$roommate->requestee} accepted request, CAPTCHA: {$verified}"); // Email both parties PHPWS_Core::initModClass('hms', 'HMS_Email.php'); HMS_Email::send_confirm_emails($roommate); // Remove any other requests for the requestor HMS_Roommate::removeOutstandingRequests($roommate->requestor, $roommate->term); // Remove any other requests for the requestee HMS_Roommate::removeOutstandingRequests($roommate->requestee, $roommate->term); $requestor = StudentFactory::getStudentByUsername($roommate->requestor, $roommate->term); $name = $requestor->getFullName(); NQ::Simple('hms', hms\NotificationView::SUCCESS, "You and {$name} are confirmed as roommates."); $cmd = CommandFactory::getCommand('ShowStudentMenu'); $cmd->redirect(); }
public function execute(CommandContext $context) { if (!UserStatus::isAdmin() || !Current_User::allow('hms', 'roommate_maintenance')) { PHPWS_Core::initModClass('hms', 'exception/PermissionException.php'); throw new PermissionException('You do not have permission to create/edit roommate groups.'); } PHPWS_Core::initModClass('hms', 'StudentFactory.php'); PHPWS_Core::initModClass('hms', 'HMS_Roommate.php'); $term = Term::getSelectedTerm(); # Check for reasonable input $roommate1 = trim($context->get('roommate1')); $roommate2 = trim($context->get('roommate2')); $viewCmd = CommandFactory::getCommand('CreateRoommateGroupView'); $viewCmd->setRoommate1($roommate1); $viewCmd->setRoommate2($roommate2); if (is_null($roommate1) || empty($roommate1) || is_null($roommate2) || empty($roommate2)) { NQ::simple('hms', hms\NotificationView::ERROR, 'Invalid user names.'); $viewCmd->redirect(); } try { $student1 = StudentFactory::getStudentByUsername($roommate1, $term); $student2 = StudentFactory::getStudentByUsername($roommate2, $term); } catch (StudentNotFoundException $e) { NQ::simple('hms', hms\NotificationView::ERROR, $e->getMessage()); $viewCmd->redirect(); } try { # Check if these two can live together HMS_Roommate::canLiveTogetherAdmin($student1, $student2, $term); } catch (Exception $e) { NQ::simple('hms', hms\NotificationView::ERROR, 'Could not create roommate group: ' . $e->getMessage()); $viewCmd->redirect(); } # Check for pending requests for either roommate and break them if (HMS_Roommate::countPendingRequests($roommate1, $term) > 0) { NQ::simple('hms', hms\NotificationView::WARNING, "Warning: Pending roommate requests for {$roommate1} were deleted."); } $result = HMS_Roommate::removeOutstandingRequests($roommate1, $term); if (!$result) { NQ::simple('hms', hms\NotificationView::ERROR, "Error removing pending requests for {$roommate1}, roommate group was not created."); $viewCmd->redirect(); } if (HMS_Roommate::countPendingRequests($roommate2, $term) > 0) { NQ::simple('hms', hms\NotificationView::WARNING, "Warning: Pending roommate requests for {$roommate2} were deleted."); } $result = HMS_Roommate::removeOutstandingRequests($roommate2, $term); if (!$result) { NQ::simple('hms', hms\NotificationView::ERROR, "Error removing pending requests for {$roommate2}, roommate group was not created."); $viewCmd->redirect(); } # Create the roommate group and save it $roommate_group = new HMS_Roommate(); $roommate_group->term = $term; $roommate_group->requestor = $roommate1; $roommate_group->requestee = $roommate2; $roommate_group->confirmed = 1; $roommate_group->requested_on = time(); $roommate_group->confirmed_on = time(); $result = $roommate_group->save(); if (!$result) { NQ::simple('hms', hms\NotificationView::ERROR, 'Error saving roommate group.'); $viewCmd->redirect(); } else { PHPWS_Core::initModClass('hms', 'HMS_Activity_Log.php'); HMS_Activity_Log::log_activity($roommate1, ACTIVITY_ADMIN_ASSIGNED_ROOMMATE, UserStatus::getUsername(), $roommate2); HMS_Activity_Log::log_activity($roommate2, ACTIVITY_ADMIN_ASSIGNED_ROOMMATE, UserStatus::getUsername(), $roommate1); NQ::simple('hms', hms\NotificationView::SUCCESS, 'Roommate group created successfully.'); $viewCmd->redirect(); } }