From f1deb8df56f1042670f7f0732bc2db6616f541fe Mon Sep 17 00:00:00 2001 From: andrea Date: Mon, 27 Jan 2025 09:27:09 +0100 Subject: [PATCH] [MIG] impersonate_login: migration to V15 --- impersonate_login/README.rst | 12 ++-- impersonate_login/__manifest__.py | 11 ++-- impersonate_login/models/impersonate_log.py | 1 - impersonate_login/models/res_users.py | 10 ++- .../static/description/index.html | 9 +-- impersonate_login/static/src/css/navbar.scss | 23 ------- .../static/src/js/abstract_web_client.js | 18 ----- .../static/src/js/user_menu.esm.js | 45 +++++++++++++ impersonate_login/static/src/js/user_menu.js | 66 ------------------- .../static/src/xml/user_menu.xml | 22 ------- impersonate_login/views/assets.xml | 24 ------- .../odoo/addons/impersonate_login | 1 + setup/impersonate_login/setup.py | 6 ++ 13 files changed, 76 insertions(+), 172 deletions(-) delete mode 100644 impersonate_login/static/src/css/navbar.scss delete mode 100644 impersonate_login/static/src/js/abstract_web_client.js create mode 100644 impersonate_login/static/src/js/user_menu.esm.js delete mode 100644 impersonate_login/static/src/js/user_menu.js delete mode 100644 impersonate_login/static/src/xml/user_menu.xml delete mode 100644 impersonate_login/views/assets.xml create mode 120000 setup/impersonate_login/odoo/addons/impersonate_login create mode 100644 setup/impersonate_login/setup.py diff --git a/impersonate_login/README.rst b/impersonate_login/README.rst index d49e1ee999..ceef070224 100644 --- a/impersonate_login/README.rst +++ b/impersonate_login/README.rst @@ -7,7 +7,7 @@ Impersonate Login !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5b81c79d20d3679798c2f35fe1c7dc4cbe88abe7567ee2f21f05f63ff34c0bd2 + !! source digest: sha256:501ad96751e358edef9d921d3cd01157ee6f2d22e37e4b576d135d77b3616f00 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -17,13 +17,13 @@ Impersonate Login :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--auth-lightgray.png?logo=github - :target: https://github.com/OCA/server-auth/tree/14.0/impersonate_login + :target: https://github.com/OCA/server-auth/tree/15.0/impersonate_login :alt: OCA/server-auth .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/server-auth-14-0/server-auth-14-0-impersonate_login + :target: https://translation.odoo-community.org/projects/server-auth-15-0/server-auth-15-0-impersonate_login :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/server-auth&target_branch=14.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/server-auth&target_branch=15.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -66,7 +66,7 @@ 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 to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -108,6 +108,6 @@ Current `maintainer `__: |maintainer-Kev-Roche| -This module is part of the `OCA/server-auth `_ project on GitHub. +This module is part of the `OCA/server-auth `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/impersonate_login/__manifest__.py b/impersonate_login/__manifest__.py index 4426594969..1ed60aed83 100644 --- a/impersonate_login/__manifest__.py +++ b/impersonate_login/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Impersonate Login", "summary": "tools", - "version": "14.0.1.0.1", + "version": "15.0.1.0.0", "category": "Tools", "website": "https://github.com/OCA/server-auth", "author": "Akretion, Odoo Community Association (OCA)", @@ -18,15 +18,16 @@ "mail", ], "data": [ - "views/assets.xml", "views/res_users.xml", "views/impersonate_log.xml", "views/res_config_settings.xml", "security/group.xml", "security/ir.model.access.csv", ], - "qweb": [ - "static/src/xml/user_menu.xml", - ], + "assets": { + "web.assets_backend": [ + "impersonate_login/static/src/js/user_menu.esm.js", + ], + }, "pre_init_hook": "pre_init_hook", } diff --git a/impersonate_login/models/impersonate_log.py b/impersonate_login/models/impersonate_log.py index 349c46eb69..83089611a6 100644 --- a/impersonate_login/models/impersonate_log.py +++ b/impersonate_login/models/impersonate_log.py @@ -12,7 +12,6 @@ class ImpersonateLog(models.Model): user_id = fields.Many2one( comodel_name="res.users", - string="User", ) impersonated_partner_id = fields.Many2one( comodel_name="res.partner", diff --git a/impersonate_login/models/res_users.py b/impersonate_login/models/res_users.py index 22a2939ee5..071da91115 100644 --- a/impersonate_login/models/res_users.py +++ b/impersonate_login/models/res_users.py @@ -75,10 +75,12 @@ def impersonate_login(self): request.session, request.env ) - # reload the client; + # reload the client; open the first available root menu + menu = self.env["ir.ui.menu"].search([("parent_id", "=", False)])[:1] return { "type": "ir.actions.client", "tag": "reload", + "params": {"menu_id": menu.id}, } @api.model @@ -89,7 +91,7 @@ def action_impersonate_login(self): action = self.env["ir.actions.act_window"]._for_xml_id( "base.action_res_users" ) - action["views"] = [[self.env.ref("base.view_users_tree").id, "tree"]] + action["views"] = [[self.env.ref("base.view_users_tree").id, "list"]] action["domain"] = [ ("id", "!=", self.env.user.id), ("share", "=", False), @@ -122,8 +124,10 @@ def back_to_origin_login(self): f"Logout as {self._get_partner_name(self._uid)}" ) - # reload the client; + # reload the client; open the first available root menu + menu = self.env["ir.ui.menu"].search([("parent_id", "=", False)])[:1] return { "type": "ir.actions.client", "tag": "reload", + "params": {"menu_id": menu.id}, } diff --git a/impersonate_login/static/description/index.html b/impersonate_login/static/description/index.html index 743b825c14..59d0ad8b0b 100644 --- a/impersonate_login/static/description/index.html +++ b/impersonate_login/static/description/index.html @@ -1,3 +1,4 @@ + @@ -367,9 +368,9 @@

