/**
  * 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 EmailAccountsManager($config, $args);
     }
     return self::$instance;
 }
 public function load()
 {
     $newslettersManager = NewslettersManager::getInstance($this->config, $this->args);
     $selected_email_accounts_ids = $_REQUEST['selected_email_accounts_ids'];
     $emailAccountsManager = EmailAccountsManager::getInstance($this->config, $this->args);
     $allEmailAccounts = $emailAccountsManager->selectAll();
     $emailAccountsNameIdMap = array();
     foreach ($allEmailAccounts as $dto) {
         $emailAccountsNameIdMap[$dto->getid()] = $dto->getLogin();
     }
     $this->addParam('email_accounts_logins', $emailAccountsNameIdMap);
     $this->addParam('selected_email_accounts_ids', explode(',', $selected_email_accounts_ids));
     $include_all_active_users = $_REQUEST['include_all_active_users'];
     $this->addParam('include_all_active_users', $include_all_active_users);
 }
 public function checkPriceEmailsAndAddAlertsToOnlineAdmins()
 {
     $emailServersManager = new EmailAccountsManager(null, null);
     $infoEmailDto = $emailServersManager->selectByPK('info');
     $login = $infoEmailDto->getLogin();
     $pass = $infoEmailDto->getPass();
     $imapInbox = $infoEmailDto->getImapInbox();
     $connection = @imap_open($imapInbox, $login, $pass);
     if (!$connection) {
         return imap_last_error();
     }
     $emailsIds = imap_search($connection, 'UNSEEN');
     if (empty($emailsIds) || !is_array($emailsIds)) {
         return "No unread emails";
     }
     rsort($emailsIds);
     $attachments = array();
     foreach ($emailsIds as $emailId) {
         //$overview = imap_fetch_overview($connection, $emailId, 0);
         $structure = imap_fetchstructure($connection, $emailId);
         $header = imap_headerinfo($connection, $emailId);
         $fromEmails = array();
         if (!empty($header->from)) {
             foreach ($header->from as $from) {
                 $fromEmails[] = $from->mailbox . '@' . $from->host;
             }
         }
         list($companyId, $companyName, $companyType) = $this->determineCompanyIdFromPriceEmail($fromEmails);
         if ($companyId == false) {
             continue;
         }
         if (isset($structure->parts) && count($structure->parts)) {
             for ($i = 0; $i < count($structure->parts); $i++) {
                 $attachments[$emailId][$i] = array('is_attachment' => false, 'filename' => '', 'name' => '', 'attachment' => '');
                 if ($structure->parts[$i]->ifdparameters) {
                     foreach ($structure->parts[$i]->dparameters as $object) {
                         if (strtolower($object->attribute) == 'filename') {
                             $attachments[$emailId][$i]['is_attachment'] = true;
                             $attachments[$emailId][$i]['filename'] = $object->value;
                         }
                     }
                 }
                 if ($structure->parts[$i]->ifparameters) {
                     foreach ($structure->parts[$i]->parameters as $object) {
                         if (strtolower($object->attribute) == 'name') {
                             $attachments[$emailId][$i]['is_attachment'] = true;
                             $attachments[$emailId][$i]['name'] = $object->value;
                         }
                     }
                 }
                 if ($attachments[$emailId][$i]['is_attachment']) {
                     $attachments[$emailId][$i]['attachment'] = imap_fetchbody($connection, $emailId, $i + 1, FT_UID | FT_PEEK);
                     if ($structure->parts[$i]->encoding == 3) {
                         $attachments[$emailId][$i]['attachment'] = base64_decode($attachments[$emailId][$i]['attachment']);
                     } elseif ($structure->parts[$i]->encoding == 4) {
                         $attachments[$emailId][$i]['attachment'] = quoted_printable_decode($attachments[$emailId][$i]['attachment']);
                     }
                 }
             }
         }
         /* iterate through each attachment and save it */
         foreach ($attachments[$emailId] as $attachment) {
             if ($attachment['is_attachment'] == 1) {
                 $filename = $attachment['name'];
                 if (empty($filename)) {
                     $filename = $attachment['filename'];
                 }
                 if (strpos($filename, '.xls') !== false || strpos($filename, '.pdf') !== false) {
                     $onlineAdminsEmails = $this->getOnlineAdminsEmails();
                     if (!empty($onlineAdminsEmails)) {
                         $customerAlertsManager = CustomerAlertsManager::getInstance(null, null);
                         foreach ($onlineAdminsEmails as $adminEmail) {
                             $customerAlertsManager->addNewEmailFromCompanyAlert($adminEmail, $companyName);
                         }
                     }
                     break;
                 }
                 /* $filename = $attachment['name'];
                                       if (empty($filename))
                                       $filename = $attachment['filename'];
                                       if (empty($filename))
                                       $filename = time() . ".dat";
                 
                                       $fp = fopen($emailId . "-" . $filename, "w+");
                                       fwrite($fp, $attachment['attachment']);
                                       fclose($fp); */
             }
         }
     }
     return true;
 }
