public function _handleAll(&$page, Am_BatchProcessor $batch) { $q = $this->grid->getDi()->resourceAccessTable->getResourcesForMembers('newsletterlist', 'resource_id=' . $this->list->pk()); $ids = array(); foreach ($q->selectRows((int) $page, $this->batchCount) as $row) { $ids[] = $row['user_id']; } $page++; if (!$ids) { return true; } if ($this->list->plugin_id == '') { $this->grid->getDi()->db->query("INSERT IGNORE INTO ?_newsletter_user_subscription\n SELECT null, user_id, ?d, 1, 'auto'\n FROM ?_user \n WHERE user_id IN (?a) AND unsubscribed=0", $this->list->pk(), $ids); } else { // select users who has no records in newsletter_user_subscription table for this newsletter list $users = $this->grid->getDi()->userTable->selectObjects("SELECT u.* \n FROM ?_user u\n LEFT JOIN ?_newsletter_user_subscription s \n ON s.user_id = u.user_id AND s.list_id = ?d\n WHERE u.user_id IN (?a) AND ((s.list_id IS NULL) OR (s.is_active = 0 AND s.type = 'auto'))", $this->list->pk(), $ids); $newsletterUserSubscriptionTable = $this->grid->getDi()->newsletterUserSubscriptionTable; foreach ($users as $user) { $newsletterUserSubscriptionTable->add($user, $this->list, NewsletterUserSubscription::TYPE_AUTO); } } }
/** * Get the fieldset to display in the administration section */ function getCMSFields() { $group = null; if ($this->GroupID) { $group = DataObject::get_one("Group", "ID = {$this->GroupID}"); } $fields = new FieldSet(new TextField("Title", _t('NewsletterType.NEWSLETTERTYPE', 'Newsletter Type')), new TextField("FromEmail", _t('NewsletterType.SENDFROM', 'Send newsletters from')), new TabSet("Root", new Tab(_t('NewsletterType.DRAFTS', 'Drafts'), $draftList = new NewsletterList("Draft", $this, _t('NewsletterType.DRAFT', 'Draft'))), new TabSet('Sent', new Tab(_t('NewsletterType.SENT', 'Sent'), $sendList = new NewsletterList("Send", $this, _t('NewsletterType.SEND', 'Send'))), new Tab(_t('NewsletterType.UNSUBSCRIBED', 'Unsubscribed'), $unsubscribedList = new UnsubscribedList("Unsubscribed", $this)), new Tab(_t('NewsletterType.BOUNCED', 'Bounced'), $bouncedList = new BouncedList("Bounced", $this))))); if ($this->GroupID) { $fields->addFieldToTab('Root', new TabSet("Recipients", new Tab(_t('NewsletterType.RECIPIENTS', 'Recipients'), $recipients = new MemberTableField($this, "Recipients", $group)), new Tab(_t('NewsletterType.IMPORT', 'Import'), $importField = new RecipientImportField("ImportFile", _t('NewsletterType.IMPORTFROM', 'Import from file'), $group)))); $recipients->setController($this); $importField->setController($this); $importField->setTypeID($this->ID); } $fields->addFieldToTab('Root', new Tab(_t('NewsletterType.TEMPLATE', 'Template'), $templates = new TemplateList("Template", "Template", $this->Template, NewsletterAdmin::template_path()))); $draftList->setController($this); $sendList->setController($this); $templates->setController($this); $unsubscribedList->setController($this); $bouncedList->setController($this); $fields->push($idField = new HiddenField("ID")); $fields->push(new HiddenField("executeForm", "", "TypeEditForm")); $idField->setValue($this->ID); return $fields; }
/** * Add or enable subscription * @param type $user_id * @param type $list_id * @param type $type * @return type */ function add(User $user, NewsletterList $list, $type) { $list_id = $list->pk(); $user_id = $user->pk(); $sub = $this->findFirstBy(array('user_id' => $user_id, 'list_id' => $list_id)); if (!$sub) { $sub = $this->createRecord(); $sub->user_id = $user_id; $sub->list_id = $list_id; $sub->is_active = 0; $sub->insert(); } $sub->enable($type); return $sub; }
/** * Shows either the 'Sent' or 'Drafts' folder using the NewsletterList template * Didn't see anywhere it is called from top level ajax call or from templete, * it is only called internally from showdrafts and showsent. */ public function ShowNewsletterFolder($params, $type) { $id = $params['ID']; if (!is_numeric($id)) { $id = Session::get('currentPage'); } if (is_a($id, 'NewsletterType')) { $mailType = $id; $id = $mailType->ID; } else { if ($id && is_numeric($id)) { $mailType = DataObject::get_by_id('NewsletterType', $id); } } $draftList = new NewsletterList($type, $mailType, $type); return $draftList->renderWith("NewsletterList"); }