Skip to content

Commit

Permalink
Check if the update on save is apt (#233)
Browse files Browse the repository at this point in the history
* Check if the update on save is apt

* fix translations
  • Loading branch information
eduardogomez97 authored Aug 26, 2024
1 parent 3fe1b03 commit 90ce933
Show file tree
Hide file tree
Showing 5 changed files with 153 additions and 55 deletions.
84 changes: 60 additions & 24 deletions doofinder.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

/**
* NOTICE OF LICENSE
*
Expand Down Expand Up @@ -32,15 +33,15 @@ class Doofinder extends Module
const DOOMANAGER_URL = 'https://admin.doofinder.com';
const GS_SHORT_DESCRIPTION = 1;
const GS_LONG_DESCRIPTION = 2;
const VERSION = '4.8.6';
const VERSION = '4.8.7';
const YES = 1;
const NO = 0;

public function __construct()
{
$this->name = 'doofinder';
$this->tab = 'search_filter';
$this->version = '4.8.6';
$this->version = '4.8.7';
$this->author = 'Doofinder (http://www.doofinder.com)';
$this->ps_versions_compliancy = ['min' => '1.5', 'max' => _PS_VERSION_];
$this->module_key = 'd1504fe6432199c7f56829be4bd16347';
Expand Down Expand Up @@ -373,13 +374,15 @@ protected function getConfigFormSearchLayer()
'name' => 'DF_SHOW_LAYER',
'is_bool' => true,
'values' => $this->getBooleanFormValue(),
], [
],
[
'type' => (version_compare(_PS_VERSION_, '1.6.0', '>=') ? 'switch' : 'radio'),
'label' => $this->l('Doofinder search layer in mobile version'),
'name' => 'DF_SHOW_LAYER_MOBILE',
'is_bool' => true,
'values' => $this->getBooleanFormValue(),
], [
],
[
'type' => 'text',
'label' => $this->l('Doofinder Store ID'),
'name' => 'DF_INSTALLATION_ID',
Expand Down Expand Up @@ -451,7 +454,8 @@ protected function renderFormDataFeed($adv = false)
];

if (!$this->showNewShopForm(Context::getContext()->shop)) {
$html .= $helper->generateForm([$this->getConfigFormDataFeed()]);
$valid_update_on_save = $this->is_valid_update_on_save();
$html .= $helper->generateForm([$this->getConfigFormDataFeed($valid_update_on_save)]);
// Search layer form
$helper->tpl_vars['fields_value'] = $this->getConfigFormValuesSearchLayer();
$html .= $helper->generateForm([$this->getConfigFormSearchLayer()]);
Expand All @@ -468,8 +472,28 @@ protected function renderFormDataFeed($adv = false)
*
* @return array
*/
protected function getConfigFormDataFeed()
{
protected function getConfigFormDataFeed($valid_update_on_save = false)
{
if ($valid_update_on_save) {
$disabled = false;
$query = [
5 => ['id' => 5, 'name' => sprintf($this->l('Each %s minutes'), '5')],
15 => ['id' => 15, 'name' => sprintf($this->l('Each %s minutes'), '15')],
30 => ['id' => 30, 'name' => sprintf($this->l('Each %s minutes'), '30')],
60 => ['id' => 60, 'name' => $this->l('Each hour')],
120 => ['id' => 120, 'name' => sprintf($this->l('Each %s hours'), '2')],
360 => ['id' => 360, 'name' => sprintf($this->l('Each %s hours'), '6')],
720 => ['id' => 720, 'name' => sprintf($this->l('Each %s hours'), '12')],
1440 => ['id' => 1440, 'name' => $this->l('Once a day')],
0 => ['id' => 0, 'name' => $this->l('Disabled')],
];
} else {
$disabled = true;
$query = [
0 => ['id' => 0, 'name' => $this->l('Disabled')],
];
}

return [
'form' => [
'legend' => [
Expand Down Expand Up @@ -551,20 +575,11 @@ protected function getConfigFormDataFeed()
[
'type' => 'select',
'label' => $this->l('Automatically process modified products'),
'desc' => $this->l('Configure how often changes will be sent to Doofinder. It will only be executed if there are changes.'),
'desc' => $this->l('This action will only be executed if there are changes. If you see the field disabled, it is because you are making a usage in the indexes that is not supported by the automatic processing of modified products.'),
'name' => 'DF_UPDATE_ON_SAVE_DELAY',
'disabled' => $disabled,
'options' => [
'query' => [
5 => ['id' => 5, 'name' => sprintf($this->l('Each %s minutes'), '5')],
15 => ['id' => 15, 'name' => sprintf($this->l('Each %s minutes'), '15')],
30 => ['id' => 30, 'name' => sprintf($this->l('Each %s minutes'), '30')],
60 => ['id' => 60, 'name' => $this->l('Each hour')],
120 => ['id' => 120, 'name' => sprintf($this->l('Each %s hours'), '2')],
360 => ['id' => 360, 'name' => sprintf($this->l('Each %s hours'), '6')],
720 => ['id' => 720, 'name' => sprintf($this->l('Each %s hours'), '12')],
1440 => ['id' => 1440, 'name' => $this->l('Once a day')],
0 => ['id' => 0, 'name' => $this->l('Disabled')],
],
'query' => $query,
'id' => 'id',
'name' => 'name',
],
Expand Down Expand Up @@ -1280,6 +1295,26 @@ private function indexApiInvokeReindexing()
Configuration::updateValue('DF_FEED_INDEXED', false);
}

private function is_valid_update_on_save()
{
require_once 'lib/doofinder_installation.php';

$region = Configuration::get('DF_REGION');
$api_key = Configuration::get('DF_API_KEY');
$api = new DoofinderInstallation($api_key, $region);
$decode_response = $api->is_valid_update_on_save(Configuration::get('DF_INSTALLATION_ID'));

if (empty($decode_response)) {
$this->debug('Error checking search engines: ' . json_encode($decode_response));

Configuration::updateValue('DF_UPDATE_ON_SAVE_DELAY', 0);

return false;
}

return @$decode_response['valid?'];
}

/**
* Perform an API connection test
*
Expand Down Expand Up @@ -1389,7 +1424,8 @@ public function searchOnApi(
'timeout' => $timeout,
'types' => [
'product',
], 'transformer' => 'basic',
],
'transformer' => 'basic',
];
if ($query_name) {
$queryParams['query_name'] = $query_name;
Expand Down Expand Up @@ -1421,7 +1457,7 @@ public function searchOnApi(
}
$id_product = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(
'SELECT id_product FROM ' . _DB_PREFIX_ . 'product_attribute'
. ' WHERE id_product_attribute = ' . (int) pSQL($id_product_attribute)
. ' WHERE id_product_attribute = ' . (int) pSQL($id_product_attribute)
);
$product_pool_ids[] = ((!empty($id_product)) ? (int) pSQL($id_product) : 0);
}
Expand Down Expand Up @@ -1467,10 +1503,10 @@ public function searchOnApi(
DATE_SUB(
NOW(),
INTERVAL ' . (Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT'))
? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20) . ' DAY
? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20) . ' DAY
)
) > 0 new' . (Combination::isFeatureActive() ?
', MAX(product_attribute_shop.minimal_quantity) AS product_attribute_minimal_quantity' : '') . '
', MAX(product_attribute_shop.minimal_quantity) AS product_attribute_minimal_quantity' : '') . '
FROM ' . _DB_PREFIX_ . 'product p
' . Shop::addSqlAssociation('product', 'p') . '
INNER JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (
Expand All @@ -1479,7 +1515,7 @@ public function searchOnApi(
. (Combination::isFeatureActive() ? ' LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute` pa
ON (p.`id_product` = pa.`id_product`)
' . Shop::addSqlAssociation('product_attribute', 'pa', false, ($show_variations) ? '' :
' product_attribute_shop.default_on = 1') . '
' product_attribute_shop.default_on = 1') . '
' . Product::sqlStock('p', 'product_attribute_shop', false, $context->shop) :
Product::sqlStock('p', 'product', false, Context::getContext()->shop)) . '
LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`
Expand Down
62 changes: 62 additions & 0 deletions lib/doofinder_installation.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?php
/**
* NOTICE OF LICENSE
*
* This file is licenced under the Software License Agreement.
* With the purchase or the installation of the software in your application
* you accept the licence agreement.
*
* You must not modify, adapt or create derivative works of this source code
*
* @author Doofinder
* @copyright Doofinder
* @license GPLv3
*/
require_once _PS_MODULE_DIR_ . 'doofinder/lib/EasyREST.php';

if (!defined('_PS_VERSION_')) {
exit;
}

const API_URL = 'https://{region}-plugins.doofinder.com';

class DoofinderInstallation
{
private $api_key;
private $api_url;

public function __construct($api_key, $region)
{
$this->api_key = $api_key;
$this->api_url = str_replace('{region}', $region, API_URL);
}

/**
* Make a request to the plugins API to to check that the update on save is valid
*
* @param string $installation_id
* @param string $callback_url
*/
public function is_valid_update_on_save($installation_id)
{
$api_endpoint = $this->api_url . '/' . $installation_id . '/validate-update-on-save';

return $this->get($api_endpoint);
}

private function get($url)
{
$client = new EasyREST();

$response = $client->get(
$url,
null,
false,
false,
'application/json',
['Authorization: Token ' . $this->api_key]
);

return json_decode($response->response, true);
}
}
2 changes: 1 addition & 1 deletion translations/en.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
$_MODULE['<{doofinder}prestashop>doofinder_ebe75aa799359b32559a09eae8594835'] = 'Select features will be shown in feed';
$_MODULE['<{doofinder}prestashop>doofinder_90dce1b992114b5c7ab37ee99ea195ec'] = 'Product Image Size';
$_MODULE['<{doofinder}prestashop>doofinder_ae29d32626c4da07fe58def585bbc283'] = 'Automatically process modified products';
$_MODULE['<{doofinder}prestashop>doofinder_c820ca1511d196b41e53253c03ab742f'] = 'Configure how often changes will be sent to Doofinder. It will only be executed if there are changes.';
$_MODULE['<{doofinder}prestashop>doofinder_c820ca1511d196b41e53253c03ab742f'] = 'This action will only be executed if there are changes. If you see the field disabled, it is because you are making a usage in the indexes that is not supported by the automatic processing of modified products.';
$_MODULE['<{doofinder}prestashop>doofinder_9150cc930978b400710ef1c218af6478'] = 'Each %s minutes';
$_MODULE['<{doofinder}prestashop>doofinder_f826cc3c38088c39b0a05cf87435e08f'] = 'Each hour';
$_MODULE['<{doofinder}prestashop>doofinder_c5638b8b3adb3469c89b8fc43040a55e'] = 'Each %s hours';
Expand Down
Loading

0 comments on commit 90ce933

Please sign in to comment.