def Profile(user): class profile(Form): pass if user.heightInch is None: #metric defaultSystem = "Metric" defaultHeight = [int(user.heightFeet), None, None, None] defaultWeight = [int(user.weight), None] else: defaultSystem = "US" defaultHeight = [ None, None, int(user.heightFeet), int(user.heightInch) ] defaultWeight = [None, int(user.weight)] profile.age = IntegerField('age', validators=[Required()], default=int(user.age)) profile.gender = RadioField('gender', validators=[Required()], choices=[("Males", "Male"), ("Females", "Female")], default=user.gender) profile.conditions = SelectField('condition', choices=[("None", "None"), ("Pregnancy", "Pregnancy"), ("Lactation", "Lactation")], validators=[Required()], default=user.conditions) profile.unitSystem = RadioField('gender', validators=[Required()], choices=[("US", "US"), ("Metric", "Metric")], default=defaultSystem) profile.weight = IntegerField('weight(lb)', [validators.Optional()], default=defaultWeight[1]) profile.weightKg = IntegerField('weight(kg)', [validators.Optional()], default=defaultWeight[0]) profile.heightFeet = IntegerField('height(ft)', [validators.Optional()], default=defaultHeight[2]) profile.heightInch = IntegerField('height(in)', [validators.Optional()], default=defaultHeight[3]) profile.heightCm = IntegerField('height(cm)', [validators.Optional()], default=defaultHeight[0]) profile.activity = SelectField('activity', coerce=float, choices=[(1.2, "Sedentary"), (1.375, "Lightly Active"), (1.55, "Moderately Active"), (1.725, "Very active"), (1.9, "Extremely Active")], validators=[Required()], default=user.activity) profile.saveChange = SubmitField("Save Changes") form = profile() return form
class ProfileForm(Form): next = HiddenField() name = TextField( label = _("Username"), validators = [ Required(), Length(USERNAME_LEN_MIN, USERNAME_LEN_MAX), ], description = u"Combination of letters/digits/underscore, at least %s characters." % USERNAME_LEN_MIN, ) email = EmailField( label = _('Email'), validators = [Email()], ) created_time = DateField( label = _('Created time'), ) role_id = RadioField( label = "Role", validators = [AnyOf([str(val) for val in USER_ROLE.keys()])], choices = [(str(val), label) for val, label in USER_ROLE.items()], ) status_id = RadioField( label = "Status", validators = [AnyOf([str(val) for val in USER_STATUS.keys()])], choices = [(str(val), label) for val, label in USER_STATUS.items()], ) real_name = TextField( label = _('Real name'), validators = [ Length(REALNAME_LEN_MIN, REALNAME_LEN_MAX), ] ) age = IntegerField( label = _('Age'), validators = [NumberRange(AGE_MIN, AGE_MAX)], ) phone = TelField( label = _('Phone'), ) url = URLField( label = _('URL'), validators = [URL()], ) deposit = DecimalField( label = _('Deposit'), validators = [NumberRange(DEPOSIT_MIN, DEPOSIT_MAX)], ) location = TextField( label = _('Location'), validators = [Length(max=50)] ) bio = TextAreaField( label = _('Bio'), validators = [Length(max=1024)] ) submit = SubmitField(_('Save'))
class UserForm(Form): next = HiddenField() role_id = RadioField(u"Role", [AnyOf([str(val) for val in USER_ROLE.keys()])], choices=[(str(val), label) for val, label in USER_ROLE.items()]) status_id = RadioField(u"Status", [AnyOf([str(val) for val in USER_STATUS.keys()])], choices=[(str(val), label) for val, label in USER_STATUS.items()]) # A demo of datepicker. created_time = DateField(u'Created time') submit = SubmitField(u'Save')
class EditForm(Form): username = TextField( 'Username', validators=[validators.LengthOrEmpty(min=3, max=8)]) first_name = TextField('First Name') last_name = TextField('Last Name') dob = TextField( 'Date of Birth (MM/DD/YYYY)', validators=[ validators.Date( format='%m/%d/%Y', message='Invalid format. Please use mm/dd/yyyy.') ]) email = TextField('E-mail Address', validators=[validators.Email()]) sponsor = SelectField('Sponsor', choices=[(s.username, ''.join( (s.last_name, ', ', s.first_name))) for s in database.get_sponsors(True)]) grad_date = TextField( 'Graduation Date (MM/YYYY)', validators=[ validators.Date(format='%m/%Y', message='Invalid format. Please use mm/yyyy') ]) acct_type = RadioField( choices=[('acad', 'Academic'), ('research', 'Research & Academic')]) comments = TextAreaField('Comments') status = TextField('Status')
class EditMachineForm(Form): name = TextField(_(u"机器名:"), validators=[required(_(u"请输入机器名")), is_legal_name]) description = TextAreaField(_(u"描述:")) status = RadioField(_(u"状态:"), default=Machine.OK, coerce=int, choices=((Machine.OK, _(u"正常")), (Machine.REALLY, _(u"停用")))) username = TextField(_(u"用户名:"), validators=[required(_(u"请输入用户名"))]) password = TextField(_(u"密码:"), validators=[required(message=_(u"请输入密码"))]) url_hudson = TextField(_(u"Hudson地址:"), validators=[required(_(u"请输入Hudson地址"))]) key = TextField(_(u"SSH Key:")) submit = SubmitField(_(u"保存")) def __init__(self, machine, *args, **kwargs): self.machine = machine kwargs['obj'] = self.machine super(EditMachineForm, self).__init__(*args, **kwargs) def validate_name(self, field): machine = Machine.query.filter( db.and_(Machine.name.like(field.data), db.not_(Machine.id == self.machine.id))).first() if machine: raise ValidationError(gettext(u"机器名已经存在"))
class UserRegForm(Form): name = TextField( u"用户名", validators=[Required(), Length(min=3, max=32), Regexp(re_username)]) email = TextField(u'Email', validators=[Required(), Email()]) gender = RadioField(u'性别', coerce=int, choices=[(0, u'男'), (1, u'女')], default=0, widget=BSListWidget()) password = PasswordField(u'密码', validators=[ Required(), Length(min=5, max=60), EqualTo('confirm', message='Passwords must match') ]) confirm = PasswordField(u'确认密码', validators=[Required(), Length(min=5, max=60)]) def validate_name(form, field): name = field.data.lower() if name in reserved_words: raise ValidationError(u'用户名不能为系统保留字') user = User.query.filter(User.username == field.data).first() if user: raise ValidationError(u'该用户名已被注册') def validate_email(form, field): user = User.query.filter(User.email == field.data).first() if user: raise ValidationError(u'该email已被注册')
class ProfileForm(Form): multipart = True next = HiddenField() email = EmailField(u'Email', [Required(), Email()]) # Don't use the same name as model because we are going to use populate_obj(). avatar_file = FileField(u"Avatar", [Optional()]) sex_code = RadioField(u"Sex", [AnyOf([str(val) for val in SEX_TYPE.keys()])], choices=[(str(val), label) for val, label in SEX_TYPE.items()]) age = IntegerField(u'Age', [Optional(), NumberRange(AGE_MIN, AGE_MAX)]) phone = TelField(u'Phone', [Length(max=64)]) url = URLField(u'URL', [Optional(), URL()]) deposit = DecimalField( u'Deposit', [Optional(), NumberRange(DEPOSIT_MIN, DEPOSIT_MAX)]) location = TextField(u'Location', [Length(max=64)]) bio = TextAreaField(u'Bio', [Length(max=1024)]) submit = SubmitField(u'Save') def validate_name(form, field): user = User.get_by_id(current_user.id) if not user.check_name(field.data): raise ValidationError("Please pick another name.") def validate_avatar_file(form, field): if field.data and not allowed_file(field.data.filename): raise ValidationError("Please upload files with extensions: %s" % "/".join(ALLOWED_AVATAR_EXTENSIONS))
class PostForm(Form): title = TextField(u"标题", validators=[required(message=u"标题不能为空")], id="post_title") link = TextField(u"链接", default="http://", validators=[optional(), url(message=u"必须是个有效的链接")], id="post_link") description = TextAreaField(u"描述", id="post_description") tags = TextField(u"标签(用逗号分隔)", id="post_tags") access = RadioField(u"谁可以查看?", default=Post.PUBLIC, coerce=int, choices=((Post.PUBLIC, u"任何人"), (Post.FRIENDS, u"好友"), (Post.PRIVATE, u"只有自己"))) submit = SubmitField(u"提交") def __init__(self, *args, **kwargs): self.post = kwargs.get('obj', None) super(PostForm, self).__init__(*args, **kwargs) def validate_link(self, field): posts = Post.query.public().filter_by(link=field.data) if self.post: posts = posts.filter(db.not_(Post.id == self.post.id)) if posts.count(): raise ValidationError, u"这个链接已经有人提交了"
class UserForm(Form): next = HiddenField() role_code = RadioField(u"Role", [AnyOf([str(val) for val in USER_ROLE.keys()])], choices=[(str(val), label) for val, label in USER_ROLE.items()]) status_code = RadioField(u"Status", [AnyOf([str(val) for val in USER_STATUS.keys()])], choices=[(str(val), label) for val, label in USER_STATUS.items()]) # A demo of datepicker. created_time = DateField(u'Created time') submit = SubmitField(u'Save') def save(self, user): self.populate_obj(user) db.session.add(user) db.session.commit()
def __init__(self, name, title, descr, default, column): Filter.__init__(self, name, title, descr) self.default = default self.column_names = column self.form_def = [ RadioField(choices=[('1', _(u'Yes')), ('0', _(u'No')), ('-1', _(u'Ignore'))], default=default) ]
class EditUserForm(Form): next = HiddenField() role_code = RadioField(_("Role"), [AnyOf([str(val) for val in USER_ROLE.keys()])], choices=[(str(val), label) for val, label in USER_ROLE.items()]) status_code = RadioField(_("Status"), [AnyOf([str(val) for val in USER_STATUS.keys()])], choices=[(str(val), label) for val, label in USER_STATUS.items()]) # A demo of datepicker. vm_quota = IntegerField( _("VM Quota"), [Required(), NumberRange(VM_QUOTA_MIN, VM_QUOTA_MAX)]) created_time = DateField(_('Created time')) submit = SubmitField(_('Save')) def validate_name(self, field): if User.query.filter_by(name=field.data).first() is not None: raise ValidationError(_(u'This username is taken'))
class EditHostForm(Form): next = HiddenField() type_code = RadioField(_(u"Hypervisor Type"), [AnyOf([str(val) for val in HOST_TYPE.keys()])], choices=[(str(val), label) for val, label in HOST_TYPE.items()]) username = TextField(_(u'The Username used by libvirt+ssh connection'), [Required()]) submit = SubmitField(_(u'Save')) def validate_address(self, field): if Host.query.filter_by(address=field.data).first() is not None: raise ValidationError(_(u'This host is added'))
class LoginForm(Form): next = HiddenField() login = TextField(_(u'Username or email'), [Required()]) password = PasswordField( _('Password'), [Required(), Length(PASSWORD_LEN_MIN, PASSWORD_LEN_MAX)]) locale_code = RadioField( _("Language"), [AnyOf([str(val) for val in USER_LOCALE_STRING.keys()])], choices=[(str(val), label) for val, label in USER_LOCALE_STRING.items()], default=USER_LOCALE_ZH_CN) remember = BooleanField(_('Remember me')) submit = SubmitField(_('Login'))
class EditTaskForm(Form): name = TextField( _(u"任务名称"), validators=[required(message=_(u"任务名称不为空")), is_legal_taskname]) description = TextAreaField(_(u"描述")) access = RadioField(_(u"状态"), default=Task.PUBLIC, coerce=int, choices=((Task.PUBLIC, _(u"公开")), (Task.PRIVATE, _(u"私有")))) moduletype_id = SelectField(_(u"选择模块"), coerce=int) case_list = SelectMultipleField( _(u"选择用例"), coerce=int, option_widget=widgets.CheckboxInput(), widget=widgets.ListWidget(prefix_label=False)) code_list = SelectMultipleField( _(u"选择代码"), coerce=int, option_widget=widgets.CheckboxInput(), widget=widgets.ListWidget(prefix_label=False)) command = TextAreaField(_(u"执行命令")) runtime = TextAreaField(_(u"运行时间")) svn = TextAreaField(_(u"svn地址"), validators=[is_legal_svn]) email = TextAreaField(_(u"邮箱地址")) email_topic = TextAreaField(_(u"邮件主题")) other = TextAreaField(_(u"其他")) submit = SubmitField(_(u"保存")) def __init__(self, task, *args, **kwargs): self.task = task kwargs['obj'] = self.task super(EditTaskForm, self).__init__(*args, **kwargs) def validate_name(self, field): task = Task.query.filter( db.and_(Task.name.like(field.data), db.not_(Task.id == self.task.id))).first() if task: raise ValidationError(gettext(u"名称已经被使用"))
class AddTaskForm(Form): name = TextField( _(u"任务名称"), validators=[required(message=_(u"任务名称不为空")), is_legal_taskname]) description = TextAreaField(_(u"描述")) access = RadioField(_(u"状态"), default=Task.PUBLIC, coerce=int, choices=((Task.PUBLIC, _(u"公开")), (Task.PRIVATE, _(u"私有")))) moduletype_id = SelectField(_(u"选择模块"), coerce=int) case_list = SelectMultipleField( _(u"选择用例"), coerce=int, option_widget=widgets.CheckboxInput(), widget=widgets.ListWidget(prefix_label=False)) code_list = SelectMultipleField( _(u"选择代码"), coerce=int, option_widget=widgets.CheckboxInput(), widget=widgets.ListWidget(prefix_label=False)) command = TextAreaField( _(u"执行命令"), default= u"hg clone http://10.0.2.205:9090/hg/test.cgi/script/\n./script/command.sh" ) runtime = TextAreaField(_(u"运行时间")) svn = TextAreaField(_(u"svn地址"), validators=[is_legal_svn]) email = TextAreaField(_(u"邮箱地址")) email_topic = TextAreaField(_(u"邮件主题")) other = TextAreaField(_(u"其他")) submit = SubmitField(_(u"添加")) def validate_name(self, field): task = Task.query.filter(Task.name.like(field.data)).first() if task: raise ValidationError(gettext(u"该名称已经被使用"))
class ExampleForm(Form): field1 = TextField('First Field', description='This is field one.') field2 = TextField('Second Field', description='This is field two.', validators=[Required()]) hidden_field = HiddenField('You cannot see this', description='Nope') recaptcha = RecaptchaField('A sample recaptcha field') radio_field = RadioField('This is a radio field', choices=[ ('head_radio', 'Head radio'), ('radio_76fm', "Radio '76 FM"), ('lips_106', 'Lips 106'), ('wctr', 'WCTR'), ]) def validate_hidden_field(form, field): raise ValidationError('Always wrong')
class MarkForm(Form): referrer = HiddenField([validators.URL(require_tld=False)]) title = TextField('Title', [validators.Length(min=0, max=255)], filters=[strip_filter]) url = TextField('URL', [validators.Length(min=4, max=512), validators.URL(require_tld=False, message='Not a valid URL')], filters=[strip_filter]) type = RadioField('Type', coerce=unicode, choices=[('bookmark', 'Bookmark'), ('feed', 'Feed')], default='bookmark') tags = TextField('Tags', [validators.Length(min=0, max=255)], filters=[strip_filter])
class NewArticleForm(Form): """ 新增文章用的表單 """ title = TextField(u"標題", validators=[required()]) content = TextAreaField(u"內文", validators=[required()]) authority = RadioField(u"類型", choices=[('public', u'公開'), ('private', u'私人')], default='private') #question = FormField(QuestionForm) #questions = FieldList(TextAreaField()) #questions = FieldList(FormField(QuestionForm)) # questions = content # for i in xrange(20): # qu = TextField(u"問題"+str(i), validators=[required()]) # questions.append(content) # #questions.append_entry() submit = SubmitField(u"送出")
class AddMachineForm(Form): name = TextField(_(u"机器名:"), validators=[required(_(u"请输入机器名")), is_legal_name]) description = TextAreaField(_(u"描述:")) status = RadioField(_(u"状态:"), default=Machine.OK, coerce=int, choices=((Machine.OK, _(u"正常")), (Machine.REALLY, _(u"停用")))) username = TextField(_(u"用户名:"), validators=[required(_(u"请输入用户名"))]) password = TextField(_(u"密码:"), validators=[required(message=_(u"请输入密码"))]) url_hudson = TextField(_(u"Hudson地址:"), validators=[required(_(u"请输入Hudson地址"))]) submit = SubmitField(_(u"提交")) def validate_name(self, field): machine = Machine.query.filter(Machine.name.like(field.data)).first() if machine: raise ValidationError(gettext(u"机器名已经存在"))
class EditTaskForm(Form): '''It is used for editing tasks, defines edit tasks form.''' next = HiddenField() name = TextField( _(u"任务名称"), validators=[required(message=_(u"任务名称不为空")), is_legal_taskname]) description = TextAreaField(_(u"描述")) access = RadioField(_(u"状态"), default=Task.PUBLIC, coerce=int, choices=((Task.PUBLIC, _(u"公开")), (Task.PRIVATE, _(u"私有")))) moduletype_id = SelectField(_(u"选择模块"), coerce=int) machine_id = SelectField(_(u"选择机器:"), coerce=int) command = TextAreaField(_(u"执行命令")) runtime = TextAreaField(_(u"运行时间")) svn = TextAreaField(_(u"svn地址"), validators=[is_legal_svn]) email = TextAreaField(_(u"邮箱地址")) email_topic = TextAreaField(_(u"邮件主题")) other = TextAreaField(_(u"其他")) submit = SubmitField(_(u"保存")) def __init__(self, task, *args, **kwargs): self.task = task kwargs['obj'] = self.task super(EditTaskForm, self).__init__(*args, **kwargs) def validate_name(self, field): task = Task.query.filter( db.and_(Task.name.like(field.data), db.not_(Task.id == self.task.id))).first() if task: raise ValidationError(gettext(u"名称已经被使用"))
class AddCaseForm(Form): title = TextField( _(u"用例名:"), validators=[required(message=_(u"请输入用例名")), is_legal_name]) description = TextAreaField(_(u"描述:")) access = RadioField(_(u"状态:"), default=Case.PUBLIC, coerce=int, choices=((Case.PUBLIC, _(u"公开")), (Case.PRIVATE, _(u"私有")))) usecase_input = TextAreaField(_(u"用例输入:")) usecase_output = TextAreaField(_(u"用例输出:")) module_type = SelectField(_(u"所属模块:"), coerce=int) submit = SubmitField(_(u"提交")) def validate_title(self, field): case = Case.query.filter(Case.title.like(field.data)).first() if case: raise ValidationError(gettext(u"用例名已经存在"))
class EditCaseForm(Form): title = TextField( _(u"用例名:"), validators=[required(message=_(u"请输入用例名")), is_legal_name]) description = TextField(_(u"描述:")) access = RadioField(_(u"状态:"), default=Case.PUBLIC, coerce=int, choices=((Case.PUBLIC, _(u"公开")), (Case.PRIVATE, _(u"私有")))) usecase_input = TextAreaField(_(u"用例输入:")) usecase_output = TextAreaField(_(u"用例输出:")) module_type = SelectField(_(u"所属模块:"), coerce=int) submit = SubmitField(_(u"保存")) def __init__(self, case, *args, **kwargs): self.case = case kwargs['obj'] = self.case super(EditCaseForm, self).__init__(*args, **kwargs)
class RegisterForm(Form): firstname = TextField('First Name', [validators.Required()], description=u'First Name') lastname = TextField('Last Name',[validators.Required()], description=u'Last Name') email = TextField('Email',[validators.Email(message= (u'Invalid email address'))], description=u'Email') password = PasswordField('Password', [validators.Required(), validators.length(min=6, max=25)], description=u'Password') address= TextField('Address',[validators.Required()], description=u'Address') city= TextField('City',[validators.Required()], description=u'City') state = TextField('State', [validators.Required(), validators.length(max=2)], description=u'State') zipcode = TextField('Zipcode', [validators.Required()], description=u'Zipcode') country = TextField('Country',[validators.Required()], description=u'Country') dob = DateField('DOB', [validators.Required(message= (u'Enter birthdate: mm/dd/yyyy'))], format= '%m/%d/%Y', description=u'Date of Birth (mm/dd/yyyy)') gender = RadioField('Gender', [validators.Required()], choices=[('male', 'M'),('female','F')], description=u'Gender')
class AddTaskForm(Form): '''It is used for adding tasks, defines add tasks form.''' next = HiddenField() name = TextField( _(u"任务名称:"), validators=[required(message=_(u"任务名称不为空")), is_legal_taskname]) description = TextAreaField(_(u"描述:")) access = RadioField(_(u"状态:"), default=Task.PUBLIC, coerce=int, choices=((Task.PUBLIC, _(u"公开")), (Task.PRIVATE, _(u"私有")))) moduletype_id = SelectField(_(u"选择模块:"), coerce=int) machine_id = SelectField(_(u"选择机器:"), coerce=int) command = TextAreaField( _(u"执行命令:"), default= u"hg clone http://10.0.2.205:9090/hg/test.cgi/script/\n./script/command.sh" ) runtime = TextAreaField(_(u"运行时间:")) svn = TextAreaField(_(u"svn地址:"), validators=[is_legal_svn]) email = TextAreaField(_(u"邮箱地址:")) email_topic = TextAreaField(_(u"邮件主题:")) other = TextAreaField(_(u"其他:")) submit = SubmitField(_(u"添加")) def validate_name(self, field): task = Task.query.filter(Task.name.like(field.data)).first() if task: raise ValidationError(gettext(u"该名称已经被使用"))
class ProfileForm(Form): multipart = True next = HiddenField() email = EmailField(_(u'Email'), [Required(), Email()]) vm_quota = IntegerField(_(u'Quota of VirtualMachines')) locale_code = RadioField( _("Language"), [AnyOf([str(val) for val in USER_LOCALE_STRING.keys()])], choices=[(str(val), label) for val, label in USER_LOCALE_STRING.items()]) submit = SubmitField(_(u'Save')) def validate_name(form, field): user = User.get_by_id(current_user.id) if not user.check_name(field.data): raise ValidationError(_("Please pick another name.")) def validate_vm_quota(form, field): if (not current_user.is_admin()) and current_user.vm_quota != int( field.data): raise ValidationError(_("Only admin user can update vm quota."))
class EditAccountForm(Form): '''It is used for edit account, defines edit account form.''' username = TextField(_(u"用户名:"), validators=[ required(_(u"请输入用户名")), is_legal_name]) email = TextField(_(u"邮箱地址:"), validators=[ required(message=_(u"请输入邮箱地址")), email(message=_(u"请输入有效的邮箱地址"))]) email_alerts = BooleanField(_(u"开启邮件提醒")) status = BooleanField(_(u"账号状态")) role = RadioField(_(u"角色"), default=User.MEMBER, coerce=int, choices=( (User.MEMBER, _(u"普通用户")), (User.MODERATOR, _(u"高级用户")), (User.ADMIN, _(u"管理员")))) submit = SubmitField(_(u"保存")) def __init__(self, user, *args, **kwargs): self.user = user kwargs['obj'] = self.user super(EditAccountForm, self).__init__(*args, **kwargs) def validate_username(self, field): user = User.query.filter(db.and_( User.username.like(field.data), db.not_(User.id == self.user.id))).first() if user: raise ValidationError(gettext(u"用户名已经存在")) def validate_email(self, field): user = User.query.filter(db.and_( User.email.like(field.data), db.not_(User.id == self.user.id))).first() if user: raise ValidationError(gettext(u"邮箱地址已经存在"))
def userlist(page=1, pending=False, sponsored=False, rolloffs=False): # We need to make sure sponsors without admin/labstaff permissions don't go # browsing through all the users data domains = g.user.get_domains() if ((sponsored and 'sponsor' not in domains) or (not sponsored and (not g.user_is_labstaff) and (not g.user_is_admin)) or (rolloffs and (not g.user_is_labstaff) and (not g.user_is_admin))): flash("Unauthorized.") return redirect('index') if (pending or rolloffs) and request.method == "POST": form = Form(request.form) if not form.validate(): flash("There was an error with your submission.") redirect(request.url) users = [ user for user, value in request.form.iteritems() if value == 'approve' ] if rolloffs: users = [user for user, value in request.form.iteritems()] users = [User.username == user for user in users] if len(users) > 0: query = User.query.filter(or_(*users)) if sponsored: # Filter and make sure we only get this sponsors users, for security query = query.filter(User.sponsor == g.user.username) users = query.all() for user in users: if sponsored: user.status = 'pending_labstaff' elif rolloffs: user.status = 'pending_rolloff' else: user.status = 'pending_create' db.session.add(user) db.session.commit() # here we handle denying accounts: users = [ user for user, value in request.form.iteritems() if value == 'deny' ] users = [User.username == user for user in users] if len(users) > 0: query = User.query.filter(or_(*users)) if sponsored: query = query.filter(User.sponsor == g.user.username) users = query.all() for user in users: # send rejection emails, silent reject if comments are empty if sponsored: mail.sponsor_reject(user) elif g.user_is_admin: mail.admin_reject(user) # drop rejected users db.session.delete(user) db.session.commit() query = User.query sort = 'username' sort_col = User.username sort_dir = asc cols = { 'username': User.username, 'uid': User._uid, 'sponsor': User.sponsor, 'email': User.email, 'name': User.last_name, 'last_name': User.last_name, 'first_name': User.first_name, 'status': User.status, 'grad_date': User._grad_date } # Let's make the filter form class FilterForm(Form): pass for field, col in cols.iteritems(): setattr(FilterForm, field, TextField()) filter_form = FilterForm(request.args) if 'sort' in request.args: if request.args['sort'] in cols: sort = request.args['sort'] sort_col = cols[request.args['sort']] if 'dir' in request.args and request.args['dir'] == 'desc': sort_dir = desc if sponsored: query = query.filter(User.sponsor == g.user.username) if pending: query = query.filter(User.status == 'pending_sponsor') else: query = query.filter(User.status != 'pending_sponsor') elif rolloffs: now = date.today() query = query.filter(User._grad_date <= now) query = query.filter(User.status != 'pending_sponsor') query = query.filter(User.status != 'pending_labstaff') query = query.filter(User.status != 'pending_rolloff') else: if pending: query = query.filter(User.status == 'pending_labstaff') # else: # query = query.filter(User.status != 'pending_labstaff') # query = query.filter(User.status != 'pending_sponsor') for field, col in cols.iteritems(): if field in request.args: if request.args[field].strip() == "": continue query = query.filter(col.like(request.args[field].strip())) query = query.order_by(sort_dir(sort_col)) page = query.paginate(page) if pending: # Patch a Form. This allows us to keep our CSRF protection class F(Form): pass for user in page.items: setattr( F, user.username, RadioField(choices=[('approve', 'Approve'), ('postpone', 'Postpone'), ('deny', 'Deny')], validators=[validators.Required()])) # Flask-WTForms likes to pull data from request.form. Force it not to. form = F(ImmutableMultiDict()) # We do this after the fact so WTForms can do some of its binding for user in page.items: user.radio = getattr(form, user.username) user.radio.data = 'postpone' if sponsored: template = 'sponsorship_requests.html' else: template = 'list_pending_users.html' elif rolloffs: class rolloffCheckbox(Form): pass for user in page.items: setattr(rolloffCheckbox, user.username, BooleanField()) form = rolloffCheckbox(ImmutableMultiDict()) for user in page.items: user.checkbox = getattr(form, user.username) template = 'list_upcoming_rolloffs.html' else: form = Form() if sponsored: template = 'sponsored_users.html' else: template = 'userlist.html' return render_template(template, page=page, sort=sort, sort_dir='asc' if sort_dir == asc else 'desc', form=form, filter_form=filter_form)
class RegisterIntroForm(Form): has_udelid = RadioField('Do you have a UDelNet ID?', choices=[('yes', 'Yes'), ('no', 'No')], validators=[validators.Required()])
def edit_user(uid=-1): if uid == -1: return redirect(url_for('edit_user', uid=g.user.uid)) user = User.query.filter(User._uid == uid).all() if len(user) == 0: flash('User not found!') return redirect(url_for("index")) user = user[0] self_editing = False sponsor_editing = False labstaff_editing = g.user_is_labstaff admin_editing = g.user_is_admin if not (g.user_is_admin or g.user_is_labstaff): # If a user isn't an admin or a sponsor, they can only see their own page if 'sponsor' not in g.user.get_domains(): if g.user.uid != user.uid: flash("You have wandered somewhere you do not belong.") return redirect(url_for('index')) else: self_editing = True else: # If they're not an admin but are a sponsor, they need to be this user's sponsor if g.user.username != user.sponsor: flash("You have wandered somewhere you do not belong.") return redirect(url_for('index')) else: sponsor_editing = True enabled_fields = [] class EditForm(Form): username = TextField( 'Username', validators=[validators.LengthOrEmpty(min=3, max=8)]) first_name = TextField('First Name') last_name = TextField('Last Name') dob = TextField( 'Date of Birth (MM/DD/YYYY)', validators=[ validators.Date( format='%m/%d/%Y', message='Invalid format. Please use mm/dd/yyyy.') ]) email = TextField('E-mail Address', validators=[validators.Email()]) sponsor = SelectField('Sponsor', choices=[(s.username, ''.join( (s.last_name, ', ', s.first_name))) for s in database.get_sponsors(True)]) grad_date = TextField( 'Graduation Date (MM/YYYY)', validators=[ validators.Date(format='%m/%Y', message='Invalid format. Please use mm/yyyy') ]) acct_type = RadioField( choices=[('acad', 'Academic'), ('research', 'Research & Academic')]) comments = TextAreaField('Comments') status = TextField('Status') # First Name and Last Name # if labstaff_editing or admin_editing: if user.status in ('pending_sponsor', 'pending_labstaff') and g.user_is_admin: enabled_fields.extend(['admin_approval', 'acct_type']) EditForm.admin_approval = RadioField( choices=[('approve', 'Approve'), ('deny', 'Deny'), ('postpone', 'Postpone')]) elif user.status == 'pending_sponsor' and 'sponsor' in g.user.get_domains( ): enabled_fields.append('sponsor_approval') EditForm.sponsor_approval = RadioField( choices=[('approve', 'Approve'), ('deny', 'Deny'), ('postpone', 'Postpone')]) else: pass if g.user_is_admin or g.user_is_labstaff: enabled_fields.extend( ['comments', 'sponsor', 'email', 'dob', 'first_name', 'last_name']) if g.user_is_admin or g.user_is_labstaff or self_editing: enabled_fields.extend(['password', 'pw_confirm']) EditForm.password = PasswordField('Password', validators=[ validators.LengthOrEmpty(min=8, max=50), validators.CrackLib() ]) EditForm.pw_confirm = PasswordField( 'Confirm Password', validators=[ validators.LengthOrEmpty(min=8, max=50), validators.EqualTo('password', message='Passwords do not match.') ]) if self_editing: EditForm.current_password = PasswordField( 'Current Password', validators=[ validators.LengthOrEmpty(max=50), validators.Required() ]) form = EditForm() if form.is_submitted(): if form.validate_on_submit(): if form.username.data != '': user.username = form.username.data if form.password.data != '': user.password = form.password.data if form.first_name.data != '': user.first_name = form.first_name.data if form.last_name.data != '': user.last_name = form.last_name.data if form.dob.data != '': user.dob = form.dob.data # TODO: Extra validation on birth date? if form.email.data != '': user.email = form.email.data # TODO: More validation on email # Auto-fill udel id field. # Make sure email isn't used if form.sponsor.data != '': user.sponsor = form.sponsor.data if form.grad_date.data != '': user.grad_date = form.grad_date.data # if form.description.data != '': #not implemented in the user object yet. # user.comments = form.description.data if user.is_active() and form.disable.data: user.status = 'pending_disable' if user.is_disabled() and not form.disable.data: user.status = 'reactivate' if form.acct_type.data == 'acad': user.add_domain('acad') else: user.add_domains('acad', 'research') db.session.add(user) db.session.commit() flash("User updated.") else: return render_template( "edit_user.html", form=form, error="There was an error with your submission", edit_user=user) form = EditForm(ImmutableMultiDict()) form.username.data = user.username form.first_name.data = user.first_name form.last_name.data = user.last_name form.dob.data = user.dob form.email.data = user.email form.sponsor.data = user.sponsor form.grad_date.data = user.grad_date if 'acad' in user.get_domains() and not 'research' in user.get_domains(): form.acct_type.data = 'acad' if 'acad' in user.get_domains() and 'research' in user.get_domains(): form.acct_type.data = 'research' if 'other' in user.get_domains(): form.acct_type.data = 'other' ajax_fields = [] # Let's build the display form sections = ['Account Details'] display = {'Account Details': []} d = display['Account Details'] # The tuple will go label, field, errors (list) d.append(('Username', Markup('<label>%s</label>' % user.username), 'username', None)) d.append(('UID', Markup('<label>%s</label>' % user.uid), 'uid', None)) # First Name and Last Name if labstaff_editing or admin_editing: d.append(('First Name', form.first_name(), 'first_name', form.first_name.errors)) ajax_fields.append('first_name') d.append(('Last Name', form.last_name(), 'last_name', form.last_name.errors)) ajax_fields.append('last_name') else: d.append(('First Name', Markup('<label>%s</label>' % user.first_name), 'first_name', None)) d.append(('Last Name', Markup('<label>%s</label>' % user.last_name), 'last_name', None)) # Date of Birth if self_editing or labstaff_editing or admin_editing: d.append( ('Date of Birth (MM/DD/YYYY)', form.dob(), 'dob', form.dob.errors)) ajax_fields.append('dob') else: d.append(('Date of Birth (MM/DD/YYYY)', user.dob, 'dob', None)) # Change Password if self_editing or labstaff_editing or admin_editing: sections.append('Change Password') pw_block = [] display['Change Password'] = pw_block if self_editing: pw_block.append(('Current Password', form.current_password(), 'current_password', form.current_password.errors)) ajax_fields.append('current_password') pw_block.append(('New Password', form.password(), 'password', form.password.errors)) pw_block.append(('Confirm New Password', form.password(), 'pw_confirm', form.pw_confirm.errors)) ajax_fields.append('password') ajax_fields.append('pw_confirm') if self_editing: d.append(('Current Password:'******'current_password', form.current_password.errors)) d.append(('Test', Markup('<a href="test">Test</a>'), 'test', None)) # form.description.data = user.comments # if user.is_disabled(): # form.disable.data = True # else: # form.disable.data = False return render_template("edit_user.html", form=form, edit_user=user, enabled_fields=enabled_fields, display=display, sections=sections)
class RegisterForm(Form): username = TextField('Username', validators=[ validators.Required(), validators.Length(min=3, max=8), validators.UniqueColumn( database.User, database.User.username, message='This username is taken.') ]) password = PasswordField('Password', validators=[ validators.Required(), validators.Length(min=8, max=50), validators.CrackLib() ]) first_name = TextField('First Name', validators=[validators.Required()]) last_name = TextField('Last Name', validators=[validators.Required()]) pw_confirm = PasswordField('Confirm Password', validators=[ validators.Required(), validators.Length(min=8, max=50), validators.EqualTo( 'password', message='Passwords do not match.') ]) dob = TextField('Date of Birth (MM/DD/YYYY)', validators=[ validators.Required(), validators.Date( format='%m/%d/%Y', message='Invalid format. Please use mm/dd/yyyy.') ]) email = TextField( 'E-mail Address', validators=[ validators.Email(), validators.Required(), validators.UniqueColumn( database.User, database.User.email, message='This e-mail is in use by another account.') ]) sponsor = SelectField('Sponsor', choices=[(s.username, ''.join( (s.last_name, ', ', s.first_name))) for s in database.get_sponsors()], validators=[validators.Required()]) grad_date = TextField('Graduation Date (MM/YYYY)', validators=[ validators.Required(), validators.Date( format='%m/%Y', message='Invalid format. Please use mm/yyyy') ]) description = TextAreaField('Description of Usage') acct_type = RadioField(choices=[('acad', 'Academic'), ('research', 'Research & Academic')], validators=[validators.Required()]) captcha = RecaptchaField( public_key='6LdeFcwSAAAAAJF1ccPQ4j5Y0Q0iVULdXpRArpcp', private_key='6LdeFcwSAAAAAFv_xLOVLCPAyUQ_abubmG8oUdOw', secure=True)