ARIADNE Sistema di gestione delle tabelle all'interno di una scheda (tabella principale), sia in relazione uno-molti (con scheda lato molti o scheda lato uno) che molti-molti, con o senza possibilità di modifica delle voci e nuova creazione. E' basato su: - un elemento , nella variabile $this->view->options[nome_tabella] - grid contenente gli elementi già selezionati (molti:molti), nella variabile $this->view->grids[nome_tabella] (relazione molti:molti) - variabile $this->view->disabled[nome_tabella], con valori empty|disabled="disabled", per i pulsanti edit e delete (relazione 1:molti) ->LARAVEL: - $ariadne_grids, $ariadne_options, $ariadne_disabled, $ariadne_checked VIEW Nella singola chiamata occorre definire: *$properties["controller"] = nome del controller comprensivo del modulo, senza / iniziali e finali (es. backend/lemmas) *$properties["scheda"] = nome della tabella *$properties["idScheda"] ad esempio: $this->rows["LEM"]["idlemmas"]; *$properties["tabella"] *$properties["laravel"] true | false $properties["tipoTabella"] = solo nel caso di più chiamate per la stessa tabella nella view (default empty) $properties["relazione"] 1 = 1-molti (scheda lato molti) 1.1 = 1-molti (scheda lato uno) 2 = molti-molti (default 2) $properties["titolo"] = può comparire nella finestra modal e nei tooltip dei pulsanti $properties["selectWidth"] = larghezza del select (default 180px) $properties["gridWidth"] = larghezza della grid (default 650px) $properties["cerca"] = valore dell'attributo data-live-search nel select (default true=) $properties["modifica"] = true = abilita la modifica (edit) della voce e anche la sua cancellazione se sussistono i requisiti (diritti e assenza di collegamento); il default è false, ma è raccomandato di definirlo sempre, altrimenti un valore true definito in precedenza potrebbe abilitare alla modifica e cancellazione voci che non devono esserlo. $properties["nuovo"] = true = presenza del pulsante Nuovo (default come 'modifica') $properties["muovi"] = true = presenza di pulsanti up e down (default false) $properties["modal"] = "standard" = si usa la finestra modal standard, per il solo campo name; "custom" = chiama una finestra modal dedicata alla tabella, di id = "--nome_tabellaDialog" (default "standard") se "standard" occorre inserire nelle view: $properties["options"] = parametri opzionali da passare alla chiamata ajax --modificaItem(); default = empty; formato: "nome:valore;nome:valore"; non è possibile usare JSON, per problemi di virgolette require 'ariadne/view.php'; I valori con * sono obbligatori Generalmente le prima 3 proprietà sono uguali per tutte le tabelle della view e possono essere definite una volta per tutte. In caso contrario è raccomandato ridefinirle a ogni chiamata. Se ci sono chiamate con $properties["modal"] = "custom" occorre mettere a disposizione la finestra modale corrispondente. Deve avere le seguenti caratteristiche: - id della finestra: "--nome_tabellaDialog" - id dei campi modificabili: --nome_tabella-nome_campo CONTROLLER: azioni ajax Devono essere presenti (in tutto o in parte) le seguenti azioni: }else if($azione == "--aggiungiDaTendina"){ /* Solo molti:molti Riceve i parametri: nomeScheda idScheda tabella tipoTabella id: della tabella Restituisce la grid }else if($azione == "--modificaItem"){ /* Riceve i parametri: nomeScheda idScheda tabella tipoTabella relazione (1=1:molti 2=molti:molti) id: - relazione 1: id della tabella - relazione 2: id della tabella ponte - 0 : inserimento di nuovo item Restituisce: - un JSON che contiene un elemento array per campo, con un elemento "type" per il tipo di campo ("text", "combo" ecc.), un elemento "value" per il valore e un eventuale elemento "visible" booleano per i campi facoltativi; nella finestra di dialogo i campi facoltativi devono essere contenuti in una div con id div-tabella-nomecampo; - echo "@error@The user cannot edit this record." */ }else if($azione == "--modificaItemOk"){ /* Riceve i parametri: nomeScheda idScheda tabella tipoTabella relazione id: come sopra parametri = contiene tutti i nuovi valori dei campi; ogni campo è separato dalla pipe e il nome del campo è separato dal valore dal segno @ Restituisce: - relazione 1: le options con l'item selezionato - relazione 2: grid @ options senza selezione - echo "@error@The entry already exists." */ }else if($azione == "--cancellaItem"){ /* riceve i parametri: nomeScheda idScheda tabella tipoTabella id: come sopra Restituisce: - relazione 1: un JSON con "error" e "options"; "error" non è vuoto se l'utente non ha diritto di modifica - relazione 2: grid @ options senza selezione */ }else if($azione == "muoviItem"){ /* Solo molti:molti Riceve i parametri: nomeScheda idScheda tabella tipoTabella id (della tabella) verso (1=up -1 = down) Restituisce: la grid */ CAMPI OPZIONALI: due tipi di gestione: 1. Caso semplice: il campo opzionale è chiuso in una div con id="div-tabella-nomecampo" e class="div-optional": il campo è visibile se è definito nel JSON passato dal controller, non è visibile se non è definito. 2. Caso complesso: il campo opzionale è chiuso in una div con id="div-tabella-nomecampo"; nel controller il campo è definito in tutti i casi, e contiene l'elemento ["visible"] con valore true o false Questa soluzione si rende necessaria nei casi in cui nella finestra di dialogo il campo può essere reso alternativamente visibile o meno dall'utente: se l'elemento non fosse inizalmente passato e poi fosse reso visibile, il valore immesso non sarebbe acquisito nel controller.