. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Classes\RecordHooks\Note; use Espo\Core\Record\Hook\SaveHook; use Espo\Core\Utils\Metadata; use Espo\Entities\Note; use Espo\Entities\Note as NoteEntity; use Espo\Entities\Preferences; use Espo\Entities\User; use Espo\ORM\Entity; use Espo\ORM\EntityManager; use Espo\Tools\Stream\Service; /** * @implements SaveHook * @noinspection PhpUnused */ class AfterCreate implements SaveHook { public function __construct( private EntityManager $entityManager, private User $user, private Metadata $metadata, private Service $streamService ) {} public function process(Entity $entity): void { $parentType = $entity->getParentType(); $parentId = $entity->getParentId(); if ( $entity->getType() !== NoteEntity::TYPE_POST || !$parentType || !$parentId ) { return; } if (!$this->metadata->get(['scopes', $parentType, 'stream'])) { return; } $preferences = $this->entityManager->getEntityById(Preferences::ENTITY_TYPE, $this->user->getId()); if (!$preferences) { return; } if (!$preferences->get('followEntityOnStreamPost')) { return; } $parent = $this->entityManager->getEntityById($parentType, $parentId); if (!$parent || $this->user->isSystem() || $this->user->isApi()) { return; } $this->streamService->followEntity($parent, $this->user->getId()); } }