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