58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\data\expr;
 | 
						|
 | 
						|
use nur\A;
 | 
						|
use nur\b\coll\BaseArray;
 | 
						|
use nur\b\ValueException;
 | 
						|
use nur\func;
 | 
						|
use nur\md;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class GenericExpr: une expression générique, utilisée par défaut
 | 
						|
 */
 | 
						|
class GenericExpr extends BaseArray implements IExpr {
 | 
						|
  static final function with($expr, ?string $key=null): IExpr {
 | 
						|
    if ($expr instanceof IExpr) return $expr;
 | 
						|
    return new GenericExpr($expr, $key);
 | 
						|
  }
 | 
						|
 | 
						|
  function __construct($data=null, ?string $key=null) {
 | 
						|
    md::ensure_schema($data, static::SCHEMA, null, false);
 | 
						|
    A::replace_z($data, "name", $key);
 | 
						|
    A::replace_z_indirect($data, "name", "value");
 | 
						|
    A::replace_z_indirect($data, "title", "name");
 | 
						|
    parent::__construct($data);
 | 
						|
  }
 | 
						|
 | 
						|
  function getValue(): ?string {
 | 
						|
    return $this->data["value"];
 | 
						|
  }
 | 
						|
 | 
						|
  function getName(): string {
 | 
						|
    return $this->data["name"];
 | 
						|
  }
 | 
						|
 | 
						|
  function getTitle(): string {
 | 
						|
    return $this->data["title"];
 | 
						|
  }
 | 
						|
 | 
						|
  public function eval(IContext $context) {
 | 
						|
    $expr = $this->getValue();
 | 
						|
    if (func::is_static($expr) || func::is_method($expr)) {
 | 
						|
      return $context->callMethod($expr);
 | 
						|
    } elseif (is_string($expr)) {
 | 
						|
      $prefix = substr($expr, 0, 1);
 | 
						|
      if ($prefix == "*") {
 | 
						|
        # session
 | 
						|
        return $context->getSession(substr($expr, 1));
 | 
						|
      } elseif ($prefix == "+") {
 | 
						|
        # config
 | 
						|
        return $context->getConfig(substr($expr, 1));
 | 
						|
      }
 | 
						|
      # valeur à récupérer du contexte
 | 
						|
      return $context->getValue($expr);
 | 
						|
    }
 | 
						|
    throw ValueException::unexpected_type(["string", "callable"], $expr);
 | 
						|
  }
 | 
						|
}
 |