File size: 6.8Kb
<?php
/**
* Базовый класс системы. Объек хранится в глобальной переменной $dcms
*/
class dcms {
protected $_data = array();
function __construct() {
// загрузка настроек
$this->_load_settings();
}
/**
* рассылка системных сообщений
* @param string $mess
* @param integer $group_min
*/
public function distribution($mess, $group_min = 2) {
$q = mysql_query("SELECT `id` FROM `users` WHERE `group` >= '" . intval($group_min) . "'");
$users = array();
while ($ank_ids = mysql_fetch_assoc($q)) {
$users[] = $ank_ids['id'];
}
new user($users); // предзагрузка данных пользователей из базы
foreach ($users as $id_user) {
$ank = new user($id_user);
$ank->mess($mess);
}
}
/**
* Запись действий администратора или системы
* @global \user $user
* @param string $module Название модуля
* @param string $description Описание действия
* @param boolean $is_system Если сестемное действие
* @return type
*/
public function log($module, $description, $is_system = false) {
$id_user = 0;
if (!$is_system) {
global $user;
$id_user = $user->id;
}
return mysql_query("INSERT INTO `action_list_administrators` (`id_user`, `time`, `module`, `description`)
VALUES ('$id_user', '" . TIME . "', '" . my_esc($module) . "', '" . my_esc($description) . "')");
}
public function __get($name) {
switch ($name) {
case 'salt_user':
return $this->salt . @$_SERVER['HTTP_USER_AGENT'];
break;
case 'ip_long':
return browser::getIpLong();
break;
case 'subdomain_main':
return $this->_subdomain_main();
break;
case 'browser_name':
return browser::getName();
break;
case 'browser_type':
return $this->_browser_type();
break;
case 'browser_type_auto':
return browser::getType();
break;
case 'browser_id':
return $this->_browser_id();
break;
case 'items_per_page':
return $this->_data['items_per_page_' . $this->browser_type];
break;
case 'img_max_width':
return $this->_data['img_max_width_' . $this->browser_type];
break;
case 'widget_items_count':
return $this->_data['widget_items_count_' . $this->browser_type];
break;
case 'theme':
return $this->_data['theme_' . $this->browser_type];
break;
default:
return empty($this->_data[$name]) ? false : $this->_data[$name];
}
}
public function __set($name, $value) {
switch ($name) {
case 'items_per_page': $name .= '_' . $this->browser_type;
break;
case 'theme': $name .= '_' . $this->browser_type;
break;
case 'img_max_width': $name .= '_' . $this->browser_type;
break;
case 'widget_items_count': $name .= '_' . $this->browser_type;
break;
}
$this->_data[$name] = $value;
return true;
}
protected function _subdomain_main() {
$domain = preg_replace('/^(wap|pda|web|www|i|touch|itouch)\./ui', '', $_SERVER['HTTP_HOST']);
return $domain;
}
/**
* Тип браузера
* @return string
*/
protected function _browser_type() {
if ($this->subdomain_wap_enable) {
if (0 === strpos($_SERVER['HTTP_HOST'], $this->subdomain_wap . '.')) {
return 'wap';
}
}
if ($this->subdomain_pda_enable) {
if (0 === strpos($_SERVER['HTTP_HOST'], $this->subdomain_pda . '.')) {
return 'pda';
}
}
if ($this->subdomain_itouch_enable) {
if (0 === strpos($_SERVER['HTTP_HOST'], $this->subdomain_itouch . '.')) {
return 'itouch';
}
}
if ($this->subdomain_web_enable) {
if (0 === strpos($_SERVER['HTTP_HOST'], $this->subdomain_web . '.')) {
return 'web';
}
}
return $this->browser_type_auto;
}
protected function _browser_id() {
static $browser_id = false;
if ($browser_id === false) {
$q = mysql_query("SELECT * FROM `browsers` WHERE `name` = '" . my_esc(browser::getName()) . "' LIMIT 1");
if (mysql_num_rows($q)) {
$browser_id = mysql_result($q, 0);
} else {
$q = mysql_query("INSERT INTO `browsers` (`type`, `name`) VALUES ('" . my_esc(browser::getType()) . "','" . my_esc(browser::getName()) . "')");
$browser_id = mysql_insert_id();
}
}
return $browser_id;
}
/**
* Загрузка настроек
*/
protected function _load_settings() {
$settings_default = ini::read(H . '/sys/inc/settings.default.ini', true) OR die('Невозможно загрузить файл настроек по-умолчанию');
if (!$settings = ini::read(H . '/sys/ini/settings.ini')) {
// если установки небыли загружены, но при этом есть файл установки, то переадресуем на него
if (file_exists(H . '/install/index.php')) {
header("Location: /install/");
exit;
}
else
exit('Файл настроек не может быть загружен');
}
$this->_data = array_merge($settings_default['DEFAULT'], $this->_data, $settings, $settings_default['REPLACE']);
}
/**
* Сохранение настроек
* @return boolean
*/
public function save_settings($doc = false) {
$result = ini::save(H . '/sys/ini/settings.ini', $this->_data);
if (is_a($doc, 'document')) {
if ($result)
$doc->msg(__('Настройки успешно сохранены'));
else
$doc->err(__('Нет прав на запись в файл настроек'));
}
return $result;
}
}