Impersonate Login

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:5b81c79d20d3679798c2f35fe1c7dc4cbe88abe7567ee2f21f05f63ff34c0bd2 +!! source digest: sha256:501ad96751e358edef9d921d3cd01157ee6f2d22e37e4b576d135d77b3616f00 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/server-auth Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/server-auth Translate me on Weblate Try me on Runboat

This module allows one user (for example, a member of the support team) to log in as another user. The impersonation session can be exited by clicking on the button “Back to Original User”.

@@ -415,7 +416,7 @@

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 to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -447,7 +448,7 @@

Maintainers

promote its widespread use.

Current maintainer:

Kev-Roche

-

This module is part of the OCA/server-auth project on GitHub.

+

This module is part of the OCA/server-auth project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/impersonate_login/static/src/css/navbar.scss b/impersonate_login/static/src/css/navbar.scss deleted file mode 100644 index 556a38a5ee..0000000000 --- a/impersonate_login/static/src/css/navbar.scss +++ /dev/null @@ -1,23 +0,0 @@ -body.o_is_impersonated .o_menu_systray { - background: repeating-linear-gradient( - 135deg, - #32d804, - #32d804 10px, - #373435 10px, - #373435 20px - ); - border-bottom-left-radius: 20px; - - > li { - > a, - > label { - &:hover { - background-color: fade_out($o-navbar-inverse-link-hover-bg, 0.5); - } - } - } - - .show .dropdown-toggle { - background-color: fade_out($o-navbar-inverse-link-hover-bg, 0.5); - } -} diff --git a/impersonate_login/static/src/js/abstract_web_client.js b/impersonate_login/static/src/js/abstract_web_client.js deleted file mode 100644 index 1c3ef6d444..0000000000 --- a/impersonate_login/static/src/js/abstract_web_client.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2024 Akretion (https://www.akretion.com). -// @author Kévin Roche -// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -odoo.define("impersonate_login.AbstractWebClient", function (require) { - "use strict"; - - var AbstractWebClient = require("web.AbstractWebClient"); - var session = require("web.session"); - - AbstractWebClient.include({ - _onWebClientStarted: function () { - this._super.apply(this, arguments); - if (session.impersonate_from_uid) { - this.$el.addClass("o_is_impersonated"); - } - }, - }); -}); diff --git a/impersonate_login/static/src/js/user_menu.esm.js b/impersonate_login/static/src/js/user_menu.esm.js new file mode 100644 index 0000000000..b467c47f17 --- /dev/null +++ b/impersonate_login/static/src/js/user_menu.esm.js @@ -0,0 +1,45 @@ +/** @odoo-module **/ +// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import {_t} from "@web/core/l10n/translation"; +import {registry} from "@web/core/registry"; +import {session} from "@web/session"; + +export function impersonateLoginItem(env) { + return { + type: "item", + id: "impersonate_login", + description: _t("Switch Login"), + hide: session.impersonate_from_uid || !session.is_impersonate_user, + callback: async function () { + const actionImpersonateLogin = await env.services.orm.call( + "res.users", + "action_impersonate_login" + ); + env.services.action.doAction(actionImpersonateLogin); + }, + sequence: 55, + }; +} + +export function impersonateBackLoginItem(env) { + return { + type: "item", + id: "impersonate_back", + description: _t("Back to Original User"), + hide: !session.impersonate_from_uid, + callback: async function () { + const actionBackToOriginLogin = await env.services.orm.call( + "res.users", + "back_to_origin_login" + ); + env.services.action.doAction(actionBackToOriginLogin); + }, + sequence: 55, + }; +} + +registry + .category("user_menuitems") + .add("impersonate_login", impersonateLoginItem, {force: true}) + .add("impersonate_back", impersonateBackLoginItem, {force: true}); diff --git a/impersonate_login/static/src/js/user_menu.js b/impersonate_login/static/src/js/user_menu.js deleted file mode 100644 index ad3672ac1b..0000000000 --- a/impersonate_login/static/src/js/user_menu.js +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2024 Akretion (https://www.akretion.com). -// @author Kévin Roche -// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - -odoo.define("impersonate_login.UserMenu", function (require) { - "use strict"; - - var UserMenu = require("web.UserMenu"); - var core = require("web.core"); - var session = require("web.session"); - var _t = core._t; - - UserMenu.include({ - start: function () { - this.toggleImpersonationLinks(); - return this._super.apply(this, arguments); - }, - - _onMenuImpersonate: function () { - var self = this; - this._rpc({ - model: "ir.model.data", - method: "xmlid_to_res_model_res_id", - args: ["impersonate_login.impersonate_res_users_tree"], - }).then(function (data) { - self.do_action({ - type: "ir.actions.act_window", - name: _t("Users"), - res_model: "res.users", - target: "new", - view_mode: "list", - views: [[data[1], "list"]], - domain: [["share", "=", false]], - }); - }); - }, - - _onMenuOrigin_login: function () { - var self = this; - return self - ._rpc({ - model: "res.users", - method: "back_to_origin_login", - args: [], - }) - .then(function () { - location.reload(true); - }); - }, - - toggleImpersonationLinks: function () { - var returnToLogin = this.$('[data-menu="origin_login"]'); - var impersonateLogin = this.$('[data-menu="impersonate"]'); - if (session.impersonate_from_uid) { - returnToLogin.removeClass("d-none"); - impersonateLogin.addClass("d-none"); - } else if (session.is_impersonate_user) { - returnToLogin.addClass("d-none"); - impersonateLogin.removeClass("d-none"); - } else { - returnToLogin.addClass("d-none"); - impersonateLogin.addClass("d-none"); - } - }, - }); -}); diff --git a/impersonate_login/static/src/xml/user_menu.xml b/impersonate_login/static/src/xml/user_menu.xml deleted file mode 100644 index bce12c050c..0000000000 --- a/impersonate_login/static/src/xml/user_menu.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - 🔙 To my Login - 🔄 Switch Login - - - diff --git a/impersonate_login/views/assets.xml b/impersonate_login/views/assets.xml deleted file mode 100644 index cf15b77905..0000000000 --- a/impersonate_login/views/assets.xml +++ /dev/null @@ -1,24 +0,0 @@ - - -