Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/im/lib/V2/Analytics/ |
Upload File : |
<?php declare(strict_types=1); namespace Bitrix\Im\V2\Analytics; use Bitrix\Im\Text; use Bitrix\Im\V2\Message; use Bitrix\Im\V2\Message\Params; use CSmileGallery; class MessageContent { public function __construct(private readonly Message $message) { } public function isSystemMessage(): bool { return $this->message->getAuthorId() === 0; } public function hasText(): bool { $text = $this->message->getMessage(); return (null !== $text) && (0 !== strlen($text)); } public function hasAttach(): bool { return $this->message->getAttach()->count() > 0; } public function hasFiles(): bool { return $this->message->hasFiles(); } public function isEmptyMessage(): bool { return !$this->hasText() && !$this->hasFiles() && !$this->hasAttach(); } public function isDeletedMessage(): bool { return $this->message->isDeleted() || $this->isEmptyMessage(); } public function isForward(): bool { return $this->message->isForward(); } public function hasOnlyText(): bool { if (!$this->hasText()) { return false; } return !$this->hasFiles() && !$this->hasAttach(); } protected function getAllSmiles(): array { $result = []; $smiles = CSmileGallery::getSmilesWithSets( CSmileGallery::GALLERY_DEFAULT, ['FULL_TYPINGS' => 'Y'] )['SMILE'] ?? []; foreach ($smiles as $smile) { $typings = explode(' ', $smile['TYPING']); foreach ($typings as $typing) { $result[] = $typing; } } return $result; } private function isFitForSmilesOnly(): bool { $replyIds = $this->message->getAdditionalMessageIds(); if (count($replyIds) > 0) { foreach ($replyIds as $replyId) { if ($replyId > 0) { return false; } } } if ($this->isForward()) { return false; } if (!$this->hasOnlyText()) { return false; } return true; } public function hasSmilesOnly(): bool { if (!$this->isFitForSmilesOnly()) { return false; } $smiles = $this->getAllSmiles(); $message = $this->message->getMessage(); $count = 0; return (trim(str_replace($smiles, '', $message, $count)) === '') && ($count < 4); } public function isEmojiOnly(): bool { if (!$this->isFitForSmilesOnly()) { return false; } return Text::isOnlyEmoji($this->message->getMessage()); } public function isServerComponent(): bool { return $this->message->getParams()->isSet(Params::COMPONENT_ID); } public function getComponentName(): string { if ($this->isDeletedMessage()) { return 'DeletedMessage'; } if ($this->isServerComponent()) { return $this->message->getParams()->get(Params::COMPONENT_ID)->getValue(); } if ($this->isSystemMessage()) { return 'SystemMessage'; } if ($this->hasFiles()) { return 'FileMessage'; } if ($this->isEmojiOnly() || $this->hasSmilesOnly()) { return 'SmileMessage'; } return 'DefaultMessage'; } }