Content Egg - Version 5.3.0

Version Description

  • New: Multiple keyword search.
  • New: REST API for module data.
  • New: Feed module: Support for XML format.
  • New: Feed module: Deeplink.
  • New: Feed module: Feed encoding option.
  • New: Feed module: JSON feed format.
  • New: Module shortcodes: sort parameter.
  • New: Offer modules: Default currency option.
  • New: Shortcode parameters: add_query_arg.
  • Improvement: Locale filter for block shortcodes.
  • Improvement: Feed modules: Feeds will be updated twice a day.
  • Improvement: Feed modules: Update by page view.
  • Improvement: Offer modules: Domain editing capability.
  • Improvement: Alt tag for featured images.
  • Fix: AMP styles.
  • Fix: Feed modules: WooCommerce sync.
  • Fix: Feed modules: Stock status.
  • Fix: Fixed theoretical security issue (XSS) in admin dashboard.
Download this release

Release Info

Developer keywordrush
Plugin Icon 128x128 Content Egg
Version 5.3.0
Comparing to
See all releases

Code changes from version 5.2.1 to 5.3.0

Files changed (78) hide show
  1. application/BlockShortcode.php +10 -8
  2. application/DataRestController.php +147 -0
  3. application/EggShortcode.php +18 -2
  4. application/Installer.php +3 -2
  5. application/LocalRedirect.php +5 -3
  6. application/ModuleViewer.php +14 -7
  7. application/Plugin.php +9 -6
  8. application/WooIntegrator.php +4 -2
  9. application/admin/AutoblogController.php +18 -2
  10. application/admin/EggMetabox.php +11 -4
  11. application/admin/GeneralConfig.php +1 -1
  12. application/admin/PluginAdmin.php +13 -7
  13. application/admin/ProductTable.php +6 -4
  14. application/admin/ToolsController.php +2 -2
  15. application/admin/views/_metabox_autoblog.php +3 -3
  16. application/admin/views/_metabox_search_results.php +2 -1
  17. application/admin/views/autoblog_edit.php +2 -2
  18. application/admin/views/autoblog_index.php +1 -1
  19. application/admin/views/import_export.php +1 -1
  20. application/admin/views/module_settings.php +1 -1
  21. application/admin/views/product_index.php +2 -2
  22. application/components/AffiliateFeedParserModule.php +199 -7
  23. application/components/AffiliateFeedParserModuleConfig.php +9 -4
  24. application/components/Config.php +32 -19
  25. application/components/ContentManager.php +40 -7
  26. application/components/FeaturedImage.php +6 -2
  27. application/components/LinkHandler.php +16 -3
  28. application/components/ModuleApi.php +3 -3
  29. application/components/ParserModule.php +47 -2
  30. application/components/ParserModuleConfig.php +2 -0
  31. application/components/ReviewNotice.php +100 -0
  32. application/helpers/CurrencyHelper.php +38 -3
  33. application/helpers/TemplateHelper.php +45 -27
  34. application/helpers/TextHelper.php +22 -23
  35. application/libs/RestClient.php +9 -3
  36. application/libs/bing/BingSearch.php +0 -2
  37. application/libs/bing/CognitiveSearch.php +4 -5
  38. application/libs/rss/RssParser.php +1 -0
  39. application/models/AutoblogModel.php +2 -2
  40. application/models/PriceHistoryModel.php +8 -1
  41. application/models/ProductModel.php +13 -7
  42. application/modules/AE/AEConfig.php +2 -2
  43. application/modules/Amazon/templates/data_compare.php +1 -1
  44. application/modules/Amazon/views/search_panel.php +1 -1
  45. application/modules/CjLinks/CjLinksConfig.php +2 -1
  46. application/modules/Feed/FeedConfig.php +18 -5
  47. application/modules/Feed/FeedModule.php +22 -17
  48. application/modules/Offer/OfferConfig.php +9 -0
  49. application/modules/Offer/OfferModule.php +14 -11
  50. application/modules/Offer/views/metabox_module.php +7 -2
  51. application/templates/blocks/item_row.php +1 -1
  52. application/templates/blocks/list_row.php +8 -8
  53. application/templates/blocks/list_row_no_price.php +1 -1
  54. application/templates/blocks/price_history.php +2 -2
  55. application/templates/data_grid.php +11 -2
  56. application/templates/data_item.php +1 -1
  57. application/templates/data_item_simple.php +1 -1
  58. application/templates/data_list.php +2 -2
  59. application/vendor/XmlStringStreamer/LICENSE +21 -0
  60. application/vendor/XmlStringStreamer/Parser/StringWalker.php +276 -0
  61. application/vendor/XmlStringStreamer/Parser/UniqueNode.php +293 -0
  62. application/vendor/XmlStringStreamer/ParserInterface.php +41 -0
  63. application/vendor/XmlStringStreamer/Stream/File.php +75 -0
  64. application/vendor/XmlStringStreamer/Stream/Stdin.php +9 -0
  65. application/vendor/XmlStringStreamer/StreamInterface.php +43 -0
  66. application/vendor/XmlStringStreamer/XmlStringStreamer.php +84 -0
  67. content-egg.php +3 -3
  68. languages/content-egg.pot +434 -216
  69. languages/tpl/content-egg-tpl.pot +35 -26
  70. readme.txt +55 -3
  71. res/app/vendor/angular.min.js +1 -1
  72. res/css/products.css +1 -1
  73. templates/block_offers_list.php +2 -3
  74. templates/block_offers_list_groups.php +1 -1
  75. templates/block_offers_logo.php +17 -17
  76. templates/block_price_comparison_card.php +1 -1
  77. templates/block_text_links.php +1 -1
  78. templates/block_top_listing.php +12 -7
application/BlockShortcode.php CHANGED
@@ -54,7 +54,9 @@ class BlockShortcode {
54
  'product' => '',
55
  'hide' => '',
56
  'show' => '',
57
- 'btn_text' => ''
 
 
58
  );
59
 
60
  $allowed_atts = \apply_filters('cegg_block_shortcode_atts', $allowed_atts);
@@ -71,6 +73,8 @@ class BlockShortcode {
71
  $a['hide'] = TemplateHelper::hideParamPrepare($a['hide']);
72
  $a['show'] = strtolower(TextHelper::clear($a['show']));
73
  $a['btn_text'] = \wp_strip_all_tags($a['btn_text'], true);
 
 
74
 
75
  if ($a['group'] && !$a['groups'])
76
  $a['groups'] = $a['group'];
@@ -80,8 +84,10 @@ class BlockShortcode {
80
  $a['products'] = $a['product'];
81
  if ($a['products'])
82
  $a['products'] = TextHelper::getArrayFromCommaList($a['products']);
 
 
83
 
84
- $allowed_sort = array('price');
85
  $allowed_order = array('asc', 'desc');
86
  $a['sort'] = strtolower($a['sort']);
87
  $a['order'] = strtolower($a['order']);
@@ -89,6 +95,8 @@ class BlockShortcode {
89
  $a['sort'] = '';
90
  if (!in_array($a['order'], $allowed_order))
91
  $a['order'] = '';
 
 
92
 
93
  if ($a['modules'])
94
  {
@@ -145,21 +153,15 @@ class BlockShortcode {
145
  }
146
 
147
  if ($headers && !empty($headers['shortcoded']))
148
- {
149
- // convert string to boolean
150
  $a['shortcoded'] = filter_var($headers['shortcoded'], FILTER_VALIDATE_BOOLEAN);
151
- }
152
 
153
- // Module IDs from shortcode param. Validated.
154
  if ($a['modules'])
155
  $module_ids = $a['modules'];
156
  else
157
  $module_ids = ModuleManager::getInstance()->getParserModulesIdList(true);
158
 
159
  if ($supported_module_ids)
160
- {
161
  $module_ids = array_intersect($module_ids, $supported_module_ids);
162
- }
163
 
164
  return ModuleViewer::getInstance()->viewBlockData($module_ids, $post_id, $a, $content);
165
  }
54
  'product' => '',
55
  'hide' => '',
56
  'show' => '',
57
+ 'btn_text' => '',
58
+ 'locale' => '',
59
+ 'add_query_arg' => '',
60
  );
61
 
62
  $allowed_atts = \apply_filters('cegg_block_shortcode_atts', $allowed_atts);
73
  $a['hide'] = TemplateHelper::hideParamPrepare($a['hide']);
74
  $a['show'] = strtolower(TextHelper::clear($a['show']));
75
  $a['btn_text'] = \wp_strip_all_tags($a['btn_text'], true);
76
+ $a['add_query_arg'] = \sanitize_text_field(\wp_strip_all_tags($a['add_query_arg'], true));
77
+ $a['locale'] = TextHelper::clear($a['locale']);
78
 
79
  if ($a['group'] && !$a['groups'])
80
  $a['groups'] = $a['group'];
84
  $a['products'] = $a['product'];
85
  if ($a['products'])
86
  $a['products'] = TextHelper::getArrayFromCommaList($a['products']);
87
+ if ($a['add_query_arg'])
88
+ parse_str($a['add_query_arg'], $a['add_query_arg']);
89
 
90
+ $allowed_sort = array('price', 'discount', 'reverse');
91
  $allowed_order = array('asc', 'desc');
92
  $a['sort'] = strtolower($a['sort']);
93
  $a['order'] = strtolower($a['order']);
95
  $a['sort'] = '';
96
  if (!in_array($a['order'], $allowed_order))
97
  $a['order'] = '';
98
+ if ($a['sort'] == 'discount' && !$a['order'])
99
+ $a['order'] = 'desc';
100
 
101
  if ($a['modules'])
102
  {
153
  }
154
 
155
  if ($headers && !empty($headers['shortcoded']))
 
 
156
  $a['shortcoded'] = filter_var($headers['shortcoded'], FILTER_VALIDATE_BOOLEAN);
 
157
 
 
158
  if ($a['modules'])
159
  $module_ids = $a['modules'];
160
  else
161
  $module_ids = ModuleManager::getInstance()->getParserModulesIdList(true);
162
 
163
  if ($supported_module_ids)
 
164
  $module_ids = array_intersect($module_ids, $supported_module_ids);
 
165
 
166
  return ModuleViewer::getInstance()->viewBlockData($module_ids, $post_id, $a, $content);
167
  }
application/DataRestController.php ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace ContentEgg\application;
4
+
5
+ use ContentEgg\application\admin\GeneralConfig;
6
+ use ContentEgg\application\components\ModuleManager;
7
+ use ContentEgg\application\ModuleViewer;
8
+ use ContentEgg\application\helpers\TextHelper;
9
+ use ContentEgg\application\WooIntegrator;
10
+
11
+ defined('\ABSPATH') || exit;
12
+
13
+ /**
14
+ * DataRestController class file
15
+ *
16
+ * @author keywordrush.com <support@keywordrush.com>
17
+ * @link https://www.keywordrush.com
18
+ * @copyright Copyright &copy; 2021 keywordrush.com
19
+ */
20
+ class DataRestController extends \WP_REST_Controller {
21
+
22
+ protected $namespace = 'cegg/v1/data';
23
+
24
+ const VERSION = 1;
25
+ const BASE = 'data';
26
+
27
+ private static $instance = null;
28
+
29
+ public static function getInstance()
30
+ {
31
+ if (self::$instance == null)
32
+ self::$instance = new self;
33
+
34
+ return self::$instance;
35
+ }
36
+
37
+ private function __construct()
38
+ {
39
+
40
+ }
41
+
42
+ public function init()
43
+ {
44
+ \add_action('rest_api_init', array($this, 'register_routes'));
45
+ }
46
+
47
+ public function register_routes()
48
+ {
49
+ \register_rest_route(
50
+ $this->namespace,
51
+ '/' . $this->rest_base . '/(?P<post_id>[\d]+)',
52
+ array(
53
+ array(
54
+ 'methods' => \WP_REST_Server::READABLE,
55
+ 'callback' => array($this, 'get_items'),
56
+ 'permission_callback' => '__return_true',
57
+ 'args' => array(
58
+ 'module_id' => array(
59
+ 'description' => __('Module ID.', 'woocommerce'),
60
+ 'type' => 'string',
61
+ ),
62
+ 'module_type' => array(
63
+ 'description' => __('Module type.', 'woocommerce'),
64
+ 'type' => 'string',
65
+ ),
66
+ 'extra' => array(
67
+ 'description' => __('Return extra.', 'woocommerce'),
68
+ 'type' => 'boolean',
69
+ ),
70
+ 'synced' => array(
71
+ 'description' => __('Return a synced product only.', 'woocommerce'),
72
+ 'type' => 'boolean',
73
+ ),
74
+ ),
75
+ ),
76
+ 'schema' => array($this, 'get_public_item_schema'),
77
+ )
78
+ );
79
+ }
80
+
81
+ public function get_items($request, $module_type = '')
82
+ {
83
+ $post_id = (int) $request['post_id'];
84
+ if (!isset($request['extra']))
85
+ $return_extra = false;
86
+ else
87
+ $return_extra = (bool) $request['extra'];
88
+
89
+ if (!isset($request['synced']))
90
+ $return_synced = false;
91
+ else
92
+ $return_synced = (bool) $request['synced'];
93
+
94
+ if (\get_post_status($post_id) !== 'publish')
95
+ return new \WP_Error('cegg_rest_post_invalid_id', 'Invalid post ID.', array('status' => 404));
96
+
97
+ if (!in_array(\get_post_type($post_id), GeneralConfig::getInstance()->option('post_types')))
98
+ return new \WP_Error('cegg_rest_post_invalid_id', 'Invalid post type.', array('status' => 404));
99
+
100
+ $data = array();
101
+
102
+ $module_ids = ModuleManager::getInstance()->getParserModulesIdList(true);
103
+
104
+ if ($return_synced)
105
+ {
106
+ $mdata = WooIntegrator::getSyncItem($post_id);
107
+
108
+ if (!$mdata || !isset($mdata['module_id']) || !in_array($mdata['module_id'], $module_ids))
109
+ return array();
110
+
111
+ $data[$mdata['module_id']] = array($mdata['unique_id'] => $mdata);
112
+ } else
113
+ {
114
+ if (!empty($request['module_id']))
115
+ $module_ids = array_intersect($module_ids, TextHelper::getArrayFromCommaList($request['module_id']));
116
+
117
+ if (!empty($request['module_type']))
118
+ $module_type = TextHelper::getArrayFromCommaList(strtoupper($request['module_type']));
119
+ else
120
+ $module_type = array();
121
+
122
+ if ($module_type)
123
+ $module_ids = array_intersect($module_ids, ModuleManager::getInstance()->getParserModuleIdsByTypes($module_type, true));
124
+
125
+ foreach ($module_ids as $module_id)
126
+ {
127
+ if ($mdata = ModuleViewer::getInstance()->getData($module_id, $post_id))
128
+ $data[$module_id] = $mdata;
129
+ }
130
+ }
131
+
132
+ if (!$return_extra)
133
+ {
134
+ foreach ($data as $module_id => $mdata)
135
+ {
136
+ foreach ($mdata as $unique_id => $d)
137
+ {
138
+ $d['extra'] = array();
139
+ $data[$module_id][$unique_id] = $d;
140
+ }
141
+ }
142
+ }
143
+
144
+ return \rest_ensure_response($data);
145
+ }
146
+
147
+ }
application/EggShortcode.php CHANGED
@@ -57,6 +57,9 @@ class EggShortcode {
57
  'product' => '',
58
  'hide' => '',
59
  'btn_text' => '',
 
 
 
60
  );
61
 
62
  $allowed_atts = \apply_filters('cegg_module_shortcode_atts', $allowed_atts);
@@ -75,7 +78,8 @@ class EggShortcode {
75
  $a['groups'] = \sanitize_text_field($a['groups']);
76
  $a['group'] = \sanitize_text_field($a['group']);
77
  $a['hide'] = TemplateHelper::hideParamPrepare($a['hide']);
78
- $a['btn_text'] = wp_strip_all_tags($a['btn_text'], true);
 
79
  if ($a['group'] && !$a['groups'])
80
  $a['groups'] = $a['group'];
81
  if ($a['groups'])
@@ -84,7 +88,19 @@ class EggShortcode {
84
  $a['products'] = $a['product'];
85
  if ($a['products'])
86
  $a['products'] = TextHelper::getArrayFromCommaList($a['products']);
87
-
 
 
 
 
 
 
 
 
 
 
 
 
88
  if ($a['template'] && $a['module'])
89
  {
90
  $a['template'] = ModuleTemplateManager::getInstance($a['module'])->prepareShortcodeTempate($a['template']);
57
  'product' => '',
58
  'hide' => '',
59
  'btn_text' => '',
60
+ 'add_query_arg' => '',
61
+ 'sort' => '',
62
+ 'order' => '',
63
  );
64
 
65
  $allowed_atts = \apply_filters('cegg_module_shortcode_atts', $allowed_atts);
78
  $a['groups'] = \sanitize_text_field($a['groups']);
79
  $a['group'] = \sanitize_text_field($a['group']);
80
  $a['hide'] = TemplateHelper::hideParamPrepare($a['hide']);
81
+ $a['btn_text'] = \wp_strip_all_tags($a['btn_text'], true);
82
+ $a['add_query_arg'] = \sanitize_text_field(\wp_strip_all_tags($a['add_query_arg'], true));
83
  if ($a['group'] && !$a['groups'])
84
  $a['groups'] = $a['group'];
85
  if ($a['groups'])
88
  $a['products'] = $a['product'];
89
  if ($a['products'])
90
  $a['products'] = TextHelper::getArrayFromCommaList($a['products']);
91
+ if ($a['add_query_arg'])
92
+ parse_str($a['add_query_arg'], $a['add_query_arg']);
93
+ $allowed_sort = array('price', 'discount', 'reverse');
94
+ $allowed_order = array('asc', 'desc');
95
+ $a['sort'] = strtolower($a['sort']);
96
+ $a['order'] = strtolower($a['order']);
97
+ if (!in_array($a['sort'], $allowed_sort))
98
+ $a['sort'] = '';
99
+ if (!in_array($a['order'], $allowed_order))
100
+ $a['order'] = '';
101
+ if ($a['sort'] == 'discount' && !$a['order'])
102
+ $a['order'] = 'desc';
103
+
104
  if ($a['template'] && $a['module'])
105
  {
106
  $a['template'] = ModuleTemplateManager::getInstance($a['module'])->prepareShortcodeTempate($a['template']);
application/Installer.php CHANGED
@@ -52,10 +52,11 @@ class Installer {
52
  self::requirements();
53
 
54
  ModuleUpdateScheduler::addScheduleEvent();
55
- if (AutoblogModel::isActiveAutoblogs())
56
- AutoblogScheduler::addScheduleEvent();
57
  \add_option(Plugin::slug . '_do_activation_redirect', true);
 
58
  self::upgradeTables();
 
 
59
  }
60
 
61
  public static function deactivate()
52
  self::requirements();
53
 
54
  ModuleUpdateScheduler::addScheduleEvent();
 
 
55
  \add_option(Plugin::slug . '_do_activation_redirect', true);
56
+ \add_option(Plugin::slug . '_first_activation_date', time());
57
  self::upgradeTables();
58
+ if (AutoblogModel::isActiveAutoblogs())
59
+ AutoblogScheduler::addScheduleEvent();
60
  }
61
 
62
  public static function deactivate()
application/LocalRedirect.php CHANGED
@@ -14,8 +14,8 @@ use ContentEgg\application\admin\GeneralConfig;
14
  * LocalRedirect class file
15
  *
16
  * @author keywordrush.com <support@keywordrush.com>
17
- * @link http://www.keywordrush.com/
18
- * @copyright Copyright &copy; 2017 keywordrush.com
19
  */
20
  class LocalRedirect {
21
 
@@ -67,7 +67,9 @@ class LocalRedirect {
67
  if (!$url)
68
  return;
69
 
70
- \wp_redirect(esc_url_raw($url), 301);
 
 
71
  exit;
72
  }
73
 
14
  * LocalRedirect class file
15
  *
16
  * @author keywordrush.com <support@keywordrush.com>
17
+ * @link https://www.keywordrush.com
18
+ * @copyright Copyright &copy; 2022 keywordrush.com
19
  */
20
  class LocalRedirect {
21
 
67
  if (!$url)
68
  return;
69
 
70
+ $code = (int) \apply_filters('cegg_local_redirect_code', 301);
71
+
72
+ \wp_redirect(esc_url_raw($url), $code);
73
  exit;
74
  }
75
 
application/ModuleViewer.php CHANGED
@@ -12,13 +12,14 @@ use ContentEgg\application\helpers\ArrayHelper;
12
  use ContentEgg\application\components\BlockTemplateManager;
13
  use ContentEgg\application\admin\GeneralConfig;
14
  use ContentEgg\application\components\ContentProduct;
 
15
 
16
  /**
17
  * ModuleViewer class file
18
  *
19
  * @author keywordrush.com <support@keywordrush.com>
20
  * @link http://www.keywordrush.com
21
- * @copyright Copyright &copy; 2020 keywordrush.com
22
  */
23
  class ModuleViewer {
24
 
@@ -84,11 +85,6 @@ class ModuleViewer {
84
  else
85
  $post_id = -1;
86
 
87
- /*
88
- if (!is_single() && !is_page)
89
- return $content;
90
- *
91
- */
92
  $top_modules_priorities = array();
93
  $bottom_modules_priorities = array();
94
  foreach (ModuleManager::getInstance()->getModules(true) as $module_id => $module)
@@ -168,6 +164,15 @@ class ModuleViewer {
168
  }
169
  }
170
  }
 
 
 
 
 
 
 
 
 
171
 
172
  $module = ModuleManager::factory($module_id);
173
  $keyword = \get_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $module->getId(), true);
@@ -218,7 +223,7 @@ class ModuleViewer {
218
  $disable_features = $params['disable_features'];
219
  else
220
  $disable_features = 0;
221
-
222
  if (isset($params['btn_text']))
223
  $btn_text = $params['btn_text'];
224
  else
@@ -281,6 +286,8 @@ class ModuleViewer {
281
  if (!isset($params['shortcoded']) || (bool) $params['shortcoded'])
282
  Shortcoded::getInstance($post_id)->setShortcodedModule($module_id);
283
  }
 
 
284
  if (!$data)
285
  return;
286
 
12
  use ContentEgg\application\components\BlockTemplateManager;
13
  use ContentEgg\application\admin\GeneralConfig;
14
  use ContentEgg\application\components\ContentProduct;
15
+ use ContentEgg\application\helpers\TemplateHelper;
16
 
17
  /**
18
  * ModuleViewer class file
19
  *
20
  * @author keywordrush.com <support@keywordrush.com>
21
  * @link http://www.keywordrush.com
22
+ * @copyright Copyright &copy; 2021 keywordrush.com
23
  */
24
  class ModuleViewer {
25
 
85
  else
86
  $post_id = -1;
87
 
 
 
 
 
 
88
  $top_modules_priorities = array();
89
  $bottom_modules_priorities = array();
90
  foreach (ModuleManager::getInstance()->getModules(true) as $module_id => $module)
164
  }
165
  }
166
  }
167
+
168
+ // sort
169
+ if (!empty($params['sort']))
170
+ {
171
+ if ($params['sort'] == 'reverse')
172
+ $data = array_reverse ($data);
173
+ elseif ($params['sort'] == 'price' || $params['sort'] == 'discount')
174
+ $data = TemplateHelper::sortByPrice($data, $params['order'], $params['sort']);
175
+ }
176
 
177
  $module = ModuleManager::factory($module_id);
178
  $keyword = \get_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $module->getId(), true);
223
  $disable_features = $params['disable_features'];
224
  else
225
  $disable_features = 0;
226
+
227
  if (isset($params['btn_text']))
228
  $btn_text = $params['btn_text'];
229
  else
286
  if (!isset($params['shortcoded']) || (bool) $params['shortcoded'])
287
  Shortcoded::getInstance($post_id)->setShortcodedModule($module_id);
288
  }
289
+
290
+
291
  if (!$data)
292
  return;
293
 
application/Plugin.php CHANGED
@@ -13,12 +13,12 @@ use ContentEgg\application\components\ExternalFeaturedImage;
13
  *
14
  * @author keywordrush.com <support@keywordrush.com>
15
  * @link https://www.keywordrush.com
16
- * @copyright Copyright &copy; 2021 keywordrush.com
17
  */
18
  class Plugin {
19
 
20
- const version = '5.2.1';
21
- const db_version = 53;
22
  const wp_requires = '4.6.1';
23
  const slug = 'content-egg';
24
  const short_slug = 'cegg';
@@ -29,7 +29,6 @@ class Plugin {
29
  const website = 'https://www.keywordrush.com';
30
  const supportUri = 'https://www.keywordrush.com/contact';
31
  const panelUri = 'https://www.keywordrush.com/panel';
32
-
33
 
34
  private static $instance = null;
35
  private static $is_pro = null;
@@ -65,6 +64,9 @@ class Plugin {
65
  ModuleUpdateScheduler::initAction();
66
  WooIntegrator::initAction();
67
  ExternalFeaturedImage::initAction();
 
 
 
68
  new ProductSearchWidget;
69
  new PriceMoversWidget;
70
  }
@@ -146,7 +148,7 @@ class Plugin {
146
 
147
  public static function isActivated()
148
  {
149
- if (self::isPro() && \ContentEgg\application\admin\LicConfig::getInstance()->option('license_key'))
150
  return true;
151
  else
152
  return false;
@@ -220,7 +222,8 @@ class Plugin {
220
 
221
  public function registerAmpStyles()
222
  {
223
- echo '.egg-container table td{padding:0} .egg-container .btn,.egg-container .cegg-price{white-space:nowrap;font-weight:700}.cegg-couponcode,.cegg-gridbox a{text-decoration:none}.egg-container .cegg-gridbox{box-shadow:0 8px 16px -6px #eee;border:1px solid #ddd;margin-bottom:25px;padding:20px}.egg-container .egg-listcontainer .row-products>div{margin-bottom:12px}.egg-container .btn{display:inline-block;padding:7px 14px;margin-bottom:0;font-size:14px;line-height:1.42857143;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.egg-container .btn-danger{color:#fff;background-color:#5cb85c;border-color:#4cae4c;text-decoration:none}.egg-container .panel-default{border:1px solid #ddd;padding:20px}.cegg-price-alert-wrap,.cegg-price-tracker-item div[id$=chart]{display:none}.cegg-price-tracker-panel .btn{margin-bottom:6px}.egg-container .cegg-no-top-margin{margin-top:0}.egg-container .cegg-mb5{margin-bottom:5px}.egg-container .cegg-mb10{margin-bottom:10px}.egg-container .cegg-mb15{margin-bottom:15px}.egg-container .cegg-mb20{margin-bottom:20px}.egg-container .cegg-mb25{margin-bottom:25px}.egg-container .cegg-mb30{margin-bottom:30px}.egg-container .cegg-mb35{margin-bottom:35px}.egg-container .cegg-lineh-20{line-height:20px}.egg-container .cegg-mr10{margin-right:10px}.egg-container .cegg-mr5{margin-right:5px}.egg-container .btn.cegg-btn-big{padding:13px 60px;line-height:1;font-size:20px;font-weight:700}.cegg-couponcode{text-align:center;background:#efffda;padding:8px;display:block;border:2px dashed #5cb85c;margin-bottom:12px}.cegg-bordered-box{border:2px solid #ededed;padding:25px}.cegg-price-tracker-item .cegg-price{font-size:22px;font-weight:700}.egg-list-coupons .btn{font-size:16px;font-weight:700;display:block}.cegg-listlogo-title{line-height:18px;font-size:15px}.cegg-list-withlogos .cegg-price,.egg-listcontainer .cegg-price{font-weight:700;font-size:20px;color:#5aaf0b}.egg-container .cegg-list-withlogos .btn{font-weight:700;font-size:15px;padding:8px 16px}.cegg-price-row strike{opacity:.42;font-size:90%}.cegg-list-logo-title{font-weight:700;font-size:17px}.egg-container .cegg-btn-grid .btn{display:block;margin-bottom:10px}#cegg_market .cegg-image-container img{max-height:350px}.cegg-review-block{padding:20px;border:1px solid #eee}.cegg-line-hr{clear:both;border-top:1px solid #eee;height:1px}.amp-wp-article-content .cegg-btn-row amp-img,.amp-wp-article-content .cegg-desc-cell amp-img,.amp-wp-article-content .cegg-price-tracker-panel .cegg-mb5 amp-img,.amp-wp-article-content .producttitle amp-img{display:inline-block;margin:0 4px 0 0;vertical-align:middle}.egg-container .cegg-promotion{top:25px;left:0;position:absolute;z-index:10}.egg-container .cegg-discount{background-color:#eb5e58;border-radius:0 4px 4px 0;color:#fff;display:inline-block;font-size:16px;padding:3px 5px}.cegg-thumb{position:relative} @media (max-width: 767px) {.egg-container .hidden-xs {display: none !important;}} .egg-container .visible-xs {display: none !important;} @media (max-width: 767px) {.egg-container .visible-xs {display: block !important;}}';
 
224
  }
225
 
226
  }
13
  *
14
  * @author keywordrush.com <support@keywordrush.com>
15
  * @link https://www.keywordrush.com
16
+ * @copyright Copyright &copy; 2022 keywordrush.com
17
  */
18
  class Plugin {
19
 
20
+ const version = '5.3.0';
21
+ const db_version = 54;
22
  const wp_requires = '4.6.1';
23
  const slug = 'content-egg';
24
  const short_slug = 'cegg';
29
  const website = 'https://www.keywordrush.com';
30
  const supportUri = 'https://www.keywordrush.com/contact';
31
  const panelUri = 'https://www.keywordrush.com/panel';
 
32
 
33
  private static $instance = null;
34
  private static $is_pro = null;
64
  ModuleUpdateScheduler::initAction();
65
  WooIntegrator::initAction();
66
  ExternalFeaturedImage::initAction();
67
+ if (!self::isFree())
68
+ DataRestController::getInstance()->init();
69
+
70
  new ProductSearchWidget;
71
  new PriceMoversWidget;
72
  }
148
 
149
  public static function isActivated()
150
  {
151
+ if (self::isPro() && \ContentEgg\application\admin\LicConfig::getInstance()->option('license_key', false))
152
  return true;
153
  else
154
  return false;
222
 
223
  public function registerAmpStyles()
224
  {
225
+ echo '.egg-container table td{padding:0} .egg-container .btn,.egg-container .cegg-price{white-space:nowrap;font-weight:700}.cegg-couponcode,.cegg-gridbox a{text-decoration:none}.egg-container .cegg-gridbox{box-shadow:0 8px 16px -6px #eee;border:1px solid #ddd;margin-bottom:25px;padding:20px}.egg-container .egg-listcontainer .row-products>div{margin-bottom:12px}.egg-container .btn{display:inline-block;padding:7px 14px;margin-bottom:0;font-size:14px;line-height:1.42857143;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.egg-container .btn-danger{color:#fff;background-color:#5cb85c;border-color:#4cae4c;text-decoration:none}.egg-container .panel-default{border:1px solid #ddd;padding:20px}.cegg-price-alert-wrap,.cegg-price-tracker-item div[id$=chart]{display:none}.cegg-price-tracker-panel .btn{margin-bottom:6px}.egg-container .cegg-no-top-margin{margin-top:0}.egg-container .cegg-mb5{margin-bottom:5px}.egg-container .cegg-mb10{margin-bottom:10px}.egg-container .cegg-mb15{margin-bottom:15px}.egg-container .cegg-mb20{margin-bottom:20px}.egg-container .cegg-mb25{margin-bottom:25px}.egg-container .cegg-mb30{margin-bottom:30px}.egg-container .cegg-mb35{margin-bottom:35px}.egg-container .cegg-lineh-20{line-height:20px}.egg-container .cegg-mr10{margin-right:10px}.egg-container .cegg-mr5{margin-right:5px}.egg-container .btn.cegg-btn-big{padding:13px 60px;line-height:1;font-size:20px;font-weight:700}.cegg-couponcode{text-align:center;background:#efffda;padding:8px;display:block;border:2px dashed #5cb85c;margin-bottom:12px}.cegg-bordered-box{border:2px solid #ededed;padding:25px}.cegg-price-tracker-item .cegg-price{font-size:22px;font-weight:700}.egg-list-coupons .btn{font-size:16px;font-weight:700;display:block}.cegg-listlogo-title{line-height:18px;font-size:15px}.cegg-list-withlogos .cegg-price,.egg-listcontainer .cegg-price{font-weight:700;font-size:20px;color:#5aaf0b}.egg-container .cegg-list-withlogos .btn{font-weight:700;font-size:15px;padding:8px 16px}.cegg-price-row strike{opacity:.42;font-size:90%}.cegg-list-logo-title{font-weight:700;font-size:17px}.egg-container .cegg-btn-grid .btn{display:block;margin-bottom:10px}#cegg_market .cegg-image-container img{max-height:350px}.cegg-review-block{padding:20px;border:1px solid #eee}.cegg-line-hr{clear:both;border-top:1px solid #eee;height:1px}.amp-wp-article-content .cegg-btn-row amp-img,.amp-wp-article-content .cegg-desc-cell amp-img,.amp-wp-article-content .cegg-price-tracker-panel .cegg-mb5 amp-img,.amp-wp-article-content .producttitle amp-img{display:inline-block;margin:0 4px 0 0;vertical-align:middle}.egg-container .cegg-promotion{top:25px;left:0;position:absolute;z-index:10}.egg-container .cegg-discount{background-color:#eb5e58;border-radius:0 4px 4px 0;color:#fff;display:inline-block;font-size:16px;padding:3px 5px}.cegg-thumb{position:relative}'
226
+ . '@media (max-width: 767px) {body .egg-container .hidden-xs {display: none;} body .egg-container .visible-xs {display: block;}} body .egg-container .visible-xs {display: none;}';
227
  }
228
 
229
  }
application/WooIntegrator.php CHANGED
@@ -146,7 +146,9 @@ class WooIntegrator {
146
  $product->set_regular_price($item['price'] * $currency_rate);
147
  } else
148
  {
149
- $product->set_regular_price($item['priceOld'] * $currency_rate);
 
 
150
  if (!\apply_filters('cegg_dont_touch_sale_price', false))
151
  $product->set_sale_price($item['price'] * $currency_rate);
152
  }
@@ -260,7 +262,7 @@ class WooIntegrator {
260
  // Register the taxonomy now so that the import works!
261
  if (!\taxonomy_exists($taxonomy))
262
  {
263
- $taxonomy = TextHelper::truncate($taxonomy, 32, '');
264
  \register_taxonomy(
265
  $taxonomy, apply_filters('woocommerce_taxonomy_objects_' . $taxonomy, array('product')), apply_filters('woocommerce_taxonomy_args_' . $taxonomy, array(
266
  'hierarchical' => true,
146
  $product->set_regular_price($item['price'] * $currency_rate);
147
  } else
148
  {
149
+ if (!\apply_filters('cegg_dont_touch_retail_price', false))
150
+ $product->set_regular_price($item['priceOld'] * $currency_rate);
151
+
152
  if (!\apply_filters('cegg_dont_touch_sale_price', false))
153
  $product->set_sale_price($item['price'] * $currency_rate);
154
  }
262
  // Register the taxonomy now so that the import works!
263
  if (!\taxonomy_exists($taxonomy))
264
  {
265
+ $taxonomy = TextHelper::truncate($taxonomy, 32, '', 'UTF-8', true);
266
  \register_taxonomy(
267
  $taxonomy, apply_filters('woocommerce_taxonomy_objects_' . $taxonomy, array('product')), apply_filters('woocommerce_taxonomy_args_' . $taxonomy, array(
268
  'hierarchical' => true,
application/admin/AutoblogController.php CHANGED
@@ -134,7 +134,7 @@ class AutoblogController {
134
  {
135
  $item = array();
136
  $item['id'] = (int) $_POST['item']['id'];
137
- $item['name'] = trim(strip_tags($_POST['item']['name']));
138
  $item['status'] = absint($_POST['item']['status']);
139
  $item['keywords_per_run'] = absint($_POST['item']['keywords_per_run']);
140
  $item['run_frequency'] = absint($_POST['item']['run_frequency']);
@@ -240,7 +240,7 @@ class AutoblogController {
240
  }
241
 
242
  private function createAutoblog($item)
243
- {
244
  $item['keywords'] = TextHelper::prepareKeywords($item['keywords']);
245
 
246
  // save
@@ -371,4 +371,20 @@ class AutoblogController {
371
  PluginAdmin::getInstance()->render('_metabox_autoblog', array('item' => $item, 'batch' => $batch));
372
  }
373
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
374
  }
134
  {
135
  $item = array();
136
  $item['id'] = (int) $_POST['item']['id'];
137
+ $item['name'] = trim(\sanitize_text_field($_POST['item']['name']));
138
  $item['status'] = absint($_POST['item']['status']);
139
  $item['keywords_per_run'] = absint($_POST['item']['keywords_per_run']);
140
  $item['run_frequency'] = absint($_POST['item']['run_frequency']);
240
  }
241
 
242
  private function createAutoblog($item)
243
+ {
244
  $item['keywords'] = TextHelper::prepareKeywords($item['keywords']);
245
 
246
  // save
371
  PluginAdmin::getInstance()->render('_metabox_autoblog', array('item' => $item, 'batch' => $batch));
372
  }
373
 
374
+
375
+ private static function createTable()
376
+ {
377
+ $models = array('AutoblogModel');
378
+ $sql = '';
379
+ foreach ($models as $model)
380
+ {
381
+ $m = "\\ContentEgg\\application\\models\\" . $model;
382
+ $sql .= $m::model()->getDump();
383
+ $sql .= "\r\n";
384
+ }
385
+ require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
386
+
387
+ dbDelta($sql);
388
+ }
389
+
390
  }
application/admin/EggMetabox.php CHANGED
@@ -11,14 +11,15 @@ use ContentEgg\application\components\ContentManager;
11
  use ContentEgg\application\components\ContentProduct;
12
  use ContentEgg\application\components\ContentCoupon;
13
  use ContentEgg\application\components\ExtraData;
 
14
  use ContentEgg\application\Plugin;
15
 
16
  /**
17
  * EggMetabox class file
18
  *
19
  * @author keywordrush.com <support@keywordrush.com>
20
- * @link http://www.keywordrush.com/
21
- * @copyright Copyright &copy; 2016 keywordrush.com
22
  */
23
  class EggMetabox {
24
 
@@ -26,6 +27,9 @@ class EggMetabox {
26
 
27
  public function __construct()
28
  {
 
 
 
29
  \add_action('add_meta_boxes', array($this, 'addMetabox'));
30
  \add_action('save_post', array($this, 'saveMeta'));
31
  }
@@ -76,7 +80,11 @@ class EggMetabox {
76
 
77
  PluginAdmin::render('metabox_general');
78
 
79
- foreach (ModuleManager::getInstance()->getModules(true) as $module)
 
 
 
 
80
  {
81
  $module->enqueueScripts();
82
  $module->renderMetaboxModule();
@@ -152,7 +160,6 @@ class EggMetabox {
152
 
153
  // blank Coupon
154
  $coupon = new ContentCoupon;
155
- //$content->extra = new ExtraDataC;
156
  $this->addAppParam('contentCoupon', $coupon);
157
  }
158
 
11
  use ContentEgg\application\components\ContentProduct;
12
  use ContentEgg\application\components\ContentCoupon;
13
  use ContentEgg\application\components\ExtraData;
14
+ use ContentEgg\application\components\LManager;
15
  use ContentEgg\application\Plugin;
16
 
17
  /**
18
  * EggMetabox class file
19
  *
20
  * @author keywordrush.com <support@keywordrush.com>
21
+ * @link https://www.keywordrush.com
22
+ * @copyright Copyright &copy; 2021 keywordrush.com
23
  */
24
  class EggMetabox {
25
 
27
 
28
  public function __construct()
29
  {
30
+ if (Plugin::isActivated() && LManager::isNulled())
31
+ return;
32
+
33
  \add_action('add_meta_boxes', array($this, 'addMetabox'));
34
  \add_action('save_post', array($this, 'saveMeta'));
35
  }
80
 
81
  PluginAdmin::render('metabox_general');
82
 
83
+ $modules = ModuleManager::getInstance()->getModules(true);
84
+ $module_ids = \apply_filters('content_egg_metabox_modules', array_keys($modules));
85
+ $modules = array_intersect_key($modules, array_flip($module_ids));
86
+
87
+ foreach ($modules as $module)
88
  {
89
  $module->enqueueScripts();
90
  $module->renderMetaboxModule();
160
 
161
  // blank Coupon
162
  $coupon = new ContentCoupon;
 
163
  $this->addAppParam('contentCoupon', $coupon);
164
  }
165
 
application/admin/GeneralConfig.php CHANGED
@@ -297,7 +297,7 @@ class GeneralConfig extends Config {
297
  'absint',
298
  array(
299
  'call' => array('\ContentEgg\application\helpers\FormValidator', 'less_than_equal_to'),
300
- 'arg' => 365,
301
  'message' => sprintf(__('The field "%s" can\'t be more than %d.', 'content-egg'), __('Price history', 'content-egg'), 365),
302
  ),
303
  ),
297
  'absint',
298
  array(
299
  'call' => array('\ContentEgg\application\helpers\FormValidator', 'less_than_equal_to'),
300
+ 'arg' => 1875,
301
  'message' => sprintf(__('The field "%s" can\'t be more than %d.', 'content-egg'), __('Price history', 'content-egg'), 365),
302
  ),
303
  ),
application/admin/PluginAdmin.php CHANGED
@@ -10,6 +10,7 @@ use ContentEgg\application\admin\GeneralConfig;
10
  use ContentEgg\application\components\ModuleManager;
11
  use ContentEgg\application\components\ModuleApi;
12
  use ContentEgg\application\components\LManager;
 
13
  use ContentEgg\application\components\FeaturedImage;
14
  use ContentEgg\application\ModuleUpdateScheduler;
15
 
@@ -45,11 +46,14 @@ class PluginAdmin {
45
  {
46
  \add_filter('plugin_row_meta', array($this, 'add_plugin_row_meta'), 10, 2);
47
  }
48
-
49
  AdminNotice::getInstance()->adminInit();
50
  if (!Plugin::isFree())
51
  LManager::getInstance()->adminInit();
52
-
 
 
 
53
  if (Plugin::isFree() || (Plugin::isPro() && Plugin::isActivated()) || Plugin::isEnvato())
54
  {
55
  GeneralConfig::getInstance()->adminInit();
@@ -64,19 +68,22 @@ class PluginAdmin {
64
  new ToolsController;
65
  new ImportExportController;
66
  AeIntegrationConfig::getInstance()->adminInit();
67
- ModuleUpdateScheduler::addScheduleEvent();
68
  }
69
 
70
  if (Plugin::isEnvato() && !Plugin::isActivated() && !\get_option(Plugin::slug . '_env_install'))
71
  EnvatoConfig::getInstance()->adminInit();
72
  elseif (Plugin::isPro())
73
  LicConfig::getInstance()->adminInit();
74
-
75
  if (Plugin::isPro() && Plugin::isActivated())
76
  {
77
  new \ContentEgg\application\Autoupdate(Plugin::version(), plugin_basename(\ContentEgg\PLUGIN_FILE), Plugin::getApiBase(), Plugin::slug);
78
  }
79
-
 
 
 
80
  }
81
 
82
  function admin_load_scripts()
@@ -94,9 +101,8 @@ class PluginAdmin {
94
  'are_you_shure' => __('Are you sure?', 'content-egg'),
95
  'sitelang' => GeneralConfig::getInstance()->option('lang'),
96
  ));
97
-
98
- \wp_enqueue_style('contentegg-admin', \ContentEgg\PLUGIN_RES . '/css/admin.css', null, '' . Plugin::version());
99
 
 
100
  }
101
 
102
  public function add_plugin_row_meta(array $links, $file)
10
  use ContentEgg\application\components\ModuleManager;
11
  use ContentEgg\application\components\ModuleApi;
12
  use ContentEgg\application\components\LManager;
13
+ use ContentEgg\application\components\ReviewNotice;
14
  use ContentEgg\application\components\FeaturedImage;
15
  use ContentEgg\application\ModuleUpdateScheduler;
16
 
46
  {
47
  \add_filter('plugin_row_meta', array($this, 'add_plugin_row_meta'), 10, 2);
48
  }
49
+
50
  AdminNotice::getInstance()->adminInit();
51
  if (!Plugin::isFree())
52
  LManager::getInstance()->adminInit();
53
+
54
+ if (Plugin::isFree())
55
+ ReviewNotice::getInstance()->adminInit();
56
+
57
  if (Plugin::isFree() || (Plugin::isPro() && Plugin::isActivated()) || Plugin::isEnvato())
58
  {
59
  GeneralConfig::getInstance()->adminInit();
68
  new ToolsController;
69
  new ImportExportController;
70
  AeIntegrationConfig::getInstance()->adminInit();
71
+ ModuleUpdateScheduler::addScheduleEvent();
72
  }
73
 
74
  if (Plugin::isEnvato() && !Plugin::isActivated() && !\get_option(Plugin::slug . '_env_install'))
75
  EnvatoConfig::getInstance()->adminInit();
76
  elseif (Plugin::isPro())
77
  LicConfig::getInstance()->adminInit();
78
+
79
  if (Plugin::isPro() && Plugin::isActivated())
80
  {
81
  new \ContentEgg\application\Autoupdate(Plugin::version(), plugin_basename(\ContentEgg\PLUGIN_FILE), Plugin::getApiBase(), Plugin::slug);
82
  }
83
+
84
+
85
+ //$module = ModuleManager::factory('Feed__2');
86
+ //$module->importProducts('http://localhost:8888/feed-test.xml');
87
  }
88
 
89
  function admin_load_scripts()
101
  'are_you_shure' => __('Are you sure?', 'content-egg'),
102
  'sitelang' => GeneralConfig::getInstance()->option('lang'),
103
  ));
 
 
104
 
105
+ \wp_enqueue_style('contentegg-admin', \ContentEgg\PLUGIN_RES . '/css/admin.css', null, '' . Plugin::version());
106
  }
107
 
108
  public function add_plugin_row_meta(array $links, $file)
application/admin/ProductTable.php CHANGED
@@ -14,8 +14,8 @@ use ContentEgg\application\components\ModuleManager;
14
  * ProductTable class file
15
  *
16
  * @author keywordrush.com <support@keywordrush.com>
17
- * @link http://www.keywordrush.com/
18
- * @copyright Copyright &copy; 2018 keywordrush.com
19
  */
20
  class ProductTable extends MyListTable {
21
 
@@ -57,6 +57,8 @@ class ProductTable extends MyListTable {
57
  $edit_link = \get_edit_post_link($item['post_id']) . '#' . $item['module_id'] . '-' . $item['unique_id'];
58
  $actions = array(
59
  'post_id' => sprintf(__('Post ID: %d', 'content-egg'), $item['post_id']),
 
 
60
  'edit' => sprintf('<a href="%s">%s</a>', \esc_url($edit_link), __('Edit', 'content-egg')),
61
  );
62
  if ($item['url'])
@@ -199,7 +201,7 @@ class ProductTable extends MyListTable {
199
 
200
  if (isset($_GET['module_id']) && $_GET['module_id'] !== '')
201
  {
202
- $module_id = TextHelper::clear(\wp_unslash($_GET['module_id']));
203
  if (ModuleManager::getInstance()->moduleExists($module_id))
204
  {
205
  if ($where)
@@ -223,7 +225,7 @@ class ProductTable extends MyListTable {
223
  foreach ($statuses as $status_id => $status_name)
224
  {
225
  $total = ProductModel::model()->count('stock_status = ' . (int) $status_id);
226
- $class = (isset($_REQUEST['stock_status']) && $_REQUEST['stock_status'] !== '' && (int) $_REQUEST['stock_status'] == $status_id) ? ' class="current"' : '';
227
  $status_links[$status_id] = '<a href="' . $admin_url . '&stock_status=' . (int) $status_id . '"' . $class . '>' . \esc_html($status_name);
228
  $status_links[$status_id] .= sprintf(' <span class="count">(%s)</span></a>', \number_format_i18n($total));
229
  }
14
  * ProductTable class file
15
  *
16
  * @author keywordrush.com <support@keywordrush.com>
17
+ * @link https://www.keywordrush.com
18
+ * @copyright Copyright &copy; 2021 keywordrush.com
19
  */
20
  class ProductTable extends MyListTable {
21
 
57
  $edit_link = \get_edit_post_link($item['post_id']) . '#' . $item['module_id'] . '-' . $item['unique_id'];
58
  $actions = array(
59
  'post_id' => sprintf(__('Post ID: %d', 'content-egg'), $item['post_id']),
60
+ 'view' => sprintf('<a href="%s">%s</a>', \get_post_permalink($item['post_id']), __('View', 'content-egg')),
61
+
62
  'edit' => sprintf('<a href="%s">%s</a>', \esc_url($edit_link), __('Edit', 'content-egg')),
63
  );
64
  if ($item['url'])
201
 
202
  if (isset($_GET['module_id']) && $_GET['module_id'] !== '')
203
  {
204
+ $module_id = TextHelper::clear(\sanitize_text_field(\wp_unslash($_GET['module_id'])));
205
  if (ModuleManager::getInstance()->moduleExists($module_id))
206
  {
207
  if ($where)
225
  foreach ($statuses as $status_id => $status_name)
226
  {
227
  $total = ProductModel::model()->count('stock_status = ' . (int) $status_id);
228
+ $class = (isset($_REQUEST['stock_status']) && $_REQUEST['stock_status'] !== '' && \sanitize_text_field($_REQUEST['stock_status']) == $status_id) ? ' class="current"' : '';
229
  $status_links[$status_id] = '<a href="' . $admin_url . '&stock_status=' . (int) $status_id . '"' . $class . '>' . \esc_html($status_name);
230
  $status_links[$status_id] .= sprintf(' <span class="count">(%s)</span></a>', \number_format_i18n($total));
231
  }
application/admin/ToolsController.php CHANGED
@@ -98,7 +98,7 @@ class ToolsController {
98
  die('You do not have permission to view this page.');
99
 
100
  if (isset($_GET['module']))
101
- $module_id = TextHelper::clear($_GET['module']);
102
  else
103
  die('Module param can not be empty.');
104
 
@@ -143,7 +143,7 @@ class ToolsController {
143
  die('You do not have permission to view this page.');
144
 
145
  if (isset($_GET['module']))
146
- $module_id = TextHelper::clear($_GET['module']);
147
  else
148
  die('Module param can not be empty.');
149
 
98
  die('You do not have permission to view this page.');
99
 
100
  if (isset($_GET['module']))
101
+ $module_id = TextHelper::clear(\sanitize_text_field($_GET['module']));
102
  else
103
  die('Module param can not be empty.');
104
 
143
  die('You do not have permission to view this page.');
144
 
145
  if (isset($_GET['module']))
146
+ $module_id = TextHelper::clear(\sanitize_text_field($_GET['module']));
147
  else
148
  die('Module param can not be empty.');
149
 
application/admin/views/_metabox_autoblog.php CHANGED
@@ -81,8 +81,8 @@ use ContentEgg\application\helpers\AdminHelper;
81
  ?>
82
  </ul>
83
  <div id="fragment-1">
84
-
85
-
86
  <div id="sug_btn_group" class="btn-group" data-toggle="buttons-radio" style="margin-bottom: 10px;">
87
  <input id="sug_google" name="sug_radio" value="sug_google" type="radio" checked="checked"><label for="sug_google">Google</label>
88
  <input id="sug_amazon" name="sug_radio" value="sug_amazon" type="radio"><label for="sug_amazon">Amazon</label>
@@ -330,7 +330,7 @@ use ContentEgg\application\helpers\AdminHelper;
330
  <td>
331
  <?php
332
  \wp_dropdown_users(array('name' => 'item[user_id]',
333
- 'who' => 'authors', 'id' => 'user_id', 'selected' => $item['user_id']));
334
  ?>
335
  <p class="description"><?php _e('This user will be author of posts.', 'content-egg'); ?></p>
336
  </td>
81
  ?>
82
  </ul>
83
  <div id="fragment-1">
84
+
85
+
86
  <div id="sug_btn_group" class="btn-group" data-toggle="buttons-radio" style="margin-bottom: 10px;">
87
  <input id="sug_google" name="sug_radio" value="sug_google" type="radio" checked="checked"><label for="sug_google">Google</label>
88
  <input id="sug_amazon" name="sug_radio" value="sug_amazon" type="radio"><label for="sug_amazon">Amazon</label>
330
  <td>
331
  <?php
332
  \wp_dropdown_users(array('name' => 'item[user_id]',
333
+ 'capability' => array('edit_posts'), 'id' => 'user_id', 'selected' => $item['user_id']));
334
  ?>
335
  <p class="description"><?php _e('This user will be author of posts.', 'content-egg'); ?></p>
336
  </td>
application/admin/views/_metabox_search_results.php CHANGED
@@ -13,10 +13,11 @@
13
  <span ng-show="result.domain" class="text-muted">&nbsp;&nbsp;<img src="https://www.google.com/s2/favicons?domain={{result.domain}}"> {{result.domain}}</span>
14
  <span ng-show="result.features.length">&nbsp;&nbsp;<small class="text-muted"><?php _e('Attributes:', 'content-egg'); ?> {{result.features.length}}</small></span>
15
  <span ng-show="result.ean">&nbsp;&nbsp;<small class="text-muted"><?php _e('EAN:', 'content-egg'); ?> {{result.ean}}</small></span>
16
- <?php if ($module_id == 'Amazon'): ?>
17
  <span class="text-muted">
18
  <br>
19
  <small class="text-primary" ng-show="result.extra.IsPrimeEligible">PRIME</small>
 
20
  <small class="text-success" ng-show="result.extra.IsEligibleForSuperSaverShipping">Free Shipping<span ng-show="result.extra.IsAmazonFulfilled"> by Amazon</span></small>
21
  </span>
22
  <?php endif; ?>
13
  <span ng-show="result.domain" class="text-muted">&nbsp;&nbsp;<img src="https://www.google.com/s2/favicons?domain={{result.domain}}"> {{result.domain}}</span>
14
  <span ng-show="result.features.length">&nbsp;&nbsp;<small class="text-muted"><?php _e('Attributes:', 'content-egg'); ?> {{result.features.length}}</small></span>
15
  <span ng-show="result.ean">&nbsp;&nbsp;<small class="text-muted"><?php _e('EAN:', 'content-egg'); ?> {{result.ean}}</small></span>
16
+ <?php if ($module_id == 'Amazon' || $module_id == 'AmazonNoApi' || $module_id == 'Ebay2'): ?>
17
  <span class="text-muted">
18
  <br>
19
  <small class="text-primary" ng-show="result.extra.IsPrimeEligible">PRIME</small>
20
+ <small class="text-primary" ng-show="result.extra.priorityListing">Priority listing</small>
21
  <small class="text-success" ng-show="result.extra.IsEligibleForSuperSaverShipping">Free Shipping<span ng-show="result.extra.IsAmazonFulfilled"> by Amazon</span></small>
22
  </span>
23
  <?php endif; ?>
application/admin/views/autoblog_edit.php CHANGED
@@ -30,8 +30,8 @@
30
  </p>
31
  </div>
32
  <form action="<?php echo add_query_arg('noheader', 'true'); ?>" id="form" method="POST"<?php if ($batch) echo ' enctype="multipart/form-data" accept-charset="utf-8"'; ?>>
33
- <input type="hidden" name="nonce" value="<?php echo $nonce; ?>"/>
34
- <input type="hidden" name="item[id]" value="<?php echo $item['id']; ?>"/>
35
  <div class="metabox-holder" id="poststuff">
36
  <div id="post-body">
37
  <div id="post-body-content">
30
  </p>
31
  </div>
32
  <form action="<?php echo add_query_arg('noheader', 'true'); ?>" id="form" method="POST"<?php if ($batch) echo ' enctype="multipart/form-data" accept-charset="utf-8"'; ?>>
33
+ <input type="hidden" name="nonce" value="<?php echo \esc_attr($nonce); ?>"/>
34
+ <input type="hidden" name="item[id]" value="<?php echo \esc_attr($item['id']); ?>"/>
35
  <div class="metabox-holder" id="poststuff">
36
  <div id="post-body">
37
  <div id="post-body-content">
application/admin/views/autoblog_index.php CHANGED
@@ -47,7 +47,7 @@ if ($table->current_action() == 'run')
47
  </div>
48
 
49
  <form id="eggs-table" method="GET">
50
- <input type="hidden" name="page" value="<?php echo $_REQUEST['page'] ?>"/>
51
  <?php $table->display() ?>
52
  </form>
53
  </div>
47
  </div>
48
 
49
  <form id="eggs-table" method="GET">
50
+ <input type="hidden" name="page" value="content-egg-autoblog"/>
51
  <?php $table->display() ?>
52
  </form>
53
  </div>
application/admin/views/import_export.php CHANGED
@@ -28,7 +28,7 @@
28
  <h3><?php _e('Load settings', 'content-egg'); ?></h3>
29
  <p><?php _e('Copy settings from another site and click on "Import".', 'content-egg'); ?></p>
30
  <form id="form" method="POST">
31
- <input type="hidden" name="nonce" value="<?php echo $nonce; ?>"/>
32
  <textarea name="import_str" rows="8" cols="70"></textarea>
33
  <p><input type="submit" value="<?php _e('Import', 'content-egg'); ?>" id="config_submit" class="button-primary" name="submit"></p>
34
  </form>
28
  <h3><?php _e('Load settings', 'content-egg'); ?></h3>
29
  <p><?php _e('Copy settings from another site and click on "Import".', 'content-egg'); ?></p>
30
  <form id="form" method="POST">
31
+ <input type="hidden" name="nonce" value="<?php echo \esc_attr($nonce); ?>"/>
32
  <textarea name="import_str" rows="8" cols="70"></textarea>
33
  <p><input type="submit" value="<?php _e('Import', 'content-egg'); ?>" id="config_submit" class="button-primary" name="submit"></p>
34
  </form>
application/admin/views/module_settings.php CHANGED
@@ -107,7 +107,7 @@
107
  <br />
108
  <div><a target="_blank" class="page-title-action" href="<?php echo \get_admin_url(\get_current_blog_id(), 'admin.php?page=content-egg-tools&action=feed-export&field=ean&module=' . urlencode($module->getId())); ?>"><?php _e('Export product EANs', 'content-egg') ?></a></div>
109
  <br />
110
- <div><a target="_blank" class="page-title-action" href="<?php echo \get_admin_url(\get_current_blog_id(), 'admin.php?page=content-egg-tools&action=feed-export&field=ean_dublicate&module=' . urlencode($module->getId())); ?>"><?php _e('Export dublicate EANs', 'content-egg') ?></a></div>
111
  <?php endif; ?>
112
 
113
  <?php endif; ?>
107
  <br />
108
  <div><a target="_blank" class="page-title-action" href="<?php echo \get_admin_url(\get_current_blog_id(), 'admin.php?page=content-egg-tools&action=feed-export&field=ean&module=' . urlencode($module->getId())); ?>"><?php _e('Export product EANs', 'content-egg') ?></a></div>
109
  <br />
110
+ <div><a target="_blank" class="page-title-action" href="<?php echo \get_admin_url(\get_current_blog_id(), 'admin.php?page=content-egg-tools&action=feed-export&field=ean_dublicate&module=' . urlencode($module->getId())); ?>"><?php _e('Export duplicate EANs', 'content-egg') ?></a></div>
111
  <?php endif; ?>
112
 
113
  <?php endif; ?>
application/admin/views/product_index.php CHANGED
@@ -33,9 +33,9 @@ $message = '';
33
 
34
 
35
  <form id="cegg-products-table" method="GET">
36
- <input type="hidden" name="page" value="<?php echo \esc_attr($_REQUEST['page']); ?>"/>
37
  <?php if (isset($_REQUEST['stock_status'])): ?>
38
- <input type="hidden" name="stock_status" value="<?php echo \esc_attr($_REQUEST['stock_status']); ?>"/>
39
  <?php endif; ?>
40
  <?php $table->views(); ?>
41
  <?php $table->search_box(__('Search products', 'content-egg'), 'key'); ?>
33
 
34
 
35
  <form id="cegg-products-table" method="GET">
36
+ <input type="hidden" name="page" value="content-egg-product"/>
37
  <?php if (isset($_REQUEST['stock_status'])): ?>
38
+ <input type="hidden" name="stock_status" value="<?php echo \esc_attr(\sanitize_text_field($_REQUEST['stock_status'])); ?>"/>
39
  <?php endif; ?>
40
  <?php $table->views(); ?>
41
  <?php $table->search_box(__('Search products', 'content-egg'), 'key'); ?>
application/components/AffiliateFeedParserModule.php CHANGED
@@ -13,14 +13,14 @@ use ContentEgg\application\helpers\TextHelper;
13
  *
14
  * @author keywordrush.com <support@keywordrush.com>
15
  * @link https://www.keywordrush.com
16
- * @copyright Copyright &copy; 2021 keywordrush.com
17
  */
18
  abstract class AffiliateFeedParserModule extends AffiliateParserModule {
19
 
20
  const TRANSIENT_LAST_IMPORT_DATE = 'cegg_products_last_import_';
21
- const PRODUCTS_TTL = 86400;
22
  const MULTIPLE_INSERT_ROWS = 50;
23
- const IMPORT_TIME_LIMT = 300;
24
  const DATAFEED_DIR_NAME = 'cegg-datafeeds';
25
  const TRANSIENT_LAST_IMPORT_ERROR = 'cegg_last_import_error_';
26
 
@@ -139,10 +139,15 @@ abstract class AffiliateFeedParserModule extends AffiliateParserModule {
139
  return false;
140
  }
141
 
 
 
 
 
 
142
  public function isImportTime()
143
  {
144
  $last_export = $this->getLastImportDate();
145
- if (!$last_export || (time() - $last_export > self::PRODUCTS_TTL))
146
  return true;
147
  else
148
  return false;
@@ -226,6 +231,17 @@ abstract class AffiliateFeedParserModule extends AffiliateParserModule {
226
  }
227
 
228
  protected function processFeed($file)
 
 
 
 
 
 
 
 
 
 
 
229
  {
230
  $encoding = $this->config('encoding', 'UTF-8');
231
 
@@ -242,14 +258,21 @@ abstract class AffiliateFeedParserModule extends AffiliateParserModule {
242
  $data = array_map('utf8_encode', $data);
243
 
244
  if (!$fields)
245
- {
246
- // remove bom
247
  $data = str_replace("\xEF\xBB\xBF", '', $data);
 
 
 
 
 
 
 
248
  $fields = $data;
249
  continue;
250
  }
 
251
  if (count($fields) != count($data))
252
  continue;
 
253
  $data = array_combine($fields, $data);
254
 
255
  try
@@ -257,6 +280,8 @@ abstract class AffiliateFeedParserModule extends AffiliateParserModule {
257
  $product = $this->feedProductPrepare($data);
258
  } catch (\Exception $e)
259
  {
 
 
260
  $this->setLastImportError($e->getMessage());
261
  fclose($handle);
262
  return;
@@ -267,8 +292,10 @@ abstract class AffiliateFeedParserModule extends AffiliateParserModule {
267
 
268
  if (!empty($product['ean']))
269
  $product['ean'] = TextHelper::fixEan($product['ean']);
 
270
  if ($in_stock_only && $product['stock_status'] == ContentProduct::STOCK_STATUS_OUT_OF_STOCK)
271
  continue;
 
272
  $products[] = $product;
273
  $i++;
274
  if ($i % static::MULTIPLE_INSERT_ROWS == 0)
@@ -279,8 +306,164 @@ abstract class AffiliateFeedParserModule extends AffiliateParserModule {
279
  }
280
  if ($products)
281
  $this->product_model->multipleInsert($products, static::MULTIPLE_INSERT_ROWS);
 
282
 
283
- fclose($handle);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
  }
285
 
286
  public function getLastImportDateReadable()
@@ -412,4 +595,13 @@ abstract class AffiliateFeedParserModule extends AffiliateParserModule {
412
  }
413
  }
414
 
 
 
 
 
 
 
 
 
 
415
  }
13
  *
14
  * @author keywordrush.com <support@keywordrush.com>
15
  * @link https://www.keywordrush.com
16
+ * @copyright Copyright &copy; 2022 keywordrush.com
17
  */
18
  abstract class AffiliateFeedParserModule extends AffiliateParserModule {
19
 
20
  const TRANSIENT_LAST_IMPORT_DATE = 'cegg_products_last_import_';
21
+ const PRODUCTS_TTL = 43200;
22
  const MULTIPLE_INSERT_ROWS = 50;
23
+ const IMPORT_TIME_LIMT = 600;
24
  const DATAFEED_DIR_NAME = 'cegg-datafeeds';
25
  const TRANSIENT_LAST_IMPORT_ERROR = 'cegg_last_import_error_';
26
 
139
  return false;
140
  }
141
 
142
+ public static function getProductsTtl()
143
+ {
144
+ return \apply_filters('cegg_feed_products_ttl', self::PRODUCTS_TTL);
145
+ }
146
+
147
  public function isImportTime()
148
  {
149
  $last_export = $this->getLastImportDate();
150
+ if (!$last_export || (time() - $last_export > self::getProductsTtl()))
151
  return true;
152
  else
153
  return false;
231
  }
232
 
233
  protected function processFeed($file)
234
+ {
235
+ $format = $this->config('feed_format', 'csv');
236
+ if ($format == 'xml')
237
+ $this->processFeedXml($file);
238
+ elseif ($format == 'json')
239
+ $this->processFeedJson($file);
240
+ else
241
+ $this->processFeedCsv($file);
242
+ }
243
+
244
+ protected function processFeedCsv($file)
245
  {
246
  $encoding = $this->config('encoding', 'UTF-8');
247
 
258
  $data = array_map('utf8_encode', $data);
259
 
260
  if (!$fields)
 
 
261
  $data = str_replace("\xEF\xBB\xBF", '', $data);
262
+
263
+ $data = array_map(function($item) {
264
+ return trim($item, ' \'"');
265
+ }, $data);
266
+
267
+ if (!$fields)
268
+ {
269
  $fields = $data;
270
  continue;
271
  }
272
+
273
  if (count($fields) != count($data))
274
  continue;
275
+
276
  $data = array_combine($fields, $data);
277
 
278
  try
280
  $product = $this->feedProductPrepare($data);
281
  } catch (\Exception $e)
282
  {
283
+ if ($i > 10)
284
+ continue;
285
  $this->setLastImportError($e->getMessage());
286
  fclose($handle);
287
  return;
292
 
293
  if (!empty($product['ean']))
294
  $product['ean'] = TextHelper::fixEan($product['ean']);
295
+
296
  if ($in_stock_only && $product['stock_status'] == ContentProduct::STOCK_STATUS_OUT_OF_STOCK)
297
  continue;
298
+
299
  $products[] = $product;
300
  $i++;
301
  if ($i % static::MULTIPLE_INSERT_ROWS == 0)
306
  }
307
  if ($products)
308
  $this->product_model->multipleInsert($products, static::MULTIPLE_INSERT_ROWS);
309
+ }
310
 
311
+ protected function processFeedXml($file)
312
+ {
313
+ $uniqueNode = $this->getProductNode();
314
+ if (!$uniqueNode)
315
+ $uniqueNode = 'offer';
316
+
317
+ $streamer = \ContentEgg\application\vendor\XmlStringStreamer\XmlStringStreamer::createUniqueNodeParser($file, array('uniqueNode' => $uniqueNode));
318
+ $in_stock_only = $this->config('in_stock', false);
319
+ $i = 0;
320
+ $products = array();
321
+
322
+ libxml_use_internal_errors(true);
323
+
324
+ $encoding = $this->config('encoding', 'UTF-8');
325
+
326
+ while ($node_string = $streamer->getNode())
327
+ {
328
+ if ($encoding != 'UTF-8')
329
+ $node_string = iconv($encoding, 'UTF-8//TRANSLIT//IGNORE', $node_string);
330
+
331
+ $node = simplexml_load_string($node_string);
332
+ if ($node === false)
333
+ {
334
+ $err_mess = 'Cannot load xml source.';
335
+
336
+ if ($error = libxml_get_last_error())
337
+ $err_mess .= $error->message;
338
+
339
+ $this->setLastImportError($err_mess);
340
+
341
+ return;
342
+ }
343
+
344
+ $data = $this->mapXmlData($node);
345
+
346
+ try
347
+ {
348
+ $product = $this->feedProductPrepare($data);
349
+ } catch (\Exception $e)
350
+ {
351
+ if ($i > 10)
352
+ continue;
353
+
354
+ $this->setLastImportError($e->getMessage());
355
+ return;
356
+ }
357
+
358
+ if (!$product)
359
+ continue;
360
+
361
+ if (!empty($product['ean']))
362
+ $product['ean'] = TextHelper::fixEan($product['ean']);
363
+
364
+ if ($in_stock_only && $product['stock_status'] == ContentProduct::STOCK_STATUS_OUT_OF_STOCK)
365
+ continue;
366
+
367
+ $products[] = $product;
368
+ $i++;
369
+ if ($i % static::MULTIPLE_INSERT_ROWS == 0)
370
+ {
371
+ $this->product_model->multipleInsert($products, static::MULTIPLE_INSERT_ROWS);
372
+ $products = array();
373
+ }
374
+ }
375
+
376
+ if ($i == 0)
377
+ $this->setLastImportError('Product node not found.');
378
+
379
+ if ($products)
380
+ $this->product_model->multipleInsert($products, static::MULTIPLE_INSERT_ROWS);
381
+ }
382
+
383
+ protected function processFeedJson($file)
384
+ {
385
+ $encoding = $this->config('encoding', 'UTF-8');
386
+ $in_stock_only = $this->config('in_stock', false);
387
+
388
+ $json = file_get_contents($file);
389
+ $json_arr = json_decode($json, true);
390
+
391
+ if (!$json_arr)
392
+ {
393
+ $this->setLastImportError(trim('Cannot decode JSON source. ' . json_last_error_msg()));
394
+ return;
395
+ }
396
+
397
+ $node = $this->getProductNode();
398
+
399
+ if (!$node && is_array($json_arr))
400
+ {
401
+ $node = 'offer';
402
+ $json_arr = array($node => $json_arr);
403
+ }
404
+
405
+ if (!isset($json_arr[$node]) || !is_array($json_arr[$node]))
406
+ {
407
+ $this->setLastImportError('The product node "' . \esc_html($node) . '" does not exist.');
408
+ return;
409
+ }
410
+
411
+ $i = 0;
412
+ foreach ($json_arr[$node] as $data)
413
+ {
414
+ if ($encoding == 'ISO-8859-1')
415
+ $data = array_map('utf8_encode', $data);
416
+
417
+ try
418
+ {
419
+ $product = $this->feedProductPrepare($data);
420
+ } catch (\Exception $e)
421
+ {
422
+ if ($i > 10)
423
+ continue;
424
+ $this->setLastImportError($e->getMessage());
425
+ return;
426
+ }
427
+
428
+ if (!$product)
429
+ continue;
430
+
431
+ if (!empty($product['ean']))
432
+ $product['ean'] = TextHelper::fixEan($product['ean']);
433
+
434
+ if ($in_stock_only && $product['stock_status'] == ContentProduct::STOCK_STATUS_OUT_OF_STOCK)
435
+ continue;
436
+
437
+ $products[] = $product;
438
+ $i++;
439
+ if ($i % static::MULTIPLE_INSERT_ROWS == 0)
440
+ {
441
+ $this->product_model->multipleInsert($products, static::MULTIPLE_INSERT_ROWS);
442
+ $products = array();
443
+ }
444
+ $i++;
445
+ }
446
+ if ($products)
447
+ $this->product_model->multipleInsert($products, static::MULTIPLE_INSERT_ROWS);
448
+ }
449
+
450
+ protected function mapXmlData($node)
451
+ {
452
+ $data = array();
453
+ $mapping = $this->config('mapping');
454
+ $fields = array_values($mapping);
455
+ $attributes = $node->attributes();
456
+ foreach ($fields as $field)
457
+ {
458
+ if (isset($attributes[$field]))
459
+ $data[$field] = (string) $attributes[$field];
460
+ elseif (isset($node->{$field}))
461
+ $data[$field] = (string) $node->{$field};
462
+ else
463
+ continue;
464
+ }
465
+
466
+ return $data;
467
  }
468
 
469
  public function getLastImportDateReadable()
595
  }
596
  }
597
 
598
+ public function getProductNode()
599
+ {
600
+ $mapping = $this->config('mapping');
601
+ if (!empty($mapping['product node']))
602
+ return $mapping['product node'];
603
+ else
604
+ return false;
605
+ }
606
+
607
  }
application/components/AffiliateFeedParserModuleConfig.php CHANGED
@@ -9,7 +9,7 @@ defined('\ABSPATH') || exit;
9
  *
10
  * @author keywordrush.com <support@keywordrush.com>
11
  * @link https://www.keywordrush.com
12
- * @copyright Copyright &copy; 2019 keywordrush.com
13
  */
14
  abstract class AffiliateFeedParserModuleConfig extends AffiliateParserModuleConfig {
15
 
@@ -61,8 +61,13 @@ abstract class AffiliateFeedParserModuleConfig extends AffiliateParserModuleConf
61
  'default' => false,
62
  'section' => 'default',
63
  )));
64
-
65
- $options['update_mode']['dropdown_options'] = array('cron' => __('Cron', 'content-egg'));
 
 
 
 
 
66
  $options['update_mode']['default'] = 'cron';
67
  $options['update_mode']['validator'][] = array(
68
  'call' => array($this, 'emptyLastImportDate'),
@@ -78,7 +83,7 @@ abstract class AffiliateFeedParserModuleConfig extends AffiliateParserModuleConf
78
 
79
  // download feed in background
80
  $hook = 'cegg_' . $this->getModuleId() . '_init_products';
81
-
82
  if ($this->option('is_active') && !\wp_next_scheduled($hook))
83
  {
84
  \wp_schedule_single_event(time() + 1, $hook, array('module_id' => $this->getModuleId()));
9
  *
10
  * @author keywordrush.com <support@keywordrush.com>
11
  * @link https://www.keywordrush.com
12
+ * @copyright Copyright &copy; 2022 keywordrush.com
13
  */
14
  abstract class AffiliateFeedParserModuleConfig extends AffiliateParserModuleConfig {
15
 
61
  'default' => false,
62
  'section' => 'default',
63
  )));
64
+
65
+ $options['update_mode']['dropdown_options'] = array(
66
+ 'cron' => __('Cron', 'content-egg') . ' (' . __('recommended', 'content-egg') . ')',
67
+ 'visit' => __('Page view', 'content-egg'),
68
+ 'visit_cron' => __('Page view + Cron', 'content-egg'),
69
+ );
70
+
71
  $options['update_mode']['default'] = 'cron';
72
  $options['update_mode']['validator'][] = array(
73
  'call' => array($this, 'emptyLastImportDate'),
83
 
84
  // download feed in background
85
  $hook = 'cegg_' . $this->getModuleId() . '_init_products';
86
+
87
  if ($this->option('is_active') && !\wp_next_scheduled($hook))
88
  {
89
  \wp_schedule_single_event(time() + 1, $hook, array('module_id' => $this->getModuleId()));
application/components/Config.php CHANGED
@@ -8,8 +8,8 @@ defined('\ABSPATH') || exit;
8
  * Config class file
9
  *
10
  * @author keywordrush.com <support@keywordrush.com>
11
- * @link http://www.keywordrush.com/
12
- * @copyright Copyright &copy; 2015 keywordrush.com
13
  */
14
  abstract class Config {
15
 
@@ -48,8 +48,11 @@ abstract class Config {
48
  $this->page_slug = $this->page_slug();
49
  }
50
 
51
- public function option($opt_name)
52
  {
 
 
 
53
  return $this->get_current($opt_name);
54
  }
55
 
@@ -140,7 +143,7 @@ abstract class Config {
140
  $params['render_after'] = $field['render_after'];
141
  if (empty($field['section']))
142
  $field['section'] = 'default';
143
-
144
  // section
145
  if (!isset($sections[$field['section']]))
146
  {
@@ -234,23 +237,33 @@ abstract class Config {
234
 
235
  public function render_checkbox_list($args)
236
  {
 
 
 
 
 
 
237
  echo '<div class="cegg-checkboxgroup">';
238
- foreach ($args['checkbox_options'] as $value => $name)
 
239
  {
240
- if (in_array($value, $args['value']))
241
- $checked = ' checked="checked" ';
242
- else
243
- $checked = '';
244
-
245
- echo '<div class="cegg-checkbox">';
246
- echo '<label for="' . esc_attr($args['label_for'] . '-' . $value) . '">';
247
- echo '<input type="checkbox" name="' . esc_attr($args['option_name']) . '['
248
- . esc_attr($args['name']) . '][' . esc_attr($value) . ']" id="'
249
- . esc_attr($args['label_for'] . '-' . $value), '"'
250
- . $checked . ' value="' . esc_attr($value) . '" />';
251
- echo esc_html($name);
252
- echo '</label>';
253
- echo '</div>';
 
 
 
254
  }
255
  echo '</div>';
256
  if ($args['description'])
8
  * Config class file
9
  *
10
  * @author keywordrush.com <support@keywordrush.com>
11
+ * @link https://www.keywordrush.com
12
+ * @copyright Copyright &copy; 2022 keywordrush.com
13
  */
14
  abstract class Config {
15
 
48
  $this->page_slug = $this->page_slug();
49
  }
50
 
51
+ public function option($opt_name, $default = null)
52
  {
53
+ if ($default !== null && !$this->option_exists($opt_name))
54
+ return $default;
55
+
56
  return $this->get_current($opt_name);
57
  }
58
 
143
  $params['render_after'] = $field['render_after'];
144
  if (empty($field['section']))
145
  $field['section'] = 'default';
146
+
147
  // section
148
  if (!isset($sections[$field['section']]))
149
  {
237
 
238
  public function render_checkbox_list($args)
239
  {
240
+ if (empty($args['checkbox_options']))
241
+ {
242
+ echo '-';
243
+ return;
244
+ }
245
+
246
  echo '<div class="cegg-checkboxgroup">';
247
+
248
+ if ($args['checkbox_options'] && is_array($args['checkbox_options']))
249
  {
250
+ foreach ($args['checkbox_options'] as $value => $name)
251
+ {
252
+ if (in_array($value, $args['value']))
253
+ $checked = ' checked="checked" ';
254
+ else
255
+ $checked = '';
256
+
257
+ echo '<div class="cegg-checkbox">';
258
+ echo '<label for="' . esc_attr($args['label_for'] . '-' . $value) . '">';
259
+ echo '<input type="checkbox" name="' . esc_attr($args['option_name']) . '['
260
+ . esc_attr($args['name']) . '][' . esc_attr($value) . ']" id="'
261
+ . esc_attr($args['label_for'] . '-' . $value), '"'
262
+ . $checked . ' value="' . esc_attr($value) . '" />';
263
+ echo esc_html($name);
264
+ echo '</label>';
265
+ echo '</div>';
266
+ }
267
  }
268
  echo '</div>';
269
  if ($args['description'])
application/components/ContentManager.php CHANGED
@@ -180,7 +180,11 @@ class ContentManager {
180
 
181
  public static function isDataExists($post_id, $module_id)
182
  {
183
- return (bool) \get_post_meta($post_id, self::META_PREFIX_LAST_BYKEYWORD_UPDATE . $module_id, true);
 
 
 
 
184
  }
185
 
186
  public static function getData($post_id, $module_id)
@@ -234,12 +238,23 @@ class ContentManager {
234
  }
235
  }
236
 
237
- // locale fix...
238
  if (!empty($params['locale']))
239
  {
 
 
 
240
  foreach ($data as $key => $d)
241
  {
242
- if (isset($d['extra']['locale']) && strtolower($d['extra']['locale']) != strtolower($params['locale']))
 
 
 
 
 
 
 
 
243
  unset($data[$key]);
244
  }
245
  }
@@ -265,6 +280,16 @@ class ContentManager {
265
  }
266
  }
267
 
 
 
 
 
 
 
 
 
 
 
268
  return $data;
269
  }
270
 
@@ -336,10 +361,18 @@ class ContentManager {
336
  public static function getProductbyUniqueId($unique_id, $module_id, $post_id, $params = array())
337
  {
338
  $data = self::getViewData($module_id, $post_id, $params);
339
- if ($data && isset($data[$unique_id]))
340
- return $data[$unique_id];
341
- else
342
  return null;
 
 
 
 
 
 
 
 
 
 
343
  }
344
 
345
  public static function updateByKeyword($post_id, $module_id)
@@ -361,7 +394,7 @@ class ContentManager {
361
 
362
  try
363
  {
364
- $data = $module->doRequest($keyword, $updateParams, true);
365
 
366
  // nodata!
367
  if (!$data)
180
 
181
  public static function isDataExists($post_id, $module_id)
182
  {
183
+ if (\get_post_meta($post_id, ContentManager::META_PREFIX_DATA . $module_id, true))
184
+ return true;
185
+ else
186
+ return false;
187
+ //return (bool) \get_post_meta($post_id, self::META_PREFIX_LAST_BYKEYWORD_UPDATE . $module_id, true);
188
  }
189
 
190
  public static function getData($post_id, $module_id)
238
  }
239
  }
240
 
241
+ // locale filter
242
  if (!empty($params['locale']))
243
  {
244
+ if (strstr($module_id, 'Amazon') && $params['locale'] == 'GB')
245
+ $params['locale'] = 'UK';
246
+
247
  foreach ($data as $key => $d)
248
  {
249
+ if (!isset($d['extra']['locale']))
250
+ continue;
251
+
252
+ $product_locale = $d['extra']['locale'];
253
+
254
+ if ($module_id == 'Ebay2')
255
+ $product_locale = str_replace('EBAY_', '', $product_locale);
256
+
257
+ if (strtolower($product_locale) != strtolower($params['locale']))
258
  unset($data[$key]);
259
  }
260
  }
280
  }
281
  }
282
 
283
+ // add_query_arg
284
+ if (!empty($params['add_query_arg']))
285
+ {
286
+ foreach ($data as $key => $d)
287
+ {
288
+ if (isset($d['url']))
289
+ $data[$key]['url'] = \add_query_arg($params['add_query_arg'], $data[$key]['url']);
290
+ }
291
+ }
292
+
293
  return $data;
294
  }
295
 
361
  public static function getProductbyUniqueId($unique_id, $module_id, $post_id, $params = array())
362
  {
363
  $data = self::getViewData($module_id, $post_id, $params);
364
+ if (!$data)
 
 
365
  return null;
366
+
367
+ if (isset($data[$unique_id]))
368
+ return $data[$unique_id];
369
+
370
+ foreach ($data as $id => $d)
371
+ {
372
+ if ($unique_id == TextHelper::clearId($id))
373
+ return $data[$id];
374
+ }
375
+ return null;
376
  }
377
 
378
  public static function updateByKeyword($post_id, $module_id)
394
 
395
  try
396
  {
397
+ $data = $module->doMultipleRequests($keyword, $updateParams, true);
398
 
399
  // nodata!
400
  if (!$data)
application/components/FeaturedImage.php CHANGED
@@ -14,8 +14,8 @@ use ContentEgg\application\components\ExternalFeaturedImage;
14
  * FeaturedImage class file
15
  *
16
  * @author keywordrush.com <support@keywordrush.com>
17
- * @link http://www.keywordrush.com/
18
- * @copyright Copyright &copy; 2015 keywordrush.com
19
  */
20
  class FeaturedImage {
21
 
@@ -144,6 +144,7 @@ class FeaturedImage {
144
  {
145
  require_once(ABSPATH . 'wp-admin/includes/image.php');
146
 
 
147
  $filetype = \wp_check_filetype(basename($img_file), null);
148
  $attachment = array(
149
  'guid' => $img_file,
@@ -155,6 +156,9 @@ class FeaturedImage {
155
  $attach_id = \wp_insert_attachment($attachment, $img_file, $post_id);
156
  $attach_data = \wp_generate_attachment_metadata($attach_id, $img_file);
157
  \wp_update_attachment_metadata($attach_id, $attach_data);
 
 
 
158
  return \set_post_thumbnail($post_id, $attach_id);
159
  }
160
 
14
  * FeaturedImage class file
15
  *
16
  * @author keywordrush.com <support@keywordrush.com>
17
+ * @link https://www.keywordrush.com
18
+ * @copyright Copyright &copy; 2022 keywordrush.com
19
  */
20
  class FeaturedImage {
21
 
144
  {
145
  require_once(ABSPATH . 'wp-admin/includes/image.php');
146
 
147
+ $title = \sanitize_text_field($title);
148
  $filetype = \wp_check_filetype(basename($img_file), null);
149
  $attachment = array(
150
  'guid' => $img_file,
156
  $attach_id = \wp_insert_attachment($attachment, $img_file, $post_id);
157
  $attach_data = \wp_generate_attachment_metadata($attach_id, $img_file);
158
  \wp_update_attachment_metadata($attach_id, $attach_data);
159
+ if ($title)
160
+ \update_post_meta($attach_id, '_wp_attachment_image_alt', $title);
161
+
162
  return \set_post_thumbnail($post_id, $attach_id);
163
  }
164
 
application/components/LinkHandler.php CHANGED
@@ -255,7 +255,8 @@ class LinkHandler {
255
  * This token expires in 12 hours! Therefore you need to set your script to update your feed at least
256
  * once each 11 hours , in order to guarantee the correct click tracking!
257
  */
258
- if (time() - $item['last_update'] < 11 * 3600)
 
259
  return $item['url'];
260
 
261
  $regex = trim($regex);
@@ -263,12 +264,24 @@ class LinkHandler {
263
  if (count($parts) != 2)
264
  return $url;
265
 
 
266
  $path = parse_url($url, PHP_URL_PATH);
267
  $path = trim($path, "/");
268
  $path = preg_replace('/\.aspx$/', '', $path);
269
-
 
 
 
 
 
 
 
 
 
 
 
270
  $partnerId = rtrim($parts[1], ']');
271
- $api_url = 'https://quickshop.shoppydoo.it/' . urlencode($partnerId) . '/' . urlencode($path) . '.aspx?format=json&sort=price';
272
 
273
  $response = \wp_remote_get($api_url);
274
  if (\is_wp_error($response))
255
  * This token expires in 12 hours! Therefore you need to set your script to update your feed at least
256
  * once each 11 hours , in order to guarantee the correct click tracking!
257
  */
258
+
259
+ if (strstr($item['url'], 'splash?impression') && time() - $item['last_update'] < 111 * 3600)
260
  return $item['url'];
261
 
262
  $regex = trim($regex);
264
  if (count($parts) != 2)
265
  return $url;
266
 
267
+ /*
268
  $path = parse_url($url, PHP_URL_PATH);
269
  $path = trim($path, "/");
270
  $path = preg_replace('/\.aspx$/', '', $path);
271
+ $path = explode('/', $path);
272
+ $path = end($path);
273
+ $path = explode('-', $path);
274
+ $path = end($path);
275
+ $keyword = $path;
276
+ *
277
+ */
278
+
279
+ $keyword = $item['title'];
280
+ $keyword = strtolower($keyword);
281
+ $keyword = str_replace(' ', '_', $keyword);
282
+
283
  $partnerId = rtrim($parts[1], ']');
284
+ $api_url = 'https://quickshop.shoppydoo.it/' . urlencode($partnerId) . '/' . urlencode($keyword) . '.aspx?format=json&sort=price';
285
 
286
  $response = \wp_remote_get($api_url);
287
  if (\is_wp_error($response))
application/components/ModuleApi.php CHANGED
@@ -13,8 +13,8 @@ use ContentEgg\application\helpers\InputHelper;
13
  * ModuleApi class file
14
  *
15
  * @author keywordrush.com <support@keywordrush.com>
16
- * @link http://www.keywordrush.com/
17
- * @copyright Copyright &copy; 2015 keywordrush.com
18
  */
19
  class ModuleApi {
20
 
@@ -65,7 +65,7 @@ class ModuleApi {
65
 
66
  try
67
  {
68
- $data = $parser->doRequest($keyword, $query);
69
  foreach ($data as $key => $item)
70
  {
71
  if (!$item->unique_id)
13
  * ModuleApi class file
14
  *
15
  * @author keywordrush.com <support@keywordrush.com>
16
+ * @link https://www.keywordrush.com
17
+ * @copyright Copyright &copy; 2022 keywordrush.com
18
  */
19
  class ModuleApi {
20
 
65
 
66
  try
67
  {
68
+ $data = $parser->doMultipleRequests($keyword, $query);
69
  foreach ($data as $key => $item)
70
  {
71
  if (!$item->unique_id)
application/components/ParserModule.php CHANGED
@@ -15,7 +15,7 @@ use ContentEgg\application\Plugin;
15
  *
16
  * @author keywordrush.com <support@keywordrush.com>
17
  * @link https://www.keywordrush.com
18
- * @copyright Copyright &copy; 2021 keywordrush.com
19
  */
20
  abstract class ParserModule extends Module {
21
 
@@ -168,5 +168,50 @@ abstract class ParserModule extends Module {
168
  else
169
  return false;
170
  }
171
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  }
15
  *
16
  * @author keywordrush.com <support@keywordrush.com>
17
  * @link https://www.keywordrush.com
18
+ * @copyright Copyright &copy; 2022 keywordrush.com
19
  */
20
  abstract class ParserModule extends Module {
21
 
168
  else
169
  return false;
170
  }
171
+
172
+ public function doMultipleRequests($keyword, $query_params = array(), $is_autoupdate = false)
173
+ {
174
+ if (!\apply_filters('cegg_disable_multiple_keywords', false))
175
+ $keywords = explode(',', $keyword, 10);
176
+ else
177
+ $keywords = array($keyword);
178
+
179
+ $keywords = array_map('trim', $keywords);
180
+
181
+ $results = array();
182
+ foreach ($keywords as $i => $keyword)
183
+ {
184
+ if ($i && $this->getId() == 'Amazon')
185
+ sleep (1);
186
+
187
+ $results = array_merge($results, $this->doRequest($keyword, $query_params, $is_autoupdate));
188
+ }
189
+
190
+ $results = self::filterDuplicateItems($results);
191
+ return $results;
192
+ }
193
+
194
+ private static function filterDuplicateItems(array $items)
195
+ {
196
+ $results = array();
197
+ foreach ($items as $item)
198
+ {
199
+ $dup = false;
200
+ foreach ($results as $result)
201
+ {
202
+ if ($item->unique_id == $result->unique_id)
203
+ {
204
+ $dup = true;
205
+ break;
206
+ }
207
+ }
208
+
209
+ if (!$dup)
210
+ $results[] = $item;
211
+
212
+ }
213
+
214
+ return $results;
215
+ }
216
+
217
  }
application/components/ParserModuleConfig.php CHANGED
@@ -113,6 +113,8 @@ abstract class ParserModuleConfig extends ModuleConfig {
113
  {
114
  if (strpos($option['title'], '*'))
115
  $keys[] = $key;
 
 
116
  }
117
 
118
  $res = array();
113
  {
114
  if (strpos($option['title'], '*'))
115
  $keys[] = $key;
116
+
117
+ $options[$key]['title'] = str_replace('**', '', $option['title']);
118
  }
119
 
120
  $res = array();
application/components/ReviewNotice.php ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace ContentEgg\application\components;
4
+
5
+ defined('\ABSPATH') || exit;
6
+
7
+ use ContentEgg\application\Plugin;
8
+ use ContentEgg\application\models\ProductModel;
9
+
10
+ /**
11
+ * PluginReview class file
12
+ *
13
+ * @author keywordrush.com <support@keywordrush.com>
14
+ * @link https://www.keywordrush.com
15
+ * @copyright Copyright &copy; 2022 keywordrush.com
16
+ */
17
+ class ReviewNotice {
18
+
19
+ private static $instance = null;
20
+
21
+ const MIN_PRODUCTS_TRIGGER = 100;
22
+ const PRODUC_COUNT_TTL = 86400;
23
+
24
+ public static function getInstance()
25
+ {
26
+ if (self::$instance == null)
27
+ self::$instance = new self;
28
+
29
+ return self::$instance;
30
+ }
31
+
32
+ public function adminInit()
33
+ {
34
+ \add_action('admin_notices', array($this, 'displayNotice'));
35
+ $this->hideNotice();
36
+ }
37
+
38
+ public function displayNotice()
39
+ {
40
+ if (time() < 1649594175)
41
+ return;
42
+
43
+ if (\get_transient('cegg_hide_notice_review_products_trigger'))
44
+ return;
45
+
46
+ $last_sync = ProductModel::model()->getLastSync();
47
+ if (!$last_sync || time() - $last_sync > self::PRODUC_COUNT_TTL)
48
+ ProductModel::model()->maybeScanProducts();
49
+
50
+ $total = ProductModel::model()->count();
51
+ if ($total < self::MIN_PRODUCTS_TRIGGER)
52
+ return;
53
+
54
+ $rate_url = 'https://wordpress.org/support/plugin/' . Plugin::getSlug() . '/reviews/?filter=5#new-post';
55
+ $page_url = \get_admin_url(\get_current_blog_id(), 'admin.php?page=content-egg-product');
56
+
57
+ $hide_notice_uri = \add_query_arg(array('cegg_hide_notice' => 'review_products_trigger', '_cegg_notice_nonce' => \wp_create_nonce('hide_notice')), $_SERVER['REQUEST_URI']);
58
+
59
+ $this->addInlineCss();
60
+ echo '<div class="notice notice-success egg-notice"><p>';
61
+ echo '<img src=" ' . \ContentEgg\PLUGIN_RES . '/img/logo.png' . '" width="40" />';
62
+ echo '<b>' . sprintf(__('Congrats, you have <a href="%s">%d products</a> added with %s.', 'content-egg'), $page_url, $total, Plugin::getName()) . '</b>';
63
+ echo '<br>';
64
+ echo ' ' . __('We would very much appreciate if you could quickly rate the plugin on WP.', 'content-egg');
65
+ echo ' ' . __('Just to help us spread the word and boost our motivation.', 'content-egg');
66
+ echo '<br><em> - ' . sprintf(__('Your %s team', 'content-egg'), 'Keywordrush'), '</em>';
67
+ echo '<br>';
68
+ echo sprintf('<a style="color:#00a32a;font-weight:bold;" target="_blank" href="%s">&#9733; %s</a>', $rate_url, __('Give it a 5-star rating', 'content-egg'));
69
+ echo ' | ';
70
+ echo sprintf('<a href="%s">%s</a>', $hide_notice_uri, '&#x2715 ' . __('Dismiss this notice', 'content-egg'));
71
+
72
+ echo '</p></div>';
73
+ }
74
+
75
+ public function hideNotice()
76
+ {
77
+ if (!isset($_GET['cegg_hide_notice']))
78
+ return;
79
+
80
+ if (!isset($_GET['_cegg_notice_nonce']) || !\wp_verify_nonce($_GET['_cegg_notice_nonce'], 'hide_notice'))
81
+ return;
82
+
83
+ $notice = \sanitize_text_field($_GET['cegg_hide_notice']);
84
+
85
+ if (!in_array($notice, array('review_products_trigger')))
86
+ return;
87
+
88
+ $expiration = 0;
89
+ \set_transient('cegg_hide_notice_' . $notice, time(), $expiration);
90
+
91
+ \wp_redirect(\remove_query_arg(array('cegg_hide_notice', '_cegg_notice_nonce'), \wp_unslash($_SERVER['REQUEST_URI'])));
92
+ exit;
93
+ }
94
+
95
+ public function addInlineCss()
96
+ {
97
+ echo '<style>.egg-notice a.egg-notice-close {position:static;float:right;top:0;right0;padding:0;margin-top:-20px;line-height:1.23076923;text-decoration:none;}.egg-notice a.egg-notice-close::before{position: relative;top: 18px;left: -20px;}.egg-notice img {float:left;width:40px;padding-right:12px;}</style>';
98
+ }
99
+
100
+ }
application/helpers/CurrencyHelper.php CHANGED
@@ -8,8 +8,8 @@ defined('\ABSPATH') || exit;
8
  * Currency class file
9
  *
10
  * @author keywordrush.com <support@keywordrush.com>
11
- * @link http://www.keywordrush.com/
12
- * @copyright Copyright &copy; 2016 keywordrush.com
13
  *
14
  */
15
  class CurrencyHelper {
@@ -98,6 +98,8 @@ class CurrencyHelper {
98
  'es' => 'right',
99
  'fr' => 'right',
100
  'it' => 'right',
 
 
101
  ),
102
  'thousand_sep' => '.',
103
  'decimal_sep' => ',',
@@ -520,7 +522,40 @@ class CurrencyHelper {
520
  'num_decimals' => 0,
521
  'name' => 'Swedish Krona',
522
  ),
523
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
524
  }
525
 
526
  public function setLocale($locale)
8
  * Currency class file
9
  *
10
  * @author keywordrush.com <support@keywordrush.com>
11
+ * @link https://www.keywordrush.com
12
+ * @copyright Copyright &copy; 2022 keywordrush.com
13
  *
14
  */
15
  class CurrencyHelper {
98
  'es' => 'right',
99
  'fr' => 'right',
100
  'it' => 'right',
101
+ 'fi' => 'right',
102
+ 'sk' => 'right',
103
  ),
104
  'thousand_sep' => '.',
105
  'decimal_sep' => ',',
522
  'num_decimals' => 0,
523
  'name' => 'Swedish Krona',
524
  ),
525
+ 'PHP' => array(
526
+ 'currency_symbol' => '₱',
527
+ 'currency_pos' => 'left',
528
+ 'thousand_sep' => ',',
529
+ 'decimal_sep' => '.',
530
+ 'num_decimals' => 0,
531
+ 'name' => 'Philippine Peso',
532
+ ),
533
+ 'JOD' => array(
534
+ 'currency_symbol' => 'JOD',
535
+ 'currency_pos' => 'right',
536
+ 'thousand_sep' => ',',
537
+ 'decimal_sep' => '.',
538
+ 'num_decimals' => 2,
539
+ 'name' => 'Jordanian Dinar',
540
+ ),
541
+ 'NOK' => array(
542
+ 'currency_symbol' => 'NOK',
543
+ 'currency_pos' => 'left',
544
+ 'thousand_sep' => ',',
545
+ 'decimal_sep' => '.',
546
+ 'num_decimals' => 2,
547
+ 'name' => 'Norske kroner',
548
+ ),
549
+ 'NZD' => array(
550
+ 'currency_symbol' => 'NZ $',
551
+ 'currency_pos' => 'left',
552
+ 'thousand_sep' => ',',
553
+ 'decimal_sep' => '.',
554
+ 'num_decimals' => 2,
555
+ 'name' => 'New Zealand dollar',
556
+ ),
557
+
558
+ );
559
  }
560
 
561
  public function setLocale($locale)
application/helpers/TemplateHelper.php CHANGED
@@ -12,7 +12,6 @@ use ContentEgg\application\components\ModuleManager;
12
  use ContentEgg\application\components\ContentProduct;
13
  use ContentEgg\application\helpers\TextHelper;
14
  use ContentEgg\application\libs\amazon\AmazonLocales;
15
- use ContentEgg\application\modules\Amazon\AmazonConfig;
16
  use ContentEgg\application\Translator;
17
 
18
  /**
@@ -218,10 +217,13 @@ class TemplateHelper {
218
 
219
  public static function getLastUpdateFormattedAmazon(array $data, $time = true)
220
  {
221
- if (!isset($data['Amazon']))
 
 
 
 
222
  return false;
223
 
224
- $item = current($data['Amazon']);
225
  if (empty($item['last_update']))
226
  return false;
227
 
@@ -566,7 +568,6 @@ class TemplateHelper {
566
  if (is_dir($logo_dir))
567
  return $logo_dir;
568
 
569
- // create
570
  if (\wp_mkdir_p($logo_dir))
571
  return $logo_dir;
572
  else
@@ -639,14 +640,14 @@ class TemplateHelper {
639
  return ucfirst($merchant);
640
  }
641
 
642
- public static function sortByPrice(array $data, $order = 'asc')
643
  {
644
- if (!$order)
645
- $order = 'asc';
646
-
647
  if (!in_array($order, array('asc', 'desc')))
648
  $order = 'asc';
649
 
 
 
 
650
  // convert all prices to one currency
651
  $currency_codes = array();
652
  foreach ($data as $d)
@@ -663,21 +664,36 @@ class TemplateHelper {
663
  $base_currency = key($currency_codes);
664
  foreach ($data as $key => $d)
665
  {
666
- if (isset($d['stock_status']) && $d['stock_status'] == ContentProduct::STOCK_STATUS_OUT_OF_STOCK)
667
- $data[$key]['converted_price'] = 0;
668
- elseif (!empty($d['currencyCode']) && $d['currencyCode'] != $base_currency)
669
- {
670
  $rate = CurrencyHelper::getCurrencyRate($d['currencyCode'], $base_currency);
671
- if (!$rate)
672
- $rate = 1;
673
- $data[$key]['converted_price'] = (float) $d['price'] * $rate;
674
- } elseif (isset($d['price']))
675
- $data[$key]['converted_price'] = (float) $d['price'];
676
- else
 
 
 
 
 
 
 
 
677
  {
678
  $data[$key]['converted_price'] = 0;
679
  $data[$key]['price'] = 0;
 
 
680
  }
 
 
 
 
 
 
 
681
  }
682
 
683
  // modules priority
@@ -697,7 +713,7 @@ class TemplateHelper {
697
 
698
  // sort by price and priority
699
  usort($data, function($a, $b) use($modules_priority) {
700
-
701
  if (!$a['price'] && !$b['price'])
702
  return $modules_priority[$a['module_id']] - $modules_priority[$b['module_id']];
703
 
@@ -721,14 +737,14 @@ class TemplateHelper {
721
  });
722
 
723
  if ($order == 'desc')
724
- array_reverse($data);
725
 
726
  return $data;
727
  }
728
 
729
- public static function sortAllByPrice(array $data, $order = 'asc')
730
  {
731
- return TemplateHelper::sortByPrice(self::mergeAll($data), $order);
732
  }
733
 
734
  public static function mergeAll(array $data)
@@ -1090,16 +1106,18 @@ class TemplateHelper {
1090
  $i++;
1091
  }
1092
 
1093
- $url .= '&AssociateTag=' . self::getAssociateTagForAmazonLocale($locale);
1094
  return $url;
1095
  }
1096
 
1097
- public static function getAssociateTagForAmazonLocale($locale)
1098
  {
1099
- if ($locale == AmazonConfig::getInstance()->option('locale'))
1100
- return AmazonConfig::getInstance()->option('associate_tag');
1101
  else
1102
- return AmazonConfig::getInstance()->option('associate_tag_' . $locale);
 
 
1103
  }
1104
 
1105
  public static function __($str)
12
  use ContentEgg\application\components\ContentProduct;
13
  use ContentEgg\application\helpers\TextHelper;
14
  use ContentEgg\application\libs\amazon\AmazonLocales;
 
15
  use ContentEgg\application\Translator;
16
 
17
  /**
217
 
218
  public static function getLastUpdateFormattedAmazon(array $data, $time = true)
219
  {
220
+ if (isset($data['Amazon']))
221
+ $item = current($data['Amazon']);
222
+ elseif (isset($data['AmazonNoApi']))
223
+ $item = current($data['AmazonNoApi']);
224
+ else
225
  return false;
226
 
 
227
  if (empty($item['last_update']))
228
  return false;
229
 
568
  if (is_dir($logo_dir))
569
  return $logo_dir;
570
 
 
571
  if (\wp_mkdir_p($logo_dir))
572
  return $logo_dir;
573
  else
640
  return ucfirst($merchant);
641
  }
642
 
643
+ public static function sortByPrice(array $data, $order = 'asc', $field = 'price')
644
  {
 
 
 
645
  if (!in_array($order, array('asc', 'desc')))
646
  $order = 'asc';
647
 
648
+ if (!in_array($field, array('price', 'discount')))
649
+ $field = 'price';
650
+
651
  // convert all prices to one currency
652
  $currency_codes = array();
653
  foreach ($data as $d)
664
  $base_currency = key($currency_codes);
665
  foreach ($data as $key => $d)
666
  {
667
+ $rate = 1;
668
+ if (!empty($d['currencyCode']) && $d['currencyCode'] != $base_currency)
 
 
669
  $rate = CurrencyHelper::getCurrencyRate($d['currencyCode'], $base_currency);
670
+ if (!$rate)
671
+ $rate = 1;
672
+
673
+ if (isset($d['price']))
674
+ {
675
+ if ($field == 'discount')
676
+ {
677
+ if (!empty($d['priceOld']))
678
+ $data[$key]['converted_price'] = (float) ($d['priceOld'] - $d['price']) * $rate;
679
+ else
680
+ $data[$key]['converted_price'] = 0.00001;
681
+ } else
682
+ $data[$key]['converted_price'] = (float) $d['price'] * $rate;
683
+ } else
684
  {
685
  $data[$key]['converted_price'] = 0;
686
  $data[$key]['price'] = 0;
687
+ if ($field == 'discount')
688
+ $data[$key]['converted_price'] = 99999999999;
689
  }
690
+ if (isset($d['stock_status']) && $d['stock_status'] == ContentProduct::STOCK_STATUS_OUT_OF_STOCK)
691
+ {
692
+ if ($field == 'discount')
693
+ $data[$key]['converted_price'] = -1;
694
+ else
695
+ $data[$key]['converted_price'] = 0;
696
+ }
697
  }
698
 
699
  // modules priority
713
 
714
  // sort by price and priority
715
  usort($data, function($a, $b) use($modules_priority) {
716
+
717
  if (!$a['price'] && !$b['price'])
718
  return $modules_priority[$a['module_id']] - $modules_priority[$b['module_id']];
719
 
737
  });
738
 
739
  if ($order == 'desc')
740
+ $data = array_reverse($data);
741
 
742
  return $data;
743
  }
744
 
745
+ public static function sortAllByPrice(array $data, $order = 'asc', $field = 'price')
746
  {
747
+ return TemplateHelper::sortByPrice(self::mergeAll($data), $order, $field);
748
  }
749
 
750
  public static function mergeAll(array $data)
1106
  $i++;
1107
  }
1108
 
1109
+ $url .= '&AssociateTag=' . self::getAssociateTagForAmazonLocale($locale, $item['module_id']);
1110
  return $url;
1111
  }
1112
 
1113
+ public static function getAssociateTagForAmazonLocale($locale, $module_id = 'Amazon')
1114
  {
1115
+ if ($module_id == 'AmazonNoApi')
1116
+ $module = ModuleManager::factory('AmazonNoApi');
1117
  else
1118
+ $module = ModuleManager::factory('Amazon');
1119
+
1120
+ return $module->getAssociateTagForLocale($locale);
1121
  }
1122
 
1123
  public static function __($str)
application/helpers/TextHelper.php CHANGED
@@ -8,8 +8,8 @@ defined('\ABSPATH') || exit;
8
  * TextHelper class file
9
  *
10
  * @author keywordrush.com <support@keywordrush.com>
11
- * @link http://www.keywordrush.com/
12
- * @copyright Copyright &copy; 2014 keywordrush.com
13
  */
14
  class TextHelper {
15
 
@@ -158,7 +158,7 @@ class TextHelper {
158
  {
159
  preg_match_all('/<[\w]+[^>]*>/s', $truncate, $lastTagMatches);
160
  $lastTag = array_pop($lastTagMatches[0]);
161
- $spacepos = mb_strrpos($truncate, $lastTag, 'UTF-8') + mb_strlen($lastTag, 'UTF-8');
162
  }
163
  $bits = mb_substr($truncate, $spacepos, null, 'UTF-8');
164
  preg_match_all('/<\/([a-z]+)>/', $bits, $droppedTags, PREG_SET_ORDER);
@@ -234,8 +234,7 @@ class TextHelper {
234
  public static function clear_utf8($str)
235
  {
236
  $str = str_replace('/', ' ', $str);
237
- $str = str_replace(',', ' ', $str);
238
- $str = preg_replace("/[^\pL\s\d\-\.\+_]+/ui", '', $str);
239
  $str = preg_replace("/\s+/ui", ' ', $str);
240
  return $str;
241
  }
@@ -496,23 +495,23 @@ class TextHelper {
496
  */
497
  public static function isEan($barcode)
498
  {
499
- $barcode = self::fixEan($barcode);
500
-
501
- if (!preg_match("/^[0-9]{13}$/", $barcode))
 
 
 
 
 
 
 
 
 
 
 
 
 
502
  return false;
503
-
504
- $digits = (string) $barcode;
505
- $even_sum = $digits[1] + $digits[3] + $digits[5] +
506
- $digits[7] + $digits[9] + $digits[11];
507
- $even_sum_three = $even_sum * 3;
508
- $odd_sum = $digits[0] + $digits[2] + $digits[4] +
509
- $digits[6] + $digits[8] + $digits[10];
510
- $total_sum = $even_sum_three + $odd_sum;
511
- $next_ten = (ceil($total_sum / 10)) * 10;
512
- $check_digit = $next_ten - $total_sum;
513
- if ($check_digit == $digits[12])
514
- return true;
515
- return false;
516
  }
517
 
518
  public static function fixEan($barcode)
@@ -551,7 +550,7 @@ class TextHelper {
551
 
552
  public static function ratingPrepare($rating, $min_rating = 1, $max_rating = 5)
553
  {
554
- $rating = (int) $rating;
555
  $rating = abs(round($rating));
556
  if ($rating < $min_rating || $rating > $max_rating)
557
  return null;
@@ -695,5 +694,5 @@ class TextHelper {
695
 
696
  return false;
697
  }
698
-
699
  }
8
  * TextHelper class file
9
  *
10
  * @author keywordrush.com <support@keywordrush.com>
11
+ * @link https://www.keywordrush.com
12
+ * @copyright Copyright &copy; 2021 keywordrush.com
13
  */
14
  class TextHelper {
15
 
158
  {
159
  preg_match_all('/<[\w]+[^>]*>/s', $truncate, $lastTagMatches);
160
  $lastTag = array_pop($lastTagMatches[0]);
161
+ $spacepos = mb_strrpos($truncate, $lastTag, 0, 'UTF-8') + mb_strlen($lastTag, 'UTF-8');
162
  }
163
  $bits = mb_substr($truncate, $spacepos, null, 'UTF-8');
164
  preg_match_all('/<\/([a-z]+)>/', $bits, $droppedTags, PREG_SET_ORDER);
234
  public static function clear_utf8($str)
235
  {
236
  $str = str_replace('/', ' ', $str);
237
+ $str = preg_replace("/[^\pL\s\d\-\.\+_\,]+/ui", '', $str);
 
238
  $str = preg_replace("/\s+/ui", ' ', $str);
239
  return $str;
240
  }
495
  */
496
  public static function isEan($barcode)
497
  {
498
+ $barcode = self::fixEan($barcode);
499
+
500
+ if (!preg_match("/^[0-9]{13}$/", $barcode))
501
+ return false;
502
+
503
+ $digits = (string) $barcode;
504
+ $even_sum = $digits[1] + $digits[3] + $digits[5] +
505
+ $digits[7] + $digits[9] + $digits[11];
506
+ $even_sum_three = $even_sum * 3;
507
+ $odd_sum = $digits[0] + $digits[2] + $digits[4] +
508
+ $digits[6] + $digits[8] + $digits[10];
509
+ $total_sum = $even_sum_three + $odd_sum;
510
+ $next_ten = (ceil($total_sum / 10)) * 10;
511
+ $check_digit = $next_ten - $total_sum;
512
+ if ($check_digit == $digits[12])
513
+ return true;
514
  return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  }
516
 
517
  public static function fixEan($barcode)
550
 
551
  public static function ratingPrepare($rating, $min_rating = 1, $max_rating = 5)
552
  {
553
+ $rating = (float) $rating;
554
  $rating = abs(round($rating));
555
  if ($rating < $min_rating || $rating > $max_rating)
556
  return null;
694
 
695
  return false;
696
  }
697
+
698
  }
application/libs/RestClient.php CHANGED
@@ -8,8 +8,8 @@ use ContentEgg\application\helpers\TextHelper;
8
  * RestClient class file
9
  *
10
  * @author keywordrush.com <support@keywordrush.com>
11
- * @link http://www.keywordrush.com/
12
- * @copyright Copyright &copy; 2015 keywordrush.com
13
  *
14
  * Simple Rest Client
15
  * @todo: PUT/DELETE Request
@@ -17,6 +17,7 @@ use ContentEgg\application\helpers\TextHelper;
17
  class RestClient {
18
 
19
  protected static $timeout = 15; //sec
 
20
 
21
  /**
22
  * Endpoint uri of this web service
@@ -82,7 +83,7 @@ class RestClient {
82
  'sslverify' => false,
83
  'redirection' => 5,
84
  'timeout' => static::$timeout,
85
- 'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:88.0) Gecko/20100101 Firefox/88.0',
86
  );
87
  if ($opts)
88
  $_opts = $opts + $_opts;
@@ -118,6 +119,11 @@ class RestClient {
118
  {
119
  $this->_custom_header = $headers;
120
  }
 
 
 
 
 
121
 
122
  /**
123
  * Performs an HTTP GET request
8
  * RestClient class file
9
  *
10
  * @author keywordrush.com <support@keywordrush.com>
11
+ * @link https://www.keywordrush.com
12
+ * @copyright Copyright &copy; 2021 keywordrush.com
13
  *
14
  * Simple Rest Client
15
  * @todo: PUT/DELETE Request
17
  class RestClient {
18
 
19
  protected static $timeout = 15; //sec
20
+ protected static $useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:93.0) Gecko/20100101 Firefox/93.0';
21
 
22
  /**
23
  * Endpoint uri of this web service
83
  'sslverify' => false,
84
  'redirection' => 5,
85
  'timeout' => static::$timeout,
86
+ 'user-agent' => static::$useragent,
87
  );
88
  if ($opts)
89
  $_opts = $opts + $_opts;
119
  {
120
  $this->_custom_header = $headers;
121
  }
122
+
123
+ public function addCustomHeaders($headers = array())
124
+ {
125
+ $this->_custom_header = array_merge($this->_custom_header, $headers);
126
+ }
127
 
128
  /**
129
  * Performs an HTTP GET request
application/libs/bing/BingSearch.php CHANGED
@@ -30,7 +30,6 @@ class BingSearch extends RestClient {
30
  * @var array Response Format Types
31
  */
32
  protected $_responseTypes = array(
33
- //'xml', //@todo: требуется доработка
34
  'json'
35
  );
36
 
@@ -107,7 +106,6 @@ class BingSearch extends RestClient {
107
 
108
  $add_url = '';
109
 
110
- // Все параметры (кроме начинающихся с $) заключим в одинарные кавычки
111
  foreach ($_query as $k => $q)
112
  {
113
  if (!strstr($k, '$'))
30
  * @var array Response Format Types
31
  */
32
  protected $_responseTypes = array(
 
33
  'json'
34
  );
35
 
106
 
107
  $add_url = '';
108
 
 
109
  foreach ($_query as $k => $q)
110
  {
111
  if (!strstr($k, '$'))
application/libs/bing/CognitiveSearch.php CHANGED
@@ -11,17 +11,16 @@ use ContentEgg\application\libs\RestClient;
11
  *
12
  * @author keywordrush.com <support@keywordrush.com>
13
  * @link http://www.keywordrush.com/
14
- * @copyright Copyright &copy; 2016 keywordrush.com
15
  *
16
- * @link: https://msdn.microsoft.com/en-us/library/dn760794.aspx#parameters
17
- * @link: https://msdn.microsoft.com/en-us/library/mt604056.aspx
18
  *
19
  */
20
  require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'RestClient.php';
21
 
22
  class CognitiveSearch extends RestClient {
23
 
24
- const API_URI_BASE = 'https://api.cognitive.microsoft.com/bing/v7.0';
25
 
26
  private $subscription_key = null;
27
  protected $_responseTypes = array(
@@ -66,7 +65,7 @@ class CognitiveSearch extends RestClient {
66
  public function autosuggest($query, $params = array())
67
  {
68
  $params['q'] = $query;
69
- $response = $this->restGet('/Suggestions', $params);
70
  return $this->_decodeResponse($response);
71
  }
72
 
11
  *
12
  * @author keywordrush.com <support@keywordrush.com>
13
  * @link http://www.keywordrush.com/
14
+ * @copyright Copyright &copy; 2021 keywordrush.com
15
  *
16
+ * @link: https://www.microsoft.com/en-us/bing/apis/bing-image-search-api
 
17
  *
18
  */
19
  require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'RestClient.php';
20
 
21
  class CognitiveSearch extends RestClient {
22
 
23
+ const API_URI_BASE = 'https://api.bing.microsoft.com/v7.0';
24
 
25
  private $subscription_key = null;
26
  protected $_responseTypes = array(
65
  public function autosuggest($query, $params = array())
66
  {
67
  $params['q'] = $query;
68
+ $response = $this->restGet('/suggestions', $params);
69
  return $this->_decodeResponse($response);
70
  }
71
 
application/libs/rss/RssParser.php CHANGED
@@ -47,6 +47,7 @@ class RssParser extends RestClient {
47
  $this->setUri($uri);
48
  } else
49
  throw new \Exception('No valid URI scheme was provided. ');
 
50
 
51
  $path = '';
52
  if (isset($url_parts['path']))
47
  $this->setUri($uri);
48
  } else
49
  throw new \Exception('No valid URI scheme was provided. ');
50
+
51
 
52
  $path = '';
53
  if (isset($url_parts['path']))
application/models/AutoblogModel.php CHANGED
@@ -16,7 +16,7 @@ use ContentEgg\application\admin\GeneralConfig;
16
  *
17
  * @author keywordrush.com <support@keywordrush.com>
18
  * @link https://www.keywordrush.com
19
- * @copyright Copyright &copy; 2021 keywordrush.com
20
  */
21
  class AutoblogModel extends Model {
22
 
@@ -259,7 +259,7 @@ class AutoblogModel extends Model {
259
  $module = ModuleManager::getInstance()->factory($module_id);
260
  try
261
  {
262
- $data = $module->doRequest($module_keywords[$module_id], $autoblog, true);
263
  } catch (\Exception $e)
264
  {
265
  // error
16
  *
17
  * @author keywordrush.com <support@keywordrush.com>
18
  * @link https://www.keywordrush.com
19
+ * @copyright Copyright &copy; 2022 keywordrush.com
20
  */
21
  class AutoblogModel extends Model {
22
 
259
  $module = ModuleManager::getInstance()->factory($module_id);
260
  try
261
  {
262
+ $data = $module->doMultipleRequests($module_keywords[$module_id], $autoblog, true);
263
  } catch (\Exception $e)
264
  {
265
  // error
application/models/PriceHistoryModel.php CHANGED
@@ -280,7 +280,14 @@ class PriceHistoryModel extends Model {
280
  ORDER BY pchange ' . $order . '
281
  LIMIT ' . $limit;
282
  $results = $this->getDb()->get_results($sql, \ARRAY_A);
283
- return $results;
 
 
 
 
 
 
 
284
  }
285
 
286
  }
280
  ORDER BY pchange ' . $order . '
281
  LIMIT ' . $limit;
282
  $results = $this->getDb()->get_results($sql, \ARRAY_A);
283
+
284
+ $return = array();
285
+ foreach ($results as $i => $r)
286
+ {
287
+ if (\get_post_status($r['post_id']) == 'publish')
288
+ $return[] = $r;
289
+ }
290
+ return $return;
291
  }
292
 
293
  }
application/models/ProductModel.php CHANGED
@@ -67,14 +67,8 @@ class ProductModel extends Model {
67
 
68
  public function scanProducts()
69
  {
70
- $module_ids = array_keys(ModuleManager::getInstance()->getAffiliateParsers(true, true));
71
- $meta_keys = array();
72
- foreach ($module_ids as $module_id)
73
- {
74
- $meta_keys[] = "'" . \esc_sql(ContentManager::META_PREFIX_DATA . $module_id) . "'";
75
- }
76
-
77
  $per_page = 100;
 
78
  $sql_part = $this->getDb()->postmeta . ' WHERE meta_key IN (' . join(',', $meta_keys) . ') LIMIT ' . $per_page;
79
  $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM ' . $sql_part;
80
  $products = $this->getDb()->get_results($sql);
@@ -88,6 +82,18 @@ class ProductModel extends Model {
88
  $this->processProducts($this->getDb()->get_results($sql));
89
  }
90
  }
 
 
 
 
 
 
 
 
 
 
 
 
91
 
92
  public function maybeScanProducts($forced = false)
93
  {
67
 
68
  public function scanProducts()
69
  {
 
 
 
 
 
 
 
70
  $per_page = 100;
71
+ $meta_keys = $this->getCeMetaKeys();
72
  $sql_part = $this->getDb()->postmeta . ' WHERE meta_key IN (' . join(',', $meta_keys) . ') LIMIT ' . $per_page;
73
  $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM ' . $sql_part;
74
  $products = $this->getDb()->get_results($sql);
82
  $this->processProducts($this->getDb()->get_results($sql));
83
  }
84
  }
85
+
86
+ private function getCeMetaKeys()
87
+ {
88
+ $module_ids = array_keys(ModuleManager::getInstance()->getAffiliateParsers(true, true));
89
+ $meta_keys = array();
90
+ foreach ($module_ids as $module_id)
91
+ {
92
+ $meta_keys[] = "'" . \esc_sql(ContentManager::META_PREFIX_DATA . $module_id) . "'";
93
+ }
94
+
95
+ return $meta_keys;
96
+ }
97
 
98
  public function maybeScanProducts($forced = false)
99
  {
application/modules/AE/AEConfig.php CHANGED
@@ -10,8 +10,8 @@ use ContentEgg\application\components\AffiliateParserModuleConfig;
10
  * AEConfig class file
11
  *
12
  * @author keywordrush.com <support@keywordrush.com>
13
- * @link http://www.keywordrush.com/
14
- * @copyright Copyright &copy; 2016 keywordrush.com
15
  */
16
  class AEConfig extends AffiliateParserModuleConfig {
17
 
10
  * AEConfig class file
11
  *
12
  * @author keywordrush.com <support@keywordrush.com>
13
+ * @link https://www.keywordrush.com
14
+ * @copyright Copyright &copy; 2021 keywordrush.com
15
  */
16
  class AEConfig extends AffiliateParserModuleConfig {
17
 
application/modules/Amazon/templates/data_compare.php CHANGED
@@ -211,7 +211,7 @@ $barcodes = array(
211
  </div>
212
  <?php foreach ($current_items as $item): ?>
213
  <div class="col-xs-6 col-md-5 text-center">
214
- <a<?php TemplateHelper::printRel(); ?> target="_blank" href="<?php echo $item['url']; ?>" class="btn btn-danger"><?php TemplateHelper::buyNowBtnText(); ?></a>
215
  </div>
216
  <?php endforeach; ?>
217
  </div>
211
  </div>
212
  <?php foreach ($current_items as $item): ?>
213
  <div class="col-xs-6 col-md-5 text-center">
214
+ <a<?php TemplateHelper::printRel(); ?> target="_blank" href="<?php echo $item['url']; ?>" class="btn btn-danger"><?php TemplateHelper::buyNowBtnText(true, $item); ?></a>
215
  </div>
216
  <?php endforeach; ?>
217
  </div>
application/modules/Amazon/views/search_panel.php CHANGED
@@ -13,7 +13,7 @@ $search_index = $module->config('search_index');
13
  <?php if (count($locales) > 1): ?>
14
  <select class="input-sm col-md-4" ng-model="query_params.Amazon.locale" ng-init="query_params.Amazon.locale = '<?php echo $default_locale; ?>'">
15
  <?php foreach ($locales as $value => $name): ?>
16
- <option value="<?php echo $value; ?>"><?php echo $name; ?></option>
17
  <?php endforeach; ?>
18
  </select>
19
  <?php endif; ?>
13
  <?php if (count($locales) > 1): ?>
14
  <select class="input-sm col-md-4" ng-model="query_params.Amazon.locale" ng-init="query_params.Amazon.locale = '<?php echo $default_locale; ?>'">
15
  <?php foreach ($locales as $value => $name): ?>
16
+ <option value="<?php echo \esc_attr($value); ?>"><?php echo \esc_html($name); ?></option>
17
  <?php endforeach; ?>
18
  </select>
19
  <?php endif; ?>
application/modules/CjLinks/CjLinksConfig.php CHANGED
@@ -82,7 +82,8 @@ class CjLinksConfig extends AffiliateParserModuleConfig {
82
  ),
83
  'advertiser_ids' => array(
84
  'title' => __('Advertisers', 'content-egg'),
85
- 'description' => 'Вы можете задать Adverticer ID (CID) через запятую для ограничения поиска только по этим рекламодателям. Введите "joined", чтобы искать по всем вашим рекламодателям.',
 
86
  'callback' => array($this, 'render_input'),
87
  'default' => 'joined',
88
  'validator' => array(
82
  ),
83
  'advertiser_ids' => array(
84
  'title' => __('Advertisers', 'content-egg'),
85
+ 'description' => __('A comma separated list of Advertiser IDs (CID). Restrict search results based on these IDs', 'content-egg') .
86
+ ' ' . __('or set this option to "joined" (this value restricts the search to advertisers with which you have a relationship).', 'content-egg'),
87
  'callback' => array($this, 'render_input'),
88
  'default' => 'joined',
89
  'validator' => array(
application/modules/Feed/FeedConfig.php CHANGED
@@ -13,7 +13,7 @@ use ContentEgg\application\helpers\TextHelper;
13
  *
14
  * @author keywordrush.com <support@keywordrush.com>
15
  * @link https://www.keywordrush.com
16
- * @copyright Copyright &copy; 2021 keywordrush.com
17
  */
18
  class FeedConfig extends AffiliateFeedParserModuleConfig {
19
 
@@ -42,7 +42,7 @@ class FeedConfig extends AffiliateFeedParserModuleConfig {
42
  ),
43
  'feed_url' => array(
44
  'title' => __('Feed download URL', 'content-egg') . ' <span class="cegg_required">*</span>',
45
- 'description' => __('CSV format only.', 'content-egg') . ' ' .
46
  sprintf(__('Make sure your unzipped feed size is less than %s.', 'content-egg'), \WP_MAX_MEMORY_LIMIT),
47
  'callback' => array($this, 'render_input'),
48
  'default' => '',
@@ -60,6 +60,16 @@ class FeedConfig extends AffiliateFeedParserModuleConfig {
60
  ),
61
  ),
62
  ),
 
 
 
 
 
 
 
 
 
 
63
  'archive_format' => array(
64
  'title' => __('Archive format', 'content-egg') . ' <span class="cegg_required">*</span>',
65
  'callback' => array($this, 'render_dropdown'),
@@ -116,8 +126,7 @@ class FeedConfig extends AffiliateFeedParserModuleConfig {
116
  'message' => __('Please fill out all required mapping fields.', 'content-egg'),
117
  ),
118
  ),
119
- ),
120
-
121
  'deeplink' => array(
122
  'title' => __('Deeplink', 'content-egg'),
123
  'description' => __('Set this option only if your feed does not contain affiliate links.', 'content-egg'),
@@ -139,7 +148,10 @@ class FeedConfig extends AffiliateFeedParserModuleConfig {
139
  $value = isset($args['value'][$field_name]) ? $args['value'][$field_name] : '';
140
 
141
  $display_name = $field_name;
142
- if (self::isMappingFieldRequared($field_name))
 
 
 
143
  $display_name .= ' ' . __('(required)', 'content-egg');
144
  else
145
  $display_name .= ' ' . __('(optional)', 'content-egg');
@@ -171,6 +183,7 @@ class FeedConfig extends AffiliateFeedParserModuleConfig {
171
  public static function mappingFields()
172
  {
173
  return array(
 
174
  'id' => true,
175
  'title' => true,
176
  'description' => true,
13
  *
14
  * @author keywordrush.com <support@keywordrush.com>
15
  * @link https://www.keywordrush.com
16
+ * @copyright Copyright &copy; 2022 keywordrush.com
17
  */
18
  class FeedConfig extends AffiliateFeedParserModuleConfig {
19
 
42
  ),
43
  'feed_url' => array(
44
  'title' => __('Feed download URL', 'content-egg') . ' <span class="cegg_required">*</span>',
45
+ 'description' => __('CSV or XML format.', 'content-egg') . ' ' .
46
  sprintf(__('Make sure your unzipped feed size is less than %s.', 'content-egg'), \WP_MAX_MEMORY_LIMIT),
47
  'callback' => array($this, 'render_input'),
48
  'default' => '',
60
  ),
61
  ),
62
  ),
63
+ 'feed_format' => array(
64
+ 'title' => __('Feed format', 'content-egg') . ' <span class="cegg_required">*</span>',
65
+ 'callback' => array($this, 'render_dropdown'),
66
+ 'dropdown_options' => array(
67
+ 'csv' => __('CSV', 'content-egg'),
68
+ 'xml' => 'XML',
69
+ 'json' => 'JSON',
70
+ ),
71
+ 'default' => 'csv',
72
+ ),
73
  'archive_format' => array(
74
  'title' => __('Archive format', 'content-egg') . ' <span class="cegg_required">*</span>',
75
  'callback' => array($this, 'render_dropdown'),
126
  'message' => __('Please fill out all required mapping fields.', 'content-egg'),
127
  ),
128
  ),
129
+ ),
 
130
  'deeplink' => array(
131
  'title' => __('Deeplink', 'content-egg'),
132
  'description' => __('Set this option only if your feed does not contain affiliate links.', 'content-egg'),
148
  $value = isset($args['value'][$field_name]) ? $args['value'][$field_name] : '';
149
 
150
  $display_name = $field_name;
151
+
152
+ if ($field_name == 'product node')
153
+ $display_name .= ' ' . __('(required for XML/JSON feed only)', 'content-egg');
154
+ elseif (self::isMappingFieldRequared($field_name))
155
  $display_name .= ' ' . __('(required)', 'content-egg');
156
  else
157
  $display_name .= ' ' . __('(optional)', 'content-egg');
183
  public static function mappingFields()
184
  {
185
  return array(
186
+ 'product node' => false,
187
  'id' => true,
188
  'title' => true,
189
  'description' => true,
application/modules/Feed/FeedModule.php CHANGED
@@ -16,7 +16,7 @@ use ContentEgg\application\components\LinkHandler;
16
  *
17
  * @author keywordrush.com <support@keywordrush.com>
18
  * @link https://www.keywordrush.com
19
- * @copyright Copyright &copy; 2021 keywordrush.com
20
  */
21
  class FeedModule extends AffiliateFeedParserModule {
22
 
@@ -35,11 +35,11 @@ class FeedModule extends AffiliateFeedParserModule {
35
  {
36
  return '5.2.0';
37
  }
38
-
39
  public function isFree()
40
  {
41
  return true;
42
- }
43
 
44
  public function getParserType()
45
  {
@@ -90,7 +90,7 @@ class FeedModule extends AffiliateFeedParserModule {
90
 
91
  return $url;
92
  }
93
-
94
  protected function feedProductPrepare(array $data)
95
  {
96
  $mapped_data = $this->mapProduct($data);
@@ -111,11 +111,12 @@ class FeedModule extends AffiliateFeedParserModule {
111
  return false;
112
 
113
  if (isset($mapped_data['sale price']) && (float) $mapped_data['sale price'])
114
- $product['price'] = (float) $mapped_data['sale price'];
115
  else
116
- $product['price'] = (float) $mapped_data['price'];
117
 
118
  $product['stock_status'] = ContentProduct::STOCK_STATUS_UNKNOWN;
 
119
  if (!empty($mapped_data['availability']))
120
  {
121
  $availability = strtolower($mapped_data['availability']);
@@ -123,7 +124,7 @@ class FeedModule extends AffiliateFeedParserModule {
123
  $product['stock_status'] = ContentProduct::STOCK_STATUS_OUT_OF_STOCK;
124
  else
125
  $product['stock_status'] = ContentProduct::STOCK_STATUS_IN_STOCK;
126
- } elseif (!empty($mapped_data['is in stock']))
127
  {
128
  if (filter_var($mapped_data['is in stock'], FILTER_VALIDATE_BOOLEAN))
129
  $product['stock_status'] = ContentProduct::STOCK_STATUS_IN_STOCK;
@@ -169,7 +170,6 @@ class FeedModule extends AffiliateFeedParserModule {
169
  $options['price_max'] = (float) $query_params['price_max'];
170
 
171
  $results = $this->product_model->searchByKeyword($keyword, $limit, $options);
172
-
173
  }
174
  if (!$results)
175
  return array();
@@ -189,7 +189,7 @@ class FeedModule extends AffiliateFeedParserModule {
189
  unset($items[$key]);
190
  continue;
191
  }
192
-
193
  $product = $this->product_model->searchById($item['unique_id']);
194
  if (!$product)
195
  {
@@ -217,9 +217,9 @@ class FeedModule extends AffiliateFeedParserModule {
217
  $items[$key]['price'] = (float) $r['price'];
218
  $items[$key]['priceOld'] = 0;
219
  }
220
-
221
  if ($deeplink)
222
- $items[$key]['url'] = LinkHandler::createAffUrl($items[$key]['orig_url'], $deeplink, $item);
223
  }
224
 
225
  return $items;
@@ -229,7 +229,7 @@ class FeedModule extends AffiliateFeedParserModule {
229
  {
230
  $data = array();
231
  $deeplink = $this->config('deeplink');
232
-
233
  foreach ($results as $product)
234
  {
235
  if (!$r = unserialize($product['product']))
@@ -251,6 +251,11 @@ class FeedModule extends AffiliateFeedParserModule {
251
  } else
252
  $content->price = (float) $r['price'];
253
 
 
 
 
 
 
254
 
255
  if (isset($r['currency']) && strlen($r['currency']))
256
  $content->currencyCode = $r['currency'];
@@ -280,7 +285,7 @@ class FeedModule extends AffiliateFeedParserModule {
280
 
281
  if ($deeplink)
282
  $content->url = LinkHandler::createAffUrl($content->orig_url, $deeplink, (array) $content);
283
-
284
  $data[] = $content;
285
  }
286
  return $data;
@@ -309,15 +314,15 @@ class FeedModule extends AffiliateFeedParserModule {
309
  public function viewDataPrepare($data)
310
  {
311
  if (!$deeplink = $this->config('deeplink'))
312
- return $data;
313
-
314
  foreach ($data as $key => $d)
315
  {
316
  $data[$key]['url'] = LinkHandler::createAffUrl($d['orig_url'], $deeplink, $d);
317
  }
318
  return parent::viewDataPrepare($data);
319
- }
320
-
321
  public function mapProduct(array $data)
322
  {
323
  $mapped_data = array();
16
  *
17
  * @author keywordrush.com <support@keywordrush.com>
18
  * @link https://www.keywordrush.com
19
+ * @copyright Copyright &copy; 2022 keywordrush.com
20
  */
21
  class FeedModule extends AffiliateFeedParserModule {
22
 
35
  {
36
  return '5.2.0';
37
  }
38
+
39
  public function isFree()
40
  {
41
  return true;
42
+ }
43
 
44
  public function getParserType()
45
  {
90
 
91
  return $url;
92
  }
93
+
94
  protected function feedProductPrepare(array $data)
95
  {
96
  $mapped_data = $this->mapProduct($data);
111
  return false;
112
 
113
  if (isset($mapped_data['sale price']) && (float) $mapped_data['sale price'])
114
+ $product['price'] = (float) TextHelper::parsePriceAmount($mapped_data['sale price']);
115
  else
116
+ $product['price'] = (float) TextHelper::parsePriceAmount($mapped_data['price']);
117
 
118
  $product['stock_status'] = ContentProduct::STOCK_STATUS_UNKNOWN;
119
+
120
  if (!empty($mapped_data['availability']))
121
  {
122
  $availability = strtolower($mapped_data['availability']);
124
  $product['stock_status'] = ContentProduct::STOCK_STATUS_OUT_OF_STOCK;
125
  else
126
  $product['stock_status'] = ContentProduct::STOCK_STATUS_IN_STOCK;
127
+ } elseif (isset($mapped_data['is in stock']) && $mapped_data['is in stock'] !== '')
128
  {
129
  if (filter_var($mapped_data['is in stock'], FILTER_VALIDATE_BOOLEAN))
130
  $product['stock_status'] = ContentProduct::STOCK_STATUS_IN_STOCK;
170
  $options['price_max'] = (float) $query_params['price_max'];
171
 
172
  $results = $this->product_model->searchByKeyword($keyword, $limit, $options);
 
173
  }
174
  if (!$results)
175
  return array();
189
  unset($items[$key]);
190
  continue;
191
  }
192
+
193
  $product = $this->product_model->searchById($item['unique_id']);
194
  if (!$product)
195
  {
217
  $items[$key]['price'] = (float) $r['price'];
218
  $items[$key]['priceOld'] = 0;
219
  }
220
+
221
  if ($deeplink)
222
+ $items[$key]['url'] = LinkHandler::createAffUrl($items[$key]['orig_url'], $deeplink, $item);
223
  }
224
 
225
  return $items;
229
  {
230
  $data = array();
231
  $deeplink = $this->config('deeplink');
232
+
233
  foreach ($results as $product)
234
  {
235
  if (!$r = unserialize($product['product']))
251
  } else
252
  $content->price = (float) $r['price'];
253
 
254
+ if ($content->price)
255
+ $content->price = round($content->price, 2);
256
+
257
+ if ($content->priceOld)
258
+ $content->priceOld = round($content->priceOld, 2);
259
 
260
  if (isset($r['currency']) && strlen($r['currency']))
261
  $content->currencyCode = $r['currency'];
285
 
286
  if ($deeplink)
287
  $content->url = LinkHandler::createAffUrl($content->orig_url, $deeplink, (array) $content);
288
+
289
  $data[] = $content;
290
  }
291
  return $data;
314
  public function viewDataPrepare($data)
315
  {
316
  if (!$deeplink = $this->config('deeplink'))
317
+ return parent::viewDataPrepare($data);
318
+
319
  foreach ($data as $key => $d)
320
  {
321
  $data[$key]['url'] = LinkHandler::createAffUrl($d['orig_url'], $deeplink, $d);
322
  }
323
  return parent::viewDataPrepare($data);
324
+ }
325
+
326
  public function mapProduct(array $data)
327
  {
328
  $mapped_data = array();
application/modules/Offer/OfferConfig.php CHANGED
@@ -6,6 +6,7 @@ defined('\ABSPATH') || exit;
6
 
7
  use ContentEgg\application\components\AffiliateParserModuleConfig;
8
  use ContentEgg\application\helpers\TextHelper;
 
9
 
10
  /**
11
  * OfferConfig class file
@@ -18,6 +19,8 @@ class OfferConfig extends AffiliateParserModuleConfig {
18
 
19
  public function options()
20
  {
 
 
21
  $options = array(
22
  'save_img' => array(
23
  'title' => __('Save images', 'content-egg'),
@@ -37,6 +40,12 @@ class OfferConfig extends AffiliateParserModuleConfig {
37
  ),
38
  ),
39
  ),
 
 
 
 
 
 
40
  );
41
  $parent = parent::options();
42
  unset($parent['ttl']);
6
 
7
  use ContentEgg\application\components\AffiliateParserModuleConfig;
8
  use ContentEgg\application\helpers\TextHelper;
9
+ use ContentEgg\application\helpers\CurrencyHelper;
10
 
11
  /**
12
  * OfferConfig class file
19
 
20
  public function options()
21
  {
22
+ $currencies = CurrencyHelper::getCurrenciesList();
23
+
24
  $options = array(
25
  'save_img' => array(
26
  'title' => __('Save images', 'content-egg'),
40
  ),
41
  ),
42
  ),
43
+ 'default_currency' => array(
44
+ 'title' => __('Default currency', 'content-egg'),
45
+ 'callback' => array($this, 'render_dropdown'),
46
+ 'dropdown_options' => array_combine($currencies, $currencies),
47
+ 'default' => 'USD',
48
+ ),
49
  );
50
  $parent = parent::options();
51
  unset($parent['ttl']);
application/modules/Offer/OfferModule.php CHANGED
@@ -14,8 +14,8 @@ use ContentEgg\application\components\ContentProduct;
14
  * OfferModule class file
15
  *
16
  * @author keywordrush.com <support@keywordrush.com>
17
- * @link http://www.keywordrush.com/
18
- * @copyright Copyright &copy; 2016 keywordrush.com
19
  */
20
  class OfferModule extends AffiliateParserModule {
21
 
@@ -70,7 +70,7 @@ class OfferModule extends AffiliateParserModule {
70
  $custom = $item['extra']['priceXpath'];
71
  else
72
  $custom = '';
73
-
74
  if (!isset($item['extra']['priceXpath']))
75
  $item['extra']['priceXpath'] = '';
76
  if (!$priceXpath = $this->getXpath($item['domain'], $item['extra']['priceXpath']))
@@ -96,17 +96,17 @@ class OfferModule extends AffiliateParserModule {
96
  $items[$key]['extra']['last_error'] = $e->getMessage();
97
  continue;
98
  }
99
-
100
  if ($items[$key]['stock_status'] == ContentProduct::STOCK_STATUS_OUT_OF_STOCK)
101
  $items[$key]['stock_status'] = ContentProduct::STOCK_STATUS_IN_STOCK;
102
-
103
  if (!$price)
104
  {
105
  $items[$key]['extra']['last_error'] = 'XPath is unable to find price value.';
106
  continue;
107
  }
108
-
109
- // assign new price
110
  $items[$key]['price'] = (float) TextHelper::parsePriceAmount($price);
111
  }
112
  return $items;
@@ -128,10 +128,13 @@ class OfferModule extends AffiliateParserModule {
128
  $item['priceOld'] = (float) TextHelper::parsePriceAmount($item['priceOld']);
129
  $item['rating'] = TextHelper::ratingPrepare($item['rating']);
130
 
131
- if (!$item['extra']['deeplink'] && $original_domain = TextHelper::findOriginalDomain($item['orig_url']))
132
- $item['domain'] = $original_domain;
133
- else
134
- $item['domain'] = TextHelper::getHostName($item['orig_url']);
 
 
 
135
 
136
  if (!$item['title'])
137
  continue;
14
  * OfferModule class file
15
  *
16
  * @author keywordrush.com <support@keywordrush.com>
17
+ * @link https://www.keywordrush.com
18
+ * @copyright Copyright &copy; 2021 keywordrush.com
19
  */
20
  class OfferModule extends AffiliateParserModule {
21
 
70
  $custom = $item['extra']['priceXpath'];
71
  else
72
  $custom = '';
73
+
74
  if (!isset($item['extra']['priceXpath']))
75
  $item['extra']['priceXpath'] = '';
76
  if (!$priceXpath = $this->getXpath($item['domain'], $item['extra']['priceXpath']))
96
  $items[$key]['extra']['last_error'] = $e->getMessage();
97
  continue;
98
  }
99
+
100
  if ($items[$key]['stock_status'] == ContentProduct::STOCK_STATUS_OUT_OF_STOCK)
101
  $items[$key]['stock_status'] = ContentProduct::STOCK_STATUS_IN_STOCK;
102
+
103
  if (!$price)
104
  {
105
  $items[$key]['extra']['last_error'] = 'XPath is unable to find price value.';
106
  continue;
107
  }
108
+
109
+ // assign new price
110
  $items[$key]['price'] = (float) TextHelper::parsePriceAmount($price);
111
  }
112
  return $items;
128
  $item['priceOld'] = (float) TextHelper::parsePriceAmount($item['priceOld']);
129
  $item['rating'] = TextHelper::ratingPrepare($item['rating']);
130
 
131
+ if (!$item['domain'])
132
+ {
133
+ if (!$item['extra']['deeplink'] && $original_domain = TextHelper::findOriginalDomain($item['orig_url']))
134
+ $item['domain'] = $original_domain;
135
+ else
136
+ $item['domain'] = TextHelper::getHostName($item['orig_url']);
137
+ }
138
 
139
  if (!$item['title'])
140
  continue;
application/modules/Offer/views/metabox_module.php CHANGED
@@ -73,7 +73,11 @@
73
  <div class="col-md-6" style="padding:0px;">
74
  <input type="text" placeholder="<?php _e('Product URL', 'content-egg'); ?> (<?php _e('required', 'content-egg'); ?>)" ng-model="data.orig_url" class="form-control" style="margin-bottom: 5px;">
75
  </div>
76
- <div class="col-md-6" style="padding-right:0px;">
 
 
 
 
77
  <input type="text" placeholder="<?php _e('Custom Deeplink', 'content-egg'); ?>" ng-model="data.extra.deeplink" class="form-control" style="margin-bottom: 5px;">
78
  </div>
79
  </div>
@@ -94,7 +98,8 @@
94
  <input type="text" placeholder="<?php _e('Old Price', 'content-egg'); ?>" ng-model="data.priceOld" class="form-control">
95
  </div>
96
  <div class="col-md-1" style="padding-right:0px;">
97
- <select class="form-control" ng-model="data.currencyCode">
 
98
  <?php foreach (\ContentEgg\application\helpers\CurrencyHelper::getCurrenciesList() as $currency): ?>
99
  <option value="<?php echo \esc_attr($currency); ?>"><?php echo \esc_html($currency); ?></option>
100
  <?php endforeach; ?>
73
  <div class="col-md-6" style="padding:0px;">
74
  <input type="text" placeholder="<?php _e('Product URL', 'content-egg'); ?> (<?php _e('required', 'content-egg'); ?>)" ng-model="data.orig_url" class="form-control" style="margin-bottom: 5px;">
75
  </div>
76
+ <div class="col-md-2" style="padding-right:0px;">
77
+ <input type="text" placeholder="<?php _e('Domain', 'content-egg'); ?>" ng-model="data.domain" class="form-control" style="margin-bottom: 5px;">
78
+
79
+ </div>
80
+ <div class="col-md-4" style="padding-right:0px;">
81
  <input type="text" placeholder="<?php _e('Custom Deeplink', 'content-egg'); ?>" ng-model="data.extra.deeplink" class="form-control" style="margin-bottom: 5px;">
82
  </div>
83
  </div>
98
  <input type="text" placeholder="<?php _e('Old Price', 'content-egg'); ?>" ng-model="data.priceOld" class="form-control">
99
  </div>
100
  <div class="col-md-1" style="padding-right:0px;">
101
+
102
+ <select class="form-control" ng-model="data.currencyCode" ng-init="data.currencyCode = data.currencyCode || '<?php echo $module->getConfigInstance()->option('default_currency');?>'">
103
  <?php foreach (\ContentEgg\application\helpers\CurrencyHelper::getCurrenciesList() as $currency): ?>
104
  <option value="<?php echo \esc_attr($currency); ?>"><?php echo \esc_html($currency); ?></option>
105
  <?php endforeach; ?>
application/templates/blocks/item_row.php CHANGED
@@ -57,7 +57,7 @@ use ContentEgg\application\helpers\TemplateHelper;
57
  <span class="text-muted">
58
  <small>
59
  <?php echo sprintf(TemplateHelper::__('as of %s'), TemplateHelper::getLastUpdateFormatted($module_id, $post_id)); ?>
60
- <?php if ($module_id == 'Amazon') TemplateHelper::printAmazonDisclaimer(); ?>
61
  </small>
62
  </span>
63
  </div>
57
  <span class="text-muted">
58
  <small>
59
  <?php echo sprintf(TemplateHelper::__('as of %s'), TemplateHelper::getLastUpdateFormatted($module_id, $post_id)); ?>
60
+ <?php if ($module_id == 'Amazon' || $module_id == 'AmazonNoApi') TemplateHelper::printAmazonDisclaimer(); ?>
61
  </small>
62
  </span>
63
  </div>
application/templates/blocks/list_row.php CHANGED
@@ -49,14 +49,14 @@ use ContentEgg\application\helpers\TemplateHelper;
49
  </div>
50
  <?php endif; ?>
51
 
52
- <?php if (!empty($amazon_last_updated)): ?>
53
- <div class="cegg-font60 cegg-lineheight15">
54
- <?php echo sprintf(TemplateHelper::__('as of %s'), $amazon_last_updated); ?>
55
- <?php TemplateHelper::printAmazonDisclaimer(); ?>
56
- </div>
57
- <?php endif; ?>
58
- <?php endif; ?>
59
 
 
 
 
 
 
 
 
60
  </div>
61
  </div>
62
  <div class="col-md-2 col-sm-2 col-xs-12 cegg-btn-cell">
@@ -71,7 +71,7 @@ use ContentEgg\application\helpers\TemplateHelper;
71
  </small>
72
  </div>
73
  <?php endif; ?>
74
-
75
 
76
  </div>
77
  </div>
49
  </div>
50
  <?php endif; ?>
51
 
 
 
 
 
 
 
 
52
 
53
+ <?php endif; ?>
54
+ <?php if ($item['module_id'] == 'Amazon' || $item['module_id'] == 'AmazonNoApi'): ?>
55
+ <div class="cegg-font60 cegg-lineheight15">
56
+ <?php echo sprintf(TemplateHelper::__('as of %s'), TemplateHelper::dateFormatFromGmt($item['last_update'])); ?>
57
+ <?php TemplateHelper::printAmazonDisclaimer(); ?>
58
+ </div>
59
+ <?php endif; ?>
60
  </div>
61
  </div>
62
  <div class="col-md-2 col-sm-2 col-xs-12 cegg-btn-cell">
71
  </small>
72
  </div>
73
  <?php endif; ?>
74
+
75
 
76
  </div>
77
  </div>
application/templates/blocks/list_row_no_price.php CHANGED
@@ -4,7 +4,7 @@ defined('\ABSPATH') || exit;
4
  use ContentEgg\application\helpers\TemplateHelper;
5
  ?>
6
 
7
- <div class="row-products row">
8
  <div class="col-md-2 col-sm-2 col-xs-3 cegg-image-cell">
9
 
10
  <div class="cegg-position-container2">
4
  use ContentEgg\application\helpers\TemplateHelper;
5
  ?>
6
 
7
+ <div class="row-products row" id="my-comparison-block">
8
  <div class="col-md-2 col-sm-2 col-xs-3 cegg-image-cell">
9
 
10
  <div class="cegg-position-container2">
application/templates/blocks/price_history.php CHANGED
@@ -42,8 +42,8 @@ use ContentEgg\application\helpers\TemplateHelper;
42
  <td><?php echo TemplateHelper::formatDate($price['date']); ?></td>
43
  </tr>
44
  </table>
45
- <?php $since = TemplateHelper::priceHistorySinceDate($item['unique_id'], $module_id); ?>
46
- <div class='text-right text-muted'><?php echo sprintf(__('Since %s'), TemplateHelper::formatDate($since)); ?></div>
47
  </div>
48
  <div class='col-md-5'>
49
  <h4><?php TemplateHelper::_e('Last price changes'); ?></h4>
42
  <td><?php echo TemplateHelper::formatDate($price['date']); ?></td>
43
  </tr>
44
  </table>
45
+ <?php $since = TemplateHelper::priceHistorySinceDate($item['unique_id'], $module_id); ?>
46
+ <div class='text-right text-muted'><?php echo sprintf(TemplateHelper::__('Since %s'), TemplateHelper::formatDate($since)); ?></div>
47
  </div>
48
  <div class='col-md-5'>
49
  <h4><?php TemplateHelper::_e('Last price changes'); ?></h4>
application/templates/data_grid.php CHANGED
@@ -3,7 +3,7 @@ defined('\ABSPATH') || exit;
3
 
4
  use ContentEgg\application\helpers\TemplateHelper;
5
 
6
- if (TemplateHelper::isModuleDataExist($items, 'Amazon'))
7
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
8
 
9
 
@@ -36,5 +36,14 @@ $col_size = ceil(12 / $cols);
36
  </div>
37
  </div>
38
 
39
-
 
 
 
 
 
 
 
 
 
40
  </div>
3
 
4
  use ContentEgg\application\helpers\TemplateHelper;
5
 
6
+ if (TemplateHelper::isModuleDataExist($items, 'Amazon', 'AmazonNoApi'))
7
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
8
 
9
 
36
  </div>
37
  </div>
38
 
39
+ <?php if ($module_id == 'Amazon' || $module_id == 'AmazonNoApi'): ?>
40
+ <div class="row cegg-no-top-margin">
41
+ <div class="col-md-12 text-right text-muted">
42
+ <small>
43
+ <?php echo sprintf(TemplateHelper::__('Last updated on %s'), TemplateHelper::getLastUpdateFormatted($module_id, $post_id)); ?>
44
+ <?php TemplateHelper::printAmazonDisclaimer(); ?>
45
+ </small>
46
+ </div>
47
+ </div>
48
+ <?php endif; ?>
49
  </div>
application/templates/data_item.php CHANGED
@@ -3,7 +3,7 @@ defined('\ABSPATH') || exit;
3
 
4
  use ContentEgg\application\helpers\TemplateHelper;
5
 
6
- if (TemplateHelper::isModuleDataExist($items, 'Amazon'))
7
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
8
  ?>
9
 
3
 
4
  use ContentEgg\application\helpers\TemplateHelper;
5
 
6
+ if (TemplateHelper::isModuleDataExist($items, 'Amazon', 'AmazonNoApi'))
7
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
8
  ?>
9
 
application/templates/data_item_simple.php CHANGED
@@ -3,7 +3,7 @@ defined('\ABSPATH') || exit;
3
 
4
  use ContentEgg\application\helpers\TemplateHelper;
5
 
6
- if (TemplateHelper::isModuleDataExist($items, 'Amazon'))
7
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
8
  ?>
9
 
3
 
4
  use ContentEgg\application\helpers\TemplateHelper;
5
 
6
+ if (TemplateHelper::isModuleDataExist($items, 'Amazon', 'AmazonNoApi'))
7
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
8
  ?>
9
 
application/templates/data_list.php CHANGED
@@ -3,7 +3,7 @@ defined('\ABSPATH') || exit;
3
 
4
  use ContentEgg\application\helpers\TemplateHelper;
5
 
6
- if (TemplateHelper::isModuleDataExist($items, 'Amazon'))
7
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
8
 
9
  \wp_enqueue_script('bootstrap-popover');
@@ -21,7 +21,7 @@ if (TemplateHelper::isModuleDataExist($items, 'Amazon'))
21
  <?php endforeach; ?>
22
  </div>
23
 
24
- <?php if ($module_id == 'Amazon'): ?>
25
  <div class="row cegg-no-top-margin">
26
  <div class="col-md-12 text-right text-muted">
27
  <small>
3
 
4
  use ContentEgg\application\helpers\TemplateHelper;
5
 
6
+ if (TemplateHelper::isModuleDataExist($items, 'Amazon', 'AmazonNoApi'))
7
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
8
 
9
  \wp_enqueue_script('bootstrap-popover');
21
  <?php endforeach; ?>
22
  </div>
23
 
24
+ <?php if ($module_id == 'Amazon' || $module_id == 'AmazonNoApi'): ?>
25
  <div class="row cegg-no-top-margin">
26
  <div class="col-md-12 text-right text-muted">
27
  <small>
application/vendor/XmlStringStreamer/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Oskar Thornblad
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
application/vendor/XmlStringStreamer/Parser/StringWalker.php ADDED
@@ -0,0 +1,276 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * Modified version of XmlStringStreamer, edited namespaces only
5
+ * @author keywordrush.com <support@keywordrush.com>
6
+ * @copyright Copyright &copy; 2021 keywordrush.com
7
+ */
8
+
9
+ /**
10
+ * xml-string-streamer StringWalker parser
11
+ *
12
+ * @package xml-string-streamer
13
+ * @author Oskar Thornblad <oskar.thornblad@gmail.com>
14
+ */
15
+
16
+ namespace ContentEgg\application\vendor\XmlStringStreamer\Parser;
17
+
18
+ use Exception;
19
+ use ContentEgg\application\vendor\XmlStringStreamer\ParserInterface;
20
+ use ContentEgg\application\vendor\XmlStringStreamer\StreamInterface;
21
+
22
+ /**
23
+ * The string walker parser builds the XML nodes by fetching one element at a time until a certain depth is re-reached
24
+ */
25
+ class StringWalker implements ParserInterface
26
+ {
27
+ /**
28
+ * Holds the parser configuration
29
+ * @var array
30
+ */
31
+ protected $options;
32
+
33
+ /**
34
+ * Is this the first run?
35
+ * @var boolean
36
+ */
37
+ protected $firstRun = true;
38
+
39
+ /**
40
+ * What depth are we currently at?
41
+ * @var integer
42
+ */
43
+ protected $depth = 0;
44
+
45
+ /**
46
+ * The latest chunk from the stream
47
+ * @var string
48
+ */
49
+ protected $chunk;
50
+
51
+ /**
52
+ * Last XML node in the making, used for anti-freeze detection
53
+ * @var null|string
54
+ */
55
+ protected $lastChunk;
56
+
57
+ /**
58
+ * XML node in the making
59
+ * @var null|string
60
+ */
61
+ protected $shaved = null;
62
+
63
+ /**
64
+ * Whether to capture or not
65
+ * @var boolean
66
+ */
67
+ protected $capture = false;
68
+
69
+ /**
70
+ * If extractContainer is true, this will grow with the XML captured before and after the specified capture depth
71
+ * @var string
72
+ */
73
+ protected $containerXml = "";
74
+
75
+ /**
76
+ * Parser contructor
77
+ * @param array $options An options array
78
+ */
79
+ public function __construct(array $options = array())
80
+ {
81
+ $this->options = array_merge(array(
82
+ "captureDepth" => 2,
83
+ "expectGT" => false,
84
+ "tags" => array(
85
+ array("<?", "?>", 0),
86
+ array("<!--", "-->", 0),
87
+ array("<![CDATA[", "]]>", 0),
88
+ array("<!", ">", 0),
89
+ array("</", ">", -1),
90
+ array("<", "/>", 0),
91
+ array("<", ">", 1),
92
+ ),
93
+ "tagsWithAllowedGT" => array(
94
+ array("<!--", "-->"),
95
+ array("<![CDATA[", "]]>"),
96
+ ),
97
+ "extractContainer" => false,
98
+ ), $options);
99
+ }
100
+
101
+ /**
102
+ * Shaves off the next element from the chunk
103
+ * @return string[]|bool Either a shaved off element array(0 => Captured element, 1 => Data from last shaving point up to and including captured element) or false if one could not be obtained
104
+ */
105
+ protected function shave()
106
+ {
107
+ preg_match("/<[^>]+>/", $this->chunk, $matches, PREG_OFFSET_CAPTURE);
108
+
109
+ if (isset($matches[0], $matches[0][0], $matches[0][1])) {
110
+ list($captured, $offset) = $matches[0];
111
+
112
+ if ($this->options["expectGT"]) {
113
+ // Some elements support > inside
114
+ foreach ($this->options["tagsWithAllowedGT"] as $tag) {
115
+ list($opening, $closing) = $tag;
116
+
117
+ if (substr($captured, 0, strlen($opening)) === $opening) {
118
+ // We have a match, our preg_match may have ended too early
119
+ // Most often, this isn't the case
120
+ if (substr($captured, -1 * strlen($closing)) !== $closing) {
121
+ // In this case, the preg_match ended too early, let's find the real end
122
+ $position = strpos($this->chunk, $closing);
123
+ if ($position === false) {
124
+ // We need more XML!
125
+
126
+ return false;
127
+ }
128
+
129
+ // We found the end, modify $captured
130
+ $captured = substr($this->chunk, $offset, $position + strlen($closing) - $offset);
131
+ }
132
+ }
133
+ }
134
+ }
135
+
136
+ // Data in between
137
+ $data = substr($this->chunk, 0, $offset);
138
+
139
+ // Shave from chunk
140
+ $this->chunk = substr($this->chunk, $offset + strlen($captured));
141
+
142
+ return array($captured, $data . $captured);
143
+ }
144
+
145
+ return false;
146
+ }
147
+
148
+ /**
149
+ * Extract XML compatible tag head and tail
150
+ * @param string $element XML element
151
+ * @return string[] 0 => Opening tag, 1 => Closing tag
152
+ */
153
+ protected function getEdges($element)
154
+ {
155
+ // TODO: Performance tuning possible here by not looping
156
+
157
+ foreach ($this->options["tags"] as $tag) {
158
+ list($opening, $closing, $depth) = $tag;
159
+
160
+ if (substr($element, 0, strlen($opening)) === $opening
161
+ && substr($element, -1 * strlen($closing)) === $closing) {
162
+
163
+ return $tag;
164
+ }
165
+ }
166
+ }
167
+
168
+ /**
169
+ * The shave method must be able to request more data even though there isn't any more to fetch from the stream, this method wraps the getChunk call so that it returns true as long as there is XML data left
170
+ * @param StreamInterface $stream The stream to read from
171
+ * @return bool Returns whether there is more XML data or not
172
+ */
173
+ protected function prepareChunk(StreamInterface $stream)
174
+ {
175
+ if (!$this->firstRun && is_null($this->shaved)) {
176
+ // We're starting again after a flush
177
+ $this->shaved = "";
178
+
179
+ return true;
180
+ } else if (is_null($this->shaved)) {
181
+ $this->shaved = "";
182
+ }
183
+
184
+ $newChunk = $stream->getChunk();
185
+
186
+ if ($newChunk !== false) {
187
+ $this->chunk .= $newChunk;
188
+
189
+ return true;
190
+ } else {
191
+ if (trim($this->chunk) !== "" && $this->chunk !== $this->lastChunk) {
192
+ // Update anti-freeze protection chunk
193
+ $this->lastChunk = $this->chunk;
194
+ // Continue
195
+ return true;
196
+ }
197
+ }
198
+
199
+ return false;
200
+ }
201
+
202
+ /**
203
+ * Get the extracted container XML, if called before the whole stream is parsed, the XML returned will most likely be invalid due to missing closing tags
204
+ * @return string XML string
205
+ * @throws Exception if the extractContainer option isn't true
206
+ */
207
+ public function getExtractedContainer()
208
+ {
209
+ if (!$this->options["extractContainer"]) {
210
+ throw new Exception("This method requires the 'extractContainer' option to be true");
211
+ }
212
+
213
+ return $this->containerXml;
214
+ }
215
+
216
+ /**
217
+ * Tries to retrieve the next node or returns false
218
+ * @param StreamInterface $stream The stream to use
219
+ * @return string|bool The next xml node or false if one could not be retrieved
220
+ */
221
+ public function getNodeFrom(StreamInterface $stream)
222
+ {
223
+ // Iterate and append to $this->chunk
224
+ while ($this->prepareChunk($stream)) {
225
+ $this->firstRun = false;
226
+ // Shave off elements
227
+ while ($shaved = $this->shave()) {
228
+ list($element, $data) = $shaved;
229
+
230
+ // Analyze element
231
+ list($opening, $closing, $depth) = $this->getEdges($element);
232
+
233
+ // Update depth
234
+ $this->depth += $depth;
235
+
236
+ $flush = false;
237
+ $captureOnce = false;
238
+
239
+ // Capture or don't?
240
+ if ($this->depth === $this->options["captureDepth"] && $depth > 0) {
241
+ // Yes, we've just entered capture depth, start capturing
242
+ $this->capture = true;
243
+ } else if ($this->depth === $this->options["captureDepth"] - 1 && $depth < 0) {
244
+ // No, we've just exited capture depth, stop capturing and prepare for flush
245
+ $flush = true;
246
+ $this->capture = false;
247
+
248
+ // ..but include this last node
249
+ $this->shaved .= $data;
250
+ } else if ($this->options["extractContainer"] && $this->depth < $this->options["captureDepth"]) {
251
+ // We're outside of our capture scope, save to the special buffer if extractContainer is true
252
+ $this->containerXml .= $element;
253
+ } else if ($depth === 0 && $this->depth + 1 === $this->options["captureDepth"]) {
254
+ // Self-closing element - capture this element and flush but don't start capturing everything yet
255
+ $captureOnce = true;
256
+ $flush = true;
257
+ }
258
+
259
+ // Capture the last retrieved node
260
+ if ($this->capture || $captureOnce) {
261
+ $this->shaved .= $data;
262
+ }
263
+
264
+ if ($flush) {
265
+ // Flush the whole node and start over on the next
266
+ $flush = $this->shaved;
267
+ $this->shaved = null;
268
+
269
+ return $flush;
270
+ }
271
+ }
272
+ }
273
+
274
+ return false;
275
+ }
276
+ }
application/vendor/XmlStringStreamer/Parser/UniqueNode.php ADDED
@@ -0,0 +1,293 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * Modified version of XmlStringStreamer, edited namespaces only
5
+ * @author keywordrush.com <support@keywordrush.com>
6
+ * @copyright Copyright &copy; 2021 keywordrush.com
7
+ */
8
+
9
+ /**
10
+ * xml-string-streamer UniqueNode parser
11
+ *
12
+ * @package xml-string-streamer
13
+ * @author Oskar Thornblad <oskar.thornblad@gmail.com>
14
+ * @author Roman Voloboev <animir@ya.ru>
15
+ */
16
+
17
+ namespace ContentEgg\application\vendor\XmlStringStreamer\Parser;
18
+
19
+ use Exception;
20
+ use ContentEgg\application\vendor\XmlStringStreamer\ParserInterface;
21
+ use ContentEgg\application\vendor\XmlStringStreamer\StreamInterface;
22
+
23
+ /**
24
+ * The unique node parser starts at a given element name and flushes when its corresponding closing tag is found
25
+ */
26
+ class UniqueNode implements ParserInterface
27
+ {
28
+ /**
29
+ * Current working XML blob
30
+ * @var string
31
+ */
32
+ private $workingBlob = "";
33
+
34
+ /**
35
+ * The flushed node
36
+ * @var string
37
+ */
38
+ private $flushed = "";
39
+
40
+ /**
41
+ * Start position of the given element in the workingBlob
42
+ * @var integer
43
+ */
44
+ private $startPos = 0;
45
+
46
+ /**
47
+ * Records how far we've searched in the XML blob so far
48
+ * @var integer
49
+ */
50
+ private $hasSearchedUntilPos = -1;
51
+
52
+ const FIND_OPENING_TAG_ACTION = 0;
53
+ const FIND_CLOSING_TAG_ACTION = 1;
54
+
55
+ /**
56
+ * Next action to perform
57
+ * @var integer
58
+ */
59
+ private $nextAction = 0;
60
+
61
+ /**
62
+ * Indicates short closing tag
63
+ * @var bool
64
+ */
65
+
66
+ private $shortClosedTagNow = false;
67
+
68
+ /**
69
+ * If extractContainer is true, this will grow with the XML captured before and after the specified capture depth
70
+ * @var string
71
+ */
72
+ protected $containerXml = "";
73
+
74
+ /**
75
+ * Whether we're found our first capture target or not
76
+ * @var bool
77
+ */
78
+ protected $preCapture = true;
79
+
80
+ /**
81
+ * Parser constructor
82
+ * @param array $options An options array
83
+ * @throws Exception if the required option uniqueNode isn't set
84
+ */
85
+ public function __construct(array $options = array())
86
+ {
87
+ $this->options = array_merge(array(
88
+ "extractContainer" => false,
89
+ ), $options);
90
+
91
+ if (!isset($this->options["uniqueNode"])) {
92
+ throw new Exception("Required option 'uniqueNode' not set");
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Search the blob for our unique node's opening tag
98
+ * @return bool|int Either returns the char position of the opening tag or false
99
+ */
100
+ protected function getOpeningTagPos()
101
+ {
102
+ $startPositionInBlob = false;
103
+ if (preg_match("/<" . preg_quote($this->options["uniqueNode"]) . "(>| )/", $this->workingBlob, $matches, PREG_OFFSET_CAPTURE) === 1) {
104
+ $startPositionInBlob = $matches[0][1];
105
+ }
106
+
107
+
108
+ if ($startPositionInBlob === false) {
109
+ $this->hasSearchedUntilPos = strlen($this->workingBlob) - 1;
110
+ }
111
+
112
+ return $startPositionInBlob;
113
+ }
114
+
115
+ /**
116
+ * Search short closing tag in $workingBlob before
117
+ *
118
+ * @param string $workingBlob
119
+ * @param int $len
120
+ * @return bool|int Either returns the char position of the short closing tag or false
121
+ */
122
+ private function checkShortClosingTag($workingBlob, $len) {
123
+ $resultEndPositionInBlob = false;
124
+ while ($len = strpos($workingBlob, "/>", $len + 1)) {
125
+ $subBlob = substr($workingBlob, $this->startPos, $len + strlen("/>") - $this->startPos);
126
+ $cntOpen = substr_count($subBlob, "<");
127
+ $cntClose = substr_count($subBlob, "/>");
128
+ if ($cntOpen === $cntClose && $cntOpen === 1) {
129
+ $resultEndPositionInBlob = $len + strlen("/>");
130
+ break; // end while. so $endPositionInBlob correct now
131
+ }
132
+ }
133
+ return $resultEndPositionInBlob;
134
+ }
135
+
136
+ /**
137
+ * Search the blob for our unique node's closing tag
138
+ * @return bool|int Either returns the char position of the closing tag or false
139
+ */
140
+ protected function getClosingTagPos()
141
+ {
142
+ $endPositionInBlob = strpos($this->workingBlob, "</" . $this->options["uniqueNode"] . ">");
143
+ if ($endPositionInBlob === false) {
144
+
145
+ if (isset($this->options["checkShortClosing"]) && $this->options["checkShortClosing"] === true) {
146
+ $endPositionInBlob = $this->checkShortClosingTag($this->workingBlob, $this->startPos);
147
+ }
148
+
149
+ if ($endPositionInBlob === false) {
150
+ $this->hasSearchedUntilPos = strlen($this->workingBlob) - 1;
151
+ } else {
152
+ $this->shortClosedTagNow = true;
153
+ }
154
+ } else {
155
+ if (isset($this->options["checkShortClosing"]) && $this->options["checkShortClosing"] === true) {
156
+ $tmpEndPositionInBlob = $this->checkShortClosingTag(substr($this->workingBlob, 0, $endPositionInBlob), $this->startPos);
157
+ if ($tmpEndPositionInBlob !== false) {
158
+ $this->shortClosedTagNow = true;
159
+ $endPositionInBlob = $tmpEndPositionInBlob;
160
+ }
161
+ }
162
+ }
163
+
164
+ return $endPositionInBlob;
165
+ }
166
+
167
+ /**
168
+ * Set the start position in the workingBlob from where we should start reading when the closing tag is found
169
+ * @param int $startPositionInBlob Position of starting tag
170
+ */
171
+ protected function startSalvaging($startPositionInBlob)
172
+ {
173
+ $this->startPos = $startPositionInBlob;
174
+ }
175
+
176
+ /**
177
+ * Cut everything from the start position to the end position in the workingBlob (+ tag length) and flush it out for later return in getNodeFrom
178
+ * @param int $endPositionInBlob Position of the closing tag
179
+ */
180
+ protected function flush($endPositionInBlob) {
181
+ $endTagLen = $this->shortClosedTagNow ? 0 : strlen("</" . $this->options["uniqueNode"] . ">");
182
+ $realEndPosition = $endPositionInBlob + $endTagLen;
183
+ $this->flushed = substr($this->workingBlob, $this->startPos, $realEndPosition - $this->startPos);
184
+ $this->workingBlob = substr($this->workingBlob, $realEndPosition);
185
+ $this->hasSearchedUntilPos = 0;
186
+ $this->shortClosedTagNow = false;
187
+ }
188
+
189
+ /**
190
+ * Decides whether we're to fetch more chunks from the stream or keep working with what we have.
191
+ * @param StreamInterface $stream The stream provider
192
+ * @return bool Keep working?
193
+ */
194
+ protected function prepareChunk(StreamInterface $stream)
195
+ {
196
+ if ($this->hasSearchedUntilPos > -1 && $this->hasSearchedUntilPos < (strlen($this->workingBlob) - 1)) {
197
+ // More work to do
198
+ return true;
199
+ }
200
+
201
+ $chunk = $stream->getChunk();
202
+
203
+ if ($chunk === false) {
204
+ // EOF
205
+ if ($this->hasSearchedUntilPos === -1 && strlen($this->workingBlob) > 0) {
206
+ // EOF, but we haven't even started searching, special case that probably means we're dealing with a file of less size than the stream buffer
207
+ // Therefore, keep looping
208
+ return true;
209
+ }
210
+ return false;
211
+ } else {
212
+ // New chunk fetched
213
+
214
+ if ($this->nextAction === self::FIND_OPENING_TAG_ACTION && !$this->options["extractContainer"]) {
215
+ // Prevent a memory leak if we never find our first node, throw away our old stuff
216
+ // but keep some letters to not cut off a first node
217
+ $this->workingBlob = substr($this->workingBlob, -1 * strlen("<" . $this->options["uniqueNode"] . ">")) . $chunk;
218
+ } else {
219
+ $this->workingBlob .= $chunk;
220
+ }
221
+
222
+ return true;
223
+ }
224
+ }
225
+
226
+ /**
227
+ * Tries to retrieve the next node or returns false
228
+ * @param StreamInterface $stream The stream to use
229
+ * @return string|bool The next xml node or false if one could not be retrieved
230
+ */
231
+ public function getNodeFrom(StreamInterface $stream)
232
+ {
233
+ while ($this->prepareChunk($stream)) {
234
+ // What's our next course of action?
235
+ if ($this->nextAction === self::FIND_OPENING_TAG_ACTION) {
236
+ // Try to find an opening tag
237
+ $positionInBlob = $this->getOpeningTagPos();
238
+
239
+ if ($positionInBlob !== false) {
240
+
241
+ if ($this->options["extractContainer"] && $this->preCapture) {
242
+ $this->containerXml .= substr($this->workingBlob, 0, $positionInBlob);
243
+ $this->preCapture = false;
244
+ }
245
+
246
+
247
+ $this->startSalvaging($positionInBlob);
248
+
249
+ // The next course of action will be to find a closing tag
250
+ $this->nextAction = self::FIND_CLOSING_TAG_ACTION;
251
+ }
252
+ }
253
+
254
+ if ($this->nextAction === self::FIND_CLOSING_TAG_ACTION) {
255
+ // Try to find a closing tag
256
+ $positionInBlob = $this->getClosingTagPos();
257
+ if ($positionInBlob !== false) {
258
+ // We found it, we now have a full node to flush out
259
+ $this->flush($positionInBlob);
260
+
261
+ // The next course of action will be to find an opening tag
262
+ $this->nextAction = self::FIND_OPENING_TAG_ACTION;
263
+
264
+ // Get the flushed node and make way for the next node
265
+ $flushed = $this->flushed;
266
+ $this->flushed = "";
267
+
268
+ return $flushed;
269
+ }
270
+ }
271
+ }
272
+
273
+ if ($this->options["extractContainer"]) {
274
+ $this->containerXml .= $this->workingBlob;
275
+ }
276
+
277
+ return false;
278
+ }
279
+
280
+ /**
281
+ * Get the extracted container XML, if called before the whole stream is parsed, the XML returned can be invalid due to missing closing tags
282
+ * @return string XML string
283
+ * @throws Exception if the extractContainer option isn't true
284
+ */
285
+ public function getExtractedContainer()
286
+ {
287
+ if (!$this->options["extractContainer"]) {
288
+ throw new Exception("This method requires the 'extractContainer' option to be true");
289
+ }
290
+
291
+ return $this->containerXml;
292
+ }
293
+ }
application/vendor/XmlStringStreamer/ParserInterface.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * Modified version of XmlStringStreamer, edited namespaces only
5
+ * @author keywordrush.com <support@keywordrush.com>
6
+ * @copyright Copyright &copy; 2021 keywordrush.com
7
+ */
8
+
9
+ /**
10
+ * xml-string-streamer Parser interface
11
+ *
12
+ * @package xml-string-streamer
13
+ * @author Oskar Thornblad <oskar.thornblad@gmail.com>
14
+ */
15
+
16
+ namespace ContentEgg\application\vendor\XmlStringStreamer;
17
+
18
+ /**
19
+ * Interface describing a parser
20
+ */
21
+ interface ParserInterface
22
+ {
23
+ /**
24
+ * Parser contructor
25
+ * @param array $options An options array decided by the parser implementation
26
+ */
27
+ public function __construct(array $options = array());
28
+
29
+ /**
30
+ * Tries to retrieve the next node or returns false
31
+ * @param StreamInterface $stream The stream to use
32
+ * @return string|bool The next xml node or false if one could not be retrieved
33
+ */
34
+ public function getNodeFrom(StreamInterface $stream);
35
+
36
+ /**
37
+ * Get the extracted container XML, if called before the whole stream is parsed, the XML returned can be invalid due to missing closing tags
38
+ * @return string XML string
39
+ */
40
+ public function getExtractedContainer();
41
+ }
application/vendor/XmlStringStreamer/Stream/File.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php namespace ContentEgg\application\vendor\XmlStringStreamer\Stream;
2
+
3
+ use Exception;
4
+ use ContentEgg\application\vendor\XmlStringStreamer\StreamInterface;
5
+
6
+ class File implements StreamInterface
7
+ {
8
+ private $handle;
9
+ private $readBytes = 0;
10
+ private $chunkSize;
11
+ private $chunkCallback;
12
+
13
+ public function __construct($mixed, $chunkSize = 16384, $chunkCallback = null)
14
+ {
15
+ if (is_string($mixed)) {
16
+ // Treat as filename
17
+ if (!file_exists($mixed)) {
18
+ throw new \Exception("File '$mixed' doesn't exist");
19
+ }
20
+ $this->handle = fopen($mixed, "rb");
21
+ $this->handle;
22
+ } else if (get_resource_type($mixed) == "stream") {
23
+ // Treat as file handle
24
+ $this->handle = $mixed;
25
+ } else {
26
+ throw new \Exception("First argument must be either a filename or a file handle");
27
+ }
28
+
29
+ if ($this->handle === false) {
30
+ throw new \Exception("Couldn't create file handle");
31
+ }
32
+
33
+ $this->chunkSize = $chunkSize;
34
+ $this->chunkCallback = $chunkCallback;
35
+ }
36
+
37
+ public function __destruct() {
38
+ if (is_resource($this->handle)) {
39
+ fclose($this->handle);
40
+ }
41
+ }
42
+
43
+ public function getChunk()
44
+ {
45
+ if (is_resource($this->handle) && !feof($this->handle)) {
46
+ $buffer = fread($this->handle, $this->chunkSize);
47
+ $this->readBytes += strlen($buffer);
48
+
49
+ if (is_callable($this->chunkCallback)) {
50
+ call_user_func_array($this->chunkCallback, array($buffer, $this->readBytes));
51
+ }
52
+
53
+ return $buffer;
54
+ }
55
+
56
+ return false;
57
+ }
58
+
59
+ public function isSeekable()
60
+ {
61
+ $meta = stream_get_meta_data($this->handle);
62
+
63
+ return $meta["seekable"];
64
+ }
65
+
66
+ public function rewind()
67
+ {
68
+ if (!$this->isSeekable()) {
69
+ throw new Exception("Attempted to rewind an unseekable stream");
70
+ }
71
+
72
+ $this->readBytes = 0;
73
+ rewind($this->handle);
74
+ }
75
+ }
application/vendor/XmlStringStreamer/Stream/Stdin.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php namespace ContentEgg\application\vendor\XmlStringStreamer\Stream;
2
+
3
+ class Stdin extends File
4
+ {
5
+ public function __construct($chunkSize = 1024, $chunkCallback = null)
6
+ {
7
+ parent::__construct(fopen("php://stdin", "r"), $chunkSize, $chunkCallback);
8
+ }
9
+ }
application/vendor/XmlStringStreamer/StreamInterface.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * Modified version of XmlStringStreamer, edited namespaces only
5
+ * @author keywordrush.com <support@keywordrush.com>
6
+ * @copyright Copyright &copy; 2021 keywordrush.com
7
+ */
8
+
9
+ /**
10
+ * xml-string-streamer Stream interface
11
+ *
12
+ * @package xml-string-streamer
13
+ * @author Oskar Thornblad <oskar.thornblad@gmail.com>
14
+ */
15
+
16
+ namespace ContentEgg\application\vendor\XmlStringStreamer;
17
+
18
+ use Exception;
19
+
20
+ /**
21
+ * Interface describing a stream provider
22
+ */
23
+ interface StreamInterface
24
+ {
25
+ /**
26
+ * Gets the next chunk form the stream if one is available
27
+ * @return bool|string The next chunk if available, or false if not available
28
+ */
29
+ public function getChunk();
30
+
31
+ /**
32
+ * Is the stream seekable?
33
+ * @return bool
34
+ */
35
+ public function isSeekable();
36
+
37
+ /**
38
+ * Rewind the stream
39
+ * @return void
40
+ * @throws Exception if the stream isn't seekable
41
+ */
42
+ public function rewind();
43
+ }
application/vendor/XmlStringStreamer/XmlStringStreamer.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * Modified version of XmlStringStreamer, edited namespaces only
5
+ * @author keywordrush.com <support@keywordrush.com>
6
+ * @copyright Copyright &copy; 2021 keywordrush.com
7
+ */
8
+
9
+ /**
10
+ * xml-string-streamer base class
11
+ *
12
+ * @package xml-string-streamer
13
+ * @author Oskar Thornblad <oskar.thornblad@gmail.com>
14
+ */
15
+
16
+ namespace ContentEgg\application\vendor\XmlStringStreamer;
17
+
18
+ use ContentEgg\application\vendor\XmlStringStreamer\ParserInterface;
19
+ use ContentEgg\application\vendor\XmlStringStreamer\StreamInterface;
20
+ use ContentEgg\application\vendor\XmlStringStreamer\Parser;
21
+ use ContentEgg\application\vendor\XmlStringStreamer\Stream;
22
+
23
+ /**
24
+ * The base class for the xml-string-streamer
25
+ */
26
+ class XmlStringStreamer
27
+ {
28
+ /**
29
+ * The current parser
30
+ * @var ParserInterface
31
+ */
32
+ protected $parser;
33
+ /**
34
+ * The current stream
35
+ * @var StreamInterface
36
+ */
37
+ protected $stream;
38
+
39
+ /**
40
+ * Constructs the XML streamer
41
+ * @param ParserInterface $parser A parser with options set
42
+ * @param StreamInterface $stream A stream for the parser to use
43
+ */
44
+ public function __construct(ParserInterface $parser, StreamInterface $stream)
45
+ {
46
+ $this->parser = $parser;
47
+ $this->stream = $stream;
48
+ }
49
+
50
+ /**
51
+ * Convenience method for creating a StringWalker parser with a File stream
52
+ * @param string|resource $file File path or handle
53
+ * @param array $options Parser configuration
54
+ * @return XmlStringStreamer A streamer ready for use
55
+ */
56
+ public static function createStringWalkerParser($file, $options = array())
57
+ {
58
+ $stream = new Stream\File($file, 16384);
59
+ $parser = new Parser\StringWalker($options);
60
+ return new XmlStringStreamer($parser, $stream);
61
+ }
62
+
63
+ /**
64
+ * Convenience method for creating a UniqueNode parser with a File stream
65
+ * @param string|resource $file File path or handle
66
+ * @param array $options Parser configuration
67
+ * @return XmlStringStreamer A streamer ready for use
68
+ */
69
+ public static function createUniqueNodeParser($file, $options = array())
70
+ {
71
+ $stream = new Stream\File($file, 16384);
72
+ $parser = new Parser\UniqueNode($options);
73
+ return new XmlStringStreamer($parser, $stream);
74
+ }
75
+
76
+ /**
77
+ * Gets the next node from the parser
78
+ * @return bool|string The xml string or false
79
+ */
80
+ public function getNode()
81
+ {
82
+ return $this->parser->getNodeFrom($this->stream);
83
+ }
84
+ }
content-egg.php CHANGED
@@ -6,11 +6,11 @@ namespace ContentEgg;
6
  Plugin Name: Content Egg
7
  Plugin URI: https://www.keywordrush.com/contentegg
8
  Description: All in one solution for creating affiliate websites.
9
- Version: 5.2.1
10
  Author: keywordrush.com
11
  Author URI: https://www.keywordrush.com
12
  Text Domain: content-egg
13
- Domain Path: /languages
14
  */
15
 
16
  /*
@@ -18,7 +18,7 @@ namespace ContentEgg;
18
  */
19
 
20
  defined('\ABSPATH') || die('No direct script access allowed!');
21
-
22
  define(__NAMESPACE__ . '\NS', __NAMESPACE__ . '\\');
23
  define(NS . 'PLUGIN_PATH', \plugin_dir_path(__FILE__));
24
  define(NS . 'PLUGIN_FILE', __FILE__);
6
  Plugin Name: Content Egg
7
  Plugin URI: https://www.keywordrush.com/contentegg
8
  Description: All in one solution for creating affiliate websites.
9
+ Version: 5.3.0
10
  Author: keywordrush.com
11
  Author URI: https://www.keywordrush.com
12
  Text Domain: content-egg
13
+ Domain Path: /languages
14
  */
15
 
16
  /*
18
  */
19
 
20
  defined('\ABSPATH') || die('No direct script access allowed!');
21
+
22
  define(__NAMESPACE__ . '\NS', __NAMESPACE__ . '\\');
23
  define(NS . 'PLUGIN_PATH', \plugin_dir_path(__FILE__));
24
  define(NS . 'PLUGIN_FILE', __FILE__);
languages/content-egg.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the Content Egg<stripfree> Pro</stripfree> package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Content Egg<stripfree> Pro</stripfree> 8.9.0\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/content-egg\n"
7
- "POT-Creation-Date: 2021-05-07 08:37:55+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -12,11 +12,11 @@ msgstr ""
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
- #: application/Autoupdate.php:86
16
  msgid "New version of %s plugin."
17
  msgstr ""
18
 
19
- #: application/Autoupdate.php:87
20
  msgid ""
21
  "Please <a target=\"_blank\" href=\"%s\">find here</a> the releases notes."
22
  msgstr ""
@@ -81,7 +81,7 @@ msgstr ""
81
  #: application/PriceMoversWidget.php:99 application/PriceMoversWidget.php:100
82
  #: application/PriceMoversWidget.php:101 application/PriceMoversWidget.php:102
83
  #: application/PriceMoversWidget.php:103 application/PriceMoversWidget.php:104
84
- #: application/helpers/TemplateHelper.php:775
85
  msgid "%d days ago"
86
  msgstr ""
87
 
@@ -101,8 +101,8 @@ msgstr ""
101
  #: application/WooIntegrator.php:544
102
  #: application/templates/blocks/grid_row.php:43
103
  #: application/templates/blocks/item_row.php:37
104
- #: application/templates/blocks/list_row.php:33
105
- #: application/templates/data_list.php:25
106
  #: application/templates/data_price_tracker_alert.php:43
107
  #: templates/block_offers_logo.php:55 templates/block_price_comparison.php:44
108
  msgid "Last updated on %s"
@@ -220,7 +220,7 @@ msgstr ""
220
  msgid "user guide"
221
  msgstr ""
222
 
223
- #: application/admin/EggMetabox.php:91
224
  msgid "Configure and activate modules of Content Egg plugin"
225
  msgstr ""
226
 
@@ -265,7 +265,7 @@ msgstr ""
265
  msgid "Error."
266
  msgstr ""
267
 
268
- #: application/admin/GeneralConfig.php:37 application/admin/PluginAdmin.php:106
269
  msgid "Settings"
270
  msgstr ""
271
 
@@ -369,13 +369,13 @@ msgstr ""
369
 
370
  #: application/admin/GeneralConfig.php:216
371
  #: application/admin/views/_metabox_autoblog.php:415
372
- #: application/modules/Aliexpress2/Aliexpress2Config.php:152
373
  msgid "Minimum price"
374
  msgstr ""
375
 
376
  #: application/admin/GeneralConfig.php:217
377
  #: application/admin/views/_metabox_autoblog.php:416
378
- #: application/modules/Aliexpress2/Aliexpress2Config.php:142
379
  msgid "Maximum price"
380
  msgstr ""
381
 
@@ -494,7 +494,7 @@ msgid "How long save price history. 0 - deactivate price history."
494
  msgstr ""
495
 
496
  #: application/admin/GeneralConfig.php:301
497
- #: application/modules/Kelkoo/KelkooConfig.php:257
498
  msgid "The field \"%s\" can't be more than %d."
499
  msgstr ""
500
 
@@ -651,7 +651,7 @@ msgid "Coupon button text"
651
  msgstr ""
652
 
653
  #: application/admin/GeneralConfig.php:452
654
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:200
655
  msgid "Stock status"
656
  msgstr ""
657
 
@@ -766,18 +766,31 @@ msgstr ""
766
  msgid "Translation"
767
  msgstr ""
768
 
769
- #: application/admin/GeneralConfig.php:582
 
 
 
 
 
 
 
 
 
770
  msgid "Domain name"
771
  msgstr ""
772
 
773
- #: application/admin/GeneralConfig.php:585
774
  msgid "Logo URL"
775
  msgstr ""
776
 
777
- #: application/admin/GeneralConfig.php:642
778
  msgid "Translated string"
779
  msgstr ""
780
 
 
 
 
 
781
  #: application/admin/ImportExportController.php:28
782
  msgid "Import/Export"
783
  msgstr ""
@@ -845,7 +858,7 @@ msgstr ""
845
  msgid " ago"
846
  msgstr ""
847
 
848
- #: application/admin/PluginAdmin.php:92
849
  msgid "Are you sure?"
850
  msgstr ""
851
 
@@ -905,7 +918,7 @@ msgid "Go to"
905
  msgstr ""
906
 
907
  #: application/admin/ProductTable.php:79
908
- #: application/models/ProductModel.php:179
909
  #: application/modules/Awin/AwinConfig.php:66
910
  #: application/modules/Daisycon/DaisyconConfig.php:94
911
  #: application/modules/Impactradius/ImpactradiusConfig.php:101
@@ -913,7 +926,7 @@ msgid "In stock"
913
  msgstr ""
914
 
915
  #: application/admin/ProductTable.php:81
916
- #: application/models/ProductModel.php:180
917
  msgid "Out of stock"
918
  msgstr ""
919
 
@@ -926,7 +939,7 @@ msgid "Filter by module"
926
  msgstr ""
927
 
928
  #: application/admin/ProductTable.php:222
929
- #: application/modules/Aliexpress2/Aliexpress2Config.php:165
930
  #: application/modules/BingImages/BingImagesConfig.php:92
931
  #: application/modules/BingImages/BingImagesConfig.php:108
932
  #: application/modules/BingImages/BingImagesConfig.php:121
@@ -1129,8 +1142,7 @@ msgstr ""
1129
 
1130
  #: application/admin/views/_metabox_autoblog.php:211
1131
  msgid ""
1132
- "You can use \"formulas\" with synonyms, of which one will be selected with a "
1133
- "random option, for example, {Discount|Sale|Cheap}."
1134
  msgstr ""
1135
 
1136
  #: application/admin/views/_metabox_autoblog.php:218
@@ -1142,10 +1154,7 @@ msgid "You can use CE shortcodes like:"
1142
  msgstr ""
1143
 
1144
  #: application/admin/views/_metabox_autoblog.php:226
1145
- #: application/admin/views/_metabox_autoblog.php:436
1146
- #: application/admin/views/_metabox_autoblog.php:478
1147
- msgid ""
1148
- "\"Formulas\", and also all tags from title template, will also work here."
1149
  msgstr ""
1150
 
1151
  #: application/admin/views/_metabox_autoblog.php:233
@@ -1180,9 +1189,9 @@ msgstr ""
1180
 
1181
  #: application/admin/views/_metabox_autoblog.php:300
1182
  #: application/modules/Aliexpress/AliexpressConfig.php:89
1183
- #: application/modules/Aliexpress2/Aliexpress2Config.php:133
1184
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:89
1185
- #: application/modules/CjLinks/CjLinksConfig.php:135
1186
  #: application/modules/Clickbank/ClickbankConfig.php:69
1187
  #: application/modules/Ebay/EbayConfig.php:170
1188
  #: application/modules/Linkshare/LinkshareConfig.php:106
@@ -1295,6 +1304,11 @@ msgstr ""
1295
  msgid "Comma separated list of tags."
1296
  msgstr ""
1297
 
 
 
 
 
 
1298
  #: application/admin/views/_metabox_autoblog.php:443
1299
  #: application/modules/Ebay/EbayConfig.php:194
1300
  msgid "Product condition"
@@ -1307,16 +1321,16 @@ msgstr ""
1307
  #: application/modules/Amazon/AmazonConfig_FREE.php:196
1308
  #: application/modules/BingImages/BingImagesConfig.php:93
1309
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:154
1310
- #: application/modules/CjLinks/CjLinksConfig.php:98
1311
- #: application/modules/CjLinks/CjLinksConfig.php:122
1312
- #: application/modules/CjLinks/CjLinksConfig.php:139
1313
  #: application/modules/Clickbank/ClickbankConfig.php:133
1314
  #: application/modules/Envato/EnvatoConfig.php:135
1315
  #: application/modules/GoogleBooks/GoogleBooksConfig.php:112
1316
  #: application/modules/GoogleImages/GoogleImagesConfig.php:121
1317
  #: application/modules/GoogleImages/GoogleImagesConfig.php:134
1318
  #: application/modules/GoogleImages/GoogleImagesConfig.php:154
1319
- #: application/modules/Kelkoo/KelkooConfig.php:187
1320
  #: application/modules/TradedoublerCoupons/TradedoublerCouponsConfig.php:73
1321
  msgid "Any"
1322
  msgstr ""
@@ -1379,7 +1393,7 @@ msgid "Domain"
1379
  msgstr ""
1380
 
1381
  #: application/admin/views/_metabox_results.php:33
1382
- #: application/helpers/TemplateHelper.php:367
1383
  #: application/models/ProductModel.php:64
1384
  #: application/modules/GdeSlon/GdeSlonConfig.php:84
1385
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:90
@@ -1437,7 +1451,7 @@ msgstr ""
1437
  msgid "EAN:"
1438
  msgstr ""
1439
 
1440
- #: application/admin/views/_metabox_search_results.php:26
1441
  #: application/modules/CjLinks/views/search_results.php:17
1442
  msgid "Coupon code:"
1443
  msgstr ""
@@ -1464,28 +1478,17 @@ msgstr ""
1464
  msgid "Integration with Affiliate Egg"
1465
  msgstr ""
1466
 
1467
- #: application/admin/views/ae_integration.php:10
1468
- msgid ""
1469
- "You <a href=\"https://ce-docs.keywordrush.com/integrations/"
1470
- "affiliateeggintegration\">can activate</a> parsers of <a href=\"http://www."
1471
- "keywordrush.com/en/affiliateegg\">Affiliate Egg</a> as modules of Content "
1472
- "Egg."
1473
- msgstr ""
1474
-
1475
- #: application/admin/views/ae_integration.php:15
1476
- msgid ""
1477
- "Here is the <a href=\"http://www.keywordrush.com/res/ae_supported_shops.txt"
1478
- "\">full list</a> of Affiliate Egg supported shops."
1479
  msgstr ""
1480
 
1481
- #: application/admin/views/ae_integration.php:19
1482
- msgid "For first step make next actions:"
1483
  msgstr ""
1484
 
1485
- #: application/admin/views/ae_integration.php:21
1486
  msgid ""
1487
- "Install and activate <a href=\"https://www.keywordrush.com/affiliateegg"
1488
- "\">Affiliate Egg</a>"
1489
  msgstr ""
1490
 
1491
  #: application/admin/views/autoblog_edit.php:8
@@ -1912,11 +1915,11 @@ msgstr ""
1912
  msgid "Content Egg Settings"
1913
  msgstr ""
1914
 
1915
- #: application/components/AffiliateFeedParserModule.php:292
1916
  msgid "Product import is in progress"
1917
  msgstr ""
1918
 
1919
- #: application/components/AffiliateFeedParserModule.php:372
1920
  msgid ""
1921
  "Your data feed is too large and cannot be imported. Use a smaller feed or "
1922
  "increase <a target=\"_blank\" href=\"%s\">WP_MAX_MEMORY_LIMIT</a>."
@@ -1933,6 +1936,7 @@ msgstr ""
1933
  #: application/modules/Aliexpress2/Aliexpress2Config.php:68
1934
  #: application/modules/Amazon/AmazonConfig.php:88
1935
  #: application/modules/Amazon/AmazonConfig_FREE.php:84
 
1936
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:50
1937
  #: application/modules/Awin/AwinConfig.php:36
1938
  #: application/modules/BingImages/BingImagesConfig.php:38
@@ -1945,6 +1949,7 @@ msgstr ""
1945
  #: application/modules/Clickbank/ClickbankConfig.php:37
1946
  #: application/modules/Daisycon/DaisyconConfig.php:64
1947
  #: application/modules/Ebay/EbayConfig.php:120
 
1948
  #: application/modules/Envato/EnvatoConfig.php:58
1949
  #: application/modules/Flickr/FlickrConfig.php:37
1950
  #: application/modules/Flipkart/FlipkartConfig.php:72
@@ -1955,7 +1960,7 @@ msgstr ""
1955
  #: application/modules/GoogleImages/GoogleImagesConfig.php:60
1956
  #: application/modules/GoogleNews/GoogleNewsConfig.php:22
1957
  #: application/modules/Impactradius/ImpactradiusConfig.php:51
1958
- #: application/modules/Kelkoo/KelkooConfig.php:88
1959
  #: application/modules/Linkshare/LinkshareConfig.php:37
1960
  #: application/modules/Linkwise/LinkwiseConfig.php:59
1961
  #: application/modules/LomadeeCoupons/LomadeeCouponsConfig.php:36
@@ -1978,7 +1983,7 @@ msgstr ""
1978
  #: application/modules/TradedoublerCoupons/TradedoublerCouponsConfig.php:37
1979
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:37
1980
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:95
1981
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:106
1982
  #: application/modules/Twitter/TwitterConfig.php:82
1983
  #: application/modules/Udemy/UdemyConfig.php:66
1984
  #: application/modules/Viglink/ViglinkConfig.php:52
@@ -2000,6 +2005,7 @@ msgstr ""
2000
  #: application/modules/Aliexpress2/Aliexpress2Config.php:69
2001
  #: application/modules/Amazon/AmazonConfig.php:89
2002
  #: application/modules/Amazon/AmazonConfig_FREE.php:85
 
2003
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:51
2004
  #: application/modules/Awin/AwinConfig.php:37
2005
  #: application/modules/Bolcom/BolcomConfig.php:51
@@ -2009,11 +2015,12 @@ msgstr ""
2009
  #: application/modules/Clickbank/ClickbankConfig.php:38
2010
  #: application/modules/Daisycon/DaisyconConfig.php:65
2011
  #: application/modules/Ebay/EbayConfig.php:121
 
2012
  #: application/modules/Envato/EnvatoConfig.php:59
2013
  #: application/modules/Flipkart/FlipkartConfig.php:73
2014
  #: application/modules/GdeSlon/GdeSlonConfig.php:48
2015
  #: application/modules/Impactradius/ImpactradiusConfig.php:52
2016
- #: application/modules/Kelkoo/KelkooConfig.php:89
2017
  #: application/modules/Linkshare/LinkshareConfig.php:38
2018
  #: application/modules/Linkwise/LinkwiseConfig.php:60
2019
  #: application/modules/LomadeeCoupons/LomadeeCouponsConfig.php:37
@@ -2027,7 +2034,7 @@ msgstr ""
2027
  #: application/modules/TradedoublerCoupons/TradedoublerCouponsConfig.php:38
2028
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:38
2029
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:96
2030
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:107
2031
  #: application/modules/Udemy/UdemyConfig.php:67
2032
  #: application/modules/Viglink/ViglinkConfig.php:53
2033
  #: application/modules/Walmart/WalmartConfig.php:49
@@ -2049,6 +2056,8 @@ msgstr ""
2049
  #: application/modules/Bolcom/BolcomConfig.php:75
2050
  #: application/modules/Daisycon/DaisyconConfig.php:74
2051
  #: application/modules/Daisycon/DaisyconConfig.php:89
 
 
2052
  #: application/modules/Envato/EnvatoConfig.php:68
2053
  #: application/modules/Envato/EnvatoConfig.php:83
2054
  #: application/modules/GoogleImages/GoogleImagesConfig.php:60
@@ -2056,8 +2065,8 @@ msgstr ""
2056
  #: application/modules/GoogleImages/GoogleImagesConfig.php:80
2057
  #: application/modules/Impactradius/ImpactradiusConfig.php:61
2058
  #: application/modules/Impactradius/ImpactradiusConfig.php:76
2059
- #: application/modules/Kelkoo/KelkooConfig.php:98
2060
- #: application/modules/Kelkoo/KelkooConfig.php:113
2061
  #: application/modules/Linkwise/LinkwiseConfig.php:69
2062
  #: application/modules/Linkwise/LinkwiseConfig.php:84
2063
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:46
@@ -2079,12 +2088,13 @@ msgstr ""
2079
 
2080
  #: application/components/AffiliateFeedParserModuleConfig.php:35
2081
  #: application/modules/Amazon/AmazonConfig.php:105
 
2082
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:65
2083
  #: application/modules/Awin/AwinConfig.php:51
2084
  #: application/modules/Bolcom/BolcomConfig.php:65
2085
  #: application/modules/Daisycon/DaisyconConfig.php:79
2086
  #: application/modules/GoogleImages/GoogleImagesConfig.php:70
2087
- #: application/modules/Kelkoo/KelkooConfig.php:103
2088
  #: application/modules/Linkwise/LinkwiseConfig.php:74
2089
  #: application/modules/LomadeeCoupons/LomadeeCouponsConfig.php:47
2090
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:51
@@ -2103,6 +2113,7 @@ msgstr ""
2103
  #: application/modules/Aliexpress2/Aliexpress2Config.php:84
2104
  #: application/modules/Amazon/AmazonConfig.php:106
2105
  #: application/modules/Amazon/AmazonConfig_FREE.php:102
 
2106
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:66
2107
  #: application/modules/Awin/AwinConfig.php:52
2108
  #: application/modules/Bolcom/BolcomConfig.php:66
@@ -2112,11 +2123,12 @@ msgstr ""
2112
  #: application/modules/Clickbank/ClickbankConfig.php:54
2113
  #: application/modules/Daisycon/DaisyconConfig.php:80
2114
  #: application/modules/Ebay/EbayConfig.php:137
 
2115
  #: application/modules/Envato/EnvatoConfig.php:74
2116
  #: application/modules/Flipkart/FlipkartConfig.php:89
2117
  #: application/modules/GdeSlon/GdeSlonConfig.php:64
2118
  #: application/modules/Impactradius/ImpactradiusConfig.php:67
2119
- #: application/modules/Kelkoo/KelkooConfig.php:104
2120
  #: application/modules/Linkshare/LinkshareConfig.php:49
2121
  #: application/modules/Linkwise/LinkwiseConfig.php:75
2122
  #: application/modules/LomadeeCoupons/LomadeeCouponsConfig.php:48
@@ -2130,7 +2142,7 @@ msgstr ""
2130
  #: application/modules/TradedoublerCoupons/TradedoublerCouponsConfig.php:49
2131
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:49
2132
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:107
2133
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:118
2134
  #: application/modules/Udemy/UdemyConfig.php:82
2135
  #: application/modules/Viglink/ViglinkConfig.php:63
2136
  #: application/modules/Walmart/WalmartConfig.php:64
@@ -2159,9 +2171,10 @@ msgstr ""
2159
  #: application/modules/Affiliatewindow/AffiliatewindowConfig.php:130
2160
  #: application/modules/AffilinetProducts/AffilinetProductsConfig.php:167
2161
  #: application/modules/Aliexpress/AliexpressConfig.php:260
2162
- #: application/modules/Aliexpress2/Aliexpress2Config.php:214
2163
  #: application/modules/Amazon/AmazonConfig.php:303
2164
  #: application/modules/Amazon/AmazonConfig_FREE.php:274
 
2165
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:218
2166
  #: application/modules/Awin/AwinConfig.php:81
2167
  #: application/modules/BingImages/BingImagesConfig.php:207
@@ -2171,6 +2184,7 @@ msgstr ""
2171
  #: application/modules/Coupon/CouponConfig.php:22
2172
  #: application/modules/Daisycon/DaisyconConfig.php:101
2173
  #: application/modules/Ebay/EbayConfig.php:381
 
2174
  #: application/modules/Envato/EnvatoConfig.php:219
2175
  #: application/modules/Flickr/FlickrConfig.php:106
2176
  #: application/modules/Flipkart/FlipkartConfig.php:104
@@ -2180,7 +2194,7 @@ msgstr ""
2180
  #: application/modules/GoogleImages/GoogleImagesConfig.php:186
2181
  #: application/modules/GoogleNews/GoogleNewsConfig.php:54
2182
  #: application/modules/Impactradius/ImpactradiusConfig.php:109
2183
- #: application/modules/Kelkoo/KelkooConfig.php:237
2184
  #: application/modules/Linkshare/LinkshareConfig.php:122
2185
  #: application/modules/Linkwise/LinkwiseConfig.php:204
2186
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:95
@@ -2195,7 +2209,7 @@ msgstr ""
2195
  #: application/modules/Shareasale/ShareasaleConfig.php:109
2196
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:159
2197
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:171
2198
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:182
2199
  #: application/modules/Twitter/TwitterConfig.php:127
2200
  #: application/modules/Udemy/UdemyConfig.php:215
2201
  #: application/modules/Viglink/ViglinkConfig.php:141
@@ -2220,6 +2234,7 @@ msgstr ""
2220
  #: application/modules/Coupon/CouponConfig.php:23
2221
  #: application/modules/Daisycon/DaisyconConfig.php:102
2222
  #: application/modules/Ebay/EbayConfig.php:382
 
2223
  #: application/modules/Envato/EnvatoConfig.php:220
2224
  #: application/modules/Flickr/FlickrConfig.php:107
2225
  #: application/modules/Flipkart/FlipkartConfig.php:105
@@ -2229,7 +2244,7 @@ msgstr ""
2229
  #: application/modules/GoogleImages/GoogleImagesConfig.php:187
2230
  #: application/modules/GoogleNews/GoogleNewsConfig.php:55
2231
  #: application/modules/Impactradius/ImpactradiusConfig.php:110
2232
- #: application/modules/Kelkoo/KelkooConfig.php:238
2233
  #: application/modules/Linkshare/LinkshareConfig.php:123
2234
  #: application/modules/Linkwise/LinkwiseConfig.php:205
2235
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:96
@@ -2243,7 +2258,7 @@ msgstr ""
2243
  #: application/modules/Shareasale/ShareasaleConfig.php:110
2244
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:160
2245
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:172
2246
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:183
2247
  #: application/modules/Twitter/TwitterConfig.php:128
2248
  #: application/modules/Udemy/UdemyConfig.php:216
2249
  #: application/modules/Viglink/ViglinkConfig.php:142
@@ -2253,7 +2268,7 @@ msgstr ""
2253
  msgid "Save images on server"
2254
  msgstr ""
2255
 
2256
- #: application/components/AffiliateFeedParserModuleConfig.php:66
2257
  #: application/components/AffiliateParserModuleConfig.php:52
2258
  msgid "Cron"
2259
  msgstr ""
@@ -2265,7 +2280,7 @@ msgid ""
2265
  msgstr ""
2266
 
2267
  #: application/components/AffiliateParserModuleConfig.php:35
2268
- #: application/modules/Kelkoo/KelkooConfig.php:257
2269
  msgid "Price update"
2270
  msgstr ""
2271
 
@@ -2447,19 +2462,19 @@ msgstr ""
2447
  msgid "Make links with local 301 redirect"
2448
  msgstr ""
2449
 
2450
- #: application/helpers/TemplateHelper.php:771
2451
  msgid "today"
2452
  msgstr ""
2453
 
2454
- #: application/helpers/TemplateHelper.php:777
2455
  msgid "%d day ago"
2456
  msgstr ""
2457
 
2458
- #: application/helpers/TemplateHelper.php:884
2459
  msgid "in stock"
2460
  msgstr ""
2461
 
2462
- #: application/helpers/TemplateHelper.php:886
2463
  msgid "out of stock"
2464
  msgstr ""
2465
 
@@ -2505,7 +2520,7 @@ msgstr ""
2505
  msgid "Stock"
2506
  msgstr ""
2507
 
2508
- #: application/models/ProductModel.php:181
2509
  msgid "Unknown"
2510
  msgstr ""
2511
 
@@ -2529,6 +2544,8 @@ msgstr ""
2529
  #: application/modules/Amazon/AmazonConfig.php:116
2530
  #: application/modules/Amazon/AmazonConfig_FREE.php:95
2531
  #: application/modules/Amazon/AmazonConfig_FREE.php:112
 
 
2532
  #: application/modules/Clickbank/ClickbankConfig.php:47
2533
  #: application/modules/Clickbank/ClickbankConfig.php:63
2534
  #: application/modules/RssFetcher/RssFetcherConfig.php:47
@@ -2551,6 +2568,7 @@ msgstr ""
2551
  #: application/modules/CjProducts/CjProductsConfig.php:74
2552
  #: application/modules/Clickbank/ClickbankConfig.php:53
2553
  #: application/modules/Ebay/EbayConfig.php:136
 
2554
  #: application/modules/Envato/EnvatoConfig.php:73
2555
  #: application/modules/Flipkart/FlipkartConfig.php:88
2556
  #: application/modules/GdeSlon/GdeSlonConfig.php:63
@@ -2564,7 +2582,7 @@ msgstr ""
2564
  #: application/modules/TradedoublerCoupons/TradedoublerCouponsConfig.php:48
2565
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:48
2566
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:106
2567
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:117
2568
  #: application/modules/Udemy/UdemyConfig.php:81
2569
  #: application/modules/Viglink/ViglinkConfig.php:62
2570
  #: application/modules/Walmart/WalmartConfig.php:63
@@ -2589,32 +2607,38 @@ msgstr ""
2589
  #: application/modules/AE/AEConfig.php:78
2590
  #: application/modules/Amazon/AmazonConfig.php:311
2591
  #: application/modules/Amazon/AmazonConfig_FREE.php:281
 
2592
  msgid "Small logos"
2593
  msgstr ""
2594
 
2595
  #: application/modules/AE/AEConfig.php:81
2596
  #: application/modules/Amazon/AmazonConfig.php:316
2597
  #: application/modules/Amazon/AmazonConfig_FREE.php:282
 
2598
  msgid "Show small logos"
2599
  msgstr ""
2600
 
2601
  #: application/modules/AE/AEConfig.php:82
2602
  #: application/modules/Amazon/AmazonConfig.php:317
 
2603
  msgid "Hide small logos"
2604
  msgstr ""
2605
 
2606
  #: application/modules/AE/AEConfig.php:87
2607
  #: application/modules/Amazon/AmazonConfig.php:322
 
2608
  msgid "Large logos"
2609
  msgstr ""
2610
 
2611
  #: application/modules/AE/AEConfig.php:90
2612
  #: application/modules/Amazon/AmazonConfig.php:325
 
2613
  msgid "Show large logos"
2614
  msgstr ""
2615
 
2616
  #: application/modules/AE/AEConfig.php:91
2617
  #: application/modules/Amazon/AmazonConfig.php:326
 
2618
  msgid "Hide large logos"
2619
  msgstr ""
2620
 
@@ -2734,8 +2758,9 @@ msgstr ""
2734
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:169
2735
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:130
2736
  #: application/modules/Ebay/EbayConfig.php:316
 
2737
  #: application/modules/Impactradius/ImpactradiusConfig.php:81
2738
- #: application/modules/Kelkoo/KelkooConfig.php:163
2739
  #: application/modules/Linkwise/LinkwiseConfig.php:143
2740
  #: application/modules/Optimisemedia/OptimisemediaConfig.php:138
2741
  #: application/modules/PayTM/PayTMConfig.php:71
@@ -2751,8 +2776,9 @@ msgstr ""
2751
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:179
2752
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:140
2753
  #: application/modules/Ebay/EbayConfig.php:306
 
2754
  #: application/modules/Impactradius/ImpactradiusConfig.php:91
2755
- #: application/modules/Kelkoo/KelkooConfig.php:173
2756
  #: application/modules/Linkwise/LinkwiseConfig.php:153
2757
  #: application/modules/Optimisemedia/OptimisemediaConfig.php:148
2758
  #: application/modules/PayTM/PayTMConfig.php:81
@@ -2777,7 +2803,7 @@ msgstr ""
2777
  #: application/modules/GoogleBooks/GoogleBooksConfig.php:86
2778
  #: application/modules/GoogleNews/GoogleNewsConfig.php:61
2779
  #: application/modules/Impactradius/ImpactradiusConfig.php:116
2780
- #: application/modules/Kelkoo/KelkooConfig.php:226
2781
  #: application/modules/Linkshare/LinkshareConfig.php:129
2782
  #: application/modules/Linkwise/LinkwiseConfig.php:182
2783
  #: application/modules/Optimisemedia/OptimisemediaConfig.php:172
@@ -2786,7 +2812,7 @@ msgstr ""
2786
  #: application/modules/Pepperjam/PepperjamConfig.php:148
2787
  #: application/modules/Shareasale/ShareasaleConfig.php:116
2788
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:166
2789
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:189
2790
  #: application/modules/VkNews/VkNewsConfig.php:51
2791
  #: application/modules/Walmart/WalmartConfig.php:142
2792
  #: application/modules/Youtube/YoutubeConfig.php:87
@@ -2810,7 +2836,6 @@ msgstr ""
2810
  #: application/modules/GoogleBooks/GoogleBooksConfig.php:87
2811
  #: application/modules/GoogleNews/GoogleNewsConfig.php:62
2812
  #: application/modules/Impactradius/ImpactradiusConfig.php:117
2813
- #: application/modules/Kelkoo/KelkooConfig.php:227
2814
  #: application/modules/Linkshare/LinkshareConfig.php:130
2815
  #: application/modules/Linkwise/LinkwiseConfig.php:183
2816
  #: application/modules/Optimisemedia/OptimisemediaConfig.php:173
@@ -2819,7 +2844,7 @@ msgstr ""
2819
  #: application/modules/Pepperjam/PepperjamConfig.php:149
2820
  #: application/modules/Shareasale/ShareasaleConfig.php:117
2821
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:167
2822
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:190
2823
  #: application/modules/VkNews/VkNewsConfig.php:52
2824
  #: application/modules/Walmart/WalmartConfig.php:143
2825
  #: application/modules/Youtube/YoutubeConfig.php:88
@@ -2862,8 +2887,10 @@ msgstr ""
2862
  #: application/modules/Bolcom/views/update_panel.php:2
2863
  #: application/modules/Daisycon/views/search_panel.php:2
2864
  #: application/modules/Daisycon/views/update_panel.php:2
2865
- #: application/modules/Ebay/views/search_panel.php:2
2866
  #: application/modules/Ebay/views/update_panel.php:2
 
 
2867
  #: application/modules/Feed/views/search_panel.php:2
2868
  #: application/modules/Feed/views/update_panel.php:2
2869
  #: application/modules/Impactradius/views/search_panel.php:2
@@ -2902,8 +2929,10 @@ msgstr ""
2902
  #: application/modules/Bolcom/views/update_panel.php:3
2903
  #: application/modules/Daisycon/views/search_panel.php:3
2904
  #: application/modules/Daisycon/views/update_panel.php:3
2905
- #: application/modules/Ebay/views/search_panel.php:3
2906
  #: application/modules/Ebay/views/update_panel.php:3
 
 
2907
  #: application/modules/Feed/views/search_panel.php:3
2908
  #: application/modules/Feed/views/update_panel.php:3
2909
  #: application/modules/Impactradius/views/search_panel.php:3
@@ -2945,14 +2974,14 @@ msgstr ""
2945
 
2946
  #: application/modules/Affiliatewindow/AffiliatewindowConfig.php:61
2947
  #: application/modules/Aliexpress/AliexpressConfig.php:232
2948
- #: application/modules/Aliexpress2/Aliexpress2Config.php:172
2949
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:190
2950
  #: application/modules/Clickbank/ClickbankConfig.php:102
2951
  #: application/modules/Ebay/EbayConfig.php:152
 
2952
  #: application/modules/Flickr/FlickrConfig.php:59
2953
  #: application/modules/GdeSlon/GdeSlonConfig.php:79
2954
  #: application/modules/GoogleBooks/GoogleBooksConfig.php:97
2955
- #: application/modules/Kelkoo/KelkooConfig.php:118
2956
  #: application/modules/Linkshare/LinkshareConfig.php:81
2957
  #: application/modules/Ozon/OzonConfig.php:64
2958
  #: application/modules/PayTM/PayTMConfig.php:91
@@ -2966,13 +2995,13 @@ msgstr ""
2966
  #: application/modules/Affiliatewindow/AffiliatewindowConfig.php:65
2967
  #: application/modules/Affiliatewindow/AffiliatewindowConfig.php:105
2968
  #: application/modules/Aliexpress/AliexpressConfig.php:236
2969
- #: application/modules/Aliexpress2/Aliexpress2Config.php:176
2970
  #: application/modules/Bolcom/BolcomConfig.php:149
2971
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:194
2972
  #: application/modules/Envato/EnvatoConfig.php:157
2973
  #: application/modules/Envato/EnvatoConfig.php:175
2974
  #: application/modules/GdeSlon/GdeSlonConfig.php:83
2975
- #: application/modules/Kelkoo/KelkooConfig.php:134
2976
  #: application/modules/Linkshare/LinkshareConfig.php:85
2977
  #: application/modules/PayTM/PayTMConfig.php:95
2978
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:149
@@ -3067,12 +3096,12 @@ msgid "The \"Results\" can not be more than 40."
3067
  msgstr ""
3068
 
3069
  #: application/modules/Aliexpress/AliexpressConfig.php:90
3070
- #: application/modules/Aliexpress2/Aliexpress2Config.php:134
3071
  msgid "Limit the search of goods by this category."
3072
  msgstr ""
3073
 
3074
  #: application/modules/Aliexpress/AliexpressConfig.php:93
3075
- #: application/modules/Aliexpress2/Aliexpress2Config.php:137
3076
  #: application/modules/Pepperjam/PepperjamConfig.php:101
3077
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:63
3078
  #: application/modules/Udemy/UdemyConfig.php:125
@@ -3095,7 +3124,7 @@ msgid "Currency"
3095
  msgstr ""
3096
 
3097
  #: application/modules/Aliexpress/AliexpressConfig.php:157
3098
- #: application/modules/Aliexpress2/Aliexpress2Config.php:124
3099
  #: application/modules/Clickbank/ClickbankConfig.php:129
3100
  #: application/modules/Udemy/UdemyConfig.php:96
3101
  msgid "Language"
@@ -3183,6 +3212,7 @@ msgstr ""
3183
  #: application/modules/Bolcom/views/update_panel.php:2
3184
  #: application/modules/Daisycon/views/update_panel.php:2
3185
  #: application/modules/Ebay/views/update_panel.php:2
 
3186
  #: application/modules/Feed/views/update_panel.php:2
3187
  #: application/modules/Kelkoo/views/update_panel.php:2
3188
  #: application/modules/Linkwise/views/update_panel.php:2
@@ -3201,6 +3231,7 @@ msgstr ""
3201
  #: application/modules/Bolcom/views/update_panel.php:3
3202
  #: application/modules/Daisycon/views/update_panel.php:3
3203
  #: application/modules/Ebay/views/update_panel.php:3
 
3204
  #: application/modules/Feed/views/update_panel.php:3
3205
  #: application/modules/Kelkoo/views/update_panel.php:3
3206
  #: application/modules/Linkwise/views/update_panel.php:3
@@ -3235,35 +3266,35 @@ msgid ""
3235
  "target=\"_blank\" href=\"%s\">here</a>."
3236
  msgstr ""
3237
 
3238
- #: application/modules/Aliexpress2/Aliexpress2Config.php:143
3239
  msgid "The price must be set in USD. Example: 99"
3240
  msgstr ""
3241
 
3242
- #: application/modules/Aliexpress2/Aliexpress2Config.php:153
3243
  msgid "The price must be set in USD. Example: 10"
3244
  msgstr ""
3245
 
3246
- #: application/modules/Aliexpress2/Aliexpress2Config.php:162
3247
  msgid "Platform"
3248
  msgstr ""
3249
 
3250
- #: application/modules/Aliexpress2/Aliexpress2Config.php:177
3251
  msgid "Price ASC"
3252
  msgstr ""
3253
 
3254
- #: application/modules/Aliexpress2/Aliexpress2Config.php:178
3255
  msgid "Price DESC"
3256
  msgstr ""
3257
 
3258
- #: application/modules/Aliexpress2/Aliexpress2Config.php:179
3259
  msgid "Volume ASC"
3260
  msgstr ""
3261
 
3262
- #: application/modules/Aliexpress2/Aliexpress2Config.php:180
3263
  msgid "Volume DESC"
3264
  msgstr ""
3265
 
3266
- #: application/modules/Aliexpress2/Aliexpress2Config.php:215
3267
  msgid "Save images locally"
3268
  msgstr ""
3269
 
@@ -3295,10 +3326,12 @@ msgstr ""
3295
 
3296
  #: application/modules/Amazon/AmazonConfig.php:58
3297
  #: application/modules/Amazon/AmazonConfig_FREE.php:53
 
3298
  msgid "Default Associate Tag"
3299
  msgstr ""
3300
 
3301
  #: application/modules/Amazon/AmazonConfig.php:59
 
3302
  msgid ""
3303
  "An alphanumeric token that uniquely identifies you as an Associate. To "
3304
  "obtain an Associate Tag, refer to <a target=\"_blank\" href=\"https://"
@@ -3308,15 +3341,19 @@ msgstr ""
3308
 
3309
  #: application/modules/Amazon/AmazonConfig.php:67
3310
  #: application/modules/Amazon/AmazonConfig_FREE.php:62
 
3311
  msgid "The \"Tracking ID\" can not be empty."
3312
  msgstr ""
3313
 
3314
  #: application/modules/Amazon/AmazonConfig.php:73
3315
  #: application/modules/Amazon/AmazonConfig_FREE.php:76
 
 
3316
  msgid "Default locale"
3317
  msgstr ""
3318
 
3319
  #: application/modules/Amazon/AmazonConfig.php:74
 
3320
  msgid ""
3321
  "Your Amazon Associates tag works only in the locale in which you register. "
3322
  "If you want to be an Amazon Associate in more than one locale, you must "
@@ -3336,20 +3373,24 @@ msgstr ""
3336
  #: application/modules/Amazon/AmazonConfig.php:90
3337
  #: application/modules/Amazon/AmazonConfig_FREE.php:86
3338
  #: application/modules/Amazon/AmazonConfig_FREE.php:103
 
3339
  msgid "It needs a bit more time to get more than 10 results in one request"
3340
  msgstr ""
3341
 
3342
  #: application/modules/Amazon/AmazonConfig.php:107
 
3343
  msgid "It needs a bit more time to get more than 10 results in one request."
3344
  msgstr ""
3345
 
3346
  #: application/modules/Amazon/AmazonConfig.php:122
3347
  #: application/modules/Amazon/AmazonConfig_FREE.php:118
 
3348
  msgid "Link type"
3349
  msgstr ""
3350
 
3351
  #: application/modules/Amazon/AmazonConfig.php:123
3352
  #: application/modules/Amazon/AmazonConfig_FREE.php:119
 
3353
  msgid ""
3354
  "Type of partner links. Know more about amazon <a target=\"_blank\" href="
3355
  "\"https://affiliate-program.amazon.com/gp/associates/help/t2/a11\">90 day "
@@ -3446,6 +3487,7 @@ msgid ""
3446
  msgstr ""
3447
 
3448
  #: application/modules/Amazon/AmazonConfig.php:229
 
3449
  msgid "Condition"
3450
  msgstr ""
3451
 
@@ -3505,6 +3547,7 @@ msgstr ""
3505
 
3506
  #: application/modules/Amazon/AmazonConfig.php:269
3507
  #: application/modules/Ebay/EbayConfig.php:238
 
3508
  msgid "Free Shipping"
3509
  msgstr ""
3510
 
@@ -3550,16 +3593,20 @@ msgid ""
3550
  msgstr ""
3551
 
3552
  #: application/modules/Amazon/AmazonConfig.php:304
 
3553
  msgid "Save images to local server"
3554
  msgstr ""
3555
 
3556
  #: application/modules/Amazon/AmazonConfig.php:305
3557
  #: application/modules/Amazon/AmazonConfig.php:313
 
 
3558
  msgid "Enabling this option may violate API rules."
3559
  msgstr ""
3560
 
3561
  #: application/modules/Amazon/AmazonConfig.php:314
3562
  #: application/modules/Amazon/AmazonConfig_FREE.php:282
 
3563
  msgid ""
3564
  "Read more: <a target=\"_blank\" href=\"%s\">Amazon brand usage guidelines</"
3565
  "a>."
@@ -3567,11 +3614,13 @@ msgstr ""
3567
 
3568
  #: application/modules/Amazon/AmazonConfig.php:335
3569
  #: application/modules/Amazon/AmazonConfig_FREE.php:292
 
3570
  msgid "Associate Tag for %s locale"
3571
  msgstr ""
3572
 
3573
  #: application/modules/Amazon/AmazonConfig.php:336
3574
  #: application/modules/Amazon/AmazonConfig_FREE.php:293
 
3575
  msgid ""
3576
  "Type here your tracking ID for this locale if you need multiple locale "
3577
  "parsing"
@@ -3683,14 +3732,14 @@ msgstr ""
3683
 
3684
  #: application/modules/Amazon/AmazonConfig_FREE.php:173
3685
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:170
3686
- #: application/modules/Kelkoo/KelkooConfig.php:164
3687
  #: application/modules/Linkwise/LinkwiseConfig.php:144
3688
  msgid "Example, 8.99"
3689
  msgstr ""
3690
 
3691
  #: application/modules/Amazon/AmazonConfig_FREE.php:183
3692
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:180
3693
- #: application/modules/Kelkoo/KelkooConfig.php:174
3694
  #: application/modules/Linkwise/LinkwiseConfig.php:154
3695
  msgid "Example, 98.50"
3696
  msgstr ""
@@ -3786,10 +3835,10 @@ msgstr ""
3786
 
3787
  #: application/modules/Amazon/templates/data_compare.php:98
3788
  #: application/modules/Ozon/templates/data_compare.php:78
3789
- #: application/templates/blocks/item_row.php:55
3790
- #: application/templates/blocks/list_row.php:53
3791
  #: application/templates/data_price_tracker_alert.php:48
3792
- #: templates/block_offers_logo.php:75 templates/wdgt_price_movers_grid.php:72
3793
  #: templates/wdgt_price_movers_list.php:48
3794
  msgid "as of %s"
3795
  msgstr ""
@@ -3892,17 +3941,18 @@ msgstr ""
3892
  #: application/modules/Daisycon/DaisyconConfig.php:32
3893
  #: application/modules/Ebay/EbayConfig.php:31
3894
  #: application/modules/Ebay/EbayConfig.php:46
 
 
3895
  #: application/modules/Envato/EnvatoConfig.php:31
3896
  #: application/modules/Feed/FeedConfig.php:35
3897
  #: application/modules/Feed/FeedConfig.php:54
3898
- #: application/modules/Feed/FeedConfig.php:96
3899
  #: application/modules/GoogleImages/GoogleImagesConfig.php:31
3900
  #: application/modules/GoogleImages/GoogleImagesConfig.php:45
3901
  #: application/modules/Impactradius/ImpactradiusConfig.php:32
3902
  #: application/modules/Impactradius/ImpactradiusConfig.php:46
3903
  #: application/modules/Kelkoo/KelkooConfig.php:31
3904
- #: application/modules/Kelkoo/KelkooConfig.php:45
3905
- #: application/modules/Kelkoo/KelkooConfig.php:83
3906
  #: application/modules/Linkwise/LinkwiseConfig.php:31
3907
  #: application/modules/Linkwise/LinkwiseConfig.php:45
3908
  #: application/modules/LomadeeCoupons/LomadeeCouponsConfig.php:31
@@ -3914,9 +3964,9 @@ msgstr ""
3914
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:31
3915
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:45
3916
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:60
3917
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:33
3918
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:47
3919
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:62
3920
  #: application/modules/Udemy/UdemyConfig.php:31
3921
  #: application/modules/Udemy/UdemyConfig.php:46
3922
  #: application/modules/Viglink/ViglinkConfig.php:33
@@ -4096,10 +4146,10 @@ msgstr ""
4096
  #: application/modules/Daisycon/DaisyconModule.php:31
4097
  #: application/modules/GdeSlon/GdeSlonModule.php:31
4098
  #: application/modules/Impactradius/ImpactradiusModule.php:29
4099
- #: application/modules/Kelkoo/KelkooModule.php:30
4100
  #: application/modules/Pepperjam/PepperjamModule.php:29
4101
  #: application/modules/TradetrackerProducts/TradetrackerProductsModule.php:28
4102
- #: application/modules/Walmart/WalmartModule.php:35
4103
  msgid "Adds products from %s."
4104
  msgstr ""
4105
 
@@ -4467,7 +4517,7 @@ msgid ""
4467
  msgstr ""
4468
 
4469
  #: application/modules/Bolcom/BolcomConfig.php:81
4470
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:69
4471
  msgid "SubID is a parameter that allows for the tracking of sales separately."
4472
  msgstr ""
4473
 
@@ -4512,13 +4562,11 @@ msgid "Sales ranking descending"
4512
  msgstr ""
4513
 
4514
  #: application/modules/Bolcom/BolcomConfig.php:152
4515
- #: application/modules/Kelkoo/KelkooConfig.php:122
4516
  #: application/modules/Ozon/OzonConfig.php:82
4517
  msgid "Price ascending"
4518
  msgstr ""
4519
 
4520
  #: application/modules/Bolcom/BolcomConfig.php:153
4521
- #: application/modules/Kelkoo/KelkooConfig.php:123
4522
  #: application/modules/Ozon/OzonConfig.php:83
4523
  msgid "Price descending"
4524
  msgstr ""
@@ -4732,6 +4780,18 @@ msgstr ""
4732
  msgid "Advertisers"
4733
  msgstr ""
4734
 
 
 
 
 
 
 
 
 
 
 
 
 
4735
  #: application/modules/CjLinks/CjLinksModule.php:28
4736
  msgid ""
4737
  "Adds text links, coupons, banners from CJ.com. You must have approval from "
@@ -4896,11 +4956,15 @@ msgstr ""
4896
 
4897
  #: application/modules/Ebay/EbayConfig.php:23
4898
  #: application/modules/Ebay/EbayConfig.php:38
 
 
4899
  msgid "Your application's OAuth credentials."
4900
  msgstr ""
4901
 
4902
  #: application/modules/Ebay/EbayConfig.php:23
4903
  #: application/modules/Ebay/EbayConfig.php:38
 
 
4904
  msgid ""
4905
  "You can get it in <a target=\"_blank\" href=\"%s\">eBay Developers Program</"
4906
  "a>."
@@ -4957,6 +5021,8 @@ msgid ""
4957
  msgstr ""
4958
 
4959
  #: application/modules/Ebay/EbayConfig.php:102
 
 
4960
  #: application/modules/Ozon/OzonConfig.php:32
4961
  msgid "Deeplink"
4962
  msgstr ""
@@ -4973,7 +5039,7 @@ msgstr ""
4973
 
4974
  #: application/modules/Ebay/EbayConfig.php:112
4975
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:67
4976
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:77
4977
  msgid "Locale"
4978
  msgstr ""
4979
 
@@ -5002,6 +5068,7 @@ msgid ""
5002
  msgstr ""
5003
 
5004
  #: application/modules/Ebay/EbayConfig.php:180
 
5005
  msgid "Search in description"
5006
  msgstr ""
5007
 
@@ -5089,26 +5156,32 @@ msgid "Type of auction"
5089
  msgstr ""
5090
 
5091
  #: application/modules/Ebay/EbayConfig.php:286
 
5092
  msgid "Maximum bids"
5093
  msgstr ""
5094
 
5095
  #: application/modules/Ebay/EbayConfig.php:287
 
5096
  msgid "Example, 10"
5097
  msgstr ""
5098
 
5099
  #: application/modules/Ebay/EbayConfig.php:296
 
5100
  msgid "Minimum bids"
5101
  msgstr ""
5102
 
5103
  #: application/modules/Ebay/EbayConfig.php:297
 
5104
  msgid "Example, 3"
5105
  msgstr ""
5106
 
5107
  #: application/modules/Ebay/EbayConfig.php:307
 
5108
  msgid "Example, 300.50"
5109
  msgstr ""
5110
 
5111
  #: application/modules/Ebay/EbayConfig.php:317
 
5112
  msgid "Example, 10.98"
5113
  msgstr ""
5114
 
@@ -5158,7 +5231,7 @@ msgid ""
5158
  "one searching"
5159
  msgstr ""
5160
 
5161
- #: application/modules/Ebay/EbayModule.php:49
5162
  msgid ""
5163
  "Starting on July 1, 2021, applications using Shopping API calls must "
5164
  "authenticate with an OAuth application access token. Please visit <a href="
@@ -5166,6 +5239,179 @@ msgid ""
5166
  "authentication."
5167
  msgstr ""
5168
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5169
  #: application/modules/Envato/EnvatoConfig.php:23
5170
  msgid ""
5171
  "You can <a href=\"https://build.envato.com/create-token/\">generate a "
@@ -5278,7 +5524,7 @@ msgid "Feed name"
5278
  msgstr ""
5279
 
5280
  #: application/modules/Feed/FeedConfig.php:27
5281
- #: application/modules/Feed/FeedConfig.php:89
5282
  msgid "For example: %s"
5283
  msgstr ""
5284
 
@@ -5287,7 +5533,7 @@ msgid "Feed download URL"
5287
  msgstr ""
5288
 
5289
  #: application/modules/Feed/FeedConfig.php:45
5290
- msgid "CSV format only."
5291
  msgstr ""
5292
 
5293
  #: application/modules/Feed/FeedConfig.php:46
@@ -5295,47 +5541,63 @@ msgid "Make sure your unzipped feed size is less than %s."
5295
  msgstr ""
5296
 
5297
  #: application/modules/Feed/FeedConfig.php:64
5298
- msgid "Archive format"
5299
  msgstr ""
5300
 
5301
  #: application/modules/Feed/FeedConfig.php:67
5302
- msgid "None"
5303
  msgstr ""
5304
 
5305
  #: application/modules/Feed/FeedConfig.php:73
5306
- msgid "Feed encoding"
 
 
 
 
5307
  msgstr ""
5308
 
5309
  #: application/modules/Feed/FeedConfig.php:82
 
 
 
 
5310
  #: application/modules/Viglink/ViglinkConfig.php:135
5311
  msgid "Default currency"
5312
  msgstr ""
5313
 
5314
- #: application/modules/Feed/FeedConfig.php:88
5315
  msgid "Default merchant domain"
5316
  msgstr ""
5317
 
5318
- #: application/modules/Feed/FeedConfig.php:105
5319
  msgid "Field mapping"
5320
  msgstr ""
5321
 
5322
- #: application/modules/Feed/FeedConfig.php:116
5323
  msgid "Please fill out all required mapping fields."
5324
  msgstr ""
5325
 
5326
- #: application/modules/Feed/FeedConfig.php:132
 
 
 
 
 
 
 
 
5327
  msgid "(required)"
5328
  msgstr ""
5329
 
5330
- #: application/modules/Feed/FeedConfig.php:134
5331
  msgid "(optional)"
5332
  msgstr ""
5333
 
5334
- #: application/modules/Feed/FeedConfig.php:141
5335
  msgid "In your feed"
5336
  msgstr ""
5337
 
5338
- #: application/modules/Feed/FeedModule.php:25
5339
  msgid "Add new"
5340
  msgstr ""
5341
 
@@ -5770,109 +6032,69 @@ msgstr ""
5770
 
5771
  #: application/modules/Kelkoo/KelkooConfig.php:23
5772
  msgid ""
5773
- "Before you can use it you must obtain a Tracking Id from <a target=\"_blank"
5774
- "\" href=\"https://partner.kelkoo.com/protected/ecommerceServices\">Kelkoo</"
5775
- "a>."
5776
  msgstr ""
5777
 
5778
- #: application/modules/Kelkoo/KelkooConfig.php:37
5779
- msgid ""
5780
- "Before you can use it you must obtain a Affiliate Key from <a target=\"_blank"
5781
- "\" href=\"https://partner.kelkoo.com/protected/ecommerceServices\">Kelkoo</"
5782
- "a>."
5783
- msgstr ""
5784
-
5785
- #: application/modules/Kelkoo/KelkooConfig.php:50
5786
  msgid "Region <span class=\"cegg_required\">*</span>"
5787
  msgstr ""
5788
 
5789
- #: application/modules/Kelkoo/KelkooConfig.php:53
5790
  msgid "- Choose your region -"
5791
  msgstr ""
5792
 
5793
- #: application/modules/Kelkoo/KelkooConfig.php:121
5794
- msgid "Ranking"
5795
  msgstr ""
5796
 
5797
  #: application/modules/Kelkoo/KelkooConfig.php:124
5798
- msgid "Total price ascending"
5799
  msgstr ""
5800
 
5801
- #: application/modules/Kelkoo/KelkooConfig.php:125
5802
- msgid "Total price descending"
5803
  msgstr ""
5804
 
5805
- #: application/modules/Kelkoo/KelkooConfig.php:130
5806
- msgid "Logical type"
5807
  msgstr ""
5808
 
5809
- #: application/modules/Kelkoo/KelkooConfig.php:131
5810
- msgid "For a query with several terms."
5811
- msgstr ""
5812
-
5813
- #: application/modules/Kelkoo/KelkooConfig.php:135
5814
- msgid "all the offers matching term 1 AND term 2"
5815
- msgstr ""
5816
-
5817
- #: application/modules/Kelkoo/KelkooConfig.php:136
5818
- msgid "all the offers matching term 1 OR term 2"
5819
- msgstr ""
5820
-
5821
- #: application/modules/Kelkoo/KelkooConfig.php:141
5822
- msgid "Automatic OR"
5823
- msgstr ""
5824
-
5825
- #: application/modules/Kelkoo/KelkooConfig.php:142
5826
- msgid ""
5827
- "Automatic search with a OR instead of AND if there is no results with AND "
5828
- "query"
5829
- msgstr ""
5830
-
5831
- #: application/modules/Kelkoo/KelkooConfig.php:148
5832
- msgid "Mobile friendly"
5833
- msgstr ""
5834
-
5835
- #: application/modules/Kelkoo/KelkooConfig.php:149
5836
- msgid "Response will return mobile compliant offers only"
5837
  msgstr ""
5838
 
5839
  #: application/modules/Kelkoo/KelkooConfig.php:155
5840
- msgid "Boost mobile results"
5841
- msgstr ""
5842
-
5843
- #: application/modules/Kelkoo/KelkooConfig.php:156
5844
- msgid "Response will return mobile friendly offers at the top of the resultset"
5845
- msgstr ""
5846
-
5847
- #: application/modules/Kelkoo/KelkooConfig.php:157
5848
- msgid ""
5849
- "Offers from merchants that are not considered mobile friendly will also be "
5850
- "returned but below those which are mobile friendly."
5851
- msgstr ""
5852
-
5853
- #: application/modules/Kelkoo/KelkooConfig.php:183
5854
  msgid "Rebate percentage"
5855
  msgstr ""
5856
 
5857
- #: application/modules/Kelkoo/KelkooConfig.php:184
5858
  msgid ""
5859
  "When set to 30 for example, the response will return offers that have a sale "
5860
  "price discounted by 30% or more."
5861
  msgstr ""
5862
 
5863
- #: application/modules/Kelkoo/KelkooConfig.php:209
5864
- msgid "The category to search in. It is the category ID."
5865
- msgstr ""
5866
-
5867
- #: application/modules/Kelkoo/KelkooConfig.php:217
5868
  #: application/modules/SkimlinksCoupons/SkimlinksCouponsConfig.php:117
5869
  msgid "Merchant ID"
5870
  msgstr ""
5871
 
5872
- #: application/modules/Kelkoo/KelkooConfig.php:218
5873
  msgid "Limit the search to a specific merchant."
5874
  msgstr ""
5875
 
 
 
 
 
 
 
 
 
 
 
 
5876
  #: application/modules/Linkshare/LinkshareConfig.php:23
5877
  msgid ""
5878
  "Linkshare access key. Go to your account in Linkshare and follow \"LINKS -> "
@@ -6039,10 +6261,6 @@ msgstr ""
6039
  msgid "Lomadee affiliate network"
6040
  msgstr ""
6041
 
6042
- #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:66
6043
- msgid "Category ID"
6044
- msgstr ""
6045
-
6046
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:86
6047
  msgid "The way the offers are sorted."
6048
  msgstr ""
@@ -6714,7 +6932,7 @@ msgid ""
6714
  msgstr ""
6715
 
6716
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:94
6717
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:128
6718
  msgid "Feed ID"
6719
  msgstr ""
6720
 
@@ -6736,7 +6954,7 @@ msgid ""
6736
  msgstr ""
6737
 
6738
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:23
6739
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:25
6740
  msgid ""
6741
  "You can find your Customer ID and Passphrase by logging onto your "
6742
  "TradeTracker account and navagating to \"Creatives -> <a href=\"https://"
@@ -6745,7 +6963,7 @@ msgid ""
6745
  msgstr ""
6746
 
6747
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:52
6748
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:54
6749
  msgid ""
6750
  "Login into your TradeTracker control panel. Click on \"<a href=\"https://"
6751
  "affiliate.tradetracker.com/customerSite/list\">My Sites</a>\" in the Account "
@@ -6754,7 +6972,7 @@ msgid ""
6754
  msgstr ""
6755
 
6756
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:68
6757
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:78
6758
  msgid "Your TradeTracker locale."
6759
  msgstr ""
6760
 
@@ -6778,12 +6996,12 @@ msgid "Banner Dimension ID"
6778
  msgstr ""
6779
 
6780
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:137
6781
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:146
6782
  msgid "Campaign ID"
6783
  msgstr ""
6784
 
6785
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:146
6786
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:155
6787
  msgid "Campaign Category ID"
6788
  msgstr ""
6789
 
@@ -6795,29 +7013,29 @@ msgstr ""
6795
  msgid "Include unsubscribed campaigns."
6796
  msgstr ""
6797
 
6798
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:137
6799
  msgid "Feed Category Name"
6800
  msgstr ""
6801
 
6802
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:164
6803
  #: application/modules/Viglink/ViglinkConfig.php:105
6804
  msgid "Price From"
6805
  msgstr ""
6806
 
6807
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:173
6808
  #: application/modules/Viglink/ViglinkConfig.php:114
6809
  msgid "Price To"
6810
  msgstr ""
6811
 
6812
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:201
6813
  msgid "Set this status if the product is not found."
6814
  msgstr ""
6815
 
6816
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:213
6817
  msgid "Time in seconds for updating prices. 0 - never update."
6818
  msgstr ""
6819
 
6820
- #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:214
6821
  msgid "Experimental feature for this module."
6822
  msgstr ""
6823
 
@@ -7092,7 +7310,7 @@ msgid ""
7092
  "Parse customer reviews. It takes more time. Don't check if you don't need it."
7093
  msgstr ""
7094
 
7095
- #: application/modules/Walmart/WalmartModule.php:49
7096
  msgid "<a href=\"%s\">Walmart module</a> requires the OpenSSL PHP extension!"
7097
  msgstr ""
7098
 
@@ -7201,13 +7419,13 @@ msgid ""
7201
  msgstr ""
7202
 
7203
  #: application/templates/blocks/item_after_price_row.php:12
7204
- #: application/templates/blocks/list_row.php:42
7205
  #: templates/block_offers_logo.php:64 templates/block_price_comparison.php:51
7206
  msgid "%d new from %s"
7207
  msgstr ""
7208
 
7209
  #: application/templates/blocks/item_after_price_row.php:15
7210
- #: application/templates/blocks/list_row.php:47
7211
  #: templates/block_offers_logo.php:69 templates/block_price_comparison.php:56
7212
  msgid "%d used from %s"
7213
  msgstr ""
@@ -7297,7 +7515,7 @@ msgstr ""
7297
  msgid "Create Your Free Price Drop Alert!"
7298
  msgstr ""
7299
 
7300
- #: templates/block_price_comparison.php:76
7301
  #: templates/block_price_comparison_card.php:55
7302
  #: templates/block_text_links.php:39
7303
  msgid "Last Amazon price update was: %s"
2
  # This file is distributed under the same license as the Content Egg<stripfree> Pro</stripfree> package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Content Egg<stripfree> Pro</stripfree> 9.3.0\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/content-egg\n"
7
+ "POT-Creation-Date: 2021-09-15 10:52:40+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
+ #: application/Autoupdate.php:87
16
  msgid "New version of %s plugin."
17
  msgstr ""
18
 
19
+ #: application/Autoupdate.php:88
20
  msgid ""
21
  "Please <a target=\"_blank\" href=\"%s\">find here</a> the releases notes."
22
  msgstr ""
81
  #: application/PriceMoversWidget.php:99 application/PriceMoversWidget.php:100
82
  #: application/PriceMoversWidget.php:101 application/PriceMoversWidget.php:102
83
  #: application/PriceMoversWidget.php:103 application/PriceMoversWidget.php:104
84
+ #: application/helpers/TemplateHelper.php:778
85
  msgid "%d days ago"
86
  msgstr ""
87
 
101
  #: application/WooIntegrator.php:544
102
  #: application/templates/blocks/grid_row.php:43
103
  #: application/templates/blocks/item_row.php:37
104
+ #: application/templates/blocks/list_row.php:34
105
+ #: application/templates/data_list.php:28
106
  #: application/templates/data_price_tracker_alert.php:43
107
  #: templates/block_offers_logo.php:55 templates/block_price_comparison.php:44
108
  msgid "Last updated on %s"
220
  msgid "user guide"
221
  msgstr ""
222
 
223
+ #: application/admin/EggMetabox.php:94
224
  msgid "Configure and activate modules of Content Egg plugin"
225
  msgstr ""
226
 
265
  msgid "Error."
266
  msgstr ""
267
 
268
+ #: application/admin/GeneralConfig.php:37 application/admin/PluginAdmin.php:112
269
  msgid "Settings"
270
  msgstr ""
271
 
369
 
370
  #: application/admin/GeneralConfig.php:216
371
  #: application/admin/views/_metabox_autoblog.php:415
372
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:153
373
  msgid "Minimum price"
374
  msgstr ""
375
 
376
  #: application/admin/GeneralConfig.php:217
377
  #: application/admin/views/_metabox_autoblog.php:416
378
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:143
379
  msgid "Maximum price"
380
  msgstr ""
381
 
494
  msgstr ""
495
 
496
  #: application/admin/GeneralConfig.php:301
497
+ #: application/modules/Kelkoo/KelkooConfig.php:220
498
  msgid "The field \"%s\" can't be more than %d."
499
  msgstr ""
500
 
651
  msgstr ""
652
 
653
  #: application/admin/GeneralConfig.php:452
654
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:198
655
  msgid "Stock status"
656
  msgstr ""
657
 
766
  msgid "Translation"
767
  msgstr ""
768
 
769
+ #: application/admin/GeneralConfig.php:545
770
+ msgid "Merchant settings"
771
+ msgstr ""
772
+
773
+ #: application/admin/GeneralConfig.php:554
774
+ msgid "Merchants"
775
+ msgstr ""
776
+
777
+ #: application/admin/GeneralConfig.php:594
778
+ #: application/admin/GeneralConfig.php:691
779
  msgid "Domain name"
780
  msgstr ""
781
 
782
+ #: application/admin/GeneralConfig.php:597
783
  msgid "Logo URL"
784
  msgstr ""
785
 
786
+ #: application/admin/GeneralConfig.php:654
787
  msgid "Translated string"
788
  msgstr ""
789
 
790
+ #: application/admin/GeneralConfig.php:695
791
+ msgid "Shop info"
792
+ msgstr ""
793
+
794
  #: application/admin/ImportExportController.php:28
795
  msgid "Import/Export"
796
  msgstr ""
858
  msgid " ago"
859
  msgstr ""
860
 
861
+ #: application/admin/PluginAdmin.php:98
862
  msgid "Are you sure?"
863
  msgstr ""
864
 
918
  msgstr ""
919
 
920
  #: application/admin/ProductTable.php:79
921
+ #: application/models/ProductModel.php:182
922
  #: application/modules/Awin/AwinConfig.php:66
923
  #: application/modules/Daisycon/DaisyconConfig.php:94
924
  #: application/modules/Impactradius/ImpactradiusConfig.php:101
926
  msgstr ""
927
 
928
  #: application/admin/ProductTable.php:81
929
+ #: application/models/ProductModel.php:183
930
  msgid "Out of stock"
931
  msgstr ""
932
 
939
  msgstr ""
940
 
941
  #: application/admin/ProductTable.php:222
942
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:166
943
  #: application/modules/BingImages/BingImagesConfig.php:92
944
  #: application/modules/BingImages/BingImagesConfig.php:108
945
  #: application/modules/BingImages/BingImagesConfig.php:121
1142
 
1143
  #: application/admin/views/_metabox_autoblog.php:211
1144
  msgid ""
1145
+ "You can use spin syntax with synonyms, for example, {Discount|Sale|Cheap}."
 
1146
  msgstr ""
1147
 
1148
  #: application/admin/views/_metabox_autoblog.php:218
1154
  msgstr ""
1155
 
1156
  #: application/admin/views/_metabox_autoblog.php:226
1157
+ msgid "Spin syntax and all tags from title template, will also work here."
 
 
 
1158
  msgstr ""
1159
 
1160
  #: application/admin/views/_metabox_autoblog.php:233
1189
 
1190
  #: application/admin/views/_metabox_autoblog.php:300
1191
  #: application/modules/Aliexpress/AliexpressConfig.php:89
1192
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:134
1193
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:89
1194
+ #: application/modules/CjLinks/CjLinksConfig.php:136
1195
  #: application/modules/Clickbank/ClickbankConfig.php:69
1196
  #: application/modules/Ebay/EbayConfig.php:170
1197
  #: application/modules/Linkshare/LinkshareConfig.php:106
1304
  msgid "Comma separated list of tags."
1305
  msgstr ""
1306
 
1307
+ #: application/admin/views/_metabox_autoblog.php:436
1308
+ #: application/admin/views/_metabox_autoblog.php:478
1309
+ msgid "Spin syntax and also all tags from title template, will also work here."
1310
+ msgstr ""
1311
+
1312
  #: application/admin/views/_metabox_autoblog.php:443
1313
  #: application/modules/Ebay/EbayConfig.php:194
1314
  msgid "Product condition"
1321
  #: application/modules/Amazon/AmazonConfig_FREE.php:196
1322
  #: application/modules/BingImages/BingImagesConfig.php:93
1323
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:154
1324
+ #: application/modules/CjLinks/CjLinksConfig.php:99
1325
+ #: application/modules/CjLinks/CjLinksConfig.php:123
1326
+ #: application/modules/CjLinks/CjLinksConfig.php:140
1327
  #: application/modules/Clickbank/ClickbankConfig.php:133
1328
  #: application/modules/Envato/EnvatoConfig.php:135
1329
  #: application/modules/GoogleBooks/GoogleBooksConfig.php:112
1330
  #: application/modules/GoogleImages/GoogleImagesConfig.php:121
1331
  #: application/modules/GoogleImages/GoogleImagesConfig.php:134
1332
  #: application/modules/GoogleImages/GoogleImagesConfig.php:154
1333
+ #: application/modules/Kelkoo/KelkooConfig.php:159
1334
  #: application/modules/TradedoublerCoupons/TradedoublerCouponsConfig.php:73
1335
  msgid "Any"
1336
  msgstr ""
1393
  msgstr ""
1394
 
1395
  #: application/admin/views/_metabox_results.php:33
1396
+ #: application/helpers/TemplateHelper.php:370
1397
  #: application/models/ProductModel.php:64
1398
  #: application/modules/GdeSlon/GdeSlonConfig.php:84
1399
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:90
1451
  msgid "EAN:"
1452
  msgstr ""
1453
 
1454
+ #: application/admin/views/_metabox_search_results.php:27
1455
  #: application/modules/CjLinks/views/search_results.php:17
1456
  msgid "Coupon code:"
1457
  msgstr ""
1478
  msgid "Integration with Affiliate Egg"
1479
  msgstr ""
1480
 
1481
+ #: application/admin/views/ae_integration.php:22
1482
+ msgid "Read more..."
 
 
 
 
 
 
 
 
 
 
1483
  msgstr ""
1484
 
1485
+ #: application/admin/views/ae_integration.php:27
1486
+ msgid "Follow these steps to get started"
1487
  msgstr ""
1488
 
1489
+ #: application/admin/views/ae_integration.php:29
1490
  msgid ""
1491
+ "Install and activate <a target=\"_blank\" href=\"%s\">Affiliate Egg Pro</a>"
 
1492
  msgstr ""
1493
 
1494
  #: application/admin/views/autoblog_edit.php:8
1915
  msgid "Content Egg Settings"
1916
  msgstr ""
1917
 
1918
+ #: application/components/AffiliateFeedParserModule.php:390
1919
  msgid "Product import is in progress"
1920
  msgstr ""
1921
 
1922
+ #: application/components/AffiliateFeedParserModule.php:470
1923
  msgid ""
1924
  "Your data feed is too large and cannot be imported. Use a smaller feed or "
1925
  "increase <a target=\"_blank\" href=\"%s\">WP_MAX_MEMORY_LIMIT</a>."
1936
  #: application/modules/Aliexpress2/Aliexpress2Config.php:68
1937
  #: application/modules/Amazon/AmazonConfig.php:88
1938
  #: application/modules/Amazon/AmazonConfig_FREE.php:84
1939
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:48
1940
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:50
1941
  #: application/modules/Awin/AwinConfig.php:36
1942
  #: application/modules/BingImages/BingImagesConfig.php:38
1949
  #: application/modules/Clickbank/ClickbankConfig.php:37
1950
  #: application/modules/Daisycon/DaisyconConfig.php:64
1951
  #: application/modules/Ebay/EbayConfig.php:120
1952
+ #: application/modules/Ebay2/Ebay2Config.php:87
1953
  #: application/modules/Envato/EnvatoConfig.php:58
1954
  #: application/modules/Flickr/FlickrConfig.php:37
1955
  #: application/modules/Flipkart/FlipkartConfig.php:72
1960
  #: application/modules/GoogleImages/GoogleImagesConfig.php:60
1961
  #: application/modules/GoogleNews/GoogleNewsConfig.php:22
1962
  #: application/modules/Impactradius/ImpactradiusConfig.php:51
1963
+ #: application/modules/Kelkoo/KelkooConfig.php:93
1964
  #: application/modules/Linkshare/LinkshareConfig.php:37
1965
  #: application/modules/Linkwise/LinkwiseConfig.php:59
1966
  #: application/modules/LomadeeCoupons/LomadeeCouponsConfig.php:36
1983
  #: application/modules/TradedoublerCoupons/TradedoublerCouponsConfig.php:37
1984
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:37
1985
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:95
1986
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:104
1987
  #: application/modules/Twitter/TwitterConfig.php:82
1988
  #: application/modules/Udemy/UdemyConfig.php:66
1989
  #: application/modules/Viglink/ViglinkConfig.php:52
2005
  #: application/modules/Aliexpress2/Aliexpress2Config.php:69
2006
  #: application/modules/Amazon/AmazonConfig.php:89
2007
  #: application/modules/Amazon/AmazonConfig_FREE.php:85
2008
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:49
2009
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:51
2010
  #: application/modules/Awin/AwinConfig.php:37
2011
  #: application/modules/Bolcom/BolcomConfig.php:51
2015
  #: application/modules/Clickbank/ClickbankConfig.php:38
2016
  #: application/modules/Daisycon/DaisyconConfig.php:65
2017
  #: application/modules/Ebay/EbayConfig.php:121
2018
+ #: application/modules/Ebay2/Ebay2Config.php:88
2019
  #: application/modules/Envato/EnvatoConfig.php:59
2020
  #: application/modules/Flipkart/FlipkartConfig.php:73
2021
  #: application/modules/GdeSlon/GdeSlonConfig.php:48
2022
  #: application/modules/Impactradius/ImpactradiusConfig.php:52
2023
+ #: application/modules/Kelkoo/KelkooConfig.php:94
2024
  #: application/modules/Linkshare/LinkshareConfig.php:38
2025
  #: application/modules/Linkwise/LinkwiseConfig.php:60
2026
  #: application/modules/LomadeeCoupons/LomadeeCouponsConfig.php:37
2034
  #: application/modules/TradedoublerCoupons/TradedoublerCouponsConfig.php:38
2035
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:38
2036
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:96
2037
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:105
2038
  #: application/modules/Udemy/UdemyConfig.php:67
2039
  #: application/modules/Viglink/ViglinkConfig.php:53
2040
  #: application/modules/Walmart/WalmartConfig.php:49
2056
  #: application/modules/Bolcom/BolcomConfig.php:75
2057
  #: application/modules/Daisycon/DaisyconConfig.php:74
2058
  #: application/modules/Daisycon/DaisyconConfig.php:89
2059
+ #: application/modules/Ebay2/Ebay2Config.php:97
2060
+ #: application/modules/Ebay2/Ebay2Config.php:112
2061
  #: application/modules/Envato/EnvatoConfig.php:68
2062
  #: application/modules/Envato/EnvatoConfig.php:83
2063
  #: application/modules/GoogleImages/GoogleImagesConfig.php:60
2065
  #: application/modules/GoogleImages/GoogleImagesConfig.php:80
2066
  #: application/modules/Impactradius/ImpactradiusConfig.php:61
2067
  #: application/modules/Impactradius/ImpactradiusConfig.php:76
2068
+ #: application/modules/Kelkoo/KelkooConfig.php:103
2069
+ #: application/modules/Kelkoo/KelkooConfig.php:118
2070
  #: application/modules/Linkwise/LinkwiseConfig.php:69
2071
  #: application/modules/Linkwise/LinkwiseConfig.php:84
2072
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:46
2088
 
2089
  #: application/components/AffiliateFeedParserModuleConfig.php:35
2090
  #: application/modules/Amazon/AmazonConfig.php:105
2091
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:65
2092
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:65
2093
  #: application/modules/Awin/AwinConfig.php:51
2094
  #: application/modules/Bolcom/BolcomConfig.php:65
2095
  #: application/modules/Daisycon/DaisyconConfig.php:79
2096
  #: application/modules/GoogleImages/GoogleImagesConfig.php:70
2097
+ #: application/modules/Kelkoo/KelkooConfig.php:108
2098
  #: application/modules/Linkwise/LinkwiseConfig.php:74
2099
  #: application/modules/LomadeeCoupons/LomadeeCouponsConfig.php:47
2100
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:51
2113
  #: application/modules/Aliexpress2/Aliexpress2Config.php:84
2114
  #: application/modules/Amazon/AmazonConfig.php:106
2115
  #: application/modules/Amazon/AmazonConfig_FREE.php:102
2116
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:66
2117
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:66
2118
  #: application/modules/Awin/AwinConfig.php:52
2119
  #: application/modules/Bolcom/BolcomConfig.php:66
2123
  #: application/modules/Clickbank/ClickbankConfig.php:54
2124
  #: application/modules/Daisycon/DaisyconConfig.php:80
2125
  #: application/modules/Ebay/EbayConfig.php:137
2126
+ #: application/modules/Ebay2/Ebay2Config.php:103
2127
  #: application/modules/Envato/EnvatoConfig.php:74
2128
  #: application/modules/Flipkart/FlipkartConfig.php:89
2129
  #: application/modules/GdeSlon/GdeSlonConfig.php:64
2130
  #: application/modules/Impactradius/ImpactradiusConfig.php:67
2131
+ #: application/modules/Kelkoo/KelkooConfig.php:109
2132
  #: application/modules/Linkshare/LinkshareConfig.php:49
2133
  #: application/modules/Linkwise/LinkwiseConfig.php:75
2134
  #: application/modules/LomadeeCoupons/LomadeeCouponsConfig.php:48
2142
  #: application/modules/TradedoublerCoupons/TradedoublerCouponsConfig.php:49
2143
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:49
2144
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:107
2145
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:116
2146
  #: application/modules/Udemy/UdemyConfig.php:82
2147
  #: application/modules/Viglink/ViglinkConfig.php:63
2148
  #: application/modules/Walmart/WalmartConfig.php:64
2171
  #: application/modules/Affiliatewindow/AffiliatewindowConfig.php:130
2172
  #: application/modules/AffilinetProducts/AffilinetProductsConfig.php:167
2173
  #: application/modules/Aliexpress/AliexpressConfig.php:260
2174
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:215
2175
  #: application/modules/Amazon/AmazonConfig.php:303
2176
  #: application/modules/Amazon/AmazonConfig_FREE.php:274
2177
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:93
2178
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:218
2179
  #: application/modules/Awin/AwinConfig.php:81
2180
  #: application/modules/BingImages/BingImagesConfig.php:207
2184
  #: application/modules/Coupon/CouponConfig.php:22
2185
  #: application/modules/Daisycon/DaisyconConfig.php:101
2186
  #: application/modules/Ebay/EbayConfig.php:381
2187
+ #: application/modules/Ebay2/Ebay2Config.php:297
2188
  #: application/modules/Envato/EnvatoConfig.php:219
2189
  #: application/modules/Flickr/FlickrConfig.php:106
2190
  #: application/modules/Flipkart/FlipkartConfig.php:104
2194
  #: application/modules/GoogleImages/GoogleImagesConfig.php:186
2195
  #: application/modules/GoogleNews/GoogleNewsConfig.php:54
2196
  #: application/modules/Impactradius/ImpactradiusConfig.php:109
2197
+ #: application/modules/Kelkoo/KelkooConfig.php:200
2198
  #: application/modules/Linkshare/LinkshareConfig.php:122
2199
  #: application/modules/Linkwise/LinkwiseConfig.php:204
2200
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:95
2209
  #: application/modules/Shareasale/ShareasaleConfig.php:109
2210
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:159
2211
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:171
2212
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:180
2213
  #: application/modules/Twitter/TwitterConfig.php:127
2214
  #: application/modules/Udemy/UdemyConfig.php:215
2215
  #: application/modules/Viglink/ViglinkConfig.php:141
2234
  #: application/modules/Coupon/CouponConfig.php:23
2235
  #: application/modules/Daisycon/DaisyconConfig.php:102
2236
  #: application/modules/Ebay/EbayConfig.php:382
2237
+ #: application/modules/Ebay2/Ebay2Config.php:298
2238
  #: application/modules/Envato/EnvatoConfig.php:220
2239
  #: application/modules/Flickr/FlickrConfig.php:107
2240
  #: application/modules/Flipkart/FlipkartConfig.php:105
2244
  #: application/modules/GoogleImages/GoogleImagesConfig.php:187
2245
  #: application/modules/GoogleNews/GoogleNewsConfig.php:55
2246
  #: application/modules/Impactradius/ImpactradiusConfig.php:110
2247
+ #: application/modules/Kelkoo/KelkooConfig.php:201
2248
  #: application/modules/Linkshare/LinkshareConfig.php:123
2249
  #: application/modules/Linkwise/LinkwiseConfig.php:205
2250
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:96
2258
  #: application/modules/Shareasale/ShareasaleConfig.php:110
2259
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:160
2260
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:172
2261
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:181
2262
  #: application/modules/Twitter/TwitterConfig.php:128
2263
  #: application/modules/Udemy/UdemyConfig.php:216
2264
  #: application/modules/Viglink/ViglinkConfig.php:142
2268
  msgid "Save images on server"
2269
  msgstr ""
2270
 
2271
+ #: application/components/AffiliateFeedParserModuleConfig.php:65
2272
  #: application/components/AffiliateParserModuleConfig.php:52
2273
  msgid "Cron"
2274
  msgstr ""
2280
  msgstr ""
2281
 
2282
  #: application/components/AffiliateParserModuleConfig.php:35
2283
+ #: application/modules/Kelkoo/KelkooConfig.php:220
2284
  msgid "Price update"
2285
  msgstr ""
2286
 
2462
  msgid "Make links with local 301 redirect"
2463
  msgstr ""
2464
 
2465
+ #: application/helpers/TemplateHelper.php:774
2466
  msgid "today"
2467
  msgstr ""
2468
 
2469
+ #: application/helpers/TemplateHelper.php:780
2470
  msgid "%d day ago"
2471
  msgstr ""
2472
 
2473
+ #: application/helpers/TemplateHelper.php:887
2474
  msgid "in stock"
2475
  msgstr ""
2476
 
2477
+ #: application/helpers/TemplateHelper.php:889
2478
  msgid "out of stock"
2479
  msgstr ""
2480
 
2520
  msgid "Stock"
2521
  msgstr ""
2522
 
2523
+ #: application/models/ProductModel.php:184
2524
  msgid "Unknown"
2525
  msgstr ""
2526
 
2544
  #: application/modules/Amazon/AmazonConfig.php:116
2545
  #: application/modules/Amazon/AmazonConfig_FREE.php:95
2546
  #: application/modules/Amazon/AmazonConfig_FREE.php:112
2547
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:59
2548
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:76
2549
  #: application/modules/Clickbank/ClickbankConfig.php:47
2550
  #: application/modules/Clickbank/ClickbankConfig.php:63
2551
  #: application/modules/RssFetcher/RssFetcherConfig.php:47
2568
  #: application/modules/CjProducts/CjProductsConfig.php:74
2569
  #: application/modules/Clickbank/ClickbankConfig.php:53
2570
  #: application/modules/Ebay/EbayConfig.php:136
2571
+ #: application/modules/Ebay2/Ebay2Config.php:102
2572
  #: application/modules/Envato/EnvatoConfig.php:73
2573
  #: application/modules/Flipkart/FlipkartConfig.php:88
2574
  #: application/modules/GdeSlon/GdeSlonConfig.php:63
2582
  #: application/modules/TradedoublerCoupons/TradedoublerCouponsConfig.php:48
2583
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:48
2584
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:106
2585
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:115
2586
  #: application/modules/Udemy/UdemyConfig.php:81
2587
  #: application/modules/Viglink/ViglinkConfig.php:62
2588
  #: application/modules/Walmart/WalmartConfig.php:63
2607
  #: application/modules/AE/AEConfig.php:78
2608
  #: application/modules/Amazon/AmazonConfig.php:311
2609
  #: application/modules/Amazon/AmazonConfig_FREE.php:281
2610
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:101
2611
  msgid "Small logos"
2612
  msgstr ""
2613
 
2614
  #: application/modules/AE/AEConfig.php:81
2615
  #: application/modules/Amazon/AmazonConfig.php:316
2616
  #: application/modules/Amazon/AmazonConfig_FREE.php:282
2617
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:106
2618
  msgid "Show small logos"
2619
  msgstr ""
2620
 
2621
  #: application/modules/AE/AEConfig.php:82
2622
  #: application/modules/Amazon/AmazonConfig.php:317
2623
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:107
2624
  msgid "Hide small logos"
2625
  msgstr ""
2626
 
2627
  #: application/modules/AE/AEConfig.php:87
2628
  #: application/modules/Amazon/AmazonConfig.php:322
2629
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:112
2630
  msgid "Large logos"
2631
  msgstr ""
2632
 
2633
  #: application/modules/AE/AEConfig.php:90
2634
  #: application/modules/Amazon/AmazonConfig.php:325
2635
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:115
2636
  msgid "Show large logos"
2637
  msgstr ""
2638
 
2639
  #: application/modules/AE/AEConfig.php:91
2640
  #: application/modules/Amazon/AmazonConfig.php:326
2641
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:116
2642
  msgid "Hide large logos"
2643
  msgstr ""
2644
 
2758
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:169
2759
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:130
2760
  #: application/modules/Ebay/EbayConfig.php:316
2761
+ #: application/modules/Ebay2/Ebay2Config.php:277
2762
  #: application/modules/Impactradius/ImpactradiusConfig.php:81
2763
+ #: application/modules/Kelkoo/KelkooConfig.php:135
2764
  #: application/modules/Linkwise/LinkwiseConfig.php:143
2765
  #: application/modules/Optimisemedia/OptimisemediaConfig.php:138
2766
  #: application/modules/PayTM/PayTMConfig.php:71
2776
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:179
2777
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:140
2778
  #: application/modules/Ebay/EbayConfig.php:306
2779
+ #: application/modules/Ebay2/Ebay2Config.php:287
2780
  #: application/modules/Impactradius/ImpactradiusConfig.php:91
2781
+ #: application/modules/Kelkoo/KelkooConfig.php:145
2782
  #: application/modules/Linkwise/LinkwiseConfig.php:153
2783
  #: application/modules/Optimisemedia/OptimisemediaConfig.php:148
2784
  #: application/modules/PayTM/PayTMConfig.php:81
2803
  #: application/modules/GoogleBooks/GoogleBooksConfig.php:86
2804
  #: application/modules/GoogleNews/GoogleNewsConfig.php:61
2805
  #: application/modules/Impactradius/ImpactradiusConfig.php:116
2806
+ #: application/modules/Kelkoo/KelkooConfig.php:189
2807
  #: application/modules/Linkshare/LinkshareConfig.php:129
2808
  #: application/modules/Linkwise/LinkwiseConfig.php:182
2809
  #: application/modules/Optimisemedia/OptimisemediaConfig.php:172
2812
  #: application/modules/Pepperjam/PepperjamConfig.php:148
2813
  #: application/modules/Shareasale/ShareasaleConfig.php:116
2814
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:166
2815
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:187
2816
  #: application/modules/VkNews/VkNewsConfig.php:51
2817
  #: application/modules/Walmart/WalmartConfig.php:142
2818
  #: application/modules/Youtube/YoutubeConfig.php:87
2836
  #: application/modules/GoogleBooks/GoogleBooksConfig.php:87
2837
  #: application/modules/GoogleNews/GoogleNewsConfig.php:62
2838
  #: application/modules/Impactradius/ImpactradiusConfig.php:117
 
2839
  #: application/modules/Linkshare/LinkshareConfig.php:130
2840
  #: application/modules/Linkwise/LinkwiseConfig.php:183
2841
  #: application/modules/Optimisemedia/OptimisemediaConfig.php:173
2844
  #: application/modules/Pepperjam/PepperjamConfig.php:149
2845
  #: application/modules/Shareasale/ShareasaleConfig.php:117
2846
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:167
2847
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:188
2848
  #: application/modules/VkNews/VkNewsConfig.php:52
2849
  #: application/modules/Walmart/WalmartConfig.php:143
2850
  #: application/modules/Youtube/YoutubeConfig.php:88
2887
  #: application/modules/Bolcom/views/update_panel.php:2
2888
  #: application/modules/Daisycon/views/search_panel.php:2
2889
  #: application/modules/Daisycon/views/update_panel.php:2
2890
+ #: application/modules/Ebay/views/search_panel.php:3
2891
  #: application/modules/Ebay/views/update_panel.php:2
2892
+ #: application/modules/Ebay2/views/search_panel.php:15
2893
+ #: application/modules/Ebay2/views/update_panel.php:2
2894
  #: application/modules/Feed/views/search_panel.php:2
2895
  #: application/modules/Feed/views/update_panel.php:2
2896
  #: application/modules/Impactradius/views/search_panel.php:2
2929
  #: application/modules/Bolcom/views/update_panel.php:3
2930
  #: application/modules/Daisycon/views/search_panel.php:3
2931
  #: application/modules/Daisycon/views/update_panel.php:3
2932
+ #: application/modules/Ebay/views/search_panel.php:4
2933
  #: application/modules/Ebay/views/update_panel.php:3
2934
+ #: application/modules/Ebay2/views/search_panel.php:16
2935
+ #: application/modules/Ebay2/views/update_panel.php:3
2936
  #: application/modules/Feed/views/search_panel.php:3
2937
  #: application/modules/Feed/views/update_panel.php:3
2938
  #: application/modules/Impactradius/views/search_panel.php:3
2974
 
2975
  #: application/modules/Affiliatewindow/AffiliatewindowConfig.php:61
2976
  #: application/modules/Aliexpress/AliexpressConfig.php:232
2977
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:173
2978
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:190
2979
  #: application/modules/Clickbank/ClickbankConfig.php:102
2980
  #: application/modules/Ebay/EbayConfig.php:152
2981
+ #: application/modules/Ebay2/Ebay2Config.php:117
2982
  #: application/modules/Flickr/FlickrConfig.php:59
2983
  #: application/modules/GdeSlon/GdeSlonConfig.php:79
2984
  #: application/modules/GoogleBooks/GoogleBooksConfig.php:97
 
2985
  #: application/modules/Linkshare/LinkshareConfig.php:81
2986
  #: application/modules/Ozon/OzonConfig.php:64
2987
  #: application/modules/PayTM/PayTMConfig.php:91
2995
  #: application/modules/Affiliatewindow/AffiliatewindowConfig.php:65
2996
  #: application/modules/Affiliatewindow/AffiliatewindowConfig.php:105
2997
  #: application/modules/Aliexpress/AliexpressConfig.php:236
2998
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:177
2999
  #: application/modules/Bolcom/BolcomConfig.php:149
3000
  #: application/modules/CityadsProducts/CityadsProductsConfig.php:194
3001
  #: application/modules/Envato/EnvatoConfig.php:157
3002
  #: application/modules/Envato/EnvatoConfig.php:175
3003
  #: application/modules/GdeSlon/GdeSlonConfig.php:83
3004
+ #: application/modules/Kelkoo/KelkooConfig.php:127
3005
  #: application/modules/Linkshare/LinkshareConfig.php:85
3006
  #: application/modules/PayTM/PayTMConfig.php:95
3007
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:149
3096
  msgstr ""
3097
 
3098
  #: application/modules/Aliexpress/AliexpressConfig.php:90
3099
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:135
3100
  msgid "Limit the search of goods by this category."
3101
  msgstr ""
3102
 
3103
  #: application/modules/Aliexpress/AliexpressConfig.php:93
3104
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:138
3105
  #: application/modules/Pepperjam/PepperjamConfig.php:101
3106
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:63
3107
  #: application/modules/Udemy/UdemyConfig.php:125
3124
  msgstr ""
3125
 
3126
  #: application/modules/Aliexpress/AliexpressConfig.php:157
3127
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:125
3128
  #: application/modules/Clickbank/ClickbankConfig.php:129
3129
  #: application/modules/Udemy/UdemyConfig.php:96
3130
  msgid "Language"
3212
  #: application/modules/Bolcom/views/update_panel.php:2
3213
  #: application/modules/Daisycon/views/update_panel.php:2
3214
  #: application/modules/Ebay/views/update_panel.php:2
3215
+ #: application/modules/Ebay2/views/update_panel.php:2
3216
  #: application/modules/Feed/views/update_panel.php:2
3217
  #: application/modules/Kelkoo/views/update_panel.php:2
3218
  #: application/modules/Linkwise/views/update_panel.php:2
3231
  #: application/modules/Bolcom/views/update_panel.php:3
3232
  #: application/modules/Daisycon/views/update_panel.php:3
3233
  #: application/modules/Ebay/views/update_panel.php:3
3234
+ #: application/modules/Ebay2/views/update_panel.php:3
3235
  #: application/modules/Feed/views/update_panel.php:3
3236
  #: application/modules/Kelkoo/views/update_panel.php:3
3237
  #: application/modules/Linkwise/views/update_panel.php:3
3266
  "target=\"_blank\" href=\"%s\">here</a>."
3267
  msgstr ""
3268
 
3269
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:144
3270
  msgid "The price must be set in USD. Example: 99"
3271
  msgstr ""
3272
 
3273
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:154
3274
  msgid "The price must be set in USD. Example: 10"
3275
  msgstr ""
3276
 
3277
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:163
3278
  msgid "Platform"
3279
  msgstr ""
3280
 
3281
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:178
3282
  msgid "Price ASC"
3283
  msgstr ""
3284
 
3285
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:179
3286
  msgid "Price DESC"
3287
  msgstr ""
3288
 
3289
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:180
3290
  msgid "Volume ASC"
3291
  msgstr ""
3292
 
3293
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:181
3294
  msgid "Volume DESC"
3295
  msgstr ""
3296
 
3297
+ #: application/modules/Aliexpress2/Aliexpress2Config.php:216
3298
  msgid "Save images locally"
3299
  msgstr ""
3300
 
3326
 
3327
  #: application/modules/Amazon/AmazonConfig.php:58
3328
  #: application/modules/Amazon/AmazonConfig_FREE.php:53
3329
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:25
3330
  msgid "Default Associate Tag"
3331
  msgstr ""
3332
 
3333
  #: application/modules/Amazon/AmazonConfig.php:59
3334
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:26
3335
  msgid ""
3336
  "An alphanumeric token that uniquely identifies you as an Associate. To "
3337
  "obtain an Associate Tag, refer to <a target=\"_blank\" href=\"https://"
3341
 
3342
  #: application/modules/Amazon/AmazonConfig.php:67
3343
  #: application/modules/Amazon/AmazonConfig_FREE.php:62
3344
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:34
3345
  msgid "The \"Tracking ID\" can not be empty."
3346
  msgstr ""
3347
 
3348
  #: application/modules/Amazon/AmazonConfig.php:73
3349
  #: application/modules/Amazon/AmazonConfig_FREE.php:76
3350
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:40
3351
+ #: application/modules/Ebay2/Ebay2Config.php:80
3352
  msgid "Default locale"
3353
  msgstr ""
3354
 
3355
  #: application/modules/Amazon/AmazonConfig.php:74
3356
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:41
3357
  msgid ""
3358
  "Your Amazon Associates tag works only in the locale in which you register. "
3359
  "If you want to be an Amazon Associate in more than one locale, you must "
3373
  #: application/modules/Amazon/AmazonConfig.php:90
3374
  #: application/modules/Amazon/AmazonConfig_FREE.php:86
3375
  #: application/modules/Amazon/AmazonConfig_FREE.php:103
3376
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:50
3377
  msgid "It needs a bit more time to get more than 10 results in one request"
3378
  msgstr ""
3379
 
3380
  #: application/modules/Amazon/AmazonConfig.php:107
3381
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:67
3382
  msgid "It needs a bit more time to get more than 10 results in one request."
3383
  msgstr ""
3384
 
3385
  #: application/modules/Amazon/AmazonConfig.php:122
3386
  #: application/modules/Amazon/AmazonConfig_FREE.php:118
3387
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:82
3388
  msgid "Link type"
3389
  msgstr ""
3390
 
3391
  #: application/modules/Amazon/AmazonConfig.php:123
3392
  #: application/modules/Amazon/AmazonConfig_FREE.php:119
3393
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:83
3394
  msgid ""
3395
  "Type of partner links. Know more about amazon <a target=\"_blank\" href="
3396
  "\"https://affiliate-program.amazon.com/gp/associates/help/t2/a11\">90 day "
3487
  msgstr ""
3488
 
3489
  #: application/modules/Amazon/AmazonConfig.php:229
3490
+ #: application/modules/Ebay2/Ebay2Config.php:195
3491
  msgid "Condition"
3492
  msgstr ""
3493
 
3547
 
3548
  #: application/modules/Amazon/AmazonConfig.php:269
3549
  #: application/modules/Ebay/EbayConfig.php:238
3550
+ #: application/modules/Ebay2/Ebay2Config.php:155
3551
  msgid "Free Shipping"
3552
  msgstr ""
3553
 
3593
  msgstr ""
3594
 
3595
  #: application/modules/Amazon/AmazonConfig.php:304
3596
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:94
3597
  msgid "Save images to local server"
3598
  msgstr ""
3599
 
3600
  #: application/modules/Amazon/AmazonConfig.php:305
3601
  #: application/modules/Amazon/AmazonConfig.php:313
3602
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:95
3603
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:103
3604
  msgid "Enabling this option may violate API rules."
3605
  msgstr ""
3606
 
3607
  #: application/modules/Amazon/AmazonConfig.php:314
3608
  #: application/modules/Amazon/AmazonConfig_FREE.php:282
3609
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:104
3610
  msgid ""
3611
  "Read more: <a target=\"_blank\" href=\"%s\">Amazon brand usage guidelines</"
3612
  "a>."
3614
 
3615
  #: application/modules/Amazon/AmazonConfig.php:335
3616
  #: application/modules/Amazon/AmazonConfig_FREE.php:292
3617
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:125
3618
  msgid "Associate Tag for %s locale"
3619
  msgstr ""
3620
 
3621
  #: application/modules/Amazon/AmazonConfig.php:336
3622
  #: application/modules/Amazon/AmazonConfig_FREE.php:293
3623
+ #: application/modules/AmazonNoApi/AmazonNoApiConfig.php:126
3624
  msgid ""
3625
  "Type here your tracking ID for this locale if you need multiple locale "
3626
  "parsing"
3732
 
3733
  #: application/modules/Amazon/AmazonConfig_FREE.php:173
3734
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:170
3735
+ #: application/modules/Kelkoo/KelkooConfig.php:136
3736
  #: application/modules/Linkwise/LinkwiseConfig.php:144
3737
  msgid "Example, 8.99"
3738
  msgstr ""
3739
 
3740
  #: application/modules/Amazon/AmazonConfig_FREE.php:183
3741
  #: application/modules/AvantlinkProducts/AvantlinkProductsConfig.php:180
3742
+ #: application/modules/Kelkoo/KelkooConfig.php:146
3743
  #: application/modules/Linkwise/LinkwiseConfig.php:154
3744
  msgid "Example, 98.50"
3745
  msgstr ""
3835
 
3836
  #: application/modules/Amazon/templates/data_compare.php:98
3837
  #: application/modules/Ozon/templates/data_compare.php:78
3838
+ #: application/templates/blocks/item_row.php:59
3839
+ #: application/templates/blocks/list_row.php:56
3840
  #: application/templates/data_price_tracker_alert.php:48
3841
+ #: templates/block_offers_logo.php:76 templates/wdgt_price_movers_grid.php:72
3842
  #: templates/wdgt_price_movers_list.php:48
3843
  msgid "as of %s"
3844
  msgstr ""
3941
  #: application/modules/Daisycon/DaisyconConfig.php:32
3942
  #: application/modules/Ebay/EbayConfig.php:31
3943
  #: application/modules/Ebay/EbayConfig.php:46
3944
+ #: application/modules/Ebay2/Ebay2Config.php:31
3945
+ #: application/modules/Ebay2/Ebay2Config.php:45
3946
  #: application/modules/Envato/EnvatoConfig.php:31
3947
  #: application/modules/Feed/FeedConfig.php:35
3948
  #: application/modules/Feed/FeedConfig.php:54
3949
+ #: application/modules/Feed/FeedConfig.php:105
3950
  #: application/modules/GoogleImages/GoogleImagesConfig.php:31
3951
  #: application/modules/GoogleImages/GoogleImagesConfig.php:45
3952
  #: application/modules/Impactradius/ImpactradiusConfig.php:32
3953
  #: application/modules/Impactradius/ImpactradiusConfig.php:46
3954
  #: application/modules/Kelkoo/KelkooConfig.php:31
3955
+ #: application/modules/Kelkoo/KelkooConfig.php:88
 
3956
  #: application/modules/Linkwise/LinkwiseConfig.php:31
3957
  #: application/modules/Linkwise/LinkwiseConfig.php:45
3958
  #: application/modules/LomadeeCoupons/LomadeeCouponsConfig.php:31
3964
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:31
3965
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:45
3966
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:60
3967
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:31
3968
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:45
3969
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:60
3970
  #: application/modules/Udemy/UdemyConfig.php:31
3971
  #: application/modules/Udemy/UdemyConfig.php:46
3972
  #: application/modules/Viglink/ViglinkConfig.php:33
4146
  #: application/modules/Daisycon/DaisyconModule.php:31
4147
  #: application/modules/GdeSlon/GdeSlonModule.php:31
4148
  #: application/modules/Impactradius/ImpactradiusModule.php:29
4149
+ #: application/modules/Kelkoo/KelkooModule.php:34
4150
  #: application/modules/Pepperjam/PepperjamModule.php:29
4151
  #: application/modules/TradetrackerProducts/TradetrackerProductsModule.php:28
4152
+ #: application/modules/Walmart/WalmartModule.php:36
4153
  msgid "Adds products from %s."
4154
  msgstr ""
4155
 
4517
  msgstr ""
4518
 
4519
  #: application/modules/Bolcom/BolcomConfig.php:81
4520
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:67
4521
  msgid "SubID is a parameter that allows for the tracking of sales separately."
4522
  msgstr ""
4523
 
4562
  msgstr ""
4563
 
4564
  #: application/modules/Bolcom/BolcomConfig.php:152
 
4565
  #: application/modules/Ozon/OzonConfig.php:82
4566
  msgid "Price ascending"
4567
  msgstr ""
4568
 
4569
  #: application/modules/Bolcom/BolcomConfig.php:153
 
4570
  #: application/modules/Ozon/OzonConfig.php:83
4571
  msgid "Price descending"
4572
  msgstr ""
4780
  msgid "Advertisers"
4781
  msgstr ""
4782
 
4783
+ #: application/modules/CjLinks/CjLinksConfig.php:85
4784
+ msgid ""
4785
+ "A comma separated list of Advertiser IDs (CID). Restrict search results "
4786
+ "based on these IDs"
4787
+ msgstr ""
4788
+
4789
+ #: application/modules/CjLinks/CjLinksConfig.php:86
4790
+ msgid ""
4791
+ "or set this option to \"joined\" (this value restricts the search to "
4792
+ "advertisers with which you have a relationship)."
4793
+ msgstr ""
4794
+
4795
  #: application/modules/CjLinks/CjLinksModule.php:28
4796
  msgid ""
4797
  "Adds text links, coupons, banners from CJ.com. You must have approval from "
4956
 
4957
  #: application/modules/Ebay/EbayConfig.php:23
4958
  #: application/modules/Ebay/EbayConfig.php:38
4959
+ #: application/modules/Ebay2/Ebay2Config.php:23
4960
+ #: application/modules/Ebay2/Ebay2Config.php:37
4961
  msgid "Your application's OAuth credentials."
4962
  msgstr ""
4963
 
4964
  #: application/modules/Ebay/EbayConfig.php:23
4965
  #: application/modules/Ebay/EbayConfig.php:38
4966
+ #: application/modules/Ebay2/Ebay2Config.php:23
4967
+ #: application/modules/Ebay2/Ebay2Config.php:37
4968
  msgid ""
4969
  "You can get it in <a target=\"_blank\" href=\"%s\">eBay Developers Program</"
4970
  "a>."
5021
  msgstr ""
5022
 
5023
  #: application/modules/Ebay/EbayConfig.php:102
5024
+ #: application/modules/Ebay2/Ebay2Config.php:70
5025
+ #: application/modules/Feed/FeedConfig.php:130
5026
  #: application/modules/Ozon/OzonConfig.php:32
5027
  msgid "Deeplink"
5028
  msgstr ""
5039
 
5040
  #: application/modules/Ebay/EbayConfig.php:112
5041
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:67
5042
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:75
5043
  msgid "Locale"
5044
  msgstr ""
5045
 
5068
  msgstr ""
5069
 
5070
  #: application/modules/Ebay/EbayConfig.php:180
5071
+ #: application/modules/Ebay2/Ebay2Config.php:149
5072
  msgid "Search in description"
5073
  msgstr ""
5074
 
5156
  msgstr ""
5157
 
5158
  #: application/modules/Ebay/EbayConfig.php:286
5159
+ #: application/modules/Ebay2/Ebay2Config.php:268
5160
  msgid "Maximum bids"
5161
  msgstr ""
5162
 
5163
  #: application/modules/Ebay/EbayConfig.php:287
5164
+ #: application/modules/Ebay2/Ebay2Config.php:269
5165
  msgid "Example, 10"
5166
  msgstr ""
5167
 
5168
  #: application/modules/Ebay/EbayConfig.php:296
5169
+ #: application/modules/Ebay2/Ebay2Config.php:259
5170
  msgid "Minimum bids"
5171
  msgstr ""
5172
 
5173
  #: application/modules/Ebay/EbayConfig.php:297
5174
+ #: application/modules/Ebay2/Ebay2Config.php:260
5175
  msgid "Example, 3"
5176
  msgstr ""
5177
 
5178
  #: application/modules/Ebay/EbayConfig.php:307
5179
+ #: application/modules/Ebay2/Ebay2Config.php:288
5180
  msgid "Example, 300.50"
5181
  msgstr ""
5182
 
5183
  #: application/modules/Ebay/EbayConfig.php:317
5184
+ #: application/modules/Ebay2/Ebay2Config.php:278
5185
  msgid "Example, 10.98"
5186
  msgstr ""
5187
 
5231
  "one searching"
5232
  msgstr ""
5233
 
5234
+ #: application/modules/Ebay/EbayModule.php:54
5235
  msgid ""
5236
  "Starting on July 1, 2021, applications using Shopping API calls must "
5237
  "authenticate with an OAuth application access token. Please visit <a href="
5239
  "authentication."
5240
  msgstr ""
5241
 
5242
+ #: application/modules/Ebay2/Ebay2Config.php:51
5243
+ msgid ""
5244
+ "This is a 10-digit unique number provided by the eBay Partner Network. This "
5245
+ "is embedded in the campid part of the ePN affiliate link."
5246
+ msgstr ""
5247
+
5248
+ #: application/modules/Ebay2/Ebay2Config.php:52
5249
+ msgid ""
5250
+ "Campaign ID is valid for all programs which were approved for you on EPN. If "
5251
+ "you leave this field blank - you will not get commissions from sales."
5252
+ msgstr ""
5253
+
5254
+ #: application/modules/Ebay2/Ebay2Config.php:61
5255
+ msgid "ePN Custom ID"
5256
+ msgstr ""
5257
+
5258
+ #: application/modules/Ebay2/Ebay2Config.php:62
5259
+ msgid ""
5260
+ "This can be any value you want to use to identify this item or purchase "
5261
+ "order and can be a maximum of 256 characters. This is embedded in the "
5262
+ "customid part of the ePN affiliate link. Note: The Custom ID is the same as "
5263
+ "SUB-ID."
5264
+ msgstr ""
5265
+
5266
+ #: application/modules/Ebay2/Ebay2Config.php:71
5267
+ msgid ""
5268
+ "Set this parameter only if you want to send traffic through third party "
5269
+ "affiliate networks."
5270
+ msgstr ""
5271
+
5272
+ #: application/modules/Ebay2/Ebay2Config.php:72
5273
+ msgid ""
5274
+ "Read more: <a target=\"_blank\" href=\"%s\">How to find your deeplink</a>."
5275
+ msgstr ""
5276
+
5277
+ #: application/modules/Ebay2/Ebay2Config.php:130
5278
+ #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:66
5279
+ msgid "Category ID"
5280
+ msgstr ""
5281
+
5282
+ #: application/modules/Ebay2/Ebay2Config.php:131
5283
+ msgid ""
5284
+ "The category ID is used to limit the results. This field can have one "
5285
+ "category ID or a comma separated list of IDs."
5286
+ msgstr ""
5287
+
5288
+ #: application/modules/Ebay2/Ebay2Config.php:132
5289
+ msgid ""
5290
+ "Use the <a target=\"_blank\" href=\"%s\">Category Changes page</a> to find "
5291
+ "IDs."
5292
+ msgstr ""
5293
+
5294
+ #: application/modules/Ebay2/Ebay2Config.php:140
5295
+ msgid "Exclude category IDs"
5296
+ msgstr ""
5297
+
5298
+ #: application/modules/Ebay2/Ebay2Config.php:141
5299
+ msgid ""
5300
+ "Any item in the specified categories will not be returned. Multiple values "
5301
+ "can be used for this filter and are separated by comma."
5302
+ msgstr ""
5303
+
5304
+ #: application/modules/Ebay2/Ebay2Config.php:150
5305
+ msgid ""
5306
+ "Only items with a title or description matching the specified keyword are "
5307
+ "returned."
5308
+ msgstr ""
5309
+
5310
+ #: application/modules/Ebay2/Ebay2Config.php:156
5311
+ msgid "Only items with free shipping are returned"
5312
+ msgstr ""
5313
+
5314
+ #: application/modules/Ebay2/Ebay2Config.php:161
5315
+ msgid "Payment method"
5316
+ msgstr ""
5317
+
5318
+ #: application/modules/Ebay2/Ebay2Config.php:162
5319
+ msgid "Only items that offer payment by credit card are returned"
5320
+ msgstr ""
5321
+
5322
+ #: application/modules/Ebay2/Ebay2Config.php:167
5323
+ msgid "Returns accepted"
5324
+ msgstr ""
5325
+
5326
+ #: application/modules/Ebay2/Ebay2Config.php:168
5327
+ msgid ""
5328
+ "Only items with a title or description matching the specified keyword are "
5329
+ "returned"
5330
+ msgstr ""
5331
+
5332
+ #: application/modules/Ebay2/Ebay2Config.php:173
5333
+ msgid "Buying options"
5334
+ msgstr ""
5335
+
5336
+ #: application/modules/Ebay2/Ebay2Config.php:174
5337
+ msgid "Only items offering the specified buying formats are returned."
5338
+ msgstr ""
5339
+
5340
+ #: application/modules/Ebay2/Ebay2Config.php:185
5341
+ msgid "Condition IDs"
5342
+ msgstr ""
5343
+
5344
+ #: application/modules/Ebay2/Ebay2Config.php:186
5345
+ msgid ""
5346
+ "Only items with the specified condition ID are returned. Multiple values "
5347
+ "separated by comma can be used for this filter."
5348
+ msgstr ""
5349
+
5350
+ #: application/modules/Ebay2/Ebay2Config.php:196
5351
+ msgid ""
5352
+ "Unlike the Condition ID filter, the Condition filter will not return items "
5353
+ "of a specific condition such as Good, Very Good, or Seller Refurbished. It "
5354
+ "will only return items that are categorized by the broader conditions of NEW "
5355
+ "and USED."
5356
+ msgstr ""
5357
+
5358
+ #: application/modules/Ebay2/Ebay2Config.php:206
5359
+ msgid "Location country"
5360
+ msgstr ""
5361
+
5362
+ #: application/modules/Ebay2/Ebay2Config.php:207
5363
+ msgid ""
5364
+ "Only items located in the specified country are returned. Expects the two-"
5365
+ "letter ISO 3166 country code."
5366
+ msgstr ""
5367
+
5368
+ #: application/modules/Ebay2/Ebay2Config.php:215
5369
+ msgid "Delivery country"
5370
+ msgstr ""
5371
+
5372
+ #: application/modules/Ebay2/Ebay2Config.php:216
5373
+ msgid ""
5374
+ "Only items that can be shipped to the specified country are returned. "
5375
+ "Expects the two-letter ISO 3166 country code."
5376
+ msgstr ""
5377
+
5378
+ #: application/modules/Ebay2/Ebay2Config.php:224
5379
+ msgid "Local pickup"
5380
+ msgstr ""
5381
+
5382
+ #: application/modules/Ebay2/Ebay2Config.php:225
5383
+ msgid "Only local pickup items are returned."
5384
+ msgstr ""
5385
+
5386
+ #: application/modules/Ebay2/Ebay2Config.php:230
5387
+ msgid "Delivery postal code"
5388
+ msgstr ""
5389
+
5390
+ #: application/modules/Ebay2/Ebay2Config.php:231
5391
+ msgid ""
5392
+ "Only items that can be shipped to the specified postal/zip code are returned."
5393
+ msgstr ""
5394
+
5395
+ #: application/modules/Ebay2/Ebay2Config.php:240
5396
+ msgid "Sellers"
5397
+ msgstr ""
5398
+
5399
+ #: application/modules/Ebay2/Ebay2Config.php:241
5400
+ msgid ""
5401
+ "Only items from the specified sellers are returned in the response. Multiple "
5402
+ "values can be used for this filter and are separated by by comma."
5403
+ msgstr ""
5404
+
5405
+ #: application/modules/Ebay2/Ebay2Config.php:249
5406
+ msgid "Exclude sellers"
5407
+ msgstr ""
5408
+
5409
+ #: application/modules/Ebay2/Ebay2Config.php:250
5410
+ msgid ""
5411
+ "Any items from the specified sellers are not returned in the response. "
5412
+ "Multiple values can be used for this filter and are separated by comma."
5413
+ msgstr ""
5414
+
5415
  #: application/modules/Envato/EnvatoConfig.php:23
5416
  msgid ""
5417
  "You can <a href=\"https://build.envato.com/create-token/\">generate a "
5524
  msgstr ""
5525
 
5526
  #: application/modules/Feed/FeedConfig.php:27
5527
+ #: application/modules/Feed/FeedConfig.php:98
5528
  msgid "For example: %s"
5529
  msgstr ""
5530
 
5533
  msgstr ""
5534
 
5535
  #: application/modules/Feed/FeedConfig.php:45
5536
+ msgid "CSV or XML format."
5537
  msgstr ""
5538
 
5539
  #: application/modules/Feed/FeedConfig.php:46
5541
  msgstr ""
5542
 
5543
  #: application/modules/Feed/FeedConfig.php:64
5544
+ msgid "Feed format"
5545
  msgstr ""
5546
 
5547
  #: application/modules/Feed/FeedConfig.php:67
5548
+ msgid "CSV"
5549
  msgstr ""
5550
 
5551
  #: application/modules/Feed/FeedConfig.php:73
5552
+ msgid "Archive format"
5553
+ msgstr ""
5554
+
5555
+ #: application/modules/Feed/FeedConfig.php:76
5556
+ msgid "None"
5557
  msgstr ""
5558
 
5559
  #: application/modules/Feed/FeedConfig.php:82
5560
+ msgid "Feed encoding"
5561
+ msgstr ""
5562
+
5563
+ #: application/modules/Feed/FeedConfig.php:91
5564
  #: application/modules/Viglink/ViglinkConfig.php:135
5565
  msgid "Default currency"
5566
  msgstr ""
5567
 
5568
+ #: application/modules/Feed/FeedConfig.php:97
5569
  msgid "Default merchant domain"
5570
  msgstr ""
5571
 
5572
+ #: application/modules/Feed/FeedConfig.php:114
5573
  msgid "Field mapping"
5574
  msgstr ""
5575
 
5576
+ #: application/modules/Feed/FeedConfig.php:125
5577
  msgid "Please fill out all required mapping fields."
5578
  msgstr ""
5579
 
5580
+ #: application/modules/Feed/FeedConfig.php:131
5581
+ msgid "Set this option only if your feed does not contain affiliate links."
5582
+ msgstr ""
5583
+
5584
+ #: application/modules/Feed/FeedConfig.php:152
5585
+ msgid "(required for XML feed only)"
5586
+ msgstr ""
5587
+
5588
+ #: application/modules/Feed/FeedConfig.php:154
5589
  msgid "(required)"
5590
  msgstr ""
5591
 
5592
+ #: application/modules/Feed/FeedConfig.php:156
5593
  msgid "(optional)"
5594
  msgstr ""
5595
 
5596
+ #: application/modules/Feed/FeedConfig.php:163
5597
  msgid "In your feed"
5598
  msgstr ""
5599
 
5600
+ #: application/modules/Feed/FeedModule.php:26
5601
  msgid "Add new"
5602
  msgstr ""
5603
 
6032
 
6033
  #: application/modules/Kelkoo/KelkooConfig.php:23
6034
  msgid ""
6035
+ "In order to access the Kelkoo Group Shopping API you must have a token. You "
6036
+ "can generate these from the credentials page from the left menu of your "
6037
+ "account."
6038
  msgstr ""
6039
 
6040
+ #: application/modules/Kelkoo/KelkooConfig.php:36
 
 
 
 
 
 
 
6041
  msgid "Region <span class=\"cegg_required\">*</span>"
6042
  msgstr ""
6043
 
6044
+ #: application/modules/Kelkoo/KelkooConfig.php:39
6045
  msgid "- Choose your region -"
6046
  msgstr ""
6047
 
6048
+ #: application/modules/Kelkoo/KelkooConfig.php:123
6049
+ msgid "Match strength"
6050
  msgstr ""
6051
 
6052
  #: application/modules/Kelkoo/KelkooConfig.php:124
6053
+ msgid "Query match strength for query terms."
6054
  msgstr ""
6055
 
6056
+ #: application/modules/Kelkoo/KelkooConfig.php:128
6057
+ msgid "All the offers matching term 1 AND term 2"
6058
  msgstr ""
6059
 
6060
+ #: application/modules/Kelkoo/KelkooConfig.php:129
6061
+ msgid "All the offers matching term 1 OR term 2"
6062
  msgstr ""
6063
 
6064
+ #: application/modules/Kelkoo/KelkooConfig.php:130
6065
+ msgid "Query operator OR if no result with AND"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6066
  msgstr ""
6067
 
6068
  #: application/modules/Kelkoo/KelkooConfig.php:155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6069
  msgid "Rebate percentage"
6070
  msgstr ""
6071
 
6072
+ #: application/modules/Kelkoo/KelkooConfig.php:156
6073
  msgid ""
6074
  "When set to 30 for example, the response will return offers that have a sale "
6075
  "price discounted by 30% or more."
6076
  msgstr ""
6077
 
6078
+ #: application/modules/Kelkoo/KelkooConfig.php:180
 
 
 
 
6079
  #: application/modules/SkimlinksCoupons/SkimlinksCouponsConfig.php:117
6080
  msgid "Merchant ID"
6081
  msgstr ""
6082
 
6083
+ #: application/modules/Kelkoo/KelkooConfig.php:181
6084
  msgid "Limit the search to a specific merchant."
6085
  msgstr ""
6086
 
6087
+ #: application/modules/Kelkoo/KelkooConfig.php:190
6088
+ msgid "Description size in characters."
6089
+ msgstr ""
6090
+
6091
+ #: application/modules/Kelkoo/KelkooModule.php:48
6092
+ msgid ""
6093
+ "Kelkoo launched a new tool for API that will replace the current eCS "
6094
+ "integration. Please visit <a href=\"%s\">Kelkoo module settings</a> to get "
6095
+ "started with the new API."
6096
+ msgstr ""
6097
+
6098
  #: application/modules/Linkshare/LinkshareConfig.php:23
6099
  msgid ""
6100
  "Linkshare access key. Go to your account in Linkshare and follow \"LINKS -> "
6261
  msgid "Lomadee affiliate network"
6262
  msgstr ""
6263
 
 
 
 
 
6264
  #: application/modules/LomadeeProducts/LomadeeProductsConfig.php:86
6265
  msgid "The way the offers are sorted."
6266
  msgstr ""
6932
  msgstr ""
6933
 
6934
  #: application/modules/TradedoublerProducts/TradedoublerProductsConfig.php:94
6935
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:126
6936
  msgid "Feed ID"
6937
  msgstr ""
6938
 
6954
  msgstr ""
6955
 
6956
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:23
6957
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:23
6958
  msgid ""
6959
  "You can find your Customer ID and Passphrase by logging onto your "
6960
  "TradeTracker account and navagating to \"Creatives -> <a href=\"https://"
6963
  msgstr ""
6964
 
6965
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:52
6966
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:52
6967
  msgid ""
6968
  "Login into your TradeTracker control panel. Click on \"<a href=\"https://"
6969
  "affiliate.tradetracker.com/customerSite/list\">My Sites</a>\" in the Account "
6972
  msgstr ""
6973
 
6974
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:68
6975
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:76
6976
  msgid "Your TradeTracker locale."
6977
  msgstr ""
6978
 
6996
  msgstr ""
6997
 
6998
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:137
6999
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:144
7000
  msgid "Campaign ID"
7001
  msgstr ""
7002
 
7003
  #: application/modules/TradetrackerCoupons/TradetrackerCouponsConfig.php:146
7004
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:153
7005
  msgid "Campaign Category ID"
7006
  msgstr ""
7007
 
7013
  msgid "Include unsubscribed campaigns."
7014
  msgstr ""
7015
 
7016
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:135
7017
  msgid "Feed Category Name"
7018
  msgstr ""
7019
 
7020
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:162
7021
  #: application/modules/Viglink/ViglinkConfig.php:105
7022
  msgid "Price From"
7023
  msgstr ""
7024
 
7025
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:171
7026
  #: application/modules/Viglink/ViglinkConfig.php:114
7027
  msgid "Price To"
7028
  msgstr ""
7029
 
7030
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:199
7031
  msgid "Set this status if the product is not found."
7032
  msgstr ""
7033
 
7034
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:211
7035
  msgid "Time in seconds for updating prices. 0 - never update."
7036
  msgstr ""
7037
 
7038
+ #: application/modules/TradetrackerProducts/TradetrackerProductsConfig.php:212
7039
  msgid "Experimental feature for this module."
7040
  msgstr ""
7041
 
7310
  "Parse customer reviews. It takes more time. Don't check if you don't need it."
7311
  msgstr ""
7312
 
7313
+ #: application/modules/Walmart/WalmartModule.php:50
7314
  msgid "<a href=\"%s\">Walmart module</a> requires the OpenSSL PHP extension!"
7315
  msgstr ""
7316
 
7419
  msgstr ""
7420
 
7421
  #: application/templates/blocks/item_after_price_row.php:12
7422
+ #: application/templates/blocks/list_row.php:43
7423
  #: templates/block_offers_logo.php:64 templates/block_price_comparison.php:51
7424
  msgid "%d new from %s"
7425
  msgstr ""
7426
 
7427
  #: application/templates/blocks/item_after_price_row.php:15
7428
+ #: application/templates/blocks/list_row.php:48
7429
  #: templates/block_offers_logo.php:69 templates/block_price_comparison.php:56
7430
  msgid "%d used from %s"
7431
  msgstr ""
7515
  msgid "Create Your Free Price Drop Alert!"
7516
  msgstr ""
7517
 
7518
+ #: templates/block_price_comparison.php:77
7519
  #: templates/block_price_comparison_card.php:55
7520
  #: templates/block_text_links.php:39
7521
  msgid "Last Amazon price update was: %s"
languages/tpl/content-egg-tpl.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the Content Egg<stripfree> Pro</stripfree> package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Content Egg<stripfree> Pro</stripfree> 8.9.0\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/content-egg-tpl\n"
7
- "POT-Creation-Date: 2021-05-07 08:37:39+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -158,8 +158,8 @@ msgstr ""
158
  #: application/WooIntegrator.php:544 application/admin/GeneralConfig.php:45
159
  #: application/templates/blocks/grid_row.php:43
160
  #: application/templates/blocks/item_row.php:37
161
- #: application/templates/blocks/list_row.php:33
162
- #: application/templates/data_list.php:25
163
  #: application/templates/data_price_tracker_alert.php:43
164
  #: templates/block_offers_logo.php:55 templates/block_price_comparison.php:44
165
  msgid "Last updated on %s"
@@ -170,17 +170,17 @@ msgid "Price per unit: %s"
170
  msgstr ""
171
 
172
  #: application/admin/GeneralConfig.php:43
173
- #: application/helpers/TemplateHelper.php:884
174
  msgid "in stock"
175
  msgstr ""
176
 
177
  #: application/admin/GeneralConfig.php:44
178
- #: application/helpers/TemplateHelper.php:886
179
  msgid "out of stock"
180
  msgstr ""
181
 
182
  #: application/admin/GeneralConfig.php:46
183
- #: templates/block_price_comparison.php:76
184
  #: templates/block_price_comparison_card.php:55
185
  #: templates/block_text_links.php:39
186
  msgid "Last Amazon price update was: %s"
@@ -189,24 +189,24 @@ msgstr ""
189
  #: application/admin/GeneralConfig.php:47
190
  #: application/modules/Amazon/templates/data_compare.php:98
191
  #: application/modules/Ozon/templates/data_compare.php:78
192
- #: application/templates/blocks/item_row.php:55
193
- #: application/templates/blocks/list_row.php:53
194
  #: application/templates/data_price_tracker_alert.php:48
195
- #: templates/block_offers_logo.php:75 templates/wdgt_price_movers_grid.php:72
196
  #: templates/wdgt_price_movers_list.php:48
197
  msgid "as of %s"
198
  msgstr ""
199
 
200
  #: application/admin/GeneralConfig.php:48
201
  #: application/templates/blocks/item_after_price_row.php:12
202
- #: application/templates/blocks/list_row.php:42
203
  #: templates/block_offers_logo.php:64 templates/block_price_comparison.php:51
204
  msgid "%d new from %s"
205
  msgstr ""
206
 
207
  #: application/admin/GeneralConfig.php:49
208
  #: application/templates/blocks/item_after_price_row.php:15
209
- #: application/templates/blocks/list_row.php:47
210
  #: templates/block_offers_logo.php:69 templates/block_price_comparison.php:56
211
  msgid "%d used from %s"
212
  msgstr ""
@@ -232,7 +232,7 @@ msgid "Plus %s Cash Back"
232
  msgstr ""
233
 
234
  #: application/admin/GeneralConfig.php:53
235
- #: application/helpers/TemplateHelper.php:367
236
  #: application/modules/Amazon/templates/data_compare.php:65
237
  #: application/modules/Ozon/templates/data_compare.php:68
238
  #: application/templates/data_price_tracker_alert.php:39
@@ -354,17 +354,17 @@ msgid "Search Results for \"%s\""
354
  msgstr ""
355
 
356
  #: application/admin/GeneralConfig.php:77
357
- #: application/helpers/TemplateHelper.php:771
358
  msgid "today"
359
  msgstr ""
360
 
361
  #: application/admin/GeneralConfig.php:78
362
- #: application/helpers/TemplateHelper.php:777
363
  msgid "%d day ago"
364
  msgstr ""
365
 
366
  #: application/admin/GeneralConfig.php:79
367
- #: application/helpers/TemplateHelper.php:775
368
  msgid "%d days ago"
369
  msgstr ""
370
 
@@ -373,7 +373,7 @@ msgid "Buy Now"
373
  msgstr ""
374
 
375
  #: application/admin/GeneralConfig.php:443
376
- #: application/helpers/TemplateHelper.php:753
377
  msgid "Shop Sale"
378
  msgstr ""
379
 
@@ -382,17 +382,17 @@ msgstr ""
382
  msgid "Future"
383
  msgstr ""
384
 
385
- #: application/components/ContentManager.php:483
386
  #: application/modules/Market/templates/data_item.php:128
387
  msgid "Pros:"
388
  msgstr ""
389
 
390
- #: application/components/ContentManager.php:485
391
  #: application/modules/Market/templates/data_item.php:129
392
  msgid "Cons:"
393
  msgstr ""
394
 
395
- #: application/components/ContentManager.php:573
396
  msgid "Rating"
397
  msgstr ""
398
 
@@ -420,15 +420,15 @@ msgstr ""
420
  msgid "m"
421
  msgstr ""
422
 
423
- #: application/helpers/TemplateHelper.php:748
424
  msgid "BUY NOW"
425
  msgstr ""
426
 
427
- #: application/helpers/TemplateHelper.php:785
428
  msgid "As an Amazon associate I earn from qualifying purchases."
429
  msgstr ""
430
 
431
- #: application/helpers/TemplateHelper.php:785
432
  msgid ""
433
  "Product prices and availability are accurate as of the date/time indicated "
434
  "and are subject to change. Any price and availability information displayed "
@@ -442,6 +442,7 @@ msgstr ""
442
  #: application/modules/Aliexpress/templates/data_grid.php:9
443
  #: application/modules/Aliexpress2/templates/data_grid.php:9
444
  #: application/modules/Amazon/templates/data_grid.php:9
 
445
  #: application/modules/AvantlinkProducts/templates/data_grid.php:9
446
  #: application/modules/Awin/templates/data_grid.php:9
447
  #: application/modules/Bolcom/templates/data_grid.php:9
@@ -449,6 +450,7 @@ msgstr ""
449
  #: application/modules/CjProducts/templates/data_grid.php:9
450
  #: application/modules/Daisycon/templates/data_grid.php:9
451
  #: application/modules/Ebay/templates/data_grid.php:9
 
452
  #: application/modules/Envato/templates/data_grid.php:9
453
  #: application/modules/Feed/templates/data_grid.php:8
454
  #: application/modules/Flipkart/templates/data_grid.php:9
@@ -481,6 +483,7 @@ msgstr ""
481
  #: application/modules/Aliexpress/templates/data_item.php:9
482
  #: application/modules/Aliexpress2/templates/data_item.php:9
483
  #: application/modules/Amazon/templates/data_item.php:9
 
484
  #: application/modules/AvantlinkProducts/templates/data_item.php:9
485
  #: application/modules/Awin/templates/data_item.php:9
486
  #: application/modules/Bolcom/templates/data_item.php:9
@@ -488,6 +491,7 @@ msgstr ""
488
  #: application/modules/CjProducts/templates/data_item.php:9
489
  #: application/modules/Daisycon/templates/data_item.php:9
490
  #: application/modules/Ebay/templates/data_item.php:9
 
491
  #: application/modules/Envato/templates/data_item.php:9
492
  #: application/modules/Feed/templates/data_item.php:8
493
  #: application/modules/Flipkart/templates/data_item.php:9
@@ -521,6 +525,7 @@ msgstr ""
521
  #: application/modules/Aliexpress/templates/data_list.php:8
522
  #: application/modules/Aliexpress2/templates/data_list.php:8
523
  #: application/modules/Amazon/templates/data_list.php:8
 
524
  #: application/modules/AvantlinkProducts/templates/data_list.php:8
525
  #: application/modules/Awin/templates/data_list.php:8
526
  #: application/modules/Bolcom/templates/data_list.php:8
@@ -528,6 +533,7 @@ msgstr ""
528
  #: application/modules/CjProducts/templates/data_list.php:8
529
  #: application/modules/Daisycon/templates/data_list.php:8
530
  #: application/modules/Ebay/templates/data_list.php:8
 
531
  #: application/modules/Envato/templates/data_list.php:8
532
  #: application/modules/Feed/templates/data_list.php:7
533
  #: application/modules/Flipkart/templates/data_list.php:8
@@ -561,12 +567,14 @@ msgstr ""
561
  #: application/modules/Aliexpress/templates/data_price_tracker_alert.php:9
562
  #: application/modules/Aliexpress2/templates/data_price_tracker_alert.php:9
563
  #: application/modules/Amazon/templates/data_price_tracker_alert.php:9
 
564
  #: application/modules/AvantlinkProducts/templates/data_price_tracker_alert.php:9
565
  #: application/modules/Awin/templates/data_price_tracker_alert.php:9
566
  #: application/modules/Bolcom/templates/data_price_tracker_alert.php:9
567
  #: application/modules/CjProducts/templates/data_price_tracker_alert.php:9
568
  #: application/modules/Daisycon/templates/data_price_tracker_alert.php:9
569
  #: application/modules/Ebay/templates/data_price_tracker_alert.php:9
 
570
  #: application/modules/Feed/templates/data_price_tracker_alert.php:8
571
  #: application/modules/Flipkart/templates/data_price_tracker_alert.php:9
572
  #: application/modules/GdeSlon/templates/data_price_tracker_alert.php:9
@@ -602,6 +610,7 @@ msgid "Coupons"
602
  msgstr ""
603
 
604
  #: application/modules/Amazon/templates/data_add_to_cart.php:11
 
605
  msgid "ADD ALL TO CART"
606
  msgstr ""
607
 
@@ -905,15 +914,15 @@ msgstr ""
905
  msgid "The lowest price of %s was obtained on %s."
906
  msgstr ""
907
 
908
- #: templates/block_top_listing.php:42
909
  msgid "Best choice"
910
  msgstr ""
911
 
912
- #: templates/block_top_listing.php:44
913
  msgid "Recommended"
914
  msgstr ""
915
 
916
- #: templates/block_top_listing.php:46
917
  msgid "High quality"
918
  msgstr ""
919
 
2
  # This file is distributed under the same license as the Content Egg<stripfree> Pro</stripfree> package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Content Egg<stripfree> Pro</stripfree> 9.3.0\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/content-egg-tpl\n"
7
+ "POT-Creation-Date: 2021-09-15 10:52:56+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
158
  #: application/WooIntegrator.php:544 application/admin/GeneralConfig.php:45
159
  #: application/templates/blocks/grid_row.php:43
160
  #: application/templates/blocks/item_row.php:37
161
+ #: application/templates/blocks/list_row.php:34
162
+ #: application/templates/data_list.php:28
163
  #: application/templates/data_price_tracker_alert.php:43
164
  #: templates/block_offers_logo.php:55 templates/block_price_comparison.php:44
165
  msgid "Last updated on %s"
170
  msgstr ""
171
 
172
  #: application/admin/GeneralConfig.php:43
173
+ #: application/helpers/TemplateHelper.php:887
174
  msgid "in stock"
175
  msgstr ""
176
 
177
  #: application/admin/GeneralConfig.php:44
178
+ #: application/helpers/TemplateHelper.php:889
179
  msgid "out of stock"
180
  msgstr ""
181
 
182
  #: application/admin/GeneralConfig.php:46
183
+ #: templates/block_price_comparison.php:77
184
  #: templates/block_price_comparison_card.php:55
185
  #: templates/block_text_links.php:39
186
  msgid "Last Amazon price update was: %s"
189
  #: application/admin/GeneralConfig.php:47
190
  #: application/modules/Amazon/templates/data_compare.php:98
191
  #: application/modules/Ozon/templates/data_compare.php:78
192
+ #: application/templates/blocks/item_row.php:59
193
+ #: application/templates/blocks/list_row.php:56
194
  #: application/templates/data_price_tracker_alert.php:48
195
+ #: templates/block_offers_logo.php:76 templates/wdgt_price_movers_grid.php:72
196
  #: templates/wdgt_price_movers_list.php:48
197
  msgid "as of %s"
198
  msgstr ""
199
 
200
  #: application/admin/GeneralConfig.php:48
201
  #: application/templates/blocks/item_after_price_row.php:12
202
+ #: application/templates/blocks/list_row.php:43
203
  #: templates/block_offers_logo.php:64 templates/block_price_comparison.php:51
204
  msgid "%d new from %s"
205
  msgstr ""
206
 
207
  #: application/admin/GeneralConfig.php:49
208
  #: application/templates/blocks/item_after_price_row.php:15
209
+ #: application/templates/blocks/list_row.php:48
210
  #: templates/block_offers_logo.php:69 templates/block_price_comparison.php:56
211
  msgid "%d used from %s"
212
  msgstr ""
232
  msgstr ""
233
 
234
  #: application/admin/GeneralConfig.php:53
235
+ #: application/helpers/TemplateHelper.php:370
236
  #: application/modules/Amazon/templates/data_compare.php:65
237
  #: application/modules/Ozon/templates/data_compare.php:68
238
  #: application/templates/data_price_tracker_alert.php:39
354
  msgstr ""
355
 
356
  #: application/admin/GeneralConfig.php:77
357
+ #: application/helpers/TemplateHelper.php:774
358
  msgid "today"
359
  msgstr ""
360
 
361
  #: application/admin/GeneralConfig.php:78
362
+ #: application/helpers/TemplateHelper.php:780
363
  msgid "%d day ago"
364
  msgstr ""
365
 
366
  #: application/admin/GeneralConfig.php:79
367
+ #: application/helpers/TemplateHelper.php:778
368
  msgid "%d days ago"
369
  msgstr ""
370
 
373
  msgstr ""
374
 
375
  #: application/admin/GeneralConfig.php:443
376
+ #: application/helpers/TemplateHelper.php:756
377
  msgid "Shop Sale"
378
  msgstr ""
379
 
382
  msgid "Future"
383
  msgstr ""
384
 
385
+ #: application/components/ContentManager.php:503
386
  #: application/modules/Market/templates/data_item.php:128
387
  msgid "Pros:"
388
  msgstr ""
389
 
390
+ #: application/components/ContentManager.php:505
391
  #: application/modules/Market/templates/data_item.php:129
392
  msgid "Cons:"
393
  msgstr ""
394
 
395
+ #: application/components/ContentManager.php:593
396
  msgid "Rating"
397
  msgstr ""
398
 
420
  msgid "m"
421
  msgstr ""
422
 
423
+ #: application/helpers/TemplateHelper.php:751
424
  msgid "BUY NOW"
425
  msgstr ""
426
 
427
+ #: application/helpers/TemplateHelper.php:788
428
  msgid "As an Amazon associate I earn from qualifying purchases."
429
  msgstr ""
430
 
431
+ #: application/helpers/TemplateHelper.php:788
432
  msgid ""
433
  "Product prices and availability are accurate as of the date/time indicated "
434
  "and are subject to change. Any price and availability information displayed "
442
  #: application/modules/Aliexpress/templates/data_grid.php:9
443
  #: application/modules/Aliexpress2/templates/data_grid.php:9
444
  #: application/modules/Amazon/templates/data_grid.php:9
445
+ #: application/modules/AmazonNoApi/templates/data_grid.php:9
446
  #: application/modules/AvantlinkProducts/templates/data_grid.php:9
447
  #: application/modules/Awin/templates/data_grid.php:9
448
  #: application/modules/Bolcom/templates/data_grid.php:9
450
  #: application/modules/CjProducts/templates/data_grid.php:9
451
  #: application/modules/Daisycon/templates/data_grid.php:9
452
  #: application/modules/Ebay/templates/data_grid.php:9
453
+ #: application/modules/Ebay2/templates/data_grid.php:9
454
  #: application/modules/Envato/templates/data_grid.php:9
455
  #: application/modules/Feed/templates/data_grid.php:8
456
  #: application/modules/Flipkart/templates/data_grid.php:9
483
  #: application/modules/Aliexpress/templates/data_item.php:9
484
  #: application/modules/Aliexpress2/templates/data_item.php:9
485
  #: application/modules/Amazon/templates/data_item.php:9
486
+ #: application/modules/AmazonNoApi/templates/data_item.php:9
487
  #: application/modules/AvantlinkProducts/templates/data_item.php:9
488
  #: application/modules/Awin/templates/data_item.php:9
489
  #: application/modules/Bolcom/templates/data_item.php:9
491
  #: application/modules/CjProducts/templates/data_item.php:9
492
  #: application/modules/Daisycon/templates/data_item.php:9
493
  #: application/modules/Ebay/templates/data_item.php:9
494
+ #: application/modules/Ebay2/templates/data_item.php:9
495
  #: application/modules/Envato/templates/data_item.php:9
496
  #: application/modules/Feed/templates/data_item.php:8
497
  #: application/modules/Flipkart/templates/data_item.php:9
525
  #: application/modules/Aliexpress/templates/data_list.php:8
526
  #: application/modules/Aliexpress2/templates/data_list.php:8
527
  #: application/modules/Amazon/templates/data_list.php:8
528
+ #: application/modules/AmazonNoApi/templates/data_list.php:8
529
  #: application/modules/AvantlinkProducts/templates/data_list.php:8
530
  #: application/modules/Awin/templates/data_list.php:8
531
  #: application/modules/Bolcom/templates/data_list.php:8
533
  #: application/modules/CjProducts/templates/data_list.php:8
534
  #: application/modules/Daisycon/templates/data_list.php:8
535
  #: application/modules/Ebay/templates/data_list.php:8
536
+ #: application/modules/Ebay2/templates/data_list.php:8
537
  #: application/modules/Envato/templates/data_list.php:8
538
  #: application/modules/Feed/templates/data_list.php:7
539
  #: application/modules/Flipkart/templates/data_list.php:8
567
  #: application/modules/Aliexpress/templates/data_price_tracker_alert.php:9
568
  #: application/modules/Aliexpress2/templates/data_price_tracker_alert.php:9
569
  #: application/modules/Amazon/templates/data_price_tracker_alert.php:9
570
+ #: application/modules/AmazonNoApi/templates/data_price_tracker_alert.php:9
571
  #: application/modules/AvantlinkProducts/templates/data_price_tracker_alert.php:9
572
  #: application/modules/Awin/templates/data_price_tracker_alert.php:9
573
  #: application/modules/Bolcom/templates/data_price_tracker_alert.php:9
574
  #: application/modules/CjProducts/templates/data_price_tracker_alert.php:9
575
  #: application/modules/Daisycon/templates/data_price_tracker_alert.php:9
576
  #: application/modules/Ebay/templates/data_price_tracker_alert.php:9
577
+ #: application/modules/Ebay2/templates/data_price_tracker_alert.php:9
578
  #: application/modules/Feed/templates/data_price_tracker_alert.php:8
579
  #: application/modules/Flipkart/templates/data_price_tracker_alert.php:9
580
  #: application/modules/GdeSlon/templates/data_price_tracker_alert.php:9
610
  msgstr ""
611
 
612
  #: application/modules/Amazon/templates/data_add_to_cart.php:11
613
+ #: application/modules/AmazonNoApi/templates/data_add_to_cart.php:11
614
  msgid "ADD ALL TO CART"
615
  msgstr ""
616
 
914
  msgid "The lowest price of %s was obtained on %s."
915
  msgstr ""
916
 
917
+ #: templates/block_top_listing.php:45
918
  msgid "Best choice"
919
  msgstr ""
920
 
921
+ #: templates/block_top_listing.php:47
922
  msgid "Recommended"
923
  msgstr ""
924
 
925
+ #: templates/block_top_listing.php:49
926
  msgid "High quality"
927
  msgstr ""
928
 
readme.txt CHANGED
@@ -2,9 +2,9 @@
2
  Contributors: keywordrush
3
  Tags: content, affiliate, autoblogging, affilinet, coupons, linkshare, shareasale, amazon, flickr, youtube, commission junction, aliexpress, cj, images, wikipedia, freebase, ecommerce, links, shortcode, monetize, search engine optimization, ebay, zanox, moneymaking, price comparison, google images, timesaving, clickbank, linkshare, pixabay, admitad, affilitewindow, optimisemedia, tradedoubler, flipkart, paytm, price alert, tracker, impactradius, pepperjam, udemy, envato, tradetracker, viglink, skimlinks
4
  Requires at least: 4.6.1
5
- Tested up to: 5.7.2
6
  Requires PHP: 5.4
7
- Stable tag: 5.2.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -14,7 +14,7 @@ All in one solution for creating affiliate websites.
14
 
15
  = What is this plugin for? =
16
 
17
- * Product revews and niche blog
18
  * Price comparison site
19
  * Daily deals website
20
  * WooCommerce directories
@@ -99,6 +99,27 @@ This section describes how to install the plugin and get it working.
99
 
100
  == Changelog ==
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  = 5.2.0 =
103
 
104
  * New: Feed module to work with custom CSV feeds.
@@ -141,6 +162,7 @@ This section describes how to install the plugin and get it working.
141
  * Fix: External featured images: WP 5.4+ support.
142
 
143
  = 5.0.0 =
 
144
  * New: Offer Module: Global XPath and Deeplink settings.
145
  * New: Offer Module: Multiple XPath queries.
146
  * New: Offer Module: Display the last occurred error.
@@ -162,10 +184,12 @@ This section describes how to install the plugin and get it working.
162
  * Deprecated: Amazon module: https://www.keywordrush.com/docs/content-egg/Amazon.html#amazon_apiv4_deprecated
163
 
164
  = 4.9.9 =
 
165
  * New: Lomadee link builder. Syntax for Deeplink: [lomadee][sourceId]
166
  * Improvement: CJ modules: Developer keys have been deprecated. Please use personal access tokens instead.
167
 
168
  = 4.9.8 =
 
169
  * New: Product management tool.
170
  * New: Option 'Out of Stock products' - how to deal with Out of Stock products.
171
  * New: Accept privacy policy checkbox for price drop alert.
@@ -184,12 +208,14 @@ This section describes how to install the plugin and get it working.
184
  * Fix: GdeSlon module multiple Shop ID filter.
185
 
186
  = 4.5.0 =
 
187
  * New: GdeSlon module.
188
  * New: Price alert subscription report: added delete URL and unsubscribe URL.
189
  * Fix: Dublicate images during update by keyword.
190
  * Fix: Currency converter to EUR.
191
 
192
  = 4.4.3 =
 
193
  * New: Price Movers widget.
194
  * New: Price Movers shortcode: [content-egg-price-movers].
195
  * New: Currency shortcode parameter to convert all prices to one currency: [content-egg-block template=offers_grid currency=EUR]
@@ -202,6 +228,7 @@ This section describes how to install the plugin and get it working.
202
  * New: Ability to edit Domain field for products.
203
 
204
  = 4.3.0 =
 
205
  * New: Google Images module.
206
  * New: Coupon module: Hide expired coupons option.
207
  * New: Coupon module: Hide future coupons option.
@@ -212,6 +239,7 @@ This section describes how to install the plugin and get it working.
212
  * Fix: CJ Links module.
213
 
214
  = 4.2.0 =
 
215
  * New: Coupon module.
216
  * New: Show price update date for WooCommerce products.
217
  * New: Ability to edit product attributes.
@@ -228,13 +256,16 @@ This section describes how to install the plugin and get it working.
228
  * Deprecated: Admitad Products module.
229
 
230
  = 4.0.0 =
 
231
  * New: Skimlinks Coupons module.
232
 
233
  = 3.9.1 =
 
234
  * Fix: Admitad module.
235
  * Fix: Autoblogging default category.
236
 
237
  = 3.9.0 =
 
238
  * New: WooCommerce products synchronization.
239
  * New: WooCommerce attributes synchronization (global and custom).
240
  * New: WooCommerce autoblogging.
@@ -255,6 +286,7 @@ This section describes how to install the plugin and get it working.
255
  * Fix: Subscribers CSV export.
256
 
257
  = 3.7.0 =
 
258
  * New: Price filter in search form.
259
  * New: Price filter for autoupdate (Amazon, Ebay, Aliexpress).
260
  * New: Amazon.com.mx support.
@@ -262,6 +294,7 @@ This section describes how to install the plugin and get it working.
262
  * New: Prefill from Arbitrary custom field keyword source.
263
 
264
  = 3.6.0 =
 
265
  * New: Autoblogging: Minimum reviews required.
266
  * New: Autoblogging: Dynamic categories.
267
  * Improvement: Offer module: Old price.
@@ -271,6 +304,7 @@ This section describes how to install the plugin and get it working.
271
  * Improvement: Loco Translate ready.
272
 
273
  = 3.5.0 =
 
274
  * New: Frontend product search.
275
  * New: Buy now button text / Coupon button text options.
276
  * Improvement: Prefix for catalog url: [catalog limit=3]
@@ -279,6 +313,7 @@ This section describes how to install the plugin and get it working.
279
  * Fix: Amazon price update if more than 10 items on page.
280
 
281
  = 3.4.0 =
 
282
  * New: Short redirect url.
283
  * New: Custom redirect prefix.
284
  * New: Settings for From Name and From Email.
@@ -289,6 +324,7 @@ This section describes how to install the plugin and get it working.
289
  * Improvement: Dynamically changed Deeplinks.
290
 
291
  = 3.2.0 =
 
292
  * New: Block template: Price statistics.
293
  * New: Ability to add reviews as post comments for AE modules.
294
  * New: Rating field for Offer module.
@@ -298,6 +334,7 @@ This section describes how to install the plugin and get it working.
298
  * Fix: Product keyword tool.
299
 
300
  = 3.0.0 =
 
301
  * New: Offer module - manually create offer from any site with price update.
302
  * New: BingImages - new Cognitive Services API.
303
  * New: RelatedKeywords - new Cognitive Services API.
@@ -311,6 +348,7 @@ This section describes how to install the plugin and get it working.
311
  * New: Source language in English.
312
 
313
  = 2.9.0 =
 
314
  * New: Products update via cron job.
315
  * New: Next, offset, limit params for block shortcode [content-egg-block template=offers_list next=3].
316
  * New: Merchant visible url.
@@ -320,6 +358,7 @@ This section describes how to install the plugin and get it working.
320
  * Improvement: Module templates.
321
 
322
  = 2.8.0 =
 
323
  * New: Price tracker.
324
  * New: Price alert.
325
  * New: Title shortcode param [content-egg module=Amazon title="My Title"].
@@ -328,29 +367,35 @@ This section describes how to install the plugin and get it working.
328
  * Fix: Same Amazon ASIN in different locales.
329
 
330
  = 2.7.0 =
 
331
  * New: Admitad Products module.
332
  * New: 301 local redirect for outbound affiliate links.
333
 
334
  = 2.6.0 =
 
335
  * New: Autoblogging batch creation.
336
  * Improvement: Fill utility now works for all post types that are checked in the general CE settings.
337
  * Improvement: Fill utility now works for post statuses: 'publish', 'future'.
338
 
339
  = 2.5.0 =
 
340
  * New: Affiliate Egg plugin integration.
341
  * Fix: Bug Fixes.
342
 
343
  = 2.4.0 =
 
344
  * New: Ability to add modules to existing posts.
345
  * New: Locale parameter for amazon shortcode: [content-egg module=Amazon locale=US]
346
  * Deprecated: Freebase module. Freebase API has been officially closed.
347
 
348
  = 2.3.0 =
 
349
  * New: Amazon module: Custom associate tag.
350
  * New: Amazon module: 50 results now available.
351
  * New: Drag and drop for order of items.
352
 
353
  = 2.2.0 =
 
354
  * New: Pixabay module.
355
  * New: Import/export settings.
356
  * New: Keyword parsers for autoblogging.
@@ -360,10 +405,12 @@ This section describes how to install the plugin and get it working.
360
  * New: Amazon module: Rewrite image urls when using https.
361
 
362
  = 2.1.0 =
 
363
  * Fix: Amazon decode url.
364
  * Removed: Google Images module. Google Images Search API has been officially closed.
365
 
366
  = 2.0.1 =
 
367
  * New: Related Keywords module.
368
  * New: RSS Fetcher module.
369
  * New: Post Types option.
@@ -375,23 +422,28 @@ This section describes how to install the plugin and get it working.
375
  * Removed: Amazon customer reviews parser has become unstable and is no longer available.
376
 
377
  = 1.9.0 =
 
378
  * New: Autoblogging!
379
  * New: Priority option for modules.
380
  * New: "Compare" template for Amazon.
381
  * Improvement: Module templates.
382
 
383
  = 1.8.0 =
 
384
  * New: Affilinet Coupons module.
385
  * New: Content egg block shortcodes.
386
  * Fix: Amazon IN/BR locale products search.
387
 
388
  = 1.7.1 =
 
389
  * New: CJ Links module.
390
  * Enhancement: Module templates.
391
  * Fix: Admin panel interface.
392
 
393
  = 1.6.1 =
 
394
  * Fix: Error in uninstallation process.
395
 
396
  = 1.6.0 =
 
397
  * Initial release.
2
  Contributors: keywordrush
3
  Tags: content, affiliate, autoblogging, affilinet, coupons, linkshare, shareasale, amazon, flickr, youtube, commission junction, aliexpress, cj, images, wikipedia, freebase, ecommerce, links, shortcode, monetize, search engine optimization, ebay, zanox, moneymaking, price comparison, google images, timesaving, clickbank, linkshare, pixabay, admitad, affilitewindow, optimisemedia, tradedoubler, flipkart, paytm, price alert, tracker, impactradius, pepperjam, udemy, envato, tradetracker, viglink, skimlinks
4
  Requires at least: 4.6.1
5
+ Tested up to: 5.9
6
  Requires PHP: 5.4
7
+ Stable tag: 5.3.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
14
 
15
  = What is this plugin for? =
16
 
17
+ * Product reviews and niche blog
18
  * Price comparison site
19
  * Daily deals website
20
  * WooCommerce directories
99
 
100
  == Changelog ==
101
 
102
+ = 5.3.0 =
103
+
104
+ * New: Multiple keyword search.
105
+ * New: REST API for module data.
106
+ * New: Feed module: Support for XML format.
107
+ * New: Feed module: Deeplink.
108
+ * New: Feed module: Feed encoding option.
109
+ * New: Feed module: JSON feed format.
110
+ * New: Module shortcodes: sort parameter.
111
+ * New: Offer modules: Default currency option.
112
+ * New: Shortcode parameters: add_query_arg.
113
+ * Improvement: Locale filter for block shortcodes.
114
+ * Improvement: Feed modules: Feeds will be updated twice a day.
115
+ * Improvement: Feed modules: Update by page view.
116
+ * Improvement: Offer modules: Domain editing capability.
117
+ * Improvement: Alt tag for featured images.
118
+ * Fix: AMP styles.
119
+ * Fix: Feed modules: WooCommerce sync.
120
+ * Fix: Feed modules: Stock status.
121
+ * Fix: Fixed theoretical security issue (XSS) in admin dashboard.
122
+
123
  = 5.2.0 =
124
 
125
  * New: Feed module to work with custom CSV feeds.
162
  * Fix: External featured images: WP 5.4+ support.
163
 
164
  = 5.0.0 =
165
+
166
  * New: Offer Module: Global XPath and Deeplink settings.
167
  * New: Offer Module: Multiple XPath queries.
168
  * New: Offer Module: Display the last occurred error.
184
  * Deprecated: Amazon module: https://www.keywordrush.com/docs/content-egg/Amazon.html#amazon_apiv4_deprecated
185
 
186
  = 4.9.9 =
187
+
188
  * New: Lomadee link builder. Syntax for Deeplink: [lomadee][sourceId]
189
  * Improvement: CJ modules: Developer keys have been deprecated. Please use personal access tokens instead.
190
 
191
  = 4.9.8 =
192
+
193
  * New: Product management tool.
194
  * New: Option 'Out of Stock products' - how to deal with Out of Stock products.
195
  * New: Accept privacy policy checkbox for price drop alert.
208
  * Fix: GdeSlon module multiple Shop ID filter.
209
 
210
  = 4.5.0 =
211
+
212
  * New: GdeSlon module.
213
  * New: Price alert subscription report: added delete URL and unsubscribe URL.
214
  * Fix: Dublicate images during update by keyword.
215
  * Fix: Currency converter to EUR.
216
 
217
  = 4.4.3 =
218
+
219
  * New: Price Movers widget.
220
  * New: Price Movers shortcode: [content-egg-price-movers].
221
  * New: Currency shortcode parameter to convert all prices to one currency: [content-egg-block template=offers_grid currency=EUR]
228
  * New: Ability to edit Domain field for products.
229
 
230
  = 4.3.0 =
231
+
232
  * New: Google Images module.
233
  * New: Coupon module: Hide expired coupons option.
234
  * New: Coupon module: Hide future coupons option.
239
  * Fix: CJ Links module.
240
 
241
  = 4.2.0 =
242
+
243
  * New: Coupon module.
244
  * New: Show price update date for WooCommerce products.
245
  * New: Ability to edit product attributes.
256
  * Deprecated: Admitad Products module.
257
 
258
  = 4.0.0 =
259
+
260
  * New: Skimlinks Coupons module.
261
 
262
  = 3.9.1 =
263
+
264
  * Fix: Admitad module.
265
  * Fix: Autoblogging default category.
266
 
267
  = 3.9.0 =
268
+
269
  * New: WooCommerce products synchronization.
270
  * New: WooCommerce attributes synchronization (global and custom).
271
  * New: WooCommerce autoblogging.
286
  * Fix: Subscribers CSV export.
287
 
288
  = 3.7.0 =
289
+
290
  * New: Price filter in search form.
291
  * New: Price filter for autoupdate (Amazon, Ebay, Aliexpress).
292
  * New: Amazon.com.mx support.
294
  * New: Prefill from Arbitrary custom field keyword source.
295
 
296
  = 3.6.0 =
297
+
298
  * New: Autoblogging: Minimum reviews required.
299
  * New: Autoblogging: Dynamic categories.
300
  * Improvement: Offer module: Old price.
304
  * Improvement: Loco Translate ready.
305
 
306
  = 3.5.0 =
307
+
308
  * New: Frontend product search.
309
  * New: Buy now button text / Coupon button text options.
310
  * Improvement: Prefix for catalog url: [catalog limit=3]
313
  * Fix: Amazon price update if more than 10 items on page.
314
 
315
  = 3.4.0 =
316
+
317
  * New: Short redirect url.
318
  * New: Custom redirect prefix.
319
  * New: Settings for From Name and From Email.
324
  * Improvement: Dynamically changed Deeplinks.
325
 
326
  = 3.2.0 =
327
+
328
  * New: Block template: Price statistics.
329
  * New: Ability to add reviews as post comments for AE modules.
330
  * New: Rating field for Offer module.
334
  * Fix: Product keyword tool.
335
 
336
  = 3.0.0 =
337
+
338
  * New: Offer module - manually create offer from any site with price update.
339
  * New: BingImages - new Cognitive Services API.
340
  * New: RelatedKeywords - new Cognitive Services API.
348
  * New: Source language in English.
349
 
350
  = 2.9.0 =
351
+
352
  * New: Products update via cron job.
353
  * New: Next, offset, limit params for block shortcode [content-egg-block template=offers_list next=3].
354
  * New: Merchant visible url.
358
  * Improvement: Module templates.
359
 
360
  = 2.8.0 =
361
+
362
  * New: Price tracker.
363
  * New: Price alert.
364
  * New: Title shortcode param [content-egg module=Amazon title="My Title"].
367
  * Fix: Same Amazon ASIN in different locales.
368
 
369
  = 2.7.0 =
370
+
371
  * New: Admitad Products module.
372
  * New: 301 local redirect for outbound affiliate links.
373
 
374
  = 2.6.0 =
375
+
376
  * New: Autoblogging batch creation.
377
  * Improvement: Fill utility now works for all post types that are checked in the general CE settings.
378
  * Improvement: Fill utility now works for post statuses: 'publish', 'future'.
379
 
380
  = 2.5.0 =
381
+
382
  * New: Affiliate Egg plugin integration.
383
  * Fix: Bug Fixes.
384
 
385
  = 2.4.0 =
386
+
387
  * New: Ability to add modules to existing posts.
388
  * New: Locale parameter for amazon shortcode: [content-egg module=Amazon locale=US]
389
  * Deprecated: Freebase module. Freebase API has been officially closed.
390
 
391
  = 2.3.0 =
392
+
393
  * New: Amazon module: Custom associate tag.
394
  * New: Amazon module: 50 results now available.
395
  * New: Drag and drop for order of items.
396
 
397
  = 2.2.0 =
398
+
399
  * New: Pixabay module.
400
  * New: Import/export settings.
401
  * New: Keyword parsers for autoblogging.
405
  * New: Amazon module: Rewrite image urls when using https.
406
 
407
  = 2.1.0 =
408
+
409
  * Fix: Amazon decode url.
410
  * Removed: Google Images module. Google Images Search API has been officially closed.
411
 
412
  = 2.0.1 =
413
+
414
  * New: Related Keywords module.
415
  * New: RSS Fetcher module.
416
  * New: Post Types option.
422
  * Removed: Amazon customer reviews parser has become unstable and is no longer available.
423
 
424
  = 1.9.0 =
425
+
426
  * New: Autoblogging!
427
  * New: Priority option for modules.
428
  * New: "Compare" template for Amazon.
429
  * Improvement: Module templates.
430
 
431
  = 1.8.0 =
432
+
433
  * New: Affilinet Coupons module.
434
  * New: Content egg block shortcodes.
435
  * Fix: Amazon IN/BR locale products search.
436
 
437
  = 1.7.1 =
438
+
439
  * New: CJ Links module.
440
  * Enhancement: Module templates.
441
  * Fix: Admin panel interface.
442
 
443
  = 1.6.1 =
444
+
445
  * Fix: Error in uninstallation process.
446
 
447
  = 1.6.0 =
448
+
449
  * Initial release.
res/app/vendor/angular.min.js CHANGED
@@ -327,4 +327,4 @@ f||c.$isEmpty(b)||b.length<=f}}}}},Uc=function(){return{restrict:"A",require:"?n
327
  {DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),
328
  WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,
329
  c){var f=a|0,e=c;void 0===e&&(e=Math.min(b(a),3));Math.pow(10,e);return 1==f&&0==e?"one":"other"}})}]),D(function(){pe(z.document,Mc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
330
- //# sourceMappingURL=angular.min.js.map
327
  {DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),
328
  WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,
329
  c){var f=a|0,e=c;void 0===e&&(e=Math.min(b(a),3));Math.pow(10,e);return 1==f&&0==e?"one":"other"}})}]),D(function(){pe(z.document,Mc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
330
+
res/css/products.css CHANGED
@@ -57,7 +57,7 @@ span.rating_small{white-space:nowrap}
57
  .egg-container {clear: both;}
58
  .egg-list .row-products {clear: both;}
59
  .egg-list .row-products{margin-bottom:15px;margin-top:0}
60
- .egg-container .cegg-image-cell img{max-height: 100px; max-width: 130px;}
61
  .egg-container .cegg-image-cell{text-align:center}
62
  .cegg-image-container img{ vertical-align: top; max-width: 100%; height: auto; display: inline-block; max-height: 350px; }
63
  .egg-container .cegg-no-top-margin{margin-top:0 }
57
  .egg-container {clear: both;}
58
  .egg-list .row-products {clear: both;}
59
  .egg-list .row-products{margin-bottom:15px;margin-top:0}
60
+ .egg-container .cegg-image-cell img{max-height: 100px; max-width: 100%;}
61
  .egg-container .cegg-image-cell{text-align:center}
62
  .cegg-image-container img{ vertical-align: top; max-width: 100%; height: auto; display: inline-block; max-height: 350px; }
63
  .egg-container .cegg-no-top-margin{margin-top:0 }
templates/block_offers_list.php CHANGED
@@ -10,11 +10,10 @@ __('Sorted offers list with product images', 'content-egg-tpl');
10
 
11
  use ContentEgg\application\helpers\TemplateHelper;
12
 
13
- if (isset($data['Amazon']))
14
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
15
 
16
-
17
- $all_items = TemplateHelper::sortAllByPrice($data, $order);
18
  $amazon_last_updated = TemplateHelper::getLastUpdateFormattedAmazon($data);
19
  ?>
20
 
10
 
11
  use ContentEgg\application\helpers\TemplateHelper;
12
 
13
+ if (isset($data['Amazon']) || isset($data['AmazonNoApi']))
14
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
15
 
16
+ $all_items = TemplateHelper::sortAllByPrice($data, $order, $sort);
 
17
  $amazon_last_updated = TemplateHelper::getLastUpdateFormattedAmazon($data);
18
  ?>
19
 
templates/block_offers_list_groups.php CHANGED
@@ -23,7 +23,7 @@ if (!$groups = TemplateHelper::getGroupsList($data, $groups))
23
  <ul class="nav nav-tabs">
24
  <?php foreach ($groups as $i => $group): ?>
25
  <?php $group_ids[$i] = TemplateHelper::generateGlobalId('cegg-list-'); ?>
26
- <li<?php if ($i == 0): ?> class="active"<?php endif; ?>><a data-toggle="egg-tab" href="#<?php echo \esc_attr($group_ids[$i]); ?>"><?php echo \esc_html($group); ?></a></li>
27
  <?php endforeach; ?>
28
  </ul>
29
  <div class="tab-content">
23
  <ul class="nav nav-tabs">
24
  <?php foreach ($groups as $i => $group): ?>
25
  <?php $group_ids[$i] = TemplateHelper::generateGlobalId('cegg-list-'); ?>
26
+ <li<?php if ($i == 0): ?> class="active"<?php endif; ?>><a style="cursor: pointer" data-toggle="egg-tab" data-target="#<?php echo \esc_attr($group_ids[$i]); ?>"><?php echo \esc_html($group); ?></a></li>
27
  <?php endforeach; ?>
28
  </ul>
29
  <div class="tab-content">
templates/block_offers_logo.php CHANGED
@@ -11,7 +11,7 @@ __('Sorted offers list with store logos', 'content-egg-tpl');
11
  use ContentEgg\application\helpers\TemplateHelper;
12
  use ContentEgg\application\helpers\TextHelper;
13
 
14
- if (isset($data['Amazon']))
15
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
16
 
17
  $all_items = TemplateHelper::sortAllByPrice($data, $order);
@@ -69,13 +69,13 @@ $amazon_last_updated = TemplateHelper::getLastUpdateFormattedAmazon($data);
69
  <?php echo sprintf(TemplateHelper::__('%d used from %s'), $item['extra']['totalUsed'], TemplateHelper::formatPriceCurrency($item['extra']['lowestUsedPrice'], $item['currencyCode'])); ?>
70
  </div>
71
  <?php endif; ?>
 
72
 
73
- <?php if ($amazon_last_updated): ?>
74
- <div class="cegg-font60 cegg-lineheight15">
75
- <?php echo sprintf(TemplateHelper::__('as of %s'), $amazon_last_updated); ?>
76
- <?php TemplateHelper::printAmazonDisclaimer(); ?>
77
- </div>
78
- <?php endif; ?>
79
  <?php endif; ?>
80
 
81
  </div>
@@ -84,18 +84,18 @@ $amazon_last_updated = TemplateHelper::getLastUpdateFormattedAmazon($data);
84
  <div class="cegg-btn-row">
85
  <a<?php TemplateHelper::printRel(); ?> target="_blank" href="<?php echo $item['url']; ?>" class="btn btn-danger btn-block"><span><?php TemplateHelper::buyNowBtnText(true, $item, $btn_text); ?></span></a>
86
  </div>
87
- <?php if ($merchant = TemplateHelper::getMerchantName($item)): ?>
88
- <div class="text-center">
89
- <small class="text-muted title-case">
90
- <?php echo \esc_html($merchant); ?>
91
- <?php TemplateHelper::printShopInfo($item); ?>
92
- </small>
93
- </div>
94
- <?php endif; ?>
95
-
96
  </div>
97
  </div>
98
  <?php endforeach; ?>
99
  </div>
100
 
101
- </div>
11
  use ContentEgg\application\helpers\TemplateHelper;
12
  use ContentEgg\application\helpers\TextHelper;
13
 
14
+ if (isset($data['Amazon']) || isset($data['AmazonNoApi']))
15
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
16
 
17
  $all_items = TemplateHelper::sortAllByPrice($data, $order);
69
  <?php echo sprintf(TemplateHelper::__('%d used from %s'), $item['extra']['totalUsed'], TemplateHelper::formatPriceCurrency($item['extra']['lowestUsedPrice'], $item['currencyCode'])); ?>
70
  </div>
71
  <?php endif; ?>
72
+ <?php endif; ?>
73
 
74
+ <?php if ($item['module_id'] == 'Amazon' || $item['module_id'] == 'AmazonNoApi'): ?>
75
+ <div class="cegg-font60 cegg-lineheight15">
76
+ <?php echo sprintf(TemplateHelper::__('as of %s'), TemplateHelper::dateFormatFromGmt($item['last_update'])); ?>
77
+ <?php TemplateHelper::printAmazonDisclaimer(); ?>
78
+ </div>
 
79
  <?php endif; ?>
80
 
81
  </div>
84
  <div class="cegg-btn-row">
85
  <a<?php TemplateHelper::printRel(); ?> target="_blank" href="<?php echo $item['url']; ?>" class="btn btn-danger btn-block"><span><?php TemplateHelper::buyNowBtnText(true, $item, $btn_text); ?></span></a>
86
  </div>
87
+ <?php if ($merchant = TemplateHelper::getMerchantName($item)): ?>
88
+ <div class="text-center">
89
+ <small class="text-muted title-case">
90
+ <?php echo \esc_html($merchant); ?>
91
+ <?php TemplateHelper::printShopInfo($item); ?>
92
+ </small>
93
+ </div>
94
+ <?php endif; ?>
95
+
96
  </div>
97
  </div>
98
  <?php endforeach; ?>
99
  </div>
100
 
101
+ </div>
templates/block_price_comparison_card.php CHANGED
@@ -11,7 +11,7 @@ use ContentEgg\application\helpers\TemplateHelper;
11
  if (!$all_items = TemplateHelper::sortAllByPrice($data, $order))
12
  return;
13
 
14
- if (TemplateHelper::isModuleDataExist($all_items, 'Amazon'))
15
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
16
 
17
  $amazon_last_updated = TemplateHelper::getLastUpdateFormattedAmazon($data);
11
  if (!$all_items = TemplateHelper::sortAllByPrice($data, $order))
12
  return;
13
 
14
+ if (TemplateHelper::isModuleDataExist($all_items, 'Amazon', 'AmazonNoApi'))
15
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
16
 
17
  $amazon_last_updated = TemplateHelper::getLastUpdateFormattedAmazon($data);
templates/block_text_links.php CHANGED
@@ -11,7 +11,7 @@ use ContentEgg\application\helpers\TemplateHelper;
11
  if (!$all_items = TemplateHelper::sortAllByPrice($data, $order))
12
  return;
13
 
14
- if (TemplateHelper::isModuleDataExist($all_items, 'Amazon'))
15
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
16
 
17
  $amazon_last_updated = TemplateHelper::getLastUpdateFormattedAmazon($data);
11
  if (!$all_items = TemplateHelper::sortAllByPrice($data, $order))
12
  return;
13
 
14
+ if (TemplateHelper::isModuleDataExist($all_items, 'Amazon', 'AmazonNoApi'))
15
  \wp_enqueue_script('cegg-frontend', \ContentEgg\PLUGIN_RES . '/js/frontend.js', array('jquery'));
16
 
17
  $amazon_last_updated = TemplateHelper::getLastUpdateFormattedAmazon($data);
templates/block_top_listing.php CHANGED
@@ -37,14 +37,19 @@ $ratings = TemplateHelper::generateStaticRatings(count($all_items));
37
  <?php endif; ?>
38
  </div>
39
  <div class="col-md-6 col-sm-6 col-xs-6 cegg-desc-cell">
40
-
41
- <?php if ($i == 0 && TemplateHelper::getChance($i)): ?>
42
- <span class="label label-success">&check; <?php echo __('Best choice', 'content-egg-tpl'); ?></span>
43
- <?php elseif ($i == 1 && TemplateHelper::getChance($i)): ?>
44
- <span class="label label-success"><?php echo __('Recommended', 'content-egg-tpl'); ?></span>
45
- <?php elseif ($i == 2 && TemplateHelper::getChance($i)): ?>
46
- <span class="label label-success"><?php echo __('High quality', 'content-egg-tpl'); ?></span>
 
 
 
 
47
  <?php endif; ?>
 
48
  <div class="cegg-no-top-margin cegg-list-logo-title">
49
  <a<?php TemplateHelper::printRel(); ?> target="_blank" href="<?php echo $item['url']; ?>"><?php echo \esc_html(TemplateHelper::truncate($item['title'], 100)); ?></a>
50
  </div>
37
  <?php endif; ?>
38
  </div>
39
  <div class="col-md-6 col-sm-6 col-xs-6 cegg-desc-cell">
40
+
41
+ <?php if (strstr($item['description'], 'class="label')): ?>
42
+ <?php echo $item['description']; ?>
43
+ <?php else: ?>
44
+ <?php if ($i == 0 && TemplateHelper::getChance($i)): ?>
45
+ <span class="label label-success">&check; <?php echo __('Best choice', 'content-egg-tpl'); ?></span>
46
+ <?php elseif ($i == 1 && TemplateHelper::getChance($i)): ?>
47
+ <span class="label label-success"><?php echo __('Recommended', 'content-egg-tpl'); ?></span>
48
+ <?php elseif ($i == 2 && TemplateHelper::getChance($i)): ?>
49
+ <span class="label label-success"><?php echo __('High quality', 'content-egg-tpl'); ?></span>
50
+ <?php endif; ?>
51
  <?php endif; ?>
52
+
53
  <div class="cegg-no-top-margin cegg-list-logo-title">
54
  <a<?php TemplateHelper::printRel(); ?> target="_blank" href="<?php echo $item['url']; ?>"><?php echo \esc_html(TemplateHelper::truncate($item['title'], 100)); ?></a>
55
  </div>