Astuces Forumactif
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Membres connectés récemment
Voir tous les membres

AWESOMEBB] Ajouter ou retirer un membre des groupes depuis la liste des membres

Page 3 sur 3 Précédent  1, 2, 3

Voir le sujet précédent Voir le sujet suivant Aller en bas

Anonymous
Invité
Invité

MessageInvité Lun 30 Aoû 2021 - 13:40

Rappel du premier message :

  • Version du forum :
    AWESOMEBB
  • Templates modifiés :
    non
  • Navigateur :
    Firefox
Bonjour,
J'ai un forum où j'ai à faire beaucoup de mouvements dans les groupes, et ce avec beaucoup de groupes ^^

Aussi je me demandais s'il serait possible de fabriquer quelque chose de quelque peu similaire dans l'idée à l'astuce pour utiliser les outils de modération sur la liste des sujets, mais avec les groupes, et ce sur la liste des membres ok

Je souhaiterai que sur chaque ligne de la liste des membres ( = pour chaque membre) j'aie en tant qu'administrateur un bouton qui affiche la liste des groupes, et que je puisse ajouter le membre dans le groupe directement depuis la liste des membres.

Si c'est possible, ce serait l'idéal de pouvoir également les supprimer de tel ou tel groupe, mais le premier objectif pour moi est de pouvoir ajouter de nombreux membres dans plusieurs groupes différents rapidement.

Ainsi lorsque je cliquerai sur le bouton du membre, ça pourrait dans l'idéal donner quelque chose comme ça :

Ajouter le membre :
- Bureau
- Communication
- ...

Retirer le membre
-
Adhérents
- ....

Je ne sais pas si ce que je demande est impossible, mais si c'est possible ce serait génial  !!



Un grand merci d'avance
chattigre


Dernière édition par chattigre le Jeu 14 Oct 2021 - 15:34, édité 2 fois

Self
https://www.milouze14.com/

MessageSelf Jeu 30 Sep 2021 - 23:55

