LinnLiveConnect - Version 1.1.44

Version Notes

mapping bug fixes

Download this release

Release Info

Developer Albert Andrejev
Extension LinnLiveConnect
Version 1.1.44
Comparing to
See all releases


Code changes from version 1.1.43 to 1.1.44

app/code/local/LinnSystems/LinnLiveConnect/Model/Api/V2.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  class Settings {
3
- const VERSION = 43;
4
  }
5
 
6
  class LinnSystems_LinnLiveConnect_Model_Api_V2{
@@ -704,7 +704,45 @@ class LinnLiveMain extends Mage_Core_Model_Abstract{
704
  return $productData;
705
  }
706
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
707
 
 
 
 
708
 
709
  /*
710
  *
@@ -760,15 +798,6 @@ class LinnLiveMain extends Mage_Core_Model_Abstract{
760
  catch (Mage_Core_Model_Store_Exception $e) {
761
  throw new Mage_Api_Exception('store_not_exists', null);
762
  }
763
- /*
764
- if ($identifierType == 'id')
765
- {
766
- $productId = intval($productId);
767
-
768
- if ($productId < 1) {
769
- throw new Mage_Api_Exception('product_not_exists', null);
770
- }
771
- }*/
772
 
773
  $_loadedProduct = Mage::helper('catalog/product')->getProduct($productId, $storeId, $identifierType);
774
 
@@ -787,7 +816,6 @@ class LinnLiveMain extends Mage_Core_Model_Abstract{
787
  }
788
 
789
  $productData->category_ids = array_merge($_categoryIds, $productData->category_ids);
790
-
791
  }
792
  else
