[Script JS] Problème encodage

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

Résolu [Script JS] Problème encodage

Message par Bipo Ven 12 Avr 2019 - 20:35

Bonsoir à tous,

Depuis quelques années, notre forum utile l'astuce des outils de modération dynamique (c'est-à-dire des outils que les modérateurs peuvent utiliser directement via la liste des sujets). Le script est le suivant :

Code:
/* adresse img modération deplacer */
var move_img= "https://i.servimg.com/u/f78/11/01/36/00/downlo10.png";
/* adresse img modération edit */
var edit_img= "https://i.servimg.com/u/f10/11/01/36/00/trash_10.png";
/* adresse img modération lock */
var lock_img = "https://i.servimg.com/u/f10/11/01/36/00/lock10.png";
/* adresse img modération unlock + inversion image lock et unlock */  
var unlock_img = "https://i.servimg.com/u/f10/11/01/36/00/unlock11.png";
/* adresse img modération corbeille */
var trash_img = "https://i.servimg.com/u/f10/11/01/36/00/trash_10.png";
/* adresse img modération supprimer */
var delete_img = "https://2img.net/i/fa/empty.gif";
/* adresse cookie contenant le sid (ne pas éditer) */
var cookie = my_getcookie('fa_'+location.hostname.replace(/\./g,'_')+'_sid');
$(function() {
  /* Si l'utilisateur a les droits de modération, on affiche les outils de modération */
    if ($('#is_allowed:contains("modérer")').length > 0) {
        var tid = $('#is_allowed a').attr('href').match(/[a-z0-9]*$/);
  $('.mod_tools').each(function() {
      /* Si le topic est verrouillé on affiche le bouton déverrouiller */
      if($(this).children('img').attr('alt').slice(13,19) == "verrou") {
        $(this).append('<img src="'+edit_img+'" class="mod_edit"><img src="'+move_img+'" class="mod_move"><img src="'+unlock_img+'" class="mod_unlock"/><img src="'+trash_img+'" class="mod_trash"/><img src="'+delete_img+'" class="mod_delete"/>');
      }
      /* Sinon on affiche le bouton verrouiller */ else {
        $(this).append('<img src="'+edit_img+'" class="mod_edit"><img src="'+move_img+'" class="mod_move"><img src="'+lock_img+'" class="mod_lock"/><img src="'+trash_img+'" class="mod_trash"/><img src="'+delete_img+'" class="mod_delete"/>');
      }
  }
  );
}
  /* Clic sur le bouton déverrouiller */
  $('.mod_unlock').click(function() {
      if (confirm("Êtes-vous sûr ?")) {
 $.get('/modcp.forum?t=' + $(this).closest('tr').find('a.topictitle').attr('href').replace(/^\/t([1-9][0-9]*)[p-].*$/, '$1') + '&mode=unlock&tid=' + tid);
        $(this).addClass('mod_lock').removeClass('mod_unlock');
        $(this).attr('src',lock_img);
      }
  }
  );
  /* Clic sur le bouton verrouiller */
  $('.mod_lock').click(function() {
      if (confirm("Êtes-vous sûr ?")) {
$.get('/modcp.forum?t=' + $(this).closest('tr').find('a.topictitle').attr('href').replace(/^\/t([1-9][0-9]*)[p-].*$/, '$1') + '&mode=lock&tid=' + tid);
        $(this).addClass('mod_unlock').removeClass('mod_lock');
        $(this).attr('src',unlock_img);
      }
  }
  );
  /* Clic sur le bouton deplacer */
  $('.mod_move').click(function() {
      $(this).closest('tr').find('a.topictitle').after('<input type="submit" class="move_topic"/>');
      $(this).closest('tr').find('a.topictitle').after($('select[name="selected_id"]').clone().removeAttr("onchange"));
  }
  );
  $('.move_topic').live('click', function() {
      var tempData = $(this);
      $.post("/modcp?tid="+$("input[name=tid]:first").val(), {
        tid:$("input[name=tid]:first").val(),new_forum:tempData.closest('tr').find('select[name="selected_id"] option:selected').val(),mode:"move",t:tempData.closest('tr').find('a.topictitle').attr('href').replace(/^\/t([1-9][0-9]*)[p-].*$/,'$1'),confirm:"Oui"
      }
      ,function(data) {
        if(data.indexOf('Le(s) sujet(s) sélectionné(s) a/ont été déplacé(s).')!=-1) {
            tempData.closest('tr').remove()
        } else if(data.indexOf('Votre session a expiré.')!=-1) {
            alert("Votre session a expiré.")
        } else if(data.indexOf('Aucun sujet n\'a été déplacé.')!=-1) {
            alert("Aucun sujet n'a été déplacé.")
        } else if(data.indexOf('Le forum que vous avez sélectionné n\'existe pas.')!=-1) {
            alert("Le forum que vous avez sélectionné n'existe pas.")
        } else {
            alert("erreur inconnue")
        }
      }
      );
  }
  );
  /* Clic sur le bouton corbeille */
$('.mod_trash').click(function(){if(confirm("Êtes-vous sûr ?")){$.get('/modcp.forum?t='+$(this).closest('tr').find('a.topictitle').attr('href').replace(/^\/t([1-9][0-9]*)[p-].*$/,'$1')+'&mode=trash&tid='+tid);$(this).closest('tr').remove()}});$('.mod_delete').click(function(){if(confirm("Êtes-vous sûr ?")){var fid=location.href.replace(/^.*\/f([0-9]+)[p-].*$/,'$1');var topic_id=$(this).closest('tr').find('a.topictitle').attr('href').replace(/^\/t([1-9][0-9]*)[p-].*$/,'$1');$.post("/modcp?&mode=delete&t="+topic_id+"tid="+tid,{f:fid,confirm:"1"});$(this).closest('tr').remove()}});

  /* Clic sur le bouton supprimer */
  $('.mod_delete').click(function() {
      if (confirm("Êtes-vous sûr ?")) {
        // prendre le tid
        var tid= $("input[name=tid]:first").val() ||  ($("a[href*='&tid=']:first").attr("href")||"").replace(/^.*&tid=([a-f0-9]*)?.*$/,"$1");
        // prendre le fid
        var fid= location.href.replace(/^.*\/f([0-9]+)[p-].*$/,'$1');
        // prendre le topic_id
        var topic_id= $(this).closest('tr').find('a.topictitle').attr('href').replace(/^\/t([1-9][0-9]*)[p-].*$/,'$1');
        $.post("/modcp?tid="+tid, {
            f:fid, t:topic_id, tid: tid, mode:"delete",confirm:"1"
        }
        );
        $(this).closest('tr').remove();
      }
  }
  );
  /* Clic sur le bouton edit */
  $('.mod_edit').click(function() {
      $(this).closest('tr').find('a.topictitle').hide().after('<input type="text" id="new_title" value="'+$(this).closest('tr').find('a.topictitle').text()+'"/><input type="submit" class="edit_title"/>');
  }
  );
  $('.edit_title').live('click', function() {
      var temp = $(this);
      /* saisie d'une page du sujet */
      $.get($(this).closest('tr').find('a.topictitle').attr('href'), function(c) {
        /* prendre identifiant du premier message */
        var first_post_id = $(".post a[name]", c).first().attr("name");
        /* si pas on fait rien */
        if(!first_post_id) {
            return
        }
        /* saisie du formulaire d'édition du message */
        $.get("/post?p=" + first_post_id + "&mode=editpost", function(c) {
            /* envoi de ce formulaire en ayant changé le titre */
 /* récupération du formulaire */
 var fields= $('form[name="post"]', c).serializeArray();
 for(i=0;i<fields.length;i++)
 {
     /* changement du titre */
   if(fields[i].name=="subject") fields[i].value= temp.parent().find('#new_title').val();
   fields[i]=escape(fields[i].name)+'='+escape(fields[i].value)
 }
 /* envoi formulaire d'édition */
 $.post("/post", fields.join('&')+"&post=1",function(c){
              /* test pour voir si ça s'est bien passé */
              if(c.indexOf('Message enregistré avec succès')!=-1) {
                  temp.closest('tr').find('a.topictitle').show().text($('#new_title').val());
                  temp.parent().find('#new_title').hide();
                  temp.parent().find('.edit_title').hide();
              }
            }
            )
        }
        )
      }  
      );
  }
  );
}
);

L'outil fonctionne sauf la fonction d'édition du titre d'un sujet. En effet, lorsqu'un modérateur souhaite éditer un titre, le script ne fonctionne pas si :

1) Le script comporte un caractère spécial ;
2) Si le titre ne comporte pas de caractères spéciaux, le titre s'édite mais le premier message comporte des erreurs :

[Script JS] Problème encodage 12-04-11

Quelqu'un aurait une idée ? :/

En vous remerciant par avance.
Bipo.


Dernière édition par Bipo le Dim 14 Avr 2019 - 12:12, édité 3 fois (Raison : J'ai édité mon message car une partie de ce dernier a été coupé...)
Bipo

Bipo
Rédactif
Rédactif

Messages : 3888
Inscrit(e) le : 23/09/2010

Bipo a été remercié(e) par l'auteur de ce sujet.

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

- Sujets similaires

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