<?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;
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;
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; }
} $tree = \runner::stack('tree'); $route = false; if ($branch = \Routerunner\Helper::tree_route($tree, $context['route'])) { if (isset($branch['children']['#' . $context['reference']])) { $route = '#' . $context['reference']; } elseif (isset($branch['children'][$context['model_class'] . '/' . $context['table_id']])) { $route = $context['model_class'] . '/' . $context['table_id']; } elseif (isset($branch['children'][$context['model_class']])) { $route = $context['model_class']; } } $traverse = \runner::stack('traverse'); if ($route) { $context['route'][] = $route; if ($node = \Routerunner\Helper::tree_route($tree, $context['route'])) { $parsed = \Routerunner\Helper::parse_array($node, $model, array("children")); $jstree = array('type' => $context['model_class']); if ($new_model) { $jstree['icon'] = 'fa fa-folder icon-state-warning'; } elseif (isset($parsed['icon'])) { $jstree['icon'] = $parsed['icon']; } if (isset($traverse['current']['reference']) && $traverse['current']['reference'] == $context['reference']) { $jstree['selected'] = true; } $classes = array(); // todo: or children in memory if ($children = \Routerunner\Bootstrap::children($context['reference'])) { $classes[] = $context["open"] ? 'jstree-open' : 'jstree-closed'; }