75 or $ex_temp>225){
return 0;
}else{
return 1;
}
}
function find_print_time($file) {
$handle = fopen($file, "r");
$targetPhrase = "; estimated printing time (normal mode) = ";
$time = null;
while (($line = fgets($handle)) !== false) {
if (strpos($line, $targetPhrase) !== false) {
// Extract the time after the target phrase
$time = trim(str_replace($targetPhrase, "", $line));
break; // Stop once the desired line is found
}
}
fclose($handle);
return $time;
}
function check_reservation_conflict($link, $class) {
$reservation_conflict = false;
$today = date("Y-m-d");
$time_now = date("H:i");
$for_class = [];
// Query for reservations that start today or extend into today
$sql = "
SELECT day, time_from, time_to, for_class
FROM reservations
WHERE day <= '$today' AND
(day = '$today' AND time_from <= '$time_now' OR day < '$today');
";
$stmt = $link->prepare($sql);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// Calculate the actual end time of the reservation
$reservation_end = strtotime($row["day"] . " " . $row["time_to"]);
$current_time = strtotime("$today $time_now");
if ($current_time <= $reservation_end) {
$reservation_conflict = true;
$for_class[] = $row["for_class"];
}
}
// Default value for for_class if no conflicts are found
if (empty($for_class)) {
$for_class[] = 0;
}
// Determine the appropriate response based on the conflict status
$response = ['conflict' => $reservation_conflict, 'block' => false, 'message' => ''];
if ($reservation_conflict && !in_array($class, $for_class) && $class != 0) {
$response['block'] = true;
$response['message'] = "
Die Drucker sind zurzeit reserviert! Bitte versuche es später erneut!
Die Drucker sind zurzeit reserviert!
Als Lehrperson können Sie zwar jetzt trotzdem drucken, sollten es aber nur tun,
wenn Sie sicher sind, dass nicht gerade eine andere Lehrperson mit einer Klasse drucken will!
";
}
return $response;
}
function check_print_reservation_conflict($link, $class, $path) {
$reservation_conflict = false;
$for_class = [];
$today = date("Y-m-d");
$time_now = date("H:i");
// Calculate the end time of the print
$print_time = find_print_time($path); // Assume this function is already defined
preg_match('/(\d+)h/', $print_time, $hours_match);
preg_match('/(\d+)m/', $print_time, $minutes_match);
$hours = isset($hours_match[1]) ? (int)$hours_match[1] : 0;
$minutes = isset($minutes_match[1]) ? (int)$minutes_match[1] : 0;
//echo("uses ".$minutes." Minutes and ".$hours." hours");
$start_time = DateTime::createFromFormat('H:i', $time_now);
$end_time = clone $start_time;
$end_time->modify("+{$hours} hour");
$end_time->modify("+{$minutes} minutes");
// Query to get all relevant reservations (today and future overlaps)
$sql = "
SELECT day, time_from, time_to, for_class
FROM reservations
WHERE day >= '$today';
";
$stmt = $link->prepare($sql);
$stmt->execute();
$result = $stmt->get_result();
// Check for conflicts with reservations
while ($row = $result->fetch_assoc()) {
$reservation_start = DateTime::createFromFormat('Y-m-d H:i', $row["day"] . ' ' . $row["time_from"]);
$reservation_end = DateTime::createFromFormat('Y-m-d H:i', $row["day"] . ' ' . $row["time_to"]);
// Adjust reservation end time for multi-day overlaps
if ($reservation_end < $reservation_start) {
$reservation_end->modify('+1 day');
}
// Check if the print overlaps with any reservation period
if ($start_time < $reservation_end && $end_time > $reservation_start) {
$reservation_conflict = true;
$for_class[] = $row["for_class"];
}
}
// Default value for for_class if no conflicts are found
if (empty($for_class)) {
$for_class[] = 0;
}
// Build response based on conflict and user access
$response = ['conflict' => $reservation_conflict, 'block' => false, 'message' => ''];
if ($reservation_conflict && !in_array($class, $for_class) && $class != 0) {
$response['block'] = true;
$response['message'] = "
Die Drucker sind zurzeit reserviert! Bitte versuche es später erneut!
Die Drucker sind zurzeit reserviert!
Als Lehrperson können Sie zwar jetzt trotzdem drucken, sollten es aber nur tun,
wenn Sie sicher sind, dass nicht gerade eine andere Lehrperson mit einer Klasse drucken will!
");
$global_err="Dieser Dateityp wird nicht unterstüzt.";
sys0_log("Could not upload file for ".$_SESSION["username"]." because of unknown file extension",$_SESSION["username"],"PRINT::UPLOAD::FILE::FAILED");//notes,username,type
}
else
{
if(move_uploaded_file($_FILES['file_upload']['tmp_name'], $path)) {
$sql="INSERT INTO queue (from_userid,filepath,print_on) VALUES (?,?,?)";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_bind_param($stmt, "isi", $userid,$path,$print_on);
mysqli_stmt_execute($stmt);
echo("
Datei ". basename( $_FILES['file_upload']['name']). " wurde hochgeladen und an die Warteschlange gesendet
");
$global_success="Datei ". basename( $_FILES['file_upload']['name']). " wurde hochgeladen und an die Warteschlange gesendet";
sys0_log("user ".$_SESSION["username"]." uploaded ".basename($path)." to the queue",$_SESSION["username"],"PRINT::UPLOAD::QUEUE");//notes,username,type
}
else
{
echo("
Datei ". basename( $_FILES['file_upload']['name']). " konnte hochgeladen werden
");
sys0_log("Could not upload file for ".$_SESSION["username"]." because of unknown file extension",$_SESSION["username"],"PRINT::UPLOAD::FILE::FAILED");//notes,username,type
}
else
{
//check if print key is valid:
$print_key=htmlspecialchars($_POST["print_key"]);
$sql="SELECT id from print_key where print_key='$print_key'";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
//if(mysqli_stmt_num_rows($stmt) == 1){ turned off because user does not need to have a printer key
if(true){
mysqli_stmt_close($stmt);
if(move_uploaded_file($_FILES['file_upload']['tmp_name'], $path)) {
//echo("
Erfolg! Die Datei ". basename( $_FILES['file_upload']['name']). " wurde hochgeladen.
");
//echo("
Datei wird an den 3D-Drucker gesendet...
");
$response=check_print_reservation_conflict($link,$_SESSION["class_id"],$path);
$block=$response['block'];
if($block==false){
if(check_file($path) or isset($_POST["ignore_unsafe"])){
exec('curl -k -H "X-Api-Key: '.$apikey.'" -F "select=true" -F "print=true" -F "file=@'.$path.'" "'.$printer_url.'/api/files/local" > /var/www/html/user_files/'.$username.'/json.json');
//file is on printer and ready to be printed
$userid=$_SESSION["id"];
// echo("
Datei gesendet und Auftrag wurde gestartet.
");
sys0_log("user ".$_SESSION["username"]." uploaded ".basename($path)." to printer ".$_POST["printer"]."",$_SESSION["username"],"PRINT::UPLOAD::PRINTER");//notes,username,type
$fg=file_get_contents("/var/www/html/user_files/$username/json.json");
$json=json_decode($fg,true);
if($json['effectivePrint']==false or $json["effectiveSelect"]==false)
{
echo("
Ein Fehler ist aufgetreten und der Vorgang konnte nicht gestartet werden. Warte einen Moment und versuche es dann erneut.
");
sys0_log("Could not start job for ".$_SESSION["username"]."with file ".basename($path)."",$_SESSION["username"],"PRINT::JOB::START::FAILED");//notes,username,type
}
else
{
$sql="update printer set free=0, printing=1,mail_sent=0, used_by_userid=$userid where id=$printer_id";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_execute($stmt);
//delete printer key:
$sql="DELETE from print_key where print_key='$print_key'";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
echo("
Datei gesendet und der Auftrag wurde gestartet.
");
}
}else{
$warning=true;
echo("
Achtung, deine Bett oder Extruder Temperatur ist sehr hoch eingestellt. Dies wird zur zerstörung des Druckes und somit zu Müll führen. Bitte setze diese Temperaturen tiefer in den Einstellungen deines Slicers.
");
}
}else{
echo "
Dein Druck konnte nicht gestartet werden, da er nicht fertig wäre, befor eine andere Klasse die Drucker reserviert hat.
";
}
}
else
{
echo("
Ein Fehler beim Uploaden der Datei ist aufgetreten! Versuche es erneut!
");
}
}
else{
echo("
Der Druckschlüssel ist nicht gültig. Evtl. wurde er bereits benutzt. Versuche es erneut!
");
}
}
unset($_FILES['file']);
}
if(isset($_GET["cloudprint"])){
if(!isset($_GET["pc"]))
$path = "/var/www/html/user_files/$username/".$_GET["cloudprint"];
else
$path = "/var/www/html/user_files/public/".$_GET["cloudprint"];
//check if print key is valid:
$print_key=htmlspecialchars($_POST["print_key"]);
$sql="SELECT id from print_key where print_key='$print_key'";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
//if(mysqli_stmt_num_rows($stmt) == 1){ turned off because user does not need to have a printer key
if(true){
mysqli_stmt_close($stmt);
//echo("
Datei wird an den 3D-Drucker gesendet...
");
$response=check_print_reservation_conflict($link,$_SESSION["class_id"],$path);
$block=$response['block'];
if($block==false){
if(check_file($path) or isset($_POST["ignore_unsafe"])){
exec('curl -k -H "X-Api-Key: '.$apikey.'" -F "select=true" -F "print=true" -F "file=@'.$path.'" "'.$printer_url.'/api/files/local" > /var/www/html/user_files/'.$username.'/json.json');
//file is on printer and ready to be printed
$userid=$_SESSION["id"];
//echo("
Datei gesendet und Auftrag wurde gestartet.
");
sys0_log("user ".$_SESSION["username"]." uploaded ".basename($path)." to printer ".$_POST["printer"]."",$_SESSION["username"],"PRINT::UPLOAD::PRINTER");//notes,username,type
$fg=file_get_contents("/var/www/html/user_files/$username/json.json");
$json=json_decode($fg,true);
if($json['effectivePrint']==false or $json["effectiveSelect"]==false)
{
echo("
Ein Fehler ist aufgetreten und der Vorgang konnte nicht gestartet werden. Warte einen Moment und versuche es dann erneut.
");
sys0_log("Could not start job for ".$_SESSION["username"]."with file ".basename($path)."",$_SESSION["username"],"PRINT::JOB::START::FAILED");//notes,username,type
}
else
{
$sql="update printer set free=0, printing=1,mail_sent=0, used_by_userid=$userid where id=$printer_id";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_execute($stmt);
//delete printer key:
$sql="DELETE from print_key where print_key='$print_key'";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
echo("
Datei gesendet und Auftrag wurde gestartet.
");
}
}else{
$warning=true;
echo("
Achtung, deinen Bett oder Extruder Temperatur ist sehr hoch eingestellt. Dies wird zur zerstörung des Druckes und somit zu Müll führen. Bitte setze diese Temperaturen tiefer in den Einstellungen deines Slicers.
");
}
}else{
echo "
Dein Druck konnte nicht gestartet werden, da er nicht fertig wäre, befor eine andere Klasse die Drucker reserviert hat.
";
}
}
else{
echo("
Der Druckschlüssel ist nicht gültig. Evtl. wurde er bereits benutzt. Versuche es erneut!
");
}
}
}
}
?>
Datei drucken
');
}
else{
echo ('
');
echo('
');
echo("
Cloudfile: ".$_GET["cloudprint"]."
");
echo('
');
echo('
');
}
?>
');
echo('');
echo('');
echo('
');
}
?>
");
echo(" ");
}
?>
');
echo('
');
echo('Hochladen...');
echo('');
echo('
');
}else{
echo "
Die Drucker sind zurzeit reserviert! Bitte versuche es später erneut!