class IPersonalInfo(Interface): fullname = schema.TextLine( title=_(u'Name'), required=False, ) gender = schema.TextLine(title=_(u'Gender'), required=True) # gender = schema.Choice( # title=_(u'Gender'), # values=(u'Male', u'Female'), # default=u'Male / Female?', # default=u'Female', # required=True # ) birthdate = schema.TextLine(title=_(u'Birthdate'), required=False) # birthdate = schema.Date( # title=_(u'Birthdate'), # default=datetime.date(2007, 4, 1), # required=False # ) mobile = schema.TextLine(title=_(u'Mobile'), required=False)
class IChat(Interface): irc = schema.TextLine(title=_(u'IRC nickname'), required=False) telegram = schema.TextLine(title=_(u'Telegram account'), required=False) skype = schema.TextLine(title=_(u'Skype account'), required=False)
class ISocialNetwork(Interface): twitter = schema.TextLine(title=_(u'Twitter nickname'), required=False) instagram = schema.TextLine(title=_(u'Instagram account'), required=False) facebook = schema.TextLine(title=_(u'Facebook account'), required=False)
class IAddress(Interface): address1 = schema.TextLine(title=_(u'Address 1'), required=False) address2 = schema.TextLine(title=_(u'Address 2'), required=False) country = schema.TextLine(title=_(u'Country'), required=False) city = schema.TextLine(title=_(u'City'), required=False)
class IWork(Interface): institution = schema.TextLine(title=_(u'Institution / Organization'), required=False) instadd = schema.TextLine(title=_(u'Institution address'), required=False) officephone = schema.TextLine(title=_(u'Office phone'), required=False) position = schema.TextLine(title=_(u'Current position'), required=False) profession = schema.TextLine(title=_(u'Profession'), required=False)
class Wizard(wizard.Wizard): label = _(u'Start') validate_back = False def update(self): # Use collective.beaker for session managment session = ISession(self.request, None) self.sessionmanager = session super(Wizard, self).update() @property def steps(self): steps = [IntroStep, PersonalDataStep, SocialNetworkStep, OutroStep] return steps def applySteps(self, pfg, initial_finish=True): """ Run the apply method for each step in the wizard """ for step in self.activeSteps: if hasattr(step, 'apply'): step.apply(pfg, initial_finish=initial_finish) def showClear(self): return False def get_finish_url(self): return api.portal.get().absolute_url() def finish(self): super(Wizard, self).finish() url = self.get_finish_url() return self.request.response.redirect(url)
class IntroStep(wizard.Step): prefix = 'intro' fields = {} label = _(u'Introduction') index = viewpagetemplatefile.ViewPageTemplateFile('templates/intro.pt') def __init__(self, context, request, wizard): # Use collective.beaker for session managment session = ISession(request, None) self.sessionmanager = session super(IntroStep, self).__init__(context, request, wizard)
class OutroStep(wizard.Step): prefix = 'outro' fields = {} label = _(u'Thanks!') index = viewpagetemplatefile.ViewPageTemplateFile('templates/outro.pt') def __init__(self, context, request, wizard): # Use collective.beaker for session managment session = ISession(request, None) self.sessionmanager = session super(OutroStep, self).__init__(context, request, wizard) def get_url(self): url = self.wizard.get_finish_url() return url
class SocialNetworkStep(wizard.GroupStep): prefix = 'Social' label = _(u'Social Network accounts') description = _(u'Input your social networks details') template = viewpagetemplatefile.ViewPageTemplateFile( 'templates/socialnetwork.pt') fields = field.Fields() groups = [ChatGroup, SocialNetworkGroup] def __init__(self, context, request, wizard): # Use collective.beaker for session managment session = ISession(request, None) self.sessionmanager = session super(SocialNetworkStep, self).__init__(context, request, wizard) def load(self, context): member = api.user.get_current() data = self.getContent() # Chats group if not data.get('irc', None): irc = member.getProperty('irc') if type(irc).__name__ == 'object': irc = None data['irc'] = irc if not data.get('telegram', None): telegram = member.getProperty('telegram') if type(telegram).__name__ == 'object': telegram = None data['telegram'] = telegram if not data.get('skype', None): skype = member.getProperty('skype') if type(skype).__name__ == 'object': skype = None data['skype'] = skype # Social Network group if not data.get('twitter', None): twitter = member.getProperty('twitter') if type(twitter).__name__ == 'object': twitter = None data['twitter'] = twitter if not data.get('instagram', None): instagram = member.getProperty('instagram') if type(instagram).__name__ == 'object': instagram = None data['instagram'] = instagram if not data.get('facebook', None): facebook = member.getProperty('facebook') if type(facebook).__name__ == 'object': facebook = None data['facebook'] = facebook def apply(self, context, initial_finish=False): data = self.getContent() return data def applyChanges(self, data): member = api.user.get_current() member.setMemberProperties( mapping={ 'irc': data['irc'], 'telegram': data['telegram'], 'skype': data['skype'], 'twitter': data['twitter'], 'instagram': data['instagram'], 'facebook': data['facebook'] })
class SocialNetworkGroup(group.Group): prefix = 'socialnetwork' label = _(u'Social Network Information') fields = field.Fields(ISocialNetwork)
class ChatGroup(group.Group): prefix = 'chats' label = _(u'Chats Information') fields = field.Fields(IChat)
class PersonalDataStep(wizard.GroupStep): prefix = 'Address' label = _(u'Personal data, address and work details') description = _(u'Input your personal data address and work details') template = viewpagetemplatefile.ViewPageTemplateFile( 'templates/personaldata.pt') fields = field.Fields() groups = [PersonalInfoGroup, AddressGroup, WorkGroup] def __init__(self, context, request, wizard): # Use collective.beaker for session managment session = ISession(request, None) self.sessionmanager = session super(PersonalDataStep, self).__init__(context, request, wizard) def load(self, context): member = api.user.get_current() data = self.getContent() # Personal info group if not data.get('fullname', None): fullname = member.getProperty('fullname') if type(fullname).__name__ == 'object': fullname = None data['fullname'] = fullname if not data.get('gender', None): gender = member.getProperty('gender') if type(gender).__name__ == 'object': gender = None data['gender'] = gender if not data.get('birthdate', None): birthdate = member.getProperty('birthdate') if type(birthdate).__name__ == 'object': birthdate = None data['birthdate'] = birthdate if not data.get('mobile', None): mobile = member.getProperty('mobile') if type(mobile).__name__ == 'object': mobile = None data['mobile'] = mobile # Address group if not data.get('address1', None): address1 = member.getProperty('address1') if type(address1).__name__ == 'object': address1 = None data['address1'] = address1 if not data.get('address2', None): address2 = member.getProperty('address2') if type(address2).__name__ == 'object': address2 = None data['address2'] = address2 if not data.get('country', None): country = member.getProperty('country') if type(country).__name__ == 'object': country = None data['country'] = country if not data.get('city', None): city = member.getProperty('city') if type(city).__name__ == 'object': city = None data['city'] = city # Office group if not data.get('institution', None): institution = member.getProperty('institution') if type(institution).__name__ == 'object': institution = None data['institution'] = institution if not data.get('instadd', None): instadd = member.getProperty('instadd') if type(instadd).__name__ == 'object': instadd = None data['instadd'] = instadd if not data.get('officephone', None): officephone = member.getProperty('officephone') if type(officephone).__name__ == 'object': officephone = None data['officephone'] = officephone if not data.get('profession', None): profession = member.getProperty('profession') if type(profession).__name__ == 'object': profession = None data['profession'] = profession def apply(self, context, initial_finish=False): data = self.getContent() return data def applyChanges(self, data): member = api.user.get_current() member.setMemberProperties( mapping={ 'fullname': data['fullname'], 'gender': data['gender'], 'birthdate': data['birthdate'], 'mobile': data['mobile'], 'address1': data['address1'], 'address2': data['address2'], 'country': data['country'], 'city': data['city'], 'institution': data['institution'], 'instadd': data['instadd'], 'officephone': data['officephone'], 'profession': data['profession'] })
class WorkGroup(group.Group): prefix = 'work' label = _(u'Work Details') fields = field.Fields(IWork)
class AddressGroup(group.Group): prefix = 'address' label = _(u'Address Details') fields = field.Fields(IAddress)
class PersonalInfoGroup(group.Group): prefix = 'personalinfo' label = _(u'Personal information') # schema = IPersonalInfo fields = field.Fields(IPersonalInfo)