Portage MOD Introduciator + tutoriel

Aide aux auteurs d'extensions pour phpBB 3.2.x

Modérateur: Equipe

Règles du forum
A lire impérativement : Règlement de phpBB-fr.com

Re: Portage MOD Introduciator + tutoriel

Messagepar Skouat » 18 Jan 2019 à 20:17

Hello,

Ca ne va pas faire avancer ton pb, mais bon… Il y a un pb dans composer.json
"phpbb/phpbb": ">=3.1.0,<3.2.*@dev"
:roll:

--- Edit ---

En relecture rapide juste sur introduciator_module.php
  • Utilisation de code dépréciées
    • request_var()
    • set_config()
    • add_log()
    • $user->lang['LANG_KEY']
    • get_remote_file()
  • Code: Tout sélectionner
    trigger_error(implode('<b' . 'r>', $errors) . adm_back_link($this->u_action), E_USER_WARNING);

    Variable non définie pour $errors
  • $explanation_message_rules_text_new_uid
    variable déclarée mais non utilisée
  • Appel de global à remplacer par un appel de container
  • Code lié au version check à dégager, c'est géré via PCA>Personaliser>Extension>ton_extension
  • Supprimer ?> de tous tes fichiers .php
Skouat
Traducteur
Traducteur
 
Messages: 13998
Enregistré le: 02 Avr 2008 à 20:47

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 18 Jan 2019 à 21:00

Ben non mais si, merci Skouat !

Skouat a écrit:Hello,

Ca ne va pas faire avancer ton pb, mais bon… Il y a un pb dans composer.json
"phpbb/phpbb": ">=3.1.0,<3.2.*@dev"
:roll:

Oui mais bon, pour le moment mon extension n'est valide pour aucune version, il me manque UN event... On verra ça quand je le sortirais de façon officielle. Bon, ça je le savais.

Skouat a écrit:En relecture rapide juste sur introduciator_module.php
  • Utilisation de code dépréciées
    • request_var()
    • set_config()
    • add_log()
    • $user->lang['LANG_KEY']
    • get_remote_file()
  • Code: Tout sélectionner
    trigger_error(implode('<b' . 'r>', $errors) . adm_back_link($this->u_action), E_USER_WARNING);

    Variable non définie pour $errors
  • $explanation_message_rules_text_new_uid
    variable déclarée mais non utilisée
  • Appel de global à remplacer par un appel de container
  • Code lié au version check à dégager, c'est géré via PCA>Personaliser>Extension>ton_extension
  • Supprimer ?> de tous tes fichiers .php

A part les variables non utilisées, j'ai l'impression que ça évolue plus vite que j'arrive à apprendre !
J'ai déjà fait des changement sur les langues dans les autres fichiers php mais comme celui là fonctionne à peu près je n'y ai pas touché... En plus il ne faut pas appeler $user->setup() sauf que lorsque je ne le fais pas dans les events et que je redirige vers un message d'erreur par exemple, tout reste en anglais alors que le user est configuré en Français.

Bon, mon problème est le suivant pour le moment :
Code: Tout sélectionner
	/**
	 * Assigns user profile flair template block variables for a topic post.
	 *
	 * @param \phpbb\event\data	$event The event data
	 */
	public function on_viewtopic_post_row_after($event)
	{
		$data_introduciator = $event['user_poster_data']['datas_introduciator'];
		
		$this->template->assign_block_vars('postrow', array(
				'S_INTRODUCIATOR_DISPLAY'	=> $data_introduciator['display'],
				'U_INTRODUCIATOR_URL'		=> $data_introduciator['url'],
				'T_INTRODUCIATOR_TEXT'		=> $data_introduciator['text'],
				'T_INTRODUCIATOR_CLASS'		=> $data_introduciator['class'],
			));
	}

En fait ça flingue la page, mais j'ai besoin d'accéder dans mon html à postrow.S_INTRODUCIATOR_DISPLAY , postrow.U_INTRODUCIATOR_URL etc et ça de doit pas se faire comme ça...
le datas_introduciator est correct et est mis à jour par l'event core.viewtopic_modify_post_data:
Code: Tout sélectionner
	/**
	 * Loads all user profile introduce data into the user cache for a topic.
	 *
	 * @param \phpbb\event\data	$event The event data
	 */
	public function on_viewtopic_modify_post_data($event)
	{
		if ($this->introduciator_helper->is_introduciator_allowed())
		{
			$user_cache = $event['user_cache'];

			foreach ($event['user_cache'] as $user_id => $user_info)
			{
				$user_cache[$user_id]['datas_introduciator'] = $this->introduciator_helper->introduciator_get_user_infos($user_id, $user_info['username']);
			}

			$event['user_cache'] = $user_cache;
		}
	}

Y'a un truc qui cloche...


EDIT
Bon j'ai patché tout le code... Remonté dans GIT.
Plus qu'a tester... ça veut dire quoi "Code lié au version check à dégager, c'est géré via PCA>Personaliser>Extension>ton_extension" <== je ne sais pas encore comment vous faites pour tester les MAJ... C'est lié à GitHub ?
Feneck91
Maître-posteur
Maître-posteur
 
Messages: 428
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Skouat » 18 Jan 2019 à 23:10

Feneck91 a écrit:ça veut dire quoi "Code lié au version check à dégager, c'est géré via PCA>Personaliser>Extension>ton_extension" <== je ne sais pas encore comment vous faites pour tester les MAJ... C'est lié à GitHub ?

Ca utilise les infos renseignées dans le composer.json
Skouat
Traducteur
Traducteur
 
Messages: 13998
Enregistré le: 02 Avr 2008 à 20:47

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 18 Jan 2019 à 23:35

Je ne sais pas comment TU fais pour Paypal Donnation mais la page : http://www.phpbb.com//customise/db/exte ... sion_check indique : The requested page could not be found.
Feneck91
Maître-posteur
Maître-posteur
 
Messages: 428
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Dakin Quelia » 18 Jan 2019 à 23:56

Parce que tu as mis une barre en trop dans ton lien, donc ça donne ça : Voir ;)
Aucun support par mail, MP ou msn.
Mes MODs: ici | Mon blogue: Mon blogue | DeviantArt: cliquez ici
Dakin Quelia
Floodeur universel
Floodeur universel
 
Messages: 21411
Enregistré le: 31 Oct 2006 à 19:33
Localisation: Belgique

Re: Portage MOD Introduciator + tutoriel

Messagepar Informpro » 19 Jan 2019 à 14:10

Hello,

pour moi le problème majeur c'est qu'à chaque `assign_block_vars`, tu vas re-créer une itération de la boucle (en faisant assign_block_vars).

Pour moi, ce que doit faire ta fonction
Code: Tout sélectionner
on_view_topic_modify_post_row_unapproved
ça serait plutôt ça :
Code: Tout sélectionner
$data_introduciator = $event['user_poster_data']['datas_introduciator'];
$event['post_row'] += array(
	'S_INTRODUCIATOR_DISPLAY'	=> $data_introduciator['display'],
	'U_INTRODUCIATOR_URL'		=> $data_introduciator['url'],
	'T_INTRODUCIATOR_TEXT'		=> $data_introduciator['text'],
	'T_INTRODUCIATOR_CLASS'		=> $data_introduciator['class'],
);
return $event;
Car c'est comme ça, via "post_row", que le block template postrow est créé :
Code: Tout sélectionner
	$template->assign_block_vars('postrow', $post_row);
Informpro
Apprenti-posteur
Apprenti-posteur
 
Messages: 183
Enregistré le: 06 Aoû 2012 à 21:24

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 19 Jan 2019 à 15:56

Bon ça marche (et je suis sur le cul). Je pensais avoir une solution propre…
D'ailleurs, du coup le noms de cette méthode est mal choisie !
Est-normale que tu retourne : return $event; ?? Ça ser à quelque chose ? Je ne l'ai jamais fait !

Est-ce que là où je l'ai mis, c'est trop tard ? Donc au niveau de on_viewtopic_post_row_after c'est trop tard c'est ça ?
Dans postrow on ne peut plus ajouter de variables ? Ça doit être fait avant ?

En tout cas merci en effet ça marche.
Feneck91
Maître-posteur
Maître-posteur
 
Messages: 428
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Informpro » 19 Jan 2019 à 16:37

Effectivement je pense que le nom de la méthode est mal choisi.

Honnêtement, j'ai mis le return comme ça, je connais très très peu phpBB3(.2) j'ai juste fait ça par défaut.

Je ne pense pas que ça soit trop tard : après tout, la ligne qui appelle l'event core.viewtopic_modify_post_row est avant la ligne qui assigne la donnée au block template.
Informpro
Apprenti-posteur
Apprenti-posteur
 
Messages: 183
Enregistré le: 06 Aoû 2012 à 21:24

Re: Portage MOD Introduciator + tutoriel

Messagepar Skouat » 19 Jan 2019 à 17:06

Feneck91 a écrit:Je ne sais pas comment TU fais pour Paypal Donnation mais la page : http://www.phpbb.com//customise/db/exte ... sion_check indique : The requested page could not be found.


Pour compléter...
https://area51.phpbb.com/docs/dev/3.2.x ... n-checking

Au passage je note que la doc destinée aux développeurs s'est bien étoffée.
Je pense que je vais la relire.

Feneck91 a écrit:du coup le noms de cette méthode est mal choisie !

Le nom d'autres méthodes également. Surtout celle qui ont un nom digne de rentrer dans le Guiness Book de par la longeur du nom :mrgreen:
Code: Tout sélectionner
$this->introduciator_helper->introduciator_is_topic_in_forum_is_unapproved_for_introduction

Cette réflexion est également à porter sur le nom de certaines variables.

Extrait du coding guideline de 3.2.x
Names should be descriptive, but concise. We don't want huge sentences as our variable names, but typing an extra couple of characters is always better than wondering what exactly a certain variable is for.

Summary:
The basic philosophy here is to not hurt code clarity for the sake of laziness. This has to be balanced by a little bit of common sense, though; phpbb_print_login_status_for_a_given_user() goes too far, for example -- that function would be better named phpbb_print_user_login_status(), or just phpbb_print_login_status().


Donc ta méthode pourrait être renommée en :
  • is_topic_in_forum_is_unapproved
    ou
  • is_topic_is_unapproved_for_introduction (étant donné qu'un topic est forcément dans un forum, inutile de le préciser)
    ou
  • introduction_is_unapproved_topic
Skouat
Traducteur
Traducteur
 
Messages: 13998
Enregistré le: 02 Avr 2008 à 20:47

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 19 Jan 2019 à 17:24

Je note bande de moqueurs... :oops:
J'ai plutôt écrit : (je pense que c'est plus dans la veine du code phpBB)
Code: Tout sélectionner
			$event['post_row'] = array_merge($event['post_row'], array(
				'S_INTRODUCIATOR_DISPLAY'	=> $data_introduciator['display'],
				'U_INTRODUCIATOR_URL'		=> $data_introduciator['url'],
				'T_INTRODUCIATOR_TEXT'		=> $data_introduciator['text'],
				'T_INTRODUCIATOR_CLASS'		=> $data_introduciator['class'],
			));
Modifié en dernier par Feneck91 le 19 Jan 2019 à 17:34, modifié 1 fois.
Feneck91
Maître-posteur
Maître-posteur
 
Messages: 428
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Skouat » 19 Jan 2019 à 17:29

J'ai complété mon précédent message ;)
Skouat
Traducteur
Traducteur
 
Messages: 13998
Enregistré le: 02 Avr 2008 à 20:47

Re: Portage MOD Introduciator + tutoriel

Messagepar Informpro » 19 Jan 2019 à 17:49

Pour pinailler... is_topic_in_forum_is_unapproved devrait être is_topic_in_forum_unapproved, pas besoin de répéter la copule ;-).

Pour array_merge vs +=, on avait eu la discussion ici il y a plusieurs années déjà. Je répète ce que je disais déjà : + est l'opérateur d'union des arrays, array_merge ajoute un tableau à la fin d'un autre. C'est pas bien grave dans tous les cas.
Informpro
Apprenti-posteur
Apprenti-posteur
 
Messages: 183
Enregistré le: 06 Aoû 2012 à 21:24

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 19 Jan 2019 à 18:27

C'est vrai que ça pinaille... Quand j'ai fais valider mon MOD il y a quelques années, je croisque je l'ai proposé pas loin de 10 fois pour qu'il uisse être accepté, donc les retours que vous me faites maintenant je les prend très au sérieux parce que je sais que ça va m'être reproché.
J'espère juste que l'event dont j'ai besoin va être accepté mais j'ai un peu peur que non, du coup une grosse partie de l'extension perd de son sens.
Feneck91
Maître-posteur
Maître-posteur
 
Messages: 428
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar pierredu » 19 Jan 2019 à 18:54

Il faut retourner $event parce qu'on peut très bien l'avoir modifié dans la fonction de gestion de l'événement. Il y a beaucoup d'extensions qui font juste ça.
Avatar de l’utilisateur
pierredu
Resp. Extensions
Resp. Extensions
 
Messages: 1175
Enregistré le: 29 Mai 2011 à 06:49
Localisation: Paris

Re: Portage MOD Introduciator + tutoriel

Messagepar Informpro » 19 Jan 2019 à 19:34

Le truc, c'est qu'$event est une instance de classe, il n'est donc pas passé par copie, et les modifications apportées dans la fonction devraient s'appliquer même sans return.
Informpro
Apprenti-posteur
Apprenti-posteur
 
Messages: 183
Enregistré le: 06 Aoû 2012 à 21:24

PrécédenteSuivante

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é