Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion app/Http/Requests/DomainUpdateRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,20 @@ public function authorize(): bool
public function rules(): array
{
return [
'description' => 'required|string',
'id_project' => 'required|exists:projects,id',
'description' => [
'required',
'string',
'regex:/^[\pL\s]+$/u',
'max:255',
],
];
}

public function messages(): array
{
return [
'description.regex' => 'A descrição deve conter apenas palavras.',
];
}
}
7 changes: 6 additions & 1 deletion app/Http/Requests/KeywordUpdateRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,12 @@ public function authorize()
public function rules()
{
return [
'description' => 'required|string',
'description' => [
'required',
'string',
'regex:/^[\pL\s]+$/u',
'max:255',
],
];
}
}
5 changes: 3 additions & 2 deletions app/Livewire/Planning/Criteria/Criteria.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,9 @@ protected function rules()
return [
'currentProject' => 'required',
'criteriaId' => 'required|string|max:20|regex:/^[a-zA-Z0-9]+$/',
'description' => 'required|string|max:255',
'type.value' => 'required|in:Inclusion,Exclusion'
'description' => 'required|string|regex:/^[\pL\s]+$/u|max:255',
'type' => 'required|array',
'type.*.value' => 'string'
];
}

Expand Down
6 changes: 5 additions & 1 deletion app/Livewire/Planning/DataExtraction/Option.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,11 @@ class Option extends Component
* Validation rules.
*/
protected $rules = [
'description' => 'required|string',
'description' => [
'required',
'string',
'regex:/^[a-zA-ZÀ-ÿ0-9\s]+$/u',
],
'questionId' => 'required|array',
'questionId.*.value' => 'exists:question_extraction,id',
];
Expand Down
26 changes: 22 additions & 4 deletions app/Livewire/Planning/DataExtraction/Question.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,30 @@ class Question extends Component
/**
* Validation rules.
*/
public function rules()
protected $rules = [
'description' => [
'required',
'string',
'regex:/^[a-zA-ZÀ-ÿ0-9\s]+$/u',
],
'questionId' => [
'required',
'numeric',
],
'type' => 'required|array',
];

/**
* Custom error messages for the validation rules.
*/
protected function messages()
{
return [
'questionId' => ['required', 'regex:/^[a-zA-Z0-9]+$/'],
'description' => 'required',
'type' => 'required'
'questionId.required' => 'O campo ID é obrigatório.',
'questionId.numeric' => 'O ID deve conter apenas números.',
'description.required' => 'Este campo é obrigatório',
'description.regex' => 'A descrição só pode conter letras, números e espaços.',
'type.required' => 'Este campo é obrigatório',
];
}

Expand Down
4 changes: 2 additions & 2 deletions app/Livewire/Planning/QualityAssessment/QuestionQuality.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ class QuestionQuality extends Component
protected $rules = [
'currentProject' => 'required',
'questionId' => 'required|string|max:10|regex:/^[a-zA-Z0-9]+$/',
'description' => 'required|string|max:255',
'weight' => 'required|numeric',
'description' => 'required|string|max:255|regex:/^[a-zA-Z0-9]+$/',
'weight' => 'required|regex:/^\d+(\.\d{1,2})?$/',
];

/**
Expand Down
21 changes: 21 additions & 0 deletions app/Livewire/Planning/QualityAssessment/QuestionRanges.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,23 @@ class QuestionRanges extends Component
public $intervals = 5;
private $toastMessages = 'project/planning.quality-assessment.general-score.livewire.toasts';

protected $rules = [
'items.*.description' => 'required|string|regex:/^[a-zA-ZÀ-ÿ0-9\s]+$/u',
'intervals' => 'required|integer|min:2|max:10',
];

protected function messages()
{
return [
'items.*.description.required' => 'O campo descrição é obrigatório.',
'items.*.description.regex' => 'A descrição só pode conter letras, números e espaços.',
'intervals.required' => 'O número de intervalos é obrigatório.',
'intervals.integer' => 'O número de intervalos deve ser um número inteiro.',
'intervals.min' => 'O número de intervalos deve ser no mínimo 2.',
'intervals.max' => 'O número de intervalos deve ser no máximo 10.',
];
}

public function populateItems()
{
$projectId = $this->currentProject->id_project;
Expand Down Expand Up @@ -162,6 +179,10 @@ public function updateLabel($index)
}

try {
$this->validate([
"items.$index.description" => 'required|string|regex:/^[a-zA-ZÀ-ÿ0-9\s]+$/u',
]);

$idGeneralScore = $this->items[$index]['id_general_score'];
$value = $this->items[$index]['description'];

Expand Down
8 changes: 5 additions & 3 deletions app/Livewire/Planning/QualityAssessment/QuestionScore.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ class QuestionScore extends Component
*/
protected $rules = [
'questionId' => 'array|required',
'scoreRule' => 'required|string|max:25',
'scoreRule' => 'required|string|max:25|regex:/^[a-zA-ZÀ-ÿ\s]+$/u',
'score' => 'required|numeric',
'description' => 'required|string|max:255',
'description' => 'required|string|max:255|regex:/^[a-zA-ZÀ-ÿ0-9\s]+$/u',
];

