/usr/local/miolo2/classes/ui/controls/mtabbedform.class

Go to the documentation of this file.
00001 <?
00002 class MTabbedFormPage extends MControl
00003 {
00004     var $tabbedform; // em qual tabbedform esta página está inserida
00005     var $form; // form a ser renderizado na pagina
00006     var $index; // indice desta pagina dentro do tabbedform (0-based)
00007     var $title; // titulo da pagina
00008 
00009     function __construct($form)
00010     {
00011         parent::__construct();
00012         $this->form = $form;
00013         $this->visible = true;
00014         $this->enabled = true;
00015         $this->title = $form->title;
00016     }
00017 }
00018 
00019 class MTabbedForm extends MForm
00020 {
00021     static  $order = 0; // número de ordem do form
00022     var $nOrder; // número de ordem do form
00023     var $pages; // array de TabbedFormPages
00024     var $activepage; // referencia a TabbedFormPage sendo mostrada
00025     var $currentpage; // indice da TabbedFormPage sendo exibida 
00026     var $pagecount; // quantas TabbedFormPage associadas a este form
00027     var $pagewidth = 80;
00028     var $pageheight = 250;
00029     var $header;
00030     var $footer;
00031     var $painterMethod;
00032 
00033     function __construct($title = '', $action = '')
00034     {
00035         parent::__construct($title, $action);
00036         $this->nOrder = MTabbedForm::$order++;
00037         $this->AddStyleFile('m_tabforms.css');
00038         $this->page->AddScript('x/x_core.js');
00039         $this->page->AddScript('x/x_dom.js');
00040         $this->page->AddScript('m_tabbed.js');
00041         $this->fields = array
00042             (
00043             );
00044         $this->SetCurrentPage($this->page->Request('frm_currpage_') + 0);
00045         $this->pagecount = 0;
00046 //        $this->painterMethod = 'html'; 
00047         $this->painterMethod = 'javascript'; 
00048     }
00049 
00050     function AddField()
00051     {
00052         $this->manager->Assert(false, "Tabbed form doesn't yet support AddField Function!!!");
00053     }
00054 
00055     function AddPage($form)
00056     {
00057         $page = new MTabbedFormPage($form);
00058         $page->tabbedform = $this;
00059         $form->tabbedform = $this;
00060         $page->index = $this->pagecount;
00061         $this->pages[$page->index] = $page;
00062         ++$this->pagecount;
00063         $this->fields = array_merge($this->fields, $form->fields);
00064 
00065         foreach ($form->fields as $field)
00066         {
00067             if (is_array($field))
00068             {
00069                 $namefield = uniqid('frm_array');
00070             }
00071             else
00072             {
00073                 $namefield = $field->name;
00074             }
00075 
00076             $this->manager->Assert(!isset($this->$namefield),
00077                                    "Err: field [$namefield] already defined in form [$this->title]!");
00078             $this->fields[$namefield] = $field;
00079         }
00080 
00081         $this->defaultButton = false;
00082     }
00083 
00084     function SetPages($forms)
00085     {
00086         if (is_array($forms))
00087         {
00088             foreach ($forms as $form)
00089             {
00090                 $this->AddPage($form);
00091             }
00092         }
00093     }
00094 
00095     //
00096     // return label of current page
00097     //
00098     function GetCurrentPage()
00099     {
00100         return $this->currentpage;
00101     }
00102 
00103     function SetCurrentPage($index)
00104     {
00105         $_POST['frm_currpage_'] = $index;
00106         $this->currentpage = $index;
00107     }
00108 
00109     //
00110     // returns a plain list of all fields contained in the tabbedform
00111     //
00112     function GetFieldList()
00113     {
00114         $fields = array
00115             (
00116             );
00117 
00118         for ($i = 0; $i < $this->pagecount; $i++)
00119         {
00120             $page = $this->pages[$i];
00121             $form = $page->form;
00122             $fields = array_merge($fields, $form->GetFieldList());
00123         }
00124 
00125         return $fields;
00126     }
00127 
00128     function EventHandler()
00129     {
00130         $form = $this->pages[$this->GetCurrentPage()]->form;
00131         $form->EventHandler();
00132         parent::EventHandler();
00133     }
00134 
00135     function SetPainterMethod($method)
00136     {
00137         $this->painterMethod = $method; 
00138     }
00139     /*
00140         Renderize
00141     */
00142     function GenerateHeader()
00143     {
00144         return ($this->header != NULL) ? new MDiv('',$this->header,'m-tabform-text') : NULL;
00145     }
00146 
00147     function GenerateFooter()
00148     {
00149         return ($this->footer != NULL) ? new MDiv('',$this->footer,'m-tabform-text') : NULL;
00150     }
00151 
00152     function GenerateTabs()
00153     {
00154         global $MIOLO, $page;
00155 
00156         $currpage = $this->GetCurrentPage();
00157         $t = array
00158             (
00159             );
00160 
00161         for ($i = 0; $i < $this->pagecount; $i++)
00162         {
00163             $t[] = new MDiv('', '', 'spacer');
00164             $page = &$this->pages[$i];
00165 
00166             if ($page->index == $currpage)
00167             {
00168                 $t[] = new MDiv('', '', 'vertical1A');
00169                 $t[] = new MDiv('', '', 'vertical2A');
00170                 $t[] = new MDiv('', new MSpan('', $page->title, 'm-tabpage-link'), 'contentA');
00171                 $t[] = new MDiv('', '', 'vertical3A');
00172                 $t[] = new MDiv('', '', 'vertical4A');
00173             }
00174             else
00175             {
00176                 if ($page->visible)
00177                 {
00178                     $pageName = $this->page->name;
00179                     $href = "javascript:_MIOLO_TabbedForm_GotoPage('{$pageName}', '$page->index')";
00180                     $t[] = new MDiv('', '', 'vertical1B');
00181                     $t[] = new MDiv('', '', 'vertical2B');
00182 
00183                     if ($page->enabled)
00184                     {
00185                         $link = new MLink('', '', $href, $page->title);
00186                         $link->SetClass('m-tabpage-link');
00187                     }
00188                     else
00189                     {
00190                         $link = new MSpan('', $page->title);
00191                         $link->SetClass('m-tabpage-link-disable');
00192                     }
00193 
00194                     $t[] = new MDiv('', $link, 'contentB');
00195                     $t[] = new MDiv('', '', 'vertical2B');
00196                     $t[] = new MDiv('', '', 'vertical1B');
00197                 }
00198             }
00199         }
00200 
00201         $t[] = new MDiv('', '', 'contentC');
00202         return new MDiv('', $t, 'm-tabpage');
00203     }
00204 
00205     function GenerateBody()
00206     {
00207         global $theme;
00208 
00209         // optionally generate errors
00210         if ($this->HasErrors())
00211         {
00212             $this->GenerateErrors();
00213         }
00214 
00215         $hidden = null;
00216         $currentPage = $this->GetCurrentPage();
00217         $width = '100%';
00218         $row = 0;
00219         $t = new SimpleTable();
00220         $t->SetAttributes("border=0 width=$width cellpadding=0 cellspacing=0 ");
00221         // header
00222         $t->attributes['cell'][$row][0] = "colspan=3";
00223         $t->cell[$row++][0] = $this->GenerateHeader();
00224         // tabs
00225         $t->attributes['cell'][$row][0] = "colspan=3";
00226         $t->cell[$row++][0] = $this->GenerateTabs();
00227         // page
00228         $t1 = new SimpleTable();
00229         $t1->SetAttributes("border=0 width=$width cellpadding=0 cellspacing=5 ");
00230         $hidden = null;
00231         $this->activepage = $this->pages[$this->GetCurrentPage()];
00232         $activeForm = $this->activepage->form;
00233         $t1->cell[0][0] = $activeForm->GenerateLayoutFields($hidden);
00234         $layout = $this->manager->theme->GetLayout();
00235 
00236         if ($layout != 'print')
00237         {
00238             $buttons = $activeForm->GenerateButtons();
00239 
00240             if (count($buttons))
00241             {
00242                 $t1->attributes['cell'][1][0] = "colspan=3";
00243                 $t1->cell[1][0] = $buttons;
00244             }
00245         }
00246 
00247         $t->attributes['cell'][$row][0] = "class=\"m-tabform-body\"";
00248         $t->cell[$row++][0] = &$t1;
00249         // script
00250         $t->cell[$row++][0] = $activeForm->GenerateScript();
00251         
00252         // footer
00253         $t->attributes['cell'][$row][0] = "colspan=3";
00254         $t->cell[$row++][0] = $this->GenerateFooter();
00255 
00256         // buttons
00257         if ($layout != 'print')
00258         {
00259             $buttons = $this->GenerateButtons();
00260 
00261             if (count($buttons))
00262             {
00263                 $t->attributes['cell'][$row][0] = "class=\"m-form-body\"";
00264                 $t->cell[$row++][0] = $buttons;
00265             }
00266         }
00267 
00268         // hidden
00269         if ($hidden)
00270         {
00271             $t->cell[$row++][0] = $this->GenerateHiddenFields($hidden);
00272         }
00273 
00274         // gera campos 'HIDDEN' para os campos das páginas que não estão visíveis 
00275         $hidden = array
00276             (
00277             );
00278 
00279         foreach ($this->pages as $page => $tabbedPage)
00280         {
00281             if ($page != $currentPage)
00282             {
00283                 $fields = $tabbedPage->form->fields;
00284 
00285                 foreach ($fields as $f)
00286                 {
00287                     if (is_array($f->value))
00288                     {
00289                         foreach ($f->value as $v)
00290                         {
00291                             $hidden[] = new HiddenField("{$f->name}[]", $v);
00292                         }
00293                     }
00294                     else
00295                     {
00296                         if (($f instanceof MRadioButton) || ($f instanceof MCheckBox))
00297                         {
00298                             if ($f->checked)
00299                             {
00300                                 $hidden[] = new MHiddenField($f->name, $f->value);
00301                             }
00302                         }
00303                         else
00304                         {
00305                             $hidden[] = new MHiddenField($f->name, $f->value);
00306                         }
00307                     }
00308                 }
00309             }
00310         }
00311 
00312         $hidden[] = new MHiddenField('frm_currpage_', $currentPage);
00313 
00314         if ($hidden)
00315         {
00316             $t->attributes['cell'][$row][0] = "colspan=3";
00317             $t->cell[$row++][0] = $this->GenerateHiddenFields($hidden);
00318         }
00319 
00320         return $t;
00321     }
00322 
00323     function GenerateHtml()
00324     {
00325         global $MIOLO;
00326 
00327         if (!isset($this->buttons))
00328         {
00329             if ($this->defaultButton)
00330             {
00331                 $this->buttons[] = new FormButton(FORM_SUBMIT_BTN_NAME, 'Enviar', 'SUBMIT');
00332             }
00333         }
00334 
00335         $body = $this->GenerateBody();
00336 
00337         $b = new MDiv('', $body, '');
00338         $title = new MSpan('',$this->title,'m-tabform-title'); 
00339         $f = new MDiv('', array($title, $b), 'm-tabform-box');
00340         return $f->Generate();
00341     }
00342 
00343     function GenerateJavascript()
00344     {
00345         global $MIOLO;
00346 
00347         if (!isset($this->buttons))
00348         {
00349             if ($this->defaultButton)
00350             {
00351                 $this->buttons[] = new FormButton(FORM_SUBMIT_BTN_NAME, 'Enviar', 'SUBMIT');
00352             }
00353         }
00354         $id = $this->name . '_tab' . $this->nOrder;
00355         $w = $this->pagecount * $this->pagewidth;
00356         $h = $this->pageheight;
00357         $code = "var $id = new xTabPanelGroup('{$id}', $w, $h, 25, 'm-tabform-panel','m-tabform-group','m-tabform-default','m-tabform-selected',{$this->currentpage})";
00358         $this->page->OnLoad($code);
00359 
00360 
00361         $hidden = null;
00362         $currentPage = $this->GetCurrentPage();
00363         $width = '100%';
00364         $row = 0;
00365         $body = array();
00366         // tabs
00367         $tabs = array();
00368         for ($i = 0; $i < $this->pagecount; $i++)
00369         {
00370             $page = $this->pages[$i];
00371             $pageName = $this->page->name;
00372             $tabs[] = new MDiv('', $page->title, 'm-tabform-default');
00373         }
00374 
00375         $body[] = new MDiv('', $tabs, 'm-tabform-group');
00376 
00377         // pages
00378         $header = $this->GenerateHeader();
00379         $hidden = array();
00380         for ($i = 0; $i < $this->pagecount; $i++)
00381         {
00382             $page = $this->pages[$i];
00383             $pgs = array(); 
00384             if ( $page->form->HasErrors() )
00385             {
00386                 $pgs[] = $page->form->GenerateErrors();
00387             }
00388             if ( $this->HasInfos() )
00389             {
00390                 $pgs[] = $page->form->GenerateInfos();
00391             }
00392             $pgs[] = $page->form->GenerateLayoutFields($hidden);
00393             $buttons = $page->form->GenerateButtons();
00394             if (count($buttons))
00395             {
00396                $pgs[] = new MDiv('', $buttons, '');
00397             }
00398             $body[] = new MDiv('', $pgs, 'm-tabform-panel');
00399             $body[] = $page->form->generateScript();
00400         }
00401         $buttons = $this->GenerateButtons();
00402         if (count($buttons))
00403         {
00404            $body[] = new MDiv('', $buttons, '');
00405         }
00406         $hidden[] = new MHiddenField('frm_currpage_', $this->currentpage);
00407         $body[] = $this->GenerateHiddenFields($hidden); 
00408         $b = new MDiv($id,$body, 'm-tabform-panel-group');
00409         $f = new MDiv('', array($header, $b),'m-collapsible');
00410         return $f->Generate();
00411     }
00412 
00413     function Generate()
00414     {
00415         $this->painterMethod = 'javascript';
00416         $method = 'Generate' . $this->painterMethod;
00417         return $this->$method();
00418     }
00419 }
00420 ?>
CopyLeft (L) 2001-2006 - [MIOLO Development Team] SOLIS - Cooperativa de Soluções Livres - Lajeado/RS - Brasil