mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-01-24 12:51:05 +01:00
fdad40cb2b
Generalizzazione della gestione delle query di Moduli e Plugin. Miglioramento della gestione degli assets (ora gestiti dalla classe App e personalizzabili nella configurazione). Miglioramento del nome della gestione di alcune variabili, con relativa individuazione (classe App). Rimozione codice deprecato nel core.
233 lines
8.5 KiB
PHP
233 lines
8.5 KiB
PHP
<?php
|
|
|
|
include_once __DIR__.'/core.php';
|
|
|
|
// Informazioni fondamentali
|
|
$start = filter('start');
|
|
$length = filter('length');
|
|
$columns = filter('columns');
|
|
$order = filter('order')[0];
|
|
|
|
$order['column'] = $order['column'] - 1;
|
|
array_shift($columns);
|
|
|
|
// Lettura parametri iniziali
|
|
if (!empty($id_plugin)) {
|
|
$element = Plugins::get($id_plugin);
|
|
} else {
|
|
$element = Modules::get($id_module);
|
|
}
|
|
$total = App::readQuery($element);
|
|
|
|
// Lettura parametri modulo
|
|
$result_query = $total['query'];
|
|
|
|
// Predisposizione dela risposta
|
|
$results = [];
|
|
$results['data'] = [];
|
|
$results['recordsTotal'] = 0;
|
|
$results['recordsFiltered'] = 0;
|
|
$results['summable'] = [];
|
|
|
|
if (!empty($result_query) && $result_query != 'menu' && $result_query != 'custom') {
|
|
// Conteggio totale
|
|
$count_query = 'SELECT COUNT(*) as `tot` FROM ('.$result_query.') AS `count`';
|
|
$count = $dbo->fetchArray($count_query);
|
|
if (!empty($count)) {
|
|
$results['recordsTotal'] = $count[0]['tot'];
|
|
}
|
|
|
|
// Filtri di ricerica
|
|
$search_filters = [];
|
|
for ($i = 0; $i < count($columns); ++$i) {
|
|
if (!empty($columns[$i]['search']['value'])) {
|
|
if (str_contains($total['search_inside'][$i], '|search|')) {
|
|
$pieces = explode(',', $columns[$i]['search']['value']);
|
|
foreach ($pieces as $piece) {
|
|
$piece = trim($piece);
|
|
$search_filters[] = str_replace('|search|', prepare('%'.$piece.'%'), $total['search_inside'][$i]);
|
|
}
|
|
} else {
|
|
// Per le icone cerco per il campo icon_title
|
|
if (preg_match('/^icon_(.+?)$/', $total['search_inside'][$i], $m)) {
|
|
$total['search_inside'][$i] = 'icon_title_'.$m[1];
|
|
}
|
|
|
|
$search_filters[] = '`'.$total['search_inside'][$i].'` LIKE '.prepare('%'.trim($columns[$i]['search']['value'].'%'));
|
|
}
|
|
}
|
|
}
|
|
|
|
/*filtro sezionali*/
|
|
if (isset($_SESSION['entrata']['idsezionale']) and (($modules_info[$id_module]['name'] == 'Fatture di vendita') or ($modules_info[$id_module]['name'] == 'Laboratorio') or ($modules_info[$id_module]['name'] == 'Ticket'))) {
|
|
$result_query = str_replace('1=1', " 1=1 AND idsezionale = '".$_SESSION['entrata']['idsezionale']."' ", $result_query);
|
|
}
|
|
|
|
if (isset($_SESSION['uscita']['idsezionale']) and ($modules_info[$id_module]['name'] == 'Fatture di acquisto')) {
|
|
$result_query = str_replace('1=1', " 1=1 AND idsezionale = '".$_SESSION['uscita']['idsezionale']."' ", $result_query);
|
|
}
|
|
/*fine filtro sezionali*/
|
|
|
|
if (!empty($search_filters)) {
|
|
$result_query = str_replace('2=2', '2=2 AND ('.implode(' AND ', $search_filters).') ', $result_query);
|
|
}
|
|
|
|
// Filtri derivanti dai permessi (eventuali)
|
|
if (empty($id_plugin)) {
|
|
$result_query = Modules::replaceAdditionals($id_module, $result_query);
|
|
}
|
|
|
|
// Ordinamento dei risultati
|
|
if (isset($order['dir']) && isset($order['column'])) {
|
|
$pieces = explode('ORDER', $result_query);
|
|
|
|
$count = count($pieces);
|
|
if ($count > 1) {
|
|
unset($pieces[$count - 1]);
|
|
}
|
|
|
|
$result_query = implode('ORDER', $pieces).' ORDER BY '.$total['order_by'][$order['column']].' '.$order['dir'];
|
|
}
|
|
|
|
// Calcolo di eventuali somme
|
|
if (!empty($total['summable'])) {
|
|
$sum_query = str_replace_once('SELECT', 'SELECT '.implode(', ', $total['summable']).' FROM(SELECT ', $result_query).') AS `z`';
|
|
$sums = $dbo->fetchArray($sum_query)[0];
|
|
if (!empty($sums)) {
|
|
$r = [];
|
|
foreach ($sums as $key => $sum) {
|
|
if (str_contains($key, 'sum_')) {
|
|
$r[str_replace('sum_', '', $key)] = Translator::numberToLocale($sum);
|
|
}
|
|
}
|
|
$results['summable'] = $r;
|
|
}
|
|
}
|
|
|
|
// Paginazione
|
|
if ($length > 0) {
|
|
$result_query .= ' LIMIT '.$start.', '.$length;
|
|
}
|
|
|
|
// Query effettiva
|
|
$query = str_replace_once('SELECT', 'SELECT SQL_CALC_FOUND_ROWS', $result_query);
|
|
$rs = $dbo->fetchArray($query);
|
|
|
|
// Conteggio dei record filtrati
|
|
$count = $dbo->fetchArray('SELECT FOUND_ROWS()');
|
|
if (!empty($count)) {
|
|
$results['recordsFiltered'] = $count[0]['FOUND_ROWS()'];
|
|
}
|
|
|
|
// Creazione della tabella
|
|
$align = [];
|
|
foreach ($rs as $i => $r) {
|
|
if ($i == 0) {
|
|
foreach ($total['fields'] as $field) {
|
|
$value = trim($r[$field]);
|
|
|
|
// Allineamento a destra se il valore della prima riga risulta numerica
|
|
if (Translator::getFormatter()->isStandardNumber($value)) {
|
|
$align[$field] = 'text-right';
|
|
}
|
|
|
|
// Allineamento al centro se il valore della prima riga risulta relativo a date o icone
|
|
elseif (Translator::getFormatter()->isStandardDate($value) || preg_match('/^icon_(.+?)$/', $field)) {
|
|
$align[$field] = 'text-center';
|
|
}
|
|
}
|
|
}
|
|
|
|
$result = [];
|
|
$result[] = '<span class="hide" data-id="'.$r['id'].'"></span>';
|
|
foreach ($total['fields'] as $pos => $field) {
|
|
$column = [];
|
|
|
|
if (!empty($r['_bg_'])) {
|
|
$column['data-background'] = $r['_bg_'];
|
|
}
|
|
|
|
// Allineamento
|
|
if (!empty($align[$field])) {
|
|
$column['class'] = $align[$field];
|
|
}
|
|
|
|
$value = trim($r[$field]);
|
|
|
|
// Formattazione automatica
|
|
if (!empty($total['format'][$pos]) && !empty($value)) {
|
|
if (Translator::getFormatter()->isStandardDate($value)) {
|
|
$value = Translator::dateToLocale($value);
|
|
} elseif (Translator::getFormatter()->isStandardTime($value)) {
|
|
$value = Translator::timeToLocale($value);
|
|
} elseif (Translator::getFormatter()->isStandardTimestamp($value)) {
|
|
$value = Translator::timestampToLocale($value);
|
|
} elseif (Translator::getFormatter()->isStandardNumber($value)) {
|
|
$value = Translator::numberToLocale($value);
|
|
}
|
|
}
|
|
|
|
// Icona
|
|
if (preg_match('/^color_(.+?)$/', $field, $m)) {
|
|
$value = $r['color_title_'.$m[1]] ?: '';
|
|
|
|
$column['class'] = 'text-center small';
|
|
$column['data-background'] = $r[$field];
|
|
}
|
|
|
|
// Icona di stampa
|
|
elseif ($field == '_print_') {
|
|
$print_url = $r['_print_'];
|
|
|
|
preg_match_all('/\$(.+?)\$/', $print_url, $matches);
|
|
|
|
for ($m = 0; $m < sizeof($matches[0]); ++$m) {
|
|
$print_url = str_replace($matches[0][$m], $r[$matches[1][$m]], $print_url);
|
|
}
|
|
|
|
$value = '<a href="'.$rootdir.'/'.$print_url.'" target="_blank"><i class="fa fa-2x fa-print"></i></a>';
|
|
}
|
|
|
|
// Icona
|
|
elseif (preg_match('/^icon_(.+?)$/', trim($field), $m)) {
|
|
$value = '<span class=\'label text-black\' style=\'font-weight:normal;\' ><i class="'.$r[$field].'" title="'.$r['icon_title_'.$m[1]].'" ></i> <span>'.$r['icon_title_'.$m[1]].'</span></span>';
|
|
}
|
|
|
|
// Colore del testo
|
|
if (!empty($column['data-background'])) {
|
|
$column['data-color'] = $column['data-color'] ?: color_inverse($column['data-background']);
|
|
}
|
|
|
|
// Link della colonna
|
|
if ($field != '_print_') {
|
|
$id_record = $r['id'];
|
|
$hash = '';
|
|
if (!empty($r['_link_record_'])) {
|
|
$id_module = $r['_link_module_'];
|
|
$id_record = $r['_link_record_'];
|
|
$hash = !empty($r['_link_hash_']) ? '#'.$r['_link_hash_'] : '';
|
|
unset($id_plugin);
|
|
}
|
|
|
|
$column['data-link'] = $rootdir.'/'.(empty($id_plugin) ? '' : 'plugin_').'editor.php?id_module='.$id_module.'&id_record='.$id_record.(empty($id_plugin) ? '' : '&id_plugin='.$id_plugin.'&id_parent='.$id_parent).$hash;
|
|
|
|
if (!empty($id_plugin)) {
|
|
$column['data-type'] = 'dialog';
|
|
}
|
|
}
|
|
|
|
$attributes = [];
|
|
foreach ($column as $key => $val) {
|
|
$val = is_array($val) ? implode(' ', $val) : $val;
|
|
$attributes[] = $key.'="'.$val.'"';
|
|
}
|
|
|
|
$result[] = str_replace('|attr|', implode(' ', $attributes), '<div |attr|>'.$value.'</div>');
|
|
}
|
|
|
|
$results['data'][] = $result;
|
|
}
|
|
}
|
|
|
|
echo json_encode($results);
|