diff --git a/app/api/mobile/apis/blog_comments.rb b/app/api/mobile/apis/blog_comments.rb index bb5758e71..39b6a486a 100644 --- a/app/api/mobile/apis/blog_comments.rb +++ b/app/api/mobile/apis/blog_comments.rb @@ -6,10 +6,17 @@ module Mobile resources :blog_comments do desc "get special topic" - get ':id' do + post ':id' do user = current_user + + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 + blog = BlogComment.find params[:id] - present :data, blog, with: Mobile::Entities::BlogComment,user: user + present :data, blog, with: Mobile::Entities::BlogComment,user: user,type: type,page: page + present :type, type + present :page, page present :status, 0 end end diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb index caabad198..60e00280e 100644 --- a/app/api/mobile/apis/courses.rb +++ b/app/api/mobile/apis/courses.rb @@ -200,8 +200,13 @@ module Mobile # course = Course.find(params[:id]) cs = CoursesService.new course = cs.show_course(params,current_user) - present :data, course, with: Mobile::Entities::Course,user: current_user - { status: 0} + + if course[:course][:is_delete] == 1 + {status:-1, message: '该班级不存在或已被删除啦' } + else + present :data, course, with: Mobile::Entities::Course,user: current_user + present :status, 0 + end end end @@ -212,7 +217,7 @@ module Mobile get "homeworks/:id" do cs = CoursesService.new homeworks = cs.homework_list params,current_user - present :data, homeworks, with: Mobile::Entities::Homework + present :data, homeworks, with: Mobile::Entities::Homework,user: current_user present :status, 0 end @@ -259,7 +264,7 @@ module Mobile post ":course_id/attachments" do cs = CoursesService.new count = cs.course_attachments params - present :data, count, with: Mobile::Entities::Attachment + present :data, count, with: Mobile::Entities::Attachment,user: current_user present :status, 0 end @@ -392,8 +397,8 @@ module Mobile authenticate! course = Course.find(params[:course_id]) - exercises = course.exercises.where("exercise_status <> 1").order("created_at desc") - present :data,exercises,with:Mobile::Entities::Exercise + exercises = course.exercises.where("exercise_status <> 1").reorder("created_at desc") + present :data,exercises,with:Mobile::Entities::Exercise,user: current_user present :status,0 end diff --git a/app/api/mobile/apis/issues.rb b/app/api/mobile/apis/issues.rb index 4a6417cb4..36b558652 100644 --- a/app/api/mobile/apis/issues.rb +++ b/app/api/mobile/apis/issues.rb @@ -7,11 +7,17 @@ module Mobile include IssuesHelper desc "get special issuse" - get ':id' do + post ':id' do authenticate! user = current_user + + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 issue = Issue.find params[:id] - present :data, issue, with: Mobile::Entities::Issue,user: user + present :data, issue, with: Mobile::Entities::Issue,user: user,type: type,page: page + present :type, type + present :page, page present :status, 0 end end diff --git a/app/api/mobile/apis/journal_for_messages.rb b/app/api/mobile/apis/journal_for_messages.rb index 5f2d01185..6ac484513 100644 --- a/app/api/mobile/apis/journal_for_messages.rb +++ b/app/api/mobile/apis/journal_for_messages.rb @@ -6,11 +6,18 @@ module Mobile resources :journal_for_messages do desc "get special journal" - get ':id' do + post ':id' do authenticate! user = current_user + + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 + jour = JournalsForMessage.find params[:id] - present :data, jour, with: Mobile::Entities::Jours,user: user + present :data, jour, with: Mobile::Entities::Jours,user: user,type: type,page: page + present :type, type + present :page, page present :status, 0 end end diff --git a/app/api/mobile/apis/messages.rb b/app/api/mobile/apis/messages.rb index bab82de8d..ceda5058f 100644 --- a/app/api/mobile/apis/messages.rb +++ b/app/api/mobile/apis/messages.rb @@ -6,11 +6,17 @@ module Mobile resources :messages do desc "get special topic" - get ':id' do + post ':id' do authenticate! user = current_user + + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 message = Message.find params[:id] - present :data, message, with: Mobile::Entities::Message,user: user + present :data, message, with: Mobile::Entities::Message,user: user,type: type,page: page + present :type, type + present :page, page present :status, 0 end end diff --git a/app/api/mobile/apis/newss.rb b/app/api/mobile/apis/newss.rb index d42177783..6e012ca4b 100644 --- a/app/api/mobile/apis/newss.rb +++ b/app/api/mobile/apis/newss.rb @@ -6,11 +6,17 @@ module Mobile resources :newss do desc "get special news" - get ':id' do + post ':id' do authenticate! user = current_user + + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 news = News.find params[:id] - present :data, news, with: Mobile::Entities::News,user: user + present :data, news, with: Mobile::Entities::News,user: user,type: type,page: page + present :type, type + present :page, page present :status, 0 end end diff --git a/app/api/mobile/apis/resources.rb b/app/api/mobile/apis/resources.rb index d5823d5b4..ebfef7f2d 100644 --- a/app/api/mobile/apis/resources.rb +++ b/app/api/mobile/apis/resources.rb @@ -85,12 +85,26 @@ module Mobile requires :token, type: String requires :course_ids, type: Array[Integer] requires :send_id, type: Integer + requires :send_type, type: Integer end post 'send' do authenticate! rs = ResourcesService.new - ori, flag, save_message = rs.send_resource_to_course(current_user,params) + + ori = nil + flag = false + save_message = nil + + case params[:send_type] + when 1 + ori, flag, save_message = rs.send_resource_to_course(current_user,params) + when 2 + ori, flag, save_message = rs.send_homework_to_course(current_user,params) + when 3 + ori, flag, save_message = rs.send_exercise_to_course(current_user,params) + end + if flag present :status, 0 else diff --git a/app/api/mobile/apis/whomeworks.rb b/app/api/mobile/apis/whomeworks.rb index c8377aa0d..db1e7e269 100644 --- a/app/api/mobile/apis/whomeworks.rb +++ b/app/api/mobile/apis/whomeworks.rb @@ -6,11 +6,17 @@ module Mobile resources :whomeworks do desc "get one homework" - get ':id' do + post ':id' do authenticate! user = current_user + + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 homework = HomeworkCommon.find params[:id] - present :data, homework, with: Mobile::Entities::Whomework,user: user + present :data, homework, with: Mobile::Entities::Whomework,user: user,type: type,page: page + present :type, type + present :page, page present :status, 0 end end diff --git a/app/api/mobile/entities/activity.rb b/app/api/mobile/entities/activity.rb index 9e2a39a5a..2856354a1 100644 --- a/app/api/mobile/entities/activity.rb +++ b/app/api/mobile/entities/activity.rb @@ -25,10 +25,12 @@ module Mobile 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" - ac.nil? || ac.act.nil? ? 0 : ac.act.children.count + 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? diff --git a/app/api/mobile/entities/attachment.rb b/app/api/mobile/entities/attachment.rb index 49cb6bd2b..028ad633d 100644 --- a/app/api/mobile/entities/attachment.rb +++ b/app/api/mobile/entities/attachment.rb @@ -3,6 +3,7 @@ module Mobile class Attachment < Grape::Entity include Redmine::I18n include ActionView::Helpers::NumberHelper + include ApplicationHelper def self.attachment_expose(field) expose field do |f,opt| if f.is_a?(Hash) && f.key?(field) @@ -22,6 +23,7 @@ module Mobile (number_to_human_size(f.filesize)).gsub("ytes", "").to_s when :coursename f.course.nil? ? "" : f.course.name + end end end @@ -36,6 +38,12 @@ module Mobile attachment_expose :file_dir attachment_expose :attafile_size attachment_expose :coursename #所属班级名 + expose :current_user_is_teacher, if: lambda { |instance, options| options[:user] } do |instance, options| + current_user = options[:user] + current_user_is_teacher = false + current_user_is_teacher = is_course_teacher(current_user,instance.course) + current_user_is_teacher + end end end end \ No newline at end of file diff --git a/app/api/mobile/entities/blog_comment.rb b/app/api/mobile/entities/blog_comment.rb index 67904d11e..3f58e901f 100644 --- a/app/api/mobile/entities/blog_comment.rb +++ b/app/api/mobile/entities/blog_comment.rb @@ -25,7 +25,9 @@ module Mobile when :act_id u.id when :comment_count - u.children.count + # u.children.count + all_comments = [] + get_all_children(all_comments, u).count end end end @@ -51,7 +53,18 @@ module Mobile blog_comment_expose :praise_count expose :blog_comment_children, using:Mobile::Entities::BlogComment do |c,opt| if c.is_a? (::BlogComment) - c.children.reverse + ##自己的父回复为空 才有子回复 + if !opt[:children] + if c.parent.nil? && opt[:type] == 0 + opt[:children] = true + all_comments = [] + tStart = opt[:page]*5 + tEnd = (opt[:page]+1)*5 - 1 + + all_comments = get_all_children(all_comments, c)[tStart..tEnd] + all_comments + end + end end end expose :has_praise, if: lambda { |instance, options| options[:user] } do |instance, options| @@ -61,6 +74,63 @@ module Mobile has_praise = obj.empty? ? false : true has_praise end + + expose :parents_count, if: lambda { |instance, options| options[:user] } do |instance, options| + parents_reply = [] + parents_reply = get_reply_parents_no_root(parents_reply, instance) + parents_reply.count + end + + expose :parents_reply_bottom, using:Mobile::Entities::BlogComment do |c,opt| + if c.is_a? (::BlogComment) + #取二级回复的底楼层 + parents_reply = [] + parents_reply = get_reply_parents_no_root(parents_reply, c) + if parents_reply.count > 0 && !opt[:bottom] + if opt[:type] == 1 + # opt[:bottom] = true + # parents_reply[opt[:page]..opt[:page]] + else + opt[:bottom] = true + parents_reply[0..0] + end + else + [] + end + end + end + + expose :parents_reply_top, using:Mobile::Entities::BlogComment do |c,opt| + if c.is_a? (::BlogComment) + #取二级回复的顶楼层 + parents_reply = [] + parents_reply = get_reply_parents_no_root(parents_reply, c) + if parents_reply.count > 0 && !opt[:top] + if opt[:type] == 1 + opt[:bottom] = true + tStart = (opt[:page]-1)*5+2 + tEnd = (opt[:page])*5+2 - 1 + + if tEnd >= parents_reply.count - 1 + tEnd = parents_reply.count - 2 + end + + if tStart <= parents_reply.count - 2 + parents_reply = parents_reply.reverse[tStart..tEnd] + parents_reply.reverse + else + [] + end + else + opt[:top] = true + parents_reply = parents_reply.reverse[0..1] + parents_reply.reverse + end + else + [] + end + end + end end end end \ No newline at end of file diff --git a/app/api/mobile/entities/exercise.rb b/app/api/mobile/entities/exercise.rb index 05066f8a4..ce6a2fb39 100644 --- a/app/api/mobile/entities/exercise.rb +++ b/app/api/mobile/entities/exercise.rb @@ -27,6 +27,14 @@ module Mobile expose :exercise_name expose :exercise_description exercise_expose :coursename #所属班级名 + + expose :current_user_is_teacher, if: lambda { |instance, options| options[:user] } do |instance, options| + current_user = options[:user] + current_user_is_teacher = false + current_user_is_teacher = is_course_teacher(current_user,instance.course) + current_user_is_teacher + end + end end end diff --git a/app/api/mobile/entities/homework.rb b/app/api/mobile/entities/homework.rb index 3f1631c96..a5b981c6d 100644 --- a/app/api/mobile/entities/homework.rb +++ b/app/api/mobile/entities/homework.rb @@ -98,6 +98,14 @@ module Mobile homework_expose :coursename #所属班级名 + expose :current_user_is_teacher, if: lambda { |instance, options| options[:user] } do |instance, options| + if instance[:current_user_is_teacher].nil? + current_user = options[:user] + current_user_is_teacher = false + current_user_is_teacher = is_course_teacher(current_user,instance.course) + current_user_is_teacher + end + end end end end \ No newline at end of file diff --git a/app/api/mobile/entities/issue.rb b/app/api/mobile/entities/issue.rb index ef3d09450..b99ea03a5 100644 --- a/app/api/mobile/entities/issue.rb +++ b/app/api/mobile/entities/issue.rb @@ -23,7 +23,9 @@ module Mobile when :issue_status IssueStatus.find(issue.status_id).name when :journals_count - issue.journals.where("notes is not null and notes != ''").count + # issue.journals.where("notes is not null and notes != ''").count + all_comments = [] + get_all_children(all_comments, f).count when :project_name issue.project.name when :praise_count diff --git a/app/api/mobile/entities/jours.rb b/app/api/mobile/entities/jours.rb index 15e22174c..f98d7a9ed 100644 --- a/app/api/mobile/entities/jours.rb +++ b/app/api/mobile/entities/jours.rb @@ -18,7 +18,9 @@ module Mobile when :lasted_comment time_from_now f.created_on when :reply_count - f.children.count + # f.children.count + all_comments = [] + get_all_children(all_comments, f).count when :praise_count get_activity_praise_num(f) when :act_type diff --git a/app/api/mobile/entities/message.rb b/app/api/mobile/entities/message.rb index 051c92886..d58192378 100644 --- a/app/api/mobile/entities/message.rb +++ b/app/api/mobile/entities/message.rb @@ -30,6 +30,9 @@ module Mobile 'Message' when :act_id u.id + when :replies_count + all_comments = [] + get_all_children(all_comments, u).count end end end diff --git a/app/api/mobile/entities/news.rb b/app/api/mobile/entities/news.rb index 4f973d82e..ff1452b1c 100644 --- a/app/api/mobile/entities/news.rb +++ b/app/api/mobile/entities/news.rb @@ -24,6 +24,9 @@ module Mobile 'News' when :act_id f.id + when :comments_count + all_comments = [] + get_all_children(all_comments, f).count end end elsif f.is_a?(Hash) && !f.key?(field) diff --git a/app/controllers/org_document_comments_controller.rb b/app/controllers/org_document_comments_controller.rb index 924be596e..a8a294d4d 100644 --- a/app/controllers/org_document_comments_controller.rb +++ b/app/controllers/org_document_comments_controller.rb @@ -1,6 +1,6 @@ class OrgDocumentCommentsController < ApplicationController before_filter :find_organization, :only => [:new, :create, :show, :index] - before_filter :authorize_allowed, :only => [:create, :add_reply] + before_filter :authorize_allowed, :only => [:create, :add_reply, :add_reply_in_doc] helper :attachments,:organizations layout 'base_org' diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index cb86f1165..d8c174bc3 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -300,15 +300,13 @@ class ProjectsController < ApplicationController return end - logger.debug "111111111"*100 - # over @author = params[:user_id].blank? ? nil : User.active.find(params[:user_id]) @page = params[:page] ? params[:page].to_i + 1 : 0 # 根据私密性,取出符合条件的所有数据 if User.current.member_of?(@project) || User.current.admin? case params[:type] when nil - @events_pages = ForgeActivity.where("project_id = ? and forge_act_type in ('Issue', 'Message','News', 'Project', 'Attachment')", @project).includes(:forge_act).order("updated_at desc").limit(10).offset(@page * 10) + @events_pages = ForgeActivity.where("project_id = ? and forge_act_type in ('Issue', 'Message','News', 'Project', 'Attachment','Commit')", @project).includes(:forge_act).order("updated_at desc").limit(10).offset(@page * 10) when 'issue' @events_pages = ForgeActivity.where("project_id = ? and forge_act_type = 'Issue'", @project).includes(:forge_act).order("updated_at desc").limit(10).offset(@page * 10) when 'news' @@ -321,8 +319,8 @@ class ProjectsController < ApplicationController else @events_pages = ForgeActivity.includes(:project).where("forge_activities.project_id = ? and projects.is_public = ? and forge_act_type != ? ",@project,1, "Document").order("created_at desc").page(params['page'|| 1]).per(10); end - logger.debug "2"*100 - # g = Gitlab.client + + # 版本库统计图 unless @project.gpid.nil? || @project.project_score.changeset_num == 0 # rep_statics_commit = @project.rep_statics.order("commits_num desc") rep_statics_commit = RepStatics.find_by_sql("SELECT * FROM `rep_statics` where project_id = #{@project.id} order by commits_num desc limit 10") @@ -335,20 +333,14 @@ class ProjectsController < ApplicationController @a_commits_del = rep_statics_code.map {|s| s.del.to_i } @a_commits_changeset = rep_statics_code.map {|s| s.changeset.to_i } g = Gitlab.client - logger.debug "3"*100 begin gid = @project.gpid - logger.debug "31"*100 - g_branch = g.project(gid) - logger.debug "4"*100 - g_branch = g_branch.default_branch.to_s - logger.debug "5"*100 + g_project = g.project(gid) + g_branch = g_project.default_branch.to_s rescue =>e - logger.error("get gitlab project failed: " + e) + logger.error("get default branch failed: " + e) end - logger.debug "6"*100 @rev = g_branch.nil? ? "master" : g_branch - logger.debug "7"*100 end # 根据对应的请求,返回对应的数据 respond_to do |format| diff --git a/app/controllers/quality_analysis_controller.rb b/app/controllers/quality_analysis_controller.rb index 6b50c1788..80c5a2468 100644 --- a/app/controllers/quality_analysis_controller.rb +++ b/app/controllers/quality_analysis_controller.rb @@ -165,7 +165,7 @@ class QualityAnalysisController < ApplicationController logger.info("result: delete job ###################==>#{d_job}") qa.delete respond_to do |format| - format.html{redirect_to project_quality_analysis_path(:project_id => @project.id)} + format.html{redirect_to :controller => 'repositories', :action => 'show', :id => @project, :repository_id => gitlab_repository(@project).identifier} end rescue Exception => e puts e @@ -199,9 +199,6 @@ class QualityAnalysisController < ApplicationController # update成功则返回 ‘200’ jenkins_job = @client.job.update("#{job_name}", @doc.to_xml) - get_current_build_status = @client.job.get_current_build_status("Hjqreturn-1280") - logger.error("Failed to update job: ==> #{jenkins_job}") unless jenkins_job == '200' - # 数据更新到Trustie数据 if jenkins_job == '200' logger.info("quality_ananlysis will be updated: ==> #{jenkins_job}") diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 6b41e39fc..65b4a15d6 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -48,7 +48,7 @@ class RepositoriesController < ApplicationController include RepositoriesHelper helper :project_score #@root_path = RepositoriesHelper::ROOT_PATH - require 'net/ssh' + # require 'net/ssh' rescue_from Redmine::Scm::Adapters::CommandFailed, :with => :show_error_command_failed def new diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index ea305d967..6b1e3010d 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -78,12 +78,7 @@ class WechatsController < ActionController::Base end # When user view URL in the menu button on :view, with: 'http://wechat.somewhere.com/view_url' do |request, view| - uw = user_binded?(request[:FromUserName]) - unless uw - sendBind(request) - else - request.reply.text "#{request[:FromUserName]} view #{view}" - end + request.reply.text "#{request[:FromUserName]} view #{view}" end # When user sent the imsage @@ -147,6 +142,14 @@ class WechatsController < ActionController::Base default_msg(request) end + on :click, with: 'PROJECT' do |request, key| + request.reply.text "此功能正在开发中,很快就会上线,谢谢!" + end + + on :click, with: 'JOIN_PROJECT' do |request, key| + request.reply.text "此功能正在开发中,很快就会上线,谢谢!" + end + on :click, with: 'JOIN_CLASS' do |request, key| uw = user_binded?(request[:FromUserName]) unless uw @@ -218,8 +221,8 @@ class WechatsController < ActionController::Base raise CoursesService::JoinCourseError.message(status[:state]) end - news = (1..1).each_with_object([]) { |n, memo| memo << { title: '恭喜您成功加入班级,开始学习吧!', - content: "课程名称: #{course.name}\n班级名称: #{course.name}\n任课老师: #{course.teacher.show_name}\n进入班级,和小伙伴愉快的学习吧!"} } + news = (1..1).each_with_object([]) { |n, memo| memo << { title: '恭喜您成功加入班级,开始学习吧!', + content: "课程名称:#{course.name}\n班级名称:#{course.name}\n任课老师:#{course.teacher.show_name}\n进入班级,和小伙伴愉快的学习吧!"} } return request.reply.news(news) do |article, n, index| # article is return object url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{ROOT_URL+'/wechat/user_activities#/class?id='+course.id.to_s}&response_type=code&scope=snsapi_base&state=myclass#wechat_redirect" pic_url = "#{ROOT_URL}/images/wechat/class.jpg" @@ -274,7 +277,7 @@ class WechatsController < ActionController::Base user: user ) ws = WechatService.new - ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台", user.login, format_time(Time.now)) + ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台!", user.login, format_time(Time.now)) render :json => {status:0, msg: "绑定成功"} rescue Exception=>e render :json => {status: -1, msg: e.message} diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 603084cd1..089333160 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -38,6 +38,24 @@ module ApplicationHelper # super # end + # 通过系统外部邮箱查找用户,如果用户不存在则用邮箱替换 + def get_user_by_mail mail + user = User.find_by_mail(mail) + user.nil? ? User.find(2) : user + end + + # 历史数据(老版本库数据)处理完则可以修改该放放 + def get_rep_identifier_by_project project + identifier = Repository.where(:project_id => project.id, :type => "Repository::Gitlab").first.try(:identifier) + result = identifier.nil? ? Repository.where(:project_id => project.id).first.try(:identifier) : identifier + result + end + + # 获取用户单位 + # 优先获取高校信息,如果改信息不存在则获取occupation + def get_occupation_from_user user + School.where("id=?",user.user_extensions.school_id).first.try(:name).nil? ? user.user_extensions.occupation : School.where("id=?",user.user_extensions.school_id).first.try(:name) + end def update_visiti_count container container.update_column(:visits, container.visits + 1) diff --git a/app/helpers/wechats_helper.rb b/app/helpers/wechats_helper.rb new file mode 100644 index 000000000..5c6b3da8c --- /dev/null +++ b/app/helpers/wechats_helper.rb @@ -0,0 +1,20 @@ +#coding=utf-8 +# + +module WechatsHelper + def include_wechat_jsfile + if Rails.env.production? + javascript_include_tag '/javascripts/wechat/build/app.min.js' + else + wechat_path = File.join(Rails.root, "public", "javascripts", "wechat") + srcs = Rails.application.config.wechat_srcs + paths = [] + srcs.each do |src| + Dir.glob(wechat_path+ "/#{src}" ) do |path| + paths << path[File.join(Rails.root, "public").to_s.size, path.size] + end + end + javascript_include_tag *paths + end + end +end diff --git a/app/models/changeset.rb b/app/models/changeset.rb index f72342257..149f4b163 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -22,9 +22,7 @@ class Changeset < ActiveRecord::Base #after_save :be_user_score # user_score has_many :filechanges, :class_name => 'Change', :dependent => :delete_all - # fq - has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy - # end + has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy #Added by nie has_one :project_status, :dependent => :destroy @@ -59,7 +57,6 @@ class Changeset < ActiveRecord::Base validates :committed_on, presence: true validates :commit_date, presence: true validates :scmid, uniqueness: {scope: :repository_id, allow_nil: true} - scope :visible, lambda {|*args| includes(:repository => :project).where(Project.allowed_to_condition(args.shift || User.current, :view_changesets, *args)) } @@ -68,7 +65,7 @@ class Changeset < ActiveRecord::Base # after_update :be_user_score after_destroy :down_user_score # before_create :before_create_cs - after_create :act_as_forge_activity + # after_create :act_as_forge_activity def revision=(r) @@ -118,7 +115,7 @@ class Changeset < ActiveRecord::Base # 项目中提交动态,类型Changeset # type:0 为老版本即Trsutie数据 1为gitlab中获取的动态 def act_as_forge_activity - self.acts << ForgeActivity.new(:user_id => self.user_id, :project_id => self.project_id, :type => true) + self.forge_acts << ForgeActivity.new(:user_id => self.user_id, :project_id => self.project_id, :type => true) end def scan_for_issues diff --git a/app/models/commit.rb b/app/models/commit.rb new file mode 100644 index 000000000..a6633206a --- /dev/null +++ b/app/models/commit.rb @@ -0,0 +1,13 @@ +class Commit < ActiveRecord::Base + attr_accessible :comments, :committed_on, :committer, :project_id, :repository_id, :version + validates :repository_id, presence: true + validates :version, presence: true, uniqueness: {scope: :repository_id} + validates :committed_on, presence: true + has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy + after_create :act_as_forge_activity + + # 项目中提交动态 + def act_as_forge_activity + self.forge_acts << ForgeActivity.new(:user_id => 2, :project_id => self.project_id) + end +end diff --git a/app/models/forge_activity.rb b/app/models/forge_activity.rb index 47ebf4d0f..5fe953f66 100644 --- a/app/models/forge_activity.rb +++ b/app/models/forge_activity.rb @@ -25,8 +25,11 @@ class ForgeActivity < ActiveRecord::Base # 在个人动态里面增加当前动态 # 版本库提交动态不显示在用户动态中 + # Commit为版本库提交类型,因为是从gitlab获取,不能实时更新 def add_user_activity - if self.forge_act_type != "Changeset" + if self.forge_act_type == "Commit" + self.update_column(:updated_at, self.forge_act.committed_on) + else user_activity = UserActivity.where("act_type = '#{self.forge_act_type.to_s}' and act_id = '#{self.forge_act_id}'").first if user_activity user_activity.save @@ -50,7 +53,9 @@ class ForgeActivity < ActiveRecord::Base # 项目提交动态不显示在组织动态中 def add_org_activity - if self.forge_act_type != "Changeset" + if self.forge_act_type == "Commit" + self.update_column(:updated_at, self.forge_act.committed_on) + else org_activity = OrgActivity.where("org_act_type = '#{self.forge_act_type.to_s}' and org_act_id = #{self.forge_act_id}").first if org_activity org_activity.updated_at = self.updated_at diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 6da333370..d864b6462 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -335,6 +335,7 @@ class CoursesService 8, '您已经是该班级的教师了', 9, '您已经是该班级的教辅了', 10, '您已经是该班级的管理员了', + 11, '该班级不存在或已被删除啦', '未知错误,请稍后再试' ] end @@ -348,6 +349,8 @@ class CoursesService if course if course_endTime_timeout? course @state = 2 + elsif course[:is_delete] == 1 + @state = 11 else if current_user.member_of_course?(course) #如果已经是成员 member = course.members.where("user_id=#{current_user.id} and course_id=#{course.id}")[0] @@ -392,7 +395,7 @@ class CoursesService def homework_list params,current_user course = Course.find(params[:id]) if course.is_public != 0 || current_user.member_of_course?(course) - bids = course.homework_commons.where("publish_time <= ?",Time.now.strftime("%Y-%m-%d")).page(params[:page] || 1).per(20).order('created_at DESC') + bids = course.homework_commons.where("publish_time <= ?",Time.now.strftime("%Y-%m-%d")).page(params[:page] || 1).per(20).reorder('created_at DESC') bids = bids.like(params[:name]) if params[:name].present? homeworks = [] bids.each do |bid| @@ -495,7 +498,7 @@ class CoursesService def course_attachments params result = [] course = Course.find(params[:course_id]) - attachments = course.attachments.where("is_publish = 1").order("created_on desc") + attachments = course.attachments.where("is_publish = 1").reorder("created_on desc") if !params[:name].nil? && params[:name] != "" attachments.each do |atta| result << atta if atta.filename.include?(params[:name]) @@ -632,7 +635,7 @@ class CoursesService :homework_submit_num => bid.student_works.count, :homework_status_student => get_homework_status( bid),:homework_status_teacher => homework_status_desc( bid), :student_evaluation_part => get_evaluation_part( bid ,3), - :ta_evaluation_part => get_evaluation_part( bid ,2),:homework_anony_type => bid.homework_type == 1 && !bid.homework_detail_manual.nil?} + :ta_evaluation_part => get_evaluation_part( bid ,2),:homework_anony_type => bid.homework_type == 1 && !bid.homework_detail_manual.nil?,:current_user_is_teacher => is_course_teacher} end diff --git a/app/services/resources_service.rb b/app/services/resources_service.rb index bc97437e4..b56da8ad3 100644 --- a/app/services/resources_service.rb +++ b/app/services/resources_service.rb @@ -49,6 +49,125 @@ class ResourcesService [@ori, @flag, @save_message] end + def send_homework_to_course user,params + homework = HomeworkCommon.find params[:send_id].to_i + @ori = homework + course_ids = params[:course_ids] + @flag = false + unless course_ids.nil? + course_ids.each do |course_id| + course = Course.find course_id.to_i + new_homework = HomeworkCommon.new + new_homework.name = homework.name + new_homework.user_id = user.id + new_homework.description = homework.description + new_homework.homework_type = homework.homework_type + new_homework.late_penalty = homework.late_penalty + new_homework.course_id = course.id + new_homework.teacher_priority = homework.teacher_priority + new_homework.anonymous_comment = homework.anonymous_comment + new_homework.quotes = 0 + new_homework.is_open = homework.is_open + homework.attachments.each do |attachment| + att = attachment.copy + att.container_id = nil + att.container_type = nil + att.copy_from = attachment.id + att.save + new_homework.attachments << att + end + homework_detail_manual = homework.homework_detail_manual + homework_detail_programing = homework.homework_detail_programing + homework_detail_group = homework.homework_detail_group + if homework_detail_manual + new_homework.homework_detail_manual = HomeworkDetailManual.new + new_homework_detail_manual = new_homework.homework_detail_manual + new_homework_detail_manual.ta_proportion = homework_detail_manual.ta_proportion + new_homework_detail_manual.comment_status = 0 + new_homework_detail_manual.evaluation_num = homework_detail_manual.evaluation_num + new_homework_detail_manual.absence_penalty = homework_detail_manual.absence_penalty + end + if homework_detail_programing + new_homework.homework_detail_programing = HomeworkDetailPrograming.new + new_homework.homework_detail_programing.ta_proportion = homework_detail_programing.ta_proportion + new_homework.homework_detail_programing.language = homework_detail_programing.language + homework.homework_tests.each_with_index do |homework_test| + new_homework.homework_tests << HomeworkTest.new( + input: homework_test.input, + output: homework_test.output + ) + end + end + + if homework_detail_group + new_homework.homework_detail_group = HomeworkDetailGroup.new + new_homework.homework_detail_group.min_num = homework_detail_group.min_num + new_homework.homework_detail_group.max_num = homework_detail_group.max_num + new_homework.homework_detail_group.base_on_project = homework_detail_group.base_on_project + end + if new_homework.save + new_homework_detail_manual.save if new_homework_detail_manual + new_homework.homework_detail_programing.save if new_homework.homework_detail_programing + new_homework.homework_detail_group.save if new_homework.homework_detail_group + @flag = true + else + @flag = false + @save_message = new_homework.errors.full_messages + break + end + homework.update_column(:quotes, homework.quotes+1) + end + end + [@ori, @flag, @save_message] + end + + def send_exercise_to_course user,params + # send_id = params[:send_id] + # @ori = Attachment.find_by_id(send_id) + # course_ids = params[:course_ids] + # @flag = false + # unless course_ids.nil? + # course_ids.each do |id| + # next if @ori.blank? + # @exist = false + # Course.find(id).attachments.each do |att| #如果课程中包含该资源 + # if att.id == @ori.id || (!att.copy_from.nil? && !@ori.copy_from.nil? && att.copy_from == @ori.copy_from) || att.copy_from == @ori.id || att.id == @ori.copy_from + # att.created_on = Time.now + # att.save + # @exist = true + # @flag = true + # break + # end + # end + # next if @exist + # attach_copied_obj = @ori.copy + # attach_copied_obj.tag_list.add(@ori.tag_list) # tag关联 + # attach_copied_obj.container = Course.find(id) + # attach_copied_obj.created_on = Time.now + # attach_copied_obj.author_id = user.id + # attach_copied_obj.is_public = 0 + # attach_copied_obj.copy_from = @ori.copy_from.nil? ? @ori.id : @ori.copy_from #发送要添加copy_from + # if attach_copied_obj.attachtype == nil + # attach_copied_obj.attachtype = 4 + # end + # if attach_copied_obj.save + # # 更新引用次数 + # quotes = @ori.quotes.to_i + 1 + # @ori.update_attribute(:quotes, quotes) unless @ori.nil? + # @ori.forwards << Forward.new(:to_type => attach_copied_obj.class.name, :to_id => attach_copied_obj.id,:created_at => Time.now) + # @flag = true + # else + # @flag = false + # @save_message = attach_copied_obj.errors.full_messages + # break + # end + # + # end + # end + + [@ori, @flag, @save_message] + end + # 我的资源-课件 已发布的 def all_course_attachments user diff --git a/app/services/syllabuses_service.rb b/app/services/syllabuses_service.rb index d5dec9f88..fcb70653b 100644 --- a/app/services/syllabuses_service.rb +++ b/app/services/syllabuses_service.rb @@ -71,8 +71,8 @@ class SyllabusesService count = ShieldWechatMessage.where("container_type='User' and container_id=#{user.id} and shield_type='Course' and shield_id=#{course.id}").count if count == 0 ws = WechatService.new - title = "恭喜您创建班级成功" - ws.create_class_notice user.id, "create_course_notice", course.id,title, course.name, user.show_name, 0, "点击查看班级详情" + title = "恭喜您创建班级成功。" + ws.create_class_notice user.id, "create_course_notice", course.id,title, course.name, user.show_name, 0, "点击查看班级详情。" end end diff --git a/app/services/wechat_service.rb b/app/services/wechat_service.rb index 2da942ea6..7ac4e99d3 100644 --- a/app/services/wechat_service.rb +++ b/app/services/wechat_service.rb @@ -229,7 +229,7 @@ class WechatService color:"#707070" }, remark:{ - value:"绑定成功后可使用微信查看Trustie平台最新动态", + value:"绑定成功后可使用微信查看Trustie平台最新动态。", color:"#707070" } } diff --git a/app/views/admin/users.html.erb b/app/views/admin/users.html.erb index 2a757fdee..9215782bb 100644 --- a/app/views/admin/users.html.erb +++ b/app/views/admin/users.html.erb @@ -56,8 +56,7 @@ <%= checked_image user.admin? %> <%= format_time(user.created_on) %> <%= format_time(user.last_login_on) unless user.last_login_on.nil? %> - <% occupation = user.user_extensions.identity == 0 ? School.where("id=?",user.user_extensions.school_id).first.try(:name) : user.user_extensions.occupation %> - <%= truncate( occupation, :length => 12 ) %> + <%= truncate(get_occupation_from_user(user), :length => 12 ) %> <%= change_status_link(user) %> <%= delete_link user_path(user, :back_url => admin_users_path(params)) unless User.current == user %> diff --git a/app/views/layouts/base_syllabus.html.erb b/app/views/layouts/base_syllabus.html.erb index cf4aac86d..ddbb53200 100644 --- a/app/views/layouts/base_syllabus.html.erb +++ b/app/views/layouts/base_syllabus.html.erb @@ -43,8 +43,8 @@
- <%=render :partial => 'layouts/syllabus_info' %> -
+ <%=render :partial => 'layouts/syllabus_info' %> +
@@ -57,12 +57,12 @@
<%= render :partial => 'layouts/syllabus_teacher_list', :locals => {:syllabus => @syllabus} %> -
+ -
+
- +
<%= render :partial => 'layouts/footer' %>
@@ -102,7 +102,7 @@ accordion_head.removeClass('active'); $(this).addClass('active'); } - }); + }); }); function leftCourseslistChange(){ $('#homepageLeftMenuCourses').slideToggle(); @@ -127,6 +127,23 @@ window.location.href = '<%=syllabus_courselist_syllabus_path(@syllabus) %>'; } } + //侧导航栏配置设置 + $(".homepageLeftMenuCoursesLine").mouseover(function(){ + $(this).children(".shild").css("background","url(/images/hwork_icon.png) -82px -399px no-repeat"); + $(this).children().css("color","#ffffff"); + }); + $(".homepageLeftMenuCoursesLine").mouseout(function(){ + $(this).children(".shild").css("background","url(/images/hwork_icon.png) -6px -354px no-repeat"); + $(this).children().css("color","#808080"); + }); + $(".subNavRow").mouseover(function(){ + $(this).css("background-color","#269ac9"); + $(this).children().css("color","#ffffff"); + }); + $(".subNavRow").mouseout(function(){ + $(this).css("background-color","#ffffff"); + $(this).children().css("color","#888888"); + }); diff --git a/app/views/projects/_project_activities.html.erb b/app/views/projects/_project_activities.html.erb index 6322a532a..2e119ed7c 100644 --- a/app/views/projects/_project_activities.html.erb +++ b/app/views/projects/_project_activities.html.erb @@ -72,23 +72,8 @@ <% when "Attachment" %> <%= render :partial => 'users/project_attachment', :locals => {:activity => activity.forge_act, :user_activity_id => activity.id } %> - - - - - - - - - <%#= link_to format_activity_title("#{l(:label_attachment)}: #{act.filename}"), {:controller => 'attachments', :action => 'show', :id => act.id}, :class => "problem_tit fl fb" %> - - - - - - - - + <% when "Commit" %> + <%= render :partial => 'projects/project_commit', :locals => {:activity => activity.forge_act, :user_activity_id => activity.id, :identifier => get_rep_identifier_by_project(@project) } %> <% end %> <% end %> <% end %> diff --git a/app/views/projects/_project_commit.html.erb b/app/views/projects/_project_commit.html.erb new file mode 100644 index 000000000..eea981a9d --- /dev/null +++ b/app/views/projects/_project_commit.html.erb @@ -0,0 +1,28 @@ +<% project = Project.find(activity.project_id) %> +<% user = get_user_by_mail(activity.committer) %> +
+
+
+ <%= link_to image_tag(url_to_avatar(user), :width => "50", :height => "50"), user_path(user), :alt => "用户头像" %> + <%= render :partial => 'users/show_detail_info', :locals => {:user => user} %> +
+
+
+ <% if user.try(:realname) == ' ' %> + <%= link_to user, user_path(user), :class => "newsBlue mr15" %> + <% else %> + <%= link_to user.try(:realname), user_path(user), :class => "newsBlue mr15" %> + <% end %> + TO + <%= link_to project.to_s+" | 项目代码提交", project_path(project.id,:host=>Setting.host_course), :class => "newsBlue ml15" %> +
+
+ <%= link_to activity.comments, {:controller => 'repositories', :action => 'commit_diff', :id => project.id, :repository_id => identifier, :changeset => activity.version}, :class => "postGrey" %> +
+
+ 提交时间:<%= format_time(activity.committed_on) %> +
+
+
+
+
diff --git a/app/views/quality_analysis/_show.html.erb b/app/views/quality_analysis/_show.html.erb index b364f5f89..7901c6be0 100644 --- a/app/views/quality_analysis/_show.html.erb +++ b/app/views/quality_analysis/_show.html.erb @@ -34,7 +34,7 @@

