get_row($wpdb->prepare($query, $strRefKey)); if ( $trackingToken != null ) { $trackingTokenId = $trackingToken->trackingTokenId; $query = "SELECT * FROM ".WPAM_TRACKING_TOKENS_PURCHASE_LOGS_TBL." WHERE trackingTokenId = %s AND purchaseLogId = %s"; $ttpl = $wpdb->get_row($wpdb->prepare($query, $trackingTokenId, $purchaseLogId)); if($ttpl != null){ } else{ $table = WPAM_TRACKING_TOKENS_PURCHASE_LOGS_TBL; $data = array(); $data['trackingTokenId'] = $trackingTokenId; $data['purchaseLogId'] = $purchaseLogId; $wpdb->insert( $table, $data); //this will be handled further down if the affiliate is set and the purchase was successful //$db->getEventRepository()->quickInsert(time(), $strRefKey, 'purchase'); } } } //TODO end $args = array(); $args['txn_id'] = $purchaseLogId; $args['amount'] = $purchaseAmount; if(is_numeric($strRefKey)){ //$strRefKey contains affiliate ID from the new cookie system (wpam_id) $args['aff_id'] = $strRefKey; } WPAM_Commission_Tracking::award_commission($args); } public function handleCheckoutWithRefKey( $purchaseLogId, $purchaseAmount, $strRefKey) { //TODO start - we only need this to block of code to keep backwards compatibility. later when we will directly get affiliate ID from cookie it can be deleted $db = new WPAM_Data_DataAccess(); $binConverter = new WPAM_Util_BinConverter(); $affiliate = NULL; global $wpdb; // keeping this block and "($affiliate !== NULL)" seperate to // help indicate any problems // (purchase log recorded w/o a purchase event) if ( !empty($strRefKey )) { $query = "SELECT * FROM ".WPAM_TRACKING_TOKENS_TBL." WHERE trackingKey = %s"; $trackingToken = $wpdb->get_row($wpdb->prepare($query, $strRefKey)); if ( $trackingToken != null ) { $trackingTokenId = $trackingToken->trackingTokenId; $query = "SELECT * FROM ".WPAM_TRACKING_TOKENS_PURCHASE_LOGS_TBL." WHERE trackingTokenId = %s AND purchaseLogId = %s"; $ttpl = $wpdb->get_row($wpdb->prepare($query, $trackingTokenId, $purchaseLogId)); if($ttpl != null){ } else{ $table = WPAM_TRACKING_TOKENS_PURCHASE_LOGS_TBL; $data = array(); $data['trackingTokenId'] = $trackingTokenId; $data['purchaseLogId'] = $purchaseLogId; $wpdb->insert( $table, $data); //this will be handled further down if the affiliate is set and the purchase was successful //$db->getEventRepository()->quickInsert(time(), $strRefKey, 'purchase'); } } } //TODO end $args = array(); $args['txn_id'] = $purchaseLogId; $args['amount'] = $purchaseAmount; if(is_numeric($strRefKey)){ //$strRefKey contains affiliate ID from the new cookie system (wpam_id) $args['aff_id'] = $strRefKey; } WPAM_Commission_Tracking::award_commission($args); } protected function calculateCreditAmount(WPAM_Data_Models_AffiliateModel $affiliate, $amount) { if ($affiliate->bountyType === 'percent') { return $amount * ($affiliate->bountyAmount / 100.0); } else if ($affiliate->bountyType === 'fixed') { return $affiliate->bountyAmount; } } public function handleIncomingReferral($request) { $strRefKey = NULL; if ( isset( $request[WPAM_PluginConfig::$RefKey] ) ) { $strRefKey = $request[WPAM_PluginConfig::$RefKey]; } else { throw new Exception( __( 'no refkey in request.', 'wpam' ) ); } if ( ! array_key_exists( WPAM_PluginConfig::$RefKey, $_COOKIE ) ) { if(is_email($strRefKey)) //wpam_refkey contains email { $db1 = new WPAM_Data_DataAccess(); $affiliateRepos1 = $db1->getAffiliateRepository(); $affiliate = $affiliateRepos1->loadBy(array('email' => $strRefKey, 'status' => 'active')); if ( $affiliate === NULL ) { //affiliate with this email does not exist } else { $default_creative_id = get_option(WPAM_PluginConfig::$DefaultCreativeId); if(!empty($default_creative_id)) { $creative = $db1->getCreativesRepository()->load($default_creative_id); $linkBuilder = new WPAM_Tracking_TrackingLinkBuilder($affiliate, $creative); $strRefKey = $linkBuilder->getTrackingKey()->pack(); } } } else if(is_numeric($strRefKey)) //wpam_refkey contains affiliate ID { $db1 = new WPAM_Data_DataAccess(); $affiliateRepos1 = $db1->getAffiliateRepository(); $affiliate = $affiliateRepos1->loadBy(array('affiliateId' => $strRefKey, 'status' => 'active')); if ( $affiliate === NULL ) { //affiliate with this ID does not exist } else { $default_creative_id = get_option(WPAM_PluginConfig::$DefaultCreativeId); if(!empty($default_creative_id)) { $creative = $db1->getCreativesRepository()->load($default_creative_id); $linkBuilder = new WPAM_Tracking_TrackingLinkBuilder($affiliate, $creative); $strRefKey = $linkBuilder->getTrackingKey()->pack(); } } } $refKey = new WPAM_Tracking_TrackingKey(); $refKey->unpack( $strRefKey ); $db = new WPAM_Data_DataAccess(); $affiliateRepos = $db->getAffiliateRepository(); $affiliateId = $affiliateRepos->getAffiliateIdFromRefKey( $refKey->getAffiliateRefKey() ); if ( $affiliateId === NULL ) { echo '
Affiliate ID: ';
				var_export($affiliateId);
				echo "\n\n";
				echo $refKey;
				throw new Exception( __( 'invalid refkey data.', 'wpam' ) );
			}

			//#37 make sure the affiliate is active before tracking stats
			$affiliate = $affiliateRepos->load( $affiliateId );
			if ( ! $affiliate->isActive() )
				return;

			$idGenerator = new WPAM_Tracking_UniqueIdGenerator();
			$trackTokenModel = new WPAM_Data_Models_TrackingTokenModel();

			$trackTokenModel->dateCreated = time();
			$trackTokenModel->sourceAffiliateId = $affiliateId;
			$trackTokenModel->sourceCreativeId = $refKey->getCreativeId();
			$trackTokenModel->trackingKey = $idGenerator->generateId();
			$trackTokenModel->referer = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : NULL;

			if ( isset( $request['wpam_affiliateSubCode'] ) ) {
				$trackTokenModel->affiliateSubCode = $request['wpam_affiliateSubCode'];
			}

			$db->getTrackingTokenRepository()->insert( $trackTokenModel );
			$db->getEventRepository()->quickInsert( time(), $trackTokenModel->trackingKey, 'visit' );

			$binConverter = new WPAM_Util_BinConverter();
			// store the tracking key in a cookie so we can monitor their activities
			$return = setcookie( WPAM_PluginConfig::$RefKey,
								 $binConverter->binToString( $trackTokenModel->trackingKey ),
								 $this->getExpireTime(),
								 COOKIEPATH );
		}
	}

	public function handleImpression($request)
	{
		$strRefKey = NULL;

		if ( isset( $request[WPAM_PluginConfig::$RefKey] ) ) {
			$strRefKey = $request[WPAM_PluginConfig::$RefKey];
		} else {
			throw new Exception(  __( 'no refkey in request.', 'wpam' ) );
		}

		$refKey = new WPAM_Tracking_TrackingKey();
		$refKey->unpack( $strRefKey );

		$db = new WPAM_Data_DataAccess();
		$affiliateRepos = $db->getAffiliateRepository();
		$affiliateId = $affiliateRepos->getAffiliateIdFromRefKey( $refKey->getAffiliateRefKey() );

		if ( $affiliateId === NULL ) {
			throw new Exception( __( 'invalid refkey data: ', 'wpam' ) . $strRefKey );
		}

		$impressionModel = new WPAM_Data_Models_ImpressionModel();

		$impressionModel->dateCreated = time();
		$impressionModel->sourceAffiliateId = $affiliateId;
		$impressionModel->sourceCreativeId = $refKey->getCreativeId();
		$impressionModel->referer = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : NULL;

		if ( isset( $request['wpam_affiliateSubCode'] ) ) {
			$impressionModel->affiliateSubCode = $request['wpam_affiliateSubCode'];
		}

		$db->getImpressionRepository()->insert( $impressionModel );
	}

	protected function getExpireTime() {
		$days = get_option( WPAM_PluginConfig::$CookieExpireOption );
		if ( $days == 0 )
			return 0;

		return strtotime( "+{$days} days" );
	}
}