Przyjazne użytkownikom polskie wsparcie phpBB 3.0

phpBB3.PL

Przenoszenie danych z modyfikacji Przema

Spis treści

Przygotowanie do przeniesienia danych

Przy konwersji forum z phpBB2 modified by Przemo automatyczny konwerter nie przenosi do nowej bazy skryptu phpBB3 danych z modyfikacji dodanych do Przema, takich jak "Urodziny", "Dodatkowe pola profilu" czy też "Płeć użytkownika" itp. Część informacji wymaga samodzielnego zainstalowania dodatkowych MODów do phpBB3, ale pierwsze dwie są akurat w standardzie.

Można je jednak przenieść ręcznie, lecz nie jest to banalnie prosty sposób i wymaga poświęcenia pewnej ilości czasu, a zwłaszcza zwrócenia szczególnej uwagi na to, co się robi. Dlatego też przed przystąpieniem do realizowania jakichkolwiek przedstawionych w artykule kroków, wysoce zalecane jest wykonanie kopii zapasowej całego forum.

Na początek, by nie było potrzeby odwoływania się do starej bazy, co często byłoby bardzo utrudnione, należy tymczasowo przenieść z niej część danych do bazy nowego skryptu.

W tym celu bazie danych phpBB3 należałoby utworzyć nową tabelę o dowolnej nazwie (np. phpbb_usersbb2) i przenieść do niej dane z tabeli użytkowników z bazy Przema. Jak to zrobić najprościej?

  1. Wyeksportuj tabelę phpbb_users z bazy Przema do pliku.
  2. Otwórz wyeksportowany plik za pomocą odpowiedniego edytora tekstu (np. Notepad2) i zamień wszystkie wyrażenia "phpbb_users" na "phpbb_usersbb2".
  3. Zaimportuj tak zmieniony plik do bazy phpBB3.

Po zakończeniu przenoszenia danych z wszystkich modyfikacji, na których Ci zależy, usuń utworzoną tabelę phpbb_usersbb2, by niepotrzebnie nie zajmowała miejsca w bazie danych.

Przenoszenie danych dat urodzin użytkowników

  1. Wykonaj polecenie SQL:
    UPDATE `phpbb_users` SET `user_birthday` = (SELECT `user_birthday` FROM `phpbb_usersbb2` WHERE `phpbb_users`.`user_id` = `phpbb_usersbb2`.`user_id`);
  2. Skopiuj poniższy skrypt do pliku o dowolnej nazwie (np. sql.php). Następnie skopiuj ten plik do głównego katalogu forum, zaloguj się na stronę jako administrator i uruchom skrypt poprzez wpisanie jego lokalizacji w pasku adresu przeglądarki (np. www.twoje-forum.pl/sql.php). Oczywiście po wykonaniu skryptu i wyświetleniu wyniku, usuń plik z serwera.
<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
 
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup(array('acp/common'));
 
// Did user forget to login? Give 'em a chance to here ...
if ($user->data['user_id'] == ANONYMOUS)
{
  login_box('', $user->lang['LOGIN_ADMIN'], $user->lang['LOGIN_ADMIN_SUCCESS'], false);
}
 
// Is user any type of admin? No, then stop here, each script needs to
// check specific permissions but this is a catchall
if (!$auth->acl_get('a_'))
{
  trigger_error('NO_ADMIN');
}
 
 
// Two necessary functions to decode birthday date
// Straight from phpBB2 by Przemo: includes/functions.php
function create_date($format, $gmepoch, $tz, $no_today = false)
{
	$tz_add = ($board_config['auto_date']) ? (3600 * ($tz + (@date('I', $gmepoch) && @date('I', CR_TIME)))) : (3600 * $tz);
 
	$epoch_time = $gmepoch + $tz_add;
	$current_time = CR_TIME + $tz_add;
 
	$cyear = @gmdate('Y', $current_time);
	$cmonth = @gmdate('n', $current_time);
	$cday = @gmdate('j', $current_time);
	$chour = @gmdate('G', $current_time);
	$cmin = @gmdate('i', $current_time);
 
	$today_begin = @gmmktime(0, 0, 0, $cmonth, $cday, $cyear);
	$today_end = @gmmktime(23, 59, 59, $cmonth, $cday, $cyear);
	$yesterday_begin = $today_begin - 86400;
 
	if ( $epoch_time > $yesterday_begin && $epoch_time < $today_end && !$no_today )
	{
		if ( $epoch_time < $today_begin )
		{
			return $lang['Yesterday'] . ' ' . @gmdate('G:i', $epoch_time);
		}
		else
		{
			return $lang['Today'] . ' ' . @gmdate('G:i', $epoch_time);
		}
	}
 
	return ( !empty($translate) ) ? strtr(@gmdate($format, $epoch_time), $translate) : @gmdate($format, $epoch_time);
}
 
