From ddb49d44de5726073ff70f57b40c0b7e77a499aa Mon Sep 17 00:00:00 2001 From: Janis Steiner Date: Sun, 30 Mar 2025 10:34:53 +0100 Subject: [PATCH] fixing some bugs in uploader --- sys0-code/api/uploader/cloudprint.php | 6 +- sys0-code/api/uploader/image_preview.php | 6 +- sys0-code/app/overview.php | 97 +++++++++++++++--------- sys0-code/app/print.php | 46 ++++++++++- 4 files changed, 114 insertions(+), 41 deletions(-) diff --git a/sys0-code/api/uploader/cloudprint.php b/sys0-code/api/uploader/cloudprint.php index 5b36f93..cd1adb1 100644 --- a/sys0-code/api/uploader/cloudprint.php +++ b/sys0-code/api/uploader/cloudprint.php @@ -6,5 +6,9 @@ } $username=$_SESSION["username"]; $path = "/var/www/html/user_files/$username/"; - $_SESSION["current_file"]=$path.$_GET["file"]; + $public_path = "/var/www/html/user_files/public/"; + if($_GET["pc"]=="1") + $_SESSION["current_file"]=$public_path.$_GET["file"]; + else + $_SESSION["current_file"]=$path.$_GET["file"]; ?> diff --git a/sys0-code/api/uploader/image_preview.php b/sys0-code/api/uploader/image_preview.php index 1d22ad1..2fd3230 100644 --- a/sys0-code/api/uploader/image_preview.php +++ b/sys0-code/api/uploader/image_preview.php @@ -7,8 +7,10 @@ session_start(); exit; } $username=$_SESSION["username"]; -echo(get_base64_preview("/var/www/html/user_files/$username/".$_GET["file"])); - +if($_GET["pc"]=="1") + echo(get_base64_preview("/var/www/html/user_files/public/".$_GET["file"])); +else + echo(get_base64_preview("/var/www/html/user_files/$username/".$_GET["file"])); function get_base64_preview($filename){ $base64=""; $file=fopen($filename,"r"); diff --git a/sys0-code/app/overview.php b/sys0-code/app/overview.php index 71e6d56..b8faf1a 100644 --- a/sys0-code/app/overview.php +++ b/sys0-code/app/overview.php @@ -469,43 +469,68 @@ document.addEventListener('DOMContentLoaded', () => {

Warteschlange

"); - $last_id=0; - $form_userid=0; - $print_on=0; - while($cnt!=0) - { - $sql="select id,filepath,from_userid,print_on from queue where id>$last_id order by id"; - $cancel=0; - $stmt = mysqli_prepare($link, $sql); - echo mysqli_error($link); - mysqli_stmt_execute($stmt); - mysqli_stmt_store_result($stmt); - mysqli_stmt_bind_result($stmt, $queue_id,$filepath,$from_userid,$print_on); - mysqli_stmt_fetch($stmt); - $filepath=basename($filepath); - $last_id=$queue_id; - echo(""); - if($print_on==-1) - echo(""); - else - echo(""); - if($_SESSION["role"][3]==="1" or $_SESSION["id"]==$from_userid) - echo(""); + + $userid = $_SESSION["id"]; + $cnt = 0; + $sql = "SELECT COUNT(*) FROM queue"; - $cnt--; - } - echo("
DateiDrucken auf Druckeraus der Warteschlange entfernen
$filepathErster verfügbarer Drucker$print_on
"); + $stmt = mysqli_prepare($link, $sql); + mysqli_stmt_execute($stmt); + mysqli_stmt_bind_result($stmt, $cnt); + mysqli_stmt_fetch($stmt); + mysqli_stmt_close($stmt); + + $last_id = 0; + + echo "
+ + + + + + + + + + "; + + while ($cnt > 0) { + $sql = "SELECT q.id, q.filepath, q.from_userid, q.print_on, u.username + FROM queue q + JOIN users u ON q.from_userid = u.id + WHERE q.id > ? + ORDER BY q.id LIMIT 1"; + + $stmt = mysqli_prepare($link, $sql); + mysqli_stmt_bind_param($stmt, "i", $last_id); + mysqli_stmt_execute($stmt); + mysqli_stmt_bind_result($stmt, $queue_id, $filepath, $from_userid, $print_on, $from_user); + mysqli_stmt_fetch($stmt); + mysqli_stmt_close($stmt); + + if (!$queue_id) break; // Exit if no more entries + + $filepath = basename($filepath); + $last_id = $queue_id; + + echo " + + + "; + + if ($_SESSION["role"][3] === "1" || $_SESSION["id"] == $from_userid) { + echo ""; + } + echo ""; + + $cnt--; + } + + echo "
DateiDrucken auf DruckerAuftrag vonAus der Warteschlange entfernen
{$filepath}" . ($print_on == -1 ? "Erster verfügbarer Drucker" : htmlspecialchars($print_on)) . "{$from_user} +
+ +
+
"; ?> let cloudprint=1;"); - echo ''; + echo ''; }else{ echo(""); } @@ -96,6 +96,9 @@ if(item.error_status==0){ if(item.free==1){ option.textContent = `Drucker ${item.id} - ${item.color}`; + if(preselectId==null){ + option.selected="true"; + } }else{ option.textContent = `Drucker ${item.id} - ${item.color} - Warteschlange`; } @@ -108,6 +111,44 @@ }) .catch(error => console.error("Error fetching data:", error)); }); + async function reload_printer_selection(){ + document.getElementById("selectOption").innerHTML = ""; + const selectElement = document.getElementById("selectOption"); + const apiUrl = "/api/uploader/fetch_printers.php"; // Replace with your actual API URL + function getUrlParam(name) { + const urlParams = new URLSearchParams(window.location.search); + return urlParams.get(name); + } + + const preselectId = getUrlParam("preselect"); // Get "preselect" value from URL + const option_1 = document.createElement("option"); + option_1.value = "not_set"; + option_1.textContent = "Bitte wähle einen Drucker"; + selectElement.appendChild(option_1); + fetch(apiUrl) + .then(response => response.json()) + .then(data => { + data.forEach(item => { + const option = document.createElement("option"); + option.value = item.id; + if(item.error_status==0){ + if(item.free==1){ + option.textContent = `Drucker ${item.id} - ${item.color}`; + if(preselectId==null){ + option.selected="true"; + } + }else{ + option.textContent = `Drucker ${item.id} - ${item.color} - Warteschlange`; + } + if (item.id == preselectId) { + option.selected = true; + } + selectElement.appendChild(option); + } + }); + }) + .catch(error => console.error("Error fetching data:", error)); + } async function start_upload(use_checks){ document.getElementById("close_progress_modal2").click(); //main function handles the steps from user pressing upload button via checking params to starting job via api @@ -142,7 +183,7 @@ } }else{ //just tell the server what the file is. - await fetch("/api/uploader/cloudprint.php?file="); + await fetch("/api/uploader/cloudprint.php?file=&pc="); } global_error=""; //check if there is a reservation ongoing during this print @@ -208,6 +249,7 @@ return; } show_close_button(); + reload_printer_selection(); } function add_circumvent_link(progressContent) {