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