VBTT - Мод торрент трекера для vBulletin. Скачать движок трекера бесплатно (не tbdev и не torrentpier). Разработка vBulletin Torrent Tracker

VBTT - Мод торрент трекера для vBulletin. Скачать движок трекера бесплатно (не tbdev и не torrentpier). Разработка vBulletin Torrent Tracker (http://www.vbtt.org/index.php)
-   Другие модули для vB (http://www.vbtt.org/forumdisplay.php?f=3)
-   -   Расширенная система повышений для vBulletin (http://www.vbtt.org/showthread.php?t=5)

Skald 21.04.2009 21:04

Расширенная система повышений для vBulletin
 
Вложений: 2
Продукт для расширенной системы повышений для vBulletin.
В стандартной системе повышений нельзя указывать сложные условия для перехода между группами и в коде нет ни одного хука для интеграции дополнительного функционала, поэтому во вложении комплект файлов для необходимых модификаций.

Установка:
1. Импортируем продукт product-yo_xpromote.xml (он в 1251 кодировке, если форум в UTF-8, предварительно конвертим в UTF-8). В продукте всего пару фраз, и все основное - это редактирование основных файлов.
2. upload\includes\xml\hooks_xpromote.xml копируем в includes\xml форума.
3. Изменяем файлы форума admincp\usergroup.php и includes\cron\promotion.php по аналогии с файлами во вложении для 3.7.3 версии форума (upload\admincp\usergroup~org.php - оригинальный файл и upload\admincp\usergroup.php - полученный файл, для promotion.php - аналогично). Описывать детальнее не буду т.к. без проблем найти нужные изменения с помощью WinMerge или любой другой подобной программы.

Пример работы на скринах.

orfo 07.05.2009 01:20

изменил файлы для своей версии, импортировал продукт, создал повышения
использовал условие и расширенную проверку
Цитата:

$joindate AND (($promotion['uploaded']+1) / ($promotion['dowloaded']+1)<0.3) AND $promotion['usergroupid']==2
если изменить условие на Репутация 11, то переносит
p.s. самое важное, использую yo edition 1

Skald 09.05.2009 00:19

Цитата:

Сообщение от orfo (Сообщение 111)
p.s. самое важное, использую yo edition 1

в версии 1.0 нет нужных модулей для расширенного повышения. Модуль легко найти оп названию хука и создать в версии 1.0, но хоть группа и изменится но все равно ограничения для группы работать не будут, так как их в первой версии просто нет.

orfo 09.05.2009 20:54

При выполнении повышений в крон
Цитата:

Parse error: syntax error, unexpected '<' in /var/www/includes/cron/promotion.php(27) : eval()'d code on line 1

Выполнено
содержимое строки 27
Цитата:

$hook_query_fields = $hook_query_joins = $hook_query_where = '';
($hook = vBulletinHook::fetch_hook('xpromote_cron_query_hook')) ? eval($hook) : false;
$promotions = $vbulletin->db->query_read("
все как в файле для примера

Skald 09.05.2009 21:53

xpromote_cron_query_hoo k - должно быть без пробела
а сообщение о синтаксической ошибке в модуле, т.е. для проверки мне нужно содержимое модуля "xpromote_cron_query_hook", которое похоже просто неправильно перенесено в старый продукт.

orfo 10.05.2009 04:08

правильно, неправильно вставил модуль, "должно быть без пробела" это только в этом сообщении.
Скрипт повышений выполняется но повышение (перенос) не производиться
содержимое модуля

Цитата:

$hook_query_fields.=",user.uploaded,user.downloaded";

Skald 10.05.2009 18:12

orfo, Оставьте только ($promotion['uploaded']+1) / ($promotion['dowloaded']+1)<0.3

orfo 10.05.2009 20:08

Skald пробовал, результат такой же

Skald 10.05.2009 20:18

orfo, Вопрос - xml с описанием хука залили на сервер? Потому что если не залили то ничего работать не будет.

orfo 10.05.2009 20:32

да, поправка к предыдущему посту, переносит но всех пользователей полностью, хотя не может быть такого
использовал условие $promotion['uploaded']>=50000000000 перекинул вроде правильно, как бы с ратио это делать

Skald 10.05.2009 20:39

повторяю: Вопрос - xml с описанием хука залили на сервер? Потому что если не залили то ничего работать не будет.

orfo 10.05.2009 20:59

Цитата:

Вопрос - xml с описанием хука залили на сервер?
/includes/xml/hooks_xpromote.xml Да
Цитата:

да, поправка к предыдущему посту, переносит но всех пользователей полностью, хотя не может быть такого.
использовал условие $promotion['uploaded']>=50000000000 перекинул вроде правильно, как бы с ратио это делать

Skald 10.05.2009 22:30

ну можно добавить больше скобочек
((($promotion['uploaded']+1)/($promotion['dowloaded']+1))<0.3)

orfo 12.05.2009 00:25

Спасибо всё работает

Aiser 21.05.2009 12:04

Захотел новичков научить пользоваться разделом тестовый, а то многие не умеют нормально оформлять темы, но упорно игнорируют его. Создал группу продвинутые и перекинул пользователей. Основная стала новички. Для новичков запретил возможность создавать темы в разделах кроме тестовый и болталогии. Теперь настроил повышения: 25 сообщений минимум для переноса, но они могут набить их в болталогии или так. Разумнее проверка по кол-ву созданных тем. Тут и встает вопрос реально ли сделать чтобы можно было выбирать в повышениях ещё и кол-во созданных тем, а ещё лучше с возможностью выбора раздела, т.е. вписать id раздела для проверки.

Skald 21.05.2009 13:24

Цитата:

Сообщение от Aiser (Сообщение 227)
выбирать в повышениях ещё и кол-во созданных тем

Определенно можно, но нужен будет дополнительный модуль с размещением в xpromote_cron_query_hook где будут описываться $hook_query_fields $hook_query_joins $hook_query_where
Если после этого будут нужны еще какие-то операции прямо перед проверкой конкретного повышения то нужен модуль в xpromote_cron_hook (но в случае с темами этот хук скорее всего не понадобится).
Для выбора разделов подойдет forumlist option

Aiser 22.05.2009 18:24

Было бы неплохо, если бы вы сделали повышения учитывающие кол-во созданных тем. Знаний в данной области мало.

Skald 22.05.2009 20:16

Aiser, Это будет отдельный продукт, нагружать дополнительными join-ами продукт повышений не вижу смысла. Могу сделать на заказ, но определенно не бесплатно.

Cyberdaemon 21.09.2009 12:44

На версии форума 3,6,7 будет работать? если да, то что нужно для этого сделать или изменить?

Skald 21.09.2009 18:42

daemonz, Именно эта версия нет. Была где-то старая для 3.6, изменить там всего ничего надо, но вот у меня под рукой нет 3.6 чтобы сказать что именно

banec 23.09.2009 17:22

Вопрос
Extended promotion check
что оно обозначает?
ратио?

Skald 23.09.2009 18:56

Цитата:

Сообщение от banec (Сообщение 1089)
Вопрос
Extended promotion check
что оно обозначает?
ратио?

Это расширенное условие. Для своих условий желательно знание ПХП
Если же знаний нет, то пишите именно так как на скрине (заменив значение ратио на свои цифры)

IVB 28.09.2009 16:35

Вложений: 1
Для тех, кому привычнее работать с утилитами diff и patch \m/ - вот файлик для patch (в аттаче).

В папке, в которую установлен форум, выполнить:

Код:

patch -p0 <patchfile.txt
Будут пропатчены оба файла: usergroup.php и promotion.php

[offtop]

Если кому-то интересно узнать, что это за волшебные утилиты - это Линуксовые утилиты. Первая (diff) создает вот такие файлики - в них содержатся различия между двумя файлами (до внесения исправлений и после). Вторая (patch) позволяет на основе файла различий из оригинального файла получить файл с нужными исправлениями.

Механизм создания файлов различий и внесения изменеий таков, что позволяет вносить изменения даже в тех случаях, когда оригинальные (неисправленные) файлы менялись (кроме тех случаев, когда менялись непосредственно те строки, которые нужно редактировать). Другими словами, файл различий, полученный для версии движка 3.7.3, подходит для версии 3.8.3 (хотя сами файлы usergroup.php и promotion.php в версии 3.8.3 отличаются от версии 3.7.3)

Те же самые diff и patch есть и под Windows

[/offtop]

IVB 29.09.2009 12:50

Вопрос: в какой момент времени выполняется проверка условий? Другими словами - когда срабатывает "повышение"?

Я хочу менять группу пользователя в зависимости от IP адреса, с которого он зашел, и хочу возложить эту задачу на обсуждаемый модуль. Но если "повышения" работают по крону - тогда они могут срабатывать ощутимо позже захода пользователя на форум (и тогда этот способ мне не подойдет)

Skald 29.09.2009 14:08

Цитата:

Сообщение от IVB (Сообщение 1169)
Я хочу менять группу пользователя в зависимости от IP адреса, с которого он зашел, и хочу возложить эту задачу на обсуждаемый модуль. Но если "повышения" работают по крону - тогда они могут срабатывать ощутимо позже захода пользователя на форум (и тогда этот способ мне не подойдет)

Такой способ точно не подойдет.
Повышения отрабатывают по крону, и совсем не часто (раз или 2 раза час)
Есть два варианта решения. Или на лету (в зависимости от ip) подменять права пользователя - это хук cache_permissions (но надо разбираться с системой прав булки)
Или на лету подменять основную группу если зашел с запрещенного ip на группу у которой нет никаких прав в нужных разделах - это хук fetch_userinfo. Для этого можно использовать предопределенные константы булки IPADDRESS и ALT_IP

IVB 29.09.2009 14:11

Цитата:

Сообщение от Skald (Сообщение 1174)
на лету подменять основную группу если зашел с запрещенного ip на группу у которой нет никаких прав в нужных разделах - это хук fetch_userinfo.

О! Спс за наводку. Попробую реализовать. Положительный результат (если, конечно, положительный получится) опубликую.

IVB 01.10.2009 16:56

Реализовал.

alik4277 23.12.2009 18:12

Собственно вопрос по системе повышения:
Хочу поставить данную модификацию на сайт не относящийся к трекеру (http://oblozhki.net) и сделать автоматическое повышение пользователей в группы по колличеству загруженых вложений (чтото типа ТОП100, ТОП1000 и т.д).
Как можено сделать это проще и правильнее

PS: Извиняюсь если не совсем в тему

Skald 24.12.2009 00:16

alik4277, Все в тему. Но для этого понадобится написание одного модуля, т.к. данные о загруженных вложениях хранятся не в базе пользователей (но зато можно использовать хуки, добавляемые расширенной системой повышений).

alik4277 24.12.2009 01:31

я уже тоже думал о модуле, только не знаю какое мостоположение ему выбрать
на чет повышений там ничего нету, или просто cron_start выбрать? Но тогда запросы будут идти при каждом старте крона а это тоже нежелательно.
Или же в ежедневные...

Skald 24.12.2009 17:30

alik4277, Если модуль был установлен полностью, то должен появиться хук xpromote_cron_query_hook где можно использовать переменные $hook_query_fields и $hook_query_joins для задания отбора полей в последующем запросе
и хук xpromote_cron_hook где можно обработать каждого отдельного пользователя.

alik4277 25.12.2009 01:43

Да, теперь когда ты написал я нашел. Как то не догнал сразу посмотреть
Попробую чтонибудь сварганить (хоть и не силен в пхп но продолжать учиться надо)

Добавлено через 49 минут
А какое местоположение модуля лучше выбрать в данном случае:
xpromote_cron_query_hook или xpromote_cron_hook

Skald 25.12.2009 16:39

Цитата:

Сообщение от alik4277 (Сообщение 1723)
А какое местоположение модуля лучше выбрать в данном случае:

скорее всего xpromote_cron_query_hook где можно использовать переменные $hook_query_fields и $hook_query_joins для задания отбора полей в последующем запросе, а именно для получения конкретных данных.

Вот хук xpromote_cron_hook (где можно обработать каждого отдельного пользователя) лучше использовать если необходима какая либо обработка данных, полученных через запрос, перед условием в свойствах повышения.

Drakula 30.12.2009 00:11

После того как импортируеш, зальеш все файлы что надо делать? Создовать группы как на скрине в 1 посте?

Skald 03.01.2010 17:13

Drakula, Файлы надо не просто залить, а отредактировать по образцу оригинальные файлы булки.

Drakula 03.01.2010 18:24

Skald, Угу в курсе. Так и сделал

Skald 04.01.2010 13:35

Цитата:

Сообщение от Drakula (Сообщение 1743)
Угу в курсе. Так и сделал

тогда создать группы и правила как на скрине

alik4277 23.01.2010 20:08

Что то не пойму
Сделал условие: ((($promotion['uploaded'])/($promotion['dowloaded']))>5) AND ($promotion['uploaded'])>214748364800
Ничего не происходит
Пробывал: ((($promotion['uploaded']+1)/($promotion['dowloaded']+1))>5) AND ($promotion['uploaded']+1)>214748364800
переносит но не соблюдается условие AND ($promotion['uploaded']+1)>214748364800

В чем собака порылась?

Skald 23.01.2010 22:20

Не отрабатывает на автомате или даже в ручном режиме через админку?

В первом случае ничего не происходит, потому что с большой вероятностью есть пользователи с 0 в download-е, т.е. деление на 0 (потому и не работает)
Во втором попробовать все взять в скобки
( (($promotion['uploaded']+1)/($promotion['dowloaded']+1))>5 AND ($promotion['uploaded']+1)>214748364800 )

alik4277 23.01.2010 23:05

не отрабатавыет в обоих режимах
в таблице действительно были нули, изменил запросом скачанное и отданное на 10мб всем у кого нули были, взял весь запрос в скобки и все равно такая же лажа
Обратил внимание на перенесенных пользователей: повышение происходит либо по условию 1 либо по условию 2, но оба условия одновременно не выполняются
Половину дня убил на поиск решения и так ничего не нашел


Часовой пояс GMT +3, время: 19:21.

vBulletin® 3.8.1. ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot