From 8457cc7504078e02bb67c9e5f5d07bed07822f03 Mon Sep 17 00:00:00 2001 From: Jesse Tilro <jesse@jessetilro.nl> Date: Fri, 12 May 2017 15:54:41 +0200 Subject: [PATCH 1/2] Add course edition show, customize and inherit options. --- .../admin/course_editions_controller.rb | 25 ++++++++++++++++ app/controllers/admin/courses_controller.rb | 12 ++++++++ app/models/course_edition.rb | 16 ++++++++++ app/views/admin/course_editions/show.html.erb | 15 +++++++++- .../show/_configuration.html.erb | 29 +++++++++++++++++++ .../show/_information.html.erb | 20 +++++++++++++ app/views/admin/courses/index.html.erb | 6 ++-- app/views/admin/courses/show.html.erb | 25 +++++++--------- .../courses/show/_configuration.html.erb | 22 ++++++++++++++ .../admin/courses/show/_editions.html.erb | 17 ++++++++--- .../admin/courses/show/_information.html.erb | 19 ++++++++++++ app/views/layouts/admin/_navigation.html.erb | 10 +++---- config/routes.rb | 10 +++++-- 13 files changed, 198 insertions(+), 28 deletions(-) create mode 100644 app/views/admin/course_editions/show/_configuration.html.erb create mode 100644 app/views/admin/course_editions/show/_information.html.erb create mode 100644 app/views/admin/courses/show/_configuration.html.erb create mode 100644 app/views/admin/courses/show/_information.html.erb diff --git a/app/controllers/admin/course_editions_controller.rb b/app/controllers/admin/course_editions_controller.rb index bd98319f7..e1f0964ce 100644 --- a/app/controllers/admin/course_editions_controller.rb +++ b/app/controllers/admin/course_editions_controller.rb @@ -1,11 +1,36 @@ class Admin::CourseEditionsController < Admin::ApplicationController load_and_authorize_resource + load_and_authorize_resource :course + + before_action :load_configuration + + before_action do + add_breadcrumb "Courses", admin_courses_path + add_breadcrumb "Course #{@course.id}", admin_course_path(@course) + add_breadcrumb 'Editions' + end def index end def show + add_breadcrumb "Edition #{@course_edition.id}", admin_course_edition_path(@course_edition) + end + + def customize + @course_edition.customize! + redirect_to admin_course_edition_path(@course_edition) end + def inherit + @course_edition.inherit! + redirect_to admin_course_edition_path(@course_edition) + end + + protected + + def load_configuration + @configuration = @course_edition.effective_configuration + end end diff --git a/app/controllers/admin/courses_controller.rb b/app/controllers/admin/courses_controller.rb index da8ac4bdb..08f70a2db 100644 --- a/app/controllers/admin/courses_controller.rb +++ b/app/controllers/admin/courses_controller.rb @@ -2,9 +2,21 @@ class Admin::CoursesController < Admin::ApplicationController load_and_authorize_resource + before_action :load_configuration, only: [:show, :edit] + add_breadcrumb 'Courses', :admin_courses_path def index end + def show + add_breadcrumb "Course #{@course.id}", admin_course_path(@course) + end + + protected + + def load_configuration + @configuration = @course.configuration + end + end diff --git a/app/models/course_edition.rb b/app/models/course_edition.rb index 40d2b4ea8..7cd2a5e28 100644 --- a/app/models/course_edition.rb +++ b/app/models/course_edition.rb @@ -11,4 +11,20 @@ class CourseEdition < ApplicationRecord def effective_configuration configuration.present? ? configuration : course.configuration end + + def customized? + configuration.present? + end + + def inherited? + !customized? + end + + def customize! + self.update configuration: effective_configuration.dup if inherited? + end + + def inherit! + configuration.destroy if customized? + end end diff --git a/app/views/admin/course_editions/show.html.erb b/app/views/admin/course_editions/show.html.erb index eac6e60b4..6eeb26be1 100644 --- a/app/views/admin/course_editions/show.html.erb +++ b/app/views/admin/course_editions/show.html.erb @@ -1 +1,14 @@ -course_editions#show +<h1><%= @course_edition.name %> <br /> <small><%= CourseEdition.model_name.human %> <%= @course_edition.id %></small></h1> + +<div class="row"> + <div class="col-md-6"> + + <%= render partial: 'admin/course_editions/show/information', locals: {course: @course} %> + + </div> + <div class="col-md-6"> + + <%= render partial: 'admin/course_editions/show/configuration', locals: {course_edition: @course_edition} %> + + </div> +</div> diff --git a/app/views/admin/course_editions/show/_configuration.html.erb b/app/views/admin/course_editions/show/_configuration.html.erb new file mode 100644 index 000000000..f840abc1c --- /dev/null +++ b/app/views/admin/course_editions/show/_configuration.html.erb @@ -0,0 +1,29 @@ +<div class="panel panel-<%= course_edition.customized? ? 'default' : 'info' %>"> + <div class="panel-heading"> + Course Configuration + <% if course_edition.inherited? %> + (Inherited from Course) + <%= link_to 'Customize', customize_admin_course_edition_url, method: :put, class: 'btn btn-default btn-small' %> + <% else %> + (Customized) + <%= link_to 'Inherit', inherit_admin_course_edition_url, method: :put, class: 'btn btn-default btn-small' %> + <% end %> + </div> + <div class="panel-body"> + + <% { + 'Minimum Group Size' => @configuration.min_group_size, + 'Maximum Group Size' => @configuration.max_group_size, + 'Minimum Number Of Groups' => @configuration.min_number_of_groups, + 'Maximum Number Of Groups' => @configuration.max_number_of_groups + }.each do |k, v| %> + <div class="row"> + <label class="col-sm-4 control-label text-right"><%= k %></label> + <div class="col-sm-8"> + <%= v %> + </div> + </div> + <% end %> + + </div> +</div> diff --git a/app/views/admin/course_editions/show/_information.html.erb b/app/views/admin/course_editions/show/_information.html.erb new file mode 100644 index 000000000..c88ccca4c --- /dev/null +++ b/app/views/admin/course_editions/show/_information.html.erb @@ -0,0 +1,20 @@ +<div class="panel panel-default"> + <div class="panel-heading"> + Course Edition Information + </div> + <div class="panel-body"> + + <% { + 'Name' => @course_edition.name, + 'Edition of' => link_to(@course.name, admin_course_path(@course)) + }.each do |k, v| %> + <div class="row"> + <label class="col-sm-4 control-label text-right"><%= k %></label> + <div class="col-sm-8"> + <%= v %> + </div> + </div> + <% end %> + + </div> +</div> diff --git a/app/views/admin/courses/index.html.erb b/app/views/admin/courses/index.html.erb index 04b81f6a0..5d9b68d85 100644 --- a/app/views/admin/courses/index.html.erb +++ b/app/views/admin/courses/index.html.erb @@ -11,10 +11,12 @@ <% @courses.each do |course| %> <tr> <td> - <%= link_to course.id, admin_course_path(course.id) %> + <%= course.id %> </td> <td> - <%= course.name %> + <strong> + <%= link_to course.name, admin_course_path(course.id) %> + </strong> </td> </tr> <% end %> diff --git a/app/views/admin/courses/show.html.erb b/app/views/admin/courses/show.html.erb index 83845a9f1..71c14c433 100644 --- a/app/views/admin/courses/show.html.erb +++ b/app/views/admin/courses/show.html.erb @@ -1,19 +1,16 @@ -<h2><%= Course.model_name.human %> <%= @course.id %></h2> +<h1><%= @course.name %> <br /> <small><%= Course.model_name.human %> <%= @course.id %></small></h1> -<div class="panel panel-default"> - <div class="panel-body"> +<div class="row"> + <div class="col-md-6"> - <% { - 'Name' => @course.name, - 'Editions' => render(partial: 'admin/courses/show/editions', locals: {course: @course}) - }.each do |k, v| %> - <div class="row"> - <label class="col-sm-2 control-label text-right"><%= k %></label> - <div class="col-sm-10"> - <%= v %> - </div> - </div> - <% end %> + <%= render partial: 'admin/courses/show/information', locals: {course: @course} %> + + <%= render partial: 'admin/courses/show/editions', locals: {course: @course} %> + + </div> + <div class="col-md-6"> + + <%= render partial: 'admin/courses/show/configuration', locals: {course: @course} %> </div> </div> diff --git a/app/views/admin/courses/show/_configuration.html.erb b/app/views/admin/courses/show/_configuration.html.erb new file mode 100644 index 000000000..718212064 --- /dev/null +++ b/app/views/admin/courses/show/_configuration.html.erb @@ -0,0 +1,22 @@ +<div class="panel panel-default"> + <div class="panel-heading"> + Course Configuration + </div> + <div class="panel-body"> + + <% { + 'Minimum Group Size' => @configuration.min_group_size, + 'Maximum Group Size' => @configuration.max_group_size, + 'Minimum Number Of Groups' => @configuration.min_number_of_groups, + 'Maximum Number Of Groups' => @configuration.max_number_of_groups + }.each do |k, v| %> + <div class="row"> + <label class="col-sm-4 control-label text-right"><%= k %></label> + <div class="col-sm-8"> + <%= v %> + </div> + </div> + <% end %> + + </div> +</div> diff --git a/app/views/admin/courses/show/_editions.html.erb b/app/views/admin/courses/show/_editions.html.erb index d026385af..1ccacd542 100644 --- a/app/views/admin/courses/show/_editions.html.erb +++ b/app/views/admin/courses/show/_editions.html.erb @@ -1,5 +1,14 @@ -<div class="list-group"> - <% course.editions.each do |edition| %> - <%= link_to edition.name, admin_course_edition_url(edition), class: 'list-group-item' %> - <% end %> +<div class="panel panel-default"> + <div class="panel-heading"> + Course Editions + </div> + <div class="panel-body"> + + <div class="list-group"> + <% course.editions.each do |edition| %> + <%= link_to edition.name, admin_course_edition_url(edition), class: 'list-group-item' %> + <% end %> + </div> + + </div> </div> diff --git a/app/views/admin/courses/show/_information.html.erb b/app/views/admin/courses/show/_information.html.erb new file mode 100644 index 000000000..38de49721 --- /dev/null +++ b/app/views/admin/courses/show/_information.html.erb @@ -0,0 +1,19 @@ +<div class="panel panel-default"> + <div class="panel-heading"> + Course Information + </div> + <div class="panel-body"> + + <% { + 'Name' => @course.name + }.each do |k, v| %> + <div class="row"> + <label class="col-sm-4 control-label text-right"><%= k %></label> + <div class="col-sm-8"> + <%= v %> + </div> + </div> + <% end %> + + </div> +</div> diff --git a/app/views/layouts/admin/_navigation.html.erb b/app/views/layouts/admin/_navigation.html.erb index aa3a4bf34..48edcc5a8 100644 --- a/app/views/layouts/admin/_navigation.html.erb +++ b/app/views/layouts/admin/_navigation.html.erb @@ -12,11 +12,11 @@ <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <% { - user: admin_users_path, - course: admin_courses_path - }.each do |name, url| %> - <%= content_tag :li, class: (controller_name == name.to_s.pluralize ? 'active' : '') do %> - <%= link_to t("#{name}.other", scope: 'activerecord.models'), url %> + user: { controllers: [:users], url: admin_users_path }, + course: { controllers: [:courses, :course_editions], url: admin_courses_path } + }.each do |name, data| %> + <%= content_tag :li, class: (controller_name.in?(data[:controllers].map(&:to_s)) ? 'active' : '') do %> + <%= link_to t("#{name}.other", scope: 'activerecord.models'), data[:url] %> <% end %> <% end %> </ul> diff --git a/config/routes.rb b/config/routes.rb index 0d1dc848d..67603de7d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -6,7 +6,13 @@ Rails.application.routes.draw do namespace :admin do root to: 'users#index' resources :users - resources :courses - resources :course_editions + resources :courses do + resources :course_editions, path: :editions, as: :editions do + member do + put 'customize' + put 'inherit' + end + end + end end end -- GitLab From 93a4ab2dd39b6cd00428344917cbf68c3f5141c4 Mon Sep 17 00:00:00 2001 From: Jesse Tilro <jesse@jessetilro.nl> Date: Fri, 12 May 2017 16:20:16 +0200 Subject: [PATCH 2/2] Add meta tag for viewport scaling responsiveness. --- app/views/layouts/admin/application.html.erb | 2 ++ app/views/layouts/application.html.erb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/app/views/layouts/admin/application.html.erb b/app/views/layouts/admin/application.html.erb index 7e9b8dee3..84c191b52 100644 --- a/app/views/layouts/admin/application.html.erb +++ b/app/views/layouts/admin/application.html.erb @@ -6,6 +6,8 @@ <%= stylesheet_link_tag 'admin/application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'admin/application', 'data-turbolinks-track': 'reload' %> + + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> </head> <body> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index fdb70ec0a..6723dbb43 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -6,6 +6,8 @@ <%= csrf_meta_tags %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> + + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> </head> <body> -- GitLab