/**
Expand All @@ -58,9 +58,11 @@ protected function messages()
'questionId.required' => __('common.required'),
'questionId.array' => __('common.required'),
'scoreRule.required' => __('common.required'),
'scoreRule.regex' => 'A regra de pontuação só pode conter letras e espaços.',
'score.required' => __('common.required'),
'description.required' => __('common.required'),
];
'description.regex' => 'A descrição só pode conter letras, números e espaços.',
];
}

public function mount()
Expand Down
11 changes: 7 additions & 4 deletions app/Livewire/Planning/Questions/ResearchQuestions.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,19 @@ class ResearchQuestions extends Component
protected $rules = [
'currentProject' => 'required',
'questionId' => 'required|string|max:20|regex:/^[a-zA-Z0-9]+$/',
'description' => 'required|string|max:255',
'description' => 'required|string|regex:/^[\pL\s]+$/u|max:255',
];

/**
* Custom error messages for the validation rules.
*/
protected $messages = [
'description.required' => 'The description field is required.',
'questionId.required' => 'The ID field is required.',
'questionId.regex' => 'The ID field must contain only letters and numbers.',
'description.required' => 'O campo descrição é obrigatório.',
'description.regex' => 'A descrição deve conter apenas letras e espaços.',
'description.max' => 'A descrição não pode ter mais de 255 caracteres.',
'questionId.required' => 'O campo ID é obrigatório.',
'questionId.regex' => 'O campo ID deve conter apenas letras e números.',
'questionId.max' => 'O campo ID não pode ter mais de 20 caracteres.',
];

/**
Expand Down
35 changes: 31 additions & 4 deletions app/Livewire/Planning/SearchStrategy/Strategy.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,15 @@ class Strategy extends Component


protected $rules = [
'currentDescription' => 'required|string',
'currentDescription' => [
'required',
'string',
],
];

protected $messages = [
'currentDescription.required' => 'O campo descrição é obrigatório.',
'currentDescription.regex' => 'A descrição deve conter pelo menos uma letra e não pode conter apenas caracteres especiais ou números.',
];

public function mount()
Expand All @@ -44,13 +52,15 @@ public function toast(string $message, string $type)

public function submit()
{
$this->validate([
'currentDescription' => 'required|string',
]);

if (!$this->checkEditPermission($this->toastMessages . '.denied')) {
if (!$this->isValidDescription($this->currentDescription)) {
$this->addError('currentDescription', 'A descrição deve conter pelo menos uma letra e não pode conter apenas caracteres especiais ou números.');
return;
}

$this->validate();

try {
$project = ProjectModel::findOrFail($this->projectId);
$project->searchStrategy()
Expand All @@ -74,6 +84,23 @@ public function submit()
}
}

private function isValidDescription(string $description): bool
{
$trimmedDescription = trim($description);

// Verifica se contém pelo menos uma letra
if (!preg_match('/[a-zA-ZÀ-ÿ]/', $trimmedDescription)) {
return false;
}

// Verifica se é composta apenas por números e/ou caracteres especiais
if (preg_match('/^[\d\W]+$/', $trimmedDescription)) {
return false;
}

return true;
}

public function render()
{
return view('livewire.planning.search-strategy.strategy');
Expand Down
14 changes: 8 additions & 6 deletions app/Livewire/Planning/SearchString/SearchTerm.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ class SearchTerm extends Component
*/
protected $rules = [
'currentProject' => 'required',
'description' => 'required|string|max:255',
'description' => 'required|string|regex:/^[\pL\s]+$/u|max:255',
'synonym' => 'nullable|string|regex:/^[\pL\s]+$/u|max:255',
];

