setattr(self.context, ATTRIBUTE_NAME, self.fans) def get(self): return getattr(self.context, ATTRIBUTE_NAME, None) def add(self, username): username = str(username) self.fans.add(username) setattr(self.context, ATTRIBUTE_NAME, self.fans) self.context.reindexObject(idxs=['favoritedBy']) def remove(self, username): username = str(username) self.fans.remove(username) setattr(self.context, ATTRIBUTE_NAME, self.fans) self.context.reindexObject(idxs=['favoritedBy']) @indexer(IDexterityContent) def favoriteIndexer(context): """Create a catalogue indexer, registered as an adapter for DX content. """ return IFavorite(context).get() grok.global_adapter(favoriteIndexer, name='favoritedBy') @indexer(IBaseObject) def favoriteIndexerAT(context): """Create a catalogue indexer, registered as an adapter for AT content. """ return IFavorite(context).get() grok.global_adapter(favoriteIndexerAT, name='favoritedBy')
# The view will render when you request a content object with this # interface with "/@@sampleview" appended. # You may make this the default view for content objects # of this type by uncommenting the grok.name line below or by # changing the view class name and template filename to View / view.pt. # add custom indexers to store the start and end values # in Zope DateTime Format to maintain compatibility with # The current CalendarTool and portlet @indexer(IInfo) def startIndexer(obj): if obj.startDate is None: return None return DateTime(obj.startDate.isoformat()) grok.global_adapter(startIndexer, name="start") @indexer(IInfo) def endIndexer(obj): if obj.endDate is None: return None return DateTime(obj.endDate.isoformat()) grok.global_adapter(endIndexer, name="end") @indexer(IInfo) def categoryIndexer(obj): if obj.category is None: return None return obj.category grok.global_adapter(categoryIndexer, name="category")
message = schema.Text( title=_(u"Short Description of Your Extension Project"), description=_(u"Please keep between 50 to 1,000 characters"), min_length=50, max_length=1000, required=True, ) form.widget(norobots=NorobotsFieldWidget) norobots = schema.TextLine(title=_(u'Are you a human ?'), description=_(u'In order to avoid spam, please answer the question below.'), required=True,) validator.WidgetValidatorDiscriminators(NorobotsValidator, field=IExtensionsiteaccountForm['norobots']) grok.global_adapter(NorobotsValidator) class ExtensionsiteaccountForm(form.SchemaForm): grok.context(ISiteRoot) grok.name('hosting-your-extension') grok.require('zope2.View') enableCSRFProtection = True schema = IExtensionsiteaccountForm label = _(u"Hosting your Extension(s)") description = _(u"Please leave a short description of your template project below.")
from zope.lifecycleevent.interfaces import IObjectCreatedEvent from zope.app.container.interfaces import IObjectAddedEvent from Products.CMFCore.utils import getToolByName @indexer(IAuteur) def searchableIndexer(context): return "%s %s %s %s %s %s" % (context.firstname, context.lastname, context.address, context.email, context.school, context.phone) grok.global_adapter(searchableIndexer, name="SearchableText") @indexer(IAuteur) def firstnameIndexer(obj): if obj.firstname is None: return None return obj.firstname grok.global_adapter(firstnameIndexer, name="firstname") @indexer(IAuteur) def lastnameIndexer(obj): if obj.lastname is None: return None return obj.lastname
required=False, default=False ) alsoProvides(IOpenLinkInNewWindow, form.IFormFieldProvider) class OpenLinkInNewWindow(object): implements(IOpenLinkInNewWindow) adapts(ILink) def __init__(self, context): self.context = context def _set_open_link_in_new_window(self, value): self.context.open_link_in_new_window = value def _get_open_link_in_new_window(self): return getattr(self.context, 'open_link_in_new_window', None) open_link_in_new_window = property(_get_open_link_in_new_window, _set_open_link_in_new_window) @indexer(ILink) def open_link_in_new_window(obj): return obj.open_link_in_new_window grok.global_adapter(open_link_in_new_window, name="open_link_in_new_window")
title=_(u'Alternate title'), required=False, ) relatedContent = RelationChoice( title=_(u'label_related_content', default=u'Related content'), source=CompilationSourceBinder( object_provides='Products.CMFCore.interfaces._content.IContentish'), required=True, ) @indexer(IContentReference) def relatedContentUID(obj): uuid = IUUID(obj.relatedContent.to_object) return uuid grok.global_adapter(relatedContentUID, name="relatedContentUID") @indexer(IContentReference) def compilationUID(obj): previousparent = parent = obj.aq_parent while ICompilation.providedBy(parent) or ISection.providedBy(parent): previousparent = parent parent = parent.aq_parent uuid = IUUID(previousparent) return uuid grok.global_adapter(compilationUID, name="compilationUID") class ContentReference(dexterity.Item): grok.implements(IContentReference)
end_date = end_date.asdatetime().date() # We will have a timedelta object here delta = end_date - start_date if not(delta.days > -1): msg = _(u'End date must not be prior to start date') raise InvalidDateRange(msg) @indexer(IProgram) def startIndexer(obj): if obj.start_date: date = obj.start_date if not isinstance(date, DateTime): date = DateTime('%s' % date.isoformat()) return date grok.global_adapter(startIndexer, name="start") @indexer(IProgram) def endIndexer(obj): if obj.end_date: date = obj.end_date if not isinstance(date, DateTime): date = DateTime('%s' % date.isoformat()) return date grok.global_adapter(endIndexer, name="end") class Program(dexterity.Container): grok.implements(IProgram)
# For the time being, ignore settings.validation_policy and # go with an *exact* Dimensions check if (width != settings.required_width or height != settings.required_height): raise Invalid( _(u"image_wrong_dimensions", default= u"Image has wrong dimensions - it should be ${required_height} x ${required_width} pixels (h x w)" ", but is ${actual_height} x ${actual_width}", mapping={ "required_height": settings.required_height, "required_width": settings.required_width, "actual_height": height, "actual_width": width })) # Lastly check filesize if value.getSize() > (settings.max_filesize * 1024): raise Invalid( _(u"image_too_large", default= u"Image filesize is too large. Maximum permitted: ${max_filesize}KB", mapping={"max_filesize": settings.max_filesize})) validator.WidgetValidatorDiscriminators(ImageDimensionsValidator, context=IBannerImage, field=IBannerImage['banner_image']) grok.global_adapter(ImageDimensionsValidator)
title_fr = schema.TextLine( title=_(u"Title French"), required=False, ) @indexer(IImprovementArea) def title_es(context): try: value = context.title_es.decode("utf-8") return value except: return context.title_es grok.global_adapter(title_es, name='title_es') @indexer(IImprovementArea) def title_fr(context): try: value = context.title_fr.decode("utf-8") return value except: return context.title_fr grok.global_adapter(title_fr, name='title_fr') class Edit(form.SchemaEditForm):
# Local imports from eelplone.policy.interfaces import IThemeSpecific from eelplone.policy import messageFactory as _ grok.templatedir("templates_sharing") grok.layer(IThemeSpecific) from plone.indexer.decorator import indexer @indexer(Interface) def localRoles(object, **kw): return list(object.get_local_roles()) grok.global_adapter(localRoles, name="localRoles") # index connected in configure.zcml # <adapter name="localRoles" factory=".changesharing.localRoles" /> class ChangeSharing(grok.View): """ Temp page for testing the LDAP integration. http://localhost:8080/Plone/@@changesharing """ # use grok.context(Interface) to associate view with the site root grok.context(ISiteRoot) grok.require('cmf.ManagePortal')
standardShippingCost = schema.Float( title=_(u"Standard shipping cost"), description= _(u"Usually is the cost for the typical standard, lowest cost shipping method. This is provided for informational purposes and the actual shipping cost could vary depending on the visitor." ), required=False, ) @indexer(IProductData) def keywords_indexer(obj): keywordsList = obj.keywords.split(',') return keywordsList grok.global_adapter(keywords_indexer, name='keywords') @indexer(IProductData) def thirdPartyCategory_indexer(obj): thirdPartyCategoryList = obj.thirdPartyCategory.split(',') return thirdPartyCategoryList grok.global_adapter(thirdPartyCategory_indexer, name='thirdPartyCategory') @indexer(IProductData) def discount_indexer(obj): if obj.salePrice > 0.0 and obj.salePrice < obj.price: discount = (obj.price - obj.salePrice) / obj.price
from plone.directives import form from opengever.base.interfaces import ISequenceNumber from zope.lifecycleevent.interfaces import IObjectCopiedEvent class ISequenceNumberBehavior(form.Schema): """the SequenceNumber Behavior is only used for the sequence number indexer """ pass @indexer(ISequenceNumberBehavior) def sequence_number(obj): """ Indexer for the sequence_number """ seqNumb = getUtility(ISequenceNumber) return seqNumb.get_number(obj) grok.global_adapter(sequence_number, name='sequence_number') @grok.subscribe(ISequenceNumberBehavior, IObjectCopiedEvent) def new_sequence_number(obj, event): """When a object was copied, the sequence number, would also be copied. This Event handler fix that problem, and generate a new one for the copy.""" seqNumb = getUtility(ISequenceNumber) seqNumb.remove_number(obj) seqNumb.get_number(obj)
def add(self, username): username = str(username) self.fans.add(username) setattr(self.context, ATTRIBUTE_NAME, self.fans) self.context.reindexObject(idxs=['favoritedBy']) def remove(self, username): username = str(username) if username in self.fans: self.fans.remove(username) setattr(self.context, ATTRIBUTE_NAME, self.fans) self.context.reindexObject(idxs=['favoritedBy']) @indexer(IDexterityContent) def favoriteIndexer(context): """Create a catalogue indexer, registered as an adapter for DX content. """ return IFavorite(context).get() grok.global_adapter(favoriteIndexer, name='favoritedBy') @indexer(IBaseObject) def favoriteIndexerAT(context): """Create a catalogue indexer, registered as an adapter for AT content. """ return IFavorite(context).get() grok.global_adapter(favoriteIndexerAT, name='favoritedBy')
authorNameC = context_property('authorNameC') authorNameE = context_property('authorNameE') institutionC = context_property('institutionC') institutionE = context_property('institutionE') titleC = context_property('titleC') titleE = context_property('titleE') email = context_property('email') phone = context_property('phone') @indexer(Interface) def authorNameC_indexer(obj): return obj.authorNameC grok.global_adapter(authorNameC_indexer, name='authorNameC') @indexer(Interface) def authorNameE_indexer(obj): return obj.authorNameE grok.global_adapter(authorNameE_indexer, name='authorNameE') @indexer(Interface) def institutionC_indexer(obj): return obj.institutionC
relatedContent = RelationChoice( title=_(u'label_content_item', default=u'Related Content'), source=ObjPathSourceBinder( object_provides='Products.CMFCore.interfaces._content.IContentish' ), required=False, ) @indexer(IQuestion) def relatedContentUID(obj): uuid = IUUID(obj.relatedContent.to_object) return uuid grok.global_adapter(relatedContentUID, name="relatedContentUID") class Question(dexterity.Container): grok.implements(IQuestion) def Title(self): return self.text def setTitle(self, value): pass @property def answers(self): return self.getAnswers()
from opengever.dossier.dossiertemplate.behaviors import IDossierTemplateMarker from opengever.dossier.utils import get_main_dossier from opengever.inbox.inbox import IInbox from opengever.private.dossier import IPrivateDossier from plone.dexterity.interfaces import IDexterityContent from plone.indexer import indexer from Products.CMFCore.interfaces import ISiteRoot from zope.component import getAdapter from zope.component import getUtility @indexer(IDossierMarker) def DossierSubjectIndexer(obj): aobj = IDossier(obj) return aobj.keywords grok.global_adapter(DossierSubjectIndexer, name="Subject") @indexer(IDossierTemplateMarker) def DossierTemplateSubjectIndexer(obj): aobj = IDossier(obj) return aobj.keywords grok.global_adapter(DossierTemplateSubjectIndexer, name="Subject") @indexer(IDossierMarker) def startIndexer(obj): aobj = IDossier(obj) if aobj.start is None: return None return aobj.start
results.append(getattr(obj, 'output_stream', '')) results.append(getattr(obj, 'obj.mission_scope', '')) results.append(getattr (obj, 'obj.mission_funding_source', '')) if obj.id_province: results.append(id_provinces.getTerm(obj.id_province).title) if obj.country: results.append(p01.vocabulary.country.ISO3166Alpha2CountryVocabulary(obj).getTerm(obj.country).title) results.append(obj.output_contribution.output) results.append(obj.title) results.append(obj.description) membership = obj.portal_membership if obj.mission_members: for memberId in obj.mission_members: member = membership.getMemberById(memberId) results.append(member.getProperty('fullname')) if obj.mission_support_staff: for memberId in obj.mission_support_staff: member = membership.getMemberById(memberId) results.append(member.getProperty('fullname')) return " ".join(results) grok.global_adapter(index_searchable, name='SearchableText')
from five import grok from zope.component import queryAdapter from plone.indexer import indexer from collective.timelines.interfaces import ITimelineContent from Products.CMFCore.interfaces import IDynamicType @indexer(IDynamicType) def timelineDate(obj): adapter = queryAdapter(obj, ITimelineContent) return adapter and adapter.date() or None grok.global_adapter(timelineDate, name='timeline_date')
# be instances of this class. Use this class to add content-type specific # methods and properties. Put methods that are mainly useful for rendering # in separate view classes. class Theater(dexterity.Container): grok.implements(ITheater) # Add your class methods and properties here @indexer(ITheater) def lcityIndexer(obj): if len(obj.location) >= 3: return obj.location[:3] else: return None grok.global_adapter(lcityIndexer, name='lcity') # View class # The view will automatically use a similarly named template in # theater_templates. # Template filenames should be all lower case. # The view will render when you request a content object with this # interface with "/@@sampleview" appended. # You may make this the default view for content objects # of this type by uncommenting the grok.name line below or by # changing the view class name and template filename to View / view.pt. class View(grok.View): grok.context(ITheater) grok.require('zope2.View') grok.name('view')
annotations = IAnnotations(self.context) self._is_outoflist = annotations.setdefault(OUTOFLIST_KEY, '') return self._is_outoflist def set_outoflist(self, value): annotations = IAnnotations(self.context) annotations[OUTOFLIST_KEY] = value self.context.reindexObject(idxs=["is_outoflist"]) is_outoflist = property(get_outoflist, set_outoflist) @indexer(IDexterityContent) def outoflistIndexer(context): """Create a catalogue indexer, registered as an adapter for DX content. """ return IOutOfList(context).is_outoflist grok.global_adapter(outoflistIndexer, name='is_outoflist') @indexer(IBaseObject) def outoflistIndexerAT(context): """Create a catalogue indexer, registered as an adapter, which can populate the ``is_outoflist`` index. """ return IOutOfList(context).is_outoflist grok.global_adapter(outoflistIndexerAT, name='is_outoflist')
title=_(u"Quantity Discount"), description=_(u"Comma separated list in the format of minQuantity~maxQuantity~itemCost. Blank Max Quantity represents a top tier."), required=False, ) bestSeller = schema.Bool( title=_(u"Best Seller"), description=_(u"A 1 indicates a best selling product. Null values or zero are non-bestsellers."), required=False, ) @indexer(ISASProduct) def bestSeller_indexer(obj): return obj.bestSeller grok.global_adapter(bestSeller_indexer, name='bestSeller') @indexer(ISASProduct) def quantityDiscount_indexer(obj): return obj.quantityDiscount grok.global_adapter(quantityDiscount_indexer, name='quantityDiscount') @indexer(ISASProduct) def merchantID_indexer(obj): return obj.merchantID grok.global_adapter(merchantID_indexer, name='merchantID') @indexer(ISASProduct) def imageSize_indexer(obj): imageSize = obj.productImage.getSize() return imageSize
paragraph_template = RelationChoice( title=_('label_paragraph_template', default=u'Paragraph template'), source=sablon_template_source, required=False, ) class RepositoryfolderValidator(BaseRepositoryfolderValidator): pass WidgetValidatorDiscriminators( RepositoryfolderValidator, field=ICommittee['repository_folder']) grok.global_adapter(RepositoryfolderValidator) class ICommitteeModel(Interface): """Proposal model schema interface.""" title = schema.TextLine( title=_(u"label_title", default=u"Title"), required=True, max_length=256, ) group_id = schema.Choice( title=_('label_group', default="Group"), description=_( u'description_group',
return ' '.join(searchable) @indexer(IDocumentSchema) def document_author(obj): """document_author indexer""" context = aq_inner(obj) if not context.document_author: return None elif isinstance(context.document_author, unicode): return context.document_author.encode('utf-8') else: return context.document_author grok.global_adapter(document_author, name='document_author') @indexer(IDocumentSchema) def document_date(obj): """document_date indexer""" context = aq_inner(obj) if not context.document_date: return None return context.document_date grok.global_adapter(document_date, name='document_date') @indexer(IDocumentSchema) def receipt_date(obj):
class EditForm(edit.DefaultEditForm): pass @indexer(ISchutzhandschuh) def myGefahrstoffe(obj): gefahrstoffliste = [] for i in obj.gefahrstoffschutz: if i.get('gefahrstoff') != u'auswahl': gefahrstoffliste.append(i.get('gefahrstoff')) print i.get('gefahrstoff') return gefahrstoffliste grok.global_adapter(myGefahrstoffe, name="getGefahrstoffe") @indexer(ISchutzhandschuh) def isMechanik(obj): if u'din_en_388_alt' in obj.mechanik: return True if u'din_en_388_2016' in obj.mechanik: return True return False grok.global_adapter(isMechanik, name="getMechanik") @indexer(ISchutzhandschuh)
raise NotFound("content.html") if IView.providedBy(view) and view.content is None: msg = _("Sorry, this ${meta_type} is not viewable.", mapping={"meta_type": self.context.meta_type}) return "<p>%s</p>" % translate(msg, context=self.request) return view() class VersionMainPage(silvaviews.Page): grok.name("index.html") grok.context(IVersion) grok.require("silva.ReadSilvaContent") def render(self): content = self.context.get_silva_object() view = queryMultiAdapter((content, self.request), name="content.html") if view is None: raise NotFound("content.html") if IView.providedBy(view): view.content = self.context return view() msg = _("Sorry, this ${meta_type} is not viewable.", mapping={"meta_type": content.meta_type}) return "<p>%s</p>" % translate(msg, context=self.request) # Return a layout for a version. We lookup the layout of the related content def version_layout(request, version): return getMultiAdapter((request, version.get_silva_object()), ILayout) grok.global_adapter(version_layout, (ISilvaLayer, IVersion), ILayout)
if not _checkPermission('opengever.trash: Trash content', folder): raise Unauthorized() noLongerProvides(self.context, ITrashed) self.context.reindexObject() notify(UntrashedEvent(self.context)) @indexer(Interface) def trashIndexer(obj): # This index is used to filter trashed documents from catalog search # results by default. For that we monkey patch the catalog tool's # searchResults(), see the patch in opengever.base.monkey return ITrashed.providedBy(obj) grok.global_adapter(trashIndexer, name="trashed") class TrashView(grok.View): grok.context(ITrashableMarker) grok.require('opengever.trash.TrashContent') grok.name('trashed') def __call__(self): paths = self.request.get('paths') catalog = getToolByName(self.context, 'portal_catalog') trashed = False if paths: for item in paths: obj = self.context.restrictedTraverse(item) brains = catalog(path=item)
from five import grok from plone.indexer import indexer from plone.app.contenttypes.interfaces import INewsItem @indexer(INewsItem) def newsImageFile(context): """Create a catalogue indexer, registered as an adapter, which can populate the ``context.filename`` value and index it. """ return context.image.filename grok.global_adapter(newsImageFile, name='news_image_filename')
from five import grok from plone.indexer import indexer from plone.app.dexterity.behaviors.metadata import ICategorization from collective.dexteritytextindexer.utils import searchable from genweb.serveistic.content.notificaciotic import INotificacioTIC @indexer(INotificacioTIC) def notifTipus(context): """Create a catalogue indexer, registered as an adapter, which can populate the ``context.tipus`` value and index it. """ return context.tipus grok.global_adapter(notifTipus, name='tipus') # Include content tags in the SearchableText index searchable(ICategorization, 'subjects')
sap['versandkosten'] = 3.50 return sap def getArticleNumber(self): return self.artikelnummer def getArticle(self, matnr): return sapshopapi.getArticle(matnr) @indexer(IArtikel) def myArtikelnummer(obj): return obj.artikelnummer grok.global_adapter(myArtikelnummer, name="Artikelnummer") @indexer(IArtikel) def myMedienart(obj): return obj.medienart grok.global_adapter(myMedienart, name="Medienart") @indexer(IArtikel) def myThemen(obj): return obj.abisz
relatedContent = RelationChoice( title=_(u'label_related_content', default=u'Related content'), source=CompilationSourceBinder( object_provides='Products.CMFCore.interfaces._content.IContentish' ), required=True, ) @indexer(IContentReference) def relatedContentUID(obj): uuid = IUUID(obj.relatedContent.to_object) return uuid grok.global_adapter(relatedContentUID, name="relatedContentUID") @indexer(IContentReference) def compilationUID(obj): previousparent = parent = obj.aq_parent while ICompilation.providedBy(parent) or ISection.providedBy(parent): previousparent = parent parent = parent.aq_parent uuid = IUUID(previousparent) return uuid grok.global_adapter(compilationUID, name="compilationUID")
from plone.app.uuid.utils import uuidToObject from hejasverige.invitation.interfaces import IInvitation from hejasverige.invitation import _ @indexer(IInvitation) def invitationTitleIndexer(context): return " ".join((uuidToObject(context.sender_id).Title(), ' - ', context.first_name + ' ' + context.last_name, ' - ', context.personal_id ) ) grok.global_adapter(invitationTitleIndexer, name="Title") @indexer(IInvitation) def invitationExternalIdIndexer(context): return context.sender_id grok.global_adapter(invitationExternalIdIndexer, name="externalId") @indexer(IInvitation) def invitationSearchableTextIndexer(context): return [context.sender_id, context.first_name, context.last_name, context.personal_id, context.recipient_email] grok.global_adapter(invitationSearchableTextIndexer, name="SearchableText") @indexer(IInvitation)
document_addable = False for fti in value.allowedContentTypes(): if fti.id == 'opengever.document.document': document_addable = True break if not document_addable: msg = _(u'You cannot add documents to the selected dossier. ' u'Either the dossier is closed or you do not have the ' u'privileges.') raise Invalid(msg) WidgetValidatorDiscriminators(DossierValidator, field=IChooseDossierSchema['dossier']) grok.global_adapter(DossierValidator) class ChooseDossierStepForm(CloseTaskWizardStepFormMixin, Form): fields = Fields(IChooseDossierSchema) step_name = 'close-task-wizard_choose-dossier' @buttonAndHandler(_(u'button_save', default=u'Save'), name='save') def handle_save(self, action): data, errors = self.extractData() if not errors: query = getUtility(ITaskQuery) info = getUtility(IContactInformation) dm = getUtility(IWizardDataStorage)
results.append(getattr(obj, 'obj.mission_funding_source', '')) if obj.id_province: results.append(id_provinces.getTerm(obj.id_province).title) if obj.country: results.append( p01.vocabulary.country.ISO3166Alpha2CountryVocabulary(obj).getTerm( obj.country).title) results.append(obj.output_contribution.output) results.append(obj.title) results.append(obj.description) membership = obj.portal_membership if obj.mission_members: for memberId in obj.mission_members: member = membership.getMemberById(memberId) results.append(member.getProperty('fullname')) if obj.mission_support_staff: for memberId in obj.mission_support_staff: member = membership.getMemberById(memberId) results.append(member.getProperty('fullname')) return " ".join(results) grok.global_adapter(index_searchable, name='SearchableText')
properties = { 'marker-color': marker_color, 'marker-symbol': 'circle', 'image': '/++theme++amap.sitetheme/images/icon_hand.png', 'title': context.Title(), 'description': context.Description(), 'url': context.absolute_url() } marker['type'] = 'Feature' marker['geometry'] = geometry marker['properties'] = properties markers.append(marker) geojson = {'type': 'FeatureCollection', 'features': markers} return geojson def color_code(self, key): vocabulary = color_codes() code = '#545454' if key is not None and vocabulary[key]: code = vocabulary[key] return code @indexer(IInstitution) def searchableIndexer(context): keywords = " ".join(context.keywords) return "%s %s %s" % (context.title, context.description, keywords) grok.global_adapter(searchableIndexer, name="SearchableText")
def endDefaultValue(data): # To get hold of the folder, do: context = data.context return datetime.datetime.today() + datetime.timedelta(10) # Indexers @indexer(IProgram) def startIndexer(obj): if obj.start is None: return None return DateTime(obj.start.isoformat()) grok.global_adapter(startIndexer, name="start") @indexer(IProgram) def endIndexer(obj): if obj.end is None: return None return DateTime(obj.end.isoformat()) grok.global_adapter(endIndexer, name="end") @indexer(IProgram) def tracksIndexer(obj): return obj.tracks
blogtheme = schema.Tuple( title=_(u"Blog Categories"), description=_(u"Enter blog categries - one per line - that will be " u"used for filtering the content."), value_type=schema.TextLine(), required=False, missing_value=(), ) @indexer(IBlogEntry) def blogthemeIndexer(obj): if obj.blogtheme is None: return None return obj.blogtheme grok.global_adapter(blogthemeIndexer, name="blogtheme") class BlogEntryView(grok.View): grok.context(IBlogEntry) grok.require('zope2.View') grok.name('view') def archive_url(self, subject): # Get the path of where the portlet is created. That's the blog. context = aq_inner(self.context) archive_view = 'blog-view' parent = aq_parent(context) parent_url = parent.absolute_url() return '%s/%s?category=%s' % (parent_url, archive_view,
context = self.context catalog = getToolByName(context, 'portal_catalog') if context.portal_type == 'ilo.pledge.pledgecampaign': brains = catalog.unrestrictedSearchResults(object_provides = IPledge.__identifier__) emails = [brain._unrestrictedGetObject().email1 for brain in brains] if value in emails: raise Invalid(_("Email already exists.")) elif context.portal_type == 'ilo.pledge.pledge': brains = catalog.unrestrictedSearchResults(object_provides = IPledge.__identifier__) emails = [brain._unrestrictedGetObject().email1 for brain in brains if brain.UID != self.context.UID()] if value in emails: raise Invalid(_("Email already exists.")) validator.WidgetValidatorDiscriminators(CheckDuplicateEmail, field=IPledge['email1']) grok.global_adapter(CheckDuplicateEmail) @grok.subscribe(IPledge, IObjectAddedEvent) def _createObject(context, event): parent = context.aq_parent id = context.getId() object_Ids = [] catalog = getToolByName(context, 'portal_catalog') path = '/'.join(context.aq_parent.getPhysicalPath()) brains = catalog.unrestrictedSearchResults(path={'query': path, 'depth' : 1}) for brain in brains: object_Ids.append(brain.id) if not context.email1:
alsoProvides(IPresenters, form.IFormFieldProvider) class Presenters(object): """ adapter for IPresenters """ implements(IPresenters) adapts(ISession) def __init__(self, context): self.context = context self.annotation = IAnnotations(self.context) @property def presenters(self): return self.annotation.get("presenter.presenters", []) @presenters.setter def presenters(self, value): self.annotation["presenter.presenters"] = value @indexer(ISession) def presentersIndexer(obj): presenter_adapter = IPresenters(obj, None) if presenter_adapter and presenter_adapter.presenters: return presenter_adapter.presenters grok.global_adapter(presentersIndexer, name="presenters")
@form.default_value(field=IProgram['end']) def endDefaultValue(data): # To get hold of the folder, do: context = data.context return datetime.datetime.today() + datetime.timedelta(10) # Indexers @indexer(IProgram) def startIndexer(obj): if obj.start is None: return None return DateTime(obj.start.isoformat()) grok.global_adapter(startIndexer, name="start") @indexer(IProgram) def endIndexer(obj): if obj.end is None: return None return DateTime(obj.end.isoformat()) grok.global_adapter(endIndexer, name="end") @indexer(IProgram) def tracksIndexer(obj): return obj.tracks grok.global_adapter(tracksIndexer, name="Subject")
vocabulary=rankvalue, default='nicht_relevant', required=False) konvektive_kaelte = schema.Choice( title=u"Anforderung an die Konvektive Kälte", vocabulary=rankvalue, default='nicht_relevant', required=False) kontaktkaelte = schema.Choice(title=u"Anforderung an die Kontaktkälte", vocabulary=rankvalue, default='nicht_relevant', required=False) wasserdichtigkeit = schema.Choice( title=u"Anforderung an die Wasserdichtigkeit", vocabulary=rankvalue, default='nicht_relevant', required=False) @indexer(ITaetigkeit) def myGefahrstoffe(obj): gefahrstoffliste = [] for i in obj.gefahrstoffschutz: if i.get('gefahrstoff') != u'auswahl': gefahrstoffliste.append(i.get('gefahrstoff')) return gefahrstoffliste grok.global_adapter(myGefahrstoffe, name="getGefahrstoffe")
vocabulary=GENDER, required=True, ) class Learner(dexterity.Item): grok.implements(ILearner) class LearnerCodeValidator(validator.SimpleFieldValidator): def validate(self, value): super(LearnerCodeValidator, self).validate(value) catalog = getToolByName(self.context, 'portal_catalog') result = catalog(portal_type='upfront.classlist.content.learner', id=value) count = len(result) # we are editing a learner without changing the value if count == 1 and result[0].UID == IUUID(self.context): return True elif count > 0: raise Invalid( _(u"This learner code already " "exists in the system. The learner code " "must be unique.")) validator.WidgetValidatorDiscriminators(LearnerCodeValidator, field=ILearner['code']) grok.global_adapter(LearnerCodeValidator)
@indexer(IDocumentSchema) def document_author(obj): """document_author indexer""" context = aq_inner(obj) if not context.document_author: return None elif isinstance(context.document_author, unicode): return context.document_author.encode('utf-8') else: return context.document_author grok.global_adapter(document_author, name='document_author') @indexer(IDocumentSchema) def document_date(obj): """document_date indexer""" context = aq_inner(obj) if not context.document_date: return None return context.document_date grok.global_adapter(document_date, name='document_date')
class IDValidator(validator.SimpleFieldValidator): """ checks whether ID is valid """ def validate(self, value): super(IDValidator, self).validate(value) if not value.isdigit(): raise Invalid("Material ID must contain only digits.") if len(value)>8: raise Invalid("Material ID is too long. It should contain 8 or less digits.") md = api.content.get(path='/eval/docs/neutronics/materials/database') or api.content.get(path='/Plone/materials/') for key,val in md.items(): if key == value and val != self.context: raise Invalid("Material with ID %s already exists" % value) validator.WidgetValidatorDiscriminators(IDValidator, field=IMaterial['ID']) grok.global_adapter(IDValidator) # rename material if ID was changed (actually, the INameFromID is not needed with this function): # this method is called after View::update() @grok.subscribe(IMaterial, IObjectModifiedEvent) def rename(obj, event): oldid = obj.getId() newid = obj.ID if oldid != newid: parent = obj.aq_parent parent.manage_renameObject(oldid, newid)
continue # be sure that it is utf-8 encoded if isinstance(extended_value, unicode): extended_value = extended_value.encode('utf-8') # only accept strings assert isinstance(extended_value, str), 'expected converted ' + \ 'value of IDynamicTextIndexExtender to be a str' indexed.append(extended_value) return ' '.join(indexed) grok.global_adapter(dynamic_searchable_text_indexer, name='SearchableText') def get_field_widget(obj, field): """Returns the field widget of a field in display mode without touching any form. The `field` should be a z3c form field, not a zope schema field. """ assert IField.providedBy(field), 'field is not a form field' if field.widgetFactory.get(DISPLAY_MODE) is not None: factory = field.widgetFactory.get(DISPLAY_MODE) widget = factory(field.field, obj.REQUEST) else: widget = getMultiAdapter(
#!/usr/bin/env python # -*- coding: utf-8 -*- __docformat__ = "restructuredtext en" from five import grok from plone.indexer import indexer from libertic.event.interfaces import ILiberticEvent, ISource from collective.dexteritytextindexer.utils import searchable @indexer(ILiberticEvent) def sourceIndexer(obj): return obj.source grok.global_adapter(sourceIndexer, name="source") @indexer(ILiberticEvent) def eidIndexer(obj): return obj.eid grok.global_adapter(eidIndexer, name="eid") @indexer(ISource) def get_last_source_parsingstatusIndexer(obj): return obj.get_last_source_parsingstatus()
if len(title.strip()) == 0: title = _(u'Contact') return title def setTitle(self, title): """ Dummy action (is called while creating object) """ pass @indexer(IContact) def contactid(obj): return obj.contactid grok.global_adapter(contactid, name='contactid') @indexer(IContact) def phone_office(obj): return obj.phone_office grok.global_adapter(phone_office, name='phone_office') @indexer(IContact) def firstname(obj): return obj.firstname
atemschutz = schema.Bool( title=_(u"Atemschutzgeraetetraeger"), required = False, ) truppfuehrer = schema.Bool( title=_(u"Truppfuehrer"), required = False, ) sprechfunker = schema.Bool( title=_(u"Sprechfunker"), required = False, ) truppmann = schema.Bool( title=_(u"Truppmann"), required = False, ) @indexer(IKamerad) def eintrittsjahr_indexer(obj): return obj.mitglied_seit.year grok.global_adapter(eintrittsjahr_indexer, name="eintrittsjahr") @indexer(IKamerad) def zug_indexer(obj): return obj.getParentNode().id grok.global_adapter(zug_indexer, name="uebergeordneter_zug")
from five import grok from opengever.repository.repositoryfolder import IRepositoryFolder from plone.indexer import indexer @indexer(IRepositoryFolder) def title_de_indexer(obj): return obj.get_prefixed_title_de() grok.global_adapter(title_de_indexer, name="title_de") @indexer(IRepositoryFolder) def title_fr_indexer(obj): return obj.get_prefixed_title_fr() grok.global_adapter(title_fr_indexer, name="title_fr")
annotations = IAnnotations(context) self._is_flash = annotations.setdefault(FLASH_KEY, False) def get_flash(self): annotations = IAnnotations(self.context) self._is_flash = annotations.setdefault(FLASH_KEY, '') return self._is_flash def set_flash(self, value): annotations = IAnnotations(self.context) annotations[FLASH_KEY] = value self.context.reindexObject(idxs=["is_flash"]) is_flash = property(get_flash, set_flash) @indexer(INewsItem) def flashIndexer(context): """Create a catalogue indexer, registered as an adapter for DX content. """ return IFlash(context).is_flash grok.global_adapter(flashIndexer, name='is_flash') @indexer(IBaseObject) def flashIndexerAT(context): """Create a catalogue indexer, registered as an adapter, which can populate the ``is_flash`` index. """ return IFlash(context).is_flash grok.global_adapter(flashIndexerAT, name='is_flash')
#Add local roles to a group if IRoleManager.providedBy(issue): for member in users_with_the_role: log( "adding roles (Reviewer) to " + member ) issue.manage_addLocalRoles(member, ['Reviewer']) return @indexer(IIssue) def deadlineIndexer(obj): if obj.end is None: return None return DateTime(obj.deadline.isoformat()) grok.global_adapter(deadlineIndexer, name="deadline") #### # the idea is to provide a way to manage expiring dates to workflow states # so an issue could have start and end dates to its "opened" state # and when it expires a transition (close) is trigered and eventually its script also # # from http://lists.plone.org/pipermail/plone-setup/2006-February/006386.html #### # from DateTime import DateTime # import time # # def applyTransition(self, transition, time_offset): # pc = self.portal_catalog # pw = self.portal_workflow
grok.implements(IEventInfo) class SampleView(grok.View): """ sample view class """ grok.context(IEventInfo) grok.require('zope2.View') grok.name('view') # create index and metadata @indexer(IEventInfo) def signUpFrom_indexer(obj): return obj.signUpFrom grok.global_adapter(signUpFrom_indexer, name='signUpFrom') @indexer(IEventInfo) def signUpEnd_indexer(obj): return obj.signUpEnd grok.global_adapter(signUpEnd_indexer, name='signUpEnd') @indexer(IEventInfo) def happenDate_indexer(obj): return obj.happenDate grok.global_adapter(happenDate_indexer, name='happenDate') @indexer(IEventInfo) def eventCategory_indexer(obj): return obj.eventCategory grok.global_adapter(eventCategory_indexer, name='eventCategory')
description=_(u"Automatically updated report consisting of predefined " u"methods and values"), required=False, ) report_ga = schema.TextLine( title=_(u"Xovi Report"), description=_(u"Automatically updated report consisting of predefined " u"methods and values"), required=False, ) @indexer(IReport) def projectIndexer(obj): return obj.projectId grok.global_adapter(projectIndexer, name="projectId") class Report(Container): grok.implements(IReport) # Add your class methods and properties here pass class View(grok.View): grok.context(IReport) grok.require('zope2.View') grok.name('view') def update(self):
def getTotalMembers(self): allMembers = set() for wsBrain in self.getWorkspaceBrains(): allMembers |= wsBrain.members allMembers |= wsBrain.managers allMembers.add(wsBrain.Creator) return len(allMembers) def getNumWorkspaces(self): return len(self.getWorkspaceBrains()) @indexer(IChallenge) def totalMembersIndexer(context): return context.getTotalMembers() grok.global_adapter(totalMembersIndexer, name="totalMembers") @indexer(IChallenge) def totalEntriesIndexer(context): return context.getTotalEntries() grok.global_adapter(totalEntriesIndexer, name="totalEntries") @indexer(IChallenge) def numWorkspacesIndexer(context): return context.getNumWorkspaces() grok.global_adapter(numWorkspacesIndexer, name="numWorkspaces") class View(grok.View, view_mixins.PortalMembership):
""" image = NamedImage( title=_(u"Image"), description=_(u"Please upload an image"), required=False, ) alt = schema.TextLine( title=_(u"Alt"), description= _(u"Afegeix la descripció que vols que es mostri per temes accessibilitat" ), required=False, ) remoteUrl = schema.TextLine( title=_(u"url"), description=_(u"URL to open"), required=False, ) @indexer(ISlider) def getRemoteUrl(obj): if obj.remoteUrl: return replace_link_variables_by_paths(obj, obj.remoteUrl) grok.global_adapter(getRemoteUrl, name='getRemoteUrl')
@form.validator(field=ISession['description']) def validateDescription(value): if 'php' in value.lower(): raise schema.ValidationError( u"PHP is not for mature audiences.") @form.error_message(error=schema.ValidationError, field=ISession['description']) def yuck(value): return u"Yuck" @indexer(ISession) def tracksIndexer(obj): return obj.tracks grok.global_adapter(tracksIndexer, name="Subject") # Custom content-type class; objects created for this content type will # be instances of this class. Use this class to add content-type specific # methods and properties. Put methods that are mainly useful for rendering # in separate view classes. class Session(Container): grok.implements(ISession) # Add your class methods and properties here # View class # The view will automatically use a similarly named template in # session_templates.
from five import grok from opengever.base.interfaces import ISequenceNumber from opengever.ogds.base.interfaces import IContactInformation from opengever.ogds.base.utils import get_client_id from opengever.task.task import ITask from plone.indexer import indexer from zope.component import getUtility @indexer(ITask) def date_of_completion(obj): # handle 'None' dates. we always need a date for indexing. if obj.date_of_completion is None: return datetime(1970, 1, 1) return obj.date_of_completion grok.global_adapter(date_of_completion, name='date_of_completion') @indexer(ITask) def assigned_client(obj): """Indexes the client of the responsible. Since the he may be assigned to multiple clients, we need to use the client which was selected in the task. """ if not obj.responsible or not obj.responsible_client: return '' else: return obj.responsible_client grok.global_adapter(assigned_client, name='assigned_client')
from five import grok from opengever.base.interfaces import IReferenceNumber, ISequenceNumber from opengever.dossier.behaviors.dossier import IDossierMarker, IDossier from opengever.ogds.base.interfaces import IContactInformation from plone.dexterity.interfaces import IDexterityContent from plone.indexer import indexer from zope.component import getAdapter, getUtility @indexer(IDossierMarker) def startIndexer(obj): aobj = IDossier(obj) if aobj.start is None: return None return aobj.start grok.global_adapter(startIndexer, name="start") @indexer(IDossierMarker) def endIndexer(obj): aobj = IDossier(obj) if aobj.end is None: return None return aobj.end grok.global_adapter(endIndexer, name="end") @indexer(IDossierMarker) def responsibleIndexer(obj): aobj = IDossier(obj) if aobj.responsible is None: