<?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 static function SQL_creator($select, $from, $primary_key, $leftJoin = array(), $where = array(), &$params = array(), $orderBy = false, $groupBy = false, $limit = false, $offset = false)
 {
     $ordering = $orderBy;
     $parents = \runner::stack("parents");
     if (!$parents) {
         $parents = array();
     }
     $prevs = \runner::stack("prevs");
     if (!$prevs) {
         $prevs = array();
     }
     $strict = false;
     $skip_state = false;
     $by_tree = false;
     $by_index = false;
     if ($orderBy === \Routerunner\Routerunner::BY_TREE || $orderBy === \Routerunner\Routerunner::BY_TREE_DESC || $orderBy === \Routerunner\Routerunner::BY_INDEX || $orderBy === \Routerunner\Routerunner::BY_INDEX_DESC || isset($where["direct"]) && $where["direct"] || isset($where["parent"]) && $where["parent"] || isset($where["self"]) && $where["self"] || isset($where["lang"]) && $where["lang"]) {
         $tree = array();
         $params = array();
         if (isset($where["direct"]) && is_numeric($where["direct"])) {
             $SQL = 'SELECT models.reference, NULL AS parent_ref, NULL AS prev, table_from, table_id ' . PHP_EOL;
             $SQL .= 'FROM {PREFIX}models AS models ' . PHP_EOL;
             $SQL .= 'WHERE models.reference = :reference';
             $params = array(":reference" => $where["direct"]);
             $strict = true;
             $skip_state = true;
             $by_tree = true;
         } elseif (isset($where["direct"]) && is_array($where["direct"])) {
             $SQL = 'SELECT models.reference, NULL AS parent_ref, NULL AS prev, table_from, table_id ' . PHP_EOL;
             $SQL .= 'FROM {PREFIX}models AS models ' . PHP_EOL;
             $SQL .= 'WHERE models.model_class = :class AND models.table_id = :id';
             if (is_numeric(current($where["direct"]))) {
                 $params = array(":class" => key($where["direct"]), ":id" => current($where["direct"]));
             } else {
                 $params = array(":class" => current($where["direct"]), ":id" => key($where["direct"]));
             }
             $strict = true;
             $skip_state = true;
             $by_tree = true;
         } else {
             $where_reference = array();
             // get self reference
             if ($self_reference = self::resolve_model_reference('self', $where, true)) {
                 $where_reference['model_traverse.reference IN (' . implode(',', $self_reference) . ')'] = null;
                 $strict = true;
                 $skip_state = true;
                 $by_tree = true;
             }
             // get parent reference
             if ($parent_reference = self::resolve_model_reference('parent', $where, true)) {
                 $where_reference['model_traverse.parent_ref IN (' . implode(',', $parent_reference) . ')'] = null;
                 $strict = true;
                 $skip_state = true;
                 $by_tree = true;
             }
             // get lang condition
             if ($lang = self::resolve_model_reference('lang', $where, true)) {
                 $where_reference['model_traverse.lang IN (' . implode(',', $lang) . ')'] = null;
                 $strict = true;
                 $skip_state = true;
             }
             if (!$where_reference && $where) {
                 $SQL_reference = "SELECT models.reference FROM `" . $from . "` AS model_table " . PHP_EOL . "LEFT JOIN `" . $from . "` ON `" . $from . "`.`" . $primary_key . "` = model_table.`" . $primary_key . "`" . PHP_EOL . "LEFT JOIN `{PREFIX}models` AS models ON models.table_from = '" . $from . "' AND models.table_id = model_table.`" . $primary_key . "`" . PHP_EOL . " WHERE ";
                 $conds_reference = array();
                 $params_reference = array();
                 foreach ($where as $cond_reference => $param_reference) {
                     $conds_reference[] = preg_replace("~(:[a-z0-9\\-_\\.]+)~i", "?", $cond_reference);
                     if (!is_null($param_reference)) {
                         $params_reference[] = $param_reference;
                     }
                 }
                 $SQL_reference .= implode(" AND ", $conds_reference);
                 if ($result_reference = \db::query($SQL_reference, $params_reference)) {
                     $row_reference = array_shift($result_reference);
                     $reference_for_parent = $row_reference["reference"];
                     if (($parent_obj = \Routerunner\Bootstrap::parent($reference_for_parent)) && count($parent_obj)) {
                         $parent_obj = array_pop($parent_obj);
                         $parent_reference = $parent_obj["reference"];
                         $where_reference['model_traverse.parent_ref IN (' . $parent_reference . ')'] = null;
                     }
                     $strict = true;
                     $skip_state = true;
                 }
             }
             if ($orderBy === \Routerunner\Routerunner::BY_TREE || $orderBy === \Routerunner\Routerunner::BY_TREE_DESC) {
                 // get previous sibling
                 $prev_reference = self::resolve_model_reference('prev', $where, true);
                 if ($prev_reference !== false) {
                     $where_reference['model_traverse.prev_ref IN (' . implode(',', $prev_reference) . ')'] = null;
                     $strict = true;
                     $skip_state = true;
                 }
                 // get next sibling
                 // todo: check --- is it ok?
                 $next_reference = self::resolve_model_reference('next', $where, true);
                 if ($next_reference !== false) {
                     $where_reference['model_traverse.prev_ref IN (SELECT reference FROM {PREFIX}model_trees WHERE prev_ref IN (' . implode(',', $next_reference) . '))'] = null;
                     $strict = true;
                     $skip_state = true;
                 }
             }
             if ($orderBy === \Routerunner\Routerunner::BY_INDEX) {
                 // get order_no sibling
                 $order_no_reference = self::resolve_model_reference('order_no', $where, true);
                 if ($order_no_reference !== false) {
                     $where_reference['model_traverse.order_no IN (' . implode(',', $order_no_reference) . ')'] = null;
                     $strict = true;
                     $skip_state = true;
                     $by_index = true;
                 }
             }
             if ($where_reference) {
                 $SQL = 'SELECT models.reference, model_traverse.parent_ref' . PHP_EOL;
                 if ($orderBy === \Routerunner\Routerunner::BY_TREE || $orderBy === \Routerunner\Routerunner::BY_TREE_DESC || $by_tree) {
                     $SQL .= ', prev_ref AS prev' . PHP_EOL;
                 } elseif ($orderBy === \Routerunner\Routerunner::BY_INDEX || $orderBy === \Routerunner\Routerunner::BY_INDEX_DESC || $by_index) {
                     $SQL .= ', order_no AS prev' . PHP_EOL;
                 }
                 $SQL .= 'FROM {PREFIX}models AS models ' . PHP_EOL;
                 if ($orderBy === \Routerunner\Routerunner::BY_TREE || $orderBy === \Routerunner\Routerunner::BY_TREE_DESC || $by_tree) {
                     $SQL .= 'LEFT JOIN {PREFIX}model_trees AS model_traverse ON model_traverse.reference = models.reference ' . PHP_EOL;
                 } elseif ($orderBy === \Routerunner\Routerunner::BY_INDEX || $orderBy === \Routerunner\Routerunner::BY_INDEX_DESC || $by_index) {
                     $SQL .= 'LEFT JOIN {PREFIX}model_orders AS model_traverse ON model_traverse.reference = models.reference ' . PHP_EOL;
                 }
                 $SQL .= 'WHERE ' . implode(' AND ', array_keys($where_reference)) . PHP_EOL;
                 if ($orderBy === \Routerunner\Routerunner::BY_INDEX || $by_index) {
                     $SQL .= 'ORDER BY model_traverse.parent_ref, model_traverse.order_no, models.reference';
                 }
             }
         }
         if ($strict && !empty($SQL) && ($result = \db::query($SQL, $params))) {
             // modify SQL params
             if (!$leftJoin) {
                 $leftJoin = array();
             }
             if (strpos($from, '{PREFIX}models') !== false || $from == 'models') {
                 $from = '`{PREFIX}models` AS models';
                 $model_class = 'models';
                 $primary_key = 'reference';
             } else {
                 array_unshift($leftJoin, '`' . $from . '` ON `' . $from . '`.`' . $primary_key . '` = models.table_id AND models.table_from = \'' . $from . '\'');
                 $model_class = trim($from, '`');
                 $primary_key = trim($primary_key, '`');
                 $from = '{PREFIX}models AS models';
             }
             if ($orderBy === \Routerunner\Routerunner::BY_INDEX || $orderBy === \Routerunner\Routerunner::BY_INDEX_DESC || $by_index) {
                 foreach ($result as $reference_row) {
                     $tree[] = $reference_row['reference'];
                     $parents[$reference_row["reference"]] = $reference_row["parent_ref"];
                     $prevs[$reference_row["reference"]] = $reference_row["prev"];
                 }
                 $orderBy = '`models`.`order_no`';
             } elseif ($orderBy === \Routerunner\Routerunner::BY_TREE || $orderBy === \Routerunner\Routerunner::BY_TREE_DESC || $by_tree) {
                 $orderByTree = $orderBy === \Routerunner\Routerunner::BY_TREE || $orderBy === \Routerunner\Routerunner::BY_TREE_DESC ? true : false;
                 if ($orderByTree) {
                     $orderBy = 'CASE `models`.`reference`';
                 }
                 $reorder_tree = array();
                 foreach ($result as $reference_row) {
                     $reorder_tree[$reference_row['prev']] = $reference_row;
                     $parents[$reference_row["reference"]] = $reference_row["parent_ref"];
                     $prevs[$reference_row["reference"]] = $reference_row["prev"];
                 }
                 if (count($reorder_tree) === 1) {
                     $prev = key($reorder_tree);
                     $index = 0;
                 } else {
                     $prev = 0;
                     $index = 0;
                 }
                 while (isset($reorder_tree[$prev])) {
                     $current = $reorder_tree[$prev]['reference'];
                     $tree[] = $current;
                     $prev = $current;
                     if ($orderByTree) {
                         $orderBy .= ' WHEN ' . $current . ' THEN ' . $index;
                     }
                     $index++;
                 }
                 if ($orderByTree) {
                     $orderBy .= ' END';
                 }
             } elseif (isset($where["direct"])) {
                 foreach ($result as $reference_row) {
                     $tree[] = $reference_row['reference'];
                 }
             }
             if ($ordering === \Routerunner\Routerunner::BY_INDEX_DESC || $ordering === \Routerunner\Routerunner::BY_TREE_DESC) {
                 $orderBy .= ' DESC';
             }
             if (!$where) {
                 $where = array();
             }
             $where['models.reference IN (' . implode(',', $tree) . ')'] = null;
             $where['`' . $model_class . '`.`' . $primary_key . '` IS NOT NULL'] = null;
         } elseif ($strict) {
             $where['1 = 0'] = null;
         }
         if ($config_reference = \runner::config('reference')) {
             $where['models.reference IN (' . $config_reference . ')'] = null;
         }
     } else {
         // join models table and filter to reference
     }
     \runner::stack("parents", $parents);
     \runner::stack("prevs", $prevs);
     $SQL = '';
     unset($where["direct"]);
     $visible_references = array();
     $params = array();
     if (\runner::config("mode") != "backend" && \runner::config("mode") != "sitemap" && !\runner::now("skip_state_check") && !$skip_state) {
         $_from = $from;
         if (strpos($_from, "AS") !== false) {
             $_from = substr($_from, 0, strpos($_from, "AS"));
         }
         $SQL = "SELECT models.reference FROM " . $_from;
         if (strpos($_from, "models") !== false) {
             $SQL .= " AS models";
         }
         $SQL .= PHP_EOL;
         if ($leftJoin) {
             foreach ($leftJoin as $join) {
                 $SQL .= 'LEFT JOIN ' . $join . PHP_EOL;
             }
         }
         if (strpos($_from, "models") === false) {
             $SQL .= "LEFT JOIN {PREFIX}models AS models ON models.table_from = '" . $_from . "' AND models.table_id = " . $_from . "." . $primary_key . PHP_EOL;
         }
         $_where = array();
         if (isset($where) && is_array($where)) {
             $_where = $where;
         }
         $time = time();
         $_where["models.reference NOT IN (SELECT model FROM {PREFIX}model_states AS states WHERE states.active = 0 OR " . $time . " NOT BETWEEN COALESCE(begin, " . $time . ") AND COALESCE(end, " . $time . "))"] = null;
         if (is_array($_where) && count($_where)) {
             $SQL .= 'WHERE ';
             $i = 0;
             foreach ($_where as $filter => $param) {
                 if (!is_numeric($filter)) {
                     $SQL .= $filter;
                 }
                 if (preg_match('/(:[a-z0-9]+)/i', $filter, $match)) {
                     $params[$match[0]] = $param;
                 } elseif (strpos($filter, '?') !== false) {
                     $params[] = $param;
                 }
                 $i++;
                 if (!is_numeric($filter) && $i < count($_where)) {
                     $SQL .= ' AND ';
                 }
                 $SQL .= PHP_EOL;
             }
         } elseif ($_where) {
             $SQL .= 'WHERE ' . $_where . PHP_EOL;
         }
         if ($state_results = \db::query($SQL, $params)) {
             foreach ($state_results as $state_result) {
                 if (!empty($state_result["reference"])) {
                     $visible_references[] = $state_result["reference"];
                 }
             }
         }
         $SQL = '';
         $params = array();
     }
     if ($orderBy !== \Routerunner\Routerunner::BY_INDEX && $orderBy !== \Routerunner\Routerunner::BY_INDEX_DESC && $orderBy !== \Routerunner\Routerunner::BY_TREE && $orderBy !== \Routerunner\Routerunner::BY_TREE_DESC || $where) {
         $SQL = 'SELECT ';
         array_walk($select, function (&$value, $key) {
             if (is_null($value)) {
                 $value = 'NULL AS `' . trim($key, '`') . '`';
             } else {
                 $value = $value . ' AS `' . trim($key, '`') . '`';
             }
         });
         $SQL .= implode(', ', $select);
         $SQL .= PHP_EOL;
         $SQL .= 'FROM ' . $from . PHP_EOL;
         if ($leftJoin) {
             foreach ($leftJoin as $join) {
                 $SQL .= 'LEFT JOIN ' . $join . PHP_EOL;
             }
         }
         if ($visible_references) {
             /*
             $SQL .= "LEFT JOIN {PREFIX}models AS models ON models.table_from = '" . $from .
             	"' AND models.table_id = " . $from . "." . $primary_key . PHP_EOL;
             */
             if (!isset($where) || !is_array($where)) {
                 $where = array();
             }
             $where["`" . $from . "`.`" . $primary_key . "` IN (SELECT models.table_id FROM {PREFIX}models AS models\nWHERE models.reference IN (" . implode(",", $visible_references) . "))"] = null;
         }
         if (is_array($where) && count($where)) {
             $SQL .= 'WHERE ';
             $i = 0;
             foreach ($where as $filter => $param) {
                 if (!is_numeric($filter)) {
                     $SQL .= $filter;
                 }
                 if (preg_match('/(:[a-z0-9]+)/i', $filter, $match)) {
                     $params[$match[0]] = $param;
                 } elseif (strpos($filter, '?') !== false) {
                     $params[] = $param;
                 }
                 $i++;
                 if (!is_numeric($filter) && $i < count($where)) {
                     $SQL .= ' AND ';
                 }
                 $SQL .= PHP_EOL;
             }
         } elseif ($where) {
             $SQL .= 'WHERE ' . $where . PHP_EOL;
         }
         if ($groupBy) {
             $SQL .= 'GROUP BY ' . $groupBy . PHP_EOL;
         }
         if ($orderBy != "BY_TREE" && $orderBy != "BY_TREE_DESC" && $orderBy != "BY_INDEX" && $orderBy != "BY_INDEX_DESC") {
             if ($orderBy) {
                 $SQL .= 'ORDER BY ' . $orderBy . PHP_EOL;
             } elseif ($orderBy !== false) {
                 $SQL .= 'ORDER BY ' . $primary_key . PHP_EOL;
             }
         }
         if ($limit !== false) {
             $SQL .= 'LIMIT ' . $limit . PHP_EOL;
             if ($offset !== false) {
                 $SQL .= 'OFFSET ' . $offset . PHP_EOL;
             }
         } elseif ($limit === false && $offset !== false) {
             $SQL .= 'LIMIT 18446744073709551615' . PHP_EOL;
             $SQL .= 'OFFSET ' . $offset . PHP_EOL;
         }
     }
     return $SQL;
 }
 private static function set($user = null, $logout = false)
 {
     if (is_null($user)) {
         // logout user
         self::$me = false;
         self::$email = null;
         self::$name = null;
         self::$group = null;
         self::$scope = null;
         self::$auth = null;
         self::$custom = array();
         self::$alias = 0;
         self::close_token(self::$token);
         if ($logout) {
             $flash_var = \runner::config('User.UserFlashVar') ? \runner::config('User.UserFlashVar') : 'UserFlashVar';
             if (isset($_SESSION['routerunner-logout-' . $flash_var]) && $_SESSION['routerunner-logout-' . $flash_var] === true) {
                 $cookie = \runner::config('User.TokenCookie') ? \runner::config('User.TokenCookie') : 'TokenCookie';
                 \Routerunner\Routerunner::$slim->setCookie($cookie, null, -1, '/');
                 $flash_var = \runner::config('User.UserFlashVar') ? \runner::config('User.UserFlashVar') : 'UserFlashVar';
                 \runner::now($flash_var, false);
                 \runner::stack($flash_var, false);
                 \runner::flash($flash_var, false);
                 unset($_SESSION['slim.flash'][$flash_var]);
                 setcookie($cookie, null, -1, '/');
                 unset($_COOKIE[$cookie]);
                 unset($_SESSION['routerunner-logout-' . $flash_var]);
             } else {
                 $_SESSION['routerunner-logout-' . $flash_var] = true;
             }
         }
     } elseif (isset($user) && !is_null($user) && is_array($user)) {
         self::set();
         // clear user if exists
         $flash_var = \runner::config('User.UserFlashVar') ? \runner::config('User.UserFlashVar') : 'UserFlashVar';
         if (\runner::now($flash_var)) {
             $flash = \runner::now($flash_var);
         } elseif (\runner::stack($flash_var)) {
             $flash = \runner::stack($flash_var);
         } else {
             $flash = \runner::flash($flash_var);
         }
         $array_to_translate = \runner::config('User.UserArrayToTranslate') ? \runner::config('User.UserArrayToTranslate') : array();
         if ($flash === $user) {
             foreach ($user as $key => $value) {
                 $var = isset($array_to_translate[$key]) ? $array_to_translate[$key] : $key;
                 if ($var === 'email' || $var === 'name' || $var === 'alias') {
                     self::${$var} = $value;
                 } else {
                     self::$custom[$var] = $value;
                 }
             }
             if (self::get_user()) {
                 self::open_token();
                 self::set_session_token();
             }
         }
     }
 }
 public static function prepareLoader($route, $class, $version = false, &$path = false, &$file = false, $scaffolded = false, $created = false, $router = false)
 {
     $route = substr($route, 0, 1) !== DIRECTORY_SEPARATOR ? DIRECTORY_SEPARATOR . $route : $route;
     if ($router && $router->scaffold_root && $router->scaffold_root != \Routerunner\Routerunner::$slim->config('templates.path')) {
         \Routerunner\Routerunner::$slim->config('templates.path', str_replace(\runner::config("SITEROOT"), '', $router->scaffold_root));
     }
     $path = realpath($router->scaffold_root . $route) . DIRECTORY_SEPARATOR;
     $model_class = substr($route, strrpos($route, DIRECTORY_SEPARATOR) + 1);
     if ($file) {
         if (substr($file, 0, strlen($model_class) + 1) != $model_class . ".") {
             $file = $model_class . "." . $file;
         }
     } else {
         if (strpos($class, DIRECTORY_SEPARATOR) !== false) {
             $file = substr($class, strrpos($class, DIRECTORY_SEPARATOR) + 1) . (substr($class, -1) == '.' ? '' : '.') . 'php';
         } elseif (substr($class, 0, strlen($model_class)) === $model_class) {
             $file = $class . (substr($class, -1) == '.' ? '' : '.') . 'php';
         } else {
             $file = $model_class . '.' . $class . (substr($class, -1) == '.' ? '' : '.') . 'php';
         }
     }
     $versionroute = '';
     if ($version) {
         if (!is_array($version)) {
             $version = array($version);
         }
         while (($version_row = array_shift($version)) && !$versionroute) {
             $directory = $path . $version_row;
             if (file_exists($directory)) {
                 $versionroute = $version_row . DIRECTORY_SEPARATOR;
             }
         }
     }
     if (\runner::config("mode") == "backend" && file_exists($path . $versionroute . 'backend' . DIRECTORY_SEPARATOR)) {
         $backendroute = 'backend' . DIRECTORY_SEPARATOR;
         if (!$created && \runner::stack("model_create")) {
             $created = \runner::stack("model_create");
         }
         if ($created && file_exists($path . $versionroute . $backendroute . "create" . DIRECTORY_SEPARATOR . $file)) {
             $versionroute = $versionroute . $backendroute . "create" . DIRECTORY_SEPARATOR;
         } elseif (file_exists($path . $versionroute . $backendroute . $file)) {
             $versionroute = $versionroute . $backendroute;
         }
     }
     $model_root = $router->scaffold_root . DIRECTORY_SEPARATOR . "model" . DIRECTORY_SEPARATOR . $model_class . DIRECTORY_SEPARATOR;
     if (file_exists($path . $versionroute . $file)) {
         if ($scaffolded) {
             return str_replace($router->scaffold_root, '', $path) . $versionroute . $file;
         } else {
             return $path . $versionroute . $file;
         }
     } elseif (file_exists($model_root . $file)) {
         if ($scaffolded) {
             return str_replace($router->scaffold_root, '', $model_root) . $file;
         } else {
             return $model_root . $file;
         }
     } else {
         return false;
     }
 }
