From 4cca7af07e659922c6267c06b604118e7043c1e3 Mon Sep 17 00:00:00 2001 From: Julien Chavant Date: Mon, 11 May 2026 10:56:26 +0200 Subject: [PATCH] Add function and link for revise questionnaires with reload precedently response in session --- .gitignore | 2 + admin/listforms.php | 28 ++++++-- functions/functions.database.php | 107 +++++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+), 6 deletions(-) create mode 100644 .gitignore mode change 100755 => 100644 admin/listforms.php mode change 100755 => 100644 functions/functions.database.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3228387 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +.venv diff --git a/admin/listforms.php b/admin/listforms.php old mode 100755 new mode 100644 index 906648f..8be3e6f --- a/admin/listforms.php +++ b/admin/listforms.php @@ -32,6 +32,11 @@ { $fid = intval($_GET['fid']); $vid = intval($_GET['vid']); + + if (isset($_GET['revise'])) { + $vid = get_vid(); + reload_session_from_database($fid, $vid); + } $db->StartTrans(); @@ -47,13 +52,24 @@ $db->Execute($sql); - $sql = "UPDATE forms - SET assigned_vid = NULL, done = 0, rpc_id = NULL, assigned = NULL, completed = NULL - WHERE fid = '$fid'"; + if (isset($_GET['revise'])) { + $sql = "UPDATE forms + SET assigned_vid = '$vid', done = 0 + WHERE fid = '$fid'"; + } else { + $sql = "UPDATE forms + SET assigned_vid = NULL, done = 0, rpc_id = NULL, assigned = NULL, completed = NULL + WHERE fid = '$fid'"; + } $db->Execute($sql); - $db->CompleteTrans(); + $db->CompleteTrans(); + + if (isset($_GET['revise'])) { + header("Location: ../verifyjs.php?fid=" . $fid); + exit; + } } xhtml_head(T_("Listing of forms"),true,array("../css/table.css")); @@ -63,7 +79,7 @@ { $qid = intval($_GET['qid']); - $sql = "SELECT f.fid, v.description as name, q.description as quest, CONCAT('" . T_("Re verify") . "') as link + $sql = "SELECT f.fid, v.description as name, q.description as quest, CONCAT('" . T_("Re verify") . "') as link, CONCAT('" . T_("Revise") . "') as linkrevise FROM forms as f JOIN questionnaires AS q ON (f.qid = q.qid AND q.qid = '$qid') LEFT JOIN verifiers AS v ON (v.vid = f.assigned_vid) @@ -74,7 +90,7 @@ print "
" . T_("Go back") . ""; - xhtml_table($fs,array('fid','name','quest','link'),array(T_('Form ID'),T_('Operator'),T_('Questionnaire'),T_('Re verify'))); + xhtml_table($fs,array('fid','name','quest','link','linkrevise'),array(T_('Form ID'),T_('Operator'),T_('Questionnaire'),T_('Re verify'),T_('Revise'))); } else { diff --git a/functions/functions.database.php b/functions/functions.database.php old mode 100755 new mode 100644 index 12fa890..d08ce1d --- a/functions/functions.database.php +++ b/functions/functions.database.php @@ -362,6 +362,113 @@ function get_qid_description($fid) return $rs; } +function reload_session_from_database($fid, $vid, $reviewMode = false) +{ + session_reset(); + session_start(); + global $db; + + $fid = intval($fid); + $vid = intval($vid); + $qid_desc = get_qid_description($fid); + if (empty($qid_desc)) { + return false; + } + $qid = intval($qid_desc['qid']); + + /* + * En mode review, on relit les dernières valeurs vérifiées. + * Ici on prend en priorité la valeur du vérificateur courant, + * sinon une valeur existante pour ce formulaire. + */ + $sql = "SELECT b.bid as bid, + b.tlx as tlx, + b.tly as tly, + b.brx as brx, + b.bry as bry, + b.pid as pid, + bg.btid as btid, + b.bgid as bgid, + $fid as fid, + bg.sortorder as sortorder, + fb.filled, + CASE + WHEN d.fid IS NOT NULL THEN d.val + WHEN c.fid IS NOT NULL THEN c.val + ELSE NULL + END as val + FROM boxes AS b + JOIN boxgroupstype as bg ON (bg.bgid = b.bgid AND bg.btid > 0) + JOIN pages as p ON (p.pid = b.pid AND p.qid = '$qid') + LEFT JOIN formboxes as fb ON (fb.bid = b.bid AND fb.fid = '$fid') + LEFT JOIN formboxverifychar AS c ON ( + c.fid = '$fid' + AND c.bid = b.bid + AND c.vid = ( + SELECT c2.vid + FROM formboxverifychar c2 + WHERE c2.fid = '$fid' + AND c2.bid = b.bid + ORDER BY c2.fbvcid DESC + LIMIT 1 + ) + ) + LEFT JOIN formboxverifytext AS d ON ( + d.fid = '$fid' + AND d.bid = b.bid + AND d.vid = ( + SELECT d2.vid + FROM formboxverifytext d2 + WHERE d2.fid = '$fid' + AND d2.bid = b.bid + ORDER BY d2.fbvtid DESC + LIMIT 1 + ) + ) + ORDER BY bg.sortorder ASC"; + + $sql2 = "SELECT b.bgid, + " . ($reviewMode ? "0" : "0") . " as done, + MIN(b.pid) as pid, + bg.varname, + bg.btid + FROM boxes as b, boxgroupstype as bg, pages as p + WHERE p.pid = b.pid + AND bg.bgid = b.bgid + AND p.qid = '$qid' + AND bg.btid > 0 + GROUP BY bg.bgid + ORDER BY bg.sortorder ASC"; + + $sql3 = "SELECT b.pid, + MIN(b.bgid) as bgid, + 0 as done, + fp.width, + fp.height, + fp.fid + FROM boxes as b + JOIN pages as p ON (p.qid = '$qid' AND b.pid = p.pid) + JOIN boxgroupstype as bg ON (bg.bgid = b.bgid) + LEFT JOIN formpages as fp ON (fp.fid = '$fid' AND fp.pid = p.pid) + GROUP BY b.pid + ORDER BY MIN(bg.sortorder) ASC"; + + $boxes = $db->GetAssoc($sql); + $boxgroups = $db->GetAssoc($sql2); + $pages = $db->GetAssoc($sql3); + + if (empty($boxes)) { + return false; + } + + $_SESSION['boxes'] = $boxes; + $_SESSION['boxgroups'] = $boxgroups; + $_SESSION['pages'] = $pages; + $_SESSION['assigned'] = time(); + $_SESSION['review_mode'] = $reviewMode ? 1 : 0; + + return true; +} ?>