35 if (!(static::getEntity()->hasField(
$k) && static::getEntity()->getField(
$k) instanceof
Entity\
ScalarField))
38 'Field `%s` not found in entity when trying to query %s row.',
39 $k, static::getEntity()->getName()
58 $object = static::convertArrayToObject(
$data,
true);
61 $hlblock = static::getHighloadBlock();
69 $data = $object->collectValues(Values::CURRENT, FieldTypeMask::SCALAR);
98 $tableName =
$entity->getDBTableName();
99 $identity =
$entity->getAutoIncrement();
116 $object->set(
$k, $v);
120 foreach (
$data as $fieldName => $value)
122 $field = static::getEntity()->getField($fieldName);
123 $data[$fieldName] = $field->modifyValueBeforeSave($value,
$data);
130 $update = $helper->prepareUpdate($tableName,
$data);
132 $sql =
"UPDATE ".$helper->quote($tableName).
" SET ".$update[0].
" WHERE ".$helper->quote($identity).
" = ".((int) $id);
137 if (!empty($multiValues))
139 foreach ($multiValues as $userfieldName => $values)
143 foreach ($values as $value)
156 static::normalizePrimary($primary);
160 static::normalizePrimary($primary,
$data);
168 foreach ($primary as $primaryName => $primaryValue)
170 $object->sysSetActual($primaryName, $primaryValue);
175 static::callOnAfterAddEvent($object,
$data, $id);
177 catch (\Exception $e)
202 static::normalizePrimary(
205 static::validatePrimary($primary);
208 $object = static::convertArrayToObject(
$data,
false, $primary);
211 $object->fill(FieldTypeMask::SCALAR);
212 $oldData = $object->collectValues(Values::ACTUAL, FieldTypeMask::SCALAR);
214 $hlblock = static::getHighloadBlock();
220 static::callOnBeforeUpdateEvent($object,
$data,
$result);
223 $data = $object->collectValues(Values::CURRENT, FieldTypeMask::SCALAR);
236 $result->addError(
new Entity\EntityError(
"Unknown error while checking userfields"));
246 static::callOnUpdateEvent($object,
$data, []);
255 $object->set(
$k, $v);
259 foreach (
$data as $fieldName => $value)
261 $field = static::getEntity()->getField($fieldName);
262 $data[$fieldName] = $field->modifyValueBeforeSave($value,
$data);
271 $tableName =
$entity->getDBTableName();
273 $update = $helper->prepareUpdate($tableName,
$data);
276 foreach ($primary as
$k => $v)
278 $id[] = $helper->prepareAssignment($tableName,
$k, $v);
280 $where = implode(
' AND ', $id);
282 $sql =
"UPDATE ".$helper->quote($tableName).
" SET ".$update[0].
" WHERE ".$where;
292 if (!empty($multiValues))
294 foreach ($multiValues as $userfieldName => $values)
296 $utmTableName = HighloadBlockTable::getMultipleValueTableName($hlblock,
$fields[$userfieldName]);
300 'DELETE FROM %s WHERE %s = %d',
301 $helper->quote($utmTableName), $helper->quote(
'ID'), $primary[
'ID']
305 foreach ($values as $value)
307 $connection->add($utmTableName,
array(
'ID' => $primary[
'ID'],
'VALUE' => $value));
315 static::callOnAfterUpdateEvent($object,
$data);
317 catch (\Exception $e)
336 public static function delete($primary)
341 static::normalizePrimary($primary);
342 static::validatePrimary($primary);
345 $result =
new Entity\DeleteResult();
346 $hlblock = static::getHighloadBlock();
349 $oldData = static::getByPrimary($primary)->fetch();
354 static::callOnBeforeDeleteEvent($primary,
$entity,
$result, $oldData);
363 static::callOnDeleteEvent($primary,
$entity, $oldData);
369 $tableName =
$entity->getDBTableName();
372 foreach ($primary as
$k => $v)
374 $id[] =
$k.
" = '".$helper->forSql($v).
"'";
376 $where = implode(
' AND ', $id);
378 $sql =
"DELETE FROM ".$helper->quote($tableName).
" WHERE ".$where;
383 foreach ($oldData as
$k => $v)
392 if ($userfield[
'MULTIPLE'] ==
'Y')
397 'DELETE FROM %s WHERE %s = %d',
398 $helper->quote($utmTableName), $helper->quote(
'ID'), $primary[
'ID']
403 if ($userfield[
"USER_TYPE"][
"BASE_TYPE"]==
"file")
405 if(is_array($oldData[
$k]))
407 foreach($oldData[
$k] as $value)
409 \CFile::delete($value);
414 \CFile::delete($oldData[
$k]);
422 static::callOnAfterDeleteEvent($primary,
$entity, $oldData);
424 catch (\Exception $e)
438 $event =
new Entity\Event($object->entity, self::EVENT_ON_BEFORE_UPDATE, [
439 "id" => $object->primary,
446 $event->mergeObjectFields($object);
448 $oldData = $object->collectValues(Values::ACTUAL, FieldTypeMask::SCALAR);
451 $event =
new Entity\Event($object->entity, self::EVENT_ON_BEFORE_UPDATE, [
452 "id" => $object->primary,
453 "primary" => $object->primary,
456 "oldFields" => $oldData
461 $event->mergeObjectFields($object);
467 $event =
new Event($object->entity, self::EVENT_ON_UPDATE, [
468 "id" => $object->primary,
470 'object' => clone $object
474 $oldData = $object->collectValues(Values::ACTUAL, FieldTypeMask::SCALAR);
477 $event =
new Event($object->entity, self::EVENT_ON_UPDATE, [
478 "id" => $object->primary,
479 "primary" => $object->primary,
481 'object' => clone $object,
482 "oldFields" => $oldData
490 $event =
new Entity\Event($object->entity, self::EVENT_ON_AFTER_UPDATE, [
491 "id"=> $object->primary,
493 'object' => clone $object
497 $oldData = $object->collectValues(Values::ACTUAL, FieldTypeMask::SCALAR);
500 $event =
new Entity\Event($object->entity, self::EVENT_ON_AFTER_UPDATE, [
501 "id" => $object->primary,
502 "primary" => $object->primary,
504 'object' => clone $object,
505 "oldFields" => $oldData
513 $event =
new Entity\Event(
$entity, self::EVENT_ON_BEFORE_DELETE,
array(
"id"=>$primary));
519 "id"=>$primary,
"primary"=>$primary,
"oldFields" => $oldData
533 "id"=>$primary,
"primary"=>$primary,
"oldFields" => $oldData
541 $event =
new Entity\Event(
$entity, self::EVENT_ON_AFTER_DELETE,
array(
"id"=>$primary));
546 "id"=>$primary,
"primary" => $primary,
"oldFields" => $oldData
562 $userfield = $userfields[
$k];
564 if ($userfield[
'MULTIPLE'] ===
'N')
572 if (!is_array($inputValue))
574 $inputValue = [$inputValue];
579 foreach ($inputValue as $singleValue)
581 $tmpValue[] = static::convertSingleValueBeforeSave($singleValue, $userfield);
585 if ($userfield[
'MULTIPLE'] ===
'N')
592 $tmpValue = array_filter($tmpValue, [__CLASS__,
'isNotNull']);
595 $multiValues[
$k] = $tmpValue;
599 return [
$data, $multiValues];
610 if (!isset($userfield[
'USER_TYPE']) || !is_array($userfield[
'USER_TYPE']))
612 $userfield[
'USER_TYPE'] = [];
616 isset($userfield[
'USER_TYPE'][
'CLASS_NAME']) &&
617 is_callable(
array($userfield[
'USER_TYPE'][
'CLASS_NAME'],
'onbeforesave'))
620 $value = call_user_func_array(
621 [$userfield[
'USER_TYPE'][
'CLASS_NAME'],
'onbeforesave'],
626 if (static::isNotNull($value))
631 isset($userfield[
'USER_TYPE'][
'BASE_TYPE']) &&
633 $userfield[
'USER_TYPE'][
'BASE_TYPE'] ==
'int' ||
634 $userfield[
'USER_TYPE'][
'BASE_TYPE'] ==
'double'
648 return !($value ===
null || $value ===
false || $value ===
'');
static getConnection($name="")
static callOnAddEvent($object, $fields, $ufdata)
static update($primary, array $data)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)