[Dev] [2.0.1] View Friends

Pour les extensions destinées à phpBB 3.2.x

Modérateur: Equipe

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

[Dev] [2.0.1] View Friends

Messagepar Ady » 15 Aoû 2019 à 17:58

  • Titre : View Friends
  • Description : Ajoute une liste des amis sur la page de profil
    L'idée vient de cette recherche. Et tout ce que j'ai trouvé c'est un MOD pour phpBB 3.0.X...
  • Version stable : 1.0.1-RC
  • Version en développement : 2.0.1
  • Auteur : Ady
  • To-do :
    • Le user doit pouvoir supprimer un ami via la liste de son propre profil
    • Tooltip on hover pour voir les informations du membre
  • Lastest release : https://github.com/ad0726/viewfriends/releases
  • Capture d'écran :
    Page de profil
Modifié en dernier par Ady le 18 Aoû 2019 à 15:11, modifié 9 fois.
Avatar de l’utilisateur
Ady
Posteur néophyte
Posteur néophyte
 
Messages: 54
Enregistré le: 27 Aoû 2018 à 13:00

Re: [Dev][1.0.0] View Friends

Messagepar tomberaid » 15 Aoû 2019 à 20:08

Hello
Ady a écrit:
  • Il y a quelque chose qui décale le contenu des autres div sur la gauche
  • Le titre "Les amis de..." doit être à l'intérieur
  • Utiliser les langues pour "Les amis de..." (au moins FR et EN)


Pour le n° 1, c'est tes propriétés css sur div.panel.bg2 qui foutent le bazar, si tu les supprimes problème réglé.
Pour le n° 2, remplace (pour test) le contenu de ton fichier memberlist_view_contact_before.html par :
Code: Tout sélectionner
{% if FRIENDS %}
{% INCLUDECSS '@ady_viewfriends/adyviewfriends.css' %}
<div class="panel bg2">
	<div class="inner">
	<h3>Les amis de {{ USERNAME }}</h3>
	{% for user_id, friend in FRIENDS %}
		<div class="adyviewfriends one-friend">
			{% set style = "" %}
			{% if friend.user_colour != "" %}
				{% set style = "color: #" ~ friend.user_colour ~ "; font-weight: bold;" %}
			{% endif %}
			<span style="{{ style }}">{{ friend.username }}</span><br>
			<a href="/memberlist.php?mode=viewprofile&u={{ user_id }}">
				{% if friend.user_avatar != "" %}
				<img src="./download/file.php?avatar={{ friend.user_avatar }}">
				{% else %}
				<img src="{{ T_THEME_PATH }}/images/no_avatar.gif" alt=""/>
				{% endif %}
			</a>
		</div>
	{% endfor %}
	</div>
</div>
{% endif %}
Au passage j'ai réassigné l'adresse de l'image no_avatar afin qu'elle pointe vers l'image du style et non vers : ./ext/mazeltof/memberlistavatar/styles/prosilver/theme/images/no_avatar.gif.
Pour le n° 3, il te faut rajouter des fichiers de langue à ton extension.

Cordialement
Image
Avatar de l’utilisateur
tomberaid
Roi des posts
Roi des posts
 
Messages: 750
Enregistré le: 18 Juin 2009 à 00:27

Re: [Dev][1.0.0] View Friends

Messagepar Ady » 16 Aoû 2019 à 00:12

Ahah ouais j'avoue j'ai publié ça trop rapidement ^^
Merci pour ton aide en tout cas, surtout je connaissais pas T_THEME_PATH c'est pratique ça.

J'ai fait une nouvelle release 1.0.1-dev.

Du coup, n'hésitez pas à tester et à me faire des retours encore même si ce n'est rien d'extraordinaire. Et si vous avez d'autres idées à rajouter également.

Et quelqu'un peut me dire quelle est la suite du process ? A quel moment je passe en RC, à qui et où je dois faire une quelconque demande ?
Désolé c'est ma première ^^
Avatar de l’utilisateur
Ady
Posteur néophyte
Posteur néophyte
 
Messages: 54
Enregistré le: 27 Aoû 2018 à 13:00

Re: [Dev][1.0.1] View Friends

Messagepar ABDev » 16 Aoû 2019 à 07:34

On ne peut pas vraiment te dire quand il faudra passer à tel ou tel statut.
En gros, pour une RC, c'est quand tu es certain d'être proche de la version finale.
Pour se payer le luxe d'être feignant, il faut sans cesse faire travailler ses méninges ! (Korben)

On clique sur le bouton Répondre plutôt que le bouton Citer ...
Un problème avec une extension ? Pas de lien vers celle-ci ? Sujet ignoré !
Avatar de l’utilisateur
ABDev
Programmationateur
Programmationateur
 
Messages: 15808
Enregistré le: 12 Mai 2005 à 23:54

Re: [Dev][1.0.1] View Friends

Messagepar Ady » 16 Aoû 2019 à 09:23

Oui pardon je me suis mal exprimé. Il suffit juste de le passer le statut de ce sujet en RC ? Je sais qu'il y a justement le mot candidate dedans mais je sais pas peut-être qu'il faire une demande particulière, remplir un formulaire quelque part, je sais pas xD
Et il faut proposer à .com aussi ?
Avatar de l’utilisateur
Ady
Posteur néophyte
Posteur néophyte
 
Messages: 54
Enregistré le: 27 Aoû 2018 à 13:00

Re: [Dev][1.0.1] View Friends

Messagepar pierredu » 17 Aoû 2019 à 09:28

Il vaut mieux.
Le nombre des utilisateurs potentiels est plus élevé, donc la qualité du débogage est supérieure.
Avatar de l’utilisateur
pierredu
Resp. Extensions
Resp. Extensions
 
Messages: 1183
Enregistré le: 29 Mai 2011 à 06:49
Localisation: Paris

Re: [Dev][1.0.1] View Friends

Messagepar ABDev » 17 Aoû 2019 à 10:14

Peux-tu mettre ta capture sous forme de lien, ou miniature éventuellement ? La page est complètement déformée lors qu'on consulte ce sujet depuis un équipement mobile ...
Pour se payer le luxe d'être feignant, il faut sans cesse faire travailler ses méninges ! (Korben)

On clique sur le bouton Répondre plutôt que le bouton Citer ...
Un problème avec une extension ? Pas de lien vers celle-ci ? Sujet ignoré !
Avatar de l’utilisateur
ABDev
Programmationateur
Programmationateur
 
Messages: 15808
Enregistré le: 12 Mai 2005 à 23:54

Re: [RC][1.0.1] View Friends

Messagepar Ady » 17 Aoû 2019 à 18:46

C'est fait :)

J'ai passé l'extension en RC. Je vais la proposer également à .com dans le week-end.
Et j'ai déjà des idées pour une V2 comme pouvoir supprimer un ami de sa liste, un tooltip en hover avec des infos sur le user, etc... N'hésitez pas si vous avez des idées :)
Avatar de l’utilisateur
Ady
Posteur néophyte
Posteur néophyte
 
Messages: 54
Enregistré le: 27 Aoû 2018 à 13:00

Re: [RC][1.0.1] View Friends

Messagepar Steph » 17 Aoû 2019 à 19:00

Salut,

Je te suggère fortement de faire les modifications et ajouts que tu souhaites faire avant de soumettre.

A chaque mise à jour que tu vas soumettre, il faudra passer par la case validation, autant proposer une extension la plus complète possible dès le départ, mais ce n'est qu'un avis.
Avatar de l’utilisateur
Steph
Administrateur
Administrateur
 
Messages: 19103
Enregistré le: 29 Déc 2008 à 16:48
Localisation: Alsace / Bas-Rhin / France

Re: [RC][1.0.1] View Friends

Messagepar Ady » 17 Aoû 2019 à 20:24

Ok bah je repasse en [dev] alors ^^
J'ai le droit d'indiquer que la V1 est stable ou en RC au moins ? Même si je mets le sujet en Dev pour la V2. C'est vraiment deux version différente pour moi vu que la première feature principale est faite et répond à la "demande" initiale.
Avatar de l’utilisateur
Ady
Posteur néophyte
Posteur néophyte
 
Messages: 54
Enregistré le: 27 Aoû 2018 à 13:00

Re: [2.0.1] View Friends

Messagepar ABDev » 18 Aoû 2019 à 23:42

Je ferai un topo demain, je viens de remarquer une bourde inacceptable en matière de développement selon moi.
Pour se payer le luxe d'être feignant, il faut sans cesse faire travailler ses méninges ! (Korben)

On clique sur le bouton Répondre plutôt que le bouton Citer ...
Un problème avec une extension ? Pas de lien vers celle-ci ? Sujet ignoré !
Avatar de l’utilisateur
ABDev
Programmationateur
Programmationateur
 
Messages: 15808
Enregistré le: 12 Mai 2005 à 23:54

Re: [2.0.1] View Friends

Messagepar ABDev » 20 Aoû 2019 à 07:01

Hello,
Alors pour commencer, voici une petite correction à apporter, du fait que tu utilises des crochets pour les tableaux.
Donc tu remplaces :

