89 lines
2.0 KiB
Python
89 lines
2.0 KiB
Python
from flask import Flask, Blueprint, flash, request, redirect, url_for, current_app, render_template, jsonify
|
|
|
|
from werkzeug.exceptions import abort
|
|
|
|
from files.db import get_db
|
|
from files.auth import admin_required
|
|
from files.files import get_files_by_category
|
|
|
|
bp = Blueprint('categories', __name__, url_prefix='/categories')
|
|
|
|
def get_categories():
|
|
db = get_db()
|
|
categories = db.execute(
|
|
'SELECT id, name'
|
|
' FROM categories'
|
|
' ORDER BY name DESC'
|
|
).fetchall()
|
|
return categories
|
|
|
|
def get_category(id):
|
|
db = get_db()
|
|
category = db.execute(
|
|
'SELECT id, name'
|
|
' FROM categories'
|
|
' WHERE id = ?'
|
|
' LIMIT 1',
|
|
(id,)
|
|
).fetchone()
|
|
return category
|
|
|
|
def get_files_by_category(id):
|
|
db = get_db()
|
|
files = db.execute(
|
|
'SELECT id, filename, private'
|
|
' FROM files'
|
|
' WHERE category = ?'
|
|
' ORDER BY filename DESC',
|
|
(id,)
|
|
).fetchall()
|
|
return files
|
|
|
|
@bp.route('/')
|
|
def index():
|
|
categories = get_categories()
|
|
return render_template('categories/index.html', categories=categories)
|
|
|
|
@bp.route('/create', methods=['GET', 'POST'])
|
|
@admin_required
|
|
def create():
|
|
if request.method == 'POST':
|
|
name = request.form['name']
|
|
error = None
|
|
|
|
if not name:
|
|
error = "Name is required"
|
|
|
|
if error is not None:
|
|
flash(error)
|
|
else:
|
|
db = get_db()
|
|
db.execute(
|
|
'INSERT INTO categories (name)'
|
|
' VALUES (?)',
|
|
(name,)
|
|
)
|
|
db.commit()
|
|
return redirect(url_for('categories.index'))
|
|
|
|
return render_template('categories/create.html')
|
|
|
|
@bp.route('<int:id>')
|
|
def view(id):
|
|
category = get_category(id)
|
|
files = get_files_by_category(id)
|
|
return render_template('categories/view.html', category=category, files=files)
|
|
|
|
|
|
@bp.route('/<int:id>/update')
|
|
@admin_required
|
|
def update():
|
|
pass
|
|
|
|
@bp.route('/<int:id>/delete')
|
|
@admin_required
|
|
def delete():
|
|
pass
|
|
|
|
|