/**
  * Obtain the referring affiliate's id.
  * @param string $service by name
  * @return int affiliate id or false if none applies
  */
 public static function get_referrer_id($service = null)
 {
     $affiliate_id = false;
     switch ($service) {
         default:
             if (isset($_COOKIE[AFFILIATES_COOKIE_NAME])) {
                 $affiliate_id = affiliates_check_affiliate_id_encoded(trim($_COOKIE[AFFILIATES_COOKIE_NAME]));
             }
     }
     if (!$affiliate_id) {
         if (get_option('aff_use_direct', true)) {
             // Assume a direct referral
             $affiliate_id = affiliates_get_direct_id();
         }
     }
     return apply_filters('affiliates_service_affiliate_id', $affiliate_id, $service);
 }
Example #2
0
/**
 * Looks in the query variables and sets a cookie with the affiliate id.
 * Hook into parse_request.
 * @param WP $wp the WordPress environment
 * @link http://php.net/manual/en/function.setcookie.php
 */
function affiliates_parse_request(&$wp)
{
    global $wpdb, $affiliates_options;
    $pname = get_option('aff_pname', AFFILIATES_PNAME);
    $affiliate_id = isset($wp->query_vars[$pname]) ? affiliates_check_affiliate_id_encoded(trim($wp->query_vars[$pname])) : null;
    if (isset($wp->query_vars[$pname])) {
        // affiliates-by-username uses this hook
        $maybe_affiliate_id = apply_filters('affiliates_parse_request_affiliate_id', $wp->query_vars[$pname], $affiliate_id);
        if ($maybe_affiliate_id !== null && $maybe_affiliate_id !== trim($wp->query_vars[$pname])) {
            $affiliate_id = $maybe_affiliate_id;
        }
    }
    if ($affiliate_id) {
        $encoded_id = affiliates_encode_affiliate_id($affiliate_id);
        $days = apply_filters('affiliates_cookie_timeout_days', get_option('aff_cookie_timeout_days', AFFILIATES_COOKIE_TIMEOUT_DAYS), $affiliate_id);
        if ($days > 0) {
            $expire = time() + AFFILIATES_COOKIE_TIMEOUT_BASE * $days;
        } else {
            $expire = 0;
        }
        if (class_exists('Affiliates_Campaign') && method_exists('Affiliates_Campaign', 'evaluate')) {
            if (!empty($_REQUEST['cmid'])) {
                if ($cmid = Affiliates_Campaign::evaluate($_REQUEST['cmid'], $affiliate_id)) {
                    $encoded_id .= '.' . $cmid;
                }
            }
        }
        setcookie(AFFILIATES_COOKIE_NAME, $encoded_id, $expire, SITECOOKIEPATH, COOKIE_DOMAIN);
        affiliates_record_hit($affiliate_id);
        affiliates_pixel_request();
        unset($wp->query_vars[$pname]);
        // we use this to avoid ending up on the blog listing page
        if (get_option('aff_redirect', false) !== false) {
            // use a redirect so that we end up on the desired url without the affiliate id dangling on the url
            $current_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
            $current_url = remove_query_arg($pname, $current_url);
            $current_url = preg_replace('#' . str_replace(AFFILIATES_PNAME, $pname, AFFILIATES_REGEX_PATTERN) . '#', '', $current_url);
            // note that we must use delimiters other than / as these are used in AFFILIATES_REGEX_PATTERN
            $status = apply_filters('affiliates_redirect_status_code', 302);
            $status = intval($status);
            switch ($status) {
                case 300:
                case 301:
                case 302:
                case 303:
                case 304:
                case 305:
                case 306:
                case 307:
                    break;
                default:
                    $status = 302;
            }
            wp_redirect($current_url, $status);
            exit;
            // "wp_redirect() does not exit automatically and should almost always be followed by exit." @see http://codex.wordpress.org/Function_Reference/wp_redirect
        }
    } else {
        affiliates_pixel_request();
    }
}