Пример #1
0
 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;
     }
 }
Пример #2
0
 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();
     }
 }
Пример #3
0
 /**
  * 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;
 }
Пример #4
0
 /**
  * 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();
 }
Пример #5
0
 /**
  * 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;
 }