Auctionmaid_Matrxrate - Version 2.0.3

Version Notes

1 - The export csv option is currently disabled. This is so the extension does not conflict with the existing tablerates. There are no plans to resolve this - if you need to view the data look in phpmyadmin.

Download this release

Release Info

Developer Magento Core Team
Extension Auctionmaid_Matrxrate
Version 2.0.3
Comparing to
See all releases


Code changes from version 2.0.2 to 2.0.3

app/code/community/Auctionmaid/Freeoptionalshipping/Model/Carrier/Freeoptionalshipping.php CHANGED
@@ -20,7 +20,7 @@
20
  *
21
  * Conditional Free Shipping Module - where if attribute exclude_free_shipping is set
22
  * will result in free shipping being disabled for checkout
23
- *
24
  * @category Auctionmaid
25
  * @package Auctionmaid_Freeoptionalshipping
26
  * @copyright Copyright (c) 2008 Auction Maid (http://www.auctionmaid.com)
@@ -64,6 +64,7 @@ class Auctionmaid_Freeoptionalshipping_Model_Carrier_Freeoptionalshipping
64
  foreach($items as $item) {
65
  $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $item->getSku(), 'exclude_free_shipping');
66
  if ($product->getData('exclude_free_shipping')) {
 
67
  return false;
68
  }
69
  }
20
  *
21
  * Conditional Free Shipping Module - where if attribute exclude_free_shipping is set
22
  * will result in free shipping being disabled for checkout
23
+ *
24
  * @category Auctionmaid
25
  * @package Auctionmaid_Freeoptionalshipping
26
  * @copyright Copyright (c) 2008 Auction Maid (http://www.auctionmaid.com)
64
  foreach($items as $item) {
65
  $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $item->getSku(), 'exclude_free_shipping');
66
  if ($product->getData('exclude_free_shipping')) {
67
+ Mage::log(print_r($item->getSku(),true));
68
  return false;
69
  }
70
  }
