2018-05-22 23:23:20 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Wikimedia\ParamValidator;
|
|
|
|
|
|
2019-09-12 17:44:11 +00:00
|
|
|
use Wikimedia\Message\DataMessageValue;
|
2018-05-22 23:23:20 +00:00
|
|
|
use Wikimedia\ParamValidator\Util\UploadedFile;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Simple Callbacks implementation for $_GET/$_POST/$_FILES data
|
|
|
|
|
*
|
|
|
|
|
* Options array keys used by this class:
|
|
|
|
|
* - 'useHighLimits': (bool) Return value from useHighLimits()
|
|
|
|
|
*
|
|
|
|
|
* @since 1.34
|
2019-11-01 17:48:59 +00:00
|
|
|
* @unstable
|
2018-05-22 23:23:20 +00:00
|
|
|
*/
|
|
|
|
|
class SimpleCallbacks implements Callbacks {
|
|
|
|
|
|
|
|
|
|
/** @var (string|string[])[] $_GET/$_POST data */
|
|
|
|
|
private $params;
|
|
|
|
|
|
|
|
|
|
/** @var (array|UploadedFile)[] $_FILES data or UploadedFile instances */
|
|
|
|
|
private $files;
|
|
|
|
|
|
2019-09-12 17:44:11 +00:00
|
|
|
/** @var array[] Any recorded conditions */
|
2018-05-22 23:23:20 +00:00
|
|
|
private $conditions = [];
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param (string|string[])[] $params Data from $_POST + $_GET
|
|
|
|
|
* @param array[] $files Data from $_FILES
|
|
|
|
|
*/
|
|
|
|
|
public function __construct( array $params, array $files = [] ) {
|
|
|
|
|
$this->params = $params;
|
|
|
|
|
$this->files = $files;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function hasParam( $name, array $options ) {
|
|
|
|
|
return isset( $this->params[$name] );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getValue( $name, $default, array $options ) {
|
|
|
|
|
return $this->params[$name] ?? $default;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function hasUpload( $name, array $options ) {
|
|
|
|
|
return isset( $this->files[$name] );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getUploadedFile( $name, array $options ) {
|
|
|
|
|
$file = $this->files[$name] ?? null;
|
|
|
|
|
if ( $file && !$file instanceof UploadedFile ) {
|
|
|
|
|
$file = new UploadedFile( $file );
|
|
|
|
|
$this->files[$name] = $file;
|
|
|
|
|
}
|
2021-10-25 19:15:52 +00:00
|
|
|
// @phan-suppress-next-line PhanTypeMismatchReturnNullable False positive
|
2018-05-22 23:23:20 +00:00
|
|
|
return $file;
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-12 17:44:11 +00:00
|
|
|
public function recordCondition(
|
|
|
|
|
DataMessageValue $message, $name, $value, array $settings, array $options
|
|
|
|
|
) {
|
|
|
|
|
$this->conditions[] = [
|
|
|
|
|
'message' => $message,
|
|
|
|
|
'name' => $name,
|
|
|
|
|
'value' => $value,
|
|
|
|
|
'settings' => $settings,
|
|
|
|
|
];
|
2018-05-22 23:23:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Fetch any recorded conditions
|
|
|
|
|
* @return array[]
|
|
|
|
|
*/
|
|
|
|
|
public function getRecordedConditions() {
|
|
|
|
|
return $this->conditions;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Clear any recorded conditions
|
|
|
|
|
*/
|
|
|
|
|
public function clearRecordedConditions() {
|
|
|
|
|
$this->conditions = [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function useHighLimits( array $options ) {
|
|
|
|
|
return !empty( $options['useHighLimits'] );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|