diff --git a/boards/views.py b/boards/views.py --- a/boards/views.py +++ b/boards/views.py @@ -14,10 +14,12 @@ from boards import utils from boards.forms import ThreadForm, PostForm, SettingsForm, PlainErrorList, \ ThreadCaptchaForm, PostCaptchaForm, LoginForm, ModeratorSettingsForm -from boards.models import Post, Tag, Ban, User, RANK_USER, SETTING_MODERATE +from boards.models import Post, Tag, Ban, User, RANK_USER, SETTING_MODERATE, \ + REGEX_REPLY from boards import authors from boards.utils import get_client_ip import neboard +import re def index(request, page=0): @@ -70,6 +72,8 @@ def _new_post(request, form, thread_id=b title = data['title'] text = data['text'] + text = _remove_invalid_links(text) + if 'image' in data.keys(): image = data['image'] else: @@ -457,3 +461,18 @@ def _ban_current_user(request): ip = utils.get_client_ip(request) Ban.objects.get_or_create(ip=ip) + + +def _remove_invalid_links(text): + """ + Replace invalid links in posts so that they won't be parsed. + Invalid links are links to non-existent posts + """ + + for reply_number in re.finditer(REGEX_REPLY, text): + id = reply_number.group(1) + post = Post.objects.filter(id=id) + if not post.exists(): + text = string.replace(text, '>>' + id, id) + + return text