public static function onRestServiceMethod($arParams, $nav, CRestServer $server) { if (!CCrmPerms::IsAccessEnabled()) { throw new RestException('Access denied.'); } $methodName = $server->getMethod(); $parts = explode('.', $methodName); $partCount = count($parts); if ($partCount < 3 || $parts[0] !== 'crm') { throw new RestException("Method '{$methodName}' is not supported in current context."); } $typeName = strtoupper($parts[1]); $proxy = null; if (isset(self::$PROXIES[$typeName])) { $proxy = self::$PROXIES[$typeName]; } if (!$proxy) { if ($typeName === 'ENUM') { $proxy = self::$PROXIES[$typeName] = new CCrmEnumerationRestProxy(); } elseif ($typeName === 'MULTIFIELD') { $proxy = self::$PROXIES[$typeName] = new CCrmMultiFieldRestProxy(); } elseif ($typeName === 'CURRENCY') { $proxy = self::$PROXIES[$typeName] = new CCrmCurrencyRestProxy(); } elseif ($typeName === 'CATALOG') { $proxy = self::$PROXIES[$typeName] = new CCrmCatalogRestProxy(); } elseif ($typeName === 'PRODUCT' && strtoupper($parts[2]) === 'PROPERTY') { $proxy = self::$PROXIES[$typeName] = new CCrmProductPropertyRestProxy(); } elseif ($typeName === 'PRODUCT') { $proxy = self::$PROXIES[$typeName] = new CCrmProductRestProxy(); } elseif ($typeName === 'PRODUCTSECTION') { $proxy = self::$PROXIES[$typeName] = new CCrmProductSectionRestProxy(); } elseif ($typeName === 'PRODUCTROW') { $proxy = self::$PROXIES[$typeName] = new CCrmProductRowRestProxy(); } elseif ($typeName === 'STATUS') { $proxy = self::$PROXIES[$typeName] = new CCrmStatusRestProxy(); } elseif ($typeName === 'LEAD') { $proxy = self::$PROXIES[$typeName] = new CCrmLeadRestProxy(); } elseif ($typeName === 'DEAL') { $proxy = self::$PROXIES[$typeName] = new CCrmDealRestProxy(); } elseif ($typeName === 'COMPANY') { $proxy = self::$PROXIES[$typeName] = new CCrmCompanyRestProxy(); } elseif ($typeName === 'CONTACT') { $proxy = self::$PROXIES[$typeName] = new CCrmContactRestProxy(); } elseif ($typeName === 'ACTIVITY') { $proxy = self::$PROXIES[$typeName] = new CCrmActivityRestProxy(); } elseif ($typeName === 'DUPLICATE') { $proxy = self::$PROXIES[$typeName] = new CCrmDuplicateRestProxy(); } elseif ($typeName === 'LIVEFEEDMESSAGE') { $proxy = self::$PROXIES[$typeName] = new CCrmLiveFeedMessageRestProxy(); } elseif ($typeName === 'USERFIELD') { $proxy = self::$PROXIES[$typeName] = new CCrmUserFieldRestProxy(CCrmOwnerType::Undefined); } elseif ($typeName === 'INVOICE' && strtoupper($parts[2]) === 'STATUS') { $proxy = self::$PROXIES[$typeName] = new CCrmStatusInvoiceRestProxy(); } else { throw new RestException("Could not find proxy for method '{$methodName}'."); } $proxy->setServer($server); } return $proxy->processMethodRequest($parts[2], $partCount > 3 ? array_slice($parts, 3) : array(), $arParams, $nav, $server); }
/** * @param array $params * @param $start * @param \CRestServer $restServer * @return Service\Base * @throws RestException */ private function buildService(array $params, $start, \CRestServer $restServer) { list(, $entityName, $method) = explode('.', $restServer->getMethod()); $serviceClass = $this->getServiceClassByEntity($entityName); $reflection = new \ReflectionClass($serviceClass); return $reflection->newInstanceArgs(array($method, $params, $start, $restServer)); }
/** * @param array $params * @param $start * @param \CRestServer $restServer * @return Service\Base * @throws RestException */ private function buildService(array $params, $start, \CRestServer $restServer) { list($prefix, $entityName, $method) = explode('.', $restServer->getMethod()); if ($prefix === \CRestUtil::METHOD_DOWNLOAD) { $entityName = 'file'; $method = \CRestUtil::METHOD_DOWNLOAD; } $serviceClass = $this->getServiceClassByEntity($entityName); $reflection = new \ReflectionClass($serviceClass); return $reflection->newInstanceArgs(array($method, $params, $start, $restServer)); }