add('name', PLUGIN_GEOTAG_GMAP_NAME); $propbag->add('description', PLUGIN_GEOTAG_GMAP_NAME_DESC); $propbag->add('author', PLUGIN_EVENT_GEOTAG_AUTHOR); $propbag->add('stackable', false); $propbag->add('version', PLUGIN_EVENT_GEOTAG_VERSION); $propbag->add('configuration', array('title','service','key','width','height','latitude','longitude','zoom','type','rss_url','geodata_source','category')); $propbag->add('requirements', array( 'serendipity' => '0.9', 'smarty' => '2.6.7', 'php' => '4.1.0' )); $propbag->add('groups', array('FRONTEND_EXTERNAL_SERVICES')); } function introspect_config_item($name, &$propbag) { global $serendipity; switch($name) { case 'title': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_GEOTAG_GMAP_TITLE); $propbag->add('description', PLUGIN_GEOTAG_GMAP_TITLE_DESC); $propbag->add('default', PLUGIN_GEOTAG_GMAP_TITLE_DEFAULT); break; case 'service': $propbag->add('type', 'select'); $propbag->add('select_values', array( 'google' => 'Google Maps', 'osm' => 'Openstreetmap', )); $propbag->add('name', PLUGIN_GEOTAG_SERVICE); $propbag->add('description', PLUGIN_GEOTAG_SERVICE_DESC); $propbag->add('default', 'google'); break; case 'key': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_GEOTAG_GMAP_KEY); $propbag->add('description', PLUGIN_GEOTAG_GMAP_KEY_DESC.' ('.$serendipity['baseURL'].')'); $propbag->add('default', 'XXXYYYZZZ'); break; case 'width': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_GEOTAG_GMAP_WIDTH); $propbag->add('description', PLUGIN_GEOTAG_GMAP_WIDTH_DESC); $propbag->add('default', 220); break; case 'height': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_GEOTAG_GMAP_HEIGHT); $propbag->add('description', PLUGIN_GEOTAG_GMAP_HEIGHT_DESC); $propbag->add('default', 150); break; case 'latitude': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_GEOTAG_GMAP_LATITUDE); $propbag->add('description', PLUGIN_GEOTAG_GMAP_LATITUDE_DESC); $propbag->add('default', 0); break; case 'longitude': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_GEOTAG_GMAP_LONGITUDE); $propbag->add('description', PLUGIN_GEOTAG_GMAP_LONGITUDE_DESC); $propbag->add('default', 0); break; case 'zoom': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_GEOTAG_GMAP_ZOOM); $propbag->add('description', PLUGIN_GEOTAG_GMAP_ZOOM_DESC); $propbag->add('default', 1); break; case 'type': $propbag->add('type', 'select'); $propbag->add('name', PLUGIN_GEOTAG_GMAP_TYPE); $propbag->add('description', PLUGIN_GEOTAG_GMAP_TYPE_DESC); $propbag->add('default', 'G_HYBRID_MAP'); $propbag->add('select_values', array( 'SATELLITE'=>PLUGIN_GEOTAG_GMAP_SATELLITE, 'ROADMAP'=>PLUGIN_GEOTAG_GMAP_MAP, 'HYBRID'=>PLUGIN_GEOTAG_GMAP_HYBRID, 'TERRAIN'=>PLUGIN_GEOTAG_GMAP_TERRAIN )); break; case 'rss_url': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_GEOTAG_GMAP_RSSURL); $propbag->add('description', PLUGIN_GEOTAG_GMAP_RSSURL_DESC.' ('.$serendipity['baseURL'].'feeds/index.rss2?all=1)'); $propbag->add('default', $serendipity['baseURL'].'rss.php'); break; case 'geodata_source': $propbag->add('type', 'select'); $propbag->add('select_values', array('database' => PLUGIN_GEOTAG_GMAP_DATABASE, 'rss' => 'RSS')); $propbag->add('name', PLUGIN_GEOTAG_GMAP_GEODATA_SOURCE); $propbag->add('description', PLUGIN_GEOTAG_GMAP_GEODATA_SOURCE_DESC); $propbag->add('default', 'database'); break; case 'category': $cat = serendipity_fetchCategories(); $cat_array = array(); $cat_array[0] = ALL_CATEGORIES; if (is_array($cat)) { foreach ($cat as $c) { $cat_array[$c['categoryid']] = $c['category_name']; } } $propbag->add('type', 'select'); $propbag->add('select_values', $cat_array); $propbag->add('name', CATEGORY); $propbag->add('description', PLUGIN_GEOTAG_GMAP_CATEGORY_DESC); $propbag->add('default', '0'); break; default: return false; } return true; } function generate_content(&$title) { global $serendipity; //get config vars $title = $this->get_config('title'); $service = $this->get_config('service'); $key = trim($this->get_config('key')); $width = $this->get_config('width', 220); $height = $this->get_config('height', 150); $longitude = $this->get_config('longitude', 0); $latitude = $this->get_config('latitude', 0); $zoom = $this->get_config('zoom', 1); $type = $this->get_config('type'); $rss_url = $this->get_config('rss_url'); $geodata_source = $this->get_config('geodata_source', 'rss'); $category = $this->get_config('category'); if (!is_numeric($width)) { $width = 220; } else { $width = (int)$width; } if (!is_numeric($height)) { $height = 150; } else { $height = (int)$height; } if (!is_numeric($longitude)) { $longitude = 0; } else { $longitude = (float)$longitude; } if (!is_numeric($latitude)) { $latitude = 0; } else { $latitude = (float)$latitude; } if (!is_numeric($zoom)) { $zoom = 2; } else { $zoom = min(max((int)$zoom, 0), $service === 'google' ? 21 : 18); } if ($geodata_source == 'database') { if ($category == 0) { $cat_query = ""; $cat_join = ""; } else { $cat_query = "AND categoryid = $category"; $cat_join = "LEFT JOIN {$serendipity['dbPrefix']}entrycat as c ON (c.entryid = id)"; } $q = "SELECT id, title, e1.value as lng, e2.value as lat, permalink FROM {$serendipity['dbPrefix']}entries LEFT JOIN {$serendipity['dbPrefix']}entryproperties as e1 ON (e1.entryid = id AND e1.property='geo_long') LEFT JOIN {$serendipity['dbPrefix']}entryproperties as e2 ON (e2.entryid = id AND e2.property='geo_lat') LEFT JOIN {$serendipity['dbPrefix']}permalinks ON (entry_id = id AND type='entry') $cat_join WHERE e1.property='geo_long' AND e2.property='geo_lat' $cat_query"; $tt = serendipity_db_query($q); if (!is_array($tt)) { $tt = array(); } } ?>