editing = false; $this->viewing = false; $this->timestamp = current_time( 'timestamp' ); } /** * Standard checkbox field * * @param integer $id * @param string $title * @param bool $checked */ function checkbox( $id, $title, $checked = true ) { /** * Set value on form submission */ if ( isset( $_REQUEST[ $id ] ) ) { $checked = (bool) $_REQUEST[ $id ]; } $class = $checked ? 'um-icon-android-checkbox-outline' : 'um-icon-android-checkbox-outline-blank'; ?>
builtin()->get_all_user_fields(); foreach ( $fields as $field => $args ) { if ( isset( $args['advanced'] ) && $args['advanced'] == 'social' ) { $social[ $field ] = $args; } } foreach ( $social as $k => $arr ) { if ( um_profile( $k ) ) { ?> '; $fields = UM()->builtin()->get_specific_fields( $field ); $output = null; foreach ( $fields as $key => $data ) { $output .= UM()->fields()->edit_field( $key, $data ); } echo $output; echo ''; } /** * Get hidden field * * @param string $key * @param string $value * * @return string */ function disabled_hidden_field( $key, $value ) { return ''; } /** * Updates a field globally * * @param integer $id * @param array $args */ function globally_update_field( $id, $args ) { $fields = UM()->builtin()->saved_fields; $fields[ $id ] = $args; unset( $fields[ $id ]['in_row'] ); unset( $fields[ $id ]['in_sub_row'] ); unset( $fields[ $id ]['in_column'] ); unset( $fields[ $id ]['in_group'] ); unset( $fields[ $id ]['position'] ); do_action( 'um_add_new_field', $id, $args ); update_option( 'um_fields', $fields ); } /** * Updates a field in form only * * @param integer $id * @param array $args * @param integer $form_id */ function update_field( $id, $args, $form_id ) { $fields = UM()->query()->get_attr( 'custom_fields', $form_id ); if ( $args['type'] == 'row' ) { if ( isset( $fields[ $id ] ) ) { $old_args = $fields[ $id ]; foreach ( $old_args as $k => $v ) { if ( ! in_array( $k, array( 'sub_rows', 'cols' ) ) ) { unset( $old_args[ $k ] ); } } $args = array_merge( $old_args, $args ); } } // custom fields support if ( isset( UM()->builtin()->predefined_fields[ $id ] ) && isset( UM()->builtin()->predefined_fields[ $id ]['custom'] ) ) { $args = array_merge( UM()->builtin()->predefined_fields[ $id ], $args ); } $fields[ $id ] = $args; // for group field only if ( $args['type'] == 'group' ) { $fields[ $id ]['in_group'] = ''; } UM()->query()->update_attr( 'custom_fields', $form_id, $fields ); } /** * Deletes a field in form only * * @param integer $id * @param integer $form_id */ function delete_field_from_form( $id, $form_id ) { $fields = UM()->query()->get_attr( 'custom_fields', $form_id ); if ( isset( $fields[ $id ] ) ) { $condition_fields = get_option( 'um_fields' ); if( ! is_array( $condition_fields ) ) $condition_fields = array(); foreach ( $condition_fields as $key => $value ) { $deleted_field = array_search( $id, $value ); if ( $key != $id && $deleted_field != false ) { $deleted_field_id = str_replace( 'conditional_field', '', $deleted_field ); if ( $deleted_field_id == '' ) { $arr_id = 0; } else { $arr_id = $deleted_field_id; } unset( $condition_fields[ $key ][ 'conditional_action' . $deleted_field_id ] ); unset( $condition_fields[ $key ][ $deleted_field ] ); unset( $condition_fields[ $key ][ 'conditional_operator' . $deleted_field_id ] ); unset( $condition_fields[ $key ][ 'conditional_value' . $deleted_field_id ] ); unset( $condition_fields[ $key ]['conditions'][ $arr_id ] ); unset( $fields[ $key ][ 'conditional_action' . $deleted_field_id ] ); unset( $fields[ $key ][ $deleted_field ] ); unset( $fields[ $key ][ 'conditional_operator' . $deleted_field_id ] ); unset( $fields[ $key ][ 'conditional_value' . $deleted_field_id ] ); unset( $fields[ $key ]['conditions'][ $arr_id ] ); } } update_option( 'um_fields' , $condition_fields ); unset( $fields[ $id ] ); UM()->query()->update_attr( 'custom_fields', $form_id, $fields ); } } /** * Deletes a field from custom fields * * @param integer $id */ function delete_field_from_db( $id ) { $fields = UM()->builtin()->saved_fields; if ( isset( $fields[ $id ] ) ) { $args = $fields[ $id ]; unset( $fields[ $id ] ); do_action( 'um_delete_custom_field', $id, $args ); update_option( 'um_fields', $fields ); global $wpdb; $forms = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'um_form'" ); foreach ( $forms as $form_id ) { $form_fields = get_post_meta( $form_id, '_um_custom_fields', true ); unset( $form_fields[ $id ] ); update_post_meta( $form_id, '_um_custom_fields', $form_fields ); } $directories = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'um_directory'" ); foreach ( $directories as $directory_id ) { // Frontend filters $directory_search_fields = get_post_meta( $directory_id, '_um_search_fields', true ); $directory_search_fields = array_values( array_diff( $directory_search_fields, array( $id ) ) ); update_post_meta( $directory_id, '_um_search_fields', $directory_search_fields ); // Admin filtering $directory_search_filters = get_post_meta( $directory_id, '_um_search_filters', true ); unset( $directory_search_filters[ $id ] ); update_post_meta( $directory_id, '_um_search_filters', $directory_search_filters ); // display in tagline $directory_reveal_fields = get_post_meta( $directory_id, '_um_reveal_fields', true ); $directory_reveal_fields = array_values( array_diff( $directory_reveal_fields, array( $id ) ) ); update_post_meta( $directory_id, '_um_reveal_fields', $directory_reveal_fields ); // extra user information section $directory_tagline_fields = get_post_meta( $directory_id, '_um_tagline_fields', true ); $directory_tagline_fields = array_values( array_diff( $directory_tagline_fields, array( $id ) ) ); update_post_meta( $directory_id, '_um_tagline_fields', $directory_tagline_fields ); // Custom fields selected in "Choose field(s) to enable in sorting" $directory_sorting_fields = get_post_meta( $directory_id, '_um_sorting_fields', true ); foreach ( $directory_sorting_fields as $key => $sorting_data ) { if ( is_array( $sorting_data ) && array_key_exists( $id, $sorting_data ) ) { unset( $directory_sorting_fields[ $key ] ); } } $directory_sorting_fields = array_values( $directory_sorting_fields ); update_post_meta( $directory_id, '_um_sorting_fields', $directory_sorting_fields ); // If "Default sort users by" = "Other (Custom Field)" is selected when delete this custom field and set default sorting $directory_sortby_custom = get_post_meta( $directory_id, '_um_sortby_custom', true ); if ( $directory_sortby_custom === $id ) { $directory_sortby = get_post_meta( $directory_id, '_um_sortby', true ); if ( 'other' === $directory_sortby ) { update_post_meta( $directory_id, '_um_sortby', 'user_registered_desc' ); } update_post_meta( $directory_id, '_um_sortby_custom', '' ); update_post_meta( $directory_id, '_um_sortby_custom_label', '' ); } } } } /** * Quickly adds a field from custom fields * * @param integer $global_id * @param integer $form_id * @param array $position */ function add_field_from_list( $global_id, $form_id, $position = array() ) { $fields = UM()->query()->get_attr( 'custom_fields', $form_id ); $field_scope = UM()->builtin()->saved_fields; if ( ! isset( $fields[ $global_id ] ) ) { $count = 1; if ( ! empty( $fields ) ) { $count = count( $fields ) + 1; } $fields[ $global_id ] = $field_scope[ $global_id ]; $fields[ $global_id ]['position'] = $count; // set position if ( $position ) { foreach ( $position as $key => $val) { $fields[ $global_id ][ $key ] = $val; } } // add field to form UM()->query()->update_attr( 'custom_fields', $form_id, $fields ); } } /** * Quickly adds a field from pre-defined fields * * @param integer $global_id * @param integer $form_id * @param array $position */ function add_field_from_predefined( $global_id, $form_id, $position = array() ) { $fields = UM()->query()->get_attr( 'custom_fields', $form_id ); $field_scope = UM()->builtin()->predefined_fields; if ( ! isset( $fields[ $global_id ] ) ) { $count = 1; if ( ! empty( $fields ) ) { $count = count( $fields ) + 1; } $fields[ $global_id ] = $field_scope[ $global_id ]; $fields[ $global_id ]['position'] = $count; // set position if ( $position ) { foreach ( $position as $key => $val ) { $fields[ $global_id ][ $key ] = $val; } } // add field to form UM()->query()->update_attr( 'custom_fields', $form_id, $fields ); } } /** * Duplicates a frield by meta key * * @param integer $id * @param integer $form_id */ function duplicate_field( $id, $form_id ) { $fields = UM()->query()->get_attr( 'custom_fields', $form_id ); $all_fields = UM()->builtin()->saved_fields; $inc = count( $fields ) + 1; $duplicate = $fields[ $id ]; $new_metakey = $id . "_" . $inc; $new_title = $fields[ $id ]['title'] . " #" . $inc; $new_position = $inc; $duplicate['title'] = $new_title; $duplicate['metakey'] = $new_metakey; $duplicate['position'] = $new_position; $fields[ $new_metakey ] = $duplicate; $all_fields[ $new_metakey ] = $duplicate; // not global attributes unset( $all_fields[ $new_metakey ]['in_row'] ); unset( $all_fields[ $new_metakey ]['in_sub_row'] ); unset( $all_fields[ $new_metakey ]['in_column'] ); unset( $all_fields[ $new_metakey ]['in_group'] ); unset( $all_fields[ $new_metakey ]['position'] ); do_action( 'um_add_new_field', $new_metakey, $duplicate ); UM()->query()->update_attr( 'custom_fields', $form_id, $fields ); update_option( 'um_fields', $all_fields ); } /** * Print field error * * @param string $text * @param bool $force_show * * @return string */ function field_error( $text, $force_show = false ) { if ( empty( $text ) ) { return ''; } if ( $force_show ) { $output = '
' . esc_attr( $text ) . '
'; return $output; } if ( isset( $this->set_id ) && UM()->form()->processing == $this->set_id ) { $output = '
' . esc_attr( $text ) . '
'; } else { $output = ''; } if ( ! UM()->form()->processing ) { $output = '
' . esc_attr( $text ) . '
'; } return $output; } /** * Print field notice * * @param string $text * @param bool $force_show * * @return string */ function field_notice( $text, $force_show = false ) { if ( empty( $text ) ) { return ''; } if ( $force_show ) { $output = '
' . esc_attr( $text ) . '
'; return $output; } if ( isset( $this->set_id ) && UM()->form()->processing == $this->set_id ) { $output = '
' . esc_attr( $text ) . '
'; } else { $output = ''; } if ( ! UM()->form()->processing ) { $output = '
' . esc_attr( $text ) . '
'; } return $output; } /** * Checks if field has a server-side error * * @param string $key * * @return boolean */ function is_error( $key ) { return UM()->form()->has_error( $key ); } /** * Checks if field has a notice * * @param string $key * * @return boolean */ function is_notice( $key ) { return UM()->form()->has_notice( $key ); } /** * Returns field error * * @param string $key * * @return string */ function show_error( $key ) { return UM()->form()->errors[ $key ]; } /** * Returns field notices * * @param string $key * * @return string */ function show_notice( $key ) { return UM()->form()->notices[ $key ]; } /** * Display field label * * @param string $label * @param string $key * @param array $data * * @return string */ function field_label( $label, $key, $data ) { $output = null; $output .= '
'; if ( isset( $data['icon'] ) && $data['icon'] != '' && isset( $this->field_icons ) && $this->field_icons != 'off' && ( $this->field_icons == 'label' || $this->viewing == true ) ) { $output .= '
'; } if ( $this->viewing == true ) { /** * UM hook * * @type filter * @title um_view_label_{$key} * @description Change field label on view by field $key * @input_vars * [{"var":"$label","type":"string","desc":"Field Label"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_view_label_{$key}', 'function_name', 10, 1 ); * @example * */ $label = apply_filters( "um_view_label_{$key}", $label ); } else { /** * UM hook * * @type filter * @title um_edit_label_{$key} * @description Change field label on edit by field $key * @input_vars * [{"var":"$label","type":"string","desc":"Field Label"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_edit_label_{$key}', 'function_name', 10, 1 ); * @example * */ $label = apply_filters( "um_edit_label_{$key}", $label ); /** * UM hook * * @type filter * @title um_edit_label_all_fields * @description Change field label on view by field $key * @input_vars * [{"var":"$label","type":"string","desc":"Field Label"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_edit_label_all_fields', 'function_name', 10, 2 ); * @example * */ $label = apply_filters( 'um_edit_label_all_fields', $label, $data ); } $fields_without_metakey = UM()->builtin()->get_fields_without_metakey(); $for_attr = ''; if ( ! in_array( $data['type'], $fields_without_metakey ) ) { $for_attr = ' for="' . esc_attr( $key . UM()->form()->form_suffix ) . '"'; } $output .= '' . __( $label, 'ultimate-member' ) . ''; if ( ! empty( $data['help'] ) && $this->viewing == false && ! strstr( $key, 'confirm_user_pass' ) ) { if ( ! UM()->mobile()->isMobile() ) { if ( ! isset( $this->disable_tooltips ) ) { $output .= ''; } } if ( UM()->mobile()->isMobile() || isset( $this->disable_tooltips ) ) { $output .= '' . __( $data['help'], 'ultimate-member' ) . ''; } } $output .= '
'; return $output; } /** * Output field classes * * @param string $key * @param array $data * @param string $add * * @return string */ function get_class( $key, $data, $add = null ) { $classes = null; $classes .= 'um-form-field '; if ( $this->is_error( $key ) ) { $classes .= 'um-error '; } else { $classes .= 'valid '; } if ( ! isset( $data['required'] ) ) { $classes .= 'not-required '; } if ( $data['type'] == 'date' ) { $classes .= 'um-datepicker '; } if ( $data['type'] == 'time' ) { $classes .= 'um-timepicker '; } if ( ! empty( $data['icon'] ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) { $classes .= 'um-iconed '; } if ( $add ) { $classes .= $add . ' '; } /** * UM hook * * @type filter * @title um_extend_field_classes * @description Change field classes * @input_vars * [{"var":"$classes","type":"string","desc":"Field Classes"}, * {"var":"$key","type":"string","desc":"Field Key"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_extend_field_classes', 'function_name', 10, 3 ); * @example * */ $classes = apply_filters( 'um_extend_field_classes', $classes, $key, $data ); return $classes; } /** * Gets field value * * @param string $key * @param boolean $default * @param array $data * * @return mixed */ function field_value( $key, $default = false, $data = null ) { // preview in backend if ( isset( UM()->user()->preview ) && UM()->user()->preview ) { if ( $this->set_mode == 'login' || $this->set_mode == 'register' ) { return ''; } else { $val = um_user( $key ); if ( ! empty( $val ) ) { return $val; } else { return ''; } } } if ( isset( $_SESSION ) && isset( $_SESSION['um_social_profile'][ $key ] ) && isset( $this->set_mode ) && $this->set_mode == 'register' ) { return $_SESSION['um_social_profile'][ $key ]; } $type = ( isset( $data['type'] ) ) ? $data['type'] : ''; // normal state if ( isset( UM()->form()->post_form[ $key ] ) ) { //show empty value for password fields if ( strstr( $key, 'user_pass' ) && $this->set_mode != 'password' ) { return ''; } if ( 'profile' === $this->set_mode ) { if ( ! isset( UM()->form()->post_form['profile_nonce'] ) || false === wp_verify_nonce( UM()->form()->post_form['profile_nonce'], 'um-profile-nonce' . UM()->user()->target_id ) ) { return ''; } } return stripslashes_deep( UM()->form()->post_form[ $key ] ); } elseif ( um_user( $key ) && $this->editing == true ) { //show empty value for password fields if ( strstr( $key, 'user_pass' ) || $type == 'password' ) { return ''; } $value = um_user( $key ); /** * UM hook * * @type filter * @title um_edit_{$key}_field_value * @description Change field value on edit by field $key * @input_vars * [{"var":"$value","type":"string","desc":"Field Value"}, * {"var":"$key","type":"string","desc":"Field Key"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_edit_{$key}_field_value', 'function_name', 10, 2 ); * @example * */ $value = apply_filters( "um_edit_{$key}_field_value", $value, $key ); /** * UM hook * * @type filter * @title um_edit_{$type}_field_value * @description Change field value on edit by field $type * @input_vars * [{"var":"$value","type":"string","desc":"Field Value"}, * {"var":"$key","type":"string","desc":"Field Key"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_edit_{$type}_field_value', 'function_name', 10, 2 ); * @example * */ $value = apply_filters( "um_edit_{$type}_field_value", $value, $key ); } elseif ( ( um_user( $key ) || isset( $data['show_anyway'] ) ) && $this->viewing == true ) { return um_filtered_value( $key, $data ); } elseif ( isset( UM()->user()->profile[ $key ] ) ) { $value = UM()->user()->profile[ $key ]; /** * UM hook * * @type filter * @title um_edit_{$key}_field_value * @description Change field value on edit by field $key * @input_vars * [{"var":"$value","type":"string","desc":"Field Value"}, * {"var":"$key","type":"string","desc":"Field Key"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_edit_{$key}_field_value', 'function_name', 10, 2 ); * @example * */ $value = apply_filters( "um_edit_{$key}_field_value", $value, $key ); $value = maybe_unserialize( $value ); } elseif ( $default ) { /** * UM hook * * @type filter * @title um_field_default_value * @description Change field default value * @input_vars * [{"var":"$default","type":"string","desc":"Field Default Value"}, * {"var":"$data","type":"array","desc":"Field Data"}, * {"var":"$type","type":"string","desc":"Field Type"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_field_default_value', 'function_name', 10, 2 ); * @example * */ $default = apply_filters( 'um_field_default_value', $default, $data, $type ); /** * UM hook * * @type filter * @title um_field_{$key}_default_value * @description Change field default value by $key * @input_vars * [{"var":"$default","type":"string","desc":"Field Default Value"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_field_{$key}_default_value', 'function_name', 10, 2 ); * @example * */ $default = apply_filters( "um_field_{$key}_default_value", $default, $data ); /** * UM hook * * @type filter * @title um_field_{$type}_default_value * @description Change field default value by $type * @input_vars * [{"var":"$default","type":"string","desc":"Field Default Value"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_field_{$type}_default_value', 'function_name', 10, 2 ); * @example * */ $default = apply_filters( "um_field_{$type}_default_value", $default, $data ); } // Default Value for Registration Form and Profile Form editing if ( ! isset( $value ) && ( $this->set_mode == 'register' || $this->editing == true ) ) { /** * UM hook * * @type filter * @title um_edit_{$key}_field_value * @description Change field value on edit by field $key * @input_vars * [{"var":"$value","type":"string","desc":"Field Value"}, * {"var":"$key","type":"string","desc":"Field Key"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_edit_{$key}_field_value', 'function_name', 10, 2 ); * @example * */ $value = apply_filters( "um_edit_{$key}_field_value", $default, $key ); } elseif ( isset( $value ) && is_array( $value ) && ! count( $value ) ) { $value = ''; } elseif ( ! isset( $value ) ) { $value = ''; } /** * UM hook * * @type filter * @title um_field_value * @description Change field value * @input_vars * [{"var":"$value","type":"string","desc":"Field Value"}, * {"var":"$key","type":"string","desc":"Field Key"},, * {"var":"$type","type":"string","desc":"Field Type"} * {"var":"$default","type":"string","desc":"Field Default Value"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @usage add_filter( 'um_field_value', 'function_name', 10, 5 ); */ return apply_filters( 'um_field_value', $value, $default, $key, $type, $data ); } /** * Checks if an option is selected * * is used by Select, Multiselect and Checkbox fields * * @param string $key * @param string $value * @param array $data * * @return boolean */ function is_selected( $key, $value, $data ) { global $wpdb; /** * UM hook * * @type filter * @title um_is_selected_filter_key * @description Change is selected filter key * @input_vars * [{"var":"$key","type":"string","desc":"Selected filter key"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_is_selected_filter_key', 'function_name', 10, 1 ); * @example * */ $key = apply_filters( 'um_is_selected_filter_key', $key ); if ( isset( UM()->form()->post_form[ $key ] ) ) { if ( is_array( UM()->form()->post_form[ $key ] ) ) { if ( in_array( $value, UM()->form()->post_form[ $key ] ) ) { return true; } $stripslashed = array_map( 'stripslashes', UM()->form()->post_form[ $key ] ); if ( in_array( $value, $stripslashed ) ) { return true; } if ( in_array( html_entity_decode( $value ), UM()->form()->post_form[ $key ] ) ) { return true; } } else { if ( $value == UM()->form()->post_form[ $key ] ) { return true; } } } else { $field_value = um_user( $key ); if ( ! $field_value ) { $field_value = 0; } if ( $field_value == 0 && $value == '0' ) { $value = (int) $value; } if ( strstr( $key, 'role_' ) || $key == 'role' ) { $field_value = strtolower( UM()->roles()->get_editable_priority_user_role( um_user( 'ID' ) ) ); $role_keys = get_option( 'um_roles', array() ); if ( ! empty( $role_keys ) ) { if ( in_array( $field_value, $role_keys ) ) { $field_value = 'um_' . $field_value; } } } /** * UM hook * * @type filter * @title um_is_selected_filter_value * @description Change is selected filter value * @input_vars * [{"var":"$value","type":"string","desc":"Selected filter value"}, * {"var":"$key","type":"string","desc":"Selected filter key"}, * {"var":"$value","type":"string","desc":"Selected filter value"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_is_selected_filter_value', 'function_name', 10, 2 ); * @example * */ $field_value = apply_filters( 'um_is_selected_filter_value', $field_value, $key, $value ); /** * UM hook * * @type filter * @title um_is_selected_filter_data * @description Change is selected filter data * @input_vars * [{"var":"$data","type":"array","desc":"Selected filter value"}, * {"var":"$key","type":"string","desc":"Selected filter key"}, * {"var":"$value","type":"string","desc":"Selected filter value"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_is_selected_filter_data', 'function_name', 10, 3 ); * @example * */ $data = apply_filters( 'um_is_selected_filter_data', $data, $key, $field_value ); if ( ! $this->editing || 'custom' == $this->set_mode ) { // show default on register screen if there is default if ( isset( $data['default'] ) ) { if ( ! is_array( $data['default'] ) && $data['default'] === $value ) { return true; } if ( is_array( $data['default'] ) && in_array( $value, $data['default'] ) ) { return true; } if ( is_array( $data['default'] ) && array_intersect( $data['options'], $data['default'] ) ) { return true; } // default value with comma if ( is_string( $data['default'] ) && strstr( $data['default'], ',' ) ) { $choices = array_map( 'trim', explode( ',', $data['default'] ) ); if ( in_array( $value, $choices ) ) { return true; } } } } else { if ( $field_value && is_array( $field_value ) && ( in_array( $value, $field_value ) || in_array( html_entity_decode( $value ), $field_value ) ) ) { return true; } if ( $field_value == 0 && ! is_array( $field_value ) && $field_value === $value ) { return true; } if ( $field_value && ! is_array( $field_value ) && $field_value == $value ) { return true; } if ( $field_value && ! is_array( $field_value ) && html_entity_decode( $field_value ) == html_entity_decode( $value ) ) { return true; } // show default on edit screen if there isn't meta row in usermeta table $direct_db_value = $wpdb->get_var( $wpdb->prepare( "SELECT ISNULL( meta_value ) FROM {$wpdb->usermeta} WHERE user_id = %d AND meta_key = %s", um_user( 'ID' ), $key ) ); if ( ! isset( $direct_db_value ) && isset( $data['default'] ) ) { if ( ! is_array( $data['default'] ) && strstr( $data['default'], ', ' ) ) { $data['default'] = explode( ', ', $data['default'] ); } if ( ! is_array( $data['default'] ) && $data['default'] === $value ) { return true; } if ( is_array( $data['default'] ) && in_array( $value, $data['default'] ) ) { return true; } } } } return false; } /** * Checks if a radio button is selected * * @param string $key * @param string $value * @param array $data * * @return boolean */ function is_radio_checked( $key, $value, $data ) { global $wpdb; if ( isset( UM()->form()->post_form[ $key ] ) ) { if ( is_array( UM()->form()->post_form[ $key ] ) && in_array( $value, UM()->form()->post_form[ $key ] ) ) { return true; } elseif ( $value == UM()->form()->post_form[ $key ] ) { return true; } } else { if ( $this->editing && 'custom' !== $this->set_mode ) { if ( um_user( $key ) ) { $um_user_value = um_user( $key ); if ( strstr( $key, 'role_' ) || $key == 'role' ) { $um_user_value = strtolower( UM()->roles()->get_editable_priority_user_role( um_user( 'ID' ) ) ); $role_keys = get_option( 'um_roles', array() ); if ( ! empty( $role_keys ) ) { if ( in_array( $um_user_value, $role_keys ) ) { $um_user_value = 'um_' . $um_user_value; } } } if ( $um_user_value == $value ) { return true; } if ( is_array( $um_user_value ) && in_array( $value, $um_user_value ) ) { return true; } if ( is_array( $um_user_value ) ) { foreach ( $um_user_value as $u ) { if ( $u == html_entity_decode( $value ) ) { return true; } } } } else { // show default on edit screen if there isn't meta row in usermeta table $direct_db_value = $wpdb->get_var( $wpdb->prepare( "SELECT ISNULL( meta_value ) FROM {$wpdb->usermeta} WHERE user_id = %d AND meta_key = %s", um_user( 'ID' ), $key ) ); if ( ! isset( $direct_db_value ) && isset( $data['default'] ) && $data['default'] == $value ) { return true; } } } else { if ( isset( $data['default'] ) && $data['default'] == $value ) { return true; } } } return false; } /** * Get field icon * * @param string $key * * @return string */ function get_field_icon( $key ) { $fields = UM()->builtin()->all_user_fields; if ( isset( $fields[ $key ]['icon'] ) ) { return $fields[ $key ]['icon']; } return ''; } /** * Gets selected option value from a callback function * * @param string $value * @param array $data * @param string $type * * @return string */ function get_option_value_from_callback( $value, $data, $type ) { if ( in_array( $type, array( 'select', 'multiselect' ) ) && ! empty( $data['custom_dropdown_options_source'] ) ) { $has_custom_source = apply_filters( "um_has_dropdown_options_source__{$data['metakey']}", false ); if ( $has_custom_source ) { $opts = apply_filters( "um_get_field__{$data['metakey']}", array() ); $arr_options = $opts['options']; } elseif ( function_exists( $data['custom_dropdown_options_source'] ) ) { if ( isset( $data['parent_dropdown_relationship'] ) ) { $_POST['parent_option_name'] = $data['parent_dropdown_relationship']; $_POST['parent_option'] = um_user( $data['parent_dropdown_relationship'] ); $arr_options = call_user_func( $data['custom_dropdown_options_source'], $data['parent_dropdown_relationship'] ); } else { $arr_options = call_user_func( $data['custom_dropdown_options_source'] ); } } if ( $has_custom_source || function_exists( $data['custom_dropdown_options_source'] ) ) { if ( $type == 'select' ) { if ( ! empty( $arr_options[ $value ] ) ) { return $arr_options[ $value ]; } elseif ( ! empty( $data['default'] ) && empty( $arr_options[ $value ] ) ) { return $arr_options[ $data['default'] ]; } else { return ''; } } elseif ( $type == 'multiselect' ) { if ( is_array( $value ) ) { $values = $value; } else { $values = explode( ', ', $value ); } $arr_paired_options = array(); foreach ( $values as $option ) { if ( isset( $arr_options[ $option ] ) ) { $arr_paired_options[] = $arr_options[ $option ]; } } return implode( ', ', $arr_paired_options ); } } } return $value; } /** * Get select options from a callback function * * @param array $data * @param string $type * * @return array $arr_options */ function get_options_from_callback( $data, $type ) { $arr_options = array(); if ( in_array( $type, array( 'select', 'multiselect' ) ) && ! empty( $data['custom_dropdown_options_source'] ) ) { if ( function_exists( $data['custom_dropdown_options_source'] ) ) { if ( isset( $data['parent_dropdown_relationship'] ) ) { $arr_options = call_user_func( $data['custom_dropdown_options_source'], $data['parent_dropdown_relationship'] ); } else { $arr_options = call_user_func( $data['custom_dropdown_options_source'] ); } } } return $arr_options; } /** * Get field type * * @param string $key * * @return string */ function get_field_type( $key ) { $fields = UM()->builtin()->all_user_fields; if ( isset( $fields[ $key ]['type'] ) ) { return $fields[ $key ]['type']; } return ''; } /** * Get field label * * @param string $key * * @return string */ function get_label( $key ) { $label = ''; $fields = UM()->builtin()->all_user_fields; if ( isset( $fields[ $key ]['label'] ) ) { $label = stripslashes( $fields[ $key ]['label'] ); } if ( empty( $label ) && isset( $fields[ $key ]['title'] ) ) { $label = stripslashes( $fields[ $key ]['title'] ); } /** * UM hook * * @type filter * @title um_change_field_label * @description Change Field Label * @input_vars * [{"var":"$label","type":"string","desc":"Field Label"}, * {"var":"$key","type":"string","desc":"Field Key"}] * @change_log * ["Since: 2.0.30"] * @usage add_filter( 'um_change_field_label', 'function_name', 10, 2 ); * @example * */ $label = apply_filters( 'um_change_field_label', $label, $key ); $label = sprintf( __( '%s', 'ultimate-member' ), $label ); return $label; } /** * Get field title * * @param string $key * * @return string */ function get_field_title( $key ) { $fields = UM()->builtin()->all_user_fields; if ( isset( $fields[ $key ]['title'] ) ) { return $fields[ $key ]['title']; } if ( isset( $fields[ $key ]['label'] ) ) { return $fields[ $key ]['label']; } return __( 'Custom Field', 'ultimate-member' ); } /** * Get form fields * * @return array */ function get_fields() { /** * UM hook * * @type filter * @title um_get_form_fields * @description Extend form fields * @input_vars * [{"var":"$fields","type":"array","desc":"Selected filter value"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_get_form_fields', 'function_name', 10, 1 ); * @example * */ $this->fields = apply_filters( 'um_get_form_fields', array() ); return $this->fields; } /** * Get specific field * * @param $key * * @return mixed * @throws \Exception */ function get_field( $key ) { $fields = $this->get_fields(); if ( isset( $fields ) && is_array( $fields ) && isset( $fields[ $key ] ) ) { $array = $fields[ $key ]; } else { if ( ! isset( UM()->builtin()->predefined_fields[ $key ] ) && ! isset( UM()->builtin()->all_user_fields[ $key ] ) ) { return ''; } $array = ( isset( UM()->builtin()->predefined_fields[ $key ] ) ) ? UM()->builtin()->predefined_fields[ $key ] : UM()->builtin()->all_user_fields[ $key ]; } $array['classes'] = null; if ( ! isset( $array['placeholder'] ) ) { $array['placeholder'] = null; } if ( ! isset( $array['required'] ) ) { $array['required'] = null; } if ( ! isset( $array['validate'] ) ) { $array['validate'] = null; } if ( ! isset( $array['default'] ) ) { $array['default'] = null; } if ( isset( $array['conditions'] ) && is_array( $array['conditions'] ) && ! $this->viewing ) { $array['conditional'] = ''; foreach ( $array['conditions'] as $cond_id => $cond ) { $array['conditional'] .= ' data-cond-' . $cond_id . '-action="' . esc_attr( $cond[0] ) . '" data-cond-' . $cond_id . '-field="' . esc_attr( $cond[1] ) . '" data-cond-' . $cond_id . '-operator="' . esc_attr( $cond[2] ) . '" data-cond-' . $cond_id . '-value="' . esc_attr( $cond[3] ) . '"'; } $array['classes'] .= ' um-is-conditional'; } else { $array['conditional'] = null; } $fields_without_metakey = UM()->builtin()->get_fields_without_metakey(); if ( ! in_array( $array['type'], $fields_without_metakey ) ) { $array['classes'] .= ' um-field-' . esc_attr( $key ); } $array['classes'] .= ' um-field-' . esc_attr( $array['type'] ); $array['classes'] .= ' um-field-type_' . esc_attr( $array['type'] ); switch ( $array['type'] ) { case 'googlemap': case 'youtube_video': case 'vimeo_video': case 'soundcloud_track': $array['disabled'] = ''; $array['input'] = 'text'; break; case 'text': $array['disabled'] = ''; if ( $key == 'user_login' && isset( $this->set_mode ) && $this->set_mode == 'account' ) { $array['disabled'] = 'disabled="disabled"'; } $array['input'] = 'text'; break; case 'password': $array['input'] = 'password'; break; case 'number': $array['disabled'] = ''; break; case 'url': $array['input'] = 'text'; break; case 'date': $array['input'] = 'text'; if ( ! isset( $array['format'] ) ) { $array['format'] = 'j M Y'; } switch ( $array['format'] ) { case 'j M Y': $js_format = 'd mmm yyyy'; break; case 'j F Y': $js_format = 'd mmmm yyyy'; break; case 'M j Y': $js_format = 'mmm d yyyy'; break; case 'F j Y': $js_format = 'mmmm d yyyy'; break; } $array['js_format'] = $js_format; if ( ! isset( $array['range'] ) ) { $array['range'] = 'years'; } if ( ! isset( $array['years'] ) ) { $array['years'] = 100; } if ( ! isset( $array['years_x'] ) ) { $array['years_x'] = 'past'; } if ( ! isset( $array['disabled_weekdays'] ) ) { $array['disabled_weekdays'] = ''; } if ( ! empty( $array['disabled_weekdays'] ) ) { $array['disabled_weekdays'] = '[' . implode( ',', $array['disabled_weekdays'] ) . ']'; } // When date range is strictly defined if ( $array['range'] == 'date_range' ) { $array['date_min'] = str_replace( '/', ',', $array['range_start'] ); $array['date_max'] = str_replace( '/', ',', $array['range_end'] ); } else { if ( $array['years_x'] == 'past' ) { $date = new \DateTime( date( 'Y-n-d' ) ); $past = $date->modify( '-' . $array['years'] . ' years' ); $past = $date->format( 'Y,n,d' ); $array['date_min'] = $past; $array['date_max'] = date( 'Y,n,d' ); } elseif ( $array['years_x'] == 'future' ) { $date = new \DateTime( date( 'Y-n-d' ) ); $future = $date->modify( '+' . $array['years'] . ' years' ); $future = $date->format( 'Y,n,d' ); $array['date_min'] = date( 'Y,n,d' ); $array['date_max'] = $future; } else { $date = new \DateTime( date( 'Y-n-d' ) ); $date_f = new \DateTime( date( 'Y-n-d' ) ); $past = $date->modify( '-' . ( $array['years'] / 2 ) . ' years' ); $past = $date->format( 'Y,n,d' ); $future = $date_f->modify( '+' . ( $array['years'] / 2 ) . ' years' ); $future = $date_f->format( 'Y,n,d' ); $array['date_min'] = $past; $array['date_max'] = $future; } } break; case 'time': $array['input'] = 'text'; if ( ! isset( $array['format'] ) ) { $array['format'] = 'g:i a'; } switch ( $array['format'] ) { case 'g:i a': $js_format = 'h:i a'; break; case 'g:i A': $js_format = 'h:i A'; break; case 'H:i': $js_format = 'HH:i'; break; } $array['js_format'] = $js_format; if ( ! isset( $array['intervals'] ) ) { $array['intervals'] = 60; } break; case 'textarea': if ( ! isset( $array['height'] ) ) { $array['height'] = '100px'; } break; case 'rating': if ( ! isset( $array['number'] ) ) { $array['number'] = 5; } break; case 'spacing': if ( ! isset( $array['spacing'] ) ) { $array['spacing'] = '20px'; } break; case 'divider': if ( isset( $array['width'] ) ) { $array['borderwidth'] = $array['width']; } else { $array['borderwidth'] = 4; } if ( isset( $array['color'] ) ) { $array['bordercolor'] = $array['color']; } else { $array['bordercolor'] = '#eee'; } if ( isset( $array['style'] ) ) { $array['borderstyle'] = $array['style']; } else { $array['borderstyle'] = 'solid'; } if ( ! isset( $array['divider_text'] ) ) { $array['divider_text'] = ''; } break; case 'image': if ( ! isset( $array['crop'] ) ) { $array['crop'] = 0; } if ( $array['crop'] == 0 ) { $array['crop_data'] = 0; } elseif ( $array['crop'] == 1 ) { $array['crop_data'] = 'square'; } elseif ( $array['crop'] == 2 ) { $array['crop_data'] = 'cover'; } else { $array['crop_data'] = 'user'; } if ( ! isset( $array['modal_size'] ) ) { $array['modal_size'] = 'normal'; } if ( $array['crop'] > 0 ) { $array['crop_class'] = 'crop'; } else { $array['crop_class'] = ''; } if ( ! isset( $array['ratio'] ) ) { $array['ratio'] = 1.0; } if ( ! isset( $array['min_width'] ) ) { $array['min_width'] = ''; } if ( ! isset( $array['min_height'] ) ) { $array['min_height'] = ''; } if ( $array['min_width'] == '' && $array['crop'] == 1 ) { $array['min_width'] = 600; } if ( $array['min_height'] == '' && $array['crop'] == 1 ) { $array['min_height'] = 600; } if ( $array['min_width'] == '' && $array['crop'] == 3 ) { $array['min_width'] = 600; } if ( $array['min_height'] == '' && $array['crop'] == 3 ) { $array['min_height'] = 600; } if ( ! isset( $array['invalid_image'] ) ) { $array['invalid_image'] = __( 'Please upload a valid image!', 'ultimate-member' ); } if ( ! isset( $array['allowed_types'] ) ) { $array['allowed_types'] = 'gif,jpg,jpeg,png'; } else { $array['allowed_types'] = implode( ',', $array['allowed_types'] ); } if ( ! isset( $array['upload_text'] ) ) { $array['upload_text'] = ''; } if ( ! isset( $array['button_text'] ) ) { $array['button_text'] = __( 'Upload', 'ultimate-member' ); } if ( ! isset( $array['extension_error'] ) ) { $array['extension_error'] = __( 'Sorry this is not a valid image.', 'ultimate-member' ); } if ( ! isset( $array['max_size_error'] ) ) { $array['max_size_error'] = __( 'This image is too large!', 'ultimate-member' ); } if ( ! isset( $array['min_size_error'] ) ) { $array['min_size_error'] = __( 'This image is too small!', 'ultimate-member' ); } if ( ! isset( $array['max_files_error'] ) ) { $array['max_files_error'] = __( 'You can only upload one image', 'ultimate-member' ); } if ( empty( $array['max_size'] ) ) { $array['max_size'] = 999999999; } if ( ! isset( $array['upload_help_text'] ) ) { $array['upload_help_text'] = ''; } if ( ! isset( $array['icon'] ) ) { $array['icon'] = ''; } break; case 'file': if ( ! isset( $array['modal_size'] ) ) { $array['modal_size'] = 'normal'; } if ( ! isset( $array['allowed_types'] ) ) { $array['allowed_types'] = 'pdf,txt'; } else { $array['allowed_types'] = implode( ',', $array['allowed_types'] ); } if ( ! isset( $array['upload_text'] ) ) { $array['upload_text'] = ''; } if ( ! isset( $array['button_text'] ) ) { $array['button_text'] = __( 'Upload', 'ultimate-member' ); } if ( ! isset( $array['extension_error'] ) ) { $array['extension_error'] = __( 'Sorry this is not a valid file.', 'ultimate-member' ); } if ( ! isset( $array['max_size_error'] ) ) { $array['max_size_error'] = __( 'This file is too large!', 'ultimate-member' ); } if ( ! isset( $array['min_size_error'] ) ) { $array['min_size_error'] = __( 'This file is too small!', 'ultimate-member' ); } if ( ! isset( $array['max_files_error'] ) ) { $array['max_files_error'] = __( 'You can only upload one file', 'ultimate-member' ); } if ( empty( $array['max_size'] ) ) { $array['max_size'] = 999999999; } if ( ! isset( $array['upload_help_text'] ) ) { $array['upload_help_text'] = ''; } if ( ! isset( $array['icon'] ) ) { $array['icon'] = ''; } break; case 'select': break; case 'multiselect': break; case 'group': if ( ! isset( $array['max_entries'] ) ) { $array['max_entries'] = 0; } break; } if ( ! isset( $array['visibility'] ) ) { $array['visibility'] = 'all'; } /** * UM hook * * @type filter * @title um_get_field__{$key} * @description Extend field data by field $key * @input_vars * [{"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_get_field__{$key}', 'function_name', 10, 1 ); * @example * */ $array = apply_filters( "um_get_field__{$key}", $array ); return $array; } /** * @param $option_value * * @return mixed|void */ function filter_field_non_utf8_value( $option_value ) { /** * UM hook * * @type filter * @title um_field_non_utf8_value * @description Change dropdown option text * @input_vars * [{"var":"$value","type":"string","desc":"Option Value"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_field_non_utf8_value', 'function_name', 10, 1 ); * @example * */ return apply_filters( 'um_field_non_utf8_value', $option_value ); } /** * Getting the fields that need to be disabled in edit mode (profile) * * @param bool $_um_profile_id * * @return array */ function get_restricted_fields_for_edit( $_um_profile_id = false ) { // fields that need to be disabled in edit mode (profile) $arr_restricted_fields = array( 'user_email', 'username', 'user_login', 'user_password', '_um_last_login' ); $arr_restricted_fields = apply_filters( 'um_user_profile_restricted_edit_fields', $arr_restricted_fields, $_um_profile_id ); return $arr_restricted_fields; } /** * Gets a field in 'input mode' * * @param string $key * @param array $data * @param bool $rule * @param array $args * * @return string|null * @throws \Exception */ function edit_field( $key, $data, $rule = false, $args = array() ) { global $_um_profile_id; $output = ''; $disabled = ''; if ( empty( $_um_profile_id ) ) { $_um_profile_id = um_user( 'ID' ); } // get whole field data if ( isset( $data ) && is_array( $data ) ) { $data = $this->get_field( $key ); if ( is_array( $data ) ) { /** * @var string $in_row * @var boolean $in_sub_row * @var boolean $in_column * @var string $type * @var string $metakey * @var int $position * @var string $title * @var string $help * @var array $options * @var string $visibility * @var string $label * @var string $placeholder * @var boolean $public * @var boolean $editable * @var string $icon * @var boolean $in_group * @var boolean $required * @var string $validate * @var string $default * @var string $conditional * @var string $input * @var string $js_format * @var string $date_max * @var string $date_min * @var string $disabled_weekdays * @var string $years_x * @var string $years * @var string $range * @var string $intervals * @var string $height * @var string $spacing * @var string $borderwidth * @var string $borderstyle * @var string $bordercolor * @var string $divider_text * @var string $crop_class * @var string $crop_data * @var string $modal_size * @var string $ratio * @var string $min_width * @var string $min_height * @var string $button_text * @var string $max_size * @var string $max_size_error * @var string $extension_error * @var string $allowed_types * @var string $upload_text * @var string $max_files_error * @var string $upload_help_text * @var string $min_size_error * @var string $filter * @var string $content * @var string $max_entries */ extract( $data ); } } if ( ! isset( $data['type'] ) ) { return ''; } if ( isset( $data['in_group'] ) && $data['in_group'] != '' && $rule != 'group' ) { return ''; } // forbidden in edit mode? 'edit_forbidden' - it's field attribute predefined in the field data in code if ( isset( $data['edit_forbidden'] ) ) { return ''; } // required option? 'required_opt' - it's field attribute predefined in the field data in code if ( isset( $data['required_opt'] ) ) { $opt = $data['required_opt']; if ( UM()->options()->get( $opt[0] ) != $opt[1] ) { return ''; } } // required user permission 'required_perm' - it's field attribute predefined in the field data in code if ( isset( $data['required_perm'] ) ) { if ( ! UM()->roles()->um_user_can( $data['required_perm'] ) ) { return ''; } } // fields that need to be disabled in edit mode (profile) (email, username, etc.) $arr_restricted_fields = $this->get_restricted_fields_for_edit( $_um_profile_id ); if ( in_array( $key, $arr_restricted_fields ) && $this->editing == true && $this->set_mode == 'profile' ) { return ''; } if ( $visibility == 'view' && $this->set_mode != 'register' ) { return ''; } if ( ! um_can_view_field( $data ) ) { return ''; } um_fetch_user( $_um_profile_id ); // Stop return empty values build field attributes: if ( $visibility == 'view' && $this->set_mode == 'register' ) { um_fetch_user( get_current_user_id() ); if ( ! um_user( 'can_edit_everyone' ) ) { $disabled = ' disabled="disabled" '; } um_fetch_user( $_um_profile_id ); if ( isset( $data['public'] ) && $data['public'] == '-2' && $data['roles'] ) { $current_user_roles = um_user( 'roles' ); if ( ! empty( $current_user_roles ) && count( array_intersect( $current_user_roles, $data['roles'] ) ) > 0 ) { $disabled = ''; } } } if ( ! empty( $this->editing ) && $this->set_mode == 'profile' ) { if ( ! UM()->roles()->um_user_can( 'can_edit_everyone' ) ) { if ( isset( $data['editable'] ) && $data['editable'] == 0 ) { $disabled = ' disabled="disabled" '; } } } $disabled = apply_filters( 'um_is_field_disabled', $disabled, $data ); if ( ! isset( $data['autocomplete'] ) ) { $autocomplete = 'off'; } if ( isset( $data['classes'] ) ) { $classes = explode( " ", $data['classes'] ); } um_fetch_user( $_um_profile_id ); /** * UM hook * * @type filter * @title um_hook_for_field_{$type} * @description Change field type * @input_vars * [{"var":"$type","type":"string","desc":"Field Type"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_hook_for_field_{$type}', 'function_name', 10, 1 ); * @example * */ $type = apply_filters( "um_hook_for_field_{$type}", $type ); switch ( $type ) { case 'textarea': case 'multiselect': $field_id = $field_name = $key; $field_value = $this->field_value( $key, $default, $data ); break; case 'select': case 'radio': $form_key = str_replace( array( 'role_select', 'role_radio' ), 'role', $key ); $field_id = $form_key; break; default: $field_id = ''; break; } /** * UM hook * * @type filter * @title um_completeness_field_id * @description use for change core id not allowed duplicate * @input_vars * [{"var":"$field_id","type":"string","desc":"Field id"}, * {"var":"$data","type":"array","desc":"Field Data"}] * {"var":"$args","type":"array","desc":"Optional field arguments"}] * @change_log * ["Since: 2.0.13"] * @usage add_filter( 'um_completeness_field_id', 'function_name', 10, 3 ); * @example * */ $field_id = apply_filters( 'um_completeness_field_id', $field_id, $data, $args ); /* Begin by field type */ switch ( $type ) { /* Default: Integration */ default: $mode = ( isset( $this->set_mode ) ) ? $this->set_mode : 'no_mode'; /** * UM hook * * @type filter * @title um_edit_field_{$mode}_{$type} * @description Change field html by $mode and field $type * @input_vars * [{"var":"$output","type":"string","desc":"Field HTML"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_edit_field_{$mode}_{$type}', 'function_name', 10, 2 ); * @example * */ $output .= apply_filters( "um_edit_field_{$mode}_{$type}", $output, $data ); break; /* Other fields */ case 'googlemap': case 'youtube_video': case 'vimeo_video': case 'soundcloud_track': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) { $output .= '
'; } $field_name = $key . UM()->form()->form_suffix; $field_value = htmlspecialchars( $this->field_value( $key, $default, $data ) ); $output .= '
'; if ( ! empty( $disabled ) ) { $output .= $this->disabled_hidden_field( $field_name, $field_value ); } if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Text */ case 'text': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) { $output .= '
'; } $field_name = $key . UM()->form()->form_suffix; $field_value = htmlspecialchars( $this->field_value( $key, $default, $data ) ); $output .= '
'; if ( ! empty( $disabled ) ) { $output .= $this->disabled_hidden_field( $field_name, $field_value ); } if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Number */ case 'number': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) { $output .= '
'; } $number_limit = ''; if ( isset( $min ) ) { $number_limit .= ' min="' . esc_attr( $min ) . '" '; } if ( isset( $max ) ) { $number_limit .= ' max="' . esc_attr( $max ) . '" '; } $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Password */ case 'password': $original_key = $key; if ( $key == 'single_user_password' ) { $key = $original_key; $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) { $output .= '
'; } $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; } else { if ( UM()->account()->current_password_is_required( 'password' ) && ( $this->set_mode == 'account' || um_is_core_page( 'account' ) ) ) { $key = 'current_' . $original_key; $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( __( 'Current Password', 'ultimate-member' ), $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field') { $output .= '
'; } $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); } elseif ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; } $key = $original_key; $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( $this->set_mode == 'account' && um_is_core_page( 'account' ) || $this->set_mode == 'password' && um_is_core_page( 'password-reset' ) ) { $output .= $this->field_label( __( 'New Password', 'ultimate-member' ), $key, $data ); } elseif ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field') { $output .= '
'; } $name = $key . UM()->form()->form_suffix; if ( $this->set_mode == 'password' && um_is_core_page( 'password-reset' ) ) { $name = $key; } $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); } elseif ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; if ( $this->set_mode != 'login' && isset( $data['force_confirm_pass'] ) && $data['force_confirm_pass'] == 1 ) { $key = 'confirm_' . $original_key; $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( ! empty( $data['label_confirm_pass'] ) ) { $label_confirm_pass = __( $data['label_confirm_pass'], 'ultimate-member' ); $output .= $this->field_label( $label_confirm_pass, $key, $data ); } elseif ( isset( $data['label'] ) ) { $data['label'] = __( $data['label'], 'ultimate-member' ); $output .= $this->field_label( sprintf( __( 'Confirm %s', 'ultimate-member' ), $data['label'] ), $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) { $output .= '
'; } $name = $key . UM()->form()->form_suffix; if ( $this->set_mode == 'password' && um_is_core_page( 'password-reset' ) ) { $name = $key; } if ( ! empty( $label_confirm_pass ) ) { $placeholder = $label_confirm_pass; } elseif( ! empty( $placeholder ) && ! isset( $data['label'] ) ) { $placeholder = sprintf( __( 'Confirm %s', 'ultimate-member' ), $placeholder ); } elseif( isset( $data['label'] ) ) { $placeholder = sprintf( __( 'Confirm %s', 'ultimate-member' ), $data['label'] ); } $output .= ''; $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; } } break; /* URL */ case 'url': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) { $output .= '
'; } $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Date */ case 'date': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) { $output .= '
'; } $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Time */ case 'time': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) { $output .= '
'; } $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Row */ case 'row': $output .= ''; break; /* Textarea */ case 'textarea': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if ( isset( $data['html'] ) && $data['html'] != 0 && $key != "description" ) { $textarea_settings = array( 'media_buttons' => false, 'wpautop' => false, 'editor_class' => $this->get_class( $key, $data ), 'editor_height' => $height, 'tinymce' => array( 'toolbar1' => 'formatselect,bullist,numlist,bold,italic,underline,forecolor,blockquote,hr,removeformat,link,unlink,undo,redo', 'toolbar2' => '', ) ); if ( ! empty( $disabled ) ) { $textarea_settings['tinymce']['readonly'] = true; } /** * UM hook * * @type filter * @title um_form_fields_textarea_settings * @description Change WP Editor options for textarea init * @input_vars * [{"var":"$textarea_settings","type":"array","desc":"WP Editor settings"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_form_fields_textarea_settings', 'function_name', 10, 1 ); * @example * */ $textarea_settings = apply_filters( 'um_form_fields_textarea_settings', $textarea_settings ); // turn on the output buffer ob_start(); // echo the editor to the buffer wp_editor( $field_value, $key, $textarea_settings ); // add the contents of the buffer to the output variable $output .= ob_get_clean(); $output .= '
' . $placeholder . ''; } else { $textarea_field_value = ! empty( $data['html'] ) ? $field_value : strip_tags( $field_value ); $output .= ''; } $output .= '
'; if ( ! empty( $disabled ) ) { $output .= $this->disabled_hidden_field( $field_name, $field_value ); } if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Rating */ case 'rating': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; $output .= '
'; $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); } elseif ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Gap/Space */ case 'spacing': $output .= '
get_atts( $key, $classes, $conditional, $data, array( 'height' => $spacing ) ) . '>
'; break; /* A line divider */ case 'divider': $output .= '
get_atts( $key, $classes, $conditional, $data, array( 'border-bottom' => $borderwidth . 'px ' . $borderstyle . ' ' . $bordercolor ) ) . '>'; if ( $divider_text ) { $output .= '
' . esc_html( $divider_text ) . '
'; } $output .= '
'; break; /* Single Image Upload */ case 'image': $output .= '
get_atts( $key, $classes, $conditional, $data ) . ' data-mode="' . esc_attr( $this->set_mode ) . '" data-upload-label="' . ( ! empty( $data['button_text'] ) ? esc_attr( $data['button_text'] ) : esc_attr__( 'Upload', 'ultimate-member' ) ) . '">'; if ( in_array( $key, array( 'profile_photo', 'cover_photo' ) ) ) { $field_value = ''; } else { $field_value = $this->field_value( $key, $default, $data ); } $output .= ''; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $modal_label = ( isset( $data['label'] ) ) ? $data['label'] : __( 'Upload Photo', 'ultimate-member' ); $output .= '
'; if ( ! empty( $field_value ) && $field_value != 'empty_file' ) { if ( ! in_array( $key, array( 'profile_photo', 'cover_photo' ) ) ) { if ( isset( $this->set_mode ) && 'register' == $this->set_mode ) { $image_info = get_transient("um_{$field_value}"); } else { $image_info = um_user( $data['metakey']."_metadata" ); } if ( ( isset( $this->set_mode ) && $this->set_mode == 'register' ) || file_exists( UM()->uploader()->get_core_temp_dir() . DIRECTORY_SEPARATOR . $field_value ) ) { $imgValue = UM()->uploader()->get_core_temp_url() . "/" . $this->field_value( $key, $default, $data ); } else { $imgValue = UM()->files()->get_download_link( $this->set_id, $key, um_user( 'ID' ) ); } $img = ''; } else { $img = ''; } $output .= '
'; if ( empty( $disabled ) ) { $output .= ''; } $output .= $img; $output .= '
'; if ( empty( $disabled ) ) { $output .= '' . __( 'Change photo', 'ultimate-member' ) . ''; } } else { $output .= '
'; if ( empty( $disabled ) ) { $output .= ''; } $output .= '
'; if ( empty( $disabled ) ) { $output .= '' . $button_text . ''; } } $output .= '
'; /* modal hidden */ if ( empty( $disabled ) ) { $output .= '
'; $output .= '
' . $modal_label . '
'; $output .= '
'; if ( isset( $this->set_id ) ) { $set_id = $this->set_id; $set_mode = $this->set_mode; } else { $set_id = 0; $set_mode = ''; } $nonce = wp_create_nonce( 'um_upload_nonce-' . $this->timestamp ); $output .= '
'; $output .= '
' . $button_text . '
'; $output .= ''; $output .= '
'; $output .= '
'; } /* end */ if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Single File Upload */ case 'file': $output .= '
get_atts( $key, $classes, $conditional, $data ) . ' data-mode="' . esc_attr( $this->set_mode ) . '" data-upload-label="' . ( ! empty( $data['button_text'] ) ? esc_attr( $data['button_text'] ) : esc_attr__( 'Upload', 'ultimate-member' ) ) . '">'; $output .= ''; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $modal_label = ( isset( $data['label'] ) ) ? $data['label'] : __( 'Upload File', 'ultimate-member' ); $output .= '
'; $file_field_value = $this->field_value( $key, $default, $data ); if ( ! empty( $file_field_value ) && 'empty_file' !== $file_field_value ) { $file_type = wp_check_filetype( $file_field_value ); if ( um_is_temp_file( $file_field_value ) ) { $file_info = get_transient( "um_{$file_field_value}" ); } else { $file_info = um_user( $data['metakey'] . "_metadata" ); } $file_field_name = $file_field_value; if ( ! empty( $file_info['original_name'] ) ) { $file_field_name = $file_info['original_name']; } if ( ( isset( $this->set_mode ) && 'register' == $this->set_mode ) || file_exists( UM()->uploader()->get_core_temp_dir() . DIRECTORY_SEPARATOR . $file_field_value ) ) { $file_url = UM()->uploader()->get_core_temp_url() . DIRECTORY_SEPARATOR . $file_field_value; $file_dir = UM()->uploader()->get_core_temp_dir() . DIRECTORY_SEPARATOR . $file_field_value; } else { $file_url = UM()->files()->get_download_link( $this->set_id, $key, um_user( 'ID' ) ); $file_dir = UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . $this->field_value( $key, $default, $data ); } //multisite fix for old customers if ( ! file_exists( $file_dir ) && is_multisite() ) { $file_dir = str_replace( DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . get_current_blog_id() . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $file_dir ); } if ( file_exists( $file_dir ) ) { $output .= ""; } else { $output .= "
" . __('This file has been removed.','ultimate-member') . "
"; } if ( empty( $disabled ) ) { $output .= "" . __( 'Change file', 'ultimate-member' ) . ""; } } else { $output .= "
"; if ( empty( $disabled ) ) { $output .= "{$button_text}"; } } $output .= '
'; /* modal hidden */ if ( empty( $disabled ) ) { $output .= '
'; $output .= '
' . $modal_label . '
'; $output .= '
'; if ( isset( $this->set_id ) ) { $set_id = $this->set_id; $set_mode = $this->set_mode; } else { $set_id = 0; $set_mode = ''; } $output .= ''; $nonce = wp_create_nonce( 'um_upload_nonce-' . $this->timestamp ); $output .= '
' . $button_text . '
'; $output .= ''; $output .= '
'; $output .= '
'; } /* end */ if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Select dropdown */ case 'select': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['allowclear'] ) && $data['allowclear'] == 0 ) { $class = 'um-s2'; } else { $class = 'um-s1'; } if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) { $output .= '
'; } $options = array(); $has_parent_option = false; $disabled_by_parent_option = ''; $atts_ajax = ''; $select_original_option_value = ''; if ( isset( $data[ 'options' ] ) && is_array( $data[ 'options' ] ) ) { $options = $data[ 'options' ]; } if ( ! empty( $data['parent_dropdown_relationship'] ) && ! UM()->user()->preview ) { $disabled_by_parent_option = 'disabled = disabled'; $has_parent_option = true; /** * UM hook * * @type filter * @title um_custom_dropdown_options_parent__{$form_key} * @description Change parent dropdown relationship by $form_key * @input_vars * [{"var":"$parent","type":"string","desc":"Parent dropdown relationship"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_custom_dropdown_options_parent__{$form_key}', 'function_name', 10, 2 ); * @example * */ $parent_dropdown_relationship = apply_filters( "um_custom_dropdown_options_parent__{$form_key}", $data['parent_dropdown_relationship'], $data ); $atts_ajax .= " data-um-parent='{$parent_dropdown_relationship}' "; if ( ! empty( $data['custom_dropdown_options_source'] ) && $has_parent_option && function_exists( $data['custom_dropdown_options_source'] ) && um_user( $data['parent_dropdown_relationship'] ) ) { $options = call_user_func( $data['custom_dropdown_options_source'], $data['parent_dropdown_relationship'] ); $disabled_by_parent_option = ''; if ( um_user( $form_key ) ) { $select_original_option_value = " data-um-original-value='" . um_user( $form_key ) . "' "; } } } // Child dropdown option selected if ( isset( UM()->form()->post_form[ $form_key ] ) ) { $select_original_option_value = " data-um-original-value='" . esc_attr( UM()->form()->post_form[ $form_key ] ) . "' "; } // Child dropdown if ( $has_parent_option ) { if ( ! empty( $data['custom_dropdown_options_source'] ) && $has_parent_option && function_exists( $data['custom_dropdown_options_source'] ) && isset( UM()->form()->post_form[ $form_key ] ) ) { $options = call_user_func( $data['custom_dropdown_options_source'], $data['parent_dropdown_relationship'] ); } } if ( ! empty( $data['custom_dropdown_options_source'] ) ) { /** * UM hook * * @type filter * @title um_custom_dropdown_options_source__{$form_key} * @description Change custom dropdown options source by $form_key * @input_vars * [{"var":"$source","type":"string","desc":"Dropdown options source"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_custom_dropdown_options_source__{$form_key}', 'function_name', 10, 2 ); * @example * */ $ajax_source = apply_filters( "um_custom_dropdown_options_source__{$form_key}", $data['custom_dropdown_options_source'], $data ); $atts_ajax .= ' data-um-ajax-source="' . esc_attr( $ajax_source ) . '" '; /** * UM hook * * @type filter * @title um_custom_dropdown_options_source_url__{$form_key} * @description Change custom dropdown options source URL by $form_key * @input_vars * [{"var":"$url","type":"string","desc":"Dropdown options source URL"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_custom_dropdown_options_source_url__{$form_key}', 'function_name', 10, 2 ); * @example * */ // todo maybe deprecate // $ajax_source_url = apply_filters( "um_custom_dropdown_options_source_url__{$form_key}", admin_url( 'admin-ajax.php' ), $data ); // $atts_ajax .= ' data-um-ajax-url="' . esc_url( $ajax_source_url ) . '" '; } /** * UM hook * * @type filter * @title um_fields_options_enable_pairs__{$key} * @description Enable options pairs by field $key * @input_vars * [{"var":"$options_pairs","type":"string","desc":"Enable pairs"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_fields_options_enable_pairs__{$key}', 'function_name', 10, 1 ); * @example * */ $enable_options_pair = apply_filters( "um_fields_options_enable_pairs__{$key}", false ); if ( ! $has_parent_option ) { if ( isset( $options ) && $options == 'builtin' ) { $options = UM()->builtin()->get ( $filter ); } // 'country' if ( $key === 'country' && empty( $options ) ) { $options = UM()->builtin()->get( 'countries' ); } else if ( empty( $options ) && isset( $data['options'] ) ) { $options = $data['options']; } $options = apply_filters( 'um_selectbox_options', $options, $key ); if ( isset( $options ) ) { /** * UM hook * * @type filter * @title um_select_dropdown_dynamic_options * @description Extend dropdown dynamic options * @input_vars * [{"var":"$options","type":"array","desc":"Dynamic options"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_select_dropdown_dynamic_options', 'function_name', 10, 2 ); * @example * */ $options = apply_filters( 'um_select_dropdown_dynamic_options', $options, $data ); /** * UM hook * * @type filter * @title um_select_dropdown_dynamic_options_{$key} * @description Extend dropdown dynamic options by field $key * @input_vars * [{"var":"$options","type":"array","desc":"Dynamic options"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_select_dropdown_dynamic_options_{$key}', 'function_name', 10, 1 ); * @example * */ $options = apply_filters( "um_select_dropdown_dynamic_options_{$key}", $options ); } } if ( $form_key === 'role' ) { $options = $this->get_available_roles( $form_key, $options ); } /** * UM hook * * @type filter * @title um_select_option_value * @description Enable options pair by field $data * @input_vars * [{"var":"$options_pair","type":"null","desc":"Enable pairs"}, * {"var":"$data","type":"array","desc":"Field Data"}] */ $options_pair = apply_filters( 'um_select_options_pair', null, $data ); // switch options pair for custom options from a callback function if ( ! empty( $data['custom_dropdown_options_source'] ) ) { $options_pair = true; } $field_value = ''; if ( ! empty( $placeholder ) && is_string( $placeholder ) ) { $placeholder = strip_tags( $placeholder ); } $output .= ''; $output .= '
'; if ( $this->is_error( $form_key ) ) { $output .= $this->field_error( $this->show_error( $form_key ) ); } elseif ( $this->is_notice( $form_key ) ) { $output .= $this->field_notice( $this->show_notice( $form_key ) ); } $output .= '
'; break; /* Multi-Select dropdown */ case 'multiselect': $max_selections = ( isset( $max_selections ) ) ? absint( $max_selections ) : 0; $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['allowclear'] ) && $data['allowclear'] == 0 ) { $class = 'um-s2'; } else { $class = 'um-s1'; } if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $field_icon = false; $field_icon_output = ''; /** * UM hook * * @type filter * @title um_multiselect_option_value * @description Change multiselect keyword data * @input_vars * [{"var":"$keyword","type":"int","desc":"Option Value"}, * {"var":"$type","type":"string","desc":"Field Type"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_multiselect_option_value', 'function_name', 10, 2 ); * @example * */ $use_keyword = apply_filters( 'um_multiselect_option_value', 0, $data['type'] ); $output .= '
'; if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field') { $output .= '
'; } $output .= ''; if ( ! empty( $disabled ) && ! empty( $arr_selected ) ) { foreach ( $arr_selected as $item ) { $output .= $this->disabled_hidden_field( $key . '[]', $item ); } } $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Radio */ case 'radio': if ( isset( $options ) ) { /** * UM hook * * @type filter * @title um_radio_field_options * @description Extend radio field options * @input_vars * [{"var":"$options","type":"array","desc":"Radio Field Options"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_radio_field_options', 'function_name', 10, 2 ); * @example * */ $options = apply_filters( 'um_radio_field_options', $options, $data ); /** * UM hook * * @type filter * @title um_radio_field_options_{$key} * @description Extend radio field options by field $key * @input_vars * [{"var":"$options","type":"array","desc":"Radio field Options"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_radio_field_options_{$key}', 'function_name', 10, 1 ); * @example * */ $options = apply_filters( "um_radio_field_options_{$key}", $options ); } $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; $options = $this->get_available_roles( $form_key, $options ); // add options $i = 0; $field_value = array(); /** * UM hook * * @type filter * @title um_radio_option_value * @description Enable options pair by field $data * @input_vars * [{"var":"$options_pair","type":"null","desc":"Enable pairs"}, * {"var":"$data","type":"array","desc":"Field Data"}] */ $options_pair = apply_filters( "um_radio_options_pair__{$key}", false, $data ); if ( ! empty( $options ) ) { foreach ( $options as $k => $v ) { $v = rtrim( $v ); $um_field_checkbox_item_title = $v; $option_value = $v; if ( ! is_numeric( $k ) && in_array( $form_key, array( 'role' ) ) || ( $this->set_mode == 'account' || um_is_core_page( 'account' ) ) ) { $um_field_checkbox_item_title = $v; $option_value = $k; } if( $options_pair ){ $um_field_checkbox_item_title = $v; $option_value = $k; } $i++; if ($i % 2 == 0) { $col_class = 'right'; } else { $col_class = ''; } if ( $this->is_radio_checked( $key, $option_value, $data ) ) { $active = 'active'; $class = "um-icon-android-radio-button-on"; } else { $active = ''; $class = "um-icon-android-radio-button-off"; } if ( isset( $data['editable'] ) && $data['editable'] == 0 ) { $col_class .= " um-field-radio-state-disabled"; } $output .= ''; if ( $i % 2 == 0 ) { $output .= '
'; } } } if ( ! empty( $disabled ) ) { foreach ( $field_value as $item ) { $output .= $this->disabled_hidden_field( $form_key, $item ); } } $output .= '
'; $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* Checkbox */ case 'checkbox': if ( isset( $options ) ) { /** * UM hook * * @type filter * @title um_checkbox_field_options * @description Extend checkbox options * @input_vars * [{"var":"$options","type":"array","desc":"Checkbox Options"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_checkbox_field_options', 'function_name', 10, 2 ); * @example * */ $options = apply_filters( 'um_checkbox_field_options', $options, $data ); /** * UM hook * * @type filter * @title um_checkbox_field_options_{$key} * @description Extend checkbox options by field $key * @input_vars * [{"var":"$options","type":"array","desc":"Checkbox Options"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_checkbox_field_options_{$key}', 'function_name', 10, 1 ); * @example * */ $options = apply_filters( "um_checkbox_field_options_{$key}", $options ); } $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; // add options $i = 0; foreach ( $options as $k => $v ) { $v = rtrim( $v ); $i++; if ( $i % 2 == 0 ) { $col_class = 'right'; } else { $col_class = ''; } if ( $this->is_selected( $key, $v, $data ) ) { $active = 'active'; $class = "um-icon-android-checkbox-outline"; } else { $active = ''; $class = "um-icon-android-checkbox-outline-blank"; } if ( isset( $data['editable'] ) && $data['editable'] == 0 ) { $col_class .= " um-field-radio-state-disabled"; } $output .= ''; if ( $i % 2 == 0 ) { $output .= '
'; } } $output .= '
'; $output .= '
'; if ( $this->is_error( $key ) ) { $output .= $this->field_error( $this->show_error( $key ) ); }else if ( $this->is_notice( $key ) ) { $output .= $this->field_notice( $this->show_notice( $key ) ); } $output .= '
'; break; /* HTML */ case 'block': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>' . $content . '
'; break; /* Shortcode */ case 'shortcode': $content = str_replace( '{profile_id}', um_profile_id(), $content ); if ( version_compare( get_bloginfo('version'),'5.4', '<' ) ) { $content = do_shortcode( $content ); } else { $content = apply_shortcodes( $content ); } $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>' . $content . '
'; break; /* Unlimited Group */ case 'group': $fields = $this->get_fields_in_group( $key ); if ( ! empty( $fields ) ) { $output .= '
' . esc_html__( $label, 'ultimate-member' ) . '
'; $output .= '
'; foreach ( $fields as $subkey => $subdata ) { $output .= $this->edit_field( $subkey, $subdata, 'group' ); } $output .= '
'; $output .= '
'; } break; } // Custom filter for field output if ( isset( $this->set_mode ) ) { /** * UM hook * * @type filter * @title um_{$key}_form_edit_field * @description Change field HTML on edit mode by field $key * @input_vars * [{"var":"$output","type":"string","desc":"Field HTML"}, * {"var":"$mode","type":"string","desc":"Fields Mode"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_{$key}_form_edit_field', 'function_name', 10, 2 ); * @example * */ $output = apply_filters( "um_{$key}_form_edit_field", $output, $this->set_mode ); } return $output; } /** * Filter for user roles * * @param $form_key * @param array $options * @return array */ function get_available_roles( $form_key, $options = array() ) { if ( $form_key != 'role' ) { return $options; } // role field global $wp_roles; $role_keys = array_map( function( $item ) { return 'um_' . $item; }, get_option( 'um_roles', array() ) ); $exclude_roles = array_diff( array_keys( $wp_roles->roles ), array_merge( $role_keys, array( 'subscriber' ) ) ); $roles = UM()->roles()->get_roles( false, $exclude_roles ); if ( ! empty( $options ) ) { $roles = array_map( function( $item ) { return html_entity_decode( $item, ENT_QUOTES ); }, $roles ); //fix when customers change options for role (radio/dropdown) fields $intersected_options = array(); foreach ( $options as $key => $title ) { if ( false !== $search_key = array_search( $title, $roles ) ) { $intersected_options[ $search_key ] = $title; } elseif ( isset( $roles[ $key ] ) ) { $intersected_options[ $key ] = $title; } } $options = $intersected_options; } else { $options = $roles; } return $options; } /** * Sorts columns array * * @param array $arr * @param string $col * @param string $dir * * @return array $arr */ function array_sort_by_column( $arr, $col, $dir = SORT_ASC ) { $sort_col = array(); foreach ( $arr as $key => $row ) { if ( $key == 'form_id' ) { unset( $arr['form_id'] ); continue; } if ( isset( $row[ $col ] ) ) { $sort_col[ $key ] = $row[ $col ]; } else { unset( $arr[ $key ] ); } } array_multisort( $sort_col, $dir, $arr ); return $arr; } /** * Get fields in row * * @param int $row_id * * @return string */ function get_fields_by_row( $row_id ) { if ( ! isset( $this->get_fields ) ) { return ''; } foreach ( $this->get_fields as $key => $array ) { if ( ! isset( $array['in_row'] ) || ( isset( $array['in_row'] ) && $array['in_row'] == $row_id ) ) { $results[ $key ] = $array; } } return ( isset ( $results ) ) ? $results : ''; } /** * Get fields by sub row * * @param string $row_fields * @param integer $subrow_id * * @return mixed */ function get_fields_in_subrow( $row_fields, $subrow_id ) { if ( ! is_array( $row_fields ) ) { return ''; } foreach ( $row_fields as $key => $array ) { if ( ! isset( $array['in_sub_row'] ) || ( isset( $array['in_sub_row'] ) && $array['in_sub_row'] == $subrow_id ) ) { $results[ $key ] = $array; } } return ( isset ( $results ) ) ? $results : ''; } /** * Get fields in group * * @param integer $group_id * * @return mixed */ function get_fields_in_group( $group_id ) { foreach ( $this->get_fields as $key => $array ) { if ( isset( $array['in_group'] ) && $array['in_group'] == $group_id ) { $results[ $key ] = $array; } } return ( isset ( $results ) ) ? $results : ''; } /** * Get fields in column * * @param array $fields * @param integer $col_number * * @return mixed */ function get_fields_in_column( $fields, $col_number ) { foreach ( $fields as $key => $array ) { if ( isset( $array['in_column'] ) && $array['in_column'] == $col_number ) { $results[ $key ] = $array; } } return ( isset ( $results ) ) ? $results : ''; } /** * Display fields * * @param string $mode * @param array $args * * @return string|null * @throws \Exception */ function display( $mode, $args ) { $output = null; $this->global_args = $args; UM()->form()->form_suffix = '-' . $this->global_args['form_id']; $this->set_mode = $mode; if ( 'profile' === $mode ) { UM()->form()->nonce = wp_create_nonce( 'um-profile-nonce' . UM()->user()->target_id ); } $this->set_id = $this->global_args['form_id']; $this->field_icons = ( isset( $this->global_args['icons'] ) ) ? $this->global_args['icons'] : 'label'; // start output here $this->get_fields = $this->get_fields(); if ( ! empty( $this->get_fields ) ) { // find rows foreach ( $this->get_fields as $key => $array ) { if ( $array['type'] == 'row' ) { $this->rows[ $key ] = $array; unset( $this->get_fields[ $key ] ); // not needed anymore } } // rows fallback if ( ! isset( $this->rows ) ) { $this->rows = array( '_um_row_1' => array( 'type' => 'row', 'id' => '_um_row_1', 'sub_rows' => 1, 'cols' => 1, ), ); } // master rows foreach ( $this->rows as $row_id => $row_array ) { $row_fields = $this->get_fields_by_row( $row_id ); if ( $row_fields ) { $output .= $this->new_row_output( $row_id, $row_array ); $sub_rows = ( isset( $row_array['sub_rows'] ) ) ? $row_array['sub_rows'] : 1; for ( $c = 0; $c < $sub_rows; $c++ ) { // cols $cols = isset( $row_array['cols'] ) ? $row_array['cols'] : 1; if ( is_numeric( $cols ) ) { $cols_num = (int) $cols; } else { if ( strstr( $cols, ':' ) ) { $col_split = explode( ':', $cols ); } else { $col_split = array( $cols ); } $cols_num = $col_split[ $c ]; } // sub row fields $subrow_fields = null; $subrow_fields = $this->get_fields_in_subrow( $row_fields, $c ); if ( is_array( $subrow_fields ) ) { $subrow_fields = $this->array_sort_by_column( $subrow_fields, 'position' ); if ( $cols_num == 1 ) { $output .= '
'; $col1_fields = $this->get_fields_in_column( $subrow_fields, 1 ); if ( $col1_fields ) { foreach ( $col1_fields as $key => $data ) { $output .= $this->edit_field( $key, $data ); } } $output .= '
'; } else if ($cols_num == 2) { $output .= '
'; $col1_fields = $this->get_fields_in_column( $subrow_fields, 1 ); if ( $col1_fields ) { foreach ( $col1_fields as $key => $data ) { $output .= $this->edit_field( $key, $data ); } } $output .= '
'; $output .= '
'; $col2_fields = $this->get_fields_in_column( $subrow_fields, 2 ); if ( $col2_fields ) { foreach ( $col2_fields as $key => $data ) { $output .= $this->edit_field( $key, $data ); } } $output .= '
'; } else { $output .= '
'; $col1_fields = $this->get_fields_in_column( $subrow_fields, 1 ); if ( $col1_fields ) { foreach ( $col1_fields as $key => $data ) { $output .= $this->edit_field( $key, $data ); } } $output .= '
'; $output .= '
'; $col2_fields = $this->get_fields_in_column( $subrow_fields, 2 ); if ( $col2_fields ) { foreach ( $col2_fields as $key => $data ) { $output .= $this->edit_field( $key, $data ); } } $output .= '
'; $output .= '
'; $col3_fields = $this->get_fields_in_column( $subrow_fields, 3 ); if ( $col3_fields ) { foreach ( $col3_fields as $key => $data ) { $output .= $this->edit_field( $key, $data ); } } $output .= '
'; } } } $output .= ''; } } } return $output; } /** * Gets a field in `view mode` * * @param string $key * @param array $data * @param bool $rule * * @return string|null * @throws \Exception */ function view_field( $key, $data, $rule = false ) { $output = ''; // get whole field data if ( is_array( $data ) ) { $data = $this->get_field( $key ); if ( is_array( $data ) ) { /** * @var $visibility * @var $type * @var $default * @var $classes * @var $conditional * @var $content * @var $divider_text * @var $spacing * @var $borderwidth * @var $borderstyle * @var $bordercolor * @var $label */ extract( $data ); } } //hide if empty type if ( ! isset( $data['type'] ) ) { return ''; } if ( isset( $data['in_group'] ) && $data['in_group'] != '' && $rule != 'group' ) { return ''; } //invisible on profile page if ( $visibility == 'edit' || $type == 'password' ) { return ''; } //hide if empty $fields_without_metakey = UM()->builtin()->get_fields_without_metakey(); if ( ! in_array( $type, $fields_without_metakey ) ) { $_field_value = $this->field_value( $key, $default, $data ); if ( ! isset( $_field_value ) || $_field_value == '' ) { return ''; } } if ( ! um_can_view_field( $data ) ) { return ''; } // disable these fields in profile view only if ( in_array( $key, array( 'user_password' ) ) && $this->set_mode == 'profile' ) { return ''; } if ( ! um_field_conditions_are_met( $data ) ) { return ''; } if ( isset( $data['classes'] ) ) { $classes = explode( " ", $data['classes'] ); } switch ( $type ) { /* Default */ default: $_field_value = $this->field_value( $key, $default, $data ); if ( ! in_array( $type, $fields_without_metakey ) && ( ! isset( $_field_value ) || $_field_value == '' ) ) { $output = ''; } else { $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) || ! empty( $data['icon'] ) ) { if ( ! isset( $data['label'] ) ) { $data['label'] = ''; } $output .= $this->field_label( $data['label'], $key, $data ); } $res = $this->field_value( $key, $default, $data ); if ( ! empty( $res ) ) { $res = stripslashes( $res ); } if ( 'description' === $data['metakey'] ) { $res = nl2br( $res ); } $data['is_view_field'] = true; /** * UM hook * * @type filter * @title um_view_field * @description Change field HTML on view mode * @input_vars * [{"var":"$output","type":"string","desc":"Field HTML"}, * {"var":"$data","type":"string","desc":"Field Data"}, * {"var":"$type","type":"string","desc":"Field Type"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_view_field', 'function_name', 10, 3 ); * @example * */ $res = apply_filters( 'um_view_field', $res, $data, $type ); /** * UM hook * * @type filter * @title um_view_field_value_{$type} * @description Change field HTML on view mode by field type * @input_vars * [{"var":"$output","type":"string","desc":"Field HTML"}, * {"var":"$data","type":"string","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_view_field_value_{$type}', 'function_name', 10, 2 ); * @example * */ $res = apply_filters( "um_view_field_value_{$type}", $res, $data ); $id_attr = ''; if ( ! in_array( $type, $fields_without_metakey ) ) { $id_attr = ' id="' . esc_attr( $key . UM()->form()->form_suffix ) . '"'; } if ( empty( $res ) ) { $output = ''; } else { $output .= '
'; $output .= '
' . $res . '
'; $output .= '
'; $output .= '
'; } } break; /* HTML */ case 'block': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>' . $content . '
'; break; /* Shortcode */ case 'shortcode': $content = str_replace( '{profile_id}', um_profile_id(), $content ); if ( version_compare( get_bloginfo('version'),'5.4', '<' ) ) { $content = do_shortcode( $content ); } else { $content = apply_shortcodes( $content ); } $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>' . $content . '
'; break; /* Gap/Space */ case 'spacing': $output .= '
get_atts( $key, $classes, $conditional, $data, array( 'height' => $spacing ) ) . '>
'; break; /* A line divider */ case 'divider': $output .= '
get_atts( $key, $classes, $conditional, $data, array( 'border-bottom' => $borderwidth . 'px ' . $borderstyle . ' ' . $bordercolor ) ) . '>'; if ( $divider_text ) { $output .= '
' . $divider_text . '
'; } $output .= '
'; break; /* Rating */ case 'rating': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; if ( isset( $data['label'] ) || ! empty( $data['icon'] ) ) { $output .= $this->field_label( $label, $key, $data ); } ob_start(); ?>
'; break; } // Custom filter for field output if ( isset( $this->set_mode ) ) { /** * UM hook * * @type filter * @title um_{$key}_form_show_field * @description Change field HTML by field $key * @input_vars * [{"var":"$output","type":"string","desc":"Field HTML"}, * {"var":"$mode","type":"string","desc":"Form Mode"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_{$key}_form_show_field', 'function_name', 10, 2 ); * @example * */ $output = apply_filters( "um_{$key}_form_show_field", $output, $this->set_mode ); /** * UM hook * * @type filter * @title um_{$type}_form_show_field * @description Change field HTML by field $type * @input_vars * [{"var":"$output","type":"string","desc":"Field HTML"}, * {"var":"$mode","type":"string","desc":"Form Mode"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_{$type}_form_show_field', 'function_name', 10, 2 ); * @example * */ $output = apply_filters( "um_{$type}_form_show_field", $output, $this->set_mode ); } return $output; } /** * Filter field data * * @param array $data * * @return array */ function view_field_output( $data ) { /** * UM hook * * @type filter * @title um_view_field_output_{$type} * @description Change field data output by $type * @input_vars * [{"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_view_field_output_{$type}', 'function_name', 10, 1 ); * @example * */ return apply_filters( "um_view_field_output_" . $data['type'], $data ); } /** * Display fields ( view mode ) * * @param string $mode * @param array $args * * @return string|null * @throws \Exception */ function display_view( $mode, $args ) { $output = null; $this->global_args = $args; UM()->form()->form_suffix = '-' . $this->global_args['form_id']; $this->set_mode = $mode; $this->set_id = $this->global_args['form_id']; $this->field_icons = ( isset( $this->global_args['icons'] ) ) ? $this->global_args['icons'] : 'label'; // start output here $this->get_fields = $this->get_fields(); if ( UM()->options()->get( 'profile_empty_text' ) ) { $emo = UM()->options()->get( 'profile_empty_text_emo' ); if ( $emo ) { $emo = ''; } else { $emo = false; } if ( um_is_myprofile() ) { $output .= '

' . $emo . '' . sprintf( __( 'Your profile is looking a little empty. Why not add some information!', 'ultimate-member' ), esc_url( um_edit_profile_url() ) ) . '

'; } else { $output .= '

' . $emo . '' . __( 'This user has not added any information to their profile yet.', 'ultimate-member' ) . '

'; } } if ( ! empty( $this->get_fields ) ) { // find rows foreach ( $this->get_fields as $key => $array ) { if ( $array['type'] == 'row' ) { $this->rows[ $key ] = $array; unset( $this->get_fields[ $key ] ); // not needed anymore } } // rows fallback if ( ! isset( $this->rows ) ) { $this->rows = array( '_um_row_1' => array( 'type' => 'row', 'id' => '_um_row_1', 'sub_rows' => 1, 'cols' => 1, ), ); } // master rows foreach ( $this->rows as $row_id => $row_array ) { $row_fields = $this->get_fields_by_row( $row_id ); if ( $row_fields ) { $output .= $this->new_row_output( $row_id, $row_array ); $sub_rows = ( isset( $row_array['sub_rows'] ) ) ? $row_array['sub_rows'] : 1; for ( $c = 0; $c < $sub_rows; $c++ ) { // cols $cols = isset( $row_array['cols'] ) ? $row_array['cols'] : 1; if ( is_numeric( $cols ) ) { $cols_num = (int) $cols; } else { if ( strstr( $cols, ':' ) ) { $col_split = explode( ':', $cols ); } else { $col_split = array( $cols ); } $cols_num = $col_split[ $c ]; } // sub row fields $subrow_fields = null; $subrow_fields = $this->get_fields_in_subrow( $row_fields, $c ); if ( is_array( $subrow_fields ) ) { $subrow_fields = $this->array_sort_by_column( $subrow_fields, 'position' ); if ( $cols_num == 1 ) { $output .= '
'; $col1_fields = $this->get_fields_in_column( $subrow_fields, 1 ); if ( $col1_fields ) { foreach ( $col1_fields as $key => $data ) { $data = $this->view_field_output( $data ); $output .= $this->view_field( $key, $data ); } } $output .= '
'; } elseif ( $cols_num == 2 ) { $output .= '
'; $col1_fields = $this->get_fields_in_column( $subrow_fields, 1 ); if ( $col1_fields ) { foreach ( $col1_fields as $key => $data ) { $data = $this->view_field_output( $data ); $output .= $this->view_field( $key, $data ); } } $output .= '
'; $output .= '
'; $col2_fields = $this->get_fields_in_column( $subrow_fields, 2 ); if ( $col2_fields ) { foreach ( $col2_fields as $key => $data ) { $data = $this->view_field_output( $data ); $output .= $this->view_field( $key, $data ); } } $output .= '
'; } else { $output .= '
'; $col1_fields = $this->get_fields_in_column( $subrow_fields, 1 ); if ( $col1_fields ) { foreach ( $col1_fields as $key => $data ) { $data = $this->view_field_output( $data ); $output .= $this->view_field( $key, $data ); } } $output .= '
'; $output .= '
'; $col2_fields = $this->get_fields_in_column( $subrow_fields, 2 ); if ( $col2_fields ) { foreach ( $col2_fields as $key => $data ) { $data = $this->view_field_output( $data ); $output .= $this->view_field( $key, $data ); } } $output .= '
'; $output .= '
'; $col3_fields = $this->get_fields_in_column( $subrow_fields, 3 ); if ( $col3_fields ) { foreach ( $col3_fields as $key => $data ) { $data = $this->view_field_output( $data ); $output .= $this->view_field( $key, $data ); } } $output .= '
'; } } } $output .= '
'; } } } return $output; } /** * Get new row in form * * @param string $row_id * @param array $row_array * * @return string */ function new_row_output( $row_id, $row_array ) { $output = null; extract( $row_array ); $padding = ( isset( $padding ) ) ? $padding : ''; $margin = ( isset( $margin ) ) ? $margin : ''; $background = ( isset( $background ) ) ? $background : ''; $text_color = ( isset( $text_color ) ) ? $text_color : ''; $borderradius = ( isset( $borderradius ) ) ? $borderradius : ''; $border = ( isset( $border ) ) ? $border : ''; $bordercolor = ( isset( $bordercolor ) ) ? $bordercolor : ''; $borderstyle = ( isset( $borderstyle ) ) ? $borderstyle : ''; $heading = ( isset( $heading ) ) ? $heading : ''; $css_class = ( isset( $css_class ) ) ? $css_class : ''; $css_padding = ''; $css_margin = ''; $css_background = ''; $css_borderradius = ''; $css_border = ''; $css_bordercolor = ''; $css_borderstyle = ''; $css_heading_background_color = ''; $css_heading_padding = ''; $css_heading_text_color = ''; $css_heading_borderradius = ''; $css_text_color = ''; // row css rules if ( $padding ) { $css_padding = 'padding: ' . $padding . ';'; } if ( $margin ) { $css_margin = 'margin: ' . $margin . ';'; } else { $css_margin = 'margin: 0 0 30px 0;'; } if ( $background ) { $css_background = 'background-color: ' . $background . ';'; } if ( $borderradius ) { $css_borderradius = 'border-radius: 0px 0px ' . $borderradius . ' ' . $borderradius . ';'; } if ( $border ) { $css_border = 'border-width: ' . $border . ';'; } if ( $bordercolor ) { $css_bordercolor = 'border-color: ' . $bordercolor . ';'; } if ( $borderstyle ) { $css_borderstyle = 'border-style: ' . $borderstyle . ';'; } if ( $text_color ) { $css_text_color = 'color: ' . $text_color . ' !important;'; $css_class .= ' um-customized-row'; } // show the heading if ( $heading ) { if ( ! empty( $heading_background_color ) ) { $css_heading_background_color = "background-color: $heading_background_color;"; $css_heading_padding = 'padding: 10px 15px;'; } $css_heading_borderradius = empty( $borderradius ) ? '' : "border-radius: $borderradius $borderradius 0px 0px;"; $css_heading_border = $css_border . $css_borderstyle . $css_bordercolor . $css_heading_borderradius . 'border-bottom-width: 0px;'; $css_heading_margin = $css_margin . 'margin-bottom: 0px;'; $css_heading_text_color = empty( $heading_text_color ) ? '' : "color: $heading_text_color;"; $css_icon_color = empty( $icon_color ) ? '' : "color: $icon_color;"; $output .= '
'; if ( ! empty( $icon ) ) { $output .= ''; } if ( ! empty( $heading_text ) ) { $output .= htmlspecialchars( $heading_text ); } $output .= '
'; $css_border .= 'border-top-width: 0px;'; $css_margin .= 'margin-top: 0px;'; } else { // no heading $css_borderradius = empty( $borderradius ) ? '' : "border-radius: $borderradius;"; } $output .= '
'; return $output; } /** * */ function do_ajax_action() { UM()->admin()->check_ajax_nonce(); if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) { wp_send_json_error( __( 'Please login as administrator', 'ultimate-member' ) ); } /** * @var $in_row * @var $in_sub_row * @var $in_column * @var $in_group * @var $act_id * @var $arg1 * @var $arg2 */ extract( $_POST ); $output = null; $position = array(); if ( ! empty( $in_column ) ) { $position['in_row'] = '_um_row_' . ( (int) $in_row + 1 ); $position['in_sub_row'] = $in_sub_row; $position['in_column'] = $in_column; $position['in_group'] = $in_group; } switch ( $act_id ) { case 'um_admin_duplicate_field': $this->duplicate_field( $arg1, $arg2 ); break; case 'um_admin_remove_field_global': $this->delete_field_from_db( $arg1 ); break; case 'um_admin_remove_field': $this->delete_field_from_form( $arg1, $arg2 ); break; case 'um_admin_add_field_from_predefined': $this->add_field_from_predefined( $arg1, $arg2, $position ); break; case 'um_admin_add_field_from_list': $this->add_field_from_list( $arg1, $arg2, $position ); break; } if ( is_array( $output ) ) { print_r( $output ); } else { echo $output; } die; } /** * Get rendered field attributes * * @since 2.1.2 * * @param string $key * @param array $classes * @param string $conditional * @param array $data * @param array $field_style * * @return string/html */ function get_atts( $key, $classes, $conditional, $data, $field_style = array() ) { array_unshift( $classes, 'um-field-' . $data['type'] ); array_unshift( $classes, 'um-field' ); $field_atts = array( 'id' => array( "um_field_{$this->set_id}_{$key}", ), 'class' => $classes, 'data-key' => array( esc_attr( $key ) ) ); $fields_without_metakey = UM()->builtin()->get_fields_without_metakey(); if ( in_array( $data['type'], $fields_without_metakey ) ) { unset( $field_atts['id'] ); if ( empty( $field_atts['data-key'] ) ) { unset( $field_atts['data-key'] ); } } if ( ! empty( $field_style ) && is_array( $field_style ) ) { $arr_inline_style = ''; foreach ( $field_style as $style_attr => $style_value ) { $arr_inline_style .= esc_attr( $style_attr ) . ':' . esc_attr( $style_value ) . ';'; } $field_atts['style'] = array( $arr_inline_style ); } /** * UM hook * * @type filter * @title um_field_extra_atts * @description user for adding extra field attributes * @input_vars * [{"var":"$field_atts","type":"array","desc":"Field attributes"}, * [{"var":"$key","type":"string","desc":"Field id"}, * {"var":"$data","type":"array","desc":"Field Data"}] * @change_log * ["Since: 2.0.57"] * @usage add_filter( 'um_field_extra_atts', 'function_name', 10, 3 ); * @example * */ $field_atts = apply_filters( 'um_field_extra_atts', $field_atts, $key, $data ); $html_atts = ''; foreach ( $field_atts as $att_name => $att_values ) { $att_values = implode( " ", $att_values ); $html_atts .= " {$att_name}=\"" . esc_attr( $att_values ) . "\""; } $html_atts .= $conditional; return $html_atts; } } }