Documentation is available at system.php
- <?php
- ////////////////////////////////////////////////////////////////////////////////
- // Copyright (C) ReloadCMS Development Team //
- // http://reloadcms.sf.net //
- // //
- // This program is distributed in the hope that it will be useful, //
- // but WITHOUT ANY WARRANTY, without even the implied warranty of //
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. //
- // //
- // This product released under GNU General Public License v2 //
- ////////////////////////////////////////////////////////////////////////////////
- class rcms_system extends rcms_user {
- var $language = '';
- var $skin = '';
- var $config = array();
- var $results = array();
- var $data = array();
- var $modules = array();
- var $feeds = array();
- var $cookie_lang = 'reloadcms_lang';
- var $cookie_skin = 'reloadcms_skin';
- var $output = array('modules' => array(), 'menus' => array());
- var $current_point = '';
- var $logging = LOGS_PATH;
- var $logging_gz = true;
- var $url = '';
- function rcms_system($language_select_form = '', $skin_select_form = ''){
- global $lang;
- // Loading configuration
- $this->config = parse_ini_file(CONFIG_PATH . 'config.ini');
- if(empty($this->config['site_url'])){
- $this->url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME'] . basename($_SERVER['SCRIPT_NAME'])) . '/';
- } else {
- $this->url = $this->config['site_url'];
- }
- if($this->url{strlen($this->url) - 1} != '/'){
- $this->url .= '/';
- }
- $this->language = $this->config['default_lang'];
- $this->skin = $this->config['default_skin'];
- $this->initialiseLanguage(basename($language_select_form));
- $this->logging_gz = extension_loaded('zlib');
- if(!empty($this->config['allowchskin'])){
- if(!empty($_COOKIE[$this->cookie_skin]) && is_file(SKIN_PATH . basename($_COOKIE[$this->cookie_skin]) . '/skin.general.php')) $this->skin = basename($_COOKIE[$this->cookie_skin]);
- if(!empty($skin_select_form) && is_file(SKIN_PATH . basename($skin_select_form) . '/skin.general.php')) {
- $this->skin = $skin_select_form;
- setcookie($this->cookie_skin, basename($skin_select_form), FOREVER_COOKIE);
- }
- }
- define('CUR_SKIN_PATH', SKIN_PATH . $this->skin . '/');
- $this->initialiseModules();
- $this->initializeUser();
- }
- function initialiseLanguage($language = '', $default = false){
- global $lang;
- // Loading avaible languages lists
- $langs = rcms_scandir(LANG_PATH);
- foreach ($langs as $lng){
- if(is_dir(LANG_PATH . $lng) && is_file(LANG_PATH . $lng . '/langid.txt')){
- $lngdata = file(LANG_PATH . $lng . '/langid.txt');
- $this->data['languages'][preg_replace("/[\n\r]+/", '', $lngdata[1])] = preg_replace("/[\n\r]+/", '', $lngdata[0]);
- $this->data['langpath'][preg_replace("/[\n\r]+/", '', $lngdata[1])] = LANG_PATH . $lng . '/';
- }
- }
- if(!empty($this->config['allowchlang']) && !$default){
- if(!empty($language) && !empty($this->data['languages'][$language])) {
- $this->language = $language;
- setcookie($this->cookie_lang, $language, FOREVER_COOKIE);
- $_COOKIE[$this->cookie_lang] = $language;
- } elseif(!empty($_COOKIE[$this->cookie_lang]) && !empty($this->data['languages'][basename($_COOKIE[$this->cookie_lang])])) {
- $this->language = basename($_COOKIE[$this->cookie_lang]);
- } else {
- if(!empty($this->config['detect_lang']) && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
- $lang_priority = explode(';', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
- $lang_priority = explode(',', $lang_priority[0]);
- } else $lang_priority = array();
- foreach ($lang_priority as $lng){
- if($this->language == $this->config['default_lang'] && !empty($this->data['languages'][basename($lng)])){
- $this->language = basename($lng);
- }
- }
- }
- }
- if(!is_file($this->data['langpath'][$this->language] . 'langid.txt')){
- die('Language "' . $this->language . '" not found');
- }
- // Loading language files' list
- $lngdir = rcms_scandir($this->data['langpath'][$this->language]);
- // Loading language definition
- $lngdata = file($this->data['langpath'][$this->language] . 'langid.txt');
- $this->config['language'] = preg_replace("/[\n\r]+/", '', $lngdata[1]);
- $this->config['encoding'] = preg_replace("/[\n\r]+/", '', $lngdata[2]);
- // Loading language bindings
- foreach ($lngdir as $langfile){
- if(is_file($this->data['langpath'][$this->language] . $langfile) && $langfile !== 'langid.txt'){
- include_once($this->data['langpath'][$this->language] . $langfile);
- }
- }
- }
- function initialiseModules($ignore_disable = false){
- // Loading modules initializations
- if(!$ignore_disable) {
- if(!$disabled = @parse_ini_file(CONFIG_PATH . 'disable.ini')){
- $disabled = array();
- }
- } else {
- $disabled = array();
- }
- $modules = rcms_scandir(MODULES_PATH);
- foreach ($modules as $module){
- if(empty($disabled[$module]) && is_readable(MODULES_PATH . $module . '/module.php')) {
- include_once(MODULES_PATH . $module . '/module.php');
- }
- }
- // Register modules rights in main database
- foreach ($this->modules as $type => $modules){
- foreach ($modules as $module => $moduledata){
- foreach ($moduledata['rights'] as $right => $desc){
- $this->rights_database[$right] = $desc;
- }
- }
- }
- }
- function addInfoToHead($info){
- $this->config['meta'] = @$this->config['meta'] . $info;
- }
- function setCurrentPoint($point){
- $this->current_point = $point;
- }
- function defineWindow($title, $data, $align = 'left'){
- if ($title == __('Error')) {
- $title = '<font color="red">'.$title.'</font>';
- }
- if($this->current_point == '__MAIN__') {
- $this->output['modules'][] = array($title, $data, $align);
- }
- elseif(!empty($this->current_point)){
- $this->output['menus'][$this->current_point][] = array($title, $data, $align);
- } else return false;
- }
- function showWindow($title, $content, $align, $template){
- if($title == '__NOWINDOW__') echo $content;
- elseif(is_readable($template)) require($template);
- else return false;
- return true;
- }
- function registerModule($module, $type, $title, $copyright = '', $rights = array()){
- $this->modules[$type][$module]['title'] = $title;
- $this->modules[$type][$module]['copyright'] = $copyright;
- $this->modules[$type][$module]['rights'] = $rights;
- }
- function registerFeed($module, $title, $desc, $real = ''){
- $this->feeds[$module] = array($title, $desc, $real);
- }
- function logPut($type, $user, $message){
- if(!empty($this->config['logging'])){
- $entry = '---------------------------------' . "\n";
- $entry .= date('H:i:s d-m-Y', time()) . "\n";
- $entry .= $type . ' (' . $user . ' from ' . $_SERVER['REMOTE_ADDR'] . ')' . "\n";
- $entry .= $message . "\n";
- if($this->logging_gz){
- gzfile_write_contents($this->logging . date('Y-m-d', time()) . '.log.gz', $entry, 'a');
- } else {
- file_write_contents($this->logging . date('Y-m-d', time()) . '.log', $entry, 'a');
- }
- }
- return true;
- }
- function logMerge($title, $t_d, $t_m, $t_y, $f_d = 1, $f_m = 1, $f_y = 1980){
- $logs = rcms_scandir($this->logging);
- $f = mktime(0, 0, 0, $f_m, $f_d, $f_y);
- $t = mktime(0, 0, 0, $t_m, $t_d, $t_y);
- $to_merge = array();
- foreach ($logs as $log_entry){
- if(preg_match("/^(.*?)-(.*?)-(.*?)\.log(|.gz)$/i", $log_entry, $matches)){
- $c = mktime(0, 0, 0, $matches[2], $matches[3], $matches[1]);
- if($c >= $f && $c <= $t){
- $to_merge[] = $log_entry;
- }
- }
- }
- if(!empty($to_merge)){
- if($this->logging_gz) $suffix = '.gz'; else $suffix = '';
- $merged_file = $this->logging . $title . '.tar' . $suffix;
- $merged = new tar();
- $merged->isGzipped = $this->logging_gz;
- $merged->filename = $merged_file;
- $path = getcwd();
- chdir($this->logging);
- foreach ($to_merge as $file){
- $merged->addFile($file, substr($file, -3) == '.gz');
- }
- chdir($path);
- if($merged->saveTar()){
- foreach ($to_merge as $file){
- rcms_delete_files($this->logging . $file);
- }
- }
- }
- return true;
- }
- function logMergeByMonth(){
- $logs = rcms_scandir($this->logging);
- $d = date('d');
- $m = date('m');
- $Y = date('Y');
- $merged = array();
- foreach ($logs as $log_entry){
- if(preg_match("/^(.*?)-(.*?)-(.*?)\.log(|.gz)$/i", $log_entry, $matches)){
- $t = date('t', mktime(0, 0, 0, $matches[2], $matches[3], $matches[1]));
- if(!in_array($matches[1] . '-' . $matches[2], $merged) && ($matches[2] != $m || $matches[1] != $Y)){
- $this->logMerge($matches[1] . '-' . $matches[2], $t, $matches[2], $matches[1], 1, $matches[2], $matches[1]);
- $merged[] = $matches[1] . '-' . $matches[2];
- }
- }
- }
- return true;
- }
- var $navmodifiers = array();
- function registerNavModifier($base, $mod_handler, $help_handler){
- $this->navmodifiers[$base] = array('m' => $mod_handler, 'h' => $help_handler);
- return true;
- }
- }
- function __($string){
- global $lang;
- if(!empty($lang['def'][$string])) {
- return $lang['def'][$string];
- } else {
- return $string;
- }
- }
- function rcms_log_put($type, $user, $message){
- global $system;
- return $system->logPut($type, $user, $message);
- }
- function cut_text($str,$lenght=25)
- {
- $str = substr($str, 0, $lenght) . ((strlen($str) > $lenght) ? '...' : '');
- return ($str);
- }
- ?>
Documentation generated on Fri, 08 Jun 2007 12:21:29 +0300 by phpDocumentor 1.3.0RC3