diff --git a/app/controllers/at_controller.rb b/app/controllers/at_controller.rb index 66cbf27b8..81d678261 100644 --- a/app/controllers/at_controller.rb +++ b/app/controllers/at_controller.rb @@ -29,6 +29,8 @@ class AtController < ApplicationController case type when "Issue" find_issue(id) + whne 'TrainingTask' + find_training_task(id) when 'Project' find_project(id) when 'Course' @@ -69,6 +71,13 @@ class AtController < ApplicationController at_persons.uniq { |u| u.id }.delete_if { |u| u.id == User.current.id } end + def find_training_task(id) + training_task = TrainingTask.find(id) + journals = training_task.journals + at_persons = journals.map(&:user) + training_task.project.users + at_persons.uniq { |u| u.id }.delete_if { |u| u.id == User.current.id } + end + def find_project(id) return [] if id.to_i<0 at_persons = Project.find(id).users diff --git a/app/controllers/training_tasks_controller.rb b/app/controllers/training_tasks_controller.rb index 9c84b08f8..43fcd74d0 100644 --- a/app/controllers/training_tasks_controller.rb +++ b/app/controllers/training_tasks_controller.rb @@ -88,6 +88,7 @@ class TrainingTasksController < ApplicationController @journal = Journal.new(:journalized => @training_task) respond_to do |format| format.html + format.js end end @@ -358,19 +359,19 @@ class TrainingTasksController < ApplicationController jour = Journal.new jour.user_id = User.current.id jour.notes = params[:notes] - jour.journalized = @issue + jour.journalized = @training_task jour.save_attachments(params[:attachments]) jour.save - update_user_activity(@issue.class,@issue.id) - update_forge_activity(@issue.class,@issue.id) - @allowed_statuses = @issue.new_statuses_allowed_to(User.current) + update_user_activity(@training_task.class, @training_task.id) + update_forge_activity(@training_task.class, @training_task.id) + # @allowed_statuses = @training_task.new_statuses_allowed_to(User.current) @user_activity_id = params[:user_activity_id] @priorities = IssuePriority.active respond_to do |format| # Issue详情单独处理 if params[:is_issue_show] - format.js{redirect_to issue_path(@issue)} + format.js{ redirect_to training_task_path(@training_task) } else format.js end @@ -397,7 +398,7 @@ class TrainingTasksController < ApplicationController #对某个journ回复,显示回复框 def reply - @issue = Issue.find(params[:id]) + @training_task = TrainingTask.find(params[:id]) @jour = Journal.find(params[:journal_id]) respond_to do |format| format.js @@ -408,25 +409,25 @@ class TrainingTasksController < ApplicationController def add_reply if User.current.logged? jour = Journal.find(params[:journal_id]) - @issue = Issue.find params[:id] - @project = @issue.project - @allowed_statuses = @issue.new_statuses_allowed_to(User.current) + @training_task = TrainingTask.find params[:id] + @project = @training_task.project + @allowed_statuses = @training_task.new_statuses_allowed_to(User.current) @priorities = IssuePriority.active new_jour = Journal.new new_jour.user_id = User.current.id new_jour.reply_id = params[:journal_id] new_jour.parent_id = jour.id new_jour.notes = params[:content] - new_jour.journalized = @issue + new_jour.journalized = @training_task new_jour.save_attachments(params[:attachments]) # new_jour = @issue.journals.build(:user_id => User.current.id, :reply_id => params[:journal_id], :notes => params[:content], :parent_id => jour.id) @user_activity_id = params[:user_activity_id] if new_jour.save - update_user_activity(@issue.class,@issue.id) - update_forge_activity(@issue.class,@issue.id) + update_user_activity(@training_task.class,@issue.id) + update_forge_activity(@training_task.class,@issue.id) respond_to do |format| if params[:is_issue_show] - format.js{redirect_to issue_path(@issue)} + format.js{ redirect_to project_training_task_path(@training_task) } else format.js end diff --git a/app/helpers/training_tasks_helper.rb b/app/helpers/training_tasks_helper.rb index 4096b1cb0..bb52e8a79 100644 --- a/app/helpers/training_tasks_helper.rb +++ b/app/helpers/training_tasks_helper.rb @@ -1,2 +1,44 @@ module TrainingTasksHelper + include ApplicationHelper + include TagsHelper + require 'iconv' + + # Returns the textual representation of a journal details + # as an array of strings + def details_to_strings(details, no_html=false, options={}) + options[:only_path] = (options[:only_path] == false ? false : true) + options[:token] = options[:token] if options[:token] + strings = [] + values_by_field = {} + details.each do |detail| + + if detail.property == 'cf' + field_id = detail.prop_key + field = CustomField.find_by_id(field_id) + if field && field.multiple? + values_by_field[field_id] ||= {:added => [], :deleted => []} + if detail.old_value + values_by_field[field_id][:deleted] << detail.old_value + end + if detail.value + values_by_field[field_id][:added] << detail.value + end + next + end + end + strings << show_detail(detail, no_html, options) + + end + values_by_field.each do |field_id, changes| + detail = JournalDetail.new(:property => 'cf', :prop_key => field_id) + if changes[:added].any? + detail.value = changes[:added] + strings << show_detail(detail, no_html, options) + elsif changes[:deleted].any? + detail.old_value = changes[:deleted] + strings << show_detail(detail, no_html, options) + end + end + strings + end end diff --git a/app/models/journal.rb b/app/models/journal.rb index f14484a31..822d7beca 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -23,7 +23,8 @@ class Journal < ActiveRecord::Base belongs_to :journalized, :polymorphic => true,:touch => true # added as a quick fix to allow eager loading of the polymorphic association # since always associated to an issue, for now - belongs_to :issue, :foreign_key => :journalized_id,:touch => true + belongs_to :issue, :foreign_key => :journalized_id, :touch => true + belongs_to :training_task, :foreign_key => :journalized_id, :touch => true belongs_to :user has_many :details, :class_name => "JournalDetail", :dependent => :delete_all @@ -192,27 +193,44 @@ class Journal < ActiveRecord::Base def act_as_forge_message receivers = [] # 直接回复 - if self.user_id != self.issue.author_id - receivers << self.issue.author_id - end - if self.user_id != self.issue.assigned_to_id && self.issue.assigned_to_id != self.issue.author_id # 指派人不是自己的话,则给指派人发送 - receivers << self.issue.assigned_to_id - end - receivers.each do |r| - self.forge_messages << ForgeMessage.new(:user_id => r, :project_id => self.issue.project_id, :viewed => false) + if self.journalized_type == 'Issue' + if self.user_id != self.issue.author_id + receivers << self.issue.author_id + end + if self.user_id != self.issue.assigned_to_id && self.issue.assigned_to_id != self.issue.author_id # 指派人不是自己的话,则给指派人发送 + receivers << self.issue.assigned_to_id + end + receivers.each do |r| + self.forge_messages << ForgeMessage.new(:user_id => r, :project_id => self.issue.project_id, :viewed => false) + end + elsif self.journalized_type == 'TrainingTask' + if self.user_id != self.training_task.author_id + receivers << self.training_task.author_id + end + receivers.each do |r| + self.forge_messages << ForgeMessage.new(:user_id => r, :project_id => self.training_task.project, :viewed => false) + end end end # 更新用户分数 -by zjc def be_user_score + if (self.journalized_type == 'Issue') #新建了缺陷留言且留言不为空,不为空白 - if !self.notes.nil? && self.notes.gsub(' ','') != '' - #协同得分加分 - UserScore.joint(:post_issue_message, self.user,self.issue.author,self, { message_id: self.id }) - update_messges_for_issue(self.user,1) - update_messges_for_issue(self.user,2,self.issue.project) + if !self.notes.nil? && self.notes.gsub(' ','') != '' + #协同得分加分 + UserScore.joint(:post_issue_message, self.user,self.issue.author,self, { message_id: self.id }) + update_messges_for_issue(self.user,1) + update_messges_for_issue(self.user,2,self.issue.project) + end + elsif( self.journalized_type == 'TrainingTask') + if !self.notes.nil? && self.notes.gsub(' ','') != '' + #协同得分加分 + UserScore.joint(:post_issue_message, self.user, self.training_task.author, self, { message_id: self.id }) + update_messges_for_issue(self.user, 1) + update_messges_for_issue(self.user, 2, self.training_task.project) + end end - end # 减少用户分数 -by zjc def down_user_score @@ -237,12 +255,18 @@ class Journal < ActiveRecord::Base # issue留言总数更新 def add_journals_count - if !self.issue.project.nil? && self.journalized_type == "Issue" && !self.issue.project.project_score.nil? - project = self.issue.project - project.project_score.update_attribute(:issue_journal_num, project.project_score.issue_journal_num + 1) + if self.journalized_type == 'Issue' + if !self.issue.project.nil? && self.journalized_type == "Issue" && !self.issue.project.project_score.nil? + project = self.issue.project + project.project_score.update_attribute(:issue_journal_num, project.project_score.issue_journal_num + 1) + end + elsif self.journalized_type == 'TrainingTask' + if !self.training_task.project.nil? && self.journalized_type == "TrainingTask" && !self.training_task.project.project_score.nil? + project = self.training_task.project + project.project_score.update_attribute(:issue_journal_num, project.project_score.issue_journal_num + 1) + end end end - # 回复issue的时候,更新issue的时候 def update_issue_time if self.journalized_type == "Issue" diff --git a/app/views/praise_tread/_praise.html.erb b/app/views/praise_tread/_praise.html.erb index dfd1011db..223cc9c5e 100644 --- a/app/views/praise_tread/_praise.html.erb +++ b/app/views/praise_tread/_praise.html.erb @@ -1,11 +1,23 @@ <% if PraiseTread.praised(activity) %> - + <% num = activity.praise_tread_cache ? activity.praise_tread_cache.praise_num : 0 %> <%= (num.nil? ? 0 : num) > 0 ? "(#{(num.nil? ? 0 : num)})" : "" %> <% else %> - + 已赞 <% num = activity.praise_tread_cache ? activity.praise_tread_cache.praise_num : 0 %> <%= (num.nil? ? 0 : num) > 0 ? "(#{(num.nil? ? 0 : num)})" : "" %> diff --git a/app/views/training_tasks/_detail.html.erb b/app/views/training_tasks/_detail.html.erb index 5bf14de6e..e28fef9f2 100644 --- a/app/views/training_tasks/_detail.html.erb +++ b/app/views/training_tasks/_detail.html.erb @@ -4,19 +4,7 @@

