Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
course-discovery
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
course-discovery
Commits
db25b93b
Commit
db25b93b
authored
Jan 16, 2017
by
tasawernawaz
Committed by
Bill DeRusha
Jan 17, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
user dropdown typeahead added ECOM-6835
parent
1b2ca86f
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
117 additions
and
5 deletions
+117
-5
course_discovery/apps/core/lookups.py
+14
-0
course_discovery/apps/core/tests/test_lookups.py
+46
-0
course_discovery/apps/core/urls.py
+10
-0
course_discovery/apps/publisher/admin.py
+13
-3
course_discovery/apps/publisher/forms.py
+31
-1
course_discovery/apps/publisher/urls.py
+2
-1
course_discovery/urls.py
+1
-0
No files found.
course_discovery/apps/core/lookups.py
0 → 100644
View file @
db25b93b
from
dal
import
autocomplete
from
course_discovery.apps.core.models
import
User
class
UserAutocomplete
(
autocomplete
.
Select2QuerySetView
):
def
get_queryset
(
self
):
if
self
.
request
.
user
.
is_authenticated
()
and
self
.
request
.
user
.
is_staff
:
qs
=
User
.
objects
.
all
()
if
self
.
q
:
qs
=
qs
.
filter
(
username__icontains
=
self
.
q
)
return
qs
return
[]
course_discovery/apps/core/tests/test_lookups.py
0 → 100644
View file @
db25b93b
import
json
from
django.core.urlresolvers
import
reverse
from
django.test
import
TestCase
from
course_discovery.apps.core.tests.factories
import
UserFactory
,
USER_PASSWORD
class
UserAutocompleteTests
(
TestCase
):
""" Tests for user autocomplete lookups."""
def
setUp
(
self
):
super
(
UserAutocompleteTests
,
self
)
.
setUp
()
self
.
user
=
UserFactory
(
username
=
'test_name'
,
is_staff
=
True
)
self
.
client
.
login
(
username
=
self
.
user
.
username
,
password
=
USER_PASSWORD
)
self
.
users_list
=
UserFactory
.
create_batch
(
5
)
def
test_user_autocomplete
(
self
):
""" Verify user autocomplete returns the data. """
response
=
self
.
client
.
get
(
reverse
(
'admin_core:user-autocomplete'
)
+
'?q={user}'
.
format
(
user
=
'user'
)
)
self
.
_assert_response
(
response
,
5
)
# update first user's username
self
.
users_list
[
0
]
.
username
=
'dummy_name'
self
.
users_list
[
0
]
.
save
()
response
=
self
.
client
.
get
(
reverse
(
'admin_core:user-autocomplete'
)
+
'?q={user}'
.
format
(
user
=
'dummy'
)
)
self
.
_assert_response
(
response
,
1
)
def
test_course_autocomplete_un_authorize_user
(
self
):
""" Verify user autocomplete returns empty list for un-authorized users. """
self
.
client
.
logout
()
self
.
user
.
is_staff
=
False
self
.
user
.
save
()
self
.
client
.
login
(
username
=
self
.
user
.
username
,
password
=
USER_PASSWORD
)
response
=
self
.
client
.
get
(
reverse
(
'admin_core:user-autocomplete'
))
self
.
_assert_response
(
response
,
0
)
def
_assert_response
(
self
,
response
,
expected_length
):
""" Assert autocomplete response. """
self
.
assertEqual
(
response
.
status_code
,
200
)
data
=
json
.
loads
(
response
.
content
.
decode
(
'utf-8'
))
self
.
assertEqual
(
len
(
data
[
'results'
]),
expected_length
)
course_discovery/apps/core/urls.py
0 → 100644
View file @
db25b93b
"""
URLs for the admin autocomplete lookups.
"""
from
django.conf.urls
import
url
from
course_discovery.apps.core.lookups
import
UserAutocomplete
urlpatterns
=
[
url
(
r'^user-autocomplete/$'
,
UserAutocomplete
.
as_view
(),
name
=
'user-autocomplete'
,),
]
course_discovery/apps/publisher/admin.py
View file @
db25b93b
from
django.contrib
import
admin
from
guardian.admin
import
GuardedModelAdmin
from
course_discovery.apps.publisher.forms
import
UserAttributesAdminForm
,
OrganizationUserRoleForm
,
CourseUserRoleForm
from
course_discovery.apps.publisher.models
import
(
Course
,
CourseRun
,
CourseUserRole
,
OrganizationExtension
,
OrganizationUserRole
,
Seat
,
State
,
UserAttributes
)
admin
.
site
.
register
(
Course
)
admin
.
site
.
register
(
CourseRun
)
admin
.
site
.
register
(
OrganizationUserRole
)
admin
.
site
.
register
(
Seat
)
admin
.
site
.
register
(
State
)
admin
.
site
.
register
(
UserAttributes
)
@admin.register
(
CourseUserRole
)
class
CourseUserRoleAdmin
(
admin
.
ModelAdmin
):
raw_id_fields
=
(
'user'
,)
form
=
CourseUserRoleForm
@admin.register
(
OrganizationExtension
)
class
OrganizationExtensionAdmin
(
GuardedModelAdmin
):
pass
@admin.register
(
UserAttributes
)
class
UserAttributesAdmin
(
admin
.
ModelAdmin
):
form
=
UserAttributesAdminForm
@admin.register
(
OrganizationUserRole
)
class
OrganizationUserRoleAdmin
(
admin
.
ModelAdmin
):
form
=
OrganizationUserRoleForm
course_discovery/apps/publisher/forms.py
View file @
db25b93b
...
...
@@ -8,7 +8,9 @@ from django.utils.translation import ugettext_lazy as _
from
course_discovery.apps.course_metadata.choices
import
CourseRunPacing
from
course_discovery.apps.course_metadata.models
import
Person
,
Organization
,
Subject
from
course_discovery.apps.ietf_language_tags.models
import
LanguageTag
from
course_discovery.apps.publisher.models
import
Course
,
CourseRun
,
Seat
,
User
,
OrganizationExtension
from
course_discovery.apps.publisher.models
import
(
Course
,
CourseRun
,
Seat
,
User
,
OrganizationExtension
,
OrganizationUserRole
,
CourseUserRole
)
class
UserModelChoiceField
(
forms
.
ModelChoiceField
):
...
...
@@ -287,3 +289,31 @@ class CustomSeatForm(SeatForm):
class
Meta
(
SeatForm
.
Meta
):
fields
=
(
'price'
,
'type'
)
class
BaseUserAdminForm
(
forms
.
ModelForm
):
class
Meta
:
fields
=
'__all__'
widgets
=
{
'user'
:
autocomplete
.
ModelSelect2
(
url
=
'admin_core:user-autocomplete'
,
attrs
=
{
'data-minimum-input-length'
:
3
,
}
),
}
class
UserAttributesAdminForm
(
BaseUserAdminForm
):
class
Meta
(
BaseUserAdminForm
.
Meta
):
model
=
User
class
OrganizationUserRoleForm
(
BaseUserAdminForm
):
class
Meta
(
BaseUserAdminForm
.
Meta
):
model
=
OrganizationUserRole
class
CourseUserRoleForm
(
BaseUserAdminForm
):
class
Meta
(
BaseUserAdminForm
.
Meta
):
model
=
CourseUserRole
course_discovery/apps/publisher/urls.py
View file @
db25b93b
...
...
@@ -28,5 +28,6 @@ urlpatterns = [
url
(
r'^user/toggle/email_settings/$'
,
views
.
ToggleEmailNotification
.
as_view
(),
name
=
'publisher_toggle_email_settings'
),
name
=
'publisher_toggle_email_settings'
),
]
course_discovery/urls.py
View file @
db25b93b
...
...
@@ -28,6 +28,7 @@ admin.autodiscover()
urlpatterns
=
auth_urlpatterns
+
[
url
(
r'^admin/course_metadata/'
,
include
(
'course_discovery.apps.course_metadata.urls'
,
namespace
=
'admin_metadata'
)),
url
(
r'^admin/core/'
,
include
(
'course_discovery.apps.core.urls'
,
namespace
=
'admin_core'
)),
url
(
r'^admin/'
,
include
(
admin
.
site
.
urls
)),
url
(
r'^api/'
,
include
(
'course_discovery.apps.api.urls'
,
namespace
=
'api'
)),
# Use the same auth views for all logins, including those originating from the browseable API.
...
...
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