From 54ecf0eea9321367e8ce83470f073cb19ccaab71 Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Sun, 20 Mar 2022 18:31:45 +0100 Subject: [PATCH] working --- app/assets/images/extranet/avatar.png | Bin 0 -> 13360 bytes .../stylesheets/application/layout.sass | 11 ++++++ app/controllers/application_controller.rb | 1 + .../extranet/academic_years_controller.rb | 12 +++++- .../extranet/application_controller.rb | 6 +++ .../extranet/cohorts_controller.rb | 12 +++++- .../extranet/organizations_controller.rb | 12 +++++- .../extranet/persons_controller.rb | 12 +++++- app/models/university/person.rb | 4 +- .../university/person/alumnus/import.rb | 13 ++++++- .../extranet/academic_years/index.html.erb | 2 + .../extranet/academic_years/show.html.erb | 2 + app/views/extranet/cohorts/index.html.erb | 4 +- app/views/extranet/cohorts/show.html.erb | 2 + .../extranet/organizations/index.html.erb | 2 + .../extranet/organizations/show.html.erb | 2 + app/views/extranet/persons/_list.html.erb | 36 ++++++------------ app/views/extranet/persons/index.html.erb | 2 + app/views/extranet/persons/show.html.erb | 13 +++++++ app/views/layouts/application.html.erb | 1 - 20 files changed, 115 insertions(+), 34 deletions(-) create mode 100644 app/assets/images/extranet/avatar.png create mode 100644 app/controllers/extranet/application_controller.rb diff --git a/app/assets/images/extranet/avatar.png b/app/assets/images/extranet/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..34b4e0cdea8b2ce18e1fb644989edb762cc0dd63 GIT binary patch literal 13360 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 HKH&cVwQ*$3 literal 0 HcmV?d00001 diff --git a/app/assets/stylesheets/application/layout.sass b/app/assets/stylesheets/application/layout.sass index a76eb635e..2431819fb 100644 --- a/app/assets/stylesheets/application/layout.sass +++ b/app/assets/stylesheets/application/layout.sass @@ -9,3 +9,14 @@ footer padding: .95rem &-danger color: #82322F + +h1 + border-bottom: 1px solid + border-top: 1px solid + height: 100% + min-height: 160px + padding-top: 50px + +.breadcrumb + font-size: 14px + padding-bottom: 50px diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 325fa702c..d3b4ac764 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,6 +2,7 @@ class ApplicationController < ActionController::Base include WithErrors include WithLocale include WithDomain + before_action :authenticate_user! def breadcrumb diff --git a/app/controllers/extranet/academic_years_controller.rb b/app/controllers/extranet/academic_years_controller.rb index c1d759ee0..a8439fd6e 100644 --- a/app/controllers/extranet/academic_years_controller.rb +++ b/app/controllers/extranet/academic_years_controller.rb @@ -1,12 +1,22 @@ -class Extranet::AcademicYearsController < ApplicationController +class Extranet::AcademicYearsController < Extranet::ApplicationController load_and_authorize_resource class: Education::AcademicYear, through: :current_university, through_association: :academic_years def index @academic_years = @academic_years.ordered.page(params[:page]) + breadcrumb end def show + breadcrumb + end + + protected + + def breadcrumb + super + add_breadcrumb Education::AcademicYear.model_name.human(count: 2), education_academic_years_path + add_breadcrumb @academic_year if @academic_year end end diff --git a/app/controllers/extranet/application_controller.rb b/app/controllers/extranet/application_controller.rb new file mode 100644 index 000000000..6ea0f75a9 --- /dev/null +++ b/app/controllers/extranet/application_controller.rb @@ -0,0 +1,6 @@ +class Extranet::ApplicationController < ApplicationController + + def breadcrumb + add_breadcrumb t('home'), root_path + end +end diff --git a/app/controllers/extranet/cohorts_controller.rb b/app/controllers/extranet/cohorts_controller.rb index e5eaf425d..d6935d45b 100644 --- a/app/controllers/extranet/cohorts_controller.rb +++ b/app/controllers/extranet/cohorts_controller.rb @@ -1,12 +1,22 @@ -class Extranet::CohortsController < ApplicationController +class Extranet::CohortsController < Extranet::ApplicationController load_and_authorize_resource class: Education::Cohort, through: :current_university, through_association: :education_cohorts def index @cohorts = @cohorts.ordered.page(params[:page]) + breadcrumb end def show + breadcrumb + end + + protected + + def breadcrumb + super + add_breadcrumb Education::Cohort.model_name.human(count: 2), education_cohorts_path + add_breadcrumb @cohort if @cohort end end diff --git a/app/controllers/extranet/organizations_controller.rb b/app/controllers/extranet/organizations_controller.rb index 33633e234..d91329fb8 100644 --- a/app/controllers/extranet/organizations_controller.rb +++ b/app/controllers/extranet/organizations_controller.rb @@ -1,12 +1,22 @@ -class Extranet::OrganizationsController < ApplicationController +class Extranet::OrganizationsController < Extranet::ApplicationController load_and_authorize_resource class: University::Organization, through: :current_university, through_association: :organizations def index @organizations = @organizations.ordered.page(params[:page]) + breadcrumb end def show + breadcrumb + end + + protected + + def breadcrumb + super + add_breadcrumb University::Organization.model_name.human(count: 2), university_organizations_path + add_breadcrumb @organization if @organization end end diff --git a/app/controllers/extranet/persons_controller.rb b/app/controllers/extranet/persons_controller.rb index 24b55e34c..04043a9c9 100644 --- a/app/controllers/extranet/persons_controller.rb +++ b/app/controllers/extranet/persons_controller.rb @@ -1,11 +1,21 @@ -class Extranet::PersonsController < ApplicationController +class Extranet::PersonsController < Extranet::ApplicationController load_and_authorize_resource class: University::Person::Alumnus, through: :current_university, through_association: :people def index + breadcrumb end def show + breadcrumb + end + + protected + + def breadcrumb + super + add_breadcrumb University::Person::Alumnus.model_name.human(count: 2), university_persons_path + add_breadcrumb @person if @person end end diff --git a/app/models/university/person.rb b/app/models/university/person.rb index 6c58a15b9..457f07b48 100644 --- a/app/models/university/person.rb +++ b/app/models/university/person.rb @@ -101,10 +101,10 @@ class University::Person < ApplicationRecord before_validation :sanitize_email scope :ordered, -> { order(:last_name, :first_name) } - scope :administration, -> { where(is_administration: true) } + scope :administration, -> { where(is_administration: true) } scope :teachers, -> { where(is_teacher: true) } scope :researchers, -> { where(is_researcher: true) } - scope :alumni, -> { where(is_alumnus: true) } + scope :alumni, -> { where(is_alumnus: true) } def to_s "#{first_name} #{last_name}" diff --git a/app/models/university/person/alumnus/import.rb b/app/models/university/person/alumnus/import.rb index 2f8e7bd17..bf9b5c066 100644 --- a/app/models/university/person/alumnus/import.rb +++ b/app/models/university/person/alumnus/import.rb @@ -49,7 +49,7 @@ class University::Person::Alumnus::Import < ApplicationRecord # status # socialtwitter # sociallinkedin - row['program'] = '23279cab-8bc1-4c75-bcd8-1fccaa03ad55' #TMP local fix + # row['program'] = '23279cab-8bc1-4c75-bcd8-1fccaa03ad55' #TMP local fix program = university.education_programs .find_by(id: row['program']) next if program.nil? @@ -79,9 +79,20 @@ class University::Person::Alumnus::Import < ApplicationRecord person.is_alumnus = true person.url = url person.slug = person.to_s.parameterize.dasherize + person.twitter = row['socialtwitter'] + person.linkedin = row['sociallinkedin'] byebug unless person.valid? person.save cohort.people << person unless person.in?(cohort.people) + photo = row['photo'].to_s + if photo.end_with?('.jpg') || photo.end_with?('.png') + filename = File.basename photo + begin + file = URI.open photo + person.picture.attach(io: file, filename: 'some-image.jpg') + rescue + end + end end end diff --git a/app/views/extranet/academic_years/index.html.erb b/app/views/extranet/academic_years/index.html.erb index b8e0b2fef..88d5b1970 100644 --- a/app/views/extranet/academic_years/index.html.erb +++ b/app/views/extranet/academic_years/index.html.erb @@ -1,5 +1,7 @@ <% content_for :title, Education::AcademicYear.model_name.human(count: 2) %> +<h1><%= Education::AcademicYear.model_name.human(count: 2) %></h1> + <table class="<%= table_classes %>"> <thead> <tr> diff --git a/app/views/extranet/academic_years/show.html.erb b/app/views/extranet/academic_years/show.html.erb index 63eacbade..48f1cdc0e 100644 --- a/app/views/extranet/academic_years/show.html.erb +++ b/app/views/extranet/academic_years/show.html.erb @@ -1,5 +1,7 @@ <% content_for :title, @academic_year %> +<h1><%= @academic_year %></h1> + <% @academic_year.cohorts.each do |cohort| %> <%= link_to cohort, cohort %> <% end %> diff --git a/app/views/extranet/cohorts/index.html.erb b/app/views/extranet/cohorts/index.html.erb index 5341018f4..ab5e66756 100644 --- a/app/views/extranet/cohorts/index.html.erb +++ b/app/views/extranet/cohorts/index.html.erb @@ -1,5 +1,7 @@ <% content_for :title, Education::Cohort.model_name.human(count: 2) %> +<h1><%= Education::Cohort.model_name.human(count: 2) %></h1> + <table class="<%= table_classes %>"> <thead> <tr> @@ -12,7 +14,7 @@ <% @cohorts.each do |cohort| %> <tr> <td><%= link_to cohort, cohort %></td> - <td></td> + <td><%= cohort.people.count %></td> </tr> <% end %> </tbody> diff --git a/app/views/extranet/cohorts/show.html.erb b/app/views/extranet/cohorts/show.html.erb index 153a03e9a..87e03ef91 100644 --- a/app/views/extranet/cohorts/show.html.erb +++ b/app/views/extranet/cohorts/show.html.erb @@ -1,3 +1,5 @@ <% content_for :title, @cohort %> +<h1><%= @cohort %></h1> + <%= render 'extranet/persons/list', people: @cohort.people %> diff --git a/app/views/extranet/organizations/index.html.erb b/app/views/extranet/organizations/index.html.erb index e8810d4f6..8e991ba36 100644 --- a/app/views/extranet/organizations/index.html.erb +++ b/app/views/extranet/organizations/index.html.erb @@ -1,5 +1,7 @@ <% content_for :title, University::Organization.model_name.human(count: 2) %> +<h1><%= University::Organization.model_name.human(count: 2) %></h1> + <table class="<%= table_classes %>"> <thead> <tr> diff --git a/app/views/extranet/organizations/show.html.erb b/app/views/extranet/organizations/show.html.erb index 1a8858a81..39b24130f 100644 --- a/app/views/extranet/organizations/show.html.erb +++ b/app/views/extranet/organizations/show.html.erb @@ -1 +1,3 @@ <% content_for :title, @organization %> + +<h1><%= @organization %></h1> diff --git a/app/views/extranet/persons/_list.html.erb b/app/views/extranet/persons/_list.html.erb index 8904fd0bf..d642ff08d 100644 --- a/app/views/extranet/persons/_list.html.erb +++ b/app/views/extranet/persons/_list.html.erb @@ -6,34 +6,20 @@ people_paged = people.ordered.page(params[:page]).per(60) <div class="row"> <% people_paged.each do |person| %> <div class="col-xxl-2 col-md-3"> - <article class="card mb-4"> - <div class="card-body"> - <%= link_to person, class: 'stretched-link' do %> - <span class="small"><%= person.first_name %></span><br> + <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 %> - <% end %> - </div> + </b> + <% end %> </article> </div> <% end %> </div> - -<table class="<%= table_classes %>"> - <thead> - <tr> - <th>Name</th> - <th></th> - </tr> - </thead> - - <tbody> - <% people_paged.each do |person| %> - <tr> - <td><%= link_to person, person %></td> - <td></td> - </tr> - <% end %> - </tbody> -</table> - <%= paginate people_paged, theme: 'bootstrap-5' %> diff --git a/app/views/extranet/persons/index.html.erb b/app/views/extranet/persons/index.html.erb index dfd579b63..b854f15b7 100644 --- a/app/views/extranet/persons/index.html.erb +++ b/app/views/extranet/persons/index.html.erb @@ -1,3 +1,5 @@ <% content_for :title, University::Person::Alumnus.model_name.human(count: 2) %> +<h1><%= University::Person::Alumnus.model_name.human(count: 2) %></h1> + <%= render 'extranet/persons/list', people: @people %> diff --git a/app/views/extranet/persons/show.html.erb b/app/views/extranet/persons/show.html.erb index c7de7737c..034873013 100644 --- a/app/views/extranet/persons/show.html.erb +++ b/app/views/extranet/persons/show.html.erb @@ -1 +1,14 @@ <% content_for :title, @person %> + +<div class="row"> + <div class="col-md-9"> + <h1><%= @person %></h1> + </div> + <div class="col-md-3"> + <% 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 %> + </div> +</div> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 2fb378501..d650055e7 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -13,7 +13,6 @@ <body class="<%= body_classes %>"> <%= render 'nav' %> <main class="container"> - <h1><%= yield :title %></h1> <%= render_breadcrumbs builder: Appstack::BreadcrumbsOnRailsBuilder %> <%= yield %> </main> -- GitLab