diff --git a/assets/downloads_for_sale.css b/assets/downloads_for_sale.css index 9420fb266d17146cacfcbf5bce911c3d624bccd8..906764aa26c265419a771b96ee3253acc80e27ec 100644 --- a/assets/downloads_for_sale.css +++ b/assets/downloads_for_sale.css @@ -11,4 +11,8 @@ div.downloads-for-sale tr, div.downloads-for-sale td { .vm-customfield-mod .downloads-for-sale img, .vm-customfield-cart .downloads-for-sale img { width: inherit; -} \ No newline at end of file +} + +.downloads-for-sale-page p, .downloads-for-sale-page table { + margin-left: 50px; +} diff --git a/downloads_for_sale.php b/downloads_for_sale.php index 07bfd499d720c2f352abf7836710b3d54abbc0bb..e9dea2620c577dd50bf7f20ff21b004c780af6bd 100644 --- a/downloads_for_sale.php +++ b/downloads_for_sale.php @@ -119,19 +119,79 @@ class plgVmCustomDownloads_for_Sale extends vmCustomPlugin { function plgVmOnSelfCallFE($type,$name,&$render) { if ($name != $this->_name || $type != 'vmcustom') return false; + $handled = false; $field_id = JRequest::getInt('customfield_id',0); - if (!$field_id) { - JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_CUSTOMFIELDID'), 'error'); - return false; - } - $field = $this->loadCustomfieldData ($field_id); - if (!$field) { - JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_LOAD_FAILURE'), 'error'); - return false; + if ($field_id) { + $field = $this->loadCustomfieldData ($field_id); + if ($field) { + if ($this->checkDownloadable ($field, $render)) { + $handled = true; + $this->downloadFile ($field->media_id, $render); + return true; + } else { + JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_NOT_AUTHORIZED_UNKNOWN'), 'error'); + } + } else { + JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_LOAD_FAILURE'), 'error'); + } } - - if ($this->checkDownloadable ($field, $render)) { - $this->downloadFile ($field->media_id, $render); + if (!$handled) { + // If we have an order number and password, display all downloads of that order, even if the user is not logged in: + $field_id = JRequest::getInt('customfield_id',0); + $order_number = JRequest::getString('order_number', null); + $order_pass = JRequest::getString('order_pass', null); + $orders = array(); + if ($order_number || $order_pass) { + $orderModel = VmModel::getModel('orders'); + $order_id = $orderModel->getOrderIdByOrderPass ($order_number, $order_pass); + if ($order_id) { + $orders[] = $orderModel->getOrder($order_id); + } + if (empty($orders)) { + JFactory::getApplication()->enqueueMessage(JText::_('VMCUSTOM_DLSALE_ERROR_WRONG_PASSWD'), 'error'); + } + } else { + $_currentUser = JFactory::getUser(); + $cuid = $_currentUser->get('id'); + if ($cuid>0) { + $orderModel = VmModel::getModel('orders'); + $os = $orderModel->getOrdersList($cuid, true); + foreach ($os as $o) { + $orders[] = $orderModel->getOrder($o->virtuemart_order_id); + } + } + + } + + $customModel = VmModel::getModel('customfields'); + $orderdownloads = array(); + foreach ($orders as $order) { + if (!in_array($order['details']['BT']->order_status, $this->status_allowed)) { + // Order status does not allow a download in any case, so skip this order + continue; + } + $orderinfo = $order; + $orderinfo['download_products']=array(); + foreach ($order['items'] as $i) { + $productinfo=$i; + $productinfo->downloads = array(); + $customs = (array)$customModel->getproductCustomslist ($i->virtuemart_product_id); + foreach ($customs as $field) { + if ($field->custom_element == $this->_name) { + $productinfo->downloads[] = $this->createDownloadLink ($field, 'order', $field->invoice_link_type, $i); + } + } + if (!empty($productinfo->downloads)) { + $orderinfo['download_products'][] = $productinfo; + } + } + if (!empty($orderinfo['download_products'])) { + $orderdownloads[] = $orderinfo; + } + } + + print $this->renderByLayout('downloads', array($orderdownloads)); + return true; } } diff --git a/downloads_for_sale/tmpl/downloads.php b/downloads_for_sale/tmpl/downloads.php new file mode 100644 index 0000000000000000000000000000000000000000..566f801e4f2680371b153796de0ac816a6dadbae --- /dev/null +++ b/downloads_for_sale/tmpl/downloads.php @@ -0,0 +1,61 @@ +<?php +/** + * + * @author Reinhold Kainhofer + * @package VirtueMart + * @subpackage custom + * @copyright Copyright (C) 2013 RK - All rights reserved. + * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php + * + **/ + +defined('_JEXEC') or die(); + +if(JFile::exists(JPATH_SITE.DS.'plugins'.DS.'vmcustom'.DS.'downloads_for_sale'.DS.'assets'.DS.'downloads_for_sale.css')) { + $doc =& JFactory::getDocument(); + $doc->addStyleSheet(JURI::root().'plugins/vmcustom/downloads_for_sale/assets/downloads_for_sale.css'); +} +?> + +<div class="downloads-for-sale-page"> +<h1><?php echo JText::_('VMCUSTOM_DLSALE_DLPAGE_TITLE') ?></h1> + +<p> + <form action="<?php echo JRoute::_( 'index.php', 1); ?>" method="post" > + <div class="width30 floatleft" id="com-form-order-number"> + <label for="order_number"><?php echo JText::_('COM_VIRTUEMART_ORDER_NUMBER') ?></label><br /> + <input type="text" id="order_number" name="order_number" class="inputbox" size="18" alt="order_number" /> + </div> + <div class="width30 floatleft" id="com-form-order-pass"> + <label for="order_pass"><?php echo JText::_('COM_VIRTUEMART_ORDER_PASS') ?></label><br /> + <input type="text" id="order_pass" name="order_pass" class="inputbox" size="18" alt="order_pass" value="p_"/> + </div> + <div class="width30 floatleft" id="com-form-order-submit"> + <input type="submit" name="Submitbuton" class="button" value="<?php echo JText::_('VMCUSTOM_DLSALE_DLPAGE_BUTTON_VIEW') ?>" /> + </div> + <div class="clr"></div> + <input type="hidden" name="option" value="com_virtuemart" /> + <input type="hidden" name="view" value="plugin" /> + <input type="hidden" name="name" value="downloads_for_sale" /> + <input type="hidden" name="return" value="" /> + + </form> +</p> + +<?php if (empty($viewData[0])) { ?> + <h2><?php echo JText::_('VMCUSTOM_DLSALE_DLPAGE_NO_DOWNLOADS'); ?></h2> +<?php } else { ?> + + <h2><?php echo JText::_('VMCUSTOM_DLSALE_DLPAGE_DOWNLOADS'); ?></h2> + + <?php foreach ($viewData[0] as $order) { ?> + <?php foreach ($order['download_products'] as $product) { ?> + <h3><?php echo JText::sprintf('VMCUSTOM_DLSALE_DLPAGE_ORDERPRODUCT', $order['details']['BT']->order_number, $product->order_item_name, $product->order_item_sku ) ?></h3> + <p><?php echo join("<br/>", $product->downloads); ?> </p> +<?php + } + } +} +?> + +</div> diff --git a/en-GB.plg_vmcustom_downloads_for_sale.ini b/en-GB.plg_vmcustom_downloads_for_sale.ini index 07c7ed7feb5d4a6574d50fde72964c105c9d4125..2084039679bd22094558a8e93a1cf442e2640794 100644 --- a/en-GB.plg_vmcustom_downloads_for_sale.ini +++ b/en-GB.plg_vmcustom_downloads_for_sale.ini @@ -30,8 +30,16 @@ 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." +VMCUSTOM_DLSALE_ERROR_NOT_AUTHORIZED_UNKNOWN="Not authorized to download." + +VMCUSTOM_DLSALE_DLPAGE_TITLE="Downloads for Sale" +VMCUSTOM_DLSALE_DLPAGE_BUTTON_VIEW="See Downloads" +VMCUSTOM_DLSALE_DLPAGE_NO_DOWNLOADS="No Downloads Available" +VMCUSTOM_DLSALE_DLPAGE_DOWNLOADS="Available Downloads" +VMCUSTOM_DLSALE_DLPAGE_ORDERPRODUCT="Order number %s: %s (%s)" VMCUSTOM_DLSALE_FILENAME="Filename" VMCUSTOM_DLSALE_MIMETYPE="MIME-Type" VMCUSTOM_DLSALE_FILESIZE="File size" VMCUSTOM_DLSALE_FILESIZE_BYTES="Bytes" + diff --git a/images/downloads_for_sale_-_downloadaread_loggedin.png b/images/downloads_for_sale_-_downloadaread_loggedin.png new file mode 100644 index 0000000000000000000000000000000000000000..459da1bef4cbbd03a269c0bfc1de1aab0c3ed5a1 Binary files /dev/null and b/images/downloads_for_sale_-_downloadaread_loggedin.png differ diff --git a/images/downloads_for_sale_-_downloadaread_loggedout.png b/images/downloads_for_sale_-_downloadaread_loggedout.png new file mode 100644 index 0000000000000000000000000000000000000000..7e6ed78eb400e10d3fd376998c258fe670159be8 Binary files /dev/null and b/images/downloads_for_sale_-_downloadaread_loggedout.png differ diff --git a/images/downloads_for_sale_-_downloadaread_menuitem.png b/images/downloads_for_sale_-_downloadaread_menuitem.png new file mode 100644 index 0000000000000000000000000000000000000000..e1fd69ada1a08ea3c83084de4f1bc021207cc90d Binary files /dev/null and b/images/downloads_for_sale_-_downloadaread_menuitem.png differ diff --git a/releases/plg_vmcustom_downloads_for_sale_v1.0.zip b/releases/plg_vmcustom_downloads_for_sale_v1.0.zip index 7f987c14334be8410ad72229f77fb038a1303f0d..7624fd6db3257cc193827c10a950c2dd4cec36a4 100644 Binary files a/releases/plg_vmcustom_downloads_for_sale_v1.0.zip and b/releases/plg_vmcustom_downloads_for_sale_v1.0.zip differ