source: trunk/install.php @ 884

Last change on this file since 884 was 860, checked in by plg, 19 years ago

(not in ChangeLog)

  • yoga template used for installation and by default in user_infos table
  • adaptation of yoga template to itself (no use of icons from template default)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.7 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 |
[675]5// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net |
[354]6// +-----------------------------------------------------------------------+
[593]7// | branch        : BSF (Best So Far)
[354]8// | file          : $RCSfile$
9// | last update   : $Date: 2005-09-03 20:56:35 +0000 (Sat, 03 Sep 2005) $
10// | last modifier : $Author: plg $
11// | revision      : $Revision: 860 $
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';
[367]35
[529]36//   $languages = array();
37//   $i = 0;
38//   if ($opendir = opendir(PHPWG_ROOT_PATH.'language/'))
39//   {
40//     while ( $file = readdir ( $opendir ) )
41//     {
42//       if ( is_dir ( PHPWG_ROOT_PATH.'language/'.$file )&& !substr_count($file,'.'))
43//       {
44//         $languages[$i++] =$file;
45//       }
46//     }
47//   }
48
49//   if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
50//   {
51//     $accept_lang_ary = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
52//     for ($i = 0; $i < sizeof($accept_lang_ary); $i++)
53//     {
54//       for ($j=0; $j<sizeof($languages); $j++)
55//       {
56//         if (preg_match('#' . substr($languages[$j],0,2) . '#i', substr(trim($accept_lang_ary[$i]),0,2)))
57//         {
58//           if (file_exists(PHPWG_ROOT_PATH . 'language/' . $languages[$j].'/install.lang.php'))
59//                {
60//                     return $languages[$j];
61//                }
62//         }
63//       }
64//     }
65//   }
66//   return 'en_EN';
[218]67}
[367]68
[529]69/**
70 * loads an sql file and executes all queries
71 *
72 * Before executing a query, $replaced is... replaced by $replacing. This is
73 * useful when the SQL file contains generic words. Drop table queries are
74 * not executed.
75 *
76 * @param string filepath
77 * @param string replaced
78 * @param string replacing
79 * @return void
80 */
81function execute_sqlfile($filepath, $replaced, $replacing)
[382]82{
[529]83  $sql_lines = file($filepath);
[382]84  $query = '';
[529]85  foreach ($sql_lines as $sql_line)
86  {
87    $sql_line = trim($sql_line);
88    if (preg_match('/(^--|^$)/', $sql_line))
89    {
90      continue;
91    }
[382]92    $query.= ' '.$sql_line;
93    // if we reached the end of query, we execute it and reinitialize the
94    // variable "query"
[529]95    if (preg_match('/;$/', $sql_line))
[382]96    {
[529]97      $query = trim($query);
98      $query = str_replace($replaced, $replacing, $query);
[382]99      // we don't execute "DROP TABLE" queries
[529]100      if (!preg_match('/^DROP TABLE/i', $query))
101      {
102        mysql_query($query);
103      }
[382]104      $query = '';
105    }
106  }
107}
108
[367]109set_magic_quotes_runtime(0); // Disable magic_quotes_runtime
110//
111// addslashes to vars if magic_quotes_gpc is off this is a security
112// precaution to prevent someone trying to break out of a SQL statement.
113//
114if( !get_magic_quotes_gpc() )
[218]115{
[367]116  if( is_array($_POST) )
[218]117  {
[367]118    while( list($k, $v) = each($_POST) )
[218]119    {
[367]120      if( is_array($_POST[$k]) )
[218]121      {
[367]122        while( list($k2, $v2) = each($_POST[$k]) )
123        {
124          $_POST[$k][$k2] = addslashes($v2);
125        }
126        @reset($_POST[$k]);
[218]127      }
128      else
129      {
[367]130        $_POST[$k] = addslashes($v);
[218]131      }
132    }
[367]133    @reset($_POST);
134  }
135
136  if( is_array($_COOKIE) )
137  {
138    while( list($k, $v) = each($_COOKIE) )
[218]139    {
[367]140      if( is_array($_COOKIE[$k]) )
[218]141      {
[367]142        while( list($k2, $v2) = each($_COOKIE[$k]) )
143        {
144          $_COOKIE[$k][$k2] = addslashes($v2);
145        }
146        @reset($_COOKIE[$k]);
[218]147      }
148      else
149      {
[367]150        $_COOKIE[$k] = addslashes($v);
[218]151      }
152    }
[367]153    @reset($_COOKIE);
[218]154  }
[367]155}
[218]156
[367]157//----------------------------------------------------- variable initialization
158// Obtain various vars
159$dbhost = (!empty($_POST['dbhost'])) ? $_POST['dbhost'] : 'localhost';
160$dbuser = (!empty($_POST['dbuser'])) ? $_POST['dbuser'] : '';
161$dbpasswd = (!empty($_POST['dbpasswd'])) ? $_POST['dbpasswd'] : '';
162$dbname = (!empty($_POST['dbname'])) ? $_POST['dbname'] : '';
163
[529]164$table_prefix = (!empty($_POST['prefix'])) ? $_POST['prefix'] : 'phpwebgallery_';
[367]165
166$admin_name = (!empty($_POST['admin_name'])) ? $_POST['admin_name'] : '';
167$admin_pass1 = (!empty($_POST['admin_pass1'])) ? $_POST['admin_pass1'] : '';
168$admin_pass2 = (!empty($_POST['admin_pass2'])) ? $_POST['admin_pass2'] : '';
169$admin_mail = (!empty($_POST['admin_mail'])) ? $_POST['admin_mail'] : '';
170
171$infos = array();
172$errors = array();
173
174// Open config.php ... if it exists
175$config_file = PHPWG_ROOT_PATH.'include/mysql.inc.php';
176if (@file_exists($config_file))
177{
[529]178  include($config_file);
179  // Is PhpWebGallery already installed ?
180  if (defined("PHPWG_INSTALLED"))
181  {
182    die('PhpWebGallery is already installed');
183  }
[367]184}
185
[682]186$prefixeTable = $table_prefix;
[819]187include(PHPWG_ROOT_PATH . 'include/config_default.inc.php');
[529]188include(PHPWG_ROOT_PATH . 'include/constants.php');
189include(PHPWG_ROOT_PATH . 'include/functions.inc.php');
190include(PHPWG_ROOT_PATH . 'include/template.php');
191
192if ( isset( $_POST['language'] ))
[405]193{
[529]194  $language = strip_tags($_POST['language']);
[367]195}
[529]196else 
197{
198  $language = guess_lang();
199}
[367]200
[749]201if (!file_exists(PHPWG_ROOT_PATH.'language/'.$language.'/install.lang.php'))
[529]202{
203  $language = 'en_UK.iso-8859-1';
204}
205
206include( './language/'.$language.'/common.lang.php' );
207include( './language/'.$language.'/admin.lang.php' );
208include( './language/'.$language.'/install.lang.php' );
[367]209//----------------------------------------------------- template initialization
[860]210$template=setup_style('yoga');
[367]211$template->set_filenames( array('install'=>'install.tpl') );
212$step = 1;
[529]213//---------------------------------------------------------------- form analyze
[367]214if ( isset( $_POST['install'] ))
215{
[382]216  if ( @mysql_connect( $_POST['dbhost'],
217                       $_POST['dbuser'],
218                       $_POST['dbpasswd'] ) )
219  {
220    if ( @mysql_select_db($_POST['dbname'] ) )
[367]221    {
[382]222      array_push( $infos, $lang['step1_confirmation'] );
[218]223    }
[367]224    else
225    {
[382]226      array_push( $errors, $lang['step1_err_db'] );
[367]227    }
[382]228  }
229  else
230  {
231    array_push( $errors, $lang['step1_err_server'] );
232  }
233 
234  $webmaster = trim(preg_replace( '/\s{2,}/', ' ', $admin_name ));
235  if ( empty($webmaster))
236    array_push( $errors, $lang['step2_err_login1'] );
237  else if ( preg_match( '/[\'"]/', $webmaster ) )
238    array_push( $errors, $lang['step2_err_login3'] );
239  if ( $admin_pass1 != $admin_pass2 || empty($admin_pass1) )
240    array_push( $errors, $lang['step2_err_pass'] );
241  if ( empty($admin_mail))
242    array_push( $errors, $lang['reg_err_mail_address'] );
243  else 
244  {
245    $error_mail_address = validate_mail_address($admin_mail);
246    if (!empty($error_mail_address))
247      array_push( $errors, $error_mail_address );
248  }
249 
250  if ( count( $errors ) == 0 )
251  {
252    $step = 2;
253    $file_content = "<?php";
[681]254    $file_content.= "\n\$cfgBase = '".     $dbname."';";
255    $file_content.= "\n\$cfgUser = '".     $dbuser."';";
256    $file_content.= "\n\$cfgPassword = '". $dbpasswd."';";
257    $file_content.= "\n\$cfgHote = '".     $dbhost."';";
[382]258    $file_content.= "\n";
[681]259    $file_content.= "\n\$prefixeTable = '".$table_prefix."';";
[382]260    $file_content.= "\n";
261    $file_content.= "\ndefine('PHPWG_INSTALLED', true);";
262    $file_content.= "\n?".">";
263   
264    @umask(0111);
265    // writing the configuration file
266    if ( !($fp = @fopen( $config_file, 'w' )))
[367]267    {
[382]268      $html_content = htmlentities( $file_content, ENT_QUOTES );
269      $html_content = nl2br( $html_content );
270      $template->assign_block_vars('error_copy',
271                                   array('FILE_CONTENT'=>$html_content));
272    }
273    @fputs($fp, $file_content, strlen($file_content));
274    @fclose($fp);
275   
276    // tables creation, based on phpwebgallery_structure.sql
[463]277    execute_sqlfile( PHPWG_ROOT_PATH.'install/phpwebgallery_structure.sql'
[382]278                     , 'phpwebgallery_'
279                     , $table_prefix );
280    // We fill the tables with basic informations
[463]281    execute_sqlfile( PHPWG_ROOT_PATH.'install/config.sql'
[382]282                     , 'phpwebgallery_'
283                     , $table_prefix );
[218]284
[382]285    $query = 'UPDATE '.CONFIG_TABLE;
286    $query.= " SET value = '".$admin_mail."'";
287    $query.= " WHERE param = 'mail_webmaster'";
288    $query.= ';';
289    mysql_query( $query );
[393]290       
[513]291    $query = 'UPDATE '.CONFIG_TABLE;
[393]292    $query.= " SET value = '".$language."'";
[513]293    $query.= " WHERE param = 'default_language'";
[393]294    $query.= ';';
295    mysql_query( $query );
[382]296   
297    $query = 'INSERT INTO '.SITES_TABLE;
[482]298    $query.= " (id,galleries_url) VALUES (1, '".PHPWG_ROOT_PATH."galleries/');";
[382]299    mysql_query( $query );
300   
301    // webmaster admin user
[808]302    $query = '
303INSERT INTO '.USERS_TABLE.'
304  (id,username,password,mail_address)
305  VALUES
306  (1,\''.$admin_name.'\',\''.md5($admin_pass1).'\',\''.$admin_mail.'\')
307;';
[382]308    mysql_query($query);
[801]309
310    $query = '
[808]311INSERT INTO '.USER_INFOS_TABLE.'
312  (user_id,status,language)
313  VALUES
314  (1, \'admin\', \''.$language.'\')
315;';
316    mysql_query($query);
317
318    $query = '
319UPDATE '.USER_INFOS_TABLE.'
[801]320  SET feed_id = \''.find_available_feed_id().'\'
[808]321  WHERE user_id = 1
[801]322;';
323    mysql_query($query);
[808]324
[382]325    // guest user
[808]326    $query = '
327INSERT INTO '.USERS_TABLE.'
328  (id,username,password,mail_address)
329  VALUES
330  (2,\'guest\',\'\',\'\')
331;';
332    mysql_query($query);
333
334    $query = '
335INSERT INTO '.USER_INFOS_TABLE.'
336  (user_id,status,language)
337  VALUES
338  (2, \'guest\', \''.$language.'\')
339;';
340    mysql_query($query);
[382]341  }
[367]342}
[218]343
[529]344$template->assign_vars(
345  array(
346    'RELEASE'=>PHPWG_VERSION,
[367]347 
[529]348    'L_BASE_TITLE'=>$lang['Initial_config'],
349    'L_LANG_TITLE'=>$lang['Default_lang'],
350    'L_DB_TITLE'=>$lang['step1_title'],
351    'L_DB_HOST'=>$lang['step1_host'],
352    'L_DB_HOST_INFO'=>$lang['step1_host_info'],
353    'L_DB_USER'=>$lang['step1_user'],
354    'L_DB_USER_INFO'=>$lang['step1_user_info'],
355    'L_DB_PASS'=>$lang['step1_pass'],
356    'L_DB_PASS_INFO'=>$lang['step1_pass_info'],
357    'L_DB_NAME'=>$lang['step1_database'],
358    'L_DB_NAME_INFO'=>$lang['step1_database_info'],
359    'L_DB_PREFIX'=>$lang['step1_prefix'],
360    'L_DB_PREFIX_INFO'=>$lang['step1_prefix_info'],
361    'L_ADMIN_TITLE'=>$lang['step2_title'],
362    'L_ADMIN'=>$lang['install_webmaster'],
363    'L_ADMIN_INFO'=>$lang['install_webmaster_info'],
364    'L_ADMIN_PASSWORD'=>$lang['step2_pwd'],
365    'L_ADMIN_PASSWORD_INFO'=>$lang['step2_pwd_info'],
366    'L_ADMIN_CONFIRM_PASSWORD'=>$lang['step2_pwd_conf'],
367    'L_ADMIN_CONFIRM_PASSWORD_INFO'=>$lang['step2_pwd_conf_info'],
368    'L_ADMIN_EMAIL'=>$lang['conf_mail_webmaster'],
369    'L_ADMIN_EMAIL_INFO'=>$lang['conf_mail_webmaster_info'],
370    'L_SUBMIT'=>$lang['Start_Install'],
371    'L_HELP'=>$lang['install_help'],
372    'L_ERR_COPY'=>$lang['step1_err_copy'],
373    'L_END_TITLE'=>$lang['install_end_title'],
374    'L_END_MESSAGE'=>$lang['install_end_message'],
375   
[801]376    'F_ACTION'=>'install.php',
[529]377    'F_DB_HOST'=>$dbhost,
378    'F_DB_USER'=>$dbuser,
379    'F_DB_NAME'=>$dbname,
380    'F_DB_PREFIX'=>$table_prefix,
381    'F_ADMIN'=>$admin_name,
382    'F_ADMIN_EMAIL'=>$admin_mail,
383    'F_LANG_SELECT'=>language_select($language),
384   
385    'T_CONTENT_ENCODING' => $lang_info['charset']
386    ));
387
388//------------------------------------------------------ errors & infos display
[367]389if ( sizeof( $errors ) != 0 )
390{
391  $template->assign_block_vars('errors',array());
392  for ( $i = 0; $i < sizeof( $errors ); $i++ )
[218]393  {
[367]394    $template->assign_block_vars('errors.error',array('ERROR'=>$errors[$i]));
[218]395  }
[367]396}
[218]397
[367]398if ( sizeof( $infos ) != 0 )
399{
400  $template->assign_block_vars('infos',array());
401  for ( $i = 0; $i < sizeof( $infos ); $i++ )
[218]402  {
[367]403    $template->assign_block_vars('infos.info',array('INFO'=>$infos[$i]));
[218]404  }
[367]405}
[218]406
[367]407if ($step ==1)
408{
409  $template->assign_block_vars('install',array());
[218]410}
411else
412{
[367]413  $template->assign_block_vars('install_end',array());
[218]414}
[367]415
[218]416//----------------------------------------------------------- html code display
[367]417$template->pparse('install');
[362]418?>
Note: See TracBrowser for help on using the repository browser.