diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index 1f8cdd275..d8fc9ce28 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -175,8 +175,10 @@ class AdminController < ApplicationController
def courses
@name = params[:name].to_s.strip.downcase
if @name && @name != ""
- @courses = Course.select{ |course| course.teacher && ((course.teacher.show_name).include?(@name) || course.name.include?(@name))}
- @courses = @courses.sort{|x, y| y.created_at <=> x.created_at}
+ all_user_ids = Course.all.map{|course| course.tea_id}
+ user_str_ids = search_user_by_name all_user_ids, @name
+ user_ids = user_str_ids.empty? ? "(-1)" : "(" + user_str_ids.join(",") + ")"
+ @courses = Course.where("tea_id in #{user_ids} or name like '%#{@name}%'").reorder("created_at desc")
else
@courses = Course.order('created_at desc')
end
diff --git a/app/controllers/memos_controller.rb b/app/controllers/memos_controller.rb
index a47ddf787..69a1b829c 100644
--- a/app/controllers/memos_controller.rb
+++ b/app/controllers/memos_controller.rb
@@ -14,17 +14,17 @@ class MemosController < ApplicationController
# layout 'base_memos'
def quote
- @subject = @memo.subject
- @subject = "RE: #{@subject}" unless @subject.starts_with?('RE:')
-
- @content = "#{ll(Setting.default_language, :text_user_wrote, @memo.author)}
"
- @content << @memo.content.to_s.strip.gsub(%r{
((.|\s)*?)}m, '[...]').gsub(/(\r?\n|\r\n?)/, "\n") + "\n\n
" << @content - #@content = "> #{ll(Setting.default_language, :text_user_wrote, @memo.author)}\n> " - #@content << @memo.content.to_s.strip.gsub(%r{\n\n((.|\s)*?)}m, '[...]').gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n" - #@content_html = textilizable(@content) - @temp = Memo.new - @temp.content = @content + # @subject = @memo.subject + # @subject = "RE: #{@subject}" unless @subject.starts_with?('RE:') + # + # @content = "#{ll(Setting.default_language, :text_user_wrote, @memo.author)}
" + # @content << @memo.content.to_s.strip.gsub(%r{((.|\s)*?)}m, '[...]').gsub(/(\r?\n|\r\n?)/, "\n") + "
" << @content + # #@content = "> #{ll(Setting.default_language, :text_user_wrote, @memo.author)}\n> " + # #@content << @memo.content.to_s.strip.gsub(%r{((.|\s)*?)}m, '[...]').gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n" + # #@content_html = textilizable(@content) + # @temp = Memo.new + # @temp.content = @content end def new @@ -47,6 +47,8 @@ class MemosController < ApplicationController @quote = params[:quote] end + + #unless params[:quote].nil? # @quote = params[:quote][:quote] #end @@ -55,6 +57,10 @@ class MemosController < ApplicationController @memo.forum_id = params[:forum_id] @memo.author_id = User.current.id + if params[:memo][:parent_id] + @memo.root_id = (Memo.find params[:memo][:parent_id]).root_id.nil? ? params[:memo][:parent_id].to_i : (Memo.find params[:memo][:parent_id]).root_id + end + @memo.save_attachments(params[:attachments] || (params[:memo] && params[:memo][:uploads])) @memo.content = @quote + @memo.content respond_to do |format| @@ -111,32 +117,37 @@ class MemosController < ApplicationController @memo = @memo.root # 取出楼主,防止输入帖子id让回复作为主贴显示 @memo.update_column(:viewed_count, (@memo.viewed_count.to_i + 1)) - page = params[:page] - if params[:r] && page.nil? - offset = @memo.children.where("#{Memo.table_name}.id < ?", params[:r].to_i).count - page = 1 + offset / pre_count - else - - end - @reply_count = @memo.children.count - @reply_pages = Paginator.new @reply_count, pre_count, page - @replies = @memo.children. - includes(:author, :attachments). - reorder("#{Memo.table_name}.created_at DESC"). - limit(@reply_pages.per_page). - offset(@reply_pages.offset). - all + # page = params[:page] + # if params[:r] && page.nil? + # offset = @memo.children.where("#{Memo.table_name}.id < ?", params[:r].to_i).count + # page = 1 + offset / pre_count + # else + # end + + # @reply_count = @memo.children.count + # @reply_pages = Paginator.new @reply_count, pre_count, page + # @replies = @memo.children. + # includes(:author, :attachments). + # reorder("#{Memo.table_name}.created_at DESC"). + # limit(@reply_pages.per_page). + # offset(@reply_pages.offset). + # all + + @replies = Memo.where("root_id = #{@memo.id}").reorder("created_at desc") + @reply_count = @replies.count + @replies = get_no_children_comments_all @replies + @limit_count = @replies.count + @page = params[:page] ? params[:page].to_i + 1 : 0 + @limit = 10 + @replies = @replies[@page * @limit..@page * @limit + 9] @memo_new = Memo.new @my_topic_count = Memo.where("forum_id = #{@memo.forum_id} and author_id = #{User.current.id} and parent_id is null").count @my_replies_count = Memo.where("forum_id = #{@memo.forum_id} and author_id = #{User.current.id} and parent_id is not null").count - # @memo = Memo.find_by_id(params[:id]) - # @forum = Forum.find(params[:forum_id]) - # @replies = @memo.replies - # @mome_new = Memo.new respond_to do |format| + format.js format.html {render :layout=> 'base_forums'}#:layout=> 'base_forums', format.json { render json: @memo } format.xml { render xml: @memo } diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index a1a085895..0a0a422a6 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -1,15 +1,19 @@ +# encoding: utf-8 # 如果你对改模块任何功能不清楚,请不要随便改 # @Hjqreturn class PullRequestsController < ApplicationController before_filter :authorize_logged before_filter :find_project_and_repository - before_filter :connect_gitlab, :only => [:index, :show, :create, :accept_pull_request, :pull_request_commits, :pull_request_changes, :new, - :update_pull_request, :pull_request_comments, :create_pull_request_comment, :compare_pull_request] + before_filter :connect_gitlab, :only => [:index, :show, :create, :accept_pull_request, :pull_request_commits, :pull_request_changes, :new, :update_pull_request, :pull_request_comments, :create_pull_request_comment, :compare_pull_request] + before_filter :member_allowed, :only => [:new, :create] + before_filter :manager_allowed, :only => [:accept_pull_request] layout "base_projects" include PullRequestsHelper include ApplicationHelper + require 'ostruct' + # 返回json格式 def index # project_menu_type 为了控制base顶部导航 @@ -92,7 +96,7 @@ class PullRequestsController < ApplicationController if compare_pull_request(source_branch, target_project_id, target_branch) # 如果传送了目标项目ID即向fork源项目发送请求 # if params[:forked_project_id] && params[:source_project] == "forked_project_name" - if !params[:target_project_id].blank? + if !params[:target_project_id].blank? && params[:target_project_id].to_i != @project.id target_project_id = params[:forked_project_id].to_i request = @g.create_merge_request(@project.gpid, title, User.current.gid, :description => description, :source_branch => source_branch, :target_branch => target_branch, :target_project_id => target_project_id) @fork_project_name = Project.find(params[:target_project_id]).try(:name) @@ -132,8 +136,14 @@ class PullRequestsController < ApplicationController format.js{redirect_to new_project_pull_request_path(:show_tip => tip)} end end + rescue Gitlab::Error::Forbidden => e + @message = l(:label_pull_request_forbidden) rescue Gitlab::Error::Conflict => e - @message = e.message + @message = l(:label_pull_request_conflic) + rescue Gitlab::Error::NotFound => e + @message = l(:label_pull_request_notfound) + rescue Exception => e + puts e end end @@ -319,23 +329,38 @@ class PullRequestsController < ApplicationController # id (required) - The ID of a project # merge_request_id (required) - The ID of MR def pull_request_changes - begin @type = params[:type] @changes = @g.merge_request_changes(@project.gpid, params[:id]).try(:changes) - @changes_count = @changes.count + + + + @changes_count = @changes.count @limit = 10 @is_remote = true @count = @changes_count @pages = Paginator.new @count, @limit, params['page'] || 1 @offset ||= @pages.offset @changes = paginateHelper @changes, 10 - rescue Exception => e - @message = e.message - end + end private + # post 相关操作权限控制 + # 项目管理员可操作 + def manager_allowed + unless is_project_manager?(User.current.id, @project.id) + return render_403 + end + end + + # 项目成员可操作 + def member_allowed + unless User.current.member_of?(@project) + return render_403 + end + end + def send_message user_id, project_id, pull_request_id, status ForgeMessage.create(:user_id => user_id, :project_id => project_id, :forge_message_id => pull_request_id, :forge_message_type => "PullRequest", :viewed => true, :status => status) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 29176550a..f932748af 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -49,6 +49,7 @@ class RepositoriesController < ApplicationController helper :repositories include RepositoriesHelper helper :project_score + require 'ostruct' #@root_path = RepositoriesHelper::ROOT_PATH # require 'net/ssh' @@ -580,8 +581,12 @@ update def commit_diff # 顶部导航 @project_menu_type = 5 - @commit_diff = @g.commit_diff(@project.gpid, params[:changeset]) + diff = ActiveSupport::JSON.decode(@commit_diff.to_json).first + diff = OpenStruct.new(diff) + @diff_file = Trustie::Gitlab::Diff::File.new(diff) + + @commit_details = @g.commit(@project.gpid, params[:changeset]) render :layout => 'base_projects' end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 86c04e9e4..da7cfd849 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -164,6 +164,8 @@ class UsersController < ApplicationController @comment = Comment.find params[:comment].to_i when 'Journal','is_project_issue' @comment = Journal.find params[:comment].to_i + when 'Memo' + @comment = Memo.find params[:comment].to_i end @user_activity_id = params[:user_activity_id] @parent_id = params[:parent_id] if params[:parent_id] @@ -308,6 +310,15 @@ class UsersController < ApplicationController @root.update_column('updated_at', Time.now) @count = @root.journals_for_messages.count @comments = @root.journals_for_messages.reorder("created_on desc").limit(3) + when 'Memo' + @root = reply.root + comment = Memo.new + comment.author = User.current + comment.forum = reply.forum + comment.content = params[:reply_message] + comment.subject = "#{@root.subject}" + comment.root_id = reply.root_id + reply.children << comment end update_course_activity(@root.class.to_s,@root.id) update_user_activity(@root.class.to_s,@root.id) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index e9bbcaafe..678d3ed50 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -3422,6 +3422,8 @@ def get_reply_by_type type, reply_id reply = Journal.find reply_id when 'Syllabus' reply = JournalsForMessage.find reply_id + when 'Memo' + reply = Memo.find reply_id end reply end diff --git a/app/helpers/pull_requests_helper.rb b/app/helpers/pull_requests_helper.rb index 983ab848c..fd90e01d1 100644 --- a/app/helpers/pull_requests_helper.rb +++ b/app/helpers/pull_requests_helper.rb @@ -19,6 +19,11 @@ module PullRequestsHelper PullRequest.where(:pull_request_id => pull_request_id).first end + # 通过gitlab项目id获取Trustie项目的用户名 + def find_gitlab_project gitlab_project_id + Project.find_by_gpid(gitlab_project_id).owner.try(:show_name) + end + def get_state state case state when "open","reopened" diff --git a/app/models/comment.rb b/app/models/comment.rb index 27a917b93..9a87201dc 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -40,7 +40,7 @@ class Comment < ActiveRecord::Base belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' validates_presence_of :commented, :author, :comments safe_attributes 'comments','parent_id','reply_id','comments_count' - after_create :send_mail, :act_as_system_message, :act_as_student_score + after_create :act_as_system_message, :act_as_student_score #:send_mail, after_destroy :down_course_score def act_as_system_message @@ -55,11 +55,11 @@ class Comment < ActiveRecord::Base # end end else # 项目相关 - if self.author_id != self.commented.author_id - self.forge_messages << ForgeMessage.new(:user_id => self.commented.author_id, :project_id => self.commented.project.id, :viewed => false) - #content = strip_html self.comments.html_safe, 200 - #ws.comment_template self.commented.author_id, "blog_comment", self.id, "#{l(:label_news_comment_template)}", self.author.try(:realname), format_time(self.created_on), content - end + # if self.author_id != self.commented.author_id + # self.forge_messages << ForgeMessage.new(:user_id => self.commented.author_id, :project_id => self.commented.project.id, :viewed => false) + # #content = strip_html self.comments.html_safe, 200 + # #ws.comment_template self.commented.author_id, "blog_comment", self.id, "#{l(:label_news_comment_template)}", self.author.try(:realname), format_time(self.created_on), content + # end end end diff --git a/app/models/journals_for_message_observer.rb b/app/models/journals_for_message_observer.rb index 0db2e0043..a576e605f 100644 --- a/app/models/journals_for_message_observer.rb +++ b/app/models/journals_for_message_observer.rb @@ -1,7 +1,7 @@ # Added by young class JournalsForMessageObserver < ActiveRecord::Observer def after_create(journals_for_message) - Mailer.run.journals_for_message_add(User.current, journals_for_message) + # Mailer.run.journals_for_message_add(User.current, journals_for_message) end end diff --git a/app/models/mailer.rb b/app/models/mailer.rb index 8d8fa7085..c37004066 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -109,40 +109,40 @@ class Mailer < ActionMailer::Base # 邀请未注册用户加入项目 # 功能: 在加入项目的同时自动注册用户 def send_invite_in_project(email, project, invitor, first_name, last_name, gender) - @email = email - @subject = "#{invitor.name} #{l(:label_invite_project)} #{project.name} " - @password = newpass(6) - - login = email - login = login.sub(/%40/,'@') - us = UsersService.new - # 自动激活用户 - user = us.register_auto(login, email, @password, first_name, last_name, gender) - InviteList.create(:user_id => user.id, :project_id => project.id, :mail =>email) - User.current = user unless User.current.nil? - @user = user - @token = Token.get_token_from_user(user, 'autologin') - @project_url = url_for(:controller => 'projects', :action => 'member', :id => project.id, :mail => true, :token => @token.value) - mail :to => email, :subject => @subject + # @email = email + # @subject = "#{invitor.name} #{l(:label_invite_project)} #{project.name} " + # @password = newpass(6) + # + # login = email + # login = login.sub(/%40/,'@') + # us = UsersService.new + # # 自动激活用户 + # user = us.register_auto(login, email, @password, first_name, last_name, gender) + # InviteList.create(:user_id => user.id, :project_id => project.id, :mail =>email) + # User.current = user unless User.current.nil? + # @user = user + # @token = Token.get_token_from_user(user, 'autologin') + # @project_url = url_for(:controller => 'projects', :action => 'member', :id => project.id, :mail => true, :token => @token.value) + # mail :to => email, :subject => @subject end # 邀请已注册的用户加入项目 def request_member_to_project(email, project, invitor) - @subject = "#{invitor.name} #{l(:label_invite_project)}: #{project.name} " - user = User.find_by_mail(email.to_s) - @invitor_name = "#{invitor.name}" - @project_name = "#{project.name}" - @user = user - @project = project - if InviteList.where("project_id= ? and user_id =? and mail =?", project.id, @user.id, email).first.nil? - InviteList.create(:user_id => user.id, :project_id => project.id, :mail => email) - end - @token = Token.get_token_from_user(user, 'autologin') - @project_url = url_for(:controller => 'projects', :action => 'member', :id => project.id, :user_id => user.id, :mail => true, :token => @token.value) - # 发送消息邀请 - send_message_request_member(user,project) + # @subject = "#{invitor.name} #{l(:label_invite_project)}: #{project.name} " + # user = User.find_by_mail(email.to_s) + # @invitor_name = "#{invitor.name}" + # @project_name = "#{project.name}" + # @user = user + # @project = project + # if InviteList.where("project_id= ? and user_id =? and mail =?", project.id, @user.id, email).first.nil? + # InviteList.create(:user_id => user.id, :project_id => project.id, :mail => email) # end - mail :to => email, :subject => @subject + # @token = Token.get_token_from_user(user, 'autologin') + # @project_url = url_for(:controller => 'projects', :action => 'member', :id => project.id, :user_id => user.id, :mail => true, :token => @token.value) + # # 发送消息邀请 + # send_message_request_member(user,project) + # # end + # mail :to => email, :subject => @subject end # 邀请信息消息 注:forge_message_id 为邀请人ID(特殊情况) @@ -293,23 +293,23 @@ class Mailer < ActionMailer::Base # 公共讨论区发帖、回帖添加邮件发送信息 def forum_message_added(memo) - @memo = memo - redmine_headers 'Memo' => memo.id - @forum = memo.forum - @author = memo.author - @forum_url = url_for(:controller => 'forums', :action => 'show', :id => @forum.id) - @issue_author_url = url_for(user_activities_url(@author)) - recipients ||= [] - #将帖子创建者邮箱地址加入数组 - recipients << @forum.creator.mail - #回复人邮箱地址加入数组 - recipients << @author.mail - # cc = wiki_content.page.wiki.watcher_recipients - recipients - - @memo_url = url_for(forum_memo_url(@forum, (@memo.parent_id.nil? ? @memo : @memo.parent_id))) - mail :to => recipients, - :subject => "[ #{l(:label_message_plural)} : #{memo.subject} #{l(:label_memo_create_succ)}]", - :filter => true + # @memo = memo + # redmine_headers 'Memo' => memo.id + # @forum = memo.forum + # @author = memo.author + # @forum_url = url_for(:controller => 'forums', :action => 'show', :id => @forum.id) + # @issue_author_url = url_for(user_activities_url(@author)) + # recipients ||= [] + # #将帖子创建者邮箱地址加入数组 + # recipients << @forum.creator.mail + # #回复人邮箱地址加入数组 + # recipients << @author.mail + # # cc = wiki_content.page.wiki.watcher_recipients - recipients + # + # @memo_url = url_for(forum_memo_url(@forum, (@memo.parent_id.nil? ? @memo : @memo.parent_id))) + # mail :to => recipients, + # :subject => "[ #{l(:label_message_plural)} : #{memo.subject} #{l(:label_memo_create_succ)}]", + # :filter => true end # Builds a Mail::Message object used to email recipients of the added journals for message. @@ -318,64 +318,64 @@ class Mailer < ActionMailer::Base # 直接留言后 reply_id,m_parent_id 为空,相对应的at_user取值为nil def journals_for_message_add(user, journals_for_message) - @user = journals_for_message.user # 留言人 - @mail = journals_for_message.jour if journals_for_message.at_user.nil? # 留言 - @mail = journals_for_message.at_user if journals_for_message.at_user - @message = journals_for_message.notes - @title = "#@user #{t(:label_leave_your_message, :locale => 'zh')}" - @issue_author_url = url_for(user_activities_url(@user)) - @url = case journals_for_message.jour.class.to_s.to_sym # 判断留言的对象所属类型 - # when :Bid - # course_for_bid_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") - when :Project - return -1 if journals_for_message.jour.project_type == Project::ProjectType_project - project_feedback_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") - when :Course - course_feedback_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") - when :Contest - show_contest_contest_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") - when :User - user_newfeedback_user_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") - else - Rails.logger.error "[Builds a Mail::Message ERROR] journalsForMessage's jour is unkown type, journalsForMessage.id = #{journals_for_message.id}" - return -1 - end - - # 验证用户的收取邮件的方式 - recipients ||= [] - recipients1 ||= [] - recipients1 = @mail.mail - recipients = journals_for_message.jour.author.mail - - # modify by nwb - #如果是直接留言并且留言对象是课程 - if !journals_for_message.at_user && journals_for_message.jour.class.to_s.to_sym == :Course - course = journals_for_message.jour - @author = journals_for_message.user - #课程的教师 - @members = course_all_member journals_for_message.jour - #收件人邮箱 - @recipients ||= [] - @members.each do |teacher| - @recipients << teacher.user.mail - end - mail :to => @recipients, - :subject => "#{l(:label_your_course)}#{journals_for_message.jour.name}#{l(:label_have_message)} ", - :filter => true - # elsif journals_for_message.jour.class.to_s.to_sym == :Bid + # @user = journals_for_message.user # 留言人 + # @mail = journals_for_message.jour if journals_for_message.at_user.nil? # 留言 + # @mail = journals_for_message.at_user if journals_for_message.at_user + # @message = journals_for_message.notes + # @title = "#@user #{t(:label_leave_your_message, :locale => 'zh')}" + # @issue_author_url = url_for(user_activities_url(@user)) + # @url = case journals_for_message.jour.class.to_s.to_sym # 判断留言的对象所属类型 + # # when :Bid + # # course_for_bid_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") + # when :Project + # return -1 if journals_for_message.jour.project_type == Project::ProjectType_project + # project_feedback_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") + # when :Course + # course_feedback_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") + # when :Contest + # show_contest_contest_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") + # when :User + # user_newfeedback_user_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") + # else + # Rails.logger.error "[Builds a Mail::Message ERROR] journalsForMessage's jour is unkown type, journalsForMessage.id = #{journals_for_message.id}" + # return -1 + # end + # + # # 验证用户的收取邮件的方式 + # recipients ||= [] + # recipients1 ||= [] + # recipients1 = @mail.mail + # recipients = journals_for_message.jour.author.mail + # + # # modify by nwb + # #如果是直接留言并且留言对象是课程 + # if !journals_for_message.at_user && journals_for_message.jour.class.to_s.to_sym == :Course + # course = journals_for_message.jour + # @author = journals_for_message.user + # #课程的教师 + # @members = course_all_member journals_for_message.jour + # #收件人邮箱 + # @recipients ||= [] + # @members.each do |teacher| + # @recipients << teacher.user.mail + # end + # mail :to => @recipients, + # :subject => "#{l(:label_your_course)}#{journals_for_message.jour.name}#{l(:label_have_message)} ", + # :filter => true + # # elsif journals_for_message.jour.class.to_s.to_sym == :Bid + # # if !journals_for_message.jour.author.notify_about? journals_for_message + # # return -1 + # # end + # # + # # mail :to => recipients, :subject => @title,:filter => true + # elsif journals_for_message.jour.class.to_s.to_sym == :Contest # if !journals_for_message.jour.author.notify_about? journals_for_message # return -1 # end - # # mail :to => recipients, :subject => @title,:filter => true - elsif journals_for_message.jour.class.to_s.to_sym == :Contest - if !journals_for_message.jour.author.notify_about? journals_for_message - return -1 - end - mail :to => recipients, :subject => @title,:filter => true - else - mail :to => recipients1, :subject => @title,:filter => true - end + # else + # mail :to => recipients1, :subject => @title,:filter => true + # end end @@ -485,16 +485,16 @@ class Mailer < ActionMailer::Base # 用户申请加入项目邮件通知 def applied_project(applied) - @project =applied.project - redmine_headers 'Project' => @project, - 'User' => applied.user - @user = applied.user - recipients = @project.manager_recipients - s = l(:text_applied_project, :id => "##{@user.show_name}", :project => @project.name) - @token = Token.get_token_from_user(@user, 'autologin') - @applied_url = url_for(:controller => 'projects', :action => 'settings', :id => @project.id,:tab=>'members') - mail :to => recipients, - :subject => s + # @project =applied.project + # redmine_headers 'Project' => @project, + # 'User' => applied.user + # @user = applied.user + # recipients = @project.manager_recipients + # s = l(:text_applied_project, :id => "##{@user.show_name}", :project => @project.name) + # @token = Token.get_token_from_user(@user, 'autologin') + # @applied_url = url_for(:controller => 'projects', :action => 'settings', :id => @project.id,:tab=>'members') + # mail :to => recipients, + # :subject => s end def reminder(user, issues, days) @@ -555,14 +555,14 @@ class Mailer < ActionMailer::Base # document_added(document) => Mail::Message object # Mailer.document_added(document).deliver => sends an email to the document's project recipients def document_added(document) - redmine_headers 'Project' => document.project.identifier - @author = User.current - @document = document - @issue_author_url = url_for(user_activities_url(@author)) - @document_url = url_for(:controller => 'documents', :action => 'show', :id => document) - mail :to => document.recipients, - :subject => "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}", - :filter => true + # redmine_headers 'Project' => document.project.identifier + # @author = User.current + # @document = document + # @issue_author_url = url_for(user_activities_url(@author)) + # @document_url = url_for(:controller => 'documents', :action => 'show', :id => document) + # mail :to => document.recipients, + # :subject => "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}", + # :filter => true end # Builds a Mail::Message object used to email recipients of a project when an attachements are added. @@ -571,54 +571,54 @@ class Mailer < ActionMailer::Base # attachments_added(attachments) => Mail::Message object # Mailer.attachments_added(attachments).deliver => sends an email to the project's recipients def attachments_added(attachments) - container = attachments.first.container - added_to = '' - added_to_url = '' - @author = attachments.first.author - @issue_author_url = url_for(user_activities_url(@author)) - case container.class.name - when 'Project' - added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container) - added_to = "#{l(:label_project)}: #{container}" - recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail } - when 'Course' - added_to_url = url_for(:controller => 'files', :action => 'index', :course_id => container) - added_to = "#{l(:label_course)}: #{container.name}" - recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail } - when 'Version' - added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project) - added_to = "#{l(:label_version)}: #{container.name}" - recipients = container.project.notified_users.select { |user| user.allowed_to?(:view_files, container.project) }.collect { |u| u.mail } - when 'Document' - added_to_url = url_for(:controller => 'documents', :action => 'show', :id => container.id) - added_to = "#{l(:label_document)}: #{container.title}" - recipients = container.recipients - end - if container.class.name == 'Course' - redmine_headers 'Course' => container.id - @attachments = attachments - @added_to = added_to - @added_to_url = added_to_url - mail :to => recipients, - :subject => "[#{container.name}] #{l(:label_attachment_new)}", - :filter => true - elsif container.class.name == 'Project' - redmine_headers 'Project' => container.id - @attachments = attachments - @added_to = added_to - @added_to_url = added_to_url - mail :to => recipients, - :subject => "[#{container.name}] #{l(:label_attachment_new)}", - :filter => true - else - redmine_headers 'Project' => container.project.identifier - @attachments = attachments - @added_to = added_to - @added_to_url = added_to_url - mail :to => recipients, - :subject => "[#{container.project.name}] #{l(:label_attachment_new)}", - :filter => true - end + # container = attachments.first.container + # added_to = '' + # added_to_url = '' + # @author = attachments.first.author + # @issue_author_url = url_for(user_activities_url(@author)) + # case container.class.name + # when 'Project' + # added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container) + # added_to = "#{l(:label_project)}: #{container}" + # recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail } + # when 'Course' + # added_to_url = url_for(:controller => 'files', :action => 'index', :course_id => container) + # added_to = "#{l(:label_course)}: #{container.name}" + # recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail } + # when 'Version' + # added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project) + # added_to = "#{l(:label_version)}: #{container.name}" + # recipients = container.project.notified_users.select { |user| user.allowed_to?(:view_files, container.project) }.collect { |u| u.mail } + # when 'Document' + # added_to_url = url_for(:controller => 'documents', :action => 'show', :id => container.id) + # added_to = "#{l(:label_document)}: #{container.title}" + # recipients = container.recipients + # end + # if container.class.name == 'Course' + # redmine_headers 'Course' => container.id + # @attachments = attachments + # @added_to = added_to + # @added_to_url = added_to_url + # mail :to => recipients, + # :subject => "[#{container.name}] #{l(:label_attachment_new)}", + # :filter => true + # elsif container.class.name == 'Project' + # redmine_headers 'Project' => container.id + # @attachments = attachments + # @added_to = added_to + # @added_to_url = added_to_url + # mail :to => recipients, + # :subject => "[#{container.name}] #{l(:label_attachment_new)}", + # :filter => true + # else + # redmine_headers 'Project' => container.project.identifier + # @attachments = attachments + # @added_to = added_to + # @added_to_url = added_to_url + # mail :to => recipients, + # :subject => "[#{container.project.name}] #{l(:label_attachment_new)}", + # :filter => true + # end end # Builds a Mail::Message object used to email recipients of a course when an homework are posted. @@ -650,15 +650,15 @@ class Mailer < ActionMailer::Base def news_added(news) if news.project - redmine_headers 'Project' => news.project.identifier - @author = news.author - @issue_author_url = url_for(user_activities_url(@author)) - message_id news - @news = news - @news_url = url_for(:controller => 'news', :action => 'show', :id => news) - mail :to => news.recipients, - :subject => "[#{news.project.name}] #{l(:label_news)}: #{news.title}", - :filter => true + # redmine_headers 'Project' => news.project.identifier + # @author = news.author + # @issue_author_url = url_for(user_activities_url(@author)) + # message_id news + # @news = news + # @news_url = url_for(:controller => 'news', :action => 'show', :id => news) + # mail :to => news.recipients, + # :subject => "[#{news.project.name}] #{l(:label_news)}: #{news.title}", + # :filter => true elsif news.course redmine_headers 'Course' => news.course.id @author = news.author @@ -681,17 +681,17 @@ class Mailer < ActionMailer::Base def news_comment_added(comment) news = comment.commented if news.project - redmine_headers 'Project' => news.project.identifier - @author = comment.author - @issue_author_url = url_for(user_activities_url(@author)) - message_id comment - @news = news - @comment = comment - @news_url = url_for(:controller => 'news', :action => 'show', :id => news) - mail :to => news.recipients, - :cc => news.watcher_recipients, - :subject => "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}", - :filter => true + # redmine_headers 'Project' => news.project.identifier + # @author = comment.author + # @issue_author_url = url_for(user_activities_url(@author)) + # message_id comment + # @news = news + # @comment = comment + # @news_url = url_for(:controller => 'news', :action => 'show', :id => news) + # mail :to => news.recipients, + # :cc => news.watcher_recipients, + # :subject => "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}", + # :filter => true elsif news.course redmine_headers 'Course' => news.course.id @author = comment.author @@ -714,37 +714,37 @@ class Mailer < ActionMailer::Base # message_posted(message) => Mail::Message object # Mailer.message_posted(message).deliver => sends an email to the recipients def message_posted(message) - if message.project - redmine_headers 'Project' => message.project.identifier, - 'Topic-Id' => (message.parent_id || message.id) - @author = message.author - @issue_author_url = url_for(user_activities_url(@author)) - message_id message - references message.parent unless message.parent.nil? - recipients = message.recipients - cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients) - @message = message - @message_url = url_for(message.event_url) - mail :to => recipients, - :cc => cc, - :subject => "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}", - :filter => true - elsif message.course - redmine_headers 'Course' => message.course.id, - 'Topic-Id' => (message.parent_id || message.id) - @author = message.author - @issue_author_url = url_for(user_activities_url(@author)) - message_id message - references message.parent unless message.parent.nil? - recipients = message.course.notified_users.select { |user| user.allowed_to?(:view_files, message.course) }.collect { |u| u.mail } - cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients) - @message = message - @message_url = url_for(message.event_url) - mail :to => recipients, - :cc => cc, - :subject => "[#{message.board.course.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}", - :filter => true - end + # if message.project + # redmine_headers 'Project' => message.project.identifier, + # 'Topic-Id' => (message.parent_id || message.id) + # @author = message.author + # @issue_author_url = url_for(user_activities_url(@author)) + # message_id message + # references message.parent unless message.parent.nil? + # recipients = message.recipients + # cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients) + # @message = message + # @message_url = url_for(message.event_url) + # mail :to => recipients, + # :cc => cc, + # :subject => "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}", + # :filter => true + # elsif message.course + # redmine_headers 'Course' => message.course.id, + # 'Topic-Id' => (message.parent_id || message.id) + # @author = message.author + # @issue_author_url = url_for(user_activities_url(@author)) + # message_id message + # references message.parent unless message.parent.nil? + # recipients = message.course.notified_users.select { |user| user.allowed_to?(:view_files, message.course) }.collect { |u| u.mail } + # cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients) + # @message = message + # @message_url = url_for(message.event_url) + # mail :to => recipients, + # :cc => cc, + # :subject => "[#{message.board.course.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}", + # :filter => true + # end end # Builds a Mail::Message object used to email the recipients of a project of the specified wiki content was added. @@ -753,20 +753,20 @@ class Mailer < ActionMailer::Base # wiki_content_added(wiki_content) => Mail::Message object # Mailer.wiki_content_added(wiki_content).deliver => sends an email to the project's recipients def wiki_content_added(wiki_content) - redmine_headers 'Project' => wiki_content.project.identifier, - 'Wiki-Page-Id' => wiki_content.page.id - @author = wiki_content.author - message_id wiki_content - recipients = wiki_content.recipients - cc = wiki_content.page.wiki.watcher_recipients - recipients - @wiki_content = wiki_content - @wiki_content_url = url_for(:controller => 'wiki', :action => 'show', - :project_id => wiki_content.project, - :id => wiki_content.page.title) - mail :to => recipients, - :cc => cc, - :subject => "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :id => wiki_content.page.pretty_title)}", - :filter => true + # redmine_headers 'Project' => wiki_content.project.identifier, + # 'Wiki-Page-Id' => wiki_content.page.id + # @author = wiki_content.author + # message_id wiki_content + # recipients = wiki_content.recipients + # cc = wiki_content.page.wiki.watcher_recipients - recipients + # @wiki_content = wiki_content + # @wiki_content_url = url_for(:controller => 'wiki', :action => 'show', + # :project_id => wiki_content.project, + # :id => wiki_content.page.title) + # mail :to => recipients, + # :cc => cc, + # :subject => "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :id => wiki_content.page.pretty_title)}", + # :filter => true end # Builds a Mail::Message object used to email the recipients of a project of the specified wiki content was updated. @@ -775,23 +775,23 @@ class Mailer < ActionMailer::Base # wiki_content_updated(wiki_content) => Mail::Message object # Mailer.wiki_content_updated(wiki_content).deliver => sends an email to the project's recipients def wiki_content_updated(wiki_content) - redmine_headers 'Project' => wiki_content.project.identifier, - 'Wiki-Page-Id' => wiki_content.page.id - @author = wiki_content.author - message_id wiki_content - recipients = wiki_content.recipients - cc = wiki_content.page.wiki.watcher_recipients + wiki_content.page.watcher_recipients - recipients - @wiki_content = wiki_content - @wiki_content_url = url_for(:controller => 'wiki', :action => 'show', - :project_id => wiki_content.project, - :id => wiki_content.page.title) - @wiki_diff_url = url_for(:controller => 'wiki', :action => 'diff', - :project_id => wiki_content.project, :id => wiki_content.page.title, - :version => wiki_content.version) - mail :to => recipients, - :cc => cc, - :subject => "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :id => wiki_content.page.pretty_title)}", - :filter => true + # redmine_headers 'Project' => wiki_content.project.identifier, + # 'Wiki-Page-Id' => wiki_content.page.id + # @author = wiki_content.author + # message_id wiki_content + # recipients = wiki_content.recipients + # cc = wiki_content.page.wiki.watcher_recipients + wiki_content.page.watcher_recipients - recipients + # @wiki_content = wiki_content + # @wiki_content_url = url_for(:controller => 'wiki', :action => 'show', + # :project_id => wiki_content.project, + # :id => wiki_content.page.title) + # @wiki_diff_url = url_for(:controller => 'wiki', :action => 'diff', + # :project_id => wiki_content.project, :id => wiki_content.page.title, + # :version => wiki_content.version) + # mail :to => recipients, + # :cc => cc, + # :subject => "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :id => wiki_content.page.pretty_title)}", + # :filter => true end # Builds a Mail::Message object used to email the specified user their account information. diff --git a/app/models/memo.rb b/app/models/memo.rb index 793d534d4..e6701849f 100644 --- a/app/models/memo.rb +++ b/app/models/memo.rb @@ -79,9 +79,10 @@ class Memo < ActiveRecord::Base "lock", "sticky", "parent_id", - "replies_count" + "replies_count", + "root_id" - after_create :add_author_as_watcher, :reset_counters!, :send_mail, :send_message,:create_memo_ealasticsearch_index + after_create :add_author_as_watcher, :reset_counters!, :send_message,:create_memo_ealasticsearch_index after_update :update_memo_ealasticsearch_index after_destroy :reset_counters!,:delete_kindeditor_assets,:delete_memo_ealasticsearch_index#,:down_user_score -- 公共区发帖暂不计入得分, # after_create :send_notification @@ -126,6 +127,18 @@ class Memo < ActiveRecord::Base Mailer.run.forum_message_added(self) if Setting.notified_events.include?('forum_message_added') end + def creator_user + self.author + end + + def created_time + self.created_on + end + + def content_detail + self.content + end + # 公共贴吧消息记录 # 原则:贴吧创始人;发帖人,wanglingchun(特殊用户) def send_message diff --git a/app/models/news.rb b/app/models/news.rb index dc47f66ac..f39352c94 100644 --- a/app/models/news.rb +++ b/app/models/news.rb @@ -65,7 +65,7 @@ class News < ActiveRecord::Base :author_key => :author_id acts_as_watchable - after_create :act_as_forge_activity, :act_as_course_activity, :add_author_as_watcher, :send_mail, :add_news_count, :act_as_student_score, :act_as_system_message,:delay_news_wechat_send,:delay_news_send + after_create :act_as_course_activity, :add_author_as_watcher, :send_mail, :add_news_count, :act_as_student_score,:delay_news_wechat_send, :delay_news_send after_update :update_activity after_destroy :delete_kindeditor_assets, :decrease_news_count, :delete_org_activities, :down_course_score diff --git a/app/models/user.rb b/app/models/user.rb index d6e4eb715..66a2cc5aa 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -82,7 +82,7 @@ class User < Principal #每日一报、一事一报、不报 MAIL_NOTIFICATION_OPTIONS = [ #['week', :label_user_mail_option_week], - ['day', :label_user_mail_option_day], + # ['day', :label_user_mail_option_day], ['all', :label_user_mail_option_all], ['none', :label_user_mail_option_none] ] diff --git a/app/views/blog_comments/_blog_comment_show_replies.html.erb b/app/views/blog_comments/_blog_comment_show_replies.html.erb index 3a3e8ef81..23cabb67d 100644 --- a/app/views/blog_comments/_blog_comment_show_replies.html.erb +++ b/app/views/blog_comments/_blog_comment_show_replies.html.erb @@ -19,7 +19,7 @@