代码重复度

<%= @ha["duplicated_lines_density"].to_i == 0 ? 0 : @ha["duplicated_lines_density"] %> borderRadius"> - <%= @ha["duplicated_lines_density"].nil? ? 0 : duplicated_lines_density_status(@ha["duplicated_lines_density"].to_i)[0] %> + <%= @ha["duplicated_lines_density"].nil? ? "良好" : duplicated_lines_density_status(@ha["duplicated_lines_density"].to_i)[0] %>

@@ -43,7 +43,7 @@

注释率

<%= @ha["comment_lines_density"].to_i == 0 ? 0 : @ha["comment_lines_density"] %> borderRadius"> - <%= @ha["comment_lines_density"].nil? ? 0 : comment_lines_density_status(@ha["comment_lines_density"].to_i)[0] %> + <%= @ha["comment_lines_density"].nil? ? "较低" : comment_lines_density_status(@ha["comment_lines_density"].to_i)[0] %>

diff --git a/app/views/wechats/user_activities.html.erb b/app/views/wechats/user_activities.html.erb index 6c3da9cf4..d21449648 100644 --- a/app/views/wechats/user_activities.html.erb +++ b/app/views/wechats/user_activities.html.erb @@ -10,7 +10,7 @@ - + <%= stylesheet_link_tag '/stylesheets/weui/weixin.css' %> - - - - - - - - - - - - - - - - - - - - - - - - - +<%= include_wechat_jsfile %> diff --git a/config/application.rb b/config/application.rb index 6f5542a1e..3885751f7 100644 --- a/config/application.rb +++ b/config/application.rb @@ -66,6 +66,7 @@ module RedmineApp # Version of your assets, change this if you want to expire all your assets config.assets.version = '1.0' + config.assets.digest = true config.action_mailer.perform_deliveries = false @@ -82,6 +83,8 @@ module RedmineApp end end + config.wechat_srcs = ['app.js','others/factory.js','others/filter.js', 'controllers/*.js', 'directives/*.js', 'others/routes.js'] + config.before_initialize do end @@ -93,4 +96,4 @@ module RedmineApp end end -end \ No newline at end of file +end diff --git a/config/menu.yml b/config/menu.yml index 1817ab44d..cc799b531 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -2,18 +2,22 @@ button: - type: "view" name: "我的动态" - url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8e1ab05163a28e37&redirect_uri=https://www.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8e1ab05163a28e37&redirect_uri=https://www.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=activities#wechat_redirect" - - name: "我的课程" + name: "我的群组" sub_button: - - type: "click" - name: "课程" - key: "DEV" + type: "view" + name: "我的课程" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8e1ab05163a28e37&redirect_uri=https://www.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=class_list#wechat_redirect" - type: "click" - name: "资源" - key: "DEV" + name: "我的项目" + key: "PROJECT" + - + type: "view" + name: "我的宝库" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8e1ab05163a28e37&redirect_uri=https://www.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=myresource#wechat_redirect" - name: "更多" @@ -22,6 +26,10 @@ button: type: "click" name: "加入班级" key: "JOIN_CLASS" + - + type: "click" + name: "加入项目" + key: "JOIN_PROJECT" - type: "click" name: "反馈" diff --git a/config/menu.yml.test b/config/menu.yml.test index a43d72816..521ff290a 100644 --- a/config/menu.yml.test +++ b/config/menu.yml.test @@ -2,18 +2,22 @@ button: - type: "view" name: "我的动态" - url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://ucloudtest.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=activities#wechat_redirect" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://test.forge.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=activities#wechat_redirect" - - name: "我的课程" + name: "我的群组" sub_button: - type: "view" - name: "课程" - url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://ucloudtest.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=class_list#wechat_redirect" + name: "我的课程" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://test.forge.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=class_list#wechat_redirect" + - + type: "click" + name: "我的项目" + key: "PROJECT" - type: "view" - name: "资源" - url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://ucloudtest.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=myresource#wechat_redirect" + name: "我的宝库" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://test.forge.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=myresource#wechat_redirect" - name: "更多" @@ -22,6 +26,10 @@ button: type: "click" name: "加入班级" key: "JOIN_CLASS" + - + type: "click" + name: "加入项目" + key: "JOIN_PROJECT" - type: "click" name: "反馈" diff --git a/config/wechat.yml b/config/wechat.yml index 9021a5c8b..b8bf670a1 100644 --- a/config/wechat.yml +++ b/config/wechat.yml @@ -22,8 +22,8 @@ default: &default #production encoding_aes_key: "QGfP13YP4BbQGkkrlYuxpn4ZIDXpBJww4fxl8CObvNw" jsapi_ticket: "C:/Users/[user_name]/wechat_jsapi_ticket" - - #template +# +# #template binding_succ_notice: "jjpDrgFErnmkrE9tf2M3o0t31ZrJ7mr0YtuE_wyLaMc" journal_notice: "uC1zAw4F2q6HTA3Pcj8VUO6wKKKiYFwnPJB4iXxpdoM" homework_message_notice: "tCf7teCVqc2vl2LZ_hppIdWmpg8yLcrI8XifxYePjps" diff --git a/db/migrate/20160718064146_add_type_to_changeset.rb b/db/migrate/20160718064146_add_type_to_changeset.rb deleted file mode 100644 index 4d51883a1..000000000 --- a/db/migrate/20160718064146_add_type_to_changeset.rb +++ /dev/null @@ -1,6 +0,0 @@ -class AddTypeToChangeset < ActiveRecord::Migration - def change - add_column :changesets, :project_id, :integer - add_column :changesets, :type, :integer, :default => false - end -end diff --git a/db/migrate/20160721075236_create_commits.rb b/db/migrate/20160721075236_create_commits.rb new file mode 100644 index 000000000..555bf72f1 --- /dev/null +++ b/db/migrate/20160721075236_create_commits.rb @@ -0,0 +1,14 @@ +class CreateCommits < ActiveRecord::Migration + def change + create_table :commits do |t| + t.integer :repository_id + t.string :version + t.string :committer + t.text :comments + t.datetime :committed_on + t.integer :project_id + + t.timestamps + end + end +end diff --git a/db/migrate/20160722074421_delete_org_anonymous.rb b/db/migrate/20160722074421_delete_org_anonymous.rb new file mode 100644 index 000000000..fe796f3c5 --- /dev/null +++ b/db/migrate/20160722074421_delete_org_anonymous.rb @@ -0,0 +1,11 @@ +class DeleteOrgAnonymous < ActiveRecord::Migration + def up + anonymous_replys = OrgDocumentComment.where("organization_id = 23 AND creator_id = 2") + if anonymous_replys + anonymous_replys.destroy_all + end + end + + def down + end +end diff --git a/lib/plugins/acts_as_watchable/lib/acts_as_watchable.rb b/lib/plugins/acts_as_watchable/lib/acts_as_watchable.rb index 06d661478..a26980c40 100644 --- a/lib/plugins/acts_as_watchable/lib/acts_as_watchable.rb +++ b/lib/plugins/acts_as_watchable/lib/acts_as_watchable.rb @@ -10,7 +10,11 @@ module Redmine def acts_as_watchable(options = {}) return if self.included_modules.include?(Redmine::Acts::Watchable::InstanceMethods) class_eval do - has_many :watchers, :as => :watchable, :dependent => :delete_all + if self.name == 'User' + has_many :watchers, :dependent => :delete_all + else + has_many :watchers, :as => :watchable, :dependent => :delete_all + end has_many :watcher_users, :through => :watchers, :source => :user, :validate => false scope :watched_by, lambda { |user_id| diff --git a/lib/tasks/gitlab_act_project.rake b/lib/tasks/gitlab_act_project.rake index ee9ca1a9a..c4854db58 100644 --- a/lib/tasks/gitlab_act_project.rake +++ b/lib/tasks/gitlab_act_project.rake @@ -1,25 +1,32 @@ namespace :gitlab do desc "sync gitlab's commit acts to trustie" task :forge_acts => :environment do - begin - g = Gitlab.client - projects = Project.find_by_sql("select * from projects where gpid is not null") - projects.each do |project| + g = Gitlab.client + projects = Project.find_by_sql("select * from projects where gpid is not null and id not in (2,847,931,942)") + projects.each do |project| + begin g_project = g.project(project.gpid) # 获取默认分支 g_default_branch = g_project.default_branch.nil? ? "master" : g_project.default_branch # 总的提交次数 commit_count = g.user_static(project.gpid, :rev => g_default_branch).count pages = commit_count / 20 + 1 - pages.each do |page| - commits = g.commits(g_project.gpid, :ref_name => g_default_branch, :page => page) + puts "#{pages}" + puts "project id is #{project.id}" + # api获取每次只能获取20次提交,所以需要通过取得page值来获取每页的提交动态 + (0..pages).each do |page| + commits = g.commits(project.gpid, :ref_name => g_default_branch, :page => page) commits.each do |commit| - Changeset.create(:project_id => project.id, :repository_id => project.gpid, :revision => commit.id, :committer => commit.author_email, :comments => Redmine::CodesetUtil.to_utf8(commit.title, 'UTF-8'), :committed_on => commit.created_at) + Commit.create(:project_id => project.id, :repository_id => project.gpid, :version => commit.id, :committer => commit.author_email, :comments => Redmine::CodesetUtil.to_utf8(commit.title, 'UTF-8'), :committed_on => commit.created_at) end end + rescue Exception => e + # puts "Some wrong with project #{project.id}" + # Project.where(:id => project.id).first.update_column(:gpid, nil) + # Repository.where(:project_id => project.id).first.destroy + # try + puts e end - rescue Exception => e - puts e end end end diff --git a/lib/tasks/gitlab_forge_acts_update.rake b/lib/tasks/gitlab_forge_acts_update.rake new file mode 100644 index 000000000..4d8e9b2fb --- /dev/null +++ b/lib/tasks/gitlab_forge_acts_update.rake @@ -0,0 +1,32 @@ +namespace :gitlab do + desc "sync gitlab's commit acts to trustie" + task :forge_acts_update => :environment do + g = Gitlab.client + ids = [2,847,931,942] + projects = Project.find(ids) + projects.each do |project| + # c = Commit.where(:project_id => project.id) + # if c.blank? + begin + g_project = g.project(project.gpid) + # 获取默认分支 + g_default_branch = g_project.default_branch.nil? ? "master" : g_project.default_branch + # 总的提交次数 + commit_count = g.user_static(project.gpid, :rev => g_default_branch).count + pages = commit_count / 20 + 1 + puts "#{pages}" + puts "project id is #{project.id}" + # api获取每次只能获取20次提交,所以需要通过取得page值来获取每页的提交动态 + (0..pages).each do |page| + commits = g.commits(project.gpid, :ref_name => g_default_branch, :page => page) + commits.each do |commit| + Commit.create(:project_id => project.id, :repository_id => project.gpid, :version => commit.id, :committer => commit.author_email, :comments => Redmine::CodesetUtil.to_utf8(commit.title, 'UTF-8'), :committed_on => commit.created_at) + end + end + rescue Exception => e + puts e + end + # end + end + end +end diff --git a/lib/tasks/gitlab_trustie_acts.rake b/lib/tasks/gitlab_trustie_acts.rake new file mode 100644 index 000000000..8c3568397 --- /dev/null +++ b/lib/tasks/gitlab_trustie_acts.rake @@ -0,0 +1,41 @@ +namespace :gitlab do + desc "sync gitlab's commit acts to trustie" + task :acts_to_trustie => :environment do + begin + projects = Project.where(:status => 1) + projects.each do |project| + c = Commit.find_by_sql("SELECT * FROM `commits` where project_id = #{project.id} order by committed_on limit 1;") + g_project = g.project(project.gpid) + end + rescue Exception => e + puts e + end + g = Gitlab.client + ids = [2,847,931,942] + projects = Project.find(ids) + projects.each do |project| + c = Commit.where(:project_id => project.id) + if c.blank? + begin + g_project = g.project(project.gpid) + # 获取默认分支 + g_default_branch = g_project.default_branch.nil? ? "master" : g_project.default_branch + # 总的提交次数 + commit_count = g.user_static(project.gpid, :rev => g_default_branch).count + pages = commit_count / 20 + 1 + puts "#{pages}" + puts "project id is #{project.id}" + # api获取每次只能获取20次提交,所以需要通过取得page值来获取每页的提交动态 + (0..pages).each do |page| + commits = g.commits(project.gpid, :ref_name => g_default_branch, :page => page) + commits.each do |commit| + Commit.create(:project_id => project.id, :repository_id => project.gpid, :version => commit.id, :committer => commit.author_email, :comments => Redmine::CodesetUtil.to_utf8(commit.title, 'UTF-8'), :committed_on => commit.created_at) + end + end + rescue Exception => e + puts e + end + end + end + end +end diff --git a/lib/tasks/gitlab_unused.rake b/lib/tasks/gitlab_unused.rake new file mode 100644 index 000000000..4b81acbff --- /dev/null +++ b/lib/tasks/gitlab_unused.rake @@ -0,0 +1,18 @@ +namespace :gitlab do + desc "sync gitlab's commit acts to trustie" + task :unused => :environment do + begin + Project.where("id in (161,236,266)").update_all(:gpid => nil) + repositories = Repository.find_by_sql("select * from repositories where project_id in (select project_id from repositories group by project_id having count(project_id) > 1);") + repositories.each do |rep| + puts "#{rep.id}" + if rep.type == "Repository::Git" + rep.destroy + end + end + # Repository.where("project_id in (161,236,266)").destroy_all + rescue Exception => e + puts e + end + end +end diff --git a/lib/tasks/wechat.rake b/lib/tasks/wechat.rake new file mode 100644 index 000000000..bbba9994c --- /dev/null +++ b/lib/tasks/wechat.rake @@ -0,0 +1,31 @@ +#coding=utf-8 +# + +def compress(srcs, outfile) + wechat_path = File.join(Rails.root, "public", "javascripts", "wechat") + out_buffer = '' + + srcs.each do |src| + Dir.glob("#{wechat_path}/#{src}").each do |path| + puts "assets #{path}" + out_buffer = out_buffer + "\n//#{File.basename(path)}\n" + Uglifier.compile(File.read(path)) + end + end + + File.open(File.join(wechat_path, "build/#{outfile}"), 'w+') {|f| f.write(out_buffer)} +end + + +namespace :wechat do + desc "assets javascript file" + task :assets => :environment do + srcs = Rails.application.config.wechat_srcs + compress(srcs, 'app.min.js') + end + + desc "minify angularjs" + task :minify => :environment do + srcs = ['../jquery-1.3.2.js','angular.js', 'angular-route.js', 'angular-sanitize.min.js'] + compress(srcs, 'angular.all.min.js') + end +end diff --git a/public/assets/wechat/activities.html b/public/assets/wechat/activities.html index cb1696dbf..c2df0c8e7 100644 --- a/public/assets/wechat/activities.html +++ b/public/assets/wechat/activities.html @@ -160,7 +160,7 @@
{{act.latest_update}}
- +
状态:{{act.issue_detail.issue_status}} 优先级:{{act.issue_detail.issue_priority}}
@@ -467,7 +467,7 @@
{{act.latest_update}}
- +
状态:{{act.issue_detail.issue_status}} 优先级:{{act.issue_detail.issue_priority}}
diff --git a/public/assets/wechat/app.html b/public/assets/wechat/app.html index a3977ec5c..726755c3d 100644 --- a/public/assets/wechat/app.html +++ b/public/assets/wechat/app.html @@ -6,9 +6,9 @@ - + - + diff --git a/public/assets/wechat/blog_detail.html b/public/assets/wechat/blog_detail.html index aabea2532..d18575b94 100644 --- a/public/assets/wechat/blog_detail.html +++ b/public/assets/wechat/blog_detail.html @@ -42,11 +42,61 @@
{{journal.lasted_comment}}
-
-
+ +
+ +
+ +
+ +
{{journal.parents_reply_top[0].lasted_comment}}
+
+
+
+
+ + + + + + + + + + + + + +
点击展开更多楼层
+ +
+
+ +
{{reply_bottom.lasted_comment}}
+
+
+
+
+
+
+
+
+
+
+
- +
+
更多
+
@@ -63,4 +113,20 @@
- \ No newline at end of file + + + \ No newline at end of file diff --git a/public/assets/wechat/class.html b/public/assets/wechat/class.html index c328ed226..01628c2f4 100644 --- a/public/assets/wechat/class.html +++ b/public/assets/wechat/class.html @@ -23,7 +23,7 @@
-
{{r.filename}}发送
+
{{r.filename}}发送

