. * */ namespace OCA\Passman\Service; use OCA\Passman\Activity; use OCA\Passman\Utility\Utils; use OCP\DB\Exception; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; use Psr\Log\LoggerInterface; class CronService { private CredentialService $credentialService; private LoggerInterface $logger; private Utils $utils; private NotificationService $notificationService; private ActivityService $activityService; private IDBConnection $db; public function __construct(CredentialService $credentialService, LoggerInterface $logger, Utils $utils, NotificationService $notificationService, ActivityService $activityService, IDBConnection $db) { $this->credentialService = $credentialService; $this->logger = $logger; $this->utils = $utils; $this->notificationService = $notificationService; $this->activityService = $activityService; $this->db = $db; } public function expireCredentials() { $expired_credentials = $this->credentialService->getExpiredCredentials($this->utils->getTime()); foreach ($expired_credentials as $credential) { $link = ''; // @TODO create direct link to credential $qb = $this->db->getQueryBuilder(); $qb->select('*') ->from('notifications') ->where($qb->expr()->eq('object_id', $qb->createNamedParameter($credential->getId(), IQueryBuilder::PARAM_INT))) ->andWhere($qb->expr()->eq('subject', $qb->createNamedParameter('credential_expired', IQueryBuilder::PARAM_STR))); try { $this->logger->debug($credential->getLabel() . ' is expired, checking notifications!', array('app' => 'passman')); $notificationCount = $qb->execute()->rowCount(); if ($notificationCount === 0) { $this->logger->debug($credential->getLabel() . ' is expired, adding notification!', array('app' => 'passman')); $this->activityService->add( Activity::SUBJECT_ITEM_EXPIRED, array($credential->getLabel(), $credential->getUserId()), '', array(), $link, $credential->getUserId(), Activity::TYPE_ITEM_EXPIRED); $this->notificationService->credentialExpiredNotification($credential); } } catch (Exception $exception) { $this->logger->error('Error while creating a notification: ' . $exception->getMessage(), array('app' => 'passman')); } } } }