1 from django import template
2 from forum import settings
3 from forum.utils.mail import create_and_send_mail_messages
5 register = template.Library()
7 class MultiUserMailMessage(template.Node):
8 def __init__(self, nodelist):
9 self.nodelist = nodelist
11 def render(self, context):
12 recipients = context['recipients']
15 for recipient in recipients:
16 context['embeddedmedia'] = {}
17 context['recipient'] = recipient
18 self.nodelist.render(context)
19 messages.append((recipient, context['subject'], context['htmlcontent'], context['textcontent'], context['embeddedmedia']))
21 create_and_send_mail_messages(messages)
24 def email(parser, token):
25 nodelist = parser.parse(('endemail',))
26 parser.delete_first_token()
27 return MultiUserMailMessage(nodelist)
31 class EmailPartNode(template.Node):
32 def __init__(self, nodelist, varname):
33 self.nodelist = nodelist
34 self.varname = varname
36 def render(self, context):
37 context[self.varname] = self.nodelist.render(context).strip()
40 def subject(parser, token):
41 nodelist = parser.parse(('endsubject',))
42 parser.delete_first_token()
43 return EmailPartNode(nodelist, 'subject')
45 def content(parser, token):
47 tag_name, base = token.split_contents()
50 tag_name = token.split_contents()[0]
53 raise template.TemplateSyntaxError, "%r tag requires at least two arguments" % token.contents.split()[0]
55 nodelist = parser.parse(('end%s' % tag_name,))
58 base = template.loader.get_template(base)
60 basenodes = base.nodelist
61 content = [i for i,n in enumerate(basenodes) if isinstance(n, template.loader_tags.BlockNode) and n.name == "content"]
64 nodelist = template.NodeList(basenodes[0:index] + nodelist + basenodes[index:])
67 parser.delete_first_token()
68 return EmailPartNode(nodelist, tag_name)
71 register.tag('htmlcontent', content)
72 register.tag('textcontent', content)
75 class EmbedMediaNode(template.Node):
76 def __init__(self, location, alias):
77 self.location = template.Variable(location)
80 def render(self, context):
81 context['embeddedmedia'][self.alias] = self.location.resolve(context)
86 def embedmedia(parser, token):
88 tag_name, location, _, alias = token.split_contents()
90 raise template.TemplateSyntaxError, "%r tag requires exactly four arguments" % token.contents.split()[0]
92 return EmbedMediaNode(location, alias)