diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 5ae19a7bdf80bf3ae5974ebb49fd3b433648422e..b8e3a66f21ddda7f8fa636f38676e8b83bfb6346 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 c832250a0807b04c160bac2809aa74c2cc434b19..93cf4faa2de01b939cb0af21739d9a8ce3b29379 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 5792948fa51f8c599d7862c1b6d3986af2742251..54a8803620fbb0ca10f0ecf65e5c8706f53b56bd 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 72cc833c253d483dee1354f23802f56c19508a5a..729c17087ca3dcb56eab4a03b733a9faaab92eb1 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 3b90c711c2e3d7913b7856d869491473e501d34f..afdf0d62431e2c7a96eaec3838ea9e8c0377123b 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 84cd030ec0913bc26b910a3897ccfefed74bddb0..8bbd3c345211c31332a623fb760f947ed060a5ef 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 8f6244f2f5b64658db596395d080722bc759db40..356f0261910cfbbac544061e0bf6d299b7acb711 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 d918259d883540b60d41e77c6ec8f345ee87f513..c923c5d8774198bdd2dda94c9a6654a905fa8fae 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