Blob of app/controllers/wikis_controller.rb (raw blob data)

1 class WikisController < ApplicationController
2
3 before_filter :find_project
4 before_filter :authorised, :only => [ :update, :edit, :destroy, :new, :create ]
5 after_filter :after_wiki, :only => [ :show ]
6
7 def index
8 if @project
9 # Project Wiki index page, shows list of all wikis for that project
10 @wikis = Wiki.find_by_project(@project.id)
11 unless @wikis.empty?
12 @title = "Wiki"
13 @url_suffix = ""
14 render :action => "ac_project_index"
15 else
16 flash[:error] = "No wikis for this project."
17 redirect_to project_path(@project.slug)
18 end
19 else
20 # Main wiki - default page
21 @wiki = Wiki.find_by_slug("wiki-contents")
22 @wiki_breadcrumb = false
23 @title = "Wiki"
24 render :action => "ac_index"
25 end
26 end
27
28 def show
29 if @project
30 # Project wiki, page specfied
31 @wiki = Wiki.find_by_slug(params[:id])
32 if @wiki != nil
33 @title = @wiki.title
34 render :action => "ac_project_show"
35 else
36 flash[:error] = "Wiki not found."
37 @wiki = @project.wiki
38 @title = @project.wiki.title
39 render :action => "ac_project_show"
40 end
41 else
42 # Main wiki index page
43 @wiki = Wiki.find_by_slug(params[:id])
44 if @wiki != nil
45 @wiki_breadcrumb = true
46 @title = @wiki.title
47 render :action => "ac_index"
48 else
49 @wiki = Wiki.find_by_slug("wiki-contents")
50 @wiki_breadcrumb = false
51 @title = @wiki.title
52 flash[:error] = "Wiki not found."
53 redirect_to wikis_path
54 end
55 end
56 end
57
58 def new
59 if @project
60 @wiki = Wiki.new
61 @title = "New " + @project.title + " Wiki Page"
62 render :action => "ac_project_new"
63 else
64 # Normal Wiki index page
65 @wiki_breadcrumb = true
66 @title = "New Wiki Page"
67 render :action => "ac_edit"
68 end
69 end
70
71 def create
72 @wiki = Wiki.new(params[:wiki])
73 @wiki.slug = to_slug(@wiki.title)
74 @wiki.project_id = @project.id
75 if @wiki.save
76 Journal.create(@wiki, request.env["REMOTE_ADDR"], @project.id, current_user.id).to_s
77 flash[:notice] = 'Wiki page was successfully created.'
78 redirect_to project_wiki_path(@project.slug, @wiki.slug)
79 else
80 #FIXME this is wrong I think
81 flash[:error] = 'Error.'
82 render :action => 'ac_project_new'
83 end
84 end
85
86 def edit
87 if @project
88 # Project wiki, page specfied
89 @wiki = Wiki.find_by_slug(params[:id])
90 if @wiki != nil
91 @title = "Editing: " + @project.title + " " + @wiki.title
92 render :action => "ac_project_edit"
93 else
94 flash[:error] = "Wiki not found."
95 redirect_to project_path(@project)
96 end
97 else
98 # Normal Wiki index page
99 @wiki = Wiki.find_by_slug(params[:id])
100 if @wiki != nil
101 @wiki_breadcrumb = true
102 @title = "Editing: " + @wiki.title
103 render :action => "ac_edit"
104 else
105 flash[:error] = "Wiki page not found."
106 redirect_to root_path
107 end
108 end
109 end
110
111 def update
112 if @project
113 # Project wiki, page specfied
114 @wiki = Wiki.find_by_slug(params[:id])
115 if @wiki != nil
116 original_wiki = Wiki.new
117 original_wiki = @wiki.deep_clone
118 if @wiki.update_attributes(params[:wiki])
119 @wiki.save
120 Journal.update(original_wiki, @wiki, request.env["REMOTE_ADDR"], @project.id, current_user.id, "Edited wiki: \'" + @wiki.title + "\'.")
121 flash[:notice] = "Wiki was successfully updated."
122 @title = @wiki.title
123 render :action => "ac_project_show"
124 else
125 @title = "Editing: " + @project.title + " " + @wiki.title
126 render :action => "ac_project_edit"
127 end
128 else
129 flash[:error] = "Wiki not found."
130 redirect_to project_path(@project)
131 end
132 else
133 # Normal Wiki index page
134 @wiki = Wiki.find_by_slug(params[:id])
135 if @wiki != nil
136 #TODO normal wiki update
137 else
138 flash[:error] = "Wiki not found."
139 redirect_to root_path
140 end
141 end
142 end
143
144 def destroy
145 if @is_member
146 @wiki = Wiki.find(params[:id])
147 if @wiki
148 original_wiki = Wiki.new
149 original_wiki = @wiki.deep_clone
150 @wiki.status = :deleted
151 if @wiki.save
152 Journal.update(original_wiki, @wiki, request.env["REMOTE_ADDR"], @project.id, current_user.id, "Deleted wiki: \'" + @wiki.title + "\'.")
153 flash[:notice] = 'Wiki deleted.'
154 else
155 #TODO add error report
156 flash[:error] = 'An error occurred.'
157 end
158 redirect_to project_wikis_path(@project)
159 else
160 flash[:error] = 'Wiki ' + params[:id] + ' does not exist.'
161 redirect_to project_wikis_path(@project)
162 end
163 end
164 end
165
166 #FIXME
167 def to_slug(s)
168 s.gsub(/\W+/, ' ').strip.downcase.gsub(/\ +/, '-')
169 end
170
171 protected
172
173 # Increase view count for a wiki page
174 def after_wiki
175 if @wiki
176 @wiki.views = @wiki.views + 1
177 @wiki.save!
178 end
179 end
180
181
182 end