From a630db93e867507aeede0066729afe7d3861a9cc Mon Sep 17 00:00:00 2001
From: Johannes Meyer <johannes.meyer@netways.de>
Date: Thu, 12 Feb 2015 08:58:01 +0100
Subject: [PATCH] Show proper examples in case a user doesn't enter a
 permitted/correct val

resolves #7973
---
 library/Icinga/Web/Form/Validator/InArray.php | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 library/Icinga/Web/Form/Validator/InArray.php

diff --git a/library/Icinga/Web/Form/Validator/InArray.php b/library/Icinga/Web/Form/Validator/InArray.php
new file mode 100644
index 000000000..d9cbc481f
--- /dev/null
+++ b/library/Icinga/Web/Form/Validator/InArray.php
@@ -0,0 +1,28 @@
+<?php
+/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
+
+namespace Icinga\Web\Form\Validator;
+
+use Zend_Validate_InArray;
+use Icinga\Util\String;
+
+class InArray extends Zend_Validate_InArray
+{
+    protected function _error($messageKey, $value = null)
+    {
+        if ($messageKey === static::NOT_IN_ARRAY) {
+            $matches = String::findSimilar($this->_value, $this->_haystack);
+            if (empty($matches)) {
+                $this->_messages[$messageKey] = sprintf(t('"%s" is not in the list of allowed values.'), $this->_value);
+            } else {
+                $this->_messages[$messageKey] = sprintf(
+                    t('"%s" is not in the list of allowed values. Did you mean one of the following?: %s'),
+                    $this->_value,
+                    implode(', ', $matches)
+                );
+            }
+        } else {
+            parent::_error($messageKey, $value);
+        }
+    }
+}