1: <?php
2: /**
3: * Magento
4: *
5: * NOTICE OF LICENSE
6: *
7: * This source file is subject to the Open Software License (OSL 3.0)
8: * that is bundled with this package in the file LICENSE.txt.
9: * It is also available through the world-wide-web at this URL:
10: * http://opensource.org/licenses/osl-3.0.php
11: * If you did not receive a copy of the license and are unable to
12: * obtain it through the world-wide-web, please send an email
13: * to license@magentocommerce.com so we can send you a copy immediately.
14: *
15: * DISCLAIMER
16: *
17: * Do not edit or add to this file if you wish to upgrade Magento to newer
18: * versions in the future. If you wish to customize Magento for your
19: * needs please refer to http://www.magentocommerce.com for more information.
20: *
21: * @category Mage
22: * @package Mage_Downloadable
23: * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24: * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25: */
26:
27: /**
28: * Downloadable products price model
29: *
30: * @category Mage
31: * @package Mage_Downloadable
32: * @author Magento Core Team <core@magentocommerce.com>
33: */
34: class Mage_Downloadable_Model_Product_Price extends Mage_Catalog_Model_Product_Type_Price
35: {
36: /**
37: * Retrieve product final price
38: *
39: * @param integer $qty
40: * @param Mage_Catalog_Model_Product $product
41: * @return float
42: */
43: public function getFinalPrice($qty=null, $product)
44: {
45: if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) {
46: return $product->getCalculatedFinalPrice();
47: }
48:
49: $finalPrice = parent::getFinalPrice($qty, $product);
50:
51: /**
52: * links prices are added to base product price only if they can be purchased separately
53: */
54: if ($product->getLinksPurchasedSeparately()) {
55: if ($linksIds = $product->getCustomOption('downloadable_link_ids')) {
56: $linkPrice = 0;
57: $links = $product->getTypeInstance(true)
58: ->getLinks($product);
59: foreach (explode(',', $linksIds->getValue()) as $linkId) {
60: if (isset($links[$linkId])) {
61: $linkPrice += $links[$linkId]->getPrice();
62: }
63: }
64: $finalPrice += $linkPrice;
65: }
66: }
67:
68: $product->setData('final_price', $finalPrice);
69: return max(0, $product->getData('final_price'));
70: }
71: }
72: