diff --git a/classes/Tools.php b/classes/Tools.php index 50b9cdf23..b58175fab 100644 --- a/classes/Tools.php +++ b/classes/Tools.php @@ -3437,14 +3437,9 @@ exit; $post_data .= '&method=listing&action=install-modules'; $post_data .= defined('_PS_HOST_MODE_') ? '-od' : ''; break; - case 'catalog-recommendation': - $protocols[] = 'http'; - $post_data .= '&method=content&action=catalogRecommendation'; - $post_data .= defined('_PS_HOST_MODE_') ? '-od' : ''; - break; - case 'dashboard-recommendation': - $protocols[] = 'http'; - $post_data .= '&method=content&action=dashboardRecommendation'; + case 'recommendation': + $post_data .= '&method=recommendation&controller='; + $post_data .= (isset($params['controller']) ? $params['controller'] : Context::getContext()->controller->controller_name); $post_data .= defined('_PS_HOST_MODE_') ? '-od' : ''; break; case 'check-version': diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index 1e127f8e7..6d36f953e 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -409,6 +409,9 @@ class AdminControllerCore extends Controller const QLO_SEARCH_TYPE_MODULE = 7; const QLO_SEARCH_TYPE_HOTEL = 8; + /** @var string path for recomendation content */ + const RECOMMENDATION_CONTENT_FILE_PATH = ''; + public function __construct() { global $timer_start; @@ -3989,17 +3992,65 @@ class AdminControllerCore extends Controller public function ajaxProcessGetRecommendationContent() { $response = array('success' => false); - if (isset($this->context->cookie->{$this->controller_name.'_closed'}) && $this->context->cookie->{$this->controller_name.'_closed'}) { - $response['success'] = true; - } else { - if (method_exists($this, 'getRecommendationContent')) { - if ($content = $this->getRecommendationContent()) { - $response['success'] = true; - $response['content'] = $content; + if ($this->context->controller->getRecommendationFilePath()) { + $response = $this->getRecommendationContent(); + } + $this->context->cookie->write(); + $this->ajaxDie(json_encode($response)); + } + + public function getRecommendationContent() + { + $content = array( + 'success' => false, + 'cache' => true, + 'html' => '' + ); + + if ($recommendationContent = $this->updateRecommendationContent()) { + $content['cache'] = false; + } + if (file_exists(_PS_ROOT_DIR_.$this->context->controller->getRecommendationFilePath())) { + $content['success'] = true; + if (!isset($this->context->cookie->{$this->controller_name.'_closed'}) || !$this->context->cookie->{$this->controller_name.'_closed'}) { + $content['html'] = file_get_contents(_PS_ROOT_DIR_.$this->context->controller->getRecommendationFilePath()); + } + } + + return $content; + } + + public function updateRecommendationContent() + { + if (!Tools::isFresh($this->context->controller->getRecommendationFilePath(), _TIME_1_DAY_, false)) { + if ($recommendationContent = Tools::addonsRequest( + 'recommendation', + array('controller' => $this->context->controller->controller_name) + )) { + $recommendationContent = json_decode($recommendationContent, true); + if (!isset($this->context->cookie->{$this->context->controller->controller_name.'_key'})) { + $this->context->cookie->{$this->context->controller->controller_name.'_key'} = ''; + } + if ($this->context->cookie->{$this->context->controller->controller_name.'_key'} != $recommendationContent['key']) { + unset($this->context->cookie->{$this->context->controller->controller_name.'_closed'}); + } + $this->context->cookie->{$this->context->controller->controller_name.'_key'} = $recommendationContent['key']; + if (isset($recommendationContent['success']) && $recommendationContent['success']) { + @file_put_contents( + _PS_ROOT_DIR_.$this->context->controller->getRecommendationFilePath(), + $recommendationContent['html'] + ); + } elseif (file_exists(_PS_ROOT_DIR_.$this->context->controller->getRecommendationFilePath())) { + unlink(_PS_ROOT_DIR_.$this->context->controller->getRecommendationFilePath()); + } + return $recommendationContent; + } else { + if (file_exists(_PS_ROOT_DIR_.$this->context->controller->getRecommendationFilePath())) { + unlink(_PS_ROOT_DIR_.$this->context->controller->getRecommendationFilePath()); } } } - $this->ajaxDie(json_encode($response)); + return false; } public function ajaxProcessRecommendationClosed() @@ -4009,6 +4060,11 @@ class AdminControllerCore extends Controller $this->ajaxDie(json_encode($response)); } + public function getRecommendationFilePath() + { + return static::RECOMMENDATION_CONTENT_FILE_PATH; + } + /** * Save list visible columns * diff --git a/controllers/admin/AdminDashboardController.php b/controllers/admin/AdminDashboardController.php index facba168f..11ffe69e6 100644 --- a/controllers/admin/AdminDashboardController.php +++ b/controllers/admin/AdminDashboardController.php @@ -27,7 +27,7 @@ class AdminDashboardControllerCore extends AdminController { - const DASHBOARD_RECOMMENDATION_CONTENT = '/cache/dashboard_recommendation.html'; + const RECOMMENDATION_CONTENT_FILE_PATH = '/cache/dashboard_recommendation.html'; public function __construct() { @@ -502,15 +502,4 @@ class AdminDashboardControllerCore extends AdminController die(json_encode($return)); } - - public function getRecommendationContent() - { - if (!Tools::isFresh(self::DASHBOARD_RECOMMENDATION_CONTENT, _TIME_1_DAY_, false)) { - @file_put_contents(_PS_ROOT_DIR_.self::DASHBOARD_RECOMMENDATION_CONTENT, Tools::addonsRequest('dashboard-recommendation')); - } - if (file_exists(_PS_ROOT_DIR_.self::DASHBOARD_RECOMMENDATION_CONTENT)) { - return Tools::file_get_contents(_PS_ROOT_DIR_.self::DASHBOARD_RECOMMENDATION_CONTENT); - } - return false; - } } diff --git a/controllers/admin/AdminModulesCatalogController.php b/controllers/admin/AdminModulesCatalogController.php index 72888b9d8..6fb11effa 100644 --- a/controllers/admin/AdminModulesCatalogController.php +++ b/controllers/admin/AdminModulesCatalogController.php @@ -23,7 +23,7 @@ class AdminModulesCatalogControllerCore extends AdminController public $modules; - const CATALOG_RECOMMENDATION_CONTENT = '/cache/catalog_recommendation.html'; + const RECOMMENDATION_CONTENT_FILE_PATH = '/cache/catalog_recommendation.html'; const ELEMENT_TYPE_MODULE = 1; const ELEMENT_TYPE_THEME = 2; @@ -240,17 +240,6 @@ class AdminModulesCatalogControllerCore extends AdminController ); } - public function getRecommendationContent() - { - if (!Tools::isFresh(self::CATALOG_RECOMMENDATION_CONTENT, _TIME_1_DAY_, false)) { - @file_put_contents(_PS_ROOT_DIR_.self::CATALOG_RECOMMENDATION_CONTENT, Tools::addonsRequest('catalog-recommendation')); - } - if (file_exists(_PS_ROOT_DIR_.self::CATALOG_RECOMMENDATION_CONTENT)) { - return Tools::file_get_contents(_PS_ROOT_DIR_.self::CATALOG_RECOMMENDATION_CONTENT); - } - return false; - } - public function sortList(&$list, $type) { diff --git a/js/admin.js b/js/admin.js index daae71858..ca5044a06 100644 --- a/js/admin.js +++ b/js/admin.js @@ -1700,9 +1700,9 @@ function loadRecommendation() token: token }, success: function(res) { - if (res.success && res.content && res.content.trim()) { + if (res.success && res.html && res.html.trim()) { $('#recommendation-wrapper-skeleton').fadeIn('slow'); - $('#recommendation-wrapper').html(res.content); + $('#recommendation-wrapper').html(res.html); let images = $('#recommendation-wrapper img'); let loaded = 0; let total = $(images).length;