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)
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)
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'} ) )
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'}))
def __init__(self, *args, **kwargs): BaseFormView.__init__(self, *args, **kwargs) self.form_config = UserFormConfigState(self.session)
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)
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)