get_var('SELECT count(*) FROM '.$wpdb->prefix.'ap_transaction'); if ($transaction_count == 0) $downloadDays = 99; else $downloadDays = 3; self::downloadTransactions($downloadDays); } static public function downloadTransactions($days = 100) { global $wpdb; $fromTS = time()-3600*2-3600*24*$days; //$days in the psat $tillTS = time()-3600*2; //now in UTC $options = get_option('affiliate-power-options'); $meta_options = get_option('affiliate-power-meta-options'); //adcell if(isset($options['adcell-username']) && is_numeric($options['adcell-username']) && isset($options['adcell-password'])) { include_once('apis/adcell.php'); if (!isset($options['adcell-referer-filter'])) $options['adcell-referer-filter'] = 0; $transactions = Affiliate_Power_Api_Adcell::downloadTransactions($options['adcell-username'], $options['adcell-password'], $options['adcell-referer-filter'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //affili if(isset($options['affili-id']) && is_numeric($options['affili-id']) && isset($options['affili-password']) && strlen($options['affili-password']) == 20) { include_once('apis/affili.php'); if (!isset($options['affili-prefix-filter'])) $options['affili-prefix-filter'] = 0; $transactions = Affiliate_Power_Api_Affili::downloadTransactions($options['affili-id'], $options['affili-password'], $options['affili-prefix-filter'], $meta_options['subid-prefix'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //awin if(isset($options['awin-id']) && is_numeric($options['awin-id']) && isset($options['awin-token']) && strlen($options['awin-token']) >= 20) { include_once('apis/awin.php'); $transactions = Affiliate_Power_Api_Awin::downloadTransactions($options['awin-id'], $options['awin-token'], $options['awin-referer'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //belboon if (isset($options['belboon-username']) && isset($options['belboon-password']) && strlen($options['belboon-password']) == 20) { include_once('apis/belboon.php'); $transactions = Affiliate_Power_Api_Belboon::downloadTransactions($options['belboon-username'], $options['belboon-password'], $options['belboon-platform'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //Commission Junction if(isset($options['cj-id']) && is_numeric($options['cj-id']) && isset($options['cj-key']) && strlen($options['cj-key']) > 20) { include_once('apis/cj.php'); $transactions = Affiliate_Power_Api_Cj::downloadTransactions($options['cj-id'], $options['cj-key'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //Daisycon if(isset($options['daisycon-username']) && isset($options['daisycon-password']) && isset($options['daisycon-publisher'])) { include_once('apis/daisycon.php'); $transactions = Affiliate_Power_Api_Daisycon::downloadTransactions($options['daisycon-username'], $options['daisycon-password'], $options['daisycon-publisher'], (!empty($options['daisycon-media']) ? $options['daisycon-media'] : null), $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //Digistore24 if(isset($options['digistore24-key']) && isset($options['digistore24-key']) && strlen($options['digistore24-key']) > 20) { include_once('apis/digistore24.php'); $transactions = Affiliate_Power_Api_Digistore24::downloadTransactions($options['digistore24-key'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //eBay if(isset($options['ebay-email']) && is_email($options['ebay-email']) && isset($options['ebay-password'])) { include_once('apis/ebay.php'); $transactions = Affiliate_Power_Api_Ebay::downloadTransactions($options['ebay-email'], $options['ebay-password'], $options['ebay-campaign'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //financeAds if(isset($options['fads-id']) && is_numeric($options['fads-id']) && isset($options['fads-key']) && strlen($options['fads-key']) > 20) { include_once('apis/financeads.php'); $transactions = Affiliate_Power_Api_Financeads::downloadTransactions($options['fads-id'], $options['fads-key'], $fromTS, $tillTS, $options['fads-wfid']); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //superclix if (isset($options['superclix-username']) && isset($options['superclix-password'])) { include_once('apis/superclix.php'); if (!isset($options['superclix-referer-filter'])) $options['superclix-referer-filter'] = 0; $transactions = Affiliate_Power_Api_Superclix::downloadTransactions($options['superclix-username'], $options['superclix-password'], $options['superclix-referer-filter'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //tradedoubler if(isset($options['tradedoubler-key']) && strlen($options['tradedoubler-key']) >= 32) { include_once('apis/tradedoubler.php'); $transactions = Affiliate_Power_Api_Tradedoubler::downloadTransactions($options['tradedoubler-key'], $options['tradedoubler-sitename'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //Tradetracker if(isset($options['tradetracker-userid']) && isset($options['tradetracker-password']) && isset($options['tradetracker-siteid'])) { include_once('apis/tradetracker.php'); $transactions = Affiliate_Power_Api_Tradetracker::downloadTransactions($options['tradetracker-userid'], $options['tradetracker-password'], $options['tradetracker-siteid'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //Webgains if(isset($options['webgains-username']) && isset($options['webgains-password']) && isset($options['webgains-campaign'])) { include_once('apis/webgains.php'); $transactions = Affiliate_Power_Api_Webgains::downloadTransactions($options['webgains-username'], $options['webgains-password'], $options['webgains-campaign'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //zanox if(isset($options['zanox-connect-id']) && strlen($options['zanox-connect-id']) == 20 && isset($options['zanox-public-key']) && strlen($options['zanox-public-key']) == 20 && isset($options['zanox-secret-key']) && strlen($options['zanox-secret-key']) >= 20) { include_once('apis/zanox.php'); $transactions = Affiliate_Power_Api_Zanox::downloadTransactions($options['zanox-connect-id'], $options['zanox-public-key'], $options['zanox-secret-key'], $options['zanox-adspace'], $fromTS, $tillTS); foreach ($transactions as $transaction) self::handleTransaction($transaction); } //some stuff only on daily update($days==100)) if ($days == 100) { //1.1.0: sales for mail are all sales from the last day now $transaction_changes['new'] = $wpdb->get_results('SELECT Date, ProgramTitle, Commission FROM '.$wpdb->prefix.'ap_transaction WHERE date(Date) = date(now() - INTERVAL 1 DAY) AND TransactionStatus <> "Cancelled"', ARRAY_A); $transaction_changes['confirmed'] = $wpdb->get_results('SELECT Date, ProgramTitle, Commission FROM '.$wpdb->prefix.'ap_transaction WHERE date(CheckDate) = date(now() - INTERVAL 1 DAY) AND TransactionStatus = "Confirmed"', ARRAY_A); $transaction_changes['cancelled'] = $wpdb->get_results('SELECT Date, ProgramTitle, Commission FROM '.$wpdb->prefix.'ap_transaction WHERE date(CheckDate) = date(now() - INTERVAL 1 DAY) AND TransactionStatus = "Cancelled"', ARRAY_A); $new_transactions_total = $wpdb->get_row('SELECT sum(Commission) as commission, count(*) as cnt FROM '.$wpdb->prefix.'ap_transaction WHERE date(Date) = date(now() - INTERVAL 1 DAY) AND TransactionStatus <> "Cancelled"', ARRAY_A); $confirmed_transactions_total = $wpdb->get_row('SELECT sum(Commission) as commission, count(*) as cnt FROM '.$wpdb->prefix.'ap_transaction WHERE date(CheckDate) = date(now() - INTERVAL 1 DAY) AND TransactionStatus = "Confirmed"', ARRAY_A); $cancelled_transactions_total = $wpdb->get_row('SELECT sum(Commission) as commission, count(*) as cnt FROM '.$wpdb->prefix.'ap_transaction WHERE date(CheckDate) = date(now() - INTERVAL 1 DAY) AND TransactionStatus = "Cancelled"', ARRAY_A); $transactions_programm['new'] = $wpdb->get_results('SELECT ProgramTitle, sum(Commission) as Commission FROM '.$wpdb->prefix.'ap_transaction WHERE date(Date) = date(now() - INTERVAL 1 DAY) AND TransactionStatus <> "Cancelled" GROUP BY ProgramTitle ORDER BY Commission DESC', ARRAY_A); $transactions_programm['confirmed'] = $wpdb->get_results('SELECT ProgramTitle, sum(Commission) as Commission FROM '.$wpdb->prefix.'ap_transaction WHERE date(CheckDate) = date(now() - INTERVAL 1 DAY) AND TransactionStatus = "Confirmed" GROUP BY ProgramTitle ORDER BY Commission DESC', ARRAY_A); $transactions_programm['cancelled'] = $wpdb->get_results('SELECT ProgramTitle, sum(Commission) as Commission FROM '.$wpdb->prefix.'ap_transaction WHERE date(CheckDate) = date(now() - INTERVAL 1 DAY) AND TransactionStatus = "Cancelled" GROUP BY ProgramTitle ORDER BY Commission DESC', ARRAY_A); //Send mail to admin (only when activated ) if ($options['send-mail-transactions'] == 1) { $programm_transactions = ''; $list_transactions = ''; $type_mapper = array( 'new' => _x('New', 'multiple', 'affiliate-power'), 'confirmed' => _x('Confirmed', 'multiple', 'affiliate-power'), 'cancelled' => _x('Cancelled', 'multiple', 'affiliate-power') ); foreach ($transactions_programm as $type => $transactions) { $list_items = ''; foreach ($transactions as $transaction) { $list_items .= '
  • '.$transaction['ProgramTitle'].': '.number_format($transaction['Commission'], 2, ',', '.').' €
  • '; } if ($list_items != '') { if ($type == 'new') $total = $new_transactions_total; elseif ($type == 'confirmed') $total = $confirmed_transactions_total; else $total = $cancelled_transactions_total; $programm_transactions .= '

    '.$type_mapper[$type].' '.__('transactions per merchant', 'affiliate-power').'

    ' .sprintf( __('Total: %d Transactions, %s', 'affiliate-power'), $total['cnt'], number_format($total['commission'], 2, ',', '.').' €' ); } } foreach ($transaction_changes as $type => $transactions) { $list_items = ''; foreach ($transactions as $transaction) { $datetime_de = date('d.m.Y H:i:s', strtotime($transaction['Date'])); $list_items .= '
  • '.$datetime_de.': '.$transaction['ProgramTitle'].': '.number_format($transaction['Commission'], 2, ',', '.').' €
  • '; } if ($list_items != '') { if ($type == 'new') $total = $new_transactions_total; elseif ($type == 'confirmed') $total = $confirmed_transactions_total; else $total = $cancelled_transactions_total; $list_transactions .= '

    '.$type_mapper[$type].' '.__('transactions', 'affiliate-power').'

    ' .sprintf( __('Total: %d Transactions, %s', 'affiliate-power'), $total['cnt'], number_format($total['commission'], 2, ',', '.').' €' ); } } //only send if there is any transaction if ($list_transactions != '') { $admin_email = get_option('admin_email'); $blogname = get_option('blogname'); $mailtext = sprintf (__('

    Hello Admin,

    This is your daily income report from Affiliate Power for your page %s. You can always deactivate this report in the Affiliate Power settings, if you are annoyed about it.

    ', 'affiliate-power'), $blogname); $mailtext .= $programm_transactions; $mailtext .= $list_transactions; $headers = array('Content-Type: text/html; charset=UTF-8', 'From: <' . $admin_email . '>'); wp_mail($admin_email, sprintf(__('Affiliate Power Report for %s', 'affiliate-power'), $blogname), $mailtext, $headers); } } //Is it time to activate a new infotext? $meta_options = get_option('affiliate-power-meta-options'); $days_since_install = round( (date('U') - $meta_options['installstamp']) / 86400 ); if (isset($meta_options['infotext'.$days_since_install])) { $meta_options['infotext'] = $meta_options['infotext'.$days_since_install]; $meta_options['hide-infotext'] = 0; update_option('affiliate-power-meta-options', $meta_options); } //promo active? if (date('Y') == 2015 && date('n') == 9 && date('d') >= 14) { $meta_options['infotext'] = $meta_options['infotext_promo_sep']; $meta_options['hide-infotext'] = 0; update_option('affiliate-power-meta-options', $meta_options); } //delete user data which led to no sales //these cleanup queries are helpful but can take forever if you have a lot of visitors. Activate at your own risk. Play around with the limits to find a good compromise. It might be better to run them every hour with a low limit. /* $wpdb->query('delete from '.$wpdb->prefix.'ap_clickout where '.$wpdb->prefix.'ap_clickout.clickout_datetime + interval 120 day < now() and not exists (select ap_transactionID from '.$wpdb->prefix.'ap_transaction where SubId = '.$wpdb->prefix.'ap_clickout.ap_clickoutID) limit 100'); if(AFFILIATE_POWER_PREMIUM) { $wpdb->query('delete from '.$wpdb->prefix.'ap_visit where '.$wpdb->prefix.'ap_visit.visit_datetime + interval 3 day < now() and not exists (select ap_clickoutID from '.$wpdb->prefix.'ap_clickout where ap_visitID = '.$wpdb->prefix.'ap_visit.ap_visitID) limit 100'); $wpdb->query('delete from '.$wpdb->prefix.'ap_visitor where not exists (select ap_visitID from '.$wpdb->prefix.'ap_visit where ap_visitorID = '.$wpdb->prefix.'ap_visitor.ap_visitorID) limit 100'); } */ } //if ($days == 100) die(); //for proper AJAX request } static public function handleTransaction($transaction) { global $wpdb; $transaction['number'] = (string)$transaction['number']; $transaction['price'] = (float)$transaction['price']; $transaction['commission'] = (float)$transaction['commission']; $transaction['confirmed'] = (float)$transaction['confirmed']; if(empty($transaction['sub_id'])) $transaction['sub_id'] = 0; $sql = $wpdb->prepare('SELECT ap_transactionID, TransactionId_network, Commission, TransactionStatus FROM '.$wpdb->prefix.'ap_transaction WHERE TransactionId_network = %s AND network = %s LIMIT 1', $transaction['number'], $transaction['network']); $existing_transaction = $wpdb->get_row( $sql ); //Transaktion existiert noch nicht => INSERT if ($existing_transaction == null) { $wpdb->insert( $wpdb->prefix.'ap_transaction', array( 'network' => $transaction['network'], 'TransactionId_network' => $transaction['number'], 'Date' => $transaction['datetime_db'], 'SubId' => $transaction['sub_id'], 'ProgramId' => $transaction['shop_id'], 'ProgramTitle' => $transaction['shop_name'], 'Transaction' => $transaction['transaction_type'], 'Price' => $transaction['price'], 'Commission' => $transaction['commission'], 'Confirmed' => $transaction['confirmed'], 'CheckDate' => $transaction['checkdatetime_db'], 'TransactionStatus' => $transaction['status'] ), array( '%s', //network '%s', //number '%s', //datetime_db '%s', //sub_id '%d', //shop_id '%s', //shop_name '%s', //transaction_type '%f', //price '%f', //commission '%f', //confirmed '%s', //checkdatetime_db '%s' //status ) ); do_action('affiliate_power_transaction_insert', $wpdb->insert_id, $transaction); } //Transaktion existiert bereits, aber der Status hat sich geƤndert => UPDATE elseif ($existing_transaction != null && $transaction['status'] != $existing_transaction->TransactionStatus) { $wpdb->update( $wpdb->prefix.'ap_transaction', array( 'CheckDate' => $transaction['checkdatetime_db'], 'Commission' => $transaction['commission'], 'Confirmed' => $transaction['confirmed'], 'TransactionStatus' => $transaction['status'] ), array( 'ap_transactionID' => $existing_transaction->ap_transactionID ), array( '%s', //checkdatetime_db '%f', // Commission '%f', // Confirmed '%s', // Status ), array( '%d' ) //ap_transactionID ); } } static public function checkLicenceKey ($licence_key) { $licence_key_hash = md5($licence_key); $http_answer = wp_remote_post('http://www.affiliatepowerplugin.com/ap-api/api.php', array( 'headers' => array('referer' => $_SERVER['HTTP_HOST']), 'body' => array('action' => 'check', 'key' => $licence_key_hash) )); if (is_wp_error($http_answer) || $http_answer['response']['code'] != 200) return false; return $http_answer['body']; } static public function checkVersion($transient) { if (empty($transient->checked)) { return $transient; } $options = get_option('affiliate-power-options'); $premium_valid = false; if (isset($options['licence-key']) && !empty($options['licence-key'])) { $licence_status = self::checkLicenceKey($options['licence-key']); if ($licence_status == 'ok') $premium_valid = true; } if (!AFFILIATE_POWER_PREMIUM && $premium_valid) $updating_to_premium = true; else $updating_to_premium = false; $http_answer = wp_remote_post('http://www.affiliatepowerplugin.com/ap-api/api.php', array('body' => array('action' => 'version'))); if (is_wp_error($http_answer) || $http_answer['response']['code'] != 200) $new_version = AFFILIATE_POWER_VERSION; else $new_version = $http_answer['body']; if ( (version_compare(AFFILIATE_POWER_VERSION, $new_version, '<') && AFFILIATE_POWER_PREMIUM) || $updating_to_premium ) { $obj = new stdClass(); $obj->slug = 'affiliate-power'; $obj->new_version = $new_version; $obj->url = 'http://www.affiliatepowerplugin.com/ap-api/api.php'; $obj->package = 'http://www.affiliatepowerplugin.com/ap-api/api.php?key=' . md5($options['licence-key']); $transient->response['affiliate-power/affiliate-power.php'] = $obj; } if ( (version_compare(AFFILIATE_POWER_VERSION, $new_version, '<')) ) { $user = wp_get_current_user(); $first_name = ($user->user_firstname != '') ? $user->user_firstname : $user->user_login; $meta_options = get_option('affiliate-power-meta-options'); $meta_options['infotext'] = sprintf( __('

    Affiliate Power Update Required

    Hey %s, there is a new version of Affiliate Power. Please update as soon as possible to ensure the safety and compatibility of your site. Are you annoyed by constantly updating plugins and always worrying about breaking something? Check out my new service Maintenance Power.', 'affiliate-power'), $first_name ); $meta_options['hide-infotext'] = 0; update_option('affiliate-power-meta-options', $meta_options); } return $transient; } static public function getNewVersionInfo($false, $action, $arg) { if (isset($arg->slug) && $arg->slug == 'affiliate-power') { $http_answer = wp_remote_post('http://www.affiliatepowerplugin.com/ap-api/api.php', array('body' => array('action' => 'info'))); if (is_wp_error($http_answer) || $http_answer['response']['code'] != 200) return $false; $information = unserialize($http_answer['body']); return $information; } return $false; } } ?>