Create from template campaigns handles name collisions
This commit is contained in:
parent
743fd2a15e
commit
4dddccdf46
3 changed files with 22 additions and 4 deletions
|
@ -5,6 +5,7 @@ class CampaignsController < ApplicationController
|
||||||
helper_method :current_campaign_editor?
|
helper_method :current_campaign_editor?
|
||||||
before_filter :authenticate_confirmed_user!, only: [:create, :name_and_id, :duplicate]
|
before_filter :authenticate_confirmed_user!, only: [:create, :name_and_id, :duplicate]
|
||||||
before_filter :authenticate_campaign_editor!, only: [:update, :soft_delete]
|
before_filter :authenticate_campaign_editor!, only: [:update, :soft_delete]
|
||||||
|
before_filter :authenticate_nonprofit_user!, only: [:create_via_template]
|
||||||
before_filter :check_nonprofit_status, only: [:index, :show]
|
before_filter :check_nonprofit_status, only: [:index, :show]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
@ -65,6 +66,23 @@ class CampaignsController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_from_template
|
||||||
|
Qx.transaction do
|
||||||
|
campaign_template = current_nonprofit.campaign_templates.find(params[:campaign_template_id])
|
||||||
|
|
||||||
|
save_params = campaign_template.create_campaign_params
|
||||||
|
|
||||||
|
save_params['slug'] = SlugCopyNamingAlgorithm.new(Campaign, current_nonprofit.id).create_copy_name(Format::Url.convert_to_slug(save_params['name']))
|
||||||
|
|
||||||
|
save_params['name'] = NameCopyNamingAlgorithm.new(Campaign, current_nonprofit.id).create_copy_name(save_params['name'])
|
||||||
|
save_params['profile_id'] = params[:profile_id]
|
||||||
|
campaign = current_nonprofit.campaigns.create save_params
|
||||||
|
campaign.update_attribute(:main_image, campaign_template.main_image) unless !campaign_template.main_image rescue AWS::S3::Errors::NoSuchKey
|
||||||
|
|
||||||
|
json_saved campaign, 'Campaign created! Well done.'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
Time.use_zone(current_nonprofit.timezone || 'UTC') do
|
Time.use_zone(current_nonprofit.timezone || 'UTC') do
|
||||||
params[:campaign][:end_datetime] = Chronic.parse(params[:campaign][:end_datetime]) if params[:campaign][:end_datetime].present?
|
params[:campaign][:end_datetime] = Chronic.parse(params[:campaign][:end_datetime]) if params[:campaign][:end_datetime].present?
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<a class="button">Create campaign from template</a>
|
<a class="button">Create campaign from template</a>
|
||||||
<!--= on 'click' (create_campaign_from_template '<%= raw(template.create_campaign_params.to_json) %>') -->
|
<!--= on 'click' (create_campaign_from_template '<%= raw({'campaign_template_id' => template.id}.to_json) %>') -->
|
||||||
|
|
||||||
<a class="button red">Delete template</a>
|
<a class="button red">Delete template</a>
|
||||||
<!--= on 'click' (delete_template <%= template.id %>) -->
|
<!--= on 'click' (delete_template <%= template.id %>) -->
|
||||||
|
|
|
@ -79,8 +79,8 @@ appl.def('create_campaign_from_template', function(campaign_params) {
|
||||||
|
|
||||||
var url = '/nonprofits/' + app.nonprofit_id + '/campaigns/create_from_template'
|
var url = '/nonprofits/' + app.nonprofit_id + '/campaigns/create_from_template'
|
||||||
var params = new Object
|
var params = new Object
|
||||||
params.campaign = JSON.parse(campaign_params)
|
params = JSON.parse(campaign_params)
|
||||||
params.campaign.profile_id = app.profile_id
|
params.profile_id = app.profile_id
|
||||||
|
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
var req = new XMLHttpRequest()
|
var req = new XMLHttpRequest()
|
||||||
|
@ -96,7 +96,7 @@ appl.def('create_campaign_from_template', function(campaign_params) {
|
||||||
appl.def('loading', false)
|
appl.def('loading', false)
|
||||||
appl.notify('Redirecting you to your campaign…')
|
appl.notify('Redirecting you to your campaign…')
|
||||||
var campaign_id = JSON.parse(req.response).id
|
var campaign_id = JSON.parse(req.response).id
|
||||||
appl.redirect(url + '/' + campaign_id)
|
appl.redirect('/nonprofits/' + app.nonprofit_id + '/campaigns/' + campaign_id)
|
||||||
})
|
})
|
||||||
.catch(function(req) {
|
.catch(function(req) {
|
||||||
appl.def('loading', false)
|
appl.def('loading', false)
|
||||||
|
|
Loading…
Reference in a new issue