0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-25 18:50:27 +01:00
Dieser Commit ist enthalten in:
Angus McLeod 2020-10-17 12:31:07 +11:00
Ursprung 94c56ef550
Commit d221d65d77
12 geänderte Dateien mit 209 neuen und 0 gelöschten Zeilen

Datei anzeigen

@ -0,0 +1,28 @@
import Controller from "@ember/controller";
import EmberObject from '@ember/object';
import { ajax } from 'discourse/lib/ajax';
import { popupAjaxError } from 'discourse/lib/ajax-error';
export default Controller.extend({
fieldKeys: ['klass', 'name', 'type'],
classes: ['topic', 'user', 'group'],
actions: {
addField() {
this.get('customFields').pushObject(
EmberObject.create({
new: true
})
);
},
saveFields() {
ajax(`/admin/wizards/custom-fields`, {
type: 'PUT',
data: {
custom_fields: this.customFields
}
}).catch(popupAjaxError)
}
}
});

Datei anzeigen

@ -7,6 +7,8 @@ export default {
this.route('adminWizardsWizardShow', { path: '/:wizardId/', resetNamespace: true }); this.route('adminWizardsWizardShow', { path: '/:wizardId/', resetNamespace: true });
}); });
this.route('adminWizardsCustomFields', { path: '/custom-fields', resetNamespace: true });
this.route('adminWizardsSubmissions', { path: '/submissions', resetNamespace: true }, function() { this.route('adminWizardsSubmissions', { path: '/submissions', resetNamespace: true }, function() {
this.route('adminWizardsSubmissionsShow', { path: '/:wizardId/', resetNamespace: true }); this.route('adminWizardsSubmissionsShow', { path: '/:wizardId/', resetNamespace: true });
}) })

Datei anzeigen

@ -0,0 +1,13 @@
import DiscourseRoute from "discourse/routes/discourse";
import { ajax } from 'discourse/lib/ajax';
import { A } from "@ember/array";
export default DiscourseRoute.extend({
model() {
return ajax('/admin/wizards/custom-fields');
},
setupController(controller, model) {
controller.set('customFields', A(model || []));
}
});

Datei anzeigen

