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_Api2_Adminhtml_Api2_AttributeController
  • Mage_Api2_Adminhtml_Api2_RoleController
  • Mage_Api2_Block_Adminhtml_Attribute
  • Mage_Api2_Block_Adminhtml_Attribute_Buttons
  • Mage_Api2_Block_Adminhtml_Attribute_Edit
  • Mage_Api2_Block_Adminhtml_Attribute_Edit_Form
  • Mage_Api2_Block_Adminhtml_Attribute_Grid
  • Mage_Api2_Block_Adminhtml_Attribute_Tab_Resource
  • Mage_Api2_Block_Adminhtml_Attribute_Tabs
  • Mage_Api2_Block_Adminhtml_Permissions_User_Edit_Tab_Roles
  • Mage_Api2_Block_Adminhtml_Roles
  • Mage_Api2_Block_Adminhtml_Roles_Buttons
  • Mage_Api2_Block_Adminhtml_Roles_Grid
  • Mage_Api2_Block_Adminhtml_Roles_Tab_Info
  • Mage_Api2_Block_Adminhtml_Roles_Tab_Resources
  • Mage_Api2_Block_Adminhtml_Roles_Tab_Users
  • Mage_Api2_Block_Adminhtml_Roles_Tabs
  • Mage_Api2_Helper_Data
  • Mage_Api2_Model_Acl
  • Mage_Api2_Model_Acl_Filter
  • Mage_Api2_Model_Acl_Filter_Attribute
  • Mage_Api2_Model_Acl_Filter_Attribute_Operation
  • Mage_Api2_Model_Acl_Filter_Attribute_ResourcePermission
  • Mage_Api2_Model_Acl_Global
  • Mage_Api2_Model_Acl_Global_Role
  • Mage_Api2_Model_Acl_Global_Rule
  • Mage_Api2_Model_Acl_Global_Rule_Permission
  • Mage_Api2_Model_Acl_Global_Rule_Privilege
  • Mage_Api2_Model_Acl_Global_Rule_ResourcePermission
  • Mage_Api2_Model_Acl_Global_Rule_Tree
  • Mage_Api2_Model_Auth
  • Mage_Api2_Model_Auth_Adapter
  • Mage_Api2_Model_Auth_Adapter_Abstract
  • Mage_Api2_Model_Auth_Adapter_Oauth
  • Mage_Api2_Model_Auth_User
  • Mage_Api2_Model_Auth_User_Abstract
  • Mage_Api2_Model_Auth_User_Admin
  • Mage_Api2_Model_Auth_User_Customer
  • Mage_Api2_Model_Auth_User_Guest
  • Mage_Api2_Model_Config
  • Mage_Api2_Model_Dispatcher
  • Mage_Api2_Model_Multicall
  • Mage_Api2_Model_Observer
  • Mage_Api2_Model_Renderer
  • Mage_Api2_Model_Renderer_Json
  • Mage_Api2_Model_Renderer_Query
  • Mage_Api2_Model_Renderer_Xml
  • Mage_Api2_Model_Renderer_Xml_Writer
  • Mage_Api2_Model_Request
  • Mage_Api2_Model_Request_Internal
  • Mage_Api2_Model_Request_Interpreter
  • Mage_Api2_Model_Request_Interpreter_Json
  • Mage_Api2_Model_Request_Interpreter_Query
  • Mage_Api2_Model_Request_Interpreter_Xml
  • Mage_Api2_Model_Resource
  • Mage_Api2_Model_Resource_Acl_Filter_Attribute
  • Mage_Api2_Model_Resource_Acl_Filter_Attribute_Collection
  • Mage_Api2_Model_Resource_Acl_Global_Role
  • Mage_Api2_Model_Resource_Acl_Global_Role_Collection
  • Mage_Api2_Model_Resource_Acl_Global_Rule
  • Mage_Api2_Model_Resource_Acl_Global_Rule_Collection
  • Mage_Api2_Model_Resource_Setup
  • Mage_Api2_Model_Resource_Validator
  • Mage_Api2_Model_Resource_Validator_Eav
  • Mage_Api2_Model_Resource_Validator_Fields
  • Mage_Api2_Model_Response
  • Mage_Api2_Model_Route_Abstract
  • Mage_Api2_Model_Route_ApiType
  • Mage_Api2_Model_Route_Rest
  • Mage_Api2_Model_Router
  • Mage_Api2_Model_Server

Interfaces

  • Mage_Api2_Model_Acl_PermissionInterface
  • Mage_Api2_Model_Renderer_Interface
  • Mage_Api2_Model_Request_Interpreter_Interface
  • Mage_Api2_Model_Route_Interface

