[3.0.x] Créer un nouveau message avec phpBB3 Intermédiaire

[3.0.x] Créer un nouveau message avec phpBB3

Tout savoir sur la création des messages !


Article de phpbbmodders : Créer un nouveau message
Soumis par evil<3 le 11 janvier 2008, 16:31
Traduit par l'équipe des traducteurs

Comment utiliser la fonction submit_post().

Créer un nouveau message/post

Avec phpBB 3.0, vous pouvez créer un nouveau message, ou post, d'une manière assez simple, mais il existe toutefois quelques aspects qui sont délicats.

L'API submit_post de phpBB se trouve dans includes/functions_posting.php. Il s'agit plus précisément de la fonction submit_post(). Cette fonction utilise les paramètres suivants : $mode, $subject, $username, $topic_type, &$poll, &$post_data, et $update_message = true.

» Les paramètres

La variable $mode vaut soit "post", pour créer un nouveau sujet, soit "reply", pour créer une réponse, soit "edit", pour modifier un message existant.

La variable $subject contiendra la chaîne de caractères, soit sujet du futur message, soit titre du nouveau sujet de discussion.

La variable $username a besoin d'être fournie si "$user->data[ 'is_registered']" est défini à "false", elle contient alors le nom d'utilisateur émetteur du message.

La variable $topic_type vaut soit "POST_NORMAL", "POST_STICKY", "POST_ANNOUNCE", soit "POST_GLOBAL", selon le type de message que vous souhaitez soumettre. Elle est nécessaire uniquement lors de la création d'un nouveau sujet, ou d'une réponse à une annonce globale.

La variable $poll est passée par référence en cas de sondage associé au message. C'est alors un tableau qui contient des informations sur le sondage. Il doit être de la forme suivante (source) :

Code: Tout sélectionner
 
$poll
= array ( 
    
'poll_title' => "Chaîne de caractères, titre de sondage",
    'poll_start' => "Soit 0, soit le tampon horaire (date et heure) de départ du sondage",
    'poll_max_options' => "Nombre entier, nombre maximum d'options qu'un utilisateur peut sélectionner",
    'poll_length' => "Nombre entier, nombre de jours de la durée du vote", 
    
'poll_vote_change' => "Booléen, possibilité pour les utilisateurs de modifier leur vote, ou non", 
    
'poll_options' => array (=> "libellé de l'option 1", 1 => "libellé de l'option 2" [...] etc), 
);


Pour éditer un message, il suffit d'utiliser $mode avec la valeur "edit" comme argument, mais il faut aussi fournir les "post_id" et "topic_id" dans le tableau de données qui suit.

La variable $post_data est aussi passée par référence, comme $poll. C'est un tableau d'options qui sont fournies ci-après.

La variable $update_message est automatiquement mis à vrai lorsque $mode vaut "post" ou "reply". Il n'existe pas de bonne raison pour que sa valeur soit "false". Ce paramètre est optionnel, et comme sa valeur par défaut est "true", autant l'ignorer, tout simplement.

» Avant de créer votre message - permissions (auth) & données utilisateur (userdata)

Le premier problème de submit_post(), c'est que, pour le message créé, il utilise les données de l'utilisateur en cours ; et il n'existe pas de moyen de lui spécifier un autre utilisateur. Un problème similaire se pose aussi avec les permissions, car l'utilisateur en cours transmet ses autorisations lors de la création d'un nouveau sujet.

Du coup, pour résoudre ce problème, nous utilisons l'astuce suivante : sauvegarder les $user er $auth en cours, dans $backup par exemple, puis les valoriser avec qui nous intéressent, faire le submit_post(), et ensuite les restaurer comme si de rien n'était.

Donc, déjà, sauvegarder $user et $auth :
Code: Tout sélectionner
$backup = array ( 
    
'user' => $user, 
    
'auth' => $auth, 
); 


Puis, leur affecter les valeurs qui nous intéressent.
Supposons que l'identifiant de l'utilisateur soit stocké dans la variable $user_id, le code suivant permettra d'écraser les données de l'utilisateur, stockées dans $user->data, par celles de l'utilisateur souhaité idem pour les permissions, stockées dans $auth.

Code: Tout sélectionner
$sql = 'SELECT *
   FROM '
 . USERS_TABLE . '
      WHERE user_id = '
 . $user_id;
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

$user->data = array_merge($user->data, $row);
$auth->acl($user->data); 


Le deuxième problème, c'est l'adresse IP. Il faut aussi l'écraser par la valeur souhaitée, par exemple "0.0.0.0".

Code: Tout sélectionner
$user->ip = '0.0.0.0 '


Ces deux problèmes contournés, vous n'avez plus qu'à utiliser submit_post() comme indiqué plus bas. Mais avant cela, je vous indique comment restaurer les données de la sauvegarde, $user->data et $auth. C'est plutôt simple :

Code: Tout sélectionner
extract ($backup); 


» Envoyer le message

Pour créer un message, il vous suffit d'appeler la fonction submit_post(). Les paramètres à fournir dépendent de ce que vous voulez faire : créer un nouveau sujet, créer une réponse, ou modifier un message existant.

Pour créer un nouveau sujet, $mode doit valoir "post", et il vous faudra fournir les clefs suivantes pour $data : topic_title, forum_id, icon_id, enable_bbcode, enable_smilies, enable_urls, enable_sig, message, message_md5, bbcode_bitfield, bbcode_uid, post_edit_locked, topic_time_limit (si note ou annonce), topic_approved, post_time, enable_indexing, forum_name, notify, notify_set.
Les clefs suivantes seront valorisées : topic_id, post_id.

Pour créer une réponse, $mode doit valoir "reply", et il vous faudra fournir les clefs suivantes pour $data : topic_title, forum_id, icon_id, enable_bbcode, enable_smilies, enable_urls, enable_sig, message, message_md5, bbcode_bitfield, bbcode_uid, post_edit_locked, topic_time_limit (si note ou annonce), post_time, enable_indexing, forum_name, notify, notify_set.
Les clefs suivantes seront valorisées : post_id.

Pour modifier un message, $mode doit valoir "edit", et il vous faudra fournir les clefs suivantes pour $data : topic_replies_real, topic_first_post_id, topic_last_post_id, post_id, topic_title, poster_id, post_approved, topic_approved, post_edit_reason, forum_id, post_edit_user, icon_id, enable_bbcode , enable_smilies, enable_urls, enable_sig, message_md5, message, bbcode_bitfield, bbcode_uid, post_edit_locked, topic_time_limit (si note ou annonce), topic_approved, post_approved, topic_id.

» Comment obtenir le topic_id et post_id retournés

Après avoir soumis le message, où est le topic_id ou post_id ?
Eh bien, comme $data est une variable passée par référence, la fonction en modifiant sa valeur, la modifie dans la variable d'origine.
Aussi, lorsque vous avez lu :

Les clefs suivantes seront valorisées : post_id.


Cela signifie qu'une fois le message créé, vous pouvez accéder à la valeur de post_id par $data['post_id'].
Avatar de l’utilisateur
EricSchreiner
Traducteur
Traducteur
 
Rédigé le: 06 Avr 2009 à 13:20
Articles: 6
Contributeurs:
  • evil<3
Noter cet article: 123456 Votants: Aucun
Mots-clés: Créer, un, nouveau, message, avec, phpBB3, 30x

Retourner vers Coding


cron