PageRenderTime 110ms CodeModel.GetById 48ms RepoModel.GetById 9ms app.codeStats 0ms

/installer/applicationSetup.php

https://bitbucket.org/wildanm/orangehrm
PHP | 446 lines | 400 code | 24 blank | 22 comment | 17 complexity | 7c117fd7a92b45e4e148d186f6f9fee0 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, AGPL-3.0, BSD-3-Clause, AGPL-1.0, GPL-2.0, LGPL-2.1, LGPL-3.0
  1. <?php
  2. /**
  3. * OrangeHRM is a comprehensive Human Resource Management (HRM) System that captures
  4. * all the essential functionalities required for any enterprise.
  5. * Copyright (C) 2006 OrangeHRM Inc., http://www.orangehrm.com
  6. *
  7. * OrangeHRM is free software; you can redistribute it and/or modify it under the terms of
  8. * the GNU General Public License as published by the Free Software Foundation; either
  9. * version 2 of the License, or (at your option) any later version.
  10. *
  11. * OrangeHRM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  12. * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  13. * See the GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License along with this program;
  16. * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  17. * Boston, MA 02110-1301, USA
  18. *
  19. */
  20. require_once ROOT_PATH.'/lib/common/UniqueIDGenerator.php';
  21. // Installing
  22. function createDB() {
  23. if ($_SESSION['dbCreateMethod'] == 'existing') { // If the user wants to use an existing empty database
  24. $dbName = $_SESSION['dbInfo']['dbName'];
  25. $dbHost = $_SESSION['dbInfo']['dbHostName'];
  26. $dbPort = $_SESSION['dbInfo']['dbHostPort'];
  27. $dbUser = $_SESSION['dbInfo']['dbUserName'];
  28. $dbPassword = $_SESSION['dbInfo']['dbPassword'];
  29. if (mysql_connect($dbHost.':'.$dbPort, $dbUser, $dbPassword)) {
  30. if (mysql_select_db($dbName)) {
  31. $result = mysql_query("SHOW TABLES");
  32. if (mysql_num_rows($result) > 0) {
  33. $_SESSION['error'] = 'Given database is not empty.';
  34. }
  35. } else {
  36. $_SESSION['error'] = 'Cannot connect to the database. '.mysql_error();
  37. }
  38. } else {
  39. $_SESSION['error'] = 'Cannot make a database connection using given details. '.mysql_error();
  40. }
  41. } elseif ($_SESSION['dbCreateMethod'] == 'new') { // If the user wants OrangeHRM to create the database for him
  42. connectDB();
  43. $dbName = '`'.$_SESSION['dbInfo']['dbName'].'`';
  44. mysql_query("CREATE DATABASE " . $dbName);
  45. if(!@mysql_select_db($_SESSION['dbInfo']['dbName'])) {
  46. $mysqlErrNo = mysql_errno();
  47. $errorMsg = mysql_error();
  48. if(!isset($errorMsg) || $errorMsg == '') {
  49. $errorMsg = 'Unable to create Database.';
  50. }
  51. if (isset($mysqlErrNo)) {
  52. if ($mysqlErrNo == '1102') {
  53. $errorMsg .= '. Please use valid name for database.';
  54. }
  55. }
  56. $_SESSION['error'] = $errorMsg.' '.mysql_error();
  57. return;
  58. }
  59. }
  60. }
  61. function connectDB() {
  62. if(!@mysql_connect($_SESSION['dbInfo']['dbHostName'].':'.$_SESSION['dbInfo']['dbHostPort'], $_SESSION['dbInfo']['dbUserName'], $_SESSION['dbInfo']['dbPassword'])) {
  63. $_SESSION['error'] = 'Database Connection Error!';
  64. return;
  65. }
  66. }
  67. /**
  68. * Initialize unique ID's
  69. */
  70. function initUniqueIDs() {
  71. connectDB();
  72. if(!mysql_select_db($_SESSION['dbInfo']['dbName'])) {
  73. $_SESSION['error'] = 'Unable to connect to Database!';
  74. error_log (date("r")." Initializing unique id's. Error - Unable to connect to Database\n",3, "installer/log.txt");
  75. return false;
  76. }
  77. /* Initialize the hs_hr_unique_id table */
  78. try {
  79. UniqueIDGenerator::getInstance()->initTable();
  80. } catch (IDGeneratorException $e) {
  81. $errMsg = $e->getMessage() . ". Trace = " . $e->getTraceAsString();
  82. $_SESSION['error'] = $errMsg;
  83. error_log (date("r")." Initializing hs_hr_unique_id table failed with: $errMsg\n",3, "log.txt");
  84. return false;
  85. }
  86. return true;
  87. }
  88. function fillData($phase=1, $source='/dbscript/dbscript-') {
  89. $source .= $phase.'.sql';
  90. connectDB();
  91. error_log (date("r")." Fill Data Phase $phase - Connected to the DB Server\n",3, "installer/log.txt");
  92. if(!mysql_select_db($_SESSION['dbInfo']['dbName'])) {
  93. $_SESSION['error'] = 'Cannot select the given database! '.mysql_error();
  94. error_log (date("r")." Fill Data Phase $phase - Error - Cannot select the given database\n",3, "installer/log.txt");
  95. return;
  96. }
  97. error_log (date("r")." Fill Data Phase $phase - Selected the DB\n",3, "installer/log.txt");
  98. error_log (date("r")." Fill Data Phase $phase - Reading DB Script\n",3, "installer/log.txt");
  99. $queryFile = ROOT_PATH . $source;
  100. $fp = fopen($queryFile, 'r');
  101. error_log (date("r")." Fill Data Phase $phase - Opened DB Script\n",3, "installer/log.txt");
  102. $query = fread($fp, filesize($queryFile));
  103. fclose($fp);
  104. error_log (date("r")." Fill Data Phase $phase - Read DB script\n",3, "installer/log.txt");
  105. $dbScriptStatements = explode(";", $query);
  106. error_log (date("r")." Fill Data Phase $phase - There are ".count($dbScriptStatements)." Statements in the DB script\n",3, "installer/log.txt");
  107. for($c=0;(count($dbScriptStatements)-1)>$c;$c++)
  108. if(!@mysql_query($dbScriptStatements[$c])) {
  109. $_SESSION['error'] = mysql_error();
  110. $error = mysql_error();
  111. error_log (date("r")." Fill Data Phase $phase - Error Statement # $c \n",3, "installer/log.txt");
  112. error_log (date("r")." ".$dbScriptStatements[$c]."\n",3, "installer/log.txt");
  113. return;
  114. }
  115. if(isset($error))
  116. return;
  117. }
  118. function createDBUser() {
  119. if ($_SESSION['dbCreateMethod'] == 'new') {
  120. connectDB();
  121. if(isset($_SESSION['dbInfo']['dbOHRMUserName'])) {
  122. $dbName = $_SESSION['dbInfo']['dbName'];
  123. $dbOHRMUser = $_SESSION['dbInfo']['dbOHRMUserName'];
  124. $dbOHRMPassword = $_SESSION['dbInfo']['dbOHRMPassword'];
  125. $querryIdentifiedBy = (isset($dbOHRMPassword) && ($dbOHRMPassword !== ''))? "IDENTIFIED BY '$dbOHRMPassword'": '';
  126. $query = <<< USRSQL
  127. GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX
  128. ON `$dbName`.*
  129. TO "$dbOHRMUser"@"localhost"
  130. $querryIdentifiedBy;
  131. USRSQL;
  132. if(!@mysql_query($query)) {
  133. $_SESSION['error'] = mysql_error() or die();
  134. return;
  135. }
  136. $query = <<< USRSQL
  137. set password for "$dbOHRMUser"@"localhost"
  138. = old_password('$dbOHRMPassword');
  139. USRSQL;
  140. if (isset($dbOHRMPassword) && ($dbOHRMPassword !== '')) {
  141. if (!@mysql_query($query)) {
  142. $_SESSION['error'] = mysql_error() or die();
  143. return;
  144. }
  145. }
  146. $dbName = $_SESSION['dbInfo']['dbName'];
  147. $dbOHRMUser = $_SESSION['dbInfo']['dbOHRMUserName'];
  148. $dbOHRMPassword = $_SESSION['dbInfo']['dbOHRMPassword'];
  149. $query = <<< USRSQL
  150. GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX
  151. ON `$dbName`.*
  152. TO "$dbOHRMUser"@"%"
  153. $querryIdentifiedBy;
  154. USRSQL;
  155. if(!@mysql_query($query)) {
  156. $_SESSION['error'] = mysql_error() or die();
  157. return;
  158. }
  159. $query = <<< USRSQL
  160. set password for "$dbOHRMUser"@"%"
  161. = old_password('$dbOHRMPassword');
  162. USRSQL;
  163. if (isset($dbOHRMPassword) && ($dbOHRMPassword !== '')) {
  164. if(!@mysql_query($query)) {
  165. $_SESSION['error'] = mysql_error() or die();
  166. return;
  167. }
  168. }
  169. }
  170. }
  171. }
  172. function createUser() {
  173. connectDB();
  174. if(!@mysql_select_db($_SESSION['dbInfo']['dbName'])) {
  175. $_SESSION['error'] = 'Unable to access OrangeHRM Database!';
  176. return;
  177. }
  178. $query = "INSERT INTO `hs_hr_users` (`id`, `user_name`, `user_password`, `first_name`, `last_name`, `emp_number`, `user_hash`, `is_admin`, `receive_notification`, `description`, `modified_user_id`, `created_by`, `title`, `department`, `phone_home`, `phone_mobile`, `phone_work`, `phone_other`, `phone_fax`, `email1`, `email2`, `status`, `address_street`, `address_city`, `address_state`, `address_country`, `address_postalcode`, `user_preferences`, `deleted`, `employee_status`, `userg_id`) VALUES ('USR001','" .$_SESSION['defUser']['AdminUserName']. "','".md5($_SESSION['defUser']['AdminPassword'])."','Admin','',null,'','Yes','1','',null,null,'','','','','','','','','','Enabled','','','','','','',0,'','USG001')";
  179. if(!mysql_query($query)) {
  180. $_SESSION['error'] = 'Unable to Create OrangeHRM Admin User Account';
  181. return;
  182. }
  183. }
  184. function writeConfFile() {
  185. $dbHost = $_SESSION['dbInfo']['dbHostName'];
  186. $dbHostPort = $_SESSION['dbInfo']['dbHostPort'];
  187. $dbName = $_SESSION['dbInfo']['dbName'];
  188. if(isset($_SESSION['dbInfo']['dbOHRMUserName'])) {
  189. $dbOHRMUser = $_SESSION['dbInfo']['dbOHRMUserName'];
  190. $dbOHRMPassword = $_SESSION['dbInfo']['dbOHRMPassword'];
  191. } else {
  192. $dbOHRMUser = $_SESSION['dbInfo']['dbUserName'];
  193. $dbOHRMPassword = $_SESSION['dbInfo']['dbPassword'];
  194. }
  195. $confContent = <<< CONFCONT
  196. <?php
  197. class Conf {
  198. var \$smtphost;
  199. var \$dbhost;
  200. var \$dbport;
  201. var \$dbname;
  202. var \$dbuser;
  203. var \$version;
  204. function Conf() {
  205. \$this->dbhost = '$dbHost';
  206. \$this->dbport = '$dbHostPort';
  207. if(defined('ENVIRNOMENT') && ENVIRNOMENT == 'test'){
  208. \$this->dbname = 'test_$dbName';
  209. }else {
  210. \$this->dbname = '$dbName';
  211. }
  212. \$this->dbuser = '$dbOHRMUser';
  213. \$this->dbpass = '$dbOHRMPassword';
  214. \$this->version = '2.6-beta.5';
  215. \$this->emailConfiguration = dirname(__FILE__).'/mailConf.php';
  216. \$this->errorLog = realpath(dirname(__FILE__).'/../logs/').'/';
  217. }
  218. }
  219. ?>
  220. CONFCONT;
  221. $filename = ROOT_PATH . '/lib/confs/Conf.php';
  222. $handle = fopen($filename, 'w');
  223. fwrite($handle, $confContent);
  224. fclose($handle);
  225. }
  226. function writeSymfonyDbConfigFile() {
  227. $dbHost = $_SESSION['dbInfo']['dbHostName'];
  228. $dbHostPort = $_SESSION['dbInfo']['dbHostPort'];
  229. $dbName = $_SESSION['dbInfo']['dbName'];
  230. if(isset($_SESSION['dbInfo']['dbOHRMUserName'])) {
  231. $dbOHRMUser = $_SESSION['dbInfo']['dbOHRMUserName'];
  232. $dbOHRMPassword = $_SESSION['dbInfo']['dbOHRMPassword'];
  233. } else {
  234. $dbOHRMUser = $_SESSION['dbInfo']['dbUserName'];
  235. $dbOHRMPassword = $_SESSION['dbInfo']['dbPassword'];
  236. }
  237. $confContent = <<< CONFCONT
  238. all:
  239. doctrine:
  240. class: sfDoctrineDatabase
  241. param:
  242. dsn: 'mysql:host=$dbHost;dbname=$dbName'
  243. username: $dbOHRMUser
  244. password: $dbOHRMPassword
  245. port: $dbHostPort
  246. attributes: { export: tables }
  247. test:
  248. doctrine:
  249. class: sfDoctrineDatabase
  250. param:
  251. dsn: 'mysql:host=$dbHost;dbname=test_$dbName'
  252. username: $dbOHRMUser
  253. password: $dbOHRMPassword
  254. port: $dbHostPort
  255. CONFCONT;
  256. $filename = ROOT_PATH . '/symfony/config/databases.yml';
  257. $handle = fopen($filename, 'w');
  258. fwrite($handle, $confContent);
  259. fclose($handle);
  260. }
  261. function writeLog() {
  262. $Content = "Client Info\n\n";
  263. $Content .= "User Agent : ".$_SERVER['HTTP_USER_AGENT']."\n";
  264. $Content .= "Remote Address : ".$_SERVER['REMOTE_ADDR']."\n\n";
  265. $Content .= "Server Info\n\n";
  266. $Content .= "Host : ".$_SERVER['HTTP_HOST']."\n";
  267. $Content .= "PHP Version : ".constant('PHP_VERSION')."\n";
  268. $Content .= "Server : ".$_SERVER['SERVER_SOFTWARE']."\n";
  269. $Content .= "Admin : ".$_SERVER['SERVER_ADMIN']."\n\n";
  270. $Content .= "Document Root : ".$_SERVER['DOCUMENT_ROOT']."\n";
  271. $Content .= "ROOT_PATH : ".ROOT_PATH."\n\n";
  272. $Content .= "OrangeHRM Installation Log\n\n";
  273. $filename = 'installer/log.txt';
  274. $handle = fopen($filename, 'w');
  275. fwrite($handle, $Content);
  276. fclose($handle);
  277. }
  278. if (isset($_SESSION['INSTALLING'])) {
  279. switch ($_SESSION['INSTALLING']) {
  280. case 0 : writeLog();
  281. error_log (date("r")." DB Creation - Starting\n",3, "installer/log.txt");
  282. createDB();
  283. error_log (date("r")." DB Creation - Done\n",3, "installer/log.txt");
  284. if (!isset($error) || !isset($_SESSION['error'])) {
  285. $_SESSION['INSTALLING'] = 1;
  286. error_log (date("r")." DB Creation - No Errors\n",3, "installer/log.txt");
  287. } else {
  288. error_log (date("r")." DB Creation - Errors\n",3, "installer/log.txt");
  289. error_log (date("r")." ".(isset($error)? $error: $_SESSION['error'])."\n",3, "installer/log.txt");
  290. }
  291. break;
  292. case 1 : error_log (date("r")." Fill Data Phase 1 - Starting\n",3, "installer/log.txt");
  293. fillData();
  294. error_log (date("r")." Fill Data Phase 1 - Done\n",3, "installer/log.txt");
  295. if (!isset($error) || !isset($_SESSION['error'])) {
  296. $_SESSION['INSTALLING'] = 2;
  297. error_log (date("r")." Fill Data Phase 1 - No Errors\n",3, "installer/log.txt");
  298. } else {
  299. error_log (date("r")." Fill Data Phase 1 - Errors\n",3, "installer/log.txt");
  300. error_log (date("r")." ".(isset($error)? $error: $_SESSION['error'])."\n",3, "installer/log.txt");
  301. }
  302. break;
  303. case 2 : error_log (date("r")." Fill Data Phase 2 - Starting\n",3, "installer/log.txt");
  304. fillData(2);
  305. error_log (date("r")." Fill Data Phase 2 - Done\n",3, "installer/log.txt");
  306. if (!isset($error) || !isset($_SESSION['error'])) {
  307. $res = initUniqueIDs();
  308. if ($res) {
  309. $_SESSION['INSTALLING'] = 3;
  310. error_log (date("r")." Fill Data Phase 2 - No Errors\n",3, "installer/log.txt");
  311. }
  312. } else {
  313. error_log (date("r")." Fill Data Phase 2 - Errors\n",3, "installer/log.txt");
  314. error_log (date("r")." ".(isset($error)? $error: $_SESSION['error'])."\n",3, "installer/log.txt");
  315. }
  316. break;
  317. case 3 : error_log (date("r")." Create DB user - Starting\n",3, "installer/log.txt");
  318. createDBUser();
  319. error_log (date("r")." Create DB user - Done\n",3, "installer/log.txt");
  320. if (!isset($error) || !isset($_SESSION['error'])) {
  321. $_SESSION['INSTALLING'] = 4;
  322. error_log (date("r")." Create DB user - No Errors\n",3, "installer/log.txt");
  323. } else {
  324. error_log (date("r")." Create DB user - Errors\n",3, "installer/log.txt");
  325. error_log (date("r")." ".(isset($error)? $error: $_SESSION['error'])."\n",3, "installer/log.txt");
  326. }
  327. break;
  328. case 4 : error_log (date("r")." Create OrangeHRM user - Starting\n",3, "installer/log.txt");
  329. createUser();
  330. error_log (date("r")." Create OrangeHRM user - Done\n",3, "installer/log.txt");
  331. if (!isset($error) || !isset($_SESSION['error'])) {
  332. $_SESSION['INSTALLING'] = 5;
  333. error_log (date("r")." Create OrangeHRM user - No Errors\n",3, "installer/log.txt");
  334. } else {
  335. error_log (date("r")." Create OrangeHRM user - Errors\n",3, "installer/log.txt");
  336. error_log (date("r")." ".(isset($error)? $error: $_SESSION['error'])."\n",3, "installer/log.txt");
  337. }
  338. break;
  339. case 5 : error_log (date("r")." Write Conf - Starting\n",3, "installer/log.txt");
  340. writeConfFile();
  341. writeSymfonyDbConfigFile();
  342. error_log (date("r")." Write Conf - Done\n",3, "installer/log.txt");
  343. if (!isset($error) || !isset($_SESSION['error'])) {
  344. $_SESSION['INSTALLING'] = 6;
  345. error_log (date("r")." Write Conf - No Errors\n",3, "installer/log.txt");
  346. } else {
  347. error_log (date("r")." Write Conf - Errors\n",3, "installer/log.txt");
  348. error_log (date("r")." ".(isset($error)? $error: $_SESSION['error'])."\n",3, "installer/log.txt");
  349. }
  350. break;
  351. }
  352. }
  353. ?>