Ejemplo n.º 1
0
 def chapters(self):
     """ get the chapters """
     additionals = _get_storage_folder(self.context)
     if additionals is None:
         return []
     chapterlinks = additionals.objectValues('ATLink')
     return chapterlinks
Ejemplo n.º 2
0
 def chapters(self):
     """ get the chapters """
     additionals = _get_storage_folder(self.context)
     if additionals is None:
         return []
     chapterlinks = additionals.objectValues('ATLink')
     return chapterlinks
Ejemplo n.º 3
0
 def editChapter(self, chapter, metadata):
     """ add/edit a link object with the given chapter name and modify
     its metadata
     """
     additionals = _get_storage_folder(self.context)
     C = getattr(additionals, chapter, None)
     if C is not None:
         return setMetadataMap(C, metadata)
Ejemplo n.º 4
0
 def editChapter(self, chapter, metadata):
     """ add/edit a link object with the given chapter name and modify
     its metadata
     """
     additionals = _get_storage_folder(self.context)
     C = getattr(additionals, chapter, None)
     if C is not None:
         return setMetadataMap(C, metadata)
Ejemplo n.º 5
0
    def _get_carousel_images(self, pub):
        pub_folder          = _get_storage_folder(pub)
        pub_folder_contents = pub_folder.objectIds()

        if "carousel_1.gif" not in pub_folder_contents:
            self._generate_carousel_images(pub, pub_folder)

        images = [
            i for i in pub_folder_contents
            if i.startswith("carousel_")]
        return images
Ejemplo n.º 6
0
    def _generate_carousel_images(self, pub, pub_folder):
        pub_folder = _get_storage_folder(pub)
        tmp_pdf_in = tmp_dir = None
        status     = 1

        try:
            if HAVE_LINGUAPLONE:
                mainpub = pub.getCanonical()
            else:
                mainpub = pub

            data = str(mainpub.getFile())
            if not data:
                return 0

            fd, tmp_pdf_in = tempfile.mkstemp(suffix='.pdf')
            os.close(fd)
            tmp_dir = tempfile.mkdtemp()

            fhout = open(tmp_pdf_in, "w")
            fhout.write(data)
            fhout.seek(0)

            # There isn't a nice way to only split the first 3 pages
            split_pdf_cmd = "pdftk %s burst output %s/%%04d.pdf" % (
                tmp_pdf_in, tmp_dir)
            self._run_shell_command(split_pdf_cmd)

            pdfs_to_images_cmd = (
                "convert %s/000[1,2,3].pdf -resize 180x255 %s/%%04d.gif" % (
                    tmp_dir, tmp_dir))
            self._run_shell_command(pdfs_to_images_cmd)

            imgfiles = [
                gif for gif in os.listdir(tmp_dir)
                if os.path.splitext(gif)[1] == '.gif']
            imgfiles.sort()

            for i, img in enumerate(imgfiles):
                img = open(os.path.join(tmp_dir, img), "r")
                img_data = img.read()
                img.close()

                pub_folder.invokeFactory(
                    "Image", "carousel_%s.gif" % i, image=img_data)

        except Exception, e:
            logger.warn("generateImage: Could not autoconvert because: %s" % e)
            status = 0
Ejemplo n.º 7
0
 def addChapter(self, translation, chapter):
     if HAVE_LINGUAPLONE and not translation.isCanonical():
         can = translation.getCanonical()
         can_reference_container = _get_storage_folder(can)
         link = getattr(can_reference_container, chapter, None)
         if not link:
             # XXX what to do in this case (chapter not available in the
             # canonical folder)? Should not happen
             return
         try:
             new_chapter = link.addTranslation(translation.Language())
             new_chapter.setTitle(link.Title())
         except AlreadyTranslated:
             logger.error(
                 'We have an illegal translation in Publication '
                 '%(pub)s for chapter %(chapter)s in language %(lang)s. '
                 'The illegal translation can be found here: '
                 '%(bad)s' %
                 dict(pub=can.absolute_url(),
                      chapter=link.absolute_url(),
                      lang=translation.Language(),
                      bad=link.getTranslation(
                          translation.Language()).absolute_url()))
             return
     else:
         reference_container = _get_storage_folder(translation)
         reference_container.invokeFactory('Link', chapter)
         new_chapter = getattr(reference_container, chapter)
         new_chapter.setTitle(chapter)
         new_chapter.setLanguage(translation.Language())
     remote_url = "/%s#%s" % (urllib.unquote(
         translation.absolute_url(1)), chapter)
     new_chapter.edit(remote_url)
     new_chapter.unmarkCreationFlag()
     self.setState(new_chapter, translation.Language())
     new_chapter.reindexObject()
Ejemplo n.º 8
0
def _retrieve_chapter_attrs(ob, meta):
    """ get the attributes for the chapters """
    portal_languages = getToolByName(ob.context, 'portal_languages')
    default_language = portal_languages.getDefaultLanguage()
    suffix = ob.context.Language() or default_language

    additionals = _get_storage_folder(ob.context)
    #DEP: chapters = ob.publication_data.get('chapters', [])
    chapters = ob.context.getField('chapters').getAccessor(ob)()

    for chapter in chapters:
        section_name = "%s.%s" % (chapter, suffix)
        link = getattr(additionals, chapter)
        meta.add_section(section_name)

        schema = link.Schema()
        for key in schema.keys():
            value = link.getField(key).getAccessor(link)()
            #value = getattr(link, schema[key].accessor)()
            value = _vTs(value)
            if not value or key == 'id':
                continue
            meta.set(section_name, key, value)
Ejemplo n.º 9
0
    def _manage_chapters(self, translation):
        chapterfield = translation.getField('chapters')
        if chapterfield is None:
            logger.warn('Publication has no chapterfield: %s' %
                        translation.absolute_url())
            return
        chapters = chapterfield.getAccessor(translation)()

        reference_container = _get_storage_folder(translation)
        if reference_container is None:
            return
        references = self.getReferences(reference_container)

        outdated = []
        for reference in references:
            if reference not in chapters:
                outdated.append(reference)
        reference_container.manage_delObjects(ids=outdated)

        for chapter in chapters:
            chapter = chapter.encode('utf-8')
            if chapter not in references:
                self.addChapter(translation, chapter)