Commit 2970f242 by cahrens

Initial admin table view.

parent 72999e84
...@@ -3,6 +3,7 @@ from django.core.exceptions import PermissionDenied ...@@ -3,6 +3,7 @@ from django.core.exceptions import PermissionDenied
from django.conf import settings from django.conf import settings
from xmodule.modulestore import Location from xmodule.modulestore import Location
from course_creators import views
''' '''
This code is somewhat duplicative of access.py in the LMS. We will unify the code as a separate story This code is somewhat duplicative of access.py in the LMS. We will unify the code as a separate story
...@@ -221,3 +222,6 @@ def _grant_instructors_creator_access(caller): ...@@ -221,3 +222,6 @@ def _grant_instructors_creator_access(caller):
if group.name.startswith(INSTRUCTOR_ROLE_NAME + "_"): if group.name.startswith(INSTRUCTOR_ROLE_NAME + "_"):
for user in group.user_set.all(): for user in group.user_set.all():
add_user_to_creator_group(caller, user) add_user_to_creator_group(caller, user)
views.add_user_with_status_granted(user)
elif group.name.startswith(STAFF_ROLE_NAME + "_"):
views.add_user_with_status_unrequested(user)
"""
django admin page for the course creators table
"""
from course_creators.models import CourseCreator
from django.contrib import admin
class CourseCreatorAdmin(admin.ModelAdmin):
list_display = ('username', 'state', 'state_changed', 'note')
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
def has_change_permission(self, request, obj=None):
return request.user.is_staff
admin.site.register(CourseCreator, CourseCreatorAdmin)
...@@ -8,24 +8,24 @@ from django.db import models ...@@ -8,24 +8,24 @@ from django.db import models
class Migration(SchemaMigration): class Migration(SchemaMigration):
def forwards(self, orm): def forwards(self, orm):
# Adding model 'CourseCreators' # Adding model 'CourseCreator'
db.create_table('course_creators_coursecreators', ( db.create_table('course_creators_coursecreator', (
('username', self.gf('django.db.models.fields.CharField')(unique=True, max_length=64, primary_key=True)), ('username', self.gf('django.db.models.fields.CharField')(unique=True, max_length=64, primary_key=True)),
('state_changed', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), ('state_changed', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
('state', self.gf('django.db.models.fields.CharField')(default='u', max_length=1)), ('state', self.gf('django.db.models.fields.CharField')(default='u', max_length=1)),
('note', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)), ('note', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
)) ))
db.send_create_signal('course_creators', ['CourseCreators']) db.send_create_signal('course_creators', ['CourseCreator'])
def backwards(self, orm): def backwards(self, orm):
# Deleting model 'CourseCreators' # Deleting model 'CourseCreator'
db.delete_table('course_creators_coursecreators') db.delete_table('course_creators_coursecreator')
models = { models = {
'course_creators.coursecreators': { 'course_creators.coursecreator': {
'Meta': {'object_name': 'CourseCreators'}, 'Meta': {'object_name': 'CourseCreator'},
'note': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}), 'note': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
'state': ('django.db.models.fields.CharField', [], {'default': "'u'", 'max_length': '1'}), 'state': ('django.db.models.fields.CharField', [], {'default': "'u'", 'max_length': '1'}),
'state_changed': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'state_changed': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
......
...@@ -2,9 +2,14 @@ ...@@ -2,9 +2,14 @@
Table for storing information about whether or not Studio users have course creation privileges. Table for storing information about whether or not Studio users have course creation privileges.
""" """
from django.db import models from django.db import models
from django.db.models.signals import post_init, post_save
from django.dispatch import receiver
from auth.authz import add_user_to_creator_group, remove_user_from_creator_group
import datetime
class CourseCreators(models.Model):
class CourseCreator(models.Model):
""" """
Creates the database table model. Creates the database table model.
""" """
...@@ -23,7 +28,30 @@ class CourseCreators(models.Model): ...@@ -23,7 +28,30 @@ class CourseCreators(models.Model):
note = models.CharField(max_length=512, blank=True, help_text='Optional notes about this user (for example, ' note = models.CharField(max_length=512, blank=True, help_text='Optional notes about this user (for example, '
'why course creation access was denied)') 'why course creation access was denied)')
def __unicode__(self): def __unicode__(self):
s = "%s | %s [%s] | %s" % (self.username, self.state, self.state_changed, self.note) s = "%s | %s [%s] | %s" % (self.username, self.state, self.state_changed, self.note)
return s return s
@receiver(post_init, sender=CourseCreator)
def post_init_callback(sender, **kwargs):
instance = kwargs['instance']
instance.orig_state = instance.state
@receiver(post_save, sender=CourseCreator)
def post_save_callback(sender, **kwargs):
instance = kwargs['instance']
# We only wish to modify the state_changed time if the state has been modified. We don't wish to
# modify it for changes to the notes field.
if instance.state != instance.orig_state:
instance.state_changed = datetime.datetime.now()
if instance.state == 'g':
# add to course group
instance.state = 'g'
else:
# remove from course group
instance.state = instance.state
instance.orig_state = instance.state
instance.save()
from course_creators.models import CourseCreator
def add_user_with_status_unrequested(user):
"""
Adds a user to the course creator table with status 'unrequested'.
"""
_add_user(user, 'u')
def add_user_with_status_granted(user):
"""
Adds a user to the course creator table with status 'granted'.
"""
_add_user(user, 'g')
def _add_user(user, state):
if CourseCreator.objects.filter(username=user.username).count() == 0:
entry = CourseCreator(username=user.username, state=state)
entry.save()
\ No newline at end of file
...@@ -346,6 +346,9 @@ INSTALLED_APPS = ( ...@@ -346,6 +346,9 @@ INSTALLED_APPS = (
# comment common # comment common
'django_comment_common', 'django_comment_common',
# for course creator table
'django.contrib.admin'
) )
################# EDX MARKETING SITE ################################## ################# EDX MARKETING SITE ##################################
......
...@@ -6,8 +6,8 @@ from django.conf.urls import patterns, include, url ...@@ -6,8 +6,8 @@ from django.conf.urls import patterns, include, url
from . import one_time_startup from . import one_time_startup
# Uncomment the next two lines to enable the admin: # Uncomment the next two lines to enable the admin:
# from django.contrib import admin from django.contrib import admin
# admin.autodiscover() admin.autodiscover()
urlpatterns = ('', # nopep8 urlpatterns = ('', # nopep8
url(r'^$', 'contentstore.views.howitworks', name='homepage'), url(r'^$', 'contentstore.views.howitworks', name='homepage'),
...@@ -146,6 +146,10 @@ if settings.MITX_FEATURES.get('ENABLE_SERVICE_STATUS'): ...@@ -146,6 +146,10 @@ if settings.MITX_FEATURES.get('ENABLE_SERVICE_STATUS'):
url(r'^status/', include('service_status.urls')), url(r'^status/', include('service_status.urls')),
) )
urlpatterns += (
url(r'^admin/', include(admin.site.urls)),
)
urlpatterns = patterns(*urlpatterns) urlpatterns = patterns(*urlpatterns)
# Custom error pages # Custom error pages
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment