connector = $connector; $this->configWriter = $configWriter; $this->flagManager = $flagManager; $this->reinitableConfig = $reinitableConfig; } /** * Execute scheduled subscription operation * In case of failure writes message to notifications inbox * * @return bool */ public function execute() { $attemptsCount = $this->flagManager->getFlagData(SubscriptionHandler::ATTEMPTS_REVERSE_COUNTER_FLAG_CODE); if (($attemptsCount === null) || ($attemptsCount <= 0)) { $this->deleteAnalyticsCronExpr(); $this->flagManager->deleteFlag(SubscriptionHandler::ATTEMPTS_REVERSE_COUNTER_FLAG_CODE); return false; } $attemptsCount -= 1; $this->flagManager->saveFlag(SubscriptionHandler::ATTEMPTS_REVERSE_COUNTER_FLAG_CODE, $attemptsCount); $signUpResult = $this->connector->execute('signUp'); if ($signUpResult === false) { return false; } $this->deleteAnalyticsCronExpr(); $this->flagManager->deleteFlag(SubscriptionHandler::ATTEMPTS_REVERSE_COUNTER_FLAG_CODE); return true; } /** * Delete cron schedule setting into config. * * Delete cron schedule setting for subscription handler into config and * re-initialize config cache to avoid auto-generate new schedule items. * * @return bool */ private function deleteAnalyticsCronExpr() { $this->configWriter->delete(SubscriptionHandler::CRON_STRING_PATH); $this->reinitableConfig->reinit(); return true; } }