BotDefender_by_Lokad - Version 1.0.0

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

Files changed (22) hide show
  1. app/code/community/Wyomind/Botdefender/Block/Adminhtml/Notifications.php +59 -0
  2. app/code/community/Wyomind/Botdefender/Helper/Data.php +130 -0
  3. app/code/community/Wyomind/Botdefender/Varien/Data/Form/Element/Installation.php +40 -0
  4. app/code/community/Wyomind/Botdefender/etc/config.xml +77 -0
  5. app/code/community/Wyomind/Botdefender/etc/system.xml +124 -0
  6. app/code/local/Wyomind/Notificationmanager/Helper/Data.php +7 -0
  7. app/code/local/Wyomind/Notificationmanager/Model/Observer.php +140 -0
  8. app/code/local/Wyomind/Notificationmanager/Model/Resource/Setup.php +41 -0
  9. app/code/local/Wyomind/Notificationmanager/etc/adminhtml.xml +50 -0
  10. app/code/local/Wyomind/Notificationmanager/etc/config.xml +88 -0
  11. app/code/local/Wyomind/Notificationmanager/etc/system.xml +60 -0
  12. app/design/adminhtml/default/default/layout/botdefender.xml +9 -0
  13. app/design/frontend/default/default/layout/botdefender.xml +75 -0
  14. app/design/frontend/default/default/template/botdefender/bundle/catalog/product/price.phtml +268 -0
  15. app/design/frontend/default/default/template/botdefender/bundle/catalog/product/view/price.phtml +122 -0
  16. app/design/frontend/default/default/template/botdefender/catalog/product/price.phtml +430 -0
  17. app/etc/modules/Wyomind_Botdefender.xml +10 -0
  18. app/etc/modules/Wyomind_Notificationmanager.xml +15 -0
  19. lib/Varien/Data/Form/Element/Botdefender.php +49 -0
  20. lib/Varien/Data/Form/Element/Wyomindnotificationmanageradvertise.php +53 -0
  21. lib/Varien/Data/Form/Element/Wyomindnotificationmanagerextensionslist.php +68 -0
  22. 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.&#xD;
10
+ Stop being outpriced every time you make a move. Best suited for retailers.</summary>
11
+ <description>&lt;h2 class="thin"&gt;Stop competitors from getting your prices&lt;/h2&gt;&#xD;
12
+ &lt;span style="font-size:140%"&gt;stop being outpriced&lt;/span&gt; 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?&lt;br&gt;&lt;br&gt;&lt;span style="font-size:140%"&gt;stop price wars&lt;/span&gt; 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.&lt;br&gt;&lt;br&gt;&lt;span style="font-size:140%"&gt;drive competition crazy&lt;/span&gt; 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.&lt;br&gt;&lt;br&gt;&lt;span style="font-size:140%"&gt;it's free, no catch&lt;/span&gt; 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.&lt;br&gt;&lt;br&gt;&lt;h2 class="thin"&gt;Obfuscation (Enterprise Plan)&lt;/h2&gt;&#xD;
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.&lt;br&gt;&lt;br&gt;Advantages of obfuscation over tar pitting are:&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Zero overhead&lt;/b&gt; 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.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Zero liability&lt;/b&gt; 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.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Zero leakage&lt;/b&gt; when obfuscation is used Lokad &lt;i&gt;cannot&lt;/i&gt; collect any information about your web traffic. As far data leakage is concerned, it can't be made more secure than that.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;Lokad recommends obfuscation for high-traffic websites.&#xD;
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>