Skip to content
Snippets Groups Projects
Commit 2e707935 authored by Jérémy Hennecart's avatar Jérémy Hennecart Committed by Thibault Delavallée
Browse files

[REF] website_slides_forum: improve integration into eLeaning application


PURPOSE

eLearning should have its own application in manager. Indeed this is becoming
a big application and having it embedded inside Website application is not
enough anymore. It should also hold updated and easy-to-use menus,
navigation, actions and views in backend.

SPECIFICATIONS

Add menu after Courses

  * Forum
    * Forums: add columns to list view: Posts (questions count), Views
      (sum of views of each post), Answers (sum of child_count on each post),
      Favorites (sum of favourite_count on each post)
    * Posts: add columns to list view: Views / Answers / Favourites

Add menu entry inside Reporting
  * Forum: graph view on forum.post model
      Area chart: # Posts created by months, color=forum

LINKS

Task 1978729
PR #35061

Co-Authored-By: default avatarThibault Delavallée <tde@odoo.com>
Co-Authored-By: default avatarJérémy Hennecart <jeh@odoo.com>
parent 313a7d9e
No related branches found
No related tags found
No related merge requests found
......@@ -80,6 +80,12 @@ class Forum(models.Model):
help='After posting the user will be proposed to share its question '
'or answer on social networks, enabling social network propagation '
'of the forum content.')
# posts statistics
post_ids = fields.One2many('forum.post', 'forum_id', string='Posts')
total_posts = fields.Integer('Post Count', compute='_compute_slides_statistics')
total_views = fields.Integer('Views Count', compute='_compute_slides_statistics')
total_answers = fields.Integer('Answers Count', compute='_compute_slides_statistics')
total_favorites = fields.Integer('Favorites Count', compute='_compute_slides_statistics')
count_posts_waiting_validation = fields.Integer(string="Number of posts waiting for validation", compute='_compute_count_posts_waiting_validation')
count_flagged_posts = fields.Integer(string='Number of flagged posts', compute='_compute_count_flagged_posts')
# karma generation
......@@ -120,6 +126,24 @@ class Forum(models.Model):
karma_post = fields.Integer(string='Ask questions without validation', default=100)
karma_moderate = fields.Integer(string='Moderate posts', default=1000)
@api.depends('post_ids.state', 'post_ids.views', 'post_ids.child_count', 'post_ids.favourite_count')
def _compute_slides_statistics(self):
result = dict((cid, dict(total_posts=0, total_views=0, total_answers=0, total_favorites=0)) for cid in self.ids)
read_group_res = self.env['forum.post'].read_group(
[('forum_id', 'in', self.ids), ('state', 'in', ('active', 'close'))],
['forum_id', 'views', 'child_count', 'favourite_count'],
groupby=['forum_id'],
lazy=False)
for res_group in read_group_res:
cid = res_group['forum_id'][0]
result[cid]['total_posts'] += res_group.get('__count', 0)
result[cid]['total_views'] += res_group.get('views', 0)
result[cid]['total_answers'] += res_group.get('child_count', 0)
result[cid]['total_favorites'] += res_group.get('favourite_count', 0)
for record in self:
record.update(result[record.id])
def _compute_count_posts_waiting_validation(self):
for forum in self:
domain = [('forum_id', '=', forum.id), ('state', '=', 'pending')]
......
......@@ -17,6 +17,10 @@
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="website_id" groups="website.group_multi_website"/>
<field name="total_posts"/>
<field name="total_views"/>
<field name="total_answers"/>
<field name="total_favorites"/>
<field name="active" invisible="1"/>
</tree>
</field>
......@@ -43,7 +47,7 @@
</group>
<notebook>
<page string="Options">
<group string="Order">
<group string="Order" name="group_order">
<field name="default_order"/>
<label for="relevancy_post_vote" string="Relevance Computation" groups="base.group_no_one" attrs="{'invisible':[('default_order','!=','relevancy desc')]}"/>
<div groups="base.group_no_one" class="o_row" attrs="{'invisible':[('default_order','!=','relevancy desc')]}">
......@@ -136,6 +140,9 @@
<field name="name"/>
<field name="active" invisible="1"/>
<field name="forum_id"/>
<field name="views"/>
<field name="child_count"/>
<field name="favourite_count"/>
<field name="website_id" groups="website.group_multi_website"/>
</tree>
</field>
......
......@@ -12,9 +12,11 @@
'website_forum'
],
'data': [
'views/forum_views.xml',
'views/slide_channel_views.xml',
'views/website_slides_templates.xml',
'views/website_slides_menu_views.xml',
'views/assets.xml',
'views/website_slides_templates.xml',
'views/website_slides_forum_templates.xml'
],
'demo': [
......
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="forum_forum_view_form" model="ir.ui.view">
<field name="name">forum.forum.view.form.inherit.slides</field>
<field name="model">forum.forum</field>
<field name="inherit_id" ref="website_forum.view_forum_forum_form"/>
<field name="arch" type="xml">
<xpath expr="//group[@name='group_order']" position="after">
<group string="eLearning" name="group_slides">
<field name="slide_channel_id" readonly="True"/>
</group>
</xpath>
</field>
</record>
<record id="forum_forum_action_channel" model="ir.actions.act_window">
<field name="name">eLearning Forums</field>
<field name="res_model">forum.forum</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('slide_channel_ids', '!=', 'False')]</field>
</record>
<record id="forum_post_action_channel" model="ir.actions.act_window">
<field name="name">eLearning Forum Posts</field>
<field name="res_model">forum.post</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('forum_id.slide_channel_ids', '!=', 'False')]</field>
<field name="context">{'search_default_questions': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new forum post
</p>
</field>
</record>
<record id="forum_post_view_graph_slides" model="ir.ui.view">
<field name="name">forum.post.view.graph.slides</field>
<field name="model">forum.post</field>
<field name="arch" type="xml">
<graph string="eLearning Forum Posts">
<field name="create_date" interval="month" type="col"/>
<field name="forum_id" type="row"/>
</graph>
</field>
</record>
<record id="forum_post_action_report" model="ir.actions.act_window">
<field name="name">eLearning Forum Posts</field>
<field name="res_model">forum.post</field>
<field name="view_mode">graph</field>
<field name="view_id" ref="forum_post_view_graph_slides"/>
<field name="domain">[('forum_id.slide_channel_ids', '!=', 'False')]</field>
</record>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<menuitem name="Forum"
id="website_slides_menu_forum"
parent="website_slides.website_slides_menu_root"
sequence="2"/>
<menuitem name="Forums"
id="website_slides_menu_forum_forum"
parent="website_slides_menu_forum"
sequence="1"
action="forum_forum_action_channel"/>
<menuitem name="Posts"
id="website_slides_menu_forum_post"
parent="website_slides_menu_forum"
sequence="2"
action="forum_post_action_channel"/>
<menuitem name="Forum"
id="website_slides_menu_report_forum"
parent="website_slides.website_slides_menu_report"
sequence="8"
action="forum_post_action_report"/>
</odoo>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment