V2 Migration Forum : Différence entre versions

De NoFrag
Aller à : navigation, rechercher
(Proposition de traitement)
(Contenu remplacé par « == Objectif == * Basculer le forum vers phpbb 3.2 * Ancien forum (à peu près) : https://github.com/Conardo/wefrag == Architecture applicative == * phpbb 3.2 * Plug-... »)
(Balise : Remplacé)
 
(19 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 5 : Ligne 5 :
 
== Architecture applicative ==
 
== Architecture applicative ==
 
* phpbb 3.2
 
* phpbb 3.2
* Plug-in de modération des topics créés par l'utilisateur : https://github.com/DakinQuelia/phpBB31-Moderate-Own-Topics
 
 
* Plug-in de tribune : https://www.phpbb.com/customise/db/extension/ajax_shoutbox/
 
* Plug-in de tribune : https://www.phpbb.com/customise/db/extension/ajax_shoutbox/
* Plug-in spoiler : https://www.phpbb-fr.com/customise/db/bbcode/bbcode_spoiler/
 
 
 
== Avancement ==
 
* Migration utilisateurs prête pour tests
 
** Voir si il existe des users désactivés dans la base wefrag pour les conserver désactivés.
 
 
== Procédure ==
 
=== Analyse ===
 
* Récupérer [http://nofrag.com/temporary/dumpforum.sql le dump du forum].
 
* Installer un xampp ou équivalent
 
* Installer phpbb sur son poste
 
* Utiliser DBeaver ou tout autre autre outil équivalent pour comparer les tables phpbb avec celles du forum (travail manuel)
 
=== Transposition ===
 
==== Proposition de traitement ====
 
** Migration manuelle des catégories et forums
 
** Migration de tous les utilisateurs avec pour groupe '''registered''' ou '''admin'''.
 
*** On génère les mots de passe qu'on stocke avec login et email et ancien user wefrag, on traitera le fichier en batch pour envoyer les mots de passe à chacun par mail.
 
*** On crée une table de correspondance entre iduser wefrag et iduser phpbb et mot de passe provisoire.
 
** On modifie les tables des topics et posts pour mettre les bons numéros de catégorie / forums manuellement.
 
** On traite les topics.
 
*** Pour chaque message de la table wefrag_posts triés par date ascendante :
 
**** Récupérer login et mdp provisoire de l'auteur du message
 
**** Login sur phpbb via l'api avec ces identifiants
 
**** si premier message de topic, message de type post
 
**** sinon, message de type reply
 
**** '''Remarque : les liens vers topics et posts contenus dans les message ne peuvent pas être mis à jour car on ne connait pas à l'avance le numéro du message…'''
 
**** on stocke dans un fichier le numéro du topic renvoyé par la méthode de création avec l'id de l'ancien topic pour l'utiliser sur la table de tracking de lecture (table de correspondance).
 
*** message suivant
 
** On traite la table de tracking en utilisant la table de correspondance.
 
** Envoi par mail des mots de passe par un batch (ou outil genre mailchimp ?)  en invitant l'utilisateur à le changer au premier login.
 
 
== Liste des tables ==
 
=== Table phpbb_users ===
 
  Voir pour utiliser [https://wiki.phpbb.com/Add_users l'API phpbb add_users]
 
 
  Test effectué sous [https://github.com/bibiwan/migrationforumwefragv2/blob/master/testuser.php github].
 
 
 
* user_id (int(10) unsigned) => wefrag_users.id(int(11))
 
* user_type(tinyint(2)) => 0
 
**  0 pour tous les inscrits admins compris
 
**  1 quand pas encore activé
 
**  2 pour ignorer l'utilisateur (?) ex. bot
 
**  3 pour les "Founders" : sorte de super-admin en god mode
 
**  Voir https://wiki.phpbb.com/Table.phpbb_users
 
* group_id(mediumint(8) unsigned) => phpbb_groups.group_id
 
* user_permission(mediumtext) => ''vide''
 
* user_perm_from(mediumint(8) unsigned) => 0
 
* user_ip(varchar(40)) => ''vide''
 
* user_regdate(int(11) unsigned) => ''vide''
 
* username(varchar(255)) => wefrag_users.login(varchar(255))
 
* username_clean(varchar(255)) => wefrag_users.login(varchar(255))
 
* user_password(varchar(255)) => wefrag_users.crypted_password(varchar(40))
 
**  Phpbb :[https://wiki.phpbb.com/Function.phpbb_check_hash techno proprio]?
 
**  Wefrag : [https://github.com/Conardo/wefrag/blob/master/app/models/user.rb sha1 ? voir ligne 220]
 
* user_passch (int(11) unsigned) => '''wefrag_user_password_resets.?'''
 
**  ''pas forcément nécessaire''
 
* user_email(varchar(100)) => wefrag_users.email(varchar(255))
 
**  vérifier longueur max en table
 
* user_email_hash(bigint(20)) =>
 
**  d'après [https://www.phpbb.com/community/viewtopic.php?f=71&t=570125 ce lien] : crc32(strtolower($user_email)) . strlen($user_email),
 
**  '''à tester'''
 
* user_birthday(varchar(10)) => wefrag_users.birthdate(date)
 
* user_lastvisit(int(11) unsigned) => 0
 
* user_lastmark(int(11) unsigned) => 0
 
* user_lastpost_time(int(11) unsigned) =>
 
  Récupérer la date du dernier post.
 
* user_lastpage(varchar(200)) => ''vide''
 
* user_last_confirm_key(varchar(10)) => ''vide''
 
* user_last_search(int(11) unsigned) => ''0''
 
* user_warnings(tinyint(4))  => ''0''
 
* user_last_warning(int(11) unsigned)  => ''0''
 
* user_login_attempts(tinyint(4))  => ''0''
 
* user_inactive_reason(tinyint(2)) => ''0''
 
* user_inactive_time(int(11) unsigned) => ''0''
 
* user_posts(mediumint(8) unsigned) =>
 
  Alimenter le nombre de posts
 
* user_lang(varchar(30)) => ''fr''
 
* user_timezone(varchar(100)) => ''vide''
 
* user_dateformat(varchar(64)) => ''D j M Y H:i''
 
* user_style(mediumint(8) unsigned) => ''0''
 
* user_rank(mediumint(8) unsigned) => ''0''
 
* user_colour(varchar(6)) => ''vide''
 
* user_new_privmsg(int(4)) => ''0''
 
* user_unread_privmsg(int(4)) => ''0''
 
* user_last_privmsg(int(11) unsigned) => ''0''
 
* user_message_rules(tinyint(1) unsigned)=> ''0''
 
* user_full_folder(int(11))=> ''-3''
 
* user_emailtime(int(11) unsigned)=> ''0''
 
* user_topic_show_days(smallint(4) unsigned) => ''0''
 
* user_topic_sortby_type(varchar(1)) => '''t'''
 
* user_topic_sortby_dir (varchar(1)) => '''d'''
 
* user_post_show_days (smallint(4) unsigned) =>  ''0''
 
* user_post_sortby_type(varchar(1)) => '''t'''
 
* user_post_sortby_dir (varchar(1)) => '''a'''
 
* user_notify (tinyint(1) unsigned) =>  ''0''
 
* user_notify_pm (tinyint(1) unsigned) => ''1''
 
* user_notify_type (tinyint(4))=>  ''0''
 
* user_allow_pm(tinyint(1) unsigned) => ''1''
 
* user_allow_viewonline(tinyint(1) unsigned) => ''1''
 
* user_allow_viewemail(tinyint(1) unsigned) => ''1''
 
* user_allow_massemail(tinyint(1) unsigned) => ''1''
 
* user_options( int(11) UNSIGNED) => ''230271''
 
* user_avatar (varchar(255)) => ''vide''
 
* user_avatar_type (varchar(255)) => ''vide''
 
* user_avatar_width (smallint(4) unsigned) =>  ''0''
 
* user_avatar_height (smallint(4) unsigned) =>  ''0''
 
* user_sig (mediumtext) => ''vide''
 
* user_sig_bbcode_uid (varchar(8)) => ''vide''
 
* user_sig_bbcode_bitfield (varchar(255)) => ''vide''
 
* user_jabber (varchar(255)) => ''vide''
 
* user_actkey (varchar(32)) => ''vide''
 
* user_newpasswd (varchar(255)) => ''vide''
 
* user_form_salt (varchar(32)) => '''''????'''''
 
* user_new (tinyint(1)) => ''1''
 
* user_reminded (tinyint(4)) => ''0''
 
* user_reminded_time (int(11) UNSIGNED) => ''0''
 
 
=== phpbb_forums ===
 
  Cette entité contient les catégories (wefrag_categories)et les forums (wefrag_forums). Il faut donc prévoir un premier passage pour les catégories et un second pour les forums, et une renumérotation des catégories avec création d'une table de correspondance.
 
 
  Autre solution : saisie manuelle des catégories, mise à jour de la table wefrag_forums avec les bonnes catégories.
 
 
  3ème solution : saisie manuelle des catégories et des forums, mise à jour de la table wefrag_posts avec les bonnes catégories et forums.
 
 
==== Catégories ====
 
* forum_id (mediumint(8) unsigned) => wefrag_categories.id (table de correspondance)
 
* parent_id (mediumint(8) unsigned) => ''0''
 
* left_id (mediumint(8) unsigned) => ''????''
 
* right_id (mediumint(8) unsigned) => ''????''
 
* forum_parents (mediumtext) => ''vide''
 
* forum_name (varchar(255)) => wefrag_categories.title (varchar(255))
 
* forum_desc (text) => ''vide''
 
* forum_desc_bitfield (varchar(255)) =>  ''vide''
 
* forum_desc_options (int(11) unsigned) =>  ''7''
 
* forum_desc_uid (varchar(8)) =>  ''vide''
 
* forum_link (varchar(255)) => ''vide''
 
* forum_password (varchar(255)) => ''vide''
 
* forum_style (mediumint(8) unsigned) => ''0''
 
* forum_image (varchar(255)) => ''vide''
 
* forum_rules (text) => ''vide''
 
* forum_rules_link (varchar(255)) => ''vide''
 
* forum_rules_bitfield (varchar(255)) => ''vide''
 
* forum_rules_options (int(11) unsigned) => ''7''
 
* forum_rules_uid (varchar(8))  => ''vide''
 
* forum_topics_per_page (tinyint(4)) => ''0''
 
* forum_type (tinyint(4)) => ''0''
 
* forum_status (tinyint(4)) => ''0''
 
* forum_last_post_id (int(10) unsigned) => ''à mettre à jour avec l'identifiant du dernier post de la catégorie''
 
* forum_last_poster_id (int(10) unsigned) => ''à mettre à jour avec l'identifiant du poster du dernier post de la catégorie''
 
* forum_last_post_subject (varchar(255)) => ''à mettre à jour avec le sujet du dernier post de la catégorie''
 
* forum_last_post_time (int(11) unsigned ) => ''à mettre à jour avec le datetime du dernier post de la catégorie''
 
* forum_last_poster_name(varchar(255)) => ''à mettre à jour avec le login du poster du dernier post de la catégorie''
 
* forum_last_poster_colour(varchar(6)) => ''à mettre à jour avec la couleur du poster du dernier post de la catégorie''
 
* forum_flags (tinyint(4)) => ''32''
 
* display_on_index (tinyint(1) unsigned) => ''1''
 
* enable_indexing (tinyint(1) unsigned ) => ''1''
 
* enable_icons(tinyint(1) unsigned ) => ''1''
 
* enable_prune(tinyint(1) unsigned ) => ''0''
 
* prune_next (int(11) unsigned)=> ''0''
 
* prune_days (mediumint(8) unsigned)=> ''0''
 
* prune_viewed(mediumint(8) unsigned)=> ''0''
 
* prune_freq(mediumint(8) unsigned)=> ''0''
 
* display_subforum_list (tinyint(1) unsigned)=> ''1''
 
* forum_options(int(20) unsigned)=> ''0''
 
* forum_posts_approved (mediumint(8) unsigned)=> ''0''
 
* forum_posts_unapproved (mediumint(8) unsigned)=> ''0''
 
* forum_posts_softdeleted (mediumint(8) unsigned)=> ''0''
 
* forum_topics_approved (mediumint(8) unsigned)=> ''0''
 
* forum_topics_unapproved (mediumint(8) unsigned)=> ''0''
 
* forum_topics_softdeleted (mediumint(8) unsigned)=> ''0''
 
* enable_shadow_prune (tinyint(1) unsigned) => ''0''
 
* prune_shadow_days (mediumint(8) unsigned)=> ''7''
 
* prune_shadow_freq (mediumint(8) unsigned)=> ''1''
 
* prune_shadow_next int(11)  => ''0''
 
 
 
==== Forums ====
 
* forum_id (mediumint(8) unsigned) => wefrag_forums.id (int(11))
 
* parent_id (mediumint(8) unsigned) => wefrag_forums.category_id (table de correspondance)
 
* left_id (mediumint(8) unsigned) => ''????''
 
* right_id (mediumint(8) unsigned) => ''????''
 
* forum_parents (mediumtext) => ''vide''
 
* forum_name (varchar(255)) => wefrag_forums.title (varchar(255))
 
* forum_desc (text) => wefrag_forums.description (text)
 
* forum_desc_bitfield (varchar(255)) =>  ''vide''
 
* forum_desc_options (int(11) unsigned) =>  ''7''
 
* forum_desc_uid (varchar(8)) =>  ''vide''
 
* forum_link (varchar(255)) => ''vide''
 
* forum_password (varchar(255)) => ''vide''
 
* forum_style (mediumint(8) unsigned) => ''0''
 
* forum_image (varchar(255)) => ''vide''
 
* forum_rules (text) => ''vide''
 
* forum_rules_link (varchar(255)) => ''vide''
 
* forum_rules_bitfield (varchar(255)) => ''vide''
 
* forum_rules_options (int(11) unsigned) => ''7''
 
* forum_rules_uid (varchar(8))  => ''vide''
 
* forum_topics_per_page (tinyint(4)) => ''0''
 
* forum_type (tinyint(4)) => ''1''
 
* forum_status (tinyint(4)) => ''0''
 
* forum_last_post_id (int(10) unsigned) => ''à mettre à jour avec l'identifiant du dernier post du forum''
 
* forum_last_poster_id (int(10) unsigned) => ''à mettre à jour avec l'identifiant du poster du dernier post du forum''
 
* forum_last_post_subject (varchar(255)) => ''à mettre à jour avec le sujet du dernier post du forum''
 
* forum_last_post_time (int(11) unsigned ) => ''à mettre à jour avec le datetime du dernier post du forum''
 
* forum_last_poster_name(varchar(255)) => ''à mettre à jour avec le login du poster du dernier post du forum''
 
* forum_last_poster_colour(varchar(6)) => ''à mettre à jour avec la couleur du poster du dernier post du forum''
 
* forum_flags (tinyint(4)) => ''48''
 
* display_on_index (tinyint(1) unsigned) => ''1''
 
* enable_indexing (tinyint(1) unsigned ) => ''1''
 
* enable_icons(tinyint(1) unsigned ) => ''1''
 
* enable_prune(tinyint(1) unsigned ) => ''0''
 
* prune_next (int(11) unsigned)=> ''0''
 
* prune_days (mediumint(8) unsigned)=> ''0''
 
* prune_viewed(mediumint(8) unsigned)=> ''0''
 
* prune_freq(mediumint(8) unsigned)=> ''0''
 
* display_subforum_list (tinyint(1) unsigned)=> ''1''
 
* forum_options(int(20) unsigned)=> ''0''
 
* forum_posts_approved (mediumint(8) unsigned)=> ''1''
 
* forum_posts_unapproved (mediumint(8) unsigned)=> ''0''
 
* forum_posts_softdeleted (mediumint(8) unsigned)=> ''0''
 
* forum_topics_approved (mediumint(8) unsigned)=> ''1''
 
* forum_topics_unapproved (mediumint(8) unsigned)=> ''0''
 
* forum_topics_softdeleted (mediumint(8) unsigned)=> ''0''
 
* enable_shadow_prune (tinyint(1) unsigned) => ''0''
 
* prune_shadow_days (mediumint(8) unsigned)=> ''7''
 
* prune_shadow_freq (mediumint(8) unsigned)=> ''1''
 
* prune_shadow_next int(11)  => ''0''
 
 
=== phpbb_topics ===
 
  Traitement de toutes les lignes de wefrag_posts qui ont une donnée topic_id non significative.
 
 
  À étudier : utilisation de la fonction php [https://wiki.phpbb.com/Function.submit_post submit_post]
 
  Test effectué sous [https://github.com/bibiwan/migrationforumwefragv2/blob/master/testpost.php github].
 
 
* topic_id (int(10) unsigned) => wefrag_posts.id (int(11))
 
* forum_id (mediumint(8) unsigned) => wefrag_posts.forum_id (int(11))
 
* icon_id (mediumint(8) unsigned) => ''0''
 
* topic_attachment (tinyint(1) unsigned)  => ''0''
 
* topic_reported (tinyint(1) unsigned)  => ''0''
 
* topic_title (varchar(255)) =>  wefrag_posts.title
 
* topic_poster (int(10) unsigned) => wefrag_posts.user_id (int(11))
 
* topic_time (int(11) unsigned) => wefrag_posts.created_at(datetime)
 
* topic_time_limit (int(11) unsigned) => ''0''
 
* topic_views (mediumint(8) unsigned) => ''0''
 
* topic_status (tinyint(3))  =>
 
**  à étudier en fonction du statut locké ou pas
 
* topic_type (tinyint(3))  => ''0''
 
* topic_first_post_id (int(10) unsigned)  =>
 
**  étudier la nécessité d'insérer le premier post pour avoir une valeur ici
 
* topic_first_poster_name (varchar(255)) =>
 
**  récupérer le login du poster (wefrag_posts.user_id)
 
* topic_first_poster_colour
 
**  récupérer la couleur du poster (wefrag_posts.user_id)
 
* topic_last_post_id
 
**  mettre à jour lors du traitement des posts
 
* topic_last_poster_id
 
**  mettre à jour lors du traitement des posts
 
* topic_last_poster_name
 
**  mettre à jour lors du traitement des posts
 
* topic_last_poster_colour
 
**  mettre à jour lors du traitement des posts
 
* topic_last_post_subject
 
**  mettre à jour lors du traitement des posts
 
* topic_last_post_time
 
**  mettre à jour lors du traitement des posts
 
* topic_last_view_time => mettre la même valeur que topic_last_post_time
 
* topic_moved_id (int(10) unsigned) => ''0''
 
* topic_bumped(tinyint(1) unsigned) => ''0''
 
* topic_bumper(mediumint(8) unsigned) => ''0''
 
* poll_title (varchar(255)) => ''vide''
 
* poll_start (int(11) unsigned) => ''0''
 
* poll_length (int(11) unsigned) => ''0''
 
* poll_max_options (tinyint(4))  => ''1''
 
* poll_last_vote (int(11) unsigned) => ''0''
 
* poll_vote_change (tinyint(1))  => ''0''
 
* topic_visibility (tinyint(3))  => ''1''
 
* topic_delete_time (int(11) unsigned) => ''0''
 
* topic_delete_reason (varchar(255))  => ''vide''
 
* topic_delete_user (int(10) unsigned)  => ''0''
 
* topic_posts_approved (mediumint(8) unsigned)  => ''1''
 
* topic_posts_unapproved (mediumint(8) unsigned) => ''0''
 
* topic_posts_softdeleted (mediumint(8) unsigned) => ''0''
 
 
=== phpbb_posts ===
 
Traitement de toutes les lignes de wefrag_posts.
 
 
  à étudier : utilisation de la fonction php [https://wiki.phpbb.com/Function.submit_post submit_post]
 
 
* post_id (int(10) unsigned) => wefrag_posts.id (int(11))
 
* topic_id (int(10) unsigned) => wefrag_posts.topic_id (int(11))
 
* forum_id (mediumint(8) unsigned) => wefrag_posts.forum_id (int(11))
 
* poster_id  (int(10) unsigned) => wefrag_posts.user_id (int(11))
 
* icon_id (mediumint(8) unsigned)  => ''0''
 
* poster_ip (varchar(40)) => wefrag_posts.poster_ip_address(varchar(255))
 
* post_time (int(11) unsigned)  =>  wefrag_posts.created_at(datetime)
 
* post_reported (tinyint(1) unsigned) => ''0''
 
* enable_bbcode (tinyint(1) unsigned) => ''1''
 
* enable_smilies (tinyint(1) unsigned) => ''0''
 
* enable_magic_url (tinyint(1) unsigned)  => ''1''
 
* enable_sig (tinyint(1) unsigned) => ''0''
 
* post_username (varchar(255)) => ''vide''
 
* post_subject (varchar(255)) => wefrag_posts.title (varchar(255))
 
* post_text (mediumtext)  => wefrag_posts.body (text)
 
* post_checksum (varchar(32)) =>
 
**  md5 du texte du message.
 
* post_attachment (tinyint(1) unsigned) => ''0''
 
* bbcode_bitfield (varchar(255))  => ''vide''
 
* bbcode_uid (varchar(8))  => ''vide''
 
* post_postcount (tinyint(1) unsigned) =>
 
**  vérifier si ce compteur varie…
 
* post_edit_time (int(11) unsigned) => ''0''
 
* post_edit_reason (varchar(255)) => ''vide''
 
* post_edit_user (int(10) unsigned) => ''0''
 
* post_edit_count (smallint(4) unsigned ) => ''0''
 
* post_edit_locked (tinyint(1) unsigned)  => ''0''
 
* post_visibility (tinyint(3)) => ''1''
 
* post_delete_time (int(11) unsigned) => ''0''
 
* post_delete_reason (varchar(255)) => ''vide''
 
* post_delete_user(int(10) unsigned) => ''0''
 
 
=== phpbb_groups ===
 
  Utilisation de la table wefrag_groups.
 
 
  Nécessaire ou pas en fonction du nombre de groupes dans la base wefrag.
 
 
* group_id
 
* group_type
 
* group_founder_manage
 
* group_skip_auth
 
* group_name
 
* group_desc
 
* group_desc_bitfield
 
* group_desc_options
 
* group_desc_uid
 
* group_display
 
* group_avatar
 
* group_avatar_type
 
* group_avatar_width
 
* group_avatar_height
 
* group_rank
 
* group_colour
 
* group_sig_chars
 
* group_receive_pm
 
* group_message_limit
 
* group_legend
 
* group_max_recipients
 
 
=== phpbb_user_group ===
 
  Utilisation de la table wefrag_users pour récupérer le groupe
 
 
* group_id (mediumint(8) unsigned) => wefrag_users.group_id(int(11))
 
**  valeur à ''2'' pour le mettre dans le groupe registered.
 
* user_id (int(10) unsigned) => wefrag_users.id(int(11))
 
* group_leader (tinyint(1) unsigned) => ''0''
 
* user_pending (tinyint(1) unsigned) => ''0''
 
 
=== phpbb_topics_track ===
 
Utilisation de la table wefrag_user_topic_reads
 
* user_id => wefrag_user_topic_reads.user_id
 
* topic_id => wefrag_user_topic_reads.topic_id
 
* forum_id =>
 
** récupérer l'id du forum du topic
 
* mark_time => wefrag_user_topic_reads.read_at
 
 
=== phpbb_topics_posted ===
 
  Table à alimenter lors de la création d'un topic (et d'un post ?)
 
  Non nécessaire si utilisation de l'api à priori.
 
* user_id
 
* topic_id
 
* topic_posted  => 1 si topic, 0 si post ?
 

Version actuelle datée du 10 août 2020 à 15:06

Objectif[modifier]

Architecture applicative[modifier]