openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

Value.class.php (2295B)


      1 <?php
      2 
      3 namespace template_engine\element;
      4 
      5 use template_engine\engine\TemplateEngine;
      6 use util\text\variables\VariableResolver;
      7 
      8 class Value
      9 {
     10     private $value;
     11     private $expressions = [];
     12 
     13     const CONTEXT_PHP = 0;
     14     const CONTEXT_HTML = 1;
     15     const CONTEXT_RAW = 2;
     16 
     17 
     18 	/**
     19 	 * @param int $type a type from ValueExpression
     20 	 * @param string $name
     21 	 * @return string
     22 	 */
     23     public static function createExpression($type, $name)
     24     {
     25     	$expr = new ValueExpression($type,$name,0);
     26         return $expr->getAsString();
     27     }
     28 
     29     public function __construct($value)
     30     {
     31     	if   ( $value instanceof ValueExpression )
     32 		{
     33 			$value = $value->getAsString();
     34 		}
     35 
     36 		$this->value = $value;
     37     }
     38 
     39 
     40     public function render($context)
     41     {
     42     	$res = new VariableResolver();
     43     	$res->namespaceSeparator = ':';
     44     	$res->defaultSeparator   = '?';
     45 
     46     	$res->addDefaultResolver( function($name) {
     47 			$parts = explode('.', $name);
     48 
     49 			return '\'.'.array_reduce($parts, function ($carry, $item) {
     50 				if (!$carry)
     51 					return '@$' . $item;
     52 				else
     53 					return $carry . '[\''.$item.'\']';
     54 			}, '').'.\'';
     55 		});
     56 
     57 		$res->addResolver( 'message',function($name) {
     58 
     59 			return '\'.@'.TemplateEngine::OUTPUT_ALIAS.'::lang(\'' . $name . '\').\'';
     60 		});
     61 
     62 		$res->addResolver('config', function($name) {
     63 			$config_parts = explode('/', $name);
     64 			return '\'.'.TemplateEngine::OUTPUT_ALIAS.'::config([' . "'" . implode("'" . ',' . "'", $config_parts) . "'" . ']).\'';
     65 		});
     66 
     67 
     68         switch ($context) {
     69             case Value::CONTEXT_PHP:
     70 				$escape = function ($expr) use ($context) {
     71 					return $expr;
     72 				};
     73 				break;
     74 
     75             case Value::CONTEXT_HTML:
     76 				$escape = function ($expr) use ($context) {
     77 						return TemplateEngine::OUTPUT_ALIAS.'::escapeHtml(' . $expr . ')';
     78 				};
     79 				break;
     80 			case Value::CONTEXT_RAW:
     81 				$escape = function ($expr) use ($context) {
     82 					return $expr;
     83 				};
     84 				break;
     85         }
     86 
     87         if   ( $context == self::CONTEXT_PHP ) {
     88 			return '\''.$res->resolveVariables( $this->value ).'\'';
     89 
     90 		} else {
     91 
     92 			$this->value = str_replace('\'','\\\'',$this->value);
     93 			return '<'.'?'.'php '.'echo '. $escape('\''.$res->resolveVariables( $this->value ).'\'').' ?'.'>';
     94 		}
     95     }
     96 
     97     public function __xtoString()
     98 	{
     99 		return print_r($this,true);
    100 	}
    101 }