File: //opt/cpanel/ea-php55/root/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(' ')
->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([' ', '<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/cpanel/ea-php55/root/usr/share/pear-data' != '@' . 'data_dir@') {
$filename = '/opt/cpanel/ea-php55/root/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();
?>