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
36373bb4
Commit
36373bb4
authored
Jul 20, 2012
by
Bridger Maxwell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added an unenroll link (and confirmation) to the dashboard. Enrolling is now a POST of a form.
parent
9c90592d
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
112 additions
and
12 deletions
+112
-12
lms/djangoapps/courseware/views.py
+30
-8
lms/templates/dashboard.html
+50
-0
lms/templates/portal/course_about.html
+27
-1
lms/urls.py
+5
-3
No files found.
lms/djangoapps/courseware/views.py
View file @
36373bb4
from
collections
import
defaultdict
from
collections
import
defaultdict
import
json
import
logging
import
logging
import
urllib
import
urllib
import
itertools
import
itertools
...
@@ -8,7 +9,7 @@ from django.core.context_processors import csrf
...
@@ -8,7 +9,7 @@ from django.core.context_processors import csrf
from
django.core.urlresolvers
import
reverse
from
django.core.urlresolvers
import
reverse
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.contrib.auth.decorators
import
login_required
from
django.contrib.auth.decorators
import
login_required
from
django.http
import
Http404
from
django.http
import
Http404
,
HttpResponse
from
django.shortcuts
import
redirect
from
django.shortcuts
import
redirect
from
mitxmako.shortcuts
import
render_to_response
,
render_to_string
from
mitxmako.shortcuts
import
render_to_response
,
render_to_string
#from django.views.decorators.csrf import ensure_csrf_cookie
#from django.views.decorators.csrf import ensure_csrf_cookie
...
@@ -271,14 +272,37 @@ def course_about(request, course_id):
...
@@ -271,14 +272,37 @@ def course_about(request, course_id):
@login_required
@login_required
@ensure_csrf_cookie
def
change_enrollment
(
request
):
def
enroll
(
request
,
course_id
):
if
request
.
method
!=
"POST"
:
course
=
check_course
(
course_id
,
course_must_be_open
=
False
)
raise
Http404
course_id
=
request
.
POST
.
get
(
"course_id"
,
None
)
if
course_id
==
None
:
return
HttpResponse
(
json
.
dumps
({
'success'
:
False
,
'error'
:
'There was an error receiving the course id.'
}))
action
=
request
.
POST
.
get
(
"enrollment_action"
,
""
)
user
=
request
.
user
user
=
request
.
user
enrollment
,
created
=
CourseEnrollment
.
objects
.
get_or_create
(
user
=
user
,
course_id
=
course
.
id
)
if
action
==
"enroll"
:
# Make sure the course exists
# We don't do this check on unenroll, or a bad course id can't be unenrolled from
course
=
check_course
(
course_id
,
course_must_be_open
=
False
)
enrollment
,
created
=
CourseEnrollment
.
objects
.
get_or_create
(
user
=
user
,
course_id
=
course
.
id
)
return
HttpResponse
(
json
.
dumps
({
'success'
:
True
}))
elif
action
==
"unenroll"
:
try
:
enrollment
=
CourseEnrollment
.
objects
.
get
(
user
=
user
,
course_id
=
course_id
)
enrollment
.
delete
()
return
HttpResponse
(
json
.
dumps
({
'success'
:
True
}))
except
CourseEnrollment
.
DoesNotExist
:
return
HttpResponse
(
json
.
dumps
({
'success'
:
False
,
'error'
:
'You are not enrolled for this course.'
}))
else
:
return
HttpResponse
(
json
.
dumps
({
'success'
:
False
,
'error'
:
'Invalid enrollment_action.'
}))
return
HttpResponse
(
json
.
dumps
({
'success'
:
False
,
'error'
:
'We weren
\'
t able to unenroll you. Please try again.'
}))
return
redirect
(
reverse
(
'dashboard'
))
@ensure_csrf_cookie
@ensure_csrf_cookie
...
@@ -295,5 +319,3 @@ def university_profile(request, org_id):
...
@@ -295,5 +319,3 @@ def university_profile(request, org_id):
template_file
=
"university_profile/{0}.html"
.
format
(
org_id
)
.
lower
()
template_file
=
"university_profile/{0}.html"
.
format
(
org_id
)
.
lower
()
return
render_to_response
(
template_file
,
context
)
return
render_to_response
(
template_file
,
context
)
lms/templates/dashboard.html
View file @
36373bb4
...
@@ -51,6 +51,7 @@
...
@@ -51,6 +51,7 @@
<section
class=
"course-status"
>
<section
class=
"course-status"
>
<p>
Class Starts -
<span>
9/2/2012
</span></div>
<p>
Class Starts -
<span>
9/2/2012
</span></div>
</section>
</section>
<a
href=
"#unenroll-modal"
class=
"unenroll"
rel=
"leanModal"
data-course-id=
"${course.id}"
data-course-number=
"${course.number}"
>
Unenroll
</a>
<section
class=
"meta"
>
<section
class=
"meta"
>
<div
class=
"course-work-icon"
></div>
<div
class=
"course-work-icon"
></div>
<div
class=
"progress"
>
<div
class=
"progress"
>
...
@@ -75,3 +76,52 @@
...
@@ -75,3 +76,52 @@
</section>
</section>
</section>
</section>
<section
id=
"unenroll-modal"
class=
"modal unenroll-modal"
>
<div
class=
"inner-wrapper"
>
<header>
<h2>
Are you sure you want to unenroll from
<span
id=
"unenroll_course_number"
></span>
?
</h2>
<hr>
</header>
<form
id=
"unenroll_form"
method=
"post"
data-remote=
"true"
action=
"${reverse('change_enrollment')}"
>
<input
name=
"course_id"
id=
"unenroll_course_id"
type=
"hidden"
/>
<input
name=
"enrollment_action"
type=
"hidden"
value=
"unenroll"
/>
<div
class=
"submit"
>
<input
name=
"submit"
type=
"submit"
value=
"Unenroll"
/>
</div>
</form>
<div
class=
"close-modal"
>
<div
class=
"inner"
>
<p>
✕
</p>
</div>
</div>
</div>
</section>
<script
type=
"text/javascript"
>
(
function
()
{
$
(
".unenroll"
).
click
(
function
(
event
)
{
$
(
"#unenroll_course_id"
).
val
(
$
(
event
.
target
).
data
(
"course-id"
)
);
$
(
"#unenroll_course_number"
).
text
(
$
(
event
.
target
).
data
(
"course-number"
)
);
});
$
(
document
).
delegate
(
'#unenroll_form'
,
'ajax:success'
,
function
(
data
,
json
,
xhr
)
{
if
(
json
.
success
)
{
location
.
href
=
"${reverse('dashboard')}"
;
}
else
{
if
(
$
(
'#unenroll_error'
).
length
==
0
)
{
$
(
'#unenroll_form'
).
prepend
(
'<div id="unenroll_error" class="modal-form-error"></div>'
);
}
$
(
'#unenroll_error'
).
text
(
json
.
error
).
stop
().
css
(
"display"
,
"block"
);
}
});
})(
this
)
</script>
lms/templates/portal/course_about.html
View file @
36373bb4
...
@@ -22,7 +22,7 @@
...
@@ -22,7 +22,7 @@
%if registered:
%if registered:
<span
class=
"register disabled"
>
You are registered for this course (${course.number}).
</span>
<span
class=
"register disabled"
>
You are registered for this course (${course.number}).
</span>
%else:
%else:
<a
href=
"
${reverse('enroll', args=[course.id])}
"
class=
"register"
>
Register for ${course.number}
</a>
<a
href=
"
#
"
class=
"register"
>
Register for ${course.number}
</a>
%endif
%endif
%else:
%else:
<a
href=
"#signup-modal"
class=
"register"
rel=
"leanModal"
data-notice=
"You must Sign Up in order to register"
>
Register for ${course.number}
</a>
<a
href=
"#signup-modal"
class=
"register"
rel=
"leanModal"
data-notice=
"You must Sign Up in order to register"
>
Register for ${course.number}
</a>
...
@@ -105,4 +105,30 @@
...
@@ -105,4 +105,30 @@
</section>
</section>
</section>
</section>
%if not registered:
<div
display=
"hidden"
>
<form
id=
"enroll_form"
method=
"post"
data-remote=
"true"
action=
"${reverse('change_enrollment')}"
>
<input
name=
"course_id"
type=
"hidden"
value=
"${course.id}"
>
<input
name=
"enrollment_action"
type=
"hidden"
value=
"enroll"
>
<div
class=
"submit"
>
<input
name=
"submit"
type=
"submit"
value=
"enroll"
>
</div>
</form>
</div>
<script
type=
"text/javascript"
>
(
function
()
{
$
(
".register"
).
click
(
function
()
{
$
(
"#enroll_form"
).
submit
();
});
$
(
document
).
delegate
(
'#enroll_form'
,
'ajax:success'
,
function
(
data
,
json
,
xhr
)
{
if
(
json
.
success
)
{
location
.
href
=
"${reverse('dashboard')}"
;
}
});
})(
this
)
</script>
%endif
<
%
include
file=
"../video_modal.html"
/>
<
%
include
file=
"../video_modal.html"
/>
lms/urls.py
View file @
36373bb4
...
@@ -100,14 +100,16 @@ if settings.COURSEWARE_ENABLED:
...
@@ -100,14 +100,16 @@ if settings.COURSEWARE_ENABLED:
url
(
r'^save_circuit/(?P<circuit>[^/]*)$'
,
'circuit.views.save_circuit'
),
url
(
r'^save_circuit/(?P<circuit>[^/]*)$'
,
'circuit.views.save_circuit'
),
url
(
r'^calculate$'
,
'util.views.calculate'
),
url
(
r'^calculate$'
,
'util.views.calculate'
),
url
(
r'^heartbeat$'
,
include
(
'heartbeat.urls'
)),
url
(
r'^heartbeat$'
,
include
(
'heartbeat.urls'
)),
url
(
r'^change_enrollment$'
,
'courseware.views.change_enrollment'
,
name
=
"change_enrollment"
),
# Multicourse related:
# Multicourse related:
url
(
r'^courses/?$'
,
'courseware.views.courses'
,
name
=
"courses"
),
url
(
r'^courses/?$'
,
'courseware.views.courses'
,
name
=
"courses"
),
#About the course
#About the course
url
(
r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/about$'
,
url
(
r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/about$'
,
'courseware.views.course_about'
,
name
=
"about_course"
),
'courseware.views.course_about'
,
name
=
"about_course"
),
url
(
r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/enroll$'
,
'courseware.views.enroll'
,
name
=
"enroll"
),
#Inside the course
#Inside the course
url
(
r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/info$'
,
url
(
r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/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