diff --git a/common/static/coffee/src/discussion/content.coffee b/common/static/coffee/src/discussion/content.coffee
index 6361a4b76e..00c34df686 100644
--- a/common/static/coffee/src/discussion/content.coffee
+++ b/common/static/coffee/src/discussion/content.coffee
@@ -88,32 +88,20 @@ if Backbone?
pinned = @get("pinned")
@set("pinned",pinned)
@trigger "change", @
-
- flagAbuse: ->
- temp_array = @get("abuse_flaggers")
- temp_array.push(window.user.get('id'))
- @set("abuse_flaggers",temp_array)
- @trigger "change", @
- unflagAbuse: ->
- @get("abuse_flaggers").pop(window.user.get('id'))
- @trigger "change", @
-
class @Thread extends @Content
urlMappers:
- 'retrieve' : -> DiscussionUtil.urlFor('retrieve_single_thread', @discussion.id, @id)
- 'reply' : -> DiscussionUtil.urlFor('create_comment', @id)
- 'unvote' : -> DiscussionUtil.urlFor("undo_vote_for_#{@get('type')}", @id)
- 'upvote' : -> DiscussionUtil.urlFor("upvote_#{@get('type')}", @id)
- 'downvote' : -> DiscussionUtil.urlFor("downvote_#{@get('type')}", @id)
- 'close' : -> DiscussionUtil.urlFor('openclose_thread', @id)
- 'update' : -> DiscussionUtil.urlFor('update_thread', @id)
- 'delete' : -> DiscussionUtil.urlFor('delete_thread', @id)
- 'follow' : -> DiscussionUtil.urlFor('follow_thread', @id)
- 'unfollow' : -> DiscussionUtil.urlFor('unfollow_thread', @id)
- 'flagAbuse' : -> DiscussionUtil.urlFor("flagAbuse_#{@get('type')}", @id)
- 'unFlagAbuse' : -> DiscussionUtil.urlFor("unFlagAbuse_#{@get('type')}", @id)
+ 'retrieve' : -> DiscussionUtil.urlFor('retrieve_single_thread', @discussion.id, @id)
+ 'reply' : -> DiscussionUtil.urlFor('create_comment', @id)
+ 'unvote' : -> DiscussionUtil.urlFor("undo_vote_for_#{@get('type')}", @id)
+ 'upvote' : -> DiscussionUtil.urlFor("upvote_#{@get('type')}", @id)
+ 'downvote' : -> DiscussionUtil.urlFor("downvote_#{@get('type')}", @id)
+ 'close' : -> DiscussionUtil.urlFor('openclose_thread', @id)
+ 'update' : -> DiscussionUtil.urlFor('update_thread', @id)
+ 'delete' : -> DiscussionUtil.urlFor('delete_thread', @id)
+ 'follow' : -> DiscussionUtil.urlFor('follow_thread', @id)
+ 'unfollow' : -> DiscussionUtil.urlFor('unfollow_thread', @id)
'pinThread' : -> DiscussionUtil.urlFor("pin_thread", @id)
'unPinThread' : -> DiscussionUtil.urlFor("un_pin_thread", @id)
@@ -169,8 +157,6 @@ if Backbone?
'endorse': -> DiscussionUtil.urlFor('endorse_comment', @id)
'update': -> DiscussionUtil.urlFor('update_comment', @id)
'delete': -> DiscussionUtil.urlFor('delete_comment', @id)
- 'flagAbuse' : -> DiscussionUtil.urlFor("flagAbuse_#{@get('type')}", @id)
- 'unFlagAbuse' : -> DiscussionUtil.urlFor("unFlagAbuse_#{@get('type')}", @id)
getCommentsCount: ->
count = 0
diff --git a/common/static/coffee/src/discussion/discussion.coffee b/common/static/coffee/src/discussion/discussion.coffee
index 5a52cd4de0..83e25e1da7 100644
--- a/common/static/coffee/src/discussion/discussion.coffee
+++ b/common/static/coffee/src/discussion/discussion.coffee
@@ -37,9 +37,6 @@ if Backbone?
data['commentable_ids'] = options.commentable_ids
when 'all'
url = DiscussionUtil.urlFor 'threads'
- when 'flagged'
- data['flagged'] = true
- url = DiscussionUtil.urlFor 'search'
when 'followed'
url = DiscussionUtil.urlFor 'followed_threads', options.user_id
if options['group_id']
diff --git a/common/static/coffee/src/discussion/utils.coffee b/common/static/coffee/src/discussion/utils.coffee
index 5c2dea7e7c..41f52f1711 100644
--- a/common/static/coffee/src/discussion/utils.coffee
+++ b/common/static/coffee/src/discussion/utils.coffee
@@ -18,12 +18,8 @@ class @DiscussionUtil
@loadRoles: (roles)->
@roleIds = roles
- @loadFlagModerator: (what)->
- @isFlagModerator = what
-
@loadRolesFromContainer: ->
@loadRoles($("#discussion-container").data("roles"))
- @loadFlagModerator($("#discussion-container").data("flag-moderator"))
@isStaff: (user_id) ->
staff = _.union(@roleIds['Staff'], @roleIds['Moderator'], @roleIds['Administrator'])
@@ -52,10 +48,6 @@ class @DiscussionUtil
update_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/update"
create_comment : "/courses/#{$$course_id}/discussion/threads/#{param}/reply"
delete_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/delete"
- flagAbuse_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/flagAbuse"
- unFlagAbuse_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/unFlagAbuse"
- flagAbuse_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/flagAbuse"
- unFlagAbuse_comment : "/courses/#{$$course_id}/discussion/comments/#{param}/unFlagAbuse"
upvote_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/upvote"
downvote_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/downvote"
pin_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/pin"
@@ -80,7 +72,7 @@ class @DiscussionUtil
permanent_link_thread : "/courses/#{$$course_id}/discussion/forum/#{param}/threads/#{param1}"
permanent_link_comment : "/courses/#{$$course_id}/discussion/forum/#{param}/threads/#{param1}##{param2}"
user_profile : "/courses/#{$$course_id}/discussion/forum/users/#{param}"
- followed_threads : "/courses/#{$$course_id}/discussion/forum/users/#{param}/followed"
+ followed_threads : "/courses/#{$$course_id}/discussion/forum/users/#{param}/followed"
threads : "/courses/#{$$course_id}/discussion/forum"
}[name]
diff --git a/common/static/coffee/src/discussion/views/discussion_content_view.coffee b/common/static/coffee/src/discussion/views/discussion_content_view.coffee
index 9b2de1b198..9399d95398 100644
--- a/common/static/coffee/src/discussion/views/discussion_content_view.coffee
+++ b/common/static/coffee/src/discussion/views/discussion_content_view.coffee
@@ -1,11 +1,6 @@
if Backbone?
class @DiscussionContentView extends Backbone.View
-
- events:
- "click .discussion-flag-abuse": "toggleFlagAbuse"
-
-
attrRenderer:
endorsed: (endorsed) ->
if endorsed
@@ -99,48 +94,7 @@ if Backbone?
setWmdContent: (cls_identifier, text) =>
DiscussionUtil.setWmdContent @$el, $.proxy(@$, @), cls_identifier, text
-
initialize: ->
@initLocal()
@model.bind('change', @renderPartialAttrs, @)
-
-
-
- toggleFlagAbuse: (event) ->
- event.preventDefault()
- if window.user.id in @model.get("abuse_flaggers") or (DiscussionUtil.isFlagModerator and @model.get("abuse_flaggers").length > 0)
- @unFlagAbuse()
- else
- @flagAbuse()
-
- flagAbuse: ->
- url = @model.urlFor("flagAbuse")
- DiscussionUtil.safeAjax
- $elem: @$(".discussion-flag-abuse")
- url: url
- type: "POST"
- success: (response, textStatus) =>
- if textStatus == 'success'
- ###
- note, we have to clone the array in order to trigger a change event
- ###
- temp_array = _.clone(@model.get('abuse_flaggers'));
- temp_array.push(window.user.id)
- @model.set('abuse_flaggers', temp_array)
-
- unFlagAbuse: ->
- url = @model.urlFor("unFlagAbuse")
- DiscussionUtil.safeAjax
- $elem: @$(".discussion-flag-abuse")
- url: url
- type: "POST"
- success: (response, textStatus) =>
- if textStatus == 'success'
- temp_array = _.clone(@model.get('abuse_flaggers'));
- temp_array.pop(window.user.id)
- # if you're an admin, clear this
- if DiscussionUtil.isFlagModerator
- temp_array = []
-
- @model.set('abuse_flaggers', temp_array)
diff --git a/common/static/coffee/src/discussion/views/discussion_thread_list_view.coffee b/common/static/coffee/src/discussion/views/discussion_thread_list_view.coffee
index 9aa4ba869d..8364963218 100644
--- a/common/static/coffee/src/discussion/views/discussion_thread_list_view.coffee
+++ b/common/static/coffee/src/discussion/views/discussion_thread_list_view.coffee
@@ -276,11 +276,6 @@ if Backbone?
@$(".post-search-field").val("")
@$('.cohort').show()
@retrieveAllThreads()
- else if discussionId == "#flagged"
- @discussionIds = ""
- @$(".post-search-field").val("")
- @$('.cohort').hide()
- @retrieveFlaggedThreads()
else if discussionId == "#following"
@retrieveFollowed(event)
@$('.cohort').hide()
@@ -326,12 +321,6 @@ if Backbone?
@collection.reset()
@loadMorePages(event)
- retrieveFlaggedThreads: (event)->
- @collection.current_page = 0
- @collection.reset()
- @mode = 'flagged'
- @loadMorePages(event)
-
sortThreads: (event) ->
@$(".sort-bar a").removeClass("active")
$(event.target).addClass("active")
diff --git a/common/static/coffee/src/discussion/views/discussion_thread_show_view.coffee b/common/static/coffee/src/discussion/views/discussion_thread_show_view.coffee
index 49936c46e8..56525af347 100644
--- a/common/static/coffee/src/discussion/views/discussion_thread_show_view.coffee
+++ b/common/static/coffee/src/discussion/views/discussion_thread_show_view.coffee
@@ -3,7 +3,6 @@ if Backbone?
events:
"click .discussion-vote": "toggleVote"
- "click .discussion-flag-abuse": "toggleFlagAbuse"
"click .admin-pin": "togglePin"
"click .action-follow": "toggleFollowing"
"click .action-edit": "edit"
@@ -26,7 +25,6 @@ if Backbone?
@delegateEvents()
@renderDogear()
@renderVoted()
- @renderFlagged()
@renderPinned()
@renderAttrs()
@$("span.timeago").timeago()
@@ -44,16 +42,6 @@ if Backbone?
@$("[data-role=discussion-vote]").addClass("is-cast")
else
@$("[data-role=discussion-vote]").removeClass("is-cast")
-
- renderFlagged: =>
- if window.user.id in @model.get("abuse_flaggers") or (DiscussionUtil.isFlagModerator and @model.get("abuse_flaggers").length > 0)
- @$("[data-role=thread-flag]").addClass("flagged")
- @$("[data-role=thread-flag]").removeClass("notflagged")
- @$(".discussion-flag-abuse .flag-label").html("Misuse Reported")
- else
- @$("[data-role=thread-flag]").removeClass("flagged")
- @$("[data-role=thread-flag]").addClass("notflagged")
- @$(".discussion-flag-abuse .flag-label").html("Report Misuse")
renderPinned: =>
if @model.get("pinned")
@@ -68,7 +56,6 @@ if Backbone?
updateModelDetails: =>
@renderVoted()
- @renderFlagged()
@renderPinned()
@$("[data-role=discussion-vote] .votes-count-number").html(@model.get("votes")["up_count"])
@@ -109,7 +96,6 @@ if Backbone?
if textStatus == 'success'
@model.set(response, {silent: true})
-
unvote: ->
window.user.unvote(@model)
url = @model.urlFor("unvote")
@@ -121,7 +107,6 @@ if Backbone?
if textStatus == 'success'
@model.set(response, {silent: true})
-
edit: (event) ->
@trigger "thread:edit", event
@@ -197,4 +182,4 @@ if Backbone?
params = $.extend(params, user:{username: @model.username, user_url: @model.user_url})
Mustache.render(@template, params)
-
+
\ No newline at end of file
diff --git a/common/static/coffee/src/discussion/views/discussion_thread_view.coffee b/common/static/coffee/src/discussion/views/discussion_thread_view.coffee
index c3a793b478..cb549f1088 100644
--- a/common/static/coffee/src/discussion/views/discussion_thread_view.coffee
+++ b/common/static/coffee/src/discussion/views/discussion_thread_view.coffee
@@ -91,7 +91,7 @@ if Backbone?
body = @getWmdContent("reply-body")
return if not body.trim().length
@setWmdContent("reply-body", "")
- comment = new Comment(body: body, created_at: (new Date()).toISOString(), username: window.user.get("username"), votes: { up_count: 0 }, abuse_flaggers:[], endorsed: false, user_id: window.user.get("id"))
+ comment = new Comment(body: body, created_at: (new Date()).toISOString(), username: window.user.get("username"), votes: { up_count: 0 }, endorsed: false, user_id: window.user.get("id"))
comment.set('thread', @model.get('thread'))
@renderResponse(comment)
@model.addComment()
diff --git a/common/static/coffee/src/discussion/views/response_comment_show_view.coffee b/common/static/coffee/src/discussion/views/response_comment_show_view.coffee
index 18d405fdb4..84e7357e1f 100644
--- a/common/static/coffee/src/discussion/views/response_comment_show_view.coffee
+++ b/common/static/coffee/src/discussion/views/response_comment_show_view.coffee
@@ -1,14 +1,7 @@
if Backbone?
class @ResponseCommentShowView extends DiscussionContentView
-
- events:
- "click .discussion-flag-abuse": "toggleFlagAbuse"
tagName: "li"
-
- initialize: ->
- super()
- @model.on "change", @updateModelDetails
render: ->
@template = _.template($("#response-comment-show-template").html())
@@ -18,7 +11,6 @@ if Backbone?
@initLocal()
@delegateEvents()
@renderAttrs()
- @renderFlagged()
@markAsStaff()
@$el.find(".timeago").timeago()
@convertMath()
@@ -42,17 +34,3 @@ if Backbone?
@$el.find("a.profile-link").after('staff')
else if DiscussionUtil.isTA(@model.get("user_id"))
@$el.find("a.profile-link").after('')
-
-
- renderFlagged: =>
- if window.user.id in @model.get("abuse_flaggers") or (DiscussionUtil.isFlagModerator and @model.get("abuse_flaggers").length > 0)
- @$("[data-role=thread-flag]").addClass("flagged")
- @$("[data-role=thread-flag]").removeClass("notflagged")
- else
- @$("[data-role=thread-flag]").removeClass("flagged")
- @$("[data-role=thread-flag]").addClass("notflagged")
-
- updateModelDetails: =>
- @renderFlagged()
-
-
diff --git a/common/static/coffee/src/discussion/views/thread_response_show_view.coffee b/common/static/coffee/src/discussion/views/thread_response_show_view.coffee
index 0e42b79b9a..1f305ddf34 100644
--- a/common/static/coffee/src/discussion/views/thread_response_show_view.coffee
+++ b/common/static/coffee/src/discussion/views/thread_response_show_view.coffee
@@ -5,7 +5,6 @@ if Backbone?
"click .action-endorse": "toggleEndorse"
"click .action-delete": "delete"
"click .action-edit": "edit"
- "click .discussion-flag-abuse": "toggleFlagAbuse"
$: (selector) ->
@$el.find(selector)
@@ -24,7 +23,6 @@ if Backbone?
if window.user.voted(@model)
@$(".vote-btn").addClass("is-cast")
@renderAttrs()
- @renderFlagged()
@$el.find(".posted-details").timeago()
@convertMath()
@markAsStaff()
@@ -72,7 +70,6 @@ if Backbone?
success: (response, textStatus) =>
if textStatus == 'success'
@model.set(response)
-
edit: (event) ->
@trigger "response:edit", event
@@ -95,17 +92,3 @@ if Backbone?
url: url
data: data
type: "POST"
-
-
- renderFlagged: =>
- if window.user.id in @model.get("abuse_flaggers") or (DiscussionUtil.isFlagModerator and @model.get("abuse_flaggers").length > 0)
- @$("[data-role=thread-flag]").addClass("flagged")
- @$("[data-role=thread-flag]").removeClass("notflagged")
- @$(".discussion-flag-abuse .flag-label").html("Misuse Reported")
- else
- @$("[data-role=thread-flag]").removeClass("flagged")
- @$("[data-role=thread-flag]").addClass("notflagged")
- @$(".discussion-flag-abuse .flag-label").html("Report Misuse")
-
- updateModelDetails: =>
- @renderFlagged()
diff --git a/common/static/coffee/src/discussion/views/thread_response_view.coffee b/common/static/coffee/src/discussion/views/thread_response_view.coffee
index 46a96a55ec..9b6800cdde 100644
--- a/common/static/coffee/src/discussion/views/thread_response_view.coffee
+++ b/common/static/coffee/src/discussion/views/thread_response_view.coffee
@@ -77,7 +77,7 @@ if Backbone?
body = @getWmdContent("comment-body")
return if not body.trim().length
@setWmdContent("comment-body", "")
- comment = new Comment(body: body, created_at: (new Date()).toISOString(), username: window.user.get("username"), abuse_flaggers:[], user_id: window.user.get("id"), id:"unsaved")
+ comment = new Comment(body: body, created_at: (new Date()).toISOString(), username: window.user.get("username"), user_id: window.user.get("id"), id:"unsaved")
view = @renderComment(comment)
@hideEditorChrome()
@trigger "comment:add", comment
diff --git a/distribute-0.6.32.tar.gz b/distribute-0.6.32.tar.gz
new file mode 100644
index 0000000000..2438db60fa
Binary files /dev/null and b/distribute-0.6.32.tar.gz differ
diff --git a/distribute-0.6.34.tar.gz b/distribute-0.6.34.tar.gz
new file mode 100644
index 0000000000..4e91b3af62
Binary files /dev/null and b/distribute-0.6.34.tar.gz differ
diff --git a/lms/djangoapps/django_comment_client/base/urls.py b/lms/djangoapps/django_comment_client/base/urls.py
index 18efbec502..92826a18ae 100644
--- a/lms/djangoapps/django_comment_client/base/urls.py
+++ b/lms/djangoapps/django_comment_client/base/urls.py
@@ -11,8 +11,6 @@ urlpatterns = patterns('django_comment_client.base.views',
url(r'threads/(?P[\w\-]+)/delete', 'delete_thread', name='delete_thread'),
url(r'threads/(?P[\w\-]+)/upvote$', 'vote_for_thread', {'value': 'up'}, name='upvote_thread'),
url(r'threads/(?P[\w\-]+)/downvote$', 'vote_for_thread', {'value': 'down'}, name='downvote_thread'),
- url(r'threads/(?P[\w\-]+)/flagAbuse$', 'flag_abuse_for_thread', name='flag_abuse_for_thread'),
- url(r'threads/(?P[\w\-]+)/unFlagAbuse$', 'un_flag_abuse_for_thread', name='un_flag_abuse_for_thread'),
url(r'threads/(?P[\w\-]+)/unvote$', 'undo_vote_for_thread', name='undo_vote_for_thread'),
url(r'threads/(?P[\w\-]+)/pin$', 'pin_thread', name='pin_thread'),
url(r'threads/(?P[\w\-]+)/unpin$', 'un_pin_thread', name='un_pin_thread'),
@@ -27,8 +25,7 @@ urlpatterns = patterns('django_comment_client.base.views',
url(r'comments/(?P[\w\-]+)/upvote$', 'vote_for_comment', {'value': 'up'}, name='upvote_comment'),
url(r'comments/(?P[\w\-]+)/downvote$', 'vote_for_comment', {'value': 'down'}, name='downvote_comment'),
url(r'comments/(?P[\w\-]+)/unvote$', 'undo_vote_for_comment', name='undo_vote_for_comment'),
- url(r'comments/(?P[\w\-]+)/flagAbuse$', 'flag_abuse_for_comment', name='flag_abuse_for_comment'),
- url(r'comments/(?P[\w\-]+)/unFlagAbuse$', 'un_flag_abuse_for_comment', name='un_flag_abuse_for_comment'),
+
url(r'^(?P[\w\-.]+)/threads/create$', 'create_thread', name='create_thread'),
# TODO should we search within the board?
url(r'^(?P[\w\-.]+)/threads/search_similar$', 'search_similar_threads', name='search_similar_threads'),
diff --git a/lms/djangoapps/django_comment_client/base/views.py b/lms/djangoapps/django_comment_client/base/views.py
index d2fa25e979..69609dcf01 100644
--- a/lms/djangoapps/django_comment_client/base/views.py
+++ b/lms/djangoapps/django_comment_client/base/views.py
@@ -20,7 +20,7 @@ from django.utils.translation import ugettext as _
from django.contrib.auth.models import User
from mitxmako.shortcuts import render_to_response, render_to_string
-from courseware.courses import get_course_with_access, get_course_by_id
+from courseware.courses import get_course_with_access
from course_groups.cohorts import get_cohort_id, is_commentable_cohorted
from django_comment_client.utils import JsonResponse, JsonError, extract, get_courseware_context
@@ -119,7 +119,7 @@ def create_thread(request, course_id, commentable_id):
#patch for backward compatibility to comments service
if not 'pinned' in thread.attributes:
thread['pinned'] = False
-
+
if post.get('auto_subscribe', 'false').lower() == 'true':
user = cc.User.from_django_user(request.user)
user.follow(thread)
@@ -284,50 +284,6 @@ def vote_for_thread(request, course_id, thread_id, value):
return JsonResponse(utils.safe_content(thread.to_dict()))
-@require_POST
-@login_required
-@permitted
-def flag_abuse_for_thread(request, course_id, thread_id):
- user = cc.User.from_django_user(request.user)
- thread = cc.Thread.find(thread_id)
- thread.flagAbuse(user, thread)
- return JsonResponse(utils.safe_content(thread.to_dict()))
-
-
-@require_POST
-@login_required
-@permitted
-def un_flag_abuse_for_thread(request, course_id, thread_id):
- user = cc.User.from_django_user(request.user)
- course = get_course_by_id(course_id)
- thread = cc.Thread.find(thread_id)
- removeAll = cached_has_permission(request.user, 'openclose_thread', course_id) or has_access(request.user, course, 'staff')
- thread.unFlagAbuse(user, thread, removeAll)
- return JsonResponse(utils.safe_content(thread.to_dict()))
-
-
-@require_POST
-@login_required
-@permitted
-def flag_abuse_for_comment(request, course_id, comment_id):
- user = cc.User.from_django_user(request.user)
- comment = cc.Comment.find(comment_id)
- comment.flagAbuse(user, comment)
- return JsonResponse(utils.safe_content(comment.to_dict()))
-
-
-@require_POST
-@login_required
-@permitted
-def un_flag_abuse_for_comment(request, course_id, comment_id):
- user = cc.User.from_django_user(request.user)
- course = get_course_by_id(course_id)
- removeAll = cached_has_permission(request.user, 'openclose_thread', course_id) or has_access(request.user, course, 'staff')
- comment = cc.Comment.find(comment_id)
- comment.unFlagAbuse(user, comment, removeAll)
- return JsonResponse(utils.safe_content(comment.to_dict()))
-
-
@require_POST
@login_required
@permitted
@@ -337,21 +293,19 @@ def undo_vote_for_thread(request, course_id, thread_id):
user.unvote(thread)
return JsonResponse(utils.safe_content(thread.to_dict()))
-
@require_POST
@login_required
@permitted
def pin_thread(request, course_id, thread_id):
user = cc.User.from_django_user(request.user)
thread = cc.Thread.find(thread_id)
- thread.pin(user, thread_id)
+ thread.pin(user,thread_id)
return JsonResponse(utils.safe_content(thread.to_dict()))
-
def un_pin_thread(request, course_id, thread_id):
user = cc.User.from_django_user(request.user)
thread = cc.Thread.find(thread_id)
- thread.un_pin(user, thread_id)
+ thread.un_pin(user,thread_id)
return JsonResponse(utils.safe_content(thread.to_dict()))
@@ -498,11 +452,16 @@ def upload(request, course_id): # ajax upload file to a question or answer
if not file_extension in cc_settings.ALLOWED_UPLOAD_FILE_TYPES:
file_types = "', '".join(cc_settings.ALLOWED_UPLOAD_FILE_TYPES)
msg = _("allowed file types are '%(file_types)s'") % \
- {'file_types': file_types}
+ {'file_types': file_types}
raise exceptions.PermissionDenied(msg)
# generate new file name
- new_file_name = str(time.time()).replace('.', str(random.randint(0, 100000))) + file_extension
+ new_file_name = str(
+ time.time()
+ ).replace(
+ '.',
+ str(random.randint(0, 100000))
+ ) + file_extension
file_storage = get_storage_class()()
# use default storage to store file
@@ -513,7 +472,7 @@ def upload(request, course_id): # ajax upload file to a question or answer
if size > cc_settings.MAX_UPLOAD_FILE_SIZE:
file_storage.delete(new_file_name)
msg = _("maximum upload file size is %(file_size)sK") % \
- {'file_size': cc_settings.MAX_UPLOAD_FILE_SIZE}
+ {'file_size': cc_settings.MAX_UPLOAD_FILE_SIZE}
raise exceptions.PermissionDenied(msg)
except exceptions.PermissionDenied, e:
diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py
index a94b9a07ad..6498ea8370 100644
--- a/lms/djangoapps/django_comment_client/forum/views.py
+++ b/lms/djangoapps/django_comment_client/forum/views.py
@@ -9,10 +9,9 @@ from django.contrib.auth.models import User
from mitxmako.shortcuts import render_to_response, render_to_string
from courseware.courses import get_course_with_access
-from course_groups.cohorts import (is_course_cohorted, get_cohort_id, is_commentable_cohorted,
+from course_groups.cohorts import (is_course_cohorted, get_cohort_id, is_commentable_cohorted,
get_cohorted_commentables, get_course_cohorts, get_cohort_by_id)
from courseware.access import has_access
-from django_comment_client.models import Role
from django_comment_client.permissions import cached_has_permission
from django_comment_client.utils import (merge_dict, extract, strip_none, get_courseware_context)
@@ -80,7 +79,7 @@ def get_threads(request, course_id, discussion_id=None, per_page=THREADS_PER_PAG
strip_none(extract(request.GET,
['page', 'sort_key',
'sort_order', 'text',
- 'tags', 'commentable_ids', 'flagged'])))
+ 'tags', 'commentable_ids'])))
threads, page, num_pages = cc.Thread.search(query_params)
@@ -93,7 +92,7 @@ def get_threads(request, course_id, discussion_id=None, per_page=THREADS_PER_PAG
else:
thread['group_name'] = ""
thread['group_string'] = "This post visible to everyone."
-
+
#patch for backward compatibility to comments service
if not 'pinned' in thread:
thread['pinned'] = False
@@ -109,6 +108,7 @@ def inline_discussion(request, course_id, discussion_id):
"""
Renders JSON for DiscussionModules
"""
+
course = get_course_with_access(request.user, course_id, 'load')
try:
@@ -219,7 +219,6 @@ def forum_form_discussion(request, course_id):
'threads': saxutils.escape(json.dumps(threads), escapedict),
'thread_pages': query_params['num_pages'],
'user_info': saxutils.escape(json.dumps(user_info), escapedict),
- 'flag_moderator': cached_has_permission(request.user, 'openclose_thread', course.id) or has_access(request.user, course, 'staff'),
'annotated_content_info': saxutils.escape(json.dumps(annotated_content_info), escapedict),
'course_id': course.id,
'category_map': category_map,
@@ -242,12 +241,19 @@ def single_thread(request, course_id, discussion_id, thread_id):
try:
thread = cc.Thread.find(thread_id).retrieve(recursive=True, user_id=request.user.id)
+
+ #patch for backward compatibility with comments service
+ if not 'pinned' in thread.attributes:
+ thread['pinned'] = False
+
except (cc.utils.CommentClientError, cc.utils.CommentClientUnknownError) as err:
log.error("Error loading single thread.")
raise Http404
if request.is_ajax():
+
courseware_context = get_courseware_context(thread, course)
+
annotated_content_info = utils.get_annotated_content_infos(course_id, thread, request.user, user_info=user_info)
context = {'thread': thread.to_dict(), 'course_id': course_id}
# TODO: Remove completely or switch back to server side rendering
@@ -319,7 +325,6 @@ def single_thread(request, course_id, discussion_id, thread_id):
'thread_pages': query_params['num_pages'],
'is_course_cohorted': is_course_cohorted(course_id),
'is_moderator': cached_has_permission(request.user, "see_all_cohorts", course_id),
- 'flag_moderator': cached_has_permission(request.user, 'openclose_thread', course.id) or has_access(request.user, course, 'staff'),
'cohorts': cohorts,
'user_cohort': get_cohort_id(request.user, course_id),
'cohorted_commentables': cohorted_commentables
@@ -407,7 +412,7 @@ def followed_threads(request, course_id, user_id):
'user_info': saxutils.escape(json.dumps(user_info), escapedict),
'annotated_content_info': saxutils.escape(json.dumps(annotated_content_info), escapedict),
# 'content': content,
- }
+ }
return render_to_response('discussion/user_profile.html', context)
except (cc.utils.CommentClientError, cc.utils.CommentClientUnknownError):
diff --git a/lms/djangoapps/django_comment_client/management/commands/reload_forum_users.py b/lms/djangoapps/django_comment_client/management/commands/reload_forum_users.py
index e84771d615..5e7e268270 100644
--- a/lms/djangoapps/django_comment_client/management/commands/reload_forum_users.py
+++ b/lms/djangoapps/django_comment_client/management/commands/reload_forum_users.py
@@ -6,11 +6,10 @@ from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User
import comment_client as cc
-
class Command(BaseCommand):
help = 'Reload forum (comment client) users from existing users'
- def adduser(self, user):
+ def adduser(self,user):
print user
try:
cc_user = cc.User.from_django_user(user)
@@ -23,7 +22,8 @@ class Command(BaseCommand):
uset = [User.objects.get(username=x) for x in args]
else:
uset = User.objects.all()
-
+
for user in uset:
self.adduser(user)
-
+
+
\ No newline at end of file
diff --git a/lms/djangoapps/django_comment_client/permissions.py b/lms/djangoapps/django_comment_client/permissions.py
index cc3ead53e7..7d21cc9783 100644
--- a/lms/djangoapps/django_comment_client/permissions.py
+++ b/lms/djangoapps/django_comment_client/permissions.py
@@ -73,6 +73,7 @@ def check_conditions_permissions(user, permissions, course_id, **kwargs):
return True in results
elif operator == "and":
return not False in results
+
return test(user, permissions, operator="or")
@@ -88,10 +89,6 @@ VIEW_PERMISSIONS = {
'vote_for_comment' : [['vote', 'is_open']],
'undo_vote_for_comment': [['unvote', 'is_open']],
'vote_for_thread' : [['vote', 'is_open']],
- 'flag_abuse_for_thread': [['vote', 'is_open']],
- 'un_flag_abuse_for_thread': [['vote', 'is_open']],
- 'flag_abuse_for_comment': [['vote', 'is_open']],
- 'un_flag_abuse_for_comment': [['vote', 'is_open']],
'undo_vote_for_thread': [['unvote', 'is_open']],
'pin_thread': ['create_comment'],
'un_pin_thread': ['create_comment'],
diff --git a/lms/djangoapps/django_comment_client/tests/test_mustache_helpers.py b/lms/djangoapps/django_comment_client/tests/test_mustache_helpers.py
index d5a403ecb8..7db3ba6e86 100644
--- a/lms/djangoapps/django_comment_client/tests/test_mustache_helpers.py
+++ b/lms/djangoapps/django_comment_client/tests/test_mustache_helpers.py
@@ -39,3 +39,4 @@ class CloseThreadTextTest(TestCase):
self.assertEqual(mustache_helpers.close_thread_text(self.contentOpen), 'Close thread')
#########################################################################################
+
diff --git a/lms/djangoapps/django_comment_client/utils.py b/lms/djangoapps/django_comment_client/utils.py
index c79cc4cb89..9bfb9a9d0d 100644
--- a/lms/djangoapps/django_comment_client/utils.py
+++ b/lms/djangoapps/django_comment_client/utils.py
@@ -1,4 +1,3 @@
-import time
from collections import defaultdict
import logging
import time
@@ -105,12 +104,12 @@ def filter_unstarted_categories(category_map):
result_map = {}
unfiltered_queue = [category_map]
- filtered_queue = [result_map]
+ filtered_queue = [result_map]
while len(unfiltered_queue) > 0:
unfiltered_map = unfiltered_queue.pop()
- filtered_map = filtered_queue.pop()
+ filtered_map = filtered_queue.pop()
filtered_map["children"] = []
filtered_map["entries"] = {}
@@ -175,7 +174,8 @@ def initialize_discussion_info(course):
category = " / ".join([x.strip() for x in category.split("/")])
last_category = category.split("/")[-1]
discussion_id_map[id] = {"location": module.location, "title": last_category + " / " + title}
- unexpanded_category_map[category].append({"title": title, "id": id, "sort_key": sort_key, "start_date": module.lms.start})
+ unexpanded_category_map[category].append({"title": title, "id": id,
+ "sort_key": sort_key, "start_date": module.lms.start})
category_map = {"entries": defaultdict(dict), "subcategories": defaultdict(dict)}
for category_path, entries in unexpanded_category_map.items():
@@ -202,9 +202,9 @@ def initialize_discussion_info(course):
level = path[-1]
if level not in node:
node[level] = {"subcategories": defaultdict(dict),
- "entries": defaultdict(dict),
- "sort_key": level,
- "start_date": category_start_date}
+ "entries": defaultdict(dict),
+ "sort_key": level,
+ "start_date": category_start_date}
else:
if node[level]["start_date"] > category_start_date:
node[level]["start_date"] = category_start_date
@@ -284,12 +284,12 @@ class QueryCountDebugMiddleware(object):
def get_ability(course_id, content, user):
return {
- 'editable': check_permissions_by_view(user, course_id, content, "update_thread" if content['type'] == 'thread' else "update_comment"),
- 'can_reply': check_permissions_by_view(user, course_id, content, "create_comment" if content['type'] == 'thread' else "create_sub_comment"),
- 'can_endorse': check_permissions_by_view(user, course_id, content, "endorse_comment") if content['type'] == 'comment' else False,
- 'can_delete': check_permissions_by_view(user, course_id, content, "delete_thread" if content['type'] == 'thread' else "delete_comment"),
- 'can_openclose': check_permissions_by_view(user, course_id, content, "openclose_thread") if content['type'] == 'thread' else False,
- 'can_vote': check_permissions_by_view(user, course_id, content, "vote_for_thread" if content['type'] == 'thread' else "vote_for_comment"),
+ 'editable': check_permissions_by_view(user, course_id, content, "update_thread" if content['type'] == 'thread' else "update_comment"),
+ 'can_reply': check_permissions_by_view(user, course_id, content, "create_comment" if content['type'] == 'thread' else "create_sub_comment"),
+ 'can_endorse': check_permissions_by_view(user, course_id, content, "endorse_comment") if content['type'] == 'comment' else False,
+ 'can_delete': check_permissions_by_view(user, course_id, content, "delete_thread" if content['type'] == 'thread' else "delete_comment"),
+ 'can_openclose': check_permissions_by_view(user, course_id, content, "openclose_thread") if content['type'] == 'thread' else False,
+ 'can_vote': check_permissions_by_view(user, course_id, content, "vote_for_thread" if content['type'] == 'thread' else "vote_for_comment"),
}
#TODO: RENAME
@@ -318,7 +318,6 @@ def get_annotated_content_infos(course_id, thread, user, user_info):
Get metadata for a thread and its children
"""
infos = {}
-
def annotate(content):
infos[str(content['id'])] = get_annotated_content_info(course_id, content, user, user_info)
for child in content.get('children', []):
@@ -383,8 +382,8 @@ def get_courseware_context(content, course):
location = id_map[id]["location"].url()
title = id_map[id]["title"]
- url = reverse('jump_to', kwargs={"course_id": course.location.course_id,
- "location": location})
+ url = reverse('jump_to', kwargs={"course_id":course.location.course_id,
+ "location": location})
content_info = {"courseware_url": url, "courseware_title": title}
return content_info
@@ -397,8 +396,7 @@ def safe_content(content):
'updated_at', 'depth', 'type', 'commentable_id', 'comments_count',
'at_position_list', 'children', 'highlighted_title', 'highlighted_body',
'courseware_title', 'courseware_url', 'tags', 'unread_comments_count',
- 'read', 'group_id', 'group_name', 'group_string', 'pinned', 'abuse_flaggers'
-
+ 'read', 'group_id', 'group_name', 'group_string', 'pinned'
]
if (content.get('anonymous') is False) and (content.get('anonymous_to_peers') is False):
diff --git a/lms/lib/comment_client/comment.py b/lms/lib/comment_client/comment.py
index 324de7923f..2f93aff6b3 100644
--- a/lms/lib/comment_client/comment.py
+++ b/lms/lib/comment_client/comment.py
@@ -11,12 +11,12 @@ class Comment(models.Model):
'id', 'body', 'anonymous', 'anonymous_to_peers', 'course_id',
'endorsed', 'parent_id', 'thread_id', 'username', 'votes', 'user_id',
'closed', 'created_at', 'updated_at', 'depth', 'at_position_list',
- 'type', 'commentable_id', 'abuse_flaggers'
+ 'type', 'commentable_id',
]
updatable_fields = [
'body', 'anonymous', 'anonymous_to_peers', 'course_id', 'closed',
- 'user_id', 'endorsed'
+ 'user_id', 'endorsed',
]
initializable_fields = updatable_fields
@@ -42,32 +42,6 @@ class Comment(models.Model):
else:
return super(Comment, cls).url(action, params)
- def flagAbuse(self, user, voteable):
- if voteable.type == 'thread':
- url = _url_for_flag_abuse_thread(voteable.id)
- elif voteable.type == 'comment':
- url = _url_for_flag_abuse_comment(voteable.id)
- else:
- raise CommentClientError("Can only flag/unflag threads or comments")
- params = {'user_id': user.id}
- request = perform_request('put', url, params)
- voteable.update_attributes(request)
-
- def unFlagAbuse(self, user, voteable, removeAll):
- if voteable.type == 'thread':
- url = _url_for_unflag_abuse_thread(voteable.id)
- elif voteable.type == 'comment':
- url = _url_for_unflag_abuse_comment(voteable.id)
- else:
- raise CommentClientError("Can flag/unflag for threads or comments")
- params = {'user_id': user.id}
-
- if removeAll:
- params['all'] = True
-
- request = perform_request('put', url, params)
- voteable.update_attributes(request)
-
def _url_for_thread_comments(thread_id):
return "{prefix}/threads/{thread_id}/comments".format(prefix=settings.PREFIX, thread_id=thread_id)
@@ -75,11 +49,3 @@ def _url_for_thread_comments(thread_id):
def _url_for_comment(comment_id):
return "{prefix}/comments/{comment_id}".format(prefix=settings.PREFIX, comment_id=comment_id)
-
-
-def _url_for_flag_abuse_comment(comment_id):
- return "{prefix}/comments/{comment_id}/abuse_flags".format(prefix=settings.PREFIX, comment_id=comment_id)
-
-
-def _url_for_unflag_abuse_comment(comment_id):
- return "{prefix}/comments/{comment_id}/abuse_unflags".format(prefix=settings.PREFIX, comment_id=comment_id)
diff --git a/lms/lib/comment_client/comment_client.py b/lms/lib/comment_client/comment_client.py
index 9b1a0baee2..862483a75b 100644
--- a/lms/lib/comment_client/comment_client.py
+++ b/lms/lib/comment_client/comment_client.py
@@ -29,6 +29,7 @@ def search_trending_tags(course_id, query_params={}, *args, **kwargs):
def tags_autocomplete(value, *args, **kwargs):
return perform_request('get', _url_for_threads_tags_autocomplete(), {'value': value}, *args, **kwargs)
+
def _url_for_search_similar_threads():
return "{prefix}/search/threads/more_like_this".format(prefix=settings.PREFIX)
diff --git a/lms/lib/comment_client/thread.py b/lms/lib/comment_client/thread.py
index 60a68dc3ae..8911d5a2c6 100644
--- a/lms/lib/comment_client/thread.py
+++ b/lms/lib/comment_client/thread.py
@@ -1,4 +1,5 @@
from .utils import *
+
import models
import settings
@@ -10,7 +11,7 @@ class Thread(models.Model):
'closed', 'tags', 'votes', 'commentable_id', 'username', 'user_id',
'created_at', 'updated_at', 'comments_count', 'unread_comments_count',
'at_position_list', 'children', 'type', 'highlighted_title',
- 'highlighted_body', 'endorsed', 'read', 'group_id', 'group_name', 'pinned', 'abuse_flaggers'
+ 'highlighted_body', 'endorsed', 'read', 'group_id', 'group_name', 'pinned'
]
updatable_fields = [
@@ -26,13 +27,11 @@ class Thread(models.Model):
@classmethod
def search(cls, query_params, *args, **kwargs):
-
default_params = {'page': 1,
'per_page': 20,
'course_id': query_params['course_id'],
'recursive': False}
params = merge_dict(default_params, strip_blank(strip_none(query_params)))
-
if query_params.get('text') or query_params.get('tags') or query_params.get('commentable_ids'):
url = cls.url(action='search')
else:
@@ -55,7 +54,6 @@ class Thread(models.Model):
@classmethod
def url(cls, action, params={}):
-
if action in ['get_all', 'post']:
return cls.url_for_threads(params)
elif action == 'search':
@@ -68,11 +66,12 @@ class Thread(models.Model):
# that subclasses don't need to override for this.
def _retrieve(self, *args, **kwargs):
url = self.url(action='get', params=self.attributes)
+
request_params = {
- 'recursive': kwargs.get('recursive'),
- 'user_id': kwargs.get('user_id'),
- 'mark_as_read': kwargs.get('mark_as_read', True),
- }
+ 'recursive': kwargs.get('recursive'),
+ 'user_id': kwargs.get('user_id'),
+ 'mark_as_read': kwargs.get('mark_as_read', True),
+ }
# user_id may be none, in which case it shouldn't be part of the
# request.
@@ -80,57 +79,23 @@ class Thread(models.Model):
response = perform_request('get', url, request_params)
self.update_attributes(**response)
-
- def flagAbuse(self, user, voteable):
- if voteable.type == 'thread':
- url = _url_for_flag_abuse_thread(voteable.id)
- elif voteable.type == 'comment':
- url = _url_for_flag_comment(voteable.id)
- else:
- raise CommentClientError("Can only flag/unflag threads or comments")
- params = {'user_id': user.id}
- request = perform_request('put', url, params)
- voteable.update_attributes(request)
-
- def unFlagAbuse(self, user, voteable, removeAll):
- if voteable.type == 'thread':
- url = _url_for_unflag_abuse_thread(voteable.id)
- elif voteable.type == 'comment':
- url = _url_for_unflag_comment(voteable.id)
- else:
- raise CommentClientError("Can only flag/unflag for threads or comments")
- params = {'user_id': user.id}
- #if you're an admin, when you unflag, remove ALL flags
- if removeAll:
- params['all'] = True
-
- request = perform_request('put', url, params)
- voteable.update_attributes(request)
-
+
def pin(self, user, thread_id):
url = _url_for_pin_thread(thread_id)
params = {'user_id': user.id}
request = perform_request('put', url, params)
- self.update_attributes(request)
+ self.update_attributes(request)
def un_pin(self, user, thread_id):
url = _url_for_un_pin_thread(thread_id)
params = {'user_id': user.id}
request = perform_request('put', url, params)
- self.update_attributes(request)
-
-
-def _url_for_flag_abuse_thread(thread_id):
- return "{prefix}/threads/{thread_id}/abuse_flags".format(prefix=settings.PREFIX, thread_id=thread_id)
-
-
-def _url_for_unflag_abuse_thread(thread_id):
- return "{prefix}/threads/{thread_id}/abuse_unflags".format(prefix=settings.PREFIX, thread_id=thread_id)
-
-
+ self.update_attributes(request)
+
+
def _url_for_pin_thread(thread_id):
- return "{prefix}/threads/{thread_id}/pin".format(prefix=settings.PREFIX, thread_id=thread_id)
-
-
+ return "{prefix}/threads/{thread_id}/pin".format(prefix=settings.PREFIX, thread_id=thread_id)
+
def _url_for_un_pin_thread(thread_id):
- return "{prefix}/threads/{thread_id}/unpin".format(prefix=settings.PREFIX, thread_id=thread_id)
+ return "{prefix}/threads/{thread_id}/unpin".format(prefix=settings.PREFIX, thread_id=thread_id)
+
\ No newline at end of file
diff --git a/lms/static/images/flagged.png b/lms/static/images/flagged.png
deleted file mode 100644
index c3de857733..0000000000
Binary files a/lms/static/images/flagged.png and /dev/null differ
diff --git a/lms/static/images/notflagged.png b/lms/static/images/notflagged.png
deleted file mode 100644
index 42bc0b3aff..0000000000
Binary files a/lms/static/images/notflagged.png and /dev/null differ
diff --git a/lms/static/images/resolvedflag.png b/lms/static/images/resolvedflag.png
deleted file mode 100644
index 8e318f786c..0000000000
Binary files a/lms/static/images/resolvedflag.png and /dev/null differ
diff --git a/lms/static/sass/_discussion.scss b/lms/static/sass/_discussion.scss
index c03785859e..9583a8d30f 100644
--- a/lms/static/sass/_discussion.scss
+++ b/lms/static/sass/_discussion.scss
@@ -95,7 +95,6 @@
body.discussion {
-
.new-post-form-errors {
display: none;
background: $error-red;
@@ -1281,8 +1280,8 @@ body.discussion {
.discussion-article {
position: relative;
padding: 40px;
- min-height: 468px;
-
+ min-height: 468px;
+
a {
word-wrap: break-word;
}
@@ -1335,9 +1334,6 @@ body.discussion {
background-position: 0 0;
}
}
-
-
-
}
.discussion-post {
@@ -2440,6 +2436,7 @@ body.discussion {
@extend .discussion-module
}
+
.group-visibility-label {
font-size: 12px;
color:#000;
@@ -2494,39 +2491,4 @@ body.discussion {
.pinned-false
{
display:none;
-}
-
-.discussion-flag-abuse {
- font-size: 12px;
- float:right;
- padding-right: 5px;
- font-style: italic;
- }
-
-.notflagged .icon
-{
- display: inline-block;
- width: 10px;
- height: 14px;
- padding-right: 3px;
- background: transparent url('../images/notflagged.png') no-repeat 0 0;
-}
-
-.flagged .icon
-{
- display: inline-block;
- width: 10px;
- height: 14px;
- padding-right: 3px;
- background: transparent url('../images/flagged.png') no-repeat 0 0;
-}
-
-.flagged span {
- color: #B82066;
- font-style: italic;
-}
-
-.notflagged span {
- color: #888;
- font-style: italic;
}
\ No newline at end of file
diff --git a/lms/templates/discussion/_filter_dropdown.html b/lms/templates/discussion/_filter_dropdown.html
index dd5b94f910..fef4abb11f 100644
--- a/lms/templates/discussion/_filter_dropdown.html
+++ b/lms/templates/discussion/_filter_dropdown.html
@@ -33,14 +33,6 @@
Show All Discussions
- %if flag_moderator:
-
-
- Show Flagged Discussions
-
-
-
- %endif
Following
diff --git a/lms/templates/discussion/_underscore_templates.html b/lms/templates/discussion/_underscore_templates.html
index 110e6ffc19..24e3b467be 100644
--- a/lms/templates/discussion/_underscore_templates.html
+++ b/lms/templates/discussion/_underscore_templates.html
@@ -3,7 +3,6 @@