function realdate($date_syntax = "Ymd", $date=0)
{
	$i=2;
	if ($date>=0)
	{
		 return create_date($date_syntax, $date * 86400 + 1, 0, true);
	}
	else
	{
		$year= -(date%1461);
		$days = $date + $year * 1461;
		while ($days<0)
		{
			$year--;
			$days+=365;
			if ($i++==3)
			{
				$i=0;
				$days++;
			}
		}
	}
	$leap_year = ($i==0) ? TRUE : FALSE;
	$months_array = ($i==0) ?
		array (0,31,60,91,121,152,182,213,244,274,305,335,366) :
		array (0,31,59,90,120,151,181,212,243,273,304,334,365);
	for ($month=1;$month<12;$month++)
	{
		if ($days<$months_array[$month]) break;
	}
 
	$day=$days-$months_array[$month-1]+1;
 
	return strtr ($date_syntax, array(
		'\\d' => 'd',
		'd' => ($day>9) ? $day : '0'.$day,
		'\\D' => 'D',
		'D' => $lang['day_short'][($date-3)%7],
		'\\m' => 'm',
		'm' => ($month>9) ? $month : '0'.$month,
		'\\M' => 'M',
		'M' => $lang['month_short'][$month-1],
		'\\y' => 'y',
		'y' => ($year>29) ? $year-30 : $year+70,
		'\\Y' => 'Y',
		'Y' => $year+1970) );
}
 
 
// Just do it! :D
$sql = 'SELECT user_id, username, user_birthday
        FROM ' . USERS_TABLE . '
        ORDER BY user_id';
$result = $db->sql_query($sql);
 
header('Content-type: text/html; charset=UTF-8');
while ($row = $db->sql_fetchrow($result))
{
  echo "<b>ID:</b> " . $row[user_id] . "<br />";
  echo "<b>Nick:</b> " . $row[username] . "<br />";
  echo "<b>Zakodowana data urodzin:</b> " . $row[user_birthday] . "<br />";
 
  if ($row[user_birthday] === "") $row[user_birthday] = "";
  elseif ($row[user_birthday] == 999999) $row[user_birthday] = " 0- 0-   0";
  else $row[user_birthday] = realdate('d-m-Y', $row[user_birthday]);
  echo "<b>Zdekodowana data urodzin:</b> " . $row[user_birthday] . "<br /><br />";
 
  $sql = 'UPDATE ' . USERS_TABLE . ' SET
          user_birthday = \'' . $row[user_birthday] . '\'
          WHERE user_id = ' . $row[user_id] . '';
  $db->sql_query($sql);
}
?>
  1. Wykonaj polecenie SQL:
    UPDATE `phpbb_users` SET `user_birthday` = '' WHERE `user_birthday` = ' 0- 0-   0';


