PDF rausgenommen
This commit is contained in:
@ -0,0 +1,279 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\install\module\requirements\task;
|
||||
|
||||
/**
|
||||
* Checks filesystem requirements
|
||||
*/
|
||||
class check_filesystem extends \phpbb\install\task_base
|
||||
{
|
||||
/**
|
||||
* @var \phpbb\filesystem\filesystem_interface
|
||||
*/
|
||||
protected $filesystem;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $files_to_check;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $tests_passed;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $phpbb_root_path;
|
||||
|
||||
/**
|
||||
* @var \phpbb\install\helper\iohandler\iohandler_interface
|
||||
*/
|
||||
protected $response;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param \phpbb\filesystem\filesystem_interface $filesystem filesystem handler
|
||||
* @param \phpbb\install\helper\iohandler\iohandler_interface $response response helper
|
||||
* @param string $phpbb_root_path relative path to phpBB's root
|
||||
* @param string $php_ext extension of php files
|
||||
* @param bool $check_config_php Whether or not to check if config.php is writable
|
||||
*/
|
||||
public function __construct(\phpbb\filesystem\filesystem_interface $filesystem, \phpbb\install\helper\iohandler\iohandler_interface $response, $phpbb_root_path, $php_ext, $check_config_php = true)
|
||||
{
|
||||
parent::__construct(true);
|
||||
|
||||
$this->filesystem = $filesystem;
|
||||
$this->response = $response;
|
||||
$this->phpbb_root_path = $phpbb_root_path;
|
||||
|
||||
$this->tests_passed = false;
|
||||
|
||||
// Files/Directories to check
|
||||
// All file/directory names must be relative to phpBB's root path
|
||||
$this->files_to_check = array(
|
||||
array(
|
||||
'path' => 'cache/',
|
||||
'failable' => false,
|
||||
'is_file' => false,
|
||||
),
|
||||
array(
|
||||
'path' => 'store/',
|
||||
'failable' => false,
|
||||
'is_file' => false,
|
||||
),
|
||||
array(
|
||||
'path' => 'files/',
|
||||
'failable' => false,
|
||||
'is_file' => false,
|
||||
),
|
||||
array(
|
||||
'path' => 'images/avatars/upload/',
|
||||
'failable' => true,
|
||||
'is_file' => false,
|
||||
),
|
||||
);
|
||||
|
||||
if ($check_config_php)
|
||||
{
|
||||
$this->files_to_check[] = array(
|
||||
'path' => "config.$php_ext",
|
||||
'failable' => false,
|
||||
'is_file' => true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$this->tests_passed = true;
|
||||
|
||||
// Check files/directories to be writable
|
||||
foreach ($this->files_to_check as $file)
|
||||
{
|
||||
if ($file['is_file'])
|
||||
{
|
||||
$this->check_file($file['path'], $file['failable']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->check_dir($file['path'], $file['failable']);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->tests_passed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets $this->tests_passed
|
||||
*
|
||||
* @param bool $is_passed
|
||||
*/
|
||||
protected function set_test_passed($is_passed)
|
||||
{
|
||||
// If one test failed, tests_passed should be false
|
||||
$this->tests_passed = (!$this->tests_passed) ? false : $is_passed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a file is readable and writable
|
||||
*
|
||||
* @param string $file Filename
|
||||
* @param bool $failable Whether failing test should interrupt installation process
|
||||
*/
|
||||
protected function check_file($file, $failable = false)
|
||||
{
|
||||
$path = $this->phpbb_root_path . $file;
|
||||
$exists = $writable = true;
|
||||
|
||||
// Try to create file if it does not exists
|
||||
if (!file_exists($path))
|
||||
{
|
||||
$fp = @fopen($path, 'w');
|
||||
@fclose($fp);
|
||||
try
|
||||
{
|
||||
$this->filesystem->phpbb_chmod($path,
|
||||
\phpbb\filesystem\filesystem_interface::CHMOD_READ | \phpbb\filesystem\filesystem_interface::CHMOD_WRITE
|
||||
);
|
||||
$exists = true;
|
||||
}
|
||||
catch (\phpbb\filesystem\exception\filesystem_exception $e)
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
|
||||
if (file_exists($path))
|
||||
{
|
||||
if (!$this->filesystem->is_writable($path))
|
||||
{
|
||||
$writable = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$exists = $writable = false;
|
||||
}
|
||||
|
||||
$this->set_test_passed(($exists && $writable) || $failable);
|
||||
|
||||
if (!($exists && $writable))
|
||||
{
|
||||
$title = ($exists) ? 'FILE_NOT_WRITABLE' : 'FILE_NOT_EXISTS';
|
||||
$lang_suffix = '_EXPLAIN';
|
||||
$lang_suffix .= ($failable) ? '_OPTIONAL' : '';
|
||||
$description = array($title . $lang_suffix, $file);
|
||||
|
||||
if ($failable)
|
||||
{
|
||||
$this->response->add_warning_message($title, $description);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->response->add_error_message($title, $description);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a directory is readable and writable
|
||||
*
|
||||
* @param string $dir Filename
|
||||
* @param bool $failable Whether failing test should abort the installation process
|
||||
*/
|
||||
protected function check_dir($dir, $failable = false)
|
||||
{
|
||||
$path = $this->phpbb_root_path . $dir;
|
||||
$exists = $writable = false;
|
||||
|
||||
// Try to create the directory if it does not exist
|
||||
if (!file_exists($path))
|
||||
{
|
||||
try
|
||||
{
|
||||
$this->filesystem->mkdir($path, 0777);
|
||||
$this->filesystem->phpbb_chmod($path,
|
||||
\phpbb\filesystem\filesystem_interface::CHMOD_READ | \phpbb\filesystem\filesystem_interface::CHMOD_WRITE
|
||||
);
|
||||
$exists = true;
|
||||
}
|
||||
catch (\phpbb\filesystem\exception\filesystem_exception $e)
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
|
||||
// Now really check
|
||||
if (file_exists($path) && is_dir($path))
|
||||
{
|
||||
try
|
||||
{
|
||||
$exists = true;
|
||||
$this->filesystem->phpbb_chmod($path,
|
||||
\phpbb\filesystem\filesystem_interface::CHMOD_READ | \phpbb\filesystem\filesystem_interface::CHMOD_WRITE
|
||||
);
|
||||
}
|
||||
catch (\phpbb\filesystem\exception\filesystem_exception $e)
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->filesystem->is_writable($path))
|
||||
{
|
||||
$writable = true;
|
||||
}
|
||||
|
||||
$this->set_test_passed(($exists && $writable) || $failable);
|
||||
|
||||
if (!($exists && $writable))
|
||||
{
|
||||
$title = ($exists) ? 'DIRECTORY_NOT_WRITABLE' : 'DIRECTORY_NOT_EXISTS';
|
||||
$lang_suffix = '_EXPLAIN';
|
||||
$lang_suffix .= ($failable) ? '_OPTIONAL' : '';
|
||||
$description = array($title . $lang_suffix, $dir);
|
||||
|
||||
if ($failable)
|
||||
{
|
||||
$this->response->add_warning_message($title, $description);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->response->add_error_message($title, $description);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
static public function get_step_count()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function get_task_lang_name()
|
||||
{
|
||||
return '';
|
||||
}
|
||||
}
|
@ -0,0 +1,209 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\install\module\requirements\task;
|
||||
|
||||
/**
|
||||
* Installer task that checks if the server meats phpBB requirements
|
||||
*/
|
||||
class check_server_environment extends \phpbb\install\task_base
|
||||
{
|
||||
/**
|
||||
* @var \phpbb\install\helper\database
|
||||
*/
|
||||
protected $database_helper;
|
||||
|
||||
/**
|
||||
* @var \phpbb\install\helper\iohandler\iohandler_interface
|
||||
*/
|
||||
protected $response_helper;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $tests_passed;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param \phpbb\install\helper\database $database_helper
|
||||
* @param \phpbb\install\helper\iohandler\iohandler_interface $response
|
||||
*/
|
||||
public function __construct(\phpbb\install\helper\database $database_helper,
|
||||
\phpbb\install\helper\iohandler\iohandler_interface $response)
|
||||
{
|
||||
$this->database_helper = $database_helper;
|
||||
$this->response_helper = $response;
|
||||
$this->tests_passed = true;
|
||||
|
||||
parent::__construct(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
//
|
||||
// Check requirements
|
||||
// The error messages should be set in the check_ functions
|
||||
//
|
||||
|
||||
// Check PHP version
|
||||
$this->check_php_version();
|
||||
|
||||
// Check for getimagesize()
|
||||
$this->check_image_size();
|
||||
|
||||
// Check for PCRE support
|
||||
$this->check_pcre();
|
||||
|
||||
// Check for JSON support
|
||||
$this->check_json();
|
||||
|
||||
// XML extension support check
|
||||
$this->check_xml();
|
||||
|
||||
// Check for dbms support
|
||||
$this->check_available_dbms();
|
||||
|
||||
return $this->tests_passed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets $this->tests_passed
|
||||
*
|
||||
* @param bool $is_passed
|
||||
*/
|
||||
protected function set_test_passed($is_passed)
|
||||
{
|
||||
// If one test failed, tests_passed should be false
|
||||
$this->tests_passed = (!$this->tests_passed) ? false : $is_passed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the requirements for PHP version is met
|
||||
*/
|
||||
protected function check_php_version()
|
||||
{
|
||||
$php_version = PHP_VERSION;
|
||||
|
||||
if (version_compare($php_version, '5.4') < 0)
|
||||
{
|
||||
$this->response_helper->add_error_message('PHP_VERSION_REQD', 'PHP_VERSION_REQD_EXPLAIN');
|
||||
|
||||
$this->set_test_passed(false);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->set_test_passed(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the installed PHP has getimagesize() available
|
||||
*/
|
||||
protected function check_image_size()
|
||||
{
|
||||
if (!@function_exists('getimagesize'))
|
||||
{
|
||||
$this->response_helper->add_error_message('PHP_GETIMAGESIZE_SUPPORT', 'PHP_GETIMAGESIZE_SUPPORT_EXPLAIN');
|
||||
|
||||
$this->set_test_passed(false);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->set_test_passed(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the installed PHP supports PCRE
|
||||
*/
|
||||
protected function check_pcre()
|
||||
{
|
||||
if (@preg_match('//u', ''))
|
||||
{
|
||||
$this->set_test_passed(true);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->response_helper->add_error_message('PCRE_UTF_SUPPORT', 'PCRE_UTF_SUPPORT_EXPLAIN');
|
||||
|
||||
$this->set_test_passed(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether PHP's JSON extension is available or not
|
||||
*/
|
||||
protected function check_json()
|
||||
{
|
||||
if (@extension_loaded('json'))
|
||||
{
|
||||
$this->set_test_passed(true);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->response_helper->add_error_message('PHP_JSON_SUPPORT', 'PHP_JSON_SUPPORT_EXPLAIN');
|
||||
|
||||
$this->set_test_passed(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether or not the XML PHP extension is available (Required by the text formatter)
|
||||
*/
|
||||
protected function check_xml()
|
||||
{
|
||||
if (class_exists('DOMDocument'))
|
||||
{
|
||||
$this->set_test_passed(true);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->response_helper->add_error_message('PHP_XML_SUPPORT', 'PHP_XML_SUPPORT_EXPLAIN');
|
||||
|
||||
$this->set_test_passed(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if any supported DBMS is available
|
||||
*/
|
||||
protected function check_available_dbms()
|
||||
{
|
||||
$available_dbms = $this->database_helper->get_available_dbms(false, true);
|
||||
|
||||
if ($available_dbms['ANY_DB_SUPPORT'])
|
||||
{
|
||||
$this->set_test_passed(true);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->response_helper->add_error_message('PHP_SUPPORTED_DB', 'PHP_SUPPORTED_DB_EXPLAIN');
|
||||
|
||||
$this->set_test_passed(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
static public function get_step_count()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function get_task_lang_name()
|
||||
{
|
||||
return '';
|
||||
}
|
||||
}
|
@ -0,0 +1,198 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\install\module\requirements\task;
|
||||
|
||||
use phpbb\filesystem\filesystem;
|
||||
use phpbb\install\helper\config;
|
||||
use phpbb\install\helper\container_factory;
|
||||
use phpbb\install\helper\iohandler\iohandler_interface;
|
||||
use phpbb\install\helper\update_helper;
|
||||
use phpbb\install\task_base;
|
||||
|
||||
/**
|
||||
* Check the availability of updater files and update version
|
||||
*/
|
||||
class check_update extends task_base
|
||||
{
|
||||
/**
|
||||
* @var \phpbb\config\db
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* @var filesystem
|
||||
*/
|
||||
protected $filesystem;
|
||||
|
||||
/**
|
||||
* @var config
|
||||
*/
|
||||
protected $installer_config;
|
||||
|
||||
/**
|
||||
* @var iohandler_interface
|
||||
*/
|
||||
protected $iohandler;
|
||||
|
||||
/**
|
||||
* @var update_helper
|
||||
*/
|
||||
protected $update_helper;
|
||||
|
||||
/**
|
||||
* @var \phpbb\version_helper
|
||||
*/
|
||||
protected $version_helper;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $phpbb_root_path;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $php_ext;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $tests_passed;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param container_factory $container
|
||||
* @param filesystem $filesystem
|
||||
* @param config $config
|
||||
* @param iohandler_interface $iohandler
|
||||
* @param update_helper $update_helper
|
||||
* @param string $phpbb_root_path
|
||||
* @param string $php_ext
|
||||
*/
|
||||
public function __construct(container_factory $container, filesystem $filesystem, config $config, iohandler_interface $iohandler, update_helper $update_helper, $phpbb_root_path, $php_ext)
|
||||
{
|
||||
$this->filesystem = $filesystem;
|
||||
$this->installer_config = $config;
|
||||
$this->iohandler = $iohandler;
|
||||
$this->update_helper = $update_helper;
|
||||
$this->phpbb_root_path = $phpbb_root_path;
|
||||
$this->php_ext = $php_ext;
|
||||
$this->tests_passed = true;
|
||||
|
||||
$this->config = $container->get('config');
|
||||
$this->version_helper = $container->get('version_helper');
|
||||
|
||||
parent::__construct(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets $this->tests_passed
|
||||
*
|
||||
* @param bool $is_passed
|
||||
*/
|
||||
protected function set_test_passed($is_passed)
|
||||
{
|
||||
// If one test failed, tests_passed should be false
|
||||
$this->tests_passed = $this->tests_passed && $is_passed;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
// Array of update files
|
||||
$update_files = array(
|
||||
$this->phpbb_root_path . 'install/update',
|
||||
$this->phpbb_root_path . 'install/update/index.' . $this->php_ext,
|
||||
);
|
||||
|
||||
// Check for a valid update directory
|
||||
if (!$this->filesystem->exists($update_files) || !$this->filesystem->is_readable($update_files))
|
||||
{
|
||||
if ($this->iohandler->get_input('update_type', 'all') === 'all')
|
||||
{
|
||||
$this->iohandler->add_warning_message('UPDATE_FILES_NOT_FOUND');
|
||||
$this->set_test_passed(false);
|
||||
}
|
||||
|
||||
// If there are no update files, we can't check the version etc
|
||||
// However, we can let the users run migrations if they really want to...
|
||||
$this->installer_config->set('disable_filesystem_update', true);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Recover version numbers
|
||||
$update_info = array();
|
||||
@include($this->phpbb_root_path . 'install/update/index.' . $this->php_ext);
|
||||
$info = (empty($update_info) || !is_array($update_info)) ? false : $update_info;
|
||||
$update_version = false;
|
||||
|
||||
if ($info !== false)
|
||||
{
|
||||
$update_version = (!empty($info['version']['to'])) ? trim($info['version']['to']) : false;
|
||||
}
|
||||
|
||||
// Get current and latest version
|
||||
try
|
||||
{
|
||||
$latest_version = $this->version_helper->get_latest_on_current_branch(true);
|
||||
}
|
||||
catch (\RuntimeException $e)
|
||||
{
|
||||
$latest_version = $update_version;
|
||||
}
|
||||
|
||||
$current_version = (!empty($this->config['version_update_from'])) ? $this->config['version_update_from'] : $this->config['version'];
|
||||
|
||||
// Check if the update package
|
||||
if (!$this->update_helper->phpbb_version_compare($current_version, $update_version, '<'))
|
||||
{
|
||||
$this->iohandler->add_error_message('NO_UPDATE_FILES_UP_TO_DATE');
|
||||
$this->tests_passed = false;
|
||||
}
|
||||
|
||||
// Check if the update package works with the installed version
|
||||
if (empty($info['version']['from']) || $info['version']['from'] !== $current_version)
|
||||
{
|
||||
$this->iohandler->add_error_message(array('INCOMPATIBLE_UPDATE_FILES', $current_version, $info['version']['from'], $update_version));
|
||||
$this->tests_passed = false;
|
||||
}
|
||||
|
||||
// check if this is the latest update package
|
||||
if ($this->update_helper->phpbb_version_compare($update_version, $latest_version, '<'))
|
||||
{
|
||||
$this->iohandler->add_warning_message(array('OLD_UPDATE_FILES', $info['version']['from'], $update_version, $latest_version));
|
||||
}
|
||||
|
||||
return $this->tests_passed;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
static public function get_step_count()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function get_task_lang_name()
|
||||
{
|
||||
return '';
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user