InRiver_PIM_Extension - Version 5.3.0.0

Version Notes

First Stable Version.

Download this release

Release Info

Developer Andreas Hellström
Extension InRiver_PIM_Extension
Version 5.3.0.0
Comparing to
See all releases


Version 5.3.0.0

app/code/community/InRiver/Catalog/Helper/Data.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+ class InRiver_Catalog_Helper_Data extends Mage_Core_Helper_Abstract
3
+ {
4
+
5
+ }
6
+ ?>
app/code/community/InRiver/Catalog/Model/Category/Api.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class InRiver_Catalog_Model_Category_Api extends Mage_Catalog_Model_Category_Api {
4
+
5
+ public function tree($parentId = null, $store = null) {
6
+ $tree = parent::tree($parentId, $store);
7
+ Mage::dispatchEvent('inriver_tree_category_api_after', array('tree' => $tree));
8
+ return $tree;
9
+ }
10
+
11
+ public function create($parentId, $catData, $store = null) {
12
+ Mage::dispatchEvent('inriver_create_category_api_before', array('parentId' => $parentId, 'catData' => $catData));
13
+ $categoryId = parent::create($parentId, $catData, $store);
14
+ Mage::dispatchEvent('inriver_create_category_api_after', array('categoryId' => $categoryId));
15
+ return $categoryId;
16
+ }
17
+
18
+ public function delete($categoryId) {
19
+ Mage::dispatchEvent('inriver_delete_category_api_before', array('categoryId' => $categoryId));
20
+ $isRemoved = parent::delete($categoryId);
21
+ Mage::dispatchEvent('inriver_delete_category_api_after', array('isRemoved' => $isRemoved));
22
+ return $isRemoved;
23
+ }
24
+
25
+ public function removeProduct($categoryId, $productId, $identifierType = null) {
26
+ Mage::dispatchEvent('inriver_remove_product_category_api_before', array('categoryId' => $categoryId, 'productId' => $productId));
27
+ $isRemoved = parent::removeProduct($categoryId, $productId, $identifierType);
28
+ Mage::dispatchEvent('inriver_remove_product_category_api_after', array('isRemoved ' => $isRemoved ));
29
+ return $isRemoved ;
30
+ }
31
+
32
+ public function info($categoryId, $store = null, $attributes = null) {
33
+ $info = parent::info($categoryId, $store, $attributes);
34
+ Mage::dispatchEvent('inriver_info_category_api_after', array('categoryId' => $categoryId));
35
+ return $info;
36
+ }
37
+
38
+ public function assignProduct($categoryId, $productId, $position = null, $identifierType = null) {
39
+ Mage::dispatchEvent('inriver_assign_product_category_api_before', array('categoryId' => $categoryId, 'productId' => $productId));
40
+ $isAssigned = parent::assignProduct($categoryId, $productId, $position, $identifierType);
41
+ Mage::dispatchEvent('inriver_assign_product_category_api_after', array('isAssigned' => $isAssigned));
42
+ return $isAssigned;
43
+ }
44
+ }
app/code/community/InRiver/Catalog/Model/Product/Api.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class InRiver_Catalog_Model_Product_Api extends Mage_Catalog_Model_Product_Api {
4
+
5
+ public function create($type, $set, $sku, $productData, $store = null) {
6
+ Mage::dispatchEvent('inriver_create_product_api_before', array('type' => $type, 'set' => $set, 'sku' => $sku, 'productData' => $productData));
7
+ $id = parent::create($type, $set, $sku, $productData, $store);
8
+ Mage::dispatchEvent('inriver_create_product_api_after', array('id' => $id));
9
+ return $id;
10
+ }
11
+
12
+ public function update($productId, $productData, $store = null, $identifierType = null) {
13
+ Mage::dispatchEvent('inriver_update_product_api_before', array('productId' => $productId, 'productData' => $productData));
14
+ $isUpdated = parent::update($productId, $productData, $store, $identifierType);
15
+ Mage::dispatchEvent('inriver_update_product_api_after', array('isUpdated' => $isUpdated));
16
+ return $isUpdated;
17
+ }
18
+
19
+ public function delete($productId, $identifierType = null) {
20
+ Mage::dispatchEvent('inriver_delete_product_api_before', array('productId' => $productId));
21
+ $isDeleted = parent::delete($productId, $identifierType);
22
+ Mage::dispatchEvent('inriver_delete_product_api_after', array('isDeleted' => $isDeleted));
23
+ return $isDeleted;
24
+ }
25
+
26
+ public function info($productId, $store = null, $attributes = null, $identifierType = null) {
27
+ Mage::dispatchEvent('inriver_info_product_api_before', array('productId' => $productId, 'store' => $store));
28
+ $productInfo = parent::info($productId, $store, $attributes, $identifierType);
29
+ Mage::dispatchEvent('inriver_info_product_api_after', array('productInfo' => $productInfo));
30
+ return $productInfo;
31
+ }
32
+
33
+ public function items($filters = null, $store = null) {
34
+ $items = parent::items($filters, $store);
35
+ Mage::dispatchEvent('inriver_list_product_api_after', array('items' => $items));
36
+ return $items;
37
+ }
38
+
39
+ public function defineSuperAttributesForProduct($productId, $attributeArray) {
40
+ Mage::dispatchEvent('inriver_define_super_attribute_before', array('productId' => $productId, 'attributeArray' => $attributeArray));
41
+
42
+ $write = Mage::getSingleton('core/resource')->getConnection('core_write');
43
+ $counter = 0;
44
+
45
+ foreach ($attributeArray as $attributeId) {
46
+ $sqlquery1 = "SELECT COUNT(*) AS CNT FROM `catalog_product_super_attribute` WHERE product_id = '$productId' AND attribute_id = '$attributeId'";
47
+ $readresult1 = $write->query($sqlquery1);
48
+ $row = $readresult1->fetch();
49
+
50
+ if ($row['CNT'] == 0) {
51
+ $sqlquery2 = "INSERT INTO catalog_product_super_attribute (product_id, attribute_id, position) VALUES ('$productId', '$attributeId', '@counter')";
52
+ $readresult2 = $write->query($sqlquery2);
53
+ $counter++;
54
+ }
55
+ }
56
+ Mage::dispatchEvent('inriver_define_super_attribute_after');
57
+ }
58
+
59
+ public function addSuperLink($productId, $childIdArray) {
60
+ Mage::dispatchEvent('inriver_add_super_link_before', array('productId' => $productId, 'childIdArray' => $childIdArray));
61
+
62
+ $write = Mage::getSingleton('core/resource')->getConnection('core_write');
63
+
64
+ foreach ($childIdArray as $childId) {
65
+ $sqlquery = "INSERT INTO `catalog_product_super_link` ( `product_id` , `parent_id` ) VALUES ( '$childId', '$productId')";
66
+ $write->query($sqlquery);
67
+ }
68
+
69
+ Mage::dispatchEvent('inriver_add_super_link_after');
70
+ }
71
+
72
+ public function getProductFromEntityId($entityId) {
73
+ Mage::dispatchEvent('inriver_get_product_api_before', array('entityId' => $entityId));
74
+ $products = Mage::getModel('catalog/product')->getCollection();
75
+ $products->addAttributeToFilter('inriver_entity_id', $entityId);
76
+ $products->addAttributeToSelect('*');
77
+ $products->load();
78
+ foreach ($products as $val) {
79
+ $productsArray[] = $val->getData();
80
+ }
81
+
82
+ Mage::dispatchEvent('inriver_get_product_api_after', array('productsArray' => $productsArray));
83
+ return $productsArray;
84
+ }
85
+ }
app/code/community/InRiver/Catalog/Model/Product/Attribute/Api.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class InRiver_Catalog_Model_Product_Attribute_Api extends Mage_Catalog_Model_Product_Attribute_Api {
4
+
5
+ public function create($data) {
6
+ Mage::dispatchEvent('inriver_create_product_attribute_api_before', array('data' => $data));
7
+ $id = parent::create($data);
8
+ Mage::dispatchEvent('inriver_create_product_attribute_api_after', array('id' => $id));
9
+ return $id;
10
+ }
11
+
12
+ public function remove($attribute) {
13
+ Mage::dispatchEvent('inriver_remove_product_attribute_api_before', array('attribute' => $attribute));
14
+ $isRemoved = parent::remove($attribute);
15
+ Mage::dispatchEvent('inriver_remove_product_attribute_api_after', array('isRemoved' => $isRemoved));
16
+ return $isRemoved;
17
+ }
18
+
19
+ public function options($attribute, $store = null) {
20
+ Mage::dispatchEvent('inriver_options_attribute_api_before', array('attribute' => $attribute));
21
+ $options = parent::options($attribute, $store);
22
+ Mage::dispatchEvent('inriver_options_attribute_api_after', array('options' => $options));
23
+ return $options;
24
+ }
25
+
26
+ public function addOption($attribute, $data) {
27
+ Mage::dispatchEvent('inriver_add_option_attribute_api_before', array('attribute' => $attribute));
28
+ $isAdded = parent::addOption($attribute, $data);
29
+ Mage::dispatchEvent('inriver_add_option_attribute_api_after', array('isAdded' => $isAdded));
30
+ return $isAdded;
31
+ }
32
+
33
+ public function removeOption($attribute, $optionId) {
34
+ Mage::dispatchEvent('inriver_remove_option_attribute_api_before', array('attribute' => $attribute));
35
+ $isRemoved = parent::removeOption($attribute, $optionId);
36
+ Mage::dispatchEvent('inriver_remove_option_attribute_api_after', array('isRemoved' => $isRemoved));
37
+ return $isRemoved;
38
+ }
39
+
40
+ public function listAllAttributes() {
41
+ $sqlquery = "select attribute_id, attribute_code from eav_attribute where entity_type_id IN (select entity_type_id from eav_entity_type where entity_type_code = 'catalog_product')";
42
+
43
+ $write = Mage::getSingleton('core/resource')->getConnection('core_write');
44
+ $readresult = $write->query($sqlquery);
45
+
46
+ while ($row = $readresult->fetch()) {
47
+
48
+ $groups[] = array($row['attribute_id'], $row['attribute_code']);
49
+ }
50
+
51
+ Mage::dispatchEvent('inriver_listAllAttributes_after', array('groups' => $groups));
52
+ return $groups;
53
+ }
54
+
55
+ public function updateAttributeOptions($attributeId, $options) {
56
+ Mage::dispatchEvent('inriver_updateAttributeOptions_before', array('attributeId' => $attributeId, 'options' => $options));
57
+ $write = Mage::getSingleton('core/resource')->getConnection('core_write');
58
+
59
+ foreach ($options as $option) {
60
+ $readresult = $write->query("UPDATE `eav_attribute_option_value` SET value='" . $option['value'] . "' where `option_id`=" . $option['option_id'] . " and store_id=" . $option['store_id']);
61
+ }
62
+ return true;
63
+ }
64
+ }
app/code/community/InRiver/Catalog/Model/Product/Attribute/Media/Api.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class InRiver_Catalog_Model_Product_Attribute_Media_Api extends Mage_Catalog_Model_Product_Attribute_Media_Api {
4
+
5
+ public function create($productId, $data, $store = null, $identifierType = null) {
6
+ Mage::dispatchEvent('inriver_create_product_attribute_media_api_before', array('productId' => $productId, 'data' => $data));
7
+ $fileName = parent::create($productId, $data, $store, $identifierType);
8
+ Mage::dispatchEvent('inriver_create_product_attribute_media_api_after', array('fileName' => $fileName));
9
+ return $fileName;
10
+ }
11
+
12
+ public function update($productId, $file, $data, $store = null, $identifierType = null) {
13
+ Mage::dispatchEvent('inriver_update_product_attribute_media_api_before', array('productId' => $productId, 'data' => $data));
14
+ $isUpdated = parent::update($productId, $file, $data, $store, $identifierType);
15
+ Mage::dispatchEvent('inriver_update_product_attribute_media_api_after', array('isUpdated' => $isUpdated));
16
+ return $isUpdated;
17
+ }
18
+
19
+ public function items($productId, $store = null, $identifierType = null) {
20
+ $list = parent::items($productId, $store, $identifierType);
21
+ Mage::dispatchEvent('inriver_list_product_attribute_media_api_after', array('list' => $list));
22
+ return $list;
23
+ }
24
+ }
app/code/community/InRiver/Catalog/Model/Product/Attribute/Set/Api.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class InRiver_Catalog_Model_Product_Attribute_Set_Api extends Mage_Catalog_Model_Product_Attribute_Set_Api {
4
+
5
+ public function create($attributeSetName, $skeletonSetId) {
6
+ Mage::dispatchEvent('inriver_create_product_attribute_set_api_before', array('attributeSetName' => $attributeSetName, 'skeletonSetId' => $skeletonSetId));
7
+ $id = parent::create($attributeSetName, $skeletonSetId);
8
+ Mage::dispatchEvent('inriver_create_product_attribute_set_api_after', array('id' => $id));
9
+ return $id;
10
+ }
11
+
12
+ public function remove($attributeSetId, $forceProductsRemove = false) {
13
+ Mage::dispatchEvent('inriver_remove_product_attribute_set_api_before', array('attributeSetId' => $attributeSetId));
14
+ $isRemoved = parent::remove($attributeSetId, $forceProductsRemove);
15
+ Mage::dispatchEvent('inriver_remove_product_attribute_set_api_after', array('isRemoved' => $isRemoved));
16
+ return $isRemoved;
17
+ }
18
+
19
+ public function items() {
20
+ $items = parent::items();
21
+ Mage::dispatchEvent('inriver_list_product_attribute_set_api_after', array('items' => $items));
22
+ return $items;
23
+ }
24
+
25
+ public function groupAdd($attributeSetId, $groupName) {
26
+ Mage::dispatchEvent('inriver_attribute_set_group_add_api_before', array('attributeSetId' => $attributeSetId, 'groupName' => $groupName));
27
+ $id = parent::groupAdd($attributeSetId, $groupName);
28
+ Mage::dispatchEvent('inriver_attribute_set_group_add_api_after', array('id' => $id));
29
+ return $id;
30
+ }
31
+
32
+ public function groupList($attributeSetId) {
33
+ Mage::dispatchEvent('inriver_create_attribute_set_group_list_api_before', array('attributeSetId' => $attributeSetId));
34
+ $write = Mage::getSingleton('core/resource')->getConnection('core_write');
35
+ $readresult = $write->query("SELECT `attribute_group_id` , `attribute_group_name` FROM `eav_attribute_group` WHERE `attribute_set_id` =" . $attributeSetId);
36
+
37
+ while ($row = $readresult->fetch()) {
38
+ $groups[] = $row['attribute_group_name'];
39
+ $groups[] = $row['attribute_group_id'];
40
+ }
41
+ Mage::dispatchEvent('inriver_create_attribute_set_group_list_api_after', array('group_id' => $groups));
42
+ return $groups;
43
+ }
44
+
45
+ public function attributeAdd($attributeId, $attributeSetId, $attributeGroupId = null, $sortOrder = '0') {
46
+ Mage::dispatchEvent('inriver_attribute_set_attribute_add_api_before', array('attributeId' => $attributeId, 'attributeSetId' => $attributeSetId, 'attributeGroupId' => $attributeGroupId, 'sortOrder' => $sortOrder));
47
+ $isAdded = parent::attributeAdd($attributeId, $attributeSetId, $attributeGroupId, $sortOrder);
48
+ Mage::dispatchEvent('inriver_attribute_set_attribute_add_api_after', array('isAdded' => $isAdded));
49
+ return $isAdded;
50
+ }
51
+
52
+ public function attributesForGroupId($attributeGroupId) {
53
+ Mage::dispatchEvent('inriver_create_attribute_set_attributesForGroupId_before', array('attributeSetId' => $attributeGroupId));
54
+
55
+ $attributeCodes = array();
56
+ $attributes = Mage::getResourceModel('catalog/product_attribute_collection')
57
+ ->setAttributeGroupFilter($attributeGroupId)
58
+ ->addVisibleFilter()
59
+ ->checkConfigurableProducts()
60
+ ->load();
61
+
62
+ if ($attributes->getSize() > 0) {
63
+ foreach ($attributes->getItems() as $attribute) {
64
+ $attributeCodes[] = $attribute->getAttributeCode();
65
+ }
66
+ }
67
+ Mage::dispatchEvent('inriver_create_attribute_set_attributesForGroupId_after', array('group_id' => $attributeCodes));
68
+ return $attributeCodes;
69
+ }
70
+ }
app/code/community/InRiver/Catalog/Model/Store/Api.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class InRiver_Catalog_Model_Store_Api extends Mage_Core_Model_Store_Api
4
+ {
5
+ public function items()
6
+ {
7
+ $items = parent::items();
8
+ Mage::dispatchEvent('inriver_list_store_api_after', array('items' => $items));
9
+ return $items;
10
+ }
11
+ }
app/code/community/InRiver/Catalog/etc/api.xml ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <api>
4
+ <resources>
5
+ <catalog_category translate="title" module="catalog">
6
+ <title>Category</title>
7
+ <model>catalog/category_api</model>
8
+ <methods>
9
+ </methods>
10
+ </catalog_category>
11
+ <catalog_product translate="title" module="catalog">
12
+ <title>Product</title>
13
+ <model>catalog/product_api</model>
14
+ <methods>
15
+ <defineSuperAttributesForProduct translate="title" module="catalog">
16
+ <title>Define Super attributes</title>
17
+ </defineSuperAttributesForProduct>
18
+ <findSuperLinks translate="title" module="catalog">
19
+ <title>List super links for product</title>
20
+ </findSuperLinks>
21
+ <addSuperLink translate="title" module="catalog">
22
+ <title>Add Super Links</title>
23
+ </addSuperLink>
24
+ <getProductFromEntityId translate="title" module="catalog">
25
+ <title>GetProductFromEntityId</title>
26
+ </getProductFromEntityId>
27
+ <deleteSuperLink translate="title" module="catalog">
28
+ <title>deleteSuperLink</title>
29
+ </deleteSuperLink>
30
+ <listLinkCodes translate="title" module="catalog">
31
+ <title>listLinkCodes</title>
32
+ </listLinkCodes>
33
+ <findLinks translate="title" module="catalog">
34
+ <title>findLinks</title>
35
+ </findLinks>
36
+ </methods>
37
+ </catalog_product>
38
+ <catalog_product_attribute translate="title" module="catalog">
39
+ <title>Product Attribute</title>
40
+ <model>catalog/product_attribute_api</model>
41
+ <methods>
42
+ <listAllAttributes translate="title" module="catalog">
43
+ <title>listAllAttributes</title>
44
+ </listAllAttributes>
45
+ <updateAttributeOptions translate="title" module="catalog">
46
+ <title>updateAttributeOptions</title>
47
+ </updateAttributeOptions>
48
+ </methods>
49
+ </catalog_product_attribute>
50
+ <catalog_product_attribute_set translate="title" module="catalog">
51
+ <title>Product Attribute Set</title>
52
+ <model>catalog/product_attribute_set_api</model>
53
+ <methods>
54
+ <groupList translate="title" module="catalog">
55
+ <title>Group List</title>
56
+ </groupList>
57
+ <attributesForGroupId translate="title" module="catalog">
58
+ <title>attributesForGroupId</title>
59
+ </attributesForGroupId>
60
+ <create translate="title" module="catalog">
61
+ <title>create</title>
62
+ </create>
63
+ </methods>
64
+ </catalog_product_attribute_set>
65
+ <store translate="title" module="catalog">
66
+ <title>Store</title>
67
+ <model>catalog/store_api</model>
68
+ <methods>
69
+ </methods>
70
+ </store>
71
+ </resources>
72
+ </api>
73
+ </config>
app/code/community/InRiver/Catalog/etc/config.xml ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <InRiver_Catalog>
5
+ <version>0.0.1</version>
6
+ <depends>
7
+ <Mage_Catalog />
8
+ </depends>
9
+ </InRiver_Catalog>
10
+ </modules>
11
+ <global>
12
+ <models>
13
+ <catalog>
14
+ <rewrite>
15
+ <category_api>InRiver_Catalog_Model_Category_Api</category_api>
16
+ <product_api>InRiver_Catalog_Model_Product_Api</product_api>
17
+ <product_attribute_api>InRiver_Catalog_Model_Product_Attribute_Api</product_attribute_api>
18
+ <product_attribute_media_api>InRiver_Catalog_Model_Product_Attribute_Media_Api</product_attribute_media_api>
19
+ <product_attribute_set_api>InRiver_Catalog_Model_Product_Attribute_Set_Api</product_attribute_set_api>
20
+ <store_api>InRiver_Catalog_Model_Store_Api</store_api>
21
+ </rewrite>
22
+ </catalog>
23
+ </models>
24
+ </global>
25
+ </config>
package.xml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>InRiver_PIM_Extension</name>
4
+ <version>5.3.0.0</version>
5
+ <stability>stable</stability>
6
+ <license>GNU General Public License (GPL)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Integrate inRiver PIM &amp; Magento with this extension package</summary>
10
+ <description>inRiver Product Information Management (PIM) handle all product data like creating and editing. With inRiver Connect running modifications in inRiver PIM will send events to Magento, keeping your information in sync. For instance a deletion of a product in inRiver PIM triggers automatically a deletion in Magento.&#xD;
11
+ &#xD;
12
+ Where is it possible, the standard SOAP v1 Api is used, but there are cases where it has been extended. For that reason we have the inRiver Magento Extension. </description>
13
+ <notes>First Stable Version.</notes>
14
+ <authors><author><name>Andreas Hellstr&#xF6;m</name><user>andhel</user><email>andreas.hellstrom@inriver.com</email></author><author><name>Fredrik Lundgren</name><user>fredriklundgren</user><email>fredrik.lundgren@inriver.com</email></author></authors>
15
+ <date>2014-01-10</date>
16
+ <time>09:01:09</time>
17
+ <contents><target name="magecommunity"><dir name="InRiver"><dir name="Catalog"><dir name="Helper"><file name="Data.php" hash="87979710c30d9b86cb8d5df2b579db2c"/></dir><dir name="Model"><dir name="Category"><file name="Api.php" hash="33d959b04f0f9244fcbe4cd9921558f4"/></dir><dir name="Product"><file name="Api.php" hash="e36745486a9ea563ab3923586c7314af"/><dir name="Attribute"><file name="Api.php" hash="ab0fcd65f0c8a544d7b3ef0e88d2bdc6"/><dir name="Media"><file name="Api.php" hash="595b1a985aa16f888cc2c77ac73e90ff"/></dir><dir name="Set"><file name="Api.php" hash="49dec7aaf7ac9df7ba6dda9a147b0b4c"/></dir></dir></dir><dir name="Store"><file name="Api.php" hash="8ba907b0be5ccd468804c56fd502d692"/></dir></dir><dir name="etc"><file name="api.xml" hash="5bdcb2234ca8bda6c53c541fe42d8305"/><file name="config.xml" hash="5fb21519284e975ae996d1b7a96381c7"/></dir></dir></dir></target></contents>
18
+ <compatible/>
19
+ <dependencies><required><php><min>5.4.0</min><max>5.5.6</max></php></required></dependencies>
20
+ </package>