Files
odoo_source/addons/website/views/website_views.xml
T
David Beguin 6bec0e4d29 [IMP] website : add website visitors activity tracking
This commit adds the website_visitor model that will be used
to track website visitor activity (page viewed, number of visits and
more general info about the visitor (country, lang, etc..)

This model will, in later commit, be used to send chat requests
and push notification from the operators (or backend users)
directly to the visitor.

- A website_visitor is created once the visitor is requesting
a website.page that is tracked.
- A website_visitor is considered as connected if his last tracked
website_page request is within the last 5 minutes.
- The number of visits for a website_visitor is incremented
if his last tracked website_page request was at least 8 hours ago.
- A website_visitor is only handled by the system. Users cannot
create, edit or delete a website_visitor.
- A unique website_visitor is created per website.
That means that the same real person can triggers multiple visitor
creation if visits multiple websites.
This is because, for livechat purpose on later commit, for example,
the chat request can be created on the correct livecaht channel
(linked to the correct website)
- The visitor is recognized via his cookie (visitor_id). So if the visitor
flush his cookies, a new visitor will be created the next time he will
request a tracked website_page.
- Link user's res.partner to website.visitor.
    If a website_visitor log in
    (a visitor that has visitor_id in his cookie),
    the website_visitor is linked to the res.partner.
    The website visitor name is than adapted to match the name of
    the first res.partner linked to the visitor.
    A visitor can have multiple partners as the same session
    can be used by multiple person (one PC for a team for example).

To keep a detailed history of the visitor page views,
we add a website.visitor.page model that makes the link
between visitor and website.page but that keeps the visit date.
So that we can see if a visitor went mulitple times
on the same page and when. It's usefull to see his last page views.

Task ID : 2028059
PR #34624
2019-08-19 06:33:37 +00:00

355 lines
16 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Menu items -->
<menuitem name="Website"
id="menu_website_configuration"
sequence="9"
groups="base.group_user"
web_icon="website,static/description/icon.png"/>
<record id="action_website_add_features" model="ir.actions.act_window">
<field name="name">Apps</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.module.module</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">['!', ('name', '=like', 'theme_%')]</field>
<field name="context" eval="{'search_default_category_id': ref('base.module_category_website')}"/>
</record>
<!-- website views -->
<record id="view_website_form" model="ir.ui.view">
<field name="name">website.form</field>
<field name="model">website</field>
<field name="arch" type="xml">
<form string="Website Settings">
<sheet>
<div name="domain">
<group name="domain">
<field name="name"/>
<field name="domain"/>
</group>
</div>
<div name="logo">
<group name="logo">
<field name="logo" widget="image" class="oe_avatar float-left"/>
</group>
</div>
<div name="other">
<group name="other">
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
<field name="default_lang_id" widget="selection" groups="base.group_no_one"/>
</group>
</div>
</sheet>
</form>
</field>
</record>
<record id="view_website_tree" model="ir.ui.view">
<field name="name">website.tree</field>
<field name="model">website</field>
<field name="arch" type="xml">
<tree string="Websites">
<field name="name"/>
<field name="domain"/>
<field name="country_group_ids" widget="many2many_tags"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="default_lang_id"/>
<field name="theme_id" groups="base.group_no_one"/>
</tree>
</field>
</record>
<record id="view_redirect_search" model="ir.ui.view">
<field name="name">website.redirect.search</field>
<field name="model">website.redirect</field>
<field name="arch" type="xml">
<search string="Search Redirect">
<field name="url_from"/>
<field name="url_to"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<group string="Group By">
<filter string="Redirection Type" name="group_by_type" domain="[]" context="{'group_by': 'redirect_type'}"/>
</group>
</search>
</field>
</record>
<record id="action_website_list" model="ir.actions.act_window">
<field name="name">Websites</field>
<field name="res_model">website</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_website_tree"/>
<field name="target">current</field>
</record>
<!-- website.redirect views -->
<record id="website_redirect_form_view" model="ir.ui.view">
<field name="name">website.redirect.form</field>
<field name="model">website.redirect</field>
<field name="arch" type="xml">
<form string="Website Redirect Settings">
<sheet>
<group>
<group>
<field name="redirect_type"/>
<field name="url_from"/>
<field name="url_to"/>
</group>
<group>
<field name="website_id" options="{'no_create': True}" groups="website.group_multi_website"/>
<field name="active"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="website_redirect_tree_view" model="ir.ui.view">
<field name="name">website.redirect.list</field>
<field name="model">website.redirect</field>
<field name="arch" type="xml">
<tree string="Website Redirects" editable="bottom">
<field name="redirect_type"/>
<field name="url_from"/>
<field name="url_to"/>
<field name="website_id" options="{'no_create': True}" groups="website.group_multi_website"/>
<field name="active"/>
<field name="sequence" widget="handle" />
</tree>
</field>
</record>
<record id="action_website_redirect_list" model="ir.actions.act_window">
<field name="name">Website Redirects</field>
<field name="res_model">website.redirect</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="website_redirect_tree_view"/>
<field name="target">current</field>
<field name="search_view_id" ref="view_redirect_search"/>
</record>
<!-- website.page views -->
<record id="website_pages_form_view" model="ir.ui.view">
<field name="name">website.page.form</field>
<field name="model">website.page</field>
<field name="arch" type="xml">
<form string="Website Page Settings">
<sheet>
<group>
<group>
<field name="name"/>
<field name="url"/>
<field name="view_id" context="{'display_website': True}"/>
<field name="website_id" options="{'no_create': True}" groups="website.group_multi_website"/>
<field name="is_tracked"/>
</group>
<group>
<field name="website_indexed"/>
<field name="is_published"/>
<field name="date_publish"/>
</group>
</group>
<label for="menu_ids" string="Related Menu Items"/>
<field name="menu_ids"/>
</sheet>
</form>
</field>
</record>
<record id="website_pages_tree_view" model="ir.ui.view">
<field name="name">website.page.list</field>
<field name="model">website.page</field>
<field name="arch" type="xml">
<tree string="Website Pages" default_order="name">
<field name="name"/>
<field name="url"/>
<field name="website_id" groups="website.group_multi_website"/>
<field name="website_indexed"/>
<field name="is_published" string="Page Published"/>
<field name="create_uid" invisible="1"/>
<field name="write_uid"/>
<field name="write_date"/>
<field name="is_tracked"/>
</tree>
</field>
</record>
<record id="website_pages_view_search" model="ir.ui.view">
<field name="name">website.page.view.search</field>
<field name="model">website.page</field>
<field name="arch" type="xml">
<search string="Website Pages" >
<filter string="Published" name="published" domain="[('website_published', '=', True)]"/>
<filter string="Not published" name="not_published" domain="[('website_published', '=', False)]"/>
<separator/>
<filter string="Tracked" name="tracked" domain="[('is_tracked', '=', True)]"/>
<filter string="Not tracked" name="not_tracked" domain="[('is_tracked', '=', False)]"/>
</search>
</field>
</record>
<record id="action_website_pages_list" model="ir.actions.act_window">
<field name="name">Website Pages</field>
<field name="res_model">website.page</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="website_pages_tree_view"/>
<field name="target">current</field>
</record>
<!-- website.menu views -->
<record id="website_menus_form_view" model="ir.ui.view">
<field name="name">website.menu.form</field>
<field name="model">website.menu</field>
<field name="arch" type="xml">
<form string="Website Menus Settings">
<sheet>
<group>
<group>
<field name="name"/>
<field name="url"/>
<field name="page_id"/>
</group>
<group>
<field name="new_window"/>
<field name="sequence"/>
<field name="website_id" options="{'no_create': True}" groups="website.group_multi_website"/>
</group>
<group>
<field name="parent_id" context="{'display_website': True}"/>
<field name="group_ids"/>
</group>
</group>
<label for="child_id" string="Child Menus"/>
<field name="child_id">
<tree>
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="url"/>
</tree>
</field>
</sheet>
</form>
</field>
</record>
<record id="menu_tree" model="ir.ui.view">
<field name="name">website.menu.tree</field>
<field name="model">website.menu</field>
<field name="field_parent">child_id</field>
<field name="arch" type="xml">
<tree string="Website menu" editable="bottom">
<field name="sequence" widget="handle"/>
<field name="website_id" options="{'no_create': True}" groups="website.group_multi_website"/>
<field name="name"/>
<field name="url"/>
<field name="new_window"/>
<field name="parent_id" context="{'display_website': True}"/>
<field name="group_ids" widget="many2many_tags"/>
</tree>
</field>
</record>
<record id="menu_search" model="ir.ui.view">
<field name="name">website.menu.search</field>
<field name="model">website.menu</field>
<field name="arch" type="xml">
<search string="Search Menus">
<field name="name"/>
<field name="url"/>
<field name="website_id" groups="website.group_multi_website"/>
<group string="Group By">
<filter string="name" name="group_by_name" domain="[]" context="{'group_by':'name'}"/>
<filter string="url" name="group_by_url" domain="[]" context="{'group_by':'url'}"/>
<filter string="website" name="my_websites" domain="[]" context="{'group_by':'website_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_website_menu" model="ir.actions.act_window">
<field name="name">Website Menu</field>
<field name="res_model">website.menu</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_my_websites':1}</field>
<field name="view_id" ref="menu_tree"/>
<field name="target">current</field>
</record>
<!-- ir.ui.view views -->
<record model="ir.ui.view" id="view_view_form_extend">
<field name="model">ir.ui.view</field>
<field name="inherit_id" ref="base.view_view_form"/>
<field name="arch" type="xml">
<field name="inherit_id" position="attributes">
<attribute name="context">{'display_website': True}</attribute>
</field>
<field name="name" position="after">
<field name="website_id" options="{'no_create': True}" groups="website.group_multi_website"/>
<field name="key"/>
<field name="page_ids" invisible="1" />
<field name="first_page_id" attrs="{'invisible': [('page_ids', '=', [])]}" />
</field>
<sheet position="before">
<header>
<button name="redirect_to_page_manager" string="Go to Page Manager"
type="object" attrs="{'invisible': [('page_ids', '=', [])]}"/>
</header>
</sheet>
</field>
</record>
<record id="view_view_tree_inherit_website" model="ir.ui.view">
<field name="model">ir.ui.view</field>
<field name="inherit_id" ref="base.view_view_tree"/>
<field name="arch" type="xml">
<field name="name" position="after">
<field name="website_id" groups="website.group_multi_website"/>
</field>
<field name="xml_id" position="before">
<field name="key" groups="website.group_multi_website"/>
</field>
</field>
</record>
<!-- Dashboard -->
<record id="backend_dashboard" model="ir.actions.client">
<field name="name">Analytics</field>
<field name="tag">backend_dashboard</field>
</record>
<record id="ir_actions_server_website_dashboard" model="ir.actions.server">
<field name="name">Website: Dashboard</field>
<field name="model_id" ref="website.model_website"/>
<field name="state">code</field>
<field name="code">action = model.action_dashboard_redirect()</field>
</record>
<record id="ir_actions_server_website_google_analytics" model="ir.actions.server">
<field name="name">Website: Dashboard</field>
<field name="model_id" ref="website.model_website"/>
<field name="state">code</field>
<field name="code">action = model.env.ref('website.backend_dashboard').read()[0]</field>
</record>
<menuitem id="menu_dashboard"
name="Dashboard"
sequence="1"
parent="website.menu_website_configuration"/>
<menuitem id="menu_website_dashboard" parent="menu_dashboard"
sequence="10" name="eCommerce Dashboard"
action="website.ir_actions_server_website_dashboard" active="0"/>
<menuitem id="menu_website_google_analytics" parent="menu_dashboard"
sequence="20" name="Analytics"
action="website.ir_actions_server_website_google_analytics"/>
</data>
</odoo>