diff --git a/mgmt/bugs_views.py b/mgmt/bugs_views.py index 46a4f05..66b3454 100644 --- a/mgmt/bugs_views.py +++ b/mgmt/bugs_views.py @@ -1,3 +1,5 @@ +from django.http import HttpResponseForbidden,HttpResponseRedirect +from django.core.urlresolvers import reverse from django.conf import settings import django.newforms as djangoforms from decorators import check_auth,login_required,render_to diff --git a/mgmt/context.py b/mgmt/context.py index 505dc2f..cd8860c 100644 --- a/mgmt/context.py +++ b/mgmt/context.py @@ -2,6 +2,7 @@ import sys from os.path import dirname +from datetime import datetime import re from django.conf import settings @@ -63,6 +64,9 @@ def add_menu(request): menu = hms.modules.menu(request) return dict(menu=menu) +def for_rss(request): + return dict(pub_date = datetime.now().strftime('%a, %d %b %Y %H:%M:%S') ) + def debug_messages(request): if settings.DEBUG: return dict(debug = debug.dump()) diff --git a/mgmt/decorators.py b/mgmt/decorators.py index 4b2d618..90dc9ff 100644 --- a/mgmt/decorators.py +++ b/mgmt/decorators.py @@ -1,6 +1,6 @@ from django.http import HttpResponseForbidden,HttpResponseRedirect from rights import can -from utils import render_it +from utils import render_it,render_rss def login_required(func): def wrapper(request,*args,**kwargs): @@ -31,7 +31,19 @@ def render_to(template): def decorator(func): def wrapper(request,*args,**kwargs): r = func(request,*args,**kwargs) - return render_it(template, r, request) + if isinstance(r,dict): + return render_it(template, r, request) + else: + return r + wrapper.__name__ = func.__name__ + return wrapper + return decorator + +def rss(template): + def decorator(func): + def wrapper(request,*args,**kwargs): + r = func(request,*args,**kwargs) + return render_rss(template, r, request) wrapper.__name__ = func.__name__ return wrapper return decorator diff --git a/mgmt/documents_views.py b/mgmt/documents_views.py index 81f8f82..bfa6b92 100644 --- a/mgmt/documents_views.py +++ b/mgmt/documents_views.py @@ -1,3 +1,5 @@ +from django.http import HttpResponseRedirect +from django.core.urlresolvers import reverse from decorators import check_auth,login_required,render_to from utils import get_comments from models import * diff --git a/mgmt/hms/modules/last_comments.py b/mgmt/hms/modules/last_comments.py index 2b9a5c3..a5e1bdc 100644 --- a/mgmt/hms/modules/last_comments.py +++ b/mgmt/hms/modules/last_comments.py @@ -3,22 +3,12 @@ def init(): from mgmt.models import Comment + import mgmt.utils @block def last_comments(): def short_comment(comment): - def get_url(comment): - type = comment.object_type - id = comment.object_id - if type=='Project': - return "/projects/%s/#comment-%s" % (id,comment.id) - if type=='Bug': - return "/bugs/%s/#comment-%s" % (id,comment.id) - if type=='Document': - return "/docs/%d/#comment-%s" % (id,comment.id) - if type=='Request': - return "/requests/%d/#comment-%s" % (id,comment.id) - return "<li><a href='%s'>%s</a></li>" % (get_url(comment),comment.title) + return u"<li><a href='%s'>%s</a></li>" % (mgmt.utils.get_comment_url(comment),comment.title) b = Block() b.name='last_comments' b.title = u"Последние комментарии" diff --git a/mgmt/reports_views.py b/mgmt/reports_views.py index 97e6113..4cc86c5 100644 --- a/mgmt/reports_views.py +++ b/mgmt/reports_views.py @@ -1,3 +1,5 @@ +from django.http import HttpResponseForbidden,HttpResponseRedirect +from django.core.urlresolvers import reverse from decorators import check_auth,login_required,render_to from models import * from rights import can diff --git a/mgmt/requests_views.py b/mgmt/requests_views.py index 3ade79f..afbd844 100644 --- a/mgmt/requests_views.py +++ b/mgmt/requests_views.py @@ -1,3 +1,5 @@ +from django.http import HttpResponseForbidden,HttpResponseRedirect +from django.core.urlresolvers import reverse from decorators import check_auth,login_required,render_to from utils import get_comments from models import * diff --git a/mgmt/rss_views.py b/mgmt/rss_views.py new file mode 100644 index 0000000..e99102f --- /dev/null +++ b/mgmt/rss_views.py @@ -0,0 +1,12 @@ +from datetime import datetime +from django.conf import settings +from models import Comment +from decorators import rss +from utils import get_comment_url + +@rss('rss.xml') +def last_comments(request): + comments = Comment.objects.all()[:settings.COMMENTS_PER_PAGE] + for c in comments: + c.url = get_comment_url(c) + return {'objects': comments} diff --git a/mgmt/tasks_views.py b/mgmt/tasks_views.py index 8c6f5e1..0e05d99 100644 --- a/mgmt/tasks_views.py +++ b/mgmt/tasks_views.py @@ -1,3 +1,5 @@ +from django.http import HttpResponseForbidden,HttpResponseRedirect +from django.core.urlresolvers import reverse from decorators import check_auth,login_required,render_to from models import * from rights import can diff --git a/mgmt/utils.py b/mgmt/utils.py index 696dea6..70c71b1 100644 --- a/mgmt/utils.py +++ b/mgmt/utils.py @@ -4,7 +4,7 @@ from django.http import HttpResponse from django.core.paginator import Paginator from django.conf import settings -from context import add_blocks,debug_messages,add_menu +from context import add_blocks,debug_messages,add_menu,for_rss from models import * ############# @@ -16,6 +16,11 @@ def render_it(template,dict,request): t = get_template(template) return HttpResponse(t.render(c)) +def render_rss(template,dict,request): + c = RequestContext(request,dict,[for_rss]) + t = get_template(template) + return HttpResponse(t.render(c),mimetype='application/xml') + def get_comments(request,id,type): all = Comment.objects.filter(object_id=id, object_type=type) pg = Paginator(all,settings.COMMENTS_PER_PAGE) @@ -38,3 +43,15 @@ def get_bugs(request,pid=None): if range == [1]: range = None return page_num,range, page.object_list + +def get_comment_url(comment): + type = comment.object_type + id = comment.object_id + if type=='Project': + return "/projects/%s/#comment-%s" % (id,comment.id) + if type=='Bug': + return "/bugs/%s/#comment-%s" % (id,comment.id) + if type=='Document': + return "/docs/%d/#comment-%s" % (id,comment.id) + if type=='Request': + return "/requests/%d/#comment-%s" % (id,comment.id) diff --git a/mgmt/views.py b/mgmt/views.py index 99e2191..93fa0ff 100644 --- a/mgmt/views.py +++ b/mgmt/views.py @@ -21,6 +21,7 @@ from requests_views import * from documents_views import * from tasks_views import * from reports_views import * +from rss_views import * ############# # Views diff --git a/templates/base.html b/templates/base.html index af6bc90..a436c1a 100644 --- a/templates/base.html +++ b/templates/base.html @@ -10,6 +10,7 @@ <link rel='stylesheet' type='text/css' href='/media/css/main.css'/> <link rel="stylesheet" type="text/css" href="/media/js/markitup/skins/markitup/style.css" /> <link rel="stylesheet" type="text/css" href="/media/js/markitup/sets/markdown/style.css" /> + <link rel="alternate" title="Последние комментарии" type="application/rss+xml" href="/comments/feed/" /> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="markitup/jquery.markitup.js"></script> <script type="text/javascript" src="markitup/sets/markdown/set.js"></script> diff --git a/templates/rss.xml b/templates/rss.xml new file mode 100644 index 0000000..6aac873 --- /dev/null +++ b/templates/rss.xml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<rss version="2.0"> +{% load prj_filters %} + +<channel> + <title>Projects: Последние комментарии</title> + <link>http://projects.rtfm-com.ru/</link> + <description>Последние комментарии по проектам</description> + <language>ru-ru</language> + <pubDate>{{pub_date}}</pubDate> + +{% for object in objects %} +<item> + <title>{{object.title}}</title> + <link>http://rtfm-server{{object.url}}</link> + <description>{{object.text|markdown|safe}}</description> +</item> +{% endfor %} + +</channel> +</rss> diff --git a/urls.py b/urls.py index d03edc0..90a58d2 100644 --- a/urls.py +++ b/urls.py @@ -30,6 +30,7 @@ urlpatterns = patterns('', (r'^message/(\d+)/delete/$', 'mgmt.views.delete_private_message'), (r'^preview/$', 'mgmt.views.message_preview'), (r'^comments/(\d+)/delete/$', 'mgmt.views.delete_comment'), + (r'^comments/feed/$', 'mgmt.views.last_comments'), (r'^my/$', 'mgmt.views.my_page'), (r'git/', include('pygit.urls')),