1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
order_props_values.php
См. документацию.
1<?php
2
7
8Loc::loadMessages(__FILE__);
9
11{
12 public static function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
13 {
14 global $DB;
15
16 if (!is_array($arOrder) && !is_array($arFilter))
17 {
18 $arOrder = strval($arOrder);
19 $arFilter = strval($arFilter);
20 if ($arOrder <> '' && $arFilter <> '')
21 $arOrder = array($arOrder => $arFilter);
22 else
23 $arOrder = array();
24 if (is_array($arGroupBy))
25 $arFilter = $arGroupBy;
26 else
27 $arFilter = array();
28 $arGroupBy = false;
29
30 $arSelectFields = array("ID", "ORDER_ID", "ORDER_PROPS_ID", "NAME", "VALUE", "VALUE_ORIG", "CODE");
31 }
32
33 if (count($arSelectFields) <= 0)
34 $arSelectFields = array("ID", "ORDER_ID", "ORDER_PROPS_ID", "NAME", "VALUE", "VALUE_ORIG", "CODE");
35
36 // add aliases
37
39 $query->addAliases(array(
40 // for GetList
41 'VALUE_ORIG' => 'VALUE',
42 'PROP_ID' => 'PROPERTY.ID',
43 'PROP_PERSON_TYPE_ID' => 'PROPERTY.PERSON_TYPE_ID',
44 'PROP_NAME' => 'PROPERTY.NAME',
45 'PROP_TYPE' => 'PROPERTY.TYPE',
46 'PROP_REQUIED' => 'PROPERTY.REQUIRED',
47 'PROP_DEFAULT_VALUE' => 'PROPERTY.DEFAULT_VALUE',
48 'PROP_SORT' => 'PROPERTY.SORT',
49 'PROP_USER_PROPS' => 'PROPERTY.USER_PROPS',
50 'PROP_IS_LOCATION' => 'PROPERTY.IS_LOCATION',
51 'PROP_PROPS_GROUP_ID' => 'PROPERTY.PROPS_GROUP_ID',
52 'PROP_DESCRIPTION' => 'PROPERTY.DESCRIPTION',
53 'PROP_IS_EMAIL' => 'PROPERTY.IS_EMAIL',
54 'PROP_IS_PROFILE_NAME' => 'PROPERTY.IS_PROFILE_NAME',
55 'PROP_IS_PAYER' => 'PROPERTY.IS_PAYER',
56 'PROP_IS_LOCATION4TAX' => 'PROPERTY.IS_LOCATION4TAX',
57 'PROP_IS_ZIP' => 'PROPERTY.IS_ZIP',
58 'PROP_CODE' => 'PROPERTY.CODE',
59 'PROP_ACTIVE' => 'PROPERTY.ACTIVE',
60 'PROP_UTIL' => 'PROPERTY.UTIL',
61 // for converter
62 'TYPE' => 'PROPERTY.TYPE',
63 'SETTINGS' => 'PROPERTY.SETTINGS',
64 'MULTIPLE' => 'PROPERTY.MULTIPLE',
65 // for GetOrderProps
66 'PROPERTY_NAME' => 'PROPERTY.NAME',
67 'PROPS_GROUP_ID' => 'PROPERTY.PROPS_GROUP_ID',
68 'INPUT_FIELD_LOCATION' => 'PROPERTY.INPUT_FIELD_LOCATION',
69 'IS_LOCATION' => 'PROPERTY.IS_LOCATION',
70 'IS_EMAIL' => 'PROPERTY.IS_EMAIL',
71 'IS_PROFILE_NAME' => 'PROPERTY.IS_PROFILE_NAME',
72 'IS_PAYER' => 'PROPERTY.IS_PAYER',
73 'IS_ZIP' => 'PROPERTY.IS_ZIP',
74 'ACTIVE' => 'PROPERTY.ACTIVE',
75 'UTIL' => 'PROPERTY.UTIL',
76 'GROUP_SORT' => 'PROPERTY.GROUP.SORT',
77 'GROUP_NAME' => 'PROPERTY.GROUP.NAME',
78 ));
79
80 // relations for GetOrderRelatedProps
81
82 $relationFilter = array();
83
84 if (!empty($arFilter['PAYSYSTEM_ID']))
85 {
86 $relationFilter []= array(
87 '=PROPERTY.Bitrix\Sale\Internals\OrderPropsRelationTable:lPROPERTY.ENTITY_TYPE' => 'P',
88 '=PROPERTY.Bitrix\Sale\Internals\OrderPropsRelationTable:lPROPERTY.ENTITY_ID' => $arFilter['PAYSYSTEM_ID'],
89 );
90 }
91
92 if (!empty($arFilter['DELIVERY_ID']))
93 {
94 $relationFilter['LOGIC'] = 'OR';
95 $relationFilter []= array(
96 '=PROPERTY.Bitrix\Sale\Internals\OrderPropsRelationTable:lPROPERTY.ENTITY_TYPE' => 'D',
97 '=PROPERTY.Bitrix\Sale\Internals\OrderPropsRelationTable:lPROPERTY.ENTITY_ID' => $arFilter['DELIVERY_ID'],
98 );
99 }
100
101 if ($relationFilter)
102 {
103 $query->addFilter(null, $relationFilter);
104 }
105
107
108 // execute
109
110 $query->prepare($arOrder, $arFilter, $arGroupBy, $arSelectFields);
111
112 if ($query->counted())
113 {
114 return $query->exec()->getSelectedRowsCount();
115 }
116 else
117 {
119 $adapter = new CSaleOrderPropsValueAdapter($query->getSelectNamesAssoc() + array_flip($arSelectFields));
120 $adapter->addFieldProxy('VALUE');
121 $result->addFetchAdapter($adapter);
122
123 if (! $query->aggregated())
124 {
125 $query->addAliasSelect('TYPE');
126 $query->addAliasSelect('SETTINGS');
127 $query->addAliasSelect('MULTIPLE');
128
129 if ($relationFilter)
130 {
131 $query->registerRuntimeField('PROPERTY_ID', new Entity\ExpressionField('PROPERTY_ID', 'DISTINCT(%s)', 'ID'));
132 $sel = $query->getSelect();
133 array_unshift($sel, 'PROPERTY_ID');
134 $query->setSelect($sel);
135 }
136 }
137
138 return $query->compatibleExec($result, $arNavStartParams);
139 }
140 }
141
142 public static function GetByID($ID)
143 {
144 return $ID
145 ? self::GetList(array(), array('ID' => $ID))->Fetch()
146 : false;
147 }
148
149 public static function GetOrderProps($ORDER_ID)
150 {
151 return self::GetList(
152 array('GROUP_SORT' => 'ASC', 'GROUP_NAME' => 'ASC', 'PROP_SORT' => 'ASC', 'PROPERTY_NAME' => 'ASC', 'PROP_ID' => 'ASC'),
153 array('ORDER_ID' => $ORDER_ID),
154 false, false,
155 array(
156 'ID', 'ORDER_ID', 'ORDER_PROPS_ID', 'NAME', 'VALUE', 'CODE',
157 'PROPERTY_NAME', 'TYPE', 'PROPS_GROUP_ID', 'INPUT_FIELD_LOCATION', 'IS_LOCATION', 'IS_EMAIL', 'IS_PROFILE_NAME', 'IS_PAYER', 'IS_ZIP', 'ACTIVE', 'UTIL',
158 'GROUP_NAME', 'GROUP_SORT',
159 'PROP_SORT', 'PROP_ID'
160 )
161 );
162 }
163
164 public static function GetOrderRelatedProps($ORDER_ID, $arFilter = array())
165 {
166 if (! is_array($arFilter))
167 $arFilter = array();
168
169 return self::GetList(
170 array('GROUP_SORT' => 'ASC', 'GROUP_NAME' => 'ASC', 'PROP_SORT' => 'ASC', 'PROPERTY_NAME' => 'ASC', 'PROP_ID' => 'ASC'),
171 array('ORDER_ID' => $ORDER_ID, 'PAYSYSTEM_ID' => $arFilter['PAYSYSTEM_ID'], 'DELIVERY_ID' => $arFilter['DELIVERY_ID']),
172 false, false,
173 array(
174 'ID', 'ORDER_ID', 'ORDER_PROPS_ID', 'NAME', 'VALUE', 'CODE',
175 'PROPERTY_NAME', 'TYPE', 'PROPS_GROUP_ID', 'INPUT_FIELD_LOCATION', 'IS_LOCATION', 'IS_EMAIL', 'IS_PROFILE_NAME', 'IS_PAYER', 'IS_ZIP', 'ACTIVE', 'UTIL',
176 'GROUP_NAME', 'GROUP_SORT',
177 'PROP_SORT', 'PROP_ID'
178 )
179 );
180 }
181
182 public static function CheckFields($ACTION, &$arFields, $ID = 0)
183 {
184 if ((is_set($arFields, "ORDER_ID") || $ACTION=="ADD") && intval($arFields["ORDER_ID"]) <= 0)
185 {
186 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGOPV_EMPTY_ORDER_ID"), "EMPTY_ORDER_ID");
187 return false;
188 }
189
190 if ((is_set($arFields, "ORDER_PROPS_ID") || $ACTION=="ADD") && intval($arFields["ORDER_PROPS_ID"]) <= 0)
191 {
192 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGOPV_EMPTY_PROP_ID"), "EMPTY_ORDER_PROPS_ID");
193 return false;
194 }
195
196 if (is_set($arFields, "ORDER_ID"))
197 {
198 if (!($arOrder = CSaleOrder::GetByID($arFields["ORDER_ID"])))
199 {
200 $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["ORDER_ID"], GetMessage("SKGOPV_NO_ORDER_ID")), "ERROR_NO_ORDER");
201 return false;
202 }
203 }
204
205 if (is_set($arFields, "ORDER_PROPS_ID"))
206 {
207 if (!($arOrder = CSaleOrderProps::GetByID($arFields["ORDER_PROPS_ID"])))
208 {
209 $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["ORDER_PROPS_ID"], GetMessage("SKGOPV_NO_PROP_ID")), "ERROR_NO_PROPERY");
210 return false;
211 }
212
213 if (is_set($arFields, "ORDER_ID"))
214 {
215 $arFilter = Array(
216 "ORDER_ID" => $arFields["ORDER_ID"],
217 "ORDER_PROPS_ID" => $arFields["ORDER_PROPS_ID"],
218 );
219 if(intval($ID) > 0)
220 $arFilter["!ID"] = $ID;
222 if($arP = $dbP->Fetch())
223 {
224 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGOPV_DUPLICATE_PROP_ID", Array("#ID#" => $arFields["ORDER_PROPS_ID"], "#ORDER_ID#" => $arFields["ORDER_ID"])), "ERROR_DUPLICATE_PROP_ID");
225 return false;
226 }
227 }
228 }
229
230 if (
231 $ACTION === 'UPDATE'
232 && $ID > 0
233 && !self::GetByID($ID)
234 )
235 {
236 return false;
237 }
238
239 return true;
240 }
241
242 public static function Add($arFields)
243 {
244 if (! self::CheckFields('ADD', $arFields, 0))
245 return false;
246
247 // location ID to CODE, VALUE is always present
248 if((string) $arFields['VALUE'] != '')
249 $arFields['VALUE'] = self::translateLocationIDToCode($arFields['VALUE'], $arFields['ORDER_PROPS_ID']);
250
251 if (!empty($arFields['ORDER_PROPS_ID']) && intval($arFields['ORDER_PROPS_ID']) > 0 && !empty($arFields['VALUE']))
252 {
253 if ($value = self::correctValueToMultiple($arFields['ORDER_PROPS_ID'], $arFields['VALUE']))
254 {
255 $arFields['VALUE'] = $value;
256 }
257 }
258
260
261 $arFields['ENTITY_ID'] = $arFields['ORDER_ID'];
263
265 if ($res->isSuccess())
266 {
267 return $res->getId();
268 }
269
270 return 0;
271 }
272
273 public static function Update($ID, $arFields)
274 {
275 if (! self::CheckFields('UPDATE', $arFields, $ID))
276 return false;
277
278 // location ID to CODE
279 if((string) $arFields['VALUE'] != '')
280 {
281 if((string) $arFields['ORDER_PROPS_ID'] != '')
282 $propId = intval($arFields['ORDER_PROPS_ID']);
283 else
284 {
285 $propValue = self::GetByID($ID);
286 $propId = $propValue['ORDER_PROPS_ID'];
287 }
288
289 $arFields['VALUE'] = self::translateLocationIDToCode($arFields['VALUE'], $propId);
290 }
291
292 if (!empty($arFields['ORDER_PROPS_ID']) && intval($arFields['ORDER_PROPS_ID']) > 0 && !empty($arFields['VALUE']))
293 {
294 if ($value = self::correctValueToMultiple($arFields['ORDER_PROPS_ID'], $arFields['VALUE']))
295 {
296 $arFields['VALUE'] = $value;
297 }
298 }
299
301
302 if (isset($arFields['ORDER_ID']))
303 {
304 $arFields['ENTITY_ID'] = $arFields['ORDER_ID'];
305 }
306
308 if ($res->isSuccess())
309 {
310 return $res->getId();
311 }
312
313 return 0;
314 }
315
323 private static function correctValueToMultiple($id, $value)
324 {
325 $output = null;
326
327 $res = Internals\OrderPropsTable::getList(array(
328 'select' => array('TYPE', 'MULTIPLE'),
329 'filter' => array(
330 'ID' => $id
331 ),
332 'limit' => 1));
333 if($propertyData = $res->fetch())
334 {
335 if (($propertyData["MULTIPLE"] == 'Y' || $propertyData["TYPE"] == 'MULTISELECT') && !is_array($value))
336 {
337 $values = explode(',', $value);
338 if (!empty($values) && is_array($values))
339 {
340 $output = array();
341 foreach ($values as $value)
342 {
343 $output[] = trim($value);
344 }
345 }
346 }
347 }
348 return $output;
349 }
350
351 public static function translateLocationIDToCode($id, $orderPropId)
352 {
353 $prop = CSaleOrderProps::GetByID($orderPropId);
354 if(isset($prop['TYPE']) && $prop['TYPE'] == 'LOCATION')
356
357 return $id;
358 }
359
360 public static function Delete($ID)
361 {
362 global $DB;
363 $ID = intval($ID);
364
365 $strSql = "DELETE FROM b_sale_order_props_value WHERE ID = ".$ID." ";
366 return $DB->Query($strSql, True);
367 }
368
369 public static function DeleteByOrder($orderID)
370 {
371 global $DB;
372 $orderID = intval($orderID);
373
374 $strSql = "DELETE FROM b_sale_order_props_value WHERE ORDER_ID = ".$orderID." ";
375 return $DB->Query($strSql, True);
376 }
377}
378
380final class CSaleOrderPropsValueAdapter implements Compatible\FetchAdapter
381{
382 private $fieldProxy = array();
383 private array $select;
384
385 function __construct(array $select)
386 {
387 $this->select = $select;
388 }
389
390 public function addFieldProxy($field)
391 {
392 if((string) $field == '')
393 return false;
394
395 $this->fieldProxy['PROXY_'.$field] = $field;
396
397 return true;
398 }
399
400 public function adapt(array $newProperty)
401 {
402 if (! isset($newProperty['TYPE']))
403 return $newProperty;
404
405 if(is_array($newProperty))
406 {
407 foreach($newProperty as $k => $v)
408 {
409 if(isset($this->fieldProxy[$k]))
410 {
411 unset($newProperty[$k]);
412 $newProperty[$this->fieldProxy[$k]] = $v;
413 }
414 }
415 }
416
417 $oldProperty = CSaleOrderPropsAdapter::convertNewToOld($newProperty);
418
419 if (array_key_exists('VALUE', $newProperty))
420 {
421 $oldProperty['VALUE'] = CSaleOrderPropsAdapter::getOldValue($newProperty['VALUE'], $newProperty['TYPE']);
422 }
423
424 if (array_key_exists('TYPE', $oldProperty))
425 {
426 $oldProperty['PROP_TYPE' ] = $oldProperty['TYPE' ];
427 }
428
429 if (array_key_exists('SIZE1', $oldProperty))
430 {
431 $oldProperty['PROP_SIZE1'] = $oldProperty['SIZE1'];
432 }
433
434 if (array_key_exists('SIZE2', $oldProperty))
435 {
436 $oldProperty['PROP_SIZE2'] = $oldProperty['SIZE2'];
437 }
438 return array_intersect_key($oldProperty, $this->select);
439 }
440
441 public static $allFields = array('ORDER_ID'=>1, 'ORDER_PROPS_ID'=>1, 'NAME'=>1, 'VALUE'=>1, 'CODE'=>1);
442}
return select
Определения access_edit.php:440
static getEntity()
Определения datamanager.php:65
static add(array $data)
Определения datamanager.php:877
static update($primary, array $data)
Определения datamanager.php:1256
const ENTITY_ORDER
Определения registry.php:20
static tryTranslateIDToCode($id)
Определения location.php:281
static Delete($ID)
Определения order_props_values.php:360
static GetOrderRelatedProps($ORDER_ID, $arFilter=array())
Определения order_props_values.php:164
static Add($arFields)
Определения order_props_values.php:242
static GetByID($ID)
Определения order_props_values.php:142
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения order_props_values.php:12
static CheckFields($ACTION, &$arFields, $ID=0)
Определения order_props_values.php:182
static GetOrderProps($ORDER_ID)
Определения order_props_values.php:149
static translateLocationIDToCode($id, $orderPropId)
Определения order_props_values.php:351
static DeleteByOrder($orderID)
Определения order_props_values.php:369
static Update($ID, $arFields)
Определения order_props_values.php:273
static convertNewToOld(array $property)
Определения order_props.php:1067
static getOldValue($value, $type)
Определения order_props.php:1052
static GetByID($ID)
Определения order_props.php:627
__construct(array $select)
Определения order_props_values.php:385
adapt(array $newProperty)
Определения order_props_values.php:400
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
$query
Определения get_search.php:11
if($ajaxMode) $ID
Определения get_user.php:27
$output
Определения options.php:436
global $DB
Определения cron_frame.php:29
$ACTION
Определения csv_new_setup.php:27
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
Определения ufield.php:9
$GLOBALS['____1690880296']
Определения license.php:1
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$ORDER_ID
Определения html.php:2
$orderID
Определения result.php:9
$k
Определения template_pdf.php:567
$arFilter
Определения user_search.php:106