Your IP : 216.73.217.80


Current Path : /home/jlgagfroyt/www/plugins/acymailing/geolocation/
Upload File :
Current File : /home/jlgagfroyt/www/plugins/acymailing/geolocation/geolocation.php

<?php
/**
 * @package	AcyMailing for Joomla!
 * @version	5.11.3
 * @author	acyba.com
 * @copyright	(C) 2009-2022 ACYBA S.A.R.L. All rights reserved.
 * @license	GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 */

defined('_JEXEC') or die('Restricted access');
?><?php

class plgAcymailingGeolocation extends JPlugin{
	function __construct(&$subject, $config){
		parent::__construct($subject, $config);
		if(!isset($this->params)){
			$plugin = JPluginHelper::getPlugin('acymailing', 'geolocation');
			$this->params = new acyParameter($plugin->params);
		}
	}

	function onAcymailing_getPluginType(){
		return $this->acymailing_getPluginType();
	}

	function acymailing_getPluginType(){
		if($this->params->get('frontendaccess') == 'none' && !acymailing_isAdmin()) return;
		$onePlugin = new stdClass();
		$onePlugin->name = acymailing_translation('GEOLOCATION');
		$onePlugin->function = 'acymailinggeolocation_show';
		$onePlugin->help = 'plugin-geolocation';

		return $onePlugin;
	}

	function onAcymailinggeolocation_show(){
		return $this->acymailinggeolocation_show();
	}

	function acymailinggeolocation_show(){
		?>
		<script language="javascript" type="text/javascript">
			function applyTag(tagname){
				var string = '{geoloc:' + tagname;
				if(document.adminForm.geolocType && document.adminForm.geolocType.value != '0'){
					string += '|info:' + document.adminForm.geolocType.value;
				}
				string += '}';
				setTag(string);
				insertTag();
			}
		</script>
		<?php
		$descriptions['geolocation_type'] = acymailing_translation('ACY_ACTION');
		$descriptions['geolocation_ip'] = acymailing_translation('SUBSCRIBER_IP');
		$descriptions['geolocation_created'] = acymailing_translation('CREATED_DATE');
		$descriptions['geolocation_country'] = acymailing_translation('COUNTRYCAPTION');
		$descriptions['geolocation_country_code'] = acymailing_translation('GEOLOC_COUNTRYCODE');
		$descriptions['geolocation_state'] = acymailing_translation('STATECAPTION');
		$descriptions['geolocation_state_code'] = acymailing_translation('GEOLOC_STATECODE');
		$descriptions['geolocation_city'] = acymailing_translation('CITYCAPTION');
		$descriptions['geolocation_postal_code'] = acymailing_translation('GEOLOC_POSTALCODE');
		$descriptions['geolocation_latitude'] = acymailing_translation('GEOLOC_LATITUDE');
		$descriptions['geolocation_longitude'] = acymailing_translation('GEOLOC_LONGITUDE');
		$descriptions['geolocation_continent'] = acymailing_translation('GEOLOC_CONTINENT');
		$descriptions['geolocation_timezone'] = acymailing_translation('GEOLOC_TIMEZONE');

		$config = acymailing_config();
		$geoloc = $config->get('geolocation');
		$geoloc = explode(',', $geoloc);
		if(array_search('1', $geoloc) !== false) array_splice($geoloc, array_search('1', $geoloc), 1);
		$listOptions = array();
		$listOptions[] = acymailing_selectOption('0', acymailing_translation('GEOLOC_RECENT'));
		foreach($geoloc as $oneType){
			$listOptions[] = acymailing_selectOption($oneType, $oneType);
		}
		$text = '';
		if(acymailing_getVar('none', 'type') != 'notification'){
			$text .= acymailing_translation('ACY_ACTION').': '.acymailing_select($listOptions, 'geolocType', 'size="1"');
		}

		$text .= '<div class="onelineblockoptions">
					<table class="acymailing_table" cellpadding="1">';
		$fields = acymailing_getColumns('#__acymailing_geolocation');

		$k = 0;
		foreach($fields as $fieldname => $oneField){
			if(!isset($descriptions[$fieldname]) AND $oneField == 'tinyint') continue;
			if(in_array($fieldname, array('geolocation_id', 'geolocation_subid'))) continue;

			$type = '';
			if($fieldname == 'geolocation_created') $type = '|type:time';

			$tagName = $fieldname;
			if(acymailing_getVar('none', 'type') == 'notification') $tagName = 'notif_'.$fieldname;

			$text .= '<tr style="cursor:pointer" class="row'.$k.'" onclick="applyTag(\''.$tagName.$type.'\');" ><td class="acytdcheckbox"></td><td>'.$fieldname.'</td><td>'.@$descriptions[$fieldname].'</td></tr>';
			$k = 1 - $k;
		}

		$text .= '</table></div>';

		echo $text;
	}

	function onAcymailing_replaceusertags(&$email, &$user, $send = true){
		return $this->acymailing_replaceusertags($email, $user, $send);
	}

