plugin XEP-0277: change affiliations for comments + fixes:
- mbGet now use client instead of profile_key
- fixed max_items handling
- for whitelist access model, if a comments node is created, "member" affiliations are transformed to "publisher"
This is because most of time we want that somebody is able to read a private blog but not write on it, and be able to write a comment.
This commit is contained in:
parent
47cc5f737c
commit
80afa4654c
1 changed files with 15 additions and 9 deletions
|
|
@ -536,8 +536,14 @@ class XEP_0277(object):
|
|||
else:
|
||||
if access == self._p.ACCESS_WHITELIST:
|
||||
# for whitelist access we need to copy affiliations from parent item
|
||||
parent_affiliations = yield self._p.getNodeAffiliations(client, service, node)
|
||||
yield self._p.setNodeAffiliations(client, comments_service, comments_node, parent_affiliations)
|
||||
comments_affiliations = yield self._p.getNodeAffiliations(client, service, node)
|
||||
# …except for "member", that we transform to publisher
|
||||
# because we wants members to be able to write to comments
|
||||
for jid_, affiliation in comments_affiliations.items():
|
||||
if affiliation == 'member':
|
||||
comments_affiliations[jid_] == 'publisher'
|
||||
|
||||
yield self._p.setNodeAffiliations(client, comments_service, comments_node, comments_affiliations)
|
||||
|
||||
if comments_service is None:
|
||||
comments_service = client.jid.userhostJID()
|
||||
|
|
@ -595,30 +601,30 @@ class XEP_0277(object):
|
|||
@param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
|
||||
@param item_ids (list[unicode]): list of item IDs
|
||||
"""
|
||||
client = self.host.getClient(profile_key)
|
||||
service = jid.JID(service) if service else None
|
||||
max_items = None if max_items == C.NO_LIMIT else max_items
|
||||
extra = self._p.parseExtra(extra_dict)
|
||||
return self.mbGet(service, node or None, max_items or None, item_ids, extra.rsm_request, extra.extra, profile_key)
|
||||
return self.mbGet(client, service, node or None, None if max_items==C.NO_LIMIT else None, item_ids, extra.rsm_request, extra.extra)
|
||||
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def mbGet(self, service=None, node=None, max_items=None, item_ids=None, rsm_request=None, extra=None, profile_key=C.PROF_KEY_NONE):
|
||||
def mbGet(self, client, service=None, node=None, max_items=10, item_ids=None, rsm_request=None, extra=None):
|
||||
"""Get some microblogs
|
||||
|
||||
@param service(jid.JID, None): jid of the publisher
|
||||
None to get profile's PEP
|
||||
@param node(unicode, None): node to get (or microblog node if None)
|
||||
@param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
|
||||
@param max_items(int): maximum number of item to get, None for no limit
|
||||
@param item_ids (list[unicode]): list of item IDs
|
||||
@param rsm_request (rsm.RSMRequest): RSM request data
|
||||
@param extra (dict): extra data
|
||||
@param profile_key: %(doc_profile_key)s
|
||||
|
||||
@return: a deferred couple with the list of items and metadatas.
|
||||
"""
|
||||
if node is None:
|
||||
node = NS_MICROBLOG
|
||||
items_data = yield self._p.getItems(service, node, max_items=max_items, item_ids=item_ids, rsm_request=rsm_request, extra=extra, profile_key=profile_key)
|
||||
items_data = yield self._p.getItems(service, node, max_items=max_items, item_ids=item_ids, rsm_request=rsm_request, extra=extra, profile_key=client.profile)
|
||||
serialised = yield self._p.serItemsDataD(items_data, self.item2mbdata)
|
||||
defer.returnValue(serialised)
|
||||
|
||||
|
|
@ -798,7 +804,7 @@ class XEP_0277(object):
|
|||
max_items = None if max_items == C.NO_LIMIT else max_items
|
||||
publishers_type, publishers = self._checkPublishers(publishers_type, publishers)
|
||||
extra = self._p.parseExtra(extra_dict)
|
||||
return self.mbGetFromMany(publishers_type, publishers, max_items or None, extra.rsm_request, extra.extra, profile_key)
|
||||
return self.mbGetFromMany(publishers_type, publishers, None if max_items==C.NO_LIMIT else max_items, extra.rsm_request, extra.extra, profile_key)
|
||||
|
||||
def mbGetFromMany(self, publishers_type, publishers, max_items=None, rsm_request=None, extra=None, profile_key=C.PROF_KEY_NONE):
|
||||
"""Get the published microblogs for a list of groups or jids
|
||||
|
|
@ -855,7 +861,7 @@ class XEP_0277(object):
|
|||
publishers_type, publishers = self._checkPublishers(publishers_type, publishers)
|
||||
extra = self._p.parseExtra(extra_dict)
|
||||
extra_comments = self._p.parseExtra(extra_comments_dict)
|
||||
return self.mbGetFromManyWithComments(publishers_type, publishers, max_items or None, max_comments or None,
|
||||
return self.mbGetFromManyWithComments(publishers_type, publishers, None if max_items==C.NO_LIMIT else max_items, max_comments or None,
|
||||
extra.rsm_request,
|
||||
extra.extra,
|
||||
extra_comments.rsm_request,
|
||||
|
|
|
|||
Loading…
Reference in a new issue