Subversion Repositories Sigmater

Rev

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'] = '&nbsp;';
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 .= ' &nbsp;';
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('  ', ' &nbsp;', str_replace(' <', '&nbsp;<', $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
?>