Implementazione distribuita della ricerca

This commit is contained in:
Thomas Zilio 2018-02-04 09:41:46 +01:00
parent 9c2d1fa607
commit 43881389ff
18 changed files with 567 additions and 590 deletions

View File

@ -21,333 +21,6 @@ if (!isset($term)) {
else {
$i = 0;
/*
Interventi
*/
if (Modules::getPermission('Interventi') != '-') {
$campi = ['codice', '(SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id)', 'data_richiesta', 'info_sede', 'richiesta', 'descrizione', 'informazioniaggiuntive'];
$campi_text = ['Codice intervento', 'Data intervento', 'Data richiesta intervento', 'Sede intervento', 'Richiesta', 'Descrizione', 'Informazioni aggiuntive'];
$id_module = Modules::get('Interventi')['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$build_query .= Modules::getAdditionalsQuery('Interventi');
$rs = $dbo->fetchArray('SELECT *, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS data FROM in_interventi WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['id'];
$result[$r + $i]['title'] = 'Intervento '.$rs[$r]['codice'].' del '.Translator::dateToLocale($rs[$r]['data']);
$result[$r + $i]['category'] = 'Interventi';
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
/*
Preventivi
*/
if (Modules::getPermission('Contabilita') != '-') {
$campi = ['numero', 'nome', 'descrizione'];
$campi_text = ['Codice preventivo', 'Nome', 'Descrizione'];
$rs = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name='Preventivi'");
$id_module = $rs[0]['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT *, co_preventivi.id AS idpreventivo FROM co_preventivi WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['idpreventivo'];
$result[$r + $i]['title'] = 'Preventivo '.$rs[$r]['numero'].(($rs[$r]['data_accettazione'] == '0000-00-00') ? ' del '.Translator::dateToLocale($rs[$r]['data_accettazione']) : '');
$result[$r + $i]['category'] = 'Preventivi';
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
/*
Fatture
*/
if (Modules::getPermission('Contabilita') != '-') {
$campi = ['numero', 'numero_esterno', 'data', 'note', 'note_aggiuntive', 'buono_ordine'];
$campi_text = ['Numero', 'Numero secondario', 'Data', 'Note', 'Note aggiuntive', 'Buono d\'ordine'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT *, co_documenti.id AS iddocumento FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
if ($rs[$r]['numero_esterno'] == '') {
$numero = $rs[$r]['numero'];
} else {
$numero = $rs[$r]['numero_esterno'];
}
// Controllo se si tratta di una fattura di acquisto o di vendita e seleziono il modulo opportuno
if ($rs[$r]['dir'] == 'uscita') {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Fatture di acquisto'");
$id_module = $rsm[0]['id'];
} else {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Fatture di vendita'");
$id_module = $rsm[0]['id'];
}
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['iddocumento'];
$result[$r + $i]['title'] = $rs[$r]['descrizione'].' num. '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']);
$result[$r + $i]['category'] = $rs[$r]['descrizione'];
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
/*
Righe fatture
*/
if (Modules::getPermission('Contabilita') != '-') {
$campi = ['descrizione'];
$campi_text = ['Riga'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR co_righe_documenti.'.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT co_documenti.*, co_documenti.id AS iddocumento, co_tipidocumento.descrizione AS tipodoc, co_tipidocumento.dir, co_righe_documenti.descrizione FROM co_righe_documenti INNER JOIN (co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id) ON co_documenti.id=co_righe_documenti.iddocumento WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
if ($rs[$r]['numero_esterno'] == '') {
$numero = $rs[$r]['numero'];
} else {
$numero = $rs[$r]['numero_esterno'];
}
// Controllo se si tratta di una fattura di acquisto o di vendita e seleziono il modulo opportuno
if ($rs[$r]['dir'] == 'uscita') {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Fatture di acquisto'");
$id_module = $rsm[0]['id'];
} else {
$rsm = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name = 'Fatture di vendita'");
$id_module = $rsm[0]['id'];
}
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['iddocumento'];
$result[$r + $i]['title'] = $rs[$r]['tipodoc'].' num. '.$numero.' del '.Translator::dateToLocale($rs[$r]['data']);
$result[$r + $i]['category'] = $rs[$r]['tipodoc'];
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
/*
Articoli
*/
if (Modules::getPermission('Articoli') != '-') {
$campi = ['codice', 'descrizione', '(SELECT nome FROM mg_categorie WHERE mg_categorie.id = mg_articoli.id_categoria)', '(SELECT nome FROM mg_categorie WHERE mg_categorie.id = mg_articoli.id_sottocategoria)', 'note'];
$campi_text = ['Codice', 'Descrizione', 'Categoria', 'Subcategoria', 'Note'];
$rs = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name='Articoli'");
$id_module = $rs[0]['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT * FROM mg_articoli WHERE 1=0 '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['id'];
$result[$r + $i]['title'] = $rs[$r]['codice'].' - '.$rs[$r]['descrizione'];
$result[$r + $i]['category'] = 'Articoli';
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
}
$i += $r;
}
}
/*
Automezzi
*/
if (Modules::getPermission('Automezzi') != '-') {
$campi = ['nome', 'descrizione', 'targa'];
$campi_text = ['Nome', 'Descrizione', 'Targa'];
$rs = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name='Automezzi'");
$id_module = $rs[0]['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray('SELECT * FROM dt_automezzi WHERE 1=0 '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['id'];
$result[$r + $i]['title'] = $rs[$r]['nome'];
$result[$r + $i]['category'] = 'Automezzi';
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
}
$i += $r;
}
}
/*
Ddt
*/
@ -477,59 +150,5 @@ else {
}
}
/*
MyImpianti
*/
if (Modules::getPermission('MyImpianti') != '-') {
$campi = ['matricola', 'nome', 'descrizione', 'ubicazione', 'occupante', 'proprietario'];
$campi_text = ['Matricola', 'Nome', 'Descrizione', 'Ubicazione', 'Occupante', 'Proprietario'];
$rs = $dbo->fetchArray("SELECT id FROM zz_modules WHERE name='MyImpianti'");
$id_module = $rs[0]['id'];
$build_query = '';
for ($c = 0; $c < sizeof($campi); ++$c) {
$build_query .= ' OR '.$campi[$c].' LIKE "%'.$term.'%"';
}
$build_query .= Modules::getAdditionalsQuery('MyImpianti');
$rs = $dbo->fetchArray('SELECT * FROM my_impianti WHERE idanagrafica IN('.implode(',', $idanagrafiche).') '.$build_query);
if (sizeof($rs) > 0) {
// Loop record corrispondenti alla ricerca
for ($r = 0; $r < sizeof($rs); ++$r) {
$result[$r + $i]['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$r]['matricola'];
$result[$r + $i]['title'] = $rs[$r]['matricola'].' - '.$rs[$r]['nome'];
$result[$r + $i]['category'] = 'MyImpianti';
$result[$r + $i]['labels'] = [];
// Loop campi da evidenziare
for ($c = 0; $c < sizeof($campi); ++$c) {
if (preg_match('/'.$term.'/i', $rs[$r][$campi[$c]])) {
$text = $rs[$r][$campi[$c]];
// Evidenzio la parola cercata nei valori dei campi
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
}
$result[$r + $i]['labels'][] = $campi_text[$c].': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result[$r + $i]['labels'][] = 'Anagrafica: '.$ragioni_sociali[$rs[$r]['idanagrafica']].'<br/>';
}
}
$i += $r;
}
}
$results = $result;
}

View File

@ -87,135 +87,6 @@ else {
}
break;
case 'conti':
if (Modules::get('Piano dei conti')['permessi'] != '-') {
$query = 'SELECT * FROM co_pianodeiconti2';
$rs = $dbo->fetchArray($query);
foreach ($rs as $r) {
$results[] = ['text' => $r['numero'].' '.$r['descrizione'], 'children' => []];
$subquery = 'SELECT * FROM co_pianodeiconti3 |where|';
$where = [];
$filter = [];
$search_fields = [];
foreach ($elements as $element) {
$filter[] = 'id='.prepare($element);
}
if (!empty($filter)) {
$where[] = '('.implode(' OR ', $filter).')';
}
$where[] = 'idpianodeiconti2='.prepare($r['id']);
if (!empty($search)) {
$search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%');
}
if (!empty($search_fields)) {
$where[] = '('.implode(' OR ', $search_fields).')';
}
$wh = '';
if (count($where) != 0) {
$wh = 'WHERE '.implode(' AND ', $where);
}
$subquery = str_replace('|where|', $wh, $subquery);
$rs2 = $dbo->fetchArray($subquery);
foreach ($rs2 as $r2) {
$results[count($results) - 1]['children'][] = ['id' => $r2['id'], 'text' => $r2['descrizione']];
}
}
}
break;
case 'conti-vendite':
if (Modules::get('Piano dei conti')['permessi'] != '-') {
$query = "SELECT co_pianodeiconti3.id, CONCAT_WS( ' ', co_pianodeiconti3.numero, co_pianodeiconti3.descrizione ) AS descrizione FROM co_pianodeiconti3 INNER JOIN (co_pianodeiconti2 INNER JOIN co_pianodeiconti1 ON co_pianodeiconti2.idpianodeiconti1=co_pianodeiconti1.id) ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where| ORDER BY co_pianodeiconti3.numero ASC";
foreach ($elements as $element) {
$filter[] = 'co_pianodeiconti3.id='.prepare($element);
}
$where[] = "co_pianodeiconti1.descrizione='Economico'";
$where[] = "co_pianodeiconti3.dir='entrata'";
if (!empty($search)) {
$search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%');
}
}
break;
case 'conti-acquisti':
if (Modules::get('Piano dei conti')['permessi'] != '-') {
$query = "SELECT co_pianodeiconti3.id, CONCAT_WS( ' ', co_pianodeiconti3.numero, co_pianodeiconti3.descrizione ) AS descrizione FROM co_pianodeiconti3 INNER JOIN (co_pianodeiconti2 INNER JOIN co_pianodeiconti1 ON co_pianodeiconti2.idpianodeiconti1=co_pianodeiconti1.id) ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where| ORDER BY co_pianodeiconti3.numero ASC";
foreach ($elements as $element) {
$filter[] = 'co_pianodeiconti3.id='.prepare($element);
}
$where[] = "co_pianodeiconti1.descrizione='Economico'";
$where[] = "co_pianodeiconti3.dir='uscita'";
if (!empty($search)) {
$search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%');
}
}
break;
case 'impianti':
if (Modules::get('MyImpianti')['permessi'] != '-' && isset($superselect['idanagrafica'])) {
$query = 'SELECT id, CONCAT(matricola, " - ", nome) AS descrizione FROM my_impianti |where| ORDER BY idsede';
foreach ($elements as $element) {
$filter[] = 'id='.prepare($element);
}
$where[] = 'idanagrafica='.prepare($superselect['idanagrafica']);
$where[] = 'idsede='.prepare($superselect['idsede']);
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
$search_fields[] = 'matricola LIKE '.prepare('%'.$search.'%');
}
}
break;
case 'componenti':
if (Modules::get('Gestione componenti')['permessi'] != '-' && isset($superselect['marticola'])) {
$query = 'SELECT id, nome AS descrizione, contenuto FROM my_impianto_componenti |where| ORDER BY id';
foreach ($elements as $element) {
$filter[] = 'idimpianto='.prepare($element);
}
$temp = [];
$impianti = explode(',', $superselect['marticola']);
foreach ($impianti as $key => $idimpianto) {
$temp[] = 'idimpianto='.prepare($idimpianto);
}
$where[] = '('.implode(' OR ', $temp).')';
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
}
$custom['contenuto'] = 'contenuto';
$results = AJAX::completeResults($query, $where, $filter, $search, $custom);
foreach ($results as $key => $value) {
$matricola = \Util\Ini::getValue($r['contenuto'], 'Matricola');
$results[$key]['text'] = (empty($matricola) ? '' : $matricola.' - ').$results[$key]['text'];
unset($results[$key]['content']);
}
}
break;
case 'categorie':
if (Modules::get('Magazzino')['permessi'] != '-') {
$query = 'SELECT id, nome AS descrizione FROM mg_categorie |where| ORDER BY id';
@ -248,70 +119,6 @@ else {
}
break;
case 'preventivi':
if (Modules::get('Preventivi')['permessi'] != '-' && isset($superselect['idanagrafica'])) {
$query = 'SELECT co_preventivi.id AS id, an_anagrafiche.idanagrafica, CONCAT(numero, " ", nome) AS descrizione, co_preventivi.idtipointervento, (SELECT descrizione descrizione FROM in_tipiintervento WHERE in_tipiintervento.idtipointervento = co_preventivi.idtipointervento) AS idtipointervento_descrizione FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
foreach ($elements as $element) {
$filter[] = 'id='.prepare($element);
}
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
$where[] = "idstato NOT IN (SELECT `id` FROM co_statipreventivi WHERE descrizione='Bozza' OR descrizione='Rifiutato' OR descrizione='Pagato')";
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
}
$custom['idtipointervento'] = 'idtipointervento';
$custom['idtipointervento_descrizione'] = 'idtipointervento_descrizione';
}
break;
case 'preventivi_aperti':
if (Modules::get('Preventivi')['permessi'] != '-') {
$query = 'SELECT co_preventivi.id AS id, CONCAT(numero, " ", nome, " (", ragione_sociale, ")") AS descrizione FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
foreach ($elements as $element) {
$filter[] = 'idpreventivo='.prepare($element);
}
$where[] = 'idstato IN (1)';
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
}
}
break;
case 'contratti':
if (Modules::get('Contratti')['permessi'] != '-') {
$query = 'SELECT co_contratti.id AS id, CONCAT(numero, " ", nome) AS descrizione FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
foreach ($elements as $element) {
$filter[] = 'id='.prepare($element);
}
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
$where[] = 'idstato IN (SELECT `id` FROM co_staticontratti WHERE pianificabile = 1)';
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
}
}
break;
case 'tipiintervento':
if (Modules::get('Interventi')['permessi'] != '-') {
$query = 'SELECT idtipointervento AS id, descrizione FROM in_tipiintervento |where| ORDER BY idtipointervento';
foreach ($elements as $element) {
$filter[] = 'idtipointervento='.prepare($element);
}
if (!empty($search)) {
$search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%');
}
}
break;
case 'misure':
if (Modules::get('Magazzino')['permessi'] != '-') {
$query = 'SELECT valore AS id, valore AS descrizione FROM mg_unitamisura |where| ORDER BY valore';

View File

@ -38,7 +38,7 @@ if (sizeof($rs) > 0) {
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $r[$name]);
}
$result['labels'][] = $campi_text[$c].': '.$text.'<br/>';
@ -82,7 +82,7 @@ if (sizeof($rs) > 0) {
preg_match('/'.$term.'/i', $rs[$r][$campi[$c]], $matches);
for ($m = 0; $m < sizeof($matches); ++$m) {
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $text);
$text = str_replace($matches[$m], "<span class='highlight'>".$matches[$m].'</span>', $r[$name]);
}
$result['labels'][] = $campi_text[$c].': '.$text.'<br/>';

View File

@ -0,0 +1,54 @@
<?php
include_once __DIR__.'/../../../core.php';
$id_module = Modules::get('Articoli')['id'];
$fields = [
'Codice' => 'codice',
'Descrizione' => 'descrizione',
'Categoria' => '(SELECT nome FROM mg_categorie WHERE mg_categorie.id = mg_articoli.id_categoria)',
'Subcategoria' => '(SELECT nome FROM mg_categorie WHERE mg_categorie.id = mg_articoli.id_sottocategoria)',
'Note' => 'note',
];
$query = 'SELECT *';
foreach ($fields as $name => $value) {
$query .= ', '.$value." AS '".str_replace("'", "\'", $name)."'";
}
$query .= ' FROM mg_articoli WHERE 1=0 ';
foreach ($fields as $name => $value) {
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
}
$query .= Modules::getAdditionalsQuery('Articoli');
$rs = $dbo->fetchArray($query);
foreach ($rs as $r) {
$result = [];
$result['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$r['id'];
$result['title'] = $r['codice'].' - '.$r['descrizione'];
$result['category'] = 'Articoli';
// Campi da evidenziare
$result['labels'] = [];
foreach ($fields as $name => $value) {
if (str_contains($r[$name], $term)) {
$text = str_replace($term, "<span class='highlight'>".$term.'</span>', $r[$name]);
$result['labels'][] = $name.': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result['labels'][] = 'Anagrafica: '.$ragioni_sociali[$r['idanagrafica']].'<br/>';
}
$results[] = $result;
}

View File

@ -0,0 +1,47 @@
<?php
include_once __DIR__.'/../../../core.php';
$id_module = Modules::get('Automezzi')['id'];
$fields = [
'Nome' => 'nome',
'Descrizione' => 'descrizione',
'Targa' => 'targa',
];
$query = 'SELECT *';
foreach ($fields as $name => $value) {
$query .= ', '.$value." AS '".str_replace("'", "\'", $name)."'";
}
$query .= ' FROM dt_automezzi WHERE 1=0 ';
foreach ($fields as $name => $value) {
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
}
$query .= Modules::getAdditionalsQuery('Automezzi');
$rs = $dbo->fetchArray($query);
foreach ($rs as $r) {
$result = [];
$result['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$r['id'];
$result['title'] = $r['nome'];
$result['category'] = 'Automezzi';
// Campi da evidenziare
$result['labels'] = [];
foreach ($fields as $name => $value) {
if (str_contains($r[$name], $term)) {
$text = str_replace($term, "<span class='highlight'>".$term.'</span>', $r[$name]);
$result['labels'][] = $name.': '.$text.'<br/>';
}
}
$results[] = $result;
}

View File

@ -165,12 +165,12 @@ switch (post('op')) {
$_SESSION['infos'][] = tr('Articolo aggiunto!');
break;
case 'adddescrizione':
if (!empty($id_record)) {
$descrizione = post('descrizione');
$query = 'INSERT INTO co_righe2_contratti(idcontratto, descrizione, is_descrizione) VALUES('.prepare($id_record).', '.prepare($descrizione).', 1)';
if ($dbo->query($query)) {
$_SESSION['infos'][] = tr('Riga descrittiva aggiunta!');
}
@ -179,10 +179,10 @@ switch (post('op')) {
case 'editriga':
$idriga = post('idriga');
$rs = $dbo->fetchArray("SELECT * FROM co_righe2_contratti WHERE id='".$idriga."'");
$is_descrizione = $rs[0]['is_descrizione'];
$idarticolo = post('idarticolo');
$descrizione = post('descrizione');
@ -207,9 +207,9 @@ switch (post('op')) {
$desc_iva = $rs[0]['descrizione'];
// Modifica riga generica sul documento
if($is_descrizione==0){
if ($is_descrizione == 0) {
$query = 'UPDATE co_righe2_contratti SET idarticolo='.prepare($idarticolo).', idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga);
}else{
} else {
$query = 'UPDATE co_righe2_contratti SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga);
}
$dbo->query($query);

View File

@ -0,0 +1,21 @@
<?php
include_once __DIR__.'/../../../core.php';
switch ($resource) {
case 'contratti':
$query = 'SELECT co_contratti.id AS id, CONCAT(numero, " ", nome) AS descrizione FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
foreach ($elements as $element) {
$filter[] = 'id='.prepare($element);
}
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
$where[] = 'idstato IN (SELECT `id` FROM co_staticontratti WHERE pianificabile = 1)';
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
}
break;
}

View File

@ -49,7 +49,7 @@ if (!empty($rs_art)) {
// q.tà
echo '
<td class="text-center">';
if($r['is_descrizione']==0){
if ($r['is_descrizione'] == 0) {
echo
Translator::numberToLocale($r['qta']);
}
@ -59,7 +59,7 @@ if (!empty($rs_art)) {
// um
echo '
<td class="text-center">';
if($r['is_descrizione']==0){
if ($r['is_descrizione'] == 0) {
echo
$r['um'];
}
@ -69,7 +69,7 @@ if (!empty($rs_art)) {
// costo unitario
echo '
<td class="text-center">';
if($r['is_descrizione']==0){
if ($r['is_descrizione'] == 0) {
echo
Translator::numberToLocale($r['subtotale'] / $r['qta']).' &euro;';
}
@ -79,7 +79,7 @@ if (!empty($rs_art)) {
// iva
echo '
<td class="text-right">';
if($r['is_descrizione']==0){
if ($r['is_descrizione'] == 0) {
echo
Translator::numberToLocale($r['iva'])." &euro;<br>
<small class='help-block'>".$r['desc_iva'].'</small>';
@ -90,7 +90,7 @@ if (!empty($rs_art)) {
// Imponibile
echo '
<td class="text-right">';
if($r['is_descrizione']==0){
if ($r['is_descrizione'] == 0) {
echo
Translator::numberToLocale($r['subtotale']).' &euro;';

View File

@ -0,0 +1,64 @@
<?php
include_once __DIR__.'/../../../core.php';
$fields = [
'Numero' => 'numero',
'Numero secondario' => 'numero_esterno',
'Data' => 'data',
'Note' => 'note',
'Note aggiuntive' => 'note_aggiuntive',
'Buono d\'ordine' => 'buono_ordine',
'Righe' => '(SELECT GROUP_CONCAT(descrizione SEPARATOR \' -- \') FROM co_righe_documenti WHERE co_righe_documenti.iddocumento = co_documenti.id)',
];
$query = 'SELECT *, co_documenti.id, co_tipidocumento.descrizione AS tipologia';
foreach ($fields as $name => $value) {
$query .= ', '.$value." AS '".str_replace("'", "\'", $name)."'";
}
$query .= ' FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE idanagrafica IN('.implode(',', $idanagrafiche).') ';
foreach ($fields as $name => $value) {
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
}
//$query .= Modules::getAdditionalsQuery('Interventi');
$rs = $dbo->fetchArray($query);
foreach ($rs as $r) {
$result = [];
$module = ($r['dir'] == 'uscita') ? 'Fatture di acquisto' : 'Fatture di vendita';
$id_module = Modules::get($module)['id'];
$r['data'] = Translator::dateToLocale($r['data']);
$numero = empty($r['numero_esterno']) ? $r['numero'] : $r['numero_esterno'];
$result['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$r['id'];
$result['title'] = $r['tipologia'].' num. '.$numero.' del '.$r['data'];
$result['category'] = $r['tipologia'];
// Campi da evidenziare
$result['labels'] = [];
foreach ($fields as $name => $value) {
if (str_contains($r[$name], $term)) {
if ($name == 'Righe') {
$result['labels'][] = tr('Termine presente nelle righe del documento').'<br/>';
} else {
$text = str_replace($term, "<span class='highlight'>".$term.'</span>', $r[$name]);
$result['labels'][] = $name.': '.$text.'<br/>';
}
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result['labels'][] = 'Anagrafica: '.$ragioni_sociali[$r['idanagrafica']].'<br/>';
}
$results[] = $result;
}

View File

@ -0,0 +1,38 @@
<?php
include_once __DIR__.'/../../../core.php';
switch ($resource) {
case 'componenti':
if (isset($superselect['marticola'])) {
$query = 'SELECT id, nome AS descrizione, contenuto FROM my_impianto_componenti |where| ORDER BY id';
foreach ($elements as $element) {
$filter[] = 'idimpianto='.prepare($element);
}
$temp = [];
$impianti = explode(',', $superselect['marticola']);
foreach ($impianti as $key => $idimpianto) {
$temp[] = 'idimpianto='.prepare($idimpianto);
}
$where[] = '('.implode(' OR ', $temp).')';
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
}
$custom['contenuto'] = 'contenuto';
$results = AJAX::completeResults($query, $where, $filter, $search, $custom);
foreach ($results as $key => $value) {
$matricola = \Util\Ini::getValue($r['contenuto'], 'Matricola');
$results[$key]['text'] = (empty($matricola) ? '' : $matricola.' - ').$results[$key]['text'];
unset($results[$key]['content']);
}
}
break;
}

View File

@ -0,0 +1,56 @@
<?php
include_once __DIR__.'/../../../core.php';
$id_module = Modules::get('Interventi')['id'];
$fields = [
'Codice intervento' => 'codice',
'Data intervento' => '(SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id)',
'Data richiesta intervento' => 'data_richiesta',
'Sede intervento' => 'info_sede',
'Richiesta' => 'richiesta',
'Descrizione' => 'descrizione',
'Informazioni aggiuntive' => 'informazioniaggiuntive',
];
$query = 'SELECT *, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS data';
foreach ($fields as $name => $value) {
$query .= ', '.$value." AS '".str_replace("'", "\'", $name)."'";
}
$query .= ' FROM in_interventi WHERE idanagrafica IN('.implode(',', $idanagrafiche).') ';
foreach ($fields as $name => $value) {
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
}
$query .= Modules::getAdditionalsQuery('Interventi');
$rs = $dbo->fetchArray($query);
foreach ($rs as $r) {
$result = [];
$result['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$r['id'];
$result['title'] = 'Intervento '.$r['codice'].' del '.Translator::dateToLocale($r['data']);
$result['category'] = 'Interventi';
// Campi da evidenziare
$result['labels'] = [];
foreach ($fields as $name => $value) {
if (str_contains($r[$name], $term)) {
$text = str_replace($term, "<span class='highlight'>".$term.'</span>', $r[$name]);
$result['labels'][] = $name.': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result['labels'][] = 'Anagrafica: '.$ragioni_sociali[$r['idanagrafica']].'<br/>';
}
$results[] = $result;
}

View File

@ -0,0 +1,17 @@
<?php
include_once __DIR__.'/../../../core.php';
switch ($resource) {
case 'tipiintervento':
$query = 'SELECT idtipointervento AS id, descrizione FROM in_tipiintervento |where| ORDER BY idtipointervento';
foreach ($elements as $element) {
$filter[] = 'idtipointervento='.prepare($element);
}
if (!empty($search)) {
$search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%');
}
break;
}

View File

@ -0,0 +1,55 @@
<?php
include_once __DIR__.'/../../../core.php';
$id_module = Modules::get('MyImpianti')['id'];
$fields = [
'Matricola' => 'matricola',
'Nome' => 'nome',
'Descrizione' => 'descrizione',
'Ubicazione' => 'ubicazione',
'Occupante' => 'occupante',
'Proprietario' => 'proprietario',
];
$query = 'SELECT *';
foreach ($fields as $name => $value) {
$query .= ', '.$value." AS '".str_replace("'", "\'", $name)."'";
}
$query .= ' FROM my_impianti WHERE idanagrafica IN('.implode(',', $idanagrafiche).') ';
foreach ($fields as $name => $value) {
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
}
$query .= Modules::getAdditionalsQuery('MyImpianti');
$rs = $dbo->fetchArray($query);
foreach ($rs as $r) {
$result = [];
$result['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$r['id'];
$result['title'] = $r['matricola'].' - '.$r['nome'];
$result['category'] = 'MyImpianti';
// Campi da evidenziare
$result['labels'] = [];
foreach ($fields as $name => $value) {
if (str_contains($r[$name], $term)) {
$text = str_replace($term, "<span class='highlight'>".$term.'</span>', $r[$name]);
$result['labels'][] = $name.': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result['labels'][] = 'Anagrafica: '.$ragioni_sociali[$r['idanagrafica']].'<br/>';
}
$results[] = $result;
}

View File

@ -0,0 +1,23 @@
<?php
include_once __DIR__.'/../../../core.php';
switch ($resource) {
case 'impianti':
if (isset($superselect['idanagrafica'])) {
$query = 'SELECT id, CONCAT(matricola, " - ", nome) AS descrizione FROM my_impianti |where| ORDER BY idsede';
foreach ($elements as $element) {
$filter[] = 'id='.prepare($element);
}
$where[] = 'idanagrafica='.prepare($superselect['idanagrafica']);
$where[] = 'idsede='.prepare($superselect['idsede']);
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
$search_fields[] = 'matricola LIKE '.prepare('%'.$search.'%');
}
}
break;
}

View File

@ -0,0 +1,80 @@
<?php
include_once __DIR__.'/../../../core.php';
switch ($resource) {
case 'conti':
$query = 'SELECT * FROM co_pianodeiconti2';
$rs = $dbo->fetchArray($query);
foreach ($rs as $r) {
$results[] = ['text' => $r['numero'].' '.$r['descrizione'], 'children' => []];
$subquery = 'SELECT * FROM co_pianodeiconti3 |where|';
$where = [];
$filter = [];
$search_fields = [];
foreach ($elements as $element) {
$filter[] = 'id='.prepare($element);
}
if (!empty($filter)) {
$where[] = '('.implode(' OR ', $filter).')';
}
$where[] = 'idpianodeiconti2='.prepare($r['id']);
if (!empty($search)) {
$search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%');
}
if (!empty($search_fields)) {
$where[] = '('.implode(' OR ', $search_fields).')';
}
$wh = '';
if (count($where) != 0) {
$wh = 'WHERE '.implode(' AND ', $where);
}
$subquery = str_replace('|where|', $wh, $subquery);
$rs2 = $dbo->fetchArray($subquery);
foreach ($rs2 as $r2) {
$results[count($results) - 1]['children'][] = ['id' => $r2['id'], 'text' => $r2['descrizione']];
}
}
break;
case 'conti-vendite':
$query = "SELECT co_pianodeiconti3.id, CONCAT_WS( ' ', co_pianodeiconti3.numero, co_pianodeiconti3.descrizione ) AS descrizione FROM co_pianodeiconti3 INNER JOIN (co_pianodeiconti2 INNER JOIN co_pianodeiconti1 ON co_pianodeiconti2.idpianodeiconti1=co_pianodeiconti1.id) ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where| ORDER BY co_pianodeiconti3.numero ASC";
foreach ($elements as $element) {
$filter[] = 'co_pianodeiconti3.id='.prepare($element);
}
$where[] = "co_pianodeiconti1.descrizione='Economico'";
$where[] = "co_pianodeiconti3.dir='entrata'";
if (!empty($search)) {
$search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%');
}
break;
case 'conti-acquisti':
$query = "SELECT co_pianodeiconti3.id, CONCAT_WS( ' ', co_pianodeiconti3.numero, co_pianodeiconti3.descrizione ) AS descrizione FROM co_pianodeiconti3 INNER JOIN (co_pianodeiconti2 INNER JOIN co_pianodeiconti1 ON co_pianodeiconti2.idpianodeiconti1=co_pianodeiconti1.id) ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where| ORDER BY co_pianodeiconti3.numero ASC";
foreach ($elements as $element) {
$filter[] = 'co_pianodeiconti3.id='.prepare($element);
}
$where[] = "co_pianodeiconti1.descrizione='Economico'";
$where[] = "co_pianodeiconti3.dir='uscita'";
if (!empty($search)) {
$search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%');
}
break;
}

View File

@ -0,0 +1,57 @@
<?php
include_once __DIR__.'/../../../core.php';
$id_module = Modules::get('Preventivi')['id'];
$fields = [
'Codice preventivo' => 'numero',
'Nome' => 'nome',
'Descrizione' => 'descrizione',
];
$query = 'SELECT *';
foreach ($fields as $name => $value) {
$query .= ', '.$value." AS '".str_replace("'", "\'", $name)."'";
}
$query .= ' FROM co_preventivi WHERE idanagrafica IN('.implode(',', $idanagrafiche).') ';
foreach ($fields as $name => $value) {
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
}
$query .= Modules::getAdditionalsQuery('Preventivi');
$rs = $dbo->fetchArray($query);
foreach ($rs as $r) {
$result = [];
$result['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$r['id'];
$result['title'] = 'Preventivo '.$r['numero'];
if ($rs[$r]['data_accettazione'] == '0000-00-00') {
$result['title'] .= ' del '.Translator::dateToLocale($rs[$r]['data_accettazione']);
}
$result['category'] = 'Preventivi';
// Campi da evidenziare
$result['labels'] = [];
foreach ($fields as $name => $value) {
if (str_contains($r[$name], $term)) {
$text = str_replace($term, "<span class='highlight'>".$term.'</span>', $r[$name]);
$result['labels'][] = $name.': '.$text.'<br/>';
}
}
// Aggiunta nome anagrafica come ultimo campo
if (sizeof($ragioni_sociali) > 1) {
$result['labels'][] = 'Anagrafica: '.$ragioni_sociali[$r['idanagrafica']].'<br/>';
}
$results[] = $result;
}

View File

@ -0,0 +1,39 @@
<?php
include_once __DIR__.'/../../../core.php';
switch ($resource) {
case 'preventivi':
if (isset($superselect['idanagrafica'])) {
$query = 'SELECT co_preventivi.id AS id, an_anagrafiche.idanagrafica, CONCAT(numero, " ", nome) AS descrizione, co_preventivi.idtipointervento, (SELECT descrizione descrizione FROM in_tipiintervento WHERE in_tipiintervento.idtipointervento = co_preventivi.idtipointervento) AS idtipointervento_descrizione FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
foreach ($elements as $element) {
$filter[] = 'id='.prepare($element);
}
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
$where[] = "idstato NOT IN (SELECT `id` FROM co_statipreventivi WHERE descrizione='Bozza' OR descrizione='Rifiutato' OR descrizione='Pagato')";
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
}
$custom['idtipointervento'] = 'idtipointervento';
$custom['idtipointervento_descrizione'] = 'idtipointervento_descrizione';
}
break;
case 'preventivi_aperti':
$query = 'SELECT co_preventivi.id AS id, CONCAT(numero, " ", nome, " (", ragione_sociale, ")") AS descrizione FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
foreach ($elements as $element) {
$filter[] = 'idpreventivo='.prepare($element);
}
$where[] = 'idstato IN (1)';
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
}
break;
}

View File

@ -29,7 +29,7 @@ class AJAX
$modules = Modules::getAvailableModules();
// Individuazione dei select esistenti
$dirs = array_column($modules, 'directory');
$dirs = array_unique(array_column($modules, 'directory'));
$pieces = array_chunk($dirs, 5);
$customs = [];
@ -124,7 +124,7 @@ class AJAX
$modules = Modules::getAvailableModules();
// Individuazione dei select esistenti
$dirs = array_column($modules, 'directory');
$dirs = array_unique(array_column($modules, 'directory'));
$pieces = array_chunk($dirs, 5);
$customs = [];
@ -183,7 +183,7 @@ class AJAX
$modules = Modules::getAvailableModules();
// Individuazione dei select esistenti
$dirs = array_column($modules, 'directory');
$dirs = array_unique(array_column($modules, 'directory'));
$pieces = array_chunk($dirs, 5);
$customs = [];