From fd8cb093e0ad4f4a96aec38f99b6d3d0a0544f05 Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Wed, 27 Apr 2022 16:46:13 +0200 Subject: [PATCH] facets --- app/controllers/extranet/cohorts_controller.rb | 10 +++++++++- app/models/education/academic_year.rb | 5 ++++- app/models/education/cohort.rb | 15 ++++++++++++--- app/models/education/cohort/facets.rb | 18 ++++++++++++++++++ app/models/education/program.rb | 6 ++++-- app/models/education/school.rb | 8 +++++--- app/views/extranet/cohorts/index.html.erb | 5 +++++ 7 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 app/models/education/cohort/facets.rb diff --git a/app/controllers/extranet/cohorts_controller.rb b/app/controllers/extranet/cohorts_controller.rb index e25c966f2..62ee6a560 100644 --- a/app/controllers/extranet/cohorts_controller.rb +++ b/app/controllers/extranet/cohorts_controller.rb @@ -4,7 +4,15 @@ class Extranet::CohortsController < Extranet::ApplicationController through_association: :education_cohorts def index - @cohorts = current_extranet.about&.cohorts || @cohorts + @facets = Education::Cohort::Facets.new params[:facets], { + model: about.cohorts, + about: about + } + @cohorts = @facets.results + .ordered + .page(params[:page]) + .per(60) + @count = @cohorts.total_count breadcrumb end diff --git a/app/models/education/academic_year.rb b/app/models/education/academic_year.rb index ac8936997..1002b03ca 100644 --- a/app/models/education/academic_year.rb +++ b/app/models/education/academic_year.rb @@ -19,7 +19,10 @@ class Education::AcademicYear < ApplicationRecord include WithUniversity - has_many :cohorts, class_name: 'Education::Cohort' + has_many :education_cohorts, + class_name: 'Education::Cohort' + has_many :cohorts, + class_name: 'Education::Cohort' # Dénormalisation des alumni pour le faceted search has_and_belongs_to_many :university_people, diff --git a/app/models/education/cohort.rb b/app/models/education/cohort.rb index 1d1aceba4..b513e77a8 100644 --- a/app/models/education/cohort.rb +++ b/app/models/education/cohort.rb @@ -24,14 +24,23 @@ # class Education::Cohort < ApplicationRecord include WithUniversity - belongs_to :program, class_name: 'Education::Program' - belongs_to :academic_year, class_name: 'Education::AcademicYear' + + belongs_to :program, + class_name: 'Education::Program' + alias_attribute :education_program, :program + + belongs_to :academic_year, + class_name: 'Education::AcademicYear' + alias_attribute :education_academic_year, :academic_year + has_and_belongs_to_many :people, class_name: 'University::Person', foreign_key: 'education_cohort_id', association_foreign_key: 'university_person_id' - scope :ordered, -> { includes(:academic_year).order('education_academic_years.year DESC') } + scope :ordered, -> { + includes(:academic_year).order('education_academic_years.year DESC') + } def to_s "#{program} #{academic_year} #{name}" diff --git a/app/models/education/cohort/facets.rb b/app/models/education/cohort/facets.rb new file mode 100644 index 000000000..90298cd6d --- /dev/null +++ b/app/models/education/cohort/facets.rb @@ -0,0 +1,18 @@ +class Education::Cohort::Facets < FacetedSearch::Facets + def initialize(params, options) + super params + + @model = options[:model] + @about = options[:about] + + filter_with_list :academic_years, { + source: @about.academic_years.ordered, + title: Education::AcademicYear.model_name.human(count: 2) + } + + filter_with_checkboxes :programs, { + source: @about.programs.ordered, + title: Education::Program.model_name.human(count: 2) + } unless @about.is_a? Education::Program + end +end diff --git a/app/models/education/program.rb b/app/models/education/program.rb index 0f61d2ac8..e14169b09 100644 --- a/app/models/education/program.rb +++ b/app/models/education/program.rb @@ -113,6 +113,8 @@ class Education::Program < ApplicationRecord has_many :cohorts, class_name: 'Education::Cohort' + has_many :education_cohorts, + class_name: 'Education::Cohort' has_many :alumni, through: :cohorts, @@ -123,7 +125,7 @@ class Education::Program < ApplicationRecord class_name: 'University::Person::Experience', through: :alumni, source: :experiences - alias_attribute :experiences, :alumni_experiences + alias_attribute :experiences, :alumni_experiences has_many :alumni_organizations, -> { distinct }, @@ -136,7 +138,7 @@ class Education::Program < ApplicationRecord class_name: 'Education::AcademicYear', through: :cohorts, source: :academic_year - alias_attribute :academic_years, :education_academic_years + alias_attribute :academic_years, :education_academic_years # Dénormalisation des alumni pour le faceted search has_and_belongs_to_many :university_people, diff --git a/app/models/education/school.rb b/app/models/education/school.rb index bc0b0684c..b7dc8fbd8 100644 --- a/app/models/education/school.rb +++ b/app/models/education/school.rb @@ -38,7 +38,9 @@ class Education::School < ApplicationRecord join_table: 'education_programs_schools', foreign_key: 'education_school_id', association_foreign_key: 'education_program_id' + belongs_to :university + has_many :websites, class_name: 'Communication::Website', as: :about, @@ -74,7 +76,7 @@ class Education::School < ApplicationRecord class_name: 'University::Person::Experience', through: :alumni, source: :experiences - alias_attribute :experiences, :alumni_experiences + alias_attribute :experiences, :alumni_experiences has_many :alumni_organizations, -> { distinct }, @@ -86,13 +88,13 @@ class Education::School < ApplicationRecord -> { distinct }, class_name: 'Education::AcademicYear', through: :programs - alias_attribute :academic_years, :education_academic_years + alias_attribute :academic_years, :education_academic_years has_many :education_cohorts, -> { distinct }, class_name: 'Education::Cohort', through: :programs, source: :cohorts - alias_attribute :cohorts, :education_cohorts + alias_attribute :cohorts, :education_cohorts validates :name, :address, :city, :zipcode, :country, presence: true diff --git a/app/views/extranet/cohorts/index.html.erb b/app/views/extranet/cohorts/index.html.erb index eed8f4024..75dc9e5ed 100644 --- a/app/views/extranet/cohorts/index.html.erb +++ b/app/views/extranet/cohorts/index.html.erb @@ -2,10 +2,15 @@ <header class="mb-5"> <h1><%= Education::Cohort.model_name.human(count: 2) %></h1> + <p> + <%= @count %> + <%= Education::Cohort.model_name.human(count: @count).downcase %> + </p> </header> <div class="row"> <div class="col-md-3"> + <%= render 'faceted_search/facets', facets: @facets %> <div class="facets"> <div class="mb-4"> <%= render 'extranet/application/facets/years' %> -- GitLab