[Réglé] bbcode secret (avec PHPBB 3.1.9 et Advanced BBCode Box 3.1.3)

Forum pour discuter des extensions, du processus de validation, la traduction des extensions, pour rechercher des extensions...
Pas de support dans cette section

Modérateur: Equipe

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

Attention, aucun support n'est fourni dans cette section.
Partager sur FacebookPartager sur TwitterPartager sur Google+

[Réglé] bbcode secret (avec PHPBB 3.1.9 et Advanced BBCode Box 3.1.3)

Messagepar Ecilam » 26 Juin 2016 à 09:44

L'idée du bbcode secret est de permettre d'inclure dans un message un commentaire lisible uniquement par les utilisateurs autorisés.

La syntaxe est la suivante :
Code: Tout sélectionner
[secret=utilisateur1,utilisateur2]Message privé lisible que par utilisateur1 et utilisateur2.[/secret]


De base secret pré-rempli utilisateur1 avec votre pseudo puisque sinon vous ne pourriez voir le message. Vous pouvez saisir plusieurs utilisateurs en séparant les noms, sensible à la case, par une virgule.
Ce code reste basique car même l'administrateur ou les modérateurs ne peuvent voir ce message si ils ne sont pas autorisés. Après vous pouvez toujours limiter l'usage de ce bbcode à certains utilisateurs comme pour les autres bbcode.

N'ayant pas les connaissances nécessaires pour partir de zéro, je me suis basé sur l'indispensable extension Advanced BBCode Box 3.1.3 proposée par VSE que j'ai modifié pour mes besoins.

Je partage avec vous le fruit de cette réflexion.

  1. Fichier phpBB3\ext\vse\abbc3\event\listener.php :
    • Ajouter à la fonction getSubscribedEvents (en ligne 80 par exemple) la ligne suivante :
      Code: Tout sélectionner
      'core.decode_message_before'  => 'parse_message_before',
    • Ajouter cette nouvelle fonction (en ligne 95 ou plus loin) :
      Code: Tout sélectionner
        public function parse_message_before($event)
          {
          // secret BBCodes
          $event['message_text'] = $this->bbcodes_parser->pre_parse_message($event['message_text'], $event['bbcode_uid']);
          }

      Cette partie de code permet d'écouter l'event core.decode_message_before (accessible depuis PHPBB 3.1.9rc1) que j'utilise pour intercepter le texte du message avant qu'il n'apparaisse dans la zone de saisie. Cela évite que le contenu soit affiché en cas de citation d'un message contenant un bbcode secret par un utilisateur non autorisé.
      Si vous connaissez un event plus adapté je suis preneur.
  2. Fichier phpBB3\ext\vse\abbc3\core\bbcodes_parser.php :
    • Ajouter cette fonction en ligne 35 :
      Code: Tout sélectionner
      	/**
      	 * Pre-Parser message for secret BBCode
      	 *
      	 * @param string $text The text to parse
      	 * @return string The parsed text
      	 * @access public
      	 */
      	public function pre_parse_message($text, $uid)
      	{
          $text = preg_replace_callback('#\[(secret)=(.*?):(' . $uid . ')\]([^[]+)\[/\1:\3\]#is', array($this, 'secret_pass'), $text);
      
      		return $text;
      	}

      Fonction appelée lors de l'event core.decode_message_before.
      Analyse le contenu du message avant son édition (lors d'une citation) et appelle la fonction secret_pass si le bbcode secret est trouvé.
    • Ajouter à la fonction pre_parse_bbcodes (ligne 61 après la modification ci-dessus) :
      Code: Tout sélectionner
          // secret BBCodes
          $text = preg_replace_callback('#\[(secret)=(.*?):(' . $uid . ')\]([^[]+)\[/\1:\3\]#is', array($this, 'secret_pass'), $text);
      

      Fonction appelée lors de l'event core.modify_text_for_display_before.
      Analyse les messages affichés et appelle la fonction secret_pass si le bbcode secret est trouvé.
    • Ajouter cette fonction après la fonction pre_parse_bbcodes (ligne 66 après la modification ci-dessus) :
      Code: Tout sélectionner
      	/**
      	 * hide secret BBCode if user not allowed
      	 *
      	 * @param array $matches
      	 * @return string of secret bbcode
      	 * @access protected
      	 */
      	protected function secret_pass($matches)
      	{
          $groups = explode(',', $matches[2]);
      		return (in_array($this->user->data['username'], $groups)) ?
      			"[secret=$matches[2]:$matches[3]]$matches[4][/secret:$matches[3]]" :
            '';
      	}

      Supprime le bbcode si l'utilisateur actuel n'apparaît pas dans la liste.
  3. Fichier phpBB3\ext\vse\abbc3\language\fr\abbc3.php :
    • Ajouter en ligne 38 :
      Code: Tout sélectionner
      	// Off Topic BBCode
      	'ABBC3_SECRET'			=> 'Message secret pour :',
    • Ajouter en ligne 58 :
      Code: Tout sélectionner
      	'ABBC3_SECRET_HELPLINE'		=> 'Message secret : [secret=utilisateur1,utilisateur2,...]message secret[/secret]',

      Ces modifications concernent la langue française. A adapter pour les autres fichiers suivant vos besoins.
  4. Fichier phpBB3\ext\vse\abbc3\migrations\v310_m4_install_data.php :
    • Ajouter en ligne 126 :
      Code: Tout sélectionner
      		'secret' => array(
      			'bbcode_helpline'	=> 'ABBC3_SECRET_HELPLINE',
      			'bbcode_match'		=> '[secret={TEXT1}]{TEXT2}[/secret]',
      			'bbcode_tpl'		=> '<table class="ModTable" style="background-color:#FFFFFF;border:1px solid #000000;border-collapse:separate;border-spacing:5px;padding:0;width:100%;color:#333333;overflow:hidden;"><tr><td class="exclamation" rowspan="2" style="background-color:#ff6060;font-weight:bold;font-family:\'Times New Roman\',Verdana,sans-serif;font-size:4em;color:#ffffff;vertical-align:middle;text-align:center;width:1%;">&nbsp;?&nbsp;</td><td class="rowuser" style="border-bottom:1px solid #000000;font-weight:bold;">{L_ABBC3_SECRET} {TEXT1}</td></tr><tr><td class="rowtext">{TEXT2}</td></tr></table>',
      		),

      Cette partie déclare le bbcode secret. J'ai utilisé le template du bbcode mode (message d'alerte).
  5. Fichier phpBB3\ext\vse\abbc3\styles\all\template\abbc3_posting_buttons.html :
    • Ajouter en ligne 120 :
      Code: Tout sélectionner
      		case 'secret=':
      			bbfontstyle('[secret={{ ABBC3_USERNAME|e("js") }},]', '[/secret]');
      			break;
        

      Cette partie permet d'ajouter automatiquement votre pseudo lors de l'ajout du bbcode secret.

