Introduce Form::setOnSuccess() in favor of overriding the constructor

Zend_Form uses setters for options if a respective setter method exists.
It is not necessary to override the constructor for introducing new options.

Conflicts:
	library/Icinga/Web/Form.php
This commit is contained in:
Eric Lippmann 2014-11-04 16:15:06 +01:00 committed by Marius Hein
parent 10cfecf2ec
commit f2717b6d26
4 changed files with 39 additions and 27 deletions

View File

@ -44,7 +44,7 @@ class DashboardController extends ActionController
$params['url'] = rawurldecode($this->_request->getParam('url'));
$form->populate($params);
}
$form->setOnSuccess(function (Request $request, Form $form) use ($dashboard) {
$form->setOnSuccess(function (Form $form) use ($dashboard) {
try {
$pane = $dashboard->getPane($form->getValue('pane'));
} catch (ProgrammingError $e) {
@ -83,8 +83,14 @@ class DashboardController extends ActionController
400
);
}
$form->setOnSuccess(function (Request $request, Form $form) use ($dashboard) {
$pane = $dashboard->getPane($form->getValue('pane'));
$form->setOnSuccess(function (Form $form) use ($dashboard) {
try {
$pane = $dashboard->getPane($form->getValue('pane'));
} catch (ProgrammingError $e) {
$pane = new Dashboard\Pane($form->getValue('pane'));
$pane->setUserWidget();
$dashboard->addPane($pane);
}
try {
$component = $pane->getComponent($form->getValue('component'));
$component->setUrl($form->getValue('url'));
@ -97,7 +103,11 @@ class DashboardController extends ActionController
if ($form->getValue('org_component') && $form->getValue('org_component') !== $component->getTitle()) {
$pane->removeComponent($form->getValue('org_component'));
}
$dashboard->write();
// Move
if ($form->getValue('org_pane') && $form->getValue('org_pane') !== $pane->getTitle()) {
$oldPane = $dashboard->getPane($form->getValue('org_pane'));
$oldPane->removeComponent($component->getTitle());
}
$dashboard->write();
Notification::success(t('Component updated'));
return true;
@ -130,7 +140,7 @@ class DashboardController extends ActionController
}
$pane = $this->_request->getParam('pane');
$component = $this->_request->getParam('component');
$form->setOnSuccess(function (Request $request, Form $form) use ($dashboard, $component, $pane) {
$form->setOnSuccess(function (Form $form) use ($dashboard, $component, $pane) {
try {
$pane = $dashboard->getPane($pane);
$pane->removeComponent($component);
@ -162,7 +172,7 @@ class DashboardController extends ActionController
);
}
$pane = $this->_request->getParam('pane');
$form->setOnSuccess(function (Request $request, Form $form) use ($dashboard, $pane) {
$form->setOnSuccess(function (Form $form) use ($dashboard, $pane) {
try {
$pane = $dashboard->getPane($pane);
$dashboard->removePane($pane->getTitle());

View File

@ -161,26 +161,6 @@ class ComponentForm extends Form
);
}
/**
* Adjust preferences and persist them
*
* @see Form::onSuccess()
*/
public function onSuccess(Request $request)
{
return true;
}
/**
* Populate data if any
*
* @see Form::onRequest()
*/
public function onRequest(Request $request)
{
return true;
}
/**
* @param \Icinga\Web\Widget\Dashboard $dashboard
*/

View File

@ -163,6 +163,26 @@ class Form extends Zend_Form
parent::__construct($options);
}
/**
* Set a callback that is called instead of this form's onSuccess method
*
* It is called using the following signature: (Request $request, Form $form).
*
* @param callable $onSuccess Callback
*
* @return $this
*
* @throws LogicException If the callback is not callable
*/
public function setOnSuccess($onSuccess)
{
if (! is_callable($onSuccess)) {
throw new LogicException('The option `onSuccess\' is not callable');
}
$this->onSuccess = $onSuccess;
return $this;
}
/**
* Set the label to use for the standard submit button
*

View File

@ -6,6 +6,7 @@ namespace Icinga\Web\Widget;
use Icinga\Application\Icinga;
use Icinga\Application\Config;
use Icinga\Data\ConfigObject;
use Icinga\Exception\ConfigurationError;
use Icinga\Exception\NotReadableError;
use Icinga\Exception\ProgrammingError;
@ -102,7 +103,8 @@ class Dashboard extends AbstractWidget
}
}
$config = new Config($output);
$co = new ConfigObject($output);
$config = new Config($co);
$writer = new IniWriter(array('config' => $config, 'filename' => $configFile));
$writer->write();
}