MIOLO20
Carregando...
Procurando...
Nenhuma entrada encontrada
mtabbedform.class
Ir para a documentação deste ficheiro.
1<?php
3{
4 var $tabbedform; // em qual tabbedform esta página está inserida
5 var $form; // form a ser renderizado na pagina
6 var $index; // indice desta pagina dentro do tabbedform (0-based)
7 var $title; // titulo da pagina
8
9 function __construct($form)
10 {
11 parent::__construct();
12 $this->form = $form;
13 $this->visible = true;
14 $this->enabled = true;
15 $this->title = $form->title;
16 }
17}
18
19class MTabbedForm extends MForm
20{
21 static $order = 0; // número de ordem do form
22 var $nOrder; // número de ordem do form
23 var $pages; // array de TabbedFormPages
24 var $activepage; // referencia a TabbedFormPage sendo mostrada
25 var $currentpage; // indice da TabbedFormPage sendo exibida
26 var $pagecount; // quantas TabbedFormPage associadas a este form
27 var $pagewidth = 80;
28 var $pageheight = 250;
32
33 function __construct($title = '', $action = '')
34 {
35 parent::__construct($title, $action);
36 $this->nOrder = MTabbedForm::$order++;
37 $this->AddStyleFile('m_tabforms.css');
38 $this->page->AddScript('x/x_core.js');
39 $this->page->AddScript('x/x_dom.js');
40 $this->page->AddScript('m_tabbed.js');
41 $this->fields = array
42 (
43 );
44 $this->SetCurrentPage($this->page->Request('frm_currpage_') + 0);
45 $this->pagecount = 0;
46// $this->painterMethod = 'html';
47 $this->painterMethod = 'javascript';
48 }
49
50 function AddField($field, $hint = false)
51 {
52 $this->manager->Assert(false, "Tabbed form doesn't yet support AddField Function!!!");
53 }
54
55 function AddPage($form)
56 {
57 $page = new MTabbedFormPage($form);
58 $page->tabbedform = $this;
59 $form->tabbedform = $this;
60 $page->index = $this->pagecount;
61 $this->pages[$page->index] = $page;
63 $this->fields = array_merge($this->fields, $form->fields);
64
65 foreach ($form->fields as $field)
66 {
67 if (is_array($field))
68 {
69 $namefield = uniqid('frm_array');
70 }
71 else
72 {
73 $namefield = $field->name;
74 }
75
76 $this->manager->Assert(!isset($this->$namefield),
77 "Err: field [$namefield] already defined in form [$this->title]!");
78 $this->fields[$namefield] = $field;
79 }
80
81 $this->defaultButton = false;
82 }
83
84 function SetPages($forms)
85 {
86 if (is_array($forms))
87 {
88 foreach ($forms as $form)
89 {
90 $this->AddPage($form);
91 }
92 }
93 }
94
95 //
96 // return label of current page
97 //
98 function GetCurrentPage()
99 {
100 return $this->currentpage;
101 }
102
103 function SetCurrentPage($index)
104 {
105 $_POST['frm_currpage_'] = $index;
106 $this->currentpage = $index;
107 }
108
109 //
110 // returns a plain list of all fields contained in the tabbedform
111 //
112 function GetFieldList()
113 {
114 $fields = array
115 (
116 );
117
118 for ($i = 0; $i < $this->pagecount; $i++)
119 {
120 $page = $this->pages[$i];
121 $form = $page->form;
122 $fields = array_merge($fields, $form->GetFieldList());
123 }
124
125 return $fields;
126 }
127
128 function EventHandler()
129 {
130 $form = $this->pages[$this->GetCurrentPage()]->form;
131 $form->EventHandler();
132 parent::EventHandler();
133 }
134
136 {
137 $this->painterMethod = $method;
138 }
139 /*
140 Renderize
141 */
142 function GenerateHeader()
143 {
144 return ($this->header != NULL) ? new MDiv('',$this->header,'m-tabform-text') : NULL;
145 }
146
147 function GenerateFooter()
148 {
149 return ($this->footer != NULL) ? new MDiv('',$this->footer,'m-tabform-text') : NULL;
150 }
151
152 function GenerateTabs()
153 {
154 global $MIOLO, $page;
155
156 $currpage = $this->GetCurrentPage();
157 $t = array
158 (
159 );
160
161 for ($i = 0; $i < $this->pagecount; $i++)
162 {
163 $t[] = new MDiv('', '', 'spacer');
164 $page = &$this->pages[$i];
165
166 if ($page->index == $currpage)
167 {
168 $t[] = new MDiv('', '', 'vertical1A');
169 $t[] = new MDiv('', '', 'vertical2A');
170 $t[] = new MDiv('', new MSpan('', $page->title, 'm-tabpage-link'), 'contentA');
171 $t[] = new MDiv('', '', 'vertical3A');
172 $t[] = new MDiv('', '', 'vertical4A');
173 }
174 else
175 {
176 if ($page->visible)
177 {
178 $pageName = $this->page->name;
179 $href = "javascript:_MIOLO_TabbedForm_GotoPage('{$pageName}', '$page->index')";
180 $t[] = new MDiv('', '', 'vertical1B');
181 $t[] = new MDiv('', '', 'vertical2B');
182
183 if ($page->enabled)
184 {
185 $link = new MLink('', '', $href, $page->title);
186 $link->SetClass('m-tabpage-link');
187 }
188 else
189 {
190 $link = new MSpan('', $page->title);
191 $link->SetClass('m-tabpage-link-disable');
192 }
193
194 $t[] = new MDiv('', $link, 'contentB');
195 $t[] = new MDiv('', '', 'vertical2B');
196 $t[] = new MDiv('', '', 'vertical1B');
197 }
198 }
199 }
200
201 $t[] = new MDiv('', '', 'contentC');
202 return new MDiv('', $t, 'm-tabpage');
203 }
204
205 function GenerateBody()
206 {
207 global $theme;
208
209 // optionally generate errors
210 if ($this->HasErrors())
211 {
212 $this->GenerateErrors();
213 }
214
215 $hidden = null;
216 $currentPage = $this->GetCurrentPage();
217 $width = '100%';
218 $row = 0;
219 $t = new SimpleTable();
220 $t->SetAttributes("border=0 width=$width cellpadding=0 cellspacing=0 ");
221 // header
222 $t->attributes['cell'][$row][0] = "colspan=3";
223 $t->cell[$row++][0] = $this->GenerateHeader();
224 // tabs
225 $t->attributes['cell'][$row][0] = "colspan=3";
226 $t->cell[$row++][0] = $this->GenerateTabs();
227 // page
228 $t1 = new SimpleTable();
229 $t1->SetAttributes("border=0 width=$width cellpadding=0 cellspacing=5 ");
230 $hidden = null;
231 $this->activepage = $this->pages[$this->GetCurrentPage()];
232 $activeForm = $this->activepage->form;
233 $t1->cell[0][0] = $activeForm->GenerateLayoutFields($hidden);
234 $layout = $this->manager->theme->GetLayout();
235
236 if ($layout != 'print')
237 {
238 $buttons = $activeForm->GenerateButtons();
239
240 if (count($buttons))
241 {
242 $t1->attributes['cell'][1][0] = "colspan=3";
243 $t1->cell[1][0] = $buttons;
244 }
245 }
246
247 $t->attributes['cell'][$row][0] = "class=\"m-tabform-body\"";
248 $t->cell[$row++][0] = &$t1;
249 // script
250 $t->cell[$row++][0] = $activeForm->GenerateScript();
251
252 // footer
253 $t->attributes['cell'][$row][0] = "colspan=3";
254 $t->cell[$row++][0] = $this->GenerateFooter();
255
256 // buttons
257 if ($layout != 'print')
258 {
259 $buttons = $this->GenerateButtons();
260
261 if (count($buttons))
262 {
263 $t->attributes['cell'][$row][0] = "class=\"m-form-body panel-body card-body\"";
264 $t->cell[$row++][0] = $buttons;
265 }
266 }
267
268 // hidden
269 if ($hidden)
270 {
271 $t->cell[$row++][0] = $this->GenerateHiddenFields($hidden);
272 }
273
274 // gera campos 'HIDDEN' para os campos das páginas que não estão visíveis
275 $hidden = array
276 (
277 );
278
279 foreach ($this->pages as $page => $tabbedPage)
280 {
281 if ($page != $currentPage)
282 {
283 $fields = $tabbedPage->form->fields;
284
285 foreach ($fields as $f)
286 {
287 if (is_array($f->value))
288 {
289 foreach ($f->value as $v)
290 {
291 $hidden[] = new HiddenField("{$f->name}[]", $v);
292 }
293 }
294 else
295 {
296 if (($f instanceof MRadioButton) || ($f instanceof MCheckBox))
297 {
298 if ($f->checked)
299 {
300 $hidden[] = new MHiddenField($f->name, $f->value);
301 }
302 }
303 else
304 {
305 $hidden[] = new MHiddenField($f->name, $f->value);
306 }
307 }
308 }
309 }
310 }
311
312 $hidden[] = new MHiddenField('frm_currpage_', $currentPage);
313
314 if ($hidden)
315 {
316 $t->attributes['cell'][$row][0] = "colspan=3";
317 $t->cell[$row++][0] = $this->GenerateHiddenFields($hidden);
318 }
319
320 return $t;
321 }
322
323 function GenerateHtml()
324 {
325 global $MIOLO;
326
327 if (!isset($this->buttons))
328 {
329 if ($this->defaultButton)
330 {
331 $this->buttons[] = new FormButton(FORM_SUBMIT_BTN_NAME, 'Enviar', 'SUBMIT');
332 }
333 }
334
335 $body = $this->GenerateBody();
336
337 $b = new MDiv('', $body, '');
338 $title = new MSpan('',$this->title,'m-tabform-title');
339 $f = new MDiv('', array($title, $b), 'm-tabform-box');
340 return $f->Generate();
341 }
342
344 {
345 global $MIOLO;
346
347 if (!isset($this->buttons))
348 {
349 if ($this->defaultButton)
350 {
351 $this->buttons[] = new FormButton(FORM_SUBMIT_BTN_NAME, 'Enviar', 'SUBMIT');
352 }
353 }
354 $id = $this->name . '_tab' . $this->nOrder;
355 $w = $this->pagecount * $this->pagewidth;
357 $code = "var $id = new xTabPanelGroup('{$id}', $w, $h, 25, 'm-tabform-panel','m-tabform-group','m-tabform-default','m-tabform-selected',{$this->currentpage})";
358 $this->page->OnLoad($code);
359
360
361 $hidden = null;
362 $currentPage = $this->GetCurrentPage();
363 $width = '100%';
364 $row = 0;
365 $body = array();
366 // tabs
367 $tabs = array();
368 for ($i = 0; $i < $this->pagecount; $i++)
369 {
370 $page = $this->pages[$i];
371 $pageName = $this->page->name;
372 $tabs[] = new MDiv('', $page->title, 'm-tabform-default');
373 }
374
375 $body[] = new MDiv('', $tabs, 'm-tabform-group');
376
377 // pages
378 $header = $this->GenerateHeader();
379 $hidden = array();
380 for ($i = 0; $i < $this->pagecount; $i++)
381 {
382 $page = $this->pages[$i];
383 $pgs = array();
384 if ( $page->form->HasErrors() )
385 {
386 $pgs[] = $page->form->GenerateErrors();
387 }
388 if ( $this->HasInfos() )
389 {
390 $pgs[] = $page->form->GenerateInfos();
391 }
392 $pgs[] = $page->form->GenerateLayoutFields($hidden);
393 $buttons = $page->form->GenerateButtons();
394 if (count($buttons))
395 {
396 $pgs[] = new MDiv('', $buttons, '');
397 }
398 $body[] = new MDiv('', $pgs, 'm-tabform-panel');
399 $body[] = $page->form->generateScript();
400 }
401 $buttons = $this->GenerateButtons();
402 if (count($buttons))
403 {
404 $body[] = new MDiv('', $buttons, '');
405 }
406 $hidden[] = new MHiddenField('frm_currpage_', $this->currentpage);
407 $body[] = $this->GenerateHiddenFields($hidden);
408 $b = new MDiv($id,$body, 'm-tabform-panel-group');
409 $f = new MDiv('', array($header, $b),'m-collapsible');
410 return $f->Generate();
411 }
412
413 function Generate()
414 {
415 $this->painterMethod = 'javascript';
416 $method = 'Generate' . $this->painterMethod;
417 return $this->$method();
418 }
419}
420?>
Definição mform.class:9
$method
Definição mform.class:23
$buttons
Definição mform.class:28
$layout
Definição mform.class:110
GenerateButtons()
Definição mform.class:2187
$width
Definição mform.class:63
HasErrors()
Definição mform.class:1325
$action
Definição mform.class:18
GenerateHiddenFields($hidden)
Definição mform.class:2220
$fields
Definição mform.class:33
$title
Definição mform.class:13
GenerateErrors()
Definição mform.class:1855
HasInfos()
Definição mform.class:1377
AddPage($form)
SetCurrentPage($index)
SetPainterMethod($method)
SetPages($forms)
AddField($field, $hint=false)
__construct($title='', $action='')
const FORM_SUBMIT_BTN_NAME
Definição mform.class:2