Alors j'ai pas essayé mais d'après ce que tu me décris essaie plutôt comme ça ?
Code:
$(function(){
   let tools = `<article id="groupstool" class="hidden">
               <form action="" method="post" name="post">
                  <h2></h2>
                  <div class="gtool">
                  </div>
                  <select id="groupsChoice">
                     <option value="">Choisir un groupe</option>
                     <option value="2">Modérateurs</option>
                     <option value="3">groupe 1</option>
                     <option value="4">groupe 2</option>
                  </select><input class="btn btn-default" type="submit" name="add" value="Ajouter"><span class="check"><i class="material-icons">check_circle</i></span>
                  <input type="hidden" id="username" name="username">
                  <input type="hidden" name="g">
                  <input type="hidden" name="tid">
               </form>
            </article>`;
   let getColor = function(user, userPlace){
      $.get('/memberlist?mode=lastvisit&order=DESC&submit=Ok&username='+user, function(d){
         let newColor = $('.member span', d).attr('style');
         if(newColor && $('.member.'+userPlace).html().indexOf('strong') == -1){ let w = $('.member.'+userPlace).text(); $('.member.'+userPlace).html('<span style="'+newColor+'"><strong>'+w+'</strong></span>');
         }else if(newColor){ $('.member.'+userPlace+' span').attr('style', newColor);
         }else{ let w = $('.member.'+userPlace).text(); $('.member.'+userPlace).html(w); }
      });
   }, removeUser = function(uid, userPlace){
      $('.gps').each(function(){
         $(this).append('<i class="material-icons">cancel</i>');
      });
      $('.gps i').click(e =>{
         let tgt = e.target.parentElement, a = tgt.getAttribute('data-action'), g = tgt.getAttribute('data-g');
         $('#groupstool form').attr('action', a);
         $('input[name="g"]').attr('value', g);
         $('#groupsChoice option:disabled[value="'+g+'"]').removeAttr('disabled');
         let options = new Array();
         options.push({name: 'members[]', value: uid}, {name: 'remove', value: 'supprimer+la+sélection'}, $('#groupstool form').serializeArray());
         $.post(a, options, function(){
            tgt.remove();
         }).done(function(){getColor($('#username').attr('value'), userPlace);});
      });
   }, groupList = function(user, uid, userPlace){
      $.get('/memberlist?mode=groups&order&submit=Ok&username='+user, function(d){
         $('.gtool').html($('.gps', d));
         removeUser(uid, userPlace);
         $('#groupstool').toggleClass('visible hidden');
         $('#groupstool h2').text('Groupe auxquels appartient '+user);
         $('#groupsChoice option').each(function(){
            for(let i = 1; i < ($('.gps').length+1); i++){
               if($(this).text() == $('.gps:nth-child('+i+')').text().replace('cancel', '')){
                  $('.gps:nth-child('+i+')').attr('data-action', '/g'+$(this).attr("value")+'-'+$(this).text().replace(" ", "-")).attr('data-g', $(this).attr('value'));
                  $(this).attr('disabled', '');
               }
            }
         });
         $('#groupsChoice').on('change', e => {
            $('#groupsChoice').css('background', 'initial');
            let s = $("#groupsChoice option:selected"), t = s.text().replace(' ', '-'), v = '/g'+s.attr('value')+'-'+t;
            $('#groupstool form').attr('action', v);
            $('input[name="g"]').val(s.val());
         });
         $('#groupstool form').submit(e =>{
            e.preventDefault();
            e.stopPropagation();
            if(!$("#groupsChoice option:selected").attr('value') == ''){
               let options = new Array(), a = $('#groupstool form').attr('action');
               options.push({name: 'username', value: $('#username').attr('value')}, {name: 'add', value: 'Ajouter+le+membre'}, {name: 'g', value: $('input[name="g"]').attr('value')}, {name: 'tid', value: _tid});
               $.post(a, options, function(){
                  let s = $("#groupsChoice option:selected").attr('value'), t = $("#groupsChoice option:selected").text();
                  $("#groupsChoice option:selected").attr('disabled', '');
                  $('.check i').fadeIn('fast').delay('1000').fadeOut('fast');
                  $('.gtool').prepend('<span class="gps" data-action="'+$('#groupstool form').attr('action')+'" data-g="'+s+'">'+t+'<i class="material-icons">cancel</i></span>');
                  $('.gps:first i').click(e =>{
                     let tgt = e.target.parentElement, a = tgt.getAttribute('data-action'), g = tgt.getAttribute('data-g');
                     let options = new Array();
                     options.push({name: 'members[]', value: uid}, {name: 'remove', value: 'supprimer+la+sélection'}, $('#groupstool form').serializeArray());
                     $('#groupsChoice option:disabled[value="'+g+'"]').removeAttr('disabled');
                     $.post(a, options, function(){
                        tgt.remove();
                        $('#groupsChoice option:first').attr('selected', '');
                     }).done(function(){getColor($('#username').attr('value'), userPlace);});
                  });
                  $('#groupsChoice option:first').attr('selected', '');
               }).done(function(){getColor($('#username').attr('value'), userPlace);});
               return;
            }else{
               $('#groupsChoice').css('background', 'antiquewhite');
            }
         });
      });
   };
   $('.m_search').click(e =>{
      e.preventDefault();
      let u = e.currentTarget.classList[1], user = $('.member.'+u).text(), uid = $('.member.'+u).parent().attr('href').match(/[0-9]+/)[0];
      $('#groupsChoice option').each(function(){ $(this).removeAttr('disabled'); });
      $('#username').val(user);
      $('#dimmer').toggleClass('visible hidden').click(e =>{ $('#groupstool').attr('hidden'); });
      groupList(user, uid, u);
   });
   if(!_userdata.user_level == 1) $('.m_search').remove();
   else $('body').append(tools); $('input[name="tid"]').attr('value', _tid);
});

Je pense que oui en écrivant le code j'ai passé en paramètre de la fonction l'id de l'utilisateur et pas sa classe ^^ .

Message envoyé via la réponse rapide par: @Self

Milouze14 aime ce message

Anonymous
Invité
Invité

MessageInvité Sam 2 Oct 2021 - 18:00

Salut,

Ah ben là, tout de suite, ça marche mieux ! lOL

Il me reste encore quelques soucis de requêtes qui s'envoient deux fois de manière aléatoire, comme si une partie du code mettait parfois plus de temps qu'une autre à s'exécuter...

Mais bon, à moins que tu aies une solution pour qu'il ne puisse pas y avoir deux requêtes à la même seconde par exemple, ça reste un bug très mineur...
(Quand la requête s'envoie deux fois j'ai "Choisir  un groupe" qui apparait dans la liste des groupes du membre, et plus le même groupe plusieurs fois)
Pourtant je ne fais bien qu'un clic sur le bouton... marreordi

