function get_input_processlist_desc($userid, $id) { $process_list = get_input_processlist($userid, $id); // Get the input's process list $list = array(); if ($process_list) { $array = explode(",", $process_list); // input process list is comma seperated foreach ($array as $row) { $row = explode(":", $row); // Divide into process id and arg $processid = $row[0]; $arg = $row[1]; // Named variables $process = get_process($processid); // gets process details of id given $processDescription = $process[0]; // gets process description if ($process[1] == ProcessArg::INPUTID) { $arg = get_input_name($arg); } elseif ($process[1] == ProcessArg::FEEDID) { $arg = get_feed_name($arg); } // if feed: get feed name $list[] = array($processDescription, $arg); // Populate list array } } return $list; }
function feed_controller() { require "Models/feed_model.php"; global $session, $action, $format; $output['content'] = ""; $output['message'] = ""; //--------------------------------------------------------------------------------------------------------- // Set feed datatype: DataType::UNDEFINED|REALTIME|DAILY|HISTOGRAM // http://yoursite/emoncms/feed/type?id=1&type=1 //--------------------------------------------------------------------------------------------------------- if ($action == "type" && $session['write']) { $feedid = intval($_GET["id"]); $type = intval($_GET["type"]); if (feed_belongs_user($feedid, $session['userid'])) { set_feed_datatype($feedid, $type); $output['message'] = _("Feed type changed"); } else { $output['message'] = _("Feed does not exist"); } if ($format == 'html') { header("Location: view?id={$feedid}"); // Return to feed list page } } elseif ($action == "tag" && $session['write']) { $feedid = intval($_GET["id"]); if (feed_belongs_user($feedid, $session['userid'])) { $newfeedtag = preg_replace('/[^\\w\\s-.]/', '', $_GET["tag"]); // filter out all except for alphanumeric white space and dash and full stop $newfeedtag = db_real_escape_string($newfeedtag); set_feed_tag($feedid, $newfeedtag); $output['message'] = _("Feed tag changed"); } else { $output['message'] = _("Feed does not exist"); } if ($format == 'html') { header("Location: list"); // Return to feed list page } } elseif ($action == "rename" && $session['write']) { $feedid = intval($_GET["id"]); if (feed_belongs_user($feedid, $session['userid'])) { $newfeedname = preg_replace('/[^\\w\\s-.]/', '', $_GET["name"]); // filter out all except for alphanumeric white space and dash $newfeedname = db_real_escape_string($newfeedname); set_feed_name($feedid, $newfeedname); $output['message'] = _("Feed renamed"); } else { $output['message'] = _("Feed does not exist"); } if ($format == 'html') { header("Location: list"); // Return to feed list page } } elseif ($action == "delete" && $session['write']) { $feedid = intval($_GET["id"]); if (feed_belongs_user($feedid, $session['userid'])) { delete_feed($userid, $feedid); $output['message'] = _("Feed ") . get_feed_name($feedid) . _(" deleted"); } else { $output['message'] = _("Feed does not exist"); } } //--------------------------------------------------------------------------------------------------------- // Permanent delete equivalent to empty recycle bin // http://yoursite/emoncms/feed/permanentlydelete //--------------------------------------------------------------------------------------------------------- if ($action == "permanentlydelete" && $session['write']) { permanently_delete_feeds($session['userid']); $output['message'] = "Deleted feeds are now permanently deleted"; } //--------------------------------------------------------------------------------------------------------- // Restore feed ( if in recycle bin ) // http://yoursite/emoncms/feed/restore?id=1 //--------------------------------------------------------------------------------------------------------- if ($action == "restore" && $session['write']) { $feedid = intval($_GET["id"]); if (feed_belongs_user($feedid, $session['userid'])) { restore_feed($userid, $feedid); } $output['message'] = "feed restored"; if ($format == 'html') { header("Location: list"); } // Return to feed list page } //--------------------------------------------------------------------------------------------------------- // Feed List // http://yoursite/emoncms/feed/list.html // http://yoursite/emoncms/feed/list.json //--------------------------------------------------------------------------------------------------------- if ($action == 'list' && $session['read']) { $del = 0; if (isset($_GET["del"])) { $del = intval($_GET["del"]); } $feeds = get_user_feeds($session['userid'], $del); if ($format == 'json') { $output['content'] = json_encode($feeds); } if ($format == 'html') { $output['content'] = view("feed/list_view.php", array('feeds' => $feeds, 'del' => $del)); } } elseif ($action == 'view' && $session['read']) { $feedid = intval($_GET["id"]); if (feed_belongs_user($feedid, $session['userid'])) { $feed = get_feed($feedid); } if ($format == 'json') { $output['content'] = json_encode($feed); // Allow for AJAX from remote source if ($_GET["callback"]) { $output['content'] = $_GET["callback"] . "(" . json_encode($feed) . ");"; } } if ($format == 'html') { $output['content'] = view("feed/feed_view.php", array('feed' => $feed)); } } elseif ($action == 'value' && $session['read']) { $feedid = intval($_GET["id"]); if (feed_belongs_user($feedid, $session['userid'])) { $output['content'] = get_feed_value($feedid); } } elseif ($action == 'data' && $session['read']) { $feedid = intval($_GET['id']); // Check if feed belongs to user if (feed_belongs_user($feedid, $session['userid'])) { $start = floatval($_GET['start']); $end = floatval($_GET['end']); $dp = intval($_GET['dp']); $data = get_feed_data($feedid, $start, $end, $dp); $output['content'] = json_encode($data); } else { $output['message'] = "Permission denied"; } } //--------------------------------------------------------------------------------------------------------- // get histogram data: energy used at different powers in the time range given // http://yoursite/emoncms/feed/histogram?id=1&start=000&end=000 //--------------------------------------------------------------------------------------------------------- if ($action == 'histogram' && $session['read']) { $feedid = intval($_GET['id']); // Check if feed belongs to user if (feed_belongs_user($feedid, $session['userid'])) { $start = floatval($_GET['start']); $end = floatval($_GET['end']); $data = get_histogram_data($feedid, $start, $end); $output['content'] = json_encode($data); } else { $output['message'] = "Permission denied"; } } //--------------------------------------------------------------------------------------------------------- // get kwh per day at given power range // http://yoursite/emoncms/feed/kwhatpower?id=3&min=1000&max=10000 //--------------------------------------------------------------------------------------------------------- if ($action == 'kwhatpower' && $session['read']) { $feedid = intval($_GET['id']); // Check if feed belongs to user if (feed_belongs_user($feedid, $session['userid'])) { $min = floatval($_GET['min']); $max = floatval($_GET['max']); $data = get_kwhd_atpower($feedid, $min, $max); $output['content'] = json_encode($data); } else { $output['message'] = "This is not your feed..."; } } //--------------------------------------------------------------------------------------------------------- // Set a datapoint at a given time. // http://yoursite/emoncms/feed/edit?id=1&time=...&newvalue=... //--------------------------------------------------------------------------------------------------------- if ($action == "edit" && $session['write']) { $feedid = intval($_GET["id"]); if (feed_belongs_user($feedid, $session['userid'])) { $time = intval($_GET["time"]); $value = floatval($_GET["newvalue"]); update_feed_data($feedid, time(), $time, $value); $output['message'] = "Edit"; } } if ($action == "export" && $session['write']) { // Feed id and start time of feed to export $feedid = intval($_GET["id"]); $start = intval($_GET["start"]); if (feed_belongs_user($feedid, $session['userid'])) { // Open database etc here // Extend timeout limit from 30s to 2mins set_time_limit(120); // Regulate mysql and apache load. $block_size = 1000; $sleep = 20000; $feedname = "feed_" . trim($feedid) . ""; $fileName = $feedname . '.csv'; // There is no need for the browser to cache the output header("Cache-Control: no-cache, no-store, must-revalidate"); // Tell the browser to handle output as a csv file to be downloaded header('Content-Description: File Transfer'); header("Content-type: text/csv"); header("Content-Disposition: attachment; filename={$fileName}"); header("Expires: 0"); header("Pragma: no-cache"); // Write to output stream $fh = @fopen('php://output', 'w'); // Load new feed blocks until there is no more data $moredata_available = 1; while ($moredata_available) { // 1) Load a block $result = db_query("SELECT * FROM {$feedname} WHERE time>{$start} \n ORDER BY time Asc Limit {$block_size}"); $moredata_available = 0; while ($row = db_fetch_array($result)) { // Write block as csv to output stream fputcsv($fh, array($row['time'], $row['data'])); // Set new start time so that we read the next block along $start = $row['time']; $moredata_available = 1; } // 2) Sleep for a bit usleep($sleep); } fclose($fh); exit; } } return $output; }
function vis_controller() { require "Models/feed_model.php"; global $session, $action, $format; if ($session['read']) { $apikey = get_apikey_read($session['userid']); } if ($action == 'list' && $session['write']) { $user = get_user($session['userid']); $output['content'] = view("api_view.php", array('user' => $user)); } // vis/realtime?feedid=1 if ($action == "realtime" && $session['read']) { $feedid = intval($_GET['feedid']); $output['content'] = view("vis/realtime.php", array('feedid' => $feedid, 'feedname' => get_feed_name($feedid))); } // vis/rawdata?feedid=1 if ($action == "rawdata" && $session['read']) { $feedid = intval($_GET['feedid']); $output['content'] = view("vis/rawdata.php", array('feedid' => $feedid, 'feedname' => get_feed_name($feedid))); } // vis/bargraph?feedid=2 if ($action == "bargraph" && $session['read']) { $feedid = intval($_GET['feedid']); $output['content'] = view("vis/bargraph.php", array('feedid' => $feedidtrystan, 'feedname' => get_feed_name($feedid))); } if ($action == 'smoothie' && $session['read']) { $output['content'] = view("vis/smoothie/smoothie.php", array()); } // vis/histgraph?feedid=3 if ($action == "histgraph" && $session['read']) { $feedid = intval($_GET['feedid']); $output['content'] = view("vis/histgraph.php", array('feedid' => $feedid, 'feedname' => get_feed_name($feedid))); } // vis/dailyhistogram?power= &kwhd= &whw= if ($action == 'dailyhistogram' && $session['read']) { $output['content'] = view("vis/dailyhistogram/dailyhistogram.php", array()); } if ($action == 'zoom' && $session['read']) { $output['content'] = view("vis/zoom/zoom.php", array()); } if ($action == 'comparison' && $session['read']) { $output['content'] = view("vis/comparison/comparison.php", array()); } if ($action == 'stacked' && $session['read']) { $output['content'] = view("vis/stacked.php", array()); } if ($action == 'threshold' && $session['read']) { $output['content'] = view("vis/threshold.php", array()); } if ($action == 'simplezoom' && $session['read']) { $output['content'] = view("vis/simplezoom.php", array()); } if ($action == "orderbars" && $session['read']) { $feedid = intval($_GET['feedid']); $output['content'] = view("vis/orderbars.php", array('feedid' => $feedid, 'feedname' => get_feed_name($feedid))); } if ($action == 'orderthreshold' && $session['read']) { $output['content'] = view("vis/orderthreshold.php", array()); } elseif ($action == 'multigraph' && $session['read']) { if ($session['write']) { $write_apikey = get_apikey_write($session['userid']); } $output['content'] = view("vis/multigraph.php", array('write_apikey' => $write_apikey)); } // vis/rawdata?feedid=1 if ($action == "edit" && $session['write']) { $feedid = intval($_GET['feedid']); $output['content'] = view("vis/edit.php", array('feedid' => $feedid, 'feedname' => get_feed_name($feedid), 'type' => get_feed_datatype($feedid))); } return $output; }
function process_controller() { require "Models/process_model.php"; require "Models/input_model.php"; require "Models/feed_model.php"; global $session, $action, $format; $output['content'] = ""; $output['message'] = ""; //--------------------------------------------------------------------------------------------------------- // Get process list of input // http://yoursite/emoncms/process/list.html?inputid=1 // http://yoursite/emoncms/process/list.json?inputid=1 //--------------------------------------------------------------------------------------------------------- if ($action == "list" && $session['read']) { $inputid = intval($_GET["inputid"]); $input_processlist = get_input_processlist_desc($session['userid'], $inputid); if ($format == 'json') { $output['content'] = json_encode($input_processlist); } elseif ($format == 'html') { $output['content'] = view("process/list_view.php", array('inputid' => $inputid, 'input_processlist' => $input_processlist, 'process_list' => get_process_list())); } } elseif ($action == "add" && $session['write']) { $inputid = intval($_GET['inputid']); $processid = intval($_GET['type']); // get process type (ProcessArg::) $arg = floatval($_GET['arg']); // This is actual value, inputid or feedid //arg2 is feed name if arg=-1 (create new feed) $arg2 = preg_replace('/[^\\w\\s-.]/', '', $_GET['arg2']); // filter out all except for alphanumeric white space and dash $arg2 = db_real_escape_string($arg2); $process = get_process($processid); $valid = false; // Flag to determine if argument is valid switch ($process[1]) { case ProcessArg::VALUE: // If arg type value $arg = floatval($arg); $id = $arg; if ($arg != '') { $valid = true; } else { $output['message'] = 'ERROR: Argument must be a valid number greater or less than 0.'; } break; case ProcessArg::INPUTID: // If arg type input // Check if input exists (returns 0 if invalid) $name = get_input_name($arg); $id = get_input_id($_SESSION['userid'], $name); if ($name == '' || $id == '') { $output['message'] = 'ERROR: Input does not exist!'; } else { $valid = true; } break; case ProcessArg::FEEDID: // If arg type feed // First check if feed exists of given feed id and user. $name = get_feed_name($arg); $id = get_feed_id($_SESSION['userid'], $name); if ($name == '' || $id == '') { // If it doesnt then create a feed, $process[3] is the number of datafields in the feed table $id = create_feed($_SESSION['userid'], $arg2, $process[3], $process[4]); // Check feed was created successfully $name = get_feed_name($id); if ($name == '') { $output['message'] = 'ERROR: Could not create new feed!'; } else { $valid = true; } } else { $valid = true; } break; } if ($valid) { add_input_process($session['userid'], $inputid, $processid, $id); } if ($format == 'json') { $output['message'] = json_encode($output['message']); } elseif ($format == 'html') { header('Location: list?inputid=' . $inputid); } } elseif ($action == 'delete' && $session['write']) { $inputid = intval($_GET['inputid']); $processid = intval($_GET['processid']); delete_input_process($session['userid'], $inputid, $processid); if ($format == 'html') { header('Location: list?inputid=' . $inputid); } } elseif ($action == 'move' && $session['write']) { $inputid = intval($_GET['inputid']); $processid = intval($_GET['processid']); $moveby = intval($_GET['moveby']); move_input_process($session['userid'], $inputid, $processid, $moveby); if ($format == 'html') { header('Location: list?inputid=' . $inputid); } } elseif ($action == 'query' && $session['read']) { $inputid = intval($_GET["inputid"]); $processid = intval($_GET["type"]); // get process type $arg = preg_replace('/[^\\w\\s-.]/', '', $_GET["arg"]); // filter out all except for alphanumeric white space and dash $arg = db_real_escape_string($arg); $process = get_process($processid); $newprocess[0] = $process[1]; // Process arg type switch ($process[1]) { case ProcessArg::VALUE: $newprocess[1] = "Value"; break; case ProcessArg::INPUTID: $newprocess[1] = "Input"; $newprocess[2] = get_user_input_names($session['userid']); break; case ProcessArg::FEEDID: $newprocess[1] = "Feed"; $newprocess[2] = get_user_feed_names($session['userid']); break; default: $newprocess[1] = "ERROR"; } if ($format == 'json') { $output['content'] = json_encode($newprocess); } //if ($format == 'html') $output['content'] = $argboxhtml; } elseif ($action == "test" && $_SESSION['write']) { set_time_limit(360); // Increase PHP limit // Create Histogram data - (to feed, from feed, from date, to date). // $rows = histogram_history(4,1,"2008-01-01","2012-05-01"); } elseif ($action == "autoconfigure" && $session['write']) { $inputs = get_user_inputs($session['userid']); foreach ($inputs as $input) { auto_configure_inputs($session['userid'], $input[0], $input[1]); } if ($format == 'html') { header("Location: ../feed/list"); } } return $output; }