#controllers/post.py
import config, lib, datetime, uuid
from bottle import route, template, request, redirect, response
from models import postdb, settingdb, categorydb
@route('/post/<id:int>')
def post(id):
config.reset(settingdb.select())
config.kargs['blogTitle'] = "ទំព័រការផ្សាយ"
config.kargs['post'] = postdb.select(1, id)
config.kargs['posts'] = postdb.select(config.kargs['frontPagePostLimit'])
config.kargs['thumbs'] = lib.getPostThumbs(config.kargs['posts'])
config.kargs['page'] = 1
author = request.get_cookie("logged-in", secret=config.kargs['secretKey'])
if author:
config.kargs['showEdit'] = True
return template('post', data=config.kargs)
@route('/posting', method="POST")
def posting():
author = request.get_cookie("logged-in", secret=config.kargs['secretKey'])
if ((author != "Guest") and postdb.check(author)):
title = request.forms.getunicode('fpost-title')
if title == "":
title = "untitled"
postdate = request.forms.getunicode('fpost-date')
posttime = request.forms.getunicode('fpost-time')
category = request.forms.getunicode('fcategory')
content = request.forms.getunicode('fcontent')
try:
postdate = datetime.datetime.strptime(postdate, "%d-%m-%Y")
except ValueError:
config.kargs['message'] = 'ទំរង់កាលបរិច្ឆេទមិនត្រឹមត្រូវ!'
return template('dashboard/home', data=config.kargs)
try:
posttime = datetime.datetime.strptime(posttime, "%H:%M:%S")
except ValueError:
config.kargs['message'] = 'ទំរង់ពេលវេលាមិនត្រឹមត្រូវ!'
return template('dashboard/home', data=config.kargs)
if 'postId' in config.kargs:
id = config.kargs['postId']
postdb.update(title, postdate, posttime, category, content, id)
del config.kargs['postId']
else:
id = str(uuid.uuid4().int)
postdb.insert(id, title, author, postdate, posttime, category, content)
redirect('/post/'+str(id))
redirect('/login')
@route('/post/delete/<id:int>')
def delete(id):
author = request.get_cookie("logged-in", secret=config.kargs['secretKey'])
if ((author != "Guest") and postdb.check(author)):
postdb.delete(id)
redirect('/login')
@route('/post/edit/<id:int>')
def edit(id):
author = request.get_cookie("logged-in", secret=config.kargs['secretKey'])
if ((author != "Guest") and postdb.check(author)):
config.reset(settingdb.select())
config.kargs['blogTitle'] = "ទំព័រកែតំរូវ"
config.kargs['posts'] = postdb.select(config.kargs['dashboardPostLimit'])
config.kargs['thumbs'] = lib.getPostThumbs(config.kargs['posts'])
config.kargs['categories'] = categorydb.select(amount="all")
config.kargs['post'] = postdb.select(1, id)
config.kargs['edit'] = True
config.kargs['postId'] = id
config.kargs['page'] = 1
return template('dashboard/home', data=config.kargs)
redirect('/login')
@route('/paginate/<place>')
def paginate(place):
if place == "frontEnd":
postLimit = config.kargs['frontPagePostLimit']
elif place == 'home':
postLimit = config.kargs['homePagePostLimit']
else:
postLimit = config.kargs['dashboardPostLimit']
posts = postdb.select(postLimit, page=config.kargs['page'])
def toString(post):
post[3] = post[3].strftime('%d-%m-%Y')
post[4] = post[4].strftime('%H:%M:%S')
if posts:
config.kargs['page'] += 1
posts = [list(obj) for obj in posts ]
[toString(obj) for obj in posts]
thumbs = lib.getPostThumbs(posts)
return {'json':posts, 'thumbs':thumbs}
else:
return {'json':0}
@route('/search/<place>', method="POST")
def search(place):
config.reset(settingdb.select())
query = request.forms.getunicode('fquery')
config.kargs['posts'] = postdb.search(query)
config.kargs['thumbs'] = lib.getPostThumbs(config.kargs['posts'])
config.kargs['blogTitle'] = "ទំព័រស្វែងរក"
if place == "backend":
return template('dashboard/search', data=config.kargs)
else:
return template('search', data=config.kargs)
#models/postdb.py
import os
import psycopg2
def createTable():
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
SQL = '''CREATE TABLE IF NOT EXISTS POST(
ID TEXT,
TITLE TEXT,
AUTHOR TEXT,
POSTDATE DATE,
POSTTIME TIME,
CATEGORY TEXT,
CONTENT TEXT
)'''
cursor.execute(SQL)
conn.commit()
conn.close()
def insert(*post):
createTable()
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
cursor.execute("INSERT INTO POST (ID, TITLE, AUTHOR, POSTDATE, POSTTIME, CATEGORY, CONTENT) VALUES %s ", (post,))
conn.commit()
conn.close()
def select(amount, id=None, page=0):
createTable()
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
if id and (amount == 1):
cursor.execute("SELECT * FROM POST WHERE ID = '" + str(id) +"'")
elif page:
SQL = "SELECT * FROM POST ORDER BY POSTDATE DESC, POSTTIME DESC OFFSET %s ROWS FETCH NEXT %s ROWS ONLY"
cursor.execute(SQL, (amount*page, amount))
else:
cursor.execute("SELECT * FROM POST ORDER BY POSTDATE DESC, POSTTIME DESC LIMIT " + str(amount))
result = cursor.fetchall()
return result
def check(username):
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
cursor.execute("SELECT USERNAME FROM USERS WHERE USERNAME = '"+ username + "' LIMIT 1")
result = cursor.fetchone()
if result:
return True
else:
return False
def delete(id):
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
cursor.execute("DELETE FROM POST WHERE ID = '" + str(id) + "'")
conn.commit()
conn.close()
def update(*args):
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
sql = "UPDATE POST SET TITLE = %s, POSTDATE = %s, POSTTIME = %s, CATEGORY = %s, CONTENT = %s WHERE ID = '%s' "
cursor.execute(sql, args)
conn.commit()
conn.close()
def search(query):
createTable()
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
sql = "SELECT * from POST WHERE"
sql += " TITLE LIKE '%"+query+"%'"
sql += " OR CONTENT LIKE '%"+query+"%'"
sql += " ORDER BY POSTDATE DESC, POSTTIME DESC LIMIT 12"
cursor.execute(sql)
result = cursor.fetchall()
return result
GitHub: https://github.com/Sokhavuth/kwblog
Heroku: https://khmerweb-kwblog.herokuapp.com/














