예제 #1
0
 /**
  * Instantiate new process of a given class. Throws exception if class is not valid
  * 
  * @param string $processClass
  * @return Oops_Process
  * @throws Oops_Process_Exception
  */
 public static function newProcess($processClass, $inputValues)
 {
     Oops_Loader::load($processClass);
     $reflectionClass = new ReflectionClass($processClass);
     if (!$reflectionClass->isSubclassOf('Oops_Process_Abstract')) {
         throw new Oops_Process_Exception("Invalid process class {$processClass}");
     }
     /**
      * 
      * @var Oops_Process_Abstract $process
      */
     $process = $reflectionClass->newInstance();
     $process->init($inputValues);
     if (!$process->pid) {
         throw new Oops_Process_Exception("Process init error, no pid for instance of {$processClass}", OOPS_PROCESS_EXCEPTION_NO_PID);
     }
     self::$_processes[$process->pid] = $process;
     return $process;
 }
예제 #2
0
 /**
  * Notifies registered observers and nested dispatchers (if implemented)
  *
  * @param
  *        	object The notification object
  * @return object The notification object //!!!! not necessary
  */
 public function postNotification($notification)
 {
     $event = strtolower($notification->getEvent());
     if (!isset($this->_ro[$event])) {
         return $notification;
     }
     foreach ($this->_ro[$event] as $callback) {
         if ($notification->isCancelled()) {
             return $notification;
         }
         if (is_array($callback) && !is_object($callback[0])) {
             require_once 'Oops/Loader.php';
             Oops_Loader::load($callback[0]);
         }
         call_user_func_array($callback, array($notification));
     }
     /* Here to call nested dispatchers and pending observers */
     foreach ($this->_nestedDispatchers as $nestedDispatcher) {
         $notification = $nestedDispatcher->postNotification($notification);
     }
     return $notification;
 }