diff --git a/app/controllers/management/volunteers_controller.rb b/app/controllers/management/volunteers_controller.rb
index eb49a8b..ae18b36 100644
--- a/app/controllers/management/volunteers_controller.rb
+++ b/app/controllers/management/volunteers_controller.rb
@@ -4,7 +4,7 @@ module Management
def index
@filters = filter_params || {}
- @volunteers = VolunteerSearch.new(scope: Volunteer.where(conference: current_conference).eager_load(:volunteer_teams), filters: params[:filters]).results
+ @volunteers = VolunteerSearch.new(scope: Volunteer.where(conference: current_conference).eager_load(:volunteer_team), filters: params[:filters]).results
end
def show
@@ -30,13 +30,14 @@ module Management
def filter_params
params.fetch(:filters, {}).permit(:volunteer_team_id)
end
-
+
def volunteer_params
params.require(:volunteer).permit(:name, :picture, :email, :phone,
:tshirt_size, :tshirt_cut,
:food_preferences, :previous_experience,
:notes, :language,
- volunteer_team_ids: [])
+ :volunteer_team_id,
+ additional_volunteer_team_ids: [])
end
end
end
diff --git a/app/controllers/public/volunteers_controller.rb b/app/controllers/public/volunteers_controller.rb
index 249645d..6e93db6 100644
--- a/app/controllers/public/volunteers_controller.rb
+++ b/app/controllers/public/volunteers_controller.rb
@@ -34,7 +34,7 @@ module Public
params.require(:volunteer).permit(
:name, :picture, :email, :phone, :tshirt_size, :tshirt_cut,
:food_preferences, :previous_experience, :notes, :language,
- volunteer_team_ids: []
+ :volunteer_team_id
)
end
end
diff --git a/app/models/volunteer.rb b/app/models/volunteer.rb
index e45bdd5..eded70f 100644
--- a/app/models/volunteer.rb
+++ b/app/models/volunteer.rb
@@ -11,26 +11,27 @@ class Volunteer < ActiveRecord::Base
validates :food_preferences, inclusion: {in: FOOD_PREFERENCES.map(&:to_s)}
validates :email, format: {with: /\A[^@]+@[^@]+\z/}, presence: true
validates :phone, presence: true, format: {with: /\A[+\- \(\)0-9]+\z/}
- validates :volunteer_teams, presence: true
+ validates :volunteer_team, presence: true
validate :volunteer_teams_belong_to_conference
phony_normalize :phone, default_country_code: "BG"
belongs_to :conference
- has_and_belongs_to_many :volunteer_teams
+ belongs_to :volunteer_team
+ has_and_belongs_to_many :additional_volunteer_teams, class_name: "VolunteerTeam"
+ before_create :ensure_main_volunteer_team_is_part_of_additional_volunteer_teams
before_create :assign_unique_id
- after_create :send_notification_to_organizers
after_create :send_notification_to_volunteer
private
- def assign_unique_id
- self.unique_id = Digest::SHA256.hexdigest(SecureRandom.uuid)
+ def ensure_main_volunteer_team_is_part_of_additional_volunteer_teams
+ self.additional_volunteer_teams |= [volunteer_team] if volunteer_team
end
- def send_notification_to_organizers
- VolunteerMailer.team_notification(self).deliver_later
+ def assign_unique_id
+ self.unique_id = Digest::SHA256.hexdigest(SecureRandom.uuid)
end
def send_notification_to_volunteer
@@ -39,8 +40,11 @@ class Volunteer < ActiveRecord::Base
def volunteer_teams_belong_to_conference
conference_volunteer_teams = conference.volunteer_teams
- unless volunteer_teams.all? { |team| conference_volunteer_teams.include? team }
- errors.add :volunteer_teams, :invalid_volunteer_team
+ unless additional_volunteer_teams.all? { |team| conference_volunteer_teams.include? team }
+ errors.add :additional_volunteer_teams, :invalid_volunteer_team
+ end
+ unless conference_volunteer_teams.include?(volunteer_team)
+ errors.add :volunteer_team, :invalid_volunteer_team
end
end
end
diff --git a/app/models/volunteer_search.rb b/app/models/volunteer_search.rb
index 11af181..9fe1fdc 100644
--- a/app/models/volunteer_search.rb
+++ b/app/models/volunteer_search.rb
@@ -1,7 +1,7 @@
class VolunteerSearch
include SearchObject.module(:sorting)
- option(:volunteer_team_id) { |scope, value| scope.joins(:volunteer_teams).where volunteer_teams: {id: value} }
+ option(:volunteer_team_id) { |scope, value| scope.joins(:volunteer_team).where volunteer_team: {id: value} }
sort_by "name"
config[:defaults]["sort"] = "#{config[:sort_attributes].first} asc"
diff --git a/app/views/management/volunteers/_form.html.slim b/app/views/management/volunteers/_form.html.slim
index 50ace56..6186233 100644
--- a/app/views/management/volunteers/_form.html.slim
+++ b/app/views/management/volunteers/_form.html.slim
@@ -11,7 +11,8 @@
= f.input :name, autofocus: true
= f.input :email
- = f.association :volunteer_teams, as: :check_boxes, wrapper: :horizontal_radio_and_checkboxes, collection: current_conference.volunteer_teams
+ = f.association :volunteer_team, as: :radio_buttons, wrapper: :horizontal_radio_and_checkboxes, collection: current_conference.volunteer_teams
+ = f.association :additional_volunteer_teams, as: :check_boxes, wrapper: :horizontal_radio_and_checkboxes, collection: current_conference.volunteer_teams
= f.input :phone, input_html: {value: @volunteer.phone.try(:phony_formatted, format: :international)}
= f.input :language, as: :radio_buttons, wrapper: :horizontal_radio_and_checkboxes, collection: locale_collection, include_blank: false, checked: (@volunteer.language.presence || I18n.locale)
= f.input :tshirt_size, collection: Volunteer::TSHIRT_SIZES, as: :radio_buttons, wrapper: :horizontal_radio_and_checkboxes, checked: (@volunteer.tshirt_size.presence || :m)
diff --git a/app/views/management/volunteers/index.csv.erb b/app/views/management/volunteers/index.csv.erb
index 506382c..090bcfd 100644
--- a/app/views/management/volunteers/index.csv.erb
+++ b/app/views/management/volunteers/index.csv.erb
@@ -1,4 +1,4 @@
-<%- csv_headers = %w{id name email language unique_id phone tshirt_size tshirt_cut food_preferences previous_experience notes teams} -%>
+<%- csv_headers = %w{id name email language unique_id phone tshirt_size tshirt_cut food_preferences previous_experience notes team additional_teams} -%>
<%= CSV.generate_line(csv_headers).html_safe -%>
<%- @volunteers.each do |volunteer| -%>
<%= CSV.generate_line([volunteer.id,
@@ -12,5 +12,6 @@
volunteer.food_preferences,
volunteer.previous_experience,
volunteer.notes,
- volunteer.volunteer_teams.map(&:name).join(', ')]).html_safe -%>
+ volunteer.volunteer_team.name,
+ volunteer.additional_volunteer_teams.map(&:name).join(', ')]).html_safe -%>
<%- end -%>
diff --git a/app/views/management/volunteers/index.html.slim b/app/views/management/volunteers/index.html.slim
index 6d62c57..e989e9b 100644
--- a/app/views/management/volunteers/index.html.slim
+++ b/app/views/management/volunteers/index.html.slim
@@ -32,7 +32,7 @@
thead
tr
th = t '.profile'
- th = Volunteer.human_attribute_name :volunteer_teams
+ th = Volunteer.human_attribute_name :volunteer_team
th.actions
tbody
- @volunteers.each do |volunteer|
@@ -50,7 +50,7 @@
p
= icon(:envelope, volunteer.email)
td
- = volunteer.volunteer_teams.map(&:name).join(', ')
+ = volunteer.volunteer_team.name
td.actions
div.btn-group.btn-group-sm
= action_buttons(current_conference, volunteer, [:show, :edit])
diff --git a/app/views/management/volunteers/show.html.slim b/app/views/management/volunteers/show.html.slim
index 0004289..0f4287a 100644
--- a/app/views/management/volunteers/show.html.slim
+++ b/app/views/management/volunteers/show.html.slim
@@ -25,8 +25,10 @@
h4.media-heading
= @volunteer.name
hr
- h4 = Volunteer.human_attribute_name(:volunteer_teams)
- = @volunteer.volunteer_teams.map(&:name).join(', ')
+ h4 = Volunteer.human_attribute_name(:volunteer_team)
+ = @volunteer.volunteer_team.name
+ h4 = Volunteer.human_attribute_name(:additional_volunteer_teams)
+ = @volunteer.additional_volunteer_teams.map(&:name).join(', ')
- if @volunteer.previous_experience.present?
h4 = Volunteer.human_attribute_name(:previous_experience)
= simple_format @volunteer.previous_experience
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index f6dbfe7..6b4c748 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -15,77 +15,6 @@ bg:
change_feedback_for: Преоценете „%{title}“
by: от %{authors}
feedback_incentive: Бихме били благодарни, ако споделите с нас мнението си за конференцията и събитията в нея.
- management:
- volunteers:
- index:
- all: Всички
- profile: Профил
- total: "%{current} от общо %{total}"
- personal_profiles:
- index:
- no_profile: 'Този потребител няма въведен профил за текущата конференция.'
- total: "%{current} от общо %{total}"
- create:
- successfully_created: "Профилът беше създаден успешно."
- show:
- contacts: "Данни за контакт"
- event_propositions: "Предложения за събития"
- conferences:
- update_vote_data:
- vote_data_successfully_updated: "Резултатите от гласуването бяха обновени успешно"
- error_during_vote_data_save: "Възникна грешка при запазването на резултатите от гласуването"
- error_during_connection_with_voting_endpoint: "Възникна грешка при опит за изтегляне на резултатите от гласуването: %{error}"
- vote_results:
- back_to: "Обратно към %{conference}"
- vote_results: "Резултати от гласуването"
- vote_data_never_updated: "Резултатите от гласуването не са изтеглени"
- voting_results: "Резултати от гласуването"
- vote_data_updated_at: "последно обновяване %{updated_at}"
- vote_ratio: "%{votes} от общо %{total_votes} гласа"
- fetch_vote_results: "Обнови резултатите от гласуването"
- percent: "%"
- rank: "Позиция"
- unranked: "Няма данни"
- export: Експорт
- show:
- full_vote_results: "Пълни резултати от гласуването"
- vote_data_never_updated: "Резултатите от гласуването не са изтеглени"
- voting_results: "Резултати от гласуването"
- vote_data_updated_at: "последно обновяване %{updated_at}"
- vote_ratio: "%{votes} от общо %{total_votes} гласа"
- summary: 'Обобщение'
- cfp_status: 'Състояние на CFP'
- fetch_vote_results: "Обнови резултатите от гласуването"
- percent: "%"
- rank: "Позиция"
- events:
- conflicts:
- conflicts: "Конфликти"
- conflicts_of: "Конфликти на „%{event}“"
- percent: "Процент"
- hint_html: "Следващата таблица илюстрира какъв процент от посетителите, изявили интерес да присъстват на „%{event}“, биха желали да присъстват на всяко от посочените събития."
- edit:
- edit: "Редакция на %{event_type} „%{event_title}“"
- speaker:
- no_profile: 'Този потребител няма въведени профили в системата.'
- profile_from: "профил от %{conference}"
- create_profile: "Създай нов профил"
- previous_event_propositions: 'Предишни предложения за събития'
- contacts: "Информация за контакт"
- show:
- between_approved_events: "Между настоящото и одобрените събития"
- no_approved_events: "Няма достатъчно одобрени събития"
- rank: "Класиране"
- review: "Преглед на %{event_type} „%{event_title}“"
- conflicts: "Конфликти"
- percent: "Процент"
- index:
- all: "Всички"
- total: "%{current} от общо %{total}"
- event:
- create_profile: "Създай профил"
- no_records:
- no_records_found: 'Не бяха открити записи, които да отговарят на изискванията'
abstract: "Резюме"
helpers:
submit:
@@ -190,7 +119,8 @@ bg:
previous_experience: Предишен опит
notes: Бележки
language: Език
- volunteer_teams: Екипи доброволци
+ volunteer_team: Екип доброволци
+ additional_volunteer_teams: Допълнителни екипи доброволци
track:
color: "Цвят"
description: "Описание"
@@ -230,7 +160,9 @@ bg:
attributes:
picture:
invalid_content_type: "невалиден формат на снимката"
- volunteer_teams:
+ volunteer_team:
+ invalid_volunteer_team: "невалиден екип от доброволци"
+ additional_volunteer_teams:
invalid_volunteer_team: "невалиден екип от доброволци"
models:
feedback:
@@ -434,10 +366,11 @@ bg:
public_email: E-mail адрес, който ще бъде видим за посетителите
twitter: "Потребителското Ви име в Twitter"
volunteer:
+ name: "Имайте предвид, че това име ще бъде изписано на грамотата ви за участие в конференцията"
email: "Е-mail адресът Ви, който ще бъде видим само от организаторите"
phone: "Мобилният Ви телефон, който ще бъде видим само за организаторите"
picture: "Ваша снимка в jpeg, png или gif формат"
- volunteer_teams: "Доброволческите екипи, от които искате да сте част. Подробни описания на екипите можете да намерите тук"
+ volunteer_team: "Доброволческият екип, от които искате да бъдете част. Подробни описания на екипите можете да намерите тук. Ако желаете да участвате в повече от един екип, споменете това в полето бележка."
user:
email: e-mail адресът Ви. Ще бъде видим само от организаторите
password: "Парола с дължина между 8 и 128 символа"
diff --git a/config/locales/en.yml b/config/locales/en.yml
index d88d460..931f208 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1,21 +1,21 @@
en:
public:
event_feedbacks:
- new: &new_feedbacks_en
- feedback_for: Rating '%{title}'
+ new: &new_feedbacks_bg
+ feedback_for: "Rating '%{title}'"
submit: Submit
success: The feedback was submitted successfully
conference_feedbacks:
- new: *new_feedbacks_en
+ new: *new_feedbacks_bg
index:
feedback_for_the_conference: Feedback for the conference
- general_feedback_for: Submit general feedback for "%{title}"
- change_general_feedback_for: Resubmit general feedback for "%{title}"
- feedback_for: Submit feedback for "%{title}"
- change_feedback_for: Resubmit feedback for "%{title}"
- by: by %{authors}
+ general_feedback_for: "Submit general feedback for \"%{title}\""
+ change_general_feedback_for: "Resubmit general feedback for \"%{title}\""
+ feedback_for: "Submit feedback for \"%{title}\""
+ change_feedback_for: "Resubmit feedback for \"%{title}\""
+ by: "by %{authors}"
feedback_incentive: We would be happy to receive your feedback about the conference and its events.
- abstract: Abstract
+ abstract: "Abstract"
helpers:
submit:
event:
@@ -25,68 +25,90 @@ en:
create: "Submit application"
update: "Update application"
actions:
- are_you_sure: Are you sure?
+ are_you_sure: "Are you sure?"
+ clone:
+ button: "Clone %{model}"
+ title: "Clone existing %{model}"
create:
- button: Create %{model}
- title: 'Create a new #{model}'
+ button: "Create %{model}"
+ title: "Create a new #{model}"
destroy:
- button: Destroy %{model}
+ button: "Destroy %{model}"
edit:
- button: Edit %{model}
- title: Editing %{model}
+ button: "Edit %{model}"
+ title: "Editing %{model}"
index:
- button: Browse %{models}
- title: Browse %{models}
+ button: "Browse %{models}"
+ title: "Browse %{models}"
new:
- title_f: New %{model}
- title_m: New %{model}
+ title_f: "New %{model}"
+ title_m: "New %{model}"
+ title_c: "New %{model}"
view:
- button: View %{model}
- title: Viewing %{model}
+ button: "View %{model}"
+ title: "Viewing %{model}"
+ attributes:
+ average_rating: Average rating
+ rating: Rating
activerecord:
attributes:
feedback:
author_email: E-mail
rating: Rating
comment: Comment
+ participation:
+ participant: Participant
+ approved: Confirmed by participant
+ proposition:
+ status: Status
+ statuses:
+ undecided: Undecided
+ approved: Approved
+ rejected: Rejected
+ backup: Backup
conference:
- description: Description
+ participants: "Participants"
+ description: "Description"
email: E-mail
- end_date: End date
- host_name: Domain name
- start_date: Start date
- title: Title
+ end_date: "End date"
+ host_name: "Domain name"
+ start_date: "Start date"
+ planned_cfp_end_date: "Planned CFP End date"
+ title: "Title"
event:
- abstract: Abstract
- agreement: I accept
- description: Description
- language: Language
- length: Length
- notes: Notes
- subtitle: Sub-title
- title: Title
- track: Track
- user: Speaker
- feedbacks: Feedback
+ conference: "Conference"
+ status: "Statis"
+ abstract: "Abstract"
+ agreement: "I accept"
+ description: "Description"
+ language: "Language"
+ length: "Length"
+ notes: "Notes"
+ subtitle: "Sub-title"
+ title: "Title"
+ track: "Track"
+ rank: "Rank"
+ user: "Speaker"
+ participants: "Participants"
+ feedbacks: "Feedback"
event_type:
- description: Description
- name: Name
+ description: "Description"
+ name: "Name"
minimum_length: Minimum length
maximum_length: Maximum length
hall:
- name: Name
+ name: "Name"
personal_profile:
- biography: Short biography
- first_name: First name
+ biography: "Short biography"
+ first_name: "First name"
github: Github account
- last_name: Last name
- mobile_phone: Mobile phone
- organisation: Organization
- picture: Photo
- public_email: Public e-mail
+ last_name: "Last name"
+ mobile_phone: "Mobile phone"
+ organisation: "Organization"
+ picture: "Photo"
+ public_email: "Public e-mail"
twitter: Twitter account
volunteer:
- language: Language
picture: Picture
name: Name
email: E-mail
@@ -96,109 +118,125 @@ en:
food_preferences: Food preference
previous_experience: Previous experience
notes: Notes
- volunteer_teams: Екипи доброволци
- track:
- color: Color
- description: Description
- name: Name
- user:
- current_password: Current password
- email: E-mail
language: Language
- password: Password
- password_confirmation: Password confirmation
- remember_me: Remember me
+ volunteer_team: Volunteer team
+ additional_volunteer_teams: Additional volunteer teams
+ track:
+ color: "Color"
+ description: "Description"
+ name: "Name"
+ user:
+ current_password: "Current password"
+ email: E-mail
+ language: "Language"
+ password: "Password"
+ password_confirmation: "Password confirmation"
+ remember_me: "Remember me"
+ volunteer_team:
+ name: Name
+ description: Description
+ color: Color
errors:
models:
event:
attributes:
track:
- must_be_a_valid_track: must be one of the listed lecture tracks
+ must_be_a_valid_track: "must be one of the listed lecture tracks"
length:
must_be_between: "must be between %{minimum} and %{maximum} minutes"
personal_profile:
attributes:
github:
- invalid: can contain only alphabet characters, digits or a dash and cannot start with a dash
+ invalid: "can contain only alphabet characters, digits or a dash and cannot start with a dash"
twitter:
- invalid: can contain a maximum of 15 symbols that need to be alphabet characters, digits or an underscore
+ invalid: "can contain a maximum of 15 symbols that need to be alphabet characters, digits or an underscore"
user:
attributes:
email:
- invalid: is not a valid e-mail address
+ invalid: "is not a valid e-mail address"
password_confirmation:
- confirmation: does not match the password
+ confirmation: "does not match the password"
volunteer:
attributes:
picture:
invalid_content_type: "invalid picture format"
+ volunteer_team:
+ invalid_volunteer_team: "invalid volunteer team"
+ additional_volunteer_teams:
+ invalid_volunteer_team: "invalid volunteer team"
models:
+ feedback:
+ one: Feedback
+ other: Feedback
+ participation:
+ one: Participation
+ other: Participation
volunteership:
one: volunteership
other: volunteerships
conference:
- one: conference
- other: conferences
+ one: "conference"
+ other: "conferences"
event:
- one: Suggestion
- other: Suggestions
+ one: "Suggestion"
+ other: "Suggestions"
event_type:
- one: event type
- other: event types
+ one: "event type"
+ other: "event types"
hall:
- one: hall
- other: halls
+ one: "hall"
+ other: "halls"
lecture:
- one: Lecture
- other: Lectures
+ one: "Lecture"
+ other: "Lectures"
personal_profile:
- one: Profile
- other: Profiles
+ one: "Profile"
+ other: "Profiles"
proposition:
- one: Proposition
- other: Propositions
+ one: "Proposition"
+ other: "Propositions"
sponsorship_offer:
- one: sponsor
- other: sponsors
+ one: "sponsor"
+ other: "sponsors"
track:
- one: track
- other: tracks
+ one: "track"
+ other: "tracks"
volunteer_team:
one: "volunteer team"
other: "volunteer teams"
user:
- one: User
- other: Users
+ one: "User"
+ other: "Users"
volunteer:
- one: volunteer
- other: volunteers
+ one: "volunteer"
+ other: "volunteers"
workshop:
- one: Workshop
- other: Workshops
- change_pass: Change password
- click_to_unlock: Click the link below to unlock
- confirm_by_clicking: You can confirm your account by clicking the link below
+ one: "Workshop"
+ other: "Workshops"
+ change_pass: "Change password"
+ click_to_unlock: "Click the link below to unlock"
+ confirm_by_clicking: "You can confirm your account by clicking the link below"
confirmations:
- did_not_receive_confirmation_instructions: You have not received confirmation instructions?
- resend: Send
- resend_confirmation: Send confirmation E-mail
- description: Description
- did_not_get_confirmation: You did not receive confirmation instructions?
- did_not_get_unlock: You did not receive unlock instructions?
+ did_not_receive_confirmation_instructions: "You have not received confirmation instructions?"
+ resend: "Send"
+ resend_confirmation: "Send confirmation E-mail"
+ description: "Description"
+ did_not_get_confirmation: "You did not receive confirmation instructions?"
+ did_not_get_unlock: "You did not receive unlock instructions?"
do_not_want_pass_reset1: "If you don't want to change your password, please delete this E-mail."
- do_not_want_pass_reset2: Your password will not be change unless you click the link above and enter a new password.
- edit: Edit
- edit_speaker_profile: Edit profile
- edit_talk: Edit talk
- edit_title: 'track "%{track}", duration: %{len} min'
- edit_workshop: Edit workshop
- enter: Enter
+ do_not_want_pass_reset2: "Your password will not be change unless you click the link above and enter a new password."
+ edit: "Edit"
+ edit_speaker_profile: "Edit profile"
+ edit_talk: "Edit talk"
+ edit_title: "track \"%{track}\", duration: %{len} min"
+ edit_workshop: "Edit workshop"
+ enter: "Enter"
errors:
messages:
- improbable_phone: not a valid phone number
+ improbable_phone: "not a valid phone number"
event_mailer:
acceptance_notification:
- subject: Your submission for %{conference} for the %{submission_type} "%{title}" has been approved
+ subject: "Your submission for %{conference} for the %{submission_type} \"%{title}\" has been approved"
rejection_notification:
subject: "Your submission for %{conference} for the %{submission_type} \"%{title}\" has not been approved"
volunteer_mailer:
@@ -206,77 +244,77 @@ en:
subject: "Your application for \"volunteership\" on %{conference_name} was received"
event_states:
approved:
- one: Approved
- other: Approved
+ one: "Approved"
+ other: "Approved"
backup:
- one: Backup
- other: Backup
+ one: "Backup"
+ other: "Backup"
confirmed:
- one: Confirmed
- other: Confirmed
+ one: "Confirmed"
+ other: "Confirmed"
rejected:
- one: Rejected
- other: Rejected
+ one: "Rejected"
+ other: "Rejected"
undecided:
- one: Undecided
- other: Undecided
- expected_validation: Awaiting confirmation of %{email}
- hello: Hello, %{name}
- home: Home
+ one: "Undecided"
+ other: "Undecided"
+ expected_validation: "Awaiting confirmation of %{email}"
+ hello: "Hello, %{name}"
+ home: "Home"
home_title: "%{conference} - call for participation"
- lecture_was_successfully_confirmed: Your lecture was confirmed successfully
- license_notice: Please keep in mind that the presentations will later be published under the CC-BY-ND (Creative Commons – Attribution – No derivatives) license.
+ lecture_was_successfully_confirmed: "Your lecture was confirmed successfully"
+ license_notice: "Please keep in mind that the presentations will later be published under the CC-BY-ND (Creative Commons – Attribution – No derivatives) license."
locales:
- bg: Bulgarian
+ bg: "Bulgarian"
en: English
- login: Login
- login_data: Account information
- login_with: Log in with %{with}
- logout: Log out
- lostpass: Forgotten password?
- meta_data: 'Language: %{language}, track: "%{track}", duration: %{length} m.'
- my_talks: My lecture submissions
- my_workshops: My workshop submissions
- new_workshop_title: Submit a workshop
- no_talks_submitted: You are yet to submit a lecture
- no_workshops_submitted: You are yet to submit a workshop
- of_motto: share the freedom
- pass_update_hint1: Do not fill this in unless you want to change your password
+ login: "Login"
+ login_data: "Account information"
+ login_with: "Log in with %{with}"
+ logout: "Log out"
+ lostpass: "Forgotten password?"
+ meta_data: "Language: %{language}, track: \"%{track}\", duration: %{length} m."
+ my_talks: "My lecture submissions"
+ my_workshops: "My workshop submissions"
+ new_workshop_title: "Submit a workshop"
+ no_talks_submitted: "You are yet to submit a lecture"
+ no_workshops_submitted: "You are yet to submit a workshop"
+ of_motto: "share the freedom"
+ pass_update_hint1: "Do not fill this in unless you want to change your password"
pass_update_hint2: "Fill this in if you'd like to change your password or E-mail address"
passwords:
- change_your_password: Change your password
- confirm_your_new_password: Password confirmation
- forgotten_password: Forgotten password
- new_password: New password
- send_instructions: Send instructions
- please_fill_in_your_speaker_profile: Please fill in the data for your personal profile
- registration: Registration
+ change_your_password: "Change your password"
+ confirm_your_new_password: "Password confirmation"
+ forgotten_password: "Forgotten password"
+ new_password: "New password"
+ send_instructions: "Send instructions"
+ please_fill_in_your_speaker_profile: "Please fill in the data for your personal profile"
+ registration: "Registration"
registrations:
- account_cancelation: Account deletion
- add_phone_number: Add a phone number
- are_you_sure: Are you sure you want to delete your registration
- cancel_my_account: Delete my account
- edit_account: Edit account
+ account_cancelation: "Account deletion"
+ add_phone_number: "Add a phone number"
+ are_you_sure: "Are you sure you want to delete your registration"
+ cancel_my_account: "Delete my account"
+ edit_account: "Edit account"
leave_blank_if_you_do_not_want_to_change: "leave blank if you don't want to change it"
- minimum_characters: at least %{minimum} symbols
- sign_me_up: Sign me up
- sign_up: Registration
- unhappy: You are not happy?
- update: Update
- we_need_your_current_password: we need your current password in order to confirm the changes
- resend_instructions_btn: Resend instructions
- resend_instructions_header: Resend confirmation instructions
- resend_unlock_instructions_title: Resend unlock instructions
- send_lostpass_instructions: Resend lost password instructions
+ minimum_characters: "at least %{minimum} symbols"
+ sign_me_up: "Sign me up"
+ sign_up: "Registration"
+ unhappy: "You are not happy?"
+ update: "Update"
+ we_need_your_current_password: "we need your current password in order to confirm the changes"
+ resend_instructions_btn: "Resend instructions"
+ resend_instructions_header: "Resend confirmation instructions"
+ resend_unlock_instructions_title: "Resend unlock instructions"
+ send_lostpass_instructions: "Resend lost password instructions"
sessions:
- remember_me: Remember me
- sign_in: Sign in
- sign_in_heading: Sign in
- sign_in_with: Sign in with %{with}
- sign_out: Sign out
+ remember_me: "Remember me"
+ sign_in: "Sign in"
+ sign_in_heading: "Sign in"
+ sign_in_with: "Sign in with %{with}"
+ sign_out: "Sign out"
simple_form:
error_notification:
- default_message: 'Please see the errors below:'
+ default_message: "Please see the errors below:"
options:
volunteer:
tshirt_size:
@@ -295,82 +333,84 @@ en:
vegan: Vegan
hints:
feedback:
- author_email: "Your E-mail address if you'd like to share it with us"
+ author_email: Your E-mail address if you'd like to share it with us
rating: Select your rating for the event
comment: Express your opinion in greater detail here
conference:
- description: Conference description
+ description: "Conference description"
email: Orga team email
- end_date: Last day of the conference
- start_date: First day of the conference
- title: Title of the conference
+ end_date: "Last day of the conference"
+ start_date: "First day of the conference"
+ planned_cfp_end_date: "The day before all speakers must have submitted their proposals. This field is informative, it is not enforced."
+ title: "Title of the conference"
tracks:
- color: Color
- description: Short description
- name: Track name
+ color: "Color"
+ description: "Short description"
+ name: "Track name"
event:
- abstract: An abstract of the event that will be published for the attendees to read (around 1 paragraph)
- agreement: Indicate if you accept your workshop to be recorded and published under the CC-BY-ND (Creative Commons – Attribution – No Derivatives) license
- description: Detailed description of the event (several paragraphs)
- language: "Language in which the event will be lead"
+ abstract: "An abstract of the event that will be published for the attendees to read (around 1 paragraph)"
+ agreement: "Indicate if you accept your workshop to be recorded and published under the CC-BY-ND (Creative Commons – Attribution – No Derivatives) license"
+ description: "Detailed description of the event (several paragraphs)"
+ language: ""
length: "Length of the event (in minutes). The length of a %{type} is between %{min} and %{max} minutes"
notes: "Notes that you'd like the organisation team to read"
subtitle: ""
title: ""
- track: The lecture track for your event
+ track: "The lecture track for your event"
personal_profile:
- biography: Describe yourself with a few sentences, writing about yourself in the third person :)
- github: Your Github username
- mobile_phone: A mobile phone that will be visible only by the organisation team
- organisation: The organisation you represent
- picture: Your photo
+ biography: "Describe yourself with a few sentences, writing about yourself in the third person :)"
+ github: "Your Github username"
+ mobile_phone: "A mobile phone that will be visible only by the organisation team"
+ organisation: "The organisation you represent"
+ picture: "Your photo"
public_email: E-mail address that will be visible for the attendees
- twitter: Your Twitter handle
+ twitter: "Your Twitter handle"
volunteer:
+ name: "Keep in mind that this name will be written in your certificate for participation in the conference."
email: "Your E-mail address. It will be visible only to the organizers"
phone: "Your mobile phone. It will be visible only to the organizers"
picture: "A picture of you in jpeg, png or gif format"
- volunteer_teams: "The volunteer teams you'd like to be part of. You can find a description of each team here"
+ volunteer_team: "The volunteer team you'd like to be a part of. You can find a description of each team here. Leave a note in the Notes field if you wish to be a part of any additional teams."
user:
email: Your e-mail address. Will be visible to the organizers only.
- password: Password with length between 8 and 128 symbols
- password_confirmation: Repeat the password
- 'no': false
+ password: "Password with length between 8 and 128 symbols"
+ password_confirmation: "Repeat the password"
+ 'no': "No"
required:
mark: "*"
- text: Required field
- 'yes': true
- someone_requested_passreset: Someone requested to change the password of your account. The password can be changed by following the link below
- speaker_profile: Speaker profile
- submit_talk_header: Submit a new talk
+ text: "Required field"
+ 'yes': "Yes"
+ someone_requested_passreset: "Someone requested to change the password of your account. The password can be changed by following the link below"
+ speaker_profile: "Speaker profile"
+ submit_talk_header: "Submit a new talk"
suggestion_and_speaker_count: "%{suggestions} submissions by %{speakers} speakers"
- talks: Talks
+ talks: "Talks"
unlocks:
- did_not_receive_unlock_instructions: Did not receive unlock instructions?
- resend: Resend
- resend_unlock_instructions: Resend unlock instructions
- update: Update
+ did_not_receive_unlock_instructions: "Did not receive unlock instructions?"
+ resend: "Resend"
+ resend_unlock_instructions: "Resend unlock instructions"
+ update: "Update"
views:
conference:
- info: Conference details
- see_details: See details
+ info: "Conference details"
+ see_details: "See details"
events:
- edit_event: Editing %{event_type} %{title}
- event_successfully_created: Your %{event_type} submission was successfully created
- event_successfully_updated: Your %{event_type} submission was successfully updated
- successfully_confirmed: Your %{event_type} submission was successfully confirmed
- error_on_confirmation: There was an error during the confirmation of your %{event_type} submission
- no_events: You are yet to submit an event
- submit_event: Submit a %{event_type}
+ edit_event: "Editing %{event_type} %{title}"
+ event_successfully_created: "Your %{event_type} submission was successfully created"
+ event_successfully_updated: "Your %{event_type} submission was successfully updated"
+ successfully_confirmed: "Your %{event_type} submission was successfully confirmed"
+ error_on_confirmation: "There was an error during the confirmation of your %{event_type} submission"
+ no_events: "You are yet to submit an event"
+ submit_event: "Submit a %{event_type}"
navigation:
- my_submissions: My submissions
+ my_submissions: "My submissions"
personal_profiles:
- successfully_created: Your personal profile was successfully created
- successfully_updated: Your personal profile was successfully updated
+ successfully_created: "Your personal profile was successfully created"
+ successfully_updated: "Your personal profile was successfully updated"
user:
- info: User details
+ info: "User details"
welcome:
- submit_event: Submit %{event_type}
+ submit_event: "Submit %{event_type}"
volunteers:
new_volunteer_title: Apply for a volunteer
edit_volunteer_title: "Volunteership application of %{name}"
@@ -380,7 +420,7 @@ en:
successful_application_edit: "Your application was successfully updated"
error_occurred_while_applying: "There was an error and your application could not be sent"
you_successfully_retracted_your_application_for: "Your application was successfully retracted"
- welcome: Welcome, %{name}
- what_we_ask: 'We would like to receive your lecture, workshop, and stand submissions that belong to the following tracks until %{date}:'
- workshop_was_successfully_confirmed: The workshop was successfully confirmed
- workshops: Workshops
+ welcome: "Welcome, %{name}"
+ what_we_ask: "We would like to receive your lecture, workshop, and stand submissions that belong to the following tracks until %{date}:"
+ workshop_was_successfully_confirmed: "The workshop was successfully confirmed"
+ workshops: "Workshops"
diff --git a/config/locales/management.bg.yml b/config/locales/management.bg.yml
index 04025c8..94d2ba6 100644
--- a/config/locales/management.bg.yml
+++ b/config/locales/management.bg.yml
@@ -11,6 +11,95 @@ bg:
events:
metadata: "%{type} на %{language} с продължителност %{length} минути"
management:
+ volunteers:
+ index:
+ all: Всички
+ profile: Профил
+ total: "%{current} от общо %{total}"
+ personal_profiles:
+ index:
+ no_profile: 'Този потребител няма въведен профил за текущата конференция.'
+ total: "%{current} от общо %{total}"
+ create:
+ successfully_created: "Профилът беше създаден успешно."
+ show:
+ contacts: "Данни за контакт"
+ event_propositions: "Предложения за събития"
+ talk_history: Събития с участието на лектора
+ comments_from_the_audience: Коментари от аудиторията
+ no_comments_received: Все още няма коментари.
+ private_email: Личен e-mail
+ conferences:
+ update_vote_data:
+ vote_data_successfully_updated: "Резултатите от гласуването бяха обновени успешно"
+ error_during_vote_data_save: "Възникна грешка при запазването на резултатите от гласуването"
+ error_during_connection_with_voting_endpoint: "Възникна грешка при опит за изтегляне на резултатите от гласуването: %{error}"
+ vote_results:
+ back_to: "Обратно към %{conference}"
+ vote_results: "Резултати от гласуването"
+ vote_data_never_updated: "Резултатите от гласуването не са изтеглени"
+ voting_results: "Резултати от гласуването"
+ vote_data_updated_at: "последно обновяване %{updated_at}"
+ vote_ratio: "%{votes} от общо %{total_votes} гласа"
+ fetch_vote_results: "Обнови резултатите от гласуването"
+ percent: "%"
+ rank: "Позиция"
+ unranked: "Няма данни"
+ export: Експорт
+ show:
+ full_vote_results: "Пълни резултати от гласуването"
+ vote_data_never_updated: "Резултатите от гласуването не са изтеглени"
+ voting_results: "Резултати от гласуването"
+ vote_data_updated_at: "последно обновяване %{updated_at}"
+ vote_ratio: "%{votes} от общо %{total_votes} гласа"
+ summary: 'Обобщение'
+ cfp_status: 'Състояние на CFP'
+ fetch_vote_results: "Обнови резултатите от гласуването"
+ percent: "%"
+ rank: "Позиция"
+ events:
+ update:
+ event_successfully_updated: Събитието беше обновено успешно
+ show:
+ average_grade: Средна оценка
+ total_feedback_grades:
+ one: от %{total_grades} оценка
+ other: от %{total_grades} оценки
+ no_feedback_received: Все още няма обратна връзка
+ no_comments_received: Все още няма коментари
+ comments: Коментари
+ top_conflicts: Топ 5 конфликти
+ between_approved_events: "Между настоящото и одобрените събития"
+ no_approved_events: "Няма достатъчно одобрени събития"
+ rank: "Класиране"
+ review: "Преглед на %{event_type} „%{event_title}“"
+ conflicts: "Конфликти"
+ percent: "Процент"
+ speaker:
+ continue: Още...
+ other_event_propositions: Други предложени събития
+ the_participant_has_not_created_a_profile: Потребителят не си е създал профил в системата.
+ private_email: Личен e-mail
+ no_other_event_propositions: Няма други предложени събития
+ no_profile: 'Този потребител няма въведени профили в системата.'
+ profile_from: "профил от %{conference}"
+ create_profile: "Създай нов профил"
+ previous_event_propositions: 'Предишни предложения за събития'
+ contacts: "Информация за контакт"
+ conflicts:
+ conflicts: "Конфликти"
+ conflicts_of: "Конфликти на „%{event}“"
+ percent: "Процент"
+ hint_html: "Следващата таблица илюстрира какъв процент от посетителите, изявили интерес да присъстват на „%{event}“, биха желали да присъстват на всяко от посочените събития."
+ edit:
+ edit: "Редакция на %{event_type} „%{event_title}“"
+ index:
+ all: "Всички"
+ total: "%{current} от общо %{total}"
+ event:
+ create_profile: "Създай профил"
+ no_records:
+ no_records_found: 'Не бяха открити записи, които да отговарят на изискванията'
feedback:
index:
feedback: Обратна връзка
@@ -27,30 +116,6 @@ bg:
feedback:
anonymous: Анонимен
about: относно
- personal_profiles:
- show:
- talk_history: Събития с участието на лектора
- comments_from_the_audience: Коментари от аудиторията
- no_comments_received: Все още няма коментари.
- private_email: Личен e-mail
- events:
- update:
- event_successfully_updated: Събитието беше обновено успешно
- show:
- average_grade: Средна оценка
- total_feedback_grades:
- one: от %{total_grades} оценка
- other: от %{total_grades} оценки
- no_feedback_received: Все още няма обратна връзка
- no_comments_received: Все още няма коментари
- comments: Коментари
- top_conflicts: Топ 5 конфликти
- speaker:
- continue: Още...
- other_event_propositions: Други предложени събития
- the_participant_has_not_created_a_profile: Потребителят не си е създал профил в системата.
- private_email: Личен e-mail
- no_other_event_propositions: Няма други предложени събития
ratings:
poor: Слаб
average: Среден
diff --git a/config/locales/management.en.yml b/config/locales/management.en.yml
index 5009f1b..afd3f65 100644
--- a/config/locales/management.en.yml
+++ b/config/locales/management.en.yml
@@ -1,14 +1,65 @@
en:
- are_you_sure: Are you sure?
+ are_you_sure: "Are you sure?"
view: View
home: Home
+ more_about_user: ""
status:
undecided: Undecided
approved: Approved
rejected: Rejected
backup: Back-up
+ events:
+ metadata: ""
management:
+ volunteers:
+ index:
+ all: ""
+ profile: ""
+ total: ""
+ personal_profiles:
+ index:
+ no_profile: ''
+ total: ""
+ create:
+ successfully_created: ""
+ show:
+ contacts: ""
+ event_propositions: ""
+ talk_history: ""
+ comments_from_the_audience: ""
+ no_comments_received: ""
+ private_email: ""
+ conferences:
+ update_vote_data:
+ vote_data_successfully_updated: ""
+ error_during_vote_data_save: ""
+ error_during_connection_with_voting_endpoint: ""
+ vote_results:
+ back_to: ""
+ vote_results: ""
+ vote_data_never_updated: ""
+ voting_results: ""
+ vote_data_updated_at: ""
+ vote_ratio: ""
+ fetch_vote_results: ""
+ percent: ""
+ rank: ""
+ unranked: ""
+ export: ""
+ show:
+ full_vote_results: ""
+ vote_data_never_updated: ""
+ voting_results: ""
+ vote_data_updated_at: ""
+ vote_ratio: ""
+ summary: ''
+ cfp_status: ''
+ fetch_vote_results: ""
+ percent: ""
+ rank: ""
events:
+ update:
+ event_successfully_updated: ""
show:
average_grade: Average grade
total_feedback_grades:
@@ -17,3 +68,57 @@ en:
no_feedback_received: No feedback received (yet)
no_comments_received: No comments received (yet)
comments: Comments
+ top_conflicts: ""
+ between_approved_events: ""
+ no_approved_events: ""
+ rank: ""
+ review: ""
+ conflicts: ""
+ percent: ""
+ speaker:
+ continue: ""
+ other_event_propositions: ""
+ the_participant_has_not_created_a_profile: ""
+ private_email: ""
+ no_other_event_propositions: ""
+ no_profile: ''
+ profile_from: ""
+ create_profile: ""
+ previous_event_propositions: ''
+ contacts: ""
+ conflicts:
+ conflicts: ""
+ conflicts_of: ""
+ percent: ""
+ hint_html: ""
+ edit:
+ edit: ""
+ index:
+ all: ""
+ total: ""
+ event:
+ create_profile: ""
+ no_records:
+ no_records_found: ''
+ feedback:
+ index:
+ feedback: ""
+ overall_organisation: ""
+ comments: ""
+ average_grade: ""
+ total_feedback_grades:
+ one: ''
+ other: ''
+ no_feedback_received: ""
+ no_comments_received: ""
+ events: ""
+ shared:
+ feedback:
+ anonymous: ""
+ about: ""
+ ratings:
+ poor: ""
+ average: ""
+ good: ""
+ very_good: ""
+ excellent: ""
diff --git a/lib/initfest/views/public/volunteers/_form.slim b/lib/initfest/views/public/volunteers/_form.slim
index af6c94a..55194ea 100644
--- a/lib/initfest/views/public/volunteers/_form.slim
+++ b/lib/initfest/views/public/volunteers/_form.slim
@@ -5,12 +5,14 @@
.form-inputs
.input
- = image_tag @volunteer.picture.variant(resize_to_limit: [150, 150]) if @volunteer.picture.attached?
- = f.input :picture, as: :file, direct: true, wrapper: false
+ = image_tag(@volunteer.picture.variant(resize_to_limit: [150, 150])) if @volunteer.picture.attached?
+ = f.hidden_field :picture, value: @volunteer.picture.signed_id if @volunteer.picture.attached?
+ = f.input :picture, as: :file, required: false, direct: true, wrapper: false, input_html: {direct_upload: true}
+
= f.input :name, autofocus: true
= f.input :email
= f.input :phone, input_html: {value: @volunteer.phone.try(:phony_formatted, format: :international)}
- = f.association :volunteer_teams, as: :check_boxes, wrapper: :default, collection: current_conference.volunteer_teams
+ = f.association :volunteer_team, as: :radio_buttons, wrapper: :default, collection: current_conference.volunteer_teams
= f.input :language, as: :radio_buttons, collection: locale_collection, include_blank: false, wrapper: :default, checked: (@volunteer.language.presence || I18n.locale)
= f.input :tshirt_size, collection: Volunteer::TSHIRT_SIZES, as: :radio_buttons, wrapper: :default, checked: (@volunteer.tshirt_size.presence || :m)
= f.input :tshirt_cut, collection: Volunteer::TSHIRT_CUTS, as: :radio_buttons, wrapper: :default, checked: (@volunteer.tshirt_cut.presence || :unisex)
diff --git a/spec/support/feature_helpers.rb b/spec/support/feature_helpers.rb
index 281ca62..6d608e5 100644
--- a/spec/support/feature_helpers.rb
+++ b/spec/support/feature_helpers.rb
@@ -114,7 +114,7 @@ module FeatureHelpers
fill_in Volunteer.human_attribute_name(:name), with: "Volunteer Foo"
fill_in Volunteer.human_attribute_name(:email), with: "foo@example.com"
fill_in Volunteer.human_attribute_name(:phone), with: "+359666666"
- check VolunteerTeam.first.name
+ choose VolunteerTeam.first.name
click_on I18n.t("helpers.submit.volunteer.create")
end