- Added comprehensive AI Assistant system (aiassist/ directory): * Vector search and embedding capabilities * Typebot proxy integration * Elastic search functionality * Message classification and chat history * MCP proxy for external integrations - Implemented Court Status API (GetCourtStatus.php): * Real-time court document status checking * Integration with external court systems * Comprehensive error handling and logging - Enhanced S3 integration: * Improved file backup system with metadata * Batch processing capabilities * Enhanced error logging and recovery * Copy operations with URL fixing - Added Telegram contact creation API - Improved error logging across all modules - Enhanced callback system for AI responses - Extensive backup file storage with timestamps - Updated documentation and README files - File storage improvements: * Thousands of backup files with proper metadata * Fix operations for broken file references * Project-specific backup and recovery systems * Comprehensive file integrity checking Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
154 lines
5.8 KiB
PHP
154 lines
5.8 KiB
PHP
<?php
|
|
/*+**********************************************************************************
|
|
* The contents of this file are subject to the vtiger CRM Public License Version 1.1
|
|
* ("License"); You may not use this file except in compliance with the License
|
|
* The Original Code is: SalesPlatform Ltd
|
|
* The Initial Developer of the Original Code is SalesPlatform Ltd.
|
|
* All Rights Reserved.
|
|
* If you have any questions or comments, please email: devel@salesplatform.ru
|
|
************************************************************************************/
|
|
|
|
require_once 'modules/SPCMLConnector/CmlParserFactory.php';
|
|
require_once 'modules/SPCMLConnector/ParseException.php';
|
|
require_once 'modules/SPCMLConnector/CmlCatalog.php';
|
|
require_once 'modules/SPCMLConnector/CmlProduct.php';
|
|
require_once 'modules/SPCMLConnector/CmlService.php';
|
|
require_once 'modules/SPCMLConnector/CmlSalesOrder.php';
|
|
require_once 'modules/SPCMLConnector/CmlAccount.php';
|
|
|
|
|
|
/**
|
|
* Provides API to parse two types of documents - Catalog/Package, and Order Document
|
|
*/
|
|
class CmlParser {
|
|
|
|
const CML_VERSION_ATTRIBUTE_NAME = 'ВерсияСхемы';
|
|
|
|
|
|
/**
|
|
* Create SimpleXMLElement describes commerce data.
|
|
* If document not valid - throw Exception.
|
|
* @param String $xmlData
|
|
* @return \SimpleXMLElement
|
|
* @throws ParseException
|
|
*/
|
|
private function getCommerceData($xmlData) {
|
|
try {
|
|
$commerceData = new SimpleXMLElement($xmlData);
|
|
return $commerceData;
|
|
} catch (Exception $ex) {
|
|
throw new ParseException("Wrong import file contents!");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Join prices of products from offers package with catalog services and
|
|
* products. Joining inventories by it's one es identifier.
|
|
* @param CmlCatalog $catalog
|
|
* @param CmlCatalog $package
|
|
*/
|
|
private function joinImportWithOffer($catalog, $package) {
|
|
$catalog->setCurrency($package->getCurrency());
|
|
$catalog->setInventoriesCurrencyCode($package->getCurrency());
|
|
$catalog = $this->joinImportWithOfferProducts($catalog, $package);
|
|
$catalog = $this->joinImportWithOfferServices($catalog, $package);
|
|
|
|
return $catalog;
|
|
}
|
|
|
|
/**
|
|
* Add to services in $catalog prices, count and currency from $package.
|
|
* Return updated $catalog.
|
|
* @param CmlCatalog $catalog
|
|
* @param CmlCatalog $package
|
|
* @return CmlCatalog
|
|
*/
|
|
private function joinImportWithOfferServices($catalog, $package) {
|
|
$catalogServices = $catalog->getServices();
|
|
foreach($catalogServices as $number => $catalogService) { //key need to change product in array
|
|
foreach($package->getProducts() as $packageInventory) { //in package all inventories as products
|
|
if($catalogService->compare($packageInventory)) {
|
|
|
|
/* Add price, currency and count of service - and reinitilizate array of services */
|
|
$catalogService->mergeImportWithOffer($packageInventory);
|
|
$catalogServices[$number] = $catalogService;
|
|
break; //no need search more products
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Reinit catalog services */
|
|
$catalog->setServices($catalogServices);
|
|
return $catalog;
|
|
}
|
|
|
|
/**
|
|
* Add to products in $catalog prices, count and currency from $package.
|
|
* Return updated $catalog.
|
|
* @param CmlCatalog $catalog
|
|
* @param CmlCatalog $package
|
|
* @return CmlCatalog
|
|
*/
|
|
private function joinImportWithOfferProducts($catalog, $package) {
|
|
$catalogProducts = $catalog->getProducts();
|
|
foreach($catalogProducts as $number => $catalogProduct) { //key need to change product in array
|
|
foreach($package->getProducts() as $packageProduct) { //in package all inventories as products
|
|
if($catalogProduct->compare($packageProduct)) {
|
|
|
|
/* Add price, currency and count of product - and reinitilizate array of products */
|
|
$catalogProduct->mergeImportWithOffer($packageProduct);
|
|
$catalogProducts[$number] = $catalogProduct;
|
|
break; //no need search more products
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Reinit catalog products */
|
|
$catalog->setProducts($catalogProducts);
|
|
return $catalog;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param SimpleXMLElement $documentXml
|
|
*/
|
|
private function getConcreceParser($documentXml) {
|
|
$cmlVersion = (string) $documentXml[CmlParser::CML_VERSION_ATTRIBUTE_NAME];
|
|
if($cmlVersion == null) {
|
|
throw new ParseException("Empty CommerceML version");
|
|
}
|
|
|
|
return CmlParserFactory::getParser($cmlVersion);
|
|
}
|
|
|
|
/**
|
|
* Parse import and offer of catalog described in xml and return CmlCatalog
|
|
* representation of parsed documents. If error on parse - throw Exception.
|
|
* @param String $import
|
|
* @param String $offer
|
|
* @return CmlCatalog
|
|
*/
|
|
public function parseCatalog($import, $offer) {
|
|
$importXml = $this->getCommerceData($import);
|
|
$offerXml = $this->getCommerceData($offer);
|
|
|
|
$concreceParser = $this->getConcreceParser($importXml);
|
|
$catalog = $concreceParser->parseImport($importXml);
|
|
$package = $concreceParser->parseOffer($offerXml);
|
|
|
|
return $this->joinImportWithOffer($catalog, $package);
|
|
}
|
|
|
|
/**
|
|
* Parse orders described in xml and return array of CmlSalesOrder
|
|
* @param string $order
|
|
* @return CmlSalesOrder[]
|
|
*/
|
|
public function parseOrders($order) {
|
|
$ordersXml = $this->getCommerceData($order);
|
|
$concreceParser = $this->getConcreceParser($ordersXml);
|
|
|
|
return $concreceParser->parseOrders($ordersXml);
|
|
}
|
|
}
|