Ограничение на загрузку файлов прикрепленных к сообщению форума

+26
2.16K
Сразу прошу прощения у гурманов за инлайн стили и вставленные в лоб тексты, но в данном случае основное внимание уделялось логике, причем поскольку со стороны инициатора этого хака явного указания на те или иные факторы не было, на всякий случай сделал все что можно вытащить от пользователя (в разумных пределах конечно). В результате при прикреплении файла пользователь имеет возможность указать до четырех параметров определяющих возможность скачивания этого файла:
— карма,
— рейтинг,
— кол-во сообщений на форуме
— наличие аватара.

Если интересно читаем инструкцию по установке...


В БД, добавить четыре поля, думаю 65тыщ для ограничений достаточно :)
  1.  
  2. ALTER TABLE `cms_forum_files`
  3. ADD `karma_limit` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
  4. ADD `ratings_limit` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
  5. ADD `message_limit` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
  6. ADD `avatar_limit` TINYINT(1) NOT NULL DEFAULT '0'
  7.  
В model.php
В метод addUpdatePostAttachments, перед foreach ($_FILES['fa']['error'] as $key => $error) { добавить
  1.  
  2. $karma_limit = abs(cmsCore::request('karma_limit', 'int', 0));
  3. $ratings_limit = abs(cmsCore::request('ratings_limit', 'int', 0));
  4. $message_limit = abs(cmsCore::request('message_limit', 'int', 0));
  5. $avatar_limit = cmsCore::request('avatar_limit', 'int', 0);
  6. if($karma_limit > 50000) $karma_limit = 50000;
  7. if($ratings_limit > 50000) $ratings_limit = 50000;
  8. if($message_limit > 50000) $message_limit = 50000;
  9.  
И чуть ниже, после $result['filename'] = $this->inDB->escape_string($file); добавить
  1.  
  2. $result['karma_limit'] = $karma_limit;
  3. $result['ratings_limit'] = $ratings_limit;
  4. $result['message_limit'] = $message_limit;
  5. $result['avatar_limit'] = $avatar_limit;
  6.  
Во frontend.php
В $do=='thread' и в $do=='reloadfile', перед передачей в шаблон вставить
  1.  
  2. $user = array(
  3. 'id' => $inUser->id,
  4. 'avatar' => $inUser->orig_imageurl,
  5. 'karma' => $inUser->karma,
  6. 'rating' => $inUser->rating,
  7. 'messages' => $model->getUserPostsCount($inUser->id)
  8. );
  9.  
И соответственно передать в шаблоны — assign('user', $user)

В com_forum_add.tpl после <input type="file" name="fa[]" id="upfile" size="30" /> добавить
  1.  
  2. <fieldset style="margin:10px 0;padding:10px;border:1px solid #777">
  3. <legend style="padding:2px 5px">Вы можете установить ограничения на загрузку файла заполнив одно или несколько полей ниже:</legend>
  4. <ul style="margin:0;padding:0;list-style:circle">
  5. <li>Карма пользователя не менее:<input name="karma_limit" type="text" class="text-input" value="0" style="width:40px;margin-left:20px" /></li>
  6. <li style="margin-top:4px;margin-bottom:4px">Рейтинг пользователя не менее:<input name="ratings_limit" type="text" class="text-input" value="0" style="width:40px;margin-left:12px" /></li>
  7. <li style="margin-bottom:4px">Сообщений на форуме не менее:<input name="message_limit" type="text" class="text-input" value="0" style="width:40px;margin-left:5px" /></li>
  8. <li><label>Наличие аватара <input type="checkbox" name="avatar_limit" value="1" /></label></li>
  9. </ul>
  10. </fieldset>
  11.  
В com_forum_file_reload.tpl после <input type="file" name="fa[]" size="30" /> добавить
  1.  
  2. <fieldset style="margin:10px 0;padding:10px;border:1px solid #777">
  3. <legend style="padding:2px 5px">Ограничения на загрузку файла:</legend>
  4. <ul style="margin:0;padding:0;list-style:circle">
  5. <li>Карма пользователя не менее:<input name="karma_limit" type="text" class="text-input" value="{$file.karma_limit}" style="width:40px;margin-left:20px" /></li>
  6. <li style="margin-top:4px;margin-bottom:4px">Рейтинг пользователя не менее:<input name="ratings_limit" type="text" class="text-input" value="{$file.ratings_limit}" style="width:40px;margin-left:12px" /></li>
  7. <li style="margin-bottom:4px">Сообщений на форуме не менее:<input name="message_limit" type="text" class="text-input" value="{$file.message_limit}" style="width:40px;margin-left:5px" /></li>
  8. <li><label>Наличие аватара <input type="checkbox" name="avatar_limit" value="1" {if $file.avatar_limit}checked="checked"{/if} /></label></li>
  9. </ul>
  10. </fieldset>
  11.  
В com_forum_attached_files.tpl все содержимое таблицы <table class="fa_file"><tr> заменить на
  1.  
  2. {if !$user.id && ($attached_file.karma_limit || $attached_file.ratings_limit || $attached_file.message_limit || $attached_file.avatar_limit)}
  3. <td>
  4. <div class="fa_attach_title" style="color:#a00">
  5. Файл доступен только авторизованным пользователям
  6. </div>
  7. </td>
  8. {elseif (!$is_admin && !$is_moder && !$post.is_author_can_edit) && (($attached_file.karma_limit && ($attached_file.karma_limit > $user.karma)) || ($attached_file.ratings_limit && ($attached_file.ratings_limit > $user.rating)) || ($attached_file.message_limit && ($attached_file.message_limit > $user.messages)) || ($attached_file.avatar_limit && !$user.avatar))}
  9. <td>
  10. <div class="fa_attach_title" style="color:#a00">
  11. Для загрузки файла вам необходимо иметь {if $attached_file.karma_limit && ($attached_file.karma_limit > $user.karma)}карму не ниже {$attached_file.karma_limit} (сейчас у вас {$user.karma}){/if} {if $attached_file.ratings_limit && ($attached_file.ratings_limit > $user.rating)}рейтинг не ниже {$attached_file.ratings_limit} (сейчас у вас {$user.rating}){/if} {if $attached_file.message_limit && ($attached_file.message_limit > $user.messages)}не менее {$attached_file.message_limit} сообщений на форуме (сейчас у вас {$user.messages}){/if} {if $attached_file.avatar_limit}аватар{/if}
  12. </div>
  13. </td>
  14. {else}
  15. {if $attached_file.is_img}
  16. <td><img src="/upload/forum/post{$post.id}/{$attached_file.filename|escape:html}" width="130" /></td>
  17. {else}
  18. <td width="16">{$attached_file.icon}</td>
  19. {/if}
  20. <td>
  21. <a class="fa_file_link" href="/forum/download{$attached_file.id}.html">{$attached_file.filename}</a> | <span class="fa_file_desc">{$attached_file.filesize_kb} {$LANG.KBITE} | {$LANG.DOWNLOADED}: {$attached_file.hits|spellcount:$LANG.COUNT1:$LANG.COUNT2:$LANG.COUNT1}</span>
  22. {if $is_admin || $is_moder || $post.is_author_can_edit}
  23. <a href="javascript:" title="{$LANG.RELOAD_FILE}" onclick="forum.reloadFile('{$attached_file.id}');"><img src="/images/icons/reload.gif" /></a>
  24. <a href="javascript:" title="{$LANG.DELETE_FILE}" onclick="forum.deleteFile('{$attached_file.id}', '{csrf_token}', {$post.id});"><img src="/images/icons/delete.gif" /></a>
  25. {/if}
  26. </td>
  27. {if $is_admin || $is_moder || $post.is_author_can_edit}
  28. <tr>
  29. <td colspan="2">
  30. <div class="fa_attach_title" style="color:#a00;border-top:1px solid #d00">
  31. Текущие ограничения на загрузку - {if $attached_file.avatar_limit}наличие аватара,{/if} карма не ниже {$attached_file.karma_limit}, рейтинг не ниже {$attached_file.ratings_limit} и не менее {$attached_file.message_limit} сообщений на форуме.
  32. </div>
  33. </td>
  34. </tr>
  35. {/if}
  36. {/if}
  37.  
Это все. Сделано и проверено лично на версии 1.10.3, сообщения о возможных косяках принимаются.

UPD. Архив с измененными файлами, освобождающий от утомительного труда по переносу кода. (источник архива — только что скачанная официальная версия движка версии !.10.3).
Не забывайте, что просто замены файлов недостаточно, чтобы все это заработало необходимо выполнить запрос в БД
+1
mashen&ka mashen&ka 10 лет назад #
Супер! Спасибо! Будем пробовать!
+1
Доротея Доротея 10 лет назад #
Может в архивчик всё сделаете? а то непонятненько что и куда прописывать)
+5
Pasha Pasha 10 лет назад #
Сделал... Пользуйтесь.
0
Су-27 Су-27 10 лет назад #
Спасибо, плюсуем - Паша как всегда на высоте hoho
0
eoleg eoleg 10 лет назад #
+

- карма,
- рейтинг,
- кол-во сообщений на форуме
- наличие аватара.

ну и в коде можно уже самому придумать зависимости и добавить их.
0
eoleg eoleg 10 лет назад #
В результате при прикреплении файла пользователь имеет возможность указать до четырех параметров определяющих возможность скачивания этого файла
===============================
Тоесть определяет закачивающий, а по умолчанию для всех установить есть возможность?
Не хочу устанавливать чтобы проверить, кто установил сообщите?
0
Андрей Андрей 10 лет назад #
кто бы сделал настройки для загружаемых на сервер фотографий через доп. поля

Еще от автора

Случайный аватар при регистации
Навеяно темой про аватары😊Плагин предназначен для версии 1.10.
Виджет "Хронограф"
Легкое приложение позволяющее создавать и выводить календарь памятных дат или любых иных событий. ЧАВО: 1.
Поле "Прикрепленный опрос"
Позволяет прикреплять к любому типу контента опрос или голосование, называйте это как хотите.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.