Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-25 18:50:27 +01:00
Add post builder
Dieser Commit ist enthalten in:
Ursprung
e731ecba23
Commit
f5ffff35d8
5 geänderte Dateien mit 109 neuen und 13 gelöschten Zeilen
|
@ -8,18 +8,15 @@ const ACTION_TYPES = [
|
||||||
|
|
||||||
const PROFILE_FIELDS = [
|
const PROFILE_FIELDS = [
|
||||||
'name',
|
'name',
|
||||||
'email',
|
|
||||||
'username',
|
|
||||||
'title',
|
|
||||||
'date_of_birth',
|
'date_of_birth',
|
||||||
'muted_usernames',
|
'title',
|
||||||
'theme_key',
|
|
||||||
'locale',
|
'locale',
|
||||||
'bio_raw',
|
|
||||||
'location',
|
'location',
|
||||||
'website',
|
'website',
|
||||||
|
'bio_raw',
|
||||||
'profile_background',
|
'profile_background',
|
||||||
'card_background'
|
'card_background',
|
||||||
|
'theme_key'
|
||||||
];
|
];
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
|
@ -54,5 +51,17 @@ export default Ember.Component.extend({
|
||||||
});
|
});
|
||||||
|
|
||||||
return fields;
|
return fields;
|
||||||
|
},
|
||||||
|
|
||||||
|
@computed('availableFields')
|
||||||
|
builderWizardFields(fields) {
|
||||||
|
return fields.map((f) => ` w{${f.id}}`);
|
||||||
|
},
|
||||||
|
|
||||||
|
@computed()
|
||||||
|
builderUserFields() {
|
||||||
|
const noThemeKey = PROFILE_FIELDS.filter((f) => f !== 'theme_key');
|
||||||
|
const fields = noThemeKey.concat(['email', 'username']);
|
||||||
|
return fields.map((f) => ` u{${f}}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -40,12 +40,34 @@
|
||||||
<h3>{{i18n "admin.wizard.action.post"}}</h3>
|
<h3>{{i18n "admin.wizard.action.post"}}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-value">
|
<div class="setting-value">
|
||||||
{{combo-box value=action.post content=availableFields nameProperty="label" none='admin.wizard.select_field'}}
|
{{combo-box value=action.post content=availableFields
|
||||||
|
nameProperty='label'
|
||||||
|
none='admin.wizard.select_field'
|
||||||
|
isDisabled=action.post_builder}}
|
||||||
|
<div>
|
||||||
|
{{input type='checkbox' checked=action.post_builder}}
|
||||||
|
<span>{{i18n 'admin.wizard.action.post_builder.checkbox'}}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{#if action.post_builder}}
|
||||||
|
<div class="setting full">
|
||||||
|
<div class="setting-label">
|
||||||
|
<h3>{{i18n 'admin.wizard.action.post_builder.label'}}</h3>
|
||||||
|
</div>
|
||||||
|
<div class="setting-value">
|
||||||
|
<label>{{i18n 'admin.wizard.action.post_builder.user_fields'}}{{builderUserFields}}</label>
|
||||||
|
<label>{{i18n 'admin.wizard.action.post_builder.wizard_fields'}}{{builderWizardFields}}</label>
|
||||||
|
{{d-editor value=action.post
|
||||||
|
placeholder='admin.wizard.action.post_builder.placeholder'
|
||||||
|
classNames='post-builder-editor'}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
<div class="setting full">
|
<div class="setting full">
|
||||||
<label>{{i18n "admin.wizard.action.add_fields" type='Topic'}}</label>
|
<label>{{i18n 'admin.wizard.action.add_fields' type='Topic'}}</label>
|
||||||
{{wizard-custom-input inputs=action.add_fields
|
{{wizard-custom-input inputs=action.add_fields
|
||||||
valueContent=availableFields
|
valueContent=availableFields
|
||||||
inputKey='admin.wizard.action.topic_attr'
|
inputKey='admin.wizard.action.topic_attr'
|
||||||
|
@ -68,10 +90,32 @@
|
||||||
<h3>{{i18n "admin.wizard.action.post"}}</h3>
|
<h3>{{i18n "admin.wizard.action.post"}}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-value">
|
<div class="setting-value">
|
||||||
{{combo-box value=action.post content=availableFields nameProperty='label' none='admin.wizard.select_field'}}
|
{{combo-box value=action.post content=availableFields
|
||||||
|
nameProperty='label'
|
||||||
|
none='admin.wizard.select_field'
|
||||||
|
isDisabled=action.post_builder}}
|
||||||
|
<div>
|
||||||
|
{{input type='checkbox' checked=action.post_builder}}
|
||||||
|
<span>{{i18n 'admin.wizard.action.post_builder.checkbox'}}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{#if action.post_builder}}
|
||||||
|
<div class="setting full">
|
||||||
|
<div class="setting-label">
|
||||||
|
<h3>{{i18n 'admin.wizard.action.post_builder.label'}}</h3>
|
||||||
|
</div>
|
||||||
|
<div class="setting-value">
|
||||||
|
<label>{{i18n 'admin.wizard.action.post_builder.user_fields'}}{{builderUserFields}}</label>
|
||||||
|
<label>{{i18n 'admin.wizard.action.post_builder.wizard_fields'}}{{builderWizardFields}}</label>
|
||||||
|
{{d-editor value=action.post
|
||||||
|
placeholder='admin.wizard.action.post_builder.placeholder'
|
||||||
|
classNames='post-builder-editor'}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
<div class="setting">
|
<div class="setting">
|
||||||
<div class="setting-label">
|
<div class="setting-label">
|
||||||
<h3>{{i18n "admin.wizard.action.send_message.recipient"}}</h3>
|
<h3>{{i18n "admin.wizard.action.send_message.recipient"}}</h3>
|
||||||
|
|
|
@ -236,3 +236,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.post-builder-editor {
|
||||||
|
min-height: 220px;
|
||||||
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ en:
|
||||||
include: "Include Fields"
|
include: "Include Fields"
|
||||||
title: "Title"
|
title: "Title"
|
||||||
post: "Post"
|
post: "Post"
|
||||||
add_fields: "Add Fields To {{type}}"
|
add_fields: "{{type}} Fields"
|
||||||
available_fields: "* If 'Save wizard submissions' is disabled, only the fields of the current step are available to the current step's actions."
|
available_fields: "* If 'Save wizard submissions' is disabled, only the fields of the current step are available to the current step's actions."
|
||||||
topic_attr: "Topic Attribute"
|
topic_attr: "Topic Attribute"
|
||||||
send_message:
|
send_message:
|
||||||
|
@ -101,6 +101,12 @@ en:
|
||||||
update_profile:
|
update_profile:
|
||||||
label: "Update Profile"
|
label: "Update Profile"
|
||||||
profile_field: "Profile Field"
|
profile_field: "Profile Field"
|
||||||
|
post_builder:
|
||||||
|
checkbox: "Post Builder"
|
||||||
|
label: "Builder"
|
||||||
|
user_fields: "User Fields: "
|
||||||
|
wizard_fields: "Wizard Fields: "
|
||||||
|
placeholder: "Insert wizard fields using the field_id in w{}. Insert user fields using field key in u{}."
|
||||||
|
|
||||||
wizard_js:
|
wizard_js:
|
||||||
location:
|
location:
|
||||||
|
|
|
@ -34,6 +34,29 @@ class CustomWizard::Builder
|
||||||
@sorted_handlers.sort_by! { |h| -h[:priority] }
|
@sorted_handlers.sort_by! { |h| -h[:priority] }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
USER_FIELDS = ['name', 'username', 'email', 'date_of_birth', 'title', 'locale']
|
||||||
|
PROFILE_FIELDS = ['location', 'website', 'bio_raw', 'profile_background', 'card_background']
|
||||||
|
|
||||||
|
def self.build_post(template, user, data)
|
||||||
|
post = template.gsub(/u\{(.*?)\}/) do |match|
|
||||||
|
result = ''
|
||||||
|
|
||||||
|
if USER_FIELDS.include?($1)
|
||||||
|
result = user.send($1)
|
||||||
|
if result.blank? && $1 === 'name'
|
||||||
|
result = user.send('username')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if PROFILE_FIELDS.include?($1)
|
||||||
|
result = user.user_profile.send($1)
|
||||||
|
end
|
||||||
|
|
||||||
|
result
|
||||||
|
end
|
||||||
|
post.gsub!(/w\{(.*?)\}/) { |match| data[$1.to_sym] }
|
||||||
|
end
|
||||||
|
|
||||||
def build
|
def build
|
||||||
unless (@wizard.completed? && !@wizard.multiple_submissions) || !@steps
|
unless (@wizard.completed? && !@wizard.multiple_submissions) || !@steps
|
||||||
@steps.each do |s|
|
@steps.each do |s|
|
||||||
|
@ -161,7 +184,12 @@ class CustomWizard::Builder
|
||||||
s['actions'].each do |a|
|
s['actions'].each do |a|
|
||||||
if a['type'] === 'create_topic' && data
|
if a['type'] === 'create_topic' && data
|
||||||
title = data[a['title']]
|
title = data[a['title']]
|
||||||
post = data[a['post']]
|
|
||||||
|
if a['post_builder']
|
||||||
|
post = CustomWizard::Builder.build_post(a['post'], user, data)
|
||||||
|
else
|
||||||
|
post = data[a['post']]
|
||||||
|
end
|
||||||
|
|
||||||
if title
|
if title
|
||||||
params = {
|
params = {
|
||||||
|
@ -218,7 +246,12 @@ class CustomWizard::Builder
|
||||||
|
|
||||||
if a['type'] === 'send_message' && data
|
if a['type'] === 'send_message' && data
|
||||||
title = data[a['title']]
|
title = data[a['title']]
|
||||||
post = data[a['post']]
|
|
||||||
|
if a['post_builder']
|
||||||
|
post = CustomWizard::Builder.build_post(a['post'], user, data)
|
||||||
|
else
|
||||||
|
post = data[a['post']]
|
||||||
|
end
|
||||||
|
|
||||||
if title && post
|
if title && post
|
||||||
creator = PostCreator.new(user,
|
creator = PostCreator.new(user,
|
||||||
|
|
Laden …
In neuem Issue referenzieren