Beispiel #1
0
    def __page_save(self):
        # Retrieve/check data.
        page_str = self.api.get_data().get_str('page')
        new      = self.api.post_data().get_bool('create')
        name     = self.api.post_data().get_str('name',   '')
        layout   = self.api.post_data().get_str('layout', '')
        if name == '':
            self.__errors.append(_('Page name is missing'))
        if layout == '':
            self.__errors.append(_('Layout is missing'))
        if len(self.__errors) > 0:
            return False

        # Fetch the page from the database, or instanciate a new one.
        if new:
            page   = Page(name)
            parent = page_str and self.api.get_requested_page() or None
        else:
            page = self.api.get_requested_page()
        assert page is not None

        # Check whether the caller has permission to edit this page.
        if not self.api.current_user_.may('edit'):
            err = _('Insufficient rights to change this page.')
            self.__errors.append(err)
            return False

        # Parse the layout to replace the extension names by handles.
        parser = LayoutParser(layout)
        parser.set_data_handler(self._layout_data_handler)
        parser.parse()
        if len(self.__errors) > 0:
            return False

        # Save the page.
        page.set_name(name)
        page.set_attribute('layout', parser.layout)
        if new and not self.page_db.add(parent, page):
            self.__errors.append(_('Error while creating the page.'))
        elif not self.page_db.save(page):
            self.__errors.append(_('Error while saving the page.'))
            return False

        self.__errors.append(_('Page saved.'))
        self.api.set_requested_page(page)
        return True