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

autocomplete_blank_fields()

Description

Fill in any blank fields for the resource.

IMPORTANT: Auto completing blank fields with inactive options should be allowed (possibly a system misconfiguration).
This function will NOT exclude inactive nodes because, for required fields, you might end up having no value
after processing the field.

For example:
- when creating a resource, autocomplete_blank_fields() should always be triggered regardless if user has data in its user template.
- when copying resource/ extracting embedded metadata, autocomplete_blank_fields() should not overwrite if there is data
for that field as at this point you probably have the expected data for your field.

Parameters

ColumnTypeDefaultDescription
$resource integer Resource ID
$force_run boolean Allow code to force running this function and update the fields even if there is data.
$return_changes boolean false When true an array of fields changed by autocomplete is returned.
$field_ref integer 0 Optional parameter to specify which metadata field should be processed. Left blank, all fields will be processed (default behaviour).

Return

boolean|array Success/fail or array of changes made

Location

include/resource_functions.php lines 6119 to 6208

Definition

 
function autocomplete_blank_fields($resource$force_run$return_changes falseint $field_ref 0)
    {
    global 
$FIXED_LIST_FIELD_TYPES$lang;

    if((string)(int)
$resource != (string)$resource)
        {
        return 
false;
        }

    
$resource_type ps_value("SELECT resource_type AS `value` FROM resource WHERE ref = ?", ["i",$resource], 0);

    
$sql_set_field '';
    
$sql_set_field_params = array();
    if (
$field_ref 0)
        {
        
$sql_set_field ' AND rtf.ref = ?';
        
$sql_set_field_params = array('i'$field_ref);
        }

    
$fields ps_query(
        
"SELECT rtf.ref, rtf.type, rtf.autocomplete_macro
            FROM resource_type_field rtf
            LEFT JOIN resource_type rt ON rt.ref = ?
            WHERE length(rtf.autocomplete_macro) > 0
                AND (((rtf.global=0 OR rtf.global IS NULL) 
                        AND rt.ref IN (
                            SELECT resource_type 
                                FROM resource_type_field_resource_type rtjoin 
                                WHERE rtjoin.resource_type_field=rtf.ref
                                ))
                    OR (rtf.global=1)
                    ) 
$sql_set_field",
        
array_merge(array("i"$resource_type), $sql_set_field_params),
        
"schema"
    
);
    
    
$fields_updated = array();

    foreach(
$fields as $field)
        {
        
$run_autocomplete_macro $force_run || hook('run_autocomplete_macro');
        
# The autocomplete macro will run if the existing value is blank, or if forced to always run
        
if(count(get_resource_nodes($resource$field['ref'], true)) == || $run_autocomplete_macro)
            {
            
# Autocomplete and update using the returned value
            
$value = eval(eval_check_signed($field['autocomplete_macro']));
            if(
in_array($field['type'], $FIXED_LIST_FIELD_TYPES))
                {
                
# Multiple values are comma separated
                
$autovals str_getcsv((string) $value);
                
$autonodes = array();
                
# Establish an array of nodes from the values
                
foreach($autovals as $autoval)
                    {
                    
$nodeid get_node_id($autoval,$field['ref']);
                    if(
$nodeid !== false)
                        {
                        
$autonodes[] = $nodeid;
                        }
                    }
                
# Add nodes if any were established
                
if (count($autonodes) > 0)
                    {
                    
natsort($autonodes);
                    
add_resource_nodes($resource,$autonodes,false,false);
                    
log_node_changes($resource,$autonodes,array(),$lang["autocomplete_log_note"]);
                    
$fields_updated[$field['ref']] = implode(",",$autonodes);

                    
# If this is a 'joined' field we need to add it to the resource column
                    
$joins get_resource_table_joins();
                    if (
in_array($field['ref'], $joins))
                        {
                        
update_resource_field_column($resource$field['ref'], $value);
                        }
                    }
                }
            else
                {
                
update_field($resource$field['ref'], $value);
                
$fields_updated[$field['ref']] = $value;
                }
            }
        }

    if (
$return_changes)
        {
        return 
$fields_updated;
        }
    return 
true;
    }

This article was last updated 4th December 2024 08:35 Europe/London time based on the source file dated 28th November 2024 12:10 Europe/London time.