示例#1
0
            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')
示例#2
0
# 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.")
示例#4
0
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
示例#5
0
        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)
    
示例#7
0
                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)
示例#8
0
            # 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)
示例#9
0
    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):
示例#10
0
# 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')
示例#11
0
    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
示例#12
0
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)
示例#13
0
    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')
示例#14
0
    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

示例#15
0
    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()
示例#16
0
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
示例#17
0
    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')
示例#18
0
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')
示例#19
0
# 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')
示例#20
0
        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')
示例#21
0
        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
示例#22
0
    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',
示例#23
0
        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):
示例#24
0
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)
示例#25
0
            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)
示例#26
0
        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)
示例#27
0
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')
示例#28
0
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')
示例#29
0
        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

示例#30
0
    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")

示例#31
0
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)
示例#32
0
        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)
示例#33
0
    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')
示例#34
0
文件: institution.py 项目: vwc/a-map
        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")
示例#35
0
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
示例#36
0
文件: blog_entry.py 项目: vwc/mf
    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,
示例#37
0
            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:
示例#38
0
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")
示例#40
0
        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")
示例#41
0
        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)
示例#42
0

@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')

示例#43
0
文件: material.py 项目: kbat/obonato

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(
示例#45
0
#!/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()

示例#46
0
        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")
示例#48
0
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")
示例#49
0
        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')
示例#50
0
    #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
示例#51
0
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')
示例#52
0
    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')
示例#53
0
        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):
示例#54
0
    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):
示例#55
0
    """

    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.
示例#57
0
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')
示例#58
0
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: