Tickets 1.9.4

Приветствую всех следящих за судьбой компонента. В преддверии нового года поздравляю всех с наступающим годом Пятачка и желаю не свинячить в исходниках ;)

Глобальных нововведений нет, а список исправлений прикладываю ниже:

  • Не всегда сохранялись properties раздела тикетов (вкладки дочерние тикеты, рейтинги), исправлено. (источник)
  • Добавлено сохранение состояния галочки «очистить кеш» при обновлении раздела тикетов. (источник)
  • Мб и не совсем баг, но неочевидное UX поведение — ранее при загрузке файлов на фронте через TicketForm до прикрепления к тикету (parent = 0) они показывались в файлах и могли прикрепиться к другому тикету этого юзера в режиме редактирования. Изменена логика — теперь загруженные файлы при создании тикета не будут показываться и сохраняться для других тикетов в режиме редактирования. (источник @snyadanak)
Обновление уже в modstore.pro
tolanych
30 декабря 2018, 03:13
modx.pro
1
1 761
+14
Поблагодарить автора Отправить деньги

Комментарии: 18

Семён Кудрявцев
30 декабря 2018, 10:17
+2
Красавчик, tolanych.
Дал вторую жизнь компоненту, респект!
С наступающим!
    Сергей Лим
    01 января 2019, 23:55
    0
    Ошибка при установке

    Could not create table `***_tickets_threads` SQL: CREATE TABLE `nhk_tickets_threads` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `resource` INT(10) unsigned NOT NULL DEFAULT '0', `name` VARCHAR(255) NOT NULL DEFAULT '', `subscribers` TEXT NOT NULL, `createdon` DATETIME NULL, `createdby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `closed` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deleted` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deletedon` DATETIME NULL, `deletedby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `comment_last` INT(10) unsigned NOT NULL DEFAULT '0', `comment_time` DATETIME NULL, `comments` INT(10) unsigned NULL DEFAULT '0', `properties` TEXT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`), INDEX `resource` (`resource`), INDEX `comment_last` (`comment_last`), INDEX `comments` (`comments`), INDEX `closed` (`closed`)) ENGINE=InnoDB ERROR: Array ( [0] => 42000 [1] => 1071 [2] => Specified key was too long; max key length is 767 bytes )
      tolanych
      02 января 2019, 00:19
      +1
      Предлагаю нагуглить причину и решение по тексту ошибки — «Specified key was too long; max key length is 767 bytes» :)

      По тому, что нагуглил я, есть предположение, что либо сервер древний с жесткими лимитами, либо кодировка БД стоит utf8mb4. Если ни то, ни другое, нужно дополнительное обследование пациента (чистая установка modx, tickets и т.д.)
        Дмитрий Иванов
        03 января 2019, 12:31
        0
        Что плохого в utf8mb4? Это дефолт сейчас для modx, да и вообще везде. Если тикетс с ней не работает, то это печаль.
          tolanych
          03 января 2019, 14:25
          0
          utf8mb4 не плох, и отказываться от него не обязательно. Есть вариант — обновить версию mySQL, где лимит индекса увеличен, подкрутить конфиг (https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_large_prefix) и дальше невозбранно пользоваться utf8mb4. Просто это уже направление к сисдамину/хостеру или кто там настраивает сервер. А вариант со сменой на обычный utf8 — это то, что и рядовому кодеру подвластно.
            Дмитрий Иванов
            03 января 2019, 15:43
            +2
            Думаю, что правильнее тикетс «подкрутить», чтобы все работало везде, чем менять людям хостинги, у кого не свой сервер.
          Сергей Лим
          05 января 2019, 16:32
          0
          utf8mb4. Так что делать то?
            tolanych
            05 января 2019, 19:08
            0
            Обновить на сервере mySQL до 5.7 и выше и включить опцию innodb_large_prefix.
            Либо сменить кодировку БД на обычный utf8.
              Степан Прищепенко
              18 января 2019, 11:34
              0
              Создай вручную таблицу, длина поля name максимум 64 в этом случае

              CREATE TABLE `modx_tickets_threads` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `resource` INT(10) unsigned NOT NULL DEFAULT '0', `name` VARCHAR(64) NOT NULL DEFAULT '', `subscribers` TEXT NOT NULL, `createdon` DATETIME NULL, `createdby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `closed` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deleted` TINYINT(1) unsigned NOT NULL DEFAULT '0', `deletedon` DATETIME NULL, `deletedby` INTEGER(10) unsigned NOT NULL DEFAULT '0', `comment_last` INT(10) unsigned NOT NULL DEFAULT '0', `comment_time` DATETIME NULL, `comments` INT(10) unsigned NULL DEFAULT '0', `properties` TEXT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`), INDEX `resource` (`resource`), INDEX `comment_last` (`comment_last`), INDEX `comments` (`comments`), INDEX `closed` (`closed`)) ENGINE=InnoDB
        Сергей Шлоков
        15 января 2019, 08:43
        0
        Небольшой баг. Список тикетов в админке при первой загрузке (хоть в компоненте, хоть в документе TicketSection) вызывается с сортировкой по id.
        class TicketGetListProcessor extends modObjectGetListProcessor
        {
            public $classKey = 'Ticket';
            public $defaultSortField = 'id';
            public $defaultSortDirection = 'DESC';
        При работе с пагинацией (вперёд, назад, обновить), сортировка по createdon.
          mngatoff
          26 января 2019, 20:50
          0
          привет! есть способ заставить тикетс НЕ регистрировать свои JS? вообще, даже конфиги
            tolanych
            27 января 2019, 14:28
            1
            0
            Не очень понял, что нужно и какие цели преследуются.
            Чтобы не регистрировались js — не вызывай сниппет, а просто рисуй форму, которая нужна.

            Либо пример как достичь такого эффекта с вызовом сниппета getTicket:
            начальные строки его заменить на:
            $Tickets = $modx->getService('tickets', 'Tickets', $modx->getOption('tickets.core_path', null,
                    $modx->getOption('core_path') . 'components/tickets/') . 'model/tickets/', $scriptProperties);
            $Tickets->initialized['web'] = true;
            $Tickets->initialize($modx->context->key, $scriptProperties);
            и системные настройки tickets.frontend_css, tickets.frontend_js сделать пустыми
              mngatoff
              28 января 2019, 12:55
              0
              спасибо! про настройки знаю, но без них все равно регистрируется TicketsConfig. А цель в том, чтобы его самому формировать.

              так что пример кода с $Tickets->initialized['web'] = true — самое то, что нужно:)

              вопрос: если такое единожды сделать где-нибудь в шапке, каждый сниппет Tickets будет заново инициализировать? или учтет, что он уже инициализован
                tolanych
                28 января 2019, 14:56
                0
                Учтет, что уже инциализрован, но в каждом сниппете нужно индивидуально смотреть. В теории всё хорошо, на практике есть ньюансы. Например после вызова сниппета GetTicket вызову сниппет TicketForm и он еще внутри себя подключает web/files.js и TicketsConfig.source, поэтому если есть потребность отрубить что-то на корню, лучше скопируй сниппеты, прочитай исходники и подправь под свою задачу.

                По феншую в твоем случае лучше вообще доработать сам тикетс и добавить в качестве настройки возможность задавать кастомный TicketsConfig
                  mngatoff
                  28 января 2019, 15:13
                  0
                  так и делал, надоели танцы с обновлениями, пытаюсь не лезть в ядро
            Alexander V
            11 февраля 2019, 22:16
            0
            Стандартное оформление сейчас на Bootstrap 3 или изменили на 4?
              Василий Столейков
              15 февраля 2019, 08:33
              0
              Было бы неплохо ещё на страницу тикета добавить кнопки управления как в товарах минишопа: «Предыдущий» и «Следующий» стрелками.
              Сейчас, учитывая что тикеты по умолчанию спрятаны из дерева, приходится возвращаться в секцию, потом искать соседний тикет по памяти и переходить в него.
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                18