mirror of
https://github.com/YGGverse/YGGtracker.git
synced 2025-01-28 23:54:19 +00:00
update form validation
This commit is contained in:
parent
d8f6b6d27e
commit
f3b32a713f
@ -97,14 +97,12 @@ class AppControllerSubmit
|
||||
[
|
||||
'value' => null,
|
||||
'required' => $this->_validator->getPageKeywordsRequired(),
|
||||
'minlength' => $this->_validator->getPageKeywordsLengthMin(),
|
||||
'maxlength' => $this->_validator->getPageKeywordsLengthMax(),
|
||||
'placeholder' => sprintf(
|
||||
_('Page keywords (%s-%s total / %s-%s chars per item)'),
|
||||
number_format($this->_validator->getPageKeywordsQuantityMin()),
|
||||
number_format($this->_validator->getPageKeywordsQuantityMax()),
|
||||
number_format($this->_validator->getPageKeywordsLengthMin()),
|
||||
number_format($this->_validator->getPageKeywordsLengthMax())
|
||||
number_format($this->_validator->getPageKeywordLengthMin()),
|
||||
number_format($this->_validator->getPageKeywordLengthMax())
|
||||
),
|
||||
]
|
||||
],
|
||||
@ -115,6 +113,7 @@ class AppControllerSubmit
|
||||
[
|
||||
'value' => null,
|
||||
'required' => $this->_validator->getPageTorrentRequired(),
|
||||
'accept' => implode(',', $this->_validator->getPageTorrentMimeTypes()),
|
||||
'placeholder' => sprintf(
|
||||
_('Torrent file (use Ctrl to select multiple files)')
|
||||
),
|
||||
@ -134,9 +133,9 @@ class AppControllerSubmit
|
||||
{
|
||||
$error = [];
|
||||
|
||||
if ($this->_validator->pageTitle($_POST['title'], $error))
|
||||
if (!$this->_validator->pageTitle($_POST['title'], $error))
|
||||
{
|
||||
$form->title->error = $error;
|
||||
$form->title->error[] = $error;
|
||||
}
|
||||
|
||||
// @TODO check for page duplicates
|
||||
@ -148,9 +147,9 @@ class AppControllerSubmit
|
||||
{
|
||||
$error = [];
|
||||
|
||||
if ($this->_validator->pageDescription($_POST['description'], $error))
|
||||
if (!$this->_validator->pageDescription($_POST['description'], $error))
|
||||
{
|
||||
$form->description->error = $error;
|
||||
$form->description->error[] = $error;
|
||||
}
|
||||
|
||||
$form->description->attribute->value = htmlentities($_POST['description']);
|
||||
@ -160,14 +159,21 @@ class AppControllerSubmit
|
||||
{
|
||||
$error = [];
|
||||
|
||||
if ($this->_validator->pageKeywords($_POST['keywords'], $error))
|
||||
if (!$this->_validator->pageKeywords($_POST['keywords'], $error))
|
||||
{
|
||||
$form->keywords->error = $error;
|
||||
$form->keywords->error[] = $error;
|
||||
}
|
||||
|
||||
$form->keywords->attribute->value = htmlentities($_POST['keywords']);
|
||||
}
|
||||
|
||||
if (isset($_FILES['torrent']))
|
||||
{
|
||||
$error = [];
|
||||
|
||||
// @TODO
|
||||
}
|
||||
|
||||
// Request valid
|
||||
if (empty($error))
|
||||
{
|
||||
|
@ -167,16 +167,6 @@ class AppModelValidator
|
||||
return $this->_config->page->keywords->required;
|
||||
}
|
||||
|
||||
public function getPageKeywordsLengthMin() : int
|
||||
{
|
||||
return $this->_config->page->keywords->length->min;
|
||||
}
|
||||
|
||||
public function getPageKeywordsLengthMax() : int
|
||||
{
|
||||
return $this->_config->page->keywords->length->max;
|
||||
}
|
||||
|
||||
public function getPageKeywordsQuantityMin() : int
|
||||
{
|
||||
return $this->_config->page->keywords->quantity->min;
|
||||
@ -187,14 +177,9 @@ class AppModelValidator
|
||||
return $this->_config->page->keywords->quantity->max;
|
||||
}
|
||||
|
||||
public function getPageKeywordsRegex() : string
|
||||
{
|
||||
return $this->_config->page->keywords->regex;
|
||||
}
|
||||
|
||||
public function pageKeywords(mixed $value, array &$error = []) : bool
|
||||
{
|
||||
if (!is_array($value))
|
||||
if (!is_string($value))
|
||||
{
|
||||
array_push(
|
||||
$error,
|
||||
@ -214,69 +199,62 @@ class AppModelValidator
|
||||
return false;
|
||||
}
|
||||
|
||||
$total = 0;
|
||||
|
||||
foreach ($value as $keywords)
|
||||
if ($this->getPageKeywordsRequired())
|
||||
{
|
||||
if (!is_string($kt))
|
||||
{
|
||||
array_push(
|
||||
$error,
|
||||
_('Invalid magnet keyword value data type')
|
||||
);
|
||||
$total = 0;
|
||||
|
||||
return false;
|
||||
foreach (explode(PHP_EOL, str_replace(['#', ',', ' '], PHP_EOL, $value)) as $keyword)
|
||||
{
|
||||
$error = [];
|
||||
|
||||
if (!$this->pageKeyword($keyword, $error))
|
||||
{
|
||||
array_push(
|
||||
$error,
|
||||
_('Invalid page keyword'),
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$total++;
|
||||
}
|
||||
|
||||
if (!preg_match(MAGNET_KT_REGEX, $kt))
|
||||
if ($total < $this->getPageKeywordsQuantityMin() ||
|
||||
$total > $this->getPageKeywordsQuantityMax())
|
||||
{
|
||||
array_push(
|
||||
$error,
|
||||
sprintf(
|
||||
_('Magnet keyword format does not match condition "%s"'),
|
||||
MAGNET_KT_REGEX
|
||||
_('Page keywords quantity out of %s-%s range'),
|
||||
$this->getPageKeywordsQuantityMin(),
|
||||
$this->getPageKeywordsQuantityMax()
|
||||
)
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mb_strlen($kt) < MAGNET_KT_MIN_LENGTH ||
|
||||
mb_strlen($kt) > MAGNET_KT_MAX_LENGTH)
|
||||
{
|
||||
array_push(
|
||||
$error,
|
||||
sprintf(
|
||||
_('Magnet keyword out of %s-%s chars range'),
|
||||
MAGNET_KT_MIN_LENGTH,
|
||||
MAGNET_KT_MAX_LENGTH
|
||||
)
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$total++;
|
||||
}
|
||||
|
||||
if ($total < MAGNET_KT_MIN_QUANTITY ||
|
||||
$total > MAGNET_KT_MAX_QUANTITY)
|
||||
{
|
||||
array_push(
|
||||
$error,
|
||||
sprintf(
|
||||
_('Magnet keywords quantity out of %s-%s range'),
|
||||
MAGNET_KT_MIN_QUANTITY,
|
||||
MAGNET_KT_MAX_QUANTITY
|
||||
)
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// Page keyword
|
||||
public function getPageKeywordLengthMin() : int
|
||||
{
|
||||
return $this->_config->page->keyword->length->min;
|
||||
}
|
||||
|
||||
public function getPageKeywordLengthMax() : int
|
||||
{
|
||||
return $this->_config->page->keyword->length->max;
|
||||
}
|
||||
|
||||
public function getPageKeywordRegex() : string
|
||||
{
|
||||
return $this->_config->page->keyword->regex;
|
||||
}
|
||||
|
||||
public function pageKeyword(mixed $value, array &$error = []) : bool
|
||||
{
|
||||
if (!is_string($value))
|
||||
@ -289,29 +267,28 @@ class AppModelValidator
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!preg_match($this->getPageKeywordsRegex(), $value))
|
||||
if (!preg_match($this->getPageKeywordRegex(), $value))
|
||||
{
|
||||
array_push(
|
||||
$error,
|
||||
sprintf(
|
||||
_('Page keyword "%s" format does not match condition "%s"'),
|
||||
$value,
|
||||
$this->getPageKeywordsRegex()
|
||||
_('Page keyword format does not match condition "%s"'),
|
||||
$this->getPageKeywordRegex()
|
||||
)
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mb_strlen($value) < $this->getPageDescriptionLengthMin() ||
|
||||
mb_strlen($value) > $this->getPageDescriptionLengthMax())
|
||||
if (mb_strlen($value) < $this->getPageKeywordLengthMin() ||
|
||||
mb_strlen($value) > $this->getPageKeywordLengthMax())
|
||||
{
|
||||
array_push(
|
||||
$error,
|
||||
sprintf(
|
||||
_('Page description out of %s-%s chars range'),
|
||||
$this->getPageDescriptionLengthMin(),
|
||||
$this->getPageDescriptionLengthMax()
|
||||
_('Page keyword out of %s-%s chars range'),
|
||||
$this->getPageKeywordLengthMin(),
|
||||
$this->getPageKeywordLengthMax()
|
||||
)
|
||||
);
|
||||
|
||||
@ -327,6 +304,11 @@ class AppModelValidator
|
||||
return $this->_config->page->torrent->required;
|
||||
}
|
||||
|
||||
public function getPageTorrentMimeTypes() : array
|
||||
{
|
||||
return $this->_config->page->torrent->mime;
|
||||
}
|
||||
|
||||
// Common
|
||||
public function host(mixed $value, array &$error = []) : bool
|
||||
{
|
||||
|
@ -12,7 +12,7 @@
|
||||
<div class="margin-b-24 padding-b-16 border-bottom-default">
|
||||
<h2><?php echo _('Submit') ?></h2>
|
||||
</div>
|
||||
<form class="margin-t-8" name="submit" method="post" action="submit">
|
||||
<form class="margin-t-8" name="submit" method="post" enctype="multipart/form-data" action="submit">
|
||||
<div class="margin-b-16">
|
||||
<label for="title">
|
||||
<?php echo _('Title') ?>
|
||||
@ -23,12 +23,14 @@
|
||||
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
|
||||
</svg>
|
||||
</sub>
|
||||
<?php foreach ($form->title->error as $error) { ?>
|
||||
<div class="text-color-red margin-b-8">
|
||||
<?php echo $error ?>
|
||||
</div>
|
||||
<?php foreach ($form->title->error as $errors) { ?>
|
||||
<?php foreach ($errors as $error) { ?>
|
||||
<div class="text-color-red margin-y-8">
|
||||
<?php echo $error ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<input class="width-100 margin-t-8 <?php echo ($form->title->error ? 'background-color-red' : false) ?>"
|
||||
<input class="width-100 margin-t-8"
|
||||
type="text"
|
||||
name="title"
|
||||
id="title"
|
||||
@ -48,12 +50,14 @@
|
||||
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
|
||||
</svg>
|
||||
</sub>
|
||||
<?php foreach ($form->description->error as $error) { ?>
|
||||
<div class="text-color-red margin-b-8">
|
||||
<?php echo $error ?>
|
||||
</div>
|
||||
<?php foreach ($form->description->error as $errors) { ?>
|
||||
<?php foreach ($errors as $error) { ?>
|
||||
<div class="text-color-red margin-y-8">
|
||||
<?php echo $error ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<textarea class="width-100 margin-t-8 <?php echo ($form->description->error ? 'background-color-red' : false) ?>"
|
||||
<textarea class="width-100 margin-t-8"
|
||||
name="description"
|
||||
id="description"
|
||||
<?php echo $form->description->attribute->required ? 'required="required"' : false ?>
|
||||
@ -71,12 +75,14 @@
|
||||
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
|
||||
</svg>
|
||||
</sub>
|
||||
<?php foreach ($form->keywords->error as $error) { ?>
|
||||
<div class="text-color-red margin-b-8">
|
||||
<?php echo $error ?>
|
||||
</div>
|
||||
<?php foreach ($form->keywords->error as $errors) { ?>
|
||||
<?php foreach ($errors as $error) { ?>
|
||||
<div class="text-color-red margin-y-8">
|
||||
<?php echo $error ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<textarea class="width-100 margin-t-8 <?php echo ($form->keywords->error ? 'background-color-red' : false) ?>"
|
||||
<textarea class="width-100 margin-t-8"
|
||||
name="keywords"
|
||||
<?php echo $form->keywords->attribute->required ? 'required="required"' : false ?>
|
||||
placeholder="<?php echo $form->keywords->attribute->placeholder ?>"
|
||||
@ -93,18 +99,20 @@
|
||||
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
|
||||
</svg>
|
||||
</sub>
|
||||
<?php foreach ($form->torrent->error as $error) { ?>
|
||||
<div class="text-color-red margin-b-8">
|
||||
<?php echo $error ?>
|
||||
</div>
|
||||
<?php foreach ($form->torrent->error as $errors) { ?>
|
||||
<?php foreach ($errors as $error) { ?>
|
||||
<div class="text-color-red margin-y-8">
|
||||
<?php echo $error ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<input class="width-100 margin-t-8 <?php echo ($form->torrent->error ? 'background-color-red' : false) ?>"
|
||||
<input class="width-100 margin-t-8"
|
||||
type="file"
|
||||
multiple="multiple"
|
||||
name="torrent"
|
||||
id="torrent"
|
||||
<?php echo $form->torrent->attribute->required ? 'required="required"' : false ?>
|
||||
value="<?php echo $form->torrent->attribute->value ?>" />
|
||||
accept="<?php echo $form->torrent->attribute->accept ?>"
|
||||
<?php echo $form->torrent->attribute->required ? 'required="required"' : false ?> />
|
||||
</div>
|
||||
<!--
|
||||
<div class="margin-y-8 padding-t-4">
|
||||
|
@ -21,14 +21,8 @@
|
||||
},
|
||||
"regex": "/.*/ui"
|
||||
},
|
||||
"keywords":
|
||||
"keyword":
|
||||
{
|
||||
"required": false,
|
||||
"quantity":
|
||||
{
|
||||
"min": 0,
|
||||
"max": 20
|
||||
},
|
||||
"length":
|
||||
{
|
||||
"min": 0,
|
||||
@ -36,9 +30,21 @@
|
||||
},
|
||||
"regex": "/[\\w]+/ui"
|
||||
},
|
||||
"keywords":
|
||||
{
|
||||
"required": false,
|
||||
"quantity":
|
||||
{
|
||||
"min": 0,
|
||||
"max": 20
|
||||
}
|
||||
},
|
||||
"torrent":
|
||||
{
|
||||
"required": true,
|
||||
"mime": [
|
||||
"application/x-bittorrent"
|
||||
],
|
||||
"quantity":
|
||||
{
|
||||
"min": 0,
|
||||
|
Loading…
x
Reference in New Issue
Block a user