OSDN Git Service

t#:
[laoz/laoz.git] / app / controllers / letter_controller.rb
1 # 文字
2 class LetterController < ApplicationController
3   layout 'default'
4   
5   private
6   
7   def get_show
8     @letter = Letter.find params[:id]
9     @section_count = SectionLetter.count(:conditions => ['letter_id = ?', @letter.id]).to_i
10     @section_sum = SectionLetter.sum(:count, :conditions => ['letter_id = ?', @letter.id]).to_i
11     @sections = Section.find(:all, :include => :section_letters, 
12       :conditions => ['section_letters.letter_id = ?', @letter.id]
13     )
14   end
15   
16   public
17   
18   def index
19     redirect_to :action => :list
20   end
21   
22   def list
23     @page = params[:page].to_i
24     @page = 1 if @page < 1
25     @search = params[:search]
26     @filter = params[:filter].to_s.to_i
27     if @filter == 1
28       @letters = Letter.find(:all, :include => 'hateda_letter', 
29         :conditions => ['hateda_letters.upload_at is null or letters.update_at > hateda_letters.upload_at'] 
30       )
31     else
32       cond = if @search
33         ['letter = ?', @search]
34       else
35         nil
36       end
37       @paginate, @letters = paginate(:letters, :conditions => cond, 
38         :order => 'count desc', :per_page => 20
39       )
40     end
41     if @user
42       render :template => '/hateda/letter_list'
43     else
44     end
45   end
46   
47   def show
48     get_show
49   end
50   
51   verify :method => :post, :only => [ :destroy, :create, :update, :upload_letter, :remove_letter ],
52          :redirect_to => { :action => :list }
53   
54   def edit
55     @letter = Letter.find params[:id]
56     @section_count = SectionLetter.count(:conditions => ['letter_id = ?', @letter.id]).to_i
57     @section_sum = SectionLetter.sum(:count, :conditions => ['letter_id = ?', @letter.id]).to_i
58     @sections = Section.find(:all, :include => :section_letters, 
59       :conditions => ['section_letters.letter_id = ?', @letter.id]
60     )
61     @letter.detail = @letter.edit_detail
62   end
63   
64   def update
65     @letter = Letter.find(params[:id])
66     if @letter.update_attributes(params[:letter])
67       get_show
68       render :action => 'show', :id => @letter.id
69     else
70       render :action => 'edit'
71     end
72   end
73   
74   def upload_letter
75     @letter = Letter.find params[:id]
76     HatedaLetter.upload_one @user, @pass, @letter.id
77     get_show
78     render :action => :show, :id => @letter.id
79   end
80   
81   def remove_letter
82     htn = Hatena.new(@user, @pass)
83     @letter = Letter.find params[:id]
84     HatedaLetter.remove_one htn, @letter.id
85     get_show
86     render :action => :show, :id => @letter.id
87   end
88   
89   #インポート実行
90   def import
91     e = nil
92     if (f = params[:browse][:file]).respond_to?(:read)
93       if f.size > 2.megabytes
94         e = 'ファイルサイズが2MBを超えています'
95       else
96         Letter.import(f.read)
97       end
98     else
99       e = 'ファイルを受け取れませんでした'
100     end
101     if e
102       flash[:error] = 'インポートできませんでした'
103       flash[:txt_error] = e
104       redirect_to :controller => '/section', :action => :index
105     else
106       redirect_to :controller => '/section', :action => :index
107     end
108   end
109   
110   def export
111     send_data(Letter.export, :filename => "letter.txt")
112   end
113   
114 end