www-thermferm/utilities.php

Sun, 07 Jul 2019 14:31:10 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 07 Jul 2019 14:31:10 +0200
branch
stable
changeset 603
fcff55324b84
parent 397
00ca08f5a6f8
permissions
-rw-r--r--

Merged fix from default

<?php
/*****************************************************************************
 * Copyright (C) 2014-2015
 *   
 * Michiel Broek <mbroek at mbse dot eu>
 *
 * This file is part of ThermFerm
 *
 * This 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 2, or (at your option) any
 * later version.
 *
 * ThermFerm 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 ThermFerm; see the file COPYING.  If not, write to the Free
 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 *****************************************************************************/

$my_style = 'ui-redmond';


function open_socket()
{
    $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

    if (!($sock === false)) {
	if (socket_connect($sock, "localhost", 6554)) {
	    socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 15, 'usec' => 0));
	} else {
	    socket_close($sock);
    	}
    }
    return $sock;
}



/*
 * @param string $command to send to the server.
 * Return: string with the complete reply from the
 *         server. This can be a multiline reply.
 */
function send_cmd($command)
{
    $sock = open_socket();
    if ($sock == false) {
	return "";
    }
    socket_write($sock, $command . "\r\n", 4096);

    $answer = "";
    while (1) {
	$line = socket_read($sock, 4096);
	if ($line === '')
	    break;
	$answer .= $line;
    }
    socket_close($sock);

    return $answer;
}



/*
 * @param string array of $commands to send to the server.
 * Return: string with the complete reply from the
 *         server. This can be a multiline reply.
 */
function send_array($command)
{
    $sock = open_socket();
    if ($sock == false) {
	return "";
    }

    foreach($command as $cmd) {
	socket_write($sock, $cmd . "\r\n", 4096);
    }

    $answer = "";
    while (1) {
	$line = socket_read($sock, 4096);
	if ($line === '')
	    break;
	$answer .= $line;
    }
    socket_close($sock);

    return $answer;
}



/*
 * @param string $command to send to the server.
 * Return: 0 = Ok.
 *         1 = Server responden with an error.
 */
function send_cmd_check($command)
{
    $answer = send_cmd($command);

    if (strlen($answer) && (($answer[0] == '1') || ($answer[0] == '2')))
	return 0;

    return 1;
}



/*
 * @param array $command to send to the server.
 * Return: 0 = Ok.
 *         1 = Server responden with an error.
 */
function send_array_check($command)
{
    $answer = send_array($command);

    if (strlen($answer) && (($answer[0] == '1') || ($answer[0] == '2')))
	return 0;

    return 1;
}



function startsWith($haystack, $needle)
{
    return !strncmp($haystack, $needle, strlen($needle));
}


function build_header($heading)
{
    global	$my_style;

    $answer = send_cmd('GLOBAL GET');
    $arr = explode("\r\n", $answer);
    $version = "?";

    if (startsWith($arr[0], "213")) {
	$j = 1;
	while (1) {
	    if (strcmp($arr[$j], ".") == 0)
		break;
	    $f = explode(",", $arr[$j]);

	    if ($f[0] == "RELEASE")
		$version = $f[1];
	    $j++;
	}
    }

    $outstr  = '<!DOCTYPE html>'.PHP_EOL;
    $outstr .= '<html>'.PHP_EOL;
    $outstr .= ' <head>'.PHP_EOL;
    $outstr .= '  <meta http-equiv="content-type" content="text/html; charset=utf-8" />'.PHP_EOL;
    $outstr .= '  <title>'.$heading.'</title>'.PHP_EOL;
    $outstr .= '  <link type="text/css" href="css/style.css" rel="stylesheet" media="all" />'.PHP_EOL;
    $outstr .= '  <link type="text/css" href="jqwidgets/styles/jqx.base.css" rel="stylesheet" />'.PHP_EOL;
    $outstr .= '  <link type="text/css" href="jqwidgets/styles/jqx.'.$my_style.'.css" rel="stylesheet" />'.PHP_EOL;
    $outstr .= '  <script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>'.PHP_EOL;
    $outstr .= '  <script type="text/javascript" src="jqwidgets/jqxcore.js"></script>'.PHP_EOL;
    $outstr .= '  <script type="text/javascript" src="jqwidgets/jqxwindow.js"></script>'.PHP_EOL;
    $outstr .= '  <script type="text/javascript" src="jqwidgets/jqxbuttons.js"></script>'.PHP_EOL;
    $outstr .= ' </head>'.PHP_EOL;
    $outstr .= ' <body class="default">'.PHP_EOL;
    $outstr .= '  <div id="jqxWidget">'.PHP_EOL;
    $outstr .= '   <div id="header">'.PHP_EOL;
    $outstr .= '    <div id="title">'.PHP_EOL;
    $outstr .= '     ThermFerm '.$version.PHP_EOL;
    $outstr .= '    </div>'.PHP_EOL;
    $outstr .= '    <form action="maintenance.php" style="margin:30px; float:right">'.PHP_EOL;
    $outstr .= '     <input type="submit" id="maintenance" value="Maintenance panel" />'.PHP_EOL;
    $outstr .= '    </form>'.PHP_EOL;
    $outstr .= '   </div> <!-- header -->'.PHP_EOL;
    $outstr .= '   <div id="content">'.PHP_EOL;

    return $outstr;
}



function build_footer()
{
    $outstr  = '   </div> <!-- content -->'.PHP_EOL;
    $outstr .= '  </div> <!-- jqxWidget -->'.PHP_EOL;
    $outstr .= ' </body>'.PHP_EOL;
    $outstr .= '</html>'.PHP_EOL;

    return $outstr;
}



/*
 * Goto URL. Works also after headers have been sent.
 */
function load($url) {
    echo'
    <script>
	if (top.location != self.location) {
	    top.location = "'.$url.'"
	}
	{location.href="'.$url.'";}
    </script>';
}

mercurial