Skip to content

Commit 8bb1d27

Browse files
committed
Merge branch 'develop'
PR#1001
2 parents adf0740 + c4e060b commit 8bb1d27

File tree

155 files changed

+6296
-2618
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

155 files changed

+6296
-2618
lines changed

.circleci/config.yml

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,24 +49,19 @@ shared: &shared
4949
php -dmemory_limit=-1 ../../../vendor/bin/phpunit ../../../vendor/algolia/algoliasearch-magento-2/Test
5050
5151
jobs:
52-
"magento-2.1":
53-
<<: *shared
54-
docker:
55-
- image: algolia/magento2-circleci:2.1.17
56-
5752
"magento-2.2":
5853
<<: *shared
5954
docker:
60-
- image: algolia/magento2-circleci:2.2.8
55+
- image: algolia/magento2-circleci:v2-2.2.8
6156

6257
"magento-2.3":
6358
<<: *shared
6459
docker:
65-
- image: algolia/magento2-circleci:2.3.0
60+
- image: algolia/magento2-circleci:v2-2.3.0
6661

6762
"quality-tools":
6863
docker:
69-
- image: algolia/magento2-circleci:2.3.0
64+
- image: algolia/magento2-circleci:v2-2.3.0
7065
working_directory: ~/build_directory/algoliasearch-magento-2
7166
steps:
7267
- checkout
@@ -76,19 +71,19 @@ jobs:
7671
sudo chown circleci:circleci ~/.composer/
7772
- restore_cache:
7873
keys:
79-
- composer-v2-{{ checksum "composer.json" }}
80-
- composer-v2-
74+
- composer-v3-{{ checksum "composer.json" }}
75+
- composer-v3-
8176

8277
- run:
8378
name: Prepare environment
8479
command: |
8580
sudo composer self-update
8681
composer config http-basic.'repo.magento.com' ${MAGENTO_AUTH_USERNAME} ${MAGENTO_AUTH_PASSWORD}
87-
composer install -n --prefer-dist --ignore-platform-reqs --no-progress
82+
composer install -n --prefer-dist --no-progress
8883
sudo chown circleci:circleci ~/.composer/
8984
composer global config prefer-stable true
9085
composer global config minimum-stability dev
91-
composer global require algolia/magento2-tools --ignore-platform-reqs
86+
composer global require algolia/magento2-tools
9287
9388
# We have to do this again because we restore the cache above, overwriting the vendor with the original.
9489
cd ~/magento_directory/vendor/algolia
@@ -97,10 +92,9 @@ jobs:
9792
cd ~/magento_directory
9893
composer dump-autoload
9994
- save_cache:
100-
key: composer-v2-{{ checksum "composer.json" }}
95+
key: composer-v3-{{ checksum "composer.json" }}
10196
paths:
10297
- vendor
103-
- ~/.composer/vendor
10498
- run:
10599
name: Quality tools
106100
command: |

Adapter/Algolia.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
namespace Algolia\AlgoliaSearch\Adapter;
44

55
use Algolia\AlgoliaSearch\Adapter\Aggregation\Builder as AlgoliaAggregationBuilder;
6+
use Algolia\AlgoliaSearch\Exceptions\UnreachableException;
67
use Algolia\AlgoliaSearch\Helper\AdapterHelper;
7-
use AlgoliaSearch\AlgoliaConnectionException;
88
use Magento\Framework\App\ResourceConnection;
99
use Magento\Framework\DB\Ddl\Table;
1010
use Magento\Framework\DB\Select;
@@ -110,7 +110,7 @@ public function query(RequestInterface $request)
110110

111111
$apiDocuments = array_map([$this, 'getApiDocument'], $documents);
112112
$table = $temporaryStorage->storeApiDocuments($apiDocuments);
113-
} catch (AlgoliaConnectionException $e) {
113+
} catch (UnreachableException $e) {
114114
return $this->nativeQuery($request);
115115
}
116116

Api/Data/RunInterface.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Algolia\AlgoliaSearch\Api\Data;
4+
5+
/**
6+
* Run Data Interface
7+
*
8+
* @api
9+
*/
10+
interface RunInterface
11+
{
12+
const TABLE_NAME = 'algoliasearch_queue_log';
13+
14+
/**#@+
15+
* Constants for keys of data array. Identical to the name of the getter in snake case
16+
*/
17+
const FIELD_RUN_ID = 'id';
18+
const FIELD_STARTED = 'started';
19+
const FIELD_DURATION = 'duration';
20+
const FIELD_PROCESSED_JOBS = 'processed_jobs';
21+
const FIELD_WITH_EMPTY_QUEUE = 'with_empty_queue';
22+
/**#@-*/
23+
}

