Changeset 3373
- Timestamp:
- 03/16/08 16:53:29 (6 months ago)
- Files:
-
- discussionplugin/0.10/setup.py (modified) (1 diff)
- discussionplugin/0.10/tracdiscussion/admin.py (modified) (2 diffs)
- discussionplugin/0.10/tracdiscussion/api.py (modified) (5 diffs)
- discussionplugin/0.10/tracdiscussion/core.py (modified) (2 diffs)
- discussionplugin/0.10/tracdiscussion/init.py (modified) (1 diff)
- discussionplugin/0.10/tracdiscussion/search.py (modified) (1 diff)
- discussionplugin/0.10/tracdiscussion/timeline.py (modified) (2 diffs)
- discussionplugin/0.10/tracdiscussion/wiki.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
discussionplugin/0.10/setup.py
r1987 r3373 15 15 'TracDiscussion.admin = tracdiscussion.admin', 16 16 'TracDiscussion.search = tracdiscussion.search', 17 'TracDiscussion.notification = tracdiscussion.notification']}, 17 'TracDiscussion.notification = tracdiscussion.notification', 18 'TracDiscussion.spamfilter = tracdiscussion.spamfilter']}, 18 19 install_requires = ['TracWebAdmin'], 19 20 keywords = 'trac discussion', discussionplugin/0.10/tracdiscussion/admin.py
r2541 r3373 1 1 # -*- coding: utf8 -*- 2 2 3 from tracdiscussion.api import * 3 import time 4 4 5 from trac.core import * 5 from trac.perm import IPermissionRequestor6 6 from trac.web.chrome import add_stylesheet 7 7 from trac.wiki import wiki_to_html, wiki_to_oneliner 8 9 from trac.perm import IPermissionRequestor 8 10 from webadmin.web_ui import IAdminPageProvider 9 import time 11 12 from tracdiscussion.api import * 10 13 11 14 class DiscussionWebAdmin(Component): … … 15 18 """ 16 19 implements(IAdminPageProvider) 20 21 # Extension points. 22 discussion_manipulators = ExtensionPoint(IDiscussionManipulator) 17 23 18 24 # IAdminPageProvider discussionplugin/0.10/tracdiscussion/api.py
r2836 r3373 1 1 # -*- coding: utf8 -*- 2 2 3 from tracdiscussion.notification import * 3 import time 4 4 5 from trac.core import * 5 6 from trac.web.chrome import add_stylesheet … … 8 9 from trac.util import format_datetime, pretty_timedelta 9 10 from trac.util.text import to_unicode 10 import time 11 12 from tracdiscussion.notification import * 13 14 class InvalidDiscussionPost(TracError): 15 """Exception raised when a ticket fails validation.""" 16 17 class IDiscussionManipulator(Interface): 18 """Miscellaneous manipulation of forum posts.""" 19 20 def validate_message(self, req, author, body): 21 """Validate a new message post in a topic. 22 23 Must return a list of `(field, message)` tuples, one for each problem 24 detected. `field` can be `None` to indicate an overall problem with the 25 ticket. Therefore, a return value of `[]` means everything is OK.""" 26 27 def validate_topic(self, req, author, subject, body): 28 """Validate a new topic. 29 30 Must return a list of `(field, message)` tuples, one for each problem 31 detected. `field` can be `None` to indicate an overall problem with the 32 ticket. Therefore, a return value of `[]` means everything is OK.""" 11 33 12 34 class DiscussionApi(object): … … 14 36 self.env = component.env 15 37 self.log = component.log 38 self.discussion_manipulators = component.discussion_manipulators 16 39 17 40 # Main request processing function … … 533 556 new_time = int(time.time()) 534 557 558 #Â Manipulate new topic. 559 for manipulator in self.discussion_manipulators: 560 for field, message in manipulator.validate_topic(req, 561 new_author, new_subject, new_body): 562 if field: 563 raise InvalidDiscussionPost("The field %s in" 564 " message is invalid: %s" % (field, message)) 565 else: 566 raise InvalidDiscussionPost("Invalid post: %s" % 567 message) 568 535 569 # Add topic. 536 570 self.add_topic(cursor, forum['id'], new_subject, new_time, … … 642 676 new_body = req.args.get('body') 643 677 new_time = int(time.time()) 678 679 # Custom validation rules 680 for manipulator in self.discussion_manipulators: 681 for field, message in manipulator.validate_message(req, 682 new_author, new_body): 683 if field: 684 raise InvalidDiscussionPost("The field %s in" 685 " message is invalid: %s" % (field, message)) 686 else: 687 raise InvalidDiscussionPost("Invalid post: %s" % 688 message) 644 689 645 690 # Add message. discussionplugin/0.10/tracdiscussion/core.py
r2541 r3373 1 1 # -*- coding: utf8 -*- 2 2 3 import re 4 5 from trac.core import * 6 from trac.config import Option 7 from trac.util.html import html 8 9 from trac.perm import IPermissionRequestor 10 from trac.web.main import IRequestHandler 11 from trac.web.chrome import INavigationContributor, ITemplateProvider 12 3 13 from tracdiscussion.api import * 4 from trac.core import *5 from trac.web.chrome import INavigationContributor, ITemplateProvider6 from trac.web.main import IRequestHandler7 from trac.config import Option8 from trac.perm import IPermissionRequestor9 from trac.util.html import html10 import re11 14 12 15 class DiscussionCore(Component): … … 17 20 implements(INavigationContributor, IRequestHandler, ITemplateProvider, 18 21 IPermissionRequestor) 22 23 # Extension points. 24 discussion_manipulators = ExtensionPoint(IDiscussionManipulator) 19 25 20 26 title = Option('discussion', 'title', 'Discussion', discussionplugin/0.10/tracdiscussion/init.py
r1482 r3373 3 3 from trac.core import * 4 4 from trac.db import * 5 5 6 from trac.env import IEnvironmentSetupParticipant 6 7 discussionplugin/0.10/tracdiscussion/search.py
r2166 r3373 3 3 from trac.core import * 4 4 from trac.config import Option 5 from trac.Search import ISearchSource,shorten_result5 from trac.Search import shorten_result 6 6 from trac import util 7 8 from trac.Search import ISearchSource 7 9 8 10 class DiscussionSearch(Component): discussionplugin/0.10/tracdiscussion/timeline.py
r1987 r3373 1 1 # -*- coding: utf8 -*- 2 2 3 import time 4 3 5 from trac.core import * 4 from trac.Timeline import ITimelineEventProvider5 6 from trac.wiki import wiki_to_html, wiki_to_oneliner 6 7 from trac.util import Markup 7 8 from trac.util.html import html 8 import time 9 10 from trac.Timeline import ITimelineEventProvider 9 11 10 12 class DiscussionTimeline(Component): … … 16 18 17 19 # ITimelineEventProvider 20 18 21 def get_timeline_events(self, req, start, stop, filters): 19 22 self.log.debug("start: %s, stop: %s, filters: %s" % (start, stop, discussionplugin/0.10/tracdiscussion/wiki.py
r2836 r3373 23 23 implements(IWikiSyntaxProvider, IWikiMacroProvider, IRequestFilter) 24 24 25 # Extension points. 26 discussion_manipulators = ExtensionPoint(IDiscussionManipulator) 27 25 28 # IWikiSyntaxProvider methods 29 26 30 def get_link_resolvers(self): 27 31 yield ('forum', self._discussion_link) … … 33 37 34 38 # IWikiMacroProvider methods 39 35 40 def get_macros(self): 36 41 yield 'ViewTopic'
