diff --git a/tabellio/searchform/configure.zcml b/tabellio/searchform/configure.zcml
index 51eaaf2..e5f9b93 100644
--- a/tabellio/searchform/configure.zcml
+++ b/tabellio/searchform/configure.zcml
@@ -26,6 +26,18 @@
class=".form.ListAuthorsView"
permission="zope2.View"/>
+
+
+
+
+
+
+
diff --git a/tabellio/searchform/docsearch.pt b/tabellio/searchform/docsearch.pt
index ab9431f..a183fd2 100644
--- a/tabellio/searchform/docsearch.pt
+++ b/tabellio/searchform/docsearch.pt
@@ -126,7 +126,7 @@
diff --git a/tabellio/searchform/form.py b/tabellio/searchform/form.py
index 66a877e..f7ad29f 100644
--- a/tabellio/searchform/form.py
+++ b/tabellio/searchform/form.py
@@ -61,6 +61,57 @@ class ListAuthorsView(BrowserView):
s.append(object)
return '\n'.join(['%s|%s' % (x.Title(), x.id) for x in s])
+class ListPolgroupsView(BrowserView):
+ def get_folder_at_path(self, path):
+ current = self.portal
+ for part in path.split('/'):
+ if not part:
+ continue
+ current = getattr(current, part)
+ return current
+
+ _polgroups_folder = None
+ def polgroups_folder(self):
+ if self._polgroups_folder:
+ return self._polgroups_folder
+ path = self.settings.polgroupsPath
+ self._polgroups_folder = self.get_folder_at_path(path)
+ return self._polgroups_folder
+ polgroups_folder = property(polgroups_folder)
+
+ def __call__(self):
+ self.portal = getToolByName(self.context, 'portal_url').getPortalObject()
+ self.settings = component.getUtility(IRegistry).forInterface(ITabellioSettings, False)
+
+ self.request.response.setHeader('Content-type', 'text/plain')
+ s = []
+ q = self.request.form.get('q').lower()
+ for object in self.polgroups_folder.objectValues():
+ if object.portal_type != 'themis.datatypes.polgroup':
+ continue
+ if q in object.id or q in object.Title().lower():
+ s.append(object)
+ return '\n'.join(['%s|%s' % (x.Title(), x.id) for x in s])
+
+
+class ListTopicsView(BrowserView):
+ def __call__(self):
+ from plone.i18n.normalizer.fr import normalizer
+ query_terms = [normalizer.normalize(x).lower() for x in self.request.form.get('q').split()]
+ topics = tabellio.config.utils.get_topics_dict()
+ self.request.response.setHeader('Content-type', 'text/plain')
+ r = []
+ for key, value in topics.items():
+ for term in query_terms:
+ if not term in value[1]:
+ break
+ else:
+ r.append('%s|%s' % (value[0], key))
+ if len(r) > 30:
+ break
+ return '\n'.join(sorted(r))
+
+
class IAuthorsWidget(ITextWidget):
pass
@@ -68,10 +119,28 @@ class AuthorsWidget(text.TextWidget):
implements(IAuthorsWidget)
klass = u'authors'
-
def FieldAuthorsWidget(field, request):
return widget.FieldWidget(field, AuthorsWidget(request))
+class IPolgroupsWidget(ITextWidget):
+ pass
+
+class PolgroupsWidget(text.TextWidget):
+ implements(IPolgroupsWidget)
+ klass = u'polgroups'
+
+def FieldPolgroupsWidget(field, request):
+ return widget.FieldWidget(field, PolgroupsWidget(request))
+
+class ITopicsWidget(ITextWidget):
+ pass
+
+class TopicsWidget(text.TextWidget):
+ implements(ITopicsWidget)
+ klass = u'topics'
+
+def FieldTopicsWidget(field, request):
+ return widget.FieldWidget(field, TopicsWidget(request))
class IFolderWithDocuments(interface.Interface):
pass
@@ -130,12 +199,11 @@ class IDocumentSearch(interface.Interface):
nosuite = schema.TextLine(title=_(u'Suite Number'), required=False)
doctype = schema.Choice(title=_(u'Type'), required=False,
source=possible_document_types)
- #subjects =
ttitle = schema.TextLine(title=_(u'Title'), required=False)
text = schema.TextLine(title=_(u'Text'), required=False)
authors = schema.TextLine(title=_(u'Authors'), required=False)
-
- # polgroups
+ polgroups = schema.TextLine(title=_(u'Political Groups'), required=False)
+ topics = schema.TextLine(title=_(u'Topics'), required=False)
session = schema.Choice(title=_(u'Legislature / Session'), required=False,
source=possible_sessions)
start = schema.Date(title=_(u'Start'), required=False)
@@ -147,6 +215,8 @@ class DocumentSearchForm(form.Form):
prefix = 'document'
fields = field.Fields(IDocumentSearch)
fields['authors'].widgetFactory = FieldAuthorsWidget
+ fields['polgroups'].widgetFactory = FieldPolgroupsWidget
+ fields['topics'].widgetFactory = FieldTopicsWidget
ignoreContext = True
template = ViewPageTemplateFile('form_templates/view_effectivesearch.pt')
@@ -170,10 +240,10 @@ class IDossierSearch(interface.Interface):
nodos = schema.TextLine(title=_(u'Dossier Number'), required=False)
dostype = schema.Choice(title=_(u'Type'), required=False,
source=possible_dossier_types)
- #subjects =
ttitle = schema.TextLine(title=_(u'Title'), required=False)
authors = schema.TextLine(title=_(u'Authors'), required=False)
- # polgroups
+ polgroups = schema.TextLine(title=_(u'Political Groups'), required=False)
+ topics = schema.TextLine(title=_(u'Topics'), required=False)
session = schema.Choice(title=_(u'Legislature / Session'), required=False,
source=possible_sessions)
start = schema.Date(title=_(u'Start'), required=False)
@@ -185,6 +255,8 @@ class DossierSearchForm(form.Form):
method = 'get'
fields = field.Fields(IDossierSearch)
fields['authors'].widgetFactory = FieldAuthorsWidget
+ fields['polgroups'].widgetFactory = FieldPolgroupsWidget
+ fields['topics'].widgetFactory = FieldTopicsWidget
ignoreContext = True
template = ViewPageTemplateFile('form_templates/view_dossier_search.pt')
@@ -207,10 +279,10 @@ class IQuestionSearch(interface.Interface):
questype = schema.Choice(title=_(u'Type'), required=False,
source=possible_question_types)
- #subjects =
ttitle = schema.TextLine(title=_(u'Title'), required=False)
authors = schema.TextLine(title=_(u'Authors'), required=False)
- # polgroups
+ polgroups = schema.TextLine(title=_(u'Political Groups'), required=False)
+ topics = schema.TextLine(title=_(u'Topics'), required=False)
session = schema.Choice(title=_(u'Legislature / Session'), required=False,
source=possible_sessions)
start = schema.Date(title=_(u'Start'), required=False)
@@ -221,6 +293,8 @@ class QuestionSearchForm(form.Form):
prefix = 'question'
fields = field.Fields(IQuestionSearch)
fields['authors'].widgetFactory = FieldAuthorsWidget
+ fields['polgroups'].widgetFactory = FieldPolgroupsWidget
+ fields['topics'].widgetFactory = FieldTopicsWidget
ignoreContext = True
template = ViewPageTemplateFile('form_templates/view_question_search.pt')
@@ -244,11 +318,11 @@ class IDocumentPfbSearch(interface.Interface):
nodoc = schema.TextLine(title=_(u'Document Number'), required=False)
doctype = schema.Choice(title=_(u'Type'), required=False,
source=possible_document_types)
- #subjects =
ttitle = schema.TextLine(title=_(u'Title'), required=False)
text = schema.TextLine(title=_(u'Text'), required=False)
authors = schema.TextLine(title=_(u'Authors'), required=False)
- # polgroups
+ polgroups = schema.TextLine(title=_(u'Political Groups'), required=False)
+ topics = schema.TextLine(title=_(u'Topics'), required=False)
session = schema.Choice(title=_(u'Legislature / Session'), required=False,
source=possible_sessions)
start = schema.Date(title=_(u'Start'), required=False)
@@ -260,8 +334,11 @@ class IDocumentPfbSearch(interface.Interface):
class DocumentPfbSearchForm(form.Form):
method = 'get'
+ prefix = 'document'
fields = field.Fields(IDocumentPfbSearch)
fields['authors'].widgetFactory = FieldAuthorsWidget
+ fields['polgroups'].widgetFactory = FieldPolgroupsWidget
+ fields['topics'].widgetFactory = FieldTopicsWidget
ignoreContext = True
template = ViewPageTemplateFile('form_templates/view_pfbdocsearch.pt')
@@ -296,11 +373,11 @@ class IGlobalSearchForm(interface.Interface):
questype = schema.Choice(title=_(u'Type'), required=False,
source=possible_question_types)
- #subjects =
ttitle = schema.TextLine(title=_(u'Title'), required=False)
text = schema.TextLine(title=_(u'Text'), required=False)
authors = schema.TextLine(title=_(u'Authors'), required=False)
- # polgroups
+ polgroups = schema.TextLine(title=_(u'Poltical Groups'), required=False)
+ topics = schema.TextLine(title=_(u'Topics'), required=False)
session = schema.Choice(title=_(u'Legislature / Session'), required=False,
source=possible_sessions)
start = schema.Date(title=_(u'Start'), required=False)
@@ -315,7 +392,7 @@ class SearchView(BrowserView):
batch_macros = ViewPageTemplateFile('batch_macros.pt')
def search_results(self, search_type):
-
+ print 'search type:', search_type
if self.request.form.get('document.widgets.search_type_is_document'):
GlobalSearchForm.prefix = 'document'
elif self.request.form.get('dossier.widgets.search_type_is_dossier'):
@@ -327,12 +404,14 @@ class SearchView(BrowserView):
f.update()
data, errors = f.extractData()
+ print 'got data:', data
kw = {}
print 'data:', data
if not data.get('search_type_is_%s' % search_type):
+ print ' stopping here'
return None
if data.get('ttitle'):
@@ -367,7 +446,12 @@ class SearchView(BrowserView):
'operator': 'and'}
if data.get('polgroups'):
- pass # XXX : kw['polgroupsDoc'] = {'query': ['ps', 'ecolo'], 'operator': 'and'}
+ kw['polgroupsDoc'] = {'query': data.get('polgroups').strip().split(),
+ 'operator': 'and'}
+
+ if data.get('topics'):
+ kw['topics'] = {'query': data.get('topics').strip().split(),
+ 'operator': 'and'}
if data.get('sort_on') == 'Type':
kw['sort_on'] = 'doctype'
diff --git a/tabellio/searchform/polgroups_input.pt b/tabellio/searchform/polgroups_input.pt
new file mode 100644
index 0000000..f0e7bfc
--- /dev/null
+++ b/tabellio/searchform/polgroups_input.pt
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/tabellio/searchform/topics_input.pt b/tabellio/searchform/topics_input.pt
new file mode 100644
index 0000000..7e71909
--- /dev/null
+++ b/tabellio/searchform/topics_input.pt
@@ -0,0 +1,6 @@
+
+
+
+