- <% case @training_task.tracker_id %> - <% when 1%> - 【缺陷】 - <% when 2%> - 【功能】 - <% when 3%> - 【支持】 - <% when 4%> - 【任务】 - <% when 5%> - 【周报】 - <% end %> - <%= @training_task.subject %>

+ <%= @training_task.subject %>


@@ -38,8 +26,8 @@ <% end -%> <%# 附件局部刷新 %> -
diff --git a/app/views/training_tasks/_training_tasks_reply_ke_form.html.erb b/app/views/training_tasks/_training_tasks_reply_ke_form.html.erb new file mode 100644 index 000000000..6e76e8c30 --- /dev/null +++ b/app/views/training_tasks/_training_tasks_reply_ke_form.html.erb @@ -0,0 +1,27 @@ + \ No newline at end of file diff --git a/app/views/training_tasks/add_journal.js.erb b/app/views/training_tasks/add_journal.js.erb new file mode 100644 index 000000000..d3f5a12fa --- /dev/null +++ b/app/views/training_tasks/add_journal.js.erb @@ -0,0 +1 @@ + diff --git a/app/views/training_tasks/reply.js.erb b/app/views/training_tasks/reply.js.erb new file mode 100644 index 000000000..3c7acd927 --- /dev/null +++ b/app/views/training_tasks/reply.js.erb @@ -0,0 +1,8 @@ +if($("#reply_message_<%= @jour.id %>").length > 0) { + $("#reply_message_<%= @jour.id %>").replaceWith("<%= escape_javascript(render :partial => 'training_tasks/training_tasks_reply_ke_form') %>"); + $(function(){ + sd_create_editor_from_data(<%= @jour.id %>, null, "100%", "<%= @jour.class.name %>"); + }); +}else if($("#reply_to_message_<%= @jour.id %>").length >0) { + $("#reply_to_message_<%= @jour.id %>").replaceWith("

"); +} \ No newline at end of file diff --git a/app/views/training_tasks/show.html.erb b/app/views/training_tasks/show.html.erb index 2ce1fdb16..f125717b1 100644 --- a/app/views/training_tasks/show.html.erb +++ b/app/views/training_tasks/show.html.erb @@ -3,13 +3,13 @@ <%= javascript_include_tag 'create_kindeditor'%> <% end %>
@@ -23,15 +23,15 @@
-
+
-
- <%=render :partial => 'reply_banner' %> +
+ <%= render :partial => 'reply_banner' %>
- <%= render :partial => 'issue_replies',:locals => {:issue => @training_task, :replies_all_i => 0} %> + <%= render :partial => 'issue_replies',:locals => {:issue => @training_task, :replies_all_i => 0 } %>
diff --git a/app/views/training_tasks/show.js.erb b/app/views/training_tasks/show.js.erb new file mode 100644 index 000000000..a465dab32 --- /dev/null +++ b/app/views/training_tasks/show.js.erb @@ -0,0 +1,19 @@ +// $("#div_user_issue_reply_<%#= @user_activity_id %>").html("<%#= escape_javascript(render :partial => 'projects/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>"); + +$("#reply_div_<%= @training_task.id %>").html("<%= escape_javascript(render :partial => 'training_tasks/issue_replies', :locals => {:issue => @training_task}) %>"); +$("#div_issue_attachment_<%=@training_task.id %>").html("<%= escape_javascript(render :partial => 'issues/issue_attachments', :locals => {:issue => @training_task}) %>"); +issue_desc_editor = KindEditor.create('#issue_description', + {"width":"85%", + "resizeType":0, + "no_label":true, + "at_id":<%= @training_task.project_id%>, + "at_type":"Project", + "autoHeightMode":true, + "afterCreate":"eval(function(){ if(typeof enablePasteImg ==='function'){enablePasteImg(self);};if(typeof enableAt ==='function'){enableAt(self, \"<%= @training_task.project_id %>\", 'Project');}; this.loadPlugin('autoheight')})", + "emotionsBasePath":'<%= Setting.host_name%>', + "height":300, + "allowFileManager":true, + "uploadJson":"/kindeditor/upload", + "fileManagerJson":"/kindeditor/filemanager"}); +$(".homepagePostReplyBannerCount").html('<%= escape_javascript(render :partial => 'reply_banner') %>'); +sd_create_editor_from_data(<%= @training_task.id %>, null, "100%", "<%= @training_task.class.name %>"); \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 8548dc665..a82e37a5d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1099,6 +1099,11 @@ RedmineApp::Application.routes.draw do post 'complete_training_task' end collection do + post 'add_journal' + post 'add_journal_in_org' + get 'delete_journal' + get 'reply' + post 'add_reply' end end