Tickets - лимит загружаемых файлов

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

Вопрос этот уже поднимался дважды разными людьми, в первый раз его все пропустили, во второй произошла небольшая дискуссия, в рамках которой «накостылили» решение на джаваскрипте. Что меня не устроило по двум причинам:
1. библиотека plupload, используемая в скриптах тикетов, априори не имеет функции лимитирования загрузок.
2. всё, что делается на стороне клиента, можно обойти.

Поэтому создал системную настройку с циферкой-лимитом, а потом влез в тикетовый процессор web/upload/file и в методе process() дописал после проверки на дубли:
// Check for files limit
        if ($filesLimit = $this->modx->getOption('tickets.max_files_upload')) {
        	$where = $this->modx->newQuery($this->classKey, array('class' => $this->class));
	        if (!empty($this->ticket->id)) {
	            $where->andCondition(array('parent:IN' => array(0, $this->ticket->id)));
	        } else {
	            $where->andCondition(array('parent' => 0));
	        }
        	$where->andCondition(array('createdby' => $this->modx->user->id));
        	if ($this->modx->getCount($this->classKey, $where) >= $filesLimit) {
        		@unlink($data['tmp_name']);

            	return $this->failure('Вы не можете загрузить больше '.$filesLimit.' файлов');
        	}
        }
и джаваскрипт можно не трогать, и надежнее. И изящнее, на мой взгляд. Теперь что мультизагрузка, что одиночный файл — если грузишь лишнего, появляется стандартно выглядящее сообщение в jGrowl.

Хочется попросить Василия что-то подобное таки включить в будущем в релиз, полезная штука. А то так и останется на уровне костыля :)
mngatoff
05 августа 2017, 23:01
modx.pro
6
1 955
+9

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

Василий Столейков
06 августа 2017, 06:39
+4
Может сделаешь форк на гитхаб Василия?
Думаю так он быстрее рассмотрит включение этого кода в компонент.
Очень нужная вещь!
    Николай Загумённов
    06 августа 2017, 12:55
    +1
    Спасибо! Как раз недавно искал решение такой задачи, нарыл только js вариант =)
      Руслан
      26 сентября 2022, 21:13
      0
      Файл находится /core/components/tickets/processors/web/file/upload.class.php
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        3