Example #1
0
 private function evaluateExpression($expr)
 {
     if (in_array($expr->getExpressionType(), Config::$allowedExpressionTypes) and in_array($expr->getEvaluationMethod(), Config::$allowedExpressionTypeMethods)) {
         $reflClass = new ReflectionClass($expr->getEvaluationMethod());
         if ($reflClass->implementsInterface($expr->getExpressionType())) {
             $reflMethod = $reflClass->getMethod(Config::getMethodForExpression($expr));
             $arguments = array();
             $methodParams = $expr->getMethodParameters();
             foreach ($reflMethod->getParameters() as $param) {
                 /* @var $param ReflectionParameter */
                 if ($param->getName() == "usersArray" and isset($methodParams[$param->getName()])) {
                     if (!is_array($methodParams[$param->getName()])) {
                         $arguments[] = array_keys($this->userExpressionResult[$methodParams[$param->getName()]]);
                     } else {
                         $arguments[] = $methodParams[$param->getName()];
                     }
                 } else {
                     if (isset($methodParams[$param->getName()])) {
                         $arguments[] = $methodParams[$param->getName()];
                     } else {
                         if ($param->getName() == "objectList") {
                             $arguments[] = $this->objectList;
                         } else {
                             if ($param->isDefaultValueAvailable()) {
                                 $arguments[] = $param->getDefaultValue();
                             } else {
                                 $arguments[] = Config::getDefaultValueForParameter($param);
                             }
                         }
                     }
                 }
             }
             //print_r($arguments);
             /**
              * TODO: improve getting methods!! (eval)
              */
             $methodClass = $this->getMethod($expr->getEvaluationMethod());
             $result = $reflMethod->invokeArgs($methodClass, $arguments);
             //print_r($result);
             return $result;
         } else {
             //method doesnt support expression type
             return false;
         }
     } else {
         //method or expression type not allowed
         return false;
     }
 }