From 857e9982d4f92a481e6887412a75538032fcefea Mon Sep 17 00:00:00 2001 From: Encbox Date: Sun, 15 Apr 2012 00:00:16 -0700 Subject: [PATCH] internally 'public' projects --- app/controllers/application_controller.rb | 3 ++- app/controllers/projects_controller.rb | 1 + app/models/ability.rb | 5 ++--- app/models/project.rb | 2 +- app/models/project/permissions_trait.rb | 2 +- app/views/admin/projects/_form.html.haml | 4 ++++ app/views/projects/_form.html.haml | 4 ++++ app/views/projects/index.html.haml | 15 ++++++++++++++- 8 files changed, 29 insertions(+), 7 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 5ae19a7bdf8..b8e3a66f21d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -47,7 +47,8 @@ class ApplicationController < ActionController::Base end def project - @project ||= current_user.projects.find_by_code(params[:project_id]) + @project ||= current_user.projects.find_by_code(params[:project_id]) || + Project.find_by_code_and_private_flag(params[:project_id], false) @project || render_404 end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index c832250a080..93cf4faa2de 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -13,6 +13,7 @@ class ProjectsController < ApplicationController def index @projects = current_user.projects @projects = @projects.select(&:last_activity_date).sort_by(&:last_activity_date).reverse + @public_projects = Project.find_all_by_private_flag(false) - @projects @events = Event.where(:project_id => @projects.map(&:id)).recent.limit(20) end diff --git a/app/models/ability.rb b/app/models/ability.rb index 5792948fa51..54a8803620f 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -25,13 +25,13 @@ class Ability :write_project, :write_issue, :write_note - ] if project.guest_access_for?(user) + ] if project.guest_access_for?(user) || project.public? rules << [ :download_code, :write_merge_request, :write_snippet - ] if project.report_access_for?(user) + ] if project.report_access_for?(user) || project.public? rules << [ :write_wiki @@ -51,7 +51,6 @@ class Ability :admin_wiki ] if project.master_access_for?(user) || project.owner == user - rules.flatten end diff --git a/app/models/project.rb b/app/models/project.rb index 72cc833c253..729c17087ca 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -21,7 +21,7 @@ class Project < ActiveRecord::Base has_many :wikis, :dependent => :destroy has_many :protected_branches, :dependent => :destroy - attr_protected :private_flag, :owner_id + attr_protected :owner_id scope :public_only, where(:private_flag => false) scope :without_user, lambda { |user| where("id not in (:ids)", :ids => user.projects.map(&:id) ) } diff --git a/app/models/project/permissions_trait.rb b/app/models/project/permissions_trait.rb index 3b90c711c2e..afdf0d62431 100644 --- a/app/models/project/permissions_trait.rb +++ b/app/models/project/permissions_trait.rb @@ -22,7 +22,7 @@ module Project::PermissionsTrait def repository_readers keys = Key.joins({:user => :users_projects}). where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::REPORTER) - keys.map(&:identifier) + deploy_keys.map(&:identifier) + keys.map(&:identifier) + deploy_keys.map(&:identifier) + (public? ? ['@all'] : []) end def repository_writers diff --git a/app/views/admin/projects/_form.html.haml b/app/views/admin/projects/_form.html.haml index 84cd030ec09..8bbd3c34521 100644 --- a/app/views/admin/projects/_form.html.haml +++ b/app/views/admin/projects/_form.html.haml @@ -48,6 +48,10 @@ = f.label :wall_enabled, "Wall" .input= f.check_box :wall_enabled + .clearfix + = f.label :private_flag, "Private" + .input= f.check_box :private_flag + .clearfix = f.label :description .input= f.text_area :description, :class => "xxlarge" diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml index 8f6244f2f5b..356f0261910 100644 --- a/app/views/projects/_form.html.haml +++ b/app/views/projects/_form.html.haml @@ -46,6 +46,10 @@ = f.label :wiki_enabled, "Wiki" .input= f.check_box :wiki_enabled + .clearfix + = f.label :private_flag, "Private" + .input= f.check_box :private_flag + .clearfix = f.label :description .input diff --git a/app/views/projects/index.html.haml b/app/views/projects/index.html.haml index d918259d883..c923c5d8774 100644 --- a/app/views/projects/index.html.haml +++ b/app/views/projects/index.html.haml @@ -17,7 +17,7 @@ .span4.right %div.leftbar.ui-box %h5 - Projects + My Projects %small (#{@projects.count}) - if current_user.can_create_project? @@ -32,6 +32,19 @@ = truncate(project.name, :length => 25) %span.right → + %div.leftbar.ui-box + %h5 + Public Projects + %small + (#{@public_projects.count}) + .content_list + - @public_projects.each do |project| + = link_to project_path(project), :class => dom_class(project) do + %h4 + %span.ico.project + = truncate(project.name, :length => 25) + %span.right + → - else %h3 Nothing here -- GitLab