/** * Porcess the bounce data and update the database * @param Bounce $bounce * @param int $campaign_id * @param Subscriber $subscriber * @return bool */ private function processBounceData($bounce, $campaign_id, $subscriber) { if ($campaign_id === 'systemmessage' && $subscriber !== false) { $bounce->status = 'bounced system message'; $bounce->comment = sprintf('%s marked unconfirmed', $subscriber->id); $bounce->update(); phpList::log()->notice($subscriber->id . ' ' . s('system message bounced, subscriber marked unconfirmed')); $subscriber->addHistory(s('Bounced system message'), sprintf('<br/>%s<br/><a href="./?page=bounce&id=%d">%s</a>', s('Subscriber marked unconfirmed'), $bounce->id, s('View Bounce')), $subscriber->id); $subscriber->confirmed = 0; $subscriber->update(); } elseif (!empty($campaign_id) && $subscriber !== false) { $bounce->connectMeToSubscriberAndMessage($subscriber, $campaign_id); } elseif ($subscriber !== false) { $bounce->status = 'bounced unidentified message'; $bounce->comment = $subscriber->id . ' bouncecount increased'; $bounce->update(); $subscriber->bouncecount++; $subscriber->update(); } elseif ($campaign_id === 'systemmessage') { $bounce->status = 'bounced system message'; $bounce->comment = 'unknown subscriber'; $bounce->update(); phpList::log()->notice($subscriber->id . ' ' . s('system message bounced, but unknown subscriber')); } elseif ($campaign_id) { $bounce->status = sprintf('bounced list message %d', $campaign_id); $bounce->comment = 'unknown subscriber'; $bounce->update(); phpList::DB()->query(sprintf('UPDATE %s SET bouncecount = bouncecount + 1 WHERE id = %d', Config::getTableName('message'), $campaign_id)); } else { $bounce->status = 'unidentified bounce'; $bounce->comment = 'not processed'; $bounce->update(); return false; } return true; }
/** * Add this bounce to a user and message * @param Subscriber $subscriber * @param int $campaign_id */ public function connectMeToSubscriberAndMessage($subscriber, $campaign_id) { ## check if we already have this um as a bounce ## so that we don't double count "delayed" like bounces $exists = phpList::DB()->query(sprintf('SELECT COUNT(*) FROM %s WHERE user = %d AND message = %d', Config::getTableName('user_message_bounce'), $subscriber->id, $campaign_id)); phpList::DB()->query(sprintf('INSERT INTO %s SET user = %d, message = %d, bounce = %d', Config::getTableName('user_message_bounce'), $subscriber->id, $campaign_id, $this->id)); $this->status = 'bounced list message ' . $campaign_id; $this->comment = $subscriber->id . 'bouncecount increased'; $this->save(); ## if the relation did not exist yet, increment the counters if ($exists->rowCount() > 0) { phpList::DB()->query(sprintf('UPDATE %s SET bouncecount = bouncecount + 1 WHERE id = %d', Config::getTableName('message'), $campaign_id)); $subscriber->bouncecount++; $subscriber->update(); } }