97 self::IS_DELIVERED => [
109 self::CAN_ANSWER => [
117 self::LARGE_FONT => [
122 'className' => \Bitrix\Im\V2\Message\Param\AttachArray::class,
123 'classItem' => \Bitrix\Im\V2\Message\Param\Attach::class,
127 'className' => \Bitrix\Im\V2\Message\Param\Menu::class,
131 'className' => \Bitrix\Im\V2\Message\Param\Keyboard::class,
134 self::KEYBOARD_UID => [
142 self::SENDING_TS => [
151 'className' => \Bitrix\Im\V2\Message\Param\UserAvatar::class,
155 'className' => \Bitrix\Im\V2\Message\Param\UserName::class,
170 self::COMPONENT_ID => [
174 self::COMPONENT_PARAMS => [
175 'className' => Message\Param\ComponentParams::class,
178 self::STYLE_CLASS => [
190 self::CHAT_MESSAGE => [
206 self::KEYBOARD_ACTION => [
212 self::LINK_ACTIVE => [
218 self::CHAT_LAST_DATE => [
219 'type' => Param::TYPE_DATE_TIME,
222 'className' => \Bitrix\Im\V2\Message\Param\TextDate::class,
225 self::IS_ROBOT_MESSAGE => [
228 self::FORWARD_ID => [
232 self::FORWARD_USER_ID => [
236 self::FORWARD_CONTEXT_ID => [
240 self::FORWARD_CHAT_TITLE => [
251 self::COPILOT_PROMPT_CODE => [
255 self::COPILOT_ROLE => [
261 self::CRM_FORM_FILLED => [
265 self::CRM_FORM_ID => [
269 self::CRM_FORM_SEC => [
295 if (!isset(
$type[
'className']))
299 $type[
'className'] = ParamArray::class;
303 $type[
'className'] = Param\DateTime::class;
307 $type[
'className'] = Param::class;
314 'className' => Param::class,
319 $type[
'isHidden'] ??=
false;
341 if (!self::$typeLoaded)
343 $event =
new Event(
'im', self::EVENT_MESSAGE_PARAM_TYPE_INIT);
345 $resultList =
$event->getResults();
347 foreach ($resultList as $eventResult)
349 if ($eventResult->getType() === EventResult::SUCCESS)
351 $settings = $eventResult->getParameters();
372 self::$typeLoaded =
true;
385 return $this->isLoaded;
394 if (is_array($source))
400 $result = $this->initByEntitiesCollection($source);
413 foreach ($this as $param)
415 if ($param->getMessageId())
453 ->setSelect([
'ID',
'MESSAGE_ID',
'PARAM_NAME',
'PARAM_VALUE',
'PARAM_JSON'])
458 return $this->initByEntitiesCollection($collection);
471 foreach ($entitiesCollection as
$entity)
483 if (isset(
$type[
'classItem']))
485 $classItem =
$type[
'classItem'];
486 $item->add(
new $classItem(
$entity));
524 if (isset(
$type[
'classItem']))
526 $classItem =
$type[
'classItem'];
527 $item->add(
new $classItem(
$entity));
569 if (isset(
$type[
'classItem']))
571 $classItem =
$type[
'classItem'];
572 $item->add(
new $classItem(
$entity));
595 public function save():
Result
601 $dataEntityCollection =
new $entityCollectionClass;
605 $itemKeyToUnset = [];
606 foreach ($this as $item)
608 if ($item->isDeleted())
610 $itemKeyToUnset[] = $item->getName();
613 if (!$item->hasValue())
618 if ($item instanceof
Param)
620 $prepareResult = $item->prepareFields();
621 if ($prepareResult->isSuccess())
623 if ($prepareResult->getData()[
'SKIP_SAVE'] ??
false)
627 if ($item->isChanged())
629 $dataEntityCollection->add($item->getDataEntity());
630 $item->markChanged(
false);
635 $result->addErrors($prepareResult->getErrors());
638 elseif ($item instanceof ParamArray)
640 $subItemKeyToUnset = [];
641 foreach ($item as
$key => $subItem)
643 if ($subItem->isDeleted())
645 if ($subItem->getPrimaryId())
647 $dropIds[] = $subItem->getPrimaryId();
648 $subItemKeyToUnset[] =
$key;
653 $prepareResult = $subItem->prepareFields();
654 if ($prepareResult->isSuccess())
656 if ($prepareResult->getData()[
'SKIP_SAVE'] ??
false)
660 if ($subItem->isChanged())
662 $dataEntityCollection->add($subItem->getDataEntity());
663 $subItem->markChanged(
false);
668 $result->addErrors($prepareResult->getErrors());
672 $item->unsetByKeys($subItemKeyToUnset);
677 foreach ($this->droppedItems as $item)
679 if ($item instanceof Param)
681 if ($item->getPrimaryId())
683 $dropIds[] = $item->getPrimaryId();
686 elseif ($item instanceof ParamArray)
688 foreach ($item as $subItem)
690 if ($subItem->getPrimaryId())
692 $dropIds[] = $subItem->getPrimaryId();
698 $saveResult = $dataEntityCollection->save(
true);
699 if ($saveResult->isSuccess())
701 if (!empty($dropIds))
703 MessageParamTable::deleteBatch([
'=ID' => $dropIds]);
706 $this->droppedItems = [];
710 $result->addErrors($saveResult->getErrors());
726 foreach ($this as
$key => $item)
738 MessageParamTable::deleteBatch(
$filter);
741 $this->droppedItems = [];
761 if (
$type[
'className'])
763 $paramClass =
$type[
'className'];
767 $paramClass = Param::class;
770 return (
new $paramClass)
795 !parent::offsetExists($offset)
804 return parent::offsetExists($offset);
846 public function isValid():
Result
851 foreach ($this as $param)
853 $validParamResult = $param->isValid();
854 if (!$validParamResult->isSuccess())
856 $result->addErrors($validParamResult->getErrors());
869 $this[$parameter->
getName()] = $parameter;
891 $entryClass = \get_class($entry);
892 throw new ArgumentTypeException(
"Entry is instance of {$entryClass}, but collection support MessageParameter");
900 parent::offsetSet($offset, $entry);
936 $this->droppedItems = [];
948 if (parent::offsetExists($offset))
950 $this[$offset]->markDrop();
951 $this->droppedItems[] = $this[$offset];
954 parent::offsetUnset($offset);
964 foreach ($this as $param)
966 $param->setMessageId($this->messageId);
984 if ($param->hasValue())
1001 if ($param->hasValue() && !$param->isHidden())
1018 if ($param->hasValue() && !$param->isHidden())
1024 if (!isset($extraParams))
1029 foreach ($extraParams as $extraParam)
1031 if (!isset(
$result[$extraParam]))
1055 foreach ($this as
$key => $param)
1057 $this[
$key] = clone $param;
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)