move files to data folder
move files to data folder

file:a/.gitignore -> file:b/.gitignore
   
*.wav *.wav
*.pyc *.pyc
  /nbproject/private/
[submodule "pynma"] [submodule "pynma"]
path = pynma path = pynma
url = git://github.com/uskr/pynma.git url = git://github.com/uskr/pynma.git
  [submodule "js/flotr2"]
  path = js/flotr2
  url = git://github.com/HumbleSoftware/Flotr2.git
   
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
  </project>
 
 
file:b/.idea/misc.xml (new)
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="ProjectResources">
  <default-html-doctype>jar:file:\C:\Program Files (x86)\JetBrains\PhpStorm 5.0.2\lib\webide.jar!\resources\html5-schema\html5.rnc</default-html-doctype>
  </component>
  <component name="ProjectRootManager" version="2" />
  </project>
 
 
file:b/.idea/modules.xml (new)
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="ProjectModuleManager">
  <modules>
  <module fileurl="file://$PROJECT_DIR$/.idea/scannr.iml" filepath="$PROJECT_DIR$/.idea/scannr.iml" />
  </modules>
  </component>
  </project>
 
 
file:b/.idea/scannr.iml (new)
  <?xml version="1.0" encoding="UTF-8"?>
  <module type="WEB_MODULE" version="4">
  <component name="NewModuleRootManager">
  <content url="file://$MODULE_DIR$" />
  <orderEntry type="inheritedJdk" />
  <orderEntry type="sourceFolder" forTests="false" />
  </component>
  </module>
 
 
  <component name="DependencyValidationManager">
  <state>
  <option name="SKIP_IMPORT_STATEMENTS" value="false" />
  </state>
  </component>
file:b/.idea/vcs.xml (new)
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="VcsDirectoryMappings">
  <mapping directory="$PROJECT_DIR$" vcs="Git" />
  <mapping directory="$PROJECT_DIR$/js/flotr2" vcs="Git" />
  <mapping directory="$PROJECT_DIR$/pynma" vcs="Git" />
  </component>
  </project>
 
 
file:b/calls.json.php (new)
  <?php
 
 
  function json_graph($sensorID, $timefrom, $timeto) {
  $values = getSensorValuesByHour($sensorID, $timefrom, $timeto);
  $label = $sensorID;
  $data = Array();
  $tzoffset = $this->get_timezone_offset("UTC");
  foreach ($values as $value) {
  $data[] = Array((strtotime($value['time']) + $tzoffset) * 1000, intval($value['avg']));
  }
  $this->output
  ->set_content_type('application/json')
  ->set_output(json_encode(Array("label" => $label, "data" => $data,
  "previous" => Array(
  "from" => $timefrom - (24 * 60 * 60),
  "to" => $timefrom)
  ,
  "next" => Array(
  "to" => $timeto + (24 * 60 * 60),
  "from" => $timeto)
  )
  ));
  }
 
  function json_data_description($sensorID, $timefrom, $timeto) {
  $timefrom = strtotime($timefrom);
  $timeto = strtotime($timeto);
  $years = getSensorDataYears($sensorID, $timefrom, $timeto);
 
  $months = getSensorDataMonths($sensorID, $timefrom, $timeto);
  $days = getSensorDataDays($sensorID, $timefrom, $timeto);
 
  return json_encode(Array("years" => $years, "months" => $months, "days" => $days
  ));
  }
 
  ?>
 
file:b/common.inc.php (new)
  <?php
  date_default_timezone_set("Australia/Sydney");
  $basePath = "";
  $DATA_DIR = "./data";
 
  /** Returns the offset from the origin timezone to the remote timezone, in seconds.
  * @param $remote_tz;
  * @param $origin_tz; If null the servers current timezone is used as the origin.
  * @return int;
  */
  function get_timezone_offset($remote_tz, $origin_tz = null) {
  if ($origin_tz === null) {
  if (!is_string($origin_tz = date_default_timezone_get())) {
  return false; // A UTC timestamp was returned -- bail out!
  }
  }
  $origin_dtz = new DateTimeZone($origin_tz);
  $remote_dtz = new DateTimeZone($remote_tz);
  $origin_dt = new DateTime("now", $origin_dtz);
  $remote_dt = new DateTime("now", $remote_dtz);
  $offset = $origin_dtz->getOffset($origin_dt) - $remote_dtz->getOffset($remote_dt);
  return $offset;
  }
 
  function getSensorValuesByHour($sensorID, $timeFrom, $timeTo) {
  $sql = 'select min(call_timestamp) as time, count(*), min(length), max(length), avg(length), stddev(length) from recordings
  group by tgid, date_trunc(\'hour\', call_timestamp) order by time';
 
  $query = $this->db->query($sql, Array($sensorID, $timeFrom, $timeTo));
  return $query->result_array();
  }
 
  function getSensorValuesByDay($sensorID, $dayFrom, $dayTo) {
  $sql = 'select min(time) as time, min(value), max(value), avg(value), stddev(value) from sensor_values where sensor_id = ?
  group by sensor_id, date_trunc(\'day\', time) order by time';
 
  $query = $this->db->query($sql, Array($sensorID));
  return $query->result_array();
  }
 
  function getSensorDataYears($sensorID, $timeFrom, $timeTo) {
  $sql = "select distinct extract('year' from call_timestamp) as year from recordings where tgid = ? order by year";
 
  $query = $this->db->query($sql, Array($sensorID));
  return $query->result_array();
  }
 
  function getSensorDataMonths($sensorID, $timeFrom, $timeTo) {
  $sql = "select distinct extract('month' from time) as month, extract('year' from time) as year from sensor_values where sensor_id = ? order by year, month";
 
  $query = $this->db->query($sql, Array($sensorID));
  return $query->result_array();
  }
 
  function getSensorDataDays($sensorID, $timeFrom, $timeTo) {
  $sql = "select distinct extract('day' from time) as day, extract('month' from time) as month, extract('year' from time) as year from sensor_values where sensor_id = ? order by year,month,day";
 
  $query = $this->db->query($sql, Array($sensorID));
  return $query->result_array();
  }
 
  function include_header($title) {
  global $basePath;
  ?>
  <!DOCTYPE html>
 
  <!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
  <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
  <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
  <!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
  <!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]-->
  <head>
  <meta charset="utf-8" />
 
  <!-- Set the viewport width to device width for mobile -->
  <meta name="viewport" content="width=device-width" />
 
  <title><?php echo $title; ?> - Scannr</title>
 
  <!-- Included CSS Files -->
  <link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/foundation.css">
  <link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/app.css">
 
  <!--[if lt IE 9]>
  <link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/ie.css">
  <![endif]-->
 
 
  <!-- IE Fix for HTML5 Tags -->
  <!--[if lt IE 9]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  <![endif]-->
 
  </head>
  <body xmlns:schema="http://schema.org/" xmlns:foaf="http://xmlns.com/foaf/0.1/">
 
  <!-- navBar -->
  <div id="navbar" class="container">
  <div class="row">
  <div class="four columns">
  <h1><a href="/">Disclosr</a></h1>
  </div>
  <div class="eight columns hide-on-phones">
  <strong class="right">
  <a href="getAgency.php">Agencies</a>
  <a href="about.php">About/FAQ</a>
  </strong>
  </div>
  </div>
  </div>
  <!-- /navBar -->
 
  <!-- container -->
  <div class="container">
  <?php
  }
 
  function include_footer() {
  global $basePath;
  ?>
 
  </div>
  <!-- container -->
 
 
 
 
  <!-- Included JS Files -->
  <script src="<?php echo $basePath; ?>js/foundation.js"></script>
  <script src="<?php echo $basePath; ?>js/app.js"></script>
  <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
  <script>window.jQuery || document.write('<script src="js/jquery-1.8.2.min.js"><\/script>')</script>
 
  <script type="text/javascript" src="<?php echo $basePath ?>js/flotr2/flotr2.js"></script>
  <?php
  if (strpos($_SERVER['SERVER_NAME'], ".gs")) {
  ?>
  <script type="text/javascript">
 
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-12341040-2']);
  _gaq.push(['_trackPageview']);
 
  (function() {
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
 
  </script>
 
  </body>
  </html>
 
  <?php
  }
  }
 
 
file:b/db.sql (new)
  --
  -- PostgreSQL database dump
  --
 
  -- Dumped from database version 9.1.2
  -- Dumped by pg_dump version 9.1.2
  -- Started on 2012-10-08 22:16:52
 
  SET statement_timeout = 0;
  SET client_encoding = 'UTF8';
  SET standard_conforming_strings = on;
  SET check_function_bodies = false;
  SET client_min_messages = warning;
 
  --
  -- TOC entry 162 (class 3079 OID 11639)
  -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
  --
 
  CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
 
 
  --
  -- TOC entry 1856 (class 0 OID 0)
  -- Dependencies: 162
  -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
  --
 
  COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
 
 
  SET search_path = public, pg_catalog;
 
  SET default_tablespace = '';
 
  SET default_with_oids = false;
 
  --
  -- TOC entry 161 (class 1259 OID 62391)
  -- Dependencies: 1847 6
  -- Name: recordings; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
  --
 
  CREATE TABLE recordings (
  filename text NOT NULL,
  tgid text,
  tgname text,
  sitename text,
  call_timestamp timestamp with time zone DEFAULT now(),
  length integer
  );
 
 
  ALTER TABLE public.recordings OWNER TO postgres;
 
  --
  -- TOC entry 1850 (class 0 OID 62391)
  -- Dependencies: 161
  -- Data for Name: recordings; Type: TABLE DATA; Schema: public; Owner: postgres
  --
 
  COPY recordings (filename, tgid, tgname, sitename, call_timestamp, length) FROM stdin;
  2012-09-30-1348998992.35-demo.wav 44028 CanberraBlackMnt 2012-09-30 19:56:35.268+10 254088
  2012-09-30-1348998995.69-demo.wav 44028 CanberraBlackMnt 2012-09-30 19:56:38.733+10 256136
  2012-09-30-1348998999.93-demo.wav 44028 CanberraBlackMnt 2012-09-30 19:56:45.913+10 587902
  2012-09-30-1348999006.13-demo.wav 44028 CanberraBlackMnt 2012-09-30 19:56:54.567+10 698570
  2012-09-30-1348999016.18-demo.wav 44028 CanberraBlackMnt 2012-09-30 19:57:00.87+10 481854
  2012-09-30-1348999732.25-demo.wav 44028 CanberraBlackMnt 2012-09-30 20:09:14.875+10 234110
  2012-10-01-1349049204.29-demo.wav 30004 L GEORG CanberraMtAinsli 2012-10-01 09:53:26.799+10 208816
  2012-10-01-1349049226.73-demo.wav 30004 L GEORG CanberraMtAinsli 2012-10-01 09:53:51.106+10 368776
  2012-10-01-1349049233.21-demo.wav 30004 L GEORG CanberraBlackMnt 2012-10-01 09:54:09.788+10 1388118
  2012-10-01-1349049249.98-demo.wav 30004 L GEORG CanberraBlackMnt 2012-10-01 09:54:17.872+10 663688
  2012-10-01-1349049264.24-demo.wav 30004 L GEORG CanberraMtAinsli 2012-10-01 09:54:30.636+10 538760
  2012-10-01-1349049270.91-demo.wav 30004 L GEORG CanberraMtAinsli 2012-10-01 09:54:33.547+10 223368
  2012-10-01-1349049332.89-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 09:55:35.416+10 211876
  2012-10-01-1349049500.43-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 09:58:24.513+10 342452
  2012-10-01-1349049504.69-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 09:58:26.976+10 194696
  2012-10-01-1349049507.06-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 09:58:29.354+10 194670
  2012-10-01-1349049509.44-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 09:58:34.742+10 396850
  2012-10-01-1349049779.09-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:03:04.97+10 492576
  2012-10-01-1349049786.9-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:03:12.308+10 452698
  2012-10-01-1349049792.46-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:03:25.6+10 1095920
  2012-10-01-1349049807.7-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:03:31.677+10 290840
  2012-10-01-1349049861.14-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:04:25.582+10 373762
  2012-10-01-1349049865.67-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:04:28.013+10 198792
  2012-10-01-1349049868.1-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:04:39.641+10 964280
  2012-10-01-1349049882.76-demo.wav 30004 L GEORG CanberraMtAinsli 2012-10-01 10:05:00.226+10 1464278
  2012-10-01-1349049900.31-demo.wav 30004 L GEORG CanberraMtAinsli 2012-10-01 10:05:10.501+10 856174
  2012-10-01-1349049931.19-demo.wav 40093 PCL Rural CanberraBlackMnt 2012-10-01 10:05:33.892+10 194482
  2012-10-01-1349050089.47-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:08:12.583+10 258960
  2012-10-01-1349050092.74-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:08:14.999+10 190600
  2012-10-01-1349050095.28-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:08:20.876+10 469114
  2012-10-01-1349050101.01-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:08:25.274+10 360540
  2012-10-01-1349050181.52-demo.wav 40093 PCL Rural CanberraBlackMnt 2012-10-01 10:09:44.577+10 257894
  2012-10-01-1349050559.5-demo.wav 10123 GOULB1 CanberraMtAinsli 2012-10-01 10:16:02.327+10 234682
  2012-10-01-1349050565.45-dem