Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
457b7f46
Commit
457b7f46
authored
Aug 14, 2012
by
Rocky Duan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
toggle moderator status
parent
97f1e2f5
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
123 additions
and
46 deletions
+123
-46
lms/djangoapps/django_comment_client/base/urls.py
+1
-0
lms/djangoapps/django_comment_client/base/views.py
+35
-2
lms/static/coffee/src/discussion/main.coffee
+1
-1
lms/static/coffee/src/discussion/user_profile.coffee
+30
-0
lms/static/coffee/src/discussion/utils.coffee
+26
-25
lms/templates/discussion/_user_profile.html
+22
-0
lms/templates/discussion/ajax_user_profile.html
+1
-0
lms/templates/discussion/user_profile.html
+7
-18
No files found.
lms/djangoapps/django_comment_client/base/urls.py
View file @
457b7f46
...
...
@@ -4,6 +4,7 @@ import django_comment_client.base.views
urlpatterns
=
patterns
(
'django_comment_client.base.views'
,
url
(
r'upload$'
,
'upload'
,
name
=
'upload'
),
url
(
r'users/(?P<user_id>\w+)/update_moderator_status$'
,
'update_moderator_status'
,
name
=
'update_moderator_status'
),
url
(
r'threads/tags/autocomplete$'
,
'tags_autocomplete'
,
name
=
'tags_autocomplete'
),
url
(
r'threads/(?P<thread_id>[\w\-]+)/update$'
,
'update_thread'
,
name
=
'update_thread'
),
url
(
r'threads/(?P<thread_id>[\w\-]+)/reply$'
,
'create_comment'
,
name
=
'create_comment'
),
...
...
lms/djangoapps/django_comment_client/base/views.py
View file @
457b7f46
...
...
@@ -4,8 +4,10 @@ import os
import
os.path
import
logging
import
urlparse
import
functools
import
comment_client
as
cc
import
django_comment_client.utils
as
utils
from
django.core
import
exceptions
from
django.contrib.auth.decorators
import
login_required
...
...
@@ -14,13 +16,15 @@ from django.views.decorators import csrf
from
django.core.files.storage
import
get_storage_class
from
django.utils.translation
import
ugettext
as
_
from
django.conf
import
settings
from
django.contrib.auth.models
import
User
from
mitxmako.shortcuts
import
render_to_response
,
render_to_string
from
courseware.courses
import
check_course
from
django_comment_client.utils
import
JsonResponse
,
JsonError
,
extract
import
django_comment_client.utils
as
utils
from
django_comment_client.permissions
import
check_permissions_by_view
import
functools
from
django_comment_client.models
import
Role
def
permitted
(
fn
):
@functools.wraps
(
fn
)
...
...
@@ -289,6 +293,35 @@ def unfollow_user(request, course_id, followed_user_id):
user
.
unfollow
(
followed_user
)
return
JsonResponse
({})
@require_POST
@login_required
@permitted
def
update_moderator_status
(
request
,
course_id
,
user_id
):
is_moderator
=
request
.
POST
.
get
(
'is_moderator'
,
''
)
.
lower
()
if
is_moderator
not
in
[
"true"
,
"false"
]:
return
JsonError
(
"Must provide is_moderator as boolean value"
)
is_moderator
=
is_moderator
==
"true"
user
=
User
.
objects
.
get
(
id
=
user_id
)
role
=
Role
.
objects
.
get
(
course_id
=
course_id
,
name
=
"Moderator"
)
if
is_moderator
:
user
.
roles
.
add
(
role
)
else
:
user
.
roles
.
remove
(
role
)
if
request
.
is_ajax
():
course
=
check_course
(
request
.
user
,
course_id
)
discussion_user
=
cc
.
User
(
id
=
user_id
,
course_id
=
course_id
)
context
=
{
'course'
:
course
,
'user'
:
request
.
user
,
'django_user'
:
user
,
'discussion_user'
:
discussion_user
.
to_dict
(),
}
return
JsonResponse
({
'html'
:
render_to_string
(
'discussion/ajax_user_profile.html'
,
context
)
})
else
:
return
JsonResponse
({})
@require_GET
def
search_similar_threads
(
request
,
course_id
,
commentable_id
):
text
=
request
.
GET
.
get
(
'text'
,
None
)
...
...
lms/static/coffee/src/discussion/main.coffee
View file @
457b7f46
...
...
@@ -20,4 +20,4 @@ $ ->
Discussion
.
initializeDiscussion
(
discussion
)
Discussion
.
bindDiscussionEvents
(
discussion
)
Discussion
.
initializeUserProfile
(
$
(
".discussion-sidebar>.user-profile"
))
lms/static/coffee/src/discussion/user_profile.coffee
0 → 100644
View file @
457b7f46
if
not
@
Discussion
?
@
Discussion
=
{}
Discussion
=
@
Discussion
@
Discussion
=
$
.
extend
@
Discussion
,
initializeUserProfile
:
(
$userProfile
)
->
$local
=
Discussion
.
generateLocal
$userProfile
handleUpdateModeratorStatus
=
(
elem
,
isModerator
)
->
url
=
Discussion
.
urlFor
(
'update_moderator_status'
,
$$profiled_user_id
)
Discussion
.
safeAjax
$elem
:
$
(
elem
)
url
:
url
type
:
"POST"
dataType
:
'json'
data
:
is_moderator
:
isModerator
error
:
(
response
,
textStatus
,
e
)
->
console
.
log
e
success
:
(
response
,
textStatus
)
->
parent
=
$userProfile
.
parent
()
$userProfile
.
replaceWith
(
response
.
html
)
Discussion
.
initializeUserProfile
parent
.
children
(
".user-profile"
)
Discussion
.
bindLocalEvents
$local
,
"click .sidebar-revoke-moderator-button"
:
(
event
)
->
handleUpdateModeratorStatus
(
this
,
false
)
"click .sidebar-promote-moderator-button"
:
(
event
)
->
handleUpdateModeratorStatus
(
this
,
true
)
lms/static/coffee/src/discussion/utils.coffee
View file @
457b7f46
...
...
@@ -18,31 +18,32 @@ wmdEditors = {}
urlFor
:
(
name
,
param
,
param1
)
->
{
follow_discussion
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/follow"
unfollow_discussion
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/unfollow"
create_thread
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/threads/create"
search_similar_threads
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/threads/search_similar"
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"
upvote_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/upvote"
downvote_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/downvote"
undo_vote_for_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/unvote"
follow_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/follow"
unfollow_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/unfollow"
openclose_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/close"
update_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/update"
endorse_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/endorse"
create_sub_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/reply"
delete_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/delete"
upvote_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/upvote"
downvote_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/downvote"
undo_vote_for_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/unvote"
upload
:
"/courses/
#{
$$course_id
}
/discussion/upload"
search
:
"/courses/
#{
$$course_id
}
/discussion/forum/search"
tags_autocomplete
:
"/courses/
#{
$$course_id
}
/discussion/threads/tags/autocomplete"
retrieve_discussion
:
"/courses/
#{
$$course_id
}
/discussion/forum/
#{
param
}
/inline"
retrieve_single_thread
:
"/courses/
#{
$$course_id
}
/discussion/forum/
#{
param
}
/threads/
#{
param1
}
"
follow_discussion
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/follow"
unfollow_discussion
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/unfollow"
create_thread
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/threads/create"
search_similar_threads
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/threads/search_similar"
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"
upvote_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/upvote"
downvote_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/downvote"
undo_vote_for_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/unvote"
follow_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/follow"
unfollow_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/unfollow"
openclose_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/close"
update_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/update"
endorse_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/endorse"
create_sub_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/reply"
delete_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/delete"
upvote_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/upvote"
downvote_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/downvote"
undo_vote_for_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/unvote"
upload
:
"/courses/
#{
$$course_id
}
/discussion/upload"
search
:
"/courses/
#{
$$course_id
}
/discussion/forum/search"
tags_autocomplete
:
"/courses/
#{
$$course_id
}
/discussion/threads/tags/autocomplete"
retrieve_discussion
:
"/courses/
#{
$$course_id
}
/discussion/forum/
#{
param
}
/inline"
retrieve_single_thread
:
"/courses/
#{
$$course_id
}
/discussion/forum/
#{
param
}
/threads/
#{
param1
}
"
update_moderator_status
:
"/courses/
#{
$$course_id
}
/discussion/users/
#{
param
}
/update_moderator_status"
}[
name
]
safeAjax
:
(
params
)
->
...
...
lms/templates/discussion/_user_profile.html
0 → 100644
View file @
457b7f46
<
%!
from
django_comment_client
.
utils
import
pluralize
%
>
<
%!
from
django_comment_client
.
permissions
import
has_permission
,
check_permissions_by_view
%
>
<div
class=
"user-profile"
>
<
%
role_names =
sorted(map(lambda
x:
x
.
name
,
django_user
.
roles
.
all
()))
%
>
<div
class=
"sidebar-username"
>
${django_user.username}
</div>
<div
class=
"sidebar-user-roles"
>
${", ".join(role_names)}
</div>
<div
class=
"sidebar-threads-count"
>
${discussion_user['threads_count']} ${pluralize('discussion', discussion_user['threads_count'])} started
</div>
<div
class=
"sidebar-comments-count"
>
${discussion_user['comments_count']} ${pluralize('comment', discussion_user['comments_count'])}
</div>
% if check_permissions_by_view(user, course.id, content=None, name='update_moderator_status'):
% if "Moderator" in role_names:
<a
href=
"javascript:void(0)"
class=
"sidebar-revoke-moderator-button"
>
Revoke Moderator provileges
</a>
% else:
<a
href=
"javascript:void(0)"
class=
"sidebar-promote-moderator-button"
>
Promote to Moderator
</a>
% endif
% endif
</div>
lms/templates/discussion/ajax_user_profile.html
0 → 100644
View file @
457b7f46
<
%
include
file=
"_user_profile.html"
/>
lms/templates/discussion/user_profile.html
View file @
457b7f46
<
%!
from
django_comment_client
.
utils
import
pluralize
%
>
<
%!
from
django_comment_client
.
permissions
import
has_permission
,
check_permissions_by_view
%
>
<
%!
from
django
.
template
.
defaultfilters
import
escapejs
%
>
<
%
inherit
file=
"../main.html"
/>
<
%
namespace
name=
'static'
file=
'../static_content.html'
/>
...
...
@@ -20,24 +19,9 @@
<div
class=
"course-wrapper"
>
<section
aria-label=
"User Profile"
class=
"user-profile"
>
<nav>
<
%
role_names =
sorted(map(lambda
x:
x
.
name
,
django_user
.
roles
.
all
()))
%
>
<article
class=
"sidebar-module discussion-sidebar"
>
<div
class=
"sidebar-username"
>
${django_user.username}
</div>
<div
class=
"sidebar-user-roles"
>
${", ".join(role_names)}
</div>
<div
class=
"sidebar-threads-count"
>
${discussion_user['threads_count']} ${pluralize('discussion', discussion_user['threads_count'])} started
</div>
<div
class=
"sidebar-comments-count"
>
${discussion_user['comments_count']} ${pluralize('comment', discussion_user['comments_count'])}
</div>
% if check_permissions_by_view(user, course.id, content=None, name='update_moderator_status'):
% if "Moderator" in role_names:
<a
href=
"javascript:void(0)"
class=
"sidebar-revoke-moderator-button"
>
Revoke Moderator provileges
</a>
% else:
<a
href=
"javascript:void(0)"
class=
"sidebar-promote-moderator-button"
>
Promote to Moderator
</a>
% endif
% endif
<
%
include
file=
"_user_profile.html"
/>
</article>
</nav>
...
...
@@ -48,3 +32,8 @@
</section>
</div>
</section>
<script
type=
"text/javascript"
>
var
$$profiled_user_id
=
"${user.id | escapejs}"
;
var
$$course_id
=
"${course.id | escapejs}"
;
</script>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment