#-- # Copyright (C) 2007 Dimitrij Denissenko # Please read LICENSE document for more information. #++ class TimelineController < ProjectAreaController retrospectiva_extension('timeline') require_permission( :view_timeline => ['index'] ) def index @date = Date.civil( params[:date][:year].to_i, params[:date][:month].to_i, params[:date][:day].to_i ) rescue Date.today @days_back = params[:days_back] && params[:days_back].to_i.between?(1, 99) ? params[:days_back].to_i : 7 @viewable_classes = Acts::Previewable.previewable_classes.select do |klass| klass.previewable.viewable?(User.current) end results = [] @viewable_classes.each do |klass| if (params[:all] == '1' || params[klass.table_name] == '1') results += find_records(klass) end end @records = results.collect{|r| r.previewable }.group_by do |record| time = record.date Date.civil(time.year, time.month, time.day) end @dates = @records.keys.sort {|a,b| b <=> a} end private def find_records(klass) options = klass.previewable.find_options || {} options[:conditions] ||= '1=1' options[:conditions] = [options[:conditions]].flatten options[:conditions].first << " AND #{klass.table_name}.#{klass.previewable.date_column} BETWEEN ? AND ?" options[:conditions] += [@date - @days_back, @date] options[:order] ||= "#{klass.table_name}.#{klass.previewable.date_column} DESC" klass.with_scope(:find => klass.previewable.project_scope) do klass.find(:all, options) end end end