/**
  * @see Form::save()
  */
 public function save()
 {
     parent::save();
     $this->userSuspension->update($this->userSuspension->userID, $this->userSuspension->suspensionID, $this->expiresDay && $this->expiresMonth && $this->expiresYear ? DateUtil::getUTC(gmmktime($this->expiresHour, $this->expiresMinute, 0, $this->expiresMonth, $this->expiresDay, $this->expiresYear)) : 0);
     $this->saved();
     // show success message
     WCF::getTPL()->assign('success', true);
 }
 /**
  * @see Action::execute()
  */
 public function execute()
 {
     parent::execute();
     // check permission
     WCF::getUser()->checkPermission('admin.user.infraction.canDeleteSuspension');
     // revoke suspension
     if (!$this->userSuspension->revoked) {
         $object = Suspension::getSuspensionTypeObject($this->userSuspension->suspensionType);
         $object->revoke(new User($this->userSuspension->userID), $this->userSuspension, new Suspension($this->userSuspension->suspensionID));
         Session::resetSessions($this->userSuspension->userID);
     }
     // delete suspension
     $this->userSuspension->delete();
     $this->executed();
     // forward to list page
     HeaderUtil::redirect('index.php?page=UserSuspensionList&deletedUserSuspensionID=' . $this->userSuspensionID . '&packageID=' . PACKAGE_ID . SID_ARG_2ND_NOT_ENCODED);
     exit;
 }
 /**
  * Checks the warnings of a user and applies suspensions.
  * 
  * @param	integer		$userID
  */
 public static function checkWarnings($userID)
 {
     // get suspensions
     $sql = "SELECT\t\t*\n\t\t\tFROM\t\twcf" . WCF_N . "_user_infraction_suspension\n\t\t\tWHERE\t\tpackageID IN (\n\t\t\t\t\t\tSELECT\tdependency\n\t\t\t\t\t\tFROM\twcf" . WCF_N . "_package_dependency\n\t\t\t\t\t\tWHERE\tpackageID = " . PACKAGE_ID . "\n\t\t\t\t\t)\n\t\t\t\t\tAND points <= IFNULL((\n\t\t\t\t\t\tSELECT\tSUM(points)\n\t\t\t\t\t\tFROM\twcf" . WCF_N . "_user_infraction_warning_to_user\n\t\t\t\t\t\tWHERE\tuserID = " . $userID . "\n\t\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\t\texpires >= " . TIME_NOW . "\n\t\t\t\t\t\t\t\tOR expires = 0\n\t\t\t\t\t\t\t)\n\t\t\t\t\t), 0)\n\t\t\t\t\tAND suspensionID NOT IN (\n\t\t\t\t\t\tSELECT\tsuspensionID\n\t\t\t\t\t\tFROM\twcf" . WCF_N . "_user_infraction_suspension_to_user\n\t\t\t\t\t\tWHERE\tuserID = " . $userID . "\n\t\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\t\texpires >= " . TIME_NOW . "\n\t\t\t\t\t\t\t\tOR expires = 0\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\tORDER BY \tpoints DESC";
     $result = WCF::getDB()->sendQuery($sql);
     if (WCF::getDB()->countRows($result) > 0) {
         $user = new UserEditor($userID);
         while ($row = WCF::getDB()->fetchArray($result)) {
             // get suspension
             $suspension = new Suspension(null, $row);
             // create user suspension
             $userSuspension = UserSuspensionEditor::create($userID, $suspension->suspensionID, $suspension->expires != 0 ? TIME_NOW + $suspension->expires : 0);
             // get suspension type
             $suspensionTypeObject = Suspension::getSuspensionTypeObject($suspension->suspensionType);
             // apply suspension
             $suspensionTypeObject->apply($user, $userSuspension, $suspension);
         }
         // reset session
         Session::resetSessions($userID);
     }
 }