2017-08-04 16:28:16 +02:00
< ? 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 )) {
$total = Plugins :: getQuery ( $id_plugin );
$total [ 'query' ] = Modules :: replacePlaceholder ( $total [ 'query' ], $id_parent );
} else {
$total = Modules :: getQuery ( $id_module );
}
// Lettura parametri modulo
$module_query = $total [ 'query' ];
$module_query = str_replace ( '|period_start|' , $_SESSION [ 'period_start' ], $module_query );
$module_query = str_replace ( '|period_end|' , $_SESSION [ 'period_end' ], $module_query );
$module_query = str_replace ( '|select|' , $total [ 'select' ], $module_query );
// Predisposizione dela risposta
$results = [];
$results [ 'data' ] = [];
$results [ 'recordsTotal' ] = 0 ;
$results [ 'recordsFiltered' ] = 0 ;
$results [ 'summable' ] = [];
if ( ! empty ( $module_query ) && $module_query != 'menu' && $module_query != 'custom' ) {
// Conteggio totale
$query = 'SELECT COUNT(*) as `tot` FROM (' . $module_query . ') AS `count`' ;
$cont = $dbo -> fetchArray ( $query );
if ( ! empty ( $cont )) {
$results [ 'recordsTotal' ] = $cont [ 0 ][ 'tot' ];
}
// Filtri di ricerica
$search_filters = [];
for ( $i = 0 ; $i < count ( $columns ); ++ $i ) {
if ( ! empty ( $columns [ $i ][ 'search' ][ 'value' ])) {
2017-08-28 15:29:03 +02:00
if ( str_contains ( $total [ 'search_inside' ][ $i ], '|search|' )) {
2017-08-04 16:28:16 +02:00
$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 {
2017-12-14 21:46:45 +01:00
// 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 ];
}
2017-08-04 16:28:16 +02:00
$search_filters [] = '`' . $total [ 'search_inside' ][ $i ] . '` LIKE ' . prepare ( '%' . trim ( $columns [ $i ][ 'search' ][ 'value' ] . '%' ));
}
}
}
2018-02-09 17:01:06 +01:00
/*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' )) ){
$module_query = str_replace ( '1=1' , " 1=1 AND idsezionale = ' " . $_SESSION [ 'entrata' ][ " idsezionale " ] . " ' " , $module_query );
}
if ( isset ( $_SESSION [ 'uscita' ][ 'idsezionale' ]) AND ( $modules_info [ $id_module ][ 'name' ] == 'Fatture di acquisto' ) ){
$module_query = str_replace ( '1=1' , " 1=1 AND idsezionale = ' " . $_SESSION [ 'uscita' ][ " idsezionale " ] . " ' " , $module_query );
}
/*fine filtro sezionali*/
2017-08-04 16:28:16 +02:00
if ( ! empty ( $search_filters )) {
$module_query = str_replace ( '2=2' , '2=2 AND (' . implode ( ' AND ' , $search_filters ) . ') ' , $module_query );
}
// Filtri derivanti dai permessi (eventuali)
2017-12-14 21:46:45 +01:00
if ( empty ( $id_plugin )) {
$module_query = Modules :: replaceAdditionals ( $id_module , $module_query );
}
2017-08-04 16:28:16 +02:00
// Ordinamento dei risultati
if ( isset ( $order [ 'dir' ]) && isset ( $order [ 'column' ])) {
$pieces = explode ( 'ORDER' , $module_query );
$cont = count ( $pieces );
if ( $cont > 1 ) {
unset ( $pieces [ $cont - 1 ]);
}
2018-02-10 18:43:17 +01:00
$module_query = implode ( 'ORDER' , $pieces ) . ' ORDER BY ' . $total [ 'order_by' ][ $order [ 'column' ]] . ' ' . $order [ 'dir' ];
2017-08-04 16:28:16 +02:00
}
// Calcolo di eventuali somme
if ( ! empty ( $total [ 'summable' ])) {
$query = str_replace_once ( 'SELECT' , 'SELECT ' . implode ( ', ' , $total [ 'summable' ]) . ' FROM(SELECT ' , $module_query ) . ') AS `z`' ;
$sums = $dbo -> fetchArray ( $query )[ 0 ];
if ( ! empty ( $sums )) {
$r = [];
foreach ( $sums as $key => $sum ) {
2017-08-28 15:29:03 +02:00
if ( str_contains ( $key , 'sum_' )) {
2017-08-04 16:28:16 +02:00
$r [ str_replace ( 'sum_' , '' , $key )] = Translator :: numberToLocale ( $sum );
}
}
$results [ 'summable' ] = $r ;
}
}
// Paginazione
if ( $length > 0 ) {
$module_query .= ' LIMIT ' . $start . ', ' . $length ;
}
// Query effettiva
$query = str_replace_once ( 'SELECT' , 'SELECT SQL_CALC_FOUND_ROWS' , $module_query );
$rs = $dbo -> fetchArray ( $query );
// Conteggio dei record filtrati
$cont = $dbo -> fetchArray ( 'SELECT FOUND_ROWS()' );
if ( ! empty ( $cont )) {
$results [ 'recordsFiltered' ] = $cont [ 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
2017-09-19 16:20:44 +02:00
if ( Translator :: getFormatter () -> isStandardNumber ( $value )) {
2017-08-04 16:28:16 +02:00
$align [ $field ] = 'text-right' ;
}
// Allineamento al centro se il valore della prima riga risulta relativo a date o icone
2018-02-08 11:04:26 +01:00
elseif ( Translator :: getFormatter () -> isStandardDate ( $value ) || preg_match ( '/^icon_(.+?)$/' , $field )) {
2017-08-04 16:28:16 +02:00
$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
2017-09-19 16:20:44 +02:00
if ( ! empty ( $total [ 'format' ][ $pos ]) && ! empty ( $value )) {
2017-09-19 18:14:23 +02:00
if ( Translator :: getFormatter () -> isStandardDate ( $value )) {
2017-08-04 16:28:16 +02:00
$value = Translator :: dateToLocale ( $value );
2017-09-19 16:20:44 +02:00
} elseif ( Translator :: getFormatter () -> isStandardTime ( $value )) {
2017-08-04 16:28:16 +02:00
$value = Translator :: timeToLocale ( $value );
2017-09-19 18:14:23 +02:00
} elseif ( Translator :: getFormatter () -> isStandardTimestamp ( $value )) {
$value = Translator :: timestampToLocale ( $value );
} elseif ( Translator :: getFormatter () -> isStandardNumber ( $value )) {
$value = Translator :: numberToLocale ( $value );
2017-08-04 16:28:16 +02:00
}
}
// Icona
2018-02-08 11:04:26 +01:00
if ( preg_match ( '/^color_(.+?)$/' , $field , $m )) {
2017-08-04 16:28:16 +02:00
$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
2017-09-04 12:59:03 +02:00
elseif ( preg_match ( '/^icon_(.+?)$/' , trim ( $field ), $m )) {
2017-11-15 19:32:23 +01:00
$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>' ;
2017-08-04 16:28:16 +02:00
}
// 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 );