This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
tabellio.searchform/tabellio/searchform/simple.py

164 lines
6.1 KiB
Python

from zope import interface, schema
from z3c.form import field, button
from plone.z3cform.layout import wrap_form
from Products.CMFCore.utils import getToolByName
from z3c.form.ptcompat import ViewPageTemplateFile
from z3c.relationfield.schema import RelationChoice, RelationList
from plone.formwidget.contenttree import ObjPathSourceBinder
from tabellio.searchform.interfaces import MessageFactory as _
from Products.Five import BrowserView
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
import form
import cmpfunctions
class SimpleSearchView(BrowserView):
batch_macros = ViewPageTemplateFile('batch_macros.pt')
js_macros = ViewPageTemplateFile('js_macros.pt')
def deputy_search_form(self):
f = form.DeputySearchForm(self.context, self.request)
f.update()
return f.render()
def document_pfb_search_form(self):
f = form.DocumentPfbSearchForm(self.context, self.request)
f.update()
return f.render()
def document_search_form(self):
f = form.DocumentSearchForm(self.context, self.request)
f.update()
return f.render()
def dossier_search_form(self):
f = form.DossierSearchForm(self.context, self.request)
f.update()
return f.render()
def question_search_form(self):
f = form.QuestionSearchForm(self.context, self.request)
f.update()
return f.render()
def event_search_form(self):
f = form.EventSearchForm(self.context, self.request)
f.update()
return f.render()
def deputy_form_url(self):
catalog = getToolByName(self.context, 'portal_catalog')
try:
return catalog(
portal_type='Folder',
object_provides=('tabellio.webviews.deputy.IDeputiesAndOthersFolderView',
'tabellio.webviews.deputy.IPfbDeputiesFolderView',
'tabellio.webviews.deputy.IFolderView'),
limit=1)[0].getObject().absolute_url()
except IndexError:
return '#'
def docdos_form_url(self):
catalog = getToolByName(self.context, 'portal_catalog')
try:
return catalog(
portal_type='Folder',
object_provides=('tabellio.searchform.form.IFolderWithPfbDocuments',
'tabellio.searchform.form.IFolderWithDocuments'),
limit=1)[0].getObject().absolute_url()
except IndexError:
return '#'
def portal_url(self):
return getToolByName(self.context, 'portal_url').getPortalPath()
def event_form_url(self):
return self.portal_url() + '/eventsearch'
def deputy_results(self):
catalog = getToolByName(self.context, 'portal_catalog')
if not self.request.form.get('SearchableText'):
return []
sorton = self.request.form.get('deputies-sort')
c = catalog(
portal_type=['themis.datatypes.deputy'],
SearchableText=self.request.form.get('SearchableText'),
sort_on="sortable_title", sort_order='ascending')
if sorton == 'polgroup':
def cmp_by_polgroup(x, y):
xo = x.getObject()
yo = y.getObject()
if (xo.polgroup is None or xo.polgroup.to_object is None) and (
yo.polgroup is None or yo.polgroup.to_object is None):
return 0
if (xo.polgroup is None or xo.polgroup.to_object is None):
return -1
if (yo.polgroup is None or yo.polgroup.to_object is None):
return 1
return cmp(xo.polgroup.to_object.id, yo.polgroup.to_object.id)
c = list(c)
c.sort(cmp_by_polgroup)
return c
else:
return c
def page_results(self):
catalog = getToolByName(self.context, 'portal_catalog')
if not self.request.form.get('SearchableText'):
return []
return catalog(
portal_type=['Document', 'File', 'Folder', 'Link'],
SearchableText=self.request.form.get('SearchableText'),
sort_on='created', sort_order='descending')
def doc_results(self):
catalog = getToolByName(self.context, 'portal_catalog')
if not self.request.form.get('SearchableText'):
return []
sorton = self.request.form.get('docs-sort', 'session')
search_query = self.request.form.get('SearchableText')
try:
int(search_query)
except ValueError:
c = catalog(
portal_type=['tabellio.documents.dossier',
'tabellio.documents.document',
'tabellio.documents.question'],
SearchableText=search_query)
else:
c = catalog(
portal_type=['tabellio.documents.document',
'tabellio.documents.dossier'],
no=search_query)
if sorton == 'session':
cmpf = cmpfunctions.Cmp().cmp_session
elif sorton == 'type':
cmpf = cmpfunctions.Cmp().cmp_multitype
elif sorton == 'number':
cmpf = cmpfunctions.Cmp().cmp_number
return sorted(c, cmpf);
def event_results(self):
catalog = getToolByName(self.context, 'portal_catalog')
if not self.request.form.get('SearchableText'):
return []
return catalog(
portal_type=['tabellio.agenda.parlevent', 'tabellio.agenda.event',
'tabellio.agenda.comevent'],
SearchableText=self.request.form.get('SearchableText'),
sort_on='start', sort_order='descending')
def get_batchlinkparams(self):
d = dict()
for key in self.request.form:
d[key] = self.request.form[key]
if type(d[key]) is str:
d[key] = unicode(d[key], 'utf-8').encode('utf-8')
elif type(d[key]) is unicode:
d[key] = d[key].encode('utf-8')
return d