HEX
Server: Apache
System: Linux sg241.singhost.net 2.6.32-896.16.1.lve1.4.51.el6.x86_64 #1 SMP Wed Jan 17 13:19:23 EST 2018 x86_64
User: honghock (909)
PHP: 8.0.30
Disabled: passthru,system,shell_exec,show_source,exec,popen,proc_open
Upload Files
File: //opt/alt/php56/usr/share/doc/pear/HTML_QuickForm2/examples/controller/tabbed.php
<?php
/**
 * Usage example for HTML_QuickForm2_Controller: tabbed form
 *
 * @author  Alexey Borzov <avb@php.net>
 * @author  Bertrand Mansion <php@mamasam.com>
 * @ignore
 */

require_once 'HTML/QuickForm2.php';
require_once 'HTML/QuickForm2/Controller.php';
require_once 'HTML/QuickForm2/Renderer.php';

// Load some default action handlers
require_once 'HTML/QuickForm2/Controller/Action/Submit.php';
require_once 'HTML/QuickForm2/Controller/Action/Jump.php';
require_once 'HTML/QuickForm2/Controller/Action/Direct.php';
require_once 'HTML/QuickForm2/Controller/Action/Display.php';

// Start the session, form-page values will be kept there
session_start();

abstract class TabbedPage extends HTML_QuickForm2_Controller_Page
{
    protected function addTabs()
    {
        $tabGroup = $this->form->addElement('group')->setSeparator('&nbsp;')
                               ->setId('tabs');
        foreach ($this->getController() as $pageId => $page) {
            $tabGroup->addElement('submit', $this->getButtonName($pageId),
                                  ['class' => 'flat', 'value' => ucfirst($pageId)] +
                                  ($page === $this? ['disabled' => 'disabled'] : []));
        }
    }

    protected function addGlobalSubmit()
    {
        $this->form->addElement('submit', $this->getButtonName('submit'),
                                ['value' => 'Big Red Button', 'class' => 'bigred']);
        $this->setDefaultAction('submit');
    }
}

class PageFoo extends TabbedPage
{
    protected function populateForm()
    {
        $this->addTabs();

        $fs = $this->form->addElement('fieldset')->setLabel('Foo page');

        $radioGroup = $fs->addElement('group')->setLabel('Do you want this feature?')
                         ->setSeparator('<br />');
        $radioGroup->addElement('radio', 'iradYesNoMaybe', ['value' => 'Y'], ['content' => 'Yes']);
        $radioGroup->addElement('radio', 'iradYesNoMaybe', ['value' => 'N'], ['content' => 'No']);
        $radioGroup->addElement('radio', 'iradYesNoMaybe', ['value' => 'M'], ['content' => 'Maybe']);

        $fs->addElement('text', 'tstText', ['size'=>20, 'maxlength'=>50])
           ->setLabel('Why do you want it?');

        $radioGroup->addRule('required', 'Check a radiobutton');

        $this->addGlobalSubmit();
    }
}

class PageBar extends TabbedPage
{
    protected function populateForm()
    {
        $this->addTabs();

        $fs = $this->form->addElement('fieldset')->setLabel('Bar page');

        // XXX: no date element yet
        $dateGroup = $fs->addElement('group', 'favDate')->setLabel('Favourite date:')
                        ->setSeparator('-');
        for ($i = 1, $doptions = []; $i <= 31; $i++) {
            $doptions[$i] = sprintf('%02d', $i);
        }
        $dateGroup->addElement('select', 'd')->loadOptions($doptions);
        $dateGroup->addElement('select', 'M')->loadOptions([
            1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April', 5 => 'May', 5 => 'June',
            7 => 'July', 8 => 'August', 9 => 'September', 10 => 'October', 11 => 'November', 12 => 'December'
        ]);
        for ($i = 1950, $yoptions = []; $i <= date('Y'); $i++) {
            $yoptions[$i] = $i;
        }
        $dateGroup->addElement('select', 'Y')->loadOptions($yoptions);


        $checkGroup = $fs->addElement('group', 'favLetter')->setLabel('Favourite letters:')
                         ->setSeparator(['&nbsp;', '<br />']);
        foreach (['A', 'B', 'C', 'D', 'X', 'Y', 'Z'] as $letter) {
            $checkGroup->addElement('checkbox', $letter)->setContent($letter);
        }

        $this->addGlobalSubmit();
    }
}

