diff --git a/oca_dependencies.txt b/oca_dependencies.txt
new file mode 100644
index 00000000..10b7b54c
--- /dev/null
+++ b/oca_dependencies.txt
@@ -0,0 +1 @@
+crm
diff --git a/website_mass_mailing_name/README.rst b/website_mass_mailing_name/README.rst
new file mode 100644
index 00000000..7a0a47b0
--- /dev/null
+++ b/website_mass_mailing_name/README.rst
@@ -0,0 +1,67 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+===========================================
+Mass Mailing Subscription Snippet With Name
+===========================================
+
+This module extends the functionality of mass mailings to support asking for
+the contact name directly in the subscription snippet.
+
+If you want to get partners created automatically and linked to the contacts,
+you can additionally install the `mass_mailing_partner
+`_ module.
+
+Usage
+=====
+
+To use this module, you need to:
+
+#. Go to any website page.
+#. Insert any structure block.
+#. Insert the *Newsletter* block as you would usually, inside a structure one.
+#. Choose the newsletter of your liking.
+#. Press *Save*.
+
+.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
+ :alt: Try me on Runbot
+ :target: https://runbot.odoo-community.org/runbot/186/8.0
+
+Known issues / Roadmap
+======================
+
+* If you use Firefox, you could hit https://github.com/odoo/odoo/issues/7722.
+ Just use Chromium to work with this snippet until you update to Odoo 9.0.
+* When migrating to v9, improve the tour test to check autofilling of inputs.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues
+`_. In case of trouble, please
+check there if your issue has already been reported. If you spotted it first,
+help us smashing it by providing a detailed and welcomed feedback.
+
+Credits
+=======
+
+Contributors
+------------
+
+* Jairo Llopis
+
+Maintainer
+----------
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+This module is maintained by the OCA.
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+To contribute to this module, please visit https://odoo-community.org.
diff --git a/website_mass_mailing_name/__init__.py b/website_mass_mailing_name/__init__.py
new file mode 100644
index 00000000..6b59127e
--- /dev/null
+++ b/website_mass_mailing_name/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# © 2016 Jairo Llopis
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import controllers
diff --git a/website_mass_mailing_name/__openerp__.py b/website_mass_mailing_name/__openerp__.py
new file mode 100644
index 00000000..a547e36a
--- /dev/null
+++ b/website_mass_mailing_name/__openerp__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# © 2016 Jairo Llopis
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+{
+ "name": "Mass Mailing Subscription Snippet With Name",
+ "summary": "Ask for name when subscribing, and create and/or link partner",
+ "version": "8.0.1.0.0",
+ "category": "Website",
+ "website": "https://tecnativa.com/",
+ "author": "Tecnativa, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "application": False,
+ "installable": True,
+ "depends": [
+ "mass_mailing",
+ ],
+ "data": [
+ "views/assets.xml",
+ "views/snippets.xml",
+ ],
+}
diff --git a/website_mass_mailing_name/controllers/__init__.py b/website_mass_mailing_name/controllers/__init__.py
new file mode 100644
index 00000000..49478571
--- /dev/null
+++ b/website_mass_mailing_name/controllers/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# © 2016 Jairo Llopis
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import main
diff --git a/website_mass_mailing_name/controllers/main.py b/website_mass_mailing_name/controllers/main.py
new file mode 100644
index 00000000..069de5d1
--- /dev/null
+++ b/website_mass_mailing_name/controllers/main.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# © 2016 Jairo Llopis
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from openerp.addons.mass_mailing.controllers.main import MassMailController
+from openerp.http import request, route
+
+
+class MassMailingPartner(MassMailController):
+ @route()
+ def is_subscriber(self, *args, **kwargs):
+ """Get user name too."""
+ result = super(MassMailingPartner, self).is_subscriber(*args, **kwargs)
+ email = result.get("email") or ""
+ if request.website.user_id != request.env.user:
+ name = request.env.user.name
+ else:
+ name, email = (request.env["mail.mass_mailing.contact"]
+ .get_name_email(email, context=request.context))
+ result["name"] = name
+ result["email"] = email
+ return result
diff --git a/website_mass_mailing_name/i18n/es.po b/website_mass_mailing_name/i18n/es.po
new file mode 100644
index 00000000..414d9440
--- /dev/null
+++ b/website_mass_mailing_name/i18n/es.po
@@ -0,0 +1,23 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * website_mass_mailing_name
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 8.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-05-24 15:03+0000\n"
+"PO-Revision-Date: 2016-05-24 17:04+0200\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"Language: es\n"
+"X-Generator: Poedit 1.8.7.1\n"
+
+#. module: website_mass_mailing_name
+#: view:website:website.snippets
+msgid "your name..."
+msgstr "su nombre..."
diff --git a/website_mass_mailing_name/static/description/icon.png b/website_mass_mailing_name/static/description/icon.png
new file mode 100644
index 00000000..b18b21a1
Binary files /dev/null and b/website_mass_mailing_name/static/description/icon.png differ
diff --git a/website_mass_mailing_name/static/src/css/website_mass_mailing_name.css b/website_mass_mailing_name/static/src/css/website_mass_mailing_name.css
new file mode 100644
index 00000000..03ed9d36
--- /dev/null
+++ b/website_mass_mailing_name/static/src/css/website_mass_mailing_name.css
@@ -0,0 +1,9 @@
+@charset "UTF-8";
+/* © 2016 Jairo Llopis
+ * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
+.js_subscribe .form-control {
+ width: 50%; }
+.js_subscribe[data-subscribe=on] .js_subscribe_name {
+ display: none; }
+
+/*# sourceMappingURL=website_mass_mailing_name.css.map */
diff --git a/website_mass_mailing_name/static/src/css/website_mass_mailing_name.css.map b/website_mass_mailing_name/static/src/css/website_mass_mailing_name.css.map
new file mode 100644
index 00000000..6c806587
--- /dev/null
+++ b/website_mass_mailing_name/static/src/css/website_mass_mailing_name.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": ";;;AAKI,2BAAa;EACT,KAAK,EAAE,GAAG;AAGV,mDAAkB;EACd,OAAO,EAAE,IAAI",
+"sources": ["website_mass_mailing_name.sass"],
+"names": [],
+"file": "website_mass_mailing_name.css"
+}
\ No newline at end of file
diff --git a/website_mass_mailing_name/static/src/css/website_mass_mailing_name.sass b/website_mass_mailing_name/static/src/css/website_mass_mailing_name.sass
new file mode 100644
index 00000000..5271c91b
--- /dev/null
+++ b/website_mass_mailing_name/static/src/css/website_mass_mailing_name.sass
@@ -0,0 +1,11 @@
+@charset "UTF-8"
+/* © 2016 Jairo Llopis
+ * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+.js_subscribe
+ .form-control
+ width: 50%
+
+ &[data-subscribe=on]
+ .js_subscribe_name
+ display: none
diff --git a/website_mass_mailing_name/static/src/js/website_mass_mailing_name.js b/website_mass_mailing_name/static/src/js/website_mass_mailing_name.js
new file mode 100644
index 00000000..ffbe2e58
--- /dev/null
+++ b/website_mass_mailing_name/static/src/js/website_mass_mailing_name.js
@@ -0,0 +1,61 @@
+/* © 2016 Jairo Llopis
+ * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
+
+"use strict";
+(function ($) {
+ openerp.website.snippet.animationRegistry.subscribe.include({
+ start: function(editable_mode) {
+ var self = this;
+ self.$email = self.$target.find(".js_subscribe_email");
+ self.$name = self.$target.find(".js_subscribe_name");
+
+ // Thanks upstream for your @$?!! inheritance-ready code.
+ // Injecting ajax events to modify behavior of snippet.
+ if (self.$name) {
+ $(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
+ return self.on_ajax_send(event, jqXHR, ajaxOptions);
+ });
+ }
+
+ return self._super(editable_mode);
+ },
+ on_click: function() {
+ var self = this,
+ email_error = !self.$email.val().match(/.+@.+/),
+ name_error = self.$name.length && !self.$name.val(),
+ values = {
+ "list_id": self.$target.data('list-id'),
+ "email": self.$email.val(),
+ };
+
+ // Stop on error
+ if (email_error || name_error) {
+ self.$target.addClass("has-error")
+ return false;
+ }
+ return self._super();
+ },
+ on_ajax_send: function(event, jqXHR, ajaxOptions) {
+ var self = this;
+
+ // Add handlers on correct requests
+ if (ajaxOptions.url == "/website_mass_mailing/is_subscriber") {
+ jqXHR.then(function(data) {
+ return self.on_start(data);
+ });
+ } else if (ajaxOptions.url == "/website_mass_mailing/subscribe") {
+ var data = JSON.parse(ajaxOptions.data);
+ data.params.email =
+ self.$name.val() + " <" + data.params.email + ">";
+ ajaxOptions.data = JSON.stringify(data);
+ }
+ },
+ on_start: function(data) {
+ this.$name.val(data.result.name)
+ .attr(
+ "disabled",
+ Boolean(data.result.is_subscriber && data.result.name.length)
+ );
+ },
+ });
+})(jQuery);
diff --git a/website_mass_mailing_name/static/src/js/website_mass_mailing_name.tour.js b/website_mass_mailing_name/static/src/js/website_mass_mailing_name.tour.js
new file mode 100644
index 00000000..55590405
--- /dev/null
+++ b/website_mass_mailing_name/static/src/js/website_mass_mailing_name.tour.js
@@ -0,0 +1,138 @@
+/* © 2016 Jairo Llopis
+ * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
+
+"use strict";
+(function ($) {
+ openerp.Tour.register({
+ id: "mass_mailing_partner",
+ name: "Insert a newsletter snippet and subscribe",
+ path: "/",
+ mode: "test",
+ steps: [
+ {
+ title: "Edit the homepage",
+ waitFor: "button[data-action=edit]",
+ element: "button[data-action=edit]",
+ },
+ {
+ title: "Click on Insert Blocks",
+ waitFor: "button[data-action=snippet]",
+ element: "button[data-action=snippet]",
+ },
+ {
+ title: "Click on Structure",
+ waitFor: "a[href='#snippet_structure']",
+ element: "a[href='#snippet_structure']",
+ },
+ {
+ title: "Drag and drop a text snippet",
+ waitFor: ".oe_snippet:contains('Text Block'):visible",
+ snippet: ".oe_snippet:contains('Text Block')",
+ },
+ {
+ title: "Click on Insert Blocks again",
+ waitFor: "#wrap h2:contains('A Great Headline'), \
+ button[data-action=snippet]",
+ element: "button[data-action=snippet]",
+ },
+ {
+ title: "Click on Content",
+ waitFor: "a[href='#snippet_content']",
+ element: "a[href='#snippet_content']",
+ },
+ {
+ title: "Drag and drop a newsletter snippet",
+ waitFor: ".oe_snippet:contains('Newsletter'):visible",
+ snippet: ".oe_snippet:contains('Newsletter')",
+ },
+ {
+ title: "Let the default mailing list",
+ waitFor: ".modal button:contains('Continue'):visible",
+ element: ".modal button:contains('Continue'):visible",
+ },
+ {
+ title: "Save changes",
+ waitNot: ".modal:visible",
+ element: "button[data-action=save]",
+ },
+ {
+ title: "Subscribe Administrator",
+ waitFor: "button[data-action=edit]:visible, \
+ .js_subscribe_btn:visible",
+ element: ".js_subscribe_btn",
+ },
+ {
+ title: "Open user menu",
+ waitFor: ".js_subscribe .alert-success:visible",
+ element: "#top_menu span:contains('Administrator')",
+ },
+ {
+ title: "Log out",
+ waitFor: ".js_usermenu a:contains('Logout'):visible",
+ element: ".js_usermenu a:contains('Logout'):visible",
+ },
+ {
+ title: "Try to subscribe without data",
+ waitFor: "#top_menu a[href='/web/login']:visible, \
+ .js_subscribe_btn:visible",
+ element: ".js_subscribe_btn",
+ },
+ {
+ title: "Enter a name",
+ waitFor: ".js_subscribe.has-error",
+ element: ".js_subscribe_name",
+ sampleText: "Visitor",
+ },
+ {
+ title: "Try to subscribe without email",
+ element: ".js_subscribe_btn",
+ },
+ {
+ title: "Remove the name",
+ waitFor: ".js_subscribe.has-error",
+ element: ".js_subscribe_name",
+ sampleText: "",
+ },
+ {
+ title: "Enter an email",
+ element: ".js_subscribe_email",
+ sampleText: "example@example.com",
+ },
+ {
+ title: "Try to subscribe without name",
+ element: ".js_subscribe_btn",
+ },
+ {
+ title: "Enter the name again",
+ waitFor: ".js_subscribe.has-error",
+ element: ".js_subscribe_name",
+ sampleText: "Visitor",
+ },
+ {
+ title: "Enter a wrong email",
+ element: ".js_subscribe_email",
+ sampleText: "bad email",
+ },
+ {
+ title: "Try to subscribe with a bad email",
+ element: ".js_subscribe_btn",
+ },
+ {
+ title: "Enter the good email",
+ waitFor: ".js_subscribe.has-error",
+ element: ".js_subscribe_email",
+ sampleText: "example@example.com",
+ },
+ {
+ title: "Try to subscribe with good information",
+ element: ".js_subscribe_btn",
+ },
+ // Expect this test to work in v9 when uncommenting this
+ // {
+ // title: "Subscription successful",
+ // waitFor: ".js_subscribe:not(.has-error) \
+ // .alert-success:visible",
+ // },
+ ],
+ });
+})(jQuery);
diff --git a/website_mass_mailing_name/tests/__init__.py b/website_mass_mailing_name/tests/__init__.py
new file mode 100644
index 00000000..16a388f0
--- /dev/null
+++ b/website_mass_mailing_name/tests/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# © 2016 Jairo Llopis
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import test_ui
diff --git a/website_mass_mailing_name/tests/test_ui.py b/website_mass_mailing_name/tests/test_ui.py
new file mode 100644
index 00000000..ea8f36cc
--- /dev/null
+++ b/website_mass_mailing_name/tests/test_ui.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+# © 2016 Jairo Llopis
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from openerp.tests.common import HttpCase
+
+
+class UICase(HttpCase):
+ def test_ui(self):
+ """Test snippet behavior."""
+ self.phantom_js(
+ "/",
+ "openerp.Tour.run('mass_mailing_partner', 'test')",
+ "openerp.Tour.tours.mass_mailing_partner",
+ "admin")
diff --git a/website_mass_mailing_name/views/assets.xml b/website_mass_mailing_name/views/assets.xml
new file mode 100644
index 00000000..0f4c2806
--- /dev/null
+++ b/website_mass_mailing_name/views/assets.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website_mass_mailing_name/views/snippets.xml b/website_mass_mailing_name/views/snippets.xml
new file mode 100644
index 00000000..7c086744
--- /dev/null
+++ b/website_mass_mailing_name/views/snippets.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+