smallcms
NoDeny
Старожил
Карма: 64
Offline
Сообщений: 279
|
|
« Ответ #15 : 27 Августа 2010, 13:31:39 » |
|
UPDATE `bill`.`users` SET `paket` = '1' WHERE mid = 0 && `state` = "off" && `balance`<`limit_balance` И как это теперь периодически стартовать? #!/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin passwd_root_mysql=`perl -e'require "/usr/local/nodeny/history.nod"; print $sql_root_pass;'` mysql_cmd='/usr/local/bin/mysql'
SQL='UPDATE `bill`.`users` SET `paket` = "1" WHERE `mid` =0 && `state` = "off" && `balance`<`limit_balance`' echo $SQL | ${mysql_cmd} -u root --password=${passwd_root_mysql} bill Но это не панацея, т.к. не затрагиваются алиасы. Думаю написать на перле который будет "работать в лог" и алиасы записи.
|
|
|
Записан
|
|
|
|
stix
NoDeny
Спец
Карма: 72
Offline
Сообщений: 1872
Nodeny Support Team
|
|
« Ответ #16 : 27 Августа 2010, 13:43:48 » |
|
UPDATE `bill`.`users` SET `paket` = '1' WHERE mid = 0 && `state` = "off" && `balance`<`limit_balance` И как это теперь периодически стартовать? #!/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin passwd_root_mysql=`perl -e'require "/usr/local/nodeny/history.nod"; print $sql_root_pass;'` mysql_cmd='/usr/local/bin/mysql'
SQL='UPDATE `bill`.`users` SET `paket` = "1" WHERE `mid` =0 && `state` = "off" && `balance`<`limit_balance`' echo $SQL | ${mysql_cmd} -u root --password=${passwd_root_mysql} bill Но это не панацея, т.к. не затрагиваются алиасы. Думаю написать на перле который будет "работать в лог" и алиасы записи. можно добавить еще sql_database в скрипт
|
|
|
Записан
|
|
|
|
Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« Ответ #17 : 28 Августа 2010, 08:24:22 » |
|
Спасибо, скрипт работает. Но это не панацея, т.к. не затрагиваются алиасы. Думаю написать на перле который будет "работать в лог" и алиасы записи. Ну, это совсем уже шикарно будет. Алиасов у меня не много, но фича, думаю, понравится многим. Особенно, если будет запоминаться предыдущий тариф и после пополнения счета будет возвращаться.
|
|
|
Записан
|
|
|
|
Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« Ответ #18 : 09 Сентября 2010, 20:41:17 » |
|
Кстати, алиасы затрагиваются После блокирования основной учетки, система через какое-то время автоматом блокирует и алиасы, записывая в лог что-то типа "обнаружена заблокированная запись с назаблокированными алиасами, блокирую алиасы.... ", ну смысл понятен
|
|
|
Записан
|
|
|
|
ale-x
NoDeny
Постоялец
Карма: 1
Offline
Сообщений: 164
|
|
« Ответ #19 : 09 Сентября 2010, 20:50:50 » |
|
Отличный скрипт - то что нужно!
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #20 : 18 Сентября 2010, 01:16:40 » |
|
Строка #1085 nodeny.pl Добавь в условие выборки: balance >= limit_balanceПолучится вот так: $sql="SELECT id FROM users WHERE balance >= limit_balance and mid=0 AND paket=$i AND id NOT IN ". "(SELECT u.id FROM users u LEFT JOIN pays p ON u.id=p.mid WHERE u.paket=$i and p.category=114 AND time>=$t1 AND time<=$t2)";
Все это только при условии суточной абонплаты! Думаю, что с другими платежами тоже можно управиться без изврата в виде скрипта по крону
|
|
|
Записан
|
|
|
|
smallcms
NoDeny
Старожил
Карма: 64
Offline
Сообщений: 279
|
|
« Ответ #21 : 18 Сентября 2010, 17:21:56 » |
|
Строка #1085 nodeny.pl Добавь в условие выборки: balance >= limit_balanceПолучится вот так: $sql="SELECT id FROM users WHERE balance >= limit_balance and mid=0 AND paket=$i AND id NOT IN ". "(SELECT u.id FROM users u LEFT JOIN pays p ON u.id=p.mid WHERE u.paket=$i and p.category=114 AND time>=$t1 AND time<=$t2)";
Все это только при условии суточной абонплаты! Думаю, что с другими платежами тоже можно управиться без изврата в виде скрипта по крону Весьма неплохой вариант. И даже не нужно переключать человека в заблокированные
|
|
|
Записан
|
|
|
|
smallcms
NoDeny
Старожил
Карма: 64
Offline
Сообщений: 279
|
|
« Ответ #22 : 18 Сентября 2010, 19:49:20 » |
|
Похоже, что чтобы выкинуть подобный финт для месячных абонплат скрипт new_month.pl нужно подправить в ~250 строке так: $sql="SELECT * FROM users WHERE mid=0 and balance >= limit_balance"; По крайней мере при тестовой выборке прокатывает
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #23 : 19 Сентября 2010, 00:49:49 » |
|
Похоже, что чтобы выкинуть подобный финт для месячных абонплат скрипт new_month.pl нужно подправить в ~250 строке так: $sql="SELECT * FROM users WHERE mid=0 and balance >= limit_balance"; По крайней мере при тестовой выборке прокатывает Совершено верно! в 250 строке
|
|
|
Записан
|
|
|
|
Eugene
NoDeny
Пользователь
Карма: 0
Offline
Сообщений: 50
|
|
« Ответ #24 : 31 Октября 2010, 23:39:31 » |
|
Очень странно, сегодня решили перевести по этой модификации. Никого не заблокировало, клиенты, у кого 0 на счету и были итак отлючены ушли ещё глубже в минус...
Так как же сделать так, что бы отключённые пользователи на баллансе всегда имели не ниже 0?
|
|
« Последнее редактирование: 31 Октября 2010, 23:53:49 от Eugene »
|
Записан
|
|
|
|
Eugene
NoDeny
Пользователь
Карма: 0
Offline
Сообщений: 50
|
|
« Ответ #25 : 01 Ноября 2010, 00:49:34 » |
|
Разобрались, в абон. плате нужно было новому клиенту ставить -1 в лимите, там же и равняется лимит....
|
|
|
Записан
|
|
|
|
smallcms
NoDeny
Старожил
Карма: 64
Offline
Сообщений: 279
|
|
« Ответ #26 : 01 Ноября 2010, 01:09:29 » |
|
Очень странно, сегодня решили перевести по этой модификации. Никого не заблокировало, клиенты, у кого 0 на счету и были итак отлючены ушли ещё глубже в минус...
Так как же сделать так, что бы отключённые пользователи на баллансе всегда имели не ниже 0?
Видимо у Вас авторизатор стоит или типа того. Доп. проверкой имхо можно избавиться от ложных съёмов баланса: примерно в 211 строке: $sth=&sql("SELECT DISTINCT id FROM users WHERE id IN($sql) OR mid IN ($sql) AND balance >= limit_balance");
P.S.: Не проверял лично.
|
|
|
Записан
|
|
|
|
smallcms
NoDeny
Старожил
Карма: 64
Offline
Сообщений: 279
|
|
« Ответ #27 : 06 Ноября 2010, 13:53:49 » |
|
Точнее так: diff new_month.pl.old new_month.pl 211c211 < $sth=&sql("SELECT DISTINCT id FROM users WHERE id IN($sql) OR mid IN ($sql)"); --- > $sth=&sql("SELECT DISTINCT id FROM users WHERE (id IN($sql) OR mid IN ($sql)) AND balance >= limit_balance"); 250c250,251 < $sql="SELECT * FROM users WHERE mid=0"; --- > $sql="SELECT * FROM users WHERE mid=0 AND balance >= limit_balance"; При этом первой правкой по сути не будем отнимать абонплату у тех, кто авторизовался, но исчерпал свой лимит к концу месяца.
|
|
|
Записан
|
|
|
|
Eugene
NoDeny
Пользователь
Карма: 0
Offline
Сообщений: 50
|
|
« Ответ #28 : 26 Ноября 2010, 12:34:31 » |
|
Спасибо, сейчас переходим на новый месяц, попробую проверить. Первое изменеие привело к снятию денег у уже заблокированных пользователей, кто платил чётко по тарифу, поскольку после снятия денег у них было на счету 0, что равнялось лимиту. То есть человек отключён, но ещё за месяц заплатил А просто нельзя ограничить список только превышающих лимит примерно так "balance > limit_balance" без "="? Если заработает, стоит, думаю, выложить исправленный new_month.pl
|
|
« Последнее редактирование: 26 Ноября 2010, 12:48:55 от Eugene »
|
Записан
|
|
|
|
Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« Ответ #29 : 12 Января 2011, 15:19:20 » |
|
А просто нельзя ограничить список только превышающих лимит примерно так "balance > limit_balance" без "="?
А тут и так затрагиваются только те, у кого минус и ноль на счету
|
|
|
Записан
|
|
|
|
|