GOtags_GOtags - Version 0.0.1

Version Notes

GOtags service is currently under beta, as such this process may change and the terms of the module may change in later versions.

Download this release

Release Info

Developer Ashley White
Extension GOtags_GOtags
Version 0.0.1
Comparing to
See all releases


Version 0.0.1

app/code/community/Gotags/Gotags/Block/Adminhtml/Gotagsbackend.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+
3
+ class Gotags_Gotags_Block_Adminhtml_Gotagsbackend extends Mage_Adminhtml_Block_Template {
4
+
5
+ }
app/code/community/Gotags/Gotags/Helper/Data.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+ class Gotags_Gotags_Helper_Data extends Mage_Core_Helper_Abstract
3
+ {
4
+ }
5
+
app/code/community/Gotags/Gotags/Model/Api.php ADDED
@@ -0,0 +1,305 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Gotags_Gotags_Model_Api extends Mage_Api_Model_Resource_Abstract {
4
+
5
+ protected $_storeId;
6
+
7
+ /**
8
+ * Find a product by it's rewrite
9
+ *
10
+ * @param array $filters
11
+ *
12
+ * @return array
13
+ */
14
+ public function search($filters) {
15
+
16
+ if (!array_key_exists('sku', $filters) || !trim($filters['sku']))
17
+ $this->_fault('filters_invalid', 'sku missing from filter array');
18
+
19
+ $product = $this->_findProductBySku($filters['sku']);
20
+
21
+ if (!$product)
22
+ $this->_fault('product_not_found', "no product found for ({$filters['sku']}");
23
+
24
+ return array(
25
+ 'filters' => $filters,
26
+ 'product' => $product->getData(),
27
+ );
28
+
29
+ }
30
+
31
+ /**
32
+ * Use the rewrite index to find a product
33
+ *
34
+ * @param $sku
35
+ *
36
+ * @return Mage_Catalog_Model_Product
37
+ */
38
+ protected function _findProductBySku($sku) {
39
+
40
+ $productid = Mage::getModel('catalog/product')->getIdBySku(trim($sku));
41
+ if(!$productid)
42
+ return null;
43
+
44
+ $product = new Mage_Catalog_Model_Product();
45
+ $product->load($productid);
46
+
47
+ return $product->getId() ? $product : null;
48
+
49
+ }
50
+
51
+ /**
52
+ * Check the database and return valid users by their email address
53
+ *
54
+ * @param array $users
55
+ *
56
+ * @return array
57
+ */
58
+ protected function _getValidUsers(array $users) {
59
+
60
+ /**
61
+ * get the default store id
62
+ * @todo there should be a better way of doing this
63
+ */
64
+ $websites = Mage::app()->getWebsites();
65
+ $defaultId = array_shift($websites)->getId();
66
+
67
+ $valid = array();
68
+
69
+ foreach ($users as $_email) {
70
+
71
+ if (!filter_var($_email, FILTER_VALIDATE_EMAIL))
72
+ continue;
73
+
74
+ /** @var Mage_Customer_Model_Customer $customer */
75
+ $customer = Mage::getModel("customer/customer");
76
+ $customer->setWebsiteId($defaultId);
77
+ $customer->loadByEmail($_email);
78
+
79
+ if ($customer && $customer->getId())
80
+ $valid[] = $customer;
81
+
82
+ }
83
+
84
+ return $valid;
85
+
86
+ }
87
+
88
+ /**
89
+ * Returns the first store id
90
+ * @todo there should be a better way of doing this
91
+ * @return int
92
+ */
93
+ protected function _getStoreId() {
94
+
95
+ if (!$this->_storeId) {
96
+
97
+ $stores = Mage::app()->getStores();
98
+ $this->_storeId = array_shift($stores)->getId();
99
+
100
+ }
101
+
102
+ return $this->_storeId;
103
+
104
+ }
105
+
106
+ /**
107
+ * Lookup product and add it to the customer cart
108
+ *
109
+ * @param array $filters
110
+ *
111
+ * @return array
112
+ */
113
+ public function addProduct($filters) {
114
+
115
+ if (!array_key_exists('sku', $filters) || !trim($filters['sku']))
116
+ $this->_fault('filters_invalid', 'sku missing from filter array');
117
+
118
+ if (!array_key_exists('customers', $filters) || !trim($filters['customers']))
119
+ $this->_fault('filters_invalid', 'customers missing from filter array');
120
+
121
+ $filters['customers'] = explode(',', trim($filters['customers']));
122
+ if (!count($filters['customers']))
123
+ $this->_fault('filters_invalid', 'customers key passed but empty');
124
+
125
+ $filters['customers'] = $this->_getValidUsers($filters['customers']);
126
+
127
+ if (!count($filters['customers']))
128
+ $this->_fault('filters_invalid', 'customers key passed but no valid customers found');
129
+
130
+
131
+ /**
132
+ * find the product by sku
133
+ */
134
+
135
+ /** @var Mage_Catalog_Model_Product $product */
136
+ $product = $this->_findProductBySku($filters['sku']);
137
+ if (!$product)
138
+ $this->_fault('product_not_found', "Product with given sku ({$filters['sku']}) not found");
139
+
140
+ if ($product->getTypeId() == 'bundle')
141
+ $this->_fault('not_supported', "Bundled products are not supported");
142
+
143
+ if ($product->getTypeId() == 'grouped')
144
+ $this->_fault('not_supported', "Grouped products are not supported");
145
+
146
+ /**
147
+ * If we have options, try to find the closest product attributes
148
+ */
149
+ $optionsToUse = array();
150
+
151
+ if (array_key_exists('options', $filters) && is_array($filters['options'])) {
152
+
153
+ $filters['options'] = array_map('strtolower', $filters['options']);
154
+
155
+ /**
156
+ * For the options to work, we need the configurable product
157
+ */
158
+ if (!$product->isConfigurable()) {
159
+
160
+ $parentIds = Mage::getResourceSingleton('catalog/product_type_configurable')->getParentIdsByChild($product->getId());
161
+
162
+ /**
163
+ * try to find a configurable parent
164
+ */
165
+ if (count($parentIds)) {
166
+
167
+ $_parentLookup = new Mage_Catalog_Model_Product();
168
+ $_parentLookup->load($parentIds[0]);
169
+ $product = $_parentLookup->getId() ? $_parentLookup : null;
170
+
171
+ }
172
+
173
+ }
174
+
175
+ /**
176
+ * With the configurable product, try to find the best suited options
177
+ */
178
+ if($product->isConfigurable()) {
179
+
180
+ $_bestSuitedAttributes = [];
181
+ $_tmpOptions = $filters['options'];
182
+
183
+ /** @var Mage_Catalog_Model_Product_Type_Configurable_Attribute $_attr */
184
+ foreach ($product->getTypeInstance(true)->getConfigurableAttributes($product) as $_attr) {
185
+
186
+ $_prices = $_attr->getPrices();
187
+ if (is_array($_prices))
188
+ foreach ($_prices as $_item) {
189
+
190
+ foreach ($_tmpOptions as $_opt) {
191
+
192
+ if ($_opt == strtolower($_item['label'])) {
193
+
194
+ $_bestSuitedAttributes[$_opt] = array(
195
+ 'attribute_id' => $_attr->getAttributeId(),
196
+ 'attribute_code' => $_attr->getAttributeCode(),
197
+ 'attribute_label' => $_attr->getLabel(),
198
+ 'option_id' => $_item['value_index'],
199
+ );
200
+
201
+ unset($_tmpOptions[$_opt]);
202
+
203
+ }
204
+
205
+ }
206
+
207
+ }
208
+
209
+ }
210
+
211
+ /**
212
+ * If these two are equal, we found the correct product!
213
+ * convert the attributes to the array required later
214
+ */
215
+ $optionsToUse = array('super_attribute' => array());
216
+ if (count($_bestSuitedAttributes) == count($filters['options'])) {
217
+
218
+ foreach ($_bestSuitedAttributes as $_attr)
219
+ $optionsToUse['super_attribute'][(int) $_attr['attribute_id']] = (int) $_attr['option_id'];
220
+
221
+ }
222
+
223
+ if (empty($optionsToUse['super_attribute']))
224
+ $this->_fault('product_not_found', "Configurable product found, but options didn't match");
225
+
226
+ }
227
+
228
+ }
229
+
230
+ if (!$product)
231
+ $this->_fault('product_not_found', "no product found for ({$filters['sku']}");
232
+
233
+ if ($product->isConfigurable() && empty($optionsToUse))
234
+ $this->_fault('product_not_found', "Configurable product given, but options were not provided");
235
+
236
+ /**
237
+ * get the product and add it to the customer carts
238
+ */
239
+ $_varien = new Varien_Object(array_merge(array(
240
+ 'product' => $product->getId(),
241
+ 'qty' => 1,
242
+ ), $optionsToUse));
243
+
244
+ /** @var Mage_Customer_Model_Customer $_customer */
245
+ foreach ($filters['customers'] as $_customer) {
246
+
247
+ try {
248
+
249
+ /**
250
+ * try to find a cart for the customer
251
+ */
252
+ /** @var Mage_Sales_Model_Resource_Quote_Collection $_quoteLookup */
253
+ $_quoteLookup = Mage::getModel('sales/quote')->getCollection();
254
+ $_quoteLookup->addFieldToSelect('entity_id');
255
+ $_quoteLookup->addFieldToFilter('customer_id', $_customer->getId());
256
+ $_quoteLookup->addFieldToFilter('is_active', 1);
257
+ $_quoteLookup->addOrder('entity_id', 'DESC');
258
+ $_customerQuoteId = $_quoteLookup->load()->getFirstItem()->getId();
259
+
260
+
261
+ /**
262
+ * no cart found so create one
263
+ */
264
+ if (!$_customerQuoteId) {
265
+
266
+ /** @var Mage_Checkout_Model_Cart_Api $cart_api */
267
+ $cart_api = Mage::getModel('checkout/cart_api');
268
+ $_customerQuoteId = $cart_api->create($this->_getStoreId());
269
+
270
+ }
271
+
272
+ $_currentCart = Mage::getModel('sales/quote')->loadByIdWithoutStore($_customerQuoteId);
273
+ $_currentCart->setIsActive(true);
274
+
275
+ /**
276
+ * Cloning the product is required as it gets modified somewhere down the code pile
277
+ */
278
+ $_temp = clone $product;
279
+ $res = $_currentCart->addProduct($_temp, $_varien);
280
+
281
+ if(is_string($res)) // a string thrown is an error
282
+ $this->_fault('cart_error', $res);
283
+
284
+ $_currentCart->setCustomer($_customer);
285
+ $_currentCart->assignCustomer($_customer);
286
+ $_currentCart->collectTotals();
287
+ $_currentCart->save();
288
+
289
+ } catch(Exception $e) {
290
+ $this->_fault('cart_error', $e->getMessage());
291
+ }
292
+
293
+ }
294
+
295
+ return array(
296
+ 'sku' => $filters['sku'],
297
+ 'customers' => array_map(function ($item) {
298
+ return $item->getData();
299
+ }, $filters['customers']),
300
+ 'product' => $product->getData(),
301
+ 'options' => $_varien->getData(),
302
+ );
303
+
304
+ }
305
+ }
app/code/community/Gotags/Gotags/controllers/Adminhtml/GotagsbackendController.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Gotags_Gotags_Adminhtml_GotagsbackendController extends Mage_Adminhtml_Controller_Action
3
+ {
4
+ public function indexAction()
5
+ {
6
+ $this->loadLayout();
7
+ $this->_title($this->__("GOtags"));
8
+ $this->renderLayout();
9
+ }
10
+ }
app/code/community/Gotags/Gotags/etc/api.xml ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <api>
4
+ <resources>
5
+ <gotags_api translate="title" module="gotags">
6
+ <title>Gotags</title>
7
+ <acl>gotags_api</acl>
8
+ <model>gotags/api</model>
9
+ <methods>
10
+ <search translate="title" module="gotags">
11
+ <title>Search items</title>
12
+ <acl>gotags_api/search</acl>
13
+ </search>
14
+ <addproduct translate="title" module="gotags">
15
+ <title>Add product to basket</title>
16
+ <acl>gotags_api/addproduct</acl>
17
+ </addproduct>
18
+ </methods>
19
+ <faults module="gotags">
20
+ <filters_invalid>
21
+ <code>100</code>
22
+ <message>Invalid filters specified. Details in error message.</message>
23
+ </filters_invalid>
24
+ <product_not_found>
25
+ <code>102</code>
26
+ <message>Product doesn't exist.</message>
27
+ </product_not_found>
28
+ <customer_not_found>
29
+ <code>103</code>
30
+ <message>Customer not found.</message>
31
+ </customer_not_found>
32
+ <cart_error>
33
+ <code>104</code>
34
+ <message>Add to cart error.</message>
35
+ </cart_error>
36
+ <not_supported>
37
+ <code>105</code>
38
+ <message>Bundle items are not supported.</message>
39
+ </not_supported>
40
+ </faults>
41
+ </gotags_api>
42
+ </resources>
43
+ <acl>
44
+ <resources>
45
+ <gotags_api translate="title" module="gotags">
46
+ <title>Gotags</title>
47
+ <sort_order>2000</sort_order>
48
+ <search translate="title" module="gotags">
49
+ <title>Search items</title>
50
+ </search>
51
+ <addproduct translate="title" module="gotags">
52
+ <title>Add product to basket</title>
53
+ </addproduct>
54
+ </gotags_api>
55
+ </resources>
56
+ </acl>
57
+ </api>
58
+ </config>
app/code/community/Gotags/Gotags/etc/config.xml ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Gotags_Gotags>
5
+ <version>0.1.0</version>
6
+ </Gotags_Gotags>
7
+ </modules>
8
+ <global>
9
+ <helpers>
10
+ <gotags>
11
+ <class>Gotags_Gotags_Helper</class>
12
+ </gotags>
13
+ </helpers>
14
+ <blocks>
15
+ <gotags>
16
+ <class>Gotags_Gotags_Block</class>
17
+ </gotags>
18
+ </blocks>
19
+ </global>
20
+ <admin>
21
+ <routers>
22
+ <gotags>
23
+ <use>admin</use>
24
+ <args>
25
+ <module>Gotags_Gotags</module>
26
+ <frontName>gotags</frontName>
27
+ </args>
28
+ </gotags>
29
+ </routers>
30
+ </admin>
31
+ <adminhtml>
32
+ <menu>
33
+ <system>
34
+ <children>
35
+ <gotagsbackend module="gotags">
36
+ <title>GOtags</title>
37
+ <sort_order>0</sort_order>
38
+ <action>gotags/adminhtml_gotagsbackend</action>
39
+ </gotagsbackend>
40
+ </children>
41
+ </system>
42
+ </menu>
43
+ <acl>
44
+ <resources>
45
+ <all>
46
+ <title>Allow Everything</title>
47
+ </all>
48
+ <admin>
49
+ <children>
50
+ <gotags translate="title" module="gotags">
51
+ <title>Gotags</title>
52
+ <sort_order>1000</sort_order>
53
+ </gotags>
54
+ </children>
55
+ </admin>
56
+ </resources>
57
+ </acl>
58
+ <layout>
59
+ <updates>
60
+ <gotags>
61
+ <file>gotags.xml</file>
62
+ </gotags>
63
+ </updates>
64
+ </layout>
65
+ </adminhtml>
66
+ </config>
app/design/adminhtml/default/default/layout/gotags.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <gotags_adminhtml_gotagsbackend_index>
4
+ <reference name="content">
5
+ <block type="gotags/adminhtml_gotagsbackend" name="gotagsbackend" template="gotags/gotagsbackend.phtml"/>
6
+ </reference>
7
+ </gotags_adminhtml_gotagsbackend_index>
8
+ </layout>
app/design/adminhtml/default/default/template/gotags/gotagsbackend.phtml ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="content-header">
2
+ <h3>GOtags</h3>
3
+ </div>
4
+ <div>
5
+ <table>
6
+ <tr>
7
+ <td style="width:60%">
8
+ <h4>Step 1 - Enabling the SOAP API</h4>
9
+ <p>For GOtags to be able to communicate with your store, we need to be able to communicate via the SOAP API. To enable the SOAP API you must first create a user and role for GOtags, and then add this information to your GOtags account via the GOtags website. The video below shows the steps described below.</p>
10
+ <ol style="list-style-type: decimal-leading-zero; margin-left:50px;">
11
+ <li>In your store admin area, go to System -> Web Services -> <a href="<?php echo Mage::helper("adminhtml")->getUrl("adminhtml/api_role") ?>" target="_blank">SOAP/XML-RPC - Roles</a></li>
12
+ <li>
13
+ Click <em>Add New Role</em>
14
+ <ul style="list-style-type: disc; margin-left:50px;">
15
+ <li>Enter the Role Name, the example uses Gotags</li>
16
+ <li>Under Role Resources, ensure that the select entry is set to Custom</li>
17
+ <li>Find the Gotags checkbox and ensure both checkboxes are selected</li>
18
+ <li>Save the role</li>
19
+ </ul>
20
+ </li>
21
+ <li>Goto System -> Web Services -> <a href="<?php echo Mage::helper("adminhtml")->getUrl("adminhtml/api_user") ?>" target="_blank">SOAP/XML-RPC - Users</a></li>
22
+ <li>
23
+ Click <em>Add New User</em>
24
+ <ul style="list-style-type: disc; margin-left:50px;">
25
+ <li>Enter the require details in the form.</li>
26
+ <li>Ensure you use a secure username and API Key, and make a note of it - you'll need to give these details to GOtags later.</li>
27
+ <li>Here's a random string if you need one: <?php echo sha1('gotags_is_awesome_'.microtime()) ?></li>
28
+ <li>Save the user</li>
29
+ </ul>
30
+ </li>
31
+ </ol>
32
+ <h4 style="margin-top:50px">Step 2 - Connecting with GOtags</h4>
33
+ <p>For GOtags to be able to interact with your store, we need to know the details previously entered.</p>
34
+ <ol style="list-style-type: decimal-leading-zero; margin-left:50px;">
35
+ <li>Visit <a href="https://gotags.co.uk" target="_blank">the GOtags website</a></li>
36
+ <li>If you are not logged in, first connect with GOtags using your Instagram account</li>
37
+ <li>When logged in, go to <a href="https://gotags.co.uk/accounts" target="_blank">your accounts page</a> by clicking the link of following the link in the navigation</li>
38
+ <li>Click the edit icon on the account you wish to enter, it's name will be the same as your Instagram account by default</li>
39
+ <li>
40
+ In the details form, find the section "Magento Connect"
41
+ <ul style="list-style-type: disc; margin-left:50px;">
42
+ <li>Enter your domain name without any additional text (no "index.php")</li>
43
+ <li>Enter the username and API key previously created in Step 1</li>
44
+ <li>Save the form</li>
45
+ </ul>
46
+ </li>
47
+ </ol>
48
+ <h4 style="margin-top:50px">Step 3 - Check setup</h4>
49
+ <p>Click the below button to check your setup was successful:</p>
50
+ <p id="check-setup-messages"></p>
51
+ <a href="#" id="gotags-check" style="color: #fff; background-color: #d6443e; border-color: #cf322c; padding: 5px 10px; font-size: 16px; border-radius: 3px; margin:10px; display:inline-block">Check setup</a>
52
+ <script>
53
+ document.getElementById('gotags-check').onclick = function(event) {
54
+ event.preventDefault();
55
+ new Ajax.Request('https://gotags.co.uk/api/checkMagentoStatus', {
56
+ parameters: {
57
+ domain: location.protocol+'://'+location.host
58
+ },
59
+ method:'get',
60
+ requestHeaders: {Accept: 'application/json'},
61
+ onSuccess: function(response) {
62
+ if (response && response.responseJSON && response.responseJSON.code == 200) {
63
+ document.getElementById('check-setup-messages').innerHTML = 'All good! Setup successful';
64
+ document.getElementById('check-setup-messages').style.color = 'green';
65
+ } else {
66
+ document.getElementById('check-setup-messages').style.color = 'red';
67
+ document.getElementById('check-setup-messages').innerHTML = 'Unknown error';
68
+ }
69
+ },
70
+ onFailure: function(response) {
71
+ response.message = response.responseJSON.message ? response.responseJSON.message : 'None given [this is double bad]';
72
+ document.getElementById('check-setup-messages').style.color = 'red';
73
+ document.getElementById('check-setup-messages').innerHTML = 'Error! We couldn\'t verify your setup (error: '+response.message+')';
74
+ }
75
+ });
76
+ }
77
+ </script>
78
+ <h4 style="margin-top:50px">Using GOtags</h4>
79
+ <p>Your store should now be successfully connected with GOtags, and you can start to use GOtags within your Instagram photos. It's really simple: when uploading a picture to Instagram, simply enter the SKU code of the product into the location field, and tag @Gotags in the comment.</p>
80
+ <p>The rest is GOtag magic - when a user comments on your photo with "#buy" we'll try to add the item to their basket, if we can't we'll email them a link to your store product.</p>
81
+ <p><strong>Remember!</strong> Users can buy with options. For example, to buy jeans in size 32, and color "khaki", a user comments "#buy 32 khaki"</p>
82
+ </td>
83
+ <td style="width:40%">
84
+ <iframe width="560" height="315" src="https://gotags.co.uk/magento/embed" frameborder="0" allowfullscreen></iframe>
85
+ </td>
86
+ </tr>
87
+ </table>
88
+ </div>
package.xml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>GOtags_GOtags</name>
4
+ <version>0.0.1</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://www.gnu.org/copyleft/gpl.html">GNU General Public License v3 (GPL-3)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>GOtags monazites your Instagram photos by allowing your users to buy directly from your photo pages.</summary>
10
+ <description>Enabling this module allows the GOtags service to provide your Instagram users the ability to buy directly from your Instagram photo pages.&#xD;
11
+ &#xD;
12
+ Simply connect your Instagram account with GOtags, provide us some simple details, and tag @GOtags in your photos you wish to enable and we'll do the rest!&#xD;
13
+ &#xD;
14
+ https://gotags.co.uk</description>
15
+ <notes>GOtags service is currently under beta, as such this process may change and the terms of the module may change in later versions.</notes>
16
+ <authors><author><name>Ashley White</name><user>gotags</user><email>hello@gotags.co.uk</email></author></authors>
17
+ <date>2014-07-07</date>
18
+ <time>11:33:54</time>
19
+ <contents><target name="magecommunity"><dir name="Gotags"><dir name="Gotags"><dir name="Block"><dir name="Adminhtml"><file name="Gotagsbackend.php" hash="58b9abf59a5b0cad4c1e57306c7a0d18"/></dir></dir><dir name="Helper"><file name="Data.php" hash="6423d0cda77417cabc378396a5db9dcf"/></dir><dir name="Model"><file name="Api.php" hash="a2c96072dec575e1b72da3bf061d4d7a"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="GotagsbackendController.php" hash="c3097fa781ececd78d359130e163ccaa"/></dir></dir><dir name="etc"><file name="api.xml" hash="5bcbac16f44cd4d04034fcaa795e0f56"/><file name="config.xml" hash="4086c55e42511a1d40620bf713e37b1b"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="gotags"><file name="gotagsbackend.phtml" hash="bdc13469149436754e4bfcca750e8d91"/></dir></dir><dir name="layout"><file name="gotags.xml" hash="244d1cf285d1d41021ceeb79b80876a8"/></dir></dir></dir></dir></target></contents>
20
+ <compatible/>
21
+ <dependencies><required><php><min>5.5.0</min><max>5.5.14</max></php></required></dependencies>
22
+ </package>