codistoconnect - Version 1.90.16

Version Notes

Download this release

Release Info

Developer Codisto
Extension codistoconnect
Version 1.90.16
Comparing to
See all releases


Code changes from version 1.90.15 to 1.90.16

app/code/community/Codisto/Sync/Helper/Data.php CHANGED
@@ -114,7 +114,18 @@ class Codisto_Sync_Helper_Data extends Mage_Core_Helper_Abstract
114
  if(file_exists($nonceDbPath))
115
  unlink($nonceDbPath);
116
  }
117
- $this->logExceptionCodisto($e, 'https://ui.codisto.com/installed');
 
 
 
 
 
 
 
 
 
 
 
118
  }
119
 
120
  return $this->checkHash($key, $nonce, $hash);
114
  if(file_exists($nonceDbPath))
115
  unlink($nonceDbPath);
116
  }
117
+ else if(property_exists($e, 'errorInfo') &&
118
+ $e->errorInfo[0] == 'HY000' &&
119
+ $e->errorInfo[1] == 11 &&
120
+ $e->errorInfo[2] == 'database disk image is malformed')
121
+ {
122
+ if(file_exists($nonceDbPath))
123
+ unlink($nonceDbPath);
124
+ }
125
+ else
126
+ {
127
+ $this->logExceptionCodisto($e, 'https://ui.codisto.com/installed');
128
+ }
129
  }
130
 
131
  return $this->checkHash($key, $nonce, $hash);
app/code/community/Codisto/Sync/Model/Sync.php CHANGED
@@ -260,7 +260,7 @@ class Codisto_Sync_Model_Sync
260
  ->columns(array('codisto_in_store'=> new Zend_Db_Expr('CASE WHEN `e`.entity_id IN (SELECT product_id FROM `'.$catalogWebsiteName.'` WHERE website_id IN (SELECT website_id FROM `'.$storeName.'` WHERE store_id = '.$storeId.' OR EXISTS(SELECT 1 FROM `'.$storeName.'` WHERE store_id = '.$storeId.' AND website_id = 0))) THEN -1 ELSE 0 END')))
261
  ->where($sqlCheckModified);
262
 
263
- // Simple Products not participating as configurable skus
264
  $simpleProducts = $this->getProductCollection()
265
  ->addAttributeToSelect($this->availableProductFields, 'left')
266
  ->addAttributeToFilter('type_id', array('eq' => 'simple'))
@@ -269,6 +269,15 @@ class Codisto_Sync_Model_Sync
269
  $simpleProducts->getSelect()
270
  ->columns(array('codisto_in_store'=> new Zend_Db_Expr('CASE WHEN `e`.entity_id IN (SELECT product_id FROM `'.$catalogWebsiteName.'` WHERE website_id IN (SELECT website_id FROM `'.$storeName.'` WHERE store_id = '.$storeId.' OR EXISTS(SELECT 1 FROM `'.$storeName.'` WHERE store_id = '.$storeId.' AND website_id = 0))) THEN -1 ELSE 0 END')));
271
 
 
 
 
 
 
 
 
 
 
272
  // Grouped products
273
  $groupedProducts = $this->getProductCollection()
274
  ->addAttributeToSelect($this->availableProductFields, 'left')
@@ -369,6 +378,26 @@ class Codisto_Sync_Model_Sync
369
  'store' => $store )
370
  );
371
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372
  Mage::getSingleton('core/resource_iterator')->walk($groupedProducts->getSelect(), array(array($this, 'SyncGroupedProductData')),
373
  array(
374
  'type' => 'grouped',
@@ -823,7 +852,36 @@ class Codisto_Sync_Model_Sync
823
  $insertProductQuestionSQL = $args['preparedproductquestionStatement'];
824
  $insertProductAnswerSQL = $args['preparedproductanswerStatement'];
825
 
826
- $price = $this->SyncProductPrice($store, $product);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
827
 
828
  $listPrice = $this->getExTaxPrice($product, $product->getPrice(), $store);
829
  if(!is_numeric($listPrice))
@@ -844,7 +902,7 @@ class Codisto_Sync_Model_Sync
844
  }
845
 
846
  $description = Mage::helper('codistosync')->processCmsContent($description);
847
- if($type == 'simple' &&
848
  $description == '')
849
  {
850
  if(!isset($parentids))
@@ -878,7 +936,7 @@ class Codisto_Sync_Model_Sync
878
  $data = array();
879
 
880
  $data[] = $product_id;
881
- $data[] = $type == 'configurable' ? 'c' : ($type == 'grouped' ? 'g' : 's');
882
  $data[] = $productData['sku'];
883
  $data[] = html_entity_decode($productName);
884
  $data[] = $price;
@@ -1040,7 +1098,6 @@ class Codisto_Sync_Model_Sync
1040
  $attrTypeSelect = $adapter->select()
1041
  ->from(array('default_value' => $table), array('attribute_id'))
1042
  ->where('default_value.attribute_id IN (?)', array_keys($_attributes))
1043
- ->where('default_value.entity_type_id = :entity_type_id')
1044
  ->where('default_value.entity_id = :entity_id')
1045
  ->where('default_value.store_id = 0');
1046
 
@@ -1057,7 +1114,6 @@ class Codisto_Sync_Model_Sync
1057
  array('store_value' => $table),
1058
  'store_value.attribute_id = default_value.attribute_id '.
1059
  'AND store_value.attribute_id IN (SELECT attribute_id FROM `'.$coreResource->getTableName('catalog/eav_attribute').'` WHERE is_global != 0) '.
1060
- 'AND store_value.entity_type_id = default_value.entity_type_id '.
1061
  'AND store_value.entity_id = default_value.entity_id '.
1062
  'AND store_value.store_id = :store_id ',
1063
  array('attr_value' => new Zend_Db_Expr('CAST(COALESCE(store_value.value, default_value.value) AS CHAR)'))
@@ -1075,7 +1131,6 @@ class Codisto_Sync_Model_Sync
1075
  $attrSelect = $adapter->select()->union($attrTypeSelects, Zend_Db_Select::SQL_UNION_ALL);
1076
 
1077
  $attrArgs = array(
1078
- 'entity_type_id' => 4,
1079
  'entity_id' => $product_id,
1080
  'store_id' => $store->getId()
1081
  );
@@ -1470,7 +1525,7 @@ class Codisto_Sync_Model_Sync
1470
  }
1471
  }
1472
 
1473
- if($type == 'simple')
1474
  {
1475
  $this->productsProcessed[] = $product_id;
1476
 
@@ -1485,7 +1540,7 @@ class Codisto_Sync_Model_Sync
1485
 
1486
  $orderData = $args['row'];
1487
 
1488
- $insertOrdersSQL->execute(array($orderData['codisto_orderid'], ($orderData['status'])?$orderData['status']:'processing', $orderData['pay_date'], $orderData['ship_date'], $orderData['carrier'], $orderData['track_number'], $orderData['externalreference']));
1489
 
1490
  $this->ordersProcessed[] = $orderData['entity_id'];
1491
  $this->currentEntityId = $orderData['entity_id'];
@@ -1622,7 +1677,7 @@ class Codisto_Sync_Model_Sync
1622
  $insertProductQuestion = $db->prepare('INSERT OR REPLACE INTO ProductQuestion(ExternalReference, ProductExternalReference, Name, Type, Sequence) VALUES (?, ?, ?, ?, ?)');
1623
  $insertProductAnswer = $db->prepare('INSERT INTO ProductQuestionAnswer(ProductQuestionExternalReference, Value, PriceModifier, SKUModifier, Sequence) VALUES (?, ?, ?, ?, ?)');
1624
 
1625
- // Simple Products not participating as configurable skus
1626
  $simpleProducts = $this->getProductCollection()
1627
  ->addAttributeToSelect($this->availableProductFields, 'left')
1628
  ->addAttributeToFilter('type_id', array('eq' => 'simple'))
@@ -1649,6 +1704,34 @@ class Codisto_Sync_Model_Sync
1649
  'preparedproductanswerStatement' => $insertProductAnswer,
1650
  'store' => $storeObject ));
1651
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1652
  // Configurable products
1653
  $configurableProducts = $this->getProductCollection()
1654
  ->addAttributeToSelect($this->availableProductFields, 'left')
@@ -1727,7 +1810,32 @@ class Codisto_Sync_Model_Sync
1727
 
1728
  if(!empty($orderUpdateIds))
1729
  {
1730
- $insertOrders = $db->prepare('INSERT OR REPLACE INTO [Order] (ID, Status, PaymentDate, ShipmentDate, Carrier, TrackingNumber, ExternalReference) VALUES (?, ?, ?, ?, ?, ?, ?)');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1731
 
1732
  $orderStoreId = $storeId;
1733
  if($storeId == 0)
@@ -1748,7 +1856,7 @@ class Codisto_Sync_Model_Sync
1748
  $ts -= 7776000; // 90 days
1749
 
1750
  $orders = Mage::getModel('sales/order')->getCollection()
1751
- ->addFieldToSelect(array('codisto_orderid', 'status' ))
1752
  ->addFieldToSelect('entity_id','externalreference')
1753
  ->addAttributeToFilter('entity_id', array('in' => $orderUpdateIds ))
1754
  ->addAttributeToFilter('main_table.store_id', array('eq' => $orderStoreId ))
@@ -1757,7 +1865,7 @@ class Codisto_Sync_Model_Sync
1757
  $orders->getSelect()->joinLeft( array('i' => $invoiceName), 'i.order_id = main_table.entity_id AND i.state = 2', array('pay_date' => 'MIN(i.created_at)'));
1758
  $orders->getSelect()->joinLeft( array('s' => $shipmentName), 's.order_id = main_table.entity_id', array('ship_date' => 'MIN(s.created_at)'));
1759
  $orders->getSelect()->joinLeft( array('t' => $shipmentTrackName), 't.order_id = main_table.entity_id', array('carrier' => 'GROUP_CONCAT(COALESCE(t.title, \'\') SEPARATOR \',\')', 'track_number' => 'GROUP_CONCAT(COALESCE(t.track_number, \'\') SEPARATOR \',\')'));
1760
- $orders->getSelect()->group(array('main_table.entity_id', 'main_table.codisto_orderid', 'main_table.status'));
1761
  $orders->setOrder('entity_id', 'ASC');
1762
 
1763
  Mage::getSingleton('core/resource_iterator')->walk($orders->getSelect(), array(array($this, 'SyncOrderData')),
@@ -1970,7 +2078,7 @@ class Codisto_Sync_Model_Sync
1970
  $insertProductAttributeDefault = $db->prepare('INSERT OR IGNORE INTO ProductAttributeDefaultValue(ProductExternalReference, AttributeID, Value) VALUES (?, ?, ?)');
1971
  $insertProductQuestion = $db->prepare('INSERT OR REPLACE INTO ProductQuestion(ExternalReference, ProductExternalReference, Name, Type, Sequence) VALUES (?, ?, ?, ?, ?)');
1972
  $insertProductAnswer = $db->prepare('INSERT INTO ProductQuestionAnswer(ProductQuestionExternalReference, Value, PriceModifier, SKUModifier, Sequence) VALUES (?, ?, ?, ?, ?)');
1973
- $insertOrders = $db->prepare('INSERT OR REPLACE INTO [Order] (ID, Status, PaymentDate, ShipmentDate, Carrier, TrackingNumber, ExternalReference) VALUES (?, ?, ?, ?, ?, ?, ?)');
1974
 
1975
  $db->exec('BEGIN EXCLUSIVE TRANSACTION');
1976
 
@@ -2057,7 +2165,7 @@ class Codisto_Sync_Model_Sync
2057
 
2058
  if($state == 'simple')
2059
  {
2060
- // Simple Products not participating as configurable skus
2061
 
2062
  $simpleProducts = $this->getProductCollection()->addAttributeToSelect($this->availableProductFields, 'left')
2063
  ->addAttributeToFilter('type_id', array('eq' => 'simple'))
@@ -2093,6 +2201,50 @@ class Codisto_Sync_Model_Sync
2093
  $db->exec('INSERT OR REPLACE INTO Progress (Sentinel, State, entity_id) VALUES (1, \'simple\', '.$this->currentEntityId.')');
2094
  }
2095
  else
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2096
  {
2097
  $state = 'configurable';
2098
  $this->currentEntityId = 0;
@@ -2211,6 +2363,18 @@ class Codisto_Sync_Model_Sync
2211
  catch(Exception $e)
2212
  {
2213
  }
 
 
 
 
 
 
 
 
 
 
 
 
2214
  }
2215
 
2216
  $orderStoreId = $storeId;
@@ -2232,7 +2396,7 @@ class Codisto_Sync_Model_Sync
2232
  $ts -= 7776000; // 90 days
2233
 
2234
  $orders = Mage::getModel('sales/order')->getCollection()
2235
- ->addFieldToSelect(array('codisto_orderid', 'status'))
2236
  ->addFieldToSelect('entity_id','externalreference')
2237
  ->addAttributeToFilter('entity_id', array('gt' => (int)$this->currentEntityId ))
2238
  ->addAttributeToFilter('main_table.store_id', array('eq' => $orderStoreId ))
@@ -2241,7 +2405,7 @@ class Codisto_Sync_Model_Sync
2241
  $orders->getSelect()->joinLeft( array('i' => $invoiceName), 'i.order_id = main_table.entity_id AND i.state = 2', array('pay_date' => 'MIN(i.created_at)'));
2242
  $orders->getSelect()->joinLeft( array('s' => $shipmentName), 's.order_id = main_table.entity_id', array('ship_date' => 'MIN(s.created_at)'));
2243
  $orders->getSelect()->joinLeft( array('t' => $shipmentTrackName), 't.order_id = main_table.entity_id', array('carrier' => 'GROUP_CONCAT(COALESCE(t.title, \'\') SEPARATOR \',\')', 'track_number' => 'GROUP_CONCAT(COALESCE(t.track_number, \'\') SEPARATOR \',\')'));
2244
- $orders->getSelect()->group(array('main_table.entity_id', 'main_table.codisto_orderid', 'main_table.status'));
2245
  $orders->getSelect()->limit(1000);
2246
  $orders->setOrder('entity_id', 'ASC');
2247
 
@@ -2295,7 +2459,7 @@ class Codisto_Sync_Model_Sync
2295
  $db->exec('INSERT OR REPLACE INTO Progress (Sentinel, State, entity_id) VALUES (1, \'complete\', 0)');
2296
  }
2297
 
2298
- if((empty($this->productsProcessed) && empty($this->ordersProcessed)) || $first)
2299
  {
2300
  $uniqueId = uniqid();
2301
 
@@ -2310,6 +2474,12 @@ class Codisto_Sync_Model_Sync
2310
 
2311
  return 'complete';
2312
  }
 
 
 
 
 
 
2313
  else
2314
  {
2315
  $db->exec('COMMIT TRANSACTION');
@@ -2330,7 +2500,7 @@ class Codisto_Sync_Model_Sync
2330
 
2331
  $simpleProducts = $this->getProductCollection()
2332
  ->addAttributeToSelect(array('entity_id'), 'left')
2333
- ->addAttributeToFilter('type_id', array('eq' => 'simple'));
2334
 
2335
  $simplecount = $simpleProducts->getSize();
2336
 
@@ -2557,7 +2727,7 @@ class Codisto_Sync_Model_Sync
2557
 
2558
  $db = $this->GetSyncDb($syncDb, 5 );
2559
 
2560
- $insertOrders = $db->prepare('INSERT OR REPLACE INTO [Order] (ID, Status, PaymentDate, ShipmentDate, Carrier, TrackingNumber, ExternalReference) VALUES (?, ?, ?, ?, ?, ?, ?)');
2561
 
2562
  $coreResource = Mage::getSingleton('core/resource');
2563
 
@@ -2568,14 +2738,14 @@ class Codisto_Sync_Model_Sync
2568
  $db->exec('BEGIN EXCLUSIVE TRANSACTION');
2569
 
2570
  $orders = Mage::getModel('sales/order')->getCollection()
2571
- ->addFieldToSelect(array('codisto_orderid', 'status'))
2572
  ->addFieldToSelect('entity_id','externalreference')
2573
  ->addAttributeToFilter('codisto_orderid', array('in' => $orders ));
2574
 
2575
  $orders->getSelect()->joinLeft( array('i' => $invoiceName), 'i.order_id = main_table.entity_id AND i.state = 2', array('pay_date' => 'MIN(i.created_at)'));
2576
  $orders->getSelect()->joinLeft( array('s' => $shipmentName), 's.order_id = main_table.entity_id', array('ship_date' => 'MIN(s.created_at)'));
2577
  $orders->getSelect()->joinLeft( array('t' => $shipmentTrackName), 't.order_id = main_table.entity_id', array('carrier' => 'GROUP_CONCAT(COALESCE(t.title, \'\') SEPARATOR \',\')', 'track_number' => 'GROUP_CONCAT(COALESCE(t.track_number, \'\') SEPARATOR \',\')'));
2578
- $orders->getSelect()->group(array('main_table.entity_id', 'main_table.codisto_orderid', 'main_table.status'));
2579
 
2580
  $orders->setOrder('entity_id', 'ASC');
2581
 
@@ -2639,7 +2809,7 @@ class Codisto_Sync_Model_Sync
2639
  $db->exec('CREATE TABLE IF NOT EXISTS Store(ID integer NOT NULL PRIMARY KEY, Code text NOT NULL, Name text NOT NULL, Currency text NOT NULL)');
2640
  $db->exec('CREATE TABLE IF NOT EXISTS StoreMerchant(StoreID integer NOT NULL, MerchantID integer NOT NULL, PRIMARY KEY (StoreID, MerchantID))');
2641
 
2642
- $db->exec('CREATE TABLE IF NOT EXISTS [Order](ID integer NOT NULL PRIMARY KEY, Status text NOT NULL, PaymentDate datetime NULL, ShipmentDate datetime NULL, Carrier text NOT NULL, TrackingNumber text NOT NULL, ExternalReference text NOT NULL DEFAULT \'\')');
2643
 
2644
  $db->exec('CREATE TABLE IF NOT EXISTS StaticBlock(BlockID integer NOT NULL PRIMARY KEY, Title text NOT NULL, Identifier text NOT NULL, Content text NOT NULL)');
2645
 
@@ -2666,6 +2836,15 @@ class Codisto_Sync_Model_Sync
2666
  $db->exec('ALTER TABLE [Order] ADD COLUMN ExternalReference text NOT NULL DEFAULT \'\'');
2667
  }
2668
 
 
 
 
 
 
 
 
 
 
2669
  try
2670
  {
2671
  $db->exec('SELECT 1 FROM ProductAttributeValue WHERE ProductExternalReference IS NULL LIMIT 1');
260
  ->columns(array('codisto_in_store'=> new Zend_Db_Expr('CASE WHEN `e`.entity_id IN (SELECT product_id FROM `'.$catalogWebsiteName.'` WHERE website_id IN (SELECT website_id FROM `'.$storeName.'` WHERE store_id = '.$storeId.' OR EXISTS(SELECT 1 FROM `'.$storeName.'` WHERE store_id = '.$storeId.' AND website_id = 0))) THEN -1 ELSE 0 END')))
261
  ->where($sqlCheckModified);
262
 
263
+ // Simple Products
264
  $simpleProducts = $this->getProductCollection()
265
  ->addAttributeToSelect($this->availableProductFields, 'left')
266
  ->addAttributeToFilter('type_id', array('eq' => 'simple'))
269
  $simpleProducts->getSelect()
270
  ->columns(array('codisto_in_store'=> new Zend_Db_Expr('CASE WHEN `e`.entity_id IN (SELECT product_id FROM `'.$catalogWebsiteName.'` WHERE website_id IN (SELECT website_id FROM `'.$storeName.'` WHERE store_id = '.$storeId.' OR EXISTS(SELECT 1 FROM `'.$storeName.'` WHERE store_id = '.$storeId.' AND website_id = 0))) THEN -1 ELSE 0 END')));
271
 
272
+ // Virtual Products
273
+ $virtualProducts = $this->getProductCollection()
274
+ ->addAttributeToSelect($this->availableProductFields, 'left')
275
+ ->addAttributeToFilter('type_id', array('eq' => 'virtual'))
276
+ ->addAttributeToFilter('entity_id', array('in' => $ids));
277
+
278
+ $virtualProducts->getSelect()
279
+ ->columns(array('codisto_in_store'=> new Zend_Db_Expr('CASE WHEN `e`.entity_id IN (SELECT product_id FROM `'.$catalogWebsiteName.'` WHERE website_id IN (SELECT website_id FROM `'.$storeName.'` WHERE store_id = '.$storeId.' OR EXISTS(SELECT 1 FROM `'.$storeName.'` WHERE store_id = '.$storeId.' AND website_id = 0))) THEN -1 ELSE 0 END')));
280
+
281
  // Grouped products
282
  $groupedProducts = $this->getProductCollection()
283
  ->addAttributeToSelect($this->availableProductFields, 'left')
378
  'store' => $store )
379
  );
380
 
381
+ Mage::getSingleton('core/resource_iterator')->walk($virtualProducts->getSelect(), array(array($this, 'SyncSimpleProductData')),
382
+ array(
383
+ 'type' => 'virtual',
384
+ 'db' => $db,
385
+ 'preparedStatement' => $insertProduct,
386
+ 'preparedcheckproductStatement' => $checkProduct,
387
+ 'preparedcategoryproductStatement' => $insertCategoryProduct,
388
+ 'preparedimageStatement' => $insertImage,
389
+ 'preparedproducthtmlStatement' => $insertProductHTML,
390
+ 'preparedproductrelatedStatement' => $insertProductRelated,
391
+ 'preparedattributeStatement' => $insertAttribute,
392
+ 'preparedattributegroupStatement' => $insertAttributeGroup,
393
+ 'preparedattributegroupmapStatement' => $insertAttributeGroupMap,
394
+ 'preparedproductattributeStatement' => $insertProductAttribute,
395
+ 'preparedproductattributedefaultStatement' => $insertProductAttributeDefault,
396
+ 'preparedproductquestionStatement' => $insertProductQuestion,
397
+ 'preparedproductanswerStatement' => $insertProductAnswer,
398
+ 'store' => $store )
399
+ );
400
+
401
  Mage::getSingleton('core/resource_iterator')->walk($groupedProducts->getSelect(), array(array($this, 'SyncGroupedProductData')),
402
  array(
403
  'type' => 'grouped',
852
  $insertProductQuestionSQL = $args['preparedproductquestionStatement'];
853
  $insertProductAnswerSQL = $args['preparedproductanswerStatement'];
854
 
855
+
856
+ $badoptiondata = false;
857
+
858
+ if($type == 'configurable') {
859
+
860
+ $attributes = null;
861
+ try {
862
+ $configurableData = Mage::getModel('catalog/product_type_configurable');
863
+ $attributes = $configurableData->getConfigurableAttributes($product);
864
+ } catch(Exception $e) {
865
+ $badoptiondata = true;
866
+ }
867
+
868
+ if($attributes) {
869
+ foreach($attributes as $attribute)
870
+ {
871
+ $prodAttr = $attribute->getProductAttribute();
872
+ if(!is_object($prodAttr) || !$prodAttr->getAttributeCode())
873
+ {
874
+ $badoptiondata = true;
875
+ }
876
+ }
877
+ }
878
+
879
+ }
880
+
881
+ if(!$badoptiondata)
882
+ $price = $this->SyncProductPrice($store, $product);
883
+ else
884
+ $price = 0;
885
 
886
  $listPrice = $this->getExTaxPrice($product, $product->getPrice(), $store);
887
  if(!is_numeric($listPrice))
902
  }
903
 
904
  $description = Mage::helper('codistosync')->processCmsContent($description);
905
+ if(($type == 'simple' || $type == 'virtual') &&
906
  $description == '')
907
  {
908
  if(!isset($parentids))
936
  $data = array();
937
 
938
  $data[] = $product_id;
939
+ $data[] = $type == 'configurable' ? 'c' : ($type == 'grouped' ? 'g' : ($type == 'virtual' ? 'v' : 's'));
940
  $data[] = $productData['sku'];
941
  $data[] = html_entity_decode($productName);
942
  $data[] = $price;
1098
  $attrTypeSelect = $adapter->select()
1099
  ->from(array('default_value' => $table), array('attribute_id'))
1100
  ->where('default_value.attribute_id IN (?)', array_keys($_attributes))
 
1101
  ->where('default_value.entity_id = :entity_id')
1102
  ->where('default_value.store_id = 0');
1103
 
1114
  array('store_value' => $table),
1115
  'store_value.attribute_id = default_value.attribute_id '.
1116
  'AND store_value.attribute_id IN (SELECT attribute_id FROM `'.$coreResource->getTableName('catalog/eav_attribute').'` WHERE is_global != 0) '.
 
1117
  'AND store_value.entity_id = default_value.entity_id '.
1118
  'AND store_value.store_id = :store_id ',
1119
  array('attr_value' => new Zend_Db_Expr('CAST(COALESCE(store_value.value, default_value.value) AS CHAR)'))
1131
  $attrSelect = $adapter->select()->union($attrTypeSelects, Zend_Db_Select::SQL_UNION_ALL);
1132
 
1133
  $attrArgs = array(
 
1134
  'entity_id' => $product_id,
1135
  'store_id' => $store->getId()
1136
  );
1525
  }
1526
  }
