* @version $Revision: 1253 $
*
*/
GalleryCoreApi::requireOnce('modules/map/classes/mapHelper.class');
GalleryCoreApi::requireOnce('modules/map/classes/GoogleMapUtilities.class');
/**
* This controller will handle assigning values to custom fields
*
* @package map
* @subpackage UserInterface
*
*/
class mapItemEdit extends ItemEditPlugin {
/**
* @see ItemEditPlugin::handleRequest
*/
function handleRequest($form, &$item, &$preferred) {
global $gallery;
$gurl =& $gallery->getUrlGenerator();
$status = null;
$error = array();
list ($ret, $module) = GalleryCoreApi::loadPlugin('module', 'map');
if ($ret) {
return array($ret->wrap(__FILE__, __LINE__), null, null, null);
}
if (isset($form['action']['save'])) {
/* error control */
/*
* heading can be +/- 180 degrees
* tilt can be 0-90 degrees
* range can be 0-63710000 m
*/
$headingregex = '[-+]?((180(\.0*)?)|((1[0-7]|[0-9])?'
. '[0-9](\.[0-9]{0,20})?)|(\.[0-9]{1,19}))';
$tiltregex = '((90(\.0*)?)|([0-8]?[0-9](\.[0-9]{0,20})?)|(\.[0-9]{1,19}))?';
$rangeregex = '([0-9]{0,8})';
/* latitude can be +/- 90 degrees, longitude can be +/- 180 degrees */
$latregex='[-+]?' . $tiltregex;
$lonregex = $headingregex;
if (!preg_match('/^(' . $latregex . '(\040)*,(\040)*' . $lonregex
. ')?$/', trim($form['fields']['GPS']))) {
$status = ''
. $module->translate('Bad coordinates, please verify') . '';
} else if (!preg_match('/^(' . $headingregex . '((\040)*,(\040)*'
. $tiltregex . '((\040)*,(\040)*' . $rangeregex . ')?)?)?$/',
trim($form['fields']['GELookAt']))) {
$status = ''
. $module->translate('Bad LookAt parameters, please verify') . '';
} else {
/* cleanup the coordinates of any spaces */
if ($form['fields']['GPS'] != '') {
$form['fields']['GPS'] = str_replace(' ', '', trim($form['fields']['GPS']));
}
if ($form['fields']['GELookAt'] != '') {
$form['fields']['GELookAt'] =
str_replace(' ', '', trim($form['fields']['GELookAt']));
}
if (($form['fields']['ZoomLevel'] != '') and ($form['fields']['ZoomLevel'] == 0)) {
$form['fields']['ZoomLevel'] = '0.0';
}
$ret = mapHelper::saveFieldValues($item, $form['fields']);
if ($ret) {
return $ret->wrap(__FILE__, __LINE__);
}
$status = $module->translate('Changes saved successfully');
}
} else if (isset($form['action']['getexif'])) {
$form['fields']['GPS'] = $form['exif'];
$ret = mapHelper::saveFieldValues($item, $form['fields']);
if ($ret) {
return array($ret->wrap(__FILE__, __LINE__), null, null, null);
}
list ($ret, $module) = GalleryCoreApi::loadPlugin('module', 'map');
if ($ret) {
return array($ret->wrap(__FILE__, __LINE__), null, null, null);
}
$status = $module->translate('GPS coordinates successfully entered and saved');
} else if (isset($form['action']['setexif'])) {
/* Write the GPS coordinates to the EXIF header */
/* Get the coordinates from the field */
if ($form['fields']['GPS'] != '') {
$coordinates = $form['fields']['GPS'];
list ($ret, $error, $status, $other) = GoogleMapUtilities::setGPSCoordsInExif($item, $coordinates, true);
if ($ret) {
return array($ret->wrap(__FILE__, __LINE__), null, null, null);
}
} else {
$error[] = 'form[error][gps][missingGPSCoordinates]';
}
}
return array(null, $error, $status, false);
}
/**
* @see ItemEditPlugin::loadTemplate
*/
function loadTemplate(&$template, &$form, $item, $thumbnail) {
if ($form['formName'] != 'mapItemEdit') {
$form['formName'] = 'mapItemEdit';
$form['itemId'] = $item->getId();
}
list ($ret, $form['exif']) = GoogleMapUtilities::getGPSCoordsFromExif($item);
if ($ret) {
return array($ret->wrap(__FILE__, __LINE__), null, null);
}
if ($form['exif'] == null) {
$form['noexif'] = 1;
}
$servername = preg_replace('/:[0-9]+/', '', GalleryUtilities::getServerVar('HTTP_HOST'));
$serverport = GalleryUtilities::getServerVar('SERVER_PORT');
list ($ret, $form['apiKey']) =
mapHelper::fetchGoogleMapKeyForHost($servername, $serverport);
$type = GalleryUtilities::isA($item, 'GalleryAlbumItem') ? 'AlbumLegend' : 'PhotoLegend';
list ($ret, $LegendEnable) = GalleryCoreApi::getPluginParameter('module', 'map', $type);
if ($ret) {
return array($ret->wrap(__FILE__, __LINE__), null, null);
}
if ($LegendEnable) {
list ($ret,$Legends) = GalleryCoreApi::getPluginParameter('module', 'map', $type . 's');
}
$set = (GalleryUtilities::isA($item, 'GalleryAlbumItem'))
? 'album'
: ((GalleryUtilities::isA($item, 'GalleryPhotoItem')) ? 'photo' : 'common');
list ($ret, $tmp, $param, $isContainerSettings) =
mapHelper::fetchFieldValues(array($item), null, $set);
if ($ret) {
return array($ret->wrap(__FILE__, __LINE__), null, null);
}
$form['fields'] = $tmp[$item->getId()];
foreach (array('common' => 1, $set => 1) as $s => $tmp) {
foreach ($param[$item->getId()][$s] as $it) {
if (!empty($it['choices'])) {
$form['choices'][$it['field']] = $it['choices'];
}
}
}
if ($set == 'album') {
$form['adminFlag'] = $isContainerSettings[$item->getId()] ? 1 : 2;
}
$tpl = 'modules/map/templates/mapItemEdit.tpl';
$template->setVariable('controller', 'map.mapItemEdit');
/* Add stuff for the help system */
$form['picbase'] = GalleryUtilities::convertPathToUrl(substr(dirname(__FILE__),0,-11)). 'modules/map/images/';
list($ret, $form['UserHelp']) = GalleryCoreApi::getPluginParameter('module', 'map', 'UserHelp');
$msie = '/msie\s(5\.[5-9]|[6-9]\.[0-9]*).*(win)/i';
if (!isset($_SERVER['HTTP_USER_AGENT']) || !preg_match($msie, $_SERVER['HTTP_USER_AGENT'])
|| preg_match('/opera/i', $_SERVER['HTTP_USER_AGENT'])) {
$form['IE'] = false;
}
else {
$form['IE'] = true;
}
return array(null, $tpl, 'modules_map');
}
/**
* @see ItemEditPlugin::isSupported
*/
function isSupported($item, $thumbnail) {
/* Make sure we have permission do edit the google map option of this item */
$ret = GalleryCoreApi::assertHasItemPermission($item->getId(), 'map.EditMap');
if ($ret) {
return false;
}
if (GalleryUtilities::isA($item, 'GalleryAlbumItem')) {
return true;
}
list ($ret, $param) = mapHelper::loadParameters($item->getParentId());
if ($ret) {
return false;
}
if (!empty($param['common'])
|| (GalleryUtilities::isA($item, 'GalleryPhotoItem') && !empty($param['photo']))) {
return true;
}
return false;
}
/**
* @see ItemEditPlugin::getTitle
*/
function getTitle() {
global $gallery;
list ($ret, $module) = GalleryCoreApi::loadPlugin('module', 'map');
if ($ret) {
return $ret->wrap(__FILE__, __LINE__);
}
return array(null, $module->translate('Google Map'));
}
}
?>