source: trunk/install.php @ 1747

Last change on this file since 1747 was 1726, checked in by rub, 17 years ago

Very little/small corrections:

o bad parser word user on installation
o standardization of the method to open link in new tab/windows
o removed not used constant
o use/add link constants
o use new function pwg_URL
o add missing translation

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.2 KB
RevLine 
[218]1<?php
[354]2// +-----------------------------------------------------------------------+
[593]3// | PhpWebGallery - a PHP based picture gallery                           |
4// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
[1726]5// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
[354]6// +-----------------------------------------------------------------------+
[593]7// | branch        : BSF (Best So Far)
[354]8// | file          : $RCSfile$
9// | last update   : $Date: 2007-01-16 22:23:05 +0000 (Tue, 16 Jan 2007) $
10// | last modifier : $Author: rub $
11// | revision      : $Revision: 1726 $
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// +-----------------------------------------------------------------------+
[218]27
[367]28//----------------------------------------------------------- include
29define('PHPWG_ROOT_PATH','./');
[345]30
[367]31// Guess an initial language ...
32function guess_lang()
[218]33{
[463]34  return 'en_UK.iso-8859-1';
[218]35}
[367]36
[529]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)
[382]50{
[529]51  $sql_lines = file($filepath);
[382]52  $query = '';
[529]53  foreach ($sql_lines as $sql_line)
54  {
55    $sql_line = trim($sql_line);
56    if (preg_match('/(^--|^$)/', $sql_line))
57    {
58      continue;
59    }
[382]60    $query.= ' '.$sql_line;
61    // if we reached the end of query, we execute it and reinitialize the
62    // variable "query"
[529]63    if (preg_match('/;$/', $sql_line))
[382]64    {
[529]65      $query = trim($query);
66      $query = str_replace($replaced, $replacing, $query);
[382]67      // we don't execute "DROP TABLE" queries
[529]68      if (!preg_match('/^DROP TABLE/i', $query))
69      {
70        mysql_query($query);
71      }
[382]72      $query = '';
73    }
74  }
75}
76
[367]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() )
[218]83{
[367]84  if( is_array($_POST) )
[218]85  {
[367]86    while( list($k, $v) = each($_POST) )
[218]87    {
[367]88      if( is_array($_POST[$k]) )
[218]89      {
[367]90        while( list($k2, $v2) = each($_POST[$k]) )
91        {
92          $_POST[$k][$k2] = addslashes($v2);
93        }
94        @reset($_POST[$k]);
[218]95      }
96      else
97      {
[367]98        $_POST[$k] = addslashes($v);
[218]99      }
100    }
[367]101    @reset($_POST);
102  }
103
104  if( is_array($_COOKIE) )
105  {
106    while( list($k, $v) = each($_COOKIE) )
[218]107    {
[367]108      if( is_array($_COOKIE[$k]) )
[218]109      {
[367]110        while( list($k2, $v2) = each($_COOKIE[$k]) )
111        {
112          $_COOKIE[$k][$k2] = addslashes($v2);
113        }
114        @reset($_COOKIE[$k]);
[218]115      }
116      else
117      {
[367]118        $_COOKIE[$k] = addslashes($v);
[218]119      }
120    }
[367]121    @reset($_COOKIE);
[218]122  }
[367]123}
[218]124
[367]125//----------------------------------------------------- variable initialization
[1147]126
127define('DEFAULT_PREFIX_TABLE', 'phpwebgallery_');
128
[367]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
[1147]135if (isset($_POST['install']))
136{
137  $table_prefix = $_POST['prefix'];
138}
139else
140{
141  $table_prefix = DEFAULT_PREFIX_TABLE;
142}
[367]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{
[529]156  include($config_file);
157  // Is PhpWebGallery already installed ?
158  if (defined("PHPWG_INSTALLED"))
159  {
160    die('PhpWebGallery is already installed');
161  }
[367]162}
163
[682]164$prefixeTable = $table_prefix;
[819]165include(PHPWG_ROOT_PATH . 'include/config_default.inc.php');
[1079]166@include(PHPWG_ROOT_PATH. 'include/config_local.inc.php');
[529]167include(PHPWG_ROOT_PATH . 'include/constants.php');
168include(PHPWG_ROOT_PATH . 'include/functions.inc.php');
[1221]169include(PHPWG_ROOT_PATH . 'admin/include/functions.php');
[529]170include(PHPWG_ROOT_PATH . 'include/template.php');
171
172if ( isset( $_POST['language'] ))
[405]173{
[529]174  $language = strip_tags($_POST['language']);
[367]175}
[529]176else 
177{
178  $language = guess_lang();
179}
[367]180
[749]181if (!file_exists(PHPWG_ROOT_PATH.'language/'.$language.'/install.lang.php'))
[529]182{
183  $language = 'en_UK.iso-8859-1';
184}
185
186include( './language/'.$language.'/common.lang.php' );
[1679]187// Never: @include( './language/'.$language.'/local.lang.php' );
[529]188include( './language/'.$language.'/admin.lang.php' );
189include( './language/'.$language.'/install.lang.php' );
[367]190//----------------------------------------------------- template initialization
[860]191$template=setup_style('yoga');
[367]192$template->set_filenames( array('install'=>'install.tpl') );
193$step = 1;
[529]194//---------------------------------------------------------------- form analyze
[367]195if ( isset( $_POST['install'] ))
196{
[382]197  if ( @mysql_connect( $_POST['dbhost'],
198                       $_POST['dbuser'],
199                       $_POST['dbpasswd'] ) )
200  {
201    if ( @mysql_select_db($_POST['dbname'] ) )
[367]202    {
[382]203      array_push( $infos, $lang['step1_confirmation'] );
[218]204    }
[367]205    else
206    {
[382]207      array_push( $errors, $lang['step1_err_db'] );
[367]208    }
[382]209  }
210  else
211  {
212    array_push( $errors, $lang['step1_err_server'] );
213  }
214 
215  $webmaster = trim(preg_replace( '/\s{2,}/', ' ', $admin_name ));
216  if ( empty($webmaster))
217    array_push( $errors, $lang['step2_err_login1'] );
218  else if ( preg_match( '/[\'"]/', $webmaster ) )
219    array_push( $errors, $lang['step2_err_login3'] );
220  if ( $admin_pass1 != $admin_pass2 || empty($admin_pass1) )
221    array_push( $errors, $lang['step2_err_pass'] );
222  if ( empty($admin_mail))
223    array_push( $errors, $lang['reg_err_mail_address'] );
224  else 
225  {
226    $error_mail_address = validate_mail_address($admin_mail);
227    if (!empty($error_mail_address))
228      array_push( $errors, $error_mail_address );
229  }
230 
231  if ( count( $errors ) == 0 )
232  {
233    $step = 2;
[1147]234    $file_content = '<?php
235$cfgBase = \''.$dbname.'\';
236$cfgUser = \''.$dbuser.'\';
237$cfgPassword = \''.$dbpasswd.'\';
238$cfgHote = \''.$dbhost.'\';
239
240$prefixeTable = \''.$table_prefix.'\';
241
242define(\'PHPWG_INSTALLED\', true);
243?'.'>';
[382]244   
245    @umask(0111);
246    // writing the configuration file
247    if ( !($fp = @fopen( $config_file, 'w' )))
[367]248    {
[382]249      $html_content = htmlentities( $file_content, ENT_QUOTES );
250      $html_content = nl2br( $html_content );
[1284]251      $template->assign_block_vars(
252        'error_copy',
253        array(
254          'FILE_CONTENT' => $html_content,
255          )
256        );
[382]257    }
258    @fputs($fp, $file_content, strlen($file_content));
259    @fclose($fp);
260   
261    // tables creation, based on phpwebgallery_structure.sql
[1147]262    execute_sqlfile(
263      PHPWG_ROOT_PATH.'install/phpwebgallery_structure.sql',
264      DEFAULT_PREFIX_TABLE,
265      $table_prefix
266      );
[382]267    // We fill the tables with basic informations
[1147]268    execute_sqlfile(
269      PHPWG_ROOT_PATH.'install/config.sql',
270      DEFAULT_PREFIX_TABLE,
271      $table_prefix
272      );
[218]273
[1147]274    $query = '
275UPDATE '.CONFIG_TABLE.'
276  SET value = \''.$language.'\'
277  WHERE param = \'default_language\'
278;';
279    mysql_query($query);
[1284]280
281    // fill $conf global array
282    load_conf_from_db();
283
284    $insert = array(
285      'id' => 1,
286      'galleries_url' => PHPWG_ROOT_PATH.'galleries/',
287      );
288    mass_inserts(SITES_TABLE, array_keys($insert), array($insert));
[382]289   
290    // webmaster admin user
[1284]291    $inserts = array(
292      array(
293        'id'           => 1,
294        'username'     => $admin_name,
295        'password'     => md5($admin_pass1),
296        'mail_address' => $admin_mail,
297        ),
298      array(
299        'id'           => 2,
300        'username'     => 'guest',
301        ),
302      );
303    mass_inserts(USERS_TABLE, array_keys($inserts[0]), $inserts);
[801]304
[1284]305    create_user_infos(1);
306    create_user_infos(2);
[808]307
308    $query = '
309UPDATE '.USER_INFOS_TABLE.'
[1284]310  SET language = \''.$language.'\'
[801]311;';
312    mysql_query($query);
[808]313
[1027]314    // Available upgrades must be ignored after a fresh installation. To
315    // make PWG avoid upgrading, we must tell it upgrades have already been
316    // made.
[1221]317    list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();'));
318    define('CURRENT_DATE', $dbnow);
319    $datas = array();
[1027]320    foreach (get_available_upgrade_ids() as $upgrade_id)
321    {
[1221]322      array_push(
323        $datas,
324        array(
325          'id'          => $upgrade_id,
326          'applied'     => CURRENT_DATE,
327          'description' => 'upgrade included in installation',
328          )
329        );
[1027]330    }
[1221]331    mass_inserts(
332      UPGRADE_TABLE,
333      array_keys($datas[0]),
334      $datas
335      );
[382]336  }
[367]337}
[218]338
[529]339$template->assign_vars(
340  array(
341    'RELEASE'=>PHPWG_VERSION,
[367]342 
[529]343    'L_BASE_TITLE'=>$lang['Initial_config'],
344    'L_LANG_TITLE'=>$lang['Default_lang'],
345    'L_DB_TITLE'=>$lang['step1_title'],
346    'L_DB_HOST'=>$lang['step1_host'],
347    'L_DB_HOST_INFO'=>$lang['step1_host_info'],
348    'L_DB_USER'=>$lang['step1_user'],
349    'L_DB_USER_INFO'=>$lang['step1_user_info'],
350    'L_DB_PASS'=>$lang['step1_pass'],
351    'L_DB_PASS_INFO'=>$lang['step1_pass_info'],
352    'L_DB_NAME'=>$lang['step1_database'],
353    'L_DB_NAME_INFO'=>$lang['step1_database_info'],
354    'L_DB_PREFIX'=>$lang['step1_prefix'],
355    'L_DB_PREFIX_INFO'=>$lang['step1_prefix_info'],
356    'L_ADMIN_TITLE'=>$lang['step2_title'],
357    'L_ADMIN'=>$lang['install_webmaster'],
358    'L_ADMIN_INFO'=>$lang['install_webmaster_info'],
359    'L_ADMIN_PASSWORD'=>$lang['step2_pwd'],
360    'L_ADMIN_PASSWORD_INFO'=>$lang['step2_pwd_info'],
361    'L_ADMIN_CONFIRM_PASSWORD'=>$lang['step2_pwd_conf'],
362    'L_ADMIN_CONFIRM_PASSWORD_INFO'=>$lang['step2_pwd_conf_info'],
363    'L_ADMIN_EMAIL'=>$lang['conf_mail_webmaster'],
364    'L_ADMIN_EMAIL_INFO'=>$lang['conf_mail_webmaster_info'],
365    'L_SUBMIT'=>$lang['Start_Install'],
[1726]366    'L_INSTALL_HELP'=>sprintf($lang['install_help'], 'http://forum.'.PHPWG_DOMAIN.'/'),
[529]367    'L_ERR_COPY'=>$lang['step1_err_copy'],
368    'L_END_TITLE'=>$lang['install_end_title'],
369    'L_END_MESSAGE'=>$lang['install_end_message'],
370   
[801]371    'F_ACTION'=>'install.php',
[529]372    'F_DB_HOST'=>$dbhost,
373    'F_DB_USER'=>$dbuser,
374    'F_DB_NAME'=>$dbname,
[1147]375    'F_DB_PREFIX' => (
376      $table_prefix != DEFAULT_PREFIX_TABLE
377      ? $table_prefix
378      : DEFAULT_PREFIX_TABLE
379      ),
[529]380    'F_ADMIN'=>$admin_name,
381    'F_ADMIN_EMAIL'=>$admin_mail,
382    'F_LANG_SELECT'=>language_select($language),
383   
384    'T_CONTENT_ENCODING' => $lang_info['charset']
385    ));
386
387//------------------------------------------------------ errors & infos display
[367]388if ( sizeof( $errors ) != 0 )
389{
390  $template->assign_block_vars('errors',array());
391  for ( $i = 0; $i < sizeof( $errors ); $i++ )
[218]392  {
[367]393    $template->assign_block_vars('errors.error',array('ERROR'=>$errors[$i]));
[218]394  }
[367]395}
[218]396
[367]397if ( sizeof( $infos ) != 0 )
398{
399  $template->assign_block_vars('infos',array());
400  for ( $i = 0; $i < sizeof( $infos ); $i++ )
[218]401  {
[367]402    $template->assign_block_vars('infos.info',array('INFO'=>$infos[$i]));
[218]403  }
[367]404}
[218]405
[367]406if ($step ==1)
407{
408  $template->assign_block_vars('install',array());
[218]409}
410else
411{
[367]412  $template->assign_block_vars('install_end',array());
[218]413}
[367]414
[218]415//----------------------------------------------------------- html code display
[367]416$template->pparse('install');
[362]417?>
Note: See TracBrowser for help on using the repository browser.