16 define(
'ROW_CREATED' ,
'INSERITO' );
17 define(
'ROW_MODIFIED' ,
'MODIFICATO' );
18 define(
'ROW_UNMODIFIED' ,
'INVARIATO' );
28 logWrite(
"${t}/${a}",
'controller', LOG_DEBUG );
45 if( empty(
$d ) ) {
$d = array(); }
48 $d = array_map(
'empty2null',
$d );
51 foreach(
$d as
$k => $v ) {
52 if( is_array( $v ) && substr(
$k, 0, 2 ) !==
'__' ) {
54 }
elseif( strtolower(
$k ) ==
'__method__' ) {
55 $a = strtoupper( $v );
56 }
elseif( strtolower(
$k ) ==
'__table__' ) {
58 }
elseif( strtolower(
$k ) ==
'__reset__' ) {
60 }
elseif( strtolower(
$k ) ==
'__view_mode__' ) {
62 }
elseif( strtolower(
$k ) ==
'__report_mode__' ) {
64 # } elseif( strtolower( $k ) == '__notify__' ) { 65 # $n = string2boolean( $v ); 66 # } elseif( strtolower( $k ) == '__execute__' ) { 67 # $n = string2boolean( $v ); 68 }
elseif( substr(
$k, 0, 2 ) !==
'__' ) {
70 # if( strtolower( $v ) == 'null' ) { $v = NULL; } 71 if( strtolower( $v ) ==
'__null__' ) { $v = NULL; }
72 if( strtolower( $v ) ==
'__parent_id__' ) { $v =
$p; }
73 if( strtolower( $v ) ==
'__self_id__' ) { $v = ( isset(
$d[
'id'] ) ) ?
$d[
'id'] : NULL; }
74 if( strtolower( $v ) ==
'__timestamp__' ) { $v = time(); }
75 if( strtolower( $v ) ==
'__date__' ) { $v = date(
'Y-m-d' ); }
77 $vs[
$k ] = array(
's' => $v );
88 if(
$a ===
METHOD_GET && ( ! array_key_exists(
'id',
$d ) || $vm ===
true ) ) {
91 logWrite(
"permessi sufficienti per ${t}/${a}",
'controller', LOG_DEBUG );
107 if( isset( $i[
'__fields__'] ) ) {
108 $fld = implode(
', ', preg_filter(
'/^/',
"${t}$rm.", $i[
'__fields__'] ) );
114 $q =
"SELECT SQL_CALC_FOUND_ROWS ${fld} FROM ${t}$rm";
120 if( ! empty( $aclTb ) ) {
121 $q .=
" LEFT JOIN $aclTb ON ${aclTb}.id_entita = ${t}$rm.id ";
122 # NON GERARCHICO $q .= " LEFT JOIN account_gruppi ON account_gruppi.id_gruppo = ${aclTb}.id_gruppo "; 123 $q .=
" LEFT JOIN account_gruppi ON ( account_gruppi.id_gruppo = ${aclTb}.id_gruppo OR gruppi_path_check( ${aclTb}.id_gruppo, account_gruppi.id_gruppo ) )";
124 $whr[] =
"( account_gruppi.id_account = ? OR ${t}$rm.id_account_inserimento = ? )";
125 $vs[] = array(
's' => $aclId );
126 $vs[] = array(
's' => $aclId );
127 $i[
'__group__'] = array(
$t . $rm .
'.id' );
131 if( isset( $i[
'__fields__'] ) && isset( $i[
'__search__'] ) && ! empty( $i[
'__search__'] ) ) {
132 foreach( explode(
' ', $i[
'__search__'] ) as $tks ) {
135 foreach( preg_filter(
'/^/',
"${t}$rm.", $i[
'__fields__'] ) as $field ) {
136 # $cond[] = $field . " LIKE '${like}'"; 137 # NOTA - questa modifica è dovuta al fatto che usare LIKE su colonne generate da una stored function 138 # se il parametro è passato come prepared sembra generare sempre un errore di collation; probabilmente 139 # c'è una soluzione più elegante ma al momento non sono stato in grado di trovarla ed è un peccato; 140 # lascio qui il codice bello nella speranza di riuscire a farlo andare prima o poi; non è da escludere 141 # che il problema possa essere anche nella funzione mysqlPreparedQuery(), bisognerebbe fare dei test 142 $cond[] = $field .
' LIKE ?';
143 $vs[] = array(
's' => $like );
145 $whr[] =
'(' . implode(
' OR ', $cond ) .
')';
150 foreach( $ks as $fk ) {
151 $whr[] =
"${fk} = ?";
163 if( isset( $i[
'__filters__'] ) && ! empty( $i[
'__filters__'] ) ) {
164 $filters = $i[
'__filters__'];
170 if( isset( $i[
'__restrict__'] ) && ! empty( $i[
'__restrict__'] ) ) {
171 $filters = array_replace_recursive(
172 $filters, $i[
'__restrict__']
177 if( isset( $filters ) && ! empty( $filters ) ) {
178 foreach( $filters as $fc => $sn ) {
179 foreach( $sn as $sk => $sv ) {
180 if( (
string) $sv !=
'' ) {
183 $whr[] =
"${fc} IS NOT NULL";
186 $whr[] =
"${fc} IS NULL";
189 $whr[] =
"${fc} = ?";
190 $vs[] = array(
's' => $sv );
193 $whr[] =
"${fc} > ?";
194 $vs[] = array(
's' => $sv );
197 $whr[] =
"${fc} >= ?";
198 $vs[] = array(
's' => $sv );
201 $whr[] =
"${fc} < ?";
202 $vs[] = array(
's' => $sv );
205 $whr[] =
"${fc} <= ?";
206 $vs[] = array(
's' => $sv );
209 $whr[] =
"${fc} LIKE ?";
210 $vs[] = array(
's' =>
'%'.$sv.
'%' );
227 if( ! empty( $whr ) ) {
228 $q .=
' WHERE ' . implode(
' AND ', $whr );
233 if( isset( $i[
'__group__'] ) && array_filter( $i[
'__group__'] ) ) {
234 $q .=
' GROUP BY ' . implode(
', ', $i[
'__group__'] );
239 if( isset( $i[
'__sort__'] ) && array_filter( $i[
'__sort__'] ) ) {
245 if( isset( $i[
'__pager__'][
'page'] ) && isset( $i[
'__pager__'][
'rows'] ) ) {
246 $q .=
' LIMIT ' . ( $i[
'__pager__'][
'page'] * $i[
'__pager__'][
'rows'] ) .
',' . $i[
'__pager__'][
'rows'];
258 if( isset( $i[
'__pager__'][
'rows'] ) ) {
259 $i[
'__pager__'][
'pages'] = ceil( $i[
'__pager__'][
'total'] / $i[
'__pager__'][
'rows'] );
267 logWrite(
"eseguo (${a}) la query: ${q}",
'controller', LOG_DEBUG );
270 $i[
'__status__'] = 200;
271 return $i[
'__status__'];
280 logWrite(
"diritti sufficienti per ${t}/${a}",
'controller', LOG_DEBUG );
289 switch( strtoupper(
$a ) ) {
293 $before = md5( serialize(
mysqlSelectRow(
$c,
'SELECT ' . implode(
',', array_diff( $ks, array(
'id_account_aggiornamento',
'timestamp_aggiornamento' ) ) ) .
' FROM ' .
$t .
' WHERE id = ?', array( array(
's' =>
$d[
'id'] ) ) ) ) );
306 glob( str_replace(
'_', NULL,
DIRECTORY_BASE . $cb . $cn ), GLOB_BRACE ),
307 glob( str_replace(
'_', NULL,
DIRECTORY_BASE . $cm . $cn ), GLOB_BRACE )
309 foreach(
$ct as
$f ) { require
$f; }
312 switch( strtoupper(
$a ) ) {
318 $q =
"INSERT INTO $t (" . implode(
',' , $ks ) .
") VALUES (" . implode(
',' , array_fill( 0, count( $ks ),
'?' ) ) .
") ";
326 $q =
"UPDATE $t SET ";
329 foreach( $ks as
$k ) {
334 $q .= implode(
', ' , $tks ) .
" WHERE id = ?";
337 $vs[] = array(
's' =>
$d[
'id'] );
345 $q =
"REPLACE INTO $t (" . implode(
',' , $ks ) .
") VALUES (" . implode(
',' , array_fill( 0 , count( $ks ) ,
'?' ) ) .
") ";
353 $q =
"INSERT INTO $t (" . implode(
',' , $ks ) .
") VALUES (" . implode(
',' , array_fill( 0 , count( $ks ) ,
'?' ) ) .
") ";
354 foreach( $ks as $k ) { $vks[] =
"$k=VALUES($k)"; }
355 $q .=
"ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id)," . implode(
',' , $vks );
363 $q =
"DELETE FROM $t WHERE id = ?";
374 $q =
"SELECT * FROM ${t}";
377 foreach( $ks as $k ) {
382 if( is_array( $tks ) && array_filter( $tks ) ) {
383 $q .=
" WHERE " . implode(
' AND ' , $tks );
395 glob( str_replace(
'_', NULL,
DIRECTORY_BASE . $cb . $cn ), GLOB_BRACE ),
396 glob( str_replace(
'_', NULL,
DIRECTORY_BASE . $cm . $cn ), GLOB_BRACE )
398 foreach(
$ct as $f ) { require
$f; }
401 switch( strtoupper(
$a ) ) {
426 $d[
'id'] = ( isset(
$d[
'id'] ) && ! empty(
$d[
'id'] ) ) ?
$d[
'id'] :
$id;
435 if( is_array(
$d ) ) {
436 $d = array_shift(
$d );
438 #if( $t == 'prodotti_caratteristiche' ) { echo $t . ' -> ' . $q . ' -> ' . print_r( $d, true ) . 'dati -> ' . PHP_EOL . print_r( $vs, true ) . PHP_EOL; } 444 logWrite(
"eseguo ($a) la query: $q",
'controller', LOG_DEBUG );
456 switch( strtoupper(
$a ) ) {
461 $after = md5( serialize(
mysqlSelectRow(
$c,
'SELECT ' . implode(
',', array_diff( $ks, array(
'id_account_aggiornamento',
'timestamp_aggiornamento' ) ) ) .
' FROM ' .
$t .
' WHERE id = ?', array( array(
's' =>
$d[
'id'] ) ) ) ) );
474 logWrite(
"record $comparison per la query: ${q}",
'controller', LOG_DEBUG );
481 glob( str_replace(
'_', NULL,
DIRECTORY_BASE . $cb . $cn ), GLOB_BRACE ),
482 glob( str_replace(
'_', NULL,
DIRECTORY_BASE . $cm . $cn ), GLOB_BRACE )
484 foreach(
$ct as $f ) { require
$f; }
488 if( is_array(
$d ) ) {
489 $d = array_merge(
$d, $s );
495 switch( strtoupper(
$a ) ) {
500 foreach(
$d as
$k => $v ) {
501 if( is_array( $v ) ) {
502 foreach( $v as
$x =>
$y ) {
511 if( in_array(
'id', $ks ) ) {
512 $x =
mysqlQuery(
$c,
'SELECT * FROM information_schema.key_column_usage WHERE referenced_table_name = ? AND constraint_name NOT LIKE "%_nofollow" AND table_schema = database()', array( array(
's' =>
$t ) ) );
513 #echo "cerco le referenze a $t" . PHP_EOL; 515 foreach(
$x as $ref ) {
517 $idx = array_column(
mysqlQuery(
$c,
'SHOW INDEX FROM ' . $ref[
'TABLE_NAME'] .
' WHERE key_name = "SORTING"' ),
'Column_name' );
518 $q =
"SELECT id FROM ".$ref[
'TABLE_NAME'].
" WHERE ".$ref[
'COLUMN_NAME'].
" = '".
$d[
'id'].
"'" . ( ( count( $idx ) ) ?
' ORDER BY ' . implode(
', ', $idx ) : NULL );
520 logWrite(
"cerco le referenze a ".$ref[
'TABLE_NAME'].
" dove ".$ref[
'COLUMN_NAME'].
" è ".
$d[
'id'].
", ".count(
$rows ).
" referenze trovate",
'controller', LOG_DEBUG );
523 foreach(
$rows as $row ) {
526 #echo $ref['TABLE_NAME'] . PHP_EOL; 528 #var_dump( $d[ $ref['TABLE_NAME'] ] ); 529 #var_dump( $d[ $ref['TABLE_NAME'] ][ $i ] ); 530 #var_dump( $d[ $ref['TABLE_NAME'] ][ $i ]['id'] ); 531 if( ! empty( $row[
'id'] ) ) {
532 $d[ $ref[
'TABLE_NAME'] ][ $ix ][
'id'] = $row[
'id'];
533 $e[ $ref[
'TABLE_NAME'] ][ $ix ] = array();
534 $i[ $ref[
'TABLE_NAME'] ][ $ix ] = array();
536 controller(
$c,
$d[ $ref[
'TABLE_NAME'] ][ $ix ], $ref[
'TABLE_NAME'],
$a, NULL,
$e[ $ref[
'TABLE_NAME'] ][ $ix ], $i[ $ref[
'TABLE_NAME'] ][ $ix ], $i[
'__auth__'] );
542 if( count(
$rows ) > 10 || $tDone > 1.5 ) {
543 logWrite($ref[
'TABLE_NAME'].
'.'.$ref[
'COLUMN_NAME'].
' causa overload: '.$tDone.
' secondi, '.count(
$rows).
' righe',
'performances', LOG_ERR);
555 glob( str_replace(
'_', NULL,
DIRECTORY_BASE . $cb . $cn ), GLOB_BRACE ),
556 glob( str_replace(
'_', NULL,
DIRECTORY_BASE . $cm . $cn ), GLOB_BRACE )
558 foreach(
$ct as $f ) { require
$f; }
565 switch( strtoupper(
$a ) ) {
571 $w =
mysqlSelectRow(
$c,
"SELECT * FROM ${t}$rm WHERE id = ?", array( array(
's' =>
$d[
'id'] ) ) );
572 if( is_array(
$w ) ) {
$d = array_merge(
$w,
$d ); }
578 $i[
'__status__'] = 200;
579 return $i[
'__status__'];
586 $i[
'__status__'] = 401;
587 return $i[
'__status__'];
if(isset( $cx['contatti'])) if(isset( $cf['site']['contatti'])) $ct['contatti']
logWrite( $m, $f='site', $l=LOG_NOTICE, $d=DIRECTORY_LOG, $t=CURRENT_LOG_LEVEL, $s=SITE_STATUS)
scrive un messaggio nei log del sito
if(!empty($_REQUEST['id'])) $d
getAclRightsTable( $c, $t)
if(isset( $_REQUEST['amazonCheckoutSessionId'])) $_SESSION['carrello']
const DIRECTORY_CONTROLLER
if(! isset( $_REQUEST['__view__'][ $ct['view']['id']]['__extra__']['assegnato'])|| $_REQUEST['__view__'][ $ct['view']['id']]['__extra__']['assegnato']=='__me__') elseif($_REQUEST[ '__view__'][$ct[ 'view'][ 'id']][ '__extra__'][ 'assegnato']=='__nessuno__')
getAclPermission( $t, $a, &$i=NULL)
getAclRights( $c, $t, $a, $id, &$i=NULL)