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
OpenEdx
edx-platform
Commits
8081abe8
Commit
8081abe8
authored
Sep 29, 2017
by
Albert St. Aubin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
changes to the prototype to add the enroll/unenroll functions to
entitlements
parent
7bcf85e0
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
64 additions
and
14 deletions
+64
-14
common/djangoapps/course_modes/views.py
+2
-2
common/djangoapps/entitlements/models.py
+10
-2
common/djangoapps/entitlements/utils.py
+19
-3
common/djangoapps/student/models.py
+3
-3
common/djangoapps/student/views.py
+8
-2
lms/static/js/dashboard/legacy.js
+7
-0
lms/templates/dashboard/_dashboard_course_listing.html
+13
-0
openedx/core/djangoapps/programs/utils.py
+2
-2
No files found.
common/djangoapps/course_modes/views.py
View file @
8081abe8
...
...
@@ -25,7 +25,7 @@ from lms.djangoapps.commerce.utils import EcommerceService
from
lms.djangoapps.experiments.utils
import
get_experiment_user_metadata_context
from
openedx.core.djangoapps.embargo
import
api
as
embargo_api
from
student.models
import
CourseEnrollment
from
entitlements.utils
import
get_entitlement_data
from
entitlements.utils
import
is_user_entitled_to_course
from
third_party_auth.decorators
import
tpa_hint_ends_existing_session
from
util
import
organizations_helpers
as
organization_api
from
util.db
import
outer_atomic
...
...
@@ -86,7 +86,7 @@ class ChooseModeView(View):
return
redirect
(
embargo_redirect
)
enrollment_mode
,
is_active
=
CourseEnrollment
.
enrollment_mode_for_user
(
request
.
user
,
course_key
)
entitlement_data
=
get_entitlement_data
(
request
.
user
,
course_key
)
entitlement_data
=
is_user_entitled_to_course
(
request
.
user
,
course_key
)
modes
=
CourseMode
.
modes_for_course_dict
(
course_key
)
ecommerce_service
=
EcommerceService
()
...
...
common/djangoapps/entitlements/models.py
View file @
8081abe8
...
...
@@ -36,12 +36,20 @@ class CourseEntitlement(models.Model):
@classmethod
def
get_user_course_entitlement
(
cls
,
user
,
course
):
# TODO: Implement check to see if the Course ID is valid
return
cls
.
objects
.
filter
(
user_id
=
user
,
root_course_id
=
course
)
.
all
()
return
cls
.
objects
.
filter
(
user_id
=
user
,
root_course_id
=
course
)
.
first
()
@classmethod
def
set_enrollment
(
cls
,
user
,
course_key
,
course_enrollment
):
def
set_en
titlement_en
rollment
(
cls
,
user
,
course_key
,
course_enrollment
):
course
=
course_key
.
org
+
'+'
+
course_key
.
course
return
cls
.
objects
.
filter
(
user_id
=
user
,
root_course_id
=
course
)
.
update
(
enrollment_course_id
=
course_enrollment
)
@classmethod
def
remove_enrollment
(
cls
,
user
,
course_key
):
course
=
course_key
.
org
+
'+'
+
course_key
.
course
return
cls
.
objects
.
filter
(
user_id
=
user
,
root_course_id
=
course
)
.
update
(
enrollment_course_id
=
None
)
common/djangoapps/entitlements/utils.py
View file @
8081abe8
from
.models
import
CourseEntitlement
from
opaque_keys.edx.keys
import
CourseKey
def
get_json_entitlements_by_user
(
self
,
username
):
...
...
@@ -27,11 +28,26 @@ def get_list_course_entitlements(user):
return
list_entitlements
def
get_entitlement_data
(
user
,
course
):
def
is_user_entitled_to_course
(
user
,
course
):
is_entitled
=
False
course_entitlement
s
=
CourseEntitlement
.
get_user_course_entitlement
(
user
,
course
)
if
len
(
course_entitlements
)
>
0
and
course_entitlements
[
0
]
.
is_active
:
course_entitlement
=
CourseEntitlement
.
get_user_course_entitlement
(
user
,
course
)
if
course_entitlement
is
not
None
and
course_entitlement
.
is_active
:
is_entitled
=
True
return
is_entitled
def
is_user_entitlement_enrolled
(
user
,
course_run_id
):
entitlement
=
CourseEntitlement
.
get_user_course_entitlement
(
user
,
get_course_id
(
course_run_id
))
if
(
entitlement
is
not
None
and
entitlement
.
enrollment_course_id
is
not
None
and
entitlement
.
is_active
):
return
True
return
False
def
get_course_id
(
course_run_id
):
return
course_run_id
.
org
+
'+'
+
course_run_id
.
course
common/djangoapps/student/models.py
View file @
8081abe8
...
...
@@ -53,7 +53,7 @@ from course_modes.models import CourseMode
from
courseware.models
import
DynamicUpgradeDeadlineConfiguration
,
CourseDynamicUpgradeDeadlineConfiguration
from
enrollment.api
import
_default_course_mode
from
entitlements.utils
import
get_entitlement_data
from
entitlements.utils
import
is_user_entitled_to_course
,
is_user_entitlement_enrolled
from
entitlements.models
import
CourseEntitlement
from
openedx.core.djangoapps.content.course_overviews.models
import
CourseOverview
from
openedx.core.djangoapps.schedules.models
import
ScheduleConfig
...
...
@@ -1336,8 +1336,8 @@ class CourseEnrollment(models.Model):
enrollment
.
update_enrollment
(
is_active
=
True
,
mode
=
mode
)
enrollment
.
send_signal
(
EnrollStatusChange
.
enroll
)
if
get_entitlement_data
(
user
,
course_key
.
org
+
'+'
+
course_key
.
course
):
CourseEntitlement
.
set_enrollment
(
user
,
course_key
,
enrollment
)
if
is_user_entitled_to_course
(
user
,
course_key
.
org
+
'+'
+
course_key
.
course
):
CourseEntitlement
.
set_en
titlement_en
rollment
(
user
,
course_key
,
enrollment
)
return
enrollment
...
...
common/djangoapps/student/views.py
View file @
8081abe8
...
...
@@ -63,6 +63,8 @@ from certificates.models import ( # pylint: disable=import-error
from
course_modes.models
import
CourseMode
from
courseware.access
import
has_access
from
courseware.courses
import
get_courses
,
sort_by_announcement
,
sort_by_start_date
# pylint: disable=import-error
from
entitlements.models
import
CourseEntitlement
from
entitlements.utils
import
is_user_entitled_to_course
,
is_user_entitlement_enrolled
from
django_comment_common.models
import
assign_role
from
entitlements.utils
import
get_list_course_entitlements
from
edxmako.shortcuts
import
render_to_response
,
render_to_string
...
...
@@ -1301,8 +1303,12 @@ def change_enrollment(request, check_access=True):
if
certificate_info
.
get
(
'status'
)
in
DISABLE_UNENROLL_CERT_STATES
:
return
HttpResponseBadRequest
(
_
(
"Your certificate prevents you from unenrolling from this course"
))
CourseEnrollment
.
unenroll
(
user
,
course_id
)
REFUND_ORDER
.
send
(
sender
=
None
,
course_enrollment
=
enrollment
)
if
is_user_entitlement_enrolled
(
user
,
course_id
):
CourseEnrollment
.
unenroll
(
user
,
course_id
,
skip_refund
=
True
)
CourseEntitlement
.
remove_enrollment
(
user
,
course_id
)
else
:
CourseEnrollment
.
unenroll
(
user
,
course_id
)
REFUND_ORDER
.
send
(
sender
=
None
,
course_enrollment
=
enrollment
)
return
HttpResponse
()
else
:
return
HttpResponseBadRequest
(
_
(
"Enrollment action is invalid"
))
...
...
lms/static/js/dashboard/legacy.js
View file @
8081abe8
...
...
@@ -123,6 +123,13 @@
Logger
.
log
(
'edx.course.enrollment.upgrade.clicked'
,
[
user
,
course
],
{
location
:
'learner_dashboard'
});
});
$
(
'#switch-enrollment'
).
click
(
function
(
event
)
{
var
user
=
$
(
event
.
target
).
closest
(
'.action-switch'
).
data
(
'user'
),
course
=
$
(
event
.
target
).
closest
(
'.action-switch'
).
data
(
'course-id'
);
// Logger.log('edx.course.enrollment.upgrade.clicked', [user, course], {location: 'learner_dashboard'});
});
$
(
'.action-email-settings'
).
click
(
function
(
event
)
{
$
(
'#email_settings_course_id'
).
val
(
$
(
event
.
target
).
data
(
'course-id'
));
$
(
'#email_settings_course_number'
).
text
(
$
(
event
.
target
).
data
(
'course-number'
));
...
...
lms/templates/dashboard/_dashboard_course_listing.html
View file @
8081abe8
...
...
@@ -248,6 +248,19 @@ from util.course import get_link_for_about_page, get_encoded_course_sharing_utm_
</a>
% endif
</li>
<li>
<span
id=
"switch-enrollment"
class=
"action action-switch"
data-course-id=
"${course_overview.id}"
data-course-number=
"${course_overview.number}"
data-course-name=
"${course_overview.display_name_with_default}"
data-dashboard-index=
"${dashboard_index}"
data-course-refund-url=
"${course_refund_url}"
data-course-is-paid-course=
"${is_paid_course}"
data-course-cert-name-long=
"${cert_name_long}"
data-course-enrollment-mode=
"${enrollment.mode}"
>
${_('Switch Entitlement')}
</span>
</li>
% endif
<li
class=
"actions-item"
id=
"actions-item-email-settings-${dashboard_index}"
role=
"menuitem"
>
% if show_email_settings:
...
...
openedx/core/djangoapps/programs/utils.py
View file @
8081abe8
...
...
@@ -27,7 +27,7 @@ from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
from
openedx.core.djangoapps.content.course_overviews.models
import
CourseOverview
from
openedx.core.djangoapps.credentials.utils
import
get_credentials
from
student.models
import
CourseEnrollment
from
entitlements.utils
import
get_entitlement_data
from
entitlements.utils
import
is_user_entitled_to_course
from
util.date_utils
import
strftime_localized
from
xmodule.modulestore.django
import
modulestore
...
...
@@ -404,7 +404,7 @@ class ProgramDataExtender(object):
# Look at each Course and check if it has an entitlement
# Set a boolean on the Course
for
course
in
self
.
data
[
'courses'
]:
is_entitled
=
get_entitlement_data
(
self
.
user
,
course
.
get
(
'key'
,
''
))
is_entitled
=
is_user_entitled_to_course
(
self
.
user
,
course
.
get
(
'key'
,
''
))
course
[
'is_entitlement'
]
=
is_entitled
def
_attach_course_run_certificate_url
(
self
,
run_mode
):
...
...
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