|
|
@@ -55,12 +55,13 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
protected $translatorAdmin; |
|
|
|
|
|
|
|
public function __construct( |
|
|
|
SessionInterface $session, |
|
|
|
RequestStack $request, |
|
|
|
EntityManager $em, |
|
|
|
Environment $twig, |
|
|
|
TranslatorAdmin $translatorAdmin |
|
|
|
) { |
|
|
|
SessionInterface $session, |
|
|
|
RequestStack $request, |
|
|
|
EntityManager $em, |
|
|
|
Environment $twig, |
|
|
|
TranslatorAdmin $translatorAdmin |
|
|
|
) |
|
|
|
{ |
|
|
|
$this->session = $session; |
|
|
|
$this->request = $request; |
|
|
|
$this->em = $em; |
|
|
@@ -73,78 +74,78 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
/* Translatable */ |
|
|
|
if ($this->isInstanceOf(TranslatableInterface::class)) { |
|
|
|
$actions->update( |
|
|
|
Crud::PAGE_INDEX, |
|
|
|
Action::EDIT, |
|
|
|
function (Action $action) { |
|
|
|
$action->setTemplatePath('@LcSov/adminlte/crud/action/translatable.html.twig'); |
|
|
|
Crud::PAGE_INDEX, |
|
|
|
Action::EDIT, |
|
|
|
function (Action $action) { |
|
|
|
$action->setTemplatePath('@LcSov/adminlte/crud/action/translatable.html.twig'); |
|
|
|
|
|
|
|
return $action; |
|
|
|
} |
|
|
|
return $action; |
|
|
|
} |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
/* Boutons des actions dans les listes */ |
|
|
|
$actionsArray[Crud::PAGE_INDEX] = [ |
|
|
|
Action::NEW => [ |
|
|
|
'icon' => 'plus', |
|
|
|
'label' => $this->translatorAdmin->transAction('create'), |
|
|
|
'add_class' => 'btn-sm' |
|
|
|
], |
|
|
|
Action::EDIT => [ |
|
|
|
'class' => 'btn btn-sm btn-primary', |
|
|
|
'icon' => 'edit', |
|
|
|
'label' => false, |
|
|
|
'html_attributes' => array( |
|
|
|
'data-toggle' => 'tooltip', |
|
|
|
'title' => $this->translatorAdmin->transAction('edit') |
|
|
|
) |
|
|
|
], |
|
|
|
Action::DELETE => [ |
|
|
|
'icon' => 'trash', |
|
|
|
'dropdown' => true, |
|
|
|
'label' => $this->translatorAdmin->transAction('delete') |
|
|
|
], |
|
|
|
Action::BATCH_DELETE => [ |
|
|
|
'class' => 'btn btn-sm btn-danger', |
|
|
|
'icon' => 'trash', |
|
|
|
'label' => $this->translatorAdmin->transAction('delete') |
|
|
|
], |
|
|
|
Action::NEW => [ |
|
|
|
'icon' => 'plus', |
|
|
|
'label' => $this->translatorAdmin->transAction('create'), |
|
|
|
'add_class' => 'btn-sm' |
|
|
|
], |
|
|
|
Action::EDIT => [ |
|
|
|
'class' => 'btn btn-sm btn-primary', |
|
|
|
'icon' => 'edit', |
|
|
|
'label' => false, |
|
|
|
'html_attributes' => array( |
|
|
|
'data-toggle' => 'tooltip', |
|
|
|
'title' => $this->translatorAdmin->transAction('edit') |
|
|
|
) |
|
|
|
], |
|
|
|
Action::DELETE => [ |
|
|
|
'icon' => 'trash', |
|
|
|
'dropdown' => true, |
|
|
|
'label' => $this->translatorAdmin->transAction('delete') |
|
|
|
], |
|
|
|
Action::BATCH_DELETE => [ |
|
|
|
'class' => 'btn btn-sm btn-danger', |
|
|
|
'icon' => 'trash', |
|
|
|
'label' => $this->translatorAdmin->transAction('delete') |
|
|
|
], |
|
|
|
]; |
|
|
|
|
|
|
|
/* Boutons des actions dans l'édition */ |
|
|
|
|
|
|
|
$actionSaveAndReturn = [ |
|
|
|
'add_class' => 'float-right', |
|
|
|
'icon' => 'check', |
|
|
|
'label' => $this->translatorAdmin->transAction('save_and_return') |
|
|
|
'add_class' => 'float-right', |
|
|
|
'icon' => 'check', |
|
|
|
'label' => $this->translatorAdmin->transAction('save_and_return') |
|
|
|
]; |
|
|
|
$actionIndex = [ |
|
|
|
'icon' => 'chevron-left', |
|
|
|
'class' => 'btn btn-link', |
|
|
|
'label' => $this->translatorAdmin->transAction('back_index') |
|
|
|
'icon' => 'chevron-left', |
|
|
|
'class' => 'btn btn-link', |
|
|
|
'label' => $this->translatorAdmin->transAction('back_index') |
|
|
|
]; |
|
|
|
|
|
|
|
$actionsArray[Crud::PAGE_EDIT] = [ |
|
|
|
Action::SAVE_AND_CONTINUE => [ |
|
|
|
'class' => 'btn btn-info float-right', |
|
|
|
'label' => $this->translatorAdmin->transAction('save_and_continue') |
|
|
|
], |
|
|
|
Action::DELETE => [ |
|
|
|
'icon' => 'trash', |
|
|
|
'class' => 'btn btn-outline-danger action-delete', |
|
|
|
'label' => $this->translatorAdmin->transAction('delete') |
|
|
|
], |
|
|
|
Action::SAVE_AND_RETURN => $actionSaveAndReturn, |
|
|
|
Action::INDEX => $actionIndex, |
|
|
|
Action::SAVE_AND_CONTINUE => [ |
|
|
|
'class' => 'btn btn-info float-right', |
|
|
|
'label' => $this->translatorAdmin->transAction('save_and_continue') |
|
|
|
], |
|
|
|
Action::DELETE => [ |
|
|
|
'icon' => 'trash', |
|
|
|
'class' => 'btn btn-outline-danger action-delete', |
|
|
|
'label' => $this->translatorAdmin->transAction('delete') |
|
|
|
], |
|
|
|
Action::SAVE_AND_RETURN => $actionSaveAndReturn, |
|
|
|
Action::INDEX => $actionIndex, |
|
|
|
]; |
|
|
|
|
|
|
|
$actionsArray[Crud::PAGE_NEW] = [ |
|
|
|
Action::SAVE_AND_ADD_ANOTHER => [ |
|
|
|
'class' => 'btn btn-info float-right', |
|
|
|
'label' => $this->translatorAdmin->transAction('save_and_add_another') |
|
|
|
], |
|
|
|
Action::SAVE_AND_RETURN => $actionSaveAndReturn, |
|
|
|
Action::INDEX => $actionIndex, |
|
|
|
Action::SAVE_AND_ADD_ANOTHER => [ |
|
|
|
'class' => 'btn btn-info float-right', |
|
|
|
'label' => $this->translatorAdmin->transAction('save_and_add_another') |
|
|
|
], |
|
|
|
Action::SAVE_AND_RETURN => $actionSaveAndReturn, |
|
|
|
Action::INDEX => $actionIndex, |
|
|
|
]; |
|
|
|
|
|
|
|
$actions->add(Crud::PAGE_EDIT, Action::INDEX); |
|
|
@@ -153,9 +154,9 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
|
|
|
|
if ($this->isInstanceOf(SortableInterface::class)) { |
|
|
|
$sortAction = Action::new('sort', $this->translatorAdmin->transAction('sort'), 'fa fa-sort') |
|
|
|
->linkToCrudAction('sort') |
|
|
|
->setCssClass('btn btn-sm btn-success') |
|
|
|
->createAsGlobalAction(); |
|
|
|
->linkToCrudAction('sort') |
|
|
|
->setCssClass('btn btn-sm btn-success') |
|
|
|
->createAsGlobalAction(); |
|
|
|
|
|
|
|
$actions->add(Crud::PAGE_INDEX, $sortAction); |
|
|
|
} |
|
|
@@ -163,24 +164,24 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
|
|
|
|
if ($this->isInstanceOf(TreeInterface::class)) { |
|
|
|
$indexChildAction = Action::new( |
|
|
|
'index_children', |
|
|
|
$this->translatorAdmin->transAction('index_children'), |
|
|
|
'fa fa-list' |
|
|
|
'index_children', |
|
|
|
$this->translatorAdmin->transAction('index_children'), |
|
|
|
'fa fa-list' |
|
|
|
) |
|
|
|
->linkToCrudAction(Action::INDEX) |
|
|
|
->setLabel('') |
|
|
|
->setHtmlAttributes(array('data-toggle' => 'tooltip', 'title' => 'Afficher les enfants')) |
|
|
|
->setTemplatePath('@LcSov/adminlte/crud/action/index_children.html.twig') |
|
|
|
->setCssClass('btn btn-sm btn-success'); |
|
|
|
->linkToCrudAction(Action::INDEX) |
|
|
|
->setLabel('') |
|
|
|
->setHtmlAttributes(array('data-toggle' => 'tooltip', 'title' => 'Afficher les enfants')) |
|
|
|
->setTemplatePath('@LcSov/adminlte/crud/action/index_children.html.twig') |
|
|
|
->setCssClass('btn btn-sm btn-success'); |
|
|
|
|
|
|
|
$backParentAction = Action::new( |
|
|
|
'index_parent', |
|
|
|
$this->translatorAdmin->transAction('index_parent'), |
|
|
|
'fa fa-chevron-left' |
|
|
|
'index_parent', |
|
|
|
$this->translatorAdmin->transAction('index_parent'), |
|
|
|
'fa fa-chevron-left' |
|
|
|
) |
|
|
|
->linkToCrudAction(Action::INDEX) |
|
|
|
->setCssClass('btn btn-sm btn-info') |
|
|
|
->createAsGlobalAction(); |
|
|
|
->linkToCrudAction(Action::INDEX) |
|
|
|
->setCssClass('btn btn-sm btn-info') |
|
|
|
->createAsGlobalAction(); |
|
|
|
|
|
|
|
$actions->add(Crud::PAGE_INDEX, $backParentAction); |
|
|
|
$actions->add(Crud::PAGE_INDEX, $indexChildAction); |
|
|
@@ -193,35 +194,35 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
foreach ($actionsArray as $crudActionName => $actionsStyle) { |
|
|
|
foreach ($actionsStyle as $actionName => $button) { |
|
|
|
$actions->update( |
|
|
|
$crudActionName, |
|
|
|
$actionName, |
|
|
|
function (Action $action) use ($button) { |
|
|
|
if (isset($button['add_class'])) { |
|
|
|
$action->addCssClass($button['add_class']); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($button['class'])) { |
|
|
|
$action->setCssClass($button['class']); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($button['icon'])) { |
|
|
|
$action->setIcon('fa fa-' . $button['icon']); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($button['label'])) { |
|
|
|
$action->setLabel($button['label']); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($button['dropdown']) && $button['dropdown']) { |
|
|
|
$action->addCssClass('in-dropdown'); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($button['html_attributes']) && $button['html_attributes']) { |
|
|
|
$action->setHtmlAttributes($button['html_attributes']); |
|
|
|
} |
|
|
|
|
|
|
|
return $action; |
|
|
|
$crudActionName, |
|
|
|
$actionName, |
|
|
|
function (Action $action) use ($button) { |
|
|
|
if (isset($button['add_class'])) { |
|
|
|
$action->addCssClass($button['add_class']); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($button['class'])) { |
|
|
|
$action->setCssClass($button['class']); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($button['icon'])) { |
|
|
|
$action->setIcon('fa fa-' . $button['icon']); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($button['label'])) { |
|
|
|
$action->setLabel($button['label']); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($button['dropdown']) && $button['dropdown']) { |
|
|
|
$action->addCssClass('in-dropdown'); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($button['html_attributes']) && $button['html_attributes']) { |
|
|
|
$action->setHtmlAttributes($button['html_attributes']); |
|
|
|
} |
|
|
|
|
|
|
|
return $action; |
|
|
|
} |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
@@ -261,7 +262,7 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
$this->session->set($paramSessionListMaxResults, $requestListMaxResults); |
|
|
|
} |
|
|
|
$maxResults = $this->session->get($paramSessionListMaxResults) ? $this->session->get( |
|
|
|
$paramSessionListMaxResults |
|
|
|
$paramSessionListMaxResults |
|
|
|
) : 30; |
|
|
|
|
|
|
|
$crud->setPaginatorPageSize($maxResults); |
|
|
@@ -269,26 +270,28 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
|
|
|
|
public function configureFields(string $pageName): iterable |
|
|
|
{ |
|
|
|
$seoPanel = $confPanel = array(); |
|
|
|
|
|
|
|
if ($this->isInstanceOf(SortableInterface::class)) { |
|
|
|
$seoPanel = [ |
|
|
|
FormField::addPanel('seo')->setTemplateName('crud/field/generic'), |
|
|
|
TextField::new('metaTitle')->setLabel('Meta Title')->setHelp( |
|
|
|
'Affiché dans les résultats de recherche Google' |
|
|
|
FormField::addPanel('seo')->setTemplateName('crud/field/generic'), |
|
|
|
TextField::new('metaTitle')->setLabel('Meta Title')->setHelp( |
|
|
|
'Affiché dans les résultats de recherche Google' |
|
|
|
)->hideOnIndex(), |
|
|
|
TextareaField::new('metaDescription')->setLabel('Meta description')->setHelp( |
|
|
|
'Affiché dans les résultats de recherche Google' |
|
|
|
)->hideOnIndex(), |
|
|
|
CollectionField::new('oldUrls') |
|
|
|
->setFormTypeOption('entry_type', TextType::class)->setLabel( |
|
|
|
'Anciennes urls du document' |
|
|
|
)->hideOnIndex(), |
|
|
|
TextareaField::new('metaDescription')->setLabel('Meta description')->setHelp( |
|
|
|
'Affiché dans les résultats de recherche Google' |
|
|
|
)->hideOnIndex(), |
|
|
|
CollectionField::new('oldUrls') |
|
|
|
->setFormTypeOption('entry_type', TextType::class)->setLabel( |
|
|
|
'Anciennes urls du document' |
|
|
|
)->hideOnIndex(), |
|
|
|
]; |
|
|
|
} |
|
|
|
|
|
|
|
if ($this->isInstanceOf(DevAliasInterface::class)) { |
|
|
|
$confPanel = [ |
|
|
|
FormField::addPanel('configuration')->setTemplateName('crud/field/generic'), |
|
|
|
TextField::new('devAlias')->hideOnIndex(), |
|
|
|
FormField::addPanel('configuration')->setTemplateName('crud/field/generic'), |
|
|
|
TextField::new('devAlias')->hideOnIndex(), |
|
|
|
]; |
|
|
|
} |
|
|
|
|
|
|
@@ -310,9 +313,9 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
|
|
|
|
$fields = FieldCollection::new($this->configureFields(Crud::PAGE_INDEX)); |
|
|
|
$filters = $this->get(FilterFactory::class)->create( |
|
|
|
$context->getCrud()->getFiltersConfig(), |
|
|
|
$fields, |
|
|
|
$context->getEntity() |
|
|
|
$context->getCrud()->getFiltersConfig(), |
|
|
|
$fields, |
|
|
|
$context->getEntity() |
|
|
|
); |
|
|
|
$queryBuilder = $this->createIndexQueryBuilder($context->getSearch(), $context->getEntity(), $fields, $filters); |
|
|
|
$paginator = $this->get(PaginatorFactory::class)->create($queryBuilder); |
|
|
@@ -321,16 +324,16 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
$this->get(EntityFactory::class)->processFieldsForAll($entities, $fields); |
|
|
|
|
|
|
|
$sortableForm = $this->createFormBuilder(array('entities', $paginator->getResults())) |
|
|
|
->add( |
|
|
|
'entities', |
|
|
|
CollectionType::class, |
|
|
|
array( |
|
|
|
'required' => true, |
|
|
|
'allow_add' => true, |
|
|
|
'entry_type' => PositionType::class, |
|
|
|
) |
|
|
|
->add( |
|
|
|
'entities', |
|
|
|
CollectionType::class, |
|
|
|
array( |
|
|
|
'required' => true, |
|
|
|
'allow_add' => true, |
|
|
|
'entry_type' => PositionType::class, |
|
|
|
) |
|
|
|
->getForm(); |
|
|
|
) |
|
|
|
->getForm(); |
|
|
|
|
|
|
|
$entityManager = $this->getDoctrine()->getManagerForClass($this->getEntityFqcn()); |
|
|
|
$repository = $entityManager->getRepository($this->getEntityFqcn()); |
|
|
@@ -357,26 +360,26 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
} |
|
|
|
|
|
|
|
$url = $this->get(AdminUrlGenerator::class) |
|
|
|
->setAction(Action::INDEX) |
|
|
|
->generateUrl(); |
|
|
|
->setAction(Action::INDEX) |
|
|
|
->generateUrl(); |
|
|
|
$this->addFlash('success', $this->translatorAdmin->transFlashMessage('sort'), array()); |
|
|
|
|
|
|
|
return $this->redirect($url); |
|
|
|
} |
|
|
|
|
|
|
|
$responseParameters = $this->configureResponseParameters( |
|
|
|
KeyValueStore::new( |
|
|
|
[ |
|
|
|
'pageName' => Crud::PAGE_INDEX, |
|
|
|
'templatePath' => '@LcSov/adminlte/crud/sort.html.twig', |
|
|
|
'entities' => $entities, |
|
|
|
'paginator' => $paginator, |
|
|
|
'global_actions' => array(), |
|
|
|
'batch_actions' => array(), |
|
|
|
'filters' => $filters, |
|
|
|
'sortable_form' => $sortableForm, |
|
|
|
] |
|
|
|
) |
|
|
|
KeyValueStore::new( |
|
|
|
[ |
|
|
|
'pageName' => Crud::PAGE_INDEX, |
|
|
|
'templatePath' => '@LcSov/adminlte/crud/sort.html.twig', |
|
|
|
'entities' => $entities, |
|
|
|
'paginator' => $paginator, |
|
|
|
'global_actions' => array(), |
|
|
|
'batch_actions' => array(), |
|
|
|
'filters' => $filters, |
|
|
|
'sortable_form' => $sortableForm, |
|
|
|
] |
|
|
|
) |
|
|
|
); |
|
|
|
$responseParameters->set('fields', $this->configureFields('index')); |
|
|
|
$event = new AfterCrudActionEvent($context, $responseParameters); |
|
|
@@ -389,16 +392,17 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
} |
|
|
|
|
|
|
|
public function createIndexQueryBuilder( |
|
|
|
SearchDto $searchDto, |
|
|
|
EntityDto $entityDto, |
|
|
|
FieldCollection $fields, |
|
|
|
FilterCollection $filters |
|
|
|
): QueryBuilder { |
|
|
|
SearchDto $searchDto, |
|
|
|
EntityDto $entityDto, |
|
|
|
FieldCollection $fields, |
|
|
|
FilterCollection $filters |
|
|
|
): QueryBuilder |
|
|
|
{ |
|
|
|
$queryBuilder = parent::createIndexQueryBuilder( |
|
|
|
$searchDto, |
|
|
|
$entityDto, |
|
|
|
$fields, |
|
|
|
$filters |
|
|
|
$searchDto, |
|
|
|
$entityDto, |
|
|
|
$fields, |
|
|
|
$filters |
|
|
|
); |
|
|
|
|
|
|
|
if ($this->isInstanceOf(TreeInterface::class)) { |
|
|
@@ -416,16 +420,17 @@ abstract class AbstractCrudController extends EaAbstractCrudController |
|
|
|
} |
|
|
|
|
|
|
|
public function createSortQueryBuilder( |
|
|
|
SearchDto $searchDto, |
|
|
|
EntityDto $entityDto, |
|
|
|
FieldCollection $fields, |
|
|
|
FilterCollection $filters |
|
|
|
): QueryBuilder { |
|
|
|
SearchDto $searchDto, |
|
|
|
EntityDto $entityDto, |
|
|
|
FieldCollection $fields, |
|
|
|
FilterCollection $filters |
|
|
|
): QueryBuilder |
|
|
|
{ |
|
|
|
$queryBuilder = parent::createIndexQueryBuilder( |
|
|
|
$searchDto, |
|
|
|
$entityDto, |
|
|
|
$fields, |
|
|
|
$filters |
|
|
|
$searchDto, |
|
|
|
$entityDto, |
|
|
|
$fields, |
|
|
|
$filters |
|
|
|
); |
|
|
|
|
|
|
|
if ($this->isInstanceOf(TreeInterface::class)) { |