Скрипт делает выборку первых сессий в текущем месяце логинов контрактов входящих в группу с ид $firm[0][gid], после в зависимости от значения cid присваивает значение фирмы и группы контракту из fid и gid соответствующей фирмы.
Все не вошедшие контракты принимают значения из $firm[1].
Данные cid задаются в виде либо айпи_от-айпи_до или просто_айпи или мак через запятую. Мак со значением 00:01:23:45:67:89 в биллинге записывается как 00:1:23:45:67:89.
Скрипт можно запускать раз в сутки по крону.
Уважаемые господа биллингисты подскажите если что-то здесь неверно или некорректно.
Код:
<?
/***********************************************************************************/
/* Group sort for Bgbilling
/* ===========================
/*
/*
/* Скрипт делает выборку первых сессий в текущем месяце логинов контрактов входящих
/* в группу с ид $firm[0][gid], после в зависимости от значения cid
/* присваивает значение фирмы и группы контракту из fid и gid
/* соответствующей фирмы.
/* Все не вошедшие контракты принимают значения из $firm[1].
/* Данные cid задаются в виде либо айпи_от-айпи_до или просто_айпи или мак
/* через запятую
/***********************************************************************************/
$host="localhost";
$user="root";
$password="";
$db="bgbilling";
$log_file = "group.log";
$firm[2][name]="diller2";
$firm[2][gid]=64;
$firm[2][fid]=2;
$firm[2][cid]="10.1.1.0-10.1.1.255,10.2.0.0-10.2.255.255,10.3.1.1";
$firm[1][name]="diller1";
$firm[1][gid]=1;
$firm[1][fid]=1;
$firm[0][name]="nodiller";
$firm[0][gid]=16;
mysql_connect("$host", "$user", "$password") or die("пп╣я яп╡япЇп╦ я");
mysql_select_db("$db") or die("пп╣я яп╡япЇп╦ я п╠п╟пЇп╬п╧ пЄп╟пҐпҐяя.");
mysql_unbuffered_query("SET NAMES cp1251");
$a = mysql_query("SELECT from_number,lid,(SELECT cid FROM user_login_1 WHERE id = lid) AS cid,(SELECT title FROM `contract` WHERE id = cid) AS title
FROM `log_session_1_".date("Ym")."`
WHERE (SELECT cid FROM user_login_1 WHERE id = lid) = ANY (SELECT id FROM `contract` WHERE gr = ".$firm[0][gid].")
GROUP BY cid");
$fh = fopen($log_file, "aw");
while($s = mysql_fetch_assoc($a)){
$valid_fid = valid_cid($s[from_number]);
if($valid_fid){
$sqlvchars_insert=mysql_query("UPDATE `contract` set gr=".$firm[$valid_fid][gid].", pfid=".$firm[$valid_fid][fid]." WHERE id=$s[cid]");
$suc = fwrite($fh, date("Y-m-d H:i")." contract='$s[title]' firm='".$firm[$valid_fid][name]."'\n");
} else {
$sqlvchars_insert=mysql_query("UPDATE `contract` set gr=".$firm[1][gid].", pfid=".$firm[1][fid]." WHERE id=$s[cid]");
$suc = fwrite($fh, date("Y-m-d H:i")." contract='$s[title]' firm='".$firm[1][name]."'\n");
};
}
fclose($fh);
function valid_cid($from_number) {
global $firm;
for($j=2;$j<sizeof($firm);$j++){
$cid = split(",", $firm[$j][cid]);
for($i=0;$i<sizeof($cid);$i++){
$netcid = split('-', $cid[$i]);
if(!ip2long($netcid[0])){ if($from_number == $netcid[0]) { return $firm[$j][fid]; break;}}
else if($netcid[1]){
if((ip2long($from_number) >= ip2long($netcid[0])) and (ip2long($from_number) <= ip2long($netcid[1]))){
return $firm[$j][fid]; break;
}
} else {
if(ip2long($from_number) == ip2long($netcid[0])){
return $firm[$j][fid]; break;
}
}
}
}
}
?>