Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added contactable to tracks #2541

Merged
merged 1 commit into from
Oct 24, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions app/controllers/tracks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@ def show; end

def new
@track = @program.tracks.new(color: @conference.next_color_for_collection(:tracks))
@track.build_contact
end

def edit; end

def create
@track = @program.tracks.new(track_params)
@contact = @track.build_contact(track_params[:contact_attributes])
@contact.conference = @conference
@track.submitter = current_user
@track.cfp_active = false
if @track.save
Expand All @@ -35,7 +38,8 @@ def update
redirect_to conference_program_tracks_path(conference_id: @conference.short_title),
notice: 'Track request successfully updated.'
else
flash.now[:error] = "Track request update failed: #{@track.errors.full_messages.join('. ')}."
flash.now[:error] = "Track request update failed: #{@track.errors.full_messages.join('. ')}" \
"#{@track.contact.errors.full_messages.join('. ')}."
render :edit
end
end
Expand All @@ -55,7 +59,8 @@ def withdraw
private

def track_params
params.require(:track).permit(:name, :description, :color, :short_name, :start_date, :end_date, :relevance)
params.require(:track).permit(:name, :description, :color, :short_name, :start_date, :end_date, :relevance,
contact_attributes: [:id, :social_tag, :facebook, :googleplus, :twitter, :instagram, :mastodon, :youtube])
end

def update_state(transition, notice)
Expand Down
1 change: 1 addition & 0 deletions app/models/contact.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ class Contact < ApplicationRecord
has_paper_trail on: [:update], ignore: [:updated_at], meta: { conference_id: :conference_id }

belongs_to :conference
belongs_to :contactable, polymorphic: true

validates :conference, presence: true
# Conferences only have one contact
Expand Down
2 changes: 2 additions & 0 deletions app/models/track.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ class Track < ApplicationRecord
belongs_to :selected_schedule, class_name: 'Schedule'
has_many :events, dependent: :nullify
has_many :schedules
has_one :contact, as: :contactable
accepts_nested_attributes_for :contact

has_paper_trail ignore: [:updated_at], meta: { conference_id: :conference_id }

Expand Down
11 changes: 11 additions & 0 deletions app/views/tracks/_form.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,15 @@
= f.input :end_date, as: :string, input_html: { id: 'registration-period-end-datepicker', readonly: 'readonly' }
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown-editable' } }, required: true, hint: "This will be public #{markdown_hint}".html_safe
= f.input :relevance, input_html: {rows: 5, data: { provide: 'markdown-editable' } }, required: true, hint: "Please explain here how this track relates to the conference, how you are related to its content and why we should accept it. #{markdown_hint}".html_safe

= f.inputs name:'Social Media' do
= f.semantic_fields_for :contact, @track.contact do |c|
= c.input :social_tag, hint: "The hashtag you'll use on Twitter and Google+. Don't include the '#' sign!'", required: false
= c.input :facebook, hint: 'This will appear in the social media section as a link to the Facebook.', required: false
= c.input :googleplus, label: 'Google+ Url', hint: 'This will appear in the social media section as a link to the Google+ Page of your Track', required: false
= c.input :twitter, hint: 'This will appear in the social media section as a link to the Twitter Page of your Track', required: false
= c.input :instagram, hint: 'This will appear in the social media section as a link to the Instagram Page of your Track', required: false
= c.input :mastodon, hint: 'This will appear in the social media section as a link to the Mastodon Page of your Track', required: false
= c.input :youtube, hint: 'This will appear in the social media section as a link to the YouTube channel for your Track.', required: false

= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
6 changes: 6 additions & 0 deletions db/migrate/20190612161235_add_polymorphic_to_contact.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class AddPolymorphicToContact < ActiveRecord::Migration[5.1]
def change
add_column :contacts, :contactable_type, :string
add_column :contacts, :contactable_id, :integer
end
end
4 changes: 3 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 2019_06_03_143107) do
ActiveRecord::Schema.define(version: 2019_06_12_161235) do

create_table "answers", force: :cascade do |t|
t.string "title"
Expand Down Expand Up @@ -126,6 +126,8 @@
t.string "mastodon"
t.string "youtube"
t.string "blog"
t.string "contactable_type"
t.integer "contactable_id"
end

create_table "delayed_jobs", force: :cascade do |t|
Expand Down
1 change: 1 addition & 0 deletions spec/controllers/tracks_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
let(:conference) { create(:conference) }
let!(:regular_track) { create(:track, program: conference.program) }
let!(:self_organized_track) { create(:track, :self_organized, program: conference.program, submitter: user, name: 'My awesome track', color: '#800080') }
let!(:contact) { create(:contact, contactable_type: 'Track', contactable_id: self_organized_track.id) }

before :each do
sign_in(user)
Expand Down