Browse Source

fix item by page + status checkbox

feature/symfony6.1
Charly 2 years ago
parent
commit
250268e18e
4 changed files with 56 additions and 6421 deletions
  1. +47
    -36
      Controller/AbstractAdminController.php
  2. +8
    -8
      Resources/assets/app/adminlte/index/index.js
  3. +1
    -0
      Resources/views/adminlte/crud/field/toggle.html.twig
  4. +0
    -6377
      composer.lock

+ 47
- 36
Controller/AbstractAdminController.php View File

abstract public function getRepositoryQuery(): RepositoryQueryInterface; abstract public function getRepositoryQuery(): RepositoryQueryInterface;






public function configureResponseParameters(KeyValueStore $responseParameters): KeyValueStore public function configureResponseParameters(KeyValueStore $responseParameters): KeyValueStore
{ {
if ($responseParameters->get('global_actions')) { if ($responseParameters->get('global_actions')) {
if ($requestListMaxResults) { if ($requestListMaxResults) {
$this->getRequestStack()->getSession()->set($paramSessionListMaxResults, $requestListMaxResults); $this->getRequestStack()->getSession()->set($paramSessionListMaxResults, $requestListMaxResults);
} }
$maxResults = $this->getRequestStack()->getSession()->get($paramSessionListMaxResults) ? $this->get('session')->get(

$maxResults = $this->getRequestStack()->getSession()->get(
$paramSessionListMaxResults $paramSessionListMaxResults
) : 30;
) ? $this->requestStack->getSession()->get($paramSessionListMaxResults) : 30;
// $maxResults = $this->getRequestStack()->getSession()->get($paramSessionListMaxResults) ? $this->get(
// 'session'
// )->get(
// $paramSessionListMaxResults
// ) : 30;


$crud->setPaginatorPageSize($maxResults); $crud->setPaginatorPageSize($maxResults);
} }
$queryBuilder = $this->createSortQueryBuilder($context->getSearch(), $context->getEntity(), $fields, $filters); $queryBuilder = $this->createSortQueryBuilder($context->getSearch(), $context->getEntity(), $fields, $filters);
$paginator = $this->container->get(PaginatorFactory::class)->create($queryBuilder); $paginator = $this->container->get(PaginatorFactory::class)->create($queryBuilder);


$entities = $this->container->get(EntityFactory::class)->createCollection($context->getEntity(), $paginator->getResults());
$entities = $this->container->get(EntityFactory::class)->createCollection(
$context->getEntity(),
$paginator->getResults()
);
$this->container->get(EntityFactory::class)->processFieldsForAll($entities, $fields); $this->container->get(EntityFactory::class)->processFieldsForAll($entities, $fields);


$sortableForm = $this->createFormBuilder(array('entities', $paginator->getResults())) $sortableForm = $this->createFormBuilder(array('entities', $paginator->getResults()))
} }


