feat: Anki export button - download all 190 cards as TSV file from flashcards page
Dieser Commit ist enthalten in:
Ursprung
8795d61046
Commit
64f116afff
2 geänderte Dateien mit 37 neuen und 2 gelöschten Zeilen
|
|
@ -18,6 +18,38 @@ if (get_method() === 'GET' && empty($segments[1])) {
|
|||
json_ok(['decks' => $stmt->fetchAll()]);
|
||||
}
|
||||
|
||||
// GET /api/decks/export-anki — download all cards as Anki TSV
|
||||
if (get_method() === 'GET' && ($segments[1] ?? '') === 'export-anki') {
|
||||
$stmt = $pdo->query("
|
||||
SELECT d.name AS deck_name, c.question, c.answer, c.level
|
||||
FROM cards c JOIN decks d ON d.id = c.deck_id
|
||||
ORDER BY d.sort_order, d.name, c.sort_order
|
||||
");
|
||||
$cards = $stmt->fetchAll();
|
||||
|
||||
header('Content-Type: text/tab-separated-values; charset=utf-8');
|
||||
header('Content-Disposition: attachment; filename="sol2_training_anki_' . date('Y-m-d') . '.txt"');
|
||||
header('Cache-Control: no-cache');
|
||||
|
||||
// Clean markdown formatting for Anki: backticks -> <code>, ** -> <b>
|
||||
function anki_format($text) {
|
||||
$t = $text;
|
||||
$t = preg_replace('/```(\w*)\n(.*?)```/s', '<pre><code>$2</code></pre>', $t);
|
||||
$t = str_replace('`', '', $t);
|
||||
$t = preg_replace('/\*\*(.+?)\*\*/', '<b>$1</b>', $t);
|
||||
$t = str_replace("\n", '<br>', $t);
|
||||
$t = str_replace("\t", ' ', $t);
|
||||
return $t;
|
||||
}
|
||||
|
||||
foreach ($cards as $c) {
|
||||
$q = anki_format($c['question']);
|
||||
$a = anki_format($c['answer']);
|
||||
echo $q . "\t" . $a . "\t" . 'Sol2-Training::' . $c['deck_name'] . "\t" . $c['level'] . "\n";
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
// GET /api/decks/{slug}
|
||||
if (get_method() === 'GET' && !empty($segments[1])) {
|
||||
$stmt = $pdo->prepare("SELECT * FROM decks WHERE slug = :s");
|
||||
|
|
|
|||
Laden …
Tabelle hinzufügen
Einen Link hinzufügen
In neuem Issue referenzieren