Subversion Repositories portal2

Rev

Rev 690 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

/*  emg - Energy Monitoring & Graphing
*  Copyright (C) 2006-2012 Romain Lievin
*
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 3 of the License, or
*  (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software Foundation,
*  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

?>

<?php
include_once('auth_check.php');
?>

<?php
$form_token = md5(uniqid('auth', true));
$_SESSION['form_token'] = $form_token;
$error = new Error();
?>

<?php
if(!isset( $_POST['form_network_timeout'], $_POST['form_network_retry'], $_POST['form_token_2'])){
        $error->push(_('One or more fields are missing.'));
}
elseif( $_POST['form_token_2'] != $_SESSION['form_token_2']){
        $error->push(_('Internal error: invalid form token.'));
}
else
{
        $_SESSION['broadcast']['timeout'] = $timeout = filter_var($_POST['form_network_timeout'], FILTER_SANITIZE_NUMBER_INT);
        $_SESSION['broadcast']['retry'] = $retry = filter_var($_POST['form_network_retry'], FILTER_SANITIZE_NUMBER_INT);
        $port  = $_SESSION['broadcast']['port'];

        // If not AJAX
        /*
        $d     = DiscoverFactory::createInstance($port, $timeout, $retry);
        $infos = $d->discoverDevices();
        //var_dump($infos);
        */


        /*
        $infos = array(          0 =>
        array(
        'ip' =>  '192.168.0.4',
        'uuid' =>  '3DC683C6-5CDC-11E1-935C-8D314824019C',
        'name' =>  'ALIX2'),
        1 =>
        array(
        'ip' =>  '192.168.0.10',
        'uuid' =>  '2DC683C6-5CDC-11E1-935C-8D314824019B',
        'name' =>  'ALIX1'));

        //var_dump($infos);
        $error->push(_('');
        */

}
$id = link_get_id_from_filename("form_devices_list.php");
?>

<div id="page_form_network_list">
        <h1>
                <?php echo _('Devices'); ?>
        </h1>

        <?php
        $id = link_get_id_from_filename("form_devices_add.php");
        echo "<form action=\"index.php?id_page=$id\" method=\"post\">";
        ?>


        <fieldset id="form_list">
                <object>
                        <?php
                        $table = '';

                        $table .= "\n";
                        $table .= "<table id=\"table_form\">\n";

                        $table .= "  <thead>\n";
                        $table .= "    <tr>\n";
                        $table .= "      <td> <strong>" . _('IP') . "</strong> </td>\n";
                        $table .= "      <td> <strong>" . _('UUID') . "</strong> </td>\n";
                        $table .= "      <td> <strong>" . _('Name') . "</strong> </td>\n";
                        $table .= "      <td> <strong>" . _('MAC') . "</strong> </td>\n";
                        $table .= "    </tr>\n";
                        $table .= "  </thead>\n";

                        /* This part below is not used any longer (Javascript) */
                        $table .= "  <tbody>\n";
                        if(isset($infos) && (count($infos) > 1)){
                                foreach($infos as $key => $info){
                                        $ip   = $info['ip'];
                                        $mac  = $info['mac'];
                                        $uuid = $info['uuid'];
                                        $name = $info['name'];

                                        if(isset($_SESSION['park'])){
                                                $park = $_SESSION['park'];

                                                if($park && $park->countDevices() > 0){
                                                        $device = $park->getDevice($uuid);
                                                }
                                        }

                                        $table .= "  <tr>\n";

                                        $table .= "    <td>\n";
                                        $table .= "      $ip \n";
                                        $table .= "    </td>\n";
                                        $table .= "    <td>\n";
                                        $table .= "      $mac\n";
                                        $table .= "    </td>\n";
                                        $table .= "    <td>\n";
                                        if($device != null){
                                                $id = link_get_id_from_filename("view_device.php");
                                                $table .= "      <a href=\"index.php?id_page=$id&device_key=$uuid\">" . $uuid . '</a>' . "\n";
                                        }
                                        else
                                        {
                                                $table .= "      $uuid\n";
                                        }
                                        $table .= "    </td>\n";
                                        $table .= "    <td>\n";
                                        $table .= "      $name\n";
                                        $table .= "    </td>\n";

                                        if($device == null){
                                                $id = link_get_id_from_filename("form_devices_add.php");

                                                $table .= "    <td>\n";
                                                $table .= "      <form action=\"index.php?id_page=$id\" method=\"post\">\n";
                                                $table .= "        <input type=\"hidden\" name=\"form_device_key\" value=\"$uuid\" />\n";
                                                $table .= "        <input type=\"hidden\" name=\"form_device_url\" value=\"$ip\" />\n";
                                                $table .= "        <input type=\"hidden\" name=\"form_device_name\" value=\"$name\" />\n";
                                                $table .= "        <input type=\"hidden\" name=\"form_device_type\" value=\"remote\" />\n";
                                                $table .= "        <input type=\"image\" name=\"add\" value=\"submit\" id=\"device_add_2\" src=\"images/btn_add.png\" alt=\"add\" />\n";
                                                $table .= "     </form>\n";
                                                $table .= "    </td>\n";
                                        }
                                        else
                                        {
                                                $id = link_get_id_from_filename("form_devices_modify.php");

                                                $table .= "    <td>\n";
                                                $table .= "      <form action=\"index.php?id_page=$id\" method=\"post\">\n";
                                                $table .= "        <input type=\"hidden\" name=\"form_device_key\" value=\"$uuid\" />\n";
                                                $table .= "        <input type=\"hidden\" name=\"form_device_url\" value=\"$ip\" />\n";
                                                $table .= "        <input type=\"hidden\" name=\"form_device_name\" value=\"$name\" />\n";
                                                $table .= "        <input type=\"hidden\" name=\"form_device_type\" value=\"remote\" />\n";
                                                $table .= "        <input type=\"image\" name=\"merge\" value=\"submit\" id=\"device_merge\" src=\"images/btn_merge.png\" alt=\"merge\" />\n";
                                                $table .= "     </form>\n";
                                                $table .= "    </td>\n";
                                        }

                                        $table .= "  </tr>\n";
                                        $table .= "\n";
                                }
                        }
                        $table .= "  </tbody>\n";
                        $table .= "</table>\n";
                        echo $table;
                        ?>
                </object>

                <hr/>

                <legend>
                        <?php echo _('List'); ?>
                </legend>

                <div class="buttons">
                        <input type="hidden" name="form_*" value="<?php echo $form_token; ?>" />
                        <input type="submit" name="add" value=<?php echo _('Add');?> id="device_add" alt="add" />
                </div>
        </fieldset>
        </form>

        <div id="ajax_status">
        </div>

        <div id="pbar_status">
                <span>
                        <?php echo _('Status'); ?>:
                </span>
                <div id="pbar">
                        <div id="pbar_left">
                        </div>
                        <div id="pbar_right">
                        </div>
                </div>
        </div>

        <?php
        $js_data = "<script type='text/javascript'>\n";
        $js_data .= "   timeout = " . $timeout . ";\n";
        $js_data .= "   retry = " . $retry . ";\n";
        $js_data .= "   port = " . $port . ";\n";

        $park = $_SESSION['park'];
        if($park && $park->countDevices() > 0){
                $uuids = $park->getDevicesKeys();
                //$json = json_encode($uuids, JSON_FORCE_OBJECT);
                $json  = json_encode($uuids);
                $js_data .= "   uuids = " . $json . ";\n";
        }

        $js_data .= "   view_device_id = " . link_get_id_from_filename("view_device.php") . ";\n";
        $js_data .= "   devices_add_id = " . link_get_id_from_filename("form_devices_add.php") . ";\n";
        $js_data .= "   devices_mod_id = " . link_get_id_from_filename("form_devices_modify.php") . ";\n";

        $js_data .= "</script>";
        echo $js_data;
        ?>

        <?php echo $error->display(); ?>
</div>

