MANIX Опубликовано 18 Апреля 2005 Жалоба Поделиться Опубликовано 18 Апреля 2005 Можно ли перенести вю базу с новой 2 версии в версию 1.3.1 ? [1113815486:1113933205]Неужели нету? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
theIggs Опубликовано 21 Апреля 2005 Жалоба Поделиться Опубликовано 21 Апреля 2005 Пользуйся поиском, блин... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Cheshire Опубликовано 13 Сентября 2005 Жалоба Поделиться Опубликовано 13 Сентября 2005 Мдямс а я к сожалению в поиске ничего не нашел посему опять подымаю тему Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 21 Ноября 2008 Жалоба Поделиться Опубликовано 21 Ноября 2008 Вчера сделал конвертер.Даже больше чем конвертер - мигратор. Затягивает из 2.х.х в уже имеющийся 1.3:// Тащим структуру категорий/форумов.// Если есть форумы выше второго уровня, делаем для них новую категорию:[*]// Тащим топики и раскладываем по форумам.// Какой-то м...к сделал топики прямо в категории - кидаю в треш[*]// Тащим посты// Непарные и первые аттачи не-картинок делаем аттачами со счетчиками:// ... и добавляем линк на скачивание вторичного аттача// Приаттаченые картинки берем под спойлер и добавляем в конец поста; миниатюры делаем заголовком спойлера.[*]// Тащим юзеров// аплоады аватарок конвертим// аплоады фото конвертим[*]// Тащим пассы юзеров// Если затянули несколько форумов и появились дубликаты логинов - механизм распознавания по паролю, и на каждый вход в форум ПМ-ка от админа (и ПМ-ка админу - опционально) о желательности слияния двух юзеров в одного или смене имен.[*]// Тащим личные сообщения[*]// Обновляем статистику Если тянуть в пустой форум 1.х - получится простое конвертирование.Если тянуть в непустой - получится слияние двух форумов.Если в один пустой (или не пустой) затянуть несколько двушек - получится слияние нескольких двушек. Работа мигратора требует внесения изменений в файлы принимающего форума. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Exebit Опубликовано 21 Декабря 2008 Жалоба Поделиться Опубликовано 21 Декабря 2008 ну а выложить можеш? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 21 Декабря 2008 Жалоба Поделиться Опубликовано 21 Декабря 2008 Не думаю, что правообладатели движка одобрят выкладывание такого скрипта. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 21 Декабря 2008 Жалоба Поделиться Опубликовано 21 Декабря 2008 Думаю им должно быть ||. Другое дело, что ставиться это будет скорее всего на варезный 1.3 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 22 Декабря 2008 Жалоба Поделиться Опубликовано 22 Декабря 2008 Сделано под мою БД, поэтому под типовую БД 1.х могут быть ошибки; в этом случае потребуется подправить мигратор: убрать заполнение тех полей таблиц, которых нет в вашей БД. Итак, мигратор. Позволяет перенести БД (категории, форумы, сообщения, мемберов) в уже имеющийся форум 1.х.Можно переносить, и таким образом "склеивать", несколько разных форумов. Поехали: Исходный форум 1.3 должен быть установлен ТОЛЬКО с префиксом таблиц ibf_ Таблицы форума 2.х должны быть установлены в ту же базу с префиксом ibf2_ Все директории из uploads скопировать в директорию uploads принимающего форума; все файлы из корня директории uploads скопировать в директорию archive_in принимающего форума. CREATE TABLE `ibf_members_incoming` ( `incoming_id` int(10) NOT NULL auto_increment, `incoming_pass_hash` varchar(32) NOT NULL default '', `incoming_pass_salt` varchar(5) NOT NULL default '', `incoming_name` varchar(255) NOT NULL default '', PRIMARY KEY (`incoming_id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=16212 ; В принимающем форуме Login.phpНайти: //------------------------------------------------- // Attempt to get the user details //------------------------------------------------- $DB->query("SELECT id, name, mgroup, password, ip_address FROM ibf_members WHERE LOWER(name)='$username'"); if ( $DB->get_num_rows() ) { $member = $DB->fetch_row(); if ( empty($member['id']) or ($member['id'] == "") ) { $this->log_in_form( 'wrong_name' ); } if ($member['password'] != $password) { $this->log_in_form( 'wrong_pass' ); } //------------------------------ if ($ibforums->input['CookieDate']) { $std->my_setcookie("member_id" , $member['id'], 1); $std->my_setcookie("pass_hash" , $password, 1); } //------------------------------ // Update profile if IP addr missing //------------------------------ if ( $member['ip_address'] == "" OR $member['ip_address'] == '127.0.0.1' ) { $DB->query("UPDATE ibf_members SET ip_address='{$ibforums->input['IP_ADDRESS']}' WHERE id={$member['id']}"); } //------------------------------ // Create / Update session //------------------------------ $poss_session_id = ""; if ( $cookie_id = $std->my_getcookie('session_id') ) { $poss_session_id = $std->my_getcookie('session_id'); } else if ( $ibforums->input['s'] ) { $poss_session_id = $ibforums->input['s']; } if ($poss_session_id) { $session_id = $poss_session_id; // Delete any old sessions with this users IP addy that doesn't match our // session ID. $DB->query("DELETE FROM ibf_sessions WHERE ip_address='".$ibforums->input['IP_ADDRESS']."' AND id <> '$session_id'"); $db_string = $DB->compile_db_update_string( array ( 'member_name' => $member['name'], 'member_id' => $member['id'], 'running_time' => time(), 'member_group' => $member['mgroup'], 'login_type' => $ibforums->input['Privacy'] ? 1 : 0 ) ); $db_query = "UPDATE ibf_sessions SET $db_string WHERE id='".$session_id."'"; } else { $session_id = md5( uniqid(microtime()) ); // Delete any old sessions with this users IP addy. $DB->query("DELETE FROM ibf_sessions WHERE ip_address='".$ibforums->input['IP_ADDRESS']."'"); $db_string = $DB->compile_db_insert_string( array ( 'id' => $session_id, 'member_name' => $member['name'], 'member_id' => $member['id'], 'running_time' => time(), 'member_group' => $member['mgroup'], 'ip_address' => substr($ibforums->input['IP_ADDRESS'], 0, 50), 'browser' => substr($std->clean_value($HTTP_USER_AGENT), 0, 50), 'login_type' => $ibforums->input['Privacy'] ? 1 : 0 ) ); $db_query = "INSERT INTO ibf_sessions (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")"; } $DB->query( $db_query ); $ibforums->member = $member; $ibforums->session_id = $session_id; if ($ibforums->input['referer'] && ($ibforums->input['act'] != 'Reg')) { $url = $ibforums->input['referer']; $url = str_replace( "{$ibforums->vars['board_url']}/index.{$ibforums->vars['php_ext']}", "", $url ); $url = preg_replace( "!^\?!" , "" , $url ); $url = preg_replace( "!s=(\w){32}!", "" , $url ); $url = preg_replace( "!act=(login|reg|lostpass)!i", "", $url ); } //----------------------------------- // set our privacy cookie //----------------------------------- if ($ibforums->input['Privacy'] == 1) { $std->my_setcookie( "anonlogin", 1 ); } //----------------------------------- // Clear out any passy change stuff //----------------------------------- $DB->query("DELETE FROM ibf_validating WHERE member_id={$ibforums->member['id']} AND lost_pass=1"); //----------------------------------- // Redirect them to either the board // index, or where they came from //----------------------------------- $std->my_setcookie("session_id", $ibforums->session_id, -1); $this->logged_in = 1; if ( USE_MODULES == 1 ) { $this->modules->register_class(&$this); $this->modules->on_login($member); } if ( $ibforums->input['return'] != "" ) { $return = urldecode($ibforums->input['return']); if ( preg_match( "#^http://#", $return ) ) { $std->boink_it($return); } } $print->redirect_screen( "{$ibforums->lang[thanks_for_login]} {$ibforums->member['name']}", $url ); } else { $this->logged_in = 0; if ( USE_MODULES == 1 ) { $this->modules->register_class(&$this); $this->modules->on_login($member); } $this->log_in_form( 'wrong_name' ); } } Заменить на: //------------------------------------------------- // Attempt to get the user details //------------------------------------------------- // +FatCat С учетом миграции $users_in_name = $DB->query("SELECT m.id, m.name, m.mgroup, m.password, m.ip_address, i.incoming_id, i.incoming_pass_hash, i.incoming_pass_salt FROM ibf_members m LEFT JOIN ibf_members_incoming i ON (m.id=i.incoming_id) WHERE LOWER(name)='$username' ORDER BY id ASC"); // Счетчики удачных совпадений логинов/паролей если логины совпали: $logining_yes_migrant = 0; $logining_no_migrant = 0; $logining_yes_member = 0; $logining_no_member = 0; while ( $member = $DB->fetch_row($users_in_name) ) { if($member['password'] == "password") // Мигрант { $migrate_cool = $this->test_migrate($member['id'], $ibforums->input['PassWord'], $member['incoming_pass_hash'], $member['incoming_pass_salt']); if($migrate_cool) { $logining_yes_migrant++; $migrant = array(); // Сохраняем инфу о мигранте $migrant['id'] = $member['id']; $migrant['name'] = $member['name']; $migrant['mgroup'] = $member['mgroup']; $migrant['ip_address'] = $member['ip_address']; } else {$logining_no_migrant++;} } else // Мембер { if($member['password'] == $password) { $logining_yes_member++; $member_safe = array(); // Сохраняем инфу о мембере $member_safe['id'] = $member['id']; $member_safe['name'] = $member['name']; $member_safe['mgroup'] = $member['mgroup']; $member_safe['ip_address'] = $member['ip_address']; } else {$logining_no_member++;} } } if($logining_yes_migrant > 0 and $logining_yes_member == 0) // Принимаем мигранта { $member = array(); $member['id'] = $migrant['id']; $member['name'] = $migrant['name']; $member['mgroup'] = $migrant['mgroup']; $member['ip_address'] = $migrant['ip_address']; $member['password'] = $password; // Даем полновесную прописку мигранту в форум: $DB->query("UPDATE ibf_members SET password = '".$password."' WHERE id = ".$member['id']); $DB->query("DELETE FROM ibf_members_incoming WHERE incoming_id = ".$member['id']); } elseif($logining_yes_member > 0) // Логиним мембера { $member = array(); $member['id'] = $member_safe['id']; $member['name'] = $member_safe['name']; $member['mgroup'] = $member_safe['mgroup']; $member['ip_address'] = $member_safe['ip_address']; $member['password'] = $password; } if( ($logining_yes_migrant+$logining_no_migrant+$logining_yes_member+$logining_no_member) > 0 ) { if ( empty($member['id']) or ($member['id'] == "") ) { $this->log_in_form( 'wrong_pass' ); } if ($member['password'] != $password) { $this->log_in_form( 'wrong_pass' ); } //------------------------------ if ($ibforums->input['CookieDate']) { $std->my_setcookie("member_id" , $member['id'], 1); $std->my_setcookie("pass_hash" , $password, 1); } //------------------------------ // Update profile if IP addr missing //------------------------------ if ( $member['ip_address'] == "" OR $member['ip_address'] == '127.0.0.1' ) { $DB->query("UPDATE ibf_members SET ip_address='{$ibforums->input['IP_ADDRESS']}' WHERE id={$member['id']}"); } //------------------------------ // Create / Update session //------------------------------ $poss_session_id = ""; if ( $cookie_id = $std->my_getcookie('session_id') ) { $poss_session_id = $std->my_getcookie('session_id'); } else if ( $ibforums->input['s'] ) { $poss_session_id = $ibforums->input['s']; } if ($poss_session_id) { $session_id = $poss_session_id; // Delete any old sessions with this users IP addy that doesn't match our // session ID. $DB->query("DELETE FROM ibf_sessions WHERE ip_address='".$ibforums->input['IP_ADDRESS']."' AND id <> '$session_id'"); $db_string = $DB->compile_db_update_string( array ( 'member_name' => $member['name'], 'member_id' => $member['id'], 'running_time' => time(), 'member_group' => $member['mgroup'], 'login_type' => $ibforums->input['Privacy'] ? 1 : 0 ) ); $db_query = "UPDATE ibf_sessions SET $db_string WHERE id='".$session_id."'"; } else { $session_id = md5( uniqid(microtime()) ); // Delete any old sessions with this users IP addy. $DB->query("DELETE FROM ibf_sessions WHERE ip_address='".$ibforums->input['IP_ADDRESS']."'"); $db_string = $DB->compile_db_insert_string( array ( 'id' => $session_id, 'member_name' => $member['name'], 'member_id' => $member['id'], 'running_time' => time(), 'member_group' => $member['mgroup'], 'ip_address' => substr($ibforums->input['IP_ADDRESS'], 0, 50), 'browser' => substr($std->clean_value($HTTP_USER_AGENT), 0, 50), 'login_type' => $ibforums->input['Privacy'] ? 1 : 0 ) ); $db_query = "INSERT INTO ibf_sessions (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")"; } $DB->query( $db_query ); $ibforums->member = $member; $ibforums->session_id = $session_id; if ($ibforums->input['referer'] && ($ibforums->input['act'] != 'Reg')) { $url = $ibforums->input['referer']; $url = str_replace( "{$ibforums->vars['board_url']}/index.{$ibforums->vars['php_ext']}", "", $url ); $url = preg_replace( "!^\?!" , "" , $url ); $url = preg_replace( "!s=(\w){32}!", "" , $url ); $url = preg_replace( "!act=(login|reg|lostpass)!i", "", $url ); } //----------------------------------- // set our privacy cookie //----------------------------------- if ($ibforums->input['Privacy'] == 1) { $std->my_setcookie( "anonlogin", 1 ); } //----------------------------------- // Clear out any passy change stuff //----------------------------------- $DB->query("DELETE FROM ibf_validating WHERE member_id={$ibforums->member['id']} AND lost_pass=1"); //----------------------------------- // Redirect them to either the board // index, or where they came from //----------------------------------- $std->my_setcookie("session_id", $ibforums->session_id, -1); $this->logged_in = 1; if ( USE_MODULES == 1 ) { $this->modules->register_class(&$this); $this->modules->on_login($member); } if ( $ibforums->input['return'] != "" ) { $return = urldecode($ibforums->input['return']); if ( preg_match( "#^http://#", $return ) ) { $std->boink_it($return); } } // ПМ о неуникальности ника: if( ($logining_yes_migrant+$logining_no_migrant+$logining_yes_member+$logining_no_member) > 1 ) { $raw = array( 'member_id' => $member['id'], 'msg_date' => time(), 'read_state' => 0, 'title' => "Административное сообщение: дублирование имен", 'message' => "Доброго времени суток, <b>".$member['name']."!</b>!<br>В результате слияния форумов Ваше имя <i>".$member['name']."</i> стало неуникальным на объединенном форуме.<br>Возможно, что второе имя - Ваш профиль на другом форуме; или же это иной человек.<br>Есть вероятность, что другой человек станет писать от Вашего имени сообщения в форуме и в личной переписке.<br><br>Просим Вас незамедлительно сообщить администратору форума об этой ошибке, просто ответив на это письмо.<br><br><br>Это письмо создано автоматической системой распознавания дублей, и будет автоматически повторяться при каждой авторизации на форуме, пока ошибка дублирования имен не будет исправлена.", 'from_id' => "1", 'vid' => 'in', 'recipient_id' => $member['id'], 'cc_users' => "" ); $db_string = $DB->compile_db_insert_string($raw); $DB->query("INSERT INTO ibf_messages (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")"); $DB->query("UPDATE ibf_members SET show_popup=1, new_msg = (new_msg+1) WHERE id=".$member['id']); } $print->redirect_screen( "{$ibforums->lang[thanks_for_login]} {$ibforums->member['name']}", $url ); } else { $this->logged_in = 0; if ( USE_MODULES == 1 ) { $this->modules->register_class(&$this); $this->modules->on_login($member); } $this->log_in_form( 'wrong_name' ); } } function test_migrate($id, $pass1, $hash, $salt) { global $std, $ibforums; if(md5( md5( $salt ) . md5( $pass1 ) ) == $hash)return TRUE; else return FALSE; } В принимающем форуме создать директорию migrate, и в нее положить index.php следующего содержания:<?php define( 'DO_MODE', 0 ); // 0 - Отладка (вывод на экран sql-запросов); 2 - отладка с большими базами; 1 - выполнение миграции. define( 'UPLOADS_URL', 'http://coda.su/forum' ); // Домен папки аплоадсов (без слеши на конце) /* Скрипт переноса и добавления данных из IP.Board 2.3.6 (с другими версиями не тестировался) в IPB 1.3 final / FatCat edition NB: Если есть форумы более второго уровня вложенности - под них создается новая категория, и туда они сваливаются навалом. Если хватило у ма в двушке создать топики прямо в корне категории - после миграции они найдутся в треше. Права доступа - только администраторы. Скины не присваиваются, ибо не совместимы в принципе. Голосования не импортируются. КАК ПОЛЬЗОВАТЬСЯ: 1. Установить таблицы вторичного форума в ту же БД с префиксом ibf2_ Утилита BigDump и текстовые редакторы автозамены в руки. 2. Директории из uploads скопировать в директорию uploads реципиента. Загруженные аватарки из корня uploads донора поместить в archive_in реципиента. */ //----------------------------------------------- // USER CONFIGURABLE ELEMENTS //----------------------------------------------- // Root path $root_path = "../"; define('TIME_LIMIT', 0); $is_safe_mode = ini_get('safe_mode') == '1' ? 1 : 0; if (!$is_safe_mode && function_exists('set_time_limit')) set_time_limit(TIME_LIMIT); error_reporting (E_ERROR | E_WARNING | E_PARSE); set_magic_quotes_runtime(0); class info { var $input = array(); var $base_url = ""; var $vars = ""; function info() { global $sess, $std, $DB, $root_path, $INFO; $this->vars = &$INFO; } } //-------------------------------- // Import $INFO, now! //-------------------------------- require $root_path."conf_global.php"; //-------------------------------- // Require our global functions //-------------------------------- require $root_path."sources/functions.php"; $std = new FUNC; //-------------------------------- // Load the DB driver and such //-------------------------------- $INFO['sql_driver'] = !$INFO['sql_driver'] ? 'mySQL' : $INFO['sql_driver']; $to_require = $root_path."sources/Drivers/".$INFO['sql_driver'].".php"; require ($to_require); $DB = new db_driver; $DB->obj['sql_database'] = $INFO['sql_database']; $DB->obj['sql_user'] = $INFO['sql_user']; $DB->obj['sql_pass'] = $INFO['sql_pass']; $DB->obj['sql_host'] = $INFO['sql_host']; $DB->obj['sql_tbl_prefix'] = $INFO['sql_tbl_prefix']; // Get a DB connection $DB->connect(); //-------------------------------- // Wrap it all up in a nice easy to // transport super class //-------------------------------- $ibforums = new info(); //-------------------------------- // Set up our vars //-------------------------------- $ibforums->input = $std->parse_incoming(); $ibforums->base_url = $ibforums->vars['board_url'].'/index.'.$ibforums->vars['php_ext']; //-------------------------------- // Что делаем? //-------------------------------- echo("Делаем миграцию форума 2.3.6 => 1.3<hr>"); get_info(); $cat_struct=do_cats(); // Тащим структуру категорий/форумов. if($cat_struct)echo(" выполнено!<hr>"); $top_struct=do_tops(); // Тащим топики и раскладываем по форумам. if($top_struct)echo(" выполнено!<hr>"); $post_struct=do_posts(); // Тащим посты if($post_struct)echo(" выполнено!<hr>"); echo("Ищем хвосты некорректно удаленных топиков"); $recovery_bad_topics=recovery_bad_topics(); // Ищем посты без топиков и создаем им топики в треше if($recovery_bad_topics == 0)echo("БД в порядке, восстановления не потребовалось!<hr>"); else echo("Восстановлено и помещено в треш ".$recovery_bad_topics." топиков"); $attach_struct=do_attach(); // Тащим аттачи if($attach_struct)echo(" выполнено!<hr>"); $users_struct=do_users(); // Тащим юзеров if($users_struct)echo(" выполнено!<hr>"); $users_pass_struct=do_users_pass(); // Тащим пассы юзеров if($users_pass_struct)echo(" выполнено!<hr>"); $users_pm=do_pm(); // Тащим личные сообщения if($users_pm)echo(" выполнено!<hr>"); $stats=do_stats(); // Тащим личные сообщения if($$stats)echo("<br><br>Миграция произошла, смотрите отчет об ошибках выше.<hr>"); //------------------------------------------------- // Тянем инфу реципиента. //------------------------------------------------- function get_info() { global $DB, $ibforums, $root_path, $std, $INFO; // Тянем структуру категорий реципиента $DB->query( "SELECT max( id ) AS mid, max( position ) AS pos FROM ibf_categories" ); $out = $DB->fetch_row(); define('MAX_CAT_ID', $out['mid']); // Последний айдишник категории реципиента define('MAX_CAT_POS', $out['pos']); // Последняя позиция категории реципиента // Тянем структуру форумов реципиента $DB->query( "SELECT max( id ) AS mid, max( position ) AS pos FROM ibf_forums" ); $out = $DB->fetch_row(); define('MAX_FORUM_ID', $out['mid']); // Последний айдишник форума реципиента define('MAX_FORUM_POS', $out['pos']); // Последняя позиция форума реципиента // Тянем настройки мемберов реципиента $DB->query( "SELECT max( id ) AS mid FROM ibf_members" ); $out = $DB->fetch_row(); define('MAX_MEMBER_ID', $out['mid']); // Последний айдишник мембера реципиента // Тянем настройки топиков реципиента $DB->query( "SELECT max( tid ) AS mid FROM ibf_topics" ); $out = $DB->fetch_row(); define('MAX_TOPICS_ID', $out['mid']); // Последний айдишник топиков реципиента // Тянем настройки постов реципиента $DB->query( "SELECT max( pid ) AS pid FROM ibf_posts" ); $out = $DB->fetch_row(); define('MAX_POSTS_ID', $out['pid']); // Последний айдишник постов реципиента // Тянем настройки ПМ реципиента $DB->query( "SELECT max(msg_id) as mid FROM ibf_messages" ); $out = $DB->fetch_row(); if($out['mid'] == "")$out['mid'] = 0; define('MAX_PM_ID', $out['mid']); // Последний айдишник ПМ реципиента } //------------------------------------------------- // Тащим структуру категорий/форумов. //------------------------------------------------- function do_cats() { global $DB, $ibforums, $root_path, $std, $INFO; // Счетчики: $cats = "|"; $forums_migrate_ids = "|"; $forum_in_cats = "|"; $cat_count = intval(MAX_CAT_ID); $pos_count = intval(MAX_CAT_POS); $for_count = intval(MAX_FORUM_ID); // Готовим код миграции категорий и форумов $cat_struc = ""; $DB->query( "SELECT * FROM ibf2_forums ORDER BY parent_id ASC" ); // Не менять ORDER!!! Иначе полетит структура категорий донора. while( $out = $DB->fetch_row() ) { // Создаем sql-запросы создания новых категорий: if($out['parent_id'] == "-1") { $cat_count++; $pos_count++; $cat_id_curent = intval(MAX_CAT_ID)+intval($out['id']); $cats .= $out['id']."|"; // Миграция категорий: $cat_struc .= "INSERT INTO `ibf_categories` VALUES (".$cat_id_curent.", ".$pos_count.", '1', '".$out['name']."', '".$out['description']."', '', '');<br>"; } // Создаем sql-запросы создания новых форумов: else { // Пересчитываем... $for_count++; $out['last_poster_id'] = intval($out['last_poster_id']) + intval(MAX_MEMBER_ID); $out['position'] = intval($out['position']) + intval(MAX_FORUM_POS); if($out['newest_id']>0) $out['newest_id'] = intval($out['newest_id']) + intval(MAX_TOPICS_ID); if( stristr($cats, "|".$out['parent_id']."|") ) // Форум первого уровня { // Создаем список форумов первого уровня с категориями: $forum_in_cats .= $out['id'].">".$out['parent_id']."|".$for_count."|"; // Миграция форумов первого уровня в категории: $categories = MAX_CAT_ID + intval($out['parent_id']); $cat_struc .= "INSERT INTO ibf_forums VALUES (".$for_count.", ".$out['topics'].", ".$out['posts'].", ".$out['last_post'].", ".$out['last_poster_id'].", '".$out['last_poster_name']."', '".$out['name']."', '".$out['description']."', ".$out['position'].", ".$out['use_ibc'].", ".$out['use_html'].", '".$out['status']."', '4', '4', '4', '', ".$categories.", '".$out['newest_title']."', ".$out['newest_id'].", 'last_post', 'Z-A', 100, 0, '4', 0, 1, 0, 1, 0, -1, 0, 1, 1, '".$out['redirect_url']."', ".$out['redirect_on'].", 0, '', '', '', 0, '', '');<br>"; $forums_migrate_ids .= $out['id'].">".$for_count."|"; } } } // Второй прогон для выявления форумов второго и выше уровней вложенности: // Перезапускаем счетчики: $cat_count = intval(MAX_CAT_ID); $pos_count = intval(MAX_CAT_POS); $for_count = intval(MAX_FORUM_ID); // Готовимся запомнить форумы выше второго уровня: $third_forums = ""; // Пытаем БД донора: $DB->query( "SELECT * FROM ibf2_forums ORDER BY parent_id ASC" ); // Не менять ORDER!!! Иначе полетит структура категорий донора. while( $out = $DB->fetch_row() ) { if($out['parent_id'] != "-1") // Отсекаем категории { $for_count++; $out['last_poster_id'] = intval($out['last_poster_id']) + intval(MAX_MEMBER_ID); $out['position'] = intval($out['position']) + intval(MAX_FORUM_POS); if($out['newest_id']>0) $out['newest_id'] = intval($out['newest_id']) + intval(MAX_TOPICS_ID); if( !stristr($cats, "|".$out['parent_id']."|") ) // Отсекаем форумы первого уровня { if( stristr($forum_in_cats, "|".$out['parent_id'].">") ) // Ловим форумы второго уровня { $find_cat_id = explode("|".$out['parent_id'].">", $forum_in_cats); $find_cat_id = $find_cat_id[1]; $find_cat_id = explode("|", $find_cat_id); $parent_forum = $find_cat_id[1]; $find_cat_id = $find_cat_id[0]; $find_cat_id = intval($find_cat_id) + intval(MAX_CAT_ID); // Миграция форумов второго уровня $cat_struc .= "INSERT INTO ibf_forums VALUES (".$for_count.", ".$out['topics'].", ".$out['posts'].", ".$out['last_post'].", ".$out['last_poster_id'].", '".$out['last_poster_name']."', '".$out['name']."', '".$out['description']."', ".$out['position'].", ".$out['use_ibc'].", ".$out['use_html'].", '".$out['status']."', '4', '4', '4', '', ".$find_cat_id.", '".$out['newest_title']."', ".$out['newest_id'].", 'last_post', 'Z-A', 100, 0, '4', 0, 1, 0, 1, 0, ".$parent_forum.", 0, 1, 1, '".$out['redirect_url']."', ".$out['redirect_on'].", 0, '', '', '', 0, '', '');<br>"; // Делаем отображение дочернего форума в родительском: $cat_struc .= "UPDATE ibf_forums SET subwrap = '1' WHERE id = ".$parent_forum.";<br>"; $forums_migrate_ids .= $out['id'].">".$for_count."|"; } else // Ловим форумы выше второго уровня { $third_forums .= "INSERT INTO ibf_forums VALUES (".$for_count.", ".$out['topics'].", ".$out['posts'].", ".$out['last_post'].", ".$out['last_poster_id'].", '".$out['last_poster_name']."', '".$out['name']."', '".$out['description']."', ".$out['position'].", ".$out['use_ibc'].", ".$out['use_html'].", '".$out['status']."', '4', '4', '4', '', will_be_new_cat_id, '".$out['newest_title']."', ".$out['newest_id'].", 'last_post', 'Z-A', 100, 0, '4', 0, 1, 0, 1, 0, -1, 0, 1, 1, '".$out['redirect_url']."', ".$out['redirect_on'].", 0, '', '', '', 0, '', '');<br>"; $forums_migrate_ids .= $out['id'].">".$for_count."|"; } } } } // Если есть форумы выше второго уровня, делаем для них новую категорию: if($third_forums != "") { $swalka_id = $cat_id_curent +1; $cat_struc .= "INSERT INTO ibf_categories VALUES (".$swalka_id.", ".(intval($pos_count) + 1).", '1', 'Временная категоря', 'Сюда мигрировали форумы глубокого вложения, недопустимые в текущей версии ситемы', '', '');<br>"; $third_forums = str_replace("will_be_new_cat_id", $swalka_id, $third_forums); $cat_struc .= $third_forums; } define(FORUMS_MIGRATE_IDS, $forums_migrate_ids); // сохранили инфо о смене айдишников форумов echo("Миграция структуры категорий и форумов: "); foreach( explode( ";<br>", $cat_struc ) as $query ) { if( $query != "" ) { if(DO_MODE == 1){$DB->query($query); echo(". ");} else{echo($query.";<br><br>");} } } return true; } function do_tops() { global $DB, $ibforums, $root_path, $std, $INFO; echo("Миграция топиков:<br>"); $topics_realy = "|"; $topicks_query = $DB->query("SELECT * FROM ibf2_topics"); // Запрос топиков донора while ( $r = $DB->fetch_row($topicks_query) ) { // Формируем запрос if($r['moved_to'] == NULL)$r['moved_to'] = "''"; // Шняга if($r['author_mode'] == NULL)$r['author_mode'] = "''"; $new_forum_id = explode("|".$r['forum_id'].">", FORUMS_MIGRATE_IDS); // Добываем новые айдишники форумов $new_forum_id = $new_forum_id[1]; $new_forum_id = explode("|", $new_forum_id); $new_forum_id = $new_forum_id[0]; $r['title'] = safesql($r['title']); $r['description'] = safesql($r['description']); $r['starter_name'] = safesql($r['starter_name']); $r['last_poster_name'] = safesql($r['last_poster_name']); if( !stristr(FORUMS_MIGRATE_IDS,"|".$r['forum_id'].">") ) // Какой-то мудак сделал топики прямо в категории - кидаю в треш { $new_forum_id = "2"; } $new_topic_tid = intval($r['tid']) + intval(MAX_TOPICS_ID); $query = "INSERT INTO ibf_topics VALUES (".$new_topic_tid.", '".$r['title']."', '".$r['description']."', '".$r['state']."', ".$r['posts'].", ".( intval($r['starter_id']) + intval(MAX_MEMBER_ID) ).", ".$r['start_date'].", ".( intval($r['last_poster_id']) + intval(MAX_MEMBER_ID) ).", ".$r['last_post'].", 0, '".$r['starter_name']."', '".$r['last_poster_name']."', '0', 0, ".$r['views'].", ".$new_forum_id.", ".$r['approved'].", ".$r['author_mode'].", ".$r['pinned'].", ".$r['moved_to'].", '', 0, 0, '', '')"; // Миграция топиков без постов if(DO_MODE == 1){$DB->query($query); echo(". ");} elseif(DO_MODE == 2){echo($new_topic_tid.", ");} else{echo($query.";<br><br>");} $topics_realy .= (intval($r['tid']) + intval(MAX_TOPICS_ID) )."|"; } define('TOPICS_REALY', $topics_realy); // Массив реально существующих топиков. return true; } function do_posts() { global $DB, $ibforums, $root_path, $std, $INFO; echo("Миграция сообщений в топиках:<br>"); $bad_topics = FALSE; $posts_query = $DB->query("SELECT p.*, t.tid, t.forum_id FROM ibf2_posts p LEFT JOIN ibf2_topics t ON (p.topic_id=t.tid) ORDER BY p.pid"); // Запрос топиков донора while ( $r = $DB->fetch_row($posts_query) ) { // Выясняем новый forum_id $new_forum_id = explode("|".$r['forum_id'].">", FORUMS_MIGRATE_IDS); // Добываем новые айдишники форумов $new_forum_id = $new_forum_id[1]; $new_forum_id = explode("|", $new_forum_id); $new_forum_id = $new_forum_id[0]; // Формируем запрос $r['post'] = safesql($r['post']); $r['post'] .= " "; $r['author_name'] = safesql($r['author_name']); if( !stristr(FORUMS_MIGRATE_IDS,"|".$r['forum_id'].">") ) // Какой-то мудак сделал топики прямо в категории - кидаю в треш { $new_forum_id = "2"; } $new_post_pid = intval($r['pid']) + intval(MAX_POSTS_ID); $new_topic_id = intval($r['topic_id']) + intval(MAX_TOPICS_ID); if($r['author_id'] == 0)$new_author_id = 0; else $new_author_id = intval($r['author_id']) + intval(MAX_MEMBER_ID); if( !stristr(TOPICS_REALY, "|".$new_topic_id."|") ) { $bad_topics = TRUE; echo("<br>Пост № ".$new_post_pid."=>".$new_topic_id." не имеет родительского топика<br>"); } $query = "INSERT INTO ibf_posts VALUES (".$new_post_pid.", 0, '', ".$new_author_id.", '".$r['author_name']."', ".$r['use_sig'].", ".$r['use_emo'].", '".$r['ip_address']."', ".$r['post_date'].", 0, '".$r['post']."', ".$r['queued'].", ".$new_topic_id.", ".$new_forum_id.", '', 0, '', '', '', '".$r['new_topic']."', '', 0, 0)"; // Миграция постов if(DO_MODE == 1){$DB->query($query); echo(". ");} elseif(DO_MODE == 2){echo($new_post_pid.", ");} else{echo(str_replace("<","<",$query)."<br><br>");} } if($bad_topics == TRUE)echo("<hr>Бэд Топики!!<hr>!"); return true; } function recovery_bad_topics() { global $DB, $ibforums, $root_path, $std, $INFO; $DB->query( "SELECT max(tid) as mtid FROM ibf_topics" ); $out = $DB->fetch_row(); $query = ""; $querys = ""; $previous_tid = 0; $replies = 0; $DB->query( "SELECT * FROM ibf_posts where topic_id > ".$out['mtid']." ORDER BY topic_id ASC, pid ASC" ); if ( $DB->get_num_rows() ) { echo("Восстанавливаем поврежденные топики:<br>"); while ( $r = $DB->fetch_row() ) { $replies++; if($previous_tid != intval($r['topic_id'])) { $replies = $replies - 1; $query = str_replace("число_ответов",$replies,$query);$replies = 0; if($replies == 0)$query = str_replace("ID_последнего_постера",$next_author_id,$query); else $query = str_replace("ID_последнего_постера",$r['author_id'],$query); if($replies == 0)$query = str_replace("дата_последнего_поста",$next_post_date,$query); else $query = str_replace("дата_последнего_поста",$r['post_date'],$query); if($replies == 0)$query = str_replace("имя_последнего",$next_author_name,$query); else $query = str_replace("имя_последнего",$r['author_name'],$query); $querys .= $query; $author_id = $r['author_id']; $post_date = $r['post_date']; $author_name = $r['author_name']; $query = "INSERT INTO `ibf_topics` VALUES ('".$r['topic_id']."', '".$std->get_date( $r['post_date'], 'LONG' )."', '', 'open', число_ответов, '".$r['author_id']."', '".$r['post_date']."', ID_последнего_постера, дата_последнего_поста, 0, '".$r['author_name']."', 'имя_последнего', '0', 0, 0, 2, 1, 1, 0, '', '', 0, 0, '', '')<br><br>"; } $query_end = "INSERT INTO `ibf_topics` VALUES ('".$r['topic_id']."', '".$std->get_date( $r['post_date'], 'LONG' )."', '', 'open', число_ответов, ID_первого_постера, дата_старта, ID_последнего_постера, дата_последнего_поста, 0, 'имя_первого', 'имя_последнего', '0', 0, 0, 2, 1, 1, 0, '', '', 0, 0, '', '')"; $previous_tid = intval($r['topic_id']); $next_author_id = $r['author_id']; $next_post_date = $r['post_date']; $next_author_name = $r['author_name']; } $query_end = str_replace("число_ответов",$replies,$query_end); $query_end = str_replace("ID_первого_постера",$author_id,$query_end); $query_end = str_replace("дата_старта",$post_date,$query_end); $query_end = str_replace("ID_последнего_постера",$next_author_id,$query_end); $query_end = str_replace("дата_последнего_поста",$next_post_date,$query_end); $query_end = str_replace("имя_первого",$author_name,$query_end); $query_end = str_replace("имя_последнего",$next_author_name,$query_end); $querys .= $query_end; $querys = explode("<br><br>", $querys); $counter = 0; foreach($querys AS $query) { $counter++; if(DO_MODE == 1){$DB->query($query); echo(". ");} else{echo($query.";<br><br>");} } return $counter; } else { return 0; } } function do_attach() { global $DB, $ibforums, $root_path, $std, $INFO; echo("Миграция аттачей:<br>"); // Собираем инфу об аттаче не-картинок $attach_query = $DB->query("SELECT a.* , p.pid, p.post FROM ibf2_attachments a LEFT JOIN ibf2_posts p ON ( a.attach_post_key = p.post_key ) WHERE attach_is_image = '0' ORDER BY p.pid"); // Запрос аттачей не-картинок $attach_key = ""; while ( $r = $DB->fetch_row($attach_query) ) { if($attach_key != $r['pid']) { // Непарные и первые аттачи не-картинок делаем аттачами со счетчиками: $query = "UPDATE ibf_posts SET attach_id = '".$r['attach_location']."', attach_hits = '".$r['attach_hits']."', attach_type = 'application/".$r['attach_ext']."', attach_file = '".$r['attach_file']."' WHERE pid = ".( intval($r['pid']) + intval(MAX_POSTS_ID) ); } else { //--------------------------------------------------------- // Заменяем парный аттач файлом для скачивания по линку... //--------------------------------------------------------- $file_path = $r['attach_location']; $file_path = explode("/", $file_path); $file_path = $file_path[0]."/"; $old_file = "../uploads/".$r['attach_location']; $new_file = "../uploads/".$file_path.$r['attach_file']; if(file_exists($old_file)) { if(file_exists($new_file) and DO_MODE == 1)unlink($new_file); // ... и добавляем линк на скачивание вторичного аттача $new_post_entry = $r['post']."<br><br><strong><span class='edit'>Присоединенный файл:</span></strong><br><a href='".UPLOADS_URL."/uploads/".$file_path.$r['attach_file']."' title='Скачать файл' target='_blank'><img src='html/mime_types/zip.gif' width=16 height=16 border=0> ".$r['attach_file']."</a>"; $new_post_entry = safesql($new_post_entry); if(DO_MODE == 1) { copy($old_file, $new_file); unlink($old_file); } else { $new_post_entry = str_replace("<","<",$new_post_entry); echo("Файл <b>".$old_file."</b> перемещен в <b>".$new_file."</b><br><br>"); } $query = "UPDATE ibf_posts SET post = '".$new_post_entry."' WHERE pid = ".( intval($r['pid']) + intval(MAX_POSTS_ID) ); } else { $query = "Не найден файл, прикрепленный к сообщению № ".$r['pid']." (<a href=\"../index.php?showtopic=0&view=findpost&p=".( intval($r['pid']) + intval(MAX_POSTS_ID) )."\" target=\"_blank\">посмотреть сообщение</a>)"; } } $attach_key = $r['pid']; // Ловим аттач нескольких не-картинок в один пост if(DO_MODE == 1){ if( stristr($query, "Не найден файл, прикрепленный к сообщению № ") ) { echo("<br>".$query."<br>"); } else { $DB->query($query); echo(". "); } } else{echo($query.";<br><br>");} } // Собираем инфу об аттаче картинок echo("<br>Аттачим картинки:<br><br>"); $attach_query = $DB->query("SELECT a.* , p.pid, p.post FROM ibf2_attachments a LEFT JOIN ibf2_posts p ON ( a.attach_post_key = p.post_key ) WHERE attach_is_image = '1' ORDER BY p.pid"); // Запрос аттачей не-картинок $attach_key = ""; while ( $r = $DB->fetch_row($attach_query) ) { $new_post_entry = $r['post']."<br><br><strong><span class=''edit''>Присоединенное изображение:</span></strong><br><br><!--spoilerstart--><div class=''sp-wrap''><div class=''sp-head-wrap''><div class=''sp-head folded clickable''><b><u><img src=''".UPLOADS_URL."/uploads/".$r['attach_thumb_location']."'' alt=''Щелкните, чтобы развернуть полное изображение'' border=0></u></b></div></div><div class=''sp-body''><div class=''sp-content''><img src=''".UPLOADS_URL."/uploads/".$r['attach_location']."'' alt=''Полное изображение, размещенное пользователем'' border=0></div></div></div><!--spoilerstend-->"; $new_post_entry = safesql($new_post_entry); if(DO_MODE != 1)$new_post_entry = str_replace("<","<",$new_post_entry); $query = "UPDATE ibf_posts SET post = '".$new_post_entry."' WHERE pid = ".( intval($r['pid']) + intval(MAX_POSTS_ID) ); if(DO_MODE == 1){$DB->query($query); echo(". ");} else{echo($query.";<br><br>");} } return true; } function do_users() { global $DB, $ibforums, $root_path, $std, $INFO; echo("Миграция пользователей:<br>"); $users_query = $DB->query("SELECT m.id as mid, m.name, m.mgroup, m.email, m.joined, m.ip_address, m.posts, m.allow_admin_mails, m.time_offset, m.hide_email, m.email_pm, m.email_full, m.warn_level, m.warn_lastwarn, m.language last_post, m.restrict_post, m.view_sigs, m.view_img, m.view_avs, m.view_pop, m.bday_day, m.bday_month, m.bday_year, m.new_msg, m.msg_total, m.show_popup, m.misc, m.last_visit, m.last_activity, m.dst_in_use, m.view_prefs, m.coppa_user, m.mod_posts, m.auto_track, m.temp_ban, m.sub_end, m.login_anonymous, m.ignored_users, m.mgroup_others, m.org_perm_id, e.id as eid, e.notes, e.links, e.bio, e.ta_size, e.photo_type, e.photo_location, e.photo_dimensions, e.aim_name, e.icq_number, e.website, e.yahoo, e.interests, e.msnname, e.vdirs, e.location, e.signature, e.avatar_location, e.avatar_size, e.avatar_type, p.pp_main_photo, p.pp_main_width, p.pp_main_height, p.pp_thumb_photo FROM ibf2_members m LEFT JOIN ibf2_member_extra e ON ( m.id = e.id ) LEFT JOIN ibf2_profile_portal p ON ( m.id = p.pp_member_id )"); // Запрос инфы мемберов while ( $r = $DB->fetch_row($users_query) ) { $r['name'] = safesql($r['name']); // Потянули аватары: if( stristr($r['avatar_location'], "av-".$r['mid']) and !preg_match( "/^http:\/\//", $r['avatar_location'] ) ) // Локальная аватарка { $old_file = "../archive_in/".$r['avatar_location']; $new_id = intval(MAX_MEMBER_ID) + intval($r['mid']); $new_file = "../uploads/".str_replace($r['mid'],$new_id,$r['avatar_location']); if(file_exists($old_file)) { if(DO_MODE == 1) { copy($old_file, $new_file); unlink($old_file); } } else { echo("<br>Не найден файл аватарки пользователя <b>".$r['name']."</b><br>"); } $r['avatar_location'] = str_replace($r['mid'], $new_id, $r['avatar_location']); } $r['notes'] = safesql($r['notes']); $r['links'] = safesql($r['links']); $r['bio'] = safesql($r['bio']); $r['signature'] = safesql($r['signature']); $r['website'] = safesql($r['website']); // Если личные фото в аплоадсах/профиле: if( stristr($r['pp_main_photo'], "profile/photo-".$r['mid']) and !preg_match( "/^http:\/\//", $r['pp_main_photo'] ) ) { $photo_type = "upload"; $photo_location = $r['pp_main_photo']; $photo_dimensions = $r['pp_main_width']."x".$r['pp_main_height']; if(file_exists( "../uploads/profile/photo-thumb-".$r['mid'].".jpg" ) and DO_MODE == 1)unlink("../uploads/profile/photo-thumb-".$r['mid'].".jpg"); } else { $photo_type = ""; $photo_location = ""; $photo_dimensions = ""; } // Если личные фото были в корне аплоадсов и попали в archive_in: $test_uploads_photo = "beginstring".$r['pp_main_photo']; if( stristr($test_uploads_photo, "beginstringphoto-".$r['mid']) and !stristr($r['pp_main_photo'], "http://") ) { $old_file = "../archive_in/".$r['pp_main_photo']; $old_file_t = "../archive_in/".$r['pp_thumb_photo']; $new_id = intval(MAX_MEMBER_ID) + intval($r['mid']); $new_file = "../uploads/".str_replace($r['mid'],$new_id,$r['pp_main_photo']); copy($old_file, $new_file); unlink($old_file); unlink($old_file_t); } if($r['temp_ban'] == "0" or $r['temp_ban'] == 0)$r['temp_ban'] = ""; $new_member_id = intval(MAX_MEMBER_ID) + intval($r['mid']); $query_m = "INSERT INTO ibf_members VALUES (".$new_member_id.", '".$r['name']."', 3, 'password', '".$r['email']."', ".$r['joined'].", '".$r['ip_address']."', '".$r['avatar_location']."', '".$r['avatar_size']."', '".$r['posts']."', '".$r['aim_name']."', '".$r['icq_number']."', '".$r['location']."', '".$r['signature']."', '".$r['website']."', '".$r['yahoo']."', '".$r['title']."', '".$r['allow_admin_mails']."', '".$r['time_offset']."', '".$r['interests']."', '".$r['hide_email']."', '".$r['email_pm']."', '".$r['email_full']."', 1, '".$r['warn_level']."', '".$r['warn_lastwarn']."', '2', '".$r['msnname']."', '".$r['last_post']."', '".$r['restrict_post']."', '".$r['view_sigs']."', '".$r['view_img']."', '".$r['view_avs']."', '".$r['view_pop']."', '".$r['bday_day']."', '".$r['bday_month']."', '".$r['bday_year']."', '".$r['new_msg']."', '', '', '".$r['msg_total']."', '".$r['vdirs']."', '".$r['show_popup']."', '".$r['misc']."', '".$r['last_visit']."', '".$r['last_activity']."', '".$r['dst_in_use']."', '".$r['view_prefs']."', '".$r['coppa_user']."', '".$r['mod_posts']."', '".$r['auto_track']."', '', 0, '', '".$r['temp_ban']."', '".$r['sub_end']."', 0, 0, 1, 0, 0, 0, '0', '', '', 0, 1, 1, 'black', 60, 1, 100, 1, 1, 1, '', '0', 0, 0)"; $query_e = "INSERT INTO ibf_member_extra VALUES (".$new_member_id.", '".$r['notes']."', '".$r['links']."', '".$r['bio']."', '".$r['ta_size']."', '".$photo_type."', '".$photo_location."', '".$photo_dimensions."', '', '', '', '-1&-1', 0, 0, 0, '', 1, 1, 1, 0, 0, 0, 1, 1, 500, 500, 0, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, '', '', 1)"; if(DO_MODE == 1){$DB->query($query_m); echo(". ");} elseif(DO_MODE == 2){echo($new_member_id.", ");} else{echo(str_replace("<","<",$query_m)."<br><br>");} if(DO_MODE == 1){$DB->query($query_e); echo(". ");} elseif(DO_MODE == 2){;} else{echo(str_replace("<","<",$query_e)."<br><br><br>");} } return true; } function do_users_pass() { global $DB, $ibforums, $root_path, $std, $INFO; echo("Миграция паролей пользователей:<br>"); $pass_query = $DB->query("SELECT c.converge_id, c.converge_id, c.converge_pass_hash, c.converge_pass_salt, m.id, m.name FROM ibf2_members_converge c LEFT JOIN ibf2_members m ON (c.converge_id=m.id)"); // Запрос паролей мемберов while ( $r = $DB->fetch_row($pass_query) ) { $r['converge_pass_hash'] = safesql($r['converge_pass_hash']); $r['converge_pass_salt'] = safesql($r['converge_pass_salt']); $new_member_id = intval($r['converge_id']) + intval(MAX_MEMBER_ID); $query = "INSERT INTO ibf_members_incoming VALUES (".$new_member_id.", '".$r['converge_pass_hash']."', '".$r['converge_pass_salt']."', '".$r['name']."')"; if(DO_MODE == 1){$DB->query($query); echo(". ");} elseif(DO_MODE == 2){echo($new_member_id.", ");} else{echo($query.";<br><br>");} } return true; } function do_pm() { global $DB, $ibforums, $root_path, $std, $INFO; echo("Миграция личных сообщений пользователей:<br>"); $pm_query = $DB->query("SELECT m.*, t.* FROM ibf2_message_topics m LEFT JOIN ibf2_message_text t ON (m.mt_msg_id=t.msg_id)"); while ( $r = $DB->fetch_row($pm_query) ) { $r['msg_post'] = safesql($r['msg_post']); $r['mt_title'] = safesql($r['mt_title']); $messafe_id = intval($r['mt_id']) + intval(MAX_PM_ID); $query = "INSERT INTO ibf_messages VALUES (".$messafe_id.", '".$r['mt_date']."', '".$r['mt_read']."', '".$r['mt_title']."', '".$r['msg_post']."', '".( intval($r['mt_from_id']) + intval(MAX_MEMBER_ID) )."', '".$r['mt_vid_folder']."', '".( intval($r['mt_owner_id']) + intval(MAX_MEMBER_ID) )."', '".( intval($r['mt_to_id']) + intval(MAX_MEMBER_ID) )."', '', '', '', '".$r['mt_tracking']."', '".$r['mt_user_read']."');"; if(DO_MODE == 1){$DB->query($query); echo(". ");} elseif(DO_MODE == 2){echo($messafe_id.", ");} else{echo(str_replace("<","<",$query)."<br><br>");} } return true; } function do_stats() { global $DB, $ibforums, $root_path, $std, $INFO; echo("Обновляем статистику реципиента:<br>"); $DB->query( "SELECT count( tid ) AS mid FROM ibf_topics" ); $out = $DB->fetch_row(); define('TOTAL_TOPICS', $out['pid']); // Чисто топиков $DB->query( "SELECT count(pid ) AS pid FROM ibf_posts" ); $out = $DB->fetch_row(); define('TOTAL_REPLIES', intval($out['pid']) - intval(TOTAL_TOPICS) ); // Чисто ответов $DB->query( "SELECT id, name FROM ibf_members ORDER BY id DESC LIMIT 0,1" ); $out = $DB->fetch_row(); define('LAST_MEM_NAME', $out['name']); // Имя последней регистрации define('LAST_MEM_ID', $out['id']); // ID последней регистрации $DB->query( "SELECT count(id) AS mid FROM ibf_members" ); $out = $DB->fetch_row(); define('MEM_COUNT', $out['mid']); // Чисто топиков $query = "UPDATE ibf_stats SET TOTAL_REPLIES = '".TOTAL_REPLIES."', TOTAL_TOPICS = '".TOTAL_TOPICS."', LAST_MEM_NAME = '".LAST_MEM_NAME."', LAST_MEM_ID = '".LAST_MEM_ID."', MOST_DATE = '".time()."', MOST_COUNT = '0', MEM_COUNT = '".MEM_COUNT."' LIMIT 1"; if(DO_MODE == 1){$DB->query($query); echo("<br>Обновили.");} else{echo(str_replace("<","<",$query)."<br><br>");} return true; } function safesql($txt){ $txt = str_replace("\'", "\ '", $txt); $txt = str_replace("'", "''", $txt); $txt .= " "; return $txt; } ?> Вроде ничего не забыл... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Exebit Опубликовано 29 Мая 2009 Жалоба Поделиться Опубликовано 29 Мая 2009 а наоборот из 1.3 в 2.3.х нету ни укого? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.