IMerchandise_Sync - Version 1.0.0

Version Notes

Stable version

Download this release

Release Info

Developer Dan Dumitrascu
Extension IMerchandise_Sync
Version 1.0.0
Comparing to
See all releases


Version 1.0.0

app/code/community/IMerchandise/.DS_Store ADDED
Binary file
app/code/community/IMerchandise/Sync/.DS_Store ADDED
Binary file
app/code/community/IMerchandise/Sync/Helper/Data.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+ class IMerchandise_Sync_Helper_Data extends Mage_Core_Helper_Abstract
3
+ {
4
+
5
+ }
6
+ ?>
app/code/community/IMerchandise/Sync/Model/Core/Api.php ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class IMerchandise_Sync_Model_Core_Api extends Mage_Api_Model_Resource_Abstract
3
+ {
4
+
5
+ public function getCurrentRootCategoryID(){
6
+ $catID=Mage::app()->getStore()->getRootCategoryId();
7
+ return (string)$catID;
8
+ }
9
+
10
+ public function createConfigAttribute($productSku,$attributeId,$label){
11
+
12
+ // Load the product
13
+ $product = Mage::getModel('catalog/product')->setStoreId(0);
14
+ $product=Mage::getModel('catalog/product')->loadByAttribute('sku',$productSku);
15
+
16
+ if (!$product) {
17
+ $this->_fault('configurable_product_does_not_exist');
18
+ }
19
+
20
+ $attribute = Mage::getModel('catalog/entity_attribute')->setStoreId(0);
21
+ $attribute->load($attributeId);
22
+
23
+ if ($product && $attribute){
24
+ // Check that the configurable attribute doesn't already exist for the configurable product.
25
+ $product_configurable_attributes = $product->getTypeInstance()->getConfigurableAttributesAsArray();
26
+ foreach($product_configurable_attributes as $attrib){
27
+ if ($attributeId==$attrib["attribute_id"]){
28
+ $this->_fault('configurable_attribute_already_exists');
29
+ }
30
+ }
31
+ $configurableAttribute = Mage::getModel("catalog/product_type_configurable_attribute");
32
+ $configurableAttribute->setProductId($product->getId());
33
+ $configurableAttribute->setAttributeId($attributeId);
34
+ $configurableAttribute->setPosition(0);
35
+ $configurableAttribute->setStoreId(0);
36
+ $configurableAttribute->setLabel($label);
37
+ $configurableAttribute->save();
38
+ $configurableAttribute->setValues(null);
39
+ $configurableAttribute->save();
40
+ return $configurableAttribute->getId();
41
+ }
42
+ return false;
43
+ }
44
+
45
+ public function assignProductsToConfigurable($configurableProductSku,array $productSkus){
46
+ $configurable_product=Mage::getModel('catalog/product')->loadByAttribute('sku',$configurableProductSku);
47
+ if (!$configurable_product) {
48
+ $this->_fault('configurable_product_does_not_exist');
49
+ }
50
+
51
+ $children_id_array=Mage::getResourceSingleton('catalog/product_type_configurable')->getChildrenIds($configurable_product->getId());
52
+
53
+ $childrenIds=$children_id_array[0];
54
+ /**
55
+ foreach ($children_id_array as $key->$value){
56
+ $childrenIds[$value]=$value;
57
+ }
58
+ */
59
+ $product = Mage::getModel('catalog/product');
60
+
61
+
62
+ foreach($productSkus as $sku){
63
+ $productId = $product->getIdBySku($sku);
64
+ if ($productId){
65
+ if(!array_key_exists($productId,$childrenIds)){
66
+ $childrenIds[$productId]=$productId;
67
+ }
68
+ }
69
+ }
70
+ $configurable_product->setConfigurableProductsData($childrenIds);
71
+ //$configurable_product->setHasOptions(true);
72
+ $configurable_product->setRequiredOptions(true);
73
+ Mage::log('Product from iMerchandise Sync:');
74
+ Mage::log($configurable_product);
75
+ $configurable_product->save();
76
+ return true;
77
+
78
+ }
79
+ public function createAttributeOption($attributeId,$option_label){
80
+ $attribute = Mage::getModel('catalog/product')
81
+ ->setStoreId(0)
82
+ ->getResource()
83
+ ->getAttribute($attributeId);
84
+ if (!$attribute->getId()) {
85
+ $this->_fault('attribute_does_not_exist');
86
+ }
87
+ foreach ($attribute->getSource()->getAllOptions(true) as $option){
88
+ if (strcmp($option_label,$option['label']) == 0){
89
+ $this->_fault('attribute_option_already_exists');
90
+ }
91
+ }
92
+ $option=array();
93
+ $option['attribute_id'] = $attributeId;
94
+ $option['value']['new_option'][0] = $option_label;
95
+ $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
96
+ $setup->addAttributeOption($option);
97
+ // Since the addAtributeOption does not return a value, we will have to parse out the new option by name and return it's id.
98
+
99
+ $attribute->save();
100
+
101
+ $collection = Mage::getResourceModel('eav/entity_attribute_option_collection')
102
+ ->addFieldToFilter('attribute_id',$attributeId)
103
+ ->join('attribute_option_value','main_table.option_id=attribute_option_value.option_id')
104
+ ->addFieldToFilter('value',$option_label);
105
+ $new_option = $collection->getFirstItem();
106
+
107
+ return $new_option->getId();
108
+ }
109
+
110
+
111
+ private function getProductEntityTypeId()
112
+ {
113
+ return Mage::getModel('catalog/product')->getResource()->getEntityType();
114
+ }
115
+
116
+ public function createAssignAttribute($code, $label){
117
+ $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
118
+ $data=array(
119
+ 'label' => $label,
120
+ 'type' => 'varchar',
121
+ 'input' => 'select',
122
+ 'backend' => 'eav/entity_attribute_backend_array',
123
+ 'frontend' => '',
124
+ 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
125
+ 'visible' => true,
126
+ 'required' => true,
127
+ 'user_defined' => true,
128
+ 'searchable' => false,
129
+ 'filterable' => false,
130
+ 'comparable' => false,
131
+ 'option' => array (
132
+ 'value' => array()
133
+ ),
134
+ 'visible_on_front' => false,
135
+ 'visible_in_advanced_search' => false,
136
+ 'unique' => false,
137
+ 'configurable' =>true
138
+ );
139
+ $model = $setup->addAttribute('catalog_product', $code,$data);
140
+ $attribute=$setup->getAttribute('catalog_product', $code);
141
+ return $attribute['attribute_id'];
142
+
143
+ }
144
+
145
+ public function skuExists($sku){
146
+ $product=Mage::getModel('catalog/product')->loadByAttribute('sku',$sku);
147
+ if ($product)
148
+ {
149
+ return true;
150
+ }
151
+ return false;
152
+ }
153
+
154
+
155
+ }
156
+ ?>
app/code/community/IMerchandise/Sync/etc/api.xml ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <api>
3
+ <resources>
4
+ <imerchandise_sync translate="title" module="im_sync">
5
+ <title>iMerchandise Sync API calls</title>
6
+ <model>im_sync/core_api</model>
7
+ <acl>imerchandise/sync</acl>
8
+ <methods>
9
+ <getCurrentRootCategoryID translate="title" module="im_sync">
10
+ <title>Returns the id of the root category of the current store</title>
11
+ <acl>imerchandise/sync/allaccess</acl>
12
+ </getCurrentRootCategoryID>
13
+ <createConfigAttribute translate="title" module="im_sync">
14
+ <title>Create a configurable attribute for a configurable product</title>
15
+ <acl>imerchandise/sync/allaccess</acl>
16
+ </createConfigAttribute>
17
+ <assignProductsToConfigurable translate="title" module="im_sync">
18
+ <title>Assign a simple product to a configurable product</title>
19
+ <acl>imerchandise/sync/allaccess</acl>
20
+ </assignProductsToConfigurable>
21
+ <createAttributeOption translate="title" module="im_sync">
22
+ <title>Create an option for an existing product attribute</title>
23
+ <acl>imerchandise/sync/allaccess</acl>
24
+ </createAttributeOption>
25
+ <skuExists translate="title" module="im_sync">
26
+ <title>Checks if a sku exists</title>
27
+ <acl>imerchandise/sync/allaccess</acl>
28
+ </skuExists>
29
+ <createAssignAttribute translate="title" module="im_sync">
30
+ <title>Creates an attribute to be used by configurable products</title>
31
+ <acl>imerchandise/sync/allaccess</acl>
32
+ </createAssignAttribute>
33
+
34
+ </methods>
35
+ <faults module="core">
36
+ <configurable_product_does_not_exist>
37
+ <code>100</code>
38
+ <message>Configurable product does not exist.</message>
39
+ </configurable_product_does_not_exist>
40
+ <attribute_does_not_exist>
41
+ <code>101</code>
42
+ <message>Configurable attribute does not exist.</message>
43
+ </attribute_does_not_exist>
44
+ <configurable_attribute_already_exists>
45
+ <code>102</code>
46
+ <message>Configurable attribute already exists for configurable product.</message>
47
+ </configurable_attribute_already_exists>
48
+ <attribute_create_error>
49
+ <code>103</code>
50
+ <message>Couldn't create the a attribute.</message>
51
+ </attribute_create_error>
52
+ <option_does_not_exist>
53
+ <code>104</code>
54
+ <message>Option does not exist.</message>
55
+ </option_does_not_exist>
56
+ <attribute_option_already_exists>
57
+ <code>105</code>
58
+ <message>Option already exists for attribute.</message>
59
+ </attribute_option_already_exists>
60
+ <category_does_not_exist>
61
+ <code>106</code>
62
+ <message>Category does not exist.</message>
63
+ </category_does_not_exist>
64
+ <product_does_not_exist>
65
+ <code>107</code>
66
+ <message>Product does not exist</message>
67
+ </product_does_not_exist>
68
+ </faults>
69
+ </imerchandise_sync>
70
+ </resources>
71
+ <resources_alias>
72
+ <core>im_sync</core>
73
+ </resources_alias>
74
+ <acl>
75
+ <resources>
76
+ <imerchandise translate="title" module="im_sync">
77
+ <title>iMerchandise</title>
78
+ <sort_order>100</sort_order>
79
+ <sync translate="title" module="im_sync">
80
+ <title>Sync</title>
81
+ <sort_order>100</sort_order>
82
+ <allaccess translate="title" module="im_sync">
83
+ <title>iMerchandise Sync access.</title>
84
+ <sort_order>10</sort_order>
85
+ </allaccess>
86
+ </sync>
87
+ </imerchandise>
88
+ </resources>
89
+ </acl>
90
+ </api>
91
+ </config>
app/code/community/IMerchandise/Sync/etc/config.xml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <IMerchandise_Sync>
4
+ <version>0.0.0.1</version>
5
+ </IMerchandise_Sync>
6
+ </modules>
7
+ <global>
8
+ <models>
9
+ <im_sync>
10
+ <class>IMerchandise_Sync_Model</class>
11
+ </im_sync>
12
+ </models>
13
+ <helpers>
14
+ <im_sync>
15
+ <class>IMerchandise_Sync_Helper</class>
16
+ </im_sync>
17
+ </helpers>
18
+ </global>
19
+ </config>
app/etc/modules/IMerchandise_Sync.xml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <IMerchandise_Sync>
4
+ <active>true</active>
5
+ <codePool>community</codePool>
6
+ <depends>
7
+ <Mage_Api />
8
+ </depends>
9
+ </IMerchandise_Sync>
10
+ </modules>
11
+ </config>
package.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>IMerchandise_Sync</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Is used by iMerchandise iOS application for synchronizing with Magento.</summary>
10
+ <description>Is used by iMerchandise iOS application for synchronizing with Magento.</description>
11
+ <notes>Stable version</notes>
12
+ <authors><author><name>Dan Dumitrascu</name><user>ddumitrascu</user><email>ddumitrascu@gmail.com</email></author></authors>
13
+ <date>2013-06-11</date>
14
+ <time>15:11:36</time>
15
+ <contents><target name="magecommunity"><dir name="IMerchandise"><dir name="Sync"><dir name="Helper"><file name="Data.php" hash="9627ae65741b47f72c8fe9b46812a3f4"/></dir><dir name="Model"><dir name="Core"><file name="Api.php" hash="e18b8d0a7011ca7c3aa6fb78ab82965e"/></dir></dir><dir name="etc"><file name="api.xml" hash="524b180f4f32490800c40cd84e880203"/><file name="config.xml" hash="d65b53ec4c2a5346db82ac60560a2f0c"/></dir><file name=".DS_Store" hash="c510d69530e48d2dc10dc588e527decd"/></dir><file name=".DS_Store" hash="3455fdd0e64ee39aaea229612fc7ccbf"/></dir></target><target name="mageetc"><dir name="modules"><file name="IMerchandise_Sync.xml" hash="9b6b5c7a238ce5609895d1afc47e576e"/></dir></target></contents>
16
+ <compatible/>
17
+ <dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php><package><name>Mage_Api</name><channel>community</channel><min>1.6.0.0</min><max>1.7</max></package></required></dependencies>
18
+ </package>