diff --git a/sys0-code/app/print.php b/sys0-code/app/print.php index 9edae6e..b442ed6 100644 --- a/sys0-code/app/print.php +++ b/sys0-code/app/print.php @@ -36,6 +36,24 @@ function check_file($path){//check file for temperature which are to high } } +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 is_time_between($startTime, $endTime, $checkTime) { // Convert times to timestamps $startTimestamp = strtotime($startTime); @@ -52,6 +70,22 @@ function is_time_between($startTime, $endTime, $checkTime) { } } +function time_to_seconds($print_time) { + $seconds = 0; + + if (preg_match('/(\d+)h/', $print_time, $matches)) { + $seconds += $matches[1] * 3600; // hours to seconds + } + if (preg_match('/(\d+)m/', $print_time, $matches)) { + $seconds += $matches[1] * 60; // minutes to seconds + } + if (preg_match('/(\d+)s/', $print_time, $matches)) { + $seconds += $matches[1]; // seconds + } + + return $seconds; +} + ?> @@ -167,7 +201,7 @@ function is_time_between($startTime, $endTime, $checkTime) { } } - else + else //print on printers, no queue { $sql="select printer_url, free, system_status,apikey,printer_url from printer where id=$printer_id"; //echo $sql; @@ -214,7 +248,53 @@ function is_time_between($startTime, $endTime, $checkTime) { if(move_uploaded_file($_FILES['file_upload']['tmp_name'], $path)) { echo("
"); echo("
"); - if(check_file($path) or isset($_POST["ignore_unsafe"])){ + $print_time=find_print_time($path); + //check if the printers are reserved at the time when this print finishes + date_default_timezone_set('Europe/Zurich'); + $reservation_conflict = false; + $today = date("Y-m-d"); + $time_now = date("H:i"); + + 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; + + // Convert $now into a DateTime object and add hours and minutes + $time = DateTime::createFromFormat('H:i', $time_now); + $time->modify("+{$hours} hour"); + $time->modify("+{$minutes} minutes"); + + // Format $time back into a string + $time_now = $time->format('H:i'); + + // Query to get reservations for the current day + $sql = "SELECT time_from, time_to, for_class FROM reservations WHERE day='$today';"; + $stmt = $link->prepare($sql); + $stmt->execute(); + $result = $stmt->get_result(); + + while ($row = $result->fetch_assoc()) { + // Check for overlap with the entire print time period + if (is_time_between($row["time_from"], $row["time_to"], $time_now)) { + $reservation_conflict = true; + $for_class[] = $row["for_class"]; + } + } + + // Ensure $for_class is set if no conflicts were found + if (!isset($for_class)) { + $for_class[] = 0; + } + + // Display conflict message if necessary + if ($reservation_conflict && !in_array($class, $for_class) && $class != 0) { + $block = true; + } else { + $block = false; + } + 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"]; @@ -238,9 +318,12 @@ function is_time_between($startTime, $endTime, $checkTime) { mysqli_stmt_execute($stmt); mysqli_stmt_close($stmt); } - }else{ + }else{ $warning=true; echo("
"); + } + }else{ + echo "
"; } } else @@ -265,12 +348,14 @@ function is_time_between($startTime, $endTime, $checkTime) { $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("
"); + $printing_time=find_print_time($path); + 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 @@ -279,9 +364,6 @@ function is_time_between($startTime, $endTime, $checkTime) { 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); - //echo('curl -k -H "X-Api-Key: '.$apikey.'" -F "select=true" -F "print=true" -F "file=@'.$path.'" "'.$printer_url.'/api/files/local" > /var/www/html/system0/html/user_files/'.$username.'/json.json'); - //echo("


"); - //var_dump($json); if($json['effectivePrint']==false or $json["effectiveSelect"]==false) { echo("
");