xref: /plugin/geotag/action.php (revision c3b1bf17a078cd6c15da9854c808977040c26793)
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