[Sugestão] Mensagem automática ao mover tópico
3 participantes
Página 1 de 1 • Compartilhe
[Sugestão] Mensagem automática ao mover tópico
O título já diz tudo... estou trabalhando neste código e gostaria da opinião dos ajudeiros e desenvolvedores. Sugestões?
Por enquanto, assim está:
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)
Re: [Sugestão] Mensagem automática ao mover tópico
@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!
Enfim, continue com seus trabalhos magníficos!
Re: [Sugestão] Mensagem automática ao mover tópico
É um script realmente útil, e a lógica está perfeita. Alterações que acredito válidas seriam.
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.
- 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.
- 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));
Re: [Sugestão] Mensagem automática ao mover tópico
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.
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!
Re: [Sugestão] Mensagem automática ao mover tópico
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... .-.
Tópicos semelhantes
» Mensagem automática ao mover tópicos
» mensagem automatica apos mover topc
» Duvida mensagem automatica ao topico ser resolvido
» Aparecer uma mensagem ao mover um tópico
» Como colocar mensagem automatica para fechar tópico
» mensagem automatica apos mover topc
» Duvida mensagem automatica ao topico ser resolvido
» Aparecer uma mensagem ao mover um tópico
» Como colocar mensagem automatica para fechar tópico
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos