Ajouter une information au message

Aide aux auteurs d'extensions pour phpBB 3.1.x

Modérateur: Equipe

Règles du forum
A lire impérativement : Règlement de phpBB-fr.com
Partager sur FacebookPartager sur TwitterPartager sur Google+

Ajouter une information au message

Messagepar Eiana » 19 Aoû 2017 à 11:01

Bonjour à tous,

Je souhaiterais créer une extension permettant d'ajouter une information pour chaque message, c'est à dire agissant sur la table posts.
J'ai pris comme exemple l'extension permettant d'ajouter une description aux sujets mais si pour la plupart des points j'ai réussi à la modifier pour aller vers ce que je veux, un point me bloque, la requête s'exécute sur la mauvaise table.
En effet l'extension que j'ai prise pour modèle agit sur la table topics et je ne sais pas où modifier les fichiers pour que ma requête s’exécute sur la bonne table.

En activant mon extension le bon champ s'est créé dans la bonne table et le champ à remplir par l'utilisateur s'est placé là où je voulais.

Je suppose que je dois modifier le listener.php mais j'avoue que je ne vois pas trop à quel niveau ni quoi remplacer par quoi.
Je vous joins le contenu de ce fichier au cas où, ne sachant pas quelle partie peut être utile.

Code: Tout sélectionner
<?php
/**
*
* @package Topic description
* @copyright (c) 2016 evah
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*
*/

namespace evah\personnages\event;

/**
* @ignore
*/
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
* Event listener
*/
class listener implements EventSubscriberInterface
{
	/** @var \phpbb\auth\auth */
	protected $auth;

	/** @var \phpbb\request\request */
	protected $request;

	/** @var \phpbb\template\template */
	protected $template;

	/** @var \phpbb\user */
	protected $user;

	/**
	* Constructor
	*
	* @param \phpbb\auth\auth					$auth				Auth object
	* @param \phpbb\request\request				$request			Request object
	* @param \phpbb\template\template           $template       	Template object
	* @param \phpbb\user                        $user           	User object
	* @access public
	*/
	public function __construct(
			\phpbb\auth\auth $auth,
			\phpbb\request\request $request,
			\phpbb\template\template $template,
			\phpbb\user $user)
	{
		$this->auth = $auth;
		$this->request = $request;
		$this->template = $template;
		$this->user = $user;
	}

	/**
	* Assign functions defined in this class to event listeners in the core
	*
	* @return array
	* @static
	* @access public
	*/
	static public function getSubscribedEvents()
	{
		return array(
			'core.permissions'						=> 'add_permission',
			'core.posting_modify_template_vars'		=> 'topic_data_personnage',
			'core.posting_modify_submit_post_before'=> 'personnage_add',
			'core.posting_modify_message_text'		=> 'modify_message_text',
			'core.submit_post_modify_sql_data'		=> 'submit_post_modify_sql_data',
			'core.viewtopic_modify_page_title'		=> 'personnage_add_viewtopic',
			'core.viewforum_modify_topicrow'		=> 'modify_topicrow',
			'core.search_modify_tpl_ary'			=> 'search_modify_tpl_ary',
			'core.mcp_view_forum_modify_topicrow'	=> 'modify_topicrow',
		);
	}

	/**
	* Add administrative permissions to manage forums
	*
	* @param object $event The event object
	* @return null
	* @access public
	*/
	public function add_permission($event)
	{
		$permissions = $event['permissions'];
		$permissions['f_personnage'] = array('lang' => 'ACL_f_personnage', 'cat' => 'post');
		$event['permissions'] = $permissions;
	}

	public function topic_data_personnage($event)
	{
		$forum_id = $event['forum_id'];

		$mode = $event['mode'];
		$post_data = $event['post_data'];
		$page_data = $event['page_data'];
		if ($this->auth->acl_get('f_personnage', $forum_id) && ($mode == 'post' || $mode == 'edit'))
		{
			$this->user->add_lang_ext('evah/personnages', 'common');
			// we need to set the variable upon posting only...only forum table is queried
			if ($mode == 'post')
			{
				$post_data['personnage'] = '';
			}
			$page_data['personnage'] = $this->request->variable('personnage', $post_data['personnage'], true);
			$page_data['S_PERSONNAGE'] = true;
		}

		$event['post_data']	= $post_data;
		$event['page_data']	= $page_data;
	}

	public function personnage_add($event)
	{
		$event['data'] = array_merge($event['data'], array(
			'personnage'	=> $this->request->variable('personnage', '', true),
		));
	}

