#coding=utf-8 module Mobile module Apis class NewComment< Grape::API include ApplicationHelper include ApiHelper resources :new_comment do desc "add a new comment" params do requires :type, type: String requires :content, type: String end post ':id' do unless current_user #如果当前用户不存在 则需要根据微信昵称注册一个帐号 openid = session[:wechat_openid] raise "无法获取到openid,请在微信中打开本页面" unless openid us = UsersService.new access_token = session[:access_token] refresh_token = session[:refresh_token] if access_token.present? && refresh_token.present? begin refreshinfo = Wechat.api.web_refresh_access_token(refresh_token) rescue info = Wechat.api.web_access_token(session[:wechat_code]) openid =info["openid"] access_token =info["access_token"] if access_token session[:access_token] = access_token end refresh_token = info["refresh_token"] if refresh_token session[:refresh_token] = refresh_token end refreshinfo = Wechat.api.web_refresh_access_token(refresh_token) end access_token = refreshinfo["access_token"] refresh_token = refreshinfo["refresh_token"] session[:access_token] = access_token session[:refresh_token] = refresh_token #获取用户信息 userinfo = Wechat.api.web_userinfo(access_token,openid) Rails.logger.info "userinfo!!!!!!!!!" Rails.logger.info userinfo name = userinfo["nickname"] else name = openid[0..3]+"***"+openid.last end user = us.register ({:login=>openid, :mail=>"#{openid}@163.com", :password=>"12345678", :password_confirmation=>"12345678", :should_confirmation_password => true}) raise user.errors.full_messages.first if user.new_record? user.update_attributes(:lastname=>name) #自动激活 if Setting.self_registration != '3' user.activate user.last_login_on = Time.now if user.save UserStatus.create(:user_id => user.id, :changsets_count => 0, :watchers_count => 0) end end UserWechat.create!( openid: openid, user: user, bindtype: 1 ) end authenticate! subscribe = 0 #默认未关注 #-------------------获取用户是否关注此公众号----------------------------- openid = session[:wechat_openid] raise "无法获取到openid,请在微信中打开本页面" unless openid user_info = Wechat.api.user(openid) Rails.logger.info "user_info!!!!!!!!!" Rails.logger.info user_info subscribe = user_info["subscribe"] status = 0 tip = 0 #0班级1项目 type = params[:type] result = 1 #0回复 1回复的回复 reply_type = params[:reply_type] update_id = 0 if params[:content]!="" && current_user case type when "HomeworkCommon" #如果是私有的 并且不是成员则不能回复 # is_public = homework_common.course.is_public # if is_public == 0 && !current_user.member_of_course?(homework_common.course) # status = -1 # tip = 0 # else # feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id]) # if (feedback.errors.empty?) # homework_common.update_column(:updated_at, Time.now) # result = 2 # end # end if reply_type == nil || reply_type == 0 homework_common = HomeworkCommon.find(params[:id]) feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id]) if (feedback.errors.empty?) homework_common.update_column(:updated_at, Time.now) result = 2 update_id = homework_common.id end else #二级回复 reply = JournalsForMessage.find params[:id].to_i homework_common = HomeworkCommon.find reply.jour_id options = {:notes => params[:content], :reply_id => reply.user_id,:user_id => current_user.id,:m_parent_id => params[:id].to_i,:m_reply_id => params[:id].to_i} feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], reply.jour_id, options) if (feedback.errors.empty?) homework_common.update_column(:updated_at, Time.now) result = 2 update_id = homework_common.id end end when "News" # if news.project # if news.project.is_public == false && !current_user.member_of?(news.project) # status = -1 # tip = 1 # end # elsif news.course # if news.course.is_public == 0 && !current_user.member_of_course?(news.course) # status = -1 # tip = 0 # end # end if status == 0 if reply_type == nil || reply_type == 0 news = News.find(params[:id]) comment = Comment.new comment.comments = params[:content] comment.author = current_user if news.comments << comment result = 2 update_id = news.id end else #二级回复 comment = Comment.find(params[:id]) news = News.find comment.commented_id new_comment = news.comments.build(:author_id => current_user.id, :reply_id => params[:id], :comments => params[:content], :parent_id => comment.id) if new_comment.save result = 2 update_id = news.id end end end when "Message" # if message.project # if message.project.is_public == false && !current_user.member_of?(message.project) # status = -1 # tip = 1 # end # elsif message.course # if message.course.is_public == 0 && !current_user.member_of_course?(message.course) # status = -1 # tip = 0 # end # end if status == 0 # if reply_type == nil || reply_type == 0 message = Message.find(params[:id]) board = Board.find(message.board_id) topic = message.root reply = Message.new reply.author = current_user reply.board = board reply.content = params[:content] reply.parent_id = params[:id] reply.subject = "RE: #{topic.subject}" if topic.children << reply result = 2 update_id = topic.id end # else #二级回复 # end end when "JournalsForMessage" # if jour.jour_type == "Project" # if jour.project.is_public == false && !current_user.member_of?(jour.project) # status = -1 # tip = 1 # end # elsif jour.jour_type == "Course" # if jour.course.is_public == 0 && !current_user.member_of_course?(jour.course) # status = -1 # tip = 0 # end # end if status == 0 # if reply_type == nil || reply_type == 0 jour = JournalsForMessage.find(params[:id]).root parent_id = params[:id] author_id = current_user.id reply_user_id = jour.user_id reply_id = params[:id] content = params[:content] options = {:user_id => author_id, :status => true, :m_parent_id => parent_id, :m_reply_id => reply_id, :reply_id => reply_user_id, :notes => content, :is_readed => false} jfm = jour.user.add_jour(nil, nil, nil, options) if jfm.errors.empty? (JournalsForMessage.find parent_id).update_attribute(:updated_on,Time.now) result = 2 update_id = jour.id end # else #二级回复 # end end when 'Issue' # if issue.project.is_public == false && !current_user.member_of?(issue.project) # status = -1 # tip = 1 # end if status == 0 if reply_type == nil || reply_type == 0 issue = Issue.find params[:id] is_jour = Journal.new is_jour.user_id = current_user.id is_jour.notes = params[:content] is_jour.journalized = issue if is_jour.save result = 2 update_id = issue.id end else #二级回复 jour = Journal.find(params[:id]) issue = jour.journalized is_jour = Journal.new is_jour.user_id = current_user.id is_jour.notes = params[:content] is_jour.reply_id = params[:id] is_jour.parent_id = params[:id] is_jour.journalized = issue if is_jour.save result = 2 update_id = issue.id end end end when 'BlogComment' if reply_type == nil || reply_type == 0 blog = BlogComment.find(params[:id]).root blogComment = BlogComment.new blogComment.author = current_user blogComment.blog = blog.blog blogComment.content = params[:content] blogComment.title = "RE: #{blog.title}" if blog.children << blogComment result = 2 update_id = blog.id end else #二级回复 blog = BlogComment.find(params[:id]).root blogComment = BlogComment.new blogComment.author = current_user blogComment.blog = blog.blog blogComment.content = params[:content] blogComment.title = "RE: #{blog.title}" parent = BlogComment.find params[:id] blogComment.parent_id = params[:id] #被回复的回复 blogComment.reply_id = parent.author.id #被回复者id if parent.children << blogComment result = 2 update_id = blog.id end end end if result == 2 update_course_activity_api(type,update_id) update_user_activity_api(type,update_id) update_org_activity_api(type,update_id) update_forge_activity_api(type,update_id) update_principal_activity_api(type,update_id) end else result = 3 end present :result, result present :status, status present :act_id, update_id present :tip, tip present :subscribe,subscribe end end end end end