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: abstract class Mage_CatalogInventory_Model_Api2_Stock_Item_Rest
35: extends Mage_CatalogInventory_Model_Api2_Stock_Item
36: {
37: 38: 39: 40: 41: 42:
43: protected function _retrieve()
44: {
45:
46: $stockItem = $this->_loadStockItemById($this->getRequest()->getParam('id'));
47: return $stockItem->getData();
48: }
49:
50: 51: 52: 53: 54:
55: protected function _retrieveCollection()
56: {
57: $data = $this->_getCollectionForRetrieve()->load()->toArray();
58: return isset($data['items']) ? $data['items'] : $data;
59: }
60:
61: 62: 63: 64: 65:
66: protected function _getCollectionForRetrieve()
67: {
68:
69: $collection = Mage::getResourceModel('cataloginventory/stock_item_collection');
70: $this->_applyCollectionModifiers($collection);
71: return $collection;
72: }
73:
74: 75: 76: 77: 78: 79:
80: protected function _update(array $data)
81: {
82:
83: $stockItem = $this->_loadStockItemById($this->getRequest()->getParam('id'));
84:
85:
86: $validator = Mage::getModel('cataloginventory/api2_stock_item_validator_item', array(
87: 'resource' => $this
88: ));
89:
90: if (!$validator->isValidData($data)) {
91: foreach ($validator->getErrors() as $error) {
92: $this->_error($error, Mage_Api2_Model_Server::HTTP_BAD_REQUEST);
93: }
94: $this->_critical(self::RESOURCE_DATA_PRE_VALIDATION_ERROR);
95: }
96:
97: $stockItem->addData($data);
98: try {
99: $stockItem->save();
100: } catch (Mage_Core_Exception $e) {
101: $this->_error($e->getMessage(), Mage_Api2_Model_Server::HTTP_INTERNAL_ERROR);
102: } catch (Exception $e) {
103: $this->_critical(self::RESOURCE_INTERNAL_ERROR);
104: }
105: }
106:
107: 108: 109: 110: 111:
112: protected function _multiUpdate(array $data)
113: {
114: foreach ($data as $itemData) {
115: try {
116: if (!is_array($itemData)) {
117: $this->_errorMessage(self::RESOURCE_DATA_INVALID, Mage_Api2_Model_Server::HTTP_BAD_REQUEST);
118: $this->_critical(self::RESOURCE_DATA_PRE_VALIDATION_ERROR);
119: }
120:
121:
122: $validator = Mage::getModel('cataloginventory/api2_stock_item_validator_item', array(
123: 'resource' => $this
124: ));
125: if (!$validator->isValidSingleItemDataForMultiUpdate($itemData)) {
126: foreach ($validator->getErrors() as $error) {
127: $this->_errorMessage($error, Mage_Api2_Model_Server::HTTP_BAD_REQUEST, array(
128: 'item_id' => isset($itemData['item_id']) ? $itemData['item_id'] : null
129: ));
130: }
131: $this->_critical(self::RESOURCE_DATA_PRE_VALIDATION_ERROR);
132: }
133:
134:
135:
136: $stockItem = $this->_loadStockItemById($itemData['item_id']);
137:
138: unset($itemData['item_id']);
139: $stockItem->addData($itemData);
140: $stockItem->save();
141:
142: $this->_successMessage(self::RESOURCE_UPDATED_SUCCESSFUL, Mage_Api2_Model_Server::HTTP_OK, array(
143: 'item_id' => $stockItem->getId()
144: ));
145: } catch (Mage_Api2_Exception $e) {
146:
147: if ($e->getMessage() != self::RESOURCE_DATA_PRE_VALIDATION_ERROR) {
148: $this->_errorMessage($e->getMessage(), $e->getCode(), array(
149: 'item_id' => isset($itemData['item_id']) ? $itemData['item_id'] : null
150: ));
151: }
152: } catch (Exception $e) {
153: $this->_errorMessage(
154: Mage_Api2_Model_Resource::RESOURCE_INTERNAL_ERROR,
155: Mage_Api2_Model_Server::HTTP_INTERNAL_ERROR,
156: array(
157: 'item_id' => isset($itemData['item_id']) ? $itemData['item_id'] : null
158: )
159: );
160: }
161: }
162: }
163: }
164: