/** * Checks whether there are a message set to a given slot * * @param string $slot the slot to check */ static function has($slot) { if (!session_id()) { session_start(); } $app_id = Kennel::getSetting('application', 'id'); if (isset($_SESSION["{$app_id}-flash"][$slot]) && count($_SESSION["{$app_id}-flash"][$slot]) > 0) { return true; } else { return false; } }
function getLang($long_title = false) { if (router::$PREFIX) { $code = router::$PREFIX; } elseif (Kennel::getSetting('i18n', 'detect') && ($browser = self::browser() && preg_match('/' . Kennel::getSetting('i18n', 'list') . '/', self::browser()))) { $code = self::browser(); } else { $code = Kennel::getSetting('i18n', 'default'); } if ($long_title) { return self::$LANGS[$code]; } else { return $code; } }
static function connect($host = null, $user = null, $pass = null, $database = null) { if (self::$CONN && @mysql_ping(self::$CONN)) { return; } self::$host = Kennel::getSetting('database', 'host'); self::$user = Kennel::getSetting('database', 'user'); self::$pass = Kennel::getSetting('database', 'pass'); self::$database = Kennel::getSetting('database', 'database'); self::$CONN = mysql_connect($host ? $host : self::$host, $user ? $user : self::$user, $pass ? $pass : self::$pass); if (function_exists('mysql_set_charset')) { mysql_set_charset('utf-8', self::$CONN); } mysql_select_db($database ? $database : self::$database, self::$CONN); }
function __construct($model_name) { if (!$model_name) { debug::error("Schema::__construct - undefined model name."); } $path = Kennel::cascade($model_name, 'schemas'); if (!$path) { debug::error("Schema::__construct - model schema for \"{$model_name}\" not found."); } $doc = new DOMDocument(); $doc->load(realpath($path)); $root = $doc->getElementsByTagName('model')->item(0); if (Kennel::getSetting('database', 'prefix')) { $this->table = Kennel::getSetting('database', 'prefix') . '_' . $root->getAttribute('table'); } else { $this->table = $root->getAttribute('table'); } $fields = $doc->getElementsByTagName('field'); foreach ($fields as $field) { $this->fields[] = new Field($this->table, $field); } }
function url($action = null, $lang = null) { // If an absolute URL is provided, simply return it if (preg_match('/^https?:\\/\\//', $action)) { return $action; } // Trim slashes $action = trim($action, '/'); // i18n language prefix if (!$lang && Kennel::getSetting('i18n', 'enabled')) { $prefix = '/' . i18n::getLang(); } elseif ($lang) { $prefix = "/{$lang}"; } else { $prefix = ''; } // Action string if ($action) { if (Kennel::getSetting('application', 'use_mod_rewrite')) { $url = Kennel::$ROOT_URL . "{$prefix}/{$action}/"; } else { $url = Kennel::$ROOT_URL . "/index.php/{$prefix}/{$action}/"; } } else { if (Kennel::getSetting('application', 'use_mod_rewrite')) { $url = Kennel::$ROOT_URL . ($prefix ? "{$prefix}/" : '/'); } else { $url = Kennel::$ROOT_URL . ($prefix ? "/index.php/{$prefix}/" : '/'); } } // Trim slash for query or hash strings if (strpos($url, '?') !== false || strpos($url, '#') !== false) { $url = trim($url, '/'); } return $url; }
function getTitle() { if ($this->title && Kennel::getSetting('application', 'title')) { return $this->title . " {$this->titleSeparator} " . Kennel::getSetting('application', 'title'); } elseif (!$this->title && Kennel::getSetting('application', 'title')) { return Kennel::getSetting('application', 'title'); } elseif ($this->title && !Kennel::getSetting('application', 'title')) { return $this->title; } else { return 'Untitled'; } }
/** * @param Model $user * @param string $realm */ static function updateUser($user, $realm = 'admin') { if (!session_id()) { session_start(); } $app_id = Kennel::getSetting('application', 'id'); $_SESSION["{$app_id}-{$realm}"] = $user->toArray(); self::$user[$realm] = $user; }
static function error($errstr, $backtrace_level = 0) { // Skip if settings are not found if (Kennel::getSetting('application', 'debug_mode')) { self::dumpError($errstr, $backtrace_level); } }
function i18n($lang = null) { // If i18n is not enabled, return itself if (!Kennel::getSetting('i18n', 'enabled')) { return $this; } if (!$lang) { $lang = i18n::getLang(); } $primaryKey = $this->schema->getPrimaryKey()->name; $this->_fetchI18n(); foreach ($this->_i18n as $i18n) { if ($i18n->lang == $lang) { return $i18n; } } // If no localized version was found, create one now $primaryKey = $this->schema->getPrimaryKey()->name; $i18n = new Model("{$this->model_name}_i18n"); $i18n->__set("{$this->model_name}_{$primaryKey}", $this->{$primaryKey}); $i18n->lang = $lang; // … and populate it with default values, if any. // Useful as base data for internationalization of existing, populated models foreach ($i18n->_data as $key => $value) { if ($key != 'id' && isset($this->_data[$key])) { $i18n->{$key} = $this->{$key}; } } return $this->_i18n[] = $i18n; }
static function process() { // Set the method self::$METHOD = $_SERVER['REQUEST_METHOD']; // Get the request parts $request_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; if (Kennel::getSetting('application', 'use_mod_rewrite')) { $action_string = substr(trim($request_url, '/'), strlen(Kennel::$ROOT_URL)); } else { $action_string = substr(trim($request_url, '/'), strlen(Kennel::$ROOT_URL . '/index.php')); } $action_string = str_replace(strstr($action_string, '?'), '', $action_string); $action_array = array_filter(explode('/', $action_string)); // Reasign action keys (to avoid empty entries due to double slashes) and convert to lowercase foreach ($action_array as $key => $part) { if ($part) { if (strpos($part, ':') === false) { self::$PARTS[] = input::clean($part); } else { $named_arg = explode(':', $part); self::$NAMED_ARGS[$named_arg[0]] = $named_arg[1]; } } } // Process any hooks if present if (is_array(self::$HOOKS) && count(self::$HOOKS > 0)) { foreach (self::$HOOKS as $hook) { self::$PARTS = call_user_func($hook, self::$PARTS); } } // Make the Resource String available to the API self::$RESOURCE = implode('/', self::$PARTS); // i18n URL redirection if (Kennel::getSetting('i18n', 'enabled') && Kennel::getSetting('i18n', 'redirect') && !router::$PREFIX) { header('location: ' . url(Request::$RESOURCE, i18n::getLang())); } // 0. Render the Home Page if no Request::PARTS are present if (count(self::$PARTS) == 0) { self::$CONTROLLER = 'Main'; self::$ACTION = 'index'; } // 1. First check: method in the main controller if (isset(self::$PARTS[0]) && method_exists('Main_controller', str_replace('-', '_', self::$PARTS[0]))) { self::$CONTROLLER = 'main'; self::$ACTION = str_replace('-', '_', self::$PARTS[0]); self::$ARGS = array_slice(self::$PARTS, 1); } // 2. Second check: user defined controller... if (isset(self::$PARTS[0]) && is_file(Kennel::$ROOT_PATH . '/application/controllers/' . str_replace('-', '_', self::$PARTS[0]) . '.php')) { self::$CONTROLLER = ucfirst(str_replace('-', '_', self::$PARTS[0])); if (isset(self::$PARTS[1]) && method_exists(self::$CONTROLLER . '_controller', str_replace('-', '_', self::$PARTS[1]))) { self::$ACTION = str_replace('-', '_', self::$PARTS[1]); self::$ARGS = array_slice(self::$PARTS, 2); } else { self::$ACTION = 'index'; self::$ARGS = array_slice(self::$PARTS, 1); } } // 3. Third check: module controller if (isset(self::$PARTS[0])) { if (!Kennel::$MODULES) { Kennel::fetchModules(); } foreach (Kennel::$MODULES as $module => $info) { if (is_file(Kennel::$ROOT_PATH . "/modules/{$module}/controllers/" . str_replace('-', '_', self::$PARTS[0]) . '.php')) { self::$CONTROLLER = ucfirst(str_replace('-', '_', self::$PARTS[0])); if (isset(self::$PARTS[1]) && method_exists(self::$CONTROLLER . '_controller', str_replace('-', '_', self::$PARTS[1]))) { self::$ACTION = str_replace('-', '_', self::$PARTS[1]); self::$ARGS = array_slice(self::$PARTS, 2); } else { self::$ACTION = 'index'; self::$ARGS = array_slice(self::$PARTS, 1); } } } } // 4. Forth check: system controller if (isset(self::$PARTS[0]) && is_file(Kennel::$ROOT_PATH . '/system/controllers/' . str_replace('-', '_', self::$PARTS[0]) . '.php')) { self::$CONTROLLER = ucfirst(str_replace('-', '_', self::$PARTS[0])); if (isset(self::$PARTS[1])) { if (method_exists(self::$CONTROLLER . '_controller', str_replace('-', '_', self::$PARTS[1]))) { self::$ACTION = str_replace('-', '_', self::$PARTS[1]); self::$ARGS = array_slice(self::$PARTS, 2); } } else { self::$ACTION = 'index'; self::$ARGS = array_slice(self::$PARTS, 1); } } // 5. Fifth check: nothing found if (!self::$CONTROLLER) { self::$CONTROLLER = 'Main'; } if (!self::$ACTION) { self::$ACTION = 'notfound'; } if (self::$CONTROLLER == 'Main' && self::$ACTION == 'notfound') { self::$ARGS = self::$PARTS; } return Kennel::controllerAction(self::$CONTROLLER, self::$ACTION, self::$ARGS); }