19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:31:39 +01:00
parent 5df8c07b59
commit daa394e8b0
2114 changed files with 564841 additions and 299642 deletions

View file

@ -0,0 +1,80 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.http import request, route
from odoo.addons.mail.controllers.webclient import WebclientController
from odoo.addons.mail.tools.discuss import Store
class WebClient(WebclientController):
@route("/web/tests/livechat", type="http", auth="user")
def test_external_livechat(self, **kwargs):
return request.render(
"im_livechat.unit_embed_suite",
{
"server_url": request.env["ir.config_parameter"].get_base_url(),
"session_info": {"view_info": request.env["ir.ui.view"].get_view_info()},
},
)
@classmethod
def _process_request_for_internal_user(self, store: Store, name, params):
super()._process_request_for_internal_user(store, name, params)
if name == "im_livechat.channel":
store.add(request.env["im_livechat.channel"].search([]), ["are_you_inside", "name"])
if name == "/im_livechat/looking_for_help":
chats_looking_for_help = request.env["discuss.channel"].search(
[("livechat_status", "=", "need_help")], order="id ASC", limit=100
)
request.update_context(
channels=request.env.context["channels"] | chats_looking_for_help
)
if name == "/im_livechat/session/data":
channel_id = params.get("channel_id")
if not channel_id:
return
channel = request.env["discuss.channel"].search([("id", "=", channel_id)])
if not channel:
return
fields_to_store = channel._get_livechat_session_fields_to_store()
store.add(channel, fields=fields_to_store)
if name == "/im_livechat/fetch_self_expertise":
store.add(request.env.user, Store.Many("livechat_expertise_ids", ["name"]))
@classmethod
def _process_request_for_all(self, store: Store, name, params):
super()._process_request_for_all(store, name, params)
if name == "init_livechat":
partner, guest = request.env["res.partner"]._get_current_persona()
if partner:
store.add_global_values(self_partner=Store.One(partner, extra_fields="email"))
if guest:
store.add_global_values(self_guest=Store.One(guest))
# sudo - im_livechat.channel: allow access to live chat channel to
# check if operators are available.
channel = request.env["im_livechat.channel"].sudo().search([("id", "=", params)])
if not channel:
return
country_id = (
# sudo - res.country: accessing user country is allowed.
request.env["res.country"].sudo().search([("code", "=", code)]).id
if (code := request.geoip.country_code)
else None
)
url = request.httprequest.headers.get("Referer")
if (
# sudo - im_livechat.channel.rule: getting channel's rule is allowed.
matching_rule := request.env["im_livechat.channel.rule"]
.sudo()
.match_rule(params, url, country_id)
):
matching_rule = matching_rule.with_context(
lang=request.env["chatbot.script"]._get_chatbot_language(),
)
store.add_global_values(livechat_rule=Store.One(matching_rule))
store.add_global_values(
livechat_available=matching_rule.action != "hide_button"
and bool(matching_rule._is_bot_configured() or channel.available_operator_ids),
can_download_transcript=bool(
request.env.ref("im_livechat.action_report_livechat_conversation", False),
),
)