/** * Handles the sending of the letter to a lists. * Adds the items to "_queue" table. * * @return boolean * @since 1.0 */ public function addToQueue() { $newsletterId = JRequest::getInt('newsletter_id'); $lists = JRequest::getVar('lists'); $added = 0; $errors = 0; if (empty($newsletterId) || empty($lists)) { $this->setError('Required data is absent'); NewsletterHelper::jsonError(JText::_('Required data is absent')); } foreach ($lists as $list) { $dbo = JFactory::getDbo(); $query = $dbo->getQuery(true); $query->select('distinct s.subscriber_id')->from('#__newsletter_sub_list AS sl')->join('', '#__newsletter_subscribers AS s ON s.subscriber_id = sl.subscriber_id')->where('list_id=' . (int) $list); //echo nl2br(str_replace('#__','jos_',$query)); $subs = $dbo->setQuery($query)->loadAssocList(); if (!empty($subs)) { foreach ($subs as $item) { $table = JTable::getInstance('queue', 'NewsletterTable'); if (!$table->load(array('newsletter_id' => $newsletterId, 'subscriber_id' => $item['subscriber_id']))) { // add new row only if it does not exist... if ($table->save(array('newsletter_id' => $newsletterId, 'subscriber_id' => $item['subscriber_id'], 'created' => date('Y-m-d H:i:s'), 'state' => 1))) { $added++; } else { $errors++; } } unset($table); } } } $data = array('added' => $added, 'errors' => $errors); if ($errors > 0) { NewsletterHelper::jsonError(JText::_('COM_NEWSLETTER_AN_ERROR_OCCURED'), $data); } NewsletterHelper::jsonMessage('ok', $data); }
/** * Check connections to ALL mailbox servers. * * @return string json */ public function checkMailboxes() { $res = array(); $manager = JModel::getInstance('Mailboxprofiles', 'NewsletterModel'); $mailboxes = $manager->getAllItems(); if (!empty($mailboxes)) { jimport('migur.library.mailer.mailbox'); foreach ($mailboxes as $mailboxSettings) { $text = JText::sprintf('COM_NEWSLETTER_MAINTAINANCE_CHECKMAILBOX', $mailboxSettings->mailbox_profile_name) . '...'; $mailboxSettings = (array) $mailboxSettings; $mailbox = new MigurMailerMailbox($mailboxSettings); $errors = array(); if ($mailbox->connect()) { $mailbox->close(); } else { $errors[] = JText::_('COM_NEWSLETTER_UNABLE_TO_CONNECT'); $errors[] = $mailbox->getLastError(); if (!$mailbox->protocol->getOption('noValidateCert')) { $mailbox->protocol->setOption('noValidateCert', true); $errors[] = JText::_('COM_NEWSLETTER_TRYING_TO_CONNECT_WITHOUT_CERT'); if ($mailbox->connect()) { $mailbox->close(); $errors[] = JText::_('COM_NEWSLETTER_OK_CHECK_YOUR_CERT'); } else { $errors[] = JText::_('COM_NEWSLETTER_FAILED') . '. ' . $mailbox->getLastError(); } } } if (count($errors) > 0) { $text .= '<br/>' . implode('<br/>', $errors); } imap_errors(); imap_alerts(); $res[] = array('text' => $text, 'type' => count($errors) == 0); } } else { $res[] = array('text' => JText::sprintf('COM_NEWSLETTER_MAINTAINANCE_NO_MAILBOXES'), 'type' => false); } // Return data NewsletterHelper::jsonMessage('checkMailboxes', $res); }
/** * Fetches and adds the data to DB from the file uploaded before * @return void * @since 1.0 */ public function import() { $type = JRequest::getString('subscriber_type', ''); $subtask = JRequest::getString('subtask', ''); $currentList = JRequest::getInt('list_id', '0'); if ($currentList < 1) { NewsletterHelper::jsonError('No list Id'); } if (!($settings = $this->_getSettings())) { NewsletterHelper::jsonError('No settings'); } if ($subtask == 'parse') { $mapping = $settings->fields; $sess = JFactory::getSession(); $file = $sess->get('list.' . $currentList . '.file.uploaded', array()); if (($handle = fopen($file['file']['filepath'], "r")) === FALSE) { NewsletterHelper::jsonError('Cannot open file'); } $res = array(); $total = 0; $skipped = 0; //get the header fgetcsv($handle, 1000, $settings->delimiter, $settings->enclosure); while (($data = fgetcsv($handle, 1000, $settings->delimiter, $settings->enclosure)) !== FALSE) { if ($mapping->html->mapped === null || !isset($data[$mapping->html->mapped])) { $htmlVal = $mapping->html->default; } else { $htmlVal = $data[$mapping->html->mapped]; } if (!empty($data[$mapping->username->mapped]) && !empty($data[$mapping->email->mapped])) { $res[] = array('name' => $data[$mapping->username->mapped], 'email' => $data[$mapping->email->mapped], 'html' => $htmlVal); } else { $skipped++; } $total++; } fclose($handle); $subscriber = JModel::getInstance('Subscriber', 'NewsletterModelEntity'); $errors = 0; $added = 0; $updated = 0; $assigned = 0; foreach ($res as $row) { $success = true; // Try to load a man $isExists = $subscriber->load(array('email' => $row['email'])); // Set confirmed is it's empty if (!$subscriber->confirmed == 0) { $subscriber->confirmed = 1; } if (!$isExists) { // If user is not exists then add it! $success = $subscriber->save($row, $type == 'juser'); $added++; } else { if ($settings->overwrite) { // If user is present and we can update it... $success = $subscriber->save($row); $updated++; } } if ($subscriber->getId() && $success) { // Assign the man only if he is not in list already if (!$subscriber->isInList($currentList)) { if ($subscriber->assignToList($currentList)) { $assigned++; } else { $errors++; } } } else { $errors++; } } if (!empty($errors)) { NewsletterHelper::jsonError('Import failed!', array('total' => $total, 'skipped' => $skipped, 'errors' => $errors, 'added' => $added, 'updated' => $updated, 'assigned' => $assigned)); } unlink($file['file']['filepath']); $sess->clear('list.' . $currentList . '.file.uploaded'); NewsletterHelper::jsonMessage('Import complete!', array('total' => $total, 'skipped' => $skipped, 'errors' => $errors, 'added' => $added, 'updated' => $updated, 'assigned' => $assigned)); } }
/** * Render and send the letter to the selected emails * * @return void * @since 1.0 */ public function sendPreview() { $emails = JRequest::getVar('emails', array()); $newsletterId = JRequest::getVar('newsletter_id'); $type = JRequest::getVar('type'); if (empty($type) || empty($newsletterId)) { NewsletterHelper::jsonError(JText::_('COM_NEWSLETTER_RUQUIRED_MISSING')); } if (empty($emails)) { NewsletterHelper::jsonError(JText::_('COM_NEWSLETTER_ADD_EMAILS')); } $data = array('newsletter_id' => $newsletterId, 'type' => $type, 'tracking' => true); foreach ($emails as $email) { $data['subscribers'][] = SubscriberHelper::getByEmail($email[1]); } $mailer = new MigurMailer(); if (!$mailer->sendToList($data)) { $errors = $mailer->getErrors(); LogHelper::addDebug('Sending of preview was failed.', LogHelper::CAT_MAILER, array('Errors' => $errors, 'Emails' => $emails)); NewsletterHelper::jsonError($errors, $emails); } LogHelper::addDebug('Preview was sent successfully.', LogHelper::CAT_MAILER, array('Emails' => $emails)); NewsletterHelper::jsonMessage('ok', $emails); }