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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
# encoding: utf-8
#--
# Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#++
class PagesController < ApplicationController
before_filter :login_required, :except => [:index, :show]
before_filter :find_project
before_filter :check_if_wiki_enabled
before_filter :assert_readyness
before_filter :require_write_permissions, :only => [:edit, :update]
renders_in_site_specific_context
def index
respond_to do |format|
format.html do
@tree_nodes = @project.wiki_repository.git.tree.contents.select{|n|
n.name =~ /\.#{Page::DEFAULT_FORMAT}$/
}
@root = Breadcrumb::Wiki.new(@project)
@atom_auto_discovery_url = project_pages_path(:format => :atom)
end
format.atom do
@commits = @project.wiki_repository.git.commits("master", 30)
expires_in 30.minutes
end
end
end
def show
@atom_auto_discovery_url = project_pages_path(:format => :atom)
@page, @root = page_and_root
if @page.new?
if logged_in?
redirect_to edit_project_page_path(@project, params[:id]) and return
else
render "no_page" and return
end
end
end
def edit
@page, @root = page_and_root
@page.user = current_user
end
def preview
@page, @root = page_and_root
@page.content = params[:page][:content]
respond_to do |wants|
wants.js
end
end
def update
@page = Page.find(params[:id], @project.wiki_repository.git)
@page.user = current_user
if @page.content == params[:page][:content]
flash[:error] = I18n.t("pages_controller.no_changes")
render :action => "edit" and return
end
@page.content = params[:page][:content]
if @page.save
if @project.new_event_required?(Action::UPDATE_WIKI_PAGE, @project, current_user, @page.title)
@project.create_event(Action::UPDATE_WIKI_PAGE, @project, current_user, @page.title)
end
redirect_to project_page_path(@project, @page)
else
flash[:error] = I18n.t("pages_controller.invalid_page_error")
render :action => "edit"
end
end
def history
@page, @root = page_and_root
if @page.new?
redirect_to edit_project_page_path(@project, @page) and return
end
@commits = @page.history(30)
@user_and_email_map = @project.wiki_repository.users_by_commits(@commits)
end
protected
def assert_readyness
unless @project.wiki_repository.ready?
flash[:notice] = I18n.t("pages_controller.repository_not_ready")
redirect_to project_path(@project) and return
end
end
def check_if_wiki_enabled
unless @project.wiki_enabled?
redirect_to project_path(@project) and return
end
end
def page_and_root
page = Page.find(params[:id], @project.wiki_repository.git)
root = Breadcrumb::Page.new(page, @project)
return page, root
end
def require_write_permissions
unless @project.wiki_repository.writable_by?(current_user)
flash[:error] = "This project has restricted wiki editing to project members"
redirect_to project_pages_path(@project)
end
end
end
|