@@ -374,6 +374,30 @@ def group_dictize(group: model.Group, context: Context,
374374 if packages_field :
375375 def get_packages_for_this_group (group_ : model .Group ,
376376 just_the_count : bool = False ):
377+ if just_the_count :
378+ # Get dataset count from Member table
379+ query = model .Session .query (model .Member .id ).filter (
380+ model .Member .group_id == group_ .id ,
381+ model .Member .table_name == 'package' ,
382+ model .Member .state == 'active'
383+ )
384+
385+ if group_ .is_organization :
386+ is_group_member = (context .get ('user' ) and
387+ authz .has_user_permission_for_group_or_org (
388+ group_ .id , context .get ('user' ), 'read' ))
389+
390+ # Make sure not to show private datasets to non-members
391+ if not is_group_member and not config .get ('ckan.auth.allow_dataset_collaborators' ):
392+ query = query .join (
393+ model .Package ,
394+ model .Member .table_id == model .Package .id
395+ ).filter (model .Package .private == False )
396+
397+ member_count = query .count ()
398+
399+ return member_count , []
400+
377401 # Ask SOLR for the list of packages for this org/group
378402 q : dict [str , Any ] = {
379403 'facet' : 'false' ,
@@ -382,10 +406,7 @@ def get_packages_for_this_group(group_: model.Group,
382406
383407 if group_ .is_organization :
384408 q ['fq' ] = '+owner_org:"{0}"' .format (group_ .id )
385- else :
386- q ['fq' ] = '+groups:"{0}"' .format (group_ .name )
387409
388- if group_ .is_organization :
389410 is_group_member = (context .get ('user' ) and
390411 authz .has_user_permission_for_group_or_org (
391412 group_ .id , context .get ('user' ), 'read' ))
@@ -394,16 +415,17 @@ def get_packages_for_this_group(group_: model.Group,
394415 else :
395416 if config .get ('ckan.auth.allow_dataset_collaborators' ):
396417 q ['include_private' ] = True
418+ else :
419+ q ['fq' ] = '+groups:"{0}"' .format (group_ .name )
397420
398- if not just_the_count :
399- # package_search limits 'rows' anyway, so this is only if you
400- # want even fewer
401- try :
402- packages_limit = context ['limits' ]['packages' ]
403- except KeyError :
404- del q ['rows' ] # leave it to package_search to limit it
405- else :
406- q ['rows' ] = packages_limit
421+ # package_search limits 'rows' anyway, so this is only if you
422+ # want even fewer
423+ try :
424+ packages_limit = context ['limits' ]['packages' ]
425+ except KeyError :
426+ del q ['rows' ] # leave it to package_search to limit it
427+ else :
428+ q ['rows' ] = packages_limit
407429
408430 search_context = cast (
409431 Context , dict ((k , v ) for (k , v ) in context .items ()
0 commit comments