mirror of
https://github.com/bringout/oca-ocb-mail.git
synced 2026-04-21 20:22:04 +02:00
19.0 vanilla
This commit is contained in:
parent
5df8c07b59
commit
daa394e8b0
2114 changed files with 564841 additions and 299642 deletions
|
|
@ -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),
|
||||
),
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue