|
|
|
@@ -2,31 +2,45 @@ import os |
|
|
|
|
|
|
|
from flask import ( |
|
|
|
Blueprint, render_template, |
|
|
|
flash, request, url_for, redirect, abort, g, send_from_directory, current_app) |
|
|
|
flash, request, url_for, redirect, abort, send_from_directory, current_app) |
|
|
|
from werkzeug.utils import secure_filename |
|
|
|
|
|
|
|
from calender.auth import login_required |
|
|
|
from calender.db import get_db |
|
|
|
|
|
|
|
bp = Blueprint('calender', __name__) |
|
|
|
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'} |
|
|
|
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'webm', 'mp4', 'bmp'} |
|
|
|
|
|
|
|
#Todo admin interface for managing submit, comments, submission date |
|
|
|
|
|
|
|
# Todo admin interface for managing submit, comments, submission date |
|
|
|
|
|
|
|
@bp.route('/') |
|
|
|
def index(): |
|
|
|
db = get_db() |
|
|
|
posts = db.execute( |
|
|
|
'SELECT p.id, title, body, created, author_id, username, nickname, file' |
|
|
|
' FROM post p JOIN user u ON p.author_id = u.id' |
|
|
|
'SELECT p.id, title, body, created, nickname, file, chosen, type' |
|
|
|
' FROM post p' |
|
|
|
' ORDER BY created DESC' |
|
|
|
).fetchall() |
|
|
|
# noinspection PyUnresolvedReferences |
|
|
|
return render_template('calender/index.html', posts=posts) |
|
|
|
|
|
|
|
|
|
|
|
@bp.route('/create', methods=('GET', 'POST')) |
|
|
|
@bp.route('/admin') |
|
|
|
@login_required |
|
|
|
def admin(): |
|
|
|
db = get_db() |
|
|
|
posts = db.execute( |
|
|
|
'SELECT p.id, title, body, created, nickname, file, chosen, type' |
|
|
|
' FROM post p' |
|
|
|
' ORDER BY created DESC' |
|
|
|
).fetchall() |
|
|
|
# noinspection PyUnresolvedReferences |
|
|
|
return render_template('calender/admin.html', posts=posts) |
|
|
|
|
|
|
|
|
|
|
|
@bp.route('/create', methods=('GET', 'POST')) |
|
|
|
# @login_required |
|
|
|
def create(): |
|
|
|
if request.method == 'POST': |
|
|
|
title = request.form['title'] |
|
|
|
@@ -52,14 +66,16 @@ def create(): |
|
|
|
flash(error) |
|
|
|
else: |
|
|
|
if file and allowed_file(file.filename): |
|
|
|
file_type = check_file_type(file.filename) |
|
|
|
filename = secure_filename(file.filename) |
|
|
|
file.save(os.path.join(current_app.config['UPLOAD_FOLDER'], filename)) |
|
|
|
|
|
|
|
db = get_db() |
|
|
|
db.execute( |
|
|
|
'INSERT INTO post (title, body, author_id, nickname, file)' |
|
|
|
' VALUES (?, ?, ?, ?, ?)', |
|
|
|
(title, body, g.user['id'], nickname, url_for('calender.uploaded_file', |
|
|
|
filename=filename)) |
|
|
|
'INSERT INTO post (title, body, nickname, file, chosen, type)' |
|
|
|
' VALUES (?, ?, ?, ?, ?, ?)', |
|
|
|
(title, body, nickname, url_for('calender.uploaded_file', |
|
|
|
filename=filename), False, file_type) |
|
|
|
) |
|
|
|
db.commit() |
|
|
|
# return redirect(url_for('calender.uploaded_file',filename=filename)) |
|
|
|
@@ -70,8 +86,8 @@ def create(): |
|
|
|
|
|
|
|
def get_post(id, check_author=True): |
|
|
|
post = get_db().execute( |
|
|
|
'SELECT p.id, title, body, created, author_id, username, nickname, file' |
|
|
|
' FROM post p JOIN user u ON p.author_id = u.id' |
|
|
|
'SELECT p.id, title, body, created, nickname, file, chosen, type' |
|
|
|
' FROM post p' |
|
|
|
' WHERE p.id = ?', |
|
|
|
(id,) |
|
|
|
).fetchone() |
|
|
|
@@ -79,8 +95,8 @@ def get_post(id, check_author=True): |
|
|
|
if post is None: |
|
|
|
abort(404, "Post id {0} doesn't exist.".format(id)) |
|
|
|
|
|
|
|
if check_author and post['author_id'] != g.user['id']: |
|
|
|
abort(403) |
|
|
|
# if check_author and post['author_id'] != g.user['id']: |
|
|
|
# abort(403) |
|
|
|
|
|
|
|
return post |
|
|
|
|
|
|
|
@@ -92,7 +108,9 @@ def update(id): |
|
|
|
|
|
|
|
if request.method == 'POST': |
|
|
|
title = request.form['title'] |
|
|
|
nickname = request.form['nickname'] |
|
|
|
body = request.form['body'] |
|
|
|
chosen = request.form['chosen'] |
|
|
|
error = None |
|
|
|
|
|
|
|
if not title: |
|
|
|
@@ -103,9 +121,9 @@ def update(id): |
|
|
|
else: |
|
|
|
db = get_db() |
|
|
|
db.execute( |
|
|
|
'UPDATE post SET title = ?, body = ?' |
|
|
|
'UPDATE post SET title = ?, body = ?, nickname = ?, chosen = ?' |
|
|
|
' WHERE id = ?', |
|
|
|
(title, body, id) |
|
|
|
(title, body, nickname, chosen, id) |
|
|
|
) |
|
|
|
db.commit() |
|
|
|
return redirect(url_for('calender.index')) |
|
|
|
@@ -128,6 +146,13 @@ def allowed_file(filename): |
|
|
|
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS |
|
|
|
|
|
|
|
|
|
|
|
def check_file_type(filename): |
|
|
|
if filename.rsplit('.', 1)[1].lower() in ['webm', 'mp4']: |
|
|
|
return 'video' |
|
|
|
else: |
|
|
|
return 'image' |
|
|
|
|
|
|
|
|
|
|
|
@bp.route('/uploads/<filename>') |
|
|
|
def uploaded_file(filename): |
|
|
|
return send_from_directory(current_app.config['UPLOAD_FOLDER'], |