Ejemplo n.º 1
0
 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;
 }