def move_sl_block_into_slot(old_page, new_page, block, slot_name): page_configuration = IPageConfiguration(new_page) page_state = page_configuration.load() # initiate layout if it is in its initial state if slot_name == 'default' and page_state == page_configuration._default_page_config(): # setup different layouts if ISimplelayoutTwoColumnView.providedBy(old_page): # two columns page_state[slot_name] = [ {'cols': [ {'blocks': []}, {'blocks': []} ]} ] elif ISimplelayoutTwoColumnOneOnTopView.providedBy(old_page): # two columns and a top row page_state[slot_name] = [ {'cols': [{'blocks': []}]}, {'cols': [ {'blocks': []}, {'blocks': []} ]} ] if slot_name not in page_state: # normal single column layout page_state[slot_name] = [{'cols': [{'blocks': []}]}] if slot_name == 'default': slot = page_state['default'] # two column layout if ISimplelayoutTwoColumnView.providedBy(old_page): if ISlotA.providedBy(block): # left column slot[0]['cols'][0]['blocks'].append({'uid': IUUID(block)}) elif ISlotB.providedBy(block): # right column slot[0]['cols'][1]['blocks'].append({'uid': IUUID(block)}) else: raise ValueError('Block has unused slot in layout.') # two columns and a top row layout elif ISimplelayoutTwoColumnOneOnTopView.providedBy(old_page): if ISlotA.providedBy(block): # top row slot[0]['cols'][0]['blocks'].append({'uid': IUUID(block)}) elif ISlotB.providedBy(block): # bottom row, left column slot[1]['cols'][0]['blocks'].append({'uid': IUUID(block)}) elif ISlotC.providedBy(block): # bottom row, right column slot[1]['cols'][1]['blocks'].append({'uid': IUUID(block)}) else: raise ValueError('Block has unused slot in layout.') else: slot[0]['cols'][0]['blocks'].append({'uid': IUUID(block)}) else: page_state[slot_name][0]['cols'][0]['blocks'].append({ 'uid': IUUID(block)}) page_configuration.store(page_state)
def test_page_copy(self): noLongerProvides(self.paragraph, ISlotA) alsoProvides(self.paragraph, ISlotB) self.assertFalse(ISlotA.providedBy(self.paragraph)) self.assertTrue(ISlotB.providedBy(self.paragraph)) self.assertEqual(aq_parent(aq_inner(self.page)).getId(), 'testfolder') copied = self.folder.manage_copyObjects([self.page.getId()]) self.subfolder.manage_pasteObjects(copied) page = self.subfolder.get('page1') paragraph = page.get('p1') self.assertEqual(aq_parent(aq_inner(page)).getId(), 'subfolder') # The paragraph should not be changed, since we move the page. self.assertFalse(ISlotA.providedBy(paragraph)) self.assertTrue(ISlotB.providedBy(paragraph))
def test_block_moving(self): alsoProvides( self.paragraph, [ISimpleLayoutBlock, ISlotB, ISlotD]) alsoProvides(self.page2, ISimplelayoutView) notify(ObjectMovedEvent( self.paragraph, self.page, 'p1', self.page2, 'p2')) # old slot interfaces are no longer provided self.assertFalse(ISlotB.providedBy(self.paragraph)) self.assertFalse(ISlotD.providedBy(self.paragraph)) # current view config interfaces should be provided self.assertTrue(ISlotA.providedBy(self.paragraph)) self.assertTrue(IOneColumn.providedBy(self.paragraph))