diff --git a/common/djangoapps/student/management/commands/create_user.py b/common/djangoapps/student/management/commands/create_user.py new file mode 100644 index 0000000000..bf4c084dca --- /dev/null +++ b/common/djangoapps/student/management/commands/create_user.py @@ -0,0 +1,88 @@ +from optparse import make_option +from django.core.management.base import BaseCommand +from student.models import CourseEnrollment, Registration +from student.views import _do_create_account +from django.contrib.auth.models import User + + +class Command(BaseCommand): + help = """ + This command creates and registers a user in a given course + as "audit", "verified" or "honor". + + example: + # Enroll a user test@example.com into the demo course + # The username and name will default to "test" + manage.py ... create_user -e test@example.com -p insecure -c edX/Open_DemoX/edx_demo_course -m verified + """ + + option_list = BaseCommand.option_list + ( + make_option('-m', '--mode', + metavar='ENROLLMENT_MODE', + dest='mode', + default='honor', + choices=('audit', 'verified', 'honor'), + help='Enrollment type for user for a specific course'), + make_option('-u', '--username', + metavar='USERNAME', + dest='username', + default=None, + help='Username, defaults to "user" in the email'), + make_option('-n', '--name', + metavar='NAME', + dest='name', + default=None, + help='Name, defaults to "user" in the email'), + make_option('-p', '--password', + metavar='NAME', + dest='password', + default=None, + help='Password for user'), + make_option('-e', '--email', + metavar='EMAIL', + dest='email', + default=None, + help='Email for user'), + make_option('-c', '--course', + metavar='COURSE_ID', + dest='course', + default=None, + help='course to enroll the user in (optional)'), + make_option('-s', '--staff', + metavar='COURSE_ID', + dest='staff', + default=False, + action='store_true', + help='give user the staff bit'), + ) + + def handle(self, *args, **options): + username = options['username'] + name = options['name'] + if not username: + username = options['email'].split('@')[0] + if not name: + name = options['email'].split('@')[0] + + post_data = { + 'username': username, + 'email': options['email'], + 'password': options['password'], + 'name': name, + 'honor_code': u'true', + 'terms_of_service': u'true', + } + create_account = _do_create_account(post_data) + if isinstance(create_account, tuple): + user = create_account[0] + if options['staff']: + user.is_staff = True + user.save() + reg = Registration.objects.get(user=user) + reg.activate() + reg.save() + else: + print create_account + user = User.objects.get(email=options['email']) + if options['course']: + CourseEnrollment.enroll(user, options['course'], mode=options['mode'])