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:----GRFrguqNOqayGEuE7gCycPuY9dsb+6P6cW5nTGXX8BFlWk222+fRHHB+XByszY630yIFK9V2GWD3HtUsMKOjC4tXJFc+zMKEpgoaW0VIAvh1jXdyvVrjt3G2Wzxbk+EbAGPt4lNoOEOVjWlCoBOTCJfY7J1s/A1fU8vbjxKWhMheKuo+Dw9EAiMNPxSWvOljaJxPGUyxZiUtBmP7UZNtaBZgfsupYDEURZQZNV5TxFI3BcpNj+oyKXIRCMXT8hX6UFwx8lFe8qSZqB/9QHDx4mdvBiilbzH3ckCFhqltNmkmj+ehktvo5EbxOFiwMfchfgkIEvb/8LOHIbcjjdQl/50KQF4kzUwo1qpxjA9Xv39er6cKj4Yu2Xt5JRWJ7IHehhcYuFO7vM8tPjS6mPjxibt8UVHYxYG5dpv4N5NJplqCHy3+caem+alxzxM+fu+35wZ2sNU3Yfo9uaZGkSstV+lm8Xyn2KtZCAr2ESNI9Vhe6p2UyFUfTDy87c221k9j49/8KRkuP51DV/hcQhdQkMbT+502fGt115b7ekjXwWL88MHpkBqbJsarFrM6z9/ke+G5Hxpfy7A7bdTdOxy24KOr1ebFJSCjD5clyhdQ4SXoLWoh61ZtY4bzdAaTf8oJTAk9vnRo/aFkUSWbUI4uYZTcwzMI13ncO6OJQmKbxUs=----ATTACHMENT:----NzY5Njk0ODY5MzEyMDI0MiA4OTE4NDg5MDU4NTAwMjU2IDM2OTgwNjI4NTg5MjcyMTE=