5 #include "viewemailtemplate_p.h"
7 #include <Cutelyst/Context>
9 #include <SimpleMail/mimemessage.h>
10 #include <SimpleMail/emailaddress.h>
11 #include <SimpleMail/mimetext.h>
13 #include <QtCore/QLoggingCategory>
15 Q_LOGGING_CATEGORY(CUTELYST_VIEW_EMAILTEMPLATE,
"cutelyst.view.emailtemplate", QtWarningMsg)
23 d->defaultContentType = QByteArrayLiteral(
"text/html");
26 QString ViewEmailTemplate::templatePrefix()
const
29 return d->templatePrefix;
35 d->templatePrefix = prefix;
39 QString ViewEmailTemplate::defaultView()
const
42 return d->defaultView;
48 d->defaultView = view;
52 MimePart *generatePart(
Context *c,
const ViewEmailTemplatePrivate *d,
const QVariantHash &partHash)
54 const QString defaultView = d->defaultView;
57 auto viewIt = partHash.constFind(QStringLiteral(
"view"));
58 if (viewIt != partHash.constEnd() && !viewIt.value().toString().isEmpty()) {
60 const QString viewString = viewIt.value().toString();
61 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE) <<
"Using specified view" << viewString <<
"for rendering.";
62 view = c->
view(viewString);
63 }
else if (!defaultView.isEmpty()) {
65 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE) <<
"Using default view" << defaultView <<
"for rendering.";
66 view = c->
view(defaultView);
69 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE) <<
"Using Cutelysts default view for rendering.";
70 view = c->
view(QString());
75 c->
error(QStringLiteral(
"Could not find a view to render"));
79 QString templateString = partHash.value(QStringLiteral(
"template")).toString();;
81 if (!d->templatePrefix.isEmpty()) {
82 templateString = d->templatePrefix + QLatin1Char(
'/') + templateString;
86 const QVariantHash currentStash = c->
stash();
88 c->
setStash(QStringLiteral(
"template"), templateString);
89 QByteArray output = view->
render(c);
91 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE) <<
"Errors" << c->
errors();
93 c->
stash() = currentStash;
95 MimePart *part =
new MimePart();
96 part->setContent(output);
98 d->setupAttributes(part, partHash);
108 QVariantHash email = c->
stash(d->stashKey).toHash();
109 const QString templateName = email.value(QStringLiteral(
"template")).toString();
110 const QVariantList templateList = email.value(QStringLiteral(
"templates")).toList();
111 if (templateName.isEmpty() && templateList.isEmpty()) {
116 QVariantList parts = email.value(QStringLiteral(
"parts")).toList();
117 if (!templateList.isEmpty() && templateList.first().type() == QVariant::Hash) {
119 for (
const QVariant &part : templateList) {
120 const QVariantHash partHash = part.toHash();
121 MimePart *partObj = generatePart(c, d, partHash);
122 parts.append(QVariant::fromValue(partObj));
125 }
else if (!templateName.isEmpty()) {
127 QVariantHash partArgs({
128 {QStringLiteral(
"template"), templateName},
131 auto contentTypeIt = email.constFind(QStringLiteral(
"content_type"));
132 if (contentTypeIt != email.constEnd() && !contentTypeIt.value().toString().isEmpty()) {
133 partArgs.insert(QStringLiteral(
"content_type"), contentTypeIt.value().toString());
135 MimePart *partObj = generatePart(c, d, partArgs);
136 parts.append(QVariant::fromValue(partObj));
138 email.insert(QStringLiteral(
"parts"), parts);
145 #include "moc_viewemailtemplate.cpp"
QStringList errors() const noexcept
Returns a list of errors that were defined.
void stash(const QVariantHash &unite)
void setStash(const QString &key, const QVariant &value)
View * view(const QString &name) const
bool error() const noexcept
Returns true if an error was set.
void setDefaultView(const QString &view)
virtual QByteArray render(Context *c) const override
ViewEmailTemplate(QObject *parent, const QString &name=QString())
Constructs a new ViewEmailTemplate object with the given parent and name.
void setTemplatePrefix(const QString &prefix)
virtual QByteArray render(Context *c) const override
Cutelyst View abstract view component
virtual QByteArray render(Context *c) const =0
The Cutelyst namespace holds all public Cutelyst API.