Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6 | Andrea | 1 | <?php |
2 | |||
3 | /****************************************************************************** |
||
4 | |||
5 | Titolo: DynaCombus (also known as aligner) |
||
6 | Versione: v5.3 |
||
7 | |||
8 | Creato: March 16, 2002 23:55:57 |
||
9 | Aggiornato: January 23, 2003 19:27:18 |
||
10 | |||
11 | Autore: Maxim Maletsky (maxim@php.net) |
||
12 | |||
13 | Descrizione: DunaCombus e la classe per formattare e visualizzare i dati |
||
14 | nei campi <SELECT> di puro HTML per una presentazione dati |
||
15 | più prattico, usando un algorithmo logico dinamico e stabile. |
||
16 | |||
17 | Una volta chiamato, DynaCombus, ricevendo un array, usa |
||
18 | i parametri predefini nello sdcript, e crea una SELECT con |
||
19 | i dati allineati per una visione più precisa. |
||
20 | |||
21 | Le utilità principali di DunaCombus consitono di una |
||
22 | consistenza del layout HTML sulla pagina, permettendo cosi |
||
23 | una stabilità della presentazione molto utile per la creazione |
||
24 | dei programmi PHP stand-alone. Usa una logica ben precisa e |
||
25 | stabile per la rappresentazione della tabella SELECT. |
||
26 | |||
27 | Creato ed inteso come il componente chiave per |
||
28 | il progetto di Catasto. |
||
29 | |||
30 | Features: 1. Stand-Alone look and feel. |
||
31 | 2. 100% personalizzabile layout con una estrema semplicità, |
||
32 | usabilità e dynamicità. A punto il nome. |
||
33 | 3. Crea una lista scrollabile senza mai ricorrere a frames |
||
34 | 4. Seleziona dalla lista (per un submit) più record alla volta |
||
35 | 5. Crea le liste dei dati dinamicamente, e più facile |
||
36 | 6. Stabilità di layout - le variazioni dei dati non |
||
37 | influiscono sulla misura della SELECT che rimarrebbe |
||
38 | comunque fissata (personalizabile) |
||
39 | |||
40 | ******************************************************************************/ |
||
41 | |||
42 | if(!function_exists('getmicrotime')) { |
||
43 | function getmicrotime(){ |
||
44 | list($usec, $sec) = explode(" ",microtime()); |
||
45 | return ((float)$usec + (float)$sec); |
||
46 | } |
||
47 | } |
||
48 | |||
49 | //include_once 'DynaCache.inc.php'; |
||
50 | |||
51 | Class DC { |
||
52 | |||
53 | /********************************************************** |
||
54 | Variabili Publici |
||
55 | *********************************************************/ |
||
56 | var $tag = Array(); |
||
57 | |||
58 | /********************************************************** |
||
59 | Variabili Privati |
||
60 | *********************************************************/ |
||
61 | var $data = Array(); |
||
62 | var $params = Array(); |
||
63 | var $width = 0; |
||
64 | var $default_params = Array(); |
||
65 | var $private_params = Array(); |
||
66 | var $defined_tags = False; |
||
67 | var $display = ''; |
||
68 | var $header = ''; |
||
69 | var $current_spacer = ''; |
||
70 | var $current_tag = ''; |
||
71 | var $r = 0; |
||
72 | var $c = 0; |
||
73 | var $cache_obj; |
||
74 | var $tmp_rows = Array(); |
||
75 | |||
76 | |||
77 | var $cache = False; |
||
78 | var $debug = False; |
||
79 | |||
80 | /********************************************************** |
||
81 | Funzione: assign_default_tags() |
||
82 | Ritorno: True |
||
83 | |||
84 | La funzione assign_default_tags() e usata aer creare |
||
85 | i valori di default per i variabili piu importanti che |
||
86 | non siano gia assegnati da utente durante la |
||
87 | costruzione della combo. |
||
88 | *********************************************************/ |
||
89 | |||
90 | function assign_default_tags() { |
||
91 | /********************************************************** |
||
92 | OVERWRITE |
||
93 | |||
94 | Controlla se la riga deve avere la precedenza o la |
||
95 | colonna. Settata per default per la colonna. |
||
96 | |||
97 | L'ordine di OVERWRITE sara lo stesso come nelle |
||
98 | prossime due righe (prevale quella superiore) |
||
99 | *********************************************************/ |
||
100 | $this->default_params['table']['overwrite'][] = 'cols'; |
||
101 | $this->default_params['table']['overwrite'][] = 'rows'; |
||
102 | |||
103 | /********************************************************** |
||
104 | MARGINS |
||
105 | |||
106 | I margini della tabella, ovvero le distanze minime |
||
107 | fra le colonne |
||
108 | *********************************************************/ |
||
109 | $this->default_params['table']['margins'] = 1; |
||
110 | |||
111 | /********************************************************** |
||
112 | ALIGN |
||
113 | |||
114 | Allegniamento. Default SINISTRO |
||
115 | *********************************************************/ |
||
116 | $this->default_params['table']['align'] = 'left'; |
||
117 | |||
118 | /********************************************************** |
||
119 | SELECTED |
||
120 | |||
121 | Allegniamento. Default SINISTRO |
||
122 | *********************************************************/ |
||
123 | $this->default_params['table']['selected'] = ''; |
||
124 | |||
125 | /********************************************************** |
||
126 | DISABLED |
||
127 | |||
128 | Disabilitazione. Default 0 |
||
129 | *********************************************************/ |
||
130 | $this->default_params['table']['disabled'] = ''; |
||
131 | |||
132 | /********************************************************** |
||
133 | Carattere di Spazio |
||
134 | |||
135 | Default uno spazion vuoto ' ' |
||
136 | *********************************************************/ |
||
137 | $this->default_params['table']['spacer'] = ' '; |
||
138 | |||
139 | /********************************************************** |
||
140 | Lunghezza di bordo |
||
141 | |||
142 | Default 0 |
||
143 | *********************************************************/ |
||
144 | $this->default_params['table']['border'] = 0; |
||
145 | |||
146 | /********************************************************** |
||
147 | Stile |
||
148 | |||
149 | font DEVE essere 'Courier New' |
||
150 | *********************************************************/ |
||
151 | $this->default_params['table']['style'] = 'font-weight: 500; font-size: 11px;'; |
||
152 | |||
153 | /********************************************************** |
||
154 | ALIGN |
||
155 | |||
156 | Allegniamento. Default CENTER |
||
157 | *********************************************************/ |
||
158 | $this->default_params['header']['align'] = 'center'; |
||
159 | |||
160 | /********************************************************** |
||
161 | ALIGN |
||
162 | |||
163 | Allegniamento. Default CENTER |
||
164 | *********************************************************/ |
||
165 | $this->default_params['header']['tr_align'] = 'center'; |
||
166 | |||
167 | /********************************************************** |
||
168 | ALIGN |
||
169 | |||
170 | Allegniamento. Default CENTER |
||
171 | *********************************************************/ |
||
172 | $this->default_params['header']['bgcolor'] = '#CCCCCC'; |
||
173 | |||
174 | |||
175 | /********************************************************** |
||
176 | ALIGN |
||
177 | |||
178 | Allegniamento. Default CENTER |
||
179 | *********************************************************/ |
||
180 | $this->default_params['title']['align'] = 'center'; |
||
181 | |||
182 | /********************************************************** |
||
183 | Class |
||
184 | |||
185 | Class di default e `cl' |
||
186 | *********************************************************/ |
||
187 | $this->default_params['title']['class'] = 'cl'; |
||
188 | |||
189 | /********************************************************** |
||
190 | Class |
||
191 | |||
192 | Class di default e `cl' |
||
193 | *********************************************************/ |
||
194 | $this->default_params['title']['empty'] = ' '; |
||
195 | |||
196 | /********************************************************** |
||
197 | Tag di controllo |
||
198 | |||
199 | Strutturato come: sezione : parametro : esressione |
||
200 | regolare da confrontare |
||
201 | *********************************************************/ |
||
202 | $this->control_tags = Array( |
||
203 | |||
204 | /********************************************************** |
||
205 | Tabella |
||
206 | *********************************************************/ |
||
207 | 'table' => Array( |
||
208 | |||
209 | // Larghezza della combo (numerico) |
||
210 | // 'width' => '\\d+' |
||
211 | |||
212 | // Altezza della combo, ovvero <SELECT SIZE=***> (numerico) |
||
213 | 'height' => '\\d+' |
||
214 | |||
215 | // Numero di collonne (numerico) |
||
216 | ,'columns' => '\\d+' |
||
217 | |||
218 | // Numero delle Righe (numerico) |
||
219 | ,'rows' => '\\d+' |
||
220 | |||
221 | // Grandezza delle margini tra le colonne (numerico) |
||
222 | ,'margins' => '\\d+' |
||
223 | |||
224 | // Mergine Sinistro (numerico) |
||
225 | ,'margin_left' => '\\d+' |
||
226 | |||
227 | // Mergine Destro (numerico) |
||
228 | ,'margin_right' => '\\d+' |
||
229 | |||
230 | // Bordo (numerico) |
||
231 | ,'border' => '\\d+' |
||
232 | |||
233 | // Riga selezionata (numerico) |
||
234 | // ,'selected' => '\\d+' |
||
235 | |||
236 | // Aliniamento ('left', 'right' oppure 'center') |
||
237 | ,'align' => 'left|center|right' |
||
238 | |||
239 | // Cache (numerico) |
||
240 | // ,'cache' => 'yes|no|0|1' |
||
241 | |||
242 | // Precedenza tra le colonne o righe ('cols' o 'rows') |
||
243 | ,'overwrite' => 'cols|rows' |
||
244 | |||
245 | // Nome della combo ovvero <SELECT NAME=***> (stringa) |
||
246 | ,'name' => '.+' |
||
247 | |||
248 | // Carattere usato per creare lo Spazio (stringa) |
||
249 | ,'spacer' => '.+' |
||
250 | |||
251 | // Carattere usato per creare il Bordo (stringa) |
||
252 | ,'border_char' => '.+' |
||
253 | |||
254 | // Opzione di multiselect ovvero <SELECT MULTIPLE> |
||
255 | // (True '1' o False '0') |
||
256 | ,'multiple' => '1' |
||
257 | |||
258 | // Opzione di disabilitazione <SELECT DISABLED> |
||
259 | // (True '1' o False '0') |
||
260 | ,'disabled' => '1' |
||
261 | |||
262 | // Stile aggiuntivo (stringa) |
||
263 | ,'style' => '.*' |
||
264 | |||
265 | // ID della combo ovvero <SELECT id=***> (stringa) |
||
266 | ,'id' => '.+' |
||
267 | |||
268 | // ID della combo ovvero <SELECT id=***> (stringa) |
||
269 | ,'zerofill' => '1' |
||
270 | |||
271 | // Left trim |
||
272 | ,'ltrim' => '1' |
||
273 | |||
274 | // Parametri addizionali per lo <SELECT> (stringa) |
||
275 | |||
276 | // IMPORTANTE!!! |
||
277 | |||
278 | // PARAMETRO 'ADD' DEVE ESSERE L'ULTIMO PARAMETRO |
||
279 | // SPECIFICATO! NESSUN ALTRO PARAMETRO SEQUENTE A |
||
280 | // 'ADD' VERREBBE INTERPRETTATO, E COMUNQUE, CREEREBBE |
||
281 | // DEI PROBLEMI GRAVI ALLA VISUALIZZAZIONE DI DYNACOMBUS |
||
282 | ,'add' => '.+' |
||
283 | ) |
||
284 | |||
285 | ,'cols' => Array( |
||
286 | |||
287 | // Larghezza della combo (numerico) |
||
288 | 'width' => '\\d+' |
||
289 | |||
290 | // Grandezza delle margini tra le colonne (numerico) |
||
291 | ,'margins' => '\\d+' |
||
292 | |||
293 | // Mergine Sinistro (numerico) |
||
294 | ,'margin_left' => '\\d+' |
||
295 | |||
296 | // Mergine Destro (numerico) |
||
297 | ,'margin_right' => '\\d+' |
||
298 | |||
299 | // Aliniamento ('left', 'right' oppure 'center') |
||
300 | ,'align' => 'left|center|right' |
||
301 | |||
302 | // Carattere usato per creare lo Spazio (stringa) |
||
303 | ,'spacer' => '.+' |
||
304 | |||
305 | // Carattere usato per creare il Bordo (stringa) |
||
306 | ,'border_char' => '.+' |
||
307 | ) |
||
308 | |||
309 | ,'rows' => Array( |
||
310 | |||
311 | // Aliniamento ('left', 'right' oppure 'center') |
||
312 | 'align' => 'left|center|right' |
||
313 | |||
314 | // Carattere usato per creare lo Spazio (stringa) |
||
315 | ,'spacer' => '.+' |
||
316 | |||
317 | // Carattere usato per creare il Bordo (stringa) |
||
318 | ,'border_char' => '.+' |
||
319 | |||
320 | // Riga selezionata (numerico) |
||
321 | ,'selected' => '1' |
||
322 | |||
323 | // Stile aggiuntivo (stringa) |
||
324 | ,'style' => '.*' |
||
325 | |||
326 | // ID della combo ovvero <SELECT id=***> (stringa) |
||
327 | ,'id' => '.+' |
||
328 | |||
329 | // IMPORTANTE!!! |
||
330 | |||
331 | // PARAMETRO 'ADD' DEVE ESSERE L'ULTIMO PARAMETRO |
||
332 | // SPECIFICATO! NESSUN ALTRO PARAMETRO SEQUENTE A |
||
333 | // 'ADD' VERREBBE INTERPRETTATO, E COMUNQUE, CREEREBBE |
||
334 | // DEI PROBLEMI GRAVI ALLA VISUALIZZAZIONE DI DYNACOMBUS |
||
335 | ,'add' => '.+' |
||
336 | ) |
||
337 | |||
338 | /********************************************************** |
||
339 | Header |
||
340 | *********************************************************/ |
||
341 | ,'header' => Array( |
||
342 | |||
343 | // Altezza della combo, ovvero <SELECT SIZE=***> (numerico) |
||
344 | 'height' => '\\d+' |
||
345 | |||
346 | // Aliniamento ('left', 'right' oppure 'center') |
||
347 | ,'align' => 'left|center|right' |
||
348 | |||
349 | // Aliniamento ('left', 'right' oppure 'center') |
||
350 | ,'tr_align' => 'left|center|right' |
||
351 | |||
352 | // Colore di background (stringa) |
||
353 | ,'bgcolor' => '.+' |
||
354 | |||
355 | // Stile aggiuntivo (stringa) |
||
356 | ,'style' => '.*' |
||
357 | |||
358 | // Stile aggiuntivo (stringa) |
||
359 | ,'class' => '.*' |
||
360 | |||
361 | // ID della combo ovvero <SELECT id=***> (stringa) |
||
362 | ,'id' => '.+' |
||
363 | |||
364 | // IMPORTANTE!!! |
||
365 | |||
366 | // PARAMETRO 'ADD' DEVE ESSERE L'ULTIMO PARAMETRO |
||
367 | // SPECIFICATO! NESSUN ALTRO PARAMETRO SEQUENTE A |
||
368 | // 'ADD' VERREBBE INTERPRETTATO, E COMUNQUE, CREEREBBE |
||
369 | // DEI PROBLEMI GRAVI ALLA VISUALIZZAZIONE DI DYNACOMBUS |
||
370 | ,'add' => '.+' |
||
371 | ) |
||
372 | |||
373 | ,'title' => Array( |
||
374 | |||
375 | // Aliniamento ('left', 'right' oppure 'center') |
||
376 | 'align' => 'left|center|right' |
||
377 | |||
378 | // Il testo per la creazione del titolo (stringa) |
||
379 | ,'text' => '.+' |
||
380 | |||
381 | // Stile aggiuntivo (stringa) |
||
382 | ,'style' => '.+' |
||
383 | |||
384 | // Stile aggiuntivo (stringa) |
||
385 | ,'class' => '.+' |
||
386 | |||
387 | // Colore di background (stringa) |
||
388 | ,'bgcolor' => '.+' |
||
389 | |||
390 | // ID della combo ovvero <SELECT id=***> (stringa) |
||
391 | ,'id' => '.+' |
||
392 | |||
393 | // Wrap |
||
394 | ,'wrap' => '1' |
||
395 | |||
396 | // NoWrap) |
||
397 | ,'nowrap' => '1' |
||
398 | |||
399 | // IMPORTANTE!!! |
||
400 | |||
401 | // PARAMETRO 'ADD' DEVE ESSERE L'ULTIMO PARAMETRO |
||
402 | // SPECIFICATO! NESSUN ALTRO PARAMETRO SEQUENTE A |
||
403 | // 'ADD' VERREBBE INTERPRETTATO, E COMUNQUE, CREEREBBE |
||
404 | // DEI PROBLEMI GRAVI ALLA VISUALIZZAZIONE DI DYNACOMBUS |
||
405 | ,'add' => '.+' |
||
406 | ) |
||
407 | ); |
||
408 | |||
409 | Return True; |
||
410 | } |
||
411 | |||
412 | |||
413 | |||
414 | /********************************************************** |
||
415 | Funzione: set_session() |
||
416 | Argomenti: $key |
||
417 | stringa, |
||
418 | (Chiave: <OPTION VALUE=***>) |
||
419 | |||
420 | Ritorno: string ($chiave per essere usata |
||
421 | nella modalita sessione) |
||
422 | |||
423 | |||
424 | Funzione liquidata. |
||
425 | |||
426 | Avrebbe creato un array per la sessione e ritornato |
||
427 | la sua chiave |
||
428 | *********************************************************/ |
||
429 | function set_session($key) { |
||
430 | Return $key; |
||
431 | } |
||
432 | |||
433 | |||
434 | |||
435 | /********************************************************** |
||
436 | Funzione: add_row() |
||
437 | Argomenti: $row |
||
438 | array, |
||
439 | (Array della riga) |
||
440 | |||
441 | Ritorno: True |
||
442 | |||
443 | |||
444 | Riceve array dei dati per la DynaCombus riga per riga |
||
445 | e gli registra nelle variabili privati. |
||
446 | |||
447 | *********************************************************/ |
||
448 | function add_row($row) { |
||
449 | $this->tmp_rows[] = $row; |
||
450 | Return True; |
||
451 | } |
||
452 | |||
453 | |||
454 | function add_rows($array) { |
||
455 | |||
456 | $this->make_tags(); |
||
457 | foreach($array as $row) { |
||
458 | /********************************************************** |
||
459 | Creaa i tags per quelli non defiti precedentamente |
||
460 | *********************************************************/ |
||
461 | $this->r++; |
||
462 | $key = -1; |
||
463 | |||
464 | /********************************************************** |
||
465 | Se ce un limite sulle righe ci fermiamo qui |
||
466 | *********************************************************/ |
||
467 | if(isset($this->params['table']['rows']) and $this->r>$this->params['table']['rows']+0) |
||
468 | Return True; |
||
469 | |||
470 | /********************************************************** |
||
471 | Ciclo delle righe ci |
||
472 | *********************************************************/ |
||
473 | foreach($row as $fake_key=>$val) { |
||
474 | $key++; |
||
475 | |||
476 | /********************************************************** |
||
477 | Smetiamo fare i cicli inutili se siamo fuori il |
||
478 | limite specificato delle colonne |
||
479 | *********************************************************/ |
||
480 | if(isset($this->params['table']['columns']) and $key>$this->params['table']['columns']+0) |
||
481 | Break; |
||
482 | |||
483 | /********************************************************** |
||
484 | Assegna il primo valore [0] come <OPTION VALUE> |
||
485 | *********************************************************/ |
||
486 | if($key==0) { |
||
487 | $this->data['row'][$this->r]['key'] = $this->set_session($val); |
||
488 | Continue; |
||
489 | } |
||
490 | |||
491 | /********************************************************** |
||
492 | Crea la cella |
||
493 | *********************************************************/ |
||
494 | $this->data['row'][$this->r][$key]['data'] = $val; |
||
495 | |||
496 | /********************************************************** |
||
497 | Memorizza la lunghezza |
||
498 | *********************************************************/ |
||
499 | $this->data['row'][$this->r][$key]['length'] = strlen($val); |
||
500 | |||
501 | /********************************************************** |
||
502 | Calcola la massima lunghezza della colonna |
||
503 | *********************************************************/ |
||
504 | if($this->data['row'][$this->r][$key]['length']>=@$this->data['params']['cols']['width'][$key]) { |
||
505 | $this->data['params']['cols']['width'][$key] = $this->data['row'][$this->r][$key]['length']; |
||
506 | } |
||
507 | |||
508 | /********************************************************** |
||
509 | Calcola il numero massimo delle colonne |
||
510 | *********************************************************/ |
||
511 | if(!isset($this->params['table']['columns']) and $key>@$this->private_params['table']['columns']) |
||
512 | $this->private_params['table']['columns'] = $key; |
||
513 | } |
||
514 | } |
||
515 | |||
516 | Return True; |
||
517 | } |
||
518 | |||
519 | |||
520 | |||
521 | /********************************************************** |
||
522 | |||
523 | Funzione: row_left() |
||
524 | Ritorno: Array (spazio SINISTRO , spazio DESTRO) |
||
525 | |||
526 | |||
527 | Allineamento SINISTRO |
||
528 | Allocazione delle lunghezze per DESTRO e SINISTRO. |
||
529 | |||
530 | *********************************************************/ |
||
531 | function row_left() { |
||
532 | Return Array( |
||
533 | 0, |
||
534 | $this->remained |
||
535 | ); |
||
536 | } |
||
537 | |||
538 | |||
539 | |||
540 | /********************************************************** |
||
541 | |||
542 | Funzione: row_right() |
||
543 | Ritorno: Array (spazio SINISTRO , spazio DESTRO) |
||
544 | |||
545 | |||
546 | Allineamento DESTRO |
||
547 | Allocazione delle lunghezze per DESTRO e SINISTRO. |
||
548 | |||
549 | *********************************************************/ |
||
550 | function row_right() { |
||
551 | Return Array( |
||
552 | $this->remained, |
||
553 | |||
554 | ); |
||
555 | } |
||
556 | |||
557 | |||
558 | |||
559 | /********************************************************** |
||
560 | |||
561 | Funzione: row_center() |
||
562 | Ritorno: Array (spazio SINISTRO , spazio DESTRO) |
||
563 | |||
564 | |||
565 | Allineamento CENTRO |
||
566 | Allocazione delle lunghezze per DESTRO e SINISTRO. |
||
567 | |||
568 | *********************************************************/ |
||
569 | function row_center() { |
||
570 | $num = $this->remained/2; |
||
571 | Return Array( |
||
572 | floor($num), |
||
573 | ceil($num) |
||
574 | ); |
||
575 | } |
||
576 | |||
577 | |||
578 | |||
579 | /********************************************************** |
||
580 | |||
581 | Funzione: overlap() |
||
582 | Argomenti: $parameter |
||
583 | string, |
||
584 | (nome del parametro) |
||
585 | |||
586 | Ritorno: string (valore del parametro) |
||
587 | |||
588 | |||
589 | Calcola se il valore da utilizzare per un parametro |
||
590 | basandosi sulla precedenza usata della configurazione. |
||
591 | |||
592 | Prova prima il valore disponibile, se sono |
||
593 | disponbibili entrambi usa quello appartenete |
||
594 | alla proprieta di precedenza |
||
595 | |||
596 | *********************************************************/ |
||
597 | function overlap($parameter) { |
||
598 | for($i=0; $i<=1; $i++) |
||
599 | if(isset($this->params[$this->params['table']['overwrite'][$i]][$this->{$this->params['table']['overwrite'][$i]}][$parameter])) |
||
600 | Return $this->params[$this->params['table']['overwrite'][$i]][$this->{$this->params['table']['overwrite'][$i]}][$parameter]; |
||
601 | Return @$this->params['table'][$parameter]; |
||
602 | } |
||
603 | |||
604 | |||
605 | |||
606 | /********************************************************** |
||
607 | |||
608 | Funzione: combiner() |
||
609 | Argomenti: $num |
||
610 | intero, |
||
611 | (numero di ripetizione della stringa) |
||
612 | |||
613 | Ritorno: string (stringa ripetuta N volte) |
||
614 | |||
615 | |||
616 | Ripete una stringa N numero di volte |
||
617 | |||
618 | *********************************************************/ |
||
619 | function combiner($num) { |
||
620 | Return str_repeat($this->current_spacer, $num); |
||
621 | } |
||
622 | |||
623 | |||
624 | |||
625 | /********************************************************** |
||
626 | |||
627 | Funzione: Creator() |
||
628 | |||
629 | L'algorithmo chiave della DynaCombus. |
||
630 | |||
631 | Crea un ciclo di tutte le righe multiplicando per |
||
632 | ogni colonna e crea una stringa HTML quasi pronta |
||
633 | per la visuallizazione |
||
634 | |||
635 | *********************************************************/ |
||
636 | function Creator() { |
||
637 | /********************************************************** |
||
638 | Il ciclo delle righe |
||
639 | *********************************************************/ |
||
640 | for($this->rows=1; $this->rows<=$this->params['table']['rows']; $this->rows++) { |
||
641 | |||
642 | /********************************************************** |
||
643 | Presetta i parametri per ogni opzione |
||
644 | *********************************************************/ |
||
645 | @$this->output .= "<option value=\"{$this->data['row'][$this->rows]['key']}\""; |
||
646 | |||
647 | if(isset($this->params['rows'][$this->rows]['style'])) |
||
648 | $this->output .= " style=\"{$this->params['rows'][$this->rows]['style']}\""; |
||
649 | |||
650 | if(isset($this->params['rows'][$this->rows]['id'])) |
||
651 | $this->output .= " id=\"{$this->params['rows'][$this->rows]['id']}\""; |
||
652 | |||
653 | if(isset($this->params['rows'][$this->rows]['add'])) |
||
654 | $this->output .= " {$this->params['rows'][$this->rows]['add']}"; |
||
655 | |||
656 | if(isset($this->params['rows'][$this->rows]['selected'])) |
||
657 | $this->output .= ' selected'; |
||
658 | |||
659 | $this->output .= '>'; |
||
660 | |||
661 | if(!isset($this->params['table']['ltrim'])) |
||
662 | $this->output .= ' '; |
||
663 | |||
664 | /********************************************************** |
||
665 | Il ciclo delle colonne |
||
666 | *********************************************************/ |
||
667 | for($this->cols=1; $this->cols<=$this->params['table']['columns']; $this->cols++) { |
||
668 | |||
669 | /********************************************************** |
||
670 | Prepara i valori per ognio colonna |
||
671 | *********************************************************/ |
||
672 | $align = $this->overlap('align'); |
||
673 | $this->current_spacer = $this->overlap('spacer'); |
||
674 | $this->remained = @$this->data['params']['cols']['width'][$this->cols] - @$this->data['row'][$this->rows][$this->cols]['length']; |
||
675 | |||
676 | if($this->rows == 1 and $this->cols == 1) |
||
677 | $this->params['cols'][1]['total'] = 2; |
||
678 | |||
679 | |||
680 | /********************************************************** |
||
681 | Algorithmo di larghezza. |
||
682 | |||
683 | Ritorna una variabile privata REMAINED per un uso |
||
684 | indispensabile allineando le colonne |
||
685 | |||
686 | Usato ad ogni ciclo |
||
687 | *********************************************************/ |
||
688 | if(isset($this->params['cols'][$this->cols]['width'])) { |
||
689 | $width = @$this->params['cols'][$this->cols]['margin_left']+@$this->data['params']['cols']['width'][$this->cols]+@$this->params['cols'][$this->cols]['margin_right']; |
||
690 | $difference = $this->params['cols'][$this->cols]['width']-$width; |
||
691 | |||
692 | if($difference>0) |
||
693 | $this->remained = $this->remained + $difference; |
||
694 | } |
||
695 | |||
696 | /********************************************************** |
||
697 | Algorithmo di bordo. |
||
698 | |||
699 | Calcola le precedenze del bordo e modifica le |
||
700 | lunghezze delle colonne |
||
701 | |||
702 | Usata una prima volta sola |
||
703 | *********************************************************/ |
||
704 | if(isset($this->params['table']['border']) and $this->params['table']['border']>0 and $this->cols>1) { |
||
705 | $border_char = $this->overlap('border_char'); |
||
706 | |||
707 | $output = strlen($border_char) ? str_repeat($border_char, $this->params['table']['border']) : $this->combiner($this->params['table']['border']); |
||
708 | |||
709 | $this->output .= $output; |
||
710 | |||
711 | if($this->rows == 1) |
||
712 | @$this->params['cols'][$this->cols]['total'] += strlen($output); |
||
713 | } |
||
714 | |||
715 | /********************************************************** |
||
716 | Algorithmo di allineamento. |
||
717 | |||
718 | Chiama la funzione dinamicamente basandosi sulla |
||
719 | definizione allineamento per la colonna |
||
720 | |||
721 | Usato ad ogni ciclo |
||
722 | |||
723 | ** |
||
724 | Modificato il 23/07/2003 per problemi con il rilevamento |
||
725 | dinamico del metodo richiesto |
||
726 | ** |
||
727 | *********************************************************/ |
||
728 | if (method_exists($this,"row_$align")) |
||
729 | $values = $this->{"row_$align"}(); |
||
730 | else |
||
731 | $values = $this->row_left(); |
||
732 | |||
733 | |||
734 | /********************************************************** |
||
735 | Algorithmo di output. |
||
736 | |||
737 | Compone una stringa basandosi su tutti i valori |
||
738 | precreati sopra |
||
739 | |||
740 | Usato ad ogni ciclo |
||
741 | *********************************************************/ |
||
742 | /********************************************************** |
||
743 | Ritorno della colonna |
||
744 | *********************************************************/ |
||
745 | |||
746 | $output = $this->combiner($values[0]+$this->params['cols'][$this->cols]['margin_left']) . @$this->data['row'][$this->rows][$this->cols]['data'] . $this->combiner($values[1]+$this->params['cols'][$this->cols]['margin_right']); |
||
747 | |||
748 | $this->output .= htmlspecialchars($output); |
||
749 | |||
750 | if($this->rows == 1) { |
||
751 | @$this->params['cols'][$this->cols]['total'] += strlen($output); |
||
752 | $this->width += $this->params['cols'][$this->cols]['total']; |
||
753 | } |
||
754 | } |
||
755 | |||
756 | /********************************************************** |
||
757 | Ritorno della riga |
||
758 | *********************************************************/ |
||
759 | $this->output .= "</option>\n"; |
||
760 | } |
||
761 | } |
||
762 | |||
763 | |||
764 | |||
765 | /********************************************************** |
||
766 | |||
767 | Funzione: parser() |
||
768 | Argomenti: $tag |
||
769 | stringa, |
||
770 | (la stringa dei definizioni della DC) |
||
771 | |||
772 | Ritorno: string (Array interno dei parametri) |
||
773 | |||
774 | |||
775 | Parsa la stringa dei parametri passata alla DynaCombus |
||
776 | e importa i valori |
||
777 | |||
778 | *********************************************************/ |
||
779 | function parser($tag) { |
||
780 | $tag = trim($tag); |
||
781 | /********************************************************** |
||
782 | Parsa la stringa |
||
783 | *********************************************************/ |
||
784 | preg_match_all("/([^\s=]+)[\s]*=[\s]*[\\\"']([^\\\"']*)[\\\"']/", $tag, $parsed); |
||
785 | for($i=0; $i<sizeof($parsed[0]); $i++) { |
||
786 | /********************************************************** |
||
787 | Tutto in minuscolo |
||
788 | *********************************************************/ |
||
789 | $key = strtolower($parsed[1][$i]); |
||
790 | |||
791 | /********************************************************** |
||
792 | Controllo per il parametro ADD |
||
793 | *********************************************************/ |
||
794 | if($key=='add' and $this->control_tags[$this->current_tag][$key]) { |
||
795 | $haystack = strrev($tag); |
||
796 | $pos = strpos($haystack, strrev($parsed[0][$i])); |
||
797 | if(!$pos) |
||
798 | $checked = $parsed[2][$i]; |
||
799 | else { |
||
800 | $remained = $parsed[0][$i].strrev(substr($haystack, 1, $pos-1)); |
||
801 | $checked = substr(trim(substr($remained, strpos($remained, '=')+1)), 1); |
||
802 | } |
||
803 | } |
||
804 | else { |
||
805 | /********************************************************** |
||
806 | Rimpiazza '-' con '_'. |
||
807 | Non vogliamo iernamente nessun '-' |
||
808 | *********************************************************/ |
||
809 | $key = str_replace('-', '_', $key); |
||
810 | /********************************************************** |
||
811 | Controlla se il tag ricevuto e riconosciuto |
||
812 | dalla DynaCombus. Se non lo e - verra ignorato |
||
813 | *********************************************************/ |
||
814 | $checked = (@$this->control_tags[$this->current_tag][$key] and preg_match("/^(".@$this->control_tags[$this->current_tag][$key].")+$/i", $parsed[2][$i])) ? ($key=='text'? $parsed[2][$i] : strtolower($parsed[2][$i])) : False; |
||
815 | } |
||
816 | if($checked !== False) { |
||
817 | $result[$key] = $checked; |
||
818 | } |
||
819 | } |
||
820 | Return is_array(@$result) ? $result : False; |
||
821 | } |
||
822 | |||
823 | |||
824 | |||
825 | /********************************************************** |
||
826 | |||
827 | Funzione: make_tags() |
||
828 | |||
829 | Ritorno: True |
||
830 | |||
831 | |||
832 | Assegna i parametri passati dal utente nella |
||
833 | configurazione interna della DynaCombus |
||
834 | |||
835 | make_tags viene chiamata durante la chiamata al |
||
836 | methodo DYSPLAY e ad ogni chiamata della ADD_ROW. |
||
837 | Comunque, dato che per ogni parametro si parsa una |
||
838 | volta sola questo e abbastanza dinamico e gestibile |
||
839 | |||
840 | *********************************************************/ |
||
841 | function make_tags() { |
||
842 | |||
843 | /********************************************************** |
||
844 | Se i tag non si sono - non si va avanti |
||
845 | *********************************************************/ |
||
846 | if(!isset($this->tag)) |
||
847 | Return False; |
||
848 | |||
849 | /********************************************************** |
||
850 | Se entrato per la prima volta si assegnano i valori |
||
851 | di default come la prima cosa (non si sa mai se ne |
||
852 | avremo abastanza tempo dopo) |
||
853 | *********************************************************/ |
||
854 | if(!$this->default_params) |
||
855 | $this->assign_default_tags(); |
||
856 | |||
857 | if($this->debug) |
||
858 | $time_start = getmicrotime(); |
||
859 | |||
860 | if($this->cache) { |
||
861 | |||
862 | if(!$this->cache_obj) { |
||
863 | $this->cache_obj = new DynaCache('DynaCombus'); |
||
864 | } |
||
865 | |||
866 | $fname = md5(serialize($this->tag)); |
||
867 | $rc = $this->cache_obj->read($fname, $result); |
||
868 | } |
||
869 | else |
||
870 | $rc = True; |
||
871 | |||
872 | if(!$rc) { |
||
873 | $this->params = $result; |
||
874 | } |
||
875 | |||
876 | else { |
||
877 | |||
878 | // Debug |
||
879 | if($this->debug) |
||
880 | echo "Params ::: \$this->cache_obj->read : [$rc]<br>"; |
||
881 | |||
882 | // Loop |
||
883 | foreach($this->tag as $key=>$val) { |
||
884 | $this->current_tag = $key; |
||
885 | /********************************************************** |
||
886 | Ci limitiamo solo con i tag che si servono |
||
887 | *********************************************************/ |
||
888 | if(!is_array($val)) { |
||
889 | /********************************************************** |
||
890 | Parsa e ritonaci l'array dei valori |
||
891 | *********************************************************/ |
||
892 | $parsed_result = $this->parser($val); |
||
893 | /********************************************************** |
||
894 | Mischia i variabili importati |
||
895 | *********************************************************/ |
||
896 | if($parsed_result) |
||
897 | $this->params[$key] = @array_merge($this->params[$key], $parsed_result); |
||
898 | } |
||
899 | else { |
||
900 | /********************************************************** |
||
901 | Cols e Rows sono i sotto array, per cio vengolno |
||
902 | trattati diversamente |
||
903 | *********************************************************/ |
||
904 | foreach($val as $td_k=>$td_v) { |
||
905 | /********************************************************** |
||
906 | Estrae la chiave |
||
907 | *********************************************************/ |
||
908 | preg_match_all("/(\d+)[^\d]*/", $td_k, $td_keys); |
||
909 | /********************************************************** |
||
910 | Parsa |
||
911 | *********************************************************/ |
||
912 | $parsed_result = $this->parser($td_v); |
||
913 | if($parsed_result) { |
||
914 | for($i=0; $i<sizeof($td_keys[1]); $i++) { |
||
915 | /********************************************************** |
||
916 | Importa l'array |
||
917 | *********************************************************/ |
||
918 | @$this->params[$key][$td_keys[1][$i]] = array_merge($this->params[$key][$td_keys[1][$i]], $parsed_result); |
||
919 | } |
||
920 | } |
||
921 | } |
||
922 | } |
||
923 | } |
||
924 | |||
925 | if($this->cache) |
||
926 | $rc = $this->cache_obj->write($fname, @$this->params, 60*5); |
||
927 | |||
928 | if($this->debug) |
||
929 | echo "Params ::: \$this->cache_obj->write : [$rc]<br>"; |
||
930 | } |
||
931 | |||
932 | if($this->debug) |
||
933 | echo "Params ::: Timer : " . round((getmicrotime()-$time_start)*1000, 3) . "<br>"; |
||
934 | |||
935 | /********************************************************** |
||
936 | Ucidi il parametro TAG, non vogliamo rifarlo |
||
937 | ancora come se non bastasse |
||
938 | *********************************************************/ |
||
939 | unset($this->tag); |
||
940 | |||
941 | Return True; |
||
942 | } |
||
943 | |||
944 | |||
945 | |||
946 | /********************************************************** |
||
947 | |||
948 | Funzione: display() |
||
949 | Argomenti: $array |
||
950 | array, |
||
951 | defaukt=False, |
||
952 | (array dei dati) |
||
953 | |||
954 | Ritorno: string (output HTML della <SELECT ***>) |
||
955 | |||
956 | |||
957 | Funzione principale per visuallizare il contenuto dei |
||
958 | dati nella <SELECT>. Si basa sui parametri passati |
||
959 | alla DynaCombus ed e capace di importare i dati |
||
960 | preformattati da se stessa. |
||
961 | |||
962 | *********************************************************/ |
||
963 | function display($array=False) { |
||
964 | |||
965 | /********************************************************** |
||
966 | Crea i tag se non sono gia creati |
||
967 | *********************************************************/ |
||
968 | $this->make_tags(); |
||
969 | /********************************************************** |
||
970 | Se entrato per la prima volta si assegnano i valori |
||
971 | di default |
||
972 | *********************************************************/ |
||
973 | if(!$this->default_params) |
||
974 | $this->assign_default_tags(); |
||
975 | |||
976 | /********************************************************** |
||
977 | Se i dati sono passati alla funzione, un loop imitera |
||
978 | le chiamate all add_row |
||
979 | *********************************************************/ |
||
980 | |||
981 | if(is_array($array)) |
||
982 | foreach($array as $row) |
||
983 | $this->add_row($row); |
||
984 | |||
985 | if($this->debug) |
||
986 | $time_start = getmicrotime(); |
||
987 | |||
988 | if($this->cache) { |
||
989 | if(!$this->cache_obj) { |
||
990 | $this->cache_obj = new DynaCache('DynaCombus'); |
||
991 | } |
||
992 | |||
993 | $fname = md5(md5(serialize($this->params)) . md5(serialize($this->tmp_rows))); |
||
994 | $rc = $this->cache_obj->read("display_$fname", $data); |
||
995 | } |
||
996 | else { |
||
997 | $rc = 1; |
||
998 | } |
||
999 | |||
1000 | if(!$rc) { |
||
1001 | $this->params = $data[0]; |
||
1002 | $output = $data[1]; |
||
1003 | } |
||
1004 | else { |
||
1005 | |||
1006 | // Debug |
||
1007 | if($this->debug) |
||
1008 | echo "Data ::: \$this->cache_obj->read : [$rc]<br>"; |
||
1009 | |||
1010 | $this->add_rows($this->tmp_rows); |
||
1011 | |||
1012 | /********************************************************** |
||
1013 | Perfezione dei parametri DynaCombus. |
||
1014 | |||
1015 | Molti parametri verrano cambiati qua dato che non |
||
1016 | tutto e possibile. Anche, per molti parametri non |
||
1017 | passati qui ci verrano assegnati dei valori iniziali |
||
1018 | *********************************************************/ |
||
1019 | |||
1020 | /********************************************************** |
||
1021 | Specifica chi tra colonne e row abbia la precedenza |
||
1022 | *********************************************************/ |
||
1023 | if(!isset($this->params['table']['overwrite'])) |
||
1024 | $this->params['table']['overwrite'] = $this->default_params['table']['overwrite']; |
||
1025 | else { |
||
1026 | $specified = $this->params['table']['overwrite']; |
||
1027 | unset($this->params['table']['overwrite']); |
||
1028 | $this->params['table']['overwrite'] = Array( |
||
1029 | $specified, |
||
1030 | ($specified=='cols' ? 'rows' : 'cols') |
||
1031 | ); |
||
1032 | } |
||
1033 | |||
1034 | /********************************************************** |
||
1035 | Numero delle colonne |
||
1036 | *********************************************************/ |
||
1037 | if(!isset($this->params['table']['columns'])) { |
||
1038 | if(!$this->r) { |
||
1039 | @krsort($this->params['cols']); |
||
1040 | @reset($this->params['cols']); |
||
1041 | $this->params['table']['columns'] = @key($this->params['cols']); |
||
1042 | } |
||
1043 | else |
||
1044 | $this->params['table']['columns'] = $this->private_params['table']['columns']; |
||
1045 | } |
||
1046 | |||
1047 | /********************************************************** |
||
1048 | Aggiusta la tabella con ZeroFill |
||
1049 | *********************************************************/ |
||
1050 | if(isset($this->params['table']['zerofill']) and $this->params['table']['zerofill']>0) |
||
1051 | while($this->params['table']['height'] > $this->r) |
||
1052 | $this->add_row(Array()); |
||
1053 | |||
1054 | /********************************************************** |
||
1055 | Numero delle righe |
||
1056 | *********************************************************/ |
||
1057 | if(!isset($this->params['table']['rows'])) |
||
1058 | $this->params['table']['rows'] = $this->r ? $this->r : 1; |
||
1059 | |||
1060 | /********************************************************** |
||
1061 | Altezza della tabella |
||
1062 | *********************************************************/ |
||
1063 | if(!isset($this->params['table']['height'])) |
||
1064 | $this->params['table']['height'] = $this->params['table']['rows']; |
||
1065 | |||
1066 | |||
1067 | |||
1068 | /********************************************************** |
||
1069 | Allineamento della tabella |
||
1070 | *********************************************************/ |
||
1071 | if(!isset($this->params['table']['align'])) |
||
1072 | $this->params['table']['align'] = $this->default_params['table']['align']; |
||
1073 | |||
1074 | /********************************************************** |
||
1075 | I margini delle colonne |
||
1076 | *********************************************************/ |
||
1077 | if(!@$this->params['table']['margins']) |
||
1078 | $this->params['table']['margins'] = $this->default_params['table']['margins']; |
||
1079 | |||
1080 | if(!@$this->params['table']['margin_left']) |
||
1081 | $this->params['table']['margin_left'] = $this->params['table']['margins']; |
||
1082 | |||
1083 | if(!@$this->params['table']['margin_right']) |
||
1084 | $this->params['table']['margin_right'] = $this->params['table']['margins']; |
||
1085 | |||
1086 | /********************************************************** |
||
1087 | I *VERI* valori delle margini delle colonne. |
||
1088 | |||
1089 | Il fatto e che ci sarebbe da prendere in |
||
1090 | considerazione quale tra cols o rows ha la precedenza |
||
1091 | per dare un valore giusto ai margins. Sono utilizzati |
||
1092 | cosi come sono, quindi hanno bisogno di una |
||
1093 | precisione totale |
||
1094 | *********************************************************/ |
||
1095 | for($i=1; $i<=$this->params['table']['columns']; $i++) { |
||
1096 | |||
1097 | /********************************************************** |
||
1098 | Sinistro |
||
1099 | *********************************************************/ |
||
1100 | if(!@$this->params['cols'][$i]['margin_left']) |
||
1101 | $this->params['cols'][$i]['margin_left'] = @$this->params['cols'][$i]['margins'] ? $this->params['cols'][$i]['margins'] : $this->params['table']['margin_left']; |
||
1102 | |||
1103 | /********************************************************** |
||
1104 | Destro |
||
1105 | *********************************************************/ |
||
1106 | if(!@$this->params['cols'][$i]['margin_right']) |
||
1107 | $this->params['cols'][$i]['margin_right'] = isset($this->params['cols'][$i]['margins']) ? $this->params['cols'][$i]['margins'] : $this->params['table']['margin_right']; |
||
1108 | |||
1109 | |||
1110 | /********************************************************** |
||
1111 | Heder |
||
1112 | *********************************************************/ |
||
1113 | if(!@$this->params['title'][$i]['class']) |
||
1114 | $this->params['title'][$i]['class'] = $this->default_params['title']['class']; |
||
1115 | |||
1116 | if(!@$this->params['title'][$i]['align']) |
||
1117 | $this->params['title'][$i]['align'] = $this->default_params['title']['align']; |
||
1118 | } |
||
1119 | |||
1120 | if(!@$this->params['header']['align']) |
||
1121 | $this->params['header']['align'] = $this->default_params['header']['align']; |
||
1122 | |||
1123 | if(!@$this->params['header']['tr_align']) |
||
1124 | $this->params['header']['tr_align'] = $this->default_params['header']['tr_align']; |
||
1125 | |||
1126 | if(!@$this->params['header']['bgcolor']) |
||
1127 | $this->params['header']['bgcolor'] = $this->default_params['header']['bgcolor']; |
||
1128 | |||
1129 | /********************************************************** |
||
1130 | La riga preselezionata. <OPTION SELECTED> |
||
1131 | *********************************************************/ |
||
1132 | if(!isset($this->params['table']['selected'])) |
||
1133 | $this->params['table']['selected'] = $this->default_params['table']['selected']; |
||
1134 | |||
1135 | /********************************************************** |
||
1136 | Carattere di spazio |
||
1137 | *********************************************************/ |
||
1138 | if(!isset($this->params['table']['spacer'])) |
||
1139 | $this->params['table']['spacer'] = $this->default_params['table']['spacer']; |
||
1140 | |||
1141 | /********************************************************** |
||
1142 | Stile (CSS) della tabella |
||
1143 | *********************************************************/ |
||
1144 | if(!isset($this->params['table']['style'])) |
||
1145 | $this->params['table']['style'] = $this->default_params['table']['style']; |
||
1146 | |||
1147 | $this->params['title'][0]['text'] = $this->params['title'][$this->params['table']['columns']+1]['text'] = $this->default_params['title']['empty']; |
||
1148 | |||
1149 | /********************************************************** |
||
1150 | Crea la DynaCombus. Tutta la magia si svolge qui. |
||
1151 | *********************************************************/ |
||
1152 | $this->Creator(); |
||
1153 | |||
1154 | /********************************************************** |
||
1155 | Stile SPAN per a tabella |
||
1156 | *********************************************************/ |
||
1157 | $output = "\n\n\n<span style=\"font-family: Courier New; {$this->params['table']['style']}\" class=\"sel\">"; |
||
1158 | |||
1159 | /********************************************************** |
||
1160 | Output |
||
1161 | |||
1162 | qui vengono aggiunti tutti gli atributi provenienti |
||
1163 | dagli array della configurazione |
||
1164 | *********************************************************/ |
||
1165 | $output .= sprintf( |
||
1166 | "\n<select %s size=%d %s style=\"font-family: Courier New; %s\" class=\"sel\" %s %s %s>\n\n" |
||
1167 | |||
1168 | ,isset($this->params['table']['name']) ? "name=\"{$this->params['table']['name']}\"" : '' |
||
1169 | ,isset($this->params['table']['height']) ? $this->params['table']['height'] : '' |
||
1170 | ,isset($this->params['table']['id']) ? "id=\"$this->params['table']['id']\"" : '' |
||
1171 | ,isset($this->params['table']['style']) ? $this->params['table']['style'] : '' |
||
1172 | ,isset($this->params['table']['multiple']) ? "multiple" : '' |
||
1173 | ,isset($this->params['table']['disabled']) ? "disabled" : '' |
||
1174 | ,isset($this->params['table']['add']) ? $this->params['table']['add'] : '' |
||
1175 | ); |
||
1176 | |||
1177 | /********************************************************** |
||
1178 | Output |
||
1179 | |||
1180 | La compressione degli spazi. |
||
1181 | *********************************************************/ |
||
1182 | $output .= str_replace(' ', ' ', str_replace(' <', ' <', $this->output)) . "\n\n\n"; |
||
1183 | $output .= "\n\n</select>"; |
||
1184 | $output .= "\n</span>\n\n\n"; |
||
1185 | |||
1186 | if($this->cache) { |
||
1187 | $rc = $this->cache_obj->write("display_$fname", Array($this->params, $output), 60*5); |
||
1188 | } |
||
1189 | |||
1190 | if($this->debug) |
||
1191 | echo "Data ::: \$this->cache_obj->write : [$rc]<br>"; |
||
1192 | } |
||
1193 | |||
1194 | if($this->debug) |
||
1195 | echo "Data ::: Timer : " . round((getmicrotime()-$time_start)*1000, 3) . "<br>"; |
||
1196 | |||
1197 | /********************************************************** |
||
1198 | Ritorna l'HTML. Arrivederci e grazie :-) |
||
1199 | *********************************************************/ |
||
1200 | $this->display = $output; |
||
1201 | Return $this->display; |
||
1202 | } |
||
1203 | |||
1204 | |||
1205 | /********************************************************** |
||
1206 | |||
1207 | Funzione: header() |
||
1208 | Argomenti: none |
||
1209 | |||
1210 | Ritorno: array |
||
1211 | |||
1212 | |||
1213 | Calcola le percentuali delle collonne rispetto alla |
||
1214 | largezza di dynacombo |
||
1215 | |||
1216 | *********************************************************/ |
||
1217 | function header($array=False) { |
||
1218 | |||
1219 | $size = 7; |
||
1220 | |||
1221 | if(!strlen($this->display)) |
||
1222 | $this->display($array); |
||
1223 | |||
1224 | if($this->debug) |
||
1225 | $time_start = getmicrotime(); |
||
1226 | |||
1227 | if($this->cache) { |
||
1228 | if(!$this->cache_obj) { |
||
1229 | $this->cache_obj = new DynaCache('DynaCombus'); |
||
1230 | } |
||
1231 | |||
1232 | $fname = md5(md5(serialize($this->params)) . md5(serialize($this->tmp_rows))); |
||
1233 | $rc = $this->cache_obj->read("header_$fname", $output); |
||
1234 | } |
||
1235 | else { |
||
1236 | $rc = 1; |
||
1237 | } |
||
1238 | |||
1239 | if($rc) { |
||
1240 | |||
1241 | // Debug |
||
1242 | if($this->debug) |
||
1243 | echo "Header ::: \$this->cache_obj->read : [$rc]<br>"; |
||
1244 | |||
1245 | |||
1246 | $this->header = Array(); |
||
1247 | |||
1248 | for($this->cols=1; $this->cols<=$this->params['table']['columns']; $this->cols++) { |
||
1249 | $this->header[$this->cols] = round(($this->params['cols'][$this->cols]['total']*$size), 0); |
||
1250 | } |
||
1251 | |||
1252 | $this->header[0] = 2; |
||
1253 | $this->header[$this->params['table']['columns']+1] = 19; |
||
1254 | $this->header['tot'] = array_sum($this->header)-5; |
||
1255 | |||
1256 | $output['start'] = sprintf( |
||
1257 | "\n<table border=0 align='%s' cellpadding=0 cellspacing=0 width=%d %s %s %s %s>\n" |
||
1258 | ." <tr %s %s>\n" |
||
1259 | |||
1260 | ,$this->params['header']['align'] |
||
1261 | ,$this->header['tot'] |
||
1262 | ,isset($this->params['header']['class']) ? "class='{$this->params['header']['class']}'" : '' |
||
1263 | ,isset($this->params['header']['style']) ? "style='{$this->params['header']['style']}'" : '' |
||
1264 | ,isset($this->params['header']['id']) ? "id='{$this->params['header']['id']}'" : '' |
||
1265 | ,isset($this->params['header']['add']) ? "add='{$this->params['header']['add']}'" : '' |
||
1266 | ,isset($this->params['header']['tr_align']) ? "align='{$this->params['header']['tr_align']}'" : '' |
||
1267 | ,isset($this->params['header']['bgcolor']) ? "bgcolor='{$this->params['header']['bgcolor']}'" : '' |
||
1268 | ); |
||
1269 | |||
1270 | for($h=0; $h<$this->params['table']['columns']+2; $h++) { |
||
1271 | $null = (($h==0 or $h==$this->params['table']['columns']+1) or !@strlen($this->params['title'][$h]['text']))? True : False; |
||
1272 | |||
1273 | $output['start'] .= sprintf( |
||
1274 | " <td %s %s %s width=%d align='%s' %s %s %s>%s</td>\n" |
||
1275 | ,$null ? "style='font-size:1px;'" : '' |
||
1276 | ,(isset($this->params['title'][$h]['class']) and !$null) ? "class='{$this->params['title'][$h]['class']}'" : '' |
||
1277 | ,(isset($this->params['title'][$h]['style']) and !$null) ? "style='{$this->params['title'][$h]['style']}'" : '' |
||
1278 | ,$this->header[$h] |
||
1279 | ,(!$null)? $this->params['title'][$h]['align'] : '' |
||
1280 | ,isset($this->params['title'][$h]['wrap']) ? 'wrap' : '' |
||
1281 | ,isset($this->params['title'][$h]['nowrap']) ? 'nowrap' : '' |
||
1282 | ,isset($this->params['title'][$h]['add']) ? $this->params['title'][$h]['add'] : '' |
||
1283 | ,@strlen($this->params['title'][$h]['text']) ? $this->params['title'][$h]['text'] : $this->params['title'][0]['text'] |
||
1284 | ); |
||
1285 | } |
||
1286 | |||
1287 | $output['start'] .= " </tr>\n"; |
||
1288 | $output['start'] .= " <tr valign='top' align='left'>\n"; |
||
1289 | $output['start'] .= " <td colspan=" . ($this->params['table']['columns']+2) . ">"; |
||
1290 | |||
1291 | $output['end'] = "</td>\n"; |
||
1292 | $output['end'] .= " </tr>\n"; |
||
1293 | $output['end'] .= "</table>\n\n"; |
||
1294 | |||
1295 | if($this->cache) { |
||
1296 | $rc = $this->cache_obj->write("header_$fname", $output, 60*5); |
||
1297 | } |
||
1298 | |||
1299 | if($this->debug) |
||
1300 | echo "Header ::: \$this->cache_obj->write : [$rc]<br>"; |
||
1301 | } |
||
1302 | |||
1303 | if($this->debug) |
||
1304 | echo "Header ::: Timer : " . round((getmicrotime()-$time_start)*1000, 3) . "<br>"; |
||
1305 | |||
1306 | Return $output['start'] . $this->display . $output['end']; |
||
1307 | } |
||
1308 | } |
||
1309 | |||
1310 | |||
1311 | |||
1312 | /********************************************************** |
||
1313 | Esempio di una chiamata: |
||
1314 | |||
1315 | |||
1316 | require_once('./include/DynaCombus.inc.php'); |
||
1317 | |||
1318 | function nomi() { |
||
1319 | Return Array( |
||
1320 | |||
1321 | Array( |
||
1322 | 'nome' => 'Maxim' |
||
1323 | ,'cognome' => 'Maletsky' |
||
1324 | ,'email' => 'maxim@php.net' |
||
1325 | ,'indirizzo' => 'via Augusto Armellini' |
||
1326 | ,'citta' => 'Roma' |
||
1327 | ,'paese' => 'Italia' |
||
1328 | ) |
||
1329 | |||
1330 | ,Array( |
||
1331 | 'nome' => 'Marco' |
||
1332 | ,'cognome' => 'Trovini' |
||
1333 | ,'email' => 'marco@non.so' |
||
1334 | ,'indirizzo' => 'via Cissadove' |
||
1335 | ,'citta' => 'Aprilia' |
||
1336 | ,'paese' => 'Italia' |
||
1337 | ) |
||
1338 | |||
1339 | ,Array( |
||
1340 | 'nome' => 'Alessandra' |
||
1341 | ,'cognome' => 'Rossi' |
||
1342 | ,'email' => 'non@si.sa' |
||
1343 | ,'indirizzo' => 'Via Dondesta' |
||
1344 | ,'citta' => 'Roma' |
||
1345 | ,'paese' => 'Italia' |
||
1346 | ) |
||
1347 | ); |
||
1348 | } |
||
1349 | |||
1350 | |||
1351 | $DC = new DC; |
||
1352 | |||
1353 | $DC->tag['table'] = 'name="nomi" height="13" border="2" columns="6" add="onChange=\'window.status = this.options[this.selectedIndex].text;\'"'; |
||
1354 | |||
1355 | // cols: |
||
1356 | $DC->tag['cols']['1,2 | 4,5'] = 'width="10" align="center"'; |
||
1357 | $DC->tag['cols']['3'] = 'width="16"'; |
||
1358 | $DC->tag['cols']['4,5'] = 'align="right"'; |
||
1359 | $DC->tag['cols']['6'] = 'width="8" align="left" margin-right="2"'; |
||
1360 | |||
1361 | foreach(nomi() as $key=>$val) { |
||
1362 | |||
1363 | // Sciegliamoci una chiave. |
||
1364 | // Composta dal NOME e COGNOME con striscetta come il separatore |
||
1365 | $chiave = $val['nome'] . '-' . $val['cognome']; |
||
1366 | |||
1367 | $DC->add_row( |
||
1368 | Array( |
||
1369 | $chiave |
||
1370 | ,$val['nome'] |
||
1371 | ,$val['cognome'] |
||
1372 | ,$val['email'] |
||
1373 | ,$val['indirizzo'] |
||
1374 | ,$val['citta'] |
||
1375 | ,$val['paese'] |
||
1376 | ) |
||
1377 | ); |
||
1378 | $s++; |
||
1379 | |||
1380 | // controllo di riga selezionata |
||
1381 | if(!$selected and $UnaCondizione == True) { |
||
1382 | $selected = $s; |
||
1383 | } |
||
1384 | } |
||
1385 | |||
1386 | // Aggiungera il colore verde per lo sfondo, colore bianco per il testo |
||
1387 | $DC_prot->tag['rows'][$selected] = 'style="color:#ffffff; weight:900; background-color:#00CC00;"'; |
||
1388 | |||
1389 | // La riga numerata $selected sara selezionata con <OPTION SELECTED> |
||
1390 | $DC_dett->tag['rows'][$selected] = 'selected="1"'; |
||
1391 | |||
1392 | |||
1393 | echo "<form method='GET' action='$_SERVER['PHP_SELF']'>\n"; |
||
1394 | |||
1395 | echo " <tr valign='top'>\n"; |
||
1396 | |||
1397 | echo " <td>\n"; |
||
1398 | echo $DC->header(); |
||
1399 | echo " </td>\n"; |
||
1400 | echo " </tr>"; |
||
1401 | |||
1402 | echo " <tr valign='top'>\n"; |
||
1403 | echo " <td colspan=6>\n"; |
||
1404 | echo " <input type='submit' name=' ok ' value='Submit Combo'>\n"; |
||
1405 | echo " </td>\n"; |
||
1406 | echo " </tr>\n"; |
||
1407 | |||
1408 | echo "</table>\n"; |
||
1409 | echo "</form>\n"; |
||
1410 | |||
1411 | *********************************************************/ |
||
1412 | ?> |