5#include "viewemailtemplate_p.h"
7#include <Cutelyst/Context>
8#include <SimpleMail/emailaddress.h>
9#include <SimpleMail/mimemessage.h>
10#include <SimpleMail/mimetext.h>
12#include <QtCore/QLoggingCategory>
14Q_LOGGING_CATEGORY(CUTELYST_VIEW_EMAILTEMPLATE,
"cutelyst.view.emailtemplate", QtWarningMsg)
17using namespace Qt::StringLiterals;
20 :
ViewEmail(new ViewEmailTemplatePrivate, parent, name)
24 d->defaultContentType = QByteArrayLiteral(
"text/html");
30 return d->templatePrefix;
36 d->templatePrefix = prefix;
43 return d->defaultView;
49 d->defaultView = view;
53std::shared_ptr<MimePart>
54 generatePart(
Context *c,
const ViewEmailTemplatePrivate *d,
const QVariantHash &partHash)
56 const QString defaultView = d->defaultView;
58 const View *view =
nullptr;
59 auto viewIt = partHash.constFind(u
"view"_s);
60 if (viewIt != partHash.constEnd() && !viewIt.value().toString().isEmpty()) {
62 const QString viewString = viewIt.value().toString();
63 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE)
64 <<
"Using specified view" << viewString <<
"for rendering.";
65 view = c->
view(viewString);
66 }
else if (!defaultView.
isEmpty()) {
68 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE)
69 <<
"Using default view" << defaultView <<
"for rendering.";
70 view = c->
view(defaultView);
73 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE) <<
"Using Cutelysts default view for rendering.";
79 c->
appendError(u
"Could not find a view to render"_s);
83 QString templateString = partHash.value(u
"template"_s).toString();
86 if (!d->templatePrefix.isEmpty()) {
87 templateString = d->templatePrefix + u
'/' + templateString;
91 const QVariantHash currentStash = c->
stash();
93 c->
setStash(u
"template"_s, templateString);
96 qCDebug(CUTELYST_VIEW_EMAILTEMPLATE) <<
"Errors" << c->
errors();
98 c->
stash() = currentStash;
100 auto part = std::make_shared<MimePart>();
101 part->setContent(output);
103 d->setupAttributes(part, partHash);
113 QVariantHash email = c->
stash(d->stashKey).toHash();
114 const QString templateName = email.value(u
"template"_s).toString();
115 const QVariantList templateList = email.value(u
"templates"_s).toList();
116 if (templateName.
isEmpty() && templateList.isEmpty()) {
121 QVariantList parts = email.value(u
"parts"_s).toList();
124 for (
const QVariant &part : templateList) {
125 const QVariantHash partHash = part.toHash();
126 auto partObj = generatePart(c, d, partHash);
130 }
else if (!templateName.
isEmpty()) {
132 QVariantHash partArgs({
133 {u
"template"_s, templateName},
136 auto contentTypeIt = email.constFind(u
"content_type"_s);
137 if (contentTypeIt != email.constEnd() && !contentTypeIt.value().toString().isEmpty()) {
138 partArgs.insert(u
"content_type"_s, contentTypeIt.value().toString());
140 auto partObj = generatePart(c, d, partArgs);
143 email.insert(u
"parts"_s, parts);
150#include "moc_viewemailtemplate.cpp"
QStringList errors() const noexcept
void stash(const QVariantHash &unite)
void setStash(const QString &key, const QVariant &value)
View * view(QStringView name={}) const
void appendError(const QString &error)
bool error() const noexcept
A view that renders stash data using another view and sends it via e-mail.
void setDefaultView(const QString &view)
ViewEmailTemplate(QObject *parent, const QString &name={})
QByteArray render(Context *c) const override
void setTemplatePrefix(const QString &prefix)
A view that sends stash data via e-mail.
QByteArray render(Context *c) const override
Abstract View component for Cutelyst.
virtual QByteArray render(Context *c) const =0
The Cutelyst namespace holds all public Cutelyst API.
bool isEmpty() const const
QVariant fromValue(T &&value)