Follow us on Twitter X-Cart on Facebook Wiki
Shopping cart software Solutions for online shops and malls
 

Keeping track e-goods downloads (date and ip)

 
Reply
   X-Cart forums > X-Cart 4 > Dev Questions
 
Thread Tools Search this Thread
  #1  
Old 10-05-2011, 01:31 AM
 
esoftrade esoftrade is offline
 

Newbie
  
Join Date: Jun 2011
Posts: 2
 

Post Keeping track e-goods downloads (date and ip)

I wanted to keep track of the egoods downloads of my site.
I added the great idea from minorgod to add the downloads counter.
But I wanted more so that I can know when and from where an e-good had been downloaded.

There are only 4 simple modifications to do.

Those modifications works for xcart version 4.4.3 but may works also for newer release, it is just a matter of testing

1. Create a new table in DB in your DB console

Code:
CREATE TABLE `xcart_download_keys_downloads` ( `download_key` char(100) NOT NULL default '', `id_download` tinyint(4) NOT NULL default '0', `date` int(11) NOT NULL default '0', `ip` int(11) unsigned NOT NULL default '0', PRIMARY KEY (`download_key`,`id_download`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


2. Add the new table in init.php

Add the following statement in the sql_tbl array (preferably right after the download_keys statement:
PHP Code:
'download_keys'                     => 'xcart_download_keys',
         
'download_keys_downloads'           => 'xcart_download_keys_downloads'

3. Add the new table in the delete statements (keep your DB clean)

In the func_delete_product() function: in the if ($delete_all === true) section, add the complete clean of the table:

PHP Code:
db_query("DELETE FROM $sql_tbl[download_keys]");
db_query("DELETE FROM $sql_tbl[download_keys_downloads]"); 

Still in the func_delete_product() function, add a statement to delete content of the table for a given product id (when a product is removed) - you can skip this if you prefer to keep an history of all downloads, even for deleted products:

PHP Code:
db_query("DELETE FROM $sql_tbl[download_keys_downloads] WHERE download_key=(SELECT download_key FROM $sql_tbl[download_keys] WHERE productid='$productid')");
    
db_query("DELETE FROM $sql_tbl[download_keys] WHERE productid='$productid'"); 

Note that this statement must be done before the delete from download_keys. Otherwise, you will not delete anything since the entries will have been deleted!


4. Update the table whenever an e-good is downloaded

In download.php, locate the following statement (line 165 for me):
PHP Code:
if (empty($id)) 
exit(); 
If you added minorgod functionality, you should have it just below.
We will add new code below again (note that minorgod functionality is not required, but it is a good to get idea).

This is to retrieve and increment the id.

PHP Code:
if (empty($id))
    exit();

$res func_query_first("SELECT productid, expires, number_downloads FROM $sql_tbl[download_keys] WHERE download_key = '$id'");
$number_downloads=$res['number_downloads']+1;

$resDownloadTime func_query_first("SELECT MAX(id_download) AS max_id FROM $sql_tbl[download_keys_downloads] WHERE download_key = '$id'");
if (empty(
$resDownloadTime)){
    
$id_download=0;
} else {
    
$id_download=$resDownloadTime['max_id']+1;


Next, update the DB once the e-good has been downloaded:

PHP Code:
if ($fd) {

            while (
                !
feof($fd)
                && 
connection_status() == 0
            
) {

                print(
fread($fd8192));

                
flush();

            }

            
fclose($fd);

            
// Update the nb of times the egood has been downloaded
            
$query="UPDATE $sql_tbl[download_keys] SET number_downloads='$number_downloads' WHERE download_key='$id'";
            
db_query($query);
            
            
// Update the key download information with date and ip
            
$query="INSERT INTO $sql_tbl[download_keys_downloads] (download_key, id_download, date_download, ip) VALUES ('$id', '$id_download', '".XC_TIME."', INET_ATON('$CLIENT_IP'))";
            
db_query($query);
        } else {

            print(
$data);

            
flush();

        } 


That's it! Let me know if this works for you or if you find any enhancement or bug.

Thanks
Fred
__________________
www.eSoftrade.com

XCart 4.4.3
Reply With Quote

The following user thanks esoftrade for this useful post:
carpeperdiem (10-19-2011)
Reply
   X-Cart forums > X-Cart 4 > Dev Questions



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -8. The time now is 06:11 AM.

   

 
X-Cart forums © 2001-2020