Skip to content
Merged

Develop #1145

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ protected function _prepareColumns()
$this->addColumn('data', array(
'header' => Mage::helper('algoliasearch')->__('Data'),
'index' => 'data',
'renderer' => 'Algolia_Algoliasearch_Block_Adminhtml_IndexingQueue_Grid_Renderer_Json'
'renderer' => 'Algolia_Algoliasearch_Block_Adminhtml_Indexingqueue_Grid_Renderer_Json'
));

$this->addColumn('max_retries', array(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

class Algolia_Algoliasearch_Block_Checkout_Success_Conversion extends Mage_Core_Block_Template
{
/** @var Mage_Sales_Model_Order */
protected $_order;

protected function _construct()
{
parent::_construct();

if ($orderId = Mage::getSingleton('checkout/session')->getLastOrderId()) {
$this->_order = Mage::getModel('sales/order')->load($orderId);
}
}

/**
* @return string
*/
public function getOrderItemsConversionJson()
{
$orderItemsData = array();
$orderItems = $this->_order->getAllVisibleItems();

/** @var Item $item */
foreach ($orderItems as $item) {
if ($item->getData('algoliasearch_query_param') !== '') {
$orderItemsData[$item->getProductId()] = json_decode($item->getData('algoliasearch_query_param'));
}
}

return Mage::helper('core')->jsonEncode($orderItemsData);
}

public function _toHtml()
{
if ($this->_order
&& Mage::helper('algoliasearch/config')->isClickConversionAnalyticsEnabled($this->_order->getStoreId())
&& Mage::helper('algoliasearch/config')->getConversionAnalyticsMode($this->_order->getStoreId()) === 'place_order'
) {
return parent::_toHtml();
}

return '';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,47 +23,33 @@ public function getIndexSettings($storeId)

public function getPages($storeId, $pageIds = null)
{
/** @var Mage_Cms_Model_Page $cmsPage */
$cmsPage = Mage::getModel('cms/page');

/** @var Mage_Cms_Model_Resource_Page_Collection $pages */
$pages = $cmsPage->getCollection()->addStoreFilter($storeId)->addFieldToFilter('is_active', 1);
$pageCollection = Mage::getModel('cms/page')->getCollection()
->addStoreFilter($storeId)
->addFieldToFilter('is_active', 1);

if ($pageIds && count($pageIds) > 0) {
$pages = $pages->addFieldToFilter('page_id', array('in' => $pageIds));
$pageCollection->addFieldToFilter('page_id', array('in' => $pageIds));
}

Mage::dispatchEvent('algolia_after_pages_collection_build', array('store' => $storeId, 'collection' => $pages));

$ids = $pages->toOptionArray();

$exludedPages = array_values($this->config->getExcludedPages());
Mage::dispatchEvent('algolia_after_pages_collection_build', array('store' => $storeId, 'collection' => $pageCollection));

foreach ($exludedPages as &$excludedPage) {
$excludedPages = array_values($this->config->getExcludedPages());
foreach ($excludedPages as &$excludedPage) {
$excludedPage = $excludedPage['pages'];
}

$pages = array();

foreach ($ids as $key => $value) {
if (in_array($value['value'], $exludedPages)) {
/** @var Mage_Cms_Model_Page $page */
foreach ($pageCollection as $page) {
if (in_array($page->getIdentifier(), $excludedPages)) {
continue;
}

$pageObject = array();

$pageObject['slug'] = $value['value'];
$pageObject['name'] = $value['label'];

/** @var Mage_Cms_Model_Page $page */
$page = Mage::getModel('cms/page');

$page->setStoreId($storeId);
$page->load($pageObject['slug'], 'identifier');

if (!$page->getId()) {
continue;
}
$pageObject['slug'] = $page->getIdentifier();
$pageObject['name'] = $page->getTitle();

$content = $page->getContent();
if ($this->config->getRenderTemplateDirectives()) {
Expand Down
17 changes: 12 additions & 5 deletions app/code/community/Algolia/Algoliasearch/Model/Observer.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,10 @@ public function saveProduct(Varien_Event_Observer $observer)
Algolia_Algoliasearch_Model_Indexer_Algolia::$product_categories[$product->getId()] = $product->getCategoryIds();
}

/**
* @event cms_page_save_commit_after
* @param Varien_Event_Observer $observer
*/
public function savePage(Varien_Event_Observer $observer)
{
if (!$this->config->getApplicationID()
Expand All @@ -115,15 +119,18 @@ public function savePage(Varien_Event_Observer $observer)
}

/** @var Mage_Cms_Model_Page $page */
$page = $observer->getDataObject();
$page = Mage::getModel('cms/page')->load($page->getId());

$storeIds = $page->getStoreId();
$page = $observer->getEvent()->getDataObject();
$storeIds = $page->getStores();

/** @var Algolia_Algoliasearch_Model_Resource_Engine $engine */
$engine = Mage::getResourceModel('algoliasearch/engine');

$engine->rebuildPages($storeIds, $page->getId());
foreach ($storeIds as $storeId) {
if ($storeId == 0) {
$storeId = null;
}
$engine->rebuildPages($storeId, array($page->getPageId()));
}
}

public function deleteProductsStoreIndices(Varien_Object $event)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php

class Algolia_Algoliasearch_Model_Observer_Conversion
{
protected $_analyticsParams = array(
'queryID',
'indexName',
'objectID',
);

/**
* @param null $storeId
* @return bool
*/
protected function _isOrderConversionTrackingEnabled($storeId = null)
{
return Mage::helper('algoliasearch/config')->isClickConversionAnalyticsEnabled($storeId)
&& Mage::helper('algoliasearch/config')->getConversionAnalyticsMode($storeId) === 'place_order';
}

/**
* @param array $params
* @return bool
*/
protected function _hasRequiredParameters($params = array())
{
foreach ($this->_analyticsParams as $requiredParam) {
if (!isset($params[$requiredParam])) {
return false;
}
}

return true;
}

/**
* @event catalog_controller_product_init_before
*/
public function setAlgoliaParamsToSession(Varien_Event_Observer $observer)
{
$checkoutSession = Mage::getSingleton('checkout/session');
if (!$this->_isOrderConversionTrackingEnabled($checkoutSession->getQuote()->getStoreId())) {
return;
}

/** @var Mage_Core_Controller_Front_Action $controllerAction */
$controllerAction = $observer->getEvent()->getControllerAction();
$params = $controllerAction->getRequest()->getParams();

if (!$this->_hasRequiredParameters($params)) {
return;
}

$conversionData = array(
'queryID' => $params['queryID'],
'indexName' => $params['indexName'],
'objectID' => $params['objectID'],
);

$session = Mage::getSingleton('core/session', array('name' => 'frontend'));
$session->setData('algolia_conversion_parameters', Mage::helper('core')->jsonEncode($conversionData));
}

/**
* @event checkout_cart_product_add_after
*/
public function saveAlgoliaParamToQuoteItem(Varien_Event_Observer $observer)
{
/** @var Mage_Sales_Model_Quote_Item $quoteItem */
$quoteItem = $observer->getEvent()->getQuoteItem();
/** @var Mage_Catalog_Model_Product $product */
$product = $observer->getEvent()->getProduct();

if ($this->_isOrderConversionTrackingEnabled($product->getStoreId())) {
$session = Mage::getSingleton('core/session');
$quoteItem->setData('algoliasearch_query_param', $session->getData('algolia_conversion_parameters'));
$session->unsetData('algolia_conversion_parameters');
}
}
}
37 changes: 32 additions & 5 deletions app/code/community/Algolia/Algoliasearch/etc/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<config>
<modules>
<Algolia_Algoliasearch>
<version>1.16.0</version>
<version>1.17.0</version>
</Algolia_Algoliasearch>
</modules>
<frontend>
Expand Down Expand Up @@ -140,14 +140,35 @@
</observers>
</catalog_product_save_before>

<cms_page_save_before>
<cms_page_save_commit_after>
<observers>
<algolia_savepage>
<class>algoliasearch/observer</class>
<method>savePage</method>
</algolia_savepage>
</observers>
</cms_page_save_before>
</cms_page_save_commit_after>

<catalog_controller_product_init_before>
<observers>
<algolia_conversion_save_request_to_session>
<type>singleton</type>
<class>algoliasearch/observer_conversion</class>
<method>setAlgoliaParamsToSession</method>
</algolia_conversion_save_request_to_session>
</observers>
</catalog_controller_product_init_before>

<checkout_cart_product_add_after>
<observers>
<algolia_conversion_save_quote_item>
<type>singleton</type>
<class>algoliasearch/observer_conversion</class>
<method>saveAlgoliaParamToQuoteItem</method>
</algolia_conversion_save_quote_item>
</observers>
</checkout_cart_product_add_after>

</events>
<resources>
<algoliasearch_setup>
Expand Down Expand Up @@ -181,6 +202,13 @@
</algolia_delete_products>
</indexer>
</index>
<fieldsets>
<sales_convert_quote_item>
<algoliasearch_query_param>
<to_order_item>*</to_order_item>
</algoliasearch_query_param>
</sales_convert_quote_item>
</fieldsets>
</global>
<default>
<algoliasearch>
Expand All @@ -198,8 +226,7 @@
</credentials>
<products>
<number_product_results>9</number_product_results>
<product_additional_attributes>a:10:{s:18:"_1427959997377_377";a:4:{s:9:"attribute";s:4:"name";s:10:"searchable";s:1:"1";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";}s:18:"_1427960012597_597";a:4:{s:9:"attribute";s:4:"path";s:10:"searchable";s:1:"1";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";}s:18:"_1427961262735_735";a:4:{s:9:"attribute";s:10:"categories";s:10:"searchable";s:1:"1";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";}s:18:"_1447846016385_385";a:5:{s:9:"attribute";s:5:"color";s:10:"searchable";s:1:"1";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";s:14:"index_no_value";s:1:"0";}s:18:"_1427961324936_936";a:4:{s:9:"attribute";s:3:"sku";s:10:"searchable";s:1:"1";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";}s:18:"_1427962021621_621";a:4:{s:9:"attribute";s:5:"price";s:10:"searchable";s:1:"0";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";}s:18:"_1427977839554_554";a:4:{s:9:"attribute";s:11:"ordered_qty";s:10:"searchable";s:1:"0";s:11:"retrievable";s:1:"0";s:5:"order";s:9:"unordered";}s:18:"_1428566173508_508";a:4:{s:9:"attribute";s:9:"stock_qty";s:10:"searchable";s:1:"0";s:11:"retrievable";s:1:"0";s:5:"order";s:9:"unordered";}s:17:"_1433929490023_23";a:4:{s:9:"attribute";s:14:"rating_summary";s:10:"searchable";s:1:"0";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";}s:18:"_1436178594492_492";a:4:{s:9:"attribute";s:10:"created_at";s:10:"searchable";s:1:"0";s:11:"retrievable";s:1:"0";s:5:"order";s:9:"unordered";}}</product_additional_attributes>
<custom_ranking_product_attributes>a:1:{s:18:"_1427960305274_274";a:2:{s:9:"attribute";s:11:"ordered_qty";s:5:"order";s:4:"desc";}}</custom_ranking_product_attributes>
<product_additional_attributes>a:9:{s:18:"_1427959997377_377";a:5:{s:9:"attribute";s:4:"name";s:10:"searchable";s:1:"1";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";s:14:"index_no_value";s:1:"1";}s:18:"_1427960012597_597";a:5:{s:9:"attribute";s:4:"path";s:10:"searchable";s:1:"1";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";s:14:"index_no_value";s:1:"1";}s:18:"_1427961262735_735";a:5:{s:9:"attribute";s:10:"categories";s:10:"searchable";s:1:"1";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";s:14:"index_no_value";s:1:"1";}s:18:"_1447846016385_385";a:5:{s:9:"attribute";s:5:"color";s:10:"searchable";s:1:"1";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";s:14:"index_no_value";s:1:"0";}s:18:"_1427961324936_936";a:5:{s:9:"attribute";s:3:"sku";s:10:"searchable";s:1:"1";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";s:14:"index_no_value";s:1:"1";}s:18:"_1427962021621_621";a:5:{s:9:"attribute";s:5:"price";s:10:"searchable";s:1:"0";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";s:14:"index_no_value";s:1:"1";}s:18:"_1428566173508_508";a:5:{s:9:"attribute";s:9:"stock_qty";s:10:"searchable";s:1:"0";s:11:"retrievable";s:1:"0";s:5:"order";s:9:"unordered";s:14:"index_no_value";s:1:"1";}s:17:"_1433929490023_23";a:5:{s:9:"attribute";s:14:"rating_summary";s:10:"searchable";s:1:"0";s:11:"retrievable";s:1:"1";s:5:"order";s:9:"unordered";s:14:"index_no_value";s:1:"1";}s:18:"_1436178594492_492";a:5:{s:9:"attribute";s:10:"created_at";s:10:"searchable";s:1:"0";s:11:"retrievable";s:1:"0";s:5:"order";s:9:"unordered";s:14:"index_no_value";s:1:"1";}}</product_additional_attributes>
<results_limit>1000</results_limit>
<show_suggestions_on_no_result_page>1</show_suggestions_on_no_result_page>
<index_visibility>all</index_visibility>
Expand Down
6 changes: 3 additions & 3 deletions app/code/community/Algolia/Algoliasearch/etc/system.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1015,7 +1015,7 @@
<p>Default value: 3000</p>
]]>
</comment>
<depends><enable_analytics>1</enable_analytics></depends>
<depends><enable>1</enable></depends>
</delay>
<trigger_on_ui_interaction translate="label comment">
<label>Trigger the push function before the the delay on UI interaction</label>
Expand All @@ -1031,7 +1031,7 @@
<p>Default value: Yes</p>
]]>
</comment>
<depends><enable_analytics>1</enable_analytics></depends>
<depends><enable>1</enable></depends>
</trigger_on_ui_interaction>
<push_initial_search translate="label comment">
<label>Trigger the push function after the initial search</label>
Expand All @@ -1047,7 +1047,7 @@
<p>Default value: No</p>
]]>
</comment>
<depends><enable_analytics>1</enable_analytics></depends>
<depends><enable>1</enable></depends>
</push_initial_search>
</fields>
</analytics>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php
/** @var Mage_Core_Model_Resource_Setup $installer */
$installer = $this;
$installer->startSetup();

$setup = new Mage_Sales_Model_Resource_Setup('core_setup');

$setup->addAttribute(
'quote_item',
'algoliasearch_query_param',
array(
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
'grid' => false,
'comment' => 'AlgoliaSearch Conversion Query Parameters'
)
);

$setup->addAttribute(
'order_item',
'algoliasearch_query_param',
array(
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
'grid' => false,
'comment' => 'AlgoliaSearch Conversion Query Parameters'
)
);

$installer->endSetup();
6 changes: 6 additions & 0 deletions app/design/frontend/base/default/layout/algoliasearch.xml
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,10 @@
</reference>
</algolia_search_handle_click_conversion_analytics>

<checkout_onepage_success>
<reference name="before_body_end">
<block type="algoliasearch/checkout_success_conversion" name="algolia.order.conversion" template="algoliasearch/checkout/success/conversion.phtml" />
</reference>
</checkout_onepage_success>

</layout>
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,13 @@ if ($config->isCustomerGroupsEnabled($storeId)) {

<!-- Product hit template -->
<script type="text/template" id="autocomplete_products_template">
<a class="algoliasearch-autocomplete-hit" href="{{url}}">
<a class="algoliasearch-autocomplete-hit"
{{^__queryID}} href="{{url}}" {{/__queryID}}
{{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}
data-objectid="{{objectID}}"
data-position="{{__position}}"
data-queryid="{{__queryID}}"
>
{{#thumbnail_url}}
<div class="thumb"><img src="{{thumbnail_url}}" /></div>
{{/thumbnail_url}}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php
/** @var Algolia_Algoliasearch_Block_Checkout_Success_Conversion $this */
$orderItemsJson = $this->getOrderItemsConversionJson();
?>

<script type="text/javascript">
var algoliaOrderConversionJson = <?php echo $orderItemsJson ?>;
</script>
Loading