Browse Source

listing tickets

ideas
Charly 3 years ago
parent
commit
82e6b27d25
9 changed files with 100 additions and 62 deletions
  1. +56
    -47
      Controller/AbstractAdminController.php
  2. +13
    -7
      Controller/Ticket/TicketAdminController.php
  3. +6
    -0
      Resources/translations/admin.fr.yaml
  4. +0
    -8
      Resources/views/admin/ticket/index-status.html.twig
  5. +0
    -0
      Resources/views/admin/ticket/index_email.html.twig
  6. +0
    -0
      Resources/views/admin/ticket/index_lastmessage.html.twig
  7. +10
    -0
      Resources/views/admin/ticket/index_status.html.twig
  8. +0
    -0
      Resources/views/admin/ticket/index_username.html.twig
  9. +15
    -0
      Resources/views/adminlte/macro/badge.html.twig

+ 56
- 47
Controller/AbstractAdminController.php View File

RequestStack $request, RequestStack $request,
EntityManagerInterface $em, EntityManagerInterface $em,
TranslatorAdmin $translatorAdmin TranslatorAdmin $translatorAdmin
)
{
) {
$this->session = $session; $this->session = $session;
$this->request = $request; $this->request = $request;
$this->em = $em; $this->em = $em;
'title' => $this->translatorAdmin->transAction('edit') 'title' => $this->translatorAdmin->transAction('edit')
) )
], ],
Action::DETAIL => [
'icon' => 'eye',
'add_class' => 'btn btn-success',
'label' => false,
'html_attributes' => array(
'data-toggle' => 'tooltip',
'title' => $this->translatorAdmin->transAction('detail')
)
],
Action::DELETE => [ Action::DELETE => [
'icon' => 'trash', 'icon' => 'trash',
'dropdown' => true, 'dropdown' => true,
]; ];


/* Boutons des actions dans l'édition */ /* Boutons des actions dans l'édition */

$actionSaveAndReturn = [ $actionSaveAndReturn = [
'add_class' => 'float-right', 'add_class' => 'float-right',
'icon' => 'check', 'icon' => 'check',


foreach ($actionsArray as $crudActionName => $actionsStyle) { foreach ($actionsArray as $crudActionName => $actionsStyle) {
foreach ($actionsStyle as $actionName => $button) { 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']);
// si l'action existe
if ($actions->getAsDto('actions')->getAction($crudActionName, $actionName)) {
$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;
} }

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;
}
);
);
}
} }
} }


} }


public function createIndexQueryBuilder( public function createIndexQueryBuilder(
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
FilterCollection $filters
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
FilterCollection $filters
): QueryBuilder { ): QueryBuilder {
$queryBuilder = parent::createIndexQueryBuilder( $queryBuilder = parent::createIndexQueryBuilder(
$searchDto,
$entityDto,
$fields,
$filters
$searchDto,
$entityDto,
$fields,
$filters
); );


if ($this->isInstanceOf(TreeInterface::class)) { if ($this->isInstanceOf(TreeInterface::class)) {
} }


public function createSortQueryBuilder( public function createSortQueryBuilder(
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
FilterCollection $filters
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
FilterCollection $filters
): QueryBuilder { ): QueryBuilder {

$queryBuilder = $this->createIndexQueryBuilder($searchDto,$entityDto,$fields,$filters);
$queryBuilder = $this->createIndexQueryBuilder($searchDto, $entityDto, $fields, $filters);


return $queryBuilder; return $queryBuilder;
} }

+ 13
- 7
Controller/Ticket/TicketAdminController.php View File

DateField::new('createdAt')->setFormat('short') DateField::new('createdAt')->setFormat('short')
->hideOnForm(), ->hideOnForm(),
TextField::new('visitorFirstName') TextField::new('visitorFirstName')
->setTemplatePath('@LcSov/admin/ticket/index-username.html.twig')
->setTemplatePath('@LcSov/admin/ticket/index_username.html.twig')
->hideOnForm(), ->hideOnForm(),
TextField::new('visitorEmail') TextField::new('visitorEmail')
->setTemplatePath('@LcSov/admin/ticket/index-email.html.twig')
->setTemplatePath('@LcSov/admin/ticket/index_email.html.twig')
->hideOnForm(), ->hideOnForm(),
AssociationField::new('user') AssociationField::new('user')
->hideOnIndex(), ->hideOnIndex(),
TextField::new('subject'), TextField::new('subject'),
TextField::new('lastMessage') TextField::new('lastMessage')
->setTemplatePath('@LcSov/admin/ticket/index-lastmessage.html.twig')
->setTemplatePath('@LcSov/admin/ticket/index_lastmessage.html.twig')
->hideOnForm(), ->hideOnForm(),
ChoiceField::new('type') ChoiceField::new('type')
->autocomplete() ->autocomplete()
'entity.Ticket.fields.statusOptions.' . Ticket::TICKET_STATUS_CLOSED => Ticket::TICKET_STATUS_CLOSED, 'entity.Ticket.fields.statusOptions.' . Ticket::TICKET_STATUS_CLOSED => Ticket::TICKET_STATUS_CLOSED,
] ]
) )
->setTemplatePath('@LcSov/admin/ticket/index-status.html.twig')
->setTemplatePath('@LcSov/admin/ticket/index_status.html.twig')
->hideOnForm(), ->hideOnForm(),
]; ];
} }
// public function configureCrud(Crud $crud): Crud // public function configureCrud(Crud $crud): Crud
// { // {
// $crud // $crud
// ->overrideTemplate('layout', '@LcSov/admin/layout.html.twig');
//// ->overrideTemplate('layout', '@LcCaracole/adminlte/layout.html.twig');
// ->overrideTemplate('crud/detail', '@LcSov/admin/ticket/detail.html.twig');
// //
// return parent::configureCrud($crud); // return parent::configureCrud($crud);
// } // }


