From 74ff838ee8efdc2bde2542b9f6447197e050156b Mon Sep 17 00:00:00 2001 From: David Convent Date: Fri, 5 Apr 2013 17:37:22 +0200 Subject: [PATCH] Started view for dmsthesaurus (pair work with Fred) --- .../dms/thesaurus/browser/configure.zcml | 9 +++++ .../thesaurus/browser/dmsthesaurus_view.pt | 29 +++++++++++++++ .../dms/thesaurus/browser/thesaurus_form.pt | 8 ++++ .../dms/thesaurus/browser/thesaurusview.py | 37 ++++++++++++++++--- src/collective/dms/thesaurus/dmsthesaurus.py | 32 +++++++++++++++- src/collective/dms/thesaurus/vocabulary.py | 19 +++++++--- src/collective/dms/thesaurus/widgets.zcml | 1 + 7 files changed, 122 insertions(+), 13 deletions(-) create mode 100644 src/collective/dms/thesaurus/browser/dmsthesaurus_view.pt create mode 100644 src/collective/dms/thesaurus/browser/thesaurus_form.pt diff --git a/src/collective/dms/thesaurus/browser/configure.zcml b/src/collective/dms/thesaurus/browser/configure.zcml index 3fde954..798eb71 100644 --- a/src/collective/dms/thesaurus/browser/configure.zcml +++ b/src/collective/dms/thesaurus/browser/configure.zcml @@ -28,4 +28,13 @@ permission="zope2.View" /> + + diff --git a/src/collective/dms/thesaurus/browser/dmsthesaurus_view.pt b/src/collective/dms/thesaurus/browser/dmsthesaurus_view.pt new file mode 100644 index 0000000..51892c2 --- /dev/null +++ b/src/collective/dms/thesaurus/browser/dmsthesaurus_view.pt @@ -0,0 +1,29 @@ + + + + + +

+
+ +
+ +
    + +
  • + +
+ + + + + + diff --git a/src/collective/dms/thesaurus/browser/thesaurus_form.pt b/src/collective/dms/thesaurus/browser/thesaurus_form.pt new file mode 100644 index 0000000..260ea59 --- /dev/null +++ b/src/collective/dms/thesaurus/browser/thesaurus_form.pt @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/src/collective/dms/thesaurus/browser/thesaurusview.py b/src/collective/dms/thesaurus/browser/thesaurusview.py index e15768c..58411a3 100644 --- a/src/collective/dms/thesaurus/browser/thesaurusview.py +++ b/src/collective/dms/thesaurus/browser/thesaurusview.py @@ -1,16 +1,41 @@ -from zope.component import getUtility +from zope import schema +from zope.interface import Interface -from zope.app.intid.interfaces import IIntIds +from z3c.form import form, button, field +from plone.z3cform import layout +from plone.formwidget.autocomplete.widget import AutocompleteFieldWidget -from zc.relation.interfaces import ICatalog +from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile 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 collective.dms.thesaurus.dmsthesaurus import GlobalThesaurusSource -class DmsThesaurusView(DefaultView): - """The default view for DMSThesaurus. - """ +class IThesaurusForm(Interface): + keyword_search = schema.Choice(title=u"Search for keyword", + source=GlobalThesaurusSource(), required=False) + + +class DmsThesaurusForm(form.Form): + fields = field.Fields(IThesaurusForm) + #fields['keyword_search'].widgetFactory = AutocompleteFieldWidget + ignoreContext = True + template = ViewPageTemplateFile('thesaurus_form.pt') + + @button.buttonAndHandler(u'Ok') + def handle_ok(self, action): + data, errors = self.extractData() + print data, errors + +class DmsThesaurusView(BrowserView): + + def renderForm(self): + form = DmsThesaurusForm(self.context, self.request) + form.update() + return form.render() + \ No newline at end of file diff --git a/src/collective/dms/thesaurus/dmsthesaurus.py b/src/collective/dms/thesaurus/dmsthesaurus.py index 6b27e9a..0a64dd6 100644 --- a/src/collective/dms/thesaurus/dmsthesaurus.py +++ b/src/collective/dms/thesaurus/dmsthesaurus.py @@ -1,16 +1,27 @@ #import datetime -#from zope import schema +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.formwidget.autocomplete.widget import AutocompleteMultiSelectionWidget + from plone.supermodel import model from . import _ +from vocabulary import GlobalThesaurusSource + #from plone.autoform import directives as form #from plone.directives.form import default_value @@ -18,9 +29,28 @@ class NoThesaurusFound(Exception): """No thesaurus found""" +class IEntryPoints(ISet): + pass + +class EntryPoints(schema.Set): + implements(IEntryPoints, IFromUnicode) + + +@adapter(IEntryPoints, IFormLayer) +@implementer(IFieldWidget) +def EntryPointsFieldWidget(field, request): + return FieldWidget(field, AutocompleteMultiSelectionWidget(request)) + + class IDmsThesaurus(model.Schema): """ """ + entry_points = EntryPoints( + title=_(u"Entry Points"), + value_type=schema.Choice(source=GlobalThesaurusSource()) + ) + + class DmsThesaurus(Container): """ """ implements(IDmsThesaurus) diff --git a/src/collective/dms/thesaurus/vocabulary.py b/src/collective/dms/thesaurus/vocabulary.py index 524828b..cb217b1 100644 --- a/src/collective/dms/thesaurus/vocabulary.py +++ b/src/collective/dms/thesaurus/vocabulary.py @@ -1,7 +1,9 @@ from zope.interface import Interface -#from zope.interface import implements +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 @@ -14,9 +16,14 @@ 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 GlobalThesaurusSource(object): - grok.implements(IVocabularyFactory) + implements(IContextSourceBinder) def __call__(self, context): catalog = getToolByName(context, 'portal_catalog') @@ -25,18 +32,18 @@ class GlobalThesaurusSource(object): def cmp_keyword(x, y): return cmp(x.title, y.title) keywords.sort(cmp_keyword) - keyword_ids = [x.id for x in keywords] + #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) + return ThesaurusVocabulary(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(GlobalThesaurusSource, +# name=u'dms.thesaurus.global') class KeywordFromSameThesaurusSource(object): """ diff --git a/src/collective/dms/thesaurus/widgets.zcml b/src/collective/dms/thesaurus/widgets.zcml index a6a197a..9f334da 100644 --- a/src/collective/dms/thesaurus/widgets.zcml +++ b/src/collective/dms/thesaurus/widgets.zcml @@ -28,5 +28,6 @@ template="thesaurus-keyword-equivs-display.pt" /> +