diff --git a/app/controllers/organizations/organization_users_controller.rb b/app/controllers/organizations/organization_users_controller.rb index 6c3afa963..9bb00467a 100644 --- a/app/controllers/organizations/organization_users_controller.rb +++ b/app/controllers/organizations/organization_users_controller.rb @@ -4,6 +4,8 @@ class Organizations::OrganizationUsersController < Organizations::BaseController def index @organization_users = @organization.organization_users.includes(:user) + search = params[:search].to_s.downcase + @organization_users = @organization_users.joins(:user).where("LOWER(concat(users.lastname, users.firstname, users.login, users.mail, users.nickname)) LIKE ?", "%#{search.split(" ").join('|')}%") if search.present? @organization_users = kaminari_paginate(@organization_users) end diff --git a/app/controllers/organizations/organizations_controller.rb b/app/controllers/organizations/organizations_controller.rb index 1e4bef746..35cc1d404 100644 --- a/app/controllers/organizations/organizations_controller.rb +++ b/app/controllers/organizations/organizations_controller.rb @@ -18,6 +18,8 @@ class Organizations::OrganizationsController < Organizations::BaseController end def show + @is_admin = can_edit_org? + @is_member = @organization.is_member?(current_user.id) end def create diff --git a/app/controllers/organizations/projects_controller.rb b/app/controllers/organizations/projects_controller.rb index eb6371f72..aabb781b4 100644 --- a/app/controllers/organizations/projects_controller.rb +++ b/app/controllers/organizations/projects_controller.rb @@ -14,6 +14,19 @@ class Organizations::ProjectsController < Organizations::BaseController @projects = paginate(@projects) end + def search + tip_exception("请输入搜索关键词") if params[:search].nil? + public_projects_sql = @organization.projects.where(is_public: true).to_sql + private_projects_sql = @organization.projects + .where(is_public: false) + .joins(team_projects: {team: :team_users}) + .where(team_users: {user_id: current_user.id}).to_sql + @projects = Project.from("( #{ public_projects_sql} UNION #{ private_projects_sql } ) AS projects") + + @projects = @projects.ransack(name_or_identifier_cont: params[:search]).result + @projects = @projects.includes(:owner).order("projects.#{sort} #{sort_direction}") + end + private def load_organization diff --git a/app/controllers/organizations/team_users_controller.rb b/app/controllers/organizations/team_users_controller.rb index 1529aa360..1b225e5c2 100644 --- a/app/controllers/organizations/team_users_controller.rb +++ b/app/controllers/organizations/team_users_controller.rb @@ -7,6 +7,9 @@ class Organizations::TeamUsersController < Organizations::BaseController def index @team_users = @team.team_users + search = params[:search].to_s.downcase + @team_users = @team_users.joins(:user).where("LOWER(concat(users.lastname, users.firstname, users.login, users.mail, users.nickname)) LIKE ?", "%#{search.split(" ").join('|')}%") if search.present? + @team_users = kaminari_paginate(@team_users) end diff --git a/app/controllers/organizations/teams_controller.rb b/app/controllers/organizations/teams_controller.rb index 5e6185d19..939334c71 100644 --- a/app/controllers/organizations/teams_controller.rb +++ b/app/controllers/organizations/teams_controller.rb @@ -14,6 +14,8 @@ class Organizations::TeamsController < Organizations::BaseController end def show + @is_admin = can_edit_org? + @is_member = @team.is_member?(current_user.id) end def create diff --git a/app/models/organization.rb b/app/models/organization.rb index fb8d94c40..8bda95aff 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -78,6 +78,10 @@ class Organization < Owner self.create!(login: name, gitea_token: gitea_token) end + def is_member?(user_id) + organization_users.where(user_id: user_id).present? + end + def is_owner?(user_id) team_users.joins(:team).where(user_id: user_id, teams: {authorize: %w(owner)}).present? end diff --git a/app/models/team.rb b/app/models/team.rb index 382019f77..3e1de9ad8 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -47,4 +47,8 @@ class Team < ApplicationRecord end end + def is_member?(user_id) + team_users.where(user_id: user_id).present? + end + end diff --git a/app/views/organizations/organizations/show.json.jbuilder b/app/views/organizations/organizations/show.json.jbuilder index 55de73daf..2fd88b7b0 100644 --- a/app/views/organizations/organizations/show.json.jbuilder +++ b/app/views/organizations/organizations/show.json.jbuilder @@ -1 +1,3 @@ -json.partial! "detail", organization: @organization \ No newline at end of file +json.partial! "detail", organization: @organization +json.is_admin @is_admin +json.is_member @is_member \ No newline at end of file diff --git a/app/views/organizations/projects/search.json.jbuilder b/app/views/organizations/projects/search.json.jbuilder new file mode 100644 index 000000000..cf2b86019 --- /dev/null +++ b/app/views/organizations/projects/search.json.jbuilder @@ -0,0 +1,9 @@ +json.total_count @projects.size +json.projects @projects.each do |project| + json.(project, :id, :name, :identifier, :description, :forked_count, :praises_count, :forked_from_project_id) + json.mirror_url project.repository&.mirror_url + json.type project.numerical_for_project_type + json.praised project.praised_by?(current_user) + json.last_update_time render_unix_time(project.updated_on) + json.time_ago time_from_now(project.updated_on) +end \ No newline at end of file diff --git a/app/views/organizations/team_projects/_detail.json.jbuilder b/app/views/organizations/team_projects/_detail.json.jbuilder index d65021086..9af32d1df 100644 --- a/app/views/organizations/team_projects/_detail.json.jbuilder +++ b/app/views/organizations/team_projects/_detail.json.jbuilder @@ -1,6 +1,7 @@ json.id team_project.id json.project do json.owner_name team_project&.project&.owner&.login + json.owner_image_url url_to_avatar(team_project&.project&.owner) json.name team_project&.project&.name json.identifier team_project&.project&.identifier end \ No newline at end of file diff --git a/app/views/organizations/teams/show.json.jbuilder b/app/views/organizations/teams/show.json.jbuilder index 25f229ce8..d0290897a 100644 --- a/app/views/organizations/teams/show.json.jbuilder +++ b/app/views/organizations/teams/show.json.jbuilder @@ -1 +1,3 @@ -json.partial! "detail", team: @team, organization: @organization \ No newline at end of file +json.partial! "detail", team: @team, organization: @organization +json.is_admin @is_admin +json.is_member @is_member \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 20d5fbe68..1a1fffd22 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -120,7 +120,11 @@ Rails.application.routes.draw do end resources :team_projects, only: [:index, :create, :destroy] do ;end end - resources :projects, only: [:index] + resources :projects, only: [:index] do + collection do + get :search + end + end end end