Ask your WordPress questions! Pay money and get answers fast! Comodo Trusted Site Seal
Official PayPal Seal

WP Plugin (License Key Manager) does not work correctly WordPress

  • REFUNDED

Hi,
I have wordpress (3.4) and wp e-commerce (3.8.8.2) on my website installed. Additional I have a plugin called Wpec License Key Manager which allows to upload license keys to a product. If a customer buys a product a email should be send with the key which is assigned to the product.

The problem is that this plugin does not send the correct key.

That means if I have for example 3 products and then I add some different keys to products:

Product A:
key1a
key2a
key3a

Product B:
key1b

Product C:
key1c
key2c

The plugin take just one random key and send to the customer.
Customer buys Product A and get "key2c", but he schould get "key1a".


Here is the code of the plugin:

<?php
/*
Plugin Name: WPEC License Key Manager
Plugin URI: http://www.dustinward.com
Description: A WPEC plugin to help manage downloadable software license keys.
Author: Dustin Ward
Version: 2.0
Author URI: http://www.dustinward.com
*/


//*************** Admin function ***************
function wpec_license_mgr_admin_actions() {
add_options_page("WPEC License Key Mgr", "WPEC License Key", 'manage_options', "wpec_license_manager", "wpec_license_admin");

}

function wpec_license_admin() {
global $wpdb;
$wpdb->query("
CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}license` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`added_on` int(11) NOT NULL,
`assigned_on` int(11) NOT NULL,
`license` varchar(255) NOT NULL,
`related_products` text NOT NULL,
`order_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;");
if(file_exists($_FILES['license_file']['tmp_name'])) {
$lines = @file($_FILES['license_file']['tmp_name']);
foreach ((array) $lines as $line) {
$line = trim($line);
$chk = $wpdb->get_var("SELECT COUNT(id) AS total FROM {$wpdb->prefix}license WHERE license = '".trim($line)."'");
if(!$chk and !empty($line)) {
$wpdb->query("INSERT INTO {$wpdb->prefix}license SET added_on = '".time()."', license = '".trim($line)."'");
$success++;
} else {
$fail++;
}
}
echo '<div class="updated"><p>License file is processed, '.intval($success).' successed and '.intval($fail).' skipped(already exists).</p></div>';
}
if($_POST['license']) {
$chk = $wpdb->get_var("SELECT COUNT(id) AS total FROM {$wpdb->prefix}license WHERE license = '".$_POST['license']."'");
if($_POST['edit']) $chk = $wpdb->get_var("SELECT COUNT(id) AS total FROM {$wpdb->prefix}license WHERE license = '".$_POST['license']."' AND id <> '".$_POST['edit']."'");
if(!$chk) {
$related = serialize($_POST['related']);
if($_POST['edit']) {
$wpdb->query("UPDATE {$wpdb->prefix}license SET license = '".$_POST['license']."',related_products = '".$related."' WHERE id = '".$_POST['edit']."'");
} else {
$wpdb->query("INSERT INTO {$wpdb->prefix}license SET added_on = '".time()."', license = '".$_POST['license']."',related_products = '".$related."'");
echo '<div class="updated"><p>New License is saved.</p></div>';
}
} else {
echo '<div class="error"><p>Sorry that license already exists.</p></div>';
}
}
if($_POST['liccheck']) {
foreach((array) $_POST['liccheck'] as $lid) {
echo $lid;
$wpdb->query("DELETE FROM {$wpdb->prefix}license WHERE id = '".$lid."'");
}
}
if($_GET['del']) {
$wpdb->query("DELETE FROM {$wpdb->prefix}license WHERE id = '".$_GET['del']."'");
echo '<div class="updated"><p>The license has been deleted.</p></div>';
}
?>

<div class="wrap nosubsub">
<div class="icon32" id="icon-link-manager"><br>
</div>
<h2 class="nav-tab-wrapper"> <a class="nav-tab<?php if(empty($_REQUEST['act'])) echo " nav-tab-active"; ?>" href="options-general.php?page=wpec_license_manager">License Manager</a> <a class="nav-tab<?php if($_REQUEST['act']) echo " nav-tab-active"; ?>" href="options-general.php?page=wpec_license_manager&act=1"><?php echo ($_REQUEST['edit'])?"Edit":"Add New"; ?> License</a> </h2>
<br />

<?php
$all = $wpdb->get_var("SELECT COUNT(id) AS total FROM {$wpdb->prefix}license");
$available = $wpdb->get_var("SELECT COUNT(id) AS total FROM {$wpdb->prefix}license WHERE order_id = 0");
$taken = $wpdb->get_var("SELECT COUNT(id) AS total FROM {$wpdb->prefix}license WHERE order_id <> 0");
?>
<ul class="subsubsub">
<li class="all"><a href="options-general.php?page=wpec_license_manager">All <span class="count">(<?php echo $all; ?>)</span></a> |</li>
<li class="trash"><a href="options-general.php?page=wpec_license_manager&av=1">Available <span class="count">(<?php echo $available; ?>)</span></a> |</li>
<li class="trash"><a href="options-general.php?page=wpec_license_manager&tk=1">Taken <span class="count">(<?php echo $taken; ?>)</span></a></li>
</ul>
<form method="post" action="options-general.php?page=wpec_license_manager" id="posts-filter" enctype="multipart/form-data">

<p class="search-box">
<label for="link-search-input" class="screen-reader-text">Search License:</label>
<input type="text" value="" name="slicense" id="link-search-input">
<input type="submit" value="Search License" class="button" id="search-submit" name="">
</p>
<p class="search-box">
<label for="link-search-input" class="screen-reader-text">Mass License Upload:</label>
<input type="file" name="license_file" />
<input type="submit" value="Mass License Upload" class="button" id="search-submit" name="submit_license">
&nbsp;&nbsp; - &nbsp;&nbsp;
</p>
<?php if($_REQUEST['act']): ?>
<?php
if($_GET['edit']) $edit = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}license WHERE id = '".$_GET['edit']."'");
?>
<input type="hidden" name="edit" value="<?php echo $edit->id; ?>" />
<table class="wp-list-table widefat tags ui-sortable">
<thead>
<tr>
<th width="250"></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>License</strong></td>
<td>
<input type="text" name="license" size="40" value="<?php echo $edit->license; ?>" /></td>
</tr>
<tr>
<td valign="top"><strong><a id="related"></a>Related Product</strong><br /><small>Just left unchecked to apply the license to all available product.</small></td>
<td><select name="related[]" size="8" multiple="multiple" id="related[]" style="height:200px; width:300px;">
<?php
$arras = $wpdb->get_results("SELECT ID,post_title FROM `{$wpdb->prefix}posts` WHERE post_type = 'wpsc-product' AND post_status = 'publish' ORDER BY `post_title` ASC");
$cur_sel = array();
$cur_sel2 = unserialize($edit->related_products);
if($cur_sel2) $cur_sel = $cur_sel2;
foreach((array)$arras as $product):
$sel = "";
if(in_array($product->ID,$cur_sel)) $sel = " selected";
echo "<option value='".$product->ID."'$sel>".$product->post_title."</option>";
endforeach;
?>
</select></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="Save" class="button-primary" id="save_license" name="save_license">
<?php if($_GET['edit']): ?><a href="options-general.php?page=wpec_license_manager">Cancel</a><?php endif; ?>
</td>
</tr>
</tbody>
</table>
</form>
<?php return; endif; ?>
<div class="tablenav top">
<div class="alignleft actions">
<select name="action">
<option selected="selected" value="-1">Bulk Actions</option>
<option value="delete">Delete</option>
</select>
<input type="submit" value="Apply" class="button-secondary action" id="doaction" name="">
</div>

