Суть такова ...
Как то надо было сконвертировать довольно большую базу юзеров из старого (не
stasoft-овского!)
nibs-а в БГБ, в результате чего и родился этот конвертер.
Почему "универсальный"? Потому что чуть поправив код можно конвертировать в БГБ практически все что угодно
Хочу предупредить сразу - это писалось и отработало для БГБ версии 4.5, поэтому если Вы решили использовать конвертер для свежеустановленной 4.6 или 5.0 - конвертер не сработает! Выхода 2: либо ставить 4.5, конвертировать и делайть апгрейд, либо править запросы в коде конвертера.
Итак, есть БД следующего вида:
Код:
-- таблица с тарифами
CREATE TABLE packets (
gid smallint(5) unsigned NOT NULL auto_increment, # ID тарифа, на его основе
# тарифы будут приравнены к тарифам в БГБ
-- ... --
tos tinyint(1) NOT NULL default '0', # комбинация двух этих полей
do_with_tos tinyint(1) NOT NULL default '1', # отвечает за "пред" и "пост" оплату
-- ... --
) TYPE=MyISAM;
-- --------------------------------------------------------
-- таблица с юзерами
CREATE TABLE users (
uid smallint(5) unsigned NOT NULL auto_increment, # ID пользователя
gid smallint(5) unsigned NOT NULL default '1', # тариф пользователя
user varchar(64) NOT NULL default '', # логин пользователя - в БГБ это номер (не id!) договора и алиас в dialup
password varchar(64) NOT NULL default '', # пароль - в БГБ это будет пароль на доступ к статистике и пароль логина/алиаса в dialup
deposit double(12,6) NOT NULL default '0.000000', # деньги на счету - в БГБ это будет входящий остаток
add_date date NOT NULL default '0000-00-00', # дата создания логина - в БГБ это дата начала действия договора
-- ... --
) TYPE=MyISAM;
которую надо конвертнуть в БГБ. Для этого в БГБ создаем минимум 2 шаблона для договоров - для "пред" и "пост" оплаты, т.е. с режимами "дебет и "кредит", в которых указываем услуги, тарифы и т.д. и т.п., т.е. делаем все так как будто никакого конвертера нет и в помине, т.к. конвертер сам будет брать юзера из нибса и создавать в БГБ договор на основе шаблона тем самым привязывая услуги, устанавливая тарифы и т.д. ... единственное что не будет делать конвертер - брать название договора из шаблона, т.к. названием договора будет служить логин из нибса. Почему? Нибс - это похаканный rlm_sql для FreeRADIUS, а там конвергенции - ноль, там юзер = логин. Итак, Вы все создали. Что дальше? Дальше надо в БД нибса создать таблицу которая будет служить стоп-краном останавливающим повторную конвертацию:
Код:
CREATE TABLE IF NOT EXISTS db_convert (
done tinyint(1) unsigned NOT NULL default '0'
) ENGINE=MyISAM;
INSERT INTO db_convert VALUES (0);
После чего открываете convert.php и в нем:
- редактируете параметры подключения к БД:
Код:
// БД старого биллинга
define('OLD_DB_TYPE', 'mysql');
define('OLD_DB_HOST', 'localhost');
define('OLD_DB_NAME', 'nibs_bill');
define('OLD_DB_USER', 'root');
define('OLD_DB_PASS', '');
// БД нового биллинга
define('NEW_DB_TYPE', 'mysql');
define('NEW_DB_HOST', 'localhost');
define('NEW_DB_NAME', 'bgbilling');
define('NEW_DB_USER', 'bill');
define('NEW_DB_PASS', 'bgbilling');
т.к. данные лежали в KOI8-R, а ложить их надо было в cp-1251, то появилось это:
Код:
$OLD_DB->query('SET NAMES koi8r');
$NEW_DB->query('SET NAMES cp1251');
поправьте кодировку старой БД под Ваши нужды, при этом кодировку для БГБ трогать не надо! - там есть такая хитрая "табличка" которая Вам ОЧЕНЬ нужна
Код:
if ($gid == 1) $tpid = 7;
if ($gid == 4) $tpid = 8;
if ($gid == 5) $tpid = 8;
if ($gid == 6) $tpid = 10;
if ($gid == 7) $tpid = 4;
if ($gid == 8) $tpid = 9;
if ($gid == 10) $tpid = 8;
if ($gid == 11) $tpid = 7;
if ($gid == 13) $tpid = 7;
if ($gid == 14) $tpid = 6;
if ($gid == 15) $tpid = 5;
if ($gid == 16) $tpid = 11;
она скажет конвертеру какой именно id старого тарифа является новым id тарифа в БГБ - еще там есть такой параметр
Код:
$date_convert = '2009-01-01';
это дата которую конвертер проставляет в куче мест, уже и не упомню где именно посмотрите код - все увидите
После того как все сделано - заливаете конвертер на сервер где есть php с поддержкой mysql, а если такого нет - можно запросто воспользоваться
Денвером, открываете в браузере
http://some.site.ru/convert.php, немного ждете и ... и идете проверять чего получилось
Замечания? Вопросы? Предложения? Пишите!
P.S. Код писался давно (все руки не доходили откоментить и выложить
) и на скорую руку, поэтому особо не судите за то что нет кнопочки "сконвертировать", т.к. писалось для одноразового использования, за то что я что-то забыл упомянуть, т.к. пропросту подзабыл ну или за что-то еще ...