GlisWeb framework
_controller.tools.php
Vai alla documentazione di questo file.
1 <?php
2 
15  // costanti
16  define( 'ROW_CREATED' , 'INSERITO' );
17  define( 'ROW_MODIFIED' , 'MODIFICATO' );
18  define( 'ROW_UNMODIFIED' , 'INVARIATO' );
19 
25  function controller( $c, &$d, $t, $a = METHOD_GET, $p = NULL, &$e = array(), &$i = array(), &$pi = array() ) {
26 
27  // log
28  logWrite( "${t}/${a}", 'controller', LOG_DEBUG );
29 
30  // inizializzazioni
31  $q = NULL;
32  $s = array();
33  $r = false;
34  $ks = array();
35  $vs = array();
36  $vm = false;
37  $rm = '_view';
38 // $vValues = array();
39 
40  // inclusione dei controller
41  $cb = DIRECTORY_CONTROLLER . '_{default,' . str_replace( '_', '.', $t ) . '}.';
42  $cm = DIRECTORY_MODULI . '_{' . MODULI_ATTIVI . '}/' . $cb;
43 
44  // array dati
45  if( empty( $d ) ) { $d = array(); }
46 
47  // modifico in NULL tutti i valori vuoti
48  $d = array_map( 'empty2null', $d );
49 
50  // genero l'array delle chiavi, dei valori e dei sottomoduli
51  foreach( $d as $k => $v ) {
52  if( is_array( $v ) && substr( $k, 0, 2 ) !== '__' ) {
53  $s[ $k ] = $v;
54  } elseif( strtolower( $k ) == '__method__' ) {
55  $a = strtoupper( $v );
56  } elseif( strtolower( $k ) == '__table__' ) {
57  $t = $v;
58  } elseif( strtolower( $k ) == '__reset__' ) {
59  $r = string2boolean( $v );
60  } elseif( strtolower( $k ) == '__view_mode__' ) {
61  $vm = true;
62  } elseif( strtolower( $k ) == '__report_mode__' ) {
63  $rm = NULL;
64 # } elseif( strtolower( $k ) == '__notify__' ) {
65 # $n = string2boolean( $v );
66 # } elseif( strtolower( $k ) == '__execute__' ) {
67 # $n = string2boolean( $v );
68  } elseif( substr( $k, 0, 2 ) !== '__' ) {
69 
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' ); }
76 
77  $vs[ $k ] = array( 's' => $v );
78  $ks[] = $k;
79 
80  }
81  }
82 
83  // controllo permessi (il gruppo può eseguire l'azione sull'entità?) getAclPermission()
84  // TODO gestire il codice di errore HTTP unauthorized
85  if( getAclPermission( $t, $a, $i ) ) {
86 
87  // se è stata effettuata una GET senza ID, passo alla modalità view
88  if( $a === METHOD_GET && ( ! array_key_exists( 'id', $d ) || $vm === true ) ) {
89 
90  // log
91  logWrite( "permessi sufficienti per ${t}/${a}", 'controller', LOG_DEBUG );
92 
93  // debug
94  // print_r( $d );
95  // print_r( $i );
96 
97  // vado a cercare il campo e la tabella per le ACL
98  // TODO getAclTable() e getAclField() ???
99  $aclTb = getAclRightsTable( $c, $t );
100  $aclId = getAclRightsAccountId();
101 
102  // vado a cercare l'ID per le ACL
103  // TODO getAclId() ???
104 
105  // campi da selezionare dalla vista
106  // TODO fatto così è soggetto a SQL injection?
107  if( isset( $i['__fields__'] ) ) {
108  $fld = implode( ', ', preg_filter( '/^/', "${t}$rm.", $i['__fields__'] ) );
109  } else {
110  $fld = "${t}$rm.*";
111  }
112 
113  // preparo la query
114  $q = "SELECT SQL_CALC_FOUND_ROWS ${fld} FROM ${t}$rm";
115 
116  // inizializzo l'array per ricerca e filtri
117  $whr = array();
118 
119  // unisco la tabella di ACL se presente
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' );
128  }
129 
130  // ricerca nella vista
131  if( isset( $i['__fields__'] ) && isset( $i['__search__'] ) && ! empty( $i['__search__'] ) ) {
132  foreach( explode( ' ', $i['__search__'] ) as $tks ) {
133  $like = "%${tks}%";
134  $cond = array();
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 );
144  }
145  $whr[] = '(' . implode( ' OR ', $cond ) . ')';
146  }
147  }
148 
149  // filtri per i campi
150  foreach( $ks as $fk ) {
151  $whr[] = "${fk} = ?";
152  }
153 
154  // debug
155  // print_r( $i['__filters__'] );
156 
157  // TODO IMPORTANTE
158  // implementare filtri che implichino una JOIN con filtro sulla tabella di JOIN
159  // ad es. cercare sull'anagrafica quelli che hanno un'associazione con la categoria clienti
160  // sulla tabella anagrafica_categorie (adesso la cosa è gestita maldestramente con LK)
161 
162  // gestione locale dei filtri
163  if( isset( $i['__filters__'] ) && ! empty( $i['__filters__'] ) ) {
164  $filters = $i['__filters__'];
165  } else {
166  $filters = array();
167  }
168 
169  // restrizioni in atto
170  if( isset( $i['__restrict__'] ) && ! empty( $i['__restrict__'] ) ) {
171  $filters = array_replace_recursive(
172  $filters, $i['__restrict__']
173  );
174  }
175 
176  // filtri della vista
177  if( isset( $filters ) && ! empty( $filters ) ) {
178  foreach( $filters as $fc => $sn ) {
179  foreach( $sn as $sk => $sv ) {
180  if( (string) $sv != '' ) {
181  switch( $sk ) {
182  case 'NN':
183  $whr[] = "${fc} IS NOT NULL";
184  break;
185  case 'NL':
186  $whr[] = "${fc} IS NULL";
187  break;
188  case 'EQ':
189  $whr[] = "${fc} = ?";
190  $vs[] = array( 's' => $sv );
191  break;
192  case 'GT':
193  $whr[] = "${fc} > ?";
194  $vs[] = array( 's' => $sv );
195  break;
196  case 'GE':
197  $whr[] = "${fc} >= ?";
198  $vs[] = array( 's' => $sv );
199  break;
200  case 'LT':
201  $whr[] = "${fc} < ?";
202  $vs[] = array( 's' => $sv );
203  break;
204  case 'LE':
205  $whr[] = "${fc} <= ?";
206  $vs[] = array( 's' => $sv );
207  break;
208  case 'LK':
209  $whr[] = "${fc} LIKE ?";
210  $vs[] = array( 's' => '%'.$sv.'%' );
211  break;
212  }
213  }
214  }
215 /* if( $sn == 'EQ' ) {
216  foreach( $fc as $fk => $fv ) {
217  if( $fv !== '' ) {
218  $whr[] = "${fk} = ?";
219  $vs[] = array( 's' => $fv );
220  }
221  }
222  }
223 */ }
224  }
225 
226  // aggiungo le clausole WHERE alla query
227  if( ! empty( $whr ) ) {
228  $q .= ' WHERE ' . implode( ' AND ', $whr );
229  }
230 
231  // raggruppamenti della vista
232  // TODO fatto così è soggetto a SQL injection?
233  if( isset( $i['__group__'] ) && array_filter( $i['__group__'] ) ) {
234  $q .= ' GROUP BY ' . implode( ', ', $i['__group__'] );
235  }
236 
237  // ordinamenti della vista
238  // TODO fatto così è soggetto a SQL injection?
239  if( isset( $i['__sort__'] ) && array_filter( $i['__sort__'] ) ) {
240  $q .= ' ORDER BY ' . arrayKeyValuesImplode( $i['__sort__'], ' ', ', ' );
241  }
242 
243  // paginazione della vista
244  // TODO fatto così è soggetto a SQL injection?
245  if( isset( $i['__pager__']['page'] ) && isset( $i['__pager__']['rows'] ) ) {
246  $q .= ' LIMIT ' . ( $i['__pager__']['page'] * $i['__pager__']['rows'] ) . ',' . $i['__pager__']['rows'];
247  }
248 
249  // debug
250  // print_r( $i );
251  // echo $q . PHP_EOL;
252 
253  // eseguo la query
254  $d = mysqlQuery( $c, $q, $vs, $e['__codes__'] );
255 
256  // registro il numero totale di righe
257  $i['__pager__']['total'] = mysqlSelectValue( $c, 'SELECT found_rows() AS t' );
258  if( isset( $i['__pager__']['rows'] ) ) {
259  $i['__pager__']['pages'] = ceil( $i['__pager__']['total'] / $i['__pager__']['rows'] );
260  }
261 
262  // debug
263  // echo $i['__pager__']['total'] . ' / ' . $i['__pager__']['rows'] . ' = ' . $i['__pager__']['pages'];
264  // echo $q;
265 
266  // log
267  logWrite( "eseguo (${a}) la query: ${q}", 'controller', LOG_DEBUG );
268 
269  // TODO il valore di ritorno dipende da eventuali errori
270  $i['__status__'] = 200;
271  return $i['__status__'];
272 // return 200;
273 
274  // controllo diritti (esiste un id nel pacchetto dati e il gruppo può eseguire l'azione su di esso?
275  // OPPURE non esiste un id nel pacchetto dati?) getAclRights() ???
276  // if not isset id or getaclrights di entità e id è vero
277  } elseif( ! isset( $d['id'] ) || getAclRights( $c, $t, $a, $d['id'], $i, $pi ) != false ) {
278 
279  // log
280  logWrite( "diritti sufficienti per ${t}/${a}", 'controller', LOG_DEBUG );
281 
282  // debug
283  // echo 'controller ' . $t . '/' . $a . ' OK' . PHP_EOL;
284 
285  // variabile per confronto prima/dopo
286  $before = NULL;
287 
288  // recupero dati per confronto prima/dopo
289  switch( strtoupper( $a ) ) {
290  case METHOD_PUT:
291  case METHOD_REPLACE:
292  case METHOD_UPDATE:
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'] ) ) ) ) );
294  break;
295  }
296 
297  // debug
298  // echo( print_r( mysqlSelectRow( $c, 'SELECT ' . implode( ',', array_diff( $ks, array( 'id_account_aggiornamento', 'timestamp_aggiornamento' ) ) ) . ' FROM ' . $t . ' WHERE id = ?', array( array( 's' => $d['id'] ) ) ), true ) ) . PHP_EOL;
299  // echo $before . PHP_EOL;
300 
301  // controller pre query (before)
302  $cn = 'before.php';
303  $ct = array_merge(
304  glob( DIRECTORY_BASE . $cb . $cn, GLOB_BRACE ),
305  glob( DIRECTORY_BASE . $cm . $cn, GLOB_BRACE ),
306  glob( str_replace( '_', NULL, DIRECTORY_BASE . $cb . $cn ), GLOB_BRACE ),
307  glob( str_replace( '_', NULL, DIRECTORY_BASE . $cm . $cn ), GLOB_BRACE )
308  );
309  foreach( $ct as $f ) { require $f; }
310 
311  // composizione della query in base all'azione richiesta
312  switch( strtoupper( $a ) ) {
313 
314  // inserimento di un nuovo record
315  case METHOD_POST:
316 
317  // compongo la query
318  $q = "INSERT INTO $t (" . implode( ',' , $ks ) . ") VALUES (" . implode( ',' , array_fill( 0, count( $ks ), '?' ) ) . ") ";
319 
320  break;
321 
322  // modifica di un record già esistente
323  case METHOD_PUT:
324 
325  // compongo la query
326  $q = "UPDATE $t SET ";
327 
328  // compongo i campi della query
329  foreach( $ks as $k ) {
330  $tks[] = "$k = ?";
331  }
332 
333  // compongo la condizione WHERE
334  $q .= implode( ', ' , $tks ) . " WHERE id = ?";
335 
336  // aggiungo l'id per la clausola WHERE
337  $vs[] = array( 's' => $d['id'] );
338 
339  break;
340 
341  // rimpiazzo di un record già esistente
342  case METHOD_REPLACE:
343 
344  // compongo la query
345  $q = "REPLACE INTO $t (" . implode( ',' , $ks ) . ") VALUES (" . implode( ',' , array_fill( 0 , count( $ks ) , '?' ) ) . ") ";
346 
347  break;
348 
349  // aggiornamento di un record già esistente con INSERT INTO ... ON DUPLICATE KEY UPDATE
350  case METHOD_UPDATE:
351 
352  // compongo la query
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 );
356 
357  break;
358 
359  // eliminazione di un record già esistente
360  case METHOD_DELETE:
361 
362  // compongo la query
363  $q = "DELETE FROM $t WHERE id = ?";
364 
365  // forzo il reset del form
366  $r = true;
367 
368  break;
369 
370  // prelevamento di un record già esistente
371  case METHOD_GET:
372 
373  // compongo la query
374  $q = "SELECT * FROM ${t}";
375 
376  // compongo i campi della query
377  foreach( $ks as $k ) {
378  $tks[] = "${k} = ?";
379  }
380 
381  // compongo la condizione WHERE
382  if( is_array( $tks ) && array_filter( $tks ) ) {
383  $q .= " WHERE " . implode( ' AND ' , $tks );
384  }
385 
386  break;
387 
388  }
389 
390  // controller in query (append)
391  $cn = 'append.php';
392  $ct = array_merge(
393  glob( DIRECTORY_BASE . $cb . $cn, GLOB_BRACE ),
394  glob( DIRECTORY_BASE . $cm . $cn, GLOB_BRACE ),
395  glob( str_replace( '_', NULL, DIRECTORY_BASE . $cb . $cn ), GLOB_BRACE ),
396  glob( str_replace( '_', NULL, DIRECTORY_BASE . $cm . $cn ), GLOB_BRACE )
397  );
398  foreach( $ct as $f ) { require $f; }
399 
400  // esecuzione della query
401  switch( strtoupper( $a ) ) {
402 
403  // inserimento di un nuovo record
404  case METHOD_POST:
405 
406  // eseguo la query
407  $d['id'] = mysqlQuery( $c, $q, $vs, $e['__codes__'] );
408 
409  break;
410 
411  // modifica o cancellazione di un oggetto esistente
412  case METHOD_PUT:
413  case METHOD_DELETE:
414 
415  // eseguo la query
416  mysqlQuery( $c, $q, $vs, $e['__codes__'] );
417 
418  break;
419 
420  // rimpiazzo di un oggetto esistente
421  case METHOD_REPLACE:
422  case METHOD_UPDATE:
423 
424  // eseguo la query
425  $id = mysqlQuery( $c, $q, $vs, $e['__codes__'] );
426  $d['id'] = ( isset( $d['id'] ) && ! empty( $d['id'] ) ) ? $d['id'] : $id;
427 
428  break;
429 
430  // prelevamento di un oggetto esistente
431  case METHOD_GET:
432 
433  // eseguo la query
434  $d = mysqlQuery( $c, $q, $vs, $e['__codes__'] );
435  if( is_array( $d ) ) {
436  $d = array_shift( $d );
437  }
438 #if( $t == 'prodotti_caratteristiche' ) { echo $t . ' -> ' . $q . ' -> ' . print_r( $d, true ) . 'dati -> ' . PHP_EOL . print_r( $vs, true ) . PHP_EOL; }
439  break;
440 
441  }
442 
443  // log
444  logWrite( "eseguo ($a) la query: $q", 'controller', LOG_DEBUG );
445 
446  // debug
447  // echo 'controller ' . $t . '/' . $a . ' -> ' . $q . PHP_EOL;
448 
449  // gestione degli errori
450  // TODO
451 
452  // variabile per confronto prima/dopo
453  $after = NULL;
454 
455  // recupero dati per confronto prima/dopo
456  switch( strtoupper( $a ) ) {
457  case METHOD_POST:
458  case METHOD_PUT:
459  case METHOD_REPLACE:
460  case METHOD_UPDATE:
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'] ) ) ) ) );
462  break;
463  }
464 
465  // esito del controllo prima/dopo
466  $comparison = ( $before !== $after ) ? ( ( empty( $before ) ) ? ROW_CREATED : ROW_MODIFIED ) : ROW_UNMODIFIED;
467 
468  // debug
469  // echo( print_r( mysqlSelectRow( $c, 'SELECT ' . implode( ',', array_diff( $ks, array( 'id_account_aggiornamento', 'timestamp_aggiornamento' ) ) ) . ' FROM ' . $t . ' WHERE id = ?', array( array( 's' => $d['id'] ) ) ), true ) ) . PHP_EOL;
470  // echo $after . PHP_EOL;
471  // echo $comparison . PHP_EOL;
472 
473  // log
474  logWrite( "record $comparison per la query: ${q}", 'controller', LOG_DEBUG );
475 
476  // controller post query (after)
477  $cn = 'after.php';
478  $ct = array_merge(
479  glob( DIRECTORY_BASE . $cb . $cn, GLOB_BRACE ),
480  glob( DIRECTORY_BASE . $cm . $cn, GLOB_BRACE ),
481  glob( str_replace( '_', NULL, DIRECTORY_BASE . $cb . $cn ), GLOB_BRACE ),
482  glob( str_replace( '_', NULL, DIRECTORY_BASE . $cm . $cn ), GLOB_BRACE )
483  );
484  foreach( $ct as $f ) { require $f; }
485 
486  // reintegrazione dei sottomoduli
487  // TODO serve? a cosa serve?
488  if( is_array( $d ) ) {
489  $d = array_merge( $d, $s );
490  }
491 
492  // TODO passare anche $i ricorsivo come $d[$k][$x]
493 
494  // elaborazione dei sottomoduli
495  switch( strtoupper( $a ) ) {
496  case METHOD_POST:
497  case METHOD_PUT:
498  case METHOD_REPLACE:
499  case METHOD_UPDATE:
500  foreach( $d as $k => $v ) {
501  if( is_array( $v ) ) {
502  foreach( $v as $x => $y ) {
503  controller( $c, $d[$k][$x], $k, $a, $d['id'], $e, $i[$k][$x], $i['__auth__'] );
504 // function controller( $c, &$d, $t, $a = METHOD_GET, $p = NULL, &$e = array(), &$i = array() ) {
505  }
506  }
507  }
508  break;
509  case METHOD_GET:
510 # default:
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;
514 #print_r( $x );
515  foreach( $x as $ref ) {
516 #print_r( $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 );
519  $rows = mysqlQuery( $c, $q );
520  logWrite( "cerco le referenze a ".$ref['TABLE_NAME']." dove ".$ref['COLUMN_NAME']." è ".$d['id'].", ".count( $rows )." referenze trovate", 'controller', LOG_DEBUG );
521  $tStart = timerNow();
522  $ix = 0;
523  foreach( $rows as $row ) {
524 #echo $q . PHP_EOL;
525 #print_r( $row );
526 #echo $ref['TABLE_NAME'] . PHP_EOL;
527 #echo $i . 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();
535 // controller( $c, $d[ $ref['TABLE_NAME'] ][ $ix ], $ref['TABLE_NAME'], $a, NULL, $r, $e[ $ref['TABLE_NAME'] ][ $ix ], $i[ $ref['TABLE_NAME'] ][ $ix ] );
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__'] );
537 // controller( $c, &$d, $t, $a = METHOD_GET, $p = NULL, &$e = array(), &$i = array() ) {
538  $ix++;
539  }
540  }
541  $tDone = timerDiff( $tStart );
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);
544  }
545  }
546  }
547  break;
548  }
549 
550  // controller post elaborazione (finally)
551  $cn = 'finally.php';
552  $ct = array_merge(
553  glob( DIRECTORY_BASE . $cb . $cn, GLOB_BRACE ),
554  glob( DIRECTORY_BASE . $cm . $cn, GLOB_BRACE ),
555  glob( str_replace( '_', NULL, DIRECTORY_BASE . $cb . $cn ), GLOB_BRACE ),
556  glob( str_replace( '_', NULL, DIRECTORY_BASE . $cm . $cn ), GLOB_BRACE )
557  );
558  foreach( $ct as $f ) { require $f; }
559 
560  // svuotamento o integrazione del blocco dati
561  if( $r ) {
562  $_SESSION['__latest__'][ $t ] = $d;
563  $d = array();
564  } else {
565  switch( strtoupper( $a ) ) {
566  case METHOD_GET:
567  case METHOD_POST:
568  case METHOD_PUT:
569  case METHOD_REPLACE:
570  case METHOD_UPDATE:
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 ); }
573  break;
574  }
575  }
576 
577  // TODO il valore di ritorno di questo ramo dipende dall'esito delle operazioni sopra
578  $i['__status__'] = 200;
579  return $i['__status__'];
580 
581  }
582 
583  }
584 
585  // restituisco 401 unauthorized
586  $i['__status__'] = 401;
587  return $i['__status__'];
588 
589  }
590 
591 ?>
const METHOD_UPDATE
Definition: _config.php:285
mysqlSelectRow( $c, $q, $p=false, &$e=array())
if(isset( $cx['contatti'])) if(isset( $cf['site']['contatti'])) $ct['contatti']
Definition: _035.common.php:24
string2boolean( $s)
logWrite( $m, $f='site', $l=LOG_NOTICE, $d=DIRECTORY_LOG, $t=CURRENT_LOG_LEVEL, $s=SITE_STATUS)
scrive un messaggio nei log del sito
Definition: _log.utils.php:48
controller( $c, &$d, $t, $a=METHOD_GET, $p=NULL, &$e=array(), &$i=array(), &$pi=array())
$p['ricerca']
const METHOD_REPLACE
Definition: _config.php:284
timerDiff( $start=START_TIME, $now=NULL)
$f
Definition: _filesystem.php:21
mysqlQuery( $c, $q, $p=false, &$e=array())
if(!empty($_REQUEST['id'])) $d
getAclRightsAccountId()
Definition: _acl.utils.php:272
const ROW_CREATED
$a
Definition: _slack.php:21
const ROW_UNMODIFIED
mysqlSelectValue( $c, $q, $p=false, &$e=array())
timerNow()
const METHOD_POST
Definition: _config.php:282
$r
Definition: _osm.php:25
$e
Definition: _slack.php:121
getAclRightsTable( $c, $t)
Definition: _acl.utils.php:283
const ROW_MODIFIED
const MODULI_ATTIVI
Definition: _config.php:387
const DIRECTORY_BASE
Definition: _osm.php:3
if(isset( $_REQUEST['amazonCheckoutSessionId'])) $_SESSION['carrello']
const METHOD_GET
Definition: _config.php:280
const DIRECTORY_CONTROLLER
Definition: _config.php:260
const METHOD_DELETE
Definition: _config.php:279
const DIRECTORY_MODULI
Definition: _config.php:256
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__')
arrayKeyValuesImplode( $array, $tk1, $tk2, $empty=false)
const METHOD_PUT
Definition: _config.php:283
getAclPermission( $t, $a, &$i=NULL)
Definition: _acl.utils.php:44
getAclRights( $c, $t, $a, $id, &$i=NULL)
Definition: _acl.utils.php:91