{{ doc.subject }}
-- {{ frappe.format_date(doc.modified) }} -
-diff --git a/frappe/email/doctype/newsletter/__init__.py b/frappe/email/doctype/newsletter/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frappe/email/doctype/newsletter/exceptions.py b/frappe/email/doctype/newsletter/exceptions.py deleted file mode 100644 index ccce54c957..0000000000 --- a/frappe/email/doctype/newsletter/exceptions.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# MIT License. See LICENSE - -from frappe.exceptions import ValidationError - - -class NewsletterAlreadySentError(ValidationError): - pass - - -class NoRecipientFoundError(ValidationError): - pass - - -class NewsletterNotSavedError(ValidationError): - pass diff --git a/frappe/email/doctype/newsletter/newsletter.js b/frappe/email/doctype/newsletter/newsletter.js deleted file mode 100644 index 385b31dfab..0000000000 --- a/frappe/email/doctype/newsletter/newsletter.js +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.ui.form.on("Newsletter", { - refresh(frm) { - let doc = frm.doc; - let can_write = frappe.boot.user.can_write.includes(doc.doctype); - if (!frm.is_new() && !frm.is_dirty() && !doc.email_sent && can_write) { - frm.add_custom_button( - __("Send a test email"), - () => { - frm.events.send_test_email(frm); - }, - __("Preview") - ); - - frm.add_custom_button( - __("Check broken links"), - () => { - frm.dashboard.set_headline(__("Checking broken links...")); - frm.call("find_broken_links").then((r) => { - frm.dashboard.set_headline(""); - let links = r.message; - if (links && links.length) { - let html = - "
{}. {}.
- - """.format(*translatable_content) - - frappe.sendmail( - email, - subject=email_subject, - content=content, - ) - - -@frappe.whitelist(allow_guest=True) -def confirm_subscription(email, email_group=None): - """API endpoint to confirm email subscription. - This endpoint is called when user clicks on the link sent to their mail. - """ - if not verify_request(): - return - - if email_group is None: - email_group = get_default_email_group() - - try: - group = frappe.get_doc("Email Group", email_group) - except frappe.DoesNotExistError: - group = frappe.get_doc({"doctype": "Email Group", "title": email_group}).insert( - ignore_permissions=True - ) - - frappe.flags.ignore_permissions = True - - add_subscribers(email_group, email) - frappe.db.commit() - - welcome_url = group.get_welcome_url(email) - - if welcome_url: - frappe.local.response["type"] = "redirect" - frappe.local.response["location"] = welcome_url - else: - frappe.respond_as_web_page( - _("Confirmed"), - _("{0} has been successfully added to the Email Group.").format(email), - indicator_color="green", - ) - - -def get_list_context(context=None): - context.update( - { - "show_search": True, - "no_breadcrumbs": True, - "title": _("Newsletters"), - "filters": {"published": 1}, - "row_template": "email/doctype/newsletter/templates/newsletter_row.html", - } - ) - - -def send_scheduled_email(): - """Send scheduled newsletter to the recipients.""" - frappe.flags.is_scheduler_running = True - - scheduled_newsletter = frappe.get_all( - "Newsletter", - filters={ - "schedule_send": ("<=", frappe.utils.now_datetime()), - "email_sent": False, - "schedule_sending": True, - }, - ignore_ifnull=True, - pluck="name", - ) - - for newsletter_name in scheduled_newsletter: - try: - newsletter = frappe.get_doc("Newsletter", newsletter_name) - newsletter.queue_all() - - except Exception: - frappe.db.rollback() - - # wasn't able to send emails :( - frappe.db.set_value("Newsletter", newsletter_name, "email_sent", 0) - newsletter.log_error("Failed to send newsletter") - - if not frappe.in_test: - frappe.db.commit() - - frappe.flags.is_scheduler_running = False - - -@frappe.whitelist(allow_guest=True) -def newsletter_email_read(recipient_email=None, reference_doctype=None, reference_name=None): - if not (recipient_email and reference_name): - return - verify_request() - try: - doc = frappe.get_cached_doc("Newsletter", reference_name) - if doc.add_viewed(recipient_email, force=True, unique_views=True): - newsletter = frappe.qb.DocType("Newsletter") - ( - frappe.qb.update(newsletter) - .set(newsletter.total_views, newsletter.total_views + 1) - .where(newsletter.name == doc.name) - ).run() - - except Exception: - frappe.log_error( - title=f"Unable to mark as viewed for {recipient_email}", - reference_doctype="Newsletter", - reference_name=reference_name, - ) - - finally: - frappe.response.update(frappe.utils.get_imaginary_pixel_response()) - - -def get_default_email_group(): - return _("Website", lang=frappe.db.get_default("language")) diff --git a/frappe/email/doctype/newsletter/newsletter_list.js b/frappe/email/doctype/newsletter/newsletter_list.js deleted file mode 100644 index 71e9423b7e..0000000000 --- a/frappe/email/doctype/newsletter/newsletter_list.js +++ /dev/null @@ -1,12 +0,0 @@ -frappe.listview_settings["Newsletter"] = { - add_fields: ["subject", "email_sent", "schedule_sending"], - get_indicator: function (doc) { - if (doc.email_sent) { - return [__("Sent"), "green", "email_sent,=,1"]; - } else if (doc.schedule_sending) { - return [__("Scheduled"), "purple", "email_sent,=,0|schedule_sending,=,1"]; - } else { - return [__("Not Sent"), "gray", "email_sent,=,0"]; - } - }, -}; diff --git a/frappe/email/doctype/newsletter/templates/newsletter.html b/frappe/email/doctype/newsletter/templates/newsletter.html deleted file mode 100644 index 05f3560648..0000000000 --- a/frappe/email/doctype/newsletter/templates/newsletter.html +++ /dev/null @@ -1,65 +0,0 @@ -{% extends "templates/web.html" %} - -{% block title %} {{ doc.subject }} {% endblock %} - -{% block page_content %} - - -- {{ frappe.format_date(doc.modified) }} -
-