From 67f937ca44b0c1a21371b14f7a042e2a3652d82e Mon Sep 17 00:00:00 2001
From: Reinhold Kainhofer <reinhold@kainhofer.com>
Date: Fri, 1 Feb 2013 22:20:59 +0100
Subject: [PATCH] Version 0.9: Everything seems to be working, needs some more
 testing...

---
 downloads_for_sale.php                    | 146 ++++++----------------
 downloads_for_sale/download_medium.png    | Bin 0 -> 4573 bytes
 downloads_for_sale/download_small.png     | Bin 0 -> 1535 bytes
 downloads_for_sale/tmpl/order_image.php   |   6 +-
 downloads_for_sale/tmpl/order_text.php    |   6 +-
 downloads_for_sale/tmpl/product_image.php |   9 +-
 downloads_for_sale/tmpl/product_text.php  |   7 +-
 en-GB.plg_vmcustom_downloads_for_sale.ini |   2 +-
 8 files changed, 51 insertions(+), 125 deletions(-)
 create mode 100644 downloads_for_sale/download_medium.png
 create mode 100644 downloads_for_sale/download_small.png

diff --git a/downloads_for_sale.php b/downloads_for_sale.php
index 0fd1b15..ddbdbec 100644
--- a/downloads_for_sale.php
+++ b/downloads_for_sale.php
@@ -21,6 +21,7 @@ if (!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmcustompl
 if(!class_exists('VmTable'))require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'vmtable.php');
 
 class plgVmCustomDownloads_for_Sale extends vmCustomPlugin {
+	var $status_allowed = array ('S', 'C');
 
 	function __construct(& $subject, $config) {
 		parent::__construct($subject, $config);
@@ -44,10 +45,6 @@ class plgVmCustomDownloads_for_Sale extends vmCustomPlugin {
 		return $db->loadObject();
 	}
 	
-	function hasBoughtItem ($uid, $customitem) {
-		
-	}
-	
 	function checkDownloadable ($field, &$output) {
 		$userId = (int) JFactory::getUser()->get('id');
 		if ($field->download_type == 'free_download') {
@@ -58,18 +55,28 @@ class plgVmCustomDownloads_for_Sale extends vmCustomPlugin {
 			}
 			return ($userId>0);
 		} elseif ($field->download_type == 'paid_download') {
-// 			if ($this->hasBoughtItem ($userId, $field->
-			// TODO: check whether the logged-in user has bought the product or the correct ordernumber/password is given
-			$order_number = JRequest::getString('order_number', null);//JRequest::getString('username', null, 'GET', JREQUEST_ALLOWRAW);
-
+			$order_number = JRequest::getString('order_number', null);
 			$order_pass = JRequest::getString('order_pass', null);
 			$orderModel = VmModel::getModel('orders');
 			$order_id = $orderModel->getOrderIdByOrderPass ($order_number, $order_pass);
-			if (!order_id) {
+			if ($order_id) {
+				$order = $orderModel->getOrder($order_id);
+				if ($order && in_array($order['details']['BT']->order_status, $this->status_allowed)) {
+					foreach ($order['items'] as $i) {
+						if ($i->virtuemart_product_id == $field->virtuemart_product_id) {
+							if (in_array($i->order_status, $this->status_allowed)) {
+								return $i->virtuemart_order_item_id;
+							} else {
+								JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_STATUS_NOT_AUTHORIZED'), 'error');
+							}
+						}
+					}
+				} else {
+					JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_STATUS_NOT_AUTHORIZED'), 'error');
+				}
+			} else {
 				JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_WRONG_PASSWD'), 'error');
-				return false;
 			}
-			return $order_id;
 		}
 		return false;
 	}
@@ -125,63 +132,13 @@ class plgVmCustomDownloads_for_Sale extends vmCustomPlugin {
 			return false;
 		}
 		
-// print("<pre>checkDownloadable</pre>");
 		if ($this->checkDownloadable ($field, $render)) {
-// print("<pre>checkDownloadable SUCCESS</pre>");
 			$this->downloadFile ($field->media_id, $render);
-// 		} else {
-// print("<pre>checkDownloadable FAILURE</pre>");
-		
-		}
-	}
-/*
-		$dlkey = JRequest::getString('dlkey', 0);
-		$dloid = JRequest::getInt('oid', 0);
-		if ( !$order  =$this->getOrderData( $dlkey, $dloid ) ) {
-			vmInfo(JText::_('VMCUSTOM_SPIRAL_DOWNLOAD_NO_FILE_FOUND'));
-			return ;
-		}
-		$order_status = $order['order_status'];
-		$params = $this->getMediaParams($custom_id, $order['virtuemart_product_id']);
-		$status = $params->orderstatus;
-		if(empty($status))
-		{
-		   $paramStatus = array("C","S");	
-		}
-		else
-		{
-		   $paramStatus = (array)$params->orderstatus;
 		}
-		//if(empty($paramStatus))
-		//vmDebug('plgVmOnSelfCallFE - params',$params);
-
-		if (in_array($order_status,$paramStatus)) {
-				
-				$orderdata = new stdClass();
-				$orderdata->virtuemart_order_id = $order['virtuemart_order_id'];
-				$orderdata->virtuemart_order_item_id = $dloid;
-				$orderdata->created_on = $order['created_on'];
-				//update downloads table
-				if ($this->checkDownloadTable($orderdata,$custom_id,$params))
-				{
-					$orderModel = VmModel::getModel('orders');					
-					$orderdata->order_status = 'S';
-					$orderModel->updateSingleItem($dloid,$orderdata);					
-				    return $this->startDownload($params->media_id, $output);
-				}
-				else
-				{
-					vmInfo(JText::_('VMCUSTOM_SPIRAL_DOWNLOAD_EXPIRED'));
-				}
-			
-		} else vmInfo(JText::_('VMCUSTOM_SPIRAL_DOWNLOAD_PAYMENT_NOT_CONFIRMED'));
-
-		return;
 	}
-*/
 
 	/**
-	 * plgVmOnSelfCallBE ... Called to execute some plugin action in the backend (e.g. set/reset dl counter etc.
+	 * plgVmOnSelfCallBE ... Called to execute some plugin action in the backend (e.g. set/reset dl counter, show statistics etc.)
 	 */
 /*	function plgVmOnSelfCallBE($type, $name, &$output) {
 		if ($name != $this->_name || $type != 'vmcustom') return false;
@@ -216,7 +173,9 @@ class plgVmCustomDownloads_for_Sale extends vmCustomPlugin {
 		$link_types = array('none' => 'VMCUSTOM_DLSALE_LINK_NONE', 'text'=>'VMCUSTOM_DLSALE_LINK_TEXT', 'image'=>'VMCUSTOM_DLSALE_LINK_IMAGE');
 		
 		$html .= VmHTML::row('select', 'VMCUSTOM_DLSALE_DOWNLOAD_FILE', 'custom_param['.$row.'][media_id]', $download_files, $field->media_id,'','virtuemart_media_id', 'file_title', false);
-		$html .= VmHTML::row ('select','VMCUSTOM_DLSALE_INVOICE_LINK', 'custom_param['.$row.'][invoice_link_type]',$link_types,$field->invoice_link_type, '', '', '', false);
+		if ($field->is_cart_attribute) {
+			$html .= VmHTML::row ('select','VMCUSTOM_DLSALE_INVOICE_LINK', 'custom_param['.$row.'][invoice_link_type]',$link_types,$field->invoice_link_type, '', '', '', false);
+		}
 		$html .= VmHTML::row ('select','VMCUSTOM_DLSALE_PRODUCT_LINK', 'custom_param['.$row.'][product_link_type]',$link_types,$field->product_link_type, '', '', '', false);
 		$html .= VmHTML::row('select', 'VMCUSTOM_DLSALE_TYPE', 'custom_param['.$row.'][download_type]', 
 			array('free_download'=>'VMCUSTOM_DLSALE_TYPE_FREE', 'registered_download'=>'VMCUSTOM_DLSALE_TYPE_REGISTERED', 'paid_download'=>'VMCUSTOM_DLSALE_TYPE_PAID'), 
@@ -233,21 +192,19 @@ class plgVmCustomDownloads_for_Sale extends vmCustomPlugin {
 		$url = JURI::root().'index.php?option=com_virtuemart&view=plugin&name=downloads_for_sale&customfield_id='.(int)$field->virtuemart_customfield_id;
 		$_currentUser = JFactory::getUser();
 		$cuid = $_currentUser->get('id');
+		$this->parseCustomParams($field);
 		switch ($field->download_type) {
 			case 'free_download':  break;
-			case 'registered_download': break; 
+			case 'registered_download': if ($cuid<=0) return false; break; 
 			case 'paid_download': 
 				if ($orderitem) {
 					$order = $this->orderDataFromItem ($orderitem->virtuemart_order_item_id);
 				} elseif ($cuid>0) {
-
 					$orderModel = VmModel::getModel('orders');
-					$orderList = $orderModel->getOrdersList($cuid, true);
-		
-					foreach ($orderList as $ol) {
+					foreach ($orderModel->getOrdersList($cuid, true) as $ol) {
 						$o = $orderModel->getOrder($ol->virtuemart_order_id);
 						foreach ($o['items'] as $i) {
-							if ($i->virtuemart_product_id == $field->virtuemart_product_id) {
+							if ($i->virtuemart_product_id == $field->virtuemart_product_id && in_array($i->order_status, $this->status_allowed)) {
 								$order = $o['details']['BT'];
 							}
 						}
@@ -256,12 +213,11 @@ class plgVmCustomDownloads_for_Sale extends vmCustomPlugin {
 				if (empty($order)) {
 					return false;
 				}
-print("<pre>order= ".print_r($order,true)."</pre>");
 				$url .= '&order_number='.urlencode($order->order_number).'&order_pass='.urlencode($order->order_pass); 
 				break;
 		}
 		$media = $this->getDownloadFile ($field->media_id);
-		return $this->renderByLayout($view.'_'.$type, array($field, $media, $url));
+		return $this->renderByLayout($view.'_'.$type, array($url, $field, $media));
 	}
 
 	/**
@@ -288,15 +244,20 @@ print("<pre>order= ".print_r($order,true)."</pre>");
 	/**
 	 * plgVmOnDisplayProductFE ... Called for NON-product variant custom fields to display on the product details page
 	 */
-	function plgVmOnDisplayProductFE( $product, &$idx,&$group){
+	function plgVmOnDisplayProductFE( $product, &$idx,&$field){
 		// default return if it's not this plugin
 		if ($field->custom_element != $this->_name) return '';
-$group->display .=  "<h1>plgVmOnDisplayProductFE</h1>";
-		$this->getCustomParams($field);
+		$this->parseCustomParams($field);
 		$type = $field->product_link_type;
 		if ($type != 'none') {
-			$group->display .= $this->createDownloadLink($field, "product", $type);
-			return true;
+			// The $field for non-cart-variant fields does NOT have the product_id set!
+			$field->virtuemart_product_id = $product->virtuemart_product_id;
+			$ret = $this->createDownloadLink($field, "product", $type);
+			if (!empty($ret)) {
+				$field->display .= $ret;
+				return true;
+			} else 
+				return false;
 		} else {
 			return false;
 		}
@@ -324,43 +285,17 @@ $group->display .=  "<h1>plgVmOnDisplayProductFE</h1>";
 	 */
 	function plgVmDisplayInOrderFE($item, $row, &$html) {
 		if (empty($item->productCustom->custom_element) or $item->productCustom->custom_element != $this->_name) return '';
+
 		$this->parseCustomParams($item->productCustom);
-// print("<pre>plgVmDisplayInOrderFE, item=".print_r($item,true)."</pre>");
 		$type = $item->productCustom->product_link_type;
 		if ($type != 'none') {
-			$html .= $this->createDownloadLink($item->productCustom, "product", $type, $item);
+			$html .= $this->createDownloadLink($item->productCustom, "order", $type, $item);
 			return true;
 		} else {
 			return false;
 		}
 	}
 
-
-/*
-			$_currentUser = JFactory::getUser();
-			$cuid = $_currentUser->get('id');
-
-			$orderModel = VmModel::getModel('orders');
-			$orderList = $orderModel->getOrdersList($cuid, true);
-		
-			foreach ($orderList as $o) {
-				$order = $orderModel->getOrder($o->virtuemart_order_id);
-
-				foreach ($order['items'] as $i) {
-					if ($i->virtuemart_product_id == $field->virtuemart_product_id) {
-						$downloadInfo = $this->getDownloadInfo($order['details']['BT']->virtuemart_order_id, $i->virtuemart_order_item_id, $field->value, $order['details']['BT']->created_on, $field );	
-						if(!$downloadInfo->downloadsExpired) {
-							$url = JURI::root().'index.php?option=com_virtuemart&view=plugin&name=downloads_for_sale&custom_id='.$field->value . '&dlkey='.base64_encode($order['details']['BT']->	).'&oid='.$i->virtuemart_order_item_id ;
-							$html .= JHTML::link ( $url, JTEXT::_('VMCUSTOM_DLSALE_LINK') , array ('title' => $media->title, 'class' => 'dlink' ) );
-						} else {
-							$html .= '<p><strong>'.JText::_('VMCUSTOM_DLSALE_EXPIRED_INFO').'</strong></p>';
-						}
-					}
-					
-				}
-			}
-*/
-
 	/**
 	 * We must reimplement this triggers for joomla 1.7
 	 * vmplugin triggers note by Max Milbers
@@ -391,8 +326,7 @@ $group->display .=  "<h1>plgVmOnDisplayProductFE</h1>";
 	}
 
 	function getTableSQLFields() {
-/* 
-		$SQLfields = array(
+/* 		$SQLfields = array(
 		  'id' => 'int(1) UNSIGNED NOT NULL AUTO_INCREMENT',
 		  'virtuemart_customfield_id' => 'int(11) UNSIGNED NOT NULL DEFAULT 0',
 		  'downloaded' => 'int(11) UNSIGNED NOT NULL DEFAULT 0',
diff --git a/downloads_for_sale/download_medium.png b/downloads_for_sale/download_medium.png
new file mode 100644
index 0000000000000000000000000000000000000000..7204fe9511a6ee4f72692288dcdbf2ff4483d1c0
GIT binary patch
literal 4573
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

literal 0
HcmV?d00001

diff --git a/downloads_for_sale/download_small.png b/downloads_for_sale/download_small.png
new file mode 100644
index 0000000000000000000000000000000000000000..102b11bb4ce22b1119bf9a6e22b3271bb5ae8388
GIT binary patch
literal 1535
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7Sc;uILpV4%IBGajIv5xj
zI14-?iy0WWg+Q3`(%rg03=9l1C9V-A!TD(=<%vb942~)JNvR5MnMJAP`9;~q3eLgC
zGp@NYGcYiSg48(|r6!hS=I1GdWag$a80j0D>l;`o%vlw|z`!C1QV`+mW0jnrtCt8e
zN3SBcfWgMTq98FjJGDe1DK$Ma&sIr6K|x6&GsRXZ+|<{=x4=0yBh#a*C^fjsFC@7t
zJJ~Wt$=;63royTsw;(sQBvGLvHz%*ys=`(YY^GISu@y*IUr7P1q$Jx`3F7Do-v9;Y
z{GwC^6Fo!SWCLRp1rswpBXc85b2A-<;KULIuf#kBBXb2K0|RpfBO@zALn{+Q1t?Im
z<5EyiuqjGOvkG!?gW6e?l4h%vQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)TTa=Qf
zTU?n}l31aeSF8*%1ZIv)YH@N=W&t?3K;|YU<(HP&Dk*_1g4(J8wWuPo0B%uUF*NX!
z^K<np5)1SV^$hgkCW8#GNGz}dM?`*6NPd2f9mM-6ab^S3iJ}N$s|{R#s!L)?s-2O6
zfrYMtk*=Y6h=Gxnv6+>LX%v!vh$1xYzWFJcX_ZLYjdhJoLJTdf3=FJHjG)?)6hXDy
z=z{_RDPX{%4)PP4xB`feC%{sY;o((KT9gBhmXu`u)ST4Z)Vz{neM3D%)G$j)wo1z{
z%1tb>%gjwoPt`BTOSjQS2;y}g#MMDAZgyNY`rt$dN`Nq@!=sWW45-6sVm91RT3TW%
z8<fJpz-aC1;uvDlyL7U(-(d%Vw*McK&mLy-YM<4{rd-IRHR}h*g=Y%uY8j#|nl1+v
zGAb)dNo8?_a2g3zD>`qySE_S6NM-$&TQe{IxqmJry>q5vN@VjD2AN!eiJWYjrPEBi
zZ>YRHHFup0!w%c@C-tYk<v#c{&+2m(qx}8@i$cEbdvQ97nMHFc!?9cS(+})n(mDC$
z#kFM&N(>5jPiJI(yc)Ur>(TPigMOc{&1OGzyTX;1K~T}7Q{OMk<KI%h`t4%(Z3WW=
zukR{t(EI!);^?&bTHCfR|8qRuNdF@Dg$ak1k7cb(y2kkUYpd1#jlv5QZ|~bw|LGY|
z4$B3B1-f|*TJ~8h%_Gjtd1Wb)8d>&sm!8e}W&tKAj*5BgX>C(BZ9Qx-X9m|Kl|)U|
zu0;-!)1K*gn|k&=KCmr!^H%xeh8Hiq|HI$EbwR>ru_Ip?7#J8lUHx3vIVCg!053Mh
AfdBvi

literal 0
HcmV?d00001

diff --git a/downloads_for_sale/tmpl/order_image.php b/downloads_for_sale/tmpl/order_image.php
index 3568bd9..caa3e6e 100644
--- a/downloads_for_sale/tmpl/order_image.php
+++ b/downloads_for_sale/tmpl/order_image.php
@@ -9,7 +9,5 @@
  *
  **/
  
-	defined('_JEXEC') or die();
-
-?>
-<h1>IMAGE LINK</h1>
+defined('_JEXEC') or die();
+?><a href="<?php echo $viewData[0]; ?>"><img height="16" src="<?php echo JURI::root().'plugins/vmcustom/downloads_for_sale/downloads_for_sale/download_medium.png'; ?>" alt="Download"> <?php echo $viewData[2]->file_title; ?></a>
diff --git a/downloads_for_sale/tmpl/order_text.php b/downloads_for_sale/tmpl/order_text.php
index adb0260..3259a38 100644
--- a/downloads_for_sale/tmpl/order_text.php
+++ b/downloads_for_sale/tmpl/order_text.php
@@ -1,6 +1,5 @@
 <?php
 /**
- *
  * @author Reinhold Kainhofer
  * @package VirtueMart
  * @subpackage custom
@@ -9,7 +8,6 @@
  *
  **/
  
-	defined('_JEXEC') or die();
+defined('_JEXEC') or die();
 
-?>
-<h1>TEXT LINK</h1>
+?>Download: <a href="<?php echo $viewData[0]; ?>"><?php echo $viewData[2]->file_title; ?></a>
diff --git a/downloads_for_sale/tmpl/product_image.php b/downloads_for_sale/tmpl/product_image.php
index aba5d2b..1de1c16 100644
--- a/downloads_for_sale/tmpl/product_image.php
+++ b/downloads_for_sale/tmpl/product_image.php
@@ -9,9 +9,8 @@
  *
  **/
  
-	defined('_JEXEC') or die();
-
+defined('_JEXEC') or die();
 ?>
-<h1>IMAGE LINK</h1><pre>
-<?php // print_r($viewData) ?></pre>
-<a href="<?php echo $viewData[2]; ?>">Download</a>
+<div class="download-for-sale-image">
+<a href="<?php echo $viewData[0]; ?>"><img style="vertical-align:middle; display: inline;" src="<?php echo JURI::root().'plugins/vmcustom/downloads_for_sale/downloads_for_sale/download_medium.png'; ?>" alt="<?php echo $viewData[2]->file_title; ?>"></a></div>
+<br clear="all"/>
diff --git a/downloads_for_sale/tmpl/product_text.php b/downloads_for_sale/tmpl/product_text.php
index afca31f..0f2ec55 100644
--- a/downloads_for_sale/tmpl/product_text.php
+++ b/downloads_for_sale/tmpl/product_text.php
@@ -9,9 +9,6 @@
  *
  **/
  
-	defined('_JEXEC') or die();
-
+defined('_JEXEC') or die();
 ?>
-<h1>TEXT LINK</h1>
-<?php print_r($viewData) ?></pre>
-<a href="<?php echo $viewData[2]; ?>">Download</a>
+<p><img style="vertical-align:middle; display: inline;" src="<?php echo JURI::root().'plugins/vmcustom/downloads_for_sale/downloads_for_sale/download_small.png'; ?>" alt=""/> <a href="<?php echo $viewData[0]; ?>"><?php echo $viewData[2]->file_title; ?></a></p>
diff --git a/en-GB.plg_vmcustom_downloads_for_sale.ini b/en-GB.plg_vmcustom_downloads_for_sale.ini
index 7d6c6d9..01a7e00 100644
--- a/en-GB.plg_vmcustom_downloads_for_sale.ini
+++ b/en-GB.plg_vmcustom_downloads_for_sale.ini
@@ -30,4 +30,4 @@ VMCUSTOM_DLSALE_ERROR_LOAD_FAILURE="Unable to load custom field data."
 VMCUSTOM_DLSALE_ERROR_NO_FILE_SET="Media file is not available."
 VMCUSTOM_DLSALE_ERROR_ORDER_NOT_FOUND="Unable to find order data in database."
 VMCUSTOM_DLSALE_ERROR_WRONG_PASSWD="Invalid combination of order number and password."
-
+VMCUSTOM_DLSALE_ERROR_STATUS_NOT_AUTHORIZED="Order status does not allow download."
-- 
GitLab