/** * 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')); }