25 protected $dataObject;
37 protected static function mirrorDataEntityFields():
array
48 if ($this->dataObject ===
null)
54 $dataClass = static::getDataClass();
55 $entityObjectClass = $dataClass::getObjectClass();
56 $this->dataObject =
new $entityObjectClass;
59 return $this->dataObject;
68 $this->dataObject = $dataObject;
75 if ($this->dataObject)
77 $fields += $this->dataObject->collectValues(Values::ACTUAL);
80 $this->dataObject = static::getDataClass()::getObjectClass()::wakeUp(
$fields);
88 public function load($source):
Result
92 if (is_numeric($source))
94 $source = (int)$source;
99 $dataClass = static::getDataClass();
100 $dataObject = $dataClass::getByPrimary($source)->fetchObject();
104 && $dataObject->hasId()
115 elseif ($source instanceof EntityObject)
120 elseif (is_array($source))
129 if (
$result->isSuccess() && $this->getPrimaryId())
150 foreach (static::mirrorDataEntityFields() as $field)
153 !isset($field[
'primary'])
154 && !isset($field[
'alias'])
155 && isset($field[
'field'], $field[
'default'])
156 && !isset($this->{$field[
'field']})
157 && ($default = $field[
'default'])
158 && is_string($default)
159 && is_callable([$this, $default])
162 $this->{$field[
'field']} = $this->$default();
178 foreach (static::mirrorDataEntityFields() as $offset => $field)
180 if (isset($field[
'alias']) || !isset($field[
'field']))
185 if (!empty($fieldsMask) && !in_array($offset, $fieldsMask,
true))
190 if (isset($entityFields[$offset]))
193 isset($field[
'loadFilter'])
194 && ($loadFilter = $field[
'loadFilter'])
195 && is_string($loadFilter)
196 && is_callable([$this, $loadFilter])
199 $this->{$field[
'field']} = $this->$loadFilter($entityFields[$offset]);
203 $this->{$field[
'field']} = $entityFields[$offset];
208 if (
$result->isSuccess() && $this->getPrimaryId())
223 $fieldsToFill = $source;
227 [$ormFields, $fieldsToFill] = $this->separateFieldsOrmAndOther($source);
235 if (!empty($fieldsToFill))
237 $this->
fill($fieldsToFill);
240 if (
$result->isSuccess() && $this->getPrimaryId())
250 $fields = static::mirrorDataEntityFields();
252 foreach ($source as
$key => $value)
261 if (isset($field[
'primary']) && $field[
'primary'])
270 protected function separateFieldsOrmAndOther(
array $source):
array
272 $fields = static::mirrorDataEntityFields();
274 $entity = static::getDataClass()::getEntity();
278 foreach ($source as
$key => $value)
295 if (is_string($value) && !is_numeric($value))
297 $value = DateTime::tryParse($value) ?? DateTime::tryParse($value,
'Y-m-d H:i:s') ?? $value;
299 if (is_numeric($value))
301 $value = DateTime::createFromTimestamp((
int)$value);
304 $ormFields[$fieldName] =
$value;
312 return [$ormFields, $otherFields];
319 foreach (static::mirrorDataEntityFields() as
$offset => $field)
321 if (isset($field[
'primary']) || isset($field[
'alias']) || (isset($field[
'skipSave']) && $field[
'skipSave'] ===
true))
327 isset($field[
'beforeSave'])
328 && ($beforeSave = $field[
'beforeSave'])
329 && is_string($beforeSave)
330 && is_callable([$this, $beforeSave])
334 $check = $this->$beforeSave();
335 if (!$check->isSuccess())
337 $result->addErrors($check->getErrors());
343 isset($field[
'field'])
344 && (isset($this->{$field[
'field']}) || $field[
'nullable'] ===
true)
348 isset($field[
'saveFilter'])
349 && ($saveFilter = $field[
'saveFilter'])
350 && is_string($saveFilter)
351 && is_callable([$this, $saveFilter])
373 $result = $this->prepareFields();
380 return $result->setResult([
'IS_CHANGES' =>
false]);
382 if (
$result->getData()[
'SKIP_SAVE'] ??
false)
387 $saveResult = $this->getDataEntity()->save();
388 if ($saveResult->isSuccess())
392 $this->setPrimaryId((
int)$saveResult->getId());
399 $this->
getRegistry()[$this->getPrimaryId()] = $this;
406 $result->addErrors($saveResult->getErrors());
424 if ($this->getDataEntity()->hasId())
426 $deleteResult = $this->getDataEntity()->delete();
427 if (!$deleteResult->isSuccess())
429 return $result->addErrors($deleteResult->getErrors());
438 unset($this->
getRegistry()[$this->getPrimaryId()]);
460 $this->markedDrop =
false;
481 $this->markedDrop =
true;
496 foreach ($fieldsToFill as $fieldName)
498 if ($this->getDataEntity()->entity->hasField($fieldName))
500 $this->getDataEntity()->unset($fieldName);
503 $this->getDataEntity()->fill($fieldsToFill);
517 $fields = static::mirrorDataEntityFields();
519 foreach (
$fields as $offset => $field)
521 if (isset($source[$offset]))
523 if (isset($field[
'primary']))
527 if (isset($field[
'alias']))
529 $field =
$fields[$field[
'alias']];
533 && ($setter = $field[
'set'])
534 && is_string($setter)
535 && is_callable([$this, $setter])
538 $this->$setter($source[$offset]);
540 elseif (isset($field[
'field']))
542 $this->{$field[
'field']} = $source[$offset];
565 $fields = static::mirrorDataEntityFields();
567 foreach (
$fields as $offset => $field)
569 if (isset($field[
'alias']))
575 && ($getter = $field[
'get'])
576 && is_string($getter)
577 && is_callable([$this, $getter])
580 $value = $this->$getter();
584 $value = $this->{$field[
'field']};
587 if (is_object($value) && !($value instanceof
DateTime))
589 if ($recursive && method_exists($value,
'toArray'))
591 $value = $value->toArray($recursive);
collectValues($valuesType=Values::ALL, $fieldsMask=FieldTypeMask::ALL, $recursive=false)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
onAfterOrmUpdate(array $fields)
toArray(bool $recursive=false)
updateState(?array $fieldsToFill=null)
fillActual(array $fieldsToFill)
resetDataEntity(array $preselectedFields=[])
setDataEntity(EntityObject $dataObject)
initByDataEntity(EntityObject $dataObject, ?array $fieldsMask=null)
markChanged(?bool $state=null)
trait ActiveRecordImplementation
hasPrimary(array $source)
initByArray(array $source)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key