0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-25 18:50:27 +01:00

Add Create Category action and Create Group serverside

Dieser Commit ist enthalten in:
Angus McLeod 2020-07-09 12:19:36 +10:00
Ursprung f0edc18804
Commit 11bf892bcc
7 geänderte Dateien mit 252 neuen und 6 gelöschten Zeilen

Datei anzeigen

@ -20,6 +20,7 @@ export default Component.extend(UndoChanges, {
sendToApi: equal('action.type', 'send_to_api'), sendToApi: equal('action.type', 'send_to_api'),
addToGroup: equal('action.type', 'add_to_group'), addToGroup: equal('action.type', 'add_to_group'),
routeTo: equal('action.type', 'route_to'), routeTo: equal('action.type', 'route_to'),
createCategory: equal('action.type', 'create_category'),
apiEmpty: empty('action.api'), apiEmpty: empty('action.api'),
groupPropertyTypes: selectKitContent(['id', 'name']), groupPropertyTypes: selectKitContent(['id', 'name']),
hasAdvanced: or('hasCustomFields', 'routeTo'), hasAdvanced: or('hasCustomFields', 'routeTo'),

Datei anzeigen

@ -157,6 +157,14 @@ const action = {
route_to: { route_to: {
url: null, url: null,
code: null code: null
},
create_category: {
name: null,
slug: null,
color: null,
text_color: "FFFFFF",
parent_category_id: null,
permissions: null
} }
}, },
mapped: [ mapped: [
@ -170,7 +178,13 @@ const action = {
'group', 'group',
'url', 'url',
'categories', 'categories',
'mute_remainder' 'mute_remainder',
'name',
'slug',
'color',
'text_color',
'parent_category_id',
'permittions'
], ],
advanced: [ advanced: [
'code', 'code',

Datei anzeigen

@ -340,6 +340,125 @@
</div> </div>
{{/if}} {{/if}}
{{#if createCategory}}
<div class="setting full field-mapper-setting">
<div class="setting-label">
<label>{{i18n "admin.wizard.action.create_category.name"}}</label>
</div>
<div class="setting-value">
{{wizard-mapper
inputs=action.name
property='name'
onUpdate=(action 'mappedFieldUpdated')
options=(hash
textSelection='key,value'
wizardFieldSelection=true
userFieldSelection='key,value'
context='action'
)}}
</div>
</div>
<div class="setting full field-mapper-setting">
<div class="setting-label">
<label>{{i18n "admin.wizard.action.create_category.slug"}}</label>
</div>
<div class="setting-value">
{{wizard-mapper
inputs=action.slug
property='slug'
onUpdate=(action 'mappedFieldUpdated')
options=(hash
textSelection=true
wizardFieldSelection=true
userFieldSelection='key,value'
context='action'
)}}
</div>
</div>
<div class="setting full field-mapper-setting">
<div class="setting-label">
<label>{{i18n "admin.wizard.action.create_category.color"}}</label>
</div>
<div class="setting-value">
{{wizard-mapper
inputs=action.color
property='color'
onUpdate=(action 'mappedFieldUpdated')
options=(hash
textSelection=true
wizardFieldSelection=true
userFieldSelection='key,value'
context='action'
)}}
</div>
</div>
<div class="setting full field-mapper-setting">
<div class="setting-label">
<label>{{i18n "admin.wizard.action.create_category.text_color"}}</label>
</div>
<div class="setting-value">
{{wizard-mapper
inputs=action.text_color
property='text_color'
onUpdate=(action 'mappedFieldUpdated')
options=(hash
textSelection=true
wizardFieldSelection=true
userFieldSelection='key,value'
context='action'
)}}
</div>
</div>
<div class="setting full field-mapper-setting">
<div class="setting-label">
<label>{{i18n "admin.wizard.action.create_category.parent_category"}}</label>
</div>
<div class="setting-value">
{{wizard-mapper
inputs=action.parent_category_id
property='parent_category_id'
onUpdate=(action 'mappedFieldUpdated')
options=(hash
textSelection='key,value'
wizardFieldSelection=true
userFieldSelection='key,value'
categorySelection='output'
context='action'
)}}
</div>
</div>
<div class="setting full field-mapper-setting">
<div class="setting-label">
<label>{{i18n "admin.wizard.action.create_category.permissions"}}</label>
</div>
<div class="setting-value">
{{wizard-mapper
inputs=action.permissions
property='permissions'
onUpdate=(action 'mappedFieldUpdated')
options=(hash
inputTypes='association'
textSelection=true
wizardFieldSelection=true
userFieldSelection=true
groupSelection='key'
context='action'
)}}
</div>
</div>
{{/if}}
{{#if showAdvanced}} {{#if showAdvanced}}
{{wizard-advanced-toggle showAdvanced=action.showAdvanced}} {{wizard-advanced-toggle showAdvanced=action.showAdvanced}}

Datei anzeigen

@ -35,10 +35,6 @@
& + div { & + div {
margin-top: 30px; margin-top: 30px;
&+ div.setting {
margin-top: 30px;
}
} }
} }

Datei anzeigen

@ -241,6 +241,14 @@ en:
select_an_endpoint: "Select an endpoint" select_an_endpoint: "Select an endpoint"
body: "Body" body: "Body"
body_placeholder: "JSON" body_placeholder: "JSON"
create_category:
label: "Create Category"
name: Name
slug: Slug
color: Color
text_color: Text color
parent_category: Parent Category
permissions: Permissions
submissions: submissions:
nav_label: "Submissions" nav_label: "Submissions"

Datei anzeigen

@ -130,7 +130,13 @@ class CustomWizard::AdminWizardController < CustomWizard::AdminController
mute_remainder: mapped_params, mute_remainder: mapped_params,
profile_updates: mapped_params, profile_updates: mapped_params,
group: mapped_params, group: mapped_params,
url: mapped_params url: mapped_params,
name: mapped_params,
slug: mapped_params,
color: mapped_params,
text_color: mapped_params,
parent_category_id: mapped_params,
permissions: mapped_params
] ]
) )
end end

Datei anzeigen

@ -2,12 +2,14 @@ class CustomWizard::Action
attr_accessor :data, attr_accessor :data,
:action, :action,
:user, :user,
:guardian,
:result :result
def initialize(params) def initialize(params)
@wizard = params[:wizard] @wizard = params[:wizard]
@action = params[:action] @action = params[:action]
@user = params[:user] @user = params[:user]
@guardian = Guardian.new(@user)
@data = params[:data] @data = params[:data]
@log = [] @log = []
@result = CustomWizard::ActionResult.new @result = CustomWizard::ActionResult.new
@ -274,6 +276,44 @@ class CustomWizard::Action
log_info("route: #{route_to}") log_info("route: #{route_to}")
end end
def create_group
guardian.ensure_can_create!(Group)
group =
begin
Group.new(new_group_params.merge(user: user))
rescue ArgumentError => e
raise Discourse::InvalidParameters, "Invalid group params"
end
if group.update(new_group_params)
GroupActionLogger.new(user, group).log_change_group_settings
log_success("Group created", group.name)
else
log_error("Group creation failed")
end
end
def create_category
guardian.ensure_can_create!(Category)
byebug
category =
begin
Category.new(new_category_params.merge(user: user))
rescue ArgumentError => e
raise Discourse::InvalidParameters, "Invalid category params"
end
if category.save
StaffActionLogger.new(user).log_category_creation(category)
log_success("Category created", category.name)
else
log_error("Category creation failed")
end
end
private private
def action_category def action_category
@ -350,6 +390,68 @@ class CustomWizard::Action
add_custom_fields(params) add_custom_fields(params)
end end
def new_group_params
params = {}
%w(
name
full_name
title
mentionable_level
messageable_level
visibility_level
members_visibility_level
grant_trust_level
).each do |attr|
if action["group_#{attr}"].present?
params[attr.to_sym] = CustomWizard::Mapper.new(
inputs: action["group_#{attr}"],
data: data,
user: user
).perform
end
end
add_custom_fields(params)
end
def new_category_params
params = {}
%w(
name
slug
color
text_color
parent_category_id
permissions
).each do |attr|
if action[attr].present?
params[attr.to_sym] = CustomWizard::Mapper.new(
inputs: action[attr],
data: data,
user: user
).perform
end
end
if params[:parent_category_id].present?
params[:parent_category_id] = params[:parent_category_id][0]
end
if params[:permissions].present?
permissions = {}
params[:permissions].each do |p|
if group = Group.find_by(id: p[:key][0])
permissions[group.name] = p[:value].to_i
end
end
params[:permissions] = permissions
end
add_custom_fields(params)
end
def creates_post? def creates_post?
[:create_topic, :send_message].include?(action['type'].to_sym) [:create_topic, :send_message].include?(action['type'].to_sym)
end end