Merged bugfixes upto [0000072] (version 2.0.3).
[fa-stable.git] / install / save.php
1 <?php
2 error_reporting(E_ALL);
3 ini_set("display_errors", "On");
4 ini_set("max_execution_time", "180");
5
6 // Start a session
7 if(!defined('SESSION_STARTED'))
8 {
9         session_name('ba_session_id');
10         session_start();
11         define('SESSION_STARTED', true);
12 }
13
14 // Function to set error
15 function set_error($message)
16 {
17         global $_POST;
18         if(isset($message) AND $message != '')
19         {
20                 // Copy values entered into session so user doesn't have to re-enter everything
21                 if(isset($_POST['company_name']))
22                 {
23                         $_SESSION['ba_url'] = $_POST['ba_url'];
24                         if(!isset($_POST['operating_system']))
25                         {
26                                 $_SESSION['operating_system'] = 'linux';
27                         }
28                         else
29                         {
30                                 $_SESSION['operating_system'] = $_POST['operating_system'];
31                         }
32                         if(!isset($_POST['world_writeable']))
33                         {
34                                 $_SESSION['world_writeable'] = false;
35                         }
36                         else
37                         {
38                                 $_SESSION['world_writeable'] = true;
39                         }
40                         $_SESSION['database_host'] = $_POST['database_host'];
41                         $_SESSION['database_username'] = $_POST['database_username'];
42                         $_SESSION['database_password'] = $_POST['database_password'];
43                         $_SESSION['database_name'] = $_POST['database_name'];
44                         if(!isset($_POST['table_prefix']))
45                         {
46                                 $_SESSION['table_prefix'] = false;
47                         }
48                         else
49                         {
50                                 $_SESSION['table_prefix'] = true;
51                         }
52                         if(!isset($_POST['install_tables']))
53                         {
54                                 $_SESSION['install_tables'] = false;
55                         }
56                         else
57                         {
58                                 $_SESSION['install_tables'] = true;
59                         }
60                         $_SESSION['company_name'] = $_POST['company_name'];
61                         $_SESSION['admin_email'] = $_POST['admin_email'];
62                         $_SESSION['admin_password'] = $_POST['admin_password'];
63
64                 }
65                 // Set the message
66                 $_SESSION['message'] = $message;
67                 // Specify that session support is enabled
68                 $_SESSION['session_support'] = '<font class="good">Enabled</font>';
69                 // Redirect to first page again and exit
70                 header('Location: index.php?sessions_checked=true');
71                 exit();
72         }
73 }
74
75 // Function to workout what the default permissions are for files created by the webserver
76 function default_file_mode($temp_dir)
77 {
78         $v = explode(".",PHP_VERSION);
79         $v = $v[0].$v[1];
80         if($v > 41 && is_writable($temp_dir))
81         {
82                 $filename = $temp_dir.'/test_permissions.txt';
83                 $handle = fopen($filename, 'w');
84                 fwrite($handle, 'This file is to get the default file permissions');
85                 fclose($handle);
86                 $default_file_mode = '0'.substr(sprintf('%o', fileperms($filename)), -3);
87                 unlink($filename);
88         }
89         else
90         {
91                 $default_file_mode = '0777';
92         }
93         return $default_file_mode;
94 }
95
96 // Function to workout what the default permissions are for directories created by the webserver
97 function default_dir_mode($temp_dir)
98 {
99         $v = explode(".",PHP_VERSION);
100         $v = $v[0].$v[1];
101         if ($v > 41 && is_writable($temp_dir))
102         {
103                 $dirname = $temp_dir.'/test_permissions/';
104                 mkdir($dirname);
105                 $default_dir_mode = '0'.substr(sprintf('%o', fileperms($dirname)), -3);
106                 rmdir($dirname);
107         }
108         else
109         {
110                 $default_dir_mode = '0777';
111         }
112         return $default_dir_mode;
113 }
114
115 function add_slashes($input)
116 {
117         if (get_magic_quotes_gpc() || (!is_string($input)))
118         {
119                 return $input;
120         }
121         $output = addslashes($input);
122         return $output;
123 }
124 function check_db_error($err_msg, $sql)
125 {
126         return true;
127 }
128
129 if (isset($_POST['path_to_root']))
130         $path_to_root = $_POST['path_to_root'];
131 else
132         $path_to_root = "..";
133
134 // Begin check to see if form was even submitted
135 // Set error if no post vars found
136 if (!isset($_POST['company_name']))
137 {
138         set_error('Please fill-in the form below');
139 }
140 // End check to see if form was even submitted
141
142 // Begin path and timezone details code
143
144 // Check if user has entered the installation url
145 if (!isset($_POST['ba_url']) || $_POST['ba_url'] == '')
146 {
147         set_error('Please enter an absolute URL');
148 }
149 else
150 {
151         $ba_url = $_POST['ba_url'];
152 }
153
154 // Remove any slashes at the end of the URL
155 if(substr($ba_url, strlen($ba_url) - 1, 1) == "/")
156 {
157         $ba_url = substr($ba_url, 0, strlen($ba_url) - 1);
158 }
159 if(substr($ba_url, strlen($ba_url) - 1, 1) == "\\")
160 {
161         $ba_url = substr($ba_url, 0, strlen($ba_url) - 1);
162 }
163 if(substr($ba_url, strlen($ba_url) - 1, 1) == "/")
164 {
165         $ba_url = substr($ba_url, 0, strlen($ba_url) - 1);
166 }
167 if(substr($ba_url, strlen($ba_url) - 1, 1) == "\\")
168 {
169         $ba_url = substr($ba_url, 0, strlen($ba_url) - 1);
170 }
171 // End path
172
173 // Begin operating system specific code
174 // Get operating system
175 if (!isset($_POST['operating_system']) || $_POST['operating_system'] != 'linux' && $_POST['operating_system'] != 'windows')
176 {
177         set_error('Please select a valid operating system');
178 }
179 else
180 {
181         $operating_system = $_POST['operating_system'];
182 }
183 // Work-out file permissions
184 if($operating_system == 'windows')
185 {
186         $file_mode = '0777';
187         $dir_mode = '0777';
188 }
189 elseif (isset($_POST['world_writeable']) && $_POST['world_writeable'] == 'true')
190 {
191         $file_mode = '0777';
192         $dir_mode = '0777';
193 }
194 else
195 {
196         $file_mode = default_file_mode('../includes');
197         $dir_mode = default_dir_mode('../includes');
198 }
199 // End operating system specific code
200
201 // Begin database details code
202 // Check if user has entered a database host
203 if (!isset($_POST['database_host']) || $_POST['database_host'] == '')
204 {
205         set_error('Please enter a database host name');
206 }
207 else
208 {
209         $database_host = $_POST['database_host'];
210 }
211 // Check if user has entered a database username
212 if (!isset($_POST['database_username']) || $_POST['database_username'] == '')
213 {
214         set_error('Please enter a database username');
215 }
216 else
217 {
218         $database_username = $_POST['database_username'];
219 }
220 // Check if user has entered a database password
221 if (!isset($_POST['database_password']))
222 {
223         set_error('Please enter a database password');
224 }
225 else
226 {
227         $database_password = $_POST['database_password'];
228 }
229 // Check if user has entered a database name
230 if (!isset($_POST['database_name']) || $_POST['database_name'] == '')
231 {
232         set_error('Please enter a database name');
233 }
234 else
235 {
236         $database_name = $_POST['database_name'];
237 }
238 // Get table prefix
239 if (isset($_POST['table_prefix']) && $_POST['table_prefix'] == 'true')
240         $table_prefix = "0_";
241 else
242         $table_prefix = "";
243
244 // Find out if the user wants to install tables and data
245 if (isset($_POST['install_tables']) && $_POST['install_tables'] == 'true')
246 {
247         $install_tables = true;
248 }
249 else
250 {
251         $install_tables = false;
252 }
253 // End database details code
254
255 // Begin company name code
256 // Get company name
257 if (!isset($_POST['company_name']) || $_POST['company_name'] == '')
258 {
259         set_error('Please enter a company name');
260 }
261 else
262 {
263         $company_name = add_slashes($_POST['company_name']);
264 }
265 // End website company name
266
267 // Check if the user has entered a correct path
268 if (!file_exists($path_to_root.'/sql/en_US-demo.sql'))
269 {
270         set_error('It appears the Absolute path that you entered is incorrect');
271 }
272
273 // Get admin email and validate it
274 if (!isset($_POST['admin_email']) || $_POST['admin_email'] == '')
275 {
276         set_error('Please enter an email for the Administrator account');
277 }
278 else
279 {
280         if (eregi("^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$", $_POST['admin_email']))
281         {
282                 $admin_email = $_POST['admin_email'];
283         }
284         else
285         {
286                 set_error('Please enter a valid email address for the Administrator account');
287         }
288 }
289 // Get the two admin passwords entered, and check that they match
290 if (!isset($_POST['admin_password']) || $_POST['admin_password'] == '')
291 {
292         set_error('Please enter a password for the Administrator account');
293 }
294 else
295 {
296         $admin_password = $_POST['admin_password'];
297 }
298 if (!isset($_POST['admin_repassword']) || $_POST['admin_repassword'] == '')
299 {
300         set_error('Please make sure you re-enter the password for the Administrator account');
301 }
302 else
303 {
304         $admin_repassword = $_POST['admin_repassword'];
305 }
306 if ($admin_password != $admin_repassword)
307 {
308         set_error('Sorry, the two Administrator account passwords you entered do not match');
309 }
310 // End admin user details code
311
312 include_once($path_to_root . "/includes/db/connect_db.inc");
313 include_once($path_to_root . "/admin/db/maintenance_db.inc");
314 include_once($path_to_root . "/config_db.php");
315
316 $id = count($db_connections);
317 if ($table_prefix != "" && $id > 0)
318         $table_prefix = $tb_pref_counter . "_";
319 $db_connections[$id]['name'] = $company_name;
320 $db_connections[$id]['host'] = $database_host;
321 $db_connections[$id]['dbuser'] = $database_username;
322 $db_connections[$id]['dbpassword'] = $database_password;
323 $db_connections[$id]['dbname'] = $database_name;
324 $db_connections[$id]['tbpref'] = $table_prefix;
325
326 $def_coy = $id;
327
328 $config_filename = $path_to_root . '/config_db.php';
329
330 $err = write_config_db($table_prefix != "");
331 if ($err == -1)
332         set_error("Cannot open the configuration file ($config_filename)");
333 else if ($err == -2)
334         set_error("Cannot write to the configuration file ($config_filename)");
335 else if ($err == -3)
336         set_error("The configuration file $config_filename is not writable. Change its permissions so it is, then re-run step 4.");
337
338 // Try connecting to database
339
340 $db = mysql_connect($database_host, $database_username, $database_password);
341 if (!$db)
342 {
343         set_error('Database host name, username and/or password incorrect. MySQL Error:<br />'.mysql_error());
344 }
345
346 if($install_tables == true)
347 {
348         if (!mysql_select_db($database_name, $db))
349         {
350
351                 // Try to create the database
352                 mysql_query('CREATE DATABASE '.$database_name);
353                 mysql_select_db($database_name, $db);
354         }
355         $import_filename = $path_to_root."/sql/en_US-demo.sql";
356         if (!db_import($import_filename, $db_connections[$id]))
357                 set_error("Import error, try to import $import_filename manually via phpMyAdmin");
358 }
359 else
360 {
361         mysql_select_db($database_name, $db);
362 }
363 $sql = "UPDATE ".$table_prefix."users SET password = '" . md5($admin_password) . "', email = ".db_escape($admin_email)." WHERE user_id = 'admin'";
364 db_query($sql, "could not update admin account");
365 $sql = "UPDATE ".$table_prefix."company SET coy_name = ".db_escape($company_name)." WHERE coy_code = 1";
366 db_query($sql, "could not update company name. Do it manually later in Setup");
367
368 session_unset();
369 session_destroy();
370 $_SESSION = array();
371
372 header("Location: ".$path_to_root."/index.php");
373 exit();
374
375 ?>