Bitrix-D7  20.5.0
Класс PropertyBase
Граф наследования:PropertyBase:
Property

Открытые члены

 getField ($name)
 
 getGroupInfo ()
 
 __construct (array $property, array $relation=null)
 PropertyBase constructor. Подробнее...
 
 normalizeValue ($value)
 
 checkValue ($value)
 
 checkRequiredValue ($value)
 
 getPreparedValueForSave (PropertyValueBase $propertyValue)
 
 getViewHtml ($value)
 
 getEditHtml (array $values)
 
 getFields ()
 
 getId ()
 
 getPersonTypeId ()
 
 getGroupId ()
 
 getName ()
 
 getRelations ()
 
 getDescription ()
 
 getType ()
 
 isRequired ()
 
 isUtil ()
 
 getOptions ()
 
 onValueDelete ($value)
 

Открытые статические члены

static getRegistryType ()
 
static getList (array $parameters=array())
 
static getObjectById ($propertyId)
 
static getMeaningfulValues ($personTypeId, $request)
 

Защищенные члены

 loadOptions ()
 
 loadRelations ()
 

Защищенные данные

 $fields = []
 

Подробное описание

См. определение в файле propertybase.php строка 15

Конструктор(ы)

◆ __construct()

__construct ( array  $property,
array  $relation = null 
)

PropertyBase constructor.

Аргументы
array$property
array | null$relation
Исключения
Main

См. определение в файле propertybase.php строка 115

116  {
117  if (is_array($property['SETTINGS']))
118  {
119  $property += $property['SETTINGS'];
120  unset ($property['SETTINGS']);
121  }
122 
123  $this->fields = $property;
124 
125  if ($relation)
126  {
127  $this->fields['RELATION'] = $relation;
128  }
129  else
130  {
131  $relation = $this->loadRelations();
132  if ($relation)
133  {
134  $this->fields['RELATION'] = $relation;
135  }
136  }
137 
138  if ($this->fields['TYPE'] === 'ENUM')
139  {
140  if (!isset($property['OPTIONS']))
141  {
142  $this->fields['OPTIONS'] = $this->loadOptions();
143  }
144  }
145 
146  $this->fields['DEFAULT_VALUE'] = $this->normalizeValue($this->fields['DEFAULT_VALUE']);
147  }

Методы

◆ checkRequiredValue()

checkRequiredValue (   $value)
Аргументы
$key
$value
Возвращает
Result
Исключения
Main

См. определение в файле propertybase.php строка 391

392  {
393  static $errors = [];
394 
395  $result = new Result();
396 
397  $errorList = Input\Manager::getRequiredError($this->fields, $value);
398 
399  foreach ($errorList as $error)
400  {
401  if (is_array($error))
402  {
403  foreach ($error as $message)
404  {
405  $result->addError(new ResultError($this->getField('NAME').' '.$message));
406  $errors[$this->getId()][] = $message;
407  }
408  }
409  else
410  {
411  $result->addError(new ResultError($this->getName().' '.$error));
412  $errors[$this->getId()][] = $error;
413  }
414  }
415 
416  return $result;
417  }

◆ checkValue()

checkValue (   $value)
Аргументы
$value
Возвращает
Result
Исключения
Main

См. определение в файле propertybase.php строка 319

320  {
321  $result = new Result();
322 
323  static $errors = [];
324 
325  if (
326  $this->getField('TYPE') === "STRING"
327  && (int)$this->getField('MAXLENGTH') <= 0
328  )
329  {
330  $this->fields['MAXLENGTH'] = 500;
331  }
332 
333  $error = Input\Manager::getError($this->fields, $value);
334 
335  if (!is_array($error))
336  {
337  $error = array($error);
338  }
339 
340  foreach ($error as $item)
341  {
342  if (!is_array($item))
343  {
344  $item = [$item];
345  }
346 
347  foreach ($item as $message)
348  {
349  if (isset($errorsList[$this->getId()]) && in_array($message, $errors[$this->getId()]))
350  {
351  continue;
352  }
353 
354  $result->addError(
355  new Main\Error(
357  "SALE_PROPERTY_ERROR",
358  ["#PROPERTY_NAME#" => $this->getField('NAME'), "#ERROR_MESSAGE#" => $message]
359  )
360  )
361  );
362  }
363  }
364 
365  if (
366  !is_array($value)
367  && $this->getField('IS_EMAIL') === 'Y'
368  && trim($value) !== ''
369  && !check_email(trim($value), true)
370  )
371  {
372  $result->addError(new Main\Error(
373  str_replace(
374  ["#EMAIL#", "#NAME#"],
375  [htmlspecialcharsbx($value), htmlspecialcharsbx($this->getField('NAME'))],
376  Loc::getMessage("SALE_GOPE_WRONG_EMAIL")
377  )
378  ));
379  }
380 
381  return $result;
382  }
static getMessage($code, $replace=null, $language=null)
Returns translation by message code.
Definition: loc.php:29
trait Error
\IErrorable

