Portage MOD Introduciator + tutoriel

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

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 09 Jan 2016 à 19:10

Merci pour tes réponses... Est-ce que ça vaut vraiment le coup de gérer la migration depuis le MOD ? Il est assez vite configuré... Bon, je regarderais, du coup ça me fera déplacer des traitements UMIL (enfin le genre) dans les autres migrations.
D'ailleurs pour migrer un forum de 3.0.x => 3.1.x je croyais qu'il fallait supprimer tous les MOD et leur données / modification de structure de la base de données ?

Oui, j'ai vu pour le softdelete ! Ça va bien me faire ch.... Bon, si topic_visibility vaut 2 c'est que le topic est supprimé (j'espère qu'il n'y a pas d'autres valeurs que 0, 1 et 2).
Mais on ne pourra le restaurer QUE si la présentation n'a pas déjà été faite => sinon il y aura deux présentation pour la même personne... Donc j'ai un truc de plus à gérer !

1ère chose faite => Supprimer le Quick Reply si pas de présentation faite et que l'utilisateur doit se présenter : ça évite qu'il tape un message pour que lorsqu'il valide le message soit perdu car il n'a pas le droit !
On m'a aidé ici et ça marche plutot bien...

Je crois que je vais avoir plus de taf que prévu, c'est pas si simple, il y a plein de trucs qui ont changés...
Le système d'extension c'est vraiment pas mal !

Pour l'event list, non je n'ai pas raté la page, et j'utilise un MOD pour voir les event template, c'est pas mal du tout !

EDIT : Grâce à ton aide, la redirection vers le forum de présentation marche super bien.
Fait en 5 minutes ! Bon, par contre, si je redirige vers la page d'explication ... ben là, elle n'existe pas encore.
C'est encore un nouveau truc à apprendre : faire une nouvelle page et l'indiquer à phpBB, j'ai déjà vu ça quelque par, ça ne devrait pas être trop compliqué...
Feneck91
Posteur expérimenté
Posteur expérimenté
 
Messages: 368
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Zoddo » 09 Jan 2016 à 20:26

Feneck91 a écrit:D'ailleurs pour migrer un forum de 3.0.x => 3.1.x je croyais qu'il fallait supprimer tous les MOD et leur données / modification de structure de la base de données ?

Oui et non ... ça permet de nettoyer la base de données, mais si on laisse les données, ça permet une mise à jour vers les extensions (si pris en charge).

Feneck91 a écrit:Oui, j'ai vu pour le softdelete ! Ça va bien me faire ch.... Bon, si topic_visibility vaut 2 c'est que le topic est supprimé (j'espère qu'il n'y a pas d'autres valeurs que 0, 1 et 2).

4 valeurs possibles : https://github.com/phpbb/phpbb/blob/3.1 ... hp#L95-L98

Feneck91 a écrit:sinon il y aura deux présentation pour la même personne...

Après les administrateurs savent ce qu'ils font ...

Feneck91 a écrit:C'est encore un nouveau truc à apprendre : faire une nouvelle page et l'indiquer à phpBB, j'ai déjà vu ça quelque par, ça ne devrait pas être trop compliqué...

Yep, c'est le routing :)
[Doc] Installer une extension - [Extension] Post Models - [Recrutement] Équipe des Extensions
Si vous considérez votre requête comme résolue, merci d'ajouter l'attribut de sujet [Réglé]
Zoddo
Equipe site
Equipe site
 
Messages: 6313
Enregistré le: 16 Mar 2011 à 18:44
Localisation: /root/

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 09 Jan 2016 à 21:07

C'est quoi ITEM_REAPPROVE ? => has been edited and needs to be re-approved
Parce que, actuellement, via le MOD, les modérateurs peuvent poster sur une sujet (la présentation) en cours d'approbation et le posteur voit sa présentation en cours d'approbation et peut la modifier / éditer mais pas poster un nouveau message...

Si ça se trouve il y a un nouveau mode qui permette de faire ce que je fais déjà (ou qui s'en rapproche)...
Feneck91
Posteur expérimenté
Posteur expérimenté
 
Messages: 368
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Zoddo » 09 Jan 2016 à 23:17

C'est utilisé si l'utilisateur n'as pas la permission de poster sans approbation.
Si il tente d'éditer un message, alors le message est "désapprouver" et placer dans cet état jusqu'à ce qu'un modérateur le réapprouver (si je me trompe pas).
[Doc] Installer une extension - [Extension] Post Models - [Recrutement] Équipe des Extensions
Si vous considérez votre requête comme résolue, merci d'ajouter l'attribut de sujet [Réglé]
Zoddo
Equipe site
Equipe site
 
Messages: 6313
Enregistré le: 16 Mar 2011 à 18:44
Localisation: /root/

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 09 Jan 2016 à 23:40

Ok, c'est logique... Ça ne devrait pas être utilisé dans le mode Introduciator mais je vais le gérer...

Edit : sur un post je comprend.... mais sur un topic ? C'est quoi le sens ? Le Topic redevient invisible ? Bizarre ...
Feneck91
Posteur expérimenté
Posteur expérimenté
 
Messages: 368
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 10 Jan 2016 à 06:17

Zoddo a écrit:
Feneck91 a écrit:D'ailleurs pour migrer un forum de 3.0.x => 3.1.x je croyais qu'il fallait supprimer tous les MOD et leur données / modification de structure de la base de données ?

Oui et non ... ça permet de nettoyer la base de données, mais si on laisse les données, ça permet une mise à jour vers les extensions (si pris en charge).
Le truc bien chiant à tester ! Installer phpBB 3.0.x, puis installer le mod, le configurer, supprimer le MOD, migrer en 3.1.x, installer l'extension et prier pour que ça marche :mrgreen:

Zoddo a écrit:
Feneck91 a écrit:sinon il y aura deux présentation pour la même personne...

Après les administrateurs savent ce qu'ils font ...
Ouais... faut espérer. Bon, je vais le gérer quand même. Déjà, le fait de supprimer le premier message d'un post dans le forum présentation a été bloqué (via une option du MOD), je pourrais utiliser cette option pour bloquer aussi le undelete si la présentation du membre est déjà présente.

Bon, ça ne marche pas, j'ai ce message d'erreur :
Not Found

The requested URL /Developpements/Web/www/ModTester/boards/Introduciator/app.php was not found on this server.

Dans services.yml j'ai ajouté :
Code: Tout sélectionner
    feneck91.introduciator.explain:
        class: feneck91\introduciator\controller\introduciator_explain
        arguments:
            - @config
            - @auth
            - @template
            - @user

Je suppose que la première ligne c'est le nom qu'on lui donne, on doit pouvoir mettre n'importe quoi ?
et la deuxième ligne (class) c'est le chemin vers le fichier php.

Dans routing.yml :
Code: Tout sélectionner
feneck91_introduciator_explain:
    path: /introduciator_explain
    defaults: { _controller: feneck91.introduciator.explain:display }

Première ligne : même nom que ce qui est donné dans services.yml mais avec des _ au lieu des . (c'est d'une logique)
Deuxième ligne path, c'est le chemin utilisé pour accéder à la page dans l'url
default, c'est le nom dans services suivi du nom de laméthode à appler (ici display).

J'ai ajouté le fichier introduciator_explain.php dans le répertoire controller dans feneck91/introduciator
Code: Tout sélectionner
<?php
/**
 *
 * @package phpBB Extension - Introduciator Extension
 * @author Feneck91 (Stéphane Château) feneck91@free.fr
 * @copyright (c) 2013 @copyright (c) 2014 Feneck91
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 */

namespace feneck91\introduciator\controller;

use Symfony\Component\HttpFoundation\Response;

/**
 * Class to manage introduciator explanation page.
 *
 * This page is displayed when user try to post and have not yet written it's introduce.
 * It explain that the introduce is mandatory and display links to help user to begin it's introduce.
 */ 
class introduciator_explain
{
	protected $config;
	protected $auth;
	protected $template;
	protected $user;

	/**
	 * Introduciator helper.
	 *
	 * The important code is into this helper.
	 */
	private $introduciator_helper;
	
	public function __construct(\phpbb\config\config $config, \phpbb\auth\auth $auth, \phpbb\template\template $template, \phpbb\user $user)
	{
		global $phpbb_container;
		// Get Introduciator class helper
		$this->introduciator_helper = $phpbb_container->get('feneck91.introduciator.helper');

		$this->config = $config;
		$this->auth = $auth;
		$this->template = $template;
		$this->user = $user;
	}
	
	public function display()
	{
/*
		// Start session management
		$user->session_begin();
		$auth->acl($user->data);
		$user->setup();
*/
		// Start initial var setup
		$forum_id	= request_var('f', 0);

		// If user not connected, go to login page
		if ($this->user->data['user_id'] == ANONYMOUS)
		{
			login_box('', $user->lang['LOGIN']);
		}

		if ($this->config['introduciator_allow'])
		{	// Title messagte
			// Load MOD configuration
			$params = $this->introduciator_helper->introduciator_getparams(false);

			$message = $this->user->lang('INTRODUCIATOR_MOD_MUST_INTRODUCE_INTO_FORUM', $params['forum_name']);
			page_header($message);

			$this->template->set_filenames(array(
				'body' => 'introduciator_explain.html',
			));

			$this->template->assign_vars(array(
				'S_MOD_ACTIVATED'					=> true,
				'INTRODUCIATOR_MOD_EXPLAIN_TITLE'	=> $params['explanation_message_title'],
				'INTRODUCIATOR_MOD_EXPLAIN_TEXT'	=> $params['explanation_message_text'],
				'S_RULES_ACTIVATED'					=> $params['is_explanation_display_rules'] && strlen($params['explanation_message_rules_text']) > 0,
				'S_RULES_TITLE_ACTIVATED'			=> (strlen($params['explanation_message_rules_title']) > 0),
				'INTRODUCIATOR_MOD_RULES_TITLE'		=> $params['explanation_message_rules_title'],
				'INTRODUCIATOR_MOD_RULES_TEXT'		=> $params['explanation_message_rules_text'],
				'INTRODUCIATOR_MOD_LINK_GOTO_FORUM'	=> $params['explanation_message_goto_forum'],
				'INTRODUCIATOR_MOD_LINK_POST_FORUM'	=> $params['explanation_message_post_forum'],
			));

			page_footer();
		}
		else
		{
			// In case of introduciator_getparams is not called, I must load the introduciator language file
			$this->introduciator_helper->load_language_if_needed($this->user);

			page_header($this->user->lang['INTRODUCIATOR_MOD_DISABLED']);
			$this->template->set_filenames(array(
				'body' => 'introduciator_explain.html',
			));

			page_footer();
		}
		return new Response($this->template->return_display('body'), 200);
	}
}
?>
Le code mis en commentaire (Start session management) est-il toujours nécessaire ?
Et enfin, j'ai ajouté introduciator_explain.html dans style\prosilver\template

Et c'est comme SFR : c'est pas fini !! En effet, il faudra ensuite que j'ajoute des css :
Dans styles/prosilver/theme/buttons.css => il faudra que j'ajoute la taille des imges
Dans styles/prosilver/theme/colours.css => il faudra que j'ajoute les images (noms)

Et bien entendu que j'ajoute les images elle meme dans l'arborescence...
Puis que je modifie les templates de différents panels (ajout des images / liens vers les présentations)

Non, franchement cette extension est complète, elle touche à pas mal de domaine des extensions, et du coup je galère un peu. Quand j'aurais tout utilisé ça ira mieux !

Pour la redirection : redirect(append_sid("{$phpbb_root_path}/introduciator_explain.$phpEx", 'f=' . $this->introduciator_params['fk_forum_id']));

Autre chose : pourquoi passer par exemple des arguments $phpEx et $phpbb_root_path alors que si on fait global $phpbb_root_path, $phpEx; ça marche tout aussi bien ?
Feneck91
Posteur expérimenté
Posteur expérimenté
 
Messages: 368
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 11 Jan 2016 à 12:21

J'ai compris certaines choses : j'ai changé la fonction appelée :
[/c]public function display($forum_id)[/c] et donc modifié routing.yml en path: /introduciator_explain/{forum_id}.
Je génère donc l'url en faisant : $url = $this->controller_helper->route('introduciator_explain', array('forum_id' => (int) $this->introduciator_params['fk_forum_id']));
Hélas ça me génère :
Fatal error: Uncaught exception 'Symfony\Component\Routing\Exception\RouteNotFoundException' with message 'Unable to generate a URL for the named route "introduciator_explain" as such route does not exist.' in E:\Developpements\Web\www\ModTester\boards\Introduciator\vendor\symfony\routing\Symfony\Component\Routing\Generator\UrlGenerator.php on line 134
( ! ) Symfony\Component\Routing\Exception\RouteNotFoundException: Unable to generate a URL for the named route "introduciator_explain" as such route does not exist. in E:\Developpements\Web\www\ModTester\boards\Introduciator\vendor\symfony\routing\Symfony\Component\Routing\Generator\UrlGenerator.php on line 134

Mais ça ne marche pas : au secours !! :mrgreen:

EDIT : Ouf, j'ai réussi !
En fait le lien à mettre c'est redirect($this->controller_helper->route('feneck91_introduciator_explain', array('forum_id' => (int) $this->introduciator_params['fk_forum_id']))); la première ligne du fichier routing.yml et non pas ce qu'il y a derrière path: c'est tout con, j'ai essayé plein de trucs mais pas ça ! Aller go en !
Feneck91
Posteur expérimenté
Posteur expérimenté
 
Messages: 368
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Nicofuma » 11 Jan 2016 à 13:50

A propos de global, la règle est simple: Ne jamais l'utiliser dans une extension. Concrètement c'est encore là pour des raisons de rétro-compatibilité avec le contenu du dossier includes/, rien d'autre. Et c'est voué à disparaître (je ne sias pas si tu as remarqué mais le contenu du dossier includes/ réduit de jour en jour, l'objectif étant de le faire disparaitre entièrement puis de complètement supprimer l'usage de global.

Sinon, à propos des redirections et de la génération des URLs tu as bien compris : dans le fichier routing.yml tu définis une série de routes identifiés par un nom et c'est ce nom qu'il faut utiliser. En revanche, si tu es dans un contrôleur évite d'utiliser la fonction redirect(), à la place il est préférable de retourner une instance de la class RedirectResponse (elle prends en premier paramètre l'url vers laquelle tu veux rediriger l'utilisateur).

Code: Tout sélectionner
nom:
    path: /mon_path
    ...
Membre de la phpBB Development-Team sur phpbb.com - Release manager de la version 3.2
Pas de support par PM
Nicofuma
Apprenti-posteur
Apprenti-posteur
 
Messages: 173
Enregistré le: 19 Avr 2014 à 20:38

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 11 Jan 2016 à 14:02

Super réponse. Ok, c'est noté je vais refaire une passe sur mon code, merci pour ces précisions !
D'ailleurs le routing c'est aussi :
Code: Tout sélectionner
nom:
    path: /mon_path/{mavariable1}/{mavariable2}/ ..... etc...
    ...

Si on veut passer des arguments.
Le redirect est à éviter pour une page perso comme j'ai fais ou pour toutes les pages ?
Parce que j'utilise 1 redirect pour ma page d'explication (ce que je migre actuellement) et d'autres pour rediriger vers des pages phpbb (genre aller vers le forum de présentation / placer l'utilisateur directement en mode édition d'un nouveau message / Aller directement à la présentation du membre si on clic sur le bouton sous l'avatar / etc... ).

Petite chose étrange : entre la version 1.0.0 et la version 1.1.0 j'ai du ajouter 4 images pour les coins rouges lorsque je présente les règles du forum de présentation parce que les 4 coins (arondis) étaient blanc au lieu de bleu... (normalement, les blocs en rouge étaient sur fond blanc, donc la partie qui n'est pas dans le cadre rouge devait avoir la couleur du fond). Visiblement ce n'est plus le cas, ils ont du gérer de la transparence parce que là ça marche bien.
Feneck91
Posteur expérimenté
Posteur expérimenté
 
Messages: 368
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Nicofuma » 11 Jan 2016 à 14:07

l'utilisation de la fonction redirect() est à éviter dès lors que tu es dans un contrôleur (peut importe vers quoi tu redirige) car redirect() fait parti du passé alors que les contrôleurs et RedirectResponse sont l'avenir :)
Membre de la phpBB Development-Team sur phpbb.com - Release manager de la version 3.2
Pas de support par PM
Nicofuma
Apprenti-posteur
Apprenti-posteur
 
Messages: 173
Enregistré le: 19 Avr 2014 à 20:38

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 11 Jan 2016 à 14:48

Merde ! Ça aussi va falloir que je fasse un passe ! En plus il va falloir que je trouve les urls de redirections pour chaque redirection que je fais ! Bon en fait, ça va, je n'en ai que 2.
Et les URLs ? Ça aussi ça a changé ?
Code: Tout sélectionner
				$forum_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $params['fk_forum_id']);
				$forum_post = append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=post&amp;f=' . $params['fk_forum_id']);
Feneck91
Posteur expérimenté
Posteur expérimenté
 
Messages: 368
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Nicofuma » 11 Jan 2016 à 14:53

non pas encore :) Plus tard oui (peut etre en 3.3 ou en 3.4, mais les URLs actuelles resteront compatibles de toute façon)
Membre de la phpBB Development-Team sur phpbb.com - Release manager de la version 3.2
Pas de support par PM
Nicofuma
Apprenti-posteur
Apprenti-posteur
 
