1156 |
1156 |
cls=misc.JSONEncoder)
|
1157 |
1157 |
|
1158 |
1158 |
def get_filterable_field_types(self):
|
1159 |
|
types = ['string', 'email', 'date', 'item', 'bool', 'items', 'period-date']
|
|
1159 |
types = ['string', 'email', 'date', 'item', 'bool', 'items', 'period-date', 'user-id']
|
1160 |
1160 |
if get_publisher().is_using_postgresql():
|
1161 |
1161 |
types.append('date')
|
1162 |
1162 |
return types
|
... | ... | |
1165 |
1165 |
r = TemplateIO(html=True)
|
1166 |
1166 |
|
1167 |
1167 |
waitpoint_status = self.formdef.workflow.get_waitpoint_status()
|
1168 |
|
period_fake_fields = [
|
|
1168 |
fake_fields = [
|
1169 |
1169 |
FakeField('start', 'period-date', _('Start')),
|
1170 |
1170 |
FakeField('end', 'period-date', _('End')),
|
|
1171 |
FakeField('user', 'user-id', _('User'), addable=False),
|
1171 |
1172 |
]
|
1172 |
1173 |
default_filters = self.get_default_filters(mode)
|
1173 |
1174 |
|
1174 |
1175 |
filter_fields = []
|
1175 |
|
for field in period_fake_fields + self.get_formdef_fields():
|
|
1176 |
for field in fake_fields + self.get_formdef_fields():
|
1176 |
1177 |
field.enabled = False
|
1177 |
1178 |
if field.type not in self.get_filterable_field_types() + ['status']:
|
1178 |
1179 |
continue
|
... | ... | |
1244 |
1245 |
r += DateWidget(filter_field_key, title=filter_field.label,
|
1245 |
1246 |
value=filter_field_value, render_br=False).render()
|
1246 |
1247 |
|
|
1248 |
elif filter_field.type == 'user-id':
|
|
1249 |
r += HiddenWidget(filter_field_key, value=filter_field_value).render()
|
|
1250 |
if filter_field_value:
|
|
1251 |
filtered_user = get_publisher().user_class.get(filter_field_value, ignore_errors=True)
|
|
1252 |
widget = StringWidget('_' + filter_field_key, title=filter_field.label,
|
|
1253 |
value=filtered_user.display_name if filtered_user else _('Unknown'),
|
|
1254 |
readonly=True, render_br=False)
|
|
1255 |
widget._parsed = True # make sure value is not replaced by request query
|
|
1256 |
r += widget.render()
|
|
1257 |
|
1247 |
1258 |
elif filter_field.type in ('item', 'items'):
|
1248 |
1259 |
filter_field.required = False
|
1249 |
1260 |
|
... | ... | |
1307 |
1318 |
r += htmltext('<div style="display: none;">')
|
1308 |
1319 |
r += htmltext('<ul id="field-filter">')
|
1309 |
1320 |
for field in filter_fields:
|
1310 |
|
r += htmltext('<li><input type="checkbox" name="filter-%s"') % field.id
|
|
1321 |
addable = getattr(field, 'addable', True)
|
|
1322 |
r += htmltext('<li %s>') % ('' if addable else 'hidden')
|
|
1323 |
r += htmltext('<input type="checkbox" name="filter-%s"') % field.id
|
1311 |
1324 |
if field.enabled:
|
1312 |
1325 |
r += htmltext(' checked="checked"')
|
1313 |
1326 |
r += htmltext(' id="fields-filter-%s"') % field.id
|
... | ... | |
1526 |
1539 |
return 'all'
|
1527 |
1540 |
|
1528 |
1541 |
def get_criterias_from_query(self):
|
1529 |
|
period_fake_fields = [
|
|
1542 |
fake_fields = [
|
1530 |
1543 |
FakeField('start', 'period-date', _('Start')),
|
1531 |
1544 |
FakeField('end', 'period-date', _('End')),
|
1532 |
1545 |
FakeField('start-mtime', 'period-date', _('Start (modification time)')),
|
1533 |
1546 |
FakeField('end-mtime', 'period-date', _('End (modification time)')),
|
|
1547 |
FakeField('user', 'user-id', _('User')),
|
1534 |
1548 |
]
|
1535 |
|
filter_fields = []
|
1536 |
1549 |
criterias = []
|
1537 |
1550 |
|
1538 |
1551 |
filters_dict = {}
|
... | ... | |
1540 |
1553 |
filters_dict.update(self.view.get_filters_dict())
|
1541 |
1554 |
filters_dict.update(get_request().form)
|
1542 |
1555 |
|
1543 |
|
for filter_field in period_fake_fields + self.get_formdef_fields():
|
|
1556 |
for filter_field in fake_fields + self.get_formdef_fields():
|
1544 |
1557 |
if filter_field.type not in self.get_filterable_field_types():
|
1545 |
1558 |
continue
|
1546 |
1559 |
|
... | ... | |
1552 |
1565 |
if filters_dict.get('filter-%s' % filter_field.varname):
|
1553 |
1566 |
filter_field_key = 'filter-%s' % filter_field.varname
|
1554 |
1567 |
|
|
1568 |
if filter_field.type == 'user-id':
|
|
1569 |
# convert uuid based filter into local id filter
|
|
1570 |
name_id = filters_dict.get('filter-user-uuid')
|
|
1571 |
if name_id:
|
|
1572 |
nameid_users = get_publisher().user_class.get_users_with_name_identifier(name_id)
|
|
1573 |
get_request().form['filter-user'] = filters_dict['filter-user'] = 'on'
|
|
1574 |
if nameid_users:
|
|
1575 |
filters_dict['filter-user-value'] = str(nameid_users[0].id)
|
|
1576 |
get_request().form['filter-user-value'] = filters_dict['filter-user-value']
|
|
1577 |
else:
|
|
1578 |
filters_dict['filter-user-value'] = '-1'
|
|
1579 |
get_request().form['filter-user-value'] = '-1'
|
|
1580 |
|
1555 |
1581 |
if filters_dict.get('filter-%s' % filter_field.id):
|
1556 |
1582 |
# if there's a filter-%(id)s, it is used to enable the actual
|
1557 |
1583 |
# filter, and the value will be found in filter-%s-value.
|
... | ... | |
1579 |
1605 |
elif filter_field.id == 'end-mtime':
|
1580 |
1606 |
criterias.append(LessOrEqual('last_update_time', filter_date_value))
|
1581 |
1607 |
criterias[-1]._label = '%s: %s' % (filter_field.label, filter_field_value)
|
|
1608 |
elif filter_field.type == 'user-id':
|
|
1609 |
criterias.append(Equal('user_id', filter_field_value))
|
1582 |
1610 |
elif filter_field.type in ('item', 'items') and filter_field_value not in (None, 'None'):
|
1583 |
1611 |
if filter_field.type == 'item':
|
1584 |
1612 |
criterias.append(Equal('f%s' % filter_field.id, filter_field_value))
|
... | ... | |
2928 |
2956 |
|
2929 |
2957 |
|
2930 |
2958 |
class FakeField(object):
|
2931 |
|
def __init__(self, id, type_, label):
|
|
2959 |
def __init__(self, id, type_, label, addable=True):
|
2932 |
2960 |
self.id = id
|
2933 |
2961 |
self.type = type_
|
2934 |
2962 |
self.label = label
|
2935 |
2963 |
self.fake = True
|
2936 |
2964 |
self.varname = id.replace('-', '_')
|
2937 |
2965 |
self.store_display_value = None
|
|
2966 |
self.addable = addable
|
2938 |
2967 |
|
2939 |
2968 |
def get_view_value(self, value):
|
2940 |
2969 |
# just here to quack like a duck
|
2941 |
|
-
|