793
  {
@@ -943,6 +971,9 @@ class LinnLiveMain extends Mage_Core_Model_Abstract{
943
  return true;
944
  }
945
 
 
 
 
946
  /*
947
  * Implementation of catalogProductList because of bug in associativeArray.
948
  * Extended to filter by category id too.
@@ -951,101 +982,72 @@ class LinnLiveMain extends Mage_Core_Model_Abstract{
951
  * 'type_id' instead of product type.
952
  */
953
  public function productList($page, $perPage, $filters = null, $store = null)
954
- {
955
- $arrayParams = array(
956
- 'nin',
957
- 'in',
958
- );
959
-
960
- $store = $this->_currentStoreCode($store);
961
-
962
  try {
963
- $storeId = Mage::app()->getStore($store)->getId();
964
  }
965
  catch (Mage_Core_Model_Store_Exception $e) {
966
  throw new Mage_Api_Exception('store_not_exists', null);
967
  }
968
-
969
- $preparedFilters = array();
970
- if (isset($filters->filter)) {
971
- foreach ($filters->filter as $_key => $_value) {
972
- $preparedFilters[$_key] = $_value;
973
- }
974
  }
975
- if (isset($filters->complex_filter)) {
976
- foreach ($filters->complex_filter as $_key => $_filter) {
977
- $_op = $_filter->key;
978
- $_filterVal = $_filter->value->value;
979
- $_filterKey = $_filter->value->key;
980
-
981
- if (in_array($_op, $arrayParams)) {
982
- $values = explode(',', $_filterVal);
983
- }
984
- else {
985
- $values = $_filterVal;
986
- }
987
-
988
- $preparedFilters[$_op] = array(
989
- $_filterKey => $values
990
- );
991
  }
992
- }
993
-
994
- if (isset($preparedFilters['category']) &&
995
- is_string($preparedFilters['category']))
996
- {
997
- $_categoryId = intval($preparedFilters['category']);
998
  unset($preparedFilters['category']);
999
  }
1000
- else {
1001
- $_categoryId = 0;
1002
- }
1003
-
1004
- if (!empty($preparedFilters)) {
1005
- if ($_categoryId > 0)
1006
- {
1007
- $_category = Mage::getModel('catalog/category')->load($_categoryId);
1008
- $collection = Mage::getModel('catalog/product')->getCollection()
1009
- ->addStoreFilter($storeId)
1010
- ->addCategoryFilter($_category);
1011
- }
1012
- else
1013
- {
1014
- $collection = Mage::getModel('catalog/product')->getCollection()
1015
- ->addStoreFilter($storeId);
1016
- }
1017
-
1018
- try {
1019
- foreach ($preparedFilters as $field => $value) {
1020
- $collection->addFieldToFilter($field, $value);
1021
- }
1022
- }
1023
- catch (Mage_Core_Exception $e) {
1024
- throw new Mage_Api_Exception('filters_invalid', $e->getMessage());
1025
  }
1026
  }
 
 
 
 
1027
 
1028
  if ($page == 1)
1029
  {
 
1030
  $count = $collection->count();
1031
  }
1032
  else
1033
  {
1034
- $collection->setPageSize($perPage)
1035
- ->setCurPage($page);
1036
  $count = 0;
1037
- }
1038
-
1039
- $result = array();
1040
- $result['count'] = $count;
1041
- $result['products'] = array();
1042
-
 
 
1043
  $_assignedIds = array();
1044
  $_fetchedIds = array();
1045
-
1046
  $i = 0;
1047
- foreach ($collection as $_product) {
1048
- if ($i >= ($perPage * $page)) break;
 
1049
  $_loadedProduct = Mage::helper('catalog/product')->getProduct($_product->getId(), $storeId, 'id');
1050
 
1051
  $_allAttributes = $_loadedProduct->getData();
@@ -1074,6 +1076,7 @@ class LinnLiveMain extends Mage_Core_Model_Abstract{
1074
  'images' => $_productImages,
1075
  'attributes' => $_productAttributes,
1076
  );
 
1077
  if($_loadedProduct->getTypeId() == "configurable")
1078
  {
1079
  $_typeInstance = $_loadedProduct->getTypeInstance();
1
  <?php
2
  class Settings {
3
+ const VERSION = 44;
4
  }
5
 
6
  class LinnSystems_LinnLiveConnect_Model_Api_V2{
704
  return $productData;
705
  }
706
 
707
+ /*
708
+ * Helper for productList
709
+ */
710
+ private function _convertFiltersToArray($filters){
711
+ $arrayParams = array(
712
+ 'nin',
713
+ 'in',
714
+ );
715
+
716
+ $preparedFilters = array();
717
+
718
+ if (isset($filters->filter)) {
719
+ $preparedFilters = $filters->filter;
720
+ }
721
+
722
+ if (isset($filters->complex_filter)) {
723
+
724
+ foreach ($filters->complex_filter as $idx=>$data) {
725
+ if(is_object($data->value)){
726
+ //1.8
727
+ $field = $data->key;
728
+ $opts = $data->value;
729
+
730
+ }else{
731
+ //1.7
732
+ $field = $idx;
733
+ $opts = $data;
734
+ }
735
+
736
+ $value = (in_array($opts->key, $arrayParams)) ? explode(',', $opts->value) : $opts->value;
737
+ $preparedFilters[$field][$opts->key] = $value;
738
+ }
739
+ }
740
+ return $preparedFilters;
741
+ }
742
 
743
+ private function _log($message){
744
+ Mage::log(print_r($message, true));
745
+ }
746
 
747
  /*
748
  *
798
  catch (Mage_Core_Model_Store_Exception $e) {
799
  throw new Mage_Api_Exception('store_not_exists', null);
800
  }
 
 
 
 
 
 
 
 
 
801
 
802
  $_loadedProduct = Mage::helper('catalog/product')->getProduct($productId, $storeId, $identifierType);
803
 
816
  }
817
 
818
  $productData->category_ids = array_merge($_categoryIds, $productData->category_ids);
 
819
  }
820
  else
821
  {
971
  return true;
972
  }
973
 
974
+
975
+
976
+
977
  /*
978
  * Implementation of catalogProductList because of bug in associativeArray.
979
  * Extended to filter by category id too.
982
  * 'type_id' instead of product type.
983
  */
984
  public function productList($page, $perPage, $filters = null, $store = null)
985
+ {
986
+ //get store
 
 
 
 
 
 
987
  try {
988
+ $storeId = Mage::app()->getStore( $this->_currentStoreCode($store) )->getId();
989
  }
990
  catch (Mage_Core_Model_Store_Exception $e) {
991
  throw new Mage_Api_Exception('store_not_exists', null);
992
  }
993
+
994
+ //prepare and convert filters to array
995
+ $preparedFilters = $this->_convertFiltersToArray($filters);
996
+ if (empty($preparedFilters)) {
997
+ throw new Mage_Api_Exception('filters_invalid', 'Filters not found');
 
998
  }
999
+
1000
+ //load collection
1001
+ $collection = Mage::getModel('catalog/product')->getCollection()->addStoreFilter($storeId);
1002
+
1003
+ //filter collection by category if exists
1004
+ if (isset($preparedFilters['category']) && is_string($preparedFilters['category']))
1005
+ {
1006
+ $_category = Mage::getModel('catalog/category')->load(
1007
+ intval($preparedFilters['category'])
1008
+ );
1009
+
1010
+ if($_category->getId()){
1011
+ $collection = $collection->addCategoryFilter($_category);
 
 
 
1012
  }
1013
+
 
 
 
 
 
1014
  unset($preparedFilters['category']);
1015
  }
1016
+
1017
+ //add prepared filters to collection
1018
+ try {
1019
+ foreach ($preparedFilters as $field => $value) {
1020
+ $collection->addFieldToFilter($field, $value);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1021
  }
1022
  }
1023
+ catch (Mage_Core_Exception $e) {
1024
+ throw new Mage_Api_Exception('filters_invalid', $e->getMessage());
1025
+ }
1026
+
1027
 
1028
  if ($page == 1)
1029
  {
1030
+ //TODO: limit page size
1031
  $count = $collection->count();
1032
  }
1033
  else
1034
  {
 
 
1035
  $count = 0;
1036
+ $collection->setPageSize($perPage)->setCurPage($page);
1037
+ }
1038
+
1039
+ $result = array(
1040
+ 'count'=>$count,
1041
+ 'products'=>array()
1042
+ );
1043
+
1044
  $_assignedIds = array();
1045
  $_fetchedIds = array();
1046
+
1047
  $i = 0;
1048
+ foreach ($collection as $_product) {
1049
+
1050
+ if ($i >= ($perPage * $page)) break;//TODO remove
1051
  $_loadedProduct = Mage::helper('catalog/product')->getProduct($_product->getId(), $storeId, 'id');
1052
 
1053
  $_allAttributes = $_loadedProduct->getData();
1076
  'images' => $_productImages,
1077
  'attributes' => $_productAttributes,
1078
  );
1079
+
1080
  if($_loadedProduct->getTypeId() == "configurable")
1081
  {
1082
  $_typeInstance = $_loadedProduct->getTypeInstance();
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>LinnLiveConnect</name>
4
- <version>1.1.43</version>
5
  <stability>stable</stability>
6
  <license>GPL v2</license>
7
  <channel>community</channel>
@@ -9,11 +9,11 @@
9
  <summary>Extended SOAP WS-I compliant API to support integration with LinnLive2.</summary>
10
  <description>Extended SOAP WS-I compliant API to support integration with LinnLive2 (http://www.linnlive.com).&#xD;
11
  Contains some workarounds to avoid bugs in original Magento modules and additional functionality to operate Magento store remotely.</description>
12
- <notes>minor bug fixes</notes>
13
  <authors><author><name>Albert Andrejev</name><user>albert_andrejev</user><email>albert@linnsystems.com</email></author><author><name>Pavel Nikolajev</name><user>Pavel_LL2</user><email>pavel.nokolajev@linnsystems.com</email></author><author><name>Aleksandr Kornev</name><user>alex_LL2</user><email>alex.kornevs@linnsystems.com</email></author></authors>
14
- <date>2014-05-02</date>
15
- <time>06:20:48</time>
16
- <contents><target name="magelocal"><dir name="LinnSystems"><dir name="LinnLiveConnect"><dir name="Helper"><file name="Data.php" hash="5fe5216de67d4e69a0f418b0cd7780ee"/></dir><dir name="Model"><dir name="Api"><file name="V2.php" hash="bd8166a2de00ebe1a01a09279e396bbd"/></dir></dir><dir name="etc"><file name="api.xml" hash="ae6bb50af6b605606819021ce4acd33d"/><file name="config.xml" hash="9367dc40a0ce3d4078039f495ccd6527"/><file name="wsdl.xml" hash="fc21f2963c1253f5f40e5e8414312174"/><file name="wsi.xml" hash="ef000d5115f5988664f58df8b9139e5e"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="LinnSystems_LinnLiveConnect.xml" hash="19c48712cd0516815d6784592ada0881"/></dir></target></contents>
17
  <compatible/>
18
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
19
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>LinnLiveConnect</name>
4
+ <version>1.1.44</version>
5
  <stability>stable</stability>
6
  <license>GPL v2</license>
7
  <channel>community</channel>
9
  <summary>Extended SOAP WS-I compliant API to support integration with LinnLive2.</summary>
10
  <description>Extended SOAP WS-I compliant API to support integration with LinnLive2 (http://www.linnlive.com).&#xD;
11
  Contains some workarounds to avoid bugs in original Magento modules and additional functionality to operate Magento store remotely.</description>
12
+ <notes>mapping bug fixes</notes>
13
  <authors><author><name>Albert Andrejev</name><user>albert_andrejev</user><email>albert@linnsystems.com</email></author><author><name>Pavel Nikolajev</name><user>Pavel_LL2</user><email>pavel.nokolajev@linnsystems.com</email></author><author><name>Aleksandr Kornev</name><user>alex_LL2</user><email>alex.kornevs@linnsystems.com</email></author></authors>
14
+ <date>2014-05-05</date>
15
+ <time>13:13:19</time>
16
+ <contents><target name="magelocal"><dir name="LinnSystems"><dir name="LinnLiveConnect"><dir name="Helper"><file name="Data.php" hash="5fe5216de67d4e69a0f418b0cd7780ee"/></dir><dir name="Model"><dir name="Api"><file name="V2.php" hash="8fcbd90078d8c11f99a632f516f24a3e"/></dir></dir><dir name="etc"><file name="api.xml" hash="ae6bb50af6b605606819021ce4acd33d"/><file name="config.xml" hash="9367dc40a0ce3d4078039f495ccd6527"/><file name="wsdl.xml" hash="fc21f2963c1253f5f40e5e8414312174"/><file name="wsi.xml" hash="ef000d5115f5988664f58df8b9139e5e"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="LinnSystems_LinnLiveConnect.xml" hash="19c48712cd0516815d6784592ada0881"/></dir></target></contents>
17
  <compatible/>
18
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
19
  </package>