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") { ?> 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" ?> "> canBeUnlockedForANAC()) : ?> info["codice"]}&form={$ted->info["form"]}&ready=false" ?> "> isReadyForAnacTransmission()) : ?> isReadyForAnacTransmission()) { //$navigation_buttons = ""; $readonly = true; } $small_navigation_buttons = str_replace('class="nav-text ml-2"', 'style="display:none;"', $navigation_buttons); ?>



title ?? "Notice" ?>


Congratulazioni! Il form ha superato la validazione ed è pronto per essere trasmesso!

advanced_debug) : ?> Download XML (validazione)
toXML()), true) ?>


__get("npa"))): ?> info["codice"] > 0) { alertManager::printAlertBox("Scheda GUUE non collegata", "Torna alla scheda ANAC di competenza e ri-seleziona questa scheda GUUE per associarle e proseguire con la modifica"); $readonly = true; } ?> npa->getCardLink(); $ted->setSuggestions(); ?> Collegata alla scheda ANAC n°npa->scheda["codice"] ?> npa->scheda["pubblicazione"] ?? ""); ?>
"> "> "> info["titolo"])) : ?> "> ">

" title=""> .
getEntiBeneficiari(false); if ($enti !== false) : ?>
codice ?> version == "eForms") : ?>
" title="" class="form-control section-repetition-count" data-identifier="" data-value="" rel="" name="reps[]" id="reps-slugify($rep["id"]) ?>" value="">
info["codice"])) : ?>
$section) { $repetitions = 1; $repeatable = false; $section["active"] = $current_section == $section["name"]; if (!empty($section_repetitions_by_name[$section["id"]])) { $repetitions = $section_repetitions_by_name[$section["id"]]["value"]; $repeatable = true; } for ($i = 0; $i < $repetitions; $i++) { $section["index"] = 0; $active = $section["active"]; if ($repetitions > 1) { $section["index"] = $i; $section["display_index"] = $i + 1; if ($active) { $active = $subsection_index == $i; } } $completed = $ted->isSectionComplete($section["name"], $repeatable ? $i : null); ?>
info["errori"]), 1); if (!empty($errori)) { ?> info["form"])) { ?> "> "> ">
printForm($sections[$section_index], $subsection_index ?? 0); } ?>