source: branches/2.1/install.php @ 6289

Last change on this file since 6289 was 6276, checked in by plg, 14 years ago

merge r6265 from trunk to branch 2.1

Correct text alignement in .infos, .errors
30px => 53px

File size: 14.0 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.org |
6// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
7// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
8// +-----------------------------------------------------------------------+
9// | This program is free software; you can redistribute it and/or modify  |
10// | it under the terms of the GNU General Public License as published by  |
11// | the Free Software Foundation                                          |
12// |                                                                       |
13// | This program is distributed in the hope that it will be useful, but   |
14// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
15// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
16// | General Public License for more details.                              |
17// |                                                                       |
18// | You should have received a copy of the GNU General Public License     |
19// | along with this program; if not, write to the Free Software           |
20// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
21// | USA.                                                                  |
22// +-----------------------------------------------------------------------+
23
24//----------------------------------------------------------- include
25define('PHPWG_ROOT_PATH','./');
26
27@set_magic_quotes_runtime(0); // Disable magic_quotes_runtime
28//
29// addslashes to vars if magic_quotes_gpc is off this is a security
30// precaution to prevent someone trying to break out of a SQL statement.
31//
32if( !@get_magic_quotes_gpc() )
33{
34  if( is_array($_POST) )
35  {
36    while( list($k, $v) = each($_POST) )
37    {
38      if( is_array($_POST[$k]) )
39      {
40        while( list($k2, $v2) = each($_POST[$k]) )
41        {
42          $_POST[$k][$k2] = addslashes($v2);
43        }
44        @reset($_POST[$k]);
45      }
46      else
47      {
48        $_POST[$k] = addslashes($v);
49      }
50    }
51    @reset($_POST);
52  }
53
54  if( is_array($_GET) )
55  {
56    while( list($k, $v) = each($_GET) )
57    {
58      if( is_array($_GET[$k]) )
59      {
60        while( list($k2, $v2) = each($_GET[$k]) )
61        {
62          $_GET[$k][$k2] = addslashes($v2);
63        }
64        @reset($_GET[$k]);
65      }
66      else
67      {
68        $_GET[$k] = addslashes($v);
69      }
70    }
71    @reset($_GET);
72  }
73
74  if( is_array($_COOKIE) )
75  {
76    while( list($k, $v) = each($_COOKIE) )
77    {
78      if( is_array($_COOKIE[$k]) )
79      {
80        while( list($k2, $v2) = each($_COOKIE[$k]) )
81        {
82          $_COOKIE[$k][$k2] = addslashes($v2);
83        }
84        @reset($_COOKIE[$k]);
85      }
86      else
87      {
88        $_COOKIE[$k] = addslashes($v);
89      }
90    }
91    @reset($_COOKIE);
92  }
93}
94
95//----------------------------------------------------- variable initialization
96
97define('DEFAULT_PREFIX_TABLE', 'piwigo_');
98
99// default database engine proposed if severals are available
100// choices : sqlite, mysql, pgsql, pdo-sqlite
101// see include/dblayer/dblayers.inc.php
102define('DEFAULT_DB_ENGINE', 'mysql');
103
104// database engine default choice between sqlite (native or via pdo)
105// if the twice are available.
106define('DEFAULT_DB_SQLITE', 'native'); 
107
108if (isset($_POST['install']))
109{
110  $prefixeTable = $_POST['prefix'];
111}
112else
113{
114  $prefixeTable = DEFAULT_PREFIX_TABLE;
115}
116
117include(PHPWG_ROOT_PATH . 'include/config_default.inc.php');
118@include(PHPWG_ROOT_PATH. 'local/config/config.inc.php');
119
120// download database config file if exists
121if (!empty($_GET['dl']) && file_exists($conf['local_data_dir'].'/pwg_'.$_GET['dl']))
122{
123  $filename = $conf['local_data_dir'].'/pwg_'.$_GET['dl'];
124  header('Cache-Control: no-cache, must-revalidate');
125  header('Pragma: no-cache');
126  header('Content-Disposition: attachment; filename="database.inc.php"');
127  header('Content-Transfer-Encoding: binary');
128  header('Content-Length: '.filesize($filename));
129  echo file_get_contents($filename);
130  unlink($filename);
131  exit();
132} 
133
134// Obtain various vars
135$dbhost = (!empty($_POST['dbhost'])) ? $_POST['dbhost'] : 'localhost';
136$dbuser = (!empty($_POST['dbuser'])) ? $_POST['dbuser'] : '';
137$dbpasswd = (!empty($_POST['dbpasswd'])) ? $_POST['dbpasswd'] : '';
138$dbname = (!empty($_POST['dbname'])) ? $_POST['dbname'] : '';
139$dblayer = (!empty($_POST['dblayer'])) ? $_POST['dblayer'] : DEFAULT_DB_ENGINE;
140
141$admin_name = (!empty($_POST['admin_name'])) ? $_POST['admin_name'] : '';
142$admin_pass1 = (!empty($_POST['admin_pass1'])) ? $_POST['admin_pass1'] : '';
143$admin_pass2 = (!empty($_POST['admin_pass2'])) ? $_POST['admin_pass2'] : '';
144$admin_mail = (!empty($_POST['admin_mail'])) ? $_POST['admin_mail'] : '';
145
146$infos = array();
147$errors = array();
148
149$config_file = PHPWG_ROOT_PATH . 'local/config/database.inc.php';
150if (@file_exists($config_file))
151{
152  include($config_file);
153  // Is Piwigo already installed ?
154  if (defined("PHPWG_INSTALLED"))
155  {
156    die('Piwigo is already installed');
157  }
158}
159
160include(PHPWG_ROOT_PATH . 'include/constants.php');
161include(PHPWG_ROOT_PATH . 'include/functions.inc.php');
162include(PHPWG_ROOT_PATH . 'admin/include/functions.php');
163
164include(PHPWG_ROOT_PATH . 'admin/include/languages.class.php');
165$languages = new languages('utf-8');
166
167if (isset($_GET['language']))
168{
169  $language = strip_tags($_GET['language']);
170}
171else
172{
173  $language = 'en_UK';
174  // Try to get browser language
175  foreach ($languages->fs_languages as $language_code => $language_name)
176  {
177    if (substr($language_code,0,2) == @substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2))
178    {
179      $language = $language_code;
180      break;
181    }
182  }
183}
184
185if ('fr_FR' == $language) {
186  define('PHPWG_DOMAIN', 'fr.piwigo.org');
187}
188else if ('it_IT' == $language) {
189  define('PHPWG_DOMAIN', 'it.piwigo.org');
190}
191else if ('de_DE' == $language) {
192  define('PHPWG_DOMAIN', 'de.piwigo.org');
193}
194else if ('es_ES' == $language) {
195  define('PHPWG_DOMAIN', 'es.piwigo.org');
196}
197else if ('pl_PL' == $language) {
198  define('PHPWG_DOMAIN', 'pl.piwigo.org');
199}
200else if ('zh_CN' == $language) {
201  define('PHPWG_DOMAIN', 'cn.piwigo.org');
202}
203else if ('hu_HU' == $language) {
204  define('PHPWG_DOMAIN', 'hu.piwigo.org');
205}
206else if ('ru_RU' == $language) {
207  define('PHPWG_DOMAIN', 'ru.piwigo.org');
208}
209else if ('nl_NL' == $language) {
210  define('PHPWG_DOMAIN', 'nl.piwigo.org');
211}
212else {
213  define('PHPWG_DOMAIN', 'piwigo.org');
214}
215define('PHPWG_URL', 'http://'.PHPWG_DOMAIN);
216
217load_language('common.lang', '', array('language' => $language, 'target_charset'=>'utf-8'));
218load_language('admin.lang', '', array('language' => $language, 'target_charset'=>'utf-8'));
219load_language('install.lang', '', array('language' => $language, 'target_charset'=>'utf-8'));
220
221header('Content-Type: text/html; charset=UTF-8');
222//------------------------------------------------- check php version
223if (version_compare(PHP_VERSION, REQUIRED_PHP_VERSION, '<'))
224{
225  include(PHPWG_ROOT_PATH.'install/php5_apache_configuration.php');
226}
227
228//----------------------------------------------------- template initialization
229include( PHPWG_ROOT_PATH .'include/template.class.php');
230$template = new Template(PHPWG_ROOT_PATH.'admin/themes', 'roma');
231$template->set_filenames( array('install' => 'install.tpl') );
232if (!isset($step))
233{
234  $step = 1;
235}
236//---------------------------------------------------------------- form analyze
237include(PHPWG_ROOT_PATH .'include/dblayer/functions_'.$dblayer.'.inc.php');
238include(PHPWG_ROOT_PATH . 'admin/include/functions_install.inc.php');
239include(PHPWG_ROOT_PATH . 'admin/include/functions_upgrade.php');
240
241if ( isset( $_POST['install'] ))
242{
243  install_db_connect($infos, $errors);
244  pwg_db_check_charset();
245
246  $webmaster = trim(preg_replace( '/\s{2,}/', ' ', $admin_name ));
247  if ( empty($webmaster))
248    array_push( $errors, l10n('enter a login for webmaster') );
249  else if ( preg_match( '/[\'"]/', $webmaster ) )
250    array_push( $errors, l10n('webmaster login can\'t contain characters \' or "') );
251  if ( $admin_pass1 != $admin_pass2 || empty($admin_pass1) )
252    array_push( $errors, l10n('please enter your password again') );
253  if ( empty($admin_mail))
254    array_push( $errors, l10n('mail address must be like xxx@yyy.eee (example : jack@altern.org)') );
255  else
256  {
257    $error_mail_address = validate_mail_address(null, $admin_mail);
258    if (!empty($error_mail_address))
259      array_push( $errors, $error_mail_address );
260  }
261
262  if ( count( $errors ) == 0 )
263  {
264    $step = 2;
265    $file_content = '<?php
266$conf[\'dblayer\'] = \''.$dblayer.'\';
267$conf[\'db_base\'] = \''.$dbname.'\';
268$conf[\'db_user\'] = \''.$dbuser.'\';
269$conf[\'db_password\'] = \''.$dbpasswd.'\';
270$conf[\'db_host\'] = \''.$dbhost.'\';
271
272$prefixeTable = \''.$prefixeTable.'\';
273
274define(\'PHPWG_INSTALLED\', true);
275define(\'PWG_CHARSET\', \'utf-8\');
276define(\'DB_CHARSET\', \'utf8\');
277define(\'DB_COLLATE\', \'\');
278
279?'.'>';
280
281    @umask(0111);
282    // writing the configuration file
283    if ( !($fp = @fopen( $config_file, 'w' )))
284    {
285      $tmp_filename = md5(uniqid(time()));
286      $fh = @fopen( $conf['local_data_dir'] . '/pwg_' . $tmp_filename, 'w' );
287      @fputs($fh, $file_content, strlen($file_content));
288      @fclose($fh);
289
290      $template->assign(
291        array(
292          'config_creation_failed' => true,
293          'config_url' => 'install.php?dl='.$tmp_filename,
294          'config_file_content' => $file_content,
295          )
296        );
297    }
298    @fputs($fp, $file_content, strlen($file_content));
299    @fclose($fp);
300
301    // tables creation, based on piwigo_structure.sql
302    execute_sqlfile(
303      PHPWG_ROOT_PATH.'install/piwigo_structure-'.$dblayer.'.sql',
304      DEFAULT_PREFIX_TABLE,
305      $prefixeTable,
306      $dblayer
307      );
308    // We fill the tables with basic informations
309    execute_sqlfile(
310      PHPWG_ROOT_PATH.'install/config.sql',
311      DEFAULT_PREFIX_TABLE,
312      $prefixeTable,
313      $dblayer
314      );
315
316    $query = '
317INSERT INTO '.$prefixeTable.'config (param,value,comment)
318   VALUES (\'secret_key\',md5('.pwg_db_cast_to_text(DB_RANDOM_FUNCTION.'()').'),
319   \'a secret key specific to the gallery for internal use\');';
320    pwg_query($query);
321
322    // fill languages table
323    foreach ($languages->get_fs_languages() as $language_code => $language_name)
324    {
325      $languages->perform_action('activate', $language_code);
326    }
327
328    // fill $conf global array
329    load_conf_from_db();
330
331    // PWG_CHARSET is required for building the fs_themes array in the
332    // themes class
333    if (!defined('PWG_CHARSET'))
334    {
335      define('PWG_CHARSET', 'utf-8');
336    }
337    activate_core_themes();
338
339    $insert = array(
340      'id' => 1,
341      'galleries_url' => PHPWG_ROOT_PATH.'galleries/',
342      );
343    mass_inserts(SITES_TABLE, array_keys($insert), array($insert));
344
345    // webmaster admin user
346    $inserts = array(
347      array(
348        'id'           => 1,
349        'username'     => $admin_name,
350        'password'     => md5($admin_pass1),
351        'mail_address' => $admin_mail,
352        ),
353      array(
354        'id'           => 2,
355        'username'     => 'guest',
356        ),
357      );
358    mass_inserts(USERS_TABLE, array_keys($inserts[0]), $inserts);
359
360    create_user_infos(array(1,2), array('language' => $language));
361
362    // Available upgrades must be ignored after a fresh installation. To
363    // make PWG avoid upgrading, we must tell it upgrades have already been
364    // made.
365    list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
366    define('CURRENT_DATE', $dbnow);
367    $datas = array();
368    foreach (get_available_upgrade_ids() as $upgrade_id)
369    {
370      array_push(
371        $datas,
372        array(
373          'id'          => $upgrade_id,
374          'applied'     => CURRENT_DATE,
375          'description' => 'upgrade included in installation',
376          )
377        );
378    }
379    mass_inserts(
380      UPGRADE_TABLE,
381      array_keys($datas[0]),
382      $datas
383      );
384  }
385}
386
387//------------------------------------------------------ start template output
388$dbengines = available_engines();
389
390foreach ($languages->fs_languages as $language_code => $language_name)
391{
392  if ($language == $language_code)
393  {
394    $template->assign('language_selection', $language_code);
395  }
396  $languages_options[$language_code] = $language_name;
397}
398$template->assign('language_options', $languages_options);
399
400$template->assign(
401  array(
402    'T_CONTENT_ENCODING' => 'utf-8',
403    'RELEASE' => PHPWG_VERSION,
404    'F_ACTION' => 'install.php?language=' . $language,
405    'F_DB_ENGINES' => $dbengines,
406    'F_DB_LAYER' => $dblayer,
407    'F_DB_HOST' => $dbhost,
408    'F_DB_USER' => $dbuser,
409    'F_DB_NAME' => $dbname,
410    'F_DB_PREFIX' => $prefixeTable,
411    'F_ADMIN' => $admin_name,
412    'F_ADMIN_EMAIL' => $admin_mail,
413    'L_INSTALL_HELP' => sprintf(l10n('Need help ? Ask your question on <a href="%s">Piwigo message board</a>.'), PHPWG_URL.'/forum'),
414    ));
415
416//------------------------------------------------------ errors & infos display
417if ($step == 1)
418{
419  $template->assign('install', true);
420}
421else
422{
423  array_push(
424    $infos,
425    l10n('Congratulations, Piwigo installation is completed')
426    );
427
428  if (isset($error_copy))
429  {
430    array_push($errors, $error_copy);
431  }
432  else
433  {
434    session_set_save_handler('pwg_session_open',
435      'pwg_session_close',
436      'pwg_session_read',
437      'pwg_session_write',
438      'pwg_session_destroy',
439      'pwg_session_gc'
440    );
441    if ( function_exists('ini_set') )
442    {
443      ini_set('session.use_cookies', $conf['session_use_cookies']);
444      ini_set('session.use_only_cookies', $conf['session_use_only_cookies']);
445      ini_set('session.use_trans_sid', intval($conf['session_use_trans_sid']));
446      ini_set('session.cookie_httponly', 1);
447    }
448    session_name($conf['session_name']);
449    session_set_cookie_params(0, cookie_path());
450    $user = build_user(1, true);
451    log_user($user['id'], false);
452  }
453
454  $template->assign(
455    'SUBSCRIBE_BASE_URL',
456    get_newsletter_subscribe_base_url($language)
457    );
458}
459if (count($errors) != 0)
460{
461  $template->assign('errors', $errors);
462}
463
464if (count($infos) != 0 )
465{
466  $template->assign('infos', $infos);
467}
468
469//----------------------------------------------------------- html code display
470$template->pparse('install');
471?>
Note: See TracBrowser for help on using the repository browser.