/**
  * Checks if the migration is necessary
  *
  * @access public
  * @throws FatalMisconfigurationException
  * @throws FatalNotImplementedException
  * @return boolean
  */
 public function MigrationNecessary()
 {
     try {
         $this->sm = ZPush::GetStateMachine();
     } catch (HTTPReturnCodeException $e) {
         echo "Check states: states versions do not match and need to be migrated\n\n";
         // we just try to get the statemachine again
         // the exception is only thrown the first time
         $this->sm = ZPush::GetStateMachine();
     }
     if (!$this->sm) {
         throw new FatalMisconfigurationException("Could not get StateMachine from ZPush::GetStateMachine()");
     }
     if (!$this->sm instanceof FileStateMachine) {
         throw new FatalNotImplementedException("This conversion script is only able to convert states of the FileStateMachine");
     }
     if ($this->sm->GetStateVersion() == ZPush::GetLatestStateVersion()) {
         return false;
     }
     if ($this->sm->GetStateVersion() !== self::FROMVERSION || ZPush::GetLatestStateVersion() !== self::TOVERSION) {
         throw new FatalNotImplementedException(sprintf("This script only converts from state version %d to %d. Currently the system is on %d and should go to %d. Please contact support.", self::FROMVERSION, self::TOVERSION, $this->sm->GetStateVersion(), ZPush::GetLatestStateVersion()));
     }
     // do migration
     return true;
 }
Ejemplo n.º 2
0
 /**
  * Returns the StateMachine object
  * which has to be an IStateMachine implementation
  *
  * @access public
  * @throws FatalNotImplementedException
  * @throws HTTPReturnCodeException
  * @return object   implementation of IStateMachine
  */
 public static function GetStateMachine()
 {
     if (!isset(ZPush::$stateMachine)) {
         // the backend could also return an own IStateMachine implementation
         $backendStateMachine = self::GetBackend()->GetStateMachine();
         // if false is returned, use the default StateMachine
         if ($backendStateMachine !== false) {
             ZLog::Write(LOGLEVEL_DEBUG, "Backend implementation of IStateMachine: " . get_class($backendStateMachine));
             if (in_array('IStateMachine', class_implements($backendStateMachine))) {
                 ZPush::$stateMachine = $backendStateMachine;
             } else {
                 throw new FatalNotImplementedException("State machine returned by the backend does not implement the IStateMachine interface!");
             }
         } else {
             // Initialize the default StateMachine
             if (defined('STATE_MACHINE') && STATE_MACHINE == 'SQL') {
                 ZPush::$stateMachine = new SqlStateMachine();
             } else {
                 ZPush::$stateMachine = new FileStateMachine();
             }
         }
         if (ZPush::$stateMachine->GetStateVersion() !== ZPush::GetLatestStateVersion()) {
             if (class_exists("TopCollector")) {
                 self::GetTopCollector()->AnnounceInformation("Run migration script!", true);
             }
             throw new HTTPReturnCodeException(sprintf("The state version available to the %s is not the latest version - please run the state upgrade script. See release notes for more information.", get_class(ZPush::$stateMachine)), HTTP_CODE_500);
         }
     }
     return ZPush::$stateMachine;
 }