|
|
from django.db import models
|
|
|
from django.utils import timezone
|
|
|
|
|
|
from neboard import settings
|
|
|
|
|
|
import thumbs
|
|
|
|
|
|
NO_PARENT = -1
|
|
|
NO_IP = '0.0.0.0'
|
|
|
UNKNOWN_UA = ''
|
|
|
|
|
|
|
|
|
class PostManager(models.Manager):
|
|
|
def create_post(self, title, text, image=None, parent_id=NO_PARENT,
|
|
|
ip=NO_IP, tags=None):
|
|
|
post = self.create(title=title,
|
|
|
text=text,
|
|
|
pub_time=timezone.now(),
|
|
|
parent=parent_id,
|
|
|
image=image,
|
|
|
poster_ip=ip,
|
|
|
poster_user_agent=UNKNOWN_UA,
|
|
|
last_edit_time=timezone.now())
|
|
|
|
|
|
if tags:
|
|
|
for tag in tags:
|
|
|
post.tags.add(tag)
|
|
|
|
|
|
if parent_id != NO_PARENT:
|
|
|
parent = self.get(id=parent_id)
|
|
|
parent.last_edit_time=timezone.now()
|
|
|
parent.save()
|
|
|
|
|
|
return post
|
|
|
|
|
|
def delete_post(self, post):
|
|
|
children = self.filter(parent=post.id)
|
|
|
for child in children:
|
|
|
self.delete_post(child)
|
|
|
post.delete()
|
|
|
|
|
|
def delete_posts_by_ip(self, ip):
|
|
|
posts = self.filter(poster_ip=ip)
|
|
|
for post in posts:
|
|
|
self.delete_post(post)
|
|
|
|
|
|
def get_threads(self, tag=None):
|
|
|
if tag is None:
|
|
|
threads = self.filter(parent=NO_PARENT)
|
|
|
else:
|
|
|
threads = self.filter(parent=NO_PARENT, tag=tag)
|
|
|
threads = list(threads.order_by('-last_edit_time'))
|
|
|
|
|
|
return threads
|
|
|
|
|
|
def get_thread(self, opening_post_id):
|
|
|
opening_post = self.get(id=opening_post_id)
|
|
|
replies = self.filter(parent=opening_post_id)
|
|
|
|
|
|
thread = [opening_post]
|
|
|
thread.extend(replies)
|
|
|
|
|
|
return thread
|
|
|
|
|
|
def exists(self, post_id):
|
|
|
posts = self.filter(id=post_id)
|
|
|
|
|
|
return len(posts) > 0
|
|
|
|
|
|
|
|
|
class Tag(models.Model):
|
|
|
"""
|
|
|
A tag is a text node assigned to the post. The tag serves as a board
|
|
|
section. There can be multiple tags for each message
|
|
|
"""
|
|
|
|
|
|
name = models.CharField(max_length=100)
|
|
|
|
|
|
|
|
|
class Post(models.Model):
|
|
|
"""A post is a message."""
|
|
|
|
|
|
objects = PostManager()
|
|
|
|
|
|
title = models.CharField(max_length=100)
|
|
|
pub_time = models.DateTimeField()
|
|
|
text = models.TextField()
|
|
|
image = thumbs.ImageWithThumbsField(upload_to='images/',
|
|
|
blank=True, sizes=((200, 150),))
|
|
|
poster_ip = models.IPAddressField()
|
|
|
poster_user_agent = models.TextField()
|
|
|
parent = models.BigIntegerField()
|
|
|
tags = models.ManyToManyField(Tag)
|
|
|
last_edit_time = models.DateTimeField()
|
|
|
|
|
|
def __unicode__(self):
|
|
|
return self.title + ' (' + self.text + ')'
|
|
|
|
|
|
|
|
|
class Admin(models.Model):
|
|
|
"""
|
|
|
Model for admin users
|
|
|
"""
|
|
|
name = models.CharField(max_length=100)
|
|
|
password = models.CharField(max_length=100)
|
|
|
|
|
|
def __unicode__(self):
|
|
|
return self.name + '/' + '*' * len(self.password)
|
|
|
|
|
|
|