diff --git a/app/coffeescripts/messages.coffee b/app/coffeescripts/messages.coffee
index 9fdbd7cd5cf..a06bb5d8f17 100644
--- a/app/coffeescripts/messages.coffee
+++ b/app/coffeescripts/messages.coffee
@@ -614,12 +614,8 @@ I18n.scoped 'conversations', (I18n) ->
for user in data.participants when !MessageInbox.user_cache[user.id]?.avatar_url
MessageInbox.user_cache[user.id] = user
user.html_name = html_name_for_user(user)
- $form.find('#user_note_info').showIf(
- $c.hasClass('private') and
- (user_id = $c.find('.participant').first().data('id')) and
- (user = MessageInbox.user_cache[user_id]) and
- can_add_notes_for(user)
- )
+ if data['private'] and user = (user for user in data.participants when user.id isnt MessageInbox.user_id)[0] and can_add_notes_for(user)
+ $form.find('#user_note_info').show()
inbox_resize()
$messages.show()
i = j = 0
@@ -1499,7 +1495,8 @@ I18n.scoped 'conversations', (I18n) ->
unless data.id and "#{data.id}".match(/^(course|group)_/)
data = $.extend({}, data)
delete data.avatar_url # since it's the wrong size and possibly a blank image
- MessageInbox.user_cache[data.id] ?= data
+ current_data = MessageInbox.user_cache[data.id] ? {}
+ MessageInbox.user_cache[data.id] = $.extend(current_data, data)
selector:
messages: {no_results: I18n.t('no_results', 'No results found')}
populator: ($node, data, options={}) ->
@@ -1514,7 +1511,7 @@ I18n.scoped 'conversations', (I18n) ->
$b.text(data.name)
$span = $('')
if data.common_courses?
- $span.text(MessageInbox.context_list(data))
+ $span.text(MessageInbox.context_list(courses: data.common_courses, groups: data.common_groups))
else if data.type and data.user_count?
$span.text(I18n.t('people_count', 'person', {count: data.user_count}))
$node.append($b, $context_name, $span)
diff --git a/public/javascripts/compiled/messages.js b/public/javascripts/compiled/messages.js
index c918ab6a5df..e4fd38b9eec 100644
--- a/public/javascripts/compiled/messages.js
+++ b/public/javascripts/compiled/messages.js
@@ -836,7 +836,7 @@
$form.loadingImage();
$c = $selected_conversation;
completion = function(data) {
- var i, j, message, submission, user, user_id, _i, _len, _ref, _ref2;
+ var i, j, message, submission, user, _i, _len, _ref, _ref2;
if (!is_selected($c)) {
return;
}
@@ -848,7 +848,20 @@
user.html_name = html_name_for_user(user);
}
}
- $form.find('#user_note_info').showIf($c.hasClass('private') && (user_id = $c.find('.participant').first().data('id')) && (user = MessageInbox.user_cache[user_id]) && can_add_notes_for(user));
+ if (data['private'] && (user = ((function() {
+ var _j, _len2, _ref3, _results;
+ _ref3 = data.participants;
+ _results = [];
+ for (_j = 0, _len2 = _ref3.length; _j < _len2; _j++) {
+ user = _ref3[_j];
+ if (user.id !== MessageInbox.user_id) {
+ _results.push(user);
+ }
+ }
+ return _results;
+ })())[0] && can_add_notes_for(user))) {
+ $form.find('#user_note_info').show();
+ }
inbox_resize();
$messages.show();
i = j = 0;
@@ -1994,7 +2007,7 @@
$('.recipients').tokenInput({
placeholder: I18n.t('recipient_field_placeholder', "Enter a name, course, or group"),
added: function(data, $token, new_token) {
- var $details, _base, _name, _ref3;
+ var $details, current_data, _ref3;
if (new_token && data.type) {
$token.addClass(data.type);
if (data.user_count != null) {
@@ -2009,7 +2022,8 @@
if (!(data.id && ("" + data.id).match(/^(course|group)_/))) {
data = $.extend({}, data);
delete data.avatar_url;
- return (_ref3 = (_base = MessageInbox.user_cache)[_name = data.id]) != null ? _ref3 : _base[_name] = data;
+ current_data = (_ref3 = MessageInbox.user_cache[data.id]) != null ? _ref3 : {};
+ return MessageInbox.user_cache[data.id] = $.extend(current_data, data);
}
},
selector: {
@@ -2035,7 +2049,10 @@
$b.text(data.name);
$span = $('');
if (data.common_courses != null) {
- $span.text(MessageInbox.context_list(data));
+ $span.text(MessageInbox.context_list({
+ courses: data.common_courses,
+ groups: data.common_groups
+ }));
} else if (data.type && (data.user_count != null)) {
$span.text(I18n.t('people_count', 'person', {
count: data.user_count
diff --git a/spec/selenium/conversations_spec.rb b/spec/selenium/conversations_spec.rb
index 1cac39609f4..ddfa75cd1c2 100644
--- a/spec/selenium/conversations_spec.rb
+++ b/spec/selenium/conversations_spec.rb
@@ -17,8 +17,9 @@ shared_examples_for "conversations selenium tests" do
def submit_message_form(opts={})
opts[:message] ||= "Test Message"
opts[:attachments] ||= []
+ opts[:add_recipient] = true unless opts.has_key?(:add_recipient)
- if browser = find_with_jquery("#create_message_form .browser:visible")
+ if opts[:add_recipient] && browser = find_with_jquery("#create_message_form .browser:visible")
browser.click
keep_trying_until{
if elem = find_with_jquery('.selectable:visible')
@@ -171,6 +172,69 @@ shared_examples_for "conversations selenium tests" do
find_with_jquery("#{message} .message_attachments li:last a .title").text.should == file2[0]
end
end
+
+ context "user notes" do
+ before do
+ @the_teacher = User.create(:name => "teacher bob")
+ @course.enroll_teacher(@the_teacher)
+ @the_student = User.create(:name => "student bob")
+ @course.enroll_student(@the_student)
+ end
+
+ def add_recipient(search)
+ input = find_with_jquery("#create_message_form input:visible")
+ input.send_keys(search)
+ keep_trying_until{ driver.execute_script("return $('#recipients').data('token_input').selector.last_search") == search }
+ input.send_keys(:return)
+ end
+
+ it "should not allow user notes if not enabled" do
+ @course.account.update_attribute :enable_user_notes, false
+ new_conversation
+ add_recipient("student bob")
+ driver.find_element(:id, "add_to_faculty_journal").should_not be_displayed
+ end
+
+ it "should not allow user notes to teachers" do
+ @course.account.update_attribute :enable_user_notes, true
+ new_conversation
+ add_recipient("teacher bob")
+ driver.find_element(:id, "add_to_faculty_journal").should_not be_displayed
+ end
+
+ it "should not allow user notes on group conversations" do
+ @course.account.update_attribute :enable_user_notes, true
+ new_conversation
+ add_recipient("student bob")
+ add_recipient("teacher bob")
+ driver.find_element(:id, "add_to_faculty_journal").should_not be_displayed
+ find_with_jquery("#create_message_form input:visible").send_keys :backspace
+ driver.find_element(:id, "add_to_faculty_journal").should be_displayed
+ end
+
+ it "should allow user notes on new private conversations with students" do
+ @course.account.update_attribute :enable_user_notes, true
+ new_conversation
+ add_recipient("student bob")
+ checkbox = driver.find_element(:id, "add_to_faculty_journal")
+ checkbox.should be_displayed
+ checkbox.click
+ submit_message_form(:add_recipient => false)
+ @the_student.user_notes.size.should eql(1)
+ end
+
+ it "should allow user notes on existing private conversations with students" do
+ @course.account.update_attribute :enable_user_notes, true
+ new_conversation
+ add_recipient("student bob")
+ submit_message_form(:add_recipient => false)
+ checkbox = driver.find_element(:id, "add_to_faculty_journal")
+ checkbox.should be_displayed
+ checkbox.click
+ submit_message_form
+ @the_student.user_notes.size.should eql(1)
+ end
+ end
end
describe "conversations Windows-Firefox-Tests" do