From: Nikolay <faf...@us...> - 2004-01-06 23:19:58
|
Update of /cvsroot/collective/CMFNewsletters In directory sc8-pr-cvs1:/tmp/cvs-serv3085 Modified Files: Newsletter.py VERSION.txt config.py mailtemplates.py Log Message: * added newsletter mailtemplates * feature complete for 1.0 version Index: mailtemplates.py =================================================================== RCS file: /cvsroot/collective/CMFNewsletters/mailtemplates.py,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- mailtemplates.py 24 Dec 2003 12:07:17 -0000 1.1 +++ mailtemplates.py 6 Jan 2004 23:19:55 -0000 1.2 @@ -4,17 +4,63 @@ from config import PROJECTNAME +newsletter_html = {'title': 'Newsletter Template (HTML)', + 'description': 'Default Newsletter Template.', + 'mail_subject': '%(title)s', + 'mail_body': +""" +<h2><a tal:content="options/title" tal:attributes="href options/url"></a></h2> +<p tal:content="options/description"></p> +<tal:block content="modules/DateTime/DateTime" /> +<br /> + +<div tal:repeat="brain options/contents"> + <h4 tal:content="brain/Title"></h4> + <div class="description"> + <div tal:content="brain/Description"></div> + <a tal:content="brain/getURL" tal:attributes="href brain/getURL"></a> + </div> + <br /> +</div> + +_____________________________<br /> +<a tal:content="options/portal_title" tal:attributes="href options/portal_url"></a> +"""} + +newsletter_plain = {'title': 'Newsletter Template (Plain)', + 'description': 'Default Newsletter Template.', + 'mail_subject': '%(title)s', + 'mail_body': +""" +---------------------------------------------------- +<tal:block content="options/title" /> +<tal:block content="options/url" /> +<tal:block content="options/title" /> - <tal:block content="modules/DateTime/DateTime" /> +---------------------------------------------------- +<tal:block tal:repeat="brain options/contents"> +<tal:block content="repeat/brain/number" />. <tal:block content="brain/Title" /> +<tal:block content="brain/Description" /> +<tal:block content="brain/getURL" /> +</tal:block> + +_______________________________ +<tal:block content="options/portal_title" /> <tal:block content="options/portal_url" /> +"""} + + templates = { PROJECTNAME: {'attributes': {'title':'CMFNewsletters mail templates', 'fields': - ['newsletter : Newsletter object', + ['title : Newsletter object', 'newsletter_title: Newsletter title', 'newsletter_url: Newsletter url', 'newsletter_email: Newsletter email address', 'portal_title: Portal title', 'portal_url: Portal url' ]}, - 'templates': {} + 'templates': {'newsletter_html': (newsletter_html, 'PT'), + 'newsletter_plain': (newsletter_plain, 'PT'), + } } } Index: VERSION.txt =================================================================== RCS file: /cvsroot/collective/CMFNewsletters/VERSION.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- VERSION.txt 24 Dec 2003 12:07:17 -0000 1.1 +++ VERSION.txt 6 Jan 2004 23:19:55 -0000 1.2 @@ -1 +1 @@ -0.1 +1.0beta Index: Newsletter.py =================================================================== RCS file: /cvsroot/collective/CMFNewsletters/Newsletter.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Newsletter.py 5 Jan 2004 22:02:40 -0000 1.2 +++ Newsletter.py 6 Jan 2004 23:19:55 -0000 1.3 @@ -10,10 +10,13 @@ from Products.CMFCore.CMFCorePermissions import \ View, ModifyPortalContent, ManageProperties from Products.Archetypes.public import * +from Products.CMFCore.utils import getToolByName from Products.CMFTopic.Topic import Topic from Products.PortalTransport.Subscribeable import Subscribeable from Products.PortalTransport.interfaces.mailreceiver import IMailReceiver +from email.Utils import formataddr + from config import * @@ -115,15 +118,14 @@ def manage_afterAdd(self, item, container): BaseFolder.manage_afterAdd(self, item, container) - print 'manage_afterAdd' - try: self.addCriterion('modified', 'Friendly Date Criterion') self.addCriterion('Type', 'List Criterion') crit = self.getCriterion('Type') crit.edit(('Document', 'News Item')) except: - traceback.print_exc() + #traceback.print_exc() + pass security.declareProtected(ModifyPortalContent, 'setTitle') def setTitle(self, value, **kwargs): @@ -151,49 +153,55 @@ """ """ return 1 + security.declareProtected(SendNewsletter, 'sendNewsletter') + def sendNewsletter(self, REQUEST=None): + """ """ + self.sendMessage(self) + + if REQUEST is not None: + REQUEST.RESPONSE.redirect('%s?portal_status_message=%s'%( + self.absolute_url(), 'Newsletter have been sended.')) + security.declarePrivate('sendMessage') - def sendMessage(self, message, parent): + def sendMessage(self, message): """ send newsletter to all subsribed users """ portal = getToolByName(self, 'portal_url').getPortalObject() - mtool = portal.portal_membership - mspool = portal.portal_mailspool pmt = portal.portal_mailtemplates - subs = portal.portal_subscribers - users = subs.getSubscribers(self) + users = portal.portal_subscriptions.getSubscribers((self,)) + if not users: return - print users - raise 'Error', users - #headers = self.createHeaders( - # message, parent, topic, forum, forum.forumEmail(), mtool) - - headers['Bcc'] = '%s'%','.join(users.values()) + headers = {} + headers['Bcc'] = '%s'%','.join([u[1] for u in users]) + headers['Message-ID'] = '<%s...@cm...>'%self.UID() + + fromEmail = self.getEmailAddress().strip() or email_from_address + + if fromEmail: + headers['From'] = formataddr((self.Title(), fromEmail)) + else: + headers['From'] = formataddr((self.email_from_name, self.email_from_address)) + contents = self.queryCatalog() + if not contents: + return + info = { - 'message': message, - 'message_title': message.Title() or '[No subject]', - 'message_body': message.CookedBody(), - 'message_url': message.absolute_url(), - 'topic': topic, - 'topic_url': topic.absolute_url(), - 'topic_title': topic.Title(), - 'forum': forum, - 'forum_url': forum.absolute_url(), - 'forum_title': forum.Title(), + 'contents': contents, + 'newsletter': self, + 'title': self.Title(), + 'description': self.Description(), + 'url': self.absolute_url(), } - messages = [] - messages.append(pmt.createMessage( - PROJECTNAME, 'forum_message_html', info, {}, text_format='html')) - - info['message_body'] = message.EditableBody() - messages.append(pmt.createMessage( - PROJECTNAME, 'forum_message_plain', info, {})) + message = pmt.createMessage( + PROJECTNAME, 'newsletter_html', info, {}, text_format='html') + message = pmt.createMultipartMessage( + PROJECTNAME, 'newsletter_plain', info, headers, messages=(message,)) - msg = pmt.createMultipartMessage(headers, messages) - mspool.addMessage(msg) + portal.portal_mailspool.addMessage(message) registerType(Newsletter) Index: config.py =================================================================== RCS file: /cvsroot/collective/CMFNewsletters/config.py,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- config.py 24 Dec 2003 12:07:17 -0000 1.1 +++ config.py 6 Jan 2004 23:19:55 -0000 1.2 @@ -6,13 +6,16 @@ import os from Globals import package_home from Products.CMFCore.CMFCorePermissions import \ - AddPortalContent, ModifyPortalContent, ManagePortal + AddPortalContent, ModifyPortalContent, ManagePortal, setDefaultRoles GLOBALS = globals() ADD_CONTENT_PERMISSION = AddPortalContent PROJECTNAME = 'CMFNewsletters' SKINS_DIR = 'skins' + +SendNewsletter = 'Send Newsletter' +setDefaultRoles(SendNewsletter, ('Manager', 'Owner')) from Products.CMFPlone import Portal if Portal.__version__ > '1.0.9': |