示例#1
0
class LoginAddView(BaseFormView):
    """
    View handling login add
    """
    title = u"Ajouter des identifiants"
    schema = get_add_edit_schema()

    def __init__(self, *args, **kwargs):
        BaseFormView.__init__(self, *args, **kwargs)
        self.form_config = UserFormConfigState(self.session)

    def before(self, form):
        logger.debug(u"In the login form, defaults {0}".format(
            self.form_config.get_defaults())
        )
        form.set_appstruct(
            {
                'login': self.context.email,
                'user_id': self.context.id,
                'primary_group': self.form_config.get_default(
                    'primary_group', ""
                ),
                'groups': self.form_config.get_default('groups', []),
            }
        )

    def submit_success(self, appstruct):
        password = appstruct.pop('pwd_hash', None)
        model = self.schema.objectify(appstruct)
        primary_group = appstruct.pop('primary_group', None)
        groups = appstruct.pop('groups', [])
        if groups or primary_group:
            groups = list(groups)
            groups.append(primary_group)
            model.groups = groups

        model.user_id = self.context.id
        model.set_password(password)
        self.dbsession.add(model)
        self.dbsession.flush()

        next_step = self.form_config.get_next_step()
        if next_step is not None:
            redirect = self.request.route_path(
                next_step,
                id=self.context.id,
            )
        else:
            redirect = self.request.route_path(
                USER_ITEM_URL,
                id=self.context.id,
            )
        logger.debug(u"  + Login  with id {0} added".format(model.id))
        return HTTPFound(redirect)
示例#2
0
class LoginAddView(BaseFormView):
    """
    View handling login add
    """
    title = u"Ajouter des identifiants"
    schema = get_add_edit_schema()

    def __init__(self, *args, **kwargs):
        BaseFormView.__init__(self, *args, **kwargs)
        self.form_config = UserFormConfigState(self.session)

    def before(self, form):
        logger.debug(u"In the login form, defaults {0}".format(
            self.form_config.get_defaults()))
        form.set_appstruct({
            'login':
            self.context.email,
            'user_id':
            self.context.id,
            'primary_group':
            self.form_config.get_default('primary_group', ""),
            'groups':
            self.form_config.get_default('groups', []),
        })

    def submit_success(self, appstruct):
        password = appstruct.pop('pwd_hash', None)
        model = self.schema.objectify(appstruct)
        primary_group = appstruct.pop('primary_group', None)
        groups = appstruct.pop('groups', [])
        if groups or primary_group:
            groups = list(groups)
            groups.append(primary_group)
            model.groups = groups

        model.user_id = self.context.id
        model.set_password(password)
        self.dbsession.add(model)
        self.dbsession.flush()

        next_step = self.form_config.get_next_step()
        if next_step is not None:
            redirect = self.request.route_path(
                next_step,
                id=self.context.id,
            )
        else:
            redirect = self.request.route_path(
                USER_ITEM_URL,
                id=self.context.id,
            )
        logger.debug(u"  + Login  with id {0} added".format(model.id))
        return HTTPFound(redirect)
示例#3
0
def userdatas_add_entry_point(context, request):
    """
    Entry point for userdatas add
    Record the userdatas form as next form urls

    The add process follows this stream :
        1- entry point
        2- user add form
        3- userdatas form
    """
    config = UserFormConfigState(request.session)
    config.set_steps([USER_USERDATAS_ADD_URL])
    config.add_defaults({'primary_group': 'contractor'})
    return HTTPFound(
        request.route_path(
            "/users",
            _query={'action': 'add'}
        )
    )
示例#4
0
def userdatas_add_entry_point(context, request):
    """
    Entry point for userdatas add
    Record the userdatas form as next form urls

    The add process follows this stream :
        1- entry point
        2- user add form
        3- userdatas form
    """
    config = UserFormConfigState(request.session)
    config.set_steps([USER_USERDATAS_ADD_URL])
    config.add_defaults({'primary_group': 'contractor'})
    return HTTPFound(request.route_path("/users", _query={'action': 'add'}))
示例#5
0
 def __init__(self, *args, **kwargs):
     BaseFormView.__init__(self, *args, **kwargs)
     self.form_config = UserFormConfigState(self.session)
示例#6
0
 def __init__(self, *args, **kwargs):
     BaseFormView.__init__(self, *args, **kwargs)
     self.form_config = UserFormConfigState(self.session)
示例#7
0
class UserAddView(BaseFormView):
    """
    view handling user add, also check for existing similar accounts
    """
    title = u"Ajouter un compte"
    schema = get_add_edit_schema()

    def __init__(self, *args, **kwargs):
        BaseFormView.__init__(self, *args, **kwargs)
        self.form_config = UserFormConfigState(self.session)

    def query_homonym(self, lastname, email):
        """
        collect the accounts with same name or email

        :param str lastname: The lastname to check
        :param str email: the email to check
        :returns: The SQLAlchemy query object
        :rtype: obj
        """
        query = User.query().filter(
            or_(
                User.lastname == lastname,
                User.email == email,
            ))
        return query

    def _confirmation_form(self, query, appstruct, query_count):
        """
        Return datas used to display a confirmation form

        :param obj query: homonym SQLAlchemy query object
        :param dict appstruct: Preserved form datas
        :param int query_count: The number of homonyms
        :returns: template vars
        :rtype: dict
        """
        form = self._get_form()
        _query = self.request.GET.copy()
        _query['confirmation'] = '1'
        form.action = self.request.current_route_path(_query=_query)

        form.set_appstruct(appstruct)
        datas = dict(
            duplicate_accounts=query.all(),
            appstruct=appstruct,
            form=form.render(),
            confirm_form_id=form.formid,
            user_view_route=USER_ITEM_URL,
            back_url=self.request.route_path(USER_URL),
        )
        datas.update(self._more_template_vars())
        return datas

    def submit_success(self, appstruct):
        """
        Handle successfull form submission

        :param dict appstruct: The submitted datas
        """
        logger.debug(u"Adding a new user account")
        logger.debug(appstruct)

        confirmation = self.request.GET.get('confirmation', '0')
        lastname = appstruct['lastname']
        email = appstruct['email']

        if confirmation == '0':  # Check homonyms
            query = self.query_homonym(lastname, email)
            count = query.count()
            if count > 0:
                return self._confirmation_form(query, appstruct, count)

        add_login = appstruct.pop('add_login', False)

        model = self.schema.objectify(appstruct)

        self.dbsession.add(model)
        self.dbsession.flush()

        if add_login:
            redirect = self.request.route_path(USER_LOGIN_URL,
                                               id=model.id,
                                               _query={'action': 'add'})
        else:
            next_step = self.form_config.get_next_step()
            if next_step is not None:
                redirect = self.request.route_path(
                    next_step,
                    id=model.id,
                )
            else:
                redirect = self.request.route_path(
                    USER_ITEM_URL,
                    id=model.id,
                )
        logger.debug(u"Account with id {0} added".format(model.id))
        return HTTPFound(redirect)
示例#8
0
class UserAddView(BaseFormView):
    """
    view handling user add, also check for existing similar accounts
    """
    title = u"Ajouter un compte"
    schema = get_add_edit_schema()

    def __init__(self, *args, **kwargs):
        BaseFormView.__init__(self, *args, **kwargs)
        self.form_config = UserFormConfigState(self.session)

    def query_homonym(self, lastname, email):
        """
        collect the accounts with same name or email

        :param str lastname: The lastname to check
        :param str email: the email to check
        :returns: The SQLAlchemy query object
        :rtype: obj
        """
        query = User.query().filter(
            or_(
                User.lastname == lastname,
                User.email == email,
            )
        )
        return query

    def _confirmation_form(self, query, appstruct, query_count):
        """
        Return datas used to display a confirmation form

        :param obj query: homonym SQLAlchemy query object
        :param dict appstruct: Preserved form datas
        :param int query_count: The number of homonyms
        :returns: template vars
        :rtype: dict
        """
        form = self._get_form()
        _query = self.request.GET.copy()
        _query['confirmation'] = '1'
        form.action = self.request.current_route_path(_query=_query)

        form.set_appstruct(appstruct)
        datas = dict(
            duplicate_accounts=query.all(),
            appstruct=appstruct,
            form=form.render(),
            confirm_form_id=form.formid,
            user_view_route=USER_ITEM_URL,
            back_url=self.request.route_path(USER_URL),
        )
        datas.update(self._more_template_vars())
        return datas

    def submit_success(self, appstruct):
        """
        Handle successfull form submission

        :param dict appstruct: The submitted datas
        """
        logger.debug(u"Adding a new user account")
        logger.debug(appstruct)

        confirmation = self.request.GET.get('confirmation', '0')
        lastname = appstruct['lastname']
        email = appstruct['email']

        if confirmation == '0':  # Check homonyms
            query = self.query_homonym(lastname, email)
            count = query.count()
            if count > 0:
                return self._confirmation_form(query, appstruct, count)

        add_login = appstruct.pop('add_login', False)

        model = self.schema.objectify(appstruct)

        self.dbsession.add(model)
        self.dbsession.flush()

        if add_login:
            redirect = self.request.route_path(
                USER_LOGIN_URL,
                id=model.id,
                _query={'action': 'add'}
            )
        else:
            next_step = self.form_config.get_next_step()
            if next_step is not None:
                redirect = self.request.route_path(
                    next_step,
                    id=model.id,
                )
            else:
                redirect = self.request.route_path(
                    USER_ITEM_URL,
                    id=model.id,
                )
        logger.debug(u"Account with id {0} added".format(model.id))
        return HTTPFound(redirect)