26 static::$isCheckUserFields =
false;
39 ->configureAutocomplete(),
45 if(!static::$temporaryStorage)
50 return static::$temporaryStorage;
58 if (!(static::getEntity()->hasField(
$k) && static::getEntity()->getField(
$k) instanceof
ScalarField))
61 'Field `%s` not found in entity when trying to query %s row.',
62 $k, static::getEntity()->getName()
105 if (!$userFieldManager)
107 static::$isCheckUserFields =
true;
113 $oldData = static::getByPrimary($id)->fetch();
114 static::getTemporaryStorage()->saveData($id, $oldData);
116 static::$isCheckUserFields
117 && !$userFieldManager->checkFieldsWithOldData(
118 static::getItemUserFieldEntityId(),
124 $result->addError(static::getErrorFromException());
127 $fields = $userFieldManager->getUserFieldsWithReadyData(
128 static::getItemUserFieldEntityId(),
137 $fields = $userFieldManager->getUserFields(static::getItemUserFieldEntityId());
140 static::$isCheckUserFields
141 && !$userFieldManager->checkFields(
142 static::getItemUserFieldEntityId(),
150 $result->addError(static::getErrorFromException());
160 static::$isCheckUserFields =
true;
175 $id = static::getTemporaryStorage()->getIdByPrimary($id);
179 $type = static::getType();
184 $typeDataClass = $factory->getTypeDataClass();
186 $fields = $userFieldManager->getUserFields(static::getItemUserFieldEntityId());
187 $oldData = static::getTemporaryStorage()->getData($id);
190 foreach(
$fields as $fieldName => $field)
192 if(is_array(
$data[$fieldName]) && $field[
'MULTIPLE'] ===
'Y')
194 $multiValues[$fieldName] = array_filter(
$data[$fieldName],
array(
'static',
'isNotNull'));
195 $multiValues[$fieldName] = array_filter($multiValues[$fieldName],
static fn($item) => !is_array($item));
197 elseif($field[
'USER_TYPE'][
'BASE_TYPE'] ===
'file')
199 if(is_numeric($oldData[$fieldName]) && array_key_exists($fieldName,
$data) && (
int) $oldData[$fieldName] !== (
int)
$data[$fieldName])
201 \CFile::Delete($oldData[$fieldName]);
207 foreach ($multiValues as $fieldName => $values)
209 $utmTableName = $typeDataClass::getMultipleValueTableName(
$type,
$fields[$fieldName]);
214 if(
$fields[$fieldName][
'USER_TYPE'][
'BASE_TYPE'] ===
'file')
216 foreach($oldData[$fieldName] as $fileId)
218 if(is_numeric($fileId) && !in_array($fileId, $values))
220 \CFile::Delete($fileId);
228 'DELETE FROM %s WHERE %s = %d',
229 $helper->quote($utmTableName), $helper->quote(
'ID'), $id
233 foreach ($values as $value)
244 return static::modifyValuesBeforeSave(
$event->getParameter(
'id'),
$event->getParameter(
'fields'));
249 return static::saveMultipleValues(
$event->getParameter(
'id'),
$event->getParameter(
'fields'));
254 return static::modifyValuesBeforeSave(
$event->getParameter(
'id'),
$event->getParameter(
'fields'), [
261 return static::saveMultipleValues(
$event->getParameter(
'id'),
$event->getParameter(
'fields'), [
268 if ($oldData = static::getByPrimary(
$event->getParameter(
'id'))->fetch())
270 static::getTemporaryStorage()->saveData(
$event->getParameter(
'id'), $oldData);
279 $oldData = static::getTemporaryStorage()->getData(
$event->getParameter(
'id'));
280 $id = static::getTemporaryStorage()->getIdByPrimary(
$event->getParameter(
'id'));
282 $type = static::getType();
287 $typeDataClass = $factory->getTypeDataClass();
289 $fields = $userFieldManager->getUserFields(static::getItemUserFieldEntityId());
290 foreach ($oldData as
$k => $v)
295 if ($userfield[
'MULTIPLE'] ==
'Y')
297 $utmTableName = $typeDataClass::getMultipleValueTableName(
$type, $userfield);
302 'DELETE FROM %s WHERE %s = %d',
303 $helper->quote($utmTableName), $helper->quote(
'ID'), $id
306 catch(
Main\
DB\SqlQueryException $e)
313 if ($userfield[
"USER_TYPE"][
"BASE_TYPE"]==
"file")
315 if(is_array($oldData[
$k]))
317 foreach($oldData[
$k] as $value)
319 \CFile::delete($value);
324 \CFile::delete($oldData[
$k]);
343 if (static::isOwnField(
$k))
348 $userField = $userFields[
$k];
350 if ($userField[
'MULTIPLE'] ==
'N')
361 foreach ($inputValue as $singleValue)
363 $tmpValue[] = static::convertSingleValueBeforeSave($singleValue, $userField);
367 if ($userField[
'MULTIPLE'] ==
'N')
374 $tmpValue = array_filter($tmpValue, [
'static',
'isNotNull']);
377 $multiValues[
$k] = $tmpValue;
392 if (!isset($userField[
'USER_TYPE']) || !is_array($userField[
'USER_TYPE']))
394 $userField[
'USER_TYPE'] =
array();
397 isset($userField[
'USER_TYPE'][
'BASE_TYPE'])
398 && $userField[
'USER_TYPE'][
'BASE_TYPE'] ===
'datetime'
401 $useTimezone = isset($userField[
'SETTINGS'][
'USE_TIMEZONE']) && $userField[
'SETTINGS'][
'USE_TIMEZONE'] ===
'Y';
407 $value = $value::createFromUserTime($value->format(
Main\
Type\DateTime::getFormat()));
409 elseif (is_string($value) &&
Main\
Type\DateTime::isCorrect($value))
416 if (is_string($value) &&
Main\
Type\DateTime::isCorrect($value))
422 $value->disableUserTime();
428 isset($userField[
'USER_TYPE'][
'CLASS_NAME']) &&
429 is_callable(
array($userField[
'USER_TYPE'][
'CLASS_NAME'],
'onbeforesave'))
432 $value = call_user_func_array(
433 array($userField[
'USER_TYPE'][
'CLASS_NAME'],
'onbeforesave'),
array($userField, $value)
437 if (static::isNotNull($value))
442 isset($userField[
'USER_TYPE'][
'BASE_TYPE']) &&
444 $userField[
'USER_TYPE'][
'BASE_TYPE'] ==
'int' ||
445 $userField[
'USER_TYPE'][
'BASE_TYPE'] ==
'double'
459 return !($value ===
null || $value ===
false || $value ===
'');
464 return array_key_exists($fieldName, static::getOwnFieldNames());
479 foreach(static::getMap() as $field)
481 $fields[$field->getName()] = $field->getName();
490 $data = static::getList([
491 'select' => array_keys($userFields),
507 return static::update($id,
$fields);
514 foreach($userFields as $userField)
516 $fields[$userField[
'FIELD_NAME']] =
null;
519 return static::update($id,
$fields);
static getConnection($name="")
static onAfterDelete(Event $event)
static createFromUserTime($timeString)
static modifyValuesBeforeSave($id, array $data, array $options=[])
static onAfterUpdate(Event $event)
static isOwnField(string $fieldName)
static checkFields(ORM\Data\Result $result, $primary, array $data)
static getUserFieldValues(int $id, array $userFields)
static updateUserFieldValues(int $id, array $fields)
static deleteUserFieldValues(int $id)
static convertValuesBeforeSave(array $data, array $userFields)
static convertSingleValueBeforeSave($value, array $userField)
static onBeforeDelete(Event $event)
static onBeforeUpdate(Event $event)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)