Skip to content

Commit 1d2aa4d

Browse files
feat: gestione link nei menù a tendina
1 parent 86182f5 commit 1d2aa4d

3 files changed

Lines changed: 77 additions & 12 deletions

File tree

assets/src/css/style.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1703,6 +1703,10 @@ table.dataTable {
17031703
font-size: 13px !important;
17041704
}
17051705

1706+
.select2-container--bootstrap4 .select2-results__option--highlighted > a {
1707+
color: #fff;
1708+
}
1709+
17061710
.btn-group>.btn-xs>input[type="checkbox"], .label>input[type="checkbox"] {
17071711
margin: 2px 0px;
17081712
}

src/AJAX.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,17 @@ public static function select($resource, $elements = [], $search = null, $page =
7373

7474
$results ??= [];
7575

76+
$link = $options['link'] ?? ($results['link'] ?? null);
77+
unset($results['link']);
78+
7679
$total = array_key_exists('recordsFiltered', $results) ? $results['recordsFiltered'] : count($results);
7780
$list = array_key_exists('results', $results) ? $results['results'] : $results;
7881

82+
// Applicazione della trasformazione dei link se specificata nelle opzioni
83+
if (!empty($link) && !empty($list)) {
84+
$list = self::applyLinkTransformation($list, $link);
85+
}
86+
7987
return [
8088
'results' => $list ?: [],
8189
'recordsFiltered' => $total,
@@ -125,6 +133,7 @@ public static function selectResults($query, $where, $filter = [], $search = [],
125133
return [
126134
'results' => $results,
127135
'recordsFiltered' => $data['count'],
136+
'link' => $custom['link'] ?? null
128137
];
129138
}
130139

@@ -266,6 +275,56 @@ protected static function getSelectResults($file, $resource, $elements = [], $li
266275
return $results ?? null;
267276
}
268277

278+
/**
279+
* Applica la trasformazione dei link agli elementi del select.
280+
*
281+
* @param array $list
282+
* @param string $link
283+
*
284+
* @return array
285+
*/
286+
protected static function applyLinkTransformation($list, $link)
287+
{
288+
foreach ($list as &$element) {
289+
// Gestione degli elementi con children (optgroup)
290+
if (isset($element['children']) && is_array($element['children'])) {
291+
$element['children'] = self::applyLinkTransformation($element['children'], $link);
292+
} else {
293+
// Applicazione della trasformazione del link all'elemento singolo
294+
$element = self::transformElementLink($element, $link);
295+
}
296+
}
297+
298+
return $list;
299+
}
300+
301+
/**
302+
* Trasforma il link di un singolo elemento applicando la stessa logica del SelectHandler.
303+
*
304+
* @param array $element
305+
* @param string $link
306+
*
307+
* @return array
308+
*/
309+
protected static function transformElementLink($element, $link)
310+
{
311+
if ($link == 'stampa') {
312+
$element['title'] = ' ';
313+
$element['text'] = '<a href="'.\Prints::getHref($element['id'], get('id_record')).'" target="_blank">'.$element['text'].' <i class="fa fa-external-link"></i></a>';
314+
} elseif ($link == 'allegato') {
315+
$element['title'] = ' ';
316+
$element['text'] = '<a href="'.base_path().'/view.php?file_id='.$element['id'].'" target="_blank">'.$element['text'].' <i class="fa fa-external-link"></i></a>';
317+
} elseif (string_contains($link, 'module:')) {
318+
$element['title'] = ' ';
319+
$element['text'] = \Modules::link(str_replace('module:', '', $link), $element['id'], $element['text'], false, ' target="_blank"');
320+
} elseif (string_contains($link, 'plugin:')) {
321+
$element['title'] = ' ';
322+
$element['text'] = \Plugins::link(str_replace('plugin:', '', $link), $element['id'], $element['text'], false, ' target="_blank"');
323+
}
324+
325+
return $element;
326+
}
327+
269328
/**
270329
* Ottiene i risultati della ricerca all'interno di un file specifico (modulo).
271330
*

src/HTMLBuilder/Handler/SelectHandler.php

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,15 @@ public function handle(&$values, &$extras)
7373

7474
// Informazioni aggiuntive per il select
7575
$infos = $values['select-options'] ?? [];
76+
// Aggiunta dell'informazione del link alle opzioni per le chiamate AJAX
77+
if (!empty($values['link'])) {
78+
$infos['link'] = $values['link'];
79+
}
7680
$values['data-select-options'] = json_encode($infos);
7781
unset($values['select-options']);
7882

7983
if (!empty($values['value']) || is_numeric($values['value'])) {
80-
$result .= $this->select2($source, $values['value'], $infos, $values['link']);
84+
$result .= $this->select2($source, $values['value'], $infos);
8185
}
8286
} else {
8387
if (!in_array('multiple', $extras)) {
@@ -142,7 +146,7 @@ public function handle(&$values, &$extras)
142146
*
143147
* @return string
144148
*/
145-
protected function select2($op, $elements, $info, $link = null)
149+
protected function select2($op, $elements, $info)
146150
{
147151
// Richiamo del file dedicato alle richieste AJAX per ottenere il valore iniziale del select
148152
$response = \AJAX::select($op, $elements, null, 0, 100, $info);
@@ -160,14 +164,6 @@ protected function select2($op, $elements, $info, $link = null)
160164
$attributes[] = 'selected';
161165
}
162166

163-
if ($link == 'stampa') {
164-
$element['title'] = ' ';
165-
$element['text'] = '<a href="'.\Prints::getHref($element['id'], get('id_record')).'" class="text-black" target="_blank">'.$element['text'].' <i class="fa fa-external-link"></i></a>';
166-
} elseif ($link == 'allegato') {
167-
$element['title'] = ' ';
168-
$element['text'] = '<a href="'.base_path().'/view.php?file_id='.$element['id'].'" class="text-black" target="_blank">'.$element['text'].' <i class="fa fa-external-link"></i></a>';
169-
}
170-
171167
if (!empty($element['_bgcolor_'])) {
172168
$attributes[] = 'style="background:'.$element['_bgcolor_'].'; color:'.color_inverse($element['_bgcolor_']).'"';
173169
}
@@ -209,10 +205,16 @@ protected function selectArray($array, $values, $link = null)
209205

210206
if ($link == 'stampa') {
211207
$element['title'] = ' ';
212-
$element['text'] = '<a href="'.\Prints::getHref($element['id'], get('id_record')).'" class="text-black" target="_blank">'.$element['text'].' <i class="fa fa-external-link"></i></a>';
208+
$element['text'] = '<a href="'.\Prints::getHref($element['id'], get('id_record')).'" target="_blank">'.$element['text'].' <i class="fa fa-external-link"></i></a>';
213209
} elseif ($link == 'allegato') {
214210
$element['title'] = ' ';
215-
$element['text'] = '<a href="'.base_path().'/view.php?file_id='.$element['id'].'" class="text-black" target="_blank">'.$element['text'].' <i class="fa fa-external-link"></i></a>';
211+
$element['text'] = '<a href="'.base_path().'/view.php?file_id='.$element['id'].'" target="_blank">'.$element['text'].' <i class="fa fa-external-link"></i></a>';
212+
} elseif (string_contains($link, 'module:')) {
213+
$element['title'] = ' ';
214+
$element['text'] = \Modules::link(str_replace('module:', '', $link), $element['id'], $element['text'], false, ' target="_blank"');
215+
} elseif (string_contains($link, 'plugin:')) {
216+
$element['title'] = ' ';
217+
$element['text'] = \Plugins::link(str_replace('plugin:', '', $link), $element['id'], $element['text'], false, ' target="_blank"');
216218
}
217219

218220
$attributes = [];

0 commit comments

Comments
 (0)