root/extensions/retro_wiki/lib/wiki_files_controller.rb

Download in other formats: Raw | Text
Revisions
Dimitrij Denissenko
Dimitrij Denissenko
Dec 06 2009 * 18:24
(9 months ago)

Revision b164a101261ae03572321128da49703ba483e311

Added multi-storage (AWS/S3) functionality to attachments

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#--
# Copyright (C) 2008 Dimitrij Denissenko
# Please read LICENSE document for more information.
#++
class WikiFilesController < ProjectAreaController
  retrospectiva_extension('retro_wiki')
  
  menu_item :use => 'WikiController'
  
  require_permissions :wiki_pages,
    :view   => ['index', 'show']
    
  require_permissions :wiki_files,
    :create => ['new', 'create'],
    :delete => ['destroy']

  before_filter :check_freshness_of_index, :only => [:index]
  before_filter :find_file, :only => [:show, :destroy]
  before_filter :verify_readablity, :only => [:show]
  before_filter :check_freshness_of_file, :only => [:show]
  before_filter :assert_file_params, :only => [:new, :create]
  before_filter :new, :only => [:create]

  def index
    @files = Project.current.wiki_files.paginate :page => params[:page], :order => 'wiki_title'    
  end
  
  def show
    @wiki_file.redirect? ? redirect_to(@wiki_file.redirect) : send_file(*@wiki_file.send_arguments)
  end
  
  def new
    @wiki_file = Project.current.wiki_files.new(params[:wiki_file][:file])
  end
  
  def create
    @wiki_file.wiki_title = params[:wiki_file][:wiki_title]
    if @wiki_file.save
      flash[:notice] = _('File was successfully added.')
      redirect_to project_wiki_files_path(Project.current)
    else
      render :action => 'new'
    end    
  end

  def destroy
    if @wiki_file.destroy
      flash[:notice] = _('File was successfully deleted.')
    else
      flash[:error] = _('File cannot be deleted.')      
    end
    redirect_to project_wiki_files_path(Project.current)
  end

  protected
  
    def check_freshness_of_index
      fresh_when :etag => Project.current.wiki_files.count, :last_modified => Project.current.wiki_files.maximum(:created_at)      
    end

    def check_freshness_of_file
      fresh_when :etag => @wiki_file, :last_modified => @wiki_file.created_at      
    end
  
    def find_file
      @wiki_file = Project.current.wiki_files.find_by_wiki_title! params[:id]
    end    

    def verify_readablity      
      render :text => _('Unable to download file') unless @wiki_file.readable?
    end

    def assert_file_params
      params[:wiki_file] = {} unless params[:wiki_file].is_a?(Hash)
    end

end