[Sugestão] Mensagem automática ao mover tópico

3 participantes

Ir para baixo

[Sugestão] Mensagem automática ao mover tópico Empty [Sugestão] Mensagem automática ao mover tópico

Mensagem por Daemon 27.02.17 2:09

O título já diz tudo... estou trabalhando neste código e gostaria da opinião dos ajudeiros e desenvolvedores. Sugestões?

[Sugestão] Mensagem automática ao mover tópico 12310

[Sugestão] Mensagem automática ao mover tópico 12345610

Por enquanto, assim está:
Código:
jQuery(function() {
    // Variables
       
    var forumID = jQuery('[name="f"]').val();   
    var topicID = jQuery('[name="t"]').val();   
    var TID = jQuery('a[href*="tid="]').attr('href').split('tid=')[1].split('&')[0]; // When you click the move button
       
    jQuery('input[name="confirm"]').on('click', function(d) {      
        var verify = jQuery('[name="new_forum"]').val();
        // Check if any forum has been selected
              
        if (verify.indexOf('f') >= 0) {      // Confirmation question
                   
            var qst = window.confirm("Add a message on the topic informing about this action?"); // If confirmation is accepted
                   
            if (qst) {        
                d.preventDefault();
                // Gets certain content from another page (in this case, just the current forum name)
                        
                jQuery.get('/modcp?change_version=punbb&mode=move&t=' + topicID + '&tid=' + TID).done(function(local) { // Captured value
                              
                    var currentLocal = jQuery('a.nav[href^="/f"]:last', local).text();          
                    var newLocal = jQuery('[name="new_forum"] option:selected').text().split('--').pop();          
                    var autoMsg = '[b]Automatic message[/b]\n\n\nThis topic has been moved from "[u]' + currentLocal + '[/u]" to "[u]' + newLocal + '[/u]".'; // Move topic
                              
                    jQuery.post('/modcp?tid=' + TID, {               
                        'new_forum': verify,
                        'mode': 'move',
                        'f': forumID,
                        't': topicID,
                        'confirm': '1'          
                    }).done(function(move) { // Send message
                        jQuery.post('/post?t=' + topicID, {                 
                            'mode': 'reply',
                            'message': autoMsg,
                            'post': '1',
                            'attach_sig': '1'            
                        }).done(function(send) {
                            // Redirect to post
                            location.href = jQuery(send).find('a[href^="/viewtopic"]').attr('href');            
                        }).fail(function() {                 
                            alert("Um erro ocorreu ao tentar enviar a mensagem");                 
                            location.href = jQuery(move).find('a[href^="/viewtopic"]').attr('href');            
                        });          
                    }).fail(function() {               
                        alert("Um erro ocorreu ao tentar mover o tópico");               
                        location.reload();          
                    });        
                });       
            }      
        } else {         
            d.preventDefault();         
            alert("Selecione um fórum");      
        }   
    });
});


Última edição por Daemon em 05.07.18 12:34, editado 2 vez(es)
Daemon
Daemon
Super Membro

Membro desde : 02/03/2012
Mensagens : 1132
Pontos : 1825

http://bestskins.forumeiros.com/

Ir para o topo Ir para baixo

[Sugestão] Mensagem automática ao mover tópico Empty Re: [Sugestão] Mensagem automática ao mover tópico

Mensagem por VitorC. 28.03.17 2:46

@Daemon, está muito bom! Não entendo muito de códigos, mas creio que será possível personalizar o resultado com CSS e essas "paradas", certo? Só para ter mais estilo no final... pois eu pensei na estética do tópico e se o post dessa mensagem automática pudesse ser "encolhido" a ponto de apenas ter o espaço da mensagem e alguma info do perfil (como nome e rank, algo assim). Ficaria muito bonito, ao meu ponto de vista.

Enfim, continue com seus trabalhos magníficos!
VitorC.
VitorC.
Hiper Membro

