summaryrefslogtreecommitdiff
path: root/addons/website_slides_forum/models
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_slides_forum/models
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_slides_forum/models')
-rw-r--r--addons/website_slides_forum/models/__init__.py4
-rw-r--r--addons/website_slides_forum/models/forum.py20
-rw-r--r--addons/website_slides_forum/models/slide_channel.py46
3 files changed, 70 insertions, 0 deletions
diff --git a/addons/website_slides_forum/models/__init__.py b/addons/website_slides_forum/models/__init__.py
new file mode 100644
index 00000000..68c2a566
--- /dev/null
+++ b/addons/website_slides_forum/models/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import forum
+from . import slide_channel
diff --git a/addons/website_slides_forum/models/forum.py b/addons/website_slides_forum/models/forum.py
new file mode 100644
index 00000000..30a0c4d9
--- /dev/null
+++ b/addons/website_slides_forum/models/forum.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class Forum(models.Model):
+ _inherit = 'forum.forum'
+
+ slide_channel_ids = fields.One2many('slide.channel', 'forum_id', 'Courses', help="Edit the course linked to this forum on the course form.")
+ slide_channel_id = fields.Many2one('slide.channel', 'Course', compute='_compute_slide_channel_id', store=True)
+ visibility = fields.Selection(related='slide_channel_id.visibility', help="Forum linked to a Course, the visibility is the one applied on the course.")
+
+ @api.depends('slide_channel_ids')
+ def _compute_slide_channel_id(self):
+ for forum in self:
+ if forum.slide_channel_ids:
+ forum.slide_channel_id = forum.slide_channel_ids[0]
+ else:
+ forum.slide_channel_id = None
diff --git a/addons/website_slides_forum/models/slide_channel.py b/addons/website_slides_forum/models/slide_channel.py
new file mode 100644
index 00000000..c45dc14c
--- /dev/null
+++ b/addons/website_slides_forum/models/slide_channel.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class Channel(models.Model):
+ _inherit = 'slide.channel'
+
+ forum_id = fields.Many2one('forum.forum', 'Course Forum')
+ forum_total_posts = fields.Integer('Number of active forum posts', related="forum_id.total_posts")
+
+ _sql_constraints = [
+ ('forum_uniq', 'unique (forum_id)', "Only one course per forum!"),
+ ]
+
+ def action_redirect_to_forum(self):
+ self.ensure_one()
+ action = self.env["ir.actions.actions"]._for_xml_id("website_forum.action_forum_post")
+ action['view_mode'] = 'tree'
+ action['context'] = {
+ 'create': False
+ }
+ action['domain'] = [('forum_id', '=', self.forum_id.id)]
+
+ return action
+
+ @api.model
+ def create(self, vals):
+ channel = super(Channel, self.with_context(mail_create_nosubscribe=True)).create(vals)
+ if channel.forum_id:
+ channel.forum_id.privacy = False
+ return channel
+
+ def write(self, vals):
+ old_forum = self.forum_id
+
+ res = super(Channel, self).write(vals)
+ if 'forum_id' in vals:
+ self.forum_id.privacy = False
+ if old_forum != self.forum_id:
+ old_forum.write({
+ 'privacy': 'private',
+ 'authorized_group_id': self.env.ref('website_slides.group_website_slides_officer').id,
+ })
+ return res