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
8f6203f1
Commit
8f6203f1
authored
May 18, 2017
by
Diana Huang
Committed by
GitHub
May 18, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #15119 from edx/diana/masquerade-issues
Only show preview bar if student can view it.
parents
31e00d58
3e71a453
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
48 additions
and
13 deletions
+48
-13
lms/djangoapps/courseware/access_utils.py
+9
-0
lms/djangoapps/courseware/tests/test_views.py
+22
-1
lms/djangoapps/courseware/testutils.py
+4
-2
lms/djangoapps/courseware/views/index.py
+4
-5
lms/djangoapps/courseware/views/views.py
+9
-5
No files found.
lms/djangoapps/courseware/access_utils.py
View file @
8f6203f1
...
...
@@ -80,3 +80,12 @@ def in_preview_mode():
hostname
=
get_current_request_hostname
()
preview_lms_base
=
settings
.
FEATURES
.
get
(
'PREVIEW_LMS_BASE'
,
None
)
return
bool
(
preview_lms_base
and
hostname
and
hostname
.
split
(
':'
)[
0
]
==
preview_lms_base
.
split
(
':'
)[
0
])
def
is_course_open_for_learner
(
user
,
course
):
"""
Check if the course is open for learners based on the start date.
"""
now
=
datetime
.
now
(
UTC
())
effective_start
=
adjust_start_date
(
user
,
course
.
days_early_for_beta
,
course
.
start
,
course
.
id
)
return
not
(
not
in_preview_mode
()
and
now
<
effective_start
)
lms/djangoapps/courseware/tests/test_views.py
View file @
8f6203f1
...
...
@@ -40,6 +40,7 @@ from certificates.tests.factories import (
from
commerce.models
import
CommerceConfiguration
from
course_modes.models
import
CourseMode
from
course_modes.tests.factories
import
CourseModeFactory
from
courseware.access_utils
import
is_course_open_for_learner
from
courseware.model_data
import
set_score
from
courseware.testutils
import
RenderXBlockTestMixin
from
courseware.tests.factories
import
StudentModuleFactory
,
GlobalStaffFactory
...
...
@@ -2111,7 +2112,9 @@ class TestRenderXBlockSelfPaced(TestRenderXBlock):
SelfPacedConfiguration
(
enabled
=
True
)
.
save
()
def
course_options
(
self
):
return
{
'self_paced'
:
True
}
options
=
super
(
TestRenderXBlockSelfPaced
,
self
)
.
course_options
()
options
[
'self_paced'
]
=
True
return
options
class
TestIndexViewCrawlerStudentStateWrites
(
SharedModuleStoreTestCase
):
...
...
@@ -2217,3 +2220,21 @@ class EnterpriseConsentTestCase(EnterpriseTestConsentRequired, ModuleStoreTestCa
reverse
(
"student_progress"
,
kwargs
=
dict
(
course_id
=
course_id
,
student_id
=
str
(
self
.
user
.
id
))),
):
self
.
verify_consent_required
(
self
.
client
,
url
)
@ddt.ddt
class
AccessUtilsTestCase
(
ModuleStoreTestCase
):
"""
Test access utilities
"""
@ddt.data
(
(
1
,
False
),
(
-
1
,
True
)
)
@ddt.unpack
def
test_is_course_open_for_learner
(
self
,
start_date_modifier
,
expected_value
):
staff_user
=
AdminFactory
()
start_date
=
datetime
.
now
(
UTC
)
+
timedelta
(
days
=
start_date_modifier
)
course
=
CourseFactory
.
create
(
start
=
start_date
)
self
.
assertEqual
(
is_course_open_for_learner
(
staff_user
,
course
),
expected_value
)
lms/djangoapps/courseware/testutils.py
View file @
8f6203f1
...
...
@@ -4,7 +4,7 @@ Common test utilities for courseware functionality
# pylint: disable=attribute-defined-outside-init
from
abc
import
ABCMeta
,
abstractmethod
from
datetime
import
datetime
from
datetime
import
datetime
,
timedelta
import
ddt
from
mock
import
patch
from
urllib
import
urlencode
...
...
@@ -80,7 +80,9 @@ class RenderXBlockTestMixin(object):
Options to configure the test course. Intended to be overridden by
subclasses.
"""
return
{}
return
{
'start'
:
datetime
.
now
()
-
timedelta
(
days
=
1
)
}
def
setup_course
(
self
,
default_store
=
None
):
"""
...
...
lms/djangoapps/courseware/views/index.py
View file @
8f6203f1
...
...
@@ -42,8 +42,8 @@ from xmodule.modulestore.django import modulestore
from
xmodule.x_module
import
STUDENT_VIEW
from
web_fragments.fragment
import
Fragment
from
..access
import
has_access
,
_adjust_start_date_for_beta_testers
from
..access_utils
import
in_preview_mode
from
..access
import
has_access
from
..access_utils
import
in_preview_mode
,
is_course_open_for_learner
from
..courses
import
get_current_child
,
get_studio_url
,
get_course_with_access
from
..entrance_exams
import
(
course_has_entrance_exam
,
...
...
@@ -359,12 +359,11 @@ class CoursewareIndex(View):
self
.
_add_entrance_exam_to_context
(
courseware_context
)
# staff masquerading data
now
=
datetime
.
now
(
UTC
())
effective_start
=
_adjust_start_date_for_beta_testers
(
self
.
effective_user
,
self
.
course
,
self
.
course_key
)
if
not
in_preview_mode
()
and
self
.
is_staff
and
now
<
effective_start
:
if
not
is_course_open_for_learner
(
self
.
effective_user
,
self
.
course
):
# Disable student view button if user is staff and
# course is not yet visible to students.
courseware_context
[
'disable_student_access'
]
=
True
courseware_context
[
'supports_preview_menu'
]
=
False
if
self
.
section
:
# chromeless data
...
...
lms/djangoapps/courseware/views/views.py
View file @
8f6203f1
...
...
@@ -57,9 +57,9 @@ from openedx.core.djangoapps.plugin_api.views import EdxFragmentView
from
commerce.utils
import
EcommerceService
from
enrollment.api
import
add_enrollment
from
course_modes.models
import
CourseMode
from
courseware.access
import
has_access
,
has_ccx_coach_role
,
_adjust_start_date_for_beta_testers
from
courseware.access
import
has_access
,
has_ccx_coach_role
from
courseware.access_response
import
StartDateError
from
courseware.access_utils
import
in_preview_mode
from
courseware.access_utils
import
in_preview_mode
,
is_course_open_for_learner
from
courseware.courses
import
(
get_courses
,
get_course
,
...
...
@@ -374,12 +374,11 @@ def course_info(request, course_id):
if
SelfPacedConfiguration
.
current
()
.
enable_course_home_improvements
:
context
[
'last_accessed_courseware_url'
]
=
get_last_accessed_courseware
(
course
,
request
,
user
)
now
=
datetime
.
now
(
UTC
())
effective_start
=
_adjust_start_date_for_beta_testers
(
user
,
course
,
course_key
)
if
not
in_preview_mode
()
and
staff_access
and
now
<
effective_start
:
if
not
is_course_open_for_learner
(
user
,
course
):
# Disable student view button if user is staff and
# course is not yet visible to students.
context
[
'disable_student_access'
]
=
True
context
[
'supports_preview_menu'
]
=
False
if
CourseEnrollment
.
is_enrolled
(
request
.
user
,
course
.
id
):
inject_coursetalk_keys_into_context
(
context
,
course_key
)
...
...
@@ -513,6 +512,11 @@ class CourseTabView(EdxFragmentView):
request
.
user
=
masquerade_user
else
:
masquerade
=
None
if
course
and
not
is_course_open_for_learner
(
request
.
user
,
course
):
# Disable student view button if user is staff and
# course is not yet visible to students.
supports_preview_menu
=
False
return
{
'course'
:
course
,
'tab'
:
tab
,
...
...
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