/**
Expand All @@ -60,7 +61,11 @@ class SearchTerm extends Component
protected function messages()
{
return [
'description.required' => __($this->translationPath . '.description.required'),
'description.required' => __('O campo descrição é obrigatório.'),
'description.regex' => __('A descrição deve conter apenas letras e espaços.'),
'description.max' => __('A descrição não pode ter mais de 255 caracteres.'),
'synonym.regex' => __('O sinônimo deve conter apenas letras e espaços.'),
'synonym.max' => __('O sinônimo não pode ter mais de 255 caracteres.'),
];
}

Expand Down Expand Up @@ -217,10 +222,7 @@ public function delete(string $termId)

public function addSynonyms()
{

if (!$this->checkEditPermission($this->toastMessages . '.denied')) {
return;
}
$this->validateOnly('synonym');

if (!$this->termId['value'] || !$this->synonym) {
$this->addError('termId', 'The term id is required');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
label="{{ __('project/planning.criteria.form.description') }}"
wire:model="description"
placeholder="{{ __('project/planning.criteria.form.enter_description') }}"
pattern="[A-Za-zÀ-ÿ\s]+"
required
/>
@error("description")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
wire:model="description"
placeholder=""
maxlength="255"
pattern="[a-zA-ZÀ-ÿ0-9\s]+"
required
/>
@error("description")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
id="questionId"
label="{{ __('project/planning.data-extraction.question-form.id') }}"
wire:model="questionId"
placeholder="Não utilize caracteres especiais"
placeholder="Digite o ID da questão"
maxlength="255"
pattern="[a-zA-Z0-9]+"
pattern="\d+"
required
/>
@error("questionId")
Expand All @@ -31,6 +31,7 @@
wire:model="description"
placeholder=""
maxlength="255"
pattern="[a-zA-ZÀ-ÿ0-9\s]+"
required
/>
@error("description")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
wire:model="description"
placeholder="{{ __('project/planning.overall.domain.list.headers.enter_description') }}"
maxlength="255"
pattern="[A-Za-zÀ-ÿ\s]+"
required
/>
@error("description")
Expand Down
2 changes: 2 additions & 0 deletions resources/views/livewire/planning/overall/keywords.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
label="{{ __('project/planning.overall.keyword.description') }}"
wire:model="description"
placeholder="{{ __('project/planning.overall.keyword.enter_description') }}"
maxlength="255"
pattern="[A-Za-zÀ-ÿ\s]+"
required
/>
@error("description")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
label="{{ __('project/planning.quality-assessment.question-quality.id') }}"
placeholder="QA01"
wire:model="questionId"
pattern="[a-zA-ZÀ-ÿ0-9\s]+"
required
/>
@error("questionId")
Expand All @@ -33,6 +34,7 @@
min="0"
placeholder="2"
wire:model="weight"
pattern="[0-9]+"
required
/>
@error("weight")
Expand All @@ -53,6 +55,7 @@ class="form-control"
rows="2"
placeholder="{{ __("project/planning.research-questions.form.enter_description") }}"
wire:model="description"
pattern="[a-zA-ZÀ-ÿ0-9\s]+"
required
></textarea>
@error("description")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
label="Label"
placeholder="Good"
class="max-input"
pattern="[a-zA-ZÀ-ÿ0-9\s]+"
style="
min-width: 75px;
border-radius: 10px 0 0 10px;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class="modal-sm"
min="0"
placeholder="Partial"
wire:model="scoreRule"
pattern="[a-zA-ZÀ-ÿ\s]+"
required
/>
@error("scoreRule")
Expand Down Expand Up @@ -102,6 +103,7 @@ class="form-control"
maxlength="255"
rows="2"
placeholder="{{ __("project/planning.research-questions.form.enter_description") }}"
pattern="[a-zA-ZÀ-ÿ0-9\s]+"
required
></textarea>
@error("description")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@ class="form-control"
maxlength="255"
rows="4"
id="description"
label="{{ __("project/planning.research-questions.form.description") }}"
wire:model="description"
placeholder="{{ __("project/planning.research-questions.form.enter_description") }}"
pattern="[A-Za-zÀ-ÿ\s]+"
title="A descrição deve conter apenas letras e espaços."
required
></textarea>
</div>
@error("description")
Expand Down
Loading
Loading