diff --git a/app/controllers/project_categories_controller.rb b/app/controllers/project_categories_controller.rb index a515e45b6..13f8056d8 100644 --- a/app/controllers/project_categories_controller.rb +++ b/app/controllers/project_categories_controller.rb @@ -4,8 +4,16 @@ class ProjectCategoriesController < ApplicationController end def group_list + is_admin = current_user && current_user&.admin? + if is_admin + projects = Project.all + elsif current_user&.logged? + projects = Project.joins(:members).where.not("projects.is_public = ? and (projects.user_id != ? or members.user_id != ?)", false, current_user.id,current_user.id ).distinct + else + projects = Project.visible + end @category_group_list = - Project.visible.joins(:project_category).group(:project_category_id) + projects.joins(:project_category).group(:project_category_id) .select("project_category_id, count(*) AS projects_count, project_categories.name") end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 9f67456d9..6417e42da 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -6,7 +6,9 @@ class ProjectsController < ApplicationController before_action :authorizate_user_can_edit_project!, only: %i[update] def index - scope = Projects::ListQuery.call(params) + is_admin = current_user && current_user&.admin? + + scope = Projects::ListQuery.call(params.merge(is_admin: is_admin)) @total_count = scope.size @projects = paginate(scope) end @@ -36,7 +38,15 @@ class ProjectsController < ApplicationController end def group_type_list - @project_group_list = Project.visible.group(:project_type).select('project_type, count(project_type) AS projects_count').having("count(project_type) > ?", 0) + is_admin = current_user && current_user&.admin? + if is_admin + projects = Project.all + elsif current_user&.logged? + projects = Project.joins(:members).where.not("projects.is_public = ? and (projects.user_id != ? or members.user_id != ?)", false, current_user.id,current_user.id ).distinct + else + projects = Project.visible + end + @project_group_list = projects.group(:project_type).select('project_type, count(project_type) AS projects_count').having("count(project_type) > ?", 0) end def update diff --git a/app/queries/projects/list_query.rb b/app/queries/projects/list_query.rb index 081e99270..b5facb3a3 100644 --- a/app/queries/projects/list_query.rb +++ b/app/queries/projects/list_query.rb @@ -10,7 +10,14 @@ class Projects::ListQuery < ApplicationQuery end def call - scope = Project.visible.like(params[:search]) + if params[:is_admin] + projects = Project.all + elsif params[:user_id].to_i != 2 + projects = Project.joins(:members).where.not("projects.is_public = ? and (projects.user_id != ? or members.user_id != ?)", false, params[:user_id].to_i,params[:user_id].to_i ).distinct + else + projects = Project.visible + end + scope = projects.like(params[:search]) .with_project_type(params[:project_type]) .with_project_category(params[:category_id]) .with_project_language(params[:language_id])