<?php
/**
* СодеÑÐ¶Ð¸Ñ ÐºÐ»Ð°ÑÑ DataChecker
*
* @package energine
* @subpackage configurator
* @author Tigrenok
* @copyright ColoCall 2007
* @version $Id: DataChecker.class.php,v 1.18 2007/11/28 14:23:48 tigrenok Exp $
*/
require_once('Model.class.php');
/**
* ÐлаÑÑ Ð¿ÑовеÑки налиÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
и иÑ
валидноÑÑÑ.
*
* @package energine
* @subpackage configurator
*/
class DataChecker extends Model {
/**
* ÐеÑеклÑÑаÑÐµÐ»Ñ ÑоÑмÑ
*
* @var string
* @access private
*/
private $dataset;
/**
* СпиÑок ÑооÑвеÑÑÑвий названий данÑÑ
*
* @var array
* @access private
*/
private $namespace = array(
'siteName' => 'Ðазвание ÑайÑа',
'siteRoot' => 'ÐÑÑÑ Ð¾Ñ ÐºÐ¾ÑÐ½Ñ ÑайÑа',
'host' => 'MySQL Ñ
оÑÑ',
'DBName' => 'MySQL Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
',
'username' => 'MySQL Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ',
'password' => 'MySQL паÑолÑ'
);
/**
* DBConnect instance
*
* @var DBConnect instance
* @access private
*/
private $sql;
/**
* XML даннÑе коÑигÑÑаÑии
*
* @var SimpleXML
* @access private
*/
private $xmlConfig;
/**
* Флаг оÑибки
*
* @var boolean
* @access private
*/
private $error;
/**
* ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа
*
* @param SimpleXML
* @return void
* @access public
*/
public function __construct($xmlconf) {
$this->xmlConfig = $xmlconf;
}
/**
* ÐÑовеÑÑÐµÑ Ð½Ð°Ð»Ð¸Ñие даннÑÑ
и иÑ
валидноÑÑÑ.
*
* @param string
* @return void
* @access public
*/
public function run($template=Viewer::TPL_FORM) {
if(!isset($_POST['install'])) {
$this->getViewer()->addBlock('ÐеобÑ
одимÑе даннÑе:',Viewer::TPL_HEADER);
$this->getViewer()->addBlock('',$template);
}
else {
$this->dataset = $_POST;
$this->dataset['serverRoot'] = str_replace(SCRIPT_NAME,'',$_SERVER['SCRIPT_FILENAME']);
$this->getViewer()->addBlock('ÐÑовеÑка даннÑÑ
:',Viewer::TPL_HEADER);
$this->prepare();
$this->checkDB();
if ($this->error) {
throw new CheckerException();
}
else {
$this->getViewer()->addBlock('ÐÑе даннÑе веÑнÑ. Ðожно пÑодолжаÑÑ ÑÑÑановкÑ.',Viewer::TPL_CHECKER_CONFIRM);
}
}
}
/**
* ÐÑовеÑÑÐµÑ Ð¸ обÑабаÑÑÐ²Ð°ÐµÑ Ð¿ÑинÑÑÑе даннÑе
*
* @return void
* @access private
*/
private function prepare() {
if(empty($this->dataset)) {
throw new Exception('ÐÐµÑ Ð´Ð°Ð½Ð½ÑÑ
!');
}
foreach ($this->dataset as $key => $value) {
if($key == 'siteRoot' && !preg_match("/.*\/$/",$value)) {$value .= '/';}
if($key == 'siteRoot' &&!preg_match("/^\/.*/",$value)) {$value = '/'.$value;}
if (empty($value)) {
$this->getViewer()->addBlock('Ðоле '.$key.' не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑÑÑÑм!',Viewer::TPL_CHECKER_EXCEPTION);
$this->error = true;
}
else {
$value = str_replace("`", "'", $value);
$this->dataset[$key] = trim(htmlspecialchars($value));
}
}
}
/**
* ÐÑовеÑÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´Ð¾ÑÑÑпа к ÐРпо пÑинÑÑÑм даннÑм
*
* @return void
* @access private
*/
private function checkDB() {
if(empty($this->dataset)) {
throw new Exception('ÐÐµÑ Ð´Ð°Ð½Ð½ÑÑ
!');
}
if (!isset($this->dataset['host'])) {
$this->dataset['host'] = $this->xmlConfig->database->host;
$this->dataset['DBName'] = $this->xmlConfig->database->name;
$this->dataset['username'] = $this->xmlConfig->database->username;
}
$this->sql = DBConnect::run();
if (!@($link = $this->sql->connect($this->dataset['host'], $this->dataset['username'], $this->dataset['password']))) {
$this->getViewer()->addBlock(array('Ðевозможно подклÑÑиÑÑÑÑ Ðº базе даннÑÑ
! (DataChecker)',$this->sql->error()),Viewer::TPL_CHECKER_EXCEPTION);
$this->error = true;
}
else {
$this->getViewer()->addBlock('ÐодклÑÑение к базе даннÑÑ
пÑоÑло ÑÑпеÑно!',Viewer::TPL_CHECKER_CONFIRM);
}
if ($link && !@$this->sql->selectdb($this->dataset['DBName'])) {
$this->getViewer()->addBlock(array('Ðевозможно вÑбÑаÑÑ ÑказаннÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
!',$this->sql->error()),Viewer::TPL_CHECKER_EXCEPTION);
$this->error = true;
}
elseif($link) {
$this->getViewer()->addBlock('ÐÑÐ±Ð¾Ñ Ñказанной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
пÑоÑел ÑÑпеÑно!',Viewer::TPL_CHECKER_CONFIRM);
}
if($link) {
$this->sql->query('CREATE TABLE IF NOT EXISTS `test_table` (`smap_id` int(10) unsigned NOT NULL default \'0\') ENGINE=InnoDB DEFAULT CHARSET=utf8;');
$this->sql->query('SHOW TABLE STATUS FROM '.$this->dataset['DBName'].' LIKE \'test_table\'');
$test_table = $this->sql->fetchHash();
if ($test_table[0]['Engine'] != 'InnoDB') {
$this->getViewer()->addBlock(array('Ðаза даннÑÑ
не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ InnoDB!',$test_table),Viewer::TPL_CHECKER_EXCEPTION);
$this->error = true;
}
else {
$this->getViewer()->addBlock('Ðаза даннÑÑ
поддÑÐµÐ¶Ð¸Ð²Ð°ÐµÑ InnoDB!',Viewer::TPL_CHECKER_CONFIRM);
}
$this->sql->query('DROP TABLE IF EXISTS `test_table`;');
}
@$this->sql->disconnect();
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¾Ð±ÑабоÑаннÑе даннÑе
*
* @return array
* @access public
*/
public function getData() {
return $this->dataset;
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¾Ð±ÑÐµÐºÑ ÐºÐ¾Ð½ÑигÑÑаÑии
*
* @return SimpleXML
* @access public
*/
public function getXMLConfig() {
return $this->xmlConfig;
}
}