예제 #1
0
    def form_valid(self, form):
        first_name, last_name = form.cleaned_data['name']
        email = form.cleaned_data['email']

        if 'clients' in form.fields:
            clients = form.cleaned_data['clients']
        else:
            # if the manager has only one client, the form doen't have the
            # clients field, we must set it separated
            clients = self.request.user.managed_clients.all()

        try:
            # avoids double registration by trying to use an already existant
            # user and filters his attached clients from the manager choices
            teacher_user = User.objects.get(email=email)
            password = None
            clients = clients.exclude(teachers=teacher_user)
        except User.DoesNotExist:
            teacher_user = User(first_name=first_name,
                                last_name=last_name,
                                username=id_as_username('teacher'),
                                email=email)
            password = generate_random_passwords(1, flat=True)
            teacher_user.set_password(password)
            teacher_user.save()

            self.warn_user_create(teacher_user, password, clients)

        for client in clients:
            teacher_user.teacher_set.create(client=client)

        return redirect('manager:teacher-detail', pk=teacher_user.pk)
예제 #2
0
    def create_managers(self, form):
        """
        Creates specified managers, reusing then if already exists.

        Sets a random password for the just created users and sends an
        invitation email for each manager, reused or created (in this case,
        with his password).
        """
        for f in form:
            user = f.save(commit=False)
            if not user.username:
                user.username = id_as_username(prefix='user')
            if not user.pk:
                password = generate_random_passwords(1, flat=True)
                user.set_password(password)
            else:
                password = None
            user.save()
            self.demonstration.client.managers.add(user)

            # warn each user that he was invited as a manager
            email = EmailFromTemplate(
                subject=_('Welcome to Mainiti'),
                from_email=settings.DEFAULT_FROM_EMAIL,
                to=[user.email],
                template_name='demonstrations/purchase/manager_created_email',
                context={
                    'user': user,
                    'password': password,
                    'client': self.demonstration.client
                },
            )
            email.send()
예제 #3
0
    def reset_passwords(self, students):
        password_list = generate_random_passwords(len(students))
        pw_list = {}

        for student in students:
            password = password_list.pop(0)
            student.set_password(password)
            student.save()
            pw_list[student.get_full_name()] = password

        klass_pw_list = {self.klass.pk: pw_list}
        try:
            self.request.session['password_list'].update(klass_pw_list)
        except KeyError:
            self.request.session['password_list'] = klass_pw_list
예제 #4
0
    def form_valid(self, form):
        self.object.password_list_printed_at = None
        self.object.save()

        # reather than update the students list, use the students list to reset
        # their passwords
        users = form.cleaned_data['students']
        passwords = generate_random_passwords(len(users))
        users_passwords = []
        for user, passwd in zip(users, passwords):
            user.set_password(passwd)
            user.save()
            users_passwords.append((user.pk, passwd))

        # saves the pair user
        password_list = self.request.session.get('password_list', {})
        password_list[str(self.object.pk)] = users_passwords
        self.request.session['password_list'] = password_list
        return self.get_success_url()
예제 #5
0
    def create_students(self, students, **kwargs):
        passwords = generate_random_passwords(len(students))
        users = []

        for i, (first_name, last_name) in enumerate(students):
            user = User(
                username=id_as_username('student'),
                first_name=first_name,
                last_name=last_name,
            )
            user.set_password(passwords[i])
            user.save()

            self.klass.students.add(user)
            users.append(user.pk)

        # saves the pair user
        users_passwords = self.request.session.get('password_list', {})
        users_passwords[self.klass.pk] = zip(users, passwords)
        self.request.session['password_list'] = users_passwords
예제 #6
0
    def create_teacher(self, name, email):
        """
        Creates and returns users not found by email, otherwise, reuse them.

        Returns the user instance and the password used when created, or None
        if the password wasn't set because the user already exists.
        """
        try:
            user = User.objects.get(email=email)
            password = None
        except User.DoesNotExist:
            first_name, last_name = split_name(name)
            user = User(username=id_as_username(prefix='teacher'),
                        first_name=first_name,
                        last_name=last_name,
                        email=email)
            password = generate_random_passwords(1, flat=True)
            user.set_password(password)
            user.save()
        return user, password
예제 #7
0
def generate_klass_key(sender, instance, **kwargs):
    if not instance.key:
        keys = generate_random_passwords(1, length=4)
        instance.key = keys[0]