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_Widget_Adminhtml_Widget_InstanceController
  • Mage_Widget_Adminhtml_WidgetController
  • Mage_Widget_Block_Adminhtml_Widget_Form
  • Mage_Widget_Block_Adminhtml_Widget_Instance
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Edit
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Edit_Chooser_Block
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Edit_Chooser_Layout
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Edit_Chooser_Template
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Edit_Form
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Edit_Tab_Main
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Edit_Tab_Main_Layout
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Edit_Tab_Properties
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Edit_Tab_Settings
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Edit_Tabs
  • Mage_Widget_Block_Adminhtml_Widget_Instance_Grid
  • Mage_Widget_Block_Adminhtml_Widget_Options
  • Mage_Widget_Helper_Data
  • Mage_Widget_Model_Mysql4_Widget
  • Mage_Widget_Model_Mysql4_Widget_Instance
  • Mage_Widget_Model_Mysql4_Widget_Instance_Collection
  • Mage_Widget_Model_Observer
  • Mage_Widget_Model_Resource_Widget
  • Mage_Widget_Model_Resource_Widget_Instance
  • Mage_Widget_Model_Resource_Widget_Instance_Collection
  • Mage_Widget_Model_Template_Filter
  • Mage_Widget_Model_Widget
  • Mage_Widget_Model_Widget_Config
  • Mage_Widget_Model_Widget_Instance

