예제 #1
0
 /**
  * Check for invalid cert status changes.
  * The following transitions are valid:
  * <ul>
  *   <li>candidate -> uncertified</li>
  *   <li>candidate -> closed</li>
  *   <li>uncertified -> certified</li>
  *   <li>certified -> suspended</li>
  *   <li>certified -> closed (on site request)</li>
  *   <li>suspended -> uncertified</li>
  *   <li>suspended -> closed</li>
  * </ul>
  * The following are forbidden:
  * <ul>
  *   <li>suspended -> certified</li>
  *   <li>candidate -> something else but uncertified and closed</li>
  *   <li>closed -> anything else</li>
  * </ul>
  * https://wiki.egi.eu/wiki/GOCDB/Input_System_User_Documentation#Changing_Site_Certification_Status
  * @param \Site $site
  * @param \CertificationStatus $newCertStatus
  * @throws \Exception if the change is invalid
  */
 public function isChangeValid(\Site $site, \CertificationStatus $newCertStatus)
 {
     $oldStatus = $site->getCertificationStatus()->getName();
     $newStatus = $newCertStatus->getName();
     // This exception is only thrown if the transition is invalid
     $error = "A Certification Status can't transition from {$oldStatus} to {$newStatus}.";
     $e = new \Exception($error);
     if ($oldStatus === 'Suspended' && $newStatus === 'Certified') {
         throw $e;
     }
     if ($oldStatus === 'Closed') {
         throw $e;
     }
     // forbidden: candidate -> any other status except uncertified and closed
     if ($oldStatus == 'Candidate') {
         if ($newStatus !== 'Uncertified' && $newStatus !== 'Closed') {
             throw $e;
         }
     }
 }