MVentory_API - Version 1.6.0

Version Notes

* Bug fixes and refactoring
* Image Review moved into separate extension
* Compatibility with SUPEE-6788
* Allow category matching based on yes/no attributes

Note: Category matching has changed. All rules that match will be applied to make
assignment of a product to multiple categories easier.

Download this release

Release Info

Developer Anatoly A. Kazantsev
Extension MVentory_API
Version 1.6.0
Comparing to
See all releases


Code changes from version 1.5.1 to 1.6.0

Files changed (28) hide show
  1. app/code/community/MVentory/API/Block/Matching.php +30 -4
  2. app/code/community/MVentory/API/Block/System/Config/Form/Field/Exportrates.php +4 -2
  3. app/code/community/MVentory/API/Block/System/Config/Form/Field/Imgcliplog.php +2 -2
  4. app/code/community/MVentory/API/Block/System/Config/Form/Field/Template.php +52 -0
  5. app/code/community/MVentory/API/Helper/Data.php +4 -0
  6. app/code/community/MVentory/API/Helper/Imageclipper.php +4 -4
  7. app/code/community/MVentory/API/Helper/Product.php +5 -4
  8. app/code/community/MVentory/API/Model/Cart/Api.php +1 -6
  9. app/code/community/MVentory/API/Model/Config.php +8 -2
  10. app/code/community/MVentory/API/Model/Matching.php +28 -9
  11. app/code/community/MVentory/API/Model/Observer.php +19 -5
  12. app/code/community/MVentory/API/Model/Product/Api.php +3 -1
  13. app/code/community/MVentory/API/Model/Product/Attribute/Media/Api.php +5 -3
  14. app/code/community/MVentory/API/Model/{System/Config/Backend/Imgclip/Backupfolder.php → Setting/Backend/Backupdir.php} +30 -6
  15. app/code/community/MVentory/API/Model/System/Config/Backend/Imgclip/Csvlog.php +0 -49
  16. app/code/community/MVentory/API/controllers/DropboxController.php +4 -2
  17. app/code/community/MVentory/API/controllers/{CarriersController.php → Mventory/CarriersController.php} +5 -1
  18. app/code/community/MVentory/API/controllers/{Catalog → Mventory/Catalog}/ProductController.php +7 -3
  19. app/code/community/MVentory/API/controllers/{CustomerController.php → Mventory/CustomerController.php} +7 -6
  20. app/code/community/MVentory/API/controllers/{LogsController.php → Mventory/LogsController.php} +5 -1
  21. app/code/community/MVentory/API/controllers/{MatchingController.php → Mventory/MatchingController.php} +5 -1
  22. app/code/community/MVentory/API/etc/config.xml +5 -5
  23. app/code/community/MVentory/API/etc/system.xml +0 -244
  24. app/design/adminhtml/default/default/template/mventory/config/build-info.phtml +2 -2
  25. app/design/adminhtml/default/default/template/mventory/matching.phtml +3 -5
  26. package.xml +8 -3
  27. skin/adminhtml/default/default/mventory/css/styles.css +26 -11
  28. var/connect/MVentory_API.xml +8 -3
