<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * MaxSite CMS
 * (c) https://max-3000.com/
 * 
 */

define("NR", "\n");    // перенос строки
define("NR2", "\n\n"); // двойной перенос строки
define("TAB", "\t");   // табулятор
define("NT", "\n\t");  // перенос + табулятор

/**
 *  функция инициализации
 */
function mso_initalizing()
{
	global $MSO;
	global $MSO_CACHE_OPTIONS;

	$CI = &get_instance();

	// нет соединения с Базой данных - всё рубим, а-а-а-а-а!
	if (!$CI->db->conn_id) die('Database not connected');

	// считываем файл конфигурации
	$fn = $MSO->config['config_file'];

	if (file_exists($fn)) require_once $fn;

	$path = getinfo('cache_dir');

	$mso_cache_last = $path . '_mso_cache_last.txt';

	if (file_exists($mso_cache_last)) {
		$time = (int) trim(implode('', file($mso_cache_last)));
		$time = $time + $MSO->config['cache_time'] + 60; // запас + 60 секунд

		if (time() > $time) mso_flush_cache(); // время истекло - сбрасываем кэш
	} else {
		// файла нет > _mso_cache_last.txt < создадим - наверное совсем старый кэш
		mso_flush_cache();
	}

	// подключаем опции - они могут быть в кэше
	if ($opt = mso_get_cache('options')) // есть кэш опций
		$MSO_CACHE_OPTIONS = $opt;
	else
		mso_refresh_options(); // обновляем кэш опций

	// проверим текущий шаблон
	$template = mso_get_option('template', 'general'); // считали из опций
	$index = $MSO->config['templates_dir'] . $template . '/index.php'; // проверим в реале

	if (!file_exists($index)) {
		// нет такого шаблона - меняем на дефолтный
		mso_add_option('template', 'default', 'general');
		$MSO->config['template'] = 'default';
	} else {
		// все ок
		$MSO->config['template'] = $template;
	}

	// проверяем залогинненость юзера
	if (!isset($CI->session->userdata['userlogged']) or !$CI->session->userdata['userlogged']) {
		// не залогинен
		$CI->session->userdata['userlogged'] = 0;
	} else {
		// отмечено, что залогинен
		// нужно проверить верность данных юзера
		$CI->db->from('users'); # таблица users
		$CI->db->select('users_id, users_groups_id');
		$CI->db->limit(1); # одно значение

		// $CI->db->where( array('users_login'    => $CI->session->userdata['users_login'],
		// 					  'users_password' => $CI->session->userdata['users_password']) );

		$CI->db->where(array(
			'users_login'    => mso_de_code($CI->session->userdata['users_login'], 'decode'),
			'users_password' => mso_de_code($CI->session->userdata['users_password'], 'decode')
		));

		$query = $CI->db->get();

		if (!$query or $query->num_rows() == 0) # нет такого - возможно взлом
		{
			$CI->session->sess_destroy(); // убиваем сессию
			$CI->session->userdata['userlogged'] = 0; // отмечаем, что не залогинен
		} else {
			// есть что-то
			$row = $query->row();

			// сразу выставим группу
			$MSO->data['session']['users_groups_id'] = $row->users_groups_id;
		}
	}

	// обновляем время последней активности сессии
	// раньше было только для users, теперь делаем для всех
	// при этом сохраняем предыдущее значение
	// это значение позволяет отследить периодичность действий посетителя
	if (isset($CI->session->userdata['last_activity'])) {
		$CI->session->set_userdata('last_activity_prev', $CI->session->userdata['last_activity']);
		$CI->session->set_userdata('last_activity', time());
	} else {
		$CI->session->set_userdata('last_activity_prev', time());
		$CI->session->set_userdata('last_activity', $CI->session->userdata['last_activity_prev']);
	}

	// аналогично проверяем и комюзера, только данные из куки
	// но при этом сразу сохраняем все данные комюзера, чтобы потом не обращаться к БД
	$comuser = mso_get_cookie('maxsite_comuser', false);
     
	if ($comuser) {
        $comuser = mso_de_code($comuser, 'decode'); // данные закодированы
		$comuser = @unserialize($comuser);
        
        if ($comuser) {
            /*
            [comusers_id] => 1
            [comusers_password] => 037035235237852
            [comusers_email] => max-3000@yyy.com
            [comusers_nik] => Максим
            [comusers_url] => https://maxsite.org/
            [comusers_avatar_url] => https://maxsite.org/avatar.jpg
            */

            // нужно сверить с тем, что есть
            $CI->db->select('comusers_id, comusers_password, comusers_email');
            $CI->db->where('comusers_id', $comuser['comusers_id']);
            $CI->db->where('comusers_password', mso_de_code($comuser['comusers_password'], 'decode'));
            $CI->db->where('comusers_email', $comuser['comusers_email']);

            $query = $CI->db->get('comusers');
            
            if ($query->num_rows()) {
                $CI->session->userdata['comuser'] = $comuser; // есть такой комюзер
            } else {
                
                $CI->session->userdata['comuser'] = 0; // неверные данные
            }
        } else {
            $CI->session->userdata['comuser'] = 0; // неверные данные
        }
	} else {
		$CI->session->userdata['comuser'] = 0;
	}

	// дефолтные хуки
	mso_hook_add('init', '_mso_require_functions_file'); // подключение functions.php текущего шаблона
	mso_hook_add('content_content', 'mso_shortcode_content', 1); // хук контента на шорткоды
	mso_hook_add('body_end', 'mso_add_file_body_end', 1); // хук на вывод подключенных файлов в конце BODY
	mso_hook_add('head_end', 'mso_add_preload_hook', 1); // хук на вывод preload в HEAD
}

/**
 * Подключим файл functions.php в шаблоне - если есть
 * функция срабатывает по хуку init
 *
 * @param  mixed $args
 *
 * @return void
 */
function _mso_require_functions_file($args = '')
{
	global $MSO;

	$fn = $MSO->config['templates_dir'] . $MSO->config['template'] . '/functions.php';

	if (file_exists($fn)) require_once $fn;

	return $args;
}

# end of file
