/** * テンプレート一覧画面 * * @param Application $app * @param Request $request */ public function index(Application $app, Request $request) { $DeviceType = $app['eccube.repository.master.device_type']->find(DeviceType::DEVICE_TYPE_PC); $Templates = $app['eccube.repository.template']->findBy(array('DeviceType' => $DeviceType)); $form = $app->form()->add('selected', 'hidden')->getForm(); if ('POST' === $request->getMethod()) { $form->handleRequest($request); if ($form->isValid()) { $Template = $app['eccube.repository.template']->find($form['selected']->getData()); // path.(yml|php)の再構築 $file = $app['config']['root_dir'] . '/app/config/eccube/path'; if (file_exists($file . '.php')) { $config = (require $file . '.php'); } elseif (file_exists($file . '.yml')) { $config = Yaml::parse(file_get_contents($file . '.yml')); } $templateCode = $Template->getCode(); $config['template_code'] = $templateCode; $config['template_realdir'] = $config['root_dir'] . '/app/template/' . $templateCode; $config['template_html_realdir'] = $config['public_path_realdir'] . '/template/' . $templateCode; $config['front_urlpath'] = $config['root_urlpath'] . RELATIVE_PUBLIC_DIR_PATH . '/template/' . $templateCode; $config['block_realdir'] = $config['template_realdir'] . '/Block'; if (file_exists($file . '.php')) { file_put_contents($file . '.php', sprintf('<?php return %s', var_export($config, true)) . ';'); } if (file_exists($file . '.yml')) { file_put_contents($file . '.yml', Yaml::dump($config)); } $app->addSuccess('admin.content.template.save.complete', 'admin'); return $app->redirect($app->url('admin_store_template')); } } return $app->render('Store/template.twig', array('form' => $form->createView(), 'Templates' => $Templates)); }
/** * テンプレート一覧画面 * * @param Application $app * @param Request $request */ public function index(Application $app, Request $request) { $DeviceType = $app['eccube.repository.master.device_type']->find(DeviceType::DEVICE_TYPE_PC); $Templates = $app['eccube.repository.template']->findBy(array('DeviceType' => $DeviceType)); $form = $app->form()->add('selected', 'hidden')->getForm(); if ('POST' === $request->getMethod()) { $form->handleRequest($request); if ($form->isValid()) { $Template = $app['eccube.repository.template']->find($form['selected']->getData()); // path.ymlの再構築 $file = $app['config']['root_dir'] . '/app/config/eccube/path.yml'; $config = Yaml::parse($file); $templateCode = $Template->getCode(); $config['template_code'] = $templateCode; $config['template_realdir'] = $config['root_dir'] . '/app/template/' . $templateCode; $config['template_html_realdir'] = $config['root_dir'] . '/html/template/' . $templateCode; $config['front_urlpath'] = $config['root_urlpath'] . '/template/' . $templateCode; $config['block_realdir'] = $config['template_realdir'] . '/Block'; file_put_contents($file, Yaml::dump($config)); $app->addSuccess('admin.content.template.save.complete', 'admin'); return $app->redirect($app->url('admin_store_template')); } } return $app->render('Store/template.twig', array('form' => $form->createView(), 'Templates' => $Templates)); }
/** * 退会画面. * * @param Application $app * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ public function index(Application $app, Request $request) { $builder = $app->form(); $event = new EventArgs(array('builder' => $builder), $request); $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_MYPAGE_WITHDRAW_INDEX_INITIALIZE, $event); $form = $builder->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { switch ($request->get('mode')) { case 'confirm': return $app->render('Mypage/withdraw_confirm.twig', array('form' => $form->createView())); case 'complete': /* @var $Customer \Eccube\Entity\Customer */ $Customer = $app->user(); // 会員削除 $email = $Customer->getEmail(); // メールアドレスにダミーをセット $Customer->setEmail(Str::random(60) . '@dummy.dummy'); $Customer->setDelFlg(Constant::ENABLED); $app['orm.em']->flush(); $event = new EventArgs(array('form' => $form, 'Customer' => $Customer), $request); $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_MYPAGE_WITHDRAW_INDEX_COMPLETE, $event); // メール送信 $app['eccube.service.mail']->sendCustomerWithdrawMail($Customer, $email); // ログアウト $this->getSecurity($app)->setToken(null); return $app->redirect($app->url('mypage_withdraw_complete')); } } return $app->render('Mypage/withdraw.twig', array('form' => $form->createView())); }
/** * Index * * @param Application $app * @return \Symfony\Component\HttpFoundation\RedirectResponse */ public function index(Application $app, Request $request) { /* @var $form \Symfony\Component\Form\FormInterface */ $form = $app->form()->getForm(); if ('POST' === $request->getMethod()) { $form->handleRequest($request); if ($form->isValid()) { switch ($request->get('mode')) { case 'confirm': return $app->renderView('Mypage/withdraw_confirm.twig', array('form' => $form->createView())); case 'complete': /* @var $Customer \Eccube\Entity\Customer */ $Customer = $app->user(); // 会員削除 $email = $Customer->getEmail(); // メールアドレスにダミーをセット $Customer->setEmail(Str::random(60) . '@dummy.dummy'); $Customer->setDelFlg(Constant::ENABLED); $app['orm.em']->flush(); // メール送信 $app['eccube.service.mail']->sendCustomerWithdrawMail($Customer, $email); // ログアウト $this->getSecurity($app)->setToken(null); return $app->redirect($app->url('mypage_withdraw_complete')); } } } return $app->renderView('Mypage/withdraw.twig', array('form' => $form->createView())); }
/** * 新着情報一覧を表示する。 * * @param Application $app * @return \Symfony\Component\HttpFoundation\Response */ public function index(Application $app, Request $request) { $NewsList = $app['eccube.repository.news']->findBy(array(), array('rank' => 'DESC')); $builder = $app->form(); $event = new EventArgs(array('builder' => $builder, 'NewsList' => $NewsList), $request); $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_CONTENT_NEWS_INDEX_INITIALIZE, $event); $form = $builder->getForm(); return $app->render('Content/news.twig', array('form' => $form->createView(), 'NewsList' => $NewsList)); }
public function index(Application $app, Request $request, $id = CsvType::CSV_TYPE_ORDER) { $CsvType = $app['eccube.repository.master.csv_type']->find($id); if (is_null($CsvType)) { throw new NotFoundHttpException(); } $builder = $app->form(); $builder->add('csv_type', 'csv_type', array('label' => 'CSV出力項目', 'required' => true, 'constraints' => array(new Assert\NotBlank()), 'data' => $CsvType)); $CsvNotOutput = $app['eccube.repository.csv']->findBy(array('CsvType' => $CsvType, 'enable_flg' => Constant::DISABLED), array('rank' => 'ASC')); $builder->add('csv_not_output', 'entity', array('class' => 'Eccube\\Entity\\Csv', 'property' => 'disp_name', 'required' => false, 'expanded' => false, 'multiple' => true, 'choices' => $CsvNotOutput)); $CsvOutput = $app['eccube.repository.csv']->findBy(array('CsvType' => $CsvType, 'enable_flg' => Constant::ENABLED), array('rank' => 'ASC')); $builder->add('csv_output', 'entity', array('class' => 'Eccube\\Entity\\Csv', 'property' => 'disp_name', 'required' => false, 'expanded' => false, 'multiple' => true, 'choices' => $CsvOutput)); $event = new EventArgs(array('builder' => $builder, 'CsvOutput' => $CsvOutput, 'CsvType' => $CsvType), $request); $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_SETTING_SHOP_CSV_INDEX_INITIALIZE, $event); $form = $builder->getForm(); if ('POST' === $request->getMethod()) { $data = $request->get('form'); if (isset($data['csv_not_output'])) { $Csvs = $data['csv_not_output']; $rank = 1; foreach ($Csvs as $csv) { $c = $app['eccube.repository.csv']->find($csv); $c->setRank($rank); $c->setEnableFlg(Constant::DISABLED); $rank++; } } if (isset($data['csv_output'])) { $Csvs = $data['csv_output']; $rank = 1; foreach ($Csvs as $csv) { $c = $app['eccube.repository.csv']->find($csv); $c->setRank($rank); $c->setEnableFlg(Constant::ENABLED); $rank++; } } $app['orm.em']->flush(); $event = new EventArgs(array('form' => $form, 'CsvOutput' => $CsvOutput, 'CsvType' => $CsvType), $request); $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_SETTING_SHOP_CSV_INDEX_COMPLETE, $event); $app->addSuccess('admin.shop.csv.save.complete', 'admin'); return $app->redirect($app->url('admin_setting_shop_csv', array('id' => $id))); } return $app->render('Setting/Shop/csv.twig', array('form' => $form->createView(), 'id' => $id)); }
public function index(Application $app, Request $request) { $form = $app->form()->getForm(); if ('POST' === $request->getMethod()) { $form->handleRequest($request); if ($form->isValid()) { switch ($request->get('mode')) { case 'twig': // Twigキャッシュクリア Cache::clear($app, false, true); $app->addSuccess('admin.content.twig.cache.save.complete', 'admin'); break; default: break; } } } return $app->render('Content/cache.twig', array('form' => $form->createView())); }
public function index(Application $app, Request $request) { $AuthorityRoles = $app['eccube.repository.authority_role']->findAllSort(); $form = $app->form()->add('AuthorityRoles', 'collection', array('type' => 'admin_authority_role', 'allow_add' => true, 'allow_delete' => true, 'prototype' => true, 'data' => $AuthorityRoles))->getForm(); if (count($AuthorityRoles) == 0) { // 1件もない場合、空行を追加 $form->get('AuthorityRoles')->add(uniqid(), 'admin_authority_role'); } if ('POST' === $request->getMethod()) { $form->handleRequest($request); if ($form->isValid()) { $data = $form->getData(); foreach ($AuthorityRoles as $AuthorityRole) { $app['orm.em']->remove($AuthorityRole); } foreach ($data['AuthorityRoles'] as $AuthorityRole) { $Authority = $AuthorityRole->getAuthority(); $denyUrl = $AuthorityRole->getDenyUrl(); if ($Authority && !empty($denyUrl)) { $app['orm.em']->persist($AuthorityRole); } else { $id = $AuthorityRole->getId(); if (!empty($id)) { $role = $app['eccube.repository.authority_role']->find($id); if ($role) { // 削除 $app['orm.em']->remove($AuthorityRole); } } } } $app['orm.em']->flush(); $app->addSuccess('admin.sysmte.authority.save.complete', 'admin'); return $app->redirect($app->url('admin_setting_system_authority')); } } return $app->render('Setting/System/authority.twig', array('form' => $form->createView())); }
public function index(Application $app) { $Members = $app['eccube.repository.member']->findBy(array(), array('rank' => 'DESC')); $form = $app->form()->getForm(); return $app->render('Setting/System/member.twig', array('form' => $form->createView(), 'Members' => $Members)); }
/** * 認証キー設定画面 * * @param Application $app * @param Request $request */ public function authenticationSetting(Application $app, Request $request) { $form = $app->form()->getForm(); $BaseInfo = $app['eccube.repository.base_info']->get(); // 認証キーの取得 $form->add('authentication_key', 'text', array('label' => '認証キー', 'constraints' => array(new Assert\Regex(array('pattern' => "/^[0-9a-zA-Z]+\$/"))), 'data' => $BaseInfo->getAuthenticationKey())); if ('POST' === $request->getMethod()) { $form->handleRequest($request); if ($form->isValid()) { $data = $form->getData(); // 認証キーの登録 $BaseInfo->setAuthenticationKey($data['authentication_key']); $app['orm.em']->flush($BaseInfo); $app->addSuccess('admin.plugin.authentication.setting.complete', 'admin'); } } return $app->render('Store/authentication_setting.twig', array('form' => $form->createView())); }
/** * 複数配送処理 */ public function shippingMultiple(Application $app, Request $request) { $cartService = $app['eccube.service.cart']; // カートチェック if (!$cartService->isLocked()) { // カートが存在しない、カートがロックされていない時はエラー return $app->redirect($app->url('cart')); } // カートチェック if (count($cartService->getCart()->getCartItems()) <= 0) { // カートが存在しない時はエラー return $app->redirect($app->url('cart')); } $Order = $app['eccube.service.shopping']->getOrder($app['config']['order_processing']); if (!$Order) { $app->addError('front.shopping.order.error'); return $app->redirect($app->url('shopping_error')); } // 複数配送時は商品毎でお届け先を設定する為、商品をまとめた数量を設定 $compItemQuantities = array(); foreach ($Order->getShippings() as $Shipping) { foreach ($Shipping->getShipmentItems() as $ShipmentItem) { $itemId = $ShipmentItem->getProductClass()->getId(); $quantity = $ShipmentItem->getQuantity(); if (array_key_exists($itemId, $compItemQuantities)) { $compItemQuantities[$itemId] = $compItemQuantities[$itemId] + $quantity; } else { $compItemQuantities[$itemId] = $quantity; } } } // 商品に紐づく商品情報を取得 $shipmentItems = array(); $productClassIds = array(); foreach ($Order->getShippings() as $Shipping) { foreach ($Shipping->getShipmentItems() as $ShipmentItem) { if (!in_array($ShipmentItem->getProductClass()->getId(), $productClassIds)) { $shipmentItems[] = $ShipmentItem; } $productClassIds[] = $ShipmentItem->getProductClass()->getId(); } } $form = $app->form()->getForm(); $form->add('shipping_multiple', 'collection', array('type' => 'shipping_multiple', 'data' => $shipmentItems, 'allow_add' => true, 'allow_delete' => true)); $form->handleRequest($request); $errors = array(); if ($form->isSubmitted() && $form->isValid()) { $data = $form['shipping_multiple']; // 数量が超えていないか、同一でないとエラー $itemQuantities = array(); foreach ($data as $mulitples) { /** @var \Eccube\Entity\ShipmentItem $multipleItem */ $multipleItem = $mulitples->getData(); foreach ($mulitples as $items) { foreach ($items as $item) { $quantity = $item['quantity']->getData(); $itemId = $multipleItem->getProductClass()->getId(); if (array_key_exists($itemId, $itemQuantities)) { $itemQuantities[$itemId] = $itemQuantities[$itemId] + $quantity; } else { $itemQuantities[$itemId] = $quantity; } } } } foreach ($compItemQuantities as $key => $value) { if (array_key_exists($key, $itemQuantities)) { if ($itemQuantities[$key] != $value) { $errors[] = array('message' => '数量の数が異なっています。'); // 対象がなければエラー return $app->render('Shopping/shipping_multiple.twig', array('form' => $form->createView(), 'shipmentItems' => $shipmentItems, 'compItemQuantities' => $compItemQuantities, 'errors' => $errors)); } } } // お届け先情報をdelete/insert $shippings = $Order->getShippings(); foreach ($shippings as $Shipping) { $Order->removeShipping($Shipping); $app['orm.em']->remove($Shipping); } foreach ($data as $mulitples) { /** @var \Eccube\Entity\ShipmentItem $multipleItem */ $multipleItem = $mulitples->getData(); foreach ($mulitples as $items) { foreach ($items as $item) { // 追加された配送先情報を作成 $Delivery = $multipleItem->getShipping()->getDelivery(); // 選択された情報を取得 $data = $item['customer_address']->getData(); if ($data instanceof CustomerAddress) { // 会員の場合、CustomerAddressオブジェクトを取得 $CustomerAddress = $data; } else { // 非会員の場合、選択されたindexが取得される $customerAddresses = $app['session']->get($this->sessionCustomerAddressKey); $customerAddresses = unserialize($customerAddresses); $CustomerAddress = $customerAddresses[$data]; $pref = $app['eccube.repository.master.pref']->find($CustomerAddress->getPref()->getId()); $CustomerAddress->setPref($pref); } $Shipping = new Shipping(); $Shipping->setFromCustomerAddress($CustomerAddress)->setDelivery($Delivery)->setDelFlg(Constant::DISABLED)->setOrder($Order); $app['orm.em']->persist($Shipping); $ProductClass = $multipleItem->getProductClass(); $Product = $multipleItem->getProduct(); $quantity = $item['quantity']->getData(); $ShipmentItem = new ShipmentItem(); $ShipmentItem->setShipping($Shipping)->setOrder($Order)->setProductClass($ProductClass)->setProduct($Product)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity($quantity); $ClassCategory1 = $ProductClass->getClassCategory1(); if (!is_null($ClassCategory1)) { $ShipmentItem->setClasscategoryName1($ClassCategory1->getName()); $ShipmentItem->setClassName1($ClassCategory1->getClassName()->getName()); } $ClassCategory2 = $ProductClass->getClassCategory2(); if (!is_null($ClassCategory2)) { $ShipmentItem->setClasscategoryName2($ClassCategory2->getName()); $ShipmentItem->setClassName2($ClassCategory2->getClassName()->getName()); } $Shipping->addShipmentItem($ShipmentItem); $app['orm.em']->persist($ShipmentItem); // 配送料金の設定 $app['eccube.service.shopping']->setShippingDeliveryFee($Shipping); } } } // 配送先を更新 $app['orm.em']->flush(); return $app->redirect($app->url('shopping')); } return $app->render('Shopping/shipping_multiple.twig', array('form' => $form->createView(), 'shipmentItems' => $shipmentItems, 'compItemQuantities' => $compItemQuantities, 'errors' => $errors)); }
/** * 商品規格の登録、更新、削除を行う */ public function edit(Application $app, Request $request, $id) { /** @var $Product \Eccube\Entity\Product */ $Product = $app['eccube.repository.product']->find($id); if (!$Product) { throw new NotFoundHttpException(); } $form = $app->form()->add('product_classes', 'collection', array('type' => 'admin_product_class', 'allow_add' => true, 'allow_delete' => true))->getForm(); $ProductClasses = $this->getProductClassesExcludeNonClass($Product); if ('POST' === $request->getMethod()) { $form->handleRequest($request); switch ($request->get('mode')) { case 'edit': // 新規登録 if (count($ProductClasses) > 0) { // 既に登録されていれば最初の画面に戻す return $app->redirect($app->url('admin_product_product_class', array('id' => $id))); } $addProductClasses = array(); $tmpProductClass = null; foreach ($form->get('product_classes') as $formData) { // 追加対象の行をvalidate $ProductClass = $formData->getData(); if ($ProductClass->getAdd()) { if ($formData->isValid()) { $addProductClasses[] = $ProductClass; } else { // 対象行のエラー return $this->render($app, $Product, $ProductClass, true, $form); } } $tmpProductClass = $ProductClass; } if (count($addProductClasses) == 0) { // 対象がなければエラー $error = array('message' => '商品規格が選択されていません。'); return $this->render($app, $Product, $tmpProductClass, true, $form, $error); } // 選択された商品規格を登録 $this->insertProductClass($app, $Product, $addProductClasses); // デフォルトの商品規格を更新 $defaultProductClass = $app['eccube.repository.product_class']->findOneBy(array('Product' => $Product, 'ClassCategory1' => null, 'ClassCategory2' => null)); $defaultProductClass->setDelFlg(Constant::ENABLED); $app['orm.em']->flush(); $app->addSuccess('admin.product.product_class.save.complete', 'admin'); break; case 'update': // 更新 if (count($ProductClasses) == 0) { // 商品規格が0件であれば最初の画面に戻す return $app->redirect($app->url('admin_product_product_class', array('id' => $id))); } $checkProductClasses = array(); $removeProductClasses = array(); $tempProductClass = null; foreach ($form->get('product_classes') as $formData) { // 追加対象の行をvalidate $ProductClass = $formData->getData(); if ($ProductClass->getAdd()) { if ($formData->isValid()) { $checkProductClasses[] = $ProductClass; } else { return $this->render($app, $Product, $ProductClass, false, $form); } } else { // 削除対象の行 $removeProductClasses[] = $ProductClass; } $tempProductClass = $ProductClass; } if (count($checkProductClasses) == 0) { // 対象がなければエラー $error = array('message' => '商品規格が選択されていません。'); return $this->render($app, $Product, $tempProductClass, false, $form, $error); } // 登録対象と更新対象の行か判断する $addProductClasses = array(); $updateProductClasses = array(); foreach ($checkProductClasses as $cp) { $flag = false; // 既に登録済みの商品規格か確認 foreach ($ProductClasses as $productClass) { if ($productClass->getProduct()->getId() == $id && $productClass->getClassCategory1() == $cp->getClassCategory1() && $productClass->getClassCategory2() == $cp->getClassCategory2()) { $updateProductClasses[] = $cp; // 商品情報 $cp->setProduct($Product); // 商品在庫 $productStock = $productClass->getProductStock(); if (!$cp->getStockUnlimited()) { $productStock->setStock($cp->getStock()); } else { $productStock->setStock(null); } $this->setDefualtProductClass($app, $productClass, $cp); $flag = true; break; } } if (!$flag) { $addProductClasses[] = $cp; } } foreach ($removeProductClasses as $rc) { // 登録されている商品規格に削除フラグをセット foreach ($ProductClasses as $productClass) { if ($productClass->getProduct()->getId() == $id && $productClass->getClassCategory1() == $rc->getClassCategory1() && $productClass->getClassCategory2() == $rc->getClassCategory2()) { $productClass->setDelFlg(Constant::ENABLED); break; } } } // 選択された商品規格を登録 $this->insertProductClass($app, $Product, $addProductClasses); $app['orm.em']->flush(); $app->addSuccess('admin.product.product_class.update.complete', 'admin'); break; case 'delete': // 削除 if (count($ProductClasses) == 0) { // 既に商品が削除されていれば元の画面に戻す return $app->redirect($app->url('admin_product_product_class', array('id' => $id))); } foreach ($ProductClasses as $ProductClass) { // 登録されている商品規格に削除フラグをセット $ProductClass->setDelFlg(Constant::ENABLED); } /* @var $softDeleteFilter \Eccube\Doctrine\Filter\SoftDeleteFilter */ $softDeleteFilter = $app['orm.em']->getFilters()->getFilter('soft_delete'); $softDeleteFilter->setExcludes(array('Eccube\\Entity\\ProductClass')); // デフォルトの商品規格を更新 $defaultProductClass = $app['eccube.repository.product_class']->findOneBy(array('Product' => $Product, 'ClassCategory1' => null, 'ClassCategory2' => null, 'del_flg' => Constant::ENABLED)); $defaultProductClass->setDelFlg(Constant::DISABLED); $app['orm.em']->flush(); $app->addSuccess('admin.product.product_class.delete.complete', 'admin'); break; default: break; } } return $app->redirect($app->url('admin_product_product_class', array('id' => $id))); }
/** * 新着情報一覧を表示する。 * * @param Application $app * @return \Symfony\Component\HttpFoundation\Response */ public function index(Application $app) { $NewsList = $app['eccube.repository.news']->findBy(array(), array('rank' => 'DESC')); $form = $app->form()->getForm(); return $app->render('Content/news.twig', array('form' => $form->createView(), 'NewsList' => $NewsList)); }
/** * 一覧画面 * * @param Application $app * @param Request $request * @return \Symfony\Component\HttpFoundation\Response */ public function index(Application $app, Request $request) { $form = $app->form()->getForm(); $Questions = $app['plugin.Uzaitaikai.repository.question']->findAll(); return $app->render('Uzaitaikai/Resource/template/admin/config.twig', array('form' => $form->createView(), 'Questions' => $Questions)); }