Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gérer les modérateurs dans mon forum

Sujet résolu
    23 juin 2006 à 17:55:52

    Bonjour tout le monde :)

    je suis en train de faire un forum et j'ai un petit soucis au niveau de la gestion des modérateurs.

    J'ai une table forum_categories avec :
    • un champ id
    • un champ categorie (varchar)

    et une table membres, avec plusieurs champs dont un qui contient les droits de modération des différents forums (en int), et qui est à NULL quand le membre n'a aucun droit

    Après avoir lu le tuto sur les opérateurs de bits, je me suis dit que ça serait pas mal de gérer les droits de modération en binaire.

    Donc je vous donne quelques exemples :
    • si un membre n'a aucun droit, moderation vaut NULL
    • si le membre peut modérer la catégorie d'id 1, moderation vaut 00001
    • si le membre peut modérer la catégorie d'id 2, moderation vaut 00010
    • si le membre peut modérer la catégorie d'id 3, moderation vaut 00100
    • ...

    Mais mon problème n'est pas pour ajouter ou retirer des droits de modération, mais pour lister les modérateurs avec la catégorie qu'ils modèrent


    Je n'ai trouvé qu'une seule solution, mais elle est très lourde, et je suis obligé de répéter la partie de code entourée de /********************/ autant de fois qu'il y a de catégories :(
    $requete = query('SELECT moderation, pseudo FROM site_membres WHERE moderation IS NOT NULL ORDER BY moderation');
    while ($donnees = mysql_fetch_assoc($requete))
    {
            if ($donnees['moderation'] >= 1)
                    $array_cat_1[] = $donnees['pseudo'];
            if ($donnees['moderation'] >= 2)
                    $array_cat_2[] = $donnees['pseudo'];
            if ($donnees['moderation'] >= 4)
                    $array_cat_3[] = $donnees['pseudo'];
            if ($donnees['moderation'] >= 8)
                    $array_cat_4[] = $donnees['pseudo'];
            if ($donnees['moderation'] >= 16)
                    $array_cat_5[] = $donnees['pseudo'];
    }

    /********************/
    if (count($array_cat_1) != 0)
    {
            $monTemplate -> assign_block_vars('acces_page.bloc1', array());
            foreach ($array_cat_1 as $modos_cat_1)
            {
                    if (!isset($cat_1_effectuee))
                    {
                            $monTemplate -> assign_block_vars('acces_page.bloc1.categorie', array(
                                    'U_CATEGORIE' => $categories_du_forum[1]
                                    ));
                            $cat_1_effectuee = TRUE;
                    }
                    $monTemplate -> assign_block_vars('acces_page.bloc1.moderateurs', array(
                            'U_MODOS_CAT' => $modos_cat_1
                            ));
            }
    }
    /********************/


    Pour info voilà les correspondances base 2 / base 10 / base 16 pour bien comprendre pourquoi j'ai mis if ($donnees['moderation'] >= 8) et toutes ces conditions ;)
    base 2 base 10 hexadécimal
    000001 1 0x01
    000010 2 0x02
    000100 4 0x04
    001000 8 0x08
    010000 16 0x10


    Merci d'avance à celui (ou celle, ou ceux ou celles :D ) qui a (ont) eu le courage de lire mon pavé :)
    • Partager sur Facebook
    • Partager sur Twitter
      24 juin 2006 à 1:24:01

      La solution de feignasse est de faire une table qui pointe vers elle même, tu auras donc une chose du genre :
      - id
      - id_parent (qui pointe vers un id de cette même table)
      - autres_champs ...

      Du coup à partir de la, il te suffit de regarder l'id parent et de remonter/descendre résursivement tous l'arbre des résultats.

      Exemple :
      id | id_parent | nom
      1 - NULL - Admin
      2 - 1 - Sous Admin1
      3 - 1 - Sous Admin2
      4 - 2 - Enfant de Sous Admin1
      5 - 3 - Enfant de Sous Admin2
      6 - 1 - Sous Admin3
      • Partager sur Facebook
      • Partager sur Twitter
        24 juin 2006 à 8:35:43

        Citation : Draeli

        La solution de feignasse est de faire une table qui pointe vers elle même, tu auras donc une chose du genre :
        - id
        - id_parent (qui pointe vers un id de cette même table)
        - autres_champs ...

        Du coup à partir de la, il te suffit de regarder l'id parent et de remonter/descendre résursivement tous l'arbre des résultats.

        Exemple :
        id | id_parent | nom
        1 - NULL - Admin
        2 - 1 - Sous Admin1
        3 - 1 - Sous Admin2
        4 - 2 - Enfant de Sous Admin1
        5 - 3 - Enfant de Sous Admin2
        6 - 1 - Sous Admin3


        donc si j'ai bien compris id_parent est l'id de la catégorie à modérer ?
        Si c'est pas ça j'ai pas trop compris :ninja:

        edit : je viens de relire ta première phrase et apparament c'est pas ce que je pensais
        • Partager sur Facebook
        • Partager sur Twitter
          24 juin 2006 à 9:02:31

          Je te file mon code disponible ici ca sera plus simple :)

          http://www.siteduzero.com/forum-83-48167-p1-mysql-procedure-stocke.html

          Par contre j'espère pour toi que tu as un MySQL5 de disponible.
          Donc tu regardes comment j'ai modélisé tous ca et si tu as soucis, hésite pas à poster ici :)
          • Partager sur Facebook
          • Partager sur Twitter
            24 juin 2006 à 10:12:33

            Citation : Draeli

            Je te file mon code disponible ici ca sera plus simple :)

            http://www.siteduzero.com/forum-83-48167-p1-mysql-procedure-stocke.html

            Par contre j'espère pour toi que tu as un MySQL5 de disponible.
            Donc tu regardes comment j'ai modélisé tous ca et si tu as soucis, hésite pas à poster ici :)


            merci pour ton aide ;)

            par contre j'ai été voir ton code, mais j'ai pas encore le niveau pour comprendre tout ça.
            Par contre le tuto sur la représentation intervallaire (que t'as donné Shepard dans ton sujet) je l'avait lu il n'y a pas longtemps et j'avais compris, mais je vois pas comment ça pourrait me servir ici

            ps : je n'ai pas mysql 5 mais 4.x ;)
            @+
            • Partager sur Facebook
            • Partager sur Twitter
              24 juin 2006 à 11:56:18

              J'ai pas lu complètement ce que m'a filé Shepard faute de temps mais ca permet d'éviter la récursive que j'ai utilisé (qui par contre niveau code est beaucoup plus court à écrire ^^) au niveau d'une modélisation en arbre.

              Pour ce que j'ai écris, j'attend qu'un gentil validateur passe par la pour valider mon tuto sur les procédures stockés.

              Si tu as php4, tu ne pourras pas utiliser mon code mais rien ne t'empèche de faire ca avec Php ou avec les requêtes préparées.
              • Partager sur Facebook
              • Partager sur Twitter
                24 juin 2006 à 13:05:10

                ok merci je vais lire ce tuto et j'attends avec impatience le tien :p
                • Partager sur Facebook
                • Partager sur Twitter

                Gérer les modérateurs dans mon forum

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown