Tickets 1.9.4

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

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

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

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

Sem
Sem
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.
Алексей Бгатов
26 января 2019, 20:50
0
привет! есть способ заставить тикетс НЕ регистрировать свои JS? вообще, даже конфиги
    tolanych
    27 января 2019, 14:28
    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 сделать пустыми
      Алексей Бгатов
      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
          Алексей Бгатов
          28 января 2019, 15:13
          0
          так и делал, надоели танцы с обновлениями, пытаюсь не лезть в ядро
Alexander V
11 февраля 2019, 22:16
0
Стандартное оформление сейчас на Bootstrap 3 или изменили на 4?
Василий Столейков
15 февраля 2019, 08:33
0
Было бы неплохо ещё на страницу тикета добавить кнопки управления как в товарах минишопа: «Предыдущий» и «Следующий» стрелками.
Сейчас, учитывая что тикеты по умолчанию спрятаны из дерева, приходится возвращаться в секцию, потом искать соседний тикет по памяти и переходить в него.