summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames E. Blair <corvus@gnu.org>2009-08-10 21:39:55 -0700
committerJames E. Blair <corvus@gnu.org>2009-08-10 21:39:55 -0700
commite839b8f71b5353339b354ea78248bd5c74ab348a (patch)
treebd625e2cb0ba1d104667bb38a30478b96ca54c8e
parent55234867a38b0ade58691560987e4b9d18e522a4 (diff)
Remove separate linkback table (just variants of comments now).
Add function to generate trackback RDF.
-rw-r--r--quoins/controllers.py42
-rw-r--r--quoins/model/blog.py38
2 files changed, 37 insertions, 43 deletions
diff --git a/quoins/controllers.py b/quoins/controllers.py
index 5605c61..ac3cef7 100644
--- a/quoins/controllers.py
+++ b/quoins/controllers.py
@@ -294,13 +294,15 @@ class Pingback(TGController):
294 return xmlrpclib.Fault(0x20, 'Post not found.') 294 return xmlrpclib.Fault(0x20, 'Post not found.')
295 elif not post.allow_comments: 295 elif not post.allow_comments:
296 return xmlrpclib.Fault(0x31, 'Comments are closed on this post.') 296 return xmlrpclib.Fault(0x31, 'Comments are closed on this post.')
297 for lb in post.linkbacks: 297 for lb in post.comments:
298 if lb.url == sourceURI: 298 if lb.url and lb.url == sourceURI:
299 return xmlrpclib.Fault(0x30, 'Pingback already registered.') 299 return xmlrpclib.Fault(0x30, 'Pingback already registered.')
300 lb = LinkBack() 300 lb = Comment()
301 DBSession.add(lb) 301 lb.approved = True
302 lb.type = 'pingback'
302 lb.post = post 303 lb.post = post
303 lb.url = sourceURI 304 lb.url = sourceURI
305 post.comments.append(lb)
304 return 'Linkback recorded.' 306 return 'Linkback recorded.'
305 307
306def post_paginate(start, posts, size): 308def post_paginate(start, posts, size):
@@ -360,6 +362,25 @@ class BlogController(TGController):
360 def get_html(self, data): 362 def get_html(self, data):
361 return HTML(data) 363 return HTML(data)
362 364
365 def get_trackback_rdf(self, post, comment=True):
366 rdf = """
367 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
368 xmlns:dc="http://purl.org/dc/elements/1.1/"
369 xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
370 <rdf:Description
371 rdf:about="%s"
372 dc:identifier="%s"
373 dc:title="%s"
374 trackback:ping="%s"
375 </rdf:RDF>\n"""
376 rdf = rdf % (self.absolute_url('/'),
377 self.absolute_url(post),
378 post.title,
379 self.absolute_url('/trackback/%s'%post.id))
380 if comment:
381 rdf = "<!-- "+rdf+" -->"
382 return HTML(rdf)
383
363 def send_comment_email(self, comment): 384 def send_comment_email(self, comment):
364 post = comment.post 385 post = comment.post
365 blog = post.blog 386 blog = post.blog
@@ -480,6 +501,7 @@ Comment:
480 def post(self, id): 501 def post(self, id):
481 post = DBSession.query(Post).get(id) 502 post = DBSession.query(Post).get(id)
482 if not post: abort(404) 503 if not post: abort(404)
504 print pylons.request.headers
483 pylons.response.headers['X-Pingback']=self.absolute_url('/pingback/') 505 pylons.response.headers['X-Pingback']=self.absolute_url('/pingback/')
484 return dict(quoins = self, 506 return dict(quoins = self,
485 blog = post.blog, 507 blog = post.blog,
@@ -550,8 +572,8 @@ Comment:
550 pass 572 pass
551 573
552 c = Comment() 574 c = Comment()
553 c.post = post
554 post.comments.append(c) 575 post.comments.append(c)
576 c.post = post
555 c.body = body 577 c.body = body
556 if request.identity: 578 if request.identity:
557 c.author=request.identity['user'] 579 c.author=request.identity['user']
@@ -869,17 +891,19 @@ Comment:
869 message = 'Post not found.' 891 message = 'Post not found.'
870 elif not post.allow_comments: 892 elif not post.allow_comments:
871 message = 'Comments are closed on this post.' 893 message = 'Comments are closed on this post.'
872 for lb in post.linkbacks: 894 for lb in post.comments:
873 if lb.url == url: 895 if lb.url and lb.url == url:
874 message = 'Trackback already registered.' 896 message = 'Trackback already registered.'
875 if not message: 897 if not message:
876 lb = LinkBack() 898 lb = Comment()
877 DBSession.add(lb) 899 lb.approved = True
900 lb.type = 'trackback'
878 lb.post = post 901 lb.post = post
879 lb.url = url 902 lb.url = url
880 lb.title = title 903 lb.title = title
881 lb.name = blog_name 904 lb.name = blog_name
882 lb.body = excerpt 905 lb.body = excerpt
906 post.comments.append(lb)
883 if message: 907 if message:
884 error = 1 908 error = 1
885 message = "<message>%s</message>\n" % message 909 message = "<message>%s</message>\n" % message
diff --git a/quoins/model/blog.py b/quoins/model/blog.py
index fb1fa27..a7415d6 100644
--- a/quoins/model/blog.py
+++ b/quoins/model/blog.py
@@ -89,17 +89,7 @@ comment_table = Table('comment', metadata,
89 Column('body', TEXT), 89 Column('body', TEXT),
90 Column('created', DateTime, nullable=False, default=datetime.now), 90 Column('created', DateTime, nullable=False, default=datetime.now),
91 Column('approved', Boolean, nullable=False, default=False, index=True), 91 Column('approved', Boolean, nullable=False, default=False, index=True),
92) 92 Column('type', String(16), nullable=False, default='comment', index=True),
93
94linkback_table = Table('linkback', metadata,
95 Column('id', Integer, primary_key=True),
96 Column('post_id', Integer, ForeignKey('post.id',
97 onupdate="CASCADE", ondelete="CASCADE"), nullable=False, index=True),
98 Column('url', String(255)),
99 Column('title', Unicode(255)),
100 Column('body', Unicode(255)),
101 Column('name', Unicode(255)),
102 Column('created', DateTime, nullable=False, default=datetime.now),
103) 93)
104 94
105class Blog(object): 95class Blog(object):
@@ -176,25 +166,15 @@ class Post(object):
176 DBSession.delete(t) 166 DBSession.delete(t)
177 self.tags.remove(t) 167 self.tags.remove(t)
178 168
179 def get_comments_and_linkbacks(self, trackbacks=1, pingbacks=1):
180 objects = self.approved_comments[:]
181 for x in self.linkbacks:
182 if (trackbacks and x.body) or (pingbacks and not x.body):
183 objects.append(x)
184 objects.sort(lambda a,b: cmp(a.created, b.created))
185 return objects
186 comments_and_links = property(get_comments_and_linkbacks)
187
188
189class Media(object): 169class Media(object):
190 pass 170 pass
191 171
192class Tag(object): 172class Tag(object):
193 pass 173 pass
194 174
195class BaseComment(object): 175class Comment(object):
196 def get_author_name(self): 176 def get_author_name(self):
197 if hasattr(self, 'author') and self.author: 177 if self.author:
198 return self.author.display_name 178 return self.author.display_name
199 if self.name: 179 if self.name:
200 return self.name 180 return self.name
@@ -202,12 +182,6 @@ class BaseComment(object):
202 return self.url 182 return self.url
203 return 'Anonymous' 183 return 'Anonymous'
204 author_name = property(get_author_name) 184 author_name = property(get_author_name)
205
206class Comment(BaseComment):
207 comment_type = 'comment'
208
209class LinkBack(BaseComment):
210 comment_type = 'linkback'
211 185
212mapper(Blog, blog_table, 186mapper(Blog, blog_table,
213 properties=dict(posts=relation(Post, 187 properties=dict(posts=relation(Post,
@@ -243,13 +217,9 @@ mapper(Post, post_table,
243 unapproved_comments=relation(Comment, 217 unapproved_comments=relation(Comment,
244 primaryjoin=and_(comment_table.c.post_id==post_table.c.id, 218 primaryjoin=and_(comment_table.c.post_id==post_table.c.id,
245 comment_table.c.approved==False)), 219 comment_table.c.approved==False)),
246 media=relation(Media), 220 media=relation(Media)))
247 linkbacks=relation(LinkBack)))
248 221
249mapper(Comment, comment_table, 222mapper(Comment, comment_table,
250 order_by=comment_table.c.created, 223 order_by=comment_table.c.created,
251 properties=dict(post=relation(Post), 224 properties=dict(post=relation(Post),
252 author=relation(TGUser))) 225 author=relation(TGUser)))
253
254mapper(LinkBack, linkback_table,
255 properties=dict(post=relation(Post)))