source: trunk/install.php @ 19945

Last change on this file since 19945 was 19703, checked in by plg, 11 years ago

update Piwigo headers to 2013 (the end of the world didn't occur as expected on r12922)

  • Property svn:eol-style set to LF
File size: 15.3 KB
RevLine 
[218]1<?php
[354]2// +-----------------------------------------------------------------------+
[8728]3// | Piwigo - a PHP based photo gallery                                    |
[2297]4// +-----------------------------------------------------------------------+
[19703]5// | Copyright(C) 2008-2013 Piwigo Team                  http://piwigo.org |
[2297]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// +-----------------------------------------------------------------------+
[218]23
[367]24//----------------------------------------------------------- include
25define('PHPWG_ROOT_PATH','./');
[345]26
[3747]27@set_magic_quotes_runtime(0); // Disable magic_quotes_runtime
[367]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//
[4006]32if( !@get_magic_quotes_gpc() )
[218]33{
[367]34  if( is_array($_POST) )
[218]35  {
[367]36    while( list($k, $v) = each($_POST) )
[218]37    {
[367]38      if( is_array($_POST[$k]) )
[218]39      {
[367]40        while( list($k2, $v2) = each($_POST[$k]) )
41        {
42          $_POST[$k][$k2] = addslashes($v2);
43        }
44        @reset($_POST[$k]);
[218]45      }
46      else
47      {
[367]48        $_POST[$k] = addslashes($v);
[218]49      }
50    }
[367]51    @reset($_POST);
52  }
53
[1855]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
[367]74  if( is_array($_COOKIE) )
75  {
76    while( list($k, $v) = each($_COOKIE) )
[218]77    {
[367]78      if( is_array($_COOKIE[$k]) )
[218]79      {
[367]80        while( list($k2, $v2) = each($_COOKIE[$k]) )
81        {
82          $_COOKIE[$k][$k2] = addslashes($v2);
83        }
84        @reset($_COOKIE[$k]);
[218]85      }
86      else
87      {
[367]88        $_COOKIE[$k] = addslashes($v);
[218]89      }
90    }
[367]91    @reset($_COOKIE);
[218]92  }
[367]93}
[218]94
[367]95//----------------------------------------------------- variable initialization
[1147]96
[2339]97define('DEFAULT_PREFIX_TABLE', 'piwigo_');
[1147]98
99if (isset($_POST['install']))
100{
[5220]101  $prefixeTable = $_POST['prefix'];
[1147]102}
103else
104{
[5220]105  $prefixeTable = DEFAULT_PREFIX_TABLE;
[1147]106}
[367]107
[5220]108include(PHPWG_ROOT_PATH . 'include/config_default.inc.php');
109@include(PHPWG_ROOT_PATH. 'local/config/config.inc.php');
[12769]110defined('PWG_LOCAL_DIR') or define('PWG_LOCAL_DIR', 'local/');
[5220]111
[5266]112// download database config file if exists
[12802]113if (!empty($_GET['dl']) && file_exists(PHPWG_ROOT_PATH.$conf['data_location'].'pwg_'.$_GET['dl']))
[5266]114{
[12802]115  $filename = PHPWG_ROOT_PATH.$conf['data_location'].'pwg_'.$_GET['dl'];
[5266]116  header('Cache-Control: no-cache, must-revalidate');
117  header('Pragma: no-cache');
118  header('Content-Disposition: attachment; filename="database.inc.php"');
119  header('Content-Transfer-Encoding: binary');
120  header('Content-Length: '.filesize($filename));
121  echo file_get_contents($filename);
122  unlink($filename);
123  exit();
124} 
125
[5220]126// Obtain various vars
127$dbhost = (!empty($_POST['dbhost'])) ? $_POST['dbhost'] : 'localhost';
128$dbuser = (!empty($_POST['dbuser'])) ? $_POST['dbuser'] : '';
129$dbpasswd = (!empty($_POST['dbpasswd'])) ? $_POST['dbpasswd'] : '';
130$dbname = (!empty($_POST['dbname'])) ? $_POST['dbname'] : '';
[12103]131$dblayer = 'mysql';
[5220]132
[367]133$admin_name = (!empty($_POST['admin_name'])) ? $_POST['admin_name'] : '';
134$admin_pass1 = (!empty($_POST['admin_pass1'])) ? $_POST['admin_pass1'] : '';
135$admin_pass2 = (!empty($_POST['admin_pass2'])) ? $_POST['admin_pass2'] : '';
136$admin_mail = (!empty($_POST['admin_mail'])) ? $_POST['admin_mail'] : '';
137
[8311]138$is_newsletter_subscribe = true;
139if (isset($_POST['install']))
140{
141  $is_newsletter_subscribe = isset($_POST['newsletter_subscribe']);
142}
143
[367]144$infos = array();
145$errors = array();
146
[8722]147$config_file = PHPWG_ROOT_PATH.PWG_LOCAL_DIR .'config/database.inc.php';
[5983]148if (@file_exists($config_file))
[4423]149{
[529]150  include($config_file);
[2339]151  // Is Piwigo already installed ?
[529]152  if (defined("PHPWG_INSTALLED"))
153  {
[2339]154    die('Piwigo is already installed');
[529]155  }
[367]156}
157
[529]158include(PHPWG_ROOT_PATH . 'include/constants.php');
159include(PHPWG_ROOT_PATH . 'include/functions.inc.php');
[1221]160include(PHPWG_ROOT_PATH . 'admin/include/functions.php');
[529]161
[5357]162include(PHPWG_ROOT_PATH . 'admin/include/languages.class.php');
163$languages = new languages('utf-8');
164
[2248]165if (isset($_GET['language']))
[405]166{
[2248]167  $language = strip_tags($_GET['language']);
[13956]168 
169  if (!in_array($language, array_keys($languages->fs_languages)))
170  {
171    $language = PHPWG_DEFAULT_LANGUAGE;
172  }
[367]173}
[2127]174else
[1855]175{
[2127]176  $language = 'en_UK';
[2248]177  // Try to get browser language
[9518]178  foreach ($languages->fs_languages as $language_code => $fs_language)
[2248]179  {
180    if (substr($language_code,0,2) == @substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2))
181    {
182      $language = $language_code;
183      break;
184    }
185  }
[1855]186}
[367]187
[3197]188if ('fr_FR' == $language) {
189  define('PHPWG_DOMAIN', 'fr.piwigo.org');
190}
[5234]191else if ('it_IT' == $language) {
192  define('PHPWG_DOMAIN', 'it.piwigo.org');
193}
[4047]194else if ('de_DE' == $language) {
195  define('PHPWG_DOMAIN', 'de.piwigo.org');
196}
197else if ('es_ES' == $language) {
198  define('PHPWG_DOMAIN', 'es.piwigo.org');
199}
[4816]200else if ('pl_PL' == $language) {
201  define('PHPWG_DOMAIN', 'pl.piwigo.org');
202}
203else if ('zh_CN' == $language) {
204  define('PHPWG_DOMAIN', 'cn.piwigo.org');
205}
[6152]206else if ('hu_HU' == $language) {
[5234]207  define('PHPWG_DOMAIN', 'hu.piwigo.org');
208}
[6152]209else if ('ru_RU' == $language) {
[5234]210  define('PHPWG_DOMAIN', 'ru.piwigo.org');
211}
[6152]212else if ('nl_NL' == $language) {
213  define('PHPWG_DOMAIN', 'nl.piwigo.org');
214}
[3197]215else {
216  define('PHPWG_DOMAIN', 'piwigo.org');
217}
218define('PHPWG_URL', 'http://'.PHPWG_DOMAIN);
219
[5983]220load_language('common.lang', '', array('language' => $language, 'target_charset'=>'utf-8'));
221load_language('admin.lang', '', array('language' => $language, 'target_charset'=>'utf-8'));
222load_language('install.lang', '', array('language' => $language, 'target_charset'=>'utf-8'));
223
[4463]224header('Content-Type: text/html; charset=UTF-8');
[3203]225//------------------------------------------------- check php version
226if (version_compare(PHP_VERSION, REQUIRED_PHP_VERSION, '<'))
227{
228  include(PHPWG_ROOT_PATH.'install/php5_apache_configuration.php');
229}
230
[367]231//----------------------------------------------------- template initialization
[8310]232$template = new Template(PHPWG_ROOT_PATH.'admin/themes', 'clear');
[4423]233$template->set_filenames( array('install' => 'install.tpl') );
234if (!isset($step))
235{
236  $step = 1;
237}
[529]238//---------------------------------------------------------------- form analyze
[5384]239include(PHPWG_ROOT_PATH .'include/dblayer/functions_'.$dblayer.'.inc.php');
240include(PHPWG_ROOT_PATH . 'admin/include/functions_install.inc.php');
[5387]241include(PHPWG_ROOT_PATH . 'admin/include/functions_upgrade.php');
[5384]242
[367]243if ( isset( $_POST['install'] ))
244{
[5982]245  install_db_connect($infos, $errors);
246  pwg_db_check_charset();
[5384]247
[382]248  $webmaster = trim(preg_replace( '/\s{2,}/', ' ', $admin_name ));
249  if ( empty($webmaster))
[5021]250    array_push( $errors, l10n('enter a login for webmaster') );
[382]251  else if ( preg_match( '/[\'"]/', $webmaster ) )
[5207]252    array_push( $errors, l10n('webmaster login can\'t contain characters \' or "') );
[382]253  if ( $admin_pass1 != $admin_pass2 || empty($admin_pass1) )
[5021]254    array_push( $errors, l10n('please enter your password again') );
[382]255  if ( empty($admin_mail))
[5021]256    array_push( $errors, l10n('mail address must be like xxx@yyy.eee (example : jack@altern.org)') );
[2127]257  else
[382]258  {
[2124]259    $error_mail_address = validate_mail_address(null, $admin_mail);
[382]260    if (!empty($error_mail_address))
261      array_push( $errors, $error_mail_address );
262  }
[2127]263
[382]264  if ( count( $errors ) == 0 )
265  {
266    $step = 2;
[1147]267    $file_content = '<?php
[4410]268$conf[\'dblayer\'] = \''.$dblayer.'\';
[4280]269$conf[\'db_base\'] = \''.$dbname.'\';
270$conf[\'db_user\'] = \''.$dbuser.'\';
271$conf[\'db_password\'] = \''.$dbpasswd.'\';
272$conf[\'db_host\'] = \''.$dbhost.'\';
[1147]273
[5220]274$prefixeTable = \''.$prefixeTable.'\';
[1147]275
276define(\'PHPWG_INSTALLED\', true);
[5982]277define(\'PWG_CHARSET\', \'utf-8\');
278define(\'DB_CHARSET\', \'utf8\');
[2127]279define(\'DB_COLLATE\', \'\');
280
[1147]281?'.'>';
[2127]282
[382]283    @umask(0111);
284    // writing the configuration file
285    if ( !($fp = @fopen( $config_file, 'w' )))
[367]286    {
[5266]287      $tmp_filename = md5(uniqid(time()));
[12802]288      $fh = @fopen( PHPWG_ROOT_PATH.$conf['data_location'] . 'pwg_' . $tmp_filename, 'w' );
[5266]289      @fputs($fh, $file_content, strlen($file_content));
290      @fclose($fh);
291
[5571]292      $template->assign(
293        array(
294          'config_creation_failed' => true,
295          'config_url' => 'install.php?dl='.$tmp_filename,
296          'config_file_content' => $file_content,
297          )
[5266]298        );
[382]299    }
300    @fputs($fp, $file_content, strlen($file_content));
301    @fclose($fp);
[2127]302
[2339]303    // tables creation, based on piwigo_structure.sql
[1147]304    execute_sqlfile(
[4410]305      PHPWG_ROOT_PATH.'install/piwigo_structure-'.$dblayer.'.sql',
[1147]306      DEFAULT_PREFIX_TABLE,
[5982]307      $prefixeTable,
308      $dblayer
[1147]309      );
[382]310    // We fill the tables with basic informations
[1147]311    execute_sqlfile(
312      PHPWG_ROOT_PATH.'install/config.sql',
313      DEFAULT_PREFIX_TABLE,
[5982]314      $prefixeTable,
315      $dblayer
[1147]316      );
[218]317
[4410]318    $query = '
[5220]319INSERT INTO '.$prefixeTable.'config (param,value,comment)
[6130]320   VALUES (\'secret_key\',md5('.pwg_db_cast_to_text(DB_RANDOM_FUNCTION.'()').'),
[4410]321   \'a secret key specific to the gallery for internal use\');';
322    pwg_query($query);
323
[11511]324    conf_update_param('piwigo_db_version', get_branch_from_version(PHPWG_VERSION));
[12008]325    conf_update_param('gallery_title', l10n('Just another Piwigo gallery'));
326    conf_update_param('page_banner', '<h1>%gallery_title%</h1>'."\n\n<p>".l10n('Welcome to my photo gallery').'</p>');
[11511]327
[5341]328    // fill languages table
[9520]329    foreach ($languages->fs_languages as $language_code => $fs_language)
[5341]330    {
[5357]331      $languages->perform_action('activate', $language_code);
[5341]332    }
333
[1284]334    // fill $conf global array
335    load_conf_from_db();
336
[5340]337    // PWG_CHARSET is required for building the fs_themes array in the
338    // themes class
[5452]339    if (!defined('PWG_CHARSET'))
340    {
[5982]341      define('PWG_CHARSET', 'utf-8');
[5452]342    }
[5982]343    activate_core_themes();
[5340]344
[1284]345    $insert = array(
346      'id' => 1,
347      'galleries_url' => PHPWG_ROOT_PATH.'galleries/',
348      );
349    mass_inserts(SITES_TABLE, array_keys($insert), array($insert));
[2127]350
[382]351    // webmaster admin user
[1284]352    $inserts = array(
353      array(
354        'id'           => 1,
355        'username'     => $admin_name,
356        'password'     => md5($admin_pass1),
357        'mail_address' => $admin_mail,
358        ),
359      array(
360        'id'           => 2,
361        'username'     => 'guest',
362        ),
363      );
364    mass_inserts(USERS_TABLE, array_keys($inserts[0]), $inserts);
[801]365
[1930]366    create_user_infos(array(1,2), array('language' => $language));
[808]367
[1027]368    // Available upgrades must be ignored after a fresh installation. To
369    // make PWG avoid upgrading, we must tell it upgrades have already been
370    // made.
[4325]371    list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
[1221]372    define('CURRENT_DATE', $dbnow);
373    $datas = array();
[1027]374    foreach (get_available_upgrade_ids() as $upgrade_id)
375    {
[1221]376      array_push(
377        $datas,
378        array(
379          'id'          => $upgrade_id,
380          'applied'     => CURRENT_DATE,
381          'description' => 'upgrade included in installation',
382          )
383        );
[1027]384    }
[1221]385    mass_inserts(
386      UPGRADE_TABLE,
387      array_keys($datas[0]),
388      $datas
389      );
[8311]390
391    if ($is_newsletter_subscribe)
392    {
393      fetchRemote(
394        get_newsletter_subscribe_base_url($language).$admin_mail,
395        $result,
396        array(),
397        array('origin' => 'installation')
398        );
399    }
[382]400  }
[367]401}
[218]402
[2248]403//------------------------------------------------------ start template output
[9518]404foreach ($languages->fs_languages as $language_code => $fs_language)
[4423]405{
[5983]406  if ($language == $language_code)
[4423]407  {
[5983]408    $template->assign('language_selection', $language_code);
[4423]409  }
[9518]410  $languages_options[$language_code] = $fs_language['name'];
[4423]411}
[5983]412$template->assign('language_options', $languages_options);
[4423]413
[5983]414$template->assign(
415  array(
416    'T_CONTENT_ENCODING' => 'utf-8',
417    'RELEASE' => PHPWG_VERSION,
418    'F_ACTION' => 'install.php?language=' . $language,
419    'F_DB_HOST' => $dbhost,
420    'F_DB_USER' => $dbuser,
421    'F_DB_NAME' => $dbname,
422    'F_DB_PREFIX' => $prefixeTable,
423    'F_ADMIN' => $admin_name,
424    'F_ADMIN_EMAIL' => $admin_mail,
[8311]425    'EMAIL' => '<span class="adminEmail">'.$admin_mail.'</span>',
426    'F_NEWSLETTER_SUBSCRIBE' => $is_newsletter_subscribe,
[5983]427    'L_INSTALL_HELP' => sprintf(l10n('Need help ? Ask your question on <a href="%s">Piwigo message board</a>.'), PHPWG_URL.'/forum'),
428    ));
[4423]429
[529]430//------------------------------------------------------ errors & infos display
[2747]431if ($step == 1)
432{
433  $template->assign('install', true);
434}
435else
436{
[5408]437  array_push(
438    $infos,
439    l10n('Congratulations, Piwigo installation is completed')
440    );
[2747]441
442  if (isset($error_copy))
443  {
444    array_push($errors, $error_copy);
445  }
[3715]446  else
447  {
448    session_set_save_handler('pwg_session_open',
449      'pwg_session_close',
450      'pwg_session_read',
451      'pwg_session_write',
452      'pwg_session_destroy',
453      'pwg_session_gc'
454    );
455    if ( function_exists('ini_set') )
456    {
457      ini_set('session.use_cookies', $conf['session_use_cookies']);
458      ini_set('session.use_only_cookies', $conf['session_use_only_cookies']);
459      ini_set('session.use_trans_sid', intval($conf['session_use_trans_sid']));
460      ini_set('session.cookie_httponly', 1);
461    }
462    session_name($conf['session_name']);
463    session_set_cookie_params(0, cookie_path());
464    $user = build_user(1, true);
465    log_user($user['id'], false);
[12883]466   
467    // email notification
[12885]468    if (isset($_POST['send_password_by_mail']))
469    {
470      include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
471           
472      $keyargs_content = array(
473        get_l10n_args('Hello %s,', $admin_name),
474        get_l10n_args('Welcome to your new installation of Piwigo!', ''),
475        get_l10n_args('', ''),
[12886]476        get_l10n_args('Here are your connection settings', ''),
477        get_l10n_args('Username: %s', $admin_name),
478        get_l10n_args('Password: %s', $admin_pass1),
479        get_l10n_args('Email: %s', $admin_mail),
[12885]480        get_l10n_args('', ''),
481        get_l10n_args('Don\'t hesitate to consult our forums for any help: %s', PHPWG_URL),
482        );
483       
484      pwg_mail(
485        $admin_mail,
486        array(
[12886]487          'subject' => l10n('Just another Piwigo gallery'),
[12885]488          'content' => l10n_args($keyargs_content),
489          'content_format' => 'text/plain',
490          )
491        );
492    }
[3715]493  }
[2747]494}
[2248]495if (count($errors) != 0)
[367]496{
[2248]497  $template->assign('errors', $errors);
[367]498}
[218]499
[2248]500if (count($infos) != 0 )
[367]501{
[2248]502  $template->assign('infos', $infos);
[367]503}
[218]504
505//----------------------------------------------------------- html code display
[367]506$template->pparse('install');
[3203]507?>
Note: See TracBrowser for help on using the repository browser.