public function duplicate( public function duplicate(
AdminContext $context,
EntityComponent $entityComponent,
TranslatorAdmin $translatorAdmin,
AdminContext $context,
EntityComponent $entityComponent,
TranslatorAdmin $translatorAdmin,
EntityManagerInterface $em EntityManagerInterface $em
)
{
) {
if (!$this->isGranted( if (!$this->isGranted(
Permission::EA_EXECUTE_ACTION, Permission::EA_EXECUTE_ACTION,
['action' => ActionDefinition::DUPLICATE, 'entity' => $context->getEntity()] ['action' => ActionDefinition::DUPLICATE, 'entity' => $context->getEntity()]
} }


public function createIndexRepositoryQuery( public function createIndexRepositoryQuery(
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
FilterCollection $filters FilterCollection $filters
): RepositoryQueryInterface
{
): RepositoryQueryInterface {
$repositoryQuery = $this->container->get(EntityRepository::class)->createRepositoryQuery( $repositoryQuery = $this->container->get(EntityRepository::class)->createRepositoryQuery(
$this->getRepositoryQuery(), $this->getRepositoryQuery(),
$searchDto, $searchDto,
$filterManager = $this->getFilterManager(); $filterManager = $this->getFilterManager();


$this->filtersForm->handleRequest($searchDto->getRequest()); $this->filtersForm->handleRequest($searchDto->getRequest());
$this->isRepositoryQueryFiltered = $filterManager->handleFiltersForm($repositoryQuery, $this->filtersForm, $fields, $entityDto);
$this->isRepositoryQueryFiltered = $filterManager->handleFiltersForm(
$repositoryQuery,
$this->filtersForm,
$fields,
$entityDto
);
return $repositoryQuery; return $repositoryQuery;
} }




public function createSortRepositoryQuery( public function createSortRepositoryQuery(
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
FilterCollection $filters FilterCollection $filters
): RepositoryQueryInterface
{
): RepositoryQueryInterface {
$repositoryQuery = $this->createIndexRepositoryQuery($searchDto, $entityDto, $fields, $filters); $repositoryQuery = $this->createIndexRepositoryQuery($searchDto, $entityDto, $fields, $filters);
if ($this->isInstanceOf(StatusInterface::class)) { if ($this->isInstanceOf(StatusInterface::class)) {
$repositoryQuery->filterIsOnline(); $repositoryQuery->filterIsOnline();
} }


public function createIndexQueryBuilder( public function createIndexQueryBuilder(
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
FilterCollection $filters FilterCollection $filters
): QueryBuilder
{
): QueryBuilder {
$repositoryQuery = $this->createIndexRepositoryQuery($searchDto, $entityDto, $fields, $filters); $repositoryQuery = $this->createIndexRepositoryQuery($searchDto, $entityDto, $fields, $filters);
return $repositoryQuery->getQueryBuilder(); return $repositoryQuery->getQueryBuilder();
} }


public function createSortQueryBuilder( public function createSortQueryBuilder(
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
FilterCollection $filters FilterCollection $filters
): QueryBuilder
{
): QueryBuilder {
$repositoryQuery = $this->createSortRepositoryQuery($searchDto, $entityDto, $fields, $filters); $repositoryQuery = $this->createSortRepositoryQuery($searchDto, $entityDto, $fields, $filters);
return $repositoryQuery->getQueryBuilder(); return $repositoryQuery->getQueryBuilder();
} }


public function edit(AdminContext $context) public function edit(AdminContext $context)
{ {
$response = parent::edit($context);;
$context->getRequest()->setMethod('PATCH');
$response = parent::edit($context);


// on vide le flash bag si édition en ajax (notification déjà affichée en Javascript) // on vide le flash bag si édition en ajax (notification déjà affichée en Javascript)
if ($context->getRequest()->isXmlHttpRequest()) { if ($context->getRequest()->isXmlHttpRequest()) {
$this->get('session')->getFlashBag()->clear();
$this->requestStack->getSession()->getFlashBag()->clear();
} }


return $response; return $response;
'label' => false, 'label' => false,
'html_attributes' => array( 'html_attributes' => array(
'data-toggle' => 'tooltip', 'data-toggle' => 'tooltip',
'title' =>$this->translatorAdmin->transAction('detail'),
'title' => $this->translatorAdmin->transAction('detail'),
), ),
] ]
); );
ActionDefinition::SAVE_AND_CONTINUE, ActionDefinition::SAVE_AND_CONTINUE,
[ [
'class' => 'btn btn-info float-right action-save-continue', 'class' => 'btn btn-info float-right action-save-continue',
'label' =>$this->translatorAdmin->transAction('save_and_continue'),
'label' => $this->translatorAdmin->transAction('save_and_continue'),
] ]
); );


return $event->getResponse(); return $event->getResponse();
} }


if (!$this->isGranted(Permission::EA_EXECUTE_ACTION, ['action' => Action::DELETE, 'entity' => $context->getEntity()])) {
if (!$this->isGranted(
Permission::EA_EXECUTE_ACTION,
['action' => Action::DELETE, 'entity' => $context->getEntity()]
)) {
throw new ForbiddenActionException($context); throw new ForbiddenActionException($context);
} }
if (!$context->getEntity()->isAccessible()) { if (!$context->getEntity()->isAccessible()) {

+ 8
- 8
Resources/assets/app/adminlte/index/index.js View File



$(document).ready(function() {
lcCrudIndexToggle() ;
lcCrudIndexBatchActions() ;
$(document).ready(function () {
lcCrudIndexToggle();
lcCrudIndexBatchActions();
lcCrudIndexInitFilter(); lcCrudIndexInitFilter();
}) ;
});


function lcCrudIndexToggle() { function lcCrudIndexToggle() {
const toggles = document.querySelectorAll('.custom-switch input[type="checkbox"]'); const toggles = document.querySelectorAll('.custom-switch input[type="checkbox"]');
const toggle = this; const toggle = this;
const newValue = this.checked; const newValue = this.checked;
const oldValue = !newValue; const oldValue = !newValue;
const toggleUrl = this.closest('.custom-switch').dataset.url + "&newValue=" + newValue.toString();
const csrfToken = this.closest('.custom-switch').querySelector('.token').value;
const toggleUrl = this.closest('.custom-switch').dataset.url + "&newValue=" + newValue.toString() + "&csrfToken=" + csrfToken;


let toggleRequest = $.ajax({type: "POST", url: toggleUrl, data: {}, dataType: 'json'}); let toggleRequest = $.ajax({type: "POST", url: toggleUrl, data: {}, dataType: 'json'});


SovNotification.add('success', 'La propriété a bien été mise à jour.'); SovNotification.add('success', 'La propriété a bien été mise à jour.');
}); });


toggleRequest.fail(function () {
toggleRequest.fail(function (response) {
console.log(response);
toggle.checked = oldValue; toggle.checked = oldValue;
toggle.disabled = true; toggle.disabled = true;
toggle.closest('.checkbox-switch').classList.add('disabled'); toggle.closest('.checkbox-switch').classList.add('disabled');

+ 1
- 0
Resources/views/adminlte/crud/field/toggle.html.twig View File

<input type="checkbox" class="custom-control-input" id="{{ id_toggle }}" {{ field.value ? 'checked' }}> <input type="checkbox" class="custom-control-input" id="{{ id_toggle }}" {{ field.value ? 'checked' }}>
<label class="custom-control-label" for="{{ id_toggle }}" > <label class="custom-control-label" for="{{ id_toggle }}" >
</label> </label>
<input class="token" type="hidden" name="token" value="{{ csrf_token('ea-toggle') }}">
</div> </div>
{% endblock toggle %} {% endblock toggle %}

+ 0
- 6377
composer.lock
File diff suppressed because it is too large
View File


Loading…
Cancel
Save