diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 806bab7cf..6bc2f2659 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -2,8 +2,8 @@ class UsersController < ApplicationController include ApplicationHelper include Ci::DbConnectable - before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] - before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] + before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users, :hovercard] + before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users, :hovercard] before_action :require_login, only: %i[me list sync_user_info] before_action :connect_to_ci_db, only: [:get_user_info] skip_before_action :check_sign, only: [:attachment_show] @@ -56,6 +56,9 @@ class UsersController < ApplicationController @watchers = paginate(watchers) end + def hovercard + end + def update @user = User.find params[:id] @user.update!(user_params) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index b22954bb1..ccc45df0e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -35,12 +35,6 @@ module ApplicationHelper course.course_modules.find_by(module_type: "graduation").try(:id) end - # 是否关注 - # from_user_id为被关注的用户 - def follow?(from_user_id, user_id) - Watcher.where(watchable_type: 'Principal', watchable_id: from_user_id, user_id: user_id).exists? - end - # git用户 # git用户命名规则:login+"@educoder.net" def git_username(email) diff --git a/app/models/concerns/watchable.rb b/app/models/concerns/watchable.rb index 4c52cf99a..3ab43d95a 100644 --- a/app/models/concerns/watchable.rb +++ b/app/models/concerns/watchable.rb @@ -6,6 +6,7 @@ module Watchable has_many :watcher_users, through: :watchers, source: :user, validate: false scope :watched_by, -> (user_id) { includes(:watchers).where(watchers: { user_id: user_id }) } + scope :following, -> (user_id) { watched_by } end def watched?(watchable) @@ -21,6 +22,24 @@ module Watchable obj.destroy! if obj.present? end + # 我正在关注的、我追随的 + def following + User.following(self.id) + end + + def following_count + following.size + end + + # 关注我的、我的粉丝、我的追随者 + def followers + watcher_users + end + + def followers_count + followers.size + end + module ClassMethods end end diff --git a/app/models/user.rb b/app/models/user.rb index 26b61000c..2317c402e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -138,10 +138,6 @@ class User < Owner has_many :attachments,foreign_key: :author_id, :dependent => :destroy - # 关注 - # has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注 - # has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户 - has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', dependent: :destroy # 认证 diff --git a/app/models/user/avatar.rb b/app/models/user/avatar.rb index 7a1a174c3..22f770cdd 100644 --- a/app/models/user/avatar.rb +++ b/app/models/user/avatar.rb @@ -11,11 +11,17 @@ class User end def get_letter_avatar_url(size = :lg) - avatar_path(size).split('public/')&.last + avatar_path(self.username, size).split('public/')&.last end - def avatar_path(size) - LetterAvatar.generate self.username, avatar_size(size) + def self.get_letter_avatar_url(name) + return "" if name.blank? + avatar = LetterAvatar.generate Pinyin.t(name), 120 + avatar.split('public/')&.last + end + + def avatar_path(username, size) + LetterAvatar.generate username, avatar_size(size) end # 返回头像尺寸 diff --git a/app/views/pull_requests/_commit.json.jbuilder b/app/views/pull_requests/_commit.json.jbuilder index 072e53c91..7a9232efe 100644 --- a/app/views/pull_requests/_commit.json.jbuilder +++ b/app/views/pull_requests/_commit.json.jbuilder @@ -1,10 +1,10 @@ json.author do - author = User.find_by(login: commit['Author']['Name']) + author = User.find_by(mail: commit['Author']['Email']) json.partial! 'repositories/commit_author', locals: { user: author, name: commit['Committer']['Name'] } end json.committer do - author = User.find_by(login: commit['Committer']['Name']) + author = User.find_by(mail: commit['Committer']['Email']) json.partial! 'repositories/commit_author', locals: { user: author, name: commit['Committer']['Name'] } end json.timestamp render_unix_time(commit['Committer']['When']) diff --git a/app/views/repositories/_commit_author.json.jbuilder b/app/views/repositories/_commit_author.json.jbuilder index d57e7c534..1478cca0e 100644 --- a/app/views/repositories/_commit_author.json.jbuilder +++ b/app/views/repositories/_commit_author.json.jbuilder @@ -7,5 +7,5 @@ else json.id nil json.login name json.name name - json.image_url File.join("avatars/User","b") + json.image_url User::Avatar.get_letter_avatar_url(name) end diff --git a/app/views/repositories/commits.json.jbuilder b/app/views/repositories/commits.json.jbuilder index 82cd17133..16744858e 100644 --- a/app/views/repositories/commits.json.jbuilder +++ b/app/views/repositories/commits.json.jbuilder @@ -5,12 +5,15 @@ else json.total_count @hash_commit[:total_count] json.commits do json.array! @hash_commit[:body] do |commit| - json.commit1 commit commiter = commit['committer'] - if commiter.present? - commit_user_id = commiter['id'] - forge_user = User.simple_select.find_by(gitea_uid: commit_user_id) - end + + forge_user = + if commiter.present? + User.simple_select.find_by(mail: commiter['email']) + else + User.simple_select.find_by(mail: commit['commit']['committer']['email']) + end + json.sha commit['sha'] json.message commit['commit']['message'] json.timestamp render_unix_time(commit['commit']['author']['date']) @@ -23,7 +26,7 @@ else json.login commit['commit']['author']['name'] json.type nil json.name commit['commit']['author']['name'] - json.image_url File.join("avatars/User","b") + json.image_url User::Avatar.get_letter_avatar_url(commit['commit']['author']['name']) end end end diff --git a/app/views/users/courses/index.json.jbuilder b/app/views/users/courses/index.json.jbuilder deleted file mode 100644 index 614e06391..000000000 --- a/app/views/users/courses/index.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ - -json.count @count -json.courses @courses, partial: 'users/courses/shared/course', as: :course diff --git a/app/views/users/courses/shared/_course.json.jbuilder b/app/views/users/courses/shared/_course.json.jbuilder deleted file mode 100644 index a0c5ddc73..000000000 --- a/app/views/users/courses/shared/_course.json.jbuilder +++ /dev/null @@ -1,18 +0,0 @@ -json.id course.id -json.name course.name -# json.members_count course.members_count -json.members_count course.course_members_count -# json.homework_commons_count course.homework_commons_count -json.homework_commons_count get_tasks_count course -json.attachments_count course.attachments.count -json.visits course.visits -json.school course.school&.name - -json.first_category_url module_url(course.course_modules.where(hidden: 0).order(position: :desc).first, course) - -json.is_public course.is_public -json.can_visited observed_logged_user? || course.can_visited? - -json.teacher do - json.partial! 'users/shared/real_user', user: course.teacher -end \ No newline at end of file diff --git a/app/views/users/hovercard.json.jbuilder b/app/views/users/hovercard.json.jbuilder new file mode 100644 index 000000000..d74a14314 --- /dev/null +++ b/app/views/users/hovercard.json.jbuilder @@ -0,0 +1,15 @@ +json.id @user.id +json.login @user.login +json.name @user.full_name +json.image_url url_to_avatar(@user) +json.url "#{request.base_url }/users/#{@user.login}" +json.followers_count @user.followers_count +json.following_count @user.following_count +json.projects_count @user.projects_count +json.is_watch current_user&.watched?(@user) +json.organizations @user.organizations do |organization| + json.login organization.login + json.name organization.full_name + json.image_url url_to_avatar(organization) + json.url "#{request.base_url }/organize/#{organization.login}" +end \ No newline at end of file diff --git a/app/views/users/shixuns/index.json.jbuilder b/app/views/users/shixuns/index.json.jbuilder deleted file mode 100644 index a5321f1cd..000000000 --- a/app/views/users/shixuns/index.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ - -json.count @count -json.shixuns @shixuns, partial: 'users/shixuns/shared/shixun', as: :shixun, locals: { user: observed_user } diff --git a/app/views/users/shixuns/shared/_shixun.json.jbuilder b/app/views/users/shixuns/shared/_shixun.json.jbuilder deleted file mode 100644 index 663522e53..000000000 --- a/app/views/users/shixuns/shared/_shixun.json.jbuilder +++ /dev/null @@ -1,10 +0,0 @@ -json.id shixun.id -json.identifier shixun.identifier -json.tag shixun.first_tag_repertoire&.name -json.image_url url_to_avatar(shixun) -json.name shixun.name -json.status shixun.status -json.human_status shixun.human_status -json.challenges_count shixun.challenges_count -json.finished_challenges_count @finished_challenges_count_map&.fetch(shixun.id, 0) || shixun.finished_challenges_count(user) -json.is_jupyter shixun.is_jupyter \ No newline at end of file diff --git a/app/views/users/videos/_video.json.jbuilder b/app/views/users/videos/_video.json.jbuilder deleted file mode 100644 index 1e09ca4b9..000000000 --- a/app/views/users/videos/_video.json.jbuilder +++ /dev/null @@ -1,6 +0,0 @@ -json.extract! video, :id, :title, :cover_url, :file_url, :play_url, :vv, :user_id - -json.play_duration video.video_play_duration -json.published_at video.display_published_at -json.created_at video.display_created_at -json.updated_at video.display_updated_at \ No newline at end of file diff --git a/app/views/users/videos/index.json.jbuilder b/app/views/users/videos/index.json.jbuilder deleted file mode 100644 index f4a34aa00..000000000 --- a/app/views/users/videos/index.json.jbuilder +++ /dev/null @@ -1,2 +0,0 @@ -json.count @count -json.videos @videos, partial: 'video', as: :video \ No newline at end of file diff --git a/app/views/users/videos/review.json.jbuilder b/app/views/users/videos/review.json.jbuilder deleted file mode 100644 index 3e0fe8b93..000000000 --- a/app/views/users/videos/review.json.jbuilder +++ /dev/null @@ -1,7 +0,0 @@ -json.count @count -json.videos do - json.array! @videos.each do |video| - json.partial! 'video', video: video - json.file_url nil - end -end \ No newline at end of file diff --git a/app/views/users/videos/update.json.jbuilder b/app/views/users/videos/update.json.jbuilder deleted file mode 100644 index ed69a174c..000000000 --- a/app/views/users/videos/update.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.partial! 'video', video: current_video \ No newline at end of file diff --git a/app/views/weapps/code_sessions/create.json.jbuilder b/app/views/weapps/code_sessions/create.json.jbuilder deleted file mode 100644 index 280086948..000000000 --- a/app/views/weapps/code_sessions/create.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ -json.user do - json.partial! 'weapps/shared/user', locals: { user: current_user } -end \ No newline at end of file diff --git a/app/views/weapps/courses/basic_info.json.jbuilder b/app/views/weapps/courses/basic_info.json.jbuilder deleted file mode 100644 index 09639072d..000000000 --- a/app/views/weapps/courses/basic_info.json.jbuilder +++ /dev/null @@ -1,8 +0,0 @@ -json.course do - json.(@course, :id, :name) - json.code_halt @course.invite_code_halt == 1 - json.invite_code @course.invite_code_halt == 0 ? @course.generate_invite_code : "" - json.teacher_name @course.teacher.real_name - json.teacher_img url_to_avatar(@course.teacher) - json.teacher_school @course.school.try(:name) -end \ No newline at end of file diff --git a/app/views/weapps/courses/course_activities.json.jbuilder b/app/views/weapps/courses/course_activities.json.jbuilder deleted file mode 100644 index 498189cf8..000000000 --- a/app/views/weapps/courses/course_activities.json.jbuilder +++ /dev/null @@ -1,12 +0,0 @@ -json.activities @activities do |activity| - json.(activity, :course_act_id, :course_act_type) - json.author do - user = activity.user - json.name user.real_name - json.login user.login - json.img url_to_avatar(user) - end - json.created_at activity.created_at.strftime('%m-%d %H:%M:') - json.container_name activity.container_name - json.container_type activity.course_act_type == "HomeworkCommon" ? activity.course_act&.homework_type : "" -end \ No newline at end of file diff --git a/app/views/weapps/courses/edit.json.jbuilder b/app/views/weapps/courses/edit.json.jbuilder deleted file mode 100644 index 1b7d5aaa2..000000000 --- a/app/views/weapps/courses/edit.json.jbuilder +++ /dev/null @@ -1,2 +0,0 @@ -json.(@course, :id, :name, :credit, :end_date) -json.course_list_name @course.course_list&.name \ No newline at end of file diff --git a/app/views/weapps/courses/shixun_homework_category.json.jbuilder b/app/views/weapps/courses/shixun_homework_category.json.jbuilder deleted file mode 100644 index b38748597..000000000 --- a/app/views/weapps/courses/shixun_homework_category.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ -json.categories @categories.each do |category| - json.(category, :id, :name) -end \ No newline at end of file diff --git a/app/views/weapps/courses/show.json.jbuilder b/app/views/weapps/courses/show.json.jbuilder deleted file mode 100644 index c22b24426..000000000 --- a/app/views/weapps/courses/show.json.jbuilder +++ /dev/null @@ -1,4 +0,0 @@ -json.(@course, :id, :name, :course_members_count, :credit, :invite_code_halt) -json.teachers_count @course.teachers.count -json.students_count @course.students.count -json.course_identity @current_user.course_identity(@course) \ No newline at end of file diff --git a/app/views/weapps/courses/students.json.jbuilder b/app/views/weapps/courses/students.json.jbuilder deleted file mode 100644 index 8c51393f0..000000000 --- a/app/views/weapps/courses/students.json.jbuilder +++ /dev/null @@ -1,7 +0,0 @@ -json.students student_list @students, @course.excellent, @user_course_identity -json.students_count @students_count -if @course_group - json.course_group do - json.(@course_group, :id, :name, :invite_code, :course_members_count) - end -end \ No newline at end of file diff --git a/app/views/weapps/courses/teachers.json.jbuilder b/app/views/weapps/courses/teachers.json.jbuilder deleted file mode 100644 index 684c12517..000000000 --- a/app/views/weapps/courses/teachers.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ -json.teacher_list teacher_list(@teacher_list, @user_course_identity) -json.teacher_list_size @teacher_list_size -json.apply_size @applications_size \ No newline at end of file diff --git a/app/views/weapps/homes/show.json.jbuilder b/app/views/weapps/homes/show.json.jbuilder deleted file mode 100644 index f307d64fe..000000000 --- a/app/views/weapps/homes/show.json.jbuilder +++ /dev/null @@ -1,30 +0,0 @@ -json.carousels do - json.array! @carousels do |carousel| - json.extract! carousel, :id, :link, :position - - json.path carousel.link - json.image_url Util::FileManage.source_disk_file_url(carousel) - end -end - -if @advert.present? - json.advert do - json.extract! @advert, :id, :link - json.image_url Util::FileManage.source_disk_file_url(@advert) - end -else - json.advert nil -end - -json.course_count @course_count -json.courses @courses.each do |course| - json.(course, :id, :name, :visits, :course_members_count, :is_end, :invite_code_halt) - json.creator course.teacher.real_name - json.avatar_url url_to_avatar(course.teacher) - json.invite_code course.invite_code_halt == 0 ? course.generate_invite_code : "" - json.school course.school&.name - course_member = @category == "study" ? course.students.where(user_id: @user.id).first : course.teachers.where(user_id: @user.id).first - json.sticky course_member.sticky - json.course_identity current_user.course_identity(course) -end - diff --git a/app/views/weapps/registers/create.json.jbuilder b/app/views/weapps/registers/create.json.jbuilder deleted file mode 100644 index 0cfb5e30f..000000000 --- a/app/views/weapps/registers/create.json.jbuilder +++ /dev/null @@ -1,4 +0,0 @@ -json.status 0 -json.user do - json.partial! 'weapps/shared/user', locals: { user: @user } -end \ No newline at end of file diff --git a/app/views/weapps/searchs/index.json.jbuilder b/app/views/weapps/searchs/index.json.jbuilder deleted file mode 100644 index 11855fb77..000000000 --- a/app/views/weapps/searchs/index.json.jbuilder +++ /dev/null @@ -1,14 +0,0 @@ -json.count @results.total_count -json.results do - json.array! @results.with_highlights(multiple: true) do |obj, highlights| - json.merge! obj.to_searchable_json - json.type obj.class.name.downcase - - json.title highlights.delete(:name)&.join('...') || obj.searchable_title - json.cover url_to_avatar(obj) - - if obj.is_a?(Course) - json.author_avatar_url url_to_avatar(obj.teacher) - end - end -end \ No newline at end of file diff --git a/app/views/weapps/sessions/create.json.jbuilder b/app/views/weapps/sessions/create.json.jbuilder deleted file mode 100644 index 280086948..000000000 --- a/app/views/weapps/sessions/create.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ -json.user do - json.partial! 'weapps/shared/user', locals: { user: current_user } -end \ No newline at end of file diff --git a/app/views/weapps/shared/_user.json.jbuilder b/app/views/weapps/shared/_user.json.jbuilder deleted file mode 100644 index 53212ec15..000000000 --- a/app/views/weapps/shared/_user.json.jbuilder +++ /dev/null @@ -1,15 +0,0 @@ -json.username user.full_name -json.real_name user.real_name -json.login user.login -json.user_id user.id -json.image_url url_to_avatar(user) -json.admin user.admin? -json.business user.business? -json.is_teacher user.user_extension&.teacher? -json.user_identity user.identity -json.identity user.user_extension&.identity -json.tidding_count 0 -json.user_phone_binded user.phone.present? -json.phone user.phone -json.profile_completed user.profile_completed? -json.professional_certification user.professional_certification \ No newline at end of file diff --git a/app/views/weapps/unbind_accounts/show.json.jbuilder b/app/views/weapps/unbind_accounts/show.json.jbuilder deleted file mode 100644 index c4223a021..000000000 --- a/app/views/weapps/unbind_accounts/show.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.user_account @user.phone.present? ? @user.phone : (@user.mail.present? ? @user.mail : @user.login) diff --git a/config/routes.rb b/config/routes.rb index ebea0007f..a67b3b62f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -198,6 +198,7 @@ Rails.application.routes.draw do get :projects get :watch_users get :fan_users + get :hovercard end collection do post :following