Collections functions
Encryption functions
General functions
Theme permission functions
Resource functions

get_user_collections()

Description

Return all collections belonging to or shared with $user

Parameters

ColumnTypeDefaultDescription
$user integer
$find string "" A search string
$order_by string "name" Column to sort by
$sort string "ASC" ASC or DESC sort order
$fetchrows integer -1 How many rows to fetch
$auto_create boolean true Create a default My Collection if one doesn't exist

Return

void

Location

include/collections_functions.php lines 16 to 126

Definition

 
function get_user_collections($user,$find="",$order_by="name",$sort="ASC",$fetchrows=-1,$auto_create=true)
    {
    global 
$usergroup;
    
# Returns a list of user collections.
    
$sql="";
    
$keysql="";
    
$extrasql="";
    if (
$find=="!shared")
        {
        
# only return shared collections
        
$sql=" where (public='1' or c.ref in (select distinct collection from user_collection where user<>'" escape_check($user) . "' union select distinct collection from external_access_keys))";                
        }
    elseif (
strlen($find)==&& !is_numeric($find))
        {
        
# A-Z search
        
$sql=" where c.name like '" escape_check($find) . "%'";
        }
    elseif (
strlen($find)>|| is_numeric($find))
        {  
        
$keywords=split_keywords($find);
        
$keyrefs=array();
        
$keysql="";
        for (
$n=0;$n<count($keywords);$n++)
            {
            
$keyref=resolve_keyword($keywords[$n],false);
            if (
$keyref!==false) {$keyrefs[]=$keyref;}

            
$keysql.=" join collection_keyword k" $n " on k" $n ".collection=ref and (k" $n ".keyword='$keyref')";    
            
//$keysql="or keyword in (" . join (",",$keyrefs) . ")";
            
}

 
        
//$sql.="and (c.name rlike '$search' or u.username rlike '$search' or u.fullname rlike '$search' $spcr )";
        
}

    if(
$sql == "")
        {
        
$sql "WHERE c.`type` = '" COLLECTION_TYPE_STANDARD "'";
        }
    else
        {
        
$sql .= "AND c.`type` = '" COLLECTION_TYPE_STANDARD "'";
        }

    
# Include themes in my collecions? 
    # Only filter out themes if $themes_in_my_collections is set to false in config.php
       
global $themes_in_my_collections;
       if (!
$themes_in_my_collections)
           {
        if (
$sql==""){$sql=" where ";} else {$sql.=" and ";}    
           
$sql.=" (length(c.theme)=0 or c.theme is null) ";
           }
    global 
$anonymous_login,$username,$anonymous_user_session_collection;

    if(isset(
$anonymous_login) && ($username==$anonymous_login) && $anonymous_user_session_collection)
        {
        
// Anonymous user - only get the user's own collections that are for this session - although we can still join to 
        // get collections that have been specifically shared with the anonymous user 
        
if('' == $sql)
            {
            
$extrasql " where ";
            }
        else
            {
            
$extrasql .= " and ";
            }

        global 
$rs_session;

        
$extrasql .= " (c.session_id='{$rs_session}')";
        }

   
    
$order_sort="";
    if (
$order_by!="name"){$order_sort=" order by $order_by $sort";}
   
    
$return="select * from (select c.*,u.username,u.fullname,count(r.resource) count from user u join collection c on u.ref=c.user and c.user='" escape_check($user) . "' left outer join collection_resource r on c.ref=r.collection $sql $extrasql group by c.ref
    union
    select c.*,u.username,u.fullname,count(r.resource) count from user_collection uc join collection c on uc.collection=c.ref and uc.user='" 
escape_check($user) . "' and c.user<>'" escape_check($user) . "' left outer join collection_resource r on c.ref=r.collection left join user u on c.user=u.ref $sql group by c.ref
    union
    select c.*,u.username,u.fullname,count(r.resource) count from usergroup_collection gc join collection c on gc.collection=c.ref and gc.usergroup='
$usergroup' and c.user<>'" escape_check($user) . "' left outer join collection_resource r on c.ref=r.collection left join user u on c.user=u.ref $sql group by c.ref) clist $keysql group by ref $order_sort";

    
$return=sql_query($return);
    
    if (
$order_by=="name"){
        if (
$sort=="ASC"){usort($return'collections_comparator');}
        else if (
$sort=="DESC"){usort($return,'collections_comparator_desc');}
    }
    
    
// To keep Default Collection creation consistent: Check that user has at least one collection of his/her own  (not if collection result is empty, which may include shares), 
    
$hasown=false;
    for (
$n=0;$n<count($return);$n++){
        if (
$return[$n]['user']==$user){
            
$hasown=true;
        }
    }

    if (!
$hasown && $auto_create && $find==""# User has no collections of their own, and this is not a search. Make a new 'Default Collection'
        
{
        
# No collections of one's own? The user must have at least one Default Collection
        
global $usercollection;
        
$name=get_mycollection_name($user);
        
$usercollection=create_collection ($user,$name,0,1); // make not deletable
        
set_user_collection($user,$usercollection);
        
        
# Recurse to send the updated collection list.
        
return get_user_collections($user,$find,$order_by,$sort,$fetchrows,false);
        }

    return 
$return;
    }

This article was last updated 11th July 2020 21:35 Europe/London time based on the source file dated 9th July 2020 17:22 Europe/London time.