Code: Tout sélectionner
    static public function getSubscribedEvents()
    {
        return array(
            'core.user_setup'              => 'load_language_on_setup',
            "core.memberlist_view_profile" => "render_memberlist_view_profile"
        );
    

Par :

Code: Tout sélectionner
    static public function getSubscribedEvents()
    {
        return [
            'core.user_setup'              => 'load_language_on_setup',
            'core.memberlist_view_profile' => 'render_memberlist_view_profile',
        ];
    


Ensuite, un gros problème d'optimisation avec une requête dans une boucle ...
En gros, si ton utilisateur a 100 amis, tu vas avoir 101 requêtes dans ton extension sur son profil :roll:.
Voici donc comment pallier au problème.
Remplace :

Code: Tout sélectionner
    public function render_memberlist_view_profile($event)
    {
        $member       = $event['member'];
        $friends      = [];
        $zebra_result = [];
        $table_zebra  = $this->table_prefix."zebra";
        $table_users  = $this->table_prefix."users";
        $sql_user     = "SELECT username, user_avatar, user_colour FROM $table_users WHERE user_id = ";

        $sql          = "SELECT zebra_id FROM $table_zebra WHERE user_id {$member['user_id']} AND friend = 1";
        $zebra_result = $this->db->sql_query($sql);

        if ($zebra_result->num_rows > 0) {
            while ($row = $this->db->sql_fetchrow($zebra_result)) {
                $user_result = $this->db->sql_query($sql_user.$row['zebra_id']);
                $user        = $this->db->sql_fetchrow($user_result);

                $friends[$row['zebra_id']] = $user;
            }
            $this->db->sql_freeresult($user_result);
            $this->db->sql_freeresult($zebra_result);
        }

        $template_data['FRIENDS']    = $friends;
        $template_data['L_USERNAME'] = $this->lang->lang('L_USERNAME').$member['username'];
        $this->template->assign_vars($template_data);
    }

Par :

Code: Tout sélectionner
    public function render_memberlist_view_profile($event)
    {
        $member       = $event['member'];
        $friends      = [];

        $sql = 'SELECT z.zebra_id, u.username, u.user_avatar, u.user_colour
            FROM '
 . $this->table_prefix . 'zebra z
            INNER JOIN '
 . $this->table_prefix . 'users u
                ON u.user_id = z.zebra_id
            WHERE z.user_id = '
 . (int) $member['user_id'] . '
                AND z.friend = 1'
;
        $result = $this->db->sql_query($sql);
        if ($row = $this->db->sql_fetchrow($result))
        {
            do
            
{
                $friends[ (int) $row['zebra_id'] ] = $row;
            }
            while ($row = $this->db->sql_fetchrow($result));
            $this->db->sql_freeresult($result);

            $template_data['FRIENDS'] = $friends;
            $template_data['L_USERNAME'] = sprintf($this->lang->lang('L_USERNAME'), $member['username']);

            $this->template->assign_vars($template_data);
        }
    

Enfin, pour concaténer des chaines, il est préférable d'utiliser sprintf() plutôt qu'un point.
Donc dans tes fichiers de langue, tu remplaces :

Code: Tout sélectionner
$lang = array_merge($lang, array(
    'L_USERNAME' => 'Friends of ',
)); 

Par :

Code: Tout sélectionner
$lang = array_merge($lang, array(
    'L_USERNAME' => 'Friends of %s',
)); 


Je te laisse procéder à la modification dans le fichier de langue française.

Reste la partie HTML à corriger, parce que ceci sera forcément refusé sur .Com et ne fonctionne pas dans le cas de la configuration de mon forum de test de toute façon :

Code: Tout sélectionner
            <a href="/memberlist.php?mode=viewprofile&u={{ user_id }}">
                {% if friend.user_avatar != "" %}
                <img src="./download/file.php?avatar={{ friend.user_avatar }}">
                {% else %}
                <img src="{{ T_THEME_PATH }}/images/no_avatar.gif">
                {% endif %}
            </a>
Pour se payer le luxe d'être feignant, il faut sans cesse faire travailler ses méninges ! (Korben)

On clique sur le bouton Répondre plutôt que le bouton Citer ...
Un problème avec une extension ? Pas de lien vers celle-ci ? Sujet ignoré !
Avatar de l’utilisateur
ABDev
Programmationateur
Programmationateur
 
Messages: 15808
Enregistré le: 12 Mai 2005 à 23:54

Re: [2.0.1] View Friends

Messagepar Ady » 20 Aoû 2019 à 11:15

ABDev a écrit:Hello,
Alors pour commencer, voici une petite correction à apporter, du fait que tu utilises des crochets pour les tableaux.

J'utilisais cette syntaxe mais depuis longtemps je me suis habitué à la syntaxe courte intégrée avec PHP5.4. Est-ce dans les standards phpBB ou PSR peut-être ?

ABDev a écrit:Ensuite, un gros problème d'optimisation avec une requête dans une boucle ...
En gros, si ton utilisateur a 100 amis, tu vas avoir 101 requêtes dans ton extension sur son profil :roll:.
Voici donc comment pallier au problème.

Tu devais sûrement parler de ça dans ton message au-dessus. J'avoue c'est sale en y repensant. Pour ma défense, je débute dans le phpBB et je commence à peine à me familiariser avec les events. Mais c'est comme ça qu'on apprend.

ABDev a écrit:Reste la partie HTML à corriger, parce que ceci sera forcément refusé sur .Com et ne fonctionne pas dans le cas de la configuration de mon forum de test de toute façon :

Code: Tout sélectionner
            <a href="/memberlist.php?mode=viewprofile&u={{ user_id }}">
                {% if friend.user_avatar != "" %}
                <img src="./download/file.php?avatar={{ friend.user_avatar }}">
                {% else %}
                <img src="{{ T_THEME_PATH }}/images/no_avatar.gif">
                {% endif %}
            </a>

[/quote]
Ici, je n'ai pas compris ce qui sera refusé et qui ne marche pas chez toi. Juste si tu peux m'expliquer, sans me donner la solution.

En tout cas, merci d'avoir pris le temps de tester et me remonter les différents bugs/mauvaises pratiques, c'est très appréciable. J'apporte dès que possible tous ces correctifs. Encore merci :)
Avatar de l’utilisateur
Ady
Posteur néophyte
Posteur néophyte
 
Messages: 54
Enregistré le: 27 Aoû 2018 à 13:00

Re: [2.0.1] View Friends

Messagepar ABDev » 20 Aoû 2019 à 13:47

phpBB n'utilise pas la convention PSR, mais la sienne : https://wiki.phpbb.com/Category:Development
Pour ce qui est de la requête dans la boucle, cela n'a rien à voir avec phpBB. C'est du PHP avant tout :).
Enfin, pour ce qui est de la partie HTML que j'ai évoqué, tu ne dois pas avoir de liens tels que tu les as mis.
Le fait d'avoir des parties en dur, c'est un refus catégorique de la part de .Com
Et j'abonde dans ce sens, car les fichiers PHP sont justement là pour ça.
Tu dois nécessairement passer par des variables de template.
Exemple :

Code: Tout sélectionner
'U_TOPIC_AUTHOR'        => get_username_string('profile', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']), 

D'ailleurs, il faudra que tu génères tes liens de profil à l'aide de la fonction get_username_string(), présente dans le fichier includes/functions_content.php
Pour le problème que j'ai évoqué sur mon forum de test, c'est dû justement à cette ligne :

Code: Tout sélectionner
<a href="/memberlist.php?mode=viewprofile&u={{ user_id }}">

Quelque soit le chemin de ton forum, ton URL sera toujours http://www.domain.tld/memberlist.php?mode=viewprofile&u=2 par exemple.
Mais dans mon cas, c'est ainsi http://m-server/phpbb3/dbg-ext-viewfriends/memberlist.php?mode=viewprofile&u=2
Au clic ou au survol, le lien renvoyé est http://m-server/memberlist.php?mode=viewprofile&u=2
D'où l'importance d'utiliser la variable $phpbb_root_path, voire la variable $board_url, pour l'image que tu utilises quand un utilisateur ne dispose pas d'un avatar.
D'autant que cette dernière dispose d'une variable de template globale : BOARD_URL (voir la fonction page_header dans le fichier includes/functions.php)

Voilou, je ne peux pas dire mieux :).
Pour se payer le luxe d'être feignant, il faut sans cesse faire travailler ses méninges ! (Korben)

On clique sur le bouton Répondre plutôt que le bouton Citer ...
Un problème avec une extension ? Pas de lien vers celle-ci ? Sujet ignoré !
Avatar de l’utilisateur
ABDev
Programmationateur
Programmationateur
 
Messages: 15808
Enregistré le: 12 Mai 2005 à 23:54

Re: [2.0.1] View Friends

Messagepar Ady » 20 Aoû 2019 à 14:01

Ah tu parlais du while ^^
Désolé je t'ai répondu un peu vite ce matin avec la tête ailleurs. Je pensais que le problème était de faire une requête dans un event si cet event appartient à une boucle. En effet, la requête dans mon while c'est pas propre et j'en suis pas fier ^^

Merci pour les indications des variables de template et les fonctions, je ne les connaissais pas.

Bref, j'suis peut-être allé un peu vite sur ce dev ^^
Avatar de l’utilisateur
Ady
Posteur néophyte
Posteur néophyte
 
Messages: 54
Enregistré le: 27 Aoû 2018 à 13:00


Retourner vers Extensions en développement

Qui est en ligne

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