Первая фиксация

This commit is contained in:
RedHood
2020-10-03 00:11:19 +10:00
commit 252b261720
30 changed files with 11119 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
<?php
declare(strict_types=1);
namespace Mirzaev\Feip\Params;
use Mirzaev\Feip\Error;
/**
* Параметр возраста
*
* @property int $age Возраст
*
* @package Mirzaev\Feip\Params
* @author Арсен Мирзаев <red@hood.su>
*/
trait Age
{
/**
* Возраст: параметр
*
* @var int
*/
protected int $age = 0;
/**
* Возраст: фильтр
*
* @param string|int|float $target Значение для фильтрации
*
* @return int|null
*/
public static function age($target): ?int
{
// Очистка
if ($sanitized = filter_var($target, FILTER_CALLBACK, array('options' => [self::class, 'onlyNumbers']))) {
// Если очищение вернуло результат
// Проверка
if ($sanitized !== (int) $target) {
// Если очищенное значение не совпадает с отправленным
new Error(200, __FUNCTION__);
} else if (filter_var($sanitized, FILTER_VALIDATE_INT) && $sanitized > 0 && $sanitized <= 150) {
return (int) $sanitized;
}
} else {
new Error(200, __FUNCTION__);
}
return null;
}
/**
* Возраст: очистка
*
* @param string|int|float $target Значение для очистки
*
* @return string|null
*/
public static function onlyNumbers($target): int
{
// Поиск цифр
preg_match_all('/[0-9]*/', $target, $match);
// Инициализация
$result = '';
// Конкатанация найденных цифр
foreach ($match[0] as $number) {
$result .= $number;
}
// В задании было сказано: для номеров тип string
return (int) $result;
}
}

View File

@@ -0,0 +1,52 @@
<?php
declare(strict_types=1);
namespace Mirzaev\Feip\Params;
use Mirzaev\Feip\Error;
/**
* Параметр bar
*
* @property string $bar bar
*
* @package Mirzaev\Feip\Params
* @author Арсен Мирзаев <red@hood.su>
*/
trait Bar
{
/**
* bar: параметр
*
* @var string
*/
protected string $bar = '';
/**
* bar: фильтр
*
* @param string|int|float $target Значение для фильтрации
*
* @return string|null
*/
public static function bar($target): ?string
{
// Очистка
if ($sanitized = filter_var($target, FILTER_SANITIZE_STRING)) {
// Если очищение вернуло результат
// Проверка
if ($sanitized !== $target) {
// Если очищенное значение не совпадает с отправленным
new Error(200, __FUNCTION__);
}
return (string) $sanitized;
} else {
new Error(200, __FUNCTION__);
}
return null;
}
}

View File

@@ -0,0 +1,81 @@
<?php
declare(strict_types=1);
namespace Mirzaev\Feip\Params;
use Mirzaev\Feip\Error;
/**
* Параметр baz
*
* @property string $baz baz
*
* @package Mirzaev\Feip\Params
* @author Арсен Мирзаев <red@hood.su>
*/
trait Baz
{
/**
* baz: параметр
*
* @var string
*/
protected string $baz = '';
/**
* baz: фильтр
*
* @param string|int|float $target Значение для фильтрации
*
* @return string|null
*/
public static function baz($target): ?string
{
// Очистка
if ($sanitized = filter_var($target, FILTER_CALLBACK, array('options' => [self::class, 'phoneNumberRus']))) {
// Если очищение вернуло результат
// Проверка
if ($sanitized !== $target || !preg_match('/^7[0-9]{10}$/', $sanitized)) {
// Если очищенное значение не совпадает с отправленным
// или если не совпадает с паттерном "7**********" (российский номер)
new Error(200, __FUNCTION__);
}
// В задании было указано: для номеров тип string
return (string) $sanitized;
} else {
new Error(200, __FUNCTION__);
}
return null;
}
/**
* baz: очистка
*
* @param string|int|float $target Значение для очистки
*
* @return string|null
*/
public static function phoneNumberRus($target): string
{
// Поиск цифр
preg_match_all('/[0-9]*/', $target, $match);
// Инициализация
$result = '';
// Конкатанация найденных цифр
foreach ($match[0] as $number) {
$result .= $number;
}
// Конвертация под Российский номер
$result[0] = 7;
// В задании было сказано: для номеров тип string
return (string) $result;
}
}

View File

