Re: HTML_Quickform_Controller Jump issue.
| From: | Hodicska Gergely | Date: | Fri, 04 Jun 2004 14:22:43 +0000 |
| Subject: | Re: HTML_Quickform_Controller Jump issue. | ||
| References: | 1 2 3 | Groups: | php.pear.general |
| Request: | Send a blank email to pear-general+get-12902@lists.php.net to get a copy of this message | ||
Hi!
Maybe this will help you:
-------- 8< --- 8<-------Ian P. Christian wrote:
<?php
require_once 'HTML/QuickForm/Controller.php';
require_once 'HTML/QuickForm/Action/Display.php';
require_once 'HTML/QuickForm/Renderer/Default.php';
session_start();
class somePage extends HTML_QuickForm_Page
{
function buildForm()
{
$this->_formBuilt = true;
$navig[] =& $this->createElement('submit',
$this->getButtonName('back'), '<< back');
$navig[] =& $this->createElement('submit',
$this->getButtonName('next'), 'next >>');
$this->addGroup($navig, null, null, ' ', false);
$this->addElement('text', 'text', 'Some text:');
$this->addRule('text', 'Text is needed', 'required');
$this->setDefaultAction('next');
}
}
class lastPage extends HTML_QuickForm_Page
{
function buildForm()
{
$this->_formBuilt = true;
$navig[] =& $this->createElement('submit',
$this->getButtonName('back'), '<< back');
$navig[] =& $this->createElement('submit',
$this->getButtonName('process'), 'Submit');
$this->addGroup($navig, null, null, ' ', false);
$this->addElement('text', 'text', 'Some text:');
$this->addRule('text', 'Text is needed', 'required');
$this->setDefaultAction('process');
}
}
class ActionDisplay extends HTML_QuickForm_Action_Display
{
function perform(&$page, $actionName)
{
$page->isFormBuilt() or $page->buildForm();
$pageName = $page->getAttribute('name');
list($oldPage, $oldName) = $page->controller->getActionName();
$data =& $page->controller->container();
if ('display' == $oldName) {
if (!empty($data['values'][$pageName])) {
$page->loadValues($data['values'][$pageName]);
$validate = false === $data['valid'][$pageName];
}
$page->controller->applyDefaults($pageName);
if (isset($validate) && $validate) {
$page->validate();
}
} else {
$data['values'][$pageName] = $page->exportValues();
$data['valid'][$pageName] = $page->validate();
}
if ($pageName == 'last') {
foreach (array_keys($page->controller->_pages) as
$pageName) {
if ($pageName != 'last' &&$data['valid'][$pageName] !== true) {
if(empty($data['values'][$pageName])) {
// Thees need to force to show the error
messages
// if the given page is shown first time
$data['values'][$pageName] = true;
$data['valid'][$pageName] = false;
}
$actPage =& $page->controller->getPage($pageName);
$actPage->handle('jump');
}
}
}
$this->_renderForm($page);
}
function _renderForm(&$page)
{
$renderer =& $page->defaultRenderer();
$data =& $page->controller->container();
$renderer->_formTemplate= '
Current page: '.$page->getAttribute('name').'
'.$renderer->_formTemplate.'
Validation state:<pre>'.print_r($data['valid'],
true).'</pre>
';
$page->display();
}
}
class ActionProcess extends HTML_QuickForm_Action
{
function perform(&$page, $actionName)
{
$page->isFormBuilt() or $page->buildForm();
$pageName = $page->getAttribute('name');
$data =& $page->controller->container();
$data['values'][$pageName] = $page->exportValues();
$data['valid'][$pageName] = $page->validate();
foreach (array_keys($page->controller->_pages) as $pageName) {
if ($data['valid'][$pageName] !== true) {
if(empty($data['values'][$pageName])) {
$data['values'][$pageName] = true;
$data['valid'][$pageName] = false;
}
$actPage =& $page->controller->getPage($pageName);
$actPage->handle('jump');
}
}
echo "<pre>";
print_r($page->controller->exportValues());
echo "</pre>";
}
}
$x =& new HTML_QuickForm_Controller('x', false);
$x->addPage(new somePage('page1'));
$x->addPage(new somePage('page2'));
$x->addPage(new somePage('page3'));
$x->addPage(new somePage('page4'));
$x->addPage(new somePage('page5'));
$x->addPage(new somePage('page6'));
$x->addPage(new lastPage('last'));
$x->addAction('display', new ActionDisplay());
$x->addAction('process', new ActionProcess());
$x->run();?> -------- 8< --- 8<------- Felho