app/code/community/Auctionmaid/Matrixrate/Model/Mysql4/Carrier/Matrixrate.php CHANGED
@@ -1,365 +1,383 @@
1
- <?php
2
- /**
3
- * Magento Auctionmaid Shipping Module
4
- *
5
- * NOTICE OF LICENSE
6
- *
7
- * This source file is subject to the Open Software License (OSL 3.0)
8
- * that is bundled with this package in the file LICENSE.txt.
9
- * It is also available through the world-wide-web at this URL:
10
- * http://opensource.org/licenses/osl-3.0.php
11
- * If you did not receive a copy of the license and are unable to
12
- * obtain it through the world-wide-web, please send an email
13
- * to license@magentocommerce.com so we can send you a copy immediately.
14
- *
15
- * DISCLAIMER
16
- *
17
- * Do not edit or add to this file if you wish to upgrade Magento to newer
18
- * versions in the future. If you wish to customize Magento for your
19
- * needs please refer to http://www.magentocommerce.com for more information.
20
- *
21
- * Shipping MatrixRates
22
- *
23
- * @category Auctionmaid
24
- * @package Auctionmaid_Matrixrate
25
- * @copyright Copyright (c) 2008 Auction Maid (http://www.auctionmaid.com)
26
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
- * @author Karen Baker <enquiries@auctionmaid.com>
28
- */
29
- class Auctionmaid_Matrixrate_Model_Mysql4_Carrier_Matrixrate extends Mage_Core_Model_Mysql4_Abstract
30
- {
31
- protected function _construct()
32
- {
33
- $this->_init('shipping/matrixrate', 'pk');
34
- }
35
-
36
- public function getNewRate(Mage_Shipping_Model_Rate_Request $request,$zipRangeSet=0)
37
- {
38
- $read = $this->_getReadAdapter();
39
- $write = $this->_getWriteAdapter();
40
-
41
- $postcode = $request->getDestPostcode();
42
- $table = Mage::getSingleton('core/resource')->getTableName('matrixrate_shipping/matrixrate');
43
-
44
- if ($zipRangeSet) {
45
- # Want to search for postcodes within a range
46
- $zipSearchString = $read->quoteInto(" AND dest_zip<=? ", $postcode).
47
- $read->quoteInto(" AND dest_zip_to>=? )", $postcode);
48
- } else {
49
- $zipSearchString = $read->quoteInto(" AND ? LIKE dest_zip )", $postcode);
50
- }
51
-
52
- for ($j=0;$j<7;$j++)
53
- {
54
-
55
- $select = $read->select()->from($table);
56
- switch($j) {
57
- case 0:
58
- $select->where(
59
- $read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()).
60
- $read->quoteInto(" AND dest_region_id=? ", $request->getDestRegionId()).
61
- $read->quoteInto(" AND STRCMP(LOWER(dest_city),LOWER(?)) = 0 ", $request->getDestCity()).
62
- # $read->quoteInto(" AND ? LIKE dest_zip ) ", $postcode)
63
- $zipSearchString
64
- );
65
- break;
66
- case 1:
67
- $select->where(
68
- $read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()).
69
- $read->quoteInto(" AND dest_region_id=? ", $request->getDestRegionId()).
70
- $read->quoteInto(" AND STRCMP(LOWER(dest_city),LOWER(?)) = 0 AND dest_zip='')", $request->getDestCity())
71
- );
72
- break;
73
- case 2:
74
- $select->where(
75
- $read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()).
76
- $read->quoteInto(" AND STRCMP(LOWER(dest_city),LOWER(?)) = 0 AND dest_region_id='0' AND dest_zip='') ", $request->getDestCity())
77
- );
78
- break;
79
- case 3:
80
- $select->where(
81
- $read->quoteInto(" (dest_country_id=? AND dest_region_id='0' AND dest_city='' ", $request->getDestCountryId()).
82
- # $read->quoteInto(" AND ? LIKE dest_zip ) ", $postcode)
83
- $zipSearchString
84
- );
85
- break;
86
- case 4:
87
- $select->where(
88
- $read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()).
89
- $read->quoteInto(" AND dest_region_id=? AND dest_city='' AND dest_zip='') ", $request->getDestRegionId())
90
- );
91
- break;
92
-
93
- case 5:
94
- $select->where(
95
- $read->quoteInto(" (dest_country_id=? AND dest_region_id='0' AND dest_city='' AND dest_zip='') ", $request->getDestCountryId())
96
- );
97
- break;
98
-
99
- case 6:
100
- $select->where(
101
- " (dest_country_id='0' AND dest_region_id='0' AND dest_zip='')"
102
- );
103
- break;
104
- }
105
-
106
-
107
- if (is_array($request->getConditionName())) {
108
- $i = 0;
109
- foreach ($request->getConditionName() as $conditionName) {
110
- if ($i == 0) {
111
- $select->where('condition_name=?', $conditionName);
112
- } else {
113
- $select->orWhere('condition_name=?', $conditionName);
114
- }
115
- $select->where('condition_from_value<=?', $request->getData($conditionName));
116
-
117
-
118
- $i++;
119
- }
120
- } else {
121
- $select->where('condition_name=?', $request->getConditionName());
122
- $select->where('condition_from_value<=?', $request->getData($request->getConditionName()));
123
- $select->where('condition_to_value>=?', $request->getData($request->getConditionName()));
124
- }
125
-
126
- /* Mage::log(print_r($request,true));**/
127
- $select->where('website_id=?', $request->getWebsiteId());
128
-
129
- $select->order('dest_country_id DESC');
130
- $select->order('dest_region_id DESC');
131
- $select->order('dest_zip DESC');
132
- $select->order('condition_from_value DESC');
133
-
134
- /*
135
- pdo has an issue. we cannot use bind
136
- */
137
-
138
-
139
- $newdata=array();
140
- $row = $read->fetchAll($select);
141
- if (!empty($row))
142
- {
143
- // have found a result or found nothing and at end of list!
144
- foreach ($row as $data) {
145
- $newdata[]=$data;
146
- }
147
- break;
148
- }
149
- }
150
- return $newdata;
151
-
152
- }
153
-
154
- public function uploadAndImport(Varien_Object $object)
155
- {
156
- $csvFile = $_FILES["groups"]["tmp_name"]["matrixrate"]["fields"]["import"]["value"];
157
-
158
- if (!empty($csvFile)) {
159
-
160
- $csv = trim(file_get_contents($csvFile));
161
-
162
- $table = Mage::getSingleton('core/resource')->getTableName('matrixrate_shipping/matrixrate');
163
-
164
- $websiteId = $object->getScopeId();
165
- $websiteModel = Mage::app()->getWebsite($websiteId);
166
- /*
167
- getting condition name from post instead of the following commented logic
168
- */
169
-
170
- if (isset($_POST['groups']['matrixrate']['fields']['condition_name']['inherit'])) {
171
- $conditionName = (string)Mage::getConfig()->getNode('default/carriers/matrixrate/condition_name');
172
- } else {
173
- $conditionName = $_POST['groups']['matrixrate']['fields']['condition_name']['value'];
174
- }
175
-
176
- // $conditionName = $object->getValue();
177
- // if ($conditionName{0} == '_') {
178
- // $conditionName = Mage::helper('core/string')->substr($conditionName, 1, strpos($conditionName, '/')-1);
179
- // } else {
180
- // $conditionName = $websiteModel->getConfig('carriers/matrixrate/condition_name');
181
- // }
182
- $conditionFullName = Mage::getModel('matrixrate_shipping/carrier_matrixrate')->getCode('condition_name_short', $conditionName);
183
- if (!empty($csv)) {
184
- $exceptions = array();
185
- $csvLines = explode("\n", $csv);
186
- $csvLine = array_shift($csvLines);
187
- $csvLine = $this->_getCsvValues($csvLine);
188
- if (count($csvLine) < 7) {
189
- $exceptions[0] = Mage::helper('shipping')->__('Invalid Matrix Rates File Format');
190
- }
191
-
192
- $countryCodes = array();
193
- $regionCodes = array();
194
- foreach ($csvLines as $k=>$csvLine) {
195
- $csvLine = $this->_getCsvValues($csvLine);
196
- if (count($csvLine) > 0 && count($csvLine) < 7) {
197
- $exceptions[0] = Mage::helper('shipping')->__('Invalid Matrix Rates File Format');
198
- } else {
199
- $countryCodes[] = $csvLine[0];
200
- $regionCodes[] = $csvLine[1];
201
- }
202
- }
203
-
204
- if (empty($exceptions)) {
205
- $data = array();
206
- $countryCodesToIds = array();
207
- $regionCodesToIds = array();
208
-
209
- $countryCollection = Mage::getResourceModel('directory/country_collection')->addCountryCodeFilter($countryCodes)->load();
210
- foreach ($countryCollection->getItems() as $country) {
211
- $countryCodesToIds[$country->getData('iso3_code')] = $country->getData('country_id');
212
- $countryCodesToIds[$country->getData('iso2_code')] = $country->getData('country_id');
213
- }
214
-
215
- $regionCollection = Mage::getResourceModel('directory/region_collection')->addRegionCodeFilter($regionCodes)->load();
216
- foreach ($regionCollection->getItems() as $region) {
217
- $regionCodesToIds[$region->getData('code')] = $region->getData('region_id');
218
- }
219
-
220
- foreach ($csvLines as $k=>$csvLine) {
221
- $csvLine = $this->_getCsvValues($csvLine);
222
-
223
- if (empty($countryCodesToIds) || !array_key_exists($csvLine[0], $countryCodesToIds)) {
224
- $countryId = '0';
225
- if ($csvLine[0] != '*' && $csvLine[0] != '') {
226
- $exceptions[] = Mage::helper('shipping')->__('Invalid Country "%s" in the Row #%s', $csvLine[0], ($k+1));
227
- }
228
- } else {
229
- $countryId = $countryCodesToIds[$csvLine[0]];
230
- }
231
-
232
- if (empty($regionCodesToIds) || !array_key_exists($csvLine[1], $regionCodesToIds)) {
233
- $regionId = '0';
234
- if ($csvLine[1] != '*' && $csvLine[1] != '') {
235
- $exceptions[] = Mage::helper('shipping')->__('Invalid Region/State "%s" in the Row #%s', $csvLine[1], ($k+1));
236
- }
237
- } else {
238
- $regionId = $regionCodesToIds[$csvLine[1]];
239
- }
240
-
241
- if (count($csvLine)==9) {
242
- // we are searching for postcodes in ranges & including cities
243
- if ($csvLine[2] == '*' || $csvLine[2] == '') {
244
- $city = '';
245
- } else {
246
- $city = $csvLine[2];
247
- }
248
-
249
-
250
- if ($csvLine[3] == '*' || $csvLine[3] == '') {
251
- $zip = '';
252
- } else {
253
- $zip = $csvLine[3];
254
- }
255
-
256
-
257
- if ($csvLine[4] == '*' || $csvLine[4] == '') {
258
- $zip_to = '';
259
- } else {
260
- $zip_to = $csvLine[4];
261
- }
262
-
263
-
264
- if (!$this->_isPositiveDecimalNumber($csvLine[5]) || $csvLine[5] == '*' || $csvLine[5] == '') {
265
- $exceptions[] = Mage::helper('shipping')->__('Invalid %s From "%s" in the Row #%s', $conditionFullName, $csvLine[5], ($k+1));
266
- } else {
267
- $csvLine[5] = (float)$csvLine[5];
268
- }
269
-
270
- if (!$this->_isPositiveDecimalNumber($csvLine[6])) {
271
- $exceptions[] = Mage::helper('shipping')->__('Invalid %s To "%s" in the Row #%s', $conditionFullName, $csvLine[6], ($k+1));
272
- } else {
273
- $csvLine[6] = (float)$csvLine[6];
274
- }
275
-
276
-
277
- $data[] = array('website_id'=>$websiteId, 'dest_country_id'=>$countryId, 'dest_region_id'=>$regionId, 'dest_city'=>$city, 'dest_zip'=>$zip, 'dest_zip_to'=>$zip_to, 'condition_name'=>$conditionName, 'condition_from_value'=>$csvLine[5],'condition_to_value'=>$csvLine[6], 'price'=>$csvLine[7], 'delivery_type'=>$csvLine[8]);
278
- }
279
- else {
280
-
281
- if ($csvLine[2] == '*' || $csvLine[2] == '') {
282
- $zip = '';
283
- } else {
284
- $zip = $csvLine[2]."%";
285
- }
286
-
287
- $city='';
288
- $zip_to = '';
289
-
290
- if (!$this->_isPositiveDecimalNumber($csvLine[3]) || $csvLine[3] == '*' || $csvLine[3] == '') {
291
- $exceptions[] = Mage::helper('shipping')->__('Invalid %s From "%s" in the Row #%s', $conditionFullName, $csvLine[3], ($k+1));
292
- } else {
293
- $csvLine[3] = (float)$csvLine[3];
294
- }
295
-
296
- if (!$this->_isPositiveDecimalNumber($csvLine[4])) {
297
- $exceptions[] = Mage::helper('shipping')->__('Invalid %s To "%s" in the Row #%s', $conditionFullName, $csvLine[4], ($k+1));
298
- } else {
299
- $csvLine[4] = (float)$csvLine[4];
300
- }
301
- $data[] = array('website_id'=>$websiteId, 'dest_country_id'=>$countryId, 'dest_region_id'=>$regionId, 'dest_city'=>$city,'dest_zip'=>$zip,'dest_zip_to'=>$zip_to, 'condition_name'=>$conditionName, 'condition_from_value'=>$csvLine[3],'condition_to_value'=>$csvLine[4], 'price'=>$csvLine[5], 'delivery_type'=>$csvLine[6]);
302
- }
303
-
304
-
305
- $dataDetails[] = array('country'=>$csvLine[0], 'region'=>$csvLine[1]);
306
-
307
- }
308
- }
309
- if (empty($exceptions)) {
310
- $connection = $this->_getWriteAdapter();
311
-
312
-
313
- $condition = array(
314
- $connection->quoteInto('website_id = ?', $websiteId),
315
- $connection->quoteInto('condition_name = ?', $conditionName),
316
- );
317
- $connection->delete($table, $condition);
318
-
319
- foreach($data as $k=>$dataLine) {
320
- try {
321
- $connection->insert($table, $dataLine);
322
- } catch (Exception $e) {
323
- $exceptions[] = Mage::helper('shipping')->__('Duplicate Row #%s (Country "%s", Region/State "%s", City "%s", Zip From "%s", Zip To "%s", Delivery Type "%s", Value From "%s" and Value To "%s")', ($k+1), $dataDetails[$k]['country'], $dataDetails[$k]['region'], $dataLine['dest_city'], $dataLine['dest_zip'], $dataLine['dest_zip_to'], $dataLine['delivery_type'], $dataLine['condition_from_value'], $dataLine['condition_to_value']);
324
- }
325
- }
326
- }
327
- if (!empty($exceptions)) {
328
- throw new Exception( "\n" . implode("\n", $exceptions) );
329
- }
330
- }
331
- }
332
- }
333
-
334
- private function _getCsvValues($string, $separator=",")
335
- {
336
- $elements = explode($separator, trim($string));
337
- for ($i = 0; $i < count($elements); $i++) {
338
- $nquotes = substr_count($elements[$i], '"');
339
- if ($nquotes %2 == 1) {
340
- for ($j = $i+1; $j < count($elements); $j++) {
341
- if (substr_count($elements[$j], '"') > 0) {
342
- // Put the quoted string's pieces back together again
343
- array_splice($elements, $i, $j-$i+1, implode($separator, array_slice($elements, $i, $j-$i+1)));
344
- break;
345
- }
346
- }
347
- }
348
- if ($nquotes > 0) {
349
- // Remove first and last quotes, then merge pairs of quotes
350
- $qstr =& $elements[$i];
351
- $qstr = substr_replace($qstr, '', strpos($qstr, '"'), 1);
352
- $qstr = substr_replace($qstr, '', strrpos($qstr, '"'), 1);
353
- $qstr = str_replace('""', '"', $qstr);
354
- }
355
- $elements[$i] = trim($elements[$i]);
356
- }
357
- return $elements;
358
- }
359
-
360
- private function _isPositiveDecimalNumber($n)
361
- {
362
- return preg_match ("/^[0-9]+(\.[0-9]*)?$/", $n);
363
- }
364
-
365
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento Auctionmaid Shipping Module
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Shipping MatrixRates
22
+ *
23
+ * @category Auctionmaid
24
+ * @package Auctionmaid_Matrixrate
25
+ * @copyright Copyright (c) 2008 Auction Maid (http://www.auctionmaid.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Karen Baker <enquiries@auctionmaid.com>
28
+ */
29
+ class Auctionmaid_Matrixrate_Model_Mysql4_Carrier_Matrixrate extends Mage_Core_Model_Mysql4_Abstract
30
+ {
31
+ protected function _construct()
32
+ {
33
+ $this->_init('shipping/matrixrate', 'pk');
34
+ }
35
+
36
+ public function getNewRate(Mage_Shipping_Model_Rate_Request $request,$zipRangeSet=0)
37
+ {
38
+ $read = $this->_getReadAdapter();
39
+ $write = $this->_getWriteAdapter();
40
+
41
+ $postcode = $request->getDestPostcode();
42
+ $table = Mage::getSingleton('core/resource')->getTableName('matrixrate_shipping/matrixrate');
43
+
44
+ if ($zipRangeSet) {
45
+ # Want to search for postcodes within a range
46
+ $zipSearchString = $read->quoteInto(" AND dest_zip<=? ", $postcode).
47
+ $read->quoteInto(" AND dest_zip_to>=? )", $postcode);
48
+ } else {
49
+ $zipSearchString = $read->quoteInto(" AND ? LIKE dest_zip )", $postcode);
50
+ }
51
+
52
+ for ($j=0;$j<8;$j++)
53
+ {
54
+
55
+ $select = $read->select()->from($table);
56
+ switch($j) {
57
+ case 0:
58
+ $select->where(
59
+ $read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()).
60
+ $read->quoteInto(" AND dest_region_id=? ", $request->getDestRegionId()).
61
+ $read->quoteInto(" AND STRCMP(LOWER(dest_city),LOWER(?)) = 0 ", $request->getDestCity()).
62
+ # $read->quoteInto(" AND ? LIKE dest_zip ) ", $postcode)
63
+ $zipSearchString
64
+ );
65
+ break;
66
+ case 1:
67
+ $select->where(
68
+ $read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()).
69
+ $read->quoteInto(" AND dest_region_id=? AND dest_city=''", $request->getDestRegionId()).
70
+ $zipSearchString
71
+ );
72
+ break;
73
+ case 2:
74
+ $select->where(
75
+ $read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()).
76
+ $read->quoteInto(" AND dest_region_id=? ", $request->getDestRegionId()).
77
+ $read->quoteInto(" AND STRCMP(LOWER(dest_city),LOWER(?)) = 0 AND dest_zip='')", $request->getDestCity())
78
+ );
79
+ break;
80
+
81
+ case 3:
82
+ $select->where(
83
+ $read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()).
84
+ $read->quoteInto(" AND STRCMP(LOWER(dest_city),LOWER(?)) = 0 AND dest_region_id='0' AND dest_zip='') ", $request->getDestCity())
85
+ );
86
+ break;
87
+ case 4:
88
+ $select->where(
89
+ $read->quoteInto(" (dest_country_id=? AND dest_region_id='0' AND dest_city='' ", $request->getDestCountryId()).
90
+ # $read->quoteInto(" AND ? LIKE dest_zip ) ", $postcode)
91
+ $zipSearchString
92
+ );
93
+ break;
94
+ case 5:
95
+ $select->where(
96
+ $read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()).
97
+ $read->quoteInto(" AND dest_region_id=? AND dest_city='' AND dest_zip='') ", $request->getDestRegionId())
98
+ );
99
+ break;
100
+
101
+ case 6:
102
+ $select->where(
103
+ $read->quoteInto(" (dest_country_id=? AND dest_region_id='0' AND dest_city='' AND dest_zip='') ", $request->getDestCountryId())
104
+ );
105
+ break;
106
+
107
+ case 7:
108
+ $select->where(
109
+ " (dest_country_id='0' AND dest_region_id='0' AND dest_zip='')"
110
+ );
111
+ break;
112
+ }
113
+
114
+
115
+ if (is_array($request->getConditionName())) {
116
+ $i = 0;
117
+ foreach ($request->getConditionName() as $conditionName) {
118
+ if ($i == 0) {
119
+ $select->where('condition_name=?', $conditionName);
120
+ } else {
121
+ $select->orWhere('condition_name=?', $conditionName);
122
+ }
123
+ $select->where('condition_from_value<=?', $request->getData($conditionName));
124
+
125
+
126
+ $i++;
127
+ }
128
+ } else {
129
+ $select->where('condition_name=?', $request->getConditionName());
130
+ $select->where('condition_from_value<=?', $request->getData($request->getConditionName()));
131
+ $select->where('condition_to_value>=?', $request->getData($request->getConditionName()));
132
+ }
133
+
134
+ /* Mage::log(print_r($request,true));**/
135
+ $select->where('website_id=?', $request->getWebsiteId());
136
+
137
+ $select->order('dest_country_id DESC');
138
+ $select->order('dest_region_id DESC');
139
+ $select->order('dest_zip DESC');
140
+ $select->order('condition_from_value DESC');
141
+
142
+ /*
143
+ pdo has an issue. we cannot use bind
144
+ */
145
+
146
+ Mage::log(print_r($select,true));
147
+
148
+ $newdata=array();
149
+ $row = $read->fetchAll($select);
150
+ if (!empty($row))
151
+ {
152
+ // have found a result or found nothing and at end of list!
153
+ foreach ($row as $data) {
154
+ $newdata[]=$data;
155
+ }
156
+ break;
157
+ }
158
+ }
159
+ return $newdata;
160
+
161
+ }
162
+
163
+ public function uploadAndImport(Varien_Object $object)
164
+ {
165
+ $csvFile = $_FILES["groups"]["tmp_name"]["matrixrate"]["fields"]["import"]["value"];
166
+
167
+ if (!empty($csvFile)) {
168
+
169
+ $csv = trim(file_get_contents($csvFile));
170
+
171
+ $table = Mage::getSingleton('core/resource')->getTableName('matrixrate_shipping/matrixrate');
172
+
173
+ $websiteId = $object->getScopeId();
174
+ $websiteModel = Mage::app()->getWebsite($websiteId);
175
+ /*
176
+ getting condition name from post instead of the following commented logic
177
+ */
178
+
179
+ if (isset($_POST['groups']['matrixrate']['fields']['condition_name']['inherit'])) {
180
+ $conditionName = (string)Mage::getConfig()->getNode('default/carriers/matrixrate/condition_name');
181
+ } else {
182
+ $conditionName = $_POST['groups']['matrixrate']['fields']['condition_name']['value'];
183
+ }
184
+
185
+ // $conditionName = $object->getValue();
186
+ // if ($conditionName{0} == '_') {
187
+ // $conditionName = Mage::helper('core/string')->substr($conditionName, 1, strpos($conditionName, '/')-1);
188
+ // } else {
189
+ // $conditionName = $websiteModel->getConfig('carriers/matrixrate/condition_name');
190
+ // }
191
+ $conditionFullName = Mage::getModel('matrixrate_shipping/carrier_matrixrate')->getCode('condition_name_short', $conditionName);
192
+ if (!empty($csv)) {
193
+ $exceptions = array();
194
+ $csvLines = explode("\n", $csv);
195
+ $csvLine = array_shift($csvLines);
196
+ $csvLine = $this->_getCsvValues($csvLine);
197
+ if (count($csvLine) < 7) {
198
+ $exceptions[0] = Mage::helper('shipping')->__('Invalid Matrix Rates File Format');
199
+ }
200
+
201
+ $countryCodes = array();
202
+ $regionCodes = array();
203
+ foreach ($csvLines as $k=>$csvLine) {
204
+ $csvLine = $this->_getCsvValues($csvLine);
205
+ if (count($csvLine) > 0 && count($csvLine) < 7) {
206
+ $exceptions[0] = Mage::helper('shipping')->__('Invalid Matrix Rates File Format');
207
+ } else {
208
+ $countryCodes[] = $csvLine[0];
209
+ $regionCodes[] = $csvLine[1];
210
+ }
211
+ }
212
+
213
+ if (empty($exceptions)) {
214
+ $data = array();
215
+ $countryCodesToIds = array();
216
+ $regionCodesToIds = array();
217
+ $countryCodesIso2 = array();
218
+
219
+ $countryCollection = Mage::getResourceModel('directory/country_collection')->addCountryCodeFilter($countryCodes)->load();
220
+ foreach ($countryCollection->getItems() as $country) {
221
+ $countryCodesToIds[$country->getData('iso3_code')] = $country->getData('country_id');
222
+ $countryCodesToIds[$country->getData('iso2_code')] = $country->getData('country_id');
223
+ $countryCodesIso2[] = $country->getData('iso2_code');
224
+ }
225
+
226
+ $regionCollection = Mage::getResourceModel('directory/region_collection')
227
+ ->addRegionCodeFilter($regionCodes)
228
+ ->addCountryFilter($countryCodesIso2)
229
+ ->load();
230
+
231
+ foreach ($regionCollection->getItems() as $region) {
232
+ $regionCodesToIds[$countryCodesToIds[$region->getData('country_id')]][$region->getData('code')] = $region->getData('region_id');
233
+ }
234
+
235
+ foreach ($csvLines as $k=>$csvLine) {
236
+ $csvLine = $this->_getCsvValues($csvLine);
237
+
238
+ if (empty($countryCodesToIds) || !array_key_exists($csvLine[0], $countryCodesToIds)) {
239
+ $countryId = '0';
240
+ if ($csvLine[0] != '*' && $csvLine[0] != '') {
241
+ $exceptions[] = Mage::helper('shipping')->__('Invalid Country "%s" in the Row #%s', $csvLine[0], ($k+1));
242
+ }
243
+ } else {
244
+ $countryId = $countryCodesToIds[$csvLine[0]];
245
+ }
246
+
247
+ if (!isset($countryCodesToIds[$csvLine[0]])
248
+ || !isset($regionCodesToIds[$countryCodesToIds[$csvLine[0]]])
249
+ || !array_key_exists($csvLine[1], $regionCodesToIds[$countryCodesToIds[$csvLine[0]]])) {
250
+ $regionId = '0';
251
+ if ($csvLine[1] != '*' && $csvLine[1] != '') {
252
+ $exceptions[] = Mage::helper('shipping')->__('Invalid Region/State "%s" in the Row #%s', $csvLine[1], ($k+1));
253
+ }
254
+ } else {
255
+ $regionId = $regionCodesToIds[$countryCodesToIds[$csvLine[0]]][$csvLine[1]];
256
+ }
257
+
258
+ if (count($csvLine)==9) {
259
+ // we are searching for postcodes in ranges & including cities
260
+ if ($csvLine[2] == '*' || $csvLine[2] == '') {
261
+ $city = '';
262
+ } else {
263
+ $city = $csvLine[2];
264
+ }
265
+
266
+
267
+ if ($csvLine[3] == '*' || $csvLine[3] == '') {
268
+ $zip = '';
269
+ } else {
270
+ $zip = $csvLine[3];
271
+ }
272
+
273
+
274
+ if ($csvLine[4] == '*' || $csvLine[4] == '') {
275
+ $zip_to = '';
276
+ } else {
277
+ $zip_to = $csvLine[4];
278
+ }
279
+
280
+
281
+ if (!$this->_isPositiveDecimalNumber($csvLine[5]) || $csvLine[5] == '*' || $csvLine[5] == '') {
282
+ $exceptions[] = Mage::helper('shipping')->__('Invalid %s From "%s" in the Row #%s', $conditionFullName, $csvLine[5], ($k+1));
283
+ } else {
284
+ $csvLine[5] = (float)$csvLine[5];
285
+ }
286
+
287
+ if (!$this->_isPositiveDecimalNumber($csvLine[6])) {
288
+ $exceptions[] = Mage::helper('shipping')->__('Invalid %s To "%s" in the Row #%s', $conditionFullName, $csvLine[6], ($k+1));
289
+ } else {
290
+ $csvLine[6] = (float)$csvLine[6];
291
+ }
292
+
293
+
294
+ $data[] = array('website_id'=>$websiteId, 'dest_country_id'=>$countryId, 'dest_region_id'=>$regionId, 'dest_city'=>$city, 'dest_zip'=>$zip, 'dest_zip_to'=>$zip_to, 'condition_name'=>$conditionName, 'condition_from_value'=>$csvLine[5],'condition_to_value'=>$csvLine[6], 'price'=>$csvLine[7], 'delivery_type'=>$csvLine[8]);
295
+
296
+ }
297
+ else {
298
+
299
+ if ($csvLine[2] == '*' || $csvLine[2] == '') {
300
+ $zip = '';
301
+ } else {
302
+ $zip = $csvLine[2]."%";
303
+ }
304
+
305
+ $city='';
306
+ $zip_to = '';
307
+
308
+ if (!$this->_isPositiveDecimalNumber($csvLine[3]) || $csvLine[3] == '*' || $csvLine[3] == '') {
309
+ $exceptions[] = Mage::helper('shipping')->__('Invalid %s From "%s" in the Row #%s', $conditionFullName, $csvLine[3], ($k+1));
310
+ } else {
311
+ $csvLine[3] = (float)$csvLine[3];
312
+ }
313
+
314
+ if (!$this->_isPositiveDecimalNumber($csvLine[4])) {
315
+ $exceptions[] = Mage::helper('shipping')->__('Invalid %s To "%s" in the Row #%s', $conditionFullName, $csvLine[4], ($k+1));
316
+ } else {
317
+ $csvLine[4] = (float)$csvLine[4];
318
+ }
319
+ $data[] = array('website_id'=>$websiteId, 'dest_country_id'=>$countryId, 'dest_region_id'=>$regionId, 'dest_city'=>$city,'dest_zip'=>$zip,'dest_zip_to'=>$zip_to, 'condition_name'=>$conditionName, 'condition_from_value'=>$csvLine[3],'condition_to_value'=>$csvLine[4], 'price'=>$csvLine[5], 'delivery_type'=>$csvLine[6]);
320
+ }
321
+
322
+
323
+ $dataDetails[] = array('country'=>$csvLine[0], 'region'=>$csvLine[1]);
324
+
325
+ }
326
+ }
327
+ if (empty($exceptions)) {
328
+ $connection = $this->_getWriteAdapter();
329
+
330
+
331
+ $condition = array(
332
+ $connection->quoteInto('website_id = ?', $websiteId),
333
+ $connection->quoteInto('condition_name = ?', $conditionName),
334
+ );
335
+ $connection->delete($table, $condition);
336
+
337
+ foreach($data as $k=>$dataLine) {
338
+ try {
339
+ $connection->insert($table, $dataLine);
340
+ } catch (Exception $e) {
341
+ $exceptions[] = Mage::helper('shipping')->__('Duplicate Row #%s (Country "%s", Region/State "%s", City "%s", Zip From "%s", Zip To "%s", Delivery Type "%s", Value From "%s" and Value To "%s")', ($k+1), $dataDetails[$k]['country'], $dataDetails[$k]['region'], $dataLine['dest_city'], $dataLine['dest_zip'], $dataLine['dest_zip_to'], $dataLine['delivery_type'], $dataLine['condition_from_value'], $dataLine['condition_to_value']);
342
+ }
343
+ }
344
+ }
345
+ if (!empty($exceptions)) {
346
+ throw new Exception( "\n" . implode("\n", $exceptions) );
347
+ }
348
+ }
349
+ }
350
+ }
351
+
352
+ private function _getCsvValues($string, $separator=",")
353
+ {
354
+ $elements = explode($separator, trim($string));
355
+ for ($i = 0; $i < count($elements); $i++) {
356
+ $nquotes = substr_count($elements[$i], '"');
357
+ if ($nquotes %2 == 1) {
358
+ for ($j = $i+1; $j < count($elements); $j++) {
359
+ if (substr_count($elements[$j], '"') > 0) {
360
+ // Put the quoted string's pieces back together again
361
+ array_splice($elements, $i, $j-$i+1, implode($separator, array_slice($elements, $i, $j-$i+1)));
362
+ break;
363
+ }
364
+ }
365
+ }
366
+ if ($nquotes > 0) {
367
+ // Remove first and last quotes, then merge pairs of quotes
368
+ $qstr =& $elements[$i];
369
+ $qstr = substr_replace($qstr, '', strpos($qstr, '"'), 1);
370
+ $qstr = substr_replace($qstr, '', strrpos($qstr, '"'), 1);
371
+ $qstr = str_replace('""', '"', $qstr);
372
+ }
373
+ $elements[$i] = trim($elements[$i]);
374
+ }
375
+ return $elements;
376
+ }
377
+
378
+ private function _isPositiveDecimalNumber($n)
379
+ {
380
+ return preg_match ("/^[0-9]+(\.[0-9]*)?$/", $n);
381
+ }
382
+
383
+ }
package.xml CHANGED
@@ -1,15 +1,16 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Auctionmaid_Matrxrate</name>
4
- <version>2.0.2</version>
5
  <stability>stable</stability>
