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:
Ursprung
f0edc18804
Commit
11bf892bcc
7 geänderte Dateien mit 252 neuen und 6 gelöschten Zeilen
|
@ -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'),
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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}}
|
||||||
|
|
||||||
|
|
|
@ -35,10 +35,6 @@
|
||||||
|
|
||||||
& + div {
|
& + div {
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
|
|
||||||
&+ div.setting {
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Laden …
In neuem Issue referenzieren