public function index(Application $app, Request $request, $page_no = null)
{
$session = $app['session'];
$builder = $app['form.factory']->createBuilder('admin_search_product');
$event = new EventArgs(array('builder' => $builder), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_PRODUCT_INDEX_INITIALIZE, $event);
$searchForm = $builder->getForm();
$pagination = array();
$disps = $app['eccube.repository.master.disp']->findAll();
$pageMaxis = $app['eccube.repository.master.page_max']->findAll();
$page_count = $app['config']['default_page_count'];
$page_status = null;
$active = false;
if ('POST' === $request->getMethod()) {
$searchForm->handleRequest($request);
if ($searchForm->isValid()) {
$searchData = $searchForm->getData();
// paginator
$qb = $app['eccube.repository.product']->getQueryBuilderBySearchDataForAdmin($searchData);
$page_no = 1;
$event = new EventArgs(array('qb' => $qb, 'searchData' => $searchData), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_PRODUCT_INDEX_SEARCH, $event);
$searchData = $event->getArgument('searchData');
$pagination = $app['paginator']()->paginate($qb, $page_no, $page_count, array('wrap-queries' => true));
// sessionのデータ保持
$session->set('eccube.admin.product.search', $searchData);
$session->set('eccube.admin.product.search.page_no', $page_no);
}
} else {
if (is_null($page_no) && $request->get('resume') != Constant::ENABLED) {
// sessionを削除
$session->remove('eccube.admin.product.search');
$session->remove('eccube.admin.product.search.page_no');
} else {
// pagingなどの処理
$searchData = $session->get('eccube.admin.product.search');
if (is_null($page_no)) {
$page_no = intval($session->get('eccube.admin.product.search.page_no'));
} else {
$session->set('eccube.admin.product.search.page_no', $page_no);
}
if (!is_null($searchData)) {
// 公開ステータス
$status = $request->get('status');
if (!empty($status)) {
if ($status != $app['config']['admin_product_stock_status']) {
$searchData['link_status'] = $app['eccube.repository.master.disp']->find($status);
$searchData['status'] = null;
$session->set('eccube.admin.product.search', $searchData);
} else {
$searchData['stock_status'] = Constant::DISABLED;
}
$page_status = $status;
} else {
$searchData['link_status'] = null;
$searchData['stock_status'] = null;
}
// 表示件数
$pcount = $request->get('page_count');
$page_count = empty($pcount) ? $page_count : $pcount;
$qb = $app['eccube.repository.product']->getQueryBuilderBySearchDataForAdmin($searchData);
$event = new EventArgs(array('qb' => $qb, 'searchData' => $searchData), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_PRODUCT_INDEX_SEARCH, $event);
$searchData = $event->getArgument('searchData');
$pagination = $app['paginator']()->paginate($qb, $page_no, $page_count, array('wrap-queries' => true));
// セッションから検索条件を復元(カテゴリ)
if (!empty($searchData['category_id'])) {
$searchData['category_id'] = $app['eccube.repository.category']->find($searchData['category_id']);
}
// セッションから検索条件を復元(スーテタス)
if (count($searchData['status']) > 0) {
$status_ids = array();
foreach ($searchData['status'] as $Status) {
$status_ids[] = $Status->getId();
}
$searchData['status'] = $app['eccube.repository.master.disp']->findBy(array('id' => $status_ids));
}
$searchForm->setData($searchData);
}
}
}
return $app->render('Product/index.twig', array('searchForm' => $searchForm->createView(), 'pagination' => $pagination, 'disps' => $disps, 'pageMaxis' => $pageMaxis, 'page_no' => $page_no, 'page_status' => $page_status, 'page_count' => $page_count, 'active' => $active));
}