public function __construct($route = null, $context = array(), $override = null, $root = false) { $route = str_replace('/', DIRECTORY_SEPARATOR, $route); $this->rid = uniqid('', true); if (substr($route, 0, 1) == '~' || substr($route, 0, 2) == '/~') { $root = \runner::config("scaffold"); $route = str_replace('~', '', $route); if (strpos($route, '@') !== false) { $redirect_to = substr($route, strpos($route, '@') + 1); if (strpos($redirect_to, '?')) { $redirect_to = substr($redirect_to, 0, strpos($redirect_to, '?')); } \runner::now("redirected-subpage", $redirect_to); $route = DIRECTORY_SEPARATOR . trim(substr($route, 0, strpos($route, '@')), DIRECTORY_SEPARATOR); } } if (substr($route, 0, 1) == '@' || substr($route, 0, 2) == '/@') { $root = \runner::config("BACKEND_DIR") . DIRECTORY_SEPARATOR . 'scaffold'; $route = str_replace('@', '', $route); } $this->parent = \Routerunner\Routerunner::getParentInstance(false); if ($root && file_exists(realpath(\runner::config('SITEROOT') . $root))) { $this->scaffold_root = realpath(\runner::config('SITEROOT') . $root); } elseif (strpos($route, \Routerunner\Helper::$scaffold_class) !== false) { $this->scaffold_suffix = DIRECTORY_SEPARATOR . substr($route, 0, strpos($route, \Routerunner\Helper::$scaffold_class) + strlen(\Routerunner\Helper::$scaffold_class)); $route = substr($route, strpos($route, \Routerunner\Helper::$scaffold_class) + strlen(\Routerunner\Helper::$scaffold_class) + 1); } elseif (isset($this->parent->scaffold_root) && $this->parent->scaffold_root) { $this->scaffold_root = $this->parent->scaffold_root; } elseif (isset($this->parent->scaffold_suffix) && $this->parent->scaffold_suffix) { $this->scaffold_suffix = $this->parent->scaffold_suffix; } if ($this->scaffold_suffix) { $this->scaffold_root = realpath(\runner::config('SITEROOT') . \runner::config('scaffold') . $this->scaffold_suffix); } if (!$this->scaffold_root) { $this->scaffold_root = realpath(\runner::config('SITEROOT') . \runner::config('scaffold')); } if (substr($route, 0, 1) === DIRECTORY_SEPARATOR) { $this->route = $route; } elseif ($this->parent) { $this->route = $this->parent->runner->path . $this->parent->runner->route . DIRECTORY_SEPARATOR . $route; } else { $this->route = DIRECTORY_SEPARATOR . $route; } if (\Routerunner\Helper::includeRoute($this, 'runner', \runner::config("version"))) { // return valid Router with runner included if (!empty($this->runner->cache_key)) { $this->cache_route = str_replace(array('{$url}', '{$route}'), array(\Routerunner\Bootstrap::$baseUri, $this->runner->path . $this->runner->route), $this->runner->cache_key); } else { $this->cache_route = \Routerunner\Bootstrap::$baseUri . '|' . $this->runner->path . $this->runner->route; } if ($override) { $this->runner->override = $override; } if (is_array($context) && count($context)) { $this->runner->context = array_merge($this->runner->context, $context); } $this->runner->files = \Routerunner\Helper::getFiles($this->runner); $this->runner->route_parser(); if (\runner::config('silent')) { $this->runner->html = str_replace(array("\t", PHP_EOL . PHP_EOL), "", $this->runner->html); } \Routerunner\Routerunner::getParentInstance(); if ($this->runner->cache_exp >= 0) { $this->set_cache(); } } else { // exception: route not found } }
} elseif (isset($runner->context['accept'])) { $accept = $runner->context['accept']; } if (!function_exists('reorder')) { function reorder($children) { $order = array(0); array_walk($children, function ($val) use(&$order) { $order[] = $val['reference']; }); return $order; } } $element = isset($accept['panel']['element']) ? $accept['panel']['element'] : 'ul'; $html = ''; $parsed = \Routerunner\Helper::parse_array($accept, $model, array("children")); if (isset($parsed['panel']['attr']) && is_array($parsed['panel']['attr'])) { foreach ($parsed['panel']['attr'] as $attr => $value) { $html .= ' ' . $attr . '="' . $value . '"'; } } elseif (isset($parsed['panel']['attr']) && is_string($parsed['panel']['attr'])) { $html .= ' ' . $parsed['panel']['attr']; } $open = false; $select = false; $traverse = \runner::stack('traverse'); $models_created = \runner::stack("models_created"); $open = isset($runner->context['open']) ? $runner->context['open'] : false; $debug = 1; ?> <<?php
<?php /** * Created by PhpStorm. * User: csibi * Date: 2014.10.23. * Time: 16:23 */ $context = $runner->context; $tree = \runner::stack('tree'); $branch = \Routerunner\Helper::tree_route($tree, $context['route']); $accept = array(); if ($branch = \Routerunner\Helper::tree_route($tree, $context['route'])) { $accept = $branch; } $runner->context['accept'] = $accept; if ($runner->model) { $runner->model->accept = $accept; } $debug = 1;
private function backend_wrapper($html = '', $type = 'model', $context = false) { if ($context) { $backend_type_context = $context; } elseif (is_callable($this->backend_context[$type])) { $backend_type_context = $this->backend_context[$type]($this); } else { $backend_type_context = $this->backend_context[$type]; } if (!($tree = \runner::config("tree"))) { $scaffold = $this->scaffold_root; $tree = @(include $scaffold . '/model/tree.php'); } if ($type == 'container') { // get parent model $parent = 0; if (isset($backend_type_context['parent'])) { $parent = $backend_type_context['parent']; } if (!$parent && $this->model && $this->model->reference && ($parents = \Routerunner\Bootstrap::parent($this->model->reference))) { $array_pop = array_pop($parents); $parent = $array_pop['reference']; } if (!$parent && isset($backend_type_context['traverse']) && is_array($traverse = $backend_type_context['traverse'])) { if (count($traverse) && ($lvl = array_pop($traverse)) && ($parent_table_id = \bootstrap::get($lvl))) { if (is_array($parent_table_id)) { $tmp_parent_table_id = false; foreach ($parent_table_id["parents"] as $tmp_parent) { if ($tmp_parent["model_class"] == $lvl) { $tmp_parent_table_id = $tmp_parent["reference"]; } } if ($tmp_parent_table_id) { $parent_table_id = $tmp_parent_table_id; } } $SQL = 'SELECT reference FROM {PREFIX}models WHERE model_class = :class AND table_id = :table_id'; if ($result = \db::query($SQL, array(':class' => $lvl, ':table_id' => $parent_table_id))) { $parent = $result[0]['reference']; } } } // get acceptable models $accept = array(); if (isset($backend_type_context['accept'])) { $accept = $backend_type_context['accept']; } elseif (isset($backend_type_context['traverse']) && ($branch = \Routerunner\Helper::tree_route($tree, $backend_type_context['traverse'], $this->model))) { foreach ($branch['children'] as $child_class => $child_params) { if (isset($child_params['blank'])) { $blank[] = $child_class; $accept[$child_class] = $child_params['blank']; } } } $backend_type_context['parent'] = $parent; $backend_type_context['blank'] = $accept; if (!isset($backend_type_context['wrapper'])) { $backend_type_context['wrapper'] = array('class' => ''); } elseif (!isset($backend_type_context['wrapper']['class'])) { $backend_type_context['wrapper']['class'] = ''; } $classes = explode(' ', $backend_type_context['wrapper']['class']); $classes = array_merge($classes, array_keys($accept)); $backend_type_context['wrapper']['class'] .= implode(' ', $classes); } $dom = false; if ($html) { if (isset($backend_type_context['template']['opening'])) { $dom = \phpQuery::newDocument($backend_type_context['template']['opening'] . $html . $backend_type_context['template']['closing']); if (!$dom) { $dom = \phpQuery::newDocumentHTML($html); } } elseif (isset($backend_type_context['wrapper']['element'])) { $dom = \phpQuery::newDocumentHTML($html, $charset = 'utf-8'); $dom = $this->dom_wrapper($dom, $backend_type_context['wrapper']['element'], null); } else { $dom = \phpQuery::newDocumentHTML($html); } } elseif (isset($backend_type_context['wrapper']['element'])) { $html = '<' . $backend_type_context['wrapper']['element'] . '></' . $backend_type_context['wrapper']['element'] . '>'; $dom = \phpQuery::newDocumentHTML($html); } elseif (isset($backend_type_context['template']['opening'])) { $html = $backend_type_context['template']['opening'] . $backend_type_context['template']['closing']; $dom = \phpQuery::newDocumentHTML($html); } $root_nodes = array(); if ($dom && isset($backend_type_context['selector'])) { $root_nodes = pq($backend_type_context['selector'] . ":not(.routerunner-" . $type . ")"); } elseif ($dom) { $root_nodes = $dom->children(":not(.routerunner-" . $type . ")"); } $model = false; if ($type == 'model' && isset($this->model)) { $model = $this->model; } elseif ($type == 'container' && isset($backend_type_context['blank'])) { $model = new \stdClass(); $model->reference = 0; foreach ($backend_type_context['blank'] as $blank_field => $blank_value) { $model->{$blank_field} = $blank_value; } } foreach ($root_nodes as $index => $node) { if (!in_array(strtolower($node->tagName), array("html", "head", "body", "script", "style"))) { if (!$this->unique) { $this->unique = uniqid(); } $backend_class = 'routerunner-backend routerunner-inline routerunner-' . $type . ' routerunner-' . $type . '-wrapper '; if (isset($backend_type_context['wrapper']['class'])) { $backend_class .= $backend_type_context['wrapper']['class'] . ' '; } $pqnode = pq($node); $backend_context = $backend_type_context; unset($backend_context['wrapper']['element'], $backend_context['wrapper']['class'], $backend_context['wrapper']['attr'], $backend_context['template']['opening'], $backend_context['template']['closing']); $pqnode->removeAttr('data-routerunner-id'); $pqnode->removeAttr('data-route'); $pqnode->removeAttr('data-table_id'); if ($model) { foreach ($model as $data => $value) { $pqnode->removeAttr('data-' . $data); } } if (isset($backend_type_context['wrapper']['attr']) && is_array($backend_type_context['wrapper']['attr'])) { foreach (array_keys($backend_type_context['wrapper']['attr']) as $attr) { $pqnode->removeAttr($attr); } } if (isset($backend_context) && is_array($backend_context)) { foreach (array_keys($backend_context) as $data) { $pqnode->removeAttr('data-' . $data); } } // modify model tag if ($type == 'model' && $model) { $this->backend_id[$index] = 'ref' . $model->reference . '_' . $this->unique; $model->backend_ref = $this->backend_id[$index]; $pqnode->attr('data-routerunner-id', $this->backend_id[$index]); $pqnode->attr('data-route', $this->router->runner->path . $this->router->runner->route); $pqnode->attr('data-url', $model->url()); if ($model) { foreach ($model as $data => $value) { if (is_array($value)) { $value = json_encode($value, JSON_HEX_APOS); } else { $value = htmlentities(addslashes(preg_replace('/\\n|\\r/m', '', $value))); } $pqnode->attr('data-' . $data, $value); } } } elseif ($type == 'container') { $this->backend_id[$index] = 'route_' . trim(str_replace('/', '_', $this->path . $this->route), '_') . '_' . $this->unique; $pqnode->attr('data-routerunner-id', $this->backend_id[$index]); $pqnode->attr('data-route', $this->router->runner->path . $this->router->runner->route); if ($model) { foreach ($model as $attr => $value) { $traverse_child = isset($backend_type_context['traverse']) ? $backend_type_context['traverse'] : array(); $traverse_child[] = $attr; if ($branch = \Routerunner\Helper::tree_route($tree, $traverse_child)) { foreach ($branch as $branch_attr => $branch_value) { if (substr($branch_attr, 0, 4) == 'btn-' || $branch_attr == 'icon') { $value[$branch_attr] = $branch_value; } } } if (is_array($value)) { $value = json_encode($value, JSON_HEX_APOS); } else { $value = htmlentities(addslashes(preg_replace('/\\n|\\r/m', '', $value))); } $pqnode->attr('data-' . str_replace("/", "-", $attr), $value); } } } if (isset($backend_type_context['wrapper']['attr']) && is_array($backend_type_context['wrapper']['attr'])) { foreach ($backend_type_context['wrapper']['attr'] as $attr => $value) { $pqnode->attr($attr, $value); } } $backend_classes = explode(' ', $backend_class); foreach ($backend_classes as $class) { if (!$pqnode->hasClass($class)) { $pqnode->addClass($class); } } if (isset($backend_context) && is_array($backend_context)) { foreach ($backend_context as $data => $value) { if (is_array($value)) { $value = json_encode($value, JSON_HEX_APOS); } else { $value = htmlentities(addslashes(preg_replace('/\\n|\\r/m', '', $value))); } $pqnode->attr('data-' . $data, $value); } } } } $return = ""; if ($dom) { $return = $dom->htmlOuter(); } return $return; }
unset($override["reference"]); $reference = $reference["reference"]; } else { $reference = \bootstrap::get("reference"); } } $label = "new element"; $context = array("direct" => $reference, "silent" => true); $model = \model::load($context); if (is_array($model)) { $model = array_shift($model); } if ($model) { $label = $model->label; } $branch = \Routerunner\Helper::tree_route($tree, $route, $model); $container = array('traverse' => $route, 'selector' => '.rr-content-container', 'child_selector' => '.rr-model', 'reference' => $reference, 'parent' => $reference, 'prev' => '0', 'label' => $label, 'accept' => array()); if (isset($branch["children"])) { unset($branch["children"]["submenu"]); foreach ($branch["children"] as $type => $model_data) { if (isset($model_data["blank"])) { $container["accept"][$type] = $model_data["blank"]; } else { $container["accept"][$type] = array("label" => "new " . $type); } } } if ($override) { $container = array_merge($container, $override); } $return[] = $container;
public static function form($formname, $runner, $repost_form_after_submit = false) { $repost = $repost_form_after_submit; \Routerunner\Helper::loader($runner, trim($runner->route, '\\') . '.' . $formname . '.input', $output); if (isset($runner->form_override)) { $output = array_merge($output, $runner->form_override); if (isset($runner->form_override['input'])) { $runner->form_context[$formname]['input'] = $runner->form_override['input']; } } $html = ''; if (isset($output['form'], $output['input'])) { $form = new \Routerunner\Form($runner, $formname, $output, $repost_form_after_submit); $html = $form->render($runner); $form_addon = $form->field($form->id_field) . $form->field('_routerunner_form_nonce'); $html = str_replace('</form>', $form_addon . '</form>', $html); if (\runner::stack("form_failed:" . $formname) === true) { $repost = true; \runner::stack("form_failed:" . $formname, false); } if ($repost && $repost_form_after_submit == 'submit') { $repost_form_after_submit = 'get'; $form = new \Routerunner\Form($runner, $formname, $output, $repost_form_after_submit); $html .= $form->render($runner); } } return $html; }