Block/Algolia.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Algolia\AlgoliaSearch\Helper\AlgoliaHelper;
66
use Algolia\AlgoliaSearch\Helper\ConfigHelper;
7+
use Algolia\AlgoliaSearch\Helper\Configuration\PersonalizationHelper;
78
use Algolia\AlgoliaSearch\Helper\Data as CoreHelper;
89
use Algolia\AlgoliaSearch\Helper\Entity\CategoryHelper;
910
use Algolia\AlgoliaSearch\Helper\Entity\ProductHelper;
@@ -37,6 +38,7 @@ class Algolia extends Template implements CollectionDataSourceInterface
3738
private $coreHelper;
3839
private $categoryHelper;
3940
private $landingPageHelper;
41+
private $personalizationHelper;
4042
private $checkoutSession;
4143
private $date;
4244

@@ -57,6 +59,7 @@ public function __construct(
5759
CoreHelper $coreHelper,
5860
CategoryHelper $categoryHelper,
5961
LandingPageHelper $landingPageHelper,
62+
PersonalizationHelper $personalizationHelper,
6063
CheckoutSession $checkoutSession,
6164
DateTime $date,
6265
array $data = []
@@ -74,6 +77,7 @@ public function __construct(
7477
$this->coreHelper = $coreHelper;
7578
$this->categoryHelper = $categoryHelper;
7679
$this->landingPageHelper = $landingPageHelper;
80+
$this->personalizationHelper = $personalizationHelper;
7781
$this->checkoutSession = $checkoutSession;
7882
$this->date = $date;
7983

@@ -121,6 +125,11 @@ public function getAlgoliaHelper()
121125
return $this->algoliaHelper;
122126
}
123127

128+
public function getPersonalizationHelper()
129+
{
130+
return $this->personalizationHelper;
131+
}
132+
124133
public function getCurrencySymbol()
125134
{
126135
return $this->currency->getCurrency($this->getCurrencyCode())->getSymbol();

Block/Checkout/Conversion.php

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
3+
namespace Algolia\AlgoliaSearch\Block\Checkout;
4+
5+
use Algolia\AlgoliaSearch\Helper\ConfigHelper;
6+
use Magento\Checkout\Model\Session;
7+
use Magento\Framework\View\Element\Template;
8+
use Magento\Framework\View\Element\Template\Context;
9+
use Magento\Sales\Model\Order\Item;
10+
11+
class Conversion extends Template
12+
{
13+
/**
14+
* @var Session
15+
*/
16+
protected $checkoutSession;
17+
18+
/**
19+
* @var ConfigHelper
20+
*/
21+
protected $configHelper;
22+
23+
/**
24+
* @param Context $context
25+
* @param Session $checkoutSession
26+
* @param ConfigHelper $configHelper
27+
* @param array $data
28+
*/
29+
public function __construct(
30+
Context $context,
31+
Session $checkoutSession,
32+
ConfigHelper $configHelper,
33+
array $data = []
34+
) {
35+
parent::__construct($context, $data);
36+
$this->checkoutSession = $checkoutSession;
37+
$this->configHelper = $configHelper;
38+
}
39+
40+
protected function getOrderItems()
41+
{
42+
/** @var \Magento\Sales\Model\Order $order */
43+
$order = $this->checkoutSession->getLastRealOrder();
44+
45+
return $order->getAllVisibleItems();
46+
}
47+
48+
public function getOrderItemsConversionJson()
49+
{
50+
$orderItemsData = [];
51+
$orderItems = $this->getOrderItems();
52+
53+
/** @var Item $item */
54+
foreach ($orderItems as $item) {
55+
if ($item->hasData('algoliasearch_query_param')) {
56+
$orderItemsData[$item->getProductId()] = json_decode($item->getData('algoliasearch_query_param'));
57+
}
58+
}
59+
60+
return json_encode($orderItemsData);
61+
}
62+
63+
public function toHtml()
64+
{
65+
$storeId = $this->checkoutSession->getLastRealOrder()->getStoreId();
66+
if ($this->configHelper->isClickConversionAnalyticsEnabled($storeId)
67+
&& $this->configHelper->getConversionAnalyticsMode($storeId) === 'place_order'
68+
) {
69+
return parent::toHtml();
70+
}
71+
72+
return '';
73+
}
74+
}

Block/Configuration.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public function getConfiguration()
4444

4545
$algoliaHelper = $this->getAlgoliaHelper();
4646

47+
$persoHelper = $this->getPersonalizationHelper();
48+
4749
$baseUrl = rtrim($this->getBaseUrl(), '/');
4850

4951
$currencyCode = $this->getCurrencyCode();
@@ -203,11 +205,42 @@ public function getConfiguration()
203205
'logo' => $this->getViewFileUrl('Algolia_AlgoliaSearch::images/search-by-algolia.svg'),
204206
],
205207
'ccAnalytics' => [
208+
'enabled' => $config->isClickConversionAnalyticsEnabled(),
206209
'ISSelector' => $config->getClickConversionAnalyticsISSelector(),
207210
'conversionAnalyticsMode' => $config->getConversionAnalyticsMode(),
208211
'addToCartSelector' => $config->getConversionAnalyticsAddToCartSelector(),
209212
'orderedProductIds' => $this->getOrderedProductIds($config, $request),
210213
],
214+
'isPersonalizationEnabled' => $persoHelper->isPersoEnabled(),
215+
'personalization' => [
216+
'enabled' => $persoHelper->isPersoEnabled(),
217+
'viewedEvents' => [
218+
'viewProduct' => [
219+
'eventName' => __('Viewed Product'),
220+
'enabled' => $persoHelper->isViewProductTracked(),
221+
'method' => 'viewedObjectIDs',
222+
],
223+
],
224+
'clickedEvents' => [
225+
'productClicked' => [
226+
'eventName' => __('Product Clicked'),
227+
'enabled' => $persoHelper->isProductClickedTracked(),
228+
'selector' => $persoHelper->getProductClickedSelector(),
229+
'method' => 'clickedObjectIDs',
230+
],
231+
'productRecommended' => [
232+
'eventName' => __('Recommended Product Clicked'),
233+
'enabled' => $persoHelper->isProductRecommendedTracked(),
234+
'selector' => $persoHelper->getProductRecommendedSelector(),
235+
'method' => 'clickedObjectIDs',
236+
],
237+
],
238+
'filterClicked' => [
239+
'eventName' => __('Filter Clicked'),
240+
'enabled' => $persoHelper->isFilterClickedTracked(),
241+
'method' => 'clickedFilters',
242+
],
243+
],
211244
'analytics' => $config->getAnalyticsConfig(),
212245
'now' => $this->getTimestamp(),
213246
'translations' => [
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace Algolia\AlgoliaSearch\Block\System\Form\Field;
4+
5+
class PersonalizationSelector extends \Magento\Config\Block\System\Config\Form\Field
6+
{
7+
/**
8+
* Retrieve label for the inheritance checkbox
9+
*
10+
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
11+
*
12+
* @return string
13+
*/
14+
protected function _getInheritCheckboxLabel(\Magento\Framework\Data\Form\Element\AbstractElement $element)
15+
{
16+
$checkboxLabel = __('Use default Magento selector');
17+
if ($element->getCanUseDefaultValue()) {
18+
$checkboxLabel = __('Use Default');
19+
}
20+
if ($element->getCanUseWebsiteValue()) {
21+
$checkboxLabel = __('Use Website');
22+
}
23+
24+
return $checkboxLabel;
25+
}
26+
}

Controller/Adminhtml/Queue.php

Lines changed: 0 additions & 42 deletions
This file was deleted.

Controller/Adminhtml/Queue/AbstractAction.php

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use Algolia\AlgoliaSearch\Model\JobFactory;
66
use Algolia\AlgoliaSearch\Model\ResourceModel\Job as JobResourceModel;
77
use Magento\Backend\App\Action\Context;
8-
use Magento\Framework\App\ResourceConnection;
98
use Magento\Framework\Registry;
109
use Magento\Indexer\Model\IndexerFactory;
1110

@@ -23,10 +22,6 @@ abstract class AbstractAction extends \Magento\Backend\App\Action
2322
/** @var IndexerFactory */
2423
protected $indexerFactory;
2524

26-
protected $db;
27-
28-
protected $tableName;
29-
3025
/**
3126
* @param Context $context
3227
* @param Registry $coreRegistry
@@ -39,17 +34,14 @@ public function __construct(
3934
Registry $coreRegistry,
4035
JobFactory $jobFactory,
4136
JobResourceModel $jobResourceModel,
42-
IndexerFactory $indexerFactory,
43-
ResourceConnection $resourceConnection
37+
IndexerFactory $indexerFactory
4438
) {
4539
parent::__construct($context);
4640

4741
$this->coreRegistry = $coreRegistry;
4842
$this->jobFactory = $jobFactory;
4943
$this->jobResourceModel = $jobResourceModel;
5044
$this->indexerFactory = $indexerFactory;
51-
$this->db = $resourceConnection->getConnection('core_write');
52-
$this->tableName = $resourceConnection->getTableName('algoliasearch_queue');
5345
}
5446

5547
/** @return bool */

Controller/Adminhtml/Queue/Clear.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ public function execute()
1313
$resultRedirect->setPath('*/*/index');
1414

1515
try {
16-
$this->db->query('TRUNCATE TABLE ' . $this->tableName);
16+
$connection = $this->jobResourceModel->getConnection();
17+
$connection->truncateTable($this->jobResourceModel->getMainTable());
18+
1719
$this->messageManager->addNoticeMessage(__('Queue has been cleared.'));
1820
} catch (\Exception $e) {
1921
$this->messageManager->addExceptionMessage($e);

0 commit comments

Comments
 (0)