Messages: 173
Enregistré le: 19 Avr 2014 à 20:38

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 11 Jan 2016 à 15:58

Dans ma classe helper, je retourne new \Symfony\Component\HttpFoundation\RedirectResponse($this->controller_helper->route('feneck91_introduciator_explain', array('forum_id' => (int) $this->introduciator_params['fk_forum_id'])));, cette valeur de retour est elle aussi retournée par le controlleur : résultat, ça ne redirectionne plus rien du tout !

Et ce code au début de ma classe helper ?
Code: Tout sélectionner
if (!function_exists('group_memberships'))
{
	global $phpbb_root_path, $phpEx;
	include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
}


De plus pas mal de page web, lorsque je rechercher utilisent ce code :
Code: Tout sélectionner
use Symfony\Component\HttpFoundation\Response;
ou autre classe (souvent toutes les classes des variables membres des classes contrôlleur). Ça sert à quoi ? parce que perso, sans ça, ça marche quand même !
Feneck91
Posteur expérimenté
Posteur expérimenté
 
Messages: 368
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

Re: Portage MOD Introduciator + tutoriel

Messagepar Nicofuma » 11 Jan 2016 à 17:37

Pour ta seconde question le mieux est de lire la doc PHP : http://php.net/manual/fr/language.names ... orting.php

