Example #1
0
 /**
  * Subscribe/Unsubscribe from *Multiple* Mailing Lists
  *
  * @return 	void
  */
 public function doMultiSubscribeTask()
 {
     //get request vars
     $lists = Request::getVar('lists', array(), 'post');
     $email = User::get('email');
     //get my lists
     $newsletterMailinglist = new MailList($this->database);
     $mylists = $newsletterMailinglist->getListsForEmail($email, 'mailinglistid');
     // subscribe user to checked lists
     foreach ($lists as $list) {
         //only subscribe if not previously
         if (!in_array($list, array_keys($mylists))) {
             //load mailing list object
             $newsletterMailinglist = new MailList($this->database);
             $newsletterMailinglist->load($list);
             //make sure its not private or already deleted
             if (is_object($newsletterMailinglist) && !$newsletterMailinglist->private && !$newsletterMailinglist->deleted) {
                 $subscription = new stdClass();
                 $subscription->mid = $list;
                 $subscription->email = $email;
                 $subscription->status = 'inactive';
                 $subscription->date_added = Date::toSql();
                 //mail confirmation email and save subscription
                 if (Helper::sendMailinglistConfirmationEmail($email, $newsletterMailinglist, false)) {
                     $newsletterMailinglistEmail = new MailinglistEmail($this->database);
                     $newsletterMailinglistEmail->save($subscription);
                 }
             }
         }
     }
     //check to make sure we dont need to unsubscribe from lists
     foreach ($mylists as $mylist) {
         //instantiate newsletter mailing email
         $newsletterMailinglistEmail = new MailinglistEmail($this->database);
         $newsletterMailinglistEmail->load($mylist->id);
         //do we want to mark as active or mark as unsubscribed
         if (!in_array($mylist->mailinglistid, $lists)) {
             //set as unsubscribed
             $newsletterMailinglistEmail->status = 'unsubscribed';
             $newsletterMailinglistEmail->confirmed = 0;
             $newsletterMailinglistEmail->date_confirmed = null;
         } else {
             if ($mylist->status != 'active') {
                 //set as active
                 $newsletterMailinglistEmail->status = 'inactive';
                 //load mailing list object
                 $newsletterMailinglist = new MailList($this->database);
                 $newsletterMailinglist->load($mylist->mailinglistid);
                 //send a new confirmation
                 Helper::sendMailinglistConfirmationEmail($email, $newsletterMailinglist, false);
                 //delete all unsubscribes
                 $sql = "DELETE FROM #__newsletter_mailinglist_unsubscribes\n\t\t\t\t\t\tWHERE mid=" . $this->database->quote($mylist->mailinglistid) . "\n\t\t\t\t\t\tAND email=" . $this->database->quote($email);
                 $this->database->setQuery($sql);
                 $this->database->query();
             }
         }
         //save
         $newsletterMailinglistEmail->save($newsletterMailinglistEmail);
     }
     //inform user and redirect
     App::redirect(Route::url('index.php?option=com_newsletter&task=subscribe'), Lang::txt('COM_NEWSLETTER_MAILINGLISTS_SAVE_SUCCESS'));
 }