CTX Feed – WooCommerce Product Feed Manager Plugin - Version 3.3.4

Version Description

(2020-03-10) = * Template: Separate template for Trovaprezzi.it * Fix: Dropdown on Facebook and Pinterest feed edit page. * Cleanup: Remove unused files * Improve: Performance improvement on merchant class * Improve: Add filters and context parameter with feed rules parsing.

Download this release

Release Info

Developer wahid0003
Plugin Icon 128x128 CTX Feed – WooCommerce Product Feed Manager Plugin
Version 3.3.4
Comparing to
See all releases

Code changes from version 3.3.3 to 3.3.4

README.txt CHANGED
@@ -5,7 +5,7 @@ Tags:product feed,woocommerce product feed,google shopping feed,google shopping,
5
  Requires at least: 3.6
6
  Tested Up To: 5.3.2
7
  Requires PHP: 5.6
8
- Stable tag: 3.3.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -305,6 +305,13 @@ Using pro version:
305
 
306
  == Changelog ==
307
 
 
 
 
 
 
 
 
308
  = 3.3.3 (2020-03-04) =
309
  * Feature: Campaign URL Builder
310
  * Fix: Duplicate feed config on cron update.
5
  Requires at least: 3.6
6
  Tested Up To: 5.3.2
7
  Requires PHP: 5.6
8
+ Stable tag: 3.3.4
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
305
 
306
  == Changelog ==
307
 
308
+ = 3.3.4 (2020-03-10) =
309
+ * Template: Separate template for Trovaprezzi.it
310
+ * Fix: Dropdown on Facebook and Pinterest feed edit page.
311
+ * Cleanup: Remove unused files
312
+ * Improve: Performance improvement on merchant class
313
+ * Improve: Add filters and context parameter with feed rules parsing.
314
+
315
  = 3.3.3 (2020-03-04) =
316
  * Feature: Campaign URL Builder
317
  * Fix: Duplicate feed config on cron update.
admin/class-woo-feed-admin.php CHANGED
@@ -137,6 +137,7 @@ class Woo_Feed_Admin {
137
  'is_feed_add' => isset( $_GET['page'] ) && 'webappick-new-feed' == $_GET['page'], // phpcs:ignore WordPress.Security.NonceVerification.Recommended
138
  'na' => esc_html__( 'N/A', 'woo-feed' ),
139
  'regenerate' => esc_html__( 'Generating...', 'woo-feed' ),
 
140
  'form' => array(
141
  'loading_tmpl' => esc_html__( 'Loading Template...', 'woo-feed' ),
142
  'generate' => esc_html__( 'Delivering Configuration...', 'woo-feed' ),
@@ -156,7 +157,7 @@ class Woo_Feed_Admin {
156
 
157
  if ( 'woo-feed_page_webappick-feed-pro-vs-free' === $hook ) {
158
  wp_register_script( 'jquery-slick', plugin_dir_url( __FILE__ ) . 'js/slick.js', array( 'jquery' ), $this->version, false );
159
- wp_register_script( 'feed-pro', plugin_dir_url( __FILE__ ) . 'js/pro.js', [ $this->woo_feed, 'jquery-slick' ], $this->version, false );
160
  wp_enqueue_script( 'feed-pro' );
161
  }
162
  }
137
  'is_feed_add' => isset( $_GET['page'] ) && 'webappick-new-feed' == $_GET['page'], // phpcs:ignore WordPress.Security.NonceVerification.Recommended
138
  'na' => esc_html__( 'N/A', 'woo-feed' ),
139
  'regenerate' => esc_html__( 'Generating...', 'woo-feed' ),
140
+ 'learn_more' => esc_html__( 'Learn More..', 'woo-feed' ),
141
  'form' => array(
142
  'loading_tmpl' => esc_html__( 'Loading Template...', 'woo-feed' ),
143
  'generate' => esc_html__( 'Delivering Configuration...', 'woo-feed' ),
157
 
158
  if ( 'woo-feed_page_webappick-feed-pro-vs-free' === $hook ) {
159
  wp_register_script( 'jquery-slick', plugin_dir_url( __FILE__ ) . 'js/slick.js', array( 'jquery' ), $this->version, false );
160
+ wp_register_script( 'feed-pro', plugin_dir_url( __FILE__ ) . 'js/woo-feed-admin-pro.js', [ $this->woo_feed, 'jquery-slick' ], $this->version, false );
161
  wp_enqueue_script( 'feed-pro' );
162
  }
163
  }
admin/css/woo-feed-admin.css CHANGED
@@ -94,10 +94,6 @@
94
  width: 200px;
95
  }
96
 
97
- .typeahead {
98
- z-index: 1051;
99
- }
100
-
101
  .error {
102
  color: red;
103
  }
94
  width: 200px;
95
  }
96
 
 
 
 
 
97
  .error {
98
  color: red;
99
  }
admin/js/jquery.cookie.js DELETED
@@ -1,96 +0,0 @@
1
- /*!
2
- * jQuery Cookie Plugin v1.3.1
3
- * https://github.com/carhartl/jquery-cookie
4
- *
5
- * Copyright 2013 Klaus Hartl
6
- * Released under the MIT license
7
- */
8
- (function (factory) {
9
- if (typeof define === 'function' && define.amd) {
10
- // AMD. Register as anonymous module.
11
- define(['jquery'], factory);
12
- } else {
13
- // Browser globals.
14
- factory(jQuery);
15
- }
16
- }(function ($) {
17
-
18
- var pluses = /\+/g;
19
-
20
- function decode(s) {
21
- if (config.raw) {
22
- return s;
23
- }
24
- return decodeURIComponent(s.replace(pluses, ' '));
25
- }
26
-
27
- function decodeAndParse(s) {
28
- if (s.indexOf('"') === 0) {
29
- // This is a quoted cookie as according to RFC2068, unescape...
30
- s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
31
- }
32
-
33
- s = decode(s);
34
-
35
- try {
36
- return config.json ? JSON.parse(s) : s;
37
- } catch(e) {}
38
- }
39
-
40
- var config = $.cookie = function (key, value, options) {
41
-
42
- // Write
43
- if (value !== undefined) {
44
- options = $.extend({}, config.defaults, options);
45
-
46
- if (typeof options.expires === 'number') {
47
- var days = options.expires, t = options.expires = new Date();
48
- t.setDate(t.getDate() + days);
49
- }
50
-
51
- value = config.json ? JSON.stringify(value) : String(value);
52
-
53
- return (document.cookie = [
54
- config.raw ? key : encodeURIComponent(key),
55
- '=',
56
- config.raw ? value : encodeURIComponent(value),
57
- options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
58
- options.path ? '; path=' + options.path : '',
59
- options.domain ? '; domain=' + options.domain : '',
60
- options.secure ? '; secure' : ''
61
- ].join(''));
62
- }
63
-
64
- // Read
65
- var cookies = document.cookie.split('; ');
66
- var result = key ? undefined : {};
67
- for (var i = 0, l = cookies.length; i < l; i++) {
68
- var parts = cookies[i].split('=');
69
- var name = decode(parts.shift());
70
- var cookie = parts.join('=');
71
-
72
- if (key && key === name) {
73
- result = decodeAndParse(cookie);
74
- break;
75
- }
76
-
77
- if (!key) {
78
- result[name] = decodeAndParse(cookie);
79
- }
80
- }
81
-
82
- return result;
83
- };
84
-
85
- config.defaults = {};
86
-
87
- $.removeCookie = function (key, options) {
88
- if ($.cookie(key) !== undefined) {
89
- // Must not alter options, thus extending a fresh object...
90
- $.cookie(key, '', $.extend({}, options, { expires: -1 }));
91
- return true;
92
- }
93
- return false;
94
- };
95
-
96
- }));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/js/typeahead.js DELETED
@@ -1,484 +0,0 @@
1
- /* =============================================================
2
- * bootstrap3-typeahead.js v3.1.0
3
- * https://github.com/bassjobsen/Bootstrap-3-Typeahead
4
- * =============================================================
5
- * Original written by @mdo and @fat
6
- * =============================================================
7
- * Copyright 2014 Bass Jobsen @bassjobsen
8
- *
9
- * Licensed under the Apache License, Version 2.0 (the 'License');
10
- * you may not use this file except in compliance with the License.
11
- * You may obtain a copy of the License at
12
- *
13
- * http://www.apache.org/licenses/LICENSE-2.0
14
- *
15
- * Unless required by applicable law or agreed to in writing, software
16
- * distributed under the License is distributed on an 'AS IS' BASIS,
17
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
- * See the License for the specific language governing permissions and
19
- * limitations under the License.
20
- * ============================================================ */
21
-
22
-
23
- (function (root, factory) {
24
-
25
- 'use strict';
26
-
27
- // CommonJS module is defined
28
- if (typeof module !== 'undefined' && module.exports) {
29
- module.exports = factory(require('jquery'));
30
- }
31
- // AMD module is defined
32
- else if (typeof define === 'function' && define.amd) {
33
- define(['jquery'], function ($) {
34
- return factory ($);
35
- });
36
- } else {
37
- factory(root.jQuery);
38
- }
39
-
40
- }(this, function ($) {
41
-
42
- 'use strict';
43
- // jshint laxcomma: true
44
-
45
-
46
- /* TYPEAHEAD PUBLIC CLASS DEFINITION
47
- * ================================= */
48
-
49
- var Typeahead = function (element, options) {
50
- this.$element = $(element);
51
- this.options = $.extend({}, $.fn.typeahead.defaults, options);
52
- this.matcher = this.options.matcher || this.matcher;
53
- this.sorter = this.options.sorter || this.sorter;
54
- this.select = this.options.select || this.select;
55
- this.autoSelect = typeof this.options.autoSelect == 'boolean' ? this.options.autoSelect : true;
56
- this.highlighter = this.options.highlighter || this.highlighter;
57
- this.render = this.options.render || this.render;
58
- this.updater = this.options.updater || this.updater;
59
- this.displayText = this.options.displayText || this.displayText;
60
- this.source = this.options.source;
61
- this.delay = this.options.delay;
62
- this.$menu = $(this.options.menu);
63
- this.$appendTo = this.options.appendTo ? $(this.options.appendTo) : null;
64
- this.shown = false;
65
- this.listen();
66
- this.showHintOnFocus = typeof this.options.showHintOnFocus == 'boolean' ? this.options.showHintOnFocus : false;
67
- this.afterSelect = this.options.afterSelect;
68
- this.addItem = false;
69
- };
70
-
71
- Typeahead.prototype = {
72
-
73
- constructor: Typeahead,
74
-
75
- select: function () {
76
- var val = this.$menu.find('.active').data('value');
77
- this.$element.data('active', val);
78
- if(this.autoSelect || val) {
79
- var newVal = this.updater(val);
80
- // Updater can be set to any random functions via "options" parameter in constructor above.
81
- // Add null check for cases when upadter returns void or undefined.
82
- if (!newVal) {
83
- newVal = "";
84
- }
85
- this.$element
86
- .val(this.displayText(newVal) || newVal)
87
- .change();
88
- this.afterSelect(newVal);
89
- }
90
- return this.hide();
91
- },
92
-
93
- updater: function (item) {
94
- return item;
95
- },
96
-
97
- setSource: function (source) {
98
- this.source = source;
99
- },
100
-
101
- show: function () {
102
- var pos = $.extend({}, this.$element.position(), {
103
- height: this.$element[0].offsetHeight
104
- }), scrollHeight;
105
-
106
- scrollHeight = typeof this.options.scrollHeight == 'function' ?
107
- this.options.scrollHeight.call() :
108
- this.options.scrollHeight;
109
-
110
- var element;
111
- if (this.shown) {
112
- element = this.$menu;
113
- } else if (this.$appendTo) {
114
- element = this.$menu.appendTo(this.$appendTo);
115
- } else {
116
- element = this.$menu.insertAfter(this.$element);
117
- }
118
- element.css({
119
- top: pos.top + pos.height + scrollHeight
120
- , left: pos.left
121
- })
122
- .show();
123
-
124
- this.shown = true;
125
- return this;
126
- },
127
-
128
- hide: function () {
129
- this.$menu.hide();
130
- this.shown = false;
131
- return this;
132
- },
133
-
134
- lookup: function (query) {
135
- var items;
136
- if (typeof(query) != 'undefined' && query !== null) {
137
- this.query = query;
138
- } else {
139
- this.query = this.$element.val() || '';
140
- }
141
-
142
- if (this.query.length < this.options.minLength) {
143
- return this.shown ? this.hide() : this;
144
- }
145
-
146
- var worker = $.proxy(function() {
147
-
148
- if($.isFunction(this.source)) this.source(this.query, $.proxy(this.process, this));
149
- else if (this.source) {
150
- this.process(this.source);
151
- }
152
- }, this);
153
-
154
- clearTimeout(this.lookupWorker);
155
- this.lookupWorker = setTimeout(worker, this.delay);
156
- },
157
-
158
- process: function (items) {
159
- var that = this;
160
-
161
- items = $.grep(items, function (item) {
162
- return that.matcher(item);
163
- });
164
-
165
- items = this.sorter(items);
166
-
167
- if (!items.length && !this.options.addItem) {
168
- return this.shown ? this.hide() : this;
169
- }
170
-
171
- if (items.length > 0) {
172
- this.$element.data('active', items[0]);
173
- } else {
174
- this.$element.data('active', null);
175
- }
176
-
177
- // Add item
178
- if (this.options.addItem){
179
- items.push(this.options.addItem);
180
- }
181
-
182
- if (this.options.items == 'all') {
183
- return this.render(items).show();
184
- } else {
185
- return this.render(items.slice(0, this.options.items)).show();
186
- }
187
- },
188
-
189
- matcher: function (item) {
190
- var it = this.displayText(item);
191
- return ~it.toLowerCase().indexOf(this.query.toLowerCase());
192
- },
193
-
194
- sorter: function (items) {
195
- var beginswith = []
196
- , caseSensitive = []
197
- , caseInsensitive = []
198
- , item;
199
-
200
- while ((item = items.shift())) {
201
- var it = this.displayText(item);
202
- if (!it.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item);
203
- else if (~it.indexOf(this.query)) caseSensitive.push(item);
204
- else caseInsensitive.push(item);
205
- }
206
-
207
- return beginswith.concat(caseSensitive, caseInsensitive);
208
- },
209
-
210
- highlighter: function (item) {
211
- var html = $('<div></div>');
212
- var query = this.query;
213
- var i = item.toLowerCase().indexOf(query.toLowerCase());
214
- var len, leftPart, middlePart, rightPart, strong;
215
- len = query.length;
216
- if(len === 0){
217
- return html.text(item).html();
218
- }
219
- while (i > -1) {
220
- leftPart = item.substr(0, i);
221
- middlePart = item.substr(i, len);
222
- rightPart = item.substr(i + len);
223
- strong = $('<strong></strong>').text(middlePart);
224
- html
225
- .append(document.createTextNode(leftPart))
226
- .append(strong);
227
- item = rightPart;
228
- i = item.toLowerCase().indexOf(query.toLowerCase());
229
- }
230
- return html.append(document.createTextNode(item)).html();
231
- },
232
-
233
- render: function (items) {
234
- var that = this;
235
- var self = this;
236
- var activeFound = false;
237
- items = $(items).map(function (i, item) {
238
- var text = self.displayText(item);
239
- i = $(that.options.item).data('value', item);
240
- i.find('a').html(that.highlighter(text));
241
- if (text == self.$element.val()) {
242
- i.addClass('active');
243
- self.$element.data('active', item);
244
- activeFound = true;
245
- }
246
- return i[0];
247
- });
248
-
249
- if (this.autoSelect && !activeFound) {
250
- items.first().addClass('active');
251
- this.$element.data('active', items.first().data('value'));
252
- }
253
- this.$menu.html(items);
254
- return this;
255
- },
256
-
257
- displayText: function(item) {
258
- return typeof item !== 'undefined' && typeof item.name != 'undefined' && item.name || item;
259
- },
260
-
261
- next: function (event) {
262
- var active = this.$menu.find('.active').removeClass('active')
263
- , next = active.next();
264
-
265
- if (!next.length) {
266
- next = $(this.$menu.find('li')[0]);
267
- }
268
-
269
- next.addClass('active');
270
- },
271
-
272
- prev: function (event) {
273
- var active = this.$menu.find('.active').removeClass('active')
274
- , prev = active.prev();
275
-
276
- if (!prev.length) {
277
- prev = this.$menu.find('li').last();
278
- }
279
-
280
- prev.addClass('active');
281
- },
282
-
283
- listen: function () {
284
- this.$element
285
- .on('focus', $.proxy(this.focus, this))
286
- .on('blur', $.proxy(this.blur, this))
287
- .on('keypress', $.proxy(this.keypress, this))
288
- .on('keyup', $.proxy(this.keyup, this));
289
-
290
- if (this.eventSupported('keydown')) {
291
- this.$element.on('keydown', $.proxy(this.keydown, this));
292
- }
293
-
294
- this.$menu
295
- .on('click', $.proxy(this.click, this))
296
- .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
297
- .on('mouseleave', 'li', $.proxy(this.mouseleave, this));
298
- },
299
-
300
- destroy : function () {
301
- this.$element.data('typeahead',null);
302
- this.$element.data('active',null);
303
- this.$element
304
- .off('focus')
305
- .off('blur')
306
- .off('keypress')
307
- .off('keyup');
308
-
309
- if (this.eventSupported('keydown')) {
310
- this.$element.off('keydown');
311
- }
312
-
313
- this.$menu.remove();
314
- },
315
-
316
- eventSupported: function(eventName) {
317
- var isSupported = eventName in this.$element;
318
- if (!isSupported) {
319
- this.$element.setAttribute(eventName, 'return;');
320
- isSupported = typeof this.$element[eventName] === 'function';
321
- }
322
- return isSupported;
323
- },
324
-
325
- move: function (e) {
326
- if (!this.shown) return;
327
-
328
- switch(e.keyCode) {
329
- case 9: // tab
330
- case 13: // enter
331
- case 27: // escape
332
- e.preventDefault();
333
- break;
334
-
335
- case 38: // up arrow
336
- // with the shiftKey (this is actually the left parenthesis)
337
- if (e.shiftKey) return;
338
- e.preventDefault();
339
- this.prev();
340
- break;
341
-
342
- case 40: // down arrow
343
- // with the shiftKey (this is actually the right parenthesis)
344
- if (e.shiftKey) return;
345
- e.preventDefault();
346
- this.next();
347
- break;
348
- }
349
- },
350
-
351
- keydown: function (e) {
352
- this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]);
353
- if (!this.shown && e.keyCode == 40) {
354
- this.lookup();
355
- } else {
356
- this.move(e);
357
- }
358
- },
359
-
360
- keypress: function (e) {
361
- if (this.suppressKeyPressRepeat) return;
362
- this.move(e);
363
- },
364
-
365
- keyup: function (e) {
366
- switch(e.keyCode) {
367
- case 40: // down arrow
368
- case 38: // up arrow
369
- case 16: // shift
370
- case 17: // ctrl
371
- case 18: // alt
372
- break;
373
-
374
- case 9: // tab
375
- case 13: // enter
376
- if (!this.shown) return;
377
- this.select();
378
- break;
379
-
380
- case 27: // escape
381
- if (!this.shown) return;
382
- this.hide();
383
- break;
384
- default:
385
- this.lookup();
386
- }
387
-
388
- e.preventDefault();
389
- },
390
-
391
- focus: function (e) {
392
- if (!this.focused) {
393
- this.focused = true;
394
- if (this.options.showHintOnFocus) {
395
- this.lookup('');
396
- }
397
- }
398
- },
399
-
400
- blur: function (e) {
401
- this.focused = false;
402
- if (!this.mousedover && this.shown) this.hide();
403
- },
404
-
405
- click: function (e) {
406
- e.preventDefault();
407
- this.select();
408
- this.$element.focus();
409
- },
410
-
411
- mouseenter: function (e) {
412
- this.mousedover = true;
413
- this.$menu.find('.active').removeClass('active');
414
- $(e.currentTarget).addClass('active');
415
- },
416
-
417
- mouseleave: function (e) {
418
- this.mousedover = false;
419
- if (!this.focused && this.shown) this.hide();
420
- }
421
-
422
- };
423
-
424
-
425
- /* TYPEAHEAD PLUGIN DEFINITION
426
- * =========================== */
427
-
428
- var old = $.fn.typeahead;
429
-
430
- $.fn.typeahead = function (option) {
431
- var arg = arguments;
432
- if (typeof option == 'string' && option == 'getActive') {
433
- return this.data('active');
434
- }
435
- return this.each(function () {
436
- var $this = $(this)
437
- , data = $this.data('typeahead')
438
- , options = typeof option == 'object' && option;
439
- if (!data) $this.data('typeahead', (data = new Typeahead(this, options)));
440
- if (typeof option == 'string') {
441
- if (arg.length > 1) {
442
- data[option].apply(data, Array.prototype.slice.call(arg ,1));
443
- } else {
444
- data[option]();
445
- }
446
- }
447
- });
448
- };
449
-
450
- $.fn.typeahead.defaults = {
451
- source: []
452
- , items: 8
453
- , menu: '<ul class="typeahead dropdown-menu" role="listbox"></ul>'
454
- , item: '<li><a class="dropdown-item" href="#" role="option"></a></li>'
455
- , minLength: 1
456
- , scrollHeight: 0
457
- , autoSelect: true
458
- , afterSelect: $.noop
459
- , addItem: false
460
- , delay: 0
461
- };
462
-
463
- $.fn.typeahead.Constructor = Typeahead;
464
-
465
-
466
- /* TYPEAHEAD NO CONFLICT
467
- * =================== */
468
-
469
- $.fn.typeahead.noConflict = function () {
470
- $.fn.typeahead = old;
471
- return this;
472
- };
473
-
474
-
475
- /* TYPEAHEAD DATA-API
476
- * ================== */
477
-
478
- $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
479
- var $this = $(this);
480
- if ($this.data('typeahead')) return;
481
- $this.typeahead($this.data());
482
- });
483
-
484
- }));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/js/{pro.js → woo-feed-admin-pro.js} RENAMED
File without changes
admin/js/woo-feed-admin.js CHANGED
@@ -1,4 +1,11 @@
1
- // noinspection JSUnresolvedVariable,ES6ConvertVarToLetConst,SpellCheckingInspection
 
 
 
 
 
 
 
