【Wakarana】旧バージョン(21.11以前)からのアカウント移行
Wakarana(23.10-1以降)で、21.11以前のバージョンのSQLiteデータベースから、バージョン23.10-1のデータベースにデータを引き継ぐサンプルコードです。旧バージョンのWakarana本体(main.php、config.php、common.php)は新バージョンのものに置き換えてから実行してください。
このコードを実行すると、旧バージョンのデータベースは「wakarana_old.db」にリネームされ、23.10-1に対応した「wakarana.db」が生成されます。
なお、バージョン23.09-1において権限管理の仕組みが変更されているため、特権管理者権限以外の権限は引き継ぐことができません。
また、このコードではログイン情報の移行は行わないため、処理後はユーザーがログアウト状態になります。
21.11to23.10-1.php
<?php
include "wakarana/main.php";
include "wakarana/config.php";
print "Wakaranaデータベースをバージョン23.10-1へ移行します。\n";
$wakarana_old_db = new PDO("sqlite:wakarana/wakarana.db");
$stmt = $wakarana_old_db->query("SELECT * FROM `wakarana_users`");
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
$wakarana_old_db = NULL;
rename("../config/wakarana.db", "../config/wakarana_old.db");
print "古いデータベースからデータを抽出しました。\n";
$wakarana_config = new wakarana_config(dirname(__DIR__)."/config");
$wakarana_config->setup_db();
print "新しいデータベースを生成しました。\n";
$wakarana = new wakarana(dirname(__DIR__)."/config");
foreach ($users as $user) {
$new_user = $wakarana->add_user($user["user_id"], "Password1234", $user["user_name"], $user["status"]);
$new_user->add_email_address($user["mail_address"]);
$wakarana->db_obj->query('UPDATE "wakarana_users" SET "password"=\''.$user["password"].'\', "user_created"=\''.$user["user_created"].'\', "last_updated"=\''.$user["last_updated"].'\', "last_access"=\''.$user["last_access"].'\' WHERE "user_id" = \''.$user["user_id"].'\'');
if (!empty($user["totp_key"])) {
$new_user->enable_2_factor_auth($user["totp_key"]);
}
if ($user["is_master"]) {
$new_user->add_role(WAKARANA_ADMIN_ROLE);
}
print "ユーザー \"".$user["user_id"]."\" をコピーしました。\n";
}
print "処理が完了しました。\n";