From 00a6526fd098842a1c958f9e9debea9530b84c41 Mon Sep 17 00:00:00 2001 From: Ibrahim Awwal Date: Wed, 5 Sep 2012 17:58:18 -0700 Subject: [PATCH] Make voting render properly in inline discussions. Also might have fixed following if it wasn't working before. --- .../django_comment_client/base/views.py | 15 ++++++------- .../django_comment_client/forum/views.py | 6 +++++ lms/djangoapps/django_comment_client/utils.py | 22 +++++++++---------- .../src/discussion/discussion_module.coffee | 2 +- .../discussion_thread_inline_view.coffee | 4 ---- .../mustache/_inline_thread.mustache | 12 ++++++++-- 6 files changed, 35 insertions(+), 26 deletions(-) diff --git a/lms/djangoapps/django_comment_client/base/views.py b/lms/djangoapps/django_comment_client/base/views.py index 68250a035e..2fee03c5bd 100644 --- a/lms/djangoapps/django_comment_client/base/views.py +++ b/lms/djangoapps/django_comment_client/base/views.py @@ -38,11 +38,10 @@ def permitted(fn): else: content = None return content - if check_permissions_by_view(request.user, kwargs['course_id'], fetch_content(), request.view_name): return fn(request, *args, **kwargs) else: - return JsonError("unauthorized") + return JsonError("unauthorized", status=401) return wrapper def ajax_content_response(request, course_id, content, template_name): @@ -214,7 +213,7 @@ def undo_vote_for_thread(request, course_id, thread_id): thread = cc.Thread.find(thread_id) user.unvote(thread) return JsonResponse(utils.safe_content(thread.to_dict())) - + @require_POST @login_required @@ -288,7 +287,7 @@ def update_moderator_status(request, course_id, user_id): course = get_course_with_access(request.user, course_id, 'load') discussion_user = cc.User(id=user_id, course_id=course_id) context = { - 'course': course, + 'course': course, 'course_id': course_id, 'user': request.user, 'django_user': user, @@ -327,7 +326,7 @@ def tags_autocomplete(request, course_id): @require_POST @login_required @csrf.csrf_exempt -def upload(request, course_id):#ajax upload file to a question or answer +def upload(request, course_id):#ajax upload file to a question or answer """view that handles file upload via Ajax """ @@ -337,7 +336,7 @@ def upload(request, course_id):#ajax upload file to a question or answer new_file_name = '' try: # TODO authorization - #may raise exceptions.PermissionDenied + #may raise exceptions.PermissionDenied #if request.user.is_anonymous(): # msg = _('Sorry, anonymous users cannot upload files') # raise exceptions.PermissionDenied(msg) @@ -357,7 +356,7 @@ def upload(request, course_id):#ajax upload file to a question or answer new_file_name = str( time.time() ).replace( - '.', + '.', str(random.randint(0,100000)) ) + file_extension @@ -386,7 +385,7 @@ def upload(request, course_id):#ajax upload file to a question or answer parsed_url = urlparse.urlparse(file_url) file_url = urlparse.urlunparse( urlparse.ParseResult( - parsed_url.scheme, + parsed_url.scheme, parsed_url.netloc, parsed_url.path, '', '', '' diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index af896f6f80..c21bfcbd6f 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -136,10 +136,16 @@ def inline_discussion(request, course_id, discussion_id): # html = render_inline_discussion(request, course_id, threads, discussion_id=discussion_id, \ # query_params=query_params) user_info = cc.User.from_django_user(request.user).to_dict() + + def infogetter(thread): + return utils.get_annotated_content_infos(course_id, thread, request.user, user_info) + + annotated_content_info = reduce(merge_dict, map(infogetter, threads), {}) return utils.JsonResponse({ # 'html': html, 'discussion_data': map(utils.safe_content, threads), 'user_info': user_info, + 'annotated_content_info': annotated_content_info }) def render_search_bar(request, course_id, discussion_id=None, text=''): diff --git a/lms/djangoapps/django_comment_client/utils.py b/lms/djangoapps/django_comment_client/utils.py index b0a570caad..1c99cdc72b 100644 --- a/lms/djangoapps/django_comment_client/utils.py +++ b/lms/djangoapps/django_comment_client/utils.py @@ -100,24 +100,24 @@ def initialize_discussion_info(course): unexpanded_category_map[category].append({"title": title, "id": id, "sort_key": sort_key}) - category_map = {"entries": defaultdict(dict), "subcategories": defaultdict(dict)} + category_map = {"entries": defaultdict(dict), "subcategories": defaultdict(dict)} for category_path, entries in unexpanded_category_map.items(): node = category_map["subcategories"] path = [x.strip() for x in category_path.split("/")] for level in path[:-1]: if level not in node: - node[level] = {"subcategories": defaultdict(dict), + node[level] = {"subcategories": defaultdict(dict), "entries": defaultdict(dict), - "sort_key": level} + "sort_key": level} node = node[level]["subcategories"] level = path[-1] if level not in node: - node[level] = {"subcategories": defaultdict(dict), - "entries": defaultdict(dict), + node[level] = {"subcategories": defaultdict(dict), + "entries": defaultdict(dict), "sort_key": level} for entry in entries: - node[level]["entries"][entry["title"]] = {"id": entry["id"], + node[level]["entries"][entry["title"]] = {"id": entry["id"], "sort_key": entry["sort_key"]} for topic, entry in course.metadata.get('discussion_topics', {}).items(): @@ -134,7 +134,7 @@ def initialize_discussion_info(course): def get_courseware_context(content, course): id_map = get_discussion_id_map(course) - id = content['commentable_id'] + id = content['commentable_id'] content_info = None if id in id_map: location = id_map[id]["location"].url() @@ -149,21 +149,21 @@ class JsonResponse(HttpResponse): mimetype='application/json; charset=utf8') class JsonError(HttpResponse): - def __init__(self, error_messages=[]): + def __init__(self, error_messages=[], status=400): if isinstance(error_messages, str): error_messages = [error_messages] content = simplejson.dumps({'errors': error_messages}, indent=2, ensure_ascii=False) super(JsonError, self).__init__(content, - mimetype='application/json; charset=utf8', status=400) + mimetype='application/json; charset=utf8', status=status) class HtmlResponse(HttpResponse): def __init__(self, html=''): super(HtmlResponse, self).__init__(html, content_type='text/plain') -class ViewNameMiddleware(object): - def process_view(self, request, view_func, view_args, view_kwargs): +class ViewNameMiddleware(object): + def process_view(self, request, view_func, view_args, view_kwargs): request.view_name = view_func.__name__ class QueryCountDebugMiddleware(object): diff --git a/lms/static/coffee/src/discussion/discussion_module.coffee b/lms/static/coffee/src/discussion/discussion_module.coffee index 360a3a2535..c7e433b440 100644 --- a/lms/static/coffee/src/discussion/discussion_module.coffee +++ b/lms/static/coffee/src/discussion/discussion_module.coffee @@ -23,8 +23,8 @@ if Backbone? type: "GET" dataType: 'json' success: (response, textStatus) => - #@$el.append(response.html) window.user = new DiscussionUser(response.user_info) + Content.loadContentInfos(response.annotated_content_info) $(event.target).html("Hide Discussion") discussion = new Discussion() discussion.reset(response.discussion_data, {silent: false}) diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_inline_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_inline_view.coffee index 30f0ff8cfc..011ac3f0fc 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_inline_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_inline_view.coffee @@ -21,10 +21,6 @@ class @DiscussionThreadInlineView extends DiscussionContentView @model.on "change", @updateModelDetails render: -> - #TODO: Debugging, remove when done - if not window.$disc - window.$disc = [] - window.$disc.push(@) if not @model.has('abbreviatedBody') @abbreviateBody() @$el.html(Mustache.render(@template(), $.extend(@model.toJSON(),{expanded: @expanded}) )) diff --git a/lms/templates/discussion/mustache/_inline_thread.mustache b/lms/templates/discussion/mustache/_inline_thread.mustache index cd33f2130e..57ed1436c8 100644 --- a/lms/templates/discussion/mustache/_inline_thread.mustache +++ b/lms/templates/discussion/mustache/_inline_thread.mustache @@ -2,11 +2,14 @@
- + {{votes.up_count}} + + {{votes.up_count}}

{{title}}

- sometime by + {{created_at}} by {{username}} +

Expand... @@ -16,6 +19,11 @@
{{abbreviatedBody}}
+