userPasswordResetterRepository = new UserPasswordResetterRepository(); } public function configure(): void { $this->setName('db:maintain') ->setDescription('Maintain database.'); } public function execute(InputInterface $input, OutputInterface $output): int { try { $this->deleteExpiredPasswordResetters(); $this->deleteExpiredSessions(); } catch (\Exception $e) { $output->writeln('Maintenance failed!'); $output->writeln(''); $output->writeln((string) $e); $output->writeln(''); return 1; } $output->writeln('Maintenance was successful!'); $output->writeln(''); return 0; } private function deleteExpiredPasswordResetters(): void { foreach ($this->userPasswordResetterRepository->getAllExpired() as $passwordResetter) { \Container::$persistentDataManager->deleteFromDb($passwordResetter); } } private function deleteExpiredSessions(): void { //TODO: model may be used for sessions too $select = new Select(\Container::$dbConnection, 'sessions'); $select->columns(['id']); $select->where('updated', '<', (new DateTime('-7 days'))->format('Y-m-d H:i:s')); $result = $select->execute(); while ($session = $result->fetch(IResultSet::FETCH_ASSOC)) { $modify = new Modify(\Container::$dbConnection, 'sessions'); $modify->setId($session['id']); $modify->delete(); } } }