Overview

Packages

  • currencysymbol
  • MAbout
  • Mage
    • Admin
    • Adminhtml
    • AdminNotification
    • Api
    • Api2
    • Authorizenet
    • Backup
    • Bundle
    • Captcha
    • Catalog
    • CatalogIndex
    • CatalogInventory
    • CatalogRule
    • CatalogSearch
    • Centinel
    • Checkout
    • Cms
    • Compiler
    • Connect
    • Contacts
    • Core
    • Cron
    • CurrencySymbol
    • Customer
    • Dataflow
    • Directory
    • DirtectPost
    • Downloadable
    • Eav
    • GiftMessage
    • GoogleAnalytics
    • GoogleBase
    • GoogleCheckout
    • ImportExport
    • Index
    • Install
    • Log
    • Media
    • Newsletter
    • Oauth
    • Page
    • PageCache
    • Paygate
    • Payment
    • Paypal
    • PaypalUk
    • Persistent
    • Poll
    • ProductAlert
    • Rating
    • Reports
    • Review
    • Rss
    • Rule
    • Sales
    • SalesRule
    • Sedfriend
    • Sendfriend
    • Shipping
    • Sitemap
    • Tag
    • Tax
    • Usa
    • Weee
    • Widget
    • Wishlist
    • XmlConnect
  • None
  • Phoenix
    • Moneybookers
  • PHP
  • Zend
    • Date
    • Mime
    • XmlRpc

