diff --git a/app/controllers/extranet/academic_years_controller.rb b/app/controllers/extranet/academic_years_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..c1d759ee055dc4e68b4db9a745c47382829147d7 --- /dev/null +++ b/app/controllers/extranet/academic_years_controller.rb @@ -0,0 +1,12 @@ +class Extranet::AcademicYearsController < 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]) + end + + def show + end +end diff --git a/app/controllers/university/organizations_controller.rb b/app/controllers/extranet/organizations_controller.rb similarity index 81% rename from app/controllers/university/organizations_controller.rb rename to app/controllers/extranet/organizations_controller.rb index f3340418978c0486416128b57e3e6faf0dcdd96e..33633e234f5e3d55e9d239ae0d44aae1eb4a33e3 100644 --- a/app/controllers/university/organizations_controller.rb +++ b/app/controllers/extranet/organizations_controller.rb @@ -1,4 +1,4 @@ -class University::OrganizationsController < ApplicationController +class Extranet::OrganizationsController < ApplicationController load_and_authorize_resource class: University::Organization, through: :current_university, through_association: :organizations diff --git a/app/models/administration/qualiopi/indicator.rb b/app/models/administration/qualiopi/indicator.rb index 300286f22c2b5b35c92568f4cde1b0c4b2bd6691..6e06a027333a734dbc6b5b039d18b1b21626969a 100644 --- a/app/models/administration/qualiopi/indicator.rb +++ b/app/models/administration/qualiopi/indicator.rb @@ -20,7 +20,7 @@ # # Foreign Keys # -# fk_rails_31f1a0a2c9 (criterion_id => administration_qualiopi_criterions.id) +# fk_rails_eed87f7acf (criterion_id => administration_qualiopi_criterions.id) # class Administration::Qualiopi::Indicator < ApplicationRecord include Sanitizable diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb index 5d96aa34c6bb028927cea9148eaa5f09b873f644..f235303488e854edb39273990f23fab9251a1208 100644 --- a/app/models/communication/website.rb +++ b/app/models/communication/website.rb @@ -22,7 +22,7 @@ # # Foreign Keys # -# fk_rails_94b0abd85b (university_id => universities.id) +# fk_rails_bb6a496c08 (university_id => universities.id) # class Communication::Website < ApplicationRecord include WithUniversity diff --git a/app/models/communication/website/configs/base_url.rb b/app/models/communication/website/configs/base_url.rb index a712220143d13d8a738a26397046788eaa4154fc..a2510c716f8662e46e01f66222730e6c680e3505 100644 --- a/app/models/communication/website/configs/base_url.rb +++ b/app/models/communication/website/configs/base_url.rb @@ -22,7 +22,7 @@ # # Foreign Keys # -# fk_rails_94b0abd85b (university_id => universities.id) +# fk_rails_bb6a496c08 (university_id => universities.id) # class Communication::Website::Configs::BaseUrl < Communication::Website diff --git a/app/models/communication/website/configs/permalinks.rb b/app/models/communication/website/configs/permalinks.rb index 387417dae992281b04074f4b723cace9a2c19b2a..04a9cc323c8d694bff15d5cfa331c933edde9025 100644 --- a/app/models/communication/website/configs/permalinks.rb +++ b/app/models/communication/website/configs/permalinks.rb @@ -22,7 +22,7 @@ # # Foreign Keys # -# fk_rails_94b0abd85b (university_id => universities.id) +# fk_rails_bb6a496c08 (university_id => universities.id) # class Communication::Website::Configs::Permalinks < Communication::Website diff --git a/app/models/education/academic_year.rb b/app/models/education/academic_year.rb new file mode 100644 index 0000000000000000000000000000000000000000..efbe632f93af0eabcf3ade9506b4addb7b16c988 --- /dev/null +++ b/app/models/education/academic_year.rb @@ -0,0 +1,27 @@ +# == Schema Information +# +# Table name: education_academic_years +# +# id :uuid not null, primary key +# year :integer +# created_at :datetime not null +# updated_at :datetime not null +# university_id :uuid not null, indexed +# +# Indexes +# +# index_education_academic_years_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_7d376afe35 (university_id => universities.id) +# +class Education::AcademicYear < ApplicationRecord + include WithUniversity + + scope :ordered, -> { order(year: :desc) } + + def to_s + "#{year}" + end +end diff --git a/app/models/education/program.rb b/app/models/education/program.rb index a88582d9d6912e44045e221613087f2b5dc28326..360d5ba5f7ddf67fe2e8f92e2b5115037db5dd4e 100644 --- a/app/models/education/program.rb +++ b/app/models/education/program.rb @@ -39,7 +39,7 @@ # # Foreign Keys # -# fk_rails_6e16107511 (university_id => universities.id) +# fk_rails_08b351087c (university_id => universities.id) # fk_rails_ec1f16f607 (parent_id => education_programs.id) # class Education::Program < ApplicationRecord diff --git a/app/models/university/person/alumnus.rb b/app/models/university/person/alumnus.rb new file mode 100644 index 0000000000000000000000000000000000000000..242788896e2aa638bb149c5f111697c9dce165c4 --- /dev/null +++ b/app/models/university/person/alumnus.rb @@ -0,0 +1,48 @@ +# == Schema Information +# +# Table name: university_people +# +# id :uuid not null, primary key +# biography :text +# description :text +# email :string +# first_name :string +# habilitation :boolean default(FALSE) +# is_administration :boolean +# is_researcher :boolean +# is_teacher :boolean +# last_name :string +# linkedin :string +# phone :string +# slug :string +# tenure :boolean default(FALSE) +# twitter :string +# url :string +# created_at :datetime not null +# updated_at :datetime not null +# university_id :uuid not null, indexed +# user_id :uuid indexed +# +# Indexes +# +# index_university_people_on_university_id (university_id) +# index_university_people_on_user_id (user_id) +# +# Foreign Keys +# +# fk_rails_b47a769440 (user_id => users.id) +# fk_rails_da35e70d61 (university_id => universities.id) +# +class University::Person::Alumnus < University::Person + def self.polymorphic_name + 'University::Person::Alumnus' + end + + def git_path(website) + # TODO + end + + def for_website?(website) + # TODO + end +end diff --git a/app/models/university/with_education.rb b/app/models/university/with_education.rb index 5acddc90f4055bb204487797d97d6994c82a189e..c7448f3d3f092ef36ae9490130ca656f069663cf 100644 --- a/app/models/university/with_education.rb +++ b/app/models/university/with_education.rb @@ -4,5 +4,6 @@ module University::WithEducation included do has_many :education_programs, class_name: 'Education::Program', dependent: :destroy has_many :education_schools, class_name: 'Education::School', dependent: :destroy + has_many :academic_years, class_name: 'Education::AcademicYear', dependent: :destroy end end diff --git a/app/views/extranet/academic_years/index.html.erb b/app/views/extranet/academic_years/index.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..6bb47711d1cc0040225ab2eddda52fe7784401f6 --- /dev/null +++ b/app/views/extranet/academic_years/index.html.erb @@ -0,0 +1,19 @@ +<% content_for :title, Education::AcademicYear.model_name.human(count: 2) %> + +<table class="<%= table_classes %>"> + <thead> + <tr> + <th>Year</th> + <th></th> + </tr> + </thead> + + <tbody> + <% @academic_years.each do |year| %> + <tr> + <td><%= year.year %></td> + <td></td> + </tr> + <% end %> + </tbody> +</table> diff --git a/app/views/extranet/academic_years/show.html.erb b/app/views/extranet/academic_years/show.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..4c9b91dbfb52a216446f1c04b1897bfe42c9fd1c --- /dev/null +++ b/app/views/extranet/academic_years/show.html.erb @@ -0,0 +1,14 @@ +<p id="notice"><%= notice %></p> + +<p> + <strong>University:</strong> + <%= @education_academic_year.university_id %> +</p> + +<p> + <strong>Year:</strong> + <%= @education_academic_year.year %> +</p> + +<%= link_to 'Edit', edit_education_academic_year_path(@education_academic_year) %> | +<%= link_to 'Back', education_academic_years_path %> diff --git a/app/views/university/organizations/index.html.erb b/app/views/extranet/organizations/index.html.erb similarity index 100% rename from app/views/university/organizations/index.html.erb rename to app/views/extranet/organizations/index.html.erb diff --git a/app/views/university/organizations/show.html.erb b/app/views/extranet/organizations/show.html.erb similarity index 56% rename from app/views/university/organizations/show.html.erb rename to app/views/extranet/organizations/show.html.erb index 1a8858a8183c77fbb221e456277a8e24e78b282f..39b24130fa4451934fc800724765ad58ded63dc4 100644 --- a/app/views/university/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/config/routes.rb b/config/routes.rb index 7bf2ee0b0c0d5c65699cb0a2059c705454874c5b..45bd12e82b6fe14b93709110a5231924c2b8f66c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,5 @@ Rails.application.routes.draw do + resources :university_person_alumnus_imports authenticated :user, -> user { user.server_admin? } do match "/delayed_job" => DelayedJobWeb, :anchor => false, :via => [:get, :post] end diff --git a/config/routes/admin/communication.rb b/config/routes/admin/communication.rb index 7b07d35b56ea04d6dd3a83c853adea8dca3a1a1b..8b65d9c852c44bf5d5576cea3d8d52e28d18df98 100644 --- a/config/routes/admin/communication.rb +++ b/config/routes/admin/communication.rb @@ -57,4 +57,9 @@ namespace :communication do end end resources :extranets, controller: 'extranets' + resources :alumni do + collection do + resources :imports, only: [:index, :show, :new, :create] + end + end end diff --git a/config/routes/extranet.rb b/config/routes/extranet.rb index 186b49d3851de3c596de301297fb06865336f7a7..e23246ed59008752fd1068fbcec6e73485d696d5 100644 --- a/config/routes/extranet.rb +++ b/config/routes/extranet.rb @@ -1,6 +1,4 @@ -namespace :university do - resources :organizations, only: [:index, :show] -end - -get 'organizations' => 'university/organizations#index', as: :organizations -get 'organization/:id' => 'university/organizations#show', as: :organization +get 'organizations' => 'extranet/organizations#index', as: :organizations +get 'organization/:id' => 'extranet/organizations#show', as: :university_organization +get 'years' => 'extranet/academic_years#index', as: :academic_years +get 'years/:id' => 'extranet/academic_years#show', as: :academic_year diff --git a/db/migrate/20220316144230_create_education_academic_years.rb b/db/migrate/20220316144230_create_education_academic_years.rb new file mode 100644 index 0000000000000000000000000000000000000000..25b594c36bf3d5573f9617668ff52f80da0ac92b --- /dev/null +++ b/db/migrate/20220316144230_create_education_academic_years.rb @@ -0,0 +1,10 @@ +class CreateEducationAcademicYears < ActiveRecord::Migration[6.1] + def change + create_table :education_academic_years, id: :uuid do |t| + t.references :university, null: false, foreign_key: true, type: :uuid + t.integer :year + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index e30fc9ba96bc7f892b2ca439a92f51f3c383a209..67016a4c70bbe516bc96db755e68b019cb504445 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_03_08_114213) do +ActiveRecord::Schema.define(version: 2022_03_16_151533) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -384,6 +384,14 @@ ActiveRecord::Schema.define(version: 2022_03_08_114213) do t.index ["priority", "run_at"], name: "delayed_jobs_priority" end + create_table "education_academic_years", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "university_id", null: false + t.integer "year" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["university_id"], name: "index_education_academic_years_on_university_id" + end + create_table "education_programs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.string "name" @@ -642,6 +650,15 @@ ActiveRecord::Schema.define(version: 2022_03_08_114213) do t.index ["user_id"], name: "index_university_people_on_user_id" end + create_table "university_person_alumnus_imports", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "university_id", null: false + t.uuid "user_id", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["university_id"], name: "index_university_person_alumnus_imports_on_university_id" + t.index ["user_id"], name: "index_university_person_alumnus_imports_on_user_id" + end + create_table "university_person_involvements", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "person_id", null: false @@ -756,6 +773,7 @@ ActiveRecord::Schema.define(version: 2022_03_08_114213) do add_foreign_key "communication_website_posts", "universities" add_foreign_key "communication_website_posts", "university_people", column: "author_id" add_foreign_key "communication_websites", "universities" + add_foreign_key "education_academic_years", "universities" add_foreign_key "education_programs", "education_programs", column: "parent_id" add_foreign_key "education_programs", "universities" add_foreign_key "education_schools", "universities" @@ -780,6 +798,8 @@ ActiveRecord::Schema.define(version: 2022_03_08_114213) do add_foreign_key "university_organizations", "universities" add_foreign_key "university_people", "universities" add_foreign_key "university_people", "users" + add_foreign_key "university_person_alumnus_imports", "universities" + add_foreign_key "university_person_alumnus_imports", "users" add_foreign_key "university_person_involvements", "universities" add_foreign_key "university_person_involvements", "university_people", column: "person_id" add_foreign_key "university_roles", "universities" diff --git a/docs/benchmark.md b/docs/benchmark.md deleted file mode 100644 index 94e442e846eaf14322f410f57adb57aa473b110d..0000000000000000000000000000000000000000 --- a/docs/benchmark.md +++ /dev/null @@ -1,29 +0,0 @@ -# Benchmark - -## Ecoles - -### Excellent websites - -- https://www.harvard.edu/ -- https://www.mit.edu/ - -### Other websites - -- https://www.stanford.edu/ -- https://www.brown.edu/ -- https://www.columbia.edu/ -- https://home.dartmouth.edu/ -- https://www.upenn.edu/ -- https://www.princeton.edu/ -- https://www.yale.edu/ -- https://www.ox.ac.uk/ -- https://www.cam.ac.uk/ -- https://www.caltech.edu/ -- https://www.imperial.ac.uk/ -- https://ethz.ch/ -- https://www.ucl.ac.uk/ -- https://psl.eu/ -- https://www.ip-paris.fr/ -- https://www.sorbonne-universite.fr/ -- https://www.hec.edu/fr -- https://www.essec.edu/fr/ diff --git a/test/controllers/education/academic_years_controller_test.rb b/test/controllers/education/academic_years_controller_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..3e5bf7bdceceffbac113d450dac8ad2c3dfb1b54 --- /dev/null +++ b/test/controllers/education/academic_years_controller_test.rb @@ -0,0 +1,48 @@ +require "test_helper" + +class Education::AcademicYearsControllerTest < ActionDispatch::IntegrationTest + setup do + @education_academic_year = education_academic_years(:one) + end + + test "should get index" do + get education_academic_years_url + assert_response :success + end + + test "should get new" do + get new_education_academic_year_url + assert_response :success + end + + test "should create education_academic_year" do + assert_difference('Education::AcademicYear.count') do + post education_academic_years_url, params: { education_academic_year: { university_id: @education_academic_year.university_id, year: @education_academic_year.year } } + end + + assert_redirected_to education_academic_year_url(Education::AcademicYear.last) + end + + test "should show education_academic_year" do + get education_academic_year_url(@education_academic_year) + assert_response :success + end + + test "should get edit" do + get edit_education_academic_year_url(@education_academic_year) + assert_response :success + end + + test "should update education_academic_year" do + patch education_academic_year_url(@education_academic_year), params: { education_academic_year: { university_id: @education_academic_year.university_id, year: @education_academic_year.year } } + assert_redirected_to education_academic_year_url(@education_academic_year) + end + + test "should destroy education_academic_year" do + assert_difference('Education::AcademicYear.count', -1) do + delete education_academic_year_url(@education_academic_year) + end + + assert_redirected_to education_academic_years_url + end +end diff --git a/test/fixtures/communication/websites.yml b/test/fixtures/communication/websites.yml index 44c31f2ca94a0d3ec0e718052cc4147f24dabf95..aea91b89aedf7bdf88dc35453d5b5aaa4d1d2f25 100644 --- a/test/fixtures/communication/websites.yml +++ b/test/fixtures/communication/websites.yml @@ -22,7 +22,7 @@ # # Foreign Keys # -# fk_rails_94b0abd85b (university_id => universities.id) +# fk_rails_bb6a496c08 (university_id => universities.id) # website_with_github: university: default_university diff --git a/test/fixtures/education/academic_years.yml b/test/fixtures/education/academic_years.yml new file mode 100644 index 0000000000000000000000000000000000000000..2a7ea54e6ec792f1e370cda239c158f95f011a32 --- /dev/null +++ b/test/fixtures/education/academic_years.yml @@ -0,0 +1,26 @@ +# == Schema Information +# +# Table name: education_academic_years +# +# id :uuid not null, primary key +# year :integer +# created_at :datetime not null +# updated_at :datetime not null +# university_id :uuid not null, indexed +# +# Indexes +# +# index_education_academic_years_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_7d376afe35 (university_id => universities.id) +# + +one: + university: one + year: 1 + +two: + university: two + year: 1 diff --git a/test/models/education/academic_year_test.rb b/test/models/education/academic_year_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..f5535a748800fef1a826d92880c4969576a154c5 --- /dev/null +++ b/test/models/education/academic_year_test.rb @@ -0,0 +1,25 @@ +# == Schema Information +# +# Table name: education_academic_years +# +# id :uuid not null, primary key +# year :integer +# created_at :datetime not null +# updated_at :datetime not null +# university_id :uuid not null, indexed +# +# Indexes +# +# index_education_academic_years_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_7d376afe35 (university_id => universities.id) +# +require "test_helper" + +class Education::AcademicYearTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/system/education/academic_years_test.rb b/test/system/education/academic_years_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..68b9d54ab2803acbe86d5c3c79293011e9077836 --- /dev/null +++ b/test/system/education/academic_years_test.rb @@ -0,0 +1,45 @@ +require "application_system_test_case" + +class Education::AcademicYearsTest < ApplicationSystemTestCase + setup do + @education_academic_year = education_academic_years(:one) + end + + test "visiting the index" do + visit education_academic_years_url + assert_selector "h1", text: "Education/Academic Years" + end + + test "creating a Academic year" do + visit education_academic_years_url + click_on "New Education/Academic Year" + + fill_in "University", with: @education_academic_year.university_id + fill_in "Year", with: @education_academic_year.year + click_on "Create Academic year" + + assert_text "Academic year was successfully created" + click_on "Back" + end + + test "updating a Academic year" do + visit education_academic_years_url + click_on "Edit", match: :first + + fill_in "University", with: @education_academic_year.university_id + fill_in "Year", with: @education_academic_year.year + click_on "Update Academic year" + + assert_text "Academic year was successfully updated" + click_on "Back" + end + + test "destroying a Academic year" do + visit education_academic_years_url + page.accept_confirm do + click_on "Destroy", match: :first + end + + assert_text "Academic year was successfully destroyed" + end +end