18 #include "viewemailtemplate_p.h"
20 #include <Cutelyst/Context>
22 #include <SimpleMail/mimemessage.h>
23 #include <SimpleMail/emailaddress.h>
24 #include <SimpleMail/mimetext.h>
26 #include <QtCore/QLoggingCategory>
28 Q_LOGGING_CATEGORY(CUTELYST_VIEW_EMAILTEMPLATE,
"cutelyst.view.emailtemplate", QtWarningMsg)
36 d->defaultContentType = QByteArrayLiteral(
"text/html");
39 QString ViewEmailTemplate::templatePrefix()
const
42 return d->templatePrefix;
48 d->templatePrefix = prefix;
52 QString ViewEmailTemplate::defaultView()
const
55 return d->defaultView;
61 d->defaultView = view;
65 MimePart *generatePart(
Context *c,
const ViewEmailTemplatePrivate *d,
const QVariantHash &partHash)
67 const QString defaultView = d->defaultView;
70 auto viewIt = partHash.constFind(QStringLiteral(
"view"));
71 if (viewIt != partHash.constEnd() && !viewIt.value().toString().isEmpty()) {
73 const QString viewString = viewIt.value().toString();
74 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE) <<
"Using specified view" << viewString <<
"for rendering.";
75 view = c->
view(viewString);
76 }
else if (!defaultView.isEmpty()) {
78 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE) <<
"Using default view" << defaultView <<
"for rendering.";
79 view = c->
view(defaultView);
82 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE) <<
"Using Cutelysts default view for rendering.";
83 view = c->
view(QString());
88 c->
error(QStringLiteral(
"Could not find a view to render"));
92 QString templateString = partHash.value(QStringLiteral(
"template")).toString();;
94 if (!d->templatePrefix.isEmpty()) {
95 templateString = d->templatePrefix + QLatin1Char(
'/') + templateString;
99 const QVariantHash currentStash = c->
stash();
101 c->
setStash(QStringLiteral(
"template"), templateString);
102 QByteArray output = view->
render(c);
104 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE) <<
"Errors" << c->
errors();
106 c->
stash() = currentStash;
108 MimePart *part =
new MimePart();
109 part->setContent(output);
111 d->setupAttributes(part, partHash);
121 QVariantHash email = c->
stash(d->stashKey).toHash();
122 const QString templateName = email.value(QStringLiteral(
"template")).toString();
123 const QVariantList templateList = email.value(QStringLiteral(
"templates")).toList();
124 if (templateName.isEmpty() && templateList.isEmpty()) {
129 QVariantList parts = email.value(QStringLiteral(
"parts")).toList();
130 if (!templateList.isEmpty() && templateList.first().type() == QVariant::Hash) {
132 for (
const QVariant &part : templateList) {
133 const QVariantHash partHash = part.toHash();
134 MimePart *partObj = generatePart(c, d, partHash);
135 parts.append(QVariant::fromValue(partObj));
138 }
else if (!templateName.isEmpty()) {
140 QVariantHash partArgs({
141 {QStringLiteral(
"template"), templateName},
144 auto contentTypeIt = email.constFind(QStringLiteral(
"content_type"));
145 if (contentTypeIt != email.constEnd() && !contentTypeIt.value().toString().isEmpty()) {
146 partArgs.insert(QStringLiteral(
"content_type"), contentTypeIt.value().toString());
148 MimePart *partObj = generatePart(c, d, partArgs);
149 parts.append(QVariant::fromValue(partObj));
151 email.insert(QStringLiteral(
"parts"), parts);
158 #include "moc_viewemailtemplate.cpp"