<?php
/**
* СодеÑÐ¶Ð¸Ñ ÐºÐ»Ð°ÑÑ ServerChecker
*
* @package energine
* @subpackage configurator
* @author Tigrenok
* @copyright ColoCall 2007
* @version $Id: ServerChecker.class.php,v 1.12 2007/11/26 14:13:59 tigrenok Exp $
*/
require_once('Model.class.php');
/**
* ÐлаÑÑ Ð¿ÑовеÑки ÑеÑвеÑа на возможноÑÑÑ ÑÑÑановки Energine
*
* @package energine
* @subpackage configurator
*/
class ServerChecker extends Model {
/**
* СпиÑок модÑлей, необÑ
одимÑÑ
Ð´Ð»Ñ ÐºÐ¾ÑÑекÑной ÑабоÑÑ ÑиÑÑемÑ
*
* @var array
* @access private
*/
private $modules = array(
'dom',
'session',
'SimpleXML',
'iconv',
'json',
'gd',
'mbstring',
'PDO',
'pdo_mysql',
'tidy',
'xsl'
);
/**
* Флаг ÑабоÑÑ Ð±ÐµÐ· вÑвода инÑоÑмаÑии
*
* @var boolean
* @access private
*/
private $silentMode = true;
/**
* ÐÑÑÑ Ðº ÑÐ°Ð¹Ð»Ñ Ð¾Ñ ÐºÐ¾ÑÐ½Ñ ÑеÑвеÑа
*
* @var string
* @access private
*/
private static $systemConfigPath;
/**
* ÐÑовеÑка веб ÑеÑвеÑа
*
* @return boolean
* @access private
*/
private function isApacheSuitable() {
$result = true;
if (strpos(strtolower($_SERVER["SERVER_SOFTWARE"]), 'apache') === false) {
$this->getViewer()->addBlock('Ðа ÑÑÐ¾Ñ ÑеÑÐ²ÐµÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ ÑÑÑановиÑÑ Energine.',Viewer::TPL_CHECKER_EXCEPTION);
$result = false;
} elseif(!$this->silentMode) {
$this->getViewer()->addBlock('ÐодÑ
одÑÑий ÑеÑÐ²ÐµÑ Ð·Ð°Ð¿ÑÑен.',Viewer::TPL_CHECKER_CONFIRM);
}
return $result;
}
/**
* ÐÑовеÑка модÑлей Ð ÐÐ
*
* @return boolean
* @access private
*/
private function isPHPModulesAvailable() {
$result = true;
$installedModules = get_loaded_extensions();
$difference = array_diff($this->modules, $installedModules);
if(!empty($difference)){
$this->getViewer()->addBlock(array('СледÑÑÑие модÑли PHP Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑÑÑановленÑ:'=>$difference),Viewer::TPL_CHECKER_EXCEPTION);
$result = false;
} elseif(!$this->silentMode) {
$this->getViewer()->addBlock('ÐÑе необÑ
одимÑе модÑли PHP ÑÑÑановленÑ.',Viewer::TPL_CHECKER_CONFIRM);
}
return $result;
}
/**
* ÐРовеÑка пÑав и налиÑÐ¸Ñ Ñайлов
*
* @return boolean
* @access private
*/
private function hasValidEnvironment() {
$result = true;
$serverRoot = str_replace(SCRIPT_NAME,'',$_SERVER['SCRIPT_FILENAME']);
$this->systemConfigPath = $serverRoot.'/'.PATH_SYSTEM_CONFIG;
if (!is_writable($this->systemConfigPath) && !@chmod($this->systemConfigPath,CHMOD_DIRS)) {
$this->getViewer()->addBlock('У апаÑа Ð½ÐµÑ Ð¿Ñав на запиÑÑ Ð² конÑигÑÑаÑионнÑй Ñайл ('.$this->systemConfigPath.') и Ð½ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи измениÑÑ Ð¿Ñава. ÐеобÑ
одимо вÑÑÑнÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¿Ñава на Ñайл конÑигÑÑаÑии.',Viewer::TPL_CHECKER_EXCEPTION);
$result = false;
}
elseif(!$this->silentMode) {
$this->getViewer()->addBlock('ÐÑава на запиÑÑ Ð² конÑигÑÑаÑионнÑй Ñайл пÑиÑÑÑÑÑвÑÑÑ.',Viewer::TPL_CHECKER_CONFIRM);
}
if (!is_writable($serverRoot) && !@chmod($serverRoot,CHMOD_DIRS)) {
$this->getViewer()->addBlock('У апаÑа Ð½ÐµÑ Ð¿Ñав на запиÑÑ Ð² коÑневÑÑ Ð´Ð¸ÑекÑоÑÐ¸Ñ ('.$serverRoot.') и Ð½ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи измениÑÑ Ð¿Ñава. ÐеобÑ
одимо вÑÑÑнÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¿Ñава на коÑневÑÑ Ð´Ð¸ÑекÑоÑиÑ.',Viewer::TPL_CHECKER_EXCEPTION);
$result = false;
}
elseif(!$this->silentMode) {
$this->getViewer()->addBlock('ÐÑава на запиÑÑ Ð² коÑневÑÑ Ð´Ð¸ÑекÑоÑÐ¸Ñ Ð¿ÑиÑÑÑÑÑвÑÑÑ.',Viewer::TPL_CHECKER_CONFIRM);
}
return $result;
}
/**
* ÐеÑод пÑовеÑки ÑеÑвеÑа на возможноÑÑÑ ÑÑÑановки Energine
*
* @return void
* @access public
*/
public function run() {
if (!$this->silentMode) {
$this->getViewer()->addBlock('ÐÑовеÑка ÑеÑвеÑа:',Viewer::TPL_HEADER);
}
if (
$this->isApacheSuitable() &&
$this->isPHPModulesAvailable() &&
$this->hasValidEnvironment()
) {
if (!$this->silentMode) {
$this->getViewer()->addBlock('ÐÑе пÑовеÑки пÑойденÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑодолжиÑÑ ÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ ÑиÑÑемÑ.',Viewer::TPL_CHECKER_CONFIRM);
}
}
else {
throw new CheckerException();
}
}
/**
* УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ "беÑÑÑмнÑй" Ñежим
*
* @param boolean
* @return void
* @access public
*/
public function silentMode($sw) {
$this->silentMode = $sw;
}
}