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.

Хочется попросить Василия что-то подобное таки включить в будущем в релиз, полезная штука. А то так и останется на уровне костыля :)
06 августа 2017, 02:01    Алексей Бгатов   
5    351 +9

Комментарии (2)

  1. Василий Столейков 06 августа 2017, 06:39 # +4
    Может сделаешь форк на гитхаб Василия?
    Думаю так он быстрее рассмотрит включение этого кода в компонент.
    Очень нужная вещь!
    1. Николай Загумённов 06 августа 2017, 12:55 # +1
      Спасибо! Как раз недавно искал решение такой задачи, нарыл только js вариант =)
      Вы должны авторизоваться, чтобы оставлять комментарии.