<br class="clear">
</div>
<table cellspacing="0" class="wp-list-table widefat fixed bookmarks">
<thead>
<tr>
<th style="" class="manage-column column-cb check-column" id="cb" scope="col"><input type="checkbox"></th>
<th style="" class="manage-column">License</th>
<th style="" class="manage-column column-url <?php echo ($_REQUEST['orderby'] == "added_on")?"sorted ":"sortable "; ?><?php echo ($_REQUEST['order'] and $_REQUEST['orderby'] == "added_on")?$_REQUEST['order']:"desc"; ?> " id="url" scope="col"><a href="options-general.php?page=wpec_license_manager&orderby=added_on&order=<?php if($_REQUEST['order'] == "asc" and $_REQUEST['orderby'] == "added_on") { echo "desc"; } else { echo "asc"; } ?>"><span>Saved On</span><span class="sorting-indicator"></span></a></th>
<th style="" class="manage-column column-url <?php echo ($_REQUEST['orderby'] == "assigned_on")?"sorted ":"sortable "; ?><?php echo ($_REQUEST['order'] and $_REQUEST['orderby'] == "assigned_on")?$_REQUEST['order']:"desc"; ?> " id="url" scope="col"><a href="options-general.php?page=wpec_license_manager&orderby=assigned_on&order=<?php if($_REQUEST['order'] == "asc" and $_REQUEST['orderby'] == "assigned_on") { echo "desc"; } else { echo "asc"; } ?>"><span>Assigned On</span><span class="sorting-indicator"></span></a></th>
<th style="" class="manage-column column-rel" id="rel" scope="col">Related Order</th>
</tr>
</thead>
<tfoot>
<tr>
<th style="" class="manage-column column-cb check-column" scope="col"><input type="checkbox"></th>
<th style="" class="manage-column column-categories" id="categories" scope="col">License</th>
<th style="" class="manage-column column-url <?php echo ($_REQUEST['orderby'] == "added_on")?"sorted ":"sortable "; ?><?php echo ($_REQUEST['order'] and $_REQUEST['orderby'] == "added_on")?$_REQUEST['order']:"desc"; ?> " id="url" scope="col"><a href="options-general.php?page=wpec_license_manager&orderby=added_on&order=<?php if($_REQUEST['order'] == "asc" and $_REQUEST['orderby'] == "added_on") { echo "desc"; } else { echo "asc"; } ?>"><span>Saved On</span><span class="sorting-indicator"></span></a></th>
<th style="" class="manage-column column-url <?php echo ($_REQUEST['orderby'] == "assigned_on")?"sorted ":"sortable "; ?><?php echo ($_REQUEST['order'] and $_REQUEST['orderby'] == "assigned_on")?$_REQUEST['order']:"desc"; ?> " id="url" scope="col"><a href="options-general.php?page=wpec_license_manager&orderby=assigned_on&order=<?php if($_REQUEST['order'] == "asc" and $_REQUEST['orderby'] == "assigned_on") { echo "desc"; } else { echo "asc"; } ?>"><span>Assigned On</span><span class="sorting-indicator"></span></a></th>
<th style="" class="manage-column column-rel" id="rel" scope="col">Related Order</th>
</tr>
</tfoot>
<tbody id="the-list">
<?php
if($_GET['av']) $odi = "order_id = 0 ";
if($_GET['tk']) $odi = "order_id <> 0 ";
$sql = "SELECT * FROM {$wpdb->prefix}license {$odi}ORDER BY ".(($_REQUEST['orderby'])?$_REQUEST['orderby']:"added_on")." ".(($_REQUEST['order'])?$_REQUEST['order']:"DESC LIMIT 100");
if($_REQUEST['slicense']) $sql = "SELECT * FROM {$wpdb->prefix}license WHERE license LIKE '%".$_REQUEST['slicense']."%'";
$res = $wpdb->get_results($sql); foreach((array) $res as $lic): ?>
<tr valign="middle" class="alternate" id="link-<?php echo $i++; ?>">
<th class="check-column" scope="row"><input type="checkbox" value="<?php echo $lic->id; ?>" name="liccheck[]"></th>
<td class="column-name"><strong><?php echo $lic->license; ?></strong><br>
<div class="row-actions"><span class="edit"><a href="options-general.php?page=wpec_license_manager&act=1&edit=<?php echo $lic->id; ?>">Edit</a> | <a href="options-general.php?page=wpec_license_manager&act=1&edit=<?php echo $lic->id; ?>#related">Related Products</a> | </span><span class="delete"><a onclick="if ( confirm( 'You are about to delete this license.\n \'Cancel\' to stop, \'OK\' to delete.' ) ) { return true;}return false;" href="options-general.php?page=wpec_license_manager&del=<?php echo $lic->id; ?>" class="submitdelete">Delete</a></span></div></td>
<td class="column-url"><?php if($lic->added_on) echo date("d/m/Y H:i",$lic->added_on); ?></td>
<td class="column-categories"><?php if($lic->assigned_on) echo date("d/m/Y H:i",$lic->assigned_on); ?></td>
<td class="column-rel">
<?php if($lic->order_id): ?>
<a href="index.php?page=wpsc-sales-logs&purchaselog_id=<?php echo $lic->order_id; ?>"><?php echo $lic->order_id; ?></a>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<div class="tablenav bottom">
<div class="alignleft actions">
<select name="action2">
<option selected="selected" value="-1">Bulk Actions</option>
<option value="delete">Delete</option>
</select>
<input type="submit" value="Apply" class="button-secondary action" id="doaction2" name="">
</div>
<br class="clear">
</div>
<div id="ajax-response"></div>
</form>
</div>
<?php }