暂无课件,
请登录Trustie网站,在PC浏览器中上传课件。

@@ -42,19 +42,19 @@
-
{{r.homework_name}}发送
+
{{r.homework_name}}发送

暂无作业,
请登录Trustie网站,在PC浏览器中上传作业。

-
{{r.exercise_name}}发送
+
{{r.exercise_name}}发送

暂无小测验,
请登录Trustie网站,在PC浏览器中上传小测验。

- + diff --git a/public/assets/wechat/class_list.html b/public/assets/wechat/class_list.html index a3c709cb5..2c3b3b7b9 100644 --- a/public/assets/wechat/class_list.html +++ b/public/assets/wechat/class_list.html @@ -3,8 +3,9 @@
课程列表
我创建的课程
-
-
{{syllabus.title}}
+
+
+
  • @@ -17,8 +18,9 @@
我参与的课程
-
-
{{syllabus.title}}
+
+
+
- + +
\ No newline at end of file diff --git a/public/assets/wechat/edit_class.html b/public/assets/wechat/edit_class.html index 5953e046b..62022566b 100644 --- a/public/assets/wechat/edit_class.html +++ b/public/assets/wechat/edit_class.html @@ -3,9 +3,9 @@
管理课程
-
课程
+
课程
-
班级删除
+
班级删除
完成
diff --git a/public/assets/wechat/myresource.html b/public/assets/wechat/myresource.html index c89f39684..90fb13892 100644 --- a/public/assets/wechat/myresource.html +++ b/public/assets/wechat/myresource.html @@ -12,7 +12,7 @@
- {{r.filename}}发送
+ {{r.filename}}发送
大小:{{r.attafile_size}}
@@ -20,9 +20,10 @@

暂无课件,
请登录Trustie网站,在PC浏览器中上传课件。

+
-
{{r.homework_name}}发送
+
{{r.homework_name}}发送
@@ -32,7 +33,7 @@ 请登录Trustie网站,在PC浏览器中创建作业。

-
{{r.exercise_name}}发送
+
{{r.exercise_name}}发送
diff --git a/public/assets/wechat/new_class.html b/public/assets/wechat/new_class.html index 039d19d75..5ce75d358 100644 --- a/public/assets/wechat/new_class.html +++ b/public/assets/wechat/new_class.html @@ -3,9 +3,9 @@
新建课程
-
课程
+
课程
-
班级删除
+
班级删除
完成
diff --git a/public/assets/wechat/send_class_list.html b/public/assets/wechat/send_class_list.html index b66b5008d..72a52fc3f 100644 --- a/public/assets/wechat/send_class_list.html +++ b/public/assets/wechat/send_class_list.html @@ -5,7 +5,7 @@
请选择要发送的班级
-
+
{{syllabus.title}}
  • @@ -19,6 +19,6 @@ -
    发送
    +
    发送
diff --git a/public/assets/wechat/templates/alert3.html b/public/assets/wechat/templates/alert3.html new file mode 100644 index 000000000..c7516450c --- /dev/null +++ b/public/assets/wechat/templates/alert3.html @@ -0,0 +1,15 @@ +
+
+
+