예제 #4
0
 private function emailOrderDetails($orderId)
 {
     $emailSenderManager = new EmailSenderManager('gmail');
     $customer = $this->getCustomer();
     $userManager = UserManager::getInstance($this->config, $this->args);
     $customerEmail = $userManager->getRealEmailAddressByUserDto($customer);
     $emailAccountsManager = EmailAccountsManager::getInstance($this->config, $this->args);
     $infoEmailAddress = $emailAccountsManager->getEmailAddressById('info');
     $recipients = array($customerEmail, $infoEmailAddress);
     $lname = $customer->getLastName();
     $userName = $customer->getName();
     if (isset($lname)) {
         $userName .= ' ' . $lname;
     }
     $orderJoinedDetailsDtos = $this->ordersManager->getOrderJoinedWithDetails($orderId);
     $goupedOrderJoinedDetailsDtos = $this->groupBundlesInOrderJoinedDetailsDtos($orderJoinedDetailsDtos);
     $paymentType = $orderJoinedDetailsDtos[0]->getPaymentType();
     $payment_option_values = explode(',', $this->getCmsVar('payment_option_values'));
     $payment_options_display_names_ids = explode(',', $this->getCmsVar('payment_options_display_names_ids'));
     $index = array_search($paymentType, $payment_option_values);
     $paymentTypeDisplayNameId = $payment_options_display_names_ids[$index];
     $subject = $this->getPhrase(299);
     if ($paymentType == 'credit') {
         $template = "customer_credit_order";
     } else {
         $template = "customer_cash_order";
     }
     $params = array("user_name" => $userName, "dtos" => $goupedOrderJoinedDetailsDtos, "itemManager" => $this->itemManager, "support_phone" => $this->getCmsVar('pcstore_support_phone_number'), 'paymentTypeDisplayNameId' => $paymentTypeDisplayNameId);
     if ($paymentType == 'credit') {
         $creditSuppliersManager = CreditSuppliersManager::getInstance($this->config, $this->args);
         $csid = $orderJoinedDetailsDtos[0]->getCreditOrdersCreditSupplierId();
         $creditSupplierDto = $creditSuppliersManager->selectByPK($csid);
         $commission = $creditSupplierDto->getCommission();
         $grandTotalAMD = intval($orderJoinedDetailsDtos[0]->getOrderTotalAmd());
         $grandTotalAmdWithCommission = intval($grandTotalAMD / (1 - $commission / 100));
         $params['grandTotalAmdWithCommission'] = $grandTotalAmdWithCommission;
     }
     $emailSenderManager->sendEmail('orders', $recipients, $subject, $template, $params, '', '', true, false);
 }
예제 #5
0
 /**
  * Initializes DB mappers
  *
  * @param object $config
  * @param object $args
  * @return
  */
 function __construct($server)
 {
     $this->sentEmailsManager = SentEmailsManager::getInstance(null, null);
     $this->emailAccountsManager = EmailAccountsManager::getInstance(null, null);
     $this->initPHPMailer($server);
 }