Esempio n. 1
0
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)
Esempio n. 2
0
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
            )
Esempio n. 4
0
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
            )
Esempio n. 5
0
    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)
Esempio n. 6
0
    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))
Esempio n. 7
0
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)
Esempio n. 8
0
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)
Esempio n. 9
0
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)
Esempio n. 10
0
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)
Esempio n. 11
0
    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
Esempio n. 14
0
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)
Esempio n. 15
0
 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))
Esempio n. 16
0
    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))
Esempio n. 18
0
 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))
Esempio n. 20
0
 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)
Esempio n. 21
0
 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)
Esempio n. 22
0
    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)
Esempio n. 23
0
 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 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))
Esempio n. 25
0
 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)
Esempio n. 27
0
    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))
Esempio n. 28
0
    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))
Esempio n. 30
0
    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))
Esempio n. 31
0
    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)
            )
Esempio n. 32
0
    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)
Esempio n. 33
0
    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))
Esempio n. 35
0
    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)
            )
Esempio n. 36
0
 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)))
Esempio n. 37
0
 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)
Esempio n. 38
0
 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))
Esempio n. 39
0
 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
Esempio n. 40
0
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)
Esempio n. 42
0
 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)))