public function searchProduct(Application $app, Request $request, $page_no = null)
{
if ($request->isXmlHttpRequest()) {
$app['monolog']->addDebug('search product start.');
$page_count = $app['config']['default_page_count'];
$session = $app['session'];
if ('POST' === $request->getMethod()) {
$page_no = 1;
$searchData = array('name' => $request->get('id'));
if ($categoryId = $request->get('category_id')) {
$Category = $app['eccube.repository.category']->find($categoryId);
$searchData['category_id'] = $Category;
}
$session->set('eccube.admin.order.product.search', $searchData);
$session->set('eccube.admin.order.product.search.page_no', $page_no);
} else {
$searchData = (array) $session->get('eccube.admin.order.product.search');
if (is_null($page_no)) {
$page_no = intval($session->get('eccube.admin.order.product.search.page_no'));
} else {
$session->set('eccube.admin.order.product.search.page_no', $page_no);
}
}
$qb = $app['eccube.repository.product']->getQueryBuilderBySearchData($searchData);
$event = new EventArgs(array('qb' => $qb, 'searchData' => $searchData), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ORDER_EDIT_SEARCH_PRODUCT_SEARCH, $event);
/** @var \Knp\Component\Pager\Pagination\SlidingPagination $pagination */
$pagination = $app['paginator']()->paginate($qb, $page_no, $page_count, array('wrap-queries' => true));
/** @var $Products \Eccube\Entity\Product[] */
$Products = $pagination->getItems();
if (empty($Products)) {
$app['monolog']->addDebug('search product not found.');
}
$forms = array();
foreach ($Products as $Product) {
/* @var $builder \Symfony\Component\Form\FormBuilderInterface */
$builder = $app['form.factory']->createNamedBuilder('', 'add_cart', null, array('product' => $Product));
$addCartForm = $builder->getForm();
$forms[$Product->getId()] = $addCartForm->createView();
}
$event = new EventArgs(array('forms' => $forms, 'Products' => $Products, 'pagination' => $pagination), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_ORDER_EDIT_SEARCH_PRODUCT_COMPLETE, $event);
return $app->render('Order/search_product.twig', array('forms' => $forms, 'Products' => $Products, 'pagination' => $pagination));
}
}