thomascube
2008-02-20 6557d3005ca187912cf053f3897c43a991916e56
Added environment checks from check.php-dist

6 files modified
199 ■■■■■ changed files
installer/check.php 131 ●●●●● patch | view | raw | blame | history
installer/config.php 7 ●●●●● patch | view | raw | blame | history
installer/index.php 2 ●●●●● patch | view | raw | blame | history
installer/rcube_install.php 27 ●●●●● patch | view | raw | blame | history
installer/styles.css 14 ●●●●● patch | view | raw | blame | history
installer/welcome.html 18 ●●●●● patch | view | raw | blame | history
installer/check.php
@@ -1,10 +1,133 @@
<form action="index.php" method="get">
<input type="hidden" name="_step" value="2" />
<?php
echo '<p>[do some tests as in check.php-dist here]</p>';
$docroot = realpath(dirname(__FILE__) . '/../');
$include_path  = $docroot . '/program/lib' . PATH_SEPARATOR . $docroot . '/program' . PATH_SEPARATOR . ini_get('include_path');
set_include_path($include_path);
echo '<input type="submit" value="NEXT" ' . ($RCI->failures ? 'disabled' : '') . ' />';
$required_php_exts = array('PCRE' => 'pcre', 'Session' => 'session', 'Sockets' => 'sockets');
$optional_php_exts = array('FileInfo' => 'fileinfo', 'Libiconv' => 'iconv', 'Multibyte' => 'mbstring', 'OpenSSL' => 'openssl');
$required_libs = array('PEAR' => 'PEAR.php', 'DB' => 'DB.php', 'MDB2' => 'MDB2.php',
    'Net_SMTP' => 'Net/SMTP.php', 'Mail_mime' => 'Mail/mime.php', 'iilConnection' => 'lib/imap.inc');
$supported_dbs = array('MySQL' => 'mysql', 'MySQLi' => 'mysqli',
    'PostgreSQL' => 'pgsql', 'SQLite (v2)' => 'sqlite');
$source_urls = array(
    'Sockets' => 'http://www.php.net/manual/en/ref.sockets.php',
    'Session' => 'http://www.php.net/manual/en/ref.session.php',
    'PCRE' => 'http://www.php.net/manual/en/ref.pcre.php',
    'FileInfo' => 'http://www.php.net/manual/en/ref.fileinfo.php',
    'Libiconv' => 'http://www.php.net/manual/en/ref.iconv.php',
    'Multibyte' => 'http://www.php.net/manual/en/ref.mbstring.php',
    'OpenSSL' => 'http://www.php.net/manual/en/ref.openssl.php',
    'PEAR' => 'http://pear.php.net',
    'MDB2' => 'http://pear.php.net/package/MDB2',
    'Net_SMTP' => 'http://pear.php.net/package/Net_SMTP',
    'Mail_mime' => 'http://pear.php.net/package/Mail_mime'
);
?>
<form action="index.php" method="get">
<input type="hidden" name="_step" value="2" />
<h3>Checking PHP version</h3>
<?php
if (phpversion() > 4.3) {
    $RCI->pass('Version', 'PHP ' . phpversion() . ' detected');
}
else {
    $RCI->fail('Version', 'PHP Version 4.3.1 or greater is required');
}
?>
<h3>Checking PHP extensions</h3>
<p class="hint">The following modules/extensions are <em>required</em> to run RoundCube:</p>
<?php
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
foreach ($required_php_exts AS $name => $ext) {
    if (extension_loaded($ext)) {
        $RCI->pass($name);
    }
    else {
        $_ext = $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
        $msg = @dl($_ext) ? 'Could be loaded. Please add in php.ini' : '';
        $RCI->fail($name, $msg, $source_urls[$name]);
    }
    echo '<br />';
}
?>
<p class="hint">These extensions are <em>optional</em> but recommended to get the best performance:</p>
<?php
foreach ($optional_php_exts AS $name => $ext) {
    if (extension_loaded($ext)) {
        $RCI->pass($name);
    }
    else {
        $_ext = $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
        $msg = @dl($_ext) ? 'Could be loaded. Please add in php.ini' : '';
        $RCI->na($name, $msg, $source_urls[$name]);
    }
    echo '<br />';
}
?>
<h3>Checking available databases</h3>
<p class="hint">Check which of the supported extensions are installed. At least one of them is required.</p>
<?php
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
foreach ($supported_dbs AS $database => $ext) {
    if (extension_loaded($ext)) {
        $RCI->pass($database);
    }
    else {
        $_ext = $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
        $msg = @dl($_ext) ? 'Could be loaded. Please add in php.ini' : 'Not installed';
        $RCI->na($database, $msg, $source_urls[$database]);
    }
    echo '<br />';
}
?>
<h3>Check for required 3rd party libs</h3>
<p class="hint">This also checks if the include path is set correctly.</p>
<?php
foreach ($required_libs as $classname => $file) {
    @include_once $file;
    if (class_exists($classname)) {
        $RCI->pass($classname);
    }
    else if ($classname == 'DB' || ($classname == 'MDB2' && class_exists('DB'))) {
        $RCI->na($classname, 'Use ' . ($classname == 'DB' ? 'MDB2' : 'DB') . ' instead');
    }
    else {
        $RCI->fail($classname, "Failed to load $file", $source_urls[$classname]);
    }
    echo "<br />";
}
if ($RCI->failures)
  echo '<p class="warning">Sorry but your webserver does not meet the requirements for RoundCube!<br />
            Please install the missing modules according to the above check results.</p>';