	public function submit_post_modify_sql_data($event)
	{
		$mode = $event['post_mode'];
		$data = $event['data'];

		$data_sql = $event['sql_data'];
		if (in_array($mode, array('post', 'edit_topic', 'edit_first_post')))
		{
			$data_sql[TOPICS_TABLE]['sql']['personnage'] = $data['personnage'];
		}
		$event['sql_data'] = $data_sql;
	}

	public function personnage_add_viewtopic($event)
	{
		$topic_data = $event['topic_data'];
		$this->template->assign_var('personnage',censor_text($topic_data['personnage']));
	}

	public function modify_message_text($event)
	{
		$event['post_data'] = array_merge($event['post_data'], array(
			'personnage'	=> $this->request->variable('personnage', '', true),
		));
	}

	public function modify_topicrow($event)
	{
		$row = $event['row'];
		if (!empty($row['personnage']))
		{
			$topic_row = $event['topic_row'];
			$topic_row['personnage'] = censor_text($row['personnage']);
			$event['topic_row'] = $topic_row;
		}
	}

	public function search_modify_tpl_ary($event)
	{
		$row = $event['row'];
		if ($event['show_results'] == 'topics' && !empty($row['personnage']))
		{
			$tpl_array = $event['tpl_ary'];
			$tpl_array['personnage'] = censor_text($row['personnage']);
			$event['tpl_ary'] = $tpl_array;
		}
	}
}



Merci !
Eiana
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 14 Aoû 2017 à 18:30

Re: Ajouter une information au message

Messagepar papajoke » 19 Aoû 2017 à 11:21

bonjour

Code: Tout sélectionner
public function submit_post_modify_sql_data($event)
...
		if (in_array($mode, array('post', 'edit_topic', 'edit_first_post')))
		{
			$data_sql[TOPICS_TABLE]['sql']['personnage'] = $data['personnage'];
		}
...

pas TOPICS_TABLE :wink:
tu as bien fait le même changement dans /migration/ ?
modérateur forum manjaro.fr
Avatar de l’utilisateur
papajoke
Apprenti-posteur
Apprenti-posteur
 
Messages: 104
Enregistré le: 23 Juil 2017 à 12:45

Re: Ajouter une information au message

Messagepar Eiana » 19 Aoû 2017 à 11:48

Hello,

Ah, merci !

Effectivement ça marche mieux :)

Oui, dans migrations j'avais mis "$this->table_prefix . 'posts'" mais ça m'avait plus parlé à cet endroit.

Du coup j'ai trois autres questions :

- Dans migrations justement, je voudrais que la table crée soit de type int et que la valeur par défaut soit null (donc autoriser une valeur nulle au passage),
que dois-je mettre ici à la place ?
'personnage' => array('VCHAR_UNI', ''),
Quelque chose du genre 'personnage' => array('INTEGER', 'null'), ?
(Pour l'instant j'ai modifié à la main dans ma table, mais si je désinstalle/réinstalle l'extension ce n'est pas terrible je suppose).

- Comment faire pour que le champ apparaisse aussi dans la réponse rapide ? J'ai tenté un quickreply_editor_message_before.html dans le dossier event mais ça n'a pas fonctionné.

- J'ai besoin de récupérer l'id de l'utilisateur pour proposer une liste de valeurs possibles pour mon champ. J'ai tenté de faire un $data['user_id'] mais ça n'a pas fonctionné. Comment faire pour le récupérer dans l'html inséré ?

Merci :)
Eiana
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 14 Aoû 2017 à 18:30

Re: Ajouter une information au message

Messagepar papajoke » 19 Aoû 2017 à 12:47

array('INT:2', null) peut suffire ? -32000 ... +32000 (INT:4 => 2M)
ps: il faut mettre la taille la plus petite pour tes besoins ou voir si c'est un lien vers id autre table?


il est simple d'injecter une nouvelle variable dans tes modèles, mais on injecte suite à un evenement, c'est a toi de savoir ou tu désires cette info. Tu peux injecter dans un événement que tu utilises déja

pour toutes les pages :
Code: Tout sélectionner
function getSubscribedEvents()
...
    // j'intercepte un evenement en début pour toutes pages
    'core.page_header_after'	=> 'assign_common_template_variables',
...

	public function assign_common_template_variables($event)
	{
                // je repond a un evenement
		$this->template->assign_vars(array(
			'S_ELLO'	=> "bonjour",
			'S_USER_ID_VISIT' => isset($this->user->data['user_id'])? $this->user->data['user_id'] : 0 ,
		));
	}
modérateur forum manjaro.fr
Avatar de l’utilisateur
papajoke
Apprenti-posteur
Apprenti-posteur
 
Messages: 104
Enregistré le: 23 Juil 2017 à 12:45

Re: Ajouter une information au message

Messagepar Eiana » 19 Aoû 2017 à 13:47

Merci pour ta réponse :)

Ça veut dire que nativement l'id de l'utilisateur n'est pas stocké dans une variable, on est obligé d'ajouter la fonction quelque part ?
Deuxième question, avec ton exemple j'ai pu récupérer l'id dans {S_USER_ID}, mais comment puis-je le passer dans une variable php pour interroger la table avec ?
Eiana
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 14 Aoû 2017 à 18:30

Re: Ajouter une information au message

Messagepar papajoke » 19 Aoû 2017 à 23:09

il me semble que tu ne comprends pas grand chose aux extensions, a ce rythme tu vas poser 150 questions . Tu devrais lire de la documentation et faire des petits tests de ton coté.
Si on passe une variable au modèle ce n'est certainement pas pour la récupérer en php
modérateur forum manjaro.fr
Avatar de l’utilisateur
papajoke
Apprenti-posteur
Apprenti-posteur
 
Messages: 104
Enregistré le: 23 Juil 2017 à 12:45

Re: Ajouter une information au message

Messagepar galixte » 19 Aoû 2017 à 23:24

Vous avez demandez la documentation sur les extensions ? https://area51.phpbb.com/docs/dev/32x/e ... index.html
Communau EzCom
Image
« Traductions d’extensions & styles pour phpBB 3.1.x & 3.2.x ».
ImageListes de toutes les extensions recensées pour phpBB 3.1.x & 3.2.x.
ImageListes de tous les styles recensés pour phpBB 3.1.x & 3.2.x.
Avatar de l’utilisateur
galixte
Floodeur universel
Floodeur universel
 
Messages: 9883
Enregistré le: 08 Mar 2004 à 01:40
Localisation: Sud de la France.

Re: Ajouter une information au message

Messagepar Eiana » 20 Aoû 2017 à 11:16

Merci pour le lien mais c'est un peu général.
Je suis plutôt allée voir par ici https://wiki.phpbb.com/Event_List pour essayer de trouver à quel événement je devais lier ma fonction pour récupérer sur chaque post la valeur du champ ajouté, mais j'ai beau avoir essayé tous ceux qui sont liés au viewforum j'arrive pas à cibler la valeur pour chaque post. Dans mes essais j'ai récupéré à un moment cette valeur pour l'ensemble des posts de la page, mais ça ne me dit pas comment assigner la bonne à chaque.
Il doit y avoir une façon simple de récupérer l'info, mais quand on ne sait pas autant chercher une aiguille dans une botte de foin.
Eiana
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 14 Aoû 2017 à 18:30

Re: Ajouter une information au message

Messagepar papajoke » 20 Aoû 2017 à 15:02

justement il te faut quelque chose de général et non spécifique qui ne collera jamais avec ton besoin. Dans ce tuto tous les cas sont traités. Et tu as sans doute tout dans ton code que tu as récupéré, il faut juste que tu le comprennes.

Je ne comprends rien a ta demande :oops:
c'est dans la doc :
* Les données dans une extension passent par un champ dans $event, tu peux en créer de nouveaux.
* pour envoyer des données au templates (UNIQUEMENT eux) tu as template->assign_vars et, quelques champs particuliers $event['topic_row'].
* Lire des datas venant d'un formulaire request->variable
* Lire des datas de la base de donnée : faire une requête sql
Modifié en dernier par papajoke le 21 Aoû 2017 à 20:37, modifié 1 fois.
modérateur forum manjaro.fr
Avatar de l’utilisateur
papajoke
Apprenti-posteur
Apprenti-posteur
 
Messages: 104
Enregistré le: 23 Juil 2017 à 12:45

Re: Ajouter une information au message

Messagepar Eiana » 20 Aoû 2017 à 16:21

Eh bien dans le code qui me sert d'exemple il s'agit juste d'ajouter une description pour l'ensemble du sujet et pas une info dans chaque post du sujet.
Du coup je n'arrive pas à récupérer la valeur de ma colonne dans ma table pour chaque post.
Comme je l'ai dit j'arrive à récupérer au début de ma page l'ensemble du tableau de chaque post, mais ça me fait :
Code: Tout sélectionner
---
Tableau d'infos du post 1
---
Tableau d'infos du post 2
---
Ainsi de suite


Ce que je n'arrive pas à trouver c'est comment récupérer la valeur au sein de chaque post du topic, et pas les avoir toutes au début.
Eiana
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 14 Aoû 2017 à 18:30

Re: Ajouter une information au message

Messagepar Skouat » 21 Aoû 2017 à 19:22

Bonjour,

Je souhaiterais créer une extension permettant d'ajouter une information pour chaque message

Si vous souhaitez de l'aide pour le dev de votre extension, il faut effectuer des demandes précises.
Une information... quelle information ? d'où vient-elle ? comment-elle créée ? où est-elle stockées ? où doit-elle être ajoutée ?
Cela fait beaucoup de questions de notre côté pour apporter des réponses précises.

Eiana a écrit:Du coup j'ai trois autres questions

Eiana a écrit:Deuxième question

papajoke a écrit:a ce rythme tu vas poser 150 questions

Je rejoins le commentaire de papajoke et je tiens à rappeler une règle de bonne pratique sur les forums de phpBB-fr.com. 1 sujet > 1 Auteur > 1 question

Eiana a écrit:Ce que je n'arrive pas à trouver c'est comment récupérer la valeur au sein de chaque post du topic, et pas les avoir toutes au début.

Sachant que l'extension utilisée en modèle traite les sujets et non les messages, ne pensez-vous pas que le comportement que vous décrivez soit normal ?
Agir sur un sujet ou sur un message ne peut être identique sachant que les informations sont stockées dans deux tables différentes.

Pour vous apporter un meilleur support, je ne peux que vous conseiller de créer un sujet dans le forum Extensions en développement.
Cela nous permettra d'avoir une vision d'ensemble de votre extension (et pas seulement le fichier listener.php), afin de la tester pour voir où vous rencontrez des difficultés.

Si vous ne souhaitez pas diffuser votre extension, dans ce cas posez des questions précises afin d'avoir des réponses plus exhaustives.

A+ ;)
Mes MODS

Ultima-World Hébergé par phpBB-Services
Code parrainage : 1241646554
Skouat
Traducteur
Traducteur
 
Messages: 13395
Enregistré le: 02 Avr 2008 à 19:47

Re: Ajouter une information au message

Messagepar Eiana » 21 Aoû 2017 à 19:51

Bonsoir Skouat,

Eh bien si je savais comment poser la question plus précisément ce serait fait depuis longtemps, je ne vois pas bien l'intérêt de poser des questions vagues.
Je sais bien que l'extension que j'ai prise en modèle ne fait pas exactement la même chose, mais je n'ai rien trouvé d'approchant. Cependant si vous avez en tête un exemple avec le même fonctionnement n'hésitez pas à me le faire savoir.

Celui de l'extension que je tente de créer est très simple :
1) Permettre à l'utilisateur de choisir une valeur dans une liste déroulante lorsqu'il poste un message :
=> Partiellement réalisé : Implanté partout, sauf dans la réponse rapide, là je n'ai pas encore trouvé comment faire

2) Enregistrer son choix dans la table post, dans un champ créé par l'extension lors de son installation :
=> Réalisé. Enregistre bien le premier choix et la modification si effectuée

3) Récupérer la valeur choisie par l'utilisateur pour chaque post et l'afficher dans le profil :
=> Absolument pas réalisé. Je n'ai aucune idée de la façon de faire ça et j'ai beau lire toutes les docs que je peux trouver sur des sujets similaires, rien. J'ai l'impression que je dois utiliser un truc du genre {postrow.machin} à l'endroit où je souhaite implanter l'info et que le "machin" en question doit être déterminé dans le listener, mais comment faire pour récupérer l'info dans le listener et la rendre accessible par {postrow.machin}, ça... Rien à faire.

Pour ce qui est de poster dans l'autre forum je n'ai absolument pas le temps de garantir le moindre support donc je ne pense pas que ce soit approprié.
Eiana
Posteur néophyte
Posteur néophyte
 
Messages: 17
Enregistré le: 14 Aoû 2017 à 18:30

Re: Ajouter une information au message

Messagepar papajoke » 21 Aoû 2017 à 20:48

tu ne pourrais pas simplement utiliser les Icônes de sujet ? cela collerait exactement à tes besoins ?
modérateur forum manjaro.fr
Avatar de l’utilisateur
papajoke
Apprenti-posteur
Apprenti-posteur
 
Messages: 104
Enregistré le: 23 Juil 2017 à 12:45

Re: Ajouter une information au message

Messagepar Skouat » 21 Aoû 2017 à 20:54

Hello,

Eiana a écrit:Eh bien si je savais comment poser la question plus précisément ce serait fait depuis longtemps, je ne vois pas bien l'intérêt de poser des questions vagues.

Si vous ne savez pas comment poser la question alors cela signifie que vous ne savez pas ce que vous voulez.
Exemple de questions précises :
  • Comment puis-je ajouter une information au niveau de chaque message dans la zone du mini-profil ?
    Il s'agira du nom du personnage joué par le membre. Cette information est stockée dans une table indépendante mais liée à la table phpbb_users
  • Comment puis-je ajouter une information en dessous du titre de chaque message d'un sujet
    Il s'agira du type de l'objet vendu par le membre. Cette information est stockée dans une table indépendante mais liée avec la table phpbb_topics
  • etc
Ne pensez-vous pas que mes questions, bien que fictives, sont déjà plus précises que les vôtres ?

Eiana a écrit:Cependant si vous avez en tête un exemple avec le même fonctionnement n'hésitez pas à me le faire savoir.

Non, mais quelque soit l'extension de tout manière elle servent à comprendre comment interagir avec phpBB. Donc il ne faut pas forcément utiliser une extension proche de la zone où vous souhaitez intervenir.
Par exemple, pour mon extension, j'ai utilisé en base pas moins de 4 extensions déjà existente qui n'ont rien à voir l'une avec l'autre (Board Announcement, Pages, phpBB Directory, QTE, etc.)

Eiana a écrit:1) Permettre à l'utilisateur de choisir une valeur dans une liste déroulante lorsqu'il poste un message :
=> Partiellement réalisé : Implanté partout, sauf dans la réponse rapide, là je n'ai pas encore trouvé comment faire

Ouvrez un nouveau sujet pour cette question.

Eiana a écrit:2) Enregistrer son choix dans la table post, dans un champ créé par l'extension lors de son installation :
=> Réalisé. Enregistre bien le premier choix et la modification si effectuée

Nickel
Eiana a écrit:3) Récupérer la valeur choisie par l'utilisateur pour chaque post et l'afficher dans le profil :
=> Absolument pas réalisé. Je n'ai aucune idée de la façon de faire ça et j'ai beau lire toutes les docs que je peux trouver sur des sujets similaires, rien. J'ai l'impression que je dois utiliser un truc du genre {postrow.machin} à l'endroit où je souhaite implanter l'info et que le "machin" en question doit être déterminé dans le listener, mais comment faire pour récupérer l'info dans le listener et la rendre accessible par {postrow.machin}, ça... Rien à faire.

Se référer à la première partie de ce message ;)

Eiana a écrit:Pour ce qui est de poster dans l'autre forum je n'ai absolument pas le temps de garantir le moindre support donc je ne pense pas que ce soit approprié.

Pas de soucis. Dans ce cas, il faut garder à l'esprit 1 sujet > 1 question.
L'ouverture de sujet n'est soumise à aucune condition... enfin si... celle de les suivre. :mrgreen:

Toutefois, dans le cas où cela serait nécessaire, êtes-vous disposé(e) à fournir un zip de votre extension ou à la mettre à dispo sur Github ?

A+ :)
Mes MODS

Ultima-World Hébergé par phpBB-Services
Code parrainage : 1241646554
Skouat
Traducteur
Traducteur
 
Messages: 13395
Enregistré le: 02 Avr 2008 à 19:47

Re: Ajouter une information au message

Messagepar papajoke » 21 Aoû 2017 à 21:39

si je comprend bien c'est un système de milestone lié à unique sujet ?
je trouve l'idée très intéressante (mais pas dans mes besoins), ajouter un visu dans la liste des sujets, dans le premier post, un type de recherche particulier à ces posts ....
Cela signifie aussi une config dans PCA pour n'appliquer cette extension que dans certains forum
modérateur forum manjaro.fr
Avatar de l’utilisateur
papajoke
Apprenti-posteur
Apprenti-posteur
 
Messages: 104
Enregistré le: 23 Juil 2017 à 12:45

Suivante

Retourner vers Aide au développement

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité