Tickets - лимит загружаемых файлов
Видимо, в большинстве случаев не возникает такая надобность, так как компоненту много лет, но функции ограничения загружаемых в один тикет файлов так и не появлось. Однако мне не первый раз попадается такая хотелка от клиента.
Вопрос этот уже поднимался дважды разными людьми, в первый раз его все пропустили, во второй произошла небольшая дискуссия, в рамках которой «накостылили» решение на джаваскрипте. Что меня не устроило по двум причинам:
1. библиотека plupload, используемая в скриптах тикетов, априори не имеет функции лимитирования загрузок.
2. всё, что делается на стороне клиента, можно обойти.
Поэтому создал системную настройку с циферкой-лимитом, а потом влез в тикетовый процессор web/upload/file и в методе process() дописал после проверки на дубли:
Хочется попросить Василия что-то подобное таки включить в будущем в релиз, полезная штука. А то так и останется на уровне костыля :)
Вопрос этот уже поднимался дважды разными людьми, в первый раз его все пропустили, во второй произошла небольшая дискуссия, в рамках которой «накостылили» решение на джаваскрипте. Что меня не устроило по двум причинам:
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.Хочется попросить Василия что-то подобное таки включить в будущем в релиз, полезная штука. А то так и останется на уровне костыля :)
Комментарии: 3
Может сделаешь форк на гитхаб Василия?
Думаю так он быстрее рассмотрит включение этого кода в компонент.
Очень нужная вещь!
Думаю так он быстрее рассмотрит включение этого кода в компонент.
Очень нужная вещь!
Спасибо! Как раз недавно искал решение такой задачи, нарыл только js вариант =)
Файл находится /core/components/tickets/processors/web/file/upload.class.php
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.