Coding standards
Security in ResourceSpace
Developer reference
Database
Action functions
Admin functions
Ajax functions
Annotation functions
API functions
Collections functions
Comment functions
Config functions
CSV export functions
Dash functions
Debug functions
Encryption functions
Facial recognition functions
File functions
General functions
Language functions
Log functions
Login functions
Message functions
Migration functions
Node functions
PDF functions
Plugin functions
Render functions
Reporting functions
Request functions
Research functions
Slideshow functions
Theme permission functions
User functions
Video functions
Database functions
Metadata functions
Resource functions
Search functions
Map functions
Job functions
Tab functions
Test functions

email_collection_request()

Description

Email a collection request to the team responsible for dealing with requests. Request mode 0 only (non managed).

Parameters

ColumnTypeDefaultDescription
$ref integer
$details mixed
bool { $external_email:
$email_from
$baseurl
$username
$useremail
$lang
$userref
$resource_type_request_emails
$resource_request_reason_required
$resource_type_request_emails_and_email_notify
$admin_resource_access_notifications;
$external_email mixed

Location

include/request_functions.php lines 263 to 427

Definition

 
function email_collection_request($ref$details$external_email): bool
{
    global 
$applicationname,$email_from,$baseurl,$username,$useremail,$lang,$userref,$resource_type_request_emails,
    
$resource_request_reason_required,$resource_type_request_emails_and_email_notify,$admin_resource_access_notifications;

    if (
trim($details) == "" && $resource_request_reason_required) {
        return 
false;
    }

    
$message = new ResourceSpaceUserNotification();

    
$templatevars['url'] = $baseurl "/?c=" $ref;
    
$collectiondata get_collection($ref);
    if (isset(
$collectiondata["name"])) {
        
$templatevars["title"] = $collectiondata["name"];
    }

    
# Create a copy of the collection which is the one sent to the team. This is so that the admin
    # user can e-mail back an external URL to the collection if necessary, to 'unlock' full (open) access.
    # The user cannot then gain access to further resources by adding them to their original collection as the
    # shared collection is a copy.
    # A complicated scenario that is best avoided using 'managed requests'.
    
$newcopy create_collection(-1$lang["requestcollection"]);
    
copy_collection($ref$newcopy);

    
// Make sure a collection does not include resources that may have been hidden from the user due
    // to archive state, resource type or access changes and that they are not aware they are requesting.
    // Without this a full copy can confuse the request administrator
    
$col_visible do_search("!collection" $ref'''''', -1'desc'false0falsefalse''falsefalsetrue);
    
$colresources get_collection_resources($ref);
    foreach (
$colresources as $colresource) {
        if (!
in_array($colresourcearray_column($col_visible"ref"))) {
            
remove_resource_from_collection($colresource$newcopyfalse);
        }
    }

    
$ref $newcopy;

    
$templatevars["requesturl"] = $baseurl "/?c=" $ref;

    if (isset(
$userref)) {
        
$templatevars['username'] = $username " (" $useremail ")";
        
$userdata get_user($userref);
        if (
$userdata === false) {
            return 
false;
        } 
# Unable to get user credentials
        
$templatevars["fullname"] = $userdata["fullname"];
    }

    
reset($_POST);
    foreach (
$_POST as $key => $value) {
        if (
strpos($key"_label") !== false) {
            
# Add custom field
            
$setting trim($_POST[str_replace("_label"""$key)]);
            if (
$setting != "") {
                
$message->append_text($value ": " $_POST[str_replace("_label"""$key)] . "<br /><br />");
            }
        }
    }
    if (
trim($details) != "") {
        
$message->append_text("lang_requestreason");
        
$message->append_text(": " newlines($details) . "<br /><br />");
    }

    
# Add custom fields
    
global $custom_request_fields,$custom_request_required;
    if (isset(
$custom_request_fields)) {
        
$custom explode(","$custom_request_fields);
        
# Required fields?
        
if (isset($custom_request_required)) {
            
$required explode(","$custom_request_required);
        }
        for (
$n 0$n count($custom); $n++) {
            if (isset(
$required) && in_array($custom[$n], $required) && getval("custom" $n"") == "") {
                return 
false# Required field was not set.
            
}
            
$message->append_text("i18n_" $custom[$n]);
            
$message->append_text(": " getval("custom" $n"") . "<br /><br />");
        }
    }

    
$amendedmessage hook('amend_request_message''', array($userref$ref, isset($collectiondata) ? $collectiondata : array(), $message, isset($collectiondata)));

    if (
$amendedmessage) {
        
$message $amendedmessage;
    }

    
$templatevars["requestreason"] = $message->get_text();

    
// Create notification message
    
$notification_message = clone $message;
    
$notification_message->set_subject($applicationname ": ");
    
$notification_message->append_subject("lang_requestcollection");
    
$notification_message->append_subject(" - "  $ref);
    
$introtext[] = ["lang_user_made_request"];
    
$introtext[] = ["<br /><br />"];
    if (isset(
$username)) {
        
$introtext[] = ["lang_username"];
        
$introtext[] = [": "];
        
$introtext[] = [$username];
        
$introtext[] = ["<br /><br />"];
    }
    
$notification_message->prepend_text_multi($introtext);
    
$notification_message->append_text("lang_viewcollection");
    
$notification_message->append_text(":");
    
$notification_message->url $templatevars['requesturl'];
    
$notification_message->user_preference = ["user_pref_resource_access_notifications" => ["requiredvalue" => true,"default" => $admin_resource_access_notifications]];
    
$notification_message->template "emailcollectionrequest";
    
$notification_message->templatevars $templatevars;

    
$notify_users = [];
    
$notify_emails = [];
    
# Legacy: Check if alternative request email notification address is set, only valid if collection contains resources of the same type
    
if (isset($resource_type_request_emails) && !can_use_owner_field()) {
        
$requestrestypes ps_array("SELECT r.resource_type AS value FROM collection_resource cr 
                                    LEFT JOIN resource r ON cr.resource=r.ref WHERE cr.collection = ?"
, array("i",$ref));
        
$requestrestypes array_unique($requestrestypes);
        if (
count($requestrestypes) == && isset($resource_type_request_emails[$requestrestypes[0]])) {
            
// Is this a system user? If so we can send a notification instead of an email
            
$emailusers get_user_by_email($resource_type_request_emails[$requestrestypes[0]]);
            if (
is_array($emailusers) && count($emailusers) > 0) {
                
$notify_users array_merge($notify_users$emailusers);
            } else {
                
$notify_emails[] = $resource_type_request_emails[$requestrestypes[0]];
            }
        }
    }

    if ((
count($notify_users) == && count($notify_emails) == 0) || $resource_type_request_emails_and_email_notify) {
        
$admin_notify_users get_notification_users("RESOURCE_ACCESS");
        
$notify_users array_merge($notify_users$admin_notify_users);
    }
    
$notify_users array_keys(get_notification_users_by_owner_field($notify_users$colresources));
    
send_user_notification($notify_users$notification_message);
    foreach (
$notify_emails as $notify_email) {
        
send_mail($notify_email$applicationname ": " $lang["requestcollection"] . " - $ref"$message->get_text(), $email_from$email_from"emailcollectionrequest"$templatevars);
    }

    
$userconfirmmessage = clone $message;
    
$userconfirmmessage->set_subject($applicationname ": ");
    
$userconfirmmessage->append_subject(" - "  $ref);
    
$userconfirmmessage->prepend_text("<br /><br />");
    
$userconfirmmessage->prepend_text("lang_requestsenttext");
    
$userconfirmmessage->url $templatevars['url'];
    
$userconfirmmessage->template "emailusercollectionrequest";
    
$userconfirmmessage->templatevars $templatevars;

    
# $userref and $useremail will be that of the internal requestor
    # - We need to send the $userconfirmmessage to the internal requestor saying that their request has been submitted
    
if (isset($userref)) {
        
send_user_notification([$userref], $userconfirmmessage);
    }

    
# $userref and $useremail will be null for external requestor
    # - We can only send an email to the email address provided on the external request
    
if (!isset($userref) && filter_var($external_emailFILTER_VALIDATE_EMAIL)) {
        
send_mail($external_email$applicationname ": " $lang["requestsent"] . " - $ref"$userconfirmmessage->get_text(), $email_fromnull"emailusercollectionrequest"$templatevars);
    }

    
# Increment the request counter for each resource in the requested collection
    
ps_query("UPDATE resource set request_count=request_count+1
               where ref in(select cr.resource from collection_resource cr where cr.collection=? and cr.resource = ref)"
, array("i",$ref));

    return 
true;
}

This article was last updated 11th February 2025 20:35 Europe/London time based on the source file dated 21st January 2025 15:20 Europe/London time.