1527
 
1528
+ if($type == 'simple' || $type == 'virtual')
1529
  {
1530
  $this->productsProcessed[] = $product_id;
1531
 
1540
 
1541
  $orderData = $args['row'];
1542
 
1543
+ $insertOrdersSQL->execute(array($orderData['codisto_orderid'], ($orderData['status'])?$orderData['status']:'processing', $orderData['pay_date'], $orderData['ship_date'], $orderData['carrier'], $orderData['track_number'], $orderData['externalreference'], $orderData['codisto_merchantid']));
1544
 
1545
  $this->ordersProcessed[] = $orderData['entity_id'];
1546
  $this->currentEntityId = $orderData['entity_id'];
1677
  $insertProductQuestion = $db->prepare('INSERT OR REPLACE INTO ProductQuestion(ExternalReference, ProductExternalReference, Name, Type, Sequence) VALUES (?, ?, ?, ?, ?)');
1678
  $insertProductAnswer = $db->prepare('INSERT INTO ProductQuestionAnswer(ProductQuestionExternalReference, Value, PriceModifier, SKUModifier, Sequence) VALUES (?, ?, ?, ?, ?)');
1679
 
1680
+ // Simple Products
1681
  $simpleProducts = $this->getProductCollection()
1682
  ->addAttributeToSelect($this->availableProductFields, 'left')
1683
  ->addAttributeToFilter('type_id', array('eq' => 'simple'))
1704
  'preparedproductanswerStatement' => $insertProductAnswer,
1705
  'store' => $storeObject ));
1706
 
1707
+ // Virtual Products
1708
+ $virtualProducts = $this->getProductCollection()
1709
+ ->addAttributeToSelect($this->availableProductFields, 'left')
1710
+ ->addAttributeToFilter('type_id', array('eq' => 'virtual'))
1711
+ ->addAttributeToFilter('entity_id', array('in' => $productUpdateIds) );
1712
+ $virtualProducts->getSelect()
1713
+ ->columns(array('codisto_in_store' => new Zend_Db_Expr('CASE WHEN `e`.entity_id IN (SELECT product_id FROM `'.$catalogWebsiteName.'` WHERE website_id IN (SELECT website_id FROM `'.$storeName.'` WHERE store_id = '.$storeId.' OR EXISTS(SELECT 1 FROM `'.$storeName.'` WHERE store_id = '.$storeId.' AND website_id = 0))) THEN -1 ELSE 0 END')));
1714
+
1715
+ Mage::getSingleton('core/resource_iterator')->walk($virtualProducts->getSelect(), array(array($this, 'SyncSimpleProductData')),
1716
+ array(
1717
+ 'type' => 'virtual',
1718
+ 'db' => $db,
1719
+ 'preparedStatement' => $insertProduct,
1720
+ 'preparedcheckproductStatement' => $checkProduct,
1721
+ 'preparedcategoryproductStatement' => $insertCategoryProduct,
1722
+ 'preparedimageStatement' => $insertImage,
1723
+ 'preparedproducthtmlStatement' => $insertProductHTML,
1724
+ 'preparedproductrelatedStatement' => $insertProductRelated,
1725
+ 'preparedattributeStatement' => $insertAttribute,
1726
+ 'preparedattributegroupStatement' => $insertAttributeGroup,
1727
+ 'preparedattributegroupmapStatement' => $insertAttributeGroupMap,
1728
+ 'preparedproductattributeStatement' => $insertProductAttribute,
1729
+ 'preparedproductattributedefaultStatement' => $insertProductAttributeDefault,
1730
+ 'preparedproductquestionStatement' => $insertProductQuestion,
1731
+ 'preparedproductanswerStatement' => $insertProductAnswer,
1732
+ 'store' => $storeObject ));
1733
+
1734
+
1735
  // Configurable products
1736
  $configurableProducts = $this->getProductCollection()
1737
  ->addAttributeToSelect($this->availableProductFields, 'left')
1810
 
1811
  if(!empty($orderUpdateIds))
