瀏覽代碼

Add edit link to Lecture listing in Course view

Frans Bergman 7 年之前
父節點
當前提交
d6429aa647
共有 4 個文件被更改,包括 30 次插入13 次删除
  1. 11 3
      app/controllers/lectures_controller.rb
  2. 4 10
      app/helpers/lectures_helper.rb
  3. 8 0
      app/models/user.rb
  4. 7 0
      app/views/courses/show.html.erb

+ 11 - 3
app/controllers/lectures_controller.rb

@@ -37,19 +37,27 @@ class LecturesController < ApplicationController
     @lecture = Lecture.find(params[:id])
   end
 
+  def current_course
+    begin
+      Course.find(params.require(:lecture)[:course_id])
+    rescue
+      @lecture.course
+    end
+  end
+
   def lecture_params
     allowed = [:description]
 
-    allowed += %i[course_id starts_at ends_at location] if helpers.can_edit_full?
+    allowed += %i[course_id starts_at ends_at location] if current_user.is_course_administrator?(current_course)
 
     params.require(:lecture).permit(*allowed)
   end
 
   def check_can_create
-    redirect_to root_url unless helpers.can_edit_full?
+    redirect_to root_url unless params.require(:lecture)[:course_id] && current_user.is_course_administrator?(current_course)
   end
 
   def check_can_edit
-    redirect_to root_url unless helpers.can_edit_description?
+    redirect_to root_url unless current_user.is_course_teacher?(@lecture.course)
   end
 end

+ 4 - 10
app/helpers/lectures_helper.rb

@@ -1,15 +1,9 @@
 module LecturesHelper
-  def can_edit_description?
-    @lecture.course.users.merge(CourseParticipation.teachers).include?(current_user) || can_edit_full?
-  end
-
   def can_edit_full?
-    begin
-      school = (@lecture && @lecture.course) ? @lecture.course.school : Course.find(params.require(:lecture)[:course_id]).school
-    rescue
-      return true
-    end
+    current_user.is_course_administrator?(@course)
+  end
 
-    current_user.is_administrator_at?(school) || current_user.admin?
+  def can_edit_description?
+    current_user.is_course_teacher?(@course)
   end
 end

+ 8 - 0
app/models/user.rb

@@ -75,6 +75,14 @@ class User < ApplicationRecord
     school ? school.administrators.include?(self) : false
   end
 
+  def is_course_teacher?(course)
+    !course || course.users.merge(CourseParticipation.teachers).include?(self) || self.is_course_administrator?(course)
+  end
+
+  def is_course_administrator?(course)
+    !course || self.is_administrator_at?(course.school) || self.admin?
+  end
+
   private
     def picture_size
       if picture.size > 5.megabytes

+ 7 - 0
app/views/courses/show.html.erb

@@ -25,6 +25,13 @@
               <td>
                 <%= truncate(lecture.description, length: 70) %>
               </td>
+              <% if current_user.is_course_teacher?(@course) %>
+                <td>
+                  <%= link_to edit_lecture_path(lecture), class: "btn btn-primary" do %>
+                    <%= fa_icon "edit", text: "Edit" %>
+                  <% end %>
+                </td>
+              <% end %>
             </tr>
           <% end %>
         </tbody>