Pour la première, je ne comprends pas ce que tu fais : ton contrôleur ? ton helper ? sans le code c'est très très difficile de comprendre.
Membre de la phpBB Development-Team sur phpbb.com - Release manager de la version 3.2
Pas de support par PM
Nicofuma
Apprenti-posteur
Apprenti-posteur
 
Messages: 173
Enregistré le: 19 Avr 2014 à 20:38

Re: Portage MOD Introduciator + tutoriel

Messagepar Feneck91 » 11 Jan 2016 à 19:29

Oui tu as raison, sans le code...
Voici le code.
Image

Le fichier event/listener.php se connecte à l'event core.posting_modify_template_vars fonction on_displaying_posting_screen qui écrit :
Code: Tout sélectionner
		// Make a redirection page if needed, else does nothing
		return $this->introduciator_helper->introduciator_verify_posting($this->user, $event['mode'], $event['forum_id'], $event['post_id'], $event['post_data'], true);

La classe introduciator_helper contient le code de vérification de l'extension, toutes les fonctions un peu complexes...
et c'est la fonction introduciator_verify_posting qui retourne
Code: Tout sélectionner
new \Symfony\Component\HttpFoundation\RedirectResponse($this->controller_helper->route('feneck91_introduciator_explain', array('forum_id' => (int) $this->introduciator_params['fk_forum_id'])));


Et ça ne redirige rien du tout...

Pour les uses... oui, c'est un peu comme en C++ quand on fait des using std, j'ai horreur de ça... Je préfère mettre le nom global de la classe...

EDIT : Il semblerait que l'event soit de type phpbb\event\data alors que pour appeler setResponse sur l'event il faille un event de type \Symfony\Component\HttpKernel\Event\GetResponseEvent.
Du coup j'ai l'impression que je n'ai pas le choix de faire le redirect !
Sinon ça aurait pu ressembler à ça :
Code: Tout sélectionner
	public function on_displaying_posting_screen($event)
	{
		// Make a redirection page if needed, else does nothing
		$response = $this->introduciator_helper->introduciator_verify_posting($this->user, $event['mode'], $event['forum_id'], $event['post_id'], $event['post_data'], true);
		if ($response instanceof \Symfony\Component\HttpFoundation\RedirectResponse)
		{
			$event->setResponse($response);
		}
	} 
Feneck91
Posteur expérimenté
Posteur expérimenté
 
Messages: 368
Enregistré le: 31 Déc 2007 à 13:02
Localisation: Essonne (91)

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é