$option_value) { if (in_array($option_name, ["h", "help"])) { echo $help_text; exit(0); } if (in_array($option_name, ['g', 'glue']) && is_string($option_value)) { $glue = $option_value; } } $glue = $glue ?? ''; $fields_to_join = array_values(array_filter($argv, function ($v) { return is_int_loose($v) && $v > 0; })); $out = array_pop($fields_to_join) ?? 0; if (!($out > 0 && count($fields_to_join) >= 2)) { logScript("ERROR: Insufficient arguments passed. You need at least two fields to join and one field to store the result. See help for more." . PHP_EOL); echo $help_text; exit(1); } logScript("Script will save all joined data to field #{$out}"); logScript("Script set to join data using the following glue: '{$glue}'"); $resources_updates = []; foreach ($fields_to_join as $rtf_ref) { $rtf_data = get_resource_type_field($rtf_ref); if ($rtf_data === false) { logScript("WARNING: Unable to find metadata field #{$rtf_ref}. Skipping..."); continue; } elseif (!in_array($rtf_data['type'], $TEXT_FIELD_TYPES)) { logScript( sprintf( 'WARNING: Unsupported metadata field type (%s) found for field #%s . Only text fields are supported!', strtolower($lang[$field_types[$rtf_data['type']]]), $rtf_ref ) ); continue; } $data = get_data_by_field(null, $rtf_ref); foreach ($data as $resource_field_data) { $joined_value = $resources_updates[$resource_field_data['resource']] ?? ''; $joined_value .= $glue . $resource_field_data['value']; $resources_updates[$resource_field_data['resource']] = $joined_value; } } foreach ($resources_updates as $resource => $new_field_value) { logScript("Processing resource #{$resource} ..."); $new_field_value = ltrim($new_field_value, $glue); $update_err = []; if (update_field($resource, $out, $new_field_value, $update_err)) { logScript("Updated resource #{$resource}"); } else { logScript( sprintf( 'ERROR: Failed to update resource #%s with new value "%s". Reason(s): %s', $resource, $new_field_value, implode('; ', $update_err) ) ); } } logScript("Script ran successfully!");