◆ getDescription()

getDescription ( )
Возвращает
mixed

См. определение в файле propertybase.php строка 562

563  {
564  return $this->getField('DESCRIPTION');
565  }

◆ getEditHtml()

getEditHtml ( array  $values)
Аргументы
array$values
Возвращает
string
Исключения
Main

См. определение в файле propertybase.php строка 505

506  {
507  $key = isset($this->property["ID"]) ? $this->getId() : "n".$values['ORDER_PROPS_ID'];
508  return Input\Manager::getEditHtml("PROPERTIES[".$key."]", $this->fields, $values['VALUE']);
509  }

◆ getField()

getField (   $name)
Аргументы
$name
Возвращает
mixed

См. определение в файле propertybase.php строка 32

33  {
34  return $this->fields[$name];
35  }

◆ getFields()

getFields ( )
Возвращает
mixed

См. определение в файле propertybase.php строка 514

515  {
516  return $this->fields;
517  }

◆ getGroupId()

getGroupId ( )
Возвращает
mixed

См. определение в файле propertybase.php строка 538

539  {
540  return $this->getField('PROPS_GROUP_ID');
541  }

◆ getGroupInfo()

getGroupInfo ( )
Исключения
Main

См. определение в файле propertybase.php строка 77

78  {
79  static $groupList = [];
80 
81  if (!isset($groupList[$this->getPersonTypeId()]))
82  {
84  'filter' => [
85  '=PERSON_TYPE_ID' => $this->getPersonTypeId()
86  ]
87  ]);
88  while ($group = $dbRes->fetch())
89  {
90  $groupList[$this->getPersonTypeId()][$group['ID']] = $group;
91  }
92  }
93 
94  $groupId = $this->getGroupId();
95 
96  if (!isset($groupList[$this->getPersonTypeId()][$groupId]))
97  {
98  return [
99  'ID' => 0,
100  'NAME' => Loc::getMessage('SOP_UNKNOWN_GROUP'),
101  ];
102  }
103 
104  return $groupList[$this->getPersonTypeId()][$groupId];
105  }
static getList(array $parameters=array())
Executes the query and returns selection by parameters of the query.

◆ getId()

getId ( )
Возвращает
mixed

См. определение в файле propertybase.php строка 522

523  {
524  return $this->getField('ID');
525  }

◆ getList()

static getList ( array  $parameters = array())
static
Аргументы
array$parameters
Исключения
Main

Переопределяется в Property.

См. определение в файле propertybase.php строка 42

43  {
44  throw new Main\NotImplementedException();
45  }

◆ getMeaningfulValues()

static getMeaningfulValues (   $personTypeId,
  $request 
)
static
Аргументы
$personTypeId
$request
Возвращает
array
Исключения
Main

См. определение в файле propertybase.php строка 274

275  {
276  $result = [];
277 
278  $personTypeId = intval($personTypeId);
279  if ($personTypeId <= 0 || !is_array($request))
280  {
281  return [];
282  }
283 
284  $dbRes = static::getList([
285  'select' => [
286  'ID', 'IS_LOCATION', 'IS_EMAIL', 'IS_PROFILE_NAME',
287  'IS_PAYER', 'IS_LOCATION4TAX', 'IS_ZIP', 'IS_PHONE',
288  'IS_ADDRESS',
289  ],
290  'filter' => [
291  '=ACTIVE' => 'Y',
292  '=UTIL' => 'N',
293  '=PERSON_TYPE_ID' => $personTypeId
294  ]
295  ]);
296 
297  while ($row = $dbRes->fetch())
298  {
299  if (array_key_exists($row["ID"], $request))
300  {
301  foreach ($row as $key => $value)
302  {
303  if (($value === "Y") && (mb_substr($key, 0, 3) === "IS_"))
304  {
305  $result[mb_substr($key, 3)] = $request[$row["ID"]];
306  }
307  }
308  }
309  }
310 
311  return $result;
312  }

◆ getName()

getName ( )
Возвращает
mixed

См. определение в файле propertybase.php строка 546

547  {
548  return $this->getField('NAME');
549  }

◆ getObjectById()

static getObjectById (   $propertyId)
static
Аргументы
$propertyId
Возвращает
PropertyBase
Исключения
Main

См. определение в файле propertybase.php строка 55

56  {
57  $dbRes = static::getList([
58  'filter' => [
59  '=ID' => $propertyId
60  ]
61  ]);
62 
63  $data = $dbRes->fetch();
64  if ($data)
65  {
66  return new static($data);
67  }
68 
69  return null;
70  }

◆ getOptions()

getOptions ( )
Возвращает
mixed

См. определение в файле propertybase.php строка 594

595  {
596  return $this->getField('OPTIONS');
597  }

◆ getPersonTypeId()

getPersonTypeId ( )
Возвращает
mixed

См. определение в файле propertybase.php строка 530

531  {
532  return $this->getField('PERSON_TYPE_ID');
533  }

◆ getPreparedValueForSave()

getPreparedValueForSave ( PropertyValueBase  $propertyValue)
Аргументы
PropertyValueBase$propertyValue
Возвращает
array|mixed|string|null
Исключения
Main

См. определение в файле propertybase.php строка 425

426  {
427  $value = $propertyValue->getField('VALUE');
428 
429  if ($this->getType() == 'FILE')
430  {
431  $value = Input\File::asMultiple($value);
432 
433  foreach ($value as $i => $file)
434  {
435  if (Input\File::isDeletedSingle($file))
436  {
437  unset($value[$i]);
438  }
439  else
440  {
441  if (Input\File::isUploadedSingle($file))
442  {
443  $fileId = \CFile::SaveFile(array('MODULE_ID' => 'sale') + $file, 'sale/order/properties');
444  if (is_numeric($fileId))
445  {
446  $file = $fileId;
447  }
448  }
449 
450  $value[$i] = Input\File::loadInfoSingle($file);
451  }
452  }
453 
454  $property = $this->getFields();
455  $propertyValue->setField('VALUE', $value);
456  $value = Input\File::getValue($property, $value);
457 
458  $originalFields = $propertyValue->getFields()->getOriginalValues();
459  foreach (
460  array_diff(
461  Input\File::asMultiple(Input\File::getValue($property, $originalFields['VALUE'])),
462  Input\File::asMultiple($value),
463  Input\File::asMultiple(Input\File::getValue($property, $property['DEFAULT_VALUE']))
464  )
465  as $fileId
466  )
467  {
468  \CFile::Delete($fileId);
469  }
470  }
471  elseif ($this->getType() == 'ADDRESS' && Main\Loader::includeModule('location'))
472  {
473  if (is_array($value))
474  {
475  $address = Address::fromArray($value);
476 
477  $result = $address->save();
478  if (!$result->isSuccess())
479  {
480  return null;
481  }
482 
483  return (int)$result->getId();
484  }
485  }
486 
487  return $value;
488  }
static includeModule($moduleName)
Includes a module by its name.

◆ getRegistryType()

static getRegistryType ( )
static
Исключения
Main

Переопределяется в Property.

См. определение в файле propertybase.php строка 23

24  {
25  throw new Main\NotImplementedException();
26  }

◆ getRelations()

getRelations ( )
Возвращает
mixed

См. определение в файле propertybase.php строка 554

555  {
556  return $this->getField('RELATION');
557  }

◆ getType()

getType ( )
Возвращает
mixed

См. определение в файле propertybase.php строка 570