2
  (function ($, window, document, wpAjax, opts) {
3
  "use strict";
4
  /**
@@ -14,7 +21,11 @@
14
 
15
  /**
16
  * disable element utility
 
17
  * @since 3.1.9
 
 
 
18
  */
19
  $.fn.disabled = function( status ) {
20
  $(this).each( function(){
@@ -28,27 +39,32 @@
28
  } );
29
  return self; // method chaining
30
  };
 
 
 
31
  $.fn.isDisabled = function() {
32
  // noinspection ES6ConvertVarToLetConst
33
  var self = $(this), prop = 'disabled';
34
  return ( typeof( self.prop( prop ) ) !== 'undefined' ) ? self.prop( prop ) : self.hasClass( prop );
35
  };
36
 
 
 
 
 
37
  function clearTooltip( event ) {
38
- // noinspection SpellCheckingInspection
39
  $(event.currentTarget).removeClass( function (index, className) {
40
  return (className.match (/\btooltipped-\S+/g) || []).join(' ');
41
  } ).removeClass('tooltipped').removeAttr('aria-label');
42
  }
43
 
44
  function showTooltip( elem, msg ) {
45
- // noinspection SpellCheckingInspection
46
  $( elem ).addClass('tooltipped tooltipped-s').attr( 'aria-label', msg );
47
  }
48
 
49
  function fallbackMessage(action) {
50
  // noinspection ES6ConvertVarToLetConst
51
- var actionMsg = '', actionKey = (action === 'cut' ? 'X' : 'C');
52
  if (/iPhone|iPad/i.test(navigator.userAgent)) {
53
  actionMsg = 'No support :(';
54
  } else if (/Mac/i.test(navigator.userAgent)) {
@@ -61,7 +77,7 @@
61
 
62
  /* global ajaxurl, wpAjax, postboxes, pagenow, alert, deleteUserSetting, typenow, adminpage, thousandsSeparator, decimalPoint, isRtl */
63
  $(window).load(function () {
64
- // noinspection ES6ConvertVarToLetConst,SpellCheckingInspection
65
  var $copyBtn = $('.toClipboard'), clipboard,
66
  googleCategories,
67
  helper = {
@@ -81,11 +97,15 @@
81
  }
82
  }, // helper functions
83
  feedEditor = {
 
 
 
 
84
  init: function() {
85
  // noinspection ES6ConvertVarToLetConst
86
  var outOfStockVisibilityRow = $('.out-of-stock-visibility');
87
  // Initialize Table Sorting
88
- // noinspection SpellCheckingInspection,JSUnresolvedFunction
89
  $('.sorted_table').sortablesd({
90
  containerSelector: 'table',
91
  itemPath: '> tbody',
@@ -93,13 +113,13 @@
93
  handle: 'i.wf_sortedtable',
94
  placeholder: '<tr class="placeholder"><td colspan="9"></td></tr>',
95
  });
96
- $('.selectize').each(function(){
97
  // noinspection ES6ConvertVarToLetConst
98
  var self = $(this), plugins = self.data('plugins');
99
  self.selectize({
100
- plugins: plugins ? plugins.split(',') : [],//['remove_button'],
101
  render: { item: helper.selectize_render_item, }
102
- })
103
  });
104
  $('[name="is_outOfStock"], [name="product_visibility"]').on( 'change', function(){
105
  if( $('[name="is_outOfStock"]:checked').val() === 'n' && $('[name="product_visibility"]:checked').val() === '1' ) {
@@ -133,15 +153,17 @@
133
  if( valueColumn.find('select.selectize').length === 0 ) {
134
  // noinspection ES6ConvertVarToLetConst
135
  var selectizeOpts = {
136
- options: googleCategories,
137
- config: { render: { item: helper.selectize_render_item, } },
138
- },
139
- select = valueColumn.find('.wf_attributes select');
140
  valueColumn.find('input.wf_default').remove();
141
  valueColumn.append('<span class="wf_default wf_attributes"><select name="default[]" class="selectize"></select></span>');
142
  valueColumn.find('.wf_attributes select').selectize({render: {item: helper.selectize_render_item,}});
143
- valueColumn.append('<span style="font-size:x-small;"><a style="color: red" href="http://webappick.helpscoutdocs.com/article/19-how-to-map-store-category-with-merchant-category" target="_blank">Learn More..</a></span>');
 
144
  valueColumn.append('<span class="spinner is-active" style="margin: 0;"></span>');
 
 
145
  if( ! googleCategories ) {
146
  wpAjax.send( 'get_google_categories', {
147
  type: 'GET',
@@ -168,12 +190,20 @@
168
  }
169
  } );
170
  },
 
 
 
 
 
 
 
171
  renderSelectize: function( el, config ) {
172
  // noinspection ES6ConvertVarToLetConst
173
  var c = $.extend({}, {
174
  options: {},
175
  settings: {render: {item: helper.selectize_render_item,}}
176
  }, config);
 
177
  el.selectize(c.settings);
178
  // noinspection ES6ConvertVarToLetConst
179
  var s = el[0].selectize;
@@ -189,12 +219,18 @@
189
  s.refreshOptions( true );
190
  return el;
191
  },
 
 
 
 
 
 
192
  renderMerchantInfo: function( merchantInfo, feedType, r ) {
193
  // noinspection ES6ConvertVarToLetConst
194
  for( var k in r ) {
195
  if( r.hasOwnProperty( k ) ) {
196
  merchantInfo.find( '.merchant-info-section.' + k + ' .data' ).html( r[k] ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
197
- if( k === 'feed_file_type' ) {
198
  // noinspection ES6ConvertVarToLetConst,JSUnresolvedVariable
199
  var types = r[k].split(",").map(function(t){return t.trim().toLowerCase()}).filter(function(t){
200
  // noinspection JSUnresolvedVariable
@@ -216,9 +252,36 @@
216
  feedType.trigger('change');
217
  feedType.parent().find('.spinner').removeClass( 'is-active' );
218
  },
 
 
 
 
 
219
  renderMerchantTemplate: function( feedForm, r ) {
220
- // insert server response
221
- feedForm.html( r ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  feedEditor.init();
223
  }
224
  }, // Feed Editor Table
@@ -259,57 +322,40 @@
259
 
260
  // XML Feed Wrapper
261
  $('#feedType,#provider').on('change', function () {
262
- // noinspection ES6ConvertVarToLetConst,SpellCheckingInspection
263
- var type = $('#feedType').val(), provider = $('#provider').val(), itemWrapper = $('.itemWrapper'), wf_csvtxt = $('.wf_csvtxt');
264
  // noinspection JSUnresolvedVariable
265
  if ( type === 'xml' ) {
266
- itemWrapper.show(); wf_csvtxt.hide();
 
267
  } else if ( type === 'csv' || type === 'txt' ) {
268
- itemWrapper.hide(); wf_csvtxt.show();
 
269
  } else if ( type === '' ) {
270
- itemWrapper.hide(); wf_csvtxt.hide();
 
271
  }
272
- if( type !== "" && helper.in_array( provider, ['google', 'facebook'] ) ) itemWrapper.hide();
273
- // noinspection SpellCheckingInspection
274
- if( provider === 'criteo' ) {
275
- itemWrapper.find('input[name="itemsWrapper"]').val("channel");
276
- itemWrapper.find('input[name="itemWrapper"]').val("item");
277
  }
278
  }).trigger( 'change' );
279
  // Tooltip only Text
280
  {
281
- // noinspection SpellCheckingInspection
282
  $('.wfmasterTooltip').hover(function () {
283
  // Hover over code
284
- // noinspection ES6ConvertVarToLetConst,SpellCheckingInspection
285
  var title = $(this).attr('wftitle');
286
- // noinspection SpellCheckingInspection
287
  $(this).data('tipText', title).removeAttr('wftitle');
288
- // noinspection SpellCheckingInspection
289
  $('<p class="wftooltip"></p>').text(title).appendTo('body').fadeIn('slow');
290
  }, function () {
291
  // Hover out code
292
- // noinspection SpellCheckingInspection
293
  $(this).attr('wftitle', $(this).data('tipText'));
294
- // noinspection SpellCheckingInspection
295
  $('.wftooltip').remove();
296
  }).mousemove(function (e) {
297
- // noinspection ES6ConvertVarToLetConst,SpellCheckingInspection
298
- var mousex = e.pageX + 20, //Get X coordinates
299
- mousey = e.pageY + 10; //Get Y coordinates
300
- // noinspection SpellCheckingInspection
301
- $('.wftooltip').css({top: mousey, left: mousex})
302
  });
303
  }
304
 
305
- // Add New Condition for Filter
306
- $(document).on('click', '#wf_newFilter', function () {
307
- $("#table-advanced-filter tbody tr:eq(0)").show().clone().find('input').val('').end().find('select').val('').end().insertAfter("#table-advanced-filter tbody tr:last");
308
- // noinspection SpellCheckingInspection
309
- $(".fsrow:gt(2)").prop('disabled', false);
310
- $(".daRow:eq(0)").hide();
311
- });
312
-
313
  // Attribute type selection for dynamic attribute
314
  $(document).on('change', '.dType', function () {
315
  // noinspection ES6ConvertVarToLetConst
@@ -364,13 +410,11 @@
364
  // Feed Generating form validation
365
  $(this).validate();
366
  if ($(this).valid()) {
367
- // noinspection SpellCheckingInspection
368
  $(".makeFeedResponse").show().html( '<b style="color: darkblue;"><i class="dashicons dashicons-sos wpf_spin"></i> ' + opts.form.generate + '</b>' ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html, WordPressVIPMinimum.JS.StringConcat.Found
369
  }
370
  });
371
 
372
  // Generate Update Feed Form Submit
373
- // noinspection SpellCheckingInspection
374
  $(".updatefeed").validate();
375
  $('[name="save_feed_config"]').on( 'click', function( e ) {
376
  e.preventDefault();
@@ -380,7 +424,6 @@
380
  // Feed Generating form validation
381
  $(this).validate();
382
  if ( $(this).valid() ) {
383
- // noinspection SpellCheckingInspection
384
  $(".makeFeedResponse").show().html( '<b style="color: darkblue;"><i class="dashicons dashicons-sos wpf_spin"></i> ' + ( data && data.save ? opts.form.save : opts.form.generate ) + '</b>' ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html, WordPressVIPMinimum.JS.StringConcat.Found
385
  }
386
  });
@@ -407,7 +450,7 @@
407
  } else {
408
  wpAjax.send( 'woo_feed_get_merchant_info', {
409
  type: 'GET',
410
- data: { nonce: opts.nonce, action: "get_feed_merchant", provider: merchant }
411
  } ).then( function( r ) {
412
  merchantInfoCache[merchant] = r;
413
  feedEditor.renderMerchantInfo( merchantInfo, feedType, r );
@@ -419,7 +462,7 @@
419
  feedEditor.renderMerchantTemplate( feedForm, merchantTemplateCache[merchant] );
420
  } else {
421
  wpAjax.post( 'get_feed_merchant', {
422
- _ajax_nonce: opts.nonce, action: "get_feed_merchant", merchant: merchant
423
  }, )
424
  .then( function( r ) {
425
  merchantTemplateCache[merchant] = r;
@@ -444,7 +487,6 @@
444
  });
445
 
446
  //Checking whether php ssh2 extension is added or not
447
- // noinspection SpellCheckingInspection
448
  $(document).on('change', '.ftporsftp', function () {
449
  // noinspection ES6ConvertVarToLetConst
450
  var server = $(this).val(), status = $('.ssh2_status');
1
+ // noinspection JSUnresolvedVariable
2
+ /**!
3
+ * WooFeed Scripts
4
+ * @version 3.3.6
5
+ * @package WooFeed
6
+ * @copyright 2020 WebAppick
7
+ *
8
+ */
9
  (function ($, window, document, wpAjax, opts) {
10
  "use strict";
11
  /**
21
 
22
  /**
23
  * disable element utility
24
+ *
25
  * @since 3.1.9
26
+ *
27
+ * @param {*} status
28
+ * @returns {jQuery|HTMLElement}
29
  */
30
  $.fn.disabled = function( status ) {
31
  $(this).each( function(){
39
  } );
40
  return self; // method chaining
41
  };
42
+ /**
43
+ * Check if a HTMLElement or jQuery is disabled
44
+ */
45
  $.fn.isDisabled = function() {
46
  // noinspection ES6ConvertVarToLetConst
47
  var self = $(this), prop = 'disabled';
48
  return ( typeof( self.prop( prop ) ) !== 'undefined' ) ? self.prop( prop ) : self.hasClass( prop );
49
  };
50
 
51
+ /**
52
+ * Clear Tooltip for clip board js
53
+ * @param {Object} event
54
+ */
55
  function clearTooltip( event ) {
 
56
  $(event.currentTarget).removeClass( function (index, className) {
57
  return (className.match (/\btooltipped-\S+/g) || []).join(' ');
58
  } ).removeClass('tooltipped').removeAttr('aria-label');
59
  }
60
 
61
  function showTooltip( elem, msg ) {
 
62
  $( elem ).addClass('tooltipped tooltipped-s').attr( 'aria-label', msg );
63
  }
64
 
65
  function fallbackMessage(action) {
66
  // noinspection ES6ConvertVarToLetConst
67
+ var actionMsg, actionKey = (action === 'cut' ? 'X' : 'C');
68
  if (/iPhone|iPad/i.test(navigator.userAgent)) {
69
  actionMsg = 'No support :(';
70
  } else if (/Mac/i.test(navigator.userAgent)) {
77
 
78
  /* global ajaxurl, wpAjax, postboxes, pagenow, alert, deleteUserSetting, typenow, adminpage, thousandsSeparator, decimalPoint, isRtl */
79
  $(window).load(function () {
80
+ // noinspection ES6ConvertVarToLetConst
81
  var $copyBtn = $('.toClipboard'), clipboard,
82
  googleCategories,
83
  helper = {
97
  }
98
  }, // helper functions
99
  feedEditor = {
100
+ /**
101
+ * Initialize The Feed Editor {Tabs...}
102
+ * @returns {void}
103
+ */
104
  init: function() {
105
  // noinspection ES6ConvertVarToLetConst
106
  var outOfStockVisibilityRow = $('.out-of-stock-visibility');
107
  // Initialize Table Sorting
108
+ // noinspection JSUnresolvedFunction
109
  $('.sorted_table').sortablesd({
110
  containerSelector: 'table',
111
  itemPath: '> tbody',
113
  handle: 'i.wf_sortedtable',
114
  placeholder: '<tr class="placeholder"><td colspan="9"></td></tr>',
115
  });
116
+ $('select.selectize').not('.selectized').each(function(){
117
  // noinspection ES6ConvertVarToLetConst
118
  var self = $(this), plugins = self.data('plugins');
119
  self.selectize({
120
+ plugins: plugins ? plugins.split(',').map( function( s ) { return s.trim(); } ) : [],//['remove_button'],
121
  render: { item: helper.selectize_render_item, }
122
+ });
123
  });
124
  $('[name="is_outOfStock"], [name="product_visibility"]').on( 'change', function(){
125
  if( $('[name="is_outOfStock"]:checked').val() === 'n' && $('[name="product_visibility"]:checked').val() === '1' ) {
153
  if( valueColumn.find('select.selectize').length === 0 ) {
154
  // noinspection ES6ConvertVarToLetConst
155
  var selectizeOpts = {
156
+ options: googleCategories,
157
+ config: { render: { item: helper.selectize_render_item, } },
158
+ };
 
159
  valueColumn.find('input.wf_default').remove();
160
  valueColumn.append('<span class="wf_default wf_attributes"><select name="default[]" class="selectize"></select></span>');
161
  valueColumn.find('.wf_attributes select').selectize({render: {item: helper.selectize_render_item,}});
162
+ // noinspection JSUnresolvedVariable
163
+ valueColumn.append('<span style="font-size:x-small;"><a style="color: red" href="http://webappick.helpscoutdocs.com/article/19-how-to-map-store-category-with-merchant-category" target="_blank">'+ opts.learn_more +'</a></span>');
164
  valueColumn.append('<span class="spinner is-active" style="margin: 0;"></span>');
165
+ // noinspection ES6ConvertVarToLetConst
166
+ var select = valueColumn.find('.wf_attributes select');
167
  if( ! googleCategories ) {
168
  wpAjax.send( 'get_google_categories', {
169
  type: 'GET',
190
  }
191
  } );
192
  },
193
+ /**
194
+ * Selectize Helper.
195
+ * Initialize Selectize Dropdown
196
+ * @param {jQuery|HTMLElement} el
197
+ * @param {Object} config
198
+ * @returns {jQuery|HTMLElement}
199
+ */
200
  renderSelectize: function( el, config ) {
201
  // noinspection ES6ConvertVarToLetConst
202
  var c = $.extend({}, {
203
  options: {},
204
  settings: {render: {item: helper.selectize_render_item,}}
205
  }, config);
206
+ // noinspection JSUnresolvedFunction
207
  el.selectize(c.settings);
208
  // noinspection ES6ConvertVarToLetConst
209
  var s = el[0].selectize;
219
  s.refreshOptions( true );
220
  return el;
221
  },
222
+ /**
223
+ * Render Merchant info ajax response and handle allowed feed type for selected merchant
224
+ * @param {jQuery|HTMLElement} merchantInfo jQuery dom object
225
+ * @param {jQuery|HTMLElement} feedType jQuery dom object
226
+ * @param {Object} r ajax response object
227
+ */
228
  renderMerchantInfo: function( merchantInfo, feedType, r ) {
229
  // noinspection ES6ConvertVarToLetConst
230
  for( var k in r ) {
231
  if( r.hasOwnProperty( k ) ) {
232
  merchantInfo.find( '.merchant-info-section.' + k + ' .data' ).html( r[k] ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
233
+ if( 'feed_file_type' === k ) {
234
  // noinspection ES6ConvertVarToLetConst,JSUnresolvedVariable
235
  var types = r[k].split(",").map(function(t){return t.trim().toLowerCase()}).filter(function(t){
236
  // noinspection JSUnresolvedVariable
252
  feedType.trigger('change');
253
  feedType.parent().find('.spinner').removeClass( 'is-active' );
254
  },
255
+ /**
256
+ * Render Feed Template Tabs and settings while creating new feed.
257
+ * @param {jQuery|HTMLElement} feedForm feed from query dom object
258
+ * @param {object} r merchant template ajax response object
259
+ */
260
  renderMerchantTemplate: function( feedForm, r ) {
261
+ // noinspection ES6ConvertVarToLetConst
262
+ for ( var k in r ) {
263
+ if ( r.hasOwnProperty( k ) ) {
264
+ if ( 'tabs' === k ) {
265
+ feedForm.html( r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
266
+ } else {
267
+ // noinspection ES6ConvertVarToLetConst
268
+ var contentSettings = $('[name="'+k+'"]');
269
+ if ( contentSettings.length ) {
270
+ contentSettings.each( function() {
271
+ // noinspection ES6ConvertVarToLetConst
272
+ var elem = $(this);
273
+ if ( elem.is( 'select' ) ) {
274
+ elem.find( '[value="'+r[k]+'"]').prop( 'selected', true );
275
+ } else if ( ( elem.is('[type=checkbox]') || elem.is('[type=radio]') ) && elem.val() === r[k] ) {
276
+ elem.prop( 'checked', true )
277
+ } else {
278
+ elem.val( r[k] ); // type=text
279
+ }
280
+ } ).trigger('change');
281
+ }
282
+ }
283
+ }
284
+ }
285
  feedEditor.init();
286
  }
287
  }, // Feed Editor Table
322
 
323
  // XML Feed Wrapper
324
  $('#feedType,#provider').on('change', function () {
325
+ // noinspection ES6ConvertVarToLetConst,
326
+ var type = $('#feedType').val(), provider = $('#provider').val(), itemWrapper = $('.itemWrapper'), wf_csv_txt = $('.wf_csvtxt');
327
  // noinspection JSUnresolvedVariable
328
  if ( type === 'xml' ) {
329
+ itemWrapper.show();
330
+ wf_csv_txt.hide();
331
  } else if ( type === 'csv' || type === 'txt' ) {
332
+ itemWrapper.hide();
333
+ wf_csv_txt.show();
334
  } else if ( type === '' ) {
335
+ itemWrapper.hide();
336
+ wf_csv_txt.hide();
337
  }
338
+ if( type !== '' && helper.in_array( provider, ['google', 'facebook', 'pinterest'] ) ) {
339
+ itemWrapper.hide();
 
 
 
340
  }
341
  }).trigger( 'change' );
342
  // Tooltip only Text
343
  {
 
344
  $('.wfmasterTooltip').hover(function () {
345
  // Hover over code
346
+ // noinspection ES6ConvertVarToLetConst
347
  var title = $(this).attr('wftitle');
 
348
  $(this).data('tipText', title).removeAttr('wftitle');
 
349
  $('<p class="wftooltip"></p>').text(title).appendTo('body').fadeIn('slow');
350
  }, function () {
351
  // Hover out code
 
352
  $(this).attr('wftitle', $(this).data('tipText'));
 
353
  $('.wftooltip').remove();
354
  }).mousemove(function (e) {
355
+ $('.wftooltip').css({top: e.pageY + 10, left: e.pageX + 20})
 
 
 
 
356
  });
357
  }
358
 
 
 
 
 
 
 
 
 
359
  // Attribute type selection for dynamic attribute
360
  $(document).on('change', '.dType', function () {
361
  // noinspection ES6ConvertVarToLetConst
410
  // Feed Generating form validation
411
  $(this).validate();
412
  if ($(this).valid()) {
 
413
  $(".makeFeedResponse").show().html( '<b style="color: darkblue;"><i class="dashicons dashicons-sos wpf_spin"></i> ' + opts.form.generate + '</b>' ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html, WordPressVIPMinimum.JS.StringConcat.Found
414
  }
415
  });
416
 
417
  // Generate Update Feed Form Submit
 
418
  $(".updatefeed").validate();
419
  $('[name="save_feed_config"]').on( 'click', function( e ) {
420
  e.preventDefault();
424
  // Feed Generating form validation
425
  $(this).validate();
426
  if ( $(this).valid() ) {
 
427
  $(".makeFeedResponse").show().html( '<b style="color: darkblue;"><i class="dashicons dashicons-sos wpf_spin"></i> ' + ( data && data.save ? opts.form.save : opts.form.generate ) + '</b>' ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html, WordPressVIPMinimum.JS.StringConcat.Found
428
  }
429
  });
450
  } else {
451
  wpAjax.send( 'woo_feed_get_merchant_info', {
452
  type: 'GET',
453
+ data: { nonce: opts.nonce, provider: merchant }
454
  } ).then( function( r ) {
455
  merchantInfoCache[merchant] = r;
456
  feedEditor.renderMerchantInfo( merchantInfo, feedType, r );
462
  feedEditor.renderMerchantTemplate( feedForm, merchantTemplateCache[merchant] );
463
  } else {
464
  wpAjax.post( 'get_feed_merchant', {
465
+ _ajax_nonce: opts.nonce, merchant: merchant
466
  }, )
467
  .then( function( r ) {
468
  merchantTemplateCache[merchant] = r;
487
  });
488
 
489
  //Checking whether php ssh2 extension is added or not
 
490
  $(document).on('change', '.ftporsftp', function () {
491
  // noinspection ES6ConvertVarToLetConst
492
  var server = $(this).val(), status = $('.ssh2_status');
admin/partials/templates/common_add-feed.php CHANGED
@@ -5,7 +5,7 @@
5
  if ( ! defined( 'ABSPATH' ) ) {
6
  die();
7
  }
8
- global $provider;
9
  ?>
10
  <table class="table tree widefat fixed sorted_table mtable" style="width: 100%;" id="table-1">
11
  <thead>
@@ -23,26 +23,21 @@ global $provider;
23
  </thead>
24
  <tbody>
25
  <?php
26
- $merchant = new Woo_Feed_Merchant( $provider );
27
- $template = $merchant->get_merchant_template();
28
- if ( ! $template ) { // Default template
29
- $template = $merchant->get_default_template();
30
- }
31
- foreach ( $template['mattributes'] as $key => $value ) {
32
- $merchantAttribute = $value;
33
- $prefix = $template['prefix'][ $key ];
34
- $attrSelected = ( 'attribute' == $template['type'][ $key ] ) ? 'selected' : '';
35
- $patternSelected = ( 'pattern' == $template['type'][ $key ] ) ? 'selected' : '';
36
- $attribute = $template['attributes'][ $key ];
37
- $pattern = $template['default'][ $key ];
38
- $suffix = $template['suffix'][ $key ];
39
- $outputType = $template['output_type'][ $key ];
40
- $limit = $template['limit'][ $key ];
41
  ?>
42
  <tr>
43
  <td><i class="wf_sortedtable dashicons dashicons-menu"></i></td>
44
  <td>
45
- <input type="text" name="mattributes[]" autocomplete="off" required value="<?php echo esc_attr( $merchantAttribute ); ?>" class="wf_validate_attr wf_mattributes">
46
  </td>
47
  <td>
48
  <input type="text" name="prefix[]" autocomplete="off" value="<?php echo esc_attr( $prefix ); ?>" class="wf_ps">
@@ -69,7 +64,7 @@ global $provider;
69
  <select name="output_type[][]" class="outputType wfnoempty">
70
  <?php
71
  // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
72
- echo $wooFeedDropDown->outputTypes();
73
  ?>
74
  </select>
75
  <i class="dashicons dashicons-editor-expand expandType"></i>
5
  if ( ! defined( 'ABSPATH' ) ) {
6
  die();
7
  }
8
+ global $provider, $feedRules;
9
  ?>
10
  <table class="table tree widefat fixed sorted_table mtable" style="width: 100%;" id="table-1">
11
  <thead>
23
  </thead>
24
  <tbody>
25
  <?php
26
+
27
+ foreach ( $feedRules['mattributes'] as $key => $value ) {
28
+ $prefix = $feedRules['prefix'][ $key ];
29
+ $attrSelected = ( 'attribute' == $feedRules['type'][ $key ] ) ? 'selected' : '';
30
+ $patternSelected = ( 'pattern' == $feedRules['type'][ $key ] ) ? 'selected' : '';
31
+ $attribute = $feedRules['attributes'][ $key ];
32
+ $pattern = $feedRules['default'][ $key ];
33
+ $suffix = $feedRules['suffix'][ $key ];
34
+ $outputType = $feedRules['output_type'][ $key ];
35
+ $limit = $feedRules['limit'][ $key ];
 
 
 
 
 
36
  ?>
37
  <tr>
38
  <td><i class="wf_sortedtable dashicons dashicons-menu"></i></td>
39
  <td>
40
+ <input type="text" name="mattributes[]" autocomplete="off" required value="<?php echo esc_attr( $value ); ?>" class="wf_validate_attr wf_mattributes">
41
  </td>
42
  <td>
43
  <input type="text" name="prefix[]" autocomplete="off" value="<?php echo esc_attr( $prefix ); ?>" class="wf_ps">
64
  <select name="output_type[][]" class="outputType wfnoempty">
65
  <?php
66
  // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
67
+ echo $wooFeedDropDown->outputTypes( $outputType );
68
  ?>
69
  </select>
70
  <i class="dashicons dashicons-editor-expand expandType"></i>
admin/partials/templates/facebook_add-feed.php CHANGED
@@ -659,22 +659,7 @@ global $provider;
659
  echo $wooFeedProduct->attributeDropdown();
660
  ?>
661
  </select>
662
- <?php
663
- $url = site_url();
664
- $WABrand = '';
665
- // Remove all illegal characters from a url
666
- $url = filter_var( $url, FILTER_SANITIZE_URL );
667
- // Validate url
668
- if ( filter_var( $url, FILTER_VALIDATE_URL ) !== false ) {
669
- $url = wp_parse_url( $url );
670
- if ( array_key_exists( 'host', $url ) ) {
671
- $arr = explode( '.', $url['host'] );
672
- $WABrand = $arr[ count( $arr ) - 2 ];
673
- }
674
- }
675
-
676
- ?>
677
- <input type="text" name="default[]" value="<?php echo esc_attr( $WABrand ); ?>" autocomplete="off" class="wf_default wf_attributes"
678
  />
679
  </td>
680
  <td>
659
  echo $wooFeedProduct->attributeDropdown();
660
  ?>
661
  </select>
662
+ <input type="text" name="default[]" value="<?php echo esc_attr( woo_feed_get_default_brand() ); ?>" autocomplete="off" class="wf_default wf_attributes"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
663
  />
664
  </td>
665
  <td>
admin/partials/templates/google_add-feed.php CHANGED
@@ -666,22 +666,7 @@ global $provider;
666
  echo $wooFeedProduct->attributeDropdown();
667
  ?>
668
  </select>
669
- <?php
670
- $url = site_url();
671
- $WABrand = '';
672
- // Remove all illegal characters from a url
673
- $url = filter_var( $url, FILTER_SANITIZE_URL );
674
- // Validate url
675
- if ( filter_var( $url, FILTER_VALIDATE_URL ) !== false ) {
676
- $url = wp_parse_url( $url );
677
- if ( array_key_exists( 'host', $url ) ) {
678
- $arr = explode( '.', $url['host'] );
679
- $WABrand = $arr[ count( $arr ) - 2 ];
680
- }
681
- }
682
-
683
- ?>
684
- <input type="text" name="default[]" value="<?php echo esc_attr( $WABrand ); ?>" autocomplete="off" class="wf_default wf_attributes">
685
  </td>
686
  <td>
687
  <input type="text" name="suffix[]" autocomplete="off" class="wf_ps">
666
  echo $wooFeedProduct->attributeDropdown();
667
  ?>
668
  </select>
669
+ <input type="text" name="default[]" value="<?php echo esc_attr( woo_feed_get_default_brand() ); ?>" autocomplete="off" class="wf_default wf_attributes">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
670
  </td>
671
  <td>
672
  <input type="text" name="suffix[]" autocomplete="off" class="wf_ps">
admin/partials/templates/pinterest_add-feed.php CHANGED
@@ -666,22 +666,7 @@ global $provider;
666
  echo $wooFeedProduct->attributeDropdown();
667
  ?>
668
  </select>
669
- <?php
670
- $url = site_url();
671
- $WABrand = '';
672
- // Remove all illegal characters from a url
673
- $url = filter_var( $url, FILTER_SANITIZE_URL );
674
- // Validate url
675
- if ( filter_var( $url, FILTER_VALIDATE_URL ) !== false ) {
676
- $url = wp_parse_url( $url );
677
- if ( array_key_exists( 'host', $url ) ) {
678
- $arr = explode( '.', $url['host'] );
679
- $WABrand = $arr[ count( $arr ) - 2 ];
680
- }
681
- }
682
-
683
- ?>
684
- <input type="text" name="default[]" value="<?php echo esc_attr( $WABrand ); ?>" autocomplete="off" class="wf_default wf_attributes">
685
  </td>
686
  <td>
687
  <input type="text" name="suffix[]" autocomplete="off" class="wf_ps">
666
  echo $wooFeedProduct->attributeDropdown();
667
  ?>
668
  </select>
669
+ <input type="text" name="default[]" value="<?php echo esc_attr( woo_feed_get_default_brand() ); ?>" autocomplete="off" class="wf_default wf_attributes">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
670
  </td>
671
  <td>
672
  <input type="text" name="suffix[]" autocomplete="off" class="wf_ps">
admin/partials/woo-feed-edit-filter.php CHANGED
@@ -6,12 +6,12 @@ if ( ! defined( 'ABSPATH' ) ) {
6
  <table class="table tree widefat fixed woo-feed-filters">
7
  <tbody>
8
  <tr>
9
- <td colspan="2"><?php _e( 'Campaign URL Builder', 'woo-feed' ); ?></td>
10
- </tr>
11
- <tr>
12
- <td colspan="2">
13
- <table class="table widefat fixed" id="wf_campaign_url_builder">
14
- <tbody>
15
  <tr>
16
  <td>
17
  <label class="screen-reader-text" for="utm_source"><?php esc_html_e( 'Campaign Source', 'woo-feed' ); ?> <span class="required" aria-label="<?php esc_attr_e( 'Required', 'woo-feed' ); ?>">*</span></label>
@@ -49,17 +49,19 @@ if ( ! defined( 'ABSPATH' ) ) {
49
  </label>
50
  </td>
51
  </tr>
 
 
52
  <tr>
53
- <td colspan="4">
54
  <p>
55
  <span class="description"><?php esc_html_e( 'Fill out the required fields (marked with *) in the form above, if any required field is empty, then the parameters will not be applied.', 'woo-feed' ); ?></span>
56
  <a href="https://support.google.com/analytics/answer/1033863#parameters" target="_blank"><?php esc_html_e( 'Learn more about Campaign URL', 'woo-feed' ); ?></a>
57
  </p>
58
  </td>
59
  </tr>
60
- </tbody>
61
- </table>
62
- </td>
63
- </tr>
64
  </tbody>
65
  </table>
6
  <table class="table tree widefat fixed woo-feed-filters">
7
  <tbody>
8
  <tr>
9
+ <td colspan="2"><?php _e( 'Campaign URL Builder', 'woo-feed' ); ?></td>
10
+ </tr>
11
+ <tr>
12
+ <td colspan="2">
13
+ <table class="table widefat fixed" id="wf_campaign_url_builder">
14
+ <tbody>
15
  <tr>
16
  <td>
17
  <label class="screen-reader-text" for="utm_source"><?php esc_html_e( 'Campaign Source', 'woo-feed' ); ?> <span class="required" aria-label="<?php esc_attr_e( 'Required', 'woo-feed' ); ?>">*</span></label>
49
  </label>
50
  </td>
51
  </tr>
52
+ </tbody>
53
+ <tfoot>
54
  <tr>
55
+ <td colspan="5">
56
  <p>
57
  <span class="description"><?php esc_html_e( 'Fill out the required fields (marked with *) in the form above, if any required field is empty, then the parameters will not be applied.', 'woo-feed' ); ?></span>
58
  <a href="https://support.google.com/analytics/answer/1033863#parameters" target="_blank"><?php esc_html_e( 'Learn more about Campaign URL', 'woo-feed' ); ?></a>
59
  </p>
60
  </td>
61
  </tr>
62
+ </tfoot>
63
+ </table>
64
+ </td>
65
+ </tr>
66
  </tbody>
67
  </table>
includes/classes/class-woo-feed-default-attributes.php CHANGED
@@ -478,7 +478,7 @@ class Woo_Feed_Default_Attributes {
478
  public function merchants() {
479
  return array(
480
  '--1' => __( 'Custom Template', 'woo-feed' ),
481
- 'custom' => __( 'Custom Feed', 'woo-feed' ),
482
  '---1' => '',
483
  // popular
484
  '--2' => __( 'Popular Templates', 'woo-feed' ),
@@ -497,58 +497,58 @@ class Woo_Feed_Default_Attributes {
497
  '--3' => __( 'Templates', 'woo-feed' ),
498
  'adform' => __( 'AdForm', 'woo-feed' ),
499
  'adroll' => __( 'AdRoll', 'woo-feed' ),
500
- 'shopping' => __( 'eBay (Shopping.com)', 'woo-feed' ),
501
- 'nextag' => __( 'Nextag', 'woo-feed' ),
502
- 'pricegrabber' => __( 'Price Grabber', 'woo-feed' ),
503
- 'polyvore' => __( 'Polyvore', 'woo-feed' ),
504
- 'pricerunner' => __( 'PriceRunner', 'woo-feed' ),
505
- 'kelkoo' => __( 'Kelkoo', 'woo-feed' ),
506
- 'shopzilla' => __( 'Shopzilla', 'woo-feed' ),
507
- 'shopmania' => __( 'Shopmania', 'woo-feed' ),
508
- 'shopbot' => __( 'Shopbot', 'woo-feed' ),
509
  'become' => __( 'Become', 'woo-feed' ),
 
 
 
 
 
 
510
  'connexity' => __( 'Connexity', 'woo-feed' ),
511
- 'prisjakt' => __( 'Prisjakt', 'woo-feed' ),
512
- 'twenga' => __( 'Twenga', 'woo-feed' ),
 
513
  'fruugo' => __( 'Fruugo', 'woo-feed' ),
514
  'fruugo.au' => __( 'Fruugoaustralia.com', 'woo-feed' ),
515
- 'bonanza' => __( 'Bonanza', 'woo-feed' ),
516
- 'bol' => __( 'Bol.com', 'woo-feed' ),
517
- 'leguide' => __( 'LeGuide', 'woo-feed' ),
518
- 'real' => __( 'Real', 'woo-feed' ),
519
- 'crowdfox' => __( 'Crowdfox', 'woo-feed' ),
520
- 'jet' => __( 'Jet.com', 'woo-feed' ),
521
- 'wish' => __( 'Wish.com', 'woo-feed' ),
522
- 'zap.co.il' => __( 'Zap.co.il', 'woo-feed' ),
523
- 'myshopping.com.au' => __( 'Myshopping.com.au', 'woo-feed' ),
524
- 'smartly.io' => __( 'Smartly.io', 'woo-feed' ),
525
- 'stylight.com' => __( 'Stylight.com', 'woo-feed' ),
526
- 'nextad' => __( 'TheNextAd', 'woo-feed' ),
527
- 'skinflint.co.uk' => __( 'SkinFlint.co.uk', 'woo-feed' ),
528
- 'yahoo_nfa' => __( 'Yahoo NFA', 'woo-feed' ),
529
  'hintaseuranta.fi' => __( 'Hintaseuranta.fi', 'woo-feed' ),
530
  'incurvy' => __( 'Incurvy', 'woo-feed' ),
 
 
 
531
  'kijiji.ca' => __( 'Kijiji.ca', 'woo-feed' ),
 
532
  'marktplaats.nl' => __( 'Marktplaats.nl', 'woo-feed' ),
533
- 'rakuten.de' => __( 'Rakuten', 'woo-feed' ),
 
 
 
 
 
 
 
 
 
 
534
  'shopalike.fr' => __( 'Shopalike.fr', 'woo-feed' ),
 
 
 
 
 
 
535
  'spartoo.fi' => __( 'Spartoo.fi', 'woo-feed' ),
536
- 'webmarchand' => __( 'Webmarchand', 'woo-feed' ),
537
- 'fashiola' => __( 'Fashiola', 'woo-feed' ),
538
- 'vergelijk_comparer' => __( 'Vergelijk.be & Comparer.be', 'woo-feed' ),
539
- 'kieskeurig.nl' => __( 'Kieskeurig.nl', 'woo-feed' ),
540
- 'beslist.nl' => __( 'Beslist.nl', 'woo-feed' ),
541
- 'billiger.de' => __( 'Billiger.de', 'woo-feed' ),
542
  'vertaa.fi' => __( 'Vertaa.fi', 'woo-feed' ),
543
- 'cdiscount.fr' => __( 'CDiscount.fr', 'woo-feed' ),
544
- 'fnac.fr' => __( 'Fnac.fr', 'woo-feed' ),
545
- 'miinto.nl' => __( 'Miinto.nl', 'woo-feed' ),
546
- 'fyndiq.se' => __( 'Fyndiq.se', 'woo-feed' ),
547
- 'criteo' => __( 'Criteo', 'woo-feed' ),
548
- 'avantlink' => __( 'Avantlink', 'woo-feed' ),
549
- 'shareasale' => __( 'ShareASale', 'woo-feed' ),
550
  'walmart' => __( 'Walmart', 'woo-feed' ),
551
- 'modina.de' => __( 'Modina.de', 'woo-feed' ),
 
 
 
552
  '---3' => '',
553
  );
554
  }
@@ -564,7 +564,7 @@ class Woo_Feed_Default_Attributes {
564
  'product_type' => 'Product Categories[product_type] ',
565
  'current_category' => 'Google Product Category[google_product_category]',
566
  'image' => 'Main Image[image_link]',
567
- 'images' => 'Comma Separated Images [additional_image_link]',
568
  'images_1' => 'Additional Image 1 [additional_image_link]',
569
  'images_2' => 'Additional Image 2 [additional_image_link]',
570
  'images_3' => 'Additional Image 3 [additional_image_link]',
@@ -580,12 +580,11 @@ class Woo_Feed_Default_Attributes {
580
  '--2' => 'Availability & Price',
581
  'availability' => 'Stock Status[availability]',
582
  'availability_date' => 'Availability Date[availability_date]',
583
- 'cost_of_goods_sold' => 'Cost of Goods Sold[cost_of_goods_sold]',
584
- 'expiration_date' => 'Expiration Date[expiration_date]',
585
  'inventory' => 'Facebook Inventory[inventory]',
586
  'override' => 'Facebook Override[override]',
587
  'price' => 'Regular Price[price]',
588
  'sale_price' => 'Sale Price[sale_price]',
 
589
  'sale_price_effective_date' => 'Sale Price Effective Date[sale_price_effective_date]',
590
  '---2' => '',
591
  '--3' => 'Unique Product Identifiers',
@@ -606,7 +605,7 @@ class Woo_Feed_Default_Attributes {
606
  'size_system' => 'Size System[size_system]',
607
  '---4' => '',
608
  '--5' => 'Tax & Shipping',
609
- //'tax' => 'Tax[tax]',
610
  'tax_country' => 'Tax Country[tax_country]',
611
  'tax_region' => 'Tax Region[tax_region]',
612
  'tax_rate' => 'Tax Rate[tax_rate]',
@@ -642,6 +641,7 @@ class Woo_Feed_Default_Attributes {
642
  '--10' => 'Additional Attributes',
643
  'excluded_destination' => 'Excluded Destination[excluded_destination]',
644
  'included_destination' => 'Included Destination[included_destination]',
 
645
  '---10' => '',
646
  '--11' => 'Unit Prices (EU Countries and Switzerland Only)',
647
  'unit_pricing_measure' => 'Unit Pricing Measure[unit_pricing_measure]',
478
  public function merchants() {
479
  return array(
480
  '--1' => __( 'Custom Template', 'woo-feed' ),
481
+ 'custom' => __( 'Custom Template 1', 'woo-feed' ),
482
  '---1' => '',
483
  // popular
484
  '--2' => __( 'Popular Templates', 'woo-feed' ),
497
  '--3' => __( 'Templates', 'woo-feed' ),
498
  'adform' => __( 'AdForm', 'woo-feed' ),
499
  'adroll' => __( 'AdRoll', 'woo-feed' ),
500
+ 'avantlink' => __( 'Avantlink', 'woo-feed' ),
 
 
 
 
 
 
 
 
501
  'become' => __( 'Become', 'woo-feed' ),
502
+ 'beslist.nl' => __( 'Beslist.nl', 'woo-feed' ),
503
+ 'billiger.de' => __( 'Billiger.de', 'woo-feed' ),
504
+ 'bol' => __( 'Bol.com', 'woo-feed' ),
505
+ 'bonanza' => __( 'Bonanza', 'woo-feed' ),
506
+ 'cdiscount.fr' => __( 'CDiscount.fr', 'woo-feed' ),
507
+ 'comparer.be' => __( 'Comparer.be', 'woo-feed' ),
508
  'connexity' => __( 'Connexity', 'woo-feed' ),
509
+ 'criteo' => __( 'Criteo', 'woo-feed' ),
510
+ 'crowdfox' => __( 'Crowdfox', 'woo-feed' ),
511
+ 'dooyoo' => __( 'Dooyoo', 'woo-feed' ),
512
  'fruugo' => __( 'Fruugo', 'woo-feed' ),
513
  'fruugo.au' => __( 'Fruugoaustralia.com', 'woo-feed' ),
514
+ 'fyndiq.se' => __( 'Fyndiq.se', 'woo-feed' ),
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  'hintaseuranta.fi' => __( 'Hintaseuranta.fi', 'woo-feed' ),
516
  'incurvy' => __( 'Incurvy', 'woo-feed' ),
517
+ 'jet' => __( 'Jet.com', 'woo-feed' ),
518
+ 'kelkoo' => __( 'Kelkoo', 'woo-feed' ),
519
+ 'kieskeurig.nl' => __( 'Kieskeurig.nl', 'woo-feed' ),
520
  'kijiji.ca' => __( 'Kijiji.ca', 'woo-feed' ),
521
+ 'leguide' => __( 'LeGuide', 'woo-feed' ),
522
  'marktplaats.nl' => __( 'Marktplaats.nl', 'woo-feed' ),
523
+ 'miinto.nl' => __( 'Miinto.nl', 'woo-feed' ),
524
+ 'modina.de' => __( 'Modina.de', 'woo-feed' ),
525
+ 'myshopping.com.au' => __( 'Myshopping.com.au', 'woo-feed' ),
526
+ 'nextag' => __( 'Nextag', 'woo-feed' ),
527
+ 'polyvore' => __( 'Polyvore', 'woo-feed' ),
528
+ 'pricegrabber' => __( 'Price Grabber', 'woo-feed' ),
529
+ 'pricerunner' => __( 'Price Runner', 'woo-feed' ),
530
+ 'prisjakt' => __( 'Prisjakt', 'woo-feed' ),
531
+ 'rakuten.de' => __( 'Rakuten.de', 'woo-feed' ),
532
+ 'real' => __( 'Real', 'woo-feed' ),
533
+ 'shareasale' => __( 'ShareASale', 'woo-feed' ),
534
  'shopalike.fr' => __( 'Shopalike.fr', 'woo-feed' ),
535
+ 'shopbot' => __( 'Shopbot', 'woo-feed' ),
536
+ 'shopmania' => __( 'Shopmania', 'woo-feed' ),
537
+ 'shopping' => __( 'Shopping.com', 'woo-feed' ),
538
+ 'shopzilla' => __( 'Shopzilla', 'woo-feed' ),
539
+ 'skinflint.co.uk' => __( 'SkinFlint.co.uk', 'woo-feed' ),
540
+ 'smartly.io' => __( 'Smartly.io', 'woo-feed' ),
541
  'spartoo.fi' => __( 'Spartoo.fi', 'woo-feed' ),
542
+ 'stylight.com' => __( 'Stylight.com', 'woo-feed' ),
543
+ 'nextad' => __( 'TheNextAd', 'woo-feed' ),
544
+ 'trovaprezzi' => __( 'Trovaprezzi.it', 'woo-feed' ),
545
+ 'twenga' => __( 'Twenga', 'woo-feed' ),
 
 
546
  'vertaa.fi' => __( 'Vertaa.fi', 'woo-feed' ),
 
 
 
 
 
 
 
547
  'walmart' => __( 'Walmart', 'woo-feed' ),
548
+ 'webmarchand' => __( 'Webmarchand', 'woo-feed' ),
549
+ 'wish' => __( 'Wish.com', 'woo-feed' ),
550
+ 'yahoo_nfa' => __( 'Yahoo NFA', 'woo-feed' ),
551
+ 'zap.co.il' => __( 'Zap.co.il', 'woo-feed' ),
552
  '---3' => '',
553
  );
554
  }
564
  'product_type' => 'Product Categories[product_type] ',
565
  'current_category' => 'Google Product Category[google_product_category]',
566
  'image' => 'Main Image[image_link]',
567
+ 'images' => 'Additional Images [additional_image_link]',
568
  'images_1' => 'Additional Image 1 [additional_image_link]',
569
  'images_2' => 'Additional Image 2 [additional_image_link]',
570
  'images_3' => 'Additional Image 3 [additional_image_link]',
580
  '--2' => 'Availability & Price',
581
  'availability' => 'Stock Status[availability]',
582
  'availability_date' => 'Availability Date[availability_date]',
 
 
583
  'inventory' => 'Facebook Inventory[inventory]',
584
  'override' => 'Facebook Override[override]',
585
  'price' => 'Regular Price[price]',
586
  'sale_price' => 'Sale Price[sale_price]',
587
+ 'cost_of_goods_sold' => 'Cost of Goods Sold[cost_of_goods_sold]',
588
  'sale_price_effective_date' => 'Sale Price Effective Date[sale_price_effective_date]',
589
  '---2' => '',
590
  '--3' => 'Unique Product Identifiers',
605
  'size_system' => 'Size System[size_system]',
606
  '---4' => '',
607
  '--5' => 'Tax & Shipping',
608
+ 'tax' => 'Tax[tax]',
609
  'tax_country' => 'Tax Country[tax_country]',
610
  'tax_region' => 'Tax Region[tax_region]',
611
  'tax_rate' => 'Tax Rate[tax_rate]',
641
  '--10' => 'Additional Attributes',
642
  'excluded_destination' => 'Excluded Destination[excluded_destination]',
643
  'included_destination' => 'Included Destination[included_destination]',
644
+ 'expiration_date' => 'Expiration Date [expiration_date]',
645
  '---10' => '',
646
  '--11' => 'Unit Prices (EU Countries and Switzerland Only)',
647
  'unit_pricing_measure' => 'Unit Pricing Measure[unit_pricing_measure]',
includes/classes/class-woo-feed-dropdown.php CHANGED
@@ -59,18 +59,14 @@ class Woo_Feed_Dropdown {
59
  return $str;
60
  }
61
 
62
- public function outputTypes() {
63
- $output_types = get_option( 'woo_feed_output_type_options' );
64
- if ( ! empty( $output_types ) ) {
65
- return $output_types;
66
- }
67
- $str = '';
68
  foreach ( $this->output_types as $key => $value ) {
69
- $str .= "<option value='$key'>" . $value . '</option>';
70
  }
71
- update_option( 'woo_feed_output_type_options', $str, false );
72
 
73
- return $str;
74
  }
75
 
76
  /**
@@ -81,7 +77,7 @@ class Woo_Feed_Dropdown {
81
  * @return string
82
  */
83
  public function googleTaxonomy( $selected = '' ) {
84
- # Get All Google Taxonomies
85
  $fileName = WOO_FEED_FREE_ADMIN_PATH . '/partials/templates/google_taxonomy.txt';
86
  $customTaxonomyFile = fopen( $fileName, 'r' ); // phpcs:ignore
87
  $str = '';
@@ -97,7 +93,7 @@ class Woo_Feed_Dropdown {
97
  // First line contains metadata, ignore it
98
  fgets( $customTaxonomyFile ); // phpcs:ignore
99
  while ( $line = fgets( $customTaxonomyFile ) ) { // phpcs:ignore
100
- list( $catId, $cat ) = explode( "-", $line );
101
  $catId = (int) trim( $catId );
102
  $cat = trim( $cat );
103
  $str .= sprintf(
@@ -109,7 +105,7 @@ class Woo_Feed_Dropdown {
109
  }
110
  }
111
  if ( ! empty( $str ) ) {
112
- $str = "<option></option>" . $str;
113
  }
114
 
115
  return $str;
@@ -121,19 +117,19 @@ class Woo_Feed_Dropdown {
121
  * @return array
122
  */
123
  public function googleTaxonomyArray() {
124
- # Get All Google Taxonomies
125
  $fileName = WOO_FEED_FREE_ADMIN_PATH . '/partials/templates/google_taxonomy.txt';
126
- $customTaxonomyFile = fopen( $fileName, 'r' ); // phpcs:ignore
127
- $taxonomy = [];
128
  if ( $customTaxonomyFile ) {
129
  // First line contains metadata, ignore it
130
- fgets( $customTaxonomyFile ); // phpcs:ignore
131
- while ( $line = fgets( $customTaxonomyFile ) ) { // phpcs:ignore
132
- list( $catId, $cat ) = explode( "-", $line );
133
- $taxonomy[] = [
134
  'value' => absint( trim( $catId ) ),
135
  'text' => trim( $cat ),
136
- ];
137
  }
138
  }
139
  $taxonomy = array_filter( $taxonomy );
@@ -166,4 +162,28 @@ class Woo_Feed_Dropdown {
166
 
167
  return substr_replace( $google_attributes, "selected='selected' ", $pos, 0 );
168
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  }
59
  return $str;
60
  }
61
 
62
+ public function outputTypes( $selected = '' ) {
63
+ $output_types = '';
 
 
 
 
64
  foreach ( $this->output_types as $key => $value ) {
65
+ $output_types .= "<option value=\"{$key}\"".selected( $selected, $key, false ).">{$value}</option>";
66
  }
67
+ // @TODO remove update_option( 'woo_feed_output_type_options', $output_types, false );
68
 
69
+ return $output_types;
70
  }
71
 
72
  /**
77
  * @return string
78
  */
79
  public function googleTaxonomy( $selected = '' ) {
80
+ // Get All Google Taxonomies
81
  $fileName = WOO_FEED_FREE_ADMIN_PATH . '/partials/templates/google_taxonomy.txt';
82
  $customTaxonomyFile = fopen( $fileName, 'r' ); // phpcs:ignore
83
  $str = '';
93
  // First line contains metadata, ignore it
94
  fgets( $customTaxonomyFile ); // phpcs:ignore
95
  while ( $line = fgets( $customTaxonomyFile ) ) { // phpcs:ignore
96
+ list( $catId, $cat ) = explode( '-', $line );
97
  $catId = (int) trim( $catId );
98
  $cat = trim( $cat );
99
  $str .= sprintf(
105
  }
106
  }
107
  if ( ! empty( $str ) ) {
108
+ $str = '<option></option>' . $str;
109
  }
110
 
111
  return $str;
117
  * @return array
118
  */
119
  public function googleTaxonomyArray() {
120
+ // Get All Google Taxonomies
121
  $fileName = WOO_FEED_FREE_ADMIN_PATH . '/partials/templates/google_taxonomy.txt';
122
+ $customTaxonomyFile = fopen( $fileName, 'r' ); // phpcs:ignore
123
+ $taxonomy = array();
124
  if ( $customTaxonomyFile ) {
125
  // First line contains metadata, ignore it
126
+ fgets( $customTaxonomyFile ); // phpcs:ignore
127
+ while ( $line = fgets( $customTaxonomyFile ) ) { // phpcs:ignore
128
+ list( $catId, $cat ) = explode( '-', $line );
129
+ $taxonomy[] = array(
130
  'value' => absint( trim( $catId ) ),
131
  'text' => trim( $cat ),
132
+ );
133
  }
134
  }
135
  $taxonomy = array_filter( $taxonomy );
162
 
163
  return substr_replace( $google_attributes, "selected='selected' ", $pos, 0 );
164
  }
165
+
166
+ /**
167
+ * Facebook Attribute list
168
+ * Alias of google attribute dropdown for facebook
169
+ *
170
+ * @param string $selected
171
+ *
172
+ * @return string
173
+ */
174
+ public function facebookAttributesDropdown( $selected = '' ) {
175
+ return $this->googleAttributesDropdown( $selected );
176
+ }
177
+
178
+ /**
179
+ * Pinterest Attribute list
180
+ * Alias of google attribute dropdown for pinterest
181
+ *
182
+ * @param string $selected
183
+ *
184
+ * @return string
185
+ */
186
+ public function pinterestAttributesDropdown( $selected = '' ) {
187
+ return $this->googleAttributesDropdown( $selected );
188
+ }
189
  }
includes/classes/class-woo-feed-merchant.php CHANGED
@@ -8,2784 +8,70 @@
8
 
9
  class Woo_Feed_Merchant {
10
 
11
- public $merchant;
12
- private $templates = array(
13
- 'default' => array(
14
- 'mattributes' => array(
15
- 'id',
16
- 'title',
17
- 'description',
18
- 'link',
19
- 'image_link',
20
- 'price',
21
- 'categories',
22
- 'brand',
23
- ),
24
- 'prefix' => array( '', '', '', '', '', '', '', '' ),
25
- 'type' => array(
26
- 'attribute',
27
- 'attribute',
28
- 'attribute',
29
- 'attribute',
30
- 'attribute',
31
- 'attribute',
32
- 'attribute',
33
- 'attribute',
34
- ),
35
- 'attributes' => array( 'id', 'title', 'description', 'link', 'image', 'price', 'product_type', '' ),
36
- 'default' => array( '', '', '', '', '', '', '', '' ),
37
- 'suffix' => array( '', '', '', '', '', '', '', '' ),
38
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1' ),
39
- 'limit' => array( '', '', '', '', '', '', '', '' ),
40
- ),
41
- 'bol' => array(
42
- 'mattributes' => array(
43
- 'EAN',
44
- 'Internal Reference',
45
- 'Name',
46
- 'Product Classification',
47
- 'Description',
48
- 'Cover Image URL',
49
- 'Brand',
50
- ),
51
- 'prefix' => array( '', '', '', '', '', '', '' ),
52
- 'type' => array(
53
- 'attribute',
54
- 'attribute',
55
- 'attribute',
56
- 'attribute',
57
- 'attribute',
58
- 'attribute',
59
- 'pattern',
60
- ),
61
- 'attributes' => array( 'sku', 'id', 'title', 'product_type', 'description', 'image', '' ),
62
- 'default' => array( '', '', '', '', '', '', '' ),
63
- 'suffix' => array( '', '', '', '', '', '', '' ),
64
- 'output_type' => array( '1', '1', '1', '1', '2', '1', '' ),
65
- 'limit' => array( '', '', '', '', '', '500', '5000' ),
66
- ),
67
- 'adform' => array(
68
- 'mattributes' => array(
69
- 'product_id',
70
- 'product_name',
71
- 'product_category_id',
72
- 'product_deeplink',
73
- 'product_image',
74
- 'product_price',
75
- ),
76
- 'prefix' => array( '', '', '', '', '', '' ),
77
- 'type' => array( 'attribute', 'attribute', 'attribute', 'attribute', 'attribute', 'attribute' ),
78
- 'attributes' => array( 'id', 'title', 'product_type', 'link', 'image', 'price' ),
79
- 'default' => array( '', '', '', '', '', '' ),
80
- 'suffix' => array( '', '', '', '', '', '' ),
81
- 'output_type' => array( '1', '1', '1', '1', '1', '1' ),
82
- 'limit' => array( '', '', '', '', '', '' ),
83
- ),
84
- 'avantlink' => array(
85
- 'mattributes' => array(
86
- 'SKU',
87
- 'Brand Name',
88
- 'Product Name',
89
- 'Long Description',
90
- 'Category',
91
- 'Standardized Categorization',
92
- 'Image URL',
93
- 'Buy Link',
94
- 'Retail Price',
95
- 'Sale Price',
96
- 'UPC',
97
- ),
98
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
99
- 'type' => array(
100
- 'attribute',
101
- 'attribute',
102
- 'attribute',
103
- 'attribute',
104
- 'attribute',
105
- 'attribute',
106
- 'attribute',
107
- 'attribute',
108
- 'attribute',
109
- 'attribute',
110
- 'attribute',
111
- ),
112
- 'attributes' => array(
113
- 'sku',
114
- '',
115
- 'title',
116
- 'description',
117
- 'product_type',
118
- '',
119
- 'image',
120
- 'link',
121
- 'price',
122
- 'sale_price',
123
- '',
124
- ),
125
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '' ),
126
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
127
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
128
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '' ),
129
- ),
130
- 'become' => array(
131
- 'mattributes' => array(
132
- 'Unique ID',
133
- 'Title',
134
- 'Description',
135
- 'Category',
136
- 'Product URL',
137
- 'Image URL',
138
- 'Condition',
139
- 'Availability',
140
- 'Current Price',
141
- ),
142
- 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
143
- 'type' => array(
144
- 'attribute',
145
- 'attribute',
146
- 'attribute',
147
- 'attribute',
148
- 'attribute',
149
- 'attribute',
150
- 'attribute',
151
- 'attribute',
152
- 'attribute',
153
- ),
154
- 'attributes' => array(
155
- 'id',
156
- 'title',
157
- 'description',
158
- 'product_type',
159
- 'link',
160
- 'image',
161
- 'condition',
162
- 'availability',
163
- 'price',
164
- ),
165
- 'default' => array( '', '', '', '', '', '', '', '', '' ),
166
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
167
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
168
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
169
- ),
170
- 'bonanza' => array(
171
- 'mattributes' => array(
172
- 'id',
173
- 'title',
174
- 'description',
175
- 'price',
176
- 'images',
177
- 'category',
178
- 'booth_category',
179
- 'shipping_price',
180
- 'shipping_type',
181
- 'shipping_service',
182
- 'shipping_lbs',
183
- 'shipping_oz',
184
- 'shipping_carrier',
185
- 'shipping_package',
186
- 'sku',
187
- 'worldwide_shipping_price',
188
- 'worldwide_shipping_type',
189
- 'worldwide_shipping_carrier',
190
- 'quantity',
191
- 'trait',
192
- 'force_update',
193
- ),
194
- 'prefix' => array(
195
- '',
196
- '',
197
- '',
198
- '',
199
- '',
200
- '',
201
- '',
202
- '',
203
- '',
204
- '',
205
- '',
206
- '',
207
- '',
208
- '',
209
- '',
210
- '',
211
- '',
212
- '',
213
- '',
214
- '',
215
- '',
216
- ),
217
- 'type' => array(
218
- 'attribute',
219
- 'attribute',
220
- 'attribute',
221
- 'attribute',
222
- 'attribute',
223
- 'pattern',
224
- 'attribute',
225
- 'pattern',
226
- 'pattern',
227
- 'pattern',
228
- 'pattern',
229
- 'pattern',
230
- 'pattern',
231
- 'pattern',
232
- 'attribute',
233
- 'pattern',
234
- 'pattern',
235
- 'pattern',
236
- 'attribute',
237
- 'pattern',
238
- 'pattern',
239
- ),
240
- 'attributes' => array(
241
- 'id',
242
- 'title',
243
- 'description',
244
- 'price',
245
- 'image',
246
- '',
247
- 'product_type',
248
- '',
249
- '',
250
- '',
251
- '',
252
- '',
253
- '',
254
- '',
255
- 'sku',
256
- '',
257
- '',
258
- '',
259
- 'quantity',
260
- '',
261
- '',
262
- ),
263
- 'default' => array(
264
- '',
265
- '',
266
- '',
267
- '',
268
- '',
269
- '',
270
- '',
271
- '',
272
- '',
273
- '',
274
- '',
275
- '',
276
- '',
277
- '',
278
- '',
279
- '',
280
- '',
281
- '',
282
- '',
283
- '',
284
- '',
285
- ),
286
- 'suffix' => array(
287
- '',
288
- '',
289
- '',
290
- '',
291
- '',
292
- '',
293
- '',
294
- '',
295
- '',
296
- '',
297
- '',
298
- '',
299
- '',
300
- '',
301
- '',
302
- '',
303
- '',
304
- '',
305
- '',
306
- '',
307
- '',
308
- ),
309
- 'output_type' => array(
310
- '1',
311
- '1',
312
- '1',
313
- '1',
314
- '1',
315
- '1',
316
- '1',
317
- '1',
318
- '1',
319
- '1',
320
- '1',
321
- '1',
322
- '1',
323
- '1',
324
- '1',
325
- '1',
326
- '1',
327
- '1',
328
- '1',
329
- '1',
330
- '1',
331
- ),
332
- 'limit' => array(
333
- '',
334
- '',
335
- '',
336
- '',
337
- '',
338
- '',
339
- '',
340
- '',
341
- '',
342
- '',
343
- '',
344
- '',
345
- '',
346
- '',
347
- '',
348
- '',
349
- '',
350
- '',
351
- '',
352
- '',
353
- '',
354
- ),
355
- ),
356
- 'connexity' => array(
357
- 'mattributes' => array(
358
- 'Unique ID',
359
- 'Title',
360
- 'Description',
361
- 'Category',
362
- 'Product URL',
363
- 'Image URL',
364
- 'Condition',
365
- 'Availability',
366
- 'Current Price',
367
- ),
368
- 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
369
- 'type' => array(
370
- 'attribute',
371
- 'attribute',
372
- 'attribute',
373
- 'attribute',
374
- 'attribute',
375
- 'attribute',
376
- 'attribute',
377
- 'attribute',
378
- 'attribute',
379
- ),
380
- 'attributes' => array(
381
- 'id',
382
- 'title',
383
- 'description',
384
- 'product_type',
385
- 'link',
386
- 'image',
387
- 'condition',
388
- 'availability',
389
- 'price',
390
- ),
391
- 'default' => array( '', '', '', '', '', '', '', '', '' ),
392
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
393
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
394
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
395
- ),
396
- 'criteo' => array(
397
- 'mattributes' => array(
398
- 'ID',
399
- 'title',
400
- 'description',
401
- 'google_product_category',
402
- 'link',
403
- 'image_link',
404
- 'additional_image_link',
405
- 'availability',
406
- 'price',
407
- 'sale_price',
408
- 'gtin',
409
- 'mpn',
410
- 'brand',
411
- 'product_type',
412
- 'product_type_key',
413
- 'number_of_reviews',
414
- 'product_rating',
415
- 'filters',
416
- 'adult',
417
- ),
418
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
419
- 'type' => array(
420
- 'attribute',
421
- 'attribute',
422
- 'attribute',
423
- 'attribute',
424
- 'attribute',
425
- 'attribute',
426
- 'attribute',
427
- 'attribute',
428
- 'attribute',
429
- 'attribute',
430
- 'attribute',
431
- 'attribute',
432
- 'attribute',
433
- 'attribute',
434
- 'attribute',
435
- 'attribute',
436
- 'attribute',
437
- 'attribute',
438
- 'attribute',
439
- ),
440
- 'attributes' => array(
441
- 'id',
442
- 'title',
443
- 'description',
444
- 'product_type',
445
- 'link',
446
- 'image',
447
- 'images',
448
- 'availability',
449
- 'price',
450
- 'sale_price',
451
- '',
452
- '',
453
- '',
454
- '',
455
- '',
456
- '',
457
- '',
458
- '',
459
- '',
460
- ),
461
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
462
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
463
- 'output_type' => array(
464
- '1',
465
- '1',
466
- '1',
467
- '1',
468
- '1',
469
- '1',
470
- '1',
471
- '1',
472
- '1',
473
- '1',
474
- '1',
475
- '1',
476
- '1',
477
- '1',
478
- '1',
479
- '1',
480
- '1',
481
- '1',
482
- '1',
483
- ),
484
- 'limit' => array(
485
- '240',
486
- '150',
487
- '5000',
488
- '',
489
- '1024',
490
- '2000',
491
- '2000',
492
- '25',
493
- '14',
494
- '50',
495
- '50',
496
- '70',
497
- '70',
498
- '500',
499
- '500',
500
- '8',
501
- '8',
502
- '2000',
503
- '',
504
- ),
505
- ),
506
- 'crowdfox' => array(
507
- 'mattributes' => array(
508
- 'sku ',
509
- 'image',
510
- 'name',
511
- 'price',
512
- 'ean',
513
- 'dlv_time',
514
- 'dlv_cost',
515
- 'obl_info',
516
- 'brand',
517
- 'mpn',
518
- 'link',
519
- 'desc',
520
- 'sell_max',
521
- 'shop_cat',
522
- ),
523
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
524
- 'type' => array(
525
- 'attribute',
526
- 'attribute',
527
- 'attribute',
528
- 'attribute',
529
- 'attribute',
530
- 'pattern',
531
- 'pattern',
532
- 'attribute',
533
- 'pattern',
534
- 'attribute',
535
- 'attribute',
536
- 'attribute',
537
- 'attribute',
538
- 'attribute',
539
- ),
540
- 'attributes' => array(
541
- 'sku',
542
- 'image',
543
- 'title',
544
- 'price',
545
- '',
546
- '',
547
- '',
548
- '',
549
- '',
550
- '',
551
- 'link',
552
- 'description',
553
- 'quantity',
554
- 'product_type',
555
- ),
556
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
557
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
558
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
559
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
560
- ),
561
- 'fruugo' => array(
562
- 'mattributes' => array(
563
- 'ProductId',
564
- 'SkuId',
565
- 'EAN',
566
- 'Brand',
567
- 'Category',
568
- 'Imageurl1',
569
- 'StockStatus',
570
- 'StockQuantity',
571
- 'Title',
572
- 'Description',
573
- 'NormalPriceWithoutVat',
574
- 'DiscountPriceWithoutVAT',
575
- 'VatRate',
576
- 'Currency',
577
- 'Country',
578
- ),
579
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
580
- 'type' => array(
581
- 'attribute',
582
- 'attribute',
583
- 'attribute',
584
- 'attribute',
585
- 'attribute',
586
- 'attribute',
587
- 'attribute',
588
- 'attribute',
589
- 'attribute',
590
- 'attribute',
591
- 'attribute',
592
- 'attribute',
593
- 'attribute',
594
- 'pattern',
595
- 'attribute',
596
- ),
597
- 'attributes' => array(
598
- 'id',
599
- 'sku',
600
- '',
601
- '',
602
- 'product_type',
603
- 'image',
604
- 'availability',
605
- 'quantity',
606
- 'title',
607
- 'description',
608
- 'price',
609
- 'sale_price',
610
- '',
611
- '',
612
- '',
613
- ),
614
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', 'USD', '' ),
615
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
616
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
617
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
618
- ),
619
- 'fruugo.au' => array(
620
- 'mattributes' => array(
621
- 'ProductId',
622
- 'SkuId',
623
- 'EAN',
624
- 'Brand',
625
- 'Category',
626
- 'Imageurl1',
627
- 'StockStatus',
628
- 'StockQuantity',
629
- 'Title',
630
- 'Description',
631
- 'NormalPriceWithoutVat',
632
- 'DiscountPriceWithoutVAT',
633
- 'VatRate',
634
- 'Currency',
635
- 'Country',
636
- ),
637
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
638
- 'type' => array(
639
- 'attribute',
640
- 'attribute',
641
- 'attribute',
642
- 'attribute',
643
- 'attribute',
644
- 'attribute',
645
- 'attribute',
646
- 'attribute',
647
- 'attribute',
648
- 'attribute',
649
- 'attribute',
650
- 'attribute',
651
- 'attribute',
652
- 'pattern',
653
- 'attribute',
654
- ),
655
- 'attributes' => array(
656
- 'id',
657
- 'sku',
658
- '',
659
- '',
660
- 'product_type',
661
- 'image',
662
- 'availability',
663
- 'quantity',
664
- 'title',
665
- 'description',
666
- 'price',
667
- 'sale_price',
668
- '',
669
- '',
670
- '',
671
- ),
672
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', 'USD', '' ),
673
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
674
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
675
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
676
- ),
677
- 'jet' => array(
678
- 'mattributes' => array(
679
- 'Merchant SKU ID',
680
- 'Unique ID',
681
- 'Multi-pack Quantity',
682
- 'Product Title',
683
- 'Description',
684
- 'Image',
685
- 'Product Price',
686
- 'Jet Category',
687
- 'Brand',
688
- ),
689
- 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
690
- 'type' => array(
691
- 'attribute',
692
- 'attribute',
693
- 'pattern',
694
- 'attribute',
695
- 'attribute',
696
- 'attribute',
697
- 'attribute',
698
- 'pattern',
699
- 'pattern',
700
- ),
701
- 'attributes' => array( 'sku', 'id', '', 'title', 'description', 'image', 'price', '', '' ),
702
- 'default' => array( '', '', '', '', '', '', '', '', '' ),
703
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
704
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
705
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
706
- ),
707
- 'kelkoo' => array(
708
- 'mattributes' => array(
709
- 'title',
710
- 'product-url',
711
- 'price',
712
- 'merchant-category',
713
- 'ean',
714
- 'delivery-cost',
715
- 'brand',
716
- 'description',
717
- 'image-url',
718
- 'availability',
719
- 'mpn',
720
- ),
721
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
722
- 'type' => array(
723
- 'attribute',
724
- 'attribute',
725
- 'attribute',
726
- 'attribute',
727
- 'attribute',
728
- 'attribute',
729
- 'attribute',
730
- 'attribute',
731
- 'attribute',
732
- 'attribute',
733
- 'attribute',
734
- ),
735
- 'attributes' => array(
736
- 'title',
737
- 'link',
738
- 'price',
739
- '',
740
- '',
741
- '',
742
- '',
743
- 'description',
744
- 'image',
745
- 'availability',
746
- '',
747
- ),
748
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '' ),
749
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
750
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
751
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '' ),
752
- ),
753
- 'kieskeurig.nl' => array(
754
- 'mattributes' => array(
755
- 'id',
756
- 'productgroep',
757
- 'merk',
758
- 'type',
759
- 'toevoeging-type',
760
- 'extra-productbeschrijving',
761
- 'partnumber',
762
- 'ean-code',
763
- 'prijs',
764
- 'verzendkosten',
765
- 'afhaalkosten',
766
- 'levertijd',
767
- 'deeplink',
768
- 'imagelink',
769
- 'voorraad',
770
- ),
771
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
772
- 'type' => array(
773
- 'attribute',
774
- 'attribute',
775
- 'attribute',
776
- 'attribute',
777
- 'attribute',
778
- 'attribute',
779
- 'attribute',
780
- 'attribute',
781
- 'attribute',
782
- 'attribute',
783
- 'attribute',
784
- 'attribute',
785
- 'attribute',
786
- 'attribute',
787
- 'attribute',
788
- ),
789
- 'attributes' => array(
790
- 'id',
791
- 'product_type',
792
- 'title',
793
- 'type',
794
- '',
795
- 'description',
796
- '',
797
- '',
798
- 'price',
799
- '',
800
- '',
801
- '',
802
- 'link',
803
- 'image',
804
- 'quantity',
805
- ),
806
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
807
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
808
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
809
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
810
- ),
811
- 'kijiji.ca' => array(
812
- 'mattributes' => array(
813
- 'id',
814
- 'title',
815
- 'description',
816
- 'link',
817
- 'image_link',
818
- 'price',
819
- 'categories',
820
- 'brand',
821
- ),
822
- 'prefix' => array( '', '', '', '', '', '', '', '' ),
823
- 'type' => array(
824
- 'attribute',
825
- 'attribute',
826
- 'attribute',
827
- 'attribute',
828
- 'attribute',
829
- 'attribute',
830
- 'attribute',
831
- 'attribute',
832
- ),
833
- 'attributes' => array( 'id', 'title', 'description', 'link', 'image', 'price', 'product_type', '' ),
834
- 'default' => array( '', '', '', '', '', '', '', '' ),
835
- 'suffix' => array( '', '', '', '', '', '', '', '' ),
836
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1' ),
837
- 'limit' => array( '', '', '', '', '', '', '', '' ),
838
- ),
839
- 'leguide' => array(
840
- 'mattributes' => array(
841
- 'category',
842
- 'unique_id',
843
- 'title',
844
- 'description',
845
- 'price',
846
- 'product_URL',
847
- 'landing_URL',
848
- 'image_URL',
849
- 'EAN',
850
- 'delivery_charge',
851
- 'delivery_time',
852
- 'availability',
853
- 'guarantee',
854
- ),
855
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
856
- 'type' => array(
857
- 'attribute',
858
- 'attribute',
859
- 'attribute',
860
- 'attribute',
861
- 'attribute',
862
- 'attribute',
863
- 'attribute',
864
- 'attribute',
865
- 'attribute',
866
- 'pattern',
867
- 'pattern',
868
- 'pattern',
869
- 'pattern',
870
- ),
871
- 'attributes' => array(
872
- 'product_type',
873
- 'id',
874
- 'title',
875
- 'description',
876
- 'price',
877
- 'link',
878
- '',
879
- 'image',
880
- 'sku',
881
- '',
882
- '',
883
- '',
884
- '',
885
- ),
886
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
887
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
888
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
889
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
890
- ),
891
- 'modina.de' => array(
892
- 'mattributes' => array(
893
- 'id',
894
- 'brand',
895
- 'title',
896
- 'description',
897
- 'productLink',
898
- 'imageLink',
899
- 'imageLinkAdditional',
900
- 'price',
901
- 'priceOld',
902
- 'shippingCost',
903
- 'shippingDuration',
904
- 'availability',
905
- 'gtin',
906
- 'mpn',
907
- 'category',
908
- 'subcategory',
909
- 'color',
910
- 'gender',
911
- 'material',
912
- 'pattern',
913
- 'size',
914
- ),
915
- 'prefix' => array(
916
- '',
917
- '',
918
- '',
919
- '',
920
- '',
921
- '',
922
- '',
923
- '',
924
- '',
925
- '',
926
- '',
927
- '',
928
- '',
929
- '',
930
- '',
931
- '',
932
- '',
933
- '',
934
- '',
935
- '',
936
- '',
937
- ),
938
- 'type' => array(
939
- 'attribute',
940
- 'attribute',
941
- 'attribute',
942
- 'attribute',
943
- 'attribute',
944
- 'attribute',
945
- 'attribute',
946
- 'attribute',
947
- 'attribute',
948
- 'attribute',
949
- 'attribute',
950
- 'attribute',
951
- 'attribute',
952
- 'attribute',
953
- 'attribute',
954
- 'attribute',
955
- 'attribute',
956
- 'attribute',
957
- 'attribute',
958
- 'attribute',
959
- 'attribute',
960
- ),
961
- 'attributes' => array(
962
- 'id',
963
- '',
964
- 'title',
965
- 'description',
966
- 'link',
967
- 'image',
968
- 'images',
969
- 'price',
970
- '',
971
- '',
972
- '',
973
- 'availability',
974
- '',
975
- '',
976
- 'product_type',
977
- '',
978
- '',
979
- '',
980
- '',
981
- '',
982
- '',
983
- ),
984
- 'default' => array(
985
- '',
986
- '',
987
- '',
988
- '',
989
- '',
990
- '',
991
- '',
992
- '',
993
- '',
994
- '',
995
- '',
996
- '',
997
- '',
998
- '',
999
- '',
1000
- '',
1001
- '',
1002
- '',
1003
- '',
1004
- '',
1005
- '',
1006
- ),
1007
- 'suffix' => array(
1008
- '',
1009
- '',
1010
- '',
1011
- '',
1012
- '',
1013
- '',
1014
- '',
1015
- '',
1016
- '',
1017
- '',
1018
- '',
1019
- '',
1020
- '',
1021
- '',
1022
- '',
1023
- '',
1024
- '',
1025
- '',
1026
- '',
1027
- '',
1028
- '',
1029
- ),
1030
- 'output_type' => array(
1031
- '1',
1032
- '1',
1033
- '1',
1034
- '1',
1035
- '1',
1036
- '1',
1037
- '1',
1038
- '1',
1039
- '1',
1040
- '1',
1041
- '1',
1042
- '1',
1043
- '1',
1044
- '1',
1045
- '1',
1046
- '1',
1047
- '1',
1048
- '1',
1049
- '1',
1050
- '1',
1051
- '1',
1052
- ),
1053
- 'limit' => array(
1054
- '',
1055
- '',
1056
- '',
1057
- '',
1058
- '',
1059
- '',
1060
- '',
1061
- '',
1062
- '',
1063
- '',
1064
- '',
1065
- '',
1066
- '',
1067
- '',
1068
- '',
1069
- '',
1070
- '',
1071
- '',
1072
- '',
1073
- '',
1074
- '',
1075
- ),
1076
- ),
1077
- 'myshopping.com.au' => array(
1078
- 'mattributes' => array(
1079
- 'Code',
1080
- 'Id',
1081
- 'Name',
1082
- 'Description',
1083
- 'Category',
1084
- 'price',
1085
- 'Product_URL',
1086
- 'Image_URL',
1087
- 'Brand',
1088
- 'InStock',
1089
- 'MPN',
1090
- ),
1091
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
1092
- 'type' => array(
1093
- 'pattern',
1094
- 'attribute',
1095
- 'attribute',
1096
- 'attribute',
1097
- 'attribute',
1098
- 'attribute',
1099
- 'attribute',
1100
- 'attribute',
1101
- 'attribute',
1102
- 'pattern',
1103
- 'attribute',
1104
- ),
1105
- 'attributes' => array(
1106
- '',
1107
- 'id',
1108
- 'title',
1109
- 'description',
1110
- 'product_type',
1111
- 'price',
1112
- 'link',
1113
- 'image',
1114
- '',
1115
- '',
1116
- 'sku',
1117
- ),
1118
- 'default' => array( '', '', '', '', '', '', '', '', '', 'Y', '' ),
1119
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
1120
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1121
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '' ),
1122
- ),
1123
- 'nextag' => array(
1124
- 'mattributes' => array(
1125
- 'Manufacturer',
1126
- 'Product Name',
1127
- 'Product Description',
1128
- 'Price',
1129
- 'Click-Out URL',
1130
- 'Category',
1131
- 'Image URL',
1132
- 'Stock Status',
1133
- 'Condition',
1134
- ),
1135
- 'prefix' => array( '', '', '', '$', '', '', '', '', '' ),
1136
- 'type' => array(
1137
- 'pattern',
1138
- 'attribute',
1139
- 'attribute',
1140
- 'attribute',
1141
- 'attribute',
1142
- 'attribute',
1143
- 'attribute',
1144
- 'attribute',
1145
- 'attribute',
1146
- ),
1147
- 'attributes' => array(
1148
- '',
1149
- 'title',
1150
- 'description',
1151
- 'price',
1152
- 'link',
1153
- 'product_type',
1154
- 'image',
1155
- 'availability',
1156
- 'condition',
1157
- ),
1158
- 'default' => array( '', '', '', '', '', '', '', '', '' ),
1159
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
1160
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1161
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
1162
- ),
1163
- 'polyvore' => array(
1164
- 'mattributes' => array( 'title', 'brand', 'url', 'imgurl', 'price', 'currency', 'description', 'subject' ),
1165
- 'prefix' => array( '', '', '', '', '', '', '', '' ),
1166
- 'type' => array(
1167
- 'attribute',
1168
- 'pattern',
1169
- 'attribute',
1170
- 'attribute',
1171
- 'attribute',
1172
- 'pattern',
1173
- 'attribute',
1174
- 'pattern',
1175
- ),
1176
- 'attributes' => array( 'title', '', 'link', 'image', 'price', '', 'description', '' ),
1177
- 'default' => array( '', '', '', '', '', 'USD', '', '' ),
1178
- 'suffix' => array( '', '', '', '', '', '', '', '' ),
1179
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1' ),
1180
- 'limit' => array( '', '', '', '', '', '', '', '' ),
1181
- ),
1182
- 'pricegrabber' => array(
1183
- 'mattributes' => array(
1184
- 'Retsku',
1185
- 'Product Title',
1186
- 'Detailed Description',
1187
- 'Categorization',
1188
- 'Product URL',
1189
- 'Primary Image URL',
1190
- 'Selling Price',
1191
- 'Regular Price',
1192
- 'Condition',
1193
- 'Availability',
1194
- 'Manufacturer Name',
1195
- 'GTIN',
1196
- ),
1197
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1198
- 'type' => array(
1199
- 'attribute',
1200
- 'attribute',
1201
- 'attribute',
1202
- 'attribute',
1203
- 'attribute',
1204
- 'attribute',
1205
- 'attribute',
1206
- 'attribute',
1207
- 'attribute',
1208
- 'attribute',
1209
- 'attribute',
1210
- 'attribute',
1211
- ),
1212
- 'attributes' => array(
1213
- 'sku',
1214
- 'title',
1215
- 'description',
1216
- 'product_type',
1217
- 'link',
1218
- 'image',
1219
- 'sale_price',
1220
- 'price',
1221
- 'condition',
1222
- 'availability',
1223
- '',
1224
- '',
1225
- ),
1226
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1227
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1228
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1229
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1230
- ),
1231
- 'pricerunner' => array(
1232
- 'mattributes' => array(
1233
- 'Category',
1234
- 'SKU',
1235
- 'Price',
1236
- 'Product URL',
1237
- 'Product name',
1238
- 'Manufacturer SKU',
1239
- 'Manufacturer',
1240
- 'EAN',
1241
- 'Description',
1242
- 'Graphic URL',
1243
- 'In Stock',
1244
- 'Stock Level',
1245
- 'Shipping Cost',
1246
- 'Delivery time',
1247
- ),
1248
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1249
- 'type' => array(
1250
- 'attribute',
1251
- 'attribute',
1252
- 'attribute',
1253
- 'attribute',
1254
- 'attribute',
1255
- 'attribute',
1256
- 'pattern',
1257
- 'attribute',
1258
- 'attribute',
1259
- 'attribute',
1260
- 'pattern',
1261
- 'attribute',
1262
- 'pattern',
1263
- 'pattern',
1264
- ),
1265
- 'attributes' => array(
1266
- 'product_type',
1267
- 'id',
1268
- 'price',
1269
- 'link',
1270
- 'title',
1271
- 'sku',
1272
- '',
1273
- 'sku',
1274
- 'description',
1275
- 'image',
1276
- '',
1277
- 'quantity',
1278
- '',
1279
- '',
1280
- ),
1281
- 'default' => array( '', '', '', '', '', '', '', '', '', '', 'Yes', '', '10.00', '5-7 days' ),
1282
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1283
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1284
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1285
- ),
1286
- 'prisjakt' => array(
1287
- 'mattributes' => array(
1288
- 'Produktnamn',
1289
- 'Art.nr.',
1290
- 'Kategori',
1291
- 'Pris inkl.moms',
1292
- 'Produkt-URL',
1293
- 'Tillverkare',
1294
- 'Tillverkar-SKU',
1295
- 'Frakt',
1296
- 'Bild-URL',
1297
- 'Lagerstatus',
1298
- ),
1299
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '' ),
1300
- 'type' => array(
1301
- 'attribute',
1302
- 'attribute',
1303
- 'attribute',
1304
- 'attribute',
1305
- 'attribute',
1306
- 'pattern',
1307
- 'attribute',
1308
- 'pattern',
1309
- 'attribute',
1310
- 'attribute',
1311
- ),
1312
- 'attributes' => array(
1313
- 'title',
1314
- 'id',
1315
- 'product_type',
1316
- 'price',
1317
- 'link',
1318
- '',
1319
- 'sku',
1320
- '',
1321
- 'image',
1322
- 'condition',
1323
- ),
1324
- 'default' => array( '', '', '', '', '', '', '', '', 'mens, womens', '' ),
1325
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '' ),
1326
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1327
- 'limit' => array( '', '', '', '', '', '', '', '', '', '' ),
1328
- ),
1329
- 'real' => array(
1330
- 'mattributes' => array( 'ean', 'category', 'title', 'description', 'picture', 'manufacturer' ),
1331
- 'prefix' => array( '', '', '', '', '', '' ),
1332
- 'type' => array( 'attribute', 'attribute', 'attribute', 'attribute', 'attribute', 'pattern' ),
1333
- 'attributes' => array( 'sku', 'product_type', 'title', 'description', 'image', '' ),
1334
- 'default' => array( '', '', '', '', '', '' ),
1335
- 'suffix' => array( '', '', '', '', '', '' ),
1336
- 'output_type' => array( '1', '1', '1', '1', '1', '1' ),
1337
- 'limit' => array( '', '', '', '', '', '' ),
1338
- ),
1339
- 'shareasale' => array(
1340
- 'mattributes' => array(
1341
- 'ProductID',
1342
- 'Name',
1343
- 'MerchantID',
1344
- 'Merchant',
1345
- 'Link',
1346
- 'Thumbnail',
1347
- 'BigImage',
1348
- 'Price',
1349
- 'RetailPrice',
1350
- 'Category',
1351
- 'Subcategory',
1352
- 'Description',
1353
- ),
1354
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1355
- 'type' => array(
1356
- 'attribute',
1357
- 'attribute',
1358
- 'attribute',
1359
- 'attribute',
1360
- 'attribute',
1361
- 'attribute',
1362
- 'attribute',
1363
- 'attribute',
1364
- 'attribute',
1365
- 'attribute',
1366
- 'attribute',
1367
- 'attribute',
1368
- ),
1369
- 'attributes' => array(
1370
- 'id',
1371
- 'title',
1372
- '',
1373
- '',
1374
- 'link',
1375
- 'image',
1376
- 'feature_image',
1377
- 'sale_price',
1378
- 'price',
1379
- 'product_type',
1380
- '',
1381
- 'description',
1382
- ),
1383
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1384
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1385
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1386
- 'limit' => array( '8', '255', '8', '255', '255', '255', '255', '', '', '50', '50', '' ),
1387
- ),
1388
- 'shopalike.fr' => array(
1389
- 'mattributes' => array(
1390
- 'id',
1391
- 'title',
1392
- 'description',
1393
- 'link',
1394
- 'image_link',
1395
- 'price',
1396
- 'categories',
1397
- 'brand',
1398
- ),
1399
- 'prefix' => array( '', '', '', '', '', '', '', '' ),
1400
- 'type' => array(
1401
- 'attribute',
1402
- 'attribute',
1403
- 'attribute',
1404
- 'attribute',
1405
- 'attribute',
1406
- 'attribute',
1407
- 'attribute',
1408
- 'attribute',
1409
- ),
1410
- 'attributes' => array( 'id', 'title', 'description', 'link', 'image', 'price', 'product_type', '' ),
1411
- 'default' => array( '', '', '', '', '', '', '', '' ),
1412
- 'suffix' => array( '', '', '', '', '', '', '', '' ),
1413
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1' ),
1414
- 'limit' => array( '', '', '', '', '', '', '', '' ),
1415
- ),
1416
- 'shopbot' => array(
1417
- 'mattributes' => array(
1418
- 'ID',
1419
- 'Product Name',
1420
- 'URL',
1421
- 'Category',
1422
- 'Photo URL',
1423
- 'Price',
1424
- 'Original Price',
1425
- 'Description',
1426
- 'MPN',
1427
- 'Brand',
1428
- 'Shipment Cost',
1429
- 'Stock',
1430
- 'Promotional Phrase',
1431
- 'Model',
1432
- 'Color',
1433
- 'Product Type',
1434
- ),
1435
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1436
- 'type' => array(
1437
- 'attribute',
1438
- 'attribute',
1439
- 'attribute',
1440
- 'attribute',
1441
- 'attribute',
1442
- 'attribute',
1443
- 'attribute',
1444
- 'attribute',
1445
- 'attribute',
1446
- 'attribute',
1447
- 'attribute',
1448
- 'attribute',
1449
- 'attribute',
1450
- 'attribute',
1451
- 'attribute',
1452
- 'attribute',
1453
- ),
1454
- 'attributes' => array(
1455
- 'id',
1456
- 'title',
1457
- 'link',
1458
- 'product_type',
1459
- 'image',
1460
- 'sale_price',
1461
- 'price',
1462
- 'description',
1463
- 'sku',
1464
- '',
1465
- '',
1466
- 'quantity',
1467
- '',
1468
- '',
1469
- '',
1470
- '',
1471
- ),
1472
- 'default' => array( '', '', '', '', '', '', '', '', 'mens, womens', '', '', '', '', '', '', '' ),
1473
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1474
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1475
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1476
- ),
1477
- 'shopmania' => array(
1478
- 'mattributes' => array(
1479
- 'Category',
1480
- 'Manufacturer',
1481
- 'Model',
1482
- 'MPC',
1483
- 'Name',
1484
- 'Description',
1485
- 'URL',
1486
- 'Image',
1487
- 'Price',
1488
- 'Currency',
1489
- 'Shipping',
1490
- 'Availability',
1491
- 'GTIN',
1492
- ),
1493
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1494
- 'type' => array(
1495
- 'attribute',
1496
- 'attribute',
1497
- 'attribute',
1498
- 'attribute',
1499
- 'attribute',
1500
- 'attribute',
1501
- 'attribute',
1502
- 'attribute',
1503
- 'attribute',
1504
- 'attribute',
1505
- 'attribute',
1506
- 'attribute',
1507
- 'attribute',
1508
- ),
1509
- 'attributes' => array(
1510
- 'product_type',
1511
- '',
1512
- '',
1513
- '',
1514
- 'title',
1515
- 'description',
1516
- 'link',
1517
- 'image',
1518
- 'price',
1519
- '',
1520
- '',
1521
- 'availability',
1522
- '',
1523
- ),
1524
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1525
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1526
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1527
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1528
- ),
1529
- 'shopping' => array(
1530
- 'mattributes' => array(
1531
- 'Unique Merchant SKU',
1532
- 'Product Name',
1533
- 'Product URL',
1534
- 'Image URL',
1535
- 'Current Price',
1536
- 'Stock Availability',
1537
- 'Condition',
1538
- 'MPN',
1539
- 'UPC',
1540
- ),
1541
- 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
1542
- 'type' => array(
1543
- 'attribute',
1544
- 'attribute',
1545
- 'attribute',
1546
- 'attribute',
1547
- 'attribute',
1548
- 'attribute',
1549
- 'attribute',
1550
- 'attribute',
1551
- 'attribute',
1552
- ),
1553
- 'attributes' => array( 'sku', 'title', 'link', 'image', 'price', 'availability', 'condition', '', '' ),
1554
- 'default' => array( '', '', '', '', '', '', '', '', '' ),
1555
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
1556
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1557
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
1558
- ),
1559
- 'shopzilla' => array(
1560
- 'mattributes' => array(
1561
- 'Unique ID',
1562
- 'Title',
1563
- 'Description',
1564
- 'Category',
1565
- 'Product URL',
1566
- 'Image URL',
1567
- 'Condition',
1568
- 'Availability',
1569
- 'Current Price',
1570
- ),
1571
- 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
1572
- 'type' => array(
1573
- 'attribute',
1574
- 'attribute',
1575
- 'attribute',
1576
- 'attribute',
1577
- 'attribute',
1578
- 'attribute',
1579
- 'attribute',
1580
- 'attribute',
1581
- 'attribute',
1582
- ),
1583
- 'attributes' => array(
1584
- 'id',
1585
- 'title',
1586
- 'description',
1587
- 'product_type',
1588
- 'link',
1589
- 'image',
1590
- 'condition',
1591
- 'availability',
1592
- 'price',
1593
- ),
1594
- 'default' => array( '', '', '', '', '', '', '', '', '' ),
1595
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
1596
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1597
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
1598
- ),
1599
- 'spartoo.fi' => array(
1600
- 'mattributes' => array(
1601
- 'SKU',
1602
- 'Parent / Child',
1603
- 'Parent SKU',
1604
- 'Product name',
1605
- 'Manufacturer name',
1606
- 'Gender',
1607
- 'Product_description',
1608
- 'Product price',
1609
- 'Discount price',
1610
- 'Quantity',
1611
- 'Category',
1612
- 'Products selection',
1613
- 'Photo 1',
1614
- 'Photo 2',
1615
- 'Photo 3',
1616
- 'Photo 4',
1617
- 'Photo 5',
1618
- 'Photo 6',
1619
- 'Photo 7',
1620
- 'Photo 8',
1621
- 'Color id',
1622
- 'Color name',
1623
- 'Size name',
1624
- 'ean',
1625
- ),
1626
- 'prefix' => array(
1627
- '',
1628
- '',
1629
- '',
1630
- '',
1631
- '',
1632
- '',
1633
- '',
1634
- '',
1635
- '',
1636
- '',
1637
- '',
1638
- '',
1639
- '',
1640
- '',
1641
- '',
1642
- '',
1643
- '',
1644
- '',
1645
- '',
1646
- '',
1647
- '',
1648
- '',
1649
- '',
1650
- '',
1651
- ),
1652
- 'type' => array(
1653
- 'attribute',
1654
- 'attribute',
1655
- 'attribute',
1656
- 'attribute',
1657
- 'attribute',
1658
- 'attribute',
1659
- 'attribute',
1660
- 'attribute',
1661
- 'attribute',
1662
- 'attribute',
1663
- 'attribute',
1664
- 'attribute',
1665
- 'attribute',
1666
- 'attribute',
1667
- 'attribute',
1668
- 'attribute',
1669
- 'attribute',
1670
- 'attribute',
1671
- 'attribute',
1672
- 'attribute',
1673
- 'attribute',
1674
- 'attribute',
1675
- 'attribute',
1676
- 'attribute',
1677
- ),
1678
- 'attributes' => array(
1679
- 'sku',
1680
- 'type',
1681
- 'parent_sku',
1682
- 'title',
1683
- '',
1684
- '',
1685
- 'description',
1686
- 'price',
1687
- 'sale_price',
1688
- 'quantity',
1689
- 'product_type',
1690
- '',
1691
- 'image_1',
1692
- 'image_2',
1693
- 'image_3',
1694
- 'image_4',
1695
- 'image_5',
1696
- 'image_6',
1697
- 'image_7',
1698
- 'image_8',
1699
- '',
1700
- '',
1701
- '',
1702
- '',
1703
- ),
1704
- 'default' => array(
1705
- '',
1706
- '',
1707
- '',
1708
- '',
1709
- '',
1710
- '',
1711
- '',
1712
- '',
1713
- '',
1714
- '',
1715
- '',
1716
- '',
1717
- '',
1718
- '',
1719
- '',
1720
- '',
1721
- '',
1722
- '',
1723
- '',
1724
- '',
1725
- '',
1726
- '',
1727
- '',
1728
- '',
1729
- ),
1730
- 'suffix' => array(
1731
- '',
1732
- '',
1733
- '',
1734
- '',
1735
- '',
1736
- '',
1737
- '',
1738
- '',
1739
- '',
1740
- '',
1741
- '',
1742
- '',
1743
- '',
1744
- '',
1745
- '',
1746
- '',
1747
- '',
1748
- '',
1749
- '',
1750
- '',
1751
- '',
1752
- '',
1753
- '',
1754
- '',
1755
- ),
1756
- 'output_type' => array(
1757
- '1',
1758
- '1',
1759
- '1',
1760
- '1',
1761
- '1',
1762
- '1',
1763
- '1',
1764
- '1',
1765
- '1',
1766
- '1',
1767
- '1',
1768
- '1',
1769
- '1',
1770
- '1',
1771
- '1',
1772
- '1',
1773
- '1',
1774
- '1',
1775
- '1',
1776
- '1',
1777
- '1',
1778
- '1',
1779
- '1',
1780
- '1',
1781
- ),
1782
- 'limit' => array(
1783
- '',
1784
- '',
1785
- '',
1786
- '',
1787
- '',
1788
- '',
1789
- '',
1790
- '',
1791
- '',
1792
- '',
1793
- '',
1794
- '',
1795
- '',
1796
- '',
1797
- '',
1798
- '',
1799
- '',
1800
- '',
1801
- '',
1802
- '',
1803
- '',
1804
- '',
1805
- '',
1806
- '',
1807
- ),
1808
- ),
1809
- 'twenga' => array(
1810
- 'mattributes' => array(
1811
- 'merchant_ref',
1812
- 'merchant_id',
1813
- 'upc_ean',
1814
- 'manufacturer_id',
1815
- 'product_url',
1816
- 'image_url',
1817
- 'price',
1818
- 'regular_price',
1819
- 'shipping_cost',
1820
- 'designation',
1821
- 'description',
1822
- 'category',
1823
- 'brand',
1824
- 'in_stock',
1825
- 'availability',
1826
- 'stock_detail',
1827
- 'unit_price',
1828
- 'merchant_margin',
1829
- 'ecotax',
1830
- 'item_display',
1831
- 'condition',
1832
- 'merchant_ref',
1833
- ),
1834
- 'prefix' => array(
1835
- '',
1836
- '',
1837
- '',
1838
- '',
1839
- '',
1840
- '',
1841
- '',
1842
- '',
1843
- '',
1844
- '',
1845
- '',
1846
- '',
1847
- '',
1848
- '',
1849
- '',
1850
- '',
1851
- '',
1852
- '',
1853
- '',
1854
- '',
1855
- '',
1856
- '',
1857
- ),
1858
- 'type' => array(
1859
- 'attribute',
1860
- 'attribute',
1861
- 'pattern',
1862
- 'attribute',
1863
- 'attribute',
1864
- 'pattern',
1865
- 'attribute',
1866
- 'pattern',
1867
- 'pattern',
1868
- 'pattern',
1869
- 'attribute',
1870
- 'attribute',
1871
- 'pattern',
1872
- 'attribute',
1873
- 'attribute',
1874
- 'pattern',
1875
- 'pattern',
1876
- 'pattern',
1877
- 'pattern',
1878
- 'pattern',
1879
- 'pattern',
1880
- 'attribute',
1881
- ),
1882
- 'attributes' => array(
1883
- 'sku',
1884
- 'id',
1885
- '',
1886
- 'sku',
1887
- 'link',
1888
- 'image',
1889
- 'sale_price',
1890
- 'price',
1891
- '',
1892
- '',
1893
- 'description',
1894
- 'product_type',
1895
- '',
1896
- 'availability',
1897
- 'quantity',
1898
- '',
1899
- '',
1900
- '',
1901
- '',
1902
- '',
1903
- '',
1904
- 'sku',
1905
- ),
1906
- 'default' => array(
1907
- '',
1908
- '',
1909
- '',
1910
- '',
1911
- '',
1912
- '',
1913
- '',
1914
- '',
1915
- '',
1916
- '',
1917
- '',
1918
- '',
1919
- '',
1920
- '',
1921
- '',
1922
- '',
1923
- '',
1924
- '',
1925
- '',
1926
- '',
1927
- '',
1928
- '',
1929
- ),
1930
- 'suffix' => array(
1931
- '',
1932
- '',
1933
- '',
1934
- '',
1935
- '',
1936
- '',
1937
- '',
1938
- '',
1939
- '',
1940
- '',
1941
- '',
1942
- '',
1943
- '',
1944
- '',
1945
- '',
1946
- '',
1947
- '',
1948
- '',
1949
- '',
1950
- '',
1951
- '',
1952
- '',
1953
- ),
1954
- 'output_type' => array(
1955
- '1',
1956
- '1',
1957
- '1',
1958
- '1',
1959
- '1',
1960
- '1',
1961
- '1',
1962
- '1',
1963
- '1',
1964
- '1',
1965
- '1',
1966
- '1',
1967
- '1',
1968
- '1',
1969
- '1',
1970
- '1',
1971
- '1',
1972
- '1',
1973
- '1',
1974
- '1',
1975
- '1',
1976
- '1',
1977
- ),
1978
- 'limit' => array(
1979
- '',
1980
- '',
1981
- '',
1982
- '',
1983
- '',
1984
- '',
1985
- '',
1986
- '',
1987
- '',
1988
- '',
1989
- '',
1990
- '',
1991
- '',
1992
- '',
1993
- '',
1994
- '',
1995
- '',
1996
- '',
1997
- '',
1998
- '',
1999
- '',
2000
- '',
2001
- ),
2002
- ),
2003
- 'vertaa.fi' => array(
2004
- 'mattributes' => array(
2005
- 'Product category',
2006
- 'Product name',
2007
- 'Product brand',
2008
- 'Product price',
2009
- 'Product URL',
2010
- 'Delivery time',
2011
- 'Shipping method',
2012
- 'Delivery price',
2013
- 'Service country code',
2014
- ),
2015
- 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
2016
- 'type' => array(
2017
- 'attribute',
2018
- 'attribute',
2019
- 'attribute',
2020
- 'attribute',
2021
- 'attribute',
2022
- 'attribute',
2023
- 'attribute',
2024
- 'attribute',
2025
- 'attribute',
2026
- ),
2027
- 'attributes' => array( 'product_type', 'title', '', 'price', 'link', '', '', '', '' ),
2028
- 'default' => array( '', '', '', '', '', '', '', '', '' ),
2029
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
2030
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2031
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
2032
- ),
2033
- 'walmart' => array(
2034
- 'mattributes' => array(
2035
- 'Product Name',
2036
- 'SKU',
2037
- 'Product Tax Code',
2038
- 'Product ID Type',
2039
- 'Product ID',
2040
- 'Product Identifiers',
2041
- 'Description',
2042
- 'Brand',
2043
- 'Price',
2044
- 'Shipping Weight',
2045
- ),
2046
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '' ),
2047
- 'type' => array(
2048
- 'attribute',
2049
- 'attribute',
2050
- 'attribute',
2051
- 'attribute',
2052
- 'attribute',
2053
- 'attribute',
2054
- 'attribute',
2055
- 'attribute',
2056
- 'attribute',
2057
- 'attribute',
2058
- ),
2059
- 'attributes' => array( 'title', 'sku', '', '', 'id', '', 'description', '', 'price', '' ),
2060
- 'default' => array( '', '', '', '', '', '', '', '', '', '' ),
2061
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '' ),
2062
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2063
- 'limit' => array( '', '', '', '', '', '', '', '', '', '' ),
2064
- ),
2065
- 'wish' => array(
2066
- 'mattributes' => array(
2067
- 'Main Image URL',
2068
- 'Price',
2069
- 'Product Name',
2070
- 'Quantity',
2071
- 'Shipping',
2072
- 'Tags',
2073
- 'Parent Unique Id',
2074
- 'Unique ID/SKU',
2075
- 'Description',
2076
- ),
2077
- 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
2078
- 'type' => array(
2079
- 'attribute',
2080
- 'attribute',
2081
- 'attribute',
2082
- 'attribute',
2083
- 'attribute',
2084
- 'attribute',
2085
- 'attribute',
2086
- 'attribute',
2087
- 'attribute',
2088
- ),
2089
- 'attributes' => array(
2090
- 'image',
2091
- 'price',
2092
- 'title',
2093
- 'quantity',
2094
- '',
2095
- 'tags',
2096
- 'item_group_id',
2097
- 'id',
2098
- 'description',
2099
- ),
2100
- 'default' => array( '', '', '', '', '', '', '', '', '' ),
2101
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
2102
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2103
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
2104
- ),
2105
- 'yahoo_nfa' => array(
2106
- 'mattributes' => array(
2107
- 'id',
2108
- 'title',
2109
- 'description',
2110
- 'image_link',
2111
- 'link',
2112
- 'availability',
2113
- 'condition',
2114
- 'price',
2115
- 'gtin',
2116
- ),
2117
- 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
2118
- 'type' => array(
2119
- 'attribute',
2120
- 'attribute',
2121
- 'attribute',
2122
- 'attribute',
2123
- 'attribute',
2124
- 'attribute',
2125
- 'attribute',
2126
- 'attribute',
2127
- 'attribute',
2128
- ),
2129
- 'attributes' => array(
2130
- 'id',
2131
- 'title',
2132
- 'description',
2133
- 'image',
2134
- 'link',
2135
- 'availability',
2136
- 'condition',
2137
- 'price',
2138
- '',
2139
- ),
2140
- 'default' => array( '', '', '', '', '', '', '', '', '' ),
2141
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
2142
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2143
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
2144
- ),
2145
- 'zap.co.il' => array(
2146
- 'mattributes' => array(
2147
- 'PRODUCT_URL',
2148
- 'PRODUCT_NAME',
2149
- 'DETAILS',
2150
- 'PRODUCTCODE',
2151
- 'CURRENCY',
2152
- 'PRICE',
2153
- 'SHIPMENT_COST',
2154
- 'DELIVERY_TIME',
2155
- 'IMAGE',
2156
- ),
2157
- 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
2158
- 'type' => array(
2159
- 'attribute',
2160
- 'attribute',
2161
- 'attribute',
2162
- 'attribute',
2163
- 'attribute',
2164
- 'attribute',
2165
- 'attribute',
2166
- 'attribute',
2167
- 'attribute',
2168
- ),
2169
- 'attributes' => array( 'link', 'title', 'description', 'id', '', 'price', '', '', 'image' ),
2170
- 'default' => array( '', '', '', '', '', '', '', '', '' ),
2171
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
2172
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2173
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
2174
- ),
2175
- 'adwords' => array(
2176
- 'mattributes' => array(
2177
- 'ID',
2178
- 'ID2',
2179
- 'Item title',
2180
- 'Final URL',
2181
- 'Image URL',
2182
- 'Item subtitle',
2183
- 'Item description',
2184
- 'Item category',
2185
- 'Price',
2186
- 'Sale price',
2187
- 'Contextual keywords',
2188
- 'Item address',
2189
- ),
2190
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2191
- 'type' => array(
2192
- 'attribute',
2193
- 'attribute',
2194
- 'attribute',
2195
- 'attribute',
2196
- 'attribute',
2197
- 'attribute',
2198
- 'attribute',
2199
- 'attribute',
2200
- 'attribute',
2201
- 'attribute',
2202
- 'pattern',
2203
- 'pattern',
2204
- ),
2205
- 'attributes' => array(
2206
- 'id',
2207
- 'sku',
2208
- 'title',
2209
- 'link',
2210
- 'image',
2211
- 'short_description',
2212
- 'description',
2213
- 'product_type',
2214
- 'price',
2215
- 'sale_price',
2216
- '',
2217
- '',
2218
- ),
2219
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2220
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2221
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2222
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2223
- ),
2224
- 'bing' => array(
2225
- 'mattributes' => array( 'id', 'title', 'link', 'price', 'description', 'image_link', 'shipping' ),
2226
- 'prefix' => array( '', '', '', '', '', '', '' ),
2227
- 'type' => array(
2228
- 'attribute',
2229
- 'attribute',
2230
- 'attribute',
2231
- 'attribute',
2232
- 'attribute',
2233
- 'attribute',
2234
- 'attribute',
2235
- ),
2236
- 'attributes' => array( 'id', 'title', 'link', 'price', 'description', 'image', '' ),
2237
- 'default' => array( '', '', '', '', '', '', '' ),
2238
- 'suffix' => array( '', '', '', '', '', '', '' ),
2239
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1' ),
2240
- 'limit' => array( '', '', '', '', '', '', '' ),
2241
- ),
2242
- 'google_local_inventory' => array(
2243
- 'mattributes' => array(
2244
- 'store code',
2245
- 'itemid',
2246
- 'quantity',
2247
- 'price',
2248
- 'sale price',
2249
- 'availability',
2250
- 'sale price effective date',
2251
- 'pickup method',
2252
- 'pickup sla',
2253
- ),
2254
- 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
2255
- 'type' => array(
2256
- 'pattern',
2257
- 'attribute',
2258
- 'attribute',
2259
- 'attribute',
2260
- 'attribute',
2261
- 'attribute',
2262
- 'attribute',
2263
- 'pattern',
2264
- 'pattern',
2265
- ),
2266
- 'attributes' => array(
2267
- '',
2268
- 'id',
2269
- 'quantity',
2270
- 'price',
2271
- 'sale_price',
2272
- 'availability',
2273
- 'sale_price_effective_date',
2274
- '',
2275
- '',
2276
- ),
2277
- 'default' => array( ' ', '', '', '', '', '', '', '', '' ),
2278
- 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
2279
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2280
- 'limit' => array( '', '', '', '', '', '', '', '', '' ),
2281
- ),
2282
- 'google_local' => array(
2283
- 'mattributes' => array(
2284
- 'store code',
2285
- 'itemid',
2286
- 'title',
2287
- 'description',
2288
- 'image_link',
2289
- 'condition',
2290
- 'gtin',
2291
- 'brand',
2292
- 'google_product_category',
2293
- 'webitemid',
2294
- 'mpn',
2295
- 'price',
2296
- 'sale price',
2297
- 'sale price effective date',
2298
- 'unit_pricing_measure',
2299
- 'unit_pricing_base_measure',
2300
- 'pickup method',
2301
- 'pickup SLA',
2302
- 'pickup_link_template',
2303
- 'mobile_pickup_link_template',
2304
- 'link_template',
2305
- 'mobile_link_template',
2306
- 'ads_redirect',
2307
- 'energy_efficiency_class',
2308
- 'energy_efficiency_class_min',
2309
- 'energy_efficiency_class_max',
2310
- ),
2311
- 'prefix' => array(
2312
- '',
2313
- '',
2314
- '',
2315
- '',
2316
- '',
2317
- '',
2318
- '',
2319
- '',
2320
- '',
2321
- '',
2322
- '',
2323
- '',
2324
- '',
2325
- '',
2326
- '',
2327
- '',
2328
- '',
2329
- '',
2330
- '',
2331
- '',
2332
- '',
2333
- '',
2334
- '',
2335
- '',
2336
- '',
2337
- '',
2338
- ),
2339
- 'type' => array(
2340
- 'pattern',
2341
- 'attribute',
2342
- 'attribute',
2343
- 'attribute',
2344
- 'attribute',
2345
- 'attribute',
2346
- 'attribute',
2347
- 'pattern',
2348
- 'pattern',
2349
- 'pattern',
2350
- 'pattern',
2351
- 'attribute',
2352
- 'attribute',
2353
- 'attribute',
2354
- 'pattern',
2355
- 'pattern',
2356
- 'pattern',
2357
- 'pattern',
2358
- 'pattern',
2359
- 'pattern',
2360
- 'pattern',
2361
- 'pattern',
2362
- 'pattern',
2363
- 'pattern',
2364
- 'pattern',
2365
- 'pattern',
2366
- ),
2367
- 'attributes' => array(
2368
- '',
2369
- 'id',
2370
- 'title',
2371
- 'description',
2372
- 'image',
2373
- 'condition',
2374
- 'sku',
2375
- '',
2376
- '',
2377
- '',
2378
- '',
2379
- 'price',
2380
- 'sale_price',
2381
- 'sale_price_effective_date',
2382
- '',
2383
- '',
2384
- '',
2385
- '',
2386
- '',
2387
- '',
2388
- '',
2389
- '',
2390
- '',
2391
- '',
2392
- '',
2393
- '',
2394
- ),
2395
- 'default' => array(
2396
- ' ',
2397
- '',
2398
- '',
2399
- '',
2400
- '',
2401
- '',
2402
- '',
2403
- '',
2404
- '',
2405
- '',
2406
- '',
2407
- '',
2408
- '',
2409
- '',
2410
- '',
2411
- '',
2412
- '',
2413
- '',
2414
- '',
2415
- '',
2416
- '',
2417
- '',
2418
- '',
2419
- '',
2420
- '',
2421
- '',
2422
- ),
2423
- 'suffix' => array(
2424
- '',
2425
- '',
2426
- '',
2427
- '',
2428
- '',
2429
- '',
2430
- '',
2431
- '',
2432
- '',
2433
- '',
2434
- '',
2435
- '',
2436
- '',
2437
- '',
2438
- '',
2439
- '',
2440
- '',
2441
- '',
2442
- '',
2443
- '',
2444
- '',
2445
- '',
2446
- '',
2447
- '',
2448
- '',
2449
- '',
2450
- ),
2451
- 'output_type' => array(
2452
- '1',
2453
- '1',
2454
- '1',
2455
- '1',
2456
- '1',
2457
- '1',
2458
- '1',
2459
- '1',
2460
- '1',
2461
- '1',
2462
- '1',
2463
- '1',
2464
- '1',
2465
- '1',
2466
- '1',
2467
- '1',
2468
- '1',
2469
- '1',
2470
- '1',
2471
- '1',
2472
- '1',
2473
- '1',
2474
- '1',
2475
- '1',
2476
- '1',
2477
- '1',
2478
- ),
2479
- 'limit' => array(
2480
- '',
2481
- '',
2482
- '',
2483
- '',
2484
- '',
2485
- '',
2486
- '',
2487
- '',
2488
- '',
2489
- '',
2490
- '',
2491
- '',
2492
- '',
2493
- '',
2494
- '',
2495
- '',
2496
- '',
2497
- '',
2498
- '',
2499
- '',
2500
- '',
2501
- '',
2502
- '',
2503
- '',
2504
- '',
2505
- '',
2506
- ),
2507
- ),
2508
- 'idealo' => array(
2509
- 'mattributes' => array(
2510
- 'Article number in shop',
2511
- 'EAN',
2512
- 'MPN',
2513
- 'Manufacturer',
2514
- 'Product name',
2515
- 'Price',
2516
- 'Delivery time',
2517
- 'Product group in shop',
2518
- 'Product description',
2519
- 'Product characteristics',
2520
- 'Product URL',
2521
- 'Image URL',
2522
- 'Colour',
2523
- 'Size',
2524
- 'Cash in advance',
2525
- 'Unit price',
2526
- 'Energy efficiency rating',
2527
- ),
2528
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2529
- 'type' => array(
2530
- 'attribute',
2531
- 'attribute',
2532
- 'attribute',
2533
- 'attribute',
2534
- 'attribute',
2535
- 'attribute',
2536
- 'attribute',
2537
- 'attribute',
2538
- 'attribute',
2539
- 'attribute',
2540
- 'attribute',
2541
- 'attribute',
2542
- 'attribute',
2543
- 'attribute',
2544
- 'attribute',
2545
- 'attribute',
2546
- 'attribute',
2547
- ),
2548
- 'attributes' => array(
2549
- '',
2550
- '',
2551
- '',
2552
- '',
2553
- 'title',
2554
- 'price',
2555
- '',
2556
- 'product_type',
2557
- 'description',
2558
- '',
2559
- 'link',
2560
- 'image',
2561
- '',
2562
- '',
2563
- '',
2564
- '',
2565
- '',
2566
- ),
2567
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2568
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2569
- 'output_type' => array(
2570
- '1',
2571
- '1',
2572
- '1',
2573
- '1',
2574
- '1',
2575
- '1',
2576
- '1',
2577
- '1',
2578
- '1',
2579
- '1',
2580
- '1',
2581
- '1',
2582
- '1',
2583
- '1',
2584
- '1',
2585
- '1',
2586
- '1',
2587
- ),
2588
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2589
- ),
2590
- 'pricespy' => array(
2591
- 'mattributes' => array(
2592
- 'Product-name',
2593
- 'Your-item-number',
2594
- 'category',
2595
- 'price-including-gst',
2596
- 'Product-URL',
2597
- 'manufacturer',
2598
- 'manufacturer-SKU',
2599
- 'shipping',
2600
- 'image-URL',
2601
- 'stock status',
2602
- ),
2603
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '' ),
2604
- 'type' => array(
2605
- 'attribute',
2606
- 'attribute',
2607
- 'attribute',
2608
- 'attribute',
2609
- 'attribute',
2610
- 'pattern',
2611
- 'attribute',
2612
- 'pattern',
2613
- 'attribute',
2614
- 'attribute',
2615
- ),
2616
- 'attributes' => array(
2617
- 'title',
2618
- 'id',
2619
- 'product_type',
2620
- 'price',
2621
- 'link',
2622
- '',
2623
- 'sku',
2624
- '',
2625
- 'image',
2626
- 'condition',
2627
- ),
2628
- 'default' => array( '', '', '', '', '', '', '', '', 'mens, womens', '' ),
2629
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '' ),
2630
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2631
- 'limit' => array( '', '', '', '', '', '', '', '', '', '' ),
2632
- ),
2633
- 'yandex_csv' => array(
2634
- 'mattributes' => array(
2635
- 'id',
2636
- 'available',
2637
- 'price',
2638
- 'currencyId',
2639
- 'category',
2640
- 'picture',
2641
- 'name',
2642
- 'description',
2643
- ),
2644
- 'prefix' => array( '', '', '', '', '', '', '', '' ),
2645
- 'type' => array(
2646
- 'attribute',
2647
- 'attribute',
2648
- 'attribute',
2649
- 'pattern',
2650
- 'attribute',
2651
- 'attribute',
2652
- 'attribute',
2653
- 'attribute',
2654
- ),
2655
- 'attributes' => array(
2656
- 'id',
2657
- 'availability',
2658
- 'price',
2659
- '',
2660
- 'product_type',
2661
- 'image',
2662
- 'title',
2663
- 'description',
2664
- ),
2665
- 'default' => array( '', '', '', 'RUR', '', '', '', '' ),
2666
- 'suffix' => array( '', '', '', '', '', '', '', '' ),
2667
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1' ),
2668
- 'limit' => array( '', '', '', '', '', '', '', '' ),
2669
- ),
2670
- 'fyndiq.se' => array(
2671
- 'mattributes' => array(
2672
- 'product-id',
2673
- 'product-title',
2674
- 'product-description',
2675
- 'product-market',
2676
- 'product-currency',
2677
- 'product-price',
2678
- 'product-oldprice',
2679
- 'product-var-percent',
2680
- 'product-image-1-url',
2681
- 'product-image-1-identifier',
2682
- 'article-sku',
2683
- 'article-quantity',
2684
- 'article-name',
2685
- ),
2686
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2687
- 'type' => array(
2688
- 'attribute',
2689
- 'attribute',
2690
- 'attribute',
2691
- 'attribute',
2692
- 'pattern',
2693
- 'attribute',
2694
- 'attribute',
2695
- 'attribute',
2696
- 'attribute',
2697
- 'attribute',
2698
- 'attribute',
2699
- 'attribute',
2700
- 'attribute',
2701
- ),
2702
- 'attributes' => array(
2703
- 'id',
2704
- 'title',
2705
- 'description',
2706
- '',
2707
- '',
2708
- 'price',
2709
- '',
2710
- '',
2711
- 'image',
2712
- '',
2713
- 'sku',
2714
- 'quantity',
2715
- '',
2716
- ),
2717
- 'default' => array( '', '', '', '', 'USD', '', '', '', '', '', '', '', '' ),
2718
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2719
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2720
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2721
- ),
2722
- 'miinto.nl' => array(
2723
- 'mattributes' => array(
2724
- 'gtin',
2725
- 'item_group_id',
2726
- 'brand',
2727
- 'title',
2728
- 'product_type',
2729
- 'gender',
2730
- 'color',
2731
- 'size',
2732
- 'image_link',
2733
- 'stock_level',
2734
- 'season_tag',
2735
- 'description',
2736
- 'material',
2737
- 'washing',
2738
- 'retail_price_currencyCode',
2739
- ),
2740
- 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2741
- 'type' => array(
2742
- 'attribute',
2743
- 'attribute',
2744
- 'attribute',
2745
- 'attribute',
2746
- 'attribute',
2747
- 'attribute',
2748
- 'attribute',
2749
- 'attribute',
2750
- 'attribute',
2751
- 'attribute',
2752
- 'attribute',
2753
- 'attribute',
2754
- 'attribute',
2755
- 'attribute',
2756
- 'attribute',
2757
- ),
2758
- 'attributes' => array(
2759
- '',
2760
- 'item_group_id',
2761
- '',
2762
- 'title',
2763
- 'product_type',
2764
- '',
2765
- '',
2766
- '',
2767
- 'image',
2768
- 'quantity',
2769
- '',
2770
- 'description',
2771
- '',
2772
- '',
2773
- '',
2774
- ),
2775
- 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2776
- 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2777
- 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2778
- 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2779
- ),
2780
- );
2781
 
2782
  //adroll - smartly.io google
2783
  //admarkt custom 2
2784
 
2785
  public function __construct( $merchant = null ) {
 
2786
  $this->merchant = $merchant;
 
 
2787
  }
2788
 
 
 
 
 
 
2789
  public function get_merchant_template() {
2790
  if ( ! is_null( $this->merchant ) && array_key_exists( $this->merchant, $this->templates ) ) {
2791
  return $this->templates[ $this->merchant ];
@@ -2794,187 +80,3131 @@ class Woo_Feed_Merchant {
2794
  return false;
2795
  }
2796
 
 
 
 
 
 
2797
  public function get_default_template() {
2798
  return $this->templates['default'];
2799
  }
2800
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2801
  /**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2802
  *
 
 
 
2803
  */
2804
- public function merchantInfo() {
 
 
2805
 
2806
- # Follow this common format($info) to add merchant info
2807
- // $info = array(
2808
- // 'link' => '', # Merchant's feed specification url
2809
- // 'doc' => array( # Plugin documentation for this merchant
2810
- // 'link label"=>"link',
2811
- // "link label"=>"link"
2812
- // ),
2813
- // 'video' => '', # Video tutorial to make feed for this merchant
2814
- // 'feed_file_type' => array(), # Feed file type (XML or CSV or TXT). Can be multiple.
2815
- // );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2816
 
2817
  $merchant_info = array(
2818
-
2819
-
2820
-
2821
- "google" => array(
2822
- "link" => "http://bit.ly/38kmDrl",
2823
- "video" => "https://youtu.be/PTUYgF7DwEo",
2824
- "feed_file_type" => array( "XML", "CSV", "TXT" ),
2825
- "doc" => array(
2826
- "How to make google merchant feed?" => "http://bit.ly/355q0jY",
2827
- "How to configure shipping info?" => "http://bit.ly/2Rzr0sI",
2828
- "How to set price with tax?" => "http://bit.ly/2PuzWga",
2829
- "How to solve micro data error?" => "http://bit.ly/345nIQz",
2830
- "How to configure google product categories?" => "http://bit.ly/2RFWRrP",
2831
  ),
2832
  ), // Google.
2833
- "google_local" => '',
2834
- "google_local_inventory" => '',
2835
- "adwords" => '',
2836
- "facebook" => array(
2837
- "link" => "http://bit.ly/2P5cA1V",
2838
- "video" => "https://youtu.be/Wo3V_nf_eUU",
2839
- "feed_file_type" => array( "XML", "CSV", "TXT" ),
2840
- "doc" => array(
2841
- "How to configure google product categories?" => "http://bit.ly/2RFWRrP",
2842
  ),
2843
  ), // Facebook.
2844
- "pinterest" => array(
2845
- "link" => "http://bit.ly/35h6YXG",
2846
- "feed_file_type" => array( "XML", "CSV", "TXT" ),
2847
- "doc" => array(
2848
- "How to configure google product categories?" => "http://bit.ly/2RFWRrP",
2849
  ),
2850
  ), // Pinterest.
2851
- "bing" => array(
2852
- "link" => "http://bit.ly/33ZeuVS",
2853
- "feed_file_type" => array( "XML", "CSV", "TXT" ),
2854
  ), // Bing.
2855
- "pricespy" => array(
2856
- "link" => "http://bit.ly/2t0rEFm",
2857
- "feed_file_type" => array( "TXT" ),
2858
  ), // PriceSpy.
2859
- "prisjakt" => array(
2860
- "link" => "http://bit.ly/36iRT8a",
2861
- "feed_file_type" => array( "TXT" ),
2862
  ), // Prisjakt.
2863
- "idealo" => array(
2864
- "link" => "http://bit.ly/2LDgJI0",
2865
- "feed_file_type" => array( "CSV", "TXT" ),
2866
  ), // Idealo.
2867
- "yandex_csv" => array(
2868
- "link" => "http://bit.ly/2t0tsy8",
2869
- "feed_file_type" => array( "CSV", "TXT" ),
2870
  ), // Yandex (CSV).
2871
- "yandex_xml" => array(
2872
- "link" => "http://bit.ly/2P3pFbH",
2873
- "feed_file_type" => array( "XML" ),
2874
- ), // Yandex (XML).
2875
- "adroll" => array(
2876
- "link" => "http://bit.ly/2qzPtmt",
2877
- "feed_file_type" => array( "CSV", "XML" ),
2878
  ), // adroll
2879
- "adform" => array(
2880
- "link" => "http://bit.ly/2s6yatQ",
2881
- "feed_file_type" => array( "CSV", "XML" ),
2882
  ), // adform
2883
- "kelkoo" => array(
2884
- "link" => "http://bit.ly/2RAcqkL",
2885
- "feed_file_type" => array( "CSV", "XML" ),
2886
  ), // Kelkoo.
2887
- "shopmania" => array(
2888
- "link" => "http://bit.ly/38pE2PA",
2889
- "feed_file_type" => array( "CSV", "XML" ),
2890
  ), // Shop Mania.
2891
- "connexity" => array(
2892
- "link" => "http://bit.ly/36lPaLw",
2893
- "feed_file_type" => array( "TXT" ),
2894
  ), // Connexity.
2895
- "twenga" => array(
2896
- "link" => "http://bit.ly/2RwTIud",
2897
- "feed_file_type" => array( "XML", "TXT" ),
2898
  ), // Twenga.
2899
- "fruugo" => array(
2900
- "link" => "http://bit.ly/2Yxabjn",
2901
- "feed_file_type" => array( "XML", "CSV" ),
2902
  ), // Fruugo.
2903
- "fruugo.au" => array(
2904
- "link" => "http://bit.ly/2Yxabjn",
2905
- "feed_file_type" => array( "XML", "CSV" ),
2906
  ), // Fruugo Australia.
2907
- "pricerunner" => array(
2908
- "link" => "http://bit.ly/2Pznn3s",
2909
- "feed_file_type" => array( "XML", "CSV", "TXT" ),
2910
  ), // Price Runner.
2911
- "bonanza" => array(
2912
- "link" => "http://bit.ly/2Rxi9aK",
2913
- "feed_file_type" => array( "CSV" ),
2914
  ), // Bonanza
2915
- "bol" => array(
2916
- "link" => "http://bit.ly/2P3MUCu",
2917
- "feed_file_type" => array( "XML", "CSV" ),
2918
  ), // Bol.
2919
- "wish" => array(
2920
- "link" => "http://bit.ly/348iYtc",
2921
- "feed_file_type" => array( "CSV" ),
2922
  ), // Wish.com.
2923
- "myshopping.com.au" => array(
2924
- "link" => "http://bit.ly/2E6jugI",
2925
- "feed_file_type" => array( "CSV", "TXT", "XML" ),
2926
  ), // Myshopping.com.au.
2927
- "skinflint.co.uk" => array(
2928
- "link" => "http://bit.ly/2sg09qJ",
2929
- "feed_file_type" => array( "CSV" ),
2930
  ), // SkinFlint.co.uk.
2931
- "yahoo_nfa" => array(
2932
- "link" => "http://bit.ly/2LCC58k",
2933
- "feed_file_type" => array( "CSV", "TXT", "XML" ),
2934
  ), // Yahoo NFA.
2935
- "comparer.be" => array(
2936
- "link" => "http://bit.ly/38xz2sa",
2937
- "feed_file_type" => array( "CSV", "XML" ),
2938
  ), // Comparer.be.
2939
- "rakuten.de" => array(
2940
- "link" => "http://bit.ly/2YCDdym",
2941
- "feed_file_type" => array( "CSV", "TXT" ),
2942
  ), // rakuten.
2943
- "avantlink" => array(
2944
- "link" => "http://bit.ly/2PuExPv",
2945
- "feed_file_type" => array( "CSV", "TXT", "XML" ),
2946
  ), // Avantlink
2947
- "shareasale" => array(
2948
- "link" => "http://bit.ly/36uT1pF",
2949
- "feed_file_type" => array( "CSV", "TXT", "XML" ),
2950
  ), // ShareASale.
 
 
 
2951
  );
2952
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2953
  return $merchant_info;
2954
  }
2955
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2956
  /**
2957
  * Get Merchant Info
 
 
 
2958
  * @param string $merchant
2959
  *
2960
  * @return array
2961
  */
2962
  public function getInfo( $merchant = '' ) {
2963
- $infos = $this->merchantInfo();
2964
- $info = ( isset( $infos[ $merchant ] ) && ! empty( $infos[ $merchant ] ) ) ? $infos[ $merchant ] : [];
2965
- /**
2966
- * Filter single merchant data before retrieve
2967
- * @param array $info
2968
- * @param string $merchant
2969
- */
2970
- $info = apply_filters( 'woo_feed_merchant_info', $info, $merchant );
2971
-
2972
- // ensure common data structure
2973
- return wp_parse_args( $info, [
2974
- 'link' => '',
2975
- 'video' => '',
2976
- 'feed_file_type' => [],
2977
- 'doc' => [],
2978
- ] );
2979
  }
2980
  }
8
 
9
  class Woo_Feed_Merchant {
10
 
11
+ /**
12
+ * Merchant Templates
13
+ * @var array
14
+ */
15
+ private $templates;
16
+
17
+ /**
18
+ * Current Merchant
19
+ * @var string
20
+ */
21
+ private $merchant;
22
+
23
+ /**
24
+ * Current Template
25
+ * @var array
26
+ */
27
+ private $template_raw;
28
+
29
+ /**
30
+ * Parsed Template (Rules) For rendering create form
31
+ * @var array
32
+ */
33
+ private $template;
34
+
35
+ /**
36
+ * Allowed Feed Type for current Merchant
37
+ * @var array
38
+ */
39
+ private $feed_types;
40
+
41
+ /**
42
+ * Current Merchant Info
43
+ * @var array
44
+ */
45
+ private $info;
46
+
47
+ /**
48
+ * is default template.
49
+ * Flag that indicates if merchant template not exists and fallback to default template.
50
+ * @var bool
51
+ */
52
+ private $is_default_template = false;
53
+
54
+ /**
55
+ * Woo_Feed_Merchant constructor.
56
+ *
57
+ * @param string $merchant
58
+ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
  //adroll - smartly.io google
61
  //admarkt custom 2
62
 
63
  public function __construct( $merchant = null ) {
64
+ $this->merchant_templates();
65
  $this->merchant = $merchant;
66
+ $this->get_template_raw();
67
+ $this->merchantInfo();
68
  }
69
 
70
+ /**
71
+ * Get Merchant Template
72
+ * @deprecated 3.3.7
73
+ * @return bool|array
74
+ */
75
  public function get_merchant_template() {
76
  if ( ! is_null( $this->merchant ) && array_key_exists( $this->merchant, $this->templates ) ) {
77
  return $this->templates[ $this->merchant ];
80
  return false;
81
  }
82
 
83
+ /**
84
+ * Get Default template (blank template with some attribute for creating a base config).
85
+ * @deprecated 3.3.7
86
+ * @return array
87
+ */
88
  public function get_default_template() {
89
  return $this->templates['default'];
90
  }
91
 
92
+ public function get_template_raw() {
93
+ if ( is_array( $this->template_raw ) ) {
94
+ return $this->template_raw;
95
+ }
96
+
97
+ if ( ! is_null( $this->merchant ) && array_key_exists( $this->merchant, $this->templates ) ) {
98
+ $this->template_raw = $this->templates[ $this->merchant ];
99
+ } else {
100
+ $this->is_default_template = true;
101
+
102
+ $this->template_raw = $this->templates['default'];
103
+ }
104
+
105
+ return $this->template_raw;
106
+ }
107
+
108
  /**
109
+ * Get Merchant template with fallback to default template.
110
+ * @return array
111
+ */
112
+ public function get_template() {
113
+ if ( is_array( $this->template ) ) {
114
+ return $this->template;
115
+ }
116
+ $this->template = array_merge( $this->template_raw, [
117
+ 'provider' => $this->merchant,
118
+ 'feedType' => $this->get_feed_types( true ),
119
+ ] );
120
+ $this->template = woo_feed_parse_feed_rules( $this->template, 'create' );
121
+ return $this->template;
122
+ }
123
+
124
+ /**
125
+ * Get Feed Types
126
  *
127
+ * @param bool $default get the default type
128
+ *
129
+ * @return string[]|string|false
130
  */
131
+ public function get_feed_types( $default = false ) {
132
+
133
+ if ( false === $default ) return $this->feed_types;
134
 
135
+ return reset( $this->feed_types );
136
+ }
137
+
138
+ /**
139
+ * Get Selected Merchant Name (slug)
140
+ * @return string|null
141
+ */
142
+ public function get_name() {
143
+ return $this->merchant;
144
+ }
145
+
146
+ /**
147
+ * check if fallback to default template
148
+ * @return bool
149
+ */
150
+ public function is_default_template() {
151
+ return $this->is_default_template;
152
+ }
153
+
154
+ /**
155
+ * Get Merchant Info
156
+ * @return array
157
+ */
158
+ public function get_info() {
159
+ return $this->info;
160
+ }
161
+
162
+ /**
163
+ * Merchant info array
164
+ * Follow this common format to add new merchant info
165
+ * [
166
+ * 'link' => '', # Merchant's feed specification url
167
+ * 'video' => '', # Video tutorial to make feed for this merchant
168
+ * 'doc' => array( # Plugin documentation for this merchant
169
+ * esc_html__( 'link label 1', 'woo-feed' ) => 'https://link1',
170
+ * esc_html__( 'link label 2', 'woo-feed' ) => 'https://link2',
171
+ * ),
172
+ * 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ), # Feed file type (XML or CSV or TXT). Can be multiple.
173
+ * ];
174
+ *
175
+ */
176
+ private function merchantInfo() {
177
 
178
  $merchant_info = array(
179
+ 'google' => array(
180
+ 'link' => 'http://bit.ly/38kmDrl',
181
+ 'video' => 'https://youtu.be/PTUYgF7DwEo',
182
+ 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ),
183
+ 'doc' => array(
184
+ esc_html__( 'How to make google merchant feed?', 'woo-feed' ) => 'http://bit.ly/355q0jY',
185
+ esc_html__( 'How to configure shipping info?', 'woo-feed' ) => 'http://bit.ly/2Rzr0sI',
186
+ esc_html__( 'How to set price with tax?', 'woo-feed' ) => 'http://bit.ly/2PuzWga',
187
+ esc_html__( 'How to solve micro data error?', 'woo-feed' ) => 'http://bit.ly/345nIQz',
188
+ esc_html__( 'How to configure google product categories?', 'woo-feed' ) => 'http://bit.ly/2RFWRrP',
 
 
 
189
  ),
190
  ), // Google.
191
+ 'google_local' => '',
192
+ 'google_local_inventory' => '',
193
+ 'adwords' => '',
194
+ 'facebook' => array(
195
+ 'link' => 'http://bit.ly/2P5cA1V',
196
+ 'video' => 'https://youtu.be/Wo3V_nf_eUU',
197
+ 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ),
198
+ 'doc' => array(
199
+ esc_html__( 'How to configure google product categories?', 'woo-feed' ) => 'http://bit.ly/2RFWRrP',
200
  ),
201
  ), // Facebook.
202
+ 'pinterest' => array(
203
+ 'link' => 'http://bit.ly/35h6YXG',
204
+ 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ),
205
+ 'doc' => array(
206
+ esc_html__( 'How to configure google product categories?', 'woo-feed' ) => 'http://bit.ly/2RFWRrP',
207
  ),
208
  ), // Pinterest.
209
+ 'bing' => array(
210
+ 'link' => 'http://bit.ly/33ZeuVS',
211
+ 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ),
212
  ), // Bing.
213
+ 'pricespy' => array(
214
+ 'link' => 'http://bit.ly/2t0rEFm',
215
+ 'feed_file_type' => array( 'TXT' ),
216
  ), // PriceSpy.
217
+ 'prisjakt' => array(
218
+ 'link' => 'http://bit.ly/36iRT8a',
219
+ 'feed_file_type' => array( 'TXT' ),
220
  ), // Prisjakt.
221
+ 'idealo' => array(
222
+ 'link' => 'http://bit.ly/2LDgJI0',
223
+ 'feed_file_type' => array( 'CSV', 'TXT' ),
224
  ), // Idealo.
225
+ 'yandex_csv' => array(
226
+ 'link' => 'http://bit.ly/2t0tsy8',
227
+ 'feed_file_type' => array( 'CSV', 'TXT' ),
228
  ), // Yandex (CSV).
229
+ 'adroll' => array(
230
+ 'link' => 'http://bit.ly/2qzPtmt',
231
+ 'feed_file_type' => array( 'XML', 'CSV' ),
 
 
 
 
232
  ), // adroll
233
+ 'adform' => array(
234
+ 'link' => 'http://bit.ly/2s6yatQ',
235
+ 'feed_file_type' => array( 'XML', 'CSV' ),
236
  ), // adform
237
+ 'kelkoo' => array(
238
+ 'link' => 'http://bit.ly/2RAcqkL',
239
+ 'feed_file_type' => array( 'XML', 'CSV' ),
240
  ), // Kelkoo.
241
+ 'shopmania' => array(
242
+ 'link' => 'http://bit.ly/38pE2PA',
243
+ 'feed_file_type' => array( 'XML', 'CSV' ),
244
  ), // Shop Mania.
245
+ 'connexity' => array(
246
+ 'link' => 'http://bit.ly/36lPaLw',
247
+ 'feed_file_type' => array( 'TXT' ),
248
  ), // Connexity.
249
+ 'twenga' => array(
250
+ 'link' => 'http://bit.ly/2RwTIud',
251
+ 'feed_file_type' => array( 'XML', 'TXT' ),
252
  ), // Twenga.
253
+ 'fruugo' => array(
254
+ 'link' => 'http://bit.ly/2Yxabjn',
255
+ 'feed_file_type' => array( 'XML', 'CSV' ),
256
  ), // Fruugo.
257
+ 'fruugo.au' => array(
258
+ 'link' => 'http://bit.ly/2Yxabjn',
259
+ 'feed_file_type' => array( 'XML', 'CSV' ),
260
  ), // Fruugo Australia.
261
+ 'pricerunner' => array(
262
+ 'link' => 'http://bit.ly/2Pznn3s',
263
+ 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ),
264
  ), // Price Runner.
265
+ 'bonanza' => array(
266
+ 'link' => 'http://bit.ly/2Rxi9aK',
267
+ 'feed_file_type' => array( 'CSV' ),
268
  ), // Bonanza
269
+ 'bol' => array(
270
+ 'link' => 'http://bit.ly/2P3MUCu',
271
+ 'feed_file_type' => array( 'XML', 'CSV' ),
272
  ), // Bol.
273
+ 'wish' => array(
274
+ 'link' => 'http://bit.ly/348iYtc',
275
+ 'feed_file_type' => array( 'CSV' ),
276
  ), // Wish.com.
277
+ 'myshopping.com.au' => array(
278
+ 'link' => 'http://bit.ly/2E6jugI',
279
+ 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ),
280
  ), // Myshopping.com.au.
281
+ 'skinflint.co.uk' => array(
282
+ 'link' => 'http://bit.ly/2sg09qJ',
283
+ 'feed_file_type' => array( 'CSV' ),
284
  ), // SkinFlint.co.uk.
285
+ 'yahoo_nfa' => array(
286
+ 'link' => 'http://bit.ly/2LCC58k',
287
+ 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ),
288
  ), // Yahoo NFA.
289
+ 'comparer.be' => array(
290
+ 'link' => 'http://bit.ly/38xz2sa',
291
+ 'feed_file_type' => array( 'XML', 'CSV' ),
292
  ), // Comparer.be.
293
+ 'rakuten.de' => array(
294
+ 'link' => 'http://bit.ly/2YCDdym',
295
+ 'feed_file_type' => array( 'CSV', 'TXT' ),
296
  ), // rakuten.
297
+ 'avantlink' => array(
298
+ 'link' => 'http://bit.ly/2PuExPv',
299
+ 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ),
300
  ), // Avantlink
301
+ 'shareasale' => array(
302
+ 'link' => 'http://bit.ly/36uT1pF',
303
+ 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ),
304
  ), // ShareASale.
305
+ 'trovaprezzi' => array(
306
+ 'feed_file_type' => array( 'XML', 'CSV', 'TXT' ),
307
+ ), // trovaprezzi.it.
308
  );
309
 
310
+ $this->info = ( isset( $merchant_info[ $this->merchant ] ) ) ? $merchant_info[ $this->merchant ] : [];
311
+ // ensure common data structure
312
+ $this->info = wp_parse_args( $this->info, [
313
+ 'link' => '',
314
+ 'video' => '',
315
+ 'feed_file_type' => [],
316
+ 'doc' => [],
317
+ ] );
318
+
319
+ $this->feed_types = ( false === $this->is_default_template ) ? $this->info['feed_file_type'] : [ 'XML', 'CSV', 'TXT' ];
320
+
321
+ /**
322
+ * Filter single merchant data before retrieve
323
+ * @param array $feed_types
324
+ * @param string $merchant
325
+ */
326
+ $this->feed_types = apply_filters( 'woo_feed_get_feed_types', $this->feed_types, $this->merchant );
327
+
328
+ $this->info['feed_file_type'] = $this->feed_types;
329
+
330
+ /**
331
+ * Filter single merchant data before retrieve
332
+ * @param array $info
333
+ * @param string $merchant
334
+ */
335
+ $this->info = apply_filters( 'woo_feed_get_merchant_info', $this->info, $this->merchant );
336
+
337
  return $merchant_info;
338
  }
339
 
340
+ /**
341
+ * Sets Merchant Templates
342
+ * @return void
343
+ */
344
+ private function merchant_templates() {
345
+
346
+ $this->templates = array(
347
+ 'default' => array(
348
+ 'mattributes' => array(
349
+ 'id',
350
+ 'title',
351
+ 'description',
352
+ 'link',
353
+ 'image_link',
354
+ 'price',
355
+ 'categories',
356
+ 'brand',
357
+ ),
358
+ 'prefix' => array( '', '', '', '', '', '', '', '' ),
359
+ 'type' => array(
360
+ 'attribute',
361
+ 'attribute',
362
+ 'attribute',
363
+ 'attribute',
364
+ 'attribute',
365
+ 'attribute',
366
+ 'attribute',
367
+ 'attribute',
368
+ ),
369
+ 'attributes' => array( 'id', 'title', 'description', 'link', 'image', 'price', 'product_type', '' ),
370
+ 'default' => array( '', '', '', '', '', '', '', '' ),
371
+ 'suffix' => array( '', '', '', '', '', '', '', '' ),
372
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1' ),
373
+ 'limit' => array( '', '', '', '', '', '', '', '' ),
374
+ ),
375
+ 'bol' => array(
376
+ 'mattributes' => array(
377
+ 'EAN',
378
+ 'Internal Reference',
379
+ 'Name',
380
+ 'Product Classification',
381
+ 'Description',
382
+ 'Cover Image URL',
383
+ 'Brand',
384
+ ),
385
+ 'prefix' => array( '', '', '', '', '', '', '' ),
386
+ 'type' => array(
387
+ 'attribute',
388
+ 'attribute',
389
+ 'attribute',
390
+ 'attribute',
391
+ 'attribute',
392
+ 'attribute',
393
+ 'pattern',
394
+ ),
395
+ 'attributes' => array( 'sku', 'id', 'title', 'product_type', 'description', 'image', '' ),
396
+ 'default' => array( '', '', '', '', '', '', '' ),
397
+ 'suffix' => array( '', '', '', '', '', '', '' ),
398
+ 'output_type' => array( '1', '1', '1', '1', '2', '1', '' ),
399
+ 'limit' => array( '', '', '', '', '', '500', '5000' ),
400
+ ),
401
+ 'adform' => array(
402
+ 'mattributes' => array(
403
+ 'product_id',
404
+ 'product_name',
405
+ 'product_category_id',
406
+ 'product_deeplink',
407
+ 'product_image',
408
+ 'product_price',
409
+ ),
410
+ 'prefix' => array( '', '', '', '', '', '' ),
411
+ 'type' => array( 'attribute', 'attribute', 'attribute', 'attribute', 'attribute', 'attribute' ),
412
+ 'attributes' => array( 'id', 'title', 'product_type', 'link', 'image', 'price' ),
413
+ 'default' => array( '', '', '', '', '', '' ),
414
+ 'suffix' => array( '', '', '', '', '', '' ),
415
+ 'output_type' => array( '1', '1', '1', '1', '1', '1' ),
416
+ 'limit' => array( '', '', '', '', '', '' ),
417
+ ),
418
+ 'avantlink' => array(
419
+ 'mattributes' => array(
420
+ 'SKU',
421
+ 'Brand Name',
422
+ 'Product Name',
423
+ 'Long Description',
424
+ 'Category',
425
+ 'Standardized Categorization',
426
+ 'Image URL',
427
+ 'Buy Link',
428
+ 'Retail Price',
429
+ 'Sale Price',
430
+ 'UPC',
431
+ ),
432
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
433
+ 'type' => array(
434
+ 'attribute',
435
+ 'attribute',
436
+ 'attribute',
437
+ 'attribute',
438
+ 'attribute',
439
+ 'attribute',
440
+ 'attribute',
441
+ 'attribute',
442
+ 'attribute',
443
+ 'attribute',
444
+ 'attribute',
445
+ ),
446
+ 'attributes' => array(
447
+ 'sku',
448
+ '',
449
+ 'title',
450
+ 'description',
451
+ 'product_type',
452
+ '',
453
+ 'image',
454
+ 'link',
455
+ 'price',
456
+ 'sale_price',
457
+ '',
458
+ ),
459
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '' ),
460
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
461
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
462
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '' ),
463
+ ),
464
+ 'become' => array(
465
+ 'mattributes' => array(
466
+ 'Unique ID',
467
+ 'Title',
468
+ 'Description',
469
+ 'Category',
470
+ 'Product URL',
471
+ 'Image URL',
472
+ 'Condition',
473
+ 'Availability',
474
+ 'Current Price',
475
+ ),
476
+ 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
477
+ 'type' => array(
478
+ 'attribute',
479
+ 'attribute',
480
+ 'attribute',
481
+ 'attribute',
482
+ 'attribute',
483
+ 'attribute',
484
+ 'attribute',
485
+ 'attribute',
486
+ 'attribute',
487
+ ),
488
+ 'attributes' => array(
489
+ 'id',
490
+ 'title',
491
+ 'description',
492
+ 'product_type',
493
+ 'link',
494
+ 'image',
495
+ 'condition',
496
+ 'availability',
497
+ 'price',
498
+ ),
499
+ 'default' => array( '', '', '', '', '', '', '', '', '' ),
500
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
501
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
502
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
503
+ ),
504
+ 'bonanza' => array(
505
+ 'mattributes' => array(
506
+ 'id',
507
+ 'title',
508
+ 'description',
509
+ 'price',
510
+ 'images',
511
+ 'category',
512
+ 'booth_category',
513
+ 'shipping_price',
514
+ 'shipping_type',
515
+ 'shipping_service',
516
+ 'shipping_lbs',
517
+ 'shipping_oz',
518
+ 'shipping_carrier',
519
+ 'shipping_package',
520
+ 'sku',
521
+ 'worldwide_shipping_price',
522
+ 'worldwide_shipping_type',
523
+ 'worldwide_shipping_carrier',
524
+ 'quantity',
525
+ 'trait',
526
+ 'force_update',
527
+ ),
528
+ 'prefix' => array(
529
+ '',
530
+ '',
531
+ '',
532
+ '',
533
+ '',
534
+ '',
535
+ '',
536
+ '',
537
+ '',
538
+ '',
539
+ '',
540
+ '',
541
+ '',
542
+ '',
543
+ '',
544
+ '',
545
+ '',
546
+ '',
547
+ '',
548
+ '',
549
+ '',
550
+ ),
551
+ 'type' => array(
552
+ 'attribute',
553
+ 'attribute',
554
+ 'attribute',
555
+ 'attribute',
556
+ 'attribute',
557
+ 'pattern',
558
+ 'attribute',
559
+ 'pattern',
560
+ 'pattern',
561
+ 'pattern',
562
+ 'pattern',
563
+ 'pattern',
564
+ 'pattern',
565
+ 'pattern',
566
+ 'attribute',
567
+ 'pattern',
568
+ 'pattern',
569
+ 'pattern',
570
+ 'attribute',
571
+ 'pattern',
572
+ 'pattern',
573
+ ),
574
+ 'attributes' => array(
575
+ 'id',
576
+ 'title',
577
+ 'description',
578
+ 'price',
579
+ 'image',
580
+ '',
581
+ 'product_type',
582
+ '',
583
+ '',
584
+ '',
585
+ '',
586
+ '',
587
+ '',
588
+ '',
589
+ 'sku',
590
+ '',
591
+ '',
592
+ '',
593
+ 'quantity',
594
+ '',
595
+ '',
596
+ ),
597
+ 'default' => array(
598
+ '',
599
+ '',
600
+ '',
601
+ '',
602
+ '',
603
+ '',
604
+ '',
605
+ '',
606
+ '',
607
+ '',
608
+ '',
609
+ '',
610
+ '',
611
+ '',
612
+ '',
613
+ '',
614
+ '',
615
+ '',
616
+ '',
617
+ '',
618
+ '',
619
+ ),
620
+ 'suffix' => array(
621
+ '',
622
+ '',
623
+ '',
624
+ '',
625
+ '',
626
+ '',
627
+ '',
628
+ '',
629
+ '',
630
+ '',
631
+ '',
632
+ '',
633
+ '',
634
+ '',
635
+ '',
636
+ '',
637
+ '',
638
+ '',
639
+ '',
640
+ '',
641
+ '',
642
+ ),
643
+ 'output_type' => array(
644
+ '1',
645
+ '1',
646
+ '1',
647
+ '1',
648
+ '1',
649
+ '1',
650
+ '1',
651
+ '1',
652
+ '1',
653
+ '1',
654
+ '1',
655
+ '1',
656
+ '1',
657
+ '1',
658
+ '1',
659
+ '1',
660
+ '1',
661
+ '1',
662
+ '1',
663
+ '1',
664
+ '1',
665
+ ),
666
+ 'limit' => array(
667
+ '',
668
+ '',
669
+ '',
670
+ '',
671
+ '',
672
+ '',
673
+ '',
674
+ '',
675
+ '',
676
+ '',
677
+ '',
678
+ '',
679
+ '',
680
+ '',
681
+ '',
682
+ '',
683
+ '',
684
+ '',
685
+ '',
686
+ '',
687
+ '',
688
+ ),
689
+ ),
690
+ 'connexity' => array(
691
+ 'mattributes' => array(
692
+ 'Unique ID',
693
+ 'Title',
694
+ 'Description',
695
+ 'Category',
696
+ 'Product URL',
697
+ 'Image URL',
698
+ 'Condition',
699
+ 'Availability',
700
+ 'Current Price',
701
+ ),
702
+ 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
703
+ 'type' => array(
704
+ 'attribute',
705
+ 'attribute',
706
+ 'attribute',
707
+ 'attribute',
708
+ 'attribute',
709
+ 'attribute',
710
+ 'attribute',
711
+ 'attribute',
712
+ 'attribute',
713
+ ),
714
+ 'attributes' => array(
715
+ 'id',
716
+ 'title',
717
+ 'description',
718
+ 'product_type',
719
+ 'link',
720
+ 'image',
721
+ 'condition',
722
+ 'availability',
723
+ 'price',
724
+ ),
725
+ 'default' => array( '', '', '', '', '', '', '', '', '' ),
726
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
727
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
728
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
729
+ ),
730
+ 'criteo' => array(
731
+ 'mattributes' => array(
732
+ 'ID',
733
+ 'title',
734
+ 'description',
735
+ 'google_product_category',
736
+ 'link',
737
+ 'image_link',
738
+ 'additional_image_link',
739
+ 'availability',
740
+ 'price',
741
+ 'sale_price',
742
+ 'gtin',
743
+ 'mpn',
744
+ 'brand',
745
+ 'product_type',
746
+ 'product_type_key',
747
+ 'number_of_reviews',
748
+ 'product_rating',
749
+ 'filters',
750
+ 'adult',
751
+ ),
752
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
753
+ 'type' => array(
754
+ 'attribute',
755
+ 'attribute',
756
+ 'attribute',
757
+ 'attribute',
758
+ 'attribute',
759
+ 'attribute',
760
+ 'attribute',
761
+ 'attribute',
762
+ 'attribute',
763
+ 'attribute',
764
+ 'attribute',
765
+ 'attribute',
766
+ 'attribute',
767
+ 'attribute',
768
+ 'attribute',
769
+ 'attribute',
770
+ 'attribute',
771
+ 'attribute',
772
+ 'attribute',
773
+ ),
774
+ 'attributes' => array(
775
+ 'id',
776
+ 'title',
777
+ 'description',
778
+ 'product_type',
779
+ 'link',
780
+ 'image',
781
+ 'images',
782
+ 'availability',
783
+ 'price',
784
+ 'sale_price',
785
+ '',
786
+ '',
787
+ '',
788
+ '',
789
+ '',
790
+ '',
791
+ '',
792
+ '',
793
+ '',
794
+ ),
795
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
796
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
797
+ 'output_type' => array(
798
+ '1',
799
+ '1',
800
+ '1',
801
+ '1',
802
+ '1',
803
+ '1',
804
+ '1',
805
+ '1',
806
+ '1',
807
+ '1',
808
+ '1',
809
+ '1',
810
+ '1',
811
+ '1',
812
+ '1',
813
+ '1',
814
+ '1',
815
+ '1',
816
+ '1',
817
+ ),
818
+ 'limit' => array(
819
+ '240',
820
+ '150',
821
+ '5000',
822
+ '',
823
+ '1024',
824
+ '2000',
825
+ '2000',
826
+ '25',
827
+ '14',
828
+ '50',
829
+ '50',
830
+ '70',
831
+ '70',
832
+ '500',
833
+ '500',
834
+ '8',
835
+ '8',
836
+ '2000',
837
+ '',
838
+ ),
839
+ ),
840
+ 'crowdfox' => array(
841
+ 'mattributes' => array(
842
+ 'sku ',
843
+ 'image',
844
+ 'name',
845
+ 'price',
846
+ 'ean',
847
+ 'dlv_time',
848
+ 'dlv_cost',
849
+ 'obl_info',
850
+ 'brand',
851
+ 'mpn',
852
+ 'link',
853
+ 'desc',
854
+ 'sell_max',
855
+ 'shop_cat',
856
+ ),
857
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
858
+ 'type' => array(
859
+ 'attribute',
860
+ 'attribute',
861
+ 'attribute',
862
+ 'attribute',
863
+ 'attribute',
864
+ 'pattern',
865
+ 'pattern',
866
+ 'attribute',
867
+ 'pattern',
868
+ 'attribute',
869
+ 'attribute',
870
+ 'attribute',
871
+ 'attribute',
872
+ 'attribute',
873
+ ),
874
+ 'attributes' => array(
875
+ 'sku',
876
+ 'image',
877
+ 'title',
878
+ 'price',
879
+ '',
880
+ '',
881
+ '',
882
+ '',
883
+ '',
884
+ '',
885
+ 'link',
886
+ 'description',
887
+ 'quantity',
888
+ 'product_type',
889
+ ),
890
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
891
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
892
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
893
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
894
+ ),
895
+ 'fruugo' => array(
896
+ 'mattributes' => array(
897
+ 'ProductId',
898
+ 'SkuId',
899
+ 'EAN',
900
+ 'Brand',
901
+ 'Category',
902
+ 'Imageurl1',
903
+ 'StockStatus',
904
+ 'StockQuantity',
905
+ 'Title',
906
+ 'Description',
907
+ 'NormalPriceWithoutVat',
908
+ 'DiscountPriceWithoutVAT',
909
+ 'VatRate',
910
+ 'Currency',
911
+ 'Country',
912
+ ),
913
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
914
+ 'type' => array(
915
+ 'attribute',
916
+ 'attribute',
917
+ 'attribute',
918
+ 'attribute',
919
+ 'attribute',
920
+ 'attribute',
921
+ 'attribute',
922
+ 'attribute',
923
+ 'attribute',
924
+ 'attribute',
925
+ 'attribute',
926
+ 'attribute',
927
+ 'attribute',
928
+ 'pattern',
929
+ 'attribute',
930
+ ),
931
+ 'attributes' => array(
932
+ 'id',
933
+ 'sku',
934
+ '',
935
+ '',
936
+ 'product_type',
937
+ 'image',
938
+ 'availability',
939
+ 'quantity',
940
+ 'title',
941
+ 'description',
942
+ 'price',
943
+ 'sale_price',
944
+ '',
945
+ '',
946
+ '',
947
+ ),
948
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', 'USD', '' ),
949
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
950
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
951
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
952
+ ),
953
+ 'fruugo.au' => array(
954
+ 'mattributes' => array(
955
+ 'ProductId',
956
+ 'SkuId',
957
+ 'EAN',
958
+ 'Brand',
959
+ 'Category',
960
+ 'Imageurl1',
961
+ 'StockStatus',
962
+ 'StockQuantity',
963
+ 'Title',
964
+ 'Description',
965
+ 'NormalPriceWithoutVat',
966
+ 'DiscountPriceWithoutVAT',
967
+ 'VatRate',
968
+ 'Currency',
969
+ 'Country',
970
+ ),
971
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
972
+ 'type' => array(
973
+ 'attribute',
974
+ 'attribute',
975
+ 'attribute',
976
+ 'attribute',
977
+ 'attribute',
978
+ 'attribute',
979
+ 'attribute',
980
+ 'attribute',
981
+ 'attribute',
982
+ 'attribute',
983
+ 'attribute',
984
+ 'attribute',
985
+ 'attribute',
986
+ 'pattern',
987
+ 'attribute',
988
+ ),
989
+ 'attributes' => array(
990
+ 'id',
991
+ 'sku',
992
+ '',
993
+ '',
994
+ 'product_type',
995
+ 'image',
996
+ 'availability',
997
+ 'quantity',
998
+ 'title',
999
+ 'description',
1000
+ 'price',
1001
+ 'sale_price',
1002
+ '',
1003
+ '',
1004
+ '',
1005
+ ),
1006
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', 'USD', '' ),
1007
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1008
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1009
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1010
+ ),
1011
+ 'jet' => array(
1012
+ 'mattributes' => array(
1013
+ 'Merchant SKU ID',
1014
+ 'Unique ID',
1015
+ 'Multi-pack Quantity',
1016
+ 'Product Title',
1017
+ 'Description',
1018
+ 'Image',
1019
+ 'Product Price',
1020
+ 'Jet Category',
1021
+ 'Brand',
1022
+ ),
1023
+ 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
1024
+ 'type' => array(
1025
+ 'attribute',
1026
+ 'attribute',
1027
+ 'pattern',
1028
+ 'attribute',
1029
+ 'attribute',
1030
+ 'attribute',
1031
+ 'attribute',
1032
+ 'pattern',
1033
+ 'pattern',
1034
+ ),
1035
+ 'attributes' => array( 'sku', 'id', '', 'title', 'description', 'image', 'price', '', '' ),
1036
+ 'default' => array( '', '', '', '', '', '', '', '', '' ),
1037
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
1038
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1039
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
1040
+ ),
1041
+ 'kelkoo' => array(
1042
+ 'mattributes' => array(
1043
+ 'title',
1044
+ 'product-url',
1045
+ 'price',
1046
+ 'merchant-category',
1047
+ 'ean',
1048
+ 'delivery-cost',
1049
+ 'brand',
1050
+ 'description',
1051
+ 'image-url',
1052
+ 'availability',
1053
+ 'mpn',
1054
+ ),
1055
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
1056
+ 'type' => array(
1057
+ 'attribute',
1058
+ 'attribute',
1059
+ 'attribute',
1060
+ 'attribute',
1061
+ 'attribute',
1062
+ 'attribute',
1063
+ 'attribute',
1064
+ 'attribute',
1065
+ 'attribute',
1066
+ 'attribute',
1067
+ 'attribute',
1068
+ ),
1069
+ 'attributes' => array(
1070
+ 'title',
1071
+ 'link',
1072
+ 'price',
1073
+ '',
1074
+ '',
1075
+ '',
1076
+ '',
1077
+ 'description',
1078
+ 'image',
1079
+ 'availability',
1080
+ '',
1081
+ ),
1082
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '' ),
1083
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
1084
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1085
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '' ),
1086
+ ),
1087
+ 'kieskeurig.nl' => array(
1088
+ 'mattributes' => array(
1089
+ 'id',
1090
+ 'productgroep',
1091
+ 'merk',
1092
+ 'type',
1093
+ 'toevoeging-type',
1094
+ 'extra-productbeschrijving',
1095
+ 'partnumber',
1096
+ 'ean-code',
1097
+ 'prijs',
1098
+ 'verzendkosten',
1099
+ 'afhaalkosten',
1100
+ 'levertijd',
1101
+ 'deeplink',
1102
+ 'imagelink',
1103
+ 'voorraad',
1104
+ ),
1105
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1106
+ 'type' => array(
1107
+ 'attribute',
1108
+ 'attribute',
1109
+ 'attribute',
1110
+ 'attribute',
1111
+ 'attribute',
1112
+ 'attribute',
1113
+ 'attribute',
1114
+ 'attribute',
1115
+ 'attribute',
1116
+ 'attribute',
1117
+ 'attribute',
1118
+ 'attribute',
1119
+ 'attribute',
1120
+ 'attribute',
1121
+ 'attribute',
1122
+ ),
1123
+ 'attributes' => array(
1124
+ 'id',
1125
+ 'product_type',
1126
+ 'title',
1127
+ 'type',
1128
+ '',
1129
+ 'description',
1130
+ '',
1131
+ '',
1132
+ 'price',
1133
+ '',
1134
+ '',
1135
+ '',
1136
+ 'link',
1137
+ 'image',
1138
+ 'quantity',
1139
+ ),
1140
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1141
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1142
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1143
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1144
+ ),
1145
+ 'kijiji.ca' => array(
1146
+ 'mattributes' => array(
1147
+ 'id',
1148
+ 'title',
1149
+ 'description',
1150
+ 'link',
1151
+ 'image_link',
1152
+ 'price',
1153
+ 'categories',
1154
+ 'brand',
1155
+ ),
1156
+ 'prefix' => array( '', '', '', '', '', '', '', '' ),
1157
+ 'type' => array(
1158
+ 'attribute',
1159
+ 'attribute',
1160
+ 'attribute',
1161
+ 'attribute',
1162
+ 'attribute',
1163
+ 'attribute',
1164
+ 'attribute',
1165
+ 'attribute',
1166
+ ),
1167
+ 'attributes' => array( 'id', 'title', 'description', 'link', 'image', 'price', 'product_type', '' ),
1168
+ 'default' => array( '', '', '', '', '', '', '', '' ),
1169
+ 'suffix' => array( '', '', '', '', '', '', '', '' ),
1170
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1' ),
1171
+ 'limit' => array( '', '', '', '', '', '', '', '' ),
1172
+ ),
1173
+ 'leguide' => array(
1174
+ 'mattributes' => array(
1175
+ 'category',
1176
+ 'unique_id',
1177
+ 'title',
1178
+ 'description',
1179
+ 'price',
1180
+ 'product_URL',
1181
+ 'landing_URL',
1182
+ 'image_URL',
1183
+ 'EAN',
1184
+ 'delivery_charge',
1185
+ 'delivery_time',
1186
+ 'availability',
1187
+ 'guarantee',
1188
+ ),
1189
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1190
+ 'type' => array(
1191
+ 'attribute',
1192
+ 'attribute',
1193
+ 'attribute',
1194
+ 'attribute',
1195
+ 'attribute',
1196
+ 'attribute',
1197
+ 'attribute',
1198
+ 'attribute',
1199
+ 'attribute',
1200
+ 'pattern',
1201
+ 'pattern',
1202
+ 'pattern',
1203
+ 'pattern',
1204
+ ),
1205
+ 'attributes' => array(
1206
+ 'product_type',
1207
+ 'id',
1208
+ 'title',
1209
+ 'description',
1210
+ 'price',
1211
+ 'link',
1212
+ '',
1213
+ 'image',
1214
+ 'sku',
1215
+ '',
1216
+ '',
1217
+ '',
1218
+ '',
1219
+ ),
1220
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1221
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1222
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1223
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1224
+ ),
1225
+ 'modina.de' => array(
1226
+ 'mattributes' => array(
1227
+ 'id',
1228
+ 'brand',
1229
+ 'title',
1230
+ 'description',
1231
+ 'productLink',
1232
+ 'imageLink',
1233
+ 'imageLinkAdditional',
1234
+ 'price',
1235
+ 'priceOld',
1236
+ 'shippingCost',
1237
+ 'shippingDuration',
1238
+ 'availability',
1239
+ 'gtin',
1240
+ 'mpn',
1241
+ 'category',
1242
+ 'subcategory',
1243
+ 'color',
1244
+ 'gender',
1245
+ 'material',
1246
+ 'pattern',
1247
+ 'size',
1248
+ ),
1249
+ 'prefix' => array(
1250
+ '',
1251
+ '',
1252
+ '',
1253
+ '',
1254
+ '',
1255
+ '',
1256
+ '',
1257
+ '',
1258
+ '',
1259
+ '',
1260
+ '',
1261
+ '',
1262
+ '',
1263
+ '',
1264
+ '',
1265
+ '',
1266
+ '',
1267
+ '',
1268
+ '',
1269
+ '',
1270
+ '',
1271
+ ),
1272
+ 'type' => array(
1273
+ 'attribute',
1274
+ 'attribute',
1275
+ 'attribute',
1276
+ 'attribute',
1277
+ 'attribute',
1278
+ 'attribute',
1279
+ 'attribute',
1280
+ 'attribute',
1281
+ 'attribute',
1282
+ 'attribute',
1283
+ 'attribute',
1284
+ 'attribute',
1285
+ 'attribute',
1286
+ 'attribute',
1287
+ 'attribute',
1288
+ 'attribute',
1289
+ 'attribute',
1290
+ 'attribute',
1291
+ 'attribute',
1292
+ 'attribute',
1293
+ 'attribute',
1294
+ ),
1295
+ 'attributes' => array(
1296
+ 'id',
1297
+ '',
1298
+ 'title',
1299
+ 'description',
1300
+ 'link',
1301
+ 'image',
1302
+ 'images',
1303
+ 'price',
1304
+ '',
1305
+ '',
1306
+ '',
1307
+ 'availability',
1308
+ '',
1309
+ '',
1310
+ 'product_type',
1311
+ '',
1312
+ '',
1313
+ '',
1314
+ '',
1315
+ '',
1316
+ '',
1317
+ ),
1318
+ 'default' => array(
1319
+ '',
1320
+ '',
1321
+ '',
1322
+ '',
1323
+ '',
1324
+ '',
1325
+ '',
1326
+ '',
1327
+ '',
1328
+ '',
1329
+ '',
1330
+ '',
1331
+ '',
1332
+ '',
1333
+ '',
1334
+ '',
1335
+ '',
1336
+ '',
1337
+ '',
1338
+ '',
1339
+ '',
1340
+ ),
1341
+ 'suffix' => array(
1342
+ '',
1343
+ '',
1344
+ '',
1345
+ '',
1346
+ '',
1347
+ '',
1348
+ '',
1349
+ '',
1350
+ '',
1351
+ '',
1352
+ '',
1353
+ '',
1354
+ '',
1355
+ '',
1356
+ '',
1357
+ '',
1358
+ '',
1359
+ '',
1360
+ '',
1361
+ '',
1362
+ '',
1363
+ ),
1364
+ 'output_type' => array(
1365
+ '1',
1366
+ '1',
1367
+ '1',
1368
+ '1',
1369
+ '1',
1370
+ '1',
1371
+ '1',
1372
+ '1',
1373
+ '1',
1374
+ '1',
1375
+ '1',
1376
+ '1',
1377
+ '1',
1378
+ '1',
1379
+ '1',
1380
+ '1',
1381
+ '1',
1382
+ '1',
1383
+ '1',
1384
+ '1',
1385
+ '1',
1386
+ ),
1387
+ 'limit' => array(
1388
+ '',
1389
+ '',
1390
+ '',
1391
+ '',
1392
+ '',
1393
+ '',
1394
+ '',
1395
+ '',
1396
+ '',
1397
+ '',
1398
+ '',
1399
+ '',
1400
+ '',
1401
+ '',
1402
+ '',
1403
+ '',
1404
+ '',
1405
+ '',
1406
+ '',
1407
+ '',
1408
+ '',
1409
+ ),
1410
+ ),
1411
+ 'myshopping.com.au' => array(
1412
+ 'mattributes' => array(
1413
+ 'Code',
1414
+ 'Id',
1415
+ 'Name',
1416
+ 'Description',
1417
+ 'Category',
1418
+ 'price',
1419
+ 'Product_URL',
1420
+ 'Image_URL',
1421
+ 'Brand',
1422
+ 'InStock',
1423
+ 'MPN',
1424
+ ),
1425
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
1426
+ 'type' => array(
1427
+ 'pattern',
1428
+ 'attribute',
1429
+ 'attribute',
1430
+ 'attribute',
1431
+ 'attribute',
1432
+ 'attribute',
1433
+ 'attribute',
1434
+ 'attribute',
1435
+ 'attribute',
1436
+ 'pattern',
1437
+ 'attribute',
1438
+ ),
1439
+ 'attributes' => array(
1440
+ '',
1441
+ 'id',
1442
+ 'title',
1443
+ 'description',
1444
+ 'product_type',
1445
+ 'price',
1446
+ 'link',
1447
+ 'image',
1448
+ '',
1449
+ '',
1450
+ 'sku',
1451
+ ),
1452
+ 'default' => array( '', '', '', '', '', '', '', '', '', 'Y', '' ),
1453
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '' ),
1454
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1455
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '' ),
1456
+ ),
1457
+ 'nextag' => array(
1458
+ 'mattributes' => array(
1459
+ 'Manufacturer',
1460
+ 'Product Name',
1461
+ 'Product Description',
1462
+ 'Price',
1463
+ 'Click-Out URL',
1464
+ 'Category',
1465
+ 'Image URL',
1466
+ 'Stock Status',
1467
+ 'Condition',
1468
+ ),
1469
+ 'prefix' => array( '', '', '', '$', '', '', '', '', '' ),
1470
+ 'type' => array(
1471
+ 'pattern',
1472
+ 'attribute',
1473
+ 'attribute',
1474
+ 'attribute',
1475
+ 'attribute',
1476
+ 'attribute',
1477
+ 'attribute',
1478
+ 'attribute',
1479
+ 'attribute',
1480
+ ),
1481
+ 'attributes' => array(
1482
+ '',
1483
+ 'title',
1484
+ 'description',
1485
+ 'price',
1486
+ 'link',
1487
+ 'product_type',
1488
+ 'image',
1489
+ 'availability',
1490
+ 'condition',
1491
+ ),
1492
+ 'default' => array( '', '', '', '', '', '', '', '', '' ),
1493
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
1494
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1495
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
1496
+ ),
1497
+ 'polyvore' => array(
1498
+ 'mattributes' => array(
1499
+ 'title',
1500
+ 'brand',
1501
+ 'url',
1502
+ 'imgurl',
1503
+ 'price',
1504
+ 'currency',
1505
+ 'description',
1506
+ 'subject',
1507
+ ),
1508
+ 'prefix' => array( '', '', '', '', '', '', '', '' ),
1509
+ 'type' => array(
1510
+ 'attribute',
1511
+ 'pattern',
1512
+ 'attribute',
1513
+ 'attribute',
1514
+ 'attribute',
1515
+ 'pattern',
1516
+ 'attribute',
1517
+ 'pattern',
1518
+ ),
1519
+ 'attributes' => array( 'title', '', 'link', 'image', 'price', '', 'description', '' ),
1520
+ 'default' => array( '', '', '', '', '', 'USD', '', '' ),
1521
+ 'suffix' => array( '', '', '', '', '', '', '', '' ),
1522
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1' ),
1523
+ 'limit' => array( '', '', '', '', '', '', '', '' ),
1524
+ ),
1525
+ 'pricegrabber' => array(
1526
+ 'mattributes' => array(
1527
+ 'Retsku',
1528
+ 'Product Title',
1529
+ 'Detailed Description',
1530
+ 'Categorization',
1531
+ 'Product URL',
1532
+ 'Primary Image URL',
1533
+ 'Selling Price',
1534
+ 'Regular Price',
1535
+ 'Condition',
1536
+ 'Availability',
1537
+ 'Manufacturer Name',
1538
+ 'GTIN',
1539
+ ),
1540
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1541
+ 'type' => array(
1542
+ 'attribute',
1543
+ 'attribute',
1544
+ 'attribute',
1545
+ 'attribute',
1546
+ 'attribute',
1547
+ 'attribute',
1548
+ 'attribute',
1549
+ 'attribute',
1550
+ 'attribute',
1551
+ 'attribute',
1552
+ 'attribute',
1553
+ 'attribute',
1554
+ ),
1555
+ 'attributes' => array(
1556
+ 'sku',
1557
+ 'title',
1558
+ 'description',
1559
+ 'product_type',
1560
+ 'link',
1561
+ 'image',
1562
+ 'sale_price',
1563
+ 'price',
1564
+ 'condition',
1565
+ 'availability',
1566
+ '',
1567
+ '',
1568
+ ),
1569
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1570
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1571
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1572
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1573
+ ),
1574
+ 'pricerunner' => array(
1575
+ 'mattributes' => array(
1576
+ 'Category',
1577
+ 'SKU',
1578
+ 'Price',
1579
+ 'Product URL',
1580
+ 'Product name',
1581
+ 'Manufacturer SKU',
1582
+ 'Manufacturer',
1583
+ 'EAN',
1584
+ 'Description',
1585
+ 'Graphic URL',
1586
+ 'In Stock',
1587
+ 'Stock Level',
1588
+ 'Shipping Cost',
1589
+ 'Delivery time',
1590
+ ),
1591
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1592
+ 'type' => array(
1593
+ 'attribute',
1594
+ 'attribute',
1595
+ 'attribute',
1596
+ 'attribute',
1597
+ 'attribute',
1598
+ 'attribute',
1599
+ 'pattern',
1600
+ 'attribute',
1601
+ 'attribute',
1602
+ 'attribute',
1603
+ 'pattern',
1604
+ 'attribute',
1605
+ 'pattern',
1606
+ 'pattern',
1607
+ ),
1608
+ 'attributes' => array(
1609
+ 'product_type',
1610
+ 'id',
1611
+ 'price',
1612
+ 'link',
1613
+ 'title',
1614
+ 'sku',
1615
+ '',
1616
+ 'sku',
1617
+ 'description',
1618
+ 'image',
1619
+ '',
1620
+ 'quantity',
1621
+ '',
1622
+ '',
1623
+ ),
1624
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', 'Yes', '', '10.00', '5-7 days' ),
1625
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1626
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1627
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1628
+ ),
1629
+ 'prisjakt' => array(
1630
+ 'mattributes' => array(
1631
+ 'Produktnamn',
1632
+ 'Art.nr.',
1633
+ 'Kategori',
1634
+ 'Pris inkl.moms',
1635
+ 'Produkt-URL',
1636
+ 'Tillverkare',
1637
+ 'Tillverkar-SKU',
1638
+ 'Frakt',
1639
+ 'Bild-URL',
1640
+ 'Lagerstatus',
1641
+ ),
1642
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '' ),
1643
+ 'type' => array(
1644
+ 'attribute',
1645
+ 'attribute',
1646
+ 'attribute',
1647
+ 'attribute',
1648
+ 'attribute',
1649
+ 'pattern',
1650
+ 'attribute',
1651
+ 'pattern',
1652
+ 'attribute',
1653
+ 'attribute',
1654
+ ),
1655
+ 'attributes' => array(
1656
+ 'title',
1657
+ 'id',
1658
+ 'product_type',
1659
+ 'price',
1660
+ 'link',
1661
+ '',
1662
+ 'sku',
1663
+ '',
1664
+ 'image',
1665
+ 'condition',
1666
+ ),
1667
+ 'default' => array( '', '', '', '', '', '', '', '', 'mens, womens', '' ),
1668
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '' ),
1669
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1670
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '' ),
1671
+ ),
1672
+ 'real' => array(
1673
+ 'mattributes' => array( 'ean', 'category', 'title', 'description', 'picture', 'manufacturer' ),
1674
+ 'prefix' => array( '', '', '', '', '', '' ),
1675
+ 'type' => array( 'attribute', 'attribute', 'attribute', 'attribute', 'attribute', 'pattern' ),
1676
+ 'attributes' => array( 'sku', 'product_type', 'title', 'description', 'image', '' ),
1677
+ 'default' => array( '', '', '', '', '', '' ),
1678
+ 'suffix' => array( '', '', '', '', '', '' ),
1679
+ 'output_type' => array( '1', '1', '1', '1', '1', '1' ),
1680
+ 'limit' => array( '', '', '', '', '', '' ),
1681
+ ),
1682
+ 'shareasale' => array(
1683
+ 'mattributes' => array(
1684
+ 'ProductID',
1685
+ 'Name',
1686
+ 'MerchantID',
1687
+ 'Merchant',
1688
+ 'Link',
1689
+ 'Thumbnail',
1690
+ 'BigImage',
1691
+ 'Price',
1692
+ 'RetailPrice',
1693
+ 'Category',
1694
+ 'Subcategory',
1695
+ 'Description',
1696
+ ),
1697
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1698
+ 'type' => array(
1699
+ 'attribute',
1700
+ 'attribute',
1701
+ 'attribute',
1702
+ 'attribute',
1703
+ 'attribute',
1704
+ 'attribute',
1705
+ 'attribute',
1706
+ 'attribute',
1707
+ 'attribute',
1708
+ 'attribute',
1709
+ 'attribute',
1710
+ 'attribute',
1711
+ ),
1712
+ 'attributes' => array(
1713
+ 'id',
1714
+ 'title',
1715
+ '',
1716
+ '',
1717
+ 'link',
1718
+ 'image',
1719
+ 'feature_image',
1720
+ 'sale_price',
1721
+ 'price',
1722
+ 'product_type',
1723
+ '',
1724
+ 'description',
1725
+ ),
1726
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1727
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
1728
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1729
+ 'limit' => array( '8', '255', '8', '255', '255', '255', '255', '', '', '50', '50', '' ),
1730
+ ),
1731
+ 'shopalike.fr' => array(
1732
+ 'mattributes' => array(
1733
+ 'id',
1734
+ 'title',
1735
+ 'description',
1736
+ 'link',
1737
+ 'image_link',
1738
+ 'price',
1739
+ 'categories',
1740
+ 'brand',
1741
+ ),
1742
+ 'prefix' => array( '', '', '', '', '', '', '', '' ),
1743
+ 'type' => array(
1744
+ 'attribute',
1745
+ 'attribute',
1746
+ 'attribute',
1747
+ 'attribute',
1748
+ 'attribute',
1749
+ 'attribute',
1750
+ 'attribute',
1751
+ 'attribute',
1752
+ ),
1753
+ 'attributes' => array( 'id', 'title', 'description', 'link', 'image', 'price', 'product_type', '' ),
1754
+ 'default' => array( '', '', '', '', '', '', '', '' ),
1755
+ 'suffix' => array( '', '', '', '', '', '', '', '' ),
1756
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1' ),
1757
+ 'limit' => array( '', '', '', '', '', '', '', '' ),
1758
+ ),
1759
+ 'shopbot' => array(
1760
+ 'mattributes' => array(
1761
+ 'ID',
1762
+ 'Product Name',
1763
+ 'URL',
1764
+ 'Category',
1765
+ 'Photo URL',
1766
+ 'Price',
1767
+ 'Original Price',
1768
+ 'Description',
1769
+ 'MPN',
1770
+ 'Brand',
1771
+ 'Shipment Cost',
1772
+ 'Stock',
1773
+ 'Promotional Phrase',
1774
+ 'Model',
1775
+ 'Color',
1776
+ 'Product Type',
1777
+ ),
1778
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1779
+ 'type' => array(
1780
+ 'attribute',
1781
+ 'attribute',
1782
+ 'attribute',
1783
+ 'attribute',
1784
+ 'attribute',
1785
+ 'attribute',
1786
+ 'attribute',
1787
+ 'attribute',
1788
+ 'attribute',
1789
+ 'attribute',
1790
+ 'attribute',
1791
+ 'attribute',
1792
+ 'attribute',
1793
+ 'attribute',
1794
+ 'attribute',
1795
+ 'attribute',
1796
+ ),
1797
+ 'attributes' => array(
1798
+ 'id',
1799
+ 'title',
1800
+ 'link',
1801
+ 'product_type',
1802
+ 'image',
1803
+ 'sale_price',
1804
+ 'price',
1805
+ 'description',
1806
+ 'sku',
1807
+ '',
1808
+ '',
1809
+ 'quantity',
1810
+ '',
1811
+ '',
1812
+ '',
1813
+ '',
1814
+ ),
1815
+ 'default' => array( '', '', '', '', '', '', '', '', 'mens, womens', '', '', '', '', '', '', '' ),
1816
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1817
+ 'output_type' => array(
1818
+ '1',
1819
+ '1',
1820
+ '1',
1821
+ '1',
1822
+ '1',
1823
+ '1',
1824
+ '1',
1825
+ '1',
1826
+ '1',
1827
+ '1',
1828
+ '1',
1829
+ '1',
1830
+ '1',
1831
+ '1',
1832
+ '1',
1833
+ '1',
1834
+ ),
1835
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1836
+ ),
1837
+ 'shopmania' => array(
1838
+ 'mattributes' => array(
1839
+ 'Category',
1840
+ 'Manufacturer',
1841
+ 'Model',
1842
+ 'MPC',
1843
+ 'Name',
1844
+ 'Description',
1845
+ 'URL',
1846
+ 'Image',
1847
+ 'Price',
1848
+ 'Currency',
1849
+ 'Shipping',
1850
+ 'Availability',
1851
+ 'GTIN',
1852
+ ),
1853
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1854
+ 'type' => array(
1855
+ 'attribute',
1856
+ 'attribute',
1857
+ 'attribute',
1858
+ 'attribute',
1859
+ 'attribute',
1860
+ 'attribute',
1861
+ 'attribute',
1862
+ 'attribute',
1863
+ 'attribute',
1864
+ 'attribute',
1865
+ 'attribute',
1866
+ 'attribute',
1867
+ 'attribute',
1868
+ ),
1869
+ 'attributes' => array(
1870
+ 'product_type',
1871
+ '',
1872
+ '',
1873
+ '',
1874
+ 'title',
1875
+ 'description',
1876
+ 'link',
1877
+ 'image',
1878
+ 'price',
1879
+ '',
1880
+ '',
1881
+ 'availability',
1882
+ '',
1883
+ ),
1884
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1885
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1886
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1887
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
1888
+ ),
1889
+ 'shopping' => array(
1890
+ 'mattributes' => array(
1891
+ 'Unique Merchant SKU',
1892
+ 'Product Name',
1893
+ 'Product URL',
1894
+ 'Image URL',
1895
+ 'Current Price',
1896
+ 'Stock Availability',
1897
+ 'Condition',
1898
+ 'MPN',
1899
+ 'UPC',
1900
+ ),
1901
+ 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
1902
+ 'type' => array(
1903
+ 'attribute',
1904
+ 'attribute',
1905
+ 'attribute',
1906
+ 'attribute',
1907
+ 'attribute',
1908
+ 'attribute',
1909
+ 'attribute',
1910
+ 'attribute',
1911
+ 'attribute',
1912
+ ),
1913
+ 'attributes' => array( 'sku', 'title', 'link', 'image', 'price', 'availability', 'condition', '', '' ),
1914
+ 'default' => array( '', '', '', '', '', '', '', '', '' ),
1915
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
1916
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1917
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
1918
+ ),
1919
+ 'shopzilla' => array(
1920
+ 'mattributes' => array(
1921
+ 'Unique ID',
1922
+ 'Title',
1923
+ 'Description',
1924
+ 'Category',
1925
+ 'Product URL',
1926
+ 'Image URL',
1927
+ 'Condition',
1928
+ 'Availability',
1929
+ 'Current Price',
1930
+ ),
1931
+ 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
1932
+ 'type' => array(
1933
+ 'attribute',
1934
+ 'attribute',
1935
+ 'attribute',
1936
+ 'attribute',
1937
+ 'attribute',
1938
+ 'attribute',
1939
+ 'attribute',
1940
+ 'attribute',
1941
+ 'attribute',
1942
+ ),
1943
+ 'attributes' => array(
1944
+ 'id',
1945
+ 'title',
1946
+ 'description',
1947
+ 'product_type',
1948
+ 'link',
1949
+ 'image',
1950
+ 'condition',
1951
+ 'availability',
1952
+ 'price',
1953
+ ),
1954
+ 'default' => array( '', '', '', '', '', '', '', '', '' ),
1955
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
1956
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
1957
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
1958
+ ),
1959
+ 'spartoo.fi' => array(
1960
+ 'mattributes' => array(
1961
+ 'SKU',
1962
+ 'Parent / Child',
1963
+ 'Parent SKU',
1964
+ 'Product name',
1965
+ 'Manufacturer name',
1966
+ 'Gender',
1967
+ 'Product_description',
1968
+ 'Product price',
1969
+ 'Discount price',
1970
+ 'Quantity',
1971
+ 'Category',
1972
+ 'Products selection',
1973
+ 'Photo 1',
1974
+ 'Photo 2',
1975
+ 'Photo 3',
1976
+ 'Photo 4',
1977
+ 'Photo 5',
1978
+ 'Photo 6',
1979
+ 'Photo 7',
1980
+ 'Photo 8',
1981
+ 'Color id',
1982
+ 'Color name',
1983
+ 'Size name',
1984
+ 'ean',
1985
+ ),
1986
+ 'prefix' => array(
1987
+ '',
1988
+ '',
1989
+ '',
1990
+ '',
1991
+ '',
1992
+ '',
1993
+ '',
1994
+ '',
1995
+ '',
1996
+ '',
1997
+ '',
1998
+ '',
1999
+ '',
2000
+ '',
2001
+ '',
2002
+ '',
2003
+ '',
2004
+ '',
2005
+ '',
2006
+ '',
2007
+ '',
2008
+ '',
2009
+ '',
2010
+ '',
2011
+ ),
2012
+ 'type' => array(
2013
+ 'attribute',
2014
+ 'attribute',
2015
+ 'attribute',
2016
+ 'attribute',
2017
+ 'attribute',
2018
+ 'attribute',
2019
+ 'attribute',
2020
+ 'attribute',
2021
+ 'attribute',
2022
+ 'attribute',
2023
+ 'attribute',
2024
+ 'attribute',
2025
+ 'attribute',
2026
+ 'attribute',
2027
+ 'attribute',
2028
+ 'attribute',
2029
+ 'attribute',
2030
+ 'attribute',
2031
+ 'attribute',
2032
+ 'attribute',
2033
+ 'attribute',
2034
+ 'attribute',
2035
+ 'attribute',
2036
+ 'attribute',
2037
+ ),
2038
+ 'attributes' => array(
2039
+ 'sku',
2040
+ 'type',
2041
+ 'parent_sku',
2042
+ 'title',
2043
+ '',
2044
+ '',
2045
+ 'description',
2046
+ 'price',
2047
+ 'sale_price',
2048
+ 'quantity',
2049
+ 'product_type',
2050
+ '',
2051
+ 'image_1',
2052
+ 'image_2',
2053
+ 'image_3',
2054
+ 'image_4',
2055
+ 'image_5',
2056
+ 'image_6',
2057
+ 'image_7',
2058
+ 'image_8',
2059
+ '',
2060
+ '',
2061
+ '',
2062
+ '',
2063
+ ),
2064
+ 'default' => array(
2065
+ '',
2066
+ '',
2067
+ '',
2068
+ '',
2069
+ '',
2070
+ '',
2071
+ '',
2072
+ '',
2073
+ '',
2074
+ '',
2075
+ '',
2076
+ '',
2077
+ '',
2078
+ '',
2079
+ '',
2080
+ '',
2081
+ '',
2082
+ '',
2083
+ '',
2084
+ '',
2085
+ '',
2086
+ '',
2087
+ '',
2088
+ '',
2089
+ ),
2090
+ 'suffix' => array(
2091
+ '',
2092
+ '',
2093
+ '',
2094
+ '',
2095
+ '',
2096
+ '',
2097
+ '',
2098
+ '',
2099
+ '',
2100
+ '',
2101
+ '',
2102
+ '',
2103
+ '',
2104
+ '',
2105
+ '',
2106
+ '',
2107
+ '',
2108
+ '',
2109
+ '',
2110
+ '',
2111
+ '',
2112
+ '',
2113
+ '',
2114
+ '',
2115
+ ),
2116
+ 'output_type' => array(
2117
+ '1',
2118
+ '1',
2119
+ '1',
2120
+ '1',
2121
+ '1',
2122
+ '1',
2123
+ '1',
2124
+ '1',
2125
+ '1',
2126
+ '1',
2127
+ '1',
2128
+ '1',
2129
+ '1',
2130
+ '1',
2131
+ '1',
2132
+ '1',
2133
+ '1',
2134
+ '1',
2135
+ '1',
2136
+ '1',
2137
+ '1',
2138
+ '1',
2139
+ '1',
2140
+ '1',
2141
+ ),
2142
+ 'limit' => array(
2143
+ '',
2144
+ '',
2145
+ '',
2146
+ '',
2147
+ '',
2148
+ '',
2149
+ '',
2150
+ '',
2151
+ '',
2152
+ '',
2153
+ '',
2154
+ '',
2155
+ '',
2156
+ '',
2157
+ '',
2158
+ '',
2159
+ '',
2160
+ '',
2161
+ '',
2162
+ '',
2163
+ '',
2164
+ '',
2165
+ '',
2166
+ '',
2167
+ ),
2168
+ ),
2169
+ 'trovaprezzi' => array(
2170
+ 'mattributes' => array(
2171
+ 'Code',
2172
+ 'Name',
2173
+ 'Description',
2174
+ 'Link',
2175
+ 'Price',
2176
+ 'Categories',
2177
+ 'Image',
2178
+ 'Stock',
2179
+ 'Availability',
2180
+ 'ShippingCost',
2181
+ 'SKU',
2182
+ 'Brand',
2183
+ ),
2184
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2185
+ 'type' => array(
2186
+ 'attribute',
2187
+ 'attribute',
2188
+ 'attribute',
2189
+ 'attribute',
2190
+ 'attribute',
2191
+ 'attribute',
2192
+ 'attribute',
2193
+ 'attribute',
2194
+ 'attribute',
2195
+ 'pattern',
2196
+ 'attribute',
2197
+ 'pattern',
2198
+ ),
2199
+ 'attributes' => array(
2200
+ 'id',
2201
+ 'title',
2202
+ 'short_description',
2203
+ 'link',
2204
+ 'current_price',
2205
+ 'product_type',
2206
+ 'image',
2207
+ 'wf_cattr__stock',
2208
+ 'availability',
2209
+ '',
2210
+ 'sku',
2211
+ '',
2212
+ ),
2213
+ 'default' => array( '', '', '', '', '', '', '', '', '', '0', '', '' ),
2214
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2215
+ 'output_type' => array( '1', '1', '2', '1', '6', '1', '1', '5', '1', '6', '1', '1' ),
2216
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2217
+ ),
2218
+ 'twenga' => array(
2219
+ 'mattributes' => array(
2220
+ 'merchant_ref',
2221
+ 'merchant_id',
2222
+ 'upc_ean',
2223
+ 'manufacturer_id',
2224
+ 'product_url',
2225
+ 'image_url',
2226
+ 'price',
2227
+ 'regular_price',
2228
+ 'shipping_cost',
2229
+ 'designation',
2230
+ 'description',
2231
+ 'category',
2232
+ 'brand',
2233
+ 'in_stock',
2234
+ 'availability',
2235
+ 'stock_detail',
2236
+ 'unit_price',
2237
+ 'merchant_margin',
2238
+ 'ecotax',
2239
+ 'item_display',
2240
+ 'condition',
2241
+ 'merchant_ref',
2242
+ ),
2243
+ 'prefix' => array(
2244
+ '',
2245
+ '',
2246
+ '',
2247
+ '',
2248
+ '',
2249
+ '',
2250
+ '',
2251
+ '',
2252
+ '',
2253
+ '',
2254
+ '',
2255
+ '',
2256
+ '',
2257
+ '',
2258
+ '',
2259
+ '',
2260
+ '',
2261
+ '',
2262
+ '',
2263
+ '',
2264
+ '',
2265
+ '',
2266
+ ),
2267
+ 'type' => array(
2268
+ 'attribute',
2269
+ 'attribute',
2270
+ 'pattern',
2271
+ 'attribute',
2272
+ 'attribute',
2273
+ 'pattern',
2274
+ 'attribute',
2275
+ 'pattern',
2276
+ 'pattern',
2277
+ 'pattern',
2278
+ 'attribute',
2279
+ 'attribute',
2280
+ 'pattern',
2281
+ 'attribute',
2282
+ 'attribute',
2283
+ 'pattern',
2284
+ 'pattern',
2285
+ 'pattern',
2286
+ 'pattern',
2287
+ 'pattern',
2288
+ 'pattern',
2289
+ 'attribute',
2290
+ ),
2291
+ 'attributes' => array(
2292
+ 'sku',
2293
+ 'id',
2294
+ '',
2295
+ 'sku',
2296
+ 'link',
2297
+ 'image',
2298
+ 'sale_price',
2299
+ 'price',
2300
+ '',
2301
+ '',
2302
+ 'description',
2303
+ 'product_type',
2304
+ '',
2305
+ 'availability',
2306
+ 'quantity',
2307
+ '',
2308
+ '',
2309
+ '',
2310
+ '',
2311
+ '',
2312
+ '',
2313
+ 'sku',
2314
+ ),
2315
+ 'default' => array(
2316
+ '',
2317
+ '',
2318
+ '',
2319
+ '',
2320
+ '',
2321
+ '',
2322
+ '',
2323
+ '',
2324
+ '',
2325
+ '',
2326
+ '',
2327
+ '',
2328
+ '',
2329
+ '',
2330
+ '',
2331
+ '',
2332
+ '',
2333
+ '',
2334
+ '',
2335
+ '',
2336
+ '',
2337
+ '',
2338
+ ),
2339
+ 'suffix' => array(
2340
+ '',
2341
+ '',
2342
+ '',
2343
+ '',
2344
+ '',
2345
+ '',
2346
+ '',
2347
+ '',
2348
+ '',
2349
+ '',
2350
+ '',
2351
+ '',
2352
+ '',
2353
+ '',
2354
+ '',
2355
+ '',
2356
+ '',
2357
+ '',
2358
+ '',
2359
+ '',
2360
+ '',
2361
+ '',
2362
+ ),
2363
+ 'output_type' => array(
2364
+ '1',
2365
+ '1',
2366
+ '1',
2367
+ '1',
2368
+ '1',
2369
+ '1',
2370
+ '1',
2371
+ '1',
2372
+ '1',
2373
+ '1',
2374
+ '1',
2375
+ '1',
2376
+ '1',
2377
+ '1',
2378
+ '1',
2379
+ '1',
2380
+ '1',
2381
+ '1',
2382
+ '1',
2383
+ '1',
2384
+ '1',
2385
+ '1',
2386
+ ),
2387
+ 'limit' => array(
2388
+ '',
2389
+ '',
2390
+ '',
2391
+ '',
2392
+ '',
2393
+ '',
2394
+ '',
2395
+ '',
2396
+ '',
2397
+ '',
2398
+ '',
2399
+ '',
2400
+ '',
2401
+ '',
2402
+ '',
2403
+ '',
2404
+ '',
2405
+ '',
2406
+ '',
2407
+ '',
2408
+ '',
2409
+ '',
2410
+ ),
2411
+ ),
2412
+ 'vertaa.fi' => array(
2413
+ 'mattributes' => array(
2414
+ 'Product category',
2415
+ 'Product name',
2416
+ 'Product brand',
2417
+ 'Product price',
2418
+ 'Product URL',
2419
+ 'Delivery time',
2420
+ 'Shipping method',
2421
+ 'Delivery price',
2422
+ 'Service country code',
2423
+ ),
2424
+ 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
2425
+ 'type' => array(
2426
+ 'attribute',
2427
+ 'attribute',
2428
+ 'attribute',
2429
+ 'attribute',
2430
+ 'attribute',
2431
+ 'attribute',
2432
+ 'attribute',
2433
+ 'attribute',
2434
+ 'attribute',
2435
+ ),
2436
+ 'attributes' => array( 'product_type', 'title', '', 'price', 'link', '', '', '', '' ),
2437
+ 'default' => array( '', '', '', '', '', '', '', '', '' ),
2438
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
2439
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2440
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
2441
+ ),
2442
+ 'walmart' => array(
2443
+ 'mattributes' => array(
2444
+ 'Product Name',
2445
+ 'SKU',
2446
+ 'Product Tax Code',
2447
+ 'Product ID Type',
2448
+ 'Product ID',
2449
+ 'Product Identifiers',
2450
+ 'Description',
2451
+ 'Brand',
2452
+ 'Price',
2453
+ 'Shipping Weight',
2454
+ ),
2455
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '' ),
2456
+ 'type' => array(
2457
+ 'attribute',
2458
+ 'attribute',
2459
+ 'attribute',
2460
+ 'attribute',
2461
+ 'attribute',
2462
+ 'attribute',
2463
+ 'attribute',
2464
+ 'attribute',
2465
+ 'attribute',
2466
+ 'attribute',
2467
+ ),
2468
+ 'attributes' => array( 'title', 'sku', '', '', 'id', '', 'description', '', 'price', '' ),
2469
+ 'default' => array( '', '', '', '', '', '', '', '', '', '' ),
2470
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '' ),
2471
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2472
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '' ),
2473
+ ),
2474
+ 'wish' => array(
2475
+ 'mattributes' => array(
2476
+ 'Main Image URL',
2477
+ 'Price',
2478
+ 'Product Name',
2479
+ 'Quantity',
2480
+ 'Shipping',
2481
+ 'Tags',
2482
+ 'Parent Unique Id',
2483
+ 'Unique ID/SKU',
2484
+ 'Description',
2485
+ ),
2486
+ 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
2487
+ 'type' => array(
2488
+ 'attribute',
2489
+ 'attribute',
2490
+ 'attribute',
2491
+ 'attribute',
2492
+ 'attribute',
2493
+ 'attribute',
2494
+ 'attribute',
2495
+ 'attribute',
2496
+ 'attribute',
2497
+ ),
2498
+ 'attributes' => array(
2499
+ 'image',
2500
+ 'price',
2501
+ 'title',
2502
+ 'quantity',
2503
+ '',
2504
+ 'tags',
2505
+ 'item_group_id',
2506
+ 'id',
2507
+ 'description',
2508
+ ),
2509
+ 'default' => array( '', '', '', '', '', '', '', '', '' ),
2510
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
2511
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2512
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
2513
+ ),
2514
+ 'yahoo_nfa' => array(
2515
+ 'mattributes' => array(
2516
+ 'id',
2517
+ 'title',
2518
+ 'description',
2519
+ 'image_link',
2520
+ 'link',
2521
+ 'availability',
2522
+ 'condition',
2523
+ 'price',
2524
+ 'gtin',
2525
+ ),
2526
+ 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
2527
+ 'type' => array(
2528
+ 'attribute',
2529
+ 'attribute',
2530
+ 'attribute',
2531
+ 'attribute',
2532
+ 'attribute',
2533
+ 'attribute',
2534
+ 'attribute',
2535
+ 'attribute',
2536
+ 'attribute',
2537
+ ),
2538
+ 'attributes' => array(
2539
+ 'id',
2540
+ 'title',
2541
+ 'description',
2542
+ 'image',
2543
+ 'link',
2544
+ 'availability',
2545
+ 'condition',
2546
+ 'price',
2547
+ '',
2548
+ ),
2549
+ 'default' => array( '', '', '', '', '', '', '', '', '' ),
2550
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
2551
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2552
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
2553
+ ),
2554
+ 'zap.co.il' => array(
2555
+ 'mattributes' => array(
2556
+ 'PRODUCT_URL',
2557
+ 'PRODUCT_NAME',
2558
+ 'DETAILS',
2559
+ 'PRODUCTCODE',
2560
+ 'CURRENCY',
2561
+ 'PRICE',
2562
+ 'SHIPMENT_COST',
2563
+ 'DELIVERY_TIME',
2564
+ 'IMAGE',
2565
+ ),
2566
+ 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
2567
+ 'type' => array(
2568
+ 'attribute',
2569
+ 'attribute',
2570
+ 'attribute',
2571
+ 'attribute',
2572
+ 'attribute',
2573
+ 'attribute',
2574
+ 'attribute',
2575
+ 'attribute',
2576
+ 'attribute',
2577
+ ),
2578
+ 'attributes' => array( 'link', 'title', 'description', 'id', '', 'price', '', '', 'image' ),
2579
+ 'default' => array( '', '', '', '', '', '', '', '', '' ),
2580
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
2581
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2582
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
2583
+ ),
2584
+ 'adwords' => array(
2585
+ 'mattributes' => array(
2586
+ 'ID',
2587
+ 'ID2',
2588
+ 'Item title',
2589
+ 'Final URL',
2590
+ 'Image URL',
2591
+ 'Item subtitle',
2592
+ 'Item description',
2593
+ 'Item category',
2594
+ 'Price',
2595
+ 'Sale price',
2596
+ 'Contextual keywords',
2597
+ 'Item address',
2598
+ ),
2599
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2600
+ 'type' => array(
2601
+ 'attribute',
2602
+ 'attribute',
2603
+ 'attribute',
2604
+ 'attribute',
2605
+ 'attribute',
2606
+ 'attribute',
2607
+ 'attribute',
2608
+ 'attribute',
2609
+ 'attribute',
2610
+ 'attribute',
2611
+ 'pattern',
2612
+ 'pattern',
2613
+ ),
2614
+ 'attributes' => array(
2615
+ 'id',
2616
+ 'sku',
2617
+ 'title',
2618
+ 'link',
2619
+ 'image',
2620
+ 'short_description',
2621
+ 'description',
2622
+ 'product_type',
2623
+ 'price',
2624
+ 'sale_price',
2625
+ '',
2626
+ '',
2627
+ ),
2628
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2629
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2630
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2631
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '' ),
2632
+ ),
2633
+ 'bing' => array(
2634
+ 'mattributes' => array( 'id', 'title', 'link', 'price', 'description', 'image_link', 'shipping' ),
2635
+ 'prefix' => array( '', '', '', '', '', '', '' ),
2636
+ 'type' => array(
2637
+ 'attribute',
2638
+ 'attribute',
2639
+ 'attribute',
2640
+ 'attribute',
2641
+ 'attribute',
2642
+ 'attribute',
2643
+ 'attribute',
2644
+ ),
2645
+ 'attributes' => array( 'id', 'title', 'link', 'price', 'description', 'image', '' ),
2646
+ 'default' => array( '', '', '', '', '', '', '' ),
2647
+ 'suffix' => array( '', '', '', '', '', '', '' ),
2648
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1' ),
2649
+ 'limit' => array( '', '', '', '', '', '', '' ),
2650
+ ),
2651
+ 'google_local_inventory' => array(
2652
+ 'mattributes' => array(
2653
+ 'store code',
2654
+ 'itemid',
2655
+ 'quantity',
2656
+ 'price',
2657
+ 'sale price',
2658
+ 'availability',
2659
+ 'sale price effective date',
2660
+ 'pickup method',
2661
+ 'pickup sla',
2662
+ ),
2663
+ 'prefix' => array( '', '', '', '', '', '', '', '', '' ),
2664
+ 'type' => array(
2665
+ 'pattern',
2666
+ 'attribute',
2667
+ 'attribute',
2668
+ 'attribute',
2669
+ 'attribute',
2670
+ 'attribute',
2671
+ 'attribute',
2672
+ 'pattern',
2673
+ 'pattern',
2674
+ ),
2675
+ 'attributes' => array(
2676
+ '',
2677
+ 'id',
2678
+ 'quantity',
2679
+ 'price',
2680
+ 'sale_price',
2681
+ 'availability',
2682
+ 'sale_price_effective_date',
2683
+ '',
2684
+ '',
2685
+ ),
2686
+ 'default' => array( ' ', '', '', '', '', '', '', '', '' ),
2687
+ 'suffix' => array( '', '', '', '', '', '', '', '', '' ),
2688
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
2689
+ 'limit' => array( '', '', '', '', '', '', '', '', '' ),
2690
+ ),
2691
+ 'google_local' => array(
2692
+ 'mattributes' => array(
2693
+ 'store code',
2694
+ 'itemid',
2695
+ 'title',
2696
+ 'description',
2697
+ 'image_link',
2698
+ 'condition',
2699
+ 'gtin',
2700
+ 'brand',
2701
+ 'google_product_category',
2702
+ 'webitemid',
2703
+ 'mpn',
2704
+ 'price',
2705
+ 'sale price',
2706
+ 'sale price effective date',
2707
+ 'unit_pricing_measure',
2708
+ 'unit_pricing_base_measure',
2709
+ 'pickup method',
2710
+ 'pickup SLA',
2711
+ 'pickup_link_template',
2712
+ 'mobile_pickup_link_template',
2713
+ 'link_template',
2714
+ 'mobile_link_template',
2715
+ 'ads_redirect',
2716
+ 'energy_efficiency_class',
2717
+ 'energy_efficiency_class_min',
2718
+ 'energy_efficiency_class_max',
2719
+ ),
2720
+ 'prefix' => array(
2721
+ '',
2722
+ '',
2723
+ '',
2724
+ '',
2725
+ '',
2726
+ '',
2727
+ '',
2728
+ '',
2729
+ '',
2730
+ '',
2731
+ '',
2732
+ '',
2733
+ '',
2734
+ '',
2735
+ '',
2736
+ '',
2737
+ '',
2738
+ '',
2739
+ '',
2740
+ '',
2741
+ '',
2742
+ '',
2743
+ '',
2744
+ '',
2745
+ '',
2746
+ '',
2747
+ ),
2748
+ 'type' => array(
2749
+ 'pattern',
2750
+ 'attribute',
2751
+ 'attribute',
2752
+ 'attribute',
2753
+ 'attribute',
2754
+ 'attribute',
2755
+ 'attribute',
2756
+ 'pattern',
2757
+ 'pattern',
2758
+ 'pattern',
2759
+ 'pattern',
2760
+ 'attribute',
2761
+ 'attribute',
2762
+ 'attribute',
2763
+ 'pattern',
2764
+ 'pattern',
2765
+ 'pattern',
2766
+ 'pattern',
2767
+ 'pattern',
2768
+ 'pattern',
2769
+ 'pattern',
2770
+ 'pattern',
2771
+ 'pattern',
2772
+ 'pattern',
2773
+ 'pattern',
2774
+ 'pattern',
2775
+ ),
2776
+ 'attributes' => array(
2777
+ '',
2778
+ 'id',
2779
+ 'title',
2780
+ 'description',
2781
+ 'image',
2782
+ 'condition',
2783
+ 'sku',
2784
+ '',
2785
+ '',
2786
+ '',
2787
+ '',
2788
+ 'price',
2789
+ 'sale_price',
2790
+ 'sale_price_effective_date',
2791
+ '',
2792
+ '',
2793
+ '',
2794
+ '',
2795
+ '',
2796
+ '',
2797
+ '',
2798
+ '',
2799
+ '',
2800
+ '',
2801
+ '',
2802
+ '',
2803
+ ),
2804
+ 'default' => array(
2805
+ ' ',
2806
+ '',
2807
+ '',
2808
+ '',
2809
+ '',
2810
+ '',
2811
+ '',
2812
+ '',
2813
+ '',
2814
+ '',
2815
+ '',
2816
+ '',
2817
+ '',
2818
+ '',
2819
+ '',
2820
+ '',
2821
+ '',
2822
+ '',
2823
+ '',
2824
+ '',
2825
+ '',
2826
+ '',
2827
+ '',
2828
+ '',
2829
+ '',
2830
+ '',
2831
+ ),
2832
+ 'suffix' => array(
2833
+ '',
2834
+ '',
2835
+ '',
2836
+ '',
2837
+ '',
2838
+ '',
2839
+ '',
2840
+ '',
2841
+ '',
2842
+ '',
2843
+ '',
2844
+ '',
2845
+ '',
2846
+ '',
2847
+ '',
2848
+ '',
2849
+ '',
2850
+ '',
2851
+ '',
2852
+ '',
2853
+ '',
2854
+ '',
2855
+ '',
2856
+ '',
2857
+ '',
2858
+ '',
2859
+ ),
2860
+ 'output_type' => array(
2861
+ '1',
2862
+ '1',
2863
+ '1',
2864
+ '1',
2865
+ '1',
2866
+ '1',
2867
+ '1',
2868
+ '1',
2869
+ '1',
2870
+ '1',
2871
+ '1',
2872
+ '1',
2873
+ '1',
2874
+ '1',
2875
+ '1',
2876
+ '1',
2877
+ '1',
2878
+ '1',
2879
+ '1',
2880
+ '1',
2881
+ '1',
2882
+ '1',
2883
+ '1',
2884
+ '1',
2885
+ '1',
2886
+ '1',
2887
+ ),
2888
+ 'limit' => array(
2889
+ '',
2890
+ '',
2891
+ '',
2892
+ '',
2893
+ '',
2894
+ '',
2895
+ '',
2896
+ '',
2897
+ '',
2898
+ '',
2899
+ '',
2900
+ '',
2901
+ '',
2902
+ '',
2903
+ '',
2904
+ '',
2905
+ '',
2906
+ '',
2907
+ '',
2908
+ '',
2909
+ '',
2910
+ '',
2911
+ '',
2912
+ '',
2913
+ '',
2914
+ '',
2915
+ ),
2916
+ ),
2917
+ 'idealo' => array(
2918
+ 'mattributes' => array(
2919
+ 'Article number in shop',
2920
+ 'EAN',
2921
+ 'MPN',
2922
+ 'Manufacturer',
2923
+ 'Product name',
2924
+ 'Price',
2925
+ 'Delivery time',
2926
+ 'Product group in shop',
2927
+ 'Product description',
2928
+ 'Product characteristics',
2929
+ 'Product URL',
2930
+ 'Image URL',
2931
+ 'Colour',
2932
+ 'Size',
2933
+ 'Cash in advance',
2934
+ 'Unit price',
2935
+ 'Energy efficiency rating',
2936
+ ),
2937
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2938
+ 'type' => array(
2939
+ 'attribute',
2940
+ 'attribute',
2941
+ 'attribute',
2942
+ 'attribute',
2943
+ 'attribute',
2944
+ 'attribute',
2945
+ 'attribute',
2946
+ 'attribute',
2947
+ 'attribute',
2948
+ 'attribute',
2949
+ 'attribute',
2950
+ 'attribute',
2951
+ 'attribute',
2952
+ 'attribute',
2953
+ 'attribute',
2954
+ 'attribute',
2955
+ 'attribute',
2956
+ ),
2957
+ 'attributes' => array(
2958
+ '',
2959
+ '',
2960
+ '',
2961
+ '',
2962
+ 'title',
2963
+ 'price',
2964
+ '',
2965
+ 'product_type',
2966
+ 'description',
2967
+ '',
2968
+ 'link',
2969
+ 'image',
2970
+ '',
2971
+ '',
2972
+ '',
2973
+ '',
2974
+ '',
2975
+ ),
2976
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2977
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2978
+ 'output_type' => array(
2979
+ '1',
2980
+ '1',
2981
+ '1',
2982
+ '1',
2983
+ '1',
2984
+ '1',
2985
+ '1',
2986
+ '1',
2987
+ '1',
2988
+ '1',
2989
+ '1',
2990
+ '1',
2991
+ '1',
2992
+ '1',
2993
+ '1',
2994
+ '1',
2995
+ '1',
2996
+ ),
2997
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2998
+ ),
2999
+ 'pricespy' => array(
3000
+ 'mattributes' => array(
3001
+ 'Product-name',
3002
+ 'Your-item-number',
3003
+ 'category',
3004
+ 'price-including-gst',
3005
+ 'Product-URL',
3006
+ 'manufacturer',
3007
+ 'manufacturer-SKU',
3008
+ 'shipping',
3009
+ 'image-URL',
3010
+ 'stock status',
3011
+ ),
3012
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '' ),
3013
+ 'type' => array(
3014
+ 'attribute',
3015
+ 'attribute',
3016
+ 'attribute',
3017
+ 'attribute',
3018
+ 'attribute',
3019
+ 'pattern',
3020
+ 'attribute',
3021
+ 'pattern',
3022
+ 'attribute',
3023
+ 'attribute',
3024
+ ),
3025
+ 'attributes' => array(
3026
+ 'title',
3027
+ 'id',
3028
+ 'product_type',
3029
+ 'price',
3030
+ 'link',
3031
+ '',
3032
+ 'sku',
3033
+ '',
3034
+ 'image',
3035
+ 'condition',
3036
+ ),
3037
+ 'default' => array( '', '', '', '', '', '', '', '', 'mens, womens', '' ),
3038
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '' ),
3039
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
3040
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '' ),
3041
+ ),
3042
+ 'yandex_csv' => array(
3043
+ 'mattributes' => array(
3044
+ 'id',
3045
+ 'available',
3046
+ 'price',
3047
+ 'currencyId',
3048
+ 'category',
3049
+ 'picture',
3050
+ 'name',
3051
+ 'description',
3052
+ ),
3053
+ 'prefix' => array( '', '', '', '', '', '', '', '' ),
3054
+ 'type' => array(
3055
+ 'attribute',
3056
+ 'attribute',
3057
+ 'attribute',
3058
+ 'pattern',
3059
+ 'attribute',
3060
+ 'attribute',
3061
+ 'attribute',
3062
+ 'attribute',
3063
+ ),
3064
+ 'attributes' => array(
3065
+ 'id',
3066
+ 'availability',
3067
+ 'price',
3068
+ '',
3069
+ 'product_type',
3070
+ 'image',
3071
+ 'title',
3072
+ 'description',
3073
+ ),
3074
+ 'default' => array( '', '', '', 'RUR', '', '', '', '' ),
3075
+ 'suffix' => array( '', '', '', '', '', '', '', '' ),
3076
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1' ),
3077
+ 'limit' => array( '', '', '', '', '', '', '', '' ),
3078
+ ),
3079
+ 'fyndiq.se' => array(
3080
+ 'mattributes' => array(
3081
+ 'product-id',
3082
+ 'product-title',
3083
+ 'product-description',
3084
+ 'product-market',
3085
+ 'product-currency',
3086
+ 'product-price',
3087
+ 'product-oldprice',
3088
+ 'product-var-percent',
3089
+ 'product-image-1-url',
3090
+ 'product-image-1-identifier',
3091
+ 'article-sku',
3092
+ 'article-quantity',
3093
+ 'article-name',
3094
+ ),
3095
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
3096
+ 'type' => array(
3097
+ 'attribute',
3098
+ 'attribute',
3099
+ 'attribute',
3100
+ 'attribute',
3101
+ 'pattern',
3102
+ 'attribute',
3103
+ 'attribute',
3104
+ 'attribute',
3105
+ 'attribute',
3106
+ 'attribute',
3107
+ 'attribute',
3108
+ 'attribute',
3109
+ 'attribute',
3110
+ ),
3111
+ 'attributes' => array(
3112
+ 'id',
3113
+ 'title',
3114
+ 'description',
3115
+ '',
3116
+ '',
3117
+ 'price',
3118
+ '',
3119
+ '',
3120
+ 'image',
3121
+ '',
3122
+ 'sku',
3123
+ 'quantity',
3124
+ '',
3125
+ ),
3126
+ 'default' => array( '', '', '', '', 'USD', '', '', '', '', '', '', '', '' ),
3127
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
3128
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
3129
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '' ),
3130
+ ),
3131
+ 'miinto.nl' => array(
3132
+ 'mattributes' => array(
3133
+ 'gtin',
3134
+ 'item_group_id',
3135
+ 'brand',
3136
+ 'title',
3137
+ 'product_type',
3138
+ 'gender',
3139
+ 'color',
3140
+ 'size',
3141
+ 'image_link',
3142
+ 'stock_level',
3143
+ 'season_tag',
3144
+ 'description',
3145
+ 'material',
3146
+ 'washing',
3147
+ 'retail_price_currencyCode',
3148
+ ),
3149
+ 'prefix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
3150
+ 'type' => array(
3151
+ 'attribute',
3152
+ 'attribute',
3153
+ 'attribute',
3154
+ 'attribute',
3155
+ 'attribute',
3156
+ 'attribute',
3157
+ 'attribute',
3158
+ 'attribute',
3159
+ 'attribute',
3160
+ 'attribute',
3161
+ 'attribute',
3162
+ 'attribute',
3163
+ 'attribute',
3164
+ 'attribute',
3165
+ 'attribute',
3166
+ ),
3167
+ 'attributes' => array(
3168
+ '',
3169
+ 'item_group_id',
3170
+ '',
3171
+ 'title',
3172
+ 'product_type',
3173
+ '',
3174
+ '',
3175
+ '',
3176
+ 'image',
3177
+ 'quantity',
3178
+ '',
3179
+ 'description',
3180
+ '',
3181
+ '',
3182
+ '',
3183
+ ),
3184
+ 'default' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
3185
+ 'suffix' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
3186
+ 'output_type' => array( '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' ),
3187
+ 'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
3188
+ ),
3189
+ );
3190
+ }
3191
+
3192
  /**
3193
  * Get Merchant Info
3194
+ *
3195
+ * @deprecated 3.3.7
3196
+ *
3197
  * @param string $merchant
3198
  *
3199
  * @return array
3200
  */
3201
  public function getInfo( $merchant = '' ) {
3202
+ _deprecated_function( __METHOD__, '3.3.7', __CLASS__ . '::get_info' );
3203
+ if ( ! empty( $merchant ) && is_string( $merchant ) && empty( $this->merchant ) ) {
3204
+ $this->merchant = $merchant;
3205
+ // reload
3206
+ $this->merchantInfo();
3207
+ }
3208
+ return $this->get_info();
 
 
 
 
 
 
 
 
 
3209
  }
3210
  }
includes/classes/class-woo-feed-products-v3.php CHANGED
@@ -34,7 +34,7 @@ class Woo_Feed_Products_v3 {
34
  'grouped',
35
  'external',
36
  );
37
- # TODO check if product is in those above types
38
  /**
39
  * Post meta prefix for dropdown item
40
  * @since 3.1.18
@@ -73,11 +73,12 @@ class Woo_Feed_Products_v3 {
73
 
74
  // Query Arguments
75
  $arg = array(
76
- 'limit' => 2e3,
77
- 'status' => $this->post_status,
78
- 'orderby' => 'date',
79
- 'order' => 'DESC',
80
- 'return' => 'ids',
 
81
  );
82
 
83
  // Product Type
@@ -105,6 +106,7 @@ class Woo_Feed_Products_v3 {
105
  'cache_results' => false,
106
  'update_post_meta_cache' => false,
107
  'update_post_term_cache' => false,
 
108
  );
109
 
110
  $query = new WP_Query( $args );
@@ -232,13 +234,13 @@ class Woo_Feed_Products_v3 {
232
 
233
  // Limit Output
234
  $limit = $this->config['limit'][ $attr_key ];
235
- if ( ! empty($limit) && is_numeric($limit) ) {
236
- if ( strpos($attributeValue, "<![CDATA[") !== false ) {
237
- $attributeValue = str_replace(array( "<![CDATA[", "]]>" ), array( '', '' ), $attributeValue);
238
  $attributeValue = substr($attributeValue, 0, $limit);
239
  $attributeValue = '<![CDATA[' . $attributeValue . ']]>';
240
  } else {
241
- $attributeValue = substr($attributeValue, 0, $limit);
242
  }
243
  }
244
 
@@ -573,9 +575,14 @@ class Woo_Feed_Products_v3 {
573
  $this->enclosure = '';
574
  }
575
 
 
 
 
 
 
576
  $product = $this->products[ $this->pi ];
577
  $headers = array_keys( $product );
578
- $this->feedHeader .= $this->enclosure . implode( "$this->enclosure$this->delimiter$this->enclosure", $headers ) . $this->enclosure . "\n";
579
 
580
  return $this->feedHeader;
581
  }
@@ -588,9 +595,12 @@ class Woo_Feed_Products_v3 {
588
  * @return string
589
  */
590
  private function process_txt_feed_body() {
591
- $product = $this->products[ $this->pi ];
592
- $productInfo = array_values( $product );
593
- $this->feedBody .= $this->enclosure . implode( "$this->enclosure$this->delimiter$this->enclosure", $productInfo ) . $this->enclosure . "\n";
 
 
 
594
 
595
  return $this->feedBody;
596
  }
@@ -860,22 +870,50 @@ class Woo_Feed_Products_v3 {
860
  * @return mixed|string
861
  */
862
  public function getAttributeValueByType( $product, $attribute ) {
 
863
  if ( method_exists( $this, $attribute ) ) {
864
- return call_user_func_array( array( $this, $attribute ), array( $product ) );
865
  } elseif ( strpos( $attribute, self::PRODUCT_ATTRIBUTE_PREFIX ) !== false ) {
866
- return $this->getProductAttribute( $product, $attribute );
867
  } elseif ( strpos( $attribute, self::POST_META_PREFIX ) !== false ) {
868
- return $this->getProductMeta( $product, $attribute );
869
  } elseif ( strpos( $attribute, self::PRODUCT_TAXONOMY_PREFIX ) !== false ) {
870
- return $this->getProductTaxonomy( $product, $attribute );
871
  } elseif ( substr( $attribute, 0, 6 ) == 'image_' ) {
872
  // For additional image method images() will be used with extra parameter - image number
873
  $imageKey = explode( '_', $attribute );
874
-
875
- return call_user_func_array( array( $this, 'images' ), array( $product, $imageKey[1] ) );
 
 
876
  } else {
877
- return $attribute;
878
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
879
  }
880
 
881
 
@@ -1106,7 +1144,9 @@ class Woo_Feed_Products_v3 {
1106
  $id = $product->get_parent_id();
1107
  }
1108
 
1109
- return wp_strip_all_tags( wc_get_product_category_list( $id, ">", '' ) );
 
 
1110
  }
1111
 
1112
  /**
@@ -1115,7 +1155,7 @@ class Woo_Feed_Products_v3 {
1115
  *
1116
  * @param WC_Product $product
1117
  *
1118
- * @return mixed
1119
  */
1120
  private function link( $product ) {
1121
  $utm = $this->config['campaign_parameters'];
@@ -1138,7 +1178,7 @@ class Woo_Feed_Products_v3 {
1138
  *
1139
  * @param WC_Product $product
1140
  *
1141
- * @return mixed
1142
  */
1143
  private function ex_link( $product ) {
1144
  if ( $product->is_type( 'external' ) ) {
34
  'grouped',
35
  'external',
36
  );
37
+ // TODO check if product is in those above types.
38
  /**
39
  * Post meta prefix for dropdown item
40
  * @since 3.1.18
73
 
74
  // Query Arguments
75
  $arg = array(
76
+ 'limit' => 2e3,
77
+ 'status' => $this->post_status,
78
+ 'orderby' => 'date',
79
+ 'order' => 'DESC',
80
+ 'return' => 'ids',
81
+ 'suppress_filters' => false,
82
  );
83
 
84
  // Product Type
106
  'cache_results' => false,
107
  'update_post_meta_cache' => false,
108
  'update_post_term_cache' => false,
109
+ 'suppress_filters' => false,
110
  );
111
 
112
  $query = new WP_Query( $args );
234
 
235
  // Limit Output
236
  $limit = $this->config['limit'][ $attr_key ];
237
+ if ( ! empty( $limit ) && is_numeric( $limit ) ) {
238
+ if ( strpos( $attributeValue, '<![CDATA[' ) !== false ) {
239
+ $attributeValue = str_replace(array( '<![CDATA[', ']]>' ), array( '', '' ), $attributeValue);
240
  $attributeValue = substr($attributeValue, 0, $limit);
241
  $attributeValue = '<![CDATA[' . $attributeValue . ']]>';
242
  } else {
243
+ $attributeValue = substr( $attributeValue, 0, $limit );
244
  }
245
  }
246
 
575
  $this->enclosure = '';
576
  }
577
 
578
+ $eol = PHP_EOL;
579
+ if ( 'trovaprezzi' === $this->config['provider'] ) {
580
+ $eol = '<endrecord>' . PHP_EOL;
581
+ }
582
+
583
  $product = $this->products[ $this->pi ];
584
  $headers = array_keys( $product );
585
+ $this->feedHeader .= $this->enclosure . implode( "$this->enclosure$this->delimiter$this->enclosure", $headers ) . $this->enclosure . $eol;
586
 
587
  return $this->feedHeader;
588
  }
595
  * @return string
596
  */
597
  private function process_txt_feed_body() {
598
+ $productInfo = array_values( $this->products[ $this->pi ] );
599
+ $eol = PHP_EOL;
600
+ if ( 'trovaprezzi' === $this->config['provider'] ) {
601
+ $eol = '<endrecord>' . PHP_EOL;
602
+ }
603
+ $this->feedBody .= $this->enclosure . implode( "$this->enclosure$this->delimiter$this->enclosure", $productInfo ) . $this->enclosure . $eol;
604
 
605
  return $this->feedBody;
606
  }
870
  * @return mixed|string
871
  */
872
  public function getAttributeValueByType( $product, $attribute ) {
873
+
874
  if ( method_exists( $this, $attribute ) ) {
875
+ $output = call_user_func_array( array( $this, $attribute ), array( $product ) );
876
  } elseif ( strpos( $attribute, self::PRODUCT_ATTRIBUTE_PREFIX ) !== false ) {
877
+ $output = $this->getProductAttribute( $product, $attribute );
878
  } elseif ( strpos( $attribute, self::POST_META_PREFIX ) !== false ) {
879
+ $output = $this->getProductMeta( $product, $attribute );
880
  } elseif ( strpos( $attribute, self::PRODUCT_TAXONOMY_PREFIX ) !== false ) {
881
+ $output = $this->getProductTaxonomy( $product, $attribute );
882
  } elseif ( substr( $attribute, 0, 6 ) == 'image_' ) {
883
  // For additional image method images() will be used with extra parameter - image number
884
  $imageKey = explode( '_', $attribute );
885
+ if ( ! isset( $imageKey[1] ) || ( isset( $imageKey[1] ) && ( empty( $imageKey[1] ) || ! is_numeric( $imageKey[1] ) ) ) ) {
886
+ $imageKey[1] = '';
887
+ }
888
+ $output = call_user_func_array( array( $this, 'images' ), array( $product, $imageKey[1] ) );
889
  } else {
890
+ $output = '';
891
  }
892
+
893
+ // Json encode if value is an array
894
+ if ( is_array( $output ) ) $output = wp_json_encode( $output );
895
+
896
+ /**
897
+ * Filter attribute value before return based on merchant and attribute name
898
+ *
899
+ * @since 3.3.7
900
+ *
901
+ * @param string $output the output
902
+ * @param WC_Product|WC_Product_Variable|WC_Product_Variation|WC_Product_Grouped|WC_Product_External|WC_Product_Composite $product Product Object.
903
+ * @param array feed config/rule
904
+ */
905
+ $output = apply_filters( "woo_feed_get_{$this->config['provider']}_{$attribute}_attribute", $output, $product, $this->config );
906
+
907
+ /**
908
+ * Filter attribute value before return based on attribute name
909
+ *
910
+ * @since 3.3.5
911
+ *
912
+ * @param string $output the output
913
+ * @param WC_Product|WC_Product_Variable|WC_Product_Variation|WC_Product_Grouped|WC_Product_External|WC_Product_Composite $product Product Object.
914
+ * @param array feed config/rule
915
+ */
916
+ return apply_filters( "woo_feed_get_{$attribute}_attribute", $output, $product, $this->config );
917
  }
918
 
919
 
1144
  $id = $product->get_parent_id();
1145
  }
1146
 
1147
+ $separator = apply_filters( 'woo_feed_product_type_separator', '>', $this->config, $product );
1148
+
1149
+ return wp_strip_all_tags( wc_get_product_category_list( $id, $separator, '' ) );
1150
  }
1151
 
1152
  /**
1155
  *
1156
  * @param WC_Product $product
1157
  *
1158
+ * @return string
1159
  */
1160
  private function link( $product ) {
1161
  $utm = $this->config['campaign_parameters'];
1178
  *
1179
  * @param WC_Product $product
1180
  *
1181
+ * @return string
1182
  */
1183
  private function ex_link( $product ) {
1184
  if ( $product->is_type( 'external' ) ) {
includes/classes/class-woo-feed-savefile.php CHANGED
@@ -9,73 +9,82 @@
9
  * @author Ohidul Islam <wahid@webappick.com>
10
  */
11
  class Woo_Feed_Savefile {
12
-
13
- /**
14
- * Check if the directory for feed file exist or not and make directory
15
- *
16
- * @param $path
17
- * @return bool
18
- */
19
- public function checkDir( $path ) {
20
- if ( ! file_exists($path) ) {
21
- return wp_mkdir_p($path);
22
- }
23
- return true;
24
- }
25
-
26
- /**
27
- * Save CSV Feed file
28
- *
29
- * @param $path
30
- * @param $file
31
- * @param $content
32
- * @param $info
33
- * @return bool
34
- */
35
- public function saveCSVFile( $path, $file, $content, $info ) {
36
- if ( $this->checkDir($path) ) {
37
- /**
38
- * @TODO see below
39
- * @see Woo_Feed_Savefile::saveFile()
40
- */
41
- if ( file_exists( $file ) ) unlink( $file ); // phpcs:ignore
42
-
43
- $fp = fopen($file, "wb"); // phpcs:ignore
44
-
45
- if ( 'tab' == $info['delimiter'] ) {
46
- $delimiter = "\t";
47
- } else {
48
- $delimiter = $info['delimiter'];
49
- }
50
-
51
- $enclosure = $info['enclosure'];
52
- if ( count( $content ) ) {
53
- foreach ( $content as $fields ) {
54
- if ( 'double' == $enclosure ) {
55
- fputcsv( $fp, $fields, $delimiter, chr( 34 ) ); // phpcs:ignore
56
- } elseif ( 'single' == $enclosure ) {
57
- fputcsv( $fp, $fields, $delimiter, chr( 39 ) ); // phpcs:ignore
58
- } else {
59
- fputs( $fp, implode( $fields, $delimiter ) . "\n" ); // phpcs:ignore
60
- }
61
- }
62
- }
63
 
64
- fclose( $fp ); // phpcs:ignore
65
- return true;
66
- } else {
67
- return false;
68
- }
69
- }
70
-
71
- /**
72
- * Save XML and TXT File
73
- *
74
- * @param $path
75
- * @param $file
76
- * @param $content
77
- * @return bool
78
- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  public function saveFile( $path, $file, $content ) {
80
  /**
81
  * @TODO use WP Filesystem API
@@ -89,10 +98,10 @@ class Woo_Feed_Savefile {
89
  if ( file_exists( $file ) ) {
90
  unlink( $file ); // phpcs:ignore
91
  }
92
- $fp = fopen( $file, "w+" ); // phpcs:ignore
93
  fwrite( $fp, $content ); // phpcs:ignore
94
  fclose( $fp ); // phpcs:ignore
95
- // chmod( $file, 0777 );
96
  return true;
97
  } else {
98
  return false;
9
  * @author Ohidul Islam <wahid@webappick.com>
10
  */
11
  class Woo_Feed_Savefile {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
+ /**
14
+ * Check if the directory for feed file exist or not and make directory
15
+ *
16
+ * @param $path
17
+ * @return bool
18
+ */
19
+ public function checkDir( $path ) {
20
+ if ( ! file_exists($path) ) {
21
+ return wp_mkdir_p($path);
22
+ }
23
+ return true;
24
+ }
25
+
26
+ /**
27
+ * Save CSV Feed file
28
+ *
29
+ * @param $path
30
+ * @param $file
31
+ * @param $content
32
+ * @param $info
33
+ *
34
+ * @return bool
35
+ */
36
+ public function saveCSVFile( $path, $file, $content, $info ) {
37
+ if ( $this->checkDir( $path ) ) {
38
+ /**
39
+ * @TODO see below
40
+ * @see Woo_Feed_Savefile::saveFile()
41
+ */
42
+ if ( file_exists( $file ) ) {
43
+ unlink( $file ); // phpcs:ignore
44
+ }
45
+
46
+ $fp = fopen( $file, 'wb' ); // phpcs:ignore
47
+
48
+ if ( 'tab' == $info['delimiter'] ) {
49
+ $delimiter = "\t";
50
+ } else {
51
+ $delimiter = $info['delimiter'];
52
+ }
53
+
54
+ $enclosure = $info['enclosure'];
55
+ $eol = PHP_EOL;
56
+ if ( 'trovaprezzi' === $info['provider'] ) {
57
+ $eol = '<endrecord>' . PHP_EOL;
58
+ }
59
+ if ( count( $content ) ) {
60
+ foreach ( $content as $fields ) {
61
+ if ( 'double' == $enclosure ) {
62
+ fputcsv( $fp, $fields, $delimiter, chr( 34 ) ); // phpcs:ignore
63
+ } elseif ( 'single' == $enclosure ) {
64
+ fputcsv( $fp, $fields, $delimiter, chr( 39 ) ); // phpcs:ignore
65
+ } else {
66
+ fputs( $fp, implode( $delimiter, $fields ) . $eol ); // phpcs:ignore
67
+ }
68
+ }
69
+ }
70
+
71
+ fclose( $fp ); // phpcs:ignore
72
+
73
+ return true;
74
+ } else {
75
+ return false;
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Save XML and TXT File
81
+ *
82
+ * @param $path
83
+ * @param $file
84
+ * @param $content
85
+ *
86
+ * @return bool
87
+ */
88
  public function saveFile( $path, $file, $content ) {
89
  /**
90
  * @TODO use WP Filesystem API
98
  if ( file_exists( $file ) ) {
99
  unlink( $file ); // phpcs:ignore
100
  }
101
+ $fp = fopen( $file, 'w+' ); // phpcs:ignore
102
  fwrite( $fp, $content ); // phpcs:ignore
103
  fclose( $fp ); // phpcs:ignore
104
+
105
  return true;
106
  } else {
107
  return false;
includes/helper.php CHANGED
@@ -296,8 +296,6 @@ if ( ! function_exists( 'woo_feed_get_merchant_class' ) ) {
296
  return 'Woo_Feed_Facebook';
297
  } elseif ( strpos( $provider, 'amazon' ) !== false ) {
298
  return 'Woo_Feed_Amazon';
299
- } elseif ( in_array( $provider, woo_feed_get_custom2_merchant() ) ) {
300
- return 'Woo_Feed_Custom_XML';
301
  } else {
302
  return 'Woo_Feed_Custom';
303
  }
@@ -359,6 +357,29 @@ if ( ! function_exists( 'woo_feed_get_file_types' ) ) {
359
  );
360
  }
361
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
362
 
363
  // The Editor.
364
  if ( ! function_exists( 'woo_feed_get_custom2_merchant' ) ) {
@@ -375,11 +396,17 @@ if ( ! function_exists( 'woo_feed_parse_feed_rules' ) ) {
375
  * Parse Feed Config/Rules to make sure that necessary array keys are exists
376
  * this will reduce the uses of isset() checking
377
  *
378
- * @param array $rules
 
 
 
 
 
379
  *
380
  * @return array
381
  */
382
- function woo_feed_parse_feed_rules( $rules = [] ) {
 
383
  if ( empty( $rules ) ) {
384
  $rules = [];
385
  }
@@ -399,10 +426,21 @@ if ( ! function_exists( 'woo_feed_parse_feed_rules' ) ) {
399
  'variable_quantity' => 'first',
400
  'feedLanguage' => apply_filters( 'wpml_current_language', null ),
401
  'feedCurrency' => get_woocommerce_currency(),
 
 
402
  'delimiter' => ',',
403
  'enclosure' => 'double',
404
  'extraHeader' => '',
405
  'vendors' => [],
 
 
 
 
 
 
 
 
 
406
  // filters tab
407
  'composite_price' => '',
408
  'product_ids' => '',
@@ -411,22 +449,22 @@ if ( ! function_exists( 'woo_feed_parse_feed_rules' ) ) {
411
  'filter_mode' => [],
412
  'campaign_parameters' => [],
413
  'is_outOfStock' => 'n',
414
- 'product_visibility' => 0, // include hidden ? 1 yes 0 no
415
- 'outofstock_visibility' => 0, // override wc global option for out-of-stock product hidden from catalog? 1 yes 0 no
 
 
416
  'ptitle_show' => '',
417
  'decimal_separator' => wc_get_price_decimal_separator(),
418
  'thousand_separator' => wc_get_price_thousand_separator(),
419
  'decimals' => wc_get_price_decimals(),
420
  ];
421
  $rules = wp_parse_args( $rules, $defaults );
422
- $rules['filter_mode'] = wp_parse_args(
423
- $rules['filter_mode'],
424
  [
425
  'product_ids' => 'include',
426
  'categories' => 'include',
427
  'post_status' => 'include',
428
- ]
429
- );
430
 
431
  $rules['campaign_parameters'] = wp_parse_args(
432
  $rules['campaign_parameters'],
@@ -439,7 +477,29 @@ if ( ! function_exists( 'woo_feed_parse_feed_rules' ) ) {
439
  ]
440
  );
441
 
442
- return apply_filters( 'woo_feed_parsed_rules', $rules );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
443
  }
444
  }
445
  if ( ! function_exists( 'register_and_do_woo_feed_meta_boxes' ) ) {
@@ -490,10 +550,10 @@ if ( ! function_exists( 'woo_feed_ajax_merchant_info' ) ) {
490
  if ( isset( $_REQUEST['nonce'] ) && wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ),
491
  'wpf_feed_nonce' ) ) {
492
  $provider = ( isset( $_REQUEST['provider'] ) && ! empty( $_REQUEST['provider'] ) ) ? sanitize_text_field( $_REQUEST['provider'] ) : '';
493
- $merchantInfo = new Woo_Feed_Merchant();
494
  $data = [];
495
  $na = esc_html__( 'N/A', 'woo-feed' );
496
- foreach ( $merchantInfo->getInfo( $provider ) as $k => $v ) {
497
  if ( 'link' == $k ) {
498
  /** @noinspection HtmlUnknownTarget */
499
  $data[ $k ] = empty( $v ) ? $na : sprintf( '<a href="%s" target="_blank">%s</a>',
@@ -542,11 +602,11 @@ if ( ! function_exists( 'woo_feed_merchant_info_metabox' ) ) {
542
  */
543
  function woo_feed_merchant_info_metabox( $feedConfig ) {
544
  $provider = ( isset( $feedConfig['provider'] ) && ! empty( $feedConfig['provider'] ) ) ? $feedConfig['provider'] : '';
545
- $merchantInfo = new Woo_Feed_Merchant();
546
  ?>
547
  <span class="spinner"></span>
548
  <div class="merchant-infos">
549
- <?php foreach ( $merchantInfo->getInfo( $provider ) as $k => $v ) { ?>
550
  <div class="merchant-info-section <?php echo esc_attr( $k ); ?>">
551
  <?php if ( 'link' == $k ) { ?>
552
  <span class="dashicons dashicons-media-document" style="color: #82878c;" aria-hidden="true"></span>
@@ -651,8 +711,6 @@ if ( ! function_exists( 'render_feed_config' ) ) {
651
  } else {
652
  if ( 'smartly.io' == $provider ) {
653
  include WOO_FEED_FREE_ADMIN_PATH . 'partials/templates/google_add-feed.php';
654
- } elseif ( in_array( $provider, woo_feed_get_custom2_merchant() ) ) {
655
- include WOO_FEED_FREE_ADMIN_PATH . "partials/templates/custom2_add-feed.php";
656
  } elseif ( file_exists( WOO_FEED_FREE_ADMIN_PATH . 'partials/templates/' . $provider . '_add-feed.php' ) ) {
657
  include WOO_FEED_FREE_ADMIN_PATH . 'partials/templates/' . $provider . '_add-feed.php';
658
  } else {
@@ -1655,7 +1713,7 @@ if ( ! function_exists( 'woo_feed_apply_tax_location_data' ) ) {
1655
  }
1656
  }
1657
 
1658
- // Hooks on feed generating process...
1659
  if ( ! function_exists( 'woo_feed_apply_hooks_before_product_loop' ) ) {
1660
  /**
1661
  * Apply Hooks Before Looping through ProductIds
@@ -1666,7 +1724,6 @@ if ( ! function_exists( 'woo_feed_apply_hooks_before_product_loop' ) ) {
1666
  add_filter( 'woocommerce_get_tax_location', 'woo_feed_apply_tax_location_data', 10, 3 );
1667
  }
1668
  }
1669
-
1670
  if ( ! function_exists( 'woo_feed_remove_hooks_before_product_loop' ) ) {
1671
  /**
1672
  * Remove Applied Hooks Looping through ProductIds
@@ -1679,5 +1736,82 @@ if ( ! function_exists( 'woo_feed_remove_hooks_before_product_loop' ) ) {
1679
  remove_filter( 'woocommerce_get_tax_location', 'woo_feed_apply_tax_location_data', 10 );
1680
  }
1681
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1682
 
1683
  // End of file helper.php.
296
  return 'Woo_Feed_Facebook';
297
  } elseif ( strpos( $provider, 'amazon' ) !== false ) {
298
  return 'Woo_Feed_Amazon';
 
 
299
  } else {
300
  return 'Woo_Feed_Custom';
301
  }
357
  );
358
  }
359
  }
360
+ if ( ! function_exists( 'woo_feed_get_default_brand' ) ) {
361
+ /**
362
+ * Guess Brand name from Site URL
363
+ * @return string
364
+ */
365
+ function woo_feed_get_default_brand() {
366
+ $brand = apply_filters( 'woo_feed_pre_get_default_brand_name', null );
367
+ if ( ! is_null( $brand ) ) {
368
+ return $brand;
369
+ }
370
+ $brand = '';
371
+ $url = filter_var( site_url(), FILTER_SANITIZE_URL );
372
+ if ( false !== $url ) {
373
+ $url = wp_parse_url( $url );
374
+ if ( array_key_exists( 'host', $url ) ) {
375
+ $arr = explode( '.', $url['host'] );
376
+ $brand = $arr[ count( $arr ) - 2 ];
377
+ $brand = ucfirst( $brand );
378
+ }
379
+ }
380
+ return apply_filters( 'woo_feed_get_default_brand_name', $brand );
381
+ }
382
+ }
383
 
384
  // The Editor.
385
  if ( ! function_exists( 'woo_feed_get_custom2_merchant' ) ) {
396
  * Parse Feed Config/Rules to make sure that necessary array keys are exists
397
  * this will reduce the uses of isset() checking
398
  *
399
+ * @uses wp_parse_args
400
+ *
401
+ * @since 3.3.5 $context parameter added.
402
+ *
403
+ * @param array $rules rules to parse.
404
+ * @param string $context parsing context. useful for filtering, view, save, db, create etc.
405
  *
406
  * @return array
407
  */
408
+ function woo_feed_parse_feed_rules( $rules = [], $context = 'view' ) {
409
+
410
  if ( empty( $rules ) ) {
411
  $rules = [];
412
  }
426
  'variable_quantity' => 'first',
427
  'feedLanguage' => apply_filters( 'wpml_current_language', null ),
428
  'feedCurrency' => get_woocommerce_currency(),
429
+ 'itemsWrapper' => 'products',
430
+ 'itemWrapper' => 'product',
431
  'delimiter' => ',',
432
  'enclosure' => 'double',
433
  'extraHeader' => '',
434
  'vendors' => [],
435
+ // Feed Config
436
+ 'mattributes' => [], // merchant attributes
437
+ 'prefix' => [], // prefixes
438
+ 'type' => [], // value (attribute) types
439
+ 'attributes' => [], // product attribute mappings
440
+ 'default' => [], // default values (patterns) if value type set to pattern
441
+ 'suffix' => [], // suffixes
442
+ 'output_type' => [], // output type (output filter)
443
+ 'limit' => [], // limit or command
444
  // filters tab
445
  'composite_price' => '',
446
  'product_ids' => '',
449
  'filter_mode' => [],
450
  'campaign_parameters' => [],
451
  'is_outOfStock' => 'n',
452
+ 'product_visibility' => 0,
453
+ // include hidden ? 1 yes 0 no
454
+ 'outofstock_visibility' => 0,
455
+ // override wc global option for out-of-stock product hidden from catalog? 1 yes 0 no
456
  'ptitle_show' => '',
457
  'decimal_separator' => wc_get_price_decimal_separator(),
458
  'thousand_separator' => wc_get_price_thousand_separator(),
459
  'decimals' => wc_get_price_decimals(),
460
  ];
461
  $rules = wp_parse_args( $rules, $defaults );
462
+ $rules['filter_mode'] = wp_parse_args( $rules['filter_mode'],
 
463
  [
464
  'product_ids' => 'include',
465
  'categories' => 'include',
466
  'post_status' => 'include',
467
+ ] );
 
468
 
469
  $rules['campaign_parameters'] = wp_parse_args(
470
  $rules['campaign_parameters'],
477
  ]
478
  );
479
 
480
+ if ( ! empty( $rules['provider'] ) && is_string( $rules['provider'] ) ) {
481
+ /**
482
+ * filter parsed rules for provider
483
+ *
484
+ * @since 3.3.7
485
+ *
486
+ * @param array $rules
487
+ * @param string $context
488
+ *
489
+ */
490
+ $rules = apply_filters( "woo_feed_{$rules['provider']}_parsed_rules", $rules, $context );
491
+ }
492
+
493
+ /**
494
+ * filter parsed rules
495
+ *
496
+ * @since 3.3.7 $provider parameter removed
497
+ *
498
+ * @param array $rules
499
+ * @param string $context
500
+ *
501
+ */
502
+ return apply_filters( 'woo_feed_parsed_rules', $rules, $context );
503
  }
504
  }
505
  if ( ! function_exists( 'register_and_do_woo_feed_meta_boxes' ) ) {
550
  if ( isset( $_REQUEST['nonce'] ) && wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ),
551
  'wpf_feed_nonce' ) ) {
552
  $provider = ( isset( $_REQUEST['provider'] ) && ! empty( $_REQUEST['provider'] ) ) ? sanitize_text_field( $_REQUEST['provider'] ) : '';
553
+ $merchantInfo = new Woo_Feed_Merchant( $provider );
554
  $data = [];
555
  $na = esc_html__( 'N/A', 'woo-feed' );
556
+ foreach ( $merchantInfo->get_info() as $k => $v ) {
557
  if ( 'link' == $k ) {
558
  /** @noinspection HtmlUnknownTarget */
559
  $data[ $k ] = empty( $v ) ? $na : sprintf( '<a href="%s" target="_blank">%s</a>',
602
  */
603
  function woo_feed_merchant_info_metabox( $feedConfig ) {
604
  $provider = ( isset( $feedConfig['provider'] ) && ! empty( $feedConfig['provider'] ) ) ? $feedConfig['provider'] : '';
605
+ $merchantInfo = new Woo_Feed_Merchant( $provider );
606
  ?>
607
  <span class="spinner"></span>
608
  <div class="merchant-infos">
609
+ <?php foreach ( $merchantInfo->get_info() as $k => $v ) { ?>
610
  <div class="merchant-info-section <?php echo esc_attr( $k ); ?>">
611
  <?php if ( 'link' == $k ) { ?>
612
  <span class="dashicons dashicons-media-document" style="color: #82878c;" aria-hidden="true"></span>
711
  } else {
712
  if ( 'smartly.io' == $provider ) {
713
  include WOO_FEED_FREE_ADMIN_PATH . 'partials/templates/google_add-feed.php';
 
 
714
  } elseif ( file_exists( WOO_FEED_FREE_ADMIN_PATH . 'partials/templates/' . $provider . '_add-feed.php' ) ) {
715
  include WOO_FEED_FREE_ADMIN_PATH . 'partials/templates/' . $provider . '_add-feed.php';
716
  } else {
1713
  }
1714
  }
1715
 
1716
+ // Hook feed generating process...
1717
  if ( ! function_exists( 'woo_feed_apply_hooks_before_product_loop' ) ) {
1718
  /**
1719
  * Apply Hooks Before Looping through ProductIds
1724
  add_filter( 'woocommerce_get_tax_location', 'woo_feed_apply_tax_location_data', 10, 3 );
1725
  }
1726
  }
 
1727
  if ( ! function_exists( 'woo_feed_remove_hooks_before_product_loop' ) ) {
1728
  /**
1729
  * Remove Applied Hooks Looping through ProductIds
1736
  remove_filter( 'woocommerce_get_tax_location', 'woo_feed_apply_tax_location_data', 10 );
1737
  }
1738
  }
1739
+ if ( ! function_exists( 'woo_feed_product_type_separator' ) ) {
1740
+ /**
1741
+ * Filter Product local category (type) separator
1742
+ * @param string $separator
1743
+ * @param array $config
1744
+ *
1745
+ * @return string
1746
+ */
1747
+ function woo_feed_product_type_separator( $separator, $config ) {
1748
+ if ( 'trovaprezzi' === $config['provider'] ) $separator = ',';
1749
+ return $separator;
1750
+ }
1751
+ }
1752
+ if ( ! function_exists( 'woo_feed_get_trovaprezzi_availability_attribute_filter' ) ) {
1753
+ /**
1754
+ * Filter Product Availability Attribute Output For Trovaprezzi.it Template
1755
+ * @param string $output
1756
+ * @param WC_Product $product
1757
+ *
1758
+ * @return int
1759
+ */
1760
+ function woo_feed_get_trovaprezzi_availability_attribute_filter( $output, $product ) {
1761
+ $status = $product->get_stock_status();
1762
+ $output = 2;
1763
+ if ( $status ) {
1764
+ if ( 'instock' == $status ) {
1765
+ $output = 2;
1766
+ } elseif ( 'outofstock' == $status ) {
1767
+ $output = 0;
1768
+ } elseif ( 'onbackorder' == $status ) {
1769
+ $output = 1;
1770
+ }
1771
+ }
1772
+ return $output;
1773
+ }
1774
+ }
1775
+
1776
+ // Parse feed rules.
1777
+ if ( ! function_exists( 'woo_feed_filter_parsed_trovaprezzi_rules' ) ) {
1778
+ /**
1779
+ * Filter Feed parsed rules for trovaprezzi.it
1780
+ * @since 3.3.7
1781
+ * @param array $rules
1782
+ * @param string $context
1783
+ *
1784
+ * @return array
1785
+ */
1786
+ function woo_feed_filter_parsed_trovaprezzi_rules( $rules, $context ) {
1787
+ if ( 'create' === $context ) {
1788
+ $rules['decimal_separator'] = ',';
1789
+ $rules['thousand_separator'] = '';
1790
+ $rules['decimals'] = 2;
1791
+ $rules['itemsWrapper'] = 'Products';
1792
+ $rules['itemWrapper'] = 'Offer';
1793
+ $rules['delimiter'] = '|';
1794
+ $rules['enclosure'] = ' ';
1795
+ }
1796
+ return $rules;
1797
+ }
1798
+ }
1799
+ if ( ! function_exists( 'woo_feed_filter_parsed_criteo_rules' ) ) {
1800
+ /**
1801
+ * Filter Feed parsed rules for criteo
1802
+ * @since 3.3.7
1803
+ * @param array $rules
1804
+ * @param string $context
1805
+ *
1806
+ * @return array
1807
+ */
1808
+ function woo_feed_filter_parsed_criteo_rules( $rules, $context ) {
1809
+ if ( 'create' === $context ) {
1810
+ $rules['itemsWrapper'] = 'channel';
1811
+ $rules['itemWrapper'] = 'item';
1812
+ }
1813
+ return $rules;
1814
+ }
1815
+ }
1816
 
1817
  // End of file helper.php.
includes/hooks.php CHANGED
@@ -14,6 +14,18 @@ if ( ! defined( 'ABSPATH' ) ) {
14
  }
15
  /** @define "WOO_FEED_ADMIN_PATH" "./../admin/" */ // phpcs:ignore
16
 
 
 
 
 
 
17
  add_action( 'woo_feed_before_product_loop', 'woo_feed_apply_hooks_before_product_loop', 10, 1 );
 
 
 
 
 
 
18
  add_action( 'woo_feed_after_product_loop', 'woo_feed_remove_hooks_before_product_loop', 10, 1 );
 
19
  // End of file hooks.php.
14
  }
15
  /** @define "WOO_FEED_ADMIN_PATH" "./../admin/" */ // phpcs:ignore
16
 
17
+ // The Editor.
18
+ add_filter( 'woo_feed_trovaprezzi_parsed_rules', 'woo_feed_filter_parsed_trovaprezzi_rules', 10, 2 );
19
+ add_filter( 'woo_feed_criteo_parsed_rules', 'woo_feed_filter_parsed_criteo_rules', 10, 2 );
20
+
21
+ // Product Loop Start.
22
  add_action( 'woo_feed_before_product_loop', 'woo_feed_apply_hooks_before_product_loop', 10, 1 );
23
+
24
+ // In The Loop
25
+ add_filter( 'woo_feed_product_type_separator', 'woo_feed_product_type_separator', 10, 2 );
26
+ add_filter( 'woo_feed_get_trovaprezzi_availability_attribute', 'woo_feed_get_trovaprezzi_availability_attribute_filter', 10, 2 );
27
+
28
+ // Product Loop End.
29
  add_action( 'woo_feed_after_product_loop', 'woo_feed_remove_hooks_before_product_loop', 10, 1 );
30
+
31
  // End of file hooks.php.
woo-feed.php CHANGED
@@ -12,7 +12,7 @@
12
  * Description: This plugin generate WooCommerce product feed for Shopping Engines
13
  * like Google Shopping, Facebook Product Feed, eBay, Amazon, Idealo and many more.
14
  *
15
- * Version: 3.3.3
16
  * Author: WebAppick
17
  * Author URI: https://webappick.com/
18
  * License: GPL v2
@@ -40,7 +40,7 @@ if ( ! defined( 'WOO_FEED_FREE_VERSION' ) ) {
40
  * @var string
41
  * @since 3.1.6
42
  */
43
- define( 'WOO_FEED_FREE_VERSION', '3.3.3' );
44
  }
45
 
46
  if ( ! defined( 'WOO_FEED_FREE_FILE' ) ) {
@@ -695,13 +695,23 @@ if ( ! function_exists( 'feed_merchant_view' ) ) {
695
  wp_send_json_error( esc_html__( 'Invalid Merchant', 'woo-feed' ) );
696
  wp_die();
697
  }
698
- $feedRules = woo_feed_parse_feed_rules( [ 'provider' => $provider ] );
 
 
699
  $wooFeedDropDown = new Woo_Feed_Dropdown();
700
  $wooFeedProduct = new Woo_Feed_Products();
701
  $attributes = new Woo_Feed_Default_Attributes();
702
  ob_start();
703
  require_once WOO_FEED_FREE_ADMIN_PATH . 'partials/woo-feed-edit-tabs.php';
704
- wp_send_json_success( ob_get_clean() );
 
 
 
 
 
 
 
 
705
  wp_die();
706
  }
707
  }
12
  * Description: This plugin generate WooCommerce product feed for Shopping Engines
13
  * like Google Shopping, Facebook Product Feed, eBay, Amazon, Idealo and many more.
14
  *
15
+ * Version: 3.3.4
16
  * Author: WebAppick
17
  * Author URI: https://webappick.com/
18
  * License: GPL v2
40
  * @var string
41
  * @since 3.1.6
42
  */
43
+ define( 'WOO_FEED_FREE_VERSION', '3.3.4' );
44
  }
45
 
46
  if ( ! defined( 'WOO_FEED_FREE_FILE' ) ) {
695
  wp_send_json_error( esc_html__( 'Invalid Merchant', 'woo-feed' ) );
696
  wp_die();
697
  }
698
+ $merchant = new Woo_Feed_Merchant( $provider );
699
+ $feedRules = $merchant->get_template();
700
+
701
  $wooFeedDropDown = new Woo_Feed_Dropdown();
702
  $wooFeedProduct = new Woo_Feed_Products();
703
  $attributes = new Woo_Feed_Default_Attributes();
704
  ob_start();
705
  require_once WOO_FEED_FREE_ADMIN_PATH . 'partials/woo-feed-edit-tabs.php';
706
+ wp_send_json_success( [
707
+ 'tabs' => ob_get_clean(),
708
+ 'feedType' => strtolower( $merchant->get_feed_types( true ) ),
709
+ 'itemsWrapper' => $feedRules['itemsWrapper'],
710
+ 'itemWrapper' => $feedRules['itemWrapper'],
711
+ 'delimiter' => $feedRules['delimiter'],
712
+ 'enclosure' => $feedRules['enclosure'],
713
+ 'extraHeader' => $feedRules['extraHeader'],
714
+ ] );
715
  wp_die();
716
  }
717
  }