Newer
Older
WebMCR / upload / modules / admin / settings.class.php
@Qexy Qexy on 3 May 2015 10 KB WebMCR_Reloaded_Alpha_v1.0.0
<?php

if(!defined("MCR")){ exit("Hacking Attempt!"); }

class submodule{
	private $core, $db, $config, $user, $lng;

	public function __construct($core){
		$this->core = $core;
		$this->db	= $core->db;
		$this->config = $core->config;
		$this->user	= $core->user;
		$this->lng	= $core->lng;

		$this->core->title = $this->lng['t_admin'].' — Настройки';

		$bc = array(
			$this->lng['t_admin'] => BASE_URL."?mode=admin",
			'Настройки' => BASE_URL."?mode=admin&do=settings"
		);

		$this->core->bc = $this->core->gen_bc($bc);
	}

	private function themes($select=''){

		$scan = scandir(MCR_ROOT.'themes/');

		$compare = array("ThemeName", "Author", "AuthorUrl", "About", "Version");

		ksort($compare);

		ob_start();

		foreach($scan as $key => $value) {
			if($value=='.' || $value=='..' || !is_dir(MCR_ROOT.'themes/'.$value)){ continue; }

			if(!file_exists(MCR_ROOT.'themes/'.$value.'/theme.php')){ continue; }

			require(MCR_ROOT.'themes/'.$value.'/theme.php');

			$uniq = array_keys($theme);

			ksort($uniq);

			if($uniq!==$compare){ continue; }

			$selected = ($value==$select) ? 'selected' : '';

			echo '<option value="'.$value.'" '.$selected.'>'.$theme['ThemeName'].'</option>';
		}

		return ob_get_clean();
	}

	private function captcha($select=0){

		$select = intval($select);

		ob_start();

		foreach($this->core->captcha as $key => $value){

			$selected = ($key == $select) ? 'selected' : '';

			echo '<option value="'.$key.'" '.$selected.'>'.$value.'</option>';
		}

		return ob_get_clean();
	}

	private function is_theme_exist($var){
		$scan = scandir(MCR_ROOT.'themes/');

		$scan = array_flip($scan);

		if(isset($scan['.'])){ unset($scan['.']); }
		if(isset($scan['..'])){ unset($scan['..']); }

		if(!isset($scan[$var])){ return false; }

		if(!file_exists(MCR_ROOT.'themes/'.$var.'/theme.php')){ return false; }

		include(MCR_ROOT.'themes/'.$var.'/theme.php');

		$uniq = array_keys($theme);

		rsort($uniq);

		$compare = array("ThemeName", "Author", "AuthorUrl", "About", "Version");

		rsort($compare);

		if($uniq!==$compare){ return false; }

		return true;
	}

	private function is_captcha_exist($id=0){
		$id = intval($id);
		if(!isset($this->core->captcha[$id])){ return false; }

		return true;
	}

	private function main(){

		$cfg = $this->config->main;

		if($_SERVER['REQUEST_METHOD']=='POST'){
			$cfg['s_name']		= $this->core->safestr(@$_POST['s_name']);

			$cfg['s_about']		= $this->core->safestr(@$_POST['s_about']);

			$cfg['s_keywords']	= $this->core->safestr(@$_POST['s_keywords']);

			$cfg['s_dpage']		= $this->core->safestr(@$_POST['s_dpage']);

			$s_theme = $this->core->safestr(@$_POST['s_theme']);
			if(!$this->is_theme_exist($s_theme)){ $this->core->notify($this->lng["e_msg"], "Шаблон указан некорректно", 2, '?mode=admin&do=settings'); }
			$cfg['s_theme'] = $s_theme;

			$cfg['log']			= (intval(@$_POST['log']) === 1) ? true : false;

			$cfg['debug']		= (intval(@$_POST['debug']) === 1) ? true : false;

			$captcha = intval(@$_POST['captcha']);

			if(!$this->is_captcha_exist($captcha)){ $this->core->notify($this->lng["e_msg"], "Капча указана некорректно", 2, '?mode=admin&do=settings'); }
			$cfg['captcha']		= $captcha;

			$cfg['rc_public']	= $this->core->safestr(@$_POST['rc_public']);

			$cfg['rc_private']	= $this->core->safestr(@$_POST['rc_private']);

			$cfg['kc_public']	= $this->core->safestr(@$_POST['kc_public']);

			$cfg['kc_private']	= $this->core->safestr(@$_POST['kc_private']);

			$cfg['mon_type']	= (intval(@$_POST['mon_type']) === 1) ? 1 : 0;

			if(!$this->core->savecfg($cfg)){ $this->core->notify($this->lng["e_msg"], "Не удалось сохранить файл конфигурации", 2, '?mode=admin&do=settings'); }
			
			$this->core->notify($this->lng["e_success"], "Настройки успешно сохранены", 3, '?mode=admin&do=settings');
		}

		$data = array(
			"THEMES"		=> $this->themes($cfg['s_theme']),
			"CFG"			=> $cfg,
			"LOG"			=> ($cfg['log']) ? 'selected' : '',
			"DEBUG"			=> ($cfg['debug']) ? 'selected' : '',
			"REG_ACCEPT"	=> ($cfg['reg_accept']) ? 'selected' : '',
			"MON_TYPE"		=> ($cfg['mon_type']==1) ? 'selected' : '',
			"CAPTHA"		=> $this->captcha($cfg['captcha']),
		);

		ob_start();

		echo $this->core->sp(MCR_THEME_MOD."admin/settings/main.html", $data);

		return ob_get_clean();
	}

