editing = false; $this->viewing = false; $this->timestamp = current_time( 'timestamp' ); } /** * Standard checkbox field * * @param integer $id * @param string $title */ function checkbox( $id, $title ) { ?>
builtin()->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'] ); 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] )) { 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] )) { unset( $fields[$id] ); update_option( 'um_fields', $fields ); } } /** * 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 (isset( $fields ) && !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 (isset( $fields ) && !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 ); // add field to db //$this->globally_update_field( $global_id, $fields[$global_id] ); } } /** * 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'] ); 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 ($force_show) { $output = '
' . $text . '
'; return $output; } if (isset( $this->set_id ) && UM()->form()->processing == $this->set_id) { $output = '
' . $text . '
'; } else { $output = ''; } if (!UM()->form()->processing) { $output = '
' . $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 ); } /** * Returns field error * * @param string $key * * @return string */ function show_error( $key ) { return UM()->form()->errors[$key]; } /** * Display field label * * @param string $label * @param string $key * @param data $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) { $label = apply_filters( "um_view_label_{$key}", $label ); } else { $label = apply_filters( "um_edit_label_{$key}", $label ); $label = apply_filters( "um_edit_label_all_fields", $label, $data ); } $output .= ''; if (isset( $data['help'] ) && !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'], UM_TEXTDOMAIN ) . ''; } } $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 (isset( $data['icon'] ) && $data['icon'] && isset( $this->field_icons ) && $this->field_icons == 'field') { $classes .= 'um-iconed '; } if ($add) { $classes .= $add . ' '; } return $classes; } /** * Gets field value * * @param string $key * @param boolean $default * @param array $data * * @return mixed */ function field_value( $key, $default = false, $data = null ) { 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'] : ''; // preview in backend if (isset( UM()->user()->preview ) && UM()->user()->preview) { $submitted = um_user( 'submitted' ); if (isset( $submitted[$key] ) && !empty( $submitted[$key] )) { return $submitted[$key]; } else { return 'Undefined'; } } // normal state if (isset( UM()->form()->post_form[$key] )) { if (strstr( $key, 'user_pass' ) && $this->set_mode != 'password') return ''; return stripslashes_deep( UM()->form()->post_form[$key] ); } else if (um_user( $key ) && $this->editing == true) { if (strstr( $key, 'user_pass' )) return ''; $value = um_user( $key ); $value = apply_filters( "um_edit_{$key}_field_value", $value, $key ); $value = apply_filters( "um_edit_{$type}_field_value", $value, $key ); return $value; } else if (( um_user( $key ) || isset( $data['show_anyway'] ) ) && $this->viewing == true) { $value = um_filtered_value( $key, $data ); return $value; } else if( isset( UM()->user()->profile[$key] ) ){ $value = UM()->user()->profile[$key]; $value = apply_filters( "um_edit_{$key}_field_value", $value, $key ); return $value; } else if ($default) { $default = apply_filters( "um_field_default_value", $default, $data, $type ); $default = apply_filters( "um_field_{$key}_default_value", $default, $data ); $default = apply_filters( "um_field_{$type}_default_value", $default, $data ); return $default; } else if ($this->editing == true) { return apply_filters( "um_edit_{$key}_field_value", '', $key ); } return ''; } /** * Checks if an option is selected * * @param string $key * @param string $value * @param array $data * * @return boolean */ function is_selected( $key, $value, $data ) { $key = apply_filters( 'um_is_selected_filter_key', $key ); if (isset( UM()->form()->post_form[$key] ) && is_array( UM()->form()->post_form[$key] )) { if (in_array( $value, UM()->form()->post_form[$key] )) { return true; } if (in_array( html_entity_decode( $value ), UM()->form()->post_form[$key] )) { return true; } } else { if (!isset( UM()->form()->post_form[$key] )) { $field_value = um_user( $key ); if ($key == 'role') { $role_keys = get_option( 'um_roles' ); if (!empty( $role_keys )) { if (in_array( $field_value, $role_keys )) { $field_value = 'um_' . $field_value; } } } $field_value = apply_filters( 'um_is_selected_filter_value', $field_value, $key ); $data = apply_filters( 'um_is_selected_filter_data', $data, $key, $field_value ); if ($field_value && $this->editing == true && is_array( $field_value ) && ( in_array( $value, $field_value ) || in_array( html_entity_decode( $value ), $field_value ) )) { return true; } if ($field_value && $this->editing == true && !is_array( $field_value ) && $field_value == $value) { return true; } if ($field_value && $this->editing == true && !is_array( $field_value ) && html_entity_decode( $field_value ) == html_entity_decode( $value )) { return true; } if (strstr( $data['default'], ', ' )) { $data['default'] = explode( ', ', $data['default'] ); } if (isset( $data['default'] ) && !is_array( $data['default'] ) && $data['default'] == $value) { return true; } if (isset( $data['default'] ) && is_array( $data['default'] ) && in_array( $value, $data['default'] )) { return true; } } else { if ($value == UM()->form()->post_form[$key]) { 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 ) { 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; } else if ($value == UM()->form()->post_form[$key]) { return true; } } else { if (um_user( $key ) && $this->editing == true) { if (strstr( $key, 'role_' )) { $key = 'role'; } $um_user_value = um_user( $key ); if ($key == 'role') { $um_user_value = strtolower( $um_user_value ); $role_keys = get_option( 'um_roles' ); 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 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 json */ function get_option_value_from_callback( $value, $data, $type ) { if (in_array( $type, array( 'select', 'multiselect' ) ) && isset( $data['custom_dropdown_options_source'] ) && !empty( $data['custom_dropdown_options_source'] )) { if ( function_exists( $data['custom_dropdown_options_source'] ) ) { $arr_options = call_user_func( $data['custom_dropdown_options_source'], $data['parent_dropdown_relationship'] ); if ($type == 'select') { if (isset( $arr_options[$value] ) && !empty( $arr_options[$value] )) { return $arr_options[$value]; } else if (isset( $data['default'] ) && !empty( $data['default'] ) && empty( $arr_options[$value] )) { return $arr_options[$data['default']]; } else { return ''; } } if ($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 ) { if ( in_array( $type, array( 'select', 'multiselect' ) ) && isset( $data['custom_dropdown_options_source'] ) && ! empty( $data['custom_dropdown_options_source'] ) ) { $arr_options = call_user_func( $data['custom_dropdown_options_source'], $data['parent_dropdown_relationship'] ); } 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 ) { $fields = UM()->builtin()->all_user_fields; if (isset( $fields[$key]['label'] )) return $fields[$key]['label']; if (isset( $fields[$key]['title'] )) return $fields[$key]['title']; return ''; } /** * 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() { $this->fields = array(); $this->fields = apply_filters( "um_get_form_fields", $this->fields ); return $this->fields; } /** * Get specific field * * @param string $key * * @return array */ 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="' . $cond[0] . '" data-cond-' . $cond_id . '-field="' . $cond[1] . '" data-cond-' . $cond_id . '-operator="' . $cond[2] . '" data-cond-' . $cond_id . '-value="' . $cond[3] . '"'; } $array['classes'] .= ' um-is-conditional'; } else { $array['conditional'] = null; } $array['classes'] .= ' um-field-' . $key; $array['classes'] .= ' um-field-' . $array['type']; $array['classes'] .= ' um-field-type_' . $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' ); } else if ($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; } else if ($array['crop'] == 1) { $array['crop_data'] = 'square'; } else if ($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 (!isset( $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."; if (!isset( $array['max_size_error'] )) $array['max_size_error'] = "This file is too large!"; if (!isset( $array['min_size_error'] )) $array['min_size_error'] = "This file is too small!"; if (!isset( $array['max_files_error'] )) $array['max_files_error'] = "You can only upload one file"; if (!isset( $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'; $array = apply_filters( "um_get_field__{$key}", $array ); return $array; } /** * Gets a field in 'input mode' * * @param string $key * @param array $data * @param boolean $rule * * @return string */ function edit_field( $key, $data, $rule = false ) { global $_um_profile_id; $output = null; $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 )) { extract( $data ); } } if (!isset( $data['type'] )) return; if (isset( $data['in_group'] ) && $data['in_group'] != '' && $rule != 'group') return; if ($visibility == 'view' && $this->set_mode != 'register') return; if (( $visibility == 'view' && $this->set_mode == 'register' ) || ( isset( $data['editable'] ) && $data['editable'] == 0 && $this->set_mode == 'profile' ) ) { 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']) { if (in_array( UM()->roles()->um_get_user_role( get_current_user_id() ), $data['roles'] )) { $disabled = ''; } } } if (!isset( $data['autocomplete'] )) { $autocomplete = 'off'; } um_fetch_user( get_current_user_id() ); if (!um_can_view_field( $data )) return; if (!um_can_edit_field( $data )) return; um_fetch_user( $_um_profile_id ); // fields that need to be disabled in edit mode (profile) $arr_restricted_fields = array( 'user_email', 'username', 'user_login', 'user_password' ); if (um_get_option( 'editable_primary_email_in_profile' ) == 1) { unset( $arr_restricted_fields[0] ); // remove user_email } if (in_array( $key, $arr_restricted_fields ) && $this->editing == true && $this->set_mode == 'profile') { return; } // forbidden in edit mode? if (isset( $data['edit_forbidden'] )) return; // required option if (isset( $data['required_opt'] )) { $opt = $data['required_opt']; if (um_get_option( $opt[0] ) != $opt[1]) { return; } } // required user permission if (isset( $data['required_perm'] )) { if (!um_user( $data['required_perm'] )) { return; } } // do not show passwords if (isset( UM()->user()->preview ) && UM()->user()->preview) { if ($data['type'] == 'password') { return; } } $type = apply_filters( "um_hook_for_field_{$type}", $type ); /* Begin by field type */ switch ($type) { /* Default: Integration */ default: $mode = ( isset( $this->set_mode ) ) ? $this->set_mode : 'no_mode'; $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 .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if (isset( $icon ) && $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 ) ); } $output .= '
'; break; /* Text */ case 'text': $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if (isset( $icon ) && $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 ) ); } $output .= '
'; break; /* Number */ case 'number': $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if (isset( $icon ) && $icon && isset( $this->field_icons ) && $this->field_icons == 'field') { $output .= '
'; } $number_limit = ''; if (isset( $min )) { $number_limit .= " min=\"{$min}\" "; } if (isset( $max )) { $number_limit .= " max=\"{$max}\" "; } $output .= '
'; if ($this->is_error( $key )) { $output .= $this->field_error( $this->show_error( $key ) ); } $output .= '
'; break; /* Password */ case 'password': $original_key = $key; if ($key == 'single_user_password') { $key = $original_key; $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if (isset( $icon ) && $icon && $this->field_icons == 'field') { $output .= '
'; } $output .= '
'; if ($this->is_error( $key )) { $output .= $this->field_error( $this->show_error( $key ) ); } $output .= '
'; } else { if ($this->set_mode == 'account' || um_is_core_page( 'account' )) { $key = 'current_' . $original_key; $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( __( 'Current Password', 'ultimate-member' ), $key, $data ); } $output .= '
'; if (isset( $icon ) && $icon && $this->field_icons == 'field') { $output .= '
'; } $output .= '
'; if ($this->is_error( $key )) { $output .= $this->field_error( $this->show_error( $key ) ); } $output .= '
'; } $key = $original_key; $output .= '
'; 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 ); } else if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if (isset( $icon ) && $icon && $this->field_icons == 'field') { $output .= '
'; } $output .= '
'; if ($this->is_error( $key )) { $output .= $this->field_error( $this->show_error( $key ) ); } $output .= '
'; if ($this->set_mode != 'login' && isset( $data['force_confirm_pass'] ) && $data['force_confirm_pass'] == 1) { $key = 'confirm_' . $original_key; $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( sprintf( __( 'Confirm %s', 'ultimate-member' ), $data['label'] ), $key, $data ); } $output .= '
'; if (isset( $icon ) && $icon && $this->field_icons == 'field') { $output .= '
'; } $output .= '
'; if ($this->is_error( $key )) { $output .= $this->field_error( $this->show_error( $key ) ); } $output .= '
'; } } break; /* URL */ case 'url': $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if (isset( $icon ) && $icon && isset( $this->field_icons ) && $this->field_icons == 'field') { $output .= '
'; } $output .= '
'; if ($this->is_error( $key )) { $output .= $this->field_error( $this->show_error( $key ) ); } $output .= '
'; break; /* Date */ case 'date': $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if (isset( $icon ) && $icon && isset( $this->field_icons ) && $this->field_icons == 'field') { $output .= '
'; } $output .= '
'; if ($this->is_error( $key )) { $output .= $this->field_error( $this->show_error( $key ) ); } $output .= '
'; break; /* Time */ case 'time': $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; if (isset( $icon ) && $icon && $this->field_icons == 'field') { $output .= '
'; } $output .= '
'; if ($this->is_error( $key )) { $output .= $this->field_error( $this->show_error( $key ) ); } $output .= '
'; break; /* Row */ case 'row': $output .= ''; break; /* Textarea */ case 'textarea': $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; $field_name = $key; $field_value = $this->field_value( $key, $default, $data ); 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; } $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(); } else $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 ) ); } $output .= '
'; break; /* Rating */ case 'rating': $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; $output .= '
'; $output .= '
'; $output .= '
'; break; /* Gap/Space */ case 'spacing': $output .= '
'; break; /* A line divider */ case 'divider': $output .= '
'; if ($divider_text) { $output .= '
' . $divider_text . '
'; } $output .= '
'; break; /* Single Image Upload */ case 'image': $output .= '
'; 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 ($this->field_value( $key, $default, $data )) { if (!in_array( $key, array( 'profile_photo', 'cover_photo' ) )) { if (isset( $this->set_mode ) && $this->set_mode == 'register') { $imgValue = $this->field_value( $key, $default, $data ); } else { $imgValue = um_user_uploads_uri() . $this->field_value( $key, $default, $data ); } $img = ''; } else { $img = ''; } $output .= '
' . $img . '
' . __( 'Change photo', 'ultimate-member' ) . ''; } else { $output .= '
' . $button_text . ''; } $output .= '
'; /* modal hidden */ $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 ) ); } $output .= '
'; break; /* Single File Upload */ case 'file': $output .= '
'; $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 ($this->field_value( $key, $default, $data )) { $extension = pathinfo( $this->field_value( $key, $default, $data ), PATHINFO_EXTENSION ); $output .= '' . __( 'Change file', 'ultimate-member' ) . ''; } else { $output .= '
' . $button_text . ''; } $output .= '
'; /* modal hidden */ $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 ) ); } $output .= '
'; break; /* Select dropdown */ case 'select': $form_key = str_replace( 'role_select', 'role', $key ); $output .= '
'; 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 (isset( $icon ) && $icon && isset( $this->field_icons ) && $this->field_icons == 'field') { $output .= '
'; } $has_parent_option = false; $disabled_by_parent_option = ''; $atts_ajax = ''; $select_original_option_value = ''; if (isset( $data['parent_dropdown_relationship'] ) && !empty( $data['parent_dropdown_relationship'] ) && !UM()->user()->preview) { $disabled_by_parent_option = 'disabled = disabled'; $has_parent_option = true; $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 (isset( $data['custom_dropdown_options_source'] ) && !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 ) . "' "; } } } if (!empty( $data['custom_dropdown_options_source'] )) { $ajax_source = apply_filters( "um_custom_dropdown_options_source__{$form_key}", $data['custom_dropdown_options_source'], $data ); $atts_ajax .= " data-um-ajax-source='{$ajax_source}' "; $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='{$ajax_source_url}' "; } $output .= ''; $output .= '
'; if ($this->is_error( $form_key )) { $output .= $this->field_error( $this->show_error( $form_key ) ); } $output .= '
'; break; /* Multi-Select dropdown */ case 'multiselect': $max_selections = ( isset( $max_selections ) ) ? absint( $max_selections ) : 0; $output .= '
'; 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 = ''; $use_keyword = apply_filters( 'um_multiselect_option_value', 0, $data['type'] ); $output .= '
'; if (isset( $icon ) && $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 ) ); } $output .= '
'; break; /* Radio */ case 'radio': $form_key = str_replace( 'role_radio', 'role', $key ); if (isset( $options )) { $options = apply_filters( 'um_radio_field_options', $options, $data ); $options = apply_filters( "um_radio_field_options_{$key}", $options ); } $output .= '
'; if (isset( $data['label'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; // role field if ($form_key == 'role') { global $wp_roles; $role_keys = array_map( function( $item ) { return 'um_' . $item; }, get_option( 'um_roles' ) ); $exclude_roles = array_diff( array_keys( $wp_roles->roles ), array_merge( $role_keys, array( 'subscriber' ) ) ); $options = UM()->roles()->get_roles( false, $exclude_roles ); /*var_dump( UM()->roles()->get_roles() ); global $wpdb; if ( ! empty( $options ) ) { foreach ( $options as $rkey => $val ) { $val = (string) $val; $val = trim( $val ); $post_id = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'um_role' AND ( post_name = %s OR post_title = %s )", $rkey, $val ) ); $_role = get_post( $post_id ); $new_roles[$_role->post_name] = $_role->post_title; wp_reset_postdata(); } $options = $new_roles; }*/ } // add options $i = 0; $field_value = array(); 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' ) )) { $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( $form_key )) { $output .= $this->field_error( $this->show_error( $form_key ) ); } $output .= '
'; break; /* Checkbox */ case 'checkbox': if (isset( $options )) { $options = apply_filters( 'um_checkbox_field_options', $options, $data ); $options = apply_filters( "um_checkbox_field_options_{$key}", $options ); } $output .= '
'; 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 ) ); } $output .= '
'; break; /* HTML */ case 'block': $output .= '
' . $content . '
'; break; /* Shortcode */ case 'shortcode': $content = str_replace( '{profile_id}', um_profile_id(), $content ); $output .= '
' . do_shortcode( $content ) . '
'; break; /* Unlimited Group */ case 'group': $fields = $this->get_fields_in_group( $key ); if (!empty( $fields )) { $output .= '
' . __( $label, UM_TEXTDOMAIN ) . '
'; $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 )) { $output = apply_filters( "um_{$key}_form_edit_field", $output, $this->set_mode ); } return $output; } /** * 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 (isset( $row[$col] )) { $sort_col[$key] = $row[$col]; } } array_multisort( $sort_col, $dir, $arr ); return $arr; } /** * Get fields in row * * @param integer $row_id * * @return string */ function get_fields_by_row( $row_id ) { 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 */ function display( $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 (!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 (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 boolean $rule * * @return string */ function view_field( $key, $data, $rule = false ) { $output = null; // get whole field data if (is_array( $data )) { $data = $this->get_field( $key ); extract( $data ); } if (!isset( $data['type'] )) return; if (isset( $data['in_group'] ) && $data['in_group'] != '' && $rule != 'group') return; if ($visibility == 'edit') return; if (in_array( $type, array( 'block', 'shortcode', 'spacing', 'divider', 'group' ) )) { } else { $_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; switch ($type) { /* Default */ default: $output .= '
'; if (isset( $data['label'] ) || isset( $data['icon'] ) && !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 ); } $data['is_view_field'] = true; $res = apply_filters( "um_view_field", $res, $data, $type ); $res = apply_filters( "um_view_field_value_{$type}", $res, $data ); $output .= '
'; $output .= '
' . $res . '
'; $output .= '
'; $output .= '
'; break; /* HTML */ case 'block': $output .= '
' . $content . '
'; break; /* Shortcode */ case 'shortcode': $content = str_replace( '{profile_id}', um_profile_id(), $content ); $output .= '
' . do_shortcode( $content ) . '
'; break; /* Gap/Space */ case 'spacing': $output .= '
'; break; /* A line divider */ case 'divider': $output .= '
'; if ($divider_text) { $output .= '
' . $divider_text . '
'; } $output .= '
'; break; /* Rating */ case 'rating': $output .= '
'; if (isset( $data['label'] ) || isset( $data['icon'] ) && !empty( $data['icon'] )) { $output .= $this->field_label( $label, $key, $data ); } $output .= '
'; $output .= '
'; $output .= '
'; $output .= '
'; break; } // Custom filter for field output if (isset( $this->set_mode )) { $output = apply_filters( "um_{$key}_form_show_field", $output, $this->set_mode ); $output = apply_filters( "um_{$type}_form_show_field", $output, $this->set_mode ); } return $output; } /** * Display fields ( view mode ) * * @param string $mode * @param array $args * * @return string */ 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_get_option( 'profile_empty_text' )) { $emo = um_get_option( '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' ), 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 (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 = apply_filters( "um_view_field_output_" . $data['type'], $data ); $output .= $this->view_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) { $data = apply_filters( "um_view_field_output_" . $data['type'], $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 = apply_filters( "um_view_field_output_" . $data['type'], $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 = apply_filters( "um_view_field_output_" . $data['type'], $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 = apply_filters( "um_view_field_output_" . $data['type'], $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 = apply_filters( "um_view_field_output_" . $data['type'], $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 array */ 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;'; // show the heading if ($heading) { $heading_background_color = ( isset( $heading_background_color ) ) ? $heading_background_color : ''; $heading_text_color = ( isset( $heading_text_color ) ) ? $heading_text_color : ''; if ($heading_background_color) { $css_heading_background_color = 'background-color: ' . $heading_background_color . ';'; $css_heading_padding = 'padding: 10px 15px;'; } if ($heading_text_color) $css_heading_text_color = 'color: ' . $heading_text_color . ';'; if ($borderradius) $css_heading_borderradius = 'border-radius: ' . $borderradius . ' ' . $borderradius . ' 0px 0px;'; $output .= '
'; if (isset( $icon )) { $output .= ''; } $output .= ( !empty( $heading_text ) ? $heading_text : '' ) . '
'; } else { // no heading if ($borderradius) $css_borderradius = 'border-radius: ' . $borderradius . ';'; } $output .= '
'; return $output; } function do_ajax_action() { if (!is_user_logged_in() || !current_user_can( 'manage_options' )) die( __( 'Please login as administrator', 'ultimate-member' ) ); 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': UM()->fields()->duplicate_field( $arg1, $arg2 ); break; case 'um_admin_remove_field_global': UM()->fields()->delete_field_from_db( $arg1 ); break; case 'um_admin_remove_field': UM()->fields()->delete_field_from_form( $arg1, $arg2 ); break; case 'um_admin_add_field_from_predefined': UM()->fields()->add_field_from_predefined( $arg1, $arg2, $position ); break; case 'um_admin_add_field_from_list': UM()->fields()->add_field_from_list( $arg1, $arg2, $position ); break; } if (is_array( $output )) { print_r( $output ); } else { echo $output; } die; } } }