Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec051092 authored by AVINASH GUSAIN's avatar AVINASH GUSAIN
Browse files

newsletter service added

parent cb5bf208
Loading
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ namespace OCA\EcloudAccounts\Controller;
use Exception;
use OCA\EcloudAccounts\AppInfo\Application;
use OCA\EcloudAccounts\Service\CaptchaService;
use OCA\EcloudAccounts\Service\NewsLetterService;
use OCA\EcloudAccounts\Service\UserService;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
@@ -26,6 +27,7 @@ class AccountController extends Controller {
	protected $appName;
	protected $request;
	private $userService;
	private $newsletterService;
	private $captchaService;
	protected $l10nFactory;
	private $session;
@@ -40,6 +42,7 @@ class AccountController extends Controller {
		$AppName,
		IRequest $request,
		UserService $userService,
		NewsLetterService $newsletterService,
		CaptchaService $captchaService,
		IFactory $l10nFactory,
		IUserSession $userSession,
@@ -50,6 +53,7 @@ class AccountController extends Controller {
		parent::__construct($AppName, $request);
		$this->appName = $AppName;
		$this->userService = $userService;
		$this->newsletterService = $newsletterService;
		$this->captchaService = $captchaService;
		$this->l10nFactory = $l10nFactory;
		$this->session = $session;
@@ -137,7 +141,7 @@ class AccountController extends Controller {
			$this->userService->createNewDomainAlias($username, $userEmail);
			$this->userService->setTOS($username, true);
			$this->userService->setUserLanguage($username, $language);
			$this->userService->setNewsletterSignup($newsletterEos, $newsletterProduct, $userEmail, $language);
			$this->newsletterService->setNewsletterSignup($newsletterEos, $newsletterProduct, $userEmail, $language);
			
			if($recoveryEmail !== '') {
				$this->userService->setUnverifiedRecoveryEmail($username, $recoveryEmail);
+73 −0
Original line number Diff line number Diff line
<?php

declare(strict_types=1);

namespace OCA\EcloudAccounts\Service;

use Exception;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IUserManager;

class NewsLetterService {
	private $userManager;
	private $config;
	private $curl;
	private $logger;

	public function __construct($appName, IUserManager $userManager, IConfig $config, CurlService $curlService, ILogger $logger) {
		$this->userManager = $userManager;
		$this->config = $config;
		$this->curl = $curlService;
		$this->logger = $logger;
	}

	public function setNewsletterSignup(bool $newsletterEos, bool $newsletterProduct, string $userEmail, string $language): void {
		if ($newsletterEos || $newsletterProduct) {
			$listIds = [];
			$newsletterListIds = $this->config->getSystemValue('newsletter_list_ids');
			if ($newsletterEos) {
				$listIds[] = $newsletterListIds['eos'];
			}

			if ($newsletterProduct) {
				$listIds[] = $newsletterListIds['product'];
			}

			if (!empty($listIds)) {
				try {
					$this->signupForNewsletter($userEmail, $listIds, $language);
				} catch (Exception $e) {
					$this->logger->error('Signup for newsletter failed: ' . $e->getMessage());
				}
			}
		}
	}

	private function signupForNewsletter(string $userEmail, array $listIds, string $userLanguage): void {
		$newsletterApiUrl = $this->config->getSystemValue('newsletter_base_url', '');

		if (empty($newsletterApiUrl)) {
			return;
		}

		$endpoint = '/api/signup';
		$url = $newsletterApiUrl . $endpoint;

		$params = [
			'email' => $userEmail,
			'list_ids' => $listIds,
			'contact_language' => $userLanguage
		];
		$params_string = json_encode($params);
		$headers = [
			'Content-Type: application/json',
			'Content-Length: ' . strlen($params_string)
		];
		$this->curl->post($url, $params, $headers);

		if ($this->curl->getLastStatusCode() !== 200) {
			throw new Exception('Error adding email ' . $userEmail . ' to newsletter app');
		}
	}
}
+0 −66
Original line number Diff line number Diff line
@@ -448,70 +448,4 @@ class UserService {
			throw new Exception('Error adding username ' . $username . ' to common data store');
		}
	}
	/**
	 * Newsletter signup,
	 * perform call to newsletter app api to signup the user
	 *
	 * @param bool $newsletterEos
	 * @param bool $newsletterProduct
	 * @param string $userEmail
	 * @param string $language
	 * @return void
	 */
	public function setNewsletterSignup(bool $newsletterEos, bool $newsletterProduct, string $userEmail, string $language): void {
		if ($newsletterEos || $newsletterProduct) {
			$listIds = [];
			$newsletterListIds = $this->config->getSystemValue('newsletter_list_ids');
			if ($newsletterEos) {
				$listIds[] = $newsletterListIds['eos'];
			}
		
			if ($newsletterProduct) {
				$listIds[] = $newsletterListIds['product'];
			}
		
			if (!empty($listIds)) {
				try {
					$this->signupForNewsletter($userEmail, $listIds, $language);
				} catch (Exception $e) {
					$this->logger->error('Signup for newsletter failed: ' . $e->getMessage());
				}
			}
		}
	}
	/**
	 * Signup for newsletter,
	 * perform call to newsletter app api to signup the user
	 *
	 * @param  string $userEmail
	 * @param  Array $listIds
	 * @param string $userLanguage
	 * @return mixed response of the external endpoint
	 */
	public function signupForNewsletter(string $userEmail, array $listIds, string $userLanguage): void {
		$newsletterApiUrl = $this->config->getSystemValue('newsletter_base_url', '');

		if (!isset($newsletterApiUrl) || empty($newsletterApiUrl)) {
			return;
		}
		
		$endpoint = '/api/signup';
		$url = $newsletterApiUrl . $endpoint ;
		
		$params = [
			'email' => $userEmail,
			'list_ids' => $listIds,
			'contact_language' => $userLanguage
		];
		$params_string = json_encode($params);
		$headers = [
			'Content-Type: application/json',
			'Content-Length: ' . strlen($params_string)
		];
		$this->curl->post($url, $params, $headers);

		if ($this->curl->getLastStatusCode() !== 200) {
			throw new Exception('Error adding email ' . $userEmail . ' to newsletter app');
		}
	}
}