Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
19 / 19
100.00% covered (success)
100.00%
9 / 9
CRAP
100.00% covered (success)
100.00%
1 / 1
SimpleCallbacks
100.00% covered (success)
100.00%
19 / 19
100.00% covered (success)
100.00%
9 / 9
11
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 hasParam
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getValue
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasUpload
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getUploadedFile
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
3
 recordCondition
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 getRecordedConditions
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 clearRecordedConditions
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 useHighLimits
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Wikimedia\ParamValidator;
4
5use Wikimedia\Message\DataMessageValue;
6use Wikimedia\ParamValidator\Util\UploadedFile;
7
8/**
9 * Simple Callbacks implementation for $_GET/$_POST/$_FILES data
10 *
11 * Options array keys used by this class:
12 *  - 'useHighLimits': (bool) Return value from useHighLimits()
13 *
14 * @since 1.34
15 * @unstable
16 */
17class SimpleCallbacks implements Callbacks {
18
19    /** @var (string|string[])[] $_GET/$_POST data */
20    private $params;
21
22    /** @var (array|UploadedFile)[] $_FILES data or UploadedFile instances */
23    private $files;
24
25    /** @var array[] Any recorded conditions */
26    private $conditions = [];
27
28    /**
29     * @param (string|string[])[] $params Data from $_POST + $_GET
30     * @param array[] $files Data from $_FILES
31     */
32    public function __construct( array $params, array $files = [] ) {
33        $this->params = $params;
34        $this->files = $files;
35    }
36
37    /** @inheritDoc */
38    public function hasParam( $name, array $options ) {
39        return isset( $this->params[$name] );
40    }
41
42    /** @inheritDoc */
43    public function getValue( $name, $default, array $options ) {
44        return $this->params[$name] ?? $default;
45    }
46
47    /** @inheritDoc */
48    public function hasUpload( $name, array $options ) {
49        return isset( $this->files[$name] );
50    }
51
52    /** @inheritDoc */
53    public function getUploadedFile( $name, array $options ) {
54        $file = $this->files[$name] ?? null;
55        if ( $file && !$file instanceof UploadedFile ) {
56            $file = new UploadedFile( $file );
57            $this->files[$name] = $file;
58        }
59        // @phan-suppress-next-line PhanTypeMismatchReturnNullable False positive
60        return $file;
61    }
62
63    /** @inheritDoc */
64    public function recordCondition(
65        DataMessageValue $message, $name, $value, array $settings, array $options
66    ) {
67        $this->conditions[] = [
68            'message' => $message,
69            'name' => $name,
70            'value' => $value,
71            'settings' => $settings,
72        ];
73    }
74
75    /**
76     * Fetch any recorded conditions
77     * @return array[]
78     */
79    public function getRecordedConditions() {
80        return $this->conditions;
81    }
82
83    /**
84     * Clear any recorded conditions
85     */
86    public function clearRecordedConditions() {
87        $this->conditions = [];
88    }
89
90    /** @inheritDoc */
91    public function useHighLimits( array $options ) {
92        return !empty( $options['useHighLimits'] );
93    }
94
95}