/** * OpenTracked * Logs an event when a user opens a campaign or autoresponder * * @uses Subscriber_API::AddEvent * @uses Stats_API::GetNewsletterSummary * @uses Stats_API::GetAutoresponderSummary * * @return Void Returns nothing */ public static function OpenTracked($eventdata) { if (!self::LoadSelf()) { return; } $subscribersapi = new Subscribers_API(); $statsapi = new Stats_API(); if (!isset($eventdata->open_details['subscriberid']) || !isset($eventdata->open_details['listid'])) { return; } switch ($eventdata->statstype[0]) { case 'n': $newsletter = $statsapi->GetNewsletterSummary($eventdata->open_details['statid'], true); if (empty($newsletter) || !isset($newsletter['newsletterid'])) { return false; } $event = array('type' => GetLang('Addon_emaileventlog_open'), 'eventdate' => $subscribersapi->GetServerTime(), 'subject' => sprintf(GetLang('Addon_emaileventlog_open_subject'), htmlspecialchars($newsletter['newslettername'], ENT_QUOTES, SENDSTUDIO_CHARSET)), 'notes' => GetLang('Addon_emaileventlog_opened_campaign')); break; case 'a': $stats = $statsapi->FetchStats($eventdata->open_details['statid'], 'a'); $autoresponder = $statsapi->GetAutoresponderSummary($stats['autoresponderid'], true); if (empty($autoresponder) || !isset($autoresponder['autoresponderid'])) { return false; } $event = array('type' => GetLang('Addon_emaileventlog_open_autoresponder'), 'eventdate' => $subscribersapi->GetServerTime(), 'subject' => sprintf(GetLang('Addon_emaileventlog_open_autoresponder_subject'), htmlspecialchars($autoresponder['autorespondername'], ENT_QUOTES, SENDSTUDIO_CHARSET)), 'notes' => GetLang('Addon_emaileventlog_opened_autoresponder')); break; default: } $subscribersapi->AddEvent($eventdata->open_details['subscriberid'], $eventdata->open_details['listid'], $event); }
/** * GetRecordByAssociatedLinkIDStatID * Get trigger email records that are being triggered by link clicked on a particular statistic. * * This method will return an array of the following: * - listid: All of the list id associated with the statistics * - triggeremails: All of triggeremails that is listening to this particular newsletter open * * @param Integer $linkid ID of the link to be searched for * @param Integer $statid ID of the statistic of which the link was clicked from * @return Mixed Returns FALSE if it couldn't retrieve trigger emails information. Otherwise returns an array response (see description). * * @uses SENDSTUDIO_TABLEPREFIX * @uses Db::Query() * @uses Db::GetError() * @uses Db::Fetch() * @uses Db::FreeResult() */ protected function GetRecordByAssociatedLinkIDStatID($linkid, $statid) { $return = array( 'lists' => array(), 'triggeremails' => array() ); $linkid = intval($linkid); $statid = intval($statid); $newsletter = null; if ($linkid == 0 || $statid == 0) { trigger_error('Invalid link ID/Stat ID specified', E_USER_NOTICE); return false; } // ----- Get Newsletter ID from statistic require_once(dirname(__FILE__) . '/stats.php'); $statapi = new Stats_API(); $newsletter = $statapi->GetNewsletterSummary($statid, true); if (empty($newsletter) || !isset($newsletter['newsletterid'])) { // Fail silently, because if the newsletter record has been removed we don't want to fill up the logs. return false; } unset($statapi); // ----- if (isset($newsletter['lists']) && is_array($newsletter['lists'])) { $return['lists'] = $newsletter['lists']; } $query = " SELECT t.* FROM [|PREFIX|]triggeremails AS t JOIN [|PREFIX|]triggeremails_data AS tdl ON ( tdl.triggeremailsid = t.triggeremailsid AND tdl.datakey = 'linkid' AND tdl.datavalueinteger = {$linkid}) JOIN [|PREFIX|]triggeremails_data AS tdn ON ( tdn.triggeremailsid = t.triggeremailsid AND tdn.datakey = 'linkid_newsletterid' AND tdn.datavalueinteger = {$newsletter['newsletterid']}) WHERE t.active = '1' AND t.triggertype = 'l' "; $result = $this->Db->Query($query); if (!$result) { list($error, $level) = $this->Db->GetError(); trigger_error($error, $level); return false; } while (($row = $this->Db->Fetch($result))) { $return['triggeremails'][$row['triggeremailsid']] = $row; } $this->Db->FreeResult($result); // ----- Get data and actions associated with the triggers if (!empty($return['triggeremails'])) { $triggerids = array_keys($return['triggeremails']); $tempData = $this->GetData($triggerids); if (!$tempData) { trigger_error('Cannot fetch triggeremails data', E_USER_NOTICE); return false; } foreach ($tempData as $id => $each) { $return['triggeremails'][$id]['data'] = $each; } $tempActions = $this->GetActions($triggerids); if (!$tempActions) { trigger_error('Cannot fetch triggeremails actions', E_USER_NOTICE); return false; } foreach ($tempActions as $id => $each) { $return['triggeremails'][$id]['triggeractions'] = $each; } } // ----- return $return; }