diff --git a/application/controllers/SelfServiceController.php b/application/controllers/SelfServiceController.php index 5d4393b5..b58e3014 100644 --- a/application/controllers/SelfServiceController.php +++ b/application/controllers/SelfServiceController.php @@ -79,16 +79,22 @@ class SelfServiceController extends ActionController } else { $error = implode('; ', $form->getErrorMessages()); if ($error === '') { - foreach ($form->getErrors() as $elName => $errors) { - if (in_array('isEmpty', $errors)) { + if ($form->isMissingRequiredFields()) { + $fields = $form->listMissingRequiredFields(); + if (count($fields) === 1) { $this->sendPowerShellError( - sprintf("%s is required", $elName), + sprintf("%s is required", $fields[0]), 400 ); - return; } else { - $this->sendPowerShellError('An unknown error ocurred', 500); + $this->sendPowerShellError( + sprintf("Missing parameters: %s", implode(', ', $fields)), + 400 + ); } + return; + } else { + $this->sendPowerShellError('An unknown error ocurred', 500); } } else { $this->sendPowerShellError($error, 400); @@ -171,13 +177,12 @@ class SelfServiceController extends ActionController */ protected function sendPowerShellError($error, $code) { - $this->getResponse()->setHttpResponseCode($code); if ($this->getRequest()->getHeader('X-Director-Accept') === 'text/plain') { + $this->getResponse()->setHttpResponseCode($code); echo "ERROR: $error"; } else { - $this->sendJsonError($this->getResponse(), $error); + $this->sendJsonError($this->getResponse(), $error, $code); } - exit; } /** diff --git a/application/forms/IcingaHostSelfServiceForm.php b/application/forms/IcingaHostSelfServiceForm.php index ded96a99..1e05b963 100644 --- a/application/forms/IcingaHostSelfServiceForm.php +++ b/application/forms/IcingaHostSelfServiceForm.php @@ -83,6 +83,23 @@ class IcingaHostSelfServiceForm extends DirectorForm return $this->template; } + public function listMissingRequiredFields() + { + $result = []; + foreach ($this->getElements() as $element) { + if (in_array('isEmpty', $element->getErrors())) { + $result[] = $element->getName(); + } + } + + return $result; + } + + public function isMissingRequiredFields() + { + return count($this->listMissingRequiredFields()) > 0; + } + public function onSuccess() { $db = $this->getDb();