Channelbrain_TierPriceDates - Version 2.0.0

Version Notes

This will add from date and to date to your tier price module

Download this release

Release Info

Developer Webdesk
Extension Channelbrain_TierPriceDates
Version 2.0.0
Comparing to
See all releases


Version 2.0.0

Files changed (171) hide show
  1. app/code/local/Channelbrain/Catalog/Model/Product/Attribute/Backend/Tierprice.php +82 -0
  2. app/code/local/Channelbrain/Catalog/Model/Product/Type/Price.php +99 -0
  3. app/code/local/Channelbrain/Catalog/Model/Resource/Eav/Mysql4/Product/Attribute/Backend/Tierprice.php +50 -0
  4. app/code/local/Channelbrain/Catalog/Model/Resource/Product/Collection.php +2150 -0
  5. app/code/local/Channelbrain/Catalog/etc/config.xml +32 -0
  6. app/code/local/Channelbrain/TierPriceDates/etc/config.xml +57 -0
  7. app/code/local/Channelbrain/TierPriceDates/etc/system.xml +34 -0
  8. app/code/local/Channelbrain/TierPriceDates/sql/tierpricing_setup/mysql4-install-0.1.0.php +6 -0
  9. app/design/adminhtml/default/default/layout/admin.xml +82 -0
  10. app/design/adminhtml/default/default/layout/adminnotification.xml +38 -0
  11. app/design/adminhtml/default/default/layout/api2.xml +147 -0
  12. app/design/adminhtml/default/default/layout/authorizenet.xml +35 -0
  13. app/design/adminhtml/default/default/layout/bundle.xml +118 -0
  14. app/design/adminhtml/default/default/layout/captcha.xml +48 -0
  15. app/design/adminhtml/default/default/layout/catalog.xml +332 -0
  16. app/design/adminhtml/default/default/layout/centinel.xml +70 -0
  17. app/design/adminhtml/default/default/layout/cms.xml +95 -0
  18. app/design/adminhtml/default/default/layout/compiler.xml +35 -0
  19. app/design/adminhtml/default/default/layout/connect.xml +73 -0
  20. app/design/adminhtml/default/default/layout/currencysymbol.xml +34 -0
  21. app/design/adminhtml/default/default/layout/customer.xml +126 -0
  22. app/design/adminhtml/default/default/layout/dataflow.xml +59 -0
  23. app/design/adminhtml/default/default/layout/downloadable.xml +97 -0
  24. app/design/adminhtml/default/default/layout/giftmessage.xml +82 -0
  25. app/design/adminhtml/default/default/layout/importexport.xml +33 -0
  26. app/design/adminhtml/default/default/layout/index.xml +45 -0
  27. app/design/adminhtml/default/default/layout/main.xml +291 -0
  28. app/design/adminhtml/default/default/layout/moneybookers.xml +28 -0
  29. app/design/adminhtml/default/default/layout/newsletter.xml +67 -0
  30. app/design/adminhtml/default/default/layout/oauth.xml +194 -0
  31. app/design/adminhtml/default/default/layout/pagecache.xml +35 -0
  32. app/design/adminhtml/default/default/layout/promo.xml +101 -0
  33. app/design/adminhtml/default/default/layout/report.xml +55 -0
  34. app/design/adminhtml/default/default/layout/rss.xml +45 -0
  35. app/design/adminhtml/default/default/layout/sales.xml +1080 -0
  36. app/design/adminhtml/default/default/layout/search.xml +35 -0
  37. app/design/adminhtml/default/default/layout/tag.xml +88 -0
  38. app/design/adminhtml/default/default/layout/widget.xml +69 -0
  39. app/design/adminhtml/default/default/layout/xmlconnect.xml +237 -0
  40. app/design/adminhtml/default/default/locale/en_US/translate.csv +201 -0
  41. app/design/adminhtml/default/default/template/access_denied.phtml +40 -0
  42. app/design/adminhtml/default/default/template/api/role_users_grid_js.phtml +105 -0
  43. app/design/adminhtml/default/default/template/api/roleinfo.phtml +47 -0
  44. app/design/adminhtml/default/default/template/api/roles.phtml +37 -0
  45. app/design/adminhtml/default/default/template/api/rolesedit.phtml +143 -0
  46. app/design/adminhtml/default/default/template/api/rolesusers.phtml +28 -0
  47. app/design/adminhtml/default/default/template/api/user_roles_grid_js.phtml +85 -0
  48. app/design/adminhtml/default/default/template/api/userinfo.phtml +52 -0
  49. app/design/adminhtml/default/default/template/api/usernroles.phtml +31 -0
  50. app/design/adminhtml/default/default/template/api/userroles.phtml +45 -0
  51. app/design/adminhtml/default/default/template/api/users.phtml +40 -0
  52. app/design/adminhtml/default/default/template/api2/attribute/buttons.phtml +53 -0
  53. app/design/adminhtml/default/default/template/api2/attribute/resource.phtml +158 -0
  54. app/design/adminhtml/default/default/template/api2/permissions/user/edit/tab/roles/js.phtml +59 -0
  55. app/design/adminhtml/default/default/template/api2/role/buttons.phtml +52 -0
  56. app/design/adminhtml/default/default/template/api2/role/users_grid_js.phtml +122 -0
  57. app/design/adminhtml/default/default/template/authorizenet/directpost/iframe.phtml +56 -0
  58. app/design/adminhtml/default/default/template/authorizenet/directpost/info.phtml +157 -0
  59. app/design/adminhtml/default/default/template/backup/dialogs.phtml +164 -0
  60. app/design/adminhtml/default/default/template/backup/left.phtml +27 -0
  61. app/design/adminhtml/default/default/template/backup/list.phtml +40 -0
  62. app/design/adminhtml/default/default/template/bundle/product/composite/fieldset/options/bundle.phtml +95 -0
  63. app/design/adminhtml/default/default/template/bundle/product/composite/fieldset/options/type/checkbox.phtml +52 -0
  64. app/design/adminhtml/default/default/template/bundle/product/composite/fieldset/options/type/multi.phtml +49 -0
  65. app/design/adminhtml/default/default/template/bundle/product/composite/fieldset/options/type/radio.phtml +65 -0
  66. app/design/adminhtml/default/default/template/bundle/product/composite/fieldset/options/type/select.phtml +55 -0
  67. app/design/adminhtml/default/default/template/bundle/product/edit/bundle.phtml +76 -0
  68. app/design/adminhtml/default/default/template/bundle/product/edit/bundle/option.phtml +235 -0
  69. app/design/adminhtml/default/default/template/bundle/product/edit/bundle/option/search.phtml +35 -0
  70. app/design/adminhtml/default/default/template/bundle/product/edit/bundle/option/selection.phtml +352 -0
  71. app/design/adminhtml/default/default/template/bundle/sales/creditmemo/create/items/renderer.phtml +411 -0
  72. app/design/adminhtml/default/default/template/bundle/sales/creditmemo/view/items/renderer.phtml +341 -0
  73. app/design/adminhtml/default/default/template/bundle/sales/invoice/create/items/renderer.phtml +398 -0
  74. app/design/adminhtml/default/default/template/bundle/sales/invoice/view/items/renderer.phtml +340 -0
  75. app/design/adminhtml/default/default/template/bundle/sales/order/view/items/renderer.phtml +415 -0
  76. app/design/adminhtml/default/default/template/bundle/sales/shipment/create/items/renderer.phtml +118 -0
  77. app/design/adminhtml/default/default/template/bundle/sales/shipment/view/items/renderer.phtml +115 -0
  78. app/design/adminhtml/default/default/template/captcha/zend.phtml +56 -0
  79. app/design/adminhtml/default/default/template/catalog/category/checkboxes/tree.phtml +199 -0
  80. app/design/adminhtml/default/default/template/catalog/category/edit.phtml +198 -0
  81. app/design/adminhtml/default/default/template/catalog/category/edit/form.phtml +258 -0
  82. app/design/adminhtml/default/default/template/catalog/category/tree.phtml +480 -0
  83. app/design/adminhtml/default/default/template/catalog/category/widget/tree.phtml +202 -0
  84. app/design/adminhtml/default/default/template/catalog/form/renderer/fieldset/element.phtml +56 -0
  85. app/design/adminhtml/default/default/template/catalog/product.phtml +47 -0
  86. app/design/adminhtml/default/default/template/catalog/product/attribute/js.phtml +338 -0
  87. app/design/adminhtml/default/default/template/catalog/product/attribute/new/created.phtml +54 -0
  88. app/design/adminhtml/default/default/template/catalog/product/attribute/options.phtml +223 -0
  89. app/design/adminhtml/default/default/template/catalog/product/attribute/set/main.phtml +461 -0
  90. app/design/adminhtml/default/default/template/catalog/product/attribute/set/main/tree/attribute.phtml +26 -0
  91. app/design/adminhtml/default/default/template/catalog/product/attribute/set/main/tree/group.phtml +27 -0
  92. app/design/adminhtml/default/default/template/catalog/product/attribute/set/toolbar/add.phtml +41 -0
  93. app/design/adminhtml/default/default/template/catalog/product/attribute/set/toolbar/main.phtml +36 -0
  94. app/design/adminhtml/default/default/template/catalog/product/composite/configure.phtml +54 -0
  95. app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/configurable.phtml +60 -0
  96. app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/grouped.phtml +95 -0
  97. app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options.phtml +45 -0
  98. app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/js.phtml +106 -0
  99. app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/type/date.phtml +94 -0
  100. app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/type/default.phtml +31 -0
  101. app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/type/file.phtml +103 -0
  102. app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/type/select.phtml +39 -0
  103. app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/type/text.phtml +42 -0
  104. app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/qty.phtml +36 -0
  105. app/design/adminhtml/default/default/template/catalog/product/created.phtml +59 -0
  106. app/design/adminhtml/default/default/template/catalog/product/edit.phtml +133 -0
  107. app/design/adminhtml/default/default/template/catalog/product/edit/action/attribute.phtml +61 -0
  108. app/design/adminhtml/default/default/template/catalog/product/edit/action/inventory.phtml +181 -0
  109. app/design/adminhtml/default/default/template/catalog/product/edit/action/websites.phtml +120 -0
  110. app/design/adminhtml/default/default/template/catalog/product/edit/categories.phtml +148 -0
  111. app/design/adminhtml/default/default/template/catalog/product/edit/options.phtml +57 -0
  112. app/design/adminhtml/default/default/template/catalog/product/edit/options/option.phtml +351 -0
  113. app/design/adminhtml/default/default/template/catalog/product/edit/options/type/date.phtml +53 -0
  114. app/design/adminhtml/default/default/template/catalog/product/edit/options/type/file.phtml +61 -0
  115. app/design/adminhtml/default/default/template/catalog/product/edit/options/type/select.phtml +173 -0
  116. app/design/adminhtml/default/default/template/catalog/product/edit/options/type/text.phtml +55 -0
  117. app/design/adminhtml/default/default/template/catalog/product/edit/price/group.phtml +169 -0
  118. app/design/adminhtml/default/default/template/catalog/product/edit/price/tier.phtml +207 -0
  119. app/design/adminhtml/default/default/template/catalog/product/edit/serializer.phtml +33 -0
  120. app/design/adminhtml/default/default/template/catalog/product/edit/super/config.phtml +153 -0
  121. app/design/adminhtml/default/default/template/catalog/product/edit/websites.phtml +100 -0
  122. app/design/adminhtml/default/default/template/catalog/product/helper/gallery.phtml +125 -0
  123. app/design/adminhtml/default/default/template/catalog/product/js.phtml +94 -0
  124. app/design/adminhtml/default/default/template/catalog/product/price.phtml +383 -0
  125. app/design/adminhtml/default/default/template/catalog/product/tab/alert.phtml +37 -0
  126. app/design/adminhtml/default/default/template/catalog/product/tab/inventory.phtml +263 -0
  127. app/design/adminhtml/default/default/template/catalog/product/widget/chooser/container.phtml +37 -0
  128. app/design/adminhtml/default/default/template/catalog/wysiwyg/js.phtml +118 -0
  129. app/design/adminhtml/default/default/template/centinel/authentication/complete.phtml +38 -0
  130. app/design/adminhtml/default/default/template/centinel/authentication/start.phtml +38 -0
  131. app/design/adminhtml/default/default/template/centinel/validation/form.phtml +37 -0
  132. app/design/adminhtml/default/default/template/cms/browser/content.phtml +49 -0
  133. app/design/adminhtml/default/default/template/cms/browser/content/files.phtml +54 -0
  134. app/design/adminhtml/default/default/template/cms/browser/content/newfolder.phtml +33 -0
  135. app/design/adminhtml/default/default/template/cms/browser/content/uploader.phtml +71 -0
  136. app/design/adminhtml/default/default/template/cms/browser/js.phtml +39 -0
  137. app/design/adminhtml/default/default/template/cms/browser/tree.phtml +82 -0
  138. app/design/adminhtml/default/default/template/cms/page/edit/form/renderer/content.phtml +32 -0
  139. app/design/adminhtml/default/default/template/coming.phtml +30 -0
  140. app/design/adminhtml/default/default/template/compiler/process.phtml +94 -0
  141. app/design/adminhtml/default/default/template/connect/extension/custom/authors.phtml +91 -0
  142. app/design/adminhtml/default/default/template/connect/extension/custom/contents.phtml +91 -0
  143. app/design/adminhtml/default/default/template/connect/extension/custom/depends.phtml +137 -0
  144. app/design/adminhtml/default/default/template/connect/extension/custom/load.phtml +35 -0
  145. app/design/adminhtml/default/default/template/connect/extension/custom/package.phtml +91 -0
  146. app/design/adminhtml/default/default/template/connect/extension/custom/release.phtml +29 -0
  147. app/design/adminhtml/default/default/template/currencysymbol/grid.phtml +100 -0
  148. app/design/adminhtml/default/default/template/customer/edit/js.phtml +33 -0
  149. app/design/adminhtml/default/default/template/customer/edit/tab/account/form/renderer/group.phtml +52 -0
  150. app/design/adminhtml/default/default/template/customer/edit/tab/view/grid/item.phtml +46 -0
  151. app/design/adminhtml/default/default/template/customer/online.phtml +34 -0
  152. app/design/adminhtml/default/default/template/customer/sales/order/create/address/form/renderer/vat.phtml +52 -0
  153. app/design/adminhtml/default/default/template/customer/system/config/validatevat.phtml +65 -0
  154. app/design/adminhtml/default/default/template/customer/tab/addresses.phtml +635 -0
  155. app/design/adminhtml/default/default/template/customer/tab/cart.phtml +96 -0
  156. app/design/adminhtml/default/default/template/customer/tab/newsletter.phtml +30 -0
  157. app/design/adminhtml/default/default/template/customer/tab/view.phtml +82 -0
  158. app/design/adminhtml/default/default/template/customer/tab/view/sales.phtml +85 -0
  159. app/design/adminhtml/default/default/template/customer/tab/wishlist.phtml +79 -0
  160. app/design/adminhtml/default/default/template/dashboard/graph.phtml +65 -0
  161. app/design/adminhtml/default/default/template/dashboard/graph/disabled.phtml +31 -0
  162. app/design/adminhtml/default/default/template/dashboard/grid.phtml +86 -0
  163. app/design/adminhtml/default/default/template/dashboard/index.phtml +133 -0
  164. app/design/adminhtml/default/default/template/dashboard/salebar.phtml +36 -0
  165. app/design/adminhtml/default/default/template/dashboard/searches.phtml +35 -0
  166. app/design/adminhtml/default/default/template/dashboard/store/switcher.phtml +77 -0
  167. app/design/adminhtml/default/default/template/dashboard/totalbar.phtml +42 -0
  168. app/design/adminhtml/default/default/template/directory/js/optional_zip_countries.phtml +66 -0
  169. app/design/adminhtml/default/default/template/downloadable/product/composite/fieldset/downloadable.phtml +91 -0
  170. app/design/adminhtml/default/default/template/downloadable/product/edit/downloadable.phtml +273 -0
  171. app/design/adminhtml/default/default/template/downloadable/product/edit/downloadable/links.phtml +87 -0
app/code/local/Channelbrain/Catalog/Model/Product/Attribute/Backend/Tierprice.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Channelbrain_Catalog_Model_Product_Attribute_Backend_Tierprice extends Mage_Catalog_Model_Product_Attribute_Backend_Tierprice
3
+ {
4
+ public function afterSave($object)
5
+ {
6
+
7
+ $this->_getResource()->deleteProductPrices($object, $this->getAttribute());
8
+ $tierPrices = $object->getData($this->getAttribute()->getName());
9
+
10
+ if (!is_array($tierPrices)) {
11
+ return $this;
12
+ }
13
+
14
+ $prices = array();
15
+ foreach ($tierPrices as $tierPrice) {
16
+
17
+
18
+ if (empty($tierPrice['price_qty']) || !isset($tierPrice['price']) || !empty($tierPrice['delete'])) {
19
+ continue;
20
+ }
21
+
22
+ $useForAllGroups = $tierPrice['cust_group'] == Mage_Customer_Model_Group::CUST_GROUP_ALL;
23
+ $customerGroupId = !$useForAllGroups ? $tierPrice['cust_group'] : 0;
24
+ $priceKey = join('-', array(
25
+ $tierPrice['website_id'],
26
+ intval($useForAllGroups),
27
+ $customerGroupId,
28
+ $tierPrice['price_qty']
29
+ ));
30
+ //Add new column "tier_type"
31
+ $prices[$priceKey] = array(
32
+ 'website_id' => $tierPrice['website_id'],
33
+ 'all_groups' => intval($useForAllGroups),
34
+ 'customer_group_id' => $customerGroupId,
35
+ 'qty' => $tierPrice['price_qty'],
36
+ 'value' => $tierPrice['price'],
37
+ 'from_date' => $tierPrice['from_date'],
38
+ 'to_date' => $tierPrice['to_date'],
39
+ );
40
+ }
41
+
42
+ if ($this->getAttribute()->getIsGlobal() == Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE) {
43
+ if ($storeId = $object->getStoreId()) {
44
+ $websites = array(Mage::app()->getStore($storeId)->getWebsite());
45
+ }
46
+ else {
47
+ $websites = Mage::app()->getWebsites();
48
+ }
49
+
50
+ $baseCurrency = Mage::app()->getBaseCurrencyCode();
51
+ $rates = $this->_getWebsiteRates();
52
+ foreach ($websites as $website) {
53
+ /* @var $website Mage_Core_Model_Website */
54
+ if (!is_array($object->getWebsiteIds()) || !in_array($website->getId(), $object->getWebsiteIds())) {
55
+ continue;
56
+ }
57
+ if ($rates[$website->getId()]['code'] != $baseCurrency) {
58
+ foreach ($prices as $data) {
59
+ $priceKey = join('-', array(
60
+ $website->getId(),
61
+ $data['all_groups'],
62
+ $data['customer_group_id'],
63
+ $data['qty']
64
+ ));
65
+ if (!isset($prices[$priceKey])) {
66
+ $prices[$priceKey] = $data;
67
+ $prices[$priceKey]['website_id'] = $website->getId();
68
+ $prices[$priceKey]['value'] = $data['value'] * $rates[$website->getId()]['rate'];
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+ foreach ($prices as $data) {
76
+ $this->_getResource()->insertProductPrice($object, $data);
77
+ }
78
+
79
+ return $this;
80
+ }
81
+ }
82
+ ?>
app/code/local/Channelbrain/Catalog/Model/Product/Type/Price.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Channelbrain_Catalog_Model_Product_Type_Price extends Mage_Catalog_Model_Product_Type_Price
3
+ {
4
+ public function getTierPrice($qty=null, $product)
5
+ {
6
+ $allGroups = Mage_Customer_Model_Group::CUST_GROUP_ALL;
7
+ $prices = $product->getData('tier_price');
8
+ $today=date("Y-m-d");
9
+ if(Mage::getStoreConfig("mypackage/settings/wds_tier_price")){
10
+
11
+
12
+ //print "<pre>";
13
+ //print_r($prices);die;
14
+ if (is_null($prices)) {
15
+
16
+ if ($attribute = $product->getResource()->getAttribute('tier_price')) {
17
+ $attribute->getBackend()->afterLoad($product);
18
+ $prices = $product->getData('tier_price');
19
+ }
20
+ }
21
+
22
+ if (is_null($prices) || !is_array($prices)) {
23
+ if (!is_null($qty)) {
24
+
25
+ return $product->getPrice();
26
+ }
27
+ return array(array(
28
+ 'price' => $product->getPrice(),
29
+ 'website_price' => $product->getPrice(),
30
+ 'price_qty' => 1,
31
+ 'cust_group' => $allGroups,
32
+ ));
33
+ }
34
+
35
+ $custGroup = $this->_getCustomerGroupId($product);
36
+ if ($qty) {
37
+
38
+ $prevQty = 1;
39
+ $prevPrice = $product->getPrice();
40
+ $prevGroup = $allGroups;
41
+ foreach ($prices as $price) {
42
+ if ($price['cust_group']!=$custGroup && $price['cust_group']!=$allGroups) {
43
+ // tier not for current customer group nor is for all groups
44
+ continue;
45
+ }
46
+ if ($qty < $price['price_qty']) {
47
+ // tier is higher than product qty
48
+ continue;
49
+ }
50
+ if ($price['price_qty'] < $prevQty) {
51
+ // higher tier qty already found
52
+ continue;
53
+ }
54
+ if ($price['price_qty'] == $prevQty && $prevGroup != $allGroups && $price['cust_group'] == $allGroups) {
55
+ // found tier qty is same as current tier qty but current tier group is ALL_GROUPS
56
+ continue;
57
+ }
58
+
59
+ $prevPrice = $price['website_price'];
60
+ $prevQty = $price['price_qty'];
61
+
62
+ if(isset($price['from_date']) && isset($price['to_date']))
63
+ {
64
+
65
+ if ($today>=$price['from_date'] && $today<=$price['to_date'])
66
+ {
67
+ $prevPrice=$price['price'];
68
+ }
69
+ else
70
+ {
71
+ $prevPrice=$product->getPrice();
72
+ }
73
+ }
74
+ else
75
+ {
76
+ $prevPrice=$product->getPrice();
77
+ }
78
+ $prevGroup = $price['cust_group'];
79
+ }
80
+ //echo $prevPrice;die;
81
+ return $prevPrice;
82
+ } else {
83
+ foreach ($prices as $i=>$price) {
84
+ if ($price['cust_group']!=$custGroup && $price['cust_group']!=$allGroups) {
85
+ unset($prices[$i]);
86
+ }
87
+ }
88
+ }
89
+ if(isset($prices[0]['from_date']) && isset($prices[0]['to_date']))
90
+ {
91
+ if ($today>=$prices[0]['from_date'] && $today<=$prices[0]['to_date'])
92
+ {
93
+ return ($prices) ? $prices : array();
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ ?>
app/code/local/Channelbrain/Catalog/Model/Resource/Eav/Mysql4/Product/Attribute/Backend/Tierprice.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Channelbrain_Catalog_Model_Resource_Eav_Mysql4_Product_Attribute_Backend_Tierprice extends Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Attribute_Backend_Tierprice
3
+
4
+ {
5
+ public function loadProductPrices($product, $attribute)
6
+ {
7
+ echo "rtrtrt";
8
+ exit;
9
+ echo "Working";
10
+ //add new column name to the sql
11
+ $select = $this->_getReadAdapter()->select()
12
+ ->from($this>getMainTable(), array(
13
+ 'website_id', 'all_groups', 'cust_group' => 'customer_group_id',
14
+ 'price_qty' => 'qty', 'price' => 'value', 'from_date', 'to_date',
15
+ ))
16
+ ->where('entity_id=?', $product->getId())
17
+ ->order('qty');
18
+ if ($attribute->isScopeGlobal()) {
19
+ $select->where('website_id=?', 0);
20
+ }
21
+ else {
22
+ if ($storeId = $product->getStoreId()) {
23
+ $select->where('website_id IN (?)', array(0, Mage::app()->getStore($storeId)->getWebsiteId()));
24
+ }
25
+ }
26
+ return $this->_getReadAdapter()->fetchAll($select);
27
+ }
28
+
29
+ protected function _loadPriceDataColumns($columns){
30
+
31
+ $columns = parent::_loadPriceDataColumns($columns);
32
+ $columns['price_qty'] = 'qty';
33
+ $columns['from_date'] = 'from_date';
34
+ $columns['to_date'] = 'to_date';
35
+ return $columns;
36
+ }
37
+
38
+ public function insertProductPrice($product, $data){
39
+ $fdate=explode("/",$data['from_date']);
40
+ $tdate=explode("/",$data['to_date']);
41
+
42
+ $data['from_date']=$fdate[2]."-".$fdate[0]."-".$fdate[1];
43
+ $data['to_date']=$tdate[2]."-".$tdate[0]."-".$tdate[1];
44
+
45
+ $priceObject = new Varien_Object($data);
46
+ $priceObject->setEntityId($product->getId());
47
+ return $this->savePriceData($priceObject);
48
+ }
49
+ }
50
+ ?>
app/code/local/Channelbrain/Catalog/Model/Resource/Product/Collection.php ADDED
@@ -0,0 +1,2150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Catalog
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+
28
+ /**
29
+ * Product collection
30
+ *
31
+ * @category Mage
32
+ * @package Mage_Catalog
33
+ * @author Magento Core Team <core@magentocommerce.com>
34
+ */
35
+ class Channelbrain_Catalog_Model_Resource_Product_Collection extends Mage_Catalog_Model_Resource_Collection_Abstract
36
+ {
37
+ /**
38
+ * Alias for index table
39
+ */
40
+ const INDEX_TABLE_ALIAS = 'price_index';
41
+
42
+ /**
43
+ * Alias for main table
44
+ */
45
+ const MAIN_TABLE_ALIAS = 'e';
46
+
47
+ /**
48
+ * Catalog Product Flat is enabled cache per store
49
+ *
50
+ * @var array
51
+ */
52
+ protected $_flatEnabled = array();
53
+
54
+ /**
55
+ * Product websites table name
56
+ *
57
+ * @var string
58
+ */
59
+ protected $_productWebsiteTable;
60
+
61
+ /**
62
+ * Product categories table name
63
+ *
64
+ * @var string
65
+ */
66
+ protected $_productCategoryTable;
67
+
68
+ /**
69
+ * Is add URL rewrites to collection flag
70
+ *
71
+ * @var bool
72
+ */
73
+ protected $_addUrlRewrite = false;
74
+
75
+ /**
76
+ * Add URL rewrite for category
77
+ *
78
+ * @var int
79
+ */
80
+ protected $_urlRewriteCategory = '';
81
+
82
+ /**
83
+ * Is add minimal price to product collection flag
84
+ *
85
+ * @var bool
86
+ */
87
+ protected $_addMinimalPrice = false;
88
+
89
+ /**
90
+ * Is add final price to product collection flag
91
+ *
92
+ * @var unknown_type
93
+ */
94
+ protected $_addFinalPrice = false;
95
+
96
+ /**
97
+ * Cache for all ids
98
+ *
99
+ * @var array
100
+ */
101
+ protected $_allIdsCache = null;
102
+
103
+ /**
104
+ * Is add tax percents to product collection flag
105
+ *
106
+ * @var bool
107
+ */
108
+ protected $_addTaxPercents = false;
109
+
110
+ /**
111
+ * Product limitation filters
112
+ * Allowed filters
113
+ * store_id int;
114
+ * category_id int;
115
+ * category_is_anchor int;
116
+ * visibility array|int;
117
+ * website_ids array|int;
118
+ * store_table string;
119
+ * use_price_index bool; join price index table flag
120
+ * customer_group_id int; required for price; customer group limitation for price
121
+ * website_id int; required for price; website limitation for price
122
+ *
123
+ * @var array
124
+ */
125
+ protected $_productLimitationFilters = array();
126
+
127
+ /**
128
+ * Category product count select
129
+ *
130
+ * @var Zend_Db_Select
131
+ */
132
+ protected $_productCountSelect = null;
133
+
134
+ /**
135
+ * Enter description here ...
136
+ *
137
+ * @var bool
138
+ */
139
+ protected $_isWebsiteFilter = false;
140
+
141
+ /**
142
+ * Additional field filters, applied in _productLimitationJoinPrice()
143
+ *
144
+ * @var array
145
+ */
146
+ protected $_priceDataFieldFilters = array();
147
+
148
+ /**
149
+ * Map of price fields
150
+ *
151
+ * @var array
152
+ */
153
+ protected $_map = array('fields' => array(
154
+ 'price' => 'price_index.price',
155
+ 'final_price' => 'price_index.final_price',
156
+ 'min_price' => 'price_index.min_price',
157
+ 'max_price' => 'price_index.max_price',
158
+ 'tier_price' => 'price_index.tier_price',
159
+ 'special_price' => 'price_index.special_price',
160
+ ));
161
+
162
+ /**
163
+ * Price expression sql
164
+ *
165
+ * @var string|null
166
+ */
167
+ protected $_priceExpression;
168
+
169
+ /**
170
+ * Additional price expression sql part
171
+ *
172
+ * @var string|null
173
+ */
174
+ protected $_additionalPriceExpression;
175
+
176
+ /**
177
+ * Max prise (statistics data)
178
+ *
179
+ * @var float
180
+ */
181
+ protected $_maxPrice;
182
+
183
+ /**
184
+ * Min prise (statistics data)
185
+ *
186
+ * @var float
187
+ */
188
+ protected $_minPrice;
189
+
190
+ /**
191
+ * Prise standard deviation (statistics data)
192
+ *
193
+ * @var float
194
+ */
195
+ protected $_priceStandardDeviation;
196
+
197
+ /**
198
+ * Prises count (statistics data)
199
+ *
200
+ * @var int
201
+ */
202
+ protected $_pricesCount = null;
203
+
204
+ /**
205
+ * Cloned Select after dispatching 'catalog_prepare_price_select' event
206
+ *
207
+ * @var Varien_Db_Select
208
+ */
209
+ protected $_catalogPreparePriceSelect = null;
210
+
211
+ /**
212
+ * Get cloned Select after dispatching 'catalog_prepare_price_select' event
213
+ *
214
+ * @return Varien_Db_Select
215
+ */
216
+ public function getCatalogPreparedSelect()
217
+ {
218
+ return $this->_catalogPreparePriceSelect;
219
+ }
220
+
221
+ /**
222
+ * Prepare additional price expression sql part
223
+ *
224
+ * @param Varien_Db_Select $select
225
+ * @return Mage_Catalog_Model_Resource_Product_Collection
226
+ */
227
+ protected function _preparePriceExpressionParameters($select)
228
+ {
229
+ // prepare response object for event
230
+ $response = new Varien_Object();
231
+ $response->setAdditionalCalculations(array());
232
+ $tableAliases = array_keys($select->getPart(Zend_Db_Select::FROM));
233
+ if (in_array(self::INDEX_TABLE_ALIAS, $tableAliases)) {
234
+ $table = self::INDEX_TABLE_ALIAS;
235
+ } else {
236
+ $table = reset($tableAliases);
237
+ }
238
+
239
+ // prepare event arguments
240
+ $eventArgs = array(
241
+ 'select' => $select,
242
+ 'table' => $table,
243
+ 'store_id' => $this->getStoreId(),
244
+ 'response_object' => $response
245
+ );
246
+
247
+ Mage::dispatchEvent('catalog_prepare_price_select', $eventArgs);
248
+
249
+ $additional = join('', $response->getAdditionalCalculations());
250
+ $this->_priceExpression = $table . '.min_price';
251
+ $this->_additionalPriceExpression = $additional;
252
+ $this->_catalogPreparePriceSelect = clone $select;
253
+
254
+ return $this;
255
+ }
256
+
257
+ /**
258
+ * Get price expression sql part
259
+ *
260
+ * @param Varien_Db_Select $select
261
+ * @return string
262
+ */
263
+ public function getPriceExpression($select)
264
+ {
265
+ if (is_null($this->_priceExpression)) {
266
+ $this->_preparePriceExpressionParameters($select);
267
+ }
268
+ return $this->_priceExpression;
269
+ }
270
+
271
+ /**
272
+ * Get additional price expression sql part
273
+ *
274
+ * @param Varien_Db_Select $select
275
+ * @return string
276
+ */
277
+ public function getAdditionalPriceExpression($select)
278
+ {
279
+ if (is_null($this->_additionalPriceExpression)) {
280
+ $this->_preparePriceExpressionParameters($select);
281
+ }
282
+ return $this->_additionalPriceExpression;
283
+ }
284
+
285
+ /**
286
+ * Get currency rate
287
+ *
288
+ * @return float
289
+ */
290
+ public function getCurrencyRate()
291
+ {
292
+ return Mage::app()->getStore($this->getStoreId())->getCurrentCurrencyRate();
293
+ }
294
+
295
+ /**
296
+ * Retrieve Catalog Product Flat Helper object
297
+ *
298
+ * @return Mage_Catalog_Helper_Product_Flat
299
+ */
300
+ public function getFlatHelper()
301
+ {
302
+ return Mage::helper('catalog/product_flat');
303
+ }
304
+
305
+ /**
306
+ * Retrieve is flat enabled flag
307
+ * Return alvays false if magento run admin
308
+ *
309
+ * @return bool
310
+ */
311
+ public function isEnabledFlat()
312
+ {
313
+ if (Mage::app()->getStore()->isAdmin()) {
314
+ return false;
315
+ }
316
+ if (!isset($this->_flatEnabled[$this->getStoreId()])) {
317
+ $this->_flatEnabled[$this->getStoreId()] = $this->getFlatHelper()
318
+ ->isEnabled($this->getStoreId());
319
+ }
320
+ return $this->_flatEnabled[$this->getStoreId()];
321
+ }
322
+
323
+ /**
324
+ * Initialize resources
325
+ *
326
+ */
327
+ protected function _construct()
328
+ {
329
+ if ($this->isEnabledFlat()) {
330
+ $this->_init('catalog/product', 'catalog/product_flat');
331
+ }
332
+ else {
333
+ $this->_init('catalog/product');
334
+ }
335
+ $this->_initTables();
336
+ }
337
+
338
+ /**
339
+ * Define product website and category product tables
340
+ *
341
+ */
342
+ protected function _initTables()
343
+ {
344
+ $this->_productWebsiteTable = $this->getResource()->getTable('catalog/product_website');
345
+ $this->_productCategoryTable= $this->getResource()->getTable('catalog/category_product');
346
+ }
347
+
348
+ /**
349
+ * Standard resource collection initalization
350
+ *
351
+ * @param string $model
352
+ * @param unknown_type $entityModel
353
+ * @return Mage_Catalog_Model_Resource_Product_Collection
354
+ */
355
+ protected function _init($model, $entityModel = null)
356
+ {
357
+ if ($this->isEnabledFlat()) {
358
+ $entityModel = 'catalog/product_flat';
359
+ }
360
+
361
+ return parent::_init($model, $entityModel);
362
+ }
363
+
364
+ /**
365
+ * Prepare static entity fields
366
+ *
367
+ * @return Mage_Catalog_Model_Resource_Product_Collection
368
+ */
369
+ protected function _prepareStaticFields()
370
+ {
371
+ if ($this->isEnabledFlat()) {
372
+ return $this;
373
+ }
374
+ return parent::_prepareStaticFields();
375
+ }
376
+
377
+ /**
378
+ * Retrieve collection empty item
379
+ * Redeclared for specifying id field name without getting resource model inside model
380
+ *
381
+ * @return Varien_Object
382
+ */
383
+ public function getNewEmptyItem()
384
+ {
385
+ $object = parent::getNewEmptyItem();
386
+ if ($this->isEnabledFlat()) {
387
+ $object->setIdFieldName($this->getEntity()->getIdFieldName());
388
+ }
389
+ return $object;
390
+ }
391
+
392
+ /**
393
+ * Set entity to use for attributes
394
+ *
395
+ * @param Mage_Eav_Model_Entity_Abstract $entity
396
+ * @return Mage_Catalog_Model_Resource_Product_Collection
397
+ */
398
+ public function setEntity($entity)
399
+ {
400
+ if ($this->isEnabledFlat() && ($entity instanceof Mage_Core_Model_Resource_Db_Abstract)) {
401
+ $this->_entity = $entity;
402
+ return $this;
403
+ }
404
+ return parent::setEntity($entity);
405
+ }
406
+
407
+ /**
408
+ * Set Store scope for collection
409
+ *
410
+ * @param mixed $store
411
+ * @return Mage_Catalog_Model_Resource_Product_Collection
412
+ */
413
+ public function setStore($store)
414
+ {
415
+ parent::setStore($store);
416
+ if ($this->isEnabledFlat()) {
417
+ $this->getEntity()->setStoreId($this->getStoreId());
418
+ }
419
+ return $this;
420
+ }
421
+
422
+ /**
423
+ * Initialize collection select
424
+ * Redeclared for remove entity_type_id condition
425
+ * in catalog_product_entity we store just products
426
+ *
427
+ * @return Mage_Catalog_Model_Resource_Product_Collection
428
+ */
429
+ protected function _initSelect()
430
+ {
431
+ if ($this->isEnabledFlat()) {
432
+ $this->getSelect()
433
+ ->from(array(self::MAIN_TABLE_ALIAS => $this->getEntity()->getFlatTableName()), null)
434
+ ->columns(array('status' => new Zend_Db_Expr(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)));
435
+ $this->addAttributeToSelect(array('entity_id', 'type_id', 'attribute_set_id'));
436
+ if ($this->getFlatHelper()->isAddChildData()) {
437
+ $this->getSelect()
438
+ ->where('e.is_child=?', 0);
439
+ $this->addAttributeToSelect(array('child_id', 'is_child'));
440
+ }
441
+ } else {
442
+ $this->getSelect()->from(array(self::MAIN_TABLE_ALIAS => $this->getEntity()->getEntityTable()));
443
+ }
444
+ return $this;
445
+ }
446
+
447
+ /**
448
+ * Load attributes into loaded entities
449
+ *
450
+ * @param bool $printQuery
451
+ * @param bool $logQuery
452
+ * @return Mage_Catalog_Model_Resource_Product_Collection
453
+ */
454
+ public function _loadAttributes($printQuery = false, $logQuery = false)
455
+ {
456
+ if ($this->isEnabledFlat()) {
457
+ return $this;
458
+ }
459
+ return parent::_loadAttributes($printQuery, $logQuery);
460
+ }
461
+
462
+ /**
463
+ * Add attribute to entities in collection
464
+ * If $attribute=='*' select all attributes
465
+ *
466
+ * @param array|string|integer|Mage_Core_Model_Config_Element $attribute
467
+ * @param false|string $joinType
468
+ * @return Mage_Catalog_Model_Resource_Product_Collection
469
+ */
470
+ public function addAttributeToSelect($attribute, $joinType = false)
471
+ {
472
+ if ($this->isEnabledFlat()) {
473
+ if (!is_array($attribute)) {
474
+ $attribute = array($attribute);
475
+ }
476
+ foreach ($attribute as $attributeCode) {
477
+ if ($attributeCode == '*') {
478
+ foreach ($this->getEntity()->getAllTableColumns() as $column) {
479
+ $this->getSelect()->columns('e.' . $column);
480
+ $this->_selectAttributes[$column] = $column;
481
+ $this->_staticFields[$column] = $column;
482
+ }
483
+ } else {
484
+ $columns = $this->getEntity()->getAttributeForSelect($attributeCode);
485
+ if ($columns) {
486
+ foreach ($columns as $alias => $column) {
487
+ $this->getSelect()->columns(array($alias => 'e.' . $column));
488
+ $this->_selectAttributes[$column] = $column;
489
+ $this->_staticFields[$column] = $column;
490
+ }
491
+ }
492
+ }
493
+ }
494
+ return $this;
495
+ }
496
+ return parent::addAttributeToSelect($attribute, $joinType);
497
+ }
498
+
499
+ /**
500
+ * Add tax class id attribute to select and join price rules data if needed
501
+ *
502
+ * @return Mage_Catalog_Model_Resource_Product_Collection
503
+ */
504
+ protected function _beforeLoad()
505
+ {
506
+ Mage::dispatchEvent('catalog_product_collection_load_before', array('collection' => $this));
507
+
508
+ return parent::_beforeLoad();
509
+ }
510
+
511
+ /**
512
+ * Processing collection items after loading
513
+ * Adding url rewrites, minimal prices, final prices, tax percents
514
+ *
515
+ * @return Mage_Catalog_Model_Resource_Product_Collection
516
+ */
517
+ protected function _afterLoad()
518
+ {
519
+ if ($this->_addUrlRewrite) {
520
+ $this->_addUrlRewrite($this->_urlRewriteCategory);
521
+ }
522
+
523
+ $this->_prepareUrlDataObject();
524
+
525
+ if (count($this) > 0) {
526
+ Mage::dispatchEvent('catalog_product_collection_load_after', array('collection' => $this));
527
+ }
528
+
529
+ foreach ($this as $product) {
530
+ if ($product->isRecurring() && $profile = $product->getRecurringProfile()) {
531
+ $product->setRecurringProfile(unserialize($profile));
532
+ }
533
+ }
534
+
535
+ return $this;
536
+ }
537
+
538
+ /**
539
+ * Prepare Url Data object
540
+ *
541
+ * @return Mage_Catalog_Model_Resource_Product_Collection
542
+ */
543
+ protected function _prepareUrlDataObject()
544
+ {
545
+ $objects = array();
546
+ /** @var $item Mage_Catalog_Model_Product */
547
+ foreach ($this->_items as $item) {
548
+ if ($this->getFlag('do_not_use_category_id')) {
549
+ $item->setDoNotUseCategoryId(true);
550
+ }
551
+ if (!$item->isVisibleInSiteVisibility() && $item->getItemStoreId()) {
552
+ $objects[$item->getEntityId()] = $item->getItemStoreId();
553
+ }
554
+ }
555
+
556
+ if ($objects && $this->hasFlag('url_data_object')) {
557
+ $objects = Mage::getResourceSingleton('catalog/url')
558
+ ->getRewriteByProductStore($objects);
559
+ foreach ($this->_items as $item) {
560
+ if (isset($objects[$item->getEntityId()])) {
561
+ $object = new Varien_Object($objects[$item->getEntityId()]);
562
+ $item->setUrlDataObject($object);
563
+ }
564
+ }
565
+ }
566
+
567
+ return $this;
568
+ }
569
+
570
+ /**
571
+ * Add collection filters by identifiers
572
+ *
573
+ * @param mixed $productId
574
+ * @param boolean $exclude
575
+ * @return Mage_Catalog_Model_Resource_Product_Collection
576
+ */
577
+ public function addIdFilter($productId, $exclude = false)
578
+ {
579
+ if (empty($productId)) {
580
+ $this->_setIsLoaded(true);
581
+ return $this;
582
+ }
583
+ if (is_array($productId)) {
584
+ if (!empty($productId)) {
585
+ if ($exclude) {
586
+ $condition = array('nin' => $productId);
587
+ } else {
588
+ $condition = array('in' => $productId);
589
+ }
590
+ } else {
591
+ $condition = '';
592
+ }
593
+ } else {
594
+ if ($exclude) {
595
+ $condition = array('neq' => $productId);
596
+ } else {
597
+ $condition = $productId;
598
+ }
599
+ }
600
+ $this->addFieldToFilter('entity_id', $condition);
601
+ return $this;
602
+ }
603
+
604
+ /**
605
+ * Adding product website names to result collection
606
+ * Add for each product websites information
607
+ *
608
+ * @return Mage_Catalog_Model_Resource_Product_Collection
609
+ */
610
+ public function addWebsiteNamesToResult()
611
+ {
612
+ $productWebsites = array();
613
+ foreach ($this as $product) {
614
+ $productWebsites[$product->getId()] = array();
615
+ }
616
+
617
+ if (!empty($productWebsites)) {
618
+ $select = $this->getConnection()->select()
619
+ ->from(array('product_website' => $this->_productWebsiteTable))
620
+ ->join(
621
+ array('website' => $this->getResource()->getTable('core/website')),
622
+ 'website.website_id = product_website.website_id',
623
+ array('name'))
624
+ ->where('product_website.product_id IN (?)', array_keys($productWebsites))
625
+ ->where('website.website_id > ?', 0);
626
+
627
+ $data = $this->getConnection()->fetchAll($select);
628
+ foreach ($data as $row) {
629
+ $productWebsites[$row['product_id']][] = $row['website_id'];
630
+ }
631
+ }
632
+
633
+ foreach ($this as $product) {
634
+ if (isset($productWebsites[$product->getId()])) {
635
+ $product->setData('websites', $productWebsites[$product->getId()]);
636
+ }
637
+ }
638
+ return $this;
639
+ }
640
+
641
+ /**
642
+ * Add store availability filter. Include availability product
643
+ * for store website
644
+ *
645
+ * @param mixed $store
646
+ * @return Mage_Catalog_Model_Resource_Product_Collection
647
+ */
648
+ public function addStoreFilter($store = null)
649
+ {
650
+ if ($store === null) {
651
+ $store = $this->getStoreId();
652
+ }
653
+ $store = Mage::app()->getStore($store);
654
+
655
+ if (!$store->isAdmin()) {
656
+ $this->setStoreId($store);
657
+ $this->_productLimitationFilters['store_id'] = $store->getId();
658
+ $this->_applyProductLimitations();
659
+ }
660
+
661
+ return $this;
662
+ }
663
+
664
+ /**
665
+ * Add website filter to collection
666
+ *
667
+ * @param unknown_type $websites
668
+ * @return Mage_Catalog_Model_Resource_Product_Collection
669
+ */
670
+ public function addWebsiteFilter($websites = null)
671
+ {
672
+ if (!is_array($websites)) {
673
+ $websites = array(Mage::app()->getWebsite($websites)->getId());
674
+ }
675
+
676
+ $this->_productLimitationFilters['website_ids'] = $websites;
677
+ $this->_applyProductLimitations();
678
+
679
+ return $this;
680
+ }
681
+
682
+ /**
683
+ * Get filters applied to collection
684
+ *
685
+ * @return array
686
+ */
687
+ public function getLimitationFilters()
688
+ {
689
+ return $this->_productLimitationFilters;
690
+ }
691
+
692
+ /**
693
+ * Specify category filter for product collection
694
+ *
695
+ * @param Mage_Catalog_Model_Category $category
696
+ * @return Mage_Catalog_Model_Resource_Product_Collection
697
+ */
698
+ public function addCategoryFilter(Mage_Catalog_Model_Category $category)
699
+ {
700
+ $this->_productLimitationFilters['category_id'] = $category->getId();
701
+ if ($category->getIsAnchor()) {
702
+ unset($this->_productLimitationFilters['category_is_anchor']);
703
+ } else {
704
+ $this->_productLimitationFilters['category_is_anchor'] = 1;
705
+ }
706
+
707
+ if ($this->getStoreId() == Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID) {
708
+ $this->_applyZeroStoreProductLimitations();
709
+ } else {
710
+ $this->_applyProductLimitations();
711
+ }
712
+
713
+ return $this;
714
+ }
715
+
716
+ /**
717
+ * Join minimal price attribute to result
718
+ *
719
+ * @return Mage_Catalog_Model_Resource_Product_Collection
720
+ */
721
+ public function joinMinimalPrice()
722
+ {
723
+ $this->addAttributeToSelect('price')
724
+ ->addAttributeToSelect('minimal_price');
725
+ return $this;
726
+ }
727
+
728
+ /**
729
+ * Retrieve max value by attribute
730
+ *
731
+ * @param string $attribute
732
+ * @return mixed
733
+ */
734
+ public function getMaxAttributeValue($attribute)
735
+ {
736
+ $select = clone $this->getSelect();
737
+ $attribute = $this->getEntity()->getAttribute($attribute);
738
+ $attributeCode = $attribute->getAttributeCode();
739
+ $tableAlias = $attributeCode . '_max_value';
740
+ $fieldAlias = 'max_' . $attributeCode;
741
+ $condition = 'e.entity_id = ' . $tableAlias . '.entity_id
742
+ AND '.$this->_getConditionSql($tableAlias . '.attribute_id', $attribute->getId());
743
+
744
+ $select->join(
745
+ array($tableAlias => $attribute->getBackend()->getTable()),
746
+ $condition,
747
+ array($fieldAlias => new Zend_Db_Expr('MAX('.$tableAlias.'.value)'))
748
+ )
749
+ ->group('e.entity_type_id');
750
+
751
+ $data = $this->getConnection()->fetchRow($select);
752
+ if (isset($data[$fieldAlias])) {
753
+ return $data[$fieldAlias];
754
+ }
755
+
756
+ return null;
757
+ }
758
+
759
+ /**
760
+ * Retrieve ranging product count for arrtibute range
761
+ *
762
+ * @param string $attribute
763
+ * @param int $range
764
+ * @return array
765
+ */
766
+ public function getAttributeValueCountByRange($attribute, $range)
767
+ {
768
+ $select = clone $this->getSelect();
769
+ $attribute = $this->getEntity()->getAttribute($attribute);
770
+ $attributeCode = $attribute->getAttributeCode();
771
+ $tableAlias = $attributeCode . '_range_count_value';
772
+
773
+ $condition = 'e.entity_id = ' . $tableAlias . '.entity_id
774
+ AND ' . $this->_getConditionSql($tableAlias . '.attribute_id', $attribute->getId());
775
+
776
+ $select->reset(Zend_Db_Select::GROUP);
777
+ $select->join(
778
+ array($tableAlias => $attribute->getBackend()->getTable()),
779
+ $condition,
780
+ array(
781
+ 'count_' . $attributeCode => new Zend_Db_Expr('COUNT(DISTINCT e.entity_id)'),
782
+ 'range_' . $attributeCode => new Zend_Db_Expr(
783
+ 'CEIL((' . $tableAlias . '.value+0.01)/' . $range . ')')
784
+ )
785
+ )
786
+ ->group('range_' . $attributeCode);
787
+
788
+ $data = $this->getConnection()->fetchAll($select);
789
+ $res = array();
790
+
791
+ foreach ($data as $row) {
792
+ $res[$row['range_' . $attributeCode]] = $row['count_' . $attributeCode];
793
+ }
794
+ return $res;
795
+ }
796
+
797
+ /**
798
+ * Retrieve product count by some value of attribute
799
+ *
800
+ * @param string $attribute
801
+ * @return array($value=>$count)
802
+ */
803
+ public function getAttributeValueCount($attribute)
804
+ {
805
+ $select = clone $this->getSelect();
806
+ $attribute = $this->getEntity()->getAttribute($attribute);
807
+ $attributeCode = $attribute->getAttributeCode();
808
+ $tableAlias = $attributeCode . '_value_count';
809
+
810
+ $select->reset(Zend_Db_Select::GROUP);
811
+ $condition = 'e.entity_id=' . $tableAlias . '.entity_id
812
+ AND '.$this->_getConditionSql($tableAlias . '.attribute_id', $attribute->getId());
813
+
814
+ $select->join(
815
+ array($tableAlias => $attribute->getBackend()->getTable()),
816
+ $condition,
817
+ array(
818
+ 'count_' . $attributeCode => new Zend_Db_Expr('COUNT(DISTINCT e.entity_id)'),
819
+ 'value_' . $attributeCode => new Zend_Db_Expr($tableAlias . '.value')
820
+ )
821
+ )
822
+ ->group('value_' . $attributeCode);
823
+
824
+ $data = $this->getConnection()->fetchAll($select);
825
+ $res = array();
826
+
827
+ foreach ($data as $row) {
828
+ $res[$row['value_' . $attributeCode]] = $row['count_' . $attributeCode];
829
+ }
830
+ return $res;
831
+ }
832
+
833
+ /**
834
+ * Return all attribute values as array in form:
835
+ * array(
836
+ * [entity_id_1] => array(
837
+ * [store_id_1] => store_value_1,
838
+ * [store_id_2] => store_value_2,
839
+ * ...
840
+ * [store_id_n] => store_value_n
841
+ * ),
842
+ * ...
843
+ * )
844
+ *
845
+ * @param string $attribute attribute code
846
+ * @return array
847
+ */
848
+ public function getAllAttributeValues($attribute)
849
+ {
850
+ /** @var $select Varien_Db_Select */
851
+ $select = clone $this->getSelect();
852
+ $attribute = $this->getEntity()->getAttribute($attribute);
853
+
854
+ $select->reset()
855
+ ->from($attribute->getBackend()->getTable(), array('entity_id', 'store_id', 'value'))
856
+ ->where('attribute_id = ?', (int)$attribute->getId());
857
+
858
+ $data = $this->getConnection()->fetchAll($select);
859
+ $res = array();
860
+
861
+ foreach ($data as $row) {
862
+ $res[$row['entity_id']][$row['store_id']] = $row['value'];
863
+ }
864
+
865
+ return $res;
866
+ }
867
+
868
+ /**
869
+ * Get SQL for get record count without left JOINs
870
+ *
871
+ * @return Varien_Db_Select
872
+ */
873
+ public function getSelectCountSql()
874
+ {
875
+ return $this->_getSelectCountSql();
876
+ }
877
+
878
+ /**
879
+ * Get SQL for get record count
880
+ *
881
+ * @param bool $resetLeftJoins
882
+ * @return Varien_Db_Select
883
+ */
884
+ protected function _getSelectCountSql($select = null, $resetLeftJoins = true)
885
+ {
886
+ $this->_renderFilters();
887
+ $countSelect = (is_null($select)) ?
888
+ $this->_getClearSelect() :
889
+ $this->_buildClearSelect($select);
890
+ $countSelect->columns('COUNT(DISTINCT e.entity_id)');
891
+ if ($resetLeftJoins) {
892
+ $countSelect->resetJoinLeft();
893
+ }
894
+ return $countSelect;
895
+ }
896
+
897
+ /**
898
+ * Prepare statistics data
899
+ *
900
+ * @return Mage_Catalog_Model_Resource_Product_Collection
901
+ */
902
+ protected function _prepareStatisticsData()
903
+ {
904
+ $select = clone $this->getSelect();
905
+ $priceExpression = $this->getPriceExpression($select) . ' ' . $this->getAdditionalPriceExpression($select);
906
+ $sqlEndPart = ') * ' . $this->getCurrencyRate() . ', 2)';
907
+ $select = $this->_getSelectCountSql($select, false);
908
+ $select->columns('ROUND(MAX(' . $priceExpression . $sqlEndPart);
909
+ $select->columns('ROUND(MIN(' . $priceExpression . $sqlEndPart);
910
+ $select->columns($this->getConnection()->getStandardDeviationSql('ROUND((' . $priceExpression . $sqlEndPart));
911
+ $select->where($this->getPriceExpression($select) . ' IS NOT NULL');
912
+ $row = $this->getConnection()->fetchRow($select, $this->_bindParams, Zend_Db::FETCH_NUM);
913
+ $this->_pricesCount = (int)$row[0];
914
+ $this->_maxPrice = (float)$row[1];
915
+ $this->_minPrice = (float)$row[2];
916
+ $this->_priceStandardDeviation = (float)$row[3];
917
+
918
+ return $this;
919
+ }
920
+
921
+ /**
922
+ * Retreive clear select
923
+ *
924
+ * @return Varien_Db_Select
925
+ */
926
+ protected function _getClearSelect()
927
+ {
928
+ return $this->_buildClearSelect();
929
+ }
930
+
931
+ /**
932
+ * Build clear select
933
+ *
934
+ * @param Varien_Db_Select $select
935
+ * @return Varien_Db_Select
936
+ */
937
+ protected function _buildClearSelect($select = null)
938
+ {
939
+ if (is_null($select)) {
940
+ $select = clone $this->getSelect();
941
+ }
942
+ $select->reset(Zend_Db_Select::ORDER);
943
+ $select->reset(Zend_Db_Select::LIMIT_COUNT);
944
+ $select->reset(Zend_Db_Select::LIMIT_OFFSET);
945
+ $select->reset(Zend_Db_Select::COLUMNS);
946
+
947
+ return $select;
948
+ }
949
+
950
+ /**
951
+ * Retrive all ids for collection
952
+ *
953
+ * @param unknown_type $limit
954
+ * @param unknown_type $offset
955
+ * @return array
956
+ */
957
+ public function getAllIds($limit = null, $offset = null)
958
+ {
959
+ $idsSelect = $this->_getClearSelect();
960
+ $idsSelect->columns('e.' . $this->getEntity()->getIdFieldName());
961
+ $idsSelect->limit($limit, $offset);
962
+ $idsSelect->resetJoinLeft();
963
+
964
+ return $this->getConnection()->fetchCol($idsSelect, $this->_bindParams);
965
+ }
966
+
967
+ /**
968
+ * Retreive product count select for categories
969
+ *
970
+ * @return Varien_Db_Select
971
+ */
972
+ public function getProductCountSelect()
973
+ {
974
+ if ($this->_productCountSelect === null) {
975
+ $this->_productCountSelect = clone $this->getSelect();
976
+ $this->_productCountSelect->reset(Zend_Db_Select::COLUMNS)
977
+ ->reset(Zend_Db_Select::GROUP)
978
+ ->reset(Zend_Db_Select::ORDER)
979
+ ->distinct(false)
980
+ ->join(array('count_table' => $this->getTable('catalog/category_product_index')),
981
+ 'count_table.product_id = e.entity_id',
982
+ array(
983
+ 'count_table.category_id',
984
+ 'product_count' => new Zend_Db_Expr('COUNT(DISTINCT count_table.product_id)')
985
+ )
986
+ )
987
+ ->where('count_table.store_id = ?', $this->getStoreId())
988
+ ->group('count_table.category_id');
989
+ }
990
+
991
+ return $this->_productCountSelect;
992
+ }
993
+
994
+ /**
995
+ * Destruct product count select
996
+ *
997
+ * @return Mage_Catalog_Model_Resource_Product_Collection
998
+ */
999
+ public function unsProductCountSelect()
1000
+ {
1001
+ $this->_productCountSelect = null;
1002
+ return $this;
1003
+ }
1004
+
1005
+ /**
1006
+ * Adding product count to categories collection
1007
+ *
1008
+ * @param Mage_Eav_Model_Entity_Collection_Abstract $categoryCollection
1009
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1010
+ */
1011
+ public function addCountToCategories($categoryCollection)
1012
+ {
1013
+ $isAnchor = array();
1014
+ $isNotAnchor = array();
1015
+ foreach ($categoryCollection as $category) {
1016
+ if ($category->getIsAnchor()) {
1017
+ $isAnchor[] = $category->getId();
1018
+ } else {
1019
+ $isNotAnchor[] = $category->getId();
1020
+ }
1021
+ }
1022
+ $productCounts = array();
1023
+ if ($isAnchor || $isNotAnchor) {
1024
+ $select = $this->getProductCountSelect();
1025
+
1026
+ Mage::dispatchEvent(
1027
+ 'catalog_product_collection_before_add_count_to_categories',
1028
+ array('collection' => $this)
1029
+ );
1030
+
1031
+ if ($isAnchor) {
1032
+ $anchorStmt = clone $select;
1033
+ $anchorStmt->limit(); //reset limits
1034
+ $anchorStmt->where('count_table.category_id IN (?)', $isAnchor);
1035
+ $productCounts += $this->getConnection()->fetchPairs($anchorStmt);
1036
+ $anchorStmt = null;
1037
+ }
1038
+ if ($isNotAnchor) {
1039
+ $notAnchorStmt = clone $select;
1040
+ $notAnchorStmt->limit(); //reset limits
1041
+ $notAnchorStmt->where('count_table.category_id IN (?)', $isNotAnchor);
1042
+ $notAnchorStmt->where('count_table.is_parent = 1');
1043
+ $productCounts += $this->getConnection()->fetchPairs($notAnchorStmt);
1044
+ $notAnchorStmt = null;
1045
+ }
1046
+ $select = null;
1047
+ $this->unsProductCountSelect();
1048
+ }
1049
+
1050
+ foreach ($categoryCollection as $category) {
1051
+ $_count = 0;
1052
+ if (isset($productCounts[$category->getId()])) {
1053
+ $_count = $productCounts[$category->getId()];
1054
+ }
1055
+ $category->setProductCount($_count);
1056
+ }
1057
+
1058
+ return $this;
1059
+ }
1060
+
1061
+ /**
1062
+ * Retrieve unique attribute set ids in collection
1063
+ *
1064
+ * @return array
1065
+ */
1066
+ public function getSetIds()
1067
+ {
1068
+ $select = clone $this->getSelect();
1069
+ /** @var $select Varien_Db_Select */
1070
+ $select->reset(Zend_Db_Select::COLUMNS);
1071
+ $select->distinct(true);
1072
+ $select->columns('attribute_set_id');
1073
+ return $this->getConnection()->fetchCol($select);
1074
+ }
1075
+
1076
+ /**
1077
+ * Return array of unique product type ids in collection
1078
+ *
1079
+ * @return array
1080
+ */
1081
+ public function getProductTypeIds()
1082
+ {
1083
+ $select = clone $this->getSelect();
1084
+ /** @var $select Varien_Db_Select */
1085
+ $select->reset(Zend_Db_Select::COLUMNS);
1086
+ $select->distinct(true);
1087
+ $select->columns('type_id');
1088
+ return $this->getConnection()->fetchCol($select);
1089
+ }
1090
+
1091
+ /**
1092
+ * Joins url rewrite rules to collection
1093
+ *
1094
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1095
+ */
1096
+ public function joinUrlRewrite()
1097
+ {
1098
+ $this->joinTable(
1099
+ 'core/url_rewrite',
1100
+ 'entity_id=entity_id',
1101
+ array('request_path'),
1102
+ '{{table}}.type = ' . Mage_Core_Model_Url_Rewrite::TYPE_PRODUCT,
1103
+ 'left'
1104
+ );
1105
+
1106
+ return $this;
1107
+ }
1108
+
1109
+ /**
1110
+ * Add URL rewrites data to product
1111
+ * If collection loadded - run processing else set flag
1112
+ *
1113
+ * @param int $categoryId
1114
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1115
+ */
1116
+ public function addUrlRewrite($categoryId = '')
1117
+ {
1118
+ $this->_addUrlRewrite = true;
1119
+ if (Mage::getStoreConfig(Mage_Catalog_Helper_Product::XML_PATH_PRODUCT_URL_USE_CATEGORY, $this->getStoreId())) {
1120
+ $this->_urlRewriteCategory = $categoryId;
1121
+ } else {
1122
+ $this->_urlRewriteCategory = 0;
1123
+ }
1124
+
1125
+ if ($this->isLoaded()) {
1126
+ $this->_addUrlRewrite();
1127
+ }
1128
+
1129
+ return $this;
1130
+ }
1131
+
1132
+ /**
1133
+ * Add URL rewrites to collection
1134
+ *
1135
+ */
1136
+ protected function _addUrlRewrite()
1137
+ {
1138
+ $urlRewrites = null;
1139
+ if ($this->_cacheConf) {
1140
+ if (!($urlRewrites = Mage::app()->loadCache($this->_cacheConf['prefix'] . 'urlrewrite'))) {
1141
+ $urlRewrites = null;
1142
+ } else {
1143
+ $urlRewrites = unserialize($urlRewrites);
1144
+ }
1145
+ }
1146
+
1147
+ if (!$urlRewrites) {
1148
+ $productIds = array();
1149
+ foreach($this->getItems() as $item) {
1150
+ $productIds[] = $item->getEntityId();
1151
+ }
1152
+ if (!count($productIds)) {
1153
+ return;
1154
+ }
1155
+
1156
+ $select = $this->getConnection()->select()
1157
+ ->from($this->getTable('core/url_rewrite'), array('product_id', 'request_path'))
1158
+ ->where('store_id = ?', Mage::app()->getStore()->getId())
1159
+ ->where('is_system = ?', 1)
1160
+ ->where('category_id = ? OR category_id IS NULL', $this->_urlRewriteCategory)
1161
+ ->where('product_id IN(?)', $productIds)
1162
+ ->order('category_id ' . self::SORT_ORDER_DESC); // more priority is data with category id
1163
+ $urlRewrites = array();
1164
+
1165
+ foreach ($this->getConnection()->fetchAll($select) as $row) {
1166
+ if (!isset($urlRewrites[$row['product_id']])) {
1167
+ $urlRewrites[$row['product_id']] = $row['request_path'];
1168
+ }
1169
+ }
1170
+
1171
+ if ($this->_cacheConf) {
1172
+ Mage::app()->saveCache(
1173
+ serialize($urlRewrites),
1174
+ $this->_cacheConf['prefix'] . 'urlrewrite',
1175
+ array_merge($this->_cacheConf['tags'], array(Mage_Catalog_Model_Product_Url::CACHE_TAG)),
1176
+ $this->_cacheLifetime
1177
+ );
1178
+ }
1179
+ }
1180
+
1181
+ foreach($this->getItems() as $item) {
1182
+ if (isset($urlRewrites[$item->getEntityId()])) {
1183
+ $item->setData('request_path', $urlRewrites[$item->getEntityId()]);
1184
+ } else {
1185
+ $item->setData('request_path', false);
1186
+ }
1187
+ }
1188
+ }
1189
+
1190
+ /**
1191
+ * Add minimal price data to result
1192
+ *
1193
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1194
+ */
1195
+ public function addMinimalPrice()
1196
+ {
1197
+ return $this->addPriceData();
1198
+ }
1199
+
1200
+ /**
1201
+ * Add minimal price to product collection
1202
+ *
1203
+ * @deprecated sinse 1.3.2.2
1204
+ * @see Mage_Catalog_Model_Resource_Product_Collection::addPriceData
1205
+ *
1206
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1207
+ */
1208
+ protected function _addMinimalPrice()
1209
+ {
1210
+ return $this;
1211
+ }
1212
+
1213
+ /**
1214
+ * Add price data for calculate final price
1215
+ *
1216
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1217
+ */
1218
+ public function addFinalPrice()
1219
+ {
1220
+ return $this->addPriceData();
1221
+ }
1222
+
1223
+ /**
1224
+ * Join prices from price rules to products collection
1225
+ *
1226
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1227
+ */
1228
+ protected function _joinPriceRules()
1229
+ {
1230
+ if ($this->isEnabledFlat()) {
1231
+ $customerGroup = Mage::getSingleton('customer/session')->getCustomerGroupId();
1232
+ $priceColumn = 'e.display_price_group_' . $customerGroup;
1233
+ $this->getSelect()->columns(array('_rule_price' => $priceColumn));
1234
+
1235
+ return $this;
1236
+ }
1237
+ if (!Mage::helper('catalog')->isModuleEnabled('Mage_CatalogRule')) {
1238
+ return $this;
1239
+ }
1240
+ $wId = Mage::app()->getWebsite()->getId();
1241
+ $gId = Mage::getSingleton('customer/session')->getCustomerGroupId();
1242
+
1243
+ $storeDate = Mage::app()->getLocale()->storeTimeStamp($this->getStoreId());
1244
+ $conditions = 'price_rule.product_id = e.entity_id AND ';
1245
+ $conditions .= "price_rule.rule_date = '".$this->getResource()->formatDate($storeDate, false)."' AND ";
1246
+ $conditions .= $this->getConnection()->quoteInto('price_rule.website_id = ? AND', $wId);
1247
+ $conditions .= $this->getConnection()->quoteInto('price_rule.customer_group_id = ?', $gId);
1248
+
1249
+ $this->getSelect()->joinLeft(
1250
+ array('price_rule' => $this->getTable('catalogrule/rule_product_price')),
1251
+ $conditions,
1252
+ array('rule_price' => 'rule_price')
1253
+ );
1254
+ return $this;
1255
+ }
1256
+
1257
+ /**
1258
+ * Add final price to the product
1259
+ *
1260
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1261
+ */
1262
+ protected function _addFinalPrice()
1263
+ {
1264
+ foreach ($this->_items as $product) {
1265
+ $basePrice = $product->getPrice();
1266
+ $specialPrice = $product->getSpecialPrice();
1267
+ $specialPriceFrom = $product->getSpecialFromDate();
1268
+ $specialPriceTo = $product->getSpecialToDate();
1269
+ if ($this->isEnabledFlat()) {
1270
+ $rulePrice = null;
1271
+ if ($product->getData('_rule_price') != $basePrice) {
1272
+ $rulePrice = $product->getData('_rule_price');
1273
+ }
1274
+ } else {
1275
+ $rulePrice = $product->getData('_rule_price');
1276
+ }
1277
+
1278
+ $finalPrice = $product->getPriceModel()->calculatePrice(
1279
+ $basePrice,
1280
+ $specialPrice,
1281
+ $specialPriceFrom,
1282
+ $specialPriceTo,
1283
+ $rulePrice,
1284
+ null,
1285
+ null,
1286
+ $product->getId()
1287
+ );
1288
+
1289
+ $product->setCalculatedFinalPrice($finalPrice);
1290
+ }
1291
+
1292
+ return $this;
1293
+ }
1294
+
1295
+ /**
1296
+ * Retreive all ids
1297
+ *
1298
+ * @param boolean $resetCache
1299
+ * @return array
1300
+ */
1301
+ public function getAllIdsCache($resetCache = false)
1302
+ {
1303
+ $ids = null;
1304
+ if (!$resetCache) {
1305
+ $ids = $this->_allIdsCache;
1306
+ }
1307
+
1308
+ if (is_null($ids)) {
1309
+ $ids = $this->getAllIds();
1310
+ $this->setAllIdsCache($ids);
1311
+ }
1312
+
1313
+ return $ids;
1314
+ }
1315
+
1316
+ /**
1317
+ * Set all ids
1318
+ *
1319
+ * @param array $value
1320
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1321
+ */
1322
+ public function setAllIdsCache($value)
1323
+ {
1324
+ $this->_allIdsCache = $value;
1325
+ return $this;
1326
+ }
1327
+
1328
+ /**
1329
+ * Add Price Data to result
1330
+ *
1331
+ * @param int $customerGroupId
1332
+ * @param int $websiteId
1333
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1334
+ */
1335
+ public function addPriceData($customerGroupId = null, $websiteId = null)
1336
+ {
1337
+ $this->_productLimitationFilters['use_price_index'] = true;
1338
+
1339
+ if (!isset($this->_productLimitationFilters['customer_group_id']) && is_null($customerGroupId)) {
1340
+ $customerGroupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
1341
+ }
1342
+ if (!isset($this->_productLimitationFilters['website_id']) && is_null($websiteId)) {
1343
+ $websiteId = Mage::app()->getStore($this->getStoreId())->getWebsiteId();
1344
+ }
1345
+
1346
+ if (!is_null($customerGroupId)) {
1347
+ $this->_productLimitationFilters['customer_group_id'] = $customerGroupId;
1348
+ }
1349
+ if (!is_null($websiteId)) {
1350
+ $this->_productLimitationFilters['website_id'] = $websiteId;
1351
+ }
1352
+
1353
+ $this->_applyProductLimitations();
1354
+
1355
+ return $this;
1356
+ }
1357
+
1358
+ /**
1359
+ * Add attribute to filter
1360
+ *
1361
+ * @param Mage_Eav_Model_Entity_Attribute_Abstract|string $attribute
1362
+ * @param array $condition
1363
+ * @param string $joinType
1364
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1365
+ */
1366
+ public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner')
1367
+ {
1368
+ if ($this->isEnabledFlat()) {
1369
+ if ($attribute instanceof Mage_Eav_Model_Entity_Attribute_Abstract) {
1370
+ $attribute = $attribute->getAttributeCode();
1371
+ }
1372
+
1373
+ if (is_array($attribute)) {
1374
+ $sqlArr = array();
1375
+ foreach ($attribute as $condition) {
1376
+ $sqlArr[] = $this->_getAttributeConditionSql($condition['attribute'], $condition, $joinType);
1377
+ }
1378
+ $conditionSql = '('.join(') OR (', $sqlArr).')';
1379
+ $this->getSelect()->where($conditionSql);
1380
+ return $this;
1381
+ }
1382
+
1383
+ if (!isset($this->_selectAttributes[$attribute])) {
1384
+ $this->addAttributeToSelect($attribute);
1385
+ }
1386
+
1387
+ if (isset($this->_selectAttributes[$attribute])) {
1388
+ $this->getSelect()->where($this->_getConditionSql('e.' . $attribute, $condition));
1389
+ }
1390
+
1391
+ return $this;
1392
+ }
1393
+
1394
+ $this->_allIdsCache = null;
1395
+
1396
+ if (is_string($attribute) && $attribute == 'is_saleable') {
1397
+ $columns = $this->getSelect()->getPart(Zend_Db_Select::COLUMNS);
1398
+ foreach ($columns as $columnEntry) {
1399
+ list($correlationName, $column, $alias) = $columnEntry;
1400
+ if ($alias == 'is_saleable') {
1401
+ if ($column instanceof Zend_Db_Expr) {
1402
+ $field = $column;
1403
+ } else {
1404
+ $adapter = $this->getSelect()->getAdapter();
1405
+ if (empty($correlationName)) {
1406
+ $field = $adapter->quoteColumnAs($column, $alias, true);
1407
+ } else {
1408
+ $field = $adapter->quoteColumnAs(array($correlationName, $column), $alias, true);
1409
+ }
1410
+ }
1411
+ $this->getSelect()->where("{$field} = ?", $condition);
1412
+ break;
1413
+ }
1414
+ }
1415
+
1416
+ return $this;
1417
+ } else {
1418
+ return parent::addAttributeToFilter($attribute, $condition, $joinType);
1419
+ }
1420
+ }
1421
+
1422
+ /**
1423
+ * Add requere tax percent flag for product collection
1424
+ *
1425
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1426
+ */
1427
+ public function addTaxPercents()
1428
+ {
1429
+ $this->_addTaxPercents = true;
1430
+ return $this;
1431
+ }
1432
+
1433
+ /**
1434
+ * Get require tax percent flag value
1435
+ *
1436
+ * @return bool
1437
+ */
1438
+ public function requireTaxPercent()
1439
+ {
1440
+ return $this->_addTaxPercents;
1441
+ }
1442
+
1443
+ /**
1444
+ * Enter description here ...
1445
+ *
1446
+ * @deprecated from 1.3.0
1447
+ *
1448
+ */
1449
+ protected function _addTaxPercents()
1450
+ {
1451
+ $classToRate = array();
1452
+ $request = Mage::getSingleton('tax/calculation')->getRateRequest();
1453
+ foreach ($this as &$item) {
1454
+ if (null === $item->getTaxClassId()) {
1455
+ $item->setTaxClassId($item->getMinimalTaxClassId());
1456
+ }
1457
+ if (!isset($classToRate[$item->getTaxClassId()])) {
1458
+ $request->setProductClassId($item->getTaxClassId());
1459
+ $classToRate[$item->getTaxClassId()] = Mage::getSingleton('tax/calculation')->getRate($request);
1460
+ }
1461
+ $item->setTaxPercent($classToRate[$item->getTaxClassId()]);
1462
+ }
1463
+ }
1464
+
1465
+ /**
1466
+ * Adding product custom options to result collection
1467
+ *
1468
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1469
+ */
1470
+ public function addOptionsToResult()
1471
+ {
1472
+ $productIds = array();
1473
+ foreach ($this as $product) {
1474
+ $productIds[] = $product->getId();
1475
+ }
1476
+ if (!empty($productIds)) {
1477
+ $options = Mage::getModel('catalog/product_option')
1478
+ ->getCollection()
1479
+ ->addTitleToResult(Mage::app()->getStore()->getId())
1480
+ ->addPriceToResult(Mage::app()->getStore()->getId())
1481
+ ->addProductToFilter($productIds)
1482
+ ->addValuesToResult();
1483
+
1484
+ foreach ($options as $option) {
1485
+ if($this->getItemById($option->getProductId())) {
1486
+ $this->getItemById($option->getProductId())->addOption($option);
1487
+ }
1488
+ }
1489
+ }
1490
+
1491
+ return $this;
1492
+ }
1493
+
1494
+ /**
1495
+ * Filter products with required options
1496
+ *
1497
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1498
+ */
1499
+ public function addFilterByRequiredOptions()
1500
+ {
1501
+ $this->addAttributeToFilter('required_options', array(array('neq' => '1'), array('null' => true)), 'left');
1502
+ return $this;
1503
+ }
1504
+
1505
+ /**
1506
+ * Set product visibility filter for enabled products
1507
+ *
1508
+ * @param array $visibility
1509
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1510
+ */
1511
+ public function setVisibility($visibility)
1512
+ {
1513
+ $this->_productLimitationFilters['visibility'] = $visibility;
1514
+ $this->_applyProductLimitations();
1515
+
1516
+ return $this;
1517
+ }
1518
+
1519
+ /**
1520
+ * Add attribute to sort order
1521
+ *
1522
+ * @param string $attribute
1523
+ * @param string $dir
1524
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1525
+ */
1526
+ public function addAttributeToSort($attribute, $dir = self::SORT_ORDER_ASC)
1527
+ {
1528
+ if ($attribute == 'position') {
1529
+ if (isset($this->_joinFields[$attribute])) {
1530
+ $this->getSelect()->order($this->_getAttributeFieldName($attribute) . ' ' . $dir);
1531
+ return $this;
1532
+ }
1533
+ if ($this->isEnabledFlat()) {
1534
+ $this->getSelect()->order("cat_index_position {$dir}");
1535
+ }
1536
+ // optimize if using cat index
1537
+ $filters = $this->_productLimitationFilters;
1538
+ if (isset($filters['category_id']) || isset($filters['visibility'])) {
1539
+ $this->getSelect()->order('cat_index.position ' . $dir);
1540
+ } else {
1541
+ $this->getSelect()->order('e.entity_id ' . $dir);
1542
+ }
1543
+
1544
+ return $this;
1545
+ } elseif($attribute == 'is_saleable'){
1546
+ $this->getSelect()->order("is_saleable " . $dir);
1547
+ return $this;
1548
+ }
1549
+
1550
+ $storeId = $this->getStoreId();
1551
+ if ($attribute == 'price' && $storeId != 0) {
1552
+ $this->addPriceData();
1553
+ $this->getSelect()->order("price_index.min_price {$dir}");
1554
+
1555
+ return $this;
1556
+ }
1557
+
1558
+ if ($this->isEnabledFlat()) {
1559
+ $column = $this->getEntity()->getAttributeSortColumn($attribute);
1560
+
1561
+ if ($column) {
1562
+ $this->getSelect()->order("e.{$column} {$dir}");
1563
+ }
1564
+ else if (isset($this->_joinFields[$attribute])) {
1565
+ $this->getSelect()->order($this->_getAttributeFieldName($attribute) . ' ' . $dir);
1566
+ }
1567
+
1568
+ return $this;
1569
+ } else {
1570
+ $attrInstance = $this->getEntity()->getAttribute($attribute);
1571
+ if ($attrInstance && $attrInstance->usesSource()) {
1572
+ $attrInstance->getSource()
1573
+ ->addValueSortToCollection($this, $dir);
1574
+ return $this;
1575
+ }
1576
+ }
1577
+
1578
+ return parent::addAttributeToSort($attribute, $dir);
1579
+ }
1580
+
1581
+ /**
1582
+ * Prepare limitation filters
1583
+ *
1584
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1585
+ */
1586
+ protected function _prepareProductLimitationFilters()
1587
+ {
1588
+ if (isset($this->_productLimitationFilters['visibility'])
1589
+ && !isset($this->_productLimitationFilters['store_id'])
1590
+ ) {
1591
+ $this->_productLimitationFilters['store_id'] = $this->getStoreId();
1592
+ }
1593
+ if (isset($this->_productLimitationFilters['category_id'])
1594
+ && !isset($this->_productLimitationFilters['store_id'])
1595
+ ) {
1596
+ $this->_productLimitationFilters['store_id'] = $this->getStoreId();
1597
+ }
1598
+ if (isset($this->_productLimitationFilters['store_id'])
1599
+ && isset($this->_productLimitationFilters['visibility'])
1600
+ && !isset($this->_productLimitationFilters['category_id'])
1601
+ ) {
1602
+ $this->_productLimitationFilters['category_id'] = Mage::app()
1603
+ ->getStore($this->_productLimitationFilters['store_id'])
1604
+ ->getRootCategoryId();
1605
+ }
1606
+
1607
+ return $this;
1608
+ }
1609
+
1610
+ /**
1611
+ * Join website product limitation
1612
+ *
1613
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1614
+ */
1615
+ protected function _productLimitationJoinWebsite()
1616
+ {
1617
+ $joinWebsite = false;
1618
+ $filters = $this->_productLimitationFilters;
1619
+ $conditions = array('product_website.product_id = e.entity_id');
1620
+
1621
+ if (isset($filters['website_ids'])) {
1622
+ $joinWebsite = true;
1623
+ if (count($filters['website_ids']) > 1) {
1624
+ $this->getSelect()->distinct(true);
1625
+ }
1626
+ $conditions[] = $this->getConnection()
1627
+ ->quoteInto('product_website.website_id IN(?)', $filters['website_ids']);
1628
+ } elseif (isset($filters['store_id'])
1629
+ && (!isset($filters['visibility']) && !isset($filters['category_id']))
1630
+ && !$this->isEnabledFlat()
1631
+ ) {
1632
+ $joinWebsite = true;
1633
+ $websiteId = Mage::app()->getStore($filters['store_id'])->getWebsiteId();
1634
+ $conditions[] = $this->getConnection()
1635
+ ->quoteInto('product_website.website_id = ?', $websiteId);
1636
+ }
1637
+
1638
+ $fromPart = $this->getSelect()->getPart(Zend_Db_Select::FROM);
1639
+ if (isset($fromPart['product_website'])) {
1640
+ if (!$joinWebsite) {
1641
+ unset($fromPart['product_website']);
1642
+ } else {
1643
+ $fromPart['product_website']['joinCondition'] = join(' AND ', $conditions);
1644
+ }
1645
+ $this->getSelect()->setPart(Zend_Db_Select::FROM, $fromPart);
1646
+ } elseif ($joinWebsite) {
1647
+ $this->getSelect()->join(
1648
+ array('product_website' => $this->getTable('catalog/product_website')),
1649
+ join(' AND ', $conditions),
1650
+ array()
1651
+ );
1652
+ }
1653
+
1654
+ return $this;
1655
+ }
1656
+
1657
+ /**
1658
+ * Join additional (alternative) store visibility filter
1659
+ *
1660
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1661
+ */
1662
+ protected function _productLimitationJoinStore()
1663
+ {
1664
+ $filters = $this->_productLimitationFilters;
1665
+ if (!isset($filters['store_table'])) {
1666
+ return $this;
1667
+ }
1668
+
1669
+ $hasColumn = false;
1670
+ foreach ($this->getSelect()->getPart(Zend_Db_Select::COLUMNS) as $columnEntry) {
1671
+ list(,,$alias) = $columnEntry;
1672
+ if ($alias == 'visibility') {
1673
+ $hasColumn = true;
1674
+ }
1675
+ }
1676
+ if (!$hasColumn) {
1677
+ $this->getSelect()->columns('visibility', 'cat_index');
1678
+ }
1679
+
1680
+ $fromPart = $this->getSelect()->getPart(Zend_Db_Select::FROM);
1681
+ if (!isset($fromPart['store_index'])) {
1682
+ $this->getSelect()->joinLeft(
1683
+ array('store_index' => $this->getTable('core/store')),
1684
+ 'store_index.store_id = ' . $filters['store_table'] . '.store_id',
1685
+ array()
1686
+ );
1687
+ }
1688
+ if (!isset($fromPart['store_group_index'])) {
1689
+ $this->getSelect()->joinLeft(
1690
+ array('store_group_index' => $this->getTable('core/store_group')),
1691
+ 'store_index.group_id = store_group_index.group_id',
1692
+ array()
1693
+ );
1694
+ }
1695
+ if (!isset($fromPart['store_cat_index'])) {
1696
+ $this->getSelect()->joinLeft(
1697
+ array('store_cat_index' => $this->getTable('catalog/category_product_index')),
1698
+ join(' AND ', array(
1699
+ 'store_cat_index.product_id = e.entity_id',
1700
+ 'store_cat_index.store_id = ' . $filters['store_table'] . '.store_id',
1701
+ 'store_cat_index.category_id=store_group_index.root_category_id'
1702
+ )),
1703
+ array('store_visibility' => 'visibility')
1704
+ );
1705
+ }
1706
+ // Avoid column duplication problems
1707
+ Mage::getResourceHelper('core')->prepareColumnsList($this->getSelect());
1708
+
1709
+ $whereCond = join(' OR ', array(
1710
+ $this->getConnection()->quoteInto('cat_index.visibility IN(?)', $filters['visibility']),
1711
+ $this->getConnection()->quoteInto('store_cat_index.visibility IN(?)', $filters['visibility'])
1712
+ ));
1713
+
1714
+ $wherePart = $this->getSelect()->getPart(Zend_Db_Select::WHERE);
1715
+ $hasCond = false;
1716
+ foreach ($wherePart as $cond) {
1717
+ if ($cond == '(' . $whereCond . ')') {
1718
+ $hasCond = true;
1719
+ }
1720
+ }
1721
+
1722
+ if (!$hasCond) {
1723
+ $this->getSelect()->where($whereCond);
1724
+ }
1725
+
1726
+ return $this;
1727
+ }
1728
+
1729
+ /**
1730
+ * Join Product Price Table
1731
+ *
1732
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1733
+ */
1734
+ protected function _productLimitationJoinPrice()
1735
+ {
1736
+ return $this->_productLimitationPrice();
1737
+ }
1738
+
1739
+ /**
1740
+ * Join Product Price Table with left-join possibility
1741
+ *
1742
+ * @see Mage_Catalog_Model_Resource_Product_Collection::_productLimitationJoinPrice()
1743
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1744
+ */
1745
+ protected function _productLimitationPrice($joinLeft = false)
1746
+ {
1747
+ $filters = $this->_productLimitationFilters;
1748
+ if (empty($filters['use_price_index'])) {
1749
+ return $this;
1750
+ }
1751
+
1752
+ $helper = Mage::getResourceHelper('core');
1753
+ $connection = $this->getConnection();
1754
+ $select = $this->getSelect();
1755
+ $joinCond = join(' AND ', array(
1756
+ 'price_index.entity_id = e.entity_id',
1757
+ $connection->quoteInto('price_index.website_id = ?', $filters['website_id']),
1758
+ $connection->quoteInto('price_index.customer_group_id = ?', $filters['customer_group_id'])
1759
+ ));
1760
+
1761
+ $fromPart = $select->getPart(Zend_Db_Select::FROM);
1762
+ if (!isset($fromPart['price_index'])) {
1763
+ $least = $connection->getLeastSql(array('price_index.min_price', 'price_index.tier_price'));
1764
+ $minimalExpr = $connection->getCheckSql('price_index.tier_price IS NOT NULL',
1765
+ $least, 'price_index.min_price');
1766
+ $colls = array('price', 'tax_class_id', 'final_price',
1767
+ 'minimal_price' => $minimalExpr , 'min_price', 'max_price', 'tier_price');
1768
+ $tableName = array('price_index' => $this->getTable('catalog/product_index_price'));
1769
+ if ($joinLeft) {
1770
+ $select->joinLeft($tableName, $joinCond, $colls);
1771
+ } else {
1772
+ $select->join($tableName, $joinCond, $colls);
1773
+ }
1774
+ // Set additional field filters
1775
+ foreach ($this->_priceDataFieldFilters as $filterData) {
1776
+ $select->where(call_user_func_array('sprintf', $filterData));
1777
+ }
1778
+ } else {
1779
+ $fromPart['price_index']['joinCondition'] = $joinCond;
1780
+ $select->setPart(Zend_Db_Select::FROM, $fromPart);
1781
+ }
1782
+ //Clean duplicated fields
1783
+ $helper->prepareColumnsList($select);
1784
+
1785
+
1786
+ return $this;
1787
+ }
1788
+
1789
+ /**
1790
+ * Apply front-end price limitation filters to the collection
1791
+ *
1792
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1793
+ */
1794
+ public function applyFrontendPriceLimitations()
1795
+ {
1796
+ $this->_productLimitationFilters['use_price_index'] = true;
1797
+ if (!isset($this->_productLimitationFilters['customer_group_id'])) {
1798
+ $customerGroupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
1799
+ $this->_productLimitationFilters['customer_group_id'] = $customerGroupId;
1800
+ }
1801
+ if (!isset($this->_productLimitationFilters['website_id'])) {
1802
+ $websiteId = Mage::app()->getStore($this->getStoreId())->getWebsiteId();
1803
+ $this->_productLimitationFilters['website_id'] = $websiteId;
1804
+ }
1805
+ $this->_applyProductLimitations();
1806
+ return $this;
1807
+ }
1808
+
1809
+ /**
1810
+ * Apply limitation filters to collection
1811
+ * Method allows using one time category product index table (or product website table)
1812
+ * for different combinations of store_id/category_id/visibility filter states
1813
+ * Method supports multiple changes in one collection object for this parameters
1814
+ *
1815
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1816
+ */
1817
+ protected function _applyProductLimitations()
1818
+ {
1819
+ $this->_prepareProductLimitationFilters();
1820
+ $this->_productLimitationJoinWebsite();
1821
+ $this->_productLimitationJoinPrice();
1822
+ $filters = $this->_productLimitationFilters;
1823
+
1824
+ if (!isset($filters['category_id']) && !isset($filters['visibility'])) {
1825
+ return $this;
1826
+ }
1827
+
1828
+ $conditions = array(
1829
+ 'cat_index.product_id=e.entity_id',
1830
+ $this->getConnection()->quoteInto('cat_index.store_id=?', $filters['store_id'])
1831
+ );
1832
+ if (isset($filters['visibility']) && !isset($filters['store_table'])) {
1833
+ $conditions[] = $this->getConnection()
1834
+ ->quoteInto('cat_index.visibility IN(?)', $filters['visibility']);
1835
+ }
1836
+ $conditions[] = $this->getConnection()
1837
+ ->quoteInto('cat_index.category_id=?', $filters['category_id']);
1838
+ if (isset($filters['category_is_anchor'])) {
1839
+ $conditions[] = $this->getConnection()
1840
+ ->quoteInto('cat_index.is_parent=?', $filters['category_is_anchor']);
1841
+ }
1842
+
1843
+ $joinCond = join(' AND ', $conditions);
1844
+ $fromPart = $this->getSelect()->getPart(Zend_Db_Select::FROM);
1845
+ if (isset($fromPart['cat_index'])) {
1846
+ $fromPart['cat_index']['joinCondition'] = $joinCond;
1847
+ $this->getSelect()->setPart(Zend_Db_Select::FROM, $fromPart);
1848
+ }
1849
+ else {
1850
+ $this->getSelect()->join(
1851
+ array('cat_index' => $this->getTable('catalog/category_product_index')),
1852
+ $joinCond,
1853
+ array('cat_index_position' => 'position')
1854
+ );
1855
+ }
1856
+
1857
+ $this->_productLimitationJoinStore();
1858
+
1859
+ Mage::dispatchEvent('catalog_product_collection_apply_limitations_after', array(
1860
+ 'collection' => $this
1861
+ ));
1862
+
1863
+ return $this;
1864
+ }
1865
+
1866
+ /**
1867
+ * Apply limitation filters to collection base on API
1868
+ * Method allows using one time category product table
1869
+ * for combinations of category_id filter states
1870
+ *
1871
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1872
+ */
1873
+ protected function _applyZeroStoreProductLimitations()
1874
+ {
1875
+ $filters = $this->_productLimitationFilters;
1876
+
1877
+ $conditions = array(
1878
+ 'cat_pro.product_id=e.entity_id',
1879
+ $this->getConnection()->quoteInto('cat_pro.category_id=?', $filters['category_id'])
1880
+ );
1881
+ $joinCond = join(' AND ', $conditions);
1882
+
1883
+ $fromPart = $this->getSelect()->getPart(Zend_Db_Select::FROM);
1884
+ if (isset($fromPart['cat_pro'])) {
1885
+ $fromPart['cat_pro']['joinCondition'] = $joinCond;
1886
+ $this->getSelect()->setPart(Zend_Db_Select::FROM, $fromPart);
1887
+ }
1888
+ else {
1889
+ $this->getSelect()->join(
1890
+ array('cat_pro' => $this->getTable('catalog/category_product')),
1891
+ $joinCond,
1892
+ array('cat_index_position' => 'position')
1893
+ );
1894
+ }
1895
+ $this->_joinFields['position'] = array(
1896
+ 'table' => 'cat_pro',
1897
+ 'field' => 'position',
1898
+ );
1899
+
1900
+ return $this;
1901
+ }
1902
+
1903
+ /**
1904
+ * Add category ids to loaded items
1905
+ *
1906
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1907
+ */
1908
+ public function addCategoryIds()
1909
+ {
1910
+ if ($this->getFlag('category_ids_added')) {
1911
+ return $this;
1912
+ }
1913
+ $ids = array_keys($this->_items);
1914
+ if (empty($ids)) {
1915
+ return $this;
1916
+ }
1917
+
1918
+ $select = $this->getConnection()->select();
1919
+
1920
+ $select->from($this->_productCategoryTable, array('product_id', 'category_id'));
1921
+ $select->where('product_id IN (?)', $ids);
1922
+
1923
+ $data = $this->getConnection()->fetchAll($select);
1924
+
1925
+ $categoryIds = array();
1926
+ foreach ($data as $info) {
1927
+ if (isset($categoryIds[$info['product_id']])) {
1928
+ $categoryIds[$info['product_id']][] = $info['category_id'];
1929
+ } else {
1930
+ $categoryIds[$info['product_id']] = array($info['category_id']);
1931
+ }
1932
+ }
1933
+
1934
+
1935
+ foreach ($this->getItems() as $item) {
1936
+ $productId = $item->getId();
1937
+ if (isset($categoryIds[$productId])) {
1938
+ $item->setCategoryIds($categoryIds[$productId]);
1939
+ } else {
1940
+ $item->setCategoryIds(array());
1941
+ }
1942
+ }
1943
+
1944
+ $this->setFlag('category_ids_added', true);
1945
+ return $this;
1946
+ }
1947
+
1948
+ /**
1949
+ * Add tier price data to loaded items
1950
+ *
1951
+ * @return Mage_Catalog_Model_Resource_Product_Collection
1952
+ */
1953
+ public function addTierPriceData()
1954
+ {
1955
+ if ($this->getFlag('tier_price_added')) {
1956
+ return $this;
1957
+ }
1958
+
1959
+ $tierPrices = array();
1960
+ $productIds = array();
1961
+ foreach ($this->getItems() as $item) {
1962
+ $productIds[] = $item->getId();
1963
+ $tierPrices[$item->getId()] = array();
1964
+ }
1965
+ if (!$productIds) {
1966
+ return $this;
1967
+ }
1968
+
1969
+ /** @var $attribute Mage_Catalog_Model_Resource_Eav_Attribute */
1970
+ $attribute = $this->getAttribute('tier_price');
1971
+ if ($attribute->isScopeGlobal()) {
1972
+ $websiteId = 0;
1973
+ } else if ($this->getStoreId()) {
1974
+ $websiteId = Mage::app()->getStore($this->getStoreId())->getWebsiteId();
1975
+ }
1976
+
1977
+ $adapter = $this->getConnection();
1978
+ $columns = array(
1979
+ 'price_id' => 'value_id',
1980
+ 'website_id' => 'website_id',
1981
+ 'all_groups' => 'all_groups',
1982
+ 'cust_group' => 'customer_group_id',
1983
+ 'price_qty' => 'qty',
1984
+ 'price' => 'value',
1985
+ 'from_date' => 'from_date',
1986
+ 'to_date' => 'to_date',
1987
+ 'product_id' => 'entity_id'
1988
+ );
1989
+ $select = $adapter->select()
1990
+ ->from($this->getTable('catalog/product_attribute_tier_price'), $columns)
1991
+ ->where('entity_id IN(?)', $productIds)
1992
+ ->order(array('entity_id','qty'));
1993
+
1994
+ if ($websiteId == '0') {
1995
+ $select->where('website_id = ?', $websiteId);
1996
+ } else {
1997
+ $select->where('website_id IN(?)', array('0', $websiteId));
1998
+ }
1999
+
2000
+ foreach ($adapter->fetchAll($select) as $row) {
2001
+ $tierPrices[$row['product_id']][] = array(
2002
+ 'website_id' => $row['website_id'],
2003
+ 'cust_group' => $row['all_groups'] ? Mage_Customer_Model_Group::CUST_GROUP_ALL : $row['cust_group'],
2004
+ 'price_qty' => $row['price_qty'],
2005
+ 'price' => $row['price'],
2006
+ 'website_price' => $row['price'],
2007
+ 'from_date' => $row['from_date'],
2008
+ 'to_date' => $row['to_date'],
2009
+
2010
+ );
2011
+ }
2012
+
2013
+ /* @var $backend Mage_Catalog_Model_Product_Attribute_Backend_Tierprice */
2014
+ $backend = $attribute->getBackend();
2015
+
2016
+ foreach ($this->getItems() as $item) {
2017
+ $data = $tierPrices[$item->getId()];
2018
+ if (!empty($data) && $websiteId) {
2019
+ $data = $backend->preparePriceData($data, $item->getTypeId(), $websiteId);
2020
+ }
2021
+ $item->setData('tier_price', $data);
2022
+ }
2023
+
2024
+ $this->setFlag('tier_price_added', true);
2025
+ return $this;
2026
+ }
2027
+
2028
+ /**
2029
+ * Add field comparison expression
2030
+ *
2031
+ * @param string $comparisonFormat - expression for sprintf()
2032
+ * @param array $fields - list of fields
2033
+ * @return Mage_Catalog_Model_Resource_Product_Collection
2034
+ * @throws Exception
2035
+ */
2036
+ public function addPriceDataFieldFilter($comparisonFormat, $fields)
2037
+ {
2038
+ if (!preg_match('/^%s( (<|>|=|<=|>=|<>) %s)*$/', $comparisonFormat)) {
2039
+ throw new Exception('Invalid comparison format.');
2040
+ }
2041
+
2042
+ if (!is_array($fields)) {
2043
+ $fields = array($fields);
2044
+ }
2045
+ foreach ($fields as $key => $field) {
2046
+ $fields[$key] = $this->_getMappedField($field);
2047
+ }
2048
+
2049
+ $this->_priceDataFieldFilters[] = array_merge(array($comparisonFormat), $fields);
2050
+ return $this;
2051
+ }
2052
+
2053
+ /**
2054
+ * Clear collection
2055
+ *
2056
+ * @return Mage_Catalog_Model_Resource_Product_Collection
2057
+ */
2058
+ public function clear()
2059
+ {
2060
+ foreach ($this->_items as $i => $item) {
2061
+ if ($item->hasStockItem()) {
2062
+ $item->unsStockItem();
2063
+ }
2064
+ $item = $this->_items[$i] = null;
2065
+ }
2066
+
2067
+ foreach ($this->_itemsById as $i => $item) {
2068
+ $item = $this->_itemsById[$i] = null;
2069
+ }
2070
+
2071
+ unset($this->_items, $this->_data, $this->_itemsById);
2072
+ $this->_data = array();
2073
+ $this->_itemsById = array();
2074
+ return parent::clear();
2075
+ }
2076
+
2077
+ /**
2078
+ * Set Order field
2079
+ *
2080
+ * @param string $attribute
2081
+ * @param string $dir
2082
+ * @return Mage_Catalog_Model_Resource_Product_Collection
2083
+ */
2084
+ public function setOrder($attribute, $dir = 'desc')
2085
+ {
2086
+ if ($attribute == 'price') {
2087
+ $this->addAttributeToSort($attribute, $dir);
2088
+ } else {
2089
+ parent::setOrder($attribute, $dir);
2090
+ }
2091
+ return $this;
2092
+ }
2093
+
2094
+ /**
2095
+ * Get products max price
2096
+ *
2097
+ * @return float
2098
+ */
2099
+ public function getMaxPrice()
2100
+ {
2101
+ if (is_null($this->_maxPrice)) {
2102
+ $this->_prepareStatisticsData();
2103
+ }
2104
+
2105
+ return $this->_maxPrice;
2106
+ }
2107
+
2108
+ /**
2109
+ * Get products min price
2110
+ *
2111
+ * @return float
2112
+ */
2113
+ public function getMinPrice()
2114
+ {
2115
+ if (is_null($this->_minPrice)) {
2116
+ $this->_prepareStatisticsData();
2117
+ }
2118
+
2119
+ return $this->_minPrice;
2120
+ }
2121
+
2122
+ /**
2123
+ * Get standard deviation of products price
2124
+ *
2125
+ * @return float
2126
+ */
2127
+ public function getPriceStandardDeviation()
2128
+ {
2129
+ if (is_null($this->_priceStandardDeviation)) {
2130
+ $this->_prepareStatisticsData();
2131
+ }
2132
+
2133
+ return $this->_priceStandardDeviation;
2134
+ }
2135
+
2136
+
2137
+ /**
2138
+ * Get count of product prices
2139
+ *
2140
+ * @return int
2141
+ */
2142
+ public function getPricesCount()
2143
+ {
2144
+ if (is_null($this->_pricesCount)) {
2145
+ $this->_prepareStatisticsData();
2146
+ }
2147
+
2148
+ return $this->_pricesCount;
2149
+ }
2150
+ }
app/code/local/Channelbrain/Catalog/etc/config.xml ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+
4
+ <modules>
5
+ <Channelbrain_Catalog>
6
+ <version>0.1.0</version>
7
+ </Channelbrain_Catalog>
8
+ </modules>
9
+
10
+
11
+ <global>
12
+ <models>
13
+ <catalog>
14
+ <rewrite>
15
+ <product_type_price>Channelbrain_Catalog_Model_Product_Type_Price</product_type_price>
16
+ <product_attribute_backend_tierprice>Channelbrain_Catalog_Model_Product_Attribute_Backend_Tierprice</product_attribute_backend_tierprice>
17
+ </rewrite>
18
+ </catalog>
19
+ <catalog_resource>
20
+ <rewrite>
21
+ <product_collection>Channelbrain_Catalog_Model_Resource_Product_Collection</product_collection>
22
+ </rewrite>
23
+ </catalog_resource>
24
+ <catalog_resource_eav_mysql4>
25
+ <rewrite>
26
+ <product_attribute_backend_tierprice>Channelbrain_Catalog_Model_Resource_Eav_Mysql4_Product_Attribute_Backend_Tierprice</product_attribute_backend_tierprice>
27
+ </rewrite>
28
+ </catalog_resource_eav_mysql4>
29
+ </models>
30
+ </global>
31
+
32
+ </config>
app/code/local/Channelbrain/TierPriceDates/etc/config.xml ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Channelbrain_TierPriceDates>
5
+ <version>0.1.0</version>
6
+ </Channelbrain_TierPriceDates>
7
+ </modules>
8
+ <global>
9
+ <resources>
10
+ <tierpricing_setup>
11
+ <setup>
12
+ <module>Channelbrain_TierPriceDates</module>
13
+ </setup>
14
+ <connection>
15
+ <use>core_setup</use>
16
+ </connection>
17
+ </tierpricing_setup>
18
+ <tierpricing_write>
19
+ <connection>
20
+ <use>core_write</use>
21
+ </connection>
22
+ </tierpricing_write>
23
+ <tierpricing_read>
24
+ <connection>
25
+ <use>core_read</use>
26
+ </connection>
27
+ </tierpricing_read>
28
+ </resources>
29
+ </global>
30
+
31
+ <adminhtml>
32
+ <acl>
33
+ <resources>
34
+ <all>
35
+ <title>Allow Everything</title>
36
+ </all>
37
+ <admin>
38
+ <children>
39
+ <system>
40
+ <children>
41
+ <config>
42
+ <children>
43
+ <mypackage>
44
+ <title>Inchoo - All</title>
45
+ </mypackage>
46
+ </children>
47
+ </config>
48
+ </children>
49
+ </system>
50
+ </children>
51
+ </admin>
52
+ </resources>
53
+ </acl>
54
+ </adminhtml>
55
+
56
+ </config>
57
+
app/code/local/Channelbrain/TierPriceDates/etc/system.xml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <sections>
3
+ <mypackage>
4
+ <label>Channelbrain Setting</label>
5
+ <tab>general</tab>
6
+ <frontend_type>text</frontend_type>
7
+ <show_in_default>1</show_in_default>
8
+ <show_in_website>1</show_in_website>
9
+ <show_in_store>1</show_in_store>
10
+ <sort_order>10</sort_order>
11
+ <groups>
12
+ <settings translate="label">
13
+ <label>Channelbrain Setting</label>
14
+ <frontend_type>text</frontend_type>
15
+ <sort_order>10</sort_order>
16
+ <show_in_default>1</show_in_default>
17
+ <show_in_website>1</show_in_website>
18
+ <show_in_store>1</show_in_store>
19
+ <fields>
20
+ <wds_tier_price translate="label">
21
+ <label>Enable Plugin</label>
22
+ <frontend_type>select</frontend_type>
23
+ <source_model>adminhtml/system_config_source_yesno</source_model>
24
+ <sort_order>20</sort_order>
25
+ <show_in_default>1</show_in_default>
26
+ <show_in_website>1</show_in_website>
27
+ <show_in_store>1</show_in_store>
28
+ </wds_tier_price>
29
+ </fields>
30
+ </settings>
31
+ </groups>
32
+ </mypackage>
33
+ </sections>
34
+ </config>
app/code/local/Channelbrain/TierPriceDates/sql/tierpricing_setup/mysql4-install-0.1.0.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+ $installer = $this;
3
+ $installer->startSetup();
4
+ $installer->run("ALTER TABLE {$this->getTable('catalog_product_entity_tier_price')} ADD from_date DATE NOT NULL AFTER qty, ADD to_date DATE NOT NULL AFTER from_date;");
5
+ $installer->endSetup();
6
+ ?>
app/design/adminhtml/default/default/layout/admin.xml ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <!-- admin acl users edit page -->
31
+ <adminhtml_permissions_user_edit>
32
+ <reference name="left">
33
+ <block type="adminhtml/permissions_user_edit_tabs" name="adminhtml.permissions.user.edit.tabs"/>
34
+ </reference>
35
+ <reference name="content">
36
+ <block type="adminhtml/permissions_user_edit" name="adminhtml.permissions.user.edit"/>
37
+ </reference>
38
+ <reference name="js">
39
+ <block type="adminhtml/template" name="adminhtml.permissions.user.roles.grid.js" template="permissions/user_roles_grid_js.phtml"/>
40
+ </reference>
41
+ </adminhtml_permissions_user_edit>
42
+
43
+ <!-- admin acl roles grid page -->
44
+ <adminhtml_permissions_role_index>
45
+ <reference name="content">
46
+ <block type="adminhtml/permissions_roles" name="adminhtml.permission.role.index" template="permissions/roles.phtml">
47
+ <block type="adminhtml/permissions_grid_role" name="adminhtml.permission.role.grid" as="grid"/>
48
+ </block>
49
+ </reference>
50
+ </adminhtml_permissions_role_index>
51
+ <adminhtml_permissions_role_rolegrid>
52
+ <remove name="root"/>
53
+ <block type="adminhtml/permissions_grid_role" name="adminhtml.permission.role.grid"/>
54
+ </adminhtml_permissions_role_rolegrid>
55
+
56
+ <!-- admin acl roles edit page -->
57
+ <adminhtml_permissions_role_editrole>
58
+ <reference name="left">
59
+ <block type="adminhtml/permissions_editroles" name="adminhtml.permissions.editroles"/>
60
+ </reference>
61
+ </adminhtml_permissions_role_editrole>
62
+ <adminhtml_system_config_edit>
63
+ <reference name="left">
64
+ <block type="adminhtml/system_config_switcher" name="adminhtml.system.config.switcher" before="-"/>
65
+ </reference>
66
+ </adminhtml_system_config_edit>
67
+ <adminhtml_dashboard_index>
68
+ <reference name="content">
69
+ <block type="adminhtml/dashboard" name="dashboard">
70
+ <block type="adminhtml/store_switcher" name="store_switcher" as="store_switcher" template="store/switcher.phtml">
71
+ <action method="setUseConfirm"><params>0</params></action>
72
+ </block>
73
+ </block>
74
+ </reference>
75
+ </adminhtml_dashboard_index>
76
+ <adminhtml_cache_index>
77
+ <reference name="content">
78
+ <block type="adminhtml/cache" name="cache"></block>
79
+ <block type="adminhtml/cache_additional" name="cache.additional" template="system/cache/additional.phtml"></block>
80
+ </reference>
81
+ </adminhtml_cache_index>
82
+ </layout>
app/design/adminhtml/default/default/layout/adminnotification.xml ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <default>
31
+ <reference name="notifications">
32
+ <block type="adminhtml/notification_toolbar" name="notification_toolbar" as="notification_toolbar" acl="system/adminnotification/show_toolbar" template="notification/toolbar.phtml" />
33
+ </reference>
34
+ <reference name="notifications">
35
+ <block type="adminhtml/notification_window" name="notification_window" as="notification_window" acl="system/adminnotification/show_toolbar" template="notification/window.phtml" />
36
+ </reference>
37
+ </default>
38
+ </layout>
app/design/adminhtml/default/default/layout/api2.xml ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+ <layout>
29
+ <adminhtml_api2_role_index>
30
+ <reference name="content">
31
+ <block type="api2/adminhtml_roles" name="api2_roles"/>
32
+ </reference>
33
+ </adminhtml_api2_role_index>
34
+
35
+ <adminhtml_api2_role_new>
36
+ <reference name="left">
37
+ <block type="api2/adminhtml_roles_tabs" name="adminhtml.role.edit.tabs">
38
+ <block type="api2/adminhtml_roles_tab_info" name="adminhtml.role.edit.tab.info"/>
39
+ <block type="api2/adminhtml_roles_tab_resources" name="adminhtml.role.edit.tab.resources" template="permissions/rolesedit.phtml"/>
40
+ <action method="addTab">
41
+ <id>api2_role_section_info</id>
42
+ <block>adminhtml.role.edit.tab.info</block>
43
+ </action>
44
+ <action method="addTab">
45
+ <id>api2_role_section_resources</id>
46
+ <block>adminhtml.role.edit.tab.resources</block>
47
+ </action>
48
+ </block>
49
+ </reference>
50
+ <reference name="content">
51
+ <block type="api2/adminhtml_roles_buttons" name="adminhtml.roles.buttons"/>
52
+ </reference>
53
+ <reference name="head">
54
+ <action method="setCanLoadExtJs">
55
+ <flag>1</flag>
56
+ </action>
57
+ </reference>
58
+ </adminhtml_api2_role_new>
59
+
60
+ <adminhtml_api2_role_edit>
61
+ <reference name="left">
62
+ <block type="api2/adminhtml_roles_tabs" name="adminhtml.role.edit.tabs">
63
+ <block type="api2/adminhtml_roles_tab_info" name="adminhtml.role.edit.tab.info"/>
64
+ <block type="api2/adminhtml_roles_tab_resources" name="adminhtml.role.edit.tab.resources" template="permissions/rolesedit.phtml"/>
65
+ <block type="api2/adminhtml_roles_tab_users" name="adminhtml.role.edit.tab.users"/>
66
+ <action method="addTab">
67
+ <id>api2_role_section_info</id>
68
+ <block>adminhtml.role.edit.tab.info</block>
69
+ </action>
70
+ <action method="addTab">
71
+ <id>api2_role_section_resources</id>
72
+ <block>adminhtml.role.edit.tab.resources</block>
73
+ </action>
74
+ <action method="addTab">
75
+ <id>roleUsersGrid</id>
76
+ <block>adminhtml.role.edit.tab.users</block>
77
+ </action>
78
+ </block>
79
+ </reference>
80
+ <reference name="content">
81
+ <block type="api2/adminhtml_roles_buttons" name="adminhtml.roles.buttons"/>
82
+ </reference>
83
+ <reference name="head">
84
+ <action method="setCanLoadExtJs">
85
+ <flag>1</flag>
86
+ </action>
87
+ </reference>
88
+ <reference name="js">
89
+ <block type="adminhtml/template" name="adminhtml.role.js.users.grid" template="api2/role/users_grid_js.phtml"/>
90
+ </reference>
91
+ </adminhtml_api2_role_edit>
92
+
93
+ <adminhtml_api2_role_grid>
94
+ <remove name="root"/>
95
+ <block type="api2/adminhtml_roles_grid" name="api2_roles.grid" output="toHtml"/>
96
+ </adminhtml_api2_role_grid>
97
+
98
+ <adminhtml_api2_role_usersgrid>
99
+ <remove name="root"/>
100
+ <block type="api2/adminhtml_roles_tab_users" name="adminhtml.role.edit.tab.users" output="toHtml"/>
101
+ </adminhtml_api2_role_usersgrid>
102
+
103
+ <!-- admin acl users edit page -->
104
+ <adminhtml_permissions_user_edit>
105
+ <reference name="adminhtml.permissions.user.edit.tabs">
106
+ <block type="api2/adminhtml_permissions_user_edit_tab_roles" name="adminhtml.permissions.user.edit.tab.roles"/>
107
+ <action method="addTabAfter">
108
+ <id>api2_roles_section</id>
109
+ <block>adminhtml.permissions.user.edit.tab.roles</block>
110
+ <after>roles_section</after>
111
+ </action>
112
+ </reference>
113
+ <reference name="js">
114
+ <block type="adminhtml/template" name="adminhtml.permissions.user.edit.tab.roles.js" template="api2/permissions/user/edit/tab/roles/js.phtml"/>
115
+ </reference>
116
+ </adminhtml_permissions_user_edit>
117
+
118
+ <!-- ACL attributes -->
119
+ <adminhtml_api2_attribute_index>
120
+ <reference name="content">
121
+ <block type="api2/adminhtml_attribute" name="api2.attribute"/>
122
+ </reference>
123
+ </adminhtml_api2_attribute_index>
124
+
125
+ <adminhtml_api2_attribute_edit>
126
+ <reference name="left">
127
+ <block type="api2/adminhtml_attribute_tabs" name="api2.attribute.edit.tabs">
128
+ <block type="api2/adminhtml_attribute_tab_resource" name="api2.attribute.tab.resource" template="api2/attribute/resource.phtml"/>
129
+ <action method="addTab">
130
+ <name>api2_attribute_section_resources</name>
131
+ <block>api2.attribute.tab.resource</block>
132
+ </action>
133
+ </block>
134
+ </reference>
135
+ <reference name="content">
136
+ <block type="api2/adminhtml_attribute_edit" name="edit_form">
137
+ <block type="api2/adminhtml_attribute_edit_form" name="form"/>
138
+ </block>
139
+ </reference>
140
+ <reference name="head">
141
+ <action method="setCanLoadExtJs">
142
+ <flag>1</flag>
143
+ </action>
144
+ </reference>
145
+ </adminhtml_api2_attribute_edit>
146
+ <!-- EOF ACL attributes -->
147
+ </layout>
app/design/adminhtml/default/default/layout/authorizenet.xml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+
28
+ -->
29
+ <layout version="0.1.0">
30
+ <adminhtml_sales_order_create_index>
31
+ <reference name="head">
32
+ <action method="addJs"><file>mage/directpost.js</file></action>
33
+ </reference>
34
+ </adminhtml_sales_order_create_index>
35
+ </layout>
app/design/adminhtml/default/default/layout/bundle.xml ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+
31
+ <!--
32
+ Layout handle for budle products
33
+ -->
34
+
35
+ <!--<default>
36
+ <reference name="left">
37
+ <action method="setData"><attribute>attributeTabs</attribute><attributeType>bundle/adminhtml_catalog_product_edit_tab_attributes</attributeType></action>
38
+ </reference>
39
+ </default>-->
40
+
41
+ <adminhtml_catalog_product_bundle>
42
+ <reference name="product_tabs">
43
+ <action method="addTab"><name>bundle_items</name><block>bundle/adminhtml_catalog_product_edit_tab_bundle</block></action>
44
+ <action method="bindShadowTabs"><first>bundle_items</first><second>customer_options</second></action>
45
+ </reference>
46
+ </adminhtml_catalog_product_bundle>
47
+
48
+ <adminhtml_sales_order_view>
49
+ <reference name="order_items">
50
+ <action method="addItemRender"><type>bundle</type><block>bundle/adminhtml_sales_order_view_items_renderer</block><template>bundle/sales/order/view/items/renderer.phtml</template></action>
51
+ </reference>
52
+ </adminhtml_sales_order_view>
53
+
54
+ <adminhtml_sales_order_invoice_new>
55
+ <reference name="order_items">
56
+ <action method="addItemRender"><type>bundle</type><block>bundle/adminhtml_sales_order_items_renderer</block><template>bundle/sales/invoice/create/items/renderer.phtml</template></action>
57
+ </reference>
58
+ </adminhtml_sales_order_invoice_new>
59
+
60
+ <adminhtml_sales_order_invoice_updateqty>
61
+ <reference name="order_items">
62
+ <action method="addItemRender"><type>bundle</type><block>bundle/adminhtml_sales_order_items_renderer</block><template>bundle/sales/invoice/create/items/renderer.phtml</template></action>
63
+ </reference>
64
+ </adminhtml_sales_order_invoice_updateqty>
65
+
66
+ <adminhtml_sales_order_invoice_view>
67
+ <reference name="invoice_items">
68
+ <action method="addItemRender"><type>bundle</type><block>bundle/adminhtml_sales_order_items_renderer</block><template>bundle/sales/invoice/view/items/renderer.phtml</template></action>
69
+ </reference>
70
+ </adminhtml_sales_order_invoice_view>
71
+
72
+ <adminhtml_sales_order_shipment_new>
73
+ <reference name="order_items">
74
+ <action method="addItemRender"><type>bundle</type><block>bundle/adminhtml_sales_order_items_renderer</block><template>bundle/sales/shipment/create/items/renderer.phtml</template></action>
75
+ </reference>
76
+ </adminhtml_sales_order_shipment_new>
77
+
78
+ <adminhtml_sales_order_shipment_view>
79
+ <reference name="shipment_items">
80
+ <action method="addItemRender"><type>bundle</type><block>bundle/adminhtml_sales_order_items_renderer</block><template>bundle/sales/shipment/view/items/renderer.phtml</template></action>
81
+ </reference>
82
+ </adminhtml_sales_order_shipment_view>
83
+
84
+ <adminhtml_sales_order_creditmemo_new>
85
+ <reference name="order_items">
86
+ <action method="addItemRender"><type>bundle</type><block>bundle/adminhtml_sales_order_items_renderer</block><template>bundle/sales/creditmemo/create/items/renderer.phtml</template></action>
87
+ </reference>
88
+ </adminhtml_sales_order_creditmemo_new>
89
+
90
+ <adminhtml_sales_order_creditmemo_updateqty>
91
+ <reference name="order_items">
92
+ <action method="addItemRender"><type>bundle</type><block>bundle/adminhtml_sales_order_items_renderer</block><template>bundle/sales/creditmemo/create/items/renderer.phtml</template></action>
93
+ </reference>
94
+ </adminhtml_sales_order_creditmemo_updateqty>
95
+
96
+ <adminhtml_sales_order_creditmemo_view>
97
+ <reference name="creditmemo_items">
98
+ <action method="addItemRender"><type>bundle</type><block>bundle/adminhtml_sales_order_items_renderer</block><template>bundle/sales/creditmemo/view/items/renderer.phtml</template></action>
99
+ </reference>
100
+ </adminhtml_sales_order_creditmemo_view>
101
+
102
+ <adminhtml_customer_wishlist>
103
+ <reference name="customer.wishlist.edit.tab">
104
+ <action method="addProductConfigurationHelper"><type>bundle</type><name>bundle/catalog_product_configuration</name></action>
105
+ </reference>
106
+ </adminhtml_customer_wishlist>
107
+
108
+ <PRODUCT_TYPE_bundle>
109
+ <reference name="product.composite.fieldset">
110
+ <block type="bundle/adminhtml_catalog_product_composite_fieldset_bundle" before="product.composite.fieldset.options" name="product.composite.fieldset.bundle" template="bundle/product/composite/fieldset/options/bundle.phtml">
111
+ <action method="addRenderer"><type>select</type><block>bundle/adminhtml_catalog_product_composite_fieldset_options_type_select</block></action>
112
+ <action method="addRenderer"><type>multi</type><block>bundle/adminhtml_catalog_product_composite_fieldset_options_type_multi</block></action>
113
+ <action method="addRenderer"><type>radio</type><block>bundle/adminhtml_catalog_product_composite_fieldset_options_type_radio</block></action>
114
+ <action method="addRenderer"><type>checkbox</type><block>bundle/adminhtml_catalog_product_composite_fieldset_options_type_checkbox</block></action>
115
+ </block>
116
+ </reference>
117
+ </PRODUCT_TYPE_bundle>
118
+ </layout>
app/design/adminhtml/default/default/layout/captcha.xml ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+
28
+ -->
29
+ <layout version="0.1.0">
30
+ <adminhtml_index_login>
31
+ <reference name="form.additional.info">
32
+ <block type="captcha/captcha" name="captcha">
33
+ <action method="setFormId"><formId>backend_login</formId></action>
34
+ <action method="setImgWidth"><width>226</width></action>
35
+ <action method="setImgHeight"><width>50</width></action>
36
+ </block>
37
+ </reference>
38
+ </adminhtml_index_login>
39
+ <adminhtml_index_forgotpassword>
40
+ <reference name="form.additional.info">
41
+ <block type="captcha/captcha" name="captcha">
42
+ <action method="setFormId"><formId>backend_forgotpassword</formId></action>
43
+ <action method="setImgWidth"><width>226</width></action>
44
+ <action method="setImgHeight"><width>50</width></action>
45
+ </block>
46
+ </reference>
47
+ </adminhtml_index_forgotpassword>
48
+ </layout>
app/design/adminhtml/default/default/layout/catalog.xml ADDED
@@ -0,0 +1,332 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_catalog_product_index>
31
+ <referense name="head">
32
+ <action method="setTitle" translate="title"><title>Catalog</title></action>
33
+ </referense>
34
+ <reference name="menu">
35
+ <action method="setActive"><menupath>catalog/products</menupath></action>
36
+ </reference>
37
+ <reference name="content">
38
+ <block type="adminhtml/catalog_product" name="products_list">
39
+ <block type="adminhtml/store_switcher" name="store_switcher" as="store_switcher">
40
+ <action method="setUseConfirm"><params>0</params></action>
41
+ </block>
42
+ </block>
43
+ </reference>
44
+ </adminhtml_catalog_product_index>
45
+
46
+ <adminhtml_catalog_product_new>
47
+ <update handle="editor"/>
48
+ <reference name="content">
49
+ <block type="adminhtml/catalog_product_edit" name="product_edit"></block>
50
+ </reference>
51
+ <reference name="left">
52
+ <block type="adminhtml/catalog_product_edit_tabs" name="product_tabs"></block>
53
+ </reference>
54
+ <reference name="js">
55
+ <block type="adminhtml/catalog_product_edit_js" template="catalog/product/js.phtml" name="catalog_product_js"></block>
56
+ <block type="core/template" template="catalog/wysiwyg/js.phtml"/>
57
+ </reference>
58
+ </adminhtml_catalog_product_new>
59
+
60
+ <adminhtml_catalog_product_edit>
61
+ <update handle="editor"/>
62
+ <reference name="content">
63
+ <block type="adminhtml/catalog_product_edit" name="product_edit"></block>
64
+ </reference>
65
+ <reference name="left">
66
+ <block type="adminhtml/store_switcher" name="store_switcher" before="-"></block>
67
+ <block type="adminhtml/catalog_product_edit_tabs" name="product_tabs"></block>
68
+ </reference>
69
+ <reference name="js">
70
+ <block type="adminhtml/catalog_product_edit_js" template="catalog/product/js.phtml" name="catalog_product_js"></block>
71
+ <block type="core/template" name="catalog.wysiwyg.js" template="catalog/wysiwyg/js.phtml"/>
72
+ </reference>
73
+ </adminhtml_catalog_product_edit>
74
+
75
+ <adminhtml_catalog_product_categories>
76
+ <block type="core/text_list" name="root" output="toHtml">
77
+ <block type="adminhtml/catalog_product_edit_tab_categories" name="catalog.product.edit.tab.categories"/>
78
+ </block>
79
+ </adminhtml_catalog_product_categories>
80
+
81
+ <adminhtml_catalog_product_reviews>
82
+ <block type="core/text_list" name="root" output="toHtml">
83
+ <block type="adminhtml/catalog_product_edit_tab_reviews" name="admin.product.reviews"/>
84
+ </block>
85
+ </adminhtml_catalog_product_reviews>
86
+
87
+ <adminhtml_catalog_product_taggrid>
88
+ <block type="core/text_list" name="root" output="toHtml">
89
+ <block type="adminhtml/catalog_product_edit_tab_tag" name="admin.product.tags"/>
90
+ </block>
91
+ </adminhtml_catalog_product_taggrid>
92
+
93
+ <adminhtml_catalog_product_tagcustomergrid>
94
+ <block type="core/text_list" name="root" output="toHtml">
95
+ <block type="adminhtml/catalog_product_edit_tab_tag_customer" name="admin.product.tags.customers"/>
96
+ </block>
97
+ </adminhtml_catalog_product_tagcustomergrid>
98
+
99
+ <adminhtml_catalog_product_options>
100
+ <block type="core/text_list" name="root" output="toHtml">
101
+ <block type="adminhtml/catalog_product_edit_tab_options" name="admin.product.options"/>
102
+ </block>
103
+ </adminhtml_catalog_product_options>
104
+
105
+ <adminhtml_catalog_product_grid>
106
+ <block type="core/text_list" name="root" output="toHtml">
107
+ <block type="adminhtml/catalog_product_grid" name="admin.product.grid"/>
108
+ </block>
109
+ </adminhtml_catalog_product_grid>
110
+
111
+ <adminhtml_catalog_product_related>
112
+ <block type="core/text_list" name="root" output="toHtml">
113
+ <block type="adminhtml/catalog_product_edit_tab_related" name="catalog.product.edit.tab.related"/>
114
+ <block type="adminhtml/widget_grid_serializer" name="related_grid_serializer">
115
+ <reference name="related_grid_serializer">
116
+ <action method="initSerializerBlock">
117
+ <grid_block_name>catalog.product.edit.tab.related</grid_block_name>
118
+ <data_callback>getSelectedRelatedProducts</data_callback>
119
+ <hidden_input_name>links[related]</hidden_input_name>
120
+ <reload_param_name>products_related</reload_param_name>
121
+ </action>
122
+ <action method="addColumnInputName">
123
+ <input_name>position</input_name>
124
+ </action>
125
+ </reference>
126
+ </block>
127
+ </block>
128
+ </adminhtml_catalog_product_related>
129
+
130
+ <adminhtml_catalog_product_relatedgrid>
131
+ <block type="core/text_list" name="root" output="toHtml">
132
+ <block type="adminhtml/catalog_product_edit_tab_related" name="catalog.product.edit.tab.related"/>
133
+ </block>
134
+ </adminhtml_catalog_product_relatedgrid>
135
+
136
+ <adminhtml_catalog_product_superconfig>
137
+ <block type="adminhtml/catalog_product_edit_tab_super_config_grid" name="admin.product.edit.tab.super.config.grid" output="toHtml" />
138
+ </adminhtml_catalog_product_superconfig>
139
+
140
+ <adminhtml_catalog_product_alertspricegrid>
141
+ <block type="adminhtml/catalog_product_edit_tab_alerts_price" name="admin.product.edit.tab.alerts.price" output="toHtml" />
142
+ </adminhtml_catalog_product_alertspricegrid>
143
+
144
+ <adminhtml_catalog_product_alertsstockgrid>
145
+ <block type="adminhtml/catalog_product_edit_tab_alerts_stock" name="admin.product.edit.tab.alerts.stock" output="toHtml" />
146
+ </adminhtml_catalog_product_alertsstockgrid>
147
+
148
+ <adminhtml_catalog_product_upsell>
149
+ <block type="core/text_list" name="root" output="toHtml">
150
+ <block type="adminhtml/catalog_product_edit_tab_upsell" name="catalog.product.edit.tab.upsell"/>
151
+ <block type="adminhtml/widget_grid_serializer" name="upsell_grid_serializer">
152
+ <reference name="upsell_grid_serializer">
153
+ <action method="initSerializerBlock">
154
+ <grid_block_name>catalog.product.edit.tab.upsell</grid_block_name>
155
+ <data_callback>getSelectedUpsellProducts</data_callback>
156
+ <hidden_input_name>links[upsell]</hidden_input_name>
157
+ <reload_param_name>products_upsell</reload_param_name>
158
+ </action>
159
+ <action method="addColumnInputName">
160
+ <input_name>position</input_name>
161
+ </action>
162
+ </reference>
163
+ </block>
164
+ </block>
165
+ </adminhtml_catalog_product_upsell>
166
+
167
+ <adminhtml_catalog_product_upsellgrid>
168
+ <block type="core/text_list" name="root" output="toHtml">
169
+ <block type="adminhtml/catalog_product_edit_tab_upsell" name="catalog.product.edit.tab.upsell"/>
170
+ </block>
171
+ </adminhtml_catalog_product_upsellgrid>
172
+
173
+ <adminhtml_catalog_product_crosssell>
174
+ <block type="core/text_list" name="root" output="toHtml">
175
+ <block type="adminhtml/catalog_product_edit_tab_crosssell" name="catalog.product.edit.tab.crosssell"/>
176
+ <block type="adminhtml/widget_grid_serializer" name="crosssell_grid_serializer">
177
+ <reference name="crosssell_grid_serializer">
178
+ <action method="initSerializerBlock">
179
+ <grid_block_name>catalog.product.edit.tab.crosssell</grid_block_name>
180
+ <data_callback>getSelectedCrossSellProducts</data_callback>
181
+ <hidden_input_name>links[crosssell]</hidden_input_name>
182
+ <reload_param_name>products_crosssell</reload_param_name>
183
+ </action>
184
+ <action method="addColumnInputName">
185
+ <input_name>position</input_name>
186
+ </action>
187
+ </reference>
188
+ </block>
189
+ </block>
190
+ </adminhtml_catalog_product_crosssell>
191
+
192
+ <adminhtml_catalog_product_crosssellgrid>
193
+ <block type="core/text_list" name="root" output="toHtml">
194
+ <block type="adminhtml/catalog_product_edit_tab_crosssell" name="catalog.product.edit.tab.crosssell"/>
195
+ </block>
196
+ </adminhtml_catalog_product_crosssellgrid>
197
+ <!--
198
+ Layout handle for simple products
199
+ -->
200
+
201
+ <adminhtml_catalog_product_simple />
202
+
203
+ <!--
204
+ Layout handle for grouped products
205
+ -->
206
+ <adminhtml_catalog_product_grouped>
207
+ <reference name="product_tabs">
208
+ <action method="addTab"><name>super</name><block>adminhtml/catalog_product_edit_tab_super_group</block></action>
209
+ </reference>
210
+ </adminhtml_catalog_product_grouped>
211
+
212
+ <adminhtml_catalog_product_supergroup>
213
+ <block type="core/text_list" name="root" output="toHtml">
214
+ <block type="adminhtml/catalog_product_edit_tab_super_group" name="catalog.product.edit.tab.super.group" />
215
+ <block type="adminhtml/widget_grid_serializer" name="grouped_grid_serializer">
216
+ <reference name="grouped_grid_serializer">
217
+ <action method="initSerializerBlock">
218
+ <grid_block_name>catalog.product.edit.tab.super.group</grid_block_name>
219
+ <data_callback>getSelectedGroupedProducts</data_callback>
220
+ <hidden_input_name>links[grouped]</hidden_input_name>
221
+ <reload_param_name>products_grouped</reload_param_name>
222
+ </action>
223
+ <action method="addColumnInputName">
224
+ <input_name>qty</input_name>
225
+ <input_name>position</input_name>
226
+ </action>
227
+ </reference>
228
+ </block>
229
+ </block>
230
+ </adminhtml_catalog_product_supergroup>
231
+
232
+ <adminhtml_catalog_product_supergroupgridonly>
233
+ <block type="core/text_list" name="root">
234
+ <block type="adminhtml/catalog_product_edit_tab_super_group" name="catalog.product.edit.tab.super.group" />
235
+ </block>
236
+ </adminhtml_catalog_product_supergroupgridonly>
237
+ <!--
238
+ Layout handle for configurable products
239
+ -->
240
+
241
+ <adminhtml_catalog_product_configurable_new>
242
+ <remove name="product_tabs"/>
243
+ <reference name="left">
244
+ <block type="adminhtml/catalog_product_edit_tabs_configurable" name="configurable_product_tabs"></block>
245
+ </reference>
246
+ </adminhtml_catalog_product_configurable_new>
247
+
248
+ <adminhtml_catalog_product_configurable>
249
+ <reference name="product_tabs">
250
+ <action method="addTab"><name>configurable</name><block>adminhtml/catalog_product_edit_tab_super_config</block></action>
251
+ <action method="bindShadowTabs"><first>configurable</first><second>customer_options</second></action>
252
+ </reference>
253
+ </adminhtml_catalog_product_configurable>
254
+
255
+ <adminhtml_catalog_product_action_attribute_edit>
256
+ <reference name="left">
257
+ <block type="adminhtml/store_switcher" name="store_switcher" template="store/switcher.phtml" />
258
+ <block type="adminhtml/catalog_product_edit_action_attribute_tabs" name="attributes_tabs">
259
+ <block type="adminhtml/catalog_product_edit_action_attribute_tab_attributes" name="tab_attributes"/>
260
+ <block type="adminhtml/catalog_product_edit_action_attribute_tab_inventory" name="tab_inventory" template="catalog/product/edit/action/inventory.phtml" />
261
+ <block type="adminhtml/catalog_product_edit_action_attribute_tab_websites" name="tab_websites" template="catalog/product/edit/action/websites.phtml" />
262
+ <action method="addTab"><name>attributes</name><block>tab_attributes</block></action>
263
+ <action method="addTab"><name>inventory</name><block>tab_inventory</block></action>
264
+ <action method="addTab"><name>websites</name><block>tab_websites</block></action>
265
+ </block>
266
+ </reference>
267
+ <reference name="content">
268
+ <block type="adminhtml/catalog_product_edit_action_attribute" name="attribute" template="catalog/product/edit/action/attribute.phtml" />
269
+ </reference>
270
+ </adminhtml_catalog_product_action_attribute_edit>
271
+
272
+ <adminhtml_catalog_product_attribute_edit>
273
+ <reference name="left">
274
+ <block type="adminhtml/catalog_product_attribute_edit_tabs" name="attribute_edit_tabs"></block>
275
+ </reference>
276
+ <reference name="content">
277
+ <block type="adminhtml/catalog_product_attribute_edit" name="attribute_edit_content"></block>
278
+ </reference>
279
+ <reference name="js">
280
+ <block type="adminhtml/template" name="attribute_edit_js" template="catalog/product/attribute/js.phtml"></block>
281
+ </reference>
282
+ </adminhtml_catalog_product_attribute_edit>
283
+
284
+ <adminhtml_catalog_category_edit>
285
+ <update handle="editor"/>
286
+ <reference name="left">
287
+ <block name="category.tree" type="adminhtml/catalog_category_tree" template="catalog/category/tree.phtml" />
288
+ </reference>
289
+ <reference name="content">
290
+ <block name="category.edit" type="adminhtml/catalog_category_edit" template="catalog/category/edit.phtml" />
291
+ </reference>
292
+ <reference name="js">
293
+ <block type="core/template" template="catalog/wysiwyg/js.phtml" name="catalog.wysiwyg.js" />
294
+ </reference>
295
+ </adminhtml_catalog_category_edit>
296
+
297
+ <ADMINHTML_CATALOG_PRODUCT_COMPOSITE_CONFIGURE>
298
+ <block type="adminhtml/catalog_product_composite_fieldset" name="product.composite.fieldset" output="toHtml">
299
+ <block name="product.composite.fieldset.options" type="adminhtml/catalog_product_composite_fieldset_options" template="catalog/product/composite/fieldset/options.phtml">
300
+ <action method="addOptionRenderer"><type>text</type><block>catalog/product_view_options_type_text</block><template>catalog/product/composite/fieldset/options/type/text.phtml</template></action>
301
+ <action method="addOptionRenderer"><type>file</type><block>catalog/product_view_options_type_file</block><template>catalog/product/composite/fieldset/options/type/file.phtml</template></action>
302
+ <action method="addOptionRenderer"><type>select</type><block>catalog/product_view_options_type_select</block><template>catalog/product/composite/fieldset/options/type/select.phtml</template></action>
303
+ <action method="addOptionRenderer"><type>date</type><block>catalog/product_view_options_type_date</block><template>catalog/product/composite/fieldset/options/type/date.phtml</template></action>
304
+ <block type="core/template" name="product.composite.fieldset.options.js" as="options_js" template="catalog/product/composite/fieldset/options/js.phtml"/>
305
+ </block>
306
+ <block type="adminhtml/catalog_product_composite_fieldset_qty" name="product.composite.fieldset.qty" template="catalog/product/composite/fieldset/qty.phtml"/>
307
+ </block>
308
+ </ADMINHTML_CATALOG_PRODUCT_COMPOSITE_CONFIGURE>
309
+
310
+ <ADMINHTML_CATALOG_PRODUCT_COMPOSITE_CONFIGURE_ERROR>
311
+ <block type="adminhtml/catalog_product_composite_error" name="product.composite.error" output="toHtml" />
312
+ </ADMINHTML_CATALOG_PRODUCT_COMPOSITE_CONFIGURE_ERROR>
313
+
314
+ <ADMINHTML_CATALOG_PRODUCT_COMPOSITE_UPDATE_RESULT>
315
+ <block type="adminhtml/catalog_product_composite_update_result" name="product.composite.update.result" output="toHtml" />
316
+ </ADMINHTML_CATALOG_PRODUCT_COMPOSITE_UPDATE_RESULT>
317
+ <!--
318
+ Additional block in composite_fieldset block dependant on product type
319
+ -->
320
+ <PRODUCT_TYPE_configurable>
321
+ <reference name="product.composite.fieldset">
322
+ <block type="adminhtml/catalog_product_composite_fieldset_configurable" name="product.composite.fieldset.configurable" before="product.composite.fieldset.options" template="catalog/product/composite/fieldset/configurable.phtml" />
323
+ </reference>
324
+ </PRODUCT_TYPE_configurable>
325
+ <PRODUCT_TYPE_grouped>
326
+ <reference name="product.composite.fieldset">
327
+ <block type="adminhtml/catalog_product_composite_fieldset_grouped" name="product.composite.fieldset.grouped" before="product.composite.fieldset.options" template="catalog/product/composite/fieldset/grouped.phtml"/>
328
+ <remove name="product.composite.fieldset.qty"/>
329
+ </reference>
330
+ </PRODUCT_TYPE_grouped>
331
+
332
+ </layout>
app/design/adminhtml/default/default/layout/centinel.xml ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+
28
+ -->
29
+ <layout version="0.1.0">
30
+
31
+ <adminhtml_centinel_index_authenticationstart>
32
+ <block type="centinel/authentication_start" name="root" output="toHtml" template="centinel/authentication/start.phtml"/>
33
+ </adminhtml_centinel_index_authenticationstart>
34
+
35
+ <adminhtml_centinel_index_authenticationcomplete>
36
+ <block type="centinel/authentication_complete" name="root" output="toHtml" template="centinel/authentication/complete.phtml"/>
37
+ </adminhtml_centinel_index_authenticationcomplete>
38
+
39
+ <adminhtml_sales_order_create_index>
40
+ <reference name="head">
41
+ <action method="addJs"><script>mage/adminhtml/sales/centinel.js</script></action>
42
+ </reference>
43
+ <reference name="data">
44
+ <block type="centinel/adminhtml_validation" as="card_validation" name="card_validation" template="sales/order/create/abstract.phtml">
45
+ <block type="centinel/adminhtml_validation_form" template="centinel/validation/form.phtml" name="form" />
46
+ </block>
47
+ </reference>
48
+ </adminhtml_sales_order_create_index>
49
+
50
+ <adminhtml_sales_order_create_start>
51
+ <update handle="adminhtml_sales_order_create_index"/>
52
+ </adminhtml_sales_order_create_start>
53
+
54
+ <adminhtml_sales_order_create_load_block_data>
55
+ <reference name="data">
56
+ <block type="centinel/adminhtml_validation" as="card_validation" name="card_validation" template="sales/order/create/abstract.phtml">
57
+ <block type="centinel/adminhtml_validation_form" template="centinel/validation/form.phtml" name="form" />
58
+ </block>
59
+ </reference>
60
+ </adminhtml_sales_order_create_load_block_data>
61
+
62
+ <adminhtml_sales_order_create_load_block_card_validation>
63
+ <reference name="content">
64
+ <block type="centinel/adminhtml_validation" as="card_validation" name="card_validation" template="sales/order/create/abstract.phtml">
65
+ <block type="centinel/adminhtml_validation_form" template="centinel/validation/form.phtml" name="form" />
66
+ </block>
67
+ </reference>
68
+ </adminhtml_sales_order_create_load_block_card_validation>
69
+
70
+ </layout>
app/design/adminhtml/default/default/layout/cms.xml ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_cms_page_index>
31
+ <reference name="content">
32
+ <block type="adminhtml/cms_page" name="cms_page"></block>
33
+ </reference>
34
+ </adminhtml_cms_page_index>
35
+
36
+ <adminhtml_cms_page_new>
37
+ <update handle="adminhtml_cms_page_edit" />
38
+ </adminhtml_cms_page_new>
39
+
40
+ <adminhtml_cms_page_edit>
41
+ <update handle="editor"/>
42
+ <reference name="content">
43
+ <block type="adminhtml/cms_page_edit" name="cms_page_edit"></block>
44
+ </reference>
45
+ <reference name="left">
46
+ <block type="adminhtml/cms_page_edit_tabs" name="cms_page_edit_tabs">
47
+ <block type="adminhtml/cms_page_edit_tab_main" name="cms_page_edit_tab_main" />
48
+ <block type="adminhtml/cms_page_edit_tab_content" name="cms_page_edit_tab_content" />
49
+ <block type="adminhtml/cms_page_edit_tab_design" name="cms_page_edit_tab_design" />
50
+ <block type="adminhtml/cms_page_edit_tab_meta" name="cms_page_edit_tab_meta" />
51
+ <action method="addTab"><name>main_section</name><block>cms_page_edit_tab_main</block></action>
52
+ <action method="addTab"><name>content_section</name><block>cms_page_edit_tab_content</block></action>
53
+ <action method="addTab"><name>design_section</name><block>cms_page_edit_tab_design</block></action>
54
+ <action method="addTab"><name>meta_section</name><block>cms_page_edit_tab_meta</block></action>
55
+ </block>
56
+ </reference>
57
+ </adminhtml_cms_page_edit>
58
+
59
+ <adminhtml_cms_block_index>
60
+ <reference name="content">
61
+ <block type="adminhtml/cms_block" name="cms_block"></block>
62
+ </reference>
63
+ </adminhtml_cms_block_index>
64
+
65
+ <adminhtml_cms_block_new>
66
+ <update handle="adminhtml_cms_block_edit" />
67
+ </adminhtml_cms_block_new>
68
+
69
+ <adminhtml_cms_block_edit>
70
+ <update handle="editor"/>
71
+ <reference name="content">
72
+ <block type="adminhtml/cms_block_edit" name="cms_block_edit"></block>
73
+ </reference>
74
+ </adminhtml_cms_block_edit>
75
+
76
+ <adminhtml_cms_wysiwyg_images_index>
77
+ <remove name="footer" />
78
+ <remove name="head" />
79
+ <reference name="left">
80
+ <block name="wysiwyg_images.js" type="adminhtml/cms_wysiwyg_images_content" template="cms/browser/js.phtml" />
81
+ <block name="wysiwyg_images.tree" type="adminhtml/cms_wysiwyg_images_tree" template="cms/browser/tree.phtml" />
82
+ </reference>
83
+ <reference name="content">
84
+ <block name="wysiwyg_images.content" type="adminhtml/cms_wysiwyg_images_content" template="cms/browser/content.phtml">
85
+ <block name="wysiwyg_images.uploader" type="adminhtml/cms_wysiwyg_images_content_uploader" template="cms/browser/content/uploader.phtml" />
86
+ <block name="wysiwyg_images.newfolder" type="adminhtml/cms_wysiwyg_images_content_newfolder" template="cms/browser/content/newfolder.phtml" />
87
+ </block>
88
+ </reference>
89
+ </adminhtml_cms_wysiwyg_images_index>
90
+
91
+ <adminhtml_cms_wysiwyg_images_contents>
92
+ <block name="wysiwyg_images.files" type="adminhtml/cms_wysiwyg_images_content_files" template="cms/browser/content/files.phtml" output="toHtml" />
93
+ </adminhtml_cms_wysiwyg_images_contents>
94
+
95
+ </layout>
app/design/adminhtml/default/default/layout/compiler.xml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_compiler_process_index>
31
+ <reference name="content">
32
+ <block type="compiler/process" name="compiler_process" template="compiler/process.phtml"></block>
33
+ </reference>
34
+ </adminhtml_compiler_process_index>
35
+ </layout>
app/design/adminhtml/default/default/layout/connect.xml ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_extension_custom_edit>
31
+ <reference name="content">
32
+ <block type="connect/adminhtml_extension_custom_edit" name="connect_extension_edit"></block>
33
+ </reference>
34
+ <reference name="left">
35
+ <block type="connect/adminhtml_extension_custom_edit_tabs" name="connect_extension_edit_tabs">
36
+ <block type="connect/adminhtml_extension_custom_edit_tab_package" name="tab_package"
37
+ template="connect/extension/custom/package.phtml" />
38
+ <block type="connect/adminhtml_extension_custom_edit_tab_release" name="tab_release"
39
+ template="connect/extension/custom/release.phtml" />
40
+ <block type="connect/adminhtml_extension_custom_edit_tab_authors" name="tab_authors"
41
+ template="connect/extension/custom/authors.phtml" />
42
+ <block type="connect/adminhtml_extension_custom_edit_tab_depends" name="tab_depends"
43
+ template="connect/extension/custom/depends.phtml" />
44
+ <block type="connect/adminhtml_extension_custom_edit_tab_contents" name="tab_contents"
45
+ template="connect/extension/custom/contents.phtml" />
46
+ <block type="connect/adminhtml_extension_custom_edit_tab_local" name="tab_local" />
47
+
48
+ <action method="addTab"><name>package_info</name><block>tab_package</block></action>
49
+ <action method="addTab"><name>release_info</name><block>tab_release</block></action>
50
+ <action method="addTab"><name>authors</name><block>tab_authors</block></action>
51
+ <action method="addTab"><name>dependencies</name><block>tab_depends</block></action>
52
+ <action method="addTab"><name>contents</name><block>tab_contents</block></action>
53
+ <action method="addTab"><name>load_local_package</name><block>tab_local</block></action>
54
+ </block>
55
+ </reference>
56
+ </adminhtml_extension_custom_edit>
57
+
58
+ <adminhtml_extension_custom_loadtab>
59
+ <block type="core/text_list" name="root">
60
+ <block type="connect/adminhtml_extension_custom_edit_tab_load" name="connect_extension_load_local_package_grid"
61
+ template="connect/extension/custom/load.phtml">
62
+ <block type="connect/adminhtml_extension_custom_edit_tab_grid" name="local_package_grid" />
63
+ </block>
64
+ </block>
65
+ </adminhtml_extension_custom_loadtab>
66
+
67
+ <adminhtml_extension_custom_grid>
68
+ <block type="core/text_list" name="root">
69
+ <block type="connect/adminhtml_extension_custom_edit_tab_grid" name="connect_extension_edit_local_package_grid" />
70
+ </block>
71
+ </adminhtml_extension_custom_grid>
72
+ </layout>
73
+
app/design/adminhtml/default/default/layout/currencysymbol.xml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+ <layout>
29
+ <adminhtml_system_currencysymbol_index>
30
+ <reference name="content">
31
+ <block type="currencysymbol/adminhtml_system_currencysymbol" name="mage.system.currencysymbol" template="currencysymbol/grid.phtml"/>
32
+ </reference>
33
+ </adminhtml_system_currencysymbol_index>
34
+ </layout>
app/design/adminhtml/default/default/layout/customer.xml ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_customer_edit>
31
+ <reference name="content">
32
+ <block type="adminhtml/customer_edit" name="customer_edit"></block>
33
+ </reference>
34
+ <reference name="head">
35
+ <block type="adminhtml/template" name="optional_zip_countries" as="optional_zip_countries" template="directory/js/optional_zip_countries.phtml" />
36
+ <action method="addJs"><file>mage/adminhtml/product/composite/configure.js</file></action>
37
+ <action method="addJs"><file>varien/configurable.js</file></action>
38
+ </reference>
39
+ <reference name="left">
40
+ <block type="adminhtml/customer_edit_tabs" name="customer_edit_tabs">
41
+ <block type="adminhtml/customer_edit_tab_view" name="customer_edit_tab_view" template="customer/tab/view.phtml">
42
+ <block type="adminhtml/customer_edit_tab_view_sales" name="sales" template="customer/tab/view/sales.phtml" before="-" />
43
+ <block type="adminhtml/customer_edit_tab_view_accordion" name="accordion" />
44
+ </block>
45
+ <action method="addTab"><name>customer_edit_tab_view</name><block>customer_edit_tab_view</block></action>
46
+ </block>
47
+ </reference>
48
+ <reference name="js">
49
+ <block type="adminhtml/template" template="customer/edit/js.phtml" name="customer.edit.js" as="customer_edit_js"></block>
50
+ </reference>
51
+ </adminhtml_customer_edit>
52
+ <adminhtml_customer_group_index>
53
+ <reference name="content">
54
+ <block type="adminhtml/customer_group" name="customer_group"></block>
55
+ </reference>
56
+ </adminhtml_customer_group_index>
57
+ <adminhtml_customer_wishlist>
58
+ <block type="adminhtml/customer_edit_tab_wishlist" name="customer.wishlist.edit.tab" output="toHtml" />
59
+ </adminhtml_customer_wishlist>
60
+
61
+ <adminhtml_customer_orders>
62
+ <block type="core/text_list" name="root" output="toHtml">
63
+ <block type="adminhtml/customer_edit_tab_orders" name="adminhtml.customer.edit.tab.orders"/>
64
+ </block>
65
+ </adminhtml_customer_orders>
66
+
67
+ <adminhtml_customer_carts>
68
+ <block type="core/text_list" name="root" output="toHtml">
69
+ <block type="adminhtml/customer_edit_tab_carts" name="admin.customer.carts"/>
70
+ </block>
71
+ </adminhtml_customer_carts>
72
+
73
+ <adminhtml_customer_viewcart>
74
+ <block type="core/text_list" name="root" output="toHtml">
75
+ <block type="adminhtml/customer_edit_tab_view_cart" name="admin.customer.view.cart"/>
76
+ </block>
77
+ </adminhtml_customer_viewcart>
78
+
79
+ <adminhtml_customer_viewwishlist>
80
+ <block type="core/text_list" name="root" output="toHtml">
81
+ <block type="adminhtml/customer_edit_tab_view_wishlist" name="admin.customer.view.wishlist"/>
82
+ </block>
83
+ </adminhtml_customer_viewwishlist>
84
+
85
+ <adminhtml_customer_lastorders>
86
+ <block type="core/text_list" name="root" output="toHtml">
87
+ <block type="adminhtml/customer_edit_tab_view_orders" name="admin.customer.lastorders"/>
88
+ </block>
89
+ </adminhtml_customer_lastorders>
90
+
91
+ <adminhtml_customer_productreviews>
92
+ <block type="core/text_list" name="root" output="toHtml">
93
+ <block type="adminhtml/customer_edit_tab_reviews" name="admin.customer.reviews"/>
94
+ </block>
95
+ </adminhtml_customer_productreviews>
96
+
97
+ <adminhtml_customer_producttags>
98
+ <block type="core/text_list" name="root" output="toHtml">
99
+ <block type="adminhtml/customer_edit_tab_tag" name="admin.customer.tags"/>
100
+ </block>
101
+ </adminhtml_customer_producttags>
102
+
103
+ <adminhtml_customer_taggrid>
104
+ <block type="core/text_list" name="root" output="toHtml">
105
+ <block type="adminhtml/customer_edit_tab_tag" name="admin.customer.tags"/>
106
+ </block>
107
+ </adminhtml_customer_taggrid>
108
+
109
+ <adminhtml_customer_newsletter>
110
+ <block type="core/text_list" name="root" output="toHtml">
111
+ <block type="adminhtml/customer_edit_tab_newsletter_grid" name="admin.customer.newsletter.grid"/>
112
+ </block>
113
+ </adminhtml_customer_newsletter>
114
+
115
+ <adminhtml_customer_grid>
116
+ <block type="core/text_list" name="root" output="toHtml">
117
+ <block type="adminhtml/customer_grid" name="admin.customer.grid"/>
118
+ </block>
119
+ </adminhtml_customer_grid>
120
+
121
+ <adminhtml_customer_cart>
122
+ <block type="core/text_list" name="root" output="toHtml">
123
+ <block type="adminhtml/customer_edit_tab_cart" name="admin.customer.view.edit.cart" />
124
+ </block>
125
+ </adminhtml_customer_cart>
126
+ </layout>
app/design/adminhtml/default/default/layout/dataflow.xml ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+
31
+ <adminhtml_system_convert_gui_run>
32
+ <remove name="root"/>
33
+ <block type="adminhtml/page" name="convert_root" output="toHtml" template="page.phtml">
34
+ <block type="adminhtml/page_head" name="convert_root_head" as="head" template="page/head.phtml">
35
+ <action method="addJs"><script>prototype/prototype.js</script></action>
36
+ <action method="addJs"><script>prototype/validation.js</script></action>
37
+ <action method="addJs"><script>varien/js.js</script></action>
38
+ <action method="addJs"><script>mage/translate.js</script></action>
39
+ <action method="addJs"><script>mage/adminhtml/tools.js</script></action>
40
+ </block>
41
+ <block type="adminhtml/system_convert_profile_run" name="system_convert_profile_run" template="system/convert/profile/process.phtml" output="toHtml"/>
42
+ </block>
43
+ </adminhtml_system_convert_gui_run>
44
+
45
+ <adminhtml_system_convert_profile_run>
46
+ <remove name="root"/>
47
+ <block type="adminhtml/page" name="convert_root" output="toHtml" template="page.phtml">
48
+ <block type="adminhtml/page_head" name="convert_root_head" as="head" template="page/head.phtml">
49
+ <action method="addJs"><script>prototype/prototype.js</script></action>
50
+ <action method="addJs"><script>prototype/validation.js</script></action>
51
+ <action method="addJs"><script>varien/js.js</script></action>
52
+ <action method="addJs"><script>mage/translate.js</script></action>
53
+ <action method="addJs"><script>mage/adminhtml/tools.js</script></action>
54
+ </block>
55
+ <block type="adminhtml/system_convert_profile_run" name="system_convert_profile_run" template="system/convert/profile/process.phtml" output="toHtml"/>
56
+ </block>
57
+ </adminhtml_system_convert_profile_run>
58
+
59
+ </layout>
app/design/adminhtml/default/default/layout/downloadable.xml ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+
31
+ <adminhtml_catalog_product_downloadable>
32
+ <reference name="product_tabs">
33
+ <action method="addTab"><name>downloadable_items</name><block>downloadable/adminhtml_catalog_product_edit_tab_downloadable</block></action>
34
+ </reference>
35
+ </adminhtml_catalog_product_downloadable>
36
+
37
+ <adminhtml_sales_order_view>
38
+ <reference name="order_items">
39
+ <action method="addItemRender"><type>downloadable</type><block>adminhtml/sales_order_view_items_renderer_default</block><template>downloadable/sales/order/view/items/renderer/downloadable.phtml</template></action>
40
+ <action method="addColumnRender"><column>downloadable</column><block>downloadable/adminhtml_sales_items_column_downloadable_name</block><template>downloadable/sales/items/column/downloadable/name.phtml</template></action>
41
+ </reference>
42
+ </adminhtml_sales_order_view>
43
+
44
+ <adminhtml_sales_order_invoice_new>
45
+ <reference name="order_items">
46
+ <action method="addItemRender"><type>downloadable</type><block>adminhtml/sales_items_renderer_default</block><template>downloadable/sales/order/invoice/create/items/renderer/downloadable.phtml</template></action>
47
+ <action method="addColumnRender"><column>downloadable</column><block>downloadable/adminhtml_sales_items_column_downloadable_name</block><template>downloadable/sales/items/column/downloadable/invoice/name.phtml</template></action>
48
+ </reference>
49
+ </adminhtml_sales_order_invoice_new>
50
+
51
+ <adminhtml_sales_order_invoice_updateqty>
52
+ <reference name="order_items">
53
+ <action method="addItemRender"><type>downloadable</type><block>adminhtml/sales_items_renderer_default</block><template>downloadable/sales/order/invoice/create/items/renderer/downloadable.phtml</template></action>
54
+ <action method="addColumnRender"><column>downloadable</column><block>downloadable/adminhtml_sales_items_column_downloadable_name</block><template>downloadable/sales/items/column/downloadable/invoice/name.phtml</template></action>
55
+ </reference>
56
+ </adminhtml_sales_order_invoice_updateqty>
57
+
58
+ <adminhtml_sales_order_invoice_view>
59
+ <reference name="invoice_items">
60
+ <action method="addItemRender"><type>downloadable</type><block>adminhtml/sales_items_renderer_default</block><template>downloadable/sales/order/invoice/view/items/renderer/downloadable.phtml</template></action>
61
+ <action method="addColumnRender"><column>downloadable</column><block>downloadable/adminhtml_sales_items_column_downloadable_name</block><template>downloadable/sales/items/column/downloadable/invoice/name.phtml</template></action>
62
+ </reference>
63
+ </adminhtml_sales_order_invoice_view>
64
+
65
+ <adminhtml_sales_order_creditmemo_new>
66
+ <reference name="order_items">
67
+ <action method="addItemRender"><type>downloadable</type><block>adminhtml/sales_items_renderer_default</block><template>downloadable/sales/order/creditmemo/create/items/renderer/downloadable.phtml</template></action>
68
+ <action method="addColumnRender"><column>downloadable</column><block>downloadable/adminhtml_sales_items_column_downloadable_name</block><template>downloadable/sales/items/column/downloadable/creditmemo/name.phtml</template></action>
69
+ </reference>
70
+ </adminhtml_sales_order_creditmemo_new>
71
+
72
+ <adminhtml_sales_order_creditmemo_updateqty>
73
+ <reference name="order_items">
74
+ <action method="addItemRender"><type>downloadable</type><block>adminhtml/sales_items_renderer_default</block><template>downloadable/sales/order/creditmemo/create/items/renderer/downloadable.phtml</template></action>
75
+ <action method="addColumnRender"><column>downloadable</column><block>downloadable/adminhtml_sales_items_column_downloadable_name</block><template>downloadable/sales/items/column/downloadable/creditmemo/name.phtml</template></action>
76
+ </reference>
77
+ </adminhtml_sales_order_creditmemo_updateqty>
78
+
79
+ <adminhtml_sales_order_creditmemo_view>
80
+ <reference name="creditmemo_items">
81
+ <action method="addItemRender"><type>downloadable</type><block>adminhtml/sales_items_renderer_default</block><template>downloadable/sales/order/creditmemo/view/items/renderer/downloadable.phtml</template></action>
82
+ <action method="addColumnRender"><column>downloadable</column><block>downloadable/adminhtml_sales_items_column_downloadable_name</block><template>downloadable/sales/items/column/downloadable/creditmemo/name.phtml</template></action>
83
+ </reference>
84
+ </adminhtml_sales_order_creditmemo_view>
85
+
86
+ <adminhtml_customer_wishlist>
87
+ <reference name="customer.wishlist.edit.tab">
88
+ <action method="addProductConfigurationHelper"><type>downloadable</type><name>downloadable/catalog_product_configuration</name></action>
89
+ </reference>
90
+ </adminhtml_customer_wishlist>
91
+
92
+ <PRODUCT_TYPE_downloadable>
93
+ <reference name="product.composite.fieldset">
94
+ <block type="downloadable/adminhtml_catalog_product_composite_fieldset_downloadable" name="product.composite.fieldset.downloadable" before="product.composite.fieldset.options" template="downloadable/product/composite/fieldset/downloadable.phtml" />
95
+ </reference>
96
+ </PRODUCT_TYPE_downloadable>
97
+ </layout>
app/design/adminhtml/default/default/layout/giftmessage.xml ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_sales_order_view>
31
+ <reference name="order_item_extra_info">
32
+ <block type="giftmessage/adminhtml_sales_order_view_giftoptions" name="gift_options_link" template="giftmessage/sales/order/view/giftoptions.phtml">
33
+ <block type="giftmessage/adminhtml_sales_order_view_items" name="gift_options_item_data" template="giftmessage/sales/order/view/items.phtml" />
34
+ </block>
35
+ </reference>
36
+ <reference name="order_tab_info">
37
+ <block type="adminhtml/template" name="popup_window" template="giftmessage/popup.phtml">
38
+ <block type="giftmessage/adminhtml_sales_order_view_form" name="gift_options_form" template="giftmessage/giftoptionsform.phtml" />
39
+ </block>
40
+ </reference>
41
+ </adminhtml_sales_order_view>
42
+
43
+ <adminhtml_sales_order_create_index>
44
+ <reference name="order_item_extra_info">
45
+ <block type="giftmessage/adminhtml_sales_order_create_giftoptions" name="gift_options_link" template="giftmessage/sales/order/create/giftoptions.phtml">
46
+ <block type="giftmessage/adminhtml_sales_order_create_items" name="gift_options_item_data" template="giftmessage/sales/order/create/items.phtml" />
47
+ </block>
48
+ </reference>
49
+ <reference name="items_grid">
50
+ <block type="adminhtml/template" name="popup_window" template="giftmessage/popup.phtml">
51
+ <block type="giftmessage/adminhtml_sales_order_create_form" name="gift_options_form" template="giftmessage/giftoptionsform.phtml" />
52
+ </block>
53
+ </reference>
54
+ </adminhtml_sales_order_create_index>
55
+
56
+ <adminhtml_sales_order_create_load_block_data>
57
+ <reference name="order_item_extra_info">
58
+ <block type="giftmessage/adminhtml_sales_order_create_giftoptions" name="gift_options_link" template="giftmessage/sales/order/create/giftoptions.phtml">
59
+ <block type="giftmessage/adminhtml_sales_order_create_items" name="gift_options_item_data" template="giftmessage/sales/order/create/items.phtml" />
60
+ </block>
61
+ </reference>
62
+ <reference name="items_grid">
63
+ <block type="adminhtml/template" name="popup_window" template="giftmessage/popup.phtml">
64
+ <block type="giftmessage/adminhtml_sales_order_create_form" name="gift_options_form" template="giftmessage/giftoptionsform.phtml" />
65
+ </block>
66
+ </reference>
67
+ </adminhtml_sales_order_create_load_block_data>
68
+
69
+ <adminhtml_sales_order_create_load_block_items>
70
+ <reference name="order_item_extra_info">
71
+ <block type="giftmessage/adminhtml_sales_order_create_giftoptions" name="gift_options_link" template="giftmessage/sales/order/create/giftoptions.phtml">
72
+ <block type="giftmessage/adminhtml_sales_order_create_items" name="gift_options_item_data" template="giftmessage/sales/order/create/items.phtml" />
73
+ </block>
74
+ </reference>
75
+ <reference name="items_grid">
76
+ <block type="adminhtml/template" name="popup_window" template="giftmessage/popup.phtml">
77
+ <block type="giftmessage/adminhtml_sales_order_create_form" name="gift_options_form" template="giftmessage/giftoptionsform.phtml" />
78
+ </block>
79
+ </reference>
80
+ </adminhtml_sales_order_create_load_block_items>
81
+ </layout>
82
+
app/design/adminhtml/default/default/layout/importexport.xml ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <adminhtml_import_index>
4
+ <reference name="content">
5
+ <block type="adminhtml/template" template="importexport/import/form/before.phtml" name="import.form.before" alias="form_before"/>
6
+ <block type="importexport/adminhtml_import_edit" name="import.form.container"/>
7
+ <block type="adminhtml/template" template="importexport/import/form/after.phtml" name="import.form.after" alias="form_after"/>
8
+ </reference>
9
+ </adminhtml_import_index>
10
+ <adminhtml_import_validate>
11
+ <block type="importexport/adminhtml_import_frame_result" template="importexport/import/frame/result.phtml" name="import.frame.result" alias="import_frame_result" output="toHtml"/>
12
+ </adminhtml_import_validate>
13
+ <adminhtml_import_start>
14
+ <block type="importexport/adminhtml_import_frame_result" template="importexport/import/frame/result.phtml" name="import.frame.result" alias="import_frame_result" output="toHtml"/>
15
+ </adminhtml_import_start>
16
+ <adminhtml_import_busy>
17
+ <reference name="content">
18
+ <block type="core/template" template="importexport/busy.phtml" name="busy" alias="busy"/>
19
+ </reference>
20
+ </adminhtml_import_busy>
21
+ <adminhtml_export_index>
22
+ <reference name="content">
23
+ <block type="adminhtml/template" template="importexport/export/form/before.phtml" name="export.form.before" alias="form_before"/>
24
+ <block type="importexport/adminhtml_export_edit" name="export.form.container"/>
25
+ <block type="adminhtml/template" template="importexport/export/form/after.phtml" name="export.form.after" alias="form_after"/>
26
+ </reference>
27
+ </adminhtml_export_index>
28
+ <adminhtml_export_getfilter>
29
+ <block type="core/text_list" name="root">
30
+ <block type="importexport/adminhtml_export_filter" name="export.filter"/>
31
+ </block>
32
+ </adminhtml_export_getfilter>
33
+ </layout>
app/design/adminhtml/default/default/layout/index.xml ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+ <layout>
29
+ <default>
30
+ <reference name="notifications">
31
+ <block type="index/adminhtml_notifications" name="index_notifications" template="index/notifications.phtml"></block>
32
+ </reference>
33
+ </default>
34
+
35
+ <adminhtml_process_edit>
36
+ <reference name="content">
37
+ <block type="index/adminhtml_process_edit" name="process_edit"></block>
38
+ </reference>
39
+ <reference name="left">
40
+ <block type="index/adminhtml_process_edit_tabs" name="index_edit_tabs">
41
+ <action method="addTab"><name>main_section</name><block>index/adminhtml_process_edit_tab_main</block></action>
42
+ </block>
43
+ </reference>
44
+ </adminhtml_process_edit>
45
+ </layout>
app/design/adminhtml/default/default/layout/main.xml ADDED
@@ -0,0 +1,291 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+
28
+
29
+ Supported layout update handles (action):
30
+
31
+
32
+ Supported layout update handles (special):
33
+ - adminhtml
34
+ - default
35
+ - admin_noroute
36
+ - admin_denied
37
+ - preview
38
+ - systemPreview
39
+ -->
40
+
41
+ <layout>
42
+
43
+ <!--
44
+ Form key for inserting into various forms
45
+ -->
46
+ <formkey>
47
+ <block type="core/template" name="formkey" as="formkey" template="formkey.phtml"/>
48
+ </formkey>
49
+
50
+ <!--
51
+ Default layout, loads most of the pages
52
+ -->
53
+
54
+ <default>
55
+ <block type="adminhtml/page" name="root" output="toHtml" template="page.phtml">
56
+ <block type="adminhtml/page_head" name="head" as="head" template="page/head.phtml">
57
+ <action method="setTitle" translate="title"><title>Magento Admin</title></action>
58
+ <action method="addJs"><script>prototype/prototype.js</script></action>
59
+ <action method="addItem"><type>js</type><name>extjs/fix-defer-before.js</name><params/><if/><condition>can_load_ext_js</condition></action>
60
+ <action method="addJs"><script>prototype/window.js</script></action>
61
+ <action method="addJs"><script>scriptaculous/builder.js</script></action>
62
+ <action method="addJs"><script>scriptaculous/effects.js</script></action>
63
+ <action method="addJs"><script>scriptaculous/dragdrop.js</script></action>
64
+ <action method="addJs"><script>scriptaculous/controls.js</script></action>
65
+ <action method="addJs"><script>scriptaculous/slider.js</script></action>
66
+ <action method="addJs"><script>lib/ccard.js</script></action>
67
+ <action method="addJs"><script>prototype/validation.js</script></action>
68
+ <action method="addJs"><script>varien/js.js</script></action>
69
+ <action method="addJs"><script>mage/translate.js</script></action>
70
+
71
+ <action method="addJs"><script>mage/adminhtml/hash.js</script></action>
72
+ <action method="addJs"><script>mage/adminhtml/events.js</script></action>
73
+ <action method="addJs"><script>mage/adminhtml/loader.js</script></action>
74
+ <action method="addJs"><script>mage/adminhtml/grid.js</script></action>
75
+ <action method="addJs"><script>mage/adminhtml/tabs.js</script></action>
76
+ <action method="addJs"><script>mage/adminhtml/form.js</script></action>
77
+ <action method="addJs"><script>mage/adminhtml/accordion.js</script></action>
78
+ <action method="addJs"><script>mage/adminhtml/tools.js</script></action>
79
+ <action method="addJs"><script>mage/adminhtml/uploader.js</script></action>
80
+ <action method="addJs"><script>mage/adminhtml/product.js</script></action>
81
+
82
+ <action method="addCss"><name>reset.css</name></action>
83
+ <action method="addCss"><name>boxes.css</name></action>
84
+ <action method="addCss"><name>custom.css</name></action>
85
+
86
+ <action method="addItem"><type>skin_css</type><name>iestyles.css</name><params/><if>lt IE 8</if></action>
87
+ <action method="addItem"><type>skin_css</type><name>below_ie7.css</name><params/><if>lt IE 7</if></action>
88
+ <action method="addItem"><type>skin_css</type><name>ie7.css</name><params/><if>IE 7</if></action>
89
+
90
+ <action method="addCss"><name>print.css</name><params>media="print"</params></action>
91
+
92
+ <action method="addItem"><type>js</type><name>lib/ds-sleight.js</name><params>defer</params><if>lt IE 7</if></action>
93
+ <action method="addItem"><type>js</type><name>varien/iehover-fix.js</name><params/><if>lt IE 7</if></action>
94
+
95
+ <action method="addItem"><type>skin_css</type><name>menu.css</name><params>media="screen, projection"</params></action>
96
+
97
+ <action method="addItem"><type>js_css</type><name>calendar/calendar-win2k-1.css</name><params/><!--<if/><condition>can_load_calendar_js</condition>--></action>
98
+ <action method="addItem"><type>js</type><name>calendar/calendar.js</name><!--<params/><if/><condition>can_load_calendar_js</condition>--></action>
99
+ <action method="addItem"><type>js</type><name>calendar/calendar-setup.js</name><!--<params/><if/><condition>can_load_calendar_js</condition>--></action>
100
+
101
+ <action method="addItem"><type>js</type><name>extjs/ext-tree.js</name><params/><if/><condition>can_load_ext_js</condition></action>
102
+ <action method="addItem"><type>js</type><name>extjs/fix-defer.js</name><params/><if/><condition>can_load_ext_js</condition></action>
103
+ <action method="addItem"><type>js</type><name>extjs/ext-tree-checkbox.js</name><params/><if/><condition>can_load_ext_js</condition></action>
104
+ <action method="addItem"><type>js_css</type><name>extjs/resources/css/ext-all.css</name><params/><if/><condition>can_load_ext_js</condition></action>
105
+ <action method="addItem"><type>js_css</type><name>extjs/resources/css/ytheme-magento.css</name><params/><if/><condition>can_load_ext_js</condition></action>
106
+
107
+ <action method="addItem"><type>js</type><name>mage/adminhtml/rules.js</name><params/><if/><condition>can_load_rules_js</condition></action>
108
+
109
+ <action method="addItem"><type>js</type><name>mage/adminhtml/wysiwyg/tiny_mce/setup.js</name><params/><if/><condition>can_load_tiny_mce</condition></action>
110
+
111
+ <block type="core/html_calendar" name="head.calendar" as="calendar" template="page/js/calendar.phtml"/>
112
+ </block>
113
+
114
+ <block type="adminhtml/page_notices" name="global_notices" as="global_notices" template="page/notices.phtml" />
115
+ <block type="adminhtml/page_header" name="header" as="header"></block>
116
+ <block type="adminhtml/page_menu" name="menu" as="menu"></block>
117
+ <block type="core/text_list" name="notifications" as="notifications">
118
+ <block type="adminhtml/notification_baseurl" name="notification_baseurl" as="notification_baseurl" template="notification/baseurl.phtml"></block>
119
+ <block type="adminhtml/cache_notifications" name="cache_notifications" template="system/cache/notifications.phtml"></block>
120
+ <block type="adminhtml/notification_survey" name="notification_survey" template="notification/survey.phtml"/>
121
+ <block type="adminhtml/notification_security" name="notification_security" as="notification_security" template="notification/security.phtml"></block>
122
+ </block>
123
+ <block type="adminhtml/widget_breadcrumbs" name="breadcrumbs" as="breadcrumbs"></block>
124
+
125
+ <!--<update handle="formkey"/> this won't work, see the try/catch and a jammed exception in Mage_Core_Model_Layout::createBlock() -->
126
+ <block type="core/template" name="formkey" as="formkey" template="formkey.phtml"/>
127
+
128
+ <!-- deprecated since 1.7.0.0 see Mage_Page_Block_Js_Translate -->
129
+ <block type="page/js_translate" name="js_translate" as="js_translate" template="page/js/translate.phtml"/>
130
+ <block type="core/text_list" name="left" as="left"/>
131
+ <block type="core/text_list" name="content" as="content"/>
132
+ <block type="core/messages" name="messages" as="messages"/>
133
+ <block type="core/text_list" name="js" as="js"/>
134
+ <block type="adminhtml/page_footer" name="footer" as="footer">
135
+ <action method="setBugreportUrl"><url>http://www.magentocommerce.com/bug-tracking</url></action>
136
+ </block>
137
+ <block type="core/profiler" name="profiler" as="profiler"/>
138
+ <block type="core/text_list" name="before_body_end" as="before_body_end"/>
139
+
140
+ </block>
141
+ </default>
142
+
143
+ <!--
144
+ Layout for pop up windows
145
+ -->
146
+ <popup>
147
+ <update handle="default"/>
148
+ <remove name="header"/>
149
+ <remove name="menu"/>
150
+ <reference name="root">
151
+ <action method="setTemplate"><template>popup.phtml</template></action>
152
+ </reference>
153
+ </popup>
154
+
155
+ <!--
156
+ Layout for overlay pop up windows
157
+ -->
158
+ <overlay_popup>
159
+ <update handle="popup"/>
160
+ <reference name="root">
161
+ <action method="setTemplate"><template>overlay_popup.phtml</template></action>
162
+ </reference>
163
+ </overlay_popup>
164
+
165
+ <!--
166
+ Layout for editor element
167
+ -->
168
+ <editor>
169
+ <reference name="head">
170
+ <action method="setCanLoadExtJs"><flag>1</flag></action>
171
+ <action method="addJs"><script>mage/adminhtml/variables.js</script></action>
172
+ <action method="addJs"><script>mage/adminhtml/wysiwyg/widget.js</script></action>
173
+ <action method="addJs"><script>lib/flex.js</script></action>
174
+ <action method="addJs"><script>lib/FABridge.js</script></action>
175
+ <action method="addJs"><script>mage/adminhtml/flexuploader.js</script></action>
176
+ <action method="addJs"><script>mage/adminhtml/browser.js</script></action>
177
+ <action method="addJs"><script>prototype/window.js</script></action>
178
+ <action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
179
+ <action method="addCss"><name>lib/prototype/windows/themes/magento.css</name></action>
180
+ </reference>
181
+ </editor>
182
+
183
+ <!--
184
+ No page found
185
+ -->
186
+
187
+ <adminhtml_noroute>
188
+ <reference name="content">
189
+ <block type="core/text" name="content.noRoute">
190
+ <action method="setText" translate="text" module="adminhtml"><text><![CDATA[<h1 class="page-heading">404 Error</h1><p>Page not found.</p>]]></text></action>
191
+ </block>
192
+ </reference>
193
+ </adminhtml_noroute>
194
+
195
+ <!--
196
+ Access denied
197
+ -->
198
+
199
+ <adminhtml_denied>
200
+ <reference name="content">
201
+ <block type="adminhtml/denied" name="content.denied" template="access_denied.phtml"/>
202
+ </reference>
203
+ </adminhtml_denied>
204
+
205
+ <!--
206
+ Base preview layout (?)
207
+ -->
208
+
209
+ <preview>
210
+ <block type="core/template" name="root" output="toHtml" template="newsletter/template/preview.phtml">
211
+ <block type="adminhtml/newsletter_template_preview" name="content" as="content"></block>
212
+ </block>
213
+ </preview>
214
+
215
+ <newsletter_template_preview>
216
+ <block type="core/template" name="root" output="toHtml" template="newsletter/template/preview.phtml">
217
+ <block type="adminhtml/newsletter_template_preview" name="content" as="content"></block>
218
+ </block>
219
+ </newsletter_template_preview>
220
+
221
+ <newsletter_template_preview_switcher>
222
+ <block type="core/template" name="root" output="toHtml" template="newsletter/template/preview/iframeswitcher.phtml">
223
+ <block type="adminhtml/store_switcher" name="store_switcher" as="store_switcher" />
224
+ <block type="adminhtml/newsletter_template_preview_form" name="preview_form" />
225
+ </block>
226
+ </newsletter_template_preview_switcher>
227
+
228
+ <newsletter_queue_preview>
229
+ <block type="core/template" name="root" output="toHtml" template="newsletter/queue/preview.phtml">
230
+ <block type="adminhtml/newsletter_queue_preview" name="content" as="content"></block>
231
+ </block>
232
+ </newsletter_queue_preview>
233
+
234
+ <!--
235
+ Base customer alerts preview layout (?)
236
+ -->
237
+
238
+ <alert_preview>
239
+ <block type="core/template" name="root" output="toHtml" template="alert/template/preview.phtml">
240
+ <block type="adminhtml/alert_template_preview" name="content" as="content"></block>
241
+ </block>
242
+ </alert_preview>
243
+ <!--
244
+ Base preview layout
245
+ -->
246
+
247
+ <systemPreview>
248
+ <block type="core/template" name="root" output="toHtml" template="system/email/template/preview.phtml">
249
+ <block type="adminhtml/system_email_template_preview" name="content" as="content"></block>
250
+ </block>
251
+ </systemPreview>
252
+
253
+ <adminhtml_dashboard_customersmost>
254
+ <block type="core/text_list" name="root" output="toHtml">
255
+ <block type="adminhtml/dashboard_tab_customers_most" name="adminhtml.dashboard.tab.customers.most"/>
256
+ </block>
257
+ </adminhtml_dashboard_customersmost>
258
+
259
+ <adminhtml_dashboard_customersnewest>
260
+ <block type="core/text_list" name="root" output="toHtml">
261
+ <block type="adminhtml/dashboard_tab_customers_newest" name="adminhtml.dashboard.tab.customers.newest"/>
262
+ </block>
263
+ </adminhtml_dashboard_customersnewest>
264
+
265
+ <adminhtml_dashboard_productsviewed>
266
+ <block type="core/text_list" name="root" output="toHtml">
267
+ <block type="adminhtml/dashboard_tab_products_viewed" name="adminhtml.dashboard.tab.products.viewed"/>
268
+ </block>
269
+ </adminhtml_dashboard_productsviewed>
270
+
271
+ <adminhtml_index_login>
272
+ <block type="core/text_list" name="root" output="toHtml">
273
+ <block type="adminhtml/template" name="content" template="login.phtml">
274
+ <block type="core/text_list" name="form.additional.info" />
275
+ </block>
276
+ </block>
277
+ </adminhtml_index_login>
278
+
279
+ <adminhtml_index_forgotpassword>
280
+ <block type="core/text_list" name="root" output="toHtml">
281
+ <block type="adminhtml/template" name="content" template="forgotpassword.phtml">
282
+ <block type="core/text_list" name="form.additional.info" />
283
+ </block>
284
+ </block>
285
+ </adminhtml_index_forgotpassword>
286
+ <!--
287
+ Empty hanle for ajax response etc.
288
+ -->
289
+ <empty>
290
+ </empty>
291
+ </layout>
app/design/adminhtml/default/default/layout/moneybookers.xml ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * @category design
17
+ * @package default_default
18
+ * @copyright Copyright (c) 2012 Phoenix Medien GmbH & Co. KG (http://www.phoenix-medien.de)
19
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
20
+ */
21
+ -->
22
+ <layout>
23
+ <adminhtml_system_config_edit>
24
+ <reference name="content">
25
+ <block type="moneybookers/jsinit" name="moneybookers_jsinit" template="moneybookers/jsinit.phtml"></block>
26
+ </reference>
27
+ </adminhtml_system_config_edit>
28
+ </layout>
app/design/adminhtml/default/default/layout/newsletter.xml ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_newsletter_template_edit>
31
+ <update handle="editor"/>
32
+ <reference name="content">
33
+ <block type="adminhtml/newsletter_template_edit" name="template_edit" template="newsletter/template/edit.phtml" />
34
+ </reference>
35
+ </adminhtml_newsletter_template_edit>
36
+
37
+ <adminhtml_newsletter_queue_edit>
38
+ <update handle="editor"/>
39
+ <reference name="content">
40
+ <block type="adminhtml/newsletter_queue_edit" name="queue_edit" template="newsletter/queue/edit.phtml" />
41
+ </reference>
42
+ </adminhtml_newsletter_queue_edit>
43
+
44
+ <adminhtml_newsletter_queue_preview>
45
+ <reference name="root">
46
+ <action method="setTemplate"><template>newsletter/preview/iframeswitcher.phtml</template></action>
47
+ <block type="adminhtml/newsletter_queue_preview_form" name="preview_form" />
48
+ <block type="adminhtml/store_switcher" name="store_switcher" template="newsletter/preview/store.phtml" />
49
+ </reference>
50
+ </adminhtml_newsletter_queue_preview>
51
+
52
+ <adminhtml_newsletter_template_preview>
53
+ <reference name="root">
54
+ <action method="setTemplate"><template>newsletter/preview/iframeswitcher.phtml</template></action>
55
+ <block type="adminhtml/newsletter_template_preview_form" name="preview_form" />
56
+ <block type="adminhtml/store_switcher" name="store_switcher" template="newsletter/preview/store.phtml" />
57
+ </reference>
58
+ </adminhtml_newsletter_template_preview>
59
+
60
+ <newsletter_queue_preview>
61
+ <block type="adminhtml/newsletter_queue_preview" name="preview_template" />
62
+ </newsletter_queue_preview>
63
+
64
+ <newsletter_template_preview>
65
+ <block type="adminhtml/newsletter_template_preview" name="preview_template" />
66
+ </newsletter_template_preview>
67
+ </layout>
app/design/adminhtml/default/default/layout/oauth.xml ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+ <layout>
29
+ <!-- Consumers -->
30
+ <adminhtml_oauth_consumer_index>
31
+ <reference name="content">
32
+ <block type="oauth/adminhtml_oauth_consumer" name="oauth_consumer"/>
33
+ </reference>
34
+ </adminhtml_oauth_consumer_index>
35
+
36
+ <adminhtml_oauth_consumer_grid>
37
+ <remove name="root"/>
38
+ <block type="oauth/adminhtml_oauth_consumer_grid" name="oauth_consumer.grid" output="toHtml"/>
39
+ </adminhtml_oauth_consumer_grid>
40
+
41
+ <adminhtml_oauth_consumer_new>
42
+ <reference name="content">
43
+ <block type="oauth/adminhtml_oauth_consumer_edit" name="oauth_consumer.edit">
44
+ <block type="oauth/adminhtml_oauth_consumer_edit_form" name="form"/>
45
+ </block>
46
+ </reference>
47
+ </adminhtml_oauth_consumer_new>
48
+
49
+ <adminhtml_oauth_consumer_edit>
50
+ <reference name="content">
51
+ <block type="oauth/adminhtml_oauth_consumer_edit" name="oauth_consumer.edit">
52
+ <block type="oauth/adminhtml_oauth_consumer_edit_form" name="form"/>
53
+ </block>
54
+ </reference>
55
+ </adminhtml_oauth_consumer_edit>
56
+ <!-- EOF Consumers -->
57
+
58
+ <!-- My Applications -->
59
+ <adminhtml_oauth_admin_token_index>
60
+ <reference name="content">
61
+ <block type="oauth/adminhtml_oauth_admin_token" name="oauth_admin_token"/>
62
+ </reference>
63
+ </adminhtml_oauth_admin_token_index>
64
+
65
+ <adminhtml_oauth_admin_token_grid>
66
+ <remove name="root"/>
67
+ <block type="oauth/adminhtml_oauth_admin_token_grid" name="oauth_admin_token.grid" output="toHtml"/>
68
+ </adminhtml_oauth_admin_token_grid>
69
+ <!-- EOF My Applications -->
70
+
71
+
72
+
73
+ <oauth_root_handle>
74
+ <reference name="root">
75
+ <action method="setTemplate">
76
+ <template>empty.phtml</template>
77
+ </action>
78
+ </reference>
79
+ <reference name="head">
80
+ <action method="removeItem"><type>js</type><name>scriptaculous/controls.js</name></action>
81
+ <action method="removeItem"><type>js</type><name>prototype/window.js</name></action>
82
+ <action method="removeItem"><type>js</type><name>scriptaculous/builder.js</name></action>
83
+ <action method="removeItem"><type>js</type><name>scriptaculous/dragdrop.js</name></action>
84
+ <action method="removeItem"><type>js</type><name>scriptaculous/controls.js</name></action>
85
+ <action method="removeItem"><type>js</type><name>scriptaculous/slider.js</name></action>
86
+ <action method="removeItem"><type>js</type><name>lib/ccard.js</name></action>
87
+ <action method="removeItem"><type>js</type><name>varien/js.js</name></action>
88
+ <action method="removeItem"><type>js</type><name>mage/adminhtml/hash.js</name></action>
89
+ <action method="removeItem"><type>js</type><name>mage/adminhtml/events.js</name></action>
90
+ <action method="removeItem"><type>js</type><name>mage/adminhtml/loader.js</name></action>
91
+ <action method="removeItem"><type>js</type><name>mage/adminhtml/grid.js</name></action>
92
+ <action method="removeItem"><type>js</type><name>mage/adminhtml/tabs.js</name></action>
93
+ <action method="removeItem"><type>js</type><name>mage/adminhtml/accordion.js</name></action>
94
+ <!-- <action method="removeItem"><type>js</type><name>mage/adminhtml/tools.js</name></action>-->
95
+ <action method="removeItem"><type>js</type><name>mage/adminhtml/uploader.js</name></action>
96
+ <action method="removeItem"><type>js</type><name>mage/adminhtml/product.js</name></action>
97
+ <action method="removeItem"><type>js</type><name>mage/adminhtml/rules.js</name></action>
98
+ <action method="removeItem"><type>js</type><name>mage/adminhtml/wysiwyg/tiny_mce/setup.js</name></action>
99
+ <action method="removeItem"><type>js</type><name>lib/ds-sleight.js</name></action>
100
+ <action method="removeItem"><type>js</type><name>varien/iehover-fix.js</name></action>
101
+
102
+ <action method="removeItem"><type>css</type><name>print.css</name></action>
103
+ <action method="removeItem"><type>js_css</type><name>calendar/calendar-win2k-1.css</name></action>
104
+ <action method="removeItem"><type>js_css</type><name>extjs/resources/css/ext-all.css</name></action>
105
+ <action method="removeItem"><type>js_css</type><name>extjs/resources/css/ytheme-magento.css</name></action>
106
+ <action method="removeItem"><type>skin_css</type><name>menu.css</name></action>
107
+
108
+ <action method="removeItem"><type>js</type><name>calendar/calendar.js</name></action>
109
+ <action method="removeItem"><type>js</type><name>calendar/calendar-setup.js</name></action>
110
+ <action method="removeItem"><type>js</type><name>extjs/fix-defer-before.js</name></action>
111
+ <action method="removeItem"><type>js</type><name>extjs/ext-tree.js</name></action>
112
+ <action method="removeItem"><type>js</type><name>extjs/fix-defer.js</name></action>
113
+ <action method="removeItem"><type>js</type><name>extjs/ext-tree-checkbox.js</name></action>
114
+ </reference>
115
+ </oauth_root_handle>
116
+
117
+ <oauth_root_handle_simple>
118
+ <remove name="js_cookie" />
119
+ <block type="adminhtml/page" name="root" output="toHtml" template="empty.phtml">
120
+ <block type="adminhtml/page_head" name="head" as="head" template="oauth/authorize/head-simple.phtml">
121
+ <action method="addCss"><name>oauth-simple.css</name></action>
122
+ </block>
123
+ <block type="core/text_list" name="content"/>
124
+ </block>
125
+ </oauth_root_handle_simple>
126
+
127
+ <!-- Authorize -->
128
+ <!--Handle for simple pages-->
129
+ <adminhtml_oauth_authorize_index translate="label">
130
+ <update handle="oauth_root_handle"/>
131
+ <label>OAuth authorization for admin</label>
132
+ <reference name="content">
133
+ <block type="oauth/adminhtml_oauth_authorize" name="oauth.authorize.form" template="oauth/authorize/form/login.phtml"/>
134
+ <block type="oauth/adminhtml_oauth_authorize_button" name="oauth.authorize.button" template="oauth/authorize/button.phtml" />
135
+ </reference>
136
+ </adminhtml_oauth_authorize_index>
137
+
138
+ <adminhtml_oauth_authorize_simple translate="label">
139
+ <update handle="oauth_root_handle_simple"/>
140
+ <label>OAuth authorization simple for admin</label>
141
+ <reference name="content">
142
+ <block type="oauth/adminhtml_oauth_authorize" name="oauth.authorize.form" template="oauth/authorize/form/login-simple.phtml"/>
143
+ <block type="oauth/adminhtml_oauth_authorize_button" name="oauth.authorize.button" template="oauth/authorize/button-simple.phtml" />
144
+ </reference>
145
+ </adminhtml_oauth_authorize_simple>
146
+ <!-- EOF Authorize -->
147
+
148
+ <!-- Confirm Authorization -->
149
+ <adminhtml_oauth_authorize_confirm translate="label">
150
+ <update handle="oauth_root_handle"/>
151
+ <label>Confirm token authorization for admin</label>
152
+ <reference name="content">
153
+ <block type="core/template" name="oauth.authorize.confirm" template="oauth/authorize/confirm.phtml" />
154
+ </reference>
155
+ </adminhtml_oauth_authorize_confirm>
156
+
157
+ <adminhtml_oauth_authorize_confirmsimple translate="label">
158
+ <update handle="oauth_root_handle_simple"/>
159
+ <label>Confirm token authorization Pop Up for admin</label>
160
+ <reference name="content">
161
+ <block type="core/template" name="oauth.authorize.confirm" template="oauth/authorize/confirm-simple.phtml" />
162
+ </reference>
163
+ </adminhtml_oauth_authorize_confirmsimple>
164
+ <!-- EOF Confirm Authorization -->
165
+
166
+ <!-- Reject Authorization -->
167
+ <adminhtml_oauth_authorize_reject translate="label">
168
+ <update handle="oauth_root_handle"/>
169
+ <label>Reject token authorization for admin</label>
170
+ <reference name="content">
171
+ <block type="core/template" name="oauth.authorize.reject" template="oauth/authorize/reject.phtml" />
172
+ </reference>
173
+ </adminhtml_oauth_authorize_reject>
174
+
175
+ <adminhtml_oauth_authorize_rejectsimple translate="label">
176
+ <update handle="oauth_root_handle_simple"/>
177
+ <label>Reject token authorization Pop Up for admin</label>
178
+ <reference name="content">
179
+ <block type="core/template" name="oauth.authorize.reject" template="oauth/authorize/reject-simple.phtml" />
180
+ </reference>
181
+ </adminhtml_oauth_authorize_rejectsimple>
182
+ <!-- EOF Reject Authorization -->
183
+
184
+ <adminhtml_oauth_authorizedtokens_index>
185
+ <reference name="content">
186
+ <block type="oauth/adminhtml_oauth_authorizedTokens" name="oauth_authorizedTokens"/>
187
+ </reference>
188
+ </adminhtml_oauth_authorizedtokens_index>
189
+
190
+ <adminhtml_oauth_authorizedtokens_grid>
191
+ <remove name="root"/>
192
+ <block type="oauth/adminhtml_oauth_authorizedTokens_grid" name="oauth_authorizedTokens.grid" output="toHtml"/>
193
+ </adminhtml_oauth_authorizedtokens_grid>
194
+ </layout>
app/design/adminhtml/default/default/layout/pagecache.xml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_cache_index>
31
+ <reference name="cache.additional">
32
+ <block type="pagecache/adminhtml_cache_additional" name="page.cache.additional" template = "pagecache/cache/additional.phtml" />
33
+ </reference>
34
+ </adminhtml_cache_index>
35
+ </layout>
app/design/adminhtml/default/default/layout/promo.xml ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <!-- Catalog Price Rule -->
31
+ <adminhtml_promo_catalog_index>
32
+ <reference name="content">
33
+ <block type="adminhtml/promo_catalog" name="promo_catalog"/>
34
+ </reference>
35
+ </adminhtml_promo_catalog_index>
36
+ <adminhtml_promo_catalog_edit>
37
+ <reference name="head">
38
+ <action method="setCanLoadExtJs"><flag>1</flag></action>
39
+ <action method="setCanLoadRulesJs"><flag>1</flag></action>
40
+ </reference>
41
+ <reference name="left">
42
+ <block type="adminhtml/promo_catalog_edit_tabs" name="promo_catalog_edit_tabs">
43
+ <block type="adminhtml/promo_catalog_edit_tab_main" name="promo_catalog_edit_tab_main"/>
44
+ <block type="adminhtml/promo_catalog_edit_tab_conditions" name="promo_catalog_edit_tab_conditions"/>
45
+ <block type="adminhtml/promo_catalog_edit_tab_actions" name="promo_catalog_edit_tab_actions"/>
46
+ <action method="addTab"><name>main_section</name><block>promo_catalog_edit_tab_main</block></action>
47
+ <action method="addTab"><name>conditions_section</name><block>promo_catalog_edit_tab_conditions</block></action>
48
+ <action method="addTab"><name>actions_section</name><block>promo_catalog_edit_tab_actions</block></action>
49
+ </block>
50
+ </reference>
51
+ <reference name="content">
52
+ <block type="adminhtml/promo_catalog_edit" name="promo_catalog_edit"/>
53
+ </reference>
54
+ <reference name="js">
55
+ <block type="adminhtml/promo_catalog_edit_js" template="promo/js.phtml" />
56
+ </reference>
57
+ </adminhtml_promo_catalog_edit>
58
+
59
+ <!-- Shopping Cart Price Rule -->
60
+ <adminhtml_promo_quote_index>
61
+ <reference name="content">
62
+ <block type="adminhtml/promo_quote" name="promo_quote"></block>
63
+ </reference>
64
+ </adminhtml_promo_quote_index>
65
+ <adminhtml_promo_quote_edit>
66
+ <reference name="head">
67
+ <action method="setCanLoadExtJs"><flag>1</flag></action>
68
+ <action method="setCanLoadRulesJs"><flag>1</flag></action>
69
+ </reference>
70
+ <reference name="left">
71
+ <block type="adminhtml/promo_quote_edit_tabs" name="promo_quote_edit_tabs">
72
+ <block type="adminhtml/promo_quote_edit_tab_main" name="promo_quote_edit_tab_main" />
73
+ <block type="adminhtml/promo_quote_edit_tab_conditions" name="promo_quote_edit_tab_conditions"/>
74
+ <block type="adminhtml/promo_quote_edit_tab_actions" name="promo_quote_edit_tab_actions"/>
75
+ <block type="adminhtml/promo_quote_edit_tab_labels" name="promo_quote_edit_tab_labels"/>
76
+ <block type="adminhtml/promo_quote_edit_tab_coupons" name="promo_quote_edit_tab_coupons">
77
+ <block type="adminhtml/promo_quote_edit_tab_coupons_form" name="promo_quote_edit_tab_coupons_form"/>
78
+ <block type="adminhtml/promo_quote_edit_tab_coupons_grid" name="promo_quote_edit_tab_coupons_grid"/>
79
+ </block>
80
+ <action method="addTab"><name>main_section</name><block>promo_quote_edit_tab_main</block></action>
81
+ <action method="addTab"><name>conditions_section</name><block>promo_quote_edit_tab_conditions</block></action>
82
+ <action method="addTab"><name>actions_section</name><block>promo_quote_edit_tab_actions</block></action>
83
+ <action method="addTab"><name>labels_section</name><block>promo_quote_edit_tab_labels</block></action>
84
+ <action method="addTab"><name>coupons_section</name><block>promo_quote_edit_tab_coupons</block></action>
85
+ </block>
86
+ <block type="adminhtml/template" template="promo/salesrulejs.phtml" name="promo_quote_edit_jsinit"/>
87
+ </reference>
88
+ <reference name="content">
89
+ <block type="adminhtml/promo_quote_edit" name="promo_quote_edit"></block>
90
+ </reference>
91
+ </adminhtml_promo_quote_edit>
92
+ <adminhtml_promo_quote_grid>
93
+ <remove name="root" />
94
+ <block type="adminhtml/promo_quote_edit_tab_product" name="promo_quote_grid" output="toHtml" />
95
+ </adminhtml_promo_quote_grid>
96
+ <adminhtml_promo_quote_couponsgrid>
97
+ <block type="core/text_list" name="root" output="toHtml">
98
+ <block type="adminhtml/promo_quote_edit_tab_coupons_grid" name="promo_quote_edit_tab_coupons_grid" />
99
+ </block>
100
+ </adminhtml_promo_quote_couponsgrid>
101
+ </layout>
app/design/adminhtml/default/default/layout/report.xml ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_report_statistics_index>
31
+ <reference name="content">
32
+ <block type="adminhtml/report_refresh_statistics" template="report/refresh/statistics.phtml" name="sales.report.refreshstatistics" />
33
+ </reference>
34
+ </adminhtml_report_statistics_index>
35
+ <adminhtml_report_product_viewed>
36
+ <reference name="messages">
37
+ <action method="addNotice" translate="message">
38
+ <message>This report depends on timezone configuration. Once timezone is changed, the lifetime statistics need to be refreshed.</message>
39
+ </action>
40
+ </reference>
41
+ <reference name="content">
42
+ <block type="adminhtml/report_product_viewed" template="report/grid/container.phtml" name="product.report.grid.container">
43
+ <block type="adminhtml/store_switcher" template="report/store/switcher/enhanced.phtml" name="store.switcher">
44
+ <action method="setStoreVarName"><var_name>store_ids</var_name></action>
45
+ </block>
46
+ <block type="adminhtml/report_filter_form" name="grid.filter.form">
47
+ <action method="setFieldVisibility">
48
+ <field>report_type</field>
49
+ <visibility>0</visibility>
50
+ </action>
51
+ </block>
52
+ </block>
53
+ </reference>
54
+ </adminhtml_report_product_viewed>
55
+ </layout>
app/design/adminhtml/default/default/layout/rss.xml ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+
31
+ <!--
32
+
33
+ -->
34
+ <adminhtml_rss_catalog_review>
35
+ <block type="rss/catalog_review" output="toHtml" name="rss.catalog.review" />
36
+ </adminhtml_rss_catalog_review>
37
+
38
+ <adminhtml_rss_catalog_notifystock>
39
+ <block type="rss/catalog_notifyStock" output="toHtml" name="rss.catalog.notifystock" />
40
+ </adminhtml_rss_catalog_notifystock>
41
+
42
+ <adminhtml_rss_order_new>
43
+ <block type="rss/order_new" output="toHtml" name="rss.order.new"/>
44
+ </adminhtml_rss_order_new>
45
+ </layout>
app/design/adminhtml/default/default/layout/sales.xml ADDED
@@ -0,0 +1,1080 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_sales_order_grid>
31
+ <update handle="formkey"/>
32
+ <block type="adminhtml/sales_order_grid" name="sales_order.grid" output="toHtml"></block>
33
+ </adminhtml_sales_order_grid>
34
+
35
+ <adminhtml_sales_order_index>
36
+ <reference name="content">
37
+ <block type="adminhtml/sales_order" name="sales_order.grid.container"></block>
38
+ </reference>
39
+ </adminhtml_sales_order_index>
40
+
41
+ <adminhtml_sales_order_transactions>
42
+ <block type="adminhtml/sales_transactions_grid" name="sales_transactions.grid" output="toHtml"></block>
43
+ </adminhtml_sales_order_transactions>
44
+
45
+ <adminhtml_sales_billing_agreement_index>
46
+ <reference name="content">
47
+ <block type="sales/adminhtml_billing_agreement" name="sales.billing.agreement.grid.container"></block>
48
+ </reference>
49
+ </adminhtml_sales_billing_agreement_index>
50
+
51
+ <adminhtml_sales_billing_agreement_grid>
52
+ <block type="sales/adminhtml_billing_agreement_grid" name="sales.billing.agreement.grid" output="toHtml"></block>
53
+ </adminhtml_sales_billing_agreement_grid>
54
+
55
+ <adminhtml_sales_billing_agreement_view>
56
+ <reference name="content">
57
+ <block type="sales/adminhtml_billing_agreement_view" name="sales.billing.agreement.view"></block>
58
+ </reference>
59
+ <reference name="left">
60
+ <block type="sales/adminhtml_billing_agreement_view_tabs" name="sales.billing.agreement.tabs">
61
+ <action method="addTab"><name>billing_agreement_info</name><block>sales/adminhtml_billing_agreement_view_tab_info</block></action>
62
+ <action method="addTab"><name>billing_agreement_orders</name><block>sales/adminhtml_billing_agreement_view_tab_orders</block></action>
63
+ </block>
64
+ </reference>
65
+ </adminhtml_sales_billing_agreement_view>
66
+
67
+ <adminhtml_sales_billing_agreement_ordersgrid>
68
+ <block type="sales/adminhtml_billing_agreement_view_tab_orders" name="related.orders.grid" output="toHtml"></block>
69
+ </adminhtml_sales_billing_agreement_ordersgrid>
70
+
71
+ <adminhtml_sales_billing_agreement_customergrid>
72
+ <block type="sales/adminhtml_customer_edit_tab_agreement" name="customer.billing.agreement.grid" output="toHtml"></block>
73
+ </adminhtml_sales_billing_agreement_customergrid>
74
+
75
+ <adminhtml_sales_order_view>
76
+ <reference name="head">
77
+ <action method="addJs"><file>mage/adminhtml/giftmessage.js</file></action>
78
+ <action method="addJs"><file>mage/adminhtml/giftoptions/tooltip.js</file></action>
79
+ </reference>
80
+ <reference name="content">
81
+ <block type="adminhtml/sales_order_view" name="sales_order_edit"></block>
82
+ </reference>
83
+ <reference name="left">
84
+ <block type="adminhtml/sales_order_view_tabs" name="sales_order_tabs">
85
+ <block type="adminhtml/sales_order_view_tab_info" name="order_tab_info" template="sales/order/view/tab/info.phtml">
86
+ <block type="adminhtml/sales_order_view_messages" name="order_messages"></block>
87
+ <block type="adminhtml/sales_order_view_info" name="order_info" template="sales/order/view/info.phtml"></block>
88
+ <block type="adminhtml/sales_order_view_items" name="order_items" template="sales/order/view/items.phtml">
89
+ <action method="addItemRender"><type>default</type><block>adminhtml/sales_order_view_items_renderer_default</block><template>sales/order/view/items/renderer/default.phtml</template></action>
90
+ <action method="addColumnRender"><column>qty</column><block>adminhtml/sales_items_column_qty</block><template>sales/items/column/qty.phtml</template></action>
91
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name</block><template>sales/items/column/name.phtml</template></action>
92
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name_grouped</block><template>sales/items/column/name.phtml</template><type>grouped</type></action>
93
+ <block type="core/text_list" name="order_item_extra_info" />
94
+ </block>
95
+ <block type="adminhtml/sales_order_payment" name="order_payment"/>
96
+ <block type="adminhtml/sales_order_view_history" name="order_history" template="sales/order/view/history.phtml"></block>
97
+ <block type="adminhtml/template" name="gift_options" template="sales/order/giftoptions.phtml">
98
+ <block type="adminhtml/sales_order_view_giftmessage" name="order_giftmessage" template="sales/order/view/giftmessage.phtml"></block>
99
+ </block>
100
+ <block type="adminhtml/sales_order_totals" name="order_totals" template="sales/order/totals.phtml">
101
+ <block type="adminhtml/sales_order_totals_tax" name="tax" template="sales/order/totals/tax.phtml" />
102
+ <!--<block type="adminhtml/sales_order_totals_item" name="footer" template="sales/order/totals/footer.phtml">
103
+ <block type="adminhtml/sales_order_totals_item" name="grand" template="sales/order/totals/grand.phtml" />
104
+ <block type="adminhtml/sales_order_totals_item" name="paid" template="sales/order/totals/paid.phtml" />
105
+ <block type="adminhtml/sales_order_totals_item" name="refunded" template="sales/order/totals/refunded.phtml" />
106
+ <block type="adminhtml/sales_order_totals_item" name="due" template="sales/order/totals/due.phtml" />
107
+ </block>
108
+ <block type="adminhtml/sales_order_totals_item" name="sales.order.view.totals.main" as="main" template="sales/order/totals/main.phtml">
109
+ <block type="adminhtml/sales_order_totals_subtotal" name="subtotal" template="sales/order/totals/subtotal.phtml" />
110
+ <block type="adminhtml/sales_order_totals_tax" name="tax" template="sales/order/totals/tax.phtml" />
111
+ <block type="adminhtml/sales_order_totals_item" name="shipping" template="sales/order/totals/shipping.phtml" />
112
+ <block type="adminhtml/sales_order_totals_item" name="discount" template="sales/order/totals/discount.phtml" />
113
+ <block type="adminhtml/sales_order_totals_item" name="giftcert" template="sales/order/totals/item.phtml">
114
+ <action method="setSourceField"><value>giftcert_amount</value></action>
115
+ <action method="setLabel"><value>Gift Certificate</value></action>
116
+ </block>
117
+ <block type="adminhtml/sales_order_totals_item" name="adjustment_positive" template="sales/order/totals/item.phtml">
118
+ <action method="setSourceField"><value>adjustment_positive</value></action>
119
+ <action method="setLabel"><value>Adjustment Refund</value></action>
120
+ </block>
121
+ <block type="adminhtml/sales_order_totals_item" name="adjustment_negative" template="sales/order/totals/item.phtml">
122
+ <action method="setSourceField"><value>adjustment_negative</value></action>
123
+ <action method="setLabel"><value>Adjustment Fee</value></action>
124
+ </block>
125
+ </block>-->
126
+ </block>
127
+ </block>
128
+ <action method="addTab"><name>order_info</name><block>order_tab_info</block></action>
129
+ <action method="addTab"><name>order_invoices</name><block>adminhtml/sales_order_view_tab_invoices</block></action>
130
+ <action method="addTab"><name>order_creditmemos</name><block>adminhtml/sales_order_view_tab_creditmemos</block></action>
131
+ <action method="addTab"><name>order_shipments</name><block>adminhtml/sales_order_view_tab_shipments</block></action>
132
+ <action method="addTab"><name>order_history</name><block>adminhtml/sales_order_view_tab_history</block></action>
133
+ <action method="addTab"><name>order_transactions</name><block>adminhtml/sales_order_view_tab_transactions</block></action>
134
+ </block>
135
+ </reference>
136
+ </adminhtml_sales_order_view>
137
+
138
+ <adminhtml_sales_order_addcomment>
139
+ <block type="adminhtml/sales_order_view_history" name="order_history" template="sales/order/view/history.phtml" output="toHtml"/>
140
+ </adminhtml_sales_order_addcomment>
141
+
142
+ <adminhtml_sales_order_invoice_new>
143
+ <reference name="content">
144
+ <block type="adminhtml/sales_order_invoice_create" name="sales_invoice_create">
145
+ <block type="adminhtml/sales_order_invoice_create_form" name="form" template="sales/order/invoice/create/form.phtml">
146
+ <block type="adminhtml/sales_order_view_info" name="order_info" template="sales/order/view/info.phtml"></block>
147
+ <block type="adminhtml/sales_order_payment" name="order_payment"></block>
148
+ <block type="adminhtml/sales_order_invoice_create_items" name="order_items" template="sales/order/invoice/create/items.phtml">
149
+ <action method="addItemRender"><type>default</type><block>adminhtml/sales_items_renderer_default</block><template>sales/order/invoice/create/items/renderer/default.phtml</template></action>
150
+ <action method="addColumnRender"><column>qty</column><block>adminhtml/sales_items_column_qty</block><template>sales/items/column/qty.phtml</template></action>
151
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name</block><template>sales/items/column/name.phtml</template></action>
152
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name_grouped</block><template>sales/items/column/name.phtml</template><type>grouped</type></action>
153
+ <block type="core/text_list" name="order_item_extra_info"></block>
154
+ <block type="adminhtml/sales_order_totalbar" name="order_totalbar" template="sales/order/totalbar.phtml"></block>
155
+
156
+ <block type="adminhtml/sales_order_invoice_totals" name="invoice_totals" template="sales/order/totals.phtml">
157
+ <block type="adminhtml/sales_order_totals_tax" name="tax" template="sales/order/totals/tax.phtml" />
158
+ <!--<block type="adminhtml/sales_order_totals_item" name="footer" template="sales/order/totals/footer.phtml">
159
+ <block type="adminhtml/sales_order_totals_item" name="grand" template="sales/order/totals/grand.phtml" />
160
+ <block type="adminhtml/sales_order_totals_item" name="paid" template="sales/order/totals/paid.phtml" />
161
+ <block type="adminhtml/sales_order_totals_item" name="refunded" template="sales/order/totals/refunded.phtml" />
162
+ <block type="adminhtml/sales_order_totals_item" name="due" template="sales/order/totals/due.phtml" />
163
+ </block>
164
+ <block type="adminhtml/sales_order_totals_item" name="sales.order.view.totals.main" as="main" template="sales/order/totals/main.phtml">
165
+ <block type="adminhtml/sales_order_totals_subtotal" name="subtotal" template="sales/order/totals/subtotal.phtml" />
166
+ <block type="adminhtml/sales_order_totals_item" name="tax" template="sales/order/totals/item.phtml">
167
+ <action method="setSourceField"><value>tax_amount</value></action>
168
+ <action method="setLabel"><value>Tax</value></action>
169
+ </block>
170
+ <block type="adminhtml/sales_order_totals_item" name="shipping" template="sales/order/totals/shipping.phtml" />
171
+ <block type="adminhtml/sales_order_totals_item" name="discount" template="sales/order/totals/discount.phtml" />
172
+ <block type="adminhtml/sales_order_totals_item" name="giftcert" template="sales/order/totals/item.phtml">
173
+ <action method="setSourceField"><value>giftcert_amount</value></action>
174
+ <action method="setLabel"><value>Gift Certificate</value></action>
175
+ </block>
176
+ <block type="adminhtml/sales_order_totals_item" name="adjustment_positive" template="sales/order/totals/item.phtml">
177
+ <action method="setSourceField"><value>adjustment_positive</value></action>
178
+ <action method="setLabel"><value>Adjustment Refund</value></action>
179
+ </block>
180
+ <block type="adminhtml/sales_order_totals_item" name="adjustment_negative" template="sales/order/totals/item.phtml">
181
+ <action method="setSourceField"><value>adjustment_negative</value></action>
182
+ <action method="setLabel"><value>Adjustment Fee</value></action>
183
+ </block>
184
+ </block>-->
185
+ </block>
186
+ </block>
187
+ </block>
188
+ </block>
189
+ </reference>
190
+ </adminhtml_sales_order_invoice_new>
191
+
192
+ <adminhtml_sales_order_invoice_updateqty>
193
+ <block type="adminhtml/sales_order_invoice_create_items" name="order_items" template="sales/order/invoice/create/items.phtml">
194
+ <action method="addItemRender"><type>default</type><block>adminhtml/sales_items_renderer_default</block><template>sales/order/invoice/create/items/renderer/default.phtml</template></action>
195
+ <action method="addColumnRender"><column>qty</column><block>adminhtml/sales_items_column_qty</block><template>sales/items/column/qty.phtml</template></action>
196
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name</block><template>sales/items/column/name.phtml</template></action>
197
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name_grouped</block><template>sales/items/column/name.phtml</template><type>grouped</type></action>
198
+ <block type="core/text_list" name="order_item_extra_info"></block>
199
+ <block type="adminhtml/sales_order_totalbar" name="order_totalbar" template="sales/order/totalbar.phtml"></block>
200
+ <block type="adminhtml/sales_order_invoice_totals" name="invoice_totals" template="sales/order/totals.phtml">
201
+ <block type="adminhtml/sales_order_totals_tax" name="tax" template="sales/order/totals/tax.phtml" />
202
+ <!--<block type="adminhtml/sales_order_totals_item" name="footer" template="sales/order/totals/footer.phtml">
203
+ <block type="adminhtml/sales_order_totals_item" name="grand" template="sales/order/totals/grand.phtml" />
204
+ <block type="adminhtml/sales_order_totals_item" name="paid" template="sales/order/totals/paid.phtml" />
205
+ <block type="adminhtml/sales_order_totals_item" name="refunded" template="sales/order/totals/refunded.phtml" />
206
+ <block type="adminhtml/sales_order_totals_item" name="due" template="sales/order/totals/due.phtml" />
207
+ </block>
208
+ <block type="adminhtml/sales_order_totals_item" name="sales.order.view.totals.main" as="main" template="sales/order/totals/main.phtml">
209
+ <block type="adminhtml/sales_order_totals_subtotal" name="subtotal" template="sales/order/totals/subtotal.phtml" />
210
+ <block type="adminhtml/sales_order_totals_item" name="tax" template="sales/order/totals/item.phtml">
211
+ <action method="setSourceField"><value>tax_amount</value></action>
212
+ <action method="setLabel"><value>Tax</value></action>
213
+ </block>
214
+ <block type="adminhtml/sales_order_totals_item" name="shipping" template="sales/order/totals/shipping.phtml" />
215
+ <block type="adminhtml/sales_order_totals_item" name="discount" template="sales/order/totals/discount.phtml" />
216
+ <block type="adminhtml/sales_order_totals_item" name="giftcert" template="sales/order/totals/item.phtml">
217
+ <action method="setSourceField"><value>giftcert_amount</value></action>
218
+ <action method="setLabel"><value>Gift Certificate</value></action>
219
+ </block>
220
+ <block type="adminhtml/sales_order_totals_item" name="adjustment_positive" template="sales/order/totals/item.phtml">
221
+ <action method="setSourceField"><value>adjustment_positive</value></action>
222
+ <action method="setLabel"><value>Adjustment Refund</value></action>
223
+ </block>
224
+ <block type="adminhtml/sales_order_totals_item" name="adjustment_negative" template="sales/order/totals/item.phtml">
225
+ <action method="setSourceField"><value>adjustment_negative</value></action>
226
+ <action method="setLabel"><value>Adjustment Fee</value></action>
227
+ </block>
228
+ </block>-->
229
+ </block>
230
+ </block>
231
+ </adminhtml_sales_order_invoice_updateqty>
232
+
233
+ <adminhtml_sales_order_invoice_addcomment>
234
+ <block type="adminhtml/sales_order_invoice_view_comments" name="invoice_comments">
235
+ <block type="adminhtml/sales_order_comments_view" name="order_comments" template="sales/order/comments/view.phtml"></block>
236
+ </block>
237
+ </adminhtml_sales_order_invoice_addcomment>
238
+
239
+ <adminhtml_sales_order_invoice_view>
240
+ <reference name="content">
241
+ <block type="adminhtml/sales_order_invoice_view" name="sales_invoice_view">
242
+ <block type="adminhtml/sales_order_invoice_view_form" name="form" template="sales/order/invoice/view/form.phtml">
243
+ <block type="adminhtml/sales_order_view_info" name="order_info" template="sales/order/view/info.phtml"></block>
244
+ <block type="adminhtml/sales_order_payment" name="order_payment"></block>
245
+
246
+ <block type="adminhtml/sales_order_invoice_view_items" name="invoice_items" template="sales/order/invoice/view/items.phtml">
247
+ <action method="addItemRender"><type>default</type><block>adminhtml/sales_items_renderer_default</block><template>sales/order/invoice/view/items/renderer/default.phtml</template></action>
248
+ <action method="addColumnRender"><column>qty</column><block>adminhtml/sales_items_column_qty</block><template>sales/items/column/qty.phtml</template></action>
249
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name</block><template>sales/items/column/name.phtml</template></action>
250
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name_grouped</block><template>sales/items/column/name.phtml</template><type>grouped</type></action>
251
+ <block type="core/text_list" name="order_item_extra_info"></block>
252
+ </block>
253
+ <block type="adminhtml/sales_order_comments_view" name="order_comments" template="sales/order/comments/view.phtml">
254
+ <action method="setParentType"><type>invoice</type></action>
255
+ </block>
256
+ <block type="adminhtml/sales_order_invoice_totals" name="invoice_totals" template="sales/order/totals.phtml">
257
+ <block type="adminhtml/sales_order_totals_tax" name="tax" template="sales/order/totals/tax.phtml" />
258
+ <!--<block type="adminhtml/sales_order_totals_item" name="footer" template="sales/order/totals/footer.phtml">
259
+ <block type="adminhtml/sales_order_totals_item" name="grand" template="sales/order/totals/grand.phtml" />
260
+ <block type="adminhtml/sales_order_totals_item" name="paid" template="sales/order/totals/paid.phtml" />
261
+ <block type="adminhtml/sales_order_totals_item" name="refunded" template="sales/order/totals/refunded.phtml" />
262
+ <block type="adminhtml/sales_order_totals_item" name="due" template="sales/order/totals/due.phtml" />
263
+ </block>
264
+ <block type="adminhtml/sales_order_totals_item" name="sales.order.view.totals.main" as="main" template="sales/order/totals/main.phtml">
265
+ <block type="adminhtml/sales_order_totals_subtotal" name="subtotal" template="sales/order/totals/subtotal.phtml" />
266
+ <block type="adminhtml/sales_order_totals_item" name="tax" template="sales/order/totals/item.phtml">
267
+ <action method="setSourceField"><value>tax_amount</value></action>
268
+ <action method="setLabel"><value>Tax</value></action>
269
+ </block>
270
+ <block type="adminhtml/sales_order_totals_item" name="shipping" template="sales/order/totals/shipping.phtml" />
271
+ <block type="adminhtml/sales_order_totals_item" name="discount" template="sales/order/totals/discount.phtml" />
272
+ <block type="adminhtml/sales_order_totals_item" name="giftcert" template="sales/order/totals/item.phtml">
273
+ <action method="setSourceField"><value>giftcert_amount</value></action>
274
+ <action method="setLabel"><value>Gift Certificate</value></action>
275
+ </block>
276
+ <block type="adminhtml/sales_order_totals_item" name="adjustment_positive" template="sales/order/totals/item.phtml">
277
+ <action method="setSourceField"><value>adjustment_positive</value></action>
278
+ <action method="setLabel"><value>Adjustment Refund</value></action>
279
+ </block>
280
+ <block type="adminhtml/sales_order_totals_item" name="adjustment_negative" template="sales/order/totals/item.phtml">
281
+ <action method="setSourceField"><value>adjustment_negative</value></action>
282
+ <action method="setLabel"><value>Adjustment Fee</value></action>
283
+ </block>
284
+ </block>-->
285
+ </block>
286
+ </block>
287
+ </block>
288
+ </reference>
289
+ </adminhtml_sales_order_invoice_view>
290
+
291
+ <adminhtml_sales_order_shipment_new>
292
+ <reference name="head">
293
+ <action method="addJs"><file>mage/adminhtml/sales/packaging.js</file></action>
294
+ </reference>
295
+ <reference name="content">
296
+ <block type="adminhtml/sales_order_shipment_create" name="sales_shipment_create">
297
+ <block type="adminhtml/sales_order_shipment_create_form" name="form" template="sales/order/shipment/create/form.phtml">
298
+ <block type="adminhtml/sales_order_view_info" name="order_info" template="sales/order/view/info.phtml"></block>
299
+ <block type="adminhtml/sales_order_payment" name="order_payment"></block>
300
+ <block type="adminhtml/sales_order_shipment_create_tracking" name="shipment_tracking" template="sales/order/shipment/create/tracking.phtml"></block>
301
+ <block type="adminhtml/sales_order_shipment_create_items" name="order_items" template="sales/order/shipment/create/items.phtml">
302
+ <action method="addItemRender"><type>default</type><block>adminhtml/sales_items_renderer_default</block><template>sales/order/shipment/create/items/renderer/default.phtml</template></action>
303
+ <action method="addColumnRender"><column>qty</column><block>adminhtml/sales_items_column_qty</block><template>sales/items/column/qty.phtml</template></action>
304
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name</block><template>sales/items/column/name.phtml</template></action>
305
+ <block type="core/text_list" name="order_item_extra_info"></block>
306
+ </block>
307
+ <block type="adminhtml/sales_order_shipment_packaging" name="shipment_packaging" template="sales/order/shipment/packaging/popup.phtml" />
308
+ </block>
309
+ </block>
310
+ </reference>
311
+ </adminhtml_sales_order_shipment_new>
312
+
313
+ <adminhtml_sales_order_shipment_addtrack>
314
+ <block type="adminhtml/sales_order_shipment_view_tracking" name="shipment_tracking" template="sales/order/shipment/view/tracking.phtml"></block>
315
+ </adminhtml_sales_order_shipment_addtrack>
316
+
317
+ <adminhtml_sales_order_shipment_removetrack>
318
+ <block type="adminhtml/sales_order_shipment_view_tracking" name="shipment_tracking" template="sales/order/shipment/view/tracking.phtml"></block>
319
+ </adminhtml_sales_order_shipment_removetrack>
320
+
321
+ <adminhtml_sales_order_shipment_addcomment>
322
+ <block type="adminhtml/sales_order_shipment_view_comments" name="shipment_comments">
323
+ <block type="adminhtml/sales_order_comments_view" name="order_comments" template="sales/order/comments/view.phtml"></block>
324
+ </block>
325
+ </adminhtml_sales_order_shipment_addcomment>
326
+
327
+ <adminhtml_sales_order_shipment_view>
328
+ <reference name="head">
329
+ <action method="addJs"><file>mage/adminhtml/sales/packaging.js</file></action>
330
+ </reference>
331
+ <reference name="content">
332
+ <block type="adminhtml/sales_order_shipment_view" name="sales_shipment_view">
333
+ <block type="adminhtml/sales_order_shipment_view_form" name="form" template="sales/order/shipment/view/form.phtml">
334
+ <block type="adminhtml/sales_order_view_info" name="order_info" template="sales/order/view/info.phtml"></block>
335
+ <block type="adminhtml/sales_order_payment" name="order_payment"></block>
336
+ <block type="adminhtml/sales_order_shipment_view_tracking" name="shipment_tracking" template="sales/order/shipment/view/tracking.phtml"></block>
337
+ <block type="adminhtml/sales_order_shipment_view_items" name="shipment_items" template="sales/order/shipment/view/items.phtml">
338
+ <action method="addItemRender"><type>default</type><block>adminhtml/sales_items_renderer_default</block><template>sales/order/shipment/view/items/renderer/default.phtml</template></action>
339
+ <action method="addColumnRender"><column>qty</column><block>adminhtml/sales_items_column_qty</block><template>sales/items/column/qty.phtml</template></action>
340
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name</block><template>sales/items/column/name.phtml</template></action>
341
+ <block type="core/text_list" name="order_item_extra_info"></block>
342
+ </block>
343
+ <block type="adminhtml/sales_order_invoice_create_tracking" name="invoice_tracking" template="sales/order/shipment/create/tracking.phtml"></block>
344
+ <block type="adminhtml/sales_order_comments_view" name="order_comments" template="sales/order/comments/view.phtml">
345
+ <action method="setParentType"><type>shipment</type></action>
346
+ </block>
347
+ <block type="adminhtml/sales_order_shipment_packaging" name="shipment_packaging" template="sales/order/shipment/packaging/popup.phtml" />
348
+ <block type="adminhtml/sales_order_shipment_packaging" name="shipment_packed" template="sales/order/shipment/packaging/packed.phtml"/>
349
+ </block>
350
+ </block>
351
+ </reference>
352
+ </adminhtml_sales_order_shipment_view>
353
+
354
+ <adminhtml_sales_order_creditmemo_new>
355
+ <reference name="content">
356
+ <block type="adminhtml/sales_order_creditmemo_create" name="sales_creditmemo_create">
357
+ <block type="adminhtml/sales_order_creditmemo_create_form" name="form" template="sales/order/creditmemo/create/form.phtml">
358
+ <block type="adminhtml/sales_order_view_info" name="order_info" template="sales/order/view/info.phtml"></block>
359
+ <block type="adminhtml/sales_order_payment" name="order_payment"></block>
360
+ <block type="adminhtml/sales_order_creditmemo_create_items" name="order_items" template="sales/order/creditmemo/create/items.phtml">
361
+ <action method="addItemRender"><type>default</type><block>adminhtml/sales_items_renderer_default</block><template>sales/order/creditmemo/create/items/renderer/default.phtml</template></action>
362
+ <action method="addColumnRender"><column>qty</column><block>adminhtml/sales_items_column_qty</block><template>sales/items/column/qty.phtml</template></action>
363
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name</block><template>sales/items/column/name.phtml</template></action>
364
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name_grouped</block><template>sales/items/column/name.phtml</template><type>grouped</type></action>
365
+ <block type="core/text_list" name="order_item_extra_info"></block>
366
+ <block type="adminhtml/sales_order_totalbar" name="order_totalbar" template="sales/order/totalbar.phtml"></block>
367
+
368
+ <block type="adminhtml/sales_order_creditmemo_totals" name="creditmemo_totals" template="sales/order/totals.phtml">
369
+ <block type="adminhtml/sales_order_creditmemo_create_adjustments" name="adjustments" template="sales/order/creditmemo/create/totals/adjustments.phtml" />
370
+ <block type="adminhtml/sales_order_totals_tax" name="tax" template="sales/order/totals/tax.phtml" />
371
+ <!--<block type="adminhtml/sales_order_totals_item" name="footer" template="sales/order/totals/footer.phtml">
372
+ <block type="adminhtml/sales_order_totals_item" name="grand" template="sales/order/totals/grand.phtml">
373
+ <action method="setGrandTotalTitle"><title>Total Refund</title></action>
374
+ </block>
375
+ </block>
376
+ <block type="adminhtml/sales_order_totals_item" name="sales.order.view.totals.main" as="main" template="sales/order/totals/main.phtml">
377
+ <block type="adminhtml/sales_order_totals_subtotal" name="subtotal" template="sales/order/totals/subtotal.phtml" />
378
+ <block type="adminhtml/sales_order_totals_item" name="tax" template="sales/order/totals/item.phtml">
379
+ <action method="setSourceField"><value>tax_amount</value></action>
380
+ <action method="setLabel"><value>Tax</value></action>
381
+ </block>
382
+ <block type="adminhtml/sales_order_totals_item" name="discount" template="sales/order/totals/item.phtml">
383
+ <action method="setSourceField"><value>discount_amount</value></action>
384
+ <action method="setLabel"><value>Discount</value></action>
385
+ </block>
386
+ <block type="adminhtml/sales_order_totals_item" name="adjustments" template="sales/order/creditmemo/create/totals/adjustments.phtml" />
387
+ </block>-->
388
+ </block>
389
+ <block type="core/text_list" name="submit_before" />
390
+ <block type="core/text_list" name="submit_after" />
391
+ </block>
392
+ </block>
393
+ </block>
394
+ </reference>
395
+ </adminhtml_sales_order_creditmemo_new>
396
+
397
+ <adminhtml_sales_order_creditmemo_updateqty>
398
+ <block type="adminhtml/sales_order_creditmemo_create_items" name="order_items" template="sales/order/creditmemo/create/items.phtml">
399
+ <action method="addItemRender"><type>default</type><block>adminhtml/sales_items_renderer_default</block><template>sales/order/creditmemo/create/items/renderer/default.phtml</template></action>
400
+ <action method="addColumnRender"><column>qty</column><block>adminhtml/sales_items_column_qty</block><template>sales/items/column/qty.phtml</template></action>
401
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name</block><template>sales/items/column/name.phtml</template></action>
402
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name_grouped</block><template>sales/items/column/name.phtml</template><type>grouped</type></action>
403
+ <block type="core/text_list" name="order_item_extra_info"></block>
404
+ <block type="adminhtml/sales_order_totalbar" name="order_totalbar" template="sales/order/totalbar.phtml"></block>
405
+
406
+ <block type="adminhtml/sales_order_creditmemo_totals" name="creditmemo_totals" template="sales/order/totals.phtml">
407
+ <block type="adminhtml/sales_order_creditmemo_create_adjustments" name="adjustments" template="sales/order/creditmemo/create/totals/adjustments.phtml" />
408
+ <block type="adminhtml/sales_order_totals_tax" name="tax" template="sales/order/totals/tax.phtml" />
409
+ <!--<block type="adminhtml/sales_order_totals" name="order_totals" template="sales/order/totals.phtml">
410
+ <block type="adminhtml/sales_order_totals_item" name="footer" template="sales/order/totals/footer.phtml">
411
+ <block type="adminhtml/sales_order_totals_item" name="grand" template="sales/order/totals/grand.phtml">
412
+ <action method="setGrandTotalTitle"><title>Total Refund</title></action>
413
+ </block>
414
+ </block>
415
+ <block type="adminhtml/sales_order_totals_item" name="sales.order.view.totals.main" as="main" template="sales/order/totals/main.phtml">
416
+ <block type="adminhtml/sales_order_totals_subtotal" name="subtotal" template="sales/order/totals/subtotal.phtml" />
417
+ <block type="adminhtml/sales_order_totals_item" name="tax" template="sales/order/totals/item.phtml">
418
+ <action method="setSourceField"><value>tax_amount</value></action>
419
+ <action method="setLabel"><value>Tax</value></action>
420
+ </block>
421
+ <block type="adminhtml/sales_order_totals_item" name="discount" template="sales/order/totals/item.phtml">
422
+ <action method="setSourceField"><value>discount_amount</value></action>
423
+ <action method="setLabel"><value>Discount</value></action>
424
+ </block>
425
+ <block type="adminhtml/sales_order_totals_item" name="adjustments" template="sales/order/creditmemo/create/totals/adjustments.phtml" />
426
+ </block>-->
427
+ </block>
428
+
429
+ <block type="core/text_list" name="submit_before" />
430
+ <block type="core/text_list" name="submit_after" />
431
+ </block>
432
+ </adminhtml_sales_order_creditmemo_updateqty>
433
+
434
+ <adminhtml_sales_order_creditmemo_addcomment>
435
+ <block type="adminhtml/sales_order_creditmemo_view_comments" name="creditmemo_comments">
436
+ <block type="adminhtml/sales_order_comments_view" name="order_comments" template="sales/order/comments/view.phtml"></block>
437
+ </block>
438
+ </adminhtml_sales_order_creditmemo_addcomment>
439
+
440
+ <adminhtml_sales_order_creditmemo_view>
441
+ <reference name="content">
442
+ <block type="adminhtml/sales_order_creditmemo_view" name="sales_creditmemo_view">
443
+ <block type="adminhtml/sales_order_creditmemo_view_form" name="form" template="sales/order/creditmemo/view/form.phtml">
444
+ <block type="adminhtml/sales_order_view_info" name="order_info" template="sales/order/view/info.phtml"></block>
445
+ <block type="adminhtml/sales_order_payment" name="order_payment"></block>
446
+ <block type="adminhtml/sales_order_creditmemo_view_items" name="creditmemo_items" template="sales/order/creditmemo/view/items.phtml">
447
+ <action method="addItemRender"><type>default</type><block>adminhtml/sales_items_renderer_default</block><template>sales/order/creditmemo/view/items/renderer/default.phtml</template></action>
448
+ <action method="addColumnRender"><column>qty</column><block>adminhtml/sales_items_column_qty</block><template>sales/items/column/qty.phtml</template></action>
449
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name</block><template>sales/items/column/name.phtml</template></action>
450
+ <action method="addColumnRender"><column>name</column><block>adminhtml/sales_items_column_name_grouped</block><template>sales/items/column/name.phtml</template><type>grouped</type></action>
451
+ <block type="core/text_list" name="order_item_extra_info"></block>
452
+ </block>
453
+ <block type="adminhtml/sales_order_comments_view" name="order_comments" template="sales/order/comments/view.phtml">
454
+ <action method="setParentType"><type>creditmemo</type></action>
455
+ </block>
456
+
457
+ <block type="adminhtml/sales_order_creditmemo_totals" name="creditmemo_totals" template="sales/order/totals.phtml">
458
+ <block type="adminhtml/sales_order_totals_tax" name="tax" template="sales/order/totals/tax.phtml" />
459
+ <!--<block type="adminhtml/sales_order_totals_item" name="footer" template="sales/order/totals/footer.phtml">
460
+ <block type="adminhtml/sales_order_totals_item" name="grand" template="sales/order/totals/grand.phtml" />
461
+ <block type="adminhtml/sales_order_totals_item" name="paid" template="sales/order/totals/paid.phtml" />
462
+ <block type="adminhtml/sales_order_totals_item" name="refunded" template="sales/order/totals/refunded.phtml" />
463
+ <block type="adminhtml/sales_order_totals_item" name="due" template="sales/order/totals/due.phtml" />
464
+ </block>
465
+ <block type="adminhtml/sales_order_totals_item" name="sales.order.view.totals.main" as="main" template="sales/order/totals/main.phtml">
466
+ <block type="adminhtml/sales_order_totals_subtotal" name="subtotal" template="sales/order/totals/subtotal.phtml" />
467
+ <block type="adminhtml/sales_order_totals_tax" name="tax" template="sales/order/totals/tax.phtml" />
468
+ <block type="adminhtml/sales_order_totals_item" name="shipping" template="sales/order/totals/shipping.phtml" />
469
+ <block type="adminhtml/sales_order_totals_item" name="discount" template="sales/order/totals/discount.phtml" />
470
+ <block type="adminhtml/sales_order_totals_item" name="giftcert" template="sales/order/totals/item.phtml">
471
+ <action method="setSourceField"><value>giftcert_amount</value></action>
472
+ <action method="setLabel"><value>Gift Certificate</value></action>
473
+ </block>
474
+ <block type="adminhtml/sales_order_totals_item" name="adjustment_positive" template="sales/order/totals/item.phtml">
475
+ <action method="setSourceField"><value>adjustment_positive</value></action>
476
+ <action method="setLabel"><value>Adjustment Refund</value></action>
477
+ </block>
478
+ <block type="adminhtml/sales_order_totals_item" name="adjustment_negative" template="sales/order/totals/item.phtml">
479
+ <action method="setSourceField"><value>adjustment_negative</value></action>
480
+ <action method="setLabel"><value>Adjustment Fee</value></action>
481
+ </block>
482
+ </block>-->
483
+ </block>
484
+ </block>
485
+ </block>
486
+ </reference>
487
+ </adminhtml_sales_order_creditmemo_view>
488
+
489
+ <adminhtml_sales_transactions_index>
490
+ <reference name="content">
491
+ <block type="adminhtml/sales_transactions" name="sales_transactions.grid.container"></block>
492
+ </reference>
493
+ </adminhtml_sales_transactions_index>
494
+ <adminhtml_sales_transactions_grid>
495
+ <block type="adminhtml/sales_transactions_grid" name="sales_transactions.grid" output="toHtml"></block>
496
+ </adminhtml_sales_transactions_grid>
497
+ <adminhtml_sales_transactions_view>
498
+ <reference name="content">
499
+ <block type="adminhtml/sales_transactions_detail" name="sales_transactions.detail" template="sales/transactions/detail.phtml">
500
+ <block type="adminhtml/sales_transactions_detail_grid" name="sales_transactions.detail.grid" as="detail_grid"/>
501
+ <block type="adminhtml/sales_transactions_child_grid" name="sales_transactions.child.grid" as="child_grid"/>
502
+ </block>
503
+ </reference>
504
+ </adminhtml_sales_transactions_view>
505
+
506
+ <adminhtml_sales_order_create_index>
507
+ <reference name="left">
508
+ <action method="setIsCollapsed"><value>true</value></action>
509
+ </reference>
510
+ <reference name="head">
511
+ <action method="addJs"><file>mage/adminhtml/sales.js</file></action>
512
+ <action method="addJs"><file>mage/adminhtml/giftmessage.js</file></action>
513
+ <action method="addJs"><file>mage/adminhtml/product/composite/configure.js</file></action>
514
+ <action method="addJs"><file>varien/configurable.js</file></action>
515
+ <action method="addJs"><file>mage/adminhtml/giftoptions/tooltip.js</file></action>
516
+ <block type="adminhtml/template" name="optional_zip_countries" as="optional_zip_countries" template="directory/js/optional_zip_countries.phtml" />
517
+ </reference>
518
+ <reference name="js">
519
+ <block type="adminhtml/template" template="sales/order/create/js.phtml" name="create" />
520
+ </reference>
521
+ <reference name="root">
522
+ <block type="adminhtml/sales_order_create" name="content">
523
+ <block type="adminhtml/sales_order_create_form" template="sales/order/create/form.phtml" name="form">
524
+ <block type="adminhtml/sales_order_create_messages" name="message" />
525
+ <block type="adminhtml/sales_order_create_customer" template="sales/order/create/abstract.phtml" name="customer">
526
+ <block type="adminhtml/sales_order_create_customer_grid" name="grid" />
527
+ </block>
528
+ <block type="adminhtml/sales_order_create_store" template="sales/order/create/abstract.phtml" name="store">
529
+ <block type="adminhtml/sales_order_create_store_select" template="sales/order/create/store/select.phtml" name="select" />
530
+ </block>
531
+ <block type="adminhtml/sales_order_create_data" template="sales/order/create/data.phtml" name="data">
532
+ <block type="adminhtml/sales_order_create_sidebar" template="sales/order/create/sidebar.phtml" name="sidebar">
533
+ <block type="adminhtml/sales_order_create_sidebar_cart" template="sales/order/create/sidebar/items.phtml" name="cart" />
534
+ <block type="adminhtml/sales_order_create_sidebar_wishlist" template="sales/order/create/sidebar/items.phtml" name="wishlist" />
535
+ <block type="adminhtml/sales_order_create_sidebar_reorder" template="sales/order/create/sidebar/items.phtml" name="reorder" />
536
+ <block type="adminhtml/sales_order_create_sidebar_viewed" template="sales/order/create/sidebar/items.phtml" name="viewed" />
537
+ <block type="adminhtml/sales_order_create_sidebar_compared" template="sales/order/create/sidebar/items.phtml" name="compared" />
538
+ <block type="adminhtml/sales_order_create_sidebar_pcompared" template="sales/order/create/sidebar/items.phtml" name="pcompared" />
539
+ <block type="adminhtml/sales_order_create_sidebar_pviewed" template="sales/order/create/sidebar/items.phtml" name="pviewed" />
540
+ </block>
541
+ <block type="adminhtml/sales_order_create_form_account" template="sales/order/create/form/account.phtml" name="form_account" />
542
+ <block type="adminhtml/sales_order_create_shipping_address" template="sales/order/create/form/address.phtml" name="shipping_address" />
543
+ <block type="adminhtml/sales_order_create_billing_address" template="sales/order/create/form/address.phtml" name="billing_address" />
544
+ <block type="adminhtml/sales_order_create_shipping_method" template="sales/order/create/abstract.phtml" name="shipping_method">
545
+ <block type="adminhtml/sales_order_create_shipping_method_form" template="sales/order/create/shipping/method/form.phtml" name="form" />
546
+ </block>
547
+ <block type="adminhtml/sales_order_create_billing_method" template="sales/order/create/abstract.phtml" name="billing_method">
548
+ <block type="adminhtml/sales_order_create_billing_method_form" template="sales/order/create/billing/method/form.phtml" name="form" />
549
+ </block>
550
+ <block type="adminhtml/sales_order_create_newsletter" template="sales/order/create/abstract.phtml" name="newsletter">
551
+ <block type="adminhtml/sales_order_create_newsletter_form" template="sales/order/create/newsletter/form.phtml" name="form" />
552
+ </block>
553
+ <block type="adminhtml/sales_order_create_search" template="sales/order/create/abstract.phtml" name="search">
554
+ <block type="adminhtml/sales_order_create_search_grid" name="grid" />
555
+ </block>
556
+ <block type="adminhtml/sales_order_create_items" template="sales/order/create/items.phtml" name="items">
557
+ <block type="adminhtml/sales_order_create_items_grid" template="sales/order/create/items/grid.phtml" name="items_grid">
558
+ <block type="adminhtml/sales_order_create_coupons" template="sales/order/create/coupons/form.phtml" name="coupons">
559
+ <block type="adminhtml/sales_order_create_coupons_form" template="sales/order/create/coupons/form.phtml" name="form" />
560
+ </block>
561
+ </block>
562
+ </block>
563
+ <block type="adminhtml/sales_order_create_comment" template="sales/order/create/comment.phtml" name="comment" />
564
+ <block type="adminhtml/sales_order_create_totals" template="sales/order/create/totals.phtml" name="totals" />
565
+ <block type="adminhtml/template" name="gift_options" template="sales/order/giftoptions.phtml">
566
+ <block type="adminhtml/sales_order_create_giftmessage" template="sales/order/create/giftmessage.phtml" name="giftmessage" />
567
+ </block>
568
+ <block type="core/text_list" name="order_item_extra_info"></block>
569
+ </block>
570
+ </block>
571
+ </block>
572
+ </reference>
573
+ </adminhtml_sales_order_create_index>
574
+
575
+ <adminhtml_sales_order_edit_index>
576
+ <update handle="adminhtml_sales_order_create_index" />
577
+ </adminhtml_sales_order_edit_index>
578
+
579
+ <adminhtml_sales_order_create_load_block_json>
580
+ <reference name="root">
581
+ <block type="adminhtml/sales_order_create_load" name="content" />
582
+ </reference>
583
+ </adminhtml_sales_order_create_load_block_json>
584
+
585
+ <adminhtml_sales_order_create_load_block_plain>
586
+ <reference name="root">
587
+ <block type="core/text_list" name="content" />
588
+ </reference>
589
+ </adminhtml_sales_order_create_load_block_plain>
590
+
591
+ <adminhtml_sales_order_create_load_block_data>
592
+ <reference name="content">
593
+ <block type="adminhtml/sales_order_create_data" template="sales/order/create/data.phtml" name="data">
594
+ <block type="adminhtml/sales_order_create_sidebar" template="sales/order/create/sidebar.phtml" name="sidebar">
595
+ <block type="adminhtml/sales_order_create_sidebar_cart" template="sales/order/create/sidebar/items.phtml" name="cart" />
596
+ <block type="adminhtml/sales_order_create_sidebar_wishlist" template="sales/order/create/sidebar/items.phtml" name="wishlist" />
597
+ <block type="adminhtml/sales_order_create_sidebar_reorder" template="sales/order/create/sidebar/items.phtml" name="reorder" />
598
+ <block type="adminhtml/sales_order_create_sidebar_viewed" template="sales/order/create/sidebar/items.phtml" name="viewed" />
599
+ <block type="adminhtml/sales_order_create_sidebar_compared" template="sales/order/create/sidebar/items.phtml" name="compared" />
600
+ <block type="adminhtml/sales_order_create_sidebar_pcompared" template="sales/order/create/sidebar/items.phtml" name="pcompared" />
601
+ <block type="adminhtml/sales_order_create_sidebar_pviewed" template="sales/order/create/sidebar/items.phtml" name="pviewed" />
602
+ </block>
603
+ <block type="adminhtml/sales_order_create_form_account" template="sales/order/create/form/account.phtml" name="form_account" />
604
+ <block type="adminhtml/sales_order_create_shipping_address" template="sales/order/create/form/address.phtml" name="shipping_address" />
605
+ <block type="adminhtml/sales_order_create_billing_address" template="sales/order/create/form/address.phtml" name="billing_address" />
606
+ <block type="adminhtml/sales_order_create_shipping_method" template="sales/order/create/abstract.phtml" name="shipping_method">
607
+ <block type="adminhtml/sales_order_create_shipping_method_form" template="sales/order/create/shipping/method/form.phtml" name="form" />
608
+ </block>
609
+ <block type="adminhtml/sales_order_create_billing_method" template="sales/order/create/abstract.phtml" name="billing_method">
610
+ <block type="adminhtml/sales_order_create_billing_method_form" template="sales/order/create/billing/method/form.phtml" name="form" />
611
+ </block>
612
+ <block type="adminhtml/sales_order_create_newsletter" template="sales/order/create/abstract.phtml" name="newsletter">
613
+ <block type="adminhtml/sales_order_create_newsletter_form" template="sales/order/create/newsletter/form.phtml" name="form" />
614
+ </block>
615
+ <block type="adminhtml/sales_order_create_search" template="sales/order/create/abstract.phtml" name="search">
616
+ <block type="adminhtml/sales_order_create_search_grid" name="grid" />
617
+ </block>
618
+ <block type="adminhtml/sales_order_create_items" template="sales/order/create/items.phtml" name="items">
619
+ <block type="adminhtml/sales_order_create_items_grid" template="sales/order/create/items/grid.phtml" name="items_grid">
620
+ <block type="adminhtml/sales_order_create_coupons" template="sales/order/create/coupons/form.phtml" name="coupons">
621
+ <block type="adminhtml/sales_order_create_coupons_form" template="sales/order/create/coupons/form.phtml" name="form" />
622
+ </block>
623
+ </block>
624
+ </block>
625
+ <block type="adminhtml/sales_order_create_comment" template="sales/order/create/comment.phtml" name="comment" />
626
+ <block type="adminhtml/sales_order_create_totals" template="sales/order/create/totals.phtml" name="totals" />
627
+ <block type="adminhtml/template" name="gift_options" template="sales/order/giftoptions.phtml">
628
+ <block type="adminhtml/sales_order_create_giftmessage" template="sales/order/create/giftmessage.phtml" name="giftmessage" />
629
+ </block>
630
+ <block type="core/text_list" name="order_item_extra_info"></block>
631
+ </block>
632
+ </reference>
633
+ </adminhtml_sales_order_create_load_block_data>
634
+
635
+ <adminhtml_sales_order_create_load_block_header>
636
+ <reference name="content">
637
+ <block type="adminhtml/sales_order_create_header" name="header" />
638
+ </reference>
639
+ </adminhtml_sales_order_create_load_block_header>
640
+
641
+
642
+ <adminhtml_sales_order_create_load_block_sidebar>
643
+ <reference name="content">
644
+ <block type="adminhtml/sales_order_create_sidebar" template="sales/order/create/sidebar.phtml" name="sidebar">
645
+ <block type="adminhtml/sales_order_create_sidebar_cart" template="sales/order/create/sidebar/items.phtml" name="cart" />
646
+ <block type="adminhtml/sales_order_create_sidebar_wishlist" template="sales/order/create/sidebar/items.phtml" name="wishlist" />
647
+ <block type="adminhtml/sales_order_create_sidebar_reorder" template="sales/order/create/sidebar/items.phtml" name="reorder" />
648
+ <block type="adminhtml/sales_order_create_sidebar_viewed" template="sales/order/create/sidebar/items.phtml" name="viewed" />
649
+ <block type="adminhtml/sales_order_create_sidebar_compared" template="sales/order/create/sidebar/items.phtml" name="compared" />
650
+ <block type="adminhtml/sales_order_create_sidebar_pcompared" template="sales/order/create/sidebar/items.phtml" name="pcompared" />
651
+ <block type="adminhtml/sales_order_create_sidebar_pviewed" template="sales/order/create/sidebar/items.phtml" name="pviewed" />
652
+ </block>
653
+ </reference>
654
+ </adminhtml_sales_order_create_load_block_sidebar>
655
+
656
+ <adminhtml_sales_order_create_load_block_form_account>
657
+ <reference name="content">
658
+ <block type="adminhtml/sales_order_create_form_account" template="sales/order/create/form/account.phtml" name="form_account" />
659
+ </reference>
660
+ </adminhtml_sales_order_create_load_block_form_account>
661
+
662
+ <adminhtml_sales_order_create_load_block_shipping_address>
663
+ <reference name="content">
664
+ <block type="adminhtml/sales_order_create_shipping_address" template="sales/order/create/form/address.phtml" name="shipping_address" />
665
+ </reference>
666
+ </adminhtml_sales_order_create_load_block_shipping_address>
667
+
668
+ <adminhtml_sales_order_create_load_block_billing_address>
669
+ <reference name="content">
670
+ <block type="adminhtml/sales_order_create_billing_address" template="sales/order/create/form/address.phtml" name="billing_address" />
671
+ </reference>
672
+ </adminhtml_sales_order_create_load_block_billing_address>
673
+
674
+ <adminhtml_sales_order_create_load_block_shipping_method>
675
+ <reference name="content">
676
+ <block type="adminhtml/sales_order_create_shipping_method" template="sales/order/create/abstract.phtml" name="shipping_method">
677
+ <block type="adminhtml/sales_order_create_shipping_method_form" template="sales/order/create/shipping/method/form.phtml" name="form" />
678
+ </block>
679
+ </reference>
680
+ </adminhtml_sales_order_create_load_block_shipping_method>
681
+
682
+ <adminhtml_sales_order_create_load_block_billing_method>
683
+ <reference name="content">
684
+ <block type="adminhtml/sales_order_create_billing_method" template="sales/order/create/abstract.phtml" name="billing_method">
685
+ <block type="adminhtml/sales_order_create_billing_method_form" template="sales/order/create/billing/method/form.phtml" name="form" />
686
+ </block>
687
+ </reference>
688
+ </adminhtml_sales_order_create_load_block_billing_method>
689
+
690
+ <adminhtml_sales_order_create_load_block_newsletter>
691
+ <reference name="content">
692
+ <block type="adminhtml/sales_order_create_newsletter" template="sales/order/create/abstract.phtml" name="newsletter">
693
+ <block type="adminhtml/sales_order_create_newsletter_form" template="sales/order/create/newsletter/form.phtml" name="form" />
694
+ </block>
695
+ </reference>
696
+ </adminhtml_sales_order_create_load_block_newsletter>
697
+
698
+ <adminhtml_sales_order_create_load_block_search>
699
+ <reference name="content">
700
+ <block type="adminhtml/sales_order_create_search" template="sales/order/create/abstract.phtml" name="search">
701
+ <block type="adminhtml/sales_order_create_search_grid" name="grid" />
702
+ </block>
703
+ </reference>
704
+ </adminhtml_sales_order_create_load_block_search>
705
+
706
+ <adminhtml_sales_order_create_load_block_search_grid>
707
+ <reference name="content">
708
+ <block type="adminhtml/sales_order_create_search_grid" name="grid" />
709
+ </reference>
710
+ </adminhtml_sales_order_create_load_block_search_grid>
711
+
712
+ <adminhtml_sales_order_create_load_block_items>
713
+ <reference name="content">
714
+ <block type="adminhtml/sales_order_create_items" template="sales/order/create/items.phtml" name="items">
715
+ <block type="adminhtml/sales_order_create_items_grid" template="sales/order/create/items/grid.phtml" name="items_grid">
716
+ <block type="adminhtml/sales_order_create_coupons" template="sales/order/create/coupons/form.phtml" name="coupons">
717
+ <block type="adminhtml/sales_order_create_coupons_form" template="sales/order/create/coupons/form.phtml" name="form" />
718
+ </block>
719
+ </block>
720
+ </block>
721
+ <block type="core/text_list" name="order_item_extra_info"></block>
722
+ </reference>
723
+ </adminhtml_sales_order_create_load_block_items>
724
+
725
+ <adminhtml_sales_order_create_load_block_comment>
726
+ <reference name="content">
727
+ <block type="adminhtml/sales_order_create_comment" template="sales/order/create/comment.phtml" name="comment" />
728
+ </reference>
729
+ </adminhtml_sales_order_create_load_block_comment>
730
+
731
+ <adminhtml_sales_order_create_load_block_totals>
732
+ <reference name="content">
733
+ <block type="adminhtml/sales_order_create_totals" template="sales/order/create/totals.phtml" name="totals" />
734
+ </reference>
735
+ </adminhtml_sales_order_create_load_block_totals>
736
+
737
+ <adminhtml_sales_order_create_load_block_giftmessage>
738
+ <reference name="content">
739
+ <block type="adminhtml/sales_order_create_giftmessage" template="sales/order/create/giftmessage.phtml" name="giftmessage" />
740
+ </reference>
741
+ </adminhtml_sales_order_create_load_block_giftmessage>
742
+
743
+ <adminhtml_sales_order_create_load_block_message>
744
+ <reference name="content">
745
+ <block type="adminhtml/sales_order_create_messages" name="message" />
746
+ </reference>
747
+ </adminhtml_sales_order_create_load_block_message>
748
+
749
+ <adminhtml_sales_order_create_load_block_customer_grid>
750
+ <reference name="content">
751
+ <block type="adminhtml/sales_order_create_customer_grid" name="grid" />
752
+ </reference>
753
+ </adminhtml_sales_order_create_load_block_customer_grid>
754
+
755
+ <adminhtml_sales_order_create_load_block_sidebar_cart>
756
+ <reference name="content">
757
+ <block type="adminhtml/sales_order_create_sidebar_cart" template="sales/order/create/sidebar/items.phtml" name="sidebar_cart" />
758
+ </reference>
759
+ </adminhtml_sales_order_create_load_block_sidebar_cart>
760
+
761
+ <adminhtml_sales_order_create_load_block_sidebar_wishlist>
762
+ <reference name="content">
763
+ <block type="adminhtml/sales_order_create_sidebar_wishlist" template="sales/order/create/sidebar/items.phtml" name="sidebar_wishlist" />
764
+ </reference>
765
+ </adminhtml_sales_order_create_load_block_sidebar_wishlist>
766
+
767
+ <adminhtml_sales_order_create_load_block_sidebar_reorder>
768
+ <reference name="content">
769
+ <block type="adminhtml/sales_order_create_sidebar_reorder" template="sales/order/create/sidebar/items.phtml" name="sidebar_reorder" />
770
+ </reference>
771
+ </adminhtml_sales_order_create_load_block_sidebar_reorder>
772
+
773
+ <adminhtml_sales_order_create_load_block_sidebar_viewed>
774
+ <reference name="content">
775
+ <block type="adminhtml/sales_order_create_sidebar_viewed" template="sales/order/create/sidebar/items.phtml" name="sidebar_viewed" />
776
+ </reference>
777
+ </adminhtml_sales_order_create_load_block_sidebar_viewed>
778
+
779
+ <adminhtml_sales_order_create_load_block_sidebar_compared>
780
+ <reference name="content">
781
+ <block type="adminhtml/sales_order_create_sidebar_compared" template="sales/order/create/sidebar/items.phtml" name="sidebar_compared" />
782
+ </reference>
783
+ </adminhtml_sales_order_create_load_block_sidebar_compared>
784
+
785
+ <adminhtml_sales_order_create_load_block_sidebar_pviewed>
786
+ <reference name="content">
787
+ <block type="adminhtml/sales_order_create_sidebar_pviewed" template="sales/order/create/sidebar/items.phtml" name="sidebar_pviewed" />
788
+ </reference>
789
+ </adminhtml_sales_order_create_load_block_sidebar_pviewed>
790
+
791
+ <adminhtml_sales_order_create_load_block_sidebar_pcompared>
792
+ <reference name="content">
793
+ <block type="adminhtml/sales_order_create_sidebar_pcompared" template="sales/order/create/sidebar/items.phtml" name="sidebar_pcompared" />
794
+ </reference>
795
+ </adminhtml_sales_order_create_load_block_sidebar_pcompared>
796
+
797
+ <report_sales>
798
+ <reference name="messages">
799
+ <action method="addNotice" translate="message">
800
+ <message>This report depends on timezone configuration. Once timezone is changed, the lifetime statistics need to be refreshed.</message>
801
+ </action>
802
+ </reference>
803
+ </report_sales>
804
+
805
+ <adminhtml_report_sales_sales>
806
+ <update handle="report_sales"/>
807
+ <reference name="content">
808
+ <block type="adminhtml/report_sales_sales" template="report/grid/container.phtml" name="sales.report.grid.container">
809
+ <block type="adminhtml/store_switcher" template="report/store/switcher/enhanced.phtml" name="store.switcher">
810
+ <action method="setStoreVarName"><var_name>store_ids</var_name></action>
811
+ </block>
812
+ <block type="sales/adminhtml_report_filter_form_order" name="grid.filter.form">
813
+ <action method="addReportTypeOption" translate="value">
814
+ <key>created_at_order</key>
815
+ <value>Order Created Date</value>
816
+ </action>
817
+ <action method="addReportTypeOption" translate="value">
818
+ <key>updated_at_order</key>
819
+ <value>Order Updated Date</value>
820
+ </action>
821
+ <action method="setFieldOption" translate="value">
822
+ <field>report_type</field>
823
+ <option>note</option>
824
+ <value>Order Updated Date report is real-time, does not need statistics refreshing.</value>
825
+ </action>
826
+ </block>
827
+ </block>
828
+ </reference>
829
+ </adminhtml_report_sales_sales>
830
+
831
+ <adminhtml_report_sales_tax>
832
+ <update handle="report_sales"/>
833
+ <reference name="content">
834
+ <block type="adminhtml/report_sales_tax" template="report/grid/container.phtml" name="sales.report.grid.container">
835
+ <block type="adminhtml/store_switcher" template="report/store/switcher/enhanced.phtml" name="store.switcher">
836
+ <action method="setStoreVarName"><var_name>store_ids</var_name></action>
837
+ </block>
838
+ <block type="sales/adminhtml_report_filter_form" name="grid.filter.form">
839
+ <action method="addReportTypeOption" translate="value">
840
+ <key>created_at_order</key>
841
+ <value>Order Created Date</value>
842
+ </action>
843
+ <action method="addReportTypeOption" translate="value">
844
+ <key>updated_at_order</key>
845
+ <value>Order Updated Date</value>
846
+ </action>
847
+ <action method="setFieldOption" translate="value">
848
+ <field>report_type</field>
849
+ <option>note</option>
850
+ <value>Order Updated Date report is real-time, does not need statistics refreshing.</value>
851
+ </action>
852
+ </block>
853
+ </block>
854
+ </reference>
855
+ </adminhtml_report_sales_tax>
856
+
857
+ <adminhtml_report_sales_shipping>
858
+ <update handle="report_sales"/>
859
+ <reference name="content">
860
+ <block type="adminhtml/report_sales_shipping" template="report/grid/container.phtml" name="sales.report.grid.container">
861
+ <block type="adminhtml/store_switcher" template="report/store/switcher/enhanced.phtml" name="store.switcher">
862
+ <action method="setStoreVarName"><var_name>store_ids</var_name></action>
863
+ </block>
864
+ <block type="sales/adminhtml_report_filter_form" name="grid.filter.form">
865
+ <action method="addReportTypeOption" translate="value">
866
+ <key>created_at_order</key>
867
+ <value>Order Created Date</value>
868
+ </action>
869
+ <action method="addReportTypeOption" translate="value">
870
+ <key>created_at_shipment</key>
871
+ <value>First Invoice Created Date</value>
872
+ </action>
873
+ </block>
874
+ </block>
875
+ </reference>
876
+ </adminhtml_report_sales_shipping>
877
+
878
+ <adminhtml_report_sales_invoiced>
879
+ <update handle="report_sales"/>
880
+ <reference name="content">
881
+ <block type="adminhtml/report_sales_invoiced" template="report/grid/container.phtml" name="sales.report.grid.container">
882
+ <block type="adminhtml/store_switcher" template="report/store/switcher/enhanced.phtml" name="store.switcher">
883
+ <action method="setStoreVarName"><var_name>store_ids</var_name></action>
884
+ </block>
885
+ <block type="sales/adminhtml_report_filter_form" name="grid.filter.form">
886
+ <action method="addReportTypeOption" translate="value">
887
+ <key>created_at_order</key>
888
+ <value>Order Created Date</value>
889
+ </action>
890
+ <action method="addReportTypeOption" translate="value">
891
+ <key>created_at_invoice</key>
892
+ <value>Last Invoice Created Date</value>
893
+ </action>
894
+ </block>
895
+ </block>
896
+ </reference>
897
+ </adminhtml_report_sales_invoiced>
898
+
899
+ <adminhtml_report_sales_refunded>
900
+ <update handle="report_sales"/>
901
+ <reference name="content">
902
+ <block type="adminhtml/report_sales_refunded" template="report/grid/container.phtml" name="sales.report.grid.container">
903
+ <block type="adminhtml/store_switcher" template="report/store/switcher/enhanced.phtml" name="store.switcher">
904
+ <action method="setStoreVarName"><var_name>store_ids</var_name></action>
905
+ </block>
906
+ <block type="sales/adminhtml_report_filter_form" name="grid.filter.form">
907
+ <action method="addReportTypeOption" translate="value">
908
+ <key>created_at_order</key>
909
+ <value>Order Created Date</value>
910
+ </action>
911
+ <action method="addReportTypeOption" translate="value">
912
+ <key>created_at_refunded</key>
913
+ <value>Last Credit Memo Created Date</value>
914
+ </action>
915
+ </block>
916
+ </block>
917
+ </reference>
918
+ </adminhtml_report_sales_refunded>
919
+
920
+ <adminhtml_report_sales_coupons>
921
+ <update handle="report_sales"/>
922
+ <reference name="content">
923
+ <block type="adminhtml/report_sales_coupons" template="report/grid/container.phtml" name="sales.report.grid.container">
924
+ <block type="adminhtml/store_switcher" template="report/store/switcher/enhanced.phtml" name="store.switcher">
925
+ <action method="setStoreVarName"><var_name>store_ids</var_name></action>
926
+ </block>
927
+ <block type="sales/adminhtml_report_filter_form_coupon" name="grid.filter.form">
928
+ <action method="addReportTypeOption" translate="value">
929
+ <key>created_at_order</key>
930
+ <value>Order Created Date</value>
931
+ </action>
932
+ <action method="addReportTypeOption" translate="value">
933
+ <key>updated_at_order</key>
934
+ <value>Order Updated Date</value>
935
+ </action>
936
+ <action method="setFieldOption" translate="value">
937
+ <field>report_type</field>
938
+ <option>note</option>
939
+ <value>Order Updated Date report is real-time, does not need statistics refreshing.</value>
940
+ </action>
941
+ </block>
942
+ </block>
943
+ </reference>
944
+ </adminhtml_report_sales_coupons>
945
+
946
+ <adminhtml_report_sales_bestsellers>
947
+ <update handle="report_sales"/>
948
+ <reference name="content">
949
+ <block type="adminhtml/report_sales_bestsellers" template="report/grid/container.phtml" name="sales.report.grid.container">
950
+ <block type="adminhtml/store_switcher" template="report/store/switcher/enhanced.phtml" name="store.switcher">
951
+ <action method="setStoreVarName"><var_name>store_ids</var_name></action>
952
+ </block>
953
+ <block type="sales/adminhtml_report_filter_form" name="grid.filter.form">
954
+ <action method="setFieldVisibility">
955
+ <field>report_type</field>
956
+ <visibility>0</visibility>
957
+ </action>
958
+ <action method="setFieldVisibility">
959
+ <field>show_order_statuses</field>
960
+ <visibility>0</visibility>
961
+ </action>
962
+ <action method="setFieldVisibility">
963
+ <field>order_statuses</field>
964
+ <visibility>0</visibility>
965
+ </action>
966
+ </block>
967
+ </block>
968
+ </reference>
969
+ </adminhtml_report_sales_bestsellers>
970
+
971
+ <adminhtml_sales_recurring_profile_index>
972
+ <reference name="content">
973
+ <block type="sales/adminhtml_recurring_profile" name="sales.recurring.profile.grid.container"/>
974
+ </reference>
975
+ </adminhtml_sales_recurring_profile_index>
976
+
977
+ <adminhtml_sales_recurring_profile_grid>
978
+ <remove name="root"/>
979
+ <block type="sales/adminhtml_recurring_profile_grid" name="sales.recurring.profile.grid" output="toHtml"/>
980
+ </adminhtml_sales_recurring_profile_grid>
981
+
982
+ <adminhtml_sales_recurring_profile_customergrid>
983
+ <block type="sales/adminhtml_customer_edit_tab_recurring_profile" name="customer.recurring.profile.grid" output="toHtml"></block>
984
+ </adminhtml_sales_recurring_profile_customergrid>
985
+
986
+ <adminhtml_sales_recurring_profile_view>
987
+ <reference name="content">
988
+ <block type="sales/adminhtml_recurring_profile_view" name="sales.recurring.profile.view" template="widget/view/container.phtml">
989
+ <action method="setDestElementId"><value>sales_recurring_profile_view</value></action>
990
+ </block>
991
+ </reference>
992
+ <reference name="left">
993
+ <block type="adminhtml/widget_tabs" name="sales.recurring.profile.view.tabs">
994
+ <action method="setDestElementId"><value>sales_recurring_profile_view</value></action>
995
+ <action method="setTitle" translate="value"><value>Recurring Profile View</value></action>
996
+ <action method="setId"><value>sales_recurring_profile_view_tabs</value></action>
997
+ <block type="sales/adminhtml_recurring_profile_view_tab_info" as="info_tab" name="sales.recurring.profile.tab.info" template="sales/recurring/profile/view.phtml">
998
+ <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.general" as="general" template="sales/recurring/profile/view/info.phtml">
999
+ <action method="prepareReferenceInfo"/>
1000
+ <action method="addToParentGroup"><value>info_blocks_row_1</value></action>
1001
+ <action method="setViewColumn"><value>1</value></action>
1002
+ <action method="setViewLabel" translate="value"><value>Reference</value></action>
1003
+ </block>
1004
+ <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.item" as="item" template="sales/recurring/profile/view/info.phtml">
1005
+ <action method="prepareItemInfo"/>
1006
+ <action method="addToParentGroup"><value>info_blocks_row_1</value></action>
1007
+ <action method="setViewColumn"><value>2</value></action>
1008
+ <action method="setViewLabel" translate="value"><value>Purchased Item</value></action>
1009
+ </block>
1010
+ <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.schedule" as="profile" template="sales/recurring/profile/view/info.phtml">
1011
+ <action method="prepareScheduleInfo"/>
1012
+ <action method="addToParentGroup"><value>info_blocks_row_2</value></action>
1013
+ <action method="setViewColumn"><value>1</value></action>
1014
+ <action method="setViewLabel" translate="value"><value>Profile Schedule</value></action>
1015
+ </block>
1016
+ <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.fees" as="fees" template="sales/recurring/profile/view/info.phtml">
1017
+ <action method="prepareFeesInfo"/>
1018
+ <action method="addToParentGroup"><value>info_blocks_row_2</value></action>
1019
+ <action method="setViewColumn"><value>2</value></action>
1020
+ <action method="setViewLabel" translate="value"><value>Profile Payments</value></action>
1021
+ </block>
1022
+ <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.billing" as="billing_address" template="sales/recurring/profile/view/info.phtml">
1023
+ <action method="prepareAddressInfo"/>
1024
+ <action method="addToParentGroup"><value>info_blocks_row_3</value></action>
1025
+ <action method="setViewColumn"><value>1</value></action>
1026
+ <action method="setViewLabel" translate="value"><value>Billing Address</value></action>
1027
+ </block>
1028
+ <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.shipping" as="shipping_address" template="sales/recurring/profile/view/info.phtml">
1029
+ <action method="setAddressType"><value>shipping</value></action>
1030
+ <action method="prepareAddressInfo"/>
1031
+ <action method="addToParentGroup"><value>info_blocks_row_3</value></action>
1032
+ <action method="setViewColumn"><value>2</value></action>
1033
+ <action method="setViewLabel" translate="value"><value>Shipping Address</value></action>
1034
+ </block>
1035
+ </block>
1036
+ <block type="sales/adminhtml_recurring_profile_view_tab_orders" as="orders_tab" name="sales.recurring.profile.tab.orders"/>
1037
+ <action method="addTab"><name>recurring_profile_info</name><block>info_tab</block></action>
1038
+ <action method="addTab"><name>recurring_profile_orders</name><block>orders_tab</block></action>
1039
+ </block>
1040
+ </reference>
1041
+ </adminhtml_sales_recurring_profile_view>
1042
+
1043
+ <adminhtml_sales_recurring_profile_orders>
1044
+ <remove name="root"/>
1045
+ <block type="sales/adminhtml_recurring_profile_view_tab_orders" name="sales.recurring.profile.tab.orders" output="toHtml"/>
1046
+ </adminhtml_sales_recurring_profile_orders>
1047
+
1048
+ <adminhtml_customer_edit>
1049
+ <reference name="customer_edit_tabs">
1050
+ <action method="addTab"><name>customer_edit_tab_agreements</name><block>sales/adminhtml_customer_edit_tab_agreement</block></action>
1051
+ <action method="addTab"><name>customer_edit_tab_recurring_profile</name><block>sales/adminhtml_customer_edit_tab_recurring_profile</block></action>
1052
+ </reference>
1053
+ </adminhtml_customer_edit>
1054
+
1055
+ <adminhtml_sales_order_status_index>
1056
+ <reference name="content">
1057
+ <block type="adminhtml/sales_order_status" name="sales_order_status.grid.container"></block>
1058
+ </reference>
1059
+ </adminhtml_sales_order_status_index>
1060
+ <adminhtml_sales_order_status_new>
1061
+ <reference name="content">
1062
+ <block type="adminhtml/sales_order_status_new" name="sales_order_status.new.container"></block>
1063
+ </reference>
1064
+ </adminhtml_sales_order_status_new>
1065
+ <adminhtml_sales_order_status_edit>
1066
+ <reference name="content">
1067
+ <block type="adminhtml/sales_order_status_edit" name="sales_order_status.edit.container"></block>
1068
+ </reference>
1069
+ </adminhtml_sales_order_status_edit>
1070
+ <adminhtml_sales_order_status_assign>
1071
+ <reference name="content">
1072
+ <block type="adminhtml/sales_order_status_assign" name="sales_order_status.assign.container"></block>
1073
+ </reference>
1074
+ </adminhtml_sales_order_status_assign>
1075
+ <adminhtml_sales_order_address>
1076
+ <reference name="content">
1077
+ <block type="adminhtml/sales_order_address" name="sales_order_address.form.container"></block>
1078
+ </reference>
1079
+ </adminhtml_sales_order_address>
1080
+ </layout>
app/design/adminhtml/default/default/layout/search.xml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_catalog_search_edit>
31
+ <reference name="content">
32
+ <block type="adminhtml/catalog_search_edit" name="catalog_search_edit" />
33
+ </reference>
34
+ </adminhtml_catalog_search_edit>
35
+ </layout>
app/design/adminhtml/default/default/layout/tag.xml ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+ <layout>
29
+ <adminhtml_tag_edit>
30
+ <reference name="content">
31
+ <block type="adminhtml/tag_edit" name="tag_edit" template="tag/edit/container.phtml"></block>
32
+ </reference>
33
+ </adminhtml_tag_edit>
34
+ <adminhtml_tag_assigned>
35
+ <remove name="root" />
36
+ <block type="adminhtml/tag_assigned_grid" name="tag_assigned_grid" output="toHtml" />
37
+ <block type="adminhtml/widget_grid_serializer" name="tag_grid_serializer" output="toHtml">
38
+ <reference name="tag_grid_serializer">
39
+ <action method="initSerializerBlock">
40
+ <grid_block_name>tag_assigned_grid</grid_block_name>
41
+ <data_callback>getRelatedProducts</data_callback>
42
+ <hidden_input_name>tag_assigned_products</hidden_input_name>
43
+ <reload_param_name>assigned_products</reload_param_name>
44
+ </action>
45
+ </reference>
46
+ </block>
47
+ </adminhtml_tag_assigned>
48
+ <adminhtml_tag_assignedgridonly>
49
+ <remove name="root" />
50
+ <block type="adminhtml/tag_assigned_grid" name="assigned_grid" output="toHtml" />
51
+ </adminhtml_tag_assignedgridonly>
52
+
53
+ <adminhtml_tag_index>
54
+ <reference name="content">
55
+ <block type="adminhtml/tag_tag" name="adminhtml.tag.tag"/>
56
+ </reference>
57
+ </adminhtml_tag_index>
58
+
59
+ <adminhtml_tag_pending>
60
+ <reference name="content">
61
+ <block type="adminhtml/tag_pending" name="adminhtml.tag.pending"/>
62
+ </reference>
63
+ </adminhtml_tag_pending>
64
+
65
+ <adminhtml_tag_ajaxgrid>
66
+ <block type="core/text_list" name="root" output="toHtml">
67
+ <block type="adminhtml/tag_tag_grid" name="adminhtml.tag.tag.grid"/>
68
+ </block>
69
+ </adminhtml_tag_ajaxgrid>
70
+
71
+ <adminhtml_tag_ajaxpendinggrid>
72
+ <block type="core/text_list" name="root" output="toHtml">
73
+ <block type="adminhtml/tag_grid_pending" name="adminhtml.tag.grid.pending"/>
74
+ </block>
75
+ </adminhtml_tag_ajaxpendinggrid>
76
+
77
+ <adminhtml_tag_product>
78
+ <block type="core/text_list" name="root" output="toHtml">
79
+ <block type="adminhtml/tag_product_grid" name="adminhtml.tag.product.grid"/>
80
+ </block>
81
+ </adminhtml_tag_product>
82
+
83
+ <adminhtml_tag_customer>
84
+ <block type="core/text_list" name="root" output="toHtml">
85
+ <block type="adminhtml/tag_customer_grid" name="adminhtml.tag.customer.grid"/>
86
+ </block>
87
+ </adminhtml_tag_customer>
88
+ </layout>
app/design/adminhtml/default/default/layout/widget.xml ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <adminhtml_widget_index>
31
+ <block name="wysiwyg_widget" type="widget/adminhtml_widget" output="toHtml" />
32
+ </adminhtml_widget_index>
33
+
34
+ <adminhtml_widget_loadoptions>
35
+ <block name="wysiwyg_widget.options" type="widget/adminhtml_widget_options" output="toHtml" />
36
+ </adminhtml_widget_loadoptions>
37
+
38
+ <adminhtml_widget_instance_index>
39
+ <reference name="content">
40
+ <block type="widget/adminhtml_widget_instance" name="widget_instance" />
41
+ </reference>
42
+ </adminhtml_widget_instance_index>
43
+
44
+ <adminhtml_widget_instance_edit>
45
+ <reference name="head">
46
+ <action method="setCanLoadExtJs"><flag>1</flag></action>
47
+ <action method="addJs"><script>mage/adminhtml/wysiwyg/widget.js</script></action>
48
+ <action method="addItem"><type>js</type><name>prototype/window.js</name></action>
49
+ <action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
50
+ <action method="addCss"><name>lib/prototype/windows/themes/magento.css</name></action>
51
+ </reference>
52
+ <reference name="content">
53
+ <block type="widget/adminhtml_widget_instance_edit" name="widget_instance_edit" />
54
+ </reference>
55
+ <reference name="left">
56
+ <block type="widget/adminhtml_widget_instance_edit_tabs" name="widget_instance_edit_tabs">
57
+ <block type="widget/adminhtml_widget_instance_edit_tab_settings" name="widget_instance_edit_tab_settings" />
58
+ <block type="widget/adminhtml_widget_instance_edit_tab_main" name="widget_instance_edit_tab_main" />
59
+ <block type="widget/adminhtml_widget_instance_edit_tab_properties" name="widget_instance_edit_tab_properties" />
60
+ <action method="addTab"><name>settings_section</name><block>widget_instance_edit_tab_settings</block></action>
61
+ <action method="addTab"><name>main_section</name><block>widget_instance_edit_tab_main</block></action>
62
+ <action method="addTab"><name>properties_section</name><block>widget_instance_edit_tab_properties</block></action>
63
+ </block>
64
+ </reference>
65
+ <reference name="js">
66
+ <block type="adminhtml/template" template="widget/instance/js.phtml" name="widget_instance_js"></block>
67
+ </reference>
68
+ </adminhtml_widget_instance_edit>
69
+ </layout>
app/design/adminhtml/default/default/layout/xmlconnect.xml ADDED
@@ -0,0 +1,237 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category design
23
+ * @package default_default
24
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+
29
+ <layout>
30
+ <default>
31
+ <reference name="head">
32
+ <action method="addCss"><name>xmlconnect/boxes.css</name></action>
33
+ </reference>
34
+ </default>
35
+
36
+ <adminhtml_mobile_index>
37
+ <reference name="content">
38
+ <block type="xmlconnect/adminhtml_mobile" name="applications"/>
39
+ </reference>
40
+ </adminhtml_mobile_index>
41
+
42
+ <adminhtml_mobile_history>
43
+ <reference name="content">
44
+ <block type="xmlconnect/adminhtml_history" name="history"/>
45
+ </reference>
46
+ </adminhtml_mobile_history>
47
+
48
+ <adminhtml_mobile_queue>
49
+ <reference name="content">
50
+ <block type="xmlconnect/adminhtml_queue" name="queue"/>
51
+ </reference>
52
+ </adminhtml_mobile_queue>
53
+
54
+ <adminhtml_mobile_template>
55
+ <reference name="content">
56
+ <block type="xmlconnect/adminhtml_template" name="template"/>
57
+ </reference>
58
+ </adminhtml_mobile_template>
59
+
60
+ <adminhtml_mobile_editqueue>
61
+ <reference name="content">
62
+ <block type="xmlconnect/adminhtml_queue_edit" name="queue_edit"/>
63
+ </reference>
64
+ </adminhtml_mobile_editqueue>
65
+
66
+ <adminhtml_mobile_queuemessage>
67
+ <reference name="content">
68
+ <block type="xmlconnect/adminhtml_queue_edit" name="queue_edit"/>
69
+ </reference>
70
+ </adminhtml_mobile_queuemessage>
71
+
72
+ <adminhtml_mobile_edittemplate>
73
+ <reference name="head">
74
+ <action method="setCanLoadExtJs"><flag>1</flag></action>
75
+ <action method="addJs"><script>mage/adminhtml/variables.js</script></action>
76
+ <action method="addJs"><script>mage/adminhtml/wysiwyg/widget.js</script></action>
77
+ <action method="addJs"><script>lib/flex.js</script></action>
78
+ <action method="addJs"><script>lib/FABridge.js</script></action>
79
+ <action method="addJs"><script>mage/adminhtml/flexuploader.js</script></action>
80
+ <action method="addJs"><script>mage/adminhtml/browser.js</script></action>
81
+ <action method="addJs"><script>prototype/window.js</script></action>
82
+ <action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
83
+ <action method="addCss"><name>lib/prototype/windows/themes/magento.css</name></action>
84
+ </reference>
85
+ <reference name="content">
86
+ <block type="xmlconnect/adminhtml_template_edit" name="template_edit"/>
87
+ </reference>
88
+ </adminhtml_mobile_edittemplate>
89
+
90
+ <adminhtml_mobile_new>
91
+ <reference name="left">
92
+ <block type="xmlconnect/adminhtml_mobile_edit_tabs" name="mobile_edit_tabs" />
93
+ </reference>
94
+ <reference name="content">
95
+ <block type="xmlconnect/adminhtml_mobile_edit" name="mobile_edit_content"/>
96
+ </reference>
97
+ </adminhtml_mobile_new>
98
+
99
+ <adminhtml_mobile_edit>
100
+ <reference name="left">
101
+ <block type="xmlconnect/adminhtml_mobile_edit_tabs" name="mobile_edit_tabs">
102
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_general" name="mobile_edit_tab_general"/>
103
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_design" name="mobile_edit_tab_design">
104
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_design_accordion" name="mobile_edit_tab_design_accordion" as="design_accordion">
105
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_design_accordion_images" name="accordion_images" />
106
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_design_accordion_themes" name="accordion_themes" />
107
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_design_accordion_tabs" name="accordion_tabs" />
108
+
109
+ <action method="addAccordionItem"><name>images</name><block>accordion_images</block></action>
110
+ <action method="addAccordionItem"><name>themes</name><block>accordion_themes</block></action>
111
+ <action method="addAccordionItem"><name>tabs</name><block>accordion_tabs</block></action>
112
+
113
+ </block>
114
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_design_preview" name="mobile_edit_tab_design_preview" as="app_preview" />
115
+ </block>
116
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_content" name="mobile_edit_tab_content"/>
117
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_payment" name="mobile_edit_tab_payment"/>
118
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_flurryanalytics" name="mobile_edit_tab_flurryanalytics"/>
119
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_submission_history" name="mobile_edit_tab_submission_history_grid"/>
120
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_cache" name="mobile_edit_tab_cache"/>
121
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_social" name="mobile_edit_tab_social" />
122
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_notification" name="mobile_edit_tab_notification">
123
+ <block type="core/template" name="mobile_edit_tab_notification_helper" as="app_notification_helper" template="xmlconnect/mobile/notification_helper.phtml" />
124
+ </block>
125
+
126
+ <action method="addTab"><id>general_section</id><block>mobile_edit_tab_general</block></action>
127
+ <action method="addTab"><id>design_section</id><block>mobile_edit_tab_design</block></action>
128
+ <action method="addTab"><id>content_section</id><block>mobile_edit_tab_content</block></action>
129
+ <action method="addTab"><id>payment_methods</id><block>mobile_edit_tab_payment</block></action>
130
+ <action method="addTab"><id>flurryanalytics_section</id><block>mobile_edit_tab_flurryanalytics</block></action>
131
+ <action method="addTab"><id>history_grid</id><block>mobile_edit_tab_submission_history_grid</block></action>
132
+ <action method="addTab"><id>cache_section</id><block>mobile_edit_tab_cache</block></action>
133
+ <action method="addTab"><id>social_section</id><block>mobile_edit_tab_social</block></action>
134
+ <action method="addTab"><id>notification_section</id><block>mobile_edit_tab_notification</block></action>
135
+ </block>
136
+ </reference>
137
+ <reference name="content">
138
+ <block type="xmlconnect/adminhtml_mobile_edit" name="mobile_edit_content"/>
139
+ </reference>
140
+ <reference name="head">
141
+ <action method="addCss"><name>xmlconnect/dropdown.css</name></action>
142
+ <action method="addCss"><name>xmlconnect/styles.css</name></action>
143
+ </reference>
144
+ </adminhtml_mobile_edit>
145
+
146
+ <adminhtml_mobile_submissionhistorygrid>
147
+ <remove name="root"/>
148
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_submission_history" name="submission_history_grid" output="toHtml"/>
149
+ </adminhtml_mobile_submissionhistorygrid>
150
+
151
+ <adminhtml_mobile_submission>
152
+ <reference name="left">
153
+ <block type="xmlconnect/adminhtml_mobile_submission_tabs" name="mobile_submission_tabs">
154
+ <block type="xmlconnect/adminhtml_mobile_submission_tab_container" name="mobile_submission_tab_container">
155
+ <block type="xmlconnect/adminhtml_mobile_submission_tab_container_submission" name="mobile_submission_tab_container_submission" as="edit_form"/>
156
+ <block type="xmlconnect/adminhtml_mobile_edit_tab_design_preview" name="mobile_edit_tab_design_preview" as="app_preview" />
157
+ </block>
158
+ <action method="addTab"><id>submission_section</id><block>mobile_submission_tab_container</block></action>
159
+ </block>
160
+ </reference>
161
+ <reference name="content">
162
+ <block type="xmlconnect/adminhtml_mobile_submission" name="mobile_submission_content"/>
163
+ </reference>
164
+ <reference name="head">
165
+ <action method="addCss"><name>xmlconnect/styles.css</name></action>
166
+ </reference>
167
+ </adminhtml_mobile_submission>
168
+
169
+ <adminhtml_mobile_grid>
170
+ <block type="xmlconnect/adminhtml_mobile_grid" name="mobile_grid" output="toHtml"/>
171
+ </adminhtml_mobile_grid>
172
+
173
+ <adminhtml_mobile_history_grid>
174
+ <block type="xmlconnect/adminhtml_history_grid" name="history_grid" output="toHtml"/>
175
+ </adminhtml_mobile_history_grid>
176
+
177
+ <adminhtml_mobile_template_preview>
178
+ <block type="core/template" name="root" output="toHtml" template="xmlconnect/template/preview.phtml">
179
+ <block type="xmlconnect/adminhtml_template_preview" name="content" as="content"></block>
180
+ </block>
181
+ </adminhtml_mobile_template_preview>
182
+
183
+ <adminhtml_mobile_previewhome>
184
+ <block type="core/text_list" name="root" output="toHtml">
185
+ <block type="xmlconnect/adminhtml_mobile_preview_content" name="preview_home_content">
186
+ <action method="setTemplate"><templateType>home</templateType></action>
187
+ <block type="xmlconnect/adminhtml_mobile_preview_tabitems" name="preview_tab_items" as="tab_items">
188
+ <action method="setActiveTab"><tab>home</tab></action>
189
+ </block>
190
+ </block>
191
+ </block>
192
+ </adminhtml_mobile_previewhome>
193
+
194
+ <adminhtml_mobile_previewhomehor>
195
+ <block type="core/text_list" name="root" output="toHtml">
196
+ <block type="xmlconnect/adminhtml_mobile_preview_content" name="preview_home_hor_content">
197
+ <action method="setTemplate"><templateType>home_hor</templateType></action>
198
+ <block type="xmlconnect/adminhtml_mobile_preview_tabitems" name="preview_tab_items" as="tab_items">
199
+ <action method="setActiveTab"><tab>home</tab></action>
200
+ </block>
201
+ </block>
202
+ </block>
203
+ </adminhtml_mobile_previewhomehor>
204
+
205
+ <adminhtml_mobile_previewcataloghor>
206
+ <block type="core/text_list" name="root" output="toHtml">
207
+ <block type="xmlconnect/adminhtml_mobile_preview_content" name="preview_catalog_hor_content">
208
+ <action method="setTemplate"><templateType>catalog_hor</templateType></action>
209
+ <block type="xmlconnect/adminhtml_mobile_preview_tabitems" name="preview_tab_items" as="tab_items">
210
+ <action method="setActiveTab"><tab>shop</tab></action>
211
+ </block>
212
+ </block>
213
+ </block>
214
+ </adminhtml_mobile_previewcataloghor>
215
+
216
+ <adminhtml_mobile_previewcatalog>
217
+ <block type="core/text_list" name="root" output="toHtml">
218
+ <block type="xmlconnect/adminhtml_mobile_preview_content" name="preview_catalog_content">
219
+ <action method="setTemplate"><templateType>catalog</templateType></action>
220
+ <block type="xmlconnect/adminhtml_mobile_preview_tabitems" name="preview_tab_items" as="tab_items">
221
+ <action method="setActiveTab"><tab>shop</tab></action>
222
+ </block>
223
+ </block>
224
+ </block>
225
+ </adminhtml_mobile_previewcatalog>
226
+
227
+ <adminhtml_mobile_previewproductinfo>
228
+ <block type="core/text_list" name="root" output="toHtml">
229
+ <block type="xmlconnect/adminhtml_mobile_preview_content" name="preview_productinfo_content">
230
+ <action method="setTemplate"><templateType>productinfo</templateType></action>
231
+ <block type="xmlconnect/adminhtml_mobile_preview_tabitems" name="preview_tab_items" as="tab_items">
232
+ <action method="setActiveTab"><tab>shop</tab></action>
233
+ </block>
234
+ </block>
235
+ </block>
236
+ </adminhtml_mobile_previewproductinfo>
237
+ </layout>
app/design/adminhtml/default/default/locale/en_US/translate.csv ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Credit Card Type","Credit Card Type"
2
+ "Add New User","Add New User"
3
+ "Items that you don","Items that you don"
4
+ "State/Province","State/Province"
5
+ "Magento Commerce - Administrative Panel","Magento Commerce - Administrative Panel"
6
+ "3 stars","3 stars"
7
+ "Credit Memo Date","Credit Memo Date"
8
+ "Double click on a group to rename it","Double click on a group to rename it"
9
+ "Rating Not Available","Rating Not Available"
10
+ "Gift Certificate","Gift Certificate"
11
+ "Assigned Answers","Assigned Answers"
12
+ "Fax","Fax"
13
+ "Magento Admin","Magento Admin"
14
+ "Newsletter Message Preview","Newsletter Message Preview"
15
+ "4 stars","4 stars"
16
+ "Company","Company"
17
+ "Invoice Date","Invoice Date"
18
+ "Qty Returned","Qty Returned"
19
+ "Add New Customer Group","Add New Customer Group"
20
+ "Visitors","Visitors"
21
+ "Shipping Method","Shipping Method"
22
+ "Subtotal","Subtotal"
23
+ "5 stars","5 stars"
24
+ "Choose Store","Choose Store"
25
+ "Import Tax Rates","Import Tax Rates"
26
+ "Roles","Roles"
27
+ "If you do not specify an option value for a store then the default value will be used.","If you do not specify an option value for a store then the default value will be used."
28
+ "Shipping","Shipping"
29
+ "Select from existing customer addresses:","Select from existing customer addresses:"
30
+ "Products","Products"
31
+ "Edit User ","Edit User "
32
+ "Item Status","Item Status"
33
+ "Set as default billing address","Set as default billing address"
34
+ "Position","Position"
35
+ "Items Ordered","Items Ordered"
36
+ "Fixed","Fixed"
37
+ "%s","%s"
38
+ "Same as Billing Address","Same as Billing Address"
39
+ "Product In Stores","Product In Stores"
40
+ "Working...","Working..."
41
+ "Apply coupon code","Apply coupon code"
42
+ "per page","per page"
43
+ "Tax","Tax"
44
+ "Telephone","Telephone"
45
+ "Wishlist","Wishlist"
46
+ "Magento","Magento"
47
+ "Expiration Date","Expiration Date"
48
+ "Add New Class","Add New Class"
49
+ "Super product attributes configuration","Super product attributes configuration"
50
+ "Previus page","Previus page"
51
+ "Something went wrong...","Something went wrong..."
52
+ "Lifetime Sales","Lifetime Sales"
53
+ "SKU","SKU"
54
+ "Log Out","Log Out"
55
+ "Failed","Failed"
56
+ "Billing Address","Billing Address"
57
+ "Log into Magento Admin Page","Log into Magento Admin Page"
58
+ "Invoice Status","Invoice Status"
59
+ "CC Type","CC Type"
60
+ "Percentage","Percentage"
61
+ "Are you sure?","Are you sure?"
62
+ "Email","Email"
63
+ "Customer Group:","Customer Group:"
64
+ "Option","Option"
65
+ "Primary Billing Address","Primary Billing Address"
66
+ "Create Backup","Create Backup"
67
+ "Manage Options (values for your attribute)","Manage Options (values for your attribute)"
68
+ "Total Due","Total Due"
69
+ "Copyright 2007","Copyright 2007"
70
+ "Newsletter Subscribers","Newsletter Subscribers"
71
+ "CC Number","CC Number"
72
+ "Add New Tax Rate","Add New Tax Rate"
73
+ "Product Name","Product Name"
74
+ "Country","Country"
75
+ "Purchase order number","Purchase order number"
76
+ "Date and Time","Date and Time"
77
+ "Categories","Categories"
78
+ "Qty Cancelled","Qty Cancelled"
79
+ "Card Verification Number","Card Verification Number"
80
+ "Order Date","Order Date"
81
+ "This tab contains invalid data. Please correct before saving.","This tab contains invalid data. Please correct before saving."
82
+ "Customer Balance","Customer Balance"
83
+ "Update Qty","Update Qty"
84
+ "Customer Groups","Customer Groups"
85
+ "Export to","Export to"
86
+ "configuration","configuration"
87
+ "Sorry, no quotes are available for this order at this time.","Sorry, no quotes are available for this order at this time."
88
+ "Options","Options"
89
+ "Attribute Name","Attribute Name"
90
+ "Total <strong>%d</strong> records found","Total <strong>%d</strong> records found"
91
+ "Comment","Comment"
92
+ "Set as default shipping address","Set as default shipping address"
93
+ "Last Name","Last Name"
94
+ "of","of"
95
+ "Newsletter Problem Reports","Newsletter Problem Reports"
96
+ "Sales Statistics","Sales Statistics"
97
+ "Qty To Return","Qty To Return"
98
+ "New Customer Address","New Customer Address"
99
+ "Roles Resources","Roles Resources"
100
+ "Zip/Post Code","Zip/Post Code"
101
+ "Order Status","Order Status"
102
+ "Store","Store"
103
+ "Product Categories","Product Categories"
104
+ "Online Customers","Online Customers"
105
+ "Next page","Next page"
106
+ "Items Shipped","Items Shipped"
107
+ "Unassigned Attributes","Unassigned Attributes"
108
+ "Not Charged Yet","Not Charged Yet"
109
+ "This group contains system attributes.\nPlease, move system attributes to another group and try again.","This group contains system attributes.\nPlease, move system attributes to another group and try again."
110
+ "copy data from","copy data from"
111
+ "Add","Add"
112
+ "Total Payed","Total Payed"
113
+ "Shopping Cart","Shopping Cart"
114
+ "Order History","Order History"
115
+ "Empty","Empty"
116
+ "Unable to complete request. Please, try again later.","Unable to complete request. Please, try again later."
117
+ "Customers","Customers"
118
+ "Customer does not have any addresses","Customer does not have any addresses"
119
+ "Add New Role","Add New Role"
120
+ "Street Address","Street Address"
121
+ "Are You Sure?","Are You Sure?"
122
+ "Shipping Address","Shipping Address"
123
+ "Paid","Paid"
124
+ "Page","Page"
125
+ "Discount","Discount"
126
+ "Set root category for this store in","Set root category for this store in"
127
+ "Groups","Groups"
128
+ "View","View"
129
+ "Qty Ordered","Qty Ordered"
130
+ "Global Record Search","Global Record Search"
131
+ "Card Number","Card Number"
132
+ "PO Number","PO Number"
133
+ "Grand Total","Grand Total"
134
+ "Please select one or more attributes.","Please select one or more attributes."
135
+ "Dashboard","Dashboard"
136
+ "Are you sure you want to do this?","Are you sure you want to do this?"
137
+ "Please add one or more options","Please add one or more options"
138
+ "Role Users","Role Users"
139
+ "Add New Tax Rule","Add New Tax Rule"
140
+ "Subscribe to newsletter","Subscribe to newsletter"
141
+ "Dashboard Control","Dashboard Control"
142
+ "Default Shipping","Default Shipping"
143
+ "Qty","Qty"
144
+ "Add to Queue","Add to Queue"
145
+ "Average Sale","Average Sale"
146
+ "Cancel","Cancel"
147
+ "All stores","All stores"
148
+ "Personal Information","Personal Information"
149
+ "City","City"
150
+ "Export Tax Rates","Export Tax Rates"
151
+ "1 star","1 star"
152
+ "Current Configuration Scope","Current Configuration Scope"
153
+ "Add New Template","Add New Template"
154
+ "Move to:","Move to:"
155
+ "First Name","First Name"
156
+ "Change Order Status","Change Order Status"
157
+ "Are you sure you want to delete this address?","Are you sure you want to delete this address?"
158
+ "Are you sure you want to do it?","Are you sure you want to do it?"
159
+ "Add to Order","Add to Order"
160
+ "Product ID","Product ID"
161
+ "Payment Method","Payment Method"
162
+ "What is this?","What is this?"
163
+ "Users","Users"
164
+ "Customer Addresses","Customer Addresses"
165
+ "Qty Backordered","Qty Backordered"
166
+ "You can not remove system attribute from this set.","You can not remove system attribute from this set."
167
+ "Price","Price"
168
+ "Who","Who"
169
+ "Rating Not Alvailable","Rating Not Alvailable"
170
+ "Order Comment","Order Comment"
171
+ "Edit Role","Edit Role"
172
+ "Tax Rates Import / Export","Tax Rates Import / Export"
173
+ "Magento Logo","Magento Logo"
174
+ "A name is required","A name is required"
175
+ "Assigned options","Assigned options"
176
+ "Please Enter New Group Name","Please Enter New Group Name"
177
+ "Name","Name"
178
+ "Email Preview","Email Preview"
179
+ "Newsletter Queue","Newsletter Queue"
180
+ "Remove","Remove"
181
+ "Last Log In:","Last Log In:"
182
+ "Logged in as <strong>%s</strong>","Logged in as <strong>%s</strong>"
183
+ "Name on Card","Name on Card"
184
+ "All Stores","All Stores"
185
+ "Send comment to customer","Send comment to customer"
186
+ "Account Created on:","Account Created on:"
187
+ "Backups Control","Backups Control"
188
+ "Add New Address","Add New Address"
189
+ "Account Created in:","Account Created in:"
190
+ "Default Billing","Default Billing"
191
+ "Manage Titles (Size, Color, etc.)","Manage Titles (Size, Color, etc.)"
192
+ "Please confirm site switching. All data not saved will be lost.","Please confirm site switching. All data not saved will be lost."
193
+ "Please select from each ratings above","Please select from each ratings above"
194
+ "Qty Shipped","Qty Shipped"
195
+ "Are you sure you want to cancel add this address?","Are you sure you want to cancel add this address?"
196
+ "The information in this tab has been changed.","The information in this tab has been changed."
197
+ "2 stars","2 stars"
198
+ "Apply","Apply"
199
+ "Total","Total"
200
+ "User roles","User roles"
201
+ "Wishlist Report","Wishlist Report"
app/design/adminhtml/default/default/template/access_denied.phtml ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Adminhtml_Block_Denied
30
+ */
31
+ ?>
32
+ <h1 class="page-heading"><?php echo $this->helper('adminhtml')->__('Access denied') ?></h1>
33
+ <?php if (!$this->hasAvailaleResources()): ?>
34
+ <p>
35
+ <?php echo $this->helper('adminhtml')->__('Please try to logout and sign in again.') ?><br/>
36
+ <?php echo $this->helper('adminhtml')->__('If this message persists, please contact the store owner.') ?>
37
+ </p>
38
+ <?php else: ?>
39
+ <p><?php echo $this->helper('adminhtml')->__('Access denied.') ?></p>
40
+ <?php endif?>
app/design/adminhtml/default/default/template/api/role_users_grid_js.phtml ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ <!--
29
+ <?php $myBlock = $this->getLayout()->getBlock('roleUsersGrid'); ?>
30
+ <?php if( is_object($myBlock) && $myBlock->getJsObjectName() ): ?>
31
+ var checkBoxes = $H({});
32
+ var warning = false;
33
+ var inRoleUsers = $H(<?php echo $myBlock->_getUsers(true) ?>);
34
+ if (inRoleUsers.size() > 0) warning = true;
35
+ $('in_role_user').value = inRoleUsers.toQueryString();
36
+
37
+ function registerUserRole(grid, element, checked){
38
+ if(checked){
39
+ inRoleUsers.set(element.value, 0);
40
+ } else {
41
+ inRoleUsers.unset(element.value);
42
+ }
43
+ $('in_role_user').value = inRoleUsers.toQueryString();
44
+ grid.reloadParams = {'in_role_user[]':inRoleUsers.keys()};
45
+ }
46
+
47
+ function roleUsersRowClick(grid, event){
48
+ var trElement = Event.findElement(event, 'tr');
49
+ var isInput = Event.element(event).tagName == 'INPUT';
50
+ if(trElement){
51
+ var checkbox = Element.getElementsBySelector(trElement, 'input');
52
+ if(checkbox[0]){
53
+ var checked = isInput ? checkbox[0].checked : !checkbox[0].checked;
54
+ if (warning && checkBoxes.size() > 0) {
55
+ if ( !confirm("<?php echo $this->__('Warning!\r\nThis action will remove this user from already assigned role\r\nAre you sure?') ?>") ) {
56
+ checkbox[0].checked = false;
57
+ checkBoxes.each(function(elem) {
58
+ if (elem.value.status == 1) {
59
+ elem.value.object.checked = true;
60
+ }
61
+ });
62
+ return false;
63
+ }
64
+ warning = false;
65
+ }
66
+ <?php echo $myBlock->getJsObjectName() ?>.setCheckboxChecked(checkbox[0], checked);
67
+ }
68
+ }
69
+ }
70
+
71
+ function roleUsersRowInit(grid, row){
72
+ var checkbox = $(row).getElementsByClassName('checkbox')[0];
73
+ if (checkbox) {
74
+ checkBoxes.set(checkbox.value, {'status' : ((checkbox.checked) ? 1 : 0), 'object' : checkbox});
75
+ }
76
+ }
77
+
78
+ function myhandler(obj)
79
+ {
80
+ if (checkBoxes.size() > 0) {
81
+ if ( !confirm("<?php echo $this->__('Warning!\r\nThis action will remove those users from already assigned roles\r\nAre you sure?') ?>") ) {
82
+ obj.checked = false;
83
+ checkBoxes.each(function(elem) {
84
+ if (elem.value.status == 1) {
85
+ elem.value.object.checked = true;
86
+ }
87
+ });
88
+ return false;
89
+ }
90
+ warning = false;
91
+ }
92
+ checkBoxes.each(function(elem) {
93
+ <?php echo $myBlock->getJsObjectName() ?>.setCheckboxChecked(elem.value.object, obj.checked);
94
+ });
95
+ }
96
+
97
+ <?php echo $myBlock->getJsObjectName() ?>.rowClickCallback = roleUsersRowClick;
98
+ <?php echo $myBlock->getJsObjectName() ?>.initRowCallback = roleUsersRowInit;
99
+ <?php echo $myBlock->getJsObjectName() ?>.checkboxCheckCallback = registerUserRole;
100
+ <?php echo $myBlock->getJsObjectName() ?>.checkCheckboxes = myhandler;
101
+ <?php echo $myBlock->getJsObjectName() ?>.rows.each(function(row){roleUsersRowInit(<?php echo $myBlock->getJsObjectName() ?>, row)});
102
+ $('in_role_user_old').value = $('in_role_user').value;
103
+ <?php endif; ?>
104
+ //-->
105
+ </script>
app/design/adminhtml/default/default/template/api/roleinfo.phtml ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ /** @var $this Mage_Adminhtml_Block_Api_Tab_Roleinfo */
27
+
28
+ ?>
29
+ <div class="content-header">
30
+ <table cellspacing="0">
31
+ <tr>
32
+ <td style="width:50%;"><h3 class="icon-head head-permissions-role"><?php echo ($this->getRoleId() > 0 ) ? ($this->__('Edit Role') . " '{$this->escapeHtml($this->getRoleInfo()->getRoleName())}'") : $this->__('Add New Role') ?></h3></td>
33
+ <td class="form-buttons">
34
+ <?php echo $this->getBackButtonHtml() ?>
35
+ <?php echo $this->getResetButtonHtml() ?>
36
+ <?php echo $this->getDeleteButtonHtml() ?>
37
+ <?php echo $this->getSaveButtonHtml() ?>
38
+ </td>
39
+ </tr>
40
+ </table>
41
+ </div>
42
+ <form action="<?php echo $this->getUrl('*/*/saverole') ?>" method="post" id="role_edit_form">
43
+ <?php echo $this->getBlockHtml('formkey')?>
44
+ </form>
45
+ <script type="text/javascript">
46
+ var roleForm = new varienForm('role_edit_form');
47
+ </script>
app/design/adminhtml/default/default/template/api/roles.phtml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <table cellspacing="0">
29
+ <tr>
30
+ <td style="width:50%;"><h3 class="icon-head head-permissions-role"><?php echo $this->__('Roles') ?></h3></td>
31
+ <td class="form-buttons">
32
+ <button class="scalable add" onclick="window.location='<?php echo $this->getAddNewUrl() ?>'"><span><span><span><?php echo $this->__('Add New Role') ?></span></span></span></button>
33
+ </td>
34
+ </tr>
35
+ </table>
36
+ </div>
37
+ <?php echo $this->getGridHtml() ?>
app/design/adminhtml/default/default/template/api/rolesedit.phtml ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
28
+ <div class="entry-edit-head">
29
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__('Roles Resources') ?></h4>
30
+ </div>
31
+ <input type="hidden" name="resource" id="role_resources" value="">
32
+ <fieldset id="role_resources">
33
+
34
+ <span class="field-row">
35
+ <label for="all"><?php echo $this->__('Resource Access') ?></label>
36
+ <select id="all" name="all" onchange="$('resources_container').toggle()" class="select">
37
+ <option value="0" <?php echo ($this->getEverythingAllowed()?'':'selected="selected"'); ?>><?php echo $this->__('Custom') ?></option>
38
+ <option value="1" <?php echo ($this->getEverythingAllowed()?'selected="selected"':''); ?>><?php echo $this->__('All') ?></option>
39
+ </select>
40
+ </span>
41
+
42
+ <span class="field-row" id="resources_container">
43
+ <label><?php echo $this->__('Resources') ?></label>
44
+ <div class="f-left">
45
+ <div class="tree x-tree" id="resource-tree"></div>
46
+ </div>
47
+ </span>
48
+
49
+ </fieldset>
50
+ </div>
51
+ <!-- Draw Resources Tree -->
52
+ <script type="text/javascript">
53
+ <?php if($this->getEverythingAllowed()): ?>
54
+ $('resources_container').hide();
55
+ <?php endif; ?>
56
+ Ext.EventManager.onDocumentReady(function() {
57
+ var tree = new Ext.tree.TreePanel('resource-tree', {
58
+ animate:false,
59
+ loader: false,
60
+ enableDD:false,
61
+ containerScroll: true,
62
+ rootUIProvider: Ext.tree.CheckboxNodeUI,
63
+ selModel: new Ext.tree.CheckNodeMultiSelectionModel(),
64
+ rootVisible: false
65
+ });
66
+
67
+ tree.on('check', checkHandler, tree);
68
+
69
+ // set the root node
70
+ var root = new Ext.tree.TreeNode({
71
+ text: 'root',
72
+ draggable:false,
73
+ checked:'false',
74
+ id:'__root__',
75
+ uiProvider: Ext.tree.CheckboxNodeUI
76
+ });
77
+
78
+ tree.setRootNode(root);
79
+ bildResourcesTree(root, <?php echo $this->getResTreeJson() ?>);
80
+ tree.addListener('click', resourceClick.createDelegate(this));
81
+
82
+ // render the tree
83
+ tree.render();
84
+ // root.expand();
85
+ tree.expandAll();
86
+
87
+ $('role_resources').value = tree.getChecked().join(',');
88
+ });
89
+
90
+ function resourceClick(node, e){
91
+ node.getUI().check(!node.getUI().checked());
92
+ varienElementMethods.setHasChanges(Event.element(e), e);
93
+ };
94
+
95
+ function bildResourcesTree(parent, config){
96
+ if (!config) return null;
97
+
98
+ if (parent && config && config.length){
99
+ for (var i = 0; i < config.length; i++){
100
+ config[i].uiProvider = Ext.tree.CheckboxNodeUI;
101
+ var node = new Ext.tree.TreeNode(config[i]);
102
+ parent.appendChild(node);
103
+ if(config[i].children){
104
+ bildResourcesTree(node, config[i].children);
105
+ }
106
+ }
107
+ }
108
+ }
109
+
110
+ function checkHandler(node)
111
+ {
112
+ if ( node.attributes.checked && node.parentNode ) {
113
+ var n = node.parentNode;
114
+ this.removeListener('check', checkHandler);
115
+ do {
116
+ if (!n || n.attributes.id == 'admin' || n.attributes.id == '__root__') {
117
+ break;
118
+ } else {
119
+ n.ui.check(true);
120
+ }
121
+ } while (n = n.parentNode );
122
+ this.on('check', checkHandler);
123
+ }
124
+ if ( !node.isLeaf() && node.hasChildNodes() ) {
125
+ this.removeListener('check', checkHandler);
126
+ processChildren(node, node.attributes.checked);
127
+ this.on('check', checkHandler);
128
+ }
129
+ $('role_resources').value = this.getChecked().join(',');
130
+ }
131
+
132
+ function processChildren(node, state)
133
+ {
134
+ if ( !node.hasChildNodes() ) return false;
135
+ for(var i = 0; i < node.childNodes.length; i++ ) {
136
+ node.childNodes[i].ui.check(state);
137
+ if ( node.childNodes[i].hasChildNodes() ) {
138
+ processChildren(node.childNodes[i], state);
139
+ }
140
+ }
141
+ return true;
142
+ }
143
+ </script>
app/design/adminhtml/default/default/template/api/rolesusers.phtml ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__('Role Users') ?></h4>
28
+ <?php echo $this->_getGridHtml() ?>
app/design/adminhtml/default/default/template/api/user_roles_grid_js.phtml ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ <!--
29
+ <?php $myBlock = $this->getLayout()->getBlock('user.roles.grid'); ?>
30
+ <?php if( is_object($myBlock) && $myBlock->getJsObjectName()): ?>
31
+ var radioBoxes = $H({});
32
+ var warning = false;
33
+ var userRoles = $H(<?php echo $myBlock->_getSelectedRoles(true) ?>);
34
+ if (userRoles.size() > 0) warning = true;
35
+ $('user_user_roles').value = userRoles.toQueryString();
36
+
37
+ function registerUserRole(grid, element, checked){
38
+ if(checked){
39
+ userRoles.each(function(o){userRoles.remove(o[0]);});
40
+ userRoles[element.value] = 0;
41
+ } else {
42
+ userRoles.remove(element.value);
43
+ }
44
+ $('user_user_roles').value = userRoles.toQueryString();
45
+ grid.reloadParams = {'user_roles[]':userRoles.keys()};
46
+ }
47
+
48
+ function roleRowClick(grid, event){
49
+ var trElement = Event.findElement(event, 'tr');
50
+ var isInput = Event.element(event).tagName == 'INPUT';
51
+ if(trElement){
52
+ var checkbox = Element.getElementsBySelector(trElement, 'input');
53
+ if(checkbox[0] && !checkbox[0].checked){
54
+ var checked = isInput ? checkbox[0].checked : !checkbox[0].checked;
55
+ if (checked && warning && radioBoxes.size() > 0) {
56
+ if ( !confirm("<?php echo $this->__('Warning!\r\nThis action will remove this user from already assigned role\r\nAre you sure?') ?>") ) {
57
+ checkbox[0].checked = false;
58
+ for(i in radioBoxes) {
59
+ if( radioBoxes[i].status == 1) {
60
+ radioBoxes[i].object.checked = true;
61
+ }
62
+ }
63
+ return false;
64
+ }
65
+ warning = false;
66
+ }
67
+ <?php echo $myBlock->getJsObjectName() ?>.setCheckboxChecked(checkbox[0], checked);
68
+ }
69
+ }
70
+ }
71
+
72
+ function rolesRowInit(grid, row){
73
+ var checkbox = $(row).getElementsByClassName('radio')[0];
74
+ if (checkbox) {
75
+ radioBoxes[checkbox.value] = {'status' : ((checkbox.checked) ? 1 : 0), 'object' : checkbox};
76
+ }
77
+ }
78
+
79
+ <?php echo $myBlock->getJsObjectName() ?>.rowClickCallback = roleRowClick;
80
+ <?php echo $myBlock->getJsObjectName() ?>.initRowCallback = rolesRowInit;
81
+ <?php echo $myBlock->getJsObjectName() ?>.checkboxCheckCallback = registerUserRole;
82
+ <?php echo $myBlock->getJsObjectName() ?>.rows.each(function(row){rolesRowInit(<?php echo $myBlock->getJsObjectName() ?>, row)});
83
+ <?php endif; ?>
84
+ //-->
85
+ </script>
app/design/adminhtml/default/default/template/api/userinfo.phtml ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <table cellspacing="0">
29
+ <tr>
30
+ <td style="width:50%;">
31
+ <h3>
32
+ <?php if($this->getUser()->getUserId()): ?>
33
+ <?php $_userName = $this->getUser()->getFirstname() . ' ' . $this->getUser()->getLastname() ?>
34
+ <?php echo $this->__("Edit User '%s'", $_userName) ?>
35
+ <?php else: ?>
36
+ <?php echo $this->__('Add New User') ?>
37
+ <?php endif; ?>
38
+ </h3>
39
+ </td>
40
+ <td class="form-buttons">
41
+ <?php echo $this->getBackButtonHtml() ?>
42
+ <?php echo $this->getResetButtonHtml() ?>
43
+ <?php echo $this->getDeleteButtonHtml() ?>
44
+ <?php echo $this->getSaveButtonHtml() ?>
45
+ </table>
46
+ </div>
47
+ <form action="<?php echo $this->getUrl('*/*/saveuser') ?>" method="post" id="user_edit_form">
48
+ <?php echo $this->getBlockHtml('formkey')?>
49
+ </form>
50
+ <script type="text/javascript">
51
+ var userForm = new varienForm('user_edit_form');
52
+ </script>
app/design/adminhtml/default/default/template/api/usernroles.phtml ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div id="roles">
28
+ <li class="add"><a href="<?php echo $this->getUrl('*/*/edituser') ?>"><?php echo $this->__('Add New User') ?></a></li>
29
+ <li class="add"><a href="<?php echo $this->getUrl('*/*/editroles') ?>"><?php echo $this->__('Add New Role') ?></a></li>
30
+ </div>
31
+ <div class="clear"></div>
app/design/adminhtml/default/default/template/api/userroles.phtml ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
28
+ <div class="entry-edit-head">
29
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__('User Roles') ?></h4>
30
+ </div>
31
+ <fieldset id="user_roles">
32
+ <?php foreach ($roles as $role): ?>
33
+ <?php
34
+ $checked = false;
35
+ foreach( $user_roles->getItems() as $user_role )
36
+ {
37
+ if( $user_role->getParentId() == $role->getRoleId() ) {
38
+ $checked = true;
39
+ }
40
+ }
41
+ ?>
42
+ <input type="checkbox" value="<?php echo $role->getRoleId(); ?>" <?php echo ($checked ? "checked" : ""); ?> name="roles[]" id="_<?php echo $role->getRoleId(); ?>" /> <label for="_<?php echo $role->getRoleId(); ?>" class="normal"><?php echo $role->getRoleName(); ?></label><br />
43
+ <?php endforeach; ?>
44
+ </fieldset>
45
+ </div>
app/design/adminhtml/default/default/template/api/users.phtml ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <table cellspacing="0">
29
+ <tr>
30
+ <td style="width:50%;"><h3><?php echo $this->__('Users') ?></h3></td>
31
+ <td class="a-right">
32
+ <button class="scalable add" onclick="window.location='<?php echo $this->getAddNewUrl() ?>'"><span><span><span><?php echo $this->__('Add New User') ?></span></span></span></button>
33
+ </td>
34
+ </tr>
35
+ </table>
36
+ </div>
37
+ <div>
38
+ <?php echo $this->getGridHtml() ?>
39
+ </div>
40
+
app/design/adminhtml/default/default/template/api2/attribute/buttons.phtml ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ /** @var $this Mage_Api2_Block_Adminhtml_Attribute_Buttons */
27
+
28
+ ?>
29
+ <div class="content-header">
30
+ <table cellspacing="0">
31
+ <tr>
32
+ <td style="width:50%;">
33
+ <h3 class="icon-head head-permissions-role">
34
+ <?php echo $this->getCaption() ?>
35
+ </h3>
36
+ </td>
37
+ <td class="form-buttons">
38
+ <?php echo $this->getBackButtonHtml() ?>
39
+ <?php echo $this->getResetButtonHtml() ?>
40
+ <?php echo $this->getDeleteButtonHtml() ?>
41
+ <?php echo $this->getSaveButtonHtml() ?>
42
+ </td>
43
+ </tr>
44
+ </table>
45
+ </div>
46
+ <form action="<?php echo $this->getUrl('*/*/save') ?>" method="post" id="role_edit_form">
47
+ <?php echo $this->getBlockHtml('formkey')?>
48
+ </form>
49
+ <script type="text/javascript">
50
+ //<![CDATA[
51
+ var roleForm = new varienForm('role_edit_form');
52
+ //]]>
53
+ </script>
app/design/adminhtml/default/default/template/api2/attribute/resource.phtml ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ * @see Mage_Api2_Block_Adminhtml_Attribute_Tab_Resource
31
+ */
32
+ ?>
33
+
34
+ <?php echo $this->getChildHtml(); ?>
35
+
36
+ <div class="entry-edit">
37
+ <div class="entry-edit-head">
38
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__('User Type Resources') ?></h4>
39
+ </div>
40
+ <input type="hidden" name="resource" id="role_resources" value="" />
41
+ <fieldset id="role_resources">
42
+
43
+ <span class="field-row">
44
+ <label for="all"><?php echo $this->__('Resource Access') ?></label>
45
+ <select id="all" name="all" onchange="$('resources_container').toggle()" class="select">
46
+ <option value="0" <?php echo ($this->getEverythingAllowed()?'':'selected'); ?>><?php echo $this->__('Custom') ?></option>
47
+ <option value="1" <?php echo ($this->getEverythingAllowed()?'selected':''); ?>><?php echo $this->__('All') ?></option>
48
+ </select>
49
+ </span>
50
+
51
+ <span class="field-row" id="resources_container">
52
+ <label><?php echo $this->__('Resources') ?></label>
53
+ <div class="f-left">
54
+ <div class="tree x-tree" id="resource-tree"></div>
55
+ </div>
56
+ <?php if ($this->hasEntityOnlyAttributes()): ?>
57
+ <div class="clear"></div>
58
+ <span>* This attribute data will be returned for a single resource only.</span>
59
+ <?php endif; ?>
60
+ </span>
61
+
62
+ </fieldset>
63
+ </div>
64
+ <!-- Draw Resources Tree -->
65
+ <script type="text/javascript">
66
+ //<![CDATA[
67
+ <?php if($this->getEverythingAllowed()): ?>
68
+ $('resources_container').hide();
69
+ <?php endif; ?>
70
+ Ext.EventManager.onDocumentReady(function() {
71
+ var tree = new Ext.tree.TreePanel('resource-tree', {
72
+ animate:false,
73
+ loader: false,
74
+ enableDD:false,
75
+ containerScroll: true,
76
+ rootUIProvider: Ext.tree.CheckboxNodeUI,
77
+ selModel: new Ext.tree.CheckNodeMultiSelectionModel(),
78
+ rootVisible: false
79
+ });
80
+
81
+ tree.on('check', checkHandler, tree);
82
+
83
+ // set the root node
84
+ var root = new Ext.tree.TreeNode({
85
+ text: 'root',
86
+ draggable:false,
87
+ checked:'false',
88
+ id:'__root__',
89
+ uiProvider: Ext.tree.CheckboxNodeUI
90
+ });
91
+
92
+ tree.setRootNode(root);
93
+ bildResourcesTree(root, <?php echo $this->getResTreeJson() ?>);
94
+ tree.addListener('click', resourceClick.createDelegate(this));
95
+
96
+ // render the tree
97
+ tree.render();
98
+ // root.expand();
99
+ tree.expandAll();
100
+
101
+ $('role_resources').value = tree.getChecked().join(',');
102
+ });
103
+
104
+ function resourceClick(node, e){
105
+ node.getUI().check(!node.getUI().checked());
106
+ varienElementMethods.setHasChanges(Event.element(e), e);
107
+ };
108
+
109
+ function bildResourcesTree(parent, config){
110
+ if (!config) return null;
111
+
112
+ if (parent && config && config.length){
113
+ for (var i = 0; i < config.length; i++){
114
+ config[i].uiProvider = Ext.tree.CheckboxNodeUI;
115
+ var node = new Ext.tree.TreeNode(config[i]);
116
+ parent.appendChild(node);
117
+ if(config[i].children){
118
+ bildResourcesTree(node, config[i].children);
119
+ }
120
+ }
121
+ }
122
+ }
123
+
124
+ function checkHandler(node)
125
+ {
126
+ if ( node.attributes.checked && node.parentNode ) {
127
+ var n = node.parentNode;
128
+ this.removeListener('check', checkHandler);
129
+ do {
130
+ if (!n || n.attributes.id == 'admin' || n.attributes.id == '__root__') {
131
+ break;
132
+ } else {
133
+ n.ui.check(true);
134
+ }
135
+ } while (n = n.parentNode );
136
+ this.on('check', checkHandler);
137
+ }
138
+ if ( !node.isLeaf() && node.hasChildNodes() ) {
139
+ this.removeListener('check', checkHandler);
140
+ processChildren(node, node.attributes.checked);
141
+ this.on('check', checkHandler);
142
+ }
143
+ $('role_resources').value = this.getChecked().join(',');
144
+ }
145
+
146
+ function processChildren(node, state)
147
+ {
148
+ if ( !node.hasChildNodes() ) return false;
149
+ for(var i = 0; i < node.childNodes.length; i++ ) {
150
+ node.childNodes[i].ui.check(state);
151
+ if ( node.childNodes[i].hasChildNodes() ) {
152
+ processChildren(node.childNodes[i], state);
153
+ }
154
+ }
155
+ return true;
156
+ }
157
+ //]]>
158
+ </script>
app/design/adminhtml/default/default/template/api2/permissions/user/edit/tab/roles/js.phtml ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
29
+ //<![CDATA[
30
+ var activeRestRole = getActiveRestRole();
31
+
32
+ /* Retrieve current active rest role */
33
+ function getActiveRestRole() {
34
+ var role;
35
+ api2_roles_sectionJsObject.rows.each(function(row) {
36
+ var radiobox = $(row).getElementsByClassName('radio')[0];
37
+ if ('undefined' != typeof radiobox && radiobox.checked) {
38
+ role = radiobox;
39
+ }
40
+ });
41
+ return role;
42
+ }
43
+
44
+ /* Callback function for rest role row click */
45
+ function restRolesRowClick(grid, event) {
46
+ var newRestRole = getActiveRestRole();
47
+ if (newRestRole.value !== activeRestRole.value) {
48
+ if (!confirm("Warning!\r\nThis action will remove this user from already assigned role\r\nAre you sure?") ) {
49
+ newRestRole.checked = !newRestRole.checked;
50
+ activeRestRole.checked = true;
51
+ } else {
52
+ activeRestRole = newRestRole;
53
+ }
54
+ }
55
+ }
56
+
57
+ api2_roles_sectionJsObject.rowClickCallback = restRolesRowClick;
58
+ //]]>
59
+ </script>
app/design/adminhtml/default/default/template/api2/role/buttons.phtml ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /** @var $this Mage_Adminhtml_Block_Api_Tab_Roleinfo */ ?>
28
+ <div class="content-header">
29
+ <table cellspacing="0">
30
+ <tr>
31
+ <td style="width:50%;">
32
+ <h3 class="icon-head head-permissions-role">
33
+ <?php echo $this->getCaption() ?>
34
+ </h3>
35
+ </td>
36
+ <td class="form-buttons">
37
+ <?php echo $this->getBackButtonHtml() ?>
38
+ <?php echo $this->getResetButtonHtml() ?>
39
+ <?php echo $this->getDeleteButtonHtml() ?>
40
+ <?php echo $this->getSaveButtonHtml() ?>
41
+ </td>
42
+ </tr>
43
+ </table>
44
+ </div>
45
+ <form action="<?php echo $this->getUrl('*/*/save') ?>" method="post" id="role_edit_form">
46
+ <?php echo $this->getBlockHtml('formkey')?>
47
+ </form>
48
+ <script type="text/javascript">
49
+ //<![CDATA[
50
+ var roleForm = new varienForm('role_edit_form');
51
+ //]]>
52
+ </script>
app/design/adminhtml/default/default/template/api2/role/users_grid_js.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 default_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
+ <script type="text/javascript">
29
+ //<![CDATA[
30
+ <?php
31
+ /** @var $myBlock Mage_Api2_Block_Adminhtml_Roles_Tab_Users */
32
+ $myBlock = $this->getLayout()->getBlock('adminhtml.role.edit.tab.users');
33
+ $name = $myBlock->getJsObjectName();
34
+ ?>
35
+ <?php if (is_object($myBlock) && $name && !$myBlock->isHidden()): ?>
36
+ var checkBoxes = $H(<?php echo $myBlock->getUsers(true) ?>);
37
+ var warning = false;
38
+ if (checkBoxes.size() > 0) {
39
+ warning = true;
40
+ }
41
+ $('in_role_users').value = checkBoxes.toQueryString();
42
+
43
+ function registerUserRole(grid, element, checked)
44
+ {
45
+ if (checked) {
46
+ checkBoxes.set(element.value, 0);
47
+ } else {
48
+ checkBoxes.unset(element.value);
49
+ }
50
+ $('in_role_users').value = checkBoxes.toQueryString();
51
+ grid.reloadParams = {'in_role_users[]':checkBoxes.keys()};
52
+ }
53
+
54
+ function roleUsersRowClick(grid, event)
55
+ {
56
+ var trElement = Event.findElement(event, 'tr');
57
+ var isInput = Event.element(event).tagName == 'INPUT';
58
+ if (trElement) {
59
+ var checkbox = Element.getElementsBySelector(trElement, 'input');
60
+ if(checkbox[0]){
61
+ var checked = isInput ? checkbox[0].checked : !checkbox[0].checked;
62
+ if (checked) {
63
+ checkbox[0].checked = true;
64
+ if ( confirm("<?php echo $this->__('Warning!\r\nThis action will remove this user from already assigned role\r\nAre you sure?') ?>") ) {
65
+ checkBoxes.set(checkbox[0].value, checked);
66
+ varienElementMethods.setHasChanges(checkbox[0]);
67
+ } else {
68
+ checkbox[0].checked = false;
69
+ }
70
+ warning = false;
71
+ } else {
72
+ checkBoxes.unset(checkbox[0].value);
73
+ }
74
+
75
+ $('in_role_users').value = checkBoxes.toQueryString();
76
+ grid.reloadParams = {'in_role_user[]':checkBoxes.keys()};
77
+ }
78
+ }
79
+ }
80
+
81
+ function roleUsersRowInit(grid, row)
82
+ {
83
+ var checkbox = $(row).getElementsByClassName('checkbox')[0];
84
+ if (checkbox) {
85
+ if (checkbox.checked) {
86
+ checkBoxes.set(checkbox.value, checkbox.checked);
87
+ } else {
88
+ checkBoxes.unset(checkbox.value);
89
+ }
90
+
91
+ $('in_role_users').value = checkBoxes.toQueryString();
92
+ grid.reloadParams = {'in_role_user[]':checkBoxes.keys()};
93
+ }
94
+ }
95
+
96
+ function myhandler(o)
97
+ {
98
+ if (checkBoxes.size() > 0) {
99
+ if (!confirm("<?php echo $this->__('Warning!\r\nThis action will remove those users from already assigned roles\r\nAre you sure?') ?>") ) {
100
+ o.checked = !o.checked;
101
+ } else {
102
+ checkBoxes.each(function(el){
103
+ el.checked = o.checked;
104
+ });
105
+ return false;
106
+ }
107
+ warning = false;
108
+ }
109
+
110
+ $('in_role_users').value = checkBoxes.toQueryString();
111
+ //grid.reloadParams = {'in_role_user[]':checkBoxes.keys()};
112
+ }
113
+
114
+ <?php echo $name ?>.rowClickCallback = roleUsersRowClick;
115
+ <?php echo $name ?>.initRowCallback = roleUsersRowInit;
116
+ <?php echo $name ?>.checkboxCheckCallback = registerUserRole;
117
+ <?php echo $name ?>.checkCheckboxes = myhandler;
118
+ <?php echo $name ?>.rows.each(function(row){roleUsersRowInit(<?php echo $name ?>, row)});
119
+ $('in_role_users_old').value = $('in_role_users').value;
120
+ <?php endif; ?>
121
+ //]]>
122
+ </script>
app/design/adminhtml/default/default/template/authorizenet/directpost/iframe.phtml ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ * @var $this Mage_Authorizenet_Block_Directpost_Iframe
29
+ */
30
+ ?>
31
+ <?php
32
+ $_params = $this->getParams();
33
+ /* @var $_helper Mage_Authorizenet_Helper_Data */
34
+ $_helper = $this->helper('authorizenet');
35
+ ?>
36
+ <html>
37
+ <head>
38
+ <script type="text/javascript">
39
+ //<![CDATA[
40
+ <?php if (isset($_params['redirect'])): ?>
41
+ window.location="<?php echo $this->escapeUrl($_params['redirect']) ?>";
42
+ <?php endif; ?>
43
+ <?php if (isset($_params['redirect_parent'])): ?>
44
+ window.top.location="<?php echo $this->escapeUrl($_params['redirect_parent']) ?>";
45
+ <?php endif; ?>
46
+ <?php if (isset($_params['error_msg'])): ?>
47
+ window.top.directPostModel.showError(<?php echo $this->helper('core')->jsonEncode($_params['error_msg']) ?>);
48
+ <?php if (isset($_params['x_invoice_num'])): ?>
49
+ window.top.directPostModel.successUrl="<?php echo $_helper->getSuccessOrderUrl($_params) ?>";
50
+ <?php endif; ?>
51
+ <?php endif; ?>
52
+ //]]>
53
+ </script>
54
+ </head>
55
+ <body></body>
56
+ </html>
app/design/adminhtml/default/default/template/authorizenet/directpost/info.phtml ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ * @see Mage_Authorizenet_Block_Directpost_Form
29
+ */
30
+ ?>
31
+ <?php
32
+ $_form = $this;
33
+ $_code = $_form->getMethodCode();
34
+ $_method = $_form->getMethod();
35
+ $_controller = $this->helper('authorizenet')->getControllerName();
36
+ $_orderUrl = $this->helper('authorizenet')->getPlaceOrderAdminUrl();
37
+ ?>
38
+ <!-- IFRAME for request to our server -->
39
+ <iframe id="order-directpost-iframe" allowtransparency="true" frameborder="0" name="iframeSubmitOrder" style="display:none;width:100%;background-color:transparent" src="<?php echo $this->getJsUrl() ?>blank.html"></iframe>
40
+ <!-- IFRAME for request to Authorize.net -->
41
+ <iframe id="directpost-iframe" allowtransparency="true" frameborder="0" name="iframeDirectPost" style="display:none;width:100%;background-color:transparent" src="<?php echo $this->getJsUrl() ?>blank.html"></iframe>
42
+ <ul id="payment_form_<?php echo $_code ?>" style="display:none;">
43
+ <li>
44
+ <div class="input-box">
45
+ <label for="<?php echo $_code ?>_cc_type"><?php echo Mage::helper('payment')->__('Credit Card Type') ?> <span class="required">*</span></label><br/>
46
+ <select id="<?php echo $_code ?>_cc_type" name="payment[cc_type]" class="required-entry validate-cc-type-select">
47
+ <?php $_ccType = $_form->getInfoData('cc_type') ?>
48
+ <option value=""></option>
49
+ <?php foreach ($_form->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
50
+ <option value="<?php echo $_typeCode ?>" <?php if($_typeCode==$_ccType): ?>selected="selected"<?php endif ?>><?php echo $_typeName ?></option>
51
+ <?php endforeach ?>
52
+ </select>
53
+ </div>
54
+ </li>
55
+ <li>
56
+ <div class="input-box">
57
+ <label for="<?php echo $_code ?>_cc_number"><?php echo Mage::helper('payment')->__('Credit Card Number') ?> <span class="required">*</span></label><br/>
58
+ <input type="text" id="<?php echo $_code ?>_cc_number" name="payment[cc_number]" title="<?php echo Mage::helper('payment')->__('Credit Card Number') ?>" class="input-text validate-cc-number" value="<?php echo $this->getInfoData('cc_number')?>" />
59
+ </div>
60
+ </li>
61
+ <li>
62
+ <div class="input-box">
63
+ <label for="<?php echo $_code ?>_expiration"><?php echo Mage::helper('payment')->__('Expiration Date') ?> <span class="required">*</span></label><br/>
64
+ <select id="<?php echo $_code ?>_expiration" style="width:140px;" name="payment[cc_exp_month]" class="validate-cc-exp required-entry">
65
+ <?php $_ccExpMonth = $_form->getInfoData('cc_exp_month') ?>
66
+ <?php foreach ($_form->getCcMonths() as $k=>$v): ?>
67
+ <option value="<?php echo $k ?>" <?php if($k==$_ccExpMonth): ?>selected="selected"<?php endif ?>><?php echo $v ?></option>
68
+ <?php endforeach ?>
69
+ </select>
70
+ <?php $_ccExpYear = $_form->getInfoData('cc_exp_year') ?>
71
+ <select id="<?php echo $_code ?>_expiration_yr" style="width:103px;" name="payment[cc_exp_year]" class="required-entry">
72
+ <?php foreach ($_form->getCcYears() as $k=>$v): ?>
73
+ <option value="<?php echo $k ? $k : '' ?>" <?php if($k==$_ccExpYear): ?>selected="selected"<?php endif ?>><?php echo $v ?></option>
74
+ <?php endforeach ?>
75
+ </select>
76
+ </div>
77
+ </li>
78
+ <?php if($_form->hasVerification()): ?>
79
+ <li>
80
+ <div class="input-box">
81
+ <label for="<?php echo $_code ?>_cc_cid"><?php echo Mage::helper('payment')->__('Card Verification Number') ?> <span class="required">*</span></label><br/>
82
+ <input type="text" title="<?php echo Mage::helper('payment')->__('Card Verification Number') ?>" class="required-entry input-text validate-cc-cvn" id="<?php echo $_code ?>_cc_cid" name="payment[cc_cid]" style="width:3em;" value="<?php echo $this->getInfoData('cc_cid')?>" />
83
+ </div>
84
+ </li>
85
+ <?php endif; ?>
86
+ </ul>
87
+ <script type="text/javascript">
88
+ //<![CDATA[
89
+ /**
90
+ * Disable cart server validation in admin
91
+ */
92
+ AdminOrder.prototype.prepareParams = function(params) {
93
+ if (!params) {
94
+ params = {};
95
+ }
96
+ if (!params.customer_id) {
97
+ params.customer_id = this.customerId;
98
+ }
99
+ if (!params.store_id) {
100
+ params.store_id = this.storeId;
101
+ }
102
+ if (!params.currency_id) {
103
+ params.currency_id = this.currencyId;
104
+ }
105
+ if (!params.form_key) {
106
+ params.form_key = FORM_KEY;
107
+ }
108
+
109
+ if (this.paymentMethod != '<?php echo $_code ?>') {
110
+ var data = this.serializeData('order-billing_method');
111
+ if (data) {
112
+ data.each(function(value) {
113
+ params[value[0]] = value[1];
114
+ });
115
+ }
116
+ } else {
117
+ params['payment[method]'] = '<?php echo $_code ?>';
118
+ }
119
+ return params;
120
+ };
121
+ AdminOrder.prototype.getPaymentData = function(currentMethod) {
122
+ if (typeof (currentMethod) == 'undefined') {
123
+ if (this.paymentMethod) {
124
+ currentMethod = this.paymentMethod;
125
+ } else {
126
+ return false;
127
+ }
128
+ }
129
+ if (currentMethod == '<?php echo $_code ?>') {
130
+ return false;
131
+ }
132
+ var data = {};
133
+ var fields = $('payment_form_' + currentMethod).select('input', 'select');
134
+ for ( var i = 0; i < fields.length; i++) {
135
+ data[fields[i].name] = fields[i].getValue();
136
+ }
137
+ if ((typeof data['payment[cc_type]']) != 'undefined'
138
+ && (!data['payment[cc_type]'] || !data['payment[cc_number]'])) {
139
+ return false;
140
+ }
141
+ return data;
142
+ };
143
+ <?php if (!$this->isAjaxRequest()): ?>
144
+ document.observe('dom:loaded', function(){
145
+ <?php endif; ?>
146
+ directPostModel = new directPost(
147
+ '<?php echo $_code ?>',
148
+ 'directpost-iframe',
149
+ '<?php echo $_controller ?>',
150
+ '<?php echo $_orderUrl ?>',
151
+ '<?php echo $_method->getCgiUrl() ?>',
152
+ '<?php echo $this->getUrl('*/*/save', array('_secure' => $this->getRequest()->isSecure())) ?>');
153
+ <?php if (!$this->isAjaxRequest()): ?>
154
+ });
155
+ <?php endif; ?>
156
+ //]]>
157
+ </script>
app/design/adminhtml/default/default/template/backup/dialogs.phtml ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="backup-dialog" style="display: none;" id="rollback-warning">
2
+ <div class="entry-edit">
3
+ <div class="entry-edit-head">
4
+ <h4 class="head-edit-form fieldset-legend"><?php echo $this->__('Warning') ?></h4>
5
+ </div>
6
+ <div class="content">
7
+ <div><?php echo $this->__('Any data created since the backup was made will be lost including admin users, customers and orders.')?></div>
8
+ <div class="question"><?php echo $this->__('Are you sure you want to proceed?')?></div>
9
+ </div>
10
+ <div class="buttons-set">
11
+ <div class="f-right">
12
+ <button type="button" class="scalable " onclick="backup.requestPassword()"><span><?php echo $this->__('OK')?></span></button>
13
+ <button type="button" class="scalable " onclick="backup.hidePopups()"><span><?php echo $this->__('Cancel')?></span></button>
14
+ </div>
15
+ </div>
16
+ </div>
17
+ </div>
18
+
19
+ <div class="backup-dialog" style="display: none;" id="backup-warning">
20
+ <div class="entry-edit">
21
+ <div class="entry-edit-head">
22
+ <h4 class="head-edit-form fieldset-legend"><?php echo $this->__('Warning') ?></h4>
23
+ </div>
24
+ <div class="content">
25
+ <div class="backup-messages" style="display: none;"><ul class="messages"></ul></div>
26
+ <div><?php echo $this->__("The backup's creation process will take time.")?></div>
27
+ <div><?php echo $this->__('You will need to wait when the action ends.')?></div>
28
+ <div><?php echo $this->__('Do you really want to proceed?')?></div>
29
+ </div>
30
+ <div class="buttons-set">
31
+ <div class="f-right">
32
+ <button type="button" class="scalable " onclick="backup.requestBackupOptions()"><span><?php echo $this->__('OK')?></span></button>
33
+ <button type="button" class="scalable " onclick="backup.hidePopups()"><span><?php echo $this->__('Cancel')?></span></button>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ </div>
38
+
39
+ <div class="backup-dialog" style="display: none;" id="backup-options">
40
+ <div class="entry-edit">
41
+ <div class="entry-edit-head">
42
+ <h4 class="head-edit-form fieldset-legend"><?php echo $this->__('Backup options') ?></h4>
43
+ </div>
44
+ <div class="content">
45
+ <div class="backup-messages" style="display: none;"><ul class="messages"></ul></div>
46
+ <div><?php echo $this->__('Please specify backup creation options')?></div>
47
+ <form action="" method="post" id="backup-form" onsubmit="return backup.submitBackup();">
48
+ <table class="form-list question" cellspacing="0">
49
+ <tr>
50
+ <td style="padding-right: 8px;"><label for="backup_name" class="nobr"><?php echo $this->__('Backup Name')?></label></td>
51
+ <td>
52
+ <input type="text" name="backup_name" id="backup_name" class="validate-alphanum-with-spaces validate-length maximum-length-50" style="width: 343px" maxlength="50" />
53
+ <p class="note"><span><?php echo $this->__('Please use only letters (a-z or A-Z), numbers (0-9) or spaces in this field.'); ?></span></p>
54
+ </td>
55
+ </tr>
56
+ <tr>
57
+ <td>&nbsp;</td>
58
+ <td class="maintenance-checkbox-container">
59
+ <input type="checkbox" name="maintenance_mode" value="1" id="backup_maintenance_mode"/>
60
+ <label for="backup_maintenance_mode"><?php echo $this->__('Put store on the maintenance mode while backup creation')?></label>
61
+ </td>
62
+ </tr>
63
+ <tr id="exclude-media-checkbox-container" style="display: none;">
64
+ <td>&nbsp;</td>
65
+ <td>
66
+ <input type="checkbox" name="exclude_media" value="1" id="exclude_media"/>
67
+ <label for="exclude_media"><?php echo $this->__('Exclude media folder from backup')?></label>
68
+ </td>
69
+ </tr>
70
+ </table>
71
+ </form>
72
+ </div>
73
+ <div class="buttons-set">
74
+ <div class="f-right">
75
+ <button type="button" class="scalable " onclick="backup.submitBackup()"><span><?php echo $this->__('OK')?></span></button>
76
+ <button type="button" class="scalable " onclick="backup.hidePopups()"><span><?php echo $this->__('Cancel')?></span></button>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ </div>
81
+
82
+ <div class="backup-dialog" style="display: none;" id="rollback-request-password">
83
+ <div class="entry-edit">
84
+ <div class="entry-edit-head">
85
+ <h4 class="head-edit-form fieldset-legend"><?php echo $this->__('Please enter password') ?></h4>
86
+ </div>
87
+ <div class="content">
88
+ <div class="backup-messages" style="display: none;"><ul class="messages"></ul></div>
89
+ <div><?php echo $this->__('Please enter password to confirm rollback.')?></div>
90
+ <div><?php echo $this->__('This action cannot be undone.')?></div>
91
+ <div class="question"><?php echo $this->__('Are you sure you want to proceed?')?></div>
92
+ <form action="" method="post" id="rollback-form" onsubmit="return backup.submitRollback();">
93
+ <div class="password-box-container">
94
+ <table class="form-list" cellspacing="0">
95
+ <tr>
96
+ <td style="padding-right: 8px;"><label for="password" class="nobr"><?php echo $this->__('User Password')?> <span class="required">*</span></label></td>
97
+ <td><input type="password" name="password" id="password" class="required-entry"></td>
98
+ </tr>
99
+ <tr>
100
+ <td>&nbsp;</td>
101
+ <td class="maintenance-checkbox-container">
102
+ <input type="checkbox" name="maintenance_mode" value="1" id="rollback_maintenance_mode"/>
103
+ <label for="rollback_maintenance_mode"><?php echo $this->__('Put store on the maintenance mode while rollback processing')?></label>
104
+ </td>
105
+ </tr>
106
+ <tr id="use-ftp-checkbox-row" style="display: none;">
107
+ <td>&nbsp;</td>
108
+ <td><input type="checkbox" name="use_ftp" value="1" id="use_ftp" onClick="backup.toggleFtpCredentialsForm();"/> <label for="use_ftp"><?php echo $this->__('Use FTP Connection')?></label></td>
109
+ </tr>
110
+ </table>
111
+ </div>
112
+ <div class="entry-edit" id="ftp-credentials-container" style="display: none;">
113
+ <div class="entry-edit-head">
114
+ <h4 class=""><?php echo $this->__('FTP credentials')?></h4>
115
+ </div>
116
+ <fieldset>
117
+ <table class="form-list" cellspacing="0">
118
+ <tr>
119
+ <td class="label"><label for="ftp_host"><?php echo $this->__('FTP Host')?> <span class="required">*</span></label></td>
120
+ <td class="value"><input type="text" name="ftp_host" id="ftp_host"></td>
121
+ </tr>
122
+ <tr>
123
+ <td class="label"><label for="ftp_user"><?php echo $this->__('FTP Login')?> <span class="required">*</span></label></td>
124
+ <td class="value"><input type="text" name="ftp_user" id="ftp_user"></td>
125
+ </tr>
126
+ <tr>
127
+ <td class="label"><label for="ftp_pass"><?php echo $this->__('FTP Password')?> <span class="required">*</span></label></td>
128
+ <td class="value"><input type="password" name="ftp_pass" id="ftp_pass"></td>
129
+ </tr>
130
+ <tr>
131
+ <td class="label"><label for="ftp_path"><?php echo $this->__('Magento root directory')?></label></td>
132
+ <td class="value"><input type="text" name="ftp_path" id="ftp_path"></td>
133
+ </tr>
134
+ </table>
135
+ </fieldset>
136
+ </div>
137
+ </form>
138
+ </div>
139
+ <div class="buttons-set">
140
+ <div class="f-right">
141
+ <button type="button" class="scalable " onclick="backup.submitRollback()"><span><?php echo $this->__('OK')?></span></button>
142
+ <button type="button" class="scalable " onclick="backup.hidePopups()"><span><?php echo $this->__('Cancel')?></span></button>
143
+ </div>
144
+ </div>
145
+ </div>
146
+ </div>
147
+
148
+ <div id="popup-window-mask" style="display: none;"></div>
149
+
150
+ <?php
151
+ $helper = Mage::helper('backup');
152
+ $rollbackUrl = $this->getUrl('*/*/rollback');
153
+ $backupUrl = $this->getUrl('*/*/create');
154
+ ?>
155
+
156
+ <script type="text/javascript">
157
+ //<![CDATA[
158
+ document.observe('dom:loaded', function () {
159
+ backup = new AdminBackup();
160
+ backup.rollbackUrl = '<?php echo $helper->jsQuoteEscape($rollbackUrl);?>';
161
+ backup.backupUrl = '<?php echo $helper->jsQuoteEscape($backupUrl);?>';
162
+ });
163
+ //]]>
164
+ </script>
app/design/adminhtml/default/default/template/backup/left.phtml ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <h3><?php echo Mage::helper('backup')->__('Create Backup') ?></h3>
app/design/adminhtml/default/default/template/backup/list.phtml ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <table cellspacing="0">
29
+ <tr>
30
+ <td style="width:50%;"><h3 class="icon-head head-backups-control"><?php echo Mage::helper('backup')->__('Backups') ?></h3></td>
31
+ <td class="form-buttons">
32
+ <?php echo $this->getCreateSnapshotButtonHtml(); ?>
33
+ <?php echo $this->getCreateMediaBackupButtonHtml(); ?>
34
+ <?php echo $this->getCreateButtonHtml(); ?>
35
+ </td>
36
+ </tr>
37
+ </table>
38
+ </div>
39
+ <?php echo $this->getGridHtml() ?>
40
+ <?php echo $this->getDialogsHtml() ?>
app/design/adminhtml/default/default/template/bundle/product/composite/fieldset/options/bundle.phtml ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Bundle_Block_Adminhtml_Catalog_Product_Composite_Fieldset_Bundle */ ?>
29
+ <?php $options = Mage::helper('core')->decorateArray($this->getOptions()); ?>
30
+ <?php if (count($options)): ?>
31
+ <div id="catalog_product_composite_configure_fields_bundle" class="<?php echo $this->getIsLastFieldset() ? 'last-fieldset' : '' ?>">
32
+ <h4><?php echo Mage::helper('catalog')->__('Bundle Items') ?></h4>
33
+ <div class="product-options">
34
+ <dl>
35
+ <?php foreach ($options as $option) : ?>
36
+ <?php if ($option->getSelections()) : ?>
37
+ <?php echo $this->getOptionHtml($option); ?>
38
+ <?php endif; ?>
39
+ <?php endforeach; ?>
40
+ </dl>
41
+ </div>
42
+ </div>
43
+
44
+ <script>
45
+ var BundleControl = Class.create();
46
+ BundleControl.prototype = {
47
+ initialize: function (config) {
48
+ this.config = config;
49
+ },
50
+
51
+ changeSelection: function (selection) {
52
+ if (selection.multiple) {
53
+ return;
54
+ }
55
+ var parts = selection.id.split('-'), optionId = parts[2],
56
+ showQtyInput = selection.value && selection.value != 'none',
57
+ options = this.config.options[optionId],
58
+ selectionOptions = options && options.selections && options.selections[selection.value] || {};
59
+
60
+ selectionOptions.can_change_qty = Number(selectionOptions.can_change_qty) && showQtyInput;
61
+ this.updateQtyInput(optionId, selectionOptions);
62
+ },
63
+
64
+ updateQtyInput: function(optionId, selectionOptions) {
65
+ var elem = $('bundle-option-' + optionId + '-qty-input'),
66
+ default_qty = Number(selectionOptions.default_qty);
67
+ if (!elem) {
68
+ return;
69
+ }
70
+ if (selectionOptions.can_change_qty) {
71
+ elem.removeClassName('qty-disabled');
72
+ elem.disabled = false;
73
+ if (elem.value == '0') {
74
+ elem.value = default_qty || 1;
75
+ }
76
+ } else {
77
+ elem.addClassName('qty-disabled');
78
+ elem.disabled = true;
79
+ elem.value = default_qty || 0;
80
+ }
81
+ },
82
+
83
+ updateForDefaults: function () {
84
+ for (var optionId in this.config.options) {
85
+ var selection = $('bundle-option-' + optionId);
86
+ if (selection) {
87
+ this.changeSelection(selection);
88
+ }
89
+ }
90
+ }
91
+ }
92
+ ProductConfigure.bundleControl = new BundleControl(<?php echo $this->getJsonConfig() ?>);
93
+ </script>
94
+
95
+ <?php endif; ?>
app/design/adminhtml/default/default/template/bundle/product/composite/fieldset/options/type/checkbox.phtml ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Bundle_Block_Adminhtml_Catalog_Product_Composite_Fieldset_Options_Type_Checkbox */ ?>
29
+ <?php $_option = $this->getOption(); ?>
30
+ <?php $_selections = $_option->getSelections(); ?>
31
+ <?php $_skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck(); ?>
32
+ <dt><label<?php if ($_option->getRequired()) echo ' class="required"' ?>><?php if ($_option->getRequired()) echo '<em>*</em>' ?><?php echo $this->escapeHtml($_option->getTitle()) ?></label></dt>
33
+ <dd<?php if ($_option->decoratedIsLast){?> class="last"<?php }?>>
34
+ <div class="input-box">
35
+ <?php if (count($_selections) == 1 && $_option->getRequired()): ?>
36
+ <?php echo $this->getSelectionQtyTitlePrice($_selections[0]) ?>
37
+ <input type="hidden" name="bundle_option[<?php echo $_option->getId() ?>]" value="<?php echo $_selections[0]->getSelectionId() ?>" price="<?php echo $this->getSelectionPrice($_selections[0]) ?>"'/>
38
+ <?php else:?>
39
+ <ul class="options-list">
40
+ <?php foreach($_selections as $_selection): ?>
41
+ <li><input class="change-container-classname checkbox bundle-option-<?php echo $_option->getId() ?> <?php if ($_option->getRequired()) echo 'validate-one-required-by-name' ?>" id="bundle-option-<?php echo $_option->getId() ?>-<?php echo $_selection->getSelectionId() ?>" type="checkbox" name="bundle_option[<?php echo $_option->getId() ?>][]"<?php if ($this->_isSelected($_selection)) echo ' checked="checked"' ?><?php if (!$_selection->isSaleable() && !$_skipSaleableCheck) echo ' disabled="disabled"' ?> value="<?php echo $_selection->getSelectionId() ?>" onclick="ProductConfigure.bundleControl.changeSelection(this)" price="<?php echo $this->getSelectionPrice($_selection) ?>"/>
42
+ <span class="label"><label for="bundle-option-<?php echo $_option->getId() ?>-<?php echo $_selection->getSelectionId() ?>"><?php echo $this->getSelectionQtyTitlePrice($_selection) ?></label></span>
43
+ <?php if($_option->getRequired()): ?>
44
+ <?php echo $this->setValidationContainer('bundle-option-'.$_option->getId().'-'.$_selection->getSelectionId(), 'bundle-option-'.$_option->getId().'-container') ?>
45
+ <?php endif; ?>
46
+ </li>
47
+ <?php endforeach; ?>
48
+ </ul>
49
+ <div id="bundle-option-<?php echo $_option->getId() ?>-container"></div>
50
+ <?php endif; ?>
51
+ </div>
52
+ </dd>
app/design/adminhtml/default/default/template/bundle/product/composite/fieldset/options/type/multi.phtml ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Bundle_Block_Adminhtml_Catalog_Product_Composite_Fieldset_Options_Type_Multi */ ?>
29
+ <?php $_option = $this->getOption(); ?>
30
+ <?php $_selections = $_option->getSelections(); ?>
31
+ <?php $_skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck(); ?>
32
+ <dt><label<?php if ($_option->getRequired()) echo ' class="required"' ?>><?php if ($_option->getRequired()) echo '<em>*</em>' ?><?php echo $this->escapeHtml($_option->getTitle()) ?></label></dt>
33
+ <dd<?php if ($_option->decoratedIsLast){?> class="last"<?php }?>>
34
+ <div class="input-box">
35
+ <?php if (count($_selections) == 1 && $_option->getRequired()): ?>
36
+ <?php echo $this->getSelectionQtyTitlePrice($_selections[0]) ?>
37
+ <input type="hidden" name="bundle_option[<?php echo $_option->getId() ?>]" value="<?php echo $_selections[0]->getSelectionId() ?>" price="<?php echo $this->getSelectionPrice($_selections[0]) ?>"/>
38
+ <?php else: ?>
39
+ <select multiple="multiple" size="5" id="bundle-option-<?php echo $_option->getId() ?>" name="bundle_option[<?php echo $_option->getId() ?>][]" class="bundle-option-<?php echo $_option->getId() ?><?php if ($_option->getRequired()) echo ' required-entry' ?> bundle-option-select multiselect change-container-classname" onchange="ProductConfigure.bundleControl.changeSelection(this)">
40
+ <?php if(!$_option->getRequired()): ?>
41
+ <option value=""><?php echo $this->__('None') ?></option>
42
+ <?php endif; ?>
43
+ <?php foreach ($_selections as $_selection): ?>
44
+ <option value="<?php echo $_selection->getSelectionId() ?>"<?php if ($this->_isSelected($_selection)) echo ' selected="selected"' ?><?php if (!$_selection->isSaleable() && !$_skipSaleableCheck) echo ' disabled="disabled"' ?> price="<?php echo $this->getSelectionPrice($_selection) ?>"><?php echo $this->getSelectionQtyTitlePrice($_selection, false) ?></option>
45
+ <?php endforeach; ?>
46
+ </select>
47
+ <?php endif; ?>
48
+ </div>
49
+ </dd>
app/design/adminhtml/default/default/template/bundle/product/composite/fieldset/options/type/radio.phtml ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Bundle_Block_Adminhtml_Catalog_Product_Composite_Fieldset_Options_Type_Radio */ ?>
29
+ <?php $_option = $this->getOption(); ?>
30
+ <?php $_selections = $_option->getSelections(); ?>
31
+ <?php $_default = $_option->getDefaultSelection(); ?>
32
+ <?php $_skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck(); ?>
33
+ <?php list($_defaultQty, $_canChangeQty) = $this->_getDefaultValues(); ?>
34
+
35
+ <dt>
36
+ <span class="qty-holder">
37
+ <label for="bundle-option-<?php echo $_option->getId() ?>-qty-input"><?php echo $this->__('Qty:') ?>&nbsp;</label><input <?php if (!$_canChangeQty) echo ' disabled="disabled"' ?> id="bundle-option-<?php echo $_option->getId() ?>-qty-input" class="input-text qty<?php if (!$_canChangeQty) echo ' qty-disabled' ?>" type="text" name="bundle_option_qty[<?php echo $_option->getId() ?>]" value="<?php echo $_defaultQty ?>"/>
38
+ </span>
39
+ <label<?php if ($_option->getRequired()) echo ' class="required"' ?>><?php if ($_option->getRequired()) echo '<em>*</em>' ?><?php echo $this->escapeHtml($_option->getTitle()) ?></label>
40
+ </dt>
41
+ <dd<?php if ($_option->decoratedIsLast){?> class="last"<?php }?>>
42
+ <div class="input-box">
43
+ <?php if ($this->_showSingle()): ?>
44
+ <?php echo $this->getSelectionTitlePrice($_selections[0]) ?>
45
+ <input type="hidden" name="bundle_option[<?php echo $_option->getId() ?>]" value="<?php echo $_selections[0]->getSelectionId() ?>" price="<?php echo $this->getSelectionPrice($_selections[0]) ?>" />
46
+ <?php else:?>
47
+ <ul class="options-list">
48
+ <?php if (!$_option->getRequired()): ?>
49
+ <li><input type="radio" class="radio" id="bundle-option-<?php echo $_option->getId() ?>" name="bundle_option[<?php echo $_option->getId() ?>]"<?php echo ($_default && $_default->isSalable())?'':' checked="checked" ' ?> value="" onclick="ProductConfigure.bundleControl.changeSelection(this)"/>
50
+ <span class="label"><label for="bundle-option-<?php echo $_option->getId() ?>"><?php echo $this->__('None') ?></label></span>
51
+ </li>
52
+ <?php endif; ?>
53
+ <?php foreach ($_selections as $_selection): ?>
54
+ <li><input type="radio" class="radio<?php echo $_option->getRequired()?' validate-one-required-by-name':'' ?> change-container-classname" id="bundle-option-<?php echo $_option->getId() ?>-<?php echo $_selection->getSelectionId() ?>" name="bundle_option[<?php echo $_option->getId() ?>]"<?php if ($this->_isSelected($_selection)) echo ' checked="checked"' ?><?php if (!$_selection->isSaleable() && !$_skipSaleableCheck) echo ' disabled="disabled"' ?>value="<?php echo $_selection->getSelectionId() ?>" onclick="ProductConfigure.bundleControl.changeSelection(this)" price="<?php echo $this->getSelectionPrice($_selection) ?>" qtyId="bundle-option-<?php echo $_option->getId() ?>-qty-input"/>
55
+ <span class="label"><label for="bundle-option-<?php echo $_option->getId() ?>-<?php echo $_selection->getSelectionId() ?>"><?php echo $this->getSelectionTitlePrice($_selection) ?></label></span>
56
+ <?php if ($_option->getRequired()): ?>
57
+ <?php echo $this->setValidationContainer('bundle-option-'.$_option->getId().'-'.$_selection->getSelectionId(), 'bundle-option-'.$_option->getId().'-container') ?>
58
+ <?php endif; ?>
59
+ </li>
60
+ <?php endforeach; ?>
61
+ </ul>
62
+ <div id="bundle-option-<?php echo $_option->getId() ?>-container"></div>
63
+ <?php endif; ?>
64
+ </div>
65
+ </dd>
app/design/adminhtml/default/default/template/bundle/product/composite/fieldset/options/type/select.phtml ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Bundle_Block_Adminhtml_Catalog_Product_Composite_Fieldset_Options_Type_Select */ ?>
29
+ <?php $_option = $this->getOption(); ?>
30
+ <?php $_selections = $_option->getSelections(); ?>
31
+ <?php $_default = $_option->getDefaultSelection(); ?>
32
+ <?php $_skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck(); ?>
33
+ <?php list($_defaultQty, $_canChangeQty) = $this->_getDefaultValues(); ?>
34
+
35
+ <dt>
36
+ <span class="qty-holder">
37
+ <label for="bundle-option-<?php echo $_option->getId() ?>-qty-input"><?php echo $this->__('Qty:') ?>&nbsp;</label><input <?php if (!$_canChangeQty) echo ' disabled="disabled"' ?> id="bundle-option-<?php echo $_option->getId() ?>-qty-input" class="input-text qty<?php if (!$_canChangeQty) echo ' qty-disabled' ?>" type="text" name="bundle_option_qty[<?php echo $_option->getId() ?>]" value="<?php echo $_defaultQty ?>"/>
38
+ </span>
39
+ <label<?php if ($_option->getRequired()) echo ' class="required"' ?>><?php if ($_option->getRequired()) echo '<em>*</em>' ?><?php echo $this->escapeHtml($_option->getTitle()) ?></label>
40
+ </dt>
41
+ <dd<?php if ($_option->decoratedIsLast){?> class="last"<?php }?>>
42
+ <div class="input-box">
43
+ <?php if ($this->_showSingle()): ?>
44
+ <?php echo $this->getSelectionTitlePrice($_selections[0]) ?>
45
+ <input type="hidden" name="bundle_option[<?php echo $_option->getId() ?>]" value="<?php echo $_selections[0]->getSelectionId() ?>" price="<?php echo $this->getSelectionPrice($_selections[0]) ?>"/>
46
+ <?php else:?>
47
+ <select id="bundle-option-<?php echo $_option->getId() ?>" name="bundle_option[<?php echo $_option->getId() ?>]" class="bundle-option-<?php echo $_option->getId() ?><?php if ($_option->getRequired()) echo ' required-entry' ?> bundle-option-select change-container-classname" onchange="ProductConfigure.bundleControl.changeSelection(this)">
48
+ <option value=""><?php echo $this->__('Choose a selection...') ?></option>
49
+ <?php foreach ($_selections as $_selection): ?>
50
+ <option value="<?php echo $_selection->getSelectionId() ?>"<?php if ($this->_isSelected($_selection)) echo ' selected="selected"' ?><?php if (!$_selection->isSaleable() && !$_skipSaleableCheck) echo ' disabled="disabled"' ?> price="<?php echo $this->getSelectionPrice($_selection) ?>" qtyId="bundle-option-<?php echo $_option->getId() ?>-qty-input"><?php echo $this->getSelectionTitlePrice($_selection, false) ?></option>
51
+ <?php endforeach; ?>
52
+ </select>
53
+ <?php endif; ?>
54
+ </div>
55
+ </dd>
app/design/adminhtml/default/default/template/bundle/product/edit/bundle.phtml ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ if(typeof Bundle=='undefined') {
29
+ Bundle = {};
30
+ }
31
+ </script>
32
+
33
+ <div class="entry-edit">
34
+ <div class="entry-edit-head">
35
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('bundle')->__('Shipment') ?></h4>
36
+ </div>
37
+ <fieldset>
38
+ <table cellspacing="0" class="form-list">
39
+ <tr>
40
+ <td class="label"><label for="shipment_type"><?php echo Mage::helper('bundle')->__('Ship Bundle Items') ?></label></td>
41
+ <td class="value"><select <?php if ($this->isReadonly()): ?>disabled="disabled" <?php endif;?>id="shipment_type" name="<?php echo $this->getFieldSuffix() ?>[shipment_type]" class="select">
42
+ <option value="1"><?php echo Mage::helper('bundle')->__('Separately') ?></option>
43
+ <option value="0"<?php if ($this->getProduct()->getShipmentType() == 0): ?> selected="selected"<?php endif; ?>><?php echo Mage::helper('bundle')->__('Together') ?></option>
44
+ </select>
45
+ </td>
46
+ </tr>
47
+ </table>
48
+ </fieldset>
49
+ </div>
50
+
51
+ <div class="entry-edit custom-options bundle" id="product_bundle_container">
52
+ <div class="entry-edit-head">
53
+ <h4><?php echo $this->__('Bundle Items') ?></h4>
54
+ <div class="right"><?php echo $this->getAddButtonHtml() ?></div>
55
+ </div>
56
+
57
+ <div id="product_options_container" class="box">
58
+ <div id="product_bundle_container_top"></div>
59
+ <?php echo $this->getOptionsBoxHtml() ?>
60
+ </div>
61
+ </div>
62
+
63
+ <script type="text/javascript">
64
+ // re-bind form elements onchange
65
+ varienWindowOnload(true);
66
+ <?php if ($this->isReadonly()):?>
67
+ $('product_bundle_container').select('input', 'select', 'textarea', 'button').each(function(input){
68
+ input.disabled = true;
69
+ if (input.tagName.toLowerCase() == 'button') {
70
+ input.addClassName('disabled');
71
+ }
72
+ });
73
+ <?php endif; ?>
74
+ </script>
75
+
76
+ <div><input type="hidden" name="affect_bundle_product_selections" value="1" /></div>
app/design/adminhtml/default/default/template/bundle/product/edit/bundle/option.phtml ADDED
@@ -0,0 +1,235 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ optionTemplate = '<div id="<?php echo $this->getFieldId() ?>_{{index}}" class="option-box"> ' +
29
+ '<div class="option-title"> ' +
30
+ '<label for="<?php echo $this->getFieldName() ?>[{{index}}][title]"><?php echo Mage::helper('bundle')->__('Default Title') ?> <span class="required">*</span></label>' +
31
+ <?php if ($this->isDefaultStore()): ?>
32
+ '<input class="input-text required-entry" type="text" name="<?php echo $this->getFieldName() ?>[{{index}}][title]" id="id_<?php echo $this->getFieldName() ?>_{{index}}_title" value="{{title}}">' +
33
+ <?php else: ?>
34
+ '<input class="input-text required-entry" type="text" name="<?php echo $this->getFieldName() ?>[{{index}}][default_title]" id="id_<?php echo $this->getFieldName() ?>_{{index}}_default_title" value="{{default_title}}">' +
35
+ <?php endif; ?>
36
+ '<?php echo $this->jsQuoteEscape($this->getOptionDeleteButtonHtml()) ?>' +
37
+ '</div>' +
38
+ '<table class="option-header" cellpadding="0" cellspacing="0">' +
39
+ '<thead>' +
40
+ '<tr>' +
41
+ <?php if (!$this->isDefaultStore()): ?>
42
+ '<th class="opt-title"><?php echo Mage::helper('bundle')->__('Store View Title') ?> <span class="required">*</span></th>' +
43
+ <?php endif; ?>
44
+ '<th class="opt-type"><?php echo Mage::helper('bundle')->__('Input Type') ?></th>' +
45
+ '<th class="opt-req"><?php echo $this->jsQuoteEscape(Mage::helper('bundle')->__('Is Required')) ?></th>' +
46
+ '<th class="opt-order"><?php echo Mage::helper('bundle')->__('Position') ?></th>' +
47
+ '<th>&nbsp;</th>' +
48
+ '</tr>' +
49
+ '</thead>' +
50
+ '<tbody>' +
51
+ '<tr>' +
52
+ '<input type="hidden" id="<?php echo $this->getFieldId() ?>_id_{{index}}" name="<?php echo $this->getFieldName() ?>[{{index}}][option_id]" value="{{option_id}}">' +
53
+ '<input type="hidden" name="<?php echo $this->getFieldName() ?>[{{index}}][delete]" value="" class="delete">' +
54
+ <?php if (!$this->isDefaultStore()): ?>
55
+ '<td><input class="input-text required-entry" type="text" name="<?php echo $this->getFieldName() ?>[{{index}}][title]" id="id_<?php echo $this->getFieldName() ?>_{{index}}_title_store" value="{{title}}"></td>' +
56
+ <?php endif; ?>
57
+ '<td><?php echo $this->getTypeSelectHtml() ?></td>' +
58
+ '<td><?php echo $this->getRequireSelectHtml() ?></td>' +
59
+ '<td><input class="input-text validate-zero-or-greater" type="text" name="<?php echo $this->getFieldName() ?>[{{index}}][position]" value="{{position}}"></td>' +
60
+ '<td>&nbsp;<?php echo $this->jsQuoteEscape($this->getAddSelectionButtonHtml()) ?></td>' +
61
+ '</tr>' +
62
+ '</tbody>' +
63
+ '</table>' +
64
+ '<div id="<?php echo $this->getFieldId() ?>_search_{{index}}">' +
65
+ '</div>' +
66
+ '</div>';
67
+ </script>
68
+
69
+ <?php echo $this->getSelectionHtml() ?>
70
+
71
+ <script type="text/javascript">
72
+
73
+ function changeInputType(oldObject, oType) {
74
+ var newObject = document.createElement('input');
75
+ newObject.type = oType;
76
+ if(oldObject.size) newObject.size = oldObject.size;
77
+ if(oldObject.value) newObject.value = oldObject.value;
78
+ if(oldObject.name) newObject.name = oldObject.name;
79
+ if(oldObject.id) newObject.id = oldObject.id;
80
+ if(oldObject.onclick) newObject.onclick = oldObject.onclick;
81
+ if(oldObject.className) newObject.className = oldObject.className;
82
+ oldObject.parentNode.replaceChild(newObject,oldObject);
83
+ return newObject;
84
+ }
85
+
86
+ Bundle.Option = Class.create();
87
+ Bundle.Option.prototype = {
88
+ idLabel : '<?php echo $this->getFieldId() ?>',
89
+ top : '',
90
+ templateSyntax : /(^|.|\r|\n)({{(\w+)}})/,
91
+ templateText : '',
92
+ itemsCount : 0,
93
+ initialize : function(template) {
94
+ this.templateText = template;
95
+ this.top = $('product_bundle_container_top');
96
+ },
97
+
98
+ add : function(data) {
99
+ if(!data){
100
+ data = {};
101
+ this.top = $('product_bundle_container_top');
102
+ } else {
103
+ data.title = data.title.replace('"', "&quot;");
104
+ }
105
+
106
+ data.index = this.itemsCount++;
107
+
108
+ this.template = new Template(this.templateText, this.templateSyntax);
109
+
110
+ Element.insert(this.top, {'after':this.template.evaluate(data)});
111
+
112
+ this.top = $(this.idLabel + '_' + data.index);
113
+
114
+ //set selected type
115
+ if (data.type) {
116
+ $A($(this.idLabel + '_'+data.index+'_type').options).each(function(option){
117
+ if (option.value==data.type) option.selected = true;
118
+ });
119
+ }
120
+
121
+ //set selected is_require
122
+ if (data.required) {
123
+ $A($(this.idLabel + '_'+data.index+'_required').options).each(function(option){
124
+ if (option.value==data.required) option.selected = true;
125
+ });
126
+ }
127
+ // rebind change notifications
128
+ varienWindowOnload(true);
129
+
130
+ return data.index;
131
+ },
132
+
133
+ remove : function(event){
134
+ var element = $(Event.findElement(event, 'div')).parentNode;
135
+ if(element){
136
+ Element.select(element, '.delete').each(function(elem){elem.value='1'});
137
+ Element.select(element, ['input', 'select']).each(function(elem){elem.hide(); elem.className = '';});
138
+ Element.hide(element);
139
+ }
140
+ },
141
+
142
+ changeType : function(event) {
143
+ var element = Event.element(event);
144
+ parts = element.id.split('_');
145
+ i = parts[2];
146
+ if (element.value == 'multi' || element.value == 'checkbox') {
147
+ inputs = $A($$('#' + bSelection.idLabel + '_box_' + i + ' tr.selection input.default'));
148
+ inputs.each(
149
+ function(elem){
150
+ //elem.type = "checkbox";
151
+ changeInputType(elem, 'checkbox');
152
+ }
153
+ );
154
+ /**
155
+ * Hide not needed elements (user defined qty select box)
156
+ */
157
+ inputs = $A($$('#' + bSelection.idLabel + '_box_' + i + ' .qty-box'));
158
+ inputs.each(
159
+ function(elem){
160
+ elem.hide();
161
+ }
162
+ );
163
+
164
+ } else {
165
+ inputs = $A($$('#' + bSelection.idLabel + '_box_' + i + ' tr.selection input.default'));
166
+ have = false;
167
+ for (j=0; j< inputs.length; j++) {
168
+ //inputs[j].type = "radio";
169
+ changeInputType(inputs[j], 'radio');
170
+ if (inputs[j].checked && have) {
171
+ inputs[j].checked = false;
172
+ } else {
173
+ have = true;
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Show user defined select box
179
+ */
180
+ inputs = $A($$('#' + bSelection.idLabel + '_box_' + i + ' .qty-box'));
181
+ inputs.each(
182
+ function(elem){
183
+ elem.show();
184
+ }
185
+ );
186
+ }
187
+ },
188
+
189
+ priceTypeFixed : function() {
190
+ inputs = $A($$('.price-type-box'));
191
+ inputs.each(
192
+ function(elem){
193
+ elem.show();
194
+ }
195
+ );
196
+ },
197
+
198
+ priceTypeDynamic : function() {
199
+ inputs = $A($$('.price-type-box'));
200
+ inputs.each(
201
+ function(elem){
202
+ elem.hide();
203
+ }
204
+ );
205
+ }
206
+ }
207
+
208
+ var optionIndex = 0;
209
+ bOption = new Bundle.Option(optionTemplate);
210
+ //adding data to templates
211
+ <?php foreach ($this->getOptions() as $_option): ?>
212
+ optionIndex = bOption.add(<?php echo $_option->toJson() ?>);
213
+ <?php if ($_option->getSelections()):?>
214
+ <?php foreach ($_option->getSelections() as $_selection): ?>
215
+ <?php $_selection->setName($this->escapeHtml($_selection->getName())); ?>
216
+ bSelection.addRow(optionIndex, <?php echo $_selection->toJson() ?>);
217
+ <?php endforeach; ?>
218
+ <?php endif; ?>
219
+ <?php endforeach; ?>
220
+ /**
221
+ * Adding event on price type select box of product to hide or show prices for selections
222
+ */
223
+ function togglePriceType() {
224
+ if ($('price_type').value == '1') {
225
+ bOption.priceTypeFixed();
226
+ } else {
227
+ bOption.priceTypeDynamic();
228
+ }
229
+ }
230
+
231
+ togglePriceType();
232
+
233
+ Event.observe('price_type', 'change', togglePriceType);
234
+
235
+ </script>
app/design/adminhtml/default/default/template/bundle/product/edit/bundle/option/search.phtml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
28
+ <div class="entry-edit-head">
29
+ <div style="float: right;"><?php echo $this->getButtonsHtml() ?></div>
30
+ <h4 class="fieldset-legend <?php echo ($this->getHeaderCssClass()) ? $this->getHeaderCssClass().' icon-head' : '' ?>"><?php echo $this->getHeaderText() ?></h4>
31
+ </div>
32
+ <fieldset>
33
+ <?php echo $this->getChildHtml() ?>
34
+ </fieldset>
35
+ </div>
app/design/adminhtml/default/default/template/bundle/product/edit/bundle/option/selection.phtml ADDED
@@ -0,0 +1,352 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ //<![CDATA[
29
+
30
+ var bundleTemplateBox = '<table class="border" cellpadding="0" cellspacing="0">' +
31
+ ' <thead>' +
32
+ ' <tr class="headings">' +
33
+ ' <th><?php echo Mage::helper('catalog')->__('Name') ?></th>' +
34
+ <?php if ($this->getCanReadPrice() !== false) : ?>
35
+ ' <th class="type-price price-type-box"><?php echo Mage::helper('catalog')->__('Price') ?></th>' +
36
+ ' <th class="type-type price-type-box"><?php echo Mage::helper('bundle')->__('Price Type') ?></th>' +
37
+ <?php endif; ?>
38
+ ' <th class="type-price"><?php echo Mage::helper('bundle')->__('Default Qty') ?></th>' +
39
+ ' <th class="type-uqty qty-box"><?php echo$this->jsQuoteEscape(Mage::helper('bundle')->__('User Defined Qty')) ?></th>' +
40
+ ' <th class="type-order"><?php echo Mage::helper('bundle')->__('Position') ?></th>' +
41
+ ' <th style="width:1px"><?php echo Mage::helper('bundle')->__('Default') ?></th>' +
42
+ ' <th class="last">&nbsp;</th>' +
43
+ ' </tr>' +
44
+ ' </thead> ' +
45
+ ' <tbody>' +
46
+ ' </tbody>' +
47
+ '</table>';
48
+
49
+ var bundleTemplateRow ='<td>' +
50
+ ' <input type="hidden" id="<?php echo $this->getFieldId() ?>_id_{{index}}" name="<?php echo $this->getFieldName() ?>[{{parentIndex}}][{{index}}][selection_id]" value="{{selection_id}}">' +
51
+ ' <input type="hidden" name="<?php echo $this->getFieldName() ?>[{{parentIndex}}][{{index}}][option_id]" value="{{option_id}}">' +
52
+ ' <input type="hidden" class="product" name="<?php echo $this->getFieldName() ?>[{{parentIndex}}][{{index}}][product_id]" value="{{product_id}}">' +
53
+ ' <input type="hidden" name="<?php echo $this->getFieldName() ?>[{{parentIndex}}][{{index}}][delete]" value="" class="delete">' +
54
+ ' {{name}}<br />' +
55
+ ' <div class="nobr">' +
56
+ ' <strong><?php echo $this->helper('sales')->__('SKU') ?>:</strong> {{sku}}' +
57
+ ' </div>' +
58
+ '</td>' +
59
+ <?php if ($this->getCanReadPrice() !== false) : ?>
60
+ '<td class="price-type-box"><input id="<?php echo $this->getFieldId() ?>_{{index}}_price_value" class="input-text required-entry validate-zero-or-greater" type="text" name="<?php echo $this->getFieldName() ?>[{{parentIndex}}][{{index}}][selection_price_value]" value="{{selection_price_value}}"<?php if($this->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?>></td>' +
61
+ '<td class="price-type-box"><?php echo $this->getPriceTypeSelectHtml() ?><div><?php echo $this->getCheckboxScopeHtml() ?></div></td>' +
62
+ <?php else : ?>
63
+ '<input type="hidden" id="<?php echo $this->getFieldId(); ?>_{{index}}_price_value" name="<?php echo $this->getFieldName(); ?>[{{parentIndex}}][{{index}}][selection_price_value]" value="0" />' +
64
+ '<input type="hidden" id="<?php echo $this->getFieldId(); ?>_{{index}}_price_type" name="<?php echo $this->getFieldName(); ?>[{{parentIndex}}][{{index}}][selection_price_type]" value="0" />' +
65
+ <?php if ($this->isUsedWebsitePrice()): ?>
66
+ '<input type="hidden" id="<?php echo $this->getFieldId(); ?>_{{index}}_price_scope" name="<?php echo $this->getFieldName(); ?>[{{parentIndex}}][{{index}}][default_price_scope]" value="1" />' +
67
+ <?php endif; ?>
68
+ <?php endif; ?>
69
+ '<td><input class="input-text required-entry validate-zero-or-greater" type="text" name="<?php echo $this->getFieldName() ?>[{{parentIndex}}][{{index}}][selection_qty]" value="{{selection_qty}}"></td>' +
70
+ '<td class="qty-box"><?php echo $this->getQtyTypeSelectHtml() ?></td>' +
71
+ '<td><input class="input-text required-entry validate-zero-or-greater" type="text" name="<?php echo $this->getFieldName() ?>[{{parentIndex}}][{{index}}][position]" value="{{position}}"></td>' +
72
+ '<td class="a-center"><input onclick="bSelection.checkGroup(event)" type="{{option_type}}" class="default" name="<?php echo $this->getFieldName() ?>[{{parentIndex}}][{{index}}][is_default]" value="1" {{checked}}></td>' +
73
+ '<td class="last"><span title="Delete Row"><?php echo $this->getSelectionDeleteButtonHtml() ?></span></td>';
74
+
75
+ Bundle.Selection = Class.create();
76
+ Bundle.Selection.prototype = {
77
+ idLabel : '<?php echo $this->getFieldId() ?>',
78
+ scopePrice : <?php echo (int)$this->isUsedWebsitePrice() ?>,
79
+ templateSyntax : /(^|.|\r|\n)({{(\w+)}})/,
80
+ templateBox : '',
81
+ templateRow : '',
82
+ itemsCount : 0,
83
+ row : null,
84
+ gridSelection : new Hash(),
85
+
86
+ initialize : function() {
87
+ this.templateBox = '<div class="grid tier form-list" id="' + this.idLabel + '_box_{{parentIndex}}">' + bundleTemplateBox + '</div>';
88
+
89
+ this.templateRow = '<tr class="selection" id="' + this.idLabel + '_row_{{index}}">' + bundleTemplateRow + '</tr>';
90
+ },
91
+
92
+ showSearch : function(event) {
93
+ var element = Event.findElement(event, 'div');
94
+ var parts = element.id.split('_');
95
+
96
+ var products = new Array();
97
+
98
+ var inputs = $A($$('#' + element.id + ' tr.selection input.product'));
99
+ for (i=0; i<inputs.length; i++) {
100
+ products.push(inputs[i].value);
101
+ }
102
+
103
+ this.gridSelection.set(parts[2], $H({}));
104
+
105
+ new Ajax.Updater(bOption.idLabel + '_search_' + parts[2], '<?php echo $this->getSelectionSearchUrl() ?>', {
106
+ method: 'post',
107
+ parameters : {'index' : parts[2], 'products[]' : products, 'form_key': FORM_KEY},
108
+ evalScripts : true
109
+ });
110
+
111
+ if (Event.element(event).tagName.toLowerCase() != 'button') {
112
+ var button = Event.element(event).up('button');
113
+ } else {
114
+ var button = Event.element(event);
115
+ }
116
+ button.hide();
117
+ },
118
+
119
+ addRow : function (parentIndex, data) {
120
+ var box = null;
121
+ if (!(box = $(this.idLabel + '_box_' + parentIndex))) {
122
+ this.addBox(parentIndex);
123
+ box = $(this.idLabel + '_box_' + parentIndex);
124
+ } else {
125
+ box.show();
126
+ }
127
+
128
+ var option_type = $(bOption.idLabel + '_' + parentIndex + '_type');
129
+
130
+ if(!data){
131
+ var data = {};
132
+ }
133
+
134
+ if (data.can_read_price != undefined && !data.can_read_price) {
135
+ data.selection_price_value = '';
136
+ } else {
137
+ data.selection_price_value = Number(data.selection_price_value).toFixed(2);
138
+ }
139
+
140
+ data.index = this.itemsCount++;
141
+ data.parentIndex = parentIndex;
142
+
143
+ if (option_type.value == 'multi' || option_type.value == 'checkbox') {
144
+ data.option_type = 'checkbox';
145
+ } else {
146
+ data.option_type = 'radio';
147
+ }
148
+
149
+ if (data.is_default == 1) {
150
+ data.checked = 'checked="checked"';
151
+ }
152
+
153
+ this.template = new Template(this.templateRow, this.templateSyntax);
154
+ var tbody = $$('#' + this.idLabel + '_box_' + parentIndex + ' tbody');
155
+
156
+ Element.insert(tbody[0], {'bottom':this.template.evaluate(data)});
157
+
158
+ if (data.selection_price_type) {
159
+ $A($(this.idLabel + '_'+data.index+'_price_type').options).each(function(option){
160
+ if (option.value==data.selection_price_type) option.selected = true;
161
+ });
162
+ }
163
+
164
+ if (data.selection_price_type) {
165
+ $A($(this.idLabel + '_'+data.index+'_can_change_qty').options).each(function(option){
166
+ if (option.value==data.selection_can_change_qty) option.selected = true;
167
+ });
168
+ }
169
+
170
+ var checkbox = $(this.idLabel + '_'+data.index+'_price_scope');
171
+ if (checkbox && this.scopePrice) {
172
+ if (data.price_scope === undefined) {
173
+ checkbox.up().hide();
174
+ } else if(!data.price_scope) {
175
+ checkbox.checked = true;
176
+ this.addScope(null, checkbox);
177
+ }
178
+ }
179
+
180
+ this.bindScopeCheckbox();
181
+
182
+ if (option_type.value == 'multi' || option_type.value == 'checkbox') {
183
+ /**
184
+ * Hide not needed elements (user defined qty select box)
185
+ */
186
+ inputs = $A($$('#' + this.idLabel + '_box_' + data.parentIndex + ' .qty-box'));
187
+ inputs.each(
188
+ function(elem){
189
+ elem.hide();
190
+ }
191
+ );
192
+ }
193
+
194
+ if (!$('price_type') || $('price_type').value != '1') {
195
+ /**
196
+ * Hide not needed elements (price type select and price input)
197
+ */
198
+ inputs = $A($$('#' + this.idLabel + '_box_' + data.parentIndex + ' .price-type-box'));
199
+ inputs.each(
200
+ function(elem){
201
+ elem.hide();
202
+ }
203
+ );
204
+ }
205
+ },
206
+
207
+ bindScopeCheckbox : function(){
208
+ var checkboxes = $$('.bundle-option-price-scope-checkbox');
209
+ for (var i=0;i<checkboxes.length;i++) {
210
+ if (!$(checkboxes[i]).binded) {
211
+ $(checkboxes[i]).binded = true;
212
+ Event.observe(checkboxes[i], 'click', this.addScope.bind(this));
213
+ }
214
+ }
215
+ },
216
+
217
+ addScope : function(event, element){
218
+ if (element == undefined) {
219
+ element = $(Event.element(event));
220
+ }
221
+ var priceValue = $(element.id.sub('scope', 'value'));
222
+ var priceType = $(element.id.sub('scope', 'type'));
223
+
224
+ if (element.checked) {
225
+ priceValue.disable();
226
+ priceType.disable();
227
+ } else {
228
+ priceValue.enable();
229
+ priceType.enable();
230
+ }
231
+ },
232
+
233
+ addBox : function (parentIndex) {
234
+ var div = $(bOption.idLabel + '_' + parentIndex)
235
+ this.template = new Template(this.templateBox, this.templateSyntax);
236
+ var data = {'parentIndex' : parentIndex};
237
+ Element.insert(div, {'bottom':this.template.evaluate(data)});
238
+ },
239
+
240
+ remove : function(event) {
241
+ var element = Event.findElement(event, 'tr');
242
+ var container = Event.findElement(event, 'div');
243
+
244
+ if (element) {
245
+ Element.select(element, '.delete').each(function(elem){elem.value='1'});
246
+ Element.select(element, ['input', 'select']).each(function(elem){elem.hide()});
247
+ Element.removeClassName(element, 'selection');
248
+ Element.hide(element);
249
+
250
+ if (container) {
251
+ if ($$('#' + container.id + ' tr.selection')) {
252
+ if (!$$('#' + container.id + ' tr.selection').length) {
253
+ container.hide();
254
+ }
255
+ }
256
+ }
257
+ }
258
+ },
259
+
260
+ checkGroup : function(event) {
261
+ var element = Event.element(event);
262
+ if (element.type == 'radio') {
263
+ var box = element.up('div');
264
+
265
+ var inputs = $$('div#' + box.id + ' input.default');
266
+ if (inputs) {
267
+ for (i=0; i< inputs.length; i++) {
268
+ if (inputs[i].name != element.name) {
269
+ inputs[i].checked = false;
270
+ }
271
+ }
272
+ }
273
+ }
274
+ },
275
+
276
+ productGridAddSelected : function(event) {
277
+ var element = Event.findElement(event, 'button');
278
+ var parts = element.id.split('_');
279
+
280
+ $(bOption.idLabel + '_search_' + parts[2]).innerHTML = '';
281
+ $(bOption.idLabel + '_' + parts[2] + '_add_button').show();
282
+
283
+ this.gridSelection.get(parts[2]).each(
284
+ function(pair) {
285
+ var qty = pair.value.get('qty');
286
+ var data = {
287
+ 'name' : pair.value.get('name'),
288
+ 'selection_price_value' : 0,
289
+ 'selection_qty' : (qty == '' ? 1 : qty),
290
+ 'sku' : pair.value.get('sku'),
291
+ 'position' : 0,
292
+ 'product_id' : pair.key,
293
+ 'option_id' : $(bOption.idLabel + '_id_' + parts[2]).value
294
+ };
295
+ bSelection.addRow(parts[2], data);
296
+ }
297
+ );
298
+ },
299
+
300
+ productGridRowInit : function(grid, row){
301
+ var checkbox = $(row).getElementsByClassName('checkbox')[0];
302
+ var inputs = $(row).getElementsByClassName('input-text');
303
+ for (var i = 0; i < inputs.length; i++) {
304
+ inputs[i].checkbox = checkbox;
305
+ Event.observe(inputs[i], 'keyup', this.productGridRowInputChange.bind(this));
306
+ Event.observe(inputs[i], 'change', this.productGridRowInputChange.bind(this));
307
+ }
308
+ },
309
+
310
+ productGridCheckboxCheck : function(grid, element, checked) {
311
+ var id = element.up('table').id.split('_')[4];
312
+ if (element.value > 0) {
313
+ if (element.checked) {
314
+ var tr = element.parentNode.parentNode;
315
+ if (!this.gridSelection.get(id)) {
316
+ this.gridSelection.set(id, new Hash());
317
+ }
318
+ this.gridSelection.get(id).set(element.value, $H({}));
319
+ this.gridSelection.get(id).get(element.value).set('name', tr.select('td.name')[0].innerHTML);
320
+ this.gridSelection.get(id).get(element.value).set('qty', tr.select('input.qty')[0].value);
321
+ this.gridSelection.get(id).get(element.value).set('sku', tr.select('td.sku')[0].innerHTML);
322
+ } else {
323
+ this.gridSelection.get(id).unset(element.value);
324
+ }
325
+ }
326
+ },
327
+
328
+ productGridRowClick : function(grid, event) {
329
+ var trElement = Event.findElement(event, 'tr');
330
+ var isInput = Event.element(event).tagName == 'INPUT';
331
+ if (trElement) {
332
+ var checkbox = Element.select(trElement, 'input');
333
+ if (checkbox[0]) {
334
+ var checked = isInput ? checkbox[0].checked : !checkbox[0].checked;
335
+ grid.setCheckboxChecked(checkbox[0], checked);
336
+ }
337
+ }
338
+ },
339
+
340
+ productGridRowInputChange : function(event) {
341
+ var element = Event.element(event);
342
+ if (!element.checkbox.checked) {
343
+ return;
344
+ }
345
+ var id = element.up('table').id.split('_')[4];
346
+ this.gridSelection.get(id).get(element.checkbox.value).set('qty', element.value);
347
+ }
348
+ }
349
+
350
+ bSelection = new Bundle.Selection();
351
+ //]]>
352
+ </script>
app/design/adminhtml/default/default/template/bundle/sales/creditmemo/create/items/renderer.phtml ADDED
@@ -0,0 +1,411 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Bundle_Block_Adminhtml_Sales_Order_Items_Renderer
30
+ */
31
+ ?>
32
+
33
+ <?php $_item = $this->getItem() ?>
34
+ <?php $items = $this->getChilds($_item); ?>
35
+ <?php $_count = count ($items) ?>
36
+ <?php $_index = 0 ?>
37
+
38
+ <?php $_prevOptionId = '' ?>
39
+
40
+ <?php if($this->getOrderOptions() || $_item->getDescription()): ?>
41
+ <?php $_showlastRow = true ?>
42
+ <?php else: ?>
43
+ <?php $_showlastRow = false ?>
44
+ <?php endif; ?>
45
+
46
+ <?php foreach ($items as $_item): ?>
47
+ <?php $this->setPriceDataObject($_item) ?>
48
+ <?php $attributes = $this->getSelectionAttributes($_item) ?>
49
+ <?php if ($_item->getOrderItem()->getParentItem()): ?>
50
+ <?php if ($_prevOptionId != $attributes['option_id']): ?>
51
+ <tr>
52
+ <td><div class="option-label"><?php echo $attributes['option_label'] ?></div></td>
53
+ <td>&nbsp;</td>
54
+ <td>&nbsp;</td>
55
+ <td>&nbsp;</td>
56
+ <td>&nbsp;</td>
57
+ <td>&nbsp;</td>
58
+ <td>&nbsp;</td>
59
+ <td>&nbsp;</td>
60
+ <td class="last">&nbsp;</td>
61
+ </tr>
62
+ <?php $_prevOptionId = $attributes['option_id'] ?>
63
+ <?php endif; ?>
64
+ <?php endif; ?>
65
+ <tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?>>
66
+ <?php if (!$_item->getOrderItem()->getParentItem()): ?>
67
+ <td><h5 class="title"><?php echo $this->htmlEscape($_item->getName()) ?></h5>
68
+ <div>
69
+ <strong><?php echo $this->helper('sales')->__('SKU') ?>:</strong>
70
+ <?php echo implode('<br />', Mage::helper('catalog')->splitSku($this->htmlEscape($_item->getSku()))); ?>
71
+ </div>
72
+ </td>
73
+ <?php else: ?>
74
+ <td><div class="option-value"><?php echo $this->getValueHtml($_item)?></div></td>
75
+ <?php endif; ?>
76
+ <td class="a-right">
77
+ <?php if ($this->canShowPriceInfo($_item)): ?>
78
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
79
+ <span class="price-excl-tax">
80
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
81
+ <span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
82
+ <?php endif; ?>
83
+
84
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
85
+ <?php
86
+ echo $this->displayPrices(
87
+ $_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
88
+ $_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
89
+ );
90
+ ?>
91
+ <?php else: ?>
92
+ <?php echo $this->displayPrices($_item->getBasePrice(), $_item->getPrice()) ?>
93
+ <?php endif; ?>
94
+
95
+
96
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
97
+ <br />
98
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
99
+ <small>
100
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
101
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
102
+ <?php endforeach; ?>
103
+ </small>
104
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
105
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
106
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
107
+ <?php endforeach; ?>
108
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
109
+ <small>
110
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
111
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
112
+ <?php endforeach; ?>
113
+ </small>
114
+ <?php endif; ?>
115
+
116
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
117
+ <br />
118
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
119
+ <?php
120
+ echo $this->displayPrices(
121
+ $_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
122
+ $_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
123
+ );
124
+ ?>
125
+ </span>
126
+ <?php endif; ?>
127
+ <?php endif; ?>
128
+ </span>
129
+ <br />
130
+ <?php endif; ?>
131
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
132
+ <span class="price-incl-tax">
133
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
134
+ <span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
135
+ <?php endif; ?>
136
+ <?php $_incl = $this->helper('checkout')->getPriceInclTax($_item); ?>
137
+ <?php $_baseIncl = $this->helper('checkout')->getBasePriceInclTax($_item); ?>
138
+
139
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
140
+ <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedAmount(), $_incl+$_item->getWeeeTaxAppliedAmount()); ?>
141
+ <?php else: ?>
142
+ <?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxDisposition(), $_incl-$_item->getWeeeTaxDisposition()) ?>
143
+ <?php endif; ?>
144
+
145
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
146
+ <br />
147
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
148
+ <small>
149
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
150
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
151
+ <?php endforeach; ?>
152
+ </small>
153
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
154
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
155
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
156
+ <?php endforeach; ?>
157
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
158
+ <small>
159
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
160
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
161
+ <?php endforeach; ?>
162
+ </small>
163
+ <?php endif; ?>
164
+
165
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
166
+ <br />
167
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedAmount(), $_incl+$_item->getWeeeTaxAppliedAmount()); ?></span>
168
+ <?php endif; ?>
169
+ <?php endif; ?>
170
+ </span>
171
+ <?php endif; ?>
172
+ <?php else: ?>
173
+ &nbsp;
174
+ <?php endif; ?>
175
+ </td>
176
+ <td>
177
+ <?php if ($this->canShowPriceInfo($_item)): ?>
178
+ <table cellspacing="0" class="qty-table">
179
+ <tr>
180
+ <td><?php echo Mage::helper('sales')->__('Ordered') ?></td>
181
+ <td><strong><?php echo $_item->getOrderItem()->getQtyOrdered()*1 ?></strong></td>
182
+ </tr>
183
+ <?php if ((float) $_item->getOrderItem()->getQtyInvoiced()): ?>
184
+ <tr>
185
+ <td><?php echo Mage::helper('sales')->__('Invoiced') ?></td>
186
+ <td><strong><?php echo $_item->getOrderItem()->getQtyInvoiced()*1 ?></strong></td>
187
+ </tr>
188
+ <?php endif; ?>
189
+ <?php if ((float) $_item->getOrderItem()->getQtyShipped() && $this->isShipmentSeparately($_item)): ?>
190
+ <tr>
191
+ <td><?php echo Mage::helper('sales')->__('Shipped') ?></td>
192
+ <td><strong><?php echo $_item->getOrderItem()->getQtyShipped()*1 ?></strong></td>
193
+ </tr>
194
+ <?php endif; ?>
195
+ <?php if ((float) $_item->getOrderItem()->getQtyRefunded()): ?>
196
+ <tr>
197
+ <td><?php echo Mage::helper('sales')->__('Refunded') ?></td>
198
+ <td><strong><?php echo $_item->getOrderItem()->getQtyRefunded()*1 ?></strong></td>
199
+ </tr>
200
+ <?php endif; ?>
201
+ <?php if ((float) $_item->getOrderItem()->getQtyCanceled()): ?>
202
+ <tr>
203
+ <td><?php echo Mage::helper('sales')->__('Canceled') ?></td>
204
+ <td><strong><?php echo $_item->getOrderItem()->getQtyCanceled()*1 ?></strong></td>
205
+ </tr>
206
+ <?php endif; ?>
207
+ </table>
208
+ <?php elseif ($this->isShipmentSeparately($_item)): ?>
209
+ <table cellspacing="0" class="qty-table">
210
+ <tr>
211
+ <td><?php echo Mage::helper('sales')->__('Ordered') ?></td>
212
+ <td><strong><?php echo $_item->getOrderItem()->getQtyOrdered()*1 ?></strong></td>
213
+ </tr>
214
+ <?php if ((float) $_item->getOrderItem()->getQtyShipped()): ?>
215
+ <tr>
216
+ <td><?php echo Mage::helper('sales')->__('Shipped') ?></td>
217
+ <td><strong><?php echo $_item->getOrderItem()->getQtyShipped()*1 ?></strong></td>
218
+ </tr>
219
+ <?php endif; ?>
220
+ </table>
221
+ <?php else: ?>
222
+ &nbsp;
223
+ <?php endif; ?>
224
+ </td>
225
+ <?php if ($this->canParentReturnToStock($_item)) : ?>
226
+ <td class="a-center">
227
+ <?php if ($this->canShowPriceInfo($_item)): ?>
228
+ <?php if ($this->canReturnItemToStock($_item)) : ?>
229
+ <input type="checkbox" name="creditmemo[items][<?php echo $_item->getOrderItemId() ?>][back_to_stock]" value="1"<?php if ($_item->getBackToStock()):?> checked="checked"<?php endif;?> />
230
+ <?php endif; ?>
231
+ <?php else: ?>
232
+ &nbsp;
233
+ <?php endif; ?>
234
+ </td>
235
+ <?php endif; ?>
236
+ <td class="a-center">
237
+ <?php if ($this->canShowPriceInfo($_item)): ?>
238
+ <?php if ($this->canEditQty()) : ?>
239
+ <input type="text" class="input-text qty-input" name="creditmemo[items][<?php echo $_item->getOrderItemId() ?>][qty]" value="<?php echo $_item->getQty()*1 ?>" />
240
+ <?php else: ?>
241
+ <?php echo $_item->getQty()*1 ?>
242
+ <?php endif; ?>
243
+ <?php else: ?>
244
+ &nbsp;
245
+ <?php endif; ?>
246
+ </td>
247
+ <td class="a-right">
248
+ <?php if ($this->canShowPriceInfo($_item)): ?>
249
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
250
+ <span class="price-excl-tax">
251
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
252
+ <span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
253
+ <?php endif; ?>
254
+
255
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
256
+ <?php
257
+ echo $this->displayPrices(
258
+ $_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
259
+ $_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
260
+ );
261
+ ?>
262
+ <?php else: ?>
263
+ <?php echo $this->displayPrices($_item->getBaseRowTotal(), $_item->getRowTotal()) ?>
264
+ <?php endif; ?>
265
+
266
+
267
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
268
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
269
+ <small>
270
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
271
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
272
+ <?php endforeach; ?>
273
+ </small>
274
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
275
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
276
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
277
+ <?php endforeach; ?>
278
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
279
+ <small>
280
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
281
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
282
+ <?php endforeach; ?>
283
+ </small>
284
+ <?php endif; ?>
285
+
286
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
287
+ <br />
288
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
289
+ <?php
290
+ echo $this->displayPrices(
291
+ $_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
292
+ $_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
293
+ );
294
+ ?>
295
+ </span>
296
+ <?php endif; ?>
297
+ <?php endif; ?>
298
+ </span>
299
+ <br />
300
+ <?php endif; ?>
301
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
302
+ <span class="price-incl-tax">
303
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
304
+ <span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
305
+ <?php endif; ?>
306
+ <?php $_incl = $this->helper('checkout')->getSubtotalInclTax($_item); ?>
307
+ <?php $_baseIncl = $this->helper('checkout')->getBaseSubtotalInclTax($_item); ?>
308
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
309
+ <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedRowAmount(), $_incl+$_item->getWeeeTaxAppliedRowAmount()); ?>
310
+ <?php else: ?>
311
+ <?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxRowDisposition(), $_incl-$_item->getWeeeTaxRowDisposition()) ?>
312
+ <?php endif; ?>
313
+
314
+
315
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
316
+
317
+ <br />
318
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
319
+ <small>
320
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
321
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
322
+ <?php endforeach; ?>
323
+ </small>
324
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
325
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
326
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
327
+ <?php endforeach; ?>
328
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
329
+ <small>
330
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
331
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
332
+ <?php endforeach; ?>
333
+ </small>
334
+ <?php endif; ?>
335
+
336
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
337
+ <br /><span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedRowAmount(), $_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span>
338
+ <?php endif; ?>
339
+ <?php endif; ?>
340
+ </span>
341
+ <?php endif; ?>
342
+ </span>
343
+ <?php else: ?>
344
+ &nbsp;
345
+ <?php endif; ?>
346
+ </td>
347
+ <td class="a-right">
348
+ <?php if ($this->canShowPriceInfo($_item)): ?>
349
+ <?php echo $this->displayPriceAttribute('tax_amount') ?>
350
+ <?php else: ?>
351
+ &nbsp;
352
+ <?php endif; ?>
353
+ </td>
354
+ <td class="a-right">
355
+ <?php if ($this->canShowPriceInfo($_item)): ?>
356
+ <?php echo $this->displayPriceAttribute('discount_amount') ?>
357
+ <?php else: ?>
358
+ &nbsp;
359
+ <?php endif; ?>
360
+ </td>
361
+ <td class="a-right last">
362
+ <?php if ($this->canShowPriceInfo($_item)): ?>
363
+ <?php echo $this->displayPrices(
364
+ $_item->getBaseRowTotal()+$_item->getBaseTaxAmount()-$_item->getBaseDiscountAmount()+$_item->getBaseWeeeTaxAppliedRowAmount(),
365
+ $_item->getRowTotal()+$_item->getTaxAmount()-$_item->getDiscountAmount()+$_item->getWeeeTaxAppliedRowAmount()
366
+ ) ?>
367
+ <?php else: ?>
368
+ &nbsp;
369
+ <?php endif; ?>
370
+ </td>
371
+ </tr>
372
+ <?php endforeach; ?>
373
+ <?php if($_showlastRow): ?>
374
+ <tr class="border">
375
+ <td>
376
+ <?php if ($this->getOrderOptions($_item->getOrderItem())): ?>
377
+ <dl class="item-options">
378
+ <?php foreach ($this->getOrderOptions($_item->getOrderItem()) as $option): ?>
379
+ <dt><?php echo $option['label'] ?></dt>
380
+ <dd>
381
+ <?php if (isset($option['custom_view']) && $option['custom_view']): ?>
382
+ <?php echo $option['value'];?>
383
+ <?php else: ?>
384
+ <?php echo Mage::helper('core/string')->truncate($option['value'], 55, '', $_remainder);?>
385
+ <?php if ($_remainder):?>
386
+ ... <span id="<?php echo $_id = 'id' . uniqid()?>"><?php echo $_remainder ?></span>
387
+ <script type="text/javascript">
388
+ $('<?php echo $_id ?>').hide();
389
+ $('<?php echo $_id ?>').up().observe('mouseover', function(){$('<?php echo $_id ?>').show();});
390
+ $('<?php echo $_id ?>').up().observe('mouseout', function(){$('<?php echo $_id ?>').hide();});
391
+ </script>
392
+ <?php endif;?>
393
+ <?php endif;?>
394
+ </dd>
395
+ <?php endforeach; ?>
396
+ </dl>
397
+ <?php else: ?>
398
+ &nbsp;
399
+ <?php endif; ?>
400
+ <?php echo $this->htmlEscape($_item->getDescription()) ?>
401
+ </td>
402
+ <td>&nbsp;</td>
403
+ <td>&nbsp;</td>
404
+ <td>&nbsp;</td>
405
+ <td>&nbsp;</td>
406
+ <td>&nbsp;</td>
407
+ <td>&nbsp;</td>
408
+ <td>&nbsp;</td>
409
+ <td class="last">&nbsp;</td>
410
+ </tr>
411
+ <?php endif; ?>
app/design/adminhtml/default/default/template/bundle/sales/creditmemo/view/items/renderer.phtml ADDED
@@ -0,0 +1,341 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Bundle_Block_Adminhtml_Sales_Order_Items_Renderer
30
+ */
31
+ ?>
32
+
33
+ <?php $_item = $this->getItem() ?>
34
+ <?php $items = $this->getChilds($_item); ?>
35
+ <?php $_count = count ($items) ?>
36
+ <?php $_index = 0 ?>
37
+
38
+ <?php $_prevOptionId = '' ?>
39
+
40
+ <?php if($this->getOrderOptions() || $_item->getDescription()): ?>
41
+ <?php $_showlastRow = true ?>
42
+ <?php else: ?>
43
+ <?php $_showlastRow = false ?>
44
+ <?php endif; ?>
45
+
46
+ <?php foreach ($items as $_item): ?>
47
+ <?php $this->setPriceDataObject($_item) ?>
48
+ <?php $attributes = $this->getSelectionAttributes($_item) ?>
49
+ <?php if ($_item->getOrderItem()->getParentItem()): ?>
50
+ <?php if ($_prevOptionId != $attributes['option_id']): ?>
51
+ <tr>
52
+ <td><div class="option-label"><?php echo $attributes['option_label'] ?></div></td>
53
+ <td>&nbsp;</td>
54
+ <td>&nbsp;</td>
55
+ <td>&nbsp;</td>
56
+ <td>&nbsp;</td>
57
+ <td>&nbsp;</td>
58
+ <td class="last">&nbsp;</td>
59
+ </tr>
60
+ <?php $_prevOptionId = $attributes['option_id'] ?>
61
+ <?php endif; ?>
62
+ <?php endif; ?>
63
+ <tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?>>
64
+ <?php if (!$_item->getOrderItem()->getParentItem()): ?>
65
+ <td><h5 class="title"><?php echo $this->htmlEscape($_item->getName()) ?></h5>
66
+ <div>
67
+ <strong><?php echo $this->helper('sales')->__('SKU') ?>:</strong>
68
+ <?php echo implode('<br />', Mage::helper('catalog')->splitSku($this->htmlEscape($_item->getSku()))); ?>
69
+ </div>
70
+ </td>
71
+ <?php else: ?>
72
+ <td><div class="option-value"><?php echo $this->getValueHtml($_item)?></div></td>
73
+ <?php endif; ?>
74
+ <td class="a-right">
75
+ <?php if ($this->canShowPriceInfo($_item)): ?>
76
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
77
+ <span class="price-excl-tax">
78
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
79
+ <span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
80
+ <?php endif; ?>
81
+
82
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
83
+ <?php
84
+ echo $this->displayPrices(
85
+ $_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
86
+ $_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
87
+ );
88
+ ?>
89
+ <?php else: ?>
90
+ <?php echo $this->displayPrices($_item->getBasePrice(), $_item->getPrice()) ?>
91
+ <?php endif; ?>
92
+
93
+
94
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
95
+ <br />
96
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
97
+ <small>
98
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
99
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
100
+ <?php endforeach; ?>
101
+ </small>
102
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
103
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
104
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
105
+ <?php endforeach; ?>
106
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
107
+ <small>
108
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
109
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
110
+ <?php endforeach; ?>
111
+ </small>
112
+ <?php endif; ?>
113
+
114
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
115
+ <br />
116
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
117
+ <?php
118
+ echo $this->displayPrices(
119
+ $_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
120
+ $_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
121
+ );
122
+ ?>
123
+ </span>
124
+ <?php endif; ?>
125
+ <?php endif; ?>
126
+ </span>
127
+ <br />
128
+ <?php endif; ?>
129
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
130
+ <span class="price-incl-tax">
131
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
132
+ <span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
133
+ <?php endif; ?>
134
+ <?php $_incl = $this->helper('checkout')->getPriceInclTax($_item); ?>
135
+ <?php $_baseIncl = $this->helper('checkout')->getBasePriceInclTax($_item); ?>
136
+
137
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
138
+ <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedAmount(), $_incl+$_item->getWeeeTaxAppliedAmount()); ?>
139
+ <?php else: ?>
140
+ <?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxDisposition(), $_incl-$_item->getWeeeTaxDisposition()) ?>
141
+ <?php endif; ?>
142
+
143
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
144
+ <br />
145
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
146
+ <small>
147
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
148
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
149
+ <?php endforeach; ?>
150
+ </small>
151
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
152
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
153
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
154
+ <?php endforeach; ?>
155
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
156
+ <small>
157
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
158
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
159
+ <?php endforeach; ?>
160
+ </small>
161
+ <?php endif; ?>
162
+
163
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
164
+ <br />
165
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedAmount(), $_incl+$_item->getWeeeTaxAppliedAmount()); ?></span>
166
+ <?php endif; ?>
167
+ <?php endif; ?>
168
+ </span>
169
+ <?php endif; ?>
170
+ <?php else: ?>
171
+ &nbsp;
172
+ <?php endif; ?>
173
+ </td>
174
+ <td class="a-center">
175
+ <?php if ($this->canShowPriceInfo($_item)): ?>
176
+ <?php echo $_item->getQty()*1 ?>
177
+ <?php else: ?>
178
+ &nbsp;
179
+ <?php endif; ?>
180
+ </td>
181
+ <td class="a-right">
182
+ <?php if ($this->canShowPriceInfo($_item)): ?>
183
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
184
+ <span class="price-excl-tax">
185
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
186
+ <span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
187
+ <?php endif; ?>
188
+
189
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
190
+ <?php
191
+ echo $this->displayPrices(
192
+ $_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
193
+ $_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
194
+ );
195
+ ?>
196
+ <?php else: ?>
197
+ <?php echo $this->displayPrices($_item->getBaseRowTotal(), $_item->getRowTotal()) ?>
198
+ <?php endif; ?>
199
+
200
+
201
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
202
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
203
+ <small>
204
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
205
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
206
+ <?php endforeach; ?>
207
+ </small>
208
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
209
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
210
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
211
+ <?php endforeach; ?>
212
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
213
+ <small>
214
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
215
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
216
+ <?php endforeach; ?>
217
+ </small>
218
+ <?php endif; ?>
219
+
220
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
221
+ <br />
222
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
223
+ <?php
224
+ echo $this->displayPrices(
225
+ $_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
226
+ $_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
227
+ );
228
+ ?>
229
+ </span>
230
+ <?php endif; ?>
231
+ <?php endif; ?>
232
+ </span>
233
+ <br />
234
+ <?php endif; ?>
235
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
236
+ <span class="price-incl-tax">
237
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
238
+ <span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
239
+ <?php endif; ?>
240
+ <?php $_incl = $this->helper('checkout')->getSubtotalInclTax($_item); ?>
241
+ <?php $_baseIncl = $this->helper('checkout')->getBaseSubtotalInclTax($_item); ?>
242
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
243
+ <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedRowAmount(), $_incl+$_item->getWeeeTaxAppliedRowAmount()); ?>
244
+ <?php else: ?>
245
+ <?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxRowDisposition(), $_incl-$_item->getWeeeTaxRowDisposition()) ?>
246
+ <?php endif; ?>
247
+
248
+
249
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
250
+
251
+ <br />
252
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
253
+ <small>
254
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
255
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
256
+ <?php endforeach; ?>
257
+ </small>
258
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
259
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
260
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
261
+ <?php endforeach; ?>
262
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
263
+ <small>
264
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
265
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
266
+ <?php endforeach; ?>
267
+ </small>
268
+ <?php endif; ?>
269
+
270
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
271
+ <br /><span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedRowAmount(), $_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span>
272
+ <?php endif; ?>
273
+ <?php endif; ?>
274
+ </span>
275
+ <?php endif; ?>
276
+ </span>
277
+ <?php else: ?>
278
+ &nbsp;
279
+ <?php endif; ?>
280
+ </td>
281
+ <td class="a-right">
282
+ <?php if ($this->canShowPriceInfo($_item)): ?>
283
+ <?php echo $this->displayPriceAttribute('tax_amount') ?>
284
+ <?php else: ?>
285
+ &nbsp;
286
+ <?php endif; ?>
287
+ </td>
288
+ <td class="a-right">
289
+ <?php if ($this->canShowPriceInfo($_item)): ?>
290
+ <?php echo $this->displayPriceAttribute('discount_amount') ?>
291
+ <?php else: ?>
292
+ &nbsp;
293
+ <?php endif; ?>
294
+ </td>
295
+ <td class="a-right last">
296
+ <?php if ($this->canShowPriceInfo($_item)): ?>
297
+ <?php echo $this->displayPrices(
298
+ $_item->getBaseRowTotal()-$_item->getBaseDiscountAmount()+$_item->getBaseTaxAmount()+$_item->getBaseWeeeTaxAppliedRowAmount(),
299
+ $_item->getRowTotal()-$_item->getDiscountAmount()+$_item->getTaxAmount()+$_item->getWeeeTaxAppliedRowAmount()
300
+ ) ?>
301
+ <?php else: ?>
302
+ &nbsp;
303
+ <?php endif; ?>
304
+ </td>
305
+ </tr>
306
+ <?php endforeach; ?>
307
+ <?php if($_showlastRow): ?>
308
+ <tr class="border">
309
+ <td>
310
+ <?php if ($this->getOrderOptions()): ?>
311
+ <dl class="item-options">
312
+ <?php foreach ($this->getOrderOptions() as $option): ?>
313
+ <dt><?php echo $option['label'] ?></dt>
314
+ <dd>
315
+ <?php if (isset($option['custom_view']) && $option['custom_view']): ?>
316
+ <?php echo $option['value'];?>
317
+ <?php else: ?>
318
+ <?php echo Mage::helper('core/string')->truncate($option['value'], 55, '', $_remainder);?>
319
+ <?php if ($_remainder):?>
320
+ ... <span id="<?php echo $_id = 'id' . uniqid()?>"><?php echo $_remainder ?></span>
321
+ <script type="text/javascript">
322
+ $('<?php echo $_id ?>').hide();
323
+ $('<?php echo $_id ?>').up().observe('mouseover', function(){$('<?php echo $_id ?>').show();});
324
+ $('<?php echo $_id ?>').up().observe('mouseout', function(){$('<?php echo $_id ?>').hide();});
325
+ </script>
326
+ <?php endif;?>
327
+ <?php endif;?>
328
+ </dd>
329
+ <?php endforeach; ?>
330
+ </dl>
331
+ <?php endif; ?>
332
+ <?php echo $this->htmlEscape($this->getItem()->getDescription()) ?>
333
+ </td>
334
+ <td>&nbsp;</td>
335
+ <td>&nbsp;</td>
336
+ <td>&nbsp;</td>
337
+ <td>&nbsp;</td>
338
+ <td>&nbsp;</td>
339
+ <td class="last">&nbsp;</td>
340
+ </tr>
341
+ <?php endif; ?>
app/design/adminhtml/default/default/template/bundle/sales/invoice/create/items/renderer.phtml ADDED
@@ -0,0 +1,398 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Bundle_Block_Adminhtml_Sales_Order_Items_Renderer
30
+ */
31
+ ?>
32
+
33
+ <?php $_item = $this->getItem() ?>
34
+ <?php $items = $this->getChilds($_item); ?>
35
+ <?php $_count = count ($items) ?>
36
+ <?php $_index = 0 ?>
37
+
38
+ <?php $_prevOptionId = '' ?>
39
+
40
+ <?php if($this->getOrderOptions() || $_item->getDescription()): ?>
41
+ <?php $_showlastRow = true ?>
42
+ <?php else: ?>
43
+ <?php $_showlastRow = false ?>
44
+ <?php endif; ?>
45
+
46
+ <?php foreach ($items as $_item): ?>
47
+ <?php $this->setPriceDataObject($_item) ?>
48
+ <?php if ($_item->getOrderItem()->getParentItem()): ?>
49
+ <?php $attributes = $this->getSelectionAttributes($_item) ?>
50
+ <?php if ($_prevOptionId != $attributes['option_id']): ?>
51
+ <tr>
52
+ <td><div class="option-label"><?php echo $attributes['option_label'] ?></div></td>
53
+ <td>&nbsp;</td>
54
+ <td>&nbsp;</td>
55
+ <td>&nbsp;</td>
56
+ <td>&nbsp;</td>
57
+ <td>&nbsp;</td>
58
+ <td>&nbsp;</td>
59
+ <td class="last">&nbsp;</td>
60
+ </tr>
61
+ <?php $_prevOptionId = $attributes['option_id'] ?>
62
+ <?php endif; ?>
63
+ <?php endif; ?>
64
+ <tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?>>
65
+ <?php if (!$_item->getOrderItem()->getParentItem()): ?>
66
+ <td><h5 class="title"><?php echo $this->htmlEscape($_item->getName()) ?></h5>
67
+ <div>
68
+ <strong><?php echo $this->helper('sales')->__('SKU') ?>:</strong>
69
+ <?php echo implode('<br />', Mage::helper('catalog')->splitSku($this->htmlEscape($_item->getSku()))); ?>
70
+ </div>
71
+ </td>
72
+ <?php else: ?>
73
+ <td><div class="option-value"><?php echo $this->getValueHtml($_item)?></div></td>
74
+ <?php endif; ?>
75
+ <td class="a-right">
76
+ <?php if ($this->canShowPriceInfo($_item)): ?>
77
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
78
+ <span class="price-excl-tax">
79
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
80
+ <span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
81
+ <?php endif; ?>
82
+
83
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
84
+ <?php
85
+ echo $this->displayPrices(
86
+ $_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
87
+ $_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
88
+ );
89
+ ?>
90
+ <?php else: ?>
91
+ <?php echo $this->displayPrices($_item->getBasePrice(), $_item->getPrice()) ?>
92
+ <?php endif; ?>
93
+
94
+
95
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
96
+ <br />
97
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
98
+ <small>
99
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
100
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
101
+ <?php endforeach; ?>
102
+ </small>
103
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
104
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
105
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
106
+ <?php endforeach; ?>
107
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
108
+ <small>
109
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
110
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
111
+ <?php endforeach; ?>
112
+ </small>
113
+ <?php endif; ?>
114
+
115
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
116
+ <br />
117
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
118
+ <?php
119
+ echo $this->displayPrices(
120
+ $_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
121
+ $_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
122
+ );
123
+ ?>
124
+ </span>
125
+ <?php endif; ?>
126
+ <?php endif; ?>
127
+ </span>
128
+ <br />
129
+ <?php endif; ?>
130
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
131
+ <span class="price-incl-tax">
132
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
133
+ <span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
134
+ <?php endif; ?>
135
+ <?php $_incl = $this->helper('checkout')->getPriceInclTax($_item); ?>
136
+ <?php $_baseIncl = $this->helper('checkout')->getBasePriceInclTax($_item); ?>
137
+
138
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
139
+ <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedAmount(), $_incl+$_item->getWeeeTaxAppliedAmount()); ?>
140
+ <?php else: ?>
141
+ <?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxDisposition(), $_incl-$_item->getWeeeTaxDisposition()) ?>
142
+ <?php endif; ?>
143
+
144
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
145
+ <br />
146
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
147
+ <small>
148
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
149
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
150
+ <?php endforeach; ?>
151
+ </small>
152
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
153
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
154
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
155
+ <?php endforeach; ?>
156
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
157
+ <small>
158
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
159
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
160
+ <?php endforeach; ?>
161
+ </small>
162
+ <?php endif; ?>
163
+
164
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
165
+ <br />
166
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedAmount(), $_incl+$_item->getWeeeTaxAppliedAmount()); ?></span>
167
+ <?php endif; ?>
168
+ <?php endif; ?>
169
+ </span>
170
+ <?php endif; ?>
171
+ <?php else: ?>
172
+ &nbsp;
173
+ <?php endif; ?>
174
+ </td>
175
+ <td>
176
+ <?php if ($this->canShowPriceInfo($_item)): ?>
177
+ <table cellspacing="0" class="qty-table">
178
+ <tr>
179
+ <td><?php echo Mage::helper('sales')->__('Ordered') ?></td>
180
+ <td><strong><?php echo $_item->getOrderItem()->getQtyOrdered()*1 ?></strong></td>
181
+ </tr>
182
+ <?php if ((float) $_item->getOrderItem()->getQtyInvoiced()): ?>
183
+ <tr>
184
+ <td><?php echo Mage::helper('sales')->__('Invoiced') ?></td>
185
+ <td><strong><?php echo $_item->getOrderItem()->getQtyInvoiced()*1 ?></strong></td>
186
+ </tr>
187
+ <?php endif; ?>
188
+ <?php if ((float) $_item->getOrderItem()->getQtyShipped() && $this->isShipmentSeparately($_item)): ?>
189
+ <tr>
190
+ <td><?php echo Mage::helper('sales')->__('Shipped') ?></td>
191
+ <td><strong><?php echo $_item->getOrderItem()->getQtyShipped()*1 ?></strong></td>
192
+ </tr>
193
+ <?php endif; ?>
194
+ <?php if ((float) $_item->getOrderItem()->getQtyRefunded()): ?>
195
+ <tr>
196
+ <td><?php echo Mage::helper('sales')->__('Refunded') ?></td>
197
+ <td><strong><?php echo $_item->getOrderItem()->getQtyRefunded()*1 ?></strong></td>
198
+ </tr>
199
+ <?php endif; ?>
200
+ <?php if ((float) $_item->getOrderItem()->getQtyCanceled()): ?>
201
+ <tr>
202
+ <td><?php echo Mage::helper('sales')->__('Canceled') ?></td>
203
+ <td><strong><?php echo $_item->getOrderItem()->getQtyCanceled()*1 ?></strong></td>
204
+ </tr>
205
+ <?php endif; ?>
206
+ </table>
207
+ <?php elseif ($this->isShipmentSeparately($_item)): ?>
208
+ <table cellspacing="0" class="qty-table">
209
+ <tr>
210
+ <td><?php echo Mage::helper('sales')->__('Ordered') ?></td>
211
+ <td><strong><?php echo $_item->getOrderItem()->getQtyOrdered()*1 ?></strong></td>
212
+ </tr>
213
+ <?php if ((float) $_item->getOrderItem()->getQtyShipped()): ?>
214
+ <tr>
215
+ <td><?php echo Mage::helper('sales')->__('Shipped') ?></td>
216
+ <td><strong><?php echo $_item->getOrderItem()->getQtyShipped()*1 ?></strong></td>
217
+ </tr>
218
+ <?php endif; ?>
219
+ </table>
220
+ <?php else: ?>
221
+ &nbsp;
222
+ <?php endif; ?>
223
+ </td>
224
+ <td class="a-center">
225
+ <?php if ($this->canShowPriceInfo($_item)): ?>
226
+ <?php if ($this->canEditQty()) : ?>
227
+ <input type="text" class="input-text qty-input" name="invoice[items][<?php echo $_item->getOrderItemId() ?>]" value="<?php echo $_item->getQty()*1 ?>" />
228
+ <?php else : ?>
229
+ <?php echo $_item->getQty()*1 ?>
230
+ <?php endif; ?>
231
+ <?php else: ?>
232
+ &nbsp;
233
+ <?php endif; ?>
234
+ </td>
235
+ <td class="a-right">
236
+ <?php if ($this->canShowPriceInfo($_item)): ?>
237
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
238
+ <span class="price-excl-tax">
239
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
240
+ <span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
241
+ <?php endif; ?>
242
+
243
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
244
+ <?php
245
+ echo $this->displayPrices(
246
+ $_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
247
+ $_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
248
+ );
249
+ ?>
250
+ <?php else: ?>
251
+ <?php echo $this->displayPrices($_item->getBaseRowTotal(), $_item->getRowTotal()) ?>
252
+ <?php endif; ?>
253
+
254
+
255
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
256
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
257
+ <small>
258
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
259
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
260
+ <?php endforeach; ?>
261
+ </small>
262
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
263
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
264
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
265
+ <?php endforeach; ?>
266
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
267
+ <small>
268
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
269
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
270
+ <?php endforeach; ?>
271
+ </small>
272
+ <?php endif; ?>
273
+
274
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
275
+ <br />
276
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
277
+ <?php
278
+ echo $this->displayPrices(
279
+ $_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
280
+ $_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
281
+ );
282
+ ?>
283
+ </span>
284
+ <?php endif; ?>
285
+ <?php endif; ?>
286
+ </span>
287
+ <br />
288
+ <?php endif; ?>
289
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
290
+ <span class="price-incl-tax">
291
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
292
+ <span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
293
+ <?php endif; ?>
294
+ <?php $_incl = $this->helper('checkout')->getSubtotalInclTax($_item); ?>
295
+ <?php $_baseIncl = $this->helper('checkout')->getBaseSubtotalInclTax($_item); ?>
296
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
297
+ <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedRowAmount(), $_incl+$_item->getWeeeTaxAppliedRowAmount()); ?>
298
+ <?php else: ?>
299
+ <?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxRowDisposition(), $_incl-$_item->getWeeeTaxRowDisposition()) ?>
300
+ <?php endif; ?>
301
+
302
+
303
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
304
+
305
+ <br />
306
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
307
+ <small>
308
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
309
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
310
+ <?php endforeach; ?>
311
+ </small>
312
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
313
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
314
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
315
+ <?php endforeach; ?>
316
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
317
+ <small>
318
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
319
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
320
+ <?php endforeach; ?>
321
+ </small>
322
+ <?php endif; ?>
323
+
324
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
325
+ <br /><span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedRowAmount(), $_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span>
326
+ <?php endif; ?>
327
+ <?php endif; ?>
328
+ </span>
329
+ <?php endif; ?>
330
+ </span>
331
+ <?php else: ?>
332
+ &nbsp;
333
+ <?php endif; ?>
334
+ </td>
335
+ <td class="a-right">
336
+ <?php if ($this->canShowPriceInfo($_item)): ?>
337
+ <?php echo $this->displayPriceAttribute('tax_amount') ?>
338
+ <?php else: ?>
339
+ &nbsp;
340
+ <?php endif; ?>
341
+ </td>
342
+ <td class="a-right">
343
+ <?php if ($this->canShowPriceInfo($_item)): ?>
344
+ <?php echo $this->displayPriceAttribute('discount_amount') ?>
345
+ <?php else: ?>
346
+ &nbsp;
347
+ <?php endif; ?>
348
+ </td>
349
+ <td class="a-right last">
350
+ <?php if ($this->canShowPriceInfo($_item)): ?>
351
+ <?php echo $this->displayPrices(
352
+ $_item->getBaseRowTotal()+$_item->getBaseTaxAmount()-$_item->getBaseDiscountAmount()+$_item->getBaseWeeeTaxAppliedRowAmount(),
353
+ $_item->getRowTotal()+$_item->getTaxAmount()-$_item->getDiscountAmount()+$_item->getWeeeTaxAppliedRowAmount()
354
+ ) ?>
355
+ <?php else: ?>
356
+ &nbsp;
357
+ <?php endif; ?>
358
+ </td>
359
+ </tr>
360
+ <?php endforeach; ?>
361
+ <?php if($_showlastRow): ?>
362
+ <tr class="border">
363
+ <td>
364
+ <?php if ($this->getOrderOptions($_item->getOrderItem())): ?>
365
+ <dl class="item-options">
366
+ <?php foreach ($this->getOrderOptions($_item->getOrderItem()) as $option): ?>
367
+ <dt><?php echo $option['label'] ?></dt>
368
+ <dd>
369
+ <?php if (isset($option['custom_view']) && $option['custom_view']): ?>
370
+ <?php echo $option['value'];?>
371
+ <?php else: ?>
372
+ <?php echo Mage::helper('core/string')->truncate($option['value'], 55, '', $_remainder);?>
373
+ <?php if ($_remainder):?>
374
+ ... <span id="<?php echo $_id = 'id' . uniqid()?>"><?php echo $_remainder ?></span>
375
+ <script type="text/javascript">
376
+ $('<?php echo $_id ?>').hide();
377
+ $('<?php echo $_id ?>').up().observe('mouseover', function(){$('<?php echo $_id ?>').show();});
378
+ $('<?php echo $_id ?>').up().observe('mouseout', function(){$('<?php echo $_id ?>').hide();});
379
+ </script>
380
+ <?php endif;?>
381
+ <?php endif;?>
382
+ </dd>
383
+ <?php endforeach; ?>
384
+ </dl>
385
+ <?php else: ?>
386
+ &nbsp;
387
+ <?php endif; ?>
388
+ <?php echo $this->htmlEscape($_item->getDescription()) ?>
389
+ </td>
390
+ <td>&nbsp;</td>
391
+ <td>&nbsp;</td>
392
+ <td>&nbsp;</td>
393
+ <td>&nbsp;</td>
394
+ <td>&nbsp;</td>
395
+ <td>&nbsp;</td>
396
+ <td class="last">&nbsp;</td>
397
+ </tr>
398
+ <?php endif; ?>
app/design/adminhtml/default/default/template/bundle/sales/invoice/view/items/renderer.phtml ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Bundle_Block_Adminhtml_Sales_Order_Items_Renderer
30
+ */
31
+ ?>
32
+
33
+ <?php $_item = $this->getItem() ?>
34
+ <?php $items = $this->getChilds($_item); ?>
35
+ <?php $_count = count ($items) ?>
36
+ <?php $_index = 0 ?>
37
+
38
+ <?php $_prevOptionId = '' ?>
39
+
40
+ <?php if($this->getOrderOptions() || $_item->getDescription()): ?>
41
+ <?php $_showlastRow = true ?>
42
+ <?php else: ?>
43
+ <?php $_showlastRow = false ?>
44
+ <?php endif; ?>
45
+
46
+ <?php foreach ($items as $_item): ?>
47
+ <?php $this->setPriceDataObject($_item) ?>
48
+ <?php if ($_item->getOrderItem()->getParentItem()): ?>
49
+ <?php $attributes = $this->getSelectionAttributes($_item) ?>
50
+ <?php if ($_prevOptionId != $attributes['option_id']): ?>
51
+ <tr>
52
+ <td><div class="option-label"><?php echo $attributes['option_label'] ?></div></td>
53
+ <td>&nbsp;</td>
54
+ <td>&nbsp;</td>
55
+ <td>&nbsp;</td>
56
+ <td>&nbsp;</td>
57
+ <td>&nbsp;</td>
58
+ <td class="last">&nbsp;</td>
59
+ </tr>
60
+ <?php $_prevOptionId = $attributes['option_id'] ?>
61
+ <?php endif; ?>
62
+ <?php endif; ?>
63
+ <tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?>>
64
+ <?php if (!$_item->getOrderItem()->getParentItem()): ?>
65
+ <td><h5 class="title"><?php echo $this->htmlEscape($_item->getName()) ?></h5>
66
+ <div>
67
+ <strong><?php echo $this->helper('sales')->__('SKU') ?>:</strong>
68
+ <?php echo implode('<br />', Mage::helper('catalog')->splitSku($this->htmlEscape($_item->getSku()))); ?>
69
+ </div>
70
+ <?php else: ?>
71
+ <td><div class="option-value"><?php echo $this->getValueHtml($_item)?></div></td>
72
+ <?php endif; ?>
73
+ <td class="a-right">
74
+ <?php if ($this->canShowPriceInfo($_item)): ?>
75
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
76
+ <span class="price-excl-tax">
77
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
78
+ <span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
79
+ <?php endif; ?>
80
+
81
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
82
+ <?php
83
+ echo $this->displayPrices(
84
+ $_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
85
+ $_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
86
+ );
87
+ ?>
88
+ <?php else: ?>
89
+ <?php echo $this->displayPrices($_item->getBasePrice(), $_item->getPrice()) ?>
90
+ <?php endif; ?>
91
+
92
+
93
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
94
+ <br />
95
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
96
+ <small>
97
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
98
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
99
+ <?php endforeach; ?>
100
+ </small>
101
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
102
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
103
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
104
+ <?php endforeach; ?>
105
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
106
+ <small>
107
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
108
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
109
+ <?php endforeach; ?>
110
+ </small>
111
+ <?php endif; ?>
112
+
113
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
114
+ <br />
115
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
116
+ <?php
117
+ echo $this->displayPrices(
118
+ $_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
119
+ $_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
120
+ );
121
+ ?>
122
+ </span>
123
+ <?php endif; ?>
124
+ <?php endif; ?>
125
+ </span>
126
+ <br />
127
+ <?php endif; ?>
128
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
129
+ <span class="price-incl-tax">
130
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
131
+ <span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
132
+ <?php endif; ?>
133
+ <?php $_incl = $this->helper('checkout')->getPriceInclTax($_item); ?>
134
+ <?php $_baseIncl = $this->helper('checkout')->getBasePriceInclTax($_item); ?>
135
+
136
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
137
+ <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedAmount(), $_incl+$_item->getWeeeTaxAppliedAmount()); ?>
138
+ <?php else: ?>
139
+ <?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxDisposition(), $_incl-$_item->getWeeeTaxDisposition()) ?>
140
+ <?php endif; ?>
141
+
142
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
143
+ <br />
144
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
145
+ <small>
146
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
147
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
148
+ <?php endforeach; ?>
149
+ </small>
150
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
151
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
152
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
153
+ <?php endforeach; ?>
154
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
155
+ <small>
156
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
157
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
158
+ <?php endforeach; ?>
159
+ </small>
160
+ <?php endif; ?>
161
+
162
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
163
+ <br />
164
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedAmount(), $_incl+$_item->getWeeeTaxAppliedAmount()); ?></span>
165
+ <?php endif; ?>
166
+ <?php endif; ?>
167
+ </span>
168
+ <?php endif; ?>
169
+ <?php else: ?>
170
+ &nbsp;
171
+ <?php endif; ?>
172
+ </td>
173
+ <td class="a-center">
174
+ <?php if ($this->canShowPriceInfo($_item)): ?>
175
+ <?php echo $_item->getQty()*1 ?>
176
+ <?php else: ?>
177
+ &nbsp;
178
+ <?php endif; ?>
179
+ </td>
180
+ <td class="a-right">
181
+ <?php if ($this->canShowPriceInfo($_item)): ?>
182
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
183
+ <span class="price-excl-tax">
184
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
185
+ <span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
186
+ <?php endif; ?>
187
+
188
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
189
+ <?php
190
+ echo $this->displayPrices(
191
+ $_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
192
+ $_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
193
+ );
194
+ ?>
195
+ <?php else: ?>
196
+ <?php echo $this->displayPrices($_item->getBaseRowTotal(), $_item->getRowTotal()) ?>
197
+ <?php endif; ?>
198
+
199
+
200
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
201
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
202
+ <small>
203
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
204
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
205
+ <?php endforeach; ?>
206
+ </small>
207
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
208
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
209
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
210
+ <?php endforeach; ?>
211
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
212
+ <small>
213
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
214
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
215
+ <?php endforeach; ?>
216
+ </small>
217
+ <?php endif; ?>
218
+
219
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
220
+ <br />
221
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
222
+ <?php
223
+ echo $this->displayPrices(
224
+ $_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
225
+ $_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
226
+ );
227
+ ?>
228
+ </span>
229
+ <?php endif; ?>
230
+ <?php endif; ?>
231
+ </span>
232
+ <br />
233
+ <?php endif; ?>
234
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
235
+ <span class="price-incl-tax">
236
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
237
+ <span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
238
+ <?php endif; ?>
239
+ <?php $_incl = $this->helper('checkout')->getSubtotalInclTax($_item); ?>
240
+ <?php $_baseIncl = $this->helper('checkout')->getBaseSubtotalInclTax($_item); ?>
241
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
242
+ <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedRowAmount(), $_incl+$_item->getWeeeTaxAppliedRowAmount()); ?>
243
+ <?php else: ?>
244
+ <?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxRowDisposition(), $_incl-$_item->getWeeeTaxRowDisposition()) ?>
245
+ <?php endif; ?>
246
+
247
+
248
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
249
+
250
+ <br />
251
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
252
+ <small>
253
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
254
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
255
+ <?php endforeach; ?>
256
+ </small>
257
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
258
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
259
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
260
+ <?php endforeach; ?>
261
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
262
+ <small>
263
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
264
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
265
+ <?php endforeach; ?>
266
+ </small>
267
+ <?php endif; ?>
268
+
269
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
270
+ <br /><span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedRowAmount(), $_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span>
271
+ <?php endif; ?>
272
+ <?php endif; ?>
273
+ </span>
274
+ <?php endif; ?>
275
+ </span>
276
+ <?php else: ?>
277
+ &nbsp;
278
+ <?php endif; ?>
279
+ </td>
280
+ <td class="a-right">
281
+ <?php if ($this->canShowPriceInfo($_item)): ?>
282
+ <?php echo $this->displayPriceAttribute('tax_amount') ?>
283
+ <?php else: ?>
284
+ &nbsp;
285
+ <?php endif; ?>
286
+ </td>
287
+ <td class="a-right">
288
+ <?php if ($this->canShowPriceInfo($_item)): ?>
289
+ <?php echo $this->displayPriceAttribute('discount_amount') ?>
290
+ <?php else: ?>
291
+ &nbsp;
292
+ <?php endif; ?>
293
+ </td>
294
+ <td class="a-right last">
295
+ <?php if ($this->canShowPriceInfo($_item)): ?>
296
+ <?php echo $this->displayPrices(
297
+ $_item->getBaseRowTotal()+$_item->getBaseTaxAmount()-$_item->getBaseDiscountAmount()+$_item->getBaseWeeeTaxAppliedRowAmount(),
298
+ $_item->getRowTotal()+$_item->getTaxAmount()-$_item->getDiscountAmount()+$_item->getWeeeTaxAppliedRowAmount()
299
+ ) ?>
300
+ <?php else: ?>
301
+ &nbsp;
302
+ <?php endif; ?>
303
+ </td>
304
+ </tr>
305
+ <?php endforeach; ?>
306
+ <?php if($_showlastRow): ?>
307
+ <tr class="border">
308
+ <td>
309
+ <?php if ($this->getOrderOptions()): ?>
310
+ <dl class="item-options">
311
+ <?php foreach ($this->getOrderOptions() as $option): ?>
312
+ <dt><?php echo $option['label'] ?></dt>
313
+ <dd>
314
+ <?php if (isset($option['custom_view']) && $option['custom_view']): ?>
315
+ <?php echo $option['value'];?>
316
+ <?php else: ?>
317
+ <?php echo Mage::helper('core/string')->truncate($option['value'], 55, '', $_remainder);?>
318
+ <?php if ($_remainder):?>
319
+ ... <span id="<?php echo $_id = 'id' . uniqid()?>"><?php echo $_remainder ?></span>
320
+ <script type="text/javascript">
321
+ $('<?php echo $_id ?>').hide();
322
+ $('<?php echo $_id ?>').up().observe('mouseover', function(){$('<?php echo $_id ?>').show();});
323
+ $('<?php echo $_id ?>').up().observe('mouseout', function(){$('<?php echo $_id ?>').hide();});
324
+ </script>
325
+ <?php endif;?>
326
+ <?php endif;?>
327
+ </dd>
328
+ <?php endforeach; ?>
329
+ </dl>
330
+ <?php endif; ?>
331
+ <?php echo $this->htmlEscape($this->getItem()->getDescription()) ?>
332
+ </td>
333
+ <td>&nbsp;</td>
334
+ <td>&nbsp;</td>
335
+ <td>&nbsp;</td>
336
+ <td>&nbsp;</td>
337
+ <td>&nbsp;</td>
338
+ <td class="last">&nbsp;</td>
339
+ </tr>
340
+ <?php endif; ?>
app/design/adminhtml/default/default/template/bundle/sales/order/view/items/renderer.phtml ADDED
@@ -0,0 +1,415 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Bundle_Block_Adminhtml_Sales_Order_View_Items_Renderer
30
+ */
31
+ ?>
32
+
33
+ <?php $_item = $this->getItem() ?>
34
+ <?php $items = array_merge(array($_item), $_item->getChildrenItems()); ?>
35
+ <?php $_count = count ($items) ?>
36
+ <?php $_index = 0 ?>
37
+
38
+ <?php $_prevOptionId = '' ?>
39
+
40
+ <?php if($this->getOrderOptions() || $_item->getDescription() || $this->canDisplayGiftmessage()): ?>
41
+ <?php $_showlastRow = true ?>
42
+ <?php else: ?>
43
+ <?php $_showlastRow = false ?>
44
+ <?php endif; ?>
45
+
46
+ <?php foreach ($items as $_item): ?>
47
+ <?php $this->setPriceDataObject($_item) ?>
48
+ <?php $attributes = $this->getSelectionAttributes($_item) ?>
49
+ <?php if ($_item->getParentItem()): ?>
50
+ <?php if ($_prevOptionId != $attributes['option_id']): ?>
51
+ <tr>
52
+ <td><div class="option-label"><?php echo $attributes['option_label'] ?></div></td>
53
+ <td>&nbsp;</td>
54
+ <td>&nbsp;</td>
55
+ <td>&nbsp;</td>
56
+ <td>&nbsp;</td>
57
+ <td>&nbsp;</td>
58
+ <td>&nbsp;</td>
59
+ <td>&nbsp;</td>
60
+ <td>&nbsp;</td>
61
+ <td class="last">&nbsp;</td>
62
+ </tr>
63
+ <?php $_prevOptionId = $attributes['option_id'] ?>
64
+ <?php endif; ?>
65
+ <?php endif; ?>
66
+ <tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?>>
67
+ <?php if (!$_item->getParentItem()): ?>
68
+ <td>
69
+ <h5 class="title">
70
+ <span id="order_item_<?php echo $_item->getId() ?>_title"><?php echo $this->htmlEscape($_item->getName()) ?></span>
71
+ </h5>
72
+ <div>
73
+ <strong><?php echo $this->helper('sales')->__('SKU') ?>:</strong>
74
+ <?php echo implode('<br />', Mage::helper('catalog')->splitSku($this->htmlEscape($_item->getSku()))); ?>
75
+ </div>
76
+ </td>
77
+ <?php else: ?>
78
+ <td><div class="option-value"><?php echo $this->getValueHtml($_item)?></div></td>
79
+ <?php endif; ?>
80
+ <td class="a-center">
81
+ <?php if ($this->canShowPriceInfo($_item)): ?>
82
+ <?php echo $_item->getStatus() ?>
83
+ <?php else: ?>
84
+ &nbsp;
85
+ <?php endif; ?>
86
+ </td>
87
+ <td class="a-right">
88
+ <?php if ($this->canShowPriceInfo($_item)): ?>
89
+ <?php echo $this->displayPriceAttribute('original_price') ?>
90
+ <?php else: ?>
91
+ &nbsp;
92
+ <?php endif; ?>
93
+ </td>
94
+ <td class="a-right">
95
+ <?php if ($this->canShowPriceInfo($_item)): ?>
96
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
97
+ <span class="price-excl-tax">
98
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
99
+ <span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
100
+ <?php endif; ?>
101
+
102
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
103
+ <?php
104
+ echo $this->displayPrices(
105
+ $_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
106
+ $_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
107
+ );
108
+ ?>
109
+ <?php else: ?>
110
+ <?php echo $this->displayPrices($_item->getBasePrice(), $_item->getPrice()) ?>
111
+ <?php endif; ?>
112
+
113
+
114
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
115
+ <br />
116
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
117
+ <small>
118
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
119
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
120
+ <?php endforeach; ?>
121
+ </small>
122
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
123
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
124
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
125
+ <?php endforeach; ?>
126
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
127
+ <small>
128
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
129
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
130
+ <?php endforeach; ?>
131
+ </small>
132
+ <?php endif; ?>
133
+
134
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
135
+ <br />
136
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
137
+ <?php
138
+ echo $this->displayPrices(
139
+ $_item->getBasePrice()+$_item->getBaseWeeeTaxAppliedAmount()+$_item->getBaseWeeeTaxDisposition(),
140
+ $_item->getPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()
141
+ );
142
+ ?>
143
+ </span>
144
+ <?php endif; ?>
145
+ <?php endif; ?>
146
+ </span>
147
+ <br />
148
+ <?php endif; ?>
149
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
150
+ <span class="price-incl-tax">
151
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
152
+ <span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
153
+ <?php endif; ?>
154
+ <?php $_incl = $this->helper('checkout')->getPriceInclTax($_item); ?>
155
+ <?php $_baseIncl = $this->helper('checkout')->getBasePriceInclTax($_item); ?>
156
+
157
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
158
+ <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedAmount(), $_incl+$_item->getWeeeTaxAppliedAmount()); ?>
159
+ <?php else: ?>
160
+ <?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxDisposition(), $_incl-$_item->getWeeeTaxDisposition()) ?>
161
+ <?php endif; ?>
162
+
163
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
164
+ <br />
165
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
166
+ <small>
167
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
168
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount'], $tax['amount']); ?></span>
169
+ <?php endforeach; ?>
170
+ </small>
171
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
172
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
173
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></small></span>
174
+ <?php endforeach; ?>
175
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
176
+ <small>
177
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
178
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_amount_incl_tax'], $tax['amount_incl_tax']); ?></span>
179
+ <?php endforeach; ?>
180
+ </small>
181
+ <?php endif; ?>
182
+
183
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
184
+ <br />
185
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedAmount(), $_incl+$_item->getWeeeTaxAppliedAmount()); ?></span>
186
+ <?php endif; ?>
187
+ <?php endif; ?>
188
+ </span>
189
+ <?php endif; ?>
190
+ <?php else: ?>
191
+ &nbsp;
192
+ <?php endif; ?>
193
+ </td>
194
+ <td>
195
+ <?php if ($this->canShowPriceInfo($_item)): ?>
196
+ <table cellspacing="0" class="qty-table">
197
+ <tr>
198
+ <td><?php echo Mage::helper('sales')->__('Ordered') ?></td>
199
+ <td><strong><?php echo $_item->getQtyOrdered()*1 ?></strong></td>
200
+ </tr>
201
+ <?php if ((float) $_item->getQtyInvoiced()): ?>
202
+ <tr>
203
+ <td><?php echo Mage::helper('sales')->__('Invoiced') ?></td>
204
+ <td><strong><?php echo $_item->getQtyInvoiced()*1 ?></strong></td>
205
+ </tr>
206
+ <?php endif; ?>
207
+ <?php if ((float) $_item->getQtyShipped() && $this->isShipmentSeparately($_item)): ?>
208
+ <tr>
209
+ <td><?php echo Mage::helper('sales')->__('Shipped') ?></td>
210
+ <td><strong><?php echo $_item->getQtyShipped()*1 ?></strong></td>
211
+ </tr>
212
+ <?php endif; ?>
213
+ <?php if ((float) $_item->getQtyRefunded()): ?>
214
+ <tr>
215
+ <td><?php echo Mage::helper('sales')->__('Refunded') ?></td>
216
+ <td><strong><?php echo $_item->getQtyRefunded()*1 ?></strong></td>
217
+ </tr>
218
+ <?php endif; ?>
219
+ <?php if ((float) $_item->getQtyCanceled()): ?>
220
+ <tr>
221
+ <td><?php echo Mage::helper('sales')->__('Canceled') ?></td>
222
+ <td><strong><?php echo $_item->getQtyCanceled()*1 ?></strong></td>
223
+ </tr>
224
+ <?php endif; ?>
225
+ </table>
226
+ <?php elseif ($this->isShipmentSeparately($_item)): ?>
227
+ <table cellspacing="0" class="qty-table">
228
+ <tr>
229
+ <td><?php echo Mage::helper('sales')->__('Ordered') ?></td>
230
+ <td><strong><?php echo $_item->getQtyOrdered()*1 ?></strong></td>
231
+ </tr>
232
+ <?php if ((float) $_item->getQtyShipped()): ?>
233
+ <tr>
234
+ <td><?php echo Mage::helper('sales')->__('Shipped') ?></td>
235
+ <td><strong><?php echo $_item->getQtyShipped()*1 ?></strong></td>
236
+ </tr>
237
+ <?php endif; ?>
238
+ </table>
239
+ <?php else: ?>
240
+ &nbsp;
241
+ <?php endif; ?>
242
+ </td>
243
+ <td class="a-right">
244
+ <?php if ($this->canShowPriceInfo($_item)): ?>
245
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceExclTax()): ?>
246
+ <span class="price-excl-tax">
247
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
248
+ <span class="label"><?php echo $this->__('Excl. Tax'); ?>:</span>
249
+ <?php endif; ?>
250
+
251
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
252
+ <?php
253
+ echo $this->displayPrices(
254
+ $_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
255
+ $_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
256
+ );
257
+ ?>
258
+ <?php else: ?>
259
+ <?php echo $this->displayPrices($_item->getBaseRowTotal(), $_item->getRowTotal()) ?>
260
+ <?php endif; ?>
261
+
262
+
263
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
264
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
265
+ <small>
266
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
267
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
268
+ <?php endforeach; ?>
269
+ </small>
270
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
271
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
272
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
273
+ <?php endforeach; ?>
274
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
275
+ <small>
276
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
277
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
278
+ <?php endforeach; ?>
279
+ </small>
280
+ <?php endif; ?>
281
+
282
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
283
+ <br />
284
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br />
285
+ <?php
286
+ echo $this->displayPrices(
287
+ $_item->getBaseRowTotal()+$_item->getBaseWeeeTaxAppliedRowAmount()+$_item->getBaseWeeeTaxRowDisposition(),
288
+ $_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()
289
+ );
290
+ ?>
291
+ </span>
292
+ <?php endif; ?>
293
+ <?php endif; ?>
294
+ </span>
295
+ <br />
296
+ <?php endif; ?>
297
+ <?php if ($this->helper('tax')->displaySalesBothPrices() || $this->helper('tax')->displaySalesPriceInclTax()): ?>
298
+ <span class="price-incl-tax">
299
+ <?php if ($this->helper('tax')->displaySalesBothPrices()): ?>
300
+ <span class="label"><?php echo $this->__('Incl. Tax'); ?>:</span>
301
+ <?php endif; ?>
302
+ <?php $_incl = $this->helper('checkout')->getSubtotalInclTax($_item); ?>
303
+ <?php $_baseIncl = $this->helper('checkout')->getBaseSubtotalInclTax($_item); ?>
304
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?>
305
+ <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedRowAmount(), $_incl+$_item->getWeeeTaxAppliedRowAmount()); ?>
306
+ <?php else: ?>
307
+ <?php echo $this->displayPrices($_baseIncl-$_item->getBaseWeeeTaxRowDisposition(), $_incl-$_item->getWeeeTaxRowDisposition()) ?>
308
+ <?php endif; ?>
309
+
310
+
311
+ <?php if (Mage::helper('weee')->getApplied($_item)): ?>
312
+
313
+ <br />
314
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales')): ?>
315
+ <small>
316
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
317
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount'], $tax['row_amount']); ?></span>
318
+ <?php endforeach; ?>
319
+ </small>
320
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
321
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
322
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></small></span>
323
+ <?php endforeach; ?>
324
+ <?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales')): ?>
325
+ <small>
326
+ <?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
327
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->displayPrices($tax['base_row_amount_incl_tax'], $tax['row_amount_incl_tax']); ?></span>
328
+ <?php endforeach; ?>
329
+ </small>
330
+ <?php endif; ?>
331
+
332
+ <?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales')): ?>
333
+ <br /><span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo $this->displayPrices($_baseIncl+$_item->getBaseWeeeTaxAppliedRowAmount(), $_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span>
334
+ <?php endif; ?>
335
+ <?php endif; ?>
336
+ </span>
337
+ <?php endif; ?>
338
+ <?php else: ?>
339
+ &nbsp;
340
+ <?php endif; ?>
341
+ </td>
342
+ <td class="a-right">
343
+ <?php if ($this->canShowPriceInfo($_item)): ?>
344
+ <?php echo $this->displayPriceAttribute('tax_amount') ?>
345
+ <?php else: ?>
346
+ &nbsp;
347
+ <?php endif; ?>
348
+ </td>
349
+
350
+ <td class="a-right">
351
+ <?php if ($this->canShowPriceInfo($_item)): ?>
352
+ <?php echo $this->displayTaxPercent($_item) ?>
353
+ <?php else: ?>
354
+ &nbsp;
355
+ <?php endif; ?>
356
+ </td>
357
+ <td class="a-right">
358
+ <?php if ($this->canShowPriceInfo($_item)): ?>
359
+ <?php echo $this->displayPriceAttribute('discount_amount') ?>
360
+ <?php else: ?>
361
+ &nbsp;
362
+ <?php endif; ?>
363
+ </td>
364
+ <td class="a-right last">
365
+ <?php if ($this->canShowPriceInfo($_item)): ?>
366
+ <?php echo $this->displayPrices(
367
+ max(0, $_item->getBaseRowTotal() - $_item->getBaseDiscountAmount() + $_item->getBaseTaxAmount() + $_item->getBaseWeeeTaxAppliedRowAmount()),
368
+ max(0, $_item->getRowTotal() - $_item->getDiscountAmount() + $_item->getTaxAmount() + $_item->getWeeeTaxAppliedRowAmount())
369
+ ); ?>
370
+ <?php else: ?>
371
+ &nbsp;
372
+ <?php endif; ?>
373
+ </td>
374
+ </tr>
375
+ <?php endforeach; ?>
376
+ <?php if($_showlastRow): ?>
377
+ <tr<?php if (!$this->canDisplayGiftmessage()) echo ' class="border"' ?>>
378
+ <td>
379
+ <?php if ($this->getOrderOptions()): ?>
380
+ <dl class="item-options">
381
+ <?php foreach ($this->getOrderOptions() as $option): ?>
382
+ <dt><?php echo $option['label'] ?>:</dt>
383
+ <dd>
384
+ <?php if (isset($option['custom_view']) && $option['custom_view']): ?>
385
+ <?php echo $option['value'];?>
386
+ <?php else: ?>
387
+ <?php echo Mage::helper('core/string')->truncate($option['value'], 55, '', $_remainder);?>
388
+ <?php if ($_remainder):?>
389
+ ... <span id="<?php echo $_id = 'id' . uniqid()?>"><?php echo $_remainder ?></span>
390
+ <script type="text/javascript">
391
+ $('<?php echo $_id ?>').hide();
392
+ $('<?php echo $_id ?>').up().observe('mouseover', function(){$('<?php echo $_id ?>').show();});
393
+ $('<?php echo $_id ?>').up().observe('mouseout', function(){$('<?php echo $_id ?>').hide();});
394
+ </script>
395
+ <?php endif;?>
396
+ <?php endif;?>
397
+ </dd>
398
+ <?php endforeach; ?>
399
+ </dl>
400
+ <?php else: ?>
401
+ &nbsp;
402
+ <?php endif; ?>
403
+ <?php echo $this->htmlEscape($_item->getDescription()) ?>
404
+ </td>
405
+ <td>&nbsp;</td>
406
+ <td>&nbsp;</td>
407
+ <td>&nbsp;</td>
408
+ <td>&nbsp;</td>
409
+ <td>&nbsp;</td>
410
+ <td>&nbsp;</td>
411
+ <td>&nbsp;</td>
412
+ <td>&nbsp;</td>
413
+ <td class="last">&nbsp;</td>
414
+ </tr>
415
+ <?php endif; ?>
app/design/adminhtml/default/default/template/bundle/sales/shipment/create/items/renderer.phtml ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Bundle_Block_Adminhtml_Sales_Order_Items_Renderer
30
+ */
31
+ ?>
32
+
33
+ <?php $_item = $this->getItem() ?>
34
+ <?php $items = $this->getChilds($_item); ?>
35
+ <?php $_count = count ($items) ?>
36
+ <?php $_index = 0 ?>
37
+
38
+ <?php $_prevOptionId = '' ?>
39
+
40
+ <?php if($this->getOrderOptions() || $_item->getDescription()): ?>
41
+ <?php $_showlastRow = true ?>
42
+ <?php else: ?>
43
+ <?php $_showlastRow = false ?>
44
+ <?php endif; ?>
45
+
46
+ <?php foreach ($items as $_item): ?>
47
+ <?php $this->setPriceDataObject($_item) ?>
48
+ <?php if ($_item->getOrderItem()->getParentItem()): ?>
49
+ <?php $attributes = $this->getSelectionAttributes($_item) ?>
50
+ <?php if ($_prevOptionId != $attributes['option_id']): ?>
51
+ <tr>
52
+ <td><div class="option-label"><?php echo $attributes['option_label'] ?></div></td>
53
+ <td>&nbsp;</td>
54
+ <td class="last">&nbsp;</td>
55
+ </tr>
56
+ <?php $_prevOptionId = $attributes['option_id'] ?>
57
+ <?php endif; ?>
58
+ <?php endif; ?>
59
+ <tr class="<?php echo (++$_index==$_count && !$_showlastRow)?'border':'' ?>">
60
+ <?php if (!$_item->getOrderItem()->getParentItem()): ?>
61
+ <td><h5 class="title"><?php echo $this->htmlEscape($_item->getName()) ?></h5>
62
+ <div>
63
+ <strong><?php echo $this->helper('sales')->__('SKU') ?>:</strong>
64
+ <?php echo implode('<br />', Mage::helper('catalog')->splitSku($this->htmlEscape($_item->getSku()))); ?>
65
+ </div>
66
+ </td>
67
+ <?php else: ?>
68
+ <td><div class="option-value"><?php echo $this->getValueHtml($_item)?></div></td>
69
+ <?php endif; ?>
70
+ <td>
71
+ <?php if ($this->isShipmentSeparately($_item)): ?>
72
+ <?php echo $this->getColumnHtml($_item, 'qty') ?>
73
+ <?php else: ?>
74
+ &nbsp;
75
+ <?php endif; ?>
76
+ </td>
77
+ <td class="last">
78
+ <?php if ($this->isShipmentSeparately($_item)): ?>
79
+ <input type="text" class="input-text" name="shipment[items][<?php echo $_item->getOrderItemId() ?>]" value="<?php echo $_item->getQty()*1 ?>" />
80
+ <?php else: ?>
81
+ &nbsp;
82
+ <?php endif; ?>
83
+ </td>
84
+ </tr>
85
+ <?php endforeach; ?>
86
+ <?php if($_showlastRow): ?>
87
+ <tr class="border">
88
+ <td>
89
+ <?php if ($this->getOrderOptions($_item->getOrderItem())): ?>
90
+ <dl class="item-options">
91
+ <?php foreach ($this->getOrderOptions($_item->getOrderItem()) as $option): ?>
92
+ <dt><?php echo $option['label'] ?></dt>
93
+ <dd>
94
+ <?php if (isset($option['custom_view']) && $option['custom_view']): ?>
95
+ <?php echo $option['value'];?>
96
+ <?php else: ?>
97
+ <?php echo Mage::helper('core/string')->truncate($option['value'], 55, '', $_remainder);?>
98
+ <?php if ($_remainder):?>
99
+ ... <span id="<?php echo $_id = 'id' . uniqid()?>"><?php echo $_remainder ?></span>
100
+ <script type="text/javascript">
101
+ $('<?php echo $_id ?>').hide();
102
+ $('<?php echo $_id ?>').up().observe('mouseover', function(){$('<?php echo $_id ?>').show();});
103
+ $('<?php echo $_id ?>').up().observe('mouseout', function(){$('<?php echo $_id ?>').hide();});
104
+ </script>
105
+ <?php endif;?>
106
+ <?php endif;?>
107
+ </dd>
108
+ <?php endforeach; ?>
109
+ </dl>
110
+ <?php else: ?>
111
+ &nbsp;
112
+ <?php endif; ?>
113
+ <?php echo $this->htmlEscape($_item->getDescription()) ?>
114
+ </td>
115
+ <td>&nbsp;</td>
116
+ <td class="last">&nbsp;</td>
117
+ </tr>
118
+ <?php endif; ?>
app/design/adminhtml/default/default/template/bundle/sales/shipment/view/items/renderer.phtml ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Bundle_Block_Adminhtml_Sales_Order_Items_Renderer
30
+ */
31
+ ?>
32
+
33
+ <?php $_item = $this->getItem() ?>
34
+ <?php $items = array_merge(array($_item->getOrderItem()), $_item->getOrderItem()->getChildrenItems()) ?>
35
+ <?php $shipItems = $this->getChilds($_item) ?>
36
+ <?php $_count = count ($items) ?>
37
+ <?php $_index = 0 ?>
38
+
39
+ <?php $_prevOptionId = '' ?>
40
+
41
+ <?php if($this->getOrderOptions() || $_item->getDescription()): ?>
42
+ <?php $_showlastRow = true ?>
43
+ <?php else: ?>
44
+ <?php $_showlastRow = false ?>
45
+ <?php endif; ?>
46
+
47
+ <?php foreach ($items as $_item): ?>
48
+ <?php $this->setPriceDataObject($_item) ?>
49
+ <?php if ($_item->getParentItem()): ?>
50
+ <?php $attributes = $this->getSelectionAttributes($_item) ?>
51
+ <?php if ($_prevOptionId != $attributes['option_id']): ?>
52
+ <tr>
53
+ <td><div class="option-label"><?php echo $attributes['option_label'] ?></div></td>
54
+ <td class="last">&nbsp;</td>
55
+ </tr>
56
+ <?php $_prevOptionId = $attributes['option_id'] ?>
57
+ <?php endif; ?>
58
+ <?php endif; ?>
59
+ <tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?>>
60
+ <?php if (!$_item->getParentItem()): ?>
61
+ <td>
62
+ <h5 class="title"><?php echo $this->htmlEscape($_item->getName()) ?></h5>
63
+ <div>
64
+ <strong><?php echo $this->helper('sales')->__('SKU') ?>:</strong>
65
+ <?php echo implode('<br />', Mage::helper('catalog')->splitSku($this->htmlEscape($_item->getSku()))); ?>
66
+ </div>
67
+ </td>
68
+ <?php else: ?>
69
+ <td><div class="option-value"><?php echo $this->getValueHtml($_item)?></div></td>
70
+ <?php endif; ?>
71
+ <td class="a-center last">
72
+ <?php if (($this->isShipmentSeparately() && $_item->getParentItem()) || (!$this->isShipmentSeparately() && !$_item->getParentItem())): ?>
73
+ <?php if (isset($shipItems[$_item->getId()])): ?>
74
+ <?php echo $shipItems[$_item->getId()]->getQty()*1 ?>
75
+ <?php elseif ($_item->getIsVirtual()): ?>
76
+ <?php echo $this->__('N/A') ?>
77
+ <?php else: ?>
78
+ 0
79
+ <?php endif; ?>
80
+ <?php else: ?>
81
+ &nbsp;
82
+ <?php endif; ?>
83
+ </td>
84
+ </tr>
85
+ <?php endforeach; ?>
86
+ <?php if($_showlastRow): ?>
87
+ <tr class="border">
88
+ <td>
89
+ <?php if ($this->getOrderOptions($_item->getOrderItem())): ?>
90
+ <dl class="item-options">
91
+ <?php foreach ($this->getOrderOptions($_item->getOrderItem()) as $option): ?>
92
+ <dt><?php echo $option['label'] ?></dt>
93
+ <dd>
94
+ <?php if (isset($option['custom_view']) && $option['custom_view']): ?>
95
+ <?php echo $option['value'];?>
96
+ <?php else: ?>
97
+ <?php echo Mage::helper('core/string')->truncate($option['value'], 55, '', $_remainder);?>
98
+ <?php if ($_remainder):?>
99
+ ... <span id="<?php echo $_id = 'id' . uniqid()?>"><?php echo $_remainder ?></span>
100
+ <script type="text/javascript">
101
+ $('<?php echo $_id ?>').hide();
102
+ $('<?php echo $_id ?>').up().observe('mouseover', function(){$('<?php echo $_id ?>').show();});
103
+ $('<?php echo $_id ?>').up().observe('mouseout', function(){$('<?php echo $_id ?>').hide();});
104
+ </script>
105
+ <?php endif;?>
106
+ <?php endif;?>
107
+ </dd>
108
+ <?php endforeach; ?>
109
+ </dl>
110
+ <?php endif; ?>
111
+ <?php echo $this->htmlEscape($_item->getDescription()) ?>
112
+ </td>
113
+ <td class="last">&nbsp;</td>
114
+ </tr>
115
+ <?php endif; ?>
app/design/adminhtml/default/default/template/captcha/zend.phtml ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 $captcha = $this->getCaptchaModel() ?>
28
+ <?php /* @var $this Mage_Core_Block_Captcha_Zend */ ?>
29
+ <div class="clear"></div>
30
+ <div class="captcha">
31
+ <div class="captcha-input input-box input-left">
32
+ <label for="captcha"><?php echo $this->__('Please type the letters from the image:') ?></label><br />
33
+ <input type="text" name="<?php echo Mage_Captcha_Helper_Data::INPUT_NAME_FIELD_VALUE ?>[<?php echo $this->getFormId()?>]" id="captcha" class="required-entry input-text validation-failed"/>
34
+ </div>
35
+ <div class="captcha-image input-right">
36
+ <img id="captcha-reload" class="captcha-reload" src="<?php echo $this->getSkinUrl('images/reload.png') ?>" alt="<?php echo $this->__('Reload captcha') ?>"/>
37
+ <img id="<?php echo $this->getFormId() ?>" width="<?php echo $this->getImgWidth() ?>" height="<?php echo $this->getImgHeight() ?>" src="<?php echo $captcha->getImgSrc() ?>" />
38
+ </div>
39
+ </div>
40
+ <?php if ($captcha->isCaseSensitive()) :?>
41
+ <div class="captcha-note">
42
+ <p><?php echo $this->__('<strong>Attention</strong>: Captcha is case sensitive.') ?></p>
43
+ </div>
44
+ <?php endif; ?>
45
+ <script type="text/javascript">
46
+ //<![CDATA[
47
+ document.observe('dom:loaded', function () {
48
+ var captcha = new Captcha('<?php echo $this->getRefreshUrl() ?>', '<?php echo $this->getFormId() ?>');
49
+
50
+ $('captcha-reload').observe('click', function () {
51
+ captcha.refresh(this);
52
+ });
53
+
54
+ });
55
+ //]]>
56
+ </script>
app/design/adminhtml/default/default/template/catalog/category/checkboxes/tree.phtml ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 $_divId = 'tree-div_' . time() ?>
29
+ <div id="<?php echo $_divId ?>" class="tree"></div>
30
+
31
+ <script type="text/javascript">
32
+ //<![CDATA[
33
+
34
+ // TODO: cleanup this script. It was copypasted from catalog/category/tree
35
+
36
+ var tree;
37
+
38
+ /**
39
+ * Fix ext compatibility with prototype 1.6
40
+ */
41
+ Ext.lib.Event.getTarget = function(e) {
42
+ var ee = e.browserEvent || e;
43
+ return ee.target ? Event.element(ee) : null;
44
+ };
45
+
46
+ Ext.tree.TreePanel.Enhanced = function(el, config)
47
+ {
48
+ Ext.tree.TreePanel.Enhanced.superclass.constructor.call(this, el, config);
49
+ };
50
+
51
+ Ext.extend(Ext.tree.TreePanel.Enhanced, Ext.tree.TreePanel, {
52
+
53
+ loadTree : function(config, firstLoad)
54
+ {
55
+ var parameters = config['parameters'];
56
+ var data = config['data'];
57
+
58
+ if ((typeof parameters['root_visible']) != 'undefined') {
59
+ this.rootVisible = parameters['root_visible']*1;
60
+ }
61
+
62
+ var root = new Ext.tree.TreeNode(parameters);
63
+
64
+ this.nodeHash = {};
65
+ this.setRootNode(root);
66
+
67
+ if (firstLoad) {
68
+ this.addListener('click', this.categoryClick.createDelegate(this));
69
+ }
70
+
71
+ this.loader.buildCategoryTree(root, data);
72
+ this.el.dom.innerHTML = '';
73
+ // render the tree
74
+ this.render();
75
+ },
76
+
77
+ categoryClick : function(node, e)
78
+ {
79
+ node.getUI().check(!node.getUI().checked());
80
+ }
81
+ });
82
+
83
+ Ext.onReady(function()
84
+ {
85
+ var categoryLoader = new Ext.tree.TreeLoader({
86
+ dataUrl: '<?php echo $this->getLoadTreeUrl() ?>'
87
+ });
88
+
89
+ categoryLoader.createNode = function(config) {
90
+ config.uiProvider = Ext.tree.CheckboxNodeUI;
91
+ var node;
92
+ var _node = Object.clone(config);
93
+ if (config.children && !config.children.length) {
94
+ delete(config.children);
95
+ node = new Ext.tree.AsyncTreeNode(config);
96
+ } else {
97
+ node = new Ext.tree.TreeNode(config);
98
+ }
99
+
100
+ return node;
101
+ };
102
+
103
+ categoryLoader.buildCategoryTree = function(parent, config)
104
+ {
105
+ if (!config) return null;
106
+
107
+ if (parent && config && config.length){
108
+ for (var i = 0; i < config.length; i++) {
109
+ config[i].uiProvider = Ext.tree.CheckboxNodeUI;
110
+ var node;
111
+ var _node = Object.clone(config[i]);
112
+ if (_node.children && !_node.children.length) {
113
+ delete(_node.children);
114
+ node = new Ext.tree.AsyncTreeNode(_node);
115
+ } else {
116
+ node = new Ext.tree.TreeNode(config[i]);
117
+ }
118
+ parent.appendChild(node);
119
+ node.loader = node.getOwnerTree().loader;
120
+ if (_node.children) {
121
+ this.buildCategoryTree(node, _node.children);
122
+ }
123
+ }
124
+ }
125
+ };
126
+
127
+ categoryLoader.buildHash = function(node)
128
+ {
129
+ var hash = {};
130
+
131
+ hash = this.toArray(node.attributes);
132
+
133
+ if (node.childNodes.length>0 || (node.loaded==false && node.loading==false)) {
134
+ hash['children'] = new Array;
135
+
136
+ for (var i = 0, len = node.childNodes.length; i < len; i++) {
137
+ if (!hash['children']) {
138
+ hash['children'] = new Array;
139
+ }
140
+ hash['children'].push(this.buildHash(node.childNodes[i]));
141
+ }
142
+ }
143
+
144
+ return hash;
145
+ };
146
+
147
+ categoryLoader.toArray = function(attributes) {
148
+ var data = {};
149
+ for (var key in attributes) {
150
+ var value = attributes[key];
151
+ data[key] = value;
152
+ }
153
+
154
+ return data;
155
+ };
156
+
157
+ categoryLoader.on("beforeload", function(treeLoader, node) {
158
+ treeLoader.baseParams.id = node.attributes.id;
159
+ });
160
+
161
+ categoryLoader.on("load", function(treeLoader, node, config) {
162
+ varienWindowOnload();
163
+ });
164
+
165
+ tree = new Ext.tree.TreePanel.Enhanced('<?php echo $_divId ?>', {
166
+ animate: false,
167
+ loader: categoryLoader,
168
+ enableDD: false,
169
+ containerScroll: true,
170
+ selModel: new Ext.tree.CheckNodeMultiSelectionModel(),
171
+ rootVisible: '<?php echo $this->getRoot()->getIsVisible() ?>',
172
+ useAjax: <?php echo $this->getUseAjax() ?>,
173
+ currentNodeId: <?php echo (int) $this->getCategoryId() ?>,
174
+ addNodeTo: false,
175
+ rootUIProvider: Ext.tree.CheckboxNodeUI
176
+ });
177
+
178
+ tree.on('check', function(node, checked) {
179
+ <?php echo $this->getJsFormObject() ?>.updateElement.value = this.getChecked().join(', ');
180
+ varienElementMethods.setHasChanges(node.getUI().checkbox);
181
+ }, tree);
182
+
183
+ // set the root node
184
+ var parameters = {
185
+ text: '<?php echo htmlentities($this->getRoot()->getName()) ?>',
186
+ draggable: false,
187
+ checked:'<?php echo $this->getRoot()->getChecked() ?>',
188
+ uiProvider: Ext.tree.CheckboxNodeUI,
189
+ allowDrop: <?php if ($this->getRoot()->getIsVisible()): ?>true<?php else : ?>false<?php endif; ?>,
190
+ id: <?php echo (int) $this->getRoot()->getId() ?>,
191
+ expanded: <?php echo (int) $this->getIsWasExpanded() ?>,
192
+ category_id: <?php echo (int) $this->getCategoryId() ?>
193
+ };
194
+
195
+ tree.loadTree({parameters:parameters, data:<?php echo $this->getTreeJson() ?>},true);
196
+
197
+ });
198
+ //]]>
199
+ </script>
app/design/adminhtml/default/default/template/catalog/category/edit.phtml ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Template for Mage_Adminhtml_Block_Catalog_Category_Cointainer
30
+ */
31
+ ?>
32
+
33
+ <div id="category-edit-container" class="category-content">
34
+ <?php echo $this->getChildHtml('form') ?>
35
+ </div>
36
+ <script type="text/javascript">
37
+ //<![CDATA[
38
+
39
+ function categoryReset(url,useAjax){
40
+ if(useAjax){
41
+ var params = {active_tab_id:false};
42
+ updateContent(url, params);
43
+ }else{
44
+ location.href = url;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Delete some category
50
+ * This routine get categoryId explicitly, so even if currently selected tree node is out of sync
51
+ * with this form, we surely delete same category in the tree and at backend
52
+ */
53
+ function categoryDelete(url, useAjax, categoryId) {
54
+ if (confirm('<?php echo Mage::helper('catalog')->__('Are you sure you want to delete this category?') ?>')){
55
+ if (useAjax){
56
+ tree.nodeForDelete = categoryId;
57
+ updateContent(url, {}, true);
58
+ } else {
59
+ location.href = url;
60
+ }
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Update category content area
66
+ */
67
+ function updateContent(url, params, refreshTree) {
68
+ if (!params) {
69
+ params = {};
70
+ }
71
+ if (!params.form_key) {
72
+ params.form_key = FORM_KEY;
73
+ }
74
+
75
+ toolbarToggle.stop();
76
+
77
+ /*if(params.node_name)
78
+ {
79
+ var currentNode = tree.getNodeById(tree.currentNodeId);
80
+ currentNode.setText(params.node_name);
81
+ }*/
82
+
83
+ var categoryContainer = $('category-edit-container');
84
+ var messagesContainer = $('messages');
85
+ var thisObj = this;
86
+ new Ajax.Request(url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), {
87
+ parameters: params,
88
+ evalScripts: true,
89
+ onComplete: function () {
90
+ /**
91
+ * This func depends on variables, that came in response, and were eval'ed in onSuccess() callback.
92
+ * Since prototype's Element.update() evals javascripts in 10 msec, we should exec our func after it.
93
+ */
94
+ setTimeout(function() {
95
+ try {
96
+ if (refreshTree) {
97
+ thisObj.refreshTreeArea();
98
+ }
99
+ toolbarToggle.start();
100
+ } catch (e) {
101
+ alert(e.message);
102
+ };
103
+ }, 25);
104
+ },
105
+ onSuccess: function(transport) {
106
+ try {
107
+ if (transport.responseText.isJSON()) {
108
+ var response = transport.responseText.evalJSON();
109
+ var needUpdate = true;
110
+ if (response.error) {
111
+ alert(response.message);
112
+ needUpdate = false;
113
+ }
114
+ if(response.ajaxExpired && response.ajaxRedirect) {
115
+ setLocation(response.ajaxRedirect);
116
+ needUpdate = false;
117
+ }
118
+ if (needUpdate){
119
+ if (response.content){
120
+ $(categoryContainer).update(response.content);
121
+ }
122
+ if (response.messages){
123
+ $(messagesContainer).update(response.messages);
124
+ }
125
+ }
126
+ } else {
127
+ $(categoryContainer).update(transport.responseText);
128
+ }
129
+ }
130
+ catch (e) {
131
+ $(categoryContainer).update(transport.responseText);
132
+ }
133
+ }
134
+ });
135
+ }
136
+
137
+ /**
138
+ * Refresh tree nodes after saving or deleting a category
139
+ */
140
+ function refreshTreeArea(transport)
141
+ {
142
+ if (tree && window.editingCategoryBreadcrumbs) {
143
+ // category deleted - delete its node
144
+ if (tree.nodeForDelete) {
145
+ var node = tree.getNodeById(tree.nodeForDelete);
146
+ tree.nodeForDelete = false;
147
+
148
+ if (node) { // Check maybe tree became somehow not synced with ajax and we're trying to delete unknown node
149
+ node.parentNode.removeChild(node);
150
+ tree.currentNodeId = false;
151
+ }
152
+ }
153
+ // category created - add its node
154
+ else if (tree.addNodeTo) {
155
+ var parent = tree.getNodeById(tree.addNodeTo);
156
+ tree.addNodeTo = false;
157
+
158
+ if (parent) { // Check maybe tree became somehow not synced with ajax and we're trying to add to unknown node
159
+ var node = new Ext.tree.AsyncTreeNode(editingCategoryBreadcrumbs[editingCategoryBreadcrumbs.length - 1]);
160
+ node.loaded = true;
161
+ tree.currentNodeId = node.id;
162
+ parent.appendChild(node);
163
+
164
+ if (parent.expanded) {
165
+ tree.selectCurrentNode();
166
+ } else {
167
+ var timer;
168
+ parent.expand();
169
+ var f = function(){
170
+ if(parent.expanded){ // done expanding
171
+ clearInterval(timer);
172
+ tree.selectCurrentNode();
173
+ }
174
+ };
175
+ timer = setInterval(f, 200);
176
+ }
177
+ }
178
+ }
179
+
180
+ // update all affected categories nodes names
181
+ for (var i = 0; i < editingCategoryBreadcrumbs.length; i++) {
182
+ var node = tree.getNodeById(editingCategoryBreadcrumbs[i].id);
183
+ if (node) {
184
+ node.setText(editingCategoryBreadcrumbs[i].text);
185
+ }
186
+ }
187
+ }
188
+ }
189
+
190
+ function displayLoadingMask()
191
+ {
192
+ var loaderArea = $$('#html-body .wrapper')[0]; // Blocks all page
193
+ Position.clone($(loaderArea), $('loading-mask'), {offsetLeft:-2});
194
+ toggleSelectsUnderBlock($('loading-mask'), false);
195
+ Element.show('loading-mask');
196
+ }
197
+ //]]>
198
+ </script>
app/design/adminhtml/default/default/template/catalog/category/edit/form.phtml ADDED
@@ -0,0 +1,258 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
29
+ <h3 class="icon-head head-categories"><?php echo $this->htmlEscape($this->getHeader()) . ($this->getCategoryId() ? ' (' . Mage::helper('catalog')->__('ID: %s', $this->getCategoryId()) . ')' : '') ?></h3>
30
+ <p class="content-buttons form-buttons">
31
+ <?php echo $this->getResetButtonHtml() ?>
32
+ <?php if($this->getCategoryId()): ?>
33
+ <?php echo $this->getDeleteButtonHtml() ?>
34
+ <?php endif; ?>
35
+ <?php echo $this->getAdditionalButtonsHtml(); ?>
36
+ <?php echo $this->getSaveButtonHtml() ?>
37
+ </p>
38
+ </div>
39
+ <?php if($this->hasStoreRootCategory()): ?>
40
+ <?php echo $this->getTabsHtml() ?>
41
+ <?php else: ?>
42
+ <div class="messages warning-msg">
43
+ <?php echo Mage::helper('catalog')->__('Set root category for this store in the <a href="%s">configuration</a>', $this->getStoreConfigurationUrl()) ?>
44
+ </div>
45
+ <?php endif; ?>
46
+ <iframe name="iframeSave" style="display:none; width:100%;" src="<?php echo $this->getJsUrl() ?>blank.html"></iframe>
47
+ <form target="iframeSave" id="category_edit_form" action="<?php echo $this->getSaveUrl() ?>" method="post" enctype="multipart/form-data">
48
+ <div class="no-display">
49
+ <input type="hidden" name="isIframe" value="1" />
50
+ <input name="form_key" type="hidden" value="<?php echo $this->getFormKey() ?>" />
51
+ <input type="hidden" name="category_products" id="in_category_products" value="" />
52
+ <input type="hidden" name="active_tab_id" id="active_tab_id" value="" />
53
+ </div>
54
+ <div id="category_tab_content"></div>
55
+ </form>
56
+ <script type="text/javascript">
57
+ //<![CDATA[
58
+ categoryForm = new varienForm('category_edit_form');
59
+
60
+ categoryForm.submit= function (url) {
61
+ this.errorSections = $H({});
62
+ this.canShowError = true;
63
+ this.submitUrl = url;
64
+ if (this.validator && this.validator.validate()) {
65
+ if(this.validationUrl){
66
+ this._validate();
67
+ }
68
+ else{
69
+ if (this.isSubmitted) {
70
+ return false;
71
+ }
72
+ this.isSubmitted = true;
73
+ this._submit();
74
+ }
75
+ displayLoadingMask();
76
+ return true;
77
+ }
78
+ return false;
79
+ };
80
+
81
+ categoryForm.refreshPath = function () {
82
+
83
+ categoryId = this.getCategoryId();
84
+
85
+ if (!categoryId) {
86
+ return false;
87
+ }
88
+
89
+ var refreshPathSuccess = function(transport) {
90
+ if (transport.responseText.isJSON()) {
91
+ response = transport.responseText.evalJSON()
92
+ if (response.error) {
93
+ alert(response.message);
94
+ } else {
95
+ if (categoryForm.getCategoryId() == response['id']) {
96
+ categoryForm.setCategoryPath(response['path']);
97
+ }
98
+ }
99
+ }
100
+ };
101
+
102
+ new Ajax.Request(
103
+ '<?php echo $this->getRefreshPathUrl() ?>',
104
+ {
105
+ method: 'POST',
106
+ evalScripts: true,
107
+ onSuccess: refreshPathSuccess
108
+ }
109
+ );
110
+
111
+ };
112
+
113
+ categoryForm.getCategoryId = function () {
114
+ collection = $(this.formId).getInputs('hidden','general[id]');
115
+ if (collection.size() > 0) {
116
+ return collection.first().value;
117
+ }
118
+ return false;
119
+ };
120
+
121
+ categoryForm.setCategoryPath = function (path) {
122
+ collection = $(this.formId).getInputs('hidden','general[path]');
123
+ if (collection.size() > 0) {
124
+ return collection.first().value = path;
125
+ }
126
+ };
127
+
128
+ /**
129
+ * Create/edit some category
130
+ */
131
+ function categorySubmit(url, useAjax) {
132
+ var activeTab = $('active_tab_id');
133
+ if (activeTab) {
134
+ if (activeTab.tabsJsObject && activeTab.tabsJsObject.activeTab) {
135
+ activeTab.value = activeTab.tabsJsObject.activeTab.id;
136
+ }
137
+ }
138
+
139
+ var params = {};
140
+ var fields = $('category_edit_form').getElementsBySelector('input', 'select');
141
+ for(var i=0;i<fields.length;i++){
142
+ if (!fields[i].name) {
143
+ continue;
144
+ }
145
+ params[fields[i].name] = fields[i].getValue();
146
+ }
147
+
148
+ // Get info about what we're submitting - to properly update tree nodes
149
+ var categoryId = params['general[id]'] ? params['general[id]'] : 0;
150
+ var isCreating = categoryId == 0; // Separate variable is needed because '0' in javascript converts to TRUE
151
+ var path = params['general[path]'].split('/');
152
+ var parentId = path.pop();
153
+ if (parentId == categoryId) { // Maybe path includes category id itself
154
+ parentId = path.pop();
155
+ }
156
+
157
+ // Make operations with category tree
158
+ if (isCreating) {
159
+ /* Some specific tasks for creating category */
160
+ if (!tree.currentNodeId) {
161
+ // First submit of form - select some node to be current
162
+ tree.currentNodeId = parentId;
163
+ }
164
+ tree.addNodeTo = parentId;
165
+ } else {
166
+ /* Some specific tasks for editing category */
167
+ // Maybe change category enabled/disabled style
168
+ if (tree && tree.storeId==0) {
169
+ var currentNode = tree.getNodeById(categoryId);
170
+
171
+ if (currentNode) {
172
+ if (parseInt(params['general[is_active]'])) {
173
+ var oldClass = 'no-active-category';
174
+ var newClass = 'active-category';
175
+ } else {
176
+ var oldClass = 'active-category';
177
+ var newClass = 'no-active-category';
178
+ }
179
+
180
+ Element.removeClassName(currentNode.ui.wrap.firstChild, oldClass);
181
+ Element.addClassName(currentNode.ui.wrap.firstChild, newClass);
182
+ }
183
+ }
184
+ }
185
+
186
+ // Submit form
187
+ categoryForm.submit();
188
+ }
189
+
190
+ <?php if(($block = $this->getLayout()->getBlock('category.product.grid')) && ($_gridJsObject=$block->getJsObjectName())): ?>
191
+
192
+ var categoryProducts = $H(<?php echo $this->getProductsJson() ?>);
193
+ $('in_category_products').value = categoryProducts.toQueryString();
194
+
195
+ function registerCategoryProduct(grid, element, checked){
196
+ if(checked){
197
+ if(element.positionElement){
198
+ element.positionElement.disabled = false;
199
+ categoryProducts.set(element.value, element.positionElement.value);
200
+ }
201
+ }
202
+ else{
203
+ if(element.positionElement){
204
+ element.positionElement.disabled = true;
205
+ }
206
+ categoryProducts.unset(element.value);
207
+ }
208
+ $('in_category_products').value = categoryProducts.toQueryString();
209
+ grid.reloadParams = {'selected_products[]':categoryProducts.keys()};
210
+ }
211
+ function categoryProductRowClick(grid, event){
212
+ var trElement = Event.findElement(event, 'tr');
213
+ var isInput = Event.element(event).tagName == 'INPUT';
214
+ if(trElement){
215
+ var checkbox = Element.getElementsBySelector(trElement, 'input');
216
+ if(checkbox[0]){
217
+ var checked = isInput ? checkbox[0].checked : !checkbox[0].checked;
218
+ <?php echo $_gridJsObject ?>.setCheckboxChecked(checkbox[0], checked);
219
+ }
220
+ }
221
+ }
222
+ function positionChange(event){
223
+ var element = Event.element(event);
224
+ if(element && element.checkboxElement && element.checkboxElement.checked){
225
+ categoryProducts.set(element.checkboxElement.value, element.value);
226
+ $('in_category_products').value = categoryProducts.toQueryString();
227
+ }
228
+ }
229
+
230
+ var tabIndex = 1000;
231
+ function categoryProductRowInit(grid, row){
232
+ var checkbox = $(row).getElementsByClassName('checkbox')[0];
233
+ var position = $(row).getElementsByClassName('input-text')[0];
234
+ if(checkbox && position){
235
+ checkbox.positionElement = position;
236
+ position.checkboxElement = checkbox;
237
+ position.disabled = !checkbox.checked;
238
+ position.tabIndex = tabIndex++;
239
+ Event.observe(position,'keyup',positionChange);
240
+ }
241
+ }
242
+
243
+
244
+ <?php echo $_gridJsObject ?>.rowClickCallback = categoryProductRowClick;
245
+ <?php echo $_gridJsObject ?>.initRowCallback = categoryProductRowInit;
246
+ <?php echo $_gridJsObject ?>.checkboxCheckCallback = registerCategoryProduct;
247
+ <?php echo $_gridJsObject ?>.rows.each(function(row){categoryProductRowInit(<?php echo $_gridJsObject ?>, row)});
248
+
249
+ <?php endif; ?>
250
+ <?php if($this->isAjax() && ($block = $this->getLayout()->getBlock('tabs')) && ($_tabsJsObject=$block->getJsObjectName())): ?>
251
+ <?php echo $_tabsJsObject ?>.moveTabContentInDest();
252
+ if (<?php echo $_tabsJsObject ?>.activeTab) {
253
+ $('active_tab_id').value = <?php echo $_tabsJsObject ?>.activeTab.id;
254
+ }
255
+ $('active_tab_id').tabsJsObject = <?php echo $_tabsJsObject ?>;
256
+ <?php endif; ?>
257
+ //]]>
258
+ </script>
app/design/adminhtml/default/default/template/catalog/category/tree.phtml ADDED
@@ -0,0 +1,480 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="categories-side-col">
28
+ <div class="content-header">
29
+ <h3 class="icon-head head-categories"><?php echo Mage::helper('catalog')->__('Categories') ?></h3>
30
+ <?php if ($this->getRoot()): ?>
31
+ <?php echo $this->getAddRootButtonHtml() ?><br />
32
+ <?php echo $this->getAddSubButtonHtml() ?>
33
+ <?php endif; ?>
34
+ </div>
35
+ <?php echo $this->getStoreSwitcherHtml();?>
36
+ <div class="tree-actions">
37
+ <?php if($this->getRoot()): ?>
38
+ <?php //echo $this->getCollapseButtonHtml() ?>
39
+ <?php //echo $this->getExpandButtonHtml() ?>
40
+ <a href="#" onclick="tree.collapseTree(); return false;"><?php echo Mage::helper('catalog')->__('Collapse All'); ?></a> <span class="separator">|</span> <a href="#" onclick="tree.expandTree(); return false;"><?php echo Mage::helper('catalog')->__('Expand All'); ?></a>
41
+ <?php endif; ?>
42
+ </div>
43
+ <?php if ($this->getRoot()): ?>
44
+ <div class="tree-holder">
45
+ <div id="tree-div" style="width:100%; overflow:auto;"></div>
46
+ </div>
47
+ </div>
48
+ <script type="text/javascript">
49
+ //<![CDATA[
50
+ var tree;
51
+
52
+ /**
53
+ * Fix ext compatibility with prototype 1.6
54
+ */
55
+ Ext.lib.Event.getTarget = function(e) {
56
+ var ee = e.browserEvent || e;
57
+ return ee.target ? Event.element(ee) : null;
58
+ };
59
+
60
+ Ext.tree.TreePanel.Enhanced = function(el, config)
61
+ {
62
+ Ext.tree.TreePanel.Enhanced.superclass.constructor.call(this, el, config);
63
+ };
64
+
65
+ Ext.extend(Ext.tree.TreePanel.Enhanced, Ext.tree.TreePanel, {
66
+
67
+ loadTree : function(config, firstLoad)
68
+ {
69
+ var parameters = config['parameters'];
70
+ var data = config['data'];
71
+
72
+ this.storeId = parameters['store_id'];
73
+
74
+ if ( this.storeId != 0 && $('add_root_category_button')) {
75
+ $('add_root_category_button').hide();
76
+ }
77
+
78
+ if ((typeof parameters['root_visible']) != 'undefined') {
79
+ this.rootVisible = parameters['root_visible']*1;
80
+ }
81
+
82
+ var root = new Ext.tree.TreeNode(parameters);
83
+
84
+ this.nodeHash = {};
85
+ this.setRootNode(root);
86
+
87
+ if (firstLoad) {
88
+ this.addListener('click', this.categoryClick);
89
+ this.addListener('beforenodedrop', categoryMove.createDelegate(this));
90
+ }
91
+
92
+ this.loader.buildCategoryTree(root, data);
93
+ this.el.dom.innerHTML = '';
94
+ // render the tree
95
+ this.render();
96
+ if (parameters['expanded']) {
97
+ this.expandAll();
98
+ } else {
99
+ root.expand();
100
+ }
101
+
102
+ var selectedNode = this.getNodeById(parameters['category_id']);
103
+ if (selectedNode) {
104
+ this.currentNodeId = parameters['category_id'];
105
+ }
106
+ this.selectCurrentNode();
107
+ },
108
+
109
+ request : function(url, params)
110
+ {
111
+ if (!params) {
112
+ if (category_info_tabsJsTabs.activeTab) {
113
+ var params = {active_tab_id:category_info_tabsJsTabs.activeTab.id};
114
+ }
115
+ else {
116
+ var params = {};
117
+ }
118
+ }
119
+ if (!params.form_key) {
120
+ params.form_key = FORM_KEY;
121
+ }
122
+ var result = new Ajax.Request(
123
+ url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ),
124
+ {
125
+ parameters: params,
126
+ method: 'post'
127
+ }
128
+ );
129
+
130
+ return result;
131
+ },
132
+
133
+ selectCurrentNode : function()
134
+ {
135
+ if (this.currentNodeId) {
136
+ var selectedNode = this.getNodeById(this.currentNodeId);
137
+ if ((typeof selectedNode.attributes.path)!='undefined') {
138
+ var path = selectedNode.attributes.path;
139
+ if (!this.storeId) {
140
+ path = '0/'+path;
141
+ }
142
+ this.selectPath(path);
143
+ } else {
144
+ this.getSelectionModel().select(selectedNode);
145
+ }
146
+ }
147
+ },
148
+
149
+ collapseTree : function()
150
+ {
151
+ this.collapseAll();
152
+
153
+ this.selectCurrentNode();
154
+
155
+ if (!this.collapsed) {
156
+ this.collapsed = true;
157
+ this.loader.dataUrl = '<?php echo $this->getLoadTreeUrl(false) ?>';
158
+ this.request(this.loader.dataUrl, false);
159
+ }
160
+ },
161
+
162
+ expandTree : function()
163
+ {
164
+ this.expandAll();
165
+ if (this.collapsed) {
166
+ this.collapsed = false;
167
+ this.loader.dataUrl = '<?php echo $this->getLoadTreeUrl(true) ?>';
168
+ this.request(this.loader.dataUrl, false);
169
+ }
170
+ },
171
+
172
+ categoryClick : function(node, e)
173
+ {
174
+ var baseUrl = '<?php echo $this->getEditUrl() ?>';
175
+ var urlExt = (this.storeId?'store/'+this.storeId+'/':'')+'id/'+node.id+'/';
176
+ var url = parseSidUrl(baseUrl, urlExt);
177
+
178
+ this.currentNodeId = node.id;
179
+ if (!this.useAjax) {
180
+ setLocation(url);
181
+ return;
182
+ }
183
+ if (category_info_tabsJsTabs.activeTab) {
184
+ var params = {active_tab_id:category_info_tabsJsTabs.activeTab.id};
185
+ }
186
+ updateContent(url, params);
187
+ }
188
+ });
189
+
190
+ function reRenderTree(event, switcher)
191
+ {
192
+ // re-render tree by store switcher
193
+ if (tree && event) {
194
+ var obj = event.target;
195
+ var newStoreId = obj.value * 1;
196
+ var storeParam = newStoreId ? 'store/'+newStoreId + '/' : '';
197
+
198
+ if (obj.switchParams) {
199
+ storeParam += obj.switchParams;
200
+ }
201
+ if (switcher.useConfirm) {
202
+ if (!confirm("<?php echo $this->__('Please confirm site switching. All data that hasn\'t been saved will be lost.') ?>")){
203
+ obj.value = '<?php echo (int) $this->getStoreId() ?>';
204
+ return false;
205
+ }
206
+ }
207
+
208
+ if ($('add_root_category_button')) {
209
+ if (newStoreId == 0) {
210
+ $('add_root_category_button').show();
211
+ }
212
+ else {
213
+ $('add_root_category_button').hide();
214
+ }
215
+ }
216
+
217
+ // retain current selected category id
218
+ storeParam = storeParam + 'id/' + tree.currentNodeId + '/';
219
+ var url = tree.switchTreeUrl + storeParam;
220
+
221
+ // load from cache
222
+ // load from ajax
223
+ new Ajax.Request(url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), {
224
+ parameters : {store: newStoreId, form_key: FORM_KEY},
225
+ method : 'post',
226
+ onComplete : function(transport) {
227
+ var response = eval('(' + transport.responseText + ')');
228
+ if (!response['parameters']) {
229
+ return false;
230
+ }
231
+
232
+ _renderNewTree(response, storeParam);
233
+ }
234
+ });
235
+ }
236
+ // render default tree
237
+ else {
238
+ _renderNewTree();
239
+ }
240
+ }
241
+
242
+ function _renderNewTree(config, storeParam)
243
+ {
244
+ if (!config) {
245
+ var config = defaultLoadTreeParams;
246
+ }
247
+ if (tree) {
248
+ tree.purgeListeners();
249
+ tree.el.dom.innerHTML = '';
250
+ }
251
+ tree = new Ext.tree.TreePanel.Enhanced('tree-div', newTreeParams);
252
+ tree.loadTree(config, true);
253
+
254
+ // try to select current category
255
+ var selectedNode = tree.getNodeById(config.parameters.category_id);
256
+ if (selectedNode) {
257
+ tree.currentNodeId = config.parameters.category_id;
258
+ }
259
+ tree.selectCurrentNode();
260
+
261
+ // update content area
262
+ var url = tree.editUrl;
263
+ if (storeParam) {
264
+ url = url + storeParam;
265
+ }
266
+ <?php if ($this->isClearEdit()):?>
267
+ if (selectedNode) {
268
+ url = url + 'id/' + config.parameters.category_id;
269
+ }
270
+ <?php endif;?>
271
+ updateContent(url);
272
+ }
273
+
274
+ Ext.onReady(function()
275
+ {
276
+ categoryLoader = new Ext.tree.TreeLoader({
277
+ dataUrl: '<?php echo $this->getLoadTreeUrl() ?>'
278
+ });
279
+
280
+ categoryLoader.createNode = function(config) {
281
+ var node;
282
+ var _node = Object.clone(config);
283
+ if (config.children && !config.children.length) {
284
+ delete(config.children);
285
+ node = new Ext.tree.AsyncTreeNode(config);
286
+ } else {
287
+ node = new Ext.tree.TreeNode(config);
288
+ }
289
+
290
+ return node;
291
+ };
292
+
293
+ categoryLoader.buildCategoryTree = function(parent, config)
294
+ {
295
+ if (!config) return null;
296
+
297
+ if (parent && config && config.length){
298
+ for (var i = 0; i < config.length; i++) {
299
+ var node;
300
+ var _node = Object.clone(config[i]);
301
+ if (_node.children && !_node.children.length) {
302
+ delete(_node.children);
303
+ node = new Ext.tree.AsyncTreeNode(_node);
304
+ } else {
305
+ node = new Ext.tree.TreeNode(config[i]);
306
+ }
307
+ parent.appendChild(node);
308
+ node.loader = node.getOwnerTree().loader;
309
+ if (_node.children) {
310
+ this.buildCategoryTree(node, _node.children);
311
+ }
312
+ }
313
+ }
314
+ };
315
+
316
+ categoryLoader.buildHash = function(node)
317
+ {
318
+ var hash = {};
319
+
320
+ hash = this.toArray(node.attributes);
321
+
322
+ if (node.childNodes.length>0 || (node.loaded==false && node.loading==false)) {
323
+ hash['children'] = new Array;
324
+
325
+ for (var i = 0, len = node.childNodes.length; i < len; i++) {
326
+ if (!hash['children']) {
327
+ hash['children'] = new Array;
328
+ }
329
+ hash['children'].push(this.buildHash(node.childNodes[i]));
330
+ }
331
+ }
332
+
333
+ return hash;
334
+ };
335
+
336
+ categoryLoader.toArray = function(attributes) {
337
+ var data = {form_key: FORM_KEY};
338
+ for (var key in attributes) {
339
+ var value = attributes[key];
340
+ data[key] = value;
341
+ }
342
+
343
+ return data;
344
+ };
345
+
346
+ categoryLoader.on("beforeload", function(treeLoader, node) {
347
+ treeLoader.baseParams.id = node.attributes.id;
348
+ treeLoader.baseParams.store = node.attributes.store;
349
+ treeLoader.baseParams.form_key = FORM_KEY;
350
+ });
351
+
352
+ categoryLoader.on("load", function(treeLoader, node, config) {
353
+ varienWindowOnload();
354
+ });
355
+
356
+ if ((typeof varienStoreSwitcher)!='undefined') {
357
+ varienStoreSwitcher.storeSelectorClickCallback = reRenderTree;
358
+ }
359
+
360
+ newTreeParams = {
361
+ animate : false,
362
+ loader : categoryLoader,
363
+ enableDD : true,
364
+ containerScroll : true,
365
+ selModel : new Ext.tree.CheckNodeMultiSelectionModel(),
366
+ rootVisible : '<?php echo $this->getRoot()->getIsVisible() ?>',
367
+ useAjax : <?php echo $this->getUseAjax() ?>,
368
+ switchTreeUrl : '<?php echo $this->getSwitchTreeUrl() ?>',
369
+ editUrl : '<?php echo $this->getEditUrl() ?>',
370
+ currentNodeId : <?php echo (int) $this->getCategoryId() ?>
371
+ };
372
+
373
+ defaultLoadTreeParams = {
374
+ parameters : {
375
+ text : '<?php echo htmlentities($this->getRoot()->getName()) ?>',
376
+ draggable : false,
377
+ allowDrop : <?php if ($this->getRoot()->getIsVisible()): ?>true<?php else : ?>false<?php endif; ?>,
378
+ id : <?php echo (int) $this->getRoot()->getId() ?>,
379
+ expanded : <?php echo (int) $this->getIsWasExpanded() ?>,
380
+ store_id : <?php echo (int) $this->getStore()->getId() ?>,
381
+ category_id : <?php echo (int) $this->getCategoryId() ?>
382
+ },
383
+ data : <?php echo $this->getTreeJson() ?>
384
+ };
385
+
386
+ reRenderTree();
387
+ });
388
+
389
+ function addNew(url, isRoot)
390
+ {
391
+ if (isRoot) {
392
+ tree.currentNodeId = tree.root.id;
393
+ }
394
+
395
+ if (/store\/\d+/.test(url)) {
396
+ url = url.replace(/store\/\d+/, "store/" + tree.storeId);
397
+ }
398
+ else {
399
+ url+= "store/" + tree.storeId + "/";
400
+ }
401
+
402
+ url+= 'parent/'+tree.currentNodeId;
403
+ updateContent(url);
404
+ }
405
+
406
+ function categoryMove(obj)
407
+ {
408
+ var data = {id: obj.dropNode.id, form_key: FORM_KEY};
409
+
410
+ data.point = obj.point;
411
+ switch (obj.point) {
412
+ case 'above' :
413
+ data.pid = obj.target.parentNode.id;
414
+ data.paid = obj.dropNode.parentNode.id;
415
+ if (obj.target.previousSibling) {
416
+ data.aid = obj.target.previousSibling.id;
417
+ } else {
418
+ data.aid = 0;
419
+ }
420
+ break;
421
+ case 'below' :
422
+ data.pid = obj.target.parentNode.id;
423
+ data.aid = obj.target.id;
424
+ break;
425
+ case 'append' :
426
+ data.pid = obj.target.id;
427
+ data.paid = obj.dropNode.parentNode.id;
428
+ if (obj.target.lastChild) {
429
+ data.aid = obj.target.lastChild.id;
430
+ } else {
431
+ data.aid = 0;
432
+ }
433
+ break;
434
+ default :
435
+ obj.cancel = true;
436
+ return obj;
437
+ }
438
+
439
+ var success = function(o) {
440
+ try {
441
+ if(o.responseText){
442
+ if(o.responseText==='SUCCESS'){
443
+ categoryForm.refreshPath();
444
+ } else {
445
+ alert(o.responseText);
446
+ location.reload();
447
+ }
448
+ }
449
+ }
450
+ catch(e) {
451
+ }
452
+ };
453
+
454
+ var failure = function(o) {
455
+ try {
456
+ console.log(o.statusText);
457
+ } catch (e2) {
458
+ alert(o.statusText);
459
+ }
460
+ location.reload();
461
+ };
462
+
463
+ var pd = [];
464
+ for(var key in data) {
465
+ pd.push(encodeURIComponent(key), "=", encodeURIComponent(data[key]), "&");
466
+ }
467
+ pd.splice(pd.length-1,1);
468
+ new Ajax.Request(
469
+ '<?php echo $this->getMoveUrl() ?>',
470
+ {
471
+ method: 'POST',
472
+ parameters: pd.join(""),
473
+ onSuccess : success,
474
+ onFailure : failure
475
+ }
476
+ );
477
+ }
478
+ //]]>
479
+ </script>
480
+ <?php endif; ?>
app/design/adminhtml/default/default/template/catalog/category/widget/tree.phtml ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 $_divId = 'tree' . $this->getId() ?>
29
+ <div id="<?php echo $_divId ?>" class="tree"></div>
30
+
31
+ <script type="text/javascript">
32
+ //<![CDATA[
33
+
34
+ var tree<?php echo $this->getId() ?>;
35
+
36
+ var useMassaction = <?php echo $this->getUseMassaction()?1:0; ?>;
37
+
38
+ var isAnchorOnly = <?php echo $this->getIsAnchorOnly()?1:0; ?>;
39
+
40
+ Ext.tree.TreePanel.Enhanced = function(el, config)
41
+ {
42
+ Ext.tree.TreePanel.Enhanced.superclass.constructor.call(this, el, config);
43
+ };
44
+
45
+ Ext.extend(Ext.tree.TreePanel.Enhanced, Ext.tree.TreePanel, {
46
+
47
+ loadTree : function(config, firstLoad)
48
+ {
49
+ var parameters = config['parameters'];
50
+ var data = config['data'];
51
+
52
+ if ((typeof parameters['root_visible']) != 'undefined') {
53
+ this.rootVisible = parameters['root_visible']*1;
54
+ }
55
+
56
+ var root = new Ext.tree.TreeNode(parameters);
57
+
58
+ this.nodeHash = {};
59
+ this.setRootNode(root);
60
+
61
+ if (firstLoad) {
62
+ <?php if ($this->getNodeClickListener()): ?>
63
+ this.addListener('click', <?php echo $this->getNodeClickListener() ?>.createDelegate(this));
64
+ <?php endif; ?>
65
+ }
66
+
67
+ this.loader.buildCategoryTree(root, data);
68
+ this.el.dom.innerHTML = '';
69
+ // render the tree
70
+ this.render();
71
+ }
72
+ });
73
+
74
+ Ext.onReady(function()
75
+ {
76
+ var emptyNodeAdded = <?php echo ($this->getWithEmptyNode() ? 'false' : 'true') ?>;
77
+
78
+ var categoryLoader = new Ext.tree.TreeLoader({
79
+ dataUrl: '<?php echo $this->getLoadTreeUrl() ?>'
80
+ });
81
+
82
+ categoryLoader.buildCategoryTree = function(parent, config)
83
+ {
84
+ if (!config) return null;
85
+
86
+
87
+ if (parent && config && config.length){
88
+ for (var i = 0; i < config.length; i++) {
89
+ var node;
90
+ if (useMassaction && config[i].is_anchor == isAnchorOnly) {
91
+ config[i].uiProvider = Ext.tree.CheckboxNodeUI;
92
+ }
93
+ var _node = Object.clone(config[i]);
94
+
95
+ // Add empty node to reset category filter
96
+ if(!emptyNodeAdded) {
97
+ var empty = Object.clone(_node);
98
+ empty.text = '<?php echo $this->__('None') ?>';
99
+ empty.children = [];
100
+ empty.id = 'none';
101
+ empty.path = '1/none';
102
+ empty.cls = 'leaf';
103
+ parent.appendChild(new Ext.tree.TreeNode(empty));
104
+ emptyNodeAdded = true;
105
+ }
106
+
107
+ if (_node.children && !_node.children.length) {
108
+ delete(_node.children);
109
+ node = new Ext.tree.AsyncTreeNode(_node);
110
+ } else {
111
+ node = new Ext.tree.TreeNode(config[i]);
112
+ }
113
+ parent.appendChild(node);
114
+ node.loader = node.getOwnerTree().loader;
115
+ node.loader = node.getOwnerTree().loader;
116
+ if (_node.children) {
117
+ this.buildCategoryTree(node, _node.children);
118
+ }
119
+ }
120
+ }
121
+ };
122
+
123
+ categoryLoader.createNode = function(config) {
124
+ var node;
125
+ if (useMassaction && config.is_anchor == isAnchorOnly) {
126
+ config.uiProvider = Ext.tree.CheckboxNodeUI;
127
+ }
128
+ var _node = Object.clone(config);
129
+ if (config.children && !config.children.length) {
130
+ delete(config.children);
131
+ node = new Ext.tree.AsyncTreeNode(config);
132
+ } else {
133
+ node = new Ext.tree.TreeNode(config);
134
+ }
135
+ return node;
136
+ };
137
+
138
+ categoryLoader.buildHash = function(node)
139
+ {
140
+ var hash = {};
141
+
142
+ hash = this.toArray(node.attributes);
143
+
144
+ if (node.childNodes.length>0 || (node.loaded==false && node.loading==false)) {
145
+ hash['children'] = new Array;
146
+
147
+ for (var i = 0, len = node.childNodes.length; i < len; i++) {
148
+ if (!hash['children']) {
149
+ hash['children'] = new Array;
150
+ }
151
+ hash['children'].push(this.buildHash(node.childNodes[i]));
152
+ }
153
+ }
154
+
155
+ return hash;
156
+ };
157
+
158
+ categoryLoader.toArray = function(attributes) {
159
+ var data = {};
160
+ for (var key in attributes) {
161
+ var value = attributes[key];
162
+ data[key] = value;
163
+ }
164
+
165
+ return data;
166
+ };
167
+
168
+ categoryLoader.on("beforeload", function(treeLoader, node) {
169
+ treeLoader.baseParams.id = node.attributes.id;
170
+ });
171
+
172
+ tree<?php echo $this->getId() ?> = new Ext.tree.TreePanel.Enhanced('<?php echo $_divId ?>', {
173
+ animate: false,
174
+ loader: categoryLoader,
175
+ enableDD: false,
176
+ containerScroll: true,
177
+ rootVisible: '<?php echo $this->getRoot()->getIsVisible() ?>',
178
+ useAjax: true,
179
+ currentNodeId: <?php echo (int) $this->getCategoryId() ?>,
180
+ addNodeTo: false
181
+ });
182
+
183
+ if (useMassaction) {
184
+ tree<?php echo $this->getId() ?>.on('check', function(node) {
185
+ $('<?php echo $_divId; ?>').fire('node:changed', {node:node});
186
+ }, tree<?php echo $this->getId() ?>);
187
+ }
188
+
189
+ // set the root node
190
+ var parameters = {
191
+ text: 'Psw',
192
+ draggable: false,
193
+ id: <?php echo (int) $this->getRoot()->getId() ?>,
194
+ expanded: <?php echo (int) $this->getIsWasExpanded() ?>,
195
+ category_id: <?php echo (int) $this->getCategoryId() ?>
196
+ };
197
+
198
+ tree<?php echo $this->getId() ?>.loadTree({parameters:parameters, data:<?php echo $this->getTreeJson() ?>},true);
199
+
200
+ });
201
+ //]]>
202
+ </script>
app/design/adminhtml/default/default/template/catalog/form/renderer/fieldset/element.phtml ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Adminhtml_Block_Catalog_Form_Renderer_Fieldset_Element
30
+ */
31
+ ?>
32
+ <?php $_element = $this->getElement() ?>
33
+ <?php $this->checkFieldDisable() ?>
34
+
35
+ <?php if ($_element->getType()=='hidden'): ?>
36
+ <tr>
37
+ <td class="hidden" colspan="100"><?php echo trim($_element->getElementHtml()) ?></td>
38
+ </tr>
39
+ <?php else: ?>
40
+ <tr>
41
+ <td class="label"><?php echo trim($this->getElementLabelHtml()) ?></td>
42
+ <td class="value">
43
+ <?php echo trim($this->getElementHtml()) ?>
44
+ <?php if ($_element->getNote()) : ?>
45
+ <p class="note"><?php echo $_element->getNote() ?></p>
46
+ <?php endif; ?>
47
+ </td>
48
+ <td class="scope-label"><span class="nobr"><?php echo $this->getScopeLabel() ?></span></td>
49
+ <?php if ($this->canDisplayUseDefault()): ?>
50
+ <td class="value use-default">
51
+ <input <?php if($_element->getReadonly()):?> disabled="disabled"<?php endif; ?> type="checkbox" name="use_default[]" id="<?php echo $_element->getHtmlId() ?>_default"<?php if ($this->usedDefault()): ?> checked="checked"<?php endif; ?> onclick="toggleValueElements(this, this.parentNode.parentNode)" value="<?php echo $this->getAttributeCode() ?>"/>
52
+ <label for="<?php echo $_element->getHtmlId() ?>_default" class="normal"><?php echo $this->__('Use Default Value') ?></label>
53
+ </td>
54
+ <?php endif; ?>
55
+ </tr>
56
+ <?php endif; ?>
app/design/adminhtml/default/default/template/catalog/product.phtml ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Adminhtml_Block_Catalog_Product
30
+ */
31
+ ?>
32
+ <div class="content-header">
33
+ <table cellspacing="0">
34
+ <tr>
35
+ <td style="width:50%;"><h3 class="icon-head head-products"><?php echo Mage::helper('catalog')->__('Manage Products') ?></h3></td>
36
+ <td class="a-right">
37
+ <?php echo $this->getButtonsHtml() ?>
38
+ </td>
39
+ </tr>
40
+ </table>
41
+ </div>
42
+ <?php if( !$this->isSingleStoreMode() ): ?>
43
+ <?php echo $this->getChildHtml('store_switcher');?>
44
+ <?php endif;?>
45
+ <div>
46
+ <?php echo $this->getGridHtml() ?>
47
+ </div>
app/design/adminhtml/default/default/template/catalog/product/attribute/js.phtml ADDED
@@ -0,0 +1,338 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ //<![CDATA[
29
+ function saveAndContinueEdit(){
30
+ disableElements('save');
31
+ var activeTab = product_attribute_tabsJsTabs.activeTab.id;
32
+ if (editForm.submit($('edit_form').action+'back/edit/tab/' + activeTab) == false) {
33
+ enableElements('save');
34
+ }
35
+ varienGlobalEvents.attachEventHandler('formValidateAjaxComplete', function (){
36
+ enableElements('save');
37
+ });
38
+ }
39
+
40
+ function saveAttribute(){
41
+ disableElements('save');
42
+ if (editForm.submit() == false){
43
+ enableElements('save');
44
+ }
45
+ varienGlobalEvents.attachEventHandler('formValidateAjaxComplete', function (){
46
+ enableElements('save');
47
+ });
48
+ }
49
+
50
+ function toggleApplyVisibility(select) {
51
+ if ($(select).value == 1) {
52
+ $(select).next('select').removeClassName('no-display');
53
+ $(select).next('select').removeClassName('ignore-validate');
54
+
55
+ } else {
56
+ $(select).next('select').addClassName('no-display');
57
+ $(select).next('select').addClassName('ignore-validate');
58
+ var options = $(select).next('select').options;
59
+ for( var i=0; i < options.length; i++) {
60
+ options[i].selected = false;
61
+ }
62
+ }
63
+ }
64
+
65
+ function checkOptionsPanelVisibility(){
66
+ if($('matage-options-panel')){
67
+ var panel = $('matage-options-panel');
68
+ if($('frontend_input') && ($('frontend_input').value=='select' || $('frontend_input').value=='multiselect')){
69
+ panel.show();
70
+ }
71
+ else {
72
+ panel.hide();
73
+ }
74
+ }
75
+ }
76
+
77
+ function bindAttributeInputType()
78
+ {
79
+ checkOptionsPanelVisibility();
80
+ switchDefaultValueField();
81
+ checkIsConfigurableVisibility();
82
+ if($('frontend_input') && ($('frontend_input').value=='select' || $('frontend_input').value=='multiselect' || $('frontend_input').value=='price')){
83
+ if($('is_filterable') && !$('is_filterable').getAttribute('readonly')){
84
+ $('is_filterable').disabled = false;
85
+ }
86
+ if($('is_filterable_in_search') && !$('is_filterable_in_search').getAttribute('readonly')){
87
+ $('is_filterable_in_search').disabled = false;
88
+ }
89
+ if($('backend_type') && $('backend_type').options){
90
+ for(var i=0;i<$('backend_type').options.length;i++){
91
+ if($('backend_type').options[i].value=='int') $('backend_type').selectedIndex = i;
92
+ }
93
+ }
94
+ }
95
+ else {
96
+ if($('is_filterable')){
97
+ $('is_filterable').selectedIndex=0;
98
+ $('is_filterable').disabled = true;
99
+ }
100
+ if($('is_filterable_in_search')){
101
+ $('is_filterable_in_search').disabled = true;
102
+ }
103
+ }
104
+
105
+ if ($('frontend_input') && ($('frontend_input').value=='multiselect'
106
+ || $('frontend_input').value=='gallery'
107
+ || $('frontend_input').value=='textarea')) {
108
+ if ($('used_for_sort_by')) {
109
+ $('used_for_sort_by').disabled = true;
110
+ }
111
+ }
112
+ else {
113
+ if ($('used_for_sort_by') && !$('used_for_sort_by').getAttribute('readonly')) {
114
+ $('used_for_sort_by').disabled = false;
115
+ }
116
+ }
117
+
118
+ setRowVisibility('is_wysiwyg_enabled', false);
119
+ setRowVisibility('is_html_allowed_on_front', false);
120
+
121
+ switch ($('frontend_input').value) {
122
+ case 'textarea':
123
+ setRowVisibility('is_wysiwyg_enabled', true);
124
+ if($('is_wysiwyg_enabled').value == '0'){
125
+ setRowVisibility('is_html_allowed_on_front', true);
126
+ $('is_html_allowed_on_front').disabled = false;
127
+ }
128
+ $('frontend_class').value = '';
129
+ $('frontend_class').disabled = true;
130
+ break;
131
+ case 'text':
132
+ setRowVisibility('is_html_allowed_on_front', true);
133
+ $('is_html_allowed_on_front').disabled = false;
134
+
135
+ if (!$('frontend_class').getAttribute('readonly')) {
136
+ $('frontend_class').disabled = false;
137
+ }
138
+ break;
139
+ case 'select':
140
+ case 'multiselect':
141
+ setRowVisibility('is_html_allowed_on_front', true);
142
+ $('is_html_allowed_on_front').disabled = false;
143
+ break;
144
+ default:
145
+ $('frontend_class').value = '';
146
+ $('frontend_class').disabled = true;
147
+ }
148
+
149
+ switchIsFilterable();
150
+ }
151
+
152
+ function switchIsFilterable()
153
+ {
154
+ if ($('is_filterable')) {
155
+ if ($('is_filterable').selectedIndex == 0) {
156
+ $('position').disabled = true;
157
+ } else {
158
+ if (!$('position').getAttribute('readonly')){
159
+ $('position').disabled = false;
160
+ }
161
+ }
162
+ }
163
+ }
164
+
165
+ function disableApplyToValue(value)
166
+ {
167
+ var applyToSelect = $('apply_to');
168
+ for (i=0;i<applyToSelect.options.length;i++) {
169
+ if (value == applyToSelect.options[i].value) {
170
+ applyToSelect.options[i].disabled = true;
171
+ applyToSelect.options[i].selected = false;
172
+ }
173
+ }
174
+ }
175
+
176
+ function switchDefaultValueField()
177
+ {
178
+ if (!$('frontend_input')) {
179
+ return;
180
+ }
181
+
182
+ var currentValue = $('frontend_input').value;
183
+
184
+ var defaultValueTextVisibility = false;
185
+ var defaultValueTextareaVisibility = false;
186
+ var defaultValueDateVisibility = false;
187
+ var defaultValueYesnoVisibility = false;
188
+ var scopeVisibility = true;
189
+
190
+ switch (currentValue) {
191
+ case 'select':
192
+ optionDefaultInputType = 'radio';
193
+ break;
194
+
195
+ case 'multiselect':
196
+ optionDefaultInputType = 'checkbox';
197
+ break;
198
+
199
+ case 'date':
200
+ defaultValueDateVisibility = true;
201
+ break;
202
+
203
+ case 'boolean':
204
+ defaultValueYesnoVisibility = true;
205
+ break;
206
+
207
+ case 'textarea':
208
+ defaultValueTextareaVisibility = true;
209
+ break;
210
+
211
+ case 'media_image':
212
+ defaultValueTextVisibility = false;
213
+ break;
214
+ case 'price':
215
+ scopeVisibility = false;
216
+ default:
217
+ defaultValueTextVisibility = true;
218
+ break;
219
+ }
220
+
221
+ var applyToSelect = $('apply_to');
222
+ switch (currentValue) {
223
+ <?php foreach (Mage::helper('catalog')->getAttributeDisabledTypes() as $type=>$disabled): ?>
224
+ case '<?php echo $type; ?>':
225
+ <?php foreach ($disabled as $one): ?>
226
+ disableApplyToValue('<?php echo $one; ?>');
227
+ <?php endforeach; ?>
228
+ break;
229
+ <?php endforeach; ?>
230
+ default:
231
+ for (i=0;i<applyToSelect.options.length;i++) {
232
+ applyToSelect.options[i].disabled = false;
233
+ }
234
+ break;
235
+ }
236
+
237
+ switch (currentValue) {
238
+ case 'media_image':
239
+ $('front_fieldset').previous().hide();
240
+ $('front_fieldset').hide();
241
+
242
+ setRowVisibility('is_required', false);
243
+ setRowVisibility('is_unique', false);
244
+ setRowVisibility('frontend_class', false);
245
+ break;
246
+
247
+ <?php foreach (Mage::helper('catalog')->getAttributeHiddenFields() as $type=>$fields): ?>
248
+ case '<?php echo $type; ?>':
249
+ <?php foreach ($fields as $one): ?>
250
+ <?php if ($one == '_front_fieldset'): ?>
251
+ $('front_fieldset').previous().hide();
252
+ $('front_fieldset').hide();
253
+ <?php elseif ($one == '_default_value'): ?>
254
+ defaultValueTextVisibility =
255
+ defaultValueTextareaVisibility =
256
+ defaultValueDateVisibility =
257
+ defaultValueYesnoVisibility = false;
258
+ <?php elseif ($one == '_scope'): ?>
259
+ scopeVisibility = false;
260
+ <?php else: ?>
261
+ setRowVisibility('<?php echo $one; ?>', false);
262
+ <?php endif; ?>
263
+ <?php endforeach; ?>
264
+ break;
265
+ <?php endforeach; ?>
266
+
267
+ default:
268
+ $('front_fieldset').previous().show();
269
+ $('front_fieldset').show();
270
+ setRowVisibility('is_required', true);
271
+ setRowVisibility('is_unique', true);
272
+ setRowVisibility('frontend_class', true);
273
+ setRowVisibility('is_configurable', true);
274
+ break;
275
+ }
276
+
277
+ setRowVisibility('default_value_text', defaultValueTextVisibility);
278
+ setRowVisibility('default_value_textarea', defaultValueTextareaVisibility);
279
+ setRowVisibility('default_value_date', defaultValueDateVisibility);
280
+ setRowVisibility('default_value_yesno', defaultValueYesnoVisibility);
281
+ setRowVisibility('is_global', scopeVisibility);
282
+
283
+ var elems = document.getElementsByName('default[]');
284
+ for (var i = 0; i < elems.length; i++) {
285
+ elems[i].type = optionDefaultInputType;
286
+ }
287
+ }
288
+
289
+ function setRowVisibility(id, isVisible)
290
+ {
291
+ if ($(id)) {
292
+ var td = $(id).parentNode;
293
+ var tr = $(td.parentNode);
294
+
295
+ if (isVisible) {
296
+ tr.show();
297
+ } else {
298
+ tr.blur();
299
+ tr.hide();
300
+ }
301
+ }
302
+ }
303
+
304
+ function checkIsConfigurableVisibility()
305
+ {
306
+ if (!$('is_configurable') || !$('is_global') || !$('frontend_input')) return;
307
+ if ($F('is_global')==1 && $F('frontend_input')=='select') {
308
+ setRowVisibility('is_configurable', true);
309
+ } else {
310
+ setRowVisibility('is_configurable', false);
311
+ }
312
+ }
313
+
314
+ function updateRequriedOptions()
315
+ {
316
+ if ($F('frontend_input')=='select' && $F('is_required')==1) {
317
+ $('option-count-check').addClassName('required-options-count');
318
+ } else {
319
+ $('option-count-check').removeClassName('required-options-count');
320
+ }
321
+ }
322
+
323
+ if($('frontend_input')){
324
+ Event.observe($('frontend_input'), 'change', updateRequriedOptions);
325
+ Event.observe($('frontend_input'), 'change', bindAttributeInputType);
326
+ Event.observe($('is_global'), 'change', checkIsConfigurableVisibility);
327
+ }
328
+
329
+ if ($('is_filterable')) {
330
+ Event.observe($('is_filterable'), 'change', switchIsFilterable);
331
+ }
332
+
333
+ if ($('is_required')) {
334
+ Event.observe($('is_required'), 'change', updateRequriedOptions);
335
+ }
336
+ bindAttributeInputType();
337
+ //]]>
338
+ </script>
app/design/adminhtml/default/default/template/catalog/product/attribute/new/created.phtml ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ var added = false;
29
+ function addAttribute(closeAfter) {
30
+ if(window.opener!=null && !added) {
31
+ window.opener.Product.AttributesBridge.addAttributeRow(<?php echo $this->getAttributesBlockJson() ?>);
32
+ added = true;
33
+ }
34
+
35
+ if(closeAfter)
36
+ {
37
+ closeWindow();
38
+ }
39
+ }
40
+
41
+ function closeWindow()
42
+ {
43
+ if (window.opener) {
44
+ window.opener.focus();
45
+ }
46
+ window.close();
47
+ }
48
+
49
+ addAttribute(false);
50
+ setTimeout(closeWindow, 3000);
51
+ </script>
52
+ <div class="a-center">
53
+ <?php echo $this->getCloseButtonHtml() ?>
54
+ </div>
app/design/adminhtml/default/default/template/catalog/product/attribute/options.phtml ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Attribute options control
30
+ *
31
+ * @see Mage_Adminhtml_Block_Catalog_Product_Attribute_Edit_Tab_Options
32
+ */
33
+ ?>
34
+ <div>
35
+ <ul class="messages">
36
+ <li class="notice-msg">
37
+ <ul>
38
+ <li><?php echo Mage::helper('catalog')->__('If you do not specify an option value for a specific store view then the default (Admin) value will be used.') ?></li>
39
+ </ul>
40
+ </li>
41
+ </ul>
42
+ </div>
43
+
44
+ <div class="entity-edit">
45
+ <div class="entry-edit-head">
46
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('catalog')->__('Manage Titles (Size, Color, etc.)') ?></h4>
47
+ </div>
48
+ <div class="box">
49
+ <div class="hor-scroll">
50
+ <table class="dynamic-grid" cellspacing="0" id="attribute-labels-table">
51
+ <tr>
52
+ <?php foreach ($this->getStores() as $_store): ?>
53
+ <th><?php echo $_store->getName() ?></th>
54
+ <?php endforeach; ?>
55
+ </tr>
56
+ <tr>
57
+ <?php $_labels = $this->getLabelValues() ?>
58
+ <?php foreach ($this->getStores() as $_store): ?>
59
+ <td>
60
+ <input class="input-text<?php if($_store->getId()==0): ?> required-option<?php endif; ?>" type="text" name="frontend_label[<?php echo $_store->getId() ?>]" value="<?php echo $this->htmlEscape($_labels[$_store->getId()]) ?>"<?php if ($this->getReadOnly()):?> disabled="disabled"<?php endif;?>/>
61
+ </td>
62
+ <?php endforeach; ?>
63
+ </tr>
64
+ </table>
65
+ </div>
66
+ </div>
67
+ </div>
68
+ <br/>
69
+ <div class="entity-edit" id="matage-options-panel">
70
+ <div class="entry-edit-head">
71
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('catalog')->__('Manage Options (values of your attribute)') ?></h4>
72
+ </div>
73
+ <div class="box">
74
+ <div class="hor-scroll">
75
+ <table class="dynamic-grid" cellspacing="0" cellpadding="0">
76
+ <tr id="attribute-options-table">
77
+ <?php foreach ($this->getStores() as $_store): ?>
78
+ <th><?php echo $_store->getName() ?></th>
79
+ <?php endforeach; ?>
80
+ <th><?php echo Mage::helper('catalog')->__('Position') ?></th>
81
+ <th class="nobr a-center"><?php echo Mage::helper('catalog')->__('Is Default') ?></th>
82
+ <th>
83
+ <?php if (!$this->getReadOnly()):?>
84
+ <?php echo $this->getAddNewButtonHtml() ?>
85
+ <?php endif;?>
86
+ </th>
87
+ </tr>
88
+ <tr class="no-display template" id="row-template">
89
+ <?php foreach ($this->getStores() as $_store): ?>
90
+ <td><input name="option[value][{{id}}][<?php echo $_store->getId() ?>]" value="{{store<?php echo $_store->getId() ?>}}" class="input-text<?php if($_store->getId()==0): ?> required-option<?php endif; ?>" type="text" <?php if ($this->getReadOnly()):?> disabled="disabled"<?php endif;?>/></td>
91
+ <?php endforeach; ?>
92
+ <td class="a-center"><input class="input-text" type="text" name="option[order][{{id}}]" value="{{sort_order}}" <?php if ($this->getReadOnly()):?> disabled="disabled"<?php endif;?>/></td>
93
+ <td><input class="input-radio" type="radio" name="default[]" value="{{id}}" <?php if ($this->getReadOnly()):?> disabled="disabled"<?php endif;?>/></td>
94
+ <td class="a-left">
95
+ <input type="hidden" class="delete-flag" name="option[delete][{{id}}]" value="" />
96
+ <?php if (!$this->getReadOnly()):?>
97
+ <?php echo $this->getDeleteButtonHtml() ?>
98
+ <?php endif;?>
99
+ </td>
100
+ </tr>
101
+ </table>
102
+ </div>
103
+ <input type="hidden" id="option-count-check" value="" />
104
+ </div>
105
+ </div>
106
+ <script type="text/javascript">
107
+ //<![CDATA[
108
+ var optionDefaultInputType = 'radio';
109
+
110
+ // IE removes quotes from element.innerHTML whenever it thinks they're not needed, which breaks html.
111
+ var templateText =
112
+ '<tr class="option-row">'+
113
+ <?php foreach ($this->getStores() as $_store): ?>
114
+ '<td><input name="option[value][{{id}}][<?php echo $_store->getId() ?>]" value="{{store<?php echo $_store->getId() ?>}}" class="input-text<?php if($_store->getId()==0): ?> required-option<?php endif; ?>" type="text" <?php if ($this->getReadOnly()):?> disabled="disabled"<?php endif;?>/><\/td>'+
115
+ <?php endforeach; ?>
116
+ '<td><input class="input-text" type="text" name="option[order][{{id}}]" value="{{sort_order}}" <?php if ($this->getReadOnly()):?> disabled="disabled"<?php endif;?>/><\/td>'+
117
+ '<td class="a-center"><input class="input-radio" type="{{intype}}" name="default[]" value="{{id}}" {{checked}} <?php if ($this->getReadOnly()):?> disabled="disabled"<?php endif;?>/><\/td>'+
118
+ '<td class="a-left" id="delete_button_container_{{id}}">'+
119
+ '<input type="hidden" class="delete-flag" name="option[delete][{{id}}]" value="" />'+
120
+ <?php if (!$this->getReadOnly()):?>
121
+ '<?php echo $this->getDeleteButtonHtml() ?>'+
122
+ <?php endif;?>
123
+ '<\/td>'+
124
+ '<\/tr>';
125
+
126
+ var attributeOption = {
127
+ table : $('attribute-options-table'),
128
+ templateSyntax : /(^|.|\r|\n)({{(\w+)}})/,
129
+ templateText : templateText,
130
+ itemCount : 0,
131
+ totalItems : 0,
132
+ isReadOnly: <?php echo (int)$this->getReadOnly(); ?>,
133
+ add : function(data) {
134
+ this.template = new Template(this.templateText, this.templateSyntax);
135
+ var isNewOption = false;
136
+ if(!data.id){
137
+ data = {};
138
+ data.id = 'option_'+this.itemCount;
139
+ isNewOption = true;
140
+ }
141
+ if (!data.intype)
142
+ data.intype = optionDefaultInputType;
143
+ Element.insert(this.table, {after: this.template.evaluate(data)});
144
+ if (isNewOption && !this.isReadOnly) {
145
+ this.enableNewOptionDeleteButton(data.id);
146
+ }
147
+ this.bindRemoveButtons();
148
+ this.itemCount++;
149
+ this.totalItems++;
150
+ this.updateItemsCountField();
151
+ },
152
+ remove : function(event){
153
+ var element = $(Event.findElement(event, 'tr')); // !!! Button already
154
+ // have table parent in safari
155
+ // Safari workaround
156
+ element.ancestors().each(function(parentItem){
157
+ if (parentItem.hasClassName('option-row')) {
158
+ element = parentItem;
159
+ throw $break;
160
+ } else if (parentItem.hasClassName('box')) {
161
+ throw $break;
162
+ }
163
+ });
164
+
165
+
166
+ if(element){
167
+ var elementFlags = element.getElementsByClassName('delete-flag');
168
+ if(elementFlags[0]){
169
+ elementFlags[0].value=1;
170
+ }
171
+
172
+ element.addClassName('no-display');
173
+ element.addClassName('template');
174
+ element.hide();
175
+ this.totalItems--;
176
+ this.updateItemsCountField();
177
+ }
178
+ },
179
+ updateItemsCountField: function() {
180
+ if (this.totalItems > 0) {
181
+ $('option-count-check').value = '1';
182
+ } else {
183
+ $('option-count-check').value = '';
184
+ }
185
+ },
186
+ enableNewOptionDeleteButton: function(id) {
187
+ $$('#delete_button_container_' + id + ' button').each(function(button) {
188
+ button.enable();
189
+ button.removeClassName('disabled');
190
+ });
191
+ },
192
+ bindRemoveButtons : function(){
193
+ var buttons = $$('.delete-option');
194
+ for(var i=0;i<buttons.length;i++){
195
+ if(!$(buttons[i]).binded){
196
+ $(buttons[i]).binded = true;
197
+ Event.observe(buttons[i], 'click', this.remove.bind(this));
198
+ }
199
+ }
200
+ }
201
+
202
+ }
203
+ if($('row-template')){
204
+ $('row-template').remove();
205
+ }
206
+ attributeOption.bindRemoveButtons();
207
+
208
+ if($('add_new_option_button')){
209
+ Event.observe('add_new_option_button', 'click', attributeOption.add.bind(attributeOption));
210
+ }
211
+ Validation.addAllThese([
212
+ ['required-option', '<?php echo Mage::helper('catalog')->__('Failed') ?>', function(v) {
213
+ return !Validation.get('IsEmpty').test(v);
214
+ }]]);
215
+ Validation.addAllThese([
216
+ ['required-options-count', '<?php echo Mage::helper('catalog')->__('Options is required') ?>', function(v) {
217
+ return !Validation.get('IsEmpty').test(v);
218
+ }]]);
219
+ <?php foreach ($this->getOptionValues() as $_value): ?>
220
+ attributeOption.add(<?php echo $_value->toJson() ?>);
221
+ <?php endforeach; ?>
222
+ //]]>
223
+ </script>
app/design/adminhtml/default/default/template/catalog/product/attribute/set/main.phtml ADDED
@@ -0,0 +1,461 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <table cellspacing="0">
29
+ <tr>
30
+ <td style="width:50%;"><h3 class="icon-head head-product-attribute-sets"><?php echo $this->htmlEscape($this->_getHeader()) ?></h3></td>
31
+ <td class="form-buttons">
32
+ <?php echo $this->getBackButtonHtml() ?>
33
+ <?php echo $this->getResetButtonHtml() ?>
34
+ <?php echo $this->getDeleteButtonHtml() ?>
35
+ <?php echo $this->getSaveButtonHtml() ?>
36
+ </td>
37
+ </tr>
38
+ </table>
39
+ </div>
40
+ <table cellspacing="0" width="100%">
41
+ <tr>
42
+ <td width="360" style="border-right:1px solid #ddd; padding:0 23px 23px 0;" class="edit-attribute-set">
43
+ <?php echo $this->getSetFormHtml() ?>
44
+ </td>
45
+ <td width="320" style="border-right:1px solid #ddd; padding:0 23px 23px 23px;">
46
+ <div class="content-header skip-header">
47
+ <table cellspacing="0">
48
+ <tbody>
49
+ <tr>
50
+ <td><h3><?php echo Mage::helper('catalog')->__('Groups') ?></h3></td>
51
+ </tr>
52
+ </tbody>
53
+ </table>
54
+ </div>
55
+
56
+ <?php if (!$this->getIsReadOnly()): ?>
57
+ <p><?php echo $this->getAddGroupButton() ?>&nbsp;<?php echo $this->getDeleteGroupButton() ?></p>
58
+ <p class="note-block"><?php echo Mage::helper('catalog')->__('Double click on a group to rename it') ?></p>
59
+ <?php endif; ?>
60
+
61
+ <?php echo $this->getSetsFilterHtml() ?>
62
+ <?php echo $this->getGroupTreeHtml() ?>
63
+ </td>
64
+ <td style="padding:0 0 23px 23px;">
65
+ <div class="content-header skip-header">
66
+ <table cellspacing="0">
67
+ <tbody>
68
+ <tr>
69
+ <td><h3><?php echo Mage::helper('catalog')->__('Unassigned Attributes') ?></h3></td>
70
+ </tr>
71
+ </tbody>
72
+ </table>
73
+ </div>
74
+ <div id="tree-div2" style="height:400px; margin-top:5px;overflow:auto"></div>
75
+ <script type="text/javascript">
76
+ //<![CDATA[
77
+ var allowDragAndDrop = <?php echo ($this->getIsReadOnly() ? 'false' : 'true'); ?>;
78
+ var canEditGroups = <?php echo ($this->getIsReadOnly() ? 'false' : 'true'); ?>;
79
+
80
+ var TreePanels = function() {
81
+ // shorthand
82
+ var Tree = Ext.tree;
83
+
84
+ return {
85
+ init : function(){
86
+ // yui-ext tree
87
+
88
+ var tree = new Ext.tree.TreePanel('tree-div1', {
89
+ animate:false,
90
+ loader: false,
91
+ enableDD:allowDragAndDrop,
92
+ containerScroll: true,
93
+ rootVisible: false
94
+ });
95
+
96
+ // set the root node
97
+ this.root = new Ext.tree.TreeNode({
98
+ text: 'ROOT',
99
+ allowDrug:false,
100
+ allowDrop:true,
101
+ id:'1'
102
+ });
103
+
104
+ tree.setRootNode(this.root);
105
+ buildCategoryTree(this.root, <?php echo $this->getGroupTreeJson() ?>);
106
+ // render the tree
107
+ tree.render();
108
+ this.root.expand(false, false);
109
+ tree.expandAll();
110
+
111
+ this.ge = new Ext.tree.TreeEditor(tree, {
112
+ allowBlank:false,
113
+ blankText:'<?php echo Mage::helper('catalog')->__('A name is required') ?>',
114
+ selectOnFocus:true,
115
+ cls:'folder'
116
+ });
117
+
118
+ this.root.addListener('beforeinsert', editSet.leftBeforeInsert);
119
+ this.root.addListener('beforeappend', editSet.leftBeforeInsert);
120
+
121
+ //this.ge.addListener('beforerender', editSet.editGroup);
122
+ this.ge.addListener('beforeshow', editSet.editGroup);
123
+ this.ge.addListener('beforecomplete', editSet.beforeRenameGroup);
124
+ //this.ge.addListener('startedit', editSet.editGroup);
125
+
126
+ //-------------------------------------------------------------
127
+
128
+ var tree2 = new Ext.tree.TreePanel('tree-div2', {
129
+ animate:false,
130
+ loader: false,
131
+ enableDD:allowDragAndDrop,
132
+ containerScroll: true,
133
+ rootVisible: false,
134
+ lines:false
135
+ });
136
+
137
+ // set the root node
138
+ this.root2 = new Ext.tree.TreeNode({
139
+ text: 'ROOT',
140
+ draggable:false,
141
+ id:'free'
142
+ });
143
+ tree2.setRootNode(this.root2);
144
+ buildCategoryTree(this.root2, <?php echo $this->getAttributeTreeJson() ?>);
145
+
146
+ this.root2.addListener('beforeinsert', editSet.rightBeforeInsert);
147
+ this.root2.addListener('beforeappend', editSet.rightBeforeAppend);
148
+
149
+ this.root2.addListener('append', editSet.rightAppend);
150
+ this.root2.addListener('remove', editSet.rightRemove);
151
+ // render the tree
152
+ tree2.render();
153
+ this.root2.expand(false, false);
154
+ tree2.expandAll();
155
+ },
156
+
157
+ rebuildTrees : function(){
158
+ editSet.req.attributes = new Array();
159
+ rootNode = TreePanels.root;
160
+ var gIterator = 0;
161
+ for( i in rootNode.childNodes ) {
162
+ if(rootNode.childNodes[i].id) {
163
+ var group = rootNode.childNodes[i];
164
+ editSet.req.groups[gIterator] = new Array(group.id, group.attributes.text.strip(), (gIterator+1));
165
+ var iterator = 0
166
+ for( j in group.childNodes ) {
167
+ iterator ++;
168
+ if( group.childNodes[j].id > 0 ) {
169
+ editSet.req.attributes[group.childNodes[j].id] = new Array(group.childNodes[j].id, group.id, iterator, group.childNodes[j].attributes.entity_id);
170
+ }
171
+ }
172
+ iterator = 0;
173
+ }
174
+ gIterator ++;
175
+ }
176
+
177
+ editSet.req.not_attributes = new Array();
178
+ rootNode = TreePanels.root2;
179
+
180
+ var iterator = 0;
181
+ for( i in rootNode.childNodes ) {
182
+ if(rootNode.childNodes[i].id) {
183
+ if( rootNode.childNodes[i].id > 0 ) {
184
+ editSet.req.not_attributes[iterator] = rootNode.childNodes[i].attributes.entity_id;
185
+ }
186
+ iterator ++;
187
+ }
188
+ }
189
+ }
190
+ };
191
+ }();
192
+
193
+ function buildCategoryTree(parent, config){
194
+ if (!config) return null;
195
+ if (parent && config && config.length){
196
+ for (var i = 0; i < config.length; i++) {
197
+ var node = new Ext.tree.TreeNode(config[i]);
198
+ parent.appendChild(node);
199
+ node.addListener('click', editSet.register);
200
+ node.addListener('beforemove', editSet.groupBeforeMove);
201
+ node.addListener('beforeinsert', editSet.groupBeforeInsert);
202
+ node.addListener('beforeappend', editSet.groupBeforeInsert);
203
+ if( config[i].children ) {
204
+ for( j in config[i].children ) {
205
+ if(config[i].children[j].id) {
206
+ newNode = new Ext.tree.TreeNode(config[i].children[j]);
207
+ node.appendChild(newNode);
208
+ newNode.addListener('click', editSet.unregister);
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
214
+ }
215
+
216
+ var editSet = function() {
217
+ return {
218
+ register : function(node) {
219
+ editSet.currentNode = node;
220
+ },
221
+
222
+ unregister : function() {
223
+ editSet.currentNode = false;
224
+ },
225
+
226
+ submit : function() {
227
+ if( TreePanels.root.firstChild == TreePanels.root.lastChild ) {
228
+ return;
229
+ }
230
+
231
+ if( editSet.SystemNodesExists(editSet.currentNode) ) {
232
+ alert('<?php echo Mage::helper('core')->jsQuoteEscape(Mage::helper('catalog')->__('This group contains system attributes. Please move system attributes to another group and try again.')) ?>');
233
+ return;
234
+ }
235
+
236
+ if (editSet.ConfigurableNodeExists(editSet.currentNode)) {
237
+ alert('<?php echo Mage::helper('core')->jsQuoteEscape(Mage::helper('catalog')->__('This group contains attributes, used in configurable products. Please move these attributes to another group and try again.')) ?>');
238
+ return;
239
+ }
240
+
241
+ if( editSet.currentNode && editSet.currentNode.attributes.cls == 'folder' ) {
242
+ TreePanels.root.removeChild(editSet.currentNode);
243
+ for( i in editSet.currentNode.childNodes ) {
244
+ if( editSet.currentNode.childNodes[i].id ) {
245
+ child = editSet.currentNode.childNodes[i];
246
+ newNode = new Ext.tree.TreeNode(child.attributes);
247
+
248
+ if( child.attributes.is_user_defined == 1 ) {
249
+ TreePanels.root2.appendChild(newNode);
250
+ }
251
+ }
252
+ }
253
+ editSet.req.removeGroups[editSet.currentNode.id] = editSet.currentNode.id;
254
+ editSet.currentNode = false;
255
+ }
256
+ },
257
+
258
+ SystemNodesExists : function(currentNode) {
259
+ for( i in currentNode.childNodes ) {
260
+ if( currentNode.childNodes[i].id ) {
261
+ child = editSet.currentNode.childNodes[i];
262
+ if( child.attributes.is_user_defined != 1 ) {
263
+ return true;
264
+ }
265
+ }
266
+ }
267
+ },
268
+
269
+ ConfigurableNodeExists : function(currentNode) {
270
+ for (var i in currentNode.childNodes ) {
271
+ if (currentNode.childNodes[i].id) {
272
+ child = editSet.currentNode.childNodes[i];
273
+ if (child.attributes.is_configurable) {
274
+ return true;
275
+ }
276
+ }
277
+ }
278
+ return false;
279
+ },
280
+
281
+ rightAppend : function(node) {
282
+ return;
283
+ },
284
+
285
+ addGroup : function() {
286
+ var group_name = prompt("<?php echo Mage::helper('catalog')->__('Please enter a new group name') ?>","");
287
+ group_name = group_name.strip();
288
+ if( group_name == '' ) {
289
+ this.addGroup();
290
+ } else if( group_name != false && group_name != null && group_name != '' ) {
291
+
292
+ if (!editSet.validateGroupName(group_name, 0)) {
293
+ return;
294
+ }
295
+
296
+ var newNode = new Ext.tree.TreeNode({
297
+ text : group_name.escapeHTML(),
298
+ cls : 'folder',
299
+ allowDrop : true,
300
+ allowDrag : true
301
+ });
302
+ TreePanels.root.appendChild(newNode);
303
+ newNode.addListener('beforemove', editSet.groupBeforeMove);
304
+ newNode.addListener('beforeinsert', editSet.groupBeforeInsert);
305
+ newNode.addListener('beforeappend', editSet.groupBeforeInsert);
306
+ newNode.addListener('click', editSet.register);
307
+ }
308
+ },
309
+
310
+ editGroup : function(obj) {
311
+ if( obj.editNode.attributes.cls != 'folder' || !canEditGroups) {
312
+ TreePanels.ge.cancelEdit();
313
+ return false;
314
+ }
315
+ },
316
+
317
+ beforeRenameGroup : function(obj, after, before) {
318
+ return editSet.validateGroupName(after, obj.editNode.id);
319
+ },
320
+
321
+ validateGroupName : function(name, exceptNodeId) {
322
+ name = name.strip();
323
+ if (name === '') {
324
+ return false;
325
+ }
326
+ for (var i=0; i < TreePanels.root.childNodes.length; i++) {
327
+ if (TreePanels.root.childNodes[i].text.toLowerCase() == name.toLowerCase() && TreePanels.root.childNodes[i].id != exceptNodeId) {
328
+ errorText = "<?php echo Mage::helper('catalog')->__('Attribute group with the \"/name/\" name already exists') ?>";
329
+ alert(errorText.replace("/name/",name));
330
+ return false;
331
+ }
332
+ }
333
+ return true;
334
+ },
335
+
336
+ save : function() {
337
+ $('messages').update();
338
+ TreePanels.rebuildTrees();
339
+ var _validator = new Validation('set_prop_form', {onSubmit:false});
340
+ if( !_validator.validate() ) {
341
+ return;
342
+ }
343
+ editSet.req.attribute_set_name = $('attribute_set_name').value;
344
+ if (!editSet.req.form_key) {
345
+ editSet.req.form_key = FORM_KEY;
346
+ }
347
+ var req = {data : Ext.util.JSON.encode(editSet.req)};
348
+ var con = new Ext.lib.Ajax.request('POST', '<?php echo $this->getMoveUrl() ?>', {success:editSet.success,failure:editSet.failure}, req);
349
+ },
350
+
351
+ success : function(o) {
352
+ var response = Ext.util.JSON.decode(o.responseText);
353
+ if( response.error ) {
354
+ $('messages').update(response.message);
355
+ } else if( response.ajaxExpired && response.ajaxRedirect ){
356
+ setLocation(response.ajaxRedirect);
357
+ } else if( response.url ){
358
+ setLocation(response.url);
359
+ } else if( response.message ) {
360
+ $('messages').update(response.message);
361
+ }
362
+ },
363
+
364
+ failure : function(o) {
365
+ alert('<?php echo Mage::helper('core')->jsQuoteEscape(Mage::helper('catalog')->__('Unable to complete this request.')) ?>');
366
+ },
367
+
368
+ groupBeforeMove : function(tree, nodeThis, oldParent, newParent) {
369
+ if( newParent.attributes.cls == 'folder' && nodeThis.attributes.cls == 'folder' ) {
370
+ return false;
371
+ }
372
+
373
+ if( newParent == TreePanels.root && nodeThis.attributes.cls != 'folder' ) {
374
+ return false;
375
+ }
376
+ },
377
+
378
+ rightBeforeAppend : function(tree, nodeThis, node, newParent) {
379
+ if (node.attributes.is_user_defined == 0) {
380
+ alert('<?php echo Mage::helper('core')->jsQuoteEscape(Mage::helper('catalog')->__('You cannot remove system attribute from this set.')) ?>');
381
+ return false;
382
+ }
383
+ else if (node.attributes.is_configurable == 1) {
384
+ alert('<?php echo Mage::helper('core')->jsQuoteEscape(Mage::helper('catalog')->__('This attribute is used in configurable products. You cannot remove it from the attribute set.')) ?>');
385
+ return false;
386
+ }
387
+ else {
388
+ return true;
389
+ }
390
+ },
391
+
392
+ rightBeforeInsert : function(tree, nodeThis, node, newParent) {
393
+ var empty = TreePanels.root2.findChild('id', 'empty');
394
+ if( empty ) {
395
+ return false;
396
+ }
397
+
398
+ if (node.attributes.is_user_defined == 0) {
399
+ alert('<?php echo Mage::helper('core')->jsQuoteEscape(Mage::helper('catalog')->__('You cannot remove system attribute from this set.')) ?>');
400
+ return false;
401
+ }
402
+ else if (node.attributes.is_configurable == 1) {
403
+ alert('<?php echo Mage::helper('core')->jsQuoteEscape(Mage::helper('catalog')->__('This attribute is used in configurable products. You cannot remove it from the attribute set.')) ?>');
404
+ return false;
405
+ }
406
+ else {
407
+ return true;
408
+ }
409
+ },
410
+
411
+ groupBeforeInsert : function(tree, nodeThis, node, newParent) {
412
+ if( node.allowChildren ) {
413
+ return false;
414
+ }
415
+ },
416
+
417
+ rightAppend : function(tree, nodeThis, node) {
418
+ var empty = TreePanels.root2.findChild('id', 'empty');
419
+ if( empty && node.id != 'empty' ) {
420
+ TreePanels.root2.removeChild(empty);
421
+ }
422
+ },
423
+
424
+ rightRemove : function(tree, nodeThis, node) {
425
+ if( nodeThis.firstChild == null && node.id != 'empty' ) {
426
+ var newNode = new Ext.tree.TreeNode({
427
+ text : '<?php echo Mage::helper('catalog')->__('Empty') ?>',
428
+ id : 'empty',
429
+ cls : 'folder',
430
+ is_user_defined : 1,
431
+ allowDrop : false,
432
+ allowDrag : false
433
+ });
434
+ TreePanels.root2.appendChild(newNode);
435
+ }
436
+ },
437
+
438
+ leftBeforeInsert : function(tree, nodeThis, node, newParent) {
439
+ if( node.allowChildren == false ) {
440
+ return false;
441
+ }
442
+ }
443
+ }
444
+ }();
445
+
446
+ function initVars() {
447
+ editSet.req = {};
448
+ editSet.req.attributes = false;
449
+ editSet.req.groups = new Array();
450
+ editSet.req.not_attributes = false;
451
+ editSet.req.attribute_set_name = false;
452
+ editSet.req.removeGroups = new Array();
453
+ }
454
+
455
+ initVars();
456
+ Ext.EventManager.onDocumentReady(TreePanels.init, TreePanels, true);
457
+ //]]>
458
+ </script>
459
+ </td>
460
+ </tr>
461
+ </table>
app/design/adminhtml/default/default/template/catalog/product/attribute/set/main/tree/attribute.phtml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ ?>
app/design/adminhtml/default/default/template/catalog/product/attribute/set/main/tree/group.phtml ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div id="tree-div1" style="width:320px;height:400px;margin-top:5px;overflow:auto"></div>
app/design/adminhtml/default/default/template/catalog/product/attribute/set/toolbar/add.phtml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <table cellspacing="0">
29
+ <tr>
30
+ <td style="width:50%;"><h3 class="icon-head head-product-attribute-sets"><?php echo $this->_getHeader() ?></h3></td>
31
+ <td class="form-buttons">
32
+ <?php echo $this->getBackButtonHtml() ?>
33
+ <?php echo $this->getSaveButtonHtml() ?>
34
+ </td>
35
+ </tr>
36
+ </table>
37
+ </div>
38
+ <?php echo $this->getFormHtml() ?>
39
+ <script type="text/javascript">
40
+ var addSet = new varienForm('<?php echo $this->getFormId() ?>');
41
+ </script>
app/design/adminhtml/default/default/template/catalog/product/attribute/set/toolbar/main.phtml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <table cellspacing="0">
29
+ <tr>
30
+ <td style="width:50%;"><h3 class="icon-head head-product-attribute-sets"><?php echo $this->_getHeader() ?></h3></td>
31
+ <td class="form-buttons">
32
+ <?php echo $this->getNewButtonHtml() ?>
33
+ </td>
34
+ </tr>
35
+ </table>
36
+ </div>
app/design/adminhtml/default/default/template/catalog/product/composite/configure.phtml ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div id="popup-window-mask" style="display:none;"></div>
28
+ <div id="product_composite_configure" class="product-configure-popup" style="display:none;">
29
+ <iframe name="product_composite_configure_iframe" id="product_composite_configure_iframe" src="#" style="width:0; height:0; border:0px solid #fff; position:absolute; top:-1000px; left:-1000px" onload="window.productConfigure && productConfigure.onLoadIFrame()"></iframe>
30
+ <form action="" method="post" id="product_composite_configure_form" enctype="multipart/form-data" onsubmit="productConfigure.onConfirmBtn(); return false;" target="product_composite_configure_iframe">
31
+ <div class="entry-edit">
32
+ <div class="entry-edit-head">
33
+ <h4 class="icon-head fieldset-legend"><?php echo Mage::helper('catalog')->__('Configure Product') ?></h4>
34
+ </div>
35
+ <div id="product_composite_configure_messages" style="display: none;" >
36
+ <ul class="messages"><li class="error-msg"></li></ul>
37
+ </div>
38
+ <div id="product_composite_configure_form_fields" class="content"></div>
39
+ <div id="product_composite_configure_form_additional" style="display:none;"></div>
40
+ <div id="product_composite_configure_form_confirmed" style="display:none;"></div>
41
+ <div class="buttons-set a-right">
42
+ <button type="button" class="scalable" onclick="productConfigure.onCancelBtn()" id="product_composite_configure_form_cancel"><span><span><span><?php echo Mage::helper('catalog')->__('Cancel') ?></span></span></span></button>
43
+ <button type="submit" class="scalable"><span><span><span><?php echo Mage::helper('catalog')->__('OK') ?></span></span></span></button>
44
+ </div>
45
+ </div>
46
+ <input type="hidden" name="as_js_varname" value="iFrameResponse" />
47
+ <input type="hidden" name="form_key" value="<?php echo $this->getFormKey() ?>" />
48
+ </form>
49
+ <div id="product_composite_configure_confirmed" style="display:none;"></div>
50
+
51
+ <script type="text/javascript">
52
+ var productCompositeConfigureForm = new varienForm('product_composite_configure_form');
53
+ </script>
54
+ </div>
app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/configurable.phtml ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Adminhtml_Block_Catalog_Product_Composite_Fieldset_Configurable */ ?>
29
+ <?php $_product = $this->getProduct(); ?>
30
+ <?php $_attributes = Mage::helper('core')->decorateArray($this->getAllowAttributes()); ?>
31
+ <?php $_skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck(); ?>
32
+ <?php if (($_product->isSaleable() || $_skipSaleableCheck) && count($_attributes)):?>
33
+ <div id="catalog_product_composite_configure_fields_configurable" class="<?php echo $this->getIsLastFieldset() ? 'last-fieldset' : '' ?>">
34
+ <h4><?php echo Mage::helper('catalog')->__('Associated Products') ?></h4>
35
+ <div class="product-options">
36
+ <dl>
37
+ <?php foreach($_attributes as $_attribute): ?>
38
+ <dt><label class="required"><em>*</em><?php echo $_attribute->getLabel() ?></label></dt>
39
+ <dd<?php if ($_attribute->decoratedIsLast){?> class="last"<?php }?>>
40
+ <div class="input-box">
41
+ <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select">
42
+ <option><?php echo Mage::helper('catalog')->__('Choose an Option...') ?></option>
43
+ </select>
44
+ </div>
45
+ </dd>
46
+ <?php endforeach; ?>
47
+ </dl>
48
+ </div>
49
+ </div>
50
+ <script type="text/javascript">
51
+ var config = <?php echo $this->getJsonConfig() ?>;
52
+ if (window.productConfigure) {
53
+ config.containerId = window.productConfigure.blockFormFields.id;
54
+ if (window.productConfigure.restorePhase) {
55
+ config.inputsInitialized = true;
56
+ }
57
+ }
58
+ ProductConfigure.spConfig = new Product.Config(config);
59
+ </script>
60
+ <?php endif;?>
app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/grouped.phtml ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Adminhtml_Block_Catalog_Product_Composite_Fieldset_Grouped */ ?>
29
+ <?php $_skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck(); ?>
30
+ <div id="catalog_product_composite_configure_fields_grouped" class="grid <?php echo $this->getIsLastFieldset() ? 'last-fieldset' : '' ?>">
31
+ <h4><?php echo Mage::helper('catalog')->__('Associated Products') ?></h4>
32
+ <div class="product-options">
33
+ <?php $_product = $this->getProduct(); ?>
34
+ <?php $this->setPreconfiguredValue(); ?>
35
+ <?php $_associatedProducts = $this->getAssociatedProducts(); ?>
36
+ <?php $_hasAssociatedProducts = count($_associatedProducts) > 0; ?>
37
+ <?php if ((!$_product->isAvailable() && !$_skipSaleableCheck) || !$_hasAssociatedProducts): ?>
38
+ <p class="availability out-of-stock"><?php echo Mage::helper('catalog')->__('Availability:') ?> <span><?php echo Mage::helper('catalog')->__('Out of stock') ?></span></p>
39
+ <?php endif; ?>
40
+ <table class="data-table grouped-items-table" id="super-product-table">
41
+ <col />
42
+ <col />
43
+ <col />
44
+ <col />
45
+ <col width="1" />
46
+ <thead>
47
+ <tr "class="headings">
48
+ <th><?php echo Mage::helper('catalog')->__('ID') ?></th>
49
+ <th><?php echo Mage::helper('catalog')->__('SKU') ?></th>
50
+ <th><?php echo Mage::helper('catalog')->__('Product Name') ?></th>
51
+ <?php if ($this->getCanShowProductPrice($_product)): ?>
52
+ <th class="a-right"><?php echo Mage::helper('catalog')->__('Price') ?></th>
53
+ <?php endif; ?>
54
+ <?php if ($_product->isSaleable() || $_skipSaleableCheck): ?>
55
+ <th class="a-center"><?php echo Mage::helper('catalog')->__('Qty') ?></th>
56
+ <?php endif; ?>
57
+ </tr>
58
+ </thead>
59
+ <tbody>
60
+ <?php if ($_hasAssociatedProducts): ?>
61
+ <?php $i = 0 ?>
62
+ <?php foreach ($_associatedProducts as $_item): ?>
63
+ <?php $_finalPriceInclTax = $this->helper('tax')->getPrice($_item, $_item->getFinalPrice(), true) ?>
64
+ <tr class="<?php echo (++$i % 2) ? 'even' : 'odd' ?>">
65
+ <td><?php echo $_item->getId() ?></td>
66
+ <td><?php echo $this->escapeHtml($_item->getSku()) ?></td>
67
+ <td><?php echo $this->escapeHtml($_item->getName()) ?></td>
68
+ <?php if ($this->getCanShowProductPrice($_product)): ?>
69
+ <td class="a-right">
70
+ <?php if ($this->getCanShowProductPrice($_item)): ?>
71
+ <?php echo $this->getPriceHtml($_item, true) ?>
72
+ <?php endif; ?>
73
+ </td>
74
+ <?php endif; ?>
75
+ <?php if ($_product->isSaleable() || $_skipSaleableCheck): ?>
76
+ <td class="a-center">
77
+ <?php if ($_item->isSaleable() || $_skipSaleableCheck) : ?>
78
+ <input type="text" name="super_group[<?php echo $_item->getId() ?>]" id="super_group[<?php echo $_item->getId() ?>]" maxlength="12" value="<?php echo $_item->getQty()*1 ?>" title="<?php echo Mage::helper('catalog')->__('Qty') ?>" class="input-text qty" />
79
+ <input type="hidden" value="1" price="<?php echo $this->getCurrencyPrice($_item->getPrice()) ?>" qtyId="super_group[<?php echo $_item->getId() ?>]" />
80
+ <?php else: ?>
81
+ <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
82
+ <?php endif; ?>
83
+ </td>
84
+ <?php endif; ?>
85
+ </tr>
86
+ <?php endforeach; ?>
87
+ <?php else: ?>
88
+ <tr>
89
+ <td colspan="<?php if ($_product->isSaleable() || $_skipSaleableCheck): ?>4<?php else : ?>3<?php endif; ?>"><?php echo Mage::helper('catalog')->__('No options of this product are available.') ?></td>
90
+ </tr>
91
+ <?php endif; ?>
92
+ </tbody>
93
+ </table>
94
+ </div>
95
+ </div>
app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options.phtml ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Adminhtml_Block_Catalog_Product_Composite_Fieldset_Options */ ?>
29
+ <?php $options = Mage::helper('core')->decorateArray($this->getOptions()); ?>
30
+ <?php if (count($options)): ?>
31
+
32
+ <?php echo $this->getChildHtml('options_js') ?>
33
+
34
+ <div id="product_composite_configure_fields_options" class="<?php echo $this->getIsLastFieldset() ? 'last-fieldset' : '' ?>">
35
+ <h4><?php echo Mage::helper('catalog')->__('Custom Options') ?></h4>
36
+ <div class="product-options">
37
+ <dl>
38
+ <?php foreach($options as $option): ?>
39
+ <?php echo $this->getOptionHtml($option); ?>
40
+ <?php endforeach;?>
41
+ </dl>
42
+ </div>
43
+ </div>
44
+
45
+ <?php endif; ?>
app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/js.phtml ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
29
+ //<![CDATA[
30
+ validateOptionsCallback = function (elmId, result){
31
+ var container = $(elmId).up('ul.options-list');
32
+ if (!container) {
33
+ return;
34
+ }
35
+ if (result == 'failed') {
36
+ container.removeClassName('validation-passed');
37
+ container.addClassName('validation-failed');
38
+ } else {
39
+ container.removeClassName('validation-failed');
40
+ container.addClassName('validation-passed');
41
+ }
42
+ }
43
+
44
+ productConfigure.opConfig = {};
45
+
46
+ var DateOption = Class.create({
47
+
48
+ getDaysInMonth: function(month, year)
49
+ {
50
+ var curDate = new Date();
51
+ if (!month) {
52
+ month = curDate.getMonth();
53
+ }
54
+ if (2 == month && !year) { // leap year assumption for unknown year
55
+ return 29;
56
+ }
57
+ if (!year) {
58
+ year = curDate.getFullYear();
59
+ }
60
+ return 32 - new Date(year, month - 1, 32).getDate();
61
+ },
62
+
63
+ reloadMonth: function(event)
64
+ {
65
+ var selectEl = event.findElement();
66
+ var idParts = selectEl.id.split("_");
67
+ if (idParts.length != 3) {
68
+ return false;
69
+ }
70
+ var optionIdPrefix = idParts[0] + "_" + idParts[1];
71
+ var month = parseInt($(optionIdPrefix + "_month").value);
72
+ var year = parseInt($(optionIdPrefix + "_year").value);
73
+ var dayEl = $(optionIdPrefix + "_day");
74
+
75
+ var days = this.getDaysInMonth(month, year);
76
+
77
+ //remove days
78
+ for (var i = dayEl.options.length - 1; i >= 0; i--) {
79
+ if (dayEl.options[i].value > days) {
80
+ dayEl.remove(dayEl.options[i].index);
81
+ }
82
+ }
83
+
84
+ // add days
85
+ var lastDay = parseInt(dayEl.options[dayEl.options.length-1].value);
86
+ for (i = lastDay + 1; i <= days; i++) {
87
+ this.addOption(dayEl, i, i);
88
+ }
89
+ },
90
+
91
+ addOption: function(select, text, value)
92
+ {
93
+ var option = document.createElement('OPTION');
94
+ option.value = value;
95
+ option.text = text;
96
+
97
+ if (select.options.add) {
98
+ select.options.add(option);
99
+ } else {
100
+ select.appendChild(option);
101
+ }
102
+ }
103
+ });
104
+ productConfigure.opConfig.dateOption = new DateOption();
105
+ //]]>
106
+ </script>
app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/type/date.phtml ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Catalog_Block_Product_View_Options_Type_Date */ ?>
28
+ <?php $_option = $this->getOption(); ?>
29
+ <?php $_optionId = $_option->getId(); ?>
30
+ <dt class="label"><label<?php if ($_option->getIsRequire()) echo ' class="required"' ?>><?php if ($_option->getIsRequire()) echo '<em>*</em>' ?><?php echo $this->escapeHtml($_option->getTitle()) ?></label>
31
+ <?php echo $this->getFormatedPrice() ?></dt>
32
+ <dd<?php if ($_option->decoratedIsLast){?> class="last"<?php }?>>
33
+
34
+ <?php if ($_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DATE_TIME
35
+ || $_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DATE): ?>
36
+
37
+ <?php echo $this->getDateHtml() ?>
38
+
39
+ <?php if (!$this->useCalendar()): ?>
40
+ <script type="text/javascript">
41
+ //<![CDATA[
42
+ var dateOption = productConfigure.opConfig.dateOption;
43
+ Event.observe('options_<?php echo $_optionId ?>_month', 'change', dateOption.reloadMonth.bind(dateOption));
44
+ Event.observe('options_<?php echo $_optionId ?>_year', 'change', dateOption.reloadMonth.bind(dateOption));
45
+ //]]>
46
+ </script>
47
+ <?php endif; ?>
48
+
49
+ <?php endif; ?>
50
+
51
+ <?php if ($_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DATE_TIME
52
+ || $_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_TIME): ?>
53
+ <span class="time-picker"><?php echo $this->getTimeHtml() ?></span>
54
+ <?php endif; ?>
55
+
56
+ <input type="hidden" name="validate_datetime_<?php echo $_optionId ?>" class="validate-datetime-<?php echo $_optionId ?>" value="" />
57
+ <script type="text/javascript">
58
+ //<![CDATA[
59
+ <?php if ($_option->getIsRequire()): ?>
60
+ Validation.addAllThese(
61
+ [
62
+ ['validate-datetime-<?php echo $_optionId ?>', '<?php echo $this->jsQuoteEscape( Mage::helper('catalog')->__('This is a required option') )?>', function(v) {
63
+ var dateTimeParts = $$('.datetime-picker[id^="options_<?php echo $_optionId ?>"]');
64
+ for (var i=0; i < dateTimeParts.length; i++) {
65
+ if (dateTimeParts[i].value == "") return false;
66
+ }
67
+ return true;
68
+ }]
69
+ ]
70
+ );
71
+ <?php else: ?>
72
+ Validation.add(
73
+ 'validate-datetime-<?php echo $_optionId ?>',
74
+ '<?php echo $this->jsQuoteEscape( Mage::helper('catalog')->__('Field is not complete') )?>',
75
+ function(v) {
76
+ var dateTimeParts = $$('.datetime-picker[id^="options_<?php echo $_optionId ?>"]');
77
+ var hasWithValue = false, hasWithNoValue = false;
78
+ var pattern = /day_part$/i;
79
+ for (var i=0; i < dateTimeParts.length; i++) {
80
+ if (! pattern.test(dateTimeParts[i].id)) {
81
+ if (dateTimeParts[i].value === "") {
82
+ hasWithValue = true;
83
+ } else {
84
+ hasWithNoValue = true;
85
+ }
86
+ }
87
+ }
88
+ return hasWithValue ^ hasWithNoValue;
89
+ }
90
+ );
91
+ <?php endif; ?>
92
+ //]]>
93
+ </script>
94
+ </dd>
app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/type/default.phtml ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Adminhtml_Block_Catalog_Product_Composite_Fieldset_Options */ ?>
28
+ <?php $option = $this->getOption(); ?>
29
+ <dt>
30
+ <label><?php echo $this->escapeHtml($option->getTitle()) ?></label>
31
+ </dt>
app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/type/file.phtml ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 $_option = $this->getOption(); ?>
28
+ <?php $_fileInfo = $this->getFileInfo(); ?>
29
+ <?php $_fileExists = $_fileInfo->hasData() ? true : false; ?>
30
+ <?php $_fileName = 'options_' . $_option->getId() . '_file'; ?>
31
+ <?php $_fieldNameAction = $_fileName . '_action'; ?>
32
+ <?php $_fieldValueAction = $_fileExists ? 'save_old' : 'save_new'; ?>
33
+ <?php $_fileNamed = $_fileName . '_name'; ?>
34
+ <?php $_rand = rand(); ?>
35
+
36
+ <script type="text/javascript">
37
+ //<![CDATA[
38
+ opFile<?php echo $_rand; ?> = {
39
+ initializeFile: function(inputBox) {
40
+ this.inputFile = inputBox.select('input[name="<?php echo $_fileName; ?>"]')[0];
41
+ this.inputFileAction = inputBox.select('input[name="<?php echo $_fieldNameAction; ?>"]')[0];
42
+ this.fileNameBox = inputBox.up('dd').select('.<?php echo $_fileNamed ?>')[0];
43
+ },
44
+
45
+ toggleFileChange: function(inputBox) {
46
+ this.initializeFile(inputBox);
47
+ inputBox.toggle();
48
+ this.fileChangeFlag = this.fileChangeFlag ? false : true;
49
+ if (!this.fileDeleteFlag) {
50
+ if (this.fileChangeFlag) {
51
+ this.inputFileAction.value = 'save_new';
52
+ this.inputFile.disabled = false;
53
+ } else {
54
+ this.inputFileAction.value = 'save_old';
55
+ this.inputFile.disabled = true;
56
+ }
57
+ }
58
+ },
59
+
60
+ toggleFileDelete: function(fileDeleteFlag, inputBox) {
61
+ this.initializeFile(inputBox);
62
+ this.fileDeleteFlag = fileDeleteFlag.checked ? true : false;
63
+ if (this.fileDeleteFlag) {
64
+ this.inputFileAction.value = '';
65
+ this.inputFile.disabled = true;
66
+ this.fileNameBox.setStyle({'text-decoration': 'line-through'});
67
+ } else {
68
+ this.inputFileAction.value = this.fileChangeFlag ? 'save_new' : 'save_old';
69
+ this.inputFile.disabled = (this.fileChangeFlag == 'save_old');
70
+ this.fileNameBox.setStyle({'text-decoration': 'none'});
71
+ }
72
+ }
73
+ };
74
+ //]]>
75
+ </script>
76
+
77
+ <dt><label <?php if ($_option->getIsRequire()) echo ' class="required"' ?>><?php if ($_option->getIsRequire()) echo '<em>*</em>' ?><?php echo $this->htmlEscape($_option->getTitle()) ?></label>
78
+ <?php echo $this->getFormatedPrice() ?></dt>
79
+ <dd<?php if ($_option->decoratedIsLast){?> class="last"<?php }?>>
80
+ <?php if ($_fileExists): ?>
81
+ <span class="<?php echo $_fileNamed ?>"><?php echo $_fileInfo->getTitle(); ?></span>
82
+ <a href="javascript:void(0)" class="label" onclick="opFile<?php echo $_rand; ?>.toggleFileChange($(this).next('.input-box'))">
83
+ <?php echo Mage::helper('catalog')->__('Change') ?>
84
+ </a>&nbsp;
85
+ <?php if (!$_option->getIsRequire()): ?>
86
+ <input type="checkbox" onclick="opFile<?php echo $_rand; ?>.toggleFileDelete($(this), $(this).next('.input-box'))" price="<?php echo $this->getCurrencyPrice($_option->getPrice(true)) ?>"/>
87
+ <span class="label"><?php echo Mage::helper('catalog')->__('Delete') ?></span>
88
+ <?php endif; ?>
89
+ <?php endif; ?>
90
+ <div class="input-box" <?php echo $_fileExists ? 'style="display:none"' : '' ?>>
91
+ <input type="file" name="<?php echo $_fileName; ?>" class="product-custom-option<?php echo $_option->getIsRequire() ? ' required-entry' : '' ?>" price="<?php echo $this->getCurrencyPrice($_option->getPrice(true)) ?>" <?php echo $_fileExists ? 'disabled="disabled"' : '' ?>/>
92
+ <input type="hidden" name="<?php echo $_fieldNameAction; ?>" value="<?php echo $_fieldValueAction; ?>" />
93
+ <?php if ($_option->getFileExtension()): ?>
94
+ <p class="no-margin"><?php echo Mage::helper('catalog')->__('Allowed file extensions to upload')?>: <strong><?php echo $_option->getFileExtension() ?></strong></p>
95
+ <?php endif; ?>
96
+ <?php if ($_option->getImageSizeX() > 0): ?>
97
+ <p class="no-margin"><?php echo Mage::helper('catalog')->__('Maximum image width')?>: <strong><?php echo $_option->getImageSizeX() ?> <?php echo Mage::helper('catalog')->__('px.')?></strong></p>
98
+ <?php endif; ?>
99
+ <?php if ($_option->getImageSizeY() > 0): ?>
100
+ <p class="no-margin"><?php echo Mage::helper('catalog')->__('Maximum image height')?>: <strong><?php echo $_option->getImageSizeY() ?> <?php echo Mage::helper('catalog')->__('px.')?></strong></p>
101
+ <?php endif; ?>
102
+ </div>
103
+ </dd>
app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/type/select.phtml ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Catalog_Block_Product_View_Options_Type_Select */ ?>
28
+ <?php $_option = $this->getOption(); ?>
29
+ <dt><label<?php if ($_option->getIsRequire()) echo ' class="required"' ?>><?php if ($_option->getIsRequire()) echo '<em>*</em>' ?><?php echo $this->escapeHtml($_option->getTitle()) ?></label></dt>
30
+ <dd<?php if ($_option->decoratedIsLast){?> class="last"<?php }?>>
31
+ <div class="input-box">
32
+ <?php echo $this->getValuesHtml() ?>
33
+ <?php if ($_option->getIsRequire()): ?>
34
+ <?php if ($_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_RADIO || $_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_CHECKBOX): ?>
35
+ <span id="options-<?php echo $_option->getId() ?>-container"></span>
36
+ <?php endif; ?>
37
+ <?php endif;?>
38
+ </div>
39
+ </dd>
app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/options/type/text.phtml ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Catalog_Block_Product_View_Options_Type_Text */ ?>
28
+ <?php $_option = $this->getOption(); ?>
29
+ <dt><label<?php if ($_option->getIsRequire()) echo ' class="required"' ?>><?php if ($_option->getIsRequire()) echo '<em>*</em>' ?><?php echo $this->escapeHtml($_option->getTitle()) ?></label>
30
+ <?php echo $this->getFormatedPrice() ?></dt>
31
+ <dd<?php if ($_option->decoratedIsLast){?> class="last"<?php }?>>
32
+ <div class="input-box">
33
+ <?php if ($_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_FIELD): ?>
34
+ <input type="text" id="options_<?php echo $_option->getId() ?>_text" class="input-text<?php echo $_option->getIsRequire() ? ' required-entry' : '' ?> <?php echo $_option->getMaxCharacters() ? ' validate-length maximum-length-' . $_option->getMaxCharacters() : '' ?> product-custom-option" name="options[<?php echo $_option->getId() ?>]" value="<?php echo $this->escapeHtml($this->getDefaultValue()) ?>" price="<?php echo $this->getCurrencyPrice($_option->getPrice(true)) ?>" />
35
+ <?php elseif ($_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_AREA): ?>
36
+ <textarea id="options_<?php echo $_option->getId() ?>_text" class="<?php echo $_option->getIsRequire() ? ' required-entry' : '' ?> <?php echo $_option->getMaxCharacters() ? ' validate-length maximum-length-' . $_option->getMaxCharacters() : '' ?> product-custom-option" name="options[<?php echo $_option->getId() ?>]" rows="5" cols="25" price="<?php echo $this->getCurrencyPrice($_option->getPrice(true)) ?>"><?php echo $this->escapeHtml($this->getDefaultValue()) ?></textarea>
37
+ <?php endif; ?>
38
+ <?php if ($_option->getMaxCharacters()): ?>
39
+ <p class="note"><?php echo Mage::helper('catalog')->__('Maximum number of characters:')?> <strong><?php echo $_option->getMaxCharacters() ?></strong></p>
40
+ <?php endif; ?>
41
+ </div>
42
+ </dd>
app/design/adminhtml/default/default/template/catalog/product/composite/fieldset/qty.phtml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Adminhtml_Block_Catalog_Product_Composite_Fieldset_Qty */ ?>
29
+
30
+ <div id="product_composite_configure_fields_qty" class="<?php echo $this->getIsLastFieldset() ? 'last-fieldset' : '' ?>">
31
+ <div class="product-options">
32
+ <dl>
33
+ <dt><label><?php echo Mage::helper('catalog')->__('Quantity') ?></label> <input id="product_composite_configure_input_qty" class="input-text" type="text" name="qty" value="<?php echo $this->getQtyValue() * 1 ?>"></dt>
34
+ </dl>
35
+ </div>
36
+ </div>
app/design/adminhtml/default/default/template/catalog/product/created.phtml ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ var added = false;
29
+ function addProduct(closeAfter) {
30
+ if(window.opener!=null && !added) {
31
+ <?php if($this->isEdit()): ?>
32
+ window.opener.superProduct.updateProduct(<?php echo $this->getProductId() ?>, <?php echo $this->getAttributesJson(); ?>);
33
+ <?php else: ?>
34
+ window.opener.superProduct.addNewProduct(<?php echo $this->getProductId() ?>, <?php echo $this->getAttributesJson(); ?>);
35
+ window.opener.superProduct.showNoticeMessage();
36
+ <?php endif; ?>
37
+ added = true;
38
+ }
39
+
40
+ if(closeAfter)
41
+ {
42
+ closeWindow();
43
+ }
44
+ }
45
+
46
+ function closeWindow()
47
+ {
48
+ if (window.opener) {
49
+ window.opener.focus();
50
+ }
51
+ window.close();
52
+ }
53
+
54
+ addProduct(false);
55
+ setTimeout(closeWindow, 3000);
56
+ </script>
57
+ <div class="a-center">
58
+ <?php echo $this->getCloseButtonHtml() ?>
59
+ </div>
app/design/adminhtml/default/default/template/catalog/product/edit.phtml ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Template for Mage_Adminhtml_Block_Catalog_Product_Edit
30
+ */
31
+ ?>
32
+
33
+
34
+
35
+ <div class="content-header">
36
+ <h3 class="icon-head head-products"><?php echo $this->getHeader() ?></h3>
37
+ <p class="content-buttons form-buttons"><?php echo $this->getBackButtonHtml() ?>
38
+ <?php echo $this->getCancelButtonHtml() ?>
39
+ <?php if($this->getProductId()): ?>
40
+ <?php echo $this->getDeleteButtonHtml() ?>
41
+ <?php if($this->getProductSetId() && $this->getIsConfigured()): ?>
42
+ <?php echo $this->getDuplicateButtonHtml() ?>
43
+ <?php endif; ?>
44
+ <?php endif; ?>
45
+ <?php if($this->getProductSetId() && $this->getIsConfigured()): ?>
46
+ <?php echo $this->getSaveButtonHtml() ?>
47
+ <?php echo $this->getSaveAndEditButtonHtml() ?>
48
+ <?php endif; ?>
49
+ </p>
50
+ </div>
51
+ <form action="<?php echo $this->getSaveUrl() ?>" method="post" id="product_edit_form" enctype="multipart/form-data">
52
+ <?php echo $this->getBlockHtml('formkey')?>
53
+ <div style="display:none"></div>
54
+ </form>
55
+ <script type="text/javascript">
56
+ //<![CDATA[
57
+ var productTemplateSyntax = /(^|.|\r|\n)({{(\w+)}})/;
58
+ var productForm = new varienForm('product_edit_form', '<?php echo $this->getValidationUrl() ?>');
59
+ productForm._processValidationResult = function(transport) {
60
+ var response = transport.responseText.evalJSON();
61
+ if (response.error){
62
+ if (response.attribute && $(response.attribute)) {
63
+ $(response.attribute).setHasError(true, productForm);
64
+ Validation.ajaxError($(response.attribute), response.message);
65
+ if (!Prototype.Browser.IE){
66
+ $(response.attribute).focus();
67
+ }
68
+ }
69
+ else if ($('messages')) {
70
+ $('messages').innerHTML = '<ul class="messages"><li class="error-msg"><ul><li>' + response.message + '</li></ul></li></ul>';
71
+ }
72
+ }
73
+ else{
74
+ productForm._submit();
75
+ }
76
+ };
77
+ function saveAndContinueEdit(urlTemplate) {
78
+ var template = new Template(urlTemplate, productTemplateSyntax);
79
+ var url = template.evaluate({tab_id:product_info_tabsJsTabs.activeTab.id});
80
+ productForm.submit(url);
81
+ }
82
+ function setSettings(urlTemplate, setElement, typeElement) {
83
+ var template = new Template(urlTemplate, productTemplateSyntax);
84
+ setLocation(template.evaluate({attribute_set:$F(setElement),type:$F(typeElement)}));
85
+ }
86
+
87
+ function setSuperSettings(urlTemplate, attributesClass, validateField) {
88
+ var attributesFields = $$('.' + attributesClass);
89
+ var attributes = Form.serializeElements(attributesFields, true).attribute;
90
+ if(typeof attributes == 'string') {
91
+ attributes = [attributes];
92
+ }
93
+
94
+ if(!attributes) {
95
+ $(validateField).value = 'no-attributes';
96
+ } else {
97
+ $(validateField).value = 'has-attributes';
98
+ }
99
+
100
+ if (productForm.validator.validate()) {
101
+ var template = new Template(urlTemplate, productTemplateSyntax);
102
+ var url = template.evaluate({
103
+ attributes: encode_base64(attributes.join(',')).replace(new RegExp('/','g'),'%2F').replace(new RegExp('=','g'),'%3D')
104
+ });
105
+ setLocation(url);
106
+ }
107
+ }
108
+
109
+ function checkMaxLength(Object, MaxLen)
110
+ {
111
+ if (Object.value.length > MaxLen-1) {
112
+ Object.value = Object.value.substr(0, MaxLen);
113
+ }
114
+ return 1;
115
+ }
116
+
117
+ Event.observe(window, 'load', function() {
118
+ var objName = '<?php echo $this->getSelectedTabId() ?>';
119
+ if (objName) {
120
+ obj = $(objName);
121
+ //IE fix (bubbling event model)
122
+ product_info_tabsJsTabs.setSkipDisplayFirstTab();
123
+ product_info_tabsJsTabs.showTabContent(obj);
124
+ }
125
+ Product.AttributesBridge.setTabsObject(product_info_tabsJsTabs);
126
+ });
127
+
128
+ Validation.addAllThese([
129
+ ['validate-super-product-attributes', '<?php echo Mage::helper('catalog')->__('Please select one or more attributes.') ?>', function(v) {
130
+ return (v != "no-attributes");
131
+ }]]);
132
+ //]]>
133
+ </script>
app/design/adminhtml/default/default/template/catalog/product/edit/action/attribute.phtml ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <table cellspacing="0">
29
+ <tr>
30
+ <td><h3><?php echo Mage::helper('catalog')->__('Update attributes') ?></h3></td>
31
+ <td class="form-buttons">
32
+ <?php echo $this->getBackButtonHtml() ?>
33
+ <?php echo $this->getCancelButtonHtml() ?>
34
+ <?php echo $this->getSaveButtonHtml() ?>
35
+ </td>
36
+ </tr>
37
+ </table>
38
+ </div>
39
+ <form action="<?php echo $this->getSaveUrl() ?>" method="post" id="attributes_edit_form" enctype="multipart/form-data">
40
+ <?php echo $this->getBlockHtml('formkey')?>
41
+ </form>
42
+ <script type="text/javascript">
43
+ var attributesForm = new varienForm('attributes_edit_form', '<?php echo $this->getValidationUrl() ?>');
44
+ attributesForm._processValidationResult = function(transport) {
45
+ var response = transport.responseText.evalJSON();
46
+
47
+ if (response.error){
48
+ if (response.attribute && $(response.attribute)) {
49
+ $(response.attribute).setHasError(true, attributesForm);
50
+ Validation.ajaxError($(response.attribute), response.message);
51
+ if (!Prototype.Browser.IE){
52
+ $(response.attribute).focus();
53
+ }
54
+ } else if ($('messages')) {
55
+ $('messages').innerHTML = '<ul class="messages"><li class="error-msg"><ul><li>' + response.message + '</li></ul></li></ul>';
56
+ }
57
+ } else {
58
+ attributesForm._submit();
59
+ }
60
+ };
61
+ </script>
app/design/adminhtml/default/default/template/catalog/product/edit/action/inventory.phtml ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ //<![CDATA[
29
+ function toggleValueElementsWithCheckbox(checkbox) {
30
+ var td = $(checkbox.parentNode);
31
+ var checkboxes = td.getElementsBySelector('input[type="checkbox"]');
32
+ var inputs = td.getElementsBySelector('input[type!="checkbox"]', 'select', 'textarea');
33
+ if (checkboxes.size()>1) {
34
+ inputs.each(function(input){
35
+ input.disabled = (!checkbox.checked || checkboxes[0].checked);
36
+ checkboxes[0].disabled = !checkbox.checked;
37
+ });
38
+ } else {
39
+ inputs.each(function(input){
40
+ input.disabled = !checkbox.checked;
41
+ });
42
+ }
43
+ }
44
+ //]]>
45
+ </script>
46
+
47
+ <div class="entry-edit">
48
+ <div class="entry-edit-head">
49
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('catalog')->__('Inventory') ?></h4>
50
+ </div>
51
+ <fieldset>
52
+ <legend><?php echo Mage::helper('catalog')->__('Inventory') ?></legend>
53
+ <table cellspacing="0" class="form-list" id="table_cataloginventory">
54
+ <tr>
55
+ <td class="label"><label for="inventory_manage_stock"><?php echo Mage::helper('catalog')->__('Manage Stock') ?></label></td>
56
+ <td class="value"><select id="inventory_manage_stock" name="<?php echo $this->getFieldSuffix() ?>[manage_stock]" class="select" disabled="disabled">
57
+ <option value="1"><?php echo Mage::helper('catalog')->__('Yes') ?></option>
58
+ <option value="0"<?php if ($this->getConfigFieldValue('manage_stock') == 0): ?> selected="selected"<?php endif; ?>><?php echo Mage::helper('catalog')->__('No') ?></option>
59
+ </select>
60
+ <input name="<?php echo $this->getFieldSuffix() ?>[use_config_manage_stock]" type="checkbox" id="inventory_use_config_manage_stock" onclick="toggleValueElements(this, this.parentNode, $('inventory_manage_stock_checkbox'));" value="1" checked="checked" disabled="disabled" />
61
+ <label for="inventory_use_config_manage_stock" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
62
+ <input type="checkbox" id="inventory_manage_stock_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
63
+ <label for="inventory_manage_stock_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
64
+ </td>
65
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
66
+ </tr>
67
+ <tr>
68
+ <td class="label"><label for="inventory_qty"><?php echo Mage::helper('catalog')->__('Qty') ?><span class="required">*</span></label></td>
69
+ <td class="value">
70
+ <input type="text" class="input-text required-entry validate-number" id="inventory_qty" name="<?php echo $this->getFieldSuffix() ?>[qty]" value="<?php echo $this->getDefaultConfigValue('qty')*1 ?>" disabled="disabled" />
71
+ <input type="checkbox" id="inventory_qty_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
72
+ <label for="inventory_qty_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
73
+ </td>
74
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
75
+ </tr>
76
+ <tr>
77
+ <td class="label"><label for="inventory_min_qty"><?php echo Mage::helper('catalog')->__('Minimum Qty for Item\'s Status to be Out of Stock') ?></label></td>
78
+ <td class="value"><input type="text" class="input-text validate-number" id="inventory_min_qty" name="<?php echo $this->getFieldSuffix() ?>[min_qty]" value="<?php echo $this->getDefaultConfigValue('min_qty')*1 ?>" disabled="disabled" />
79
+ <input type="checkbox" id="inventory_use_config_min_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_min_qty]" value="1" onclick="toggleValueElements(this, this.parentNode, $('inventory_min_qty_checkbox'));" checked="checked" disabled="disabled" />
80
+ <label for="inventory_use_config_min_qty" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
81
+ <input type="checkbox" id="inventory_min_qty_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
82
+ <label for="inventory_min_qty_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
83
+ </td>
84
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
85
+ </tr>
86
+ <tr>
87
+ <td class="label"><label for="inventory_min_sale_qty"><?php echo Mage::helper('catalog')->__('Minimum Qty Allowed in Shopping Cart') ?></label></td>
88
+ <td class="value"><input type="text" class="input-text validate-number" id="inventory_min_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[min_sale_qty]" value="<?php echo $this->getDefaultConfigValue('min_sale_qty')*1 ?>" disabled="disabled" />
89
+ <input type="checkbox" id="inventory_use_config_min_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_min_sale_qty]" value="1" onclick="toggleValueElements(this, this.parentNode, $('inventory_min_sale_qty_checkbox'));" checked="checked" disabled="disabled" />
90
+ <label for="inventory_use_config_min_sale_qty" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
91
+ <input type="checkbox" id="inventory_min_sale_qty_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
92
+ <label for="inventory_min_sale_qty_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
93
+ </td>
94
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
95
+ </tr>
96
+ <tr>
97
+ <td class="label"><label for="inventory_max_sale_qty"><?php echo Mage::helper('catalog')->__('Maximum Qty Allowed in Shopping Cart') ?></label></td>
98
+ <td class="value"><input type="text" class="input-text validate-number" id="inventory_max_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[max_sale_qty]" value="<?php echo $this->getDefaultConfigValue('max_sale_qty')*1 ?>" disabled="disabled" />
99
+ <input type="checkbox" id="inventory_use_config_max_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_max_sale_qty]" value="1" onclick="toggleValueElements(this, this.parentNode, $('inventory_max_sale_checkbox'));" checked="checked" disabled="disabled" />
100
+ <label for="inventory_use_config_max_sale_qty" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
101
+ <input type="checkbox" id="inventory_max_sale_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
102
+ <label for="inventory_max_sale_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
103
+ </td>
104
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
105
+ </tr>
106
+ <tr>
107
+ <td class="label"><label for="inventory_is_qty_decimal"><?php echo Mage::helper('catalog')->__('Qty Uses Decimals') ?></label></td>
108
+ <td class="value"><select id="inventory_is_qty_decimal" name="<?php echo $this->getFieldSuffix() ?>[is_qty_decimal]" class="select" disabled="disabled">
109
+ <option value="0"><?php echo Mage::helper('catalog')->__('No') ?></option>
110
+ <option value="1"<?php if ($this->getDefaultConfigValue('is_qty_decimal')==1): ?> selected="selected"<?php endif; ?>><?php echo Mage::helper('catalog')->__('Yes') ?></option>
111
+ </select>
112
+ <input type="checkbox" id="inventory_is_qty_decimal_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
113
+ <label for="inventory_is_qty_decimal_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
114
+ </td>
115
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
116
+ </tr>
117
+ <tr>
118
+ <td class="label"><label for="inventory_backorders"><?php echo Mage::helper('catalog')->__('Backorders') ?></label></td>
119
+ <td class="value"><select id="inventory_backorders" name="<?php echo $this->getFieldSuffix() ?>[backorders]" class="select" disabled="disabled">
120
+ <?php foreach ($this->getBackordersOption() as $option): ?>
121
+ <?php $_selected = ($option['value'] == $this->getDefaultConfigValue('backorders')) ? ' selected="selected"' : '' ?>
122
+ <option value="<?php echo $option['value'] ?>"<?php echo $_selected ?>><?php echo $option['label'] ?></option>
123
+ <?php endforeach; ?>
124
+ </select>
125
+ <input type="checkbox" id="inventory_use_config_backorders" name="<?php echo $this->getFieldSuffix() ?>[use_config_backorders]" value="1" onclick="toggleValueElements(this, this.parentNode, $('inventory_backorders_checkbox'));" checked="checked" disabled="disabled" />
126
+ <label for="inventory_use_config_backorders" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
127
+ <input type="checkbox" id="inventory_backorders_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
128
+ <label for="inventory_backorders_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
129
+ </td>
130
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
131
+ </tr>
132
+ <tr>
133
+ <td class="label"><label for="inventory_notify_stock_qty"><?php echo Mage::helper('catalog')->__('Notify for Quantity Below') ?></label></td>
134
+ <td class="value"><input type="text" class="input-text validate-number" id="inventory_notify_stock_qty" name="<?php echo $this->getFieldSuffix() ?>[notify_stock_qty]" value="<?php echo $this->getDefaultConfigValue('notify_stock_qty')*1 ?>" disabled="disabled" />
135
+ <input type="checkbox" id="inventory_use_config_notify_stock_qty" name="<?php echo $this->getFieldSuffix() ?>[use_config_notify_stock_qty]" value="1" onclick="toggleValueElements(this, this.parentNode, $('inventory_notify_stock_qty_checkbox'));" checked="checked" disabled="disabled" />
136
+ <label for="inventory_use_config_notify_stock_qty" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
137
+ <input type="checkbox" id="inventory_notify_stock_qty_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
138
+ <label for="inventory_notify_stock_qty_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
139
+ </td>
140
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
141
+ </tr>
142
+
143
+ <tr>
144
+ <td class="label"><label for="inventory_enable_qty_increments"><?php echo Mage::helper('catalog')->__('Enable Qty Increments') ?></label></td>
145
+ <td class="value"><select id="inventory_enable_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[enable_qty_increments]" class="select" disabled="disabled">
146
+ <option value="1"><?php echo Mage::helper('catalog')->__('Yes') ?></option>
147
+ <option value="0"<?php if ($this->getDefaultConfigValue('enable_qty_increments') == 0): ?> selected="selected"<?php endif; ?>><?php echo Mage::helper('catalog')->__('No') ?></option>
148
+ </select>
149
+ <input type="checkbox" id="inventory_use_config_enable_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[use_config_enable_qty_increments]" value="1" onclick="toggleValueElements(this, this.parentNode, [$('inventory_enable_qty_increments_checkbox')]);" checked="checked" disabled="disabled" />
150
+ <label for="inventory_use_config_enable_qty_increments" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
151
+ <input type="checkbox" id="inventory_enable_qty_increments_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
152
+ <label for="inventory_enable_qty_increments_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
153
+ </td>
154
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
155
+ </tr>
156
+ <tr>
157
+ <td class="label"><label for="inventory_qty_increments"><?php echo Mage::helper('catalog')->__('Qty Increments') ?></label></td>
158
+ <td class="value">
159
+ <input type="text" class="input-text validate-number" id="inventory_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[qty_increments]" value="<?php echo $this->getDefaultConfigValue('qty_increments')*1 ?>" disabled="disabled" />
160
+ <input type="checkbox" id="inventory_use_config_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[use_config_qty_increments]" value="1" onclick="toggleValueElements(this, this.parentNode, [$('inventory_qty_increments_checkbox')]);" checked="checked" disabled="disabled" />
161
+ <label for="inventory_use_config_qty_increments" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
162
+ <input type="checkbox" id="inventory_qty_increments_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
163
+ <label for="inventory_qty_increments_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
164
+ </td>
165
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
166
+ </tr>
167
+
168
+ <tr>
169
+ <td class="label"><label for="inventory_stock_availability"><?php echo Mage::helper('catalog')->__('Stock Availability') ?></label></td>
170
+ <td class="value"><select id="inventory_stock_availability" name="<?php echo $this->getFieldSuffix() ?>[is_in_stock]" class="select" disabled="disabled">
171
+ <option value="1"><?php echo Mage::helper('catalog')->__('In Stock') ?></option>
172
+ <option value="0"<?php if ($this->getDefaultConfigValue('is_in_stock')==0): ?> selected<?php endif; ?>><?php echo Mage::helper('catalog')->__('Out of Stock') ?></option>
173
+ </select>
174
+ <input type="checkbox" id="inventory_stock_availability_checkbox" onclick="toggleValueElementsWithCheckbox(this)" />
175
+ <label for="inventory_stock_availability_checkbox" class="normal"><?php echo Mage::helper('catalog')->__('Change') ?></label>
176
+ </td>
177
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
178
+ </tr>
179
+ </table>
180
+ </fieldset>
181
+ </div>
app/design/adminhtml/default/default/template/catalog/product/edit/action/websites.phtml ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
28
+ <div class="entry-edit-head">
29
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('catalog')->__('Add Product To Websites') ?></h4>
30
+ </div>
31
+ <fieldset id="grop_fields">
32
+ <?php foreach ($this->getWebsiteCollection() as $_website): ?>
33
+ <div>
34
+ <div class="website-name">
35
+ <input name="add_website_ids[]" value="<?php echo $_website->getId() ?>" <?php if($this->getWebsitesReadonly()): ?>disabled="disabled"<?php endif;?> class="checkbox website-checkbox" id="add_product_website_<?php echo $_website->getId() ?>" type="checkbox" />
36
+ <big><strong><label for="add_product_website_<?php echo $_website->getId() ?>"><?php echo $this->escapeHtml($_website->getName()) ?></label></strong></big>
37
+ </div>
38
+ <div class="webiste-groups" id="add_product_website_<?php echo $_website->getId() ?>_data">
39
+ <?php foreach ($this->getGroupCollection($_website) as $_group): ?>
40
+ <h4><?php echo $this->escapeHtml($_group->getName()) ?></h4>
41
+ <div class="group-stores">
42
+ <table>
43
+ <?php foreach ($this->getStoreCollection($_group) as $_store): ?>
44
+ <tr>
45
+ <td><?php echo $this->escapeHtml($_store->getName()) ?></td>
46
+ <td>&nbsp;</td>
47
+ </tr>
48
+ <?php endforeach; ?>
49
+ </table>
50
+ </div>
51
+ <?php endforeach; ?>
52
+ </div>
53
+ </div>
54
+ <?php endforeach; ?>
55
+ </fieldset>
56
+ </div>
57
+
58
+ <div class="entry-edit">
59
+ <div class="entry-edit-head">
60
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('catalog')->__('Remove Product From Websites') ?></h4>
61
+ </div>
62
+ <fieldset id="grop_fields">
63
+ <ul class="messages">
64
+ <li class="notice-msg">
65
+ <ul>
66
+ <li><?php echo Mage::helper('catalog')->__("Items that you do not want to show in the catalog or search results should have status 'Disabled' in the desired store.") ?></li>
67
+ </ul>
68
+ </li>
69
+ </ul>
70
+ <?php foreach ($this->getWebsiteCollection() as $_website): ?>
71
+ <div>
72
+ <div class="website-name">
73
+ <input name="remove_website_ids[]" value="<?php echo $_website->getId() ?>" <?php if($this->getWebsitesReadonly()): ?>disabled="disabled"<?php endif;?> class="checkbox website-checkbox" id="remove_product_website_<?php echo $_website->getId() ?>" type="checkbox"/>
74
+ <big><strong><label for="remove_product_website_<?php echo $_website->getId() ?>"><?php echo $this->escapeHtml($_website->getName()) ?></label></strong></big>
75
+ </div>
76
+ <div class="webiste-groups" id="remove_product_website_<?php echo $_website->getId() ?>_data">
77
+ <?php foreach ($this->getGroupCollection($_website) as $_group): ?>
78
+ <h4><?php echo $this->escapeHtml($_group->getName()) ?></h4>
79
+ <div class="group-stores">
80
+ <table>
81
+ <?php foreach ($this->getStoreCollection($_group) as $_store): ?>
82
+ <tr>
83
+ <td><?php echo $this->escapeHtml($_store->getName()) ?></td>
84
+ <td>&nbsp;</td>
85
+ </tr>
86
+ <?php endforeach; ?>
87
+ </table>
88
+ </div>
89
+ <?php endforeach; ?>
90
+ </div>
91
+ </div>
92
+ <?php endforeach; ?>
93
+ </fieldset>
94
+ </div>
95
+ <script type="text/javascript">
96
+ //<![CDATA[
97
+ var productWebsiteCheckboxes = $$('.website-checkbox');
98
+
99
+ for(var i=0;i<productWebsiteCheckboxes.length;i++){
100
+ Event.observe(productWebsiteCheckboxes[i], 'click', toggleStoreFromChoosers);
101
+ }
102
+
103
+ function toggleStoreFromChoosers(event){
104
+ var element = Event.element(event);
105
+ var selects = $(element.id+'_data').getElementsBySelector('select');
106
+ var selectBlocks = $(element.id+'_data').getElementsByClassName('website-'+element.value+'-select');
107
+ for (var i=0; i<selects.length; i++) {
108
+ selects[i].disabled=!element.checked;
109
+ }
110
+ for (var i=0; i<selectBlocks.length; i++) {
111
+ if (element.checked) {
112
+ selectBlocks[i].show();
113
+ }
114
+ else {
115
+ selectBlocks[i].hide();
116
+ }
117
+ }
118
+ }
119
+ //]]>
120
+ </script>
app/design/adminhtml/default/default/template/catalog/product/edit/categories.phtml ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
28
+ <div class="entry-edit-head">
29
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('catalog')->__('Product Categories') ?></h4>
30
+ </div>
31
+ <fieldset id="grop_fields">
32
+ <input type="hidden" name="category_ids" id="product_categories" value="<?php echo $this->getIdsString() ?>">
33
+ <div id="product-categories" class="tree"></div>
34
+ </fieldset>
35
+ </div>
36
+ <?php if($this->getRootNode() && $this->getRootNode()->hasChildren()): ?>
37
+ <script type="text/javascript">
38
+ Ext.EventManager.onDocumentReady(function() {
39
+ var categoryLoader = new Ext.tree.TreeLoader({
40
+ dataUrl: '<?php echo $this->getLoadTreeUrl()?>'
41
+ });
42
+
43
+ categoryLoader.createNode = function(config) {
44
+ config.uiProvider = Ext.tree.CheckboxNodeUI;
45
+ var node;
46
+ if (config.children && !config.children.length) {
47
+ delete(config.children);
48
+ node = new Ext.tree.AsyncTreeNode(config);
49
+
50
+ } else {
51
+ node = new Ext.tree.TreeNode(config);
52
+ }
53
+ return node;
54
+ };
55
+
56
+ categoryLoader.on("beforeload", function(treeLoader, node) {
57
+ treeLoader.baseParams.category = node.attributes.id;
58
+ });
59
+
60
+ categoryLoader.on("load", function(treeLoader, node, config) {
61
+ varienWindowOnload();
62
+ });
63
+
64
+ var tree = new Ext.tree.TreePanel('product-categories', {
65
+ animate:true,
66
+ loader: categoryLoader,
67
+ enableDD:false,
68
+ containerScroll: true,
69
+ rootUIProvider: Ext.tree.CheckboxNodeUI,
70
+ selModel: new Ext.tree.CheckNodeMultiSelectionModel(),
71
+ rootVisible: '<?php echo $this->getRootNode()->getIsVisible() ?>'
72
+ });
73
+
74
+ tree.on('check', function(node) {
75
+ if(node.attributes.checked) {
76
+ categoryAdd(node.id);
77
+ } else {
78
+ categoryRemove(node.id);
79
+ }
80
+ varienElementMethods.setHasChanges(node.getUI().checkbox);
81
+ }, tree);
82
+
83
+ // set the root node
84
+ var root = new Ext.tree.TreeNode({
85
+ text: '<?php echo $this->jsQuoteEscape($this->getRootNode()->getName()) ?>',
86
+ draggable:false,
87
+ checked:'<?php echo $this->getRootNode()->getChecked() ?>',
88
+ id:'<?php echo $this->getRootNode()->getId() ?>',
89
+ disabled: <?php echo ($this->getRootNode()->getDisabled() ? 'true' : 'false') ?>,
90
+ uiProvider: Ext.tree.CheckboxNodeUI
91
+ });
92
+
93
+ tree.setRootNode(root);
94
+ bildCategoryTree(root, <?php echo $this->getTreeJson() ?>);
95
+ tree.addListener('click', categoryClick.createDelegate(this));
96
+
97
+ // render the tree
98
+ tree.render();
99
+ root.expand();
100
+ //tree.expandAll();
101
+ });
102
+
103
+ function bildCategoryTree(parent, config){
104
+ if (!config) return null;
105
+
106
+ if (parent && config && config.length){
107
+ for (var i = 0; i < config.length; i++){
108
+ config[i].uiProvider = Ext.tree.CheckboxNodeUI;
109
+ var node;
110
+ var _node = Object.clone(config[i]);
111
+ if (_node.children && !_node.children.length) {
112
+ delete(_node.children);
113
+ node = new Ext.tree.AsyncTreeNode(_node);
114
+
115
+ } else {
116
+ node = new Ext.tree.TreeNode(config[i]);
117
+ }
118
+ parent.appendChild(node);
119
+ node.loader = node.getOwnerTree().loader;
120
+ if(config[i].children){
121
+ bildCategoryTree(node, config[i].children);
122
+ }
123
+ }
124
+ }
125
+ }
126
+
127
+ function categoryClick(node, e){
128
+ if (node.disabled) {
129
+ return;
130
+ }
131
+ node.getUI().check(!node.getUI().checked());
132
+ varienElementMethods.setHasChanges(Event.element(e), e);
133
+ };
134
+ function categoryAdd(id) {
135
+ var ids = $('product_categories').value.split(',');
136
+ ids.push(id);
137
+ $('product_categories').value = ids.join(',');
138
+ }
139
+ function categoryRemove(id) {
140
+ var ids = $('product_categories').value.split(',');
141
+ // bug #7654 fixed
142
+ while (-1 != ids.indexOf(id)) {
143
+ ids.splice(ids.indexOf(id), 1);
144
+ }
145
+ $('product_categories').value = ids.join(',');
146
+ }
147
+ </script>
148
+ <?php endif; ?>
app/design/adminhtml/default/default/template/catalog/product/edit/options.phtml ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit custom-options product-custom-options">
28
+ <div id="dynamic-price-warrning" style="display:none">
29
+ <ul class="messages">
30
+ <li class="error-msg">
31
+ <ul>
32
+ <li><?php echo $this->__('Bundle with dynamic pricing cannot include custom defined options. Options will not be saved.') ?></li>
33
+ </ul>
34
+ </li>
35
+ </ul>
36
+ </div>
37
+ <div class="entry-edit-head">
38
+ <h4><?php echo Mage::helper('catalog')->__('Custom Options') ?></h4>
39
+ <div class="right"><?php echo $this->getAddButtonHtml() ?></div>
40
+ </div>
41
+
42
+ <div id="product_options_container" class="box">
43
+ <div id="product_options_container_top"></div>
44
+ <?php echo $this->getOptionsBoxHtml() ?>
45
+ </div>
46
+ </div>
47
+
48
+ <script type="text/javascript">
49
+ // re-bind form elements onchange
50
+ varienWindowOnload(true);
51
+ //show error message
52
+ if ($('price_type')) {
53
+ if ($('price_type').value == '0' && $('dynamic-price-warrning')) {
54
+ $('dynamic-price-warrning').show();
55
+ }
56
+ }
57
+ </script>
app/design/adminhtml/default/default/template/catalog/product/edit/options/option.phtml ADDED
@@ -0,0 +1,351 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 echo $this->getTemplatesHtml() ?>
28
+
29
+ <script type="text/javascript">
30
+ //<![CDATA[
31
+ var firstStepTemplate = '<div class="option-box" id="option_{{id}}">'+
32
+ '<table id="<?php echo $this->getFieldId() ?>_{{id}}" class="option-header" cellpadding="0" cellspacing="0">'+
33
+ '<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_is_delete" name="<?php echo $this->getFieldName() ?>[{{id}}][is_delete]" value="" />'+
34
+ '<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_previous_type" name="<?php echo $this->getFieldName() ?>[{{id}}][previous_type]" value="{{type}}" />'+
35
+ '<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_previous_group" name="<?php echo $this->getFieldName() ?>[{{id}}][previous_group]" value="" />'+
36
+ '<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_id" name="<?php echo $this->getFieldName() ?>[{{id}}][id]" value="{{id}}" />'+
37
+ '<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_option_id" name="<?php echo $this->getFieldName() ?>[{{id}}][option_id]" value="{{option_id}}" />'+
38
+ '<thead>'+
39
+ '<tr>'+
40
+ '<th class="opt-title"><?php echo Mage::helper('catalog')->__('Title') ?> <span class="required">*</span></th>'+
41
+ '<th class="opt-type"><?php echo Mage::helper('catalog')->__('Input Type') ?> <span class="required">*</span></th>'+
42
+ '<th class="opt-req"><?php echo $this->jsQuoteEscape(Mage::helper('catalog')->__('Is Required')) ?></th>'+
43
+ '<th class="opt-order"><?php echo Mage::helper('catalog')->__('Sort Order') ?></th>'+
44
+ '<th class="a-right"><?php echo $this->jsQuoteEscape($this->getDeleteButtonHtml()) ?></th>'+
45
+ '</tr>'+
46
+ '</thead>'+
47
+ '<tr>'+
48
+ '<td><input type="text" class="required-entry input-text" id="<?php echo $this->getFieldId() ?>_{{id}}_title" name="<?php echo $this->getFieldName() ?>[{{id}}][title]" value="{{title}}">{{checkboxScopeTitle}}</td>'+
49
+ '<td><?php echo $this->getTypeSelectHtml() ?></td>'+
50
+ '<td class="opt-req"><?php echo $this->getRequireSelectHtml() ?></td>'+
51
+ '<td><input type="text" class="validate-zero-or-greater input-text" name="<?php echo $this->getFieldName() ?>[{{id}}][sort_order]" value="{{sort_order}}"></td>'+
52
+ '<td>&nbsp;</td>'+
53
+ '</tr></table></div>';
54
+
55
+ var productOption = {
56
+ div : $('product_options_container_top'),
57
+ templateSyntax : /(^|.|\r|\n)({{(\w+)}})/,
58
+ templateText : firstStepTemplate,
59
+ itemCount : 1,
60
+ add : function(data) {
61
+ this.template = new Template(this.templateText, this.templateSyntax);
62
+
63
+ if(!data.id){
64
+ data = {};
65
+ data.id = this.itemCount;
66
+ data.type = '';
67
+ data.option_id = 0;
68
+ } else {
69
+ this.itemCount = data.item_count;
70
+ }
71
+
72
+ Element.insert(this.div, {'after':this.template.evaluate(data)});
73
+
74
+ //set selected type
75
+ if (data.type) {
76
+ $A($('<?php echo $this->getFieldId() ?>_'+data.id+'_type').options).each(function(option){
77
+ if (option.value==data.type) option.selected = true;
78
+ });
79
+ }
80
+
81
+ //set selected is_require
82
+ if (data.is_require) {
83
+ $A($('<?php echo $this->getFieldId() ?>_'+data.id+'_is_require').options).each(function(option){
84
+ if (option.value==data.is_require) option.selected = true;
85
+ });
86
+ }
87
+
88
+ if (data.checkboxScopeTitle) {
89
+ //set disabled
90
+ if ($('<?php echo $this->getFieldId() ?>_'+data.option_id+'_title') && data.scopeTitleDisabled) {
91
+ $('<?php echo $this->getFieldId() ?>_'+data.option_id+'_title').disable();
92
+ }
93
+ }
94
+
95
+ this.itemCount++;
96
+ this.bindRemoveButtons();
97
+ productOptionType.bindSelectInputType();
98
+ },
99
+ remove : function(event){
100
+ var element = $(Event.findElement(event, 'div'));
101
+ if(element){
102
+ $('product_'+element.readAttribute('id')+'_'+'is_delete').value = '1';
103
+ element.addClassName('no-display');
104
+ element.addClassName('ignore-validate');
105
+ element.hide();
106
+ }
107
+ },
108
+ bindRemoveButtons : function(){
109
+ var buttons = $$('div.product-custom-options .delete-product-option');
110
+ for(var i=0;i<buttons.length;i++){
111
+ if(!$(buttons[i]).binded){
112
+ $(buttons[i]).binded = true;
113
+ Event.observe(buttons[i], 'click', this.remove.bind(this));
114
+ }
115
+ }
116
+ var inputs = $$('div.product-custom-options button', 'div.product-custom-options input', 'div.product-custom-options select', 'div.product-custom-options textarea');
117
+ <?php if ($this->isReadonly()):?>
118
+ for (var i=0, l = inputs.length; i < l; i ++) {
119
+ inputs[i].disabled = true;
120
+ if (inputs[i].tagName.toLowerCase()=='button') {
121
+ inputs[i].addClassName('disabled');
122
+ }
123
+ }
124
+ <?php else: ?>
125
+ inputs.each(function(el) { Event.observe(el, 'change', el.setHasChanges.bind(el)); } )
126
+ <?php endif;?>
127
+ }
128
+ }
129
+
130
+
131
+ var productOptionType = {
132
+ templateSyntax : /(^|.|\r|\n)({{(\w+)}})/,
133
+ loadStepTwo : function(event){
134
+ var element = $(Event.findElement(event, 'select'));
135
+
136
+ var group = '';
137
+ var previousGroupElm = $(element.readAttribute('id').sub('_type', '_previous_group'));
138
+
139
+ switch(element.getValue()){
140
+ case 'field':
141
+ case 'area':
142
+ template = OptionTemplateText;
143
+ group = 'text';
144
+ break;
145
+ case 'file':
146
+ template = OptionTemplateFile;
147
+ group = 'file';
148
+ break;
149
+ case 'drop_down':
150
+ case 'radio':
151
+ case 'checkbox':
152
+ case 'multiple':
153
+ template = OptionTemplateSelect;
154
+ group = 'select';
155
+ break;
156
+ case 'date':
157
+ case 'date_time':
158
+ case 'time':
159
+ template = OptionTemplateDate;
160
+ group = 'date';
161
+ break;
162
+ default:
163
+ template = '';
164
+ group = 'unknown';
165
+ break;
166
+ }
167
+
168
+ if (previousGroupElm.getValue() != group) {
169
+ if ($(element.readAttribute('id')+'_'+previousGroupElm.getValue())) {
170
+ formElm = $(element.readAttribute('id')+'_'+previousGroupElm.getValue()).descendants();
171
+ formElm.each(function(elm){
172
+ if (elm.tagName == 'input' || elm.tagName == 'select') {
173
+ elm.name = '__delete__'+elm.readAttribute('name');
174
+ }
175
+ });
176
+
177
+ $(element.readAttribute('id')+'_'+previousGroupElm.getValue()).addClassName('no-display');
178
+ $(element.readAttribute('id')+'_'+previousGroupElm.getValue()).addClassName('ignore-validate');
179
+ $(element.readAttribute('id')+'_'+previousGroupElm.getValue()).hide();
180
+ }
181
+
182
+ previousGroupElm.value = group;
183
+
184
+ if ($(element.readAttribute('id')+'_'+group)) {
185
+ formElm = $(element.readAttribute('id')+'_'+group).descendants();
186
+ formElm.each(function(elm){
187
+ if (elm.match('input') || elm.match('select')) {
188
+ elm.name = elm.readAttribute('name').sub('__delete__', '');
189
+ }
190
+ });
191
+ $(element.readAttribute('id')+'_'+group).removeClassName('no-display');
192
+ $(element.readAttribute('id')+'_'+group).removeClassName('ignore-validate');
193
+ $(element.readAttribute('id')+'_'+group).show();
194
+
195
+ } else {
196
+ template = '<div id="'+element.readAttribute('id')+'_'+group+'" class="grid tier form-list">'+template+'</div><div id="'+element.readAttribute('id')+'_'+group+'_advice"></div';
197
+ this.secondTemplate = new Template(template, this.templateSyntax);
198
+
199
+ data = {};
200
+ if (!data.option_id) {
201
+ data = {};
202
+ data.option_id = $(element.readAttribute('id').sub('_type', '_id')).getValue();
203
+ }
204
+
205
+ Element.insert(element.readAttribute('id').sub('_type', ''), {'after':this.secondTemplate.evaluate(data)});
206
+
207
+ switch(element.getValue()){
208
+ case 'drop_down':
209
+ case 'radio':
210
+ case 'checkbox':
211
+ case 'multiple':
212
+ selectOptionType.bindAddButton();
213
+ break;
214
+ }
215
+ }
216
+ }
217
+ },
218
+ addDataToValues : function(data){
219
+
220
+ switch(data.type){
221
+ case 'field':
222
+ case 'area':
223
+ template = OptionTemplateText;
224
+ group = 'text';
225
+ break;
226
+ case 'file':
227
+ template = OptionTemplateFile;
228
+ group = 'file';
229
+ break;
230
+ case 'drop_down':
231
+ case 'radio':
232
+ case 'checkbox':
233
+ case 'multiple':
234
+ template = OptionTemplateSelect;
235
+ group = 'select';
236
+ break;
237
+ case 'date':
238
+ case 'date_time':
239
+ case 'time':
240
+ template = OptionTemplateDate;
241
+ group = 'date';
242
+ break;
243
+ }
244
+
245
+ $('<?php echo $this->getFieldId() ?>_'+data.id+'_previous_group').value = group;
246
+
247
+ template = '<div id="<?php echo $this->getFieldId() ?>_{{id}}_type_'+group+'" class="grid tier form-list">'+template+'</div><div id="<?php echo $this->getFieldId() ?>_{{id}}_type_'+group+'_advice"></div>';
248
+
249
+ this.secondTemplate = new Template(template, this.templateSyntax);
250
+
251
+ Element.insert($('<?php echo $this->getFieldId() ?>_'+data.option_id), {'after':this.secondTemplate.evaluate(data)});
252
+
253
+ if (data.checkboxScopePrice) {
254
+ //set disabled
255
+ if ($('<?php echo $this->getFieldId() ?>_'+data.option_id+'_price') && data.scopePriceDisabled) {
256
+ $('<?php echo $this->getFieldId() ?>_'+data.option_id+'_price').disable();
257
+ $('<?php echo $this->getFieldId() ?>_'+data.option_id+'_price_type').disable();
258
+ }
259
+ }
260
+
261
+ switch(data.type){
262
+ case 'drop_down':
263
+ case 'radio':
264
+ case 'checkbox':
265
+ case 'multiple':
266
+ data.optionValues.each(function(value) {
267
+ selectOptionType.add(value);
268
+ });
269
+ selectOptionType.bindAddButton();
270
+ break;
271
+ }
272
+
273
+ if (data.price_type) {
274
+ $A($('<?php echo $this->getFieldId() ?>_'+data.option_id+'_price_type').options).each(function(option){
275
+ if (option.value==data.price_type) option.selected = true;
276
+ });
277
+ }
278
+
279
+ },
280
+ bindSelectInputType : function(){
281
+ var types = $$('.select-product-option-type');
282
+ for(var i=0;i<types.length;i++){
283
+ if(!$(types[i]).binded){
284
+ $(types[i]).binded = true;
285
+ Event.observe(types[i], 'change', function(event){
286
+ productOptionType.loadStepTwo(event);
287
+ });
288
+ }
289
+ }
290
+ }
291
+ }
292
+
293
+ var productOptionScope = {
294
+ addScope : function(event){
295
+ var element = $(Event.element(event));
296
+ fieldToDisable = $(element.readAttribute('id').sub('_use_default', ''));
297
+
298
+ if (fieldToDisable.disabled) {
299
+ if (fieldToDisable.hasClassName('product-option-price')) {//need change to cheking value of element
300
+ $(fieldToDisable.readAttribute('id')+'_type').enable();
301
+ }
302
+ fieldToDisable.enable();
303
+ } else {
304
+ if (fieldToDisable.hasClassName('product-option-price')) {//need change to cheking value of element
305
+ $(fieldToDisable.readAttribute('id')+'_type').disable();
306
+ }
307
+ fieldToDisable.disable();
308
+ }
309
+ },
310
+ bindScopeCheckbox : function(){
311
+ var checkboxes = $$('.product-option-scope-checkbox');
312
+ for (var i=0;i<checkboxes.length;i++) {
313
+ if (!$(checkboxes[i]).binded) {
314
+ $(checkboxes[i]).binded = true;
315
+ Event.observe(checkboxes[i], 'click', this.addScope.bind(this));
316
+ }
317
+ }
318
+ }
319
+ }
320
+
321
+ if($('option_panel')){
322
+ $('option_panel').remove();
323
+ }
324
+
325
+ productOption.bindRemoveButtons();
326
+
327
+ if($('<?php echo $this->getAddButtonId() ?>')){
328
+ Event.observe('<?php echo $this->getAddButtonId() ?>', 'click', productOption.add.bind(productOption));
329
+ }
330
+
331
+ //validation for selected input type
332
+ Validation.addAllThese([
333
+ ['required-option-select', <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('Select type of option')) ?>, function(v, elm) {
334
+ if (elm.getValue() == '') {
335
+ return false;
336
+ }
337
+ return true;
338
+ }]]);
339
+
340
+ //adding data to templates
341
+ <?php foreach ($this->getOptionValues() as $_value): ?>
342
+ productOption.add(<?php echo $_value->toJson() ?>);
343
+ productOptionType.addDataToValues(<?php echo $_value->toJson() ?>);
344
+ <?php endforeach; ?>
345
+
346
+ //bind scope checkboxes
347
+ productOptionScope.bindScopeCheckbox();
348
+ //]]>
349
+ </script>
350
+
351
+ <div><?php if (!$this->isReadonly()):?><input type="hidden" name="affect_product_custom_options" value="1" /><?php endif;?></div>
app/design/adminhtml/default/default/template/catalog/product/edit/options/type/date.phtml ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+
29
+ OptionTemplateDate = '<table class="border" cellpadding="0" cellspacing="0">'+
30
+ '<tr class="headings">'+
31
+ <?php if ($this->getCanReadPrice() !== false) : ?>
32
+ '<th class="type-price"><?php echo Mage::helper('catalog')->__('Price') ?></th>' +
33
+ '<th class="type-type"><?php echo Mage::helper('catalog')->__('Price Type') ?></th>' +
34
+ <?php endif; ?>
35
+ '<th class="last"><?php echo Mage::helper('catalog')->__('SKU') ?></th>'+
36
+ '</tr>'+
37
+ '<tr>'+
38
+ <?php if ($this->getCanReadPrice() !== false) : ?>
39
+ '<td><input type="text" class="input-text validate-number product-option-price" id="product_option_{{option_id}}_price" name="product[options][{{option_id}}][price]" value="{{price}}"<?php if ($this->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?>></td>' +
40
+ '<td><?php echo $this->getPriceTypeSelectHtml() ?>{{checkboxScopePrice}}</td>' +
41
+ <?php else : ?>
42
+ '<input type="hidden" id="product_option_{{option_id}}_price" name="product[options][{{option_id}}][price]">' +
43
+ '<input type="hidden" name="product[options][{{option_id}}][price_type]" id="product_option_{{option_id}}_price_type">' +
44
+ <?php endif; ?>
45
+ '<td class="last"><input type="text" class="input-text type-sku" name="product[options][{{option_id}}][sku]" value="{{sku}}"></td>'+
46
+ '</tr>'+
47
+ '</table>';
48
+
49
+ if ($('option_panel_type_date')) {
50
+ $('option_panel_type_date').remove();
51
+ }
52
+
53
+ </script>
app/design/adminhtml/default/default/template/catalog/product/edit/options/type/file.phtml ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+
29
+ OptionTemplateFile = '<table class="border" cellpadding="0" cellspacing="0">'+
30
+ '<tr class="headings">'+
31
+ <?php if ($this->getCanReadPrice() !== false) : ?>
32
+ '<th class="type-price">' + <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('Price')); ?> + '</th>' +
33
+ '<th class="type-type">' + <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('Price Type')); ?> + '</th>' +
34
+ <?php endif; ?>
35
+ '<th class="type-sku">' + <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('SKU')); ?> + '</th>' +
36
+ '<th class="type-title">' + <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('Allowed File Extensions')); ?> + '</th>'+
37
+ '<th class="last">' + <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('Maximum Image Size')); ?> + '</th>' +
38
+ '</tr>' +
39
+ '<tr>' +
40
+ <?php if ($this->getCanReadPrice() !== false) : ?>
41
+ '<td><input class="input-text validate-zero-or-greater" type="text" name="product[options][{{option_id}}][price]" value="{{price}}"<?php if ($this->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?>></td>' +
42
+ '<td>' + <?php echo $this->helper('core')->jsonEncode($this->getPriceTypeSelectHtml()) ?> + '</td>' +
43
+ <?php else : ?>
44
+ '<input type="hidden" name="product[options][{{option_id}}][price]">' +
45
+ '<input type="hidden" name="product[options][{{option_id}}][price_type]" id="product_option_{{option_id}}_price_type">' +
46
+ <?php endif; ?>
47
+ '<td><input type="text" class="input-text" name="product[options][{{option_id}}][sku]" value="{{sku}}"></td>' +
48
+ '<td><input class="input-text" type="text" name="product[options][{{option_id}}][file_extension]" value="{{file_extension}}"></td>' +
49
+ '<td class="type-last last" nowrap><input class="input-text" type="text" name="product[options][{{option_id}}][image_size_x]" value="{{image_size_x}}">' +
50
+ <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('x')) ?> +
51
+ '<input class="input-text" type="text" name="product[options][{{option_id}}][image_size_y]" value="{{image_size_y}}">' +
52
+ <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('px.')) ?> +
53
+ '<br/>' + <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('leave blank if its not an image')) ?> + '</td>' +
54
+ '</tr>'+
55
+ '</table>';
56
+
57
+ if ($('option_panel_type_file')) {
58
+ $('option_panel_type_file').remove();
59
+ }
60
+
61
+ </script>
app/design/adminhtml/default/default/template/catalog/product/edit/options/type/select.phtml ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
29
+ //<![CDATA[
30
+ OptionTemplateSelect = '<table class="border" cellpadding="0" cellspacing="0">'+
31
+ '<input type="hidden" class="required-option-select-type-rows" name="validation_{{option_id}}_result" value="" >'+
32
+ '<thead>'+
33
+ '<tr class="headings">'+
34
+ '<th class="type-title"><?php echo Mage::helper('catalog')->__('Title') ?> <span class="required">*</span></th>'+
35
+ <?php if ($this->getCanReadPrice() !== false) : ?>
36
+ '<th class="type-price"><?php echo Mage::helper('catalog')->__('Price') ?></th>' +
37
+ '<th class="type-type"><?php echo Mage::helper('catalog')->__('Price Type') ?></th>' +
38
+ <?php endif; ?>
39
+ '<th class="type-sku"><?php echo Mage::helper('catalog')->__('SKU') ?></th>'+
40
+ '<th class="type-order"><?php echo Mage::helper('catalog')->__('Sort Order') ?></th>'+
41
+ '<th class="type-butt last">&nbsp;</th>'+
42
+ '</tr>'+
43
+ '</thead>'+
44
+ '<tbody id="select_option_type_row_{{option_id}}">'+
45
+ '</tbody>'+
46
+ '<tfoot>'+
47
+ '<tr>'+
48
+ '<td colspan="100" class="a-right"><?php echo $this->getAddButtonHtml() ?></td>'+
49
+ '</tr>'+
50
+ '</tfoot>'+
51
+ '</table>';
52
+
53
+ OptionTemplateSelectRow = '<tr id="product_option_{{id}}_select_{{select_id}}">'+
54
+ '<td>'+
55
+ '<input type="hidden" name="product[options][{{id}}][values][{{select_id}}][option_type_id]" value="{{option_type_id}}">'+
56
+ '<input type="hidden" id="product_option_{{id}}_select_{{select_id}}_is_delete" name="product[options][{{id}}][values][{{select_id}}][is_delete]" value="">'+
57
+ '<input type="text" class="required-entry input-text select-type-title" id="product_option_{{id}}_select_{{select_id}}_title" name="product[options][{{id}}][values][{{select_id}}][title]" value="{{title}}">{{checkboxScopeTitle}}</td>'+
58
+ <?php if ($this->getCanReadPrice() !== false) : ?>
59
+ '<td><input type="text" class="input-text validate-number product-option-price" id="product_option_{{id}}_select_{{select_id}}_price" name="product[options][{{id}}][values][{{select_id}}][price]" value="{{price}}"<?php if ($this->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?>></td>' +
60
+ '<td><?php echo $this->getPriceTypeSelectHtml() ?>{{checkboxScopePrice}}</td>' +
61
+ <?php else : ?>
62
+ '<input type="hidden" id="product_option_{{id}}_select_{{select_id}}_price" name="product[options][{{id}}][values][{{select_id}}][price]">' +
63
+ '<input type="hidden" name="product[options][{{id}}][values][{{select_id}}][price_type]" id="product_option_{{id}}_select_{{select_id}}_price_type">' +
64
+ <?php endif; ?>
65
+ '<td><input type="text" class="input-text" name="product[options][{{id}}][values][{{select_id}}][sku]" value="{{sku}}"></td>'+
66
+ '<td><input type="text" class="validate-zero-or-greater input-text" name="product[options][{{id}}][values][{{select_id}}][sort_order]" value="{{sort_order}}"></td>'+
67
+ '<td class="last"><span title="Delete row"><?php echo $this->getDeleteButtonHtml() ?></span></td>'+
68
+ '</tr>';
69
+
70
+ selectOptionType = {
71
+ div : 'select_option_type_row',
72
+ itemCount : 0,
73
+ templateSyntax : /(^|.|\r|\n)({{(\w+)}})/,
74
+ templateText : OptionTemplateSelectRow,
75
+ add : function(data) {
76
+
77
+ this.template = new Template(this.templateText, this.templateSyntax);
78
+
79
+ if (data.target || data.srcElement) {//data is Event (work in IE and Firefox)
80
+ element = $(Event.findElement(data, 'button'));
81
+ optionId = element.readAttribute('id').sub('add_select_row_button_', '');
82
+ data = {};
83
+ data.option_type_id = '-1';
84
+ data.select_id = this.itemCount;
85
+ } else {
86
+ optionId = data.option_id;
87
+ data.select_id = data.option_type_id;
88
+ this.itemCount = data.item_count;
89
+ }
90
+
91
+ data.id = optionId;
92
+
93
+ Element.insert($(this.div+'_'+data.id), {'bottom':this.template.evaluate(data)});
94
+
95
+ if (data.checkboxScopeTitle) {
96
+ //set disabled
97
+ if ($('product_option_'+data.id+'_select_'+data.select_id+'_title') && data.scopeTitleDisabled) {
98
+ $('product_option_'+data.id+'_select_'+data.select_id+'_title').disable();
99
+ }
100
+ }
101
+ if (data.checkboxScopePrice) {
102
+ //set disabled
103
+ if ($('product_option_'+data.id+'_select_'+data.select_id+'_price') && data.scopePriceDisabled) {
104
+ $('product_option_'+data.id+'_select_'+data.select_id+'_price').disable();
105
+ $('product_option_'+data.id+'_select_'+data.select_id+'_price_type').disable();
106
+ }
107
+ }
108
+
109
+ if (data.price_type) {
110
+ $A($('product_option_'+data.id+'_select_'+data.select_id+'_price_type').options).each(function(option){
111
+ if (option.value==data.price_type) option.selected = true;
112
+ });
113
+ }
114
+
115
+ this.itemCount++;
116
+ this.bindRemoveButtons();
117
+ },
118
+ remove : function(event){
119
+ var element = $(Event.findElement(event, 'tr'));
120
+
121
+ if(element){
122
+ $(element.readAttribute('id')+'_is_delete').value = '1';
123
+ element.addClassName('no-display');
124
+ element.addClassName('ignore-validate');
125
+ element.hide();
126
+ }
127
+ },
128
+ bindRemoveButtons : function(){
129
+ var buttons = $$('.delete-select-row');
130
+ for(var i=0;i<buttons.length;i++){
131
+ if(!$(buttons[i]).binded){
132
+ $(buttons[i]).binded = true;
133
+ Event.observe(buttons[i], 'click', this.remove.bind(this));
134
+ }
135
+ }
136
+ },
137
+ bindAddButton : function()
138
+ {
139
+ var buttons = $$('.add-select-row');
140
+ for(var i=0;i<buttons.length;i++){
141
+ if(!$(buttons[i]).binded){
142
+ $(buttons[i]).binded = true;
143
+ Event.observe(buttons[i], 'click', this.add.bind(this));
144
+ }
145
+ }
146
+ }
147
+ }
148
+
149
+ if ($('option_panel_type_select')) {
150
+ $('option_panel_type_select').remove();
151
+ }
152
+
153
+ selectOptionType.bindRemoveButtons();
154
+
155
+ Validation.addAllThese([
156
+ ['required-option-select-type-rows', <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('Please add rows to option.')); ?>, function(v, elm) {
157
+ var optionContainerElm = elm.up('div.grid');
158
+ var selectTypesFlag = false;
159
+ selectTypeElements = $$('#'+optionContainerElm.id+' .select-type-title');
160
+ selectTypeElements.each(function(elm){
161
+ if (elm.id && elm.up('tr').visible()) {
162
+ selectTypesFlag = true;
163
+ }
164
+ });
165
+ elm.advaiceContainer = optionContainerElm.id+'_advice';
166
+ return selectTypesFlag;
167
+ }]]);
168
+
169
+ if($('add_select_row_button')){
170
+ Event.observe('add_select_row_button', 'click', selectOptionType.add.bind(selectOptionType));
171
+ }
172
+ //]]>
173
+ </script>
app/design/adminhtml/default/default/template/catalog/product/edit/options/type/text.phtml ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ //<![CDATA[
29
+ OptionTemplateText = '<table class="border" cellpadding="0" cellspacing="0">'+
30
+ '<tr class="headings">'+
31
+ <?php if ($this->getCanReadPrice() !== false) : ?>
32
+ '<th class="type-price"><?php echo Mage::helper('catalog')->__('Price') ?></th>' +
33
+ '<th class="type-type"><?php echo Mage::helper('catalog')->__('Price Type') ?></th>' +
34
+ <?php endif; ?>
35
+ '<th class="type-sku"><?php echo Mage::helper('catalog')->__('SKU') ?></th>'+
36
+ '<th class="type-last last"><?php echo Mage::helper('catalog')->__('Max Characters') ?> </th>'+
37
+ '</tr>'+
38
+ '<tr>'+
39
+ <?php if ($this->getCanReadPrice() !== false) : ?>
40
+ '<td><input type="text" class="input-text validate-number product-option-price" id="product_option_{{option_id}}_price" name="product[options][{{option_id}}][price]" value="{{price}}"<?php if ($this->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?>></td>' +
41
+ '<td><?php echo $this->getPriceTypeSelectHtml() ?>{{checkboxScopePrice}}</td>' +
42
+ <?php else : ?>
43
+ '<input type="hidden" name="product[options][{{option_id}}][price]">' +
44
+ '<input type="hidden" name="product[options][{{option_id}}][price_type]" id="product_option_{{option_id}}_price_type">' +
45
+ <?php endif; ?>
46
+ '<td><input type="text" class="input-text" name="product[options][{{option_id}}][sku]" value="{{sku}}"></td>'+
47
+ '<td class="type-last last"><input type="text" class="input-text validate-zero-or-greater" name="product[options][{{option_id}}][max_characters]" value="{{max_characters}}"></td>'+
48
+ '</tr>'+
49
+ '</table>';
50
+
51
+ if ($('option_panel_type_text')) {
52
+ $('option_panel_type_text').remove();
53
+ }
54
+ //]]>
55
+ </script>
app/design/adminhtml/default/default/template/catalog/product/edit/price/group.phtml ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /** @var $this Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Price_Group */
29
+ $_htmlId = $this->getElement()->getHtmlId();
30
+ $_htmlClass = $this->getElement()->getClass();
31
+ $_htmlName = $this->getElement()->getName();
32
+ $_readonly = $this->getElement()->getReadonly();
33
+ $_priceValueValidation = $this->getPriceValidation('validate-zero-or-greater');
34
+
35
+ $_showWebsite= $this->isMultiWebsites();
36
+ ?>
37
+ <tr>
38
+ <td class="label"><?php echo $this->getElement()->getLabel(); ?></td>
39
+ <td colspan="10" class="grid tier">
40
+ <table cellspacing="0" class="data border" id="group_prices_table">
41
+ <?php if ($_showWebsite) : ?>
42
+ <col width="135" />
43
+ <?php endif; ?>
44
+ <col width="120" />
45
+ <col />
46
+ <col width="1" />
47
+ <thead>
48
+ <tr class="headings">
49
+ <th <?php if (!$_showWebsite): ?>style="display: none;"<?php endif; ?>><?php echo Mage::helper('catalog')->__('Website'); ?></th>
50
+ <th><?php echo Mage::helper('catalog')->__('Customer Group'); ?></th>
51
+ <th><?php echo $this->getPriceColumnHeader(Mage::helper('catalog')->__('Price')); ?></th>
52
+ <th class="last"><?php echo Mage::helper('catalog')->__('Action'); ?></th>
53
+ </tr>
54
+ </thead>
55
+ <tbody id="<?php echo $_htmlId; ?>_container"></tbody>
56
+ <tfoot>
57
+ <tr>
58
+ <td <?php if (!$_showWebsite): ?>style="display: none;"<?php endif; ?>></td>
59
+ <td colspan="4" class="a-right"><?php echo $this->getAddButtonHtml(); ?></td>
60
+ </tr>
61
+ </tfoot>
62
+ </table>
63
+
64
+ <script type="text/javascript">
65
+ //<![CDATA[
66
+ var groupPriceRowTemplate = '<tr>'
67
+ + '<td<?php if (!$_showWebsite): ?> style="display:none"<?php endif; ?>>'
68
+ + '<select class="<?php echo $_htmlClass; ?> required-entry" name="<?php echo $_htmlName; ?>[{{index}}][website_id]" id="group_price_row_{{index}}_website">'
69
+ <?php foreach ($this->getWebsites() as $_websiteId => $_info) : ?>
70
+ + '<option value="<?php echo $_websiteId; ?>"><?php echo $this->jsQuoteEscape($this->escapeHtml($_info['name'])); ?><?php if (!empty($_info['currency'])) : ?> [<?php echo $this->escapeHtml($_info['currency']); ?>]<?php endif; ?></option>'
71
+ <?php endforeach; ?>
72
+ + '</select></td>'
73
+ + '<td><select class="<?php echo $_htmlClass; ?> custgroup required-entry" name="<?php echo $_htmlName; ?>[{{index}}][cust_group]" id="group_price_row_{{index}}_cust_group">'
74
+ <?php foreach ($this->getCustomerGroups() as $_groupId => $_groupName): ?>
75
+ + '<option value="<?php echo $_groupId; ?>"><?php echo $this->jsQuoteEscape($this->escapeHtml($_groupName)); ?></option>'
76
+ <?php endforeach; ?>
77
+ + '</select></td>'
78
+ + '<td><input class="<?php echo $_htmlClass; ?> required-entry <?php echo $_priceValueValidation; ?>" type="text" name="<?php echo $_htmlName; ?>[{{index}}][price]" value="{{price}}" id="group_price_row_{{index}}_price" /></td>'
79
+ + '<td class="last"><input type="hidden" name="<?php echo $_htmlName; ?>[{{index}}][delete]" class="delete" value="" id="group_price_row_{{index}}_delete" />'
80
+ + '<button title="<?php echo Mage::helper('catalog')->__('Delete Group Price'); ?>" type="button" class="scalable delete icon-btn delete-product-option" id="group_price_row_{{index}}_delete_button" onclick="return groupPriceControl.deleteItem(event);">'
81
+ + '<span><?php echo Mage::helper('catalog')->__('Delete'); ?></span></button></td>'
82
+ + '</tr>';
83
+
84
+ var groupPriceControl = {
85
+ template: new Template(groupPriceRowTemplate, new RegExp('(^|.|\\r|\\n)({{\\s*(\\w+)\\s*}})', '')),
86
+ itemsCount: 0,
87
+ addItem : function () {
88
+ <?php if ($_readonly): ?>
89
+ if (arguments.length < 3) {
90
+ return;
91
+ }
92
+ <?php endif; ?>
93
+ var data = {
94
+ website_id: '<?php echo $this->getDefaultWebsite(); ?>',
95
+ group: '<?php echo $this->getDefaultCustomerGroup(); ?>',
96
+ price: '',
97
+ readOnly: false,
98
+ index: this.itemsCount++
99
+ };
100
+
101
+ if(arguments.length >= 3) {
102
+ data.website_id = arguments[0];
103
+ data.group = arguments[1];
104
+ data.price = arguments[2];
105
+ }
106
+ if (arguments.length == 4) {
107
+ data.readOnly = arguments[3];
108
+ }
109
+
110
+ Element.insert($('<?php echo $_htmlId; ?>_container'), {
111
+ bottom : this.template.evaluate(data)
112
+ });
113
+
114
+ $('group_price_row_' + data.index + '_cust_group').value = data.group;
115
+ $('group_price_row_' + data.index + '_website').value = data.website_id;
116
+
117
+ <?php if ($this->isShowWebsiteColumn() && !$this->isAllowChangeWebsite()): ?>
118
+ var websiteElement = $('group_price_row_' + data.index + '_website');
119
+ var websiteCaption = websiteElement.options[websiteElement.selectedIndex].text;
120
+
121
+ websiteElement.insert({after:'<span class="website-name">' + websiteCaption + '</span>'});
122
+ websiteElement.hide();
123
+ <?php endif;?>
124
+
125
+ if (data.readOnly == '1') {
126
+ ['website', 'cust_group', 'price', 'delete'].each(function(element_suffix) {
127
+ $('group_price_row_' + data.index + '_' + element_suffix).disabled = true;
128
+ });
129
+ $('group_price_row_' + data.index + '_delete_button').hide();
130
+ }
131
+
132
+ <?php if ($_readonly): ?>
133
+ $('<?php echo $_htmlId; ?>_container').select('input', 'select').each(this.disableElement);
134
+ $('<?php echo $_htmlId; ?>_container').up('table').select('button').each(this.disableElement);
135
+ <?php else: ?>
136
+ $('<?php echo $_htmlId; ?>_container').select('input', 'select').each(function(element) {
137
+ Event.observe(element, 'change', element.setHasChanges.bind(element));
138
+ });
139
+ <?php endif; ?>
140
+ },
141
+ disableElement: function(element) {
142
+ element.disabled = true;
143
+ element.addClassName('disabled');
144
+ },
145
+ deleteItem: function(event) {
146
+ var tr = Event.findElement(event, 'tr');
147
+ if (tr) {
148
+ Element.select(tr, '.delete').each(function(element) {
149
+ element.value='1';
150
+ });
151
+ Element.select(tr, ['input', 'select']).each(function(element) {
152
+ element.hide();
153
+ });
154
+ Element.hide(tr);
155
+ Element.addClassName(tr, 'no-display template');
156
+ }
157
+ return false;
158
+ }
159
+ };
160
+ <?php foreach ($this->getValues() as $_item) : ?>
161
+ groupPriceControl.addItem('<?php echo $_item['website_id']; ?>', '<?php echo $_item['cust_group']; ?>', '<?php echo sprintf('%.2f', $_item['price']); ?>', <?php echo (int)!empty($_item['readonly']); ?>);
162
+ <?php endforeach; ?>
163
+ <?php if ($_readonly) : ?>
164
+ $('<?php echo $_htmlId; ?>_container').up('table').select('button')
165
+ .each(groupPriceControl.disableElement);
166
+ <?php endif; ?>
167
+ //]]>
168
+ </script>
169
+ </td></tr>
app/design/adminhtml/default/default/template/catalog/product/edit/price/tier.phtml ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $_htmlId = $this->getElement()->getHtmlId() ?>
2
+ <?php $_htmlClass = $this->getElement()->getClass() ?>
3
+ <?php $_htmlName = $this->getElement()->getName() ?>
4
+ <?php $_readonly = $this->getElement()->getReadonly() ?>
5
+ <?php $_multiWebsite= $this->isMultiWebsites(); ?>
6
+ <tr>
7
+ <td class="label"><?php echo $this->getElement()->getLabel() ?></td>
8
+ </tr>
9
+ <tr>
10
+ <td colspan="10" class="grid tier">
11
+ <table cellspacing="0" class="data border" id="tiers_table">
12
+ <?php if ($_multiWebsite): ?>
13
+ <col width="135" />
14
+ <?php endif; ?>
15
+ <col width="120" />
16
+ <col width="60" />
17
+ <col width="140"/>
18
+ <col width="60" />
19
+ <thead>
20
+
21
+ <tr class="headings">
22
+ <th <?php if (!$_multiWebsite): ?>style="display:none"<?php endif; ?>><?php echo Mage::helper('sales')->__('Website') ?></th>
23
+ <th><?php echo Mage::helper('catalog')->__('Customer Group') ?></th>
24
+ <th><?php echo Mage::helper('catalog')->__('Qty') ?></th>
25
+ <!-- Added -->
26
+ <?php
27
+ if(Mage::getStoreConfig("mypackage/settings/wds_tier_price"))
28
+ {
29
+ ?>
30
+ <th><?php echo Mage::helper('catalog')->__('From Date') ?></th>
31
+ <th><?php echo Mage::helper('catalog')->__('To Date') ?></th>
32
+ <?php
33
+ }
34
+ ?>
35
+ <!-- -/- -->
36
+ <th><?php echo $this->getPriceColumnHeader(Mage::helper('catalog')->__('Price')) ?></th>
37
+ <th class="last"><?php echo Mage::helper('catalog')->__('Action') ?></th>
38
+ </tr>
39
+
40
+ <tr id="<?php echo $_htmlId ?>_add_template" class="template no-display">
41
+ <!-- Website list -->
42
+ <td <?php if (!$_multiWebsite): ?>style="display:none"<?php endif; ?>>
43
+ <select disabled="no-template" class="<?php echo $_htmlClass ?> required-entry" name="<?php echo $_htmlName ?>[__index__][website_id]" id="tier_price_row___index___website">
44
+ <?php foreach ($this->getWebsites() as $_websiteId => $_info): ?>
45
+ <option value="<?php echo $_websiteId ?>"><?php echo $_info['name'] ?><?php if (!empty($_info['currency'])): ?> [<?php echo $_info['currency'] ?>]<?php endif; ?></option>
46
+ <?php endforeach ?>
47
+ </select>
48
+ </td>
49
+ <!-- -/- -->
50
+
51
+ <!-- Customer Group -->
52
+ <td>
53
+ <select disabled="no-template" class="<?php echo $_htmlClass ?> custgroup required-entry" name="<?php echo $_htmlName ?>[__index__][cust_group]" id="tier_price_row___index___cust_group">
54
+ <?php foreach ($this->getCustomerGroups() as $_groupId=>$_groupName): ?>
55
+ <option value="<?php echo $_groupId ?>"><?php echo htmlspecialchars($_groupName) ?></option>
56
+ <?php endforeach ?>
57
+ </select>
58
+ </td>
59
+ <!-- -/- -->
60
+
61
+ <!-- Qty -->
62
+ <td class="nobr">
63
+ <input disabled="no-template" class="<?php echo $_htmlClass ?> qty required-entry validate-greater-than-zero" type="text" name="<?php echo $_htmlName ?>[__index__][price_qty]" value="'#{qty}'" /> <small class="nobr"><?php echo Mage::helper('catalog')->__('and above')?></small>
64
+ </td>
65
+ <!-- -/- -->
66
+
67
+ <!-- Added -->
68
+ <?php
69
+ if(Mage::getStoreConfig("mypackage/settings/wds_tier_price"))
70
+ {
71
+ ?>
72
+ <td class="nobr">
73
+ <input type="text" disabled="no-template" class="<?php echo $_htmlClass ?> required-entry" name="<?php echo $_htmlName ?>[__index__][from_date]" id="tier_price_row___index___from_date" style="width:68px">
74
+ <img src="<?php echo $this->getSkinUrl('images/grid-cal.gif'); ?>" id="tier_price_row___index___from_date_trig" />
75
+ <script type="text/javascript">
76
+ Calendar.setup({
77
+ inputField : 'tier_price_row___index___from_date',
78
+ //ifFormat : '%Y-%m-%e',
79
+ ifFormat : '%m/%e/%Y',
80
+ button : 'tier_price_row___index___from_date_trig',
81
+ align : 'Bl',
82
+ singleClick : true
83
+ });
84
+ </script>
85
+ </td>
86
+ <td class="nobr">
87
+ <input type="text" disabled="no-template" class="<?php echo $_htmlClass ?> required-entry" name="<?php echo $_htmlName ?>[__index__][to_date]" id="tier_price_row___index___to_date" style="width:68px">
88
+ <img src="<?php echo $this->getSkinUrl('images/grid-cal.gif'); ?>" id="tier_price_row___index___to_date_trig" />
89
+ <script type="text/javascript">
90
+ Calendar.setup({
91
+ inputField : 'tier_price_row___index___to_date',
92
+ //ifFormat : '%Y-%m-%e',
93
+ ifFormat : '%m/%e/%Y',
94
+ button : 'tier_price_row___index___to_date_trig',
95
+ align : 'Bl',
96
+ singleClick : true
97
+ });
98
+ </script>
99
+ </td>
100
+ <!-- -/- -->
101
+ <?php
102
+ }
103
+ ?>
104
+ <!-- Price -->
105
+ <td>
106
+ <input disabled="no-template" class="<?php echo $_htmlClass ?> required-entry validate-greater-than-zero" type="text" name="<?php echo $_htmlName ?>[__index__][price]" value="'#{price}'" />
107
+ </td>
108
+ <!-- -/- -->
109
+
110
+ <!-- Button -->
111
+ <td class="last"><input type="hidden" name="<?php echo $_htmlName ?>[__index__][delete]" class="delete" disabled="no-template" value="" /><button title="Delete Tier" class="scalable delete icon-btn delete-product-option" onclick="tierPriceControl.deleteItem(event);return false"><span>Delete</span></button></td>
112
+ <!-- -/- -->
113
+ </tr>
114
+ </thead>
115
+ <tfoot>
116
+ <tr>
117
+ <td <?php if (!$_multiWebsite): ?>style="display:none"<?php endif; ?>></td>
118
+ <td colspan="7" class="a-right"><?php echo $this->getAddButtonHtml() ?></td>
119
+ </tr>
120
+ </tfoot>
121
+ <tbody id="<?php echo $_htmlId ?>_container">
122
+ </tbody>
123
+ </table>
124
+
125
+ <script type="text/javascript">
126
+
127
+ //<![CDATA[
128
+ var tierPriceControl = {
129
+ template : new Template('<tr>' + $('<?php echo $_htmlId ?>_add_template').innerHTML.replace(/__index__/g, '#{index}').replace(/ disabled="?no-template"?/g, '').replace(/ disabled/g, '').replace(/="'([^']*)'"/g, '="$1"') + '</tr>'),
130
+ itemsCount : 0,
131
+ deleteButton: false,
132
+ addItem : function () {
133
+ <?php if ($_readonly): ?>
134
+ if (arguments.length < 4) {
135
+ return;
136
+ }
137
+ <?php endif; ?>
138
+
139
+ var data = {};
140
+ data.website_id = 0;
141
+ data.group = '<?php echo $this->getDefaultCustomerGroup() ?>';
142
+ data.qty = '';
143
+ data.price = '';
144
+ data.index = this.itemsCount++;
145
+ if(arguments.length == 6) {
146
+ data.website_id = arguments[0];
147
+ data.group = arguments[1];
148
+ data.qty = arguments[2];
149
+ data.price = arguments[3];
150
+ data.from_date = arguments[4];
151
+ data.to_date = arguments[5];
152
+ }
153
+ Element.insert($('<?php echo $_htmlId ?>_container'), {'bottom':this.template.evaluate(data)});
154
+ $('tier_price_row_'+data.index+'_cust_group').value = data.group;
155
+ $('tier_price_row_'+data.index+'_website').value = data.website_id;
156
+
157
+
158
+ if (typeof(data.from_date) != "undefined")
159
+ {
160
+ var fdate=data.from_date.split("-");
161
+ $('tier_price_row_'+data.index+'_from_date').value = fdate[1]+"/"+fdate[2]+"/"+fdate[0];
162
+ }
163
+ else
164
+ $('tier_price_row_'+data.index+'_from_date').value = '';
165
+ if (typeof(data.to_date) != "undefined")
166
+ {
167
+ var tdate=data.to_date.split("-");
168
+ $('tier_price_row_'+data.index+'_to_date').value = tdate[1]+"/"+tdate[2]+"/"+tdate[0];
169
+ }
170
+ else
171
+ $('tier_price_row_'+data.index+'_to_date').value = '';
172
+ <?php if ($_readonly): ?>
173
+ $('<?php echo $_htmlId ?>_container').select('input', 'select')
174
+ .each(this.disableElement);
175
+ $('<?php echo $_htmlId ?>_container').up('table').select('button')
176
+ .each(this.disableElement);
177
+ <?php endif; ?>
178
+ },
179
+ disableElement: function(elem) {
180
+ elem.disabled = true
181
+ elem.addClassName('disabled');
182
+ },
183
+ deleteItem : function(event) {
184
+ var tr = Event.findElement(event, 'tr');
185
+ if (tr) {
186
+ Element.select(tr, '.delete').each(function(elem){elem.value='1'});
187
+ Element.select(tr, ['input', 'select']).each(function(elem){elem.hide()});
188
+ Element.hide(tr);
189
+ Element.addClassName(tr, 'no-display template');
190
+ }
191
+ }
192
+ }
193
+ <?php
194
+
195
+
196
+ foreach ($this->getValues() as $_item): ?>
197
+
198
+ tierPriceControl.addItem('<?php echo $_item['website_id'] ?>', '<?php echo $_item['cust_group'] ?>', '<?php echo $_item['price_qty']*1 ?>','<?php echo sprintf('%.2f', $_item['price']) ?>','<?php echo $_item['from_date'] ?>','<?php echo $_item['to_date'] ?>');
199
+ <?php endforeach; ?>
200
+ <?php if ($_readonly): ?>
201
+ $('<?php echo $_htmlId ?>_container').up('table').select('button')
202
+ .each(tierPriceControl.disableElement);
203
+ <?php endif; ?>
204
+ //]]>
205
+ </script>
206
+ </td>
207
+ </tr>
app/design/adminhtml/default/default/template/catalog/product/edit/serializer.phtml ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 $_id = 'id_' . md5(microtime()) ?>
29
+ <input type="hidden" name="<?php echo $this->getInputElementName()?>" value="" id="<?php echo $_id?>" />
30
+ <script type="text/javascript">
31
+ // create serializer controller, that will syncronize grid checkboxes with hidden input
32
+ new productLinksController('<?php echo $_id?>', <?php echo $this->getProductsJSON() ?>, <?php echo $this->getGridBlock()->getJsObjectName() ?>);
33
+ </script>
app/design/adminhtml/default/default/template/catalog/product/edit/super/config.phtml ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 if (!$this->isReadonly()):?>
28
+ <div class="entry-edit">
29
+ <div id="assign_product_warrning" style="display: none;">
30
+ <ul class="messages">
31
+ <li class="error-msg">
32
+ <ul>
33
+ <li><?php echo $this->__('Links with associated products will retain only after saving current product.') ?></li>
34
+ </ul>
35
+ </li>
36
+ </ul>
37
+ </div>
38
+ <div class="entry-edit-head">
39
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('catalog')->__('Create Simple Associated Product') ?></h4>
40
+ </div>
41
+ <fieldset class="a-right">
42
+ <?php echo $this->getChildHtml('create_empty') ?> <?php echo $this->getChildHtml('create_from_configurable') ?>
43
+ </fieldset>
44
+ </div>
45
+
46
+ <div id="<?php echo $this->getHtmlId() ?>_simple_form" class="ignore-validate configurable-simple-product">
47
+ <?php echo $this->getChildHtml('simple'); ?>
48
+ </div>
49
+ <?php endif;?>
50
+ <div class="entry-edit">
51
+ <div class="entry-edit-head">
52
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('catalog')->__('Super product attributes configuration') ?></h4>
53
+ </div>
54
+ <fieldset id="<?php echo $this->getHtmlId() ?>">
55
+ <legend><?php echo Mage::helper('catalog')->__('Super product attributes configuration') ?></legend>
56
+ <input type="hidden" id="<?php echo $this->getHtmlId() ?>_save_links" name="configurable_products_data" value=""/>
57
+ <input type="hidden" id="<?php echo $this->getHtmlId() ?>_save_attributes" name="configurable_attributes_data" />
58
+
59
+ <ul class="messages">
60
+ <li class="notice-msg">
61
+ <ul><li><?php echo Mage::helper('catalog')->__('Price values for options should be specified in system base currency.')?></li></ul>
62
+ <ul><li><?php echo Mage::helper('catalog')->__('Attrribute names can be specified per store.')?></li></ul>
63
+ </li>
64
+ </ul>
65
+ <ul id="<?php echo $this->getHtmlId() ?>_attributes" class="super-attributes">
66
+ </ul>
67
+ </fieldset>
68
+ </div>
69
+ <div class="no-display" id="<?php echo $this->getHtmlId() ?>_attribute_template">
70
+ <div class="<?php if (!$this->isReadonly()):?>attribute-name-container <?php endif;?>left">
71
+ '{{frontend_label}}'
72
+ </div>
73
+ <div class="values-container right">
74
+ <label for="__id___label" class="bold"><?php echo Mage::helper('catalog')->__('Attribute Name:') ?></label>
75
+ <input id="__id___label" type="text" <?php if ($this->isAttributesConfigurationReadonly()): ?> disabled="disabled" <?php endif;?> class="input-text attribute-label required-entry template no-display" value="'{{label}}'" readonly="label" />
76
+ <input id="__id___label_use_default" type="checkbox" value="1" " checked="use_default" class="attribute-use-default-label">
77
+ <label for="__id___label_use_default"><?php echo Mage::helper('catalog')->__('Use default')?> ('{{store_label}}')</label>
78
+ <ul class="attribute-values">
79
+ </ul>
80
+ </div>
81
+ </div>
82
+ <div class="no-display" id="<?php echo $this->getHtmlId() ?>_value_template">
83
+ <div class="attribute-value-label-container left">
84
+ <?php echo Mage::helper('catalog')->__('Option:') ?> <strong>'{{label}}'</strong>
85
+ </div>
86
+ <?php if ($this->getCanReadPrice() !== false) : ?>
87
+ <div class="attribute-values-container-main">
88
+ <div class="attribute-values-container left">
89
+ <?php echo Mage::helper('catalog')->__('Price:') ?>
90
+ <input id="__id___pricing" type="text" <?php if ($this->isAttributesPricesReadonly() || $this->getCanEditPrice() === false): ?> disabled="disabled" <?php endif;?> class="input-text attribute-price validate-number template no-display" value="'{{pricing_value}}'"/>
91
+ </div>
92
+ <div class="attribute-values-container left">
93
+ &nbsp;<select class="attribute-price-type" id="__id___price_type" <?php if ($this->isAttributesPricesReadonly() || $this->getCanEditPrice() === false): ?> disabled="disabled" <?php endif;?>>
94
+ <option value="0"><?php echo Mage::helper('catalog')->__('Fixed') ?></option>
95
+ <option value="1"><?php echo Mage::helper('catalog')->__('Percentage') ?></option>
96
+ </select>
97
+ </div>
98
+ <?php if ($this->getShowUseDefaultPrice()):?>
99
+ <div class="attribute-values-container">
100
+ &nbsp;<input id="__id___default" type="checkbox" <?php if ($this->isAttributesPricesReadonly() || $this->getCanEditPrice() === false): ?> disabled="disabled" <?php endif;?> class="attribute-use-default-value"> <label for="__id___default" class="normal"><?php echo Mage::helper('catalog')->__('Use Default Value') ?></label>
101
+ </div>
102
+ <?php endif;?>
103
+ <?php else : ?>
104
+ <div class="attribute-values-container-main">
105
+ <div class="attribute-values-container left">
106
+ <input id="__id___pricing" type="hidden" class="attribute-price template no-display" value="0" />
107
+ </div>
108
+ <div class="attribute-values-container left">
109
+ <input type="hidden" class="attribute-price-type" id="__id___price_type" value="0" />
110
+ </div>
111
+ <?php if ($this->getShowUseDefaultPrice()) : ?>
112
+ <div class="attribute-values-container no-display">
113
+ <input id="__id___default" type="checkbox" <?php if ($this->isReadonly() || $this->getCanEditPrice() === false):?> disabled="disabled" <?php endif;?> class="attribute-use-default-value">
114
+ </div>
115
+ <?php endif; ?>
116
+ <?php endif; ?>
117
+ </div>
118
+ </div>
119
+ <div class="template no-display" id="<?php echo $this->getHtmlId() ?>_simple_pricing">
120
+ <?php if ($this->getCanReadPrice() !== false) : ?>
121
+ <div class="attribute-values-container left v-middle">
122
+ &nbsp;<?php echo Mage::helper('catalog')->__('Price:') ?>
123
+ <input type="text" class="input-text attribute-price validate-number"<?php if ($this->getCanEditPrice() === false) : ?> disabled="disabled" <?php endif; ?>/>
124
+ </div>
125
+ <div class="attribute-values-container left v-middle">
126
+ &nbsp;<select class="attribute-price-type"<?php if ($this->getCanEditPrice() === false) : ?> disabled="disabled" <?php endif; ?>>
127
+ <option value="0"><?php echo Mage::helper('catalog')->__('Fixed') ?></option>
128
+ <option value="1"><?php echo Mage::helper('catalog')->__('Percentage') ?></option>
129
+ </select>
130
+ </div>
131
+ <?php else : ?>
132
+ <input type="hidden" class="attribute-price" />
133
+ <input type="hidden" class="attribute-price-type" />
134
+ <?php endif; ?>
135
+ </div>
136
+ <div class="template no-display" id="<?php echo $this->getHtmlId() ?>_simple_pricing_view">
137
+ &nbsp;<?php echo Mage::helper('catalog')->__('Price') ?> <strong>'{{value}}'</strong>
138
+ </div>
139
+ <?php echo $this->getGridHtml() ?>
140
+ <script type="text/javascript">
141
+ var superProduct = new Product.Configurable(<?php echo $this->getAttributesJson() ?>,<?php echo $this->getLinksJson() ?>,'<?php echo $this->getHtmlId() ?>_',<?php echo $this->getGridJsObject() ?>, <?php echo ( $this->isReadonly() ? 'true' : 'false'); ?>);
142
+ superProduct.createEmptyUrl = '<?php echo $this->getNewEmptyProductUrl() ?>';
143
+ superProduct.createNormalUrl = '<?php echo $this->getNewProductUrl() ?>';
144
+ superProduct.createQuickUrl = '<?php echo $this->getQuickCreationUrl() ?>';
145
+
146
+ Validation.add(
147
+ 'validate-configurable',
148
+ '<?php echo $this->escapeJs(Mage::helper('catalog')->__('Product with this combination of attributes already associated to configurable.')) ?>',
149
+ superProduct.checkCreationUniqueAttributes.bind(superProduct)
150
+ )
151
+ </script>
152
+
153
+ <div><input type="hidden" name="affect_configurable_product_attributes" value="1" /></div>
app/design/adminhtml/default/default/template/catalog/product/edit/websites.phtml ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
28
+ <div class="entry-edit-head">
29
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('catalog')->__('Product In Websites') ?></h4>
30
+ </div>
31
+ <fieldset id="grop_fields">
32
+ <?php if($this->getProductId()): ?>
33
+ <ul class="messages">
34
+ <li class="notice-msg">
35
+ <ul>
36
+ <li><?php echo Mage::helper('catalog')->__("Items that you don't want to show in the catalog or search results should have status 'Disabled' in the desired store.") ?></li>
37
+ </ul>
38
+ </li>
39
+ </ul>
40
+ <?php endif; ?>
41
+ <div class="store-scope">
42
+ <?php echo $this->getHintHtml() ?>
43
+ <div class="tree-store-scope">
44
+ <?php foreach ($this->getWebsiteCollection() as $_website): ?>
45
+ <div class="website-name">
46
+ <input name="product[website_ids][]" value="<?php echo $_website->getId() ?>" <?php if ($this->isReadonly()):?> disabled="disabled"<?php endif;?> class="checkbox website-checkbox" id="product_website_<?php echo $_website->getId() ?>" type="checkbox"<?php if($this->hasWebsite($_website->getId())): ?> checked="checked"<?php endif; ?> />
47
+ <big><strong><label for="product_website_<?php echo $_website->getId() ?>"><?php echo $this->escapeHtml($_website->getName()) ?></label></strong></big>
48
+ </div>
49
+ <div class="webiste-groups" id="product_website_<?php echo $_website->getId() ?>_data">
50
+ <?php foreach ($this->getGroupCollection($_website) as $_group): ?>
51
+ <h4><?php echo $this->escapeHtml($_group->getName()) ?></h4>
52
+ <div class="group-stores">
53
+ <table>
54
+ <?php foreach ($this->getStoreCollection($_group) as $_store): ?>
55
+ <tr>
56
+ <td><?php echo $this->escapeHtml($_store->getName()) ?></td>
57
+ <td>
58
+ <?php if($this->getWebsites() && !$this->hasWebsite($_website->getId())): ?>
59
+ <span class="website-<?php echo $_website->getId() ?>-select" style="display:none">
60
+ <?php echo Mage::helper('catalog')->__('(Copy data from: %s)', $this->getChooseFromStoreHtml($_store)) ?>
61
+ </span>
62
+ <?php endif; ?>
63
+ </td>
64
+ </tr>
65
+ <?php endforeach; ?>
66
+ </table>
67
+ </div>
68
+ <?php endforeach; ?>
69
+ </div>
70
+ <?php endforeach; ?>
71
+ </div>
72
+ </div>
73
+ </fieldset>
74
+ </div>
75
+ <script type="text/javascript">
76
+ //<![CDATA[
77
+ var productWebsiteCheckboxes = $$('.website-checkbox');
78
+
79
+ for(var i=0;i<productWebsiteCheckboxes.length;i++){
80
+ Event.observe(productWebsiteCheckboxes[i], 'click', toggleStoreFromChoosers);
81
+ }
82
+
83
+ function toggleStoreFromChoosers(event){
84
+ var element = Event.element(event);
85
+ var selects = $('product_website_'+element.value+'_data').getElementsBySelector('select');
86
+ var selectBlocks = $('product_website_'+element.value+'_data').getElementsByClassName('website-'+element.value+'-select');
87
+ for (var i=0; i<selects.length; i++) {
88
+ selects[i].disabled=!element.checked;
89
+ }
90
+ for (var i=0; i<selectBlocks.length; i++) {
91
+ if (element.checked) {
92
+ selectBlocks[i].show();
93
+ }
94
+ else {
95
+ selectBlocks[i].hide();
96
+ }
97
+ }
98
+ }
99
+ //]]>
100
+ </script>
app/design/adminhtml/default/default/template/catalog/product/helper/gallery.phtml ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Template for block Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Content
30
+ */
31
+ ?>
32
+ <?php
33
+ $_block = $this;
34
+ /* @var $_block Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Content */
35
+ ?>
36
+ <div id="<?php echo $_block->getHtmlId() ?>" >
37
+ <ul class="messages">
38
+ <li class="notice-msg">
39
+ <ul>
40
+ <li>
41
+ <?php echo Mage::helper('catalog')->__('Image type and information need to be specified for each store view.'); ?>
42
+ </li>
43
+ </ul>
44
+ </li>
45
+ </ul>
46
+ <div class="grid">
47
+ <table cellspacing="0" class="data border" id="<?php echo $_block->getHtmlId() ?>_grid" width="100%">
48
+ <col width="1" />
49
+ <col />
50
+ <col width="70" />
51
+ <?php foreach ($_block->getImageTypes() as $typeId=>$type): ?>
52
+ <col />
53
+ <?php endforeach; ?>
54
+ <col width="70" />
55
+ <col width="70" />
56
+ <thead>
57
+ <tr class="headings">
58
+ <th><?php echo Mage::helper('catalog')->__('Image') ?></th>
59
+ <th><?php echo Mage::helper('catalog')->__('Label') ?></th>
60
+ <th><?php echo Mage::helper('catalog')->__('Sort Order') ?></th>
61
+ <?php foreach ($_block->getImageTypes() as $typeId=>$type): ?>
62
+ <th><?php echo $type['label'] ?></th>
63
+ <?php endforeach; ?>
64
+ <th><?php echo Mage::helper('catalog')->__('Exclude') ?></th>
65
+ <th class="last"><?php echo Mage::helper('catalog')->__('Remove') ?></th>
66
+ </tr>
67
+ </thead>
68
+ <tbody id="<?php echo $_block->getHtmlId() ?>_list">
69
+ <tr id="<?php echo $_block->getHtmlId() ?>_template" class="template no-display">
70
+ <td class="cell-image"><div class="place-holder" onmouseover="<?php echo $_block->getJsObjectName(); ?>.loadImage('__file__')"><span><?php echo Mage::helper('catalog')->__('Roll Over for preview') ?></span></div><img src="<?php echo $this->getSkinUrl('images/spacer.gif')?>" width="100" style="display:none;" alt="" /></td>
71
+ <td class="cell-label"><input type="text" <?php if($_block->getElement()->getReadonly()):?> disabled="disabled"<?php endif;?> class="input-text" onkeyup="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" onchange="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td>
72
+ <td class="cell-position"><input type="text" <?php if($_block->getElement()->getReadonly()):?> disabled="disabled"<?php endif;?> class="input-text validate-number" onkeyup="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" onchange="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td>
73
+ <?php foreach ($_block->getImageTypes() as $typeId=>$type): ?>
74
+ <td class="cell-<?php echo $typeId ?> a-center"><input <?php if($_block->getElement()->getAttributeReadonly($typeId)) :?> disabled="disabled" <?php endif;?> type="radio" name="<?php echo $type['field'] ?>" onclick="<?php echo $_block->getJsObjectName(); ?>.setProductImages('__file__')" value="__file__" /></td>
75
+ <?php endforeach; ?>
76
+ <td class="cell-disable a-center"><input type="checkbox" <?php if($_block->getElement()->getReadonly()):?> disabled="disabled"<?php endif;?> onclick="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td>
77
+ <td class="cell-remove a-center last"><input type="checkbox" <?php if($_block->getElement()->getReadonly()):?> disabled="disabled"<?php endif;?> onclick="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td>
78
+ </tr>
79
+ <?php if($_block->hasUseDefault()): ?>
80
+ <tr id="<?php echo $_block->getHtmlId() ?>_default">
81
+ <td><?php echo Mage::helper('catalog')->__('Use Default Value') ?></td>
82
+ <td>&nbsp;</td>
83
+ <td>&nbsp;</td>
84
+ <?php foreach ($_block->getMediaAttributes() as $_attribute): ?>
85
+ <td class="a-center">
86
+ <?php if($_block->getElement()->canDisplayUseDefault($_attribute)): ?>
87
+ <input class="default-checkbox" name="use_default[]" type="checkbox" <?php if($_block->getElement()->getAttributeReadonly($_attribute->getAttributeCode())):?> disabled="disabled" <?php endif;?> onclick="<?php echo $_block->getJsObjectName(); ?>.updateUseDefault()"
88
+ <?php if($_block->getElement()->usedDefault($_attribute)): ?>checked<?php endif; ?> value="<?php echo $_attribute->getAttributeCode() ?>" />
89
+ <?php endif ?>
90
+ </td>
91
+ <?php endforeach; ?>
92
+ <td>&nbsp;</td>
93
+ <td class="last">&nbsp;</td>
94
+ </tr>
95
+ <?php endif ?>
96
+ <tr id="<?php echo $_block->getHtmlId() ?>-image-0">
97
+ <td class="cell-image"><?php echo Mage::helper('catalog')->__('No image') ?></td>
98
+ <td class="cell-label"><input type="hidden" />&nbsp;</td>
99
+ <td class="cell-position"><input type="hidden" />&nbsp;</td>
100
+ <?php foreach ($_block->getImageTypes() as $typeId=>$type): ?>
101
+ <td class="cell-<?php echo $typeId ?> a-center"><input type="radio" <?php if($_block->getElement()->getAttributeReadonly($typeId)) :?> disabled="disabled" <?php endif;?> name="<?php echo $type['field'] ?>" onclick="<?php echo $_block->getJsObjectName(); ?>.setProductImages('no_selection')" value="no_selection" /></td>
102
+ <?php endforeach; ?>
103
+ <td class="cell-disable"><input type="hidden" />&nbsp;</td>
104
+ <td class="cell-remove last"><input type="hidden" />&nbsp;</td>
105
+ </tr>
106
+ </tbody>
107
+ <?php if (!$_block->getElement()->getReadonly()):?>
108
+ <tfoot>
109
+ <tr>
110
+ <td colspan="100" class="last" style="padding:8px">
111
+ <?php echo $_block->getUploaderHtml() ?>
112
+ </td>
113
+ </tr>
114
+ </tfoot>
115
+ <?php endif;?>
116
+ </table>
117
+ </div>
118
+ </div>
119
+ <input type="hidden" id="<?php echo $_block->getHtmlId() ?>_save" name="<?php echo $_block->getElement()->getName() ?>[images]" value="<?php echo $_block->htmlEscape($_block->getImagesJson()) ?>" />
120
+ <input type="hidden" id="<?php echo $_block->getHtmlId() ?>_save_image" name="<?php echo $_block->getElement()->getName() ?>[values]" value="<?php echo $_block->htmlEscape($_block->getImagesValuesJson()) ?>" />
121
+ <script type="text/javascript">
122
+ //<![CDATA[
123
+ var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php if ($_block->getElement()->getReadonly()):?>null<?php else:?><?php echo $_block->getUploader()->getJsObjectName() ?><?php endif;?>, <?php echo $_block->getImageTypesJson() ?>);
124
+ //]]>
125
+ </script>
app/design/adminhtml/default/default/template/catalog/product/js.phtml ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ //<![CDATA[
29
+ Event.observe(window, 'load', recalculateTax);
30
+ Event.observe(window, 'load', registerTaxRecalcs);
31
+
32
+ function registerTaxRecalcs()
33
+ {
34
+ if (typeof dynamicTaxes == 'undefined') {
35
+ return;
36
+ }
37
+
38
+ for (var i=0; i<dynamicTaxes.length; i++) {
39
+ Event.observe($(dynamicTaxes[i]), 'change', recalculateTax);
40
+ }
41
+ Event.observe($('tax_class_id'), 'change', recalculateTax);
42
+ }
43
+
44
+ var priceFormat = <?php echo $this->helper('tax')->getPriceFormat($this->getStore()); ?>;
45
+ var taxRates = <?php echo $this->helper('tax')->getAllRatesByProductClass($this->getStore()); ?>;
46
+
47
+ function recalculateTax()
48
+ {
49
+ if (typeof dynamicTaxes == 'undefined') {
50
+ return;
51
+ }
52
+
53
+ for (var i=0; i<dynamicTaxes.length; i++) {
54
+ var code = dynamicTaxes[i];
55
+ var span = $('dynamic-tax-' + code);
56
+ var input = $(code);
57
+
58
+ if (!input.value) {
59
+ span.innerHTML = '';
60
+ continue;
61
+ }
62
+
63
+ var rate = 0;
64
+ var taxClass = $('tax_class_id').options[$('tax_class_id').selectedIndex].value;
65
+ eval('var value = taxRates.value_' + taxClass);
66
+
67
+ if (value != undefined) {
68
+ rate = value;
69
+ }
70
+
71
+ var spanValue = '';
72
+ if (rate != 0) {
73
+ spanValue = ' ' + formatCurrency(input.value/(100+rate)*rate, priceFormat);
74
+ }
75
+ span.innerHTML = spanValue;
76
+ }
77
+ }
78
+
79
+ // Bind tab changes
80
+ function bindActiveProductTab(event) {
81
+ if(event.tab && event.tab.name && $('store_switcher')){
82
+ $('store_switcher').switchParams = 'active_tab/'+event.tab.name+'/';
83
+ }
84
+ }
85
+ varienGlobalEvents.attachEventHandler('showTab', bindActiveProductTab);
86
+
87
+ // bind active tab
88
+ <?php if($tabsBlock = $this->getLayout()->getBlock('product_tabs')): ?>
89
+ if(<?php echo $tabsBlock->getJsObjectName() ?> && <?php echo $tabsBlock->getJsObjectName() ?>.activeTab && $('store_switcher')){
90
+ $('store_switcher').switchParams = 'active_tab/'+<?php echo $tabsBlock->getJsObjectName() ?>.activeTab.name+'/';
91
+ }
92
+ <?php endif; ?>
93
+ //]]>
94
+ </script>
app/design/adminhtml/default/default/template/catalog/product/price.phtml ADDED
@@ -0,0 +1,383 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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_Adminhtml_Block_Catalog_Product_Price
33
+ */
34
+ ?>
35
+ <?php
36
+ /** @var $_coreHelper Mage_Core_Helper_Data */
37
+ $_coreHelper = $this->helper('core');
38
+ /** @var $_weeeHelper Mage_Weee_Helper_Data */
39
+ $_weeeHelper = $this->helper('weee');
40
+ /** @var $_taxHelper Mage_Tax_Helper_Data */
41
+ $_taxHelper = $this->helper('tax');
42
+
43
+ $_product = $this->getProduct();
44
+ $_id = $_product->getId();
45
+ $_storeId = $_product->getStoreId();
46
+ $_website = Mage::app()->getStore($_storeId)->getWebsite();
47
+
48
+ $_weeeSeparator = '';
49
+ $_simplePricesTax = ($_taxHelper->displayPriceIncludingTax() || $_taxHelper->displayBothPrices());
50
+ $_minimalPriceValue = $_product->getMinimalPrice();
51
+ $_minimalPrice = $_taxHelper->getPrice($_product, $_minimalPriceValue, $_simplePricesTax);
52
+ ?>
53
+
54
+
55
+ <?php
56
+ $_exclTax = $_taxHelper->getPrice($_product, $_minimalPriceValue, $includingTax = null);
57
+ $_inclTax = $_taxHelper->getPrice($_product, $_minimalPriceValue, $includingTax = true);
58
+ ?>
59
+ <?php $_weeeTaxAmount = $_weeeHelper->getAmount($_product, null, null, $_website); ?>
60
+ <?php if ($_weeeHelper->typeOfDisplay($_product, array(1,2,4))): ?>
61
+ <?php $_weeeTaxAmount = $_weeeHelper->getAmount($_product, null, null, $_website); ?>
62
+ <?php $_weeeTaxAttributes = $_weeeHelper->getProductWeeeAttributesForRenderer($_product, null, null, $_website); ?>
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 $_coreHelper->currencyByStore($_price+$_weeeTaxAmount, $_storeId, true, false) ?>
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 $_coreHelper->currencyByStore($_finalPriceInclTax+$_weeeTaxAmount,true,false) ?>
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 $_coreHelper->currencyByStore($_price+$_weeeTaxAmount, $_storeId, true, false) ?>
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 $_coreHelper->currencyByStore($_finalPriceInclTax+$_weeeTaxAmount, $_storeId, true, false) ?>
97
+ </span>
98
+ <span class="weee">(
99
+ <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
100
+ <?php echo $_weeeSeparator; ?>
101
+ <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currencyByStore($_weeeTaxAttribute->getAmount(), $_storeId, true, true); ?>
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 $_coreHelper->currencyByStore($_price+$_weeeTaxAmount, $_storeId, true, false) ?>
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 $_coreHelper->currencyByStore($_finalPriceInclTax+$_weeeTaxAmount, $_storeId, true, false) ?>
117
+ </span>
118
+ <span class="weee">(
119
+ <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
120
+ <?php echo $_weeeSeparator; ?>
121
+ <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currencyByStore($_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(), $_storeId, true, true); ?>
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 $_coreHelper->currencyByStore($_price, $_storeId, true, false) ?>
131
+ </span>
132
+ </span>
133
+ <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
134
+ <span class="weee">
135
+ <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currencyByStore($_weeeTaxAttribute->getAmount(), $_storeId, true, true); ?>
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 $_coreHelper->currencyByStore($_finalPriceInclTax+$_weeeTaxAmount, $_storeId, true, false) ?>
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 echo $_coreHelper->currencyByStore($_price, $_storeId, true, false) ?>
149
+ </span>
150
+ </span>
151
+ <span class="price-including-tax">
152
+ <span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
153
+ <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
154
+ <?php echo $_coreHelper->currencyByStore($_finalPriceInclTax, $_storeId, true, false) ?>
155
+ </span>
156
+ </span>
157
+ <?php endif; ?>
158
+ <?php else: ?>
159
+ <?php if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 0)): // including ?>
160
+ <span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
161
+ <?php echo $_coreHelper->currencyByStore($_price+$_weeeTaxAmount, $_storeId, true, true) ?>
162
+ </span>
163
+ <?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 1)): // incl. + weee ?>
164
+ <span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
165
+ <?php echo $_coreHelper->currencyByStore($_price+$_weeeTaxAmount, $_storeId, true, true) ?>
166
+ </span>
167
+ <span class="weee">(
168
+ <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
169
+ <?php echo $_weeeSeparator; ?>
170
+ <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currencyByStore($_weeeTaxAttribute->getAmount(), $_storeId, true, true); ?>
171
+ <?php $_weeeSeparator = ' + '; ?>
172
+ <?php endforeach; ?>
173
+ )</span>
174
+ <?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 4)): // incl. + weee ?>
175
+ <span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
176
+ <?php echo $_coreHelper->currencyByStore($_price+$_weeeTaxAmount, $_storeId, true, true) ?>
177
+ </span>
178
+ <span class="weee">(
179
+ <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
180
+ <?php echo $_weeeSeparator; ?>
181
+ <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currencyByStore($_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(), $_storeId, true, true); ?>
182
+ <?php $_weeeSeparator = ' + '; ?>
183
+ <?php endforeach; ?>
184
+ )</span>
185
+ <?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 2)): // excl. + weee + final ?>
186
+ <span class="regular-price"><?php echo $_coreHelper->currencyByStore($_price, $_storeId, true, true) ?></span><br />
187
+ <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
188
+ <span class="weee">
189
+ <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currencyByStore($_weeeTaxAttribute->getAmount(), $_storeId, true, true); ?>
190
+ </span>
191
+ <?php endforeach; ?>
192
+ <span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
193
+ <?php echo $_coreHelper->currencyByStore($_price+$_weeeTaxAmount, $_storeId, true, true) ?>
194
+ </span>
195
+ <?php else: ?>
196
+ <span class="regular-price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
197
+ <?php echo $_coreHelper->currencyByStore($_price, $_storeId, true, true) ?>
198
+ </span>
199
+ <?php endif; ?>
200
+ <?php endif; ?>
201
+ <?php else: /* if ($_finalPrice == $_price): */ ?>
202
+ <?php $_originalWeeeTaxAmount = $_weeeHelper->getOriginalAmount($_product); ?>
203
+
204
+ <?php if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 0)): // including ?>
205
+ <p class="old-price">
206
+ <span class="price-label"><?php echo $this->__('Regular Price:') ?></span>
207
+ <span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
208
+ <?php echo $_coreHelper->currencyByStore($_regularPrice+$_originalWeeeTaxAmount, $_storeId, true, false) ?>
209
+ </span>
210
+ </p>
211
+
212
+ <?php if ($_taxHelper->displayBothPrices()): ?>
213
+ <p class="special-price">
214
+ <span class="price-label"><?php echo $this->__('Special Price:') ?></span>
215
+ <span class="price-excluding-tax">
216
+ <span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
217
+ <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
218
+ <?php echo $_coreHelper->currencyByStore($_finalPrice+$_weeeTaxAmount, $_storeId, true, false) ?>
219
+ </span>
220
+ </span>
221
+ <span class="price-including-tax">
222
+ <span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
223
+ <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
224
+ <?php echo $_coreHelper->currencyByStore($_finalPriceInclTax+$_weeeTaxAmount, $_storeId, true, false) ?>
225
+ </span>
226
+ </span>
227
+ </p>
228
+ <?php else: ?>
229
+ <p class="special-price">
230
+ <span class="price-label"><?php echo $this->__('Special Price:') ?></span>
231
+ <span class="price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
232
+ <?php echo $_coreHelper->currencyByStore($_finalPrice+$_weeeTaxAmount, $_storeId, true, false) ?>
233
+ </span>
234
+ </p>
235
+ <?php endif; ?>
236
+
237
+ <?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 1)): // incl. + weee ?>
238
+ <p class="old-price">
239
+ <span class="price-label"><?php echo $this->__('Regular Price:') ?></span>
240
+ <span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
241
+ <?php echo $_coreHelper->currencyByStore($_regularPrice+$_originalWeeeTaxAmount, $_storeId, true, false) ?>
242
+ </span>
243
+ </p>
244
+
245
+ <p class="special-price">
246
+ <span class="price-label"><?php echo $this->__('Special Price:') ?></span>
247
+ <span class="price-excluding-tax">
248
+ <span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
249
+ <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
250
+ <?php echo $_coreHelper->currencyByStore($_finalPrice+$_weeeTaxAmount, $_storeId, true, false) ?>
251
+ </span>
252
+ </span>
253
+ <span class="weee">(
254
+ <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
255
+ <?php echo $_weeeSeparator; ?>
256
+ <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currencyByStore($_weeeTaxAttribute->getAmount(), $_storeId, true, true); ?>
257
+ <?php $_weeeSeparator = ' + '; ?>
258
+ <?php endforeach; ?>
259
+ )</span>
260
+ <span class="price-including-tax">
261
+ <span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
262
+ <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
263
+ <?php echo $_coreHelper->currencyByStore($_finalPriceInclTax+$_weeeTaxAmount, $_storeId, true, false) ?>
264
+ </span>
265
+ </span>
266
+ </p>
267
+ <?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 4)): // incl. + weee ?>
268
+ <p class="old-price">
269
+ <span class="price-label"><?php echo $this->__('Regular Price:') ?></span>
270
+ <span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
271
+ <?php echo $_coreHelper->currencyByStore($_regularPrice+$_originalWeeeTaxAmount, $_storeId, true, false) ?>
272
+ </span>
273
+ </p>
274
+
275
+ <p class="special-price">
276
+ <span class="price-label"><?php echo $this->__('Special Price:') ?></span>
277
+ <span class="price-excluding-tax">
278
+ <span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
279
+ <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
280
+ <?php echo $_coreHelper->currencyByStore($_finalPrice+$_weeeTaxAmount, $_storeId, true, false) ?>
281
+ </span>
282
+ </span>
283
+ <span class="weee">(
284
+ <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
285
+ <?php echo $_weeeSeparator; ?>
286
+ <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currencyByStore($_weeeTaxAttribute->getAmount()+$_weeeTaxAttribute->getTaxAmount(), $_storeId, true, true); ?>
287
+ <?php $_weeeSeparator = ' + '; ?>
288
+ <?php endforeach; ?>
289
+ )</span>
290
+ <span class="price-including-tax">
291
+ <span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
292
+ <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
293
+ <?php echo $_coreHelper->currencyByStore($_finalPriceInclTax+$_weeeTaxAmount, $_storeId, true, false) ?>
294
+ </span>
295
+ </span>
296
+ </p>
297
+ <?php elseif ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, 2)): // excl. + weee + final ?>
298
+ <p class="old-price">
299
+ <span class="price-label"><?php echo $this->__('Regular Price:') ?></span>
300
+ <span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
301
+ <?php echo $_coreHelper->currencyByStore($_regularPrice, $_storeId, true, false) ?>
302
+ </span>
303
+ </p>
304
+
305
+ <p class="special-price">
306
+ <span class="price-label"><?php echo $this->__('Special Price:') ?></span>
307
+ <span class="price-excluding-tax">
308
+ <span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
309
+ <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
310
+ <?php echo $_coreHelper->currencyByStore($_finalPrice, $_storeId, true, false) ?>
311
+ </span>
312
+ </span>
313
+ <?php foreach ($_weeeTaxAttributes as $_weeeTaxAttribute): ?>
314
+ <span class="weee">
315
+ <?php echo $_weeeTaxAttribute->getName(); ?>: <?php echo $_coreHelper->currencyByStore($_weeeTaxAttribute->getAmount(), $_storeId, true, true); ?>
316
+ </span>
317
+ <?php endforeach; ?>
318
+ <span class="price-including-tax">
319
+ <span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
320
+ <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
321
+ <?php echo $_coreHelper->currencyByStore($_finalPriceInclTax+$_weeeTaxAmount, $_storeId, true, false) ?>
322
+ </span>
323
+ </span>
324
+ </p>
325
+ <?php else: // excl. ?>
326
+ <p class="old-price">
327
+ <span class="price-label"><?php echo $this->__('Regular Price:') ?></span>
328
+ <span class="price" id="old-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
329
+ <?php echo $_coreHelper->currencyByStore($_regularPrice, $_storeId, true, false) ?>
330
+ </span>
331
+ </p>
332
+
333
+ <?php if ($_taxHelper->displayBothPrices()): ?>
334
+ <p class="special-price">
335
+ <span class="price-label"><?php echo $this->__('Special Price:') ?></span>
336
+ <span class="price-excluding-tax">
337
+ <span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
338
+ <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
339
+ <?php echo $_coreHelper->currencyByStore($_finalPrice, $_storeId, true, false) ?>
340
+ </span>
341
+ </span>
342
+ <span class="price-including-tax">
343
+ <span class="label"><?php echo $this->helper('tax')->__('Incl. Tax:') ?></span>
344
+ <span class="price" id="price-including-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
345
+ <?php echo $_coreHelper->currencyByStore($_finalPriceInclTax, $_storeId, true, false) ?>
346
+ </span>
347
+ </span>
348
+ </p>
349
+ <?php else: ?>
350
+ <p class="special-price">
351
+ <span class="price-label"><?php echo $this->__('Special Price:') ?></span>
352
+ <span class="price" id="product-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
353
+ <?php echo $_coreHelper->currencyByStore($_finalPrice, $_storeId, true, false) ?>
354
+ </span>
355
+ </p>
356
+ <?php endif; ?>
357
+ <?php endif; ?>
358
+
359
+ <?php endif; /* if ($_finalPrice == $_price): */ ?>
360
+
361
+ <?php if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()): ?>
362
+
363
+ <?php $_minimalPriceDisplayValue = $_minimalPrice; ?>
364
+ <?php if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, array(0, 1, 4))): ?>
365
+ <?php $_minimalPriceDisplayValue = $_minimalPrice+$_weeeTaxAmount; ?>
366
+ <?php endif; ?>
367
+
368
+ <?php if ($this->getUseLinkForAsLowAs()):?>
369
+ <a href="<?php echo $_product->getProductUrl(); ?>" class="minimal-price-link">
370
+ <?php else:?>
371
+ <span class="minimal-price-link">
372
+ <?php endif?>
373
+ <span class="label"><?php echo $this->__('As low as:') ?></span>
374
+ <span class="price" id="product-minimal-price-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
375
+ <?php echo $_coreHelper->currencyByStore($_minimalPriceDisplayValue, $_storeId, true, false) ?>
376
+ </span>
377
+ <?php if ($this->getUseLinkForAsLowAs()):?>
378
+ </a>
379
+ <?php else:?>
380
+ </span>
381
+ <?php endif?>
382
+ <?php endif; /* if ($this->getDisplayMinimalPrice() && $_minimalPrice && $_minimalPrice < $_finalPrice): */ ?>
383
+ </div>
app/design/adminhtml/default/default/template/catalog/product/tab/alert.phtml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Template for block Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Alerts
30
+ */
31
+ ?>
32
+ <div id="alert_messages_block"><?php echo $this->getMessageHtml() ?></div>
33
+ <div>
34
+ <h4 class="icon-head head-edit-form"><?php echo Mage::helper('productalert')->__('Product Alerts') ?></h4>
35
+ </div>
36
+ <div class="clear"></div>
37
+ <?php echo $this->getAccordionHtml() ?>
app/design/adminhtml/default/default/template/catalog/product/tab/inventory.phtml ADDED
@@ -0,0 +1,263 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 if ($this->isReadonly()):?>
28
+ <?php $_readonly = ' disabled="disabled" ';?>
29
+ <?php else: ?>
30
+ <?php $_readonly = '';?>
31
+ <?php endif; ?>
32
+ <div class="entry-edit">
33
+ <div class="entry-edit-head">
34
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('catalog')->__('Inventory') ?></h4>
35
+ </div>
36
+ <fieldset>
37
+
38
+ <legend><?php echo Mage::helper('catalog')->__('Inventory') ?></legend>
39
+ <table cellspacing="0" class="form-list" id="table_cataloginventory">
40
+ <tr>
41
+ <td class="label"><label for="inventory_manage_stock"><?php echo Mage::helper('catalog')->__('Manage Stock') ?></label></td>
42
+ <td class="value"><select id="inventory_manage_stock" name="<?php echo $this->getFieldSuffix() ?>[stock_data][manage_stock]" class="select" <?php echo $_readonly;?>>
43
+ <option value="1"><?php echo Mage::helper('catalog')->__('Yes') ?></option>
44
+ <option value="0"<?php if ($this->getConfigFieldValue('manage_stock') == 0): ?> selected="selected"<?php endif; ?>><?php echo Mage::helper('catalog')->__('No') ?></option>
45
+ </select>
46
+ <input type="hidden" id="inventory_manage_stock_default" value="<?php echo $this->getDefaultConfigValue('manage_stock'); ?>" />
47
+
48
+ <?php $_checked = ($this->getFieldValue('use_config_manage_stock') || $this->IsNew()) ? 'checked="checked"' : '' ?>
49
+ <input type="checkbox" id="inventory_use_config_manage_stock" name="<?php echo $this->getFieldSuffix() ?>[stock_data][use_config_manage_stock]" value="1" <?php echo $_checked ?> onclick="toggleValueElements(this, this.parentNode);" class="checkbox" <?php echo $_readonly;?>/>
50
+ <label for="inventory_use_config_manage_stock" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
51
+ <?php if (!$this->isReadonly()):?><script type="text/javascript">toggleValueElements($('inventory_use_config_manage_stock'), $('inventory_use_config_manage_stock').parentNode);</script><?php endif; ?></td>
52
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
53
+ </tr>
54
+
55
+ <?php if(!$this->getProduct()->isComposite()): ?>
56
+ <tr>
57
+ <td class="label"><label for="inventory_qty"><?php echo Mage::helper('catalog')->__('Qty') ?><span class="required">*</span></label></td>
58
+ <td class="value">
59
+ <?php if (!$_readonly):?>
60
+ <input type="hidden" id="original_inventory_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][original_inventory_qty]" value="<?php echo $this->getFieldValue('qty')*1 ?>"/>
61
+ <?php endif;?>
62
+ <input type="text" class="input-text required-entry validate-number" id="inventory_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][qty]" value="<?php echo $this->getFieldValue('qty')*1 ?>" <?php echo $_readonly;?>/>
63
+ </td>
64
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
65
+ </tr>
66
+
67
+ <tr>
68
+ <td class="label"><label for="inventory_min_qty"><?php echo Mage::helper('catalog')->__('Qty for Item\'s Status to Become Out of Stock') ?></label></td>
69
+ <td class="value"><input type="text" class="input-text validate-number" id="inventory_min_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][min_qty]" value="<?php echo $this->getFieldValue('min_qty')*1 ?>" <?php echo $_readonly;?>/>
70
+
71
+ <?php $_checked = ($this->getFieldValue('use_config_min_qty') || $this->IsNew()) ? 'checked="checked"' : '' ?>
72
+ <input type="checkbox" id="inventory_use_config_min_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][use_config_min_qty]" value="1" <?php echo $_checked ?> onclick="toggleValueElements(this, this.parentNode);" <?php echo $_readonly;?> />
73
+ <label for="inventory_use_config_min_qty" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
74
+ <?php if (!$this->isReadonly()):?><script type="text/javascript">toggleValueElements($('inventory_use_config_min_qty'), $('inventory_use_config_min_qty').parentNode);</script><?php endif; ?></td>
75
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
76
+ </tr>
77
+
78
+ <tr>
79
+ <td class="label"><label for="inventory_min_sale_qty"><?php echo Mage::helper('catalog')->__('Minimum Qty Allowed in Shopping Cart') ?></label></td>
80
+ <td class="value"><input type="text" class="input-text validate-number" id="inventory_min_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][min_sale_qty]" value="<?php echo $this->getFieldValue('min_sale_qty')*1 ?>" <?php echo $_readonly;?>/>
81
+
82
+ <?php $_checked = ($this->getFieldValue('use_config_min_sale_qty') || $this->IsNew()) ? 'checked="checked"' : '' ?>
83
+ <input type="checkbox" id="inventory_use_config_min_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][use_config_min_sale_qty]" value="1" <?php echo $_checked ?> onclick="toggleValueElements(this, this.parentNode);" class="checkbox" <?php echo $_readonly;?> />
84
+ <label for="inventory_use_config_min_sale_qty" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
85
+ <?php if (!$this->isReadonly()):?><script type="text/javascript">toggleValueElements($('inventory_use_config_min_sale_qty'), $('inventory_use_config_min_sale_qty').parentNode);</script><?php endif; ?></td>
86
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
87
+ </tr>
88
+
89
+ <tr>
90
+ <td class="label"><label for="inventory_max_sale_qty"><?php echo Mage::helper('catalog')->__('Maximum Qty Allowed in Shopping Cart') ?></label></td>
91
+ <td class="value"><input type="text" class="input-text validate-number" id="inventory_max_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][max_sale_qty]" value="<?php echo $this->getFieldValue('max_sale_qty')*1 ?>" <?php echo $_readonly;?> />
92
+
93
+ <?php $_checked = ($this->getFieldValue('use_config_max_sale_qty') || $this->IsNew()) ? 'checked="checked"' : '' ?>
94
+ <input type="checkbox" id="inventory_use_config_max_sale_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][use_config_max_sale_qty]" value="1" <?php echo $_checked ?> onclick="toggleValueElements(this, this.parentNode);" class="checkbox" <?php echo $_readonly;?> />
95
+ <label for="inventory_use_config_max_sale_qty" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
96
+ <?php if (!$this->isReadonly()):?><script type="text/javascript">toggleValueElements($('inventory_use_config_max_sale_qty'), $('inventory_use_config_max_sale_qty').parentNode);</script><?php endif; ?></td>
97
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
98
+ </tr>
99
+
100
+ <?php if($this->canUseQtyDecimals()): ?>
101
+ <tr>
102
+ <td class="label"><label for="inventory_is_qty_decimal"><?php echo Mage::helper('catalog')->__('Qty Uses Decimals') ?></label></td>
103
+ <td class="value"><select id="inventory_is_qty_decimal" name="<?php echo $this->getFieldSuffix() ?>[stock_data][is_qty_decimal]" class="select" <?php echo $_readonly;?>>
104
+ <option value="0"><?php echo Mage::helper('catalog')->__('No') ?></option>
105
+ <option value="1"<?php if($this->getFieldValue('is_qty_decimal')==1): ?> selected="selected"<?php endif; ?>><?php echo Mage::helper('catalog')->__('Yes') ?></option>
106
+ </select>
107
+ </td>
108
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
109
+ </tr>
110
+
111
+ <?php if (!$this->isVirtual()) : ?>
112
+ <tr>
113
+ <td class="label"><label for="inventory_is_decimal_divided"><?php echo Mage::helper('catalog')->__('Can be Divided into Multiple Boxes for Shipping') ?></label></td>
114
+ <td class="value"><select id="inventory_is_decimal_divided" name="<?php echo $this->getFieldSuffix() ?>[stock_data][is_decimal_divided]" class="select" <?php echo $_readonly;?>>
115
+ <option value="0"><?php echo Mage::helper('catalog')->__('No') ?></option>
116
+ <option value="1"<?php if($this->getFieldValue('is_decimal_divided') == 1): ?> selected="selected"<?php endif; ?>><?php echo Mage::helper('catalog')->__('Yes') ?></option>
117
+ </select>
118
+ </td>
119
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
120
+ </tr>
121
+ <?php endif; ?>
122
+
123
+ <?php endif; ?>
124
+
125
+ <tr>
126
+ <td class="label"><label for="inventory_backorders"><?php echo Mage::helper('catalog')->__('Backorders') ?></label></td>
127
+ <td class="value"><select id="inventory_backorders" name="<?php echo $this->getFieldSuffix() ?>[stock_data][backorders]" class="select" <?php echo $_readonly;?>>
128
+ <?php foreach ($this->getBackordersOption() as $option): ?>
129
+ <?php $_selected = ($option['value'] == $this->getFieldValue('backorders')) ? 'selected="selected"' : '' ?>
130
+ <option value="<?php echo $option['value'] ?>" <?php echo $_selected ?>><?php echo $option['label'] ?></option>
131
+ <?php endforeach; ?>
132
+ </select>
133
+
134
+ <?php $_checked = ($this->getFieldValue('use_config_backorders') || $this->IsNew()) ? 'checked="checked"' : '' ?>
135
+ <input type="checkbox" id="inventory_use_config_backorders" name="<?php echo $this->getFieldSuffix() ?>[stock_data][use_config_backorders]" value="1" <?php echo $_checked ?> onclick="toggleValueElements(this, this.parentNode);" class="checkbox" <?php echo $_readonly;?> />
136
+ <label for="inventory_use_config_backorders" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
137
+ <?php if (!$this->isReadonly()):?><script type="text/javascript">toggleValueElements($('inventory_use_config_backorders'), $('inventory_use_config_backorders').parentNode);</script><?php endif; ?></td>
138
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
139
+ </tr>
140
+ <tr>
141
+ <td class="label"><label for="inventory_notify_stock_qty"><?php echo Mage::helper('catalog')->__('Notify for Quantity Below') ?></label></td>
142
+ <td class="value"><input type="text" class="input-text validate-number" id="inventory_notify_stock_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][notify_stock_qty]" value="<?php echo $this->getFieldValue('notify_stock_qty')*1 ?>" <?php echo $_readonly;?>/>
143
+
144
+ <?php $_checked = ($this->getFieldValue('use_config_notify_stock_qty') || $this->IsNew()) ? 'checked="checked"' : '' ?>
145
+ <input type="checkbox" id="inventory_use_config_notify_stock_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][use_config_notify_stock_qty]" value="1" <?php echo $_checked ?> onclick="toggleValueElements(this, this.parentNode);" class="checkbox" <?php echo $_readonly;?>/>
146
+ <label for="inventory_use_config_notify_stock_qty" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
147
+ <?php if (!$this->isReadonly()):?><script type="text/javascript">toggleValueElements($('inventory_use_config_notify_stock_qty'), $('inventory_use_config_notify_stock_qty').parentNode);</script><?php endif; ?></td>
148
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
149
+ </tr>
150
+ <?php endif; ?>
151
+ <tr>
152
+ <td class="label"><label for="inventory_enable_qty_increments"><?php echo Mage::helper('catalog')->__('Enable Qty Increments') ?></label></td>
153
+ <td class="value"><select id="inventory_enable_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[stock_data][enable_qty_increments]" class="select" <?php echo $_readonly;?>>
154
+ <option value="1"><?php echo Mage::helper('catalog')->__('Yes') ?></option>
155
+ <option value="0"<?php if ($this->getConfigFieldValue('enable_qty_increments') == 0): ?> selected="selected"<?php endif; ?>><?php echo Mage::helper('catalog')->__('No') ?></option>
156
+ </select>
157
+ <input type="hidden" id="inventory_enable_qty_increments_default" value="<?php echo $this->getDefaultConfigValue('enable_qty_increments'); ?>" />
158
+
159
+ <?php $_checked = ($this->getFieldValue('use_config_enable_qty_increments') || $this->IsNew()) ? 'checked="checked"' : '' ?>
160
+ <input type="checkbox" id="inventory_use_config_enable_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[stock_data][use_config_enable_qty_increments]" value="1" <?php echo $_checked ?> onclick="toggleValueElements(this, this.parentNode);" class="checkbox" <?php echo $_readonly;?>/>
161
+ <label for="inventory_use_config_enable_qty_increments" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
162
+ <?php if (!$this->isReadonly()):?><script type="text/javascript">toggleValueElements($('inventory_use_config_enable_qty_increments'), $('inventory_use_config_enable_qty_increments').parentNode);</script><?php endif; ?></td>
163
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
164
+ </tr>
165
+ <tr>
166
+ <td class="label"><label for="inventory_qty_increments"><?php echo Mage::helper('catalog')->__('Qty Increments') ?></label></td>
167
+ <td class="value">
168
+ <input type="text" class="input-text validate-digits" id="inventory_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[stock_data][qty_increments]" value="<?php echo $this->getFieldValue('qty_increments')*1 ?>" <?php echo $_readonly;?>/>
169
+ <?php $_checked = ($this->getFieldValue('use_config_qty_increments') || $this->IsNew()) ? 'checked="checked"' : '' ?>
170
+ <input type="checkbox" id="inventory_use_config_qty_increments" name="<?php echo $this->getFieldSuffix() ?>[stock_data][use_config_qty_increments]" value="1" <?php echo $_checked ?> onclick="toggleValueElements(this, this.parentNode);" class="checkbox" <?php echo $_readonly;?>/>
171
+ <label for="inventory_use_config_qty_increments" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
172
+ <?php if (!$this->isReadonly()):?><script type="text/javascript">toggleValueElements($('inventory_use_config_qty_increments'), $('inventory_use_config_qty_increments').parentNode);</script><?php endif; ?></td>
173
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
174
+ </tr>
175
+ <tr>
176
+ <td class="label"><label for="inventory_stock_availability"><?php echo Mage::helper('catalog')->__('Stock Availability') ?></label></td>
177
+ <td class="value"><select id="inventory_stock_availability" name="<?php echo $this->getFieldSuffix() ?>[stock_data][is_in_stock]" class="select" <?php echo $_readonly;?>>
178
+ <?php foreach ($this->getStockOption() as $option): ?>
179
+ <?php $_selected = ($option['value'] == $this->getFieldValue('is_in_stock')) ? 'selected="selected"' : '' ?>
180
+ <option value="<?php echo $option['value'] ?>" <?php echo $_selected ?>><?php echo $option['label'] ?></option>
181
+ <?php endforeach; ?>
182
+ </select>
183
+ </td>
184
+ <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
185
+ </tr>
186
+ </table>
187
+ </fieldset>
188
+ </div>
189
+ <script type="text/javascript">
190
+ //<![CDATA[
191
+ function changeManageStockOption()
192
+ {
193
+ var manageStock = $('inventory_use_config_manage_stock').checked
194
+ ? $('inventory_manage_stock_default').value
195
+ : $('inventory_manage_stock').value;
196
+ var catalogInventoryNotManageStockFields = {
197
+ inventory_min_sale_qty: true,
198
+ inventory_max_sale_qty: true,
199
+ inventory_enable_qty_increments : true,
200
+ inventory_qty_increments: true
201
+ };
202
+
203
+ $$('#table_cataloginventory tr').each(function(el) {
204
+ if (el == $('inventory_manage_stock').up(1)) {
205
+ return;
206
+ }
207
+
208
+ for (field in catalogInventoryNotManageStockFields) {
209
+ if ($(field) && ($(field).up(1) == el)) {
210
+ return;
211
+ }
212
+ }
213
+
214
+ el[manageStock == 1 ? 'show' : 'hide']();
215
+ });
216
+
217
+ return true;
218
+ }
219
+
220
+ function applyEnableQtyIncrements() {
221
+ var enableQtyIncrements = $('inventory_use_config_enable_qty_increments').checked
222
+ ? $('inventory_enable_qty_increments_default').value
223
+ : $('inventory_enable_qty_increments').value;
224
+
225
+ $('inventory_qty_increments').up('tr')[enableQtyIncrements == 1 ? 'show' : 'hide']();
226
+ }
227
+
228
+ function applyEnableDecimalDivided() {
229
+ <?php if (!$this->isVirtual()) : ?>
230
+ $('inventory_is_decimal_divided').up('tr').hide();
231
+ <?php endif; ?>
232
+ $('inventory_qty_increments').removeClassName('validate-digits').removeClassName('validate-number');
233
+ $('inventory_min_sale_qty').removeClassName('validate-digits').removeClassName('validate-number');
234
+ if ($('inventory_is_qty_decimal').value == 1) {
235
+ <?php if (!$this->isVirtual()) : ?>
236
+ $('inventory_is_decimal_divided').up('tr').show();
237
+ <?php endif; ?>
238
+ $('inventory_qty_increments').addClassName('validate-number');
239
+ $('inventory_min_sale_qty').addClassName('validate-number');
240
+ } else {
241
+ $('inventory_qty_increments').addClassName('validate-digits');
242
+ $('inventory_min_sale_qty').addClassName('validate-digits');
243
+ }
244
+ }
245
+
246
+ Event.observe(window, 'load', function() {
247
+ if ($('inventory_manage_stock') && $('inventory_use_config_manage_stock')) {
248
+ Event.observe($('inventory_manage_stock'), 'change', changeManageStockOption);
249
+ Event.observe($('inventory_use_config_manage_stock'), 'change', changeManageStockOption);
250
+ changeManageStockOption();
251
+ }
252
+ if ($('inventory_enable_qty_increments') && $('inventory_use_config_enable_qty_increments')) {
253
+ Event.observe($('inventory_enable_qty_increments'), 'change', applyEnableQtyIncrements);
254
+ Event.observe($('inventory_use_config_enable_qty_increments'), 'change', applyEnableQtyIncrements);
255
+ applyEnableQtyIncrements();
256
+ }
257
+ if ($('inventory_is_qty_decimal') && $('inventory_qty_increments') && $('inventory_min_sale_qty')) {
258
+ Event.observe($('inventory_is_qty_decimal'), 'change', applyEnableDecimalDivided);
259
+ applyEnableDecimalDivided();
260
+ }
261
+ });
262
+ //]]>
263
+ </script>
app/design/adminhtml/default/default/template/catalog/product/widget/chooser/container.phtml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Container for product link widget chooser
30
+ *
31
+ * @see Mage_Adminhtml_Block_Catalog_Product_Widget_Chooser_Container
32
+ */
33
+ ?>
34
+ <div class="columns">
35
+ <div class="side-col"><?php echo $this->getTreeHtml() ?></div>
36
+ <div class="main-col"><?php echo $this->getGridHtml() ?></div>
37
+ </div>
app/design/adminhtml/default/default/template/catalog/wysiwyg/js.phtml ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ //<![CDATA[
29
+
30
+ var catalogWysiwygEditor = {
31
+ overlayShowEffectOptions : null,
32
+ overlayHideEffectOptions : null,
33
+ open : function(editorUrl, elementId) {
34
+ if (editorUrl && elementId) {
35
+ new Ajax.Request(editorUrl, {
36
+ parameters: {
37
+ element_id: elementId+'_editor',
38
+ store_id: '<?php echo $this->getStoreId() ?>'
39
+ },
40
+ onSuccess: function(transport) {
41
+ try {
42
+ this.openDialogWindow(transport.responseText, elementId);
43
+ } catch(e) {
44
+ alert(e.message);
45
+ }
46
+ }.bind(this)
47
+ });
48
+ }
49
+ },
50
+ openDialogWindow : function(content, elementId) {
51
+ this.overlayShowEffectOptions = Windows.overlayShowEffectOptions;
52
+ this.overlayHideEffectOptions = Windows.overlayHideEffectOptions;
53
+ Windows.overlayShowEffectOptions = {duration:0};
54
+ Windows.overlayHideEffectOptions = {duration:0};
55
+
56
+ Dialog.confirm(content, {
57
+ draggable:true,
58
+ resizable:true,
59
+ closable:true,
60
+ className:"magento",
61
+ windowClassName:"popup-window",
62
+ title:'WYSIWYG Editor',
63
+ width:950,
64
+ height:555,
65
+ zIndex:1000,
66
+ recenterAuto:false,
67
+ hideEffect:Element.hide,
68
+ showEffect:Element.show,
69
+ id:"catalog-wysiwyg-editor",
70
+ buttonClass:"form-button",
71
+ okLabel:"Submit",
72
+ ok: this.okDialogWindow.bind(this),
73
+ cancel: this.closeDialogWindow.bind(this),
74
+ onClose: this.closeDialogWindow.bind(this),
75
+ firedElementId: elementId
76
+ });
77
+
78
+ content.evalScripts.bind(content).defer();
79
+
80
+ $(elementId+'_editor').value = $(elementId).value;
81
+ },
82
+ okDialogWindow : function(dialogWindow) {
83
+ if (dialogWindow.options.firedElementId) {
84
+ wysiwygObj = eval('wysiwyg'+dialogWindow.options.firedElementId+'_editor');
85
+ wysiwygObj.turnOff();
86
+ if (tinyMCE.get(wysiwygObj.id)) {
87
+ $(dialogWindow.options.firedElementId).value = tinyMCE.get(wysiwygObj.id).getContent();
88
+ } else {
89
+ if ($(dialogWindow.options.firedElementId+'_editor')) {
90
+ $(dialogWindow.options.firedElementId).value = $(dialogWindow.options.firedElementId+'_editor').value;
91
+ }
92
+ }
93
+ }
94
+ this.closeDialogWindow(dialogWindow);
95
+ },
96
+ closeDialogWindow : function(dialogWindow) {
97
+ // remove form validation event after closing editor to prevent errors during save main form
98
+ if (typeof varienGlobalEvents != undefined && editorFormValidationHandler) {
99
+ varienGlobalEvents.removeEventHandler('formSubmit', editorFormValidationHandler);
100
+ }
101
+
102
+ //IE fix - blocked form fields after closing
103
+ $(dialogWindow.options.firedElementId).focus();
104
+
105
+ //destroy the instance of editor
106
+ wysiwygObj = eval('wysiwyg'+dialogWindow.options.firedElementId+'_editor');
107
+ if (tinyMCE.get(wysiwygObj.id)) {
108
+ tinyMCE.execCommand('mceRemoveControl', true, wysiwygObj.id);
109
+ }
110
+
111
+ dialogWindow.close();
112
+ Windows.overlayShowEffectOptions = this.overlayShowEffectOptions;
113
+ Windows.overlayHideEffectOptions = this.overlayHideEffectOptions;
114
+ }
115
+ };
116
+
117
+ //]]>
118
+ </script>
app/design/adminhtml/default/default/template/centinel/authentication/complete.phtml ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 if ($this->getIsProcessed()):?>
28
+ <?php if ($this->getIsSuccess()):?>
29
+ <h1><?php echo $this->__('Verification Successful');?></h1>
30
+ <p><?php echo $this->__('Please continue with placing order.')?></p>
31
+ <?php else:?>
32
+ <h4><?php echo $this->__('Verification Failed');?></h4>
33
+ <p><?php echo $this->__('The card has failed verification with the issuer bank.')?> <strong><?php echo $this->__('Order cannot be placed.')?></strong></p>
34
+ <?php endif;?>
35
+ <?php else:?>
36
+ <h4><?php echo $this->__('Verification cannot be processed');?></h4>
37
+ <p><?php echo $this->__('There has been wrong payment information submitted or time limit has expired. Please, try again.')?> <strong><?php echo $this->__('Order cannot be placed.')?></strong></p>
38
+ <?php endif;?>
app/design/adminhtml/default/default/template/centinel/authentication/start.phtml ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <form name="validation_form" id="validation_form" action="<?php echo $this->getAcsUrl();?>" method="post">
28
+ <input type="hidden" name="PaReq" value="<?php echo $this->getPaReq()?>" />
29
+ <input type="hidden" name="TermUrl" value="<?php echo $this->getTermUrl()?>" />
30
+ <input type="hidden" name="MD" value="<?php echo $this->getMd()?>" />
31
+ </form>
32
+ <script type="text/javascript">
33
+ //<![CDATA[
34
+ window.onload = function(){
35
+ document.getElementById('validation_form').submit();
36
+ };
37
+ //]]>
38
+ </script>
app/design/adminhtml/default/default/template/centinel/validation/form.phtml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="centinel">
28
+ <div class="authentication">
29
+ <iframe frameborder="0" border="0" id="<?php echo $this->getContainerId() ?>" src="" style="display:none;"></iframe>
30
+ </div>
31
+ </div>
32
+ <button onclick="cardValidator.validate()" class="scalable" type="button"><span><span><span><?php echo $this->__('Start/Reset Validation...')?></span></span></span></button>
33
+ <script type="text/javascript">
34
+ //<![CDATA[
35
+ cardValidator = new centinelValidator('<?php echo $this->getMethodCode() ?>', '<?php echo $this->getFrameUrl() ?>', '<?php echo $this->getContainerId() ?>');
36
+ //]]>
37
+ </script>
app/design/adminhtml/default/default/template/cms/browser/content.phtml ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Wysiwyg Images content template
30
+ *
31
+ * @see Mage_Adminhtml_Block_Cms_Wysiwyg_Images_Content
32
+ */
33
+ ?>
34
+ <?php echo $this->getChildHtml('wysiwyg_images.js') ?>
35
+
36
+ <div class="content-header skip-header" id="content_header">
37
+ <table cellspacing="0">
38
+ <tr>
39
+ <td><h3 id="content_header_text"><?php echo $this->getHeaderText() ?></h3></td>
40
+ <td class="form-buttons">
41
+ <?php echo $this->getButtonsHtml() ?>
42
+ </td>
43
+ </tr>
44
+ </table>
45
+ </div>
46
+
47
+ <div id="contents-uploader"><?php echo $this->getChildHtml('wysiwyg_images.uploader') ?></div>
48
+ <div id="contents"></div>
49
+ <div id="contents-newfolder" class="no-display"><?php echo $this->getChildHtml('wysiwyg_images.newfolder') ?></div>
app/design/adminhtml/default/default/template/cms/browser/content/files.phtml ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Directory contents template for Wysiwyg Images
30
+ *
31
+ * @see Mage_Adminhtml_Block_Cms_Wysiwyg_Images_Content_Files
32
+ */
33
+ ?>
34
+ <?php
35
+ $_width = $this->getImagesWidth();
36
+ $_height = $this->getImagesHeight();
37
+ ?>
38
+ <?php if ($this->getFilesCount() > 0): ?>
39
+ <?php foreach ($this->getFiles() as $file): ?>
40
+ <div class="filecnt" id="<?php echo $this->getFileId($file) ?>">
41
+ <p class="nm" style="height:<?php echo $_height ?>px;width:<?php echo $_width ?>px;">
42
+ <?php if($this->getFileThumbUrl($file)):?>
43
+ <img src="<?php echo $this->getFileThumbUrl($file) ?>" alt="<?php echo $this->getFileName($file) ?>"/>
44
+ <?php endif; ?>
45
+ </p>
46
+ <?php if($this->getFileWidth($file)): ?>
47
+ <small><?php echo $this->getFileWidth($file) ?>x<?php echo $this->getFileHeight($file) ?> <?php echo $this->helper('cms')->__('px.') ?></small><br/>
48
+ <?php endif; ?>
49
+ <small><?php echo $this->getFileShortName($file); ?></small>
50
+ </div>
51
+ <?php endforeach; ?>
52
+ <?php else: ?>
53
+ <?php echo $this->helper('cms')->__('No files found') ?>
54
+ <?php endif; ?>
app/design/adminhtml/default/default/template/cms/browser/content/newfolder.phtml ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * New directory template for Wysiwyg Images
30
+ *
31
+ * @see Mage_Adminhtml_Block_Cms_Wysiwyg_Images_Content_Newfolder
32
+ */
33
+ ?>
app/design/adminhtml/default/default/template/cms/browser/content/uploader.phtml ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Uploader template for Wysiwyg Images
30
+ *
31
+ * @see Mage_Adminhtml_Block_Cms_Wysiwyg_Images_Content_Uploader
32
+ */
33
+ ?>
34
+ <div id="<?php echo $this->getHtmlId() ?>" class="uploader">
35
+ <div class="buttons">
36
+ <div id="<?php echo $this->getHtmlId() ?>-install-flash" style="display:none">
37
+ <?php echo Mage::helper('media')->__('This content requires last version of Adobe Flash Player. <a href="%s">Get Flash</a>', 'http://www.adobe.com/go/getflash/') ?>
38
+ </div>
39
+ </div>
40
+ <div class="clear"></div>
41
+ <div class="no-display" id="<?php echo $this->getHtmlId() ?>-template">
42
+ <div id="{{id}}" class="file-row">
43
+ <span class="file-info">{{name}} ({{size}})</span>
44
+ <span class="delete-button"><?php echo $this->getDeleteButtonHtml() ?></span>
45
+ <span class="progress-text"></span>
46
+ <div class="clear"></div>
47
+ </div>
48
+ </div>
49
+ <div class="no-display" id="<?php echo $this->getHtmlId() ?>-template-progress">
50
+ {{percent}}% {{uploaded}} / {{total}}
51
+ </div>
52
+ </div>
53
+
54
+ <script type="text/javascript">
55
+ //<![CDATA[
56
+ maxUploadFileSizeInBytes = <?php echo $this->getDataMaxSizeInBytes() ?>;
57
+ maxUploadFileSize = '<?php echo $this->getDataMaxSize() ?>';
58
+
59
+ <?php echo $this->getJsObjectName() ?> = new Flex.Uploader('<?php echo $this->getHtmlId() ?>', '<?php echo $this->getSkinUrl('media/uploader.swf') ?>', <?php echo $this->getConfigJson() ?>);
60
+ <?php echo $this->getJsObjectName() ?>.onFilesComplete = function(completedFiles){
61
+ completedFiles.each(function(file){
62
+ <?php echo $this->getJsObjectName() ?>.removeFile(file.id);
63
+ });
64
+ MediabrowserInstance.handleUploadComplete();
65
+ }
66
+ // hide flash buttons
67
+ if ($('<?php echo $this->getHtmlId() ?>-flash') != undefined) {
68
+ $('<?php echo $this->getHtmlId() ?>-flash').setStyle({float:'left'});
69
+ }
70
+ //]]>
71
+ </script>
app/design/adminhtml/default/default/template/cms/browser/js.phtml ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Directories tree template
30
+ *
31
+ * @see Mage_Adminhtml_Block_Cms_Wysiwyg_Images_Content
32
+ */
33
+ ?>
34
+ <script type="text/javascript">
35
+ //<![CDATA[
36
+ MediabrowserInstance = new Mediabrowser(<?php echo $this->getFilebrowserSetupObject() ?>);
37
+ MediabrowserInstance.storeId = '<?php echo $this->getStoreId() ?>';
38
+ //]]>
39
+ </script>
app/design/adminhtml/default/default/template/cms/browser/tree.phtml ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Directories tree template
30
+ *
31
+ * @see Mage_Adminhtml_Block_Cms_Wysiwyg_Images_Tree
32
+ */
33
+ ?>
34
+ <div class="categories-side-col">
35
+ <div class="tree-actions">
36
+ <a href="#" id="tree_action_collapse"><?php echo $this->helper('cms')->__('Collapse All'); ?></a>
37
+ <span class="separator">|</span>
38
+ <a href="#" id="tree_action_expand"><?php echo $this->helper('cms')->__('Expand All'); ?></a>
39
+ </div>
40
+ </div>
41
+
42
+ <div id="tree" style="width:100%; overflow:auto;"></div>
43
+
44
+ <script type="text/javascript">
45
+ Ext.onReady(function(){
46
+ var Tree = Ext.tree;
47
+ var tree = new Tree.TreePanel('tree', {
48
+ animate:true,
49
+ loader: new Tree.TreeLoader({
50
+ dataUrl:'<?php echo $this->getTreeLoaderUrl() ?>'
51
+ }),
52
+ enableDD:false,
53
+ containerScroll: true
54
+ });
55
+
56
+ // set the root node
57
+ var root = new Tree.AsyncTreeNode({
58
+ text: '<?php echo $this->getRootNodeName() ?>',
59
+ draggable:false,
60
+ id:'root'
61
+ });
62
+ tree.setRootNode(root);
63
+
64
+ // render the tree
65
+ tree.render();
66
+ root.expand();
67
+
68
+ Event.observe($('tree_action_collapse'), 'click', function(){
69
+ tree.collapseAll();
70
+ });
71
+
72
+ Event.observe($('tree_action_expand'), 'click', function(){
73
+ tree.expandAll();
74
+ });
75
+
76
+ MediabrowserInstance.setTree(tree);
77
+ tree.addListener('click', MediabrowserInstance.selectFolder.bind(MediabrowserInstance));
78
+ tree.expandPath('<?php echo $this->getTreeCurrentPath() ?>','', function(success, node) {
79
+ MediabrowserInstance.selectFolder(node);
80
+ });
81
+ });
82
+ </script>
app/design/adminhtml/default/default/template/cms/page/edit/form/renderer/content.phtml ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 $_element = $this->getElement() ?>
28
+ <?php if (!$_element->getNoDisplay()): ?>
29
+ <tr>
30
+ <td colspan="3" class="value"><?php echo trim($_element->getElementHtml()) ?></td>
31
+ </tr>
32
+ <?php endif; ?>
app/design/adminhtml/default/default/template/coming.phtml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <h3><?php echo Mage::helper('adminhtml')->__('Sorry, this feature is coming soon...') ?></h3>
29
+ </div>
30
+ <p><?php echo Mage::helper('adminhtml')->__('We\'re in our typing table, coding away more features for Magento. Thank you for your patience.') ?></p>
app/design/adminhtml/default/default/template/compiler/process.phtml ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <table cellspacing="0">
29
+ <tr>
30
+ <td style="width:50%;"><h3 class="icon-head head-compilation"><?php echo $this->getHeader() ?></h3></td>
31
+ <td class="form-buttons">
32
+ <?php if ($this->canRunCompilation()): ?>
33
+ <?php echo $this->getChangeStatusButtonHtml() ?>
34
+ <?php echo $this->getRunButtonHtml() ?>
35
+ <?php endif;?>
36
+ </td>
37
+ </tr>
38
+ </table>
39
+ </div>
40
+ <div class="entry-edit">
41
+ <form name="compilation_form" id="compilation_form" method="post" action="<?php echo $this->getRunFormAction(); ?>">
42
+ <?php echo $this->getBlockHtml('formkey')?>
43
+ <?php if (!$this->canRunCompilation()): ?>
44
+ <div id="messages"><?php echo $this->getMessagesBlock()->getGroupedHtml() ?></div>
45
+ <?php endif;?>
46
+
47
+ <div class="entry-edit-head">
48
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('compiler')->__('Compilation State') ?></h4>
49
+ </div>
50
+ <fieldset>
51
+ <legend><?php echo Mage::helper('compiler')->__('Compilation State') ?></legend>
52
+ <table cellspacing="0" class="form-list" style="width:100%">
53
+ <tr>
54
+ <td class="label"><label ><?php echo Mage::helper('compiler')->__('Compiler Status')?></label></td>
55
+ <td class="value">
56
+ <strong><?php echo $this->getCompilerStatus()?></strong>
57
+ </td>
58
+ </tr>
59
+ <tr>
60
+ <td class="label"><label ><?php echo Mage::helper('compiler')->__('Compilation State')?></label></td>
61
+ <td class="value">
62
+ <strong><?php echo $this->getCompilerState()?></strong>
63
+ </td>
64
+ </tr>
65
+ <tr>
66
+ <td class="label"><label ><?php echo Mage::helper('compiler')->__('Collected Files Count')?></label></td>
67
+ <td class="value">
68
+ <strong><?php echo $this->getCollectedFilesCount() ?></strong>
69
+ </td>
70
+ </tr>
71
+ <tr>
72
+ <td class="label"><label ><?php echo Mage::helper('compiler')->__('Compiled Scopes Count')?></label></td>
73
+ <td class="value">
74
+ <strong><?php echo $this->getCompiledFilesCount() ?></strong>
75
+ </td>
76
+ </tr>
77
+ <tr>
78
+ <td class="label"><label ><?php echo Mage::helper('compiler')->__('Scopes Compilation Settings')?></label></td>
79
+ <td class="value">
80
+ <?php foreach($this->getCompilationList() as $_frontName => $_classNames) : ?>
81
+ <p>
82
+ <label><strong><?php echo $_frontName ?></strong></label><br />
83
+ <textarea style="width:70%" readonly="readonly" cols="5" rows="3"><?php echo $this->arrToSting($_classNames)?></textarea>
84
+ </p>
85
+ <?php endforeach; ?>
86
+ </td>
87
+ </tr>
88
+ </table>
89
+ </fieldset>
90
+ </form>
91
+ </div>
92
+ <script type="text/javascript">
93
+ compilationForm = new varienForm('compilation_form');
94
+ </script>
app/design/adminhtml/default/default/template/connect/extension/custom/authors.phtml ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ var id = 0;
29
+ var authorTemplate =
30
+ '<tr>'+
31
+ '<td style="margin-bottom:5px;">'+
32
+ '<input class="input-text required-entry" style="width:160px;" name="authors[name][]" id="authors_name_{{id}}" value="{{name}}"/>'+
33
+ '</td>'+
34
+ '<td style="margin-bottom:5px;">'+
35
+ '<input class="input-text required-entry" style="width:140px;" name="authors[user][]" id="authors_user_{{id}}" value="{{user}}"/>'+
36
+ '</td>'+
37
+ '<td style="margin-bottom:5px;">'+
38
+ '<input class="input-text required-entry validate-email" style="width:160px;" name="authors[email][]" id="authors_email_{{id}}" value="{{email}}"/>'+
39
+ '</td>'+
40
+ '<td style="margin-bottom:5px;">'+
41
+ '<?php echo $this->jsQuoteEscape($this->getRemoveRowButtonHtml('tr')) ?>'+
42
+ '</td>'+
43
+ '</tr>';
44
+
45
+ function addAuthor(data)
46
+ {
47
+ if (data == undefined) {
48
+ data = {};
49
+ }
50
+ data.id = id++;
51
+
52
+ var template = new Template(authorTemplate, /(^|.|\r|\n)({{(\w+)}})/);
53
+ Element.insert($('authors_container'), {bottom: template.evaluate(data)});
54
+ }
55
+ </script>
56
+
57
+ <div class="entry-edit">
58
+ <?php echo $this->getFormHtml() ?>
59
+ <div class="entry-edit-head">
60
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__("Authors") ?></h4>
61
+ </div>
62
+ <fieldset id="authors_fieldset" class="grid">
63
+ <legend><?php echo $this->__("Authors") ?></legend>
64
+ <table class="data" cellspacing="0">
65
+ <thead>
66
+ <tr class="headings">
67
+ <th><?php echo $this->__("Name") ?> <span class="required">*</span></th>
68
+ <th><?php echo $this->__("User") ?> <span class="required">*</span></th>
69
+ <th><?php echo $this->__("Email") ?> <span class="required">*</span></th>
70
+ <th><?php echo $this->__("Remove") ?></th>
71
+ </tr>
72
+ </thead>
73
+ <tbody id="authors_container">
74
+ <script type="text/javascript">
75
+ <?php if (count($this->getAuthors())): ?>
76
+ <?php foreach ($this->getAuthors() as $author): ?>
77
+ addAuthor(<?php echo $author ?>);
78
+ <?php endforeach ?>
79
+ <?php else: ?>
80
+ addAuthor();
81
+ <?php endif;?>
82
+ </script>
83
+ </tbody>
84
+ <tfoot>
85
+ <tr>
86
+ <td class="a-right" colspan="4"><?php echo $this->getAddAuthorButtonHtml() ?></td>
87
+ </tr>
88
+ </tfoot>
89
+ </table>
90
+ </fieldset>
91
+ </div>
app/design/adminhtml/default/default/template/connect/extension/custom/contents.phtml ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
29
+ <?php echo $this->getFormHtml() ?>
30
+
31
+ <div class="entry-edit-head">
32
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__("Contents") ?></h4>
33
+ </div>
34
+ <fieldset id="contents_fieldset" class="grid">
35
+ <legend><?php echo $this->__("Contents") ?></legend>
36
+ <table class="data" cellspacing="0">
37
+ <thead>
38
+ <tr class="headings">
39
+ <th><?php echo $this->__("Target") ?></th>
40
+ <th><?php echo $this->__("Path") ?></th>
41
+ <th><?php echo $this->__("Type") ?></th>
42
+ <th><?php echo $this->__("Include") ?></th>
43
+ <th><?php echo $this->__("Ignore") ?></th>
44
+ <th><?php echo $this->__("Action") ?></th>
45
+ </tr>
46
+ <tr id="contents_template" style="display:none">
47
+ <?php function showContentsTemplate($self, $_i=0) { ?>
48
+ <td style="margin-bottom:5px;">
49
+ <select name="contents[target][]" style="width:170px">
50
+ <optgroup label="Magento">
51
+ <?php foreach ($self->getMageTargets() as $_value=>$_label): ?>
52
+ <option value="<?php echo $_value ?>" <?php echo $self->getSelected('contents/target/'.$_i, $_value) ?>><?php echo $_label ?></option>
53
+ <?php endforeach ?>
54
+ </optgroup>
55
+ </select>
56
+ </td><td style="margin-bottom:5px;">
57
+ <input class="input-text" style="width:150px" name="contents[path][]" value="<?php echo $self->getValue('contents/path/'.$_i) ?>"/>
58
+ </td><td style="margin-bottom:5px;">
59
+ <select name="contents[type][]" style="width:100px">
60
+ <option value="file" <?php echo $self->getSelected('contents/type/'.$_i, 'file') ?>><?php echo Mage::helper('adminhtml')->__("File") ?></option>
61
+ <option value="dir" <?php echo $self->getSelected('contents/type/'.$_i, 'dir') ?>><?php echo Mage::helper('adminhtml')->__("Recursive Dir") ?></option>
62
+ </select>
63
+ </td><td style="margin-bottom:5px;">
64
+ <input class="input-text" style="width:100px" name="contents[include][]" value="<?php echo $self->getValue('contents/include/'.$_i) ?>"/>
65
+ </td><td style="margin-bottom:5px;">
66
+ <input class="input-text" style="width:100px" name="contents[ignore][]" value="<?php echo $self->getValue('contents/ignore/'.$_i) ?>"/>
67
+ </td><td style="margin-bottom:5px;">
68
+ <?php echo $self->getRemoveRowButtonHtml('tr') ?>
69
+ </td>
70
+ <?php } ?>
71
+ <?php showContentsTemplate($this) ?>
72
+ </tr>
73
+ </thead>
74
+ <tbody id="contents_container">
75
+ <?php if ($this->getData('contents/target')): ?>
76
+ <?php foreach ($this->getData('contents/target') as $_i=>$_dbField): ?>
77
+ <?php if (0===$_i) continue; ?>
78
+ <tr>
79
+ <?php showContentsTemplate($this, $_i) ?>
80
+ </tr>
81
+ <?php endforeach ?>
82
+ <?php endif ?>
83
+ </tbody>
84
+ <tfoot>
85
+ <tr>
86
+ <td class="a-right" colspan="6"><?php echo $this->getAddRowButtonHtml('contents_container', 'contents_template', $this->__('Add Contents Path')) ?></td>
87
+ </tr>
88
+ </tfoot>
89
+ </table>
90
+ </fieldset>
91
+ </div>
app/design/adminhtml/default/default/template/connect/extension/custom/depends.phtml ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
28
+ <?php echo $this->getFormHtml() ?>
29
+
30
+ <div class="entry-edit-head">
31
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__("Packages") ?></h4>
32
+ </div>
33
+ <fieldset id="depends_packages_fieldset" class="grid">
34
+ <legend><?php echo $this->__("Packages") ?></legend>
35
+ <table class="data" cellspacing="0">
36
+ <thead>
37
+ <tr class="headings">
38
+ <th><?php echo $this->__("Package") ?></th>
39
+ <th><?php echo $this->__("Channel") ?></th>
40
+ <th><?php echo $this->__("Min") ?></th>
41
+ <th><?php echo $this->__("Max") ?></th>
42
+ <th><?php echo $this->__("Files") ?></th>
43
+ <th><?php echo $this->__("Action") ?></th>
44
+ </tr>
45
+ <tr id="depends_packages_template" style="display:none">
46
+ <?php function showDependsPackageTemplate($self, $_i=0) {
47
+ $filesClass = "files";
48
+ ?>
49
+
50
+
51
+ <td style="margin-bottom:5px;">
52
+ <input class="input-text" style="width:200px;" name="depends[package][name][]" value="<?php echo $self->getValue('depends/package/name/'.$_i) ?>"/>
53
+ </td><td style="margin-bottom:5px;">
54
+ <input class="input-text" style="width:200px;" name="depends[package][channel][]" value="<?php echo $self->getValue('depends/package/channel/'.$_i) ?>"/>
55
+ </td><td style="margin-bottom:5px;">
56
+ <input class="input-text" style="width:50px;" name="depends[package][min][]" value="<?php echo $self->getValue('depends/package/min/'.$_i) ?>"/>
57
+ </td><td style="margin-bottom:5px;">
58
+ <input class="input-text" style="width:50px;" name="depends[package][max][]" value="<?php echo $self->getValue('depends/package/max/'.$_i) ?>"/>
59
+ </td><td style="margin-bottom:5px;">
60
+ <textarea class="<?php echo $filesClass ?>" style="width:300px;display:none" name="depends[package][files][]"><?php echo $self->getValue('depends/package/files/'.$_i)?> </textarea>
61
+ <?php echo $self->getAddFileDepsRowButtonHtml("tr", $filesClass) ?>
62
+ </td><td style="margin-bottom:5px;">
63
+ <?php echo $self->getRemoveRowButtonHtml('tr') ?>
64
+ </td>
65
+ <?php } ?>
66
+ <?php showDependsPackageTemplate($this) ?>
67
+ </tr>
68
+ </thead>
69
+ <tbody id="depends_packages_container">
70
+ <?php if ($this->getData('depends/package/name')): ?>
71
+ <?php foreach ($this->getData('depends/package/name') as $_i=>$_dbField): ?>
72
+ <?php if (0===$_i) continue; ?>
73
+ <tr>
74
+ <?php showDependsPackageTemplate($this, $_i) ?>
75
+ </tr>
76
+ <?php endforeach ?>
77
+ <?php endif ?>
78
+ </tbody>
79
+ <tfoot>
80
+ <tr>
81
+ <td class="a-right" colspan="8"><?php echo $this->getAddRowButtonHtml('depends_packages_container', 'depends_packages_template', $this->__('Add Package dependency')) ?></td>
82
+ </tr>
83
+ </tfoot>
84
+ </table>
85
+ </fieldset>
86
+
87
+ <div class="entry-edit-head">
88
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__("Extensions") ?></h4>
89
+ </div>
90
+ <fieldset id="depends_extensions_fieldset" class="grid">
91
+ <legend><?php echo $this->__("Extensions") ?></legend>
92
+ <table class="data" cellspacing="0">
93
+ <thead>
94
+ <tr class="headings">
95
+ <th><?php echo $this->__("Extension") ?></th>
96
+ <th><?php echo $this->__("Min") ?></th>
97
+ <th><?php echo $this->__("Max") ?></th>
98
+ <th><?php echo $this->__("Action") ?></th>
99
+ </tr>
100
+ <tr id="depends_extensions_template" style="display:none">
101
+ <?php function showDependsExtensionsTemplate($self, $_i=0) { ?>
102
+ <td style="margin-bottom:5px;">
103
+ <select name="depends[extension][name][]" style="width:100px">
104
+ <?php foreach ($self->getExtensions() as $_value=>$_label): ?>
105
+ <option value="<?php echo $_value ?>" <?php echo $self->getSelected('depends/extension/name/'.$_i, $_value) ?>><?php echo $_label ?></option>
106
+ <?php endforeach ?>
107
+ </select>
108
+ </td><td style="margin-bottom:5px;">
109
+ <input class="input-text" style="width:50px;" name="depends[extension][min][]" value="<?php echo $self->getValue('depends/extension/min/'.$_i) ?>"/>
110
+ </td><td style="margin-bottom:5px;">
111
+ <input class="input-text" style="width:50px;" name="depends[extension][max][]" value="<?php echo $self->getValue('depends/extension/max/'.$_i) ?>"/>
112
+ </td><td style="margin-bottom:5px;">
113
+ <?php echo $self->getRemoveRowButtonHtml('tr') ?>
114
+ </td>
115
+ <?php } ?>
116
+ <?php showDependsExtensionsTemplate($this) ?>
117
+ </tr>
118
+ </thead>
119
+ <tbody id="depends_extensions_container">
120
+ <?php if ($this->getData('depends/extension/name')): ?>
121
+ <?php foreach ($this->getData('depends/extension/name') as $_i=>$_dbField): ?>
122
+ <?php if (0===$_i) continue; ?>
123
+ <tr>
124
+ <?php showDependsExtensionsTemplate($this, $_i) ?>
125
+ </tr>
126
+ <?php endforeach ?>
127
+ <?php endif ?>
128
+ </tbody>
129
+ <tfoot>
130
+ <tr>
131
+ <td class="a-right" colspan="7"><?php echo $this->getAddRowButtonHtml('depends_extensions_container', 'depends_extensions_template', $this->__('Add PHP Extension dependency')) ?></td>
132
+ </tr>
133
+ </tfoot>
134
+ </table>
135
+ </fieldset>
136
+
137
+ </div>
app/design/adminhtml/default/default/template/connect/extension/custom/load.phtml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <ul class="messages">
29
+ <li class="notice-msg">
30
+ <ul>
31
+ <li><?php echo Mage::helper('catalog')->__("Please be careful as once you click on the row it will load package data form the selected file and all unsaved form data will be lost.") ?></li>
32
+ </ul>
33
+ </li>
34
+ </ul>
35
+ <?php echo $this->getPackageGridHtml() ?>
app/design/adminhtml/default/default/template/connect/extension/custom/package.phtml ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
29
+ function addRow(container, template)
30
+ {
31
+ Element.insert($(container), {bottom: '<tr>' + $(template).innerHTML + '</tr>'});
32
+ }
33
+
34
+ function removeRow(button, selector)
35
+ {
36
+ Element.remove($(button).up(selector));
37
+ }
38
+
39
+ function showHideFiles(button, selector, filesClass)
40
+ {
41
+ $(button).up(selector).select('[class="'+filesClass+'"]').map(Element.toggle);
42
+ }
43
+
44
+
45
+ function loadPackage()
46
+ {
47
+ var package = prompt('Please enter package name');
48
+ if (!package) return false;
49
+ var url = '<?php echo $this->getUrl('*/*/load') ?>';
50
+ location.href = url+(url.indexOf('?')==-1 ? '?':'&')+'id='+package;
51
+ }
52
+
53
+ function saveAsPackage()
54
+ {
55
+ _defaultPackageName = '';
56
+ if ($('_packagefile_name')) {
57
+ _defaultPackageName = $('_packagefile_name').getValue();
58
+ } else if ($('_packagename')) {
59
+ _defaultPackageName = $('_packagename').getValue();
60
+ }
61
+ var package = prompt('Please enter package file name', _defaultPackageName);
62
+ if (!package) return false;
63
+ if ($('_packagefile_name')) {
64
+ $('_packagefile_name').value = package;
65
+ }
66
+ return editForm.submit();
67
+ }
68
+
69
+ function createPackage()
70
+ {
71
+ $('_create').value = 1;
72
+ editForm.submit();
73
+ }
74
+
75
+ function resetPackage()
76
+ {
77
+ location.href = '<?php echo $this->getUrl('*/*/reset') ?>';
78
+ }
79
+ </script>
80
+
81
+ <style type="text/css">
82
+ .table-editable { border:solid 1px #CCC; background:#FAFAFA; padding:5px; margin-bottom:5px; }
83
+ .table-editable th { border-bottom:solid 1px #CCC; text-align:center; }
84
+ .table-editable th, .table-editable td { padding:1px 3px; vertical-align:middle; }
85
+ .table-editable select { height:19px; }
86
+ </style>
87
+
88
+ <div class="entry-edit">
89
+ <input type="hidden" id="_create" name="_create" />
90
+ <?php echo $this->getFormHtml() ?>
91
+ </div>
app/design/adminhtml/default/default/template/connect/extension/custom/release.phtml ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
28
+ <?php echo $this->getFormHtml() ?>
29
+ </div>
app/design/adminhtml/default/default/template/currencysymbol/grid.phtml ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @var $this Mage_Currencysymbol_Block_Adminhtml_System_Currencysymbol
30
+ */
31
+ ?>
32
+ <div class="content-header">
33
+ <table cellspacing="0">
34
+ <tr>
35
+ <td style="width:50%;"><h3 class="icon-head head-system-currency"><?php echo $this->getHeader() ?></h3></td>
36
+ <td class="form-buttons">
37
+ <?php
38
+ echo $this->getSaveButtonHtml();
39
+ ?>
40
+ </td>
41
+ </tr>
42
+ </table>
43
+ </div>
44
+
45
+ <?php $this->getCurrencySymbolsData();?>
46
+
47
+ <form id="currency_symbols_form" action="<?php echo $this->getFormActionUrl() ?>" method="post">
48
+ <input name="form_key" type="hidden" value="<?php echo $this->getFormKey() ?>" />
49
+
50
+ <div class="entry-edit">
51
+ <div class="fieldset fieldset-wide">
52
+ <div class="grid">
53
+ <div class="hor-scroll">
54
+ <table cellspacing="0" class="data table-cat-img-sizes">
55
+ <colgroup>
56
+ <col width="15%"/>
57
+ <col />
58
+ </colgroup>
59
+ <thead>
60
+ <tr class="headings">
61
+ <th><span class="nobr"><span class="not-sort"><?php echo $this->__('Currency'); ?></span></span></th>
62
+ <th><span class="nobr"><span class="not-sort"><?php echo $this->__('Symbol'); ?><span class="required"><em>*</em></span></span></span></th>
63
+ </tr>
64
+ </thead>
65
+ <tbody>
66
+ <?php foreach($this->getCurrencySymbolsData() as $code => $data): ?>
67
+ <tr>
68
+ <td class="label">
69
+ <label for="custom_currency_symbol<?php echo $code; ?>"><?php echo $code; ?> (<?php echo $data['displayName']; ?>)</label>
70
+ </td>
71
+ <td class="value">
72
+ <input id="custom_currency_symbol<?php echo $code; ?>" class=" required-entry input-text" type="text" value="<?php echo Mage::helper('core')->quoteEscape($data['displaySymbol']); ?>"<?php echo $data['inherited'] ? ' disabled="disabled"' : '';?> name="custom_currency_symbol[<?php echo $code; ?>]">
73
+ &nbsp; <input id="custom_currency_symbol_inherit<?php echo $code; ?>" class="checkbox config-inherit" type="checkbox" onclick="toggleUseDefault(<?php echo '\'' . $code . '\',\'' . Mage::helper('core')->quoteEscape($data['parentSymbol'], true) . '\''; ?>)"<?php echo $data['inherited'] ? ' checked="checked"' : ''; ?> value="1" name="inherit_custom_currency_symbol[<?php echo $code; ?>]">
74
+ <label class="inherit" title="" for="custom_currency_symbol_inherit<?php echo $code; ?>"><?php echo $this->getInheritText(); ?></label>
75
+ </td>
76
+ </tr>
77
+ <?php endforeach; ?>
78
+ </tbody>
79
+ </table>
80
+ </div>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </form>
85
+ <script type="text/javascript">
86
+ var currencySymbolsForm = new varienForm('currency_symbols_form');
87
+
88
+ function toggleUseDefault(code, value)
89
+ {
90
+ checkbox = $('custom_currency_symbol_inherit'+code);
91
+ input = $('custom_currency_symbol'+code);
92
+ if (checkbox.checked) {
93
+ input.value = value;
94
+ input.disabled = true;
95
+ } else {
96
+ input.disabled = false;
97
+ }
98
+ }
99
+ </script>
100
+
app/design/adminhtml/default/default/template/customer/edit/js.phtml ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <script type="text/javascript">
28
+ function saveAndContinueEdit(urlTemplate) {
29
+ var template = new Template(urlTemplate, /(^|.|\r|\n)({{(\w+)}})/);
30
+ var url = template.evaluate({tab_id:customer_info_tabsJsTabs.activeTab.id});
31
+ editForm.submit(url);
32
+ }
33
+ </script>
app/design/adminhtml/default/default/template/customer/edit/tab/account/form/renderer/group.phtml ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ $_element = $this->getElement();
29
+ $_note = $_element->getNote();
30
+ $_trId = $_element->getHtmlContainerId();
31
+ $_class = $_element->getFieldsetHtmlClass();
32
+ ?>
33
+ <?php if (!$_element->getNoDisplay()): ?>
34
+ <tr<?php if ($_trId): ?> id="<?php echo $_trId; ?>"<?php endif; ?>>
35
+ <?php if ($_element->getType() == 'hidden'): ?>
36
+ <td colspan="2" class="hidden"><?php echo trim($_element->getElementHtml()); ?></td>
37
+ <?php else: ?>
38
+ <td class="label<?php echo $_class ? " {$_class}-label" : ''; ?>"><?php echo trim($_element->getLabelHtml()); ?></td>
39
+ <td class="<?php echo $_element->hasValueClass() ? $_element->getValueClass() : 'value'; ?><?php echo $_class ? " {$_class}-value" : ''; ?>">
40
+ <?php echo trim($_element->getElementHtml()); ?>
41
+ <?php if ($this->getDisableAutoGroupChangeAttribute()): ?>
42
+ <br/>
43
+ <input id="<?php echo $this->escapeHtml($this->getDisableAutoGroupChangeCheckboxElementId()); ?>" name="<?php echo $this->escapeHtml($this->getDisableAutoGroupChangeCheckboxElementName()); ?>" type="checkbox"<?php if ($this->getDisableAutoGroupChangeCheckboxState() == 'checked') :?> checked="checked"<?php endif; ?> value="1"/>
44
+ <label for="<?php echo $this->escapeHtml($this->getDisableAutoGroupChangeCheckboxElementId()); ?>"><?php echo $this->escapeHtml($this->getDisableAutoGroupChangeCheckboxLabel()); ?></label>
45
+ <?php endif; ?>
46
+ <?php if ($_note): ?>
47
+ <p class="note<?php echo $_class ? " {$_class}-note" : ''; ?>" id="note_<?php echo $_element->getId(); ?>"><span><?php echo $_note; ?></span></p>
48
+ <?php endif ?>
49
+ </td>
50
+ <?php endif; ?>
51
+ </tr>
52
+ <?php endif; ?>
app/design/adminhtml/default/default/template/customer/edit/tab/view/grid/item.phtml ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Adminhtml_Block_Customer_Edit_Tab_View_Grid_Renderer_Item */ ?>
28
+ <?php
29
+ $product = $this->getProduct();
30
+ $options = $this->getOptionList();
31
+ ?>
32
+
33
+ <?php if (!$options): ?>
34
+ <?php echo $this->escapeHtml($product->getName())?>
35
+ <?php else: ?>
36
+ <div class="bundle-product-options">
37
+ <strong><?php echo $this->escapeHtml($product->getName())?></strong>
38
+ <dl>
39
+ <?php foreach ($options as $option) : ?>
40
+ <dt><?php echo $this->escapeHtml($option['label']) ?></dt>
41
+ <?php $formatedOptionValue = $this->getFormattedOptionValue($option) ?>
42
+ <dd><?php echo $formatedOptionValue['value'] ?></dd>
43
+ <?php endforeach; ?>
44
+ </dl>
45
+ </div>
46
+ <?php endif; ?>
app/design/adminhtml/default/default/template/customer/online.phtml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="content-header">
28
+ <table cellspacing="0">
29
+ <tr>
30
+ <td><h3 class="icon-head head-online-visitors"><?php echo Mage::helper('customer')->__('Online Customers') ?></h3></td>
31
+ </tr>
32
+ </table>
33
+ </div>
34
+ <?php echo $this->getChildHtml('grid') ?>
app/design/adminhtml/default/default/template/customer/sales/order/create/address/form/renderer/vat.phtml ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ $_element = $this->getElement();
29
+ $_note = $_element->getNote();
30
+ $_trId = $_element->getHtmlContainerId();
31
+ $_class = $_element->getFieldsetHtmlClass();
32
+ $_validateButton = $this->getValidateButton();
33
+ ?>
34
+ <?php if (!$_element->getNoDisplay()): ?>
35
+ <tr<?php if($_trId): ?> id="<?php echo $_trId; ?>"<?php endif; ?>>
36
+ <?php if ($_element->getType()=='hidden'): ?>
37
+ <td colspan="2" class="hidden"><?php echo trim($_element->getElementHtml()); ?></td>
38
+ <?php else: ?>
39
+ <td class="label<?php echo $_class ? " {$_class}-label" : ''?>"><?php echo trim($_element->getLabelHtml()); ?></td>
40
+ <td class="<?php echo $_element->hasValueClass() ? $_element->getValueClass() : 'value'; ?><?php echo $_class ? " {$_class}-value" : ''; ?>">
41
+ <?php echo trim($_element->getElementHtml()); ?>
42
+ <?php if ($_note): ?>
43
+ <p class="note<?php echo $_class ? " {$_class}-note" : ''; ?>" id="note_<?php echo $_element->getId(); ?>"><span><?php echo $_note; ?></span></p>
44
+ <?php endif; ?>
45
+ <div class="validate-vat">
46
+ <?php echo $_validateButton->toHtml(); ?>
47
+ </div>
48
+ </td>
49
+ <?php endif; ?>
50
+
51
+ </tr>
52
+ <?php endif; ?>
app/design/adminhtml/default/default/template/customer/system/config/validatevat.phtml ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * @see Mage_Adminhtml_Block_Customer_System_Config_Validatevat
30
+ */
31
+ ?>
32
+ <script type="text/javascript">
33
+ //<![CDATA[
34
+ function validateVat() {
35
+ var elem = $('<?php echo $this->getHtmlId() ?>');
36
+
37
+ params = {
38
+ country: $('general_store_information_merchant_country').value,
39
+ vat: $('general_store_information_merchant_vat_number').value
40
+ };
41
+
42
+ new Ajax.Request('<?php echo $this->getAjaxUrl() ?>', {
43
+ parameters: params,
44
+ onSuccess: function(response) {
45
+ result = '<?php echo $this->__('VAT Number is Invalid') ?>';
46
+ try {
47
+ response = response.responseText;
48
+ if (response == 1) {
49
+ result = '<?php echo $this->__('VAT Number is Valid') ?>';
50
+ elem.removeClassName('fail').addClassName('success')
51
+ } else {
52
+ elem.removeClassName('success').addClassName('fail')
53
+ }
54
+ } catch (e) {
55
+ elem.removeClassName('success').addClassName('fail')
56
+ }
57
+ $('validation_result').update(result);
58
+ }
59
+ });
60
+ }
61
+ //]]>
62
+ </script>
63
+ <button onclick="javascript:validateVat(); return false;" class="scalable" type="button" id="<?php echo $this->getHtmlId() ?>">
64
+ <span id="validation_result"><?php echo $this->escapeHtml($this->getButtonLabel()) ?></span>
65
+ </button>
app/design/adminhtml/default/default/template/customer/tab/addresses.phtml ADDED
@@ -0,0 +1,635 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <!-- Addresses list -->
28
+ <table cellspacing="0" class="form-edit">
29
+ <tr>
30
+ <td class="address-list">
31
+ <div class="entry-edit-head">
32
+ <h4 class="icon-head head-customer-address-list"><?php echo Mage::helper('customer')->__('Customer Addresses') ?></h4>
33
+ </div>
34
+ <div class="sub-btn-set"><?php echo $this->getAddNewButtonHtml() ?></div>
35
+ <ul id="address_list">
36
+ <?php $_iterator = 0; ?>
37
+ <?php if(count($addressCollection)): ?>
38
+ <?php foreach ($addressCollection as $_address): ?>
39
+ <li id="address_item_<?php echo $_address->getId() ?>">
40
+ <?php if (!$this->isReadonly()): ?>
41
+ <a href="#" class="btn-remove-address">
42
+ <img src="<?php echo $this->getSkinUrl('images/cancel_icon.gif') ?>" alt="Remove address" id="delete_button<?php echo ++$_iterator ?>" />
43
+ </a>
44
+ <a href="#" id="select_button_<?php echo $_address->getId() ?>" class="select_button btn-edit-address">
45
+ <img src="<?php echo $this->getSkinUrl('images/edit_icon.gif') ?>" alt="Edit address"/>
46
+ </a>
47
+ <?php endif;?>
48
+ <address>
49
+ <?php echo $_address->format('html') ?>
50
+ </address>
51
+ <div class="address-type">
52
+ <span class="address-type-line">
53
+ <input type="radio" <?php if ($this->isReadonly()):?> disabled="disabled"<?php endif;?> value="<?php echo $_address->getId() ?>" id="address_item_billing<?php echo $_address->getId() ?>" name="account[default_billing]" title="<?php echo Mage::helper('customer')->__('Set as Default Billing Address') ?>"<?php if($_address->getId()==$customer->getDefaultBilling()): ?> checked="checked"<?php endif; ?>/>
54
+ &nbsp;<label for="address_item_billing<?php echo $_address->getId() ?>"><?php echo Mage::helper('customer')->__('Default Billing Address') ?></label>
55
+ </span>
56
+ <span class="address-type-line">
57
+ <input type="radio" <?php if ($this->isReadonly()):?> disabled="disabled"<?php endif;?> value="<?php echo $_address->getId() ?>" id="address_item_shipping<?php echo $_address->getId() ?>" name="account[default_shipping]" title="<?php echo Mage::helper('customer')->__('Set as Default Shipping Address') ?>"<?php if($_address->getId()==$customer->getDefaultShipping()): ?> checked="checked"<?php endif; ?>/>
58
+ &nbsp;<label for="address_item_shipping<?php echo $_address->getId() ?>"><?php echo Mage::helper('customer')->__('Default Shipping Address') ?></label>
59
+ </span>
60
+ </div>
61
+ </li>
62
+ <?php endforeach; ?>
63
+ <?php endif; ?>
64
+ </ul>
65
+ </td>
66
+ <td>
67
+ <!-- Template for adding address item to list -->
68
+ <?php $_templatePrefix = $this->getTemplatePrefix() ?>
69
+ <div id="address_item_template" class="no-display template">
70
+ <?php if (!$this->isReadonly()): ?>
71
+ <a href="#" class="btn-remove-address">
72
+ <img src="<?php echo $this->getSkinUrl('images/cancel_icon.gif') ?>" alt="Remove address" id="delete_button<?php echo ++$_iterator ?>" />
73
+ </a>
74
+ <a href="#" id="select_button_" class="select_button btn-edit-address">
75
+ <img src="<?php echo $this->getSkinUrl('images/edit_icon.gif') ?>" alt="Edit address"/>
76
+ </a>
77
+ <?php endif;?>
78
+ <address><?php echo Mage::helper('customer')->__('New Customer Address') ?></address>
79
+ <div class="address-type">
80
+ <span class="address-type-line">
81
+ <input <?php if ($this->isReadonly()):?> disabled="disabled"<?php endif;?> type="radio" value="<?php echo $_templatePrefix ?>" id="address_item_billing<?php echo $_templatePrefix ?>" name="account[default_billing]" title="<?php echo Mage::helper('customer')->__('Set as Default Billing Address') ?>"/>
82
+ &nbsp;<label for="address_item_billing<?php echo $_templatePrefix ?>"><?php echo Mage::helper('customer')->__('Default Billing Address') ?></label>
83
+ </span>
84
+ <span class="address-type-line">
85
+ <input <?php if ($this->isReadonly()):?> disabled="disabled"<?php endif;?> type="radio" value="<?php echo $_templatePrefix ?>" id="address_item_shipping<?php echo $_templatePrefix ?>" name="account[default_shipping]" title="<?php echo Mage::helper('customer')->__('Set as Default Shipping Address') ?>"/>
86
+ &nbsp;<label for="address_item_shipping<?php echo $_templatePrefix ?>"><?php echo Mage::helper('customer')->__('Default Shipping Address') ?></label>
87
+ </span>
88
+ </div>
89
+ </div>
90
+
91
+ <!-- Address form template -->
92
+ <div id="address_form_template" class="no-display template">
93
+ <?php
94
+ // Set form template elements prefix
95
+ $this->getForm()->setHtmlIdPrefix($_templatePrefix)
96
+ ->setFieldNameSuffix('address['.$_templatePrefix.']');
97
+ ?>
98
+ <?php echo $this->getForm()->getHtml() ?>
99
+ <?php echo $this->getCancelButtonHtml() ?>
100
+ </div>
101
+ <!-- -->
102
+
103
+ <!-- Addresses forms -->
104
+ <div class="entry-edit" id="address_form_container">
105
+ <?php if(count($addressCollection)): ?>
106
+ <?php foreach ($addressCollection as $_address): ?>
107
+ <div id="form_address_item_<?php echo $_address->getId() ?>" style="display:none">
108
+ <?php
109
+ $this->getForm()->addValues($_address->getData())
110
+ ->setHtmlIdPrefix("_item{$_address->getId()}")
111
+ ->setFieldNameSuffix('address['.$_address->getId().']');
112
+ $this->addValuesToNamePrefixElement($_address->getPrefix())
113
+ ->addValuesToNameSuffixElement($_address->getSuffix());
114
+ ?>
115
+ <?php echo $this->getForm()->getHtml() ?>
116
+ <input type="hidden" name="address[<?php echo $_address->getId() ?>][_deleted]" id="deleted_address_item_<?php echo $_address->getId() ?>" />
117
+ </div>
118
+ <?php endforeach; ?>
119
+ <?php else: ?>
120
+ <div id="no_address_message"><?php echo Mage::helper('customer')->__('This customer has no saved addresses.') ?></div>
121
+ <?php endif; ?>
122
+ </div>
123
+
124
+ <script type="text/javascript">
125
+ //<![CDATA[
126
+ var deleteButtonId = <?php echo $_iterator ?>;
127
+
128
+ var addressesModel = Class.create();
129
+ addressesModel.prototype = {
130
+ initialize : function() {
131
+ this.activeItem = null;
132
+ this.itemTemplate = $('address_item_template');
133
+ this.formTemplate = $('address_form_template');
134
+ this.itemContainer= $('address_list');
135
+ this.formContainer= $('address_form_container');
136
+ this.baseItemId = 'new_item';
137
+
138
+ this.defaultCountries = <?php echo $this->getDefaultCountriesJson(); ?>;
139
+ this.itemContentTemplate = new Template('<?php echo $this->helper('customer/address')->getFormat('js_template')?>');
140
+
141
+ this.onNewAddressClick = this.addNewAddress.bindAsEventListener(this);
142
+ this.onItemMouseOver = this.itemMouseOver.bindAsEventListener(this);
143
+ this.onItemMouseOut = this.itemMouseOut.bindAsEventListener(this);
144
+ this.onItemMouseClick = this.itemMouseClick.bindAsEventListener(this);
145
+ this.onItemFormFieldChange = this.syncFormData.bindAsEventListener(this);
146
+
147
+ this.loader = new varienLoader(true);
148
+ this.regionsUrl = '<?php echo $this->getRegionsUrl() ?>';
149
+ this.requiredStateForCountries = <?php echo $this->helper('directory')->getCountriesWithStatesRequired(true) ?>;
150
+ this.showAllRegions = <?php echo (string)$this->helper('directory')->getShowNonRequiredState() ? 1 : 0; ?>;
151
+
152
+ this.reloadItemList(1);
153
+
154
+ for(var i=0,n=this.itemList.length; i<n; i++){
155
+ if(this.itemList[i].id){
156
+ this.addItemObservers(this.itemList[i]);
157
+ this.initItem(this.itemList[i]);
158
+ }
159
+ }
160
+ if($('add_new_address_button')){
161
+ Event.observe('add_new_address_button', 'click', this.onNewAddressClick)
162
+ }
163
+
164
+ this.setActiveItem(this.itemList[0]);
165
+ this.setAddressAsDefault();
166
+ this.bindCountryRegionRelation();
167
+ },
168
+
169
+ reloadItemList : function(initial){
170
+ this.itemList = $$('#address_list li');
171
+ if( initial ) {
172
+ this.itemCount = this.itemList.length;
173
+ }
174
+ if(!this.itemList.length){
175
+ if($('no_address_message')){
176
+ $('no_address_message').show();
177
+ }
178
+ else {
179
+ this.formContainer.innerHTML+= '<div id="no_address_message"><?php echo addslashes(Mage::helper('customer')->__('This customer has no saved addresses.')) ?></div>'
180
+ }
181
+ }
182
+ },
183
+
184
+ initItem : function(item){
185
+ if(item && $('form_'+item.id)){
186
+ item.formBlock = $('form_'+item.id);
187
+ Element.hide($('form_'+item.id));
188
+ $('form_'+item.id).statusBar = item;
189
+ $('form_'+item.id).addressItem = item;
190
+
191
+ // set Zip optional/required
192
+ var countryElement = $('_item' + item.id.replace(/address_item_/, '') + 'country_id');
193
+ varienGlobalEvents.fireEvent("address_country_changed", countryElement);
194
+ }
195
+ },
196
+
197
+ addItemObservers : function(item){
198
+ if(item.id){
199
+ Event.observe(item, 'mouseover', this.onItemMouseOver);
200
+ Event.observe(item, 'mouseout', this.onItemMouseOut);
201
+ Event.observe(item, 'click', this.onItemMouseClick);
202
+ }
203
+ },
204
+
205
+ addNewAddress : function(event){
206
+ if(this.canCreateNewAddress){
207
+ this.itemCount++;
208
+ if($('no_address_message')){
209
+ $('no_address_message').hide();
210
+ }
211
+ // preventing duplication of ids for fields and blocks
212
+ while ($$("div[id='form_address_item_" + this.itemCount + "']").length) {
213
+ this.itemCount++;
214
+ }
215
+ // create new form elements
216
+ Element.insert(this.formContainer, {bottom:
217
+ '<div id="' + 'form_' + this.baseItemId + this.itemCount + '">'
218
+ + this.prepareTemplate(this.formTemplate.innerHTML)
219
+ + '</div>'
220
+ });
221
+
222
+ var newForm = $('form_' + this.baseItemId + this.itemCount);
223
+
224
+ $('_item'+this.itemCount+'firstname').value = $('_accountfirstname').value;
225
+ $('_item'+this.itemCount+'lastname').value = $('_accountlastname').value;
226
+
227
+ if ($('_accountwebsite_id').value !== '' && undefined !== this.defaultCountries[$('_accountwebsite_id').value]) {
228
+ $('_item'+this.itemCount+'country_id').value = this.defaultCountries[$('_accountwebsite_id').value];
229
+ }
230
+
231
+ Element.hide(newForm);
232
+ var template = '<li id="' + this.baseItemId+this.itemCount + '">';
233
+ deleteButtonId ++;
234
+ template += this.prepareTemplate(this.itemTemplate.innerHTML).replace('delete_button', 'delete_button'+ deleteButtonId);
235
+ template += '</li>';
236
+ Element.insert(this.itemContainer, {bottom: template});
237
+ var newItem = $(this.baseItemId+this.itemCount);
238
+ newItem.isNewAddress = true;
239
+ newItem.formBlock = newForm;
240
+
241
+
242
+ newForm.statusBar = newItem;
243
+ newForm.addressItem = newItem;
244
+
245
+ this.addItemObservers(newItem);
246
+ this.setActiveItem(newItem);
247
+ this.bindCountryRegionRelation(newForm.id);
248
+
249
+ if( $('_item'+this.itemCount+'firstname').value ) this.syncFormData($('_item'+this.itemCount+'firstname'));
250
+ if( $('_item'+this.itemCount+'lastname').value ) this.syncFormData($('_item'+this.itemCount+'lastname'));
251
+ }
252
+ this.reloadItemList();
253
+ //Event.stop(event);
254
+ },
255
+
256
+ prepareTemplate : function(template){
257
+ return template
258
+ .replace(/<?php echo $_templatePrefix ?>/g, '_item'+this.itemCount)
259
+ .replace(/_counted="undefined"/g, '')
260
+ .replace(/"select_button_"/g, 'select_button_' + this.itemCount)
261
+ ;
262
+ },
263
+
264
+ canCreateNewAddress : function(){
265
+ return true;
266
+ },
267
+
268
+ itemMouseOver : function(event){
269
+ var element = Event.findElement(event, 'li');
270
+ Element.addClassName(element, 'over');
271
+ },
272
+
273
+ itemMouseOut : function(event){
274
+ var element = Event.findElement(event, 'li');
275
+ Element.removeClassName(element, 'over');
276
+ },
277
+
278
+ itemMouseClick : function(event){
279
+ if (!Event) {
280
+ return;
281
+ }
282
+ var element = Event.findElement(event, 'li'); // find top item
283
+ var elem = Event.element(event); // exact element clicked
284
+
285
+ if ( ((elem.tagName.toUpperCase() == 'A') && elem.id.match(/^delete_button([0-9]*?)$/)) || ((elem.tagName.toUpperCase() == 'IMG') && elem.id.match(/^delete_button([0-9]*?)$/)) ) {
286
+ this.deleteAddress(element);
287
+ Event.stop(event);
288
+ }
289
+ else if(elem.tagName.toUpperCase() == 'INPUT') {
290
+ this.setAddressAsDefault(element);
291
+ }
292
+ else {
293
+ this.setActiveItem(element);
294
+ }
295
+ },
296
+
297
+ setAddressAsDefault : function(){
298
+ for(var i=0; i<this.itemList.length;i++){
299
+ if(this.itemList[i].id){
300
+ var inputs = $(this.itemList[i].id).getElementsBySelector('input');
301
+ var isActive = false;
302
+ for(var j in inputs){
303
+ if(inputs[j].type=='radio' && inputs[j].checked && this.itemList.length > 1){
304
+ isActive = true;
305
+ }
306
+ }
307
+ this.toggleDeleteButton(this.itemList[i], !isActive);
308
+ }
309
+ }
310
+ },
311
+
312
+ toggleDeleteButton : function(item, flag){
313
+ if(flag){
314
+ $(item).select('.btn-remove-address').each(Element.show);
315
+ $(item.formBlock).getElementsBySelector('.delete-address').each(Element.show);
316
+ } else {
317
+ $(item).select('.btn-remove-address').each(Element.hide);
318
+ $(item.formBlock).getElementsBySelector('.delete-address').each(Element.hide);
319
+ }
320
+ },
321
+
322
+ setActiveItem : function(item){
323
+ if(this.activeItem){
324
+ Element.removeClassName(this.activeItem, 'on');
325
+ if($('form_'+this.activeItem.id)){
326
+ Element.hide($('form_'+this.activeItem.id));
327
+ }
328
+ }
329
+ Element.addClassName(item, 'on');
330
+
331
+ if(item && $('form_'+item.id)){
332
+ $('form_'+item.id).changeRelation = item;
333
+ $('form_'+item.id).addressItem = item;
334
+ Element.show($('form_'+item.id));
335
+ //new Effect.Appear($('form_'+item.id), {duration : 0.3 });
336
+ //$('form_'+item.id).focus();
337
+ this.addFieldChangeObserver($('form_'+item.id));
338
+ var regionIdElement = $('_item' + item.id.replace(/address_item_/, '') + 'region_id');
339
+ var regionElement = $('_item' + item.id.replace(/address_item_/, '') + 'region');
340
+ this.countryEl = $('_item' + item.id.replace(/address_item_/, '') + 'country_id');
341
+ if (regionIdElement && regionElement) {
342
+ var actualId = regionElement.id;
343
+ if (('select' == regionIdElement.tagName.toLowerCase()) && regionIdElement) {
344
+ actualId = regionIdElement.id;
345
+ }
346
+ this._checkRegionRequired([regionIdElement, regionElement], actualId);
347
+ }
348
+ }
349
+
350
+ this.activeItem = item;
351
+ },
352
+
353
+ getFormContainerFields : function(container){
354
+ var fields = $$( '#' + container.id + ' input','#' + container.id + ' select','#' + container.id + ' textarea');
355
+ return fields;
356
+ },
357
+
358
+ addFieldChangeObserver : function(container){
359
+ var fields = this.getFormContainerFields(container);
360
+ for (var i = 0; i < fields.length; i++) {
361
+ Event.observe(fields[i], 'change', this.onItemFormFieldChange);
362
+ }
363
+
364
+ },
365
+
366
+ syncFormData : function(evt){
367
+ var container = false;
368
+
369
+ if(!evt.addClassName) {
370
+ var elm = Event.element(evt);
371
+ } else {
372
+ var elm = evt;
373
+ }
374
+
375
+ elm = $(elm);
376
+ while(elm.tagName.toUpperCase() != 'BODY') {
377
+ if(elm.addressItem){
378
+ container = elm;
379
+ }
380
+ elm = $(elm.parentNode);
381
+ }
382
+
383
+ if(container){
384
+ var data = {};
385
+ var fields = this.getFormContainerFields(container);
386
+ for(var i=0; i < fields.size(); i++){
387
+ if(fields[i].id){
388
+ var id = fields[i].id.replace(/^(_item)?[0-9]+/, '');
389
+ var id = id.replace(/^(id)?[0-9]+/, '');
390
+ var value = fields[i].getValue();
391
+ var tagName = fields[i].tagName.toLowerCase();
392
+ if (tagName == 'select') {
393
+ if (fields[i].multiple) {
394
+ var values = $([]);
395
+ var l = fields[i].options.length;
396
+ for (j=0; j<l; j++) {
397
+ var o = fields[i].options[j];
398
+ if (o.selected === true) {
399
+ values[values.length] = o.text.escapeHTML();
400
+ }
401
+ }
402
+ data[id] = values.join(', ');
403
+ } else {
404
+ data[id] = fields[i].options[fields[i].selectedIndex].text.escapeHTML();
405
+ }
406
+ } else if (value !== null) {
407
+ data[id] = value.escapeHTML();
408
+ }
409
+ }
410
+ }
411
+
412
+ // Set name of state to 'region' if list of states are in 'region_id' selectbox
413
+ if (!data['region'] && data['region_id']) {
414
+ data['region'] = data['region_id'];
415
+ delete data['region_id'];
416
+ }
417
+
418
+ // Set data to html
419
+ var itemContainer = container.addressItem.getElementsBySelector('address');
420
+ if(itemContainer[0]){
421
+ var html = this.itemContentTemplate.evaluate(data);
422
+ html = html.replace(new RegExp('(<br\\s*/?>\\s*){2,}','img'),'<br/>');
423
+ html = html.replace(new RegExp('<br\\s*/?>(\\s*,){1,}\\s*<br\\s*/?>','ig'),'<br/>');
424
+ html = html.replace(new RegExp('<br\\s*/?>(\\s*,){1,}(.*)<br\\s*/?>','ig'),'<br/>$2<br/>');
425
+ html = html.replace(new RegExp('<br\\s*/?>(.*?)(,\\s*){1,}<br\\s*/?>','ig'),'<br/>$1<br/>');
426
+ html = html.replace(new RegExp('<br\\s*/?>(.*?)(,\\s*){2,}(.*?)<br\\s*/?>','ig'),'<br/>$1, $3<br/>');
427
+ html = html.replace(new RegExp('t:\\s*<br\\s*/?>','ig'),'');
428
+ html = html.replace(new RegExp('f:\\s*<br\\s*/?>','ig'),'');
429
+ html = html.replace(new RegExp('vat:\\s*$','ig'),'');
430
+ itemContainer[0].innerHTML = html;
431
+ }
432
+ }
433
+ },
434
+
435
+ deleteAddress : function(item){
436
+ if(confirm('<?php echo Mage::helper('customer')->__('Are you sure you want to delete this address?') ?>')){
437
+ if (!item.isNewAddress && $('deleted_'+item.id)){
438
+ $('deleted_'+item.id).value = 1;
439
+ if (item.formBlock){
440
+ item.formBlock.addClassName('ignore-validation');
441
+ }
442
+ }
443
+ if (this.activeItem == item && item != this.itemList[0]) this.setActiveItem(this.itemList[0]);
444
+ if (item == this.itemList[0] && (this.itemList[1])) this.setActiveItem(this.itemList[1]);
445
+
446
+ this.formContainer.removeChild(item.formBlock);
447
+ this.itemContainer.removeChild(item);
448
+ this.reloadItemList();
449
+ this.setAddressAsDefault();
450
+ }
451
+ },
452
+
453
+ cancelAdd : function(button){
454
+ if(confirm('<?php echo addslashes(Mage::helper('customer')->__('Are you sure you want to cancel adding of this address?')) ?>')){
455
+ var item = $(this.baseItemId + button.id.replace(new RegExp('[a-z_]*',''), ''));
456
+
457
+ if( item.isNewAddress){
458
+ if ( this.activeItem == item ) this.formContainer.removeChild(item.formBlock);
459
+ }
460
+ if ( this.activeItem == item && item != this.itemList[0] ) this.setActiveItem(this.itemList[0]);
461
+ if ( item == this.itemList[0] && (this.itemList[1]) ) this.setActiveItem(this.itemList[1]);
462
+
463
+ this.itemContainer.removeChild(item);
464
+
465
+ this.reloadItemList();
466
+ this.setAddressAsDefault();
467
+ }
468
+ },
469
+
470
+ bindCountryRegionRelation : function(parentId){
471
+ //alert('OK');
472
+ if(parentId){
473
+ var countryElements = $(parentId).getElementsByClassName('countries');
474
+ }
475
+ else{
476
+ var countryElements = $$('.countries');
477
+ }
478
+
479
+ for(var i=0;i<=countryElements.length;i++){
480
+ if(countryElements[i]){
481
+ if(!countryElements[i].bindRegions || !countryElements[i].parentBindId || countryElements[i].parentBindId!=parentId){
482
+ //if(!countryElements[i].bindRegions || !countryElements[i].parentBindId){
483
+ Event.observe(countryElements[i], 'change', this.reloadRegionField.bind(this));
484
+
485
+ countryElements[i].bindRegions = true;
486
+ countryElements[i].parentBindId = parentId;
487
+ }
488
+ }
489
+ }
490
+ },
491
+
492
+ reloadRegionField : function(event){
493
+ var countryElement = Event.element(event);
494
+ if(countryElement.id){
495
+ var regionElement = $(countryElement.id.replace(/country_id/, 'region'));
496
+ if(regionElement){
497
+ this.regionElement = regionElement;
498
+ this.countryEl = countryElement;
499
+ if (countryElement.value) {
500
+ var url = this.regionsUrl + 'parent/' + countryElement.value;
501
+ this.loader.load(url, {}, this.refreshRegionField.bind(this));
502
+ } else {
503
+ // Set empty text field in region
504
+ this.refreshRegionField('[]');
505
+ }
506
+ }
507
+ // set Zip optional/required
508
+ varienGlobalEvents.fireEvent("address_country_changed", countryElement);
509
+ }
510
+ },
511
+
512
+ // serverResponse is either string with server response, or object to force some paricular data setting
513
+ refreshRegionField : function(serverResponse){
514
+ if (!serverResponse)
515
+ return;
516
+ var data = eval('(' + serverResponse + ')');
517
+
518
+ var row = Element.previous(this.regionElement.parentNode,0);
519
+ var reqLabel = Element.select(row, '.required');
520
+
521
+ // Set regions and refresh controls
522
+ // We use a pair of 'region' and 'region_id' to properly submit data:
523
+ // manually entered text goes in 'region' and selected option id goes in 'region_id'
524
+ var regionHtmlName = this.regionElement.name;
525
+ var regionIdHtmlName = regionHtmlName.replace(/region/, 'region_id');
526
+ var regionHtmlId = this.regionElement.id;
527
+ var regionIdHtmlId = regionHtmlId.replace(/region/, 'region_id');
528
+ var newInputId = null; // id of imput that was added to a page - filled below
529
+
530
+ if (data.length) {
531
+ // Create visible selectbox 'region_id' and hidden 'region'
532
+ var html = '<select name="' + regionIdHtmlName + '" id="' + regionIdHtmlId + '" class="required-entry select" title="' + this.regionElement.title + '">';
533
+ html+= '<option value=""></option>';
534
+ for (var i in data){
535
+ if(data[i].label) {
536
+ html+= '<option value="'+data[i].value+'"';
537
+ if(this.regionElement.value && (this.regionElement.value == data[i].value || this.regionElement.value == data[i].label)){
538
+ html+= ' selected="selected"';
539
+ }
540
+ html+='>'+data[i].label+'</option>';
541
+ }
542
+ }
543
+ html += '</select>';
544
+
545
+ html += '<input type="hidden" name="' + regionHtmlName + '" id="' + regionHtmlId + '"/>';
546
+
547
+ if (reqLabel) {
548
+ reqLabel.each(function(item){Element.show(item)});
549
+ }
550
+
551
+ newInputId = regionIdHtmlId;
552
+ } else {
553
+ // Create visible text input 'region' and hidden 'region_id'
554
+ var html = '<input type="text" name="' + regionHtmlName + '" id="' + regionHtmlId + '" class="input-text" title="' + this.regionElement.title + '" />';
555
+ html += '<input type="hidden" name="' + regionIdHtmlName + '" id="' + regionIdHtmlId + '"/>';
556
+
557
+ if (reqLabel) {
558
+ reqLabel.each(function(item){Element.hide(item)});
559
+ }
560
+
561
+ newInputId = regionHtmlId;
562
+ }
563
+
564
+ var parentNode = this.regionElement.parentNode;
565
+ parentNode.innerHTML = html;
566
+ this.regionElement = $(regionHtmlId);
567
+
568
+ // Updating in address info
569
+ var newInput = $(newInputId);
570
+ Event.observe(newInput, 'change', this.onItemFormFieldChange); // Restore observing to update address info
571
+ this.syncFormData(newInput); // Update address info now
572
+ var activeElementId = regionHtmlId;
573
+ if (('select' == $(regionIdHtmlId).tagName.toLowerCase()) && regionIdHtmlId) {
574
+ activeElementId = regionIdHtmlId;
575
+ }
576
+ this._checkRegionRequired([$(regionHtmlId), $(regionIdHtmlId)], activeElementId);
577
+ },
578
+
579
+ _checkRegionRequired: function(elements, activeElementId)
580
+ {
581
+ var label, wildCard;
582
+ var that = this;
583
+ var regionRequired = this.requiredStateForCountries.indexOf(this.countryEl.value) >= 0;
584
+
585
+ elements.each(function(currentElement) {
586
+ Validation.reset(currentElement);
587
+ label = $$('label[for="' + currentElement.id + '"]')[0];
588
+ if (label) {
589
+ wildCard = label.down('em') || label.down('span.required');
590
+ if (!that.showAllRegions) {
591
+ if (regionRequired) {
592
+ label.up('tr').show();
593
+ } else {
594
+ label.up('tr').hide();
595
+ }
596
+ }
597
+ }
598
+
599
+ if (label && wildCard) {
600
+ if (!regionRequired) {
601
+ wildCard.hide();
602
+ } else {
603
+ wildCard.show();
604
+ }
605
+ }
606
+
607
+ if (!regionRequired) {
608
+ if (currentElement.hasClassName('required-entry')) {
609
+ currentElement.removeClassName('required-entry');
610
+ }
611
+ if ('select' == currentElement.tagName.toLowerCase() &&
612
+ currentElement.hasClassName('validate-select')
613
+ ) {
614
+ currentElement.removeClassName('validate-select');
615
+ }
616
+ } else if (activeElementId == currentElement.id) {
617
+ if (!currentElement.hasClassName('required-entry')) {
618
+ currentElement.addClassName('required-entry');
619
+ }
620
+ if ('select' == currentElement.tagName.toLowerCase() &&
621
+ !currentElement.hasClassName('validate-select')
622
+ ) {
623
+ currentElement.addClassName('validate-select');
624
+ }
625
+ }
626
+ });
627
+ }
628
+ }
629
+
630
+ customerAddresses = new addressesModel();
631
+ //]]>
632
+ </script>
633
+ </td>
634
+ </tr>
635
+ </table>
app/design/adminhtml/default/default/template/customer/tab/cart.phtml ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Adminhtml_Block_Customer_Edit_Tab_Cart */ ?>
28
+ <?php if($this->getCartHeader()): ?>
29
+ <div class="content-header skip-header">
30
+ <table cellspacing="0">
31
+ <tr>
32
+ <td style="width:50%;"><h4><?php echo $this->getCartHeader(); ?></h4></td>
33
+ </tr>
34
+ </table>
35
+ </div>
36
+ <?php endif ?>
37
+ <?php echo $this->getGridParentHtml() ?>
38
+ <?php if ($this->canDisplayContainer()) : ?>
39
+ <?php
40
+ $listType = $this->getJsObjectName();
41
+ ?>
42
+ <script type="text/javascript">
43
+ <?php echo $this->getJsObjectName() ?>cartControl = {
44
+ reload: function (params) {
45
+ if (!params) {
46
+ params = {};
47
+ }
48
+ <?php echo $this->getJsObjectName() ?>.reloadParams = params;
49
+ <?php echo $this->getJsObjectName() ?>.reload();
50
+ <?php echo $this->getJsObjectName() ?>.reloadParams = {};
51
+ },
52
+
53
+ configureItem: function (itemId) {
54
+ productConfigure.setOnLoadIFrameCallback('<?php echo $listType ?>', this.cbOnLoadIframe.bind(this));
55
+ productConfigure.showItemConfiguration('<?php echo $listType ?>', itemId);
56
+ return false;
57
+ },
58
+
59
+ cbOnLoadIframe: function (response) {
60
+ if (!response.ok) {
61
+ return;
62
+ }
63
+ this.reload();
64
+ },
65
+
66
+ removeItem: function (itemId) {
67
+ if (!itemId) {
68
+ alert('<?php echo Mage::helper('core')->jsQuoteEscape(Mage::helper('customer')->__('No item specified.')) ?>');
69
+ return false;
70
+ }
71
+ if(!confirm('<?php echo Mage::helper('core')->jsQuoteEscape(Mage::helper('customer')->__('Are you sure that you want to remove this item?')) ?>')) {
72
+ return false;
73
+ }
74
+
75
+ this.reload({'delete':itemId});
76
+
77
+ return false;
78
+ }
79
+ };
80
+
81
+ <?php
82
+ $params = array(
83
+ 'customer_id' => $this->getCustomer()->getId(),
84
+ 'website_id' => $this->getWebsiteId()
85
+ );
86
+ ?>
87
+ productConfigure.addListType(
88
+ '<?php echo $listType ?>',
89
+ {
90
+ urlFetch: '<?php echo $this->getUrl('*/customer_cart_product_composite_cart/configure', $params) ?>',
91
+ urlConfirm: '<?php echo $this->getUrl('*/customer_cart_product_composite_cart/update', $params) ?>'
92
+ }
93
+ );
94
+ </script>
95
+ <?php endif ?>
96
+ <br />
app/design/adminhtml/default/default/template/customer/tab/newsletter.phtml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
28
+ <?php echo $this->getFormObject()->getHtml() ?>
29
+ </div>
30
+ <?php echo $this->getChildHtml('grid') ?>
app/design/adminhtml/default/default/template/customer/tab/view.phtml ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+ /**
29
+ * Template for block Mage_Adminhtml_Block_Customer_Edit_Tab_View
30
+ */
31
+ ?>
32
+ <?php
33
+ $lastLoginDateAdmin = $this->getLastLoginDate();
34
+ $lastLoginDateStore = $this->getStoreLastLoginDate();
35
+
36
+ $createDateAdmin = $this->getCreateDate();
37
+ $createDateStore = $this->getStoreCreateDate();
38
+ ?>
39
+ <div class="entry-edit">
40
+ <div class="entry-edit-head"><h4 class="icon-head head-customer-view"><?php echo Mage::helper('customer')->__('Personal Information') ?></h4></div>
41
+ <fieldset>
42
+ <table cellspacing="2" class="box-left">
43
+ <tr>
44
+ <td><strong><?php echo $this->__('Last Logged In:') ?></strong></td>
45
+ <td><?php echo $lastLoginDateAdmin ?> (<?php echo $this->getCurrentStatus() ?>)</td>
46
+ </tr>
47
+ <?php if ($lastLoginDateAdmin != $lastLoginDateStore): ?>
48
+ <tr>
49
+ <td><strong><?php echo $this->__('Last Logged In (%s):', $this->getStoreLastLoginDateTimezone()) ?></strong></td>
50
+ <td><?php echo $lastLoginDateStore ?> (<?php echo $this->getCurrentStatus() ?>)</td>
51
+ </tr>
52
+ <?php endif; ?>
53
+ <tr>
54
+ <td><strong><?php echo $this->__('Confirmed email:') ?></strong></td>
55
+ <td><?php echo $this->getIsConfirmedStatus() ?></td>
56
+ </tr>
57
+ <tr>
58
+ <td><strong><?php echo $this->__('Account Created on:') ?></strong></td>
59
+ <td><?php echo $createDateAdmin ?></td>
60
+ </tr>
61
+ <?php if ($createDateAdmin != $createDateStore): ?>
62
+ <tr>
63
+ <td><strong><?php echo $this->__('Account Created on (%s):', $this->getStoreCreateDateTimezone()) ?></strong></td>
64
+ <td><?php echo $createDateStore ?></td>
65
+ </tr>
66
+ <?php endif; ?>
67
+ <tr>
68
+ <td><strong><?php echo $this->__('Account Created in:') ?></strong></td>
69
+ <td><?php echo $this->getCreatedInStore() ?></td>
70
+ </tr>
71
+ <tr>
72
+ <td><strong><?php echo $this->__('Customer Group:') ?></strong></td>
73
+ <td><?php echo $this->getGroupName() ?></td>
74
+ </tr>
75
+ </table>
76
+ <address class="box-right">
77
+ <strong><?php echo $this->__('Default Billing Address') ?></strong><br/>
78
+ <?php echo $this->getBillingAddressHtml() ?>
79
+ </address>
80
+ </fieldset>
81
+ </div>
82
+ <?php echo $this->getChildHtml('', true, true); ?>
app/design/adminhtml/default/default/template/customer/tab/view/sales.phtml ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="entry-edit">
28
+ <div class="entry-edit-head"><h4 class="icon-head head-customer-sales-statistics"><?php echo Mage::helper('customer')->__('Sales Statistics') ?></h4></div>
29
+ <div class="grid">
30
+ <table cellspacing="0" class="data">
31
+ <thead>
32
+ <tr class="headings">
33
+ <th><?php echo Mage::helper('customer')->__('Website') ?></th>
34
+ <th><?php echo Mage::helper('customer')->__('Store') ?></th>
35
+ <th><?php echo Mage::helper('customer')->__('Store View') ?></th>
36
+ <th><?php echo Mage::helper('customer')->__('Lifetime Sales') ?></th>
37
+ <th><?php echo Mage::helper('customer')->__('Average Sale') ?></th>
38
+ </tr>
39
+ </thead>
40
+ <tfoot>
41
+ <tr>
42
+ <td colspan="3" class="label"><strong><big><?php echo Mage::helper('customer')->__('All Store Views') ?></big></strong></td>
43
+ <td class="emph"><strong><big><?php echo $this->formatCurrency($this->getTotals()->getBaseLifetime()) ?></big></strong></td>
44
+ <td class="emph"><strong><big><?php echo $this->formatCurrency($this->getTotals()->getAvgsale()) ?></big></strong></td>
45
+ </tr>
46
+ </tfoot>
47
+ <?php if ($this->getRows()): ?>
48
+ <tbody>
49
+ <?php $_i = 0; ?>
50
+ <?php foreach ($this->getRows() as $_websiteId => $_groups): ?>
51
+ <?php $_websiteRow = false; ?>
52
+ <?php foreach ($_groups as $_groupId => $_stores): ?>
53
+ <?php $_groupRow = false; ?>
54
+ <?php foreach ($_stores as $_row): ?>
55
+ <?php if ($_row->getStoreId() == 0): ?>
56
+ <td colspan="3" class="label"><?php echo $_row->getStoreName() ?></td>
57
+ <?php else: ?>
58
+ <tr<?php echo ($_i++ % 2 ? ' class="even"' : '') ?>>
59
+ <?php if (!$_websiteRow): ?>
60
+ <td rowspan="<?php echo $this->getWebsiteCount($_websiteId) ?>"><?php echo $_row->getWebsiteName() ?></td>
61
+ <?php $_websiteRow = true; ?>
62
+ <?php endif; ?>
63
+ <?php if (!$_groupRow): ?>
64
+ <td rowspan="<?php echo count($_stores) ?>"><?php echo $_row->getGroupName() ?></td>
65
+ <?php $_groupRow = true; ?>
66
+ <?php endif; ?>
67
+ <td class="label"><?php echo $_row->getStoreName() ?></td>
68
+ <?php endif; ?>
69
+ <td><?php echo $this->formatCurrency($_row->getLifetime(), $_row->getWebsiteId()) ?></td>
70
+ <td><?php echo $this->formatCurrency($_row->getAvgsale(), $_row->getWebsiteId()) ?></td>
71
+ </tr>
72
+ <?php endforeach; ?>
73
+ <?php endforeach; ?>
74
+ <?php endforeach; ?>
75
+ </tbody>
76
+ <?php else: ?>
77
+ <tbody>
78
+ <tr class="no-display"><td colspan="5"></td></tr>
79
+ </tbody>
80
+ <?php endif; ?>
81
+ </table>
82
+ </div>
83
+ </div>
84
+ <div class="clear"></div>
85
+ <br/>
app/design/adminhtml/default/default/template/customer/tab/wishlist.phtml ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 echo $this->getGridParentHtml() ?>
28
+ <?php if($this->canDisplayContainer()): ?>
29
+ <script type="text/javascript">
30
+ //<!--
31
+ wishlistControl = {
32
+ reload: function (urlParams) {
33
+ if (!urlParams) {
34
+ urlParams = '';
35
+ }
36
+ var url = <?php echo $this->getJsObjectName() ?>.url + '?ajax=true' + urlParams;
37
+ new Ajax.Updater(
38
+ <?php echo $this->getJsObjectName() ?>.containerId,
39
+ url,
40
+ {
41
+ parameters: {form_key: FORM_KEY},
42
+ onComplete: <?php echo $this->getJsObjectName() ?>.initGrid.bind(<?php echo $this->getJsObjectName() ?>),
43
+ evalScripts:true
44
+ }
45
+ );
46
+ },
47
+
48
+ configureItem: function (itemId) {
49
+ productConfigure.setOnLoadIFrameCallback('wishlist', this.cbOnLoadIframe.bind(this));
50
+ productConfigure.showItemConfiguration('wishlist', itemId);
51
+ return false;
52
+ },
53
+
54
+ cbOnLoadIframe: function (response) {
55
+ if (!response.ok) {
56
+ return;
57
+ }
58
+ this.reload();
59
+ },
60
+
61
+ removeItem: function (itemId) {
62
+ if(!confirm('<?php echo Mage::helper('customer')->__('Are you sure that you want to remove this item?') ?>')) {
63
+ return false;
64
+ }
65
+ this.reload('&delete=' + itemId);
66
+ return false;
67
+ }
68
+ }
69
+
70
+ productConfigure.addListType(
71
+ 'wishlist',
72
+ {
73
+ urlFetch: '<?php echo $this->getUrl('*/customer_wishlist_product_composite_wishlist/configure') ?>',
74
+ urlConfirm: '<?php echo $this->getUrl('*/customer_wishlist_product_composite_wishlist/update') ?>'
75
+ }
76
+ );
77
+ //-->
78
+ </script>
79
+ <?php endif ?>
app/design/adminhtml/default/default/template/dashboard/graph.phtml ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div style="width:587px;margin:20px;position:relative;margin-left:-294px;left:50%">
29
+ <div style="position:absolute;right:1px;top:0px;left: expression(parentNode.offsetWidth - offsetWidth - 1 + 'px');">
30
+ <div style="padding:5px;height:15px;width:15px;background-color:#F4F4F4" id="dashboard_<?php echo $this->getHtmlId() ?>_cal_div"><img src="<?php echo Mage::getDesign()->getSkinUrl('images/grid-cal.gif') ?>" onclick="toggleCal('<?php echo $this->getHtmlId() ?>')" /></div>
31
+ <div style="padding:5px;display:none;width:200px;" id="dashboard_<?php echo $this->getHtmlId() ?>_range_div" class="switcher">
32
+ <?php echo $this->__('Select Range') ?>:
33
+ <select name="period" id="order_<?php echo $this->getHtmlId() ?>_period" onchange="changePeriod(this)">
34
+ <?php foreach ($this->helper('adminhtml/dashboard_data')->getDatePeriods() as $_value=>$_label): ?>
35
+ <?php if(in_array($_value, array('custom'))) continue; ?>
36
+ <option value="<?php echo $_value ?>" <?php if($this->getRequest()->getParam('period')==$_value): ?> selected<?php endif; ?>><?php echo $_label ?></option>
37
+ <?php endforeach; ?>
38
+ </select>
39
+ <img src="<?php echo Mage::getDesign()->getSkinUrl('images/dashboard-close.gif') ?>" onclick="toggleCal('<?php echo $this->getHtmlId() ?>')" />
40
+ </div>
41
+ </div>
42
+ <?php if($this->getCount()): ?>
43
+ <img src="<?php echo $this->getChartUrl() ?>" />
44
+ <?php else: ?>
45
+ <div align="center" style="width:587px;height:300px;"><?php echo $this->__('No Data Found') ?></div>
46
+ <?php endif; ?>
47
+ </div>
48
+ <?php */ ?>
49
+ <div style="margin:20px;">
50
+ <p class="switcher a-right" style="padding:5px 10px;"><?php echo $this->__('Select Range') ?>:
51
+ <select name="period" id="order_<?php echo $this->getHtmlId() ?>_period" onchange="changeDiagramsPeriod(this);">
52
+ <?php foreach ($this->helper('adminhtml/dashboard_data')->getDatePeriods() as $_value=>$_label): ?>
53
+ <?php if(in_array($_value, array('custom'))) continue; ?>
54
+ <option value="<?php echo $_value ?>" <?php if($this->getRequest()->getParam('period')==$_value): ?> selected="selected"<?php endif; ?>><?php echo $_label ?></option>
55
+ <?php endforeach; ?>
56
+ </select></p><br/>
57
+ <?php
58
+ $_containerStyle = "width:{$this->getWidth()}px;height:{$this->getHeight()}px; margin:0 auto;";
59
+ ?>
60
+ <?php if($this->getCount()): ?>
61
+ <p style="<?php echo $_containerStyle?>"><img src="<?php echo $this->getChartUrl(false) ?>" alt="chart" title="chart" /></p>
62
+ <?php else: ?>
63
+ <p class="a-center" style="<?php echo $_containerStyle?>"><?php echo $this->__('No Data Found') ?></p>
64
+ <?php endif; ?>
65
+ </div>
app/design/adminhtml/default/default/template/dashboard/graph/disabled.phtml ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div class="box" style="margin:20px;">
28
+ <p class="a-center">
29
+ <?php echo $this->helper('adminhtml')->__('Chart is disabled. If you want to enable chart, click <a href="%s">here</a>.', $this->getConfigUrl())?>
30
+ </p>
31
+ </div>
app/design/adminhtml/default/default/template/dashboard/grid.phtml ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+
29
+ $numColumns = sizeof($this->getColumns());
30
+ ?>
31
+ <?php if($this->getCollection()): ?>
32
+ <div class="grid np">
33
+ <table cellspacing="0" style="border:0;" id="<?php echo $this->getId() ?>_table">
34
+ <?php foreach ($this->getColumns() as $_column): ?>
35
+ <col <?php echo $_column->getHtmlProperty() ?> />
36
+ <?php endforeach; ?>
37
+ <?php if ($this->getHeadersVisibility() || $this->getFilterVisibility()): ?>
38
+ <thead>
39
+ <?php if ($this->getHeadersVisibility()): ?>
40
+ <tr class="headings">
41
+ <?php foreach ($this->getColumns() as $_column): ?>
42
+ <th <?php echo $_column->getHeaderHtmlProperty() ?>><span class="nobr"><?php echo $_column->getHeaderHtml() ?></span></th>
43
+ <?php endforeach; ?>
44
+ </tr>
45
+ <?php endif; ?>
46
+ </thead>
47
+ <?php endif; ?>
48
+ <tbody>
49
+ <?php if (($this->getCollection()->getSize()>0) && (!$this->getIsCollapsed())): ?>
50
+ <?php foreach ($this->getCollection() as $_index=>$_item): ?>
51
+ <tr title="<?php echo $this->getRowId($_item) ?>">
52
+ <?php $i=0;foreach ($this->getColumns() as $_column): ?>
53
+ <td class="<?php echo $_column->getCssProperty() ?> <?php echo ++$i==$numColumns?'last':'' ?>"><?php echo (($_html = $_column->getRowField($_item)) != '' ? $_html : '&nbsp;') ?></td>
54
+ <?php endforeach; ?>
55
+ </tr>
56
+ <?php endforeach; ?>
57
+ <?php elseif ($this->getEmptyText()): ?>
58
+ <tr>
59
+ <td class="empty-text <?php echo $this->getEmptyTextClass() ?>" colspan="100"><?php echo $this->getEmptyText() ?></td>
60
+ </tr>
61
+ <?php endif; ?>
62
+ </tbody>
63
+ </table>
64
+ </div>
65
+ <?php if($this->canDisplayContainer()): ?>
66
+ <script type="text/javascript">
67
+ //<![CDATA[
68
+ <?php echo $this->getJsObjectName() ?> = new varienGrid('<?php echo $this->getId() ?>', '<?php echo $this->getGridUrl() ?>', '<?php echo $this->getVarNamePage() ?>', '<?php echo $this->getVarNameSort() ?>', '<?php echo $this->getVarNameDir() ?>', '<?php echo $this->getVarNameFilter() ?>');
69
+ <?php echo $this->getJsObjectName() ?>.useAjax = '<?php echo $this->getUseAjax() ?>';
70
+ <?php if($this->getRowClickCallback()): ?>
71
+ <?php echo $this->getJsObjectName() ?>.rowClickCallback = <?php echo $this->getRowClickCallback() ?>;
72
+ <?php endif; ?>
73
+ <?php if($this->getCheckboxCheckCallback()): ?>
74
+ <?php echo $this->getJsObjectName() ?>.checkboxCheckCallback = <?php echo $this->getCheckboxCheckCallback() ?>;
75
+ <?php endif; ?>
76
+ <?php if($this->getRowInitCallback()): ?>
77
+ <?php echo $this->getJsObjectName() ?>.initRowCallback = <?php echo $this->getRowInitCallback() ?>;
78
+ <?php echo $this->getJsObjectName() ?>.rows.each(function(row){<?php echo $this->getRowInitCallback() ?>(<?php echo $this->getJsObjectName() ?>, row)});
79
+ <?php endif; ?>
80
+ <?php if($this->getMassactionBlock()->isAvailable()): ?>
81
+ <?php echo $this->getMassactionBlock()->getJavaScript() ?>
82
+ <?php endif ?>
83
+ //]]>
84
+ </script>
85
+ <?php endif; ?>
86
+ <?php endif ?>
app/design/adminhtml/default/default/template/dashboard/index.phtml ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 if (is_array($this->getChild('diagrams')->getTabsIds())) : ?>
29
+ <script type="text/javascript">
30
+ //<![CDATA[
31
+ function changeDiagramsPeriod(periodObj) {
32
+ periodParam = periodObj.value ? 'period/' + periodObj.value + '/' : '';
33
+ <?php foreach ($this->getChild('diagrams')->getTabsIds() as $tabId): ?>
34
+ ajaxBlockParam = 'block/tab_<?php echo $tabId ?>/';
35
+ ajaxBlockUrl = '<?php echo $this->getUrl('*/*/ajaxBlock', array('_current' => true, 'block' => '', 'period' => '')) ?>' + ajaxBlockParam + periodParam;
36
+ new Ajax.Request(ajaxBlockUrl, {
37
+ parameters: {isAjax: 'true', form_key: FORM_KEY},
38
+ onSuccess: function(transport) {
39
+ tabContentElementId = '<?php echo $this->getChild('diagrams')->getId() ?>_<?php echo $tabId ?>_content';
40
+ try {
41
+ if (transport.responseText.isJSON()) {
42
+ var response = transport.responseText.evalJSON()
43
+ if (response.error) {
44
+ alert(response.message);
45
+ }
46
+ if(response.ajaxExpired && response.ajaxRedirect) {
47
+ setLocation(response.ajaxRedirect);
48
+ }
49
+ } else {
50
+ $(tabContentElementId).update(transport.responseText);
51
+ }
52
+ }
53
+ catch (e) {
54
+ $(tabContentElementId).update(transport.responseText);
55
+ }
56
+ }
57
+ });
58
+ <?php endforeach; ?>
59
+ ajaxBlockUrl = '<?php echo $this->getUrl('*/*/ajaxBlock', array('_current' => true, 'block' => 'totals', 'period' => '')) ?>' + periodParam;
60
+ new Ajax.Request(ajaxBlockUrl, {
61
+ parameters: {isAjax: 'true', form_key: FORM_KEY},
62
+ onSuccess: function(transport) {
63
+ tabContentElementId = 'dashboard_diagram_totals';
64
+ try {
65
+ if (transport.responseText.isJSON()) {
66
+ var response = transport.responseText.evalJSON()
67
+ if (response.error) {
68
+ alert(response.message);
69
+ }
70
+ if(response.ajaxExpired && response.ajaxRedirect) {
71
+ setLocation(response.ajaxRedirect);
72
+ }
73
+ } else {
74
+ $(tabContentElementId).replace(transport.responseText);
75
+ }
76
+ }
77
+ catch (e) {
78
+ $(tabContentElementId).replace(transport.responseText);
79
+ }
80
+ }
81
+ });
82
+ }
83
+
84
+ function toggleCal(id) {
85
+ $('dashboard_'+id+'_cal_div').toggle();
86
+ $('dashboard_'+id+'_range_div').toggle();
87
+ }
88
+ //]]>
89
+ </script>
90
+ <?php endif; ?>
91
+ <div class="content-header">
92
+ <table cellspacing="0">
93
+ <tr>
94
+ <td><h3 class="head-dashboard"><?php echo $this->__('Dashboard') ?></h3></td>
95
+ </tr>
96
+ </table>
97
+ </div>
98
+ <div class="dashboard-container">
99
+ <?php echo $this->getChildHtml('store_switcher') ?>
100
+ <table cellspacing="25" width="100%">
101
+ <tr>
102
+ <td><?php echo $this->getChildHtml('sales') ?>
103
+ <div class="entry-edit">
104
+ <div class="entry-edit-head"><h4><?php echo $this->__('Last 5 Orders') ?></h4></div>
105
+ <fieldset class="np"><?php echo $this->getChildHtml('lastOrders'); ?></fieldset>
106
+ </div>
107
+ <div class="entry-edit">
108
+ <div class="entry-edit-head"><h4><?php echo $this->__('Last 5 Search Terms') ?></h4></div>
109
+ <fieldset class="np"><?php echo $this->getChildHtml('lastSearches'); ?></fieldset>
110
+ </div>
111
+ <div class="entry-edit">
112
+ <div class="entry-edit-head"><h4><?php echo $this->__('Top 5 Search Terms') ?></h4></div>
113
+ <fieldset class="np"><?php echo $this->getChildHtml('topSearches'); ?></fieldset>
114
+ </div>
115
+ </td>
116
+ <td>
117
+ <div class="entry-edit" style="border:1px solid #ccc;">
118
+ <?php echo $this->getChildHtml('diagrams') ?>
119
+ <?php if (is_array($this->getChild('diagrams')->getTabsIds())) : ?>
120
+ <div id="diagram_tab_content"></div>
121
+ <?php endif; ?>
122
+ <div style="margin:20px;">
123
+ <?php echo $this->getChildHtml('totals') ?>
124
+ </div>
125
+ <div style="margin:20px;">
126
+ <?php echo $this->getChildHtml('grids') ?>
127
+ <div id="grid_tab_content"></div>
128
+ </div>
129
+ </div>
130
+ </td>
131
+ </tr>
132
+ </table>
133
+ </div>
app/design/adminhtml/default/default/template/dashboard/salebar.phtml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 if( sizeof($this->getTotals()) > 0 ): ?>
28
+ <?php foreach( $this->getTotals() as $_total ): ?>
29
+ <div class="entry-edit">
30
+ <div class="entry-edit-head"><h4><?php echo $_total['label'] ?></h4></div>
31
+ <fieldset class="a-center bold">
32
+ <span class="nowrap" style="font-size:18px;"><?php echo $_total['value'] ?><span style="font-size:14px; color:#686868;"><?php echo $_total['decimals'] ?></span></span>
33
+ </fieldset>
34
+ </div>
35
+ <?php endforeach; ?>
36
+ <?php endif; ?>
app/design/adminhtml/default/default/template/dashboard/searches.phtml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <div style="padding:5px;">
28
+ <?php if(count($this->getCollection()->getItems()) > 0): ?>
29
+ <?php foreach ($this->getCollection()->getItems() as $item): ?>
30
+ <span><?php echo $item->getQueryText() ?></span><br />
31
+ <?php endforeach; ?>
32
+ <?php else: ?>
33
+ <div class="a-center"><?php echo $this->__('No search keywords.') ?></div>
34
+ <?php endif; ?>
35
+ </div>
app/design/adminhtml/default/default/template/dashboard/store/switcher.phtml ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ <p class="switcher"><label for="store_switcher"><?php echo $this->__('View Statistics For:') ?></label>
28
+ <?php echo $this->getHintHtml() ?>
29
+ <select name="store_switcher" id="store_switcher" class="left-col-block" onchange="return switchStore(this);">
30
+ <option value=""><?php echo $this->__('All Websites') ?></option>
31
+ <?php foreach ($this->getWebsiteCollection() as $_website): ?>
32
+ <?php $showWebsite=false; ?>
33
+ <?php foreach ($this->getGroupCollection($_website) as $_group): ?>
34
+ <?php $showGroup=false; ?>
35
+ <?php foreach ($this->getStoreCollection($_group) as $_store): ?>
36
+ <?php if ($showWebsite == false): ?>
37
+ <?php $showWebsite = true; ?>
38
+ <option website="true" value="<?php echo $_website->getId() ?>"<?php if($this->getRequest()->getParam('website') == $_website->getId()): ?> selected="selected"<?php endif; ?>><?php echo $_website->getName() ?></option>
39
+ <?php endif; ?>
40
+ <?php if ($showGroup == false): ?>
41
+ <?php $showGroup = true; ?>
42
+ <!--optgroup label="&nbsp;&nbsp;&nbsp;<?php echo $_group->getName() ?>"-->
43
+ <option group="true" value="<?php echo $_group->getId() ?>"<?php if($this->getRequest()->getParam('group') == $_group->getId()): ?> selected="selected"<?php endif; ?>>&nbsp;&nbsp;&nbsp;<?php echo $_group->getName() ?></option>
44
+ <?php endif; ?>
45
+ <option value="<?php echo $_store->getId() ?>"<?php if($this->getStoreId() == $_store->getId()): ?> selected="selected"<?php endif; ?>>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?php echo $_store->getName() ?></option>
46
+ <?php endforeach; ?>
47
+ <?php if ($showGroup): ?>
48
+ <!--</optgroup>-->
49
+ <?php endif; ?>
50
+ <?php endforeach; ?>
51
+ <?php endforeach; ?>
52
+ </select>
53
+ </p>
54
+ <script type="text/javascript">
55
+ //<![CDATA[
56
+ function switchStore(obj){
57
+ if (obj.options[obj.selectedIndex].getAttribute('website') == 'true') {
58
+ var selectionType = 'website';
59
+ } else if (obj.options[obj.selectedIndex].getAttribute('group') == 'true') {
60
+ var selectionType = 'group';
61
+ } else {
62
+ var selectionType = 'store';
63
+ }
64
+ var storeParam = obj.value ? selectionType + '/' + obj.value + '/' : '';
65
+ if(obj.switchParams){
66
+ storeParam+= obj.switchParams;
67
+ }
68
+ if ($('diagram_tab_orders_content').style.display != 'none') {
69
+ var select = $('order_orders_period');
70
+ } else if ($('diagram_tab_amounts_content').style.display != 'none') {
71
+ var select = $('order_amounts_period');
72
+ }
73
+ var periodParam = select.value ? 'period/'+select.value + '/' : '';
74
+ setLocation('<?php echo $this->getSwitchUrl() ?>'+storeParam+periodParam);
75
+ }
76
+ //]]>
77
+ </script>
app/design/adminhtml/default/default/template/dashboard/totalbar.phtml ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 if( sizeof($this->getTotals()) > 0 ): ?>
28
+ <div class="box" id="dashboard_diagram_totals">
29
+ <div class="entry-edit">
30
+ <table cellspacing="0" width="100%">
31
+ <tr>
32
+ <?php foreach( $this->getTotals() as $_total ): ?>
33
+ <td class="a-center bold">
34
+ <span><?php echo $_total['label'] ?></span><br />
35
+ <span class="nowrap" style="font-size:18px; color:#EA7601;"><?php echo $_total['value'] ?><span style="font-size:14px; color:#DE8946;"><?php echo $_total['decimals'] ?></span></span>
36
+ </td>
37
+ <?php endforeach; ?>
38
+ </tr>
39
+ </table>
40
+ </div>
41
+ </div>
42
+ <?php endif; ?>
app/design/adminhtml/default/default/template/directory/js/optional_zip_countries.phtml ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ * JS block for including Countries with Optional Zip
31
+ *
32
+ * @see Mage_Adminhtml_Block_Template
33
+ */
34
+ ?>
35
+ <script type="text/javascript">
36
+ //<![CDATA[
37
+ optionalZipCountries = <?php echo $this->helper('directory')->getCountriesWithOptionalZip(true) ?>;
38
+
39
+ function onAddressCountryChanged (countryElement) {
40
+ var zipElementId = countryElement.id.replace(/country_id/, 'postcode');
41
+
42
+ // Ajax-request and normal content load compatibility
43
+ if ($(zipElementId) != undefined) {
44
+ setPostcodeOptional($(zipElementId), countryElement.value);
45
+ } else {
46
+ Event.observe(window, "load", function () {
47
+ setPostcodeOptional($(zipElementId), countryElement.value);
48
+ });
49
+ }
50
+ }
51
+
52
+ function setPostcodeOptional(zipElement, country) {
53
+ if (optionalZipCountries.indexOf(country) != -1) {
54
+ while (zipElement.hasClassName('required-entry')) {
55
+ zipElement.removeClassName('required-entry');
56
+ }
57
+ zipElement.up(1).down('label > span.required').hide();
58
+ } else {
59
+ zipElement.addClassName('required-entry');
60
+ zipElement.up(1).down('label > span.required').show();
61
+ }
62
+ }
63
+
64
+ varienGlobalEvents.attachEventHandler("address_country_changed", onAddressCountryChanged);
65
+ //]]>
66
+ </script>
app/design/adminhtml/default/default/template/downloadable/product/composite/fieldset/downloadable.phtml ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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 /* @var $this Mage_Downloadable_Block_Adminhtml_Catalog_Product_Composite_Fieldset_Downloadable */ ?>
28
+ <?php $_linksPurchasedSeparately = $this->getLinksPurchasedSeparately(); ?>
29
+ <?php $_skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck(); ?>
30
+ <?php if (($this->getProduct()->isSaleable() || $_skipSaleableCheck) && $this->hasLinks()):?>
31
+
32
+ <div id="catalog_product_composite_configure_fields_downloadable" class="<?php echo $this->getIsLastFieldset() ? 'last-fieldset' : '' ?>">
33
+ <h4><?php echo Mage::helper('catalog')->__('Downloadable Information') ?></h4>
34
+ <div class="product-options">
35
+ <dl>
36
+ <?php $_links = $this->getLinks(); ?>
37
+ <?php $_isRequired = $this->getLinkSelectionRequired(); ?>
38
+ <dt><label<?php if ($_isRequired) echo ' class="required"' ?>><?php if ($_isRequired) echo '<em>*</em>' ?><?php echo $this->getLinksTitle() ?></label></dt>
39
+ <dd class="last">
40
+ <ul id="downloadable-links-list" class="options-list">
41
+ <?php foreach ($_links as $_link): ?>
42
+ <li>
43
+ <?php if ($_linksPurchasedSeparately): ?>
44
+ <input type="checkbox" class="checkbox<?php if ($_isRequired):?> validate-one-required-by-name<?php endif; ?> product-downloadable-link" name="links[]" id="links_<?php echo $_link->getId() ?>" value="<?php echo $_link->getId(); ?>" <?php echo $this->getLinkCheckedValue($_link); ?> price="<?php echo $this->getCurrencyPrice($_link->getPrice()); ?>"/>
45
+ <?php endif; ?>
46
+ <span class="label">
47
+ <label for="links_<?php echo $_link->getId() ?>">
48
+ <?php echo $this->escapeHtml($_link->getTitle()) ?>
49
+ </label>
50
+ <?php if ($_link->getSampleFile() || $_link->getSampleUrl()): ?>
51
+ &nbsp;(<a href="<?php echo $this->getLinkSamlpeUrl($_link) ?>" <?php echo $this->getIsOpenInNewWindow()?'onclick="this.target=\'_blank\'"':''; ?>><?php echo Mage::helper('downloadable')->__('sample') ?></a>)
52
+ <?php endif; ?>
53
+ <?php if ($_linksPurchasedSeparately): ?>
54
+ <?php echo $this->getFormattedLinkPrice($_link); ?>
55
+ <?php endif; ?>
56
+ </span>
57
+ <?php if ($_isRequired): ?>
58
+ <script type="text/javascript">
59
+ //<![CDATA[
60
+ $('links_<?php echo $_link->getId() ?>').advaiceContainer = 'links-advice-container';
61
+ $('links_<?php echo $_link->getId() ?>').callbackFunction = 'validateDownloadableCallback';
62
+ //]]>
63
+ </script>
64
+ <?php endif; ?>
65
+ </li>
66
+ <?php endforeach; ?>
67
+ </ul>
68
+
69
+ <?php if ($_isRequired): ?>
70
+ <span id="links-advice-container"></span>
71
+ <?php endif;?>
72
+ </dd>
73
+ </dl>
74
+ </div>
75
+ </div>
76
+
77
+ <script type="text/javascript">
78
+ //<![CDATA[
79
+ validateDownloadableCallback = function (elmId, result) {
80
+ var container = $('downloadable-links-list');
81
+ if (result == 'failed') {
82
+ container.removeClassName('validation-passed');
83
+ container.addClassName('validation-failed');
84
+ } else {
85
+ container.removeClassName('validation-failed');
86
+ container.addClassName('validation-passed');
87
+ }
88
+ }
89
+ //]]>
90
+ </script>
91
+ <?php endif;?>
app/design/adminhtml/default/default/template/downloadable/product/edit/downloadable.phtml ADDED
@@ -0,0 +1,273 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
+ * @see Mage_Downloadable_Block_Adminhtml_Catalog_Product_Edit_Tab_Downloadable
31
+ */
32
+ ?>
33
+ <script type="text/javascript">
34
+ //<![CDATA[>
35
+
36
+ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
37
+ '<div id="{{id}}" class="file-row file-row-narrow">' +
38
+ '<span class="file-info">' +
39
+ '<span class="file-info-name">{{name}}</span>' +
40
+ ' ' +
41
+ '<span class="file-info-size">({{size}})</span>' +
42
+ '</span>' +
43
+ '<span class="progress-text"></span>' +
44
+ '<div class="clear"></div>' +
45
+ '</div>' +
46
+ '</div>' +
47
+ '<div class="no-display" id="[[idName]]-template-progress">' +
48
+ '{{percent}}% {{uploaded}} / {{total}}' +
49
+ '</div>';
50
+
51
+ var fileListTemplate = '<span class="file-info">' +
52
+ '<span class="file-info-name">{{name}}</span>' +
53
+ ' ' +
54
+ '<span class="file-info-size">({{size}})</span>' +
55
+ '</span>';
56
+
57
+ var Downloadable = {
58
+ uploaderObj : $H({}),
59
+ objCount : 0,
60
+ setUploaderObj : function(type, key, obj){
61
+ if (!this.uploaderObj.get(type)) {
62
+ this.uploaderObj.set(type, $H({}));
63
+ }
64
+ this.uploaderObj.get(type).set(key, obj);
65
+ },
66
+ getUploaderObj : function(type, key){
67
+ try {
68
+ return this.uploaderObj.get(type).get(key);
69
+ } catch (e) {
70
+ try {
71
+ console.log(e);
72
+ } catch (e2) {
73
+ alert(e.name + '\n' + e.message);
74
+ }
75
+ }
76
+ },
77
+ unsetUploaderObj : function(type, key){
78
+ try {
79
+ this.uploaderObj.get(type).unset(key);
80
+ } catch (e) {
81
+ try {
82
+ console.log(e);
83
+ } catch (e2) {
84
+ alert(e.name + '\n' + e.message);
85
+ }
86
+ }
87
+ },
88
+ massUploadByType : function(type){
89
+ try {
90
+ this.uploaderObj.get(type).each(function(item){
91
+ container = item.value.container.up('tr');
92
+ if (container.visible() && !container.hasClassName('no-display')) {
93
+ item.value.upload();
94
+ } else {
95
+ Downloadable.unsetUploaderObj(type, item.key);
96
+ }
97
+ });
98
+ } catch (e) {
99
+ try {
100
+ console.log(e);
101
+ } catch (e2) {
102
+ alert(e.name + '\n' + e.message);
103
+ }
104
+ }
105
+ }
106
+ };
107
+
108
+ Downloadable.FileUploader = Class.create();
109
+ Downloadable.FileUploader.prototype = {
110
+ type : null,
111
+ key : null, //key, identifier of uploader obj
112
+ elmContainer : null, //insert Flex object and templates to elmContainer
113
+ fileValueName : null, //name of field of JSON data of saved file
114
+ fileValue : null,
115
+ idName : null, //id name of elements for unique uploader
116
+ uploaderText: uploaderTemplate,
117
+ uploaderSyntax : /(^|.|\r|\n)(\[\[(\w+)\]\])/,
118
+ uploaderObj : $H({}),
119
+ config : null,
120
+ initialize: function (type, key, elmContainer, fileValueName, fileValue ,idName, config) {
121
+ this.type = type;
122
+ this.key = key;
123
+ this.elmContainer = elmContainer;
124
+ this.fileValueName = fileValueName;
125
+ this.fileValue = fileValue;
126
+ this.idName = idName;
127
+ this.config = config;
128
+ uploaderTemplate = new Template(this.uploaderText, this.uploaderSyntax);
129
+ <?php if (!$this->isReadonly()):?>
130
+ Element.insert(
131
+ elmContainer,
132
+ {'top' : uploaderTemplate.evaluate({
133
+ 'idName' : this.idName,
134
+ 'fileValueName' : this.fileValueName,
135
+ 'uploaderObj' : 'Downloadable.getUploaderObj(\''+this.type+'\', \''+this.key+'\')'
136
+ })
137
+ }
138
+ );
139
+ if ($(this.idName+'_save')) {
140
+ $(this.idName+'_save').value = this.fileValue.toJSON
141
+ ? this.fileValue.toJSON()
142
+ : Object.toJSON(this.fileValue);
143
+ }
144
+ Downloadable.setUploaderObj(
145
+ this.type,
146
+ this.key,
147
+ new Flex.Uploader(this.idName, '<?php echo $this->getSkinUrl('media/uploaderSingle.swf') ?>', this.config)
148
+ );
149
+ if (varienGlobalEvents) {
150
+ varienGlobalEvents.attachEventHandler('tabChangeBefore', Downloadable.getUploaderObj(type, key).onContainerHideBefore);
151
+ }
152
+ new Downloadable.FileList(this.idName, Downloadable.getUploaderObj(type, key));
153
+ <?php endif;?>
154
+ }
155
+ }
156
+
157
+ Downloadable.FileList = Class.create();
158
+ Downloadable.FileList.prototype = {
159
+ file: [],
160
+ containerId: '',
161
+ container: null,
162
+ uploader: null,
163
+ fileListTemplate: fileListTemplate,
164
+ templatePattern : /(^|.|\r|\n)({{(\w+)}})/,
165
+ listTemplate : null,
166
+ initialize: function (containerId, uploader) {
167
+ this.containerId = containerId,
168
+ this.container = $(this.containerId);
169
+ this.uploader = uploader;
170
+ this.uploader.onFilesComplete = this.handleUploadComplete.bind(this);
171
+ this.file = this.getElement('save').value.evalJSON();
172
+ this.listTemplate = new Template(this.fileListTemplate, this.templatePattern);
173
+ this.updateFiles();
174
+ this.uploader.onFileRemoveAll = this.handleFileRemoveAll.bind(this);
175
+ this.uploader.onFileSelect = this.handleFileSelect.bind(this);
176
+ },
177
+ handleFileRemoveAll: function(fileId) {
178
+ $(this.containerId+'-new').hide();
179
+ $(this.containerId+'-old').show();
180
+ },
181
+ handleFileSelect: function() {
182
+ $(this.containerId+'_type').checked = true;
183
+ },
184
+ getElement: function (name) {
185
+ return $(this.containerId + '_' + name);
186
+ },
187
+ handleUploadComplete: function (files) {
188
+ files.each(function(item) {
189
+ if (!item.response.isJSON()) {
190
+ try {
191
+ console.log(item.response);
192
+ } catch (e2) {
193
+ alert(item.response);
194
+ }
195
+ return;
196
+ }
197
+ var response = item.response.evalJSON();
198
+ if (response.error) {
199
+ return;
200
+ }
201
+ var newFile = {};
202
+ newFile.file = response.file;
203
+ newFile.name = response.name;
204
+ newFile.size = response.size;
205
+ newFile.status = 'new';
206
+ this.file[0] = newFile;
207
+ this.uploader.removeFile(item.id);
208
+ }.bind(this));
209
+ this.updateFiles();
210
+ },
211
+ updateFiles: function() {
212
+ this.getElement('save').value = this.file.toJSON
213
+ ? this.file.toJSON()
214
+ : Object.toJSON(this.file);
215
+ this.file.each(function(row){
216
+ row.size = this.uploader.formatSize(row.size);
217
+ $(this.containerId + '-old').innerHTML = this.listTemplate.evaluate(row);
218
+ $(this.containerId + '-new').hide();
219
+ $(this.containerId + '-old').show();
220
+ }.bind(this));
221
+ }
222
+ }
223
+
224
+ var alertAlreadyDisplayed = false;
225
+
226
+ Validation.addAllThese([
227
+ ['validate-downloadable-file', 'Please upload a file.', function(v,element) {
228
+ linkType = element.up(0).down('input[value="file"]');
229
+ if (linkType.checked && (v == '' || v == '[]')) {
230
+ newFileContainer = element.up(0).down('div.new-file');
231
+ if (!alertAlreadyDisplayed && (newFileContainer.empty() || newFileContainer.style.display != 'none')) {
232
+ alertAlreadyDisplayed = true;
233
+ alert('<?php echo $this->jsQuoteEscape($this->__('There are files that were selected but not uploaded yet. Please upload or remove them first'));?>');
234
+ }
235
+ return false;
236
+ }
237
+ return true;
238
+ }]
239
+ ]);
240
+
241
+ Validation.addAllThese([
242
+ ['validate-downloadable-url', 'Please specify Url.', function(v,element) {
243
+ linkType = element.up(0).down('input[value="url"]');
244
+ if (linkType.checked && v == '') {
245
+ return false;
246
+ }
247
+ return true;
248
+ }]
249
+ ]);
250
+ //]]>
251
+ </script>
252
+
253
+ <div id="alert_messages_block"><?php echo $this->getMessageHtml() ?></div>
254
+
255
+ <div class="entry-edit">
256
+ <?php echo $this->getChildHtml('accordion') ?>
257
+ </div>
258
+ <div style="display:none">
259
+ <div id="custom-advice-container"></div>
260
+ </div>
261
+ <?php if ($this->isReadonly()): ?>
262
+ <script type="text/javascript">
263
+ $('downloadableInfo').select('input', 'select', 'textarea', 'button').each(function (item){
264
+ item.disabled = true;
265
+ if (item.tagName.toLowerCase() == 'button') {
266
+ item.addClassName('disabled');
267
+ }
268
+ });
269
+ </script>
270
+ <?php endif; ?>
271
+ <!--
272
+ <div><input type="hidden" name="affect_downloadable_information" value="1" /></div>
273
+ -->
app/design/adminhtml/default/default/template/downloadable/product/edit/downloadable/links.phtml ADDED
@@ -0,0 +1,388 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 default_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
28
+
29
+ /**
30
+ * @see Mage_Downloadable_Block_Adminhtml_Catalog_Product_Edit_Tab_Downloadable_Links
31
+ */
32
+ ?>
33
+ <?php $_product = $this->getProduct()?>
34
+ <div class="fieldset">
35
+ <table cellspacing="0" class="form-list">
36
+ <tbody>
37
+ <tr class="headings">
38
+ <td class="label"><label for="name"><?php echo Mage::helper('downloadable')->__('Title')?></label>
39
+ </td>
40
+ <td class="value">
41
+ <input type="text" class="input-text" id="downloadable_links_title" name="product[links_title]" value="<?php echo $_product->getId()?$_product->getLinksTitle():$this->getLinksTitle() ?>" <?php echo ($_product->getStoreId() && $this->getUsedDefault())?'disabled="disabled"':'' ?> />
42
+ </td>
43
+ <td class="scope-label"><?php echo !Mage::app()->isSingleStoreMode() ? Mage::helper('adminhtml')->__('[STORE VIEW]') : ''; ?></td>
44
+ <td class="value use-default">
45
+ <?php if($_product->getStoreId()): ?>
46
+ <input id="link_title_default" type="checkbox" name="use_default[]" value="links_title" onclick="toggleValueElements(this, this.parentNode.parentNode)" <?php echo $this->getUsedDefault()?'checked="checked"':'' ?> />
47
+ <label class="normal" for="link_title_default"><?php echo Mage::helper('downloadable')->__('Use Default Value'); ?></label>
48
+ <?php endif; ?>
49
+ </td>
50
+ </tr>
51
+ </tbody>
52
+ </table>
53
+ <br />
54
+ <table cellspacing="0" class="form-list">
55
+ <tbody>
56
+ <tr class="headings">
57
+ <td class="label"><label for="name"><?php echo Mage::helper('downloadable')->__('Links can be purchased separately')?></label>
58
+ </td>
59
+ <td class="value">
60
+ <?php echo $this->getPurchasedSeparatelySelect()?>
61
+ </td>
62
+ <td class="scope-label"><?php echo !Mage::app()->isSingleStoreMode() ? Mage::helper('adminhtml')->__('[GLOBAL]') : ''; ?></td>
63
+ <td><small>&nbsp;</small></td>
64
+ </tr>
65
+ </tbody>
66
+ </table>
67
+ <br />
68
+ <div class="grid">
69
+ <div class="hor-scroll">
70
+ <table cellspacing="0" class="data border">
71
+ <col width="33%" />
72
+ <col />
73
+ <col />
74
+ <col />
75
+ <col width="1" />
76
+ <col width="1" />
77
+ <col width="1" />
78
+ <col width="1" />
79
+ <thead>
80
+ <tr class="headings">
81
+ <th><?php echo Mage::helper('downloadable')->__('Title')?> <span class="required">*</span></th>
82
+ <?php if ($this->getCanReadPrice() !== false) : ?>
83
+ <th><?php echo Mage::helper('downloadable')->__('Price')?></th>
84
+ <?php endif; ?>
85
+ <th><span class="nobr"><?php echo Mage::helper('downloadable')->__('Max. Downloads')?></span></th>
86
+ <th><?php echo Mage::helper('downloadable')->__('Shareable')?></th>
87
+