Bonne journée.
Modifié en dernier par Ecilam le 28 Juin 2016 à 08:31, modifié 1 fois.
Ecilam
Posteur néophyte
Posteur néophyte
 
Messages: 2
Enregistré le: 25 Juin 2016 à 07:18

Re: bbcode secret (avec PHPBB 3.1.9 et Advanced BBCode Box 3.1.3)

Messagepar FoFa » 26 Juin 2016 à 10:12

Hello

Merci pour le partage.

Pourquoi ne le proposeriez-vous pas à l'auteur de l'extension?

CordCordialement
Après l'assassinat de mon ordinateur, je reviens progressivement vers vous...
FoFa
Resp. des supporters
Resp. des supporters
 
Messages: 10367
Enregistré le: 15 Nov 2008 à 18:04
Localisation: Auxonne

Re: bbcode secret (avec PHPBB 3.1.9 et Advanced BBCode Box 3.1.3)

Messagepar Ecilam » 26 Juin 2016 à 10:44

Pourquoi ne le proposeriez-vous pas à l'auteur de l'extension?

Je ne suis pas très versé dans la langue de Shakespeare et je pense que ce code est trop basique pour être intégré à son extension tel quel surtout qu'il y a surement des cas que je n'ai pas géré (je pense au MP).

Edit : ça fonctionne aussi pour les MP même si l'utilité dans ce cas reste discutable ^^
Ecilam
Posteur néophyte
Posteur néophyte
 
Messages: 2
Enregistré le: 25 Juin 2016 à 07:18


Retourner vers Discussions et recherches d'extensions

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

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