예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
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;
}
예제 #4
0
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;
}