def create_or_set_user_attribute_created_on_site(user, site): """ Create or Set UserAttribute indicating the microsite site the user account was created on. User maybe created on 'courses.edx.org', or a white-label site """ if site: UserAttribute.set_user_attribute(user, 'created_on_site', site.domain)
def _record_utm_registration_attribution(request, user): """ Attribute this user's registration to the latest UTM referrer, if applicable. """ utm_cookie_name = RegistrationCookieConfiguration.current().utm_cookie_name utm_cookie = request.COOKIES.get(utm_cookie_name) if user and utm_cookie: utm = json.loads(utm_cookie) for utm_parameter_name in REGISTRATION_UTM_PARAMETERS: utm_parameter = utm.get(utm_parameter_name) if utm_parameter: UserAttribute.set_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get(utm_parameter_name), utm_parameter ) created_at_unixtime = utm.get('created_at') if created_at_unixtime: # We divide by 1000 here because the javascript timestamp generated is in milliseconds not seconds. # PYTHON: time.time() => 1475590280.823698 # JS: new Date().getTime() => 1475590280823 created_at_datetime = datetime.datetime.fromtimestamp(int(created_at_unixtime) / float(1000), tz=UTC) UserAttribute.set_user_attribute( user, REGISTRATION_UTM_CREATED_AT, created_at_datetime )
def test_command_by_activation_keys(self): """ Test population of created_on_site attribute by activation keys. """ call_command( "populate_created_on_site_user_attribute", "--activation-keys", self.activation_keys, "--site-domain", self.site.domain ) for register_user in self.registered_users: self.assertEqual(UserAttribute.get_user_attribute(register_user.user, CREATED_ON_SITE), self.site.domain) # Populate 'created_on_site' attribute with different site domain call_command( "populate_created_on_site_user_attribute", "--activation-keys", self.activation_keys, "--site-domain", self.site_other.domain ) for register_user in self.registered_users: # 'created_on_site' attribute already exists. Attribute's value will not change self.assertNotEqual( UserAttribute.get_user_attribute(register_user.user, CREATED_ON_SITE), self.site_other.domain )
def test_command_by_activation_keys(self): """ Test population of created_on_site attribute by activation keys. """ call_command("populate_created_on_site_user_attribute", "--activation-keys", self.activation_keys, "--site-domain", self.site.domain) for register_user in self.registered_users: self.assertEqual( UserAttribute.get_user_attribute(register_user.user, CREATED_ON_SITE), self.site.domain) # Populate 'created_on_site' attribute with different site domain call_command("populate_created_on_site_user_attribute", "--activation-keys", self.activation_keys, "--site-domain", self.site_other.domain) for register_user in self.registered_users: # 'created_on_site' attribute already exists. Attribute's value will not change self.assertNotEqual( UserAttribute.get_user_attribute(register_user.user, CREATED_ON_SITE), self.site_other.domain)
def test_command_with_invalid_arguments(self): """ Test management command with invalid user ids and activation keys. """ user = self.users[0] call_command( "populate_created_on_site_user_attribute", "--users", '9{id}'.format(id=user.id), # invalid id "--site-domain", self.site.domain) self.assertIsNone( UserAttribute.get_user_attribute(user, CREATED_ON_SITE)) register_user = self.registered_users[0] call_command( "populate_created_on_site_user_attribute", "--activation-keys", "invalid-{key}".format( key=register_user.activation_key), # invalid key "--site-domain", self.site.domain) self.assertIsNone( UserAttribute.get_user_attribute(register_user.user, CREATED_ON_SITE))
def _record_affiliate_registration_attribution(request, user): """ Attribute this user's registration to the referring affiliate, if applicable. """ affiliate_id = request.COOKIES.get(settings.AFFILIATE_COOKIE_NAME) if user and affiliate_id: UserAttribute.set_user_attribute(user, REGISTRATION_AFFILIATE_ID, affiliate_id)
def create_or_set_user_attribute_created_on_site(user, site): """ Create or Set UserAttribute indicating the microsite site the user account was created on. User maybe created on 'courses.edx.org', or a white-label site. Due to the very high traffic on this table we now ignore the default site (eg. 'courses.edx.org') and code which comsumes this attribute should assume a 'created_on_site' which doesn't exist belongs to the default site. """ if site and site.id != settings.SITE_ID: UserAttribute.set_user_attribute(user, 'created_on_site', site.domain)
def create_or_set_user_attribute_created_on_site(user, site): """ Create or Set UserAttribute indicating the site the user account was created on. User maybe created on 'courses.edx.org', or a white-label site. Due to the very high traffic on this table we now ignore the default site (eg. 'courses.edx.org') and code which comsumes this attribute should assume a 'created_on_site' which doesn't exist belongs to the default site. """ if site and site.id != settings.SITE_ID: UserAttribute.set_user_attribute(user, 'created_on_site', site.domain)
def _get_batched_users(self, site_domain, users_queryset, offset, users_query_batch_size): """ Args: site_domain: site where we need unsynced users users_queryset: users_queryset to slice users_query_batch_size: slice size Returns: site users """ self.stdout.write( u'Fetching Users for site {site} from {start} to {end}'.format( site=site_domain, start=offset, end=offset + users_query_batch_size)) users = users_queryset.select_related( 'profile')[offset:offset + users_query_batch_size] site_users = [ user for user in users if UserAttribute.get_user_attribute( user, 'created_on_site') == site_domain ] self.stdout.write( u'\tSite Users={count}'.format(count=len(site_users))) return site_users
def _get_unsynced_users(self, site_domain, last_synced_user, days_threshold): """ Args: site_domain: site where we need unsynced users last_synced_user: last synced user days_threshold: number of days threshold to sync users in case we don't have last synced user Returns: Ordered list of users needs to be synced """ if last_synced_user: self.stdout.write( u'Started pulling unsynced contacts for site {site} created after user {user}' .format(site=site_domain, user=last_synced_user)) users = User.objects.select_related('profile').filter( id__gt=last_synced_user.id).order_by('pk') else: # If we don't have last synced user get all users who joined on between today and threshold days ago start_date = datetime.now().date() - timedelta(days_threshold) self.stdout.write( u'Started pulling unsynced contacts for site {site} from {start_date}' .format(site=site_domain, start_date=start_date)) users = User.objects.select_related('profile').filter( date_joined__date__gte=start_date).order_by('pk') for user in use_read_replica_if_available(users): if UserAttribute.get_user_attribute( user, 'created_on_site') == site_domain: yield user
def _get_unsynced_users(self, site_domain, last_synced_user, days_threshold): """ Args: site_domain: site where we need unsynced users last_synced_user: last synced user days_threshold: number of days threshold to sync users in case we don't have last synced user Returns: Ordered list of users needs to be synced """ if last_synced_user: users = User.objects.select_related('profile').filter(id__gt=last_synced_user.id).order_by('pk') else: # If we don't have last synced user get all users who joined on between today and threshold days ago start_date = datetime.now().date() - timedelta(days_threshold) self.stdout.write( 'Started pulling unsynced contacts for site {site} from {start_date}'.format( site=site_domain, start_date=start_date ) ) users = User.objects.select_related('profile').filter(date_joined__date__gte=start_date).order_by('pk') unsynced_users = [ user for user in use_read_replica_if_available(users) if UserAttribute.get_user_attribute(user, 'created_on_site') == site_domain ] return unsynced_users
def get_mosousers(request): if not request.user.is_authenticated(): return redirect("/login") if not UserAttribute.get_user_attribute(request.user, "access_mosoadmin"): return HttpResponse("No permission") mosousers = MosoUser.objects.all() data = [] for mosouser in mosousers: name = mosouser.user.profile.name email = mosouser.user.email activate_start = mosouser.activate_start activate_end = mosouser.activate_end school = mosouser.school.name if mosouser.school else mosouser.school contract_code_course_name = [ (item.contract.code, get_displayname(item.course_id)) for item in mosouser.user.student_contractitem.all() ] data.append([ name, email, activate_start, activate_end, school, contract_code_course_name ]) table_data = dict(data=data) return JsonResponse(table_data)
def test_no_referral(self): """Verify that no referral is recorded when a cookie is not present.""" self.assertIsNone( self.client.cookies.get(settings.AFFILIATE_COOKIE_NAME)) # pylint: disable=no-member user = self.create_account_and_fetch_profile().user self.assertIsNone( UserAttribute.get_user_attribute(user, REGISTRATION_AFFILIATE_ID))
def test_with_invalid_site_domain(self, populate): """ Test management command with invalid site domain. """ fake_site_domain = 'fake-site-domain' with mock.patch('__builtin__.raw_input', return_value=populate): call_command("populate_created_on_site_user_attribute", "--users", self.user_ids, "--site-domain", fake_site_domain) for user in self.users: if populate == 'y': self.assertEqual( UserAttribute.get_user_attribute(user, CREATED_ON_SITE), fake_site_domain) else: self.assertIsNone( UserAttribute.get_user_attribute(user, CREATED_ON_SITE))
def test_with_invalid_site_domain(self, populate): """ Test management command with invalid site domain. """ fake_site_domain = 'fake-site-domain' with mock.patch('__builtin__.raw_input', return_value=populate): call_command( "populate_created_on_site_user_attribute", "--users", self.user_ids, "--site-domain", fake_site_domain ) for user in self.users: if populate == 'y': self.assertEqual(UserAttribute.get_user_attribute(user, CREATED_ON_SITE), fake_site_domain) else: self.assertIsNone(UserAttribute.get_user_attribute(user, CREATED_ON_SITE))
def test_get_set_attribute(self): self.assertIsNone(UserAttribute.get_user_attribute(self.user, self.name)) UserAttribute.set_user_attribute(self.user, self.name, self.value) self.assertEqual(UserAttribute.get_user_attribute(self.user, self.name), self.value) new_value = 'new_value' UserAttribute.set_user_attribute(self.user, self.name, new_value) self.assertEqual(UserAttribute.get_user_attribute(self.user, self.name), new_value)
def test_no_referral(self): """Verify that no referral is recorded when a cookie is not present.""" utm_cookie_name = 'edx.test.utm' with mock.patch( 'student.models.RegistrationCookieConfiguration.current' ) as config: instance = config.return_value instance.utm_cookie_name = utm_cookie_name self.assertIsNone( self.client.cookies.get(settings.AFFILIATE_COOKIE_NAME)) # pylint: disable=no-member self.assertIsNone(self.client.cookies.get(utm_cookie_name)) # pylint: disable=no-member user = self.create_account_and_fetch_profile().user self.assertIsNone( UserAttribute.get_user_attribute(user, REGISTRATION_AFFILIATE_ID)) self.assertIsNone( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_source'))) self.assertIsNone( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_medium'))) self.assertIsNone( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_campaign'))) self.assertIsNone( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_term'))) self.assertIsNone( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_content'))) self.assertIsNone( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_CREATED_AT))
def test_affiliate_referral_attribution(self): """ Verify that a referral attribution is recorded if an affiliate cookie is present upon a new user's registration. """ affiliate_id = 'test-partner' self.client.cookies[settings.AFFILIATE_COOKIE_NAME] = affiliate_id user = self.create_account_and_fetch_profile().user self.assertEqual(UserAttribute.get_user_attribute(user, REGISTRATION_AFFILIATE_ID), affiliate_id)
def get(self, request, *args, **kwargs): if not request.user.is_authenticated(): return redirect("/login") if not UserAttribute.get_user_attribute(request.user, "access_mosoadmin"): return HttpResponse("No permission") context = {'msg': self.msg, 'datatable': self.make_datatable()} return render_to_response(self.template_name, context)
def test_command_with_invalid_arguments(self): """ Test management command with invalid user ids and activation keys. """ user = self.users[0] call_command( "populate_created_on_site_user_attribute", "--users", '9{id}'.format(id=user.id), # invalid id "--site-domain", self.site.domain ) self.assertIsNone(UserAttribute.get_user_attribute(user, CREATED_ON_SITE)) register_user = self.registered_users[0] call_command( "populate_created_on_site_user_attribute", "--activation-keys", "invalid-{key}".format(key=register_user.activation_key), # invalid key "--site-domain", self.site.domain ) self.assertIsNone(UserAttribute.get_user_attribute(register_user.user, CREATED_ON_SITE))
def _create_users(cls, site_conf): # Create some test users for i in range(1, 20): profile_meta = { "first_name": "First Name{0}".format(i), "last_name": "Last Name{0}".format(i), "company": "Company{0}".format(i), "title": "Title{0}".format(i), "state": "State{0}".format(i), "country": "US", } loe = UserProfile.LEVEL_OF_EDUCATION_CHOICES[0][0] date_joined = timezone.now() - timedelta(i) user = UserFactory(date_joined=date_joined) user_profile = user.profile user_profile.level_of_education = loe user_profile.meta = json.dumps(profile_meta) user_profile.save() # pylint: disable=no-member UserAttribute.set_user_attribute(user, 'created_on_site', site_conf.site.domain) cls.users.append(user)
def _create_users(cls, site_conf): # Create some test users for i in range(1, 11): profile_meta = { "first_name": "First Name{0}".format(i), "last_name": "Last Name{0}".format(i), "company": "Company{0}".format(i), "title": "Title{0}".format(i), "state": "State{0}".format(i), "country": "US", } loe = UserProfile.LEVEL_OF_EDUCATION_CHOICES[0][0] date_joined = timezone.now() - timedelta(i) user = UserFactory(date_joined=date_joined) user_profile = user.profile user_profile.level_of_education = loe user_profile.meta = json.dumps(profile_meta) user_profile.save() # pylint: disable=no-member UserAttribute.set_user_attribute(user, 'created_on_site', site_conf.site.domain) cls.users.append(user)
def handle(self, *args, **options): site_domain = options['site_domain'] user_ids = options['users'].split(',') if options['users'] else [] activation_keys = options['activation_keys'].split(',') if options['activation_keys'] else [] if not user_ids and not activation_keys: raise CommandError('You must provide user ids or activation keys.') try: Site.objects.get(domain__exact=site_domain) except Site.DoesNotExist: question = "The site you specified is not configured as a Site in the system. " \ "Are you sure you want to continue? (y/n):" if str(raw_input(question)).lower().strip()[0] != 'y': return for user_id in user_ids: try: user = User.objects.get(id=user_id) if UserAttribute.get_user_attribute(user, CREATED_ON_SITE): self.stdout.write("created_on_site attribute already exists for user id: {id}".format(id=user_id)) else: UserAttribute.set_user_attribute(user, CREATED_ON_SITE, site_domain) except User.DoesNotExist: self.stdout.write("This user id [{id}] does not exist in the system.".format(id=user_id)) for key in activation_keys: try: user = Registration.objects.get(activation_key=key).user if UserAttribute.get_user_attribute(user, CREATED_ON_SITE): self.stdout.write("created_on_site attribute already exists for user id: {id}".format(id=user.id)) else: UserAttribute.set_user_attribute(user, CREATED_ON_SITE, site_domain) except Registration.DoesNotExist: self.stdout.write("This activation key [{key}] does not exist in the system.".format(key=key))
def post(self, request, *args, **kwargs): if not request.user.is_authenticated(): return redirect("/login") if not UserAttribute.get_user_attribute(request.user, "access_mosoadmin"): return HttpResponse("No permission") school_list = MosoSchool.objects.all() school_name = request.POST.get('school', '').strip() contract_code = request.POST.get('contract_code', '').strip() signed_date = request.POST.get('signed_date', '') if not school_name or not contract_code or not signed_date: context = { 'msg': u"缺少必填信息", 'school_list': school_list, 'datatable': self.make_datatable() } return render_to_response(self.template_name, context) try: school = MosoSchool.objects.get(name=school_name) except MosoSchool.DoesNotExist: context = { 'msg': u"学校不存在", 'school_list': school_list, 'datatable': self.make_datatable() } return render_to_response(self.template_name, context) contract = MosoContract(code=contract_code) contract.organization = school contract.signed_date = signed_date msg = u'创建成功,请填写详细合同条款' try: from django.db import transaction with transaction.atomic(): contract.save() except IntegrityError: msg = u"创建合同失败,合同编码重复" except Exception: msg = u"创建合同失败" context = { 'msg': msg, 'school_list': school_list, 'datatable': self.make_datatable() } return render_to_response(self.template_name, context)
def test_utm_referral_attribution(self): """ Verify that a referral attribution is recorded if an affiliate cookie is present upon a new user's registration. """ utm_cookie_name = 'edx.test.utm' with mock.patch( 'student.models.RegistrationCookieConfiguration.current' ) as config: instance = config.return_value instance.utm_cookie_name = utm_cookie_name timestamp = 1475521816879 utm_cookie = { 'utm_source': 'test-source', 'utm_medium': 'test-medium', 'utm_campaign': 'test-campaign', 'utm_term': 'test-term', 'utm_content': 'test-content', 'created_at': timestamp } created_at = datetime.fromtimestamp(timestamp / float(1000), tz=pytz.UTC) self.client.cookies[utm_cookie_name] = json.dumps(utm_cookie) user = self.create_account_and_fetch_profile().user self.assertEqual( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_source')), utm_cookie.get('utm_source')) self.assertEqual( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_medium')), utm_cookie.get('utm_medium')) self.assertEqual( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_campaign')), utm_cookie.get('utm_campaign')) self.assertEqual( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_term')), utm_cookie.get('utm_term')) self.assertEqual( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_content')), utm_cookie.get('utm_content')) self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_CREATED_AT), str(created_at))
def test_no_referral(self): """Verify that no referral is recorded when a cookie is not present.""" utm_cookie_name = 'edx.test.utm' with mock.patch('student.models.RegistrationCookieConfiguration.current') as config: instance = config.return_value instance.utm_cookie_name = utm_cookie_name self.assertIsNone(self.client.cookies.get(settings.AFFILIATE_COOKIE_NAME)) self.assertIsNone(self.client.cookies.get(utm_cookie_name)) user = self.create_account_and_fetch_profile().user self.assertIsNone(UserAttribute.get_user_attribute(user, REGISTRATION_AFFILIATE_ID)) self.assertIsNone(UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_source'))) self.assertIsNone(UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_medium'))) self.assertIsNone(UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_campaign'))) self.assertIsNone(UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_term'))) self.assertIsNone(UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_content'))) self.assertIsNone(UserAttribute.get_user_attribute(user, REGISTRATION_UTM_CREATED_AT))
def test_utm_referral_attribution(self): """ Verify that a referral attribution is recorded if an affiliate cookie is present upon a new user's registration. """ utm_cookie_name = 'edx.test.utm' with mock.patch('student.models.RegistrationCookieConfiguration.current') as config: instance = config.return_value instance.utm_cookie_name = utm_cookie_name timestamp = 1475521816879 utm_cookie = { 'utm_source': 'test-source', 'utm_medium': 'test-medium', 'utm_campaign': 'test-campaign', 'utm_term': 'test-term', 'utm_content': 'test-content', 'created_at': timestamp } created_at = datetime.fromtimestamp(timestamp / float(1000), tz=pytz.UTC) self.client.cookies[utm_cookie_name] = json.dumps(utm_cookie) user = self.create_account_and_fetch_profile().user self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_source')), utm_cookie.get('utm_source') ) self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_medium')), utm_cookie.get('utm_medium') ) self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_campaign')), utm_cookie.get('utm_campaign') ) self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_term')), utm_cookie.get('utm_term') ) self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_content')), utm_cookie.get('utm_content') ) self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_CREATED_AT), str(created_at) )
def post(self, request, *args, **kwargs): if not request.user.is_authenticated(): return redirect("/login") if not UserAttribute.get_user_attribute(request.user, "access_mosoadmin"): return HttpResponse("No permission") self.make_common_context() action = request.POST.get('action', '') if action == 'create_user': uname = request.POST.get('student_uname', '').strip() name = request.POST.get('student_fullname', '').strip() is_tempuser = request.POST.get('is_tempuser', '').strip() password = request.POST.get('student_password', '').strip() self.msg = u'<h4>{0}</h4><p>{1}</p><hr />'.format( _('Create User Results'), self.create_user(uname, name, is_tempuser, password, request)) context = { 'msg': self.msg, } return render_to_response(self.template_name, context)
def _get_batched_users(self, site_domain, users_queryset, offset, users_query_batch_size): """ Args: site_domain: site where we need unsynced users users_queryset: users_queryset to slice users_query_batch_size: slice size Returns: site users """ self.stdout.write( u'Fetching Users for site {site} from {start} to {end}'.format( site=site_domain, start=offset, end=offset + users_query_batch_size ) ) users = users_queryset.select_related('profile')[offset: offset + users_query_batch_size] site_users = [ user for user in users if UserAttribute.get_user_attribute(user, 'created_on_site') == site_domain ] self.stdout.write(u'\tSite Users={count}'.format(count=len(site_users))) return site_users
def test_incomplete_utm_referral(self): """Verify that no referral is recorded when a cookie is not present.""" utm_cookie_name = 'edx.test.utm' with mock.patch( 'student.models.RegistrationCookieConfiguration.current' ) as config: instance = config.return_value instance.utm_cookie_name = utm_cookie_name utm_cookie = { 'utm_source': 'test-source', 'utm_medium': 'test-medium', # No campaign 'utm_term': 'test-term', 'utm_content': 'test-content', # No created at } self.client.cookies[utm_cookie_name] = json.dumps(utm_cookie) user = self.create_account_and_fetch_profile().user self.assertEqual( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_source')), utm_cookie.get('utm_source')) self.assertEqual( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_medium')), utm_cookie.get('utm_medium')) self.assertEqual( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_term')), utm_cookie.get('utm_term')) self.assertEqual( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_content')), utm_cookie.get('utm_content')) self.assertIsNone( UserAttribute.get_user_attribute( user, REGISTRATION_UTM_PARAMETERS.get('utm_campaign'))) self.assertIsNone( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_CREATED_AT))
def test_incomplete_utm_referral(self): """Verify that no referral is recorded when a cookie is not present.""" utm_cookie_name = 'edx.test.utm' with mock.patch('student.models.RegistrationCookieConfiguration.current') as config: instance = config.return_value instance.utm_cookie_name = utm_cookie_name utm_cookie = { 'utm_source': 'test-source', 'utm_medium': 'test-medium', # No campaign 'utm_term': 'test-term', 'utm_content': 'test-content', # No created at } self.client.cookies[utm_cookie_name] = json.dumps(utm_cookie) user = self.create_account_and_fetch_profile().user self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_source')), utm_cookie.get('utm_source') ) self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_medium')), utm_cookie.get('utm_medium') ) self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_term')), utm_cookie.get('utm_term') ) self.assertEqual( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_content')), utm_cookie.get('utm_content') ) self.assertIsNone( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_PARAMETERS.get('utm_campaign')) ) self.assertIsNone( UserAttribute.get_user_attribute(user, REGISTRATION_UTM_CREATED_AT) )
def test_unicode(self): UserAttribute.set_user_attribute(self.user, self.name, self.value) for field in (self.name, self.value, self.user.username): self.assertIn(field, unicode(UserAttribute.objects.get(user=self.user)))
def test_created_on_site_user_attribute_set(self): profile = self.create_account_and_fetch_profile(host=self.site.domain) self.assertEqual(UserAttribute.get_user_attribute(profile.user, 'created_on_site'), self.site.domain)
def test_no_referral(self): """Verify that no referral is recorded when a cookie is not present.""" self.assertIsNone(self.client.cookies.get(settings.AFFILIATE_COOKIE_NAME)) # pylint: disable=no-member user = self.create_account_and_fetch_profile().user self.assertIsNone(UserAttribute.get_user_attribute(user, REGISTRATION_AFFILIATE_ID))
def fetch_from_created_on_site_prop(user, domain): """ Fetch option. """ if not domain: return False return UserAttribute.get_user_attribute(user, 'created_on_site') == domain
def create_contractitem(request, contract_id): if not request.user.is_authenticated(): return redirect("/login") if not UserAttribute.get_user_attribute(request.user, "access_mosoadmin"): return HttpResponse("No permission") mosocontract = MosoContract.objects.get(pk=contract_id) msg = '' # create new contract's item if request.method == 'POST': start_date = request.POST.get('start_date', '') end_date = request.POST.get('end_date', '') course_id = request.POST.get('course_id', '') if not start_date or not end_date or not course_id: msg = u"缺少必填字段" else: contract_item = ContractItem(contract=mosocontract) contract_item.course_id = course_id contract_item.start_date = start_date contract_item.end_date = end_date try: from django.db import transaction with transaction.atomic(): contract_item.save() msg = u'条款添加成功' except Exception as error: msg = error contractitems = ContractItem.objects.filter(contract=mosocontract) # items infomation data = [] for item in contractitems: students = item.students.all() name_list = u', '.join([stu.profile.name for stu in students]) course_id = SlashSeparatedCourseKey.from_deprecated_string( item.course_id.to_deprecated_string()) course = get_course_by_id(course_id) item_data = [ course.display_name, item.start_date, item.end_date, len(students), name_list.encode('utf-8') ] data.append(item_data) datatable = dict(header=[ 'Course ID', 'Start Date', 'End Date', 'Current Quality', 'Students' ], title='Information for all Contract Items', data=data) # contract information mosocontract = [ mosocontract.code.encode('utf-8'), mosocontract.organization.name.encode('utf-8'), mosocontract.signed_date ] # course options def_ms = modulestore() courselist = def_ms.get_courses() courses_data = [] for course in courselist: courses_data.append([ course.display_name.encode('utf-8'), course.id.to_deprecated_string() ]) context = { 'msg': msg, 'courses_data': courses_data, 'mosocontract': mosocontract, 'datatable': datatable } return render_to_response('mosoadmin/mosoadmin_create_contractitems.html', context)
def test_created_on_site_user_attribute_set(self): profile = self.create_account_and_fetch_profile(host=self.site.domain) self.assertEqual( UserAttribute.get_user_attribute(profile.user, 'created_on_site'), self.site.domain)
def test_unicode(self): UserAttribute.set_user_attribute(self.user, self.name, self.value) for field in (self.name, self.value, self.user.username): self.assertIn(field, six.text_type(UserAttribute.objects.get(user=self.user)))