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.
collective.dms.basecontent/src/collective/dms/basecontent/browser/table.py

113 lines
3.6 KiB
Python
Raw Normal View History

2013-04-07 18:54:03 +02:00
import datetime
from five import grok
from zope.cachedescriptors.property import CachedProperty
2013-07-21 09:47:52 +02:00
from zope.component import getMultiAdapter
2013-07-01 10:41:49 +02:00
from zope.i18nmessageid import MessageFactory
2013-04-07 18:54:03 +02:00
import z3c.table.table
2013-07-02 14:49:30 +02:00
import z3c.table.column
2013-07-21 09:47:52 +02:00
from z3c.table.interfaces import IBatchProvider
2013-07-02 14:49:30 +02:00
2013-07-21 09:47:52 +02:00
from plone.batching.interfaces import IBatch
2013-07-18 13:58:50 +02:00
from plone import api
2013-07-15 15:03:57 +02:00
2013-07-01 10:41:49 +02:00
PMF = MessageFactory('plone')
2013-04-07 18:54:03 +02:00
grok.templatedir('templates')
class TableViewlet(grok.Viewlet):
grok.baseclass()
grok.template('filesviewlet')
__table__ = NotImplemented
label = NotImplemented
noresult_message = NotImplemented
def update(self):
self.table = self.__table__(self.context, self.request)
self.table.viewlet = self
self.table.update()
class Table(z3c.table.table.Table):
cssClassEven = u'even'
cssClassOdd = u'odd'
2013-07-02 15:13:27 +02:00
cssClasses = {'table': 'listing nosort'}
2013-04-07 18:54:03 +02:00
sortOn = None
2013-07-21 09:47:52 +02:00
batchSize = 10000 # not used
startBatchingAt = 10000 # not used
batchProviderName = 'plonebatch'
def batchRows(self):
# this is not self.rows that is batched, but self.values
pass
def updateBatch(self):
if IBatch.providedBy(self.values):
self.batchProvider = getMultiAdapter((self.context,
self.request, self), IBatchProvider,
name=self.batchProviderName)
self.batchProvider.update()
2013-04-07 18:54:03 +02:00
@CachedProperty
def translation_service(self):
2013-07-18 13:58:50 +02:00
return api.portal.get_tool('translation_service')
2013-04-07 18:54:03 +02:00
@CachedProperty
def wtool(self):
2013-07-18 13:58:50 +02:00
return api.portal.get_tool('portal_workflow')
2013-04-07 18:54:03 +02:00
2013-07-02 14:49:30 +02:00
@CachedProperty
def portal_url(self):
2013-07-18 13:58:50 +02:00
return api.portal.get().absolute_url()
2013-07-02 14:49:30 +02:00
2013-04-07 18:54:03 +02:00
def update(self):
super(Table, self).update()
2013-07-19 20:04:36 +02:00
def format_date(self, date, long_format=None, time_only=None):
2013-04-07 18:54:03 +02:00
if date is None:
return u""
2013-07-19 20:04:36 +02:00
# If date is a datetime object, isinstance(date, datetime.date)
# returns True, so we use type here.
if type(date) == datetime.date:
2013-04-07 18:54:03 +02:00
date = date.strftime('%Y/%m/%d')
2013-07-19 20:04:36 +02:00
elif type(date) == datetime.datetime:
date = date.strftime('%Y/%m/%d %H:%M')
2013-04-07 18:54:03 +02:00
return self.translation_service.ulocalized_time(
date,
2013-07-19 20:04:36 +02:00
long_format=long_format,
time_only=time_only,
2013-04-07 18:54:03 +02:00
context=self.context,
domain='plonelocales',
request=self.request)
def renderRow(self, row, cssClass=None):
from .column import StateColumn, get_value
isSelected = self.isSelectedRow(row)
if isSelected and self.cssClassSelected and cssClass:
cssClass = '%s %s' % (self.cssClassSelected, cssClass)
elif isSelected and self.cssClassSelected:
cssClass = self.cssClassSelected
cells = [self.renderCell(item, col, colspan)
for item, col, colspan in row]
state_column = [x for x in row if isinstance(x[1], StateColumn)]
if state_column:
state_column = state_column[0]
state_value = get_value(self.request, state_column[0], 'review_state')
if state_value:
cssClass += ' row-state-%s' % state_value
2018-07-11 21:37:36 +02:00
from pfwbged.collection.searchview import TaskTypeColumn
type_column = [x for x in row if isinstance(x[1], TaskTypeColumn)]
if type_column:
type_column = type_column[0]
type_value = get_value(type_column[0], 'portal_type')
if type_value:
cssClass += ' row-type-%s' % type_value
cssClass = self.getCSSClass('tr', cssClass)
return u'\n <tr%s>%s\n </tr>' % (cssClass, u''.join(cells))