Sinon je pense que je mettrai ce sujet en résolu, avec un énorme MERCI pour l'énorme gain de temps ! A peine 5 minutes pour une trentaine de mouvements (et il y en aura d'autres ^^), c'est génial. Surtout qu'on gère les groupes "membre par membre" et pas "groupe par groupe" à devoir se rappeler qui il faut pas oublier dans ce groupe, qui y est déjà, etc. ^^
Bonne soirée hinhin

Message envoyé via la réponse rapide par: @chattigre
Self
Self
https://www.milouze14.com/

MessageSelf Dim 3 Oct 2021 - 9:30

Oui change de navigateur 🤓. Je suis pas sur PC la, je regarde des que possible si je reproduis encore malgré le stopPropagation, car je n'ai pas eu le bogue depuis moi 🤔.
Et pas de soucis, je comprends je déteste toutes ces pages d'erreurs et de confirmation avec redirection chez FA.

EDIT: j'ai reproduis en limitant la bande passante. Je ne vois pas vraiment pourquoi et pas vraiment comment palier à ça.. 🤔

Message envoyé via la réponse rapide par: @Self
Anonymous
Invité
Invité

MessageInvité Mar 5 Oct 2021 - 19:38

Salut,
Self a écrit:EDIT: j'ai reproduis en limitant la bande passante. Je ne vois pas vraiment pourquoi et pas vraiment comment palier à ça..

Hum, de loin je dirai, une variable qui enregistre la dernière requête envoyée et qui empêche d'envoyer exactement la même (même groupe, même membre, même action ajout / suppression) deux fois de suite ?

J'ai l'impression que j'ai ce bug en particulier lorsque je fais plusieurs mouvements à la suite, je ne saurais dire pourquoi ...

Mais si tu ne sais pas quoi faire, on peut laisser comme ça au pire aussi ok

Merci et bonne soirée !
Self
Self
https://www.milouze14.com/

MessageSelf Jeu 7 Oct 2021 - 23:34

Salut @chattigre

Je regarderai un peu plus en profondeur sur d'autre navigateurs également et je te tiens au courant d'ici quelques jours si j'ai une solution ou pas ok .

Message envoyé via la réponse rapide par: @Self
Self
Self
https://www.milouze14.com/

MessageSelf Mar 12 Oct 2021 - 17:50

Salut @chattigre. Je ne dis pas que ça va fonctionner mais je n'ai pas reproduit sur d'autres navigateur.
Peux tu juste essayer de me dire si tu as toujours le problème en désactivant le cache sous firefox : clic droit sur la page -> inspecter -> onglet réseau -> cocher la case désactiver le cache.
Je vais continuer mes tests au cas ou en attendant mais je n'ai pas énormément de temps en ce moment.

Message envoyé via la réponse rapide par: @Self

Milouze14 aime ce message

Anonymous
Invité
Invité

MessageInvité Mer 13 Oct 2021 - 13:55

Salut,

En fait, j'ai surtout l'impression que le problème se produit sur écran tactile ou lorsque tu fais un double clic involontaire sur le bouton ok

