00001 <?
00002 class MTabbedFormPage extends MControl
00003 {
00004 var $tabbedform;
00005 var $form;
00006 var $index;
00007 var $title;
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;
00022 var $nOrder;
00023 var $pages;
00024 var $activepage;
00025 var $currentpage;
00026 var $pagecount;
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
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
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
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
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
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
00222 $t->attributes['cell'][$row][0] = "colspan=3";
00223 $t->cell[$row++][0] = $this->GenerateHeader();
00224
00225 $t->attributes['cell'][$row][0] = "colspan=3";
00226 $t->cell[$row++][0] = $this->GenerateTabs();
00227
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
00250 $t->cell[$row++][0] = $activeForm->GenerateScript();
00251
00252
00253 $t->attributes['cell'][$row][0] = "colspan=3";
00254 $t->cell[$row++][0] = $this->GenerateFooter();
00255
00256
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
00269 if ($hidden)
00270 {
00271 $t->cell[$row++][0] = $this->GenerateHiddenFields($hidden);
00272 }
00273
00274
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
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
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 ?>