This commit is contained in:
Dmitriy Zaporozhets 2011-10-21 20:04:41 +03:00
parent 3a2b273316
commit 6b030fd41d
83 changed files with 1089 additions and 136 deletions

View file

@ -27,11 +27,15 @@ class ApplicationController < ActionController::Base
end
def authenticate_admin!
return redirect_to(new_user_session_path) unless current_user.is_admin?
return render_404 unless current_user.is_admin?
end
def authorize_project!(action)
return redirect_to(new_user_session_path) unless can?(current_user, action, project)
return render_404 unless can?(current_user, action, project)
end
def access_denied!
render_404
end
def method_missing(method_sym, *arguments, &block)

View file

@ -1,12 +1,12 @@
class IssuesController < ApplicationController
before_filter :authenticate_user!
before_filter :project
before_filter :issue, :only => [:edit, :update, :destroy, :show]
# Authorize
before_filter :add_project_abilities
before_filter :authorize_read_issue!
before_filter :authorize_write_issue!, :only => [:new, :create, :close, :edit, :update, :sort]
before_filter :authorize_admin_issue!, :only => [:destroy]
respond_to :js
@ -30,12 +30,10 @@ class IssuesController < ApplicationController
end
def edit
@issue = @project.issues.find(params[:id])
respond_with(@issue)
end
def show
@issue = @project.issues.find(params[:id])
@notes = @issue.notes
@note = @project.notes.new(:noteable => @issue)
end
@ -51,7 +49,6 @@ class IssuesController < ApplicationController
end
def update
@issue = @project.issues.find(params[:id])
@issue.update_attributes(params[:issue])
respond_to do |format|
@ -62,7 +59,8 @@ class IssuesController < ApplicationController
def destroy
@issue = @project.issues.find(params[:id])
return access_denied! unless can?(current_user, :admin_issue, @issue)
@issue.destroy
respond_to do |format|
@ -79,4 +77,10 @@ class IssuesController < ApplicationController
render :nothing => true
end
protected
def issue
@issue ||= @project.issues.find(params[:id])
end
end

View file

@ -4,7 +4,6 @@ class NotesController < ApplicationController
# Authorize
before_filter :add_project_abilities
before_filter :authorize_write_note!, :only => [:create]
before_filter :authorize_admin_note!, :only => [:destroy]
respond_to :js
@ -25,6 +24,9 @@ class NotesController < ApplicationController
def destroy
@note = @project.notes.find(params[:id])
return access_denied! unless can?(current_user, :admin_note, @note)
@note.destroy
respond_to do |format|
@ -41,6 +43,8 @@ class NotesController < ApplicationController
Notify.note_commit_email(u, @note).deliver
when "Issue" then
Notify.note_issue_email(u, @note).deliver
when "Snippet"
true
else
Notify.note_wall_email(u, @note).deliver
end

View file

@ -3,6 +3,12 @@ class ProfileController < ApplicationController
@user = current_user
end
def social_update
@user = current_user
@user.update_attributes(params[:user])
redirect_to [:profile]
end
def password
@user = current_user
end

View file

@ -60,14 +60,21 @@ class ProjectsController < ApplicationController
end
def show
@repo = project.repo
@commit = @repo.commits.first
@tree = @commit.tree
@tree = @tree / params[:path] if params[:path]
return render "projects/empty" unless @project.repo_exists?
@date = case params[:view]
when "week" then Date.today - 7.days
when "day" then Date.today
else nil
end
rescue Grit::NoSuchPathError => ex
respond_to do |format|
format.html {render "projects/empty"}
if @date
@date = @date.at_beginning_of_day
@commits = @project.commits_since(@date)
@messages = project.notes.since(@date).order("created_at DESC")
else
@commits = @project.fresh_commits
@messages = project.notes.fresh.limit(10)
end
end
@ -76,8 +83,15 @@ class ProjectsController < ApplicationController
#
def wall
@notes = @project.common_notes
@note = Note.new
@notes = @project.common_notes.order("created_at DESC")
@notes = case params[:view]
when "week" then @notes.since((Date.today - 7.days).at_beginning_of_day)
when "all" then @notes.all
when "day" then @notes.since(Date.today.at_beginning_of_day)
else @notes.fresh.limit(10)
end
end
#

View file

@ -0,0 +1,62 @@
class SnippetsController < ApplicationController
before_filter :authenticate_user!
before_filter :project
# Authorize
before_filter :add_project_abilities
before_filter :authorize_read_snippet!
before_filter :authorize_write_snippet!, :only => [:new, :create, :close, :edit, :update, :sort]
respond_to :html
def index
@snippets = @project.snippets
end
def new
@snippet = @project.snippets.new
end
def create
@snippet = @project.snippets.new(params[:snippet])
@snippet.author = current_user
@snippet.save
if @snippet.valid?
redirect_to [@project, @snippet]
else
respond_with(@snippet)
end
end
def edit
@snippet = @project.snippets.find(params[:id])
end
def update
@snippet = @project.snippets.find(params[:id])
@snippet.update_attributes(params[:snippet])
if @snippet.valid?
redirect_to [@project, @snippet]
else
respond_with(@snippet)
end
end
def show
@snippet = @project.snippets.find(params[:id])
@notes = @snippet.notes
@note = @project.notes.new(:noteable => @snippet)
end
def destroy
@snippet = @project.snippets.find(params[:id])
return access_denied! unless can?(current_user, :admin_snippet, @snippet)
@snippet.destroy
redirect_to project_snippets_path(@project)
end
end

View file

@ -3,8 +3,8 @@ class TeamMembersController < ApplicationController
# Authorize
before_filter :add_project_abilities
before_filter :authorize_read_team_member!
before_filter :authorize_admin_team_member!, :only => [:new, :create, :destroy, :update]
before_filter :authorize_read_project!
before_filter :authorize_admin_project!, :only => [:new, :create, :destroy, :update]
def show
@team_member = project.users_projects.find(params[:id])