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
4c8a45f8
Commit
4c8a45f8
authored
Mar 14, 2013
by
Vik Paruchuri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Code to add in an open ended tab automatically
parent
4b5837ff
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
44 additions
and
5 deletions
+44
-5
cms/djangoapps/contentstore/utils.py
+11
-1
cms/djangoapps/contentstore/views.py
+26
-2
cms/djangoapps/models/settings/course_metadata.py
+7
-2
No files found.
cms/djangoapps/contentstore/utils.py
View file @
4c8a45f8
...
...
@@ -2,9 +2,10 @@ from django.conf import settings
from
xmodule.modulestore
import
Location
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore.exceptions
import
ItemNotFoundError
import
copy
DIRECT_ONLY_CATEGORIES
=
[
'course'
,
'chapter'
,
'sequential'
,
'about'
,
'static_tab'
,
'course_info'
]
OPEN_ENDED_PANEL
=
{
"name"
:
"Open Ended Panel"
,
"type"
:
"open_ended"
}
def
get_modulestore
(
location
):
"""
...
...
@@ -158,3 +159,12 @@ def update_item(location, value):
get_modulestore
(
location
)
.
delete_item
(
location
)
else
:
get_modulestore
(
location
)
.
update_item
(
location
,
value
)
def
add_open_ended_panel_tab
(
course
):
course_tabs
=
copy
.
copy
(
course
.
tabs
)
changed
=
False
if
OPEN_ENDED_PANEL
not
in
course_tabs
:
course_tabs
.
append
(
OPEN_ENDED_PANEL
)
changed
=
True
return
changed
,
course_tabs
cms/djangoapps/contentstore/views.py
View file @
4c8a45f8
...
...
@@ -47,6 +47,7 @@ from auth.authz import is_user_in_course_group_role, get_users_in_course_group_b
from
auth.authz
import
get_user_by_email
,
add_user_to_course_group
,
remove_user_from_course_group
from
auth.authz
import
INSTRUCTOR_ROLE_NAME
,
STAFF_ROLE_NAME
,
create_all_course_groups
from
.utils
import
get_course_location_for_item
,
get_lms_link_for_item
,
compute_unit_state
,
get_date_display
,
UnitState
,
get_course_for_item
from
.utils
import
add_open_ended_panel_tab
from
xmodule.modulestore.xml_importer
import
import_from_xml
from
contentstore.course_info_model
import
get_course_updates
,
\
...
...
@@ -68,7 +69,8 @@ log = logging.getLogger(__name__)
COMPONENT_TYPES
=
[
'customtag'
,
'discussion'
,
'html'
,
'problem'
,
'video'
]
ADVANCED_COMPONENT_TYPES
=
[
'annotatable'
,
'combinedopenended'
,
'peergrading'
]
OPEN_ENDED_COMPONENT_TYPES
=
[
"combinedopenended"
,
"peergrading"
]
ADVANCED_COMPONENT_TYPES
=
[
'annotatable'
]
+
OPEN_ENDED_COMPONENT_TYPES
ADVANCED_COMPONENT_CATEGORY
=
'advanced'
ADVANCED_COMPONENT_POLICY_KEY
=
'advanced_modules'
...
...
@@ -295,6 +297,9 @@ def edit_unit(request, location):
# in ADVANCED_COMPONENT_TYPES that should be enabled for the course.
course_metadata
=
CourseMetadata
.
fetch
(
course
.
location
)
course_advanced_keys
=
course_metadata
.
get
(
ADVANCED_COMPONENT_POLICY_KEY
,
[])
log
.
debug
(
course
.
tabs
)
log
.
debug
(
type
(
course
.
tabs
))
log
.
debug
(
"LOOK HERE NOW!!!!!"
)
# Set component types according to course policy file
component_types
=
list
(
COMPONENT_TYPES
)
...
...
@@ -1329,7 +1334,26 @@ def course_advanced_updates(request, org, course, name):
return
HttpResponse
(
json
.
dumps
(
CourseMetadata
.
delete_key
(
location
,
json
.
loads
(
request
.
body
))),
mimetype
=
"application/json"
)
elif
real_method
==
'POST'
or
real_method
==
'PUT'
:
# NOTE: request.POST is messed up because expect_json cloned_request.POST.copy() is creating a defective entry w/ the whole payload as the key
return
HttpResponse
(
json
.
dumps
(
CourseMetadata
.
update_from_json
(
location
,
json
.
loads
(
request
.
body
))),
mimetype
=
"application/json"
)
request_body
=
json
.
loads
(
request
.
body
)
filter_tabs
=
True
if
ADVANCED_COMPONENT_POLICY_KEY
in
request_body
:
log
.
debug
(
"Advanced component in."
)
for
oe_type
in
OPEN_ENDED_COMPONENT_TYPES
:
log
.
debug
(
request_body
[
ADVANCED_COMPONENT_POLICY_KEY
])
if
oe_type
in
request_body
[
ADVANCED_COMPONENT_POLICY_KEY
]:
log
.
debug
(
"OE type in."
)
course_module
=
modulestore
()
.
get_item
(
location
)
changed
,
new_tabs
=
add_open_ended_panel_tab
(
course_module
)
log
.
debug
(
new_tabs
)
if
changed
:
request_body
.
update
({
'tabs'
:
new_tabs
})
filter_tabs
=
False
break
log
.
debug
(
request_body
)
log
.
debug
(
filter_tabs
)
log
.
debug
(
"LOOK HERE FOR TAB SAVING!!!!"
)
response_json
=
json
.
dumps
(
CourseMetadata
.
update_from_json
(
location
,
request_body
,
filter_tabs
=
filter_tabs
))
return
HttpResponse
(
response_json
,
mimetype
=
"application/json"
)
@login_required
...
...
cms/djangoapps/models/settings/course_metadata.py
View file @
4c8a45f8
from
xmodule.modulestore
import
Location
from
contentstore.utils
import
get_modulestore
from
xmodule.x_module
import
XModuleDescriptor
import
copy
class
CourseMetadata
(
object
):
...
...
@@ -30,7 +31,7 @@ class CourseMetadata(object):
return
course
@classmethod
def
update_from_json
(
cls
,
course_location
,
jsondict
):
def
update_from_json
(
cls
,
course_location
,
jsondict
,
filter_tabs
=
True
):
"""
Decode the json into CourseMetadata and save any changed attrs to the db.
...
...
@@ -40,9 +41,13 @@ class CourseMetadata(object):
dirty
=
False
filtered_list
=
copy
.
copy
(
cls
.
FILTERED_LIST
)
if
not
filter_tabs
:
filtered_list
.
remove
(
"tabs"
)
for
k
,
v
in
jsondict
.
iteritems
():
# should it be an error if one of the filtered list items is in the payload?
if
k
not
in
cls
.
FILTERED_LIST
and
(
k
not
in
descriptor
.
metadata
or
descriptor
.
metadata
[
k
]
!=
v
):
if
k
not
in
filtered_list
and
(
k
not
in
descriptor
.
metadata
or
descriptor
.
metadata
[
k
]
!=
v
):
dirty
=
True
descriptor
.
metadata
[
k
]
=
v
...
...
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