6
- <license uri="http://www.opensource.org/licenses/osl-3.0.php)">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Multiple Table Rates via CSV. Filter by country, region,city, zipcode. Numeric Postcode ranges, and enhanced pattern matching supported. Ability to exclude items from free shipping, and specify collection only.</summary>
10
  <description>Supports following:
11
 
12
- - multiple table rates
 
13
  - country, region, city, postcode filtering
14
  - partial postcode filtering, including pattern matching
15
  - numerical postcode ranges
@@ -17,9 +18,9 @@
17
  - collection only option</description>
18
  <notes>1 - The export csv option is currently disabled. This is so the extension does not conflict with the existing tablerates. There are no plans to resolve this - if you need to view the data look in phpmyadmin.</notes>
19
  <authors><author><name>Karen Baker</name><user>auto-converted</user><email>enquiries@auctionmaid.com</email></author></authors>
20
- <date>2009-03-14</date>
21
- <time>16:17:47</time>
22
- <contents><target name="magecommunity"><dir name="Auctionmaid"><dir name="Adminhtml"><dir name="Model"><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Shipping"><file name="Matrixrate.php" hash="3845daf2530ea28f4c1c9ef0896e4590"/></dir></dir><dir name="Source"><dir name="Shipping"><file name="Matrixrate.php" hash="bf0ab44901dacc3774a8afab91c08848"/></dir></dir></dir></dir></dir></dir><dir name="docs"><file name="AuctionMaid MatrixRate Shipping Module.pdf" hash="5046ebd65b62a3b66556d8efc8a9976a"/><file name="manual install.sql" hash="b1bf0f9b9597d64777a3704f8064b011"/></dir><dir name="example"><dir name="7-col"><file name="export_all_products.csv" hash="ee76a59cc041f80012dc547febaf5393"/><file name="tablerates - item tofrom.csv" hash="c21b4cbf21aefa5cc590ccd2ff073a04"/><file name="tablerates - price tofrom.csv" hash="834af0aeb1aa98abf91f637015f5e3ba"/><file name="tablerates - weight tofrom.csv" hash="c2d26d1097c6a6b1641353b548437421"/></dir><dir name="9-col"><file name="AusRanges.csv" hash="7884e9c2a15f495ce6a80091c38478b5"/><file name="weight postcode range.csv" hash="8b0f12598742f57a5444bfee16219603"/><file name="weight postcode starts with.csv" hash="b83d1c8f6798a42186a63116fc5575b3"/></dir></dir><dir name="Freeoptionalshipping"><dir name="etc"><file name="config.xml" hash="f450793ee1f015b5ea0d84ec910c3d76"/><file name="system.xml" hash="7f1fb48e01e1299bf449a769084bddbc"/></dir><dir name="Model"><dir name="Carrier"><file name="Freeoptionalshipping.php" hash="3faf036413d22a0dfc9edc7e12df7c1f"/></dir></dir></dir><dir name="Matrixrate"><dir name="etc"><file name="config.xml" hash="2fa5eb007a21cd14c06a51afe267a376"/><file name="system.xml" hash="cf1c8c2b472453da081c12cba74ef4d1"/></dir><dir name="Model"><dir name="Carrier"><file name="Matrixrate.php" hash="627c7cb77f0134a17794d2795bcdb632"/></dir><dir name="Mysql4"><dir name="Carrier"><file name="Matrixrate.php" hash="f59d28d7ab042a8634e12432846752c8"/><dir name="Matrixrate"><file name="Collection.php" hash="adf9282dce1467f2d47e68b4ecc49de9"/></dir></dir></dir></dir><dir name="sql"><dir name="matrixrate_setup"><file name="mysql4-install-1.0.5.php" hash="32ea533fd01276e78322ae734446dc93"/><file name="mysql4-install-2.0.0.php" hash="32ea533fd01276e78322ae734446dc93"/><file name="mysql4-install-2.0.1.php" hash="505940c2071753011f03a92a18fe6141"/><file name="mysql4-uninstall-2.0.0.php" hash="7efdd041b23194f1fbb9b0afc657bf1e"/><file name="mysql4-uninstall-2.0.1.php" hash="7efdd041b23194f1fbb9b0afc657bf1e"/><file name="mysql4-upgrade-2.0.0.php" hash="32ea533fd01276e78322ae734446dc93"/><file name="mysql4-upgrade-2.0.1.php" hash="505940c2071753011f03a92a18fe6141"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Auctionmaid_Freeoptionalshipping.xml" hash="a8bceecaca2402682f1713222ce23b4d"/><file name="Auctionmaid_Matrixrate.xml" hash="bde75a0463f7dc40affc8b2ce812ec91"/></dir></target></contents>
23
  <compatible/>
