From 50e95de9efc09071a733757d0e5d823f7dd78d2d Mon Sep 17 00:00:00 2001 From: Rocky Duan Date: Tue, 14 Aug 2012 15:04:36 -0700 Subject: [PATCH] a place to start for the user profiel & fixed some bugs --- .../management/commands/sync_user_info.py | 9 ++--- common/djangoapps/student/models.py | 13 ++----- .../django_comment_client/forum/urls.py | 2 +- .../django_comment_client/forum/views.py | 31 ++++----------- lms/djangoapps/django_comment_client/utils.py | 6 +++ lms/lib/comment_client/user.py | 16 +++++++- .../coffee/src/discussion/discussion.coffee | 9 ++--- lms/static/coffee/src/discussion/utils.coffee | 2 +- lms/static/sass/_discussion.scss | 7 +++- lms/templates/discussion/_thread.html | 16 ++++---- lms/templates/discussion/index.html | 4 +- lms/templates/discussion/user_profile.html | 38 +++++++++++++++++++ 12 files changed, 94 insertions(+), 59 deletions(-) create mode 100644 lms/templates/discussion/user_profile.html diff --git a/common/djangoapps/student/management/commands/sync_user_info.py b/common/djangoapps/student/management/commands/sync_user_info.py index 7d7dc4405d..04257e2a5d 100644 --- a/common/djangoapps/student/management/commands/sync_user_info.py +++ b/common/djangoapps/student/management/commands/sync_user_info.py @@ -4,7 +4,7 @@ from django.core.management.base import BaseCommand from django.contrib.auth.models import User -import comment_client +import comment_client as cc class Command(BaseCommand): @@ -15,8 +15,5 @@ service''' def handle(self, *args, **options): for user in User.objects.all().iterator(): - comment_client.update_user(user.id, { - 'id': user.id, - 'username': user.username, - 'email': user.email - }) + cc_user = cc.User.from_django_user(user) + cc_user.save() diff --git a/common/djangoapps/student/models.py b/common/djangoapps/student/models.py index ce67c502de..382b7ebcda 100644 --- a/common/djangoapps/student/models.py +++ b/common/djangoapps/student/models.py @@ -50,7 +50,7 @@ from django.dispatch import receiver from functools import partial -import comment_client +import comment_client as cc import logging @@ -265,16 +265,9 @@ def add_user_to_default_group(user, group): @receiver(post_save, sender=User) def update_user_information(sender, instance, created, **kwargs): - if created: - func = comment_client.create_user - else: - func = partial(comment_client.update_user, user_id=instance.id) try: - func(attributes={ - 'id': instance.id, - 'username': instance.username, - 'email': instance.email, - }) + cc_user = cc.User.from_django_user(instance) + cc_user.save() except Exception as e: log = logging.getLogger("mitx.discussion") log.error(unicode(e)) diff --git a/lms/djangoapps/django_comment_client/forum/urls.py b/lms/djangoapps/django_comment_client/forum/urls.py index 945aae9fa5..bc6b08b3d6 100644 --- a/lms/djangoapps/django_comment_client/forum/urls.py +++ b/lms/djangoapps/django_comment_client/forum/urls.py @@ -2,7 +2,7 @@ from django.conf.urls.defaults import url, patterns import django_comment_client.forum.views urlpatterns = patterns('django_comment_client.forum.views', - url(r'search$', 'search', name='search'), + url(r'users/(?P\w+)$', 'user_profile', name='user_profile'), url(r'(?P\w+)/threads/(?P\w+)$', 'single_thread', name='single_thread'), url(r'(?P\w+)/inline$', 'inline_discussion', name='inline_discussion'), url(r'(?P\w+)$', 'forum_form_discussion', name='forum_form_discussion'), diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index 2716b728f2..d517f67185 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -91,12 +91,6 @@ def get_threads(request, course_id, discussion_id): threads, page, num_pages = cc.Thread.search(query_params) - #if _should_perform_search(request): - # query_params['commentable_id'] = discussion_id - # threads, page, num_pages = cc.Thread.searchcomment_client.search_threads(course_id, recursive=False, query_params=utils.strip_none(query_params)) - #else: - # threads, page, num_pages = comment_client.get_threads(discussion_id, recursive=False, query_params=utils.strip_none(query_params)) - query_params['page'] = page query_params['num_pages'] = num_pages @@ -153,7 +147,6 @@ def forum_form_discussion(request, course_id, discussion_id): def render_single_thread(request, discussion_id, course_id, thread_id): thread = cc.Thread.find(thread_id).retrieve(recursive=True) - #comment_client.get_thread(thread_id, recursive=True) annotated_content_info = utils.get_annotated_content_infos(course_id, thread=thread.to_dict(), \ user=request.user, type='thread') @@ -196,26 +189,18 @@ def single_thread(request, course_id, discussion_id, thread_id): return render_to_response('discussion/index.html', context) -def search(request, course_id): +def user_profile(request, course_id, user_id): course = check_course(request.user, course_id) - text = request.GET.get('text', None) - commentable_id = request.GET.get('commentable_id', None) - tags = request.GET.get('tags', None) - - threads = cc.Threads.search({ - 'text': text, - 'commentable_id': commentable_id, - 'tags': tags, - }) + discussion_user = cc.User(id=user_id, course_id=course_id) context = { - 'csrf': csrf(request)['csrf_token'], - 'init': '', - 'content': render_forum_discussion(request, course_id, threads, search_text=text), - 'accordion': '', - 'course': course, + 'course': course, + 'user': request.user, + 'discussion_user': discussion_user.to_dict(), } - return render_to_response('discussion/index.html', context) + print context + + return render_to_response('discussion/user_profile.html', context) diff --git a/lms/djangoapps/django_comment_client/utils.py b/lms/djangoapps/django_comment_client/utils.py index bcb335dfc6..642855ed2c 100644 --- a/lms/djangoapps/django_comment_client/utils.py +++ b/lms/djangoapps/django_comment_client/utils.py @@ -141,3 +141,9 @@ def get_annotated_content_infos(course_id, thread, user, type='thread'): _annotate(child, 'comment') _annotate(thread, type) return infos + +def pluralize(singular_term, count): + if int(count) >= 2: + return singular_term + 's' + return singular_term + diff --git a/lms/lib/comment_client/user.py b/lms/lib/comment_client/user.py index e26528f363..8a8a8a4592 100644 --- a/lms/lib/comment_client/user.py +++ b/lms/lib/comment_client/user.py @@ -6,8 +6,9 @@ import settings class User(models.Model): accessible_fields = ['username', 'email', 'follower_ids', 'upvoted_ids', 'downvoted_ids', - 'id', 'external_id', 'subscribed_user_ids', 'children', + 'id', 'external_id', 'subscribed_user_ids', 'children', 'course_id', 'subscribed_thread_ids', 'subscribed_commentable_ids', + 'threads_count', 'comments_count', ] updatable_fields = ['username', 'external_id', 'email'] @@ -19,7 +20,10 @@ class User(models.Model): @classmethod def from_django_user(cls, user): - return cls(id=str(user.id)) + return cls(id=str(user.id), + external_id=str(user.id), + username=user.username, + email=user.email) def follow(self, source): params = {'source_type': source.type, 'source_id': source.id} @@ -51,6 +55,14 @@ class User(models.Model): request = perform_request('delete', url, params) voteable.update_attributes(request) + def _retrieve(self, *args, **kwargs): + url = self.url(action='get', params=self.attributes) + retrieve_params = self.default_retrieve_params + if self.course_id: + retrieve_params['course_id'] = self.course_id + response = perform_request('get', url, retrieve_params) + self.update_attributes(**response) + def _url_for_vote_comment(comment_id): return "{prefix}/comments/{comment_id}/votes".format(prefix=settings.PREFIX, comment_id=comment_id) diff --git a/lms/static/coffee/src/discussion/discussion.coffee b/lms/static/coffee/src/discussion/discussion.coffee index 7d415e3161..ce56b4c1a5 100644 --- a/lms/static/coffee/src/discussion/discussion.coffee +++ b/lms/static/coffee/src/discussion/discussion.coffee @@ -92,8 +92,6 @@ initializeFollowDiscussion = (discussion) -> $title.attr("prev-text", text) initializeNewPost = -> - #newPostForm = $local(".new-post-form") - #$newPostButton = $local(".discussion-new-post") view = { discussion_id: id } $discussionNonContent = $discussion.children(".discussion-non-content") @@ -137,8 +135,9 @@ initializeFollowDiscussion = (discussion) -> success: (data, textStatus) -> $data = $(data) $discussion.replaceWith($data) - Discussion.initializeDiscussion($data) - Discussion.bindDiscussionEvents($data) + $discussion = $(".discussion[_id='#{id}']") + Discussion.initializeDiscussion($discussion) + Discussion.bindDiscussionEvents($discussion) handleAjaxSearch = (elem) -> $elem = $(elem) @@ -177,5 +176,5 @@ initializeFollowDiscussion = (discussion) -> "click .discussion-sort-link": -> handleAjaxSort(this) - $discussion.children(".discussion-paginator").find(".discussion-page-link").click -> + $discussion.children(".discussion-paginator").find(".discussion-page-link").unbind('click').click -> handleAjaxPage(this) diff --git a/lms/static/coffee/src/discussion/utils.coffee b/lms/static/coffee/src/discussion/utils.coffee index 77c326e851..f8ee4bea83 100644 --- a/lms/static/coffee/src/discussion/utils.coffee +++ b/lms/static/coffee/src/discussion/utils.coffee @@ -60,7 +60,7 @@ wmdEditors = {} bindLocalEvents: ($local, eventsHandler) -> for eventSelector, handler of eventsHandler [event, selector] = eventSelector.split(' ') - $local(selector)[event] handler + $local(selector).unbind(event)[event] handler tagsInputOptions: -> autocomplete_url: Discussion.urlFor('tags_autocomplete') diff --git a/lms/static/sass/_discussion.scss b/lms/static/sass/_discussion.scss index 9e9e75809b..f8047b0eee 100644 --- a/lms/static/sass/_discussion.scss +++ b/lms/static/sass/_discussion.scss @@ -71,8 +71,13 @@ $tag-text-color: #5b614f; font-weight: bold; } - .sidebar-new-post-button { + .sidebar-new-post-button, .sidebar-promote-moderator-button { @include button; + } + .sidebar-revoke-moderator-button { + @include button(simple, gray); + } + .sidebar-new-post-button, .sidebar-promote-moderator-button, .sidebar-revoke-moderator-button { display: block; box-sizing: border-box; width: 100%; diff --git a/lms/templates/discussion/_thread.html b/lms/templates/discussion/_thread.html index f807f28594..593aa1e4f4 100644 --- a/lms/templates/discussion/_thread.html +++ b/lms/templates/discussion/_thread.html @@ -1,8 +1,10 @@ <%! from django.core.urlresolvers import reverse %> <%! from datehelper import time_ago_in_words %> <%! from dateutil.parser import parse %> +<%! from django_comment_client.utils import pluralize %> <%! import urllib %> + <%def name="render_thread(course_id, thread, show_comments=False)">
${render_content(thread, "thread", show_comments=show_comments)} @@ -111,23 +113,21 @@ <%def name="render_info(content)"> + <% + def url_for_user(user_id): + return reverse('django_comment_client.forum.views.user_profile', args=[course_id, user_id]) + %>
${time_ago_in_words(parse(content['updated_at']))} ago by % if content['anonymous']: anonymous % else: - ${content['username']} + ${content['username']} % endif
diff --git a/lms/templates/discussion/index.html b/lms/templates/discussion/index.html index 5145c84837..965e8e091f 100644 --- a/lms/templates/discussion/index.html +++ b/lms/templates/discussion/index.html @@ -30,8 +30,8 @@ <%include file="_trending_tags.html" /> - - + +
${content} diff --git a/lms/templates/discussion/user_profile.html b/lms/templates/discussion/user_profile.html new file mode 100644 index 0000000000..e616c0d003 --- /dev/null +++ b/lms/templates/discussion/user_profile.html @@ -0,0 +1,38 @@ +<%! from django_comment_client.utils import pluralize %> + +<%inherit file="../main.html" /> +<%namespace name='static' file='../static_content.html'/> +<%block name="bodyclass">discussion +<%block name="title">Discussion – MITx 6.002x + +<%block name="headextra"> +<%static:css group='course'/> + + +<%block name="js_extra"> +<%include file="_js_dependencies.html" /> + + +<%include file="../course_navigation.html" args="active_page='discussion'" /> + +
+
+ + +
+ +
+
+