Midari Create > webアプリケーション製品 > Wakarana > サンプルコード >

【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";