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
4e4b6acc
Commit
4e4b6acc
authored
Oct 12, 2012
by
Chris Dodge
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wip: create new course
parent
0e277277
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
89 additions
and
6 deletions
+89
-6
cms/djangoapps/contentstore/views.py
+26
-0
cms/static/js/base.js
+39
-0
cms/templates/index.html
+17
-2
cms/urls.py
+1
-2
common/lib/xmodule/xmodule/course_module.py
+2
-1
common/lib/xmodule/xmodule/templates.py
+4
-1
No files found.
cms/djangoapps/contentstore/views.py
View file @
4e4b6acc
...
...
@@ -109,6 +109,7 @@ def index(request):
courses
=
filter
(
lambda
course
:
has_access
(
request
.
user
,
course
.
location
),
courses
)
return
render_to_response
(
'index.html'
,
{
'new_course_template'
:
Location
(
'i4x'
,
'edx'
,
'templates'
,
'course'
,
'Empty'
),
'courses'
:
[(
course
.
metadata
.
get
(
'display_name'
),
reverse
(
'course_index'
,
args
=
[
course
.
location
.
org
,
...
...
@@ -597,7 +598,32 @@ def unpublish_unit(request):
return
HttpResponse
()
@login_required
@expect_json
def
create_new_course
(
request
):
template
=
Location
(
request
.
POST
[
'template'
])
org
=
request
.
POST
.
get
(
'org'
)
number
=
request
.
POST
.
get
(
'number'
)
display_name
=
request
.
POST
.
get
(
'display_name'
)
dest_location
=
Location
(
'i4x'
,
org
,
number
,
'course'
,
Location
.
clean
(
display_name
))
logging
.
debug
(
dest_location
)
logging
.
debug
(
template
)
new_course
=
modulestore
(
'direct'
)
.
clone_item
(
template
,
dest_location
)
if
display_name
is
not
None
:
new_course
.
metadata
[
'display_name'
]
=
display_name
# we need a 'data_dir' for legacy reasons
new_course
.
metadata
[
'data_dir'
]
=
uuid4
()
.
hex
modulestore
(
'direct'
)
.
update_metadata
(
new_course
.
location
.
url
(),
new_course
.
own_metadata
)
create_all_course_groups
(
request
.
user
,
new_course
.
location
)
return
HttpResponse
(
json
.
dumps
({
'id'
:
new_course
.
location
.
url
()}))
@login_required
@expect_json
...
...
cms/static/js/base.js
View file @
4e4b6acc
...
...
@@ -58,6 +58,8 @@ $(document).ready(function() {
e
.
preventDefault
();
$
(
'.import .file-input'
).
click
();
});
$
(
'.new-course-button'
).
bind
(
'click'
,
addNewCourse
);
});
function
showImportSubmit
(
e
)
{
...
...
@@ -406,6 +408,7 @@ function addNewSection(e) {
$newSection
.
find
(
'.new-section-name-cancel'
).
bind
(
'click'
,
cancelNewSection
);
}
function
saveNewSection
(
e
)
{
e
.
preventDefault
();
...
...
@@ -430,6 +433,42 @@ function cancelNewSection(e) {
$
(
this
).
parents
(
'section.new-section'
).
remove
();
}
function
addNewCourse
(
e
)
{
e
.
preventDefault
();
var
$newCourse
=
$
(
$
(
'#new-course-template'
).
html
());
$
(
'.new-course-button'
).
after
(
$newCourse
);
$newCourse
.
find
(
'.new-course-org'
).
focus
().
select
();
$newCourse
.
find
(
'.new-course-save'
).
bind
(
'click'
,
saveNewCourse
);
$newCourse
.
find
(
'.new-course-cancel'
).
bind
(
'click'
,
cancelNewCourse
);
}
function
saveNewCourse
(
e
)
{
e
.
preventDefault
();
template
=
$
(
this
).
data
(
'template'
);
org
=
$
(
this
).
prevAll
(
'.new-course-org'
).
val
();
number
=
$
(
this
).
prevAll
(
'.new-course-number'
).
val
();
display_name
=
$
(
this
).
prevAll
(
'.new-course-name'
).
val
();
$
.
post
(
'/create_new_course'
,
{
'template'
:
template
,
'org'
:
org
,
'number'
:
number
,
'display_name'
:
display_name
,
},
function
(
data
)
{
if
(
data
.
id
!=
undefined
)
location
.
reload
();
});
}
function
cancelNewCourse
(
e
)
{
e
.
preventDefault
();
$
(
this
).
parents
(
'section.new-course'
).
remove
();
}
function
addNewSubsection
(
e
)
{
e
.
preventDefault
();
var
$section
=
$
(
this
).
closest
(
'.courseware-section'
);
...
...
cms/templates/index.html
View file @
4e4b6acc
...
...
@@ -2,13 +2,28 @@
<
%
block
name=
"bodyclass"
>
index
</
%
block>
<
%
block
name=
"title"
>
Courses
</
%
block>
<
%
block
name=
"content"
>
<
%
block
name=
"header_extras"
>
<script
type=
"text/template"
id=
"new-course-template"
>
<
section
class
=
"courseware-section new-course"
>
<
header
>
<
div
class
=
"item-details"
>
<
h3
class
=
"course-info"
>
<
input
type
=
"text"
placeholder
=
"Organization"
class
=
"new-course-org"
/>
<
input
type
=
"text"
placeholder
=
"Course Number"
class
=
"new-course-number"
/>
<
input
type
=
"text"
placeholder
=
"Course Name"
class
=
"new-course-name"
/>
<
a
href
=
"#"
class
=
"new-course-save"
data
-
template
=
"${new_course_template}"
>
Save
<
/a><a href="#" class="new-course-cancel">Cancel</
a
><
/h3
>
<
/div
>
<
/header
>
<
/section
>
</script>
</
%
block>
<
%
block
name=
"content"
>
<div
class=
"main-wrapper"
>
<div
class=
"inner-wrapper"
>
<h1>
My Courses
</h1>
<article
class=
"my-classes"
>
<a
href=
"#"
class=
"new-course-button
wip-box
"
><span
class=
"plus-icon"
></span>
New Course
</a>
<a
href=
"#"
class=
"new-course-button"
><span
class=
"plus-icon"
></span>
New Course
</a>
<ul
class=
"class-list"
>
%for course, url in courses:
<li>
...
...
cms/urls.py
View file @
4e4b6acc
...
...
@@ -16,8 +16,7 @@ urlpatterns = ('',
url
(
r'^create_draft$'
,
'contentstore.views.create_draft'
,
name
=
'create_draft'
),
url
(
r'^publish_draft$'
,
'contentstore.views.publish_draft'
,
name
=
'publish_draft'
),
url
(
r'^unpublish_unit$'
,
'contentstore.views.unpublish_unit'
,
name
=
'unpublish_unit'
),
url
(
r'^create_new_course'
,
'contentstore.views.create_new_course'
,
name
=
'create_new_course'
),
url
(
r'^(?P<org>[^/]+)/(?P<course>[^/]+)/course/(?P<name>[^/]+)$'
,
'contentstore.views.course_index'
,
name
=
'course_index'
),
...
...
common/lib/xmodule/xmodule/course_module.py
View file @
4e4b6acc
...
...
@@ -16,6 +16,8 @@ log = logging.getLogger(__name__)
class
CourseDescriptor
(
SequenceDescriptor
):
module_class
=
SequenceModule
template_dir_name
=
'course'
class
Textbook
:
def
__init__
(
self
,
title
,
book_url
):
self
.
title
=
title
...
...
@@ -64,7 +66,6 @@ class CourseDescriptor(SequenceDescriptor):
def
__init__
(
self
,
system
,
definition
=
None
,
**
kwargs
):
super
(
CourseDescriptor
,
self
)
.
__init__
(
system
,
definition
,
**
kwargs
)
self
.
textbooks
=
[]
for
title
,
book_url
in
self
.
definition
[
'data'
][
'textbooks'
]:
try
:
...
...
common/lib/xmodule/xmodule/templates.py
View file @
4e4b6acc
...
...
@@ -31,6 +31,8 @@ def all_templates():
templates
=
defaultdict
(
list
)
for
category
,
descriptor
in
XModuleDescriptor
.
load_classes
():
if
category
==
'course'
:
logging
.
debug
(
descriptor
.
templates
())
templates
[
category
]
=
descriptor
.
templates
()
return
templates
...
...
@@ -65,8 +67,9 @@ def update_templates():
template_location
=
Location
(
'i4x'
,
'edx'
,
'templates'
,
category
,
Location
.
clean_for_url_name
(
template
.
metadata
[
'display_name'
]))
try
:
json_data
=
template
.
_asdict
()
json_data
=
{
'definition'
:
{
'data'
:
template
.
data
,
'children'
:
template
.
children
}}
json_data
[
'location'
]
=
template_location
.
dict
()
XModuleDescriptor
.
load_from_json
(
json_data
,
TemplateTestSystem
())
except
:
log
.
warning
(
'Unable to instantiate {cat} from template {template}, skipping'
.
format
(
...
...
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