echo '<p><br /><input type="submit" value="NEXT" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';
?>
</form>
installer/config.php
@@ -114,6 +114,13 @@
</fieldset>
<fieldset>
<legend>Database setup</legend>
<dl>
<dd>TBD.</dd>
</dl>
</fieldset>
<fieldset>
<legend>IMAP Settings</legend>
<dl>
<dt class="propname">auto_create_user</dt>
installer/index.php
@@ -25,6 +25,8 @@
<?php
  ini_set('display_errors', 1);
  require_once 'rcube_install.php';
  $RCI = new rcube_install();
installer/rcube_install.php
@@ -124,8 +124,7 @@
  function pass($name, $message = '')
  {
    echo Q($name) . ':&nbsp; <span class="success">OK</span>';
    if ($message)
      echo '<span class="indent">' . Q($name) . '</span>';
    $this->_showhint($message);
  }
  
  
@@ -141,10 +140,7 @@
    $this->failures++;
    
    echo Q($name) . ':&nbsp; <span class="fail">NOT OK</span>';
    if ($message)
      echo '<span class="indent">' . Q($name) . '</span>';
    if ($url)
      echo '<span class="indent">(See <a href="' . Q($url) . '" target="_blank">' . Q($url) . '</a>)</span>';
    $this->_showhint($message, $url);
  }
  
  
@@ -155,13 +151,22 @@
   * @param string Warning message
   * @param string URL for details
   */
  function warning($name, $message = '', $url = '')
  function na($name, $message = '', $url = '')
  {
    echo Q($name) . ':&nbsp; <span class="warning">NOT AVAILABLE</span>';
    if ($message)
      echo '<span class="indent">' . Q($name) . '</span>';
    echo Q($name) . ':&nbsp; <span class="na">NOT AVAILABLE</span>';
    $this->_showhint($message, $url);
  }
  function _showhint($message, $url = '')
  {
    $hint = Q($message);
    if ($url)
      echo '<span class="indent">(See <a href="' . Q($url) . '" target="_blank">' . Q($url) . '</a>)</span>';
      $hint .= ($hint ? '; ' : '') . 'See <a href="' . Q($url) . '" target="_blank">' . Q($url) . '</a>';
    if ($hint)
      echo '<span class="indent">(' . $hint . ')</span>';
  }
  
  
installer/styles.css
@@ -145,6 +145,20 @@
  text-align: left;
}
ul li {
  margin: 0.3em 0 0.4em -1em;
}
ul li ul li {
  margin-bottom: 0.2em;
}
h3 {
  font-size: 1.1em;
  margin-top: 1.5em;
  margin-bottom: 0.6em;
}
h4 {
  margin-bottom: 0.2em;
}
installer/welcome.html
@@ -6,7 +6,23 @@
<p>The basic requirements are:</p>
<ul>
  <li></li>
  <li>PHP Version 4.3.1 or greater including
    <ul>
      <li>PCRE (perl compatible regular expression)</li>
      <li>Session support</li>
      <li>libiconv (recommended)</li>
      <li>mbstring (optional)</li>
      </ul>
    </li>
    <li>php.ini options:
      <ul>
        <li>error_reporting E_ALL &amp; ~E_NOTICE (or lower)</li>
        <li>file_uploads on (for attachment upload features)</li>
        <li>session.auto_start needs to be off</li>
      </ul>
    </li>
    <li>A MySQL or PostgreSQL database engine or the SQLite extension for PHP</li>
    <li>An SMTP server (recommended) or PHP configured for mail delivery</li>
</ul>
<input type="submit" value="START" />