<?php
// Hata raporlamayı aç (sadece geliştirme ve test aşamasında kullanın)
ini_set('display_errors', 1);
error_reporting(E_ALL);
// Script'in zaman aşımına uğramasını engelle
set_time_limit(0);
// --- VERİTABANI AYARLARI ---
// Flarum veritabanı bilgilerinizi buraya girin
$flarum_db = [
'host' => 'localhost',
'name' => 'flarum_veritabani_adi',
'user' => 'flarum_kullanici_adi',
'pass' => 'flarum_sifresi'
];
// MyBB veritabanı bilgilerinizi buraya girin
// Genellikle MyBB'nin inc/config.php dosyasında bulunur
$mybb_db = [
'host' => 'localhost',
'name' => 'mybb_veritabani_adi',
'user' => 'mybb_kullanici_adi',
'pass' => 'mybb_sifresi'
];
// --- GEÇİCİ ŞİFRE AYARI ---
// Tüm kullanıcılara atanacak olan geçici şifre.
// Taşıma sonrası kullanıcılar bu şifreyle giriş yapamaz, "Şifremi Unuttum" kullanmaları gerekir.
// Güvenlik için bu değeri karmaşık bir şey yapabilirsiniz, ancak kullanıcılar bunu bilmeyecek.
define('GECICI_SIFRE', 'CokGuvEnliGeciciSifre!2025');
// --- VERİTABANI BAĞLANTILARI (PDO) ---
try {
$flarum_conn = new PDO("mysql:host={$flarum_db['host']};dbname={$flarum_db['name']};charset=utf8mb4", $flarum_db['user'], $flarum_db['pass']);
$flarum_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$mybb_conn = new PDO("mysql:host={$mybb_db['host']};dbname={$mybb_db['name']};charset=utf8mb4", $mybb_db['user'], $mybb_db['pass']);
$mybb_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Veritabanı bağlantı hatası: " . $e->getMessage());
}
echo "<h1>Flarum'dan MyBB'ye Kullanıcı Taşıma Script'i</h1>";
echo "<p>Bağlantılar başarılı. Taşıma işlemi başlıyor...</p>";
$tasinan_kullanici_sayisi = 0;
$atlanan_kullanici_sayisi = 0;
try {
// Flarum'dan tüm kullanıcıları çek
$stmt = $flarum_conn->query("SELECT id, username, email, joined_at, last_seen_at FROM users ORDER BY id ASC");
$flarum_users = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($flarum_users as $user) {
// Flarum'daki Yönetici (ID=1) genellikle MyBB'de zaten kuruludur.
// Çakışmaları önlemek için ilk kullanıcıyı atlayabilir veya e-posta ile kontrol edebilirsiniz.
if ($user['id'] == 1) {
echo "Yönetici kullanıcı (ID: 1 - {$user['username']}) atlandı.<br>";
$atlanan_kullanici_sayisi++;
continue;
}
// MyBB'de bu email veya kullanıcı adı zaten var mı diye kontrol et
$check_stmt = $mybb_conn->prepare("SELECT COUNT(*) FROM mybb_users WHERE username = ? OR email = ?");
$check_stmt->execute([$user['username'], $user['email']]);
if ($check_stmt->fetchColumn() > 0) {
echo "Kullanıcı adı '{$user['username']}' veya e-posta '{$user['email']}' MyBB'de zaten mevcut. Atlanıyor.<br>";
$atlanan_kullanici_sayisi++;
continue;
}
// MyBB için yeni şifre oluşturma
// 1. Salt oluştur (rastgele bir dize)
$salt = bin2hex(random_bytes(4)); // 8 karakterlik salt
// 2. Şifreyi MyBB formatında hash'le: md5(md5(salt) + md5(sifre))
$hashed_password = md5(md5($salt) . md5(GECICI_SIFRE));
// Kullanıcıyı MyBB veritabanına ekle
$insert_user = $mybb_conn->prepare("
INSERT INTO mybb_users
(username, password, salt, email, regdate, lastactive, lastvisit, usergroup, displaygroup, loginkey)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
");
$insert_user->execute([
$user['username'],
$hashed_password,
$salt,
$user['email'],
strtotime($user['joined_at']), // Flarum tarihini Unix timestamp'e çevir
strtotime($user['last_seen_at'] ?? 'now'), // Flarum'da null ise şimdiki zamanı kullan
strtotime($user['joined_at']), // İlk ziyareti kayıt tarihi olarak ayarlayalım
2, // Varsayılan "Registered" kullanıcı grubu ID'si
0, // Görünen grup (0 ise usergroup kullanılır)
bin2hex(random_bytes(25)) // Rastgele bir login key oluştur
]);
echo "Kullanıcı '{$user['username']}' başarıyla taşındı.<br>";
$tasinan_kullanici_sayisi++;
}
} catch (PDOException $e) {
die("<p style='color:red;'>Bir hata oluştu: " . $e->getMessage() . "</p>");
}
echo "<h2>Taşıma Tamamlandı!</h2>";
echo "<p style='color:green;'>Başarıyla taşınan kullanıcı sayısı: {$tasinan_kullanici_sayisi}</p>";
echo "<p style='color:orange;'>Atlanan (zaten mevcut veya yönetici) kullanıcı sayısı: {$atlanan_kullanici_sayisi}</p>";
?>