GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

AbstractValidateRenderer::getValidatorClassName()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
/**
3
 * Description
4
 *
5
 * @category  Acsi
6
 * @package   Acsi\
7
 * @copyright 2012 Bram Gerritsen
8
 * @version   SVN: $Id$
9
 */
10
11
namespace StrokerForm\Renderer;
12
13
use Zend\Form\Element\MultiCheckbox;
14
use Zend\Form\Element\Radio;
15
use Zend\Form\ElementInterface;
16
use Zend\Form\FieldsetInterface;
17
use Zend\Form\FormInterface;
18
use Zend\InputFilter\InputFilterInterface;
19
use Zend\InputFilter\InputInterface;
20
use Zend\Validator\Csrf;
21
use Zend\Validator\NotEmpty;
22
use Zend\Validator\ValidatorInterface;
23
use Zend\View\Renderer\PhpRenderer as View;
24
25
abstract class AbstractValidateRenderer extends AbstractRenderer
26
{
27
    /**
28
     * Executed before the ZF2 view helper renders the element
29
     *
30
     * @param string                          $formAlias
31
     * @param \Zend\View\Renderer\PhpRenderer $view
32
     * @param \Zend\Form\FormInterface        $form
33
     * @param array                           $options
34
     *
35
     * @return FormInterface
36
     */
37
    public function preRenderForm($formAlias, View $view, FormInterface $form = null, array $options = [])
38
    {
39
        $this->setOptions($options);
40
41
        if ($form === null) {
42
            $form = $this->getFormManager()->get($formAlias);
43
        }
44
45
        $inputFilter = $form->getInputFilter();
46
47
        /** @var $element \Zend\Form\Element */
48
        $validators = $this->extractValidatorsForForm($form, $inputFilter);
49
        foreach ($validators as $validator) {
50
            $element = $validator['element'];
51
            foreach ($validator['validators'] as $val) {
52
                if ($val['instance'] instanceof Csrf) {
53
                    continue;
54
                }
55
                $this->addValidationAttributesForElement($formAlias, $element, $val['instance']);
56
            };
57
        }
58
59
        return $form;
60
    }
61
62
    /**
63
     * Iterate through all the elements and retrieve their validators
64
     *
65
     * @param FieldsetInterface    $formOrFieldset
66
     * @param InputFilterInterface $inputFilter
67
     *
68
     * @return array
69
     */
70
    public function extractValidatorsForForm(FieldsetInterface $formOrFieldset, InputFilterInterface $inputFilter)
71
    {
72
        $foundValidators = [];
73
        foreach ($formOrFieldset->getElements() as $element) {
74
            $validators = $this->getValidatorsForElement($inputFilter, $element);
75
            if (count($validators) > 0) {
76
                $foundValidators[] = [
77
                    'element'    => $element,
78
                    'validators' => $validators
79
                ];
80
            }
81
        }
82
83
        foreach ($formOrFieldset->getFieldsets() as $key => $fieldset) {
84
            if ($inputFilter->has($key)) {
85
                $foundValidators = array_merge($foundValidators, $this->extractValidatorsForForm($fieldset, $inputFilter->get($key)));
0 ignored issues
show
Bug introduced by
It seems like $inputFilter->get($key) targeting Zend\InputFilter\InputFilterInterface::get() can also be of type object<Zend\InputFilter\InputInterface>; however, StrokerForm\Renderer\Abs...ractValidatorsForForm() does only seem to accept object<Zend\InputFilter\InputFilterInterface>, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
86
            }
87
        }
88
89
        return $foundValidators;
90
    }
91
92
    /**
93
     * Get all validators for a given element
94
     *
95
     * @param InputFilterInterface $inputFilter
96
     * @param ElementInterface     $element
97
     *
98
     * @return mixed
99
     */
100
    public function getValidatorsForElement(InputFilterInterface $inputFilter, ElementInterface $element)
101
    {
102
        if ($element->getOption('strokerform-exclude')) {
103
            return;
104
        }
105
106
        // Check if we are dealing with a fieldset element
107
        if (preg_match('/^.*\[(.*)\]$/', $element->getName(), $matches)) {
108
            $elementName = $matches[1];
109
        } else {
110
            $elementName = $element->getName();
111
        }
112
113
        if (!$inputFilter->has($elementName)) {
114
            return;
115
        }
116
117
        $input = $inputFilter->get($elementName);
118
        if (!$input instanceof InputInterface) {
119
            return [];
120
        }
121
122
        $this->injectNotEmptyValidator($input);
123
        return $input->getValidatorChain()->getValidators();
124
    }
125
126
    /**
127
     * When the input is required we need to inject the NotEmpty validator
128
     *
129
     * @param InputInterface $input
130
     */
131
    protected function injectNotEmptyValidator(InputInterface $input)
132
    {
133
        if (!$input->isRequired()) {
134
            return;
135
        }
136
137
        $chain = $input->getValidatorChain();
138
139
        // Check if NotEmpty validator is already in chain
140
        $validators = $chain->getValidators();
141
        foreach ($validators as $validator) {
142
            if ($validator['instance'] instanceof NotEmpty) {
143
                return;
144
            }
145
        }
146
147
        // Make sure NotEmpty validator is added when input is required
148
        $chain->prependValidator(new NotEmpty());
149
    }
150
151
    /**
152
     * Excecuted before the ZF2 view helper renders the element
153
     *
154
     * @param  ElementInterface $element
155
     *
156
     * @return mixed
157
     */
158
    public function preRenderInputField(ElementInterface $element)
159
    {
160
    }
161
162
    /**
163
     * @param  string             $formAlias
164
     * @param  ElementInterface   $element
165
     * @param  ValidatorInterface $validator
166
     *
167
     * @return mixed
168
     */
169
    abstract protected function addValidationAttributesForElement($formAlias, ElementInterface $element, ValidatorInterface $validator = null);
170
171
    /**
172
     * Get the name of the form element
173
     *
174
     * @param  ElementInterface $element
175
     *
176
     * @return string
177
     */
178
    protected function getElementName(ElementInterface $element)
179
    {
180
        $elementName = $element->getName();
181
        if ($element instanceof MultiCheckbox && !$element instanceof Radio) {
182
            $elementName .= '[]';
183
        }
184
185
        return $elementName;
186
    }
187
188
    /**
189
     * Get the classname of the zend validator
190
     *
191
     * @param  ValidatorInterface $validator
192
     *
193
     * @return mixed
194
     */
195
    protected function getValidatorClassName(ValidatorInterface $validator = null)
196
    {
197
        $namespaces = explode('\\', get_class($validator));
198
        return end($namespaces);
199
    }
200
}
201