PageRenderTime 52ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/CoreVersions/0.2.0/Frameworks/Baikal/Core/Tools.php

http://github.com/jeromeschneider/Baikal
PHP | 600 lines | 544 code | 20 blank | 36 comment | 15 complexity | 402fe258c9e248705e9ade66aa063c24 MD5 | raw file
Possible License(s): GPL-3.0, BSD-3-Clause
  1. <?php
  2. #################################################################
  3. # Copyright notice
  4. #
  5. # (c) 2012 Jérôme Schneider <mail@jeromeschneider.fr>
  6. # All rights reserved
  7. #
  8. # http://baikal.codr.fr
  9. #
  10. # This script is part of the Baďkal Server project. The Baďkal
  11. # Server project is free software; you can redistribute it
  12. # and/or modify it under the terms of the GNU General Public
  13. # License as published by the Free Software Foundation; either
  14. # version 2 of the License, or (at your option) any later version.
  15. #
  16. # The GNU General Public License can be found at
  17. # http://www.gnu.org/copyleft/gpl.html.
  18. #
  19. # This script is distributed in the hope that it will be useful,
  20. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  21. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  22. # GNU General Public License for more details.
  23. #
  24. # This copyright notice MUST APPEAR in all copies of the script!
  25. #################################################################
  26. namespace Baikal\Core;
  27. class Tools {
  28. public static function &db() {
  29. return $GLOBALS["pdo"];
  30. }
  31. public static function assertEnvironmentIsOk() {
  32. # Asserting Baikal Context
  33. if(!defined("BAIKAL_CONTEXT") || BAIKAL_CONTEXT !== TRUE) {
  34. die("Bootstrap.php may not be included outside the Baikal context");
  35. }
  36. # Asserting PDO
  37. if(!defined('PDO::ATTR_DRIVER_NAME')) {
  38. die('Baikal Fatal Error: PDO is unavailable. It\'s required by Baikal.');
  39. }
  40. # Asserting PDO::SQLite
  41. if(!in_array('sqlite', \PDO::getAvailableDrivers())) {
  42. die('Baikal Fatal Error: PDO::sqlite is unavailable. It\'s required by Baikal.');
  43. }
  44. }
  45. public static function configureEnvironment() {
  46. set_exception_handler('\Baikal\Core\Tools::handleException');
  47. ini_set("error_reporting", E_ALL);
  48. }
  49. public static function handleException($exception) {
  50. echo "<pre>" . $exception . "<pre>";
  51. }
  52. public static function assertBaikalIsOk() {
  53. # Asserting DB file exists
  54. if(!file_exists(PROJECT_SQLITE_FILE)) {
  55. throw new \Exception("DB file does not exist. To create it, please copy 'Core/Resources/db.empty.sqlite' to 'Specific/db/.ht.db.sqlite'");
  56. }
  57. # Asserting DB file is readable
  58. if(!is_readable(PROJECT_SQLITE_FILE)) {
  59. throw new \Exception("DB file is not readable. Please give read permissions to httpd user on file 'Specific/db/.ht.db.sqlite'.");
  60. }
  61. # Asserting DB file is writable
  62. if(!is_writable(PROJECT_SQLITE_FILE)) {
  63. throw new \Exception("DB file is not writable. Please give write permissions to httpd user on file 'Specific/db/.ht.db.sqlite'.");
  64. }
  65. # Asserting config file exists
  66. if(!file_exists(PROJECT_PATH_SPECIFIC . "config.php")) {
  67. throw new \Exception("Specific/config.php does not exist. Please use the Install tool to create it.");
  68. }
  69. # Asserting config file is readable
  70. if(!is_readable(PROJECT_PATH_SPECIFIC . "config.php")) {
  71. throw new \Exception("Specific/config.php is not readable. Please give read permissions to httpd user on file 'Specific/config.php'.");
  72. }
  73. # Asserting config file is writable
  74. if(!is_writable(PROJECT_PATH_SPECIFIC . "config.php")) {
  75. throw new \Exception("Specific/config.php is not writable. Please give write permissions to httpd user on file 'Specific/config.php'.");
  76. }
  77. # Asserting system config file exists
  78. if(!file_exists(PROJECT_PATH_SPECIFIC . "config.system.php")) {
  79. throw new \Exception("Specific/config.system.php does not exist. Please use the Install tool to create it.");
  80. }
  81. # Asserting system config file is readable
  82. if(!is_readable(PROJECT_PATH_SPECIFIC . "config.system.php")) {
  83. throw new \Exception("Specific/config.system.php is not readable. Please give read permissions to httpd user on file 'Specific/config.system.php'.");
  84. }
  85. # Asserting system config file is writable
  86. if(!is_writable(PROJECT_PATH_SPECIFIC . "config.system.php")) {
  87. throw new \Exception("Specific/config.system.php is not writable. Please give write permissions to httpd user on file 'Specific/config.system.php'.");
  88. }
  89. }
  90. public static function bashPrompt($prompt) {
  91. print $prompt;
  92. @flush();
  93. @ob_flush();
  94. $confirmation = @trim(fgets(STDIN));
  95. return $confirmation;
  96. }
  97. public static function bashPromptSilent($prompt = "Enter Password:") {
  98. $command = "/usr/bin/env bash -c 'echo OK'";
  99. if(rtrim(shell_exec($command)) !== 'OK') {
  100. trigger_error("Can't invoke bash");
  101. return;
  102. }
  103. $command = "/usr/bin/env bash -c 'read -s -p \""
  104. . addslashes($prompt)
  105. . "\" mypassword && echo \$mypassword'";
  106. $password = rtrim(shell_exec($command));
  107. echo "\n";
  108. return $password;
  109. }
  110. public static function getCopyrightNotice($sLinePrefixChar = "#", $sLineSuffixChar = "", $sOpening = FALSE, $sClosing = FALSE) {
  111. if($sOpening === FALSE) {
  112. $sOpening = str_repeat("#", 78);
  113. }
  114. if($sClosing === FALSE) {
  115. $sClosing = str_repeat("#", 78);
  116. }
  117. $iYear = date("Y");
  118. $sCode =<<<CODE
  119. Copyright notice
  120. (c) {$iYear} Jérôme Schneider <mail@jeromeschneider.fr>
  121. All rights reserved
  122. http://baikal.codr.fr
  123. This script is part of the Baďkal Server project. The Baďkal
  124. Server project is free software; you can redistribute it
  125. and/or modify it under the terms of the GNU General Public
  126. License as published by the Free Software Foundation; either
  127. version 2 of the License, or (at your option) any later version.
  128. The GNU General Public License can be found at
  129. http://www.gnu.org/copyleft/gpl.html.
  130. This script is distributed in the hope that it will be useful,
  131. but WITHOUT ANY WARRANTY; without even the implied warranty of
  132. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  133. GNU General Public License for more details.
  134. This copyright notice MUST APPEAR in all copies of the script!
  135. CODE;
  136. $sCode = "\n" . trim($sCode) . "\n";
  137. $aCode = explode("\n", $sCode);
  138. foreach(array_keys($aCode) as $iLineNum) {
  139. $aCode[$iLineNum] = trim($sLinePrefixChar . "\t" . $aCode[$iLineNum]);
  140. }
  141. if(trim($sOpening) !== "") {
  142. array_unshift($aCode, $sOpening);
  143. }
  144. if(trim($sClosing) !== "") {
  145. $aCode[] = $sClosing;
  146. }
  147. return implode("\n", $aCode);
  148. }
  149. public static function timezones() {
  150. $aZones = array(
  151. "Africa/Abidjan",
  152. "Africa/Accra",
  153. "Africa/Addis_Ababa",
  154. "Africa/Algiers",
  155. "Africa/Asmara",
  156. "Africa/Bamako",
  157. "Africa/Bangui",
  158. "Africa/Banjul",
  159. "Africa/Bissau",
  160. "Africa/Blantyre",
  161. "Africa/Brazzaville",
  162. "Africa/Bujumbura",
  163. "Africa/Cairo",
  164. "Africa/Casablanca",
  165. "Africa/Ceuta",
  166. "Africa/Conakry",
  167. "Africa/Dakar",
  168. "Africa/Dar_es_Salaam",
  169. "Africa/Djibouti",
  170. "Africa/Douala",
  171. "Africa/El_Aaiun",
  172. "Africa/Freetown",
  173. "Africa/Gaborone",
  174. "Africa/Harare",
  175. "Africa/Johannesburg",
  176. "Africa/Juba",
  177. "Africa/Kampala",
  178. "Africa/Khartoum",
  179. "Africa/Kigali",
  180. "Africa/Kinshasa",
  181. "Africa/Lagos",
  182. "Africa/Libreville",
  183. "Africa/Lome",
  184. "Africa/Luanda",
  185. "Africa/Lubumbashi",
  186. "Africa/Lusaka",
  187. "Africa/Malabo",
  188. "Africa/Maputo",
  189. "Africa/Maseru",
  190. "Africa/Mbabane",
  191. "Africa/Mogadishu",
  192. "Africa/Monrovia",
  193. "Africa/Nairobi",
  194. "Africa/Ndjamena",
  195. "Africa/Niamey",
  196. "Africa/Nouakchott",
  197. "Africa/Ouagadougou",
  198. "Africa/Porto-Novo",
  199. "Africa/Sao_Tome",
  200. "Africa/Tripoli",
  201. "Africa/Tunis",
  202. "Africa/Windhoek",
  203. "America/Adak",
  204. "America/Anchorage",
  205. "America/Anguilla",
  206. "America/Antigua",
  207. "America/Araguaina",
  208. "America/Argentina/Buenos_Aires",
  209. "America/Argentina/Catamarca",
  210. "America/Argentina/Cordoba",
  211. "America/Argentina/Jujuy",
  212. "America/Argentina/La_Rioja",
  213. "America/Argentina/Mendoza",
  214. "America/Argentina/Rio_Gallegos",
  215. "America/Argentina/Salta",
  216. "America/Argentina/San_Juan",
  217. "America/Argentina/San_Luis",
  218. "America/Argentina/Tucuman",
  219. "America/Argentina/Ushuaia",
  220. "America/Aruba",
  221. "America/Asuncion",
  222. "America/Atikokan",
  223. "America/Bahia",
  224. "America/Barbados",
  225. "America/Belem",
  226. "America/Belize",
  227. "America/Blanc-Sablon",
  228. "America/Boa_Vista",
  229. "America/Bogota",
  230. "America/Boise",
  231. "America/Cambridge_Bay",
  232. "America/Campo_Grande",
  233. "America/Cancun",
  234. "America/Caracas",
  235. "America/Cayenne",
  236. "America/Cayman",
  237. "America/Chicago",
  238. "America/Chihuahua",
  239. "America/Costa_Rica",
  240. "America/Cuiaba",
  241. "America/Curacao",
  242. "America/Danmarkshavn",
  243. "America/Dawson",
  244. "America/Dawson_Creek",
  245. "America/Denver",
  246. "America/Detroit",
  247. "America/Dominica",
  248. "America/Edmonton",
  249. "America/Eirunepe",
  250. "America/El_Salvador",
  251. "America/Felipe_Carrillo",
  252. "America/Fortaleza",
  253. "America/Glace_Bay",
  254. "America/Godthab",
  255. "America/Goose_Bay",
  256. "America/Grand_Turk",
  257. "America/Grenada",
  258. "America/Guadeloupe",
  259. "America/Guatemala",
  260. "America/Guayaquil",
  261. "America/Guyana",
  262. "America/Halifax",
  263. "America/Havana",
  264. "America/Hermosillo",
  265. "America/Indiana/Indianapolis",
  266. "America/Indiana/Knox",
  267. "America/Indiana/Marengo",
  268. "America/Indiana/Petersburg",
  269. "America/Indiana/Tell_City",
  270. "America/Indiana/Vevay",
  271. "America/Indiana/Vincennes",
  272. "America/Indiana/Winamac",
  273. "America/Inuvik",
  274. "America/Iqaluit",
  275. "America/Jamaica",
  276. "America/Juneau",
  277. "America/Kentucky/Louisville",
  278. "America/Kentucky/Monticello",
  279. "America/La_Paz",
  280. "America/Lima",
  281. "America/Los_Angeles",
  282. "America/Maceio",
  283. "America/Managua",
  284. "America/Manaus",
  285. "America/Marigot",
  286. "America/Martinique",
  287. "America/Matamoros",
  288. "America/Mazatlan",
  289. "America/Menominee",
  290. "America/Merida",
  291. "America/Mexico_City",
  292. "America/Miquelon",
  293. "America/Moncton",
  294. "America/Monterrey",
  295. "America/Montevideo",
  296. "America/Montreal",
  297. "America/Montserrat",
  298. "America/Nassau",
  299. "America/New_York",
  300. "America/Nipigon",
  301. "America/Nome",
  302. "America/Noronha",
  303. "America/North_Dakota/Center",
  304. "America/North_Dakota/New_Salem",
  305. "America/Ojinaga",
  306. "America/Panama",
  307. "America/Pangnirtung",
  308. "America/Paramaribo",
  309. "America/Phoenix",
  310. "America/Port-au-Prince",
  311. "America/Porto_Velho",
  312. "America/Port_of_Spain",
  313. "America/Puerto_Rico",
  314. "America/Rainy_River",
  315. "America/Rankin_Inlet",
  316. "America/Recife",
  317. "America/Regina",
  318. "America/Resolute",
  319. "America/Rio_Branco",
  320. "America/Santarem",
  321. "America/Santa_Isabel",
  322. "America/Santiago",
  323. "America/Santo_Domingo",
  324. "America/Sao_Paulo",
  325. "America/Scoresbysund",
  326. "America/Shiprock",
  327. "America/St_Barthelemy",
  328. "America/St_Johns",
  329. "America/St_Kitts",
  330. "America/St_Lucia",
  331. "America/St_Thomas",
  332. "America/St_Vincent",
  333. "America/Swift_Current",
  334. "America/Tegucigalpa",
  335. "America/Thule",
  336. "America/Thunder_Bay",
  337. "America/Tijuana",
  338. "America/Toronto",
  339. "America/Tortola",
  340. "America/Vancouver",
  341. "America/Whitehorse",
  342. "America/Winnipeg",
  343. "America/Yakutat",
  344. "America/Yellowknife",
  345. "Antarctica/Casey",
  346. "Antarctica/Davis",
  347. "Antarctica/DumontDUrville",
  348. "Antarctica/Mawson",
  349. "Antarctica/McMurdo",
  350. "Antarctica/Palmer",
  351. "Antarctica/Rothera",
  352. "Antarctica/South_Pole",
  353. "Antarctica/Syowa",
  354. "Antarctica/Vostok",
  355. "Arctic/Longyearbyen",
  356. "Asia/Aden",
  357. "Asia/Almaty",
  358. "Asia/Amman",
  359. "Asia/Anadyr",
  360. "Asia/Aqtau",
  361. "Asia/Aqtobe",
  362. "Asia/Ashgabat",
  363. "Asia/Baghdad",
  364. "Asia/Bahrain",
  365. "Asia/Baku",
  366. "Asia/Bangkok",
  367. "Asia/Beirut",
  368. "Asia/Bishkek",
  369. "Asia/Brunei",
  370. "Asia/Choibalsan",
  371. "Asia/Chongqing",
  372. "Asia/Colombo",
  373. "Asia/Damascus",
  374. "Asia/Dhaka",
  375. "Asia/Dili",
  376. "Asia/Dubai",
  377. "Asia/Dushanbe",
  378. "Asia/Gaza",
  379. "Asia/Harbin",
  380. "Asia/Hong_Kong",
  381. "Asia/Hovd",
  382. "Asia/Ho_Chi_Minh",
  383. "Asia/Irkutsk",
  384. "Asia/Jakarta",
  385. "Asia/Jayapura",
  386. "Asia/Jerusalem",
  387. "Asia/Kabul",
  388. "Asia/Kamchatka",
  389. "Asia/Karachi",
  390. "Asia/Kashgar",
  391. "Asia/Kathmandu",
  392. "Asia/Kolkata",
  393. "Asia/Krasnoyarsk",
  394. "Asia/Kuala_Lumpur",
  395. "Asia/Kuching",
  396. "Asia/Kuwait",
  397. "Asia/Macau",
  398. "Asia/Magadan",
  399. "Asia/Makassar",
  400. "Asia/Manila",
  401. "Asia/Muscat",
  402. "Asia/Nicosia",
  403. "Asia/Novokuznetsk",
  404. "Asia/Novosibirsk",
  405. "Asia/Omsk",
  406. "Asia/Oral",
  407. "Asia/Phnom_Penh",
  408. "Asia/Pontianak",
  409. "Asia/Pyongyang",
  410. "Asia/Qatar",
  411. "Asia/Qyzylorda",
  412. "Asia/Rangoon",
  413. "Asia/Riyadh",
  414. "Asia/Sakhalin",
  415. "Asia/Samarkand",
  416. "Asia/Seoul",
  417. "Asia/Shanghai",
  418. "Asia/Singapore",
  419. "Asia/Taipei",
  420. "Asia/Tashkent",
  421. "Asia/Tbilisi",
  422. "Asia/Tehran",
  423. "Asia/Thimphu",
  424. "Asia/Tokyo",
  425. "Asia/Ulaanbaatar",
  426. "Asia/Urumqi",
  427. "Asia/Vientiane",
  428. "Asia/Vladivostok",
  429. "Asia/Yakutsk",
  430. "Asia/Yekaterinburg",
  431. "Asia/Yerevan",
  432. "Atlantic/Azores",
  433. "Atlantic/Bermuda",
  434. "Atlantic/Canary",
  435. "Atlantic/Cape_Verde",
  436. "Atlantic/Faroe",
  437. "Atlantic/Madeira",
  438. "Atlantic/Reykjavik",
  439. "Atlantic/South_Georgia",
  440. "Atlantic/Stanley",
  441. "Atlantic/St_Helena",
  442. "Australia/Adelaide",
  443. "Australia/Brisbane",
  444. "Australia/Broken_Hill",
  445. "Australia/Currie",
  446. "Australia/Darwin",
  447. "Australia/Eucla",
  448. "Australia/Hobart",
  449. "Australia/Lindeman",
  450. "Australia/Lord_Howe",
  451. "Australia/Melbourne",
  452. "Australia/Perth",
  453. "Australia/Sydney",
  454. "Europe/Amsterdam",
  455. "Europe/Andorra",
  456. "Europe/Athens",
  457. "Europe/Belgrade",
  458. "Europe/Berlin",
  459. "Europe/Bratislava",
  460. "Europe/Brussels",
  461. "Europe/Bucharest",
  462. "Europe/Budapest",
  463. "Europe/Chisinau",
  464. "Europe/Copenhagen",
  465. "Europe/Dublin",
  466. "Europe/Gibraltar",
  467. "Europe/Guernsey",
  468. "Europe/Helsinki",
  469. "Europe/Isle_of_Man",
  470. "Europe/Istanbul",
  471. "Europe/Jersey",
  472. "Europe/Kaliningrad",
  473. "Europe/Kiev",
  474. "Europe/Lisbon",
  475. "Europe/Ljubljana",
  476. "Europe/London",
  477. "Europe/Luxembourg",
  478. "Europe/Madrid",
  479. "Europe/Malta",
  480. "Europe/Mariehamn",
  481. "Europe/Minsk",
  482. "Europe/Monaco",
  483. "Europe/Moscow",
  484. "Europe/Oslo",
  485. "Europe/Paris",
  486. "Europe/Podgorica",
  487. "Europe/Prague",
  488. "Europe/Riga",
  489. "Europe/Rome",
  490. "Europe/Samara",
  491. "Europe/San_Marino",
  492. "Europe/Sarajevo",
  493. "Europe/Simferopol",
  494. "Europe/Skopje",
  495. "Europe/Sofia",
  496. "Europe/Stockholm",
  497. "Europe/Tallinn",
  498. "Europe/Tirane",
  499. "Europe/Uzhgorod",
  500. "Europe/Vaduz",
  501. "Europe/Vatican",
  502. "Europe/Vienna",
  503. "Europe/Vilnius",
  504. "Europe/Volgograd",
  505. "Europe/Warsaw",
  506. "Europe/Zagreb",
  507. "Europe/Zaporozhye",
  508. "Europe/Zurich",
  509. "Indian/Antananarivo",
  510. "Indian/Chagos",
  511. "Indian/Christmas",
  512. "Indian/Cocos",
  513. "Indian/Comoro",
  514. "Indian/Kerguelen",
  515. "Indian/Mahe",
  516. "Indian/Maldives",
  517. "Indian/Mauritius",
  518. "Indian/Mayotte",
  519. "Indian/Reunion",
  520. "Pacific/Apia",
  521. "Pacific/Auckland",
  522. "Pacific/Chatham",
  523. "Pacific/Easter",
  524. "Pacific/Efate",
  525. "Pacific/Enderbury",
  526. "Pacific/Fakaofo",
  527. "Pacific/Fiji",
  528. "Pacific/Funafuti",
  529. "Pacific/Galapagos",
  530. "Pacific/Gambier",
  531. "Pacific/Guadalcanal",
  532. "Pacific/Guam",
  533. "Pacific/Honolulu",
  534. "Pacific/Johnston",
  535. "Pacific/Kiritimati",
  536. "Pacific/Kosrae",
  537. "Pacific/Kwajalein",
  538. "Pacific/Majuro",
  539. "Pacific/Marquesas",
  540. "Pacific/Midway",
  541. "Pacific/Nauru",
  542. "Pacific/Niue",
  543. "Pacific/Norfolk",
  544. "Pacific/Noumea",
  545. "Pacific/Pago_Pago",
  546. "Pacific/Palau",
  547. "Pacific/Pitcairn",
  548. "Pacific/Ponape",
  549. "Pacific/Port_Moresby",
  550. "Pacific/Rarotonga",
  551. "Pacific/Saipan",
  552. "Pacific/Tahiti",
  553. "Pacific/Tarawa",
  554. "Pacific/Tongatapu",
  555. "Pacific/Truk",
  556. "Pacific/Wake",
  557. "Pacific/Wallis",
  558. );
  559. reset($aZones);
  560. return $aZones;
  561. }
  562. }