mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-12-27 17:51:53 +00:00
96d4a3ecf7
Due to historical reasons, the code is in subfolder "1". With SVN removal, we place the code back and remove the annoying "1" folder.
131 lines
2.8 KiB
PHP
131 lines
2.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Fluent interface for validating the contents of member variables.
|
|
* This should be immutable. See HTMLPurifier_ConfigSchema_Validator for
|
|
* use-cases. We name this an 'atom' because it's ONLY for validations that
|
|
* are independent and usually scalar.
|
|
*/
|
|
class HTMLPurifier_ConfigSchema_ValidatorAtom
|
|
{
|
|
/**
|
|
* @type string
|
|
*/
|
|
protected $context;
|
|
|
|
/**
|
|
* @type object
|
|
*/
|
|
protected $obj;
|
|
|
|
/**
|
|
* @type string
|
|
*/
|
|
protected $member;
|
|
|
|
/**
|
|
* @type mixed
|
|
*/
|
|
protected $contents;
|
|
|
|
public function __construct($context, $obj, $member)
|
|
{
|
|
$this->context = $context;
|
|
$this->obj = $obj;
|
|
$this->member = $member;
|
|
$this->contents =& $obj->$member;
|
|
}
|
|
|
|
/**
|
|
* @return HTMLPurifier_ConfigSchema_ValidatorAtom
|
|
*/
|
|
public function assertIsString()
|
|
{
|
|
if (!is_string($this->contents)) {
|
|
$this->error('must be a string');
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return HTMLPurifier_ConfigSchema_ValidatorAtom
|
|
*/
|
|
public function assertIsBool()
|
|
{
|
|
if (!is_bool($this->contents)) {
|
|
$this->error('must be a boolean');
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return HTMLPurifier_ConfigSchema_ValidatorAtom
|
|
*/
|
|
public function assertIsArray()
|
|
{
|
|
if (!is_array($this->contents)) {
|
|
$this->error('must be an array');
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return HTMLPurifier_ConfigSchema_ValidatorAtom
|
|
*/
|
|
public function assertNotNull()
|
|
{
|
|
if ($this->contents === null) {
|
|
$this->error('must not be null');
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return HTMLPurifier_ConfigSchema_ValidatorAtom
|
|
*/
|
|
public function assertAlnum()
|
|
{
|
|
$this->assertIsString();
|
|
if (!ctype_alnum($this->contents)) {
|
|
$this->error('must be alphanumeric');
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return HTMLPurifier_ConfigSchema_ValidatorAtom
|
|
*/
|
|
public function assertNotEmpty()
|
|
{
|
|
if (empty($this->contents)) {
|
|
$this->error('must not be empty');
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return HTMLPurifier_ConfigSchema_ValidatorAtom
|
|
*/
|
|
public function assertIsLookup()
|
|
{
|
|
$this->assertIsArray();
|
|
foreach ($this->contents as $v) {
|
|
if ($v !== true) {
|
|
$this->error('must be a lookup array');
|
|
}
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @param string $msg
|
|
* @throws HTMLPurifier_ConfigSchema_Exception
|
|
*/
|
|
protected function error($msg)
|
|
{
|
|
throw new HTMLPurifier_ConfigSchema_Exception(ucfirst($this->member) . ' in ' . $this->context . ' ' . $msg);
|
|
}
|
|
}
|
|
|
|
// vim: et sw=4 sts=4
|