Ejemplo n.º 1
0
 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();
     }
 }