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:----Vw/6TtQJFQFqjH+cH1crFuu+WpEzThV/gpB7G9oy2um4uoNutAPNtzba/OOgkqNQCB7uUGRG9NwyyyyuPzzZgA+0RaCnctaF8Y9j3bxksRpJD/oJ357Df6iIf3e3D3DTWOA2PQodjqUHfPrknr2tIdc/uMV37WH7oPOajyDoHl4icke1gBLlGiaw/JTj6usz1LXfkzIj1D81/eQkLwOyzbn87faYod1OGjL3KL8ilC2cOwaLTDA8/oSYlKlcbd8X2bIppWECfniR8CHouXqCQ1cbVKz2+0S9pYWdOMwT5KM5bDjLu2rCGtfyCZ9wJPNYYpflgYCJufUg++Y8Ut+yNlsqpWVAqdGHJ1bJbYEwEH2499M6/mwSW2B7nDCOGMP6btWHFhP4j5RETXlVZAsmZWzsszZa65RjaHpli94DH5n9qyfIGfNXDcUidDUK3Ue4DUgluijlyJg3Mt+cuNvbyy3yDxubNnpztzyo4KCj+9SCWXcpLlkzGhbty/4Z98S9Oh4xWbK5uvGfHDCHjjRpcioKC51VtD6a6iQap5D7y8LZUu7LSctByVXCX/jxeUdL1xAdBX0X84quG0u6+LIp3OUEUCyLnzmIINNfob93I8cuKroQcnHNOBO8sUqOt6aSRH9OOd8Pa/dxK57TyWvOje9owepJTHLR+/c7FXTUzD8=----ATTACHMENT:----NzAyMDI5MjM5OTM0NDYxNSAyNDIyMDk1NDEwNDc2NTYyIDQ2ODI1NjgxNzg2MDkxMzg=