From 69e3dcee6cf2c34a78b20c0e716779d288f8eaa7 Mon Sep 17 00:00:00 2001
From: fanqiang <316257774@qq.com>
Date: Mon, 12 Aug 2013 15:37:42 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7=E6=B4=BB?=
=?UTF-8?q?=E5=8A=A8=EF=BC=8C=E7=94=A8=E6=88=B7=E4=B8=BB=E9=A1=B5=E7=9A=84?=
=?UTF-8?q?=E5=85=B6=E4=BB=96=E9=83=A8=E5=88=86=E6=B7=BB=E5=8A=A0=E5=88=86?=
=?UTF-8?q?=E9=A1=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/users_controller.rb | 101 +++++++++++-------
app/controllers/words_controller.rb | 32 ++++--
app/helpers/users_helper.rb | 2 +
app/models/activity.rb | 3 +
app/models/bid.rb | 10 +-
app/models/changeset.rb | 14 ++-
app/models/journal.rb | 13 ++-
app/models/message.rb | 14 +++
app/models/news.rb | 12 ++-
app/models/user.rb | 1 +
app/models/watchers_of_projects.rb | 47 --------
app/models/watchers_of_user.rb | 66 ------------
app/views/users/show.html.erb | 77 +++++++++++--
app/views/users/user_newfeedback.html.erb | 7 +-
app/views/users/watch_bids.html.erb | 8 +-
app/views/words/_message.html.erb | 14 +--
app/views/words/_new.html.erb | 4 +-
app/views/words/create.js.erb | 2 +-
app/views/words/destroy.js.erb | 2 +-
.../20130809122945_create_activities.rb | 2 +-
...e_timetemp_in_journal_for_message_table.rb | 11 +-
db/schema.rb | 5 +-
public/images/avatars/User/4869 | Bin 0 -> 777835 bytes
23 files changed, 252 insertions(+), 195 deletions(-)
delete mode 100644 app/models/watchers_of_projects.rb
delete mode 100644 app/models/watchers_of_user.rb
create mode 100644 public/images/avatars/User/4869
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 0a1775c5c..5c91a1d33 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -74,8 +74,18 @@ class UsersController < ApplicationController
##added by fq
def watch_bids
- @bid = Bid.watched_by(@user)
-
+ @bids = Bid.watched_by(@user)
+ @offset, @limit = api_offset_and_limit({:limit => 10})
+ @bid_count = @bids.count
+ @bid_pages = Paginator.new @bid_count, @limit, params['page']
+ @offset ||= @bid_pages.reverse_offset
+ unless @offset == 0
+ @bid = @bids.offset(@offset).limit(@limit).all.reverse
+ else
+ limit = @bid_count % @limit
+ @bid = @bids.offset(@offset).limit(limit).all.reverse
+ end
+
respond_to do |format|
format.html {
render :layout => 'base_users'
@@ -108,12 +118,17 @@ class UsersController < ApplicationController
end
# end
+# modified by fq
def user_newfeedback
- @jour = @user.journals_for_messages
- @jour.each_with_index {|j,i| j.indice = i+1}
+ @jours = @user.journals_for_messages.reverse
+ @limit = 10
+ @feedback_count = @jours.count
+ @feedback_pages = Paginator.new @feedback_count, @limit, params['page']
+ @offset ||= @feedback_pages.offset
+ @jour = @jours[@offset, @limit]
@state = false
-
end
+ # end
def user_comments
@@ -157,46 +172,54 @@ class UsersController < ApplicationController
### modified by fq
def show
- has = {
- "show_issues" => true,
- "show_changesets" => true,
- "show_news" => true,
- "show_messages" => true,
- "show_bids" => true,
- }
+ # has = {
+ # "show_issues" => true,
+ # "show_changesets" => true,
+ # "show_news" => true,
+ # "show_messages" => true,
+ # "show_bids" => true,
+ # }
#####fq
- JournalsForMessage.reference_message(@user.id)
+ # JournalsForMessage.reference_message(@user.id)
# show projects based on current user visibility
- @memberships = @user.memberships.all(:conditions => Project.visible_condition(User.current))
- if @user == User.current
- events = []
- activity = Redmine::Activity::Fetcher.new(User.current, :author => User.current)
- activity.scope_select {|t| !has["show_#{t}"].nil?}
- events += activity.events(nil, nil, :limit => 10)
- @watcher = User.watched_by(@user)
- for user in @watcher
- activity = Redmine::Activity::Fetcher.new(User.current, :author => user)
- activity.scope_select {|t| !has["show_#{t}"].nil?}
- events += activity.events(nil, nil, :limit => 10)
- end
- else
- activity = Redmine::Activity::Fetcher.new(User.current, :author => @user)
- activity.scope_select {|t| !has["show_#{t}"].nil?}
- events = activity.events(nil, nil, :limit => 10)
- end
- @events = []
- @events_by_day = events.group_by(&:event_date)
- @events_by_day.keys.sort.reverse.each do |day|
- @events += @events_by_day[day].sort {|x,y| y.event_datetime <=> x.event_datetime}
- end
+ # @memberships = @user.memberships.all(:conditions => Project.visible_condition(User.current))
+
+ # if @user == User.current
+ # events = []
+ # activity = Redmine::Activity::Fetcher.new(User.current, :author => User.current)
+ # activity.scope_select {|t| !has["show_#{t}"].nil?}
+ # events += activity.events(nil, nil, :limit => 10)
+ # @watcher = User.watched_by(@user)
+ # for user in @watcher
+ # activity = Redmine::Activity::Fetcher.new(User.current, :author => user)
+ # activity.scope_select {|t| !has["show_#{t}"].nil?}
+ # events += activity.events(nil, nil, :limit => 10)
+ # end
+ # else
+ # activity = Redmine::Activity::Fetcher.new(User.current, :author => @user)
+ # activity.scope_select {|t| !has["show_#{t}"].nil?}
+ # events = activity.events(nil, nil, :limit => 10)
+ # end
+ # @events = []
+ # @events_by_day = events.group_by(&:event_date)
+ # @events_by_day.keys.sort.reverse.each do |day|
+ # @events += @events_by_day[day].sort {|x,y| y.event_datetime <=> x.event_datetime}
+ # end
+ # @offset, @limit = api_offset_and_limit({:limit => 10})
+ # @activity_count = @events.size
+ # @activity_pages = Paginator.new @activity_count, @limit, params['page']
+ # @offset ||= @activity_pages.offset
+ # @events_by_day_ = @events.slice(@offset,@limit)
+ watcher = User.watched_by(@user)
+ watcher.push(User.current)
+ activity = Activity.where('user_id in (?)', watcher).order('id desc')
@offset, @limit = api_offset_and_limit({:limit => 10})
- @activity_count = @events.size
+ @activity_count = activity.count
@activity_pages = Paginator.new @activity_count, @limit, params['page']
- @offset ||= @activity_pages.offset
- @events_by_day_ = @events.slice(@offset,@limit)
-
+ @offset ||= @activity_pages.offset
+ @activity = activity.offset(@offset).limit(@limit)
#Modified by nie
unless User.current.admin?
diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb
index e978b1d36..1f05b0e81 100644
--- a/app/controllers/words_controller.rb
+++ b/app/controllers/words_controller.rb
@@ -17,8 +17,12 @@ class WordsController < ApplicationController
# @message_count = a_message.count
end
end
- @jour = @user.journals_for_messages
- @jour.each_with_index {|j,i| j.indice = i+1}
+ @jours = @user.journals_for_messages.reverse
+ @limit = 10
+ @feedback_count = @jours.count
+ @feedback_pages = Paginator.new @feedback_count, @limit, params['page']
+ @offset ||= @feedback_pages.offset
+ @jour = @jours[@offset, @limit]
respond_to do |format|
# format.html { redirect_to_referer_or {render :text => 'Watcher added.', :layout => true}}
@@ -29,8 +33,12 @@ class WordsController < ApplicationController
def destroy
JournalsForMessage.delete_message(params[:object_id])
- @jour = @user.journals_for_messages
- @jour.each_with_index {|j,i| j.indice = i+1}
+ @jours = @user.journals_for_messages.reverse
+ @limit = 10
+ @feedback_count = @jours.count
+ @feedback_pages = Paginator.new @feedback_count, @limit, params['page']
+ @offset ||= @feedback_pages.offset
+ @jour = @jours[@offset, @limit]
# if a_message.size > 5
# @message = a_message[-5, 5]
# else
@@ -64,8 +72,12 @@ class WordsController < ApplicationController
end
def more
- @jour = @user.journals_for_messages
- @jour.each_with_index {|j,i| j.indice = i+1}
+ @jours = @user.journals_for_messages.reverse
+ @limit = 10
+ @feedback_count = @jours.count
+ @feedback_pages = Paginator.new @feedback_count, @limit, params['page']
+ @offset ||= @feedback_pages.offset
+ @jour = @jours[@offset, @limit]
@state = true
respond_to do |format|
@@ -76,8 +88,12 @@ class WordsController < ApplicationController
end
def back
- @jour = @user.journals_for_messages
- @jour.each_with_index {|j,i| j.indice = i+1}
+ @jours = @user.journals_for_messages.reverse
+ @limit = 10
+ @feedback_count = @jours.count
+ @feedback_pages = Paginator.new @feedback_count, @limit, params['page']
+ @offset ||= @feedback_pages.offset
+ @jour = @jours[@offset, @limit]
@state = false
respond_to do |format|
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 1f32990c1..47b7d727a 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -60,5 +60,7 @@ module UsersHelper
def get_users_by_tag(tag_name)
User.tagged_with(tag_name).by_join_date
end
+
+ # added by fq
end
diff --git a/app/models/activity.rb b/app/models/activity.rb
index 08cf22264..635171653 100644
--- a/app/models/activity.rb
+++ b/app/models/activity.rb
@@ -1,4 +1,7 @@
class Activity < ActiveRecord::Base
attr_accessible :act_id, :act_type, :user_id
belongs_to :act, :polymorphic => true
+ belongs_to :user
+
+ validates_presence_of :act_id, :act_type, :user_id
end
diff --git a/app/models/bid.rb b/app/models/bid.rb
index 1001ceb8c..0602e0ae3 100644
--- a/app/models/bid.rb
+++ b/app/models/bid.rb
@@ -6,7 +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
+ has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
NAME_LENGTH_LIMIT = 60
DESCRIPTION_LENGTH_LIMIT = 250
@@ -18,7 +18,7 @@ class Bid < ActiveRecord::Base
# validates_format_of :deadline, :with =>
validate :validate_user
- # after_save :act_as_activity
+ after_save :act_as_activity
scope :visible, lambda {|*args|
nil
@@ -81,7 +81,7 @@ class Bid < ActiveRecord::Base
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
+ def act_as_activity
+ self.acts << Activity.new(:user_id => self.author_id)
+ end
end
diff --git a/app/models/changeset.rb b/app/models/changeset.rb
index d3fa8ab2b..a7fb54b1a 100644
--- a/app/models/changeset.rb
+++ b/app/models/changeset.rb
@@ -19,6 +19,10 @@ class Changeset < ActiveRecord::Base
belongs_to :repository
belongs_to :user
has_many :filechanges, :class_name => 'Change', :dependent => :delete_all
+ # fq
+ has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
+ # end
+
has_and_belongs_to_many :issues
has_and_belongs_to_many :parents,
:class_name => "Changeset",
@@ -53,7 +57,11 @@ class Changeset < ActiveRecord::Base
after_create :scan_for_issues
before_create :before_create_cs
-
+
+ # fq
+ after_save :act_as_activity
+ # end
+
def revision=(r)
write_attribute :revision, (r.nil? ? nil : r.to_s)
end
@@ -209,6 +217,10 @@ class Changeset < ActiveRecord::Base
end
private
+
+ def act_as_activity
+ self.acts << Activity.new(:user_id => self.user_id)
+ end
def fix_issue(issue)
status = IssueStatus.find_by_id(Setting.commit_fix_status_id.to_i)
diff --git a/app/models/journal.rb b/app/models/journal.rb
index b9d6bd78b..2a1daf1ac 100644
--- a/app/models/journal.rb
+++ b/app/models/journal.rb
@@ -25,7 +25,8 @@ class Journal < ActiveRecord::Base
has_many :details, :class_name => "JournalDetail", :dependent => :delete_all
# added by fq
has_one :journal_reply
- #end
+ has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
+ # 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}" },
@@ -42,6 +43,10 @@ class Journal < ActiveRecord::Base
" (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"}
before_create :split_private_notes
+
+ # fq
+ after_save :act_as_activity
+ # end
scope :visible, lambda {|*args|
user = args.shift || User.current
@@ -140,4 +145,10 @@ class Journal < ActiveRecord::Base
end
true
end
+
+ # fq
+ def act_as_activity
+ self.acts << Activity.new(:user_id => self.user_id)
+ end
+ # end
end
diff --git a/app/models/message.rb b/app/models/message.rb
index 767223748..28b03837f 100644
--- a/app/models/message.rb
+++ b/app/models/message.rb
@@ -22,6 +22,10 @@ class Message < ActiveRecord::Base
acts_as_tree :counter_cache => :replies_count, :order => "#{Message.table_name}.created_on ASC"
acts_as_attachable
belongs_to :last_reply, :class_name => 'Message', :foreign_key => 'last_reply_id'
+
+ # added by fq
+ has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
+ # end
acts_as_searchable :columns => ['subject', 'content'],
:include => {:board => :project},
@@ -45,6 +49,10 @@ class Message < ActiveRecord::Base
after_create :add_author_as_watcher, :reset_counters!
after_update :update_messages_board
after_destroy :reset_counters!
+
+ # fq
+ after_save :act_as_activity
+ # end
scope :visible, lambda {|*args|
includes(:board => :project).where(Project.allowed_to_condition(args.shift || User.current, :view_messages, *args))
@@ -105,4 +113,10 @@ class Message < ActiveRecord::Base
def add_author_as_watcher
Watcher.create(:watchable => self.root, :user => author)
end
+
+ # fq
+ def act_as_activity
+ self.acts << Activity.new(:user_id => self.author_id)
+ end
+ # end
end
diff --git a/app/models/news.rb b/app/models/news.rb
index c8a4112cc..b08f8598c 100644
--- a/app/models/news.rb
+++ b/app/models/news.rb
@@ -20,6 +20,9 @@ class News < ActiveRecord::Base
belongs_to :project
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on"
+ # fq
+ has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
+ #end
validates_presence_of :title, :description
validates_length_of :title, :maximum => 60
@@ -33,7 +36,10 @@ class News < ActiveRecord::Base
acts_as_watchable
after_create :add_author_as_watcher
-
+ # fq
+ after_save :act_as_activity
+ # end
+
scope :visible, lambda {|*args|
includes(:project).where(Project.allowed_to_condition(args.shift || User.current, :view_news, *args))
}
@@ -63,4 +69,8 @@ class News < ActiveRecord::Base
def add_author_as_watcher
Watcher.create(:watchable => self, :user => author)
end
+ ## fq
+ def act_as_activity
+ self.acts << Activity.new(:user_id => self.author_id)
+ end
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 5ebfde711..78b757d43 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -82,6 +82,7 @@ class User < Principal
has_many :bids, :foreign_key => 'author_id', :dependent => :destroy
has_many :journals_for_messages, :as => :jour, :dependent => :destroy
has_many :journal_replies
+ has_many :activities
#####
diff --git a/app/models/watchers_of_projects.rb b/app/models/watchers_of_projects.rb
deleted file mode 100644
index 4a767aaee..000000000
--- a/app/models/watchers_of_projects.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# fq
-class WatchersOfProjects < ActiveRecord::Base
- attr_accessible :project_id, :user_id
- belongs_to :project
- belongs_to :user
-
- validate :validate_user
- validate :validate_project
- validates_uniqueness_of :user_id, :scope => :project_id
- validates_presence_of :user_id, :project_id
-
- def self.watch(user_id, project_id)
- @new_watch = WatchersOfProjects.new
- @new_watch.user_id = user_id
- @new_watch.project_id = project_id
- @new_watch.save
- true
- end
-
- def self.watcher_count(project)
- @project = project
- @count = @project.watchers_of_projects.count
- @count
- end
-
- def self.is_watched(user_id, project_id)
- @is_watched = self.where("user_id = ? and project_id = ?", user_id, project_id).to_a.first
- if @is_watched.nil?
- false
- else
- true
- end
- end
-
- def self.watch_cancle(user_id, project_id)
- self.delete_all(["user_id = ? and project_id = ?", user_id, project_id])
- true
- end
-
- def validate_user
- errors.add :user_id, :invalid if user.nil? || !user.active?
- end
-
- def validate_project
- errors.add :project_id, :invalid if project.nil?
- end
-end
diff --git a/app/models/watchers_of_user.rb b/app/models/watchers_of_user.rb
deleted file mode 100644
index 527b092c8..000000000
--- a/app/models/watchers_of_user.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# fq
-class WatchersOfUser < ActiveRecord::Base
- attr_accessible :user_id, :watcher_id
- belongs_to :user
-
- validates_uniqueness_of :watcher_id, :scope => :user_id
- validate :validate_user
- validate :validate_watcher
- validates_presence_of :watcher_id, :user_id
-
- def self.watch_user(watcher_id, user_id)
- unless user_id == watcher_id
- @watchers_of_user = WatchersOfUser.new
- @watchers_of_user.watcher_id = watcher_id
- @watchers_of_user.user_id = user_id
- @watchers_of_user.save
- true
- else
- false
- end
- end
-
- def cancel_watching_user
- self.class.cancel_watching_user(self.watcher_id, self.user_id)
- end
-
- def self.cancel_watching_user(watcher_id, user_id)
- self.delete_all(["user_id = ? and watcher_id = ?", user_id, watcher_id])
- true
- end
-
- def self.find_users(watcher_id)
- @user = WatchersOfUser.find_by_sql("select * from users where id in (select user_id from #{WatchersOfUser.table_name} where watcher_id = #{watcher_id})")
- @user
- # @watch_table_for_user=WatchersOfUser.where(:watcher_id => watcher_id)
- # @user = []
- # @watch_table_for_user.each do |watch|
- # @user.push(watch.user)
- # end
- # @user
- end
-
- def self.find_watchers(user_id)
- @watcher = WatchersOfUser.find_by_sql("select * from users where id in (select watcher_id from #{WatchersOfUser.table_name} where user_id = #{user_id})")
- @watcher
- # user = User.find(user_id)
- # @watch_table_for_watcher = user.watchers_of_users
- # @watcher = []
- # @watch_table_for_watcher.each do |watch|
- # user_temp = User.find(watch.watcher_id)
- # @watcher.push(user_temp)
- # end
- # @watcher
- end
-
- #验证user是否存在
- def validate_user
- errors.add :user_id, :invalid if user.nil? || !user.active?
- end
-
- #验证watcher是否存在
- def validate_watcher
- user = User.where("id = ?", watcher_id).to_a.first
- errors.add :watcher_id, :invalid if user.nil? || !user.active?
- end
-end
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb
index 9d2780716..3d2f5c142 100644
--- a/app/views/users/show.html.erb
+++ b/app/views/users/show.html.erb
@@ -1,29 +1,88 @@
-<% unless @events_by_day.empty? %>
+<% unless @activity.empty? %>
- <% @events_by_day_.each do |e| %>
+ <% @activity.each do |e| %>
+ <% act = e.act %>
- <%= link_to image_tag(url_to_avatar(e.event_author), :class => "avatar"), user_path(e.event_author), :class => "avatar" %> |
+ <%= link_to image_tag(url_to_avatar(e.user), :class => "avatar"), user_path(e.user_id), :class => "avatar" %> |
+ <% case e.act_type %>
+ <% when 'Bid' %>
- <% if e.event_author == User.current%>
- <%= link_to("#{l(:label_i)}", user_path(e.event_author)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title(e.event_title), e.event_url %> |
-
+ <% if e.user_id == User.current%>
+ <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title("#{l(:label_bid_plural)}##{act.id}:#{act.name}"), respond_path(e.act_id) %> |
<% else %>
- <%= link_to(h(e.event_author), user_path(e.event_author)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title(e.event_title), e.event_url %> |
+ <%= link_to(h(e.user_id), user_path(e.user_id)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title("#{l(:label_bid_plural)}##{act.id}:#{act.name}"), respond_path(e.act_id) %> |
<% end %>
- <%= textilizable e.event_description %>
+ <%= textilizable act.description %>
|
+ <% when 'Journal' %>
+
+ <% if e.user_id == User.current%>
+ <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.id}: #{act.issue.subject}"), {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> |
+ <% else %>
+ <%= link_to(h(e.user_id), user_path(e.user_id)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.id}: #{act.issue.subject}"), {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> |
+ <% end %>
+
+
+
+
+ <%= textilizable act.notes %>
+ |
+
+ <% when 'Changeset' %>
+
+ <% if e.user_id == User.current%>
+ <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title(act.title), {:controller => 'repositories', :action => 'revision', :id => act.repository.project, :repository_id => act.repository.identifier_param, :rev => act.identifier} %> |
+ <% else %>
+ <%= link_to(h(e.user_id), user_path(e.user_id)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title(act.title), {:controller => 'repositories', :action => 'revision', :id => act.repository.project, :repository_id => act.repository.identifier_param, :rev => act.identifier} %> |
+ <% end %>
+
+
+
+
+ <%= textilizable act.long_comments %>
+ |
+
+ <% when 'Message' %>
+
+ <% if e.user_id == User.current%>
+ <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title("#{act.board.name}: #{act.subject}"), {:controller => 'messages', :action => 'show', :board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}) %> |
+ <% else %>
+ <%= link_to(h(e.user_id), user_path(e.user_id)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title("#{act.board.name}: #{act.subject}"), {:controller => 'messages', :action => 'show', :board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}) %> |
+ <% end %>
+
+
+
+
+ <%= textilizable act.content %>
+ |
+
+ <% when 'News' %>
+
+ <% if e.user_id == User.current%>
+ <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title("#{l(:label_news)}: #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id} %> |
+ <% else %>
+ <%= link_to(h(e.user_id), user_path(e.user_id)) %><%= l(:label_new_activity) %> <%= link_to format_activity_title("#{l(:label_news)}: #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id} %> |
+ <% end %>
+
+
+
+
+ <%= textilizable act.description %>
+ |
+
+ <% end %>
|
- <%= format_time(e.event_datetime) %> |
+ <%= format_time(e.act.created_on) %> |
|
diff --git a/app/views/users/user_newfeedback.html.erb b/app/views/users/user_newfeedback.html.erb
index 34faaca92..13d4312cb 100644
--- a/app/views/users/user_newfeedback.html.erb
+++ b/app/views/users/user_newfeedback.html.erb
@@ -3,7 +3,12 @@
<%= render :partial => 'words/new', :locals => {:user => @user, :sta => @state} %>
- <%= render :partial => 'words/message', :locals => {:jour => @jour, :state => @state, :user => @user} %>
+ <%= render :partial => 'words/message', :locals => {:jour => @jour, :state => @state, :user => @user, :feedback_pages => @feedback_pages} %>
+
+
\ No newline at end of file
diff --git a/app/views/users/watch_bids.html.erb b/app/views/users/watch_bids.html.erb
index d8a048752..5883dee2c 100644
--- a/app/views/users/watch_bids.html.erb
+++ b/app/views/users/watch_bids.html.erb
@@ -40,4 +40,10 @@
-<% end %>
\ No newline at end of file
+<% end %>
+
+
\ No newline at end of file
diff --git a/app/views/words/_message.html.erb b/app/views/words/_message.html.erb
index f613434b0..10662edc9 100644
--- a/app/views/words/_message.html.erb
+++ b/app/views/words/_message.html.erb
@@ -1,18 +1,18 @@
<% if jour.size >0 %>
<% remove_allowed = (User.current.id == jour.first.user_id) %>
-<% journals = jour.reverse%>
-<% for journal in journals%>
+
+<% for journal in jour%>
- |
+ <%= link_to image_tag(url_to_avatar(journal.user), :class => "avatar"), user_path(journal.user), :class => "avatar" %> |
<%=link_to journal.user, user_path(journal.user)%>
<% if @user == User.current%>
- <%= l(:label_leave_me_message) %>
+ <%= l(:label_leave_me_message) %>
<% else %>
- <%= l(:label_leave_others_message) %>
+ <%= l(:label_leave_others_message) %>
<% end %>
|
@@ -20,7 +20,7 @@
<%= textilizable journal.notes%> |
- <%= format_time journal.created_on %> |
+ <%= format_time journal.created_on %> |
<%= link_to(image_tag('comment.png'), {:controller => 'words', :action => 'new', :id => user, :journal_id => journal}, :remote => true,
:method => 'post', :title => l(:button_quote))%><%= link_to(image_tag('delete.png'), {:controller => 'words', :action => 'destroy', :object_id => journal, :user_id => user},
:remote => true, :method => 'delete', :class => "delete", :title => l(:button_delete)) if remove_allowed || journal.jour_id == User.current.id %> |
@@ -32,3 +32,5 @@
<% end %>
+
+
diff --git a/app/views/words/_new.html.erb b/app/views/words/_new.html.erb
index 98700a884..8186fa6a8 100644
--- a/app/views/words/_new.html.erb
+++ b/app/views/words/_new.html.erb
@@ -44,7 +44,7 @@
}
}
- function showInfo(id) {
+ function showInfo(id, content) {
var text = $('#' + id);
if (text.val() == '') {
$('#' + id).val(content);
@@ -67,7 +67,7 @@
<%= submit_tag l(:button_leave_meassge), :name => nil , :class => "bid_btn", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -31px'"%>
- <%= submit_tag l(:button_clear), :name => nil, :onclick => "clearMessage('bid_message_message');", :type => 'button', :class => "bid_btn", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -31px'" %> |
+ <%= submit_tag l(:button_clear), :name => nil, :onclick => "clearMessage('new_form_user_message');", :type => 'button', :class => "bid_btn", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -31px'" %>
<% else %>
diff --git a/app/views/words/create.js.erb b/app/views/words/create.js.erb
index 823587b30..7bb849b5a 100644
--- a/app/views/words/create.js.erb
+++ b/app/views/words/create.js.erb
@@ -1,3 +1,3 @@
-$('#message').html('<%= escape_javascript(render(:partial => 'words/message', :locals => {:jour => @jour, :state => false, :user => @user})) %>');
+$('#message').html('<%= escape_javascript(render(:partial => 'words/message', :locals => {:jour => @jour, :state => false, :user => @user, :feedback_pages => @feedback_pages})) %>');
$('#new_form_user_message').val("");
$('#new_form_reference_user_id').val("");
\ No newline at end of file
diff --git a/app/views/words/destroy.js.erb b/app/views/words/destroy.js.erb
index f2030b783..53dc614b2 100644
--- a/app/views/words/destroy.js.erb
+++ b/app/views/words/destroy.js.erb
@@ -1,2 +1,2 @@
-$('#message').html('<%= escape_javascript(render(:partial => 'words/message', :locals => {:jour => @jour, :state => false, :user => @user})) %>');
+$('#message').html('<%= escape_javascript(render(:partial => 'words/message', :locals => {:jour => @jour, :state => false, :user => @user, :feedback_pages => @feedback_pages})) %>');
$('#new_form_reference_user_id').val("");
\ No newline at end of file
diff --git a/db/migrate/20130809122945_create_activities.rb b/db/migrate/20130809122945_create_activities.rb
index 4a14da225..49d121291 100644
--- a/db/migrate/20130809122945_create_activities.rb
+++ b/db/migrate/20130809122945_create_activities.rb
@@ -1,6 +1,6 @@
class CreateActivities < ActiveRecord::Migration
def change
- create_table :activities, :id => false do |t|
+ create_table :activities do |t|
t.integer :act_id, :null => false
t.string :act_type, :null => false
t.integer :user_id, :null => false
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
index 97125200f..376508b75 100644
--- a/db/migrate/20130811001727_change_timetemp_in_journal_for_message_table.rb
+++ b/db/migrate/20130811001727_change_timetemp_in_journal_for_message_table.rb
@@ -1,4 +1,11 @@
class ChangeTimetempInJournalForMessageTable < ActiveRecord::Migration
- rename_column :journals_for_messages, :created_at, :created_on
- rename_column :journals_for_messages, :updated_at, :updated_on
+ def self.up
+ rename_column :journals_for_messages, :created_at, :created_on
+ rename_column :journals_for_messages, :updated_at, :updated_on
+ end
+
+ def self.down
+ rename_column :journals_for_messages, :created_on, :created_at
+ rename_column :journals_for_messages, :updated_on, :updated_at
+ end
end
diff --git a/db/schema.rb b/db/schema.rb
index 3b0bcb247..9d1b24e05 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 => 20130811001727) do
+ActiveRecord::Schema.define(:version => 20130811122119) do
create_table "a_user_watchers", :force => true do |t|
t.string "name"
@@ -21,7 +21,7 @@ ActiveRecord::Schema.define(:version => 20130811001727) do
t.integer "member_id"
end
- create_table "activities", :id => false, :force => true do |t|
+ create_table "activities", :force => true do |t|
t.integer "act_id", :null => false
t.string "act_type", :null => false
t.integer "user_id", :null => false
@@ -463,7 +463,6 @@ ActiveRecord::Schema.define(:version => 20130811001727) do
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
diff --git a/public/images/avatars/User/4869 b/public/images/avatars/User/4869
new file mode 100644
index 0000000000000000000000000000000000000000..030ab8a685bebb796c24cc710edd9e69859164f6
GIT binary patch
literal 777835
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 |