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
6fa02985
Commit
6fa02985
authored
Aug 13, 2012
by
Rocky Duan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
make retrieved single thread/comment after update integrated with permissions
parent
0fa0f2c8
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
59 additions
and
30 deletions
+59
-30
lms/djangoapps/django_comment_client/base/views.py
+21
-0
lms/djangoapps/django_comment_client/forum/views.py
+5
-24
lms/djangoapps/django_comment_client/utils.py
+19
-0
lms/static/coffee/src/discussion/content.coffee
+8
-5
lms/static/coffee/src/discussion/discussion.coffee
+2
-1
lms/static/coffee/src/discussion/utils.coffee
+4
-0
No files found.
lms/djangoapps/django_comment_client/base/views.py
View file @
6fa02985
...
...
@@ -17,6 +17,7 @@ from django.conf import settings
from
mitxmako.shortcuts
import
render_to_response
,
render_to_string
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
...
...
@@ -58,9 +59,14 @@ def create_thread(request, course_id, commentable_id):
'thread'
:
thread
.
to_dict
(),
}
html
=
render_to_string
(
'discussion/ajax_create_thread.html'
,
context
)
annotated_content_info
=
utils
.
get_annotated_content_info
(
course_id
,
thread
.
to_dict
(),
request
.
user
,
'thread'
)
return
JsonResponse
({
'html'
:
html
,
'content'
:
thread
.
to_dict
(),
'annotated_content_info'
:
annotated_content_info
,
})
else
:
return
JsonResponse
(
thread
.
to_dict
())
...
...
@@ -78,9 +84,14 @@ def update_thread(request, course_id, thread_id):
'course_id'
:
course_id
,
}
html
=
render_to_string
(
'discussion/ajax_update_thread.html'
,
context
)
annotated_content_info
=
utils
.
get_annotated_content_info
(
course_id
,
thread
.
to_dict
(),
request
.
user
,
'thread'
)
return
JsonResponse
({
'html'
:
html
,
'content'
:
thread
.
to_dict
(),
'annotated_content_info'
:
annotated_content_info
,
})
else
:
return
JsonResponse
(
thread
.
to_dict
())
...
...
@@ -103,9 +114,14 @@ def _create_comment(request, course_id, thread_id=None, parent_id=None):
'comment'
:
comment
.
to_dict
(),
}
html
=
render_to_string
(
'discussion/ajax_create_comment.html'
,
context
)
annotated_content_info
=
utils
.
get_annotated_content_info
(
course_id
,
comment
.
to_dict
(),
request
.
user
,
'comment'
)
return
JsonResponse
({
'html'
:
html
,
'content'
:
comment
.
to_dict
(),
'annotated_content_info'
:
annotated_content_info
,
})
else
:
return
JsonResponse
(
comment
.
to_dict
())
...
...
@@ -137,9 +153,14 @@ def update_comment(request, course_id, comment_id):
'course_id'
:
course_id
,
}
html
=
render_to_string
(
'discussion/ajax_update_comment.html'
,
context
)
annotated_content_info
=
utils
.
get_annotated_content_info
(
course_id
,
comment
.
to_dict
(),
request
.
user
,
'comment'
)
return
JsonResponse
({
'html'
:
html
,
'content'
:
comment
.
to_dict
(),
'annotated_content_info'
:
annotated_content_info
,
})
else
:
return
JsonResponse
(
comment
.
to_dict
()),
...
...
lms/djangoapps/django_comment_client/forum/views.py
View file @
6fa02985
...
...
@@ -18,7 +18,6 @@ import json
import
comment_client
as
cc
import
dateutil
from
django_comment_client.permissions
import
check_permissions_by_view
THREADS_PER_PAGE
=
5
PAGES_NEARBY_DELTA
=
2
...
...
@@ -54,7 +53,7 @@ def render_discussion(request, course_id, threads, discussion_id=None, \
'forum'
:
(
lambda
:
reverse
(
'django_comment_client.forum.views.forum_form_discussion'
,
args
=
[
course_id
,
discussion_id
])),
}[
discussion_type
]()
annotated_content_info
=
{
thread
[
'id'
]:
get_annotated_content_info
(
course_id
,
thread
,
request
.
user
,
is_thread
=
True
)
for
thread
in
threads
}
annotated_content_info
=
{
thread
[
'id'
]:
utils
.
get_annotated_content_info
(
course_id
,
thread
,
request
.
user
,
type
=
'thread'
)
for
thread
in
threads
}
context
=
{
'threads'
:
threads
,
...
...
@@ -151,36 +150,18 @@ def forum_form_discussion(request, course_id, discussion_id):
}
return
render_to_response
(
'discussion/index.html'
,
context
)
def
get_annotated_content_info
(
course_id
,
content
,
user
,
is_thread
):
return
{
'editable'
:
check_permissions_by_view
(
user
,
course_id
,
content
,
"update_thread"
if
is_thread
else
"update_comment"
),
'can_reply'
:
check_permissions_by_view
(
user
,
course_id
,
content
,
"create_comment"
if
is_thread
else
"create_sub_comment"
),
'can_endorse'
:
check_permissions_by_view
(
user
,
course_id
,
content
,
"endorse_comment"
)
if
not
is_thread
else
False
,
'can_delete'
:
check_permissions_by_view
(
user
,
course_id
,
content
,
"delete_thread"
if
is_thread
else
"delete_comment"
),
}
def
get_annotated_content_infos
(
course_id
,
thread
,
user
,
is_thread
=
True
):
infos
=
{}
def
_annotate
(
content
,
is_thread
=
is_thread
):
infos
[
str
(
content
[
'id'
])]
=
get_annotated_content_info
(
course_id
,
content
,
user
,
is_thread
)
for
child
in
content
.
get
(
'children'
,
[]):
_annotate
(
child
,
is_thread
=
False
)
_annotate
(
thread
)
return
infos
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
=
get_annotated_content_infos
(
course_id
,
thread
=
thread
.
to_dict
(),
\
user
=
request
.
user
,
is_thread
=
True
)
annotated_content_info
=
utils
.
get_annotated_content_infos
(
course_id
,
thread
=
thread
.
to_dict
(),
\
user
=
request
.
user
,
type
=
'thread'
)
context
=
{
'discussion_id'
:
discussion_id
,
'thread'
:
thread
,
'user_info'
:
cc
.
User
.
from_django_user
(
request
.
user
)
.
to_dict
(),
#get_user_info(request.user.id, raw=True),
'user_info'
:
cc
.
User
.
from_django_user
(
request
.
user
)
.
to_dict
(),
'annotated_content_info'
:
json
.
dumps
(
annotated_content_info
),
'course_id'
:
course_id
,
'request'
:
request
,
...
...
@@ -192,7 +173,7 @@ def single_thread(request, course_id, discussion_id, thread_id):
if
request
.
is_ajax
():
thread
=
cc
.
Thread
.
find
(
thread_id
)
.
retrieve
(
recursive
=
True
)
annotated_content_info
=
get_annotated_content_infos
(
course_id
,
thread
,
request
.
user
)
annotated_content_info
=
utils
.
get_annotated_content_infos
(
course_id
,
thread
,
request
.
user
,
type
=
'thread'
)
context
=
{
'thread'
:
thread
.
to_dict
()}
html
=
render_to_string
(
'discussion/_ajax_single_thread.html'
,
context
)
...
...
lms/djangoapps/django_comment_client/utils.py
View file @
6fa02985
...
...
@@ -10,6 +10,8 @@ from django.conf import settings
import
operator
import
itertools
from
django_comment_client.permissions
import
check_permissions_by_view
_FULLMODULES
=
None
_DISCUSSIONINFO
=
None
...
...
@@ -122,3 +124,20 @@ class HtmlResponse(HttpResponse):
class
ViewNameMiddleware
(
object
):
def
process_view
(
self
,
request
,
view_func
,
view_args
,
view_kwargs
):
request
.
view_name
=
view_func
.
__name__
def
get_annotated_content_info
(
course_id
,
content
,
user
,
type
):
return
{
'editable'
:
check_permissions_by_view
(
user
,
course_id
,
content
,
"update_thread"
if
type
==
'thread'
else
"update_comment"
),
'can_reply'
:
check_permissions_by_view
(
user
,
course_id
,
content
,
"create_comment"
if
type
==
'thread'
else
"create_sub_comment"
),
'can_endorse'
:
check_permissions_by_view
(
user
,
course_id
,
content
,
"endorse_comment"
)
if
type
==
'comment'
else
False
,
'can_delete'
:
check_permissions_by_view
(
user
,
course_id
,
content
,
"delete_thread"
if
type
==
'thread'
else
"delete_comment"
),
}
def
get_annotated_content_infos
(
course_id
,
thread
,
user
,
type
=
'thread'
):
infos
=
{}
def
_annotate
(
content
,
type
):
infos
[
str
(
content
[
'id'
])]
=
get_annotated_content_info
(
course_id
,
content
,
user
,
type
)
for
child
in
content
.
get
(
'children'
,
[]):
_annotate
(
child
,
'comment'
)
_annotate
(
thread
,
type
)
return
infos
lms/static/coffee/src/discussion/content.coffee
View file @
6fa02985
...
...
@@ -81,6 +81,7 @@ initializeFollowThread = (thread) ->
Discussion
.
setWmdContent
$content
,
$local
,
"reply-body"
,
""
Discussion
.
setContentInfo
response
.
content
[
'id'
],
'can_reply'
,
true
Discussion
.
setContentInfo
response
.
content
[
'id'
],
'editable'
,
true
Discussion
.
extendContentInfo
response
.
content
[
'id'
],
response
[
'annotated_content_info'
]
Discussion
.
initializeContent
(
$comment
)
Discussion
.
bindContentEvents
(
$comment
)
$local
(
".discussion-reply-new"
).
hide
()
...
...
@@ -151,6 +152,7 @@ initializeFollowThread = (thread) ->
error
:
Discussion
.
formErrorHandler
(
$local
(
".discussion-update-errors"
))
success
:
(
response
,
textStatus
)
->
$discussionContent
.
replaceWith
(
response
.
html
)
Discussion
.
extendContentInfo
response
.
content
[
'id'
],
response
[
'annotated_content_info'
]
Discussion
.
initializeContent
(
$content
)
Discussion
.
bindContentEvents
(
$content
)
...
...
@@ -178,6 +180,7 @@ initializeFollowThread = (thread) ->
error
:
Discussion
.
formErrorHandler
(
$local
(
".discussion-update-errors"
))
success
:
(
response
,
textStatus
)
->
$discussionContent
.
replaceWith
(
response
.
html
)
Discussion
.
extendContentInfo
response
.
content
[
'id'
],
response
[
'annotated_content_info'
]
Discussion
.
initializeContent
(
$content
)
Discussion
.
bindContentEvents
(
$content
)
...
...
@@ -207,7 +210,7 @@ initializeFollowThread = (thread) ->
else
if
text
.
match
(
/[Oo]pen/
)
closed
=
false
else
return
console
.
log
"Unexpected text "
+
text
+
"for open/close thread."
console
.
log
"Unexpected text "
+
text
+
"for open/close thread."
Discussion
.
safeAjax
$elem
:
$
(
elem
)
...
...
@@ -278,7 +281,7 @@ initializeFollowThread = (thread) ->
type
:
"GET"
dataType
:
'json'
success
:
(
response
,
textStatus
)
->
Discussion
.
bulkExtendContentInfo
response
[
'annotated_content_info'
]
Discussion
.
extendContentInfo
response
.
content
[
'id'
],
response
[
'annotated_content_info'
]
$content
.
append
(
response
[
'html'
])
$content
.
find
(
".comment"
).
each
(
index
,
comment
)
->
Discussion
.
initializeContent
(
comment
)
...
...
@@ -368,10 +371,10 @@ initializeFollowThread = (thread) ->
MathJax
.
Hub
.
Queue
[
"Typeset"
,
MathJax
.
Hub
,
$contentBody
.
attr
(
"id"
)]
id
=
$content
.
attr
(
"_id"
)
if
not
Discussion
.
getContentInfo
id
,
'editable'
$local
(
".
discussio
n-edit"
).
remove
()
$local
(
".
admi
n-edit"
).
remove
()
if
not
Discussion
.
getContentInfo
id
,
'can_reply'
$local
(
".discussion-reply"
).
remove
()
if
not
Discussion
.
getContentInfo
id
,
'can_endorse'
$local
(
".
discussion-endorse-control
"
).
remove
()
$local
(
".
admin-endorse
"
).
remove
()
if
not
Discussion
.
getContentInfo
id
,
'can_delete'
$local
(
".
discussio
n-delete"
).
remove
()
$local
(
".
admi
n-delete"
).
remove
()
lms/static/coffee/src/discussion/discussion.coffee
View file @
6fa02985
...
...
@@ -51,7 +51,8 @@ initializeFollowDiscussion = (discussion) ->
$thread
=
$
(
response
.
html
)
$discussion
.
children
(
".threads"
).
prepend
(
$thread
)
Discussion
.
setWmdContent
$discussion
,
$local
,
"new-post-body"
,
""
Discussion
.
setContentInfo
response
.
content
[
'id'
],
'editable'
,
true
#Discussion.setContentInfo response.content['id'], 'editable', true
Discussion
.
extendContentInfo
response
.
content
[
'id'
],
response
[
'annotated_content_info'
]
Discussion
.
initializeContent
(
$thread
)
Discussion
.
bindContentEvents
(
$thread
)
$
(
".new-post-form"
).
addClass
(
"collapsed"
)
...
...
lms/static/coffee/src/discussion/utils.coffee
View file @
6fa02985
...
...
@@ -147,6 +147,10 @@ wmdEditors = {}
window
.
$
$annotated_content_info
[
id
]
||=
{}
window
.
$
$annotated_content_info
[
id
][
attr
]
=
value
extendContentInfo
:
(
id
,
newInfo
)
->
if
not
window
.
$
$annotated_content_info
?
window
.
$
$annotated_content_info
=
{}
window
.
$
$annotated_content_info
[
id
]
=
newInfo
bulkExtendContentInfo
:
(
newInfos
)
->
if
not
window
.
$
$annotated_content_info
?
window
.
$
$annotated_content_info
=
{}
...
...
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