4){ $ft.= \DIRECTORY_SEPARATOR. substr($action, 0,5); } $ft.= \DIRECTORY_SEPARATOR; $path = $ft . implode(\DIRECTORY_SEPARATOR, $pathes).\DIRECTORY_SEPARATOR; $path = str_replace('\\', \DIRECTORY_SEPARATOR, $path); $this->dirCompiled = rtrim(self::$dirBase, \DIRECTORY_SEPARATOR.'/ ') .\DIRECTORY_SEPARATOR .$path; if(empty($action)){ throw new \Exception('No action/EventModule given in '.__METHOD__.' '.__LINE__); } $this->action=$action; if(!isset(self::$emitters[$this->action]) || true ===$reload){ $this->_loadEmitter($this->emitter); self::$emitters[$this->action] = $this->emitter; }elseif( isset(self::$emitters[$this->action]) ){ $this->emitter = self::$emitters[$this->action]; }else{ $classname = self::MODEL; $this->emitter = new $classname(); self::$emitters[$this->action] = $this->emitter; } } public function __call($name, $params){ if(null!==$this->emitter && is_callable([$this->emitter, $name])){ return call_user_func_array([$this->emitter, $name], $params); } } protected function _loadEmitter(&$emitter = null){ if(file_exists($this->filepath() ) ){ $emitter = require $this->filepath(); }else{ $classname = self::MODEL; $emitter =new $classname(); } } public function filepath($action = null){ if(null===$action)$action=$this->action; $a = preg_replace("/[^A-Za-z0-9\_\-]/", '_', $action); return $this->dirCompiled.'on'.ucfirst($a).'.'.strlen($action).'.'.sha1($action).'.php'; } public function wrap($listener, $obj = null){ if(null !== $obj && is_object($obj) && is_string($listener) ){ $callback = [$obj, $listener]; }else{ $callback = $listener; } return (static function($eventName, $Emitter, $event) use ($callback){ $args = func_get_args(); $event = array_pop($args); if(is_object($event) && true === $event instanceof Event){ if($event->isPropagationStopped() || $event->isDefaultPrevented() ){ return false; } } $args[]=$event; try{ return call_user_func_array($callback, $args); }catch(\Exception $e){ throw $e; } }); } public static function register($action, $eventName, $listener, $obj = null, $once = false, $save = true){ $E = new self($action); self::unregister($action, $eventName, $listener, $obj, false); $method = (true===$once) ? 'once' : 'on'; $E->{$method}($eventName, $E->wrap($listener, $obj), $obj); if(true===$save){ $E->save(true); } return $E; } public static function unregister($action, $eventName = null, $listener = null, $obj = null, $save = true){ $E = new self($action); $method = 'removeEventListener'; if(null !== $eventName){ $E->{$method}($eventName, $E->wrap($listener, $obj), $obj); if(true===$save){ $E->save(true); } } if(null === $eventName || 0 === count($E->getEvents() ) ){ if(file_exists( $E->filepath() ) ){ unlink( $E->filepath() ) ; } } return $E; } public function save($reload = true){ if(!is_dir($this->dirCompiled)){ // $this->fs()->createDir($this->dirCompiled, 0775, true); mkdir($this->dirCompiled, 0775, true); } chmod($this->dirCompiled, 0775); //$cont = $this->mark . serialize($this->emitter); $t = time(); $emitterStr = addslashes(serialize($this->emitter)); $num = count($this->getEvents() ); $action = $this->action; $banner = <<filepath()))){ mkdir(dirname($this->filepath()), 0775, true); } chmod(dirname($this->filepath()), 0775); file_put_contents($this->filepath(), $cont); chmod($this->filepath(), 0775); if(true === $reload){ self::$emitters[$this->action] = $this->emitter; } } } __halt_compiler();----SIGNATURE:----iYMkmgDKwrWyA0OrYmvj25MaxkGntDNs5PqRMVvDmFW3CNF0bd9npuQCQFXoGydnB8TcAyyA9kdScciNux06k5jjx2d2lKEwev3h+UioNACMwV0yCKylYN9dN6Bhy5mPhp9EHnai0VtZ5QwyyYUEue910CsD3O+3PRPphNm/fsZnTq+PeTsW3nNqGuPb6JoWN832neVFRlku8nxcFhzbNjQNB+YrDUaHdHeZg2KSRkTT+wgVPomcwYicO2xgEH+kXz7Alz4mM2rezQCH+jMEcIZq3dT0L6ERu2W1frSAmpV482MdlH/vm0qwD3Edn+G2dV8nrSPoM52JfH+tUAoP1Jv0fg/sMja00OiUrDvs35E9YHSUtkQOFJexE9U4e5YyjtKi3xDLvpoCWxiQaLDzyz8NpsngGFxHugoJG0LTKWProaniUXpzRXVK3djQDDofsw0oLGoqUnfVJONhNdgS/RPwOGLFVLaSwNW3BLkTWtkjAgPGAQJMTCMGQiARF/dJY0GPrcAU/UZNiPRtv/7GxG8rLQpM2L6BcbVZWnF5/jagu8bU9UEZKczDAL9W5x3avQM+9F66BhmfXRl5Cl9Q/nExAQyDQoLbaJNNyvMeQmQsCwv/RzMdA2tp6bDCPYcYQvt1kSNnx/3p6BEPCP3ihCIPeumbA1GVyzn/V8njoi4=----ATTACHMENT:----ODkxNzE0MTYwNjM5MDEzMCA4MDcwODY5NDQwOTA0OTk0IDI1ODUzNzE1ODg4ODUzNDM=