public static function record_click()
 {
     if (isset($_REQUEST[WPAM_PluginConfig::$RefKey]) && !empty($_REQUEST[WPAM_PluginConfig::$RefKey])) {
         //this is the old tracking code (deprecated). This will be removed once the new tracking system is functional.
         global $wpdb;
         $strRefKey = trim(strip_tags($_REQUEST[WPAM_PluginConfig::$RefKey]));
         $aff_id = "";
         if (is_numeric($strRefKey)) {
             //wpam_refkey contains affiliate ID. If a record is found save it
             $query = "SELECT * FROM " . WPAM_AFFILIATES_TBL . " WHERE affiliateId = %d";
             $affiliate = $wpdb->get_row($wpdb->prepare($query, $strRefKey));
             if ($affiliate != null && $affiliate->status == "active") {
                 $aff_id = $strRefKey;
             }
         } else {
             if (is_email($strRefKey)) {
                 //wpam_refkey contains email. Find the ID associated with that email and save it
                 $query = "SELECT * FROM " . WPAM_AFFILIATES_TBL . " WHERE email = %s";
                 $affiliate = $wpdb->get_row($wpdb->prepare($query, $strRefKey));
                 if ($affiliate != null && $affiliate->status == "active") {
                     $aff_id = $affiliate->affiliateId;
                 }
             } else {
                 //TODO start - wpam_refkey contains long tracking key. Find affiliate ID from it and save it. This block of code will just be here for backwards compatibilty
                 $refKey = new WPAM_Tracking_TrackingKey();
                 $refKey->unpack($strRefKey);
                 $db = new WPAM_Data_DataAccess();
                 $affiliateRepos = $db->getAffiliateRepository();
                 $affiliateId = $affiliateRepos->getAffiliateIdFromRefKey($refKey->getAffiliateRefKey());
                 if ($affiliateId === NULL) {
                 } else {
                     $aff_id = $affiliateId;
                 }
             }
         }
         //TODO end
         if (!empty($aff_id)) {
             $cookie_life_time = wpam_get_cookie_life_time();
             setcookie('wpam_id', $aff_id, $cookie_life_time, "/", COOKIE_DOMAIN);
         }
     }
     //this will be the new affiliate link. A click will be tracked when wpam_id is present in the URL
     if (isset($_REQUEST[WPAM_PluginConfig::$wpam_id]) && !empty($_REQUEST[WPAM_PluginConfig::$wpam_id])) {
         $aff_id = trim(strip_tags($_REQUEST[WPAM_PluginConfig::$wpam_id]));
         $cookie_life_time = wpam_get_cookie_life_time();
         setcookie('wpam_id', $aff_id, $cookie_life_time, "/", COOKIE_DOMAIN);
         $args = array();
         $args['dateCreated'] = date("Y-m-d H:i:s", time());
         $args['sourceAffiliateId'] = $aff_id;
         $args['trackingKey'] = uniqid();
         //save a unique ID to avoid error
         $args['sourceCreativeId'] = '';
         // remove this column from the click tracking menu in the settings
         $args['referer'] = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
         $args['affiliateSubCode'] = '';
         WPAM_Click_Tracking::insert_click_data($args);
     }
 }
 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 );
     $args = array();
     $args['aff_id'] = $model->affiliateId;
     $total_clicks = WPAM_Click_Tracking::get_all_time_total_clicks($args);
     $total_transaction_count = WPAM_Commission_Tracking::get_all_time_transaction_count($args);
     $response->viewData['visitCount'] = $total_clicks;
     //$summary->visits;
     $response->viewData['purchaseCount'] = $total_transaction_count;
     //$summary->purchases;
     //save for form validation in the footer
     $this->response = $response;
     return $response;
 }
 protected function doOverviewHome($request, $affiliate)
 {
     $db = new WPAM_Data_DataAccess();
     $accountSummary = $db->getTransactionRepository()->getAccountSummary($affiliate->affiliateId);
     $args = array();
     $args['aff_id'] = $affiliate->affiliateId;
     //show total clicks for today
     $args['start_date'] = date("Y-m-d H:i:s", strtotime('today'));
     $args['end_date'] = date("Y-m-d H:i:s", strtotime('tomorrow'));
     $today_clicks = WPAM_Click_Tracking::get_total_clicks($args);
     //show total number of transactions for today
     $today_transaction_count = WPAM_Commission_Tracking::get_transaction_count($args);
     //show total commission for today
     $today_total_commission = WPAM_Commission_Tracking::get_total_commission_amount($args);
     //show total clicks for this month
     $args['start_date'] = date("Y-m-d H:i:s", strtotime(date("Y-m-01")));
     $args['end_date'] = date("Y-m-d H:i:s", strtotime(date("Y-m-01", strtotime("+1 month"))));
     $monthly_clicks = WPAM_Click_Tracking::get_total_clicks($args);
     //show total number of transactions for this month
     $monthly_transaction_count = WPAM_Commission_Tracking::get_transaction_count($args);
     //show total commission for this month
     $monthly_total_commission = WPAM_Commission_Tracking::get_total_commission_amount($args);
     $response = new WPAM_Pages_TemplateResponse('affiliate_cp_home');
     $response->viewData['accountStanding'] = $accountSummary->standing;
     $response->viewData['commissionRateString'] = $this->getCommissionRateString($affiliate);
     $response->viewData['monthVisitors'] = $monthly_clicks;
     //$eventSummary->visits;
     $response->viewData['monthClosedTransactions'] = $monthly_transaction_count;
     //$eventSummary->purchases;
     $response->viewData['monthRevenue'] = $monthly_total_commission;
     //$monthAccountSummary->credits;
     $response->viewData['todayVisitors'] = $today_clicks;
     //$todayEventSummary->visits;
     $response->viewData['todayClosedTransactions'] = $today_transaction_count;
     //$todayEventSummary->purchases;
     $response->viewData['todayRevenue'] = $today_total_commission;
     //$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;
 }
 public function onInit()
 {
     add_action('wp_enqueue_scripts', array($this, 'load_shortcode_specific_scripts'));
     add_action('wp_head', array($this, 'handle_wp_head_hook'));
     //actions & filters
     add_action('template_redirect', array($this, 'onTemplateRedirect'));
     add_action('admin_menu', array($this, 'onAdminMenu'));
     add_action('current_screen', array($this, 'onCurrentScreen'));
     add_action('wp_ajax_wpam-ajax_request', array($this, 'onAjaxRequest'));
     add_filter('pre_user_email', array($this, 'filterUserEmail'));
     //set the locale for money format & paypal
     $this->locale = WPAM_LOCALE_OVERRIDE ? WPAM_LOCALE_OVERRIDE : get_locale();
     $this->setloc = $this->setMonetaryLocale($this->locale);
     //loading provided locale didn't work, choose default
     if (!$this->setloc && setlocale(LC_MONETARY, 0) == 'C') {
         setlocale(LC_MONETARY, '');
     }
     add_action('admin_notices', array($this, 'showAdminMessages'));
     if (!is_admin()) {
         add_filter('widget_text', 'do_shortcode');
     }
     add_shortcode('AffiliatesRegister', array($this->publicPages[self::PAGE_NAME_REGISTER], 'doShortcode'));
     add_shortcode('AffiliatesHome', array($this->publicPages[self::PAGE_NAME_HOME], 'doShortcode'));
     add_shortcode('AffiliatesLogin', array($this, 'doLoginShortcode'));
     add_action('save_post', array($this, 'onSavePage'), 10, 2);
     try {
         if (isset($_GET[WPAM_PluginConfig::$RefKey])) {
             $requestTracker = new WPAM_Tracking_RequestTracker();
             $query_args = $_GET;
             $requestTracker->handleIncomingReferral($query_args);
         }
     } catch (Exception $e) {
         wp_die("WPAM FAILED: " . $e->getMessage());
     }
     //new affiliate tracking code
     WPAM_Click_Tracking::record_click();
 }