Настройки mSync для соединения с 1с (после обновления Apache/2.4.6 CVE-2023-25690)

Может кому пригодится, я эту проблему решал весь день.

После обновления Apache/2.4.6 CVE-2023-25690 появились проблемы соединения с 1с по средствам компонента mSync

Fri Apr 07 11:39:22.840337 2023] [rewrite:error] [pid 3559] [client 185.xx.xxx.xxx:58776] AH10411: Rewritten query string contains control characters or spaces

Если у вас Apache то не создавайте или удалите .htaccess в папке /assets/components/msync/ (про который написано в документации) — возможно его можно было бы просто изменить, но как я не пытался, рабочую версию я не смог найти.

Если CGI я не нашел решения… возможно для него нужен .htaccess но точно не тот, что в документации.

Еще одна странность, я создал два одинаковых сайта на разных серверах, обновил ПО на обоих, на одном работало без удаления .htaccess на другом ни как не работало, выдает 403.

Может кто-то тоже с толкнулся с подобной ошибкой, буду признателен обратной связи.
Сергей
07 апреля 2023, 16:33
modx.pro
751
+1

Как выбрать записи за интервал времени?

Пытаюсь через modRestController получить записи за интервал времени, но выходит какая-то фигня:
Прямой sql норм: SELECT * FROM `table` WHERE time BETWEEN «2023-04-04T01:15:58» AND «2023-04-04T23:13:00», а через квери билдер что-то не хочет
$this->whereCondition['time:BETWEEN'] = $startTime;
    $this->whereCondition['time:AND'] = $endTime;
// возвращает все что после 2023-04-04
Konstantin
06 апреля 2023, 20:31
modx.pro
517
0

Псевдонимы mSearch2 работают не так, как ожидалось

У меня есть два ресурса продуктов, которые содержат похожий продукт, но имеют разные названия:
  • ресурс A: Solarmodule
  • ресурс B: Solarpanel
Если кто-то ищет solar, он находит оба ресурса, и это работает нормально. Но если кто-то ищет solarmodule, он находит только ресурс A, а solarpanel — только ресурс B. Но они должны находить оба каждый раз.
Vibe Design
06 апреля 2023, 18:17
modx.pro
352
0

Как автоматом указать характеристики только те что есть в товарах для категории?

Как в категории указать все характеристики что используются в товарах этой категории? в minishop2

[РЕШЕНО]

Суть в том чтобы в админке появились только те характеристики у товара которые есть, это значит поставить все уникальные характеристики для категории, нужно было именно такое решение, сделал сам. А если не нужно их указывать в админке для редактирования, то да проще будет вывести их список через pdoResources указав класс msCategoryOption

Буду рад кто исправит это код(КОД РАБОЧИЙ), чтобы был чище, так как делался на быструю руку решить задачу, а так же не было знаний для реализации этой задачи.

<?php

function prepareSqlQuery($sqlQuery){
	global $modx;
	return $modx->query($sqlQuery);
}


function extractResultsFromQueryObject($sqlQueryResult, $itemsToRetreive, $multiDimensionRetreive=false){
	global $modx;
	$results = array();

	if (is_object($sqlQueryResult)) {
		while ($row = $sqlQueryResult->fetch(PDO::FETCH_ASSOC)) {
			if($multiDimensionRetreive){
				foreach($itemsToRetreive as $key => $value){
					array_push($results, $row[$key], $row[$value]);
				}	    		
			} else {
				foreach($itemsToRetreive as $itemToRetreive){
					array_push($results, $row[$itemToRetreive]);
				}
			}
		}
	}
	return $results;
}


$prepareSqlQueryOfRetreiveCategories = prepareSqlQuery('SELECT modx_site_content.id FROM `modx_site_content` WHERE modx_site_content.class_key = "msCategory"');
$categoriesIds = extractResultsFromQueryObject($prepareSqlQueryOfRetreiveCategories, array('id'));

if(count($categoriesIds) <= 0){
	return 'Have no categories';
}


