diff --git a/setup.py b/setup.py
index 77febb0..0326a8b 100755
--- a/setup.py
+++ b/setup.py
@@ -44,6 +44,7 @@ setup(name='collective.dms.basecontent',
'setuptools',
'five.grok',
'collective.documentviewer',
+ 'collective.select2',
'plone.api',
'plone.app.dexterity',
'plone.namedfile',
diff --git a/src/collective/dms/basecontent/configure.zcml b/src/collective/dms/basecontent/configure.zcml
index 4aacfb1..bc725ef 100644
--- a/src/collective/dms/basecontent/configure.zcml
+++ b/src/collective/dms/basecontent/configure.zcml
@@ -3,6 +3,7 @@
xmlns:grok="http://namespaces.zope.org/grok"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
+ xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="collective.dms.basecontent">
@@ -68,4 +69,14 @@
for=".dmsfile.IDmsFile"
factory=".dmsfile.DmsFileWriteFile"/>
+
+
+
+
diff --git a/src/collective/dms/basecontent/widget.py b/src/collective/dms/basecontent/widget.py
index a226284..6990ea2 100644
--- a/src/collective/dms/basecontent/widget.py
+++ b/src/collective/dms/basecontent/widget.py
@@ -1,12 +1,12 @@
-import zope.component
-
-from zope.schema.interfaces import ISource, IContextSourceBinder
-from zope.interface import implementer
import z3c.form.interfaces
-
-from z3c.form import interfaces, util, value
-
+import zope.component
+from collective.select2.browser import BaseSearch
from collective.z3cform.chosen.widget import AjaxChosenMultiSelectionWidget
+from z3c.form import interfaces
+from zope.component import getUtility
+from zope.interface import implementer
+from zope.schema.interfaces import IVocabularyFactory
+
class CustomAjaxChosenMultiSelectionWidget(AjaxChosenMultiSelectionWidget):
@property
@@ -25,6 +25,7 @@ class CustomAjaxChosenMultiSelectionWidget(AjaxChosenMultiSelectionWidget):
source.extra_default_values = adapter.get()
return source
+
@implementer(z3c.form.interfaces.IFieldWidget)
def AjaxChosenMultiFieldWidget(field, request):
widget = z3c.form.widget.FieldWidget(field,
@@ -32,3 +33,30 @@ def AjaxChosenMultiFieldWidget(field, request):
widget.populate_select = True
widget.ignoreMissing = True
return widget
+
+
+class LDAPEmailsSearch(BaseSearch):
+ """Search for LDAP emails, allow dynamic option selection"""
+ def results(self, search_term, add_terms=False):
+ factory = getUtility(
+ IVocabularyFactory,
+ 'collective.dms.basecontent.ldap_emails',
+ )
+ vocabulary = factory(self.context)
+ found = False
+
+ for term in vocabulary:
+ if search_term in term.token:
+ found = True
+ yield {
+ "text": term.value,
+ "id": term.value,
+ }
+
+ # make the search term a selectable value
+ # if it doesn't match any existing email
+ if add_terms and not found:
+ yield {
+ "text": search_term,
+ "id": search_term
+ }