diff --git a/Gemfile b/Gemfile index b2bea4e6b13109568039410b6e5863f48a4da884..e9a3e9d08c682fd80d70743c5bb69052af08320a 100644 --- a/Gemfile +++ b/Gemfile @@ -3,49 +3,55 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.7.5' -gem 'angularjs-rails' +# Infrastructure gem 'aws-sdk-s3' +gem 'bugsnag' +gem 'gitlab' +gem 'image_processing' +gem 'mini_magick' +gem 'octokit' +gem 'pg', '~> 1.1' +gem 'puma' + +# Back-end +gem 'cancancan' gem 'bootsnap', '>= 1.4.4', require: false +gem 'curation'#, path: '../../arnaudlevy/curation' +gem 'delayed_job_active_record' +gem 'delayed_job_web' +gem 'faceted_search' +gem 'has_scope', '~> 0.8.0' +gem 'hash_dot' +gem 'rails', '~> 6.1' +gem 'rails-i18n' +gem 'sanitize' +gem 'sib-api-v3-sdk' +gem 'two_factor_authentication', git: 'https://github.com/noesya/two_factor_authentication.git' +# gem 'two_factor_authentication', path: '../two_factor_authentication' + +# Front-end +gem 'angularjs-rails' gem 'bootstrap' gem 'bootstrap5-kaminari-views' gem 'breadcrumbs_on_rails' -gem 'bugsnag' -gem 'cancancan' gem 'cocoon', '~> 1.2' gem 'country_select' -gem 'curation'#, path: '../../arnaudlevy/curation' -gem 'delayed_job_active_record' -gem 'delayed_job_web' gem 'devise' gem 'devise-i18n' gem 'enum_help' gem 'front_matter_parser' gem 'gdpr' -gem 'gitlab' -gem 'has_scope', '~> 0.8.0' -gem 'hash_dot' -gem 'image_processing' gem 'jbuilder' gem 'jquery-rails' gem 'kamifusen'#, path: '../kamifusen' gem 'kaminari' -gem 'mini_magick' -gem 'octokit' -gem 'pg', '~> 1.1' -gem 'puma' -gem 'rails', '~> 6.1' -gem 'rails-i18n' -gem 'sanitize' gem 'sassc-rails' -gem 'sib-api-v3-sdk' gem 'simple_form' gem 'simple_form_bs5_file_input'#, path: '../simple_form_bs5_file_input' gem 'simple_form_password_with_hints'#, path: '../simple_form_password_with_hints' gem 'simple-navigation' gem 'summernote-rails', git: 'https://github.com/noesya/summernote-rails.git', branch: 'activestorage' # gem 'summernote-rails', path: '../summernote-rails' -gem 'two_factor_authentication', git: 'https://github.com/noesya/two_factor_authentication.git' -# gem 'two_factor_authentication', path: '../two_factor_authentication' group :development, :test do gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] diff --git a/Gemfile.lock b/Gemfile.lock index a1cbe2c603b75fd3c9aab9f6f94cb99720852fb2..7c67efbadce67ca42440a938fc10a2854c533788 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -172,6 +172,9 @@ GEM ethon (0.15.0) ffi (>= 1.15.0) execjs (2.8.1) + faceted_search (3.5.11) + font-awesome-sass + rails (>= 5.2.0, < 7) faraday (1.10.0) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -208,6 +211,8 @@ GEM ffi (1.15.5) figaro (1.2.0) thor (>= 0.14.0, < 2) + font-awesome-sass (6.1.1) + sassc (~> 2.0) front_matter_parser (1.0.1) gdpr (1.2.3) js_cookie_rails @@ -469,6 +474,7 @@ DEPENDENCIES devise devise-i18n enum_help + faceted_search figaro front_matter_parser gdpr diff --git a/app/controllers/extranet/persons_controller.rb b/app/controllers/extranet/persons_controller.rb index 172fc4473cb9dcea27c733b9b95c8d3c81b44b4a..977822b952ee1ffafc832be937586bb7e6a607f4 100644 --- a/app/controllers/extranet/persons_controller.rb +++ b/app/controllers/extranet/persons_controller.rb @@ -4,7 +4,15 @@ class Extranet::PersonsController < Extranet::ApplicationController through_association: :people def index - @people = current_extranet.about&.alumni || @people.alumni + alumni = current_extranet.about&.alumni || @people.alumni + @facets = University::Person::Alumnus::Facets.new params[:facets], { + model: alumni, + about: current_extranet.about + } + @people = @facets.results + .ordered + .page params[:page] + @count = @people.total_count breadcrumb end diff --git a/app/models/university/person.rb b/app/models/university/person.rb index 5020468f0063412416994c72a9cccfb68d6ac081..8f4533ab0afcce87ea7fddb14c1b341c1d73d8f4 100644 --- a/app/models/university/person.rb +++ b/app/models/university/person.rb @@ -15,6 +15,7 @@ # is_teacher :boolean # last_name :string # linkedin :string +# name :string # phone :string # slug :string # tenure :boolean default(FALSE) @@ -101,7 +102,7 @@ class University::Person < ApplicationRecord allow_blank: true, if: :will_save_change_to_email? - before_validation :sanitize_email + before_validation :sanitize_email, :prepare_name scope :ordered, -> { order(:last_name, :first_name) } scope :administration, -> { where(is_administration: true) } @@ -183,4 +184,8 @@ class University::Person < ApplicationRecord def sanitize_email self.email = self.email.to_s.downcase.strip end + + def prepare_name + self.name = to_s + end end diff --git a/app/models/university/person/administrator.rb b/app/models/university/person/administrator.rb index f5fda080ad57e31d179660161ba2567f1bf4b526..da5cbf55348ac85560812cea12230796c7972e9f 100644 --- a/app/models/university/person/administrator.rb +++ b/app/models/university/person/administrator.rb @@ -15,6 +15,7 @@ # is_teacher :boolean # last_name :string # linkedin :string +# name :string # phone :string # slug :string # tenure :boolean default(FALSE) diff --git a/app/models/university/person/alumnus.rb b/app/models/university/person/alumnus.rb index 06c70f24cd3fd7a02f2ecd63a47a35dd48ed660a..f9a0ae78d3dd880e672ec601c8f2cd3dc2d5d89c 100644 --- a/app/models/university/person/alumnus.rb +++ b/app/models/university/person/alumnus.rb @@ -15,6 +15,7 @@ # is_teacher :boolean # last_name :string # linkedin :string +# name :string # phone :string # slug :string # tenure :boolean default(FALSE) diff --git a/app/models/university/person/alumnus/facets.rb b/app/models/university/person/alumnus/facets.rb new file mode 100644 index 0000000000000000000000000000000000000000..5cc231c589b36592225e9da3205ecf377f1eb44e --- /dev/null +++ b/app/models/university/person/alumnus/facets.rb @@ -0,0 +1,18 @@ +class University::Person::Alumnus::Facets < FacetedSearch::Facets + def initialize(params, options) + super params + + @model = options[:model] + @about = options[:about] + + filter_with_text :name + + # TODO année de diplôme + + # TODO liste des formations (si about ≠formation) + # filter_with_list :program, { + # source: @about.programs, + # habtm: true + # } + end +end diff --git a/app/models/university/person/author.rb b/app/models/university/person/author.rb index 67dda6a6e289d65603bd5184ad345b06e76283db..95faae1d68252020f2db9ae06ae188e7efee5d46 100644 --- a/app/models/university/person/author.rb +++ b/app/models/university/person/author.rb @@ -15,6 +15,7 @@ # is_teacher :boolean # last_name :string # linkedin :string +# name :string # phone :string # slug :string # tenure :boolean default(FALSE) diff --git a/app/models/university/person/researcher.rb b/app/models/university/person/researcher.rb index 8fffe668f473cf48fa7237a2d68500b78c507ec1..079783999e11704b3ceec18c3a716706980ce35f 100644 --- a/app/models/university/person/researcher.rb +++ b/app/models/university/person/researcher.rb @@ -15,6 +15,7 @@ # is_teacher :boolean # last_name :string # linkedin :string +# name :string # phone :string # slug :string # tenure :boolean default(FALSE) diff --git a/app/models/university/person/teacher.rb b/app/models/university/person/teacher.rb index df1e88803e668e76624ea44562d02825c1e7ccad..4f424311600efbcb2b217b527852fed33d94eccf 100644 --- a/app/models/university/person/teacher.rb +++ b/app/models/university/person/teacher.rb @@ -15,6 +15,7 @@ # is_teacher :boolean # last_name :string # linkedin :string +# name :string # phone :string # slug :string # tenure :boolean default(FALSE) diff --git a/app/views/extranet/persons/_list.html.erb b/app/views/extranet/persons/_list.html.erb index 7922cd391743569fccc61271a420850d8171c7c8..064c370335f8f7eb06794db58c6ebe770b772ba0 100644 --- a/app/views/extranet/persons/_list.html.erb +++ b/app/views/extranet/persons/_list.html.erb @@ -2,19 +2,7 @@ <div class="row"> <% people_paged.each do |person| %> <div class="col-xxl-2 col-md-3"> - <article class="mb-4 position-relative"> - <% if person.picture.attached? %> - <%= kamifusen_tag person.picture, width: 400, class: 'img-fluid' %> - <% else %> - <%= image_tag 'extranet/avatar.png', width: 400, class: 'img-fluid' %> - <% end %> - <%= link_to person, class: 'stretched-link' do %> - <%= person.first_name %> - <b> - <%= person.last_name %> - </b> - <% end %> - </article> + <%= render 'extranet/persons/person', person: person %> </div> <% end %> </div> diff --git a/app/views/extranet/persons/_person.html.erb b/app/views/extranet/persons/_person.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..f8151bdac4973a6d5355874e2e713a73ded36928 --- /dev/null +++ b/app/views/extranet/persons/_person.html.erb @@ -0,0 +1,11 @@ +<article class="mb-4 position-relative"> + <% if person.picture.attached? %> + <%= kamifusen_tag person.picture, width: 400, class: 'img-fluid' %> + <% else %> + <%= image_tag 'extranet/avatar.png', width: 400, class: 'img-fluid' %> + <% end %> + <%= link_to person, class: 'stretched-link' do %> + <%= person.first_name %> + <b><%= person.last_name %></b> + <% end %> +</article> diff --git a/app/views/extranet/persons/index.html.erb b/app/views/extranet/persons/index.html.erb index f12ba91324d414923362034d30c58f500749eb0c..11b59fcc05a3b300839db66b7ab245544a15c998 100644 --- a/app/views/extranet/persons/index.html.erb +++ b/app/views/extranet/persons/index.html.erb @@ -7,11 +7,26 @@ </div> <div class="col-md-3 text-end"> <p> - <%= @people.count %> - <%= University::Person::Alumnus.model_name.human(count: @people.count).downcase %> + <%= @count %> + <%= University::Person::Alumnus.model_name.human(count: @count).downcase %> </p> </div> </div> </header> -<%= render 'extranet/persons/list', people: @people %> +<div class="row"> + <div class="col-lg-3"> + <%= render 'faceted_search/facets', facets: @facets %> + </div> + <div class="offset-lg-1 col-lg-8"> + <div class="row"> + <% @people.each do |person| %> + <div class="col-xxl-3 col-md-4 col-sm-6"> + <%= render 'extranet/persons/person', person: person %> + </div> + <% end %> + </div> + <%= paginate @people, theme: 'bootstrap-5' %> + + </div> +</div> diff --git a/db/migrate/20220425152944_add_name_to_university_persons.rb b/db/migrate/20220425152944_add_name_to_university_persons.rb new file mode 100644 index 0000000000000000000000000000000000000000..dbe49902d68fc647fa56e3e8243f834f6b5e7917 --- /dev/null +++ b/db/migrate/20220425152944_add_name_to_university_persons.rb @@ -0,0 +1,5 @@ +class AddNameToUniversityPersons < ActiveRecord::Migration[6.1] + def change + add_column :university_people, :name, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 9344a9d833e29ce473f3c4cb2a46179b8a9ef262..604f8b5a6f49203c067224c55c7686ad8f322dfd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_04_21_093107) do +ActiveRecord::Schema.define(version: 2022_04_25_152944) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -488,6 +488,23 @@ ActiveRecord::Schema.define(version: 2022_04_21_093107) do t.index ["university_id"], name: "index_education_schools_on_university_id" end + create_table "external_organizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.string "title" + t.text "description" + t.string "address" + t.string "zipcode" + t.string "city" + t.string "country" + t.string "website" + t.string "phone" + t.string "mail" + t.boolean "active" + t.string "sirene" + t.integer "kind" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + create_table "languages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "name" t.string "iso_code" @@ -671,6 +688,7 @@ ActiveRecord::Schema.define(version: 2022_04_21_093107) do t.string "linkedin" t.boolean "is_alumnus", default: false t.text "description_short" + t.string "name" t.index ["university_id"], name: "index_university_people_on_university_id" t.index ["user_id"], name: "index_university_people_on_user_id" end