PageRenderTime 25ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/controllers/frontController.class.php

https://bitbucket.org/Kadet/pipecms
PHP | 166 lines | 113 code | 31 blank | 22 comment | 10 complexity | b9d73ff13f5601f973cfcf3beacec10d MD5 | raw file
  1. <?php
  2. /*
  3. * To change this template, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. /**
  7. * Description of frontController
  8. *
  9. * @author Kadet
  10. */
  11. class frontController extends controller {
  12. /**
  13. * Directory with config files
  14. * @var string
  15. */
  16. public static $configDir = 'cfg/';
  17. private $_pluginManager;
  18. public function __construct() {
  19. $this->_loadConfig();
  20. $this->_initLanguage();
  21. $this->_prepareRouter();
  22. $this->_prepareDBConnection();
  23. $this->_getUser();
  24. BBcode::loadBBcode(new xml(self::$configDir.'BBcode.xml'));
  25. $this->_pluginManager = new pluginManager();
  26. $this->_pluginManager->loadPlugins();
  27. if(file_exists(view::$templateDir.'/functions.php'))
  28. include view::$templateDir.'/functions.php';
  29. hookManager::add('pipe_footer', 'cookies');
  30. searchController::$providers['news'] = new newsSearchProvider();
  31. searchController::$providers['user'] = new userSearchProvider();
  32. }
  33. public function work($startTime)
  34. {
  35. # load menu
  36. menu::$lang = language::getLang();
  37. # get required controller and action
  38. $controllerName = self::$router->controller.'Controller';
  39. $action = self::$router->action;
  40. # check if controller is exists and do properly action
  41. if(class_exists($controllerName) && $controllerName != __CLASS__)
  42. {
  43. try {
  44. try {
  45. $controller = new $controllerName();
  46. $page = $controller->$action(self::$router->get(), self::$router->post());
  47. } catch (invalidDataException $e) {
  48. throw new messageException(language::get("error"), language::get($e->getMessage()));
  49. }
  50. } catch(messageException $e) {
  51. $page = new HTMLview('message.tpl');
  52. $page->message = $e;
  53. }
  54. }
  55. else
  56. {
  57. $page = $this->getErrorPage(404);
  58. }
  59. $pattern = new HTMLview(self::$_pattern);
  60. $pattern->page = $page;
  61. # some statistics
  62. $pattern->gt = round(microtime(true) - $startTime, 6);
  63. $pattern->sql = dataBaseConnection::$ns;
  64. # set panel for user
  65. $pattern->userInfo = self::$user->isLogged ?
  66. new HTMLview('user/panel-info.tpl') :
  67. new HTMLview('user/panel-login-form.tpl');
  68. if(self::$user->isLogged) {
  69. $notifications = new notificationsModel();
  70. $pattern->notifications = $notifications->getImportantNotifications(self::$user->id);
  71. $pattern->notificationCount = $notifications->getNotificationsCount(self::$user->id);
  72. }
  73. # print our page
  74. echo $pattern->render();
  75. }
  76. protected function _initLanguage()
  77. {
  78. language::$langName = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : self::$config->defaultLanguage;
  79. if(isset($_GET['lang']))
  80. {
  81. setcookie('lang', $_GET['lang']);
  82. language::$langName = $_GET['lang'];
  83. }
  84. language::$langsDir = 'languages';
  85. language::load();
  86. }
  87. protected function _loadConfig()
  88. {
  89. self::$config = new mainConfig(new xml(self::$configDir.'config.xml'));
  90. view::$templateDir = view::$templateDir = 'templates/'.self::$config->defaultTemplate;
  91. view::addTitleChunk(self::$config->info->title);
  92. }
  93. protected function _prepareRouter()
  94. {
  95. # create and configure router instance
  96. self::$router = router::getInstance();
  97. self::$router->loadFromConfig(new config(new xml(self::$configDir.'router.config.xml')));
  98. # get url parameter from GET
  99. $URI = self::$router->get('q') != null ?
  100. self::$router->get('q') :
  101. array('index', 'index');
  102. # set URI and decode it
  103. self::$router->setURI($URI);
  104. self::$router->decodeURI();
  105. }
  106. protected function _prepareDBConnection()
  107. {
  108. dataBaseConnection::$log = new log("dblog.log");
  109. $bconnection = new dataBaseConnection();
  110. $bconnection->loadConfig(new config(new xml(self::$configDir.'dataBase.config.xml')));
  111. $bconnection->connect();
  112. dataBaseModel::$connection = $bconnection;
  113. }
  114. protected function _getUser()
  115. {
  116. self::$user = new user();
  117. if(isset($_SESSION['userid'])) {
  118. $id = $_SESSION['userid'];
  119. } elseif(autologin::get()) {
  120. $id = autologin::get();
  121. } else {
  122. return;
  123. }
  124. $userModel = new userModel;
  125. self::$user = $userModel->getUserData($id);
  126. if(self::$user->banned) // User banned?
  127. {
  128. session_destroy(); // Logout him...
  129. throw new messageException(language::get("error"), language::get("youHaveBeenBanned"), array("url" => array("index"))); // and pring massage
  130. }
  131. $userModel->updateLastActivity(time(), $id);
  132. self::$user->isLogged = true;
  133. }
  134. }
  135. ?>