'affiliate',
'plural' => 'affiliates',
'ajax' => false
) );
}
function foxypress_FixGetVar($variable, $default = 'management')
{
$value = $default;
if(isset($_GET[$variable]))
{
$value = trim($_GET[$variable]);
if(get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
$value = mysql_real_escape_string($value);
}
return $value;
}
function foxypress_FixPostVar($variable, $default = '')
{
$value = $default;
if(isset($_POST[$variable]))
{
$value = trim($_POST[$variable]);
$value = mysql_real_escape_string($value);
}
return $value;
}
// Page Default
function column_default($item, $column_name)
{
switch($column_name){
case 'test':
default:
return print_r($item,true);
}
}
/** ************************************************************************
* Main page affiliate management columns
*
* @see WP_List_Table::::single_row_columns()
* @param array $item A singular item (one full row's worth of data)
* @return string Text to be placed inside the column
**************************************************************************/
function column_management_affiliate($item)
{
//Build row actions
$actions = array(
'view_details' => sprintf('View Details',$_REQUEST['page'],'view_details',$item->id)
);
//Return the title contents
return sprintf('%1$s (id:%2$s)%3$s',
/*$1%s*/ $item->user_nicename,
/*$2%s*/ $item->id,
/*$3%s*/ $this->row_actions($actions)
);
}
function column_management_clicks($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->num_clicks
);
}
function column_management_total_commission($item)
{
$order_commission = $item->affiliate_percentage / 100 * $item->total_commission;
$order_commission = number_format($order_commission, 2, '.', ',');
return sprintf('$%1$s',
/*$1%s*/ $order_commission
);
}
function column_management_total_transactions($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->num_total_orders
);
}
function column_cb($item)
{
return sprintf(
'',
/*$1%s*/ $this->_args['singular'],
/*$2%s*/ $item->id
);
}
/** ************************************************************************
* View Detail page affiliate management columns
*
* @see WP_List_Table::::single_row_columns()
* @param array $item A singular item (one full row's worth of data)
* @return string Text to be placed inside the column
**************************************************************************/
function column_pending_affiliates_first_name($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->first_name
);
}
function column_pending_affiliates_last_name($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->last_name
);
}
function column_pending_affiliates_age($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->age
);
}
function column_pending_affiliates_gender($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->gender
);
}
function column_pending_affiliates_description($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->description
);
}
function column_pending_affiliates_approve($item)
{
return sprintf('Approve',$_REQUEST['page'],'pending_affiliates','true',$item->id);
}
/** ************************************************************************
* View Detail page affiliate management columns
*
* @see WP_List_Table::::single_row_columns()
* @param array $item A singular item (one full row's worth of data)
* @return string Text to be placed inside the column
**************************************************************************/
function column_view_details_order_id($item)
{
//Build row actions
$actions = array(
'pay_affiliate' => sprintf('Pay Affiliate',$_REQUEST['page'],'pay_affiliate',$item->id,$item->order_id),
'view_order' => sprintf('View Order Detail',$item->order_id)
);
return sprintf('%1$s %2$s',
/*$1%s*/ $item->order_id,
$this->row_actions($actions)
);
}
function column_view_details_order_total($item)
{
return sprintf('$%1$s',
/*$1%s*/ $item->order_total
);
}
function column_view_details_order_commission($item)
{
$order_commission = $item->affiliate_percentage / 100 * $item->order_total;
$order_commission = number_format($order_commission, 2, '.', ',');
return sprintf('$%1$s',
/*$1%s*/ $order_commission
);
}
function column_view_details_order_date($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->order_date
);
}
/** ************************************************************************
* View Detail page affiliate management columns
*
* @see WP_List_Table::::single_row_columns()
* @param array $item A singular item (one full row's worth of data)
* @return string Text to be placed inside the column
**************************************************************************/
function column_view_past_details_order_id($item)
{
return sprintf('%2$s',
/*$1%s*/ $item->foxy_transaction_id,
/*$2%s*/ $item->foxy_transaction_id
);
}
function column_view_past_details_order_total($item)
{
return sprintf('$%1$s',
/*$1%s*/ $item->foxy_transaction_order_total
);
}
function column_view_past_details_affiliate_percentage($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->foxy_affiliate_percentage . '%'
);
}
function column_view_past_details_order_commission($item)
{
$order_commission = $item->foxy_affiliate_percentage / 100 * $item->foxy_transaction_order_total;
$order_commission = number_format($order_commission, 2, '.', ',');
return sprintf('$%1$s',
/*$1%s*/ $order_commission
);
}
function column_view_past_details_payment_method($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->foxy_affiliate_payment_method
);
}
function column_view_past_details_payment_date($item)
{
return sprintf('%1$s',
/*$1%s*/ $item->foxy_affiliate_payment_date
);
}
/** ************************************************************************
*
*
**************************************************************************/
function get_columns($mode)
{
if ($mode === 'management')
{
$columns = array(
'management_affiliate' => 'Affiliate',
'management_clicks' => 'Clicks',
'management_total_commission' => 'Total Commission',
'management_total_transactions' => 'Total Transactions'
);
}
else if ($mode === 'pending_affiliates')
{
$columns = array(
'pending_affiliates_first_name' => 'First Name',
'pending_affiliates_last_name' => 'Last Name',
'pending_affiliates_age' => 'Age',
'pending_affiliates_gender' => 'Gender',
'pending_affiliates_description' => 'Message',
'pending_affiliates_approve' => 'Approve'
);
}
else if ($mode === 'view_details')
{
$columns = array(
//'cb' => '',
'view_details_order_id' => 'Order ID',
'view_details_order_total' => 'Order Total',
'view_details_order_commission' => 'Affiliate Commission',
'view_details_order_date' => 'Order Date'
);
}
else if ($mode === 'view_past_details')
{
$columns = array(
'view_past_details_order_id' => 'Order ID',
'view_past_details_order_total' => 'Order Total',
'view_past_details_affiliate_percentage' => 'Affiliate Percentage',
'view_past_details_order_commission' => 'Affiliate Commission',
'view_past_details_payment_method' => 'Payment Method',
'view_past_details_payment_date' => 'Payment Date'
);
}
return $columns;
}
function get_sortable_columns($mode)
{
if ($mode === 'management')
{
$sortable_columns = array(
'management_affiliate' => array('management_affiliate',true), //true means its already sorted
'management_clicks' => array('management_clicks',false),
'management_total_commission' => array('management_total_commission',false),
'management_total_transactions' => array('management_total_transactions', false)
);
}
else if ($mode === 'pending_affiliates')
{
$sortable_columns = array();
}
else if ($mode === 'view_details')
{
$sortable_columns = array(
'view_details_order_id' => array('view_details_order_id', true),
'view_details_order_total' => array('view_details_order_total', false),
'view_details_order_commission' => array('view_details_order_commission', false),
'view_details_order_date' => array('view_details_order_date', false)
);
}
else if ($mode === 'view_past_details')
{
$sortable_columns = array(
'view_past_details_order_id' => array('view_past_details_order_id', true),
'view_past_details_order_total' => array('view_past_details_order_total', false),
'view_past_details_affiliate_percentage' => array('view_past_details_affiliate_percentage', false),
'view_past_details_order_commission' => array('view_past_details_order_commission', false),
'view_past_details_payment_method' => array('view_past_details_payment_method', false),
'view_past_details_payment_date' => array('view_past_details_payment_date', false)
);
}
return $sortable_columns;
}
function get_bulk_actions()
{
$actions = array();
return $actions;
}
function process_bulk_action()
{
//Detect when a bulk action is being triggered...
//if( 'delete'===$this->current_action() ) {
//wp_die('Items deleted (or they would be if we had items to delete)!');
//}
}
function prepare_items($mode, $order_by = '', $order = '')
{
//How many items per page
$per_page = 10;
$columns = $this->get_columns($mode);
$hidden = array();
$sortable = $this->get_sortable_columns($mode);
$this->_column_headers = array($columns, $hidden, $sortable);
$this->process_bulk_action();
global $wpdb;
$sql = "SELECT user_id FROM `wp_usermeta`
WHERE meta_key = 'affiliate_user' AND meta_value = 'true'";
$affiliate_ids = $wpdb->get_results($sql);
$ids = array();
$i = 0;
foreach ($affiliate_ids as $affiliate)
{
$ids[$i] = $affiliate->user_id;
$i++;
}
$ids = implode(',', $ids);
if ($mode === 'management')
{
if (!$order) {
$sort_order = 'ASC';
} else {
$sort_order = strtoupper($order);
}
if ($order_by === 'management_affiliate')
{
$sort_by = 'u.user_nicename ' . $sort_order;
}
else if ($order_by === 'management_clicks')
{
$sort_by = 'num_clicks ' . $sort_order;
}
else if ($order_by === 'management_total_commission')
{
$sort_by = 'total_commission ' . $sort_order;
}
else if ($order_by === 'management_total_transactions')
{
$sort_by = 'num_total_orders ' . $sort_order;
}
else
{
$sort_by = 'u.id ASC';
}
$sql_data = "SELECT u.id, u.user_nicename, um.meta_key, um.meta_value AS affiliate_percentage,
(SELECT count(id) FROM " . $wpdb->prefix . "foxypress_affiliate_tracking WHERE affiliate_id = u.id) AS num_clicks,
(SELECT count(foxy_transaction_id) FROM " . $wpdb->prefix . "foxypress_transaction WHERE foxy_affiliate_id = u.id) AS num_total_orders,
(SELECT sum(foxy_transaction_order_total) FROM " . $wpdb->prefix . "foxypress_transaction WHERE foxy_affiliate_id = u.id) AS total_commission
FROM " . $wpdb->prefix . "users AS u
LEFT JOIN " . $wpdb->prefix . "usermeta AS um ON um.meta_key = 'affiliate_percentage' AND um.user_id = u.id
WHERE u.id in (" . $ids . ")
ORDER BY " . $sort_by;
}
else if ($mode === 'pending_affiliates')
{
$sql = "SELECT user_id FROM `wp_usermeta`
WHERE meta_key = 'affiliate_user' AND meta_value = 'pending'";
$pending_affiliate_ids = $wpdb->get_results($sql);
$pending_ids = array();
$i = 0;
foreach ($pending_affiliate_ids as $pending_affiliate)
{
$pending_ids[$i] = $pending_affiliate->user_id;
$i++;
}
$pending_ids = implode(',', $pending_ids);
$sql_data = "SELECT u.id, u.user_nicename,
(SELECT meta_value FROM " . $wpdb->prefix . "usermeta WHERE meta_key = 'first_name' AND user_id = u.id) AS first_name,
(SELECT meta_value FROM " . $wpdb->prefix . "usermeta WHERE meta_key = 'last_name' AND user_id = u.id) AS last_name,
(SELECT meta_value FROM " . $wpdb->prefix . "usermeta WHERE meta_key = 'affiliate_facebook_page' AND user_id = u.id) AS facebook_page,
(SELECT meta_value FROM " . $wpdb->prefix . "usermeta WHERE meta_key = 'affiliate_gender' AND user_id = u.id) AS gender,
(SELECT meta_value FROM " . $wpdb->prefix . "usermeta WHERE meta_key = 'affiliate_age' AND user_id = u.id) AS age,
(SELECT meta_value FROM " . $wpdb->prefix . "usermeta WHERE meta_key = 'description' AND user_id = u.id) AS description
FROM " . $wpdb->prefix . "users AS u
WHERE u.id in (" . $pending_ids . ")
ORDER BY u.id ASC";
}
else if ($mode === 'view_details')
{
if (!$order) {
$sort_order = 'ASC';
} else {
$sort_order = strtoupper($order);
}
if ($order_by === 'view_details_order_id')
{
$sort_by = 'ft.foxy_transaction_id ' . $sort_order;
}
else if ($order_by === 'view_details_order_total')
{
$sort_by = 'ft.foxy_transaction_order_total ' . $sort_order;
}
else if ($order_by === 'view_details_order_commission')
{
$sort_by = 'ft.foxy_transaction_order_total ' . $sort_order;
}
else if ($order_by === 'view_details_order_date')
{
$sort_by = 'ft.foxy_transaction_date ' . $sort_order;
}
else
{
$sort_by = 'ft.foxy_transaction_id DESC';
}
$affiliate_id = $this->foxypress_FixGetVar('affiliate_id');
$sql_data = "SELECT ft.foxy_transaction_id AS order_id, ft.foxy_transaction_order_total AS order_total, ft.foxy_transaction_date AS order_date, u.id, u.user_nicename, um.meta_key, um.meta_value AS affiliate_percentage
FROM " . $wpdb->prefix . "foxypress_transaction AS ft
LEFT JOIN " . $wpdb->prefix . "users AS u ON u.id = ft.foxy_affiliate_id
LEFT JOIN " . $wpdb->prefix . "usermeta AS um ON um.meta_key = 'affiliate_percentage' AND um.user_id = ft.foxy_affiliate_id
WHERE ft.foxy_affiliate_id = " . $affiliate_id . " AND NOT EXISTS (SELECT foxy_transaction_id FROM " . $wpdb->prefix . "foxypress_affiliate_payments WHERE " . $wpdb->prefix . "foxypress_affiliate_payments.foxy_transaction_id = ft.foxy_transaction_id)
ORDER BY " . $sort_by;
}
else if ($mode === 'view_past_details')
{
if (!$order) {
$sort_order = 'ASC';
} else {
$sort_order = strtoupper($order);
}
if ($order_by === 'view_past_details_order_id')
{
$sort_by = 'foxy_transaction_id ' . $sort_order;
}
else if ($order_by === 'view_past_details_order_total')
{
$sort_by = 'foxy_transaction_order_total ' . $sort_order;
}
else if ($order_by === 'view_past_details_affiliate_percentage')
{
$sort_by = 'foxy_affiliate_percentage ' . $sort_order;
}
else if ($order_by === 'view_past_details_order_commission')
{
$sort_by = 'foxy_affiliate_commission ' . $sort_order;
}
else if ($order_by === 'view_past_details_payment_method')
{
$sort_by = 'foxy_affiliate_payment_method ' . $sort_order;
}
else if ($order_by === 'view_past_details_payment_date')
{
$sort_by = 'foxy_affiliate_payment_date ' . $sort_order;
}
else
{
$sort_by = 'foxy_transaction_id DESC';
}
$affiliate_id = $this->foxypress_FixGetVar('affiliate_id');
$sql_data = "SELECT *
FROM " . $wpdb->prefix . "foxypress_affiliate_payments
WHERE foxy_affiliate_id = " . $affiliate_id . "
ORDER BY " . $sort_by;
}
$data = $wpdb->get_results($sql_data);
$current_page = $this->get_pagenum();
$total_items = count($data);
$data = array_slice($data,(($current_page-1)*$per_page),$per_page);
$this->items = $data;
$this->set_pagination_args( array(
'total_items' => $total_items, //WE have to calculate the total number of items
'per_page' => $per_page, //WE have to determine how many items to show on a page
'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages
));
}
function get_affiliate_order_details()
{
global $wpdb;
$affiliate_id = $this->foxypress_FixGetVar('affiliate_id');
$data = "SELECT
(SELECT count(id) FROM " . $wpdb->prefix . "foxypress_affiliate_tracking WHERE affiliate_id = " . $affiliate_id . ") AS num_clicks,
(SELECT count(foxy_transaction_id) FROM " . $wpdb->prefix . "foxypress_transaction WHERE foxy_affiliate_id = " . $affiliate_id . ") AS num_total_orders,
(SELECT count(id) FROM " . $wpdb->prefix . "foxypress_affiliate_payments WHERE foxy_affiliate_id = " . $affiliate_id . ") AS num_paid_orders,
(SELECT count(foxy_transaction_id) FROM " . $wpdb->prefix . "foxypress_transaction AS ft WHERE ft.foxy_affiliate_id = " . $affiliate_id . " AND NOT EXISTS (SELECT foxy_transaction_id FROM " . $wpdb->prefix . "foxypress_affiliate_payments WHERE " . $wpdb->prefix . "foxypress_affiliate_payments.foxy_transaction_id = ft.foxy_transaction_id)) AS num_unpaid_orders,
(SELECT sum(foxy_transaction_order_total) FROM " . $wpdb->prefix . "foxypress_transaction AS ft WHERE ft.foxy_affiliate_id = " . $affiliate_id . " AND NOT EXISTS (SELECT foxy_transaction_id FROM " . $wpdb->prefix . "foxypress_affiliate_payments WHERE " . $wpdb->prefix . "foxypress_affiliate_payments.foxy_transaction_id = ft.foxy_transaction_id)) AS total_unpaid_amount,
(SELECT sum(foxy_affiliate_commission) FROM " . $wpdb->prefix . "foxypress_affiliate_payments WHERE foxy_affiliate_id = " . $affiliate_id . ") AS total_paid_amount";
return $wpdb->get_results($data);
}
function get_affiliate_user_details()
{
$affiliate_id = $this->foxypress_FixGetVar('affiliate_id');
$data = (object) array(
'firstname' => get_user_meta($affiliate_id, 'first_name', true),
'lastname' => get_user_meta($affiliate_id, 'last_name', true),
'percentage' => get_user_meta($affiliate_id, 'affiliate_percentage', true)
);
return $data;
}
function get_affiliate_order_detail()
{
global $wpdb;
$affiliate_id = $this->foxypress_FixGetVar('affiliate_id');
$order_id = $this->foxypress_FixGetVar('order_id');
$data = "SELECT *
FROM " . $wpdb->prefix . "foxypress_transaction
WHERE foxy_affiliate_id = " . $affiliate_id . " AND foxy_transaction_id = " . $order_id;
return $wpdb->get_results($data);
}
function get_affiliate_counts()
{
global $wpdb;
$data = "SELECT
(SELECT count(user_id) FROM " . $wpdb->prefix . "usermeta WHERE meta_key = 'affiliate_user' AND meta_value = 'pending') AS total_pending,
(SELECT count(user_id) FROM " . $wpdb->prefix . "usermeta WHERE meta_key = 'affiliate_user' AND meta_value = 'true') AS total_approved";
return $wpdb->get_results($data);
}
}
function foxypress_create_affiliate_table() {
//Create an instance of our package class...
$fp_affiliate = new Foxypress_affiliate_management();
$mode = $fp_affiliate->foxypress_FixGetVar('mode');
$order_by = $fp_affiliate->foxypress_FixGetVar('orderby');
$order = $fp_affiliate->foxypress_FixGetVar('order');
if ($mode === 'management' || $mode === 'pending_affiliates'){
//Fetch, prepare, sort, and filter our data...
$fp_affiliate->prepare_items($mode, $order_by, $order);
$affiliate_counts = $fp_affiliate->get_affiliate_counts(); ?>
FoxyPress Affiliates
foxypress_FixGetVar('updated');
if ($updated === 'true') {
$user_id = $fp_affiliate->foxypress_FixGetVar('affiliate_id');
$percentage = get_the_author_meta('affiliate_percentage', $user_id);
$affiliate_url = get_the_author_meta('affiliate_url', $user_id);
$mail_to = get_the_author_meta('user_email', $user_id);
$mail_subject = 'Affiliate status approved!';
$mail_body = 'You have been approved to be an affiliate. Your affiliate details are below.