Version Notes
[!] Some attribute values could be ignored in the full-text search. Fixed.
[*] Full import is now more stable, less memory-consuming, and more DB error-resistant.
Download this release
Release Info
| Developer | Simbirsk Technologies, Ltd. |
| Extension | Simtech_Searchanise |
| Version | 1.1.7 |
| Comparing to | |
| See all releases | |
Code changes from version 1.1.6 to 1.1.7
- app/code/community/Simtech/Searchanise/Helper/ApiSe.php +98 -89
- app/code/community/Simtech/Searchanise/Helper/ApiXML.php +40 -28
- app/code/community/Simtech/Searchanise/controllers/AsyncController.php +20 -1
- app/code/community/Simtech/Searchanise/controllers/InfoController.php +32 -16
- app/code/community/Simtech/Searchanise/etc/config.xml +2 -1
- app/code/community/Simtech/Searchanise/etc/config_without_search.xml +2 -1
- package.xml +6 -7
app/code/community/Simtech/Searchanise/Helper/ApiSe.php
CHANGED
|
@@ -490,6 +490,11 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
| 490 |
{
|
| 491 |
return self::getSetting('server_version');
|
| 492 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 493 |
|
| 494 |
public static function getSearchTimeout()
|
| 495 |
{
|
|
@@ -1136,42 +1141,49 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
| 1136 |
|
| 1137 |
public static function getMinMaxProductId($store = null)
|
| 1138 |
{
|
| 1139 |
-
$
|
| 1140 |
-
$
|
| 1141 |
-
|
|
|
|
| 1142 |
->getCollection()
|
| 1143 |
->addAttributeToSort('entity_id', Varien_Data_Collection::SORT_ORDER_ASC)
|
| 1144 |
->setPageSize(1);
|
| 1145 |
if ($store) {
|
| 1146 |
-
$
|
| 1147 |
}
|
| 1148 |
-
$
|
| 1149 |
-
|
| 1150 |
-
$
|
| 1151 |
->getCollection()
|
| 1152 |
->addAttributeToSort('entity_id', Varien_Data_Collection::SORT_ORDER_DESC)
|
| 1153 |
->setPageSize(1);
|
| 1154 |
if ($store) {
|
| 1155 |
-
$
|
| 1156 |
}
|
| 1157 |
-
$
|
| 1158 |
|
| 1159 |
-
if (
|
| 1160 |
-
$
|
| 1161 |
-
|
|
|
|
|
|
|
|
|
|
| 1162 |
}
|
| 1163 |
-
|
| 1164 |
-
if (
|
| 1165 |
-
$
|
| 1166 |
-
|
|
|
|
|
|
|
|
|
|
| 1167 |
}
|
| 1168 |
-
|
| 1169 |
-
return array($
|
| 1170 |
}
|
| 1171 |
|
| 1172 |
public static function getProductIdsFormRange($start, $end, $step, $store = null)
|
| 1173 |
{
|
| 1174 |
-
$
|
| 1175 |
|
| 1176 |
$products = Mage::getModel('catalog/product')
|
| 1177 |
->getCollection()
|
|
@@ -1179,23 +1191,26 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
| 1179 |
->setPageSize($step);
|
| 1180 |
|
| 1181 |
if (!empty($store)) {
|
| 1182 |
-
$products->addStoreFilter($store);
|
| 1183 |
}
|
| 1184 |
|
| 1185 |
-
$products->load();
|
| 1186 |
-
|
| 1187 |
-
|
|
|
|
| 1188 |
foreach ($products as $product) {
|
| 1189 |
-
$
|
| 1190 |
}
|
| 1191 |
}
|
| 1192 |
-
|
| 1193 |
-
|
|
|
|
|
|
|
| 1194 |
}
|
| 1195 |
|
| 1196 |
public static function getFilterableFiltersIds($store = null)
|
| 1197 |
{
|
| 1198 |
-
$
|
| 1199 |
|
| 1200 |
$filters = Mage::getResourceModel('catalog/product_attribute_collection')
|
| 1201 |
->setItemObjectClass('catalog/resource_eav_attribute')
|
|
@@ -1205,20 +1220,22 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
| 1205 |
$filters->addStoreLabel($store->getId());
|
| 1206 |
}
|
| 1207 |
|
| 1208 |
-
$filters
|
| 1209 |
-
|
| 1210 |
-
|
| 1211 |
foreach ($filters as $filter) {
|
| 1212 |
-
$
|
| 1213 |
}
|
| 1214 |
}
|
|
|
|
|
|
|
| 1215 |
|
| 1216 |
-
return $
|
| 1217 |
}
|
| 1218 |
|
| 1219 |
public static function getFilterableInSearchFiltersIds($store = null)
|
| 1220 |
{
|
| 1221 |
-
$
|
| 1222 |
|
| 1223 |
$filters = Mage::getResourceModel('catalog/product_attribute_collection')
|
| 1224 |
->setItemObjectClass('catalog/resource_eav_attribute')
|
|
@@ -1227,16 +1244,20 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
| 1227 |
if (!empty($store)) {
|
| 1228 |
$filters->addStoreLabel($store->getId());
|
| 1229 |
}
|
| 1230 |
-
|
| 1231 |
$filters->load();
|
| 1232 |
|
| 1233 |
-
if (
|
|
|
|
|
|
|
| 1234 |
foreach ($filters as $filter) {
|
| 1235 |
-
$
|
| 1236 |
}
|
| 1237 |
}
|
|
|
|
|
|
|
| 1238 |
|
| 1239 |
-
return $
|
| 1240 |
}
|
| 1241 |
|
| 1242 |
public static function getFiltersIds($store = null)
|
|
@@ -1305,25 +1326,33 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
| 1305 |
return $ret;
|
| 1306 |
}
|
| 1307 |
|
| 1308 |
-
public static function async()
|
| 1309 |
{
|
| 1310 |
@ignore_user_abort(true);
|
| 1311 |
@set_time_limit(0);
|
| 1312 |
-
//
|
| 1313 |
-
Mage::
|
| 1314 |
-
|
| 1315 |
-
|
| 1316 |
-
|
| 1317 |
|
|
|
|
|
|
|
|
|
|
| 1318 |
self::echoConnectProgress('.');
|
| 1319 |
|
| 1320 |
$q = Mage::getModel('searchanise/queue')->getNextQueue();
|
| 1321 |
|
| 1322 |
while (!empty($q)) {
|
|
|
|
|
|
|
|
|
|
| 1323 |
$xml = '';
|
| 1324 |
$status = true;
|
| 1325 |
-
$store = Mage::app()->getStore($q['store_id']);
|
| 1326 |
$data = array();
|
|
|
|
|
|
|
|
|
|
| 1327 |
if ((!empty($q['data'])) && ($q['data'] != Simtech_Searchanise_Model_Queue::NOT_DATA)) {
|
| 1328 |
$data = unserialize($q['data']);
|
| 1329 |
}
|
|
@@ -1339,7 +1368,9 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
| 1339 |
|
| 1340 |
//Note: $q['started'] can be in future.
|
| 1341 |
if ($q['status'] == Simtech_Searchanise_Model_Queue::STATUS_PROCESSING && ($q['started'] + self::getMaxProcessingTime() > self::getTime())) {
|
| 1342 |
-
|
|
|
|
|
|
|
| 1343 |
}
|
| 1344 |
|
| 1345 |
if ($q['error_count'] >= self::getMaxErrorCount()) {
|
|
@@ -1362,59 +1393,48 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
| 1362 |
->addFilter('store_id', $store->getId())
|
| 1363 |
->load()
|
| 1364 |
->delete();
|
| 1365 |
-
|
| 1366 |
$queueData = array(
|
| 1367 |
'data' => Simtech_Searchanise_Model_Queue::NOT_DATA,
|
| 1368 |
'action' => Simtech_Searchanise_Model_Queue::ACT_START_FULL_IMPORT,
|
| 1369 |
'store_id' => $store->getId(),
|
| 1370 |
);
|
| 1371 |
-
|
| 1372 |
Mage::getModel('searchanise/queue')->setData($queueData)->save();
|
| 1373 |
|
| 1374 |
$i = 0;
|
| 1375 |
$step = self::getProductsPerPass() * 50;
|
| 1376 |
-
|
| 1377 |
-
$sqls_arr = array();
|
| 1378 |
-
|
| 1379 |
list($start, $max) = self::getMinMaxProductId($store);
|
| 1380 |
-
|
| 1381 |
do {
|
| 1382 |
$end = $start + $step;
|
| 1383 |
|
| 1384 |
-
$
|
| 1385 |
|
| 1386 |
$start = $end + 1;
|
| 1387 |
|
| 1388 |
-
if (empty($
|
| 1389 |
continue;
|
| 1390 |
}
|
| 1391 |
-
$
|
| 1392 |
|
| 1393 |
-
foreach ($
|
| 1394 |
-
$
|
| 1395 |
-
|
|
|
|
| 1396 |
'action' => Simtech_Searchanise_Model_Queue::ACT_UPDATE,
|
| 1397 |
'store_id' => $store->getId(),
|
| 1398 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1399 |
}
|
| 1400 |
|
| 1401 |
-
// fixme if need
|
| 1402 |
-
// need change one sql if exist opportunity
|
| 1403 |
-
/*if (count($sqls_arr) >= 30) {
|
| 1404 |
-
//~ db_query("INSERT INTO ?:se_queue (`data`, `action`, `lang_code`) VALUES " . join(',', $sqls_arr));
|
| 1405 |
-
|
| 1406 |
-
self::echoConnectProgress('.');
|
| 1407 |
-
$sqls_arr = array();
|
| 1408 |
-
}*/
|
| 1409 |
-
// end fixme
|
| 1410 |
} while ($end <= $max);
|
| 1411 |
-
|
| 1412 |
-
if (count($sqls_arr) > 0) {
|
| 1413 |
-
foreach ($sqls_arr as $queueData) {
|
| 1414 |
-
Mage::getModel('searchanise/queue')->setData($queueData)->save();
|
| 1415 |
-
}
|
| 1416 |
-
}
|
| 1417 |
-
|
| 1418 |
self::echoConnectProgress('.');
|
| 1419 |
|
| 1420 |
//
|
|
@@ -1558,6 +1578,10 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
| 1558 |
}
|
| 1559 |
}
|
| 1560 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1561 |
|
| 1562 |
// Change queue item status
|
| 1563 |
if ($status == true) {
|
|
@@ -1797,22 +1821,7 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
| 1797 |
|
| 1798 |
return $ret;
|
| 1799 |
}
|
| 1800 |
-
|
| 1801 |
-
public static function changeAmpersand($str = '')
|
| 1802 |
-
{
|
| 1803 |
-
if (!empty($str)) {
|
| 1804 |
-
if (strpos($str, '&') !== false) {
|
| 1805 |
-
return $str;
|
| 1806 |
-
}
|
| 1807 |
-
|
| 1808 |
-
if (strpos($str, '&') !== false) {
|
| 1809 |
-
return str_replace('&','&',$str);
|
| 1810 |
-
}
|
| 1811 |
-
}
|
| 1812 |
-
|
| 1813 |
-
return $str;
|
| 1814 |
-
}
|
| 1815 |
-
|
| 1816 |
function printR()
|
| 1817 |
{
|
| 1818 |
static $count = 0;
|
| 490 |
{
|
| 491 |
return self::getSetting('server_version');
|
| 492 |
}
|
| 493 |
+
|
| 494 |
+
public static function getAsyncMemoryLimit()
|
| 495 |
+
{
|
| 496 |
+
return self::getSetting('async_memory_limit');
|
| 497 |
+
}
|
| 498 |
|
| 499 |
public static function getSearchTimeout()
|
| 500 |
{
|
| 1141 |
|
| 1142 |
public static function getMinMaxProductId($store = null)
|
| 1143 |
{
|
| 1144 |
+
$startId = 0;
|
| 1145 |
+
$endId = 0;
|
| 1146 |
+
|
| 1147 |
+
$productStartCollection = Mage::getModel('catalog/product')
|
| 1148 |
->getCollection()
|
| 1149 |
->addAttributeToSort('entity_id', Varien_Data_Collection::SORT_ORDER_ASC)
|
| 1150 |
->setPageSize(1);
|
| 1151 |
if ($store) {
|
| 1152 |
+
$productStartCollection = $productStartCollection->addStoreFilter($store);
|
| 1153 |
}
|
| 1154 |
+
$productStartCollection = $productStartCollection->load();
|
| 1155 |
+
|
| 1156 |
+
$productEndCollection = Mage::getModel('catalog/product')
|
| 1157 |
->getCollection()
|
| 1158 |
->addAttributeToSort('entity_id', Varien_Data_Collection::SORT_ORDER_DESC)
|
| 1159 |
->setPageSize(1);
|
| 1160 |
if ($store) {
|
| 1161 |
+
$productEndCollection = $productEndCollection->addStoreFilter($store);
|
| 1162 |
}
|
| 1163 |
+
$productEndCollection = $productEndCollection->load();
|
| 1164 |
|
| 1165 |
+
if ($productStartCollection) {
|
| 1166 |
+
$productArr = $productStartCollection->toArray(array('entity_id'));
|
| 1167 |
+
if (!empty($productArr)) {
|
| 1168 |
+
$firstItem = reset($productArr);
|
| 1169 |
+
$startId = $firstItem['entity_id'];
|
| 1170 |
+
}
|
| 1171 |
}
|
| 1172 |
+
|
| 1173 |
+
if ($productEndCollection) {
|
| 1174 |
+
$productArr = $productEndCollection->toArray(array('entity_id'));
|
| 1175 |
+
if (!empty($productArr)) {
|
| 1176 |
+
$firstItem = reset($productArr);
|
| 1177 |
+
$endId = $firstItem['entity_id'];
|
| 1178 |
+
}
|
| 1179 |
}
|
| 1180 |
+
|
| 1181 |
+
return array($startId, $endId);
|
| 1182 |
}
|
| 1183 |
|
| 1184 |
public static function getProductIdsFormRange($start, $end, $step, $store = null)
|
| 1185 |
{
|
| 1186 |
+
$arrProducts = array();
|
| 1187 |
|
| 1188 |
$products = Mage::getModel('catalog/product')
|
| 1189 |
->getCollection()
|
| 1191 |
->setPageSize($step);
|
| 1192 |
|
| 1193 |
if (!empty($store)) {
|
| 1194 |
+
$products = $products->addStoreFilter($store);
|
| 1195 |
}
|
| 1196 |
|
| 1197 |
+
$products = $products->load();
|
| 1198 |
+
if ($products) {
|
| 1199 |
+
// Not used because 'arrProducts' comprising 'stock_item' field and is 'array(array())'
|
| 1200 |
+
// $arrProducts = $products->toArray(array('entity_id'));
|
| 1201 |
foreach ($products as $product) {
|
| 1202 |
+
$arrProducts[] = $product->getId();
|
| 1203 |
}
|
| 1204 |
}
|
| 1205 |
+
// It is necessary for save memory.
|
| 1206 |
+
unset($products);
|
| 1207 |
+
|
| 1208 |
+
return $arrProducts;
|
| 1209 |
}
|
| 1210 |
|
| 1211 |
public static function getFilterableFiltersIds($store = null)
|
| 1212 |
{
|
| 1213 |
+
$arrFilters = array();
|
| 1214 |
|
| 1215 |
$filters = Mage::getResourceModel('catalog/product_attribute_collection')
|
| 1216 |
->setItemObjectClass('catalog/resource_eav_attribute')
|
| 1220 |
$filters->addStoreLabel($store->getId());
|
| 1221 |
}
|
| 1222 |
|
| 1223 |
+
if ($filters) {
|
| 1224 |
+
// It not used because 'arrFilters' is array(array())
|
| 1225 |
+
// $arrFilters = $filters->toArray(array('attribute'));
|
| 1226 |
foreach ($filters as $filter) {
|
| 1227 |
+
$arrFilters[] = $filter->getId();
|
| 1228 |
}
|
| 1229 |
}
|
| 1230 |
+
// It is necessary for save memory.
|
| 1231 |
+
unset($filters);
|
| 1232 |
|
| 1233 |
+
return $arrFilters;
|
| 1234 |
}
|
| 1235 |
|
| 1236 |
public static function getFilterableInSearchFiltersIds($store = null)
|
| 1237 |
{
|
| 1238 |
+
$arrFilters = array();
|
| 1239 |
|
| 1240 |
$filters = Mage::getResourceModel('catalog/product_attribute_collection')
|
| 1241 |
->setItemObjectClass('catalog/resource_eav_attribute')
|
| 1244 |
if (!empty($store)) {
|
| 1245 |
$filters->addStoreLabel($store->getId());
|
| 1246 |
}
|
| 1247 |
+
|
| 1248 |
$filters->load();
|
| 1249 |
|
| 1250 |
+
if ($filters) {
|
| 1251 |
+
// It not used because 'arrFilters' is array(array())
|
| 1252 |
+
// $arrFilters = $filters->toArray(array('attribute'));
|
| 1253 |
foreach ($filters as $filter) {
|
| 1254 |
+
$arrFilters[] = $filter->getId();
|
| 1255 |
}
|
| 1256 |
}
|
| 1257 |
+
// It is necessary for save memory.
|
| 1258 |
+
unset($filters);
|
| 1259 |
|
| 1260 |
+
return $arrFilters;
|
| 1261 |
}
|
| 1262 |
|
| 1263 |
public static function getFiltersIds($store = null)
|
| 1326 |
return $ret;
|
| 1327 |
}
|
| 1328 |
|
| 1329 |
+
public static function async($flIgnoreProcessing = false)
|
| 1330 |
{
|
| 1331 |
@ignore_user_abort(true);
|
| 1332 |
@set_time_limit(0);
|
| 1333 |
+
// Adding memory if necessary
|
| 1334 |
+
$asyncMemoryLimit = Mage::helper('searchanise/ApiSe')->getAsyncMemoryLimit();
|
| 1335 |
+
if (substr(ini_get('memory_limit'), 0, -1) < $asyncMemoryLimit) {
|
| 1336 |
+
@ini_set('memory_limit', $asyncMemoryLimit . 'M');
|
| 1337 |
+
}
|
| 1338 |
|
| 1339 |
+
// Need for get all products.
|
| 1340 |
+
Mage::app()->setCurrentStore('admin');
|
| 1341 |
+
|
| 1342 |
self::echoConnectProgress('.');
|
| 1343 |
|
| 1344 |
$q = Mage::getModel('searchanise/queue')->getNextQueue();
|
| 1345 |
|
| 1346 |
while (!empty($q)) {
|
| 1347 |
+
if (Mage::helper('searchanise')->checkDebug()) {
|
| 1348 |
+
Mage::helper('searchanise/ApiSe')->printR($q);
|
| 1349 |
+
}
|
| 1350 |
$xml = '';
|
| 1351 |
$status = true;
|
|
|
|
| 1352 |
$data = array();
|
| 1353 |
+
$store = Mage::app()->getStore($q['store_id']);
|
| 1354 |
+
$xmlHeader = Mage::helper('searchanise/ApiXML')->getXMLHeader($store);
|
| 1355 |
+
$xmlFooter = Mage::helper('searchanise/ApiXML')->getXMLFooter($store);
|
| 1356 |
if ((!empty($q['data'])) && ($q['data'] != Simtech_Searchanise_Model_Queue::NOT_DATA)) {
|
| 1357 |
$data = unserialize($q['data']);
|
| 1358 |
}
|
| 1368 |
|
| 1369 |
//Note: $q['started'] can be in future.
|
| 1370 |
if ($q['status'] == Simtech_Searchanise_Model_Queue::STATUS_PROCESSING && ($q['started'] + self::getMaxProcessingTime() > self::getTime())) {
|
| 1371 |
+
if (!$flIgnoreProcessing) {
|
| 1372 |
+
return Simtech_Searchanise_Model_Queue::STATUS_PROCESSING;
|
| 1373 |
+
}
|
| 1374 |
}
|
| 1375 |
|
| 1376 |
if ($q['error_count'] >= self::getMaxErrorCount()) {
|
| 1393 |
->addFilter('store_id', $store->getId())
|
| 1394 |
->load()
|
| 1395 |
->delete();
|
| 1396 |
+
|
| 1397 |
$queueData = array(
|
| 1398 |
'data' => Simtech_Searchanise_Model_Queue::NOT_DATA,
|
| 1399 |
'action' => Simtech_Searchanise_Model_Queue::ACT_START_FULL_IMPORT,
|
| 1400 |
'store_id' => $store->getId(),
|
| 1401 |
);
|
| 1402 |
+
|
| 1403 |
Mage::getModel('searchanise/queue')->setData($queueData)->save();
|
| 1404 |
|
| 1405 |
$i = 0;
|
| 1406 |
$step = self::getProductsPerPass() * 50;
|
| 1407 |
+
|
|
|
|
|
|
|
| 1408 |
list($start, $max) = self::getMinMaxProductId($store);
|
| 1409 |
+
|
| 1410 |
do {
|
| 1411 |
$end = $start + $step;
|
| 1412 |
|
| 1413 |
+
$_productIds = self::getProductIdsFormRange($start, $end, $step, $store);
|
| 1414 |
|
| 1415 |
$start = $end + 1;
|
| 1416 |
|
| 1417 |
+
if (empty($_productIds)) {
|
| 1418 |
continue;
|
| 1419 |
}
|
| 1420 |
+
$_productIds = array_chunk($_productIds, self::getProductsPerPass());
|
| 1421 |
|
| 1422 |
+
foreach ($_productIds as $productIds) {
|
| 1423 |
+
$_data = serialize($productIds);
|
| 1424 |
+
$queueData = array(
|
| 1425 |
+
'data' => $_data,
|
| 1426 |
'action' => Simtech_Searchanise_Model_Queue::ACT_UPDATE,
|
| 1427 |
'store_id' => $store->getId(),
|
| 1428 |
);
|
| 1429 |
+
$_result = Mage::getModel('searchanise/queue')->setData($queueData)->save();
|
| 1430 |
+
// It is necessary for save memory.
|
| 1431 |
+
unset($_result);
|
| 1432 |
+
unset($_data);
|
| 1433 |
+
unset($queueData);
|
| 1434 |
}
|
| 1435 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1436 |
} while ($end <= $max);
|
| 1437 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1438 |
self::echoConnectProgress('.');
|
| 1439 |
|
| 1440 |
//
|
| 1578 |
}
|
| 1579 |
}
|
| 1580 |
}
|
| 1581 |
+
|
| 1582 |
+
if (Mage::helper('searchanise')->checkDebug()) {
|
| 1583 |
+
Mage::helper('searchanise/ApiSe')->printR('status', $status);
|
| 1584 |
+
}
|
| 1585 |
|
| 1586 |
// Change queue item status
|
| 1587 |
if ($status == true) {
|
| 1821 |
|
| 1822 |
return $ret;
|
| 1823 |
}
|
| 1824 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1825 |
function printR()
|
| 1826 |
{
|
| 1827 |
static $count = 0;
|
app/code/community/Simtech/Searchanise/Helper/ApiXML.php
CHANGED
|
@@ -305,9 +305,18 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 305 |
return $minimalPrice;
|
| 306 |
}
|
| 307 |
|
| 308 |
-
public static function generateProductXML($product, $store = null)
|
| 309 |
{
|
| 310 |
-
$entry = '
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 311 |
$entry .= '<id>' . $product->getId() . '</id>' . self::XML_END_LINE;
|
| 312 |
|
| 313 |
$entry .= '<title><![CDATA[' . $product->getName() . ']]></title>' . self::XML_END_LINE;
|
|
@@ -320,7 +329,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 320 |
$entry .= '<summary><![CDATA[' . $summary. ']]></summary>' . self::XML_END_LINE;
|
| 321 |
|
| 322 |
$productUrl = $product->getProductUrl(false);
|
| 323 |
-
$productUrl =
|
| 324 |
$entry .= '<link href="' . $productUrl . '" />' . self::XML_END_LINE;
|
| 325 |
$entry .= '<cs:product_code><![CDATA[' . $product->getSku() . ']]></cs:product_code>' . self::XML_END_LINE;
|
| 326 |
|
|
@@ -524,10 +533,6 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 524 |
|
| 525 |
if ($textValue != '') {
|
| 526 |
$entry .= '<cs:attribute name="' . $attributeCode .'" type="text" text_search="Y" weight="' . $attributeWeight . '">';
|
| 527 |
-
// fixme in the future
|
| 528 |
-
// need for fixed bug of Server
|
| 529 |
-
$entry .= ' ';
|
| 530 |
-
// end fixme
|
| 531 |
$entry .= '<![CDATA[' . $textValue . ']]>';
|
| 532 |
$entry .= '</cs:attribute>' . self::XML_END_LINE;
|
| 533 |
}
|
|
@@ -542,7 +547,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 542 |
if (!empty($arrValues)) {
|
| 543 |
foreach ($arrValues as $v) {
|
| 544 |
if ($v != '') {
|
| 545 |
-
$strIdValues .= '<value
|
| 546 |
}
|
| 547 |
}
|
| 548 |
}
|
|
@@ -620,10 +625,10 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 620 |
$entry .= '<cs:attribute name="categories" type="text">';
|
| 621 |
// need, it's important
|
| 622 |
$entry .= ' ';
|
| 623 |
-
$
|
| 624 |
-
if (!empty($
|
| 625 |
-
foreach ($
|
| 626 |
-
$entry .= '<value
|
| 627 |
}
|
| 628 |
}
|
| 629 |
$entry .= '</cs:attribute>' . self::XML_END_LINE;
|
|
@@ -648,7 +653,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 648 |
if ($tags) {
|
| 649 |
foreach ($tags as $tag) {
|
| 650 |
if ($tag != '') {
|
| 651 |
-
$strTagIds .= '<value
|
| 652 |
$strTagNames .= '<value><![CDATA[' . $tag->getName() . ']]></value>';
|
| 653 |
}
|
| 654 |
}
|
|
@@ -664,10 +669,6 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 664 |
$entry .= '</cs:attribute>' . self::XML_END_LINE;
|
| 665 |
|
| 666 |
$entry .= '<cs:attribute name="tags" type="text" text_search="Y" weight="' . self::WEIGHT_TAGS .'">';
|
| 667 |
-
// fixme in the future
|
| 668 |
-
// need for fixed bug of Server
|
| 669 |
-
$entry .= ' ';
|
| 670 |
-
// end fixme
|
| 671 |
$entry .= $strTagNames;
|
| 672 |
$entry .= '</cs:attribute>' . self::XML_END_LINE;
|
| 673 |
}
|
|
@@ -795,16 +796,27 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 795 |
}
|
| 796 |
|
| 797 |
foreach ($productIds as $key => $productId) {
|
| 798 |
-
|
| 799 |
-
|
| 800 |
-
if ($store) {
|
| 801 |
-
$product->setWebsiteId($store->getWebsiteId());
|
| 802 |
}
|
| 803 |
-
|
| 804 |
-
|
|
|
|
|
|
|
|
|
|
| 805 |
}
|
|
|
|
| 806 |
|
| 807 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 808 |
}
|
| 809 |
|
| 810 |
return $products;
|
|
@@ -878,7 +890,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 878 |
}
|
| 879 |
|
| 880 |
// Main functions //
|
| 881 |
-
public static function generateProductsXML($productIds = null, $store = null, $flagAddMinimalPrice = false)
|
| 882 |
{
|
| 883 |
$ret = '';
|
| 884 |
|
|
@@ -906,7 +918,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 906 |
$arrAdditionalProducts = $additionalProducts->toArray();
|
| 907 |
if ((!empty($arrAdditionalProducts)) && (count($arrAdditionalProducts) != 0)) {
|
| 908 |
foreach ($additionalProducts as $product) {
|
| 909 |
-
$ret .= self::generateProductXML($product, $store);
|
| 910 |
}
|
| 911 |
}
|
| 912 |
}
|
|
@@ -916,7 +928,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 916 |
|
| 917 |
if ($products) {
|
| 918 |
foreach ($products as $product) {
|
| 919 |
-
$ret .= self::generateProductXML($product, $store);
|
| 920 |
}
|
| 921 |
}
|
| 922 |
|
|
@@ -991,7 +1003,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
| 991 |
$url = '';
|
| 992 |
|
| 993 |
if (empty($store)) {
|
| 994 |
-
$
|
| 995 |
} else {
|
| 996 |
$url = $store->getUrl();
|
| 997 |
}
|
| 305 |
return $minimalPrice;
|
| 306 |
}
|
| 307 |
|
| 308 |
+
public static function generateProductXML($product, $store = null, $checkData = true)
|
| 309 |
{
|
| 310 |
+
$entry = '';
|
| 311 |
+
if ($checkData) {
|
| 312 |
+
if (!$product ||
|
| 313 |
+
!$product->getId() ||
|
| 314 |
+
!$product->getName()
|
| 315 |
+
) {
|
| 316 |
+
return $entry;
|
| 317 |
+
}
|
| 318 |
+
}
|
| 319 |
+
$entry .= '<entry>' . self::XML_END_LINE;
|
| 320 |
$entry .= '<id>' . $product->getId() . '</id>' . self::XML_END_LINE;
|
| 321 |
|
| 322 |
$entry .= '<title><![CDATA[' . $product->getName() . ']]></title>' . self::XML_END_LINE;
|
| 329 |
$entry .= '<summary><![CDATA[' . $summary. ']]></summary>' . self::XML_END_LINE;
|
| 330 |
|
| 331 |
$productUrl = $product->getProductUrl(false);
|
| 332 |
+
$productUrl = htmlspecialchars($productUrl);
|
| 333 |
$entry .= '<link href="' . $productUrl . '" />' . self::XML_END_LINE;
|
| 334 |
$entry .= '<cs:product_code><![CDATA[' . $product->getSku() . ']]></cs:product_code>' . self::XML_END_LINE;
|
| 335 |
|
| 533 |
|
| 534 |
if ($textValue != '') {
|
| 535 |
$entry .= '<cs:attribute name="' . $attributeCode .'" type="text" text_search="Y" weight="' . $attributeWeight . '">';
|
|
|
|
|
|
|
|
|
|
|
|
|
| 536 |
$entry .= '<![CDATA[' . $textValue . ']]>';
|
| 537 |
$entry .= '</cs:attribute>' . self::XML_END_LINE;
|
| 538 |
}
|
| 547 |
if (!empty($arrValues)) {
|
| 548 |
foreach ($arrValues as $v) {
|
| 549 |
if ($v != '') {
|
| 550 |
+
$strIdValues .= '<value><![CDATA[' . $v . ']]></value>';
|
| 551 |
}
|
| 552 |
}
|
| 553 |
}
|
| 625 |
$entry .= '<cs:attribute name="categories" type="text">';
|
| 626 |
// need, it's important
|
| 627 |
$entry .= ' ';
|
| 628 |
+
$categoryIds = $product->getCategoryIds();
|
| 629 |
+
if (!empty($categoryIds)) {
|
| 630 |
+
foreach ($categoryIds as $catKey => $categoryId) {
|
| 631 |
+
$entry .= '<value><![CDATA[' . $categoryId . ']]></value>';
|
| 632 |
}
|
| 633 |
}
|
| 634 |
$entry .= '</cs:attribute>' . self::XML_END_LINE;
|
| 653 |
if ($tags) {
|
| 654 |
foreach ($tags as $tag) {
|
| 655 |
if ($tag != '') {
|
| 656 |
+
$strTagIds .= '<value><![CDATA[' . $tag->getId() . ']]></value>';
|
| 657 |
$strTagNames .= '<value><![CDATA[' . $tag->getName() . ']]></value>';
|
| 658 |
}
|
| 659 |
}
|
| 669 |
$entry .= '</cs:attribute>' . self::XML_END_LINE;
|
| 670 |
|
| 671 |
$entry .= '<cs:attribute name="tags" type="text" text_search="Y" weight="' . self::WEIGHT_TAGS .'">';
|
|
|
|
|
|
|
|
|
|
|
|
|
| 672 |
$entry .= $strTagNames;
|
| 673 |
$entry .= '</cs:attribute>' . self::XML_END_LINE;
|
| 674 |
}
|
| 796 |
}
|
| 797 |
|
| 798 |
foreach ($productIds as $key => $productId) {
|
| 799 |
+
if (empty($productId)) {
|
| 800 |
+
continue;
|
|
|
|
|
|
|
| 801 |
}
|
| 802 |
+
// It can use various types of data.
|
| 803 |
+
if (is_array($productId)) {
|
| 804 |
+
if (isset($productId['entity_id'])) {
|
| 805 |
+
$productId = $productId['entity_id'];
|
| 806 |
+
}
|
| 807 |
}
|
| 808 |
+
$product = Mage::getModel('catalog/product')->load($productId);
|
| 809 |
|
| 810 |
+
if ($product) {
|
| 811 |
+
if ($store) {
|
| 812 |
+
$product->setWebsiteId($store->getWebsiteId());
|
| 813 |
+
}
|
| 814 |
+
if ($customerGroupId != null) {
|
| 815 |
+
$product->setCustomerGroupId($customerGroupId);
|
| 816 |
+
}
|
| 817 |
+
|
| 818 |
+
$products[] = $product;
|
| 819 |
+
}
|
| 820 |
}
|
| 821 |
|
| 822 |
return $products;
|
| 890 |
}
|
| 891 |
|
| 892 |
// Main functions //
|
| 893 |
+
public static function generateProductsXML($productIds = null, $store = null, $flagAddMinimalPrice = false, $checkData = true)
|
| 894 |
{
|
| 895 |
$ret = '';
|
| 896 |
|
| 918 |
$arrAdditionalProducts = $additionalProducts->toArray();
|
| 919 |
if ((!empty($arrAdditionalProducts)) && (count($arrAdditionalProducts) != 0)) {
|
| 920 |
foreach ($additionalProducts as $product) {
|
| 921 |
+
$ret .= self::generateProductXML($product, $store, $checkData);
|
| 922 |
}
|
| 923 |
}
|
| 924 |
}
|
| 928 |
|
| 929 |
if ($products) {
|
| 930 |
foreach ($products as $product) {
|
| 931 |
+
$ret .= self::generateProductXML($product, $store, $checkData);
|
| 932 |
}
|
| 933 |
}
|
| 934 |
|
| 1003 |
$url = '';
|
| 1004 |
|
| 1005 |
if (empty($store)) {
|
| 1006 |
+
$url = Mage::app()->getStore()->getBaseUrl();
|
| 1007 |
} else {
|
| 1008 |
$url = $store->getUrl();
|
| 1009 |
}
|
app/code/community/Simtech/Searchanise/controllers/AsyncController.php
CHANGED
|
@@ -13,6 +13,7 @@
|
|
| 13 |
****************************************************************************/
|
| 14 |
class Simtech_Searchanise_AsyncController extends Mage_Core_Controller_Front_Action
|
| 15 |
{
|
|
|
|
| 16 |
protected $_notUseHttpRequestText = null;
|
| 17 |
protected $_flShowStatusAsync = null;
|
| 18 |
|
|
@@ -71,6 +72,14 @@ class Simtech_Searchanise_AsyncController extends Mage_Core_Controller_Front_Act
|
|
| 71 |
public function indexAction()
|
| 72 |
{
|
| 73 |
if (Mage::helper('searchanise/ApiSe')->getStatusModule() == 'Y') {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
// not need because it checked in the "Async.php" block
|
| 75 |
// if (Mage::helper('searchanise/ApiSe')->checkStartAsync()) {
|
| 76 |
if (true) {
|
|
@@ -84,8 +93,18 @@ class Simtech_Searchanise_AsyncController extends Mage_Core_Controller_Front_Act
|
|
| 84 |
if ($check) {
|
| 85 |
@ignore_user_abort(true);
|
| 86 |
@set_time_limit(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
|
| 88 |
-
$result = Mage::helper('searchanise/ApiSe')->async();
|
| 89 |
|
| 90 |
if ($this->checkShowSatusAsync()) {
|
| 91 |
echo 'Searchanise status sync: ';
|
| 13 |
****************************************************************************/
|
| 14 |
class Simtech_Searchanise_AsyncController extends Mage_Core_Controller_Front_Action
|
| 15 |
{
|
| 16 |
+
const PARENT_PRIVATE_KEY = 'parent_private_key';
|
| 17 |
protected $_notUseHttpRequestText = null;
|
| 18 |
protected $_flShowStatusAsync = null;
|
| 19 |
|
| 72 |
public function indexAction()
|
| 73 |
{
|
| 74 |
if (Mage::helper('searchanise/ApiSe')->getStatusModule() == 'Y') {
|
| 75 |
+
$parentPrivateKey = $this->getRequest()->getParam(self::PARENT_PRIVATE_KEY);
|
| 76 |
+
if ((empty($parentPrivateKey)) ||
|
| 77 |
+
(Mage::helper('searchanise/ApiSe')->getParentPrivateKey() !== $parentPrivateKey)) {
|
| 78 |
+
$checkKey = false;
|
| 79 |
+
} else {
|
| 80 |
+
$checkKey = true;
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
// not need because it checked in the "Async.php" block
|
| 84 |
// if (Mage::helper('searchanise/ApiSe')->checkStartAsync()) {
|
| 85 |
if (true) {
|
| 93 |
if ($check) {
|
| 94 |
@ignore_user_abort(true);
|
| 95 |
@set_time_limit(0);
|
| 96 |
+
if ($checkKey && $this->getRequest()->getParam('display_errors') === 'Y') {
|
| 97 |
+
@error_reporting (E_ALL);
|
| 98 |
+
@ini_set('display_errors', 1);
|
| 99 |
+
} else {
|
| 100 |
+
@ini_set('display_errors', 0);
|
| 101 |
+
}
|
| 102 |
+
$flIgnoreProcessing = false;
|
| 103 |
+
if ($checkKey && $this->getRequest()->getParam('ignore_processing') === 'Y') {
|
| 104 |
+
$flIgnoreProcessing = true;
|
| 105 |
+
}
|
| 106 |
|
| 107 |
+
$result = Mage::helper('searchanise/ApiSe')->async($flIgnoreProcessing);
|
| 108 |
|
| 109 |
if ($this->checkShowSatusAsync()) {
|
| 110 |
echo 'Searchanise status sync: ';
|
app/code/community/Simtech/Searchanise/controllers/InfoController.php
CHANGED
|
@@ -16,8 +16,9 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
|
|
| 16 |
{
|
| 17 |
const RESYNC = 'resync';
|
| 18 |
const OUTPUT = 'visual';
|
| 19 |
-
const PROFILER
|
| 20 |
const STORE_ID = 'store_id';
|
|
|
|
| 21 |
const PRODUCT_ID = 'product_id';
|
| 22 |
const PRODUCT_IDS = 'product_ids';
|
| 23 |
const PARENT_PRIVATE_KEY = 'parent_private_key';
|
|
@@ -47,20 +48,8 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
|
|
| 47 |
|
| 48 |
public function indexAction()
|
| 49 |
{
|
| 50 |
-
$resync = $this->getRequest()->getParam(self::RESYNC);
|
| 51 |
-
$visual = $this->getRequest()->getParam(self::OUTPUT);
|
| 52 |
-
$profiler = $this->getRequest()->getParam(self::PROFILER);
|
| 53 |
-
$storeId = $this->getRequest()->getParam(self::STORE_ID);
|
| 54 |
-
$productId = $this->getRequest()->getParam(self::PRODUCT_ID);
|
| 55 |
-
$productIds = $this->getRequest()->getParam(self::PRODUCT_IDS);
|
| 56 |
$parentPrivateKey = $this->getRequest()->getParam(self::PARENT_PRIVATE_KEY);
|
| 57 |
|
| 58 |
-
if ($productId) {
|
| 59 |
-
$productIds = array($productId);
|
| 60 |
-
} elseif ($productIds) {
|
| 61 |
-
$productIds = explode(',', $productIds);
|
| 62 |
-
}
|
| 63 |
-
|
| 64 |
if ((empty($parentPrivateKey)) ||
|
| 65 |
(Mage::helper('searchanise/ApiSe')->getParentPrivateKey() !== $parentPrivateKey)) {
|
| 66 |
$_options = Mage::helper('searchanise/ApiSe')->getAddonOptions();
|
|
@@ -75,6 +64,21 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
|
|
| 75 |
echo Mage::helper('core')->jsonEncode($options);
|
| 76 |
}
|
| 77 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
$store = null;
|
| 79 |
if (!empty($storeId)) {
|
| 80 |
$store = Mage::app()->getStore($storeId);
|
|
@@ -116,14 +120,19 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
|
|
| 116 |
Mage::helper('searchanise/ApiSe')->queueImport();
|
| 117 |
|
| 118 |
} elseif (!empty($productIds)) {
|
| 119 |
-
|
| 120 |
-
$productFeeds
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
|
| 122 |
if ($visual) {
|
| 123 |
Mage::helper('searchanise/ApiSe')->printR($productFeeds);
|
| 124 |
} else {
|
| 125 |
echo Mage::helper('core')->jsonEncode($productFeeds);
|
| 126 |
}
|
|
|
|
| 127 |
} else {
|
| 128 |
Mage::helper('searchanise/ApiSe')->checkImportIsDone();
|
| 129 |
|
|
@@ -146,6 +155,13 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
|
|
| 146 |
@ignore_user_abort(1);
|
| 147 |
$options['ignore_user_abort_after'] = ini_get('ignore_user_abort_after');
|
| 148 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 149 |
if ($visual) {
|
| 150 |
Mage::helper('searchanise/ApiSe')->printR($options);
|
| 151 |
} else {
|
|
@@ -200,4 +216,4 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
|
|
| 200 |
|
| 201 |
return $out;
|
| 202 |
}
|
| 203 |
-
}
|
| 16 |
{
|
| 17 |
const RESYNC = 'resync';
|
| 18 |
const OUTPUT = 'visual';
|
| 19 |
+
const PROFILER = 'profiler';
|
| 20 |
const STORE_ID = 'store_id';
|
| 21 |
+
const CHECK_DATA = 'check_data';
|
| 22 |
const PRODUCT_ID = 'product_id';
|
| 23 |
const PRODUCT_IDS = 'product_ids';
|
| 24 |
const PARENT_PRIVATE_KEY = 'parent_private_key';
|
| 48 |
|
| 49 |
public function indexAction()
|
| 50 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
$parentPrivateKey = $this->getRequest()->getParam(self::PARENT_PRIVATE_KEY);
|
| 52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
if ((empty($parentPrivateKey)) ||
|
| 54 |
(Mage::helper('searchanise/ApiSe')->getParentPrivateKey() !== $parentPrivateKey)) {
|
| 55 |
$_options = Mage::helper('searchanise/ApiSe')->getAddonOptions();
|
| 64 |
echo Mage::helper('core')->jsonEncode($options);
|
| 65 |
}
|
| 66 |
} else {
|
| 67 |
+
@ini_set('display_errors', 1);
|
| 68 |
+
$resync = $this->getRequest()->getParam(self::RESYNC);
|
| 69 |
+
$visual = $this->getRequest()->getParam(self::OUTPUT);
|
| 70 |
+
$profiler = $this->getRequest()->getParam(self::PROFILER);
|
| 71 |
+
$storeId = $this->getRequest()->getParam(self::STORE_ID);
|
| 72 |
+
$checkData = $this->getRequest()->getParam(self::CHECK_DATA);
|
| 73 |
+
$productId = $this->getRequest()->getParam(self::PRODUCT_ID);
|
| 74 |
+
$productIds = $this->getRequest()->getParam(self::PRODUCT_IDS);
|
| 75 |
+
|
| 76 |
+
if ($productId) {
|
| 77 |
+
$productIds = array($productId);
|
| 78 |
+
} elseif ($productIds) {
|
| 79 |
+
$productIds = explode(',', $productIds);
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
$store = null;
|
| 83 |
if (!empty($storeId)) {
|
| 84 |
$store = Mage::app()->getStore($storeId);
|
| 120 |
Mage::helper('searchanise/ApiSe')->queueImport();
|
| 121 |
|
| 122 |
} elseif (!empty($productIds)) {
|
| 123 |
+
$productFeeds = Mage::helper('searchanise/ApiXML')->generateProductsXML($productIds, $store, false, $checkData);
|
| 124 |
+
if ($productFeeds) {
|
| 125 |
+
$xmlHeader = Mage::helper('searchanise/ApiXML')->getXMLHeader($store);
|
| 126 |
+
$xmlFooter = Mage::helper('searchanise/ApiXML')->getXMLFooter($store);
|
| 127 |
+
$productFeeds = $xmlHeader . $productFeeds . $xmlFooter;
|
| 128 |
+
}
|
| 129 |
|
| 130 |
if ($visual) {
|
| 131 |
Mage::helper('searchanise/ApiSe')->printR($productFeeds);
|
| 132 |
} else {
|
| 133 |
echo Mage::helper('core')->jsonEncode($productFeeds);
|
| 134 |
}
|
| 135 |
+
|
| 136 |
} else {
|
| 137 |
Mage::helper('searchanise/ApiSe')->checkImportIsDone();
|
| 138 |
|
| 155 |
@ignore_user_abort(1);
|
| 156 |
$options['ignore_user_abort_after'] = ini_get('ignore_user_abort_after');
|
| 157 |
|
| 158 |
+
$options['memory_limit'] = ini_get('memory_limit');
|
| 159 |
+
$asyncMemoryLimit = Mage::helper('searchanise/ApiSe')->getAsyncMemoryLimit();
|
| 160 |
+
if (substr(ini_get('memory_limit'), 0, -1) < $asyncMemoryLimit) {
|
| 161 |
+
@ini_set('memory_limit', $asyncMemoryLimit . 'M');
|
| 162 |
+
}
|
| 163 |
+
$options['memory_limit_after'] = ini_get('memory_limit');
|
| 164 |
+
|
| 165 |
if ($visual) {
|
| 166 |
Mage::helper('searchanise/ApiSe')->printR($options);
|
| 167 |
} else {
|
| 216 |
|
| 217 |
return $out;
|
| 218 |
}
|
| 219 |
+
}
|
app/code/community/Simtech/Searchanise/etc/config.xml
CHANGED
|
@@ -15,7 +15,7 @@
|
|
| 15 |
<config>
|
| 16 |
<modules>
|
| 17 |
<Simtech_Searchanise>
|
| 18 |
-
<version>1.1.
|
| 19 |
</Simtech_Searchanise>
|
| 20 |
</modules>
|
| 21 |
<frontend>
|
|
@@ -562,6 +562,7 @@
|
|
| 562 |
<searchanise>
|
| 563 |
<config>
|
| 564 |
<server_version>1.2</server_version>
|
|
|
|
| 565 |
<search_timeout>3</search_timeout>
|
| 566 |
<request_timeout>10</request_timeout>
|
| 567 |
<ajax_async_timeout>1</ajax_async_timeout>
|
| 15 |
<config>
|
| 16 |
<modules>
|
| 17 |
<Simtech_Searchanise>
|
| 18 |
+
<version>1.1.7</version>
|
| 19 |
</Simtech_Searchanise>
|
| 20 |
</modules>
|
| 21 |
<frontend>
|
| 562 |
<searchanise>
|
| 563 |
<config>
|
| 564 |
<server_version>1.2</server_version>
|
| 565 |
+
<async_memory_limit>512</async_memory_limit>
|
| 566 |
<search_timeout>3</search_timeout>
|
| 567 |
<request_timeout>10</request_timeout>
|
| 568 |
<ajax_async_timeout>1</ajax_async_timeout>
|
app/code/community/Simtech/Searchanise/etc/config_without_search.xml
CHANGED
|
@@ -15,7 +15,7 @@
|
|
| 15 |
<config>
|
| 16 |
<modules>
|
| 17 |
<Simtech_Searchanise>
|
| 18 |
-
<version>1.1.
|
| 19 |
</Simtech_Searchanise>
|
| 20 |
</modules>
|
| 21 |
<frontend>
|
|
@@ -562,6 +562,7 @@
|
|
| 562 |
<searchanise>
|
| 563 |
<config>
|
| 564 |
<server_version>1.2</server_version>
|
|
|
|
| 565 |
<search_timeout>3</search_timeout>
|
| 566 |
<request_timeout>10</request_timeout>
|
| 567 |
<ajax_async_timeout>1</ajax_async_timeout>
|
| 15 |
<config>
|
| 16 |
<modules>
|
| 17 |
<Simtech_Searchanise>
|
| 18 |
+
<version>1.1.7</version>
|
| 19 |
</Simtech_Searchanise>
|
| 20 |
</modules>
|
| 21 |
<frontend>
|
| 562 |
<searchanise>
|
| 563 |
<config>
|
| 564 |
<server_version>1.2</server_version>
|
| 565 |
+
<async_memory_limit>512</async_memory_limit>
|
| 566 |
<search_timeout>3</search_timeout>
|
| 567 |
<request_timeout>10</request_timeout>
|
| 568 |
<ajax_async_timeout>1</ajax_async_timeout>
|
package.xml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>Simtech_Searchanise</name>
|
| 4 |
-
<version>1.1.
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="http://docs.searchanise.com/connector_addon/license_agreement.html">Commercial license: http://docs.searchanise.com/connector_addon/license_agreement.html</license>
|
| 7 |
<channel>community</channel>
|
|
@@ -10,13 +10,12 @@
|
|
| 10 |
<description>Searchanise is a free SaaS solution providing fast and smart search for online stores. It provides rapid search results and instant search suggestions presented in a fancy and customizable widget.
|
| 11 |

|
| 12 |
With the help of Searchanise Connector Add-on you will be able to connect your store to the service and start using the search widget in no time. Power up your store right now!</description>
|
| 13 |
-
<notes>[!]
|
| 14 |
-
[
|
| 15 |
-
[*] Unnecessary cron processing notifications sent every 5 minutes with the OK message removed..<br /></notes>
|
| 16 |
<authors><author><name>Simbirsk Technologies, Ltd.</name><user>searchanise</user><email>sales@searchanise.com</email></author></authors>
|
| 17 |
-
<date>2013-
|
| 18 |
-
<time>08:
|
| 19 |
-
<contents><target name="magecommunity"><dir name="Simtech"><dir name="Searchanise"><dir name="Block"><file name="Async.php" hash="bc97c98da15f5abbc1d8922ca477dc6d"/><file name="Autocomplete.php" hash="efc89ac3f897be3bc307fba6a36778f0"/><file name="Jsinit.php" hash="0cf9770f73064f571420283a0e4bdb8d"/><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="73c06dbe5c5ca8778bb2488ed2b5b5ed"/></dir><file name="Result.php" hash="4e767e273ee21a38332ac226af878291"/></dir><file name="Result.php" hash="dec7b27ab9511c956680eb60eba9b95e"/></dir><dir name="Helper"><file name="ApiSe.php" hash="
|
| 20 |
<compatible/>
|
| 21 |
<dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies>
|
| 22 |
</package>
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>Simtech_Searchanise</name>
|
| 4 |
+
<version>1.1.7</version>
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="http://docs.searchanise.com/connector_addon/license_agreement.html">Commercial license: http://docs.searchanise.com/connector_addon/license_agreement.html</license>
|
| 7 |
<channel>community</channel>
|
| 10 |
<description>Searchanise is a free SaaS solution providing fast and smart search for online stores. It provides rapid search results and instant search suggestions presented in a fancy and customizable widget.
|
| 11 |

|
| 12 |
With the help of Searchanise Connector Add-on you will be able to connect your store to the service and start using the search widget in no time. Power up your store right now!</description>
|
| 13 |
+
<notes>[!] Some attribute values could be ignored in the full-text search. Fixed.<br />
|
| 14 |
+
[*] Full import is now more stable, less memory-consuming, and more DB error-resistant.</notes>
|
|
|
|
| 15 |
<authors><author><name>Simbirsk Technologies, Ltd.</name><user>searchanise</user><email>sales@searchanise.com</email></author></authors>
|
| 16 |
+
<date>2013-09-23</date>
|
| 17 |
+
<time>08:30:05</time>
|
| 18 |
+
<contents><target name="magecommunity"><dir name="Simtech"><dir name="Searchanise"><dir name="Block"><file name="Async.php" hash="bc97c98da15f5abbc1d8922ca477dc6d"/><file name="Autocomplete.php" hash="efc89ac3f897be3bc307fba6a36778f0"/><file name="Jsinit.php" hash="0cf9770f73064f571420283a0e4bdb8d"/><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="73c06dbe5c5ca8778bb2488ed2b5b5ed"/></dir><file name="Result.php" hash="4e767e273ee21a38332ac226af878291"/></dir><file name="Result.php" hash="dec7b27ab9511c956680eb60eba9b95e"/></dir><dir name="Helper"><file name="ApiSe.php" hash="097890a3d144ef9f5c073ec823503aa5"/><file name="ApiXML.php" hash="cc920563319910b4775a10aee240b782"/><file name="Data.php" hash="53bbede2bf74a83521ee64240739f898"/></dir><dir name="Model"><file name="Advanced.php" hash="2a22ebcf7ac75b54681ef8a27bad2e47"/><dir name="Config"><file name="Data.php" hash="ddc558d22208f0ebc1e4378c9d050022"/></dir><file name="Config.php" hash="00ca3c7955f3ff2283c636a2074b6f03"/><dir name="Import"><dir name="Entity"><file name="Product.php" hash="4997af528b36f0f576d1c01402e14b03"/></dir></dir><dir name="Layer"><dir name="Filter"><file name="Category.php" hash="e290ab29f2d50e1acbbbb37496150ea4"/><file name="Price.php" hash="743887b32bf012274ad8a371fff96411"/></dir></dir><file name="Layer.php" hash="3e8c975d649ae6e20fcc69d35779c97c"/><file name="LayerCatalogSearch.php" hash="61728092fdb9cf42490afacdc4e731fd"/><dir name="Mysql4"><dir name="Advanced"><file name="Collection.php" hash="dd8c6f3cbb0621a5a7320f3104e68da6"/></dir><dir name="Config"><file name="Collection.php" hash="470218c1eb3f1cc1ca0e6d0e93e1b097"/></dir><file name="Config.php" hash="c95dc8ecd7ab4f955b6eaf4710ab960e"/><dir name="Fulltext"><file name="Collection.php" hash="5646955503a90020f87cfd861ac07e73"/></dir><dir name="Product"><file name="Collection.php" hash="28b478eb328502ce03e389404d9f54b5"/><file name="CollectionTag.php" hash="def509d1365374e6dede36be17e75bf3"/></dir><dir name="Queue"><file name="Collection.php" hash="30ca0f8640bdc443deb94cd2e71010c8"/></dir><file name="Queue.php" hash="286351623e8f011a21519f8d9c3e3151"/><file name="Store.php" hash="0126a4291d7dad6641bf59abb0f64cc4"/></dir><file name="Observer.php" hash="8d24a27713e1db605ef0c14862df8bf0"/><file name="Queue.php" hash="831f5ea7e57810f9c78d09659424e9a7"/><file name="Request.php" hash="af0f9a16a0dbc69ba76458eac802638b"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="12933839daa74d17ac82fca89071bc0a"/></dir><dir name="Eav"><dir name="Mysql4"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="982b1960bec58522f1bd8b82f86452b4"/><file name="Price.php" hash="fc1ec55d6c2aa97558e06691e690e466"/></dir></dir><dir name="Product"><file name="Action.php" hash="006e3c8c775cf31a8b9c66fb934c9d2d"/></dir></dir></dir><dir name="Fulltext"><file name="Collection.php" hash="b9e2e4884a7ecee0000e6a41c0e6d3e2"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="0bfecbdff2458785a287c3f1de23ed56"/><file name="Price.php" hash="38d1acaa4478d678d4bb20704a81b760"/></dir></dir><dir name="Product"><file name="Collection.php" hash="6072bf2a7a4713f3db2fa96014e7453a"/><file name="CollectionTag.php" hash="e89307da7c26ee153c3f9dead94dcd13"/></dir><file name="Store.php" hash="8dd81bf57d38af2b4640bbf14063d3f8"/></dir><file name="Searchanise.php" hash="507813e92908000315aabc4256c5a05c"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Searchanise"><file name="TypeAsync.php" hash="11d1aa481094ccbeab365b1fed33440d"/></dir></dir></dir></dir><dir name="Tag"><file name="Relation.php" hash="598f81fd8b2ac77baf24211c2ed03e55"/></dir></dir><dir name="controllers"><file name="AdvancedController.php" hash="7500f6075382cd8a14816e424da2348f"/><file name="AsyncController.php" hash="e12b49146b32369e8eda17b7e6558fc7"/><file name="CategoryController.php" hash="909f99c5cf7f85405fc76ebe976c2c8e"/><file name="IndexController.php" hash="e3234ca51a7669741e29ff7c38789989"/><file name="InfoController.php" hash="dfbb0787588ac7884cac6dda72507209"/><file name="OptionsController.php" hash="56785c8ea24472c2047268b2d9e8e878"/><file name="ProductController.php" hash="6633fde99f35ffeaa05884f0e0d98da7"/><file name="ResultController.php" hash="4b00515cc47593704ea1178d7b44d48e"/><file name="ResyncController.php" hash="0612f929d375427326821dfc12186be8"/><file name="SignupController.php" hash="80f87a63d6272f98a068dde35f1d140e"/></dir><dir name="etc"><file name="config.xml" hash="99932a4a58258b261b1b61e98928f9de"/><file name="config_without_search.xml" hash="e470d291701015dcf403caf7ec5ce265"/><file name="system.xml" hash="a6b2e082fe45706b86b8da0fe02d4374"/></dir><dir name="sql"><dir name="searchanise_setup"><file name="mysql4-install-0.1.0.php" hash="754324c8783e9cc24de86396e1587e73"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="searchanise"><file name="dashboard.phtml" hash="4f0674cd493872c2b1e89cdcc80546ab"/></dir></dir><dir name="layout"><file name="searchanise.xml" hash="68baa611d05db05f8816ea2a8260e961"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="searchanise.xml" hash="5e904fee02cbd42324a297d513b9f582"/></dir></dir></dir><dir name="default"><dir name="default"><dir name="template"><dir name="catalogsearch"><file name="form.mini.phtml" hash="fcf8e06e66801a36c96f20ca5d187123"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Simtech_Searchanise.xml" hash="04148681a6648bd370ab62140cbf2ad9"/></dir></target><target name="magelocale"><dir name="en_US"><file name="Simtech_Searchanise.csv" hash="1bdb7fddc596dac1460bc3054c425187"/></dir></target></contents>
|
| 19 |
<compatible/>
|
| 20 |
<dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies>
|
| 21 |
</package>
|
