/**
 * Created by PhpStorm.
 * User: csibi
 * Date: 2015.02.18.
 * Time: 14:55
 */
function logincrypt($email, $pwd, &$error = false)
{
    $isOk = false;
    $unique_salt = \runner::config("pwd_salt");
    $unique_logarithm = \runner::config("pwd_logarithm");
    $unique_method = \runner::config("pwd_method");
    $input = $email . ";" . $pwd;
    //var_dump(\Routerunner\Crypt::crypter($input, null, null, 0, $unique_salt, $unique_logarithm, $unique_method));
    $SQL = "SELECT pwd, confirm_date FROM member WHERE email = :email";
    if ($result = \Routerunner\Db::query($SQL, array(":email" => $email))) {
        $result = $result[0];
        if (is_null($result["confirm_date"])) {
            $error = "User has not been confirmed!";
        }
        $isOk = \Routerunner\Crypt::checker($input, $result["pwd"], $unique_salt, $unique_logarithm, $unique_method);
        if (!$isOk) {
            $error = "Incorrect password!";
        }
    } else {
        $error = "User is not exists!";
    }
    return $isOk;
}
 public static function submit($forms, &$errors = array(), &$return_SQL = false, &$return_params = false, &$values = array())
 {
     if (!is_array($forms)) {
         $forms = array($forms);
     }
     foreach ($forms as $frm_name => $form) {
         $flashed = \Routerunner\Routerunner::$slim->flash($form->path . DIRECTORY_SEPARATOR . $form->formname);
         $params = \Routerunner\Bootstrap::$params;
         $halt = false;
         if (isset($flashed, $flashed['fields'])) {
             // check form fields
             $fields = $flashed['fields'];
             $form_fields = array_keys($form->fields);
             if (($_routerunner_form_id_index = array_search($form->id_field, $form_fields)) && ($_routerunner_form_nonce_index = array_search('_routerunner_form_nonce', $form_fields))) {
                 unset($form_fields[$_routerunner_form_id_index], $form_fields[$_routerunner_form_nonce_index]);
             }
             if (\Routerunner\Common::arrDiff($fields, $form_fields)) {
                 // exception
                 $halt = true;
             }
             unset($flashed['fields']);
             // check form params
             /*
             if (\Routerunner\Common::arrDiff($flashed, $form->params)) {
             	// exception
             	$halt = true;
             }
             */
             $form->params = $flashed;
         } else {
             $errors[] = 'Form not exists or the page has been refreshed!';
         }
         $fid = false;
         if (!empty($form->fields[$form->id_field]['value'])) {
             $fid = $form->fields[$form->id_field]['value'];
         }
         if ($fid && !empty($form->fields['_routerunner_form_nonce']['value'])) {
             if (!isset($_SESSION['nonce-' . $fid]) || !\Routerunner\Crypt::checker($form->fields['_routerunner_form_nonce']['value'], $_SESSION['nonce-' . $fid])) {
                 $errors[] = 'Error in form submit or data has been sent already!';
                 $halt = true;
             }
         }
         if (!$halt) {
             unset($form->fields[$form->id_field]);
             unset($form->fields['_routerunner_form_nonce']);
             unset($_SESSION['nonce-' . $fid]);
         }
         $succeed = false;
         if (!$halt) {
             $error_row = isset($form->params['error_format']) ? $form->params['error_format'] : '<p class="err">%s</p>' . PHP_EOL;
             $succeed = true;
             $submit_params = array();
             if (isset($form->unset) && is_array($form->unset)) {
                 foreach ($form->unset as $field) {
                     if (isset($form->fields[$field], $form->fields[$field]["value"])) {
                         $values[$field] = $form->fields[$field]["value"];
                     } elseif (isset($form->fields[$field])) {
                         $values[$field] = $form->fields[$field]["value"];
                     }
                     unset($form->fields[$field]);
                 }
             }
             if (isset($form->set) && is_array($form->set)) {
                 foreach ($form->set as $field => $value) {
                     $values[$field] = $value;
                     $form->fields[$field] = array("field" => $field, "value" => $value);
                 }
             }
             foreach ($form->fields as $field => $field_param) {
                 $field_succeed = true;
                 $values[$field] = null;
                 if (!isset($params[$field]) && isset($field_param['value'])) {
                     $params[$field] = $field_param['value'];
                 }
                 $regexps = isset($field_param['regexp']) ? $field_param['regexp'] : false;
                 if ($regexps && !is_array($regexps)) {
                     $regexps = array($regexps);
                 } elseif (!$regexps) {
                     $regexps = array();
                 }
                 if (!isset($params[$field]) || !$params[$field]) {
                     if (isset($field_param['default_on_fail'], $field_param['default']) && $field_param['default_on_fail']) {
                         $params[$field] = $field_param['default'];
                     } elseif (isset($field_param['errormsg'])) {
                         $errors[$field] = sprintf($error_row, $field_param['errormsg']);
                         if (isset($field_param['mandatory']) && $field_param['mandatory']["value"] === true) {
                             if (isset($field_param['mandatory']['msg']) && !isset($errors[$field])) {
                                 $errors[$field] = sprintf($error_row, $field_param['mandatory']['msg']);
                             }
                             $field_succeed = false;
                             $regexps = array();
                         }
                     } elseif (isset($field_param['mandatory']) && $field_param['mandatory']["value"] === true) {
                         if (isset($field_param['mandatory']['msg']) && !isset($errors[$field])) {
                             $errors[$field] = sprintf($error_row, $field_param['mandatory']['msg']);
                         }
                         $field_succeed = false;
                         $regexps = array();
                     }
                 }
                 foreach ($regexps as $regexp) {
                     $isOk = false;
                     if (is_array($regexp["value"])) {
                         foreach ($regexp["value"] as $regexp_key => $regexp_value) {
                             $pattern = "~" . trim($regexp_value, "/~ ") . "~";
                             if (isset($regexp['options'])) {
                                 $pattern .= is_array($regexp["options"]) && isset($regexp["options"][$regexp_key]) ? $regexp["options"][$regexp_key] : $regexp["options"];
                             }
                             if (preg_match($pattern, $params[$field])) {
                                 $isOk = true;
                             }
                         }
                     } else {
                         $pattern = "~" . trim($regexp["value"], "~/ ") . "~";
                         if (isset($regexp['options'])) {
                             $pattern .= $regexp['options'];
                         }
                         $isOk = preg_match($pattern, $params[$field]);
                     }
                     if (isset($params[$field]) && !$isOk) {
                         if (isset($regexp['msg']) && !isset($errors[$field])) {
                             $errors[$field] = sprintf($error_row, $regexp['msg']);
                         }
                         $field_succeed = false;
                     }
                 }
                 if ($field_succeed) {
                     if (isset($params[$field]) && isset($field_param["field"])) {
                         if (isset($field_param['function']) && function_exists($field_param['function'])) {
                             $fn = $field_param['function'];
                             $submit_params[$field] = $fn($params[$field]);
                         } else {
                             $submit_params[$field] = $params[$field];
                         }
                         $values[$field] = $submit_params[$field];
                     }
                 } else {
                     $succeed = false;
                 }
             }
         }
         if ($succeed) {
             $method = isset($form->params['xmethod']) ? $form->params['xmethod'] : $form->params['method'];
             if (isset($form->params[$method . '_sql'])) {
                 $sql = $form->params[$method . '_sql'];
                 if (preg_match('/\\:[a-z0-9]+/im', $sql)) {
                     // named parameters
                     array_walk($sql_params, function ($value, &$key) {
                         if (substr($key, 0, 1) != ':') {
                             $key = ':' . $key;
                         }
                     });
                 }
             } else {
                 $from = isset($form->params['from']) ? $form->params['from'] : $form->class;
                 $from = \Routerunner\Common::dbField($from);
                 $sql_params = array();
                 if ($method === 'post') {
                     $sql = 'INSERT INTO ' . $from . ' (';
                     $fields = array();
                     foreach ($submit_params as $field => $submit_value) {
                         $field_param = $form->fields[$field];
                         if (isset($params[$field]) && (!isset($field_param['fixed']) || $field_param['fixed'] !== true) && (!isset($field_param['field']) || $field_param['field'] !== false)) {
                             $_field = isset($field_param['field']) ? $field_param['field'] : $field;
                             $fields[] = \Routerunner\Common::dbField($_field);
                             $param_key = \Routerunner\Common::dbField($_field, ':', '', '.', '` .', '.');
                             $sql_params[$param_key] = $submit_value;
                             /*
                             if (isset($submit_params[$field])) {
                             	$sql_params[$param_key] = $submit_params[$field];
                             } else {
                             	$sql_params[$param_key] = $params[$field];
                             }
                             */
                         }
                     }
                     $sql .= implode(', ', $fields) . ') VALUES (' . implode(', ', array_keys($sql_params)) . ')';
                 } elseif ($method == 'put') {
                     $sql = 'UPDATE ' . $from . ' SET ';
                     $fields = array();
                     foreach ($submit_params as $field => $submit_value) {
                         $field_param = $form->fields[$field];
                         if (isset($params[$field]) && (!isset($field_param['fixed']) || $field_param['fixed'] !== true) && (!isset($field_param['field']) || $field_param['field'] !== false)) {
                             $_field = isset($field_param['field']) ? $field_param['field'] : $field;
                             $row = \Routerunner\Common::dbField($_field) . ' = ';
                             $param_key = \Routerunner\Common::dbField($_field, ':', '', '.', '` .', '.');
                             $row .= $param_key;
                             $sql_params[$param_key] = $submit_value;
                             /*
                             if (isset($submit_params[$field])) {
                             	$sql_params[$param_key] = $submit_params[$field];
                             } else {
                             	$sql_params[$param_key] = $params[$field];
                             }
                             */
                             $fields[] = $row;
                         }
                     }
                     $sql .= implode(', ', $fields) . ' WHERE ';
                     if (isset($form->params['condition'])) {
                         $conditions = $form->params['condition'];
                         while ($condition = array_shift($conditions)) {
                             if (!is_array($condition)) {
                                 $condition = array($condition);
                             }
                             $add_condition = true;
                             if (isset($condition[1]) && is_array($condition[1])) {
                                 foreach ($condition[1] as $condition_field => $condition_value) {
                                     if (isset($form->fields[$condition_value]['value'])) {
                                         $sql_params[$condition_field] = $form->fields[$condition_value]['value'];
                                     } else {
                                         $add_condition = false;
                                     }
                                 }
                             } elseif (isset($condition[1])) {
                                 $sql_params[] = $condition[1];
                             } else {
                                 $add_condition = false;
                             }
                             if ($add_condition) {
                                 $sql .= $condition[0];
                                 if (count($conditions) && isset($condition[2])) {
                                     $sql .= ' ' . $condition[2] . ' ';
                                 }
                             }
                         }
                     } else {
                         // exception
                     }
                 } elseif ($method == 'delete') {
                     $sql = 'DELETE FROM ' . $from . ' WHERE ';
                     if (isset($form->params['condition'])) {
                         $conditions = $form->params['condition'];
                         while ($condition = array_shift($conditions)) {
                             if (!is_array($condition)) {
                                 $condition = array($condition);
                             }
                             $add_condition = true;
                             if (isset($condition[1]) && is_array($condition[1])) {
                                 foreach ($condition[1] as $condition_field => $condition_value) {
                                     if (isset($form->fields[$condition_value]['value'])) {
                                         $sql_params[$condition_field] = $form->fields[$condition_value]['value'];
                                     } else {
                                         $add_condition = false;
                                     }
                                 }
                             } elseif (isset($condition[1])) {
                                 $sql_params[] = $condition[1];
                             } else {
                                 $add_condition = false;
                             }
                             if ($add_condition) {
                                 $sql .= $condition[0];
                                 if (count($conditions) && isset($condition[2])) {
                                     $sql .= ' ' . $condition[2] . ' ';
                                 }
                             }
                         }
                     } elseif (isset($submit_params) && $submit_params) {
                         $fields = array();
                         foreach ($submit_params as $field => $submit_value) {
                             $field_param = $form->fields[$field];
                             if (isset($params[$field]) && (!isset($field_param['fixed']) || $field_param['fixed'] !== true) && (!isset($field_param['field']) || $field_param['field'] !== false)) {
                                 $_field = isset($field_param['field']) ? $field_param['field'] : $field;
                                 $row = \Routerunner\Common::dbField($_field) . ' = ';
                                 $param_key = \Routerunner\Common::dbField($_field, ':', '', '.', '` .', '.');
                                 $row .= $param_key;
                                 $sql_params[$param_key] = $submit_value;
                                 /*
                                 if (isset($submit_params[$field])) {
                                 	$sql_params[$param_key] = $submit_params[$field];
                                 } else {
                                 	$sql_params[$param_key] = $params[$field];
                                 }
                                 */
                                 $fields[] = $row;
                             }
                         }
                         $sql .= implode(' AND ', $fields);
                     } else {
                         // exception
                     }
                 }
             }
             if ($return_SQL || $return_params) {
                 $return_SQL = $sql;
                 $return_params = $sql_params;
             } else {
                 \Routerunner\Db::begin_transaction();
                 if ($method === 'post') {
                     $succeed = \Routerunner\Db::insert($sql, $sql_params);
                 } else {
                     \Routerunner\Db::query($sql, $sql_params);
                 }
                 \Routerunner\Db::commit();
             }
         }
     }
     return $succeed;
 }
