You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							167 lines
						
					
					
						
							7.6 KiB
						
					
					
				
			
		
		
	
	
							167 lines
						
					
					
						
							7.6 KiB
						
					
					
				# encoding: utf-8
 | 
						|
module Mobile
 | 
						|
  module Entities
 | 
						|
    class Activity <Grape::Entity
 | 
						|
      include ApplicationHelper
 | 
						|
      include ApiHelper
 | 
						|
      def self.act_expose(f)
 | 
						|
        expose f do |ac,opt|
 | 
						|
          if ac.is_a?(Hash) && ac.key?(f)
 | 
						|
            ac[f]
 | 
						|
          elsif ac.is_a?(::UserActivity)
 | 
						|
            if ac.respond_to?(f)
 | 
						|
              ac.send(f)
 | 
						|
            else
 | 
						|
              case f
 | 
						|
                when :user_act
 | 
						|
                  if ac.act_type == "Project"
 | 
						|
                    ac unless ac.nil?
 | 
						|
                  else
 | 
						|
                    ac.act unless ac.nil? || ac.act.nil?
 | 
						|
                  end
 | 
						|
                when :reply_count
 | 
						|
                  if ac.act_type == "HomeworkCommon"
 | 
						|
                    ac.nil? || ac.act.nil? ? 0 : ac.act.journals_for_messages.count
 | 
						|
                  elsif ac.act_type == "News"
 | 
						|
                    ac.nil? || ac.act.nil? ? 0 : ac.act.comments.count
 | 
						|
                  elsif ac.act_type == "Message" || ac.act_type == "BlogComment" || ac.act_type == "JournalsForMessage"
 | 
						|
                    all_comments = []
 | 
						|
                    ac.nil? || ac.act.nil? ? 0 : get_all_children(all_comments, ac.act).count
 | 
						|
                  elsif ac.act_type == "Issue"
 | 
						|
                    ac.nil? || ac.act.nil? ? 0 : ac.act.journals.where("notes is not null and notes != ''").count
 | 
						|
                  end
 | 
						|
 | 
						|
                when :subject
 | 
						|
                  if ac.act_type == "HomeworkCommon"
 | 
						|
                    ac.act.name unless ac.nil? || ac.act.nil?
 | 
						|
                  elsif ac.act_type == "News" || ac.act_type == "BlogComment"
 | 
						|
                    ac.act.title unless ac.nil? || ac.act.nil?
 | 
						|
                  elsif ac.act_type == "Message" || ac.act_type == "Issue"
 | 
						|
                    ac.act.subject unless ac.nil? || ac.act.nil?
 | 
						|
                  elsif ac.act_type == "JournalsForMessage"
 | 
						|
                    ac.act.private == 0 ? "留言" : "私信" unless ac.nil? || ac.act.nil?
 | 
						|
                  elsif ac.act_type == "Poll"
 | 
						|
                    ac.act.polls_name unless ac.nil? || ac.act.nil?
 | 
						|
                  end
 | 
						|
                when :description
 | 
						|
                  if ac.act_type == "HomeworkCommon" || ac.act_type == "Issue" || ac.act_type == "News"
 | 
						|
                    strip_html(ac.act.description) unless ac.nil? || ac.act.nil?
 | 
						|
                  elsif ac.act_type == "Message" || ac.act_type == "BlogComment"
 | 
						|
                    strip_html(ac.act.content) unless ac.nil? || ac.act.nil?
 | 
						|
                  elsif ac.act_type == "JournalsForMessage"
 | 
						|
                    strip_html(ac.act.notes) unless ac.nil? || ac.act.nil?
 | 
						|
                  elsif ac.act_type == "Poll"
 | 
						|
                    ac.act.polls_description unless ac.nil? || ac.act.nil?
 | 
						|
                  end
 | 
						|
                when :latest_update
 | 
						|
                  time_from_now ac.updated_at unless ac.nil?
 | 
						|
                when :praise_count
 | 
						|
                  if ac.act_type == "HomeworkCommon" || ac.act_type == "News" || ac.act_type == "Message" || ac.act_type == "BlogComment" || ac.act_type == "JournalsForMessage" || ac.act_type == "Issue"
 | 
						|
                    ac.nil? || ac.act.nil? ? 0 : get_activity_praise_num(ac.act)
 | 
						|
                  end
 | 
						|
                #when :homework_common_detail_manual
 | 
						|
                #   if ac.act_type == "HomeworkCommon"
 | 
						|
                #     ac.act.homework_detail_manual unless ac.nil? || ac.act.nil? || ac.act.homework_detail_manual.nil?
 | 
						|
                #   end
 | 
						|
                when :course_project_name
 | 
						|
                  if ac.container_type == "Course"
 | 
						|
                    name = (get_course(ac.container_id)).name
 | 
						|
                    name
 | 
						|
                  elsif ac.container_type == "Project"
 | 
						|
                    name = (get_project(ac.container_id)).name
 | 
						|
                    name
 | 
						|
                  elsif ac.container_type == "Blog"
 | 
						|
                    "发表博客"
 | 
						|
                  end
 | 
						|
                when :syllabus_title
 | 
						|
                  if ac.container_type == "Course"
 | 
						|
                    course = get_course(ac.container_id)
 | 
						|
                    name = course.syllabus.nil? ? "":course.syllabus.title
 | 
						|
                    name
 | 
						|
                  end
 | 
						|
                when :course_project_id
 | 
						|
                  if ac.container_type == "Course"
 | 
						|
                    ac.container_id
 | 
						|
                  elsif ac.container_type == "Project"
 | 
						|
                    ac.container_id
 | 
						|
                  end
 | 
						|
                when :activity_type_name
 | 
						|
                  if ac.container_type == "Course"
 | 
						|
                    case ac.act_type
 | 
						|
                      when "HomeworkCommon"
 | 
						|
                        "班级作业"
 | 
						|
                      when "News"
 | 
						|
                        "班级通知"
 | 
						|
                      when "Message"
 | 
						|
                        "班级讨论区"
 | 
						|
                      when "Poll"
 | 
						|
                        "班级问卷"
 | 
						|
                      when "Course"
 | 
						|
                        "班级"
 | 
						|
                    end
 | 
						|
                  elsif ac.container_type == "Project"
 | 
						|
                    case ac.act_type
 | 
						|
                      when "Issue"
 | 
						|
                        "项目问题"
 | 
						|
                      when "Message"
 | 
						|
                        "项目讨论区"
 | 
						|
                      when "Project"
 | 
						|
                        "项目"
 | 
						|
                    end
 | 
						|
                  end
 | 
						|
              end
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
      end
 | 
						|
      expose :act_type    #缺陷/作业/讨论区/留言等类型
 | 
						|
      expose :act_id
 | 
						|
      expose :id
 | 
						|
      expose :container_type     #课程/项目/博客/个人
 | 
						|
      expose :author, using: Mobile::Entities::User do |a, opt|    #用户信息
 | 
						|
        if a.is_a? ::UserActivity
 | 
						|
          if a.act_type == "Project"
 | 
						|
            get_user(get_project(a.act_id).user_id)
 | 
						|
          elsif !a.act.nil?
 | 
						|
            if a.act_type == 'Issue' || a.act_type == 'News' || a.act_type == 'Message' || a.act_type == 'BlogComment'
 | 
						|
            a.act.author
 | 
						|
            elsif a.act_type == 'HomeworkCommon' || a.act_type == 'Poll' || a.act_type == 'JournalsForMessage'
 | 
						|
              a.act.user
 | 
						|
            elsif a.act_type == 'Course'
 | 
						|
              a.act.teacher
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
      end
 | 
						|
      expose :homework_common_detail , using: Mobile::Entities::Whomework do |a, opt|  #作业相关信息
 | 
						|
        if a.act_type == "HomeworkCommon"
 | 
						|
          a.act
 | 
						|
        end
 | 
						|
      end
 | 
						|
      expose :issue_detail, using: Mobile::Entities::Issue do |a, opt| #缺陷信息
 | 
						|
        if a.act_type == "Issue"
 | 
						|
          a.act
 | 
						|
        end
 | 
						|
      end
 | 
						|
      act_expose :reply_count    #回复数
 | 
						|
      act_expose :praise_count   #点赞数
 | 
						|
      #act_expose :user_act     #某个动态
 | 
						|
      act_expose :subject      #标题
 | 
						|
      act_expose :description  #描述
 | 
						|
      act_expose :latest_update #最新更新时间
 | 
						|
      act_expose :course_project_id    #课程/项目ID
 | 
						|
      act_expose :course_project_name    #课程/项目名字
 | 
						|
      act_expose :syllabus_title    #课程名字
 | 
						|
      act_expose :activity_type_name     #课程问答区/项目缺陷等
 | 
						|
      expose :has_praise , if: lambda { |instance, options| options[:user] } do |instance, options|
 | 
						|
        if instance.act_type == "HomeworkCommon" || instance.act_type == "News" || instance.act_type == "Message" || instance.act_type == "BlogComment" || instance.act_type == "JournalsForMessage" || instance.act_type == "Issue"
 | 
						|
          has_praise = false
 | 
						|
          current_user = options[:user]
 | 
						|
          obj = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",instance.act_id,instance.act_type.to_s,current_user.id)
 | 
						|
          has_praise = obj.empty? ? false : true
 | 
						|
          has_praise
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end |