Сразу прошу прощения у гурманов за инлайн стили и вставленные в лоб тексты, но в данном случае основное внимание уделялось логике, причем поскольку со стороны инициатора этого хака явного указания на те или иные факторы не было, на всякий случай сделал все что можно вытащить от пользователя (в разумных пределах конечно). В результате при прикреплении файла пользователь имеет возможность указать до четырех параметров определяющих возможность скачивания этого файла:
— карма,
— рейтинг,
— кол-во сообщений на форуме
— наличие аватара.
Если интересно читаем инструкцию по установке...
В БД, добавить четыре поля, думаю 65тыщ для ограничений достаточно :)
В model.php
В метод addUpdatePostAttachments, перед foreach ($_FILES['fa']['error'] as $key => $error) { добавить
И чуть ниже, после $result['filename'] = $this->inDB->escape_string($file); добавить
Во frontend.php
В $do=='thread' и в $do=='reloadfile', перед передачей в шаблон вставить
И соответственно передать в шаблоны — assign('user', $user)
В com_forum_add.tpl после <input type="file" name="fa[]" id="upfile" size="30" /> добавить
В com_forum_file_reload.tpl после <input type="file" name="fa[]" size="30" /> добавить
В com_forum_attached_files.tpl все содержимое таблицы <table class="fa_file"><tr> заменить на
Это все. Сделано и проверено лично на версии 1.10.3, сообщения о возможных косяках принимаются.
UPD. Архив с измененными файлами, освобождающий от утомительного труда по переносу кода. (источник архива — только что скачанная официальная версия движка версии !.10.3).
Не забывайте, что просто замены файлов недостаточно, чтобы все это заработало необходимо выполнить запрос в БД
— карма,
— рейтинг,
— кол-во сообщений на форуме
— наличие аватара.
Если интересно читаем инструкцию по установке...
В БД, добавить четыре поля, думаю 65тыщ для ограничений достаточно :)
ALTER TABLE `cms_forum_files` ADD `karma_limit` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', ADD `ratings_limit` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', ADD `message_limit` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', ADD `avatar_limit` TINYINT(1) NOT NULL DEFAULT '0'
В метод addUpdatePostAttachments, перед foreach ($_FILES['fa']['error'] as $key => $error) { добавить
$avatar_limit = cmsCore::request('avatar_limit', 'int', 0); if($karma_limit > 50000) $karma_limit = 50000; if($ratings_limit > 50000) $ratings_limit = 50000; if($message_limit > 50000) $message_limit = 50000;
$result['karma_limit'] = $karma_limit; $result['ratings_limit'] = $ratings_limit; $result['message_limit'] = $message_limit; $result['avatar_limit'] = $avatar_limit;
В $do=='thread' и в $do=='reloadfile', перед передачей в шаблон вставить
'id' => $inUser->id, 'avatar' => $inUser->orig_imageurl, 'karma' => $inUser->karma, 'rating' => $inUser->rating, 'messages' => $model->getUserPostsCount($inUser->id) );
В com_forum_add.tpl после <input type="file" name="fa[]" id="upfile" size="30" /> добавить
<fieldset style="margin:10px 0;padding:10px;border:1px solid #777"> <legend style="padding:2px 5px">Вы можете установить ограничения на загрузку файла заполнив одно или несколько полей ниже:</legend> <ul style="margin:0;padding:0;list-style:circle"> <li>Карма пользователя не менее:<input name="karma_limit" type="text" class="text-input" value="0" style="width:40px;margin-left:20px" /></li> <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> <li style="margin-bottom:4px">Сообщений на форуме не менее:<input name="message_limit" type="text" class="text-input" value="0" style="width:40px;margin-left:5px" /></li> <li><label>Наличие аватара <input type="checkbox" name="avatar_limit" value="1" /></label></li> </ul> </fieldset>
<fieldset style="margin:10px 0;padding:10px;border:1px solid #777"> <legend style="padding:2px 5px">Ограничения на загрузку файла:</legend> <ul style="margin:0;padding:0;list-style:circle"> <li>Карма пользователя не менее:<input name="karma_limit" type="text" class="text-input" value="{$file.karma_limit}" style="width:40px;margin-left:20px" /></li> <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> <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> <li><label>Наличие аватара <input type="checkbox" name="avatar_limit" value="1" {if $file.avatar_limit}checked="checked"{/if} /></label></li> </ul> </fieldset>
{if !$user.id && ($attached_file.karma_limit || $attached_file.ratings_limit || $attached_file.message_limit || $attached_file.avatar_limit)} <td> <div class="fa_attach_title" style="color:#a00"> Файл доступен только авторизованным пользователям </div> </td> {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))} <td> <div class="fa_attach_title" style="color:#a00"> Для загрузки файла вам необходимо иметь {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} </div> </td> {else} {if $attached_file.is_img} <td><img src="/upload/forum/post{$post.id}/{$attached_file.filename|escape:html}" width="130" /></td> {else} <td width="16">{$attached_file.icon}</td> {/if} <td> <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> {if $is_admin || $is_moder || $post.is_author_can_edit} <a href="javascript:" title="{$LANG.RELOAD_FILE}" onclick="forum.reloadFile('{$attached_file.id}');"><img src="/images/icons/reload.gif" /></a> <a href="javascript:" title="{$LANG.DELETE_FILE}" onclick="forum.deleteFile('{$attached_file.id}', '{csrf_token}', {$post.id});"><img src="/images/icons/delete.gif" /></a> {/if} </td> {if $is_admin || $is_moder || $post.is_author_can_edit} <tr> <td colspan="2"> <div class="fa_attach_title" style="color:#a00;border-top:1px solid #d00"> Текущие ограничения на загрузку - {if $attached_file.avatar_limit}наличие аватара,{/if} карма не ниже {$attached_file.karma_limit}, рейтинг не ниже {$attached_file.ratings_limit} и не менее {$attached_file.message_limit} сообщений на форуме. </div> </td> </tr> {/if} {/if}
UPD. Архив с измененными файлами, освобождающий от утомительного труда по переносу кода. (источник архива — только что скачанная официальная версия движка версии !.10.3).
Не забывайте, что просто замены файлов недостаточно, чтобы все это заработало необходимо выполнить запрос в БД
Реклама #
mashen&ka 10 лет назад #
Доротея 10 лет назад #
Pasha 10 лет назад #
Су-27 10 лет назад #
eoleg 10 лет назад #
- карма,
- рейтинг,
- кол-во сообщений на форуме
- наличие аватара.
ну и в коде можно уже самому придумать зависимости и добавить их.
eoleg 10 лет назад #
===============================
Тоесть определяет закачивающий, а по умолчанию для всех установить есть возможность?
Не хочу устанавливать чтобы проверить, кто установил сообщите?
Андрей 10 лет назад #