Skip to content

Commit

Permalink
Merge pull request #153 from dle-modules/5.1.2
Browse files Browse the repository at this point in the history
Исправления и улучшения
  • Loading branch information
pafnuty authored May 16, 2019
2 parents de4406c + 79e7ea7 commit a12e181
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 66 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# DLE-BlockPro — тот самый модуль для вывода новостей!
![version](https://img.shields.io/badge/version-5.1.0-red.svg?style=flat-square "Version")
![version](https://img.shields.io/badge/version-5.1.2-red.svg?style=flat-square "Version")
![DLE](https://img.shields.io/badge/DLE-10.x-green.svg?style=flat-square "DLE Version")
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://github.com/dle-modules/DLE-BlockPro/blob/master/LICENSE)

- **ВНИМАНИЕ!** **Работа модуля в кодировке windows-1251 не гарантируется**, не проверялась и проверяться когда-либо автором модуля не будет. Техническая поддержка кодировки windows-1251 оказывается с наименьшим приоритетом и только при наличии желания и времени. Это принципиальная позиция и меняться не будет. Рекомендуется [переходить на нормальную кодировку сайта](https://github.com/pafnuty/DLE-Charset-Converter)
- **ВНИМАНИЕ!** **Работа модуля в кодировке windows-1251 не гарантируется**
- Краткая информация о шаблонных тега прописана в шаблоне **{THEME}/blockpro/blockpro.tpl**, расширенный пример **{THEME}/blockpro/fullexample.tpl**
- Более детальная информация по используемому шаблонизатору модуля находится в [документации по шаблонизатору](https://github.com/bzick/fenom/blob/master/docs/ru/readme.md)
- Официальный сайт: [bp.pafnuty.name](http://bp.pafnuty.name/)
Expand Down
1 change: 1 addition & 0 deletions blockpro.php
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@


// Выводим результаты работы модуля в виде js-строки
/** @var string $printOutput */
echo $printOutput;

} else {
Expand Down
4 changes: 2 additions & 2 deletions blockpro_install.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
// Описание модуля, для установщика и админки.
'moduleDescr' => 'Модуль вывода новостей для DLE',
// Версия модуля, для установщика
'moduleVersion' => '5.1.0',
'moduleVersion' => '5.1.2',
// Дата выпуска модуля, для установщика
'moduleDate' => '25.10.2018',
'moduleDate' => '16.05.2019',
// Версии DLE, поддержваемые модулем, для установщика
'dleVersion' => '10.x',
// ID групп, для которых доступно управление модулем в админке.
Expand Down
2 changes: 1 addition & 1 deletion engine/inc/blockpro.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
define('MODULE_DIR', ENGINE_DIR . '/modules/base/admin/blockpro/');

$moduleName = 'blockpro';
$moduleVersion = '5.1.0';
$moduleVersion = '5.1.2';

$moderate = $_REQUEST['moderate'];
$moderate_checked = ($moderate) ? 'checked' : '';
Expand Down
79 changes: 19 additions & 60 deletions engine/modules/base/blockpro.php
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,8 @@ classic: << Первая < 1 [2] 3 > Последняя >>
// Символьные коды для исключающей фильтрации по символьному каталогу. Перечисляем через запятую или пишем this для текущего символьного кода
'fields' => !empty($fields) ? $fields : false,
// Дополнение к выборке полей из БД (p.field,e.field)
// setFilter=p.full_story|SEARCH|dle_media_begin|OR|p.full_story|SEARCH|dle_video_begin
// setFilter=e.news_read|+|100||p.comm_num|-|20
'setFilter' => !empty($setFilter) ? $setFilter : '',
// Собственная фильтрация полей БД
'experiment' => !empty($experiment) ? $experiment : false,
Expand Down Expand Up @@ -186,7 +188,12 @@ classic: << Первая < 1 [2] 3 > Последняя >>
}
}

// Сохраняем текущее значение переменной, если она задана (fix #142)
$startCacheNameAddon = $cfg['cacheNameAddon'];

$cfg['cacheNameAddon'] = [];
$cfg['cacheNameAddon'][] = $startCacheNameAddon;

// Если имеются переменные со значениями this, изменяем значение переменной cacheNameAddon
if ($cfg['catId'] == 'this') {
$cfg['cacheNameAddon'][] = $category_id . 'cId_';
Expand Down Expand Up @@ -383,69 +390,13 @@ classic: << Первая < 1 [2] 3 > Последняя >>
$arFilter[] = $base->cfg['setFilter'];
}


if (!empty($arFilter)) {
foreach ($arFilter as $strItem) {
$arFItem = explode('|', $strItem, 3);

$field = $arFItem[0];
$operator = '';

// Т.к. DLE не позволяет передавать напрямую символы '>' и '<', приходится изобретать собственный велосипед.
switch ($arFItem[1]) {
case '-':
case 'lt':
$operator = ' < ';
break;

case '+':
case 'gt':
$operator = ' > ';
break;

case '=':
case 'eq':
$operator = ' = ';
break;

case '+=':
case 'gte':
$operator = ' >= ';
break;

case '-=':
case 'lte':
$operator = ' <= ';
break;

case '+-':
case '-+':
case 'not':
$operator = ' != ';
break;

case 'SEARCH':
$operator = ' LIKE ';
break;

case 'NOT_SEARCH':
$operator = ' NOT LIKE ';
break;
}
$queryItem = $base->prepareFilterQuery($strItem);

if ($arFItem[2] == 'NOW()') {
// Если нужно отобрать "сейчас"
$itemVal = 'NOW()';
} elseif ($arFItem[1] == 'SEARCH' || $arFItem[1] == 'NOT_SEARCH') {
// Реализация поиска
$itemVal = $base->db->parse('?s', '%' . $arFItem[2] . '%');
} else {
// В противном случае фильтруем.
$_op = (is_numeric($arFItem[2])) ? '?i' : '?s';
$itemVal = $base->db->parse($_op, $arFItem[2]);
}

if ($operator !== '') {
$wheres[] = $field . $operator . $itemVal;
if($queryItem) {
$wheres[] = $queryItem;
}

}
Expand Down Expand Up @@ -840,6 +791,11 @@ classic: << Первая < 1 [2] 3 > Последняя >>

$bodyToRelated = $base->db->parse('?s', strip_tags($relatedBody['title'] . ' ' . $bodyToRelated));

// Добавляем улучшенный алгоритм поиска похожих новостей из DLE 13
$ext_query_fields .= ', MATCH (p.title, p.short_story, p.full_story, p.xfields) AGAINST (' . $bodyToRelated . ') as score';
$orderArr = ['score'];

// Формируем условие выборки
$wheres[] = 'MATCH (' . $relatedRows . ') AGAINST (' . $bodyToRelated . ') AND id !=' . $relatedBody['id'];
}
} else {
Expand Down Expand Up @@ -1193,6 +1149,7 @@ classic: << Первая < 1 [2] 3 > Последняя >>
}

// Обрабатываем вложения
/** @var $base */
if ($base->dle_config['files_allow']) {
if (strpos($output, '[attachment=') !== false) {
$output = show_attach($output, $attachments);
Expand All @@ -1208,6 +1165,7 @@ classic: << Первая < 1 [2] 3 > Последняя >>
}

// Результат работы модуля
/** @var boolean $external */
if (!$external) {
// Если блок не является внешним - выводим на печать
if (count($outputLog['errors']) > 0) {
Expand Down Expand Up @@ -1236,5 +1194,6 @@ classic: << Первая < 1 [2] 3 > Последняя >>
$mem_usg = (function_exists('memory_get_peak_usage')) ? '<br>Расход памяти: <b>' . round(memory_get_peak_usage() / (1024 * 1024), 2) . 'Мб </b>' : '';
// Вывод статистики
/** @var integer $start */
/** @var string $dbStat */
echo '<div class="bp-statistics" style="border: solid 1px red; padding: 5px; margin: 5px 0;">' . $dbStat . 'Время выполнения скрипта: <b>' . round((microtime(true) - $start), 6) . '</b> c.' . $mem_usg . '</div>';
}
102 changes: 101 additions & 1 deletion engine/modules/base/core/base.php
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,106 @@ public function getRand($from = 1, $to = 2000, $count = 15) {
return $arNumbers;
}

/**
* Получаем готовую строку для вставки в запрос из условий фильтрации
*
* Пример использования в строке подключения
* setFilter=p.full_story|SEARCH|text1|OR|p.full_story|SEARCH|text2
*
* @param string $setFilterStr строка с условиями фильтрации
*
* @return string Строка для использования в качестве части заброса в БД
*/
public function prepareFilterQuery($setFilterStr='') {
if(!$setFilterStr || $setFilterStr === '') {
return false;
}

// Разбиваем строку на условия "OR", если есть.
$filterItems = explode('|OR|', $setFilterStr);


$hasOrCondition = count($filterItems) > 1;

$queryParts = [];

foreach ($filterItems as $strItem) {

// Разбиваем на части запроса
$arFItem = explode('|', $strItem, 3);

$field = $arFItem[0];
$operator = '';

// Т.к. DLE не позволяет передавать напрямую символы '>' и '<', приходится изобретать собственный велосипед.
switch ($arFItem[1]) {
case '-':
case 'lt':
$operator = ' < ';
break;

case '+':
case 'gt':
$operator = ' > ';
break;

case '=':
case 'eq':
$operator = ' = ';
break;

case '+=':
case 'gte':
$operator = ' >= ';
break;

case '-=':
case 'lte':
$operator = ' <= ';
break;

case '+-':
case '-+':
case 'not':
$operator = ' != ';
break;

case 'SEARCH':
$operator = ' LIKE ';
break;

case 'NOT_SEARCH':
$operator = ' NOT LIKE ';
break;
}


if ($arFItem[2] == 'NOW()') {
// Если нужно отобрать "сейчас"
$itemVal = 'NOW()';
} elseif ($arFItem[1] == 'SEARCH' || $arFItem[1] == 'NOT_SEARCH') {
// Реализация поиска
$itemVal = $this->db->parse('?s', '%' . $arFItem[2] . '%');
} else {
// В противном случае фильтруем.
$_op = (is_numeric($arFItem[2])) ? '?i' : '?s';
$itemVal = $this->db->parse($_op, $arFItem[2]);
}

if ($operator !== '') {
$queryParts[] = $field . $operator . $itemVal;
}
}

$strAueryPart = implode(' OR ', $queryParts);

if ($hasOrCondition) {
$strAueryPart = '(' . $strAueryPart . ')';
}

return $strAueryPart;
}


} // base Class

Expand All @@ -352,7 +452,7 @@ function formateDate($date, $_f = false) {
global $lang, $config, $langdate;

if (!$lang['charset']) {
@include_once ROOT_DIR . '/language/' . $config['langs'] . '/website.lng';
include_once(DLEPlugins::Check(ROOT_DIR . '/language/' . $config['langs'] . '/website.lng'));
}

$date = strtotime($date);
Expand Down

0 comments on commit a12e181

Please sign in to comment.