1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
26:
27:
28: 29: 30: 31: 32: 33: 34:
35: class Mage_Eav_Model_Resource_Form_Fieldset extends Mage_Core_Model_Resource_Db_Abstract
36: {
37: 38: 39:
40: protected function _construct()
41: {
42: $this->_init('eav/form_fieldset', 'fieldset_id');
43: $this->addUniqueField(array(
44: 'field' => array('type_id', 'code'),
45: 'title' => Mage::helper('eav')->__('Form Fieldset with the same code')
46: ));
47: }
48:
49: 50: 51: 52: 53: 54:
55: protected function _afterSave(Mage_Core_Model_Abstract $object)
56: {
57: if ($object->hasLabels()) {
58: $new = $object->getLabels();
59: $old = $this->getLabels($object);
60:
61: $adapter = $this->_getWriteAdapter();
62:
63: $insert = array_diff(array_keys($new), array_keys($old));
64: $delete = array_diff(array_keys($old), array_keys($new));
65: $update = array();
66:
67: foreach ($new as $storeId => $label) {
68: if (isset($old[$storeId]) && $old[$storeId] != $label) {
69: $update[$storeId] = $label;
70: } elseif (isset($old[$storeId]) && empty($label)) {
71: $delete[] = $storeId;
72: }
73: }
74:
75: if (!empty($insert)) {
76: $data = array();
77: foreach ($insert as $storeId) {
78: $label = $new[$storeId];
79: if (empty($label)) {
80: continue;
81: }
82: $data[] = array(
83: 'fieldset_id' => (int)$object->getId(),
84: 'store_id' => (int)$storeId,
85: 'label' => $label
86: );
87: }
88: if ($data) {
89: $adapter->insertMultiple($this->getTable('eav/form_fieldset_label'), $data);
90: }
91: }
92:
93: if (!empty($delete)) {
94: $where = array(
95: 'fieldset_id = ?' => $object->getId(),
96: 'store_id IN(?)' => $delete
97: );
98: $adapter->delete($this->getTable('eav/form_fieldset_label'), $where);
99: }
100:
101: if (!empty($update)) {
102: foreach ($update as $storeId => $label) {
103: $bind = array('label' => $label);
104: $where = array(
105: 'fieldset_id =?' => $object->getId(),
106: 'store_id =?' => $storeId
107: );
108: $adapter->update($this->getTable('eav/form_fieldset_label'), $bind, $where);
109: }
110: }
111: }
112:
113: return parent::_afterSave($object);
114: }
115:
116: 117: 118: 119: 120: 121:
122: public function getLabels($object)
123: {
124: $objectId = $object->getId();
125: if (!$objectId) {
126: return array();
127: }
128: $adapter = $this->_getReadAdapter();
129: $bind = array(':fieldset_id' => $objectId);
130: $select = $adapter->select()
131: ->from($this->getTable('eav/form_fieldset_label'), array('store_id', 'label'))
132: ->where('fieldset_id = :fieldset_id');
133:
134: return $adapter->fetchPairs($select, $bind);
135: }
136:
137: 138: 139: 140: 141: 142: 143: 144:
145: protected function _getLoadSelect($field, $value, $object)
146: {
147: $select = parent::_getLoadSelect($field, $value, $object);
148:
149: $labelExpr = $select->getAdapter()->getIfNullSql('store_label.label', 'default_label.label');
150:
151: $select
152: ->joinLeft(
153: array('default_label' => $this->getTable('eav/form_fieldset_label')),
154: $this->getMainTable() . '.fieldset_id = default_label.fieldset_id AND default_label.store_id=0',
155: array())
156: ->joinLeft(
157: array('store_label' => $this->getTable('eav/form_fieldset_label')),
158: $this->getMainTable() . '.fieldset_id = store_label.fieldset_id AND default_label.store_id='
159: . (int)$object->getStoreId(),
160: array('label' => $labelExpr)
161: );
162:
163: return $select;
164: }
165: }
166: