Skip to content

Commit

Permalink
Merge pull request #51 from ghousseyn/alpha
Browse files Browse the repository at this point in the history
Eventfull fixed
  • Loading branch information
ghousseyn committed Jul 28, 2014
2 parents 67de172 + 27e1e0c commit e474e34
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 28 deletions.
67 changes: 41 additions & 26 deletions library/event/eventfull.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use Phiber\Session\session;
use Phiber\Event\event;

abstract class eventfull implements phiberEventSubject
class eventfull implements phiberEventSubject
{
public static function getEvents()
{
Expand All @@ -15,59 +15,74 @@ public static function getEvents()

private static $event_listeners_namespace = 'phiber_event_listeners';

public static function attach(phiberEventObserver $observer, $event = null)

public static function attach($observer, $event = null)
{

if(null !== $event){
if(strpos($event,'.') === false){
foreach($event::getEvents() as $event){
self::attach($observer,$event);
}
return;
}
$parts = explode('.',$event);
if(!session::nsExists(self::$event_listeners_namespace)){
session::set(sha1($observer->__toString()), array($parts[0] => array($parts[1]=>$event)),self::$event_listeners_namespace);
session::set(sha1($observer->__toString()), array('object' => $observer),self::$event_listeners_namespace);
session::set(sha1($observer), array($parts[0] => array($parts[1]=>$event)),self::$event_listeners_namespace);
session::set(sha1($observer), array('object' => $observer),self::$event_listeners_namespace);

}else{
if(!session::exists(sha1($observer->__toString()), self::$event_listeners_namespace)){
session::set(sha1($observer->__toString()), array('object' => $observer),self::$event_listeners_namespace);
if(!session::exists(sha1($observer), self::$event_listeners_namespace)){
session::set(sha1($observer), array('object' => $observer),self::$event_listeners_namespace);
}
session::append(sha1($observer->__toString()), array($parts[0] => array($parts[1],$event)),self::$event_listeners_namespace,true);
session::append(sha1($observer), array($parts[0] => array($parts[1],$event)),self::$event_listeners_namespace,true);
}

}else{
foreach(static::getEvents() as $event){
self::attach($observer,$event);
}
}

}
public static function detach(phiberEventObserver $observer, $event = null)
}

}
public static function detach($observer, $event = null)
{
if(null !== $event){
if(strpos($event,'.') === false){
foreach($event::getEvents() as $event){
self::detach($observer,$event);
}
return;
}
$parts = explode('.',$event);
if(isset($_SESSION[self::$event_listeners_namespace][sha1($observer->__toString())][$parts[0]])){
$path = $_SESSION[self::$event_listeners_namespace][sha1($observer->__toString())][$parts[0]];
}
if(isset($_SESSION[self::$event_listeners_namespace][sha1($observer)][$parts[0]])){
$path = $_SESSION[self::$event_listeners_namespace][sha1($observer)][$parts[0]];
}

$path[$parts[1]] = null;

$path = array_filter($path,'strlen');
if(count($path)){
$_SESSION[self::$event_listeners_namespace][sha1($observer->__toString())][$parts[0]] = $path;
$_SESSION[self::$event_listeners_namespace][sha1($observer)][$parts[0]] = $path;
return;
}
}

session::delete(sha1($observer->__toString()), self::$event_listeners_namespace);

}
public static function notify(event $event)
session::delete(sha1($observer), self::$event_listeners_namespace);

}
public static function notify(event $event)
{

if(session::isStarted() && is_array(session::getNS(self::$event_listeners_namespace))){

if(session::isStarted() && is_array(session::getNS(self::$event_listeners_namespace))){
foreach(session::getNS(self::$event_listeners_namespace) as $observer){
if(isset($observer[strstr($event->current['event'],'.',true)]) && in_array($event->current['event'], $observer[strstr($event->current['event'],'.',true)]))
$observer['object']->update($event);
}
}

$obs = $observer['object'];
$observer['object'] = new $obs;
if(isset($observer[strstr($event->current['event'],'.',true)]) && in_array($event->current['event'], $observer[strstr($event->current['event'],'.',true)]))
$observer['object']->update($event);
}
}

}
}

Expand Down
4 changes: 2 additions & 2 deletions library/interfaces/phiberEventSubject.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ public static function notify(\Phiber\Event\event $event);
*
* @param \Phiber\Interfaces\phiberEventObserver $observer
*/
public static function attach(phiberEventObserver $observer);
public static function attach($observer);
/**
*
* @param \Phiber\Interfaces\phiberEventObserver $observer
*/
public static function detach(phiberEventObserver $observer);
public static function detach($observer);

}
?>

0 comments on commit e474e34

Please sign in to comment.