	private function to_int_keys($array=array()){
		if(empty($array)){ return false; }

		$cfg = $this->config->pagin;

		foreach($array as $key => $value){
			$cfg[$key] = (intval($value)<=0) ? 1 : intval($value);
		}

		return $cfg;
	}

	private function pagin(){

		$cfg = $this->config->pagin;

		if($_SERVER['REQUEST_METHOD']=='POST'){
			$post = $_POST;

			unset($post['mcr_secure']);
			unset($post['submit']);

			$cfg_keys = array_keys($cfg);
			rsort($cfg_keys);

			$post_keys = array_keys($post);
			rsort($post_keys);

			if($cfg_keys!==$post_keys){ $this->core->notify($this->lng["e_msg"], "Неверная хэш-сумма полей", 2, '?mode=admin&do=settings&op=pagin'); }

			$cfg = $this->to_int_keys($post);

			if(!$this->core->savecfg($cfg, 'pagin.php', 'pagin')){ $this->core->notify($this->lng["e_msg"], "Не удалось сохранить файл конфигурации", 2, '?mode=admin&do=settings&op=pagin'); }
			
			$this->core->notify($this->lng["e_success"], "Настройки успешно сохранены", 3, '?mode=admin&do=settings&op=pagin');
		}

		$data = array(
			"CFG"			=> $cfg
		);

		ob_start();

		echo $this->core->sp(MCR_THEME_MOD."admin/settings/pagin.html", $data);

		return ob_get_clean();
	}

	private function _mail(){

		$cfg = $this->config->mail;

		if($_SERVER['REQUEST_METHOD']=='POST'){

			$cfg['smtp']			= (intval(@$_POST['smtp']) === 1) ? true : false;

			$cfg['from']			= $this->core->safestr(@$_POST['from']);

			$cfg['from_name']		= $this->core->safestr(@$_POST['from_name']);

			$cfg['reply']			= $this->core->safestr(@$_POST['reply']);

			$cfg['reply_name']		= $this->core->safestr(@$_POST['reply_name']);

			$cfg['smtp_host']		= $this->core->safestr(@$_POST['smtp_host']);

			$cfg['smtp_user']		= $this->core->safestr(@$_POST['smtp_user']);

			$cfg['smtp_pass']		= $this->core->safestr(@$_POST['smtp_pass']);

			if(!$this->core->savecfg($cfg, 'mail.php', 'mail')){ $this->core->notify($this->lng["e_msg"], "Не удалось сохранить файл конфигурации", 2, '?mode=admin&do=settings&op=mail'); }
			
			$this->core->notify($this->lng["e_success"], "Настройки успешно сохранены", 3, '?mode=admin&do=settings&op=mail');
		}

		$data = array(
			"SMTP"			=> ($cfg['smtp']) ? 'selected' : '',
			"CFG"			=> $cfg,
		);

		ob_start();

		echo $this->core->sp(MCR_THEME_MOD."admin/settings/mail.html", $data);

		return ob_get_clean();
	}

	private function search_items($cfg){

		ob_start();

		foreach($cfg as $key => $value){

			$data = array(
				"KEY" => $this->db->HSC($key),
				"TITLE" => $this->db->HSC($value['title']),
				"PERMISSIONS" => $this->core->perm_list($value['permissions']),
			);

			echo $this->core->sp(MCR_THEME_MOD."admin/settings/search-id.html", $data);
		}

		return ob_get_clean();
	}

	private function search(){

		$cfg = $this->config->search;

		if($_SERVER['REQUEST_METHOD']=='POST'){

			if(!isset($_POST['key']) || !isset($cfg[$_POST['key']])){ $this->core->notify($this->lng["e_msg"], $this->lng['e_hack'], 2, '?mode=admin&do=settings&op=search'); }

			if(!$this->core->validate_perm(@$_POST['permissions'])){ $this->core->notify($this->lng["e_msg"], $this->lng['e_hack'], 2, '?mode=admin&do=settings&op=search'); }

			$key = $_POST['key'];

			$cfg[$key] = array(
				"title" => $this->core->safestr(@$_POST['title']),
				"permissions" => $this->core->safestr(@$_POST['permissions']),
			);

			if(!$this->core->savecfg($cfg, 'search.php', 'search')){ $this->core->notify($this->lng["e_msg"], "Не удалось сохранить файл конфигурации", 2, '?mode=admin&do=settings&op=search'); }
			
			$this->core->notify($this->lng["e_success"], "Настройки успешно сохранены", 3, '?mode=admin&do=settings&op=search');
		}

		$data = array(
			"ITEMS"			=> $this->search_items($cfg),
		);

		ob_start();

		echo $this->core->sp(MCR_THEME_MOD."admin/settings/search.html", $data);

		return ob_get_clean();
	}

	private function functions(){

		$cfg = $this->config->func;

		if($_SERVER['REQUEST_METHOD']=='POST'){

			$cfg['advice'] = (intval(@$_POST['advice'])===1) ? true : false;

			$cfg['breadcrumbs'] = (intval(@$_POST['breadcrumbs'])===1) ? true : false;

			if(!$this->core->savecfg($cfg, 'functions.php', 'func')){ $this->core->notify($this->lng["e_msg"], "Не удалось сохранить файл конфигурации", 2, '?mode=admin&do=settings&op=functions'); }
			
			$this->core->notify($this->lng["e_success"], "Настройки успешно сохранены", 3, '?mode=admin&do=settings&op=functions');
		}

		$data = array(
			"ADVICE" => ($cfg['advice']) ? 'selected' : '',
			"BREADCRUMBS" => ($cfg['breadcrumbs']) ? 'selected' : '',
		);

		ob_start();

		echo $this->core->sp(MCR_THEME_MOD."admin/settings/functions.html", $data);

		return ob_get_clean();
	}

	private function base(){

		include(MCR_ROOT.'configs/db.php');

		if($_SERVER['REQUEST_METHOD']=='POST'){

			$db['backend'] = $this->core->safestr(@$_POST['backend']);
			
			$db['host'] = $this->core->safestr(@$_POST['host']);
			
			$db['base'] = $this->core->safestr(@$_POST['base']);
			
			$db['user'] = $this->core->safestr(@$_POST['user']);
			
			$db['pass'] = $this->core->safestr(@$_POST['pass']);
			
			$db['port'] = intval(@$_POST['port']);

			if(!$this->core->savecfg($db, 'db.php', 'db')){ $this->core->notify($this->lng["e_msg"], "Не удалось сохранить файл конфигурации", 2, '?mode=admin&do=settings&op=base'); }
			
			$this->core->notify($this->lng["e_success"], "Настройки успешно сохранены", 3, '?mode=admin&do=settings&op=base');
		}

		$data = array(
			"MYSQL" => '',
			"PDO" => '',
			"MYSQLI" => ($db['backend']=='mysqli') ? 'selected' : '',
			"HOST" => $this->db->HSC($db['host']),
			"USER" => $this->db->HSC($db['user']),
			"PASS" => $this->core->safestr($db['pass']),
			"BASE" => $this->db->HSC($db['base']),
			"PORT" => intval($db['port']),
		);

		ob_start();

		echo $this->core->sp(MCR_THEME_MOD."admin/settings/base.html", $data);

		return ob_get_clean();
	}

	public function content(){

		$op = (isset($_GET['op'])) ? $_GET['op'] : 'list';

		switch($op){
			case 'pagin':		$content = $this->pagin(); break;
			case 'mail':		$content = $this->_mail(); break;
			case 'search':		$content = $this->search(); break;
			case 'base':		$content = $this->base(); break;
			case 'functions':	$content = $this->functions(); break;

			default:		$content = $this->main(); break;
		}

		ob_start();

		echo $content;

		return ob_get_clean();
	}
}

?>