From 8e0bec6e6fb43281c6e0bb5b84b2d1693ff13d99 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Wed, 28 Jun 2017 22:32:02 +0100 Subject: [PATCH] Use RestModel and buildPluginAdapter to deal with communication of data models between client and server --- .../admin/adapters/provider.js.es6 | 5 +++ assets/javascripts/admin/adapters/rule.js.es6 | 5 +++ .../javascripts/admin/chat-route-map.js.es6 | 7 ++-- .../admin-plugins-chat-provider.js.es6 | 2 +- .../controllers/admin-plugins-chat.js.es6 | 3 ++ .../admin-plugins-chat-edit-rule.js.es6 | 4 +-- .../javascripts/admin/models/provider.js.es6 | 7 ++++ .../{filter-rule.js.es6 => rule.js.es6} | 0 .../routes/admin-plugins-chat-index.js.es6 | 6 ++-- .../routes/admin-plugins-chat-provider.js.es6 | 26 +++++++------- .../admin/routes/admin-plugins-chat.js.es6 | 7 ++++ .../templates/admin/plugins-chat-provider.hbs | 14 ++------ .../templates/admin/plugins-chat.hbs | 13 +++++++ lib/manager.rb | 3 +- plugin.rb | 36 ++++++++++++------- 15 files changed, 91 insertions(+), 47 deletions(-) create mode 100644 assets/javascripts/admin/adapters/provider.js.es6 create mode 100644 assets/javascripts/admin/adapters/rule.js.es6 create mode 100644 assets/javascripts/admin/controllers/admin-plugins-chat.js.es6 create mode 100644 assets/javascripts/admin/models/provider.js.es6 rename assets/javascripts/admin/models/{filter-rule.js.es6 => rule.js.es6} (100%) create mode 100644 assets/javascripts/admin/routes/admin-plugins-chat.js.es6 create mode 100644 assets/javascripts/discourse/templates/admin/plugins-chat.hbs diff --git a/assets/javascripts/admin/adapters/provider.js.es6 b/assets/javascripts/admin/adapters/provider.js.es6 new file mode 100644 index 0000000..c55aab7 --- /dev/null +++ b/assets/javascripts/admin/adapters/provider.js.es6 @@ -0,0 +1,5 @@ +import buildPluginAdapter from 'admin/adapters/build-plugin'; + +export default buildPluginAdapter('chat').extend({ + +}); \ No newline at end of file diff --git a/assets/javascripts/admin/adapters/rule.js.es6 b/assets/javascripts/admin/adapters/rule.js.es6 new file mode 100644 index 0000000..c55aab7 --- /dev/null +++ b/assets/javascripts/admin/adapters/rule.js.es6 @@ -0,0 +1,5 @@ +import buildPluginAdapter from 'admin/adapters/build-plugin'; + +export default buildPluginAdapter('chat').extend({ + +}); \ No newline at end of file diff --git a/assets/javascripts/admin/chat-route-map.js.es6 b/assets/javascripts/admin/chat-route-map.js.es6 index 4a3bd7d..92b74e4 100644 --- a/assets/javascripts/admin/chat-route-map.js.es6 +++ b/assets/javascripts/admin/chat-route-map.js.es6 @@ -3,8 +3,9 @@ export default { path: '/plugins', map() { this.route('chat', function(){ - this.route('index', { 'path': '/' }); - this.route('provider', {path: '/:provider'}); - }); + this.route('provider', {path: '/:provider'}); + }); + + } }; \ No newline at end of file diff --git a/assets/javascripts/admin/controllers/admin-plugins-chat-provider.js.es6 b/assets/javascripts/admin/controllers/admin-plugins-chat-provider.js.es6 index 4d286e1..76dd99a 100644 --- a/assets/javascripts/admin/controllers/admin-plugins-chat-provider.js.es6 +++ b/assets/javascripts/admin/controllers/admin-plugins-chat-provider.js.es6 @@ -1,4 +1,4 @@ -import FilterRule from 'discourse/plugins/discourse-chat/admin/models/filter-rule' +import Rule from 'discourse/plugins/discourse-chat/admin/models/rule' import { ajax } from 'discourse/lib/ajax'; import computed from "ember-addons/ember-computed-decorators"; import showModal from 'discourse/lib/show-modal'; diff --git a/assets/javascripts/admin/controllers/admin-plugins-chat.js.es6 b/assets/javascripts/admin/controllers/admin-plugins-chat.js.es6 new file mode 100644 index 0000000..9a0501a --- /dev/null +++ b/assets/javascripts/admin/controllers/admin-plugins-chat.js.es6 @@ -0,0 +1,3 @@ +export default Ember.Controller.extend({ + +}); \ No newline at end of file diff --git a/assets/javascripts/admin/controllers/modals/admin-plugins-chat-edit-rule.js.es6 b/assets/javascripts/admin/controllers/modals/admin-plugins-chat-edit-rule.js.es6 index f4bde63..2faf71f 100644 --- a/assets/javascripts/admin/controllers/modals/admin-plugins-chat-edit-rule.js.es6 +++ b/assets/javascripts/admin/controllers/modals/admin-plugins-chat-edit-rule.js.es6 @@ -1,9 +1,9 @@ -import FilterRule from 'discourse/plugins/discourse-chat/admin/models/filter-rule' +import Rule from 'discourse/plugins/discourse-chat/admin/models/rule' import { ajax } from 'discourse/lib/ajax'; export default Ember.Controller.extend({ - model: FilterRule.create({}), + model: Rule.create({}), actions: { cancel: function(){ diff --git a/assets/javascripts/admin/models/provider.js.es6 b/assets/javascripts/admin/models/provider.js.es6 new file mode 100644 index 0000000..70f1166 --- /dev/null +++ b/assets/javascripts/admin/models/provider.js.es6 @@ -0,0 +1,7 @@ +import RestModel from 'discourse/models/rest'; +import Category from 'discourse/models/category'; +import computed from "ember-addons/ember-computed-decorators"; + +export default RestModel.extend({ + +}); diff --git a/assets/javascripts/admin/models/filter-rule.js.es6 b/assets/javascripts/admin/models/rule.js.es6 similarity index 100% rename from assets/javascripts/admin/models/filter-rule.js.es6 rename to assets/javascripts/admin/models/rule.js.es6 diff --git a/assets/javascripts/admin/routes/admin-plugins-chat-index.js.es6 b/assets/javascripts/admin/routes/admin-plugins-chat-index.js.es6 index 1e97fb0..b56c8d3 100644 --- a/assets/javascripts/admin/routes/admin-plugins-chat-index.js.es6 +++ b/assets/javascripts/admin/routes/admin-plugins-chat-index.js.es6 @@ -1,7 +1,7 @@ import AdminPluginsChatProvider from 'discourse/plugins/discourse-chat/admin/routes/admin-plugins-chat-provider' -export default AdminPluginsChatProvider.extend({ - afterModel(model, transition) { - this.transitionTo('adminPlugins.chat.provider', model); +export default Discourse.Route.extend({ + afterModel(model, transition) { + this.transitionTo('adminPlugins.chat.provider', model.get('firstObject').name); } }); diff --git a/assets/javascripts/admin/routes/admin-plugins-chat-provider.js.es6 b/assets/javascripts/admin/routes/admin-plugins-chat-provider.js.es6 index 914b382..37c6673 100644 --- a/assets/javascripts/admin/routes/admin-plugins-chat-provider.js.es6 +++ b/assets/javascripts/admin/routes/admin-plugins-chat-provider.js.es6 @@ -1,21 +1,23 @@ -import FilterRule from 'discourse/plugins/discourse-chat/admin/models/filter-rule' +import Rule from 'discourse/plugins/discourse-chat/admin/models/rule' import { ajax } from 'discourse/lib/ajax'; export default Discourse.Route.extend({ model(params, transition) { - - var url = '/admin/plugins/chat' - if(params.provider !== undefined){ - url += `/${params.provider}` - } - url += '.json' + console.log("Loading rules for "+params.provider) + return this.store.find('rule', {provider: params.provider}); - return ajax(url).then(result => { - var rules = result.rules.map(v => FilterRule.create(v)) - var providers = result.providers - return {provider: result.provider, rules: rules, providers: providers}; - }); + // var url = '/admin/plugins/chat' + // if(params.provider !== undefined){ + // url += `/${params.provider}` + // } + // url += '.json' + + // return ajax(url).then(result => { + // var rules = result.rules.map(v => FilterRule.create(v)) + // var providers = result.providers + // return {provider: result.provider, rules: rules, providers: providers}; + // }); }, serialize: function(model, params) { diff --git a/assets/javascripts/admin/routes/admin-plugins-chat.js.es6 b/assets/javascripts/admin/routes/admin-plugins-chat.js.es6 new file mode 100644 index 0000000..34135c4 --- /dev/null +++ b/assets/javascripts/admin/routes/admin-plugins-chat.js.es6 @@ -0,0 +1,7 @@ +import AdminPluginsChatProvider from 'discourse/plugins/discourse-chat/admin/routes/admin-plugins-chat-provider' + +export default Discourse.Route.extend({ + model(params, transition) { + return this.store.findAll('provider'); + } +}); diff --git a/assets/javascripts/discourse/templates/admin/plugins-chat-provider.hbs b/assets/javascripts/discourse/templates/admin/plugins-chat-provider.hbs index f031eb4..e8748d1 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-chat-provider.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-chat-provider.hbs @@ -1,14 +1,5 @@ -
-
-
- -
-
+ @@ -26,7 +17,7 @@ - {{#each model.rules as |rule|}} + {{#each model as |rule|}} @@ -60,4 +51,3 @@ title="chat.reset_settings" label="chat.reset_settings"}} {{/d-button}} - diff --git a/assets/javascripts/discourse/templates/admin/plugins-chat.hbs b/assets/javascripts/discourse/templates/admin/plugins-chat.hbs new file mode 100644 index 0000000..a7e608d --- /dev/null +++ b/assets/javascripts/discourse/templates/admin/plugins-chat.hbs @@ -0,0 +1,13 @@ +
+
+
+ +
+
+ {{outlet}} +
+ \ No newline at end of file diff --git a/lib/manager.rb b/lib/manager.rb index b48fb3b..4b3843c 100644 --- a/lib/manager.rb +++ b/lib/manager.rb @@ -15,7 +15,7 @@ module DiscourseChat PluginStoreRow.where(plugin_name: DiscourseChat::PLUGIN_NAME) .where("key ~* :pattern", pattern: "^#{DiscourseChat::Manager::KEY_PREFIX}.*") .each do |row| - PluginStore.cast_value(row.type_name, row.value).each do |rule| + PluginStore.cast_value(row.type_name, row.value).each_with_index do |rule, thisIndex| category_id = if row.key == DiscourseChat::Manager.get_store_key nil @@ -25,6 +25,7 @@ module DiscourseChat end rules << { + id: "#{(category_id || 'all')}_#{thisIndex}", provider: rule[:provider], channel: rule[:channel], filter: rule[:filter], diff --git a/plugin.rb b/plugin.rb index f383fda..387a9ed 100644 --- a/plugin.rb +++ b/plugin.rb @@ -28,36 +28,46 @@ after_initialize do class ::DiscourseChat::ChatController < ::ApplicationController requires_plugin DiscourseChat::PLUGIN_NAME - def list - requested_provider = params[:provider] + def respond + render + end + def list_providers + providers = ::DiscourseChat::Provider.providers.map {|x| {name: x::PROVIDER_NAME, id: x::PROVIDER_NAME}} + render json:providers, root: 'providers' + end + + def list_rules providers = ::DiscourseChat::Provider.providers.map {|x| x::PROVIDER_NAME} - if requested_provider.nil? - requested_provider = providers[0] - end + requested_provider = params[:provider] - if not providers.include? requested_provider + if requested_provider.nil? + rules = DiscourseChat::Manager.get_all_rules() + elsif providers.include? requested_provider + rules = DiscourseChat::Manager.get_rules_for_provider(requested_provider) + else raise Discourse::NotFound end - rules = DiscourseChat::Manager.get_rules_for_provider(requested_provider) - - out = {provider: requested_provider, providers: providers, rules: rules} - - render json: out + render json: rules, root: 'rules' end end + + require_dependency 'admin_constraint' add_admin_route 'chat.menu_title', 'chat' DiscourseChat::Engine.routes.draw do - get "(.:format)" => "chat#list" # TODO: Fix this hack - get "/:provider" => "chat#list" + get "" => "chat#respond" + get '/providers' => "chat#list_providers" + get '/rules' => "chat#list_rules" + + get "/:provider" => "chat#respond" end Discourse::Application.routes.append do
{{rule.channel}} {{rule.filterName}}