cleaning up vocabularies and field for pfwbged
This commit is contained in:
parent
dbedab053e
commit
253decc80e
|
@ -4,35 +4,25 @@ from zope.interface import Interface
|
|||
from zope.component import adapter
|
||||
|
||||
from zope import schema
|
||||
from zope.schema.interfaces import IChoice
|
||||
|
||||
from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile
|
||||
|
||||
from z3c.form.interfaces import IFormLayer, IFieldWidget, ITextWidget
|
||||
from z3c.form.widget import FieldWidget
|
||||
from z3c.form import form, button, field
|
||||
from plone.z3cform import layout
|
||||
from z3c.form import form, field
|
||||
from z3c.form.browser import text
|
||||
#from plone.formwidget.autocomplete.widget import AutocompleteFieldWidget
|
||||
|
||||
|
||||
from plone.formwidget.autocomplete.widget import AutocompleteBase, AutocompleteSelectionWidget
|
||||
from plone.formwidget.autocomplete.widget import AutocompleteSelectionWidget
|
||||
from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget
|
||||
|
||||
#from plone.formwidget.autocomplete import AutocompleteFieldWidget
|
||||
from plone.dexterity.browser.view import DefaultView
|
||||
#from Products.Five.browser import BrowserView
|
||||
|
||||
#from plone.dexterity.interfaces import IDexterityFTI
|
||||
#from plone.dexterity.utils import getAdditionalSchemata
|
||||
|
||||
from Products.Five import BrowserView
|
||||
from Products.CMFCore.utils import getToolByName
|
||||
from zope.schema.vocabulary import SimpleVocabulary
|
||||
|
||||
|
||||
from collective.dms.thesaurus import _
|
||||
from collective.dms.thesaurus.vocabulary import InternalThesaurusSource
|
||||
|
||||
class IAutocompleteSearchWidget(IAutocompleteWidget):
|
||||
"""Simple autocomplete search input widget
|
||||
|
@ -79,16 +69,15 @@ class DmsThesaurusForm(form.Form):
|
|||
ignoreContext = True
|
||||
template = ViewPageTemplateFile('thesaurus_form.pt')
|
||||
|
||||
#from .searchform import SearchForm
|
||||
|
||||
class DmsThesaurusView(DefaultView):
|
||||
|
||||
def renderForm(self):
|
||||
form = DmsThesaurusForm(self.context, self.request)
|
||||
#form = SearchForm(self.context, self.request)
|
||||
form.update()
|
||||
return form.render()
|
||||
|
||||
|
||||
class ListKeywordsView(BrowserView):
|
||||
|
||||
_items = None
|
||||
|
|
|
@ -12,7 +12,7 @@ from plone.supermodel import model
|
|||
from . import _
|
||||
from .keywordsfield import ThesaurusKeywords
|
||||
from .equivalencesfield import ThesaurusKeywordEquivalences
|
||||
from .dmsthesaurus import NoThesaurusFound
|
||||
from .vocabulary import NoThesaurusFound
|
||||
|
||||
class IDmsKeyword(model.Schema):
|
||||
""" """
|
||||
|
|
|
@ -1,32 +1,14 @@
|
|||
#import datetime
|
||||
#from zope import schema
|
||||
#from zope.component import adapts
|
||||
from zope.interface import implements
|
||||
#from zope.component import adapter
|
||||
#from zope.interface import implementer
|
||||
#from z3c.form.widget import FieldWidget, SequenceWidget
|
||||
|
||||
#from plone.dexterity.content import Container
|
||||
from plone.dexterity.schema import DexteritySchemaPolicy
|
||||
from plone.dexterity.content import Container
|
||||
|
||||
#from zope.schema.interfaces import ISet
|
||||
#from zope.schema.interfaces import IFromUnicode
|
||||
#from z3c.form.interfaces import IFormLayer, IFieldWidget, ISequenceWidget
|
||||
|
||||
|
||||
from plone.supermodel import model
|
||||
|
||||
from . import _
|
||||
|
||||
from .entrypointsfield import EntryPoints
|
||||
|
||||
#from plone.autoform import directives as form
|
||||
#from plone.directives.form import default_value
|
||||
|
||||
class NoThesaurusFound(Exception):
|
||||
"""No thesaurus found"""
|
||||
|
||||
class IDmsThesaurus(model.Schema):
|
||||
""" """
|
||||
|
||||
|
|
|
@ -1,33 +1,21 @@
|
|||
#from Acquisition import aq_parent
|
||||
|
||||
from zope.interface import implements, implementer
|
||||
from zope.component import adapter
|
||||
|
||||
from zope import schema
|
||||
from zope.schema.interfaces import IChoice, IContextSourceBinder
|
||||
#from zope.schema.interfaces import IVocabularyFactory
|
||||
from zope.schema.vocabulary import SimpleVocabulary
|
||||
#from zope.schema.vocabulary import SimpleTerm
|
||||
#from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
|
||||
from zope.schema.interfaces import IChoice
|
||||
from zope.schema.interfaces import ISet
|
||||
from zope.schema.interfaces import IFromUnicode
|
||||
|
||||
from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile
|
||||
|
||||
from z3c.form.interfaces import IFormLayer, IFieldWidget
|
||||
#from z3c.form.interfaces import IWidget
|
||||
from z3c.form.widget import FieldWidget
|
||||
#from z3c.form.widget import Widget
|
||||
#from z3c.form.browser.select import SelectWidget
|
||||
|
||||
from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget
|
||||
from plone.formwidget.autocomplete.widget import AutocompleteMultiSelectionWidget
|
||||
|
||||
from Products.CMFCore.utils import getToolByName
|
||||
|
||||
#from . import _
|
||||
|
||||
from collective.dms.thesaurus.vocabulary import InternalThesaurusSource
|
||||
#from collective.dms.thesaurus.vocabulary import InternalThesaurusSource
|
||||
|
||||
class IEntryPointChoice(IChoice):
|
||||
"""Thesaurus Entry Point Choice Item.
|
||||
|
@ -45,10 +33,9 @@ class EntryPoints(schema.Set):
|
|||
|
||||
def __init__(self, **kw):
|
||||
vt = kw.pop('value_type',
|
||||
#EntryPointChoice(
|
||||
schema.Choice(
|
||||
required=False,
|
||||
source=InternalThesaurusSource())
|
||||
vocabulary=u'dms.thesaurus.internalrefs')
|
||||
)
|
||||
super(EntryPoints, self).__init__(value_type=vt, **kw)
|
||||
|
||||
|
|
|
@ -1,17 +1,11 @@
|
|||
from Acquisition import aq_parent
|
||||
|
||||
from zope import schema
|
||||
from zope.interface import implements, implementer
|
||||
from zope.component import adapter
|
||||
|
||||
#from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
|
||||
from zope.schema.interfaces import ISet
|
||||
from zope.schema.interfaces import IFromUnicode
|
||||
from z3c.form.interfaces import IFormLayer, IFieldWidget, ISequenceWidget
|
||||
#from z3c.form.interfaces import IWidget
|
||||
from z3c.form.widget import FieldWidget, SequenceWidget
|
||||
#from z3c.form.widget import Widget
|
||||
#from z3c.form.browser.select import SelectWidget
|
||||
|
||||
from . import _
|
||||
|
||||
|
@ -23,10 +17,9 @@ class ThesaurusKeywords(schema.Set):
|
|||
|
||||
def __init__(self, display_backrefs=False, **kw):
|
||||
self.display_backrefs = display_backrefs
|
||||
vocabulary = kw.pop('vocabulary', u'dms.thesaurus.global')
|
||||
super(ThesaurusKeywords, self).__init__(
|
||||
value_type=schema.Choice(vocabulary=vocabulary),
|
||||
**kw)
|
||||
voc = kw.pop('vocabulary', u'dms.thesaurus.simple')
|
||||
vt = kw.pop('value_type', schema.Choice(vocabulary=voc))
|
||||
super(ThesaurusKeywords, self).__init__(value_type=vt, **kw)
|
||||
|
||||
|
||||
class IThesaurusKeywordsWidget(ISequenceWidget):
|
||||
|
|
|
@ -1,81 +1,51 @@
|
|||
from zope.interface import Interface
|
||||
from zope.interface import implements
|
||||
from five import grok
|
||||
|
||||
from zope.schema.interfaces import IContextSourceBinder
|
||||
|
||||
#from zope.component import queryUtility
|
||||
from zope.schema.interfaces import IVocabularyFactory
|
||||
#from zope.schema.interfaces import ISource, IContextSourceBinder
|
||||
from zope.schema.vocabulary import SimpleVocabulary
|
||||
#from zope.schema.vocabulary import SimpleTerm
|
||||
|
||||
from Products.CMFCore.utils import getToolByName
|
||||
|
||||
class NoThesaurusFound(Exception):
|
||||
"""No thesaurus found"""
|
||||
|
||||
|
||||
class IMainThesaurus(Interface):
|
||||
""" Marker interface for main thesaurus container
|
||||
"""
|
||||
|
||||
class ThesaurusVocabulary(SimpleVocabulary):
|
||||
|
||||
def search(self, query_string):
|
||||
q = query_string.lower()
|
||||
return [kw for kw in self._terms if q in kw.title.lower()]
|
||||
|
||||
|
||||
class InternalThesaurusSource(object):
|
||||
implements(IContextSourceBinder)
|
||||
|
||||
_vocabulary = None
|
||||
class SimpleThesaurusSource(object):
|
||||
"""This basic vocabulary is here mainly for demo purpose.
|
||||
It is not meant to be used when a Plone site contains more than one
|
||||
thesaurus.
|
||||
"""
|
||||
grok.implements(IVocabularyFactory)
|
||||
|
||||
def __call__(self, context):
|
||||
if self._vocabulary is not None:
|
||||
return self._vocabulary
|
||||
catalog = getToolByName(context, 'portal_catalog')
|
||||
path = '/'.join(context.getPhysicalPath())
|
||||
thesaurus = catalog(portal_type='dmsthesaurus')
|
||||
if not len(thesaurus):
|
||||
raise NoThesaurusFound
|
||||
# build vocab from first thesaurus returned by catalog
|
||||
thesaurus_path = '/'.join(thesaurus[0].getPath())
|
||||
results = catalog(portal_type='dmskeyword',
|
||||
path={'query': path,'depth': 1})
|
||||
path={'query': thesaurus_path,'depth': 1})
|
||||
keywords = [x.getObject() for x in results]
|
||||
def cmp_keyword(x, y):
|
||||
return cmp(x.title.lower(), y.title.lower())
|
||||
keywords.sort(cmp_keyword)
|
||||
#keyword_ids = [x.id for x in keywords]
|
||||
_c = SimpleVocabulary.createTerm
|
||||
keyword_terms = [ _c(x.id, x.id, x.title) for x in keywords ]
|
||||
self._vocabulary = ThesaurusVocabulary(keyword_terms)
|
||||
|
||||
def __iter__(self):
|
||||
# hack to let schema editor handle the field
|
||||
yield u'DO NOT TOUCH'
|
||||
|
||||
|
||||
class GlobalThesaurusSource(object):
|
||||
implements(IContextSourceBinder)
|
||||
|
||||
def __call__(self, context):
|
||||
catalog = getToolByName(context, 'portal_catalog')
|
||||
results = catalog(portal_type='dmskeyword')
|
||||
keywords = [x.getObject() for x in results]
|
||||
def cmp_keyword(x, y):
|
||||
return cmp(x.title, y.title)
|
||||
keywords.sort(cmp_keyword)
|
||||
#keyword_ids = [x.id for x in keywords]
|
||||
keyword_terms = [SimpleVocabulary.createTerm(
|
||||
x.id, x.id, x.title) for x in keywords]
|
||||
return ThesaurusVocabulary(keyword_terms)
|
||||
return SimpleVocabulary(keyword_terms)
|
||||
|
||||
def __iter__(self):
|
||||
# hack to let schema editor handle the field
|
||||
yield u'DO NOT TOUCH'
|
||||
|
||||
|
||||
#grok.global_utility(GlobalThesaurusSource,
|
||||
# name=u'dms.thesaurus.global')
|
||||
grok.global_utility(SimpleThesaurusSource,
|
||||
name=u'dms.thesaurus.simple')
|
||||
|
||||
|
||||
class KeywordFromSameThesaurusSource(object):
|
||||
"""
|
||||
This vocabulary is used for keywords that reference one another
|
||||
"""This vocabulary is used for keywords that reference one another
|
||||
inside the same thesaurus. It should not be used for referencing
|
||||
keywords from other content types.
|
||||
"""
|
||||
|
@ -90,11 +60,7 @@ class KeywordFromSameThesaurusSource(object):
|
|||
results = catalog(portal_type='dmskeyword',
|
||||
path={'query': thesaurus_path,'depth': 1})
|
||||
keywords = [x.getObject() for x in results]
|
||||
def cmp_keyword(x, y):
|
||||
return cmp(x.title, y.title)
|
||||
keywords.sort(cmp_keyword)
|
||||
|
||||
keyword_ids = [x.id for x in keywords]
|
||||
keyword_terms = [SimpleVocabulary.createTerm(
|
||||
x.id, x.id, x.title) for x in keywords]
|
||||
return SimpleVocabulary(keyword_terms)
|
||||
|
|
Reference in New Issue