1*c3b1bf17SMark C. Prins<?php 2*c3b1bf17SMark C. Prins/* 3*c3b1bf17SMark C. Prins * Copyright (c) 2011 Mark C. Prins <mc.prins@gmail.com> 4*c3b1bf17SMark C. Prins * 5*c3b1bf17SMark C. Prins * Permission to use, copy, modify, and distribute this software for any 6*c3b1bf17SMark C. Prins * purpose with or without fee is hereby granted, provided that the above 7*c3b1bf17SMark C. Prins * copyright notice and this permission notice appear in all copies. 8*c3b1bf17SMark C. Prins * 9*c3b1bf17SMark C. Prins * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10*c3b1bf17SMark C. Prins * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11*c3b1bf17SMark C. Prins * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12*c3b1bf17SMark C. Prins * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13*c3b1bf17SMark C. Prins * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14*c3b1bf17SMark C. Prins * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15*c3b1bf17SMark C. Prins * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16*c3b1bf17SMark C. Prins */ 17*c3b1bf17SMark C. Prins 18*c3b1bf17SMark C. Prins/** 19*c3b1bf17SMark C. Prins * DokuWiki Plugin geotag (Action Component) 20*c3b1bf17SMark C. Prins * 21*c3b1bf17SMark C. Prins * @license BSD 22*c3b1bf17SMark C. Prins * @author Mark C. Prins <mc.prins@gmail.com> 23*c3b1bf17SMark C. Prins */ 24*c3b1bf17SMark C. Prinsif (!defined('DOKU_INC')) die(); 25*c3b1bf17SMark C. Prins 26*c3b1bf17SMark C. Prinsif (!defined('DOKU_LF')) define('DOKU_LF', "\n"); 27*c3b1bf17SMark C. Prinsif (!defined('DOKU_TAB')) define('DOKU_TAB', "\t"); 28*c3b1bf17SMark C. Prinsif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 29*c3b1bf17SMark C. Prins 30*c3b1bf17SMark C. Prinsrequire_once DOKU_PLUGIN.'action.php'; 31*c3b1bf17SMark C. Prins 32*c3b1bf17SMark C. Prinsclass action_plugin_geotag extends DokuWiki_Action_Plugin { 33*c3b1bf17SMark C. Prins 34*c3b1bf17SMark C. Prins public function register(Doku_Event_Handler &$controller) { 35*c3b1bf17SMark C. Prins $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'handle_metaheader_output'); 36*c3b1bf17SMark C. Prins $controller->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'ping', array()); 37*c3b1bf17SMark C. Prins } 38*c3b1bf17SMark C. Prins 39*c3b1bf17SMark C. Prins public function handle_metaheader_output(Doku_Event &$event, $param) { 40*c3b1bf17SMark C. Prins global $ID; 41*c3b1bf17SMark C. Prins $geotags = p_get_metadata($ID,'geo',true); 42*c3b1bf17SMark C. Prins $region=$geotags['region']; 43*c3b1bf17SMark C. Prins $lat=$geotags['lat']; 44*c3b1bf17SMark C. Prins $lon=$geotags['lon']; 45*c3b1bf17SMark C. Prins $country=$geotags['country']; 46*c3b1bf17SMark C. Prins $placename=$geotags['placename']; 47*c3b1bf17SMark C. Prins 48*c3b1bf17SMark C. Prins if (!empty($region)) {$event->data['meta'][] = array('name' => 'geo.region','content' => $region,);} 49*c3b1bf17SMark C. Prins if (!empty($placename)) {$event->data['meta'][] = array('name' => 'geo.placename','content' => $placename,);} 50*c3b1bf17SMark C. Prins if (!(empty($lat)&&empty($lon))) {$event->data['meta'][] = array('name' => 'geo.position','content' => $lat.';'.$lon,);} 51*c3b1bf17SMark C. Prins if (!empty($country)) {$event->data['meta'][] = array('name' => 'geo.country','content' => $country,);} 52*c3b1bf17SMark C. Prins if (!(empty($lat)&&empty($lon))) {$event->data['meta'][] = array('name' => 'ICBM','content' => $lat.', '.$lon,);} 53*c3b1bf17SMark C. Prins } 54*c3b1bf17SMark C. Prins 55*c3b1bf17SMark C. Prins function ping(&$event, $param) { 56*c3b1bf17SMark C. Prins if (!$this->getConf('geotag_pinggeourl')) return false; // config says don't ping 57*c3b1bf17SMark C. Prins if ($event->data[3]) return false; // old revision saved 58*c3b1bf17SMark C. Prins if (@file_exists($event->data[0][0])) return false; // file not new 59*c3b1bf17SMark C. Prins if (!$event->data[0][1]) return false; // file is empty 60*c3b1bf17SMark C. Prins 61*c3b1bf17SMark C. Prins global $conf; 62*c3b1bf17SMark C. Prins 63*c3b1bf17SMark C. Prins $request = 'p='.DOKU_URL; 64*c3b1bf17SMark C. Prins $url = 'http://geourl.org/ping/'; 65*c3b1bf17SMark C. Prins $header[] = 'Host: geourl.org'; 66*c3b1bf17SMark C. Prins $header[] = 'Content-type: text/html'; 67*c3b1bf17SMark C. Prins $header[] = 'Content-length: '.strlen($request); 68*c3b1bf17SMark C. Prins 69*c3b1bf17SMark C. Prins $http = new DokuHTTPClient(); 70*c3b1bf17SMark C. Prins return $http->get($url, $request); 71*c3b1bf17SMark C. Prins } 72*c3b1bf17SMark C. Prins} 73