saved_fields = get_option( 'um_fields', array() ); } /** * @return array */ function get_all_user_fields() { return apply_filters( 'um_builtin_all_user_fields', $this->all_user_fields ); } /** * Regular or multi-select/options * * @param $field * @param $attrs * * @return bool */ function is_dropdown_field( $field, $attrs ) { if ( isset( $attrs['options'] ) ) { return true; } $fields = $this->all_user_fields; if ( isset( $fields[ $field ]['options'] ) || ! empty( $fields[ $field ]['custom_dropdown_options_source'] ) ) { return true; } return false; } /** * Get a field * * @param $field * * @return mixed|string */ function get_a_field( $field ) { $fields = $this->all_user_fields; if ( isset( $fields[ $field ] ) ) { return $fields[ $field ]; } return ''; } /** * Get specific fields * * @param $fields * * @return array */ function get_specific_fields( $fields ) { $fields = explode( ',', $fields ); $array = array(); foreach ( $fields as $field ) { if ( isset( $this->predefined_fields[ $field ] ) ) { $array[ $field ] = $this->predefined_fields[ $field ]; } } return $array; } /** * Get specific field * * @param $fields * * @return array|mixed */ function get_specific_field( $fields ) { $fields = explode( ',', $fields ); $array = array(); foreach ( $fields as $field ) { if ( isset( $this->predefined_fields[ $field ] ) ) { $array = $this->predefined_fields[ $field ]; } elseif ( isset( $this->saved_fields[ $field ] ) ) { $array = $this->saved_fields[ $field ]; } } return $array; } /** * Checks for a unique field error * * @param $key * * @return int|string */ public function unique_field_err( $key ) { if ( empty( $key ) ) { return __( 'Please provide a meta key', 'ultimate-member' ); } if ( isset( $this->core_fields[ $key ] ) ) { return __( 'Your meta key is a reserved core field and cannot be used', 'ultimate-member' ); } if ( isset( $this->predefined_fields[ $key ] ) ) { return __( 'Your meta key is a predefined reserved key and cannot be used', 'ultimate-member' ); } if ( isset( $this->saved_fields[ $key ] ) ) { return __( 'Your meta key already exists in your fields list', 'ultimate-member' ); } if ( ! UM()->validation()->safe_string( $key ) ) { return __( 'Your meta key contains illegal characters. Please correct it.', 'ultimate-member' ); } return 0; } /** * Checks for a blacklist field error. * * @param string $key Custom field metakey. * * @return int|string Empty or error string. */ public function blacklist_field_err( $key ) { if ( in_array( strtolower( $key ), $this->blacklist_fields, true ) ) { return __( 'Your meta key can not be used', 'ultimate-member' ); } return 0; } /** * Check date range errors (start date) * * @param $date * * @return int|string */ function date_range_start_err( $date ) { if ( empty( $date ) ) { return __( 'Please provide a date range beginning', 'ultimate-member' ); } if ( ! UM()->validation()->validate_date( $date ) ) { return __( 'Please enter a valid start date in the date range', 'ultimate-member' ); } return 0; } /** * Check date range errors (end date) * * @param $date * @param $start_date * * @return int|string */ function date_range_end_err( $date, $start_date ) { if ( empty( $date ) ) { return __( 'Please provide a date range end', 'ultimate-member' ); } if ( ! UM()->validation()->validate_date( $date ) ) { return __( 'Please enter a valid end date in the date range', 'ultimate-member' ); } if ( strtotime( $date ) <= strtotime( $start_date ) ) { return __( 'The end of date range must be greater than the start of date range', 'ultimate-member' ); } return 0; } /** * Get a core field attrs. * * @param string $type Field type. * * @return array Field data. */ public function get_core_field_attrs( $type ) { return array_key_exists( $type, $this->core_fields ) ? $this->core_fields[ $type ] : array( '' ); } /** * Core Fields */ public function set_core_fields() { $this->core_fields = array( 'row' => array( 'name' => 'Row', 'in_fields' => false, 'form_only' => true, 'conditional_support' => 0, 'icon' => 'fas fa-pencil', 'col1' => array('_id','_background','_text_color','_padding','_margin','_border','_borderradius','_borderstyle','_bordercolor'), 'col2' => array('_heading','_heading_text','_heading_background_color','_heading_text_color','_icon','_icon_color','_css_class'), ), 'text' => array( 'name' => 'Text Box', 'col1' => array('_title','_metakey','_help','_default','_min_chars','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_validate','_custom_validate','_max_chars'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'tel' => array( 'name' => __( 'Telephone', 'ultimate-member' ), 'col1' => array('_title','_metakey','_help','_default','_min_chars','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_validate','_custom_validate','_max_chars'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member'), ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'number' => array( 'name' => __('Number','ultimate-member'), 'col1' => array('_title','_metakey','_help','_default','_min','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_validate','_custom_validate','_max'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'textarea' => array( 'name' => 'Textarea', 'col1' => array('_title','_metakey','_help','_height','_max_chars','_max_words','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_default','_html'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'select' => array( 'name' => 'Dropdown', 'col1' => array('_title','_metakey','_help','_default','_options','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_custom_dropdown_options_source','_parent_dropdown_relationship'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), '_options' => array( 'mode' => 'required', 'error' => __('You have not added any choices yet.','ultimate-member') ), ) ), 'multiselect' => array( 'name' => 'Multi-Select', 'col1' => array('_title','_metakey','_help','_default','_options','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_min_selections','_max_selections','_custom_dropdown_options_source'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), '_options' => array( 'mode' => 'required', 'error' => __('You have not added any choices yet.','ultimate-member') ), ) ), 'radio' => array( 'name' => 'Radio', 'col1' => array('_title','_metakey','_help','_default','_options','_visibility'), 'col2' => array('_label','_icon','_public','_roles'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), '_options' => array( 'mode' => 'required', 'error' => __('You have not added any choices yet.','ultimate-member') ), ) ), 'checkbox' => array( 'name' => 'Checkbox', 'col1' => array('_title','_metakey','_help','_default','_options','_visibility'), 'col2' => array('_label','_icon','_public','_roles','_max_selections'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), '_options' => array( 'mode' => 'required', 'error' => __('You have not added any choices yet.','ultimate-member') ), ) ), 'url' => array( 'name' => 'URL', 'col1' => array('_title','_metakey','_help','_default','_url_text','_visibility'), 'col2' => array('_label','_icon','_placeholder','_url_target','_url_rel','_public','_roles','_validate','_custom_validate'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'password' => array( 'name' => 'Password', 'col1' => array('_title','_metakey','_help','_min_chars','_max_chars','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_force_good_pass','_force_confirm_pass','_label_confirm_pass'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'image' => array( 'name' => 'Image Upload', 'col1' => array('_title','_metakey','_help','_allowed_types','_max_size','_crop','_visibility'), 'col2' => array('_label','_icon','_public','_roles','_upload_text','_upload_help_text','_button_text'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), '_max_size' => array( 'mode' => 'numeric', 'error' => __('Please enter a valid size','ultimate-member') ), ) ), 'file' => array( 'name' => 'File Upload', 'col1' => array('_title','_metakey','_help','_allowed_types','_max_size','_visibility'), 'col2' => array('_label','_icon','_public','_roles','_upload_text','_upload_help_text','_button_text'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), '_max_size' => array( 'mode' => 'numeric', 'error' => __( 'Please enter a valid size', 'ultimate-member' ) ), ) ), 'date' => array( 'name' => 'Date Picker', 'col1' => array( '_title', '_metakey', '_help', '_default', '_range', '_years', '_years_x', '_range_start', '_range_end', '_visibility' ), 'col2' => array( '_label', '_icon', '_placeholder', '_public', '_roles', '_format', '_format_custom', '_pretty_format', '_disabled_weekdays' ), 'col3' => array( '_required', '_editable' ), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __( 'You must provide a title', 'ultimate-member' ), ), '_metakey' => array( 'mode' => 'unique', ), '_years' => array( 'mode' => 'numeric', 'error' => __( 'Number of years is not valid', 'ultimate-member' ), ), '_range_start' => array( 'mode' => 'range-start', ), '_range_end' => array( 'mode' => 'range-end', ), ), ), 'time' => array( 'name' => 'Time Picker', 'col1' => array('_title','_metakey','_help','_format','_visibility'), 'col2' => array('_label','_icon','_placeholder','_default','_public','_roles','_intervals'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __( 'You must provide a title', 'ultimate-member' ) ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'rating' => array( 'name' => 'Rating', 'col1' => array('_title','_metakey','_help','_visibility'), 'col2' => array('_label','_icon','_public','_roles','_number','_default'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'block' => array( 'name' => 'Content Block', 'col1' => array('_title','_visibility'), 'col2' => array('_public','_roles'), 'col_full' => array('_content'), 'mce_content' => true, 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), ) ), 'shortcode' => array( 'name' => 'Shortcode', 'col1' => array('_title','_visibility'), 'col2' => array('_public','_roles'), 'col_full' => array('_content'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_content' => array( 'mode' => 'required', 'error' => __('You must add a shortcode to the content area','ultimate-member') ), ) ), 'spacing' => array( 'name' => 'Spacing', 'col1' => array('_title','_visibility'), 'col2' => array('_spacing'), 'form_only' => true, 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), ) ), 'divider' => array( 'name' => 'Divider', 'col1' => array('_title','_width','_divider_text','_visibility'), 'col2' => array('_style','_color','_public','_roles'), 'form_only' => true, 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), ) ), 'googlemap' => array( 'name' => 'Google Map', 'col1' => array('_title','_metakey','_help','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_validate','_custom_validate'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'youtube_video' => array( 'name' => 'YouTube Video', 'col1' => array('_title','_metakey','_help','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_validate','_custom_validate'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'vimeo_video' => array( 'name' => 'Vimeo Video', 'col1' => array('_title','_metakey','_help','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_validate','_custom_validate'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __('You must provide a title','ultimate-member') ), '_metakey' => array( 'mode' => 'unique', ), ) ), 'soundcloud_track' => array( 'name' => 'SoundCloud Track', 'col1' => array('_title','_metakey','_help','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_validate','_custom_validate'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __( 'You must provide a title', 'ultimate-member' ), ), '_metakey' => array( 'mode' => 'unique', ), ), ), 'spotify' => array( 'name' => __( 'Spotify URL', 'ultimate-member' ), 'col1' => array('_title','_metakey','_help','_visibility'), 'col2' => array('_label','_icon','_placeholder','_public','_roles','_validate','_custom_validate'), 'col3' => array('_required','_editable'), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __( 'You must provide a title', 'ultimate-member' ), ), '_metakey' => array( 'mode' => 'unique', ), ), ), 'oembed' => array( 'name' => __( 'oEmbed', 'ultimate-member' ), 'col1' => array( '_title', '_metakey', '_help', '_default', '_visibility' ), 'col2' => array( '_label', '_icon', '_placeholder', '_public', '_roles', '_validate', '_custom_validate' ), 'col3' => array( '_required', '_editable' ), 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => __( 'You must provide a title', 'ultimate-member' ), ), '_metakey' => array( 'mode' => 'unique', ), ), ), /*'group' => array( 'name' => 'Field Group', 'col1' => array('_title','_max_entries'), 'col2' => array('_label','_public','_roles'), 'form_only' => true, 'validate' => array( '_title' => array( 'mode' => 'required', 'error' => 'You must provide a title' ), '_label' => array( 'mode' => 'required', 'error' => 'You must provide a label' ), ) ),*/ ); /** * UM hook * * @type filter * @title um_core_fields_hook * @description UM Core Fields * @input_vars * [{"var":"$core_fields","type":"array","desc":"Core Fields"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_core_fields_hook', 'function_name', 10, 1 ); * @example * */ $this->core_fields = apply_filters( 'um_core_fields_hook', $this->core_fields ); } /** * Predefined Fields */ function set_predefined_fields() { global $wp_roles; $um_roles = array(); if ( ! empty( $wp_roles->roles ) ) { $exclude_roles = array_diff( array_keys( $wp_roles->roles ), UM()->roles()->get_editable_user_roles() ); $um_roles = UM()->roles()->get_roles( false, $exclude_roles ); } /** * UM hook * * @type filter * @title um_profile_privacy_options * @description Profile Privacy Options * @input_vars * [{"var":"$privacy_options","type":"array","desc":"Privacy Options"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_profile_privacy_options', 'function_name', 10, 1 ); * @example * */ $profile_privacy = apply_filters( 'um_profile_privacy_options', array( 'Everyone' => __( 'Everyone', 'ultimate-member' ), 'Only me' => __( 'Only me', 'ultimate-member' ) ) ); /* * it's important create key for array equals value of 'metakey'. * */ $this->predefined_fields = array( 'user_login' => array( 'title' => __( 'Username', 'ultimate-member' ), 'metakey' => 'user_login', 'type' => 'text', 'label' => __( 'Username', 'ultimate-member' ), 'required' => 1, 'public' => 1, 'editable' => false, 'validate' => 'unique_username', 'min_chars' => 3, 'max_chars' => 24, ), 'username' => array( 'title' => __( 'Username or Email', 'ultimate-member' ), 'metakey' => 'username', 'type' => 'text', 'label' => __( 'Username or Email', 'ultimate-member' ), 'required' => 1, 'public' => 1, 'editable' => false, 'validate' => 'unique_username_or_email', ), 'user_password' => array( 'title' => __( 'Password', 'ultimate-member' ), 'metakey' => 'user_password', 'type' => 'password', 'label' => __( 'Password', 'ultimate-member' ), 'required' => 1, 'public' => 1, 'editable' => true, 'min_chars' => 8, 'max_chars' => 30, 'force_good_pass' => 1, 'force_confirm_pass' => 1, 'label_confirm_pass' => __( 'Confirm Password', 'ultimate-member' ), ), 'first_name' => array( 'title' => __( 'First Name', 'ultimate-member' ), 'metakey' => 'first_name', 'type' => 'text', 'label' => __( 'First Name', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, ), 'last_name' => array( 'title' => __( 'Last Name', 'ultimate-member' ), 'metakey' => 'last_name', 'type' => 'text', 'label' => __( 'Last Name', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, ), 'nickname' => array( 'title' => __( 'Nickname', 'ultimate-member' ), 'metakey' => 'nickname', 'type' => 'text', 'label' => __( 'Nickname', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, ), 'user_url' => array( 'title' => __( 'Website URL', 'ultimate-member' ), 'metakey' => 'user_url', 'type' => 'url', 'label' => __( 'Website URL', 'ultimate-member' ), 'required' => 1, 'public' => 1, 'editable' => true, 'validate' => 'url', ), 'user_registered' => array( 'title' => __( 'Registration Date', 'ultimate-member' ), 'metakey' => 'user_registered', 'type' => 'text', 'label' => __( 'Registration Date', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'edit_forbidden' => 1, ), '_um_last_login' => array( 'title' => __( 'Last Login', 'ultimate-member' ), 'metakey' => '_um_last_login', 'type' => 'text', 'label' => __( 'Last Login', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'edit_forbidden' => 1, ), 'user_email' => array( 'title' => __( 'Email Address', 'ultimate-member' ), 'metakey' => 'user_email', 'type' => 'text', 'label' => __( 'Email Address', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'validate' => 'unique_email', 'autocomplete' => 'off', ), 'secondary_user_email' => array( 'title' => __( 'Secondary Email Address', 'ultimate-member' ), 'metakey' => 'secondary_user_email', 'type' => 'text', 'label' => __( 'Secondary Email Address', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'validate' => 'unique_email', 'autocomplete' => 'off', ), 'description' => array( 'title' => __( 'Biography', 'ultimate-member' ), 'metakey' => 'description', 'type' => 'textarea', 'label' => __( 'Biography', 'ultimate-member' ), 'html' => 0, 'required' => 0, 'public' => 1, 'editable' => true, 'max_words' => 40, 'placeholder' => __( 'Enter a bit about yourself...', 'ultimate-member' ), ), 'birth_date' => array( 'title' => __( 'Birth Date', 'ultimate-member' ), 'metakey' => 'birth_date', 'type' => 'date', 'label' => __( 'Birth Date', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'pretty_format' => 1, 'years' => 115, 'years_x' => 'past', 'icon' => 'far fa-calendar-days', ), 'gender' => array( 'title' => __( 'Gender', 'ultimate-member' ), 'metakey' => 'gender', 'type' => 'radio', 'label' => __( 'Gender', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'options' => array( __( 'Male', 'ultimate-member' ), __( 'Female', 'ultimate-member' ), ), ), 'country' => array( 'title' => __( 'Country', 'ultimate-member' ), 'metakey' => 'country', 'type' => 'select', 'label' => __( 'Country', 'ultimate-member' ), 'placeholder' => __( 'Choose a Country', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'options' => $this->get( 'countries' ), ), 'facebook' => array( 'title' => __( 'Facebook', 'ultimate-member' ), 'metakey' => 'facebook', 'type' => 'url', 'label' => __( 'Facebook', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-facebook-f', 'validate' => 'facebook_url', 'url_text' => 'Facebook', 'advanced' => 'social', 'color' => '#3B5999', 'match' => 'https://facebook.com/', ), 'twitter' => array( 'title' => __( 'X (formerly Twitter)', 'ultimate-member' ), 'metakey' => 'twitter', 'type' => 'url', 'label' => __( 'X', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-square-x-twitter', 'validate' => 'twitter_url', 'url_text' => 'X', 'advanced' => 'social', 'color' => '#0f1419', 'match' => 'https://twitter.com/', ), 'linkedin' => array( 'title' => __( 'LinkedIn', 'ultimate-member' ), 'metakey' => 'linkedin', 'type' => 'url', 'label' => __( 'LinkedIn', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-linkedin-in', 'validate' => 'linkedin_url', 'url_text' => 'LinkedIn', 'advanced' => 'social', 'color' => '#0976b4', 'match' => 'https://linkedin.com/', ), 'instagram' => array( 'title' => __( 'Instagram', 'ultimate-member' ), 'metakey' => 'instagram', 'type' => 'url', 'label' => __( 'Instagram', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-instagram', 'validate' => 'instagram_url', 'url_text' => 'Instagram', 'advanced' => 'social', 'color' => 'radial-gradient(circle at 30% 107%, #fdf497 0%, #fdf497 5%, #fd5949 45%,#d6249f 60%,#285AEB 90%)', 'match' => 'https://instagram.com/', ), 'skype' => array( 'title' => __( 'Skype ID', 'ultimate-member' ), 'metakey' => 'skype', 'type' => 'text', 'label' => __( 'Skype ID', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-skype', 'validate' => 'skype', 'url_text' => __( 'Join chat', 'ultimate-member' ), ), 'viber' => array( 'title' => __( 'Viber number', 'ultimate-member' ), 'metakey' => 'viber', 'type' => 'text', 'label' => __( 'Viber number', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-viber', 'validate' => 'phone_number', ), 'whatsapp' => array( 'title' => __( 'WhatsApp number', 'ultimate-member' ), 'metakey' => 'whatsapp', 'type' => 'text', 'label' => __( 'WhatsApp number', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-whatsapp', 'validate' => 'phone_number', ), 'telegram' => array( 'title' => __( 'Telegram', 'ultimate-member' ), 'metakey' => 'telegram', 'type' => 'url', 'label' => __( 'Telegram', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-telegram', 'validate' => 'telegram_url', 'url_text' => 'Telegram', 'advanced' => 'social', 'color' => '#24A1DE', 'match' => 'https://t.me/', ), 'discord' => array( 'title' => __( 'Discord', 'ultimate-member' ), 'metakey' => 'discord', 'type' => 'text', 'label' => __( 'Discord ID', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'icon' => 'fab fa-discord', 'url_target' => '_blank', 'url_text' => __( 'Discord', 'ultimate-member' ), 'url_rel' => 'nofollow', 'validate' => 'discord', 'advanced' => 'social', 'color' => '#7289da', 'match' => 'https://discord.com/users/', ), 'tiktok' => array( 'title' => __( 'TikTok', 'ultimate-member' ), 'metakey' => 'tiktok', 'type' => 'url', 'label' => __( 'TikTok', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-tiktok', 'validate' => 'tiktok_url', 'url_text' => 'TikTok', 'advanced' => 'social', 'color' => '#000000', 'match' => 'https://tiktok.com/@', ), 'twitch' => array( 'title' => __( 'Twitch', 'ultimate-member' ), 'metakey' => 'twitch', 'type' => 'url', 'label' => __( 'Twitch', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'icon' => 'fab fa-twitch', 'url_target' => '_blank', 'url_rel' => 'nofollow', 'validate' => 'twitch_url', 'url_text' => 'Twitch', 'advanced' => 'social', 'color' => '#6441a5', 'match' => 'https://twitch.tv/', ), 'reddit' => array( 'title' => __( 'Reddit', 'ultimate-member' ), 'metakey' => 'reddit', 'type' => 'url', 'label' => __( 'Reddit', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'icon' => 'fab fa-reddit-alien', 'url_target' => '_blank', 'url_rel' => 'nofollow', 'validate' => 'reddit_url', 'url_text' => 'Reddit', 'advanced' => 'social', 'color' => '#ff4500', 'match' => 'https://www.reddit.com/user/', ), 'youtube' => array( 'title' => __( 'YouTube', 'ultimate-member' ), 'metakey' => 'youtube', 'type' => 'url', 'label' => __( 'YouTube', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-youtube', 'validate' => 'youtube_url', 'url_text' => __( 'YouTube', 'ultimate-member' ), 'advanced' => 'social', 'color' => '#e52d27', 'match' => array( 'https://youtube.com/', 'https://youtu.be/', ), ), 'soundcloud' => array( 'title' => __( 'SoundCloud', 'ultimate-member' ), 'metakey' => 'soundcloud', 'type' => 'url', 'label' => __( 'SoundCloud', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'url_target' => '_blank', 'url_rel' => 'nofollow', 'icon' => 'fab fa-soundcloud', 'validate' => 'soundcloud_url', 'url_text' => 'SoundCloud', 'advanced' => 'social', 'color' => '#f50', 'match' => 'https://soundcloud.com/', ), 'role_select' => array( 'title' => __( 'Roles (Dropdown)', 'ultimate-member' ), 'metakey' => 'role_select', 'type' => 'select', 'label' => __( 'Account Type', 'ultimate-member' ), 'placeholder' => __( 'Choose account type', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'options' => $um_roles, ), 'role_radio' => array( 'title' => __( 'Roles (Radio)', 'ultimate-member' ), 'metakey' => 'role_radio', 'type' => 'radio', 'label' => __( 'Account Type', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'options' => $um_roles, ), 'languages' => array( 'title' => __( 'Languages', 'ultimate-member' ), 'metakey' => 'languages', 'type' => 'multiselect', 'label' => __( 'Languages Spoken', 'ultimate-member' ), 'placeholder' => __( 'Select languages', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'options' => $this->get( 'languages' ), ), 'phone_number' => array( 'title' => __( 'Phone Number', 'ultimate-member' ), 'metakey' => 'phone_number', 'type' => 'tel', 'label' => __( 'Phone Number', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'validate' => 'phone_number', 'icon' => 'fas fa-phone', ), 'mobile_number' => array( 'title' => __( 'Mobile Number', 'ultimate-member' ), 'metakey' => 'mobile_number', 'type' => 'tel', 'label' => __( 'Mobile Number', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'validate' => 'phone_number', 'icon' => 'fas fa-mobile-screen', ), // private use ( not public list ) 'profile_photo' => array( 'title' => __('Profile Photo','ultimate-member'), 'metakey' => 'profile_photo', 'type' => 'image', 'label' => __('Change your profile photo','ultimate-member'), 'upload_text' => __('Upload your photo here','ultimate-member'), 'icon' => 'fas fa-camera', 'crop' => 1, 'max_size' => ( UM()->options()->get('profile_photo_max_size') ) ? UM()->options()->get('profile_photo_max_size') : 999999999, 'min_width' => str_replace('px','',UM()->options()->get('profile_photosize')), 'min_height' => str_replace('px','',UM()->options()->get('profile_photosize')), 'private_use' => true, ), 'cover_photo' => array( 'title' => __('Cover Photo','ultimate-member'), 'metakey' => 'cover_photo', 'type' => 'image', 'label' => __('Change your cover photo','ultimate-member'), 'upload_text' => __('Upload profile cover here','ultimate-member'), 'icon' => 'far fa-image', 'crop' => 2, 'max_size' => ( UM()->options()->get('cover_photo_max_size') ) ? UM()->options()->get('cover_photo_max_size') : 999999999, 'modal_size' => 'large', 'ratio' => str_replace(':1','',UM()->options()->get('profile_cover_ratio')), 'min_width' => UM()->options()->get('cover_min_width'), 'private_use' => true, ), 'username_b' => array( 'title' => __('Username or Email','ultimate-member'), 'metakey' => 'username_b', 'type' => 'text', 'placeholder' => __('Enter your username or email','ultimate-member'), 'required' => 1, 'public' => 1, 'editable' => false, 'private_use' => true, ), // account page use ( not public ) 'profile_privacy' => array( 'title' => __( 'Profile Privacy', 'ultimate-member' ), 'metakey' => 'profile_privacy', 'type' => 'select', 'label' => __( 'Profile Privacy', 'ultimate-member' ), 'help' => __( 'Who can see your public profile?', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'default' => 'Everyone', 'options' => $profile_privacy, 'allowclear' => 0, 'account_only' => true, 'required_perm' => 'can_make_private_profile', ), 'profile_noindex' => array( 'title' => __( 'Avoid indexing my profile by search engines', 'ultimate-member' ), 'metakey' => 'profile_noindex', 'type' => 'select', 'label' => __( 'Avoid indexing my profile by search engines', 'ultimate-member' ), 'help' => __( 'Hide my profile for robots?', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'default' => UM()->roles()->um_user_can( 'profile_noindex' ) ? '1' : '0', 'options' => array( '0' => __( 'No', 'ultimate-member' ), '1' => __( 'Yes', 'ultimate-member' ), ), 'allowclear' => 0, 'account_only' => true, 'required_perm' => 'can_make_private_profile', ), 'hide_in_members' => array( 'title' => __( 'Hide my profile from directory', 'ultimate-member' ), 'metakey' => 'hide_in_members', 'type' => 'radio', 'label' => __( 'Hide my profile from directory', 'ultimate-member' ), 'help' => __( 'Here you can hide yourself from appearing in public directory', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'default' => UM()->member_directory()->get_hide_in_members_default() ? 'Yes' : 'No', 'options' => array( 'No' => __( 'No', 'ultimate-member' ), 'Yes' => __( 'Yes', 'ultimate-member' ), ), 'account_only' => true, 'required_opt' => array( 'members_page', true ), ), 'um_show_last_login' => array( 'title' => __( 'Show my last login?', 'ultimate-member' ), 'metakey' => 'um_show_last_login', 'type' => 'radio', 'label' => __( 'Show my last login?', 'ultimate-member' ), 'help' => __( 'Here you can hide last login field on profile page and card in member directory', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'default' => 'yes', 'options' => array( 'no' => __( 'No', 'ultimate-member' ), 'yes' => __( 'Yes', 'ultimate-member' ), ), 'account_only' => true, ), 'delete_account' => array( 'title' => __( 'Delete Account', 'ultimate-member' ), 'metakey' => 'delete_account', 'type' => 'radio', 'label' => __( 'Delete Account', 'ultimate-member'), 'help' => __( 'If you confirm, everything related to your profile will be deleted permanently from the site', 'ultimate-member' ), 'required' => 0, 'public' => 1, 'editable' => true, 'default' => __( 'No', 'ultimate-member' ), 'options' => array( __( 'Yes', 'ultimate-member' ), __( 'No', 'ultimate-member' ), ), 'account_only' => true, ), 'single_user_password' => array( 'title' => __( 'Password', 'ultimate-member' ), 'metakey' => 'single_user_password', 'type' => 'password', 'label' => __( 'Password', 'ultimate-member' ), 'required' => 1, 'public' => 1, 'editable' => true, 'account_only' => true, ), ); /** * Filters Ultimate Member predefined fields. * * @param {array} $fields Predefined fields. * * @return {array} Predefined fields. * * @since 1.3.x * @hook um_predefined_fields_hook * * @example