571  {
572  return $this->getField('TYPE');
573  }

◆ getViewHtml()

getViewHtml (   $value)
Аргументы
$value
Возвращает
string
Исключения
Main

См. определение в файле propertybase.php строка 495

496  {
497  return Input\Manager::getViewHtml($this->fields, $value);
498  }

◆ isRequired()

isRequired ( )
Возвращает
bool

См. определение в файле propertybase.php строка 578

579  {
580  return $this->getField('REQUIRED') === 'Y';
581  }

◆ isUtil()

isUtil ( )
Возвращает
bool

См. определение в файле propertybase.php строка 586

587  {
588  return $this->getField('UTIL') === 'Y';
589  }

◆ loadOptions()

loadOptions ( )
protected
Возвращает
array
Исключения
Main

См. определение в файле propertybase.php строка 225

226  {
227  $options = array();
228 
230  'select' => ['VALUE', 'NAME'],
231  'filter' => ['ORDER_PROPS_ID' => $this->getId()],
232  'order' => ['SORT' => 'ASC']
233  ]);
234 
235  while ($data = $dbRes->fetch())
236  {
237  $options[$data['VALUE']] = $data['NAME'];
238  }
239 
240  return $options;
241  }

◆ loadRelations()

loadRelations ( )
protected
Возвращает
array
Исключения
Main

См. определение в файле propertybase.php строка 249

250  {
251  $relations = array();
252 
253  $dbRes = Internals\OrderPropsRelationTable::getList([
254  'select' => ['ENTITY_ID', 'ENTITY_TYPE'],
255  'filter' => ['=PROPERTY_ID' => $this->getId()]
256  ]);
257 
258  while ($data = $dbRes->fetch())
259  {
260  $relations[] = $data;
261  }
262 
263  return $relations;
264  }

◆ normalizeValue()

normalizeValue (   $value)
Аргументы
$value
Возвращает
array|mixed|string|null
Исключения
Main

См. определение в файле propertybase.php строка 157

158  {
159  if ($this->fields['TYPE'] === 'FILE')
160  {
161  return Input\File::loadInfo($value);
162  }
163  elseif ($this->fields['TYPE'] === 'ADDRESS' && Main\Loader::includeModule('location'))
164  {
165  if (is_array($value))
166  {
167  /**
168  * Already normalized
169  */
170  return $value;
171  }
172  elseif (is_numeric($value))
173  {
174  /**
175  * DB value
176  */
177  $address = Address::load((int)$value);
178 
179  $value = ($address instanceof Address) ? $address->toArray() : null;
180  }
181  elseif (is_string($value) && !empty($value))
182  {
183  /**
184  * JSON most likely
185  */
186  return Main\Web\Json::decode(
187  Main\Text\Encoding::convertEncoding(
188  $value,
189  SITE_CHARSET,
190  'UTF-8'
191  )
192  );
193  }
194  }
195  elseif ($this->fields['TYPE'] === "STRING")
196  {
197  if ($this->fields['IS_EMAIL'] === "Y" && !empty($value))
198  {
199  $value = trim((string)$value);
200  }
201 
202  if (Input\StringInput::isMultiple($value))
203  {
204  foreach ($value as $key => $data)
205  {
206  if (Input\StringInput::isDeletedSingle($data))
207  {
208  unset($value[$key]);
209  }
210  }
211  }
212 
213  return $value;
214  }
215 
216  return $value;
217  }
static convertEncoding($data, $charsetFrom, $charsetTo)
Converts data from a source encoding to a target encoding.
Definition: encoding.php:17
static decode($data)
Takes a JSON encoded string and converts it into a PHP variable.
Definition: web/json.php:51
static isMultiple($value)
Check if value is multiple.

◆ onValueDelete()

onValueDelete (   $value)
Аргументы
$value

См. определение в файле propertybase.php строка 602

603  {
604  if ($this->getType() === 'FILE')
605  {
606  foreach (Input\File::asMultiple($value) as $fileId)
607  {
608  \CFile::Delete($fileId);
609  }
610  }
611  }

Поля

◆ $fields

$fields = []
protected

См. определение в файле propertybase.php строка 17


Объявления и описания членов класса находятся в файле: