This commit is contained in:
bastianonm 2012-02-07 13:06:51 +00:00
parent bf466863af
commit 835f873705
5 changed files with 167 additions and 54 deletions

View File

@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=basti
Tags: maps, gpx, gps, graph, google maps, google chart, track, garmin
Requires at least: 2.0.0
Tested up to: 3.3
Stable tag: 1.1.4
Stable tag: 1.1.5
License: GPLv2 or later
Draws a gpx track with altitude graph
@ -79,6 +79,9 @@ Yes!
2. Admin area - Settings
== Changelog ==
= 1.1.5 =
* implemented cache (the plugin is much faster, especially on slow servers or external gpx)
* minor bug fixes
= 1.1.4 =
* improved admin area
* added miles/feet unit of measure
@ -121,6 +124,7 @@ Yes!
* Initial release.
== Upgrade Notice ==
= 1.1.5 =
= 1.1.4 =
= 1.1.3 =
= 1.1.2 =

View File

@ -3,7 +3,7 @@
Plugin Name: WP-GPX-Maps
Plugin URI: http://www.darwinner.it/
Description: Draws a gpx track with altitude graph
Version: 1.1.4
Version: 1.1.5
Author: Bastianon Massimo
Author URI: http://www.pedemontanadelgrappa.it/
License: GPL
@ -82,60 +82,98 @@ function handle_WP_GPX_Maps_Shortcodes($attr, $content='')
$uom = findValue($attr, "uom", "wpgpxmaps_unit_of_measure", "0");
$color_map = findValue($attr, "mlinecolor", "wpgpxmaps_map_line_color", "#3366cc");
$color_graph = findValue($attr, "glinecolor", "wpgpxmaps_graph_line_color", "#3366cc");
$r = rand(1,5000000);
$sitePath = sitePath();
$gpx = trim($gpx);
if (strpos($gpx, "http://") !== 0)
{
$gpx = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $gpx);
$gpx = $sitePath . $gpx;
}
else
{
$gpx = downloadRemoteFile($gpx);
}
$points = getPoints( $gpx, $pointsoffset, $donotreducegpx);
$points_maps = '';
$points_graph = '';
$waypoints = '';
foreach ($points as $p) {
$points_maps .= '['.(float)$p[0].','.(float)$p[1].'],';
$cacheFileName = md5($gpx.$w.$mh.$mt.$gh.$showW.$donotreducegpx.$pointsoffset);
$gpxcache = gpxCacheFolderPath();
if(!(file_exists($gpxcache) && is_dir($gpxcache)))
{
@mkdir($gpxcache,0755,true);
}
$gpxcache.= DIRECTORY_SEPARATOR.$cacheFileName.".tmp";
// Try to load cache
if (file_exists($gpxcache))
{
try {
$cache_str = file_get_contents($gpxcache);
$cache_obj = unserialize($cache_str);
$points_maps = $cache_obj["points_maps"];
$points_graph = $cache_obj["points_graph"];
$waypoints = $cache_obj["waypoints"];
} catch (Exception $e) {
$points_maps= '';
$points_graph= '';
$waypoints= '';
}
}
if ($points_maps == '')
{
$sitePath = sitePath();
if ($uom == '1')
$gpx = trim($gpx);
if (strpos($gpx, "http://") !== 0)
{
// Miles and feet
$points_graph .= '['.((float)$p[3]*0.000621371192).','.((float)$p[2]*3.2808399).'],';
$gpx = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $gpx);
$gpx = $sitePath . $gpx;
}
else
{
$points_graph .= '['.(float)$p[3].','.(float)$p[2].'],';
$gpx = downloadRemoteFile($gpx);
}
}
if ($showW == true)
{
$wpoints = getWayPoints($gpx);
foreach ($wpoints as $p) {
$waypoints .= '['.(float)$p[0].','.(float)$p[1].',\''.unescape($p[4]).'\',\''.unescape($p[5]).'\',\''.unescape($p[7]).'\'],';
}
}
$p="/,$/";
$points_maps = preg_replace($p, "", $points_maps);
$points_graph = preg_replace($p, "", $points_graph);
$waypoints = preg_replace($p, "", $waypoints);
if (preg_match("/^(\[0,0\],?)+$/", $points_graph))
{
$points_graph = "";
}
$points = getPoints( $gpx, $pointsoffset, $donotreducegpx);
$points_maps = '';
$points_graph = '';
$waypoints = '';
foreach ($points as $p) {
$points_maps .= '['.(float)$p[0].','.(float)$p[1].'],';
if ($uom == '1')
{
// Miles and feet
$points_graph .= '['.((float)$p[3]*0.000621371192).','.((float)$p[2]*3.2808399).'],';
}
else
{
$points_graph .= '['.(float)$p[3].','.(float)$p[2].'],';
}
}
if ($showW == true)
{
$wpoints = getWayPoints($gpx);
foreach ($wpoints as $p) {
$waypoints .= '['.(float)$p[0].','.(float)$p[1].',\''.unescape($p[4]).'\',\''.unescape($p[5]).'\',\''.unescape($p[7]).'\'],';
}
}
$p="/,$/";
$points_maps = preg_replace($p, "", $points_maps);
$points_graph = preg_replace($p, "", $points_graph);
$waypoints = preg_replace($p, "", $waypoints);
if (preg_match("/^(\[0,0\],?)+$/", $points_graph))
{
$points_graph = "";
}
@file_put_contents($gpxcache,
serialize(array("points_maps" => $points_maps,
"points_graph" => $points_graph,
"waypoints" => $waypoints)
),
LOCK_EX);
@chmod($gpxcache,0755);
}
$output = '
<div id="wpgpxmaps_'.$r.'" style="clear:both;">
<div id="map_'.$r.'" style="width:'.$w.'; height:'.$mh.'"></div>

View File

@ -15,6 +15,14 @@
return str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $ret);
}
function gpxCacheFolderPath()
{
$upload_dir = wp_upload_dir();
$uploadsPath = $upload_dir['basedir'];
$ret = $uploadsPath.DIRECTORY_SEPARATOR."gpx".DIRECTORY_SEPARATOR."cache";
return str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $ret);
}
function relativeGpxFolderPath()
{
$sitePath = sitePath();
@ -22,6 +30,43 @@
$ret = str_replace($sitePath,'',$realGpxPath).DIRECTORY_SEPARATOR;
return str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $ret);
}
function recursive_remove_directory($directory, $empty=FALSE)
{
if(substr($directory,-1) == '/')
{
$directory = substr($directory,0,-1);
}
if(!file_exists($directory) || !is_dir($directory))
{
return FALSE;
}elseif(is_readable($directory))
{
$handle = opendir($directory);
while (FALSE !== ($item = readdir($handle)))
{
if($item != '.' && $item != '..')
{
$path = $directory.'/'.$item;
if(is_dir($path))
{
recursive_remove_directory($path);
}else{
unlink($path);
}
}
}
closedir($handle);
if($empty == FALSE)
{
if(!rmdir($directory))
{
return FALSE;
}
}
}
return TRUE;
}
function getPoints($gpxPath,$gpxOffset = 10, $donotreducegpx)
{

View File

@ -21,6 +21,7 @@ function ilc_admin_tabs( $current ) {
function WP_GPX_Maps_html_page() {
$realGpxPath = gpxFolderPath();
$cacheGpxPath = gpxCacheFolderPath();
$relativeGpxPath = relativeGpxFolderPath();
$relativeGpxPath = str_replace("\\","/", $relativeGpxPath);
$gpxRegEx = '/.gpx$/';
@ -42,13 +43,27 @@ function WP_GPX_Maps_html_page() {
}
else
{
if (!@mkdir($realGpxPath,755,true)) {
if (!@mkdir($realGpxPath,0755,true)) {
echo '<div class="error" style="padding:10px">
Can\'t create <b>'.$realGpxPath.'</b> folder. Please create it and make it writable!<br />
If not, you will must update the file manually!
</div>';
}
}
if(file_exists($cacheGpxPath) && is_dir($cacheGpxPath))
{
//dir exsist!
}
else
{
if (!@mkdir($cacheGpxPath,0755,true)) {
echo '<div class="error" style="padding:10px">
Can\'t create <b>'.$cacheGpxPath.'</b> folder. Please create it and make it writable!<br />
If not, cache will not created and your site could be slower!
</div>';
}
}
ilc_admin_tabs($tab);

View File

@ -8,13 +8,19 @@
unlink($realGpxPath ."/". $del);
}
}
if ( isset($_POST['clearcache']) )
{
echo "pulisco la cahce";
recursive_remove_directory($cacheGpxPath,true);
}
if ( is_writable ( $realGpxPath ) ){
?>
<div class="tablenav top">
<form enctype="multipart/form-data" method="POST">
<form enctype="multipart/form-data" method="POST" style="float:left; margin:5px 20px 0 0">
Choose a file to upload: <input name="uploadedfile" type="file" onchange="submitgpx(this);" />
<?php
if ( isset($_FILES['uploadedfile']) )
@ -35,6 +41,11 @@
}
?>
</form>
<form method="POST" style="float:left; margin:5px 20px 0 0">
<input type="submit" name="clearcache" value="Clear Cache" />
</form>
</div>
<?php
@ -83,11 +94,11 @@
</tr>
<tr>
<td colspan=3 style="padding: 0px 7px 7px 7px;">
<a href="#" onclick="delgpx('<?php echo $entry ?>'); return false;">Delete</a>
|
<a href="../wp-content/uploads/gpx/<?php echo $entry?>">Download</a>
|
Shortcode: [sgpx gpx="<?php echo $relativeGpxPath . $entry; ?>"]
<a href="#" onclick="delgpx('<?php echo $entry ?>'); return false;">Delete</a>
|
<a href="../wp-content/uploads/gpx/<?php echo $entry?>">Download</a>
|
Shortcode: [sgpx gpx="<?php echo $relativeGpxPath . $entry; ?>"]
</td>
</tr>
<?php