Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] не работает на php 8 #112

Open
tcse opened this issue Nov 15, 2022 · 12 comments
Open

[BUG] не работает на php 8 #112

tcse opened this issue Nov 15, 2022 · 12 comments
Assignees
Labels

Comments

@tcse
Copy link
Contributor

tcse commented Nov 15, 2022

Привет.
При обновлении на php 8.1 плагин не запускается.
Как только откатываешь на php7.4 или на php7.3 никаких проблем нет.

@pafnuty
Copy link
Member

pafnuty commented Nov 15, 2022

фигасе, уже php8 вышла)))

@tcse
Copy link
Contributor Author

tcse commented Nov 15, 2022 via email

@exforex
Copy link

exforex commented Jan 11, 2023

Уже PHP 8.2 вышла и тоже формы не работают. Вернее у меня форма открывается, но ничего не отправляется, лоадер на кнопке крутится и все...
А если в настройках DLE установить использование JQuery 3.xxx, то даже формы не открываются...
Пробовал сам разобраться в PHP файлах, но явных ошибок и проблем не увидел.
Поэтому убедительная просьба (думаю все меня поддержат), доработайте, пожалуйста, под PHP 8.x, а также для JQuery 3.xx
Понятно, как будет у вас время и возможность...

@exforex
Copy link

exforex commented Jan 11, 2023

Перевел сайт на PHP 7.4 но все равно сообщения не отправляются.
Скриншот: https://disk.yandex.ru/i/MhAu1KymbaoWow
Может подскажете причину где, что подправить?
Уже голову сломал...

@tcse
Copy link
Contributor Author

tcse commented Jan 11, 2023

только что проверил на тестовом домен вот с таким конфигом:

Версия jQuery для вашего сайта: 3.xx
Версия DataLife Engine: | 15.3
Тип лицензии скрипта: | Лицензия активирована
Операционная система: | Linux 5.4.0-120-generic
Версия PHP: | 7.3.33
Версия MySQL: | 5.7.35-38

Формы плагина Uniform - работают.