<?php

/**
 * Created by PhpStorm.
 * User: csibi
 * Date: 2015.02.18.
 * Time: 14:55
 */
$post = $_POST;
$msg = "";
$SQL = "SELECT id, email, confirm_date, licence FROM member WHERE email = :email";
if ($result = \Routerunner\Db::query($SQL, array(":email" => $post["email"]))) {
    $user = $result[0];
    if (is_null($user["confirm_date"])) {
        $msg = "User has not been confirmed!";
    }
    if (!$msg) {
        // confirm generálás
        $secret = uniqid(md5(uniqid('', true)));
        $confirm = 'forgotten/' . implode('/', $user) . '/' . $secret;
        $expire = time() + 2 * 24 * 60 * 60;
        $confirm_hash = \Routerunner\Crypt::crypter($confirm, $expire, $user['id'], 0, $secret);
        $path = runner::config("BASE") . 'admin/forgotten/?' . $user['id'] . '/' . $secret . '/' . $confirm_hash;
        $user["confirm_code"] = $path;
        if ($result = \mail::mailer("/mail/forgotten", $user, null)) {
            $debug = 1;
        } else {
            $msg = "E-mail cannot be sent!";
        }
    }
} else {
 public static function load($context, $model, &$pager = array())
 {
     $from = isset($context["from"]) ? $context["from"] : $model->class;
     $select = array();
     $predefined = array('route', 'class', 'reference', 'table_from', 'table_id', 'permission', 'permissions', 'rewrite', 'url', 'override', 'states', 'owner', 'group', 'other', 'parent', 'prev');
     foreach (array_keys(get_object_vars($model)) as $var) {
         if (!in_array($var, $predefined)) {
             $select[$var] = '`' . $var . '`';
         }
     }
     if (isset($context["select"]) && is_array($context["select"])) {
         foreach ($context["select"] as $var => $field) {
             if (isset($select[$var])) {
                 $select[$var] = $field;
             }
         }
     }
     $leftJoin = isset($context["leftJoin"]) ? $context["leftJoin"] : false;
     $where = isset($context["where"]) ? $context["where"] : false;
     $session = false;
     $change_id = false;
     if (isset($where["session"])) {
         $session = $where["session"];
         unset($where["session"]);
     }
     if (isset($where["change_id"])) {
         $change_id = $where["change_id"];
         unset($where["change_id"]);
     }
     if (isset($where["silent"])) {
         unset($where["silent"]);
     }
     $orderBy = isset($context["orderBy"]) ? $context["orderBy"] : current($select);
     $groupBy = isset($context["groupBy"]) ? $context["groupBy"] : false;
     $limit = isset($context["limit"]) ? $context["limit"] : false;
     $offset = isset($context["offset"]) ? $context["offset"] : false;
     $random = isset($context["random"]) ? $context["random"] : false;
     $pk = isset($context["primary_key"]) ? $context["primary_key"] : false;
     $params = array();
     if (\runner::stack("model_create") && isset($model->route, \runner::stack("model_create")["route"]) && $model->route == \runner::stack("model_create")["route"]) {
         $load = array();
     } else {
         if (isset($where['sections'])) {
             unset($where['sections']);
         }
         if (isset($context["SQL"], $context["SQLhash"]) && \Routerunner\Crypt::checker($context["SQL"], $context["SQLhash"], "SQLchecked")) {
             $SQL = $context["SQL"];
             $params = $where;
         } else {
             $SQL = self::SQL_creator($select, $from, $pk, $leftJoin, $where, $params, $orderBy, $groupBy, $limit, $offset);
         }
         if (\runner::now("debug::model->load") === true) {
             \runner::now("debug::model->load", false);
             echo "debug::model->load" . PHP_EOL . $SQL . PHP_EOL . print_r($params, true);
         }
         $load = \Routerunner\Db::query($SQL, $params);
     }
     if ((!is_array($load) || !count($load)) && (isset($context['blank']) && $context['blank'] === true)) {
         foreach ($select as $field => &$value) {
             $value = '';
         }
         $load = array($select);
     }
     if (isset($model->override) && is_array($model->override) && count($model->override)) {
         if ($load && isset($load[0])) {
             $load[0] = array_merge($load[0], $model->override);
         } elseif ($load) {
             $load = array_merge($load, $model->override);
         } else {
             $load = array($model->override);
         }
     }
     if (is_array($load) && count($load) > 0) {
         $models = self::set_models($load, $model, $pk, $from, $random, $session);
         $model = $models;
         if (isset($context["force_list"]) && $context["force_list"] === true && !is_array($model)) {
             $model = array($model);
         } elseif (isset($context["force_view"]) && $context["force_view"] === true && is_array($model)) {
             $model = array_shift($model);
         }
         if (isset($context['pager']) && is_array($context['pager'])) {
             foreach ($context['pager'] as $pager_section => $pager_params) {
                 if (is_array($pager_params)) {
                     $pager_SQL_params = array();
                     //$pager_params['select'] = (isset($pager_params['select'])) ? $pager_params['select'] : array('c' => 'COUNT(*)');
                     $pager_params['primary_key'] = isset($pager_params['primary_key']) ? $pager_params['primary_key'] : $pk;
                     $pager_params['select'] = isset($pager_params['select']) ? $pager_params['select'] : array($pager_params['primary_key'] => 'id');
                     $pager_params['from'] = isset($pager_params['from']) ? $pager_params['from'] : $from;
                     $pager_params['leftJoin'] = isset($pager_params['leftJoin']) ? $pager_params['leftJoin'] : $leftJoin;
                     $pager_params['where'] = isset($pager_params['where']) ? $pager_params['where'] : $where;
                     $pager_params['orderBy'] = isset($pager_params['orderBy']) ? $pager_params['orderBy'] : $orderBy;
                     $pager_params['groupBy'] = isset($pager_params['groupBy']) ? $pager_params['groupBy'] : $groupBy;
                     $pager_params['limit'] = isset($pager_params['limit']) ? $pager_params['limit'] : false;
                     $pager_params['offset'] = isset($pager_params['offset']) ? $pager_params['offset'] : $offset;
                     $pager_SQL = self::SQL_creator($pager_params['select'], $pager_params['from'], $pager_params['primary_key'], $pager_params['leftJoin'], $pager_params['where'], $pager_SQL_params, $pager_params['orderBy'], $pager_params['groupBy'], $pager_params['limit'], $pager_params['offset']);
                     if ($result = \Routerunner\Db::query($pager_SQL, $pager_SQL_params)) {
                         $pager[$pager_section] = count($result);
                     } else {
                         $pager[$pager_section] = 0;
                     }
                 } else {
                     $pager[$pager_section] = $pager_params;
                 }
             }
         }
         if (\runner::now("debug::model->return") === true) {
             \runner::now("debug::model->return", false);
             var_dump("debug::model->return", $model);
         }
         return $model;
     } elseif (\runner::config('mode') == 'backend' && ($model_create = \runner::stack("model_create")) && $model && isset($model_create["class"]) && substr(get_class($model), strrpos(get_class($model), "\\") + 1) == $model_create["class"]) {
         $return = true;
         if (is_array($model_create)) {
             $created_model = $model;
             if (is_array($model)) {
                 $created_model = $model[0];
             }
             foreach ($model_create as $var_name => $var_value) {
                 if (!isset($created_model->{$var_name}) || $created_model->{$var_name} != $var_value) {
                     $return = false;
                 }
             }
         }
         if (!$return) {
             $model = null;
         }
         return $model;
     } else {
         if (\runner::now("debug::model->return") === true) {
             \runner::now("debug::model->return", false);
             var_dump("debug::model->return", null);
         }
         return null;
     }
 }
<?php

/**
 * Created by PhpStorm.
 * User: csibi
 * Date: 2015.02.18.
 * Time: 14:55
 */
$post = $_POST;
$msg = "";
if (!logincrypt($post["email"], $post["password"], $msg)) {
    echo '<div class="alert alert-danger">' . $msg . '</div>';
} else {
    echo '<div class="alert alert-success">Logged in successfully!</div>';
    $SQL = "SELECT id, email, last_login, last_ip, licence FROM member WHERE email = :email";
    if ($result = \Routerunner\Db::query($SQL, array(":email" => $post["email"]))) {
        $user = $result[0];
        if (isset($post["rememberme"]) && $post["rememberme"]) {
            $user["rememberme"] = true;
        }
        \runner::flash('member', $user);
        $SQL = "UPDATE member SET last_login = :last_login, last_ip = :last_ip WHERE email = :email";
        $params = array(":last_login" => time(), ":last_ip" => $_SERVER["REMOTE_ADDR"], ":email" => $post["email"]);
        \Routerunner\Db::query($SQL, $params);
        \runner::redirect($_SERVER["HTTP_REFERER"]);
    }
}
 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();
 }
 public static function escape($str)
 {
     return \Routerunner\Db::escape($str);
 }
<?php

/**
 * Created by PhpStorm.
 * User: csibi
 * Date: 2014.10.23.
 * Time: 16:23
 */
if (\bootstrap::get("url") == "forgotten") {
    $isOk = false;
    $bootstrap = \bootstrap::get();
    if (isset($bootstrap->params) && is_array($bootstrap->params) && count($bootstrap->params) === 1) {
        $params = explode("/", array_shift(array_keys($bootstrap->params)));
        $SQL = "SELECT id, email, confirm_date, licence FROM member WHERE id = :id";
        if ($result = \Routerunner\Db::query($SQL, array(":id" => $params[0]))) {
            $user = $result[0];
            $secret = $params[1];
            $hash = $params[2];
            $SQL_Crypt = 'SELECT hash FROM {PREFIX}crypt WHERE secret = :secret AND keep > UNIX_TIMESTAMP()';
            $params_Crypt = array(':secret' => $hash);
            if ($result_Crypt = \db::query($SQL_Crypt, $params_Crypt)) {
                $crypt_hash = $result_Crypt[0]['hash'];
                $confirm = 'forgotten/' . implode('/', $user) . '/' . $secret;
                if (\Routerunner\Crypt::checker($confirm, $crypt_hash, $secret)) {
                    //\Routerunner\Crypt::delete_crypt($crypt_hash, $confirm);
                    $alphabet = "abcdefghijklmnpqrstuwxyzABCDEFGHIJKLMNPQRSTUWXYZ123456789";
                    $pwd = "";
                    for ($i = 0; $i < 8; $i++) {
                        $n = rand(0, strlen($alphabet) - 1);
                        $pwd .= substr($alphabet, $n, 1);
                    }
 /**
  * Constructor
  * @param  array $arguments Associative array of application settings
  */
 public function __construct($arguments = null, $function = null)
 {
     if (ini_get('xdebug.max_nesting_level')) {
         ini_set('xdebug.max_nesting_level', 200);
     }
     if (!isset($_SESSION["runner"]) && is_array($arguments)) {
         Routerunner::setRunnerParams($arguments);
     }
     if (!self::$loaded) {
         require 'BaseClasses' . DIRECTORY_SEPARATOR . 'BaseRunner.php';
         require 'BaseClasses' . DIRECTORY_SEPARATOR . 'BaseModel.php';
         require 'BaseClasses' . DIRECTORY_SEPARATOR . 'BaseBootstrap.php';
         require 'Tunnel.php';
         require 'Slim' . DIRECTORY_SEPARATOR . 'Slim.php';
         require 'Slim' . DIRECTORY_SEPARATOR . 'RunnerSlim.php';
         \Slim\RunnerSlim::registerAutoloader();
         require 'SlimView.php';
         require_once 'phpquery' . DIRECTORY_SEPARATOR . 'phpQuery.php';
     }
     self::$loaded = true;
     if (isset($arguments) && is_array($arguments)) {
         $this->container['settings'] = array_merge(static::getDefaultSettings(), $arguments);
     } else {
         $this->container['settings'] = static::getDefaultSettings();
     }
     if (isset($_SESSION["routerunner-config"])) {
         $this->container['settings'] = array_merge($_SESSION["routerunner-config"], $this->container['settings']);
     }
     if (isset($this->settings['DOCUMENT_ROOT'])) {
         $site_root = $this->settings['DOCUMENT_ROOT'];
         if (substr($site_root, -1) !== DIRECTORY_SEPARATOR) {
             $site_root .= DIRECTORY_SEPARATOR;
         }
     } else {
         $site_root = rtrim(isset($_SERVER["DOCUMENT_ROOT"]) ? $_SERVER["DOCUMENT_ROOT"] : $this->settings['DOCUMENT_ROOT'], '/\\') . DIRECTORY_SEPARATOR . $this->settings['SITEROOT'];
         if (substr($site_root, -1) !== DIRECTORY_SEPARATOR) {
             $site_root .= DIRECTORY_SEPARATOR;
         }
     }
     $this->container['settings']['SITEROOT'] = $site_root;
     if (!function_exists("backend_mode")) {
         require $site_root . 'runner-config.php';
     }
     Routerunner::$static = $this;
     \Routerunner\Db::initialize($this->settings);
     new \Routerunner\Helper($this);
     \Routerunner\Routerunner::$slim = new \Slim\RunnerSlim(array('view' => new \Routerunner\CustomView(), 'templates.path' => \Routerunner\Helper::$scaffold_class));
     \Routerunner\Routerunner::$slim->notFound(function () {
         return false;
     });
     $method = "get";
     $resource = "/";
     if (!isset($arguments["bootstrap"]) || $arguments["bootstrap"] !== false) {
         \Routerunner\Bootstrap::initialize($this->settings, false);
         $method = \Routerunner\Bootstrap::getMethod();
         $resource = \Routerunner\Bootstrap::getResource();
     }
     if (isset($arguments["method"])) {
         $method = $arguments["method"];
     }
     if (isset($arguments["resource"])) {
         $resource = $arguments["resource"];
     }
     if ($method == "head") {
         $method = "get";
     }
     $routerunner_object = $this;
     \Routerunner\Config::custom_config($this->container['settings']);
     \runner::config("notFound", false);
     if (\Routerunner\Bootstrap::$component) {
         return false;
         exit;
     }
     if (isset($arguments) && isset($function) && !is_string($function) && is_callable($function) && \Routerunner\Routerunner::$slim->now('redirect_url')) {
         $arguments["skip_redirect"] = true;
         $arguments["skip_route"] = true;
         \Routerunner\Routerunner::$slim->{$method}($resource, function () use($routerunner_object, $arguments) {
             $this->middleware($routerunner_object, $arguments);
         }, $function, function () {
             if (\Routerunner\Routerunner::$slim->now('redirect_url')) {
                 \Routerunner\Routerunner::$slim->redirect(\Routerunner\Routerunner::$slim->now('redirect_url'));
             }
         });
         \Routerunner\Routerunner::$slim->run();
     } elseif (isset($arguments) && isset($function) && !is_string($function) && is_callable($function)) {
         $arguments["skip_redirect"] = true;
         $arguments["skip_route"] = true;
         \Routerunner\Routerunner::$slim->{$method}($resource, function () use($routerunner_object, $arguments) {
             $this->middleware($routerunner_object, $arguments);
         }, $function);
         \Routerunner\Routerunner::$slim->notFound(function () use($routerunner_object, $arguments) {
             \runner::config("notFound", true);
             $this->middleware($routerunner_object, $arguments);
         });
         \Routerunner\Routerunner::$slim->run();
     } elseif (isset($arguments) && is_array($arguments) && isset($arguments['root'])) {
         \Routerunner\Routerunner::$slim->{$method}($resource, function () use($routerunner_object, $arguments) {
             $this->middleware($routerunner_object, $arguments);
         });
         \Routerunner\Routerunner::$slim->notFound(function () use($routerunner_object, $arguments) {
             \runner::config("notFound", true);
             $this->middleware($routerunner_object, $arguments);
         });
         \Routerunner\Routerunner::$slim->run();
     } elseif (!is_string($arguments) && is_callable($arguments)) {
         $function = $arguments;
         $arguments = array("skip_redirect" => true, "skip_route" => true);
         \Routerunner\Routerunner::$slim->{$method}($resource, function () use($routerunner_object, $arguments) {
             $this->middleware($routerunner_object, $arguments);
         }, $function, function () {
             if (\Routerunner\Routerunner::$slim->now('redirect_url')) {
                 $this->redirect(\Routerunner\Routerunner::$slim->now('redirect_url'));
             }
         });
         \Routerunner\Routerunner::$slim->notFound(function () use($routerunner_object, $arguments) {
             \runner::config("notFound", true);
             $this->middleware($routerunner_object, $arguments);
         });
         \Routerunner\Routerunner::$slim->run();
     } else {
         $arguments = array("skip_redirect" => true, "skip_route" => true);
         \Routerunner\Routerunner::$slim->{$method}($resource, function () use($routerunner_object, $arguments) {
             $this->middleware($routerunner_object, $arguments);
         });
         \Routerunner\Routerunner::$slim->notFound(function () use($routerunner_object, $arguments) {
             \runner::config("notFound", true);
             $this->middleware($routerunner_object, $arguments);
         });
     }
 }