V2 Migration Forum : Différence entre versions

De NoFrag
Aller à : navigation, rechercher
(Architecture applicative)
Ligne 5 : Ligne 5 :
 
* phpbb 3.2
 
* phpbb 3.2
 
* Plug-in de modération des topics créés par l'utilisateur : https://phpbb-extensions.ga/extensions/dakinquelia/moderateowntopics.html
 
* Plug-in de modération des topics créés par l'utilisateur : https://phpbb-extensions.ga/extensions/dakinquelia/moderateowntopics.html
* Plug-in de tribune :  
+
* Plug-in de tribune : https://www.phpbb.com/customise/db/extension/ajax_shoutbox/
  
 
== Procédure ==
 
== Procédure ==

Version du 31 août 2017 à 15:28

Objectif

  • Basculer le forum vers phpbb 3.2

Architecture applicative

Procédure

Analyse

  • Récupérer 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.
      • On génère les mots de passe qu'on stocke avec login et email, on traitera le fichier en batch pour envoyer les mots de passe à chacun par mail.
      • On récupère en csv la table de correspondance entre iduser wefrag et iduser phpbb et mot de passe provisoire.
    • On modifie les topics et posts pour mettre les bons numéros de catégorie / forums manuellement.
    • On traite les topics.
      • Pour chaque message de chaque topic trié par date.
        • Récupérer login et mdp provisoire de l'auteur du message
        • Login sur phpbb via l'api
        • 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.
    • Passage des utilisateurs habilités en admin (manuel).
    •  Envoi par mail des mots de passe par un batch.
  • Partage sur git : [1]

Liste des tables

Table phpbb_users

 Voir pour utiliser l'API phpbb add_users
 Test effectué sous 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))
  • 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 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 submit_post
 Test effectué sous 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 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 ?