<?php
/**
* Field Plug for AdsManager
* Author: Thomas PAPIN
* URL: http://www.joomprod.com
* mail: webmaster@joomprod.com
**/
class AdsManagerGmapPlugin {
function getListDisplay($contentid,$field)
{
return AdsManagerGmapPlugin::getDetailsDisplay($contentid,$field);
}
function getDetailsDisplay($contentid,$field)
{
global $database;
$query = "SELECT * FROM #__adsmanager_fieldgmap as m".
" LEFT JOIN #__adsmanager_ads as a ON m.contentid = a.id".
" WHERE m.fieldid = $field->fieldid AND m.contentid = $contentid";
$fieldid = $field->fieldid;
$database->setQuery($query);
$database->loadObject($result );
if ($result)
{
$lat = $result->lat;
$lng = $result->lng;
$ad_headline = $result->ad_headline;
$name = $result->name;
$ad_text = trim($result->ad_text);
$database->setQuery("SELECT * FROM #__adsmanager_fieldgmap_conf WHERE fieldid = $field->fieldid");
$database->loadObject($conf);
$map_width = $conf->map_width;//500;
$map_height= $conf->map_height;//300;
$google_key = $conf->google_key;//
//$return = '<script src="http://maps.google.com/maps?file=api&v=2.x&key='.$google_key.'" type="text/javascript"></script>';
$return = '<script src="http://api-maps.yandex.ru/1.1/index.xml?key='.$google_key.' " type="text/javascript"></script>';
$return .= '<script type="text/javascript">';
$return .= 'function initialize() {';
// $return .= ' if (GBrowserIsCompatible()) {';
// $return .= ' var map = new GMap2(document.getElementById("map_canvas'.$fieldid.'"));';
$return .= ' var map = new YMaps.Map(document.getElementById("map_canvas'.$fieldid.'"));';
// $return .= ' map.setCenter(new GLatLng('.$lat.', '.$lng.'), 13);';
// Устанавливает начальные параметры отображения карты: центр карты и коэффициент масштабирования
$return .= ' map.setCenter(new YMaps.GeoPoint('.$lat.', '.$lng.'), 13);';
//$return .= ' var center = new GLatLng('.$lat.', '.$lng.');';
$return .= ' var center = new YMaps.GeoPoint('.$lat.', '.$lng.');';
// Шаблон балуна
$return .= ' var template = new YMaps.Template(';
$return .= ' "<b> <span style=\"color:red\"> </span> $[name|Название]</b>\: ';
$return .= ' <div>$[description|Описание:]</div>\ ';
$return .= ' <div>Подробнее <a href=\"index.php?option=com_adsmanager&page=show_ad&adid=$[metaDataProperty.moreLink]\">здесь</a></div>");';
$return .= ' var S = new YMaps.Style();';
$return .= ' S.balloonContentStyle = new YMaps.BalloonContentStyle(template);';
// $return .= ' var marker = new GMarker(center); map.addOverlay(marker);';
$return .= ' var marker = new YMaps.Placemark(center, {style:S});';
$return .= ' marker.name = "'.$ad_headline.'";';
$text='';
$text = $contentid . "&Itemid=0" ;
$return .= ' marker.metaDataProperty.moreLink = "'.$text.'";';
$return .= ' map.addOverlay(marker);';
// $return .= ' marker.description = "'.$ad_text.'";';
$return .= ' map.addOverlay(marker);';
//////////////////////////////////////////////////////////////////////////////
$query = "SELECT * FROM #__adsmanager_fieldgmap as m".
" LEFT JOIN #__adsmanager_ads as a ON m.contentid = a.id".
" WHERE m.contentid <> $contentid";
$database->setQuery($query);
$rows = $database->loadObjectList();
foreach ($rows as $row)
{
$return .= ' var center = new YMaps.GeoPoint('.$row->lat.', '.$row->lng.');';
$return .= ' var marker = new YMaps.Placemark(center, {style:S});';
$return .= ' marker.name = "'.$row->ad_headline.'";';
//$return .= ' marker.description = <img src="http://img.yandex.ru/i/m_logo.png" alt=""/>;';
$text='';
$text = $row->contentid . "&Itemid=0" ;
$return .= ' marker.metaDataProperty.moreLink = "'.$text.'";';
$return .= ' map.addOverlay(marker);';
}
/////////////////////////////////////////////////////////////////////////////
// $return .= ' map.addControl(new GSmallMapControl());';
// $return .= ' map.addControl(new GMapTypeControl());';
$return .= ' map.addControl(new YMaps.TypeControl());';
$return .= ' map.addControl(new YMaps.ToolBar());';
$return .= ' map.addControl(new YMaps.Zoom());';
$return .= ' map.addControl(new YMaps.MiniMap());';
$return .= ' map.addControl(new YMaps.ScaleLine());';
// $return .= ' }';
$return .= '}';
$return .= '</script>';
$return .= '</script>';
// $return .= '<div id="map_canvas'.$fieldid.'" style="width: '.$map_width.'px; height: '.$map_height.'px"></div>';
$return .= '<div id="map_canvas'.$fieldid.'" style="width: '.$map_width.'px; height: '.$map_height.'px"></div>';
$return .= '<script type="text/javascript">initialize();</script>';
return $return;
}
}
function getFormDisplay($contentid,$field)
{
global $database;
$query = "SELECT lat,lng FROM #__adsmanager_fieldgmap ".
"WHERE fieldid = $field->fieldid AND contentid = $contentid";
$fieldid = $field->fieldid;
$database->setQuery($query);
$database->loadObject($result );
$database->setQuery("SELECT * FROM #__adsmanager_fieldgmap_conf WHERE fieldid = $field->fieldid");
$database->loadObject($conf);
if (isset($result))
{
$lat = $result->lat;
$lng = $result->lng;
}
else
{
$lat = $conf->lat;//"37.4419";
$lng = $conf->lng;//" -122.1419";
}
$map_width = $conf->map_width;//500;
$map_height= $conf->map_height;//300;
$google_key = $conf->google_key;//ABQIAAAAbgp4ITpmNUShfIO_dNHv_BR3Tz62YPXwBIaKJWeQ0jDUesttEhTdqyqafAWvPNs2HRK7lWBo2Yemww
//$return = '<script src="http://maps.google.com/maps?file=api&v=2.x&key='.$google_key.'" type="text/javascript"></script>';
$return = '<script src="http://api-maps.yandex.ru/1.1/index.xml?key='.$google_key.' " type="text/javascript"></script>';
$return .= '<script type="text/javascript">';
$return .= 'var map = null;';
$return .= 'var geocoder = null;';
$return .= 'var marker = null;';
$return .= 'function initialize() {';
//$return .= ' if (GBrowserIsCompatible()) {';
//$return .= ' map = new GMap2(document.getElementById("map_canvas'.$fieldid.'"));';
$return .= ' map = new YMaps.Map(document.getElementById("map_canvas'.$fieldid.'"));';
//$return .= ' map.setCenter(new GLatLng('.$lat.', '.$lng.'), 13);';
$return .= ' map.setCenter(new YMaps.GeoPoint('.$lat.', '.$lng.'), 13);';
//$return .= ' var center = new GLatLng('.$lat.', '.$lng.');';
$return .= ' var center = new YMaps.GeoPoint('.$lat.', '.$lng.');';
//$return .= ' marker = new GMarker(center, {draggable: true}); map.addOverlay(marker);';
$return .= ' marker = new YMaps.Placemark(center,{draggable: true, style:"default#pinkPoint"}); map.addOverlay(marker);';
$return .= ' marker.setBalloonContent("<div>Я тут</div>");';
$return .= ' map.addControl(new YMaps.TypeControl());';
$return .= ' map.addControl(new YMaps.ToolBar());';
$return .= ' map.addControl(new YMaps.Zoom());';
$return .= ' map.addControl(new YMaps.MiniMap());';
$return .= ' map.addControl(new YMaps.ScaleLine());';
//$return .= ' GEvent.addListener(marker, "dragstart", function() {';
//$return .= ' });';
$return .= ' YMaps.Events.observe(marker, marker.Events.DragStart, function (mEvent) {';
$return .= ' });';
//$return .= ' GEvent.addListener(marker, "dragend", function() {';
$return .= ' YMaps.Events.observe(marker, marker.Events.DragEnd, function (mEvent) {';
$return .= ' var newGeoPoint = mEvent.getGeoPoint();';
//$return .= ' document.getElementById("gmap_lat'.$fieldid.'").value = marker.getLatLng().lat();';
//$return .= ' document.getElementById("gmap_lng'.$fieldid.'").value = marker.getLatLng().lng();';
$return .= ' document.getElementById("gmap_lat'.$fieldid.'").value = newGeoPoint.getLng();';
$return .= ' document.getElementById("gmap_lng'.$fieldid.'").value = newGeoPoint.getLat();';
$return .= ' });';
//$return .= ' map.addControl(new GSmallMapControl());';
//$return .= ' map.addControl(new GMapTypeControl());';
//$return .= ' geocoder = new GClientGeocoder();';
//$return .= ' }';
$return .= '}';
//$return .= 'function showAddress(address) {';
//$return .= 'if (geocoder) {';
//$return .= 'geocoder.getLatLng(';
//$return .= ' address,';
//$return .= ' function(point) {';
//$return .= ' if (!point) {';
//$return .= ' alert(address + " not found");';
//$return .= ' } else {';
//$return .= ' map.setCenter(point, 13);';
//$return .= ' delete marker;';
//$return .= ' map.clearOverlays();';
//$return .= ' marker = new GMarker(point, {draggable: true}); ';
//$return .= ' document.getElementById("gmap_lat'.$fieldid.'").value = marker.getLatLng().lat();';
//$return .= ' document.getElementById("gmap_lng'.$fieldid.'").value = marker.getLatLng().lng();';
//$return .= ' GEvent.addListener(marker, "dragstart", function() {';
//$return .= ' });';
//$return .= ' GEvent.addListener(marker, "dragend", function() {';
//$return .= ' document.getElementById("gmap_lat'.$fieldid.'").value = marker.getLatLng().lat();';
//$return .= ' document.getElementById("gmap_lng'.$fieldid.'").value = marker.getLatLng().lng();';
//$return .= ' });';
//$return .= ' map.addOverlay(marker);';
//$return .= ' }';
//$return .= ' }';
//$return .= ');';
//$return .= '}';
//$return .= '}';
// Функция для отображения результата геокодирования
// Параметр value - адрес объекта для поиска
$return .= 'var map, geoResult;';
$return .= 'function showAddress (address) {';
// Удаление предыдущего результата поиска
//map.removeOverlay(geoResult);
$return .= 'map.removeAllOverlays();';
// Запуск процесса геокодирования
$return .= ' var geocoder = new YMaps.Geocoder(address, {results: 1, boundedBy: map.getBounds()});';
// Создание обработчика для успешного завершения геокодирования
$return .= ' YMaps.Events.observe(geocoder, geocoder.Events.Load, function (mEvent) {';
// Если объект был найден, то добавляем его на карту
// и центрируем карту по области обзора найденного объекта
$return .= ' if (this.length()) {';
// $return .= ' geoResult = this.get(0);';
// $return .= ' map.addOverlay(geoResult);';
// $return .= ' map.setBounds(geoResult.getBounds());';
$return .= ' var geoCoords = geocoder.get(0).getGeoPoint();';
$return .= ' geoPlacemark = new YMaps.Placemark(geoCoords,{draggable: true , style:"default#pinkPoint"});';
$return .= ' geoPlacemark.setBalloonContent("<div>Я тут</div>");';
$return .= ' map.addOverlay(geoPlacemark);';
$return .= ' map.setCenter(geoCoords, 13);';
$return .= ' document.getElementById("gmap_lat'.$fieldid.'").value = geoCoords.getLng();';
$return .= ' document.getElementById("gmap_lng'.$fieldid.'").value = geoCoords.getLat();';
$return .= ' YMaps.Events.observe(geoPlacemark, geoPlacemark.Events.DragEnd, function (mEvent) {';
$return .= ' var newGeoPoint = mEvent.getGeoPoint();';
// $return .= ' alert(newGeoPoint.getLng());';
$return .= ' document.getElementById("gmap_lat'.$fieldid.'").value = newGeoPoint.getLng();';
$return .= ' document.getElementById("gmap_lng'.$fieldid.'").value = newGeoPoint.getLat();';
$return .= ' });';
$return .= ' map.addControl(new YMaps.TypeControl());';
$return .= ' map.addControl(new YMaps.ToolBar());';
$return .= ' map.addControl(new YMaps.Zoom());';
$return .= ' map.addControl(new YMaps.MiniMap());';
$return .= ' map.addControl(new YMaps.ScaleLine());';
$return .= ' }else {';
$return .= ' alert("Ничего не найдено");';
$return .= ' }';
$return .= ' }';
$return .= ');';
$return .= '}';
$return .= '</script>';
$return .= '</script>';
$return .= '<div>';
$return .= '<input type="text" size="60" name="gmap_address'.$fieldid.'" value="Введите адрес, чтобы найти на карте" />';
$return .= '<input type="button" value="Найти!" onClick="showAddress(adminForm.gmap_address'.$fieldid.'.value);" />';
$return .= '<div id="map_canvas'.$fieldid.'" style="width: '.$map_width.'px; height: '.$map_height.'px"></div>';
$return .= '<input type="hidden" id="gmap_lat'.$fieldid.'" name="gmap_lat'.$fieldid.'" value="'.$lat.'"/>';
$return .= '<input type="hidden" id="gmap_lng'.$fieldid.'" name="gmap_lng'.$fieldid.'" value="'.$lng.'"/>';
$return .= '<script type="text/javascript">initialize();</script>';
$return .= '<b>Если не нашли свой адрес, вы можете перетащить маркер в нужное место.</b>';
$return .= '</div>';
return $return;
}
function onFormSave($contentid,$fieldid,$update)
{
global $database;
$lat = mosGetParam($_POST,"gmap_lat$fieldid",0);
$lng = mosGetParam($_POST,"gmap_lng$fieldid",0);
if ($update == 1)
{
$query = "DELETE FROM #__adsmanager_fieldgmap WHERE fieldid = $fieldid AND contentid = $contentid";
$database->setQuery($query);
$database->query();
$query = "INSERT INTO #__adsmanager_fieldgmap (`fieldid`,`contentid`,`lat`,`lng`) VALUES ".
"($fieldid,$contentid,'$lat','$lng')";
$database->setQuery($query);
$database->query();
}
else
{
$query = "INSERT INTO #__adsmanager_fieldgmap (`fieldid`,`contentid`,`lat`,`lng`) VALUES ".
"($fieldid,$contentid,'$lat','$lng')";
$database->setQuery($query);
$database->query();
}
}
function onDelete($directory,$contentid = -1)
{
global $database;
if ($contentid == -1)
$query = "DELETE FROM #__adsmanager_fieldgmap ".
"WHERE 1";
else
$query = "DELETE FROM #__adsmanager_fieldgmap ".
"WHERE contentid = $contentid";
$database->setQuery($query);
$database->query();
}
function getEditFieldJavaScriptDisable()
{
$return = "elem=getObject('divGMapOptions');";
$return .= "elem.style.visibility = 'hidden';";
$return .= "elem.style.display = 'none';";
$return .= "elem=getObject('gmap_map_width');";
$return .= "elem.setAttribute('mosReq',0);";
$return .= "elem=getObject('gmap_map_height');";
$return .= "elem.setAttribute('mosReq',0);";
$return .= "elem=getObject('gmap_lat');";
$return .= "elem.setAttribute('mosReq',0);";
$return .= "elem=getObject('gmap_lng');";
$return .= "elem.setAttribute('mosReq',0);";
$return .= "elem=getObject('gmap_google_key');";
$return .= "elem.setAttribute('mosReq',0);";
return $return;
}
function getEditFieldJavaScriptActive()
{
$return = "disableAll();";
$return .= "elem=getObject('divGMapOptions');";
$return .= "elem.style.visibility = 'visible';";
$return .= "elem.style.display = 'block';";
$return .= "elem=getObject('gmap_map_width');";
$return .= "elem.setAttribute('mosReq',1);";
$return .= "elem=getObject('gmap_map_height');";
$return .= "elem.setAttribute('mosReq',1);";
$return .= "elem=getObject('gmap_lat');";
$return .= "elem.setAttribute('mosReq',1);";
$return .= "elem=getObject('gmap_lng');";
$return .= "elem.setAttribute('mosReq',1);";
$return .= "elem=getObject('gmap_google_key');";
$return .= "elem.setAttribute('mosReq',1);";
return $return;
}
function getEditFieldOptions($fieldid)
{
global $database;
$database->setQuery("SELECT * FROM #__adsmanager_fieldgmap_conf WHERE fieldid = '$fieldid'");
$database->loadObject($row);
$return = "<div id='divGMapOptions'>";
$return .= "<table class='adminform'>";
$return .= "<tr>";
$return .= "<td width='20%'>Map Width</td>";
$return .= "<td width='20%' align=left><input type='text' id='gmap_map_width' name='gmap_map_width' mosReq=1 mosLabel='Map Width' class='inputbox' value='".@$row->map_width."' /></td>";
$return .= "<td> </td>";
$return .= "</tr>";
$return .= "<tr>";
$return .= "<td width='20%'>Map Height</td>";
$return .= "<td width='20%' align=left><input type='text' id='gmap_map_height' name='gmap_map_height' mosReq=1 mosLabel='Map Height' class='inputbox' value='".@$row->map_height."' /></td>";
$return .= "<td> </td>";
$return .= "</tr>";
$return .= "<tr>";
$return .= "<td width='20%'>Default Lat</td>";
$return .= "<td width='20%' align=left><input type='text' id='gmap_lat' name='gmap_lat' mosReq=1 mosLabel='Default Lat' class='inputbox' value='".@$row->lat."' /></td>";
$return .= "<td> </td>";
$return .= "</tr>";
$return .= "<tr>";
$return .= "<td width='20%'>Default Lng</td>";
$return .= "<td width='20%' align=left><input type='text' id='gmap_lng' name='gmap_lng' mosReq=1 mosLabel='Default Lng' class='inputbox' value='".@$row->lng."' /></td>";
$return .= "<td> </td>";
$return .= "</tr>";
$return .= "<tr>";
$return .= "<td width='20%'>Google Key</td>";
$return .= "<td width='20%' align=left><input type='text' id='gmap_google_key' name='gmap_google_key' mosReq=1 mosLabel='Google Key' class='inputbox' value='".@$row->google_key."' /></td>";
$return .= "<td> </td>";
$return .= "</tr>";
$return .= "</table>";
$return .= "</div>";
return $return;
}
function saveFieldOptions($fieldid)
{
global $database;
$gmap_map_width = mosGetParam($_POST,"gmap_map_width",0);
$gmap_map_height = mosGetParam($_POST,"gmap_map_height",0);
$gmap_lat = mosGetParam($_POST,"gmap_lat",0);
$gmap_lng = mosGetParam($_POST,"gmap_lng",0);
$gmap_google_key = mosGetParam($_POST,"gmap_google_key",0);
$database->setQuery("DELETE FROM #__adsmanager_fieldgmap_conf WHERE fieldid = '$fieldid'");
$database->query();
$database->setQuery("INSERT INTO #__adsmanager_fieldgmap_conf VALUES ($fieldid,$gmap_map_width,$gmap_map_height,'$gmap_lat','$gmap_lng','$gmap_google_key')");
$database->query();
return;
}
function getFieldName()
{
return "GMap Field";
}
function install()
{
global $database;
$query = "CREATE TABLE IF NOT EXISTS `#__adsmanager_fieldgmap` ( ".
"`id` int(10) unsigned NOT NULL auto_increment, ".
"`fieldid` int(10) unsigned default NULL, ".
"`contentid` int(10) unsigned default NULL, ".
"`lat` TEXT default NULL, ".
"`lng` TEXT default NULL, ".
"PRIMARY KEY (`id`) ".
"); ";
$database->setQuery($query);
$database->query();
$query = "CREATE TABLE IF NOT EXISTS `#__adsmanager_fieldgmap_conf` ( ".
"`fieldid` int(10) unsigned default NULL, ".
"`map_width` int(10) unsigned default '500', ".
"`map_height` int(10) unsigned default '300', ".
"`lat` VARCHAR( 255 ) default '37.4419', ".
"`lng` VARCHAR( 255 ) default '-122.1419', ".
"`google_key` TEXT default NULL, ".
"PRIMARY KEY (`fieldid`) ".
"); ";
$database->setQuery($query);
$database->query();
}
function uninstall()
{
global $database;
$query = "DROP TABLE `#__adsmanager_fieldgmap`";
$database->setQuery($query);
$database->query();
$query = "DROP TABLE `#__adsmanager_fieldgmap_conf`";
$database->setQuery($query);
$database->query();
}
}
$plugins["gmap"] = new AdsManagerGmapPlugin();
?>