function wpam_generate_refkey_from_affiliate_id($aff_id)
{
    $db = new WPAM_Data_DataAccess();
    $affiliateRepos1 = $db->getAffiliateRepository();
    $wpam_refkey = NULL;
    $affiliate = $affiliateRepos1->loadBy(array('affiliateId' => $aff_id, 'status' => 'active'));
    if ($affiliate === NULL) {
        //affiliate with this ID does not exist
        WPAM_Logger::log_debug("generate_refkey_from_affiliate_id function - affiliate ID " . $aff_id . " does not exist");
    } else {
        $default_creative_id = get_option(WPAM_PluginConfig::$DefaultCreativeId);
        if (!empty($default_creative_id)) {
            $creative = $db->getCreativesRepository()->load($default_creative_id);
            $linkBuilder = new WPAM_Tracking_TrackingLinkBuilder($affiliate, $creative);
            $strRefKey = $linkBuilder->getTrackingKey()->pack();
            $refKey = new WPAM_Tracking_TrackingKey();
            $refKey->unpack($strRefKey);
            $idGenerator = new WPAM_Tracking_UniqueIdGenerator();
            $trackTokenModel = new WPAM_Data_Models_TrackingTokenModel();
            $trackTokenModel->dateCreated = time();
            $trackTokenModel->sourceAffiliateId = $aff_id;
            $trackTokenModel->sourceCreativeId = $refKey->getCreativeId();
            $trackTokenModel->trackingKey = $idGenerator->generateId();
            $trackTokenModel->referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : NULL;
            /* add a new visit so it doesn't fail while awarding commission */
            $db->getTrackingTokenRepository()->insert($trackTokenModel);
            $db->getEventRepository()->quickInsert(time(), $trackTokenModel->trackingKey, 'visit');
            /* */
            $binConverter = new WPAM_Util_BinConverter();
            $wpam_refkey = $binConverter->binToString($trackTokenModel->trackingKey);
        }
    }
    return $wpam_refkey;
}
 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)) {
             $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)) {
                 $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 '<pre>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);
     }
 }
 protected function doOverviewHome($request, $affiliate)
 {
     $db = new WPAM_Data_DataAccess();
     $accountSummary = $db->getTransactionRepository()->getAccountSummary($affiliate->affiliateId);
     $eventSummary = $db->getEventRepository()->getSummaryForRange(strtotime(date("Y-m-01")), strtotime(date("Y-m-01", strtotime("+1 month"))), $affiliate->affiliateId);
     $todayEventSummary = $db->getEventRepository()->getSummaryForRange(strtotime('today'), strtotime('tomorrow'), $affiliate->affiliateId);
     $monthAccountSummary = $db->getTransactionRepository()->getAccountSummary($affiliate->affiliateId, strtotime(date("Y-m-01")), strtotime(date("Y-m-01", strtotime("+1 month"))));
     $todayAccountSummary = $db->getTransactionRepository()->getAccountSummary($affiliate->affiliateId, strtotime('today'), strtotime('tomorrow'));
     $response = new WPAM_Pages_TemplateResponse('affiliate_cp_home');
     $response->viewData['accountStanding'] = $accountSummary->standing;
     $response->viewData['commissionRateString'] = $this->getCommissionRateString($affiliate);
     $response->viewData['monthVisitors'] = $eventSummary->visits;
     $response->viewData['monthClosedTransactions'] = $eventSummary->purchases;
     $response->viewData['monthRevenue'] = $monthAccountSummary->credits;
     $response->viewData['todayVisitors'] = $todayEventSummary->visits;
     $response->viewData['todayClosedTransactions'] = $todayEventSummary->purchases;
     $response->viewData['todayRevenue'] = $todayAccountSummary->credits;
     if (get_option(WPAM_PluginConfig::$AffEnableImpressions)) {
         $response->viewData['monthImpressions'] = $db->getImpressionRepository()->getImpressionsForRange(strtotime(date("Y-m-01")), strtotime(date("Y-m-01", strtotime("+1 month"))), $affiliate->affiliateId);
         $response->viewData['todayImpressions'] = $db->getImpressionRepository()->getImpressionsForRange(strtotime('today'), strtotime('tomorrow'), $affiliate->affiliateId);
     }
     return $response;
 }
 protected function getDetailForm($affiliateFields, $model, $request = null, $validationResult = null)
 {
     //add widget_form_error js to affiliate_detail page
     add_action('admin_footer', array($this, 'onFooter'));
     $db = new WPAM_Data_DataAccess();
     $response = new WPAM_Pages_TemplateResponse('admin/affiliate_detail');
     $response->viewData['affiliateFields'] = $affiliateFields;
     $response->viewData['affiliate'] = $model;
     $where = array('affiliateId' => $model->affiliateId);
     $affiliateHelper = new WPAM_Util_AffiliateFormHelper();
     $affiliateHelper->addTransactionDateRange($where, $request, $response);
     $response->viewData['transactions'] = $db->getTransactionRepository()->loadMultipleBy($where, array('dateCreated' => 'desc'));
     $response->viewData['showBalance'] = true;
     $response->viewData['paymentMethods'] = $affiliateHelper->getPaymentMethods();
     $response->viewData['paymentMethod'] = isset($request['ddPaymentMethod']) ? $request['ddPaymentMethod'] : $model->paymentMethod;
     $response->viewData['paypalEmail'] = isset($request['txtPaypalEmail']) ? $request['txtPaypalEmail'] : $model->paypalEmail;
     $response->viewData['bountyType'] = isset($request['ddBountyType']) ? $request['ddBountyType'] : $model->bountyType;
     $response->viewData['bountyAmount'] = isset($request['txtBountyAmount']) ? $request['txtBountyAmount'] : $model->bountyAmount;
     $this->addBalance($response->viewData['transactions'], $db->getTransactionRepository()->getBalance($model->affiliateId, empty($request['from']) ? NULL : $request['from']), 'desc');
     $accountStanding = $db->getTransactionRepository()->getAccountSummary($model->affiliateId);
     $response->viewData['accountStanding'] = $accountStanding->standing;
     $response->viewData['accountCredits'] = $accountStanding->credits;
     $response->viewData['accountDebits'] = $accountStanding->debits;
     $response->viewData['accountAdjustments'] = $accountStanding->adjustments;
     $response->viewData['user'] = new WP_User($model->userId);
     if ($request !== null) {
         $response->viewData['request'] = $request;
     }
     if ($validationResult !== null) {
         //die(print_r($validationResult, true));
         $response->viewData['validationResult'] = $validationResult;
     }
     $response->viewData['affiliateFields'] = $affiliateFields;
     $response->viewData['creatives'] = $db->getCreativesRepository()->loadAllActiveNoDeletes();
     if (get_option(WPAM_PluginConfig::$AffEnableImpressions)) {
         $where = array('sourceAffiliateId' => $model->affiliateId);
         $response->viewData['impressions'] = $db->getImpressionRepository()->loadMultipleByLimit($where, array('dateCreated' => 'desc'), 100);
         $creativeNames = array();
         foreach ($response->viewData['impressions'] as $impression) {
             if (!array_key_exists($impression->sourceCreativeId, $creativeNames)) {
                 $creativeNames[$impression->sourceCreativeId] = $db->getCreativesRepository()->load($impression->sourceCreativeId)->name;
             }
         }
         $response->viewData['creativeNames'] = $creativeNames;
         $where = array('sourceAffiliateId' => $model->affiliateId);
         $response->viewData['impressionCount'] = $db->getImpressionRepository()->count($where);
         $summary = $db->getEventRepository()->getSummary($model->affiliateId);
         $response->viewData['visitCount'] = $summary->visits;
         $response->viewData['purchaseCount'] = $summary->purchases;
     }
     //save for form validation in the footer
     $this->response = $response;
     return $response;
 }