feat: améliorer styles dark mode avec background unifié #20293a, bordures notes/cards (1px solid #000 light, #dedfe2 dark), width input 600px→800px, ajout bouton pin corner absolu (top-right, hover scale 1.06), suppression backgrounds/borders/outlines inputs (transparent + !important), nettoyage code dupliqué note-input-collapsed, styles todo-draft-row transparent, et corrections mineures formatage CSS (espaces, indentation)
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
/**
|
||||
* migrate-todos.php
|
||||
*
|
||||
* Script de migration batch : remplace tous les todos legacy (shaarli-todo)
|
||||
* par la norme Android (tag `todo` + URL `https://shaarit.app/todo/{uuid}`).
|
||||
*
|
||||
* À exécuter une seule fois via CLI ou interface web (si accessible).
|
||||
* Usage: php migrate-todos.php
|
||||
*/
|
||||
|
||||
// Déterminer le chemin racine de Shaarli
|
||||
$rootDir = dirname(dirname(dirname(__FILE__)));
|
||||
require_once $rootDir . '/index.php';
|
||||
|
||||
// Vérifier que Shaarli est chargé
|
||||
if (!isset($GLOBALS['shaarli'])) {
|
||||
die("Erreur : Shaarli non chargé.\n");
|
||||
}
|
||||
|
||||
$linkDb = $GLOBALS['shaarli']->getContainer()->get('db');
|
||||
if (!$linkDb) {
|
||||
die("Erreur : base de données non accessible.\n");
|
||||
}
|
||||
|
||||
// Récupérer tous les liens avec le tag shaarli-todo
|
||||
$allLinks = $linkDb->getLinks();
|
||||
$todosToMigrate = [];
|
||||
|
||||
foreach ($allLinks as $link) {
|
||||
$tags = explode(' ', $link->getTags());
|
||||
$hasTodoTag = in_array('shaarli-todo', $tags, true);
|
||||
if ($hasTodoTag) {
|
||||
$todosToMigrate[] = $link;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($todosToMigrate)) {
|
||||
echo "Aucun todo à migrer.\n";
|
||||
exit(0);
|
||||
}
|
||||
|
||||
echo "Trouvé " . count($todosToMigrate) . " todo(s) à migrer.\n";
|
||||
|
||||
// Fonction pour générer un UUID court (style Android)
|
||||
function generateTodoUuid() {
|
||||
if (function_exists('random_bytes')) {
|
||||
$bytes = random_bytes(9);
|
||||
$out = '';
|
||||
for ($i = 0; $i < 9; $i++) {
|
||||
$out .= str_pad(base_convert(ord($bytes[$i]), 10, 36), 2, '0', STR_PAD_LEFT);
|
||||
}
|
||||
return substr($out, 0, 12);
|
||||
}
|
||||
return substr(base_convert(time(), 10, 36) . base_convert(mt_rand(), 10, 36), 0, 12);
|
||||
}
|
||||
|
||||
// Migrer chaque todo
|
||||
$migrated = 0;
|
||||
$errors = 0;
|
||||
|
||||
foreach ($todosToMigrate as $link) {
|
||||
try {
|
||||
$tags = explode(' ', $link->getTags());
|
||||
|
||||
// 1. Remplacer shaarli-todo par todo
|
||||
$tags = array_filter($tags, function ($t) {
|
||||
return $t !== 'shaarli-todo';
|
||||
});
|
||||
$tags = array_values($tags);
|
||||
if (!in_array('todo', $tags, true)) {
|
||||
$tags[] = 'todo';
|
||||
}
|
||||
$link->setTags($tags);
|
||||
|
||||
// 2. Générer URL Android si vide ou legacy
|
||||
$url = $link->getUrl();
|
||||
if (empty($url) || strpos($url, 'http://shaarli-todo') === 0 || strpos($url, 'https://shaarli-todo') === 0) {
|
||||
$uuid = generateTodoUuid();
|
||||
$link->setUrl('https://shaarit.app/todo/' . $uuid);
|
||||
}
|
||||
|
||||
// Sauvegarder
|
||||
$linkDb->save($link);
|
||||
$migrated++;
|
||||
echo "✓ Migré : {$link->getTitle()} ({$link->getId()})\n";
|
||||
} catch (Exception $e) {
|
||||
$errors++;
|
||||
echo "✗ Erreur : {$link->getTitle()} - {$e->getMessage()}\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo "\n=== Résumé ===\n";
|
||||
echo "Migrés : $migrated\n";
|
||||
echo "Erreurs : $errors\n";
|
||||
echo "Total : " . count($todosToMigrate) . "\n";
|
||||
|
||||
if ($errors === 0) {
|
||||
echo "\n✓ Migration terminée avec succès !\n";
|
||||
exit(0);
|
||||
} else {
|
||||
echo "\n⚠ Migration terminée avec $errors erreur(s).\n";
|
||||
exit(1);
|
||||
}
|
||||
Reference in New Issue
Block a user