Version Description
- New: Price filter in search form.
- New: Price filter for autoupdate (Amazon, Ebay, Aliexpress).
- New: Amazon.com.mx support.
- New: Search by product URL (Amazon, Aliexpress).
- New: Prefill from Arbitrary custom field keyword source.
Download this release
Release Info
Developer | keywordrush |
Plugin | Content Egg |
Version | 3.7.0 |
Comparing to | |
See all releases |
Code changes from version 3.6.2 to 3.7.0
- application/Installer.php +7 -4
- application/ModuleUpdateVisit.php +0 -1
- application/Plugin.php +3 -2
- application/admin/EggMetabox.php +16 -3
- application/admin/PrefillController.php +12 -3
- application/admin/views/_metabox_results.php +9 -7
- application/admin/views/_metabox_search_results.php +1 -1
- application/admin/views/metabox_general.php +3 -6
- application/admin/views/metabox_module.php +7 -3
- application/admin/views/prefill.php +5 -3
- application/components/AffiliateParserModule.php +7 -2
- application/components/ContentManager.php +6 -1
- application/components/Scheduler.php +1 -1
- application/helpers/CurrencyHelper.php +17 -0
- application/libs/amazon/AmazonProduct.php +1 -1
- application/modules/AE/AEModule.php +1 -2
- application/modules/AdmitadProducts/AdmitadProductsConfig.php +2 -2
- application/modules/AdmitadProducts/AdmitadProductsModule.php +14 -2
- application/modules/AdmitadProducts/views/search_panel.php +6 -0
- application/modules/AffilinetCoupons/views/search_panel.php +18 -14
- application/modules/Amazon/AmazonConfig.php +4 -26
- application/modules/Amazon/AmazonModule.php +35 -10
- application/modules/Amazon/templates/data_compare.php +22 -22
- application/modules/Amazon/views/search_panel.php +43 -24
- application/modules/Amazon/views/update_panel.php +6 -0
- application/modules/CjLinks/views/search_panel.php +21 -18
- application/modules/GoogleImages/views/search_panel.php +18 -16
- application/modules/Youtube/views/search_panel.php +16 -13
- application/templates/data_grid.php +0 -1
- content-egg.php +1 -1
- readme.txt +8 -1
- res/app/app.js +7 -0
- res/js/prefill.js +13 -1
- res/logos/amazon-com-mx.png +0 -0
application/Installer.php
CHANGED
@@ -111,13 +111,14 @@ class Installer {
|
|
111 |
public static function upgrade()
|
112 |
{
|
113 |
$db_version = \get_option(Plugin::slug . '_db_version');
|
|
|
114 |
if ((int) $db_version >= (int) self::dbVesrion())
|
115 |
return;
|
116 |
self::upgradeTables();
|
117 |
|
118 |
-
if ($db_version <
|
119 |
{
|
120 |
-
self::
|
121 |
}
|
122 |
|
123 |
\update_option(Plugin::slug . '_db_version', self::dbVesrion());
|
@@ -138,10 +139,12 @@ class Installer {
|
|
138 |
}
|
139 |
|
140 |
/**
|
141 |
-
* v 2.9.0
|
|
|
142 |
*/
|
143 |
-
private static function
|
144 |
{
|
|
|
145 |
ModuleUpdateScheduler::addScheduleEvent();
|
146 |
}
|
147 |
|
111 |
public static function upgrade()
|
112 |
{
|
113 |
$db_version = \get_option(Plugin::slug . '_db_version');
|
114 |
+
|
115 |
if ((int) $db_version >= (int) self::dbVesrion())
|
116 |
return;
|
117 |
self::upgradeTables();
|
118 |
|
119 |
+
if ($db_version < 33)
|
120 |
{
|
121 |
+
self::upgrade_v24_33();
|
122 |
}
|
123 |
|
124 |
\update_option(Plugin::slug . '_db_version', self::dbVesrion());
|
139 |
}
|
140 |
|
141 |
/**
|
142 |
+
* v 2.9.0 & 3.6.3
|
143 |
+
* reinit schedule event
|
144 |
*/
|
145 |
+
private static function upgrade_v24_33()
|
146 |
{
|
147 |
+
ModuleUpdateScheduler::clearScheduleEvent();
|
148 |
ModuleUpdateScheduler::addScheduleEvent();
|
149 |
}
|
150 |
|
application/ModuleUpdateVisit.php
CHANGED
@@ -45,7 +45,6 @@ class ModuleUpdateVisit {
|
|
45 |
return;
|
46 |
}
|
47 |
}
|
48 |
-
|
49 |
// priority = 10 because ModuleViewer added with a priority of 12
|
50 |
// & do_shortcode() is registered as a default filter on 'the_content' with a priority of 11.
|
51 |
\add_filter('the_content', array($this, 'update'), 10);
|
45 |
return;
|
46 |
}
|
47 |
}
|
|
|
48 |
// priority = 10 because ModuleViewer added with a priority of 12
|
49 |
// & do_shortcode() is registered as a default filter on 'the_content' with a priority of 11.
|
50 |
\add_filter('the_content', array($this, 'update'), 10);
|
application/Plugin.php
CHANGED
@@ -14,8 +14,8 @@ use ContentEgg\application\helpers\CurrencyHelper;
|
|
14 |
*/
|
15 |
class Plugin {
|
16 |
|
17 |
-
const version = '3.
|
18 |
-
const db_version =
|
19 |
const wp_requires = '4.2.2';
|
20 |
const slug = 'content-egg';
|
21 |
const api_base = 'http://www.keywordrush.com/api/v1';
|
@@ -54,6 +54,7 @@ class Plugin {
|
|
54 |
ProductSearchWidget::initAction();
|
55 |
PriceAlert::getInstance()->init();
|
56 |
AutoblogScheduler::initAction();
|
|
|
57 |
}
|
58 |
}
|
59 |
|
14 |
*/
|
15 |
class Plugin {
|
16 |
|
17 |
+
const version = '3.7.0';
|
18 |
+
const db_version = 33;
|
19 |
const wp_requires = '4.2.2';
|
20 |
const slug = 'content-egg';
|
21 |
const api_base = 'http://www.keywordrush.com/api/v1';
|
54 |
ProductSearchWidget::initAction();
|
55 |
PriceAlert::getInstance()->init();
|
56 |
AutoblogScheduler::initAction();
|
57 |
+
ModuleUpdateScheduler::initAction();
|
58 |
}
|
59 |
}
|
60 |
|
application/admin/EggMetabox.php
CHANGED
@@ -51,8 +51,8 @@ class EggMetabox {
|
|
51 |
$this->metadataInit();
|
52 |
$title = 'Content Egg';
|
53 |
if (Plugin::isFree())
|
54 |
-
$title .= ' <a href="'.Plugin::pluginSiteUrl
|
55 |
-
|
56 |
\add_meta_box('content_meta_box', $title, array($this, 'renderMetabox'), $post_type, 'normal', 'high');
|
57 |
$this->angularInit();
|
58 |
}
|
@@ -107,6 +107,7 @@ class EggMetabox {
|
|
107 |
|
108 |
// keywords
|
109 |
$init_keywords = array();
|
|
|
110 |
foreach ($modules as $module)
|
111 |
{
|
112 |
if (!$module->isAffiliateParser())
|
@@ -115,9 +116,15 @@ class EggMetabox {
|
|
115 |
if (!$keywords_meta)
|
116 |
continue;
|
117 |
$init_keywords[$module->getId()] = $keywords_meta;
|
|
|
|
|
|
|
|
|
|
|
118 |
}
|
119 |
$this->addAppParam('initKeywords', $init_keywords);
|
120 |
-
|
|
|
121 |
// blank content model
|
122 |
$content = new ContentProduct;
|
123 |
$content->extra = new ExtraData;
|
@@ -214,6 +221,7 @@ class EggMetabox {
|
|
214 |
|
215 |
// keywords for automatic updates
|
216 |
$keywords = InputHelper::post('cegg_updateKeywords', array(), $stripslashes);
|
|
|
217 |
foreach ($keywords as $module_id => $keyword)
|
218 |
{
|
219 |
if (!ModuleManager::getInstance()->moduleExists($module_id) || !ModuleManager::getInstance()->isModuleActive($module_id))
|
@@ -227,9 +235,14 @@ class EggMetabox {
|
|
227 |
if ($keyword)
|
228 |
{
|
229 |
\update_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $module_id, $keyword);
|
|
|
|
|
|
|
|
|
230 |
} else
|
231 |
{
|
232 |
\delete_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $module_id);
|
|
|
233 |
}
|
234 |
}
|
235 |
|
51 |
$this->metadataInit();
|
52 |
$title = 'Content Egg';
|
53 |
if (Plugin::isFree())
|
54 |
+
$title .= ' <a href="' . Plugin::pluginSiteUrl() . '">' . __('Upgrade to PRO Version', 'content-egg') . '</a>';
|
55 |
+
|
56 |
\add_meta_box('content_meta_box', $title, array($this, 'renderMetabox'), $post_type, 'normal', 'high');
|
57 |
$this->angularInit();
|
58 |
}
|
107 |
|
108 |
// keywords
|
109 |
$init_keywords = array();
|
110 |
+
$init_updateParams = array();
|
111 |
foreach ($modules as $module)
|
112 |
{
|
113 |
if (!$module->isAffiliateParser())
|
116 |
if (!$keywords_meta)
|
117 |
continue;
|
118 |
$init_keywords[$module->getId()] = $keywords_meta;
|
119 |
+
|
120 |
+
$update_params_meta = \get_post_meta($post->ID, ContentManager::META_PREFIX_UPDATE_PARAMS . $module->getId(), true);
|
121 |
+
if (!$update_params_meta)
|
122 |
+
continue;
|
123 |
+
$init_updateParams[$module->getId()] = $update_params_meta;
|
124 |
}
|
125 |
$this->addAppParam('initKeywords', $init_keywords);
|
126 |
+
$this->addAppParam('initUpdateParams', $init_updateParams);
|
127 |
+
|
128 |
// blank content model
|
129 |
$content = new ContentProduct;
|
130 |
$content->extra = new ExtraData;
|
221 |
|
222 |
// keywords for automatic updates
|
223 |
$keywords = InputHelper::post('cegg_updateKeywords', array(), $stripslashes);
|
224 |
+
$update_params = InputHelper::post('cegg_updateParams', array(), $stripslashes);
|
225 |
foreach ($keywords as $module_id => $keyword)
|
226 |
{
|
227 |
if (!ModuleManager::getInstance()->moduleExists($module_id) || !ModuleManager::getInstance()->isModuleActive($module_id))
|
235 |
if ($keyword)
|
236 |
{
|
237 |
\update_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $module_id, $keyword);
|
238 |
+
if (isset($update_params[$module_id]))
|
239 |
+
{
|
240 |
+
\update_post_meta($post_id, ContentManager::META_PREFIX_UPDATE_PARAMS . $module_id, json_decode($update_params[$module_id], true));
|
241 |
+
}
|
242 |
} else
|
243 |
{
|
244 |
\delete_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $module_id);
|
245 |
+
\delete_post_meta($post_id, ContentManager::META_PREFIX_UPDATE_PARAMS . $module_id);
|
246 |
}
|
247 |
}
|
248 |
|
application/admin/PrefillController.php
CHANGED
@@ -76,11 +76,14 @@ class PrefillController {
|
|
76 |
$module_id = TextHelper::clear($_GET['module_id']);
|
77 |
$post_id = (int) $_GET['post_id'];
|
78 |
$keyword_source = InputHelper::get('keyword_source');
|
79 |
-
$autoupdate =
|
|
|
80 |
$keyword_count = (int) InputHelper::get('keyword_count');
|
81 |
$minus_words = TextHelper::commaList(InputHelper::get('minus_words'));
|
82 |
if ($minus_words)
|
83 |
$minus_words = explode(',', $minus_words);
|
|
|
|
|
84 |
|
85 |
$parser = ModuleManager::getInstance()->parserFactory($module_id);
|
86 |
if (!$parser->isActive())
|
@@ -99,7 +102,7 @@ class PrefillController {
|
|
99 |
$this->printResult($log);
|
100 |
}
|
101 |
|
102 |
-
$keyword = $this->getKeyword($post_id, $keyword_source, $keyword_count);
|
103 |
|
104 |
if ($minus_words)
|
105 |
{
|
@@ -156,7 +159,7 @@ class PrefillController {
|
|
156 |
\wp_die();
|
157 |
}
|
158 |
|
159 |
-
private function getKeyword($post_id, $keyword_source, $keyword_count)
|
160 |
{
|
161 |
$keyword = '';
|
162 |
if ($keyword_source == '_title')
|
@@ -172,6 +175,12 @@ class PrefillController {
|
|
172 |
$kd->setText($this->getDensText($post_id));
|
173 |
$popular = $kd->getPopularWords($keyword_count);
|
174 |
$keyword = join(' ', $popular);
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
} elseif (ModuleManager::getInstance()->moduleExists($keyword_source))
|
176 |
{
|
177 |
$keyword = \get_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $keyword_source, true);
|
76 |
$module_id = TextHelper::clear($_GET['module_id']);
|
77 |
$post_id = (int) $_GET['post_id'];
|
78 |
$keyword_source = InputHelper::get('keyword_source');
|
79 |
+
$autoupdate = InputHelper::get('autoupdate', false);
|
80 |
+
$autoupdate = filter_var($autoupdate, FILTER_VALIDATE_BOOLEAN);
|
81 |
$keyword_count = (int) InputHelper::get('keyword_count');
|
82 |
$minus_words = TextHelper::commaList(InputHelper::get('minus_words'));
|
83 |
if ($minus_words)
|
84 |
$minus_words = explode(',', $minus_words);
|
85 |
+
$custom_field = InputHelper::get('custom_field', '');
|
86 |
+
$custom_field = TextHelper::clear($custom_field);
|
87 |
|
88 |
$parser = ModuleManager::getInstance()->parserFactory($module_id);
|
89 |
if (!$parser->isActive())
|
102 |
$this->printResult($log);
|
103 |
}
|
104 |
|
105 |
+
$keyword = $this->getKeyword($post_id, $keyword_source, $keyword_count, $custom_field);
|
106 |
|
107 |
if ($minus_words)
|
108 |
{
|
159 |
\wp_die();
|
160 |
}
|
161 |
|
162 |
+
private function getKeyword($post_id, $keyword_source, $keyword_count, $meta_name = '')
|
163 |
{
|
164 |
$keyword = '';
|
165 |
if ($keyword_source == '_title')
|
175 |
$kd->setText($this->getDensText($post_id));
|
176 |
$popular = $kd->getPopularWords($keyword_count);
|
177 |
$keyword = join(' ', $popular);
|
178 |
+
} elseif ($keyword_source == '_custom_field')
|
179 |
+
{
|
180 |
+
if (!$meta_name)
|
181 |
+
return '';
|
182 |
+
$keyword = \get_post_meta($post_id, $meta_name, true);
|
183 |
+
|
184 |
} elseif (ModuleManager::getInstance()->moduleExists($keyword_source))
|
185 |
{
|
186 |
$keyword = \get_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $keyword_source, true);
|
application/admin/views/_metabox_results.php
CHANGED
@@ -1,20 +1,22 @@
|
|
1 |
<div class="data_results" ng-if="models.<?php echo $module_id; ?>.added.length">
|
2 |
<div ui-sortable="{ 'ui-floating': true }" ng-model="models.<?php echo $module_id; ?>.added" class="row">
|
3 |
<div class="col-md-12 added_data" ng-repeat="data in models.<?php echo $module_id; ?>.added">
|
4 |
-
<div class="row" style="padding:
|
5 |
<div class="col-md-1 text-center" ng-if="data.img">
|
6 |
<img ng-src="{{data.img}}" class="img-responsive" style="max-height: 100px;" />
|
7 |
-
<small ng-show="data.price">{{data.currencyCode}} {{data.price}}</small>
|
8 |
</div>
|
9 |
<div ng-class="data.img ? 'col-md-9' : 'col-md-10'">
|
10 |
<input type="text" placeholder="<?php _e('Title', 'content-egg'); ?>" ng-model="data.title" class="form-control" style="margin-bottom: 5px;">
|
11 |
-
<textarea type="text" placeholder="<?php _e('Description', 'content-egg'); ?>" rows="
|
12 |
</div>
|
13 |
<div class="col-md-2">
|
14 |
-
<a href="{{data.url}}" target="_blank"><span ng-show="data.domain"><img src="https://www.google.com/s2/favicons?domain={{data.domain}}"> {{data.domain}}</span><span ng-hide="data.domain"><?php _e('Go to ', 'content-egg'); ?></span></a
|
15 |
-
<a ng-click="delete(data, '<?php echo $module_id; ?>')"><?php _e('Delete', 'content-egg'); ?></a
|
16 |
-
<
|
17 |
-
|
|
|
|
|
18 |
</div>
|
19 |
</div>
|
20 |
|
1 |
<div class="data_results" ng-if="models.<?php echo $module_id; ?>.added.length">
|
2 |
<div ui-sortable="{ 'ui-floating': true }" ng-model="models.<?php echo $module_id; ?>.added" class="row">
|
3 |
<div class="col-md-12 added_data" ng-repeat="data in models.<?php echo $module_id; ?>.added">
|
4 |
+
<div class="row" style="padding:0xp;margin:0px;padding-bottom:10px;">
|
5 |
<div class="col-md-1 text-center" ng-if="data.img">
|
6 |
<img ng-src="{{data.img}}" class="img-responsive" style="max-height: 100px;" />
|
7 |
+
<small ng-show="data.price"><b>{{data.currencyCode}} {{data.price}}</b></small>
|
8 |
</div>
|
9 |
<div ng-class="data.img ? 'col-md-9' : 'col-md-10'">
|
10 |
<input type="text" placeholder="<?php _e('Title', 'content-egg'); ?>" ng-model="data.title" class="form-control" style="margin-bottom: 5px;">
|
11 |
+
<textarea type="text" placeholder="<?php _e('Description', 'content-egg'); ?>" rows="1" ng-model="data.description" class="col-sm-12"></textarea>
|
12 |
</div>
|
13 |
<div class="col-md-2">
|
14 |
+
<div><a title="Go to" href="{{data.url}}" target="_blank"><span ng-show="data.domain"><img src="https://www.google.com/s2/favicons?domain={{data.domain}}"> {{data.domain}}</span><span ng-hide="data.domain"><?php _e('Go to ', 'content-egg'); ?></span></a></div>
|
15 |
+
<div style="padding:0xp;margin:0px;padding-top:10px;"><a style="color:#D03300;" ng-click="delete(data, '<?php echo $module_id; ?>')"><?php _e('Delete', 'content-egg'); ?></a></div>
|
16 |
+
<div style="padding:0xp;margin:0px;">
|
17 |
+
<?php /* <small class="text-muted" ng-show="data.ean"><br><?php _e('EAN:'); ?> {{data.ean}}</small> */ ?>
|
18 |
+
<small class="text-muted" ng-show="data.last_update"><br><?php _e('Last update:'); ?> {{data.last_update * 1000 | date:'shortDate'}}</small>
|
19 |
+
</div>
|
20 |
</div>
|
21 |
</div>
|
22 |
|
application/admin/views/_metabox_search_results.php
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
<strong ng-show="result.title">{{result.title}}</strong>
|
8 |
<p ng-show="result.description">{{result.description| limitTo: 200}}{{result.description.length > 200 ? '…' : ''}}</p>
|
9 |
<p>
|
10 |
-
<span ng-show="result.price">{{result.currencyCode}} <strike ng-show="result.priceOld">{{result.priceOld}}</strike> {{result.price}}</span>
|
11 |
<span ng-show="result.domain" class="text-muted"> <img src="https://www.google.com/s2/favicons?domain={{result.domain}}"> {{result.domain}}</span>
|
12 |
<small class="text-muted" ng-show="result.ean"><?php _e('EAN:'); ?> {{result.ean}}</small>
|
13 |
</p>
|
7 |
<strong ng-show="result.title">{{result.title}}</strong>
|
8 |
<p ng-show="result.description">{{result.description| limitTo: 200}}{{result.description.length > 200 ? '…' : ''}}</p>
|
9 |
<p>
|
10 |
+
<span ng-show="result.price"><b>{{result.currencyCode}}</b> <strike ng-show="result.priceOld">{{result.priceOld}}</strike> <b>{{result.price}}</b></span>
|
11 |
<span ng-show="result.domain" class="text-muted"> <img src="https://www.google.com/s2/favicons?domain={{result.domain}}"> {{result.domain}}</span>
|
12 |
<small class="text-muted" ng-show="result.ean"><?php _e('EAN:'); ?> {{result.ean}}</small>
|
13 |
</p>
|
application/admin/views/metabox_general.php
CHANGED
@@ -10,21 +10,18 @@
|
|
10 |
</div>
|
11 |
</div>
|
12 |
</div>
|
13 |
-
<div class="col-sm-1">
|
14 |
-
</div>
|
15 |
|
16 |
-
<div class="col-sm-
|
17 |
<?php
|
18 |
$tpl_manager = ContentEgg\application\components\BlockTemplateManager::getInstance();
|
19 |
$templates = $tpl_manager->getTemplatesList(true);
|
20 |
?>
|
21 |
|
22 |
<div class="row">
|
23 |
-
<div class="col-sm-
|
24 |
<input ng-model="blockShortcode" select-on-click readonly type="text" class="form-control input-sm" />
|
25 |
</div>
|
26 |
-
<div class="col-sm-
|
27 |
-
buildBlockShortcode();">
|
28 |
<select ng-model="selectedBlockTemplate" ng-change="buildBlockShortcode();">
|
29 |
<?php foreach ($templates as $id => $name): ?>
|
30 |
<option value="<?php echo esc_attr($id); ?>"><?php echo esc_html($name); ?></option>
|
10 |
</div>
|
11 |
</div>
|
12 |
</div>
|
|
|
|
|
13 |
|
14 |
+
<div class="col-sm-6">
|
15 |
<?php
|
16 |
$tpl_manager = ContentEgg\application\components\BlockTemplateManager::getInstance();
|
17 |
$templates = $tpl_manager->getTemplatesList(true);
|
18 |
?>
|
19 |
|
20 |
<div class="row">
|
21 |
+
<div class="col-sm-7">
|
22 |
<input ng-model="blockShortcode" select-on-click readonly type="text" class="form-control input-sm" />
|
23 |
</div>
|
24 |
+
<div class="col-sm-5" ng-init="selectedBlockTemplate = '<?php echo key($templates); ?>'; buildBlockShortcode();">
|
|
|
25 |
<select ng-model="selectedBlockTemplate" ng-change="buildBlockShortcode();">
|
26 |
<?php foreach ($templates as $id => $name): ?>
|
27 |
<option value="<?php echo esc_attr($id); ?>"><?php echo esc_html($name); ?></option>
|
application/admin/views/metabox_module.php
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
<div ng-controllerTMP="<?php echo $module_id; ?>Controller">
|
2 |
<input type="hidden" name="cegg_data[<?php echo $module_id; ?>]" ng-value="models.<?php echo $module_id; ?>.added | json" />
|
3 |
<input type="hidden" name="cegg_updateKeywords[<?php echo $module_id; ?>]" ng-value="updateKeywords.<?php echo $module_id; ?>" />
|
|
|
4 |
|
5 |
<tabset>
|
6 |
<tab active="activeResultTabs.<?php echo $module_id; ?>">
|
@@ -32,13 +33,16 @@
|
|
32 |
</div>
|
33 |
|
34 |
<?php if ($module->isAffiliateParser()): ?>
|
35 |
-
<div class="col-
|
36 |
-
<input id="updateKeyword_<?php echo $module_id; ?>" type="text" ng-model="updateKeywords.<?php echo $module_id; ?>" class="form-control" placeholder="<?php _e('Keyword for
|
|
|
|
|
|
|
37 |
</div>
|
38 |
<?php endif; ?>
|
39 |
<div class="col-sm-<?php
|
40 |
if ($module->isAffiliateParser())
|
41 |
-
echo
|
42 |
else
|
43 |
echo 6;
|
44 |
?> text-right">
|
1 |
<div ng-controllerTMP="<?php echo $module_id; ?>Controller">
|
2 |
<input type="hidden" name="cegg_data[<?php echo $module_id; ?>]" ng-value="models.<?php echo $module_id; ?>.added | json" />
|
3 |
<input type="hidden" name="cegg_updateKeywords[<?php echo $module_id; ?>]" ng-value="updateKeywords.<?php echo $module_id; ?>" />
|
4 |
+
<input type="hidden" name="cegg_updateParams[<?php echo $module_id; ?>]" ng-value="updateParams.<?php echo $module_id; ?>| json" />
|
5 |
|
6 |
<tabset>
|
7 |
<tab active="activeResultTabs.<?php echo $module_id; ?>">
|
33 |
</div>
|
34 |
|
35 |
<?php if ($module->isAffiliateParser()): ?>
|
36 |
+
<div class="col-sm-2">
|
37 |
+
<input id="updateKeyword_<?php echo $module_id; ?>" type="text" ng-model="updateKeywords.<?php echo $module_id; ?>" class="form-control input-sm" placeholder="<?php _e('Keyword for update', 'content-egg'); ?>" title="<?php _e('Keyword for automatic update', 'content-egg'); ?>" />
|
38 |
+
</div>
|
39 |
+
<div class="col-sm-3">
|
40 |
+
<?php $module->renderUpdatePanel(); ?>
|
41 |
</div>
|
42 |
<?php endif; ?>
|
43 |
<div class="col-sm-<?php
|
44 |
if ($module->isAffiliateParser())
|
45 |
+
echo 1;
|
46 |
else
|
47 |
echo 6;
|
48 |
?> text-right">
|
application/admin/views/prefill.php
CHANGED
@@ -32,17 +32,19 @@ use ContentEgg\application\components\ModuleManager;
|
|
32 |
<option value="_density"><?php _e('Calculate as base of the density of keywords inside post', 'content-egg'); ?></option>
|
33 |
<option value="_title"><?php _e('Title for post', 'content-egg'); ?></option>
|
34 |
<option value="_tags"><?php _e('Post tags', 'content-egg'); ?></option>
|
|
|
35 |
<?php foreach (ModuleManager::getInstance()->getAffiliateParsers() as $module): ?>
|
36 |
<option value="<?php echo $module->getId(); ?>"><?php _e('Copy from', 'content-egg'); ?> <?php echo esc_html($module->getName()); ?></option>
|
37 |
<?php endforeach; ?>
|
38 |
</select>
|
|
|
39 |
</td>
|
40 |
</tr>
|
41 |
|
42 |
<tr>
|
43 |
<th scope="row"><label for="autoupdate"><?php _e('Autoupdate', 'content-egg'); ?></label></th>
|
44 |
<td>
|
45 |
-
<label><input id="autoupdate" type="checkbox"
|
46 |
<p class="description"><?php _e('Only for those modules, which have autoupdate function.', 'content-egg'); ?></p>
|
47 |
</td>
|
48 |
</tr>
|
@@ -58,7 +60,7 @@ use ContentEgg\application\components\ModuleManager;
|
|
58 |
<p class="description"><?php _e('Maximum words for one search query.', 'content-egg'); ?></p>
|
59 |
</td>
|
60 |
</tr>
|
61 |
-
|
62 |
<tr>
|
63 |
<th scope="row"><label for="minus_words"><?php _e('"Minus" words', 'content-egg'); ?></label></th>
|
64 |
<td>
|
@@ -66,7 +68,7 @@ use ContentEgg\application\components\ModuleManager;
|
|
66 |
<p class="description"><?php _e('Remove these words from keyword. You can set several minus words/phrases with commas.', 'content-egg'); ?></p>
|
67 |
</td>
|
68 |
</tr>
|
69 |
-
|
70 |
</table>
|
71 |
|
72 |
<div id="progressbar" name="progressbar"></div>
|
32 |
<option value="_density"><?php _e('Calculate as base of the density of keywords inside post', 'content-egg'); ?></option>
|
33 |
<option value="_title"><?php _e('Title for post', 'content-egg'); ?></option>
|
34 |
<option value="_tags"><?php _e('Post tags', 'content-egg'); ?></option>
|
35 |
+
<option value="_custom_field"><?php _e('Arbitrary custom field', 'content-egg'); ?></option>
|
36 |
<?php foreach (ModuleManager::getInstance()->getAffiliateParsers() as $module): ?>
|
37 |
<option value="<?php echo $module->getId(); ?>"><?php _e('Copy from', 'content-egg'); ?> <?php echo esc_html($module->getName()); ?></option>
|
38 |
<?php endforeach; ?>
|
39 |
</select>
|
40 |
+
<input style="display: none;" id="custom_field" type="text" class="regular-text" placeholder="<?php _e('Set the name of a custom field', 'content-egg'); ?>">
|
41 |
</td>
|
42 |
</tr>
|
43 |
|
44 |
<tr>
|
45 |
<th scope="row"><label for="autoupdate"><?php _e('Autoupdate', 'content-egg'); ?></label></th>
|
46 |
<td>
|
47 |
+
<label><input id="autoupdate" type="checkbox" value="1"> <?php _e('Add Keyword for the automatic update', 'content-egg'); ?></label>
|
48 |
<p class="description"><?php _e('Only for those modules, which have autoupdate function.', 'content-egg'); ?></p>
|
49 |
</td>
|
50 |
</tr>
|
60 |
<p class="description"><?php _e('Maximum words for one search query.', 'content-egg'); ?></p>
|
61 |
</td>
|
62 |
</tr>
|
63 |
+
|
64 |
<tr>
|
65 |
<th scope="row"><label for="minus_words"><?php _e('"Minus" words', 'content-egg'); ?></label></th>
|
66 |
<td>
|
68 |
<p class="description"><?php _e('Remove these words from keyword. You can set several minus words/phrases with commas.', 'content-egg'); ?></p>
|
69 |
</td>
|
70 |
</tr>
|
71 |
+
|
72 |
</table>
|
73 |
|
74 |
<div id="progressbar" name="progressbar"></div>
|
application/components/AffiliateParserModule.php
CHANGED
@@ -31,7 +31,7 @@ abstract class AffiliateParserModule extends ParserModule {
|
|
31 |
public function presavePrepare($data, $post_id)
|
32 |
{
|
33 |
$data = parent::presavePrepare($data, $post_id);
|
34 |
-
|
35 |
foreach ($data as $key => $item)
|
36 |
{
|
37 |
$data[$key]['percentageSaved'] = 0;
|
@@ -39,7 +39,7 @@ abstract class AffiliateParserModule extends ParserModule {
|
|
39 |
$data[$key]['priceOld'] = 0;
|
40 |
if ($item['priceOld'] && $item['priceOld'] <= $item['price'])
|
41 |
$data[$key]['priceOld'] = 0;
|
42 |
-
|
43 |
if (!isset($data[$key]['priceOld']))
|
44 |
$data[$key]['priceOld'] = 0;
|
45 |
if ($data[$key]['priceOld'] && $data[$key]['price'] && $data[$key]['price'] < $data[$key]['priceOld'])
|
@@ -50,4 +50,9 @@ abstract class AffiliateParserModule extends ParserModule {
|
|
50 |
return $data;
|
51 |
}
|
52 |
|
|
|
|
|
|
|
|
|
|
|
53 |
}
|
31 |
public function presavePrepare($data, $post_id)
|
32 |
{
|
33 |
$data = parent::presavePrepare($data, $post_id);
|
34 |
+
|
35 |
foreach ($data as $key => $item)
|
36 |
{
|
37 |
$data[$key]['percentageSaved'] = 0;
|
39 |
$data[$key]['priceOld'] = 0;
|
40 |
if ($item['priceOld'] && $item['priceOld'] <= $item['price'])
|
41 |
$data[$key]['priceOld'] = 0;
|
42 |
+
|
43 |
if (!isset($data[$key]['priceOld']))
|
44 |
$data[$key]['priceOld'] = 0;
|
45 |
if ($data[$key]['priceOld'] && $data[$key]['price'] && $data[$key]['price'] < $data[$key]['priceOld'])
|
50 |
return $data;
|
51 |
}
|
52 |
|
53 |
+
public function renderUpdatePanel()
|
54 |
+
{
|
55 |
+
|
56 |
+
}
|
57 |
+
|
58 |
}
|
application/components/ContentManager.php
CHANGED
@@ -20,6 +20,7 @@ class ContentManager {
|
|
20 |
const META_PREFIX_DATA = '_cegg_data_';
|
21 |
const META_PREFIX_LAST_ITEMS_UPDATE = '_cegg_last_update_';
|
22 |
const META_PREFIX_KEYWORD = '_cegg_keyword';
|
|
|
23 |
const META_PREFIX_LAST_BYKEYWORD_UPDATE = '_cegg_last_bykeyword_update';
|
24 |
|
25 |
private static $_view_data = array();
|
@@ -249,6 +250,8 @@ class ContentManager {
|
|
249 |
$keyword = \get_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $module_id, true);
|
250 |
if (!$keyword)
|
251 |
return;
|
|
|
|
|
252 |
|
253 |
$module = ModuleManager::getInstance()->factory($module_id);
|
254 |
|
@@ -256,7 +259,7 @@ class ContentManager {
|
|
256 |
ContentManager::touchUpdateTime($post_id, $module_id);
|
257 |
try
|
258 |
{
|
259 |
-
$data = $module->doRequest($keyword,
|
260 |
// nodata!
|
261 |
if (!$data)
|
262 |
{
|
@@ -279,6 +282,7 @@ class ContentManager {
|
|
279 |
return;
|
280 |
|
281 |
$items = ContentManager::getData($post_id, $module_id);
|
|
|
282 |
if (!$items)
|
283 |
return;
|
284 |
|
@@ -413,6 +417,7 @@ class ContentManager {
|
|
413 |
|
414 |
$is_rehub_theme = (basename(get_template_directory()) == 'rehub') ? true : false;
|
415 |
$rehub_post_type = get_post_meta($post_id, 'rehub_framework_post_type', true);
|
|
|
416 |
if ($rehub_post_type && $rehub_post_type == 'review')
|
417 |
$is_review_post_type = true;
|
418 |
else
|
20 |
const META_PREFIX_DATA = '_cegg_data_';
|
21 |
const META_PREFIX_LAST_ITEMS_UPDATE = '_cegg_last_update_';
|
22 |
const META_PREFIX_KEYWORD = '_cegg_keyword';
|
23 |
+
const META_PREFIX_UPDATE_PARAMS = '_cegg_update_params';
|
24 |
const META_PREFIX_LAST_BYKEYWORD_UPDATE = '_cegg_last_bykeyword_update';
|
25 |
|
26 |
private static $_view_data = array();
|
250 |
$keyword = \get_post_meta($post_id, ContentManager::META_PREFIX_KEYWORD . $module_id, true);
|
251 |
if (!$keyword)
|
252 |
return;
|
253 |
+
|
254 |
+
$updateParams = \get_post_meta($post_id, ContentManager::META_PREFIX_UPDATE_PARAMS . $module_id, true);
|
255 |
|
256 |
$module = ModuleManager::getInstance()->factory($module_id);
|
257 |
|
259 |
ContentManager::touchUpdateTime($post_id, $module_id);
|
260 |
try
|
261 |
{
|
262 |
+
$data = $module->doRequest($keyword, $updateParams, true);
|
263 |
// nodata!
|
264 |
if (!$data)
|
265 |
{
|
282 |
return;
|
283 |
|
284 |
$items = ContentManager::getData($post_id, $module_id);
|
285 |
+
|
286 |
if (!$items)
|
287 |
return;
|
288 |
|
417 |
|
418 |
$is_rehub_theme = (basename(get_template_directory()) == 'rehub') ? true : false;
|
419 |
$rehub_post_type = get_post_meta($post_id, 'rehub_framework_post_type', true);
|
420 |
+
|
421 |
if ($rehub_post_type && $rehub_post_type == 'review')
|
422 |
$is_review_post_type = true;
|
423 |
else
|
application/components/Scheduler.php
CHANGED
@@ -13,7 +13,7 @@ abstract class Scheduler implements iScheduler {
|
|
13 |
|
14 |
public static function initAction()
|
15 |
{
|
16 |
-
\add_action(
|
17 |
}
|
18 |
|
19 |
public static function addScheduleEvent($recurrence = 'hourly', $timestamp = null)
|
13 |
|
14 |
public static function initAction()
|
15 |
{
|
16 |
+
\add_action(static::getCronTag(), array(get_called_class(), 'run'));
|
17 |
}
|
18 |
|
19 |
public static function addScheduleEvent($recurrence = 'hourly', $timestamp = null)
|
application/helpers/CurrencyHelper.php
CHANGED
@@ -205,6 +205,23 @@ class CurrencyHelper {
|
|
205 |
'num_decimals' => 2,
|
206 |
'name' => 'Nigerian naira',
|
207 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
);
|
209 |
}
|
210 |
|
205 |
'num_decimals' => 2,
|
206 |
'name' => 'Nigerian naira',
|
207 |
),
|
208 |
+
'MXN' => array(
|
209 |
+
'currency_symbol' => '$',
|
210 |
+
'currency_pos' => 'left',
|
211 |
+
'thousand_sep' => ',',
|
212 |
+
'decimal_sep' => '.',
|
213 |
+
'num_decimals' => 2,
|
214 |
+
'name' => 'Mexican peso',
|
215 |
+
),
|
216 |
+
'MDL' => array(
|
217 |
+
'currency_symbol' => 'MDL',
|
218 |
+
'currency_pos' => 'right',
|
219 |
+
'thousand_sep' => ',',
|
220 |
+
'decimal_sep' => '.',
|
221 |
+
'num_decimals' => 2,
|
222 |
+
'name' => 'Moldovan leu',
|
223 |
+
),
|
224 |
+
|
225 |
);
|
226 |
}
|
227 |
|
application/libs/amazon/AmazonProduct.php
CHANGED
@@ -109,6 +109,7 @@ class AmazonProduct extends RestClient {
|
|
109 |
'ca' => 'http://ecs.amazonaws.ca/onca/xml',
|
110 |
'br' => 'http://webservices.amazon.com.br/onca/xml',
|
111 |
'in' => 'http://webservices.amazon.in/onca/xml',
|
|
|
112 |
);
|
113 |
if (!isset($urls[$locale]))
|
114 |
{
|
@@ -193,7 +194,6 @@ class AmazonProduct extends RestClient {
|
|
193 |
|
194 |
$response = $this->signedGet('', $params);
|
195 |
$decoded = $this->_decodeResponse($response);
|
196 |
-
|
197 |
return $this->_parseResult($decoded);
|
198 |
}
|
199 |
|
109 |
'ca' => 'http://ecs.amazonaws.ca/onca/xml',
|
110 |
'br' => 'http://webservices.amazon.com.br/onca/xml',
|
111 |
'in' => 'http://webservices.amazon.in/onca/xml',
|
112 |
+
'mx' => 'http://webservices.amazon.com.mx/onca/xml',
|
113 |
);
|
114 |
if (!isset($urls[$locale]))
|
115 |
{
|
194 |
|
195 |
$response = $this->signedGet('', $params);
|
196 |
$decoded = $this->_decodeResponse($response);
|
|
|
197 |
return $this->_parseResult($decoded);
|
198 |
}
|
199 |
|
application/modules/AE/AEModule.php
CHANGED
@@ -93,13 +93,12 @@ class AEModule extends AffiliateParserModule {
|
|
93 |
$entries_per_page = (int) $catalog_atts['limit'];
|
94 |
$is_catalog_url_passed = true;
|
95 |
}
|
96 |
-
|
97 |
// 1. Url passed?
|
98 |
$is_url_passed = filter_var($keyword, FILTER_VALIDATE_URL) && $this->getShopHost() == TextHelper::getHostName($keyword);
|
99 |
if ($is_url_passed)
|
100 |
{
|
101 |
$url = $keyword;
|
102 |
-
|
103 |
// parse product by url
|
104 |
if (!$is_catalog_url_passed)
|
105 |
{
|
93 |
$entries_per_page = (int) $catalog_atts['limit'];
|
94 |
$is_catalog_url_passed = true;
|
95 |
}
|
96 |
+
|
97 |
// 1. Url passed?
|
98 |
$is_url_passed = filter_var($keyword, FILTER_VALIDATE_URL) && $this->getShopHost() == TextHelper::getHostName($keyword);
|
99 |
if ($is_url_passed)
|
100 |
{
|
101 |
$url = $keyword;
|
|
|
102 |
// parse product by url
|
103 |
if (!$is_catalog_url_passed)
|
104 |
{
|
application/modules/AdmitadProducts/AdmitadProductsConfig.php
CHANGED
@@ -99,7 +99,7 @@ class AdmitadProductsConfig extends AffiliateParserModuleConfig {
|
|
99 |
'validator' => array(
|
100 |
'trim',
|
101 |
),
|
102 |
-
'
|
103 |
),
|
104 |
'price_to' => array(
|
105 |
'title' => __('Maximal price', 'content-egg'),
|
@@ -109,7 +109,7 @@ class AdmitadProductsConfig extends AffiliateParserModuleConfig {
|
|
109 |
'validator' => array(
|
110 |
'trim',
|
111 |
),
|
112 |
-
'
|
113 |
),
|
114 |
'save_img' => array(
|
115 |
'title' => __('Save images', 'content-egg'),
|
99 |
'validator' => array(
|
100 |
'trim',
|
101 |
),
|
102 |
+
'metaboxInit' => true,
|
103 |
),
|
104 |
'price_to' => array(
|
105 |
'title' => __('Maximal price', 'content-egg'),
|
109 |
'validator' => array(
|
110 |
'trim',
|
111 |
),
|
112 |
+
'metaboxInit' => true,
|
113 |
),
|
114 |
'save_img' => array(
|
115 |
'title' => __('Save images', 'content-egg'),
|
application/modules/AdmitadProducts/AdmitadProductsModule.php
CHANGED
@@ -56,9 +56,15 @@ class AdmitadProductsModule extends AffiliateParserModule {
|
|
56 |
if ($this->config('only_sale'))
|
57 |
$options['only_sale'] = 1;
|
58 |
|
59 |
-
|
|
|
|
|
|
|
60 |
$options['price_from'] = (int) $this->config('price_from');
|
61 |
-
|
|
|
|
|
|
|
62 |
$options['price_to'] = (int) $this->config('price_to');
|
63 |
|
64 |
$client = new AdmitadProducts();
|
@@ -167,5 +173,11 @@ class AdmitadProductsModule extends AffiliateParserModule {
|
|
167 |
*/
|
168 |
return $this->config('deeplink') . urlencode($orig_url) . '&i=13';
|
169 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
170 |
|
171 |
}
|
56 |
if ($this->config('only_sale'))
|
57 |
$options['only_sale'] = 1;
|
58 |
|
59 |
+
|
60 |
+
if (!empty($query_params['price_from']))
|
61 |
+
$options['price_from'] = $query_params['price_from'];
|
62 |
+
elseif ($this->config('price_from'))
|
63 |
$options['price_from'] = (int) $this->config('price_from');
|
64 |
+
|
65 |
+
if (!empty($query_params['price_to']))
|
66 |
+
$options['price_to'] = $query_params['price_to'];
|
67 |
+
elseif ($this->config('price_to'))
|
68 |
$options['price_to'] = (int) $this->config('price_to');
|
69 |
|
70 |
$client = new AdmitadProducts();
|
173 |
*/
|
174 |
return $this->config('deeplink') . urlencode($orig_url) . '&i=13';
|
175 |
}
|
176 |
+
|
177 |
+
public function renderSearchPanel()
|
178 |
+
{
|
179 |
+
$this->render('search_panel', array('module_id' => $this->getId()));
|
180 |
+
}
|
181 |
+
|
182 |
|
183 |
}
|
application/modules/AdmitadProducts/views/search_panel.php
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="col-sm-3">
|
2 |
+
<input class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.price_from" ng-init="query_params.<?php echo $module_id; ?>.price_from = ''" placeholder="<?php _e('Min. price', 'content-egg');?>" />
|
3 |
+
</div>
|
4 |
+
<div class="col-sm-3">
|
5 |
+
<input class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.price_to" ng-init="query_params.<?php echo $module_id; ?>.price_to = ''" placeholder="<?php _e('Max. price', 'content-egg');?>" />
|
6 |
+
</div>
|
application/modules/AffilinetCoupons/views/search_panel.php
CHANGED
@@ -1,15 +1,19 @@
|
|
1 |
-
<
|
2 |
-
<
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
</
|
|
|
|
|
|
|
10 |
|
11 |
-
<select ng-model="query_params.<?php echo $module_id; ?>.VoucherCodeContent">
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
</select>
|
|
1 |
+
<div class="col-sm-4">
|
2 |
+
<select class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.VoucherType">
|
3 |
+
<option value="-1">Any voucher type</option>
|
4 |
+
<option value="0">All products</option>
|
5 |
+
<option value="1">Specific products</option>
|
6 |
+
<option value="2">Multi buy discount</option>
|
7 |
+
<option value="3">Free shipping</option>
|
8 |
+
<option value="4">Free product</option>
|
9 |
+
<option value="5">Competition</option>
|
10 |
+
</select>
|
11 |
+
</div>
|
12 |
+
<div class="col-sm-4">
|
13 |
|
14 |
+
<select class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.VoucherCodeContent">
|
15 |
+
<option value="0">Any code content</option>
|
16 |
+
<option value="1">Empty</option>
|
17 |
+
<option value="2">Filled</option>
|
18 |
+
</select>
|
19 |
+
</div>
|
application/modules/Amazon/AmazonConfig.php
CHANGED
@@ -169,7 +169,7 @@ class AmazonConfig extends AffiliateParserModuleConfig {
|
|
169 |
'validator' => array(
|
170 |
'trim',
|
171 |
),
|
172 |
-
'
|
173 |
),
|
174 |
'maximum_price' => array(
|
175 |
'title' => __('Maximal price', 'content-egg'),
|
@@ -179,7 +179,7 @@ class AmazonConfig extends AffiliateParserModuleConfig {
|
|
179 |
'validator' => array(
|
180 |
'trim',
|
181 |
),
|
182 |
-
'
|
183 |
),
|
184 |
'min_percentage_off' => array(
|
185 |
'title' => __('Minimal discount', 'content-egg'),
|
@@ -214,15 +214,6 @@ class AmazonConfig extends AffiliateParserModuleConfig {
|
|
214 |
'default' => false,
|
215 |
'section' => 'default',
|
216 |
),
|
217 |
-
/*
|
218 |
-
'customer_reviews_iframe' => array(
|
219 |
-
'title' => __('Отзывы в iframe.', 'content-egg'),
|
220 |
-
'description' => __('Показывать отзывы покупателей в iframe с amazon (отключение этой опции, возможно, нарушает правила партнерской программы amazon).', 'content-egg'),
|
221 |
-
'callback' => array($this, 'render_checkbox'),
|
222 |
-
'default' => true,
|
223 |
-
'section' => 'default',
|
224 |
-
),
|
225 |
-
*/
|
226 |
'truncate_reviews_at' => array(
|
227 |
'title' => __('Cut reviews', 'content-egg'),
|
228 |
'description' => __('Number of characters for one review. 0 - the maximal length of the text.', 'content-egg'),
|
@@ -234,20 +225,6 @@ class AmazonConfig extends AffiliateParserModuleConfig {
|
|
234 |
),
|
235 |
'section' => 'default',
|
236 |
),
|
237 |
-
/*
|
238 |
-
'review_products_number' => array(
|
239 |
-
'title' => __('Товар с отзывами', 'content-egg'),
|
240 |
-
'description' => __('Отзывы только для заданного количества товаров.', 'content-egg'),
|
241 |
-
'callback' => array($this, 'render_input'),
|
242 |
-
'default' => 1,
|
243 |
-
'validator' => array(
|
244 |
-
'trim',
|
245 |
-
'absint',
|
246 |
-
),
|
247 |
-
'section' => 'default',
|
248 |
-
),
|
249 |
-
*
|
250 |
-
*/
|
251 |
'editorial_reviews' => array(
|
252 |
'title' => __('Parse description', 'content-egg'),
|
253 |
'description' => __('Parse description of products from seller', 'content-egg'),
|
@@ -316,7 +293,7 @@ class AmazonConfig extends AffiliateParserModuleConfig {
|
|
316 |
|
317 |
public static function getLocalesList()
|
318 |
{
|
319 |
-
return array('us' => 'US', 'uk' => 'UK', 'de' => 'DE', 'jp' => 'JP', 'cn' => 'CN', 'fr' => 'FR', 'it' => 'IT', 'es' => 'ES', 'ca' => 'CA', 'br' => 'BR', 'in' => 'IN');
|
320 |
}
|
321 |
|
322 |
public static function getDefaultLocale()
|
@@ -366,6 +343,7 @@ class AmazonConfig extends AffiliateParserModuleConfig {
|
|
366 |
'ca' => 'amazon.ca',
|
367 |
'br' => 'amazon.br',
|
368 |
'in' => 'amazon.in',
|
|
|
369 |
);
|
370 |
if (isset($domains[$locale]))
|
371 |
return $domains[$locale];
|
169 |
'validator' => array(
|
170 |
'trim',
|
171 |
),
|
172 |
+
'metaboxInit' => true,
|
173 |
),
|
174 |
'maximum_price' => array(
|
175 |
'title' => __('Maximal price', 'content-egg'),
|
179 |
'validator' => array(
|
180 |
'trim',
|
181 |
),
|
182 |
+
'metaboxInit' => true,
|
183 |
),
|
184 |
'min_percentage_off' => array(
|
185 |
'title' => __('Minimal discount', 'content-egg'),
|
214 |
'default' => false,
|
215 |
'section' => 'default',
|
216 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
'truncate_reviews_at' => array(
|
218 |
'title' => __('Cut reviews', 'content-egg'),
|
219 |
'description' => __('Number of characters for one review. 0 - the maximal length of the text.', 'content-egg'),
|
225 |
),
|
226 |
'section' => 'default',
|
227 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
'editorial_reviews' => array(
|
229 |
'title' => __('Parse description', 'content-egg'),
|
230 |
'description' => __('Parse description of products from seller', 'content-egg'),
|
293 |
|
294 |
public static function getLocalesList()
|
295 |
{
|
296 |
+
return array('us' => 'US', 'uk' => 'UK', 'de' => 'DE', 'jp' => 'JP', 'cn' => 'CN', 'fr' => 'FR', 'it' => 'IT', 'es' => 'ES', 'ca' => 'CA', 'br' => 'BR', 'in' => 'IN', 'mx' => 'MX');
|
297 |
}
|
298 |
|
299 |
public static function getDefaultLocale()
|
343 |
'ca' => 'amazon.ca',
|
344 |
'br' => 'amazon.br',
|
345 |
'in' => 'amazon.in',
|
346 |
+
'mx' => 'amazon.com.mx',
|
347 |
);
|
348 |
if (isset($domains[$locale]))
|
349 |
return $domains[$locale];
|
application/modules/Amazon/AmazonModule.php
CHANGED
@@ -25,7 +25,7 @@ class AmazonModule extends AffiliateParserModule {
|
|
25 |
return array(
|
26 |
'name' => 'Amazon',
|
27 |
'api_agreement' => 'https://affiliate-program.amazon.com/gp/advertising/api/detail/agreement.html',
|
28 |
-
'description' => __('Adds
|
29 |
);
|
30 |
}
|
31 |
|
@@ -69,9 +69,14 @@ class AmazonModule extends AffiliateParserModule {
|
|
69 |
// Specifies the minimum price of the items to return. Prices are in
|
70 |
// terms of the lowest currency denomination, for example, pennies,
|
71 |
// for example, 3241 represents $32.41.
|
72 |
-
if ($
|
|
|
|
|
73 |
$options['MinimumPrice'] = TextHelper::pricePenniesDenomination($this->config('minimum_price'));
|
74 |
-
|
|
|
|
|
|
|
75 |
$options['MaximumPrice'] = TextHelper::pricePenniesDenomination($this->config('maximum_price'));
|
76 |
|
77 |
// Specifies the minimum percentage off for the items to return.
|
@@ -129,6 +134,12 @@ class AmazonModule extends AffiliateParserModule {
|
|
129 |
$pages_count = ceil($total / 10);
|
130 |
$results = array();
|
131 |
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
// EAN or ASIN search
|
133 |
if (TextHelper::isEan($keyword) && $search_index != 'All')
|
134 |
{
|
@@ -197,13 +208,13 @@ class AmazonModule extends AffiliateParserModule {
|
|
197 |
if ($item['extra']['locale'] == $locale)
|
198 |
$request[] = $item;
|
199 |
}
|
200 |
-
|
201 |
// Your request contains too many values for ItemId. This parameter can have a maximum of 10 values.
|
202 |
$pages_count = ceil(count($request) / 10);
|
203 |
for ($i = 0; $i < $pages_count; $i++)
|
204 |
{
|
205 |
$request10 = array_slice($request, $i * 10, 10);
|
206 |
-
$results = array_merge($results, $this->requestItems($request10, $locale));
|
207 |
}
|
208 |
}
|
209 |
|
@@ -247,7 +258,7 @@ class AmazonModule extends AffiliateParserModule {
|
|
247 |
$client->setAssociateTag($associate_tag);
|
248 |
|
249 |
$results = $client->ItemLookup($item_ids, $options);
|
250 |
-
|
251 |
if (!isset($results['Items']))
|
252 |
throw new \Exception('ItemLookup request error.');
|
253 |
|
@@ -285,7 +296,7 @@ class AmazonModule extends AffiliateParserModule {
|
|
285 |
$items[$key]['extra']['imageSet'][$set_key]['MediumImage'] = $this->rewriteSslImageUrl($set['MediumImage']);
|
286 |
$items[$key]['extra']['imageSet'][$set_key]['LargeImage'] = $this->rewriteSslImageUrl($set['LargeImage']);
|
287 |
}
|
288 |
-
|
289 |
$return[$item['unique_id']] = $items[$key];
|
290 |
$i++;
|
291 |
}
|
@@ -525,7 +536,7 @@ class AmazonModule extends AffiliateParserModule {
|
|
525 |
$content->currency = TextHelper::currencyTyping($content->currencyCode);
|
526 |
} else
|
527 |
$content->price = 0;
|
528 |
-
|
529 |
$content->ean = $extra->itemAttributes->EAN;
|
530 |
|
531 |
if ($return_array)
|
@@ -609,6 +620,11 @@ class AmazonModule extends AffiliateParserModule {
|
|
609 |
$this->render('search_panel', array('module_id' => $this->getId()));
|
610 |
}
|
611 |
|
|
|
|
|
|
|
|
|
|
|
612 |
public static function fixUniqueIds(array $items)
|
613 |
{
|
614 |
// fix for old items
|
@@ -631,16 +647,25 @@ class AmazonModule extends AffiliateParserModule {
|
|
631 |
}
|
632 |
return $fixed;
|
633 |
}
|
634 |
-
|
635 |
private static function pricePenniesDenomination($amount, $currency)
|
636 |
{
|
637 |
if (is_array($currency) && isset($currency['CurrencyCode']))
|
638 |
$currency = $currency['CurrencyCode'];
|
639 |
-
|
640 |
if ($currency == 'JPY')
|
641 |
return $amount;
|
642 |
else
|
643 |
return TextHelper::pricePenniesDenomination($amount, false);
|
644 |
}
|
645 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
646 |
}
|
25 |
return array(
|
26 |
'name' => 'Amazon',
|
27 |
'api_agreement' => 'https://affiliate-program.amazon.com/gp/advertising/api/detail/agreement.html',
|
28 |
+
'description' => __('Adds products from Amazon.', 'content-egg'),
|
29 |
);
|
30 |
}
|
31 |
|
69 |
// Specifies the minimum price of the items to return. Prices are in
|
70 |
// terms of the lowest currency denomination, for example, pennies,
|
71 |
// for example, 3241 represents $32.41.
|
72 |
+
if (!empty($query_params['minimum_price']))
|
73 |
+
$options['MinimumPrice'] = TextHelper::pricePenniesDenomination($query_params['minimum_price']);
|
74 |
+
elseif ($this->config('minimum_price'))
|
75 |
$options['MinimumPrice'] = TextHelper::pricePenniesDenomination($this->config('minimum_price'));
|
76 |
+
|
77 |
+
if (!empty($query_params['maximum_price']))
|
78 |
+
$options['MaximumPrice'] = TextHelper::pricePenniesDenomination($query_params['maximum_price']);
|
79 |
+
elseif ($this->config('maximum_price'))
|
80 |
$options['MaximumPrice'] = TextHelper::pricePenniesDenomination($this->config('maximum_price'));
|
81 |
|
82 |
// Specifies the minimum percentage off for the items to return.
|
134 |
$pages_count = ceil($total / 10);
|
135 |
$results = array();
|
136 |
|
137 |
+
// Is URL passed? Search by product URL
|
138 |
+
if (filter_var($keyword, FILTER_VALIDATE_URL) && $asin = AmazonModule::parseAsinFromUrl($keyword))
|
139 |
+
{
|
140 |
+
$keyword = $asin;
|
141 |
+
}
|
142 |
+
|
143 |
// EAN or ASIN search
|
144 |
if (TextHelper::isEan($keyword) && $search_index != 'All')
|
145 |
{
|
208 |
if ($item['extra']['locale'] == $locale)
|
209 |
$request[] = $item;
|
210 |
}
|
211 |
+
|
212 |
// Your request contains too many values for ItemId. This parameter can have a maximum of 10 values.
|
213 |
$pages_count = ceil(count($request) / 10);
|
214 |
for ($i = 0; $i < $pages_count; $i++)
|
215 |
{
|
216 |
$request10 = array_slice($request, $i * 10, 10);
|
217 |
+
$results = array_merge($results, $this->requestItems($request10, $locale));
|
218 |
}
|
219 |
}
|
220 |
|
258 |
$client->setAssociateTag($associate_tag);
|
259 |
|
260 |
$results = $client->ItemLookup($item_ids, $options);
|
261 |
+
|
262 |
if (!isset($results['Items']))
|
263 |
throw new \Exception('ItemLookup request error.');
|
264 |
|
296 |
$items[$key]['extra']['imageSet'][$set_key]['MediumImage'] = $this->rewriteSslImageUrl($set['MediumImage']);
|
297 |
$items[$key]['extra']['imageSet'][$set_key]['LargeImage'] = $this->rewriteSslImageUrl($set['LargeImage']);
|
298 |
}
|
299 |
+
|
300 |
$return[$item['unique_id']] = $items[$key];
|
301 |
$i++;
|
302 |
}
|
536 |
$content->currency = TextHelper::currencyTyping($content->currencyCode);
|
537 |
} else
|
538 |
$content->price = 0;
|
539 |
+
|
540 |
$content->ean = $extra->itemAttributes->EAN;
|
541 |
|
542 |
if ($return_array)
|
620 |
$this->render('search_panel', array('module_id' => $this->getId()));
|
621 |
}
|
622 |
|
623 |
+
public function renderUpdatePanel()
|
624 |
+
{
|
625 |
+
$this->render('update_panel', array('module_id' => $this->getId()));
|
626 |
+
}
|
627 |
+
|
628 |
public static function fixUniqueIds(array $items)
|
629 |
{
|
630 |
// fix for old items
|
647 |
}
|
648 |
return $fixed;
|
649 |
}
|
650 |
+
|
651 |
private static function pricePenniesDenomination($amount, $currency)
|
652 |
{
|
653 |
if (is_array($currency) && isset($currency['CurrencyCode']))
|
654 |
$currency = $currency['CurrencyCode'];
|
655 |
+
|
656 |
if ($currency == 'JPY')
|
657 |
return $amount;
|
658 |
else
|
659 |
return TextHelper::pricePenniesDenomination($amount, false);
|
660 |
}
|
661 |
|
662 |
+
private static function parseAsinFromUrl($url)
|
663 |
+
{
|
664 |
+
$regex = '~(?:www\.)?ama?zo?n\.(?:com|ca|co\.uk|co\.jp|de|fr|in|com\.mx)/(?:exec/obidos/ASIN/|o/|gp/product/|(?:(?:[^"\'/]*)/)?dp/|)(B[A-Z0-9]{9})(?:(?:/|\?|\#)(?:[^"\'\s]*))?~isx';
|
665 |
+
if (preg_match($regex, $url, $matches))
|
666 |
+
return $matches[1];
|
667 |
+
else
|
668 |
+
return '';
|
669 |
+
}
|
670 |
+
|
671 |
}
|
application/modules/Amazon/templates/data_compare.php
CHANGED
@@ -36,11 +36,11 @@ $barcodes = array(
|
|
36 |
<?php $current_items = array_slice($items, $offset, $length); ?>
|
37 |
<?php $first = reset($current_items); ?>
|
38 |
<div class="row">
|
39 |
-
<div class="col-
|
40 |
<?php _e('Compare', 'content-egg-tpl'); ?>
|
41 |
</div>
|
42 |
<?php foreach ($current_items as $item): ?>
|
43 |
-
<div class="col-
|
44 |
<?php if ($item['img']): ?>
|
45 |
<?php
|
46 |
$img = $item['img'];
|
@@ -60,11 +60,11 @@ $barcodes = array(
|
|
60 |
</div>
|
61 |
|
62 |
<div class="row">
|
63 |
-
<div class="col-
|
64 |
<?php _e('User Rating', 'content-egg-tpl'); ?>
|
65 |
</div>
|
66 |
<?php foreach ($current_items as $item): ?>
|
67 |
-
<div class="col-
|
68 |
<?php if ((int) $item['rating'] > 0): ?>
|
69 |
<span class="rating"><?php
|
70 |
echo str_repeat("<span>★</span>", (int) $item['rating']);
|
@@ -83,11 +83,11 @@ $barcodes = array(
|
|
83 |
</div>
|
84 |
|
85 |
<div class="row">
|
86 |
-
<div class="col-
|
87 |
<?php _e('Price', 'content-egg-tpl'); ?>
|
88 |
</div>
|
89 |
<?php foreach ($current_items as $item): ?>
|
90 |
-
<div class="col-
|
91 |
<?php if ($item['price']): ?>
|
92 |
<span class="cegg-price">
|
93 |
<?php echo TemplateHelper::formatPriceCurrency($item['price'], $item['currencyCode'], '<small>', '</small>'); ?>
|
@@ -124,11 +124,11 @@ $barcodes = array(
|
|
124 |
</div>
|
125 |
|
126 |
<div class="row">
|
127 |
-
<div class="col-
|
128 |
<?php _e('Shop Now', 'content-egg-tpl'); ?>
|
129 |
</div>
|
130 |
<?php foreach ($current_items as $item): ?>
|
131 |
-
<div class="col-
|
132 |
<a rel="nofollow" target="_blank" href="<?php echo $item['url']; ?>" class="btn btn-success"><?php TemplateHelper::buyNowBtnText(); ?></a>
|
133 |
<br>
|
134 |
<img src="<?php echo esc_attr(TemplateHelper::getMerhantIconUrl($item, true)); ?>" /> <small><?php echo esc_html($item['domain']); ?></small>
|
@@ -137,11 +137,11 @@ $barcodes = array(
|
|
137 |
</div>
|
138 |
|
139 |
<div class="row">
|
140 |
-
<div class="col-
|
141 |
<?php _e('Features', 'content-egg-tpl'); ?>
|
142 |
</div>
|
143 |
<?php foreach ($current_items as $item): ?>
|
144 |
-
<div class="col-
|
145 |
<?php if (!empty($item['extra']['itemAttributes']['Feature'])): ?>
|
146 |
<ul>
|
147 |
<?php foreach ($item['extra']['itemAttributes']['Feature'] as $k => $feature): ?>
|
@@ -172,11 +172,11 @@ $barcodes = array(
|
|
172 |
?>
|
173 |
<?php foreach ($lines as $attribute => $line): ?>
|
174 |
<div class="row">
|
175 |
-
<div class="col-
|
176 |
<?php _e(TemplateHelper::splitAttributeName($attribute), 'content-egg-tpl'); ?>
|
177 |
</div>
|
178 |
<?php for ($i = 0; $i < count($current_items); $i++): ?>
|
179 |
-
<div class="col-
|
180 |
<?php if (isset($line[$i])): ?>
|
181 |
<?php echo esc_html($line[$i]); ?>
|
182 |
<?php endif; ?>
|
@@ -187,11 +187,11 @@ $barcodes = array(
|
|
187 |
|
188 |
<?php if ($first['extra']['customerReviews']): ?>
|
189 |
<div class="row">
|
190 |
-
<div class="col-
|
191 |
<?php _e('User Reviews', 'content-egg-tpl'); ?>
|
192 |
</div>
|
193 |
<?php foreach ($current_items as $item): ?>
|
194 |
-
<div class="col-
|
195 |
<?php if (!empty($item['extra']['customerReviews']['reviews'])): ?>
|
196 |
<?php foreach ($item['extra']['customerReviews']['reviews'] as $review): ?>
|
197 |
<div>
|
@@ -212,11 +212,11 @@ $barcodes = array(
|
|
212 |
|
213 |
<?php if ($first['extra']['editorialReviews']): ?>
|
214 |
<div class="row">
|
215 |
-
<div class="col-
|
216 |
<?php _e('Expert Reviews', 'content-egg-tpl'); ?>
|
217 |
</div>
|
218 |
<?php foreach ($current_items as $item): ?>
|
219 |
-
<div class="col-
|
220 |
<?php if ($item['extra']['editorialReviews']): ?>
|
221 |
<?php $review = $item['extra']['editorialReviews'][0]; ?>
|
222 |
<p><?php echo $review['Content']; ?></p>
|
@@ -228,11 +228,11 @@ $barcodes = array(
|
|
228 |
|
229 |
|
230 |
<div class="row">
|
231 |
-
<div class="col-
|
232 |
<?php _e('Barcodes', 'content-egg-tpl'); ?>
|
233 |
</div>
|
234 |
<?php foreach ($current_items as $item): ?>
|
235 |
-
<div class="col-
|
236 |
<ul>
|
237 |
<?php foreach ($barcodes as $bkey => $bname): ?>
|
238 |
<?php if (!empty($item['extra']['itemAttributes'][$bkey])) : ?>
|
@@ -245,22 +245,22 @@ $barcodes = array(
|
|
245 |
</div>
|
246 |
|
247 |
<div class="row">
|
248 |
-
<div class="col-
|
249 |
<?php _e('Shop Now', 'content-egg-tpl'); ?>
|
250 |
</div>
|
251 |
<?php foreach ($current_items as $item): ?>
|
252 |
-
<div class="col-
|
253 |
<a rel="nofollow" target="_blank" href="<?php echo $item['url']; ?>" class="btn btn-success"><?php TemplateHelper::buyNowBtnText(); ?></a>
|
254 |
</div>
|
255 |
<?php endforeach; ?>
|
256 |
</div>
|
257 |
|
258 |
<div class="row">
|
259 |
-
<div class="col-
|
260 |
<?php _e('Images', 'content-egg-tpl'); ?>
|
261 |
</div>
|
262 |
<?php foreach ($current_items as $item): ?>
|
263 |
-
<div class="col-
|
264 |
<?php if (!empty($item['extra']['imageSet'][1])): ?>
|
265 |
<?php $img = str_replace('.jpg', '._AA300_.jpg', $item['extra']['imageSet'][1]['LargeImage']); ?>
|
266 |
<img class="img-responsive" src="<?php echo esc_attr($img) ?>" alt="<?php echo esc_attr($item['title']); ?>" />
|
36 |
<?php $current_items = array_slice($items, $offset, $length); ?>
|
37 |
<?php $first = reset($current_items); ?>
|
38 |
<div class="row">
|
39 |
+
<div class="col-xs-12 col-md-2 text-info">
|
40 |
<?php _e('Compare', 'content-egg-tpl'); ?>
|
41 |
</div>
|
42 |
<?php foreach ($current_items as $item): ?>
|
43 |
+
<div class="col-xs-6 col-md-5">
|
44 |
<?php if ($item['img']): ?>
|
45 |
<?php
|
46 |
$img = $item['img'];
|
60 |
</div>
|
61 |
|
62 |
<div class="row">
|
63 |
+
<div class="col-xs-12 col-md-2 text-info">
|
64 |
<?php _e('User Rating', 'content-egg-tpl'); ?>
|
65 |
</div>
|
66 |
<?php foreach ($current_items as $item): ?>
|
67 |
+
<div class="col-xs-6 col-md-5 products">
|
68 |
<?php if ((int) $item['rating'] > 0): ?>
|
69 |
<span class="rating"><?php
|
70 |
echo str_repeat("<span>★</span>", (int) $item['rating']);
|
83 |
</div>
|
84 |
|
85 |
<div class="row">
|
86 |
+
<div class="col-xs-12 col-md-2 text-info">
|
87 |
<?php _e('Price', 'content-egg-tpl'); ?>
|
88 |
</div>
|
89 |
<?php foreach ($current_items as $item): ?>
|
90 |
+
<div class="col-xs-6 col-md-5 text-center products">
|
91 |
<?php if ($item['price']): ?>
|
92 |
<span class="cegg-price">
|
93 |
<?php echo TemplateHelper::formatPriceCurrency($item['price'], $item['currencyCode'], '<small>', '</small>'); ?>
|
124 |
</div>
|
125 |
|
126 |
<div class="row">
|
127 |
+
<div class="col-xs-12 col-md-2 text-info">
|
128 |
<?php _e('Shop Now', 'content-egg-tpl'); ?>
|
129 |
</div>
|
130 |
<?php foreach ($current_items as $item): ?>
|
131 |
+
<div class="col-xs-6 col-md-5 text-center">
|
132 |
<a rel="nofollow" target="_blank" href="<?php echo $item['url']; ?>" class="btn btn-success"><?php TemplateHelper::buyNowBtnText(); ?></a>
|
133 |
<br>
|
134 |
<img src="<?php echo esc_attr(TemplateHelper::getMerhantIconUrl($item, true)); ?>" /> <small><?php echo esc_html($item['domain']); ?></small>
|
137 |
</div>
|
138 |
|
139 |
<div class="row">
|
140 |
+
<div class="col-xs-12 col-md-2 text-info">
|
141 |
<?php _e('Features', 'content-egg-tpl'); ?>
|
142 |
</div>
|
143 |
<?php foreach ($current_items as $item): ?>
|
144 |
+
<div class="col-xs-6 col-md-5">
|
145 |
<?php if (!empty($item['extra']['itemAttributes']['Feature'])): ?>
|
146 |
<ul>
|
147 |
<?php foreach ($item['extra']['itemAttributes']['Feature'] as $k => $feature): ?>
|
172 |
?>
|
173 |
<?php foreach ($lines as $attribute => $line): ?>
|
174 |
<div class="row">
|
175 |
+
<div class="col-xs-12 col-md-2 text-info">
|
176 |
<?php _e(TemplateHelper::splitAttributeName($attribute), 'content-egg-tpl'); ?>
|
177 |
</div>
|
178 |
<?php for ($i = 0; $i < count($current_items); $i++): ?>
|
179 |
+
<div class="col-xs-6 col-md-5">
|
180 |
<?php if (isset($line[$i])): ?>
|
181 |
<?php echo esc_html($line[$i]); ?>
|
182 |
<?php endif; ?>
|
187 |
|
188 |
<?php if ($first['extra']['customerReviews']): ?>
|
189 |
<div class="row">
|
190 |
+
<div class="col-xs-12 col-md-2 text-info">
|
191 |
<?php _e('User Reviews', 'content-egg-tpl'); ?>
|
192 |
</div>
|
193 |
<?php foreach ($current_items as $item): ?>
|
194 |
+
<div class="col-xs-6 col-md-5 products">
|
195 |
<?php if (!empty($item['extra']['customerReviews']['reviews'])): ?>
|
196 |
<?php foreach ($item['extra']['customerReviews']['reviews'] as $review): ?>
|
197 |
<div>
|
212 |
|
213 |
<?php if ($first['extra']['editorialReviews']): ?>
|
214 |
<div class="row">
|
215 |
+
<div class="col-xs-12 col-md-2 text-info">
|
216 |
<?php _e('Expert Reviews', 'content-egg-tpl'); ?>
|
217 |
</div>
|
218 |
<?php foreach ($current_items as $item): ?>
|
219 |
+
<div class="col-xs-6 col-md-5 products">
|
220 |
<?php if ($item['extra']['editorialReviews']): ?>
|
221 |
<?php $review = $item['extra']['editorialReviews'][0]; ?>
|
222 |
<p><?php echo $review['Content']; ?></p>
|
228 |
|
229 |
|
230 |
<div class="row">
|
231 |
+
<div class="col-xs-12 col-md-2 text-info">
|
232 |
<?php _e('Barcodes', 'content-egg-tpl'); ?>
|
233 |
</div>
|
234 |
<?php foreach ($current_items as $item): ?>
|
235 |
+
<div class="col-xs-6 col-md-5">
|
236 |
<ul>
|
237 |
<?php foreach ($barcodes as $bkey => $bname): ?>
|
238 |
<?php if (!empty($item['extra']['itemAttributes'][$bkey])) : ?>
|
245 |
</div>
|
246 |
|
247 |
<div class="row">
|
248 |
+
<div class="col-xs-12 col-md-2 text-info">
|
249 |
<?php _e('Shop Now', 'content-egg-tpl'); ?>
|
250 |
</div>
|
251 |
<?php foreach ($current_items as $item): ?>
|
252 |
+
<div class="col-xs-6 col-md-5 text-center">
|
253 |
<a rel="nofollow" target="_blank" href="<?php echo $item['url']; ?>" class="btn btn-success"><?php TemplateHelper::buyNowBtnText(); ?></a>
|
254 |
</div>
|
255 |
<?php endforeach; ?>
|
256 |
</div>
|
257 |
|
258 |
<div class="row">
|
259 |
+
<div class="col-xs-12 col-md-2 text-info">
|
260 |
<?php _e('Images', 'content-egg-tpl'); ?>
|
261 |
</div>
|
262 |
<?php foreach ($current_items as $item): ?>
|
263 |
+
<div class="col-xs-6 col-md-5">
|
264 |
<?php if (!empty($item['extra']['imageSet'][1])): ?>
|
265 |
<?php $img = str_replace('.jpg', '._AA300_.jpg', $item['extra']['imageSet'][1]['LargeImage']); ?>
|
266 |
<img class="img-responsive" src="<?php echo esc_attr($img) ?>" alt="<?php echo esc_attr($item['title']); ?>" />
|
application/modules/Amazon/views/search_panel.php
CHANGED
@@ -3,30 +3,49 @@ $locales = \ContentEgg\application\modules\Amazon\AmazonConfig::getActiveLocales
|
|
3 |
$default_locale = \ContentEgg\application\modules\Amazon\AmazonConfig::getInstance()->option('locale');
|
4 |
?>
|
5 |
|
6 |
-
<?php if (count($locales) > 1): ?>
|
7 |
-
<select ng-model="query_params.Amazon.locale" ng-init="query_params.Amazon.locale = '<?php echo $default_locale; ?>'">
|
8 |
-
<?php foreach ($locales as $value => $name): ?>
|
9 |
-
<option value="<?php echo $value; ?>"><?php echo $name; ?></option>
|
10 |
-
<?php endforeach; ?>
|
11 |
-
</select>
|
12 |
-
<?php endif; ?>
|
13 |
|
14 |
-
<input ng-model="query_params.Amazon.associate_tag" ng-init="query_params.Amazon.associate_tag = ''" placeholder="custom associate tag" />
|
15 |
|
16 |
-
<
|
17 |
-
<option value=""><?php _e('Min. discount', 'content-egg'); ?></option>
|
18 |
-
<option value="5%"><?php _e('5%', 'content-egg'); ?></option>
|
19 |
-
<option value="10%"><?php _e('10%', 'content-egg'); ?></option>
|
20 |
-
<option value="15%"><?php _e('15%', 'content-egg'); ?></option>
|
21 |
-
<option value="20%"><?php _e('20%', 'content-egg'); ?></option>
|
22 |
-
<option value="25%"><?php _e('25%', 'content-egg'); ?></option>
|
23 |
-
<option value="30%"><?php _e('30%', 'content-egg'); ?></option>
|
24 |
-
<option value="35%"><?php _e('35%', 'content-egg'); ?></option>
|
25 |
-
<option value="40%"><?php _e('40%', 'content-egg'); ?></option>
|
26 |
-
<option value="50%"><?php _e('50%', 'content-egg'); ?></option>
|
27 |
-
<option value="60%"><?php _e('60%', 'content-egg'); ?></option>
|
28 |
-
<option value="70%"><?php _e('70%', 'content-egg'); ?></option>
|
29 |
-
<option value="80%"><?php _e('80%', 'content-egg'); ?></option>
|
30 |
-
<option value="90%"><?php _e('90%', 'content-egg'); ?></option>
|
31 |
-
</select>
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
$default_locale = \ContentEgg\application\modules\Amazon\AmazonConfig::getInstance()->option('locale');
|
4 |
?>
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
7 |
|
8 |
+
<div class="row" style="padding-bottom: 2px; margin-bottom: 2px;">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
10 |
+
<?php if (count($locales) > 1): ?>
|
11 |
+
<div class="col-sm-3">
|
12 |
+
<select class="form-control input-sm" ng-model="query_params.Amazon.locale" ng-init="query_params.Amazon.locale = '<?php echo $default_locale; ?>'">
|
13 |
+
<?php foreach ($locales as $value => $name): ?>
|
14 |
+
<option value="<?php echo $value; ?>"><?php echo $name; ?></option>
|
15 |
+
<?php endforeach; ?>
|
16 |
+
</select>
|
17 |
+
</div>
|
18 |
+
<?php endif; ?>
|
19 |
+
|
20 |
+
<div class="col-sm-3">
|
21 |
+
<input class="form-control input-sm" ng-model="query_params.Amazon.associate_tag" ng-init="query_params.Amazon.associate_tag = ''" placeholder="Custom tag" title="Custom associate tag" />
|
22 |
+
</div>
|
23 |
+
<div class="col-sm-3">
|
24 |
+
|
25 |
+
<select class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.min_percentage_off">
|
26 |
+
<option value=""><?php _e('Discount', 'content-egg'); ?></option>
|
27 |
+
<option value="5%"><?php _e('5%', 'content-egg'); ?></option>
|
28 |
+
<option value="10%"><?php _e('10%', 'content-egg'); ?></option>
|
29 |
+
<option value="15%"><?php _e('15%', 'content-egg'); ?></option>
|
30 |
+
<option value="20%"><?php _e('20%', 'content-egg'); ?></option>
|
31 |
+
<option value="25%"><?php _e('25%', 'content-egg'); ?></option>
|
32 |
+
<option value="30%"><?php _e('30%', 'content-egg'); ?></option>
|
33 |
+
<option value="35%"><?php _e('35%', 'content-egg'); ?></option>
|
34 |
+
<option value="40%"><?php _e('40%', 'content-egg'); ?></option>
|
35 |
+
<option value="50%"><?php _e('50%', 'content-egg'); ?></option>
|
36 |
+
<option value="60%"><?php _e('60%', 'content-egg'); ?></option>
|
37 |
+
<option value="70%"><?php _e('70%', 'content-egg'); ?></option>
|
38 |
+
<option value="80%"><?php _e('80%', 'content-egg'); ?></option>
|
39 |
+
<option value="90%"><?php _e('90%', 'content-egg'); ?></option>
|
40 |
+
</select>
|
41 |
+
</div>
|
42 |
+
</div>
|
43 |
+
<div class="row">
|
44 |
+
<div class="col-sm-3">
|
45 |
+
<input class="form-control input-sm" ng-model="query_params.Amazon.minimum_price" ng-init="query_params.Amazon.minimum_price = ''" placeholder="<?php _e('Min. price', 'content-egg') ?>" title="<?php _e('Min. price.', 'content-egg') ?> <?php _e('It require that you specify a category.', 'content-egg') ?>" />
|
46 |
+
</div>
|
47 |
+
<div class="col-sm-3">
|
48 |
+
<input class="form-control input-sm" ng-model="query_params.Amazon.maximum_price" ng-init="query_params.Amazon.maximum_price = ''" placeholder="<?php _e('Max. price', 'content-egg') ?>" title="<?php _e('Max. price.', 'content-egg') ?> <?php _e('It require that you specify a category.', 'content-egg') ?>" />
|
49 |
+
</div>
|
50 |
+
|
51 |
+
</div>
|
application/modules/Amazon/views/update_panel.php
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="col-sm-6">
|
2 |
+
<input class="form-control input-sm" ng-model="updateParams.<?php echo $module_id; ?>.minimum_price" placeholder="<?php _e('Min. price', 'content-egg') ?>" title="<?php _e('Min. price for automatic update', 'content-egg') ?>" />
|
3 |
+
</div>
|
4 |
+
<div class="col-sm-6">
|
5 |
+
<input class="form-control input-sm" ng-model="updateParams.<?php echo $module_id; ?>.maximum_price" placeholder="<?php _e('Max. price', 'content-egg') ?>" title="<?php _e('Max. price for automatic update', 'content-egg') ?>" />
|
6 |
+
</div>
|
application/modules/CjLinks/views/search_panel.php
CHANGED
@@ -1,18 +1,21 @@
|
|
1 |
-
<
|
2 |
-
<
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
</
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
<
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
</
|
|
|
|
|
|
1 |
+
<div class="col-sm-4">
|
2 |
+
<select class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.promotion_type">
|
3 |
+
<option value="">Any promotion type</option>
|
4 |
+
<option value="coupon">Coupon</option>
|
5 |
+
<option value="sweepstakes">Sweepstakes</option>
|
6 |
+
<option value="product">Hot Product</option>
|
7 |
+
<option value="sale/discount">Sale/Discount</option>
|
8 |
+
<option value="free shipping">Free shipping</option>
|
9 |
+
<option value="seasonal link">Seasonal link</option>
|
10 |
+
</select>
|
11 |
+
</div>
|
12 |
+
<div class="col-sm-4">
|
13 |
+
<select class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.link_type">
|
14 |
+
<option value="">Any link type</option>
|
15 |
+
<option value="Text Link">Text Link</option>
|
16 |
+
<option value="Banner">Banner</option>
|
17 |
+
<option value="Content Link">Content Link</option>
|
18 |
+
<option value="Advanced Link">Advanced Link</option>
|
19 |
+
<option value="Flash Link">Flash Link</option>
|
20 |
+
</select>
|
21 |
+
</div>
|
application/modules/GoogleImages/views/search_panel.php
CHANGED
@@ -1,16 +1,18 @@
|
|
1 |
-
<
|
2 |
-
<
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
<
|
11 |
-
<
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
|
|
|
1 |
+
<div class="col-sm-4">
|
2 |
+
<select class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.license">
|
3 |
+
<option value=""><?php _e('Any license', 'content-egg'); ?></option>
|
4 |
+
<option value="(cc_publicdomain|cc_attribute|cc_sharealike|cc_noncommercial|cc_nonderived)"><?php _e('Any Creative Commons', 'content-egg'); ?></option>
|
5 |
+
<option value="(cc_publicdomain|cc_attribute|cc_sharealike|cc_nonderived).-(cc_noncommercial)"><?php _e('With Allow of commercial use', 'content-egg'); ?></option>
|
6 |
+
<option value="(cc_publicdomain|cc_attribute|cc_sharealike|cc_noncommercial).-(cc_nonderived)"><?php _e('Allowed change', 'content-egg'); ?></option>
|
7 |
+
<option value="(cc_publicdomain|cc_attribute|cc_sharealike).-(cc_noncommercial|cc_nonderived)"><?php _e('Commercial use and change', 'content-egg'); ?></option>
|
8 |
+
</select>
|
9 |
+
</div>
|
10 |
+
<div class="col-sm-4">
|
11 |
+
<select class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.imgsz">
|
12 |
+
<option value=""><?php _e('Any size', 'content-egg'); ?></option>
|
13 |
+
<option value="icon"><?php _e('Small', 'content-egg'); ?></option>
|
14 |
+
<option value="small|medium|large|xlarge"><?php _e('Medium', 'content-egg'); ?></option>
|
15 |
+
<option value="xxlarge"><?php _e('Large', 'content-egg'); ?></option>
|
16 |
+
<option value="huge"><?php _e('Huge', 'content-egg'); ?></option>
|
17 |
+
</select>
|
18 |
+
</div>
|
application/modules/Youtube/views/search_panel.php
CHANGED
@@ -1,13 +1,16 @@
|
|
1 |
-
<
|
2 |
-
<
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
<
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
|
|
|
|
|
1 |
+
<div class="col-sm-4">
|
2 |
+
<select class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.license">
|
3 |
+
<option value="any"><?php _e('Any license', 'content-egg'); ?></option>
|
4 |
+
<option value="creativeCommon"><?php _e('Creative Commons', 'content-egg'); ?></option>
|
5 |
+
<option value="youtube"><?php _e('Standard license', 'content-egg'); ?></option>
|
6 |
+
</select>
|
7 |
+
</div>
|
8 |
+
<div class="col-sm-4">
|
9 |
+
<select class="form-control input-sm" ng-model="query_params.<?php echo $module_id; ?>.order">
|
10 |
+
<option value="date"><?php _e('Date', 'content-egg'); ?></option>
|
11 |
+
<option value="rating"><?php _e('Rating', 'content-egg'); ?></option>
|
12 |
+
<option value="relevance"><?php _e('Relevance', 'content-egg'); ?></option>
|
13 |
+
<option value="title"><?php _e('Title', 'content-egg'); ?></option>
|
14 |
+
<option value="viewCount"><?php _e('Views', 'content-egg'); ?></option>
|
15 |
+
</select>
|
16 |
+
</div>
|
application/templates/data_grid.php
CHANGED
@@ -13,7 +13,6 @@ use ContentEgg\application\helpers\TemplateHelper;
|
|
13 |
<?php $i = 0; ?>
|
14 |
<div class="row">
|
15 |
<?php foreach ($items as $item): ?>
|
16 |
-
|
17 |
<div class="col-md-4 cegg-gridbox">
|
18 |
<a rel="nofollow" target="_blank" href="<?php echo esc_url($item['url']) ?>">
|
19 |
|
13 |
<?php $i = 0; ?>
|
14 |
<div class="row">
|
15 |
<?php foreach ($items as $item): ?>
|
|
|
16 |
<div class="col-md-4 cegg-gridbox">
|
17 |
<a rel="nofollow" target="_blank" href="<?php echo esc_url($item['url']) ?>">
|
18 |
|
content-egg.php
CHANGED
@@ -6,7 +6,7 @@ namespace ContentEgg;
|
|
6 |
Plugin Name: Content Egg
|
7 |
Plugin URI: http://www.keywordrush.com/contentegg
|
8 |
Description: Easily adding auto updating products from affiliate systems and additional content to posts.
|
9 |
-
Version: 3.
|
10 |
Author: keywordrush.com
|
11 |
Author URI: http://www.keywordrush.com
|
12 |
Text Domain: content-egg
|
6 |
Plugin Name: Content Egg
|
7 |
Plugin URI: http://www.keywordrush.com/contentegg
|
8 |
Description: Easily adding auto updating products from affiliate systems and additional content to posts.
|
9 |
+
Version: 3.7.0
|
10 |
Author: keywordrush.com
|
11 |
Author URI: http://www.keywordrush.com
|
12 |
Text Domain: content-egg
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: keywordrush,wpsoul
|
|
3 |
Tags: content, affiliate, autoblogging, amazon, affilinet, coupons, linkshare, shareasale, ozon, 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, pepperjamnetwork, udemy, envato, tradetracker
|
4 |
Requires at least: 4.2.2
|
5 |
Tested up to: 4.7.2
|
6 |
-
Stable tag: 3.
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
@@ -108,6 +108,13 @@ If you can do any Wordpress page templates – you can do also templates for Con
|
|
108 |
|
109 |
== Changelog ==
|
110 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
= 3.6.0 =
|
112 |
* New: Autoblogging: Minimum reviews required.
|
113 |
* New: Autoblogging: Dynamic categories.
|
3 |
Tags: content, affiliate, autoblogging, amazon, affilinet, coupons, linkshare, shareasale, ozon, 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, pepperjamnetwork, udemy, envato, tradetracker
|
4 |
Requires at least: 4.2.2
|
5 |
Tested up to: 4.7.2
|
6 |
+
Stable tag: 3.7.0
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
108 |
|
109 |
== Changelog ==
|
110 |
|
111 |
+
= 3.7.0 =
|
112 |
+
* New: Price filter in search form.
|
113 |
+
* New: Price filter for autoupdate (Amazon, Ebay, Aliexpress).
|
114 |
+
* New: Amazon.com.mx support.
|
115 |
+
* New: Search by product URL (Amazon, Aliexpress).
|
116 |
+
* New: Prefill from Arbitrary custom field keyword source.
|
117 |
+
|
118 |
= 3.6.0 =
|
119 |
* New: Autoblogging: Minimum reviews required.
|
120 |
* New: Autoblogging: Dynamic categories.
|
res/app/app.js
CHANGED
@@ -7,6 +7,7 @@ contentEgg.controller('ContentEggController', function ($scope, ModuleService) {
|
|
7 |
$scope.query_params = {};
|
8 |
$scope.keywords = {};
|
9 |
$scope.updateKeywords = {};
|
|
|
10 |
$scope.activeSearchTabs = {};
|
11 |
$scope.activeResultTabs = {};
|
12 |
$scope.shortcodes = {};
|
@@ -19,6 +20,7 @@ contentEgg.controller('ContentEggController', function ($scope, ModuleService) {
|
|
19 |
$scope.models[module_id] = new ModuleService(module_id);
|
20 |
$scope.keywords[module_id] = '';
|
21 |
$scope.updateKeywords[module_id] = '';
|
|
|
22 |
$scope.shortcodes[module_id] = '[content-egg module=' + module_id + ']';
|
23 |
|
24 |
// init modules options
|
@@ -43,6 +45,11 @@ contentEgg.controller('ContentEggController', function ($scope, ModuleService) {
|
|
43 |
{
|
44 |
$scope.updateKeywords[module_id] = contentegg_params.initKeywords[module_id];
|
45 |
}
|
|
|
|
|
|
|
|
|
|
|
46 |
});
|
47 |
|
48 |
$scope.find = function (module_id) {
|
7 |
$scope.query_params = {};
|
8 |
$scope.keywords = {};
|
9 |
$scope.updateKeywords = {};
|
10 |
+
$scope.updateParams = {};
|
11 |
$scope.activeSearchTabs = {};
|
12 |
$scope.activeResultTabs = {};
|
13 |
$scope.shortcodes = {};
|
20 |
$scope.models[module_id] = new ModuleService(module_id);
|
21 |
$scope.keywords[module_id] = '';
|
22 |
$scope.updateKeywords[module_id] = '';
|
23 |
+
$scope.updateParams[module_id] = '';
|
24 |
$scope.shortcodes[module_id] = '[content-egg module=' + module_id + ']';
|
25 |
|
26 |
// init modules options
|
45 |
{
|
46 |
$scope.updateKeywords[module_id] = contentegg_params.initKeywords[module_id];
|
47 |
}
|
48 |
+
if (contentegg_params.initUpdateParams[module_id])
|
49 |
+
{
|
50 |
+
$scope.updateParams[module_id] = contentegg_params.initUpdateParams[module_id];
|
51 |
+
}
|
52 |
+
|
53 |
});
|
54 |
|
55 |
$scope.find = function (module_id) {
|
res/js/prefill.js
CHANGED
@@ -56,6 +56,16 @@ jQuery(document).ready(function($) {
|
|
56 |
jQuery('#ajaxBusy').hide();
|
57 |
|
58 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
|
60 |
// Ajax activity indicator bound
|
61 |
// to ajax start/stop document events
|
@@ -92,12 +102,14 @@ function prefill() {
|
|
92 |
var keyword_count = jQuery("#keyword_count").val();
|
93 |
var minus_words = jQuery("#minus_words").val();
|
94 |
var autoupdate = jQuery("#autoupdate").is(':checked');
|
|
|
95 |
|
96 |
prefill_url += '&module_id=' + module_id;
|
97 |
prefill_url += '&keyword_source=' + keyword_source;
|
98 |
prefill_url += '&keyword_count=' + keyword_count;
|
99 |
prefill_url += '&autoupdate=' + autoupdate;
|
100 |
-
prefill_url += '&minus_words=' + minus_words;
|
|
|
101 |
prefill_url += '&nonce=' + content_egg_prefill.nonce;
|
102 |
|
103 |
cegg_xxx = jQuery.ajax({
|
56 |
jQuery('#ajaxBusy').hide();
|
57 |
|
58 |
});
|
59 |
+
|
60 |
+
jQuery(function() {
|
61 |
+
jQuery('#keyword_source').change(function(){
|
62 |
+
if(jQuery('#keyword_source').val() == '_custom_field') {
|
63 |
+
jQuery('#custom_field').show();
|
64 |
+
} else {
|
65 |
+
jQuery('#custom_field').hide();
|
66 |
+
}
|
67 |
+
});
|
68 |
+
});
|
69 |
|
70 |
// Ajax activity indicator bound
|
71 |
// to ajax start/stop document events
|
102 |
var keyword_count = jQuery("#keyword_count").val();
|
103 |
var minus_words = jQuery("#minus_words").val();
|
104 |
var autoupdate = jQuery("#autoupdate").is(':checked');
|
105 |
+
var custom_field = jQuery("#custom_field").val();
|
106 |
|
107 |
prefill_url += '&module_id=' + module_id;
|
108 |
prefill_url += '&keyword_source=' + keyword_source;
|
109 |
prefill_url += '&keyword_count=' + keyword_count;
|
110 |
prefill_url += '&autoupdate=' + autoupdate;
|
111 |
+
prefill_url += '&minus_words=' + encodeURIComponent(minus_words);
|
112 |
+
prefill_url += '&custom_field=' + encodeURIComponent(custom_field);
|
113 |
prefill_url += '&nonce=' + content_egg_prefill.nonce;
|
114 |
|
115 |
cegg_xxx = jQuery.ajax({
|
res/logos/amazon-com-mx.png
ADDED
Binary file
|