{{message}}

+
+ +
+ 取消 +
+
+
+ 确定 +
+
+
\ No newline at end of file diff --git a/public/images/arrow.png b/public/images/arrow.png new file mode 100644 index 000000000..2081ddf8d Binary files /dev/null and b/public/images/arrow.png differ diff --git a/public/javascripts/wechat/build/app.min.js b/public/javascripts/wechat/build/app.min.js index b704dfb6e..f7838e901 100644 --- a/public/javascripts/wechat/build/app.min.js +++ b/public/javascripts/wechat/build/app.min.js @@ -1,24 +1,49 @@ -var app=angular.module("wechat",["ngRoute"]);app.constant("config",{rootPath:"/assets/wechat/",rootUrl:"/",apiUrl:"/api/v1/"}),app.run(["$rootScope","auth","$location","$routeParams",function(t,a,e,r){g_redirect_path&&g_redirect_path.length>1&&(e.path(g_redirect_path),g_redirect_path=null),t.$on("$routeChangeError",function(t,a,r){a&&a.templateUrl&&(a.templateUrl.endsWith("login.html")||a.templateUrl.endsWith("reg.html")||e.path("/login"))}),t.$on("$routeChangeStart",function(t,a,e){})}]); -app.factory("alertService",function(){function t(){this.title=null,this.message=null,this.visible=null,this.cb=null}return t.prototype.showMessage=function(t,i,e){this.message=i,this.title=t,this.visible=!0,this.cb=e},t.prototype.dismiss=function(){this.message=null,this.title=null,this.visible=!1,this.cb&&this.cb()},{create:function(){return new t}}}),app.factory("auth",["$http","$routeParams","$q","session","config",function(t,i,e,a,c){var s=function(){var c=e.defer(),s=o();if(s&&s.length>10)c.resolve(s);else{window.g_code||i.code||a.get("code");t.post("/wechat/get_bind",{}).then(function(t){0!=t.data.status?c.reject(t.data.message):(a.save("token",t.data.token),c.resolve(t.data.token))})["catch"](function(t){c.reject(t)})}return c.promise},o=function(){return a.get("token")};return{get_bind:s,token:o}}]),app.factory("session",function(){return{save:function(t,i){sessionStorage.setItem(t,i)},get:function(t){return sessionStorage.getItem(t)}}}),app.factory("rms",function(){var t={},i=function(i,e){t[i]=e},e=function(i){return t[i]};return{save:i,get:e}}),app.factory("common",["$http","auth","$routeParams","rms",function(t,i,e,a){var c=function(e,a,c,s){if(c.comment&&!(c.comment.length<=0)){var o=c.comment.replace(/\n/g,"
"),n={type:a,content:o,token:i.token()};c.disabled=!0,t({method:"POST",url:apiUrl+"new_comment/"+e,data:n}).then(function(t){c.disabled=!1,"function"==typeof s&&s()},function(t){})}},s=function(e,a){return t({method:"GET",url:apiUrl+a+"/"+e+"?token="+i.token()})},o=function(e){t({method:"POST",url:apiUrl+"praise/"+e.act_id,data:{token:i.token(),type:e.act_type}}).then(function(t){console.log(t.data)},function(t){})},n=function(e){t({method:"POST",url:apiUrl+"praise/"+e.act_id,data:{token:i.token(),type:e.act_type}}).then(function(t){console.log(t.data)},function(t){})},r=function(t){t.scope.formData={comment:""};var i=function(i){s(i,t.type).then(function(i){t.loadCallback(i.data)},function(t){})};i(t.id),t.scope.addReply=function(e){console.log(e.comment),c(t.id,t.replyType,e,function(){t.scope.formData={comment:""},i(t.id),"function"==typeof t.replyCallback&&t.replyCallback()})},t.scope.addPraise=function(t){activities=a.get("activities")||[],course_activities=a.get("course_activities")||[],project_activities=a.get("project_activities")||[];for(var i in activities)if(activities[i].act_id==t.act_id){activities[i].praise_count+=1,activities[i].has_praise=!0;break}for(var i in course_activities)if(course_activities[i].act_id==t.act_id){course_activities[i].praise_count+=1,course_activities[i].has_praise=!0;break}for(var i in project_activities)if(project_activities[i].act_id==t.act_id){project_activities[i].praise_count+=1,project_activities[i].has_praise=!0;break}a.save("activities",activities),a.save("course_activities",course_activities),a.save("project_activities",project_activities),t.praise_count+=1,t.has_praise=!0,o(t)},t.scope.decreasePraise=function(t){activities=a.get("activities")||[],course_activities=a.get("course_activities")||[],project_activities=a.get("project_activities")||[];for(var i in activities)if(activities[i].act_id==t.act_id){activities[i].praise_count-=1,activities[i].has_praise=!1;break}for(var i in course_activities)if(course_activities[i].act_id==t.act_id){course_activities[i].praise_count-=1,course_activities[i].has_praise=!1;break}for(var i in project_activities)if(project_activities[i].act_id==t.act_id){project_activities[i].praise_count-=1,project_activities[i].has_praise=!1;break}a.save("activities",activities),a.save("course_activities",course_activities),a.save("project_activities",project_activities),t.praise_count-=1,t.has_praise=!1,n(t)}};return{init:r,addCommonReply:c,loadCommonData:s,addCommonPraise:o,decreaseCommonPraise:n}}]); -app.filter("safeHtml",["$sce",function(t){return function(n){return t.trustAsHtml(n)}}]),app.filter("identify",function(){return function(t){return"TeachingAsistant"==t?"教辅":""}}); -app.controller("ActivityController",["$anchorScroll","$location","$scope","$http","$timeout","auth","rms","common","alertService",function(a,e,t,i,c,s,o,r,_){t.replaceUrl=function(a){return a},t.menus=["所有动态","课程动态","项目动态"],t.alertService=_.create(),console.log("ActivityController load"),t.page=o.get("page")||0,t.activities=o.get("activities")||[],t.has_more=o.get("has_more"),t.course_page=o.get("course_page")||0,t.course_activities=o.get("course_activities")||[],t.course_has_more=o.get("course_has_more"),t.project_page=o.get("project_page")||0,t.project_activities=o.get("project_activities")||[],t.project_has_more=o.get("project_has_more"),t.loadActData=function(a,e){switch(container_type="All",a){case 1:container_type="All",t.page=e;break;case 2:container_type="Course",t.course_page=e;break;case 3:container_type="Project",t.project_page=e}i({method:"POST",url:apiUrl+"activities",data:{token:s.token(),page:e,container_type:container_type}}).then(function(a){if(a.data.page>0)switch(a.data.container_type){case"All":t.activities=t.activities.concat(a.data.data);break;case"Course":t.course_activities=t.course_activities.concat(a.data.data);break;case"Project":t.project_activities=t.project_activities.concat(a.data.data);break;case 3:}else switch(a.data.container_type){case"All":t.activities=a.data.data;break;case"Course":t.course_activities=a.data.data;break;case"Project":t.project_activities=a.data.data;break;case 3:}switch(a.data.container_type){case"All":o.save("activities",t.activities),t.has_more=a.data.count+10*a.data.page1&&(e.path(g_redirect_path),g_redirect_path=null),t.$on("$routeChangeError",function(t,a){a&&a.templateUrl&&(a.templateUrl.endsWith("login.html")||a.templateUrl.endsWith("reg.html")||e.path("/login"))}),t.$on("$routeChangeStart",function(){})}]); +//factory.js +app.factory("alertService",function(){function t(){this.title=null,this.message=null,this.visible=null,this.cb=null}return t.prototype.showMessage=function(t,i,e){this.message=i,this.title=t,this.visible=!0,this.cb=e},t.prototype.dismiss=function(){this.message=null,this.title=null,this.visible=!1,this.cb&&this.cb()},{create:function(){return new t}}}),app.factory("auth",["$http","$routeParams","$q","session","config",function(t,i,e,a){var c=function(){var c=e.defer(),o=s();if(o&&o.length>10)c.resolve(o);else{{window.g_code||i.code||a.get("code")}t.post("/wechat/get_bind",{}).then(function(t){0!=t.data.status?c.reject(t.data.message):(a.save("token",t.data.token),c.resolve(t.data.token))})["catch"](function(t){c.reject(t)})}return c.promise},s=function(){return a.get("token")};return{get_bind:c,token:s}}]),app.factory("session",function(){return{save:function(t,i){sessionStorage.setItem(t,i)},get:function(t){return sessionStorage.getItem(t)}}}),app.factory("rms",function(){var t={},i=function(i,e){t[i]=e},e=function(i){return t[i]};return{save:i,get:e}}),app.factory("common",["$http","auth","$routeParams","rms",function(t,i,e,a){var c=function(e,a,c,s){if(c.comment&&!(c.comment.length<=0)){var o=c.comment.replace(/\n/g,"
"),n={type:a,content:o,token:i.token()};c.disabled=!0,t({method:"POST",url:apiUrl+"new_comment/"+e,data:n}).then(function(){c.disabled=!1,"function"==typeof s&&s()},function(){})}},s=function(e,a){return t({method:"GET",url:apiUrl+a+"/"+e+"?token="+i.token()})},o=function(e){t({method:"POST",url:apiUrl+"praise/"+e.act_id,data:{token:i.token(),type:e.act_type}}).then(function(t){console.log(t.data)},function(){})},n=function(e){t({method:"POST",url:apiUrl+"praise/"+e.act_id,data:{token:i.token(),type:e.act_type}}).then(function(t){console.log(t.data)},function(){})},r=function(t){t.scope.formData={comment:""};var i=function(i){s(i,t.type).then(function(i){t.loadCallback(i.data)},function(){})};i(t.id),t.scope.addReply=function(e){console.log(e.comment),c(t.id,t.replyType,e,function(){t.scope.formData={comment:""},i(t.id),"function"==typeof t.replyCallback&&t.replyCallback()})},t.scope.addPraise=function(t){activities=a.get("activities")||[],course_activities=a.get("course_activities")||[],project_activities=a.get("project_activities")||[];for(var i in activities)if(activities[i].act_id==t.act_id){activities[i].praise_count+=1,activities[i].has_praise=!0;break}for(var i in course_activities)if(course_activities[i].act_id==t.act_id){course_activities[i].praise_count+=1,course_activities[i].has_praise=!0;break}for(var i in project_activities)if(project_activities[i].act_id==t.act_id){project_activities[i].praise_count+=1,project_activities[i].has_praise=!0;break}a.save("activities",activities),a.save("course_activities",course_activities),a.save("project_activities",project_activities),t.praise_count+=1,t.has_praise=!0,o(t)},t.scope.decreasePraise=function(t){activities=a.get("activities")||[],course_activities=a.get("course_activities")||[],project_activities=a.get("project_activities")||[];for(var i in activities)if(activities[i].act_id==t.act_id){activities[i].praise_count-=1,activities[i].has_praise=!1;break}for(var i in course_activities)if(course_activities[i].act_id==t.act_id){course_activities[i].praise_count-=1,course_activities[i].has_praise=!1;break}for(var i in project_activities)if(project_activities[i].act_id==t.act_id){project_activities[i].praise_count-=1,project_activities[i].has_praise=!1;break}a.save("activities",activities),a.save("course_activities",course_activities),a.save("project_activities",project_activities),t.praise_count-=1,t.has_praise=!1,n(t)}};return{init:r,addCommonReply:c,loadCommonData:s,addCommonPraise:o,decreaseCommonPraise:n}}]); +//filter.js +app.filter("safeHtml",["$sce",function(t){return function(n){return t.trustAsHtml(n)}}]),app.filter("identify",function(){return function(t){return"TeachingAsistant"==t?"\u6559\u8f85":""}}); +//activity.js +app.controller("ActivityController",["$anchorScroll","$location","$scope","$http","$timeout","auth","rms","common","alertService",function(a,e,t,i,c,s,o,r,_){t.replaceUrl=function(a){return a},t.menus=["\u6240\u6709\u52a8\u6001","\u8bfe\u7a0b\u52a8\u6001","\u9879\u76ee\u52a8\u6001"],t.alertService=_.create(),console.log("ActivityController load"),t.page=o.get("page")||0,t.activities=o.get("activities")||[],t.has_more=o.get("has_more"),t.course_page=o.get("course_page")||0,t.course_activities=o.get("course_activities")||[],t.course_has_more=o.get("course_has_more"),t.project_page=o.get("project_page")||0,t.project_activities=o.get("project_activities")||[],t.project_has_more=o.get("project_has_more"),t.loadActData=function(a,e){switch(container_type="All",a){case 1:container_type="All",t.page=e;break;case 2:container_type="Course",t.course_page=e;break;case 3:container_type="Project",t.project_page=e}i({method:"POST",url:apiUrl+"activities",data:{token:s.token(),page:e,container_type:container_type}}).then(function(a){if(a.data.page>0)switch(a.data.container_type){case"All":t.activities=t.activities.concat(a.data.data);break;case"Course":t.course_activities=t.course_activities.concat(a.data.data);break;case"Project":t.project_activities=t.project_activities.concat(a.data.data);break;case 3:}else switch(a.data.container_type){case"All":t.activities=a.data.data;break;case"Course":t.course_activities=a.data.data;break;case"Project":t.project_activities=a.data.data;break;case 3:}switch(a.data.container_type){case"All":o.save("activities",t.activities),t.has_more=a.data.count+10*a.data.page0?u.alertService_2.showMessage("提示","您确定要删除该班级吗?",function(){e.post(l.apiUrl+"courses/"+t.id+"/del",{token:a.token()}).then(function(e){0!=e.data.status?u.alertService_1.showMessage("出错了",e.data.message):u.alertService_1.showMessage("提示","删除班级成功",function(){u.syllabus.courses.splice(s,1)}),console.log(e.data.data)})}):u.syllabus.courses.splice(s,1)},u.newClass=function(s,t){if(s.$setSubmitted(),console.log(t),!s.$valid)return void console.log(s.$error);var r=[],c=[];for(var d in u.syllabus.courses){var b=u.syllabus.courses[d];b.id?b.tmpname!=b.name&&c.push({id:b.id,name:b.tmpname}):r.push(b.tmpname)}e.post(l.apiUrl+"syllabuses/"+i+"/edit",{token:a.token(),id:i,title:u.syllabus.tmptitle,add_courses:r,modify_courses:c}).then(function(s){0!=s.data.status?u.alertService_1.showMessage("出错了",s.data.message):u.alertService_1.showMessage("提示","保存课程成功",function(){n.save("syllabuses",[]),o.path("/class_list")}),console.log(s.data.data)})},u.fadeText=function(){s.change=!0}}]); +//edit_class.js +app.controller("EditClassController",["$scope","$http","auth","config","alertService","$location","$routeParams","rms",function(s,e,a,l,t,o,r,n){var u=s;u.syllabus=n.get("current_edit_syllobus");var i=r.id;if(u.syllabus||e.get(l.apiUrl+"syllabuses/"+i+"?token="+a.token()).then(function(s){if(console.log(s.data),u.syllabus=s.data.data,u.syllabus){for(var e in u.syllabus.courses){var a=u.syllabus.courses[e];a.tmpname=a.name}u.syllabus.tmptitle=u.syllabus.title}}),console.log(u.syllabus),u.syllabus){for(var c in u.syllabus.courses){var d=u.syllabus.courses[c];d.tmpname=d.name}u.syllabus.tmptitle=u.syllabus.title}u.alertService_1=t.create(),u.alertService_2=t.create(),u.addClass=function(){u.syllabus.courses.push({can_setting:!0})},u.deleteClass=function(s){var t=u.syllabus.courses[s];t.id>0?u.alertService_2.showMessage("\u63d0\u793a","\u60a8\u786e\u5b9a\u8981\u5220\u9664\u8be5\u73ed\u7ea7\u5417\uff1f",function(){e.post(l.apiUrl+"courses/"+t.id+"/del",{token:a.token()}).then(function(e){0!=e.data.status?u.alertService_1.showMessage("\u51fa\u9519\u4e86",e.data.message):u.alertService_1.showMessage("\u63d0\u793a","\u5220\u9664\u73ed\u7ea7\u6210\u529f",function(){u.syllabus.courses.splice(s,1)}),console.log(e.data.data)})}):u.syllabus.courses.splice(s,1)},u.newClass=function(s,t){if(s.$setSubmitted(),console.log(t),!s.$valid)return void console.log(s.$error);var r=[],c=[];for(var d in u.syllabus.courses){var b=u.syllabus.courses[d];b.id?b.tmpname!=b.name&&c.push({id:b.id,name:b.tmpname}):r.push(b.tmpname)}e.post(l.apiUrl+"syllabuses/"+i+"/edit",{token:a.token(),id:i,title:u.syllabus.tmptitle,add_courses:r,modify_courses:c}).then(function(s){0!=s.data.status?u.alertService_1.showMessage("\u51fa\u9519\u4e86",s.data.message):u.alertService_1.showMessage("\u63d0\u793a","\u4fdd\u5b58\u8bfe\u7a0b\u6210\u529f",function(){n.save("syllabuses",[]),o.path("/class_list")}),console.log(s.data.data)})},u.fadeText=function(){s.change=!0}}]); +//homework.js app.controller("HomeworkController",["$scope","$http","$routeParams","auth","common",function(o,e,l,n,r){r.init({id:l.id,scope:o,type:"whomeworks",replyType:"HomeworkCommon",loadCallback:function(e){console.log(e),o.homework=e.data},replyCallback:function(){}})}]); -app.controller("InviteCodeController",["$scope","$http","$routeParams","config","auth",function(t,e,i,n,o){var a=t;a.course={};var c=i.id;e.get(n.apiUrl+"courses/"+c+"?token="+o.token()).then(function(t){console.log(t.data),a.course=t.data.data}),a.share=function(){window.WeixinJSBridge.invoke("sendAppMessage",{appid:"wxf694495398c7d470",type:"link",data_url:"",img_url:"http://pnewsapp.tc.qq.com/newsapp_bt/0/9963967/640",img_height:370,img_width:550,link:"http://view.inews.qq.com/a/WXN2013101101385701",desc:"desc",title:"title"},function(t){})}}]); +//invite_code.js +app.controller("InviteCodeController",["$scope","$http","$routeParams","config","auth",function(t,e,i,n,o){var a=t;a.course={};var c=i.id;e.get(n.apiUrl+"courses/"+c+"?token="+o.token()).then(function(t){console.log(t.data),a.course=t.data.data}),a.share=function(){window.WeixinJSBridge.invoke("sendAppMessage",{appid:"wxf694495398c7d470",type:"link",data_url:"",img_url:"http://pnewsapp.tc.qq.com/newsapp_bt/0/9963967/640",img_height:370,img_width:550,link:"http://view.inews.qq.com/a/WXN2013101101385701",desc:"desc",title:"title"},function(){})}}]); +//issue.js app.controller("IssueController",["$scope","$http","$routeParams","auth","common",function(o,e,l,s,t){t.init({id:l.id,scope:o,type:"issues",replyType:"Issue",loadCallback:function(e){console.log(e),o.issue=e.data},replyCallback:function(){}})}]); +//journals.js app.controller("JournalsController",["$scope","$http","$routeParams","auth","common",function(o,a,e,l,n){n.init({id:e.id,scope:o,type:"journal_for_messages",replyType:"JournalsForMessage",loadCallback:function(a){o.message=a.data},replyCallback:function(){}})}]); -app.controller("LoginController",["$scope","$http","$location","$routeParams","alertService","config","auth","session",function(e,o,t,a,i,n,s,l){s.get_bind().then(function(){t.path("/activities")}),a.code&&l.save("code",a.code);var r=e;r.loginFailed=!1,r.alertService=i.create(),r.findPwdDialog=i.create(),r.login=function(a,i){return a.$setSubmitted(),console.log(i),a.$valid?(console.log(apiUrl+"auth"),void o.post(n.apiUrl+"users/wxbind",{login:i.login,password:i.password}).then(function(o){console.log(o.data),r.loginFailed=0!=o.data.status,e.loginFailed?r.alertService.showMessage("出错了",o.data.message):r.alertService.showMessage("提示",o.data.message,function(){t.path("/activities")})})["catch"](function(e){r.alertService.showMessage("出错了",e)})):void console.log(a.$error)},r.showBox=function(){r.findPwdDialog.showMessage("提示","请访问www.trustie.net获取密码,谢谢!")},r.goReg=function(){t.path("/reg")}}]); -app.controller("MyResourceController",["$scope","$http","auth","config","$location","rms",function(e,a,o,s,r,t){var c=e;c.menus=["课件","作业","测验"],c.resources=[],c.homeworks=[],c.exercise=[],c.resources_tag=!1,c.homeworks_tag=!1,c.exercises_tag=!1,c.page=t.get("page")||0,c.resources=t.get("resources")||[],c.has_more=t.get("has_more"),c.homework_page=t.get("homework_page")||0,c.homeworks=t.get("homeworks")||[],c.homework_has_more=t.get("homework_has_more"),c.exercise_page=t.get("exercise_page")||0,c.exercise=t.get("exercise")||[],c.exercise_has_more=t.get("exercise_has_more"),c.searchText="",c.sendFile=function(e){r.path("/send_class_list").search({id:e.id})},c.loadResourceData=function(e,s){1==e?(c.page=s,a({method:"POST",url:apiUrl+"resources",data:{token:o.token(),page:s}}).then(function(e){c.resources_tag=!0,e.data.page>0?c.resources=c.resources.concat(e.data.data):c.resources=e.data.data,t.save("resources",c.resources),c.has_more=e.data.count+10*e.data.page0?c.homeworks=c.homeworks.concat(e.data.data):c.homeworks=e.data.data,t.save("homeworks",c.homeworks),c.homework_has_more=e.data.count+10*e.data.page0?c.exercise=c.exercise.concat(e.data.data):c.exercise=e.data.data,t.save("exercise",c.exercise),c.exercise_has_more=e.data.count+10*e.data.page0?c.resources.concat(e.data.data):e.data.data,t.save("resources",c.resources),c.has_more=e.data.count+10*e.data.page0?c.homeworks.concat(e.data.data):e.data.data,t.save("homeworks",c.homeworks),c.homework_has_more=e.data.count+10*e.data.page0?c.exercise.concat(e.data.data):e.data.data,t.save("exercise",c.exercise),c.exercise_has_more=e.data.count+10*e.data.page :model do + pending "add some examples to (or delete) #{__FILE__}" +end