/** * 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; }
/** * 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; }