Add ‘send test message’ functionality to the admin interface
This commit is contained in:
parent
d97d35fd0d
commit
aaaffdf371
|
@ -37,6 +37,11 @@ export default Ember.Controller.extend({
|
|||
},
|
||||
showError(error_key){
|
||||
bootbox.alert(I18n.t(error_key));
|
||||
},
|
||||
test(){
|
||||
this.set('modalShowing', true);
|
||||
var model = {provider:this.get('model.provider'), channel:''}
|
||||
showModal('admin-plugins-chat-test', { model: model, admin: true });
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
import ModalFunctionality from 'discourse/mixins/modal-functionality';
|
||||
import { ajax } from 'discourse/lib/ajax';
|
||||
|
||||
export default Ember.Controller.extend(ModalFunctionality, {
|
||||
sendDisabled: function(){
|
||||
if(this.get('model').topic_id && this.get('model').channel){
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}.property('model.topic_id', 'model.channel'),
|
||||
|
||||
actions: {
|
||||
|
||||
send: function(){
|
||||
self = this;
|
||||
this.set('loading', true);
|
||||
ajax("/admin/plugins/chat/test", {
|
||||
data: { provider: this.get('model.provider.name'),
|
||||
channel: this.get('model.channel'),
|
||||
topic_id: this.get('model.topic_id')
|
||||
},
|
||||
type: 'POST'
|
||||
}).then(function (result) {
|
||||
self.set('loading', false)
|
||||
self.flash(I18n.t('chat_integration.test_modal.success'), 'success');
|
||||
}, function(e) {
|
||||
self.set('loading', false);
|
||||
|
||||
var response = e.jqXHR.responseJSON
|
||||
var error_key = 'chat_integration.test_modal.error'
|
||||
debugger;
|
||||
if(response['error_key']){
|
||||
error_key = response['error_key']
|
||||
}
|
||||
self.flash(I18n.t(error_key), 'error');
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
});
|
|
@ -0,0 +1,54 @@
|
|||
{{#d-modal-body id="chat_integration_test_modal" title="chat_integration.test_modal.title"}}
|
||||
<div>
|
||||
<form>
|
||||
<table>
|
||||
|
||||
<tr class="input">
|
||||
<td class="label"><label for='provider'>{{i18n "chat_integration.test_modal.provider"}}</label></td>
|
||||
<td>
|
||||
{{i18n (concat 'chat_integration.provider.' model.provider.id '.title')}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="instructions">
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
||||
<tr class="input">
|
||||
<td class="label"><label for='channel'>{{i18n "chat_integration.test_modal.channel"}}</label></td>
|
||||
<td>
|
||||
{{text-field
|
||||
name="channel"
|
||||
value=model.channel
|
||||
autofocus="autofocus"
|
||||
id="channel-field"}}
|
||||
|
||||
{{!-- {{input-tip validation=channelValidation}} --}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="instructions">
|
||||
<td></td>
|
||||
<td><label>{{i18n (concat 'chat_integration.provider.' model.provider.id '.channel_instructions')}}</label></td>
|
||||
</tr>
|
||||
|
||||
<tr class="input">
|
||||
<td class="label"><label for='channel'>{{i18n "chat_integration.test_modal.topic"}}</label></td>
|
||||
<td>
|
||||
{{choose-topic selectedTopicId=model.topic_id}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
{{/d-modal-body}}
|
||||
|
||||
<div class="modal-footer">
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{d-button class='btn-primary btn-large' action="send" title="chat_integration.test_modal.send" label="chat_integration.test_modal.send" disabled=sendDisabled}}
|
||||
|
||||
{{d-button class="btn-large" action="closeModal" title="chat_integration.test_modal.close" label="chat_integration.test_modal.close"}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
||||
</div>
|
|
@ -67,6 +67,8 @@
|
|||
</table>
|
||||
|
||||
<div class="table-footer">
|
||||
{{d-button action="test" actionParam=model.provider icon="rocket" title="chat_integration.test_provider" label="chat_integration.test_provider"}}
|
||||
|
||||
<div class="pull-right">
|
||||
{{d-button action="create" actionParam=model.provider icon="plus" title="chat_integration.create_rule" label="chat_integration.create_rule"}}
|
||||
</div>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
}
|
||||
|
||||
#chat_integration_edit_rule_modal{
|
||||
#chat_integration_edit_rule_modal, #chat_integration_test_modal{
|
||||
table{
|
||||
width:100%;
|
||||
|
||||
|
@ -51,7 +51,7 @@
|
|||
|
||||
}
|
||||
|
||||
input{
|
||||
#channel-field{
|
||||
width: 200px;
|
||||
margin-bottom: 0px;
|
||||
box-shadow: none;
|
||||
|
|
|
@ -9,6 +9,16 @@ en:
|
|||
all_categories: "(all categories)"
|
||||
all_tags: "(all tags)"
|
||||
create_rule: "Create Rule"
|
||||
test_provider: "Test Provider"
|
||||
test_modal:
|
||||
title: "Send a test message"
|
||||
provider: "Provider"
|
||||
channel: "Channel"
|
||||
topic: "Topic"
|
||||
send: "Send Test Message"
|
||||
close: "Close"
|
||||
error: "An unknown error occured while sending the message. Check the site logs for more information."
|
||||
success: "Message sent successfully"
|
||||
filter:
|
||||
mute: 'Mute'
|
||||
follow: 'First post only'
|
||||
|
|
|
@ -26,7 +26,10 @@ module DiscourseChat::Provider::SlackProvider
|
|||
|
||||
topic = post.topic
|
||||
|
||||
category = ''
|
||||
if topic.category
|
||||
category = (topic.category.parent_category) ? "[#{topic.category.parent_category.name}/#{topic.category.name}]": "[#{topic.category.name}]"
|
||||
end
|
||||
|
||||
icon_url =
|
||||
if !SiteSetting.chat_integration_slack_icon_url.blank?
|
||||
|
@ -46,7 +49,7 @@ module DiscourseChat::Provider::SlackProvider
|
|||
fallback: "#{topic.title} - #{display_name}",
|
||||
author_name: display_name,
|
||||
author_icon: post.user.small_avatar_url,
|
||||
color: "##{topic.category.color}",
|
||||
color: topic.category ? "##{topic.category.color}" : nil,
|
||||
text: ::DiscourseSlack::Slack.excerpt(post),
|
||||
mrkdwn_in: ["text"]
|
||||
}
|
||||
|
|
34
plugin.rb
34
plugin.rb
|
@ -79,6 +79,39 @@ after_initialize do
|
|||
render json:providers, root: 'providers'
|
||||
end
|
||||
|
||||
def test_provider
|
||||
begin
|
||||
requested_provider = params[:provider]
|
||||
channel = params[:channel]
|
||||
topic_id = params[:topic_id]
|
||||
|
||||
provider = ::DiscourseChat::Provider.get_by_name(requested_provider)
|
||||
|
||||
if provider.nil? or not ::DiscourseChat::Provider.is_enabled(provider)
|
||||
raise Discourse::NotFound
|
||||
end
|
||||
|
||||
if defined? provider::PROVIDER_CHANNEL_REGEX
|
||||
channel_regex = Regexp.new provider::PROVIDER_CHANNEL_REGEX
|
||||
raise Discourse::InvalidParameters, 'Channel is not valid' if not channel_regex.match?(channel)
|
||||
end
|
||||
|
||||
post = Topic.find(topic_id.to_i).posts.first
|
||||
|
||||
provider.trigger_notification(post, channel)
|
||||
|
||||
render json:success_json
|
||||
rescue Discourse::InvalidParameters, ActiveRecord::RecordNotFound => e
|
||||
render json: {errors: [e.message]}, status: 422
|
||||
rescue DiscourseChat::ProviderError => e
|
||||
if e.info.key?(:error_key) and !e.info[:error_key].nil?
|
||||
render json: {error_key: e.info[:error_key]}, status: 422
|
||||
else
|
||||
render json: {errors: [e.message]}, status: 422
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def list_rules
|
||||
providers = ::DiscourseChat::Provider.enabled_providers.map {|x| x::PROVIDER_NAME}
|
||||
|
||||
|
@ -148,6 +181,7 @@ after_initialize do
|
|||
DiscourseChat::Engine.routes.draw do
|
||||
get "" => "chat#respond"
|
||||
get '/providers' => "chat#list_providers"
|
||||
post '/test' => "chat#test_provider"
|
||||
|
||||
get '/rules' => "chat#list_rules"
|
||||
put '/rules' => "chat#create_rule"
|
||||
|
|
Loading…
Reference in New Issue