Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
50.00% |
1 / 2 |
CRAP | |
86.11% |
93 / 108 |
LayoutController | |
0.00% |
0 / 1 |
|
50.00% |
1 / 2 |
23.30 | |
86.11% |
93 / 108 |
index | |
0.00% |
0 / 1 |
22.25 | |
85.85% |
91 / 106 |
|||
preview | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
<?php | |
/* | |
* This file is part of EC-CUBE | |
* | |
* Copyright(c) 2000-2015 LOCKON CO.,LTD. All Rights Reserved. | |
* | |
* http://www.lockon.co.jp/ | |
* | |
* This program is free software; you can redistribute it and/or | |
* modify it under the terms of the GNU General Public License | |
* as published by the Free Software Foundation; either version 2 | |
* of the License, or (at your option) any later version. | |
* | |
* This program is distributed in the hope that it will be useful, | |
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
* GNU General Public License for more details. | |
* | |
* You should have received a copy of the GNU General Public License | |
* along with this program; if not, write to the Free Software | |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
*/ | |
namespace Eccube\Controller\Admin\Content; | |
use Eccube\Application; | |
use Eccube\Event\EccubeEvents; | |
use Eccube\Event\EventArgs; | |
use Symfony\Component\HttpFoundation\Request; | |
class LayoutController | |
{ | |
private $isPreview = false; | |
public function index(Application $app, Request $request, $id = 1, $origId = 1) | |
{ | |
$DeviceType = $app['eccube.repository.master.device_type'] | |
->find(\Eccube\Entity\Master\DeviceType::DEVICE_TYPE_PC); | |
// 編集対象ページ | |
/* @var $TargetPageLayout \Eccube\Entity\PageLayout */ | |
$TargetPageLayout = $app['eccube.repository.page_layout']->get($DeviceType, $id); | |
$OrigTargetPageLayout = $app['eccube.repository.page_layout']->get($DeviceType, $origId); | |
$Blocks = $app['orm.em']->getRepository('Eccube\Entity\Block') | |
->findBy(array( | |
'DeviceType' => $DeviceType, | |
)); | |
$BlockPositions = $TargetPageLayout->getBlockPositions(); | |
$builderLayout = $app['form.factory'] | |
->createBuilder('admin_page_layout'); | |
// 未使用ブロックの取得 | |
$unusedBlocks = $app['eccube.repository.page_layout']->findUnusedBlocks($DeviceType, $id); | |
foreach ($unusedBlocks as $unusedBlock) { | |
$UnusedBlockPosition = new \Eccube\Entity\BlockPosition(); | |
$UnusedBlockPosition | |
->setPageId($id) | |
->setTargetId(\Eccube\Entity\PageLayout::TARGET_ID_UNUSED) | |
->setAnywhere(0) | |
->setBlockRow(0) | |
->setBlockId($unusedBlock->getId()) | |
->setBlock($unusedBlock) | |
->setPageLayout($TargetPageLayout); | |
$TargetPageLayout->addBlockPosition($UnusedBlockPosition); | |
} | |
$builder = $app['form.factory'] | |
->createBuilder(); | |
$event = new EventArgs( | |
array( | |
'builder' => $builder, | |
'builderLayout' => $builderLayout, | |
'DeviceType' => $DeviceType, | |
'TargetPageLayout' => $TargetPageLayout, | |
'OrigTargetPageLayout' => $OrigTargetPageLayout, | |
'Blocks' => $Blocks, | |
'BlockPositions' => $BlockPositions, | |
), | |
$request | |
); | |
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_CONTENT_LAYOUT_INDEX_INITIALIZE, $event); | |
$listForm = $builderLayout->getForm(); | |
$listForm->get('layout')->setData($TargetPageLayout); | |
$form = $builder->getForm(); | |
if ('POST' === $request->getMethod()) { | |
$form->handleRequest($request); | |
if ($form->isValid()) { | |
// 消す | |
foreach ($BlockPositions as $BlockPosition) { | |
if ($BlockPosition->getPageId() == $id || $BlockPosition->getAnywhere() == 0) { | |
$TargetPageLayout->removeBlockPosition($BlockPosition); | |
$app['orm.em']->remove($BlockPosition); | |
} | |
} | |
$app['orm.em']->flush(); | |
// TODO: collection を利用 | |
$data = $request->request->all(); | |
$max = count($Blocks); | |
for ($i = 0; $i < $max; $i++) { | |
// block_id が取得できない場合は INSERT しない | |
if (!isset($data['id_' . $i])) { | |
continue; | |
} | |
// 未使用は INSERT しない | |
if ($data['target_id_' . $i] == \Eccube\Entity\PageLayout::TARGET_ID_UNUSED) { | |
continue; | |
} | |
// 他のページに anywhere が存在する場合は INSERT しない | |
$anywhere = (isset($data['anywhere_' . $i]) && $data['anywhere_' . $i] == 1) ? 1 : 0; | |
if (isset($data['anywhere_' . $i]) && $data['anywhere_' . $i] == 1) { | |
$Other = $app['orm.em']->getRepository('Eccube\Entity\BlockPosition') | |
->findBy(array( | |
'anywhere' => 1, | |
'block_id' => $data['id_' . $i], | |
)); | |
if (count($Other) > 0) { | |
continue; | |
} | |
} | |
$BlockPosition = new \Eccube\Entity\BlockPosition(); | |
$Block = $app['orm.em']->getRepository('Eccube\Entity\Block') | |
->findOneBy(array( | |
'id' => $data['id_' . $i], | |
'DeviceType' => $DeviceType, | |
)); | |
$BlockPosition | |
->setPageId($id) | |
->setBlockId($data['id_' . $i]) | |
->setBlockRow($data['top_' . $i]) | |
->setTargetId($data['target_id_' . $i]) | |
->setBlock($Block) | |
->setPageLayout($TargetPageLayout) | |
->setAnywhere($anywhere); | |
if ($id == 0) { | |
$BlockPosition->setAnywhere(0); | |
} | |
$TargetPageLayout->addBlockPosition($BlockPosition); | |
$app['orm.em']->persist($BlockPosition); | |
} | |
$app['orm.em']->persist($TargetPageLayout); | |
$app['orm.em']->flush(); | |
$event = new EventArgs( | |
array( | |
'form' => $form, | |
'DeviceType' => $DeviceType, | |
'TargetPageLayout' => $TargetPageLayout, | |
'OrigTargetPageLayout' => $OrigTargetPageLayout, | |
'Blocks' => $Blocks, | |
'BlockPositions' => $BlockPositions, | |
), | |
$request | |
); | |
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_CONTENT_LAYOUT_INDEX_COMPLETE, $event); | |
if ($this->isPreview) { | |
if ($OrigTargetPageLayout->getEditFlg()) { | |
if ($OrigTargetPageLayout->getUrl() === 'product_detail') { | |
$products = $app['eccube.repository.product']->createQueryBUilder('p') | |
->where('p.Status = 1') | |
->getQuery() | |
->getResult(); | |
$product = null; | |
foreach ($products as $p) { | |
$product = $p; | |
break; | |
} | |
if (is_null($product)) { | |
return ''; | |
} | |
return $app->redirect($app->url($OrigTargetPageLayout->getUrl(), array('preview' => 1, 'id' => $product->getId()))); | |
} else { | |
return $app->redirect($app->url($OrigTargetPageLayout->getUrl(), array('preview' => 1))); | |
} | |
} else { | |
return $app->redirect($app->url('homepage').$app['config']['user_data_route']."/".$OrigTargetPageLayout->getUrl().'?preview=1'); | |
} | |
} else { | |
$app->addSuccess('admin.register.complete', 'admin'); | |
return $app->redirect($app->url('admin_content_layout_edit', array('id' => $id))); | |
} | |
} | |
} | |
return $app->render('Content/layout.twig', array( | |
'form' => $form->createView(), | |
'list_form' => $listForm->createView(), | |
'TargetPageLayout' => $TargetPageLayout, | |
)); | |
} | |
public function preview(Application $app, Request $request, $id) | |
{ | |
$this->isPreview = true; | |
return $this->index($app, $request, 0, $id); | |
} | |
} |