Du coup, ce que j'ai fait pour le moment, c'est
Code:
$('#groupstool form').submit(e =>{
                e.preventDefault();
                e.stopPropagation();
                $('#btngroupadd').attr('disabled', 'disabled');

et
Code:
.done(function(){getColor($('#username').attr('value'), userPlace); $('#btngroupadd').removeAttr('disabled');});
                   return;
                }else{
                   $('#groupsChoice').css('background', 'antiquewhite');
                   $('#btngroupadd').removeAttr('disabled');
                }

Avec #btngroupadd le bouton "Ajouter" de l'outil
En forçant un attribut disabled au clic du bouton jusqu'à ce que l'action soit terminée, je n'ai plus de requêtes envoyées en double il semblerait !

Je ne sais pas ce que tu penses de cette solution ? Moi après, tant que ça marche... MdR

Bonne journée

Message envoyé via la réponse rapide par: @chattigre
Self
Self
https://www.milouze14.com/

MessageSelf Mer 13 Oct 2021 - 17:58

Salut, je fais une grosse journée de taff aujourd'hui alors je réponds rapidement sur téléphone. C'est une solution effectivement. Le problème est que la on part que du cas où la requête renvoit un succès. Si ce n'est pas le cas le bouton reste désactivé jusqu'à ce qu'on recharge la page.. Est ce que je pourrais te demander ce que tu utilises comme appareil tactile ? Téléphone ? Tablette ?

Message envoyé via la réponse rapide par: @Self
Anonymous
Invité
Invité

MessageInvité Mer 13 Oct 2021 - 18:47

Self a écrit:Salut, je fais une grosse journée de taff aujourd'hui alors je réponds rapidement sur téléphone. C'est une solution effectivement. Le problème est que la on part que du cas où la requête renvoit un succès. Si ce n'est pas le cas le bouton reste désactivé jusqu'à ce qu'on recharge la page.. Est ce que je pourrais te demander ce que tu utilises comme appareil tactile ? Téléphone ? Tablette ?
Salut,

C'est pas faux mdr 

Sinon, sur mon mobile par exemple je reproduis, un "double clic" est vite arrivé...
Mais ça vient surtout du fait que si deux clics sont faits au lieu d'un en l'espace de quelques millisecondes, l'option sélectionné n'est pas encore en disabled.

Sinon, j'ai remplacé ce que j'avais mis dans le .done par
Code:
.always(function() {$('#btngroupadd').removeAttr('disabled');});
Comme ça effectivement on ne reste pas bloqué si la requête échoue...

Cela résout toujours le bug de mon côté, et je pense que ça supprime un défaut de ma première tentative ok

Bonne journée
Self
Self
https://www.milouze14.com/

MessageSelf Mer 13 Oct 2021 - 23:18

Alors autant je peux comprendre le fait de travailler sur une tablette, certaines sont très puissantes et apportent tout le confort nécessaire à la navigation et à l'espace de travail, autant les mobiles à part peut être un Note 10/20  je n'en vois pas l'utilité mais ce n'est qu'un avis personnel. Et pour te dire avant dans mes développements de script je me servais de l'userAgent pour totalement éliminer le fonctionnement du script si ce n'était pas un PC/MAC. Aujourd'hui je suis pour le développement responsive au niveau design mais jamais je ne ferais de la modération sur une version mobile et je ne m'en occupe absolument pas. Si un script pose problème on met une exception et on ne s'en sert que sur PC. Mais pour le coup je suis content que tu ais trouvé la solution qui te convenait. Si tu n'as pas d'autre questions ou bogues par rapport au sujet nous pourrons le passer en résolu ?

Message envoyé via la réponse rapide par: @Self

Milouze14 aime ce message

Anonymous
Invité
Invité

MessageInvité Jeu 14 Oct 2021 - 15:32

Self a écrit:Alors autant je peux comprendre le fait de travailler sur une tablette, certaines sont très puissantes et apportent tout le confort nécessaire à la navigation et à l'espace de travail, autant les mobiles à part peut être un Note 10/20  je n'en vois pas l'utilité mais ce n'est qu'un avis personnel. Et pour te dire avant dans mes développements de script je me servais de l'userAgent pour totalement éliminer le fonctionnement du script si ce n'était pas un PC/MAC. Aujourd'hui je suis pour le développement responsive au niveau design mais jamais je ne ferais de la modération sur une version mobile et je ne m'en occupe absolument pas. Si un script pose problème on met une exception et on ne s'en sert que sur PC. Mais pour le coup je suis content que tu ais trouvé la solution qui te convenait. Si tu n'as pas d'autre questions ou bogues par rapport au sujet nous pourrons le passer en résolu ?
Salut,

On est entièrement d'accord ok

Après, il m'arrive d'avoir besoin de faire quelque chose rapidement sur mobile, donc SI c'est possible que mes outils soient compatibles, je préfère ^^


Je pense en effet que ma demande a pleinement trouvé sa solution à présent !

Il ne me reste plus qu'à te remercier et te féliciter encore une fois pour cet outil parfaitement fonctionnel qui me fait gagner un temps précieux dans la gestion technique de notre forum !! hinhin

Bonne journée !
Milouze14
Milouze14
Fondateur

https://www.milouze14.net/

MessageMilouze14 Jeu 14 Oct 2021 - 15:50


Hello


Sujet résolu et déplacé dans le forum adéquate

A bientôt pour une prochaine demande clin oeil



Message envoyé via la réponse rapide par: @Milouze14

Page 3 sur 3 Précédent  1, 2, 3

Voir le sujet précédent Voir le sujet suivant Revenir en haut

Créer un compte ou se connecter pour répondre

Vous devez être membre pour répondre.

S'enregistrer

Rejoignez notre communauté ! C'est facile !


S'enregistrer

Connexion

Vous êtes déjà membre ? Aucun soucis, cliquez ici pour vous connecter.


Connexion

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum