Subversion Repositories svnkaklik

Rev

Details | Last modification | View Log

Rev Author Line No. Line
6 kaklik 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-2005 PhpWebGallery Team - http://phpwebgallery.net |
6
// +-----------------------------------------------------------------------+
7
// | branch        : BSF (Best So Far)
8
// | file          : $RCSfile: install.php,v $
9
// | last update   : $Date: 2005/03/12 10:51:08 $
10
// | last modifier : $Author: plg $
11
// | revision      : $Revision: 1.22 $
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
29
define('PHPWG_ROOT_PATH','./');
30
 
31
// Guess an initial language ... 
32
function guess_lang()
33
{
34
  return 'en_UK.iso-8859-1';
35
 
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';
67
}
68
 
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
 */
81
function execute_sqlfile($filepath, $replaced, $replacing)
82
{
83
  $sql_lines = file($filepath);
84
  $query = '';
85
  foreach ($sql_lines as $sql_line)
86
  {
87
    $sql_line = trim($sql_line);
88
    if (preg_match('/(^--|^$)/', $sql_line))
89
    {
90
      continue;
91
    }
92
    $query.= ' '.$sql_line;
93
    // if we reached the end of query, we execute it and reinitialize the
94
    // variable "query"
95
    if (preg_match('/;$/', $sql_line))
96
    {
97
      $query = trim($query);
98
      $query = str_replace($replaced, $replacing, $query);
99
      // we don't execute "DROP TABLE" queries
100
      if (!preg_match('/^DROP TABLE/i', $query))
101
      {
102
        mysql_query($query);
103
      }
104
      $query = '';
105
    }
106
  }
107
}
108
 
109
set_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
//
114
if( !get_magic_quotes_gpc() )
115
{
116
  if( is_array($_POST) )
117
  {
118
    while( list($k, $v) = each($_POST) )
119
    {
120
      if( is_array($_POST[$k]) )
121
      {
122
        while( list($k2, $v2) = each($_POST[$k]) )
123
        {
124
          $_POST[$k][$k2] = addslashes($v2);
125
        }
126
        @reset($_POST[$k]);
127
      }
128
      else
129
      {
130
        $_POST[$k] = addslashes($v);
131
      }
132
    }
133
    @reset($_POST);
134
  }
135
 
136
  if( is_array($_COOKIE) )
137
  {
138
    while( list($k, $v) = each($_COOKIE) )
139
    {
140
      if( is_array($_COOKIE[$k]) )
141
      {
142
        while( list($k2, $v2) = each($_COOKIE[$k]) )
143
        {
144
          $_COOKIE[$k][$k2] = addslashes($v2);
145
        }
146
        @reset($_COOKIE[$k]);
147
      }
148
      else
149
      {
150
        $_COOKIE[$k] = addslashes($v);
151
      }
152
    }
153
    @reset($_COOKIE);
154
  }
155
}
156
 
157
//----------------------------------------------------- variable initialization
158
$install_style = 'default';
159
 
160
// Obtain various vars
161
$dbhost = (!empty($_POST['dbhost'])) ? $_POST['dbhost'] : 'localhost';
162
$dbuser = (!empty($_POST['dbuser'])) ? $_POST['dbuser'] : '';
163
$dbpasswd = (!empty($_POST['dbpasswd'])) ? $_POST['dbpasswd'] : '';
164
$dbname = (!empty($_POST['dbname'])) ? $_POST['dbname'] : '';
165
 
166
$table_prefix = (!empty($_POST['prefix'])) ? $_POST['prefix'] : 'phpwebgallery_';
167
 
168
$admin_name = (!empty($_POST['admin_name'])) ? $_POST['admin_name'] : '';
169
$admin_pass1 = (!empty($_POST['admin_pass1'])) ? $_POST['admin_pass1'] : '';
170
$admin_pass2 = (!empty($_POST['admin_pass2'])) ? $_POST['admin_pass2'] : '';
171
$admin_mail = (!empty($_POST['admin_mail'])) ? $_POST['admin_mail'] : '';
172
 
173
$infos = array();
174
$errors = array();
175
 
176
// Open config.php ... if it exists
177
$config_file = PHPWG_ROOT_PATH.'include/mysql.inc.php';
178
if (@file_exists($config_file))
179
{
180
  include($config_file);
181
  // Is PhpWebGallery already installed ?
182
  if (defined("PHPWG_INSTALLED"))
183
  {
184
    die('PhpWebGallery is already installed');
185
  }
186
}
187
 
188
$prefixeTable = $table_prefix;
189
include(PHPWG_ROOT_PATH . 'include/constants.php');
190
include(PHPWG_ROOT_PATH . 'include/functions.inc.php');
191
include(PHPWG_ROOT_PATH . 'include/template.php');
192
 