Exceptions

  • Mage_Api2_Exception
  • 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_Api2
 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:  * API2 model for multiple internal calls to subresources of specified resource
 29:  *
 30:  * @category   Mage
 31:  * @package    Mage_Api2
 32:  * @author     Magento Core Team <core@magentocommerce.com>
 33:  */
 34: class Mage_Api2_Model_Multicall
 35: {
 36: 
 37:     /**
 38:      * @var Mage_Api2_Model_Request
 39:      */
 40:     protected $_parentCallRequest;
 41: 
 42:     /**
 43:      * @var string
 44:      */
 45:     protected $_parentResourceId;
 46: 
 47:     /**
 48:      * Multicall to subresources of specified resource
 49:      *
 50:      * @param string $parentResourceId
 51:      * @param string $parentResourceName
 52:      * @param Mage_Api2_Model_Request $parentCallRequest
 53:      * @return Mage_Api2_Model_Response
 54:      */
 55:     public function call($parentResourceId, $parentResourceName, Mage_Api2_Model_Request $parentCallRequest)
 56:     {
 57:         $this->_parentResourceId = $parentResourceId;
 58:         $this->_parentCallRequest = $parentCallRequest;
 59:         $subresources = $this->_getDeclaredSubresources($parentResourceName);
 60:         foreach ($subresources as $subresource) {
 61:             $this->_callSubresource($subresource);
 62:         }
 63: 
 64:         return $this->_getResponse();
 65:     }
 66: 
 67:     /**
 68:      * Make call to specified subresource with data from request
 69:      *
 70:      * @param Mage_Core_Model_Config_Element $subresource
 71:      * @return Mage_Api2_Model_Multicall
 72:      */
 73:     protected function _callSubresource($subresource)
 74:     {
 75:         $bodyParams = $this->_getRequest()->getBodyParams();
 76:         // check if subresource data exists in request
 77:         $requestParamName = (string)$subresource->request_param_name;
 78:         if (!(is_array($bodyParams) && array_key_exists($requestParamName, $bodyParams)
 79:             && is_array($bodyParams[$requestParamName]))
 80:         ) {
 81:             return $this;
 82:         }
 83:         // make internal call
 84:         $subresourceType = (string)$subresource->type;
 85:         $requestData = $bodyParams[$requestParamName];
 86:         switch ($subresourceType) {
 87:             case 'collection':
 88:                 foreach ($requestData as $subresourceData) {
 89:                     $this->_internalCall($subresource, $subresourceData);
 90:                 }
 91:                 break;
 92:             case 'instance':
 93:             default:
 94:                 $this->_internalCall($subresource, $requestData);
 95:                 break;
 96:         }
 97:         return $this;
 98:     }
 99: 
100:     /**
101:      * Make internal call to specified subresource on with specified data via API2 server
102:      *
103:      * @param Mage_Core_Model_Config_Element $subresource
104:      * @param array $requestData
105:      * @throws Mage_Api2_Exception
106:      * @return Mage_Api2_Model_Multicall
107:      */
108:     protected function _internalCall($subresource, $requestData)
109:     {
110:         try {
111:             if (!is_array($requestData)) {
112:                 throw new Mage_Api2_Exception('Invalid data format', Mage_Api2_Model_Server::HTTP_BAD_REQUEST);
113:             }
114:             $subresourceIdKey = (string)$subresource->id_param_name;
115:             /** @var $server Mage_Api2_Model_Server */
116:             $server = Mage::getSingleton('api2/server');
117: 
118:             // create subresource item before linking it to main resource
119:             if (!array_key_exists($subresourceIdKey, $requestData)) {
120:                 $subresourceCreateResourceName = (string)$subresource->create_resource_name;
121:                 $internalRequest = $this->_prepareRequest($subresourceCreateResourceName, $requestData);
122:                 /** @var $internalCreateResponse Mage_Api2_Model_Response */
123:                 $internalCreateResponse = Mage::getModel('api2/response');
124:                 $server->internalCall($internalRequest, $internalCreateResponse);
125:                 $createdSubresourceInstanceId = $this->_getCreatedResourceId($internalCreateResponse);
126:                 if (empty($createdSubresourceInstanceId)) {
127:                     throw new Mage_Api2_Exception('Error during subresource creation',
128:                         Mage_Api2_Model_Server::HTTP_INTERNAL_ERROR);
129:                 }
130:                 $requestData[$subresourceIdKey] = $createdSubresourceInstanceId;
131:             }
132: 
133:             // link subresource to main resource
134:             $subresourceName = (string)$subresource->name;
135:             $parentResourceIdFieldName = (string)$subresource->parent_resource_id_field_name;
136:             $internalRequest = $this->_prepareRequest($subresourceName, $requestData, $parentResourceIdFieldName);
137: 
138:             /** @var $internalResponse Mage_Api2_Model_Response */
139:             $internalResponse = Mage::getModel('api2/response');
140:             $server->internalCall($internalRequest, $internalResponse);
141:         } catch (Exception $e) {
142:             // TODO: implement strict mode
143:             Mage::logException($e);
144:             $this->_getResponse()->setException($e);
145:             // TODO: Refactor partial success idintification process
146:             $this->_getResponse()->setHttpResponseCode(Mage_Api2_Model_Server::HTTP_CREATED);
147:         }
148: 
149:         if (isset($internalCreateResponse)) {
150:             $this->_aggregateResponse($internalCreateResponse);
151:         }
152:         if (isset($internalResponse)) {
153:             $this->_aggregateResponse($internalResponse);
154:         }
155: 
156:         return $this;
157:     }
158: 
159:     /**
160:      * Prepare internal request
161:      *
162:      * @param string $subresourceName
163:      * @param array $data
164:      * @param string|null $parentResourceIdFieldName
165:      * @return Mage_Api2_Model_Request_Internal
166:      */
167:     protected function _prepareRequest($subresourceName, $data, $parentResourceIdFieldName = null)
168:     {
169:         $subresourceUri = $this->_createSubresourceUri($subresourceName, $parentResourceIdFieldName);
170:         /** @var $internalRequest Mage_Api2_Model_Request_Internal */
171:         $internalRequest = Mage::getModel('api2/request_internal');
172:         $internalRequest->setRequestUri($subresourceUri);
173:         $internalRequest->setBodyParams($data);
174:         $internalRequest->setMethod('POST');
175:         return $internalRequest;
176:     }
177: 
178:     /**
179:      * Generate subresource uri
180:      *
181:      * @param string $subresourceName
182:      * @param string $parentResourceIdFieldName
183:      * @return string
184:      */
185:     protected function _createSubresourceUri($subresourceName, $parentResourceIdFieldName = null)
186:     {
187:         /** @var $apiTypeRoute Mage_Api2_Model_Route_ApiType */
188:         $apiTypeRoute = Mage::getModel('api2/route_apiType');
189: 
190:         $chain = $apiTypeRoute->chain(
191:             new Zend_Controller_Router_Route($this->_getConfig()->getMainRoute($subresourceName))
192:         );
193:         $params = array();
194:         $params['api_type'] = 'rest';
195:         if (null !== $parentResourceIdFieldName) {
196:             $params[$parentResourceIdFieldName] = $this->_parentResourceId;
197:         }
198:         $uri = $chain->assemble($params);
199: 
200:         return '/' . $uri;
201:     }
202: 
203:     /**
204:      * Retrieve list of subresources declared in configuration
205:      *
206:      * @param string $parentResourceName
207:      * @return array
208:      */
209:     protected function _getDeclaredSubresources($parentResourceName)
210:     {
211:         return $this->_getConfig()->getResourceSubresources($parentResourceName);
212:     }
213: 
214:     /**
215:      * Retrieve API2 config
216:      *
217:      * @return Mage_Api2_Model_Config
218:      */
219:     protected function _getConfig()
220:     {
221:         return Mage::getSingleton('api2/config');
222:     }
223: 
224:     /**
225:      * Retrieve global response
226:      *
227:      * @return Mage_Api2_Model_Response
228:      */
229:     protected function _getResponse()
230:     {
231:         return Mage::getSingleton('api2/response');
232:     }
233: 
234:     /**
235:      * Retrieve parent request
236:      *
237:      * @return Mage_Api2_Model_Request
238:      */
239:     protected function _getRequest()
240:     {
241:         return $this->_parentCallRequest;
242:     }
243: 
244:     /**
245:      * Add internal call response to global response
246:      *
247:      * @param Mage_Api2_Model_Response $response
248:      */
249:     protected function _aggregateResponse(Mage_Api2_Model_Response $response)
250:     {
251:         if ($response->isException()) {
252:             $errors = $response->getException();
253:             // @TODO: add subresource prefix to error messages
254:             foreach ($errors as $error) {
255:                 $this->_getResponse()->setException($error);
256:             }
257:         }
258:     }
259: 
260:     /**
261:      * Retrieve created resource id from response
262:      *
263:      * @param Mage_Api2_Model_Response $response
264:      * @return string|int
265:      */
266:     protected function _getCreatedResourceId($response)
267:     {
268:         $resourceId = 0;
269:         $headers = $response->getHeaders();
270:         foreach ($headers as $header) {
271:             if ($header['name'] == 'Location') {
272:                 list($resourceId) = array_reverse(explode('/', $header['value']));
273:                 break;
274:             }
275:         }
276:         return $resourceId;
277:     }
278: }
279: 
Magento 1.7.0.2 API documentation generated by ApiGen 2.8.0