Пример #1
0
def new_class(**kwargs):
    user_id = kwargs['user_id']

    # Validate state token (Anti Forgery State Token)
    invalid_response = app_oauth.validate_token(request.args.get('state'))
    if invalid_response:
        return invalid_response

    if request.method == 'GET':
        return render_template('new_class.html', content='add new class')
    if request.method == 'POST':
        category_title = request.form['category']
        title = request.form['title']
        description = request.form['description']
        if category_title != '' and title != '' and description != '':
            # Save image
            file = request.files['file']
            if file and allowed_file(file.filename):
                filename = datetime.now().strftime('img_%Y-%m-%d_%H%M%S.jpg')
                filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
                file.save(filepath)
                print "saved to ", filepath
            else:
                filename = None

            # Add category if it doesn't already exist:
            category = session.query(Category).filter_by(
                title=category_title).first()
            if not category:
                category = Category(title=category_title)
                session.add(category)
                # flush so that category.id returns value before commit:
                session.flush()

            # Add class
            class_to_add = Class(category_id=category.id,
                                 title=title,
                                 description=description,
                                 teacher_id=user_id,
                                 picture=filename)
            session.add(class_to_add)
            session.commit()
            flash(u'Added class {0} successfully'.format(title))
        else:
            flash(u'Class category, title, and description required')
        return redirect(url_for('show_all'))
    else:
        flash(u'Unsupported request type.')
        return redirect(url_for('show_all'))
Пример #2
0
def delete_class(id, **kwargs):
    user_id = kwargs['user_id']

    # Validate state token (Anti Forgery State Token)
    invalid_response = app_oauth.validate_token(request.args.get('state'))
    if invalid_response:
        return invalid_response

    class_to_delete = session.query(Class).filter_by(id=id).one()
    if class_to_delete.teacher_id != user_id:
        flash(u'Unauthorized to delete item')
        return redirect(url_for('show_all'))

    if request.method == 'GET':
        return render_template('delete_class.html',
                               class_to_delete=class_to_delete)

    if request.method == 'POST':
        # Delete image if it exists
        if class_to_delete.picture:
            path = UPLOAD_FOLDER + class_to_delete.picture
            os.remove(path)
            print "deleted", path

        # Delete class:
        deleted_class_category_id = class_to_delete.category_id
        session.delete(class_to_delete)

        # Delete category if there are no longer any classes in it:
        if session.query(Class).filter_by(
                category_id=deleted_class_category_id).first() is None:
            category_to_delete = session.query(Category).filter_by(
                id=deleted_class_category_id).one()
            session.delete(category_to_delete)
            print 'deleted category no. {0}'.format(category_to_delete.id)

        session.commit()

        flash(u'Deleted {0} successfully'.format(class_to_delete.title))
        return redirect(url_for('show_all'))
    else:
        flash(u'Unsupported request type.')
        return redirect(url_for('show_all'))
Пример #3
0
def edit_class(id, **kwargs):
    user_id = kwargs['user_id']

    # Validate state token (Anti Forgery State Token)
    invalid_response = app_oauth.validate_token(request.args.get('state'))
    if invalid_response:
        return invalid_response

    class_to_edit = session.query(Class).filter_by(id=id).one()
    if class_to_edit.teacher_id != user_id:
        flash(u'Unauthorized to edit item')
        return redirect(url_for('show_all'))

    if request.method == 'GET':
        category = session.query(Category).filter_by(
            id=class_to_edit.category_id).one()
        return render_template('edit_class.html',
                               class_to_edit=class_to_edit,
                               category_title=category.title,
                               UPLOAD_FOLDER=UPLOAD_FOLDER)
    if request.method == 'POST':
        category_title = request.form['category_title']
        title = request.form['title']
        description = request.form['description']
        if category_title != '' and title != '' and description != '':

            # Add category if it doesn't already exist:
            category = session.query(Category).filter_by(
                title=category_title).first()
            if not category:
                category = Category(title=category_title)
                session.add(category)
                # flush so that category.id returns value before commit:
                session.flush()

            # Save new image if it exists and delete old image if it exists
            file = request.files['file']
            if file and allowed_file(file.filename):
                filename = datetime.now().strftime('img_%Y-%m-%d_%H%M%S.jpg')
                filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
                file.save(filepath)
                print "saved to", filepath
                if class_to_edit.picture:
                    old_picture_path = UPLOAD_FOLDER + class_to_edit.picture
                    os.remove(old_picture_path)
                    print "deleted", old_picture_path
                class_to_edit.picture = filename

            # Edit class:
            old_category_id = class_to_edit.category_id
            class_to_edit.category_id = category.id
            class_to_edit.title = title
            class_to_edit.description = description

            # Delete category if there are no longer any classes in it:
            if session.query(Class).filter_by(
                    category_id=old_category_id).first() is None:
                category_to_delete = session.query(Category).filter_by(
                    id=old_category_id).one()
                session.delete(category_to_delete)
                print 'deleted category no. {0}'.format(category_to_delete.id)

            session.commit()
            flash(u'Edited {0} successfully'.format(class_to_edit.title))
        else:
            flash(u'Class category, title, and description required')
        return redirect(url_for('show_all'))
    else:
        flash(u'Unsupported request type.')
        return redirect(url_for('show_all'))