@ -0,0 +1,33 @@
<div class="admin-wizard-controls">
<h3>{{i18n 'admin.wizard.custom_fields.nav_label'}}</h3>
{{d-button
label="add"
icon="plus"
action="addField"}}
</div>
<div class="admin-wizard-container">
{{#if model}}
<table>
<tr>
{{#each fieldKeys as |key|}}
<th>{{i18n (concat "admin.wizard.custom_fields." key)}}</th>
{{/each}}
</tr>
{{#each customFields as |field|}}
<tr>
{{#if field.new}}
<td>{{combo-box value=field.klass content=classes onChange=(action (mut field.klass))}}</td>
<td>{{input value=field.name}}</td>
<td>{{combo-box value=field.type content=types onChange=(action (mut field.type))}}</td>
{{else}}
{{#each-in field as |k v|}}
<td>{{v}}</td>
{{/each-in}}
{{/if}}
</tr>
{{/each}}
</table>
{{/if}}
</div>

Datei anzeigen

@ -1,5 +1,6 @@
{{#admin-nav}} {{#admin-nav}}
{{nav-item route='adminWizardsWizard' label='admin.wizard.nav_label'}} {{nav-item route='adminWizardsWizard' label='admin.wizard.nav_label'}}
{{nav-item route='adminWizardsCustomFields' label='admin.wizard.custom_fields.nav_label'}}
{{nav-item route='adminWizardsSubmissions' label='admin.wizard.submissions.nav_label'}} {{nav-item route='adminWizardsSubmissions' label='admin.wizard.submissions.nav_label'}}
{{#if siteSettings.wizard_apis_enabled}} {{#if siteSettings.wizard_apis_enabled}}
{{nav-item route='adminWizardsApi' label='admin.wizard.api.nav_label'}} {{nav-item route='adminWizardsApi' label='admin.wizard.api.nav_label'}}

Datei anzeigen

@ -731,6 +731,7 @@
options=(hash options=(hash
inputTypes='association' inputTypes='association'
wizardFieldSelection='value' wizardFieldSelection='value'
wizardActionSelection='value'
userFieldSelection='value' userFieldSelection='value'
keyPlaceholder='admin.wizard.action.custom_fields.key' keyPlaceholder='admin.wizard.action.custom_fields.key'
context='action' context='action'

Datei anzeigen

@ -274,6 +274,12 @@ en:
visibility_level: Visibility Level visibility_level: Visibility Level
members_visibility_level: Members Visibility Level members_visibility_level: Members Visibility Level
custom_fields:
nav_label: "Custom Fields"
klass: "Class"
name: "Name"
type: "Type"
submissions: submissions:
nav_label: "Submissions" nav_label: "Submissions"
title: "{{name}} Submissions" title: "{{name}} Submissions"

Datei anzeigen

@ -0,0 +1,40 @@
class CustomWizard::CustomFieldsController < CustomWizard::AdminController
def index
render_custom_field_list
end
def update
field_data = params[:custom_fields]
custom_fields = field_data.map { |data| CustomWizard::CustomFields.new(data) }
custom_fields.each do |field_data|
custom_field.validate
unless custom_field.valid?
raise Discourse::InvalidParameters, "Invalid field: '#{custom_field.name}'"
end
end
all_fields_saved = true
custom_fields.each do |field|
unless field.save
all_fields_saved = false
end
end
if all_fields_saved
render_custom_field_list
else
render json: error_json
end
end
def render_custom_field_list
render_serialized(
CustomWizard::CustomFields.list,
CustomWizard::CustomFieldsSerializer
)
end
end

Datei anzeigen

@ -0,0 +1,61 @@
class ::CustomWizard::CustomFields
include HasErrors
include ActiveModel::Serialization
CLASSES ||= ["topic", "user", "group", "category"]
ATTRS ||= ["name", "klass", "type"]
KEY ||= "custom_wizard_custom_fields"
def initialize(data)
data = data.with_indifferent_access
ATTRS.each do |attr|
self.class.class_eval { attr_accessor attr }
send("#{attr}=", data[attr]) if data[attr].present?
end
end
def save
validate
if valid?
data = {}
name = nil
ATTRS.each do |attr|
value = send(attr)
if attr == 'name'
name = value
else
data[attr] = value
end
end
PluginStore.set(KEY, name, data)
else
false
end
end
def validate
ATTRS.each do |attr|
value = send(attr)
add_error("Attribute required: #{attr}") if value.blank?
add_error("Unsupported class: #{value}") if CLASSES.exclude?(value)
end
end
def valid?
errors.blank?
end
def self.list
PluginStoreRow.where(plugin_name: KEY)
.map do |record|
data = JSON.parse(record.value)
data[:name] = record.key
self.new(data)
end
end
end

Datei anzeigen

@ -320,6 +320,10 @@ class CustomWizard::Wizard
Jobs.cancel_scheduled_job(:set_after_time_wizard, wizard_id: wizard[:id]) Jobs.cancel_scheduled_job(:set_after_time_wizard, wizard_id: wizard[:id])
Jobs.enqueue(:clear_after_time_wizard, wizard_id: wizard[:id]) Jobs.enqueue(:clear_after_time_wizard, wizard_id: wizard[:id])
end end
if serialize_fields.present?
end
end end
wizard[:id] wizard[:id]

Datei anzeigen

@ -42,6 +42,7 @@ after_initialize do
../controllers/custom_wizard/admin/submissions.rb ../controllers/custom_wizard/admin/submissions.rb
../controllers/custom_wizard/admin/api.rb ../controllers/custom_wizard/admin/api.rb
../controllers/custom_wizard/admin/logs.rb ../controllers/custom_wizard/admin/logs.rb
../controllers/custom_wizard/admin/custom_fields.rb
../controllers/custom_wizard/wizard.rb ../controllers/custom_wizard/wizard.rb
../controllers/custom_wizard/steps.rb ../controllers/custom_wizard/steps.rb
../controllers/custom_wizard/transfer.rb ../controllers/custom_wizard/transfer.rb
@ -51,6 +52,7 @@ after_initialize do
../lib/custom_wizard/action_result.rb ../lib/custom_wizard/action_result.rb
../lib/custom_wizard/action.rb ../lib/custom_wizard/action.rb
../lib/custom_wizard/builder.rb ../lib/custom_wizard/builder.rb
../lib/custom_wizard/custom_fields.rb
../lib/custom_wizard/field.rb ../lib/custom_wizard/field.rb
../lib/custom_wizard/mapper.rb ../lib/custom_wizard/mapper.rb
../lib/custom_wizard/log.rb ../lib/custom_wizard/log.rb
@ -68,6 +70,7 @@ after_initialize do
../serializers/custom_wizard/api_serializer.rb ../serializers/custom_wizard/api_serializer.rb
../serializers/custom_wizard/basic_api_serializer.rb ../serializers/custom_wizard/basic_api_serializer.rb
../serializers/custom_wizard/basic_wizard_serializer.rb ../serializers/custom_wizard/basic_wizard_serializer.rb
../serializers/custom_wizard/custom_fields_serializer.rb
../serializers/custom_wizard/wizard_field_serializer.rb ../serializers/custom_wizard/wizard_field_serializer.rb
../serializers/custom_wizard/wizard_step_serializer.rb ../serializers/custom_wizard/wizard_step_serializer.rb
../serializers/custom_wizard/wizard_serializer.rb ../serializers/custom_wizard/wizard_serializer.rb
@ -160,5 +163,19 @@ after_initialize do
CustomWizard::Wizard.register_styles CustomWizard::Wizard.register_styles
CustomWizard::CustomFields.list.each do |field|
add_to_class(field.klass.to_sym, field.name.to_sym) do
custom_fields[field.name]
end
add_to_serializer(field.klass.to_sym, field.name.to_sym) do
if field.klass === 'topic'
object.topic.send(field.name)
else
object.send(field.name)
end
end
end
DiscourseEvent.trigger(:custom_wizard_ready) DiscourseEvent.trigger(:custom_wizard_ready)
end end

Datei anzeigen

@ -0,0 +1,3 @@
class CustomWizard::CustomFieldsSerializer < ApplicationSerializer
attributes :klass, :name, :type
end