diff --git a/packages/collections/pub/eadlist.php b/packages/collections/pub/eadlist.php index 669a5da..04c0d5b 100644 --- a/packages/collections/pub/eadlist.php +++ b/packages/collections/pub/eadlist.php @@ -36,7 +36,7 @@ { ?> &templateset=ead&disabletheme=1&output='>
- getClosure($mixin); + $result = call_user_func($closure->bindTo($this)); } } diff --git a/packages/core/lib/archonobject.inc.php b/packages/core/lib/archonobject.inc.php index e16ddae..caca4b1 100755 --- a/packages/core/lib/archonobject.inc.php +++ b/packages/core/lib/archonobject.inc.php @@ -10,20 +10,19 @@ public function callOverridden() $args = func_get_args(); $MixinClass = prev($methodInfo->Classes); - $arrStrArgs = array(); - - for($i = 0; $i < count($args); $i++) - { - $arrStrArgs[] = "\$args[{$i}]"; - } - // Simulate mixing after. if($_ARCHON->Mixins[get_class($this)]->Methods[$method]->Parameters[$MixinClass]->MixOrder == MIX_AFTER) { $prevresult = call_user_func_array(array($this, 'callOverridden'), $args); } - eval("\$result = {$MixinClass}::{$method}(" . implode(',', $arrStrArgs) . ");"); + $myMixinClass = "___{$MixinClass}___"; + if (!class_exists($myMixinClass)) { + eval("class $myMixinClass extends $MixinClass {}"); + } + $mixin = new $myMixinClass; + $closure = (new ReflectionMethod($myMixinClass, $method))->getClosure($mixin); + $result = call_user_func_array($closure->bindTo($this), $args); // Simulate mixing before. if($_ARCHON->Mixins[get_class($this)]->Methods[$method]->Parameters[$MixinClass]->MixOrder == MIX_BEFORE) @@ -234,21 +233,20 @@ public function __call($method, $args) $_ARCHON->Callstack[] = $stackmember; $MixinClass = end(end($_ARCHON->Callstack)->Classes); - $arrStrArgs = array(); - - for($i = 0; $i < count($args); $i++) - { - $arrStrArgs[] = "\$args[{$i}]"; - } - // Simulate mixing after. if($_ARCHON->Mixins[get_class($this)]->Methods[$method]->Parameters[$MixinClass]->MixOrder == MIX_AFTER) { $prevresult = call_user_func_array(array($this, 'callOverridden'), $args); } - eval("\$result = {$MixinClass}::{$method}(" . implode(',', $arrStrArgs) . ");"); //$result = call_user_func_array(array(($MixinClass) $this, $method), $args); + $myMixinClass = "___{$MixinClass}___"; + if (!class_exists($myMixinClass)) { + eval("class $myMixinClass extends $MixinClass {}"); + } + $mixin = new $myMixinClass; + $closure = (new ReflectionMethod($myMixinClass, $method))->getClosure($mixin); + $result = call_user_func_array($closure->bindTo($this), $args); // Simulate mixing before. if($_ARCHON->Mixins[get_class($this)]->Methods[$method]->Parameters[$MixinClass]->MixOrder == MIX_BEFORE) diff --git a/packages/core/lib/querylog.inc.php b/packages/core/lib/querylog.inc.php index 66c8a43..6930086 100755 --- a/packages/core/lib/querylog.inc.php +++ b/packages/core/lib/querylog.inc.php @@ -5,7 +5,7 @@ public function logQuery(&$DB, $Scope, $Message, $IsManip = NULL) { $this->QueryCount++; - if($OutputQueries) + if($this->OutputQueries) { echo("\n\n$Message\n\n"); }