diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Googlemaps.php b/lib/Haanga/lib/Haanga/Extension/Filter/Googlemaps.php index 212776e8e0ff1e135220f2819672dbbc040e2cfc..b8b7a1aec7996e7f1d6453252aa6a253787f34d1 100644 --- a/lib/Haanga/lib/Haanga/Extension/Filter/Googlemaps.php +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Googlemaps.php @@ -11,87 +11,85 @@ class Haanga_Extension_Filter_Googlemaps{ $names = explode(",", $varname); $north = -90; $south=90; $east=-180; $west = 180; $latArr =""; $longArr=""; $nameArr = ""; - $w = "400"; - $h = "300"; - $zoom = "4"; - if($names[3] != null && $names[3] != ""){ - $w = $names[3]; - } - if($names[4] != null && $names[4] != ""){ - $h = $names[4]; - } - if($names[5] != null && $names[4] != ""){ - $zoom = $names[5]; - } - + $options = array(); + $options['width'] = 500; + $options['height'] = 500; + $options['zoom'] = 10; + for($z=3; $z < count($names); $z++){ + $pair = explode("=", $names[$z]); + $key = trim($pair[0], "\" '"); + $value = trim($pair[1], "\" '"); + $options[$key] = $value; + } + $w = $options['width']; + $h = $options['height']; + $z = intval($options['zoom']); + + $points = array(); foreach($obj as $k){ - if(!$firstColumn){ - $latArr .= ', '; - $longArr .= ', '; - $nameArr .= ', '; - } - $latArr .= $k->$names[0]->value; + $currentPoint = array(); if($north < $k->$names[0]->value){ $north = $k->$names[0]->value; } + $currentPoint['lat'] = $k->$names[0]->value; if($south > $k->$names[0]->value){ $south = $k->$names[0]->value; } - $longArr .= $k->$names[1]->value; if($west > $k->$names[1]->value){ $west = $k->$names[1]->value; } if($east < $k->$names[1]->value){ $east = $k->$names[1]->value; } + $currentPoint['long'] = $k->$names[1]->value; - $nameArr .= '"'.$k->$names[2]->value.'"'; + $currentPoint['label'] = $k->$names[2]->value; $firstColumn = false; + array_push($points, $currentPoint); } - - $pre = "<div id='map_canvas_".$randId."' style='width: ".$w."px; height: ".$h."px'></div><script type='text/javascript' - src='http://maps.googleapis.com/maps/api/js?sensor=false'></script> + $pre = "<div style='width:".$w."px;height:".$h."px;'><div id='map_canvas' style='height:100%;width:100%;border: 1px solid #333;' ></div></div> + <script src='https://maps.googleapis.com/maps/api/js?sensor=false'></script> <script type='text/javascript'> //<![CDATA[ - function initialize() { - var myOptions = { - zoom: ".$zoom.", - center: new google.maps.LatLng(0, 0), - mapTypeId: google.maps.MapTypeId.ROADMAP - }; - - var map = new google.maps.Map(document.getElementById('map_canvas_".$randId."'), - myOptions); + function initialize_$randId() { var southWest = new google.maps.LatLng(".$south.", ".$west."); var northEast = new google.maps.LatLng(".$north.", ".$east."); - var bounds = new google.maps.LatLngBounds(southWest, northEast); - map.fitBounds(bounds); - var lngSpan = northEast.lng() - southWest.lng(); - var latSpan = northEast.lat() - southWest.lat(); + var lngSpan = southWest.lng() - northEast.lng(); + var latSpan = southWest.lat() + northEast.lat(); + var locations = ".json_encode($points)."; - var latArray = [".$latArr."]; - var lonArray = [".$longArr."]; - var labelArray = [".$nameArr."]; - var marker = new Array(); - for (var i = 0; i < labelArray.length; i++) { - var position = new google.maps.LatLng(latArray[i], lonArray[i]); - marker = new google.maps.Marker({position: position,map: map}); - marker.setTitle(labelArray[i]); - var infowindow = new google.maps.InfoWindow({content: i+labelArray[i]}); - google.maps.event.addListener(marker, 'click', (function(marker, i) { + var mapOptions = ".json_encode($options)."; + mapOptions.mapTypeId= google.maps.MapTypeId.ROADMAP; + + var map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions); + var bounds = new google.maps.LatLngBounds(southWest, northEast); + map.fitBounds(bounds); + + var infowindow = new google.maps.InfoWindow(); + + var marker, i; + + for (i = 0; i < locations.length; i++) { + marker = new google.maps.Marker({ + position: new google.maps.LatLng(locations[i].lat, locations[i].long), + title: locations[i].label, + map: map + }); + + google.maps.event.addListener(marker, 'click', (function(marker, i) { return function() { - infowindow.setContent(labelArray[i]); + infowindow.setContent('<p>'+locations[i].label+'</p>') infowindow.open(map, marker); } })(marker, i)); - } } - - google.maps.event.addDomListener(window, 'load', initialize); + + } + initialize_$randId(); //]]> </script>"; return $pre; diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizbarchart.php b/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizbarchart.php new file mode 100644 index 0000000000000000000000000000000000000000..80f856393a587eddfa280303aa70a3d8d1fdecfd --- /dev/null +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizbarchart.php @@ -0,0 +1,65 @@ +<?php + +class Haanga_Extension_Filter_GoogleVizBarChart{ + public $is_safe = TRUE; + static function main($obj, $varname){ + $data = ""; + $i = 0; + $j = 0; + $firstColumn = true; + $options = array(); + $names = explode(",", $varname); + + $fieldCounter=0; + $varList = array(); + foreach($names as $v){ + if(strpos($v,"=")){ + break; + } + $fieldCounter++; + $columnType = 'number'; + if($firstColumn){ + $columnType = 'string'; + $firstColumn = false; + } + array_push($varList, $v); + $data .= " data.addColumn('".$columnType."', '".$v."');\n"; + } + + foreach($obj as $k){ + foreach($varList as $v){ + $value = ($j==0)?"'".$k->$v->value."'":$k->$v->value; + $data .=" data.setCell($i, $j, ".$value.");\n"; + $j++; + } + $i++; + $j=0; + } + + + //Getting options + $options['height'] = 400; + $options['width'] = 400; + for($z=$fieldCounter; $z < count($names); $z++){ + $pair = explode("=", $names[$z]); + $key = trim($pair[0], "\" '"); + $value = trim($pair[1], "\" '"); + $options[$key] = $value; + } + + $divId = uniqid("columnchart_div"); + $pre = "<div id='".$divId."'></div><script type='text/javascript' src='https://www.google.com/jsapi'></script> + <script type='text/javascript'> + var options_$divId = ".json_encode($options)."; + google.load('visualization', '1', {packages:['corechart']}); + google.setOnLoadCallback(drawChart); + function drawChart() { + var data = new google.visualization.DataTable(); + data.addRows(".$i.");\n +".$data." var barchart = new google.visualization.BarChart(document.getElementById('".$divId."')); +barchart.draw(data, options_$divId); + } + </script>"; + return $pre; + } +} diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizcolumnchart.php b/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizcolumnchart.php index 529334aea740c3bbb88895d1ea53bb2f002dcc24..eb8a53fd58c03e3f4de09b3eaef14ac2696e73d2 100644 --- a/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizcolumnchart.php +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizcolumnchart.php @@ -7,17 +7,27 @@ class Haanga_Extension_Filter_GoogleVizColumnChart{ $i = 0; $j = 0; $firstColumn = true; + $options = array(); $names = explode(",", $varname); + + $fieldCounter=0; + $varList = array(); foreach($names as $v){ + if(strpos($v,"=")){ + break; + } + $fieldCounter++; $columnType = 'number'; if($firstColumn){ $columnType = 'string'; $firstColumn = false; } + array_push($varList, $v); $data .= " data.addColumn('".$columnType."', '".$v."');\n"; } + foreach($obj as $k){ - foreach($names as $v){ + foreach($varList as $v){ $value = ($j==0)?"'".$k->$v->value."'":$k->$v->value; $data .=" data.setCell($i, $j, ".$value.");\n"; $j++; @@ -25,16 +35,29 @@ class Haanga_Extension_Filter_GoogleVizColumnChart{ $i++; $j=0; } + + + //Getting options + $options['height'] = 400; + $options['width'] = 400; + for($z=$fieldCounter; $z < count($names); $z++){ + $pair = explode("=", $names[$z]); + $key = trim($pair[0], "\" '"); + $value = trim($pair[1], "\" '"); + $options[$key] = $value; + } + $divId = uniqid("columnchart_div"); $pre = "<div id='".$divId."'></div><script type='text/javascript' src='https://www.google.com/jsapi'></script> <script type='text/javascript'> + var options_$divId = ".json_encode($options)."; google.load('visualization', '1', {packages:['corechart']}); google.setOnLoadCallback(drawChart); function drawChart() { var data = new google.visualization.DataTable(); data.addRows(".$i.");\n ".$data." var columnchart = new google.visualization.ColumnChart(document.getElementById('".$divId."')); -columnchart.draw(data, {showRowNumber: true, width: '80%'}); +columnchart.draw(data, options_$divId); } </script>"; return $pre; diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizpiechart.php b/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizpiechart.php index 266354760c16d513c8b85d20ad1ec811d7c7fbad..f52fcbad894ce2e623d6a2aac670242cc317f441 100644 --- a/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizpiechart.php +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizpiechart.php @@ -5,18 +5,15 @@ class Haanga_Extension_Filter_GoogleVizPieChart{ static function main($obj, $varname){ $data = ""; $i = 0; + $options = array(); $randId = rand(); $firstColumn = true; $names = explode(",", $varname); $w = "400"; - $h = "300"; + $h = "400"; - if($names[3] != null && $names[3] != ""){ - $w = $names[3]; - } - if($names[4] != null && $names[4] != ""){ - $h = $names[4]; - } + $options['width'] = $w; + $options['height'] = $h; $data .= "data.addColumn('string', '".$names[0]."');"; $data .= "data.addColumn('number', '".$names[1]."');"; @@ -25,16 +22,25 @@ class Haanga_Extension_Filter_GoogleVizPieChart{ $data .=" data.setCell($i, 1, ".$k->$names[1]->value.");\n"; $i++; } + + //Getting options + for($j=2; $j < count($names); $j++){ + $pair = explode("=", $names[$j]); + $key = trim($pair[0], "\" '"); + $value = trim($pair[1], "\" '"); + $options[$key] = $value; + } - $pre = "<div id='piechart_div_".$randId."' style='width: ".$w."px; height: ".$h."px'></div><script type='text/javascript' src='https://www.google.com/jsapi'></script> + $pre = "<div id='piechart_div_".$randId."'></div><script type='text/javascript' src='https://www.google.com/jsapi'></script> <script type='text/javascript'> + var options_$randId = ".json_encode($options)."; google.load('visualization', '1', {packages:['corechart']}); google.setOnLoadCallback(drawChart_".$randId."); function drawChart_".$randId."() { var data = new google.visualization.DataTable(); data.addRows(".$i.");\n ".$data." var piechart = new google.visualization.PieChart(document.getElementById('piechart_div_".$randId."')); - piechart.draw(data); + piechart.draw(data, options_$randId); } </script>"; return $pre; diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizscatterchart.php b/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizscatterchart.php new file mode 100644 index 0000000000000000000000000000000000000000..4c7d882c84e510cc1e32047af4ce0a69d8c9a05a --- /dev/null +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Googlevizscatterchart.php @@ -0,0 +1,61 @@ +<?php + +class Haanga_Extension_Filter_GoogleVizScatterChart{ + public $is_safe = TRUE; + static function main($obj, $varname){ + $data = ""; + $i = 0; + $j = 0; + $firstColumn = true; + $options = array(); + $names = explode(",", $varname); + + $fieldCounter=0; + $varList = array(); + foreach($names as $v){ + if(strpos($v,"=")){ + break; + } + $fieldCounter++; + $columnType = 'number'; + array_push($varList, $v); + $data .= " data.addColumn('".$columnType."', '".$v."');\n"; + } + + foreach($obj as $k){ + foreach($varList as $v){ + $value = $k->$v->value; + $data .=" data.setCell($i, $j, ".$value.");\n"; + $j++; + } + $i++; + $j=0; + } + + + //Getting options + $options['height'] = 400; + $options['width'] = 400; + for($z=$fieldCounter; $z < count($names); $z++){ + $pair = explode("=", $names[$z]); + $key = trim($pair[0], "\" '"); + $value = trim($pair[1], "\" '"); + $options[$key] = $value; + } + + $divId = uniqid("columnchart_div"); + $pre = "<div id='".$divId."'></div><script type='text/javascript' src='https://www.google.com/jsapi'></script> + <script type='text/javascript'> + var options_$divId = ".json_encode($options)."; + google.load('visualization', '1', {packages:['corechart']}); + google.setOnLoadCallback(drawChart); + function drawChart() { + var data = new google.visualization.DataTable(); + data.addRows(".$i.");\n +".$data." var barchart = new google.visualization.ScatterChart(document.getElementById('".$divId."')); +barchart.draw(data, options_$divId); + } + </script>"; + return $pre; + } +} diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Leafletmaps.php b/lib/Haanga/lib/Haanga/Extension/Filter/Leafletmaps.php new file mode 100644 index 0000000000000000000000000000000000000000..5b48ede6c62f3bc6ead566f21add71634b522e9f --- /dev/null +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Leafletmaps.php @@ -0,0 +1,91 @@ +<?php + +class Haanga_Extension_Filter_Leafletmaps{ + public $is_safe = TRUE; + static function main($obj, $varname){ + $data = ""; + $i = 0; + $j = 0; + $randId = rand(); + $firstColumn = true; + $names = explode(",", $varname); + $north = -90; $south=90; $east=-180; $west = 180; + $latArr =""; $longArr=""; $nameArr = ""; + $options = array(); + $options['width'] = 500; + $options['height'] = 500; + $options['zoom'] = 10; + for($z=3; $z < count($names); $z++){ + $pair = explode("=", $names[$z]); + $key = trim($pair[0], "\" '"); + $value = trim($pair[1], "\" '"); + $options[$key] = $value; + } + $w = $options['width']; + $h = $options['height']; + $z = intval($options['zoom']); + + $points = array(); + foreach($obj as $k){ + $currentPoint = array(); + if($north < $k->$names[0]->value){ + $north = $k->$names[0]->value; + } + $currentPoint['lat'] = $k->$names[0]->value; + if($south > $k->$names[0]->value){ + $south = $k->$names[0]->value; + } + + if($west > $k->$names[1]->value){ + $west = $k->$names[1]->value; + } + if($east < $k->$names[1]->value){ + $east = $k->$names[1]->value; + } + $currentPoint['long'] = $k->$names[1]->value; + + $currentPoint['label'] = $k->$names[2]->value; + $firstColumn = false; + array_push($points, $currentPoint); + } + + $centerLat = ($south+$north)/2; + $centerLon = ($east+$west)/2; + $pre = "<div id='map_$randId' style='height: 580px;'></div> + <script src='http://cdn.leafletjs.com/leaflet-0.4/leaflet.js'></script> + <script type='text/javascript'> + //<![CDATA[ + + function loadCssFile() { + var fileref=document.createElement('link'); + fileref.setAttribute('rel', 'stylesheet'); + fileref.setAttribute('type', 'text/css'); + fileref.setAttribute('href', 'http://cdn.leafletjs.com/leaflet-0.4/leaflet.css'); + document.getElementsByTagName('head')[0].appendChild(fileref); + } + + + function initialize_$randId() { + var locations = ".json_encode($points)."; + var mapOptions = ".json_encode($options)."; + mapOptions.attribution = osmAttrib; + + map = new L.Map('map_$randId'); + var osmUrl='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; + var osmAttrib='Map data © <a href=\"http://openstreetmap.org\">OpenStreetMap</a> contributors'; + var osm = new L.TileLayer(osmUrl, mapOptions ); + map.setView([$centerLat, $centerLon],mapOptions.zoom); + map.addLayer(osm); + + for(var i=0;i<locations.length;i++){ + L.marker([locations[i].lat, locations[i].long]).addTo(map).bindPopup(locations[i].label) + } + } + +// loadCssFile(); + initialize_$randId(); + //]]> + </script>"; + return $pre; + } +}