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

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

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

	function __construct(){
		$geo = new Geo();
		$this->ip = $geo->get_ip();

		// ---------- Сохраняем Default значения
		$wt_country_by_default = strip_tags(urldecode($_GET['wt_country_by_default']));
		$wt_district_by_default = strip_tags(urldecode($_GET['wt_district_by_default']));
		$wt_region_by_default = strip_tags(urldecode($_GET['wt_region_by_default']));
		$wt_city_by_default = strip_tags(urldecode($_GET['wt_city_by_default']));
		
		$data = array();

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

		if (count($data) > 0){
			$this->geo_data = $geo->set_cookie($data);

		}else $this->geo_data = $geo->get_value();
		

		add_shortcode('wt_geotargeting', array (&$this, 'shortcode_geotargeting_action'));

		
		if (defined('ABSPATH') && is_admin()) {
		    // Добавляем страницу настроек в панель администратора
		    add_action('admin_menu',  array(&$this, 'admin') );
		    //Добавляем в описание плагина ссылку на справку.
		    add_filter('plugin_row_meta', 'WtGeoTargeting::plugin_row_meta', 10, 2);
		}

		
	}

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

	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;
		}

		return;
	}

	function admin()
	{
	    if (function_exists('add_options_page')) 
	    {
	        add_options_page('WT GeoTargeting - Инструкция', 'WT GeoTargeting', 8, 'wt_geotargeting/admin_page.php',
	        	array(&$this, 'admin_page'));
	    }
	}

	function admin_page()
	{
		
		include('admin_page.php'); 

	}
	
	// Добавление ссылок к описанию плагина
	public static function plugin_row_meta($meta, $file) {
        if ($file == WtGeoTargeting::basename()) {
            $meta[] = '<a href="options-general.php?page=wt_geotargeting/admin_page.php">Как настроить геотаргетинг?</a>';
        }
        return $meta;
    }

    // Формируем массив городов для справочника
    public function getCities(){
    	$options = array();

    	$cities_file_path = dirname(__FILE__) . '/cities.txt';	
    	$cities_file = fopen($cities_file_path, 'r');

    	// Перебираем данные файла
    	rewind($cities_file);
		while(!feof($cities_file))
		{
			$str = fgets($cities_file);				// Сохраняем строку
			if (empty($str)) continue;
			$arRecord = explode("\t", trim($str));	// Дробим на массив
			$city_id = $arRecord[0];
			$city_name = iconv('windows-1251', 'UTF-8', $arRecord[1]);		// Меняем кодировку с windows-1251 на UTF-8 и сохраняем
			$options[$city_id] = $city_name;
		}	

		asort($options);

    	return $options;
    }

    public function getCityInfo($id){
    	$city_info = array();

    	$cities_file_path = dirname(__FILE__) . '/cities.txt';	
    	$cities_file = fopen($cities_file_path, 'r');

    	// Перебираем данные файла
    	rewind($cities_file);
		while(!feof($cities_file))
		{
			$str = fgets($cities_file);				// Сохраняем строку
			$str = iconv('windows-1251', 'UTF-8', $str); // Меняем кодировку

			if (empty($str)) continue;
			$arRecord = explode("\t", trim($str));	// Дробим на массив
			if ($arRecord[0] != $id) continue;

			if (!empty($arRecord[0])) $city_info['id'] = $arRecord[0];
			if (!empty($arRecord[1])) $city_info['city'] = $arRecord[1];
			if (!empty($arRecord[2])) $city_info['region'] = $arRecord[2];
			if (!empty($arRecord[3])) $city_info['district'] = $arRecord[3];
			if (!empty($arRecord[4])) $city_info['lat'] = $arRecord[4];
			if (!empty($arRecord[5])) $city_info['lng'] = $arRecord[5];	
			break;	
		}	

    	return $city_info;
    }
}

$wt_geotargeting = new WtGeoTargeting();

?>