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

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

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


В БД, добавить четыре поля, думаю 65тыщ для ограничений достаточно :)
Код SQL:
  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) { добавить
Код PHP:
  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); добавить
Код PHP:
  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', перед передачей в шаблон вставить
Код PHP:
  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" /> добавить
Код HTML:
  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.  
В com_forum_file_reload.tpl после <input type="file" name="fa[]" size="30" /> добавить
Код HTML:
  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.  
В com_forum_attached_files.tpl все содержимое таблицы <table class="fa_file"><tr> заменить на
Код HTML:
  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}" border="0" 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" border="0" /></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" border="0" /></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.10.3 | Модуль "Голосования"
Комментарии (7)
mashen&ka 22 апреля 2014 в 19:09 +1
Супер! Спасибо! Будем пробовать!
Доротея 22 апреля 2014 в 19:24 +1
Может в архивчик всё сделаете? а то непонятненько что и куда прописывать)
Pasha 22 апреля 2014 в 20:12 +5
Сделал... Пользуйтесь.
Су-27 22 апреля 2014 в 20:01 0
Спасибо, плюсуем - Паша как всегда на высоте hoho
eoleg 22 апреля 2014 в 20:57 0
+

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

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