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'] = "
"; } elseif ($class == 0 && $reservation_conflict) { $response['message'] = "
"; } 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'] = "
"; } elseif ($class == 0 && $reservation_conflict) { $response['message'] = "
"; } return $response; } ?> load_user()"; test_queue($link); ?>
Datei drucken

',':',';','?','*','"','|','%']; $filetype = strtolower(pathinfo($_FILES['file_upload']['name'],PATHINFO_EXTENSION)); $path = "/var/www/html/user_files/$username/"; $print_on=$_POST["queue_printer"]; $filename=basename( $_FILES['file_upload']['name']); $filename=str_replace($unwanted_chr,"_",$filename); $path = $path . $filename; if(!in_array($filetype,$ok_ft)) { echo("
"); $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("
"); $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("
"); } } unset($_FILES['file']); } if(isset($_GET["cloudprint"])){ $print_on=$_POST["queue_printer"]; if(!isset($_GET["pc"])) $path = "/var/www/html/user_files/$username/".$_GET["cloudprint"]; else $path = "/var/www/html/user_files/public/".$_GET["cloudprint"]; $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("
"); sys0_log("user ".$_SESSION["username"]." uploaded ".basename($path)." to the queue",$_SESSION["username"],"PRINT::UPLOAD::QUEUE"); } } else //print on printers, no queue { $sql="select printer_url, free, system_status,apikey,printer_url from printer where id=$printer_id"; //echo $sql; $stmt = mysqli_prepare($link, $sql); mysqli_stmt_execute($stmt); mysqli_stmt_store_result($stmt); mysqli_stmt_bind_result($stmt, $url,$free,$status,$apikey,$printer_url); mysqli_stmt_fetch($stmt); if($free!=1 or $status!=0) { echo("
"); sys0_log("Could not start job for ".$_SESSION["username"]." with file ".basename($path)."",$_SESSION["username"],"PRINT::JOB::START::FAILED");//notes,username,type exit; } if(!empty($_FILES['file_upload'])) { $ok_ft=array("gcode",""); $unwanted_chr=[' ','(',')','/','\\','<','>',':',';','?','*','"','|','%']; $filetype = strtolower(pathinfo($_FILES['file_upload']['name'],PATHINFO_EXTENSION)); $path = "/var/www/html/user_files/$username/"; $filename=basename( $_FILES['file_upload']['name']); $filename=str_replace($unwanted_chr,"_",$filename); $path = $path . $filename; //if(in_array($filetype,$unwanted_ft)) if(!in_array($filetype,$ok_ft)) { echo("
"); 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("
"); //echo("
"); $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("
"); 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("
"); 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("
"); } }else{ $warning=true; echo("
"); } }else{ echo "
"; } } else { echo("
"); } } else{ echo("
"); } } 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("
"); $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("
"); 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("
"); 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("
"); } }else{ $warning=true; echo("
"); } }else{ echo "
"; } } else{ echo("
"); } } } } ?>

Datei drucken

'); echo('
'); echo(''); echo(' '); echo('
'); echo('
'); } else{ echo ('
'); echo('
'); echo("

Cloudfile: ".$_GET["cloudprint"]."

"); echo('
'); echo('
'); } ?>

'); echo(''); echo(''); echo('
'); } ?>

"); echo("
"); } ?> '); echo('
'); echo(''); echo(''); echo('
'); }else{ echo "
"; } ?> Nur freie Drucker anzeigen.'); }else{ echo('
Auf einem Drucker Drucken, welcher besetzt ist.
'); } } ?>