24
  <dependencies/>
25
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Auctionmaid_Matrxrate</name>
4
+ <version>2.0.3</version>
5
  <stability>stable</stability>
6
+ <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Multiple Table Rates via CSV. Filter by country, region,city, zipcode. Numeric Postcode ranges, and enhanced pattern matching supported. Ability to exclude items from free shipping, and specify collection only.</summary>
10
  <description>Supports following:
11
 
12
+ - multiple table rate via csv file
13
+ - filter on #items, weight, or price vs destination
14
  - country, region, city, postcode filtering
15
  - partial postcode filtering, including pattern matching
16
  - numerical postcode ranges
18
  - collection only option</description>
19
  <notes>1 - The export csv option is currently disabled. This is so the extension does not conflict with the existing tablerates. There are no plans to resolve this - if you need to view the data look in phpmyadmin.</notes>
20
  <authors><author><name>Karen Baker</name><user>auto-converted</user><email>enquiries@auctionmaid.com</email></author></authors>
21
+ <date>2009-04-20</date>
22
+ <time>01:11:58</time>
23
+ <contents><target name="magecommunity"><dir name="Auctionmaid"><dir name="Adminhtml"><dir name="Model"><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Shipping"><file name="Matrixrate.php" hash="3845daf2530ea28f4c1c9ef0896e4590"/></dir></dir><dir name="Source"><dir name="Shipping"><file name="Matrixrate.php" hash="bf0ab44901dacc3774a8afab91c08848"/></dir></dir></dir></dir></dir></dir><dir name="docs"><file name="AuctionMaid MatrixRate Shipping Module.pdf" hash="5046ebd65b62a3b66556d8efc8a9976a"/><file name="manual install.sql" hash="b1bf0f9b9597d64777a3704f8064b011"/></dir><dir name="example"><dir name="7-col"><file name="export_all_products.csv" hash="ee76a59cc041f80012dc547febaf5393"/><file name="tablerates - item tofrom.csv" hash="c21b4cbf21aefa5cc590ccd2ff073a04"/><file name="tablerates - price tofrom.csv" hash="834af0aeb1aa98abf91f637015f5e3ba"/><file name="tablerates - weight tofrom.csv" hash="c2d26d1097c6a6b1641353b548437421"/></dir><dir name="9-col"><file name="AusRanges.csv" hash="7884e9c2a15f495ce6a80091c38478b5"/><file name="weight postcode range.csv" hash="8b0f12598742f57a5444bfee16219603"/><file name="weight postcode starts with.csv" hash="b83d1c8f6798a42186a63116fc5575b3"/></dir></dir><dir name="Freeoptionalshipping"><dir name="etc"><file name="config.xml" hash="f450793ee1f015b5ea0d84ec910c3d76"/><file name="system.xml" hash="7f1fb48e01e1299bf449a769084bddbc"/></dir><dir name="Model"><dir name="Carrier"><file name="Freeoptionalshipping.php" hash="68128137adb9732cbcba61b1d8585cbb"/></dir></dir></dir><dir name="Matrixrate"><dir name="etc"><file name="config.xml" hash="2fa5eb007a21cd14c06a51afe267a376"/><file name="system.xml" hash="cf1c8c2b472453da081c12cba74ef4d1"/></dir><dir name="Model"><dir name="Carrier"><file name="Matrixrate.php" hash="627c7cb77f0134a17794d2795bcdb632"/></dir><dir name="Mysql4"><dir name="Carrier"><file name="Matrixrate.php" hash="6093b8a988ea5654d209dcd49171bcd3"/><dir name="Matrixrate"><file name="Collection.php" hash="adf9282dce1467f2d47e68b4ecc49de9"/></dir></dir></dir></dir><dir name="sql"><dir name="matrixrate_setup"><file name="mysql4-install-1.0.5.php" hash="32ea533fd01276e78322ae734446dc93"/><file name="mysql4-install-2.0.0.php" hash="32ea533fd01276e78322ae734446dc93"/><file name="mysql4-install-2.0.1.php" hash="505940c2071753011f03a92a18fe6141"/><file name="mysql4-uninstall-2.0.0.php" hash="7efdd041b23194f1fbb9b0afc657bf1e"/><file name="mysql4-uninstall-2.0.1.php" hash="7efdd041b23194f1fbb9b0afc657bf1e"/><file name="mysql4-upgrade-2.0.0.php" hash="32ea533fd01276e78322ae734446dc93"/><file name="mysql4-upgrade-2.0.1.php" hash="505940c2071753011f03a92a18fe6141"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Auctionmaid_Freeoptionalshipping.xml" hash="a8bceecaca2402682f1713222ce23b4d"/><file name="Auctionmaid_Matrixrate.xml" hash="bde75a0463f7dc40affc8b2ce812ec91"/></dir></target></contents>
24
  <compatible/>
25
  <dependencies/>
26
  </package>