Zero1_Producttoolbox - Version 1.0.1.5

Version Notes

Fixed an issue with simple products still showing when assigned to a grouped product.

Download this release

Release Info

Developer Magento Core Team
Extension Zero1_Producttoolbox
Version 1.0.1.5
Comparing to
See all releases


Code changes from version 1.0.1.4 to 1.0.1.5

app/code/community/Zero1/Producttoolbox/Block/{Empty/Bundles.php → Bundles.php} RENAMED
@@ -1,180 +1,180 @@
1
- <?php
2
- class Zero1_Producttoolbox_Block_Empty_Bundles extends Mage_Adminhtml_Block_Widget_Grid
3
- {
4
- public function __construct()
5
- {
6
- parent::__construct();
7
- $this->setId('producttoolbox_empty_bundles');
8
- $this->setDefaultSort('entity_id');
9
- $this->setUseAjax(true);
10
- }
11
-
12
- protected function _getStore()
13
- {
14
- $storeId = (int)$this->getRequest()->getParam('store', 0);
15
- return Mage::app()->getStore($storeId);
16
- }
17
-
18
- protected function _prepareCollection()
19
- {
20
- $store = $this->_getStore();
21
-
22
- $collection = new Zero1_Producttoolbox_Model_Resource_Eav_Mysql4_Product_Collection();
23
- //$collection = Mage::getModel('catalog/product')->getCollection();
24
- $collection->addAttributeToSelect('name')
25
- ->addAttributeToSelect('sku')
26
- ->addAttributeToSelect('price')
27
- ->addAttributeToSelect('visibility')
28
- ->addAttributeToSelect('attribute_set_id')
29
- ->joinTable('bundle/selection',
30
- 'parent_product_id=entity_id',
31
- array('bundle_parent_id' => 'parent_product_id'),
32
- null,
33
- 'left');
34
-
35
- $collection->addFieldToFilter(
36
- array(
37
- array( 'attribute' => 'type_id',
38
- 'eq' => Mage_Catalog_Model_Product_Type::TYPE_BUNDLE),
39
- ));
40
-
41
- // Filter to show only products without parents
42
- $collection->addFieldToFilter(
43
- array(
44
- array( 'attribute' => 'bundle_parent_id',
45
- 'null' => true),
46
- ));
47
-
48
- $collection->groupByAttribute('entity_id');
49
-
50
- // Get the stock quanity
51
- if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory'))
52
- {
53
- $collection->joinField('qty',
54
- 'cataloginventory/stock_item',
55
- 'qty',
56
- 'product_id=entity_id',
57
- '{{table}}.stock_id=1',
58
- 'left');
59
- }
60
-
61
- if ($store->getId()) {
62
- $adminStore = Mage_Core_Model_App::ADMIN_STORE_ID;
63
- $collection->addStoreFilter($store);
64
- $collection->joinAttribute('name', 'catalog_product/name', 'entity_id', null, 'inner', $adminStore);
65
- $collection->joinAttribute('custom_name', 'catalog_product/name', 'entity_id', null, 'inner', $store->getId());
66
- $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner', $store->getId());
67
- $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner', $store->getId());
68
- $collection->joinAttribute('price', 'catalog_product/price', 'entity_id', null, 'left', $store->getId());
69
- }
70
- else {
71
- $collection->addAttributeToSelect('price');
72
- $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner');
73
- $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner');
74
- }
75
-
76
-
77
- $this->setCollection($collection);
78
-
79
- return parent::_prepareCollection();
80
- }
81
-
82
- protected function _prepareColumns()
83
- {
84
- $sets = Mage::getResourceModel('eav/entity_attribute_set_collection')
85
- ->setEntityTypeFilter(Mage::getModel('catalog/product')->getResource()->getTypeId())
86
- ->load()
87
- ->toOptionHash();
88
-
89
- $this->addColumn('entity_id', array(
90
- 'header' => Mage::helper('catalog')->__('ID'),
91
- 'sortable' => true,
92
- 'width' => '60',
93
- 'index' => 'entity_id'
94
- ));
95
-
96
- $this->addColumn('name', array(
97
- 'header' => Mage::helper('catalog')->__('Name'),
98
- 'index' => 'name'
99
- ));
100
-
101
- $store = $this->_getStore();
102
- if ($store->getId()) {
103
- $this->addColumn('custom_name',
104
- array(
105
- 'header'=> Mage::helper('catalog')->__('Name in %s', $store->getName()),
106
- 'index' => 'custom_name',
107
- ));
108
- }
109
-
110
- $this->addColumn('set_name', array(
111
- 'header' => Mage::helper('catalog')->__('Attrib. Set Name'),
112
- 'width' => '100px',
113
- 'index' => 'attribute_set_id',
114
- 'type' => 'options',
115
- 'options' => $sets,
116
- ));
117
-
118
- $this->addColumn('sku', array(
119
- 'header' => Mage::helper('catalog')->__('SKU'),
120
- 'width' => '80',
121
- 'index' => 'sku'
122
- ));
123
-
124
- $this->addColumn('price', array(
125
- 'header' => Mage::helper('catalog')->__('Price'),
126
- 'type' => 'currency',
127
- 'width' => '1',
128
- 'currency_code' => (string) Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE),
129
- 'index' => 'price'
130
- ));
131
-
132
- if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory')) {
133
- $this->addColumn('qty',
134
- array(
135
- 'header'=> Mage::helper('catalog')->__('Qty'),
136
- 'width' => '100px',
137
- 'type' => 'number',
138
- 'index' => 'qty',
139
- ));
140
- }
141
-
142
- $this->addColumn('status',
143
- array(
144
- 'header'=> Mage::helper('catalog')->__('Status'),
145
- 'width' => '70px',
146
- 'index' => 'status',
147
- 'type' => 'options',
148
- 'options' => Mage::getSingleton('catalog/product_status')->getOptionArray(),
149
- ));
150
-
151
- $this->addColumn('action',
152
- array(
153
- 'header' => Mage::helper('catalog')->__('Action'),
154
- 'width' => '50px',
155
- 'type' => 'action',
156
- 'getter' => 'getId',
157
- 'actions' => array(
158
- array(
159
- 'caption' => Mage::helper('catalog')->__('Edit'),
160
- 'url' => array(
161
- 'base'=>'*/catalog_product/edit',
162
- 'params'=>array('store'=>$this->getRequest()->getParam('store')),
163
- 'target'=>'blank'
164
- ),
165
- 'field' => 'id'
166
- )
167
- ),
168
- 'filter' => false,
169
- 'sortable' => false,
170
- 'index' => 'stores',
171
- ));
172
-
173
- return parent::_prepareColumns();
174
- }
175
-
176
- public function getGridUrl()
177
- {
178
- return $this->getUrl('*/*/grid', array('_current'=>true));
179
- }
180
}
1
+ <?php
2
+ class Zero1_Producttoolbox_Block_Bundles extends Mage_Adminhtml_Block_Widget_Grid
3
+ {
4
+ public function __construct()
5
+ {
6
+ parent::__construct();
7
+ $this->setId('producttoolbox_bundles');
8
+ $this->setDefaultSort('entity_id');
9
+ $this->setUseAjax(true);
10
+ }
11
+
12
+ protected function _getStore()
13
+ {
14
+ $storeId = (int)$this->getRequest()->getParam('store', 0);
15
+ return Mage::app()->getStore($storeId);
16
+ }
17
+
18
+ protected function _prepareCollection()
19
+ {
20
+ $store = $this->_getStore();
21
+
22
+ $collection = new Zero1_Producttoolbox_Model_Resource_Eav_Mysql4_Product_Collection();
23
+ //$collection = Mage::getModel('catalog/product')->getCollection();
24
+ $collection->addAttributeToSelect('name')
25
+ ->addAttributeToSelect('sku')
26
+ ->addAttributeToSelect('price')
27
+ ->addAttributeToSelect('visibility')
28
+ ->addAttributeToSelect('attribute_set_id')
29
+ ->joinTable('bundle/selection',
30
+ 'parent_product_id=entity_id',
31
+ array('bundle_parent_id' => 'parent_product_id'),
32
+ null,
33
+ 'left');
34
+
35
+ $collection->addFieldToFilter(
36
+ array(
37
+ array( 'attribute' => 'type_id',
38
+ 'eq' => Mage_Catalog_Model_Product_Type::TYPE_BUNDLE),
39
+ ));
40
+
41
+ // Filter to show only products without parents
42
+ $collection->addFieldToFilter(
43
+ array(
44
+ array( 'attribute' => 'bundle_parent_id',
45
+ 'null' => true),
46
+ ));
47
+
48
+ $collection->groupByAttribute('entity_id');
49
+
50
+ // Get the stock quanity
51
+ if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory'))
52
+ {
53
+ $collection->joinField('qty',
54
+ 'cataloginventory/stock_item',
55
+ 'qty',
56
+ 'product_id=entity_id',
57
+ '{{table}}.stock_id=1',
58
+ 'left');
59
+ }
60
+
61
+ if ($store->getId()) {
62
+ $adminStore = Mage_Core_Model_App::ADMIN_STORE_ID;
63
+ $collection->addStoreFilter($store);
64
+ $collection->joinAttribute('name', 'catalog_product/name', 'entity_id', null, 'inner', $adminStore);
65
+ $collection->joinAttribute('custom_name', 'catalog_product/name', 'entity_id', null, 'inner', $store->getId());
66
+ $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner', $store->getId());
67
+ $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner', $store->getId());
68
+ $collection->joinAttribute('price', 'catalog_product/price', 'entity_id', null, 'left', $store->getId());
69
+ }
70
+ else {
71
+ $collection->addAttributeToSelect('price');
72
+ $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner');
73
+ $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner');
74
+ }
75
+
76
+
77
+ $this->setCollection($collection);
78
+
79
+ return parent::_prepareCollection();
80
+ }
81
+
82
+ protected function _prepareColumns()
83
+ {
84
+ $sets = Mage::getResourceModel('eav/entity_attribute_set_collection')
85
+ ->setEntityTypeFilter(Mage::getModel('catalog/product')->getResource()->getTypeId())
86
+ ->load()
87
+ ->toOptionHash();
88
+
89
+ $this->addColumn('entity_id', array(
90
+ 'header' => Mage::helper('catalog')->__('ID'),
91
+ 'sortable' => true,
92
+ 'width' => '60',
93
+ 'index' => 'entity_id'
94
+ ));
95
+
96
+ $this->addColumn('name', array(
97
+ 'header' => Mage::helper('catalog')->__('Name'),
98
+ 'index' => 'name'
99
+ ));
100
+
101
+ $store = $this->_getStore();
102
+ if ($store->getId()) {
103
+ $this->addColumn('custom_name',
104
+ array(
105
+ 'header'=> Mage::helper('catalog')->__('Name in %s', $store->getName()),
106
+ 'index' => 'custom_name',
107
+ ));
108
+ }
109
+
110
+ $this->addColumn('set_name', array(
111
+ 'header' => Mage::helper('catalog')->__('Attrib. Set Name'),
112
+ 'width' => '100px',
113
+ 'index' => 'attribute_set_id',
114
+ 'type' => 'options',
115
+ 'options' => $sets,
116
+ ));
117
+
118
+ $this->addColumn('sku', array(
119
+ 'header' => Mage::helper('catalog')->__('SKU'),
120
+ 'width' => '80',
121
+ 'index' => 'sku'
122
+ ));
123
+
124
+ $this->addColumn('price', array(
125
+ 'header' => Mage::helper('catalog')->__('Price'),
126
+ 'type' => 'currency',
127
+ 'width' => '1',
128
+ 'currency_code' => (string) Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE),
129
+ 'index' => 'price'
130
+ ));
131
+
132
+ if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory')) {
133
+ $this->addColumn('qty',
134
+ array(
135
+ 'header'=> Mage::helper('catalog')->__('Qty'),
136
+ 'width' => '100px',
137
+ 'type' => 'number',
138
+ 'index' => 'qty',
139
+ ));
140
+ }
141
+
142
+ $this->addColumn('status',
143
+ array(
144
+ 'header'=> Mage::helper('catalog')->__('Status'),
145
+ 'width' => '70px',
146
+ 'index' => 'status',
147
+ 'type' => 'options',
148
+ 'options' => Mage::getSingleton('catalog/product_status')->getOptionArray(),
149
+ ));
150
+
151
+ $this->addColumn('action',
152
+ array(
153
+ 'header' => Mage::helper('catalog')->__('Action'),
154
+ 'width' => '50px',
155
+ 'type' => 'action',
156
+ 'getter' => 'getId',
157
+ 'actions' => array(
158
+ array(
159
+ 'caption' => Mage::helper('catalog')->__('Edit'),
160
+ 'url' => array(
161
+ 'base'=>'*/catalog_product/edit',
162
+ 'params'=>array('store'=>$this->getRequest()->getParam('store')),
163
+ 'target'=>'blank'
164
+ ),
165
+ 'field' => 'id'
166
+ )
167
+ ),
168
+ 'filter' => false,
169
+ 'sortable' => false,
170
+ 'index' => 'stores',
171
+ ));
172
+
173
+ return parent::_prepareColumns();
174
+ }
175
+
176
+ public function getGridUrl()
177
+ {
178
+ return $this->getUrl('*/*/grid', array('_current'=>true));
179
+ }
180
}
app/code/community/Zero1/Producttoolbox/Block/Simples.php CHANGED
@@ -36,6 +36,11 @@ class Zero1_Producttoolbox_Block_Simples extends Mage_Adminhtml_Block_Widget_Gri
36
'product_id=entity_id',
37
array('bundle_parent_id' => 'parent_product_id'),
38
null,
39
'left');
40
41
// Filter to show only products without parents
@@ -51,6 +56,13 @@ class Zero1_Producttoolbox_Block_Simples extends Mage_Adminhtml_Block_Widget_Gri
51
array( 'attribute' => 'bundle_parent_id',
52
'null' => true),
53
));
54
55
// Get the stock quanity
56
if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory'))
36
'product_id=entity_id',
37
array('bundle_parent_id' => 'parent_product_id'),
38
null,
39
+ 'left')
40
+ ->joinTable('catalog/product_relation',
41
+ 'child_id=entity_id',
42
+ array('grouped_parent_id' => 'child_id'),
43
+ null,
44
'left');
45
46
// Filter to show only products without parents
56
array( 'attribute' => 'bundle_parent_id',
57
'null' => true),
58
));
59
+
60
+ // Filter to show only products without parents
61
+ $collection->addFieldToFilter(
62
+ array(
63
+ array( 'attribute' => 'grouped_parent_id',
64
+ 'null' => true),
65
+ ));
66
67
// Get the stock quanity
68
if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory'))
app/code/community/Zero1/Producttoolbox/controllers/Adminhtml/Producttoolbox/{Empty/BundlesController.php → BundlesController.php} RENAMED
@@ -1,5 +1,5 @@
1
<?php
2
- class Zero1_Producttoolbox_Adminhtml_Producttoolbox_Empty_BundlesController extends Mage_Adminhtml_Controller_Action
3
{
4
function indexAction()
5
{
@@ -14,7 +14,7 @@ class Zero1_Producttoolbox_Adminhtml_Producttoolbox_Empty_BundlesController exte
14
function gridAction()
15
{
16
$this->getResponse()->setBody(
17
- $this->getLayout()->createBlock('producttoolbox/empty_bundles', 'producttoolbox_producttoolbox_empty_bundles')
18
->toHtml()
19
);
20
}
1
<?php
2
+ class Zero1_Producttoolbox_Adminhtml_Producttoolbox_BundlesController extends Mage_Adminhtml_Controller_Action
3
{
4
function indexAction()
5
{
14
function gridAction()
15
{
16
$this->getResponse()->setBody(
17
+ $this->getLayout()->createBlock('producttoolbox/bundles', 'producttoolbox_producttoolbox_bundles')
18
->toHtml()
19
);
20
}
app/code/community/Zero1/Producttoolbox/etc/adminhtml.xml CHANGED
@@ -17,7 +17,7 @@
17
<children>
18
<producttoolbox_empty_bundles translate="title" module="zero1_producttoolbox">
19
<title>Empty Bundles</title>
20
- <action>adminhtml/producttoolbox_empty_bundles</action>
21
<sort_order>0</sort_order>
22
</producttoolbox_empty_bundles>
23
</children>
17
<children>
18
<producttoolbox_empty_bundles translate="title" module="zero1_producttoolbox">
19
<title>Empty Bundles</title>
20
+ <action>adminhtml/producttoolbox_bundles</action>
21
<sort_order>0</sort_order>
22
</producttoolbox_empty_bundles>
23
</children>
app/code/community/Zero1/Producttoolbox/etc/config.xml CHANGED
@@ -54,6 +54,25 @@
54
</producttoolbox>
55
</updates>
56
</layout>
57
</adminhtml>
58
-
59
</config>
54
</producttoolbox>
55
</updates>
56
</layout>
57
+
58
+ <acl>
59
+ <resources>
60
+ <admin>
61
+ <children>
62
+ <system>
63
+ <children>
64
+ <config>
65
+ <children>
66
+ <zero1_producttoolbox translate="title" module="zero1_producttoolbox">
67
+ <title>Zero1 Product Toolbox</title>
68
+ </zero1_producttoolbox>
69
+ </children>
70
+ </config>
71
+ </children>
72
+ </system>
73
+ </children>
74
+ </admin>
75
+ </resources>
76
+ </acl>
77
</adminhtml>
78
</config>
app/design/adminhtml/default/default/layout/producttoolbox.xml CHANGED
@@ -9,12 +9,12 @@
9
</reference>
10
</adminhtml_producttoolbox_simples_index>
11
12
- <adminhtml_producttoolbox_empty_bundles_index>
13
<reference name="content">
14
<block type="adminhtml/store_switcher" name="store_switcher" as="store_switcher">
15
<action method="setUseConfirm"><params>0</params></action>
16
</block>
17
- <block type="producttoolbox/empty_bundles" name="producttoolbox_empty_bundles"></block>
18
</reference>
19
- </adminhtml_producttoolbox_empty_bundles_index>
20
</layout>
9
</reference>
10
</adminhtml_producttoolbox_simples_index>
11
12
+ <adminhtml_producttoolbox_bundles_index>
13
<reference name="content">
14
<block type="adminhtml/store_switcher" name="store_switcher" as="store_switcher">
15
<action method="setUseConfirm"><params>0</params></action>
16
</block>
17
+ <block type="producttoolbox/bundles" name="producttoolbox_bundles"></block>
18
</reference>
19
+ </adminhtml_producttoolbox_bundles_index>
20
</layout>
package.xml CHANGED
@@ -1,18 +1,22 @@
1
<?xml version="1.0"?>
2
<package>
3
<name>Zero1_Producttoolbox</name>
4
- <version>1.0.1.4</version>
5
<stability>stable</stability>
6
<license uri="http://www.opensource.org/licenses/gpl-license.php">OSL v3.0</license>
7
<channel>community</channel>
8
<extends/>
9
<summary>Allows you to find simple products that are not linked to a configurable, grouped or bundle product.</summary>
10
- <description>Using the Product Toolbox you can easily identify simple products that are not linked to configurable, grouped or bundle products.</description>
11
- <notes>Fixed issue with Magento 1.5</notes>
12
<authors><author><name>Arron Moss</name><user>auto-converted</user><email>arron.moss@zero1.co.uk</email></author></authors>
13
- <date>2012-01-31</date>
14
- <time>11:53:10</time>
15
- <contents><target name="magecommunity"><dir name="Zero1"><dir name="Producttoolbox"><dir name="Block"><dir name="Empty"><file name="Bundles.php" hash="0e5e533e5dc7cf043fffed98e9df826e"/></dir><file name="Simples.php" hash="54edae28c641b7c2dc148ff45fca0848"/></dir><dir name="Helper"><file name="Data.php" hash="a5d515291a41dddb9be6038f01a3743d"/></dir><dir name="Model"><dir name="Resource"><dir name="Eav"><dir name="Mysql4"><dir name="Product"><file name="Collection.php" hash="ab60f2c8c606a4ca0ad1ec5fe47a65f0"/></dir></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Producttoolbox"><dir name="Empty"><file name="BundlesController.php" hash="6a806b260b7c0b2318fd3d50bf410a6e"/></dir><file name="SimplesController.php" hash="5797437536b6e2bbbd18571025628ce6"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="d071b1ba3f9e82c82c900fcf2523bd4a"/><file name="config.xml" hash="dc042ea1a0933a792710f9185461a816"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="producttoolbox.xml" hash="fd7c3e4353fd39ff525e92e615d0289b"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Zero1_Producttoolbox.xml" hash="9267659f3cc38ce858454ef5a5cb5293"/></dir></target></contents>
16
<compatible/>
17
<dependencies/>
18
</package>
1
<?xml version="1.0"?>
2
<package>
3
<name>Zero1_Producttoolbox</name>
4
+ <version>1.0.1.5</version>
5
<stability>stable</stability>
6
<license uri="http://www.opensource.org/licenses/gpl-license.php">OSL v3.0</license>
7
<channel>community</channel>
8
<extends/>
9
<summary>Allows you to find simple products that are not linked to a configurable, grouped or bundle product.</summary>
10
+ <description>Using the Product Toolbox you can easily identify simple products that are not linked to configurable, grouped or bundle products.&#xD;
11
+ &#xD;
12
+ Once installed you will see another menu in the "Catalog" menu that will allow you to detect...&#xD;
13
+ Bundled products with no simple products assigned to them.&#xD;
14
+ Simple products that are not assigned to a Configurable, Grouped or Bundled product. The simple product must also be set to "Not Visible Individually" in order to show here. This is the typical setting for these type of products.</description>
15
+ <notes>Fixed an issue with simple products still showing when assigned to a grouped product.</notes>
16
<authors><author><name>Arron Moss</name><user>auto-converted</user><email>arron.moss@zero1.co.uk</email></author></authors>
17
+ <date>2012-03-06</date>
18
+ <time>09:49:18</time>
19
+ <contents><target name="magecommunity"><dir name="Zero1"><dir name="Producttoolbox"><dir name="Block"><file name="Bundles.php" hash="bbd9728bb573bbb482c9d3d47c40e619"/><file name="Simples.php" hash="f7d185edeadd0a93281a9e2c6f4125e9"/></dir><dir name="Helper"><file name="Data.php" hash="a5d515291a41dddb9be6038f01a3743d"/></dir><dir name="Model"><dir name="Resource"><dir name="Eav"><dir name="Mysql4"><dir name="Product"><file name="Collection.php" hash="ab60f2c8c606a4ca0ad1ec5fe47a65f0"/></dir></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Producttoolbox"><file name="BundlesController.php" hash="941fb00737262f0b6497f22443d1fe20"/><file name="SimplesController.php" hash="5797437536b6e2bbbd18571025628ce6"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="cee3d4daf3d50502d62f5db0c7b2665b"/><file name="config.xml" hash="ae17ed17ba08805d4eb27e60aeff38c9"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="producttoolbox.xml" hash="c0bbec029a583b794dc1a618e0f46010"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Zero1_Producttoolbox.xml" hash="9267659f3cc38ce858454ef5a5cb5293"/></dir></target></contents>
20
<compatible/>
21
<dependencies/>
22
</package>