Classes

  • Mage_Adminhtml_Cms_PageController
  • Mage_Adminhtml_Model_System_Config_Source_Cms_Wysiwyg_Enabled
  • Mage_Cms_Block_Block
  • Mage_Cms_Block_Page
  • Mage_Cms_Block_Widget_Block
  • Mage_Cms_Block_Widget_Page_Link
  • Mage_Cms_Controller_Router
  • Mage_Cms_Helper_Data
  • Mage_Cms_Helper_Page
  • Mage_Cms_Helper_Wysiwyg_Images
  • Mage_Cms_IndexController
  • Mage_Cms_Model_Block
  • Mage_Cms_Model_Mysql4_Block
  • Mage_Cms_Model_Mysql4_Block_Collection
  • Mage_Cms_Model_Mysql4_Page
  • Mage_Cms_Model_Mysql4_Page_Collection
  • Mage_Cms_Model_Mysql4_Page_Service
  • Mage_Cms_Model_Observer
  • Mage_Cms_Model_Page
  • Mage_Cms_Model_Resource_Block
  • Mage_Cms_Model_Resource_Block_Collection
  • Mage_Cms_Model_Resource_Page
  • Mage_Cms_Model_Resource_Page_Collection
  • Mage_Cms_Model_Resource_Page_Service
  • Mage_Cms_Model_Template_Filter
  • Mage_Cms_Model_Wysiwyg_Config
  • Mage_Cms_Model_Wysiwyg_Images_Storage
  • Mage_Cms_Model_Wysiwyg_Images_Storage_Collection
  • Mage_Cms_PageController
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Magento
  4:  *
  5:  * NOTICE OF LICENSE
  6:  *
  7:  * This source file is subject to the Open Software License (OSL 3.0)
  8:  * that is bundled with this package in the file LICENSE.txt.
  9:  * It is also available through the world-wide-web at this URL:
 10:  * http://opensource.org/licenses/osl-3.0.php
 11:  * If you did not receive a copy of the license and are unable to
 12:  * obtain it through the world-wide-web, please send an email
 13:  * to license@magentocommerce.com so we can send you a copy immediately.
 14:  *
 15:  * DISCLAIMER
 16:  *
 17:  * Do not edit or add to this file if you wish to upgrade Magento to newer
 18:  * versions in the future. If you wish to customize Magento for your
 19:  * needs please refer to http://www.magentocommerce.com for more information.
 20:  *
 21:  * @category    Mage
 22:  * @package     Mage_Cms
 23:  * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
 24:  * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 25:  */
 26: 
 27: 
 28: /**
 29:  * Cms page mysql resource
 30:  *
 31:  * @category    Mage
 32:  * @package     Mage_Cms
 33:  * @author      Magento Core Team <core@magentocommerce.com>
 34:  */
 35: class Mage_Cms_Model_Resource_Page extends Mage_Core_Model_Resource_Db_Abstract
 36: {
 37:     /**
 38:      * Store model
 39:      *
 40:      * @var null|Mage_Core_Model_Store
 41:      */
 42:     protected $_store  = null;
 43: 
 44:     /**
 45:      * Initialize resource model
 46:      *
 47:      */
 48:     protected function _construct()
 49:     {
 50:         $this->_init('cms/page', 'page_id');
 51:     }
 52: 
 53:     /**
 54:      * Process page data before deleting
 55:      *
 56:      * @param Mage_Core_Model_Abstract $object
 57:      * @return Mage_Cms_Model_Resource_Page
 58:      */
 59:     protected function _beforeDelete(Mage_Core_Model_Abstract $object)
 60:     {
 61:         $condition = array(
 62:             'page_id = ?'     => (int) $object->getId(),
 63:         );
 64: 
 65:         $this->_getWriteAdapter()->delete($this->getTable('cms/page_store'), $condition);
 66: 
 67:         return parent::_beforeDelete($object);
 68:     }
 69: 
 70:     /**
 71:      * Process page data before saving
 72:      *
 73:      * @param Mage_Core_Model_Abstract $object
 74:      * @return Mage_Cms_Model_Resource_Page
 75:      */
 76:     protected function _beforeSave(Mage_Core_Model_Abstract $object)
 77:     {
 78:         /*
 79:          * For two attributes which represent timestamp data in DB
 80:          * we should make converting such as:
 81:          * If they are empty we need to convert them into DB
 82:          * type NULL so in DB they will be empty and not some default value
 83:          */
 84:         foreach (array('custom_theme_from', 'custom_theme_to') as $field) {
 85:             $value = !$object->getData($field) ? null : $object->getData($field);
 86:             $object->setData($field, $this->formatDate($value));
 87:         }
 88: 
 89:         if (!$this->getIsUniquePageToStores($object)) {
 90:             Mage::throwException(Mage::helper('cms')->__('A page URL key for specified store already exists.'));
 91:         }
 92: 
 93:         if (!$this->isValidPageIdentifier($object)) {
 94:             Mage::throwException(Mage::helper('cms')->__('The page URL key contains capital letters or disallowed symbols.'));
 95:         }
 96: 
 97:         if ($this->isNumericPageIdentifier($object)) {
 98:             Mage::throwException(Mage::helper('cms')->__('The page URL key cannot consist only of numbers.'));
 99:         }
100: 
101:         // modify create / update dates
102:         if ($object->isObjectNew() && !$object->hasCreationTime()) {
103:             $object->setCreationTime(Mage::getSingleton('core/date')->gmtDate());
104:         }
105: 
106:         $object->setUpdateTime(Mage::getSingleton('core/date')->gmtDate());
107: 
108:         return parent::_beforeSave($object);
109:     }
110: 
111:     /**
112:      * Assign page to store views
113:      *
114:      * @param Mage_Core_Model_Abstract $object
115:      * @return Mage_Cms_Model_Resource_Page
116:      */
117:     protected function _afterSave(Mage_Core_Model_Abstract $object)
118:     {
119:         $oldStores = $this->lookupStoreIds($object->getId());
120:         $newStores = (array)$object->getStores();
121:         if (empty($newStores)) {
122:             $newStores = (array)$object->getStoreId();
123:         }
124:         $table  = $this->getTable('cms/page_store');
125:         $insert = array_diff($newStores, $oldStores);
126:         $delete = array_diff($oldStores, $newStores);
127: 
128:         if ($delete) {
129:             $where = array(
130:                 'page_id = ?'     => (int) $object->getId(),
131:                 'store_id IN (?)' => $delete
132:             );
133: 
134:             $this->_getWriteAdapter()->delete($table, $where);
135:         }
136: 
137:         if ($insert) {
138:             $data = array();
139: 
140:             foreach ($insert as $storeId) {
141:                 $data[] = array(
142:                     'page_id'  => (int) $object->getId(),
143:                     'store_id' => (int) $storeId
144:                 );
145:             }
146: 
147:             $this->_getWriteAdapter()->insertMultiple($table, $data);
148:         }
149: 
150:         return parent::_afterSave($object);
151:     }
152: 
153:     /**
154:      * Load an object using 'identifier' field if there's no field specified and value is not numeric
155:      *
156:      * @param Mage_Core_Model_Abstract $object
157:      * @param mixed $value
158:      * @param string $field
159:      * @return Mage_Cms_Model_Resource_Page
160:      */
161:     public function load(Mage_Core_Model_Abstract $object, $value, $field = null)
162:     {
163:         if (!is_numeric($value) && is_null($field)) {
164:             $field = 'identifier';
165:         }
166: 
167:         return parent::load($object, $value, $field);
168:     }
169: 
170:     /**
171:      * Perform operations after object load
172:      *
173:      * @param Mage_Core_Model_Abstract $object
174:      * @return Mage_Cms_Model_Resource_Page
175:      */
176:     protected function _afterLoad(Mage_Core_Model_Abstract $object)
177:     {
178:         if ($object->getId()) {
179:             $stores = $this->lookupStoreIds($object->getId());
180: 
181:             $object->setData('store_id', $stores);
182: 
183:         }
184: 
185:         return parent::_afterLoad($object);
186:     }
187: 
188:     /**
189:      * Retrieve select object for load object data
190:      *
191:      * @param string $field
192:      * @param mixed $value
193:      * @param Mage_Cms_Model_Page $object
194:      * @return Zend_Db_Select
195:      */
196:     protected function _getLoadSelect($field, $value, $object)
197:     {
198:         $select = parent::_getLoadSelect($field, $value, $object);
199: 
200:         if ($object->getStoreId()) {
201:             $storeIds = array(Mage_Core_Model_App::ADMIN_STORE_ID, (int)$object->getStoreId());
202:             $select->join(
203:                 array('cms_page_store' => $this->getTable('cms/page_store')),
204:                 $this->getMainTable() . '.page_id = cms_page_store.page_id',
205:                 array())
206:                 ->where('is_active = ?', 1)
207:                 ->where('cms_page_store.store_id IN (?)', $storeIds)
208:                 ->order('cms_page_store.store_id DESC')
209:                 ->limit(1);
210:         }
211: 
212:         return $select;
213:     }
214: 
215:     /**
216:      * Retrieve load select with filter by identifier, store and activity
217:      *
218:      * @param string $identifier
219:      * @param int|array $store
220:      * @param int $isActive
221:      * @return Varien_Db_Select
222:      */
223:     protected function _getLoadByIdentifierSelect($identifier, $store, $isActive = null)
224:     {
225:         $select = $this->_getReadAdapter()->select()
226:             ->from(array('cp' => $this->getMainTable()))
227:             ->join(
228:                 array('cps' => $this->getTable('cms/page_store')),
229:                 'cp.page_id = cps.page_id',
230:                 array())
231:             ->where('cp.identifier = ?', $identifier)
232:             ->where('cps.store_id IN (?)', $store);
233: 
234:         if (!is_null($isActive)) {
235:             $select->where('cp.is_active = ?', $isActive);
236:         }
237: 
238:         return $select;
239:     }
240: 
241:     /**
242:      * Check for unique of identifier of page to selected store(s).
243:      *
244:      * @param Mage_Core_Model_Abstract $object
245:      * @return bool
246:      */
247:     public function getIsUniquePageToStores(Mage_Core_Model_Abstract $object)
248:     {
249:         if (Mage::app()->isSingleStoreMode() || !$object->hasStores()) {
250:             $stores = array(Mage_Core_Model_App::ADMIN_STORE_ID);
251:         } else {
252:             $stores = (array)$object->getData('stores');
253:         }
254: 
255:         $select = $this->_getLoadByIdentifierSelect($object->getData('identifier'), $stores);
256: 
257:         if ($object->getId()) {
258:             $select->where('cps.page_id <> ?', $object->getId());
259:         }
260: 
261:         if ($this->_getWriteAdapter()->fetchRow($select)) {
262:             return false;
263:         }
264: 
265:         return true;
266:     }
267: 
268:     /**
269:      *  Check whether page identifier is numeric
270:      *
271:      * @date Wed Mar 26 18:12:28 EET 2008
272:      *
273:      * @param Mage_Core_Model_Abstract $object
274:      * @return bool
275:      */
276:     protected function isNumericPageIdentifier(Mage_Core_Model_Abstract $object)
277:     {
278:         return preg_match('/^[0-9]+$/', $object->getData('identifier'));
279:     }
280: 
281:     /**
282:      *  Check whether page identifier is valid
283:      *
284:      *  @param    Mage_Core_Model_Abstract $object
285:      *  @return   bool
286:      */
287:     protected function isValidPageIdentifier(Mage_Core_Model_Abstract $object)
288:     {
289:         return preg_match('/^[a-z0-9][a-z0-9_\/-]+(\.[a-z0-9_-]+)?$/', $object->getData('identifier'));
290:     }
291: 
292: 
293: 
294:     /**
295:      * Check if page identifier exist for specific store
296:      * return page id if page exists
297:      *
298:      * @param string $identifier
299:      * @param int $storeId
300:      * @return int
301:      */
302:     public function checkIdentifier($identifier, $storeId)
303:     {
304:         $stores = array(Mage_Core_Model_App::ADMIN_STORE_ID, $storeId);
305:         $select = $this->_getLoadByIdentifierSelect($identifier, $stores, 1);
306:         $select->reset(Zend_Db_Select::COLUMNS)
307:             ->columns('cp.page_id')
308:             ->order('cps.store_id DESC')
309:             ->limit(1);
310: 
311:         return $this->_getReadAdapter()->fetchOne($select);
312:     }
313: 
314:     /**
315:      * Retrieves cms page title from DB by passed identifier.
316:      *
317:      * @param string $identifier
318:      * @return string|false
319:      */
320:     public function getCmsPageTitleByIdentifier($identifier)
321:     {
322:         $stores = array(Mage_Core_Model_App::ADMIN_STORE_ID);
323:         if ($this->_store) {
324:             $stores[] = (int)$this->getStore()->getId();
325:         }
326: 
327:         $select = $this->_getLoadByIdentifierSelect($identifier, $stores);
328:         $select->reset(Zend_Db_Select::COLUMNS)
329:             ->columns('cp.title')
330:             ->order('cps.store_id DESC')
331:             ->limit(1);
332: 
333:         return $this->_getReadAdapter()->fetchOne($select);
334:     }
335: 
336:     /**
337:      * Retrieves cms page title from DB by passed id.
338:      *
339:      * @param string $id
340:      * @return string|false
341:      */
342:     public function getCmsPageTitleById($id)
343:     {
344:         $adapter = $this->_getReadAdapter();
345: 
346:         $select  = $adapter->select()
347:             ->from($this->getMainTable(), 'title')
348:             ->where('page_id = :page_id');
349: 
350:         $binds = array(
351:             'page_id' => (int) $id
352:         );
353: 
354:         return $adapter->fetchOne($select, $binds);
355:     }
356: 
357:     /**
358:      * Retrieves cms page identifier from DB by passed id.
359:      *
360:      * @param string $id
361:      * @return string|false
362:      */
363:     public function getCmsPageIdentifierById($id)
364:     {
365:         $adapter = $this->_getReadAdapter();
366: 
367:         $select  = $adapter->select()
368:             ->from($this->getMainTable(), 'identifier')
369:             ->where('page_id = :page_id');
370: 
371:         $binds = array(
372:             'page_id' => (int) $id
373:         );
374: 
375:         return $adapter->fetchOne($select, $binds);
376:     }
377: 
378:     /**
379:      * Get store ids to which specified item is assigned
380:      *
381:      * @param int $id
382:      * @return array
383:      */
384:     public function lookupStoreIds($pageId)
385:     {
386:         $adapter = $this->_getReadAdapter();
387: 
388:         $select  = $adapter->select()
389:             ->from($this->getTable('cms/page_store'), 'store_id')
390:             ->where('page_id = ?',(int)$pageId);
391: 
392:         return $adapter->fetchCol($select);
393:     }
394: 
395:     /**
396:      * Set store model
397:      *
398:      * @param Mage_Core_Model_Store $store
399:      * @return Mage_Cms_Model_Resource_Page
400:      */
401:     public function setStore($store)
402:     {
403:         $this->_store = $store;
404:         return $this;
405:     }
406: 
407:     /**
408:      * Retrieve store model
409:      *
410:      * @return Mage_Core_Model_Store
411:      */
412:     public function getStore()
413:     {
414:         return Mage::app()->getStore($this->_store);
415:     }
416: }
417: 
Magento 1.7.0.2 API documentation generated by ApiGen 2.8.0