Version Notes
V1.0.0 // first public release
Download this release
Release Info
Developer | Wyomind |
Extension | BotDefender_by_Lokad |
Version | 1.0.0 |
Comparing to | |
See all releases |
Version 1.0.0
- app/code/community/Wyomind/Botdefender/Block/Adminhtml/Notifications.php +59 -0
- app/code/community/Wyomind/Botdefender/Helper/Data.php +130 -0
- app/code/community/Wyomind/Botdefender/Varien/Data/Form/Element/Installation.php +40 -0
- app/code/community/Wyomind/Botdefender/etc/config.xml +77 -0
- app/code/community/Wyomind/Botdefender/etc/system.xml +124 -0
- app/code/local/Wyomind/Notificationmanager/Helper/Data.php +7 -0
- app/code/local/Wyomind/Notificationmanager/Model/Observer.php +140 -0
- app/code/local/Wyomind/Notificationmanager/Model/Resource/Setup.php +41 -0
- app/code/local/Wyomind/Notificationmanager/etc/adminhtml.xml +50 -0
- app/code/local/Wyomind/Notificationmanager/etc/config.xml +88 -0
- app/code/local/Wyomind/Notificationmanager/etc/system.xml +60 -0
- app/design/adminhtml/default/default/layout/botdefender.xml +9 -0
- app/design/frontend/default/default/layout/botdefender.xml +75 -0
- app/design/frontend/default/default/template/botdefender/bundle/catalog/product/price.phtml +268 -0
- app/design/frontend/default/default/template/botdefender/bundle/catalog/product/view/price.phtml +122 -0
- app/design/frontend/default/default/template/botdefender/catalog/product/price.phtml +430 -0
- app/etc/modules/Wyomind_Botdefender.xml +10 -0
- app/etc/modules/Wyomind_Notificationmanager.xml +15 -0
- lib/Varien/Data/Form/Element/Botdefender.php +49 -0
- lib/Varien/Data/Form/Element/Wyomindnotificationmanageradvertise.php +53 -0
- lib/Varien/Data/Form/Element/Wyomindnotificationmanagerextensionslist.php +68 -0
- package.xml +22 -0
app/code/community/Wyomind/Botdefender/Block/Adminhtml/Notifications.php
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Wyomind_Botdefender_Block_Adminhtml_Notifications extends Mage_Adminhtml_Block_Notification_Toolbar {
|
4 |
+
|
5 |
+
function __construct() {
|
6 |
+
|
7 |
+
|
8 |
+
if (version_compare(Mage::getVersion(), '1.4.0', '<')) {
|
9 |
+
|
10 |
+
if ($this->_toHtml(null) != null)
|
11 |
+
Mage::getSingleton("core/session")->addNotice($this->_toHtml(null));
|
12 |
+
}
|
13 |
+
}
|
14 |
+
|
15 |
+
function _toHtml($className = 'notification-global') {
|
16 |
+
|
17 |
+
$html = null;
|
18 |
+
$status = Mage::helper("botdefender")->apiCall();
|
19 |
+
if ($status == -2) {
|
20 |
+
$html.= "
|
21 |
+
<div class='$className'>
|
22 |
+
<span class='f-right'>
|
23 |
+
</span>
|
24 |
+
<b>BotDefender</b> : <a target='_blank' href='" . Mage::helper("botdefender")->_BOTDEFENDER_URL . "'>" . Mage::helper("botdefender")->getMessage($status) . "</a>
|
25 |
+
|
26 |
+
then <a href='" . Mage::helper("adminhtml")->getUrl("adminhtml/system_config/edit/section/botdefender") . "'> Complete the BotDefender installation</a>
|
27 |
+
</div>";
|
28 |
+
} elseif ($status < 0 && Mage::getStoreConfig("botdefender/settings/enabled")) {
|
29 |
+
$html.= "
|
30 |
+
<div class='$className'>
|
31 |
+
<span class='f-right'>
|
32 |
+
</span>
|
33 |
+
<b>BotDefender</b> : " . Mage::helper("botdefender")->getMessage($status) . "
|
34 |
+
<br><a href='" . Mage::helper("adminhtml")->getUrl("adminhtml/system_config/edit/section/botdefender") . "'> Complete the BotDefender installation</a>
|
35 |
+
</div>";
|
36 |
+
} else if (!Mage::getStoreConfig("botdefender/settings/enabled")) {
|
37 |
+
$html.= "
|
38 |
+
<div class='$className'>
|
39 |
+
<span class='f-right'>
|
40 |
+
</span>
|
41 |
+
<b>BotDefender is disabled</b>, your data are not protected!
|
42 |
+
<br><a href='" . Mage::helper("adminhtml")->getUrl("adminhtml/system_config/edit/section/botdefender") . "'> Enable BotDefender</a>
|
43 |
+
</div>";
|
44 |
+
} else if (Mage::getStoreConfig("botdefender/settings/debug") && Mage::getStoreConfig("botdefender/settings/enabled")) {
|
45 |
+
$html.= "
|
46 |
+
|
47 |
+
<div class='$className'>
|
48 |
+
<span class='f-right'>
|
49 |
+
</span>
|
50 |
+
<b>BotDefender debugger is active!</b>
|
51 |
+
<br><a href='" . Mage::helper("adminhtml")->getUrl("adminhtml/system_config/edit/section/botdefender") . "'> Disable the debugger</a>
|
52 |
+
</div>";
|
53 |
+
}
|
54 |
+
|
55 |
+
|
56 |
+
return $html;
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
app/code/community/Wyomind/Botdefender/Helper/Data.php
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Wyomind_Botdefender_Helper_Data extends Mage_Core_Helper_Data {
|
4 |
+
|
5 |
+
public $_API_ERROR = "BotDefender API is temporary unavailable.";
|
6 |
+
public $_CURL_ERROR = "Unable to connect the BotDefender API through CURL.";
|
7 |
+
public $_CURL_DISABLED = "CURL.dll must be enabled to allow the API connection!";
|
8 |
+
public $_MISSING_CREDENTIALS = "Create your FREE BotDefender account now!";
|
9 |
+
public $_AUTHENTIFICATION_ERROR = "API connection failed.<br/> Please check your credentials!";
|
10 |
+
public $_BAD_REQUEST = "BAD REQUEST";
|
11 |
+
public $_CONNECTION_SUCCEEDED = "Installation complete.";
|
12 |
+
public $_BOTDEFENDER_API = "https://bdapi.lokad.com/rest/stub/";
|
13 |
+
public $_BOTDEFENDER_URL = "https://botdefender.lokad.com/";
|
14 |
+
public $_error = false;
|
15 |
+
|
16 |
+
function apiCall($productPriceId = false, $price = 0) {
|
17 |
+
|
18 |
+
// CURL DISABLED
|
19 |
+
if (!function_exists('curl_version')) {
|
20 |
+
$this->_error = true;
|
21 |
+
return -4;
|
22 |
+
}
|
23 |
+
$username = trim(Mage::getStoreConfig("botdefender/settings/lokad_user"));
|
24 |
+
$password = trim(Mage::getStoreConfig("botdefender/settings/lokad_password"));
|
25 |
+
// NO CREDENTIALS
|
26 |
+
|
27 |
+
if ($username == null || $password == null) {
|
28 |
+
$this->_error = true;
|
29 |
+
return -2;
|
30 |
+
}
|
31 |
+
$service_url = $this->_BOTDEFENDER_API;
|
32 |
+
if ($productPriceId)
|
33 |
+
$service_url .=$productPriceId . "/" . $price;
|
34 |
+
else
|
35 |
+
$this->_BAD_REQUEST = $this->_CONNECTION_SUCCEEDED;
|
36 |
+
|
37 |
+
$curl = curl_init($service_url);
|
38 |
+
curl_setopt($curl, CURLOPT_USERPWD, $username . ':' . $password);
|
39 |
+
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
40 |
+
$curl_response = curl_exec($curl);
|
41 |
+
$info = curl_getinfo($curl);
|
42 |
+
|
43 |
+
//print_r($info);
|
44 |
+
//echo $curl_response;
|
45 |
+
|
46 |
+
|
47 |
+
if ($curl_response === false) {
|
48 |
+
curl_close($curl);
|
49 |
+
|
50 |
+
$this->_error = true;
|
51 |
+
return -3;
|
52 |
+
}
|
53 |
+
|
54 |
+
if (!curl_errno($curl)) {
|
55 |
+
curl_close($curl);
|
56 |
+
|
57 |
+
|
58 |
+
|
59 |
+
switch ($info['http_code']) {
|
60 |
+
case "500":
|
61 |
+
$this->_error = true;
|
62 |
+
return -5;
|
63 |
+
case "400":
|
64 |
+
// BAD REQUEST
|
65 |
+
$this->_error = true;
|
66 |
+
return 0;
|
67 |
+
case "401":
|
68 |
+
// ANTHENTIFICATION ERROR
|
69 |
+
$this->_error = true;
|
70 |
+
return -1;
|
71 |
+
break;
|
72 |
+
case "200":
|
73 |
+
// OK
|
74 |
+
$this->_error = false;
|
75 |
+
return $curl_response;
|
76 |
+
break;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
}
|
80 |
+
|
81 |
+
public function getMessage($status) {
|
82 |
+
|
83 |
+
switch ($status) {
|
84 |
+
case "-5": return $this->_AUTHENTIFICATION_ERROR;
|
85 |
+
break;
|
86 |
+
case "-4": return $this->_CURL_ERROR;
|
87 |
+
break;
|
88 |
+
case "-3": return $this->_CURL_DISABLED;
|
89 |
+
break;
|
90 |
+
case "-2": return $this->_MISSING_CREDENTIALS;
|
91 |
+
break;
|
92 |
+
case "-1": return $this->_AUTHENTIFICATION_ERROR;
|
93 |
+
break;
|
94 |
+
case "0": return $this->_BAD_REQUEST;
|
95 |
+
break;
|
96 |
+
default :
|
97 |
+
return $status;
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
function cleanArray($var) {
|
102 |
+
if ($var != null && $var != "")
|
103 |
+
return $var;
|
104 |
+
}
|
105 |
+
|
106 |
+
function getData($htmlOutput, $_id, $_storeId, $_price_id) {
|
107 |
+
if (Mage::getStoreConfig("botdefender/settings/enabled")) {
|
108 |
+
$_botDefenderId = $_id . "_" . $_storeId . "_" . $_price_id;
|
109 |
+
preg_match("/([0-9.,]+)/", $htmlOutput, $matches);
|
110 |
+
$curl_response = $this->apiCall($_botDefenderId, $matches[0]);
|
111 |
+
$ips = array_filter(explode(",", Mage::getStoreConfig("botdefender/settings/ips")), array("Wyomind_Botdefender_Helper_Data", "cleanArray"));
|
112 |
+
|
113 |
+
//debug enabled and ips match
|
114 |
+
if (!count($ips) || in_array(Mage::helper('core/http')->getRemoteAddr(), $ips))
|
115 |
+
if (Mage::getStoreConfig("botdefender/settings/debug", $_storeId))
|
116 |
+
echo "<div style='border:1px dotted red; color:red;padding:10px;'><b>BotDefender</b> <br>" . $this->_BOTDEFENDER_API . "" . $_botDefenderId . "/" . $matches[0] . " <br> Response : " . $this->getMessage($curl_response) . "</div>";
|
117 |
+
// if error return skip the api response
|
118 |
+
if ($this->_error) {
|
119 |
+
//log error
|
120 |
+
if (Mage::getStoreConfig("botdefender/settings/log"))
|
121 |
+
Mage::log("\n>>" . $this->_BOTDEFENDER_API . "\n*ID: " . $_botDefenderId . "\n*Price: " . $matches[0] . "\n*status: " . $curl_response . "\n*message: " . $this->getMessage($curl_response) . "\n\n", null, "BotDefender.log");
|
122 |
+
return $htmlOutput;
|
123 |
+
}
|
124 |
+
return str_replace($matches[0], $curl_response, $htmlOutput);
|
125 |
+
}
|
126 |
+
else
|
127 |
+
return $htmlOutput;
|
128 |
+
}
|
129 |
+
|
130 |
+
}
|
app/code/community/Wyomind/Botdefender/Varien/Data/Form/Element/Installation.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
--
|
2 |
+
<?php
|
3 |
+
|
4 |
+
class Varien_Data_Form_Element_Installation extends Varien_Data_Form_Element_Abstract {
|
5 |
+
|
6 |
+
public function __construct($attributes = array()) {
|
7 |
+
parent::__construct($attributes);
|
8 |
+
$this->setType('link');
|
9 |
+
}
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Generates element html
|
13 |
+
*
|
14 |
+
* @return string
|
15 |
+
*/
|
16 |
+
public function getElementHtml() {
|
17 |
+
|
18 |
+
$apiCall = Mage::helper("botdefender")->apiCall();
|
19 |
+
$message = Mage::helper('botdefender')->getMessage($apiCall);
|
20 |
+
$html = null;
|
21 |
+
|
22 |
+
$html .= '<a id="' . $this->getHtmlId() . '" href="' . Mage::helper("botdefender")->_BOTDEFENDER_URL . '" target="_blank">' . $message . "</a>\n";
|
23 |
+
$html .= $this->getAfterElementHtml();
|
24 |
+
return $html;
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Prepare array of anchor attributes
|
29 |
+
*
|
30 |
+
* @return array
|
31 |
+
*/
|
32 |
+
public function getHtmlAttributes() {
|
33 |
+
return array('charset', 'coords', 'href', 'hreflang', 'rel', 'rev', 'name',
|
34 |
+
'shape', 'target', 'accesskey', 'class', 'dir', 'lang', 'style',
|
35 |
+
'tabindex', 'title', 'xml:lang', 'onblur', 'onclick', 'ondblclick',
|
36 |
+
'onfocus', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover',
|
37 |
+
'onmouseup', 'onkeydown', 'onkeypress', 'onkeyup');
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
app/code/community/Wyomind/Botdefender/etc/config.xml
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
|
3 |
+
<config>
|
4 |
+
<modules>
|
5 |
+
<Wyomind_Botdefender>
|
6 |
+
<version>1.0.0</version>
|
7 |
+
</Wyomind_Botdefender>
|
8 |
+
</modules>
|
9 |
+
<default>
|
10 |
+
<botdefender>
|
11 |
+
<settings>
|
12 |
+
<enabled>1</enabled>
|
13 |
+
<debug>0</debug>
|
14 |
+
</settings>
|
15 |
+
</botdefender>
|
16 |
+
</default>
|
17 |
+
<frontend>
|
18 |
+
<layout>
|
19 |
+
<updates>
|
20 |
+
<botdefender>
|
21 |
+
<file>botdefender.xml</file>
|
22 |
+
</botdefender>
|
23 |
+
</updates>
|
24 |
+
</layout>
|
25 |
+
|
26 |
+
</frontend>
|
27 |
+
<adminhtml>
|
28 |
+
<layout>
|
29 |
+
<updates>
|
30 |
+
<botdefender>
|
31 |
+
<file>botdefender.xml</file>
|
32 |
+
</botdefender>
|
33 |
+
</updates>
|
34 |
+
</layout>
|
35 |
+
<acl>
|
36 |
+
<resources>
|
37 |
+
<all>
|
38 |
+
<title>Allow Everything</title>
|
39 |
+
</all>
|
40 |
+
<admin>
|
41 |
+
<children>
|
42 |
+
<system>
|
43 |
+
<children>
|
44 |
+
<config>
|
45 |
+
<children>
|
46 |
+
<botdefender>
|
47 |
+
<title>Bot Defender</title>
|
48 |
+
</botdefender>
|
49 |
+
</children>
|
50 |
+
</config>
|
51 |
+
</children>
|
52 |
+
</system>
|
53 |
+
</children>
|
54 |
+
</admin>
|
55 |
+
</resources>
|
56 |
+
</acl>
|
57 |
+
</adminhtml>
|
58 |
+
<global>
|
59 |
+
<blocks>
|
60 |
+
<botdefender>
|
61 |
+
<class>Wyomind_Botdefender_Block</class>
|
62 |
+
</botdefender>
|
63 |
+
</blocks>
|
64 |
+
<resources>
|
65 |
+
<botdefender_setup>
|
66 |
+
<setup>
|
67 |
+
<module>Wyomind_Botdefender</module>
|
68 |
+
</setup>
|
69 |
+
</botdefender_setup>
|
70 |
+
</resources>
|
71 |
+
<helpers>
|
72 |
+
<botdefender>
|
73 |
+
<class>Wyomind_Botdefender_Helper</class>
|
74 |
+
</botdefender>
|
75 |
+
</helpers>
|
76 |
+
</global>
|
77 |
+
</config>
|
app/code/community/Wyomind/Botdefender/etc/system.xml
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<tabs>
|
4 |
+
<WYOMIND translate="label">
|
5 |
+
<label>WYOMIND</label>
|
6 |
+
<sort_order>1000000</sort_order>
|
7 |
+
</WYOMIND>
|
8 |
+
</tabs>
|
9 |
+
<sections>
|
10 |
+
<botdefender translate="label">
|
11 |
+
<label><![CDATA[<div style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHMAAAAlCAYAAABxlNYMAAAACXBIWXMAAAsTAAALEwEAmpwYAAA9R2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMTQgNzkuMTUxNDgxLCAyMDEzLzAzLzEzLTEyOjA5OjE1ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxMy0xMS0wOFQwOTowNjozMCswMTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDEzLTExLTA4VDA5OjA4OjEyKzAxOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxMy0xMS0wOFQwOTowODoxMiswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDpjM2Y2ODFkNC05MDkxLWE4NDQtOGMwNi02YTkyMGFhY2U1NDE8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6OUVBMkZCNzg0NzAwMTFFM0I5RTFCQzBFMDI3NkQxQzQ8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6OUVBMkZCNzU0NzAwMTFFM0I5RTFCQzBFMDI3NkQxQzQ8L3N0UmVmOmluc3RhbmNlSUQ+CiAgICAgICAgICAgIDxzdFJlZjpkb2N1bWVudElEPnhtcC5kaWQ6OUVBMkZCNzY0NzAwMTFFM0I5RTFCQzBFMDI3NkQxQzQ8L3N0UmVmOmRvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo5RUEyRkI3ODQ3MDAxMUUzQjlFMUJDMEUwMjc2RDFDNDwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NDk2NjQ1NjUtZWE1YS1jMzQ1LTg5ZjEtMDg5ZmEyYmVmYWY3PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDEzLTExLTA4VDA5OjA4OjEyKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpjM2Y2ODFkNC05MDkxLWE4NDQtOGMwNi02YTkyMGFhY2U1NDE8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTMtMTEtMDhUMDk6MDg6MTIrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPgogICAgICAgICAgICA8cmRmOkJhZz4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxwaG90b3Nob3A6TGF5ZXJOYW1lPmJ5PC9waG90b3Nob3A6TGF5ZXJOYW1lPgogICAgICAgICAgICAgICAgICA8cGhvdG9zaG9wOkxheWVyVGV4dD5ieTwvcGhvdG9zaG9wOkxheWVyVGV4dD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgICAgICAgPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGk+eG1wLmRpZDo4RDM5ODFFOTQ2RkYxMUUzOUYxMkQ1NjY3OTNGQTg4NzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpCYWc+CiAgICAgICAgIDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTE1PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjM3PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6ZWqRaAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAABXfSURBVHja7Jt7nFxVle+/a59zqruqu5J0Og/SLzomoAlxEjMJOEAgCGhUQEQRvMOATDJ6ITwSFBCQKzjgqBdkEGbigGMIkOEqaHD0joC8wyMPSHglIYa8yLuT7nR3dXV3VZ2z1/xxdnVXN93hIfF6P5+sz6c+59SpffZjrb3W+q21dgkI8QdA3UcawXwS9CjQFJAFWQMsB90Sty+2/fPR6gv+iimHVZLpDhF959iqHgoEfhfWJlDp/c1IiNWyeOoFBVHwe5cgCljBYhEp5Umxg7itFBJ4QSfd3ZbIBpQH/eahoIGCGBTFDMKi0sd91qKgngFjQIWIEImERL4cI11ERolE4vkqJDyhUB6iLSPx+40xHGQecBHoCDdU6e97gZ8DtwD7OER/UWRK7ieAPAlyPcgIsMQfLbkyEuRq4Clg+iH2/WVRUTNHgzwAOjkWHASe2Vhu5OXu0O70janpiuzRoI3OLE8CeQj0JGDTITb+RQlTrwaKgtw2raby0h+fOm7lkcPKx6xvyg6tTvp2bUf+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);
|
12 |
+
background-repeat: no-repeat;
|
13 |
+
height: 38px; width:120px;"></div>]]></label>
|
14 |
+
<tab>WYOMIND</tab>
|
15 |
+
<frontend_type>text</frontend_type>
|
16 |
+
<sort_order>1010</sort_order>
|
17 |
+
<show_in_default>1</show_in_default>
|
18 |
+
<show_in_website>1</show_in_website>
|
19 |
+
<show_in_store>1</show_in_store>
|
20 |
+
<groups>
|
21 |
+
|
22 |
+
<settings translate="label">
|
23 |
+
<label>Settings</label>
|
24 |
+
<frontend_type>text</frontend_type>
|
25 |
+
<sort_order>110</sort_order>
|
26 |
+
<show_in_default>1</show_in_default>
|
27 |
+
<show_in_website>1</show_in_website>
|
28 |
+
<show_in_store>1</show_in_store>
|
29 |
+
<fields>
|
30 |
+
<botdefender_link translate="label comment" href="https://botdefender.lokad.com/">
|
31 |
+
<label></label>
|
32 |
+
<frontend_type>Botdefender</frontend_type>
|
33 |
+
<sort_order>0</sort_order>
|
34 |
+
<comment>
|
35 |
+
<![CDATA[<span class="notice"></span>]]>
|
36 |
+
</comment>
|
37 |
+
<show_in_default>1</show_in_default>
|
38 |
+
<show_in_website>0</show_in_website>
|
39 |
+
<show_in_store>0</show_in_store>
|
40 |
+
</botdefender_link>
|
41 |
+
<enabled translate="label comment">
|
42 |
+
<label>Enabled</label>
|
43 |
+
<frontend_type>select</frontend_type>
|
44 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
45 |
+
<sort_order>1</sort_order>
|
46 |
+
<comment>
|
47 |
+
|
48 |
+
</comment>
|
49 |
+
<show_in_default>1</show_in_default>
|
50 |
+
<show_in_website>1</show_in_website>
|
51 |
+
<show_in_store>1</show_in_store>
|
52 |
+
</enabled>
|
53 |
+
<lokad_user translate="label comment">
|
54 |
+
<label>BotDefender username</label>
|
55 |
+
<frontend_type>text</frontend_type>
|
56 |
+
<sort_order>2</sort_order>
|
57 |
+
<comment>
|
58 |
+
<![CDATA[<span class="notice">API credentials [username]</span>]]>
|
59 |
+
</comment>
|
60 |
+
<show_in_default>1</show_in_default>
|
61 |
+
<show_in_website>0</show_in_website>
|
62 |
+
<show_in_store>0</show_in_store>
|
63 |
+
</lokad_user>
|
64 |
+
<lokad_password translate="label comment">
|
65 |
+
<label>BotDefender password</label>
|
66 |
+
<frontend_type>password</frontend_type>
|
67 |
+
<sort_order>3</sort_order>
|
68 |
+
<comment>
|
69 |
+
<![CDATA[<span class="notice">API credentials [password]</span>]]>
|
70 |
+
</comment>
|
71 |
+
<show_in_default>1</show_in_default>
|
72 |
+
<show_in_website>0</show_in_website>
|
73 |
+
<show_in_store>0</show_in_store>
|
74 |
+
</lokad_password>
|
75 |
+
<debug translate="label comment">
|
76 |
+
<label>Debug mode enabled</label>
|
77 |
+
<frontend_type>select</frontend_type>
|
78 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
79 |
+
<sort_order>4</sort_order>
|
80 |
+
<comment>
|
81 |
+
<![CDATA[<span class="notice" style="color:red;">Do not use in production</span>]]>
|
82 |
+
</comment>
|
83 |
+
<show_in_default>1</show_in_default>
|
84 |
+
<show_in_website>0</show_in_website>
|
85 |
+
<show_in_store>0</show_in_store>
|
86 |
+
</debug>
|
87 |
+
<ips translate="label comment">
|
88 |
+
<label>Allowed IPs (comma separated)</label>
|
89 |
+
<frontend_type>text</frontend_type>
|
90 |
+
<depends>
|
91 |
+
<debug>1</debug>
|
92 |
+
</depends>
|
93 |
+
<sort_order>5</sort_order>
|
94 |
+
<comment>
|
95 |
+
<![CDATA[<span class="notice" style="color:red;">Leave empty for access from any location</span>]]>
|
96 |
+
</comment>
|
97 |
+
<show_in_default>1</show_in_default>
|
98 |
+
<show_in_website>0</show_in_website>
|
99 |
+
<show_in_store>0</show_in_store>
|
100 |
+
</ips>
|
101 |
+
<log translate="label comment">
|
102 |
+
<label>Enable log file</label>
|
103 |
+
<frontend_type>select</frontend_type>
|
104 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
105 |
+
<sort_order>46</sort_order>
|
106 |
+
<comment>
|
107 |
+
<![CDATA[<span class="notice" style="color:red;">Log file available under var/log/BotDefender.log if general log settings are enabled</span>]]>
|
108 |
+
</comment>
|
109 |
+
<show_in_default>1</show_in_default>
|
110 |
+
<show_in_website>0</show_in_website>
|
111 |
+
<show_in_store>0</show_in_store>
|
112 |
+
</log>
|
113 |
+
|
114 |
+
|
115 |
+
</fields>
|
116 |
+
</settings>
|
117 |
+
|
118 |
+
</groups>
|
119 |
+
</botdefender>
|
120 |
+
|
121 |
+
</sections>
|
122 |
+
</config>
|
123 |
+
|
124 |
+
|
app/code/local/Wyomind/Notificationmanager/Helper/Data.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Wyomind_Notificationmanager_Helper_Data extends Mage_Core_Helper_Data
|
4 |
+
{
|
5 |
+
|
6 |
+
|
7 |
+
}
|
app/code/local/Wyomind/Notificationmanager/Model/Observer.php
ADDED
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Wyomind_Notificationmanager_FeedReader extends Mage_AdminNotification_Model_Feed {
|
4 |
+
|
5 |
+
public function getFeedUrl() {
|
6 |
+
|
7 |
+
Mage::getSingleton('admin/session')->getData();
|
8 |
+
$url = Mage::getStoreConfig("web/secure/base_url");
|
9 |
+
$version = Mage::getConfig()->getNode("modules/Wyomind_Notificationmanager")->version;
|
10 |
+
|
11 |
+
$lastcheck = $this->getLastUpdate();
|
12 |
+
|
13 |
+
$rss_url = 'www.wyomind.com';
|
14 |
+
|
15 |
+
return "http://$rss_url/rss/new_releases.php?domain=$url&version=$version&lastcheck=$lastcheck&now=" . time();
|
16 |
+
}
|
17 |
+
|
18 |
+
public function getLastUpdate() {
|
19 |
+
return Mage::getStoreConfig("notificationmanager/notificationmanager/lastcheck");
|
20 |
+
}
|
21 |
+
|
22 |
+
public function setLastUpdate() {
|
23 |
+
Mage::getConfig()->saveConfig("notificationmanager/notificationmanager/lastcheck", time(), "default", "0");
|
24 |
+
Mage::getConfig()->cleanCache();
|
25 |
+
return $this;
|
26 |
+
}
|
27 |
+
|
28 |
+
}
|
29 |
+
|
30 |
+
class Wyomind_Notificationmanager_Item {
|
31 |
+
|
32 |
+
const SEVERITY_CRITICAL = 1;
|
33 |
+
const SEVERITY_MAJOR = 2;
|
34 |
+
const SEVERITY_MINOR = 3;
|
35 |
+
const SEVERITY_NOTICE = 4;
|
36 |
+
|
37 |
+
var $pubDate = 0;
|
38 |
+
var $title = "";
|
39 |
+
var $description = "";
|
40 |
+
var $severity = Wyomind_Notificationmanager_Item::SEVERITY_NOTICE;
|
41 |
+
var $link = "";
|
42 |
+
|
43 |
+
public function __contruct() {
|
44 |
+
|
45 |
+
}
|
46 |
+
|
47 |
+
public function Wyomind_Notificationmanager_Item() {
|
48 |
+
$this->__contruct();
|
49 |
+
}
|
50 |
+
|
51 |
+
public function setPubDate($date) {
|
52 |
+
$this->pubDate = $date;
|
53 |
+
}
|
54 |
+
|
55 |
+
public function setTitle($title) {
|
56 |
+
$this->title = $title;
|
57 |
+
}
|
58 |
+
|
59 |
+
public function setDescription($desc) {
|
60 |
+
$this->description = $desc;
|
61 |
+
}
|
62 |
+
|
63 |
+
public function setSeverity($sev) {
|
64 |
+
$this->severity = $sev;
|
65 |
+
}
|
66 |
+
|
67 |
+
public function setLink($link) {
|
68 |
+
$this->link = $link;
|
69 |
+
}
|
70 |
+
|
71 |
+
public function getPubDate() {
|
72 |
+
return $this->pubDate;
|
73 |
+
}
|
74 |
+
|
75 |
+
public function getDescription() {
|
76 |
+
return $this->description;
|
77 |
+
}
|
78 |
+
|
79 |
+
public function getTitle() {
|
80 |
+
return $this->title;
|
81 |
+
}
|
82 |
+
|
83 |
+
public function getSeverity() {
|
84 |
+
return $this->severity;
|
85 |
+
}
|
86 |
+
|
87 |
+
public function getLink() {
|
88 |
+
return $this->link;
|
89 |
+
}
|
90 |
+
|
91 |
+
public function toNotifier() {
|
92 |
+
$notify = Mage::getModel('adminnotification/inbox');
|
93 |
+
$notify->setUrl($this->getLink());
|
94 |
+
$notify->setDescription($this->getDescription());
|
95 |
+
$notify->setTitle($this->getTitle());
|
96 |
+
$notify->setSeverity($this->getSeverity());
|
97 |
+
$notify->setDateAdded($this->getPubDate());
|
98 |
+
$notify->save();
|
99 |
+
}
|
100 |
+
|
101 |
+
}
|
102 |
+
|
103 |
+
class Wyomind_Notificationmanager_Model_Observer {
|
104 |
+
|
105 |
+
public function observe($user) {
|
106 |
+
|
107 |
+
$model = new Wyomind_Notificationmanager_FeedReader();
|
108 |
+
|
109 |
+
$date = $model->getLastUpdate();
|
110 |
+
$exts = Mage::getStoreConfig("notificationmanager/notificationmanager/extensions");
|
111 |
+
$exts = $exts != null ? explode(',', $exts) : array();
|
112 |
+
|
113 |
+
if ($date != "") {
|
114 |
+
|
115 |
+
//$model->checkUpdate();
|
116 |
+
$rss = $model->getFeedData();
|
117 |
+
if ($rss != NULL) {
|
118 |
+
$items = $rss->xpath('/rss/channel/item');
|
119 |
+
if ($items) {
|
120 |
+
foreach ($items as $item) {
|
121 |
+
$infos = $item->children();
|
122 |
+
$notification = new Wyomind_Notificationmanager_Item();
|
123 |
+
$notification->setTitle($infos->title);
|
124 |
+
$notification->setLink($infos->link);
|
125 |
+
$notification->setSeverity($infos->severity);
|
126 |
+
$notification->setDescription($infos->description);
|
127 |
+
$notification->setPubDate(date('Y-m-d H:i:s', (int) $infos->pubDate));
|
128 |
+
|
129 |
+
if ($infos->identifier == "Global" || (in_array($infos->identifier, $exts) && Mage::getConfig()->getModuleConfig('Wyomind_'.$infos->identifier)->is('active', 'true'))) {
|
130 |
+
$notification->toNotifier();
|
131 |
+
}
|
132 |
+
}
|
133 |
+
}
|
134 |
+
}
|
135 |
+
}
|
136 |
+
|
137 |
+
$model->setLastUpdate();
|
138 |
+
}
|
139 |
+
|
140 |
+
}
|
app/code/local/Wyomind/Notificationmanager/Model/Resource/Setup.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Wyomind_Notificationmanager_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup
|
4 |
+
{
|
5 |
+
public function applyUpdates()
|
6 |
+
{
|
7 |
+
if (!Mage::isInstalled()) {
|
8 |
+
$dir = "app/code/local/Wyomind/";
|
9 |
+
$ret = array();
|
10 |
+
if (is_dir($dir)) {
|
11 |
+
if (($dh = opendir($dir)) != false) {
|
12 |
+
while (($file = readdir($dh)) !== false) {
|
13 |
+
if (is_dir($dir.$file) && $file != "." && $file != "..") {
|
14 |
+
$enabled = Mage::getConfig()->getModuleConfig('Wyomind_'.ucfirst($namespace = strtolower($file)))->is('active', 'true');
|
15 |
+
if ($enabled)
|
16 |
+
$ret[] = $file;
|
17 |
+
}
|
18 |
+
}
|
19 |
+
closedir($dh);
|
20 |
+
}
|
21 |
+
}
|
22 |
+
$dir = "app/code/community/Wyomind/";
|
23 |
+
if (is_dir($dir)) {
|
24 |
+
if (($dh = opendir($dir)) != false) {
|
25 |
+
while (($file = readdir($dh)) !== false) {
|
26 |
+
if (is_dir($dir.$file) && $file != "." && $file != "..") {
|
27 |
+
$enabled = Mage::getConfig()->getModuleConfig('Wyomind_'.ucfirst($namespace = strtolower($file)))->is('active', 'true');
|
28 |
+
if ($enabled)
|
29 |
+
$ret[] = $file;
|
30 |
+
}
|
31 |
+
}
|
32 |
+
closedir($dh);
|
33 |
+
}
|
34 |
+
}
|
35 |
+
Mage::getConfig()->saveConfig("notificationmanager/notificationmanager/extensions",implode(',',$ret), "default", "0");
|
36 |
+
Mage::getConfig()->cleanCache();
|
37 |
+
}
|
38 |
+
|
39 |
+
return parent::applyUpdates();
|
40 |
+
}
|
41 |
+
}
|
app/code/local/Wyomind/Notificationmanager/etc/adminhtml.xml
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
|
4 |
+
<acl>
|
5 |
+
<resources>
|
6 |
+
<admin>
|
7 |
+
<children>
|
8 |
+
<catalog>
|
9 |
+
<children>
|
10 |
+
<notificationmanager translate="title" module="notificationmanager">
|
11 |
+
<title>Notification manager</title>
|
12 |
+
</notificationmanager>
|
13 |
+
</children>
|
14 |
+
</catalog>
|
15 |
+
<system>
|
16 |
+
<children>
|
17 |
+
<config>
|
18 |
+
<children>
|
19 |
+
<notificationmanager>
|
20 |
+
<title>Notification manager</title>
|
21 |
+
</notificationmanager>
|
22 |
+
</children>
|
23 |
+
</config>
|
24 |
+
</children>
|
25 |
+
</system>
|
26 |
+
</children>
|
27 |
+
</admin>
|
28 |
+
</resources>
|
29 |
+
</acl>
|
30 |
+
|
31 |
+
|
32 |
+
|
33 |
+
<translate>
|
34 |
+
<modules>
|
35 |
+
<Wyomind_Notificationmanager>
|
36 |
+
<files>
|
37 |
+
<default>Wyomind_Notificationmanager.csv</default>
|
38 |
+
</files>
|
39 |
+
</Wyomind_Notificationmanager>
|
40 |
+
</modules>
|
41 |
+
</translate>
|
42 |
+
<layout>
|
43 |
+
<updates>
|
44 |
+
<notificationmanager>
|
45 |
+
<file>notificationmanager.xml</file>
|
46 |
+
</notificationmanager>
|
47 |
+
</updates>
|
48 |
+
</layout>
|
49 |
+
|
50 |
+
</config>
|
app/code/local/Wyomind/Notificationmanager/etc/config.xml
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* @category Wyomind
|
5 |
+
* @package Wyomind_Notificationmanager
|
6 |
+
* @license http://Wyomind.com
|
7 |
+
*/
|
8 |
+
-->
|
9 |
+
<config>
|
10 |
+
<modules>
|
11 |
+
<Wyomind_Notificationmanager>
|
12 |
+
<version>1.0.13</version>
|
13 |
+
</Wyomind_Notificationmanager>
|
14 |
+
</modules>
|
15 |
+
<default>
|
16 |
+
<notificationmanager>
|
17 |
+
<notificationmanager>
|
18 |
+
<version>1.0.13</version>
|
19 |
+
</notificationmanager>
|
20 |
+
</notificationmanager>
|
21 |
+
</default>
|
22 |
+
<frontend>
|
23 |
+
<routers>
|
24 |
+
<notificationmanager>
|
25 |
+
<use>standard</use>
|
26 |
+
<args>
|
27 |
+
<module>Wyomind_Notificationmanager</module>
|
28 |
+
<frontName>notificationmanager</frontName>
|
29 |
+
</args>
|
30 |
+
</notificationmanager>
|
31 |
+
</routers>
|
32 |
+
</frontend>
|
33 |
+
<admin>
|
34 |
+
<routers>
|
35 |
+
<notificationmanager>
|
36 |
+
<use>admin</use>
|
37 |
+
<args>
|
38 |
+
<module>Wyomind_Notificationmanager</module>
|
39 |
+
<frontName>notificationmanager</frontName>
|
40 |
+
</args>
|
41 |
+
</notificationmanager>
|
42 |
+
</routers>
|
43 |
+
</admin>
|
44 |
+
<global>
|
45 |
+
<resources>
|
46 |
+
<notificationmanager_setup>
|
47 |
+
<setup>
|
48 |
+
<module>Wyomind_Notificationmanager</module>
|
49 |
+
<class>Wyomind_Notificationmanager_Model_Resource_Setup</class>
|
50 |
+
</setup>
|
51 |
+
<connection>
|
52 |
+
<use>core_setup</use>
|
53 |
+
</connection>
|
54 |
+
</notificationmanager_setup>
|
55 |
+
<notificationmanager_write>
|
56 |
+
<connection>
|
57 |
+
<use>core_write</use>
|
58 |
+
</connection>
|
59 |
+
</notificationmanager_write>
|
60 |
+
<notificationmanager_read>
|
61 |
+
<connection>
|
62 |
+
<use>core_read</use>
|
63 |
+
</connection>
|
64 |
+
</notificationmanager_read>
|
65 |
+
</resources>
|
66 |
+
<helpers>
|
67 |
+
<notificationmanager>
|
68 |
+
<class>Wyomind_Notificationmanager_Helper</class>
|
69 |
+
</notificationmanager>
|
70 |
+
</helpers>
|
71 |
+
<models>
|
72 |
+
<notificationmanager>
|
73 |
+
<class>Wyomind_Notificationmanager_Model</class>
|
74 |
+
</notificationmanager>
|
75 |
+
</models>
|
76 |
+
<events>
|
77 |
+
<admin_user_authenticate_after>
|
78 |
+
<observers>
|
79 |
+
<wyomind_notificationmanager_observer>
|
80 |
+
<type>singleton</type>
|
81 |
+
<class>notificationmanager/observer</class>
|
82 |
+
<method>observe</method>
|
83 |
+
</wyomind_notificationmanager_observer>
|
84 |
+
</observers>
|
85 |
+
</admin_user_authenticate_after>
|
86 |
+
</events>
|
87 |
+
</global>
|
88 |
+
</config>
|
app/code/local/Wyomind/Notificationmanager/etc/system.xml
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<tabs>
|
4 |
+
<WYOMIND translate="label">
|
5 |
+
<label>WYOMIND</label>
|
6 |
+
<sort_order>1000000</sort_order>
|
7 |
+
</WYOMIND>
|
8 |
+
</tabs>
|
9 |
+
<sections>
|
10 |
+
<notificationmanager translate="label">
|
11 |
+
<label>Notification Manager</label>
|
12 |
+
<tab>WYOMIND</tab>
|
13 |
+
<frontend_type>text</frontend_type>
|
14 |
+
<sort_order>999</sort_order>
|
15 |
+
<show_in_default>1</show_in_default>
|
16 |
+
<show_in_website>1</show_in_website>
|
17 |
+
<show_in_store>1</show_in_store>
|
18 |
+
<groups>
|
19 |
+
<notificationmanager translate="label">
|
20 |
+
<label>Notification Manager</label>
|
21 |
+
<frontend_type>text</frontend_type>
|
22 |
+
<sort_order>100</sort_order>
|
23 |
+
<show_in_default>1</show_in_default>
|
24 |
+
<show_in_website>1</show_in_website>
|
25 |
+
<show_in_store>1</show_in_store>
|
26 |
+
<fields>
|
27 |
+
<version translate="label comment">
|
28 |
+
<label>Version</label>
|
29 |
+
<frontend_type>link</frontend_type>
|
30 |
+
<sort_order>2</sort_order>
|
31 |
+
<show_in_default>1</show_in_default>
|
32 |
+
<show_in_website>0</show_in_website>
|
33 |
+
<show_in_store>0</show_in_store>
|
34 |
+
</version>
|
35 |
+
<extensions translate="label comment">
|
36 |
+
<label>Receive notifications for</label>
|
37 |
+
<frontend_type>WyomindNotificationManagerExtensionsList</frontend_type>
|
38 |
+
<sort_order>3</sort_order>
|
39 |
+
<show_in_default>1</show_in_default>
|
40 |
+
<show_in_website>0</show_in_website>
|
41 |
+
<show_in_store>0</show_in_store>
|
42 |
+
</extensions>
|
43 |
+
<advertise translate="label comment">
|
44 |
+
<label></label>
|
45 |
+
<frontend_type>WyomindNotificationManagerAdvertise</frontend_type>
|
46 |
+
<sort_order>1</sort_order>
|
47 |
+
<show_in_default>1</show_in_default>
|
48 |
+
<show_in_website>0</show_in_website>
|
49 |
+
<show_in_store>0</show_in_store>
|
50 |
+
</advertise>
|
51 |
+
</fields>
|
52 |
+
</notificationmanager>
|
53 |
+
</groups>
|
54 |
+
</notificationmanager>
|
55 |
+
</sections>
|
56 |
+
</config>
|
57 |
+
|
58 |
+
|
59 |
+
|
60 |
+
|
app/design/adminhtml/default/default/layout/botdefender.xml
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
|
3 |
+
<layout version="0.1.0">
|
4 |
+
<default>
|
5 |
+
<reference name="notifications">
|
6 |
+
<block type="botdefender/adminhtml_notifications" name="notification_botdefender" />
|
7 |
+
</reference>
|
8 |
+
</default>
|
9 |
+
</layout>
|
app/design/frontend/default/default/layout/botdefender.xml
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
|
3 |
+
<layout version="0.1.0">
|
4 |
+
<default>
|
5 |
+
<reference name="catalog_product_price_template">
|
6 |
+
|
7 |
+
<action method="addPriceBlockType">
|
8 |
+
<type>simple</type>
|
9 |
+
<block>catalog/product_price</block>
|
10 |
+
<template>botdefender/catalog/product/price.phtml</template>
|
11 |
+
</action>
|
12 |
+
|
13 |
+
<action method="addPriceBlockType">
|
14 |
+
<type>grouped</type>
|
15 |
+
<block>catalog/product_price</block>
|
16 |
+
<template>botdefender/catalog/product/price.phtml</template>
|
17 |
+
</action>
|
18 |
+
<action method="addPriceBlockType">
|
19 |
+
<type>configurable</type>
|
20 |
+
<block>catalog/product_price</block>
|
21 |
+
<template>botdefender/catalog/product/price.phtml</template>
|
22 |
+
</action>
|
23 |
+
</reference>
|
24 |
+
</default>
|
25 |
+
<catalog_category_layered>
|
26 |
+
<reference name="product_list">
|
27 |
+
<action method="addPriceBlockType">
|
28 |
+
<type>bundle</type>
|
29 |
+
<block>bundle/catalog_product_price</block>
|
30 |
+
<template>botdefender/bundle/catalog/product/price.phtml</template>
|
31 |
+
</action>
|
32 |
+
</reference>
|
33 |
+
</catalog_category_layered>
|
34 |
+
<catalog_category_view>
|
35 |
+
<reference name="product_list">
|
36 |
+
<action method="addPriceBlockType">
|
37 |
+
<type>bundle</type>
|
38 |
+
<block>bundle/catalog_product_price</block>
|
39 |
+
<template>botdefender/bundle/catalog/product/price.phtml</template>
|
40 |
+
</action>
|
41 |
+
</reference>
|
42 |
+
</catalog_category_view>
|
43 |
+
<catalog_category_default>
|
44 |
+
<reference name="product_list">
|
45 |
+
<action method="addPriceBlockType">
|
46 |
+
<type>bundle</type>
|
47 |
+
<block>bundle/catalog_product_price</block>
|
48 |
+
<template>botdefender/bundle/catalog/product/price.phtml</template>
|
49 |
+
</action>
|
50 |
+
</reference>
|
51 |
+
</catalog_category_default>
|
52 |
+
|
53 |
+
<PRODUCT_TYPE_bundle>
|
54 |
+
<reference name="product.clone_prices">
|
55 |
+
<action method="addPriceBlockType">
|
56 |
+
<type>bundle</type>
|
57 |
+
<block>bundle/catalog_product_price</block>
|
58 |
+
<template>botdefender/bundle/catalog/product/view/price.phtml</template>
|
59 |
+
</action>
|
60 |
+
</reference>
|
61 |
+
<reference name="product.info.bundle">
|
62 |
+
<action method="addPriceBlockType">
|
63 |
+
<type>bundle</type>
|
64 |
+
<block>bundle/catalog_product_price</block>
|
65 |
+
<template>botdefender/bundle/catalog/product/price.phtml</template>
|
66 |
+
</action>
|
67 |
+
|
68 |
+
</reference>
|
69 |
+
</PRODUCT_TYPE_bundle>
|
70 |
+
|
71 |
+
|
72 |
+
|
73 |
+
|
74 |
+
|
75 |
+
</layout>
|
app/design/frontend/default/default/template/botdefender/bundle/catalog/product/price.phtml
ADDED
@@ -0,0 +1,268 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-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 design
|
22 |
+
* @package base_default
|
23 |
+
* @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<?php $_product = $this->getProduct() ?>
|
28 |
+
<?php $_priceModel = $_product->getPriceModel() ?>
|
29 |
+
<?php list($_minimalPriceTax, $_maximalPriceTax) = $_priceModel->getTotalPrices($_product, null, null, false) ?>
|
30 |
+
<?php list($_minimalPriceInclTax, $_maximalPriceInclTax) = $_priceModel->getTotalPrices($_product, null, true, false) ?>
|
31 |
+
<?php $_id = $_product->getId() ?>
|
32 |
+
|
33 |
+
<?php $_weeeTaxAmount = 0; ?>
|
34 |
+
|
35 |
+
<?php
|
36 |
+
$_storeId = $_product->getStoreId();
|
37 |
+
?>
|
38 |
+
|
39 |
+
<?php
|
40 |
+
if ($_product->getPriceType() == 1) {
|
41 |
+
$_weeeTaxAmount = Mage::helper('weee')->getAmount($_product);
|
42 |
+
$_weeeTaxAmountInclTaxes = $_weeeTaxAmount;
|
43 |
+
if (Mage::helper('weee')->isTaxable()) {
|
44 |
+
$_attributes = Mage::helper('weee')->getProductWeeeAttributesForRenderer($_product, null, null, null, true);
|
45 |
+
$_weeeTaxAmountInclTaxes = Mage::helper('weee')->getAmountInclTaxes($_attributes);
|
46 |
+
}
|
47 |
+
if ($_weeeTaxAmount && Mage::helper('weee')->typeOfDisplay($_product, array(0, 1, 4))) {
|
48 |
+
$_minimalPriceTax += $_weeeTaxAmount;
|
49 |
+
$_minimalPriceInclTax += $_weeeTaxAmountInclTaxes;
|
50 |
+
}
|
51 |
+
if ($_weeeTaxAmount && Mage::helper('weee')->typeOfDisplay($_product, 2)) {
|
52 |
+
$_minimalPriceInclTax += $_weeeTaxAmountInclTaxes;
|
53 |
+
}
|
54 |
+
|
55 |
+
if (Mage::helper('weee')->typeOfDisplay($_product, array(1, 2, 4))) {
|
56 |
+
$_weeeTaxAttributes = Mage::helper('weee')->getProductWeeeAttributesForDisplay($_product);
|
57 |
+
}
|
58 |
+
}
|
59 |
+
?>
|
60 |
+
|
61 |
+
<div class="price-box">
|
62 |
+
<?php if ($_product->getPriceView()): ?>
|
63 |
+
<p class="minimal-price">
|
64 |
+
<span class="price-label"><?php echo $this->__('As low as') ?>:</span>
|
65 |
+
<?php if ($this->displayBothPrices()): ?>
|
66 |
+
<span class="price-excluding-tax">
|
67 |
+
<span class="label"><?php echo Mage::helper('tax')->__('Excl. Tax:') ?></span>
|
68 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceTax),$_id,$_storeId,"101"); ?>
|
69 |
+
</span>
|
70 |
+
<?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && Mage::helper('weee')->typeOfDisplay($_product, array(2, 1, 4))): ?>
|
71 |
+
<span class="weee">(<small>
|
72 |
+
<?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
73 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, array(2, 4))): ?>
|
74 |
+
<?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?>
|
75 |
+
<?php else: ?>
|
76 |
+
<?php $amount = $_weeeTaxAttribute->getAmount(); ?>
|
77 |
+
<?php endif; ?>
|
78 |
+
|
79 |
+
<?php echo $_weeeSeparator; ?>
|
80 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($amount, true, true),$_id,$_storeId,"102"); ?>
|
81 |
+
<?php $_weeeSeparator = ' + '; ?>
|
82 |
+
<?php endforeach; ?>
|
83 |
+
</small>)</span>
|
84 |
+
<?php endif; ?>
|
85 |
+
<span class="price-including-tax">
|
86 |
+
<span class="label"><?php echo Mage::helper('tax')->__('Incl. Tax:') ?></span>
|
87 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceInclTax),$_id,$_storeId,"103"); ?>
|
88 |
+
</span>
|
89 |
+
<?php else: ?>
|
90 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceTax),$_id,$_storeId,"104"); ?>
|
91 |
+
<?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && Mage::helper('weee')->typeOfDisplay($_product, array(2, 1, 4))): ?>
|
92 |
+
<span class="weee">(<small>
|
93 |
+
<?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
94 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, array(2, 4))): ?>
|
95 |
+
<?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?>
|
96 |
+
<?php else: ?>
|
97 |
+
<?php $amount = $_weeeTaxAttribute->getAmount(); ?>
|
98 |
+
<?php endif; ?>
|
99 |
+
|
100 |
+
<?php echo $_weeeSeparator; ?>
|
101 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($amount, true, true),$_id,$_storeId,"105");; ?>
|
102 |
+
<?php $_weeeSeparator = ' + '; ?>
|
103 |
+
<?php endforeach; ?>
|
104 |
+
</small>)</span>
|
105 |
+
<?php endif; ?>
|
106 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, 2) && $_weeeTaxAmount): ?>
|
107 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceInclTax),$_id,$_storeId,"106"); ?>
|
108 |
+
<?php endif; ?>
|
109 |
+
<?php endif; ?>
|
110 |
+
</p>
|
111 |
+
<?php else: ?>
|
112 |
+
<?php if ($_minimalPriceTax <> $_maximalPriceTax): ?>
|
113 |
+
<p class="price-from">
|
114 |
+
<span class="price-label"><?php echo $this->__('From') ?>:</span>
|
115 |
+
<?php if ($this->displayBothPrices()): ?>
|
116 |
+
<span class="price-excluding-tax">
|
117 |
+
<span class="label"><?php echo Mage::helper('tax')->__('Excl. Tax:') ?></span>
|
118 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceTax),$_id,$_storeId,"107"); ?>
|
119 |
+
</span>
|
120 |
+
<?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && Mage::helper('weee')->typeOfDisplay($_product, array(2, 1, 4))): ?>
|
121 |
+
<span class="weee">(<small>
|
122 |
+
<?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
123 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, array(2, 4))): ?>
|
124 |
+
<?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?>
|
125 |
+
<?php else: ?>
|
126 |
+
<?php $amount = $_weeeTaxAttribute->getAmount(); ?>
|
127 |
+
<?php endif; ?>
|
128 |
+
|
129 |
+
<?php echo $_weeeSeparator; ?>
|
130 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($amount, true, true),$_id,$_storeId,"108");; ?>
|
131 |
+
<?php $_weeeSeparator = ' + '; ?>
|
132 |
+
<?php endforeach; ?>
|
133 |
+
</small>)</span>
|
134 |
+
<?php endif; ?>
|
135 |
+
<span class="price-including-tax">
|
136 |
+
<span class="label"><?php echo Mage::helper('tax')->__('Incl. Tax:') ?></span>
|
137 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceInclTax),$_id,$_storeId,"109"); ?>
|
138 |
+
</span>
|
139 |
+
<?php else: ?>
|
140 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceTax),$_id,$_storeId,"110"); ?>
|
141 |
+
<?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && Mage::helper('weee')->typeOfDisplay($_product, array(2, 1, 4))): ?>
|
142 |
+
<span class="weee">(<small>
|
143 |
+
<?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
144 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, array(2, 4))): ?>
|
145 |
+
<?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?>
|
146 |
+
<?php else: ?>
|
147 |
+
<?php $amount = $_weeeTaxAttribute->getAmount(); ?>
|
148 |
+
<?php endif; ?>
|
149 |
+
|
150 |
+
<?php echo $_weeeSeparator; ?>
|
151 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($amount, true, true),$_id,$_storeId,"111");; ?>
|
152 |
+
<?php $_weeeSeparator = ' + '; ?>
|
153 |
+
<?php endforeach; ?>
|
154 |
+
</small>)</span>
|
155 |
+
<?php endif; ?>
|
156 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, 2) && $_weeeTaxAmount): ?>
|
157 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceInclTax),$_id,$_storeId,"112"); ?>
|
158 |
+
<?php endif; ?>
|
159 |
+
<?php endif; ?>
|
160 |
+
</p>
|
161 |
+
<?php
|
162 |
+
if ($_product->getPriceType() == 1) {
|
163 |
+
if ($_weeeTaxAmount && Mage::helper('weee')->typeOfDisplay($_product, array(0, 1, 4))) {
|
164 |
+
$_maximalPriceTax += $_weeeTaxAmount;
|
165 |
+
$_maximalPriceInclTax += $_weeeTaxAmountInclTaxes;
|
166 |
+
}
|
167 |
+
if ($_weeeTaxAmount && Mage::helper('weee')->typeOfDisplay($_product, 2)) {
|
168 |
+
$_maximalPriceInclTax += $_weeeTaxAmountInclTaxes;
|
169 |
+
}
|
170 |
+
}
|
171 |
+
?>
|
172 |
+
<p class="price-to">
|
173 |
+
<span class="price-label"><?php echo $this->__('To') ?>:</span>
|
174 |
+
<?php if ($this->displayBothPrices()): ?>
|
175 |
+
<span class="price-excluding-tax">
|
176 |
+
<span class="label"><?php echo Mage::helper('tax')->__('Excl. Tax:') ?></span>
|
177 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_maximalPriceTax),$_id,$_storeId,"113"); ?>
|
178 |
+
</span>
|
179 |
+
<?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && Mage::helper('weee')->typeOfDisplay($_product, array(2, 1, 4))): ?>
|
180 |
+
<span class="weee">(<small>
|
181 |
+
<?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
182 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, array(2, 4))): ?>
|
183 |
+
<?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?>
|
184 |
+
<?php else: ?>
|
185 |
+
<?php $amount = $_weeeTaxAttribute->getAmount(); ?>
|
186 |
+
<?php endif; ?>
|
187 |
+
|
188 |
+
<?php echo $_weeeSeparator; ?>
|
189 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($amount, true, true),$_id,$_storeId,"114");; ?>
|
190 |
+
<?php $_weeeSeparator = ' + '; ?>
|
191 |
+
<?php endforeach; ?>
|
192 |
+
</small>)</span>
|
193 |
+
<?php endif; ?>
|
194 |
+
<span class="price-including-tax">
|
195 |
+
<span class="label"><?php echo Mage::helper('tax')->__('Incl. Tax') ?></span>
|
196 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_maximalPriceInclTax),$_id,$_storeId,"115"); ?>
|
197 |
+
</span>
|
198 |
+
<?php else: ?>
|
199 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_maximalPriceTax),$_id,$_storeId,"116"); ?>
|
200 |
+
<?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && Mage::helper('weee')->typeOfDisplay($_product, array(2, 1, 4))): ?>
|
201 |
+
<span class="weee">(<small>
|
202 |
+
<?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
203 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, array(2, 4))): ?>
|
204 |
+
<?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?>
|
205 |
+
<?php else: ?>
|
206 |
+
<?php $amount = $_weeeTaxAttribute->getAmount(); ?>
|
207 |
+
<?php endif; ?>
|
208 |
+
|
209 |
+
<?php echo $_weeeSeparator; ?>
|
210 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($amount, true, true),$_id,$_storeId,"117");; ?>
|
211 |
+
<?php $_weeeSeparator = ' + '; ?>
|
212 |
+
<?php endforeach; ?>
|
213 |
+
</small>)</span>
|
214 |
+
<?php endif; ?>
|
215 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, 2) && $_weeeTaxAmount): ?>
|
216 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_maximalPriceInclTax),$_id,$_storeId,"118"); ?>
|
217 |
+
<?php endif; ?>
|
218 |
+
<?php endif; ?>
|
219 |
+
</p>
|
220 |
+
<?php else: ?>
|
221 |
+
<?php if ($this->displayBothPrices()): ?>
|
222 |
+
<span class="price-excluding-tax">
|
223 |
+
<span class="label"><?php echo Mage::helper('tax')->__('Excl. Tax:') ?></span>
|
224 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceTax),$_id,$_storeId,"119"); ?>
|
225 |
+
</span>
|
226 |
+
<?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && Mage::helper('weee')->typeOfDisplay($_product, array(2, 1, 4))): ?>
|
227 |
+
<span class="weee">(<small>
|
228 |
+
<?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
229 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, array(2, 4))): ?>
|
230 |
+
<?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?>
|
231 |
+
<?php else: ?>
|
232 |
+
<?php $amount = $_weeeTaxAttribute->getAmount(); ?>
|
233 |
+
<?php endif; ?>
|
234 |
+
|
235 |
+
<?php echo $_weeeSeparator; ?>
|
236 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($amount, true, true),$_id,$_storeId,"120");; ?>
|
237 |
+
<?php $_weeeSeparator = ' + '; ?>
|
238 |
+
<?php endforeach; ?>
|
239 |
+
</small>)</span>
|
240 |
+
<?php endif; ?>
|
241 |
+
<span class="price-including-tax">
|
242 |
+
<span class="label"><?php echo Mage::helper('tax')->__('Incl. Tax:') ?></span>
|
243 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceInclTax),$_id,$_storeId,"121"); ?>
|
244 |
+
</span>
|
245 |
+
<?php else: ?>
|
246 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceTax),$_id,$_storeId,"122"); ?>
|
247 |
+
<?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && Mage::helper('weee')->typeOfDisplay($_product, array(2, 1, 4))): ?>
|
248 |
+
<span class="weee">(<small>
|
249 |
+
<?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
250 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, array(2, 4))): ?>
|
251 |
+
<?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?>
|
252 |
+
<?php else: ?>
|
253 |
+
<?php $amount = $_weeeTaxAttribute->getAmount(); ?>
|
254 |
+
<?php endif; ?>
|
255 |
+
|
256 |
+
<?php echo $_weeeSeparator; ?>
|
257 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($amount, true, true),$_id,$_storeId,"123");; ?>
|
258 |
+
<?php $_weeeSeparator = ' + '; ?>
|
259 |
+
<?php endforeach; ?>
|
260 |
+
</small>)</span>
|
261 |
+
<?php endif; ?>
|
262 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, 2) && $_weeeTaxAmount): ?>
|
263 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_minimalPriceInclTax),$_id,$_storeId,"124"); ?>
|
264 |
+
<?php endif; ?>
|
265 |
+
<?php endif; ?>
|
266 |
+
<?php endif; ?>
|
267 |
+
<?php endif; ?>
|
268 |
+
</div>
|
app/design/frontend/default/default/template/botdefender/bundle/catalog/product/view/price.phtml
ADDED
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-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 design
|
22 |
+
* @package base_default
|
23 |
+
* @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<?php $_product = $this->getProduct() ?>
|
28 |
+
<?php $_finalPrice = $_product->getFinalPrice() ?>
|
29 |
+
<?php $_finalPriceInclTax = $_product->getFinalPrice() ?>
|
30 |
+
<?php $_weeeTaxAmount = 0; ?>
|
31 |
+
<?php
|
32 |
+
if ($_product->getPriceType() == 1) {
|
33 |
+
$_weeeTaxAmount = Mage::helper('weee')->getAmount($_product);
|
34 |
+
if (Mage::helper('weee')->typeOfDisplay($_product, array(1,2,4))) {
|
35 |
+
$_weeeTaxAttributes = Mage::helper('weee')->getProductWeeeAttributesForDisplay($_product);
|
36 |
+
}
|
37 |
+
}
|
38 |
+
$isMAPTypeOnGesture = Mage::helper('catalog')->isShowPriceOnGesture($_product);
|
39 |
+
$canApplyMAP = Mage::helper('catalog')->canApplyMsrp($_product);
|
40 |
+
?>
|
41 |
+
|
42 |
+
<?php
|
43 |
+
|
44 |
+
$_id=$_product->getId();
|
45 |
+
$_storeId = $_product->getStoreId();
|
46 |
+
|
47 |
+
?>
|
48 |
+
|
49 |
+
<?php if ($_product->getCanShowPrice() !== false):?>
|
50 |
+
<div class="price-box">
|
51 |
+
<p class="price-as-configured">
|
52 |
+
<span class="price-label"><?php echo $this->helper('bundle')->__('Price as configured') ?>:</span>
|
53 |
+
<?php if (!$this->getWithoutPrice()): ?>
|
54 |
+
<span<?php if (!$isMAPTypeOnGesture && $canApplyMAP): ?> style="display:none"<?php endif ?> class="full-product-price">
|
55 |
+
<?php if ($this->helper('tax')->displayBothPrices()): ?>
|
56 |
+
<span class="price-tax">
|
57 |
+
<span class="price-excluding-tax">
|
58 |
+
<span class="label"><?php echo Mage::helper('tax')->__('Excl. Tax:') ?></span>
|
59 |
+
<span class="price" id="price-excluding-tax-<?php echo $_product->getId() ?><?php echo $this->getIdSuffix() ?>">
|
60 |
+
<?php if (!$canApplyMAP): ?>
|
61 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_finalPrice,true,false),$_id,$_storeId,"201"); ?>
|
62 |
+
<?php endif ?>
|
63 |
+
</span>
|
64 |
+
</span>
|
65 |
+
<?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && Mage::helper('weee')->typeOfDisplay($_product, array(2, 1, 4))): ?>
|
66 |
+
<span class="weee">(<small>
|
67 |
+
<?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
68 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, array(2, 4))): ?>
|
69 |
+
<?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?>
|
70 |
+
<?php else: ?>
|
71 |
+
<?php $amount = $_weeeTaxAttribute->getAmount(); ?>
|
72 |
+
<?php endif; ?>
|
73 |
+
|
74 |
+
<?php echo $_weeeSeparator; ?>
|
75 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($amount, true, true),$_id,$_storeId,"202"); ?>
|
76 |
+
<?php $_weeeSeparator = ' + '; ?>
|
77 |
+
<?php endforeach; ?>
|
78 |
+
</small>)</span>
|
79 |
+
<?php endif; ?>
|
80 |
+
<span class="price-including-tax">
|
81 |
+
<span class="label"><?php echo Mage::helper('tax')->__('Incl. Tax:') ?></span>
|
82 |
+
<span class="price" id="price-including-tax-<?php echo $_product->getId() ?><?php echo $this->getIdSuffix() ?>">
|
83 |
+
<?php if (!$canApplyMAP): ?>
|
84 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_finalPriceInclTax,true,false),$_id,$_storeId,"203") ?>
|
85 |
+
<?php endif ?>
|
86 |
+
</span>
|
87 |
+
</span>
|
88 |
+
</span>
|
89 |
+
<?php else: ?>
|
90 |
+
<span class="price" id="product-price-<?php echo $_product->getId() ?><?php echo $this->getIdSuffix() ?>">
|
91 |
+
<?php if (!$canApplyMAP): ?>
|
92 |
+
<?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($_finalPrice,true,false),$_id,$_storeId,"204") ?>
|
93 |
+
<?php endif ?>
|
94 |
+
</span>
|
95 |
+
<?php if ($_weeeTaxAmount && $_product->getPriceType() == 1 && Mage::helper('weee')->typeOfDisplay($_product, array(2, 1, 4))): ?>
|
96 |
+
<span class="weee">(<small>
|
97 |
+
<?php $_weeeSeparator = ''; foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
98 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_product, array(2, 4))): ?>
|
99 |
+
<?php $amount = $_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(); ?>
|
100 |
+
<?php else: ?>
|
101 |
+
<?php $amount = $_weeeTaxAttribute->getAmount(); ?>
|
102 |
+
<?php endif; ?>
|
103 |
+
|
104 |
+
<?php echo $_weeeSeparator; ?>
|
105 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData(Mage::helper('core')->currency($amount, true, true),$_id,$_storeId,"205"); ?>
|
106 |
+
<?php $_weeeSeparator = ' + '; ?>
|
107 |
+
<?php endforeach; ?>
|
108 |
+
</small>)</span>
|
109 |
+
<?php endif; ?>
|
110 |
+
<?php endif; ?>
|
111 |
+
</span>
|
112 |
+
<?php endif ?>
|
113 |
+
</p>
|
114 |
+
</div>
|
115 |
+
<?php endif; ?>
|
116 |
+
<?php if($_product->isSaleable()): ?>
|
117 |
+
<script type="text/javascript">
|
118 |
+
document.observe("dom:loaded", function() {
|
119 |
+
bundle.reloadPrice();
|
120 |
+
});
|
121 |
+
</script>
|
122 |
+
<?php endif; ?>
|
app/design/frontend/default/default/template/botdefender/catalog/product/price.phtml
ADDED
@@ -0,0 +1,430 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-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 design
|
22 |
+
* @package base_default
|
23 |
+
* @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
|
28 |
+
<?php
|
29 |
+
/**
|
30 |
+
* Template for displaying product price in different places (products grid, product view page etc)
|
31 |
+
*
|
32 |
+
* @see Mage_Catalog_Block_Product_Abstract
|
33 |
+
*/
|
34 |
+
?>
|
35 |
+
<?php
|
36 |
+
$_coreHelper = $this->helper('core');
|
37 |
+
$_weeeHelper = $this->helper('weee');
|
38 |
+
$_taxHelper = $this->helper('tax');
|
39 |
+
/* @var $_coreHelper Mage_Core_Helper_Data */
|
40 |
+
/* @var $_weeeHelper Mage_Weee_Helper_Data */
|
41 |
+
/* @var $_taxHelper Mage_Tax_Helper_Data */
|
42 |
+
|
43 |
+
$_product = $this->getProduct();
|
44 |
+
$_storeId = $_product->getStoreId();
|
45 |
+
$_id = $_product->getId();
|
46 |
+
$_weeeSeparator = '';
|
47 |
+
$_simplePricesTax = ($_taxHelper->displayPriceIncludingTax() || $_taxHelper->displayBothPrices());
|
48 |
+
$_minimalPriceValue = $_product->getMinimalPrice();
|
49 |
+
$_minimalPrice = $_taxHelper->getPrice($_product, $_minimalPriceValue, $_simplePricesTax);
|
50 |
+
|
51 |
+
?>
|
52 |
+
|
53 |
+
<?php if (!$_product->isGrouped()): ?>
|
54 |
+
<?php $_weeeTaxAmount = $_weeeHelper->getAmountForDisplay($_product); ?>
|
55 |
+
<?php if ($_weeeHelper->typeOfDisplay($_product, array(Mage_Weee_Model_Tax::DISPLAY_INCL_DESCR, Mage_Weee_Model_Tax::DISPLAY_EXCL_DESCR_INCL, 4))): ?>
|
56 |
+
<?php $_weeeTaxAmount = $_weeeHelper->getAmount($_product); ?>
|
57 |
+
<?php $_weeeTaxAttributes = $_weeeHelper->getProductWeeeAttributesForDisplay($_product); ?>
|
58 |
+
<?php endif; ?>
|
59 |
+
<?php $_weeeTaxAmountInclTaxes = $_weeeTaxAmount; ?>
|
60 |
+
<?php if ($_weeeHelper->isTaxable() && !$_taxHelper->priceIncludesTax($_storeId)): ?>
|
61 |
+
<?php $_attributes = $_weeeHelper->getProductWeeeAttributesForRenderer($_product, null, null, null, true); ?>
|
62 |
+
<?php $_weeeTaxAmountInclTaxes = $_weeeHelper->getAmountInclTaxes($_attributes); ?>
|
63 |
+
<?php endif; ?>
|
64 |
+
|
65 |
+
<div class="price-box">
|
66 |
+
<?php $_price = $_taxHelper->getPrice($_product, $_product->getPrice()) ?>
|
67 |
+
<?php $_regularPrice = $_taxHelper->getPrice($_product, $_product->getPrice(), $_simplePricesTax) ?>
|
68 |
+
<?php $_finalPrice = $_taxHelper->getPrice($_product, $_product->getFinalPrice()) ?>
|
69 |
+
<?php $_finalPriceInclTax = $_taxHelper->getPrice($_product, $_product->getFinalPrice(), true) ?>
|
70 |
+
<?php $_weeeDisplayType = $_weeeHelper->getPriceDisplayType(); ?>
|
71 |
+
<?php if ($_finalPrice >= $_price): ?>
|
72 |
+
<?php if ($_taxHelper->displayBothPrices()): ?>
|
73 |
+
<?php if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 0)): // including ?>
|
74 |
+
<span class="price-excluding-tax">
|
75 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
76 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
77 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price + $_weeeTaxAmount, true, false),$_id,$_storeId,"001") ?>
|
78 |
+
</span>
|
79 |
+
</span>
|
80 |
+
<span class="price-including-tax">
|
81 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
82 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
83 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false),$_id,$_storeId,"002") ?>
|
84 |
+
</span>
|
85 |
+
</span>
|
86 |
+
<?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 1)): // incl. + weee ?>
|
87 |
+
<span class="price-excluding-tax">
|
88 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
89 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
90 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price + $_weeeTaxAmount, true, false),$_id,$_storeId,"003") ?>
|
91 |
+
</span>
|
92 |
+
</span>
|
93 |
+
<span class="price-including-tax">
|
94 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
95 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
96 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false),$_id,$_storeId,"004") ?>
|
97 |
+
</span>
|
98 |
+
<span class="weee">(
|
99 |
+
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
100 |
+
<?php echo $_weeeSeparator; ?>
|
101 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true),$_id,$_storeId,"005"); ?>
|
102 |
+
<?php $_weeeSeparator = ' + '; ?>
|
103 |
+
<?php endforeach; ?>
|
104 |
+
)</span>
|
105 |
+
</span>
|
106 |
+
<?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 4)): // incl. + weee ?>
|
107 |
+
<span class="price-excluding-tax">
|
108 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
109 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
110 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price + $_weeeTaxAmount, true, false),$_id,$_storeId,"006") ?>
|
111 |
+
</span>
|
112 |
+
</span>
|
113 |
+
<span class="price-including-tax">
|
114 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
115 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
116 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false),$_id,$_storeId,"007") ?>
|
117 |
+
</span>
|
118 |
+
<span class="weee">(
|
119 |
+
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
120 |
+
<?php echo $_weeeSeparator; ?>
|
121 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_weeeTaxAttribute->getAmount() + $_weeeTaxAttribute->getTaxAmount(), true, true),$_id,$_storeId,"008"); ?>
|
122 |
+
<?php $_weeeSeparator = ' + '; ?>
|
123 |
+
<?php endforeach; ?>
|
124 |
+
)</span>
|
125 |
+
</span>
|
126 |
+
<?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 2)): // excl. + weee + final ?>
|
127 |
+
<span class="price-excluding-tax">
|
128 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
129 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
130 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price, true, false),$_id,$_storeId,"009") ?>
|
131 |
+
</span>
|
132 |
+
</span>
|
133 |
+
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
134 |
+
<span class="weee">
|
135 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true),$_id,$_storeId,"010"); ?>
|
136 |
+
</span>
|
137 |
+
<?php endforeach; ?>
|
138 |
+
<span class="price-including-tax">
|
139 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
140 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
141 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false),$_id,$_storeId,"011") ?>
|
142 |
+
</span>
|
143 |
+
</span>
|
144 |
+
<?php else: ?>
|
145 |
+
<span class="price-excluding-tax">
|
146 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
147 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
148 |
+
<?php if ($_finalPrice == $_price): ?>
|
149 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price, true, false),$_id,$_storeId,"012") ?>
|
150 |
+
<?php else: ?>
|
151 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPrice, true, false),$_id,$_storeId,"013") ?>
|
152 |
+
<?php endif; ?>
|
153 |
+
</span>
|
154 |
+
</span>
|
155 |
+
<span class="price-including-tax">
|
156 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
157 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
158 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPriceInclTax, true, false),$_id,$_storeId,"014") ?>
|
159 |
+
</span>
|
160 |
+
</span>
|
161 |
+
<?php endif; ?>
|
162 |
+
<?php else: ?>
|
163 |
+
<?php if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 0)): // including ?>
|
164 |
+
<span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
165 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price + $_weeeTaxAmount, true, true),$_id,$_storeId,"015") ?>
|
166 |
+
</span>
|
167 |
+
<?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 1)): // incl. + weee ?>
|
168 |
+
<span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
169 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price + $_weeeTaxAmount, true, true),$_id,$_storeId,"016") ?>
|
170 |
+
</span>
|
171 |
+
<span class="weee">(
|
172 |
+
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
173 |
+
<?php echo $_weeeSeparator; ?>
|
174 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true),$_id,$_storeId,"017"); ?>
|
175 |
+
<?php $_weeeSeparator = ' + '; ?>
|
176 |
+
<?php endforeach; ?>
|
177 |
+
)</span>
|
178 |
+
<?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 4)): // incl. + weee ?>
|
179 |
+
<span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
180 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price + $_weeeTaxAmount, true, true),$_id,$_storeId,"018") ?>
|
181 |
+
</span>
|
182 |
+
<span class="weee">(
|
183 |
+
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
184 |
+
<?php echo $_weeeSeparator; ?>
|
185 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_weeeTaxAttribute->getAmount() + $_weeeTaxAttribute->getTaxAmount(), true, true),$_id,$_storeId,"019"); ?>
|
186 |
+
<?php $_weeeSeparator = ' + '; ?>
|
187 |
+
<?php endforeach; ?>
|
188 |
+
)</span>
|
189 |
+
<?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 2)): // excl. + weee + final ?>
|
190 |
+
<span class="regular-price"><?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price, true, true),$_id,$_storeId,"020") ?></span><br />
|
191 |
+
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
192 |
+
<span class="weee">
|
193 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true),$_id,$_storeId,"021"); ?>
|
194 |
+
</span>
|
195 |
+
<?php endforeach; ?>
|
196 |
+
<span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
197 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price + $_weeeTaxAmount, true, true),$_id,$_storeId,"022") ?>
|
198 |
+
</span>
|
199 |
+
<?php else: ?>
|
200 |
+
<span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
201 |
+
<?php if ($_finalPrice == $_price): ?>
|
202 |
+
|
203 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_price, true, true),$_id,$_storeId,"023"); ?>
|
204 |
+
<?php else: ?>
|
205 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPrice, true, true),$_id,$_storeId,"024") ?>
|
206 |
+
<?php endif; ?>
|
207 |
+
</span>
|
208 |
+
<?php endif; ?>
|
209 |
+
<?php endif; ?>
|
210 |
+
<?php else: /* if ($_finalPrice == $_price): */ ?>
|
211 |
+
<?php $_originalWeeeTaxAmount = $_weeeHelper->getOriginalAmount($_product); ?>
|
212 |
+
|
213 |
+
<?php if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 0)): // including ?>
|
214 |
+
<p class="old-price">
|
215 |
+
<span class="price-label"><?php echo $this->__('Regular Price:') ?></span>
|
216 |
+
<span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
217 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_regularPrice + $_originalWeeeTaxAmount, true, false),$_id,$_storeId,"025") ?>
|
218 |
+
</span>
|
219 |
+
</p>
|
220 |
+
|
221 |
+
<?php if ($_taxHelper->displayBothPrices()): ?>
|
222 |
+
<p class="special-price">
|
223 |
+
<span class="price-label"><?php echo $this->__('Special Price:') ?></span>
|
224 |
+
<span class="price-excluding-tax">
|
225 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
226 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
227 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPrice + $_weeeTaxAmount, true, false),$_id,$_storeId,"026") ?>
|
228 |
+
</span>
|
229 |
+
</span>
|
230 |
+
<span class="price-including-tax">
|
231 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
232 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
233 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false),$_id,$_storeId,"027") ?>
|
234 |
+
</span>
|
235 |
+
</span>
|
236 |
+
</p>
|
237 |
+
<?php else: ?>
|
238 |
+
<p class="special-price">
|
239 |
+
<span class="price-label"><?php echo $this->__('Special Price:') ?></span>
|
240 |
+
<span class="price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
241 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPrice + $_weeeTaxAmountInclTaxes, true, false),$_id,$_storeId,"028") ?>
|
242 |
+
</span>
|
243 |
+
</p>
|
244 |
+
<?php endif; ?>
|
245 |
+
|
246 |
+
<?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 1)): // incl. + weee ?>
|
247 |
+
<p class="old-price">
|
248 |
+
<span class="price-label"><?php echo $this->__('Regular Price:') ?></span>
|
249 |
+
<span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
250 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_regularPrice + $_originalWeeeTaxAmount, true, false),$_id,$_storeId,"029") ?>
|
251 |
+
</span>
|
252 |
+
</p>
|
253 |
+
|
254 |
+
<p class="special-price">
|
255 |
+
<span class="price-label"><?php echo $this->__('Special Price:') ?></span>
|
256 |
+
<span class="price-excluding-tax">
|
257 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
258 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
259 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPrice + $_weeeTaxAmount, true, false),$_id,$_storeId,"030") ?>
|
260 |
+
</span>
|
261 |
+
</span>
|
262 |
+
<span class="weee">(
|
263 |
+
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
264 |
+
<?php echo $_weeeSeparator; ?>
|
265 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true),$_id,$_storeId,"031"); ?>
|
266 |
+
<?php $_weeeSeparator = ' + '; ?>
|
267 |
+
<?php endforeach; ?>
|
268 |
+
)</span>
|
269 |
+
<span class="price-including-tax">
|
270 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
271 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
272 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false),$_id,$_storeId,"032") ?>
|
273 |
+
</span>
|
274 |
+
</span>
|
275 |
+
</p>
|
276 |
+
<?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 4)): // incl. + weee ?>
|
277 |
+
<p class="old-price">
|
278 |
+
<span class="price-label"><?php echo $this->__('Regular Price:') ?></span>
|
279 |
+
<span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
280 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_regularPrice + $_originalWeeeTaxAmount, true, false),$_id,$_storeId,"033") ?>
|
281 |
+
</span>
|
282 |
+
</p>
|
283 |
+
|
284 |
+
<p class="special-price">
|
285 |
+
<span class="price-label"><?php echo $this->__('Special Price:') ?></span>
|
286 |
+
<span class="price-excluding-tax">
|
287 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
288 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
289 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPrice + $_weeeTaxAmount, true, false),$_id,$_storeId,"034") ?>
|
290 |
+
</span>
|
291 |
+
</span>
|
292 |
+
<span class="weee">(
|
293 |
+
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
294 |
+
<?php echo $_weeeSeparator; ?>
|
295 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_weeeTaxAttribute->getAmount() + $_weeeTaxAttribute->getTaxAmount(), true, true),$_id,$_storeId,"035"); ?>
|
296 |
+
<?php $_weeeSeparator = ' + '; ?>
|
297 |
+
<?php endforeach; ?>
|
298 |
+
)</span>
|
299 |
+
<span class="price-including-tax">
|
300 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
301 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
302 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false),$_id,$_storeId,"036") ?>
|
303 |
+
</span>
|
304 |
+
</span>
|
305 |
+
</p>
|
306 |
+
<?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 2)): // excl. + weee + final ?>
|
307 |
+
<p class="old-price">
|
308 |
+
<span class="price-label"><?php echo $this->__('Regular Price:') ?></span>
|
309 |
+
<span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
310 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_regularPrice, true, false),$_id,$_storeId,"037") ?>
|
311 |
+
</span>
|
312 |
+
</p>
|
313 |
+
|
314 |
+
<p class="special-price">
|
315 |
+
<span class="price-label"><?php echo $this->__('Special Price:') ?></span>
|
316 |
+
<span class="price-excluding-tax">
|
317 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
318 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
319 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPrice, true, false),$_id,$_storeId,"038") ?>
|
320 |
+
</span>
|
321 |
+
</span>
|
322 |
+
<?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
|
323 |
+
<span class="weee">
|
324 |
+
<?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_weeeTaxAttribute->getAmount(), true, true),$_id,$_storeId,"039"); ?>
|
325 |
+
</span>
|
326 |
+
<?php endforeach; ?>
|
327 |
+
<span class="price-including-tax">
|
328 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
329 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
330 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPriceInclTax + $_weeeTaxAmountInclTaxes, true, false),$_id,$_storeId,"040") ?>
|
331 |
+
</span>
|
332 |
+
</span>
|
333 |
+
</p>
|
334 |
+
<?php else: // excl. ?>
|
335 |
+
<p class="old-price">
|
336 |
+
<span class="price-label"><?php echo $this->__('Regular Price:') ?></span>
|
337 |
+
<span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
338 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_regularPrice, true, false),$_id,$_storeId,"041") ?>
|
339 |
+
</span>
|
340 |
+
</p>
|
341 |
+
|
342 |
+
<?php if ($_taxHelper->displayBothPrices()): ?>
|
343 |
+
<p class="special-price">
|
344 |
+
<span class="price-label"><?php echo $this->__('Special Price:') ?></span>
|
345 |
+
<span class="price-excluding-tax">
|
346 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
347 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
348 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPrice, true, false),$_id,$_storeId,"042") ?>
|
349 |
+
</span>
|
350 |
+
</span>
|
351 |
+
<span class="price-including-tax">
|
352 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
353 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
354 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPriceInclTax, true, false),$_id,$_storeId,"043") ?>
|
355 |
+
</span>
|
356 |
+
</span>
|
357 |
+
</p>
|
358 |
+
<?php else: ?>
|
359 |
+
<p class="special-price">
|
360 |
+
<span class="price-label"><?php echo $this->__('Special Price:') ?></span>
|
361 |
+
<span class="price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
362 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_finalPrice, true, false),$_id,$_storeId,"044") ?>
|
363 |
+
</span>
|
364 |
+
</p>
|
365 |
+
<?php endif; ?>
|
366 |
+
<?php endif; ?>
|
367 |
+
|
368 |
+
<?php endif; /* if ($_finalPrice == $_price): */ ?>
|
369 |
+
|
370 |
+
<?php if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()): ?>
|
371 |
+
|
372 |
+
<?php $_minimalPriceDisplayValue = $_minimalPrice; ?>
|
373 |
+
<?php if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, array(0, 1, 4))): ?>
|
374 |
+
<?php $_minimalPriceDisplayValue = $_minimalPrice + $_weeeTaxAmount; ?>
|
375 |
+
<?php endif; ?>
|
376 |
+
|
377 |
+
<?php if ($this->getUseLinkForAsLowAs()): ?>
|
378 |
+
<a href="<?php echo $_product->getProductUrl(); ?>" class="minimal-price-link">
|
379 |
+
<?php else: ?>
|
380 |
+
<span class="minimal-price-link">
|
381 |
+
<?php endif ?>
|
382 |
+
<span class="label"><?php echo $this->__('As low as:') ?></span>
|
383 |
+
<span class="price" id="product-minimal-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
384 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_minimalPriceDisplayValue, true, false),$_id,$_storeId,"045") ?>
|
385 |
+
</span>
|
386 |
+
<?php if ($this->getUseLinkForAsLowAs()): ?>
|
387 |
+
</a>
|
388 |
+
<?php else: ?>
|
389 |
+
</span>
|
390 |
+
<?php endif ?>
|
391 |
+
<?php endif; /* if ($this->getDisplayMinimalPrice() && $_minimalPrice && $_minimalPrice < $_finalPrice): */ ?>
|
392 |
+
</div>
|
393 |
+
|
394 |
+
<?php else: /* if (!$_product->isGrouped()): */ ?>
|
395 |
+
<?php
|
396 |
+
$_exclTax = $_taxHelper->getPrice($_product, $_minimalPriceValue);
|
397 |
+
$_inclTax = $_taxHelper->getPrice($_product, $_minimalPriceValue, true);
|
398 |
+
?>
|
399 |
+
<?php if ($this->getDisplayMinimalPrice() && $_minimalPriceValue): ?>
|
400 |
+
<div class="price-box">
|
401 |
+
<p class="minimal-price">
|
402 |
+
<span class="price-label"><?php echo $this->__('Starting at:') ?></span>
|
403 |
+
<?php if ($_taxHelper->displayBothPrices()): ?>
|
404 |
+
<span class="price-excluding-tax">
|
405 |
+
<span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
|
406 |
+
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
407 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_exclTax, true, false),$_id,$_storeId,"046") ?>
|
408 |
+
</span>
|
409 |
+
</span>
|
410 |
+
<span class="price-including-tax">
|
411 |
+
<span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
|
412 |
+
<span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
413 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_inclTax, true, false),$_id,$_storeId,"047") ?>
|
414 |
+
</span>
|
415 |
+
</span>
|
416 |
+
<?php else: ?>
|
417 |
+
<?php
|
418 |
+
$_showPrice = $_inclTax;
|
419 |
+
if (!$_taxHelper->displayPriceIncludingTax()) {
|
420 |
+
$_showPrice = $_exclTax;
|
421 |
+
}
|
422 |
+
?>
|
423 |
+
<span class="price" id="product-minimal-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
|
424 |
+
<?php echo Mage::helper("botdefender")->getData($_coreHelper->currency($_showPrice, true, false),$_id,$_storeId,"048") ?>
|
425 |
+
</span>
|
426 |
+
<?php endif; ?>
|
427 |
+
</p>
|
428 |
+
</div>
|
429 |
+
<?php endif; /* if ($this->getDisplayMinimalPrice() && $_minimalPrice): */ ?>
|
430 |
+
<?php endif; /* if (!$_product->isGrouped()): */ ?>
|
app/etc/modules/Wyomind_Botdefender.xml
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
|
3 |
+
<config>
|
4 |
+
<modules>
|
5 |
+
<Wyomind_Botdefender>
|
6 |
+
<active>true</active>
|
7 |
+
<codePool>community</codePool>
|
8 |
+
</Wyomind_Botdefender>
|
9 |
+
</modules>
|
10 |
+
</config>
|
app/etc/modules/Wyomind_Notificationmanager.xml
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* @package
|
5 |
+
*/
|
6 |
+
-->
|
7 |
+
<config>
|
8 |
+
<modules>
|
9 |
+
<Wyomind_Notificationmanager>
|
10 |
+
<active>true</active>
|
11 |
+
<codePool>local</codePool>
|
12 |
+
<version>1.0.13</version>
|
13 |
+
</Wyomind_Notificationmanager>
|
14 |
+
</modules>
|
15 |
+
</config>
|
lib/Varien/Data/Form/Element/Botdefender.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
class Varien_Data_Form_Element_Botdefender extends Varien_Data_Form_Element_Abstract {
|
5 |
+
|
6 |
+
public function __construct($attributes=array())
|
7 |
+
{
|
8 |
+
parent::__construct($attributes);
|
9 |
+
$this->setType('link');
|
10 |
+
}
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Generates element html
|
14 |
+
*
|
15 |
+
* @return string
|
16 |
+
*/
|
17 |
+
public function getElementHtml()
|
18 |
+
{
|
19 |
+
$html = $this->getBeforeElementHtml();
|
20 |
+
|
21 |
+
|
22 |
+
$apiCall = Mage::helper("botdefender")->apiCall();
|
23 |
+
$message = Mage::helper('botdefender')->getMessage($apiCall);
|
24 |
+
|
25 |
+
|
26 |
+
$html .= '<a id="' . $this->getHtmlId() . '" href="' . Mage::helper("botdefender")->_BOTDEFENDER_URL . '" target="_blank">' . $message . "</a>\n";
|
27 |
+
$html .= $this->getAfterElementHtml();
|
28 |
+
|
29 |
+
|
30 |
+
|
31 |
+
return $html;
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Prepare array of anchor attributes
|
36 |
+
*
|
37 |
+
* @return array
|
38 |
+
*/
|
39 |
+
public function getHtmlAttributes()
|
40 |
+
{
|
41 |
+
return array('charset', 'coords', 'href', 'hreflang', 'rel', 'rev', 'name',
|
42 |
+
'shape', 'target', 'accesskey', 'class', 'dir', 'lang', 'style',
|
43 |
+
'tabindex', 'title', 'xml:lang', 'onblur', 'onclick', 'ondblclick',
|
44 |
+
'onfocus', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover',
|
45 |
+
'onmouseup', 'onkeydown', 'onkeypress', 'onkeyup');
|
46 |
+
}
|
47 |
+
|
48 |
+
|
49 |
+
}
|
lib/Varien/Data/Form/Element/Wyomindnotificationmanageradvertise.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Varien_Data_Form_Element_Wyomindnotificationmanageradvertise extends Varien_Data_Form_Element_Abstract
|
4 |
+
{
|
5 |
+
public function __construct($attributes=array())
|
6 |
+
{
|
7 |
+
parent::__construct($attributes);
|
8 |
+
$this->setType('link');
|
9 |
+
}
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Generates element html
|
13 |
+
*
|
14 |
+
* @return string
|
15 |
+
*/
|
16 |
+
public function getElementHtml()
|
17 |
+
{
|
18 |
+
$html = $this->getBeforeElementHtml();
|
19 |
+
|
20 |
+
|
21 |
+
$html .= '<div id="'.$this->getHtmlId().'" '.$this->serialize($this->getHtmlAttributes()).'>'. $this->getEscapedValue() . "</div>\n";
|
22 |
+
|
23 |
+
if (ini_get('allow_url_fopen') == 1)
|
24 |
+
$html .= file_get_contents('http://www.wyomind.com/pubs/current.php');
|
25 |
+
else
|
26 |
+
$html .= "";
|
27 |
+
|
28 |
+
$html .= "
|
29 |
+
<script>
|
30 |
+
document.observe('dom:loaded',function() {
|
31 |
+
$('row_notificationmanager_notificationmanager_advertise').select('td[class=scope-label]')[0].style.display = 'none';
|
32 |
+
});
|
33 |
+
</script>
|
34 |
+
";
|
35 |
+
|
36 |
+
$html .= $this->getAfterElementHtml();
|
37 |
+
return $html;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Prepare array of anchor attributes
|
42 |
+
*
|
43 |
+
* @return array
|
44 |
+
*/
|
45 |
+
public function getHtmlAttributes()
|
46 |
+
{
|
47 |
+
return array('charset', 'coords', 'href', 'hreflang', 'rel', 'rev', 'name',
|
48 |
+
'shape', 'target', 'accesskey', 'class', 'dir', 'lang', 'style',
|
49 |
+
'tabindex', 'title', 'xml:lang', 'onblur', 'onclick', 'ondblclick',
|
50 |
+
'onfocus', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover',
|
51 |
+
'onmouseup', 'onkeydown', 'onkeypress', 'onkeyup');
|
52 |
+
}
|
53 |
+
}
|
lib/Varien/Data/Form/Element/Wyomindnotificationmanagerextensionslist.php
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Varien_Data_Form_Element_Wyomindnotificationmanagerextensionslist extends Varien_Data_Form_Element_Multiselect {
|
4 |
+
|
5 |
+
public function XML2Array($xml) {
|
6 |
+
$newArray = array();
|
7 |
+
$array = (array) $xml;
|
8 |
+
foreach ($array as $key => $value) {
|
9 |
+
$value = (array) $value;
|
10 |
+
if (isset($value [0])) {
|
11 |
+
$newArray [$key] = trim($value [0]);
|
12 |
+
} else {
|
13 |
+
$newArray [$key] = $this->XML2Array($value, true);
|
14 |
+
}
|
15 |
+
}
|
16 |
+
return $newArray;
|
17 |
+
}
|
18 |
+
|
19 |
+
public function getValues() {
|
20 |
+
$dir = "app/code/local/Wyomind/";
|
21 |
+
$ret = array();
|
22 |
+
if (is_dir($dir)) {
|
23 |
+
if (($dh = opendir($dir)) != false) {
|
24 |
+
while (($file = readdir($dh)) !== false) {
|
25 |
+
if (is_dir($dir . $file) && $file != "." && $file != "..") {
|
26 |
+
if (is_file($dir . $file . '/etc/system.xml')) {
|
27 |
+
$xml = simplexml_load_file($dir . $file . '/etc/system.xml');
|
28 |
+
$namespace = strtolower($file);
|
29 |
+
$label = $this->XML2Array($xml);
|
30 |
+
$label = $label['sections'][$namespace]['label'];
|
31 |
+
|
32 |
+
$enabled = Mage::getConfig()->getModuleConfig('Wyomind_' . ucfirst($namespace))->is('active', 'true');
|
33 |
+
|
34 |
+
if ($enabled)
|
35 |
+
$ret[] = array('label' => $label, 'value' => $file);
|
36 |
+
}
|
37 |
+
}
|
38 |
+
}
|
39 |
+
closedir($dh);
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
$dir = "app/code/community/Wyomind/";
|
44 |
+
if (is_dir($dir)) {
|
45 |
+
if (($dh = opendir($dir)) != false) {
|
46 |
+
while (($file = readdir($dh)) !== false) {
|
47 |
+
if (is_dir($dir . $file) && $file != "." && $file != "..") {
|
48 |
+
if (is_file($dir . $file . '/etc/system.xml')) {
|
49 |
+
$xml = simplexml_load_file($dir . $file . '/etc/system.xml');
|
50 |
+
$namespace = strtolower($file);
|
51 |
+
$label = $this->XML2Array($xml);
|
52 |
+
$label = $label['sections'][$namespace]['label'];
|
53 |
+
|
54 |
+
$enabled = Mage::getConfig()->getModuleConfig('Wyomind_' . ucfirst($namespace))->is('active', 'true');
|
55 |
+
if ($label == null)
|
56 |
+
$label = ucfirst($namespace);
|
57 |
+
if ($enabled)
|
58 |
+
$ret[] = array('label' => $label, 'value' => $file);
|
59 |
+
}
|
60 |
+
}
|
61 |
+
}
|
62 |
+
closedir($dh);
|
63 |
+
}
|
64 |
+
}
|
65 |
+
return $ret;
|
66 |
+
}
|
67 |
+
|
68 |
+
}
|
package.xml
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>BotDefender_by_Lokad</name>
|
4 |
+
<version>1.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://www.wyomind.com/terms-and-conditions.html">OSL v3.0</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Protect your store from the automated retrieval of your prices by competitors.
|
10 |
+
Stop being outpriced every time you make a move. Best suited for retailers.</summary>
|
11 |
+
<description><h2 class="thin">Stop competitors from getting your prices</h2>
|
12 |
+
<span style="font-size:140%">stop being outpriced</span> customer acquisition costs are higher than ever. Why should you lose a costly customer acquisition just because your competitor always aligns itself $1 below your price?<br><br><span style="font-size:140%">stop price wars</span> if your competitors react in near real-time to your prices, then anytime you lower a price, they will lower their price as well. Let competitors pick other opponents to run their price wars.<br><br><span style="font-size:140%">drive competition crazy</span> reverse-engineering BotDefender takes 1000 more time than setting it up. Keep competition distracted for months, while you make decisive moves on your core business.<br><br><span style="font-size:140%">it's free, no catch</span> the Express Plan is free and does not expire. No hidden costs or catch involved. We have a paid plan with extra features but the Express Plan is fully functional.<br><br><h2 class="thin">Obfuscation (Enterprise Plan)</h2>
|
13 |
+
Obfuscation is a more advanced protection method only made available in the Enterprise Plan. The snippet returned by BotDefender is an intricate price of HTML and JavaScript designed to be very hard to decipher, no matter if it's the raw HTML or the DOM (Domain Object Model) that are analyzed.<br><br>Advantages of obfuscation over tar pitting are:<br><br><ul><li><b>Zero overhead</b> caused by an extra HTTP request to be made by the end-user. The snippet is self-contained and does not require any external resources to be rendered as the price.</li><li><b>Zero liability</b> as the snippet is self-contained; it does not matter whether the BotDefender servers are up or down: the mechanism keeps working without any dependency on BotDefender.</li><li><b>Zero leakage</b> when obfuscation is used Lokad <i>cannot</i> collect any information about your web traffic. As far data leakage is concerned, it can't be made more secure than that.<br></li></ul><br>Lokad recommends obfuscation for high-traffic websites.
|
14 |
+
</description>
|
15 |
+
<notes>V1.0.0 // first public release</notes>
|
16 |
+
<authors><author><name>Wyomind</name><user>Wyomind</user><email>contact@wyomind.com</email></author></authors>
|
17 |
+
<date>2013-11-08</date>
|
18 |
+
<time>15:25:46</time>
|
19 |
+
<contents><target name="magecommunity"><dir name="Wyomind"><dir name="Botdefender"><dir name="Block"><dir name="Adminhtml"><file name="Notifications.php" hash="1e70daf7287709d6c33cec793a561d8b"/></dir></dir><dir name="Helper"><file name="Data.php" hash="bc1e57e4cd9aba35e800e894258b8e17"/></dir><dir name="Varien"><dir name="Data"><dir name="Form"><dir name="Element"><file name="Installation.php" hash="9cb39374d4788934f028c23c8be38f92"/></dir></dir></dir></dir><dir name="etc"><file name="config.xml" hash="da1c948584525565d3443b5b39cf4a0d"/><file name="system.xml" hash="ab0166b8f6d1e8f25c7601ddc2091eb5"/></dir></dir></dir></target><target name="magelocal"><dir name="Wyomind"><dir name="Notificationmanager"><dir name="Helper"><file name="Data.php" hash="9be4e11e5846c9f474889294a2704250"/></dir><dir name="Model"><file name="Observer.php" hash="6fe245f236f7064d964db22c1d6fc0eb"/><dir name="Resource"><file name="Setup.php" hash="cc3e8d7e65e5d165a71c5aa6fccd55a0"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="8429eb822b4560b46f2b4eaf42059ff1"/><file name="config.xml" hash="c177e8b986e1c093e354d4c30267b534"/><file name="system.xml" hash="04c7895d1ab29da699f910416d2ecac5"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Wyomind_Botdefender.xml" hash="6961224077915480f64d4c30c6a1e3fa"/><file name="Wyomind_Notificationmanager.xml" hash="32f0dca6673dbfc320b26beba7abf7b8"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="botdefender.xml" hash="e75f14ad7cb6a185f472831cf40a17be"/></dir><dir name="template"><dir name="botdefender"><dir><dir name="bundle"><dir name="catalog"><dir name="product"><file name="price.phtml" hash="893eed0a24df8c168b83250447e5ed83"/><dir name="view"><file name="price.phtml" hash="bf7e73a0038d1aadbf31da8820523ce9"/></dir></dir></dir></dir><dir name="catalog"><dir name="product"><file name="price.phtml" hash="99ad8fa9ddbdbedfb2626ab33abe69b9"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="botdefender.xml" hash="db56f289d4ba772caaff40d4968c1edf"/></dir></dir></dir></dir></target><target name="mageweb"><dir name="lib"><dir name="Varien"><dir name="Data"><dir name="Form"><dir name="Element"><file name="Botdefender.php" hash="1e0cf283d9c855d292c7072178a6909f"/><file name="Wyomindnotificationmanageradvertise.php" hash="31a472b3f55661bbd3a8f2505a48a448"/><file name="Wyomindnotificationmanagerextensionslist.php" hash="13c7beb0b2f51216312077bcac7d6deb"/></dir></dir></dir></dir></dir></target></contents>
|
20 |
+
<compatible/>
|
21 |
+
<dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
|
22 |
+
</package>
|