V2 Migration Forum : Différence entre versions

De NoFrag
Aller à : navigation, rechercher
(Transposition)
(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é)
 
(48 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
== Objectif ==
 
== Objectif ==
 
* Basculer le forum vers phpbb 3.2
 
* Basculer le forum vers phpbb 3.2
 +
* Ancien forum (à peu près) : https://github.com/Conardo/wefrag
  
== Procédure ==
+
== Architecture applicative ==
=== Analyse ===
+
* phpbb 3.2
* Récupérer [http://nofrag.com/temporary/dumpforum.sql le dump du forum].
+
* Plug-in de tribune : https://www.phpbb.com/customise/db/extension/ajax_shoutbox/
* 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 ===
 
* Planification :
 
** 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.
 
 
 
users_groups => users => user_group
 
categories => forums => topics => posts => forums_tracks (à consolider)
 
manuellement : acl des groupes
 
 
 
* Produire une procédure par table
 
 
 
* Partage sur git : [https://github.com/bibiwan/migrationforumwefragv2]
 
 
 
== 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]