decir/install.php
author Dan
Thu, 29 Nov 2007 21:48:02 -0500
changeset 11 5585ac341820
parent 6 3f66ec435f08
permissions -rw-r--r--
SECURITY: fix stupid XSS vulnerability on initial post submit; add in support for the new search API
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
     1
<?php
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
     2
/*
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
     3
 * Decir
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
     4
 * Version 0.1
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
     5
 * Copyright (C) 2007 Dan Fuhry
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
     6
 * install.php - Database installation wizard
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
     7
 *
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
     8
 * This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
     9
 * as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    10
 *
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    11
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    12
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    13
 */
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    14
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    15
require('common.php');
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    16
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    17
if ( $session->auth_level < USER_LEVEL_ADMIN )
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    18
{
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    19
  header('Location: ' . makeUrlComplete('Special', 'Login/' . $paths->page, 'level=9', true));
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    20
  exit;
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    21
}
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    22
6
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    23
function install_decir()
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    24
{
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    25
  global $db, $session, $paths, $template, $plugins; // Common objects
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    26
  if ( $session->auth_level < USER_LEVEL_ADMIN )
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    27
    die('Snotty son of a b**** you are being today...');
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    28
  
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    29
  // Build an array of queries
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    30
  $schema = @file_get_contents( DECIR_ROOT . '/install.sql' );
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    31
  if ( !$schema )
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    32
  {
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    33
    echo '<pre>Decir installation error: can\'t load schema file</pre>';
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    34
    return false;
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    35
  }
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    36
  
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    37
  // Variables
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    38
  $schema = str_replace('{{TABLE_PREFIX}}', table_prefix, $schema);
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    39
  
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    40
  $schema = explode("\n", $schema);
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    41
  
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    42
  foreach ( $schema as $i => $sql )
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    43
  {
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    44
    $query =& $schema[$i];
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    45
    $t = trim($query);
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    46
    if ( empty($t) || preg_match('/^(\#|--)/i', $t) )
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    47
    {
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    48
      unset($schema[$i]);
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    49
      unset($query);
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    50
    }
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    51
  }
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    52
  
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    53
  $schema = array_values($schema);
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    54
  $schema = implode("\n", $schema);
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    55
  $schema = explode(";\n", $schema);
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    56
  
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    57
  foreach ( $schema as $i => $sql )
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    58
  {
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    59
    $query =& $schema[$i];
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    60
    if ( substr($query, ( strlen($query) - 1 ), 1 ) != ';' )
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    61
    {
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    62
      $query .= ';';
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    63
    }
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    64
  }
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    65
  
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    66
  foreach ( $schema as $sql )
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    67
  {
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    68
    $q = $db->sql_query($sql);
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    69
    if ( !$q )
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    70
    {
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    71
      echo '<pre>Decir installation failed: ' . $db->get_error() . '</pre>';
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    72
      return false;
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    73
    }
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    74
  }
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    75
  
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    76
  return true;
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    77
}
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    78
0
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    79
if ( $v = getConfig('decir_version') )
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    80
{
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    81
  $mode = 'upgrade';
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    82
  $upg_ver = $v;
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    83
}
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    84
else
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    85
{
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    86
  $mode = 'install';
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    87
}
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    88
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    89
$page = ( isset($_POST['step']) && in_array($_POST['step'], array('welcome', 'install', 'finish')) ) ? $_POST['step'] : 'welcome';
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    90
6
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    91
if ( $page == 'finish' )
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    92
{
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    93
  require('forum_index.php');
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    94
}
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    95
else
0
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
    96
{
6
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    97
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    98
  $template->header();
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
    99
  
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   100
  switch($page)
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   101
  {
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   102
    case 'welcome':
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   103
      ?>
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   104
      <h3>Welcome to Decir, the Enano bulletin board suite.</h3>
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   105
      <p>Before you can use your forum, we'll need to run a few database queries to get the forum set up.</p>
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   106
      <form action="<?php echo makeUrl($paths->page); ?>" method="post">
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   107
        <input type="hidden" name="step" value="install" />
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   108
        <input type="submit" value="Continue" style="display: block; margin: 0 auto;" />
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   109
      </form>
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   110
      <?php
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   111
      break;
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   112
    case 'install':
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   113
      $result = install_decir();
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   114
      if ( $result ):
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   115
        setConfig('decir_version', ENANO_DECIR_VERSION);
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   116
        setConfig('decir_install_date', time());
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   117
        ?>
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   118
        <p>Decir has been successfully installed.</p>
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   119
        <form action="<?php echo makeUrl($paths->page); ?>" method="post">
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   120
          <input type="hidden" name="step" value="finish" />
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   121
          <input type="submit" name="do_install_finish" value="Next &gt;" style="display: block; margin: 0 auto;" />
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   122
        </form>
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   123
        <?php
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   124
      else:
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   125
        echo 'ERROR: Decir installation failed.';
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   126
      endif;
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   127
      break;
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   128
  }
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   129
  
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   130
$template->footer();
3f66ec435f08 Some basic admin implemented
Dan
parents: 0
diff changeset
   131
  
0
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
   132
}
0417a5a0c7be Initial repository population
dan@fuhry
parents:
diff changeset
   133