chart employee growth
Former-commit-id: acae8c2c66e158f5126706b9308a5a8282cb4d3c
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,10 +10,10 @@
[submodule "lib/php-diff"]
path = lib/php-diff
url = https://github.com/chrisboulton/php-diff.git
-[submodule "javascripts/flot"]
- path = javascripts/flot
- url = https://github.com/paradoxxxzero/flot.git
[submodule "lib/Requests"]
path = lib/Requests
url = https://github.com/rmccue/Requests.git
+[submodule "javascripts/flotr2"]
+ path = javascripts/flotr2
+ url = https://github.com/HumbleSoftware/Flotr2.git
--- /dev/null
+++ b/admin/exportEmployees.csv.php
@@ -1,1 +1,86 @@
+<?php
+include_once("../include/common.inc.php");
+
+$format = "csv";
+//$format = "json";
+if (isset($_REQUEST['format'])) $format = $_REQUEST['format'];
+
+setlocale(LC_CTYPE, 'C');
+if ($format == "csv") {
+ $headers = Array("name");
+} else {
+ $headers = Array();
+}
+
+$db = $server->get_db('disclosr-agencies');
+try {
+ $rows = $db->get_view("app", "all", null, true)->rows;
+
+ $dataValues = Array();
+ foreach ($rows as $row) {
+ if (isset($row->value->statistics->employees)) {
+
+ $headers = array_unique(array_merge($headers, array_keys(object_to_array($row->value->statistics->employees))));
+ }
+ }
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+}
+
+$fp = fopen('php://output', 'w');
+if ($fp && $db) {
+ if ($format == "csv") {
+ header('Content-Type: text/csv; charset=utf-8');
+ header('Content-Disposition: attachment; filename="export.employeestats.' . date("c") . '.csv"');
+ }
+ header('Pragma: no-cache');
+ header('Expires: 0');
+ if ($format == "csv") {
+ fputcsv($fp, $headers);
+ } else if ($format == "json") {
+ echo '{
+ "labels" : ["' . implode('","', $headers) . '"],'.PHP_EOL;
+ }
+ try {
+ $agencies = $db->get_view("app", "all", null, true)->rows;
+ //print_r($agencies);
+ $first = true;
+ if ($format == "json") {
+ echo '"data" : ['.PHP_EOL;
+
+ }
+ foreach ($agencies as $agency) {
+
+ if (isset($agency->value->statistics->employees)) {
+ $row = Array();
+ $agencyEmployeesArray = object_to_array($agency->value->statistics->employees);
+ foreach ($headers as $i => $fieldName) {
+ if (isset($agencyEmployeesArray[$fieldName])) {
+ $row[] = '['.$i.','.$agencyEmployeesArray[$fieldName]["value"].']';
+ } else {
+ $row[] = '['.$i.',0]';
+ }
+ }
+ if ($format == "csv") {
+ fputcsv($fp, array_values($row));
+ } else if ($format == "json") {
+ if (!$first) echo ",";
+ echo '{"data" : [' . implode(",", array_values($row)) . '], "label": "'.$agency->value->name.'", "lines" : { "show" : true }, "points" : { "show" : true }}'.PHP_EOL;
+ $first = false;
+ }
+ }
+ }
+ if ($format == "json") {
+ echo ']
+ }'.PHP_EOL;
+
+ }
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+
+ die;
+}
+?>
+
--- a/charts.php
+++ b/charts.php
@@ -2,99 +2,130 @@
include_once('include/common.inc.php');
include_header();
$db = $server->get_db('disclosr-agencies');
-
-
?>
<div class="foundation-header">
<h1><a href="about.php">Charts</a></h1>
<h4 class="subheader">Lorem ipsum.</h4>
</div>
-<div id="placeholder" style="width:900px;height:600px;"></div>
+<div id="scores" style="width:900px;height:500px;"></div>
+<div id="employees" style="width:1000px;height:900px;"></div>
<script id="source">
-window.onload = function() {
- $(document).ready(function() {
- var d1 = [];
- var labels = [];
+ window.onload = function() {
+ $(document).ready(function() {
+ var d1 = [];
+ var scorelabels = [];
<?php
try {
- $rows = $db->get_view("app", "scoreHas?group=true", null, true)->rows;
+ $rows = $db->get_view("app", "scoreHas?group=true", null, true)->rows;
- /*foreach ($rows as $key => $row) {
- echo " d1.push([$key, {$row->value}]);".PHP_EOL;
- echo " labels.push('{$row->key}');".PHP_EOL;
- }*/
- $dataValues = Array();
- foreach ($rows as $row) {
- $dataValues[$row->value] = $row->key;
+
+ $dataValues = Array();
+ foreach ($rows as $row) {
+ $dataValues[$row->value] = $row->key;
+ }
+ $i = 0;
+ ksort($dataValues);
+ foreach ($dataValues as $value => $key) {
+
+ echo " d1.push([$i, $value]);" . PHP_EOL;
+ echo " scorelabels.push('$key');" . PHP_EOL;
+ $i++;
+ }
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
}
- $i = 0;
- ksort($dataValues);
- foreach($dataValues as $value => $key) {
+ ?>
+ function scoretrackformatter(obj) {
+ if (scorelabels[Math.floor(obj.x)]) {
+ return (scorelabels[Math.floor(obj.x)])+"="+obj.y;
+
+ } else {
+ return "";
+ }
+ }
+ function scoretickformatter(val, axis) {
+ if (scorelabels[Math.floor(val)]) {
+ return '<p style="margin-top:8em;-webkit-transform:rotate(-90deg);">'+(scorelabels[Math.floor(val)])+"</b>";
+
+ } else {
+ return "";
+ }
+ }
+ Flotr.draw(document.getElementById("scores"), [ {data: d1}], {
+ HtmlText: true,
+ bars : {
+ show : true
+ },
+ mouse : {
+ track : true,
+ relative : true,
+ trackFormatter: scoretrackformatter
+ },yaxis: {
+ autoscaling: true
+ },
+ xaxis: {
+ autoscaling: true,
+ minorTickFreq: 0.6,
+ noTicks : scorelabels.length,
+ tickFormatter: scoretickformatter
+ }
+ });
+
+
+
+
+
+
+
+
+var emplabels = [];
+function emptrackformatter(obj) {
+
+ return (obj.series.label)+" = "+obj.y+" in "+emplabels[Math.floor(obj.x)];
+
+ }
+ function emptickformatter(val, axis) {
+ if (emplabels[Math.floor(val)]) {
+ return '<p style="margin-top:8em;-webkit-transform:rotate(-90deg);">'+(emplabels[Math.floor(val)])+"</b>";
+
+ } else {
+ return "";
+ }
+ }
+function onDataReceived(series) {
+ emplabels = series.labels;
+ Flotr.draw(document.getElementById("employees"), series.data, {
+ mouse : {
+ track : true,
+ relative : true,
+ trackFormatter: emptrackformatter
+ },yaxis: {
+ max: 10000,
+ scaling: 'logarithmic'
+ },
+ xaxis: {
+ minorTickFreq: 1,
+ noTicks: emplabels.length,
+ showMinorLabels: true,
+ tickFormatter: emptickformatter
+ },
+ legend: {
+ show: false
+ }
+ });
+ }
- echo " d1.push([$i, $value]);".PHP_EOL;
- echo " labels.push('$key');".PHP_EOL;
- $i++;
- }
-} catch (SetteeRestClientException $e) {
- setteErrorHandler($e);
-}
-?>
-
- $.plot($("#placeholder"), [ d1], {
- grid: { hoverable: true },
-
- series: {
- bars: { show: true, barWidth: 0.6 }
- },
- xaxis: {
- tickFormatter: function formatter(val, axis) {
- if (labels[val]) {
- return(labels[val]);
-
- } else {
- return "";
- }
-
- },
- labelAngle: 90
- }
- });
-
-var previousPoint = null;
-$("#placeholder").bind("plothover", function (event, pos, item) {
- if (item) {
- if (previousPoint != item.datapoint) {
- previousPoint = item.datapoint;
-
- $("#tooltip").remove();
- var x = item.datapoint[0],
- y = item.datapoint[1] - item.datapoint[2];
-
- showTooltip(item.pageX, item.pageY, y );
- }
- }
- else {
- $("#tooltip").remove();
- previousPoint = null;
- }
-});
+ $.ajax({
+ url: "admin/exportEmployees.csv.php?format=json",
+ method: 'GET',
+ dataType: 'json',
+ success: onDataReceived
+ });
-
-});
-};
- function showTooltip(x, y, contents) {
- $('<div id="tooltip">' + contents + '</div>').css( {
- position: 'absolute',
- display: 'none',
- top: y + 5,
- left: x + 5,
- border: '1px solid #fdd',
- padding: '2px',
- 'background-color': '#fee',
- opacity: 0.80
- }).appendTo("body").fadeIn(200);
- }
+ });
+ };
+
</script>
<?php
--- a/include/template.inc.php
+++ b/include/template.inc.php
@@ -68,10 +68,9 @@
<!-- Included JS Files -->
<script src="<?php echo $basePath; ?>javascripts/foundation.js"></script>
<script src="<?php echo $basePath; ?>javascripts/app.js"></script>
- <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
+ <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
- <!--<script type="text/javascript" src="javascripts/jquery.js"></script>-->
- <script type="text/javascript" src="javascripts/flot/jquery.flot.js"></script>
+ <script type="text/javascript" src="javascripts/flotr2/flotr2.js"></script>
</body>
</html>
--- a/javascripts/flot
+++ /dev/null
--- /dev/null
+++ b/javascripts/flotr2