	function acymailing_replaceusertags(&$email, &$user, $send = true){
		$variables = array('subject', 'body', 'altbody');
		$acypluginsHelper = acymailing_get('helper.acyplugins');
		$result = $acypluginsHelper->extractTags($email, 'geoloc');
		$tags = array();

		foreach($result as $key => $oneTag){
			if(!empty($user->subid)){
				$query = 'SELECT * FROM #__acymailing_geolocation WHERE geolocation_subid='.$user->subid;
				if(!empty($oneTag->info->value)){
					$query .= ' AND geolocation_type='.acymailing_escapeDB($oneTag->info->value);
				}
				$query .= ' ORDER BY geolocation_created DESC LIMIT 1';
				$sqlRes = acymailing_loadObject($query);
			}
			$field = $oneTag->id;
			if(!empty($sqlRes) && !empty($sqlRes->$field)){
				$text = $sqlRes->$field;
				$acypluginsHelper->formatString($text, $oneTag);
				$tags[$key] = $text;
			}else{
				$tags[$key] = $oneTag->default;
			}
		}
		foreach($variables as $var){
			if(empty($email->$var)) continue;
			$email->$var = str_replace(array_keys($tags), $tags, $email->$var);
		}
	}

	function onAcyDisplayFilters(&$type, $context = "massactions"){

		if($this->params->get('displayfilter_'.$context, true) == false) return;

		$fields = acymailing_getColumns('#__acymailing_geolocation');
		if(empty($fields)) return;

		$field = array();
		$field[] = acymailing_selectOption('', '- - -');
		foreach($fields as $oneField => $fieldType){
			if($oneField == 'geolocation_id' || $oneField == 'geolocation_subid') continue;
			$field[] = acymailing_selectOption($oneField, $oneField);
		}
		$type['geolocfield'] = acymailing_translation('GEOLOCATION');

		$jsOnChange = "var searchMap = document.getElementById('filter__num__geolocfieldmap').value; ";
		$jsOnChange .= "var displayVal = 'ok'; ";
		$jsOnChange .= "if(document.getElementById('filter__num__geolocfieldoperator').value != '='){ displayVal = 'no'; } ";
		$jsOnChange .= "displayCondFilter('displayValues', 'toChange__num__',__num__,'geolocMap='+searchMap+'&displayCond='+displayVal+'&value='+document.getElementById('filter__num__geolocfieldvalue').value); ";

		$operators = acymailing_get('type.operators');
		$operators->extra = 'onchange="'.$jsOnChange.'"';

		$return = '<div id="filter__num__geolocfield">'.acymailing_select($field, "filter[__num__][geolocfield][map]", 'onchange="'.$jsOnChange.'" class="inputbox" size="1"', 'value', 'text');
		$return .= ' '.$operators->display("filter[__num__][geolocfield][operator]").' <span id="toChange__num__"><input onchange="countresults(__num__)" class="inputbox" type="text" name="filter[__num__][geolocfield][value]" id="filter__num__geolocfieldvalue" style="width:200px" value=""></span></div>';
		return $return;
	}

	function onAcyTriggerFct_displayValues(){
		$num = acymailing_getVar('int', 'num');
		$geolocMap = acymailing_getVar('string', 'geolocMap');
		$displayCond = acymailing_getVar('string', 'displayCond');
		$value = acymailing_getVar('string', 'value');

		$emptyInputReturn = '<input onchange="countresults('.$num.')" class="inputbox" type="text" name="filter['.$num.'][geolocfield][value]" id="filter'.$num.'geolocfieldvalue" style="width:200px" value="'.$value.'">';

		$listType = array('geolocation_type', 'geolocation_postal_code', 'geolocation_country', 'geolocation_country_code', 'geolocation_state', 'geolocation_state_code', 'geolocation_city');
		if(!empty($geolocMap) && $displayCond == 'ok' && in_array($geolocMap, $listType)){
			$query = 'SELECT DISTINCT '.acymailing_secureField($geolocMap).' FROM #__acymailing_geolocation LIMIT 100';
			$geolocPropositions = acymailing_loadResultArray($query);

			if(empty($geolocPropositions) || count($geolocPropositions) >= 100 || (count($geolocPropositions) == 1 && (empty($geolocPropositions[0]) || $geolocPropositions[0] == '-'))) return $emptyInputReturn;

			$valueProp = array();
			foreach($geolocPropositions as $proposition){
				$element = new stdClass();
				$element->valueProp = $proposition;
				array_push($valueProp, $element);
			}
			return acymailing_select($valueProp, "filter[$num][geolocfield][value]", 'onchange="countresults('.$num.')" class="inputbox" size="1" style="width:200px"', 'valueProp', 'valueProp', $value, 'filter'.$num.'geolocfieldvalue');
		}else{ // free input
			return $emptyInputReturn;
		}
	}

	function onAcyDisplayFilter_geolocfield($filter){
		return acymailing_translation('GEOLOCATION').' : '.$filter['map'].' '.$filter['operator'].' '.$filter['value'];
	}

	function onAcyProcessFilter_geolocfield(&$query, $filter, $num){
		if(empty($filter['map'])){
			$query->where[] = '1=0';
			return;
		}
		$query->leftjoin['geolocfield'] = '#__acymailing_geolocation AS geol ON geol.geolocation_subid=sub.subid';

		$value = acymailing_replaceDate($filter['value']);
		if(!is_numeric($value) && ($filter['map'] == 'geolocation_created')) $value = strtotime($value);

		$query->where[] = $query->convertQuery('geol', $filter['map'], $filter['operator'], $value);
	}

	function onAcyProcessFilterCount_geolocfield(&$query, $filter, $num){
		$this->onAcyProcessFilter_geolocfield($query, $filter, $num);
		return acymailing_translation_sprintf('SELECTED_USERS', $query->count());
	}
}