Interfaces

  • Mage_Widget_Block_Interface
  • 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_Widget
 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:  * Widget Instance Resource Model
 30:  *
 31:  * @category    Mage
 32:  * @package     Mage_Widget
 33:  * @author      Magento Core Team <core@magentocommerce.com>
 34:  */
 35: class Mage_Widget_Model_Resource_Widget_Instance extends Mage_Core_Model_Resource_Db_Abstract
 36: {
 37:     /**
 38:      * Define main table
 39:      *
 40:      */
 41:     protected function _construct()
 42:     {
 43:         $this->_init('widget/widget_instance', 'instance_id');
 44:     }
 45: 
 46:     /**
 47:      * Perform actions after object load
 48:      *
 49:      * @param Mage_Widget_Model_Widget_Instance $object
 50:      * @return Mage_Widget_Model_Resource_Widget_Instance
 51:      */
 52:     protected function _afterLoad(Mage_Core_Model_Abstract $object)
 53:     {
 54:         $adapter = $this->_getReadAdapter();
 55:         $select = $adapter->select()
 56:             ->from($this->getTable('widget/widget_instance_page'))
 57:             ->where('instance_id = ?', (int)$object->getId());
 58:         $result = $adapter->fetchAll($select);
 59:         $object->setData('page_groups', $result);
 60:         return parent::_afterLoad($object);
 61:     }
 62: 
 63:     /**
 64:      * Perform actions after object save
 65:      *
 66:      * @param Mage_Widget_Model_Widget_Instance $object
 67:      * @return Mage_Widget_Model_Resource_Widget_Instance
 68:      */
 69:     protected function _afterSave(Mage_Core_Model_Abstract $object)
 70:     {
 71:         $pageTable         = $this->getTable('widget/widget_instance_page');
 72:         $pageLayoutTable   = $this->getTable('widget/widget_instance_page_layout');
 73:         $readAdapter       = $this->_getReadAdapter();
 74:         $writeAdapter      = $this->_getWriteAdapter();
 75: 
 76:         $select = $readAdapter->select()
 77:             ->from($pageTable, 'page_id')
 78:             ->where('instance_id = ?', (int)$object->getId());
 79:         $pageIds = $readAdapter->fetchCol($select);
 80: 
 81:         $removePageIds = array_diff($pageIds, $object->getData('page_group_ids'));
 82: 
 83:         if (is_array($pageIds) && count($pageIds) > 0) {
 84:             $inCond = $readAdapter->prepareSqlCondition('page_id', array('in' => $pageIds));
 85: 
 86:             $select = $readAdapter->select()
 87:                 ->from($pageLayoutTable, 'layout_update_id')
 88:                 ->where($inCond);
 89:             $removeLayoutUpdateIds = $readAdapter->fetchCol($select);
 90: 
 91:             $writeAdapter->delete($pageLayoutTable, $inCond);
 92:             $this->_deleteLayoutUpdates($removeLayoutUpdateIds);
 93:         }
 94: 
 95:         $this->_deleteWidgetInstancePages($removePageIds);
 96: 
 97:         foreach ($object->getData('page_groups') as $pageGroup) {
 98:             $pageLayoutUpdateIds = $this->_saveLayoutUpdates($object, $pageGroup);
 99:             $data = array(
100:                 'page_group'      => $pageGroup['group'],
101:                 'layout_handle'   => $pageGroup['layout_handle'],
102:                 'block_reference' => $pageGroup['block_reference'],
103:                 'page_for'        => $pageGroup['for'],
104:                 'entities'        => $pageGroup['entities'],
105:                 'page_template'   => $pageGroup['template'],
106:             );
107:             $pageId = $pageGroup['page_id'];
108:             if (in_array($pageGroup['page_id'], $pageIds)) {
109:                 $writeAdapter->update($pageTable, $data, array('page_id = ?' => (int)$pageId));
110:             } else {
111:                 $writeAdapter->insert($pageTable,
112:                     array_merge(array('instance_id' => $object->getId()),
113:                     $data));
114:                 $pageId = $writeAdapter->lastInsertId($pageTable);
115:             }
116:             foreach ($pageLayoutUpdateIds as $layoutUpdateId) {
117:                 $writeAdapter->insert($pageLayoutTable, array(
118:                     'page_id' => $pageId,
119:                     'layout_update_id' => $layoutUpdateId
120:                 ));
121:             }
122:         }
123: 
124:         return parent::_afterSave($object);
125:     }
126: 
127:     /**
128:      * Prepare and save layout updates data
129:      *
130:      * @param Mage_Widget_Model_Widget_Instance $widgetInstance
131:      * @param array $pageGroupData
132:      * @return array of inserted layout updates ids
133:      */
134:     protected function _saveLayoutUpdates($widgetInstance, $pageGroupData)
135:     {
136:         $writeAdapter          = $this->_getWriteAdapter();
137:         $pageLayoutUpdateIds   = array();
138:         $storeIds              = $this->_prepareStoreIds($widgetInstance->getStoreIds());
139:         $layoutUpdateTable     = $this->getTable('core/layout_update');
140:         $layoutUpdateLinkTable = $this->getTable('core/layout_link');
141: 
142:         foreach ($pageGroupData['layout_handle_updates'] as $handle) {
143:             $xml = $widgetInstance->generateLayoutUpdateXml(
144:                 $pageGroupData['block_reference'],
145:                 $pageGroupData['template']
146:             );
147:             $insert = array(
148:                     'handle'     => $handle,
149:                     'xml'        => $xml
150:             );
151:             if (strlen($widgetInstance->getSortOrder())) {
152:                 $insert['sort_order'] = $widgetInstance->getSortOrder();
153:             };
154: 
155:             $writeAdapter->insert($layoutUpdateTable, $insert);
156:             $layoutUpdateId = $writeAdapter->lastInsertId($layoutUpdateTable);
157:             $pageLayoutUpdateIds[] = $layoutUpdateId;
158: 
159:             $data = array();
160:             foreach ($storeIds as $storeId) {
161:                 $data[] = array(
162:                     'store_id'         => $storeId,
163:                     'area'             => $widgetInstance->getArea(),
164:                     'package'          => $widgetInstance->getPackage(),
165:                     'theme'            => $widgetInstance->getTheme(),
166:                     'layout_update_id' => $layoutUpdateId);
167:             }
168:             $writeAdapter->insertMultiple($layoutUpdateLinkTable, $data);
169:         }
170:         return $pageLayoutUpdateIds;
171:     }
172: 
173:     /**
174:      * Prepare store ids.
175:      * If one of store id is default (0) return all store ids
176:      *
177:      * @param array $storeIds
178:      * @return array
179:      */
180:     protected function _prepareStoreIds($storeIds)
181:     {
182:         if (in_array('0', $storeIds)) {
183:             $storeIds = array(0);
184:         }
185:         return $storeIds;
186:     }
187: 
188:     /**
189:      * Perform actions before object delete.
190:      * Collect page ids and layout update ids and set to object for further delete
191:      *
192:      * @param Varien_Object $object
193:      * @return Mage_Widget_Model_Resource_Widget_Instance
194:      */
195:     protected function _beforeDelete(Mage_Core_Model_Abstract $object)
196:     {
197:         $writeAdapter = $this->_getWriteAdapter();
198:         $select = $writeAdapter->select()
199:             ->from(array('main_table' => $this->getTable('widget/widget_instance_page')), array())
200:             ->joinInner(
201:                 array('layout_page_table' => $this->getTable('widget/widget_instance_page_layout')),
202:                 'layout_page_table.page_id = main_table.page_id',
203:                 array('layout_update_id')
204:             )
205:             ->where('main_table.instance_id=?', $object->getId());
206:         $result = $writeAdapter->fetchCol($select);
207:         $object->setLayoutUpdateIdsToDelete($result);
208:         return $this;
209:     }
210: 
211:     /**
212:      * Perform actions after object delete.
213:      * Delete layout updates by layout update ids collected in _beforeSave
214:      *
215:      * @param Mage_Widget_Model_Widget_Instance $object
216:      * @return Mage_Widget_Model_Resource_Widget_Instance
217:      */
218:     protected function _afterDelete(Mage_Core_Model_Abstract $object)
219:     {
220:         $this->_deleteLayoutUpdates($object->getLayoutUpdateIdsToDelete());
221:         return parent::_afterDelete($object);
222:     }
223: 
224:     /**
225:      * Delete widget instance pages by given ids
226:      *
227:      * @param array $pageIds
228:      * @return Mage_Widget_Model_Resource_Widget_Instance
229:      */
230:     protected function _deleteWidgetInstancePages($pageIds)
231:     {
232:         $writeAdapter = $this->_getWriteAdapter();
233:         if ($pageIds) {
234:             $inCond = $writeAdapter->prepareSqlCondition('page_id', array(
235:                 'in' => $pageIds
236:             ));
237:             $writeAdapter->delete(
238:                 $this->getTable('widget/widget_instance_page'),
239:                 $inCond
240:             );
241:         }
242:         return $this;
243:     }
244: 
245:     /**
246:      * Delete layout updates by given ids
247:      *
248:      * @param array $layoutUpdateIds
249:      * @return Mage_Widget_Model_Resource_Widget_Instance
250:      */
251:     protected function _deleteLayoutUpdates($layoutUpdateIds)
252:     {
253:         $writeAdapter = $this->_getWriteAdapter();
254:         if ($layoutUpdateIds) {
255:             $inCond = $writeAdapter->prepareSqlCondition('layout_update_id', array(
256:                 'in' => $layoutUpdateIds
257:             ));
258:             $writeAdapter->delete(
259:                 $this->getTable('core/layout_update'),
260:                 $inCond
261:             );
262:         }
263:         return $this;
264:     }
265: 
266:     /**
267:      * Get store ids to which specified item is assigned
268:      *
269:      * @param int $id
270:      * @return array
271:      */
272:     public function lookupStoreIds($id)
273:     {
274:         $adapter = $this->_getReadAdapter();
275:         $select = $adapter->select()
276:             ->from($this->getMainTable(), 'store_ids')
277:             ->where("{$this->getIdFieldName()} = ?", (int)$id);
278:         $storeIds = $adapter->fetchOne($select);
279:         return $storeIds ? explode(',', $storeIds) : array();
280:     }
281: 
282: }
283: 
Magento 1.7.0.2 API documentation generated by ApiGen 2.8.0