Beispiel #1
0
 /**
  * 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);
 }
Beispiel #2
0
 /**
  * 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));
     }
 }
Beispiel #3
0
 /**
  * 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);
 }