<script type="text/javascript" src="form_network_submit.js">
/*
        var operation = 1;
        var infos = null;

        var url = "ajax_discover.php";
        var params;
        var query;

        var div = document.getElementById('ajax_status');
        var table = document.getElementById('table_form');
        var line;
        var html;

        function drawProgressBar(n, d)
        {
                var ratio = Math.round((100 * n) / d);

                document.getElementById("pbar_left").style.width = ratio + '%';
                document.getElementById("pbar_right").innerHTML = ratio + '%';
        }

        //div.innerHTML = 'Network discovery is in progress...';
        drawProgressBar(0,4);

        query = new XMLHttpRequest();
        operation = 1;
        params = "timeout=" + timeout + "&retry=" + retry + "&port=" + port + "&operation=" + operation + "&infos=" + infos;
        query.open('POST', url, true);
        query.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        query.setRequestHeader("Content-length", params.length);
        query.setRequestHeader("Connection", "close");
        query.send(params);
        query.onreadystatechange = query_change_cb_1;

        function query_change_cb_1()
        {
                if(query.readyState == 4)
                {
                        if(query.status != 500 && query.status != 404)
                        {
                                //div.innerHTML = 'Network discovery is in progress: 1/4.';
                                drawProgressBar(1,4);
                                infos = eval('(' + query.responseText + ')');

                                for(var i = 0; i < infos.length; i++)
                                {
                                        line = document.createElement('tr');
                                        table.appendChild(line);
                                        html = '<td>' + infos[i].ip + '</td> <td></td> <td></td> <td></td> <td></td>';
                                        line.innerHTML = html;
                                }

                                query = new XMLHttpRequest();
                                operation = 2;
                                params = "timeout=" + timeout + "&retry=" + retry + "&port=" + port + "&operation=" + operation + "&infos=" + JSON.stringify(infos);
                                query.open('POST', url, true);
                                query.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                                query.setRequestHeader("Content-length", params.length);
                                query.setRequestHeader("Connection", "close");
                                query.send(params);
                                query.onreadystatechange = query_change_cb_2;
                        }
                        else
                        {
                                div.innerHTML = 'Internal AJAX error (' + query.status + ').';
                        }
                }
                else
                {
                        //div.innerHTML = 'Query is in progress: ' + query.readyState + '/4<br/>';
                }
        }

        function query_change_cb_2()
        {
                //alert(JSON.stringify(infos));

                if(query.readyState == 4)
                {
                        if(query.status != 500 && query.status != 404)
                        {
                                //div.innerHTML = 'Network discovery is in progress: 2/4.';
                                drawProgressBar(2,4);
                                infos = eval('(' + query.responseText + ')');

                                for(var i = 0; i < infos.length; i++)
                                {
                                        var cell = table.rows[i+1].cells[operation-1];
                                        cell.innerHTML = infos[i].uuid.toString();
                                }

                                query = new XMLHttpRequest();
                                operation = 3;
                                params = "timeout=" + timeout + "&retry=" + retry + "&port=" + port + "&operation=" + operation + "&infos=" + JSON.stringify(infos);
                                query.open('POST', url, true);
                                query.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                                query.setRequestHeader("Content-length", params.length);
                                query.setRequestHeader("Connection", "close");
                                query.send(params);
                                query.onreadystatechange = query_change_cb_3;
                        }
                        else
                        {
                                div.innerHTML = 'Internal AJAX error (' + query.status + ').';
                        }
                }
                else
                {
                        //div.innerHTML = 'Query is in progress: ' + query.readyState + '/4<br/>';
                }
        }

        function query_change_cb_3()
        {

                if(query.readyState == 4)
                {

                        if(query.status != 500 && query.status != 404)
                        {
                                //div.innerHTML = 'Network discovery is in progress: 3/4.';
                                drawProgressBar(3,4);
                                infos = eval('(' + query.responseText + ')');

                                for(var i = 0; i < infos.length; i++)
                                {
                                        var cell = table.rows[i+1].cells[operation-1];
                                        cell.innerHTML = infos[i].name.toString();
                                }

                                query = new XMLHttpRequest();
                                operation = 4;
                                params = "timeout=" + timeout + "&retry=" + retry + "&port=" + port + "&operation=" + operation + "&infos=" + JSON.stringify(infos);
                                query.open('POST', url, true);
                                query.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                                query.setRequestHeader("Content-length", params.length);
                                query.setRequestHeader("Connection", "close");
                                query.send(params);
                                query.onreadystatechange = query_change_cb_4;
                        }
                        else
                        {
                                div.innerHTML = 'Internal AJAX error (' + query.status + ').';
                        }
                }
                else
                {
                        //div.innerHTML = 'Query is in progress: ' + query.readyState + '/4<br/>';
                }
        }

        function query_change_cb_4()
        {
                if(query.readyState == 4)
                {
                        if(query.status != 500 && query.status != 404)
                        {
                                //div.innerHTML = 'Network discovery is in progress: 4/4.';
                                drawProgressBar(4,4);
                                infos = eval('(' + query.responseText + ')');

                                for(var i = 0; i < infos.length; i++)
                                {
                                        var cell = table.rows[i+1].cells[operation-1];
                                        cell.innerHTML = infos[i].mac.toString();
                                }

                                //uuid
                                //uuids = eval('(' + uuids_str + ')');
                                //uuids = {"0":"2DC683C6-5CDC-11E1-935C-8D314824019B","1":"2DC683C6-5CDC-11E1-935C-8D314824019C"};

                                for(var i = 0; i < infos.length; i++)
                                {
                                        for(var j = 0; j < uuids.length; j++)
                                        {
                                                if(infos[i].uuid == uuids[j])
                                                {
                                                        var cell;
                                                        var html;

                                                        cell = table.rows[i+1].cells[1];
                                                        html = '      <a href=\"index.php?id_page=' + view_device_id + '&device_key=' + uuids[j] + '\">' + uuids[j] + '</a>' + '\n';
                                                        cell.innerHTML = html;

                                                        cell = table.rows[i+1].cells[4];
                                                        html = '';
                                                        html += '      <form action=\"index.php?id_page=' + devices_mod_id + '\" method=\"post\">\n';
                                                        html += '        <input type=\"hidden\" name=\"form_device_key\" value=\"' + infos[i].uuid + '\" />\n';
                                                        html += '        <input type=\"hidden\" name=\"form_device_url\" value=\"' + infos[i].ip + '\" />\n';
                                                        html += '        <input type=\"hidden\" name=\"form_device_name\" value=\"' + infos[i].name + '\" />\n';
                                                        html += '        <input type=\"hidden\" name=\"form_device_type\" value=\"remote\" />\n';
                                                        html += '        <input type=\"image\" name=\"merge\" value=\"submit\" id=\"device_merge\" src=\"images/btn_merge.png\" alt=\"merge\" title="merge" />\n';
                                                        html += '      </form>\n';
                                                        cell.innerHTML = html;
                                                }
                                                else
                                                {
                                                        cell = table.rows[i+1].cells[4];
                                                        html = '';
                                                        html += '      <form action=\"index.php?id_page=' + devices_add_id + '\" method=\"post\">\n';
                                                        html += '        <input type=\"hidden\" name=\"form_device_key\" value=\"' + infos[i].uuid + '\" />\n';
                                                        html += '        <input type=\"hidden\" name=\"form_device_url\" value=\"' + infos[i].ip + '\" />\n';
                                                        html += '        <input type=\"hidden\" name=\"form_device_name\" value=\"' + infos[i].name + '\" />\n';
                                                        html += '        <input type=\"hidden\" name=\"form_device_type\" value=\"remote\" />\n';
                                                        html += '        <input type=\"image\" name=\"add\" value=\"submit\" id=\"device_add_2\" src=\"images/btn_add.png\" alt=\"add\" title="add" />\n';
                                                        html += '      </form>\n';
                                                        cell.innerHTML = html;
                                                }
                                        }
                                }

                                //div.innerHTML = 'Network discovery is finished.';
                        }
                        else
                        {
                                div.innerHTML = 'Internal AJAX error (' + query.status + ').';
                        }
                }
                else
                {
                        //div.innerHTML = 'Query is in progress: ' + query.readyState + '/4<br/>';
                }
        }
        */
</script>