def __call__(self, xls_file): retval = [] try: xls_data = XlsReader(xls_file).read().data except TypeError: raise TypeError(_(u'Excel Datei konnte nicht gelesen werden')) except xlrd.XLRDError: raise Exception( _(u"help_import_error_unsupported_xls", (u"Please ensure that the xls file you selected is a valid " u"Excel file"))) header = xls_data[0] errors = [] for i in range(max(len(header), len(self.REFERENCE_HEADER))): if len(header) < i - 1: errors.append("Das Excel Dokument enthält zu wenige Spalten. Folgende Spalten sind das Minimum: %s" % (" ".join(self.REFERENCE_HEADER))) break if len(self.REFERENCE_HEADER) < i - 1: errors.append("Das Excel Dokument enthält zu viele Spalten. Es dürfen nur folgende Spalten vorkommen: %s" % (" ".join(self.REFERENCE_HEADER))) break if header[0].lower().strip() != self.REFERENCE_HEADER[0]: errors.append("Spalte %i ist falsch. Ist: %s, Soll: %s (Gross und Kleinschreibung wird ignoriert" % (i + 1, header[0].strip(), self.REFERENCE_HEADER[i])) if errors: raise TypeError("Do not understand Excel File", errors=errors) retval = [] for count, row in enumerate(xls_data[1:]): retval.append(row) return retval
def __call__(self, zipfile): zipfile = ZipFile(zipfile) filenames = zipfile.namelist() xls_files = [x for x in filenames if x.endswith('xls')] doc_files = [x for x in filenames if x.endswith('doc')] if len(xls_files) > 1: raise Exception(_("Zip file contains too many excel files")) if not xls_files: raise Exception(_("Zip file contains no excel files")) return StringIO(zipfile.open(xls_files[0]).read()), [StringIO(zipfile.open(x).read()) for x in doc_files]
def convert(self, xls_file, reference_header): retval = [] try: xls_data = XlsReader(xls_file).read().data except TypeError: raise TypeError(_(u'Excel Datei konnte nicht gelesen werden, ' 'evtl. mit PDF vertauscht?')) except xlrd.XLRDError, e: raise Exception( _(u"help_import_error_unsupported_xls", (u"Please ensure that the xls file you selected is a valid " u"Excel file")))
def convertLanguages(self, data): data = data.replace(';', ' ').replace('.', ' ')\ .replace(':', ' ').replace(',', ' ') data = [x.strip().lower() for x in data.split() if x.strip()] retval = [] for lang in data: if lang in self.supported_languages: retval.append(lang) else: warning = _('The language "${lang}" is unknown', default='Die Sprache "${lang}" is unbekannt', mapping={"lang": lang}) self.warnings.append(warning) return tuple(retval)
def __call__(self, context): # get user-defined languages registry = queryUtility(IRegistry) settings = registry.forInterface(IRecensioSettings) allowed_langs = getattr( settings, 'available_content_languages', '').split('\n') # get names for language codes gsm = getGlobalSiteManager() util = gsm.queryUtility(ILanguageAvailability) available_languages = util.getLanguages() terms = list() for lang in allowed_langs: lang = lang.strip() if available_languages.get(lang): terms.append(SimpleTerm(lang, lang, _(available_languages[lang]['name']))) return SimpleVocabulary(terms)
from Products.Archetypes.Widget import KeywordWidget from recensio.policy import recensioMessageFactory as _ PhilromSchema = atapi.Schema( ( atapi.LinesField( 'textForm', multiValued=1, schemata="reviewed_text", storage=atapi.AnnotationStorage(), required=False, vocabulary=NamedVocabulary("text_form"), widget=atapi.MultiSelectionWidget( label=_( u"label_text_form", default=(u"Text form") ) ), searchable=True, ), atapi.LinesField( 'manuscriptsShelfmark', multiValued=1, accessor='getManuscriptsShelfmark', schemata="reviewed_text", storage=atapi.AnnotationStorage(), widget=KeywordWidget( label=_(u"Manuscripts (Shelfmark)"), ), ), atapi.LinesField(
def title(self): return _(u"Complete PDFs")
# Dont import this file, its just for our i18n toolchain from recensio.policy import recensioMessageFactory as _ _("About us") _("Cut PDF") _("Epoch") _("Folder") _("Import") _("Issue") _("Listen to audio for this captcha") _("Pending review") _("Pending") _("Presentation Article Review") _("Presentation Article edited Volume") _("Presentation Article in Journal") _("Presentation Collection") _("Presentation Monograph") _("Presentation Online Resource") _("Private") _("Publication") _("Published") _("Region") _("Results per page") _("Review Journal") _("Review Monograph") _("Review") _("The number of results that is displayed on one page.") _("Themes") _("Topic") _("articles")
def handleTransition(self, info): membership_tool = getToolByName(self.context, "portal_membership") user = membership_tool.getAuthenticatedMember() mailhost = getToolByName(self.context, "MailHost") root = getToolByName(self.context, "portal_url").getPortalObject() mail_info = IMailSchema(root) mail_from = "%s <%s>" % (mail_info.email_from_name, mail_info.email_from_address) user_email = user.getProperty("email") registry = queryUtility(IRegistry) try: settings = registry.forInterface(IRecensioSettings) except KeyError: settings = dict() msg = "" if info.transition.id == "publish": info.object.setEffectiveDate(DateTime()) info.object.reindexObject() if info.transition.id == "submit": title = _(u"label_item_submitted", default=u"Content was submitted") mail_to = getattr(settings, "review_submitted_email", None) or mail_from msg = submit_notification_template % dict( user=user.getUserName(), portal_type=info.object.portal_type, link=info.object.absolute_url(), email=user_email, ) elif info.transition.id == "publish" and info.old_state.id == "pending": ts = getToolByName(self.context, "translation_service") owner = info.object.getOwner() mail_to = owner.getProperty("email") pref_lang = owner.getProperty("preferred_language", "de") title = ts.translate( _(u"label_item_published", default=u"Your item has been published"), target_language=pref_lang ) rtool = getToolByName(self.context, "portal_repository") info.object.restrictedTraverse("@@mail_new_presentation")() publish_notification_template = _( "publish_notification_template", default=u"""Ihr Artikel "${title}" wurde freigeschaltet und ist nun unter ${url} verfügbar.""", mapping=dict(title=info.object.Title().decode("utf-8"), url=info.object.absolute_url()), ) template = ts.translate(publish_notification_template, target_language=pref_lang) msg = template % dict(title=info.object.Title().decode("utf-8"), url=info.object.absolute_url()) if msg: subject = translate(title) try: log.info(u"I am sending the following msg:\n%s" % msg) mailhost.send( messageText=msg, mto=mail_to, mfrom=mail_from, subject=subject, charset="utf-8", immediate=True ) except Exception, err: log.warn( "Not possible to send email notification for " "workflow change on %(url)s. Message:\n%(error)s" % dict(url=info.object.absolute_url(), error=str(err)) )
def addZIPContent(self, zipfile): try: xls, docs = self.zip_extractor(zipfile) results = [x for x in self.excel_converter.convert_zip(xls)] except Exception, e: if isinstance(e, ConflictError): raise log.exception(str(e)) self.errors.append(str(e)) transaction.doom() raise FrontendException() finally: self.warnings = self.excel_converter.warnings if len(docs) != len(results): self.errors.append( _("The number of documents in the zip file do not match " "the number of entries in the excel file")) transaction.doom() raise FrontendException() for result, doc in zip(results, docs): result['doc'] = doc module, class_ = result.pop('portal_type') portal_type = self.type_getter(module, class_) result_item = addOneItem(self.context, portal_type, result) self.results.append({'name' : result_item.title, \ 'url' : result_item.absolute_url()}) if self.errors: raise FrontendException() def type_getter(self, module_path, class_): module = __import__(module_path) for modname in module_path.split('.')[1:]:
# -*- coding: utf-8 -*- # Dont import this file, it's just for our i18n toolchain from recensio.policy import recensioMessageFactory as _ _(u"label_journals", default=u"Journals") _(u"label_edited_volumes", default=u"Edited Volumes")