diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-06-24 22:13:00 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-06-24 22:13:00 +0300 |
commit | d41940d36ee8ff693a3c22d6c317e864b53792f0 (patch) | |
tree | 60a0cf370682356e030eda6c6862cab3ea744ec0 | |
parent | 106764ab3b42f9d81a6ad81f2611ea1d78d7ae05 (diff) | |
parent | 884498c59f7083423eac7232091ff24215f4a0c7 (diff) | |
download | gitlab-ce-d41940d36ee8ff693a3c22d6c317e864b53792f0.tar.gz |
Merge branch 'master' into 6-0-dev
Conflicts:
app/views/projects/issues/show.html.haml
db/fixtures/development/09_issues.rb
db/fixtures/development/10_merge_requests.rb
-rw-r--r-- | app/assets/javascripts/dispatcher.js.coffee | 2 | ||||
-rw-r--r-- | app/assets/stylesheets/sections/issues.scss | 4 | ||||
-rw-r--r-- | app/helpers/projects_helper.rb | 6 | ||||
-rw-r--r-- | app/models/concerns/issuable.rb | 15 | ||||
-rw-r--r-- | app/models/concerns/mentionable.rb | 37 | ||||
-rw-r--r-- | app/models/note.rb | 2 | ||||
-rw-r--r-- | app/services/notification_service.rb | 15 | ||||
-rw-r--r-- | app/views/projects/issues/show.html.haml | 5 | ||||
-rw-r--r-- | db/fixtures/development/09_issues.rb | 1 | ||||
-rw-r--r-- | db/fixtures/development/10_merge_requests.rb | 2 | ||||
-rw-r--r-- | doc/update/5.0-to-5.1.md | 1 | ||||
-rw-r--r-- | doc/update/5.2-to-5.3.md | 4 | ||||
-rw-r--r-- | spec/services/notification_service_spec.rb | 5 |
13 files changed, 88 insertions, 11 deletions
diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee index 245b707626d..fdbc35d6893 100644 --- a/app/assets/javascripts/dispatcher.js.coffee +++ b/app/assets/javascripts/dispatcher.js.coffee @@ -1,6 +1,6 @@ $ -> new Dispatcher() - + class Dispatcher constructor: () -> @initSearch() diff --git a/app/assets/stylesheets/sections/issues.scss b/app/assets/stylesheets/sections/issues.scss index 5a1b476fe25..ed7902fec3a 100644 --- a/app/assets/stylesheets/sections/issues.scss +++ b/app/assets/stylesheets/sections/issues.scss @@ -106,3 +106,7 @@ input.check_all_issues { #update_status { width: 100px; } + +.participants { + margin-bottom: 10px; +} diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 878b0913769..39290ec05bb 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -17,7 +17,7 @@ module ProjectsHelper end def link_to_member(project, author, opts = {}) - default_opts = { avatar: true } + default_opts = { avatar: true, name: true, size: 16 } opts = default_opts.merge(opts) return "(deleted)" unless author @@ -25,10 +25,10 @@ module ProjectsHelper author_html = "" # Build avatar image tag - author_html << image_tag(gravatar_icon(author.try(:email)), width: 16, class: "avatar avatar-inline s16") if opts[:avatar] + author_html << image_tag(gravatar_icon(author.try(:email), opts[:size]), width: opts[:size], class: "avatar avatar-inline #{"s#{opts[:size]}" if opts[:size]}") if opts[:avatar] # Build name span tag - author_html << content_tag(:span, sanitize(author.name), class: 'author') + author_html << content_tag(:span, sanitize(author.name), class: 'author') if opts[:name] author_html = author_html.html_safe diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index cb238c15ed8..8868e818daa 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -6,6 +6,7 @@ # module Issuable extend ActiveSupport::Concern + include Mentionable included do belongs_to :project @@ -96,4 +97,18 @@ module Issuable def votes_count upvotes + downvotes end + + # Return all users participating on the discussion + def participants + users = [] + users << author + users << assignee if is_assigned? + mentions = [] + mentions << self.mentioned_users + notes.each do |note| + users << note.author + mentions << note.mentioned_users + end + users.concat(mentions.reduce([], :|)).uniq + end end diff --git a/app/models/concerns/mentionable.rb b/app/models/concerns/mentionable.rb new file mode 100644 index 00000000000..f22070f8504 --- /dev/null +++ b/app/models/concerns/mentionable.rb @@ -0,0 +1,37 @@ +# == Mentionable concern +# +# Contains common functionality shared between Issues and Notes +# +# Used by Issue, Note +# +module Mentionable + extend ActiveSupport::Concern + + def mentioned_users + users = [] + return users if mentionable_text.blank? + has_project = self.respond_to? :project + matches = mentionable_text.scan(/@[a-zA-Z][a-zA-Z0-9_\-\.]*/) + matches.each do |match| + identifier = match.delete "@" + if has_project + id = project.users_projects.joins(:user).where(users: { username: identifier }).pluck(:user_id).first + else + id = User.where(username: identifier).pluck(:id).first + end + users << User.find(id) unless id.blank? + end + users.uniq + end + + def mentionable_text + if self.class == Issue + description + elsif self.class == Note + note + else + nil + end + end + +end diff --git a/app/models/note.rb b/app/models/note.rb index c2e664d1bcd..c23aab03bcc 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -19,6 +19,8 @@ require 'carrierwave/orm/activerecord' require 'file_size_validator' class Note < ActiveRecord::Base + include Mentionable + attr_accessible :note, :noteable, :noteable_id, :noteable_type, :project_id, :attachment, :line_code, :commit_id diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index ef8ecd6e37a..f3dc552a8e7 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -110,9 +110,11 @@ class NotificationService else opts.merge!(noteable_id: note.noteable_id) target = note.noteable - recipients = [] - recipients << target.assignee if target.respond_to?(:assignee) - recipients << target.author if target.respond_to?(:author) + if target.respond_to?(:participants) + recipients = target.participants + else + recipients = [] + end end # Get users who left comment in thread @@ -190,7 +192,12 @@ class NotificationService end def new_resource_email(target, method) - recipients = reject_muted_users([target.assignee], target.project) + if target.respond_to?(:participants) + recipients = target.participants + else + recipients = [] + end + recipients = reject_muted_users(recipients, target.project) recipients = recipients.concat(project_watchers(target.project)).uniq recipients.delete(target.author) diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index 138db92eac0..2c72d550b3c 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -65,4 +65,9 @@ - else = link_to 'Close Issue', project_issue_path(@project, @issue, issue: {state_event: :close }, status_only: true), method: :put, class: "btn grouped close_issue", title: "Close Issue" +.participants + %cite.cgray #{@issue.participants.count} participants + - @issue.participants.each do |participant| + = link_to_member(@project, participant, name: false, size: 24) + .voting_notes#notes= render "projects/notes/notes_with_form" diff --git a/db/fixtures/development/09_issues.rb b/db/fixtures/development/09_issues.rb index 32c1139521f..627579721d0 100644 --- a/db/fixtures/development/09_issues.rb +++ b/db/fixtures/development/09_issues.rb @@ -11,6 +11,7 @@ Gitlab::Seeder.quiet do next unless user user_id = user.id + Thread.current[:current_user] = user Issue.seed(:id, [{ id: i, diff --git a/db/fixtures/development/10_merge_requests.rb b/db/fixtures/development/10_merge_requests.rb index 0a9f986818f..0a8d67d4461 100644 --- a/db/fixtures/development/10_merge_requests.rb +++ b/db/fixtures/development/10_merge_requests.rb @@ -17,6 +17,8 @@ Gitlab::Seeder.quiet do next if branches.uniq.size < 2 user_id = user.id + Thread.current[:current_user] = user + MergeRequest.seed(:id, [{ id: i, source_branch: branches.first, diff --git a/doc/update/5.0-to-5.1.md b/doc/update/5.0-to-5.1.md index 2042b27f5dd..45fc3436ebe 100644 --- a/doc/update/5.0-to-5.1.md +++ b/doc/update/5.0-to-5.1.md @@ -41,6 +41,7 @@ sudo -u git -H cp config/puma.rb.example config/puma.rb sudo -u git -H bundle install --without development test postgres --deployment sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production sudo -u git -H bundle exec rake migrate_merge_requests RAILS_ENV=production +sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production ``` ### 5. Update init.d script with a new one diff --git a/doc/update/5.2-to-5.3.md b/doc/update/5.2-to-5.3.md index ff95e1c05c4..4d930d84c7d 100644 --- a/doc/update/5.2-to-5.3.md +++ b/doc/update/5.2-to-5.3.md @@ -38,8 +38,8 @@ sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production ### 4. Update config files -* Make `/home/git/gitlab/config/gitlab.yml` same as https://github.com/gitlabhq/gitlabhq/blob/5-2-stable/config/gitlab.yml.example but with your settings. -* Make `/home/git/gitlab/config/puma.rb` same as https://github.com/gitlabhq/gitlabhq/blob/5-2-stable/config/puma.rb.example but with your settings. +* Make `/home/git/gitlab/config/gitlab.yml` same as https://github.com/gitlabhq/gitlabhq/blob/5-3-stable/config/gitlab.yml.example but with your settings. +* Make `/home/git/gitlab/config/puma.rb` same as https://github.com/gitlabhq/gitlabhq/blob/5-3-stable/config/puma.rb.example but with your settings. ### 5. Update Init script diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb index 21e4202f4ee..76501482303 100644 --- a/spec/services/notification_service_spec.rb +++ b/spec/services/notification_service_spec.rb @@ -19,7 +19,7 @@ describe NotificationService do describe 'Notes' do context 'issue note' do let(:issue) { create(:issue, assignee: create(:user)) } - let(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id) } + let(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: '@mention referenced') } before do build_team(note.project) @@ -30,6 +30,7 @@ describe NotificationService do should_email(@u_watcher.id) should_email(note.noteable.author_id) should_email(note.noteable.assignee_id) + should_email(@u_mentioned.id) should_not_email(note.author_id) should_not_email(@u_participating.id) should_not_email(@u_disabled.id) @@ -235,9 +236,11 @@ describe NotificationService do @u_watcher = create(:user, notification_level: Notification::N_WATCH) @u_participating = create(:user, notification_level: Notification::N_PARTICIPATING) @u_disabled = create(:user, notification_level: Notification::N_DISABLED) + @u_mentioned = create(:user, username: 'mention', notification_level: Notification::N_WATCH) project.team << [@u_watcher, :master] project.team << [@u_participating, :master] project.team << [@u_disabled, :master] + project.team << [@u_mentioned, :master] end end |