Membro desde : 22/02/2012
Mensagens : 3794
Pontos : 4939

http://nolabels.forumeiros.com

Ir para o topo Ir para baixo

[Sugestão] Mensagem automática ao mover tópico Empty Re: [Sugestão] Mensagem automática ao mover tópico

Mensagem por Kyo Panda 28.03.17 18:37

É um script realmente útil, e a lógica está perfeita. Alterações que acredito válidas seriam.

  • Return early. O script está bem "cascata" com as condicionais. Dando return antes sempre que alguma coisa deu errado, evita esse problema e deixa o código mais "legível".

  • Todas as informações necessárias para o script funcionar podem ser encontradas nos inputs do formulário. Logo não precisamos fazer essa busca:
    Código:
    // Gets certain content from another page (in this case, just the current forum name)
    jQuery.get('/modcp?change_version=punbb&mode=move&t=' + topicID + '&tid=' + TID)
  • O TID também existe num campo de formulário:
    Código:
    var TID = jQuery('a[href*="tid="]').attr('href').split('tid=')[1].split('&')[0];
    Código:
    var TID = jQuery('input[name="tid"]').val()


Basicamente isso. Acredito que o resto seja perfumaria

---

Como o @VitorC. disse, seria legal permitir que os usuários configurassem a aparência da mensagem postada de maneira automática (talvez com uma [tag] escondida no meio da mensagem), assim como as mensagens exibidas de confirmação.

---

Outro ponto é verificar se o usuário não está a mover o tópico para o fórum que ele já está, para evitar aquela mensagem "Nenhum tópico foi movido", que não é nada explicativa.

---

Aqui está um pouco da minha "visão". Grande parte é perfumaria. Acredito que o senhor possa fazer um trabalho bem melhor. Pensativo

Código:
(function($) {
   'use strict';
   
   var config = {
      i18n: {
         en: {
            no_forum_selected: 'Please, select a valid forum to move this topic.',
            same_forum_selected: 'The topic is already at "{{target_forum}}".',
            leave_message: 'Add a message on the topic informing about this action?',
            topic_message: [
               '[b]Automatic message[/b]',
               '',
               '',
               'This topic has been moved from "[u]{{origin_forum}}[/u]" to "[u]{{target_forum}}[/u]".'
            ].join('\n')
         },
         pt: {
            no_forum_selected: 'Por favor, selecione um fórum válido para mover este tópico.',
            same_forum_selected: 'O tópico já está em "{{target_forum}}".',
            leave_message: 'Adicionar uma mensagem no tópico informando sobre esta ação?',
            topic_message: [
               '[b]Mensagem automática[/b]',
               '',
               '',
               'Este tópico foi movido de "[u]{{origin_forum}}[/u]" para "[u]{{target_forum}}[/u]".'
            ].join('\n')
         }
      }
   };
   
   $(function() {
   
      var lang = window._userdata && config.i18n[_userdata.user_lang] ?
         config.i18n[_userdata.user_lang] : config.i18n.en
      ;
 
      // Functional only if the user is a moderator and is on the page to move the topic
      if (_userdata.user_level <= 0 || location.search.indexOf('mode=move') === -1) {
         return;
      }
      
      var $form = $('form[action^="/modcp"]');
      
      var $target = $form.find('select[name="new_forum"]');
      
      var forum = {
         id: $form.find('input[name="f"]').val()
      };
      
      forum.name = $target
         .find('option[value="f' + forum.id + '"]')
         .text()
         .split('--')
         .pop()
      ;
      
      var topic = {
         id: $form.find('input[name="t"]').val()
      };
      
      var tid = $form.find('[name="tid"]').val();

      // When you click the move button
      $('input[name="confirm"]').on('click', function(event) {         
         // Check if any forum has been selected
         if ($target.val().indexOf('f') === -1) {
            event.preventDefault();
            alert(lang.no_forum_selected);
            return;
         }
         
         var target = $target
            .find('option[value="' + $target.val() + '"]')
            .text()
            .split('--')
            .pop()
         ;
                  
         // Check if moving to the same forum
         if ('f' + forum.id === $target.val()) {
            event.preventDefault();
            alert(lang.same_forum_selected
               .replace(/\{\{target_forum\}\}/gi, target)
            );
            return;
         }

         // If confirmation isn't accepted
         if (!window.confirm(lang.leave_message)) {
            return;
         }
         
         event.preventDefault();
         
         // Format topic message
         var message = lang.topic_message
            .replace(/\{\{origin_forum\}\}/gi, forum.name)
            .replace(/\{\{target_forum\}\}/gi, target)
         ;
         
         $.when(
            // Move topic         
            $.post('/modcp?tid=' + tid, {
               new_forum: $target.val(),
               mode: 'move',
               tid: tid,
               f: forum.id,
               t: topic.id,
               confirm: 1
            }),
            // Send message
            $.post('/post', {
               mode: 'reply',
               message: message,
               post: 1,
               attach_sig: 1,
               t: topic.id,
            })
         ).then(function() {
            // Redirect to post
            location.href = '/t' + topic.id + '-';
         });
      });
   });
}(jQuery));
Kyo Panda
Kyo Panda
Hiper Membro

