source: trunk/install.php @ 1221

Last change on this file since 1221 was 1221, checked in by plg, 18 years ago

partial merge -r1173:1174 from branch-1_6 to trunk: new configuration
parameter die_on_sql_error (upgrade.php and install/upgrade_*.php not
concerned on BSF)

partial merge -r1208:1209 from branch-1_6 to trunk (only bug fix on
incorrect insertion of complex upgrade identifiers)

deletions: upgrade.php and all install/upgrade_*.php because these script
are never up to date on BSF. Anyway, they are only required on a stable
branch.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.4 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | PhpWebGallery - a PHP based picture gallery                           |
4// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
5// | Copyright (C) 2003-2006 PhpWebGallery Team - http://phpwebgallery.net |
6// +-----------------------------------------------------------------------+
7// | branch        : BSF (Best So Far)
8// | file          : $RCSfile$
9// | last update   : $Date: 2006-04-20 19:31:12 +0000 (Thu, 20 Apr 2006) $
10// | last modifier : $Author: plg $
11// | revision      : $Revision: 1221 $
12// +-----------------------------------------------------------------------+
13// | This program is free software; you can redistribute it and/or modify  |
14// | it under the terms of the GNU General Public License as published by  |
15// | the Free Software Foundation                                          |
16// |                                                                       |
17// | This program is distributed in the hope that it will be useful, but   |
18// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
19// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
20// | General Public License for more details.                              |
21// |                                                                       |
22// | You should have received a copy of the GNU General Public License     |
23// | along with this program; if not, write to the Free Software           |
24// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
25// | USA.                                                                  |
26// +-----------------------------------------------------------------------+
27
28//----------------------------------------------------------- include
29define('PHPWG_ROOT_PATH','./');
30
31// Guess an initial language ...
32function guess_lang()
33{
34  return 'en_UK.iso-8859-1';
35}
36
37/**
38 * loads an sql file and executes all queries
39 *
40 * Before executing a query, $replaced is... replaced by $replacing. This is
41 * useful when the SQL file contains generic words. Drop table queries are
42 * not executed.
43 *
44 * @param string filepath
45 * @param string replaced
46 * @param string replacing
47 * @return void
48 */
49function execute_sqlfile($filepath, $replaced, $replacing)
50{
51  $sql_lines = file($filepath);
52  $query = '';
53  foreach ($sql_lines as $sql_line)
54  {
55    $sql_line = trim($sql_line);
56    if (preg_match('/(^--|^$)/', $sql_line))
57    {
58      continue;
59    }
60    $query.= ' '.$sql_line;
61    // if we reached the end of query, we execute it and reinitialize the
62    // variable "query"
63    if (preg_match('/;$/', $sql_line))
64    {
65      $query = trim($query);
66      $query = str_replace($replaced, $replacing, $query);
67      // we don't execute "DROP TABLE" queries
68      if (!preg_match('/^DROP TABLE/i', $query))
69      {
70        mysql_query($query);
71      }
72      $query = '';
73    }
74  }
75}
76
77set_magic_quotes_runtime(0); // Disable magic_quotes_runtime
78//
79// addslashes to vars if magic_quotes_gpc is off this is a security
80// precaution to prevent someone trying to break out of a SQL statement.
81//
82if( !get_magic_quotes_gpc() )
83{
84  if( is_array($_POST) )
85  {
86    while( list($k, $v) = each($_POST) )
87    {
88      if( is_array($_POST[$k]) )
89      {
90        while( list($k2, $v2) = each($_POST[$k]) )
91        {
92          $_POST[$k][$k2] = addslashes($v2);
93        }
94        @reset($_POST[$k]);
95      }
96      else
97      {
98        $_POST[$k] = addslashes($v);
99      }
100    }
101    @reset($_POST);
102  }
103
104  if( is_array($_COOKIE) )
105  {
106    while( list($k, $v) = each($_COOKIE) )
107    {
108      if( is_array($_COOKIE[$k]) )
109      {
110        while( list($k2, $v2) = each($_COOKIE[$k]) )
111        {
112          $_COOKIE[$k][$k2] = addslashes($v2);
113        }
114        @reset($_COOKIE[$k]);
115      }
116      else
117      {
118        $_COOKIE[$k] = addslashes($v);
119      }
120    }
121    @reset($_COOKIE);
122  }
123}
124
125//----------------------------------------------------- variable initialization
126
127define('DEFAULT_PREFIX_TABLE', 'phpwebgallery_');
128
129// Obtain various vars
130$dbhost = (!empty($_POST['dbhost'])) ? $_POST['dbhost'] : 'localhost';
131$dbuser = (!empty($_POST['dbuser'])) ? $_POST['dbuser'] : '';
132$dbpasswd = (!empty($_POST['dbpasswd'])) ? $_POST['dbpasswd'] : '';
133$dbname = (!empty($_POST['dbname'])) ? $_POST['dbname'] : '';
134
135if (isset($_POST['install']))
136{
137  $table_prefix = $_POST['prefix'];
138}
139else
140{
141  $table_prefix = DEFAULT_PREFIX_TABLE;
142}
143
144$admin_name = (!empty($_POST['admin_name'])) ? $_POST['admin_name'] : '';
145$admin_pass1 = (!empty($_POST['admin_pass1'])) ? $_POST['admin_pass1'] : '';
146$admin_pass2 = (!empty($_POST['admin_pass2'])) ? $_POST['admin_pass2'] : '';
147$admin_mail = (!empty($_POST['admin_mail'])) ? $_POST['admin_mail'] : '';
148
149$infos = array();
150$errors = array();
151
152// Open config.php ... if it exists
153$config_file = PHPWG_ROOT_PATH.'include/mysql.inc.php';
154if (@file_exists($config_file))
155{
156  include($config_file);
157  // Is PhpWebGallery already installed ?
158  if (defined("PHPWG_INSTALLED"))
159  {
160    die('PhpWebGallery is already installed');
161  }
162}
163
164$prefixeTable = $table_prefix;
165include(PHPWG_ROOT_PATH . 'include/config_default.inc.php');
166@include(PHPWG_ROOT_PATH. 'include/config_local.inc.php');
167include(PHPWG_ROOT_PATH . 'include/constants.php');
168include(PHPWG_ROOT_PATH . 'include/functions.inc.php');
169include(PHPWG_ROOT_PATH . 'admin/include/functions.php');
170include(PHPWG_ROOT_PATH . 'include/template.php');
171
172if ( isset( $_POST['language'] ))
173{
174  $language = strip_tags($_POST['language']);
175}
176else 
177{
178  $language = guess_lang();
179}
180
181if (!file_exists(PHPWG_ROOT_PATH.'language/'.$language.'/install.lang.php'))
182{
183  $language = 'en_UK.iso-8859-1';
184}
185
186include( './language/'.$language.'/common.lang.php' );
187include( './language/'.$language.'/admin.lang.php' );
188include( './language/'.$language.'/install.lang.php' );
189//----------------------------------------------------- template initialization
190$template=setup_style('yoga');
191$template->set_filenames( array('install'=>'install.tpl') );
192$step = 1;
193//---------------------------------------------------------------- form analyze
194if ( isset( $_POST['install'] ))
195{
196  if ( @mysql_connect( $_POST['dbhost'],
197                       $_POST['dbuser'],
198                       $_POST['dbpasswd'] ) )
199  {
200    if ( @mysql_select_db($_POST['dbname'] ) )
201    {
202      array_push( $infos, $lang['step1_confirmation'] );
203    }
204    else
205    {
206      array_push( $errors, $lang['step1_err_db'] );
207    }
208  }
209  else
210  {
211    array_push( $errors, $lang['step1_err_server'] );
212  }
213 
214  $webmaster = trim(preg_replace( '/\s{2,}/', ' ', $admin_name ));
215  if ( empty($webmaster))
216    array_push( $errors, $lang['step2_err_login1'] );
217  else if ( preg_match( '/[\'"]/', $webmaster ) )
218    array_push( $errors, $lang['step2_err_login3'] );
219  if ( $admin_pass1 != $admin_pass2 || empty($admin_pass1) )
220    array_push( $errors, $lang['step2_err_pass'] );
221  if ( empty($admin_mail))
222    array_push( $errors, $lang['reg_err_mail_address'] );
223  else 
224  {
225    $error_mail_address = validate_mail_address($admin_mail);
226    if (!empty($error_mail_address))
227      array_push( $errors, $error_mail_address );
228  }
229 
230  if ( count( $errors ) == 0 )
231  {
232    $step = 2;
233    $file_content = '<?php
234$cfgBase = \''.$dbname.'\';
235$cfgUser = \''.$dbuser.'\';
236$cfgPassword = \''.$dbpasswd.'\';
237$cfgHote = \''.$dbhost.'\';
238
239$prefixeTable = \''.$table_prefix.'\';
240
241define(\'PHPWG_INSTALLED\', true);
242?'.'>';
243   
244    @umask(0111);
245    // writing the configuration file
246    if ( !($fp = @fopen( $config_file, 'w' )))
247    {
248      $html_content = htmlentities( $file_content, ENT_QUOTES );
249      $html_content = nl2br( $html_content );
250      $template->assign_block_vars('error_copy',
251                                   array('FILE_CONTENT'=>$html_content));
252    }
253    @fputs($fp, $file_content, strlen($file_content));
254    @fclose($fp);
255   
256    // tables creation, based on phpwebgallery_structure.sql
257    execute_sqlfile(
258      PHPWG_ROOT_PATH.'install/phpwebgallery_structure.sql',
259      DEFAULT_PREFIX_TABLE,
260      $table_prefix
261      );
262    // We fill the tables with basic informations
263    execute_sqlfile(
264      PHPWG_ROOT_PATH.'install/config.sql',
265      DEFAULT_PREFIX_TABLE,
266      $table_prefix
267      );
268
269    $query = '
270UPDATE '.CONFIG_TABLE.'
271  SET value = \''.$admin_mail.'\'
272  WHERE param = \'mail_webmaster\'
273;';
274    mysql_query($query);
275       
276    $query = '
277UPDATE '.CONFIG_TABLE.'
278  SET value = \''.$language.'\'
279  WHERE param = \'default_language\'
280;';
281    mysql_query($query);
282   
283    $query = '
284INSERT
285  INTO '.SITES_TABLE.'
286  (id, galleries_url)
287  VALUES
288  (1, \''.PHPWG_ROOT_PATH.'galleries/\')
289;';
290    mysql_query($query);
291   
292    // webmaster admin user
293    $query = '
294INSERT INTO '.USERS_TABLE.'
295  (id,username,password,mail_address)
296  VALUES
297  (1,\''.$admin_name.'\',\''.md5($admin_pass1).'\',\''.$admin_mail.'\')
298;';
299    mysql_query($query);
300
301    $query = '
302INSERT INTO '.USER_INFOS_TABLE.'
303  (user_id,status,language,enabled_high)
304  VALUES
305  (1, \'webmaster\', \''.$language.'\',\''.$conf['newuser_default_enabled_high'].'\')
306;';
307    mysql_query($query);
308
309    $query = '
310UPDATE '.USER_INFOS_TABLE.'
311  SET feed_id = \''.find_available_feed_id().'\'
312  WHERE user_id = 1
313;';
314    mysql_query($query);
315
316    // guest user
317    $query = '
318INSERT INTO '.USERS_TABLE.'
319  (id,username,password,mail_address)
320  VALUES
321  (2,\'guest\',\'\',\'\')
322;';
323    mysql_query($query);
324
325    $query = '
326INSERT INTO '.USER_INFOS_TABLE.'
327  (user_id,status,language,enabled_high)
328  VALUES
329  (2, \'guest\', \''.$language.'\',\'false\')
330;';
331    mysql_query($query);
332
333    // Available upgrades must be ignored after a fresh installation. To
334    // make PWG avoid upgrading, we must tell it upgrades have already been
335    // made.
336    list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();'));
337    define('CURRENT_DATE', $dbnow);
338    $datas = array();
339    foreach (get_available_upgrade_ids() as $upgrade_id)
340    {
341      array_push(
342        $datas,
343        array(
344          'id'          => $upgrade_id,
345          'applied'     => CURRENT_DATE,
346          'description' => 'upgrade included in installation',
347          )
348        );
349    }
350    mass_inserts(
351      UPGRADE_TABLE,
352      array_keys($datas[0]),
353      $datas
354      );
355  }
356}
357
358$template->assign_vars(
359  array(
360    'RELEASE'=>PHPWG_VERSION,
361 
362    'L_BASE_TITLE'=>$lang['Initial_config'],
363    'L_LANG_TITLE'=>$lang['Default_lang'],
364    'L_DB_TITLE'=>$lang['step1_title'],
365    'L_DB_HOST'=>$lang['step1_host'],
366    'L_DB_HOST_INFO'=>$lang['step1_host_info'],
367    'L_DB_USER'=>$lang['step1_user'],
368    'L_DB_USER_INFO'=>$lang['step1_user_info'],
369    'L_DB_PASS'=>$lang['step1_pass'],
370    'L_DB_PASS_INFO'=>$lang['step1_pass_info'],
371    'L_DB_NAME'=>$lang['step1_database'],
372    'L_DB_NAME_INFO'=>$lang['step1_database_info'],
373    'L_DB_PREFIX'=>$lang['step1_prefix'],
374    'L_DB_PREFIX_INFO'=>$lang['step1_prefix_info'],
375    'L_ADMIN_TITLE'=>$lang['step2_title'],
376    'L_ADMIN'=>$lang['install_webmaster'],
377    'L_ADMIN_INFO'=>$lang['install_webmaster_info'],
378    'L_ADMIN_PASSWORD'=>$lang['step2_pwd'],
379    'L_ADMIN_PASSWORD_INFO'=>$lang['step2_pwd_info'],
380    'L_ADMIN_CONFIRM_PASSWORD'=>$lang['step2_pwd_conf'],
381    'L_ADMIN_CONFIRM_PASSWORD_INFO'=>$lang['step2_pwd_conf_info'],
382    'L_ADMIN_EMAIL'=>$lang['conf_mail_webmaster'],
383    'L_ADMIN_EMAIL_INFO'=>$lang['conf_mail_webmaster_info'],
384    'L_SUBMIT'=>$lang['Start_Install'],
385    'L_HELP'=>$lang['install_help'],
386    'L_ERR_COPY'=>$lang['step1_err_copy'],
387    'L_END_TITLE'=>$lang['install_end_title'],
388    'L_END_MESSAGE'=>$lang['install_end_message'],
389   
390    'F_ACTION'=>'install.php',
391    'F_DB_HOST'=>$dbhost,
392    'F_DB_USER'=>$dbuser,
393    'F_DB_NAME'=>$dbname,
394    'F_DB_PREFIX' => (
395      $table_prefix != DEFAULT_PREFIX_TABLE
396      ? $table_prefix
397      : DEFAULT_PREFIX_TABLE
398      ),
399    'F_ADMIN'=>$admin_name,
400    'F_ADMIN_EMAIL'=>$admin_mail,
401    'F_LANG_SELECT'=>language_select($language),
402   
403    'T_CONTENT_ENCODING' => $lang_info['charset']
404    ));
405
406//------------------------------------------------------ errors & infos display
407if ( sizeof( $errors ) != 0 )
408{
409  $template->assign_block_vars('errors',array());
410  for ( $i = 0; $i < sizeof( $errors ); $i++ )
411  {
412    $template->assign_block_vars('errors.error',array('ERROR'=>$errors[$i]));
413  }
414}
415
416if ( sizeof( $infos ) != 0 )
417{
418  $template->assign_block_vars('infos',array());
419  for ( $i = 0; $i < sizeof( $infos ); $i++ )
420  {
421    $template->assign_block_vars('infos.info',array('INFO'=>$infos[$i]));
422  }
423}
424
425if ($step ==1)
426{
427  $template->assign_block_vars('install',array());
428}
429else
430{
431  $template->assign_block_vars('install_end',array());
432}
433
434//----------------------------------------------------------- html code display
435$template->pparse('install');
436?>
Note: See TracBrowser for help on using the repository browser.