Про php 7.4 прямо сейчас уточнить не смогу (так как многие другие модули работают тоже только до версии 7.3 и ниже.

@exforex
Copy link

exforex commented Jan 12, 2023

только что проверил на тестовом домен вот с таким конфигом:

Версия jQuery для вашего сайта: 3.xx Версия DataLife Engine: | 15.3 Тип лицензии скрипта: | Лицензия активирована Операционная система: | Linux 5.4.0-120-generic Версия PHP: | 7.3.33 Версия MySQL: | 5.7.35-38

Формы плагина Uniform - работают.

Про php 7.4 прямо сейчас уточнить не смогу (так как многие другие модули работают тоже только до версии 7.3 и ниже.

Создал тестовый домен с таким конфигом:
Версия jQuery для вашего сайта: 3.xx (2.хх тоже пробовал)
Версия DataLife Engine: | 15.3
Тип лицензии скрипта: | Лицензия активирована
Операционная система: | Linux 5.10.109-0
Версия PHP: | 7.3.31
Версия MySQL: | 5.7.21

Все равно не отправляет сообщения. На кнопке "Отправить" лоадер крутится и всё, и ничего не происходит.
Чувствую, что дело вовсе не в PHP...
У меня шаблон на Bootstrap, может в этом проблема?
Может от Bootstrap скрипты какие-то мешают?
Пробовал в main.tpl подключать скрипты от uniform раньше и позже подключения {AJAX{ и скриптов от Bootstrap, всё равно не хочет...

P.S. Сейчас попробовал на шаблоне Default, та же песня...

Во всех случаях заметил еще кое-что:

  1. Если делать подключение так: <span data-uniform="/engine/ajax/uniform/uniform.php" data-uf-settings='{"formConfig": "callback"}' class="uf-btn">Заказать звонок</span> то форма не открывается вообще, и неважно какой шаблон или какая версия PHP или JQuery
  2. Если подключать так: <a class="ttm-btn btn-inline ttm-btn-color-skincolor" data-uniform='{"formConfig": "feedback"}' href="#">Обратный звонок</a> то форма открывается, но сообщения не отправляются...

@tcse
Copy link
Contributor Author

tcse commented Jan 12, 2023

Может от Bootstrap скрипты какие-то мешают?

у меня все проекты на bootstrap - так что дело точно не в этом.
Вот ссылки на проекты с dle 15.3 ( www.iv-service.ru и www.dalegion.com ) там стоит dle-uniform

Предположу, что у вас могут быть не внедрены правки исходников плагина:

Для DLE 15.0 и 15.1
исправление работы отправки писем.

  1. Открыть файл www/engine/modules/uniform/uniform.php

найти строку:

// Если данные передаются постом — надо бы их обработать
require_once ENGINE_DIR . '/classes/parse.class.php';
$parse = new ParseFilter();

и ВЫШЕ поставить:

include_once (DLEPlugins::Check(ENGINE_DIR . '/classes/htmlpurifier/HTMLPurifier.s

@exforex
Copy link

exforex commented Jan 12, 2023

include_once (DLEPlugins::Check(ENGINE_DIR . '/classes/htmlpurifier/HTMLPurifier.s

Спасибо огромное!
Помогло!

Однако, работает только если подключать так: **data-uniform='{"formConfig": "callback"}'**
Если подключить так (как написано в инструкции) : **data-uniform="/engine/ajax/uniform/uniform.php" data-uf-settings='{"formConfig": "callback"}'**, то форма не открывается вообще...

Добавил ваше исправление через систему плагинов и всё пошло как надо...
Да, и кстати, Это работает на PHP 8.2 и c JQuery 3.xx

Еще раз спасибо!!!

@tcse
Copy link
Contributor Author

tcse commented Jan 12, 2023

Однако, работает только если подключать так: **data-uniform='{"formConfig": "callback"}'**
Если подключить так (как написано в инструкции) : **data-uniform="/engine/ajax/uniform/uniform.php" data-uf-settings='{"formConfig": "callback"}'**, то форма не открывается вообще...

Это 2 разных способа подключения в зависимости от версии модуля.

Пояснения:

DLE-Unirofm-1 - более не поддерживается разработчиком. Предназначена для DLE 9 - 13 без поддержки системы плагинов DLE.
Используется старый синтаксис вызова форм обратной связи.

<span data-uf-open="/engine/ajax/uniform/uniform.php" data-uf-settings='{"formConfig": "_feedback"}' class="uf-btn">Обратная связь</span>

DLE-Unirofm-2 - актуальная версия плагина
Используется новый синтаксис вызова форм обратной связи.

<span data-uniform="/engine/ajax/uniform/uniform.php" data-uf-settings='{"formConfig": "__feedback"}' class="uf-btn">Обратная связь</span>

Описанный ваш рабочий способ относится в версии DLE-Uniform 2
Версии с фиксами исходников тут https://github.com/tcse/DLE-Uniform-Help

@exforex
Copy link

exforex commented Jan 13, 2023

Описанный ваш рабочий способ относится в версии DLE-Uniform 2 Версии с фиксами исходников тут https://github.com/tcse/DLE-Uniform-Help

Добрый день!
Установил вашу пофиксенную версию отсюда: https://github.com/tcse/DLE-Uniform-Help/tree/main/Uniform-2.
Все работает без дополнительных телодвижений на PHP 8.2

Появился вопрос по атачу. Я добавил в форму feedback ( {THEME}/uniform/feedback/form.tpl ) возможность прикреплять файлы к сообщению по примеру из папки attachments, но теперь сообщения отправляются только если прикрепить к нему файлы.
Как сделать, чтобы прикрепление файлов было необязательным?
Посмотрел в файле sendmail.php из папки engine/modules/uniform есть такой код:

// Добавляем вложения
/** @var array $arSendAttachments */
if (count($arSendAttachments)) {
	foreach ($arSendAttachments as $attach) {
		$mail->addAttachment($attach['tmp_name'], $attach['name']);
	}
}

Насколько я понял, то он проверяет есть ли вложения и в принципе всё правильно, если count($arSendAttachments) == 0, то этот кусок кода должен быть проигнорирован. Но сообщения не отправляются если пользователь не прикрепил файлы к сообщению. На кнопке Отправить крутится лоадер и ничего не происходит.
Может я неправильно что-то делаю?
Подскажите, пожалуйста, как лучше организовать в форме feedback прикрепление файлов так, чтобы эта возможность была необязательной?
Заранее благодарю за помощь!
С уважением, Олег.

@exforex
Copy link

exforex commented Jan 13, 2023

Еще проблема с отправкой сообщения из тестовой формы. Тоже ничего не отправляется и на кнопке "Отправить" крутится лоадер и ничего не происходит.
Подключил в htaccess вывод PHP-ошибок в файл и вот содержимое файла, который получился в папке engine/ajax:

[13-Jan-2023 15:39:49 Europe/Moscow] PHP Fatal error:  Uncaught TypeError: str_replace(): Argument #2 ($replace) must be of type string when argument #1 ($search) is a string in .../public_html/engine/modules/uniform/uniform.php:211
Stack trace:
#0 .../public_html/engine/modules/uniform/uniform.php(211): str_replace('{uf_field_selec...', Array, '\n<div class="uf...')
#1 .../public_html/engine/ajax/uniform.php(99): include('/home/o/ovpmus8...')
#2 .../public_html/engine/ajax/controller.php(194): include_once('/home/o/ovpmus8...')
#3 {main}
  thrown in .../public_html/engine/modules/uniform/uniform.php on line 211

Похожие ошибки возникают если попытаться отправить форму feedback с добавленной возможностью прикрепления файлов к сообщению (см. коммент выше)...

@exforex
Copy link

exforex commented Feb 7, 2023

Разобрался где ошибка...
В файле engine/modules/uniform/uniform.php найти:
$tpl->copy_template = str_replace("{uf_field_{$k}}", $val, $tpl->copy_template);
заменить на:
$tpl->copy_template = str_replace("{uf_field_{$k}}", ".$val.", $tpl->copy_template);
Переменная $val должна быть типом string в любом случае, иначе отправка формы без аттача не происходит...
Теперь, даже если не прикреплять файлы к сообщению, то отправка происходит нормально.
Протестировал на DLE 16.0 и PHP 8.2 - всё прекрасно работает.
Сделал подключение кода через систему плагинов, чтобы не вносить изменения в исходник.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants