remote/index.php

253 lines
7.5 KiB
PHP
Executable File

<?php
// @nom: Index
// @auteurs: Phyks (webmaster@phyks.me) and CCC (contact@cphyc.me)
// @description: Main page
// See humans.txt file for more info
// Copyright (c) 2013 Phyks and CCC
// This software is licensed under the zlib/libpng License.
session_start();
if(!empty($_GET['quit'])) //If we want to go back to the presentation choice form
{
session_destroy();// Destroy the session
header('location: index.php'); //Reload the page
}
if(!empty($_POST['window'])) //If we chose a specific window, let's save it !
{
$_SESSION['window'] = (int) $_POST['window'];
header('location: index.php');
}
//------ Browser specific code ---------
//Some code to detec iPhone and put adequate tags
$browser = '';
if (strpos($_SERVER['HTTP_USER_AGENT'],"iPhone")) //Detect whether browser is Safari Mobile or not (to add correct tags)
$browser = 'iphone';
//--------------------------------------
//------ Orders ---------
//If an order is given (left or right), we execute it and then redirect to this page without arguments in $_GET
if(!empty($_GET['left']))
{
shell_exec('./remote.sh Left '.$_SESSION['window']);
usleep(2000000);
header('location:index.php');
exit;
}
elseif(!empty($_GET['right']))
{
shell_exec('./remote.sh Right '.$_SESSION['window']);
usleep(2000000);
header('location:index.php');
exit;
}
//--------------------------------------
////----------- Get the background image ----------------
if(is_file("tmp/tmp.png")) //Delete the old background file if needed
{
unlink("tmp/tmp.png");
}
//First, we get the ids of all the windows with a title containing ".pdf" (e.g. Evince used to read a pdf document) OR of the window we specified by the $_SESSION var
if(!empty($_SESSION['window']))
{
$ids = (int) $_SESSION['window'];
if(!empty($_POST['command'])) //If custom command passed
{
$command = str_replace('$window', $ids, $_POST['command']);
if(strpos($command, '--verbose') !== FALSE)
{
$command = substr($command, 0, strpos($command, '--verbose'));
$output = shell_exec($command);
}
else
{
shell_exec($command);
header('location: index.php');
exit;
}
}
}
else
{
$ids = shell_exec("export DISPLAY=:0 && xdotool search --name --desktop 0 \"\"");
}
$ids = array_filter(explode("\n", $ids)); //Get the ids in array form and delete empty entries
if(count($ids) == 1) //If there's only one window which is ok -> easy :)
{
$ids = (int) $ids[0]; //We force ids to be int
shell_exec("export DISPLAY=:0 && import -window ".$ids." tmp/tmp.png"); //We take a screenshot for the background
$titre = shell_exec("export DISPLAY=:0 && xdotool getwindowname ".$ids); //Get the whole name to forge the title of this page
}
elseif(count($ids) > 1) //If there are more than one window with "pdf" in the title, display a form to choose which one you want
{
$form_content = '';
$i = 1;
$checked = '';
foreach($ids as $id)
{
$name = shell_exec("export DISPLAY=:0 && xdotool getwindowname ".$id);
if($i == 1)
{
$checked = 'checked';
$i = 2;
}
$form_content .= "<input type='radio' name='window' value='".$id."' id='".$id."' ".$checked."/><label for='".$id."'>".$name."</label><br/>"; //Fill a variable containing the radio fields
$checked = '';
}
}
//If $ids == NULL -> no window ok -> Just display an error and put a correct title
?>
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title><?php
if(!empty($titre)) echo $titre; elseif(!empty($form_content)) echo "Remote Presentation"; else echo "Error - Remote Presentation"; ?></title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="swipe.js"></script>
<script type="text/javascript">
function reset_commandline()
{
var commandline = document.getElementById('commandline').elements['command'];
commandline.onclick = function ()
{
if(commandline.value == commandline.defaultValue)
{
commandline.value = '';
}
};
commandline.onblur = function()
{
if(commandline.value == '')
{
commandline.value = commandline.defaultValue;
}
};
}
if(document.getElementById && document.createTextNode)
{
window.onload = function()
{
reset_commandline();
};
}
</script>
<link rel="stylesheet" type="text/css" href="base.css" />
<link rel="stylesheet" type="text/css" href="design.css" />
<link rel="author" href="humans.txt" />
<?php if(!empty($_SESSION['window'])) { ?>
<meta http-equiv="Refresh" content="10; url=index.php" /> <!-- Redirection toutes les 30 secondes pour actualiser l'affichage -->
<?php }?>
<?php if($browser == 'iphone'){ ?>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, user-scalable=no" />
<link rel="apple-touch-icon" href="iphone.png" />
<script type="text/javascript">
$(document).ready(function() {
window.scrollTo(0, 1);
$("a").click(function (event) {
if ( (navigator.standalone)
&&
((navigator.userAgent.indexOf("iPhone") > -1) || (navigator.userAgent.indexOf("iPad") > -1))
) {
//Prevent iOs from quitting the fullscreen mode when opening a link
event.preventDefault();
window.location = $(this).attr("href");
}
});
});
</script>
<?php } ?>
</head>
<body>
<?php
if(!empty($output))
{
echo '<div id="output"><pre>'.$output.'</pre><p><a href="index.php">Go back</a></p></div></body></html>';
exit;
}
if(is_file('tmp/tmp.png')) //Protection against the "img not found" little frame
{
?>
<p id="background"" ontouchstart="touchStart(event,'background');" ontouchend="touchEnd(event); if(swipeDirection == 'left') { window.location='?right=1'; } if(swipeDirection == 'right') { window.location='?left=1'; }" ontouchmove="touchMove(event);" ontouchcancel="touchCancel(event);"><img src="tmp/tmp.png"/></p>
<?php
}
else //Display an error if we don't display the form
{
if(empty($form_content))
{
?>
<div id='error'>
<p>An error occured. Screenshot is not available.</p>
<p>Have you opened the selected presentation viewer ?</p>
</div>
<?php
}
}
if(!empty($titre)) //Else, display the commands
{
?>
<div id="left">
<p>
<a href='?left=1'><img src='left.png' alt='Gauche' style='width: 50px;'/></a>
</p>
</div>
<div id="right">
<p>
<a href='?right=1'><img src='right.png' alt='Droite' style='width: 50px;'/></a>
</p>
</div>
<?php
}
if(!empty($form_content)) { //If needed, display the form ?>
<form method="post" action="index.php" id="background">
<p>
<span class="underline">Window to work with ?</span>
</p>
<p>
<?php echo $form_content; ?>
</p>
<p>
<input type='submit' value='↳'/>
</p>
</form>
<?php }
if(!empty($_SESSION['window'])) //And if $_SESSION is set, display a link to go back to the window choice
{
?>
<form method="post" action="index.php" id="commandline">
<p>
<input type="text" name="command" value="Custom command" size="12"/>
<input type="submit" id="submit" value="↵"/>
</p>
</form>
<p id="quit"><a href="?quit=1">Go back to form</a></p>
<p id="refresh"><a href="index.php">↺</a></p>
<?php
}
?>
</body>
</html>