diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 4cc79f7..21ba92d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -24,7 +24,7 @@ require 'authentication.rb' class ApplicationController < ActionController::Base helper :all - # protect_from_forgery + protect_from_forgery include AuthenticationSystem @@ -59,7 +59,8 @@ class ApplicationController < ActionController::Base end end - def show_not_found + def show_not_found(exception) + fail Exception if Rails.env.production? respond_to do |format| format.html { render file: "#{Rails.root}/public/404.html", status: 404, layout: false } format.xml { head 404 } diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index fce83a8..7a657ef 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -20,103 +20,93 @@ # along with this program. If not, see . class AttachmentsController < ApplicationController - - #verify :method => :post, :only => [ :destroy, :create, :update ], - # :redirect_to => { :controller => 'courses', :action => :show } - - #after_filter :cache_sweep, :only => [ :create, :update, :destroy ] - - before_filter :find_attachment - - def show - respond_to do |format| - format.html - format.xml { render :xml => @attachment } - end - end - - def new - end - - def create - @attachment.course_id = @course.id - @attachment.path = params[:attachment][:path] - @attachment.front_page = params[:attachment][:front_page] - @attachment.description = params[:attachment][:description] - @attachment.file_name = "blank" - unless params[:attachment][:file].nil? - @attachment.file = params[:attachment][:file] - @attachment.file_name = params[:attachment][:file].original_filename - @attachment.content_type = params[:attachment][:file].content_type - end - @attachment.save! - - AttachmentCreateLogEntry.create!(:target_id => @attachment.id, :user => @current_user, :course => @course) - flash[:notice] = t(:attachment_created) - - respond_to do |format| - format.html { redirect_to course_attachment_url(@course, @attachment) } - format.xml { head :created, :location => course_attachment_url(@course, @attachment, :format => :xml) } - end - end - - def edit - end - - def update - @attachment.path = params[:attachment][:path] - @attachment.front_page = params[:attachment][:front_page] - @attachment.description = params[:attachment][:description] - unless params[:attachment][:file].nil? - @attachment.file = params[:attachment][:file] - @attachment.file_name = params[:attachment][:file].original_filename - @attachment.content_type = params[:attachment][:file].content_type - end - changed = @attachment.changed? - - if changed - @attachment.last_modified = Time.now.utc - @attachment.save! - AttachmentEditLogEntry.create!(:target_id => @attachment.id, :user => @current_user, :course => @course) - flash[:notice] = t(:attachment_updated) - end - - respond_to do |format| - format.html { redirect_to course_attachment_url(@course, @attachment) } - format.xml { head :created, :location => course_attachment_url(@course, @attachment, :format => :xml) } - end - end - - def destroy - @attachment.destroy - flash[:notice] = t(:attachment_removed) - - log = AttachmentDeleteLogEntry.create!(:target_id => @attachment.id, :user => @current_user, :course => @course) - flash[:undo] = undo_course_log_url(@course, log) - - respond_to do |format| - format.html { redirect_to course_url(@course) } - format.xml { head :ok } - end - end - - def download - - send_file("#{Rails.root}/public/upload/#{@course.id}/#{@attachment.id}", - :filename => @attachment.file_name, - :type => @attachment.content_type, - :disposition => 'inline', - :streaming => 'true') - end - - protected - def find_attachment - params[:course_id] = Course.find(:first, :conditions => ['short_name = ?', params[:course_id]], :order => 'period desc').id if !params[:course_id].is_numeric? and !Course.find_by_short_name(params[:course_id]).nil? - @course = Course.find(params[:course_id]) - @attachment = params[:id] ? @course.attachments.find(params[:id]) : Attachment.new - end - - def cache_sweep - expire_fragment(course_path(@course.id)) - end + before_filter :find_attachment + + def show + respond_to do |format| + format.html + format.xml { render xml: @attachment } + end + end + + def new + end + + def create + @attachment.course_id = @course.id + @attachment.path = params[:attachment][:path] + @attachment.front_page = params[:attachment][:front_page] + @attachment.description = params[:attachment][:description] + @attachment.file_name = "blank" + unless params[:attachment][:file].nil? + @attachment.file = params[:attachment][:file] + @attachment.file_name = params[:attachment][:file].original_filename + @attachment.content_type = params[:attachment][:file].content_type + end + @attachment.save! + + AttachmentCreateLogEntry.create!(target_id: @attachment.id, user: @current_user, course: @course) + flash[:notice] = t(:attachment_created) + + respond_to do |format| + format.html { redirect_to course_attachment_url(@course, @attachment) } + format.xml { head :created, location: course_attachment_url(@course, @attachment, format: :xml) } + end + end + + def edit + end + + def update + @attachment.path = params[:attachment][:path] + @attachment.front_page = params[:attachment][:front_page] + @attachment.description = params[:attachment][:description] + unless params[:attachment][:file].nil? + @attachment.file = params[:attachment][:file] + @attachment.file_name = params[:attachment][:file].original_filename + @attachment.content_type = params[:attachment][:file].content_type + end + changed = @attachment.changed? + + if changed + @attachment.last_modified = Time.now.utc + @attachment.save! + AttachmentEditLogEntry.create!(target_id: @attachment.id, user: @current_user, course: @course) + flash[:notice] = t(:attachment_updated) + end + + respond_to do |format| + format.html { redirect_to course_attachment_url(@course, @attachment) } + format.xml { head :created, location: course_attachment_url(@course, @attachment, format: :xml) } + end + end + + def destroy + @attachment.destroy + flash[:notice] = t(:attachment_removed) + + log = AttachmentDeleteLogEntry.create!(target_id: @attachment.id, user: @current_user, course: @course) + flash[:undo] = undo_course_log_url(@course, log) + + respond_to do |format| + format.html { redirect_to course_url(@course) } + format.xml { head :ok } + end + end + + def download + send_file("#{Rails.root}/public/upload/#{@course.id}/#{@attachment.id}", + filename: @attachment.file_name, + type: @attachment.content_type, + disposition: 'inline', + streaming: 'true') + end + + protected + + def find_attachment + params[:course_id] = Course.find(:first, conditions: ['short_name = ?', params[:course_id]], order: 'period desc').id if !params[:course_id].is_numeric? && !Course.find_by_short_name(params[:course_id]).nil? + @course = Course.find(params[:course_id]) + @attachment = params[:id] ? @course.attachments.find(params[:id]) : Attachment.new + end end diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 50a4605..e4704ca 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -24,11 +24,9 @@ class CoursesController < ApplicationController :destroy] before_filter :require_login, only: [:enroll, :unenroll] before_filter :find_course, except: [:index] - # after_filter :cache_sweep, only: [ :create, :update, :destroy ] def index - @period = params[:period] || App.current_period - @courses = Course.visible.where(period: @period) + @period = params[:period].blank? ? App.current_period : params[:period] respond_to do |format| format.html @@ -115,10 +113,4 @@ class CoursesController < ApplicationController def require_admin fail AccessDenied, 'only admins can modify courses' unless admin? end - - def cache_sweep - expire_fragment(course_path(@course.id, part: 'right')) - expire_fragment(course_path(@course.id)) - expire_fragment(courses_path) - end end diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index 838e4cb..dee1cd5 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -23,9 +23,6 @@ class WikiController < ApplicationController # verify params: :text, only: :preview, redirect_to: { action: :show } # verify params: [:from, :to], only: :diff, redirect_to: { action: :versions } - # after_filter :cache_sweep, only: [ :create, :update, :destroy, :move_up, - # :move_down, :undelete ] - before_filter :find_wiki, except: [:preview] before_filter :require_login, only: [:new, :create, :edit, :update, :destroy, :move_up, :move_down] @@ -169,9 +166,4 @@ class WikiController < ApplicationController @wiki_page = WikiPage.new(params[:wiki_page]) end end - - def cache_sweep - expire_fragment course_url(@course.id) - expire_fragment course_wiki_instance_url(@course.id, @wiki_page.id) - end end diff --git a/app/models/course.rb b/app/models/course.rb index f028ed4..fea66a0 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -88,7 +88,8 @@ class Course < ActiveRecord::Base end def self.pluck_periods - Course.uniq.pluck(:period).reject!(&:blank?).sort.reverse + periods = Course.uniq.reorder('').pluck(:period).reject!(&:blank?) || [] + periods.sort.reverse end def self.from_param(param) diff --git a/app/models/user.rb b/app/models/user.rb index 799a0db..fde52f4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -25,7 +25,7 @@ class User < ActiveRecord::Base acts_as_paranoid has_and_belongs_to_many :courses, order: 'full_name', - conditions: "period = #{App.current_period}" + conditions: "period = '#{App.current_period}'" validates_length_of :login, within: 3..40 validates_length_of :name, within: 3..40 @@ -86,8 +86,12 @@ class User < ActiveRecord::Base end def courses_not_enrolled(period) - Course.all(conditions: ['period = ? and hidden = ? and id not in (?)', - period, false, courses]) + if courses.empty? + Course.visible.where(period: period) + else + Course.where('period = ? and hidden = ? and id not in (?)', + period, false, courses) + end end protected diff --git a/app/views/courses/index.html.haml b/app/views/courses/index.html.haml index a998e78..fdcc70d 100644 --- a/app/views/courses/index.html.haml +++ b/app/views/courses/index.html.haml @@ -17,6 +17,8 @@ .right = action_icon('subtract', 'Desmatricular-se', unenroll_course_url(course)) = link_to h(course.full_name), course_url(course) + - else + - @courses = Course.visible.where(period: @period) -# cache(courses_path) do - old_grade = 0 diff --git a/app/views/layouts/_base.html.haml b/app/views/layouts/_base.html.haml index 10023d6..635933c 100644 --- a/app/views/layouts/_base.html.haml +++ b/app/views/layouts/_base.html.haml @@ -66,9 +66,9 @@ #footer %p %b Wiki - UFC + UFC 1.1 %p - Desenvolvido em Ruby on Rails + Powered by Ruby on Rails, PostgreSQL & Linux %p Distribuido livremente sob a %a{href: 'https://www.gnu.org/licenses/agpl-3.0.en.html'}