foreach($categoriesIds as $categoryId){

	$productsQueryObject = prepareSqlQuery('SELECT modx_site_content.id FROM `modx_site_content` WHERE modx_site_content.class_key = "msProduct" AND modx_site_content.parent = "'.$categoryId.'"');
	$productsIds = extractResultsFromQueryObject($productsQueryObject, array('id'));

	if(count($productsIds) <= 0) continue;

	$productsIds = implode(",", $productsIds);

	$distinctProductOptionsSqlQuery = prepareSqlQuery('SELECT DISTINCT modx_ms2_product_options.key FROM `modx_ms2_product_options` WHERE modx_ms2_product_options.product_id IN ('.$productsIds.")");
	$distinctProductOptions = extractResultsFromQueryObject($distinctProductOptionsSqlQuery, array('key'));

	if(count($distinctProductOptions) <= 0) continue;

	$uniqueOptions = "";
	$uniqueOptionsLength = count($distinctProductOptions);
	foreach ($distinctProductOptions as $idx => $value) {
		if($idx >= $uniqueOptionsLength - 1){
			$uniqueOptions .= "'$value'";
		} else{
			$uniqueOptions .= "'$value',";
		}
	}


	$uniqueOptionsIdsSqlQuery = prepareSqlQuery('SELECT modx_ms2_options.id,modx_ms2_options.key FROM `modx_ms2_options` WHERE modx_ms2_options.key IN ('.$uniqueOptions.')');
	$uniqueOptionsIds = extractResultsFromQueryObject($uniqueOptionsIdsSqlQuery, array('id'));

	if(count($uniqueOptionsIds) <= 0) continue;

	/* #################################### ##################################### */
	foreach($uniqueOptionsIds as $idx => $uniqueOptionId){
		if (!$cop = $modx->getObject('msCategoryOption', array('option_id' => $uniqueOptionId, 'category_id' => $categoryId))) {
			$table = $modx->getTableName('msCategoryOption');
			$sql = "INSERT INTO {$table} (`option_id`,`category_id`,`active`) VALUES ({$uniqueOptionId}, {$categoryId}, 1);";
			$stmt = $modx->prepare($sql);
			$stmt->execute();
		} else {
			$q = $modx->newQuery('msCategoryOption');
			$q->command('UPDATE');
			$q->where(array('option_id' => $uniqueOptionId, 'category_id' => $categoryId));
			$q->set(array('active' => 1));
			$q->prepare();
			$q->stmt->execute();
		}            
		
	}
	/* #################################### ##################################### */

	echo 'Done';
}
Vladimir
06 апреля 2023, 09:35
modx.pro
1
434
0

Success-страница после оформления заказа

Сделал по данному мануалу:
1. добавил параметр в системные minishop2


2. создал файл customorder.class.php в /core/components/minishop2/custom/order/ и зарегистрировал по документации через console

steve.kon
05 апреля 2023, 17:11
modx.pro
719
0

Как узнать все доступные для использования в шаблоне, чанке переменные?

Приветствую.
К примеру, есть какой-нибудь компонент, без разницы какой. В шаблоне или чанке при использовании этого компонента можно использовать различные переменные. Плейсхолдеры, к примеру. Если в документации не описаны такие возможности, то как можно узнать то, что доступно для использования/вывода с помощью того или иного компонента?
weranda
05 апреля 2023, 17:11
modx.pro
480
0

mSearch2 приводит к заполнению журнала ошибок (mSearch2 fills error log)

Каждый раз, когда я сохраняю какой-либо ресурс, мой журнал заполняется этой ошибкой (да, 2 раза):
Whenever I save any resource my log gets filled with this error (yes, 2x):
core/components/msearch2/phpmorphy/src/common.php : 670) PHP warning: Undefined array key "common_source"
core/components/msearch2/phpmorphy/src/common.php : 670) PHP warning: Undefined array key "common_source"

А также этот, когда я запускаю процессор ресурсов/обновления во фрагменте (да, 4 раза):
Also this one when I run the resource/update processor in a snippet (yes, 4x):
Vibe Design
04 апреля 2023, 16:48
modx.pro
467
0

[msMarketingStatuses] 1.0.0 Автоматическое управление статусами заказов



Компонент позволяет настроить автоматическое управление статусами заказов, что сильно упрощает работу для менеджера, маркетолога или владельца магазина.

Теперь вам будет легко:

– Напомнить клиенту об оплате через 5 минут после оформления заказа,
– Попросить оставить отзыв спустя 1 неделю после отправки заказа,
– Выслать промокод на следующий заказ через 2 недели после отправки заказа клиенту.

Всё это теперь будет происходить автоматически, без вашего участия.
Павел Гвоздь
04 апреля 2023, 05:09
modx.pro
907
+15

Как раскрыть сайдбар на нужной странице в моем случае

При открытии товара, который находится в подкатегории одной из категорий, сайдбар выглядит так:

а должен быть так:

то есть категория и подкатегория раскрыты где виден активный пункт меню. Вот код:
var $offCanvasNav = $('.offcanvas-navigation'),
    $offCanvasNavSubMenu = $offCanvasNav.find('.sub-menu-mobile');

/*Add Toggle Button With Off Canvas Sub Menu*/
$offCanvasNavSubMenu.parent().prepend('<span class="menu-expand"><i></i></span>');

/*Close Off Canvas Sub Menu*/
$offCanvasNavSubMenu.slideUp(0);
Владислав
03 апреля 2023, 16:36
modx.pro
356
0