1
0
mirror of https://github.com/AlexKrunch/AnonIB-3D.git synced 2024-11-16 09:31:05 -05:00
AnonIB-3D/src_php/php/Libs/Lazer/Classes/Helpers/Validate.php

208 lines
5.3 KiB
PHP
Raw Normal View History

2019-08-17 04:21:07 -04:00
<?php
namespace Lazer\Classes\Helpers;
use Lazer\Classes\LazerException;
use Lazer\Classes\Relation;
/**
* Validation for tables
*
* @category Helpers
* @author Grzegorz Kuźnik
* @copyright (c) 2013, Grzegorz Kuźnik
* @license http://opensource.org/licenses/MIT The MIT License
* @link https://github.com/Greg0/Lazer-Database GitHub Repository
*/
class Validate {
/**
* Name of table
* @var string
*/
private $name;
/**
* Table name
* @param string $name
* @return Validate
*/
public static function table($name)
{
$validate = new Validate();
$validate->name = $name;
return $validate;
}
/**
* Checking that field type is numeric
* @param string $type
* @return boolean
*/
public static function isNumeric($type)
{
$defined = array('integer', 'double');
if (in_array($type, $defined))
{
return TRUE;
}
return FALSE;
}
/**
* Checking that types from array matching with [boolean, integer, string, double]
* @param array $types Indexed array
* @return bool
* @throws LazerException
*/
public static function types(array $types)
{
$defined = array('boolean', 'integer', 'string', 'double');
$diff = array_diff($types, $defined);
if (empty($diff))
{
return TRUE;
}
throw new LazerException('Wrong types: "' . implode(', ', $diff) . '". Available "boolean, integer, string, double"');
}
/**
* Delete ID field from arrays
* @param array $fields
* @return array Fields without ID
*/
public static function filter(array $fields)
{
if (array_values($fields) === $fields)
{
if (($key = array_search('id', $fields)) !== false)
{
unset($fields[$key]);
}
}
else
{
unset($fields['id']);
}
return $fields;
}
/**
* Change keys and values case to lower
* @param array $array
* @return array
*/
public static function arrToLower(array $array)
{
$array = array_change_key_case($array);
$array = array_map('strtolower', $array);
return $array;
}
/**
* Checking that typed fields really exist in table
* @param array $fields Indexed array
* @return boolean
* @throws LazerException If field(s) does not exist
*/
public function fields(array $fields)
{
$fields = self::filter($fields);
$diff = array_diff($fields, Config::table($this->name)->fields());
if (empty($diff))
{
return TRUE;
}
throw new LazerException('Field(s) "' . implode(', ', $diff) . '" does not exists in table "' . $this->name . '"');
}
/**
* Checking that typed field really exist in table
* @param string $name
* @return boolean
* @throws LazerException If field does not exist
*/
public function field($name)
{
if (in_array($name, Config::table($this->name)->fields()))
{
return TRUE;
}
throw new LazerException('Field ' . $name . ' does not exists in table "' . $this->name . '"');
}
/**
* Checking that Table and Config exists and throw exceptions if not
* @return boolean
* @throws LazerException
*/
public function exists()
{
if (!Data::table($this->name)->exists())
throw new LazerException('Table "' . $this->name . '" does not exists');
if (!Config::table($this->name)->exists())
throw new LazerException('Config "' . $this->name . '" does not exists');
return TRUE;
}
/**
* Checking that typed field have correct type of value
* @param string $name
* @param mixed $value
* @return boolean
* @throws LazerException If type is wrong
*/
public function type($name, $value)
{
$schema = Config::table($this->name)->schema();
if (array_key_exists($name, $schema) && $schema[$name] == gettype($value))
{
return TRUE;
}
throw new LazerException('Wrong data type');
}
/**
* Checking that relation between tables exists
* @param string $local local table
* @param string $foreign related table
* @return bool relation exists
* @throws LazerException
*/
public static function relation($local, $foreign)
{
$relations = Config::table($local)->relations();
if (isset($relations->{$foreign}))
{
return TRUE;
}
throw new LazerException('Relation "' . $local . '" to "' . $foreign . '" doesn\'t exist');
}
/**
* Checking that relation type is correct
* @param string $type
* @return bool relation type
* @throws LazerException Wrong relation type
*/
public static function relationType($type)
{
if (in_array($type, Relation::relations()))
{
return true;
}
throw new LazerException('Wrong relation type');
}
}