Przenoszenie danych dodatkowych pól profilu

  1. W Panelu administratora skonwertowanego forum phpBB3 utwórz pola profilu, które istniały w phpBB2 by Przemo, najlepiej w takiej samej kolejności, w jakiej one tam występowały.
  2. Jeżeli jakiekolwiek pole profilu jest w postaci listy rozwijalnej (jumpbox), wykonaj poniższe polecenie SQL:
    ALTER TABLE `phpbb_profile_fields_data` CHANGE `pf_polerozw` `pf_polerozw` VARCHAR( 255 ) NULL DEFAULT NULL;
    gdzie pf_polerozw to przykładowa nazwa pola będącego tą listą. Jeśli takich pól jest więcej, wykonaj ww. polecenie SQL dla każdego z nich.
  3. Aby skopiować dane pól profilu, wykonaj następujące polecenie SQL:
    INSERT INTO `phpbb_profile_fields_data` (`user_id`, `pf_poletest1`, `pf_poletest2`, `pf_polerozw`) SELECT `user_id`, `user_field_1`, `user_field_2`, `user_field_3` FROM `phpbb_usersbb2`;
    gdzie pf_poletest1, pf_poletest2 i pf_polerozw to kolejne pola w bazie phpBB3 o przykładowych nazwach, a user_field_1 itd. to kolejne pola w bazie Przema ze stałymi nazwami różniącymi się tylko końcowym numerkiem. Oczywiście nic nie stoi na przeszkodzie, by zaimportować większą lub mniejszą liczbę pól niż 3 - po prostu należy dopisać ich nazwy po przecinkach lub je stamtąd usunąć. Pamiętaj tylko, by zrobić to dwukrotnie - zarówno w części polecenia SQL odnoszącej się do phpBB3, jak i Przema.
  4. W przypadku wspomnianej w punkcie 3. listy rozwijalnej, należy zamienić zapisane nazwy na kolejne numery listy rozwijalnej, zaczynając od 1. Służy do tego polecenie SQL:
    UPDATE `phpbb_profile_fields_data` SET `pf_polerozw` = '1' WHERE `phpbb_profile_fields_data`.`pf_polerozw` = 'Opcja1';
    gdzie liczba 1 oznacza kolejny numer, a Opcja1 - tekst, który jest ustawiony jako pierwsza opcja tejże listy. Polecenie SQL należy wykonać tyle razy, ile jest opcji w liście rozwijalnej, oczywiście analogicznie je za każdym razem modyfikując, np.:
    UPDATE `phpbb_profile_fields_data` SET `pf_polerozw` = '2' WHERE `phpbb_profile_fields_data`.`pf_polerozw` = 'Opcja2';
    UPDATE `phpbb_profile_fields_data` SET `pf_polerozw` = '3' WHERE `phpbb_profile_fields_data`.`pf_polerozw` = 'Opcja3';
  5. Należy jeszcze przywrócić pierwotny typ pól list rozwijalnych, który został zmieniony w punkcie 3. W tym celu wykonaj polecenie SQL:
    ALTER TABLE `phpbb_profile_fields_data` CHANGE `pf_polerozw` `pf_polerozw` VARCHAR( 255 ) NULL DEFAULT NULL;
    gdzie pf_polerozw to przykładowa nazwa pola będącego tą listą. Jeśli takich pól jest więcej, wykonaj ww. zapytanie dla każdego z nich.
  6. Praca zakończona, wszystko powinno już działać. Teraz wystarczy już tylko sprawdzić, czy dane zostały skopiowane w sposób prawidłowy (np. przeglądając profile kilkunastu użytkowników). Jeśli pola profilu w ogóle się nie wyświetlają w widoku tematu czy też w widoku profilu, a w ustawieniach Panelu administratora ich wyświetlanie jest włączone, wyedytuj profil dowolnego użytkownika (np. swój poprzez Panel użytkownika), zmień dane pól profilu na dowolne, a potem je przywróć.


Przenoszenie danych płci użytkowników

  1. Zainstaluj modyfikację Genders MOD.
  2. Wykonaj polecenie SQL:
    UPDATE `phpbb_users` SET `user_gender` = (SELECT `user_gender` FROM `phpbb_usersbb2` WHERE `phpbb_users`.`user_id` = `phpbb_usersbb2`.`user_id`);

Przenoszenie danych łącznego czasu wizyt

  1. Zainstaluj modyfikację User Online Time.
  2. Wykonaj polecenie SQL:
    UPDATE `phpbb_users` SET `user_online_time` = (SELECT `user_spend_time` FROM `phpbb_usersbb2` WHERE `phpbb_users`.`user_id` = `phpbb_usersbb2`.`user_id`);


Przenoszenie danych tytułu użytkownika

  1. Zainstaluj modyfikację Custom Title Mod.
  2. Wykonaj polecenie SQL:
    UPDATE `phpbb_users` SET `user_custom_title` = (SELECT `user_custom_rank` FROM `phpbb_usersbb2` WHERE `phpbb_users`.`user_id` = `phpbb_usersbb2`.`user_id`);
  3. Napraw polskie znaki:
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, '³', 'ł');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, 'Ăł', 'ó');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, 'ê', 'ę');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, '¶', 'ś');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, '±', 'ą');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, 'æ', 'ć');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, 'ñ', 'ń');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, '¿', 'Ż');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, '¼', 'ź');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, '³', 'Ł');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, '¶', 'Ś');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, 'æ', 'Ć');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, 'ê', 'Ę');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, 'Ó', 'Ó');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, '¿', 'ż');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, '¼', 'Ź');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, '±', 'Ą');
UPDATE `phpbb_users` SET `user_custom_title` = REPLACE(`user_custom_title`, 'ñ', 'Ń');

Zaloguj  •  Zarejestruj