Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 1029 relation filter #1047

Merged
merged 10 commits into from
Aug 30, 2023
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
1 change: 1 addition & 0 deletions assets/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ require('./js/task.js')
require('./js/connector.js')
require('./js/smtp.js')
// require('./js/filter.js')
require('./js/rule_relation_filter.js')


// start the Stimulus application
Expand Down
59 changes: 29 additions & 30 deletions assets/js/regle.js
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,7 @@ $(function () {
$.each(nameF.source, function (fieldid, fieldname) {
$('#' + nameF.target + ' .ui-droppable').append('<li value="' + fieldid + '" class="ch">' + fieldid + " (" + fieldname + ")" + '</li>')
// filter
addFilter(fieldid, path_info_field);
//addFilter(fieldid, path_info_field);
});

// formula
Expand Down Expand Up @@ -1460,7 +1460,7 @@ function prepareDrag() {
var formule_in = $( this ).parent().find( ".formule" );
$( formule_in ).css('opacity','1'); */

addFilter(dragId, path_info_field);
//addFilter(dragId, path_info_field);

$('li', "#fields_duplicate_target").each(function () {
if ($(this).attr('data-active') == 'false') {
Expand Down Expand Up @@ -1706,6 +1706,7 @@ function addFilter(field, path) {
// ajoute un champ uniquement s'il n'existe pas
if (existeFilter(field) == 0) {
if (field != 'my_value') {
console.log('field', field, 'path', path);
$('#fieldsfilter').append('<li id="filter_' + field + '" class="mt-2 d-flex justify-content-evenly align-items-baseline"><span class="name me-2 mt-2">' + field + '</span> <a class="fancybox me-2" data-fancybox-type="iframe" href="' + path + '/source/' + field + '/"> <i class="fas fa-question-circle"></i></a> <select class="filter mt-2 me-2 form-select">' + filter_liste + '</select><input type="text" value="" class="form-control filter-input my-3" /> </li>');
}
}
Expand Down Expand Up @@ -1737,37 +1738,35 @@ function removeFilter(field) {
// ---- FILTRES -------------------------------------------------------------------------

// ---- PARAMS ET VALIDATION ------------------------------------------------------------

// Récupère la liste des filtres
function recup_filter() {
filter = [];
$('li', '#fieldsfilter').each(function () {

field_target = '';
$($(this)).find("span.name").each(function () {
field_target = $.trim($(this).text());
});

field_filter = '';
$($(this)).find("select.filter").each(function () {
field_filter = $.trim($(this).val());
});
let filter = [];
$('#fieldsfilter li').each(function () {
let field_target = $.trim($(this).find(".name").text());

let field_filter = '';
let selectElement = $(this).find("input[name*='anotherFieldInput']");
if (selectElement.length > 0) {
field_filter = $.trim(selectElement.val());
}

let field_value = '';
let inputElement = $(this).find("input[name*='textareaFieldInput']");
if (inputElement.length > 0) {
field_value = $.trim(inputElement.val());
}

if (field_target || field_filter || field_value) {
filter.push({
target: field_target,
filter: field_filter,
value: field_value,
});
}
});
return filter;
}

field_value = '';
$($(this)).find("input").each(function () {
field_value = $.trim($(this).val());
});
if (field_filter != '') {
filter.push({
target: field_target,
filter: field_filter,
value: field_value
});
}
});

return filter;
}

// Récupère tous les champs
function recup_champs() {
Expand Down
59 changes: 59 additions & 0 deletions assets/js/rule_relation_filter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
document.addEventListener('DOMContentLoaded', (event) => {
$(function() {
// Listen to input events on form fields
$('#relation_filter_field, #relation_filter_another_field').on('change', checkInputs);
$('#relation_filter_textarea_field').on('input', checkInputs);

function checkInputs() {
var fieldInput = $('#relation_filter_field').val();
var anotherFieldInput = $('#relation_filter_another_field').val();
var textareaFieldInput = $('#relation_filter_textarea_field').val();

if (fieldInput && anotherFieldInput && textareaFieldInput) {
$('#addFilterStep3').prop('disabled', false);
} else {
$('#addFilterStep3').prop('disabled', true);
}
}

$('#addFilterStep3').on('click', function() {

var fieldInput =$('#relation_filter_field option:selected').text();
var textareaFieldInput = $('#relation_filter_textarea_field').val();

// Get the value of the selected option in relation_filter_another_field
var anotherFieldInputVal = $('#relation_filter_another_field').val();
var anotherFieldInputText = $('#relation_filter_another_field option:selected').text();

// Create new list item
let newItem = $(`
<li class="mt-2 d-flex justify-content-evenly align-items-baseline">
<span class="name me-2 mt-2">${fieldInput}</span>
<a class="fancybox me-2" data-fancybox-type="iframe" href="/index.php/rule/info/source/">
<svg class="svg-inline--fa fa-question-circle fa-w-16" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="question-circle" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg="">
<path fill="currentColor" d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"></path>
</svg>
</a>
<input type="text" name="fieldsfilter[]['anotherFieldInput']" value="${anotherFieldInputVal}" class="form-control filter-input my-3">
<input type="text" name="fieldsfilter[]['textareaFieldInput']" value="${textareaFieldInput}" class="form-control filter-input my-3">
<button class="btn btn-danger remove-button"> <i class="fa fa-times " aria-hidden="true"></i></button>
</li>
`);
$('#fieldsfilter').append(newItem);

// Clear form fields
$('#relation_filter_field').val('');
$('#relation_filter_another_field').val('');
$('#relation_filter_textarea_field').val('');

$('#addFilterStep3').prop('disabled', true);
});

});
// Add click event to the remove button
$(document).on('click', '.remove-button', function() {
$(this).closest('li').remove();
});


});
92 changes: 78 additions & 14 deletions src/Controller/DefaultController.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Form\Type\RelationFilterType;

/**
* @Route("/rule")
Expand Down Expand Up @@ -1910,8 +1911,37 @@ public function ruleStepThree(Request $request)
}
}

// get the array of array $ruleFieldsSource and for each value, get the label only and add it to the array $listOfSourceFieldsLabels
$listOfSourceFieldsLabels = [
'Source Fields' => [],
'Target Fields' => [],
'Relation Fields' => [],
];
foreach ($ruleFieldsSource as $key => $value) {
$listOfSourceFieldsLabels['Source Fields'][$key] = $value['label'];
}

// get the array of array $ruleFieldsTarget and for each value, get the label only and add it to the array $listOfSourceFieldsLabels
foreach ($ruleFieldsTarget as $key => $value) {
$listOfSourceFieldsLabels['Target Fields'][$key] = $value['label'];
}

foreach ($lst_relation_source_alpha as $key => $value) {
$listOfSourceFieldsLabels['Relation Fields'][$key] = $value['label'];
}


$form_all_related_fields = $this->createForm(RelationFilterType::class, null, [
'field_choices' => $listOfSourceFieldsLabels,
'another_field_choices' => $lst_filter
]);

$filters = $this->entityManager->getRepository(RuleFilter::class)
->findBy(['rule' => $ruleKey]);

// rev 1.07 --------------------------
$result = [
'filters' => $filters,
'source' => $source['table'],
'cible' => $cible['table'],
'rule_params' => $rule_params,
Expand All @@ -1921,6 +1951,7 @@ public function ruleStepThree(Request $request)
'lst_category' => $lstCategory,
'lst_functions' => $lstFunctions,
'lst_filter' => $lst_filter,
'form_all_related_fields' => $form_all_related_fields->createView(),
'lst_errorMissing' => $lst_errorMissing,
'lst_errorEmpty' => $lst_errorEmpty,
'params' => $this->sessionService->getParamRule($ruleKey),
Expand Down Expand Up @@ -1951,8 +1982,9 @@ public function ruleStepThree(Request $request)
$this->logger->error($e->getMessage().' ('.$e->getFile().' line '.$e->getLine());
$this->sessionService->setCreateRuleError($ruleKey, $this->translator->trans('error.rule.mapping').' : '.$e->getMessage().' ('.$e->getFile().' line '.$e->getLine().')');

return $this->redirect($this->generateUrl('regle_stepone_animation'));
exit;
// return $this->redirect($this->generateUrl('regle_stepone_animation'));
// exit;
dd($e->getMessage().' ('.$e->getFile().' line '.$e->getLine());
}
}

Expand Down Expand Up @@ -2335,22 +2367,54 @@ public function ruleValidation(Request $request): JsonResponse
}
}

// $form = $this->createForm(RelationFilterType::class);
// $form->handleRequest($request);
//------------------------------- RuleFilter ------------------------

if (!empty($request->request->get('filter'))) {
foreach ($request->request->get('filter') as $filter) {
$oneRuleFilter = new RuleFilter();
$oneRuleFilter->setTarget($filter['target']);
$oneRuleFilter->setRule($oneRule);
$oneRuleFilter->setType($filter['filter']);
$oneRuleFilter->setValue($filter['value']);
$this->entityManager->persist($oneRuleFilter);
$this->entityManager->flush();
}
}
// $form->handleRequest($request);
//------------------------------- RuleFilter ------------------------
$filters = $request->request->get('filter');

if (!empty($filters)) {
foreach ($filters as $filterData) {
// $filterData est un tableau contenant les valeurs des champs pour chaque élément de liste <li>

// Accès aux valeurs des champs individuels
$fieldInput = $filterData['target'];
$anotherFieldInput = $filterData['filter'];
$textareaFieldInput = $filterData['value'];


// Maintenant, vous pouvez utiliser ces valeurs comme vous le souhaitez, par exemple, pour créer un objet RuleFilter
$oneRuleFilter = new RuleFilter();
$oneRuleFilter->setTarget($fieldInput);
$oneRuleFilter->setRule($oneRule);

$oneRuleFilter->setType($anotherFieldInput);
$oneRuleFilter->setValue($textareaFieldInput);

// Enregistrez votre objet RuleFilter dans la base de données
$this->entityManager->persist($oneRuleFilter);
}

$this->entityManager->flush();
}
// $this->getDoctrine()->getManager()->flush();
// }
// if (!empty($request->request->get('filter'))) {
// foreach ($request->request->get('filter') as $filter) {
// $oneRuleFilter = new RuleFilter();
// $oneRuleFilter->setTarget($filter['target']);
// $oneRuleFilter->setRule($oneRule);
// $oneRuleFilter->setType($filter['filter']);
// $oneRuleFilter->setValue($filter['value']);
// $this->entityManager->persist($oneRuleFilter);
// $this->entityManager->flush();
// }
// }

// --------------------------------------------------------------------------------------------------
// Order all rules
error_log(print_r($request->request->all(), true));
$this->jobManager->orderRules();

// --------------------------------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion src/Controller/FluxController.php
Original file line number Diff line number Diff line change
Expand Up @@ -1000,7 +1000,7 @@ public function fluxMassRunAction()
exit;
}

/* ******************************************************
/* *******************************************************
* METHODES PRATIQUES
****************************************************** */

Expand Down
54 changes: 54 additions & 0 deletions src/Form/Type/RelationFilterType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php
namespace App\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextType;

class RelationFilterType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('field', ChoiceType::class, [
'label' => 'Field',
'attr' => [
'placeholder' => 'Field',
'id' => 'field_filter_rule',
],
'empty_data' => null,
'choices' => $options['field_choices'],
'placeholder' => '- Choose a field -',
'required' => false
])
->add('another_field', ChoiceType::class, [
'label' => 'Another Field',
'attr' => [
'placeholder' => 'Another Field',
'id' => 'another_field_filter_rule',
],
'empty_data' => null,
'choices' => $options['another_field_choices'],
'placeholder' => '- Choose another field -',
'required' => false
])
->add('textarea_field', TextType::class, [
'label' => 'Your Text',
'attr' => [
'placeholder' => 'Enter some text here...',
'id' => 'textarea_field_filter_rule',
],
'required' => false
]);
}

public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'field_choices' => [],
'another_field_choices' => [],
]);
}
}
29 changes: 29 additions & 0 deletions templates/Rule/create/onglets/filter.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,35 @@
</div>
<div class="clr"></div>
<ul id="fieldsfilter">
{# form widget that uses form_all_related_fields #}
<div class="row">
<div class="col">
{{ form_row(form_all_related_fields.field) }}
</div>
<div class="col">
{{ form_row(form_all_related_fields.another_field) }}
</div>
<div class="col">
{{ form_row(form_all_related_fields.textarea_field) }}
</div>
<div class="col mt-4">
<button id="addFilterStep3" type="button" class="btn btn-primary" disabled><i class="fa fa-plus" aria-hidden="true"></i></button>
</div>
</div>
{% for filter in filters %}
<li class="mt-2 d-flex justify-content-evenly align-items-baseline">
<span class="name me-2 mt-2">{{ filter.target }}</span>
<a class="fancybox me-2" data-fancybox-type="iframe" href="/index.php/rule/info/source/">
<svg class="svg-inline--fa fa-question-circle fa-w-16" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="question-circle" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg="">
<path fill="currentColor" d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"></path>
</svg>
</a>
<input type="text" name="fieldsfilter[]['anotherFieldInput']" value="{{ filter.type }}" class="form-control filter-input my-3">
<input type="text" name="fieldsfilter[]['textareaFieldInput']" value="{{ filter.value }}" class="form-control filter-input my-3">
<button class="btn btn-danger remove-button"> <i class="fa fa-times " aria-hidden="true"></i></button>
</li>
{% endfor %}

</ul>
<div id="help-content-filters" class="help-content">
<h2>
Expand Down