Merge branch 'bugfix/form-handling-13583'

This commit is contained in:
Thomas Gelf 2016-12-14 21:11:01 +01:00
commit ae6c73b947
1 changed files with 52 additions and 50 deletions

View File

@ -53,6 +53,7 @@ abstract class DirectorObjectForm extends QuickForm
'imports',
'check_command',
'check_command_id',
'has_agent',
'command',
'command_id',
'event_command',
@ -83,12 +84,13 @@ abstract class DirectorObjectForm extends QuickForm
*
* @return DbObject|DbObjectWithSettings|IcingaObject
*/
protected function object($values = array())
protected function object()
{
if ($this->object === null) {
$values = array();
/** @var DbObject|IcingaObject $class */
$class = $this->getObjectClassname();
if ($this->preferredObjectType && ! array_key_exists('object_type', $values)) {
if ($this->preferredObjectType) {
$values['object_type'] = $this->preferredObjectType;
}
@ -102,7 +104,6 @@ abstract class DirectorObjectForm extends QuickForm
if (! $this->object->hasConnection()) {
$this->object->setConnection($this->db);
}
$this->object->setProperties($values);
}
return $this->object;
@ -130,13 +131,15 @@ abstract class DirectorObjectForm extends QuickForm
if ($el = $this->getElement($key)) {
if (array_key_exists($key, $post)) {
$this->populate(array($key => $post[$key]));
$old = null;
try {
$old = $object->get($key);
$object->set($key, $el->getValue());
$object->resolveUnresolvedRelatedProperties();
} catch (Exception $e) {
$object->set($key, $old);
if ($old !== null) {
$object->set($key, $old);
}
$this->addException($e, $key);
}
}
@ -258,42 +261,27 @@ abstract class DirectorObjectForm extends QuickForm
protected function handleProperties(DbObject $object, & $values)
{
$resolve = $this->assertResolvedImports();
if ($this->hasBeenSent()) {
foreach ($values as $key => $value) {
if (in_array($key, $this->earlyProperties) || substr($key, 0, 4) === 'var_') {
continue;
}
try {
$object->set($key, $value);
if ($object instanceof IcingaObject) {
$object->resolveUnresolvedRelatedProperties();
if ($object->hasProperty($key)) {
$object->set($key, $value);
if ($object instanceof IcingaObject) {
$object->resolveUnresolvedRelatedProperties();
}
}
} catch (Exception $e) {
$this->addException($e, $key);
}
}
}
}
if ($object instanceof IcingaObject) {
$props = (array) $object->toPlainObject(
false,
false,
null,
true // is default//false // Do not resolve IDs
);
} else {
$props = $object->getProperties();
unset($props['vars']);
}
$this->setDefaults($this->removeEmptyProperties($props));
if ($resolve) {
protected function loadInheritedProperties()
{
if ($this->assertResolvedImports()) {
try {
$this->showInheritedProperties($object);
$this->showInheritedProperties($this->object());
} catch (Exception $e) {
$this->addException($e);
}
@ -636,37 +624,51 @@ abstract class DirectorObjectForm extends QuickForm
protected function onRequest()
{
$values = array();
$object = $this->object();
$this->setDefaultsFromObject($object);
$this->prepareFields($object);
if ($this->hasBeenSent()) {
if ($this->shouldBeDeleted()) {
$this->deleteObject($object);
}
$post = $this->getRequest()->getPost();
$this->populate($post);
$values = $this->getValues();
if ($object instanceof IcingaObject) {
$this->setCustomVarValues($object, $post);
}
$this->handlePost();
}
$this->loadInheritedProperties();
$this->addFields();
}
protected function handlePost()
{
$object = $this->object();
if ($this->shouldBeDeleted()) {
$this->deleteObject($object);
}
$post = $this->getRequest()->getPost();
$this->populate($post);
$values = $this->getValues();
if ($object instanceof IcingaObject) {
$this->setCustomVarValues($object, $post);
}
$this->handleProperties($object, $values);
// TODO: get rid of this
if ($object instanceof IcingaObject) {
$this->handleRanges($object, $values);
}
$this->handleProperties($object, $values);
}
/*
// TODO: something like this could be used to remember unstored changes
if ($object->hasBeenModified()) {
$this->addHtmlHint($this->translate('Object has been modified'));
protected function setDefaultsFromObject(DbObject $object)
{
/** @var ZfElement $element */
foreach ($this->getElements() as $element) {
$key = $element->getName();
if ($object->hasProperty($key)) {
$value = $object->get($key);
if ($value !== null) {
$element->setValue($value);
}
}
}
*/
}
protected function deleteObject($object)