diff --git a/sys0-code/app/print.php b/sys0-code/app/print.php index ff510c6..9320b03 100644 --- a/sys0-code/app/print.php +++ b/sys0-code/app/print.php @@ -1,710 +1,385 @@ 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 + + + System0 - Print + -

+ + + ',':',';','?','*','"','|','%']; - $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"); - - } + if(isset($_GET["cloudprint"])){ + echo(""); + echo ''; + }else{ + echo(""); } - 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 "
"; + if(isset($_GET["cloudprint"])){ + echo(''); + }else{ + echo(''); + } + ?> +
+ '); } ?> - - - Nur freie Drucker anzeigen.'); - }else{ - echo('
Auf einem Drucker Drucken, welcher besetzt ist.
'); - } - } - ?> - +
+ + +
+ Drucken
+
-
+ + -