instantsoft / icms2

Self-hosted Site Management System
https://instantcms.ru
GNU General Public License v2.0
294 stars 120 forks source link

Не работают смайлы в личных сообщениях #1189

Closed geminisf closed 4 years ago

geminisf commented 4 years ago

Используемая версия InstantCMS: 2.13.1

Версия PHP: 7.2.27

Как воспроизвести проблему:

  1. Создать пресет для редактора "Markitup".
  2. Выбрать этот пресет в качестве редактора HTML в компоненте "Личные сообщения".
  3. Попробовать отправить личное сообщение со смайлами.

Воспроизводится ли проблема на демо http://demo.instantcms.ru/: На демо сайте нет возможности отправлять личные сообщения.

Пока выявились следующие закономерности. Если в качестве редактора HTML в компоненте "Личные сообщения" выбрать не пресет, а просто "Markitup", то смайлы работают. Также смайлы работают в компоненте "Комментарии", даже если выбран пресет. Проверял на свежеустановленной локальной версии.

Risgit commented 4 years ago

Проблема в том, что в экшене \system\controllers\messages\actions\send.php прописано буквально так:

$is_textarea_editor = !$this->options['editor'] || $this->options['editor'] == 'markitup';

$content_html = cmsEventsManager::hook('html_filter', [
            'text' => $content,
            'is_auto_br' => $is_textarea_editor,
            'build_smiles' => $is_textarea_editor
        ]);

То есть если в личных сообщениях выбран маркитап - в опциях прямо буквами будет написано markitup и смайлы будут. А вот если выбран какой-либо пресет, сделанный из маркитапа - в опциях будет цифра и никаких смайлов не будет. Возможное решение - получить имя редактора и проверять уже его:

$wysiwygs_preset = is_numeric($this->options['editor']) ? $this->controller_wysiwygs->getEditorParams($options = [$this->options['editor']]) : $this->options['editor'];

$is_textarea_editor = !$this->options['editor'] || $wysiwygs_preset == 'markitup';

$content_html = cmsEventsManager::hook('html_filter', [
            'text' => $content,
            'is_auto_br' => $is_textarea_editor,
            'build_smiles' => $is_textarea_editor
        ]);