step1.php 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040
  1. <?php
  2. /* Copyright (C) 2004-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  3. * Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
  4. * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
  5. * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
  6. * Copyright (C) 2005-2011 Regis Houssin <regis.houssin@inodbox.com>
  7. * Copyright (C) 2015-2016 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
  8. *
  9. * This program is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License as published by
  11. * the Free Software Foundation; either version 3 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  21. */
  22. /**
  23. * \file htdocs/install/step1.php
  24. * \ingroup install
  25. * \brief Build conf file on disk
  26. */
  27. define('DONOTLOADCONF',1); // To avoid loading conf by file inc.php
  28. include 'inc.php';
  29. global $langs;
  30. $action=GETPOST('action','aZ09')?GETPOST('action','aZ09'):(empty($argv[1])?'':$argv[1]);
  31. $setuplang=GETPOST('selectlang','aZ09',3)?GETPOST('selectlang','aZ09',3):(empty($argv[2])?'auto':$argv[2]);
  32. $langs->setDefaultLang($setuplang);
  33. $langs->loadLangs(array("admin", "install", "errors"));
  34. // Dolibarr pages directory
  35. $main_dir = GETPOST('main_dir')?GETPOST('main_dir'):(empty($argv[3])?'':$argv[3]);
  36. // Directory for generated documents (invoices, orders, ecm, etc...)
  37. $main_data_dir = GETPOST('main_data_dir') ? GETPOST('main_data_dir') : (empty($argv[4])? ($main_dir . '/documents') :$argv[4]);
  38. // Dolibarr root URL
  39. $main_url = GETPOST('main_url')?GETPOST('main_url'):(empty($argv[5])?'':$argv[5]);
  40. // Database login information
  41. $userroot=GETPOST('db_user_root','alpha')?GETPOST('db_user_root','alpha'):(empty($argv[6])?'':$argv[6]);
  42. $passroot=GETPOST('db_pass_root','none')?GETPOST('db_pass_root','none'):(empty($argv[7])?'':$argv[7]);
  43. // Database server
  44. $db_type=GETPOST('db_type','aZ09')?GETPOST('db_type','aZ09'):(empty($argv[8])?'':$argv[8]);
  45. $db_host=GETPOST('db_host','alpha')?GETPOST('db_host','alpha'):(empty($argv[9])?'':$argv[9]);
  46. $db_name=GETPOST('db_name','aZ09')?GETPOST('db_name','aZ09'):(empty($argv[10])?'':$argv[10]);
  47. $db_user=GETPOST('db_user','alpha')?GETPOST('db_user','alpha'):(empty($argv[11])?'':$argv[11]);
  48. $db_pass=GETPOST('db_pass','none')?GETPOST('db_pass','none'):(empty($argv[12])?'':$argv[12]);
  49. $db_port=GETPOST('db_port','int')?GETPOST('db_port','int'):(empty($argv[13])?'':$argv[13]);
  50. $db_prefix=GETPOST('db_prefix','aZ09')?GETPOST('db_prefix','aZ09'):(empty($argv[14])?'':$argv[14]);
  51. $db_create_database = GETPOST('db_create_database','none')?GETPOST('db_create_database','none'):(empty($argv[15])?'':$argv[15]);
  52. $db_create_user = GETPOST('db_create_user','none')?GETPOST('db_create_user','none'):(empty($argv[16])?'':$argv[16]);
  53. // Force https
  54. $main_force_https = ((GETPOST("main_force_https",'alpha') && (GETPOST("main_force_https",'alpha') == "on" || GETPOST("main_force_https",'alpha') == 1)) ? '1' : '0');
  55. // Use alternative directory
  56. $main_use_alt_dir = ((GETPOST("main_use_alt_dir",'alpha') == '' || (GETPOST("main_use_alt_dir",'alpha') == "on" || GETPOST("main_use_alt_dir",'alpha') == 1)) ? '' : '//');
  57. // Alternative root directory name
  58. $main_alt_dir_name = ((GETPOST("main_alt_dir_name",'alpha') && GETPOST("main_alt_dir_name",'alpha') != '') ? GETPOST("main_alt_dir_name",'alpha') : 'custom');
  59. session_start(); // To be able to keep info into session (used for not losing password during navigation. The password must not transit through parameters)
  60. // Save a flag to tell to restore input value if we go back
  61. $_SESSION['dol_save_pass']=$db_pass;
  62. //$_SESSION['dol_save_passroot']=$passroot;
  63. // Now we load forced values from install.forced.php file.
  64. $useforcedwizard=false;
  65. $forcedfile="./install.forced.php";
  66. if ($conffile == "/etc/dolibarr/conf.php") $forcedfile="/etc/dolibarr/install.forced.php";
  67. if (@file_exists($forcedfile)) {
  68. $useforcedwizard = true;
  69. include_once $forcedfile;
  70. // If forced install is enabled, replace the post values. These are empty because form fields are disabled.
  71. if ($force_install_noedit) {
  72. $main_dir = detect_dolibarr_main_document_root();
  73. if (!empty($force_install_main_data_root)) {
  74. $main_data_dir = $force_install_main_data_root;
  75. } else {
  76. $main_data_dir = detect_dolibarr_main_data_root($main_dir);
  77. }
  78. $main_url = detect_dolibarr_main_url_root();
  79. if (!empty($force_install_databaserootlogin)) {
  80. $userroot = parse_database_login($force_install_databaserootlogin);
  81. }
  82. if (!empty($force_install_databaserootpass)) {
  83. $passroot = parse_database_pass($force_install_databaserootpass);
  84. }
  85. }
  86. if ($force_install_noedit == 2) {
  87. if (!empty($force_install_type)) {
  88. $db_type = $force_install_type;
  89. }
  90. if (!empty($force_install_dbserver)) {
  91. $db_host = $force_install_dbserver;
  92. }
  93. if (!empty($force_install_database)) {
  94. $db_name = $force_install_database;
  95. }
  96. if (!empty($force_install_databaselogin)) {
  97. $db_user = $force_install_databaselogin;
  98. }
  99. if (!empty($force_install_databasepass)) {
  100. $db_pass = $force_install_databasepass;
  101. }
  102. if (!empty($force_install_port)) {
  103. $db_port = $force_install_port;
  104. }
  105. if (!empty($force_install_prefix)) {
  106. $db_prefix = $force_install_prefix;
  107. }
  108. if (!empty($force_install_createdatabase)) {
  109. $db_create_database = $force_install_createdatabase;
  110. }
  111. if (!empty($force_install_createuser)) {
  112. $db_create_user = $force_install_createuser;
  113. }
  114. if (!empty($force_install_mainforcehttps)) {
  115. $main_force_https = $force_install_mainforcehttps;
  116. }
  117. }
  118. }
  119. $error = 0;
  120. /*
  121. * View
  122. */
  123. dolibarr_install_syslog("--- step1: entering step1.php page");
  124. pHeader($langs->trans("ConfigurationFile"),"step2");
  125. // Test if we can run a first install process
  126. if (! is_writable($conffile))
  127. {
  128. print $langs->trans("ConfFileIsNotWritable",$conffiletoshow);
  129. pFooter(1,$setuplang,'jscheckparam');
  130. exit;
  131. }
  132. // Check parameters
  133. $is_sqlite = false;
  134. if (empty($db_type))
  135. {
  136. print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("DatabaseType")).'</div>';
  137. $error++;
  138. } else {
  139. $is_sqlite = ($db_type === 'sqlite' || $db_type === 'sqlite3' );
  140. }
  141. if (empty($db_host) && ! $is_sqlite)
  142. {
  143. print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Server")).'</div>';
  144. $error++;
  145. }
  146. if (empty($db_name))
  147. {
  148. print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("DatabaseName")).'</div>';
  149. $error++;
  150. }
  151. if (empty($db_user) && ! $is_sqlite)
  152. {
  153. print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Login")).'</div>';
  154. $error++;
  155. }
  156. if (! empty($db_port) && ! is_numeric($db_port))
  157. {
  158. print '<div class="error">'.$langs->trans("ErrorBadValueForParameter",$db_port,$langs->transnoentities("Port")).'</div>';
  159. $error++;
  160. }
  161. if (! empty($db_prefix) && ! preg_match('/^[a-z0-9]+_$/i', $db_prefix))
  162. {
  163. print '<div class="error">'.$langs->trans("ErrorBadValueForParameter",$db_prefix,$langs->transnoentities("DatabasePrefix")).'</div>';
  164. $error++;
  165. }
  166. // Remove last / into dans main_dir
  167. if (substr($main_dir, dol_strlen($main_dir) -1) == "/")
  168. {
  169. $main_dir = substr($main_dir, 0, dol_strlen($main_dir)-1);
  170. }
  171. // Remove last / into dans main_url
  172. if (! empty($main_url) && substr($main_url, dol_strlen($main_url) -1) == "/")
  173. {
  174. $main_url = substr($main_url, 0, dol_strlen($main_url)-1);
  175. }
  176. // Test database connection
  177. if (! $error) {
  178. $result=@include_once $main_dir."/core/db/".$db_type.'.class.php';
  179. if ($result)
  180. {
  181. // If we require database or user creation we need to connect as root, so we need root login credentials
  182. if (!empty($db_create_database) && !$userroot) {
  183. print '<div class="error">'.$langs->trans("YouAskDatabaseCreationSoDolibarrNeedToConnect",$db_name).'</div>';
  184. print '<br>';
  185. print $langs->trans("BecauseConnectionFailedParametersMayBeWrong").'<br><br>';
  186. print $langs->trans("ErrorGoBackAndCorrectParameters");
  187. $error++;
  188. }
  189. if (!empty($db_create_user) && !$userroot) {
  190. print '<div class="error">'.$langs->trans("YouAskLoginCreationSoDolibarrNeedToConnect",$db_user).'</div>';
  191. print '<br>';
  192. print $langs->trans("BecauseConnectionFailedParametersMayBeWrong").'<br><br>';
  193. print $langs->trans("ErrorGoBackAndCorrectParameters");
  194. $error++;
  195. }
  196. // If we need root access
  197. if (!$error && (!empty($db_create_database) || !empty($db_create_user))) {
  198. $databasefortest=$db_name;
  199. if (!empty($db_create_database)) {
  200. if ($db_type == 'mysql' || $db_type == 'mysqli')
  201. {
  202. $databasefortest='mysql';
  203. }
  204. elseif ($db_type == 'pgsql')
  205. {
  206. $databasefortest='postgres';
  207. }
  208. else
  209. {
  210. $databasefortest='master';
  211. }
  212. }
  213. //print $_POST["db_type"].",".$_POST["db_host"].",$userroot,$passroot,$databasefortest,".$_POST["db_port"];
  214. $db=getDoliDBInstance($db_type, $db_host, $userroot, $passroot, $databasefortest, $db_port);
  215. dol_syslog("databasefortest=" . $databasefortest . " connected=" . $db->connected . " database_selected=" . $db->database_selected, LOG_DEBUG);
  216. //print "databasefortest=".$databasefortest." connected=".$db->connected." database_selected=".$db->database_selected;
  217. if (empty($db_create_database) && $db->connected && !$db->database_selected) {
  218. print '<div class="error">'.$langs->trans("ErrorConnectedButDatabaseNotFound",$db_name).'</div>';
  219. print '<br>';
  220. if (! $db->connected) print $langs->trans("IfDatabaseNotExistsGoBackAndUncheckCreate").'<br><br>';
  221. print $langs->trans("ErrorGoBackAndCorrectParameters");
  222. $error++;
  223. } elseif ($db->error && ! (! empty($db_create_database) && $db->connected)) {
  224. // Note: you may experience error here with message "No such file or directory" when mysql was installed for the first time but not yet launched.
  225. if ($db->error == "No such file or directory") print '<div class="error">'.$langs->trans("ErrorToConnectToMysqlCheckInstance").'</div>';
  226. else print '<div class="error">'.$db->error.'</div>';
  227. if (! $db->connected) print $langs->trans("BecauseConnectionFailedParametersMayBeWrong").'<br><br>';
  228. //print '<a href="#" onClick="javascript: history.back();">';
  229. print $langs->trans("ErrorGoBackAndCorrectParameters");
  230. //print '</a>';
  231. $error++;
  232. }
  233. }
  234. // If we need simple access
  235. if (!$error && (empty($db_create_database) && empty($db_create_user))) {
  236. $db=getDoliDBInstance($db_type, $db_host, $db_user, $db_pass, $db_name, $db_port);
  237. if ($db->error)
  238. {
  239. print '<div class="error">'.$db->error.'</div>';
  240. if (! $db->connected) print $langs->trans("BecauseConnectionFailedParametersMayBeWrong").'<br><br>';
  241. //print '<a href="#" onClick="javascript: history.back();">';
  242. print $langs->trans("ErrorGoBackAndCorrectParameters");
  243. //print '</a>';
  244. $error++;
  245. }
  246. }
  247. }
  248. else
  249. {
  250. print "<br>\nFailed to include_once(\"".$main_dir."/core/db/".$db_type.".class.php\")<br>\n";
  251. print '<div class="error">'.$langs->trans("ErrorWrongValueForParameter",$langs->transnoentities("WebPagesDirectory")).'</div>';
  252. //print '<a href="#" onClick="javascript: history.back();">';
  253. print $langs->trans("ErrorGoBackAndCorrectParameters");
  254. //print '</a>';
  255. $error++;
  256. }
  257. }
  258. else
  259. {
  260. if (isset($db)) print $db->lasterror();
  261. if (isset($db) && ! $db->connected) print '<br>'.$langs->trans("BecauseConnectionFailedParametersMayBeWrong").'<br><br>';
  262. print $langs->trans("ErrorGoBackAndCorrectParameters");
  263. $error++;
  264. }
  265. if (! $error && $db->connected)
  266. {
  267. if (! empty($db_create_database)) {
  268. $result=$db->select_db($db_name);
  269. if ($result)
  270. {
  271. print '<div class="error">'.$langs->trans("ErrorDatabaseAlreadyExists", $db_name).'</div>';
  272. print $langs->trans("IfDatabaseExistsGoBackAndCheckCreate").'<br><br>';
  273. print $langs->trans("ErrorGoBackAndCorrectParameters");
  274. $error++;
  275. }
  276. }
  277. }
  278. // Define $defaultCharacterSet and $defaultDBSortingCollation
  279. if (! $error && $db->connected)
  280. {
  281. if (!empty($db_create_database)) // If we create database, we force default value
  282. {
  283. // Default values come from the database handler
  284. $defaultCharacterSet=$db->forcecharset;
  285. $defaultDBSortingCollation=$db->forcecollate;
  286. }
  287. else // If already created, we take current value
  288. {
  289. $defaultCharacterSet=$db->getDefaultCharacterSetDatabase();
  290. $defaultDBSortingCollation=$db->getDefaultCollationDatabase();
  291. }
  292. // Force to avoid utf8mb4 because index on field char 255 reach limit of 767 char for indexes (example with mysql 5.6.34 = mariadb 10.0.29)
  293. // TODO Remove this when utf8mb4 is supported
  294. if ($defaultCharacterSet == 'utf8mb4' || $defaultDBSortingCollation == 'utf8mb4_unicode_ci')
  295. {
  296. $defaultCharacterSet = 'utf8';
  297. $defaultDBSortingCollation = 'utf8_unicode_ci';
  298. }
  299. print '<input type="hidden" name="dolibarr_main_db_character_set" value="'.$defaultCharacterSet.'">';
  300. print '<input type="hidden" name="dolibarr_main_db_collation" value="'.$defaultDBSortingCollation.'">';
  301. $db_character_set=$defaultCharacterSet;
  302. $db_collation=$defaultDBSortingCollation;
  303. dolibarr_install_syslog("step1: db_character_set=" . $db_character_set . " db_collation=" . $db_collation);
  304. }
  305. // Create config file
  306. if (! $error && $db->connected && $action == "set")
  307. {
  308. umask(0);
  309. if (is_array($_POST))
  310. {
  311. foreach($_POST as $key => $value)
  312. {
  313. if (! preg_match('/^db_pass/i', $key)) {
  314. dolibarr_install_syslog("step1: choice for " . $key . " = " . $value);
  315. }
  316. }
  317. }
  318. // Show title of step
  319. print '<h3><img class="valigntextbottom" src="../theme/common/octicons/build/svg/gear.svg" width="20" alt="Configuration"> '.$langs->trans("ConfigurationFile").'</h3>';
  320. print '<table cellspacing="0" width="100%" cellpadding="1" border="0">';
  321. // Check parameter main_dir
  322. if (! $error)
  323. {
  324. if (! is_dir($main_dir))
  325. {
  326. dolibarr_install_syslog("step1: directory '" . $main_dir . "' is unavailable or can't be accessed");
  327. print "<tr><td>";
  328. print $langs->trans("ErrorDirDoesNotExists",$main_dir).'<br>';
  329. print $langs->trans("ErrorWrongValueForParameter",$langs->trans("WebPagesDirectory")).'<br>';
  330. print $langs->trans("ErrorGoBackAndCorrectParameters").'<br><br>';
  331. print '</td><td>';
  332. print $langs->trans("Error");
  333. print "</td></tr>";
  334. $error++;
  335. }
  336. }
  337. if (! $error)
  338. {
  339. dolibarr_install_syslog("step1: directory '" . $main_dir . "' exists");
  340. }
  341. // Create subdirectory main_data_dir
  342. if (! $error)
  343. {
  344. // Create directory for documents
  345. if (! is_dir($main_data_dir))
  346. {
  347. dol_mkdir($main_data_dir);
  348. }
  349. if (! is_dir($main_data_dir))
  350. {
  351. print "<tr><td>".$langs->trans("ErrorDirDoesNotExists",$main_data_dir);
  352. print ' '.$langs->trans("YouMustCreateItAndAllowServerToWrite");
  353. print '</td><td>';
  354. print '<span class="error">'.$langs->trans("Error").'</span>';
  355. print "</td></tr>";
  356. print '<tr><td colspan="2"><br>'.$langs->trans("CorrectProblemAndReloadPage",$_SERVER['PHP_SELF'].'?testget=ok').'</td></tr>';
  357. $error++;
  358. }
  359. else
  360. {
  361. // Create .htaccess file in document directory
  362. $pathhtaccess=$main_data_dir.'/.htaccess';
  363. if (! file_exists($pathhtaccess))
  364. {
  365. dolibarr_install_syslog("step1: .htaccess file did not exist, we created it in '" . $main_data_dir . "'");
  366. $handlehtaccess=@fopen($pathhtaccess,'w');
  367. if ($handlehtaccess)
  368. {
  369. fwrite($handlehtaccess,'Order allow,deny'."\n");
  370. fwrite($handlehtaccess,'Deny from all'."\n");
  371. fclose($handlehtaccess);
  372. dolibarr_install_syslog("step1: .htaccess file created");
  373. }
  374. }
  375. // Documents are stored above the web pages root to prevent being downloaded without authentification
  376. $dir=array();
  377. $dir[] = $main_data_dir."/mycompany";
  378. $dir[] = $main_data_dir."/medias";
  379. $dir[] = $main_data_dir."/users";
  380. $dir[] = $main_data_dir."/facture";
  381. $dir[] = $main_data_dir."/propale";
  382. $dir[] = $main_data_dir."/ficheinter";
  383. $dir[] = $main_data_dir."/produit";
  384. $dir[] = $main_data_dir."/doctemplates";
  385. // Loop on each directory of dir [] to create them if they do not exist
  386. $num=count($dir);
  387. for ($i = 0; $i < $num; $i++)
  388. {
  389. if (is_dir($dir[$i]))
  390. {
  391. dolibarr_install_syslog("step1: directory '" . $dir[$i] . "' exists");
  392. }
  393. else
  394. {
  395. if (dol_mkdir($dir[$i]) < 0)
  396. {
  397. print "<tr><td>";
  398. print "Failed to create directory: ".$dir[$i];
  399. print '</td><td>';
  400. print $langs->trans("Error");
  401. print "</td></tr>";
  402. $error++;
  403. }
  404. else
  405. {
  406. dolibarr_install_syslog("step1: directory '" . $dir[$i] . "' created");
  407. }
  408. }
  409. }
  410. require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
  411. // Copy directory medias
  412. $srcroot=$main_dir.'/install/medias';
  413. $destroot=$main_data_dir.'/medias';
  414. dolCopyDir($srcroot, $destroot, 0, 0);
  415. if ($error)
  416. {
  417. print "<tr><td>".$langs->trans("ErrorDirDoesNotExists",$main_data_dir);
  418. print ' '.$langs->trans("YouMustCreateItAndAllowServerToWrite");
  419. print '</td><td>';
  420. print '<span class="error">'.$langs->trans("Error").'</span>';
  421. print "</td></tr>";
  422. print '<tr><td colspan="2"><br>'.$langs->trans("CorrectProblemAndReloadPage",$_SERVER['PHP_SELF'].'?testget=ok').'</td></tr>';
  423. }
  424. else
  425. {
  426. //ODT templates
  427. $srcroot=$main_dir.'/install/doctemplates';
  428. $destroot=$main_data_dir.'/doctemplates';
  429. $docs=array(
  430. 'contracts' => 'contract',
  431. 'invoices' => 'invoice',
  432. 'orders' => 'order',
  433. 'products' => 'product',
  434. 'projects' => 'project',
  435. 'proposals' => 'proposal',
  436. 'shipments' => 'shipment',
  437. 'supplier_proposals' => 'supplier_proposal',
  438. 'tasks' => 'task_summary',
  439. 'thirdparties' => 'thirdparty',
  440. 'usergroups' => 'usergroups',
  441. 'users' => 'user',
  442. );
  443. foreach($docs as $cursordir => $cursorfile)
  444. {
  445. $src=$srcroot.'/'.$cursordir.'/template_'.$cursorfile.'.odt';
  446. $dirodt=$destroot.'/'.$cursordir;
  447. $dest=$dirodt.'/template_'.$cursorfile.'.odt';
  448. dol_mkdir($dirodt);
  449. $result=dol_copy($src,$dest,0,0);
  450. if ($result < 0)
  451. {
  452. print '<tr><td colspan="2"><br>'.$langs->trans('ErrorFailToCopyFile',$src,$dest).'</td></tr>';
  453. }
  454. }
  455. }
  456. }
  457. }
  458. // Table prefix
  459. $main_db_prefix = (! empty($db_prefix) ? $db_prefix : 'llx_');
  460. // Write conf file on disk
  461. if (! $error)
  462. {
  463. // Save old conf file on disk
  464. if (file_exists("$conffile"))
  465. {
  466. // We must ignore errors as an existing old file may already exist and not be replaceable or
  467. // the installer (like for ubuntu) may not have permission to create another file than conf.php.
  468. // Also no other process must be able to read file or we expose the new file, so content with password.
  469. @dol_copy($conffile, $conffile.'.old', '0400');
  470. }
  471. $error+=write_conf_file($conffile);
  472. }
  473. // Create database and admin user database
  474. if (! $error)
  475. {
  476. // We reload configuration file
  477. conf($dolibarr_main_document_root);
  478. print '<tr><td>';
  479. print $langs->trans("ConfFileReload");
  480. print '</td>';
  481. print '<td><img src="../theme/eldy/img/tick.png" alt="Ok"></td></tr>';
  482. // Create database user if requested
  483. if (isset($db_create_user) && ($db_create_user == "1" || $db_create_user == "on")) {
  484. dolibarr_install_syslog("step1: create database user: " . $dolibarr_main_db_user);
  485. //print $conf->db->host." , ".$conf->db->name." , ".$conf->db->user." , ".$conf->db->port;
  486. $databasefortest=$conf->db->name;
  487. if ($conf->db->type == 'mysql' || $conf->db->type == 'mysqli')
  488. {
  489. $databasefortest='mysql';
  490. }
  491. else if ($conf->db->type == 'pgsql')
  492. {
  493. $databasefortest='postgres';
  494. }
  495. else if ($conf->db->type == 'mssql')
  496. {
  497. $databasefortest='master';
  498. }
  499. // Check database connection
  500. $db=getDoliDBInstance($conf->db->type,$conf->db->host,$userroot,$passroot,$databasefortest,$conf->db->port);
  501. if ($db->error)
  502. {
  503. print '<div class="error">'.$db->error.'</div>';
  504. $error++;
  505. }
  506. if (! $error)
  507. {
  508. if ($db->connected)
  509. {
  510. $resultbis = 1;
  511. // Create user
  512. $result=$db->DDLCreateUser($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
  513. // Create user bis
  514. if ($databasefortest == 'mysql')
  515. {
  516. if (! in_array($dolibarr_main_db_host, array('127.0.0.1', '::1', 'localhost', 'localhost.local')))
  517. {
  518. $resultbis=$db->DDLCreateUser('%', $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
  519. }
  520. }
  521. if ($result > 0 && $resultbis > 0)
  522. {
  523. print '<tr><td>';
  524. print $langs->trans("UserCreation").' : ';
  525. print $dolibarr_main_db_user;
  526. print '</td>';
  527. print '<td><img src="../theme/eldy/img/tick.png" alt="Ok"></td></tr>';
  528. }
  529. else
  530. {
  531. if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS'
  532. || $db->errno() == 'DB_ERROR_KEY_NAME_ALREADY_EXISTS'
  533. || $db->errno() == 'DB_ERROR_USER_ALREADY_EXISTS')
  534. {
  535. dolibarr_install_syslog("step1: user already exists");
  536. print '<tr><td>';
  537. print $langs->trans("UserCreation").' : ';
  538. print $dolibarr_main_db_user;
  539. print '</td>';
  540. print '<td>'.$langs->trans("LoginAlreadyExists").'</td></tr>';
  541. }
  542. else
  543. {
  544. dolibarr_install_syslog("step1: failed to create user", LOG_ERR);
  545. print '<tr><td>';
  546. print $langs->trans("UserCreation").' : ';
  547. print $dolibarr_main_db_user;
  548. print '</td>';
  549. print '<td>'.$langs->trans("Error").': '.$db->errno().' '.$db->error()."</td></tr>";
  550. }
  551. }
  552. $db->close();
  553. }
  554. else
  555. {
  556. print '<tr><td>';
  557. print $langs->trans("UserCreation").' : ';
  558. print $dolibarr_main_db_user;
  559. print '</td>';
  560. print '<td><img src="../theme/eldy/img/error.png" alt="Error"></td>';
  561. print '</tr>';
  562. // warning message due to connection failure
  563. print '<tr><td colspan="2"><br>';
  564. print $langs->trans("YouAskDatabaseCreationSoDolibarrNeedToConnect",$dolibarr_main_db_user,$dolibarr_main_db_host,$userroot);
  565. print '<br>';
  566. print $langs->trans("BecauseConnectionFailedParametersMayBeWrong").'<br><br>';
  567. print $langs->trans("ErrorGoBackAndCorrectParameters").'<br><br>';
  568. print '</td></tr>';
  569. $error++;
  570. }
  571. }
  572. } // end of user account creation
  573. // If database creation was asked, we create it
  574. if (!$error && (isset($db_create_database) && ($db_create_database == "1" || $db_create_database == "on"))) {
  575. dolibarr_install_syslog("step1: create database: " . $dolibarr_main_db_name . " " . $dolibarr_main_db_character_set . " " . $dolibarr_main_db_collation . " " . $dolibarr_main_db_user);
  576. $newdb=getDoliDBInstance($conf->db->type,$conf->db->host,$userroot,$passroot,'',$conf->db->port);
  577. //print 'eee'.$conf->db->type." ".$conf->db->host." ".$userroot." ".$passroot." ".$conf->db->port." ".$newdb->connected." ".$newdb->forcecharset;exit;
  578. if ($newdb->connected)
  579. {
  580. $result=$newdb->DDLCreateDb($dolibarr_main_db_name, $dolibarr_main_db_character_set, $dolibarr_main_db_collation, $dolibarr_main_db_user);
  581. if ($result)
  582. {
  583. print '<tr><td>';
  584. print $langs->trans("DatabaseCreation")." (".$langs->trans("User")." ".$userroot.") : ";
  585. print $dolibarr_main_db_name;
  586. print '</td>';
  587. print '<td><img src="../theme/eldy/img/tick.png" alt="Ok"></td></tr>';
  588. $newdb->select_db($dolibarr_main_db_name);
  589. $check1=$newdb->getDefaultCharacterSetDatabase();
  590. $check2=$newdb->getDefaultCollationDatabase();
  591. dolibarr_install_syslog('step1: new database is using charset=' . $check1 . ' collation=' . $check2);
  592. // If values differs, we save conf file again
  593. //if ($check1 != $dolibarr_main_db_character_set) dolibarr_install_syslog('step1: value for character_set is not the one asked for database creation', LOG_WARNING);
  594. //if ($check2 != $dolibarr_main_db_collation) dolibarr_install_syslog('step1: value for collation is not the one asked for database creation', LOG_WARNING);
  595. }
  596. else
  597. {
  598. // warning message
  599. print '<tr><td colspan="2"><br>';
  600. print $langs->trans("ErrorFailedToCreateDatabase",$dolibarr_main_db_name).'<br>';
  601. print $newdb->lasterror().'<br>';
  602. print $langs->trans("IfDatabaseExistsGoBackAndCheckCreate");
  603. print '<br>';
  604. print '</td></tr>';
  605. dolibarr_install_syslog('step1: failed to create database ' . $dolibarr_main_db_name . ' ' . $newdb->lasterrno() . ' ' . $newdb->lasterror(), LOG_ERR);
  606. $error++;
  607. }
  608. $newdb->close();
  609. }
  610. else {
  611. print '<tr><td>';
  612. print $langs->trans("DatabaseCreation")." (".$langs->trans("User")." ".$userroot.") : ";
  613. print $dolibarr_main_db_name;
  614. print '</td>';
  615. print '<td><img src="../theme/eldy/img/error.png" alt="Error"></td>';
  616. print '</tr>';
  617. // warning message
  618. print '<tr><td colspan="2"><br>';
  619. print $langs->trans("YouAskDatabaseCreationSoDolibarrNeedToConnect",$dolibarr_main_db_user,$dolibarr_main_db_host,$userroot);
  620. print '<br>';
  621. print $langs->trans("BecauseConnectionFailedParametersMayBeWrong").'<br><br>';
  622. print $langs->trans("ErrorGoBackAndCorrectParameters").'<br><br>';
  623. print '</td></tr>';
  624. $error++;
  625. }
  626. } // end of create database
  627. // We test access with dolibarr database user (not admin)
  628. if (! $error)
  629. {
  630. dolibarr_install_syslog("step1: connection type=" . $conf->db->type . " on host=" . $conf->db->host . " port=" . $conf->db->port . " user=" . $conf->db->user . " name=" . $conf->db->name);
  631. //print "connexion de type=".$conf->db->type." sur host=".$conf->db->host." port=".$conf->db->port." user=".$conf->db->user." name=".$conf->db->name;
  632. $db=getDoliDBInstance($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port);
  633. if ($db->connected)
  634. {
  635. dolibarr_install_syslog("step1: connection to server by user " . $conf->db->user . " ok");
  636. print "<tr><td>";
  637. print $langs->trans("ServerConnection")." (".$langs->trans("User")." ".$conf->db->user.") : ";
  638. print $dolibarr_main_db_host;
  639. print "</td><td>";
  640. print '<img src="../theme/eldy/img/tick.png" alt="Ok">';
  641. print "</td></tr>";
  642. // server access ok, basic access ok
  643. if ($db->database_selected)
  644. {
  645. dolibarr_install_syslog("step1: connection to database " . $conf->db->name . " by user " . $conf->db->user . " ok");
  646. print "<tr><td>";
  647. print $langs->trans("DatabaseConnection")." (".$langs->trans("User")." ".$conf->db->user.") : ";
  648. print $dolibarr_main_db_name;
  649. print "</td><td>";
  650. print '<img src="../theme/eldy/img/tick.png" alt="Ok">';
  651. print "</td></tr>";
  652. $error = 0;
  653. }
  654. else
  655. {
  656. dolibarr_install_syslog("step1: connection to database " . $conf->db->name . " by user " . $conf->db->user . " failed", LOG_ERR);
  657. print "<tr><td>";
  658. print $langs->trans("DatabaseConnection")." (".$langs->trans("User")." ".$conf->db->user.") : ";
  659. print $dolibarr_main_db_name;
  660. print '</td><td>';
  661. print '<img src="../theme/eldy/img/error.png" alt="Error">';
  662. print "</td></tr>";
  663. // warning message
  664. print '<tr><td colspan="2"><br>';
  665. print $langs->trans('CheckThatDatabasenameIsCorrect',$dolibarr_main_db_name).'<br>';
  666. print $langs->trans('IfAlreadyExistsCheckOption').'<br>';
  667. print $langs->trans("ErrorGoBackAndCorrectParameters").'<br><br>';
  668. print '</td></tr>';
  669. $error++;
  670. }
  671. }
  672. else
  673. {
  674. dolibarr_install_syslog("step1: connection to server by user " . $conf->db->user . " failed", LOG_ERR);
  675. print "<tr><td>";
  676. print $langs->trans("ServerConnection")." (".$langs->trans("User")." ".$conf->db->user.") : ";
  677. print $dolibarr_main_db_host;
  678. print '</td><td>';
  679. print '<img src="../theme/eldy/img/error.png" alt="Error">';
  680. print "</td></tr>";
  681. // warning message
  682. print '<tr><td colspan="2"><br>';
  683. print $langs->trans("ErrorConnection",$conf->db->host,$conf->db->name,$conf->db->user);
  684. print $langs->trans('IfLoginDoesNotExistsCheckCreateUser').'<br>';
  685. print $langs->trans("ErrorGoBackAndCorrectParameters").'<br><br>';
  686. print '</td></tr>';
  687. $error++;
  688. }
  689. }
  690. }
  691. print '</table>';
  692. }
  693. ?>
  694. <script type="text/javascript">
  695. function jsinfo()
  696. {
  697. ok=true;
  698. //alert('<?php echo dol_escape_js($langs->transnoentities("NextStepMightLastALongTime")); ?>');
  699. document.getElementById('nextbutton').style.visibility="hidden";
  700. document.getElementById('pleasewait').style.visibility="visible";
  701. return ok;
  702. }
  703. </script>
  704. <?php
  705. $ret=0;
  706. if ($error && isset($argv[1])) $ret=1;
  707. dolibarr_install_syslog("Exit ".$ret);
  708. dolibarr_install_syslog("--- step1: end");
  709. pFooter($error?1:0,$setuplang,'jsinfo',1);
  710. // Return code if ran from command line
  711. if ($ret) exit($ret);
  712. /**
  713. * Create main file. No particular permissions are set by installer.
  714. *
  715. * @param string $mainfile Full path name of main file to generate/update
  716. * @param string $main_dir Full path name to main.inc.php file
  717. * @return void
  718. */
  719. function write_main_file($mainfile,$main_dir)
  720. {
  721. $fp = @fopen("$mainfile", "w");
  722. if($fp)
  723. {
  724. clearstatcache();
  725. fputs($fp, '<?php'."\n");
  726. fputs($fp, "// Wrapper to include main into htdocs\n");
  727. fputs($fp, "include_once '".$main_dir."/main.inc.php';\n");
  728. fclose($fp);
  729. }
  730. }
  731. /**
  732. * Create master file. No particular permissions are set by installer.
  733. *
  734. * @param string $masterfile Full path name of master file to generate/update
  735. * @param string $main_dir Full path name to master.inc.php file
  736. * @return void
  737. */
  738. function write_master_file($masterfile,$main_dir)
  739. {
  740. $fp = @fopen("$masterfile", "w");
  741. if($fp)
  742. {
  743. clearstatcache();
  744. fputs($fp, '<?php'."\n");
  745. fputs($fp, "// Wrapper to include master into htdocs\n");
  746. fputs($fp, "include_once '".$main_dir."/master.inc.php';\n");
  747. fclose($fp);
  748. }
  749. }
  750. /**
  751. * Save configuration file. No particular permissions are set by installer.
  752. *
  753. * @param string $conffile Path to conf file to generate/update
  754. * @return integer
  755. */
  756. function write_conf_file($conffile)
  757. {
  758. global $conf,$langs;
  759. global $main_url,$main_dir,$main_data_dir,$main_force_https,$main_use_alt_dir,$main_alt_dir_name,$main_db_prefix;
  760. global $dolibarr_main_url_root,$dolibarr_main_document_root,$dolibarr_main_data_root,$dolibarr_main_db_host;
  761. global $dolibarr_main_db_port,$dolibarr_main_db_name,$dolibarr_main_db_user,$dolibarr_main_db_pass;
  762. global $dolibarr_main_db_type,$dolibarr_main_db_character_set,$dolibarr_main_db_collation,$dolibarr_main_authentication;
  763. global $db_host,$db_port,$db_name,$db_user,$db_pass,$db_type,$db_character_set,$db_collation;
  764. global $conffile,$conffiletoshow,$conffiletoshowshort;
  765. global $force_dolibarr_lib_ADODB_PATH, $force_dolibarr_lib_NUSOAP_PATH;
  766. global $force_dolibarr_lib_TCPDF_PATH, $force_dolibarr_lib_FPDI_PATH;
  767. global $force_dolibarr_lib_PHPEXCEL_PATH, $force_dolibarr_lib_GEOIP_PATH;
  768. global $force_dolibarr_lib_ODTPHP_PATH, $force_dolibarr_lib_ODTPHP_PATHTOPCLZIP;
  769. global $force_dolibarr_js_CKEDITOR, $force_dolibarr_js_JQUERY, $force_dolibarr_js_JQUERY_UI, $force_dolibarr_js_JQUERY_FLOT;
  770. global $force_dolibarr_font_DOL_DEFAULT_TTF, $force_dolibarr_font_DOL_DEFAULT_TTF_BOLD;
  771. $error=0;
  772. $key = md5(uniqid(mt_rand(), true)); // Generate random hash
  773. $fp = fopen("$conffile", "w");
  774. if($fp)
  775. {
  776. clearstatcache();
  777. fputs($fp,'<?php'."\n");
  778. fputs($fp,'//'."\n");
  779. fputs($fp,'// File generated by Dolibarr installer '.DOL_VERSION.' on '.dol_print_date(dol_now(),'')."\n");
  780. fputs($fp,'//'."\n");
  781. fputs($fp,'// Take a look at conf.php.example file for an example of '.$conffiletoshowshort.' file'."\n");
  782. fputs($fp,'// and explanations for all possibles parameters.'."\n");
  783. fputs($fp,'//'."\n");
  784. fputs($fp, '$dolibarr_main_url_root=\''.str_replace("'","\'",trim($main_url)).'\';');
  785. fputs($fp,"\n");
  786. fputs($fp, '$dolibarr_main_document_root=\''.str_replace("'","\'",trim($main_dir)).'\';');
  787. fputs($fp,"\n");
  788. fputs($fp, $main_use_alt_dir.'$dolibarr_main_url_root_alt=\''.str_replace("'","\'",trim("/".$main_alt_dir_name)).'\';');
  789. fputs($fp,"\n");
  790. fputs($fp, $main_use_alt_dir.'$dolibarr_main_document_root_alt=\''.str_replace("'","\'",trim($main_dir."/".$main_alt_dir_name)).'\';');
  791. fputs($fp,"\n");
  792. fputs($fp, '$dolibarr_main_data_root=\''.str_replace("'","\'",trim($main_data_dir)).'\';');
  793. fputs($fp,"\n");
  794. fputs($fp, '$dolibarr_main_db_host=\''.str_replace("'","\'",trim($db_host)).'\';');
  795. fputs($fp,"\n");
  796. fputs($fp, '$dolibarr_main_db_port=\''.str_replace("'","\'",trim($db_port)).'\';');
  797. fputs($fp,"\n");
  798. fputs($fp, '$dolibarr_main_db_name=\''.str_replace("'","\'",trim($db_name)).'\';');
  799. fputs($fp,"\n");
  800. fputs($fp, '$dolibarr_main_db_prefix=\''.str_replace("'","\'",trim($main_db_prefix)).'\';');
  801. fputs($fp,"\n");
  802. fputs($fp, '$dolibarr_main_db_user=\''.str_replace("'","\'",trim($db_user)).'\';');
  803. fputs($fp,"\n");
  804. fputs($fp, '$dolibarr_main_db_pass=\''.str_replace("'","\'",trim($db_pass)).'\';');
  805. fputs($fp,"\n");
  806. fputs($fp, '$dolibarr_main_db_type=\''.str_replace("'","\'",trim($db_type)).'\';');
  807. fputs($fp,"\n");
  808. fputs($fp, '$dolibarr_main_db_character_set=\''.str_replace("'","\'",trim($db_character_set)).'\';');
  809. fputs($fp,"\n");
  810. fputs($fp, '$dolibarr_main_db_collation=\''.str_replace("'","\'",trim($db_collation)).'\';');
  811. fputs($fp,"\n");
  812. /* Authentication */
  813. fputs($fp, '// Authentication settings');
  814. fputs($fp,"\n");
  815. fputs($fp, '$dolibarr_main_authentication=\'dolibarr\';');
  816. fputs($fp,"\n\n");
  817. fputs($fp, '//$dolibarr_main_demo=\'autologin,autopass\';');
  818. fputs($fp,"\n");
  819. fputs($fp, '// Security settings');
  820. fputs($fp,"\n");
  821. fputs($fp, '$dolibarr_main_prod=\'0\';');
  822. fputs($fp,"\n");
  823. fputs($fp, '$dolibarr_main_force_https=\''.$main_force_https.'\';');
  824. fputs($fp,"\n");
  825. fputs($fp, '$dolibarr_main_restrict_os_commands=\'mysqldump, mysql, pg_dump, pgrestore\';');
  826. fputs($fp,"\n");
  827. fputs($fp, '$dolibarr_nocsrfcheck=\'0\';');
  828. fputs($fp,"\n");
  829. fputs($fp, '$dolibarr_main_cookie_cryptkey=\''.$key.'\';');
  830. fputs($fp,"\n");
  831. fputs($fp, '$dolibarr_mailing_limit_sendbyweb=\'0\';');
  832. fputs($fp,"\n");
  833. // Write params to overwrites default lib path
  834. fputs($fp,"\n");
  835. if (empty($force_dolibarr_lib_FPDF_PATH)) { fputs($fp, '//'); $force_dolibarr_lib_FPDF_PATH=''; }
  836. fputs($fp, '$dolibarr_lib_FPDF_PATH=\''.$force_dolibarr_lib_FPDF_PATH.'\';');
  837. fputs($fp,"\n");
  838. if (empty($force_dolibarr_lib_TCPDF_PATH)) { fputs($fp, '//'); $force_dolibarr_lib_TCPDF_PATH=''; }
  839. fputs($fp, '$dolibarr_lib_TCPDF_PATH=\''.$force_dolibarr_lib_TCPDF_PATH.'\';');
  840. fputs($fp,"\n");
  841. if (empty($force_dolibarr_lib_FPDI_PATH)) { fputs($fp, '//'); $force_dolibarr_lib_FPDI_PATH=''; }
  842. fputs($fp, '$dolibarr_lib_FPDI_PATH=\''.$force_dolibarr_lib_FPDI_PATH.'\';');
  843. fputs($fp,"\n");
  844. if (empty($force_dolibarr_lib_TCPDI_PATH)) { fputs($fp, '//'); $force_dolibarr_lib_TCPDI_PATH=''; }
  845. fputs($fp, '$dolibarr_lib_TCPDI_PATH=\''.$force_dolibarr_lib_TCPDI_PATH.'\';');
  846. fputs($fp,"\n");
  847. if (empty($force_dolibarr_lib_ADODB_PATH)) { fputs($fp, '//'); $force_dolibarr_lib_ADODB_PATH=''; }
  848. fputs($fp, '$dolibarr_lib_ADODB_PATH=\''.$force_dolibarr_lib_ADODB_PATH.'\';');
  849. fputs($fp,"\n");
  850. if (empty($force_dolibarr_lib_GEOIP_PATH)) { fputs($fp, '//'); $force_dolibarr_lib_GEOIP_PATH=''; }
  851. fputs($fp, '$dolibarr_lib_GEOIP_PATH=\''.$force_dolibarr_lib_GEOIP_PATH.'\';');
  852. fputs($fp,"\n");
  853. if (empty($force_dolibarr_lib_NUSOAP_PATH)) { fputs($fp, '//'); $force_dolibarr_lib_NUSOAP_PATH=''; }
  854. fputs($fp, '$dolibarr_lib_NUSOAP_PATH=\''.$force_dolibarr_lib_NUSOAP_PATH.'\';');
  855. fputs($fp,"\n");
  856. if (empty($force_dolibarr_lib_PHPEXCEL_PATH)) { fputs($fp, '//'); $force_dolibarr_lib_PHPEXCEL_PATH=''; }
  857. fputs($fp, '$dolibarr_lib_PHPEXCEL_PATH=\''.$force_dolibarr_lib_PHPEXCEL_PATH.'\';');
  858. fputs($fp,"\n");
  859. if (empty($force_dolibarr_lib_ODTPHP_PATH)) { fputs($fp, '//'); $force_dolibarr_lib_ODTPHP_PATH=''; }
  860. fputs($fp, '$dolibarr_lib_ODTPHP_PATH=\''.$force_dolibarr_lib_ODTPHP_PATH.'\';');
  861. fputs($fp,"\n");
  862. if (empty($force_dolibarr_lib_ODTPHP_PATHTOPCLZIP)) { fputs($fp, '//'); $force_dolibarr_lib_ODTPHP_PATHTOPCLZIP=''; }
  863. fputs($fp, '$dolibarr_lib_ODTPHP_PATHTOPCLZIP=\''.$force_dolibarr_lib_ODTPHP_PATHTOPCLZIP.'\';');
  864. fputs($fp,"\n");
  865. if (empty($force_dolibarr_js_CKEDITOR)) { fputs($fp, '//'); $force_dolibarr_js_CKEDITOR=''; }
  866. fputs($fp, '$dolibarr_js_CKEDITOR=\''.$force_dolibarr_js_CKEDITOR.'\';');
  867. fputs($fp,"\n");
  868. if (empty($force_dolibarr_js_JQUERY)) { fputs($fp, '//'); $force_dolibarr_js_JQUERY=''; }
  869. fputs($fp, '$dolibarr_js_JQUERY=\''.$force_dolibarr_js_JQUERY.'\';');
  870. fputs($fp,"\n");
  871. if (empty($force_dolibarr_js_JQUERY_UI)) { fputs($fp, '//'); $force_dolibarr_js_JQUERY_UI=''; }
  872. fputs($fp, '$dolibarr_js_JQUERY_UI=\''.$force_dolibarr_js_JQUERY_UI.'\';');
  873. fputs($fp,"\n");
  874. if (empty($force_dolibarr_js_JQUERY_FLOT)) { fputs($fp, '//'); $force_dolibarr_js_JQUERY_FLOT=''; }
  875. fputs($fp, '$dolibarr_js_JQUERY_FLOT=\''.$force_dolibarr_js_JQUERY_FLOT.'\';');
  876. fputs($fp,"\n");
  877. // Write params to overwrites default font path
  878. fputs($fp,"\n");
  879. if (empty($force_dolibarr_font_DOL_DEFAULT_TTF)) { fputs($fp, '//'); $force_dolibarr_font_DOL_DEFAULT_TTF=''; }
  880. fputs($fp, '$dolibarr_font_DOL_DEFAULT_TTF=\''.$force_dolibarr_font_DOL_DEFAULT_TTF.'\';');
  881. fputs($fp,"\n");
  882. if (empty($force_dolibarr_font_DOL_DEFAULT_TTF_BOLD)) { fputs($fp, '//'); $force_dolibarr_font_DOL_DEFAULT_TTF_BOLD=''; }
  883. fputs($fp, '$dolibarr_font_DOL_DEFAULT_TTF_BOLD=\''.$force_dolibarr_font_DOL_DEFAULT_TTF_BOLD.'\';');
  884. fputs($fp,"\n");
  885. fclose($fp);
  886. if (file_exists("$conffile"))
  887. {
  888. include $conffile; // force config reload, do not put include_once
  889. conf($dolibarr_main_document_root);
  890. print "<tr><td>";
  891. print $langs->trans("SaveConfigurationFile");
  892. print ' <strong>'.$conffile.'</strong>';
  893. print "</td><td>";
  894. print '<img src="../theme/eldy/img/tick.png" alt="Ok">';
  895. print "</td></tr>";
  896. }
  897. else
  898. {
  899. $error++;
  900. }
  901. }
  902. return $error;
  903. }