diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 3c5c73b8..ecbedc3a 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -97,29 +97,37 @@ class AttachmentsController < ApplicationController upload_file = params["file"] || params["#{params[:file_param_name]}"]# 这里的file_param_name是为了方便其他插件名称 raise "未上传文件" unless upload_file - folder = edu_setting('attachment_folder') + folder = file_storage_directory raise "存储目录未定义" unless folder.present? month_folder = current_month_folder save_path = File.join(folder, month_folder) - ext = SecureRandom.urlsafe_base64 + ext = file_ext(upload_file.original_filename) local_path, digest = file_save_to_local(save_path, upload_file.tempfile, ext) content_type = upload_file.content_type.presence || 'application/octet-stream' + remote_path = nil # TODO 暂时本地上传,待域名配置后方可上传至云端 + + logger.info "local_path: #{local_path}" + logger.info "remote_path: #{remote_path}" disk_filename = local_path[save_path.size + 1, local_path.size] - @attachment = Attachment.where(disk_filename: disk_filename,author_id: current_user.id).first + @attachment = Attachment.where(disk_filename: disk_filename, + author_id: current_user.id, + cloud_url: remote_path).first + if @attachment.blank? @attachment = Attachment.new @attachment.filename = upload_file.original_filename - @attachment.disk_filename = disk_filename + @attachment.disk_filename = local_path[save_path.size + 1, local_path.size] @attachment.filesize = upload_file.tempfile.size @attachment.content_type = content_type @attachment.digest = digest @attachment.author_id = current_user.id @attachment.disk_directory = month_folder + @attachment.cloud_url = remote_path @attachment.save! @status = 1 else diff --git a/app/controllers/concerns/laboratory_helper.rb b/app/controllers/concerns/laboratory_helper.rb index 426d1a33..11659fc3 100644 --- a/app/controllers/concerns/laboratory_helper.rb +++ b/app/controllers/concerns/laboratory_helper.rb @@ -35,15 +35,15 @@ module LaboratoryHelper # my_projects: "/users/#{current_user.try(:login)}/projects", # my_projects: "https://www.trustie.net/users/#{current_user.try(:login)}/user_projectlist", { - new_syllabuses: "https://www.trustie.net/syllabuses/new", - new_course: "https://www.trustie.net/courses/new", - edit_account: "https://www.trustie.net/my/account", - my_courses: "https://www.trustie.net/users/#{current_user.try(:login)}/user_courselist", - my_projects: "https://forgeplus.trustie.net/users/#{current_user.try(:login)}/projects", - my_organ: "https://www.trustie.net/users/#{current_user.try(:login)}/user_organizations", - default_url: "https://www.trustie.net/", - tiding_url: "https://www.trustie.net/users/#{current_user.try(:login)}/user_messages", - register_url: "https://www.trustie.net/login?login=false" + new_syllabuses: "#{Rails.application.config_for(:configuration)['platform_url']}/syllabuses/new", + new_course: "#{Rails.application.config_for(:configuration)['platform_url']}/courses/new", + edit_account: "#{Rails.application.config_for(:configuration)['platform_url']}/my/account", + my_courses: "#{Rails.application.config_for(:configuration)['platform_url']}/users/#{current_user.try(:login)}/user_courselist", + my_projects: "#{Rails.application.config_for(:configuration)['platform_url']}/users/#{current_user.try(:login)}/projects", + my_organ: "#{Rails.application.config_for(:configuration)['platform_url']}/users/#{current_user.try(:login)}/user_organizations", + default_url: Rails.application.config_for(:configuration)['platform_url'], + tiding_url: "#{Rails.application.config_for(:configuration)['platform_url']}/settings/notice", + register_url: "#{Rails.application.config_for(:configuration)['platform_url']}/login?login=false" } end end diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index bb031c7b..37fc47a6 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -2,5 +2,56 @@ class SettingsController < ApplicationController def show @old_projects_url = nil @old_projects_url = "https://www.trustie.net/users/#{current_user.try(:login)}/projects" if User.current.logged? + get_add_menu + get_common_menu + get_personal_menu + end + + private + def get_add_menu + @add = [] + Site.add.select(:id, :name, :url, :key).to_a.map(&:serializable_hash).each do |site| + hash = {} + site.each {|k, v| + hash.merge!("#{k}": get_site_url(k, v)) + } + @add << hash + end + end + + def get_common_menu + @common = {} + Site.common.select(:url, :key).each do |site| + next if site["url"].to_s.include?("current_user") && !User.current.logged? + @common.merge!("#{site["key"]}": append_http(reset_site_url(site["url"]))) + end + end + + def get_personal_menu + @personal = [] + if User.current.logged? + Site.personal.select(:id, :name, :url, :key).to_a.map(&:serializable_hash).each do |site| + hash = {} + site.each {|k, v| + hash.merge!("#{k}": get_site_url(k, v)) + } + @personal << hash + end + end + end + + def get_site_url(key, value) + key.to_s === "url" ? append_http(reset_site_url(value)) : reset_site_url(value) + end + + def reset_site_url(url) + return url unless url.to_s.include?("current_user") + + split_arr = url.split('current_user') + split_arr.length > 1 ? split_arr.join(current_user&.login) : (split_arr << current_user&.login).join('') + end + + def append_http(url) + url.to_s.start_with?("http") ? url : [request.protocol, request.host_with_port, url].join('') end end diff --git a/app/models/site.rb b/app/models/site.rb new file mode 100644 index 00000000..af5e7816 --- /dev/null +++ b/app/models/site.rb @@ -0,0 +1,79 @@ +# == Schema Information +# +# Table name: sites +# +# id :integer not null, primary key +# name :string(255) +# url :string(255) +# key :string(255) +# site_type :integer +# created_at :datetime not null +# updated_at :datetime not null +# + +class Site < ApplicationRecord + # add: 添加类链接 + # personal: 个人名下类链接, + # common: 普通链接 + enum site_type: { add: 0, personal: 1, common: 2 } + + scope :by_search, -> (keyword){ where("name LIKE :keyword OR url LIKE :keyword", keyword: "%#{strip_param(keyword)}%") unless strip_param(keyword).blank? } + scope :by_site_type, -> (site_type){ where(site_type: strip_param(site_type)) unless strip_param(site_type).blank? } + + def self.set_default_menu + set_add_menu! + set_personal_menu! + set_common_menu! + end + + def self.has_notice_menu? + self.common.where(key: 'notice').present? + end + + private + def self.set_add_menu! + adds= [ + {name: '新建项目', key: 'add_mirror_project', url: '/projects/mirror/new'}, + {name: '导入项目', key: 'add_common', url: '/projects/deposit/new'}, + {name: '新建组织', key: 'add_r', url: '/organize/new'}] + + adds.each { |ele| + Site.find_or_create_by(key: ele[:key]) do |site| + site.name = ele[:name] + site.url = ele[:url] + site.site_type = Site.site_types[:add] + end + } + end + + def self.set_personal_menu! + personals = [ + {name: '个人中心', key: 'my_page', url: '/users/current_user'}, + {name: '我的组织', key: 'my_organizes', url: '/users/current_user/organizes'} + ] + + personals.each { |ele| + Site.find_or_create_by(key: ele[:key]) do |site| + site.name = ele[:name] + site.url = ele[:url] + site.site_type = Site.site_types[:personal] + end + } + end + + def self.set_common_menu! + commons = [ + {name: '通知', key: 'notice', url: '/users/current_user/user_messages'}, + {name: '找回密码', key: 'lost_password', url: '/account/lost_password'}, + {name: '注册', key: 'register', url: '/login?login=false'} + ] + + commons.each { |ele| + Site.find_or_create_by(key: ele[:key]) do |site| + site.name = ele[:name] + site.url = ele[:url] + site.site_type = Site.site_types[:common] + end + } + end +end diff --git a/app/services/memos_service.rb b/app/services/memos_service.rb index 8d31ac5d..a01305d2 100644 --- a/app/services/memos_service.rb +++ b/app/services/memos_service.rb @@ -131,7 +131,7 @@ class MemosService :filesize => memo_image.filesize} if memo_image user_praise = PraiseTread.is_user_praise(memo.id, "Memo", current_user.try(:id)).exists? - memo.update_column(:viewed_count, memo.viewed_count + 1) + memo.update_column(:viewed_count, memo.viewed_count + 1) if params[:only_data].blank? # 帖子的回复 memos = memo.reply_for_memo unless current_user.try(:admin?) # 只有管理员和发布人能看到隐藏的回复 diff --git a/app/views/settings/show.json.jbuilder b/app/views/settings/show.json.jbuilder index 8f818b47..58af296d 100644 --- a/app/views/settings/show.json.jbuilder +++ b/app/views/settings/show.json.jbuilder @@ -48,4 +48,13 @@ json.setting do json.old_projects_url @old_projects_url + json.add do + json.array! @add + end + + json.personal do + json.array! @personal + end + + json.common @common end \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico index 75a4c3df..ad428fa2 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