- Coding standards
- Security in ResourceSpace
- Developer reference
- Database
-
- Table: activity_log
- Table: annotation
- Table: annotation_node
- Table: collection
- Table: collection_keyword
- Table: collection_log
- Table: collection_resource
- Table: collection_savedsearch
- Table: comment
- Table: daily_stat
- Table: dash_tile
- Table: dynamic_tree_node
- Table: external_access_keys
- Table: filter
- Table: filter_rule
- Table: filter_rule_node
- Table: ip_lockout
- Table: job_queue
- Table: keyword
- Table: keyword_related
- Table: mail_log
- Table: message
- Table: node
- Table: node_keyword
- Table: plugins
- Table: preview_size
- Table: report
- Table: report_periodic_emails
- Table: report_periodic_emails_unsubscribe
- Table: request
- Table: research_request
- Table: resource
- Table: resource_alt_files
- Table: resource_custom_access
- Table: resource_data
- Table: resource_dimensions
- Table: resource_keyword
- Table: resource_log
- Table: resource_node
- Table: resource_related
- Table: resource_type
- Table: resource_type_field
- Table: resource_type_field_resource_type
- Table: search_log
- Table: site_text
- Table: slideshow
- Table: sysvars
- Table: tab
- Table: user
- Table: user_collection
- Table: user_dash_tile
- Table: user_message
- Table: user_preferences
- Table: user_rating
- Table: user_report
- Table: user_userlist
- Table: usergroup
- Table: usergroup_collection
- Table: usergroup_dash_tile
- Action functions
- Admin functions
- Ajax functions
- Annotation functions
- API functions
- Collections functions
-
- get_user_collections()
- get_collection()
- get_collection_resources()
- get_collection_resources_with_data()
- add_resource_to_collection()
- remove_resource_from_collection()
- collection_writeable()
- collection_readable()
- set_user_collection()
- create_collection()
- delete_collection()
- refresh_collection_frame()
- search_public_collections()
- do_collections_search()
- add_collection()
- remove_collection()
- index_collection()
- save_collection()
- get_max_theme_levels()
- get_theme_headers()
- themes_comparator()
- collections_comparator()
- collections_comparator_desc()
- get_themes()
- get_smart_theme_headers()
- get_smart_themes_nodes()
- email_collection()
- generate_collection_access_key()
- get_saved_searches()
- add_saved_search()
- remove_saved_search()
- add_smart_collection()
- get_search_title()
- add_saved_search_items()
- allow_multi_edit()
- get_theme_image()
- swap_collection_order()
- update_collection_order()
- get_collection_resource_comment()
- save_collection_resource_comment()
- relate_to_collection()
- get_mycollection_name()
- get_collection_comments()
- send_collection_feedback()
- copy_collection()
- collection_is_research_request()
- add_to_collection_link()
- remove_from_collection_link()
- change_collection_link()
- get_collection_external_access()
- delete_collection_access_key()
- collection_log()
- get_collection_log()
- get_collection_videocount()
- collection_max_access()
- collection_min_access()
- collection_set_public()
- collection_set_private()
- collection_set_themes()
- remove_all_resources_from_collection()
- get_home_page_promoted_collections()
- is_collection_approved()
- edit_collection_external_access()
- show_hide_collection()
- get_session_collections()
- update_collection_user()
- compile_collection_actions()
- makeFilenameUnique()
- new_featured_collection_form()
- get_last_resource_edit()
- GetThemesFromRequest()
- collection_download_get_archive_file()
- collection_download_use_original_filenames_when_downloading()
- collection_download_process_text_file()
- collection_download_log_resource_ready()
- update_zip_progress_file()
- collection_download_process_data_only_types()
- collection_download_process_summary_notes()
- collection_download_process_csv_metadata_file()
- collection_download_process_command_to_file()
- collection_download_process_collection_download_name()
- collection_download_process_archive_command()
- collection_download_clean_temp_files()
- collection_cleanup_inaccessible_resources()
- relate_all_collection()
- update_collection_type()
- get_user_selection_collection()
- delete_old_collections()
- save_themename()
- get_featured_collection_resources()
- get_featured_collection_categ_sub_fcs()
- generate_featured_collection_image_urls()
- update_collection_parent()
- get_featured_collections()
- featured_collections_permissions_filter_sql()
- featured_collection_check_access_control()
- order_featured_collections_by_hasresources()
- get_featured_collection_categories()
- is_featured_collection_category()
- is_featured_collection_category_by_children()
- validate_collection_parent()
- get_featured_collection_category_branch_by_leaf()
- process_posted_featured_collection_categories()
- get_featured_collection_ref_by_name()
- allow_collection_share()
- allow_featured_collection_share()
- filter_featured_collections_by_root()
- get_featured_collections_by_resources()
- can_delete_featured_collection()
- order_featured_collections()
- strip_prefix_chars()
- allow_upload_to_collection()
- get_all_featured_collections()
- compute_featured_collections_acess_control()
- compute_featured_collections_access_control()
- cleanup_anonymous_collections()
- can_share_upload_link()
- can_edit_upload_share()
- create_upload_link()
- generate_share_key()
- upload_share_active()
- upload_share_setup()
- external_upload_notify()
- purge_expired_shares()
- can_delete_collection()
- move_featured_collection_branch_path_root()
- send_collection_to_admin()
- collection_add_resources()
- collection_remove_resources()
- get_default_user_collection()
- can_reorder_featured_collections()
- reorder_collections()
- update_smart_collection()
- check_upload_terms()
- unrelate_all_collection()
- Comment functions
- Config functions
-
- validate_field()
- render_select_option()
- render_bool_option()
- render_text_option()
- set_config_option()
- get_config_option()
- get_config_option_users()
- get_config_options()
- process_config_options()
- config_clean()
- config_html()
- config_add_html()
- config_text_input()
- config_add_text_input()
- config_file_input()
- config_colouroverride_input()
- config_add_file_input()
- config_single_select()
- config_add_single_select()
- config_boolean_select()
- config_add_boolean_select()
- config_checkbox_select()
- config_add_checkbox_select()
- config_add_colouroverride_input()
- config_add_single_ftype_select()
- config_single_ftype_select()
- config_generate_AutoSaveConfigOption_function()
- config_process_file_input()
- config_generate_html()
- config_merge_non_image_types()
- get_header_image()
- config_register_core_fieldvars()
- config_add_hidden_input()
- config_register_core_field_refs()
- checkValidExtension()
- override_rs_variables_by_eval()
- remove_config_option()
- update_resource_type_field_resource_types()
- get_resource_type_field_resource_types()
- create_resource_type()
- save_resource_type()
- rs_get_resource_type()
- save_resource_type_field()
- get_resource_type_field_columns()
- delete_config_option()
- CSV export functions
- Dash functions
-
- create_dash_tile()
- update_dash_tile()
- delete_dash_tile()
- revoke_all_users_flag_cascade_delete()
- append_default_position()
- reorder_default_dash()
- update_default_dash_tile_order()
- get_tile()
- all_user_dash_tile_active()
- existing_tile()
- cleanup_dash_tiles()
- checkTileConfig()
- checkConfigCustomHomePanels()
- get_alluser_available_tiles()
- get_default_dash()
- deleteDefaultDashTile()
- updateDashTileOrder()
- get_managed_dash()
- add_usergroup_dash_tile()
- append_usergroup_position()
- reorder_usergroup_dash()
- update_usergroup_dash_tile_order()
- build_usergroup_dash()
- get_tile_user_groups()
- get_usergroup_available_tiles()
- get_usergroup_tile()
- add_user_dash_tile()
- get_user_tile()
- create_new_user_dash()
- update_user_dash_tile_order()
- delete_user_dash_tile()
- empty_user_dash()
- reorder_user_dash()
- append_user_position()
- get_user_available_tiles()
- get_user_dash()
- deleteDashTile()
- render_delete_dialog_JS()
- parse_dashtile_link()
- build_dash_tile_list()
- allow_tile_colour_change()
- render_dash_tile_colour_chooser()
- update_tile_preview_colour()
- get_tile_custom_style()
- delete_usergroup_dash_tile()
- allowPromotedResources()
- render_upgrade_available_tile()
- generate_dash_tile_toolbar()
- existing_dash_tile()
- dash_tile_featured_collection_get_resources()
- validate_tile_style()
- validate_build_url()
- tltype_srch_generate_js_for_background_and_count()
- get_dash_search_data()
- can_edit_tile()
- Debug functions
- Encryption functions
- Facial recognition functions
- File functions
- General functions
-
- getval()
- getuid()
- escape_check()
- unescape()
- nicedate()
- redirect()
- trim_spaces()
- trim_array()
- tidylist()
- tidy_trim()
- average_length()
- get_stats_activity_types()
- get_stats_years()
- newlines()
- get_all_site_text()
- get_site_text()
- check_site_text_custom()
- save_site_text()
- string_similar()
- formatfilesize()
- filesize2bytes()
- get_mime_type()
- send_mail()
- send_mail_phpmailer()
- log_mail()
- rs_quoted_printable_encode()
- rs_quoted_printable_encode_subject()
- pager()
- send_statistics()
- remove_extension()
- verify_extension()
- get_allowed_extensions()
- get_allowed_extensions_by_type()
- getAbsolutePath()
- getFolderContents()
- mb_basename()
- strip_extension()
- is_process_lock()
- set_process_lock()
- clear_process_lock()
- filesize_unlimited()
- strip_leading_comma()
- convert()
- get_temp_dir()
- convert_path_to_url()
- escape_command_args()
- run_command()
- run_external()
- error_alert()
- xml_entities()
- get_xml_entity_at_index_0()
- sanitize_char()
- format_display_field()
- format_string_more_link()
- sortmulti()
- draw_performance_footer()
- sql_affected_rows()
- get_imagemagick_path()
- get_utility_path()
- get_executable_path()
- truncate_cache_arrays()
- txt2html()
- is_html()
- rs_setcookie()
- get_editable_states()
- validate_html()
- generateURL()
- tail()
- move_array_element()
- emptyiszero()
- array_column()
- get_slideshow_files_data()
- form_value_display()
- job_queue_add()
- job_queue_update()
- job_queue_delete()
- job_queue_get_jobs()
- job_queue_run_job()
- user_set_usergroup()
- generateSecureKey()
- IsModal()
- generateCSRFToken()
- isValidCSRFToken()
- generateFormToken()
- generateAjaxToken()
- enforcePostRequest()
- findDuplicates()
- is_resourcespace_upgrade_available()
- get_recent_users()
- check_script_last_ran()
- count_errors()
- search_array_by_keyvalue()
- bypass_permissions()
- set_sysvar()
- get_sysvar()
- hook()
- strip_tags_and_attributes()
- show_pagetime()
- get_debug_log_dir()
- debug()
- rcRmdir()
- daily_stat()
- pagename()
- text()
- get_section_list()
- resolve_user_agent()
- get_ip()
- ResolveKB()
- trim_filename()
- job_queue_get_job()
- job_queue_purge()
- get_inner_html_from_tag()
- array_flip_by_value_key()
- reshape_array_by_value_keys()
- permission_j()
- permission_negative_j()
- cleanup_files()
- is_int_loose()
- ip_matches()
- set_unique_filename()
- build_permission()
- validate_remote_code()
- get_system_status()
- allowed_type_mime()
- try_unlink()
- check_filestore_browseability()
- check_imagemagick_cli_version_found()
- check_numeric_cli_version_found()
- check_utility_cli_version_found_by_name()
- command_line_only()
- prefix_value()
- generate_csrf_js_object()
- strip_paragraph_tags()
- set_order_by_to_zero()
- try_getimagesize()
- execution_lockout_remove_resource_type_field_props()
- is_positive_int_loose()
- compute_dpi()
- compute_megapixel()
- Language functions
-
- str_replace_formatted_placeholder()
- lang_or_i18n_get_translated()
- i18n_get_translated()
- i18n_get_collection_name()
- i18n_get_indexable()
- i18n_get_translations()
- ucfirstletter()
- ucfirstletter_callback()
- normalize_keyword()
- remove_accents()
- seems_utf8()
- http_get_preferred_language()
- setLanguage()
- lang_load_site_text()
- i18n_get_all_translations()
- Log functions
- Login functions
- Message functions
-
- message_user_remove()
- message_get()
- message_add()
- message_remove()
- message_seen()
- message_unseen()
- message_seen_all()
- message_purge()
- message_send_unread_emails()
- message_remove_related()
- system_notification()
- message_get_conversation()
- send_user_message()
- message_deleteselusrmsg()
- message_selectedseen()
- message_selectedunseen()
- message_getrefs()
- send_user_notification()
- get_user_message()
- Migration functions
- Node functions
-
- set_node()
- delete_node()
- delete_nodes_for_resource_type_field()
- get_node()
- is_parent_node()
- get_tree_node_level()
- get_root_node_by_leaf()
- reorder_node()
- reorder_nodes()
- render_new_node_record()
- get_node_order_by()
- draw_tree_node_table()
- node_field_options_override()
- add_node_keyword()
- remove_node_keyword()
- remove_all_node_keyword_mappings()
- check_node_indexed()
- add_node_keyword_mappings()
- remove_node_keyword_mappings()
- add_resource_nodes()
- add_resource_nodes_multi()
- get_resource_nodes()
- delete_resource_nodes()
- delete_resource_nodes_multi()
- delete_all_resource_nodes()
- copy_resource_nodes()
- get_nodes_from_keywords()
- update_resource_node_hitcount()
- copy_resource_type_field_nodes()
- get_parent_nodes()
- get_nodes_count()
- extract_node_options()
- get_node_by_name()
- get_node_id()
- node_name_comparator()
- node_orderby_comparator()
- get_node_elements()
- get_node_tree()
- get_tree_strings()
- compute_node_branch_path()
- compute_nodes_by_parent()
- get_resource_nodes_batch()
- get_nodes_by_refs()
- process_node_search_syntax_to_names()
- delete_unused_non_fixed_list_nodes()
- remove_invalid_node_keyword_mappings()
- get_nodes_use_count()
- check_delete_nodes()
- remove_field_keywords()
- get_cattree_nodes_ordered()
- get_cattree_node_strings()
- cattree_node_creator()
- cattree_node_flatten()
- get_resources_nodes_by_rtf()
- get_node_strings()
- order_tree_nodes()
- add_sql_node_language()
- migrate_fixed_to_text()
- cleanup_invalid_nodes()
- get_all_parents_by_leaf()
- get_all_ancestors_for_node()
- get_nodes()
- PDF functions
- Plugin functions
-
- activate_plugin()
- deactivate_plugin()
- purge_plugin_config()
- get_plugin_yaml()
- config_json_encode()
- config_encode()
- get_plugin_config()
- set_plugin_config()
- is_plugin_activated()
- handle_rsc_upload()
- display_rsc_upload()
- config_gen_setup_post()
- config_gen_setup_html()
- config_section_header()
- config_add_section_header()
- config_add_text_list_input()
- config_multi_select()
- config_add_multi_select()
- config_single_user_select()
- config_add_single_user_select()
- config_multi_user_select()
- config_add_multi_user_select()
- config_single_group_select()
- config_add_single_group_select()
- config_multi_group_select()
- config_add_multi_group_select()
- config_multi_ftype_select()
- config_add_multi_ftype_select()
- config_single_rtype_select()
- config_add_single_rtype_select()
- config_multi_rtype_select()
- config_add_multi_rtype_select()
- config_db_single_select()
- config_add_db_single_select()
- config_db_multi_select()
- config_add_db_multi_select()
- config_add_hidden()
- config_text_field()
- config_userselect_field()
- config_field_select()
- config_boolean_field()
- config_custom_select_multi()
- config_custom_select()
- get_plugin_css()
- plugin_activate_for_setup()
- include_plugin_config()
- register_plugin_language()
- get_plugin_path()
- register_plugin()
- config_multi_archive_select()
- config_add_multi_archive_select()
- plugin_encode_complex_configs()
- plugin_decode_complex_configs()
- get_active_plugins()
- Render functions
-
- render_search_field()
- render_sort_order()
- render_dropdown_option()
- render_actions()
- render_user_group_multi_select()
- render_user_group_select()
- render_user_group_checkbox_select()
- render_text_question()
- render_split_text_question()
- render_dropdown_question()
- render_access_key_tr()
- is_field_displayed()
- display_multilingual_text_field()
- display_field()
- render_date_range_field()
- renderBreadcrumbs()
- renderCallToActionTile()
- renderSocialMediaShareLinksForUrl()
- renderLockButton()
- render_resource_image()
- calculate_image_display()
- render_share_options()
- render_field_selector_question()
- render_filter_bar_button()
- render_upload_here_button()
- render_trash()
- render_browse_bar()
- generate_browse_bar_item()
- render_help_link()
- render_question_div()
- render_custom_fields()
- render_selected_resources_counter()
- render_edit_selected_btn()
- render_clear_selected_btn()
- render_selected_collection_actions()
- render_user_collection_select()
- render_csrf_data_attributes()
- check_display_condition()
- has_browsebar()
- display_upload_options()
- display_field_data()
- render_resource_lock_link()
- EditNav()
- SaveAndClearButtons()
- UpdateResultOrder()
- display_size_option()
- show_upgrade_in_progress()
- render_audio_download_link()
- render_table()
- render_array_in_table_cells()
- render_new_featured_collection_cta()
- render_featured_collection_category_selector()
- render_featured_collections()
- render_featured_collection()
- DrawOption()
- render_featured_collections_category_permissions()
- render_top_page_error_style()
- render_workflow_state_question()
- render_share_password_question()
- pclick()
- pblur()
- render_question_form_helper()
- render_hidden_input()
- radio_get_layout()
- render_radio_buttons_question()
- render_message()
- render_antispam_question()
- render_fixed_text_question()
- render_fa_icon_selector()
- filterIcons()
- escape_quoted_data()
- display_related_resources()
- admin_resource_type_field_constraint()
- admin_resource_type_field_option()
- showHideResTypeSelector()
- render_resource_type_selector_question()
- add_download_column()
- Reporting functions
-
- render_bar_graph()
- render_pie_graph()
- report_process_query_placeholders()
- report_has_thumbnail()
- report_has_date_by_id()
- report_has_date()
- get_translated_activity_type()
- unsubscribe_user_from_periodic_report()
- delete_periodic_report()
- send_periodic_report_emails()
- create_periodic_email()
- do_report()
- get_reports()
- get_report_name()
- Request functions
-
- managed_collection_request()
- get_request()
- get_user_requests()
- save_request()
- get_requests()
- email_collection_request()
- email_resource_request()
- get_valid_custom_fields()
- gen_custom_fields_html_props()
- process_custom_fields_submission()
- can_use_owner_field()
- get_notification_users_by_owner_field()
- resource_request_visible()
- Research functions
- Slideshow functions
- Theme permission functions
- User functions
-
- validate_user()
- setup_user()
- get_users()
- get_users_with_permission()
- get_user_by_email()
- get_user_by_username()
- get_usergroups()
- get_usergroup()
- get_user()
- save_user()
- email_user_welcome()
- email_reset_link()
- auto_create_user_account()
- email_user_request()
- new_user()
- get_active_users()
- change_password()
- make_password()
- bulk_mail()
- get_user_log()
- resolve_userlist_groups()
- resolve_userlist_groups_smart()
- remove_groups_smart_from_userlist()
- check_password()
- resolve_users()
- check_access_key()
- check_access_key_collection()
- make_username()
- get_registration_selectable_usergroups()
- open_access_to_user()
- open_access_to_group()
- resolve_open_access()
- remove_access_to_user()
- user_email_exists()
- resolve_user_emails()
- create_password_reset_key()
- get_rs_session_id()
- get_notification_users()
- verify_antispam()
- check_share_password()
- get_users_from_permission_lookup()
- offset_user_local_timezone()
- checkPermission_anonymoususer()
- checkPermission_dashadmin()
- checkPermission_dashuser()
- checkPermission_dashmanage()
- checkPermission_dashcreate()
- checkperm()
- checkperm_user_edit()
- internal_share_access()
- save_usergroup()
- set_user_profile()
- delete_profile_image()
- get_profile_image()
- get_profile_text()
- get_languages_notify_users()
- get_upload_url()
- emulate_user()
- is_authenticated()
- is_ecommerce_user()
- get_approver_usergroups()
- get_usergroup_approvers()
- copy_usergroup_permissions()
- mark_email_as_invalid()
- check_email_invalid()
- get_users_by_permission()
- is_anonymous_user()
- get_users_by_preference()
- generate_temp_download_key()
- validate_temp_download_key()
- Video functions
- Database functions
-
- sql_null_or_val()
- db_end_transaction()
- db_rollback_transaction()
- sql_query()
- sql_value()
- sql_array()
- sql_insert_id()
- get_query_cache_location()
- clear_query_cache()
- check_db_structs()
- CheckDBStruct()
- sql_limit()
- sql_is_null_or_eq_val()
- sql_query_prepared()
- sql_truncate_text_val()
- ps_query()
- fetch_assoc_stmt()
- copy_value()
- ps_value()
- ps_array()
- ps_param_insert()
- ps_param_fill()
- columns_in()
- sql_limit_with_total_count()
- sql_reorder_records()
- ps_fill_param_array()
- errorhandler()
- db_use_multiple_connection_modes()
- db_set_connection_mode()
- db_get_connection_mode()
- db_clear_connection_mode()
- sql_connect()
- db_begin_transaction()
- Metadata functions
- Resource functions
-
- get_resource_path()
- get_resource_data()
- put_resource_data()
- create_resource()
- update_hitcount()
- save_resource_data()
- set_resource_defaults()
- save_resource_data_multi()
- append_field_value()
- remove_keyword_mappings()
- remove_keyword_from_resource()
- add_keyword_mappings()
- add_keyword_to_resource()
- remove_all_keyword_mappings_for_field()
- update_field()
- ()
- email_resource()
- delete_resource()
- get_resource_type_field()
- get_resource_field_data()
- get_resource_field_data_batch()
- get_resource_types()
- get_resource_top_keywords()
- clear_resource_data()
- get_max_resource_ref()
- get_resource_ref_range()
- copy_resource()
- resource_log()
- get_resource_log()
- get_resource_type_name()
- get_resource_custom_access()
- get_resource_custom_access_users_usergroups()
- save_resource_custom_access()
- get_custom_access()
- get_themes_by_resource()
- update_resource_type()
- relate_to_array()
- get_exiftool_fields()
- createTempFile()
- stripMetadata()
- write_metadata()
- delete_exif_tmpfile()
- update_resource()
- import_resource()
- get_alternative_files()
- add_alternative_file()
- delete_alternative_file()
- get_alternative_file()
- save_alternative_file()
- user_rating_save()
- process_notify_user_contributed_submitted()
- notify_user_contributed_submitted()
- notify_user_contributed_unsubmitted()
- get_field()
- get_field_options_with_stats()
- save_field_options()
- get_resources_matching_keyword()
- get_keyword_from_option()
- add_field_option()
- get_resource_access()
- get_custom_access_user()
- edit_resource_external_access()
- resource_download_allowed()
- get_edit_access()
- filter_match()
- log_diff()
- get_metadata_templates()
- get_resource_collections()
- download_summary()
- check_use_watermark()
- autocomplete_blank_fields()
- get_resource_files()
- reindex_resource()
- get_page_count()
- update_disk_usage()
- update_disk_usage_cron()
- get_total_disk_usage()
- overquota()
- notify_user_resources_approved()
- get_original_imagesize()
- generate_resource_access_key()
- get_resource_external_access()
- delete_resource_access_key()
- resource_type_config_override()
- update_archive_status()
- delete_resources_in_collection()
- update_related_resource()
- can_share_resource()
- delete_resource_custom_access_usergroups()
- truncate_join_field_value()
- get_video_snapshots()
- resource_file_readonly()
- delete_resource_custom_user_access()
- get_video_info()
- copyAllDataToResource()
- copyResourceDataValues()
- copy_locked_data()
- copy_locked_fields()
- copyRelatedResources()
- process_edit_form()
- update_timestamp()
- get_extension()
- get_last_resource_edit_array()
- get_default_archive_state()
- save_original_file_as_alternative()
- replace_resource_file()
- get_resource_all_image_sizes()
- sanitize_date_field_input()
- download_link_generate_key()
- download_link_check_key()
- filter_check()
- update_resource_keyword_hitcount()
- copy_hitcount_to_live()
- get_image_sizes()
- get_preview_quality()
- get_related_resources()
- get_field_options()
- get_data_by_field()
- get_resources_by_resource_data_value()
- get_all_image_sizes()
- image_size_restricted_access()
- get_fields()
- get_hidden_indexed_fields()
- get_category_tree_fields()
- get_OR_fields()
- get_nopreview_icon()
- purchase_set_size()
- payment_set_complete()
- get_indexed_resource_type_fields()
- get_resource_type_fields()
- notify_resource_change()
- add_verbatim_keywords()
- metadata_field_edit_access()
- get_download_filename()
- get_resource_type_from_extension()
- canSeePreviewTools()
- checkPreviewToolsOptionUniqueness()
- alt_is_ffmpeg_alternative()
- create_resource_type_field()
- metadata_field_view_access()
- get_workflow_states()
- delete_resource_type_field()
- tab_names()
- get_resource_table_joins()
- update_resource_lock()
- get_resource_lock_message()
- get_resource_data_batch()
- get_external_shares()
- get_video_duration()
- relate_all_resources()
- allow_in_browser()
- update_node_hitcount_from_search()
- update_resource_field_column()
- get_all_resource_types()
- data_joins_field_value_translate_and_csv()
- process_resource_data_joins_values()
- canSeeAnnotationsFields()
- apply_resource_default()
- skip_scr_size_preview()
- Search functions
-
- delete_filter_rule()
- get_grouped_related_keywords()
- save_related_keywords()
- get_simple_search_fields()
- get_fields_for_search_display()
- get_filters()
- get_filter()
- get_filter_rules()
- get_filter_rule()
- save_filter()
- save_filter_rule()
- delete_filter()
- get_related_keywords()
- copy_filter()
- update_search_from_request()
- get_search_default_restypes()
- get_selectedtypes()
- render_advanced_search_buttons()
- get_collections_resource_count()
- get_search_params()
- is_not_wildcard_only()
- search_title_node_processing()
- setup_search_chunks()
- log_keyword_usage()
- get_upload_here_selected_nodes()
- suggest_refinement()
- get_advanced_search_fields()
- get_advanced_search_collection_fields()
- search_form_to_search_query()
- refine_searchstring()
- compile_search_actions()
- search_filter()
- search_special()
- resolve_nodes_from_string()
- rebuild_specific_field_search_from_node()
- search_get_previews()
- resolve_soundex()
- get_default_search_states()
- get_filter_sql()
- split_keywords()
- cleanse_string()
- resolve_keyword()
- add_partial_index()
- highlightkeywords()
- str_highlight()
- sorthighlights()
- get_suggested_keywords()
- Map functions
- Job functions
- Tab functions
- Test functions
update_field()
Description
Updates resource field. Works out the previous value, so this isnot efficient if we already know what this previous value is (hence
it is not used for edit where multiple fields are saved)
Parameters
Column | Type | Default | Description |
---|---|---|---|
$resource | integer | Resource ID | |
$field | integer | Field ID | |
$value | string | The new value | |
&$errors | array | array | Any errors that may occur during update |
$log | boolean | true | Log this change in the resource log? |
$nodevalues | boolean | false | Set to TRUE to process the value as a comma separated list of node IDs |
Return
boolean |
Location
include/resource_functions.php lines 2506 to 2929
Definition
function update_field($resource, $field, $value, array &$errors = array(), $log=true, $nodevalues=false)
{
global $category_tree_add_parents, $userref, $FIXED_LIST_FIELD_TYPES, $lang;
$resource_data = get_resource_data($resource);
if ($resource_data === false)
{
$errors[] = $lang["resourcenotfound"] . " " . (string) $resource;
return false;
}
if ($resource_data["lock_user"] > 0 && $resource_data["lock_user"] != $userref)
{
$errors[] = get_resource_lock_message($resource_data["lock_user"]);
return false;
}
// accept shortnames in addition to field refs
if(!is_int_loose($field))
{
$field = ps_value("SELECT ref AS `value` FROM resource_type_field WHERE name = ?", ["s",$field], '', "schema");
}
// Fetch some information about the field
$fieldinfo = get_resource_type_field($field);
if(!$fieldinfo)
{
$errors[] = "No field information about field ID '{$field}'";
return false;
}
if ($fieldinfo["global"]==0 && !in_array($resource_data['resource_type'],ps_array("SELECT resource_type value FROM resource_type_field_resource_type WHERE resource_type_field=?",array("i",$field))))
{
$errors[] = "Field is not valid for this resource type";
return false;
}
$value = $data_joins_field_value = trim((string)$value);
if($value === '' && $fieldinfo['required'])
{
$errors[] = i18n_get_translated($fieldinfo['title']) . ": {$lang['requiredfield']}";
return false;
}
// Create arrays that will be passed to hook function later
$newnodes = [];
$newvalues = [];
if (in_array($fieldinfo['type'], array_merge($FIXED_LIST_FIELD_TYPES,[FIELD_TYPE_DATE_RANGE])))
{
// Standard node fields
// Set up arrays of node ids to add/remove and all new nodes.
$nodes_to_add = [];
$nodes_to_remove = [];
// Get all node values into an array to search
$fieldnodes = get_nodes($field,null,$fieldinfo['type'] == FIELD_TYPE_CATEGORY_TREE);
// Get currently selected nodes for this field
$current_field_nodes = get_resource_nodes($resource, $field, false);
$nodes_by_ref = [];
foreach($fieldnodes as $fieldnode)
{
$nodes_by_ref[$fieldnode["ref"]] = $fieldnode;
}
// Get an 'existing' value
$existing_nodes = array_intersect(array_column($fieldnodes,"ref"),$current_field_nodes);
$existing = implode(",",array_column($existing_nodes,"path"));
if($nodevalues)
{
// List of node IDs has been passed in comma separated form, use them directly
$sent_nodes = explode(",",$value);
if(in_array($fieldinfo['type'],[FIELD_TYPE_RADIO_BUTTONS,FIELD_TYPE_DROP_DOWN_LIST]) && count($sent_nodes) > 1)
{
// Only a single value allowed
return false;
}
foreach($fieldnodes as $fieldnode)
{
// Add to array of nodes, unless it has been added to array already as a parent for a previous node
if (in_array($fieldnode["ref"],$sent_nodes) && !in_array($fieldnode["ref"],$nodes_to_add))
{
if(!in_array($fieldnode["ref"],$current_field_nodes))
{
$nodes_to_add[] = $fieldnode["ref"];
}
$newnodes[] = $fieldnode["ref"];
}
else if(in_array($fieldnode["ref"],$current_field_nodes) && !in_array($fieldnode["ref"],$sent_nodes))
{
$nodes_to_remove[] = $fieldnode["ref"];
}
}
if(count($newnodes) != count($sent_nodes))
{
// Unable to find all node values that were passed
return false;
}
}
else
{
// Not a list of node IDs; value has been passed as normal string value
// Get all the new values into an array
if(strpos($value,NODE_NAME_STRING_SEPARATOR) != false)
{
$newvalues = array_map('trim', explode(NODE_NAME_STRING_SEPARATOR, $value));
}
else
{
if (strlen($value) > 0 && (($value[0] == "'" && $value[strlen($value)-1] == "'")
||
($value[0] == "\"" && $value[strlen($value)-1] == "\""))
)
{
// Quoted value - don't attempt to split on comma.
$newvalues[] = substr($value,1,-1);
}
else
{
$newvalues = trim_array(str_getcsv($value));
}
}
if($fieldinfo['type'] == FIELD_TYPE_DATE_RANGE)
{
// Check it is in the correct format
$rangeregex="/^(\d{4})(-\d{2})?(-\d{2})?\/(\d{4})(-\d{2})?(-\d{2})?/";
// If this is a date range field we need to add values to the field options
if(!preg_match($rangeregex,$value,$matches))
{
debug("ERROR - Invalid date range submitted: '" . $value . "'");
return false;
}
$rangedates = array_map('trim', explode('/', $value));
$rangestart=str_pad($rangedates[0], 10, "-00");
$rangeendparts=explode("-",$rangedates[1]);
$rangeendyear=$rangeendparts[0];
$rangeendmonth=isset($rangeendparts[1])?$rangeendparts[1]:12;
$rangeendday=isset($rangeendparts[2])?$rangeendparts[2]:cal_days_in_month(CAL_GREGORIAN, $rangeendmonth, $rangeendyear);
$rangeend=$rangeendyear . "-" . $rangeendmonth . "-" . $rangeendday;
$current_dates = array_column($fieldnodes,"ref","name");
$nodes_to_add[] = $current_dates[$rangestart] ?? set_node(null, $fieldinfo["ref"], $rangestart, null, null);
$nodes_to_add[] = $current_dates[$rangeend] ?? set_node(null, $fieldinfo["ref"], $rangeend, null, null);
$value = $rangestart . DATE_RANGE_SEPARATOR . $rangeend;
}
elseif($fieldinfo['type'] == FIELD_TYPE_CATEGORY_TREE)
{
// Create array with indexes as the values to look for
$nodes_available_keys = [];
foreach($fieldnodes as $fieldnode)
{
$nodes_available_keys[mb_strtolower($fieldnode["path"])] = $fieldnode["ref"];
$nodes_available_keys[mb_strtolower($fieldnode["translated_path"])] = $fieldnode["ref"];
$nodes_available_keys[mb_strtolower($fieldnode["name"])] = $fieldnode["ref"];
$nodes_available_keys[mb_strtolower($fieldnode["translated_name"])] = $fieldnode["ref"];
}
$newvalues = array_map('mb_strtolower', $newvalues);
foreach($newvalues as $newvalue)
{
$validval = false;
// Check if a full node path has been passed
if(isset($nodes_available_keys[$newvalue]))
{
debug("update_field: Found node# " . $newvalue . " for tree value: '" . trim($newvalue) . "'");
$nodes_to_add[] = $nodes_available_keys[$newvalue];
$validval = true;
}
if(!$validval)
{
// Check for separate name values
$splitvalues = array_map('trim', explode('/', $newvalue));
foreach($splitvalues as $splitvalue)
{
# Check if each new value exists in current options list
if(isset($nodes_available_keys[$splitvalue]))
{
debug("update_field: Found node# " . $nodes_available_keys[$splitvalue] . " for tree value: '" . trim($splitvalue) . "'");
$nodes_to_add[] = $nodes_available_keys[$splitvalue];
$validval = true;
}
}
}
if(!$validval)
{
// Still not found - invalid option passed
debug("update_field: " . $newvalue . " not found: in field tree");
return false;
}
// Add all parent nodes
if($category_tree_add_parents)
{
foreach($nodes_to_add as $node_to_add)
{
$parent = $nodes_by_ref[$node_to_add]["parent"];
while((int)$parent > 0)
{
if(isset($nodes_by_ref[$parent]))
{
$nodes_to_add[] = $nodes_by_ref[$parent]["ref"];
$parent = $nodes_by_ref[$parent]["parent"];
}
else
{
$parent = 0;
}
}
}
}
}
}
elseif($fieldinfo['type'] == FIELD_TYPE_DYNAMIC_KEYWORDS_LIST && !checkperm('bdk' . $field))
{
// If this is a dynamic keyword field need to add any new entries to the field nodes
$currentoptions = array();
foreach($fieldnodes as $fieldnode)
{
$fieldoptiontranslations = explode('~', $fieldnode['name']);
if(count($fieldoptiontranslations) < 2)
{
$currentoptions[]=trim($fieldnode['name']); # Not a translatable field
debug("update_field: current field option: '" . trim($fieldnode['name']) . "'");
}
else
{
for ($n=1;$n<count($fieldoptiontranslations);$n++)
{
# Not a translated string, return as-is
if (substr($fieldoptiontranslations[$n],2,1)!=":" && substr($fieldoptiontranslations[$n],5,1)!=":" && substr($fieldoptiontranslations[$n],0,1)!=":")
{
$currentoptions[]=trim($fieldnode['name']);
debug("update_field: current field option: '" . $fieldnode['name']);
}
else
{
# Support both 2 character and 5 character language codes (for example en, en-US).
$p=strpos($fieldoptiontranslations[$n],':');
$currentoptions[]=trim(substr($fieldoptiontranslations[$n],$p+1));
debug("update_field: current field option: '" . trim(substr($fieldoptiontranslations[$n],$p+1)));
}
}
}
}
foreach($newvalues as $newvalue)
{
# Check if each new value exists in current options list
if(!in_array($newvalue, $currentoptions) && $newvalue != '')
{
# Append the option and update the field
$newnode = set_node(null, $field, trim($newvalue), null, null);
$nodes_to_add[] = $newnode;
$currentoptions[] = trim($newvalue);
$fieldnodes[] = array("ref" => $newnode,"name" => trim($newvalue));
debug("update_field: field option added: '" . trim($newvalue));
clear_query_cache("schema");
}
}
} // End of FIELD_TYPE_DYNAMIC_KEYWORDS_LIST
// Check to see other nodes that need to be added
$newvalues_translated = $newvalues;
array_walk(
$newvalues_translated,
function (&$value, $index)
{
$value = mb_strtolower(i18n_get_translated($value));
}
);
// Set up array of nodes to remove
foreach($fieldnodes as $fieldnode)
{
// Add to array of nodes, unless it has been added to array already as a parent for a previous node
if (in_array(mb_strtolower(i18n_get_translated($fieldnode["name"])), $newvalues_translated)
&& !in_array($fieldnode["ref"], $nodes_to_add)
)
{
$nodes_to_add[] = $fieldnode["ref"];
}
}
// Get all nodes to remove
foreach($fieldnodes as $fieldnode)
{
if(!in_array($fieldnode["ref"], $nodes_to_add))
{
$nodes_to_remove[] = $fieldnode["ref"];
}
}
} // End of $nodevalues test
// Now carry out the node additions and removals
if(count($nodes_to_add) > 0 || count($nodes_to_remove) > 0)
{
# Work out what nodes need to be added/removed/kept
$nodes_to_add = array_unique($nodes_to_add);
$nodes_to_remove = array_intersect(array_unique($nodes_to_remove),$current_field_nodes);
$added_nodes = array_diff($nodes_to_add,$current_field_nodes);
$removed_nodes = array_intersect($nodes_to_remove,$current_field_nodes);
if(in_array($fieldinfo['type'],[FIELD_TYPE_RADIO_BUTTONS,FIELD_TYPE_DROP_DOWN_LIST])
&&
(count($added_nodes) + count($current_field_nodes) - count($removed_nodes)) > 1)
{
// Only a single value allowed
return false;
}
// Update resource_node table and log
db_begin_transaction("update_field_{$field}");
if(count($nodes_to_remove)>0)
{
delete_resource_nodes($resource,$nodes_to_remove,false);
}
if(count($nodes_to_add)>0)
{
add_resource_nodes($resource,$nodes_to_add, false,false);
}
// Update log
if($log && (count($nodes_to_add)>0 || count($nodes_to_remove)>0))
{
log_node_changes($resource,$nodes_to_add,$current_field_nodes);
// Don't need to log this later
$log = false;
}
db_end_transaction("update_field_{$field}");
if($fieldinfo['type']==FIELD_TYPE_CATEGORY_TREE)
{
$all_treenodes = get_cattree_nodes_ordered($field, $resource, false); # True means get all nodes; False means get selected nodes
$treenodenames = get_cattree_node_strings($all_treenodes, true); # True means names are paths to nodes; False means names are node names
$value = implode(",",$treenodenames);
$data_joins_field_value = implode($GLOBALS['field_column_string_separator'], $treenodenames);
}
else
{
$node_names=[];
foreach($nodes_to_add as $ref)
{
$returned_node = [];
if(get_node($ref,$returned_node))
{
$node_names[] = $returned_node["name"];
}
}
$value = implode(",",$node_names);
$data_joins_field_value = implode($GLOBALS['field_column_string_separator'], $node_names);
}
}
}
else
{
# Fetch previous value
$existing_resource_node = get_resource_nodes($resource, $field, true)[0] ?? [];
$existing = $existing_resource_node["name"] ?? "";
if ($value === $existing)
{
// Nothing to do
return true;
}
if (
$GLOBALS['use_native_input_for_date_field']
&& $fieldinfo['type'] === FIELD_TYPE_DATE
&& $value !== ''
&& !validateDatetime($value, 'Y-m-d')
)
{
$errors[] = sprintf('%s: %s', i18n_get_translated($fieldinfo['title']), $lang['invalid_date_generic']);
return false;
}
$curnode = $existing_resource_node["ref"] ?? 0 ;
if ($curnode > 0 && get_nodes_use_count([$curnode]) == 1)
{
// Reuse same node
$savenode = set_node($curnode,$field,$value,NULL,0);
}
else
{
// Remove node from resource and create new node
delete_resource_nodes($resource,[$curnode],false);
$savenode = set_node(NULL,$field,$value,NULL,0);
add_resource_nodes($resource,[$savenode], true, false);
}
}
# If this is a 'joined' field we need to add it to the resource column
$joins = get_resource_table_joins();
if(in_array($fieldinfo['ref'],$joins))
{
update_resource_field_column($resource,$field, $data_joins_field_value);
}
# Add any onchange code
if($fieldinfo["onchange_macro"]!="")
{
$macro_resource_id=$resource;
eval(eval_check_signed($fieldinfo["onchange_macro"]));
}
# Allow plugins to perform additional actions.
// Log this update
if ($log && $value != $existing)
{
resource_log($resource,LOG_CODE_EDITED,$field,"",$existing,unescape($value));
}
# Allow plugins to perform additional actions.
hook("update_field","",array($resource,$field,$value,$existing,$fieldinfo,$newnodes,$newvalues));
return true;
}
This article was last updated 7th December 2023 19:35 Europe/London time based on the source file dated 30th November 2023 17:05 Europe/London time.