def chapters(self): """ get the chapters """ additionals = _get_storage_folder(self.context) if additionals is None: return [] chapterlinks = additionals.objectValues('ATLink') return chapterlinks
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)
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
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
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()
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)
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)