comparison sat_pubsub/pgsql_storage.py @ 323:8496af26be45

mam: added filtering by category
author Goffi <goffi@goffi.org>
date Thu, 07 Jan 2016 16:20:43 +0100
parents 54d90c73b8b5
children e73e42b4f6ff
comparison
equal deleted inserted replaced
322:54d90c73b8b5 323:8496af26be45
55 55
56 from zope.interface import implements 56 from zope.interface import implements
57 57
58 from twisted.internet import defer 58 from twisted.internet import defer
59 from twisted.words.protocols.jabber import jid 59 from twisted.words.protocols.jabber import jid
60 from twisted.python import log
60 61
61 from wokkel import generic 62 from wokkel import generic
62 from wokkel.pubsub import Subscription 63 from wokkel.pubsub import Subscription
63 64
64 from sat_pubsub import error 65 from sat_pubsub import error
699 700
700 arguments query, args, authorized_groups, unrestricted and ext_data are the same as for 701 arguments query, args, authorized_groups, unrestricted and ext_data are the same as for
701 _getItems 702 _getItems
702 """ 703 """
703 # SOURCES 704 # SOURCES
705 query.append("FROM nodes INNER JOIN items USING (node_id)")
706
704 if unrestricted: 707 if unrestricted:
705 query.append("""FROM nodes 708 query_filters = ["WHERE node_id=%s"]
706 INNER JOIN items USING (node_id)
707 WHERE node_id=%s""")
708 args.append(self.nodeDbId) 709 args.append(self.nodeDbId)
709 else: 710 else:
711 query.append("LEFT JOIN item_groups_authorized USING (item_id)")
710 args.append(self.nodeDbId) 712 args.append(self.nodeDbId)
711 if authorized_groups: 713 if authorized_groups:
712 get_groups = " or (items.access_model='roster' and groupname in %s)" 714 get_groups = " or (items.access_model='roster' and groupname in %s)"
713 args.append(authorized_groups) 715 args.append(authorized_groups)
714 else: 716 else:
715 get_groups = "" 717 get_groups = ""
716 718
717 query.append("""FROM nodes 719 query_filters = ["WHERE node_id=%s AND (items.access_model='open'" + get_groups + ")"]
718 INNER JOIN items USING (node_id)
719 LEFT JOIN item_groups_authorized USING (item_id)
720 WHERE node_id=%s AND
721 (items.access_model='open'""" + get_groups + ")")
722 720
723 # FILTERS 721 # FILTERS
724 if 'filters' in ext_data: # MAM filters 722 if 'filters' in ext_data: # MAM filters
725 for filter_ in ext_data['filters']: 723 for filter_ in ext_data['filters']:
726 if filter_.var == 'start': 724 if filter_.var == 'start':
727 query.append("AND date>=%s") 725 query_filters.append("AND date>=%s")
728 args.append(filter_.value) 726 args.append(filter_.value)
729 if filter_.var == 'end': 727 elif filter_.var == 'end':
730 query.append("AND date<=%s") 728 query_filters.append("AND date<=%s")
731 args.append(filter_.value) 729 args.append(filter_.value)
732 if filter_.var == 'with': 730 elif filter_.var == 'with':
733 jid_s = filter_.value 731 jid_s = filter_.value
734 if '/' in jid_s: 732 if '/' in jid_s:
735 query.append("AND publisher=%s") 733 query_filters.append("AND publisher=%s")
736 args.append(filter_.value) 734 args.append(filter_.value)
737 else: 735 else:
738 query.append("AND publisher LIKE %s") 736 query_filters.append("AND publisher LIKE %s")
739 args.append(u"{}%".format(filter_.value)) 737 args.append(u"{}%".format(filter_.value))
738 elif filter_.var == const.MAM_FILTER_CATEGORY:
739 query.append("LEFT JOIN item_categories USING (item_id)")
740 query_filters.append("AND category=%s")
741 args.append(filter_.value)
742 else:
743 log.msg("WARNING: unknown filter: {}".format(filter_.encode('utf-8')))
744
745 query.extend(query_filters)
740 746
741 return "ORDER BY item_id DESC" 747 return "ORDER BY item_id DESC"
742 748
743 def _getItems(self, cursor, authorized_groups, unrestricted, maxItems, ext_data): 749 def _getItems(self, cursor, authorized_groups, unrestricted, maxItems, ext_data):
744 self._checkNodeExists(cursor) 750 self._checkNodeExists(cursor)