/**
  * Returns an singleton instance of this class
  *
  * @param object $config
  * @param object $args
  * @return
  */
 public static function getInstance($config, $args)
 {
     if (self::$instance == null) {
         self::$instance = new EmailServersManager($config, $args);
     }
     return self::$instance;
 }
 private function initPHPMailer($server)
 {
     $this->mail = new PHPMailer(true);
     $this->mail->IsSMTP();
     try {
         // enables SMTP debug information (for testing)
         $this->mail->SMTPAuth = true;
         // enable SMTP authentication
         // sets the prefix to the servier
         $emailServersManager = EmailServersManager::getInstance(null, null);
         $emailServerDto = $emailServersManager->getByName($server);
         if (isset($emailServerDto)) {
             $this->mail->SMTPSecure = $emailServerDto->getSmtpAuth();
             $this->mail->Host = $emailServerDto->getSmtpHost();
             $this->mail->Port = intval($emailServerDto->getSmtpPort());
             $this->dayMaxSendingLimit = intval($emailServerDto->getDayMaxSendingLimit());
         }
         $this->mail->IsHTML(true);
         $this->mail->CharSet = 'UTF-8';
     } catch (phpmailerException $e) {
         return $e->errorMessage();
     } catch (Exception $e) {
         return $e->getMessage();
     }
     return true;
 }
 public function load()
 {
     $userLevel = $this->sessionManager->getUser()->getLevel();
     $companiesPriceListManager = CompaniesPriceListManager::getInstance($this->config, $this->args);
     $companyManager = CompanyManager::getInstance($this->config, $this->args);
     if ($userLevel === UserGroups::$COMPANY) {
         $companyId = $this->getUserId();
         $selectedCompanyId = $companyId;
         $companyExtendedProfileManager = CompanyExtendedProfileManager::getInstance($this->config, $this->args);
         $dto = $companyExtendedProfileManager->getByCompanyId($companyId);
         if (!isset($dto)) {
             $companyExtendedProfileManager->createDefaultExCompanyProfile($companyId);
         }
         $dto = $companyExtendedProfileManager->getByCompanyId($companyId);
         list($companyEmailServerLogins, $companyEmailServersEmailsCount) = $this->getCompanyEmailServerLogins($dto);
         $this->addParam("companyEmailServerLogins", $companyEmailServerLogins);
         $this->addParam("companyEmailServersEmailsCount", $companyEmailServersEmailsCount);
         $this->addParam("companyExProfileDto", $dto);
         $dealerEmails = trim($dto->getDealerEmails());
         $this->addParam("total_price_email_recipients_count", empty($dealerEmails) ? 0 : count(explode(';', $dealerEmails)));
         array_map('unlink', glob(HTDOCS_TMP_DIR_ATTACHMENTS . "/companies/" . $companyId . "/*"));
     } else {
         if ($userLevel === UserGroups::$ADMIN) {
             $allCompanies = $companyManager->getAllCompanies(true, true);
             $companiesIds = $companyManager->getCompaniesIdsArray($allCompanies);
             $companiesNames = $companyManager->getCompaniesNamesArray($allCompanies);
             if (isset($_REQUEST['selected_company'])) {
                 $selectedCompanyId = $this->secure($_REQUEST['selected_company']);
             } else {
                 $selectedCompanyId = $allCompanies[0]->getId();
             }
             $this->addParam("companiesIds", $companiesIds);
             $this->addParam("companiesNames", $companiesNames);
         }
     }
     $companyPrices = $companiesPriceListManager->getCompanyHistoryPricesOrderByDate($selectedCompanyId, 0, 50);
     $this->addParam("company_prices", $companyPrices);
     $this->addParam("selectedCompanyId", $selectedCompanyId);
     if (isset($_REQUEST['show_send_email_to_dealers']) && $_REQUEST['show_send_email_to_dealers'] == 1) {
         $this->addParam("show_send_email_to_dealers", 1);
     }
     $emailServersManager = EmailServersManager::getInstance($this->config, $this->args);
     $allEmailServers = $emailServersManager->selectAll();
     $this->addParam("allEmailServers", $allEmailServers);
 }