<?php

$class = \runner::stack("testimonial_index") === 0 ? " active" : "";
\runner::stack("testimonial_index", \runner::stack("testimonial_index") + 1);
?>
<div class="item testimonial-item<?php 
echo $class;
?>
">
	<p class="citation"><?php 
echo \model::property("brief");
?>
</p>
	<p class="author"><span class="name"><?php 
echo \model::property("label");
?>
</span> / <span class="position"><?php 
echo \model::property("position");
?>
</span> / <span class="company"><?php 
echo \model::property("company");
?>
</span></p>
</div>
<?php

/**
 * Created by PhpStorm.
 * User: csibi
 * Date: 2014.10.23.
 * Time: 16:23
 */
\runner::stack("session_id", false, true);
         $fields = array_merge($fields, $root_router->runner->backend_context["model"]["fields"]);
     }
     foreach ($fields as $field_name => $field_data) {
         if (isset($field_data["crop"])) {
             $crops[$field_name] = $field_data["crop"];
         }
     }
     $field_data = $fields[$field];
 }
 $parents = \Routerunner\Bootstrap::parent($reference);
 if (isset($parents[0]["model_class"]) && $parents[0]["model_class"] == "lang") {
     $lang = array_shift($parents);
 }
 $path_route = '';
 while ($parent = array_shift($parents)) {
     $_model_context = array("direct" => $parent["reference"], "session" => \runner::stack("session_id"));
     $router = false;
     $route = '/model/' . $parent["model_class"];
     \runner::redirect_route($route, \runner::config("scaffold"), true, $_model_context, $router, $parent_model);
     if (is_array($parent_model) && count($parent_model) == 1) {
         $parent_model = array_shift($parent_model);
     }
     if (isset($parent_model) && is_object($parent_model) && get_parent_class($parent_model) == "Routerunner\\BaseModel" && isset($parent_model->label)) {
         $path_route .= \runner::toAscii($parent_model->label) . DIRECTORY_SEPARATOR;
     }
     $debug = 1;
 }
 if (isset($value["src"])) {
     // crop image
     $src = $_SESSION["runner_config"]['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $_SESSION["runner_config"]["SITEROOT"] . $value["src"];
     $filename = substr($value["src"], strrpos($value["src"], DIRECTORY_SEPARATOR) + 1);
 * User: csibi
 * Date: 2014.10.20.
 * Time: 10:33
 */
require '../../../Routerunner/Routerunner.php';
use Routerunner\Routerunner as runner;
$post = array_merge($_GET, $_POST);
new runner(array('mode' => 'backend', 'params' => $post, 'method' => 'post', 'resource' => '/', 'bootstrap' => false), function () use($post) {
    $response = array("success" => false, "apply" => false, "change_id" => false, "error" => array());
    $SQL = "CALL {PREFIX}change_get(:change_id, :session, :draft, :applied)";
    $params = array(":change_id" => is_numeric($post["change_id"]) ? $post["change_id"] : null, ":session" => \runner::stack("session_id") ? \runner::stack("session_id") : null, ":draft" => 1, ":applied" => 0);
    if ($change_get = \db::query($SQL, $params)) {
        foreach ($change_get as $change) {
            $response["change_id"] = $change["change_id"];
            $SQL_apply = "CALL `{PREFIX}change_apply`(:change_id, :session)";
            $params_apply = array(":change_id" => $change["change_id"], ":session" => \runner::stack("session_id") ? \runner::stack("session_id") : 0);
            if ($change["state"] == "routerunner-page-properties" && ($changes = json_decode($change["changes"], true)) && ($resource = json_decode($change["resource"], true))) {
                foreach ($changes as $field => $value) {
                    switch ($field) {
                        case "url":
                        case "urls":
                            $condition = array();
                            $params = array();
                            if (isset($resource["reference"]) && $resource["reference"]) {
                                $condition['reference'] = '`reference` = :reference';
                                $params[":reference"] = $resource["reference"];
                            }
                            if (isset($resource["resource_uri"]) && $resource["resource_uri"]) {
                                $condition['resource_uri'] = '`resource_uri` = :resource_uri';
                                $params[":resource_uri"] = $resource["resource_uri"];
                            }
<?php

\runner::stack("testimonial_index", 0);
?>
<h2 class="section-title" data-animate="fadeInDown">Testimonials</h2>
<div id="carousel-testimonials" class="carousel-testimonials carousel slide" data-ride="carousel">

	<!-- Wrapper for slides -->
	<div class="carousel-inner text-center testimonials">
 }
 \runner::stack("model_create", false);
 $models_created = \runner::stack("models_created");
 if (!$models_created) {
     $models_created = array();
 }
 $parent = array();
 if (isset($post["parent"])) {
     $parents = \Routerunner\Bootstrap::parent($post["parent"]);
     foreach ($parents as $cur_parent) {
         $parent[] = $cur_parent["reference"];
     }
     $parent[] = $post["parent"];
 }
 $models_created[$model->reference] = array("class" => $model->class, "route" => $model->route, "table_from" => $model->table_from, "table_id" => $model->table_id, "backend_ref" => $model->backend_ref, "parent" => $parent, "permission" => $model->permission);
 \runner::stack("models_created", $models_created, true);
 $return['success'] = true;
 if (isset($model->reference)) {
     $return['reference'] = $model->reference;
     $return['model'] = $model;
 } elseif (is_array($model) && count($model) == 1) {
     $return['reference'] = $model[0]->reference;
     $return['model'] = $model[0];
 } elseif (is_array($model) && count($model) > 1) {
     $return['reference'] = array();
     foreach ($model as $row) {
         if (isset($row->reference)) {
             $return['reference'][] = $row->reference;
         }
     }
     $return['model'] = $model;
<?php

/**
 * Created by PhpStorm.
 * User: csibi
 * Date: 2014.10.23.
 * Time: 16:23
 */
$runner->backend_context['parents'] = \Routerunner\Bootstrap::parent($runner->context['reference']);
$current = $runner->context['reference'];
$runner->backend_context['siblings'] = \Routerunner\Bootstrap::siblings($runner->context['reference'], false, $current);
$runner->backend_context['current'] = $runner->backend_context['siblings'][$current];
$parents_ref = array();
foreach ($runner->backend_context['parents'] as $parent) {
    $parents_ref[] = $parent['reference'];
}
$runner->backend_context['parents_ref'] = $parents_ref;
\runner::stack('traverse', $runner->backend_context);
        $model->{$attr} = $value;
    }
    $new_model = true;
}
$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
<?php

/**
 * Created by PhpStorm.
 * User: csibi
 * Date: 2014.10.20.
 * Time: 10:33
 */
header('Content-Type: application/json');
require '../../../Routerunner/Routerunner.php';
use Routerunner\Routerunner as runner;
$post = array_merge($_GET, $_POST);
new runner(array('mode' => 'backend', 'params' => $post, 'method' => 'post', 'resource' => '/', 'bootstrap' => false), function () use($post) {
    $response = array("success" => false, "change_id" => false);
    $SQL = "CALL {PREFIX}change_log(:change_id, :session, :reference, :resource, :changes, :state)";
    $params = array(":change_id" => is_numeric($post["change_id"]) ? $post["change_id"] : 0, ":session" => \runner::stack("session_id"), ":reference" => is_numeric($post["reference"]) ? $post["reference"] : 0, ":resource" => json_encode($post["resource"]), ":changes" => json_encode($post["changes"]), ":state" => $post["state"]);
    if ($result = \db::query($SQL, $params)) {
        $response["success"] = true;
        $response["change_id"] = $result[0]["change_id"];
        $response["date"] = $result[0]["date"];
        $response["state"] = $result[0]["state"];
    }
    echo json_encode($response);
});
	</div>

	<!-- Indicators -->
	<ol class="carousel-indicators">
		<?php 
for ($i = 0; $i < \runner::stack("testimonial_index"); $i++) {
    $class = $i == 0 ? ' class="active"' : '';
    echo '		<li data-target="#carousel-testimonials" data-slide-to="' . $i . '"' . $class . '></li>' . PHP_EOL;
}
?>
	</ol>

	<!-- Controls -->
	<a class="left carousel-control" href="#carousel-testimonials" data-slide="prev">
		<span></span>
	</a>
	<a class="right carousel-control" href="#carousel-testimonials" data-slide="next">
		<span></span>
	</a>

</div> <!-- carousel -->
    }
}
$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 
echo $element . $html;
?>
>
	<?php 
$router = false;
if ($open) {
    $removed = array();
    $children = \Routerunner\Bootstrap::children($runner->context['reference']);
    foreach ($children as $index => $child) {
        $open = in_array($child['reference'], $traverse['parents_ref']) ? true : false;
        if ($models_created) {
    public function plugins($script, $callback = 'false')
    {
        $plugins_loaded = \runner::stack("plugins_loaded");
        if (!is_array($plugins_loaded)) {
            $plugins_loaded = array();
        }
        if (!isset($plugins_loaded[$script])) {
            $plugin_dir = \runner::config("BASE") . \runner::config("ROUTERUNNER_BASE");
            $plugins_loaded[$script] = true;
            \runner::stack("plugins_loaded", $plugins_loaded);
            \runner::stack_js(<<<HTML
if (typeof routerunner_base != "function") {
\tvar script_elem = document.createElement("script");
\tscript_elem.setAttribute("type", "text/javascript");
\tscript_elem.setAttribute("src", "{$plugin_dir}plugins/base.min.js");
\tdocument.getElementsByTagName("head")[0].appendChild(script_elem);
\tscript_elem.addEventListener("load", function() {
\t\trouterunner_base().load_script("{$plugin_dir}plugins/{$script}", {$callback}, true);
\t});
} else {
\trouterunner_base().load_script("{$plugin_dir}plugins/{$script}", {$callback}, true);
}

HTML
);
        }
    }
                break;
            }
        }
    }
    if ($model && is_object($model) && $model->permission && !$model->movable()) {
        $allowed = false;
    } elseif ($model && !is_object($model)) {
        $allowed = false;
    }
}
if ($allowed) {
    $traverse = $runner->backend_context;
    $scaffold = \Routerunner\Helper::$scaffold_root;
    $tree = @(include $scaffold . '/model/tree.php');
    \runner::stack('traverse', $traverse, true);
    \runner::stack('tree', $tree, true);
    ?>
	<form name="routerunner-movement" id="routerunner-movement" class="row" role="form"
		  data-jstreetypes='<?php 
    echo json_encode($jstree_types);
    ?>
'>
		<div id="routerunner-tree" data-traverse='<?php 
    echo json_encode($traverse);
    ?>
' class="col-xs-12">
		</div>
	</form>
<?php 
} else {
    echo '	<h3 class="text-danger">Movement not allowed for this model!</h3>';
<?php

/**
 * Created by PhpStorm.
 * User: csibi
 * Date: 2014.10.23.
 * Time: 17:31
 */
session_start();
require $_SESSION["runner_config"]['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $_SESSION["runner_config"]["SITEROOT"] . $_SESSION["runner_config"]["BACKEND_ROOT"] . 'Routerunner/Routerunner.php';
use Routerunner\Routerunner as runner;
new runner(array('mode' => 'backend', 'bootstrap' => false), function () {
    $debug = 1;
    $response = array('session_id' => false, 'session_open_date' => false);
    if ($session_id = \runner::stack('session_id')) {
        $response['session_id'] = $session_id;
    } else {
        $token = \user::token();
        $SQL = 'CALL `{PREFIX}session_open`(0, :label, :token)';
        if ($session_result = \db::query($SQL, array(':label' => NULL, ':token' => $token))) {
            $response['session_id'] = $session_result[0]['session_opened'];
            $response['session_open_date'] = time();
            \runner::stack("models_created", array(), true);
            \runner::stack('session_id', $response['session_id'], true);
            //\runner::stack('session_id', 1, true);
        }
    }
    echo json_encode($response);
});
            }
            if (($resource = json_decode($change["resource"], true)) && isset($resource["route"])) {
                $model_route = $resource["route"];
            } else {
                $model_class = "get_the_proper_model_class";
                $model_route = "/model";
            }
            if ($model_class && substr($model_route, -1 * (strlen($model_class) + 1)) != '/' . $model_class) {
                $model_route .= '/' . $model_class;
            }
            $context = array("direct" => $change["reference"], "session" => \runner::stack("session_id"), "silent" => true);
            $router = false;
            $model = false;
            \runner::stack("model_create", array("class" => $model_class));
            \runner::redirect_route($model_route, \runner::config("scaffold"), true, $context, $router, $model);
            \runner::stack("model_create", false);
            if ($model && is_array($model)) {
                $model = array_shift($model);
            }
            if (is_object($model) && get_parent_class($model) == "Routerunner\\BaseModel" && ($changes = json_decode($change["changes"], true))) {
                switch ($change["state"]) {
                    case "property":
                        foreach ($changes as $field => $value) {
                            if (property_exists($model, $field) && isset($model->table_from) && isset($model->table_id)) {
                                $model->{$field} = $value;
                                $pk = false;
                                if (isset($router->runner->model_context["primary_key"])) {
                                    $pk = $router->runner->model_context["primary_key"];
                                } else {
                                    $SQL = <<<SQL
SELECT k.column_name
 public static function siblings($reference, $lang = false, &$find = null)
 {
     $SQL = 'CALL `{PREFIX}tree_siblings`(:reference, :lang, NULL, NULL, :session)';
     $session_id = \runner::stack('session_id');
     if (empty($session_id)) {
         $session_id = 0;
     }
     if ($siblings = \Routerunner\Db::query($SQL, array(':reference' => $reference, ':lang' => $lang ? $lang : NULL, ':session' => $session_id))) {
         if (!is_null($find)) {
             $found = null;
             foreach ($siblings as $index => $sibling) {
                 if ($sibling['reference'] == $find) {
                     $found = $index;
                     break;
                 }
             }
             $find = $found;
         }
         return $siblings;
     }
     return array();
 }
        $model_route = "/model/" . $runner->context["model_class"];
        \runner::redirect_route($model_route, \runner::config("scaffold"), true, $context, $router, $model);
        if (is_array($model)) {
            $model = array_shift($model);
        }
        $runner->context["model"] = $model;
    }
} elseif (isset($runner->context["reference"], $runner->context["model_class"])) {
    $router = false;
    $model = false;
    /*
    $context = array(
    	"self" => array("reference" => $runner->context["reference"])
    );
    */
    $context = array("direct" => $runner->context["reference"], "session" => \runner::stack("session_id"), "silent" => true);
    $model_route = "/model/" . $runner->context["model_class"];
    \runner::redirect_route($model_route, \runner::config("scaffold"), true, $context, $router, $model);
    if (is_array($model)) {
        $model = array_shift($model);
    }
    $runner->context["model"] = $model;
    if ($model && $model->permission && !$model->writable()) {
        $allowed = false;
    }
}
?>
<div class="portlet light">
	<div class="portlet-title">
		<div class="caption font-red col-md-6">
			<i class="fa fa-file-text-o font-red"></i>
 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;
 }