Форум vBTorrents.org

Форум vBTorrents.org (https://vbtorrents.org/index.php)
-   Хаки, моды и скрипты для vBulletin (https://vbtorrents.org/forumdisplay.php?f=3)
-   -   Расширенная система повышений для vBulletin (https://vbtorrents.org/showthread.php?t=5)

Skald 21.04.2009 22: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 02: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 01:19

Цитата:

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

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

orfo 09.05.2009 21: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 22:53

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

orfo 10.05.2009 05:08

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

Цитата:

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

Skald 10.05.2009 19:12

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

orfo 10.05.2009 21:08

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

Skald 10.05.2009 21:18

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

orfo 10.05.2009 21:32

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

Skald 10.05.2009 21:39

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

orfo 10.05.2009 21:59

Цитата:

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

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

Skald 10.05.2009 23:30

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

orfo 12.05.2009 01:25

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

Aiser 21.05.2009 13:04

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

Skald 21.05.2009 14: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 19:24

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

Skald 22.05.2009 21:16

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

Cyberdaemon 21.09.2009 13:44

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

Skald 21.09.2009 19:42

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

banec 23.09.2009 18:22

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

Skald 23.09.2009 19:56

Цитата:

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

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

IVB 28.09.2009 17: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 13:50

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

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

Skald 29.09.2009 15:08

Цитата:

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

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

IVB 29.09.2009 15:11

Цитата:

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

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

IVB 01.10.2009 17:56

Реализовал.

alik4277 23.12.2009 19:12

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

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

Skald 24.12.2009 01:16

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

alik4277 24.12.2009 02:31

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

Skald 24.12.2009 18:30

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

alik4277 25.12.2009 02:43

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

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

Skald 25.12.2009 17:39

Цитата:

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

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

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

Drakula 30.12.2009 01:11

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

Skald 03.01.2010 18:13

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

Drakula 03.01.2010 19:24

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

Skald 04.01.2010 14:35

Цитата:

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

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

alik4277 23.01.2010 21: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 23:20

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

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

alik4277 24.01.2010 00:05

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


Текущее время: 01:11. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.4 Patch Level 6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot