Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
9 / 9 |
CRAP | |
100.00% |
105 / 105 |
PageLayoutRepository | |
100.00% |
1 / 1 |
|
100.00% |
9 / 9 |
24 | |
100.00% |
105 / 105 |
setApplication | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
findUnusedBlocks | |
100.00% |
1 / 1 |
3 | |
100.00% |
12 / 12 |
|||
get | |
100.00% |
1 / 1 |
4 | |
100.00% |
30 / 30 |
|||
getByUrl | |
100.00% |
1 / 1 |
4 | |
100.00% |
34 / 34 |
|||
newPageLayout | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
findOrCreate | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
getPageList | |
100.00% |
1 / 1 |
3 | |
100.00% |
10 / 10 |
|||
getWriteTemplatePath | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
getReadTemplateFile | |
100.00% |
1 / 1 |
4 | |
100.00% |
8 / 8 |
<?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\Repository; | |
use Doctrine\ORM\EntityRepository; | |
use Doctrine\ORM\Query\Expr; | |
use Eccube\Entity\Master\DeviceType; | |
use Eccube\Entity\PageLayout; | |
use Symfony\Component\Filesystem\Filesystem; | |
use Symfony\Component\Finder\Finder; | |
/** | |
* PageLayoutRepository | |
* | |
* This class was generated by the Doctrine ORM. Add your own custom | |
* repository methods below. | |
*/ | |
class PageLayoutRepository extends EntityRepository | |
{ | |
protected $app; | |
public function setApplication($app) | |
{ | |
$this->app = $app; | |
} | |
public function findUnusedBlocks(DeviceType $DeviceType, $pageId) | |
{ | |
$em = $this | |
->getEntityManager(); | |
$blockRepo = $em->getRepository('Eccube\Entity\Block'); | |
$ownBlockPositions = $this->get($DeviceType, $pageId)->getBlockPositions(); | |
$ids = array(); | |
foreach ($ownBlockPositions as $ownBlockPosition) { | |
$ids[] = $ownBlockPosition->getBlock()->getId(); | |
} | |
# $idsが空配列だと、$ids以外のblockを取得するSQLが生成されないため、存在しないidを入れる | |
if (empty($ids)) { | |
$ids[] = \Eccube\Entity\Block::UNUSED_BLOCK_ID; | |
} | |
return $blockRepo->createQueryBuilder('b') | |
->where('b.id not in (:ids)') | |
->setParameter(':ids', $ids) | |
->getQuery() | |
->getResult(); | |
} | |
public function get(DeviceType $DeviceType, $pageId) | |
{ | |
$qb = $this->createQueryBuilder('p') | |
->select('p, bp, b') | |
->leftJoin('p.BlockPositions', 'bp', 'WITH', 'p.id = bp.page_id') | |
->leftJoin('bp.Block', 'b') | |
->andWhere('p.DeviceType = :DeviceType AND p.id = :pageId') | |
->addOrderBy('bp.target_id', 'ASC') | |
->addOrderBy('bp.block_row', 'ASC'); | |
$ownResult = $qb | |
->getQuery() | |
->setParameters(array( | |
'DeviceType' => $DeviceType, | |
'pageId' => $pageId, | |
)) | |
->getSingleResult(); | |
$qb = $this->createQueryBuilder('p') | |
->select('p, bp, b') | |
->leftJoin('p.BlockPositions', 'bp', 'WITH', 'p.id = bp.page_id') | |
->leftJoin('bp.Block', 'b') | |
->andWhere('p.DeviceType = :DeviceType AND bp.anywhere = 1') | |
->addOrderBy('bp.target_id', 'ASC') | |
->addOrderBy('bp.block_row', 'ASC'); | |
$anyResults = $qb | |
->getQuery() | |
->setParameters(array( | |
'DeviceType' => $DeviceType, | |
)) | |
->getResult(); | |
$OwnBlockPosition = $ownResult->getBlockPositions(); | |
foreach ($anyResults as $anyResult) { | |
$BlockPositions = $anyResult->getBlockPositions(); | |
foreach ($BlockPositions as $BlockPosition) { | |
if (!$OwnBlockPosition->contains($BlockPosition)) { | |
$ownResult->addBlockPosition($BlockPosition); | |
} | |
} | |
} | |
return $ownResult; | |
} | |
public function getByUrl(DeviceType $DeviceType, $url) | |
{ | |
$options = $this->app['config']['doctrine_cache']; | |
$lifetime = $options['result_cache']['lifetime']; | |
$qb = $this->createQueryBuilder('p') | |
->select('p, bp, b') | |
->leftJoin('p.BlockPositions', 'bp', 'WITH', 'p.id = bp.page_id') | |
->leftJoin('bp.Block', 'b') | |
->andWhere('p.DeviceType = :DeviceType AND p.url = :url') | |
->addOrderBy('bp.target_id', 'ASC') | |
->addOrderBy('bp.block_row', 'ASC'); | |
$ownResult = $qb | |
->getQuery() | |
->useResultCache(true, $lifetime) | |
->setParameters(array( | |
'DeviceType' => $DeviceType, | |
'url' => $url, | |
)) | |
->getSingleResult(); | |
$qb = $this->createQueryBuilder('p') | |
->select('p, bp, b') | |
->leftJoin('p.BlockPositions', 'bp', 'WITH', 'p.id = bp.page_id') | |
->leftJoin('bp.Block', 'b') | |
->andWhere('p.DeviceType = :DeviceType AND bp.anywhere = 1') | |
->addOrderBy('bp.target_id', 'ASC') | |
->addOrderBy('bp.block_row', 'ASC'); | |
$anyResults = $qb | |
->getQuery() | |
->useResultCache(true, $lifetime) | |
->setParameters(array( | |
'DeviceType' => $DeviceType, | |
)) | |
->getResult(); | |
$OwnBlockPosition = $ownResult->getBlockPositions(); | |
foreach ($anyResults as $anyResult) { | |
$BlockPositions = $anyResult->getBlockPositions(); | |
foreach ($BlockPositions as $BlockPosition) { | |
if (!$OwnBlockPosition->contains($BlockPosition)) { | |
$ownResult->addBlockPosition($BlockPosition); | |
} | |
} | |
} | |
return $ownResult; | |
} | |
public function newPageLayout(DeviceType $DeviceType) | |
{ | |
$PageLayout = new \Eccube\Entity\PageLayout(); | |
$PageLayout | |
->setDeviceType($DeviceType) | |
->setEditFlg(PageLayout::EDIT_FLG_USER); | |
return $PageLayout; | |
} | |
public function findOrCreate($page_id, DeviceType $DeviceType) | |
{ | |
if (is_null($page_id)) { | |
$PageLayout = $this | |
->newPageLayout($DeviceType); | |
return $PageLayout; | |
} else { | |
return $this->get($DeviceType, $page_id); | |
} | |
} | |
/** | |
* ページの属性を取得する. | |
* | |
* この関数は, dtb_pagelayout の情報を検索する. | |
* $deviceTypeId は必須. デフォルト値は DEVICE_TYPE_PC. | |
* | |
* @access public | |
* @param \Eccube\Entity\Master\DeviceType $DeviceType 端末種別ID | |
* @param string $where 追加の検索条件 | |
* @param string[] $parameters 追加の検索パラメーター | |
* @return array ページ属性の配列 | |
*/ | |
public function getPageList(DeviceType $DeviceType, $where = null, $parameters = array()) | |
{ | |
$qb = $this->createQueryBuilder('l') | |
->orderBy('l.id', 'DESC') | |
->where('l.DeviceType = :DeviceType') | |
->setParameter('DeviceType', $DeviceType) | |
->andWhere('l.id <> 0') | |
->orderBy('l.id', 'ASC'); | |
if (!is_null($where)) { | |
$qb->andWhere($where); | |
foreach ($parameters as $key => $val) { | |
$qb->setParameter($key, $val); | |
} | |
} | |
$PageLayouts = $qb | |
->getQuery() | |
->getResult(); | |
return $PageLayouts; | |
} | |
/** | |
* 書き込みパスの取得 | |
* User定義の場合: /html/user_data | |
* そうでない場合: /app/template/{template_code} | |
* | |
* @param boolean $isUser | |
* @return string | |
*/ | |
public function getWriteTemplatePath($isUser = false) | |
{ | |
return ($isUser) ? $this->app['config']['user_data_realdir'] : $this->app['config']['template_realdir']; | |
} | |
/** | |
* 読み込みファイルの取得 | |
* | |
* 1. template_realdir | |
* app/template/{template_code} | |
* 2. template_default_readldir | |
* src/Eccube/Resource/template/default | |
* | |
* @param string $fileName | |
* @param boolean $isUser | |
* | |
* @return array | |
*/ | |
public function getReadTemplateFile($fileName, $isUser = false) | |
{ | |
if ($isUser) { | |
$readPaths = array( | |
$this->app['config']['user_data_realdir'], | |
); | |
} else { | |
$readPaths = array( | |
$this->app['config']['template_realdir'], | |
$this->app['config']['template_default_realdir'], | |
); | |
} | |
foreach ($readPaths as $readPath) { | |
$filePath = $readPath . '/' . $fileName . '.twig'; | |
$fs = new Filesystem(); | |
if ($fs->exists($filePath)) { | |
return array( | |
'file_name' => $fileName, | |
'tpl_data' => file_get_contents($filePath), | |
); | |
} | |
} | |
} | |
} |