$_cdir = __DIR__;
$configPath = substr(__DIR__, 0, strpos(__DIR__, "/public_html")) . "/config.php";
include_once($configPath);
if (empty($_SESSION["utente"]) || !$_SESSION["utente"]->permission($radice) || empty($_GET["form"])) {
die("");
}
include_once "{$_cdir}/class/TedEsender.class.php";
$settings = TedEsender::getSettings();
// Se l'utente sta indicando modulo e codice elemento esplicitamente
// - In realtà vengono linkati da altri moduli, per poi essere settati
$modulo = purify($_GET["modulo"] ?? ""); // Modulo collegato (gara/pcp/appalto)
$codice_elemento = intval(purify($_GET["codice_elemento"] ?? "")); // elemento del modulo collegato
if (!empty($modulo) && !empty($codice_elemento)) {
// Verifichiamo che il modulo esista e sia compatibile
$modulo_collegato = TedEsender::moduliCollegati()[$_GET["modulo"]] ?? null;
// Verifichiamo il permesso
if ($modulo_collegato && $_SESSION["utente"]->permission($modulo, $codice_elemento)) {
// Pass
} else {
die("");
}
}
// Codice del form
$codice = 0;
// Sottosezione attuale
$subsection_index = 0;
if (!empty($_GET["codice"]) && is_numeric($_GET["codice"])) {
$codice = $_GET["codice"];
}
if (!empty($_GET["subsection_index"]) && is_numeric($_GET["subsection_index"])) {
$subsection_index = $_GET["subsection_index"];
}
// ID del form
$notice = purify($_GET["form"]);
// Verifica versione (codice legacy)
if (TedEsender::getVersion($codice) == "eSender") {
if (strpos($notice, ".xsd") === false) {
$notice .= ".xsd";
}
}
// Verifica che il form esista
if (!in_array($notice, array_keys($settings["forms"]))) {
die("");
}
// istanziamo TED
$ted = new TedEsender($notice, $codice, $settings, "{$_cdir}/config/xml");
$ted->setMode("edit");
// Codice lotto
$lotto_riferimento = $ted->info["lotto_riferimento"];
if (empty($lotto_riferimento) && !empty($_GET["codice_lotto"]) && is_numeric($_GET["codice_lotto"])) {
$lotto_riferimento = $_GET["codice_lotto"];
$ted->info["lotto_riferimento"] = $lotto_riferimento;
}
// Aggiorniamo se necessario il collegamento
if (!empty($modulo) && !empty($codice_elemento)) {
$ted->info["modulo"] = $modulo;
$ted->info["codice_elemento"] = $codice_elemento;
} else {
$modulo = $ted->info["modulo"] ?? null;
$codice_elemento = $ted->info["codice_elemento"] ?? null;
if (
empty($ted->info["codice"]) &&
!empty($_GET["codice_ente"]) &&
in_array($_GET["codice_ente"], array_column($_SESSION["utente"]->getEntiBeneficiari(false), "codice"))
) {
$ted->info["codice_ente"] = (int) $_GET["codice_ente"];
}
}
$ted->debug = DEVELOP_ENV;
// Verifichiamo che il form non sia cancellato
if (($ted->info["soft_delete"] ?? "N") == "S") {
die("");
}
// Se abbiamo un modulo associato
if (!empty($modulo) && !empty($codice_elemento)) {
$breadcrumb = [];
$breadcrumb["/{$modulo}"] = Modulo::getInfo($modulo)["titolo"];
$breadcrumb["/{$modulo}/panel.php?codice={$codice_elemento}"] = __("Pannello");
$breadcrumb["/{$modulo}/guue/index.php?codice={$codice_elemento}"] = __("GUUE");
$breadcrumb[""] = "Form " . $ted->info["form"];
} else {
$breadcrumb = [];
$breadcrumb["/{$radice}/"] = Modulo::getInfo($radice)["titolo"];
//$breadcrumb = $ted->getBreadcrumb($breadcrumb);
$breadcrumb[""] = "Form " . $ted->info["form"];
}
$required_css[] = "/src/css/extra/files.css";
$required_js[] = "/src/js/extra/files.js";
include_once "{$beRoot}/layout/top.php";
if ($ted->version == "eSender") {
?>
= __('Attenzione') ?>
= __('L\'avviso richiesto è stato scritto utilizzando una versione attualmente in disuso del modulo GUUE, si è pregati di tornare alla pagina precedente e creare un nuovo avviso.') ?>
include_once "{$beRoot}/layout/bottom.php";
die();
}
//include_once "../npa/inc/components/suggestions.php";
$ted->manageChangeSection();
// Ottieniamo la sezione desiderata
$current_section = $_GET["section"] ?? null;
$sections = $ted->getReorderedSections();
$first_section = $sections[0]["name"];
// Verifichiamo con una regex che sia valida
if ($current_section && preg_match("/GR-([A-Za-z0-9-_])+/i", $_GET["section"]) !== 1) {
$current_section = null;
$_GET["section"] = null;
}
// Se non è valida, peschiamo la prima sezione
if ($current_section == null) {
$current_section = $first_section;
$current_query = [];
parse_str($_SERVER['QUERY_STRING'], $current_query);
$current_query["section"] = $first_section;
$url = "/backend/guue/edit.php?" . http_build_query($current_query);
die("");
}
// Otteniamo un array inverso
// "GR-Lot" => 0
$section_indicies_by_name = array_flip(array_column($sections, "name"));
// Otteniamo l'indice numerico della sezione attuale
$section_index = $section_indicies_by_name[$current_section] ?? null;
// Abbiamo una sottosezione valida?
$valid_section = true;
// Utile per gestire la sezione non trovata
$first_section_name = $ted->translate($sections[0]["_label"] ?? "");
// Sezione non trovata
if ($section_index === null) {
$valid_section = false;
$section_name = $_GET["section"];
} else {
// Otteniamo i nomi
$section_name = $ted->translate($sections[$section_index]["_label"] ?? "");
// Otteniamo le sezioni ripetibili e le ripetizioni attuali
$section_repetitions_by_name = $ted->getRepeatableSections();
// Ripetizioni via indice numerico
$sections_repetitions_by_index = [];
foreach ($section_repetitions_by_name as $key => $value) {
$index = $section_indicies_by_name[$key] ?? null;
if ($index !== null) {
$sections_repetitions_by_index[$index] = $value["value"];
}
}
// Otteniamo l'indice di sottosezione richiesto dall'utente
$subsection_index = $_GET["subsection_index"] ?? null;
if (!is_numeric($subsection_index)) {
$subsection_index = 0;
}
// Logica:
// Se è ripetibile, ottiene le ripetizioni attuali della sezione da 0 a X
// Se non è ripetibile, ottiene null
$current_section_repetitions = empty($section_repetitions_by_name[$current_section]) ? null : $section_repetitions_by_name[$current_section]["value"];
// Se non è ripetibile, solo 0 è accettabile
if ($current_section_repetitions == null) {
if ($subsection_index != 0) {
$valid_section = false;
}
// Se è ripetibile, è accettabile solo un indice presente (0 non è accettabile se abbiamo 0 ripetizioni)
} else {
if ($subsection_index >= $current_section_repetitions) {
if ($current_section_repetitions > 0) {
// Facciamo fallback sull'ultima disponibile
$subsection_index = $current_section_repetitions - 1;
} else {
$valid_section = false;
}
}
}
}
// Sanitizziamo i parametri per uso successivo
$_GET["subsection_index"] = $subsection_index;
$_GET["section"] = $current_section;
// Calcoliamoci Previous e Next
$previous = [];
// Se non siamo nella prima sezione
if ($section_index > 0) {
// Verifichiamo di essere in una ripetizione
if ($subsection_index > 0) {
// Passiamo semplicemente all'index di sottosezione precedente
$previous["name"] = $sections[$section_index]["name"];
$previous["index"] = $subsection_index - 1;
}
// Non siamo in una ripetizione o siamo all'indice 0 di una ripetizione, ergo cambiamo sezione
else {
// Prendiamo la sezione precedente
$previous_index = $section_index - 1;
$previous_subsection_index = 0;
do {
// Verifichiamo che la sezione precedente non sia ripetibile
if (!isset($sections_repetitions_by_index[$previous_index])) {
// In quel caso possiamo navigarci senza problema all'indice 0
$previous_subsection_index = 0;
break;
}
// Verifichiamo che ci sia almeno una ripetizione
if ($sections_repetitions_by_index[$previous_index] == 0) {
// Se non ci sono ripetizioni, la sezione non è transitabile
if (--$previous_index < 0) {
// Se abbiamo esaurito le opzioni, muoriamo male
break;
}
// Continuiamo con quella precedente
continue;
}
// Transitiamo sull'ultima ripetizione disponibile
$previous_subsection_index = $sections_repetitions_by_index[$previous_index] - 1;
break;
} while (true);
// Abbiamo trovato qualcosa, popoliamo previous
if ($previous_index >= 0) {
$previous["name"] = $sections[$previous_index]["name"];
$previous["index"] = $previous_subsection_index;
}
}
}
$next = [];
// Verifichiamo di essere in una non ripetizione o nell'ultima ripetizione
if (empty($sections_repetitions_by_index[$section_index]) || $subsection_index >= $sections_repetitions_by_index[$section_index] - 1) {
// In questo caso dobbiamo solo rimandare alla prossima sezione, se esiste
$next_index = $section_index;
$next_subsection_index = 0;
do {
// Se abbiamo esaurito le opzioni, muoriamo male
if (empty($sections[++$next_index])) {
$next_index = null;
break;
}
// Verifichiamo che la sezione successiva non sia ripetibile
if (!isset($sections_repetitions_by_index[$next_index])) {
// In quel caso possiamo navigarci senza problema all'indice 0
$next_subsection_index = 0;
break;
}
// Verifichiamo che ci sia almeno una ripetizione
if ($sections_repetitions_by_index[$next_index] == 0) {
// Se non ci sono ripetizioni, la sezione non è transitabile
// Continuiamo con quella successiva
continue;
}
// Transitiamo sulla prima ripetizione disponibile
$next_subsection_index = 0;
break;
} while (true);
if ($next_index !== null) {
$next["name"] = $sections[$next_index]["name"];
$next["index"] = $next_subsection_index;
}
}
// Altrimenti, navighiamo semplicemente nella prossima sottosezione
else {
$next["name"] = $sections[$section_index]["name"];
$next["index"] = $subsection_index + 1;
}
// Fix di errori singoli
$ted_errors = $ted->errors ?? null;
if (!empty($ted_errors) && !array_is_list($ted_errors)) {
$ted_errors = [$ted_errors];
}
// Verifica stato di successo successo
$validation_success = false;
if (isset($_SESSION["guue_verified_" . $ted->info["codice"]])) {
unset($_SESSION["guue_verified_" . $ted->info["codice"]]);
$validation_success = true;
}
// Mettiamo da parte i tasti di navigazione
ob_start();
?>
completed();
?>
isReadyForAnacTransmission()) : ?>
canBeReadyForAnac()) : //($ted->info["stato"] ?? "") === "DA TRASMETTERE") : ?>
info["codice"]}&form={$ted->info["form"]}&ready=true" ?>
">
= __guue("Pronto per ANAC") ?>
canBeUnlockedForANAC()) : ?>
info["codice"]}&form={$ted->info["form"]}&ready=false" ?>
">
= __guue("Sblocca modifiche") ?>
isReadyForAnacTransmission()) : ?>
isReadyForAnacTransmission()) {
//$navigation_buttons = "";
$readonly = true;
}
$small_navigation_buttons = str_replace('class="nav-text ml-2"', 'style="display:none;"', $navigation_buttons);
?>
= __guue("Sezione \"{$section_name}\" non trovata.") ?>
= Modulo::header($radice) ?>
= $ted->title ?? "Notice" ?>
= $navigation_buttons; ?>
= __guue('Validazione superata') ?>
Congratulazioni! Il form ha superato la validazione ed è pronto per essere trasmesso!