add_action('admin_menu', 'wpec_license_mgr_admin_actions');

?>




<?php

/**
* WP eCommerce transaction results class
*
* This class is responsible for theming the transaction results page.
*
* @package wp-e-commerce
* @since 3.8
*/
function wpsc_transaction_theme() {
global $wpdb, $user_ID, $nzshpcrt_gateways, $sessionid, $cart_log_id, $errorcode;
$errorcode = '';
$transactid = '';
$dont_show_transaction_results = false;
if ( isset( $_GET['sessionid'] ) )
$sessionid = $_GET['sessionid'];

if ( !isset( $_GET['sessionid'] ) && isset( $_GET['ms'] ) )
$sessionid = $_GET['ms'];

if ( isset( $_GET['gateway'] ) && 'google' == $_GET['gateway'] ) {
wpsc_google_checkout_submit();
unset( $_SESSION['wpsc_sessionid'] );
}

if ( isset( $_SESSION['wpsc_previous_selected_gateway'] ) && in_array( $_SESSION['wpsc_previous_selected_gateway'], array( 'paypal_certified', 'wpsc_merchant_paypal_express' ) ) )
$sessionid = $_SESSION['paypalexpresssessionid'];

if ( isset( $_REQUEST['eway'] ) && '1' == $_REQUEST['eway'] )
$sessionid = $_GET['result'];
elseif ( isset( $_REQUEST['eway'] ) && '0' == $_REQUEST['eway'] )
echo $_SESSION['eway_message'];
elseif ( isset( $_REQUEST['payflow'] ) && '1' == $_REQUEST['payflow'] ){
echo $_SESSION['payflow_message'];
$_SESSION['payflow_message'] = '';
}

$dont_show_transaction_results = false;

if ( isset( $_SESSION['wpsc_previous_selected_gateway'] ) ) {
// Replaces the ugly if else for gateways
switch($_SESSION['wpsc_previous_selected_gateway']){
case 'paypal_certified':
case 'wpsc_merchant_paypal_express':
echo $_SESSION['paypalExpressMessage'];

if(isset($_SESSION['reshash']['PAYMENTINFO_0_TRANSACTIONTYPE']) && 'expresscheckout' == $_SESSION['reshash']['PAYMENTINFO_0_TRANSACTIONTYPE'])
$dont_show_transaction_results = false;
else
$dont_show_transaction_results = true;
break;
case 'dps':
$sessionid = decrypt_dps_response();
break;
//paystation was not updating the purchase logs for successful payment - this is ugly as need to have the databse update done in one place by all gatways on a sucsessful transaction hook not some within the gateway and some within here and some not at all??? This is getting a major overhaul but for here and now it just needs to work for the gold cart people!
case 'paystation':
$ec = $_GET['ec'];
$result= $_GET['em'];

if($result == 'Transaction successful' && $ec == 0)
$processed_id = '3';

if($result == 'Insufficient Funds' && $ec == 5){
$processed_id = '6';

$payment_instructions = printf( __( 'Sorry your transaction was not accepted due to insufficient funds <br /><a href="%1$s">Click here to go back to checkout page</a>.', 'wpsc' ), get_option( "shopping_cart_url" ) );
}
if($processed_id){
$wpdb->update( WPSC_TABLE_PURCHASE_LOGS, array('processed' => $processed_id),array('sessionid'=>$sessionid), array('%f') );
}
break;
}
}

if(!$dont_show_transaction_results ) {
if ( !empty($sessionid) ){
$cart_log_id = $wpdb->get_var( "SELECT `id` FROM `" . WPSC_TABLE_PURCHASE_LOGS . "` WHERE `sessionid`= " . $sessionid . " LIMIT 1" );
return transaction_results( $sessionid, true );
}else
printf( __( 'Sorry your transaction was not accepted.<br /><a href="%1$s">Click here to go back to checkout page</a>.', 'wpsc' ), get_option( "shopping_cart_url" ) );
}

}


/**
* transaction_results function main function for creating the purchase reports, transaction results page, and email receipts
* @access public
*
* @since 3.7
* @param $sessionid (string) unique session id
* @param echo_to_screen (boolean) whether to output the results or return them (potentially redundant)
* @param $transaction_id (int) the transaction id
*/
function transaction_results( $sessionid, $display_to_screen = true, $transaction_id = null ) {
// Do we seriously need this many globals?
global $wpdb, $wpsc_cart, $echo_to_screen, $purchase_log, $order_url;
global $message_html, $cart, $errorcode,$wpsc_purchlog_statuses, $wpsc_gateways;

$wpec_taxes_controller = new wpec_taxes_controller();
$is_transaction = false;
$errorcode = 0;
$purchase_log = $wpdb->get_row( "SELECT * FROM `" . WPSC_TABLE_PURCHASE_LOGS . "` WHERE `sessionid`= " . $sessionid . " LIMIT 1", ARRAY_A );
$order_status = $purchase_log['processed'];
$curgateway = $purchase_log['gateway'];
//new variable to check whether function is being called from resen_email
if(isset($_GET['email_buyer_id']))
$resend_email = true;
else
$resend_email = false;

if( !is_bool( $display_to_screen ) )
$display_to_screen = true;

$echo_to_screen = $display_to_screen;

if ( is_numeric( $sessionid ) ) {
if ( $echo_to_screen )
echo apply_filters( 'wpsc_pre_transaction_results', '' );

// New code to check whether transaction is processed, true if accepted false if pending or incomplete
$is_transaction = wpsc_check_purchase_processed($purchase_log['processed']);
$message_html = $message = stripslashes( get_option( 'wpsc_email_receipt' ) );

if( $is_transaction ){
$message = __('The Transaction was successful', 'wpsc')."\r\n".$message;
$message_html = __('The Transaction was successful', 'wpsc')."<br />".$message_html;
}
$country = get_option( 'country_form_field' );
$billing_country = '';
$shipping_country = '';
if ( !empty($purchase_log['shipping_country']) ) {
$billing_country = $purchase_log['billing_country'];
$shipping_country = $purchase_log['shipping_country'];
} elseif ( !empty($country) ) {
$country = $wpdb->get_var( "SELECT `value` FROM `" . WPSC_TABLE_SUBMITED_FORM_DATA . "` WHERE `log_id`=" . $purchase_log['id'] . " AND `form_id` = '" . get_option( 'country_form_field' ) . "' LIMIT 1" );

$billing_country = $country;
$shipping_country = $country;
}

$email = wpsc_get_buyers_email($purchase_log['id']);
$previous_download_ids = array( );
$product_list = $product_list_html = $report_product_list = '';

$cart = $wpdb->get_results( "SELECT * FROM `" . WPSC_TABLE_CART_CONTENTS . "` WHERE `purchaseid` = '{$purchase_log['id']}'" , ARRAY_A );
if ( ($cart != null) && ($errorcode == 0) ) {
$total_shipping = '';
foreach ( $cart as $row ) {
$link = array( );
$wpdb->update(WPSC_TABLE_DOWNLOAD_STATUS, array('active' => '1'), array('cartid' => $row['id'], 'purchid'=>$purchase_log['id']) );
do_action( 'wpsc_transaction_result_cart_item', array( "purchase_id" => $purchase_log['id'], "cart_item" => $row, "purchase_log" => $purchase_log ) );

if ( $is_transaction ) {

$download_data = $wpdb->get_results( "SELECT *
FROM `" . WPSC_TABLE_DOWNLOAD_STATUS . "`
WHERE `active`='1'
AND `purchid`='" . $purchase_log['id'] . "'
AND `cartid` = '" . $row['id'] . "'", ARRAY_A );

if ( count( $download_data ) > 0 ) {
foreach ( $download_data as $single_download ) {
$file_data = get_post( $single_download['product_id'] );
// if the uniqueid is not equal to null, its "valid", regardless of what it is
if ( $single_download['uniqueid'] == null )
$link[] = array( "url" => site_url( "?downloadid=" . $single_download['id'] ), "name" => $file_data->post_title );
else
$link[] = array( "url" => site_url( "?downloadid=" . $single_download['uniqueid'] ), "name" => $file_data->post_title );

}
} else {
$order_status = $purchase_log['processed'];
}
if( isset( $download_data['id'] ) )
$previous_download_ids[] = $download_data['id'];
}

do_action( 'wpsc_confirm_checkout', $purchase_log['id'] );

$total = 0;
$shipping = $row['pnp'] * $row['quantity'];
$total_shipping += $shipping;

$total += ( $row['price'] * $row['quantity']);
$message_price = wpsc_currency_display( $total, array( 'display_as_html' => false ) );
$message_price_html = wpsc_currency_display( $total );
$shipping_price = wpsc_currency_display( $shipping, array( 'display_as_html' => false ) );

if ( isset( $purchase['gateway'] ) && 'wpsc_merchant_testmode' != $purchase['gateway'] ) {
if ( $gateway['internalname'] == $purch_data[0]['gateway'] )
$gateway_name = $gateway['name'];
} else {
$gateway_name = "Manual Payment";
}

$variation_list = '';

if ( !empty( $link ) ) {
$additional_content = apply_filters( 'wpsc_transaction_result_content', array( "purchase_id" => $purchase_log['id'], "cart_item" => $row, "purchase_log" => $purchase_log ) );
if ( !is_string( $additional_content ) ) {
$additional_content = '';
}
$product_list .= " - " . $row['name'] . " " . $message_price . " " . __( 'Click to download', 'wpsc' ) . ":";
$product_list_html .= " - " . $row['name'] . " " . $message_price_html . "&nbsp;&nbsp;" . __( 'Click to download', 'wpsc' ) . ":\n\r";
foreach ( $link as $single_link ) {
$product_list .= "\n\r " . $single_link["name"] . ": " . $single_link["url"] . "\n\r";
$product_list_html .= "<a href='" . $single_link["url"] . "'>" . $single_link["name"] . "</a>\n";
}
$product_list .= $additional_content;
$product_list_html .= $additional_content;
} else {

$product_list.= " - " . $row['quantity'] . " " . $row['name'] . " " . $message_price . "\n\r";
if ( $shipping > 0 )
$product_list .= sprintf(__( ' - Shipping: %s
', 'wpsc' ), $shipping_price);
$product_list_html.= "\n\r - " . $row['quantity'] . " " . $row['name'] . " " . $message_price_html . "\n\r";
if ( $shipping > 0 )
$product_list_html .= sprintf(__( ' &nbsp; Shipping: %s
', 'wpsc' ), $shipping_price);
}

//add tax if included
if($wpec_taxes_controller->wpec_taxes_isenabled() && $wpec_taxes_controller->wpec_taxes_isincluded())
{
$taxes_text = ' - - '.__('Tax Included', 'wpsc').': '.wpsc_currency_display( $row['tax_charged'], array( 'display_as_html' => false ) )."\n\r";
$taxes_text_html = ' - - '.__('Tax Included', 'wpsc').': '.wpsc_currency_display( $row['tax_charged'] );
$product_list .= $taxes_text;
$product_list_html .= $taxes_text_html;
}// if

$report = get_option( 'wpsc_email_admin' );
$report_product_list.= " - " . $row['quantity'] . " " . $row['name'] . " " . $message_price . "\n\r";
} // closes foreach cart as row

// Decrement the stock here
if ( $is_transaction )
wpsc_decrement_claimed_stock( $purchase_log['id'] );

if ( !empty($purchase_log['discount_data'])) {
$coupon_data = $wpdb->get_row( "SELECT * FROM `" . WPSC_TABLE_COUPON_CODES . "` WHERE coupon_code='" . $wpdb->escape( $purchase_log['discount_data'] ) . "' LIMIT 1", ARRAY_A );
if ( $coupon_data['use-once'] == 1 ) {
$wpdb->update(WPSC_TABLE_COUPON_CODES, array('active' => '0', 'is-used' => '1'), array('id' => $coupon_data['id']) );
}
}

$total_shipping += $purchase_log['base_shipping'];

$total = $purchase_log['totalprice'];

$total_price_email = '';
$total_price_html = '';
$total_tax_html = '';
$total_tax = '';
$total_shipping_html = '';
$total_shipping_email = '';
if ( wpsc_uses_shipping() )
$total_shipping_email.= sprintf(__( 'Total Shipping: %s
', 'wpsc' ), wpsc_currency_display( $total_shipping, array( 'display_as_html' => false ) ) );
$total_price_email.= sprintf(__( 'Total: %s
', 'wpsc' ), wpsc_currency_display( $total, array( 'display_as_html' => false ) ));
if ( $purchase_log['discount_value'] > 0 ) {
$discount_email.= __( 'Discount', 'wpsc' ) . "\n\r: ";
$discount_email .=$purchase_log['discount_data'] . ' : ' . wpsc_currency_display( $purchase_log['discount_value'], array( 'display_as_html' => false ) ) . "\n\r";

$report.= $discount_email . "\n\r";
$total_shipping_email .= $discount_email;
$total_shipping_html.= __( 'Discount', 'wpsc' ) . ": " . wpsc_currency_display( $purchase_log['discount_value'] ) . "\n\r";
}

//only show total tax if tax is not included
if($wpec_taxes_controller->wpec_taxes_isenabled() && !$wpec_taxes_controller->wpec_taxes_isincluded()){
$total_tax_html .= __('Total Tax', 'wpsc').': '. wpsc_currency_display( $purchase_log['wpec_taxes_total'] )."\n\r";
$total_tax .= __('Total Tax', 'wpsc').': '. wpsc_currency_display( $purchase_log['wpec_taxes_total'] , array( 'display_as_html' => false ) )."\n\r";
}
if ( wpsc_uses_shipping() )
$total_shipping_html.= sprintf(__( '<hr>Total Shipping: %s
', 'wpsc' ), wpsc_currency_display( $total_shipping ));
$total_price_html.= sprintf(__( 'Total: %s
', 'wpsc' ), wpsc_currency_display( $total ) );
$report_id = sprintf(__("Purchase # %s
", 'wpsc'), $purchase_log['id']);

if ( isset( $_GET['ti'] ) ) {
$message.= "\n\r" . __( 'Your Transaction ID', 'wpsc' ) . ": " . $_GET['ti'];
$message_html.= "\n\r" . __( 'Your Transaction ID', 'wpsc' ) . ": " . $_GET['ti'];
$report.= "\n\r" . __( 'Transaction ID', 'wpsc' ) . ": " . $_GET['ti'];
}
$license = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}license WHERE order_id = '".$purchase_log['id']."'");
$av = true;
$related = unserialize($license->related_products);
if(is_array($related) and count($related) > 0) {
$av = false;
$carti = $wpdb->get_row( "SELECT prodid FROM `" . WPSC_TABLE_CART_CONTENTS . "` WHERE `purchaseid` = '{$purchase_log['id']}' LIMIT 1" );
if(in_array($carti->prodid,$related)) $av = true;
}
if(empty($license->id) and $av == true){
$license = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}license WHERE order_id = 0 ORDER BY RAND() LIMIT 1");
if($license->id) $wpdb->query("UPDATE {$wpdb->prefix}license SET order_id = '".$purchase_log['id']."', assigned_on = '".time()."' WHERE id = '".$license->id."'");
}
$license_key = $license->license;
$message = str_replace( '%purchase_id%', $report_id, $message );
$message = str_replace( '%product_list%', $product_list, $message );
$message = str_replace( '%total_tax%', $total_tax, $message );
$message = str_replace( '%total_shipping%', $total_shipping_email, $message );
$message = str_replace( '%total_price%', $total_price_email, $message );
$message = str_replace( '%shop_name%', get_option( 'blogname' ), $message );
$message = str_replace( '%find_us%', $purchase_log['find_us'], $message );
$message = str_replace( '%license_key%', $license_key, $message );

$report = str_replace( '%purchase_id%', $report_id, $report );
$report = str_replace( '%product_list%', $report_product_list, $report );
$report = str_replace( '%total_tax%', $total_tax, $report );
$report = str_replace( '%total_shipping%', $total_shipping_email, $report );
$report = str_replace( '%total_price%', $total_price_email, $report );
$report = str_replace( '%shop_name%', get_option( 'blogname' ), $report );
$report = str_replace( '%find_us%', $purchase_log['find_us'], $report );
$report = str_replace( '%license_key%', $license_key, $report );

$message_html = str_replace( '%purchase_id%', $report_id, $message_html );
$message_html = str_replace( '%product_list%', $product_list_html, $message_html );
$message_html = str_replace( '%total_tax%', $total_tax_html, $message_html );
$message_html = str_replace( '%total_shipping%', $total_shipping_html, $message_html );
$message_html = str_replace( '%total_price%', $total_price_html, $message_html );
$message_html = str_replace( '%shop_name%', get_option( 'blogname' ), $message_html );
$message_html = str_replace( '%find_us%', $purchase_log['find_us'], $message_html );
$message_html = str_replace( '%license_key%', $license_key, $message_html );

if ( !empty($email) ) {
add_filter( 'wp_mail_from', 'wpsc_replace_reply_address', 0 );
add_filter( 'wp_mail_from_name', 'wpsc_replace_reply_name', 0 );
$message = apply_filters('wpsc_email_message', $message, $report_id, $product_list, $total_tax, $total_shipping_email, $total_price_email);

if ( !$is_transaction ) {

$payment_instructions = strip_tags( stripslashes( get_option( 'payment_instructions' ) ) );
if(!empty($payment_instructions))
$payment_instructions .= "\n\r";
$message = __( 'Thank you, your purchase is pending, you will be sent an email once the order clears.', 'wpsc' ) . "\n\r" . $payment_instructions . $message;
$message_html = __( 'Thank you, your purchase is pending, you will be sent an email once the order clears.', 'wpsc' ) . "\n\r" . $payment_instructions . $message_html;

// prevent email duplicates
if ( ! get_transient( "{$sessionid}_pending_email_sent" ) ) {
wp_mail( $email, __( 'Order Pending: Payment Required', 'wpsc' ), $message );
set_transient( "{$sessionid}_pending_email_sent", true, 60 * 60 * 12 );
}
} elseif ( ! get_transient( "{$sessionid}_receipt_email_sent" ) ) {
wp_mail( $email, __( 'Purchase Receipt', 'wpsc' ), $message );
set_transient( "{$sessionid}_receipt_email_sent", true, 60 * 60 * 12 );
}
}

remove_filter( 'wp_mail_from_name', 'wpsc_replace_reply_name' );
remove_filter( 'wp_mail_from', 'wpsc_replace_reply_address' );

$report_user = __( 'Customer Details', 'wpsc' ) . "\n\r";
$form_sql = "SELECT * FROM `" . WPSC_TABLE_SUBMITED_FORM_DATA . "` WHERE `log_id` = '" . $purchase_log['id'] . "'";
$form_data = $wpdb->get_results( $form_sql, ARRAY_A );

if ( $form_data != null ) {
foreach ( $form_data as $form_field ) {
$form_data = $wpdb->get_row( "SELECT * FROM `" . WPSC_TABLE_CHECKOUT_FORMS . "` WHERE `id` = '" . $form_field['form_id'] . "' LIMIT 1", ARRAY_A );

switch ( $form_data['type'] ) {
case "country":
$country_code = $form_field['value'];
$report_user .= $form_data['name'] . ": " . wpsc_get_country( $country_code ) . "\n";
//check if country has a state then display if it does.
$country_data = wpsc_country_has_state($country_code);
if(($country_data['has_regions'] == 1))
$report_user .= __( 'Billing State', 'wpsc' ) . ": " . wpsc_get_region( $purchase_log['billing_region'] ) . "\n";
break;

case "delivery_country":
$report_user .= $form_data['name'] . ": " . wpsc_get_country( $form_field['value'] ) . "\n";
break;

default:
if ($form_data['name'] == 'State' && is_numeric($form_field['value'])){
$report_user .= __( 'Delivery State', 'wpsc' ) . ": " . wpsc_get_state_by_id( $form_field['value'], 'name' ) . "\n";
}else{
$report_user .= wp_kses( $form_data['name'], array( ) ) . ": " . $form_field['value'] . "\n";
}
break;
}
}
}

$report_user .= "\n\r";
$report = $report_id . $report_user . $report;

//echo '======REPORT======<br />'.$report.'<br />';
//echo '======EMAIL======<br />'.$message.'<br />';
if ( (get_option( 'purch_log_email' ) != null) && ( $purchase_log['email_sent'] != 1 ) ){
wp_mail( get_option( 'purch_log_email' ), __( 'Purchase Report', 'wpsc' ), $report );
$wpdb->update(WPSC_TABLE_PURCHASE_LOGS, array('email_sent' => '1'), array( 'sessionid' => $sessionid ) );
}

/// Adjust stock and empty the cart
$wpsc_cart->submit_stock_claims( $purchase_log['id'] );
$wpsc_cart->empty_cart();
}
}
}

?>

Answers (2)

2012-06-16

Arnav Joy answers:

I think following lines are responsible for selecting key

if(empty($license->id) and $av == true){

$license = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}license WHERE order_id = 0 ORDER BY RAND() LIMIT 1");

if($license->id) $wpdb->query("UPDATE {$wpdb->prefix}license SET order_id = '".$purchase_log['id']."', assigned_on = '".time()."' WHERE id = '".$license->id."'");

}


can you provide me access to your site?

2012-06-17

Just Me answers:

Yes, I think that is the problem. There is a selection for order_ID is zero, which means it has not been used. But then it says random() which means it will not check if the license key is related to the product.

I am not sure if there is a setting anywhere that would make it work. Did you contact the developer of the plugin?


user comments:

Hi, yes I have contacted the developer but he unfortunately didn't answer.


Just Me comments:

It sometimes helps to donate a few bugs to the developer but then again if he has given up on the project then it is money lost.

Someone will have to get access to your wp-admin.
I'd be able to do it but, someone else already offered so I guess you are working with him.