diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index cba836ed0..e3bd0ba91 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -192,6 +192,10 @@ class IssuesController < ApplicationController if saved render_attachment_warning_if_needed(@issue) + reply_id = params[:reference_user_id].to_i + if reply_id > 0 + JournalReply.add_reply(@issue.current_journal.id, reply_id, User.current.id) + end flash[:notice] = l(:notice_successful_update) unless @issue.current_journal.new_record? respond_to do |format| diff --git a/app/controllers/journals_controller.rb b/app/controllers/journals_controller.rb index ad6728e37..24784d26f 100644 --- a/app/controllers/journals_controller.rb +++ b/app/controllers/journals_controller.rb @@ -69,6 +69,7 @@ class JournalsController < ApplicationController text = text.to_s.strip.gsub(%r{
((.|\s)*?)
}m, '[...]') @content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> " @content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n" + @id = user.id rescue ActiveRecord::RecordNotFound render_404 end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index d6bf74da2..454d15f58 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -24,6 +24,7 @@ class UsersController < ApplicationController menu_item :user_newfeedback, :only => :user_newfeedback #Ended by young + before_filter :require_admin, :except => [:show, :index,:tag_save, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :info, :user_watchlist, :user_fanslist,:edit] before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :info] @@ -216,10 +217,20 @@ class UsersController < ApplicationController #### added by fq def info - @message = [] + + message = [] if @user == User.current - @message = JournalsForMessage.reference_message(@user.id) - end + + message = JournalsForMessage.reference_message(@user.id) + message += Journal.reference_message(@user.id) end + @offset, @limit = api_offset_and_limit({:limit => 10}) + @info_count = message.size + @info_pages = Paginator.new @info_count, @limit, params['page'] + @offset ||= @info_pages.offset + + messages = message.sort {|x,y| y.created_on <=> x.created_on } + + @message = messages[@offset, @limit] unless User.current.admin? if !@user.active? diff --git a/app/models/activity.rb b/app/models/activity.rb new file mode 100644 index 000000000..08cf22264 --- /dev/null +++ b/app/models/activity.rb @@ -0,0 +1,4 @@ +class Activity < ActiveRecord::Base + attr_accessible :act_id, :act_type, :user_id + belongs_to :act, :polymorphic => true +end diff --git a/app/models/bid.rb b/app/models/bid.rb index 7f5d8a472..1001ceb8c 100644 --- a/app/models/bid.rb +++ b/app/models/bid.rb @@ -6,6 +6,7 @@ class Bid < ActiveRecord::Base has_many :biding_projects, :dependent => :destroy has_many :projects, :through => :biding_projects has_many :journals_for_messages, :as => :jour, :dependent => :destroy + has_many :acts, :as => :act, :dependent => :destroy NAME_LENGTH_LIMIT = 60 DESCRIPTION_LENGTH_LIMIT = 250 @@ -17,6 +18,8 @@ class Bid < ActiveRecord::Base # validates_format_of :deadline, :with => validate :validate_user + # after_save :act_as_activity + scope :visible, lambda {|*args| nil } @@ -77,4 +80,8 @@ class Bid < ActiveRecord::Base def validate_user errors.add :author_id, :invalid if author.nil? || !author.active? end + + # def act_as_activity + # self.acts << Activity.new(:user_id => self.author_id) + # end end diff --git a/app/models/journal.rb b/app/models/journal.rb index a75c112db..b9d6bd78b 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -23,6 +23,9 @@ class Journal < ActiveRecord::Base belongs_to :user has_many :details, :class_name => "JournalDetail", :dependent => :delete_all + # added by fq + has_one :journal_reply + #end attr_accessor :indice acts_as_event :title => Proc.new {|o| status = ((s = o.new_status) ? " (#{s})" : nil); "#{o.issue.tracker} ##{o.issue.id}#{status}: #{o.issue.subject}" }, @@ -108,6 +111,14 @@ class Journal < ActiveRecord::Base end notified.map(&:mail) end + + ## added_by_fq + def self.reference_message(user_id) + message = Journal.find_by_sql("select id, journalized_id, user_id, notes, created_on from journals where id in (select journal_id from journal_replies where reply_id = #{user_id})") + message += Journal.find_by_sql("select id, journalized_id, user_id, notes, created_on from journals where journalized_id in (select id from issues where assigned_to_id = #{user_id})") + message + end + ## private diff --git a/app/models/journal_reply.rb b/app/models/journal_reply.rb new file mode 100644 index 000000000..814231776 --- /dev/null +++ b/app/models/journal_reply.rb @@ -0,0 +1,12 @@ +# added by fq + +class JournalReply < ActiveRecord::Base + attr_accessible :journal_id, :reply_id, :user_id + + belongs_to :user + belongs_to :journal + + def self.add_reply(journal_id, reply_id, user_id) + self.create(:journal_id => journal_id, :reply_id => reply_id, :user_id => user_id) + end +end diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb index 2d53be81a..7f2d76478 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -16,7 +16,7 @@ class JournalsForMessage < ActiveRecord::Base def self.reference_message(user_id) @user = User.find(user_id) - message = JournalsForMessage.find_by_sql("select * from journals_for_messages where reply_id = #{@user.id} or (jour_type = 'Bid' and jour_id in (select id from bids where author_id = #{@user.id}))", ) + message = JournalsForMessage.find_by_sql("select * from journals_for_messages where reply_id = #{@user.id} or (jour_type = 'Bid' and jour_id in (select id from bids where author_id = #{@user.id}))") message end diff --git a/app/models/user.rb b/app/models/user.rb index f5c7e8337..5ebfde711 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -81,6 +81,7 @@ class User < Principal has_many :jours, :class_name => 'JournalsForMessage', :dependent => :destroy has_many :bids, :foreign_key => 'author_id', :dependent => :destroy has_many :journals_for_messages, :as => :jour, :dependent => :destroy + has_many :journal_replies ##### diff --git a/app/views/issues/_edit.html.erb b/app/views/issues/_edit.html.erb index f2052a27a..e915dbd79 100644 --- a/app/views/issues/_edit.html.erb +++ b/app/views/issues/_edit.html.erb @@ -44,6 +44,7 @@ <%= f.hidden_field :lock_version %> <%= hidden_field_tag 'last_journal_id', params[:last_journal_id] || @issue.last_journal_id %> + <%= hidden_field_tag 'reference_user_id', params[:reference_user_id]%> <%= submit_tag l(:button_submit) %> <%= preview_link preview_edit_issue_path(:project_id => @project, :id => @issue), 'issue-form' %> <% end %> diff --git a/app/views/journals/edit.js.erb b/app/views/journals/edit.js.erb index 96cf6b4f8..761029ddc 100644 --- a/app/views/journals/edit.js.erb +++ b/app/views/journals/edit.js.erb @@ -1,5 +1,5 @@ $("#journal-<%= @journal.id %>-notes").hide(); - +$('#new_form_reference_user_id').val(''); if ($("form#journal-<%= @journal.id %>-form").length > 0) { // journal edit form already loaded $("#journal-<%= @journal.id %>-form").show(); diff --git a/app/views/journals/new.js.erb b/app/views/journals/new.js.erb index 78ec5f360..ae2574595 100644 --- a/app/views/journals/new.js.erb +++ b/app/views/journals/new.js.erb @@ -8,3 +8,5 @@ $('#issue_private_notes').attr('checked', true); showAndScrollTo("update", "notes"); $('#notes').scrollTop = $('#notes').scrollHeight - $('#notes').clientHeight; + +$('#reference_user_id').val("<%= @id %>"); \ No newline at end of file diff --git a/app/views/journals/update.js.erb b/app/views/journals/update.js.erb index 65c198d59..ad051334e 100644 --- a/app/views/journals/update.js.erb +++ b/app/views/journals/update.js.erb @@ -5,5 +5,5 @@ $("#journal-<%= @journal.id %>-notes").show(); $("#journal-<%= @journal.id %>-form").remove(); <% end %> - +$('#new_form_reference_user_id').val(''); <%= call_hook(:view_journals_update_js_bottom, { :journal => @journal }) %> diff --git a/app/views/users/info.html.erb b/app/views/users/info.html.erb index 6a91e08b8..7966221c9 100644 --- a/app/views/users/info.html.erb +++ b/app/views/users/info.html.erb @@ -1,7 +1,7 @@ <% unless @message.empty? %>
- <% @message.sort {|x,y| y.created_at <=> x.created_at }.each do |e| -%> + <% @message.each do |e| -%> @@ -10,10 +10,19 @@
@@ -25,7 +34,7 @@ - +
<%= link_to(h(e.user), user_path(e.user)) %> - <% if e.jour_type == "Bid"%> - 对需求:<%= link_to(e.jour.name, respond_path(e.jour))%>进行了反馈 - <% elsif e.jour_type == 'Principal' %> - 对<%= link_to("我", user_path(e.jour))%>的话进行了引用 + <% if e.instance_of?(JournalsForMessage)%> + <% if e.reply_id == User.current.id%> + 对我的话进行了引用<%if e.jour_type == 'Bid'%><%= link_to('link', respond_path(e.jour))%><% else %><%= link_to('link', feedback_path(e.jour))%><% end %> + <% else %> + 对需求:<%= link_to(e.jour.name, respond_path(e.jour_id))%>进行了反馈 + <% end %> + <% else %> + <% if e.journal_reply.nil? || e.journal_reply.reply_id != User.current.id %> + 对问题:<%= link_to(e.issue.subject, issue_path(e.journalized_id))%>进行了反馈 + + <% else %> + 对我的话进行了引用<%= link_to('link', issue_path(e.issue))%> + <% end %> <% end %>
<%= format_time e.created_at %><%= format_time e.created_on %>
@@ -34,3 +43,8 @@ <% end %>
<% end %> + diff --git a/config/routes.rb b/config/routes.rb index 29bd4d4a9..0562cba47 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -83,6 +83,7 @@ RedmineApp::Application.routes.draw do match 'user_fanslist', :to => 'users#user_fanslist', :via => :get, :as => "user_fanslist" #add by huang end end + match 'users/:id/user_newfeedback', :to => 'users#user_newfeedback', :via => :get, :as => "feedback" #end match 'my/account', :controller => 'my', :action => 'account', :via => [:get, :post] match 'my/account/destroy', :controller => 'my', :action => 'destroy', :via => [:get, :post] diff --git a/db/migrate/20130809122945_create_activities.rb b/db/migrate/20130809122945_create_activities.rb new file mode 100644 index 000000000..4a14da225 --- /dev/null +++ b/db/migrate/20130809122945_create_activities.rb @@ -0,0 +1,12 @@ +class CreateActivities < ActiveRecord::Migration + def change + create_table :activities, :id => false do |t| + t.integer :act_id, :null => false + t.string :act_type, :null => false + t.integer :user_id, :null => false + end + add_index :activities, :user_id + add_index :activities, [:act_id, :act_type] + add_index :activities, [:user_id, :act_type] + end +end diff --git a/db/migrate/20130810014337_create_journal_replies.rb b/db/migrate/20130810014337_create_journal_replies.rb new file mode 100644 index 000000000..d422e5ebd --- /dev/null +++ b/db/migrate/20130810014337_create_journal_replies.rb @@ -0,0 +1,13 @@ +class CreateJournalReplies < ActiveRecord::Migration + def change + create_table :journal_replies, :id => false do |t| + t.integer :journal_id + t.integer :user_id + t.integer :reply_id + + end + add_index :journal_replies, :user_id + add_index :journal_replies, :journal_id + add_index :journal_replies, :reply_id + end +end diff --git a/db/migrate/20130811001727_change_timetemp_in_journal_for_message_table.rb b/db/migrate/20130811001727_change_timetemp_in_journal_for_message_table.rb new file mode 100644 index 000000000..97125200f --- /dev/null +++ b/db/migrate/20130811001727_change_timetemp_in_journal_for_message_table.rb @@ -0,0 +1,4 @@ +class ChangeTimetempInJournalForMessageTable < ActiveRecord::Migration + rename_column :journals_for_messages, :created_at, :created_on + rename_column :journals_for_messages, :updated_at, :updated_on +end diff --git a/db/schema.rb b/db/schema.rb index 356ddec01..3b0bcb247 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130807021309) do +ActiveRecord::Schema.define(:version => 20130811001727) do create_table "a_user_watchers", :force => true do |t| t.string "name" @@ -21,6 +21,16 @@ ActiveRecord::Schema.define(:version => 20130807021309) do t.integer "member_id" end + create_table "activities", :id => false, :force => true do |t| + t.integer "act_id", :null => false + t.string "act_type", :null => false + t.integer "user_id", :null => false + end + + add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type" + add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type" + add_index "activities", ["user_id"], :name => "index_activities_on_user_id" + create_table "attachments", :force => true do |t| t.integer "container_id" t.string "container_type", :limit => 30 @@ -60,14 +70,6 @@ ActiveRecord::Schema.define(:version => 20130807021309) do add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type" - create_table "b_watcher_lists", :force => true do |t| - t.string "name" - t.integer "user_id" - t.string "sexual" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - create_table "biding_projects", :force => true do |t| t.integer "project_id" t.integer "bid_id" @@ -322,6 +324,16 @@ ActiveRecord::Schema.define(:version => 20130807021309) do add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id" + create_table "journal_replies", :id => false, :force => true do |t| + t.integer "journal_id" + t.integer "user_id" + t.integer "reply_id" + end + + add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id" + add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id" + add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id" + create_table "journals", :force => true do |t| t.integer "journalized_id", :default => 0, :null => false t.string "journalized_type", :limit => 30, :default => "", :null => false @@ -343,8 +355,8 @@ ActiveRecord::Schema.define(:version => 20130807021309) do t.text "notes" t.integer "status" t.integer "reply_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false end create_table "member_roles", :force => true do |t| @@ -450,6 +462,14 @@ ActiveRecord::Schema.define(:version => 20130807021309) do t.datetime "updated_at", :null => false end + create_table "project_infos", :force => true do |t| + t.string "name" + t.integer "project_id" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + create_table "project_tags", :force => true do |t| t.integer "project_id" t.integer "tag_id" @@ -524,6 +544,7 @@ ActiveRecord::Schema.define(:version => 20130807021309) do t.text "permissions" t.string "issues_visibility", :limit => 30, :default => "default", :null => false end + create_table "settings", :force => true do |t| t.string "name", :default => "", :null => false t.text "value" @@ -540,6 +561,7 @@ ActiveRecord::Schema.define(:version => 20130807021309) do t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.integer "project_id" + t.integer "user_id" end create_table "students", :force => true do |t| @@ -685,20 +707,6 @@ ActiveRecord::Schema.define(:version => 20130807021309) do add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id" add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type" - create_table "watchers_of_projects", :force => true do |t| - t.integer "user_id" - t.integer "project_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "watchers_of_users", :force => true do |t| - t.integer "watcher_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - create_table "wiki_content_versions", :force => true do |t| t.integer "wiki_content_id", :null => false t.integer "page_id", :null => false diff --git a/files/2013/08/130809215454_c83766886983515d2931343c943035fb.pdf b/files/2013/08/130809215454_c83766886983515d2931343c943035fb.pdf new file mode 100644 index 000000000..f9c0514de Binary files /dev/null and b/files/2013/08/130809215454_c83766886983515d2931343c943035fb.pdf differ