class PageBaz extends TabbedPage
{
    protected function populateForm()
    {
        $this->addTabs();

        $fs = $this->form->addElement('fieldset')->setLabel('Baz page');

        $poem = $fs->addElement('textarea', 'textPoetry', ['rows' => 5, 'cols' => 40])
                   ->setLabel('Recite a poem:');
        $fs->addElement('textarea', 'textOpinion', ['rows' => 5, 'cols' => 40])
           ->setLabel('Did you like this demo?');

        $poem->addRule('required', 'Pretty please!');

        $this->addGlobalSubmit();
    }
}

class TabbedDisplay extends HTML_QuickForm2_Controller_Action_Display
{
    protected function renderForm(HTML_QuickForm2 $form)
    {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <style type="text/css">
/* Set up custom font and form width */
body {
    margin-left: 10px;
    font-family: Arial,sans-serif;
    font-size: small;
}

.quickform {
    min-width: 500px;
    max-width: 600px;
    width: 560px;
}

.quickform input.bigred {font-weight: bold; background: #FF6666;}
.quickform input.flat {border-style: solid; border-width: 2px; border-color: #000000;}

/* Use default styles included with the package */

<?php
    if ('/opt/alt/php56/usr/share/pear/data' != '@' . 'data_dir@') {
        $filename = '/opt/alt/php56/usr/share/pear/data/HTML_QuickForm2/quickform.css';
    } else {
        $filename = dirname(dirname(__DIR__)) . '/data/quickform.css';
    }
    readfile($filename);
?>
    </style>
    <title>HTML_QuickForm2 simple controller example</title>
  </head>
  <body>
<?php
    $renderer = HTML_QuickForm2_Renderer::factory('default');
    $renderer->setTemplateForId('tabs', '<div style="float: right;">{content}</div>');
    echo $form->render($renderer);
?>
  </body>
</html>
<?php
    }
}

class TabbedProcess implements HTML_QuickForm2_Controller_Action
{
    public function perform(HTML_QuickForm2_Controller_Page $page, $name)
    {
        echo "Submit successful!<br>\n<pre>\n";
        var_dump($page->getController()->getValue());
        echo "\n</pre>\n";
    }
}


$tabbed = new HTML_QuickForm2_Controller('Tabbed', false);

$tabbed->addPage(new PageFoo(new HTML_QuickForm2('foo')));
$tabbed->addPage(new PageBar(new HTML_QuickForm2('bar')));
$tabbed->addPage(new PageBaz(new HTML_QuickForm2('baz')));

// These actions manage going directly to the pages with the same name
$tabbed->addHandler('foo', new HTML_QuickForm2_Controller_Action_Direct());
$tabbed->addHandler('bar', new HTML_QuickForm2_Controller_Action_Direct());
$tabbed->addHandler('baz', new HTML_QuickForm2_Controller_Action_Direct());

// We actually add these handlers here for the sake of example
// They can be automatically loaded and added by the controller
$tabbed->addHandler('submit', new HTML_QuickForm2_Controller_Action_Submit());
$tabbed->addHandler('jump', new HTML_QuickForm2_Controller_Action_Jump());

// This is the action we should always define ourselves
$tabbed->addHandler('process', new TabbedProcess());
// We redefine 'display' handler to use the proper stylesheets
$tabbed->addHandler('display', new TabbedDisplay());

$tabbed->addDatasource(new HTML_QuickForm2_DataSource_Array([
    'iradYesNoMaybe' => 'M',
    'favLetter'      => ['A' => true, 'Z' => true],
    'favDate'        => ['d' => 1, 'M' => 1, 'Y' => 2001],
    'textOpinion'    => 'Yes, it rocks!'
]));

$tabbed->run();
?>