diff --git a/app/controllers/teachers_controller.rb b/app/controllers/teachers_controller.rb index fd167eab..d64b2430 100644 --- a/app/controllers/teachers_controller.rb +++ b/app/controllers/teachers_controller.rb @@ -215,7 +215,7 @@ def teacher_params teacher_attributes << [:personal_email, :application_status, :request_reason, :skip_email] end - params.require(:teacher).permit(*teacher_attributes) + params.require(:teacher).permit(*teacher_attributes, languages: []) end def school_params diff --git a/app/javascript/packs/schools.js b/app/javascript/packs/schools.js index 58b08771..212f58bf 100644 --- a/app/javascript/packs/schools.js +++ b/app/javascript/packs/schools.js @@ -28,7 +28,7 @@ let create_school = function (input, callback) { $("#school_form").show(); toggle_required(['name', 'city', 'state', 'website'], true); $(".btn-primary").show(); - let oringial_school_id = $('#teacher_school_id').val(); + let original_school_id = $('#teacher_school_id').val(); var reset_button = $("#close_button"); var name_input = $("#school_name"); // Unset the existing saved school id. @@ -38,7 +38,7 @@ let create_school = function (input, callback) { if (selectizeCallback != null) { selectizeCallback(); selectizeCallback = null; - $('#teacher_school_id').val(oringial_school_id); + $('#teacher_school_id').val(original_school_id); } toggle_required(['name', 'city', 'state', 'website'], true); $("#school_form").hide(); diff --git a/app/models/teacher.rb b/app/models/teacher.rb index 76fa7b34..8a023449 100644 --- a/app/models/teacher.rb +++ b/app/models/teacher.rb @@ -11,6 +11,7 @@ # email :string # first_name :string # ip_history :inet default([]), is an Array +# languages :string default(["\"English\""]), is an Array # last_name :string # last_session_at :datetime # more_info :string @@ -37,10 +38,14 @@ # fk_rails_... (school_id => schools.id) # class Teacher < ApplicationRecord + WORLD_LANGUAGES = [ "Afrikaans", "Albanian", "Arabic", "Armenian", "Basque", "Bengali", "Bulgarian", "Catalan", "Cambodian", "Chinese (Mandarin)", "Croatian", "Czech", "Danish", "Dutch", "English", "Estonian", "Fiji", "Finnish", "French", "Georgian", "German", "Greek", "Gujarati", "Hebrew", "Hindi", "Hungarian", "Icelandic", "Indonesian", "Irish", "Italian", "Japanese", "Javanese", "Korean", "Latin", "Latvian", "Lithuanian", "Macedonian", "Malay", "Malayalam", "Maltese", "Maori", "Marathi", "Mongolian", "Nepali", "Norwegian", "Persian", "Polish", "Portuguese", "Punjabi", "Quechua", "Romanian", "Russian", "Samoan", "Serbian", "Slovak", "Slovenian", "Spanish", "Swahili", "Swedish ", "Tamil", "Tatar", "Telugu", "Thai", "Tibetan", "Tonga", "Turkish", "Ukrainian", "Urdu", "Uzbek", "Vietnamese", "Welsh", "Xhosa" ].freeze + validates :first_name, :last_name, :email, :status, presence: true validates :email, uniqueness: true validates :personal_email, uniqueness: true, if: -> { personal_email.present? } validate :ensure_unique_personal_email, if: -> { email_changed? || personal_email_changed? } + validate :valid_languages + before_validation :sort_and_clean_languages enum application_status: { validated: "Validated", @@ -163,6 +168,24 @@ def self.education_level_options Teacher.education_levels.map { |sym, val| [sym.to_s.titlecase, val] } end + def self.language_options + WORLD_LANGUAGES + end + + def display_languages + languages.join(", ") + end + + def valid_languages + !languages.empty? && languages.all? { |value| WORLD_LANGUAGES.include?(value) } + end + + def sort_and_clean_languages + # Due to an identified bug in the Selectize plugin, an empty string is occasionally appended to the 'languages' list. + # To ensure data integrity, the following code removes any occurrences of empty strings from the list. + languages.sort!.reject!(&:blank?) + end + def display_education_level if education_level_before_type_cast.to_i == -1 "?" diff --git a/app/views/teachers/_form.html.erb b/app/views/teachers/_form.html.erb index 8f16299c..20903a9a 100644 --- a/app/views/teachers/_form.html.erb +++ b/app/views/teachers/_form.html.erb @@ -117,6 +117,23 @@ status ONLY IF the person viewing this page is an admin. %> +
+
+ <%= f.label :languages, "What language(s) are spoken in the classroom?", + class: "label-required" %> + <%= f.select( + :languages, + options_for_select(Teacher.language_options, @teacher.languages), + {}, + multiple: true, + include_blank: "Select an option", + class: 'selectize', required: true +) %> +
+
+ + +
<%= f.label :more_info, "More Information", class: "label-required" %> @@ -143,6 +160,12 @@ status ONLY IF the person viewing this page is an admin. %>