protected function tokenParamToCode(Token $token) { $name = $token->getProp('name'); $props = $token->getAllProps(); if (!isset($props['type']) && isset($props['values'])) { $props['type'] = 'select'; } if ($props['type'] === 'select' && !preg_match("~^`~", $props['values'])) { $props['values'] = self::parseCssLikeProps($props['values']); if (!isset($props['default'])) { $props['default'] = current(array_keys($props['values'])); } } fx::cdebug($props); unset($props['name']); $val_var = "\$param__" . $name . "_value"; $code = "<?php\n"; $code .= $val_var . " = \$context->get('" . $name . "');\n"; $val_is_null = $val_var . "_is_null"; $code .= $val_is_null . " = is_null(" . $val_var . ");\n"; if (isset($props['default'])) { // handle computable defaults $default_val = "'" . $props['default'] . "'"; $code .= "if (" . $val_is_null . ") {\n"; $code .= $val_var . " = " . $default_val . ";\n"; $code .= "\$context->set('" . $name . "', " . $val_var . ");\n"; $code .= "}\n"; } $code .= "if (\$_is_admin ) {\n"; $exported_props = array("'is_forced' => !" . $val_is_null . " && \$context->getLastVarLevel() !== 1", "'value' => " . $val_var); foreach ($props as $k => $v) { $c_prop = "'" . $k . "' => "; if (!is_string($v)) { $c_prop .= var_export($v, 1); } elseif (preg_match("~^\\`.+\\`\$~", $v)) { $c_prop .= trim($v, '`'); } else { $c_prop .= "'" . addslashes($v) . "'"; } $exported_props[] = $c_prop; } $code .= "\$this->registerParam('" . $name . "', array(" . join(", ", $exported_props) . ") );\n"; $code .= "}\n"; $code .= "?>"; return $code; }