From e4aa8ec6d18a47e46a6b4c4cca70156ce7916d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Theys?= Date: Fri, 21 Sep 2018 12:25:22 +0200 Subject: [PATCH] [IMP] website,website_livechat,website_slides: add "new content" buttons Those allow the user to quickly create a new channel or new slides. PR: #27110 task-1885419 --- .../views/website_navbar_templates.xml | 12 ++++ .../static/src/js/website_livechat.editor.js | 52 +++++++++++++++ .../views/website_livechat.xml | 17 +++++ addons/website_slides/models/slides.py | 5 ++ .../static/src/js/slides_upload.js | 6 ++ .../static/src/js/website_slides.editor.js | 66 +++++++++++++++++++ .../static/src/xml/website_slides.xml | 15 +++++ .../website_slides/views/website_slides.xml | 16 +++++ 8 files changed, 189 insertions(+) create mode 100644 addons/website_livechat/static/src/js/website_livechat.editor.js create mode 100644 addons/website_slides/static/src/js/website_slides.editor.js diff --git a/addons/website/views/website_navbar_templates.xml b/addons/website/views/website_navbar_templates.xml index c011c2f9863..dc7d89616c6 100644 --- a/addons/website/views/website_navbar_templates.xml +++ b/addons/website/views/website_navbar_templates.xml @@ -147,6 +147,18 @@

New Product

+
+ + +

New Slide

+
+
+ diff --git a/addons/website_livechat/static/src/js/website_livechat.editor.js b/addons/website_livechat/static/src/js/website_livechat.editor.js new file mode 100644 index 00000000000..32ad9f8d268 --- /dev/null +++ b/addons/website_livechat/static/src/js/website_livechat.editor.js @@ -0,0 +1,52 @@ +odoo.define('website_livechat.editor', function (require) { +'use strict'; + +var core = require('web.core'); +var wUtils = require('website.utils'); +var WebsiteNewMenu = require('website.newMenu'); +var weContext = require('web_editor.context'); + +var _t = core._t; + +WebsiteNewMenu.include({ + actions: _.extend({}, WebsiteNewMenu.prototype.actions || {}, { + new_channel: '_createNewChannel', + }), + + //-------------------------------------------------------------------------- + // Actions + //-------------------------------------------------------------------------- + + /** + * Asks the user information about a new channel to create, then creates it + * and redirects the user to this new channel. + * + * @private + * @returns {Deferred} Unresolved if there is a redirection + */ + _createNewChannel: function () { + var self = this; + return wUtils.prompt({ + window_title: _t("New Channel"), + input: _t("Name"), + }).then(function (name) { + if (!name) { + return; + } + return self._rpc({ + model: 'im_livechat.channel', + method: 'create_and_get_website_url', + context: weContext.get(), + args: [[]], + kwargs: { + name: name, + }, + }).then(function (url) { + window.location.href = url; + return $.Deferred(); + }); + }); + }, +}); + +}); diff --git a/addons/website_livechat/views/website_livechat.xml b/addons/website_livechat/views/website_livechat.xml index 03341c2a857..643679b4c71 100644 --- a/addons/website_livechat/views/website_livechat.xml +++ b/addons/website_livechat/views/website_livechat.xml @@ -37,6 +37,13 @@ + + + + + + diff --git a/addons/website_slides/models/slides.py b/addons/website_slides/models/slides.py index 359791ca454..186973cec6d 100644 --- a/addons/website_slides/models/slides.py +++ b/addons/website_slides/models/slides.py @@ -182,6 +182,11 @@ class Channel(models.Model): subtype = 'mail.mt_note' return super(Channel, self).message_post(parent_id=parent_id, subtype=subtype, **kwargs) + def list_all(self): + return { + 'channels': [{'id': channel.id, 'name': channel.name, 'website_url': channel.website_url} for channel in self.search([])] + } + class Category(models.Model): """ Channel contain various categories to manage its slides """ diff --git a/addons/website_slides/static/src/js/slides_upload.js b/addons/website_slides/static/src/js/slides_upload.js index 64202bba7bb..f16beb5f079 100644 --- a/addons/website_slides/static/src/js/slides_upload.js +++ b/addons/website_slides/static/src/js/slides_upload.js @@ -378,4 +378,10 @@ $('.oe_slide_js_upload').on('click', function () { var channel_id = $(this).attr('channel_id'); slides.page_widgets['upload_dialog'] = new SlideDialog(this, channel_id).appendTo(document.body); }); + +// automatically open the upload dialog if requested from query string +if ($.deparam.querystring().enable_slide_upload !== undefined) { + $('.oe_slide_js_upload').click(); +} + }); diff --git a/addons/website_slides/static/src/js/website_slides.editor.js b/addons/website_slides/static/src/js/website_slides.editor.js new file mode 100644 index 00000000000..2befee6c236 --- /dev/null +++ b/addons/website_slides/static/src/js/website_slides.editor.js @@ -0,0 +1,66 @@ +odoo.define('website_slides.editor', function (require) { +"use strict"; + +var core = require('web.core'); +var Dialog = require('web.Dialog'); +var QWeb = core.qweb; +var WebsiteNewMenu = require('website.newMenu'); +var weContext = require('web_editor.context'); + +var _t = core._t; + +WebsiteNewMenu.include({ + actions: _.extend({}, WebsiteNewMenu.prototype.actions || {}, { + new_slide: '_createNewSlide', + }), + xmlDependencies: WebsiteNewMenu.prototype.xmlDependencies.concat( + ['/website_slides/static/src/xml/website_slides.xml'] + ), + + //-------------------------------------------------------------------------- + // Actions + //-------------------------------------------------------------------------- + + /** + * Asks the user information about in which channel to create a new slide, + * and redirects the user to this channel with the "new slide" popup open. + * + * @private + * @returns {Deferred} Unresolved if there is a redirection + */ + _createNewSlide: function () { + var self = this; + return this._rpc({ + model: 'slide.channel', + method: 'list_all', + context: weContext.get(), + args: [[]], + }).then(function (data) { + var def = $.Deferred(); + new Dialog(self, { + title: _t("New slide"), + subtitle: _t("On which channel do you want to add a slide?"), + size: 'medium', + $content: QWeb.render('website.slide.create', data), + buttons: [{ + text: _t("Select"), + classes: 'btn-primary', + click: function () { + var channel_url = this.$("option:selected").val(); + if (channel_url) { + window.location.href = channel_url + '?enable_slide_upload'; + } else { + def.reject(); + } + } + }, { + text: _t("Cancel"), close: true + },] + }).open() + .on('closed', def.resolve.bind(def)); + + return def; + }); + }, +}); +}); diff --git a/addons/website_slides/static/src/xml/website_slides.xml b/addons/website_slides/static/src/xml/website_slides.xml index 5aa9cf49d13..d2e1f43c15b 100644 --- a/addons/website_slides/static/src/xml/website_slides.xml +++ b/addons/website_slides/static/src/xml/website_slides.xml @@ -75,4 +75,19 @@ + +
+
+ +
+ +
+
+
+
+ diff --git a/addons/website_slides/views/website_slides.xml b/addons/website_slides/views/website_slides.xml index d353a696606..d11a897b487 100644 --- a/addons/website_slides/views/website_slides.xml +++ b/addons/website_slides/views/website_slides.xml @@ -12,6 +12,12 @@ +