예제 #1
0
 /**
  * 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);
 }
예제 #2
0
	/**
	 * 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;
	}