public static function isLoggedIn() { session_start(); if (isset($_SESSION['isLoggedIn'])) { Days_Log::add("Logged in"); return true; } else { Days_Log::add("Not logged in"); return false; } }
public static function save() { if (!empty(self::$_errors)) { // prepare data $sErrorFile = str_replace(':', '.', $_SERVER['HTTP_HOST']); $sLogDir = Days_Engine::appPath() . 'system/log/'; // get current application error levels $level = Days_Config::load()->get('log/level'); // save log if (Days_Config::load()->get('engine/debug', false)) { $messages = self::getMessages($level); if (count($messages) == 0) { return; } switch (strtolower(Days_Config::load()->get('log/type', 'file'))) { // save to SQLite case 'sqlite': self::logtoSqlite($messages, $sErrorFile, $sLogDir); break; //send to browser //send to browser case 'browser': self::logtoBrowser($messages); break; // send to FirePHP // send to FirePHP case 'fb': case 'firebug': case 'firephp': self::logtoFirephp($messages); break; // save to FILE // save to FILE case 'file': default: self::logtoFile($messages, $sErrorFile, $sLogDir); } } // clear saved errors self::$_errors = array(); } }
/** * Send one header. * * @return bool: Headers sent */ public static function sendHeaders() { // headers already sent if (headers_sent($sFilename, $iLinenum)) { Days_Log::add("Headers not sent such as sended in file '{$sFilename}' on line {$iLinenum}"); return false; } // on Ajax query if (Days_Request::isAjax()) { // JSON encoded data Header('Content-Type: text/javascript; charset=UTF-8'); Header('Content-type: application/json; charset=UTF-8'); self::_sendHeadersNocache(); return true; } // send special headers only foreach (self::$_aHeaders as $sType => $sValue) { switch ((string) $sType) { case self::NOT_FOUND: Header('HTTP/1.0 404 Not Found'); return true; break; case '403': Header('HTTP/1.1 403 Forbidden'); return true; break; case self::PREV_PAGE: // redirect on previous page self::_sendHeadersRedirect(Days_Url::prev()); return true; break; case self::REDIRECT: case self::RELOAD: self::_sendHeadersRedirect($sValue); return true; break; } } // send all additional headers foreach (self::$_aHeaders as $sType => $sValue) { // send header info switch ((string) $sType) { case 'htm': case 'html': case 'xhtml': Header('Content-Type: text/html; charset=UTF-8'); self::_sendHeadersNocache(); break; case 'xml': Header("Content-Type: text/xml; charset=UTF-8"); self::_sendHeadersNocache(); break; case 'wml': Header('Content-Type: text/vnd.wap.wml; charset=UTF-8'); self::_sendHeadersNocache(); break; case 'json': Header('Content-Type: text/javascript; charset=UTF-8'); self::_sendHeadersNocache(); break; case 'js': Header('Content-type: application:x-javascript; charset=UTF-8'); self::_sendHeadersNocache(); break; case 'jpg': case 'jpeg': Header("Content-Type: image/jpeg"); self::_sendHeadersNocache(); break; case 'gif': Header("Content-Type: image/gif"); self::_sendHeadersNocache(); break; case 'png': Header("Content-Type: image/png"); self::_sendHeadersNocache(); break; } } // all headers sent return true; }
/** * Run application. * * @param string $appPath Path to application * @param string $mode Name of configuration file used in work */ private function __construct($appPath, $mode) { // set pathes self::$_libPath = realpath(dirname(__FILE__) . '/..') . '/'; self::$_appPath = realpath($appPath) . '/'; self::$_publicPath = getcwd() . '/'; set_include_path(get_include_path() . PATH_SEPARATOR . self::$_libPath); spl_autoload_register(array(__CLASS__, 'autoload')); Days_Session::init(); // set config main file if (!empty($mode)) { Days_Config::setDefaultConfig($mode); } // set path for config Days_Config::setConfigPath(self::$_appPath . 'config/'); // set debug mode self::$_isDebug = (bool) Days_Config::load()->get('engine/debug', false); // set error level and handler $iErrorLevel = self::isDebug() ? E_ALL | E_STRICT : E_ALL ^ E_NOTICE; error_reporting($iErrorLevel); setlocale(LC_ALL, 'ru_RU.UTF-8', 'RUS', 'RU'); //set timezone if ($timezone = Days_Config::load()->get('engine/timezone', false)) { date_default_timezone_set($timezone); } else { date_default_timezone_set('Europe/Helsinki'); } // not send execution errors to user ob_start(); try { if (Days_Config::load()->get('engine/autorun', 1)) { $autorunClass = "Controller_System_Autorun"; // run predefined class if (class_exists($autorunClass) and is_callable(array($autorunClass, 'run'))) { call_user_func(array($autorunClass, 'run')); } } Days_Event::run('engine.start'); // get url info $controller = Days_Url::getSpec('controller'); $action = Days_Url::getSpec('action'); $ext = Days_Url::getSpec('ext'); Days_Event::run('controller.start'); // set module path Days_Model::setPath(self::appPath() . 'Model/'); // set controller params $controllerClass = "Controller_" . ucfirst($controller); // use index controller for non-exists controllers if (!class_exists($controllerClass) and Days_Config::load()->get('url/virtual')) { $controllerClass = "Controller_Index"; $controller = 'index'; } // set action name $actionMethod = Days_Request::isAjax() ? "{$action}AjaxAction" : "{$action}Action"; // set template path $template = "content/{$controller}/{$action}.{$ext}"; // create controller if (!class_exists($controllerClass)) { throw new Days_Exception("Controller '{$controllerClass}' not found"); } $controllerObj = new $controllerClass($template); if (!$controllerObj instanceof Days_Controller) { throw new Days_Exception("Controller '{$controllerClass}' should be extended from 'Days_Controller'"); } // call init() method for prepare object $controllerObj->init(); Days_Event::run('controller.post.init'); // execute PostAction before call specified action if (Days_Request::isPost()) { $actionPost = "{$action}PostAction"; if (method_exists($controllerObj, $actionPost)) { call_user_func(array($controllerObj, $actionPost)); } } // call specified action if (!method_exists($controllerObj, $actionMethod)) { throw new Days_Exception("Action {$actionMethod} in controller {$controllerClass} not defined"); } $actionResult = call_user_func(array($controllerObj, $actionMethod)); // ajax query if (Days_Request::isAjax()) { if (is_null($actionResult)) { $actionResult = array(); } $content = $actionResult; } else { $controllerObj->setLayout($controller, false); $content = call_user_func(array($controllerObj, 'getContent')); Days_Response::addHeader($ext); } Days_Event::run('controller.end'); // set data to response Days_Response::addContent($content); } catch (Exception $oEx) { // save error message about this query Days_Log::add($oEx->getMessage()); // page not found Days_Response::addHeader(Days_Response::NOT_FOUND); } // save runtime errors for ($iObLevel = ob_get_level(); $iObLevel > 0; $iObLevel--) { $sError = ob_get_contents(); if ('' != $sError) { Days_Log::add("This data printed in scripts: '{$sError}'"); } // close output handler ob_end_clean(); } // save errors Days_Log::save(); Days_Event::run('engine.end'); // send headers to user Days_Event::run('response.send.headers'); Days_Response::sendHeaders(); // send content to user Days_Event::run('response.send.content'); Days_Response::sendContent(); }
/** * Return result rowset. * * @param string $type Return result as: all, first, last, one, count * @param array $cond Conditions * - count (int): Count of rows in result set * - page (int): Current page number (start from 1) * - columns (array): Column names * - where (array): Pairs `column=>$value` or `column_with_value` * - group (array): Group by columns * - order (array): Sorting by columns * @return Days_Db_Rowset|Days_Db_Row|int|null */ public function find($type = 'last', array $cond = array()) { // check parameters if (!isset($cond['page']) or !is_numeric($cond['page']) or $cond['page'] < 1) { $cond['page'] = 1; } // check columns if (!isset($cond['columns'])) { $cond['columns'] = '*'; } // get select object $select = $this->_select->from($this->_name, $cond['columns']); // join with tables foreach (array_unique($this->_join) as $joinTable) { $currentTable = $this->name(); $joinId = "_{$joinTable}_id"; $currentId = "_{$currentTable}_id"; // 1x1 if (is_array($this->info($joinId))) { $select->join($joinTable, "{$this->_quote($currentTable)}.{$this->_quote($joinId)}={$this->_quote($joinTable)}.{$this->_quote($joinId)}", array()); } elseif (is_array($this->info($currentId, $joinTable))) { $select->join($joinTable, "{$this->_quote($currentTable)}.{$this->_quote($currentId)}={$this->_quote($joinTable)}.{$this->_quote($currentId)}", array()); } else { // table name (or equivalent table view) $centerTable = "_{$joinTable}-{$currentTable}"; $select->join($centerTable, "{$this->_quote($currentTable)}.{$this->_quote($currentId)}={$this->_quote($centerTable)}.{$this->_quote($currentId)}", array()); $select->join($joinTable, "{$this->_quote($centerTable)}.{$this->_quote($joinId)}={$this->_quote($joinTable)}.{$this->_quote($joinId)}", array()); } } // set limit if (isset($cond['count']) and is_numeric($cond['count']) and $cond['count'] > 0) { $select->limitPage($cond['page'], $cond['count']); } // set where conditions if (isset($cond['where'])) { if (!is_array($cond['where'])) { $cond['where'] = array($cond['where']); } foreach ($cond['where'] as $name => $value) { // set condition with inserted value if (is_numeric($name)) { $select->where($value); } else { // replace magic column names preg_match('`([a-z0-9_.]+) *(<|>|<=|>=|<>|!=|=|IN|NOT IN)?`i', $name, $mathes); // real column name (from magic column name) $column = $this->column($mathes[1]); $sign = isset($mathes[2]) ? strtoupper($mathes[2]) : '='; // many values in one position if (is_array($value) and count($value) > 1 and 'NOT IN' != $sign) { $sign = 'IN'; } $question = ('IN' == $sign or 'NOT IN' == $sign) ? '(?)' : '?'; $name = "{$column} {$sign} {$question}"; $select->where($name, $value); } } } // set group by if (isset($cond['group'])) { $select->group($cond['group']); } // set sorting order if (isset($cond['order'])) { $select->order($cond['order']); } // profile SQL query Days_Log::profile((string) $select, 'Db_Table', Days_Log::PROFILE); // fetch result $rowset = new Days_Db_Rowset($this); switch ($type) { case 'all': $results = $select->query(); while ($row = $results->fetch(Zend_Db::FETCH_ASSOC)) { if (is_array($row)) { $rowset[] = new Days_Db_Row($row, $this, $rowset); } } break; case 'last': $results = $select->order("{$this->_order} DESC")->query(); while ($row = $results->fetch(Zend_Db::FETCH_ASSOC)) { if (is_array($row)) { $rowset[] = new Days_Db_Row($row, $this, $rowset); } } break; case 'first': $results = $select->order("{$this->_order} ASC")->query(); while ($row = $results->fetch(Zend_Db::FETCH_ASSOC)) { if (is_array($row)) { $rowset[] = new Days_Db_Row($row, $this, $rowset); } } break; case 'one': $row = $select->limit(1)->query()->fetch(Zend_Db::FETCH_ASSOC); $rowset = is_array($row) ? new Days_Db_Row($row, $this, $rowset) : null; break; case 'count': $rowset = $select->reset(Zend_Db_Select::FROM)->reset(Zend_Db_Select::COLUMNS)->from($this->_name, array('sum' => 'COUNT(*)'))->query()->fetch(Zend_Db::FETCH_COLUMN); break; default: throw new Days_Exception("Passed incorrect result type '{$type}' in find() method"); } // reset table object for new query $select->reset(); $this->_join = array(); // return result rowset return $rowset; }