%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 18.220.203.200 Web Server : Apache/2.4.52 (Ubuntu) System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64 User : www-root ( 1010) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/lib/controller/ |
Upload File : |
<?php namespace Bitrix\Sale\Controller; use Bitrix\Main\Engine\AutoWire\ExactParameter; use Bitrix\Main\Engine\Response\DataType\Page; use Bitrix\Main\Error; use Bitrix\Sale; use Bitrix\Main\UI\PageNavigation; class PropertyValue extends Controller { public function getPrimaryAutoWiredParameter() { return new ExactParameter( Sale\PropertyValue::class, 'propertyValue', function($className, $id) { $registry = Sale\Registry::getInstance(Sale\Registry::REGISTRY_TYPE_ORDER); /** @var Sale\Property $propertyValueClass */ $propertyValueClass = $registry->getPropertyValueClassName(); $r = $propertyValueClass::getList([ 'select'=>['ORDER_ID'], 'filter'=>['ID'=>$id] ]); if($row = $r->fetch()) { /** @var Sale\Order $orderClass */ $orderClass = $registry->getOrderClassName(); $propertyValue = $orderClass::load($row['ORDER_ID']) ->getPropertyCollection() ->getItemById($id); if ($propertyValue) { return $propertyValue; } } else { $this->addError(new Error('property value is not exists', 201040400001)); } return null; } ); } //region Actions public function getFieldsAction() { $entity = new \Bitrix\Sale\Rest\Entity\PropertyValue(); return ['PROPERTY_VALUE'=>$entity->prepareFieldInfos( $entity->getFields() )]; } public function modifyAction(array $fields) { $builder = $this->getBuilder(); $builder->buildEntityProperties($fields); if($builder->getErrorsContainer()->getErrorCollection()->count()>0) { $this->addErrors($builder->getErrorsContainer()->getErrors()); return null; } $order = $builder->getOrder(); $r = $order->save(); if(!$r->isSuccess()) { $this->addErrors($r->getErrors()); return null; } return ['PROPERTY_VALUES'=>$this->toArray($order)['ORDER']['PROPERTY_VALUES']]; } public function deleteAction(\Bitrix\Sale\PropertyValue $propertyValue) { $r = $propertyValue->delete(); if($r->isSuccess()) { $r = $propertyValue ->getCollection() ->getOrder() ->save(); } if(!$r->isSuccess()) $this->addErrors($r->getErrors()); return $r->isSuccess(); } public function getAction(\Bitrix\Sale\PropertyValue $propertyValue) { return ['PROPERTY_VALUE'=>$this->get($propertyValue)]; } public function listAction($select=[], $filter=[], $order=[], PageNavigation $pageNavigation) { $select = empty($select)? ['*']:$select; $order = empty($order)? ['ID'=>'ASC']:$order; $runtime = [ new \Bitrix\Main\Entity\ReferenceField( 'ORDER_PROPS', '\Bitrix\Sale\Internals\OrderPropsTable', array('=this.ORDER_PROPS_ID' => 'ref.ID') ) ]; $payments = \Bitrix\Sale\PropertyValue::getList( [ 'select'=>$select, 'filter'=>$filter, 'order'=>$order, 'offset' => $pageNavigation->getOffset(), 'limit' => $pageNavigation->getLimit(), 'runtime' => $runtime ] )->fetchAll(); return new Page('PROPERTY_VALUES', $payments, function() use ($select, $filter, $runtime) { return count( \Bitrix\Sale\PropertyValue::getList(['select'=>$select, 'filter'=>$filter, 'runtime'=>$runtime])->fetchAll() ); }); } //end region protected function get(\Bitrix\Sale\PropertyValue $propertyValue, array $fields=[]) { $properties = $this->toArray($propertyValue ->getCollection() ->getOrder(), $fields)['ORDER']['PROPERTY_VALUES']; foreach ($properties as $property) { if($property['ID']==$propertyValue->getId()) { return $property; } } return []; } static public function prepareFields($fields) { $data = null; if(isset($fields['PROPERTY_VALUES'])) { foreach($fields['PROPERTY_VALUES'] as $field) { $data[$field['ORDER_PROPS_ID']]=$field['VALUE']; } } return is_array($data)?['PROPERTIES'=>$data]:[]; } }