<?php
/*
Plugin Name: WT GeoTargeting
Plugin URI: http://web-technology.biz/cms-wordpress/plugin-wt-geotargeting-for-cms-wordpress
Description: Настройка геотаргетинга с помощью Шорткодов.
Version: 1.3.1
Author: Кусты Роман, АИТ "Web-Techology"
Author URI: http://web-technology.biz
*/

include('geo.php'); // Подключаем класс для работы с базой http://ipgeobase.ru
require('admin_panel.php');
include('data_files.php');

class WtGeoTargeting
{
	var $ip;
	var $geo_data;
	var $record = array();

	var $admin;

	function __construct(){	
		// Перенес код из __construct() в initial(), так как возникли сложности в инициализации плагина
		add_action( 'init',array( $this, 'initial' ) );	
	}

	public function initial(){
		$options = array();

		// ТЕСТОВЫЙ РЕЖИМ
		// Проверяем роль пользователя для включения тестового режима
		if (is_user_logged_in()  && current_user_can('administrator')){

			
			$options_debug = get_option('wt_geotargeting_debug');

			if (isset($options_debug['mode']) && $options_debug['mode'] == 'ip'
				&& isset($options_debug['ip']) && filter_var($options_debug['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)){

				$options['ip'] = $options_debug['ip'];
			}

			if (isset($options_debug['mode']) && $options_debug['mode'] == 'city'
				&& isset($options_debug['city_id'])){

				// Проверка и получение выбранного для тестирования города
				$data_files = new WtGeoTargetingDataFiles();
				$debug_geo_data = $data_files->getCityInfo($options_debug['city_id']);
			}

			if (isset($options_debug['mode']) && $options_debug['mode'] == 'country'
				&& isset($options_debug['country_alpha2'])){

				$debug_geo_data = array('country' => $options_debug['country_alpha2']);
			}
		}

		$geo = new Geo($options);
		$this->ip = $geo->ip;

		// Очищаем cookie
		if (isset($_GET['wt_geo_clean'])){
			$wt_geo_clean = strip_tags(urldecode($_GET['wt_geo_clean']));
			if ($wt_geo_clean == 1) $geo->cookie_clean();
		} 
		
		// Сохраняем массив значений региона для работы плагина

		if (isset($options_debug['mode']) && $options_debug['mode'] == 'ip'){

			// Получаем значения из IpGoeBase не сохраняя в cookie 
			$this->geo_data = $geo->get_value(null, false);

		}elseif (isset($options_debug['mode']) 
			&& ($options_debug['mode'] == 'city' || $options_debug['mode'] == 'country') 
			&& count($debug_geo_data) > 0){

			$this->geo_data = $debug_geo_data;

		}elseif (count($data_default = $this->setDataDefault()) > 0){  // Default значения
			$this->geo_data = $geo->set_cookie($data_default);

		}else $this->geo_data = $geo->get_value();
		
		// Регистрируем шорткод и хук для него
		add_shortcode('wt_geotargeting', array (&$this, 'shortcode_geotargeting_action'));

		
		if (defined('ABSPATH') && is_admin()) {
		    $this->admin = new WtGeoTargetingAdmin();
		    $this->admin->geo = $this;
		}
	}

	public static function basename() {
        return plugin_basename(__FILE__);
    }

    // Сохраняем Default значения
    function setDataDefault()
    {
		if (isset($_GET['wt_country_by_default'])) $wt_country_by_default = strip_tags(urldecode($_GET['wt_country_by_default']));
		if (isset($_GET['wt_district_by_default'])) $wt_district_by_default = strip_tags(urldecode($_GET['wt_district_by_default']));
		if (isset($_GET['wt_region_by_default'])) $wt_region_by_default = strip_tags(urldecode($_GET['wt_region_by_default']));
		if (isset($_GET['wt_city_by_default'])) $wt_city_by_default = strip_tags(urldecode($_GET['wt_city_by_default']));
		
		$data_default = array();

		if (!empty($wt_country_by_default)) $data_default['country'] = $wt_country_by_default;
		if (!empty($wt_district_by_default)) $data_default['district'] = $wt_district_by_default;
		if (!empty($wt_region_by_default)) $data_default['region'] = $wt_region_by_default;
		if (!empty($wt_city_by_default)) $data_default['city'] = $wt_city_by_default;

		return $data_default;    	
    }

	function shortcode_geotargeting_action($param, $content){
		
		// Определяем выводился-ли ранее контент для указанного типа, если да, то завершаем выполнение
		if (isset($param['type']) && isset($this->record[$param['type']]) &&
			$this->record[$param['type']] > 0)
			return;

		// Проверяем совпадение локации
		if (isset($param['city_show']) && isset($this->geo_data['city']) &&
			$param['city_show'] == $this->geo_data['city']){

			if (isset($param['type'])) $this->record[$param['type']] ++;
			return $content;
		}

		if (isset($param['city_not_show']) && isset($this->geo_data['city']) &&
			$param['city_not_show'] != $this->geo_data['city']){

			if (isset($param['type'])) $this->record[$param['type']] ++;
			return $content;
		}

		if (isset($param['region_show']) && isset($this->geo_data['region']) &&
			$param['region_show'] == $this->geo_data['region']){

			if (isset($param['type'])) $this->record[$param['type']] ++;
			return $content;
		}

		if (isset($param['region_not_show']) && isset($this->geo_data['region']) &&
			$param['region_not_show'] != $this->geo_data['region']){

			if (isset($param['type'])) $this->record[$param['type']] ++;
			return $content;
		}

		if (isset($param['district_show']) && isset($this->geo_data['district']) &&
			$param['district_show'] == $this->geo_data['district']){

			if (isset($param['type'])) $this->record[$param['type']] ++;
			return $content;
		}

		if (isset($param['district_not_show']) && isset($this->geo_data['district']) &&
			$param['district_not_show'] != $this->geo_data['district']){

			if (isset($param['type'])) $this->record[$param['type']] ++;
			return $content;
		}

		if (isset($param['country_show']) && isset($this->geo_data['country']) &&
			$param['country_show'] == $this->geo_data['country']){

			if (isset($param['type'])) $this->record[$param['type']] ++;
			return $content;
		}

		if (isset($param['country_not_show']) && isset($this->geo_data['country']) &&
			$param['country_not_show'] != $this->geo_data['country']){

			if (isset($param['type'])) $this->record[$param['type']] ++;
			return $content;
		}

		if (isset($param['default']) && $param['default'] == true){
			
			if (isset($param['type'])) $this->record[$param['type']] ++;
			return $content;
		}

		// Вывод текущих значений
		if (!empty($param['get'])){

			if ($param['get'] == 'ip'){
				$this->record[$param['type']] ++;
				return $this->ip;
			} 
			
			if (!empty($this->geo_data[$param['get']])){
				$this->record[$param['type']] ++;
				return $this->geo_data[$param['get']];
			}
			
		}


		return;
	}

}


$wt_geotargeting = new WtGeoTargeting();

?>