Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
NotIn
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
2 / 2
13
100.00% covered (success)
100.00%
1 / 1
 evaluate
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
1 / 1
11
 generateDefaultMessage
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2/**
3 * Pop PHP Framework (http://www.popphp.org/)
4 *
5 * @link       https://github.com/popphp/popphp-framework
6 * @author     Nick Sagona, III <dev@noladev.com>
7 * @copyright  Copyright (c) 2009-2025 NOLA Interactive, LLC.
8 * @license    http://www.popphp.org/license     New BSD License
9 */
10
11/**
12 * @namespace
13 */
14namespace Pop\Validator;
15
16/**
17 * Not in validator class (alias class)
18 *
19 * @category   Pop
20 * @package    Pop\Validator
21 * @author     Nick Sagona, III <dev@noladev.com>
22 * @copyright  Copyright (c) 2009-2025 NOLA Interactive, LLC.
23 * @license    http://www.popphp.org/license     New BSD License
24 * @version    4.5.0
25 */
26class NotIn extends AbstractValidator
27{
28
29    /**
30     * Method to evaluate the validator
31     *
32     * @param  mixed $input
33     * @return bool
34     */
35    public function evaluate(mixed $input = null): bool
36    {
37        // Set the input, if passed
38        if ($input !== null) {
39            $this->input = $input;
40        }
41
42        // Set the default message
43        if (!$this->hasMessage()) {
44            $this->generateDefaultMessage();
45        }
46
47        $result   = false;
48        $needle   = $this->input;
49        $haystack = $this->value;
50
51        if (is_string($needle) && is_string($haystack)) {
52            $result = (!str_contains($haystack, $needle));
53        } else if (!is_array($needle) && is_array($haystack)) {
54            $result = (!in_array($needle, $haystack));
55        } else if (is_array($needle)) {
56            if (is_array($haystack)) {
57                $result = empty(array_intersect($needle, $haystack));
58            } else {
59                $result = true;
60                foreach ($needle as $n) {
61                    if (str_contains((string)$haystack, $n)) {
62                        $result = false;
63                        break;
64                    }
65                }
66            }
67        }
68
69        return $result;
70    }
71
72    /**
73     * Generate default message
74
75     * @param  mixed $name
76     * @param  mixed $value
77     * @return string
78     */
79    public function generateDefaultMessage(mixed $name = null, mixed $value = null): string
80    {
81        $this->message = "The " . (($name !== null) ? "'" . $name . "'" : "value") .
82            " must not be contained in the value.";
83
84        return $this->message;
85    }
86
87}