app/Plugin/ContactManagement42/Controller/Admin/SearchCustomerController.php line 47

Open in your IDE?
  1. <?php
  2. namespace Plugin\ContactManagement42\Controller\Admin;
  3. use Eccube\Controller\AbstractController;
  4. use Eccube\Entity\Master\CustomerStatus;
  5. use Eccube\Event\EventArgs;
  6. use Eccube\Form\Type\Admin\CustomerType;
  7. use Eccube\Form\Type\Admin\SearchCustomerType;
  8. use Eccube\Repository\CustomerRepository;
  9. use Knp\Component\Pager\PaginatorInterface;
  10. use Plugin\ContactManagement42\Form\Type\Admin\ContactType;
  11. use Plugin\ContactManagement42\PluginEvents;
  12. use Plugin\ContactManagement42\Repository\ContactRepository;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. class SearchCustomerController extends AbstractController
  19. {
  20.     /**
  21.      * @var CustomerRepository
  22.      */
  23.     protected $customerRepository;
  24.     public function __construct(
  25.         CustomerRepository $customerRepository
  26.     ) {
  27.         $this->customerRepository $customerRepository;
  28.     }
  29.     /**
  30.      * 顧客情報を検索する.
  31.      *
  32.      * @Route("/%eccube_admin_route%/contact/search/customer/html", name="plugin_contact_search_customer_html")
  33.      * @Route("/%eccube_admin_route%/contact/search/customer/html/page/{page_no}", requirements={"page_no" = "\d+"}, name="plugin_contact_search_customer_html_page")
  34.      * @Template("@ContactManagement42/admin/search_customer.twig")
  35.      *
  36.      * @param Request $request
  37.      * @param integer $page_no
  38.      *
  39.      * @return \Symfony\Component\HttpFoundation\JsonResponse
  40.      */
  41.     public function searchCustomerHtml(Request $request$page_no nullPaginatorInterface $paginator)
  42.     {
  43.         if ($request->isXmlHttpRequest() && $this->isTokenValid()) {
  44.             log_debug('search customer start.');
  45.             $page_count $this->eccubeConfig['eccube_default_page_count'];
  46.             $session $this->session;
  47.             if ('POST' === $request->getMethod()) {
  48.                 $page_no 1;
  49.                 $searchData = [
  50.                     'multi' => $request->get('search_word'),
  51.                 ];
  52.                 $session->set('eccube.admin.contact.customer.search'$searchData);
  53.                 $session->set('eccube.admin.contact.customer.search.page_no'$page_no);
  54.             } else {
  55.                 $searchData = (array) $session->get('eccube.admin.contact.customer.search');
  56.                 if (is_null($page_no)) {
  57.                     $page_no intval($session->get('eccube.admin.contact.customer.search.page_no'));
  58.                 } else {
  59.                     $session->set('eccube.admin.contact.customer.search.page_no'$page_no);
  60.                 }
  61.             }
  62.             $qb $this->customerRepository->getQueryBuilderBySearchData($searchData);
  63.             $event = new EventArgs(
  64.                 [
  65.                     'qb' => $qb,
  66.                     'data' => $searchData,
  67.                 ],
  68.                 $request
  69.             );
  70.             $this->eventDispatcher->dispatch($eventPluginEvents::ADMIN_CONTACT_EDIT_SEARCH_CUSTOMER_SEARCH);
  71.             /** @var \Knp\Component\Pager\Pagination\SlidingPagination $pagination */
  72.             $pagination $paginator->paginate(
  73.                 $qb,
  74.                 $page_no,
  75.                 $page_count,
  76.                 ['wrap-queries' => true]
  77.             );
  78.             /** @var $Customers \Eccube\Entity\Customer[] */
  79.             $Customers $pagination->getItems();
  80.             if (empty($Customers)) {
  81.                 log_debug('search customer not found.');
  82.             }
  83.             $data = [];
  84.             $formatName '%s%s(%s%s)';
  85.             foreach ($Customers as $Customer) {
  86.                 $data[] = [
  87.                     'id' => $Customer->getId(),
  88.                     'name' => sprintf($formatName$Customer->getName01(), $Customer->getName02(),
  89.                         $Customer->getKana01(),
  90.                         $Customer->getKana02()),
  91.                     'phone_number' => $Customer->getPhoneNumber(),
  92.                     'email' => $Customer->getEmail(),
  93.                 ];
  94.             }
  95.             $event = new EventArgs(
  96.                 [
  97.                     'data' => $data,
  98.                     'Customers' => $pagination,
  99.                 ],
  100.                 $request
  101.             );
  102.             $this->eventDispatcher->dispatch($eventPluginEvents::ADMIN_CONTACT_EDIT_SEARCH_CUSTOMER_COMPLETE);
  103.             $data $event->getArgument('data');
  104.             return [
  105.                 'data' => $data,
  106.                 'pagination' => $pagination,
  107.             ];
  108.         }
  109.     }
  110.     /**
  111.      * 顧客情報を検索する.
  112.      *
  113.      * @Route("/%eccube_admin_route%/contact/search/customer/id", name="plugin_contact_search_customer_by_id", methods={"POST"})
  114.      *
  115.      * @param Request $request
  116.      *
  117.      * @return \Symfony\Component\HttpFoundation\JsonResponse
  118.      */
  119.     public function searchCustomerById(Request $request)
  120.     {
  121.         if ($request->isXmlHttpRequest() && $this->isTokenValid()) {
  122.             log_debug('search customer by id start.');
  123.             /** @var $Customer \Eccube\Entity\Customer */
  124.             $Customer $this->customerRepository
  125.                 ->find($request->get('id'));
  126.             $event = new EventArgs(
  127.                 [
  128.                     'Customer' => $Customer,
  129.                 ],
  130.                 $request
  131.             );
  132.             $this->eventDispatcher->dispatch($eventPluginEvents::ADMIN_CONTACT_EDIT_SEARCH_CUSTOMER_BY_ID_INITIALIZE);
  133.             if (is_null($Customer)) {
  134.                 log_debug('search customer by id not found.');
  135.                 return $this->json([], 404);
  136.             }
  137.             log_debug('search customer by id found.');
  138.             $data = [
  139.                 'id' => $Customer->getId(),
  140.                 'name01' => $Customer->getName01(),
  141.                 'name02' => $Customer->getName02(),
  142.                 'kana01' => $Customer->getKana01(),
  143.                 'kana02' => $Customer->getKana02(),
  144.                 'postal_code' => $Customer->getPostalCode(),
  145.                 'pref' => is_null($Customer->getPref()) ? null $Customer->getPref()->getId(),
  146.                 'addr01' => $Customer->getAddr01(),
  147.                 'addr02' => $Customer->getAddr02(),
  148.                 'email' => $Customer->getEmail(),
  149.                 'phone_number' => $Customer->getPhoneNumber(),
  150.                 'company_name' => $Customer->getCompanyName(),
  151.                 'admin_edit_url' => $this->generateUrl('admin_customer_edit', ['id' => $Customer->getId()]),
  152.             ];
  153.             $event = new EventArgs(
  154.                 [
  155.                     'data' => $data,
  156.                     'Customer' => $Customer,
  157.                 ],
  158.                 $request
  159.             );
  160.             $this->eventDispatcher->dispatch($eventPluginEvents::ADMIN_CONTACT_EDIT_SEARCH_CUSTOMER_BY_ID_COMPLETE);
  161.             $data $event->getArgument('data');
  162.             return $this->json($data);
  163.         }
  164.     }
  165. }