[IMP] website_slides: improve archive management

PURPOSE

Archiving a course should also archive its content, and unpublish it as it
should not be accessible from outside. Improve archive / publish management
between a course and its slides.

SPECIFICATIONS

Show the content of an archived course having archived slides. When slides and
course are archived its content should still be displayed. This is done using
an active test in context of field.

Propagate channel archive to content. Also unpublish archived slides.

LINKS

Continuity/IMP of task-2170708
Task-2225598

closes odoo/odoo#52233

Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
Didier
2020-08-12 10:26:55 +00:00
committed by Thibault Delavallée
parent cccba611d6
commit d761a73ad0
3 changed files with 28 additions and 1 deletions
@@ -105,7 +105,7 @@ class Channel(models.Model):
'slide.channel.tag', 'slide_channel_tag_rel', 'channel_id', 'tag_id',
string='Tags', help='Used to categorize and filter displayed channels/courses')
# slides: promote, statistics
slide_ids = fields.One2many('slide.slide', 'channel_id', string="Slides and categories")
slide_ids = fields.One2many('slide.slide', 'channel_id', string="Slides and categories", context={'active_test': False})
slide_content_ids = fields.One2many('slide.slide', string='Slides', compute="_compute_category_and_slide_ids")
slide_category_ids = fields.One2many('slide.slide', string='Categories', compute="_compute_category_and_slide_ids")
slide_last_update = fields.Date('Last Update', compute='_compute_slide_last_update', store=True)
@@ -428,6 +428,7 @@ class Channel(models.Model):
to_activate = self.filtered(lambda channel: not channel.active)
res = super(Channel, self).toggle_active()
if to_archive:
to_archive.is_published = False
to_archive.mapped('slide_ids').action_archive()
if to_activate:
to_activate.with_context(active_test=False).mapped('slide_ids').action_unarchive()
@@ -466,6 +466,14 @@ class Slide(models.Model):
category.channel_id._move_category_slides(category, False)
super(Slide, self).unlink()
def toggle_active(self):
# archiving/unarchiving a channel does it on its slides, too
to_archive = self.filtered(lambda slide: slide.active)
res = super(Slide, self).toggle_active()
if to_archive:
to_archive.filtered(lambda slide: not slide.is_category).is_published = False
return res
# ---------------------------------------------------------
# Mail/Rating
# ---------------------------------------------------------
@@ -23,6 +23,24 @@ class TestSlidesManagement(slides_common.SlidesCase):
self.assertEqual(categorized_slides[2]['total_slides'], 0)
self.assertEqual(categorized_slides[2]['category'], new_category)
@users('user_manager')
def test_archive(self):
self.assertTrue(self.channel.active)
self.assertTrue(self.channel.is_published)
for slide in self.channel.slide_ids:
self.assertTrue(slide.active, "All slide should be archived when a channel is archived")
self.assertTrue(slide.is_published, "All slide should be unpublished when a channel is archived")
self.channel.toggle_active()
self.assertFalse(self.channel.active)
self.assertFalse(self.channel.is_published)
for slide in self.channel.slide_ids:
self.assertFalse(slide.active, "All slides should be archived when a channel is archived")
if not slide.is_category:
self.assertFalse(slide.is_published, "All slides should be unpublished when a channel is archived, except categories")
else:
self.assertTrue(slide.is_published, "All slides should be unpublished when a channel is archived, except categories")
class TestSequencing(slides_common.SlidesCase):