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
7d1f3cc6
Commit
7d1f3cc6
authored
Aug 14, 2012
by
Brittany Cheng
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'profile' of github.com:dementrock/mitx into brittany
parents
f5c2cec9
04642238
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
128 additions
and
57 deletions
+128
-57
lms/djangoapps/django_comment_client/base/urls.py
+1
-0
lms/djangoapps/django_comment_client/base/views.py
+37
-2
lms/static/coffee/src/discussion/content.coffee
+1
-1
lms/static/coffee/src/discussion/main.coffee
+1
-1
lms/static/coffee/src/discussion/user_profile.coffee
+32
-0
lms/static/coffee/src/discussion/utils.coffee
+26
-25
lms/templates/discussion/_thread.html
+0
-10
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 @
7d1f3cc6
...
@@ -4,6 +4,7 @@ import django_comment_client.base.views
...
@@ -4,6 +4,7 @@ import django_comment_client.base.views
urlpatterns
=
patterns
(
'django_comment_client.base.views'
,
urlpatterns
=
patterns
(
'django_comment_client.base.views'
,
url
(
r'upload$'
,
'upload'
,
name
=
'upload'
),
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/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\-]+)/update$'
,
'update_thread'
,
name
=
'update_thread'
),
url
(
r'threads/(?P<thread_id>[\w\-]+)/reply$'
,
'create_comment'
,
name
=
'create_comment'
),
url
(
r'threads/(?P<thread_id>[\w\-]+)/reply$'
,
'create_comment'
,
name
=
'create_comment'
),
...
...
lms/djangoapps/django_comment_client/base/views.py
View file @
7d1f3cc6
...
@@ -4,8 +4,10 @@ import os
...
@@ -4,8 +4,10 @@ import os
import
os.path
import
os.path
import
logging
import
logging
import
urlparse
import
urlparse
import
functools
import
comment_client
as
cc
import
comment_client
as
cc
import
django_comment_client.utils
as
utils
from
django.core
import
exceptions
from
django.core
import
exceptions
from
django.contrib.auth.decorators
import
login_required
from
django.contrib.auth.decorators
import
login_required
...
@@ -14,13 +16,15 @@ from django.views.decorators import csrf
...
@@ -14,13 +16,15 @@ from django.views.decorators import csrf
from
django.core.files.storage
import
get_storage_class
from
django.core.files.storage
import
get_storage_class
from
django.utils.translation
import
ugettext
as
_
from
django.utils.translation
import
ugettext
as
_
from
django.conf
import
settings
from
django.conf
import
settings
from
django.contrib.auth.models
import
User
from
mitxmako.shortcuts
import
render_to_response
,
render_to_string
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
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
from
django_comment_client.permissions
import
check_permissions_by_view
import
functools
from
django_comment_client.models
import
Role
def
permitted
(
fn
):
def
permitted
(
fn
):
@functools.wraps
(
fn
)
@functools.wraps
(
fn
)
...
@@ -113,6 +117,7 @@ def _create_comment(request, course_id, thread_id=None, parent_id=None):
...
@@ -113,6 +117,7 @@ def _create_comment(request, course_id, thread_id=None, parent_id=None):
if
request
.
is_ajax
():
if
request
.
is_ajax
():
context
=
{
context
=
{
'comment'
:
comment
.
to_dict
(),
'comment'
:
comment
.
to_dict
(),
'course_id'
:
course_id
,
}
}
html
=
render_to_string
(
'discussion/ajax_create_comment.html'
,
context
)
html
=
render_to_string
(
'discussion/ajax_create_comment.html'
,
context
)
annotated_content_info
=
utils
.
get_annotated_content_info
(
course_id
,
annotated_content_info
=
utils
.
get_annotated_content_info
(
course_id
,
...
@@ -289,6 +294,36 @@ def unfollow_user(request, course_id, followed_user_id):
...
@@ -289,6 +294,36 @@ def unfollow_user(request, course_id, followed_user_id):
user
.
unfollow
(
followed_user
)
user
.
unfollow
(
followed_user
)
return
JsonResponse
({})
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
,
'course_id'
:
course_id
,
'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
@require_GET
def
search_similar_threads
(
request
,
course_id
,
commentable_id
):
def
search_similar_threads
(
request
,
course_id
,
commentable_id
):
text
=
request
.
GET
.
get
(
'text'
,
None
)
text
=
request
.
GET
.
get
(
'text'
,
None
)
...
...
lms/static/coffee/src/discussion/content.coffee
View file @
7d1f3cc6
...
@@ -326,7 +326,7 @@ initializeFollowThread = (thread) ->
...
@@ -326,7 +326,7 @@ initializeFollowThread = (thread) ->
handleVote
(
$elem
,
"down"
)
handleVote
(
$elem
,
"down"
)
"click .admin-endorse"
:
->
"click .admin-endorse"
:
->
handleEndorse
(
this
,
true
)
#, $(this).is(":check
ed"))
handleEndorse
(
this
,
not
$content
.
hasClass
(
"endors
ed"
))
"click .discussion-openclose"
:
->
"click .discussion-openclose"
:
->
handleOpenClose
(
this
,
$
(
this
).
text
())
handleOpenClose
(
this
,
$
(
this
).
text
())
...
...
lms/static/coffee/src/discussion/main.coffee
View file @
7d1f3cc6
...
@@ -20,4 +20,4 @@ $ ->
...
@@ -20,4 +20,4 @@ $ ->
Discussion
.
initializeDiscussion
(
discussion
)
Discussion
.
initializeDiscussion
(
discussion
)
Discussion
.
bindDiscussionEvents
(
discussion
)
Discussion
.
bindDiscussionEvents
(
discussion
)
Discussion
.
initializeUserProfile
(
$
(
".discussion-sidebar>.user-profile"
))
lms/static/coffee/src/discussion/user_profile.coffee
0 → 100644
View file @
7d1f3cc6
if
not
@
Discussion
?
@
Discussion
=
{}
Discussion
=
@
Discussion
@
Discussion
=
$
.
extend
@
Discussion
,
initializeUserProfile
:
(
$userProfile
)
->
$local
=
Discussion
.
generateLocal
$userProfile
handleUpdateModeratorStatus
=
(
elem
,
isModerator
)
->
confirmValue
=
confirm
(
"Are you sure?"
)
if
not
confirmValue
then
return
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 @
7d1f3cc6
...
@@ -18,31 +18,32 @@ wmdEditors = {}
...
@@ -18,31 +18,32 @@ wmdEditors = {}
urlFor
:
(
name
,
param
,
param1
)
->
urlFor
:
(
name
,
param
,
param1
)
->
{
{
follow_discussion
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/follow"
follow_discussion
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/follow"
unfollow_discussion
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/unfollow"
unfollow_discussion
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/unfollow"
create_thread
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/threads/create"
create_thread
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/threads/create"
search_similar_threads
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/threads/search_similar"
search_similar_threads
:
"/courses/
#{
$$course_id
}
/discussion/
#{
param
}
/threads/search_similar"
update_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/update"
update_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/update"
create_comment
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/reply"
create_comment
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/reply"
delete_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/delete"
delete_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/delete"
upvote_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/upvote"
upvote_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/upvote"
downvote_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/downvote"
downvote_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/downvote"
undo_vote_for_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/unvote"
undo_vote_for_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/unvote"
follow_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/follow"
follow_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/follow"
unfollow_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/unfollow"
unfollow_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/unfollow"
openclose_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/close"
openclose_thread
:
"/courses/
#{
$$course_id
}
/discussion/threads/
#{
param
}
/close"
update_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/update"
update_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/update"
endorse_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/endorse"
endorse_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/endorse"
create_sub_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/reply"
create_sub_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/reply"
delete_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/delete"
delete_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/delete"
upvote_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/upvote"
upvote_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/upvote"
downvote_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/downvote"
downvote_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/downvote"
undo_vote_for_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/unvote"
undo_vote_for_comment
:
"/courses/
#{
$$course_id
}
/discussion/comments/
#{
param
}
/unvote"
upload
:
"/courses/
#{
$$course_id
}
/discussion/upload"
upload
:
"/courses/
#{
$$course_id
}
/discussion/upload"
search
:
"/courses/
#{
$$course_id
}
/discussion/forum/search"
search
:
"/courses/
#{
$$course_id
}
/discussion/forum/search"
tags_autocomplete
:
"/courses/
#{
$$course_id
}
/discussion/threads/tags/autocomplete"
tags_autocomplete
:
"/courses/
#{
$$course_id
}
/discussion/threads/tags/autocomplete"
retrieve_discussion
:
"/courses/
#{
$$course_id
}
/discussion/forum/
#{
param
}
/inline"
retrieve_discussion
:
"/courses/
#{
$$course_id
}
/discussion/forum/
#{
param
}
/inline"
retrieve_single_thread
:
"/courses/
#{
$$course_id
}
/discussion/forum/
#{
param
}
/threads/
#{
param1
}
"
retrieve_single_thread
:
"/courses/
#{
$$course_id
}
/discussion/forum/
#{
param
}
/threads/
#{
param1
}
"
update_moderator_status
:
"/courses/
#{
$$course_id
}
/discussion/users/
#{
param
}
/update_moderator_status"
}[
name
]
}[
name
]
safeAjax
:
(
params
)
->
safeAjax
:
(
params
)
->
...
...
lms/templates/discussion/_thread.html
View file @
7d1f3cc6
...
@@ -98,16 +98,6 @@
...
@@ -98,16 +98,6 @@
<ul
class=
"discussion-actions"
>
<ul
class=
"discussion-actions"
>
<li>
${render_link("discussion-link discussion-reply discussion-reply-" + type, "Reply")}
</li>
<li>
${render_link("discussion-link discussion-reply discussion-reply-" + type, "Reply")}
</li>
<li><div
class=
"follow-wrapper"
></div></li>
<li><div
class=
"follow-wrapper"
></div></li>
<li>
% if type == "comment" and request.user.is_staff:
% if content['endorsed']:
<input
type=
"checkbox"
checked=
"checked"
class=
"discussion-link discussion-endorse"
id=
"discussion-endorse-${content['id']}"
>
% else:
<input
type=
"checkbox"
class=
"discussion-link discussion-endorse"
id=
"discussion-endorse-${content['id']}"
>
% endif
<label
class=
"discussion-link"
for=
"discussion-endorse-${content['id']}"
>
Endorsed
</label>
% endif
</li>
</ul>
</ul>
</div>
</div>
</
%
def>
</
%
def>
...
...
lms/templates/discussion/_user_profile.html
0 → 100644
View file @
7d1f3cc6
<
%!
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"
><span>
${discussion_user['threads_count']}
</span>
${pluralize('discussion', discussion_user['threads_count'])} started
</div>
<div
class=
"sidebar-comments-count"
><span>
${discussion_user['comments_count']}
</span>
${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 @
7d1f3cc6
<
%
include
file=
"_user_profile.html"
/>
lms/templates/discussion/user_profile.html
View file @
7d1f3cc6
<
%!
from
django_comment_client
.
utils
import
pluralize
%
>
<
%!
from
django
.
template
.
defaultfilters
import
escapejs
%
>
<
%!
from
django_comment_client
.
permissions
import
has_permission
,
check_permissions_by_view
%
>
<
%
inherit
file=
"../main.html"
/>
<
%
inherit
file=
"../main.html"
/>
<
%
namespace
name=
'static'
file=
'../static_content.html'
/>
<
%
namespace
name=
'static'
file=
'../static_content.html'
/>
...
@@ -20,24 +19,9 @@
...
@@ -20,24 +19,9 @@
<div
class=
"course-wrapper"
>
<div
class=
"course-wrapper"
>
<section
aria-label=
"User Profile"
class=
"user-profile"
>
<section
aria-label=
"User Profile"
class=
"user-profile"
>
<nav>
<nav>
<
%
role_names =
sorted(map(lambda
x:
x
.
name
,
django_user
.
roles
.
all
()))
%
>
<article
class=
"sidebar-module discussion-sidebar"
>
<article
class=
"sidebar-module discussion-sidebar"
>
<div
class=
"sidebar-username"
>
${django_user.username}
</div>
<
%
include
file=
"_user_profile.html"
/>
<div
class=
"sidebar-user-roles"
>
${", ".join(role_names)}
</div>
<div
class=
"sidebar-threads-count"
><span>
${discussion_user['threads_count']}
</span>
${pluralize('discussion', discussion_user['threads_count'])} started
</div>
<div
class=
"sidebar-comments-count"
><span>
${discussion_user['comments_count']}
</span>
${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
</article>
</article>
</nav>
</nav>
...
@@ -48,3 +32,8 @@
...
@@ -48,3 +32,8 @@
</section>
</section>
</div>
</div>
</section>
</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