public static function loader(\Routerunner\BaseRunner $runner, $class, &$output = array()) { $route = $runner->path . $runner->route; $version = $runner->version; $class = trim($class, '. \\/'); $model_created = false; if ($runner->model && is_object($runner->model) && (isset($runner->model->created) && $runner->model->created) || isset($runner->override["create"]) && $runner->override["create"] < 0) { $model_created = true; } $p = false; $f = false; $path = self::prepareLoader($route, $class, $version, $p, $f, false, $model_created, $runner->router); if (file_exists($path)) { //require $path; $vars_before = get_defined_vars(); $sections = explode('.', $class); \Routerunner\Routerunner::$context = $route; //todo: check for redeclared classes & skip errors? if (strpos($path, '.backend.') === false && strpos($path, '.model.') !== false && strpos($path, '.model.params.') === false || strpos($path, '.runner.') !== false || strpos($path, '.function.') !== false) { $returned = (include_once $path); } elseif (strpos($path, '.return.') !== false) { ob_start(); if ($returned = @(include $path)) { $returned = ob_get_contents(); } else { $returned = false; } ob_end_clean(); } else { $returned = @(include $path); if (!$returned) { $returned = true; } } if ($returned) { $output = array_diff_key(get_defined_vars(), $vars_before); unset($output['vars_before'], $output['returned']); if (!isset($output) || !is_array($output)) { $output = array(); } if (strpos($class, "external") !== false && (count($output) == 1 && isset($output["sections"]))) { $output["debug"] = true; } foreach ($output as $key => $val) { if (strpos($class, ".backend") === false && !is_string($val) && is_callable($val)) { $runner->functions[$key] = $val; } elseif (strpos($class, "i18n") !== false && $key == "i18n") { $runner->i18n = $val; $addon_path = \runner::config("SITEROOT") . \runner::config("scaffold") . DIRECTORY_SEPARATOR . 'i18n' . $runner->route . DIRECTORY_SEPARATOR . $f; if (file_exists($addon_path)) { if (($i18n_addon = @(include $addon_path)) && is_array($i18n_addon)) { if (!is_array($runner->i18n)) { $runner->i18n = array(); } $runner->i18n = array_merge($runner->i18n, $i18n_addon); } } } elseif (strpos($class, ".script") !== false) { $runner->script = $returned; } elseif (strpos($class, ".external") !== false) { if (!isset($runner->external)) { $runner->external = array("models" => $returned, "params" => array()); } $runner->external["params"][$key] = $val; } elseif (strpos($class, ".backend") !== false && \runner::config('mode') == "backend" && isset($sections[2])) { $key = $sections[2]; if (is_callable($returned)) { $runner->backend_context[$key] = $returned; } elseif (is_array($returned)) { $runner->backend_context[$key] = $returned; if (isset($runner->backend_context["global"])) { $runner->backend_context[$key] = array_merge($runner->backend_context["global"], $runner->backend_context[$key]); } } else { $runner->backend_context[$key] = array(); } } elseif (substr($class, -13) == ".model.params") { $runner->model_context[$key] = $val; } elseif (substr($class, -20) == ".model.params.extend") { $runner->model_context[$key] = $val; } elseif (substr($class, -6) == ".input") { $runner->form_context[$sections[1]][$key] = $val; } elseif (substr($class, -10) == ".construct") { $flash_var = $route . DIRECTORY_SEPARATOR . 'construct' . DIRECTORY_SEPARATOR . $key; \Routerunner\Routerunner::$slim->flashNow($flash_var, $val); } elseif (substr($class, -9) == ".destruct") { $flash_var = $route . DIRECTORY_SEPARATOR . 'destruct' . DIRECTORY_SEPARATOR . $key; \Routerunner\Routerunner::$slim->flashNow($flash_var, $val); } elseif (is_scalar($val) || is_array($val)) { $runner->context[$key] = $val; } elseif (is_resource($val)) { $runner->resources[$key] = $val; } } unset($runner->context["sections"]); if (substr($class, -6) == ".model" && strpos($class, ".backend") === false) { $pager = array(); $override = isset($runner->override) ? $runner->override : array(); $namespace = trim(str_replace(DIRECTORY_SEPARATOR, '\\', $runner->path), '\\'); $model_class = isset($runner->model_context["model"]) ? $runner->model_context["model"] : trim($runner->route, ' ' . DIRECTORY_SEPARATOR); $table_from = isset($runner->model_context["from"]) ? $runner->model_context["from"] : $model_class; $table_id = isset($runner->override["id"]) ? $runner->override["id"] : null; $blankStdModel = false; $path = false; $file = false; if ($blank_path = self::prepareLoader('/model' . DIRECTORY_SEPARATOR . $model_class, $model_class . '.model', $version, $path, $file, false, false, $runner->router)) { $returned = (include_once $blank_path); $blank_ns = 'model\\' . $model_class; $blankStdModel = new $blank_ns($route, array(), $table_from, $table_id, $override, $runner->model_context); //$blankStdModel = new $blank_ns(); } if (class_exists($namespace . '\\' . $model_class)) { $namespace_class = $namespace . '\\' . $model_class; $stdModel = new $namespace_class($route, array(), $table_from, $table_id, $override, $runner->model_context); if ($blankStdModel) { $stdModel->set($blankStdModel); } if (isset($runner->external) && $runner->external) { $runner->model = $namespace_class::set_models($runner->external["models"], $stdModel, isset($runner->external["params"]["pkid"]) ? $runner->external["params"]["pkid"] : "id", isset($runner->external["params"]["from"]) ? $runner->external["params"]["from"] : false, isset($runner->external["params"]["random"]) ? $runner->external["params"]["random"] : false, isset($runner->external["params"]["session"]) ? $runner->external["params"]["session"] : false); } else { $runner->model = $namespace_class::load($runner->model_context, $stdModel, $pager); } if (isset($pager)) { $runner->pager = $pager; } } elseif (class_exists('model\\' . $model_class)) { $namespace_class = 'model\\' . $model_class; $stdModel = new $namespace_class($route, array(), $table_from, $table_id, $override, $runner->model_context); if ($blankStdModel) { $stdModel->set($blankStdModel); } if (isset($runner->external) && $runner->external) { $runner->model = $namespace_class::set_models($runner->external["models"], $stdModel, isset($runner->external["params"]["pkid"]) ? $runner->external["params"]["pkid"] : "id", isset($runner->external["params"]["from"]) ? $runner->external["params"]["from"] : false, isset($runner->external["params"]["random"]) ? $runner->external["params"]["random"] : false, isset($runner->external["params"]["session"]) ? $runner->external["params"]["session"] : false); } else { $runner->model = $namespace_class::load($runner->model_context, $stdModel, $pager); } if (isset($pager)) { $runner->pager = $pager; } } elseif (class_exists($model_class)) { $stdModel = new $model_class($route, array(), $table_from, $table_id, $override, $runner->model_context); //$stdModel = new $model_class(); if (isset($runner->external) && $runner->external) { $runner->model = $model_class::set_models($runner->external["models"], $stdModel, isset($runner->external["params"]["pkid"]) ? $runner->external["params"]["pkid"] : "id", isset($runner->external["params"]["from"]) ? $runner->external["params"]["from"] : false, isset($runner->external["params"]["random"]) ? $runner->external["params"]["random"] : false, isset($runner->external["params"]["session"]) ? $runner->external["params"]["session"] : false); } else { $runner->model = $model_class::load($runner->model_context, $stdModel, $pager); } if (isset($pager)) { $runner->pager = $pager; } } } } return $returned; } elseif ($version) { $p = false; $f = false; $path = self::prepareLoader($route, $class, false, $p, $f, false, false, $runner->router); if (!isset($output) || !is_array($output)) { $output = array(); } if (file_exists($path)) { require $path; return true; } } if (!isset($output) || !is_array($output)) { $output = array(); } return false; }
/** * 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); }); } }