1812
  {
1813
+ $connection = $coreResource->getConnection(Mage_Core_Model_Resource::DEFAULT_WRITE_RESOURCE);
1814
+ try
1815
+ {
1816
+ $connection->addColumn(
1817
+ $tablePrefix . 'sales_flat_order',
1818
+ 'codisto_orderid',
1819
+ 'varchar(10)'
1820
+ );
1821
+ }
1822
+ catch(Exception $e)
1823
+ {
1824
+ }
1825
+
1826
+ try
1827
+ {
1828
+ $connection->addColumn(
1829
+ $tablePrefix . 'sales_flat_order',
1830
+ 'codisto_merchantid',
1831
+ 'varchar(10)'
1832
+ );
1833
+ }
1834
+ catch(Exception $e)
1835
+ {
1836
+ }
1837
+
1838
+ $insertOrders = $db->prepare('INSERT OR REPLACE INTO [Order] (ID, Status, PaymentDate, ShipmentDate, Carrier, TrackingNumber, ExternalReference, MerchantID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
1839
 
1840
  $orderStoreId = $storeId;
1841
  if($storeId == 0)
1856
  $ts -= 7776000; // 90 days
1857
 
1858
  $orders = Mage::getModel('sales/order')->getCollection()
1859
+ ->addFieldToSelect(array('codisto_orderid', 'codisto_merchantid', 'status' ))
1860
  ->addFieldToSelect('entity_id','externalreference')
1861
  ->addAttributeToFilter('entity_id', array('in' => $orderUpdateIds ))
1862
  ->addAttributeToFilter('main_table.store_id', array('eq' => $orderStoreId ))
1865
  $orders->getSelect()->joinLeft( array('i' => $invoiceName), 'i.order_id = main_table.entity_id AND i.state = 2', array('pay_date' => 'MIN(i.created_at)'));
1866
  $orders->getSelect()->joinLeft( array('s' => $shipmentName), 's.order_id = main_table.entity_id', array('ship_date' => 'MIN(s.created_at)'));
1867
  $orders->getSelect()->joinLeft( array('t' => $shipmentTrackName), 't.order_id = main_table.entity_id', array('carrier' => 'GROUP_CONCAT(COALESCE(t.title, \'\') SEPARATOR \',\')', 'track_number' => 'GROUP_CONCAT(COALESCE(t.track_number, \'\') SEPARATOR \',\')'));
1868
+ $orders->getSelect()->group(array('main_table.entity_id', 'main_table.codisto_orderid', 'main_table.codisto_merchantid', 'main_table.status'));
1869
  $orders->setOrder('entity_id', 'ASC');
1870
 
1871
  Mage::getSingleton('core/resource_iterator')->walk($orders->getSelect(), array(array($this, 'SyncOrderData')),
2078
  $insertProductAttributeDefault = $db->prepare('INSERT OR IGNORE INTO ProductAttributeDefaultValue(ProductExternalReference, AttributeID, Value) VALUES (?, ?, ?)');
2079
  $insertProductQuestion = $db->prepare('INSERT OR REPLACE INTO ProductQuestion(ExternalReference, ProductExternalReference, Name, Type, Sequence) VALUES (?, ?, ?, ?, ?)');
2080
  $insertProductAnswer = $db->prepare('INSERT INTO ProductQuestionAnswer(ProductQuestionExternalReference, Value, PriceModifier, SKUModifier, Sequence) VALUES (?, ?, ?, ?, ?)');
2081
+ $insertOrders = $db->prepare('INSERT OR REPLACE INTO [Order] (ID, Status, PaymentDate, ShipmentDate, Carrier, TrackingNumber, ExternalReference, MerchantID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
2082
 
2083
  $db->exec('BEGIN EXCLUSIVE TRANSACTION');
2084
 
2165
 
2166
  if($state == 'simple')
2167
  {
2168
+ // Simple Products
2169
 
2170
  $simpleProducts = $this->getProductCollection()->addAttributeToSelect($this->availableProductFields, 'left')
2171
  ->addAttributeToFilter('type_id', array('eq' => 'simple'))
2201
  $db->exec('INSERT OR REPLACE INTO Progress (Sentinel, State, entity_id) VALUES (1, \'simple\', '.$this->currentEntityId.')');
2202
  }
2203
  else
2204
+ {
2205
+ $state = 'virtual';
2206
+ $this->currentEntityId = 0;
2207
+ }
2208
+ }
2209
+
2210
+ if($state == 'virtual')
2211
+ {
2212
+ // Virtual Products
2213
+
2214
+ $virtualProducts = $this->getProductCollection()->addAttributeToSelect($this->availableProductFields, 'left')
2215
+ ->addAttributeToFilter('type_id', array('eq' => 'virtual'))
2216
+ ->addAttributeToFilter('entity_id', array('gt' => (int)$this->currentEntityId));
2217
+
2218
+ $virtualProducts->getSelect()
2219
+ ->columns(array('codisto_in_store' => new Zend_Db_Expr('CASE WHEN `e`.entity_id IN (SELECT product_id FROM `'.$catalogWebsiteName.'` WHERE website_id IN (SELECT website_id FROM `'.$storeName.'` WHERE store_id = '.$storeId.' OR EXISTS(SELECT 1 FROM `'.$storeName.'` WHERE store_id = '.$storeId.' AND website_id = 0))) THEN -1 ELSE 0 END')))
2220
+ ->order('entity_id')
2221
+ ->limit($simpleCount);
2222
+ $virtualProducts->setOrder('entity_id', 'ASC');
2223
+
2224
+ Mage::getSingleton('core/resource_iterator')->walk($virtualProducts->getSelect(), array(array($this, 'SyncSimpleProductData')),
2225
+ array(
2226
+ 'type' => 'virtual',
2227
+ 'db' => $db,
2228
+ 'preparedStatement' => $insertProduct,
2229
+ 'preparedcheckproductStatement' => $checkProduct,
2230
+ 'preparedcategoryproductStatement' => $insertCategoryProduct,
2231
+ 'preparedimageStatement' => $insertImage,
2232
+ 'preparedproducthtmlStatement' => $insertProductHTML,
2233
+ 'preparedproductrelatedStatement' => $insertProductRelated,
2234
+ 'preparedattributeStatement' => $insertAttribute,
2235
+ 'preparedattributegroupStatement' => $insertAttributeGroup,
2236
+ 'preparedattributegroupmapStatement' => $insertAttributeGroupMap,
2237
+ 'preparedproductattributeStatement' => $insertProductAttribute,
2238
+ 'preparedproductattributedefaultStatement' => $insertProductAttributeDefault,
2239
+ 'preparedproductquestionStatement' => $insertProductQuestion,
2240
+ 'preparedproductanswerStatement' => $insertProductAnswer,
2241
+ 'store' => $store ));
2242
+
2243
+ if(!empty($this->productsProcessed))
2244
+ {
2245
+ $db->exec('INSERT OR REPLACE INTO Progress (Sentinel, State, entity_id) VALUES (1, \'virtual\', '.$this->currentEntityId.')');
2246
+ }
2247
+ else
2248
  {
2249
  $state = 'configurable';
2250
  $this->currentEntityId = 0;
2363
  catch(Exception $e)
2364
  {
2365
  }
2366
+
2367
+ try
2368
+ {
2369
+ $connection->addColumn(
2370
+ $tablePrefix . 'sales_flat_order',
2371
+ 'codisto_merchantid',
2372
+ 'varchar(10)'
2373
+ );
2374
+ }
2375
+ catch(Exception $e)
2376
+ {
2377
+ }
2378
  }
2379
 
2380
  $orderStoreId = $storeId;
2396
  $ts -= 7776000; // 90 days
2397
 
2398
  $orders = Mage::getModel('sales/order')->getCollection()
2399
+ ->addFieldToSelect(array('codisto_orderid', 'codisto_merchantid', 'status'))
2400
  ->addFieldToSelect('entity_id','externalreference')
2401
  ->addAttributeToFilter('entity_id', array('gt' => (int)$this->currentEntityId ))
2402
  ->addAttributeToFilter('main_table.store_id', array('eq' => $orderStoreId ))
2405
  $orders->getSelect()->joinLeft( array('i' => $invoiceName), 'i.order_id = main_table.entity_id AND i.state = 2', array('pay_date' => 'MIN(i.created_at)'));
2406
  $orders->getSelect()->joinLeft( array('s' => $shipmentName), 's.order_id = main_table.entity_id', array('ship_date' => 'MIN(s.created_at)'));
2407
  $orders->getSelect()->joinLeft( array('t' => $shipmentTrackName), 't.order_id = main_table.entity_id', array('carrier' => 'GROUP_CONCAT(COALESCE(t.title, \'\') SEPARATOR \',\')', 'track_number' => 'GROUP_CONCAT(COALESCE(t.track_number, \'\') SEPARATOR \',\')'));
2408
+ $orders->getSelect()->group(array('main_table.entity_id', 'main_table.codisto_orderid', 'main_table.codisto_merchantid', 'main_table.status'));
2409
  $orders->getSelect()->limit(1000);
2410
  $orders->setOrder('entity_id', 'ASC');
2411
 
2459
  $db->exec('INSERT OR REPLACE INTO Progress (Sentinel, State, entity_id) VALUES (1, \'complete\', 0)');
2460
  }
2461
 
2462
+ if(empty($this->productsProcessed) && empty($this->ordersProcessed))
2463
  {
2464
  $uniqueId = uniqid();
2465
 
2474
 
2475
  return 'complete';
2476
  }
2477
+ else if($first)
2478
+ {
2479
+ $db->exec('COMMIT TRANSACTION');
2480
+
2481
+ return 'complete';
2482
+ }
2483
  else
2484
  {
2485
  $db->exec('COMMIT TRANSACTION');
2500
 
2501
  $simpleProducts = $this->getProductCollection()
2502
  ->addAttributeToSelect(array('entity_id'), 'left')
2503
+ ->addAttributeToFilter('type_id', array('in' => array('simple', 'virtual')));
2504
 
2505
  $simplecount = $simpleProducts->getSize();
2506
 
2727
 
2728
  $db = $this->GetSyncDb($syncDb, 5 );
2729
 
2730
+ $insertOrders = $db->prepare('INSERT OR REPLACE INTO [Order] (ID, Status, PaymentDate, ShipmentDate, Carrier, TrackingNumber, ExternalReference, MerchantID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
2731
 
2732
  $coreResource = Mage::getSingleton('core/resource');
2733
 
2738
  $db->exec('BEGIN EXCLUSIVE TRANSACTION');
2739
 
2740
  $orders = Mage::getModel('sales/order')->getCollection()
2741
+ ->addFieldToSelect(array('codisto_orderid', 'codisto_merchantid', 'status'))
2742
  ->addFieldToSelect('entity_id','externalreference')
2743
  ->addAttributeToFilter('codisto_orderid', array('in' => $orders ));
2744
 
2745
  $orders->getSelect()->joinLeft( array('i' => $invoiceName), 'i.order_id = main_table.entity_id AND i.state = 2', array('pay_date' => 'MIN(i.created_at)'));
2746
  $orders->getSelect()->joinLeft( array('s' => $shipmentName), 's.order_id = main_table.entity_id', array('ship_date' => 'MIN(s.created_at)'));
2747
  $orders->getSelect()->joinLeft( array('t' => $shipmentTrackName), 't.order_id = main_table.entity_id', array('carrier' => 'GROUP_CONCAT(COALESCE(t.title, \'\') SEPARATOR \',\')', 'track_number' => 'GROUP_CONCAT(COALESCE(t.track_number, \'\') SEPARATOR \',\')'));
2748
+ $orders->getSelect()->group(array('main_table.entity_id', 'main_table.codisto_orderid', 'main_table.codisto_merchantid', 'main_table.status'));
2749
 
2750
  $orders->setOrder('entity_id', 'ASC');
2751
 
2809
  $db->exec('CREATE TABLE IF NOT EXISTS Store(ID integer NOT NULL PRIMARY KEY, Code text NOT NULL, Name text NOT NULL, Currency text NOT NULL)');
2810
  $db->exec('CREATE TABLE IF NOT EXISTS StoreMerchant(StoreID integer NOT NULL, MerchantID integer NOT NULL, PRIMARY KEY (StoreID, MerchantID))');
2811
 
2812
+ $db->exec('CREATE TABLE IF NOT EXISTS [Order](ID integer NOT NULL PRIMARY KEY, Status text NOT NULL, PaymentDate datetime NULL, ShipmentDate datetime NULL, Carrier text NOT NULL, TrackingNumber text NOT NULL, ExternalReference text NOT NULL DEFAULT \'\', MerchantID text NOT NULL DEFAULT \'\')');
2813
 
2814
  $db->exec('CREATE TABLE IF NOT EXISTS StaticBlock(BlockID integer NOT NULL PRIMARY KEY, Title text NOT NULL, Identifier text NOT NULL, Content text NOT NULL)');
2815
 
2836
  $db->exec('ALTER TABLE [Order] ADD COLUMN ExternalReference text NOT NULL DEFAULT \'\'');
2837
  }
2838
 
2839
+ try
2840
+ {
2841
+ $db->exec('SELECT 1 FROM [Order] WHERE MerchantID IS NULL LIMIT 1');
2842
+ }
2843
+ catch(Exception $e)
2844
+ {
2845
+ $db->exec('ALTER TABLE [Order] ADD COLUMN MerchantID text NOT NULL DEFAULT \'\'');
2846
+ }
2847
+
2848
  try
2849
  {
2850
  $db->exec('SELECT 1 FROM ProductAttributeValue WHERE ProductExternalReference IS NULL LIMIT 1');
app/code/community/Codisto/Sync/controllers/IndexController.php CHANGED
@@ -24,6 +24,9 @@ class Codisto_Sync_IndexController extends Mage_Core_Controller_Front_Action
24
  {
25
  set_time_limit(0);
26
  ignore_user_abort(false);
 
 
 
27
 
28
  $output = '';
29
 
@@ -294,6 +297,9 @@ class Codisto_Sync_IndexController extends Mage_Core_Controller_Front_Action
294
  {
295
  set_time_limit(0);
296
  ignore_user_abort(false);
 
 
 
297
 
298
  $request = $this->getRequest();
299
  $response = $this->getResponse();
@@ -351,6 +357,19 @@ class Codisto_Sync_IndexController extends Mage_Core_Controller_Front_Action
351
 
352
  }
353
 
 
 
 
 
 
 
 
 
 
 
 
 
 
354
  if($storeId == 0)
355
  {
356
  // jump the storeid to first non admin store
@@ -406,7 +425,11 @@ class Codisto_Sync_IndexController extends Mage_Core_Controller_Front_Action
406
 
407
  try
408
  {
409
- $order = Mage::getModel('sales/order')->getCollection()->addAttributeToFilter('codisto_orderid', $ordercontent->orderid)->getFirstItem();
 
 
 
 
410
 
411
  if($order && $order->getId())
412
  {
@@ -567,6 +590,7 @@ class Codisto_Sync_IndexController extends Mage_Core_Controller_Front_Action
567
  $order->setPayment($quoteConverter->paymentToOrderPayment($quote->getPayment()));
568
  $order->setCustomer($quote->getCustomer());
569
  $order->setCodistoOrderid((string)$ordercontent->orderid);
 
570
 
571
  if(preg_match('/\{ordernumber\}|\{ebaysalesrecordnumber\}|\{ebaytransactionid\}/', $ordernumberformat))
572
  {
@@ -757,7 +781,7 @@ class Codisto_Sync_IndexController extends Mage_Core_Controller_Front_Action
757
  if($shippingDescription)
758
  {
759
  $shippingRates = $quote->getShippingAddress()->getAllShippingRates();
760
-
761
  foreach($shippingRates as $rate)
762
  {
763
  $shippingMethodTitle = $rate->getMethodTitle();
24
  {
25
  set_time_limit(0);
26
  ignore_user_abort(false);
27
+ @ini_set('display_errors', 1);
28
+ @ini_set('display_startup_errors', 1);
29
+ @error_reporting(E_ALL);
30
 
31
  $output = '';
32
 
297
  {
298
  set_time_limit(0);
299
  ignore_user_abort(false);
300
+ @ini_set('display_errors', 1);
301
+ @ini_set('display_startup_errors', 1);
302
+ @error_reporting(E_ALL);
303
 
304
  $request = $this->getRequest();
305
  $response = $this->getResponse();
357
 
358
  }
359
 
360
+ try
361
+ {
362
+ $connection->addColumn(
363
+ Mage::getConfig()->getTablePrefix() . 'sales_flat_order',
364
+ 'codisto_merchantid',
365
+ 'varchar(10)'
366
+ );
367
+ }
368
+ catch(Exception $e)
369
+ {
370
+
371
+ }
372
+
373
  if($storeId == 0)
374
  {
375
  // jump the storeid to first non admin store
425
 
426
  try
427
  {
428
+ $order = Mage::getModel('sales/order')
429
+ ->getCollection()
430
+ ->addAttributeToFilter('codisto_orderid', $ordercontent->orderid)
431
+ ->addAttributeToFilter('codisto_merchantid', $ordercontent->merchantid)
432
+ ->getFirstItem();
433
 
434
  if($order && $order->getId())
435
  {
590
  $order->setPayment($quoteConverter->paymentToOrderPayment($quote->getPayment()));
591
  $order->setCustomer($quote->getCustomer());
592
  $order->setCodistoOrderid((string)$ordercontent->orderid);
593
+ $order->setCodistoMerchantid((string)$ordercontent->merchantid);
594
 
595
  if(preg_match('/\{ordernumber\}|\{ebaysalesrecordnumber\}|\{ebaytransactionid\}/', $ordernumberformat))
596
  {
781
  if($shippingDescription)
782
  {
783
  $shippingRates = $quote->getShippingAddress()->getAllShippingRates();
784
+
785
  foreach($shippingRates as $rate)
786
  {
787
  $shippingMethodTitle = $rate->getMethodTitle();
app/code/community/Codisto/Sync/controllers/SyncController.php CHANGED
@@ -42,6 +42,9 @@ class Codisto_Sync_SyncController extends Mage_Core_Controller_Front_Action
42
  @ini_set('zlib.output_compression', 'Off');
43
  @ini_set('output_buffering', 'Off');
44
  @ini_set('output_handler', '');
 
 
 
45
 
46
  ignore_user_abort(true);
47
 
@@ -182,8 +185,6 @@ class Codisto_Sync_SyncController extends Mage_Core_Controller_Front_Action
182
  }
183
  else
184
  {
185
- $sendFullDb = true;
186
-
187
  if(!$request->getQuery('first') &&
188
  is_string($request->getQuery('incremental')))
189
  {
@@ -197,6 +198,16 @@ class Codisto_Sync_SyncController extends Mage_Core_Controller_Front_Action
197
 
198
  $db->exec('BEGIN EXCLUSIVE TRANSACTION');
199
 
 
 
 
 
 
 
 
 
 
 
200
  $qry = $db->query('SELECT CASE WHEN EXISTS(SELECT 1 FROM SyncDb.sqlite_master WHERE type COLLATE NOCASE = \'TABLE\' AND name = \'ProductChange\') THEN -1 ELSE 0 END');
201
  $productChange = $qry->fetchColumn();
202
  $qry->closeCursor();
@@ -266,13 +277,27 @@ class Codisto_Sync_SyncController extends Mage_Core_Controller_Front_Action
266
  $this->sendFile($tmpDb, 'incremental');
267
 
268
  unlink($tmpDb);
269
-
270
- $sendFullDb = false;
271
  }
272
-
273
- if($sendFullDb)
274
  {
275
- $this->sendFile($syncDb);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
  }
277
  }
278
  }
42
  @ini_set('zlib.output_compression', 'Off');
43
  @ini_set('output_buffering', 'Off');
44
  @ini_set('output_handler', '');
45
+ @ini_set('display_errors', 1);
46
+ @ini_set('display_startup_errors', 1);
47
+ @error_reporting(E_ALL);
48
 
49
  ignore_user_abort(true);
50
 
185
  }
186
  else
187
  {
 
 
188
  if(!$request->getQuery('first') &&
189
  is_string($request->getQuery('incremental')))
190
  {
198
 
199
  $db->exec('BEGIN EXCLUSIVE TRANSACTION');
200
 
201
+ $qry = $db->query('SELECT CASE WHEN EXISTS(SELECT 1 FROM SyncDb.sqlite_master WHERE type COLLATE NOCASE = \'TABLE\' AND name = \'Sync\') THEN -1 ELSE 0 END');
202
+ $syncComplete = $qry->fetchColumn();
203
+ $qry->closeCursor();
204
+ if(!$syncComplete)
205
+ {
206
+ @unlink($tmpDb);
207
+
208
+ throw new Exception('Attempting to download partial sync db - incremental');
209
+ }
210
+
211
  $qry = $db->query('SELECT CASE WHEN EXISTS(SELECT 1 FROM SyncDb.sqlite_master WHERE type COLLATE NOCASE = \'TABLE\' AND name = \'ProductChange\') THEN -1 ELSE 0 END');
212
  $productChange = $qry->fetchColumn();
213
  $qry->closeCursor();
277
  $this->sendFile($tmpDb, 'incremental');
278
 
279
  unlink($tmpDb);
 
 
280
  }
281
+ else
 
282
  {
283
+ $syncComplete = true;
284
+
285
+ if(!$request->getQuery('first'))
286
+ {
287
+ $db = new PDO('sqlite:' . $syncDb);
288
+ $qry = $db->query('SELECT CASE WHEN EXISTS(SELECT 1 FROM sqlite_master WHERE type COLLATE NOCASE = \'TABLE\' AND name = \'Sync\') THEN -1 ELSE 0 END');
289
+ $syncComplete = $qry->fetchColumn();
290
+ $qry->closeCursor();
291
+ }
292
+
293
+ if($syncComplete)
294
+ {
295
+ $this->sendFile($syncDb);
296
+ }
297
+ else
298
+ {
299
+ throw new Exception('Attempting to download partial sync db');
300
+ }
301
  }
302
  }
303
  }
app/code/community/Codisto/Sync/data/codisto_setup/{data-install-1.90.15.php → data-install-1.90.16.php} RENAMED
File without changes
app/code/community/Codisto/Sync/etc/config.xml CHANGED
@@ -23,7 +23,7 @@
23
  <config>
24
  <modules>
25
  <Codisto_Sync>
26
- <version>1.90.15</version>
27
  <depends>
28
  <Mage_Payment/>
29
  </depends>
23
  <config>
24
  <modules>
25
  <Codisto_Sync>
26
+ <version>1.90.16</version>
27
  <depends>
28
  <Mage_Payment/>
29
  </depends>
app/code/community/Codisto/Sync/sql/codisto_setup/{mysql4-install-1.90.15.php → mysql4-install-1.90.16.php} RENAMED
@@ -30,4 +30,10 @@ $connection->addColumn(
30
  'varchar(10)'
31
  );
32
 
33
- $installer->endSetup();
 
 
 
 
 
 
30
  'varchar(10)'
31
  );
32
 
33
+ $connection->addColumn(
34
+ $tablename,
35
+ 'codisto_merchantid',
36
+ 'varchar(10)'
37
+ );
38
+
39
+ $installer->endSetup();
package.xml CHANGED
@@ -1,2 +1,2 @@
1
  <?xml version="1.0"?>
2
- <package><name>codistoconnect</name><version>1.90.15</version><stability>stable</stability><license>OSL-3.0</license><channel>community</channel><extends></extends><summary>Fastest, Easiest eBay listing</summary><description>CodistoConnect enables you to list on eBay in the simplest way possible with maximum performance</description><notes></notes><authors><author><name>Codisto</name><user>Codisto</user><email>hello@codisto.com</email></author></authors><date>2016-09-18</date><time>21:15:55</time><compatible></compatible><dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="app"><dir name="design"><dir name="ebay"><file name="README" hash="8a3f3351f68ccde9f161cdbe3960392f"/></dir></dir><dir name="code"><dir name="community"><dir name="Codisto"><dir name="Sync"><dir name="Helper"><file name="CmsContent.php" hash="f00b4523d681c60c660089d0de0f2e03"/><file name="Data.php" hash="47f7bc430c410c9989da367a8daff645"/><file name="Signal.php" hash="998380ec7df67fe41a27475fc7fe7ed2"/></dir><dir name="controllers"><file name="CodistoController.php" hash="eccbf167582d60ae559b7455b9b8e7ea"/><file name="IndexController.php" hash="62e550f21def246ae4a77b531213e988"/><file name="SyncController.php" hash="330295cefacba45b90b4f6e6fb68d72c"/></dir><dir name="Controller"><file name="Router.php" hash="66d43bfbe826fe525dc764d42146cd50"/></dir><dir name="Test"><file name="README" hash="8299e52f9198536ff5fd3fb42f4a29d8"/><dir name="Config"><file name="AdminHtml.php" hash="6ee6404e52ed6376ad41b7556f265c32"/><file name="Config.php" hash="2e9023fcbab484d03936394934f44f13"/><dir name="Config"><dir name="expectations"><file name="testCodistoCoreConfig.yaml" hash="4a4e07f62981139ff6eb8a63420cbf0d"/></dir></dir></dir><dir name="Controllers"><file name="CodistoController.php" hash="a2be4faeac73ff1847c0d7dc4fbdc0e0"/><file name="IndexController.php" hash="f7252fae8d2f7b67397ae56524db49d1"/><file name="SyncController.php" hash="33436e4935631488073765d723a82ff7"/></dir><dir name="Controller"><file name="Router.php" hash="8afc0dca269dd0977ff6b3ac6802d0ee"/></dir><dir name="Model"><file name="Paymentmethod.php" hash="862365909073ffbba057f6f152933826"/><file name="Sync.php" hash="10a38bbb62260208a8b1529e762b7b75"/></dir></dir><dir name="sql"><dir name="codisto_setup"><file name="mysql4-install-1.90.15.php" hash="6d07d4e22ae5d907df1f4389c3a829d4"/></dir></dir><dir name="data"><dir name="codisto_setup"><file name="data-install-1.90.15.php" hash="29334830432cf1a02e4a992b9a42d6c5"/></dir></dir><dir name="Block"><file name="PaymentInfo.php" hash="7aa15fed37766d20d9d5a7d707aff80d"/></dir><dir name="Ebaypayment"><dir name="Model"><file name="Paymentmethod.php" hash="480787461a5b952a739f20a752bffb5d"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="9503ace98df8dfa2f2ec460b30e1053d"/><file name="config.xml" hash="7782661392d79ebd6ee252979aa80c88"/></dir><dir name="Model"><file name="Observer.php" hash="81c22aef68f97ef2e89c32729e3b378b"/><file name="Sync.php" hash="bb473d0e4d09e7c65e472c717b3e9b83"/><dir name="Indexer"><file name="Ebay.php" hash="556b1aabc7c3202f31a2e6c250e7d590"/></dir><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="6a6664ea18d93bcdd0f45530caa56244"/></dir></dir></dir></dir></dir></dir></dir><dir name="etc"><dir name="modules"><file name="Codisto_Sync.xml" hash="a791bc2a9302d085eb29edf77421f525"/></dir></dir></dir></target></contents></package>
1
  <?xml version="1.0"?>
2
+ <package><name>codistoconnect</name><version>1.90.16</version><stability>stable</stability><license>OSL-3.0</license><channel>community</channel><extends></extends><summary>Fastest, Easiest eBay listing</summary><description>CodistoConnect enables you to list on eBay in the simplest way possible with maximum performance</description><notes></notes><authors><author><name>Codisto</name><user>Codisto</user><email>hello@codisto.com</email></author></authors><date>2016-09-28</date><time>20:10:49</time><compatible></compatible><dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="app"><dir name="design"><dir name="ebay"><file name="README" hash="8a3f3351f68ccde9f161cdbe3960392f"/></dir></dir><dir name="code"><dir name="community"><dir name="Codisto"><dir name="Sync"><dir name="Helper"><file name="CmsContent.php" hash="f00b4523d681c60c660089d0de0f2e03"/><file name="Data.php" hash="8a0721d8d2d882c4ba64e9dab9de4fe9"/><file name="Signal.php" hash="998380ec7df67fe41a27475fc7fe7ed2"/></dir><dir name="controllers"><file name="CodistoController.php" hash="eccbf167582d60ae559b7455b9b8e7ea"/><file name="IndexController.php" hash="0499471f5b7a99dfcbda40018928244e"/><file name="SyncController.php" hash="fcff6d6e902a74314e522c1d71bb6636"/></dir><dir name="Controller"><file name="Router.php" hash="66d43bfbe826fe525dc764d42146cd50"/></dir><dir name="Test"><file name="README" hash="8299e52f9198536ff5fd3fb42f4a29d8"/><dir name="Config"><file name="AdminHtml.php" hash="6ee6404e52ed6376ad41b7556f265c32"/><file name="Config.php" hash="2e9023fcbab484d03936394934f44f13"/><dir name="Config"><dir name="expectations"><file name="testCodistoCoreConfig.yaml" hash="4a4e07f62981139ff6eb8a63420cbf0d"/></dir></dir></dir><dir name="Controllers"><file name="CodistoController.php" hash="a2be4faeac73ff1847c0d7dc4fbdc0e0"/><file name="IndexController.php" hash="f7252fae8d2f7b67397ae56524db49d1"/><file name="SyncController.php" hash="33436e4935631488073765d723a82ff7"/></dir><dir name="Controller"><file name="Router.php" hash="8afc0dca269dd0977ff6b3ac6802d0ee"/></dir><dir name="Model"><file name="Paymentmethod.php" hash="862365909073ffbba057f6f152933826"/><file name="Sync.php" hash="10a38bbb62260208a8b1529e762b7b75"/></dir></dir><dir name="sql"><dir name="codisto_setup"><file name="mysql4-install-1.90.16.php" hash="f5e7410bdb70ae4c021e3d257ccbf9a9"/></dir></dir><dir name="data"><dir name="codisto_setup"><file name="data-install-1.90.16.php" hash="29334830432cf1a02e4a992b9a42d6c5"/></dir></dir><dir name="Block"><file name="PaymentInfo.php" hash="7aa15fed37766d20d9d5a7d707aff80d"/></dir><dir name="Ebaypayment"><dir name="Model"><file name="Paymentmethod.php" hash="480787461a5b952a739f20a752bffb5d"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="9503ace98df8dfa2f2ec460b30e1053d"/><file name="config.xml" hash="142006a6dbb6b5556e3911b04f4b345b"/></dir><dir name="Model"><file name="Observer.php" hash="81c22aef68f97ef2e89c32729e3b378b"/><file name="Sync.php" hash="380df62a188b83592db593efc18905c3"/><dir name="Indexer"><file name="Ebay.php" hash="556b1aabc7c3202f31a2e6c250e7d590"/></dir><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="6a6664ea18d93bcdd0f45530caa56244"/></dir></dir></dir></dir></dir></dir></dir><dir name="etc"><dir name="modules"><file name="Codisto_Sync.xml" hash="a791bc2a9302d085eb29edf77421f525"/></dir></dir></dir></target></contents></package>