Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Page.php
Go to the documentation of this file.
1 <?php
7 
18 
25 class Page extends AbstractDb
26 {
31  protected $metadataPool;
32 
37  protected $entityManager;
38 
42  private $getUtilityPageIdentifiers;
43 
51  public function __construct(
52  Context $context,
55  $connectionName = null,
56  GetUtilityPageIdentifiersInterface $getUtilityPageIdentifiers = null
57  ) {
58  $this->metadataPool = $metadataPool;
59  $this->entityManager = $entityManager;
60  $this->getUtilityPageIdentifiers = $getUtilityPageIdentifiers ?:
61  ObjectManager::getInstance()->get(GetUtilityPageIdentifiersInterface::class);
62  parent::__construct($context, $connectionName);
63  }
64 
70  protected function _construct()
71  {
72  $this->_init('cms_page', 'page_id');
73  }
74 
79  public function getConnection()
80  {
81  return $this->metadataPool->getMetadata(PageInterface::class)->getEntityConnection();
82  }
83 
90  public function getCollection($storeId)
91  {
92  $entityMetadata = $this->metadataPool->getMetadata(PageInterface::class);
93  $linkField = $entityMetadata->getLinkField();
94 
95  $select = $this->getConnection()->select()->from(
96  ['main_table' => $this->getMainTable()],
97  [$this->getIdFieldName(), 'url' => 'identifier', 'updated_at' => 'update_time']
98  )->join(
99  ['store_table' => $this->getTable('cms_page_store')],
100  "main_table.{$linkField} = store_table.$linkField",
101  []
102  )->where(
103  'main_table.is_active = 1'
104  )->where(
105  'main_table.identifier NOT IN (?)',
106  $this->getUtilityPageIdentifiers->execute()
107  )->where(
108  'store_table.store_id IN(?)',
109  [0, $storeId]
110  );
111 
112  $pages = [];
113  $query = $this->getConnection()->query($select);
114  while ($row = $query->fetch()) {
115  $page = $this->_prepareObject($row);
116  $pages[$page->getId()] = $page;
117  }
118 
119  return $pages;
120  }
121 
128  protected function _prepareObject(array $data)
129  {
130  $object = new \Magento\Framework\DataObject();
131  $object->setId($data[$this->getIdFieldName()]);
132  $object->setUrl($data['url']);
133  $object->setUpdatedAt($data['updated_at']);
134 
135  return $object;
136  }
137 
147  public function load(AbstractModel $object, $value, $field = null)
148  {
149  $entityMetadata = $this->metadataPool->getMetadata(PageInterface::class);
150 
151  if (!is_numeric($value) && $field === null) {
152  $field = 'identifier';
153  } elseif (!$field) {
154  $field = $entityMetadata->getIdentifierField();
155  }
156 
157  $isId = true;
158  if ($field != $entityMetadata->getIdentifierField() || $object->getStoreId()) {
159  $select = $this->_getLoadSelect($field, $value, $object);
160  $select->reset(Select::COLUMNS)
161  ->columns($this->getMainTable() . '.' . $entityMetadata->getIdentifierField())
162  ->limit(1);
163  $result = $this->getConnection()->fetchCol($select);
164  $value = count($result) ? $result[0] : $value;
165  $isId = count($result);
166  }
167 
168  if ($isId) {
169  $this->entityManager->load($object, $value);
170  }
171  return $this;
172  }
173 
178  public function save(AbstractModel $object)
179  {
180  if ($object->isDeleted()) {
181  return $this->delete($object);
182  }
183 
184  $this->beginTransaction();
185 
186  try {
187  if (!$this->isModified($object)) {
188  $this->processNotModifiedSave($object);
189  $this->commit();
190  $object->setHasDataChanges(false);
191  return $this;
192  }
193  $object->validateBeforeSave();
194  $object->beforeSave();
195  if ($object->isSaveAllowed()) {
196  $this->_serializeFields($object);
197  $this->_beforeSave($object);
198  $this->_checkUnique($object);
199  $this->objectRelationProcessor->validateDataIntegrity($this->getMainTable(), $object->getData());
200  $this->entityManager->save($object);
201  $this->unserializeFields($object);
202  $this->processAfterSaves($object);
203  }
204  $this->addCommitCallback([$object, 'afterCommitCallback'])->commit();
205  $object->setHasDataChanges(false);
206  } catch (\Exception $e) {
207  $this->rollBack();
208  $object->setHasDataChanges(true);
209  throw $e;
210  }
211  return $this;
212  }
213 
218  public function delete(AbstractModel $object)
219  {
220  $this->entityManager->delete($object);
221  return $this;
222  }
223 }
processAfterSaves(\Magento\Framework\Model\AbstractModel $object)
Definition: AbstractDb.php:830
load(AbstractModel $object, $value, $field=null)
Definition: Page.php:147
getData($key='', $index=null)
Definition: DataObject.php:119
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
unserializeFields(\Magento\Framework\Model\AbstractModel $object)
Definition: AbstractDb.php:502
$value
Definition: gender.phtml:16
$page
Definition: pages.php:8
__construct(Context $context, MetadataPool $metadataPool, EntityManager $entityManager, $connectionName=null, GetUtilityPageIdentifiersInterface $getUtilityPageIdentifiers=null)
Definition: Page.php:51
const COLUMNS
Definition: Select.php:48
_beforeSave(\Magento\Framework\Model\AbstractModel $object)
Definition: AbstractDb.php:653
isModified(\Magento\Framework\Model\AbstractModel $object)
Definition: AbstractDb.php:842
processNotModifiedSave(\Magento\Framework\Model\AbstractModel $object)
Definition: AbstractDb.php:854
_checkUnique(\Magento\Framework\Model\AbstractModel $object)
Definition: AbstractDb.php:589
_serializeFields(\Magento\Framework\Model\AbstractModel $object)
Definition: AbstractDb.php:701