193
if ( isset( $_POST['language'] ))
194
{
195
  $language = strip_tags($_POST['language']);
196
}
197
else 
198
{
199
  $language = guess_lang();
200
}
201
 
202
if (!file_exists(PHPWG_ROOT_PATH.'language/'.$language.'/install.lang.php'))
203
{
204
  $language = 'en_UK.iso-8859-1';
205
}
206
 
207
include( './language/'.$language.'/common.lang.php' );
208
include( './language/'.$language.'/admin.lang.php' );
209
include( './language/'.$language.'/install.lang.php' );
210
//----------------------------------------------------- template initialization
211
$template=setup_style($install_style);
212
$template->set_filenames( array('install'=>'install.tpl') );
213
$step = 1;
214
//---------------------------------------------------------------- form analyze
215
if ( isset( $_POST['install'] ))
216
{
217
  if ( @mysql_connect( $_POST['dbhost'],
218
                       $_POST['dbuser'],
219
                       $_POST['dbpasswd'] ) )
220
  {
221
    if ( @mysql_select_db($_POST['dbname'] ) )
222
    {
223
      array_push( $infos, $lang['step1_confirmation'] );
224
    }
225
    else
226
    {
227
      array_push( $errors, $lang['step1_err_db'] );
228
    }
229
  }
230
  else
231
  {
232
    array_push( $errors, $lang['step1_err_server'] );
233
  }
234
 
235
  $webmaster = trim(preg_replace( '/\s{2,}/', ' ', $admin_name ));
236
  if ( empty($webmaster))
237
    array_push( $errors, $lang['step2_err_login1'] );
238
  else if ( preg_match( '/[\'"]/', $webmaster ) )
239
    array_push( $errors, $lang['step2_err_login3'] );
240
  if ( $admin_pass1 != $admin_pass2 || empty($admin_pass1) )
241
    array_push( $errors, $lang['step2_err_pass'] );
242
  if ( empty($admin_mail))
243
    array_push( $errors, $lang['reg_err_mail_address'] );
244
  else 
245
  {
246
    $error_mail_address = validate_mail_address($admin_mail);
247
    if (!empty($error_mail_address))
248
      array_push( $errors, $error_mail_address );
249
  }
250
 
251
  if ( count( $errors ) == 0 )
252
  {
253
    $step = 2;
254
    $file_content = "<?php";
255
    $file_content.= "\n\$cfgBase = '".     $dbname."';";
256
    $file_content.= "\n\$cfgUser = '".     $dbuser."';";
257
    $file_content.= "\n\$cfgPassword = '". $dbpasswd."';";
258
    $file_content.= "\n\$cfgHote = '".     $dbhost."';";
259
    $file_content.= "\n";
260
    $file_content.= "\n\$prefixeTable = '".$table_prefix."';";
261
    $file_content.= "\n";
262
    $file_content.= "\ndefine('PHPWG_INSTALLED', true);";
263
    $file_content.= "\n?".">";
264
 
265
    @umask(0111);
266
    // writing the configuration file
267
    if ( !($fp = @fopen( $config_file, 'w' )))
268
    {
269
      $html_content = htmlentities( $file_content, ENT_QUOTES );
270
      $html_content = nl2br( $html_content );
271
      $template->assign_block_vars('error_copy',
272
                                   array('FILE_CONTENT'=>$html_content));
273
    }
274
    @fputs($fp, $file_content, strlen($file_content));
275
    @fclose($fp);
276
 
277
    // tables creation, based on phpwebgallery_structure.sql
278
    execute_sqlfile( PHPWG_ROOT_PATH.'install/phpwebgallery_structure.sql'
279
                     , 'phpwebgallery_'
280
                     , $table_prefix );
281
    // We fill the tables with basic informations
282
    execute_sqlfile( PHPWG_ROOT_PATH.'install/config.sql'
283
                     , 'phpwebgallery_'
284
                     , $table_prefix );
285
 
286
    $query = 'UPDATE '.CONFIG_TABLE;
287
    $query.= " SET value = '".$admin_mail."'";
288
    $query.= " WHERE param = 'mail_webmaster'";
289
    $query.= ';';
290
    mysql_query( $query );
291
 
292
    $query = 'UPDATE '.CONFIG_TABLE;
293
    $query.= " SET value = '".$language."'";
294
    $query.= " WHERE param = 'default_language'";
295
    $query.= ';';
296
    mysql_query( $query );
297
 
298
    $query = 'INSERT INTO '.SITES_TABLE;
299
    $query.= " (id,galleries_url) VALUES (1, '".PHPWG_ROOT_PATH."galleries/');";
300
    mysql_query( $query );
301
 
302
    // webmaster admin user
303
    $query = 'INSERT INTO '.USERS_TABLE;
304
    $query.= ' (id,username,password,status,language,mail_address) VALUES ';
305
    $query.= "(1,'".$admin_name."','".md5( $admin_pass1 )."'";
306
    $query.= ",'admin','".$language."'";
307
    $query.= ",'".$admin_mail."');";
308
    mysql_query($query);
309
 
310
    // guest user
311
    $query = 'INSERT INTO '.USERS_TABLE;
312
    $query.= '(id,username,password,status,language) VALUES ';
313
    $query.= "(2,'guest','','guest','".$language."')";
314
    $query.= ';';
315
    mysql_query( $query );
316
  }
317
}
318
 
