You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

346 lines
12 KiB

12 years ago
  1. <?php
  2. if (!defined('DOCUMENT_ROOT')) die('Access denied');
  3. require 'vendor/autoload.php';
  4. use Monolog\Logger;
  5. use Monolog\Handler\SyslogHandler;
  6. /**
  7. * Error Handler...
  8. */
  9. function systemErrorHandler($errno, $errstr, $errfile, $errline, $errcontext = null)
  10. {
  11. $log = new Logger('movim');
  12. $log->pushHandler(new SyslogHandler('movim'));
  13. $log->addError($errstr);
  14. return false;
  15. }
  16. /**
  17. * Manage boot order
  18. */
  19. class Bootstrap {
  20. function boot() {
  21. //define all needed constants
  22. $this->setContants();
  23. mb_internal_encoding("UTF-8");
  24. //First thing to do, define error management (in case of error forward)
  25. $this->setLogs();
  26. //Check if vital system need is OK
  27. $this->checkSystem();
  28. $this->setBrowserSupport();
  29. $this->loadSystem();
  30. $this->loadCommonLibraries();
  31. $this->loadDispatcher();
  32. $this->loadHelpers();
  33. $loadmodlsuccess = $this->loadModl();
  34. $this->setTimezone();
  35. $this->setLogLevel();
  36. if($loadmodlsuccess) {
  37. $this->startingSession();
  38. } else {
  39. throw new Exception('Error loading Modl');
  40. }
  41. }
  42. private function checkSystem() {
  43. $listWritableFile = array(
  44. DOCUMENT_ROOT.'/log/logger.log',
  45. DOCUMENT_ROOT.'/log/php.log',
  46. DOCUMENT_ROOT.'/cache/test.tmp',
  47. );
  48. $errors=array();
  49. if(!is_writable(DOCUMENT_ROOT))
  50. $errors[] = 'We\'re unable to write to folder '.DOCUMENT_ROOT.': check rights';
  51. else {
  52. if(!file_exists(DOCUMENT_ROOT.'/cache') && !@mkdir(DOCUMENT_ROOT.'/cache')) {
  53. $errors[] = 'Couldn\'t create directory cache';
  54. }
  55. if(!file_exists(DOCUMENT_ROOT.'/log') && !@mkdir(DOCUMENT_ROOT.'/log')) {
  56. $errors[] = 'Couldn\'t create directory log';
  57. }
  58. if(!file_exists(DOCUMENT_ROOT.'/config') && !@mkdir(DOCUMENT_ROOT.'/config')) {
  59. $errors[] = 'Couldn\'t create directory config';
  60. }
  61. if(!file_exists(DOCUMENT_ROOT.'/users') && !@mkdir(DOCUMENT_ROOT.'/users')) {
  62. $errors[] = 'Couldn\'t create directory users';
  63. } else {
  64. touch(DOCUMENT_ROOT.'/users/index.html');
  65. }
  66. }
  67. foreach($listWritableFile as $fileName) {
  68. if (!file_exists($fileName)) {
  69. if (touch($fileName) !== true) {
  70. $errors[] = 'We\'re unable to write to '.$fileName.': check rights';
  71. }
  72. }else if (is_writable($fileName) !== true) {
  73. $errors[] = 'We\'re unable to write to file '.$fileName.': check rights';
  74. }
  75. }
  76. if (!function_exists('json_decode')) {
  77. $errors[] = 'You need to install php5-json that\'s not seems to be installed';
  78. }
  79. if (count($errors)) {
  80. throw new Exception(implode("\n<br />",$errors));
  81. }
  82. }
  83. private function setContants() {
  84. define('APP_TITLE', 'Movim');
  85. define('APP_NAME', 'movim');
  86. define('APP_VERSION', $this->getVersion());
  87. define('BASE_URI', $this->getBaseUri());
  88. define('CACHE_URI', $this->getBaseUri() . 'cache/');
  89. define('THEMES_PATH', DOCUMENT_ROOT . '/themes/');
  90. define('USERS_PATH', DOCUMENT_ROOT . '/users/');
  91. define('APP_PATH', DOCUMENT_ROOT . '/app/');
  92. define('SYSTEM_PATH', DOCUMENT_ROOT . '/system/');
  93. define('LIB_PATH', DOCUMENT_ROOT . '/lib/');
  94. define('LOCALES_PATH', DOCUMENT_ROOT . '/locales/');
  95. define('CACHE_PATH', DOCUMENT_ROOT . '/cache/');
  96. define('LOG_PATH', DOCUMENT_ROOT . '/log/');
  97. define('VIEWS_PATH', DOCUMENT_ROOT . '/app/views/');
  98. define('HELPERS_PATH', DOCUMENT_ROOT . '/app/helpers/');
  99. define('WIDGETS_PATH', DOCUMENT_ROOT . '/app/widgets/');
  100. define('MOVIM_API', 'https://api.movim.eu/');
  101. if (!defined('DOCTYPE')) {
  102. define('DOCTYPE','text/html');
  103. }
  104. }
  105. private function getVersion() {
  106. $file = "VERSION";
  107. if($f = fopen(DOCUMENT_ROOT.'/'.$file, 'r')) {
  108. return trim(fgets($f));
  109. }
  110. }
  111. private function getBaseUri() {
  112. $dirname = dirname($_SERVER['PHP_SELF']);
  113. $path = (($dirname == DIRECTORY_SEPARATOR) ? '' : $dirname).'/';
  114. // Determining the protocol to use.
  115. $uri = "http://";
  116. if((
  117. isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != "")
  118. || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == "https")) {
  119. $uri = 'https://';
  120. }
  121. if($path == "") {
  122. $uri .= $_SERVER['HTTP_HOST'] ;
  123. } elseif(isset($_SERVER['HTTP_HOST'])) {
  124. $uri .= str_replace('//', '/', $_SERVER['HTTP_HOST'] . $path);
  125. }
  126. $uri = str_replace('jajax.php', '', $uri);
  127. return $uri;
  128. }
  129. private function loadSystem() {
  130. // Loads up all system libraries.
  131. require_once(SYSTEM_PATH . "/i18n/i18n.php");
  132. require_once(SYSTEM_PATH . "Session.php");
  133. require_once(SYSTEM_PATH . "Sessionx.php");
  134. require_once(SYSTEM_PATH . "Utils.php");
  135. require_once(SYSTEM_PATH . "UtilsPicture.php");
  136. require_once(SYSTEM_PATH . "Cache.php");
  137. require_once(SYSTEM_PATH . "Event.php");
  138. require_once(SYSTEM_PATH . "MovimException.php");
  139. require_once(SYSTEM_PATH . "RPC.php");
  140. require_once(SYSTEM_PATH . "User.php");
  141. require_once(SYSTEM_PATH . "Picture.php");
  142. }
  143. private function loadCommonLibraries() {
  144. // XMPPtoForm lib
  145. require_once(LIB_PATH . "XMPPtoForm.php");
  146. // SDPtoJingle and JingletoSDP lib :)
  147. require_once(LIB_PATH . "SDPtoJingle.php");
  148. require_once(LIB_PATH . "JingletoSDP.php");
  149. // The Lazy page loader
  150. require_once(LIB_PATH . "Lazy.php");
  151. }
  152. private function loadHelpers() {
  153. foreach(glob(HELPERS_PATH."*Helper.php") as $file) {
  154. require $file;
  155. }
  156. }
  157. private function loadDispatcher() {
  158. require_once(SYSTEM_PATH . "template/TplPageBuilder.php");
  159. require_once(SYSTEM_PATH . "controllers/BaseController.php");
  160. require_once(SYSTEM_PATH . "controllers/AjaxController.php");
  161. require_once(SYSTEM_PATH . "Route.php");
  162. require_once(SYSTEM_PATH . "controllers/FrontController.php");
  163. require_once(SYSTEM_PATH . "widget/WidgetBase.php");
  164. require_once(SYSTEM_PATH . "widget/WidgetWrapper.php");
  165. require_once(APP_PATH . "widgets/WidgetCommon/WidgetCommon.php");
  166. require_once(APP_PATH . "widgets/Notification/Notification.php");
  167. }
  168. private function setLogs() {
  169. /*$cd = new \Modl\ConfigDAO();
  170. $config = $cd->get();
  171. try {
  172. define('ENVIRONMENT', $config->environment);
  173. } catch (Exception $e) {
  174. define('ENVIRONMENT','development');//default environment is production
  175. }*/
  176. define('ENVIRONMENT','development');//default environment is production
  177. /**
  178. * LOG_MANAGEMENT: define where logs are saved, prefer error_log, or log_folder if you use mutual server.
  179. * 'error_log' : save in file defined on your file server
  180. * 'log_folder' : save in log folder, in DOCUMENT_ROOT.'/log'
  181. * 'syslog' : save in global system logs (not in file server logs)
  182. */
  183. define('LOG_MANAGEMENT','log_folder');
  184. if (ENVIRONMENT === 'development') {
  185. ini_set('log_errors', 1);
  186. ini_set('display_errors', 0);
  187. ini_set('error_reporting', E_ALL );
  188. } else {
  189. ini_set('log_errors', 1);
  190. ini_set('display_errors', 0);
  191. ini_set('error_reporting', E_ALL ^ E_DEPRECATED ^ E_NOTICE);
  192. }
  193. if (LOG_MANAGEMENT === 'log_folder') {
  194. ini_set('error_log', DOCUMENT_ROOT.'/log/php.log');
  195. }
  196. set_error_handler('systemErrorHandler', E_ALL);
  197. }
  198. private function setTimezone() {
  199. // We set the default timezone to the server timezone
  200. $cd = new \Modl\ConfigDAO();
  201. $config = $cd->get();
  202. //date_default_timezone_set($config->timezone);
  203. date_default_timezone_set(date_default_timezone_get());
  204. }
  205. private function setLogLevel() {
  206. // We set the default timezone to the server timezone
  207. $cd = new \Modl\ConfigDAO();
  208. $config = $cd->get();
  209. define('LOG_LEVEL', (int)$config->loglevel);
  210. }
  211. private function loadModl() {
  212. // We load Movim Data Layer
  213. $db = Modl\Modl::getInstance();
  214. $db->setModelsPath(APP_PATH.'models');
  215. Modl\Utils::loadModel('Config');
  216. Modl\Utils::loadModel('Presence');
  217. Modl\Utils::loadModel('Contact');
  218. Modl\Utils::loadModel('Privacy');
  219. Modl\Utils::loadModel('RosterLink');
  220. Modl\Utils::loadModel('Session');
  221. Modl\Utils::loadModel('Cache');
  222. Modl\Utils::loadModel('Postn');
  223. Modl\Utils::loadModel('Subscription');
  224. Modl\Utils::loadModel('Caps');
  225. Modl\Utils::loadModel('Item');
  226. Modl\Utils::loadModel('Message');
  227. Modl\Utils::loadModel('Sessionx');
  228. Modl\Utils::loadModel('Conference');
  229. if(file_exists(DOCUMENT_ROOT.'/config/db.inc.php')) {
  230. require DOCUMENT_ROOT.'/config/db.inc.php';
  231. } else {
  232. throw new MovimException('Cannot find config/db.inc.php file');
  233. }
  234. $db->setConnectionArray($conf);
  235. $db->connect();
  236. return true;
  237. }
  238. private function setBrowserSupport() {
  239. if(isset( $_SERVER['HTTP_USER_AGENT'])) {
  240. $useragent = $_SERVER['HTTP_USER_AGENT'];
  241. if (preg_match('|MSIE ([0-9].[0-9]{1,2})|',$useragent,$matched)) {
  242. $browser_version=$matched[1];
  243. $browser = 'IE';
  244. } elseif (preg_match('/Opera[\/ ]([0-9]{1}\.[0-9]{1}([0-9])?)/',$useragent,$matched)) {
  245. $browser_version=$matched[1];
  246. $browser = 'Opera';
  247. } elseif(preg_match('|Firefox/([0-9\.]+)|',$useragent,$matched)) {
  248. $browser_version=$matched[1];
  249. $browser = 'Firefox';
  250. } elseif(preg_match('|Safari/([0-9\.]+)|',$useragent,$matched)) {
  251. $browser_version=$matched[1];
  252. $browser = 'Safari';
  253. } else {
  254. $browser_version = 0;
  255. $browser = 'other';
  256. }
  257. } else {
  258. $browser_version = 0;
  259. $browser= 'other';
  260. }
  261. define('BROWSER_VERSION', $browser_version);
  262. define('BROWSER', $browser);
  263. $compatible = false;
  264. switch($browser) {
  265. case 'Firefox':
  266. if($browser_version > 3.5)
  267. $compatible = true;
  268. break;
  269. case 'IE':
  270. if($browser_version > 9.0)
  271. $compatible = true;
  272. break;
  273. case 'Safari': // Also Chrome-Chromium
  274. if($browser_version > 522.0)
  275. $compatible = true;
  276. break;
  277. case 'Opera':
  278. if($browser_version > 9.0)
  279. $compatible = true;
  280. break;
  281. }
  282. define('BROWSER_COMP', $compatible);
  283. }
  284. private function startingSession() {
  285. $s = \Sessionx::start();
  286. $s->load();
  287. $user = new User;
  288. $db = modl\Modl::getInstance();
  289. $db->setUser($user->getLogin());
  290. }
  291. }