Membro desde : 08/01/2012
Mensagens : 4641
Pontos : 5939

https://ajuda.forumeiros.com

Ir para o topo Ir para baixo

[Sugestão] Mensagem automática ao mover tópico Empty Re: [Sugestão] Mensagem automática ao mover tópico

Mensagem por Daemon 03.04.17 23:42

Kyo Panda escreveu:
Código:
// Gets certain content from another page (in this case, just the current forum name)
jQuery.get('/modcp?change_version=punbb&mode=move&t=' + topicID + '&tid=' + TID)

Touché! Nem me toquei nessa parte aí... Isso que dá não prestar atenção nas coisas. Rindo

Em relação ao TID ele deve ser capturado da maneira que estava mesmo, pois em uma das versões (Se não em engano a PHPBB2), não existe o input TID.
Se bem que o código que postei não estava adepto para todas as versões.

Outra coisa que percebi revisando o código, foi que não é necessário nem isto:
Código:
      if (_userdata.user_level <= 0 || location.search.indexOf('mode=move') === -1) {
        return;
      }

Ou isto:
Código:
      if(_userdata.user_level > 0 && window.location.href.search("mode=move") >= 0) {
        return;
      }

Visto que apenas um moderador ou administrador tem acesso à página de mover o tópico, não é necessário enfatizar com esta condição, sendo assim, a única condição seria estar na página de mover o tópico.
Caso fosse necessário, teria que ser utilizado o && (e) e não || (ou), visto que ambas as condições seriam necessárias.

O seu código está funcionando perfeitamente! Piscada Muito feliz Rosa
Daemon
Daemon
Super Membro

Membro desde : 02/03/2012
Mensagens : 1132
Pontos : 1825

http://bestskins.forumeiros.com/

Ir para o topo Ir para baixo

[Sugestão] Mensagem automática ao mover tópico Empty Re: [Sugestão] Mensagem automática ao mover tópico

Mensagem por Kyo Panda 04.04.17 12:31

Em relação ao TID ele deve ser capturado da maneira que estava mesmo, pois em uma das versões (Se não em engano a PHPBB2), não existe o input TID.

Geralmente o TID nas páginas estão no Jumpbox (ir para), e este realmente não existe no PHPBB2. Mas na página de moderação o TID sempre está lá (pelo menos pelo que pude testar), pois ele é necessário para os formulários de moderação. Acredito que eles nem funcionariam sem esse cara.

---

Quanto ao user_level, é vero... .-.
Kyo Panda
Kyo Panda
Hiper Membro

Membro desde : 08/01/2012
Mensagens : 4641
Pontos : 5939

https://ajuda.forumeiros.com

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos