Re: HTML_Quickform_Controller Jump issue.

From: 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, '&nbsp;', 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, '&nbsp;', 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

« previous php.pear.general (#12902) next »