diff --git a/Gemfile b/Gemfile index 989571b6..83963a31 100644 --- a/Gemfile +++ b/Gemfile @@ -14,7 +14,7 @@ gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.5' gem 'groupdate', '~> 4.1.0' gem 'chartkick' -gem 'grape', '~> 0.9.0' +# gem 'grape', '~> 0.9.0' gem 'grape-entity', '~> 0.7.1' gem 'kaminari', '~> 1.1', '>= 1.1.1' diff --git a/Gemfile.lock b/Gemfile.lock index 58b9a89f..9190d340 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -70,10 +70,6 @@ GEM autoprefixer-rails (9.7.4) execjs awesome_print (1.8.0) - axiom-types (0.1.1) - descendants_tracker (~> 0.0.4) - ice_nine (~> 0.11.0) - thread_safe (~> 0.3, >= 0.3.1) axlsx (3.0.0.pre) htmlentities (~> 4.3, >= 4.3.4) mimemagic (~> 0.3) @@ -109,15 +105,11 @@ GEM archive-zip (~> 0.10) nokogiri (~> 1.8) chunky_png (1.3.11) - coercible (1.0.0) - descendants_tracker (~> 0.0.1) concurrent-ruby (1.1.6) connection_pool (2.2.2) crass (1.0.6) deep_cloneable (3.0.0) activerecord (>= 3.1.0, < 7) - descendants_tracker (0.0.4) - thread_safe (~> 0.3, >= 0.3.1) diff-lcs (1.3) diffy (3.3.0) e2mmap (0.1.0) @@ -131,7 +123,6 @@ GEM multi_json enumerize (2.3.1) activesupport (>= 3.2) - equalizer (0.0.11) erubi (1.9.0) execjs (2.7.0) faraday (0.15.4) @@ -141,16 +132,6 @@ GEM sass (>= 3.2) globalid (0.4.2) activesupport (>= 4.2.0) - grape (0.9.0) - activesupport - builder - hashie (>= 2.1.0) - multi_json (>= 1.3.2) - multi_xml (>= 0.5.2) - rack (>= 1.3.0) - rack-accept - rack-mount - virtus (>= 1.0.0) grape-entity (0.7.1) activesupport (>= 4.0) multi_json (>= 1.3.2) @@ -164,7 +145,6 @@ GEM multi_xml (>= 0.5.2) i18n (1.8.2) concurrent-ruby (~> 1.0) - ice_nine (0.11.2) io-like (0.3.1) jaro_winkler (1.5.4) jbuilder (2.10.0) @@ -244,14 +224,10 @@ GEM public_suffix (4.0.3) puma (3.12.2) rack (2.0.9) - rack-accept (0.4.5) - rack (>= 0.4) rack-cors (1.1.1) rack (>= 2.0.0) rack-mini-profiler (2.0.1) rack (>= 1.2.0) - rack-mount (0.8.3) - rack (>= 1.0.0) rack-protection (2.0.8.1) rack rack-test (1.1.0) @@ -441,11 +417,6 @@ GEM uglifier (4.2.0) execjs (>= 0.3.0, < 3) unicode-display_width (1.6.1) - virtus (1.0.5) - axiom-types (~> 0.1) - coercible (~> 1.0) - descendants_tracker (~> 0.0, >= 0.0.3) - equalizer (~> 0.0, >= 0.0.9) web-console (3.7.0) actionview (>= 5.0) activemodel (>= 5.0) @@ -485,7 +456,6 @@ DEPENDENCIES faraday (~> 0.15.4) font-awesome-sass (= 4.7.0) gitlab! - grape (~> 0.9.0) grape-entity (~> 0.7.1) groupdate (~> 4.1.0) harmonious_dictionary (~> 0.0.1) diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb deleted file mode 100644 index 7a3586bd..00000000 --- a/app/api/mobile/api.rb +++ /dev/null @@ -1,107 +0,0 @@ -#coding=utf-8 -# status值 -# 0:成功;-1:500错误;403:无权限;404:页面不存在 - -module Mobile - require_relative 'middleware/error_handler' - require_relative 'apis/auth' - require_relative 'apis/memos' - require_relative 'apis/forum_sections' - require_relative 'apis/my_memos' - # require_relative 'apis/my_forums' - - class API < Grape::API - version 'v1', using: :path - format :json - content_type :json, "application/json;charset=UTF-8" - # use ActionDispatch::Session::CookieStore - use Middleware::ErrorHandler - - helpers do - def logger - API.logger - end - - def authenticate! - begin - # current_user = User.find(2) if current_user.blank? - if params[:debug] == 'admin' - logger.info("Login as admin user, for test only") - User.current = User.find 1 - elsif params[:debug] == 'normal' - logger.info("Login as normal user, for test only") - User.current = User.where(admin:false).first - end - rescue Exception => e - return {:status => -2, :message => 'Unauthorized. 用户认证失败.'} - end - - end - - # def manager_of_game - # myshixun_id = Game.where(:identifier => params[:identifier]).pluck(:myshixun_id).first - # myshixun = Myshixun.find(myshixun_id) - # unless (current_user.admin? || myshixun.user_id == current_user.id) - # return {} - # end - # end - # - def session - env['rack.session'] - end - - def current_user - openid = session[:wechat_openid] - if openid - uw = UserWechat.find_by_openid(openid) - return uw.user if uw - end - - token = ApiKey.where(access_token: params[:token]).first - if token && !token.expired? - return User.find(token.user_id) - end - - # 本地调试找不到用户信息 - if Rails.env.development? && session[:user_id].blank? - # session[:user_id] = 12 #116 - end - - if session[:user_id].blank? || params[:debug].present? - if params[:debug] == 'admin' - Rails.logger.info("######________session_user_id________#############{session[:user_id]}") - logger.info("Login as admin user, for test only") - User.current = User.find 1 - session[:user_id] = 1 - elsif params[:debug] == 'normal' - logger.info("Login as normal user, for test only") - User.current = User.find 49 - session[:user_id] = 49 - else - session[:user_id] = 2 - end - end - - Rails.logger.info("####### session user_id is #{session[:user_id]}") - if session[:user_id] - user = (User.find(session[:user_id]) rescue nil) - return user if user - end - nil - end - - def current_user_ip - env['REMOTE_ADDR'] - end - end - - mount Apis::Auth - mount Apis::Memos - mount Apis::ForumSections - mount Apis::MyMemos - # add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) if Rails.env.development? - - end -end - - diff --git a/app/api/mobile/apis/auth.rb b/app/api/mobile/apis/auth.rb deleted file mode 100644 index 9f89d56d..00000000 --- a/app/api/mobile/apis/auth.rb +++ /dev/null @@ -1,60 +0,0 @@ -#coding=utf-8 - -module Mobile - - module Entities - class Auth < Grape::Entity - expose :token - expose :user, using: User - end - end - - module Apis - class Auth < Grape::API - resource :auth do - desc "用户登录" - params do - requires :login, type: String, desc: 'Username or email' - requires :password, type: String, desc: 'Password' - end - post do - user,last_logon = ::User.try_to_login(params[:login], params[:password]) - if user - ::ApiKey.delete_all(user_id: user.id) - key = ::ApiKey.create!(user_id: user.id) - api_user = ::UsersService.new.show_user({id:user.id}) - present :data, {token: key.access_token, user: api_user}, using: Entities::Auth - present :status, 0 - else - present :message, "无效的用户名或密码" - present :status,1 - end - end - - desc "用户登出" - params do - requires :token, type: String - end - delete do - authenticate! - ::ApiKey.delete_all(user_id: current_user.id) - {status: 0} - end - - desc "忘记密码" - params do - requires :mail,type: String - end - post 'lost_password' do - us = UsersService.new - message = us.lost_password params - present :message, message - present :status, 0 - end - - end - end - end -end - - diff --git a/app/api/mobile/apis/forum_sections.rb b/app/api/mobile/apis/forum_sections.rb deleted file mode 100644 index a5ffc682..00000000 --- a/app/api/mobile/apis/forum_sections.rb +++ /dev/null @@ -1,199 +0,0 @@ -#coding=utf-8 -module Mobile - module Apis - class ForumSections < Grape::API - before {authenticate!} - content_type :json, 'application/json;charset=UTF-8' - - resources :forum_sections do - - desc "获取板块的筛选分类" - get "select_sections" do - ForumSectionsService.new.select_sections - end - - desc "获取板块的全部分类" - get do - ForumSectionsService.new.index params - end - - desc "申请版主" - params do - requires :id, type: Integer, desc: "版块的id" - end - route_param :id do - post "user_apply" do - ForumSectionsService.new.user_apply params, current_user, current_user_ip - end - end - - desc "发布公告" - params do - requires :id, type: Integer, desc: "版块的id" - requires :content, type: String, desc: "公告的内容" - end - route_param :id do - post "edit_notice" do - ForumSectionsService.new.edit_notice params - end - end - - desc "版块的头部信息" - params do - requires :id, type: Integer, desc: "版块的id" - end - route_param :id do - get "forum_section_header" do - ForumSectionsService.new.forum_section_header params, current_user - end - end - - desc "新增二级版块" - params do - requires :id, type: Integer, desc: "版块的id" - requires :title, type: String, desc: "版块的名称" - end - route_param :id do - post 'create' do - ForumSectionsService.new.create params, current_user - end - end - - desc "重命名" - params do - requires :id, type: Integer, desc: "版块的id" - requires :children_section_id, type: Integer, desc: "二级版块的id" - requires :title, type: String, desc: "版块的名称" - end - route_param :id do - post "rename" do - ForumSectionsService.new.rename params, current_user - end - end - - desc "删除二级版块" - params do - requires :id, type: Integer, desc: "版块的id" - requires :children_section_id, type: Integer, desc: "二级版块的id" - end - route_param :id do - post "destroy" do - ForumSectionsService.new.destroy params, current_user - end - end - - desc "排序" - params do - requires :id, type: Integer, desc: "版块的id" - requires :order_type, type: String, desc: "排序按desc,和asc排序" - end - route_param :id do - get "order_forums" do - ForumSectionsService.new.order_forums params, current_user - end - end - - desc "搜索用户" - params do - requires :id, type: Integer, desc: "版块的id" - requires :page, type: Integer, desc: "初次(第一页)为0" - # requires :user_name, type: String, desc: "输入的关键字" - end - route_param :id do - get "search_users" do - ForumSectionsService.new.search_users params, current_user - end - end - - desc "二级版块添加管理员" - params do - requires :id, type: Integer, desc: "版块的id" - requires :user_ids, type: Array, desc: "输入的关键字" - requires :children_section_id, type: Integer, desc: "二级版块的id" - end - route_param :id do - post "add_users" do - ForumSectionsService.new.add_users params, current_user - end - end - - - desc "管理员页面的版块管理" - params do - requires :id, type: Integer, desc: "版块的id" - end - route_param :id do - get "managements" do - ForumSectionsService.new.managements params, current_user - end - end - - desc "管理员页面的申请接口" - params do - requires :id, type: Integer, desc: "版块的id" - end - route_param :id do - get "applied_forums" do - ForumSectionsService.new.applied_forums params, current_user - end - end - - desc "管理员页面的申请处理" - params do - requires :id, type: Integer, desc: "版块的id" - requires :apply_id, type: Integer, desc: "申请的id" - requires :deal_type, type: Integer, desc: "处理的方式,1为同意,2为拒绝" - end - route_param :id do - post "deal_applies/:apply_id" do - ForumSectionsService.new.deal_applies params, current_user - end - end - - desc "管理员页面的删除二级版主" - params do - requires :id, type: Integer, desc: "版块的id" - requires :moderator_id, type: Integer, desc: "版主的id" - end - route_param :id do - post "destroy_moderator/:moderator_id" do - ForumSectionsService.new.destroy_moderator params, current_user - end - end - - desc "待审核的帖子" - params do - requires :id, type: Integer, desc: "版块的待审核id" - requires :page, type: String, desc: "初次(第一页)为0" - end - route_param :id do - get "unchecked_memos" do - ForumSectionsService.new.unchecked_memos params, current_user - end - end - - desc "待审查的回复" - params do - requires :id, type: Integer, desc: "版块的待审核id" - requires :page, type: String, desc: "初次(第一页)为0" - end - route_param :id do - get "unchecked_replies" do - ForumSectionsService.new.unchecked_replies params, current_user - end - end - - desc "已发布的帖子" - params do - requires :id, type: Integer, desc: "版块的待审核id" - requires :page, type: String, desc: "初次(第一页)为0" - end - route_param :id do - get "checked_memos" do - ForumSectionsService.new.checked_memos params, current_user - end - end - end - end - end -end diff --git a/app/api/mobile/apis/memos.rb b/app/api/mobile/apis/memos.rb deleted file mode 100644 index 8e4b82dc..00000000 --- a/app/api/mobile/apis/memos.rb +++ /dev/null @@ -1,241 +0,0 @@ -# encoding=utf-8 -module Mobile - module Apis - class Memos < Grape::API - before {authenticate!} - content_type :json, 'application/json;charset=UTF-8' - - resources :memos do - - desc "帖子详情推荐" - params do - requires :id, type: Integer, desc: "帖子详情推荐" - end - get ':id/related_memos' do - MemosService.new.related_memos params - end - - desc "新建帖子" - get 'new' do - MemosService.new.new params, current_user, session - end - - desc "新建保存帖子" - params do - requires :memo, type: Hash do - requires :subject, type: String, desc: "帖子名" - requires :content, type: String, desc: "帖子内容" - end - requires :forum_id, type: Integer, desc: "帖子类型" - end - post 'create' do - MemosService.new.create params, current_user - end - - desc "帖子详情" - params do - requires :id, type: Integer, desc: "帖子ID" - end - get ':id' do - MemosService.new.show params, current_user - end - - desc "收藏帖子" - params do - requires :id, type: Integer, desc: "帖子ID" - requires :is_watch, type: Integer, desc:"顶置: 1 关注,0 取消关注 " - end - route_param :id do - post 'watch_memo' do - MemosService.new.watch_memo params, current_user - end - end - - desc "讨论区列表" - get do - MemosService.new.index params, current_user - end - - desc "编辑帖子" - params do - requires :id, type: Integer, desc: "编辑帖子的ID" - end - route_param :id do - get 'edit' do - MemosService.new.edit params, current_user - end - end - - desc "更新帖子" - params do - requires :id, type: Integer, desc: "帖子ID" - end - route_param :id do - post 'update' do - MemosService.new.update params, current_user - end - end - - # TODO 本来可以跟实训评论一起用,但说不要动实训,所以另起一个方法 - desc "隐藏帖子" - params do - requires :id, type: Integer, desc: "帖子ID" - end - route_param :id do - get :hidden do - Memo.find(params[:id]).update_attribute(:hidden, true) - {status: 0, message: "隐藏成功"} - end - end - - desc "帖子设置审核通过/不通过" - params do - requires :id, type: Integer, desc: "帖子ID" - end - route_param :id do - post :memo_hidden do - MemosService.new.memo_hidden params, current_user - end - end - - desc "回复帖子" - params do - requires :parent_id, type: Integer, desc: "给那个帖子的回复id" - requires :content, type: String, desc: "回复内容" - end - route_param :root_id do - post :reply do - MemosService.new.reply params, current_user - end - end - - desc "隐藏回复帖子" - params do - requires :id, type: Integer, desc: "要隐藏的对象id。如:memo.id" - requires :hidden, type: String - end - route_param :id do - post 'hidden' do - MemosService.new.hidden(params, current_user) - return {:status => 1, :message => "success"} - end - end - - desc "删除帖子/评论" - params do - requires :id, type: Integer, desc: "帖子ID" - end - route_param :id do - post "destroy" do - MemosService.new.destroy params, current_user - end - end - # delete ":id" do - # Memo.find(params[:id]).destroy - # end - - desc "设置贴子顶置/取消顶置" - params do - requires :id, type: Integer, desc: "帖子ID" - requires :sticky, type: Integer, desc:"顶置: 1 置顶,0 取消置顶 " - end - route_param :id do - get "set-top-or-down" do - MemosService.new.set_top_or_down params, current_user - end - end - - desc "设置贴子加精/取消加精推荐" - params do - requires :id, type: Integer, desc: "帖子ID" - requires :is_fine, type: Integer, desc:"加精: 1 加精,0 取消加精 " - end - route_param :id do - post "is_fine" do - MemosService.new.is_fine params, current_user - end - end - - desc "用户禁言或取消禁言" - params do - requires :id, type: Integer, desc: "帖子ID" - requires :user_id, type: Integer, desc:"被禁言用户的id" - requires :banned, type: Integer, desc:"顶置: 1 禁言,0 取消禁言 " - end - route_param :id do - post "banned_user" do - MemosService.new.banned_user params, current_user - end - end - - desc "帖子回复更多" - params do - requires :id, type: Integer, desc: "帖子ID" - requires :page, type: String, desc: "初次(第一页)为0" - end - route_param :id do - get "more_reply" do - MemosService.new.more_reply params, current_user - end - end - - desc "版块的全部帖子" - - params do - requires :id, type: Integer, desc: "版块的ID" - requires :page, type: String, desc: "初次(第一页)为0" - # requires :forum_type, type: String, desc: "列表页的分类选择" - end - get "forum_memos/:id" do - MemosService.new.forum_memos params, current_user - end - - desc "版块的头部信息" - - params do - requires :id, type: Integer, desc: "版块的ID" - end - get "forum_memos_head/:id" do - MemosService.new.forum_memos_head params, current_user - end - - desc "版块的右侧信息" - - params do - requires :id, type: Integer, desc: "版块的ID" - end - get "forum_memos_right/:id" do - MemosService.new.forum_memos_right params, current_user - end - # route_param :id do - # - # end - desc "版块的关注" - params do - requires :id, type: Integer, desc: "版块的ID" - requires :is_watch, type: Integer, desc:"顶置: 1 关注,0 取消关注 " - end - post "forum_memos/:id/is_watch" do - MemosService.new.is_watch params, current_user - end - - desc "申请删除帖子" - params do - requires :id, type: Integer, desc: "帖子的id" - end - post ":id/confirm_delete" do - MemosService.new.confirm_delete params, current_user - end - - - # desc "版块的首页" - # params do - # requires :page, type: String, desc: "初次(第一页)为0" - # end - # get "index" do - # MemosService.new.index params, current_user - # end - end - end - end -end \ No newline at end of file diff --git a/app/api/mobile/apis/my_memos.rb b/app/api/mobile/apis/my_memos.rb deleted file mode 100644 index 921e7700..00000000 --- a/app/api/mobile/apis/my_memos.rb +++ /dev/null @@ -1,32 +0,0 @@ -#coding=utf-8 -module Mobile - module Apis - class MyMemos < Grape::API - before {authenticate!} - content_type :json, 'application/json;charset=UTF-8' - - resources :my_memos do - desc "我的话题" - get ":login/memos" do - MyMemosService.new.index params, current_user - end - - desc "我感兴趣的话题" - get ":login/my_interested" do - MyMemosService.new.my_interested params, current_user - end - - desc "我的回帖" - get ":login/replies_memos" do - MyMemosService.new.replies_memos params,current_user - end - - desc "右侧推荐" - get "recommend_memos" do - MyMemosService.new.recommend_memos current_user - end - - end - end - end -end diff --git a/app/api/mobile/exceptions/auth_exception.rb b/app/api/mobile/exceptions/auth_exception.rb deleted file mode 100644 index 5dceab57..00000000 --- a/app/api/mobile/exceptions/auth_exception.rb +++ /dev/null @@ -1,13 +0,0 @@ -#coding=utf-8 -# -module Mobile - module Exceptions - class AuthException < StandardError - attr_reader :err_code, :msg - def initialize(code, msg) - @err_code = code - @msg = msg - end - end - end -end diff --git a/app/api/mobile/middleware/error_handler.rb b/app/api/mobile/middleware/error_handler.rb deleted file mode 100644 index 40eaa581..00000000 --- a/app/api/mobile/middleware/error_handler.rb +++ /dev/null @@ -1,26 +0,0 @@ -#coding=utf-8 - - -module Mobile - module Middleware - class ErrorHandler < Grape::Middleware::Base - def call!(env) - @env = env - begin - @app.call(@env) - rescue =>e - code = -1 - - message = {status: code, message: e.message }.to_json - - Rails.logger.error e.inspect - Rails.logger.error e.backtrace.join("\n") - status = 200 - headers = { 'Content-Type' => content_type } - Rack::Response.new([message], status, headers).finish - # throw :error, :message => e.message || options[:default_message], :status => 500 - end - end - end - end -end diff --git a/app/controllers/admins/forum_moderators_controller.rb b/app/controllers/admins/forum_moderators_controller.rb index e028890b..0356952b 100644 --- a/app/controllers/admins/forum_moderators_controller.rb +++ b/app/controllers/admins/forum_moderators_controller.rb @@ -43,7 +43,7 @@ class Admins::ForumModeratorsController < Admins::BaseController users = User.where("( LOWER(login) LIKE ? or LOWER(concat(lastname, firstname)) LIKE ? or LOWER(mail) LIKE ? )", "%#{user_name}%","%#{user_name}%","%#{user_name}%") users.each do |u| - check_html = "" + check_html = "" return_html << check_html end end diff --git a/app/controllers/forum_sections_controller.rb b/app/controllers/forum_sections_controller.rb new file mode 100644 index 00000000..30209574 --- /dev/null +++ b/app/controllers/forum_sections_controller.rb @@ -0,0 +1,101 @@ +class ForumSectionsController < ApplicationController + + def index + targets = ForumSectionsService.new.index params + render json: targets + end + + def select_sections + targets = ForumSectionsService.new.select_sections + render json: targets + end + + def user_apply + targets = ForumSectionsService.new.user_apply params, current_user, current_user_ip + render json: targets + end + + def edit_notice + targets = ForumSectionsService.new.edit_notice params + render json: targets + end + + def forum_section_header + targets = ForumSectionsService.new.forum_section_header params, current_user + render json: targets + end + + def create + targets = ForumSectionsService.new.create params, current_user + render json: targets + end + + def rename + targets = ForumSectionsService.new.rename params, current_user + render json: targets + end + + def destroy + targets = ForumSectionsService.new.destroy params, current_user + render json: targets + end + + def order_forums + targets = ForumSectionsService.new.order_forums params, current_user + render json: targets + end + + def search_users + targets = ForumSectionsService.new.search_users params, current_user + render json: targets + end + + def add_users + targets = ForumSectionsService.new.add_users params, current_user + render json: targets + end + + def managements + targets = ForumSectionsService.new.managements params, current_user + render json: targets + end + + def applied_forums + targets = ForumSectionsService.new.applied_forums params, current_user + render json: targets + end + + def deal_applies + targets = ForumSectionsService.new.deal_applies params, current_user + render json: targets + end + + def destroy_moderator + targets = ForumSectionsService.new.destroy_moderator params, current_user + render json: targets + end + + def unchecked_memos + targets = ForumSectionsService.new.unchecked_memos params, current_user + render json: targets + end + + def unchecked_replies + targets = ForumSectionsService.new.unchecked_replies params, current_user + render json: targets + end + + def checked_memos + targets = ForumSectionsService.new.checked_memos params, current_user + render json: targets + end + + private + + def current_user_ip + env['REMOTE_ADDR'] + end + + + +end \ No newline at end of file diff --git a/app/controllers/memos_controller.rb b/app/controllers/memos_controller.rb new file mode 100644 index 00000000..0b84acfe --- /dev/null +++ b/app/controllers/memos_controller.rb @@ -0,0 +1,109 @@ +class MemosController < ApplicationController + before_action :require_login, only: [:create, :edit, :update, :watch_memo] + + def index + memos = MemosService.new.index params, current_user + render json: memos + end + + def related_memos + targets = MemosService.new.related_memos params, current_user + render json: targets + end + + def edit + targets = MemosService.new.edit params, current_user + render json: targets + end + + def update + targets = MemosService.new.update params, current_user + render json: targets + end + + def create + params.permit! + targets = MemosService.new.create params, current_user + render json: targets + end + + def show + targets = MemosService.new.show params, current_user + render json: targets + end + + def watch_memo + targets = MemosService.new.watch_memo params, current_user + render json: targets + end + + def hidden + Memo.find(params[:id]).update_attribute(:hidden, true) + {status: 0, message: "隐藏成功"} + end + + def memo_hidden + targets = MemosService.new.memo_hidden params, current_user + render json: targets + end + + def reply + targets = MemosService.new.reply params, current_user + render json: targets + end + + def destroy + targets = MemosService.new.destroy params, current_user + render json: targets + end + + def set_top_or_down + targets = MemosService.new.set_top_or_down params, current_user + render json: targets + end + + def is_fine + targets = MemosService.new.is_fine params, current_user + render json: targets + end + + def banned_user + targets = MemosService.new.banned_user params, current_user + render json: targets + end + + def more_reply + targets = MemosService.new.more_reply params, current_user + render json: targets + end + + def forum_memos + targets = MemosService.new.forum_memos params, current_user + render json: targets + end + + def forum_memos_head + targets = MemosService.new.forum_memos_head params, current_user + render json: targets + end + + def forum_memos_right + targets = MemosService.new.forum_memos_right params, current_user + render json: targets + end + + def is_watch + targets = MemosService.new.is_watch params, current_user + render json: targets + end + + def confirm_delete + targets = MemosService.new.confirm_delete params, current_user + render json: targets + end + + def plus + targets = MemosService.new.plus params, current_user + render json: targets + end +end \ No newline at end of file diff --git a/app/controllers/my_memos_controller.rb b/app/controllers/my_memos_controller.rb new file mode 100644 index 00000000..b3758601 --- /dev/null +++ b/app/controllers/my_memos_controller.rb @@ -0,0 +1,22 @@ +class MyMemosController < ApplicationController + + def index + targets = MyMemosService.new.index params, current_user + render json: targets + end + + def my_interested + targets = MyMemosService.new.my_interested params, current_user + render json: targets + end + + def replies_memos + targets = MyMemosService.new.replies_memos params,current_user + render json: targets + end + + def recommend_memos + targets = MyMemosService.new.recommend_memos current_user + render json: targets + end +end \ No newline at end of file diff --git a/app/helpers/api_helper.rb b/app/helpers/api_helper.rb index c03f7e05..fdbe0cf9 100644 --- a/app/helpers/api_helper.rb +++ b/app/helpers/api_helper.rb @@ -38,12 +38,12 @@ module ApiHelper end - def stars_to_json_like starts,show_jour,homework,show_name + def stars_to_json_like starts,show_jour,homework,show_real_name result = [] starts.each do |s| comment = get_homework_review homework,show_jour,s.rater - rater_name = show_name ? s.rater.login : l(:label_anonymous) - rater_id = show_name ? s.rater.id : '' + rater_name = show_real_name ? s.rater.login : l(:label_anonymous) + rater_id = show_real_name ? s.rater.id : '' result << {:rater_id =>rater_id ,:rater_name => rater_name,:created_at => format_time(s.created_at),:stars => s.stars,:comment => comment} end result diff --git a/app/helpers/api_index_helper.rb b/app/helpers/api_index_helper.rb index 47f26813..2010f99a 100644 --- a/app/helpers/api_index_helper.rb +++ b/app/helpers/api_index_helper.rb @@ -8,7 +8,7 @@ module ApiIndexHelper def format_for_current_user(current_user) if current_user.present? && (current_user.id != 2) - {username: current_user.show_name, + {username: current_user.show_real_name, login: current_user.login, user_id: current_user.id, image_url: "/images/#{url_to_avatar(current_user)}?#{Time.now.to_i}", @@ -23,7 +23,7 @@ module ApiIndexHelper end def format_common_user(user) - {username: user.show_name, + {username: user.show_real_name, user_id: user.id, login: user.login, image_url: "/images/#{url_to_avatar(user)}?#{Time.now.to_i}", @@ -92,7 +92,7 @@ module ApiIndexHelper moderator_id: moder.id, user_id: user.id, login: user.login, - username: user.try(:show_name), + username: user.try(:show_real_name), image_url: url_to_avatar(user), user_url: "/users/#{user.try(:login)}" } @@ -167,8 +167,9 @@ module ApiIndexHelper memo_parent_id = memo.parent_id memo_parent_type = "Memo" end - admin_role_ids= AdminRole.includes(:admin_permissions).joins(:admin_permissions).where("admin_permissions.name = '#{type}'").pluck(:id) - user_ids = UserAdminRole.where(admin_role_id: admin_role_ids).pluck(:user_id).uniq + user_ids = User.select(:admin, :id).admin_users.pluck(:id) + # admin_role_ids= AdminRole.includes(:admin_permissions).joins(:admin_permissions).where("admin_permissions.name = '#{type}'").pluck(:id) + # user_ids = UserAdminRole.where(admin_role_id: admin_role_ids).pluck(:user_id).uniq if user_ids.size > 0 user_ids.each do |id| Tiding.create(:user_id => id, :trigger_user_id => memo.author_id, @@ -221,7 +222,7 @@ module ApiIndexHelper last_memo = memo&.last_reply_memo(show_hidden_memo) if last_memo new_reply = { - username: last_memo&.author.try(:show_name), + username: last_memo&.author.try(:show_real_name), user_login: last_memo&.author.try(:login), user_id: last_memo&.author.try(:id), content: last_memo&.content, @@ -240,7 +241,7 @@ module ApiIndexHelper sticky: memo.sticky, is_fine: memo.is_fine, is_original: memo.is_original, - username: memo.author.show_name, + username: memo.author.show_real_name, image_url: "#{url_to_avatar(memo.author)}?#{Time.now.to_i}", user_login: memo.author.try(:login), user_id: memo.author.try(:id), diff --git a/app/models/block_user.rb b/app/models/block_user.rb new file mode 100644 index 00000000..1386f6b4 --- /dev/null +++ b/app/models/block_user.rb @@ -0,0 +1,4 @@ +class BlockUser < ApplicationRecord + belongs_to :user + scope :block_user_present, ->(target_id){where(block_user_id: target_id)} +end diff --git a/app/models/concerns/watchable.rb b/app/models/concerns/watchable.rb index 4c52cf99..7d45d6ef 100644 --- a/app/models/concerns/watchable.rb +++ b/app/models/concerns/watchable.rb @@ -4,14 +4,18 @@ module Watchable included do has_many :watchers, as: :watchable, dependent: :destroy has_many :watcher_users, through: :watchers, source: :user, validate: false - scope :watched_by, -> (user_id) { includes(:watchers).where(watchers: { user_id: user_id }) } + attr_reader :watcher_ids, :watcher_user_ids end def watched?(watchable) watchable.watchers.exists?(user: self) end + def watched_by?(user) + !!(user && self.watcher_user_ids && self.watcher_user_ids.detect {|uid| uid == user.id }) + end + def watch!(watchable) watchable.watchers.create!(user: self, created_at: Time.current) end diff --git a/app/models/forum_section.rb b/app/models/forum_section.rb index 35d36b5d..5ea76832 100644 --- a/app/models/forum_section.rb +++ b/app/models/forum_section.rb @@ -1,4 +1,5 @@ class ForumSection < ApplicationRecord + include Watchable has_ancestry #论坛板块的表 # attr_accessible :title, :body diff --git a/app/models/memo.rb b/app/models/memo.rb index f4c1bc76..f74f4c39 100644 --- a/app/models/memo.rb +++ b/app/models/memo.rb @@ -4,16 +4,12 @@ # is_fine 是否加精,默认为false # hidden 是否隐藏 -# require 'elasticsearch/model' class Memo < ApplicationRecord - # include Redmine::SafeAttributes - # include UserScoreHelper include ApplicationHelper, Watchable - # include Elasticsearch::Model #敏感词过滤 # include DunCheckAble has_many :forums, :through => :memo_forums - belongs_to :forum_section, counter_cache: true + belongs_to :forum_section, counter_cache: true, optional: true has_many :memo_forums, :dependent => :destroy has_many :visit_actions, as: :visitable, dependent: :destroy #用户是否禁言 @@ -30,39 +26,9 @@ class Memo < ApplicationRecord scope :total_replies, ->{where("hidden = false and root_id is not null")} # scope :roots, -> {where()} - + has_many :attachments, as: :container, dependent: :destroy # 创意征集方式 0-默认,1-申请, ps. 删除后,该帖子即删除, 拒绝后,该帖子状态将为初始状态 enum destroy_status: { common: 0, apply_destroy: 1 } - # acts_as_watchable - #elasticsearch kaminari init - # Kaminari::Hooks.init - # Elasticsearch::Model::Response::Response.__send__ :include, Elasticsearch::Model::Response::Pagination::Kaminari - # settings index: { - # number_of_shards: 5 , - # analysis: { - # char_filter: { - # and_filter: { - # type: "mapping", - # mappings: [ "&=> and "] - # } - # }, - # analyzer: { - # my_analyzer: { - # type: 'custom', - # tokenizer: 'standard', - # filter: ['classic'], - # char_filter: ['html_strip'] - # } - # } - # } - # } do - # mappings dynamic: 'false' do - # indexes :subject, analyzer: 'smartcn',index_options: 'offsets'#, char_filter: 'html_strip' - # indexes :content, analyzer:'my_analyzer',index_options: 'offsets',search_analyzer: 'smartcn' - # indexes :updated_at,index:"not_analyzed" ,type:'date' - # end - # end - acts_as_tree :counter_cache => :replies_count, :order => "#{Memo.table_name}.created_at ASC", dependent: :destroy # acts_as_attachable has_many :user_score_details, :class_name => 'UserScoreDetails',:as => :score_changeable_obj @@ -72,46 +38,7 @@ class Memo < ApplicationRecord # 消息 has_many :memo_messages, :class_name =>'MemoMessage', :dependent => :destroy # end - belongs_to :last_reply, :class_name => 'Memo', :foreign_key => 'last_reply_id' - # acts_as_searchable :column => ['subject', 'content'], - # #:include => { :forum => :p} - # #:project_key => "#{Forum.table_name}.project_id" - # :date_column => "#{table_name}.created_at" - #acts_as_event :title => Proc.new {|o| "#{o.forum.name}: #{o.subject}"}, - #:datetime => :updated_at, - # :datetime => :created_at, - #:description => :content, - #:author => :author, - #:type => Proc.new {|o| o.parent_id.nil? ? 'Memo' : 'Reply'}, - #:url => Proc.new {|o| {:controller => 'memos', :action => 'show', :forum_id => o.forum_id}.merge(o.parent_id.nil? ? {:id => o.id} : {:id => o.parent_id, :r => o.id, :anchor => "reply-#{o.id}"})} - # acts_as_activity_provider :author_key => :author_id, - # :func => 'memos', - # :timestamp => 'created_at' - # :find_options => {:type => 'memos'} - # acts_as_watchable - - # safe_attributes "author_id", - # "subject", - # "content", - # "last_memo_id", - # "lock", - # "sticky", - # "parent_id", - # "replies_count", - # "root_id", - # "language" - - # after_create :add_author_as_watcher, :reset_counters!, :send_tiding - # after_create :add_author_as_watcher #浏览记录 - # after_update - # after_destroy :reset_counters!,:delete_kindeditor_assets #,:down_user_score -- 公共区发帖暂不计入得分, - # after_create :send_notification - # after_save :plusParentAndForum - # after_destroy :minusParentAndForum - #before_save :be_user_score - # scope :visible, lambda { |*args| - # includes(:forum => ).where() - # } + belongs_to :last_reply, :class_name => 'Memo', :foreign_key => 'last_reply_id', optional: true scope :indexable,lambda { where('parent_id is null') } @@ -135,35 +62,7 @@ class Memo < ApplicationRecord def self.search_by_time(time_type, start_time, end_time) where("#{time_type} between ? and ?",start_time.present? ? start_time.to_time : Time.now, end_time.present? ? end_time.to_time.end_of_day : Time.now) end - - - # def self.search(query) - # __elasticsearch__.search( - # { - # query: { - # multi_match: { - # query: query, - # type:"most_fields", - # operator: "or", - # fields: ['subject','content^0.5'] - # } - # }, - # sort: { - # _score:{order: "desc" }, - # updated_at:{order: "desc" } - # }, - # highlight: { - # pre_tags: [''], - # post_tags: [''], - # fields: { - # subject: {}, - # content: {} - # } - # } - # } - # ) - # end - + def memo_parent Memo.find(parent_id) end @@ -201,11 +100,11 @@ class Memo < ApplicationRecord end def self.hottest_five_memos - order("replies_count desc, praises_count desc, viewed_count desc").limit(8).select([:id,:subject]) + order("replies_count desc, praises_count desc, viewed_count desc").limit(8).select(:id,:subject) end def self.recommend_five_memos - recommend_memos.order("updated_at desc").limit(8).select([:id,:subject]) + recommend_memos.order("updated_at desc").limit(8).select(:id,:subject) end diff --git a/app/models/memo_message.rb b/app/models/memo_message.rb new file mode 100644 index 00000000..80e6d442 --- /dev/null +++ b/app/models/memo_message.rb @@ -0,0 +1,2 @@ +class MemoMessage < ApplicationRecord +end diff --git a/app/models/praise_tread.rb b/app/models/praise_tread.rb index cdfdbea2..cb6afa78 100644 --- a/app/models/praise_tread.rb +++ b/app/models/praise_tread.rb @@ -14,6 +14,10 @@ class PraiseTread < ApplicationRecord end end + def self.is_user_praise(target_id,target_type, target_user_id) + where(:praise_tread_object_id => target_id, :praise_tread_object_type => target_type, :user_id => target_user_id, :praise_or_tread => 1) + end + def self.find_object_by_type_and_id(id, type) type.constantize find_by_id id end diff --git a/app/models/user.rb b/app/models/user.rb index beb0810d..6a9678f6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -54,6 +54,7 @@ class User < ApplicationRecord has_one :qq_open_user, class_name: 'OpenUsers::QQ' accepts_nested_attributes_for :user_extension, update_only: true has_many :fork_users, dependent: :destroy + has_many :block_users, :dependent => :destroy has_many :versions has_many :issue_times, :dependent => :destroy @@ -72,7 +73,7 @@ class User < ApplicationRecord has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注 has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户 - has_many :watchers, as: :watchable, dependent: :destroy + # has_many :watchers, as: :watchable, dependent: :destroy # 认证 has_many :apply_user_authentication @@ -320,6 +321,10 @@ class User < ApplicationRecord status == STATUS_LOCKED end + def self.admin_users + where(admin: true) + end + def activate self.status = STATUS_ACTIVE end @@ -579,6 +584,10 @@ class User < ApplicationRecord end end + def blocked_for(user_id) + block_users.where(block_user_id: user_id).exists? + end + def salt_password(clear_password) self.salt = User.generate_salt self.hashed_password = User.hash_password("#{salt}#{User.hash_password clear_password}") diff --git a/app/services/admins/banned_users/_banned_user_item.html.erb b/app/services/admins/banned_users/_banned_user_item.html.erb index de661c7d..6fd44065 100644 --- a/app/services/admins/banned_users/_banned_user_item.html.erb +++ b/app/services/admins/banned_users/_banned_user_item.html.erb @@ -13,15 +13,15 @@ <%= image_tag(url_to_avatar(user),width:"50px",height:"50px",class:"radius mr15") %>
- <%= @user.show_name %> > 讨论 > 编辑 + <%= @user.show_real_name %> > 讨论 > 编辑
编辑话题
diff --git a/app/services/admins/memos/new.html.erb b/app/services/admins/memos/new.html.erb index 325febcc..86f40e20 100644 --- a/app/services/admins/memos/new.html.erb +++ b/app/services/admins/memos/new.html.erb @@ -1,7 +1,7 @@- <%= @user.show_name %> > 讨论区 > 新建 + <%= @user.show_real_name %> > 讨论区 > 新建
新建话题
diff --git a/app/services/admins/memos/show.html.erb b/app/services/admins/memos/show.html.erb index 2cb6d732..84a0fb67 100644 --- a/app/services/admins/memos/show.html.erb +++ b/app/services/admins/memos/show.html.erb @@ -5,7 +5,7 @@- <%= @user.show_name %> > 讨论区 + <%= @user.show_real_name %> > 讨论区
@@ -32,7 +32,7 @@
- <%= @memo.author.show_name %>更新于<%= time_from_now @memo.updated_at %>
+ <%= @memo.author.show_real_name %>更新于<%= time_from_now @memo.updated_at %>
<% if @memo.try(:reward).present? %>
<%= @memo.try(:reward) %>
@@ -156,7 +156,7 @@