Created
August 20, 2009 16:03
-
-
Save stas/171157 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Plugin Name: Lug Map | |
Plugin URI: http://softwareliber.ro/harta/ | |
Description: Create a map with lug locations, powered by Google Maps. | |
Version: 1.5 | |
Author: Stas Sushkov | |
Author URI: http://stas.nerd.ro/ | |
*/ | |
?> | |
<?php | |
/* Copyright 2008 Stas Sushkov (email : [email protected]) | |
This program is free software; you can redistribute it and/or modify | |
it under the terms of the GNU General Public License as published by | |
the Free Software Foundation; either version 2 of the License, or | |
(at your option) any later version. | |
This program is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
GNU General Public License for more details. | |
You should have received a copy of the GNU General Public License | |
along with this program; if not, write to the Free Software | |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
*/ | |
?> | |
<?php | |
/** | |
* Admin cpanel | |
*/ | |
function lugmap_admin() { | |
add_management_page(__("Lug Map","lug-map"), __("Lug Map","lug-map"), 3, "lug-map", "lugmap_menu"); | |
} | |
/** | |
* Admin actions | |
*/ | |
function lugmap_menu() { | |
global $wpdb; | |
$table = $wpdb->prefix."lugmap"; | |
if ( isset( $_POST['lugmap_api_key'] ) && isset( $_POST['lugmap_coord'] ) ) { | |
if($_POST['lugmap_api_key']) | |
update_option('lugmap_api_key', attribute_escape($_POST['lugmap_api_key'])); | |
if($_POST['lugmap_coord']) | |
update_option('lugmap_coord', attribute_escape($_POST['lugmap_coord'])); | |
?><div id="message" class="updated fade"><p><strong><?php echo __("Options saved.",'lug-map') ?></strong></p></div><?php | |
} | |
if( isset($_GET['delete_lugmap_marker'])) { | |
$lugmap_marker_id = attribute_escape($_GET['delete_lugmap_marker']); | |
$wpdb->query("DELETE FROM $table WHERE id = $lugmap_marker_id"); | |
?><div id="message" class="updated fade"><p><strong><?php printf(__('Marker %1$s deleted.','lug-map'),"$lugmap_marker_id"); ?></strong></p></div><?php | |
} | |
if($_POST['lugmap_clean'] == 'true') | |
lugmap_clean(); | |
?> | |
<div id="icon-tools" class="icon32"><br /></div> | |
<div class="wrap"> | |
<h2><?php echo __('Lug Map Options','lug-map')?></h2> | |
<div id="poststuff" class="metabox-holder"> | |
<div class="postbox"> | |
<h3 class="hndle" ><?php echo __('How to use it?','lug-map')?></h3> | |
<div class="inside"> | |
<p><?php echo __('Insert inside the content of a page or a post the shortcode: <code>[LUGMAP]</code>','lug-map')?></p> | |
</div> | |
</div> | |
<div class="postbox"> | |
<h3 class="hndle" ><?php echo __('Google Maps API Key','lug-map')?>, <?php echo __('Lug Map Start-Up Location','lug-map')?></h3> | |
<div class="inside"> | |
<form action="" method="post" > | |
<p> | |
<small><?php printf(__('Can be obtained <a href="%1$s">here</a>','lug-map'), 'http://code.google.com/apis/maps/signup.html')?>.</small> | |
</p> | |
<p> | |
<input size="86" maxlength="86" style="font-family: 'Courier New',Courier,mono; font-size: 1.5em;" type="text" name="lugmap_api_key" value="<?php form_option('lugmap_api_key') ?>" /> | |
</p> | |
<p> | |
<small><?php printf(__('Please add the coordinates for the location wich should be loaded on showing up the map. You can use <a href="%1$s">this tool</a>','lug-map'),'http://itouchmap.com/latlong.html')?>.</small><br /> | |
</p> | |
<p> | |
<input size="20" style="font-family: 'Courier New',Courier,mono; font-size: 1.5em;" type="text" name="lugmap_coord" value="<?php form_option('lugmap_coord') ?>" /> | |
</p> | |
<p> | |
<input type="submit" class="button" value="<?php echo __('Save Changes','lug-map')?>" /> | |
</p> | |
</form> | |
</div> | |
</div> | |
<div class="postbox"> | |
<h3 class="hndle" ><?php echo __('Here you can delete entries','lug-map')?></h3> | |
<div class="inside"> | |
<ol> | |
<?php | |
$markers = $wpdb->get_results("SELECT * FROM $table"); | |
$wpdb->show_errors(); | |
foreach($markers as $marker) { | |
printf(__('<li><a href="%1$s" title="Delete this marker" style="font-weight: bolder;" >X</a> | Geolocation: %2$s, Name: <strong>%3$s</strong>, URL: <a href="%4$s">%4$s</a>, Contact: <a href="mailto:%5$s">%6$s</a><br />%7$s</li>','lug-map'), "?page=lug-map&delete_lugmap_marker=$marker->id", "$marker->point", "$marker->name", "$marker->web", "$marker->email", "$marker->cord", "$marker->dsc"); | |
echo "\n"; | |
} | |
?> | |
</ol> | |
</div> | |
</div> | |
<div class="postbox"> | |
<h3 class="hndle" ><?php echo __('Remove Lug Map Content','lug-map')?></h3> | |
<div class="inside"> | |
<p><?php echo __('Warnning! This will drop lugmap table and recreate it, so the present markers will be removed totally','lug-map')?>.</p> | |
<form method="post" action=""> | |
<input type="hidden" name="lugmap_clean" value="true" /> | |
<input type="submit" class="button" value="<?php echo __('Clean Database','lug-map')?>" /> | |
</form> | |
</div> | |
</div> | |
</div> | |
</div> | |
<?php | |
} | |
/** | |
* Insert posted data | |
*/ | |
if ( !empty( $_POST['lm_name'] ) && !empty( $_POST['lm_email'] ) && !empty( $_POST['lm_point'] ) && !empty( $_POST['lm_org'] ) ) { | |
global $wpdb; | |
$table = $wpdb->prefix."lugmap"; | |
$lm_name = $wpdb->escape($_POST['lm_name']); | |
$lm_org = $wpdb->escape($_POST['lm_org']); | |
$lm_email = $wpdb->escape($_POST['lm_email']); | |
$lm_web = $wpdb->escape(apply_filters("the_title",$_POST['lm_web'])); | |
$lm_dsc = $wpdb->escape(apply_filters("comment_status_pre ",$_POST['lm_dsc'])); | |
$lm_point = $wpdb->escape(strtok($_POST['lm_point'],"()")); | |
$wpdb->query(" | |
INSERT INTO $table(name, cord, email, web, dsc, point) | |
VALUES('$lm_name', '$lm_org', '$lm_email', '$lm_web', '$lm_dsc', '$lm_point') | |
"); | |
} | |
/** | |
* Gmaps markers generation | |
*/ | |
function lugmap_markers() { | |
global $wpdb; | |
$table = $wpdb->prefix."lugmap"; | |
$markers = $wpdb->get_results("SELECT point FROM $table"); | |
foreach($markers as $marker) { | |
echo "\t"."var point = new GLatLng(".stripslashes($marker->point).");"."\n"; | |
$point_data = null; //otherwise it will collect the whole world :) | |
$marker_data = $wpdb->get_results("SELECT `name`,`cord`,`email`,`web`,`dsc` FROM `$table` WHERE `point` = '$marker->point'"); | |
foreach($marker_data as $item) { | |
$point_data .= "<div class=\"bubble\"><strong><a href=\"".js_escape($item->web)."\">".js_escape($item->name)."</a></strong><br /><em>".js_escape($item->cord)."</em><br />".js_escape($item->dsc)."</div>"; | |
} | |
echo "\t"."var marker = createMarker(point,'$point_data');"."\n"; | |
echo "\t"."map.addOverlay(marker);"."\n\n"; | |
} | |
} | |
/** | |
* Loading meta stuff like js files and etc. | |
*/ | |
function lugmap_header() { | |
$lugmap_api_key = get_option('lugmap_api_key'); | |
$lugmap_coord = get_option('lugmap_coord'); | |
?> | |
<script src="http://maps.google.com/maps?file=api&v=2&key=<?php echo $lugmap_api_key; ?>" type="text/javascript"></script> | |
<script type="text/javascript"> | |
<!-- | |
var map = null; | |
var geocoder = null; | |
function initialize() { | |
if (GBrowserIsCompatible()) { | |
map = new GMap2(document.getElementById("map")); | |
map.addControl(new GSmallMapControl()); | |
map.setCenter(new GLatLng(<?php echo $lugmap_coord ?>), 6); | |
geocoder = new GClientGeocoder(); | |
map.setMapType(G_HYBRID_MAP); | |
<?php lugmap_markers(); ?> | |
} | |
} | |
var gmarkers = []; | |
function createMarker(point,html) { | |
var marker = new GMarker(point); | |
GEvent.addListener(marker, "click", function() { | |
marker.openInfoWindowHtml(html); | |
}); | |
gmarkers.push(marker); | |
return marker; | |
} | |
function srch() { | |
var adr = document.getElementById('adr').value; showAddress(adr); return false; | |
} | |
function chck(form) { | |
if(form.lm_point.value == "") | |
{ | |
alert('Please add your geographical position and click "search"!'); | |
return false; | |
} | |
else if (form.lm_name.value == "") | |
{ | |
alert("Please add a name!"); | |
return false; | |
} | |
else if (form.lm_email.value == "") | |
{ | |
alert("Please add your email!"); | |
return false; | |
} | |
return true; | |
} | |
function addPoint(point) { | |
if(point) | |
document.getElementById('point').value = point; | |
} | |
function lm_click(i) { | |
GEvent.trigger(gmarkers[i], "click"); | |
} | |
function showAddress(address) { | |
if (geocoder) { | |
geocoder.getLatLng( | |
address, | |
function(point) { | |
if (!point) { | |
alert(address + " not found"); | |
} else { | |
addPoint(point); | |
map.setCenter(point, 13); | |
var marker = new GMarker(point); | |
map.addOverlay(marker); | |
marker.openInfoWindowHtml(address); | |
} | |
} | |
); | |
} | |
} | |
//--> | |
</script> | |
<style type="text/css"> | |
#lug-map form p {margin: 15px 0; text-align: left;} | |
#lug-map form p label {font-weight: normal; padding: 4px 0;} | |
#lug-map form p .inpt {clear: both; display: block; width: 500px; padding: 2px;} | |
#lug-map form p textarea {width: 500px; padding: 4px;} | |
#point {border: none; padding: 0; width: 0; height: 0;} | |
#lug-map form p .lb_adr {display: block;} | |
#lug-map form p #adr {width: 300px;} | |
#sbmt { font-size: 12px; padding: 4px;} | |
#srch {padding-left: 10px;} | |
#map {height: 500px; border:4px solid #423E46;} | |
#lug-map {width: auto; margin: 10px auto;} | |
#lug-map small {float: right} | |
#lug-map .bubble { font-size: 10px;} | |
.entry-content img {margin: 0 0 16px 0; max-width: none;} /* hack */ | |
.bubble { width: 300px; } | |
</style> | |
<?php | |
} | |
/** | |
* Page hook | |
*/ | |
function lugmap_content($attr, $c = NULL) { | |
$output = '<div id="lug-map">'; | |
$output .= '<form action="" method="post" onSubmit="javascript: return chck(this)">'; | |
$output .= ' | |
<div id="map"></div> | |
<script type="text/javascript"> | |
initialize(); | |
</script> | |
'; | |
$output .= ' | |
<p> | |
<label for="lm_name">'.__("LUG Name","lug-map").' *:</label> | |
<input class="inpt" type="text" name="lm_name" /> | |
<label for="lm_org">'.__("LUG Contact person","lug-map").' *:</label> | |
<input class="inpt" type="text" name="lm_org" /> | |
<lable>'.__("LUG Description","lug-map").' :</label> | |
<textarea name="lm_dsc" class="inpt" tabindex="4"></textarea> | |
<label for="lm_email">'.__("LUG E-mail","lug-map").' *:</label> | |
<input class="inpt" type="text" name="lm_email" /> | |
<label for="lm_web">'.__("LUG Web Page","lug-map").':</label> | |
<input class="inpt" type="text" name="lm_web" value="http://" /> | |
<label for="lm_adr" class="lb_adr">'.__("Geographical Position","lug-map").' *:</label> | |
<input id="adr" type="text" name="lm_adr" value="'.__("Town, County, Country","lug-map").'" /> | |
<a href="#" id="srch" onClick="javascript: srch();" >'.__("Search","lug-map").'</a> | |
</p> | |
<small>'.__("Required fields are marked with <em>*</em>.","lug-map").'</small> | |
<input type="hidden" id="point" name="lm_point" /> | |
<input type="submit" id="sbmt" value="'.__("Add It","lug-map").'" /> | |
</form>'; | |
$output .= '</div>'; | |
return $output; | |
} | |
/** | |
* Clean lugmap table | |
*/ | |
function lugmap_clean() { | |
global $wpdb; | |
$table = $wpdb->prefix."lugmap"; | |
$wpdb->query("DROP TABLE $table"); | |
lugmap_install(); | |
} | |
/** | |
* Generate widget content | |
*/ | |
function lugmap_widget_content() { | |
global $wpdb; | |
$table = $wpdb->prefix."lugmap"; | |
$markers = $wpdb->get_results("SELECT `name`,`web` FROM `$table` ORDER BY `name`"); | |
$content = '<ul class="lm_widget_markers">'; | |
$i = 0; | |
foreach($markers as $item) { | |
$content .= " | |
<li class=\"lm_widget_marker\"> | |
<span clas=\"lm_widget_marker_name\"> | |
<a href=\"javascript:lm_click($i)\">".$item->name."</a></span> | |
<a href=\"".$item->web."\" class=\"lm_widget_marker_web\">".$item->web."</a> | |
</li>"; | |
$i++; | |
} | |
$content .= '</ul>'; | |
return $content; | |
} | |
/** | |
* Generate widget | |
*/ | |
function lugmap_widget() { | |
register_widget( 'LugMap_Widget' ); | |
} | |
class LugMap_Widget extends WP_Widget { | |
function LugMap_Widget() { | |
/* Widget settings. */ | |
$widget_ops = array( 'classname' => 'lm_widget', 'description' => 'Widget displays LugMap entries.' ); | |
/* Widget control settings. */ | |
$control_ops = array( 'width' => 300, 'height' => 350, 'id_base' => 'lm_widget' ); | |
/* Create the widget. */ | |
$this->WP_Widget( 'lm_widget', 'LugMap Widget', $widget_ops, $control_ops ); | |
} | |
function widget( $args, $instance ) { | |
extract( $args ); | |
$title = apply_filters('widget_title', $instance['title'] ); | |
echo $before_widget; | |
if ( $title ) | |
echo $before_title . $title . $after_title; | |
echo lugmap_widget_content(); | |
echo $after_widget; | |
} | |
function update( $new_instance, $old_instance ) { | |
$instance = $old_instance; | |
$instance['title'] = strip_tags( $new_instance['title'] ); | |
return $instance; | |
} | |
function form( $instance ) { | |
/* Set up some default widget settings. */ | |
$defaults = array( 'title' => 'LugMap' ); | |
$instance = wp_parse_args( (array) $instance, $defaults ); ?> | |
<p> | |
<label for="<?php echo $this->get_field_id( 'title' ); ?>">Title:</label> | |
<input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" style="width:100%;" /> | |
</p> | |
<?php | |
} | |
} | |
/** | |
* Creating database tables and the rest of needed stuff | |
*/ | |
function lugmap_install() { | |
global $wpdb; | |
$table = $wpdb->prefix."lugmap"; | |
$structure = "CREATE TABLE $table ( | |
id INT(9) NOT NULL AUTO_INCREMENT, | |
name VARCHAR(80) NOT NULL, | |
cord VARCHAR(40) NOT NULL, | |
email VARCHAR(40) NOT NULL, | |
web VARCHAR(1000) NOT NULL, | |
dsc VARCHAR(2000) NOT NULL, | |
point VARCHAR(20) NOT NULL, | |
UNIQUE KEY id (id) | |
);"; | |
$wpdb->query('CHARACTER SET utf8 COLLATE utf8_general_ci'); | |
$wpdb->query($structure); | |
// Populate table | |
$wpdb->query("INSERT INTO $table(name, cord, email, web, dsc, point) | |
VALUES('Grupul pentru software liber', 'Adi Roiban', '[email protected]', 'http://softwareliber.ro/', 'Grupul pentru software liber s-a conturat la începutul anului 2005 in jurul unor studenți din cadrul Universității Tehnice din Cluj-Napoca. Ținta grupului a fost promovarea software-lui liber în rândurile studenților și profesorilor din facultate și continuarea activitații începute de Igor Știrbu la sfarșitul anului 2004.', '46.776306, 23.60429')"); | |
add_option('lugmap_coord','45.943161,24.96676'); | |
add_option('lugmap_api_key','Please add your Google Maps key'); | |
} | |
//l10n stuff | |
$lugmap_domain = 'lug-map'; | |
$lugmap_domain_path = PLUGINDIR.'/'.dirname(plugin_basename(__FILE__)); | |
load_plugin_textdomain($lugmap_domain,$lugmap_domain_path.'/l10n' ); | |
register_activation_hook(__FILE__,'lugmap_install'); | |
add_action('admin_menu', 'lugmap_admin'); | |
add_action('wp_head', 'lugmap_header'); | |
add_action( 'widgets_init', 'lugmap_widget' ); | |
add_shortcode('LUGMAP', 'lugmap_content'); | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment