def change_email_or_password(user_id): user = models.User.query.get_or_404(user_id) current_user = flask_login.current_user if current_user.id != user.id and not current_user.is_admin: flask.flash("Du får bara redigera din egen profil! ಠ_ಠ", 'error') return flask.redirect(flask.url_for('.show_profile', user_id=user_id)) form = forms.ChangeEmailOrPasswordForm(obj=user, user=user) if form.validate_on_submit(): if form.email.data != user.email: auth.verify_email(user, form.email.data) flask.flash(("En länk för att verifiera e-postadressen har " "skickats till {}.").format(form.email.data), 'info') if form.new_password.data: user.password = form.new_password.data flask.flash("Lösenordet har ändrats!", 'success') models.db.session.commit() return flask.redirect(flask.url_for('strequelistan.show_profile', user_id=user.id)) elif form.is_submitted(): forms.flash_errors(form) return flask.render_template('change_email_or_password.html', form=form, user=user)
def change_profile_picture(user_id): user = models.User.query.get_or_404(user_id) current_user = flask_login.current_user if current_user.id != user.id and not current_user.is_admin: flask.flash("Du får bara redigera din egen profil! ಠ_ಠ", 'error') return flask.redirect(flask.url_for('.show_profile', user_id=user_id)) form = forms.ChangeProfilePictureFormFactory(user) if form.validate_on_submit(): # The "none" choice seems to work. Not sure why. user.profile_picture_id = form.profile_picture.data models.db.session.commit() flask.flash("Din profilbild har ändrats!", 'success') return flask.redirect(flask.url_for('strequelistan.edit_profile', user_id=user.id)) elif form.is_submitted(): forms.flash_errors(form) return flask.render_template('change_profile_picture.html', form=form, user=user)
def upload_profile_picture(user_id): user = models.User.query.get_or_404(user_id) current_user = flask_login.current_user if current_user.id != user.id and not current_user.is_admin: flask.flash("Du får bara redigera din egen profil! ಠ_ಠ", 'error') return flask.redirect(flask.url_for('.show_profile', user_id=user_id)) form = forms.UploadProfilePictureForm() if form.validate_on_submit(): if form.upload.data: filename = util.image_uploads.save(form.upload.data) profile_picture = models.ProfilePicture(filename=filename, user_id=user.id) models.db.session.add(profile_picture) models.db.session.commit() flask.flash("Din nya profilbild har laddats upp!", 'success') return flask.redirect( flask.url_for('strequelistan.change_profile_picture', user_id=user.id) ) elif form.is_submitted(): forms.flash_errors(form) return flask.render_template('upload_profile_picture.html', form=form, user=user)
def show_profile(user_id): user = models.User.query.get_or_404(user_id) transactions = (user.transactions .filter(models.Streque.voided.is_(False)) .order_by(models.Transaction.timestamp.desc()) .limit(10)) profile_picture_form = forms.UploadProfilePictureForm() if profile_picture_form.validate_on_submit(): if profile_picture_form.upload.data: filename = util.image_uploads.save( profile_picture_form.upload.data ) profile_picture = models.ProfilePicture( filename=filename, user_id=user.id ) user.profile_picture = profile_picture models.db.session.add(profile_picture) models.db.session.commit() flask.flash("Profilbilden har ändrats!", 'success') elif profile_picture_form.is_submitted(): forms.flash_errors(profile_picture_form) return flask.render_template('show_profile.html', user=user, transactions=transactions, profile_picture_form=profile_picture_form)
def edit_article(article_id=None): if article_id: article = models.Article.query.get_or_404(article_id) form = forms.EditArticleForm(obj=article) if not form.is_submitted(): form.value.data = form.value.data / 100 else: article = None form = forms.EditArticleForm() if form.validate_on_submit(): if not article: article = models.Article() article.name = form.name.data article.value = int(form.value.data * 100) article.description = form.description.data article.weight = form.weight.data article.standardglas = form.standardglas.data if not article_id: models.db.session.add(article) models.db.session.commit() flask.flash("Produkt \"{}\" skapad.".format(article.name), 'success') return flask.redirect(flask.url_for('strequeadmin.articles')) elif form.is_submitted(): forms.flash_errors(form) return flask.render_template('admin/edit_article.html', form=form, article=article)
def bulk_transactions(): form = forms.BulkTransactionFormFactory(active=False) if form.validate_on_submit(): transactions = [] for form_field in form: if form_field.name == 'csrf_token': continue if form_field.value.data != 0: user = models.User.query.get(form_field.user_id.data) if user: transactions.append( {'user_id': user.id, 'user_name': user.full_name, 'value': int(form_field.value.data*100), 'text': form_field.text.data} ) flask.session[form.csrf_token.data] = transactions if transactions: return flask.render_template( 'admin/confirm_bulk_transactions.html', transactions=transactions, token=form.csrf_token.data) else: flask.flash("Inga transaktioner utförda. " "Väl spenderade klockcykler, bra jobbat!", 'success') elif form.is_submitted(): forms.flash_errors(form) return flask.render_template('admin/bulk_transactions.html', form=form)
def add_quote(): form = forms.QuoteForm() if form.validate_on_submit(): quote = models.Quote(text=form.text.data, who=form.who.data) models.db.session.add(quote) models.db.session.commit() flask.flash('Citat tillagt!', 'success') return flask.redirect(flask.url_for('.index')) else: forms.flash_errors(form) return flask.render_template('add_quote.html', form=form)
def edit_profile(user_id): user = models.User.query.get_or_404(user_id) current_user = flask_login.current_user if current_user.id != user.id and not current_user.is_admin: flask.flash("Du får bara redigera din egen profil! ಠ_ಠ", 'error') return flask.redirect(flask.url_for('.show_profile', user_id=user_id)) if current_user.is_admin: form = forms.FullEditUserForm(obj=user) form.group_id.choices = [(g.id, g.name) for g in models.Group.query] form.group_id.choices.insert(0, (-1, 'Ingen')) else: form = forms.EditUserForm(obj=user) if form.validate_on_submit(): if isinstance(form, forms.FullEditUserForm): user.first_name = form.first_name.data user.last_name = form.last_name.data user.active = form.active.data user.group_id = form.group_id.data if (form.group_id.data != -1) else None user.nickname = form.nickname.data user.phone = form.phone.data user.body_mass = form.body_mass.data y_chromosome = form.y_chromosome.data if y_chromosome == 'yes': user.y_chromosome = True elif y_chromosome == 'no': user.y_chromosome = False else: user.y_chromosome = None models.db.session.commit() flask.flash("Ändringarna har sparats!", 'success') return flask.redirect(flask.url_for('strequelistan.show_profile', user_id=user.id)) elif form.is_submitted(): forms.flash_errors(form) else: if user.y_chromosome is True: form.y_chromosome.data = 'yes' elif user.y_chromosome is False: form.y_chromosome.data = 'no' else: form.y_chromosome.data = 'n/a' return flask.render_template('edit_profile.html', form=form, user=user)
def add_user(request_id=None): request = (models.RegistrationRequest.query.get_or_404(request_id) if request_id else None) form = forms.AddUserForm(obj=request, group_id=-1) form.group_id.choices = [(g.id, g.name) for g in models.Group.query] form.group_id.choices.insert(0, (-1, 'Ingen')) if form.validate_on_submit(): user = models.User( first_name=form.first_name.data, last_name=form.last_name.data, nickname=form.nickname.data, email=form.email.data, phone=form.phone.data, active=form.active.data, group_id=form.group_id.data if form.group_id.data != -1 else None, ) models.db.session.add(user) models.db.session.commit() if request: models.db.session.delete(request) models.db.session.commit() flask.flash("{} skapad och förfrågan borttagen!".format(user), 'success') return flask.redirect(flask.url_for('strequeadmin.requests')) else: flask.flash("{} skapad!".format(user), 'success') # Redirect to clear form return flask.redirect(flask.url_for('strequeadmin.add_user')) elif form.is_submitted(): forms.flash_errors(form) return flask.render_template('admin/add_user.html', form=form, is_request=bool(request_id))
def transactions(): form = forms.DateRangeForm() if form.validate_on_submit(): from_date = form.start.data to_date = form.end.data return flask.redirect( flask.url_for('strequeadmin.transactions', from_date=from_date, to_date=to_date)) elif form.is_submitted(): forms.flash_errors(form) from_date = flask.request.args.get('from_date', None) to_date = flask.request.args.get('to_date', None) if from_date and to_date: try: from_date = datetime.date.fromisoformat(from_date) to_date = datetime.date.fromisoformat(to_date) except ValueError: flask.flash("Ogiltigt datumintervall!", 'error') from_date, to_date = None, None if not (from_date and to_date): to_date = datetime.date.today() from_date = to_date - datetime.timedelta(days=30) form.start.data = from_date form.end.data = to_date transactions = models.Transaction.query.filter( sqla.func.DATE(models.Transaction.timestamp) >= from_date, sqla.func.DATE(models.Transaction.timestamp) <= to_date, ).order_by(models.Transaction.timestamp.desc()) return flask.render_template('admin/transactions.html', transactions=transactions, form=form)