app/code/community/MVentory/API/Block/Matching.php CHANGED
@@ -30,6 +30,8 @@ class MVentory_API_Block_Matching extends Mage_Adminhtml_Block_Template {
30
  protected $_categories = null;
31
 
32
  protected function _construct () {
 
 
33
  $this->_attrs['-1'] = array(
34
  'label' => $this->__('Select an attribute...'),
35
  'used' => false,
@@ -47,7 +49,7 @@ class MVentory_API_Block_Matching extends Mage_Adminhtml_Block_Template {
47
 
48
  $type = $attr->getFrontendInput();
49
 
50
- if (!($type == 'select' || $type == 'multiselect'))
51
  continue;
52
 
53
  $id = $attr->getId();
@@ -58,6 +60,9 @@ class MVentory_API_Block_Matching extends Mage_Adminhtml_Block_Template {
58
  'used_values' => array()
59
  );
60
 
 
 
 
61
  $labels[] = $attr->getFrontendLabel();
62
  }
63
 
@@ -138,9 +143,9 @@ class MVentory_API_Block_Matching extends Mage_Adminhtml_Block_Template {
138
  'ajax' => true
139
  );
140
 
141
- $addrule = $this->getUrl('mventory/matching/append/', $params);
142
- $remove = $this->getUrl('mventory/matching/remove/', $params);
143
- $reorder = $this->getUrl('mventory/matching/reorder/', $params);
144
 
145
  return Mage::helper('core')->jsonEncode(compact('addrule',
146
  'remove',
@@ -237,4 +242,25 @@ class MVentory_API_Block_Matching extends Mage_Adminhtml_Block_Template {
237
  'categories' => $categories
238
  );
239
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  }
30
  protected $_categories = null;
31
 
32
  protected function _construct () {
33
+ $this->_boolAttrValues = $this->_getBoolAttrValues();
34
+
35
  $this->_attrs['-1'] = array(
36
  'label' => $this->__('Select an attribute...'),
37
  'used' => false,
49
 
50
  $type = $attr->getFrontendInput();
51
 
52
+ if (!($type == 'select' || $type == 'multiselect' || $type == 'boolean'))
53
  continue;
54
 
55
  $id = $attr->getId();
60
  'used_values' => array()
61
  );
62
 
63
+ if ($type == 'boolean')
64
+ $this->_attrs[$id]['values'] = $this->_boolAttrValues;
65
+
66
  $labels[] = $attr->getFrontendLabel();
67
  }
68
 
143
  'ajax' => true
144
  );
145
 
146
+ $addrule = $this->getUrl('adminhtml/mventory_matching/append/', $params);
147
+ $remove = $this->getUrl('adminhtml/mventory_matching/remove/', $params);
148
+ $reorder = $this->getUrl('adminhtml/mventory_matching/reorder/', $params);
149
 
150
  return Mage::helper('core')->jsonEncode(compact('addrule',
151
  'remove',
242
  'categories' => $categories
243
  );
244
  }
245
+
246
+ /**
247
+ * Return prepared values for boolean (Yes/No) attribute
248
+ *
249
+ * @return array
250
+ * List of prepared values
251
+ */
252
+ protected function _getBoolAttrValues () {
253
+ $options = Mage::getModel('eav/entity_attribute_source_boolean')
254
+ ->getAllOptions();
255
+
256
+ $values = [];
257
+
258
+ foreach ($options as $option)
259
+ $values[] = [
260
+ 'id' => $option['value'],
261
+ 'label' => $option['label']
262
+ ];
263
+
264
+ return $values;
265
+ }
266
  }
app/code/community/MVentory/API/Block/System/Config/Form/Field/Exportrates.php CHANGED
@@ -33,8 +33,10 @@ class MVentory_API_Block_System_Config_Form_Field_Exportrates
33
  ->getRequest()
34
  ->getParam('website', '');
35
 
36
- $url = $this->getUrl('mventory/carriers/export', compact('website'))
37
- . 'shippingrates.csv';
 
 
38
 
39
  $data = array(
40
  'label' => $this->__('Export CSV'),
33
  ->getRequest()
34
  ->getParam('website', '');
35
 
36
+ $url = $this->getUrl(
37
+ 'adminhtml/mventory_carriers/export',
38
+ compact('website')
39
+ );
40
 
41
  $data = array(
42
  'label' => $this->__('Export CSV'),
app/code/community/MVentory/API/Block/System/Config/Form/Field/Imgcliplog.php CHANGED
@@ -65,7 +65,7 @@ EOT;
65
  * HTML of the Download button
66
  */
67
  protected function _getDownloadButton () {
68
- $url = $this->getUrl('mventory/logs/download');
69
 
70
  return $this
71
  ->getLayout()
@@ -86,7 +86,7 @@ EOT;
86
  * HTML of the Clear button
87
  */
88
  protected function _getClearButton () {
89
- $url = $this->getUrl('mventory/logs/clear');
90
  $msg = $this->__('All current data in the activity log will be erased');
91
 
92
  return $this
65
  * HTML of the Download button
66
  */
67
  protected function _getDownloadButton () {
68
+ $url = $this->getUrl('adminhtml/mventory_logs/download');
69
 
70
  return $this
71
  ->getLayout()
86
  * HTML of the Clear button
87
  */
88
  protected function _getClearButton () {
89
+ $url = $this->getUrl('adminhtml/mventory_logs/clear');
90
  $msg = $this->__('All current data in the activity log will be erased');
91
 
92
  return $this
app/code/community/MVentory/API/Block/System/Config/Form/Field/Template.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Creative Commons License BY-NC-ND.
7
+ * By Attribution (BY) - You can share this file unchanged, including
8
+ * this copyright statement.
9
+ * Non-Commercial (NC) - You can use this file for non-commercial activities.
10
+ * A commercial license can be purchased separately from mventory.com.
11
+ * No Derivatives (ND) - You can make changes to this file for your own use,
12
+ * but you cannot share or redistribute the changes.
13
+ *
14
+ * See the full license at http://creativecommons.org/licenses/by-nc-nd/4.0/
15
+ *
16
+ * @package MVentory/API
17
+ * @copyright Copyright (c) 2015 mVentory Ltd. (http://mventory.com)
18
+ * @license http://creativecommons.org/licenses/by-nc-nd/4.0/
19
+ */
20
+
21
+ /**
22
+ * Template field for fieldset
23
+ *
24
+ * @package MVentory/API
25
+ * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
+ */
27
+ class MVentory_API_Block_System_Config_Form_Field_Template
28
+ extends Mage_Adminhtml_Block_Template
29
+ implements Varien_Data_Form_Element_Renderer_Interface
30
+ {
31
+ const _TPL_ELEMENT = <<<'EOT'
32
+ <tr class="system-fieldset-sub-head mventory-field-template" id="row_%s">
33
+ <td colspan="5">%s</td>
34
+ </tr>
35
+ EOT;
36
+
37
+ /**
38
+ * Render element html
39
+ *
40
+ * @param Varien_Data_Form_Element_Abstract $element
41
+ * @return string
42
+ */
43
+ public function render (Varien_Data_Form_Element_Abstract $element) {
44
+ return sprintf(
45
+ self::_TPL_ELEMENT,
46
+ $element->getHtmlId(),
47
+ $this
48
+ ->setTemplate($element->getOriginalData('template'))
49
+ ->toHtml()
50
+ );
51
+ }
52
+ }
app/code/community/MVentory/API/Helper/Data.php CHANGED
@@ -126,6 +126,8 @@ class MVentory_API_Helper_Data extends Mage_Core_Helper_Abstract {
126
  /**
127
  * Retrieve attribute's raw value from DB for specified product's ID.
128
  *
 
 
129
  * @param int $productId
130
  * @param int|string|array $attribute atrribute's IDs or codes
131
  * @param int|string|Mage_Core_Model_Website $website Website, its ID or code
@@ -144,6 +146,8 @@ class MVentory_API_Helper_Data extends Mage_Core_Helper_Abstract {
144
  /**
145
  * Update attribute values for product per website
146
  *
 
 
147
  * @param int $productId
148
  * @param array $attrData
149
  * @param int|string|Mage_Core_Model_Website $website Website, its ID or code
126
  /**
127
  * Retrieve attribute's raw value from DB for specified product's ID.
128
  *
129
+ * @deprecated The method is not used in the code. Should be removed
130
+ *
131
  * @param int $productId
132
  * @param int|string|array $attribute atrribute's IDs or codes
133
  * @param int|string|Mage_Core_Model_Website $website Website, its ID or code
146
  /**
147
  * Update attribute values for product per website
148
  *
149
+ * @deprecated The method is not used in the code. Should be removed
150
+ *
151
  * @param int $productId
152
  * @param array $attrData
153
  * @param int|string|Mage_Core_Model_Website $website Website, its ID or code
app/code/community/MVentory/API/Helper/Imageclipper.php CHANGED
@@ -259,7 +259,7 @@ class MVentory_API_Helper_Imageclipper extends MVentory_API_Helper_Data
259
  * @return string /full/path/magento/media/backup
260
  */
261
  public function getBackupFolder () {
262
- $confVal = Mage::getStoreConfig('mventory/image_clips/backup_folder');
263
 
264
  return $confVal ? Mage::getBaseDir('media') . DS . $confVal : null;
265
  }
@@ -298,7 +298,7 @@ class MVentory_API_Helper_Imageclipper extends MVentory_API_Helper_Data
298
  return Mage::helper('mventory/string')->startsWith(
299
  strtolower(trim($file)),
300
  strtolower(trim(Mage::getStoreConfig(
301
- MVentory_API_Model_Config::_DBX_PATH
302
  )))
303
  );
304
  }
@@ -308,7 +308,7 @@ class MVentory_API_Helper_Imageclipper extends MVentory_API_Helper_Data
308
  */
309
  public function getDbxClient () {
310
  return new Dropbox\Client(
311
- Mage::getStoreConfig(MVentory_API_Model_Config::_DBX_TKN),
312
  'PHP-Example/1.0'
313
  );
314
  }
@@ -357,7 +357,7 @@ class MVentory_API_Helper_Imageclipper extends MVentory_API_Helper_Data
357
  * Full dropbox path
358
  */
359
  protected function _toDbxPath ($filename) {
360
- return Mage::getStoreConfig(MVentory_API_Model_Config::_DBX_PATH)
361
  . $filename;
362
  }
363
  }
259
  * @return string /full/path/magento/media/backup
260
  */
261
  public function getBackupFolder () {
262
+ $confVal = Mage::getStoreConfig(MVentory_API_Model_Config::_BGG_BACKUP_DIR);
263
 
264
  return $confVal ? Mage::getBaseDir('media') . DS . $confVal : null;
265
  }
298
  return Mage::helper('mventory/string')->startsWith(
299
  strtolower(trim($file)),
300
  strtolower(trim(Mage::getStoreConfig(
301
+ MVentory_API_Model_Config::_BGG_DBX_PATH
302
  )))
303
  );
304
  }
308
  */
309
  public function getDbxClient () {
310
  return new Dropbox\Client(
311
+ Mage::getStoreConfig(MVentory_API_Model_Config::_BGG_DBX_TKN),
312
  'PHP-Example/1.0'
313
  );
314
  }
357
  * Full dropbox path
358
  */
359
  protected function _toDbxPath ($filename) {
360
+ return Mage::getStoreConfig(MVentory_API_Model_Config::_BGG_DBX_PATH)
361
  . $filename;
362
  }
363
  }
app/code/community/MVentory/API/Helper/Product.php CHANGED
@@ -106,10 +106,6 @@ class MVentory_API_Helper_Product extends MVentory_API_Helper_Data {
106
  /**
107
  * Try to get product's ID
108
  *
109
- * NOTE: this method doesn't recognise only numerical SKUs even
110
- * if $identifierType is set to 'sku'. It will be returned as ID
111
- * then such SKU, barcode and additional SKUs don't exist
112
- *
113
  * @param int|string $productId (SKU, ID or Barcode)
114
  * @param string $identifierType
115
  *
@@ -146,6 +142,11 @@ class MVentory_API_Helper_Product extends MVentory_API_Helper_Data {
146
  if ($id > 0)
147
  return $id;
148
 
 
 
 
 
 
149
  $id = (int) $productId;
150
 
151
  return $id > 0 ? $id : null;
106
  /**
107
  * Try to get product's ID
108
  *
 
 
 
 
109
  * @param int|string $productId (SKU, ID or Barcode)
110
  * @param string $identifierType
111
  *
142
  if ($id > 0)
143
  return $id;
144
 
145
+ //Return nothing if sku type is specified because we didn't find such SKU
146
+ //or barcode or additional SKU
147
+ if ($identifierType == 'sku')
148
+ return null;
149
+
150
  $id = (int) $productId;
151
 
152
  return $id > 0 ? $id : null;
app/code/community/MVentory/API/Model/Cart/Api.php CHANGED
@@ -274,12 +274,7 @@ class MVentory_API_Model_Cart_Api extends Mage_Checkout_Model_Cart_Api {
274
  Mage::logException($e);
275
  }
276
 
277
- try {
278
- $result = $productApi->fullInfo($product->getId(), 'id');
279
- }
280
- catch (Exception $e) {
281
- Mage::logException($e);
282
- }
283
 
284
  if ($orderId)
285
  $result['order_id'] = $orderId;
274
  Mage::logException($e);
275
  }
276
 
277
+ $result = $productApi->fullInfo($product->getId(), 'id');
 
 
 
 
 
278
 
279
  if ($orderId)
280
  $result['order_id'] = $orderId;
app/code/community/MVentory/API/Model/Config.php CHANGED
@@ -46,8 +46,14 @@ class MVentory_API_Model_Config
46
  const _QR_CSS = 'mventory/qr/css';
47
  const _QR_URL = 'mventory/qr/base_url';
48
  const _QR_COPIES = 'mventory/qr/copies';
49
- const _DBX_TKN = 'mventory/image_clips/dropbox_token';
50
- const _DBX_PATH = 'mventory/image_clips/dropbox_path';
 
 
 
 
 
 
51
 
52
  //Attribute metadata values
53
  const MT_INPUT_KBD = 0;
46
  const _QR_CSS = 'mventory/qr/css';
47
  const _QR_URL = 'mventory/qr/base_url';
48
  const _QR_COPIES = 'mventory/qr/copies';
49
+
50
+ //BackGround Genie config paths
51
+ const _BGG_ENABLED = 'bg_genie/settings/enabled';
52
+ const _BGG_BACKUP_DIR = 'bg_genie/settings/backup_dir';
53
+ const _BGG_EXCL_NEW = 'bg_genie/settings/exclude_new';
54
+ const _BGG_AUTO_REPL = 'bg_genie/settings/auto_replace';
55
+ const _BGG_DBX_TKN = 'bg_genie/settings/dropbox_token';
56
+ const _BGG_DBX_PATH = 'bg_genie/settings/dropbox_path';
57
 
58
  //Attribute metadata values
59
  const MT_INPUT_KBD = 0;
app/code/community/MVentory/API/Model/Matching.php CHANGED
@@ -113,6 +113,11 @@ class MVentory_API_Model_Matching
113
  $rules = $this->getData('rules');
114
 
115
  foreach ($rules as $rule) {
 
 
 
 
 
116
  foreach ($rule['attrs'] as $attribute) {
117
  if (!isset($_attributes[$attribute['id']]))
118
  continue;
@@ -130,12 +135,13 @@ class MVentory_API_Model_Matching
130
  continue 2;
131
  }
132
 
133
- if (!empty($rule['categories'])) {
134
- $categoryIds = $rule['categories'];
135
- break;
136
- }
137
  }
138
 
 
 
139
  if (!$categoryIds && isset($rules[self::DEFAULT_RULE_ID]))
140
  $categoryIds = $rules[self::DEFAULT_RULE_ID]['categories'];
141
 
@@ -196,17 +202,30 @@ class MVentory_API_Model_Matching
196
 
197
  $type = $attr->getFrontendInput();
198
 
199
- if (!($type == 'select' || $type == 'multiselect'))
200
  continue;
201
 
202
- $allOptions = $attr
203
- ->getSource()
204
- ->getAllOptions();
 
 
 
 
 
205
 
206
  $optionIds = array();
207
 
208
  foreach ($allOptions as $options)
209
- if ($options['value'])
 
 
 
 
 
 
 
 
210
  $optionIds[] = $options['value'];
211
 
212
  $attrs[$attr->getId()] = $optionIds;
113
  $rules = $this->getData('rules');
114
 
115
  foreach ($rules as $rule) {
116
+
117
+ //Ignore default rule, it's processed separately
118
+ if (!$rule['attrs'])
119
+ continue;
120
+
121
  foreach ($rule['attrs'] as $attribute) {
122
  if (!isset($_attributes[$attribute['id']]))
123
  continue;
135
  continue 2;
136
  }
137
 
138
+ //Collect categories from current rule
139
+ if (!empty($rule['categories']))
140
+ $categoryIds = array_merge($categoryIds, $rule['categories']);
 
141
  }
142
 
143
+ $categoryIds = array_unique($categoryIds);
144
+
145
  if (!$categoryIds && isset($rules[self::DEFAULT_RULE_ID]))
146
  $categoryIds = $rules[self::DEFAULT_RULE_ID]['categories'];
147
 
202
 
203
  $type = $attr->getFrontendInput();
204
 
205
+ if (!($type == 'select' || $type == 'multiselect' || $type == 'boolean'))
206
  continue;
207
 
208
+ // skip attribute in case its model is broken for some reason (e.g. 3rd party ext problem)
209
+ try {
210
+ $allOptions = $attr
211
+ ->getSource()
212
+ ->getAllOptions();
213
+ } catch (Exception $e) {
214
+ continue;
215
+ }
216
 
217
  $optionIds = array();
218
 
219
  foreach ($allOptions as $options)
220
+
221
+ /**
222
+ * Ignore empty option (an option with empty string as value)
223
+ * added by "table" source model by default
224
+ *
225
+ * @see Mage_Eav_Model_Entity_Attribute_Source_Table::getAllOptions()
226
+ * See the function to find how empty option is added
227
+ */
228
+ if ($options['value'] !== '')
229
  $optionIds[] = $options['value'];
230
 
231
  $attrs[$attr->getId()] = $optionIds;
app/code/community/MVentory/API/Model/Observer.php CHANGED
@@ -25,8 +25,17 @@
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
  class MVentory_API_Model_Observer {
 
 
 
 
28
  const __CONFIG_URL = <<<'EOT'
29
- mVentory configuration URL: <a href="%1$s">%1$s</a> (Can only be used once and is valid for %2$d hours)
 
 
 
 
 
30
  EOT;
31
 
32
  public function productInit ($observer) {
@@ -65,7 +74,7 @@ EOT;
65
  public function addProductNameRebuildMassaction ($observer) {
66
  $block = $observer->getBlock();
67
 
68
- $route = 'mventory/catalog_product/massNameRebuild';
69
 
70
  $label = Mage::helper('mventory')->__('Rebuild product name');
71
  $url = $block->getUrl($route, array('_current' => true));
@@ -78,7 +87,7 @@ EOT;
78
  public function addProductCategoryMatchMassaction ($observer) {
79
  $block = $observer->getBlock();
80
 
81
- $route = 'mventory/catalog_product/massCategoryMatch';
82
 
83
  $label = Mage::helper('mventory')->__('Match product category');
84
  $url = $block->getUrl($route, array('_current' => true));
@@ -236,7 +245,12 @@ EOT;
236
  Mage::getModel('core/url')->setStore($store)->getBaseUrl()
237
  . 'mventory-key/'
238
  . urlencode($key),
239
- round($period / 3600)
 
 
 
 
 
240
  );
241
 
242
  Mage::getSingleton('adminhtml/session')->addNotice($msg);
@@ -247,7 +261,7 @@ EOT;
247
 
248
  if ($block instanceof Mage_Adminhtml_Block_Customer_Edit) {
249
  $url = $block->getUrl(
250
- 'mventory/customer/createapiuser',
251
  array(
252
  '_current' => true,
253
  'id' => $block->getCustomerId(),
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
  class MVentory_API_Model_Observer {
28
+
29
+ /**
30
+ * Double percentage sign to screen line breaks from sprintf() variables. Variables found on line 243.
31
+ */
32
  const __CONFIG_URL = <<<'EOT'
33
+
34
+ mVentory configuration URL: <a href="%1$s">%1$s</a><br>Email: <a href="mailto:%4$s?subject=API Key&body=Hi,%%0D%%0A%%0D%%0AYour Android access to %3$s has been configured. You can start loading products now.%%0D%%0A%%0D%%0A
35
+ Please, download the app from https://play.google.com/store/apps/details?id=com.mventory first and then click on this link to complete the configuration: %1$s %%0D%%0A%%0D%%0A
36
+ This link can only be used once within 24hr period. Ask your website administrator to reissue if the link doesn't work or report the problem to support@mventory.com.%%0D%%0A%%0D%%0A
37
+ Thanks mVentory">Send API Key Email</a><br>View: <a href="%5$s" target="_blank">QR CODE</a>
38
+
39
  EOT;
40
 
41
  public function productInit ($observer) {
74
  public function addProductNameRebuildMassaction ($observer) {
75
  $block = $observer->getBlock();
76
 
77
+ $route = 'adminhtml/mventory_catalog_product/massNameRebuild';
78
 
79
  $label = Mage::helper('mventory')->__('Rebuild product name');
80
  $url = $block->getUrl($route, array('_current' => true));
87
  public function addProductCategoryMatchMassaction ($observer) {
88
  $block = $observer->getBlock();
89
 
90
+ $route = 'adminhtml/mventory_catalog_product/massCategoryMatch';
91
 
92
  $label = Mage::helper('mventory')->__('Match product category');
93
  $url = $block->getUrl($route, array('_current' => true));
245
  Mage::getModel('core/url')->setStore($store)->getBaseUrl()
246
  . 'mventory-key/'
247
  . urlencode($key),
248
+ round($period / 3600),
249
+ Mage::getStoreConfig('web/unsecure/base_url'),
250
+ $customer->getEmail(),
251
+ 'https://chart.googleapis.com/chart?cht=qr&chld=M|1&chs=300x300&chl='.urlencode(Mage::getModel('core/url')->setStore($store)->getBaseUrl()
252
+ . 'mventory-key/'
253
+ . urlencode($key))
254
  );
255
 
256
  Mage::getSingleton('adminhtml/session')->addNotice($msg);
261
 
262
  if ($block instanceof Mage_Adminhtml_Block_Customer_Edit) {
263
  $url = $block->getUrl(
264
+ 'adminhtml/mventory_customer/createapiuser',
265
  array(
266
  '_current' => true,
267
  'id' => $block->getCustomerId(),
app/code/community/MVentory/API/Model/Product/Api.php CHANGED
@@ -74,7 +74,9 @@ class MVentory_API_Model_Product_Api extends Mage_Catalog_Model_Product_Api {
74
  ->getDefaultStore()
75
  ->getId();
76
 
77
- $product = $this->_getProduct($productId, $storeId, $identifierType);
 
 
78
 
79
  //Product's ID can be changed by '_getProduct()' function if original
80
  //product is configurable one
74
  ->getDefaultStore()
75
  ->getId();
76
 
77
+ //Use id as identifier type because we've got product's ID earlier
78
+ //in this function
79
+ $product = $this->_getProduct($productId, $storeId, 'id');
80
 
81
  //Product's ID can be changed by '_getProduct()' function if original
82
  //product is configurable one
app/code/community/MVentory/API/Model/Product/Attribute/Media/Api.php CHANGED
@@ -101,11 +101,13 @@ class MVentory_API_Model_Product_Attribute_Media_Api
101
  $content = $this->_fixOrientation($name, $file['content']);
102
  $file['content'] = base64_encode($content);
103
 
104
- $isClipEnabled = Mage::getStoreConfig('mventory/image_clips/enable');
 
 
105
 
106
  //Exclude image from frontend
107
  if ($isClipEnabled
108
- && Mage::getStoreConfig('mventory/image_clips/exclude_new'))
109
  $data['exclude'] = '1';
110
 
111
  $img = $this->create($productId, $data, $storeId, $identifierType);
@@ -352,7 +354,7 @@ class MVentory_API_Model_Product_Attribute_Media_Api
352
 
353
  $helper = Mage::helper('mventory/imageclipper');
354
 
355
- if (Mage::getStoreConfig('mventory/image_clips/enable')) try {
356
  $helper->deleteFromDropbox(basename($file));
357
 
358
  if ($md['is_deleted'])
101
  $content = $this->_fixOrientation($name, $file['content']);
102
  $file['content'] = base64_encode($content);
103
 
104
+ $isClipEnabled = Mage::getStoreConfig(
105
+ MVentory_API_Model_Config::_BGG_ENABLED
106
+ );
107
 
108
  //Exclude image from frontend
109
  if ($isClipEnabled
110
+ && Mage::getStoreConfig(MVentory_API_Model_Config::_BGG_EXCL_NEW))
111
  $data['exclude'] = '1';
112
 
113
  $img = $this->create($productId, $data, $storeId, $identifierType);
354
 
355
  $helper = Mage::helper('mventory/imageclipper');
356
 
357
+ if (Mage::getStoreConfig(MVentory_API_Model_Config::_BGG_ENABLED)) try {
358
  $helper->deleteFromDropbox(basename($file));
359
 
360
  if ($md['is_deleted'])
app/code/community/MVentory/API/Model/{System/Config/Backend/Imgclip/Backupfolder.php → Setting/Backend/Backupdir.php} RENAMED
@@ -14,25 +14,49 @@
14
  * See the full license at http://creativecommons.org/licenses/by-nc-nd/4.0/
15
  *
16
  * @package MVentory/API
17
- * @copyright Copyright (c) 2014 mVentory Ltd. (http://mventory.com)
18
  * @license http://creativecommons.org/licenses/by-nc-nd/4.0/
19
  */
20
 
21
  /**
22
- * Backend model for back folder field
23
  *
24
  * @package MVentory/API
25
  * @author Bogdan
26
  */
27
- class MVentory_API_Model_System_Config_Backend_Imgclip_Backupfolder
28
  extends Mage_Core_Model_Config_Data
29
  {
 
 
 
 
 
 
 
30
  public function _beforeSave () {
31
- $val = $this->getValue();
 
 
 
 
 
 
 
 
 
 
 
32
 
33
- if ($val)
34
  return $this;
35
 
 
 
 
 
 
 
36
  $path = Mage::getBaseDir('media') . DS . $val;
37
 
38
  if (!is_dir($path))
@@ -41,7 +65,7 @@ class MVentory_API_Model_System_Config_Backend_Imgclip_Backupfolder
41
  if (!(file_exists($path) && is_dir($path) && is_writable($path)))
42
  Mage::throwException(
43
  Mage::helper('mventory')->__(
44
- 'Path "%s" for backup folder is invalid!',
45
  $val
46
  )
47
  );
14
  * See the full license at http://creativecommons.org/licenses/by-nc-nd/4.0/
15
  *
16
  * @package MVentory/API
17
+ * @copyright Copyright (c) 2014-2015 mVentory Ltd. (http://mventory.com)
18
  * @license http://creativecommons.org/licenses/by-nc-nd/4.0/
19
  */
20
 
21
  /**
22
+ * Backend model for Local backup folder setting
23
  *
24
  * @package MVentory/API
25
  * @author Bogdan
26
  */
27
+ class MVentory_API_Model_Setting_Backend_Backupdir
28
  extends Mage_Core_Model_Config_Data
29
  {
30
+ /**
31
+ * Normalize supplied path for local backup directory and make various
32
+ * checks that the directory is usable before saving setting in DB
33
+ *
34
+ * @return MVentory_API_Model_Setting_Backend_Backupdir
35
+ * Instance of this class
36
+ */
37
  public function _beforeSave () {
38
+ if (!$this->isValueChanged())
39
+ return $this;
40
+
41
+ /**
42
+ * 1. trim both start and end of the value
43
+ * 2. remove any slash symbols from both side of the value string
44
+ * 3. trim again both sides to remove remained whitespaces
45
+ * from previous step
46
+ *
47
+ * Example: "/ foo/bar/ " -> "foo/bar"
48
+ */
49
+ $val = trim(trim(trim($this->getValue()), '/'));
50
 
51
+ if (!$val)
52
  return $this;
53
 
54
+ $this->setValue($val .= '/');
55
+
56
+ /**
57
+ * @todo we should check real path that it's still in media directory.
58
+ * E.g supplied directory path can contain "../"
59
+ */
60
  $path = Mage::getBaseDir('media') . DS . $val;
61
 
62
  if (!is_dir($path))
65
  if (!(file_exists($path) && is_dir($path) && is_writable($path)))
66
  Mage::throwException(
67
  Mage::helper('mventory')->__(
68
+ 'Path "%s" for local backup folder is invalid!',
69
  $val
70
  )
71
  );
app/code/community/MVentory/API/Model/System/Config/Backend/Imgclip/Csvlog.php DELETED
@@ -1,49 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * NOTICE OF LICENSE
5
- *
6
- * This source file is subject to the Creative Commons License BY-NC-ND.
7
- * By Attribution (BY) - You can share this file unchanged, including
8
- * this copyright statement.
9
- * Non-Commercial (NC) - You can use this file for non-commercial activities.
10
- * A commercial license can be purchased separately from mventory.com.
11
- * No Derivatives (ND) - You can make changes to this file for your own use,
12
- * but you cannot share or redistribute the changes.
13
- *
14
- * See the full license at http://creativecommons.org/licenses/by-nc-nd/4.0/
15
- *
16
- * @package MVentory/API
17
- * @copyright Copyright (c) 2014 mVentory Ltd. (http://mventory.com)
18
- * @license http://creativecommons.org/licenses/by-nc-nd/4.0/
19
- */
20
-
21
- /**
22
- * Backend model for back csv log field
23
- *
24
- * @package MVentory/API
25
- * @author Bogdan
26
- */
27
- class MVentory_API_Model_System_Config_Backend_Imgclip_Csvlog
28
- extends Mage_Core_Model_Config_Data
29
- {
30
-
31
- public function _beforeSave () {
32
- $val = $this->getValue();
33
-
34
- if (!$val)
35
- Mage::throwException('Log field must not be empty!');
36
-
37
- $path = Mage::getBaseDir() . DS . $val;
38
-
39
- if (!file_exists($path)) {
40
- mkdir(dirname($path), 0775, true);
41
- touch($path);
42
- }
43
-
44
- if (!(file_exists($path) && is_writable($path)))
45
- Mage::throwException('Path '. $path . ' for log is invalid!');
46
-
47
- return $this;
48
- }
49
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/MVentory/API/controllers/DropboxController.php CHANGED
@@ -27,7 +27,7 @@
27
  class MVentory_API_DropboxController extends Mage_Core_Controller_Front_Action
28
  {
29
  public function indexAction () {
30
- if (!Mage::getStoreConfig('mventory/image_clips/enable'))
31
  return;
32
 
33
  //Respond to dropbox
@@ -55,7 +55,9 @@ class MVentory_API_DropboxController extends Mage_Core_Controller_Front_Action
55
  if (!$delta['entries'])
56
  return;
57
 
58
- $isAutoReplace = Mage::getStoreConfig('mventory/image_clips/auto_replace');
 
 
59
 
60
  foreach ($delta['entries'] as $_item) {
61
 
27
  class MVentory_API_DropboxController extends Mage_Core_Controller_Front_Action
28
  {
29
  public function indexAction () {
30
+ if (!Mage::getStoreConfig(MVentory_API_Model_Config::_BGG_ENABLED))
31
  return;
32
 
33
  //Respond to dropbox
55
  if (!$delta['entries'])
56
  return;
57
 
58
+ $isAutoReplace = Mage::getStoreConfig(
59
+ MVentory_API_Model_Config::_BGG_AUTO_REPL
60
+ );
61
 
62
  foreach ($delta['entries'] as $_item) {
63
 
app/code/community/MVentory/API/controllers/{CarriersController.php → Mventory/CarriersController.php} RENAMED
@@ -24,13 +24,17 @@
24
  * @package MVentory/API
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
- class MVentory_API_CarriersController
28
  extends Mage_Adminhtml_Controller_Action {
29
 
30
  protected function _construct() {
31
  $this->setUsedModuleName('MVentory_API');
32
  }
33
 
 
 
 
 
34
  /**
35
  * Export shipping rates in csv format
36
  */
24
  * @package MVentory/API
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
+ class MVentory_API_Mventory_CarriersController
28
  extends Mage_Adminhtml_Controller_Action {
29
 
30
  protected function _construct() {
31
  $this->setUsedModuleName('MVentory_API');
32
  }
33
 
34
+ protected function _isAllowed () {
35
+ return true;
36
+ }
37
+
38
  /**
39
  * Export shipping rates in csv format
40
  */
app/code/community/MVentory/API/controllers/{Catalog → Mventory/Catalog}/ProductController.php RENAMED
@@ -24,9 +24,13 @@
24
  * @package MVentory/API
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
- class MVentory_API_Catalog_ProductController
28
  extends Mage_Adminhtml_Controller_Action {
29
 
 
 
 
 
30
  public function massNameRebuildAction () {
31
  $request = $this->getRequest();
32
 
@@ -59,7 +63,7 @@ class MVentory_API_Catalog_ProductController
59
  ->addException($e, $m);
60
  }
61
 
62
- $this->_redirect('adminhtml/*', array('store'=> $storeId));
63
  }
64
 
65
  public function massCategoryMatchAction () {
@@ -94,7 +98,7 @@ class MVentory_API_Catalog_ProductController
94
  ->addException($e, $m);
95
  }
96
 
97
- $this->_redirect('adminhtml/*', array('store'=> $storeId));
98
  }
99
  }
100
 
24
  * @package MVentory/API
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
+ class MVentory_API_Mventory_Catalog_ProductController
28
  extends Mage_Adminhtml_Controller_Action {
29
 
30
+ protected function _isAllowed () {
31
+ return true;
32
+ }
33
+
34
  public function massNameRebuildAction () {
35
  $request = $this->getRequest();
36
 
63
  ->addException($e, $m);
64
  }
65
 
66
+ $this->_redirect('adminhtml/catalog_product', array('store'=> $storeId));
67
  }
68
 
69
  public function massCategoryMatchAction () {
98
  ->addException($e, $m);
99
  }
100
 
101
+ $this->_redirect('adminhtml/catalog_product/', array('store'=> $storeId));
102
  }
103
  }
104
 
app/code/community/MVentory/API/controllers/{CustomerController.php → Mventory/CustomerController.php} RENAMED
@@ -24,7 +24,8 @@
24
  * @package MVentory/API
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
- class MVentory_API_CustomerController extends Mage_Adminhtml_Controller_Action
 
28
  {
29
 
30
  const _NO_ADDRESS = <<<'EOT'
@@ -40,17 +41,17 @@ User with ID=%d is already registered for API access. Manage details at <a href=
40
  EOT;
41
 
42
  const _HELP = <<<'EOT'
43
- Manage API access on <a href="%s">API user details page</a>
44
- <br />
45
- Visit <a target="_blank" href="http://mventory.com/help/configure-access/">mventory.com</a> for more info
46
- <br />
47
- Save the XML-RPC user again to generate a new link
48
  EOT;
49
 
50
  protected function _construct() {
51
  $this->setUsedModuleName('MVentory_API');
52
  }
53
 
 
 
 
 
54
  /**
55
  * Create API user for customer
56
  */
24
  * @package MVentory/API
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
+ class MVentory_API_Mventory_CustomerController
28
+ extends Mage_Adminhtml_Controller_Action
29
  {
30
 
31
  const _NO_ADDRESS = <<<'EOT'
41
  EOT;
42
 
43
  const _HELP = <<<'EOT'
44
+ Manage API access on <a href="%s">API user details page</a>. Save the user there to generate a new access link or visit <a target="_blank" href="http://mventory.com/doc/configuration-2/"> mventory.com</a> for more info.
 
 
 
 
45
  EOT;
46
 
47
  protected function _construct() {
48
  $this->setUsedModuleName('MVentory_API');
49
  }
50
 
51
+ protected function _isAllowed () {
52
+ return true;
53
+ }
54
+
55
  /**
56
  * Create API user for customer
57
  */
app/code/community/MVentory/API/controllers/{LogsController.php → Mventory/LogsController.php} RENAMED
@@ -24,7 +24,7 @@
24
  * @package MVentory/API
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
- class MVentory_API_LogsController
28
  extends Mage_Adminhtml_Controller_Action
29
  {
30
  const _CANT_CLEAR = <<<'EOT'
@@ -46,6 +46,10 @@ EOT;
46
  $this->setUsedModuleName('MVentory_API');
47
  }
48
 
 
 
 
 
49
  /**
50
  * Clear activity log
51
  *
24
  * @package MVentory/API
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
+ class MVentory_API_Mventory_LogsController
28
  extends Mage_Adminhtml_Controller_Action
29
  {
30
  const _CANT_CLEAR = <<<'EOT'
46
  $this->setUsedModuleName('MVentory_API');
47
  }
48
 
49
+ protected function _isAllowed () {
50
+ return true;
51
+ }
52
+
53
  /**
54
  * Clear activity log
55
  *
app/code/community/MVentory/API/controllers/{MatchingController.php → Mventory/MatchingController.php} RENAMED
@@ -24,13 +24,17 @@
24
  * @package MVentory/API
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
- class MVentory_API_MatchingController
28
  extends Mage_Adminhtml_Controller_Action {
29
 
30
  protected function _construct() {
31
  $this->setUsedModuleName('MVentory_API');
32
  }
33
 
 
 
 
 
34
  /**
35
  * Append rule action
36
  *
24
  * @package MVentory/API
25
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
26
  */
27
+ class MVentory_API_Mventory_MatchingController
28
  extends Mage_Adminhtml_Controller_Action {
29
 
30
  protected function _construct() {
31
  $this->setUsedModuleName('MVentory_API');
32
  }
33
 
34
+ protected function _isAllowed () {
35
+ return true;
36
+ }
37
+
38
  /**
39
  * Append rule action
40
  *
app/code/community/MVentory/API/etc/config.xml CHANGED
@@ -194,13 +194,13 @@
194
 
195
  <admin>
196
  <routers>
197
- <mventory_adminhtml>
198
- <use>admin</use>
199
  <args>
200
- <module>MVentory_API</module>
201
- <frontName>mventory</frontName>
 
202
  </args>
203
- </mventory_adminhtml>
204
  </routers>
205
  </admin>
206
 
194
 
195
  <admin>
196
  <routers>
197
+ <adminhtml>
 
198
  <args>
199
+ <modules>
200
+ <MVentory_API after="Mage_Adminhtml">MVentory_API</MVentory_API>
201
+ </modules>
202
  </args>
203
+ </adminhtml>
204
  </routers>
205
  </admin>
206
 
app/code/community/MVentory/API/etc/system.xml CHANGED
@@ -299,250 +299,6 @@
299
  </fields>
300
  </qr>
301
 
302
- <image_clips translate="label comment" module="mventory">
303
- <label>Image Review</label>
304
- <comment>
305
- <![CDATA[
306
- <ul id="mventory-matching-messages" class="messages">
307
- <li class="notice-msg">
308
- <span>All new photos can be held in a special folder for review before posting on the website. The review may include editing by external staff via Dropbox or Google Drive sync. <a target="_blank" href="//mventory.com"> Learn more &hellip;</a></span>
309
- </li>
310
- </ul>
311
- ]]>
312
- </comment>
313
- <footer>
314
- <![CDATA[
315
- <div id="mventory-dropbox-system-howto" class="system-fieldset-sub-head">
316
- <h4>How to use DropBox for image editing</h4>
317
-
318
- <ol>
319
- <li>Sign up for a new DropBox account.</li>
320
- <li>Install DropBox client for Linux on your Magento server.</li>
321
- <li>Configure DropBox daemon to sync the holding folder with your account.</li>
322
- <li>Share the account details with your image editor and ask them to sync the holding folder. Ideally there shouldn't be any other folders in that account for security reasons. </li>
323
- </ol>
324
-
325
- <p>When a new file is uploaded to Magento via [mVentory Android app] it is automatically copied to the holding folder and is synced to a local folder on the computer of your image editor. They can <a target="_blank" href="https://www.dropbox.com/en/help/34">configure notifications</a> to be alerted about any new files uploaded by you.</p>
326
-
327
- <p>Your image editor can open, edit and save the files locally. Any changes will be synced to the holding folder on Magento server and applied to product images automatically or after a review.</p>
328
-
329
- <p>Read more about this process on <a target="_blank" href="//mventory.com">mventory.com</a></p>
330
- </div>
331
- ]]>
332
- </footer>
333
- <frontend_model>mventory/setting_fieldset</frontend_model>
334
-
335
- <show_in_default>1</show_in_default>
336
- <show_in_website>1</show_in_website>
337
- <show_in_store>1</show_in_store>
338
-
339
- <sort_order>6</sort_order>
340
-
341
- <fields>
342
- <enable translate="label comment tooltip">
343
- <label>Enabled</label>
344
- <comment>Toggle image review feature on/off.</comment>
345
- <tooltip>Make sure you don't have images pending approval before disabling it.</tooltip>
346
- <frontend_type>select</frontend_type>
347
- <source_model>adminhtml/system_config_source_yesno</source_model>
348
-
349
- <show_in_default>1</show_in_default>
350
- <show_in_website>0</show_in_website>
351
- <show_in_store>0</show_in_store>
352
-
353
- <sort_order>1</sort_order>
354
- </enable>
355
-
356
- <backup_folder translate="label comment tooltip">
357
- <label>Backup folder</label>
358
- <comment>Backup folder in media/.</comment>
359
- <tooltip>PLACEHOLDER</tooltip>
360
- <frontend_type>text</frontend_type>
361
- <backend_model>mventory/system_config_backend_imgclip_backupfolder</backend_model>
362
-
363
- <depends>
364
- <enable>1</enable>
365
- </depends>
366
-
367
- <show_in_default>1</show_in_default>
368
- <show_in_website>0</show_in_website>
369
- <show_in_store>0</show_in_store>
370
-
371
- <sort_order>2</sort_order>
372
- </backup_folder>
373
-
374
- <exclude_new translate="label comment tooltip">
375
- <label>Exclude new</label>
376
- <comment>New photos are hidden until approved</comment>
377
- <tooltip>New photos have "exclude" flag set on and can be enabled by removing the flag in Images tab of the product details page in the admin or via mVentory app.</tooltip>
378
- <frontend_type>select</frontend_type>
379
- <source_model>adminhtml/system_config_source_yesno</source_model>
380
-
381
- <depends>
382
- <enable>1</enable>
383
- </depends>
384
-
385
- <show_in_default>1</show_in_default>
386
- <show_in_website>0</show_in_website>
387
- <show_in_store>0</show_in_store>
388
-
389
- <sort_order>3</sort_order>
390
- </exclude_new>
391
-
392
- <auto_replace translate="label comment tooltip">
393
- <label>Auto-replace</label>
394
- <comment>Edited photos replace originals automatically</comment>
395
- <tooltip>If a photo was edited and re-saved in the holding folder it will automatically replace the original product photo (Yes) or wait for a review on ImageClip review page (No).</tooltip>
396
- <frontend_type>select</frontend_type>
397
- <source_model>adminhtml/system_config_source_yesno</source_model>
398
-
399
- <depends>
400
- <enable>1</enable>
401
- </depends>
402
-
403
- <show_in_default>1</show_in_default>
404
- <show_in_website>0</show_in_website>
405
- <show_in_store>0</show_in_store>
406
-
407
- <sort_order>4</sort_order>
408
- </auto_replace>
409
-
410
- <log_file translate="label comment tooltip">
411
- <label>Log file</label>
412
- <comment>For all extension activity.</comment>
413
- <tooltip>All actions performed via the extension are logged into this file. You must remove stale records or enable automated clean up using system tools.</tooltip>
414
- <frontend_model>mventory/system_config_form_field_imgcliplog</frontend_model>
415
- <backend_model>mventory/system_config_backend_imgclip_csvlog</backend_model>
416
-
417
- <depends>
418
- <enable>1</enable>
419
- </depends>
420
-
421
- <show_in_default>1</show_in_default>
422
- <show_in_website>0</show_in_website>
423
- <show_in_store>0</show_in_store>
424
-
425
- <sort_order>5</sort_order>
426
- </log_file>
427
-
428
- <dropbox_heading translate="label">
429
- <label>Dropbox options</label>
430
- <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
431
-
432
- <depends>
433
- <enable>1</enable>
434
- </depends>
435
-
436
- <show_in_default>1</show_in_default>
437
- <show_in_website>0</show_in_website>
438
- <show_in_store>0</show_in_store>
439
-
440
- <sort_order>6</sort_order>
441
- </dropbox_heading>
442
-
443
- <dropbox_token translate="label comment tooltip">
444
- <label>Token</label>
445
- <comment>Token from dropbox app.</comment>
446
- <tooltip>Eg 27ZEc1bz3fMAAAAAAAAABOK7q7hAmT55Jy2DcG2hGlGVXQUNwic6EhdNVwt4TEwi</tooltip>
447
- <frontend_type>text</frontend_type>
448
- <frontend_class>required-entry</frontend_class>
449
-
450
- <depends>
451
- <enable>1</enable>
452
- </depends>
453
-
454
- <show_in_default>1</show_in_default>
455
- <show_in_website>0</show_in_website>
456
- <show_in_store>0</show_in_store>
457
-
458
- <sort_order>7</sort_order>
459
- </dropbox_token>
460
-
461
- <dropbox_path translate="label comment tooltip">
462
- <label>Web folder path</label>
463
- <comment>The path in dropbox (/apps/images).</comment>
464
- <tooltip>This is the path as stored in Dropbox. The Dropbox "file-system" so to speak.</tooltip>
465
- <frontend_type>text</frontend_type>
466
- <backend_model>mventory/setting_backend_dbxpath</backend_model>
467
- <frontend_class>required-entry</frontend_class>
468
-
469
- <depends>
470
- <enable>1</enable>
471
- </depends>
472
-
473
- <show_in_default>1</show_in_default>
474
- <show_in_website>0</show_in_website>
475
- <show_in_store>0</show_in_store>
476
-
477
- <sort_order>8</sort_order>
478
- </dropbox_path>
479
-
480
- <image_requirements translate="label">
481
- <label>Image requirements</label>
482
- <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
483
-
484
- <depends>
485
- <enable>1</enable>
486
- </depends>
487
-
488
- <show_in_default>1</show_in_default>
489
- <show_in_website>0</show_in_website>
490
- <show_in_store>0</show_in_store>
491
-
492
- <sort_order>9</sort_order>
493
- </image_requirements>
494
-
495
- <ideal_width translate="label tooltip">
496
- <label>Ideal width, px</label>
497
- <tooltip>Ideal image size is defined by your Magento theme. Images may have slightly different size, but should adhere to the same proportions. Any discrepancies will be highlighted on the review page in mVentory app.</tooltip>
498
- <frontend_type>text</frontend_type>
499
-
500
- <depends>
501
- <enable>1</enable>
502
- </depends>
503
-
504
- <show_in_default>1</show_in_default>
505
- <show_in_website>0</show_in_website>
506
- <show_in_store>0</show_in_store>
507
-
508
- <sort_order>10</sort_order>
509
- </ideal_width>
510
-
511
- <ideal_height translate="label comment">
512
- <label>Ideal height, px</label>
513
- <comment>Ideal full image size</comment>
514
- <frontend_type>text</frontend_type>
515
-
516
- <depends>
517
- <enable>1</enable>
518
- </depends>
519
-
520
- <show_in_default>1</show_in_default>
521
- <show_in_website>0</show_in_website>
522
- <show_in_store>0</show_in_store>
523
-
524
- <sort_order>11</sort_order>
525
- </ideal_height>
526
-
527
- <feedback_email translate="label comment tooltip">
528
- <label>Feedback email</label>
529
- <comment>The email address of your image editor</comment>
530
- <tooltip>The app will help you email feedback to the image editor. Use comma-separated list for more than one.</tooltip>
531
- <frontend_type>text</frontend_type>
532
-
533
- <depends>
534
- <enable>1</enable>
535
- </depends>
536
-
537
- <show_in_default>1</show_in_default>
538
- <show_in_website>0</show_in_website>
539
- <show_in_store>0</show_in_store>
540
-
541
- <sort_order>12</sort_order>
542
- </feedback_email>
543
- </fields>
544
- </image_clips>
545
-
546
  <build_info>
547
  <frontend_model>mventory/setting_buildinfo</frontend_model>
548
 
299
  </fields>
300
  </qr>
301
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
302
  <build_info>
303
  <frontend_model>mventory/setting_buildinfo</frontend_model>
304
 
app/design/adminhtml/default/default/template/mventory/config/build-info.phtml CHANGED
@@ -18,5 +18,5 @@
18
 
19
  ?>
20
 
21
- Build version: b46e52f
22
- <BR/>Build date: 01/05/2015 06:28 UTC
18
 
19
  ?>
20
 
21
+ Build version: 5519f60
22
+ <BR/>Build date: 08/02/2016 11:39 UTC
app/design/adminhtml/default/default/template/mventory/matching.phtml CHANGED
@@ -18,8 +18,6 @@
18
  */
19
 
20
  $_rules = $this->_getRules();
21
- $_attrs = $this->_attrs;
22
-
23
  $_loaderUrl = $this->getSkinUrl('images/ajax-loader-tr.gif');
24
 
25
  $__loading = Mage::helper('adminhtml')->__('Loading...');
@@ -45,7 +43,7 @@ $__loading = Mage::helper('adminhtml')->__('Loading...');
45
 
46
  ?>
47
 
48
- <?php if (count($_rules) < 3 && $_attrs): ?>
49
  <ul id="mventory-matching-messages" class="messages">
50
  <li class="notice-msg">
51
  <ul>
@@ -130,7 +128,7 @@ $__loading = Mage::helper('adminhtml')->__('Loading...');
130
  <div class="mventory-inner clear">
131
 
132
  <?php //Hide attribute selector if there is no attribute and show warning message ?>
133
- <?php if (count($_attrs) < 2): ?>
134
 
135
  <ul id="mventory-matching-attribute-messages" class="messages">
136
  <li class="warning-msg">
@@ -156,7 +154,7 @@ $__loading = Mage::helper('adminhtml')->__('Loading...');
156
  <div>
157
  <select class="mventory-rule-new-attr-name">
158
 
159
- <?php foreach ($_attrs as $id => $attr): ?>
160
  <option <?php if ($attr['used']) echo 'class="mventory-state-used-attr"'; ?> value="<?php echo $id; ?>"><?php echo $attr['label']; ?></option>
161
  <?php endforeach; ?>
162
 
18
  */
19
 
20
  $_rules = $this->_getRules();
 
 
21
  $_loaderUrl = $this->getSkinUrl('images/ajax-loader-tr.gif');
22
 
23
  $__loading = Mage::helper('adminhtml')->__('Loading...');
43
 
44
  ?>
45
 
46
+ <?php if (count($_rules) < 3 && $this->_attrs): ?>
47
  <ul id="mventory-matching-messages" class="messages">
48
  <li class="notice-msg">
49
  <ul>
128
  <div class="mventory-inner clear">
129
 
130
  <?php //Hide attribute selector if there is no attribute and show warning message ?>
131
+ <?php if (count($this->_attrs) < 2): ?>
132
 
133
  <ul id="mventory-matching-attribute-messages" class="messages">
134
  <li class="warning-msg">
154
  <div>
155
  <select class="mventory-rule-new-attr-name">
156
 
157
+ <?php foreach ($this->_attrs as $id => $attr): ?>
158
  <option <?php if ($attr['used']) echo 'class="mventory-state-used-attr"'; ?> value="<?php echo $id; ?>"><?php echo $attr['label']; ?></option>
159
  <?php endforeach; ?>
160
 
package.xml CHANGED
@@ -1,5 +1,5 @@
1
  <?xml version="1.0"?>
2
- <package><name>MVentory_API</name><version>1.5.1</version><stability>stable</stability><license>CC BY-NC-ND 4.0</license><channel>community</channel><extends></extends><summary>The easiest way to sell online: PoS, Inventory and Website control in one elegant Android application.</summary><description>mVentory is an Android application for efficient management of Magento stores. This extension provides additional API functionality and is required for the app to connect to your Magento website.
3
 
4
 
5
 
@@ -49,5 +49,10 @@ Creative Commons BY-NC-ND 4.0 (http://creativecommons.org/licenses/by-nc-nd/4.0/
49
 
50
  The extension is free for non-commercial or trial use. Please, request a FREE commercial license from info@mventory.com
51
 
52
- Visit http://mventory.com for more info.</description><notes>* Fix HTTPS handling for android app links
53
- * Updated config hints and tooltips</notes><authors><author><name>Anatoly A. Kazantsev</name><user>anatoly</user><email>anatoly@mventory.com</email></author></authors><date>2015-04-30</date><time>23:28:59</time><compatible></compatible><dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="js"><dir name="jquery"><file name="jquery-min.js" hash="baae1db8cca4abb2265b0a6e01f1beed"/><file name="jquery-ui-custom-min.js" hash="e37cbc707c78240780a5ce641f476eb3"/></dir><dir name="mventory"><file name="matching.js" hash="2a3d6d34c60aee3f0efe94ff96fd67fc"/></dir></dir><dir name="var"><dir name="connect"><file name="MVentory_API.xml" hash="ad19646bef2d7d239906d23e10cadd02"/></dir></dir><dir name="app"><dir name="design"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="mventory.xml" hash="902a95b8b78acdf528e13993eb6f5030"/></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="mventory.xml" hash="46b4a123593ad761f3521d5b2d4f71bb"/></dir><dir name="template"><dir name="mventory"><file name="element.phtml" hash="cb233713a0e550b2165280231c24360f"/><file name="matching.phtml" hash="5378e331d15f5daf582021dd96d7f130"/><file name="metadata.phtml" hash="29d84bb98175c7ca358e68f49cffa8f3"/><dir name="matching"><file name="categories.phtml" hash="ab29d30352987276065b9e933acd3fcc"/></dir><dir name="customer"><dir name="edit"><file name="js.phtml" hash="36e6fba58aa4eff02bc57e2a1d628d79"/></dir></dir><dir name="config"><file name="build-info.phtml" hash="0470743e9162bf38d4746fbb8c20e273"/></dir></dir></dir></dir></dir></dir></dir><dir name="code"><dir name="community"><dir name="MVentory"><dir name="API"><dir name="controllers"><file name="AppController.php" hash="d4ab9585f3853ec17a197aff505be7c5"/><file name="CarriersController.php" hash="326f66c967a9ee2216be9c6dae043d97"/><file name="CustomerController.php" hash="029f18706ffe07e8a466eb8c30d0a2f9"/><file name="DropboxController.php" hash="e4f9ee9fcafd993e26e931b31c2228c7"/><file name="ImageController.php" hash="deb5c8227a982e8a328479aa88e8f088"/><file name="LogsController.php" hash="96c331e223a6a94ef9d3ba7192d24935"/><file name="MatchingController.php" hash="071284fc5681b70ead84ff2a98f3d519"/><file name="QrController.php" hash="1678dcc58be2ebcb554e7dc0e7c26d80"/><file name="SwitchController.php" hash="1a00ad2aae0845faea5dbe1475e84d8f"/><dir name="Catalog"><file name="ProductController.php" hash="b507cf269539c6dc3fea5e81bada5664"/></dir></dir><dir name="Block"><file name="Matching.php" hash="da741edb96130c120e4eddf0b677bbd2"/><file name="Metadata.php" hash="4b68a44b1f064093ac94722c40c7c651"/><dir name="Setting"><file name="Buildinfo.php" hash="87e71b9cd02e61dff260609be485ca54"/><file name="Fieldset.php" hash="5b5a717192210b9726e5e86ee75949d9"/></dir><dir name="Matching"><file name="Categories.php" hash="e5ffc5a02aa37a43d90079c66eace63b"/></dir><dir name="Carrier"><dir name="Volumerate"><file name="Grid.php" hash="182f5a1eb264ec7648aae468d5faef99"/></dir></dir><dir name="System"><dir name="Config"><dir name="Form"><dir name="Field"><file name="Exportrates.php" hash="aa4a0e11eaa9330ba35f460582290927"/><file name="Imgcliplog.php" hash="05f8dfba30a9acdc6462b5aadbc154e7"/></dir></dir></dir></dir></dir><dir name="data"><dir name="mventory_setup"><file name="data-upgrade-20-21.php" hash="ab6622b831fc5a806d780eff2eacf75b"/><file name="data-upgrade-23-24.php" hash="9d5bd2a2745585d814d3b203008ef2ad"/><file name="data-upgrade-27-28.php" hash="6b63835702467615f932f6fbac78e97d"/><file name="data-upgrade-28-29.php" hash="db2ca19d3162d377bd1927a22f2b6be0"/></dir></dir><dir name="Helper"><file name="Barcode.php" hash="57de68928ed6da93a02a044bf9f93f86"/><file name="Data.php" hash="d8016b9f4770342d10fe8a047ff1d167"/><file name="Image.php" hash="cb931b138f4c90f7f52cf8303ecb6aa2"/><file name="Imageclipper.php" hash="83634ad59a28a237d5cff3e7b1fb5131"/><file name="Product.php" hash="74a8787d1fc9dc4ff4bf3519d5ecab1e"/><file name="String.php" hash="258c2000ce8feb070211e04816e903e3"/><dir name="Mage"><dir name="Sales"><file name="Data.php" hash="84fbc100be8baa83e5dbb5fcecccbd6b"/></dir></dir><dir name="Product"><file name="Attribute.php" hash="130bee848a2d12bc75ed07383d15c190"/><file name="Configurable.php" hash="5f5eadcb33883752a56ad306fadf32dd"/></dir></dir><dir name="sql"><dir name="mventory_setup"><file name="install-3.php" hash="7514f77abff39b3d359a59978784e275"/><file name="upgrade-10-11.php" hash="fb312c3621c87f7b2222ba56e3f83fb9"/><file name="upgrade-12-13.php" hash="aefb35e0871eafd84864f8052ff21423"/><file name="upgrade-17-18.php" hash="a06e899380dd85a175b331fe5b52f324"/><file name="upgrade-18-19.php" hash="00113090ec00f2385c78d28464871c46"/><file name="upgrade-20-21.php" hash="27d45b15f3ba21df99cd90a3750f9c79"/><file name="upgrade-21-22.php" hash="e882fef187fa158587a4451bfced7e45"/><file name="upgrade-22-23.php" hash="e67150b521f86d35027fcafcf3d6000b"/><file name="upgrade-24-25.php" hash="ef3e432929a236bed6ef0d9c19ca3db5"/><file name="upgrade-25-26.php" hash="e134738e9a55fc1691a38b5eb4cbe73e"/><file name="upgrade-26-27.php" hash="fb5e01ee89497e99426f816240791d4a"/><file name="upgrade-3-4.php" hash="9f04a747fe387598a2871cdc8c9caf87"/><file name="upgrade-8-9.php" hash="0e3e3bb76a0cd039910bf17f2956285f"/><file name="upgrade-9-10.php" hash="05ccf6ee0b530dc5bf63b5fe0bc8f044"/></dir></dir><dir name="Model"><file name="Config.php" hash="c1232e1bf9267f2fa120c96087e69191"/><file name="Matching.php" hash="a54d42a7da654d845a1e79c745a2166b"/><file name="Observer.php" hash="ffd19ee0abbb1f49d8df1855f37ba01f"/><file name="Payment.php" hash="d2745860dfb2eca1adbc0f7b3de6fbfc"/><file name="Shipping.php" hash="043c9d12eebdff5016b84e4d86cc1e77"/><dir name="Setting"><dir name="Backend"><file name="Dbxpath.php" hash="cd9272381487b8a599a63cfe123d57b7"/></dir></dir><dir name="Dataflow"><file name="Api.php" hash="bfb1829343503354daf9db216f313976"/></dir><dir name="Category"><file name="Api.php" hash="9628dc59a845bc36a80a490ee808c338"/></dir><dir name="Carrier"><file name="Volumerate.php" hash="609709fdded050a3ac4204464ef6d922"/></dir><dir name="Stock"><dir name="Item"><file name="Api.php" hash="64473e1600fd51600853eddee75d598e"/></dir></dir><dir name="Config"><dir name="Data"><file name="Websites.php" hash="a7314efd0ca3c6adc8594893c64555aa"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Carrier"><file name="Volumerate.php" hash="2010718655ff39b4559a369403074fa4"/></dir><dir name="Imgclip"><file name="Backupfolder.php" hash="07bd6a17f8e65d96c47ed52d5f1c38e6"/><file name="Csvlog.php" hash="f3780e5079abb09594e018cfb36e4226"/></dir></dir><dir name="Source"><file name="Allowedshippingtypes.php" hash="d2a6259b9278242d3acf8a0c4f34c763"/><file name="Contenttype.php" hash="e91f6a1a495f1a19e1875fbde4ed5aac"/><file name="Customers.php" hash="b3e615aa64cce43d1bb4cadbe41c2ee7"/><file name="Inputmethod.php" hash="0cdc2b42456faeffd2b86481d2a04940"/><file name="Visibility.php" hash="22a8599fb6867d2fe5887f2f9b0246cb"/><file name="Website.php" hash="b8ea07d8f5c82df42c7f0b9be950bb0e"/></dir></dir></dir><dir name="Product"><file name="Action.php" hash="6cb738d6a133a99d0004cad23fed84e5"/><file name="Api.php" hash="630a4b1ae11395b260a22ad880098573"/><dir name="Attribute"><file name="Api.php" hash="f6c53d7a8988119f2f57bfce34dfd1d2"/><dir name="Set"><file name="Api.php" hash="112da5255f9e73b0bc715bccf5c6103f"/></dir><dir name="Media"><file name="Api.php" hash="c8fde457de5a6c59d345f3eed49d24bb"/></dir></dir></dir><dir name="Resource"><file name="Matching.php" hash="790d70f09cc175f643eccdfff754d92c"/><file name="Product.php" hash="e04d66d258b01579e4e6301a01f70771"/><file name="Setup.php" hash="5ce8cb51734c03b947d37a0eff1b7117"/><file name="Sku.php" hash="21379417a6a30c33f74f0a5ffbdfbac7"/><dir name="Carrier"><file name="Volumerate.php" hash="6763c1a02ff9750fd5d8eca703da05dd"/><dir name="Volumerate"><file name="Collection.php" hash="a5e5852a7d58fa31cb49ef7e4c1e38cf"/></dir></dir><dir name="Product"><file name="Collection.php" hash="5e09f3e940fa105aecb8a74bdde295ac"/></dir><dir name="Cart"><file name="Item.php" hash="3e1cbab71c91eca69f225668d55f3d0d"/></dir><dir name="Entity"><file name="Attribute.php" hash="14461aa0ae2e032b9efb16ebf23096af"/></dir><dir name="Order"><file name="Transaction.php" hash="16b62fc85e4b68443941c8212054cce7"/></dir></dir><dir name="Cart"><file name="Api.php" hash="81e07144d21f9cd655abe29732bd4fa7"/><file name="Item.php" hash="84ad9830e7e50a55e28fcd4105521a91"/><dir name="Payment"><file name="Api.php" hash="b9253dd46ee980e322d10be6b7b0ffd7"/></dir></dir><dir name="Order"><file name="Api.php" hash="3d65404a24ab282eee8764d0c77ccaa3"/><file name="Transaction.php" hash="0666f26f229b11f30a1db2dfd6e1bf77"/><dir name="Shipment"><file name="Api.php" hash="f7ac72e14810d9af0ab1f876b57e00b9"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="bceda356fa43b9f5bfc7ab0ea91bafca"/><file name="api.xml" hash="e69c9b6a59cb2bcd4324b53d43bd7440"/><file name="config.xml" hash="1e0e76c76b881d080eceb836b50e5ef7"/><file name="system.xml" hash="0d907826800bab7f4acb4379f53d5483"/></dir></dir></dir><dir name="Hackathon"><dir name="PSR0Autoloader"><dir name="Model"><file name="Observer.php" hash="27ff6168c7057b3d116915c50e34c0a6"/><file name="SplAutoloader.php" hash="ca80992ff765e7fa88c507976205f7e2"/></dir><dir name="etc"><file name="config.xml" hash="4b76d9de1d114e8bf5dfef6fae75d973"/></dir></dir></dir></dir></dir><dir name="etc"><dir name="modules"><file name="Hackathon_PSR0Autoloader.xml" hash="87095bbf80d16f7e97304317761690dd"/><file name="MVentory_API.xml" hash="3002a36d0a49a782ead45dc5bf2d885a"/></dir></dir></dir><dir name="lib"><dir name="Dropbox"><file name="AppInfo.php" hash="b08006228ca38ac11c1a431646536ad9"/><file name="AppInfoLoadException.php" hash="06360c81e5ceafe6d029a72e0d38a58a"/><file name="ArrayEntryStore.php" hash="abfcab905705695de35004a314b05ec0"/><file name="AuthBase.php" hash="b0ac3fdae57cb61152d0f60066cd1e77"/><file name="AuthInfo.php" hash="3166cd194c72d1951d80bb1f7cc572f8"/><file name="AuthInfoLoadException.php" hash="4435a95cc3ad35471b1491834d3462f2"/><file name="Checker.php" hash="7433c56c1a9b53f918a5ad66d3844caf"/><file name="Client.php" hash="1c8fbbf62477bfba8ba7892f624604ef"/><file name="Curl.php" hash="9ff4836a05237b7990eac9a16a6a97ff"/><file name="CurlStreamRelay.php" hash="99b9d4b311110bbef6455cc3769585fc"/><file name="DeserializeException.php" hash="bb74de5ce4ad24ed03efabe52604a300"/><file name="DropboxMetadataHeaderCatcher.php" hash="608e493bbc560cb5d89804b831b38c43"/><file name="Exception.php" hash="1c55eda1bc2e9fb753c1f8f32b95c2e9"/><file name="Host.php" hash="c46c786726fc59c890ee2e588a7c3af6"/><file name="HttpResponse.php" hash="5cb98bfbaac3e48ffb7f1fe4ecab400c"/><file name="OAuth1AccessToken.php" hash="25ed61cb959c4446ec79552a4ce7fa77"/><file name="OAuth1Upgrader.php" hash="f3bc2125746d19bc99c0f4d8887ea3e6"/><file name="Path.php" hash="242a8243ee9f66281058979922e76c7f"/><file name="RequestUtil.php" hash="34e02972f318c99d1a2247bcbb5eeda7"/><file name="SSLTester.php" hash="2aba98547a9915608073438f6370fd15"/><file name="Security.php" hash="252e63a1a377935aa1ef3e40405d3412"/><file name="StreamReadException.php" hash="464bfb0fc75beef2b73e0c5192d0a061"/><file name="ValueStore.php" hash="c932c52f15d67c01a6e3c841f82306dd"/><file name="WebAuth.php" hash="e9e971b77ffc60544a2d9f10a5940eaf"/><file name="WebAuthBase.php" hash="1128a83bbf693e528e68a3c3893aef4f"/><file name="WebAuthNoRedirect.php" hash="87f2494ed95142f7a7e4c968fbb3e09e"/><file name="WriteMode.php" hash="22a3b70bf74feae770e4aa94915a1b1a"/><file name="app-info.json" hash="418aafd4a85212f6b96a1d180c2fd053"/><file name="autoload.php" hash="55bd4af009c75821e0416f33ef5e5fab"/><file name="strict.php" hash="b39f6f3228a1a499ac88ada9ec57ebfd"/><dir name="Exception"><file name="BadRequest.php" hash="5f0ae16a2d28c26bc66ed2e43ac8b4e1"/><file name="BadResponse.php" hash="c534a78bd9436b3ae6130bfbbdf7b8da"/><file name="BadResponseCode.php" hash="9720559b39e522a3acb6a9986b68c711"/><file name="InvalidAccessToken.php" hash="d2106a45d6366d7060d351e89fa738ed"/><file name="NetworkIO.php" hash="1278b1d756b43912f9083985df756305"/><file name="ProtocolError.php" hash="c99f595645d9fba2ddcec415483ea3af"/><file name="RetryLater.php" hash="b3d88a95ffd772f94838ab03c479f6a7"/><file name="ServerError.php" hash="ed7f0cb2dd114e9f60cf12acece68611"/></dir><dir name="certs"><file name="trusted-certs.crt" hash="847f0dc12cc8ddee1969a3ec857facb6"/></dir><dir name="WebAuthException"><file name="BadRequest.php" hash="8b2e77ef6128b2b96c20ec0847c5812b"/><file name="BadState.php" hash="039a2e21cac09f89ab6090e4f9648241"/><file name="Csrf.php" hash="3e2f878255c5366cabcc2880a7c97586"/><file name="NotApproved.php" hash="5d5db96ad13433a081a0db5dcb6d9412"/><file name="Provider.php" hash="5cf549587d95873cfb4a8e96f98d0534"/></dir></dir></dir><dir name="skin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="mventory"><dir name="css"><file name="styles.css" hash="6e0215c7d35145479634fd50b3b996e3"/></dir></dir></dir></dir></dir></dir></target></contents></package>
 
 
 
 
 
1
  <?xml version="1.0"?>
2
+ <package><name>MVentory_API</name><version>1.6.0</version><stability>stable</stability><license>CC BY-NC-ND 4.0</license><channel>community</channel><extends></extends><summary>The easiest way to sell online: PoS, Inventory and Website control in one elegant Android application.</summary><description>mVentory is an Android application for efficient management of Magento stores. This extension provides additional API functionality and is required for the app to connect to your Magento website.
3
 
4
 
5
 
49
 
50
  The extension is free for non-commercial or trial use. Please, request a FREE commercial license from info@mventory.com
51
 
52
+ Visit http://mventory.com for more info.</description><notes>* Bug fixes and refactoring
53
+ * Image Review moved into separate extension
54
+ * Compatibility with SUPEE-6788
55
+ * Allow category matching based on yes/no attributes
56
+
57
+ Note: Category matching has changed. All rules that match will be applied to make
58
+ assignment of a product to multiple categories easier.</notes><authors><author><name>Anatoly A. Kazantsev</name><user>anatoly</user><email>anatoly@mventory.com</email></author></authors><date>2016-02-08</date><time>3:39:22</time><compatible></compatible><dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="js"><dir name="jquery"><file name="jquery-min.js" hash="baae1db8cca4abb2265b0a6e01f1beed"/><file name="jquery-ui-custom-min.js" hash="e37cbc707c78240780a5ce641f476eb3"/></dir><dir name="mventory"><file name="matching.js" hash="2a3d6d34c60aee3f0efe94ff96fd67fc"/></dir></dir><dir name="var"><dir name="connect"><file name="MVentory_API.xml" hash="da16fa4c396c5da070270de40212966d"/></dir></dir><dir name="app"><dir name="design"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="mventory.xml" hash="902a95b8b78acdf528e13993eb6f5030"/></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="mventory.xml" hash="46b4a123593ad761f3521d5b2d4f71bb"/></dir><dir name="template"><dir name="mventory"><file name="element.phtml" hash="cb233713a0e550b2165280231c24360f"/><file name="matching.phtml" hash="8ea9c645ab56cf781c20394cb70404ba"/><file name="metadata.phtml" hash="29d84bb98175c7ca358e68f49cffa8f3"/><dir name="matching"><file name="categories.phtml" hash="ab29d30352987276065b9e933acd3fcc"/></dir><dir name="customer"><dir name="edit"><file name="js.phtml" hash="36e6fba58aa4eff02bc57e2a1d628d79"/></dir></dir><dir name="config"><file name="build-info.phtml" hash="5ac77e1eb88cf6a61c919461a5f7535a"/></dir></dir></dir></dir></dir></dir></dir><dir name="code"><dir name="community"><dir name="MVentory"><dir name="API"><dir name="controllers"><file name="AppController.php" hash="d4ab9585f3853ec17a197aff505be7c5"/><file name="DropboxController.php" hash="e01cffec132c9ef06fdcc383d6f032ad"/><file name="ImageController.php" hash="deb5c8227a982e8a328479aa88e8f088"/><file name="QrController.php" hash="1678dcc58be2ebcb554e7dc0e7c26d80"/><file name="SwitchController.php" hash="1a00ad2aae0845faea5dbe1475e84d8f"/><dir name="Mventory"><file name="CarriersController.php" hash="01eaded7d5657734ad369dd5896a49b0"/><file name="CustomerController.php" hash="ce8499f6debad3df37bc576844f11b2b"/><file name="LogsController.php" hash="d43b0317cc5b35c360aefb7538b5ba43"/><file name="MatchingController.php" hash="5636dc831558cfa4328822f56c9eab6f"/><dir name="Catalog"><file name="ProductController.php" hash="4790e3b3d72699faf5e0c41106cb5aae"/></dir></dir></dir><dir name="Block"><file name="Matching.php" hash="6ed6bbce33870acf34a313c590707dc0"/><file name="Metadata.php" hash="4b68a44b1f064093ac94722c40c7c651"/><dir name="Setting"><file name="Buildinfo.php" hash="87e71b9cd02e61dff260609be485ca54"/><file name="Fieldset.php" hash="5b5a717192210b9726e5e86ee75949d9"/></dir><dir name="Matching"><file name="Categories.php" hash="e5ffc5a02aa37a43d90079c66eace63b"/></dir><dir name="Carrier"><dir name="Volumerate"><file name="Grid.php" hash="182f5a1eb264ec7648aae468d5faef99"/></dir></dir><dir name="System"><dir name="Config"><dir name="Form"><dir name="Field"><file name="Exportrates.php" hash="ddf0f8e341ac369f17769eb0b627a2c7"/><file name="Imgcliplog.php" hash="30f64331eab18977ec25c41f3565466c"/><file name="Template.php" hash="e018ed53db7aa3d794a93f59be837518"/></dir></dir></dir></dir></dir><dir name="data"><dir name="mventory_setup"><file name="data-upgrade-20-21.php" hash="ab6622b831fc5a806d780eff2eacf75b"/><file name="data-upgrade-23-24.php" hash="9d5bd2a2745585d814d3b203008ef2ad"/><file name="data-upgrade-27-28.php" hash="6b63835702467615f932f6fbac78e97d"/><file name="data-upgrade-28-29.php" hash="db2ca19d3162d377bd1927a22f2b6be0"/></dir></dir><dir name="Helper"><file name="Barcode.php" hash="57de68928ed6da93a02a044bf9f93f86"/><file name="Data.php" hash="bff33fc3ef5c305ab13030eb5acebd2f"/><file name="Image.php" hash="cb931b138f4c90f7f52cf8303ecb6aa2"/><file name="Imageclipper.php" hash="08d96954626102448011dfdcccbccf78"/><file name="Product.php" hash="7200352ec5501528d1a8f1e9db00c65d"/><file name="String.php" hash="258c2000ce8feb070211e04816e903e3"/><dir name="Mage"><dir name="Sales"><file name="Data.php" hash="84fbc100be8baa83e5dbb5fcecccbd6b"/></dir></dir><dir name="Product"><file name="Attribute.php" hash="130bee848a2d12bc75ed07383d15c190"/><file name="Configurable.php" hash="5f5eadcb33883752a56ad306fadf32dd"/></dir></dir><dir name="sql"><dir name="mventory_setup"><file name="install-3.php" hash="7514f77abff39b3d359a59978784e275"/><file name="upgrade-10-11.php" hash="fb312c3621c87f7b2222ba56e3f83fb9"/><file name="upgrade-12-13.php" hash="aefb35e0871eafd84864f8052ff21423"/><file name="upgrade-17-18.php" hash="a06e899380dd85a175b331fe5b52f324"/><file name="upgrade-18-19.php" hash="00113090ec00f2385c78d28464871c46"/><file name="upgrade-20-21.php" hash="27d45b15f3ba21df99cd90a3750f9c79"/><file name="upgrade-21-22.php" hash="e882fef187fa158587a4451bfced7e45"/><file name="upgrade-22-23.php" hash="e67150b521f86d35027fcafcf3d6000b"/><file name="upgrade-24-25.php" hash="ef3e432929a236bed6ef0d9c19ca3db5"/><file name="upgrade-25-26.php" hash="e134738e9a55fc1691a38b5eb4cbe73e"/><file name="upgrade-26-27.php" hash="fb5e01ee89497e99426f816240791d4a"/><file name="upgrade-3-4.php" hash="9f04a747fe387598a2871cdc8c9caf87"/><file name="upgrade-8-9.php" hash="0e3e3bb76a0cd039910bf17f2956285f"/><file name="upgrade-9-10.php" hash="05ccf6ee0b530dc5bf63b5fe0bc8f044"/></dir></dir><dir name="Model"><file name="Config.php" hash="093a3ce94560ab56af1288e2b9ed3248"/><file name="Matching.php" hash="70eb93aa9425e5f3b15866288b64f769"/><file name="Observer.php" hash="13a120855a6cf9a799cbdf2e5a2a57d2"/><file name="Payment.php" hash="d2745860dfb2eca1adbc0f7b3de6fbfc"/><file name="Shipping.php" hash="043c9d12eebdff5016b84e4d86cc1e77"/><dir name="Setting"><dir name="Backend"><file name="Backupdir.php" hash="3e6f19697fbaae8b03961680524f0964"/><file name="Dbxpath.php" hash="cd9272381487b8a599a63cfe123d57b7"/></dir></dir><dir name="Dataflow"><file name="Api.php" hash="bfb1829343503354daf9db216f313976"/></dir><dir name="Category"><file name="Api.php" hash="9628dc59a845bc36a80a490ee808c338"/></dir><dir name="Carrier"><file name="Volumerate.php" hash="609709fdded050a3ac4204464ef6d922"/></dir><dir name="Stock"><dir name="Item"><file name="Api.php" hash="64473e1600fd51600853eddee75d598e"/></dir></dir><dir name="Config"><dir name="Data"><file name="Websites.php" hash="a7314efd0ca3c6adc8594893c64555aa"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Carrier"><file name="Volumerate.php" hash="2010718655ff39b4559a369403074fa4"/></dir></dir><dir name="Source"><file name="Allowedshippingtypes.php" hash="d2a6259b9278242d3acf8a0c4f34c763"/><file name="Contenttype.php" hash="e91f6a1a495f1a19e1875fbde4ed5aac"/><file name="Customers.php" hash="b3e615aa64cce43d1bb4cadbe41c2ee7"/><file name="Inputmethod.php" hash="0cdc2b42456faeffd2b86481d2a04940"/><file name="Visibility.php" hash="22a8599fb6867d2fe5887f2f9b0246cb"/><file name="Website.php" hash="b8ea07d8f5c82df42c7f0b9be950bb0e"/></dir></dir></dir><dir name="Product"><file name="Action.php" hash="6cb738d6a133a99d0004cad23fed84e5"/><file name="Api.php" hash="cf529699ca985ff88cca42b91e1a6d8b"/><dir name="Attribute"><file name="Api.php" hash="f6c53d7a8988119f2f57bfce34dfd1d2"/><dir name="Set"><file name="Api.php" hash="112da5255f9e73b0bc715bccf5c6103f"/></dir><dir name="Media"><file name="Api.php" hash="ddc699334a2d8e168de814b9a2073876"/></dir></dir></dir><dir name="Resource"><file name="Matching.php" hash="790d70f09cc175f643eccdfff754d92c"/><file name="Product.php" hash="e04d66d258b01579e4e6301a01f70771"/><file name="Setup.php" hash="5ce8cb51734c03b947d37a0eff1b7117"/><file name="Sku.php" hash="21379417a6a30c33f74f0a5ffbdfbac7"/><dir name="Carrier"><file name="Volumerate.php" hash="6763c1a02ff9750fd5d8eca703da05dd"/><dir name="Volumerate"><file name="Collection.php" hash="a5e5852a7d58fa31cb49ef7e4c1e38cf"/></dir></dir><dir name="Product"><file name="Collection.php" hash="5e09f3e940fa105aecb8a74bdde295ac"/></dir><dir name="Cart"><file name="Item.php" hash="3e1cbab71c91eca69f225668d55f3d0d"/></dir><dir name="Entity"><file name="Attribute.php" hash="14461aa0ae2e032b9efb16ebf23096af"/></dir><dir name="Order"><file name="Transaction.php" hash="16b62fc85e4b68443941c8212054cce7"/></dir></dir><dir name="Cart"><file name="Api.php" hash="ad1f00db94427ebae92202f1b51ca28f"/><file name="Item.php" hash="84ad9830e7e50a55e28fcd4105521a91"/><dir name="Payment"><file name="Api.php" hash="b9253dd46ee980e322d10be6b7b0ffd7"/></dir></dir><dir name="Order"><file name="Api.php" hash="3d65404a24ab282eee8764d0c77ccaa3"/><file name="Transaction.php" hash="0666f26f229b11f30a1db2dfd6e1bf77"/><dir name="Shipment"><file name="Api.php" hash="f7ac72e14810d9af0ab1f876b57e00b9"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="bceda356fa43b9f5bfc7ab0ea91bafca"/><file name="api.xml" hash="e69c9b6a59cb2bcd4324b53d43bd7440"/><file name="config.xml" hash="2ae5913b9fac82ee527fc406631aaaa7"/><file name="system.xml" hash="16d4a80c430b1aed4575e037d9c859e4"/></dir></dir></dir><dir name="Hackathon"><dir name="PSR0Autoloader"><dir name="Model"><file name="Observer.php" hash="27ff6168c7057b3d116915c50e34c0a6"/><file name="SplAutoloader.php" hash="ca80992ff765e7fa88c507976205f7e2"/></dir><dir name="etc"><file name="config.xml" hash="4b76d9de1d114e8bf5dfef6fae75d973"/></dir></dir></dir></dir></dir><dir name="etc"><dir name="modules"><file name="Hackathon_PSR0Autoloader.xml" hash="87095bbf80d16f7e97304317761690dd"/><file name="MVentory_API.xml" hash="3002a36d0a49a782ead45dc5bf2d885a"/></dir></dir></dir><dir name="lib"><dir name="Dropbox"><file name="AppInfo.php" hash="b08006228ca38ac11c1a431646536ad9"/><file name="AppInfoLoadException.php" hash="06360c81e5ceafe6d029a72e0d38a58a"/><file name="ArrayEntryStore.php" hash="abfcab905705695de35004a314b05ec0"/><file name="AuthBase.php" hash="b0ac3fdae57cb61152d0f60066cd1e77"/><file name="AuthInfo.php" hash="3166cd194c72d1951d80bb1f7cc572f8"/><file name="AuthInfoLoadException.php" hash="4435a95cc3ad35471b1491834d3462f2"/><file name="Checker.php" hash="7433c56c1a9b53f918a5ad66d3844caf"/><file name="Client.php" hash="1c8fbbf62477bfba8ba7892f624604ef"/><file name="Curl.php" hash="9ff4836a05237b7990eac9a16a6a97ff"/><file name="CurlStreamRelay.php" hash="99b9d4b311110bbef6455cc3769585fc"/><file name="DeserializeException.php" hash="bb74de5ce4ad24ed03efabe52604a300"/><file name="DropboxMetadataHeaderCatcher.php" hash="608e493bbc560cb5d89804b831b38c43"/><file name="Exception.php" hash="1c55eda1bc2e9fb753c1f8f32b95c2e9"/><file name="Host.php" hash="c46c786726fc59c890ee2e588a7c3af6"/><file name="HttpResponse.php" hash="5cb98bfbaac3e48ffb7f1fe4ecab400c"/><file name="OAuth1AccessToken.php" hash="25ed61cb959c4446ec79552a4ce7fa77"/><file name="OAuth1Upgrader.php" hash="f3bc2125746d19bc99c0f4d8887ea3e6"/><file name="Path.php" hash="242a8243ee9f66281058979922e76c7f"/><file name="RequestUtil.php" hash="34e02972f318c99d1a2247bcbb5eeda7"/><file name="SSLTester.php" hash="2aba98547a9915608073438f6370fd15"/><file name="Security.php" hash="252e63a1a377935aa1ef3e40405d3412"/><file name="StreamReadException.php" hash="464bfb0fc75beef2b73e0c5192d0a061"/><file name="ValueStore.php" hash="c932c52f15d67c01a6e3c841f82306dd"/><file name="WebAuth.php" hash="e9e971b77ffc60544a2d9f10a5940eaf"/><file name="WebAuthBase.php" hash="1128a83bbf693e528e68a3c3893aef4f"/><file name="WebAuthNoRedirect.php" hash="87f2494ed95142f7a7e4c968fbb3e09e"/><file name="WriteMode.php" hash="22a3b70bf74feae770e4aa94915a1b1a"/><file name="app-info.json" hash="418aafd4a85212f6b96a1d180c2fd053"/><file name="autoload.php" hash="55bd4af009c75821e0416f33ef5e5fab"/><file name="strict.php" hash="b39f6f3228a1a499ac88ada9ec57ebfd"/><dir name="Exception"><file name="BadRequest.php" hash="5f0ae16a2d28c26bc66ed2e43ac8b4e1"/><file name="BadResponse.php" hash="c534a78bd9436b3ae6130bfbbdf7b8da"/><file name="BadResponseCode.php" hash="9720559b39e522a3acb6a9986b68c711"/><file name="InvalidAccessToken.php" hash="d2106a45d6366d7060d351e89fa738ed"/><file name="NetworkIO.php" hash="1278b1d756b43912f9083985df756305"/><file name="ProtocolError.php" hash="c99f595645d9fba2ddcec415483ea3af"/><file name="RetryLater.php" hash="b3d88a95ffd772f94838ab03c479f6a7"/><file name="ServerError.php" hash="ed7f0cb2dd114e9f60cf12acece68611"/></dir><dir name="certs"><file name="trusted-certs.crt" hash="847f0dc12cc8ddee1969a3ec857facb6"/></dir><dir name="WebAuthException"><file name="BadRequest.php" hash="8b2e77ef6128b2b96c20ec0847c5812b"/><file name="BadState.php" hash="039a2e21cac09f89ab6090e4f9648241"/><file name="Csrf.php" hash="3e2f878255c5366cabcc2880a7c97586"/><file name="NotApproved.php" hash="5d5db96ad13433a081a0db5dcb6d9412"/><file name="Provider.php" hash="5cf549587d95873cfb4a8e96f98d0534"/></dir></dir></dir><dir name="skin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="mventory"><dir name="css"><file name="styles.css" hash="f601b571e9b565d5d78a8de48c56038d"/></dir></dir></dir></dir></dir></dir></target></contents></package>
skin/adminhtml/default/default/mventory/css/styles.css CHANGED
@@ -10,7 +10,7 @@
10
  * See http://mventory.com/legal/licensing/ for other licensing options.
11
  *
12
  * @package MVentory/API
13
- * @copyright Copyright (c) 2014 mVentory Ltd. (http://mventory.com)
14
  * @license http://creativecommons.org/licenses/by-nc-nd/4.0/
15
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
16
  */
@@ -198,6 +198,7 @@
198
  #mventory-categories-wrapper {
199
  display: none;
200
  position: absolute;
 
201
  }
202
 
203
  #mventory-matching-attribute-messages {
@@ -213,25 +214,39 @@
213
  list-style: disc inside;
214
  }
215
 
216
- .fieldset-footer {
217
- margin: 20px 5px 5px;;
 
 
218
  }
219
 
220
- .fieldset-footer h4 {
 
 
 
 
 
 
 
 
 
221
  margin: 0 0 10px;
222
  }
223
 
224
- .fieldset-footer ol {
 
 
 
 
 
225
  list-style: decimal inside;
226
  margin: 0 0 0.5em;
227
  }
228
 
229
- /* System config */
230
- .section-config .value .buttons-set {
231
- display: inline-block;
232
- margin: 0;
233
  }
234
 
235
- #mventory-logo {
236
- display: block;
237
  }
10
  * See http://mventory.com/legal/licensing/ for other licensing options.
11
  *
12
  * @package MVentory/API
13
+ * @copyright Copyright (c) 2014-2015 mVentory Ltd. (http://mventory.com)
14
  * @license http://creativecommons.org/licenses/by-nc-nd/4.0/
15
  * @author Anatoly A. Kazantsev <anatoly@mventory.com>
16
  */
198
  #mventory-categories-wrapper {
199
  display: none;
200
  position: absolute;
201
+ z-index: 1000;
202
  }
203
 
204
  #mventory-matching-attribute-messages {
214
  list-style: disc inside;
215
  }
216
 
217
+ /* System config */
218
+ .section-config .value .buttons-set {
219
+ display: inline-block;
220
+ margin: 0;
221
  }
222
 
223
+ #mventory-logo {
224
+ display: block;
225
+ }
226
+
227
+ .mventory-field-fixed-width {
228
+ width: 570px;
229
+ }
230
+
231
+
232
+ .mventory-field-template h4 {
233
  margin: 0 0 10px;
234
  }
235
 
236
+ .mventory-field-template ul {
237
+ list-style: disc inside;
238
+ margin: 0 0 0.5em;
239
+ }
240
+
241
+ .mventory-field-template ol {
242
  list-style: decimal inside;
243
  margin: 0 0 0.5em;
244
  }
245
 
246
+ .mventory-field-template ol ul {
247
+ margin: 0 0 0 1.7em;
 
 
248
  }
249
 
250
+ .fieldset-footer {
251
+ margin: 20px 5px 5px;;
252
  }
var/connect/MVentory_API.xml CHANGED
@@ -35,10 +35,15 @@ The extension is free for non-commercial or trial use. Please, request a FREE co
35
  Visit http://mventory.com for more info.</description>
36
  <license>CC BY-NC-ND 4.0</license>
37
  <license_uri>http://creativecommons.org/licenses/by-nc-nd/4.0/</license_uri>
38
- <version>1.5.1</version>
39
  <stability>stable</stability>
40
- <notes>* Fix HTTPS handling for android app links
41
- * Updated config hints and tooltips</notes>
 
 
 
 
 
42
  <authors>
43
  <name>
44
  <name>Anatoly A. Kazantsev</name>
35
  Visit http://mventory.com for more info.</description>
36
  <license>CC BY-NC-ND 4.0</license>
37
  <license_uri>http://creativecommons.org/licenses/by-nc-nd/4.0/</license_uri>
38
+ <version>1.6.0</version>
39
  <stability>stable</stability>
40
+ <notes>* Bug fixes and refactoring
41
+ * Image Review moved into separate extension
42
+ * Compatibility with SUPEE-6788
43
+ * Allow category matching based on yes/no attributes
44
+
45
+ Note: Category matching has changed. All rules that match will be applied to mak
46
+ assignment of a product to multiple categories easier.</notes>
47
  <authors>
48
  <name>
49
  <name>Anatoly A. Kazantsev</name>