/magento/app/code/core/Mage/Downloadable/controllers/DownloadController.php
PHP | 231 lines | 161 code | 17 blank | 53 comment | 33 complexity | 398d0817301c16a13b4e0dfc847f33fd MD5 | raw file
Possible License(s): LGPL-3.0
- <?php
- /**
- * Magento
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 3.0)
- * that is bundled with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://opensource.org/licenses/osl-3.0.php
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@magentocommerce.com so we can send you a copy immediately.
- *
- * DISCLAIMER
- *
- * Do not edit or add to this file if you wish to upgrade Magento to newer
- * versions in the future. If you wish to customize Magento for your
- * needs please refer to http://www.magentocommerce.com for more information.
- *
- * @category Mage
- * @package Mage_Downloadable
- * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Download controller
- *
- * @category Mage
- * @package Mage_Downloadable
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Downloadable_DownloadController extends Mage_Core_Controller_Front_Action
- {
- /**
- * Return core session object
- *
- * @return Mage_Core_Model_Session
- */
- protected function _getSession()
- {
- return Mage::getSingleton('core/session');
- }
- /**
- * Return customer session object
- *
- * @return Mage_Customer_Model_Session
- */
- protected function _getCustomerSession()
- {
- return Mage::getSingleton('customer/session');
- }
- protected function _processDownload($resource, $resourceType)
- {
- $helper = Mage::helper('downloadable/download');
- /* @var $helper Mage_Downloadable_Helper_Download */
- $helper->setResource($resource, $resourceType);
- $fileName = $helper->getFilename();
- $contentType = $helper->getContentType();
- $this->getResponse()
- ->setHttpResponseCode(200)
- ->setHeader('Pragma', 'public', true)
- ->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true)
- ->setHeader('Content-type', $contentType, true);
- if ($fileSize = $helper->getFilesize()) {
- $this->getResponse()
- ->setHeader('Content-Length', $fileSize);
- }
- if ($contentDisposition = $helper->getContentDisposition()) {
- $this->getResponse()
- ->setHeader('Content-Disposition', $contentDisposition . '; filename='.$fileName);
- }
- $this->getResponse()
- ->clearBody();
- $this->getResponse()
- ->sendHeaders();
- $helper->output();
- }
- /**
- * Download sample action
- *
- */
- public function sampleAction()
- {
- $sampleId = $this->getRequest()->getParam('sample_id', 0);
- $sample = Mage::getModel('downloadable/sample')->load($sampleId);
- if ($sample->getId()) {
- $resource = '';
- $resourceType = '';
- if ($sample->getSampleType() == Mage_Downloadable_Helper_Download::LINK_TYPE_URL) {
- $resource = $sample->getSampleUrl();
- $resourceType = Mage_Downloadable_Helper_Download::LINK_TYPE_URL;
- } elseif ($sample->getSampleType() == Mage_Downloadable_Helper_Download::LINK_TYPE_FILE) {
- $resource = Mage::helper('downloadable/file')->getFilePath(
- Mage_Downloadable_Model_Sample::getBasePath(), $sample->getSampleFile()
- );
- $resourceType = Mage_Downloadable_Helper_Download::LINK_TYPE_FILE;
- }
- try {
- $this->_processDownload($resource, $resourceType);
- exit(0);
- } catch (Mage_Core_Exception $e) {
- $this->_getSession()->addError(Mage::helper('downloadable')->__('Sorry, there was an error getting requested content. Please contact the store owner.'));
- }
- }
- return $this->_redirectReferer();
- }
- /**
- * Download link's sample action
- *
- */
- public function linkSampleAction()
- {
- $linkId = $this->getRequest()->getParam('link_id', 0);
- $link = Mage::getModel('downloadable/link')->load($linkId);
- if ($link->getId()) {
- $resource = '';
- $resourceType = '';
- if ($link->getSampleType() == Mage_Downloadable_Helper_Download::LINK_TYPE_URL) {
- $resource = $link->getSampleUrl();
- $resourceType = Mage_Downloadable_Helper_Download::LINK_TYPE_URL;
- } elseif ($link->getSampleType() == Mage_Downloadable_Helper_Download::LINK_TYPE_FILE) {
- $resource = Mage::helper('downloadable/file')->getFilePath(
- Mage_Downloadable_Model_Link::getBaseSamplePath(), $link->getSampleFile()
- );
- $resourceType = Mage_Downloadable_Helper_Download::LINK_TYPE_FILE;
- }
- try {
- $this->_processDownload($resource, $resourceType);
- exit(0);
- } catch (Mage_Core_Exception $e) {
- $this->_getCustomerSession()->addError(Mage::helper('downloadable')->__('Sorry, there was an error getting requested content. Please contact the store owner.'));
- }
- }
- return $this->_redirectReferer();
- }
- /**
- * Download link action
- */
- public function linkAction()
- {
- $id = $this->getRequest()->getParam('id', 0);
- $linkPurchasedItem = Mage::getModel('downloadable/link_purchased_item')->load($id, 'link_hash');
- if (! $linkPurchasedItem->getId() ) {
- $this->_getCustomerSession()->addNotice(Mage::helper('downloadable')->__("Requested link does not exist."));
- return $this->_redirect('*/customer/products');
- }
- if (!Mage::helper('downloadable')->getIsShareable($linkPurchasedItem)) {
- $customerId = $this->_getCustomerSession()->getCustomerId();
- if (!$customerId) {
- $product = Mage::getModel('catalog/product')->load($linkPurchasedItem->getProductId());
- if ($product->getId()) {
- $notice = Mage::helper('downloadable')->__('Please log in to download your product or purchase <a href="%s">%s</a>.', $product->getProductUrl(), $product->getName());
- } else {
- $notice = Mage::helper('downloadable')->__('Please log in to download your product.');
- }
- $this->_getCustomerSession()->addNotice($notice);
- $this->_getCustomerSession()->authenticate($this);
- $this->_getCustomerSession()->setBeforeAuthUrl(Mage::getUrl('downloadable/customer/products/'),
- array('_secure' => true)
- );
- return ;
- }
- $linkPurchased = Mage::getModel('downloadable/link_purchased')->load($linkPurchasedItem->getPurchasedId());
- if ($linkPurchased->getCustomerId() != $customerId) {
- $this->_getCustomerSession()->addNotice(Mage::helper('downloadable')->__("Requested link does not exist."));
- return $this->_redirect('*/customer/products');
- }
- }
- $downloadsLeft = $linkPurchasedItem->getNumberOfDownloadsBought()
- - $linkPurchasedItem->getNumberOfDownloadsUsed();
- $status = $linkPurchasedItem->getStatus();
- if ($status == Mage_Downloadable_Model_Link_Purchased_Item::LINK_STATUS_AVAILABLE
- && ($downloadsLeft || $linkPurchasedItem->getNumberOfDownloadsBought() == 0)
- ) {
- $resource = '';
- $resourceType = '';
- if ($linkPurchasedItem->getLinkType() == Mage_Downloadable_Helper_Download::LINK_TYPE_URL) {
- $resource = $linkPurchasedItem->getLinkUrl();
- $resourceType = Mage_Downloadable_Helper_Download::LINK_TYPE_URL;
- } elseif ($linkPurchasedItem->getLinkType() == Mage_Downloadable_Helper_Download::LINK_TYPE_FILE) {
- $resource = Mage::helper('downloadable/file')->getFilePath(
- Mage_Downloadable_Model_Link::getBasePath(), $linkPurchasedItem->getLinkFile()
- );
- $resourceType = Mage_Downloadable_Helper_Download::LINK_TYPE_FILE;
- }
- try {
- $this->_processDownload($resource, $resourceType);
- $linkPurchasedItem->setNumberOfDownloadsUsed($linkPurchasedItem->getNumberOfDownloadsUsed() + 1);
- if ($linkPurchasedItem->getNumberOfDownloadsBought() != 0 && !($downloadsLeft - 1)) {
- $linkPurchasedItem->setStatus(Mage_Downloadable_Model_Link_Purchased_Item::LINK_STATUS_EXPIRED);
- }
- $linkPurchasedItem->save();
- exit(0);
- }
- catch (Exception $e) {
- $this->_getCustomerSession()->addError(
- Mage::helper('downloadable')->__('An error occurred while getting the requested content. Please contact the store owner.')
- );
- }
- } elseif ($status == Mage_Downloadable_Model_Link_Purchased_Item::LINK_STATUS_EXPIRED) {
- $this->_getCustomerSession()->addNotice(Mage::helper('downloadable')->__('The link has expired.'));
- } elseif ($status == Mage_Downloadable_Model_Link_Purchased_Item::LINK_STATUS_PENDING
- || $status == Mage_Downloadable_Model_Link_Purchased_Item::LINK_STATUS_PAYMENT_REVIEW
- ) {
- $this->_getCustomerSession()->addNotice(Mage::helper('downloadable')->__('The link is not available.'));
- } else {
- $this->_getCustomerSession()->addError(
- Mage::helper('downloadable')->__('An error occurred while getting the requested content. Please contact the store owner.')
- );
- }
- return $this->_redirect('*/customer/products');
- }
- }