bug fix #266: make installation steps easier

This commit is contained in:
Nicolas Lœuillet 2013-10-07 13:12:28 +02:00
parent 5eebe4e50d
commit 9d3b88b379
3 changed files with 57 additions and 44 deletions

View file

@ -20,7 +20,7 @@ class Poche
public $pagination;
private $currentTheme = '';
private $notInstalledMessage = '';
private $notInstalledMessage = array();
# @todo make this dynamic (actually install themes and save them in the database including author information et cetera)
private $installedThemes = array(
@ -33,28 +33,21 @@ class Poche
public function __construct()
{
if (! $this->configFileIsAvailable()) {
return;
if ($this->configFileIsAvailable()) {
$this->init();
}
$this->init();
if (! $this->themeIsInstalled()) {
return;
if ($this->themeIsInstalled()) {
$this->initTpl();
}
$this->initTpl();
if (! $this->systemIsInstalled()) {
return;
}
$this->store = new Database();
$this->messages = new Messages();
# installation
if (! $this->store->isInstalled()) {
$this->install();
if ($this->systemIsInstalled()) {
$this->store = new Database();
$this->messages = new Messages();
# installation
if (! $this->store->isInstalled()) {
$this->install();
}
}
}
@ -94,7 +87,7 @@ class Poche
public function configFileIsAvailable() {
if (! self::$configFileAvailable) {
$this->notInstalledMessage = 'You have to rename <strong>inc/poche/config.inc.php.new</strong> to <strong>inc/poche/config.inc.php</strong>.';
$this->notInstalledMessage[] = 'You have to rename inc/poche/config.inc.php.new to inc/poche/config.inc.php.';
return false;
}
@ -103,39 +96,44 @@ class Poche
}
public function themeIsInstalled() {
$passTheme = TRUE;
# Twig is an absolute requirement for Poche to function. Abort immediately if the Composer installer hasn't been run yet
if (! self::$canRenderTemplates) {
$this->notInstalledMessage = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at <a href="http://doc.inthepoche.com/doku.php?id=users:begin:install">the documentation.</a>';
return false;
$this->notInstalledMessage[] = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at <a href="http://doc.inthepoche.com/doku.php?id=users:begin:install">the documentation.</a>';
$passTheme = FALSE;
}
if (! is_writable(CACHE)) {
$this->notInstalledMessage = '<h1>error</h1><p>You don\'t have write access on cache directory.</p>';
$this->notInstalledMessage[] = 'You don\'t have write access on cache directory.';
self::$canRenderTemplates = false;
return false;
$passTheme = FALSE;
}
# Check if the selected theme and its requirements are present
if (! is_dir(THEME . '/' . $this->getTheme())) {
$this->notInstalledMessage = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')';
if ($this->getTheme() != '' && ! is_dir(THEME . '/' . $this->getTheme())) {
$this->notInstalledMessage[] = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')';
self::$canRenderTemplates = false;
return false;
$passTheme = FALSE;
}
foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) {
if (! is_dir(THEME . '/' . $requiredTheme)) {
$this->notInstalledMessage = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')';
$this->notInstalledMessage[] = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')';
self::$canRenderTemplates = false;
return false;
$passTheme = FALSE;
}
}
if (!$passTheme) {
return FALSE;
}
return true;
}
@ -147,25 +145,30 @@ class Poche
*/
public function systemIsInstalled()
{
$msg = '';
$msg = TRUE;
$configSalt = defined('SALT') ? constant('SALT') : '';
if (empty($configSalt)) {
$msg = '<h1>error</h1><p>You have not yet filled in the SALT value in the config.inc.php file.</p>';
} else if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) {
$this->notInstalledMessage[] = 'You have not yet filled in the SALT value in the config.inc.php file.';
$msg = FALSE;
}
if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) {
Tools::logm('sqlite file doesn\'t exist');
$msg = '<h1>error</h1><p>sqlite file doesn\'t exist, you can find it in install folder. Copy it in /db folder.</p>';
} else if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) {
$msg = '<h1>install folder</h1><p>you have to delete the /install folder before using poche.</p>';
} else if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) {
$this->notInstalledMessage[] = 'sqlite file doesn\'t exist, you can find it in install folder. Copy it in /db folder.';
$msg = FALSE;
}
if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) {
$this->notInstalledMessage[] = 'you have to delete the /install folder before using poche.';
$msg = FALSE;
}
if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) {
Tools::logm('you don\'t have write access on sqlite file');
$msg = '<h1>error</h1><p>You don\'t have write access on sqlite file.</p>';
$this->notInstalledMessage[] = 'You don\'t have write access on sqlite file.';
$msg = FALSE;
}
if (! empty($msg)) {
$this->notInstalledMessage = $msg;
if (! $msg) {
return false;
}

View file

@ -35,7 +35,12 @@ $tpl_vars = array(
if (! empty($notInstalledMessage)) {
if (! Poche::$canRenderTemplates || ! Poche::$configFileAvailable) {
# We cannot use Twig to display the error message
die($notInstalledMessage);
echo '<h1>Errors</h1><ol>';
foreach ($notInstalledMessage as $message) {
echo '<li>' . $message . '</li>';
}
echo '</ol>';
die();
} else {
# Twig is installed, put the error message in the template
$tpl_file = Tools::getTplFile('error');

View file

@ -1,6 +1,11 @@
{% extends "layout.twig" %}
{% block title %}{% trans "plop" %}{% endblock %}
{% block content %}
{{ msg|raw }}
<p>Don't forget <a href="http://inthepoche.com/doc">the documentation</a>.</p>
<h1>Errors</h1>
<ol>
{% for message in msg %}
<li>{{message}}</li>
{% endfor %}
</ol>
<p>Don't forget <a href="http://inthepoche.com/doc">the documentation</a>.</p>
{% endblock %}