319
$template->assign_vars(
320
  array(
321
    'RELEASE'=>PHPWG_VERSION,
322
 
323
    'L_BASE_TITLE'=>$lang['Initial_config'],
324
    'L_LANG_TITLE'=>$lang['Default_lang'],
325
    'L_DB_TITLE'=>$lang['step1_title'],
326
    'L_DB_HOST'=>$lang['step1_host'],
327
    'L_DB_HOST_INFO'=>$lang['step1_host_info'],
328
    'L_DB_USER'=>$lang['step1_user'],
329
    'L_DB_USER_INFO'=>$lang['step1_user_info'],
330
    'L_DB_PASS'=>$lang['step1_pass'],
331
    'L_DB_PASS_INFO'=>$lang['step1_pass_info'],
332
    'L_DB_NAME'=>$lang['step1_database'],
333
    'L_DB_NAME_INFO'=>$lang['step1_database_info'],
334
    'L_DB_PREFIX'=>$lang['step1_prefix'],
335
    'L_DB_PREFIX_INFO'=>$lang['step1_prefix_info'],
336
    'L_ADMIN_TITLE'=>$lang['step2_title'],
337
    'L_ADMIN'=>$lang['install_webmaster'],
338
    'L_ADMIN_INFO'=>$lang['install_webmaster_info'],
339
    'L_ADMIN_PASSWORD'=>$lang['step2_pwd'],
340
    'L_ADMIN_PASSWORD_INFO'=>$lang['step2_pwd_info'],
341
    'L_ADMIN_CONFIRM_PASSWORD'=>$lang['step2_pwd_conf'],
342
    'L_ADMIN_CONFIRM_PASSWORD_INFO'=>$lang['step2_pwd_conf_info'],
343
    'L_ADMIN_EMAIL'=>$lang['conf_mail_webmaster'],
344
    'L_ADMIN_EMAIL_INFO'=>$lang['conf_mail_webmaster_info'],
345
    'L_SUBMIT'=>$lang['Start_Install'],
346
    'L_HELP'=>$lang['install_help'],
347
    'L_ERR_COPY'=>$lang['step1_err_copy'],
348
    'L_END_TITLE'=>$lang['install_end_title'],
349
    'L_END_MESSAGE'=>$lang['install_end_message'],
350
 
351
    'F_ACTION'=>add_session_id( 'install.php' ),
352
    'F_DB_HOST'=>$dbhost,
353
    'F_DB_USER'=>$dbuser,
354
    'F_DB_NAME'=>$dbname,
355
    'F_DB_PREFIX'=>$table_prefix,
356
    'F_ADMIN'=>$admin_name,
357
    'F_ADMIN_EMAIL'=>$admin_mail,
358
    'F_LANG_SELECT'=>language_select($language),
359
 
360
    'T_CONTENT_ENCODING' => $lang_info['charset']
361
    ));
362
 
363
//------------------------------------------------------ errors & infos display
364
if ( sizeof( $errors ) != 0 )
365
{
366
  $template->assign_block_vars('errors',array());
367
  for ( $i = 0; $i < sizeof( $errors ); $i++ )
368
  {
369
    $template->assign_block_vars('errors.error',array('ERROR'=>$errors[$i]));
370
  }
371
}
372
 
373
if ( sizeof( $infos ) != 0 )
374
{
375
  $template->assign_block_vars('infos',array());
376
  for ( $i = 0; $i < sizeof( $infos ); $i++ )
377
  {
378
    $template->assign_block_vars('infos.info',array('INFO'=>$infos[$i]));
379
  }
380
}
381
 
382
if ($step ==1)
383
{
384
  $template->assign_block_vars('install',array());
385
}
386
else
387
{
388
  $template->assign_block_vars('install_end',array());
389
}
390
 
391
//----------------------------------------------------------- html code display
392
$template->pparse('install');
393
?>