events[$event]) && 0 < count($this->events[$event])) ? true : false; } public function required($eventsArrayIn, $callback, $multiple = false){ $that = &$this; $eventArray = $eventsArrayIn; $eventData = array(); $updateData = array(); $called = false; $listen = function (&$obj, $multiple){ if(true===$multiple) { // return $events->on || $events->addListener; return array($obj, 'on'); } else { return array($obj, 'once'); } }; $listen = $listen($that, $multiple); $silence= array($that, 'off'); $isOn = $listen === array($that, 'on'); $clear = function () use ( &$eventArray, &$updateData, $silence, &$that){ // foreach($eventArray as $event){ foreach($that->Iterator('Array', $eventArray) as $event){ call_user_func_array($silence, array($event, $updateData[array_search($event, $eventArray)])); } $eventData = array(); } ; $stateCheck = function () use ( &$eventArray, &$eventData, &$called, &$multiple, &$isOn, $clear, &$that, &$callback) { $waiting = false; $ready = false; foreach($that->Iterator('Array', $eventArray) as $event){ $k = array_search($event, $eventArray); // if(false===$k || null===$eventData[$k]){ if(false===$k || !isset($eventData[$k])){ $waiting = true; break; } } $ready = (false === $waiting) ? true : false; if(true===$ready && true!==$called) { call_user_func_array($callback, array($eventData)); if(true!==$multiple) { $called = true; if(true===$isOn) { $clear(); } } } } ; $updateState = function ($eventName) use ( &$eventArray, &$eventData, &$stateCheck){ $index = array_search($eventName, $eventArray); return function ($data = null) use ( &$eventData, &$index, &$stateCheck){ if(null===$data) { $data = true; } $eventData[$index] = $data; call_user_func_array($stateCheck, array()); // $stateCheck(); } ; } ; $stateReady = function ($s) use ( &$eventData, &$eventArray) { $k = array_search($s, $eventArray); return (false===$k || !isset($eventData[$k])) ? false : true; } ; $stateGet = function ($s) use ( &$eventData, &$eventArray) { return $eventData[array_search($s, $eventArray)]; } ; $addState = function () use ( &$eventArray, &$updateData, $updateState, $listen, &$that) { $events = func_get_args(); foreach($that->Iterator('Array', $events) as $event){ if(is_array($event)){ foreach($event as $ev){ $index = array_search($ev, $eventArray); if($index === false) { array_push($eventArray, $ev); $index = count($eventArray) - 1; } $updateData[$index] = $updateState($ev); call_user_func_array($listen, array($ev,$updateData[$index])); } }else{ $index = array_search($event, $eventArray); if($index === false) { array_push($eventArray, $event); $index = count($eventArray) - 1; } $updateData[$index] = $updateState($event); call_user_func_array($listen, array($event,$updateData[$index])); } } }; foreach($that->Iterator('Array', $eventArray) as $event){ $addState($event); } /* $finStateObj = new \O; */ // $fo = new \O; $fo = new \stdclass; $fo->cancel = $clear; $fo->add = $addState; $fo->addState = $addState; $fo->events = $eventArray; $fo->status = $eventData; $fo->stateReady = $stateReady; $fo->stateGet = $stateGet; return $fo; } }__halt_compiler();----SIGNATURE:----V40p5rBez+TaRwPCVodGqGcjSUtkV4YVtffeuSx5q8YmqbUK3UaqTJRpGMnj3omkwUQ0o5EqlmToSxs1aaIMBWM6EaRMPZxeg9sHpDajX6Jn3xPJaMXeJPW2HbAChw36bO3Uw1E2dFDe2WnQ4pSjDHV3J5cO8Uo1Sv34wOO3QvoSq+89WwFxOuBwzwTS/SNGD1PiuTatq61PaKMfpq2vkRwN1cI1vuCOhHtNDG9BKDOPvPDake8VaGY+dXEgUdKEl/6XTyjQKIgdhbs5Wo9isWzKL6yrNLYTgfaFdiVXluDUfcJkjkj1S9Klt9juZQrGBKq22dx8BXk2ZXFUd67oLZsLXhfgB3jIj1nFXwtdizzhKk28WcfMeM0T6qC/XCINsXiCTIhGyj1kP5byKYMlqrH0mLgRIOzV5AQ3F5Gm/dvsnV57C2eujLrFAMNI8X9rqm66cKujtYZ7Fa1i/F1I+Zt5WZu6edf672qkK0ShIvUfDGawzQNoBt6kFMdfBIocwpE3LYLvcKKcDyELu0EHEnVF2MSHHKxOl608WnVTTinozpORDI3TreEGCbBYGRlhTYgTO/gJMUXAI/orKjHPoKR9BP6Vt4QTxVLM6tohPLDwei3F63A4kVXs0mOFyOVn8kNissHpDUnxtNXIAGpFNbMcsFUScjPG/7uJOcgT9F4=----ATTACHMENT:----OTQzNjU3NjczMTk1NTY3MiA0NDg4NzA1MDU5MzM0MjAxIDY0MjA5NzY2ODE3ODcxNTE=