master
ブランチ master
LittleBeast / view / admin / convert.maron
4.4 KB、83行 生 Blame 履歴
1{@ include(common/header) @}
2{@ include(admin/nav) @}
3 <h1 class="paragraph">データベースの変換</h1>
4 <p class="paragraph">MySQL・MariaDB、PostgreSQL、SQLite、SQLのダンプ、data/のJSONのデータを相互に変換します。外部キー・ビュー・トリガーは変換しません。サイトが使っているデータベースから・へ変換する場合は、先に書き込みを止めて下さい。</p>
5{@ if ($result) @}
6 <div class="admin-result">
7 <h2>変換しました({{ $result['rows'] }}行、{{ $result['seconds'] }}秒)</h2>
8 <table class="admin-table">
9 <thead><tr><th>テーブル</th><th>行</th></tr></thead>
10 <tbody>
11{@ foreach ($result['tables'] as $t => $n) @}
12 <tr><td>{{ $t }}</td><td>{{ $n }}</td></tr>
13{@ endforeach @}
14 </tbody>
15 </table>
16{@ if (isset($result['download'])) @}
17 <p class="paragraph"><a href="{{ $result['download'] }}"><b>{{ $result['downloadName'] }}をダウンロード</b></a>({{ $result['downloadSize'] }}、1時間で消えます)</p>
18{@ endif @}
19{@ if (!empty($result['warnings'])) @}
20 <h3>注意</h3>
21 <ul>
22{@ foreach ($result['warnings'] as $w) @}
23 <li>{{ $w }}</li>
24{@ endforeach @}
25 </ul>
26{@ endif @}
27 </div>
28{@ endif @}
29{@ if ($tables !== null) @}
30 <div class="admin-result">
31 <h2>読む元のテーブル({{ count($tables) }}件)</h2>
32{@ if (empty($tables)) @}
33 <p>テーブルは有りません。</p>
34{@ else @}
35 <p>{{ implode('、', array_map(fn($t) => $t['name'].'('.$t['columns'].'列)', $tables)) }}</p>
36{@ endif @}
37 </div>
38{@ endif @}
39 <form method="post" action="/admin/convert" enctype="multipart/form-data" class="admin-convert">
40 <input type="hidden" name="csrf_token" value="{{ $csrf }}" />
41{$ $p = 'src' $}
42{$ $s = $f['src'] $}
43 <fieldset>
44 <legend>読む元</legend>
45{@ include(admin/convert-side) @}
46 <div class="admin-kind" data-kind="dump">
47 <label>ダンプ・SQLiteのファイル:<input type="file" name="src_file" /></label>
48 <input type="hidden" name="src_upload" value="{{ $s['upload'] }}" />
49{@ if ($s['upload'] !== '') @}
50 <small>アップロードしたファイルを使います(別のファイルを選ぶと置き換え)。</small>
51{@ endif @}
52 <label>又はサーバーのファイル:<input type="text" name="src_dumppath" value="{{ $s['dumppath'] }}" placeholder="例:data/dump.sql" /></label>
53 <small>mysqldump、pg_dump(プレーンの形式)、sqlite3の.dump、このページで作ったダンプ(.sql{{ $zlib ? '・.sql.gz' : '' }})</small>
54 </div>
55 </fieldset>
56{$ $p = 'dst' $}
57{$ $s = $f['dst'] $}
58 <fieldset>
59 <legend>書く先</legend>
60{@ include(admin/convert-side) @}
61 <div class="admin-kind" data-kind="dump">
62 <label>方言:
63 <select name="dst_dialect">
64{@ foreach (['mysql' => 'MySQL・MariaDB', 'pgsql' => 'PostgreSQL', 'sqlite' => 'SQLite'] as $k => $label) @}
65 <option value="{{ $k }}"{{{ $s['dialect'] === $k ? ' selected="selected"' : '' }}}>{{ $label }}</option>
66{@ endforeach @}
67 </select>
68 </label>
69{@ if ($zlib) @}
70 <label><input type="checkbox" name="dst_gzip" value="1"{{{ $s['gzip'] ? ' checked="checked"' : '' }}} /> gzipで圧縮</label>
71{@ endif @}
72 <label>サーバーのファイル(空ならダウンロード):<input type="text" name="dst_dumppath" value="{{ $s['dumppath'] }}" placeholder="例:data/backup.sql" /></label>
73 </div>
74 <label><input type="checkbox" name="dst_overwrite" value="1"{{{ $s['overwrite'] ? ' checked="checked"' : '' }}} /> 空でないディレクトリ・有るファイルに書く(JSON・ダンプ)</label>
75 <label><input type="checkbox" name="drop" value="1"{{{ $f['drop'] ? ' checked="checked"' : '' }}} /> 同じ名前のテーブルが有れば消して置き換える</label>
76 </fieldset>
77 <label>テーブル(カンマ区切り、空なら全部):<input type="text" name="tables" value="{{ $f['tables'] }}" /></label>
78 <div class="admin-row">
79 <button name="do" value="inspect">テーブルを確認</button>
80 <button name="do" value="run" class="danger">変換</button>
81 </div>
82 </form>
83{@ include(common/footer) @}