@@ -0,0 +1,53 @@
<?php
declare(strict_types=1);
namespace Mirzaev\Feip\Params;
use Mirzaev\Feip\Error;
/**
* Параметр почты
*
* @property string $email Почта
*
* @package Mirzaev\Feip\Params
* @author Арсен Мирзаев <red@hood.su>
*/
trait Email
{
/**
* Почта: параметр
*
* @var string
*/
protected string $email = '';
/**
* Почта: фильтр
*
* @param string|int|float $target Значение для фильтрации
*
* @return string|null
*/
public static function email($target): ?string
{
// Очистка
if ($sanitized = filter_var($target, FILTER_SANITIZE_EMAIL)) {
// Если очищение вернуло результат
// Проверка
if ($sanitized !== $target || !preg_match("/[0-9A-z]+@[A-z]+\.[A-z]+/", $sanitized)) {
// Если очищенное значение не совпадает с отправленным
// или если не совпадает с паттерном "email"
new Error(200, __FUNCTION__);
}
return (string) $sanitized;
} else {
new Error(200, __FUNCTION__);
}
return null;
}
}

View File

@@ -0,0 +1,52 @@
<?php
declare(strict_types=1);
namespace Mirzaev\Feip\Params;
use Mirzaev\Feip\Error;
/**
* Параметр имени
*
* @property string $first_name Имя
*
* @package Mirzaev\Feip\Params
* @author Арсен Мирзаев <red@hood.su>
*/
trait FirstName
{
/**
* Имя: параметр
*
* @var string
*/
protected string $first_name = '';
/**
* Имя: фильтр
*
* @param mixed $target Значение для фильтрации
*
* @return array|null
*/
public static function firstName($target): ?array
{
// Очистка
if ($sanitized = filter_var($target, FILTER_SANITIZE_STRING)) {
// Если очищение вернуло результат
// Проверка
if ($sanitized !== $target) {
// Если очищенное значение не совпадает с отправленным
new Error(200, __FUNCTION__);
}
return (array) $sanitized;
} else {
new Error(200, __FUNCTION__);
}
return null;
}
}

View File

@@ -0,0 +1,53 @@
<?php
declare(strict_types=1);
namespace Mirzaev\Feip\Params;
use Mirzaev\Feip\Error;
/**
* Параметр foo
*
* @property int $foo foo
*
* @package Mirzaev\Params\Filters
* @author Арсен Мирзаев <red@hood.su>
*/
trait Foo
{
/**
* foo: параметр
*
* @var int
*/
protected int $foo = 0;
/**
* foo: фильтр
*
* @param string|int|float $target Значение для фильтрации
*
* @return int|null
*/
public static function foo($target): ?int
{
// Очистка
if ($sanitized = filter_var($target, FILTER_SANITIZE_NUMBER_INT)) {
// Если очищение вернуло результат
// Проверка
if ($sanitized !== $target || !filter_var($sanitized, FILTER_VALIDATE_INT)) {
// Если очищенное значение не совпадает с отправленным
// или если не прошло проверку FILTER_VALIDATE_INT (но её невозможно не пройти здесь, просто так добавил)
new Error(200, __FUNCTION__);
}
return (int) $sanitized;
} else {
new Error(200, __FUNCTION__);
}
return null;
}
}

View File

@@ -0,0 +1,52 @@
<?php
declare(strict_types=1);
namespace Mirzaev\Feip\Params;
use Mirzaev\Feip\Error;
/**
* Параметр фамилии
*
* @property string $second_name Фамилия
*
* @package Mirzaev\Feip\Params
* @author Арсен Мирзаев <red@hood.su>
*/
trait SecondName
{
/**
* Фамилия: параметр
*
* @var string
*/
protected string $second_name = '';
/**
* Фамилия: фильтр
*
* @param mixed $target Значение для фильтрации
*
* @return array|null
*/
public static function secondName($target): ?array
{
// Очистка
if ($sanitized = filter_var($target, FILTER_SANITIZE_STRING)) {
// Если очищение вернуло результат
// Проверка
if ($sanitized !== $target) {
// Если очищенное значение не совпадает с отправленным
new Error(200, __FUNCTION__);
}
return (array) $sanitized;
} else {
new Error(200, __FUNCTION__);
}
return null;
}
}

View File

@@ -0,0 +1,56 @@
<?php
declare(strict_types=1);
namespace Mirzaev\Feip\Params;
use Mirzaev\Feip\Error,
Mirzaev\Feip\Methods\MethodAbstract,
Mirzaev\Feip\Params\FirstName,
Mirzaev\Feip\Params\SecondName,
Mirzaev\Feip\Params\Age;
/**
* Параметр пользователей
*
* @property array $users Пользователи
*
* @package Mirzaev\Feip\Params
* @author Арсен Мирзаев <red@hood.su>
*/
trait Users
{
use FirstName, SecondName, Age;
/**
* Пользователи: параметр
*
* @var array
*/
protected array $users = [];
/**
* Before
*
* Вызывается перед обработкой
*
* @return void
*/
public function usersBefore(): void
{
$this->ignore[] = 'first_name';
$this->ignore[] = 'second_name';
$this->ignore[] = 'age';
}
/**
* After
*
* Вызывается после обработки
*
* @return void
*/
public function usersAfter(): void
{
}
}