2012-01-30 20:39:34 +00:00
|
|
|
# -*- encoding : utf-8 -*-
|
2011-03-10 11:35:46 +00:00
|
|
|
class ProjectsController < ApplicationController
|
2011-11-30 12:58:14 +00:00
|
|
|
is_related_controller!
|
|
|
|
|
|
|
|
belongs_to :user, :group, :polymorphic => true, :optional => true
|
|
|
|
|
2011-10-28 14:27:12 +01:00
|
|
|
before_filter :authenticate_user!, :except => :auto_build
|
2011-12-21 14:01:50 +00:00
|
|
|
before_filter :find_project, :only => [:show, :edit, :update, :destroy, :fork]
|
2011-10-26 21:57:51 +01:00
|
|
|
before_filter :get_paths, :only => [:new, :create, :edit, :update]
|
2011-11-19 11:41:11 +00:00
|
|
|
|
2011-11-23 15:52:33 +00:00
|
|
|
load_and_authorize_resource
|
2011-03-10 13:38:50 +00:00
|
|
|
|
2011-10-26 21:57:51 +01:00
|
|
|
def index
|
2011-11-30 12:58:14 +00:00
|
|
|
@projects = if parent? and !parent.nil?
|
|
|
|
parent.projects
|
|
|
|
else
|
|
|
|
Project
|
|
|
|
end.accessible_by(current_ability)
|
|
|
|
|
|
|
|
@projects = if params[:query]
|
2012-01-28 01:04:11 +00:00
|
|
|
@projects.by_name("%#{params[:query]}%").order("CHAR_LENGTH(name) ASC")
|
2011-11-30 12:58:14 +00:00
|
|
|
else
|
|
|
|
@projects
|
|
|
|
end.paginate(:page => params[:project_page])
|
|
|
|
|
2011-11-02 21:39:50 +00:00
|
|
|
@own_projects = current_user.own_projects
|
2012-01-28 00:25:11 +00:00
|
|
|
#@part_projects = current_user.projects + current_user.groups.map(&:projects).flatten.uniq - @own_projects
|
2011-03-10 13:38:50 +00:00
|
|
|
end
|
|
|
|
|
2011-03-10 14:20:09 +00:00
|
|
|
def show
|
2011-04-07 14:20:21 +01:00
|
|
|
@current_build_lists = @project.build_lists.current.recent.paginate :page => params[:page]
|
2011-03-10 14:20:09 +00:00
|
|
|
end
|
|
|
|
|
2011-10-26 21:57:51 +01:00
|
|
|
def new
|
|
|
|
@project = Project.new
|
|
|
|
end
|
|
|
|
|
|
|
|
def edit
|
|
|
|
end
|
|
|
|
|
|
|
|
def create
|
|
|
|
@project = Project.new params[:project]
|
|
|
|
@project.owner = get_owner
|
2011-11-30 12:58:14 +00:00
|
|
|
# puts @project.owner.inspect
|
2011-10-26 21:57:51 +01:00
|
|
|
|
2011-11-30 12:58:14 +00:00
|
|
|
if @project.save
|
2011-10-26 21:57:51 +01:00
|
|
|
flash[:notice] = t('flash.project.saved')
|
2011-10-27 23:43:44 +01:00
|
|
|
redirect_to @project
|
2011-10-26 21:57:51 +01:00
|
|
|
else
|
|
|
|
flash[:error] = t('flash.project.save_error')
|
|
|
|
flash[:warning] = @project.errors[:base]
|
|
|
|
render :action => :new
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def update
|
|
|
|
if @project.update_attributes(params[:project])
|
|
|
|
flash[:notice] = t('flash.project.saved')
|
2011-10-27 23:43:44 +01:00
|
|
|
redirect_to @project
|
2011-10-26 21:57:51 +01:00
|
|
|
else
|
2011-11-30 12:58:14 +00:00
|
|
|
@project.save
|
2011-10-26 21:57:51 +01:00
|
|
|
flash[:error] = t('flash.project.save_error')
|
|
|
|
render :action => :edit
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
|
|
|
@project.destroy
|
|
|
|
flash[:notice] = t("flash.project.destroyed")
|
2011-10-27 13:49:21 +01:00
|
|
|
redirect_to @project.owner
|
2011-10-26 21:57:51 +01:00
|
|
|
end
|
|
|
|
|
2011-11-23 15:52:33 +00:00
|
|
|
def fork
|
2011-11-29 21:42:58 +00:00
|
|
|
if forked = @project.fork(current_user) and forked.valid?
|
|
|
|
redirect_to forked, :notice => t("flash.project.forked")
|
|
|
|
else
|
|
|
|
flash[:warning] = t("flash.project.fork_error")
|
|
|
|
flash[:error] = forked.errors.full_messages
|
|
|
|
redirect_to @project
|
|
|
|
end
|
2011-11-23 15:52:33 +00:00
|
|
|
end
|
|
|
|
|
2011-11-17 21:57:30 +00:00
|
|
|
# TODO remove this?
|
|
|
|
def auto_build
|
2011-11-28 15:41:42 +00:00
|
|
|
uname, name = params[:git_repo].split('/')
|
2011-11-02 20:27:47 +00:00
|
|
|
owner = User.find_by_uname(uname) || Group.find_by_uname(uname)
|
2011-11-28 15:41:42 +00:00
|
|
|
project = Project.where(:owner_id => owner.id, :owner_type => owner.class).find_by_name!(name)
|
2011-11-18 01:28:34 +00:00
|
|
|
project.delay.auto_build # TODO don't queue duplicates
|
2011-10-31 00:11:49 +00:00
|
|
|
|
2011-11-02 19:18:25 +00:00
|
|
|
# p = params.delete_if{|k,v| k == 'controller' or k == 'action'}
|
|
|
|
# ActiveSupport::Notifications.instrument("event_log.observer", :object => project, :message => p.inspect)
|
|
|
|
logger.info "Git hook recieved from #{params[:git_user]} to #{params[:git_repo]}"
|
2011-10-31 00:11:49 +00:00
|
|
|
|
2011-10-28 14:27:12 +01:00
|
|
|
render :nothing => true
|
|
|
|
end
|
|
|
|
|
2011-03-10 13:38:50 +00:00
|
|
|
protected
|
|
|
|
|
2011-10-17 15:21:29 +01:00
|
|
|
def get_paths
|
|
|
|
if params[:user_id]
|
|
|
|
@user = User.find params[:user_id]
|
2011-10-26 21:57:51 +01:00
|
|
|
@projects_path = user_path(@user) # user_projects_path @user
|
2011-10-17 15:21:29 +01:00
|
|
|
@new_project_path = new_user_project_path @user
|
|
|
|
elsif params[:group_id]
|
|
|
|
@group = Group.find params[:group_id]
|
2011-10-27 13:49:21 +01:00
|
|
|
@projects_path = group_path(@group) # group_projects_path @group
|
2011-10-17 15:21:29 +01:00
|
|
|
@new_projects_path = new_group_project_path @group
|
|
|
|
else
|
|
|
|
@projects_path = projects_path
|
|
|
|
@new_projects_path = new_project_path
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2011-03-10 14:20:09 +00:00
|
|
|
def find_project
|
2011-10-16 21:50:56 +01:00
|
|
|
@project = Project.find params[:id]
|
2011-03-10 14:20:09 +00:00
|
|
|
end
|
2011-03-10 11:35:46 +00:00
|
|
|
end
|