. * * 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\Core\FieldProcessing\Reminder; use Espo\Entities\User; use Espo\Modules\Crm\Entities\Reminder; use Espo\ORM\Entity; use Espo\Core\FieldProcessing\Loader as LoaderInterface; use Espo\Core\FieldProcessing\Loader\Params; use Espo\Core\ORM\EntityManager; /** * @internal This class should not be removed as it's used by custom entities. * @implements LoaderInterface */ class Loader implements LoaderInterface { public function __construct( private EntityManager $entityManager, private User $user ) {} public function process(Entity $entity, Params $params): void { $hasReminder = $this->entityManager ->getDefs() ->getEntity($entity->getEntityType()) ->hasField('reminders'); if (!$hasReminder) { return; } if ($params->hasSelect() && !$params->hasInSelect('reminders')) { return; } $entity->set('reminders', $this->fetchReminderDataList($entity)); } /** * @return object{seconds: int, type: string}[] */ private function fetchReminderDataList(Entity $entity): array { $list = []; /** @var iterable $collection */ $collection = $this->entityManager ->getRDBRepository(Reminder::ENTITY_TYPE) ->select(['seconds', 'type']) ->where([ 'entityType' => $entity->getEntityType(), 'entityId' => $entity->getId(), 'userId' => $this->user->getId(), ]) ->distinct() ->order('seconds') ->find(); foreach ($collection as $reminder) { $list[] = (object) [ 'seconds' => $reminder->getSeconds(), 'type' => $reminder->getType(), ]; } return $list; } }