public function configureActions(Actions $actions): Actions public function configureActions(Actions $actions): Actions
{ {
// $actions
// ->add(Crud::PAGE_INDEX, Action::DETAIL);
// $actions = parent::configureActions($actions);
// $actions
// ->remove(Crud::PAGE_INDEX, Action::EDIT);
// return $actions;

$actions $actions
->add(Crud::PAGE_INDEX, Action::DETAIL); ->add(Crud::PAGE_INDEX, Action::DETAIL);
// ->remove(Crud::PAGE_EDIT, Action::EDIT);
// ->remove(Crud::PAGE_INDEX, Action::EDIT);
return parent::configureActions($actions); return parent::configureActions($actions);
} }
} }

+ 6
- 0
Resources/translations/admin.fr.yaml View File

sort: Ordonner sort: Ordonner
delete: Supprimer delete: Supprimer
change: Changer change: Changer
detail: Voir
index_children: Afficher les enfants index_children: Afficher les enfants
index_parent: Retour au parent index_parent: Retour au parent
back_index: Retour à la liste back_index: Retour à la liste
label: Page label: Page
label_plurial: Pages label_plurial: Pages
Ticket: Ticket:
status:
open: Ouvert
being-processed: En attente
closed: Fermé
fields: fields:
visitorFirstName: Nom visitorFirstName: Nom
visitorLastName: Prénom visitorLastName: Prénom
visitorEmail: E-mail visitorEmail: E-mail
subject: Sujet subject: Sujet
type: Type type: Type
lastMessage: Dernier message
typeOptions: typeOptions:
general-question: Questions générales general-question: Questions générales
technical-problem: Problème technique technical-problem: Problème technique

+ 0
- 8
Resources/views/admin/ticket/index-status.html.twig View File

{% set status = entity.instance.status %}
{% if status == 'open' %}
<span class="badge badge-success">{{ entity.instance.status|trans }}</span>
{% elseif status == 'being-processed' %}
<span class="badge badge-warning">{{ entity.instance.status|trans }}</span>
{% elseif status == 'closed' %}
<span class="badge badge-danger">{{ entity.instance.status|trans }}</span>
{% endif %}

Resources/views/admin/ticket/index-email.html.twig → Resources/views/admin/ticket/index_email.html.twig View File


Resources/views/admin/ticket/index-lastmessage.html.twig → Resources/views/admin/ticket/index_lastmessage.html.twig View File


+ 10
- 0
Resources/views/admin/ticket/index_status.html.twig View File

{% import "@LcSov/adminlte/macro/badge.html.twig" as macro %}

{% set status = entity.instance.status %}
{% if status == 'open' %}
{{ macro.badge_success(('entity.Ticket.status.'~entity.instance.status)|trans({},'admin')) }}
{% elseif status == 'being-processed' %}
{{ macro.badge_warning(('entity.Ticket.status.'~entity.instance.status)|trans({},'admin')) }}
{% elseif status == 'closed' %}
{{ macro.badge_danger(('entity.Ticket.status.'~entity.instance.status)|trans({},'admin')) }}
{% endif %}

Resources/views/admin/ticket/index-username.html.twig → Resources/views/admin/ticket/index_username.html.twig View File


+ 15
- 0
Resources/views/adminlte/macro/badge.html.twig View File

{% macro badge_success(title) %}
{{ _self.badge('success', title) }}
{% endmacro %}

{% macro badge_warning(title) %}
{{ _self.badge('warning', title) }}
{% endmacro %}

{% macro badge_danger(title) %}
{{ _self.badge('danger', title) }}
{% endmacro %}

{% macro badge(status, title) %}
<span class="badge badge-{{ status }}">{{ title }}</span>
{% endmacro %}

Loading…
Cancel
Save