/**
         * Render the xprofile metabox for Community Profile screen.
         *
         * @since 2.0.0
         *
         * @param WP_User|null $user The WP_User object for the user being edited.
         * @param array        $args Aray of arguments for metaboxes.
         */
        public function user_admin_profile_metaboxes($user = null, $args = array())
        {
            // Bail if no user ID.
            if (empty($user->ID)) {
                return;
            }
            $r = bp_parse_args($args['args'], array('profile_group_id' => 0, 'user_id' => $user->ID), 'bp_xprofile_user_admin_profile_loop_args');
            // We really need these args.
            if (empty($r['profile_group_id']) || empty($r['user_id'])) {
                return;
            }
            // Bail if no profile fields are available.
            if (!bp_has_profile($r)) {
                return;
            }
            // Loop through profile groups & fields.
            while (bp_profile_groups()) {
                bp_the_profile_group();
                ?>

			<input type="hidden" name="field_ids[]" id="<?php 
                echo esc_attr('field_ids_' . bp_get_the_profile_group_slug());
                ?>
" value="<?php 
                echo esc_attr(bp_get_the_profile_group_field_ids());
                ?>
" />

			<?php 
                if (bp_get_the_profile_group_description()) {
                    ?>

				<p class="description"><?php 
                    bp_the_profile_group_description();
                    ?>
</p>

			<?php 
                }
                ?>

			<?php 
                while (bp_profile_fields()) {
                    bp_the_profile_field();
                    ?>

				<div<?php 
                    bp_field_css_class('bp-profile-field');
                    ?>
>

					<?php 
                    $field_type = bp_xprofile_create_field_type(bp_get_the_profile_field_type());
                    $field_type->edit_field_html(array('user_id' => $r['user_id']));
                    if (bp_get_the_profile_field_description()) {
                        ?>

						<p class="description"><?php 
                        bp_the_profile_field_description();
                        ?>
</p>

					<?php 
                    }
                    /**
                     * Fires before display of visibility form elements for profile metaboxes.
                     *
                     * @since 1.7.0
                     */
                    do_action('bp_custom_profile_edit_fields_pre_visibility');
                    $can_change_visibility = bp_current_user_can('bp_xprofile_change_field_visibility');
                    ?>

					<p class="field-visibility-settings-<?php 
                    echo $can_change_visibility ? 'toggle' : 'notoggle';
                    ?>
" id="field-visibility-settings-toggle-<?php 
                    bp_the_profile_field_id();
                    ?>
">

						<?php 
                    printf(__('This field can be seen by: %s', 'buddypress'), '<span class="current-visibility-level">' . bp_get_the_profile_field_visibility_level_label() . '</span>');
                    ?>

						<?php 
                    if ($can_change_visibility) {
                        ?>

							<a href="#" class="button visibility-toggle-link"><?php 
                        esc_html_e('Change', 'buddypress');
                        ?>
</a>

						<?php 
                    }
                    ?>
					</p>

					<?php 
                    if ($can_change_visibility) {
                        ?>

						<div class="field-visibility-settings" id="field-visibility-settings-<?php 
                        bp_the_profile_field_id();
                        ?>
">
							<fieldset>
								<legend><?php 
                        _e('Who can see this field?', 'buddypress');
                        ?>
</legend>

								<?php 
                        bp_profile_visibility_radio_buttons();
                        ?>

							</fieldset>
							<a class="button field-visibility-settings-close" href="#"><?php 
                        esc_html_e('Close', 'buddypress');
                        ?>
</a>
						</div>

					<?php 
                    }
                    ?>

					<?php 
                    /**
                     * Fires at end of custom profile field items on your xprofile screen tab.
                     *
                     * @since 1.1.0
                     */
                    do_action('bp_custom_profile_edit_fields');
                    ?>

				</div>

			<?php 
                }
                // End bp_profile_fields().
                ?>

		<?php 
            }
            // End bp_profile_groups.
        }
    /**
     * Output HTML for this field type's children options on the wp-admin Profile Fields "Add Field" and "Edit Field" screens.
     *
     * You don't need to implement this method for all field types. It's used in core by the
     * selectbox, multi selectbox, checkbox, and radio button fields, to allow the admin to
     * enter the child option values (e.g. the choices in a select box).
     *
     * Must be used inside the {@link bp_profile_fields()} template loop.
     *
     * @param BP_XProfile_Field $current_field The current profile field on the add/edit screen.
     * @param string $control_type Optional. HTML input type used to render the current field's child options.
     * @since BuddyPress (2.0.0)
     */
    public function admin_new_field_html(BP_XProfile_Field $current_field, $control_type = '')
    {
        $type = array_search(get_class($this), bp_xprofile_get_field_types());
        if (false === $type) {
            return;
        }
        $class = $current_field->type != $type ? 'display: none;' : '';
        $current_type_obj = bp_xprofile_create_field_type($type);
        ?>

		<div id="<?php 
        echo esc_attr($type);
        ?>
" class="postbox bp-options-box" style="<?php 
        echo esc_attr($class);
        ?>
 margin-top: 15px;">
			<h3><?php 
        esc_html_e('Please enter options for this Field:', 'buddypress');
        ?>
</h3>
			<div class="inside">
				<p>
					<label for="sort_order_<?php 
        echo esc_attr($type);
        ?>
"><?php 
        esc_html_e('Sort Order:', 'buddypress');
        ?>
</label>
					<select name="sort_order_<?php 
        echo esc_attr($type);
        ?>
" id="sort_order_<?php 
        echo esc_attr($type);
        ?>
" >
						<option value="custom" <?php 
        selected('custom', $current_field->order_by);
        ?>
><?php 
        esc_html_e('Custom', 'buddypress');
        ?>
</option>
						<option value="asc"    <?php 
        selected('asc', $current_field->order_by);
        ?>
><?php 
        esc_html_e('Ascending', 'buddypress');
        ?>
</option>
						<option value="desc"   <?php 
        selected('desc', $current_field->order_by);
        ?>
><?php 
        esc_html_e('Descending', 'buddypress');
        ?>
</option>
					</select>
				</p>

				<?php 
        $options = $current_field->get_children(true);
        // If no children options exists for this field, check in $_POST for a submitted form (e.g. on the "new field" screen).
        if (!$options) {
            $options = array();
            $i = 1;
            while (isset($_POST[$type . '_option'][$i])) {
                // Multiselectbox and checkboxes support MULTIPLE default options; all other core types support only ONE.
                if ($current_type_obj->supports_options && !$current_type_obj->supports_multiple_defaults && isset($_POST["isDefault_{$type}_option"][$i]) && (int) $_POST["isDefault_{$type}_option"] === $i) {
                    $is_default_option = true;
                } elseif (isset($_POST["isDefault_{$type}_option"][$i])) {
                    $is_default_option = (bool) $_POST["isDefault_{$type}_option"][$i];
                } else {
                    $is_default_option = false;
                }
                // Grab the values from $_POST to use as the form's options
                $options[] = (object) array('id' => -1, 'is_default_option' => $is_default_option, 'name' => sanitize_text_field(stripslashes($_POST[$type . '_option'][$i])));
                ++$i;
            }
            // If there are still no children options set, this must be the "new field" screen, so add one new/empty option.
            if (!$options) {
                $options[] = (object) array('id' => -1, 'is_default_option' => false, 'name' => '');
            }
        }
        // Render the markup for the children options
        if (!empty($options)) {
            $default_name = '';
            for ($i = 0, $count = count($options); $i < $count; ++$i) {
                $j = $i + 1;
                // Multiselectbox and checkboxes support MULTIPLE default options; all other core types support only ONE.
                if ($current_type_obj->supports_options && $current_type_obj->supports_multiple_defaults) {
                    $default_name = '[' . $j . ']';
                }
                ?>

						<p class="sortable">
							<span>&nbsp;&Xi;&nbsp;</span>
							<input type="text" name="<?php 
                echo esc_attr("{$type}_option[{$j}]");
                ?>
" id="<?php 
                echo esc_attr("{$type}_option{$j}");
                ?>
" value="<?php 
                echo esc_attr(stripslashes($options[$i]->name));
                ?>
" />
							<input type="<?php 
                echo esc_attr($control_type);
                ?>
" name="<?php 
                echo esc_attr("isDefault_{$type}_option{$default_name}");
                ?>
" <?php 
                checked($options[$i]->is_default_option, true);
                ?>
 value="<?php 
                echo esc_attr($j);
                ?>
" />
							<span><?php 
                _e('Default Value', 'buddypress');
                ?>
</span>

							<?php 
                if (1 <= $i) {
                    ?>
								<a href="<?php 
                    echo esc_url('users.php?page=bp-profile-setup&amp;mode=delete_option&amp;option_id=' . $options[$i]->id);
                    ?>
" class="ajax-option-delete" id="delete-<?php 
                    echo esc_attr($options[$i]->id);
                    ?>
">[x]</a>
							<?php 
                }
                ?>
							
						</p>
					<?php 
            }
            ?>

					<input type="hidden" name="<?php 
            echo esc_attr("{$type}_option_number");
            ?>
" id="<?php 
            echo esc_attr("{$type}_option_number");
            ?>
" value="<?php 
            echo esc_attr($j + 1);
            ?>
" />
				<?php 
        }
        ?>

				<div id="<?php 
        echo esc_attr("{$type}_more");
        ?>
"></div>
				<p><a href="javascript:add_option('<?php 
        echo esc_js($type);
        ?>
')"><?php 
        esc_html_e('Add Another Option', 'buddypress');
        ?>
</a></p>
			</div>
		</div>

		<?php 
    }
/**
 * A simple function to set profile data for a specific field for a specific user.
 *
 * @package BuddyPress Core
 * @param int|string $field The ID of the field, or the $name of the field.
 * @param int|$user_id      The ID of the user
 * @param mixed $value      The value for the field you want to set for the user.
 * @param $is_required      Whether or not the field is required
 * @uses xprofile_get_field_id_from_name() Gets the ID for the field based on the name.
 * @return bool True on success, false on failure.
 */
function xprofile_set_field_data($field, $user_id, $value, $is_required = false)
{
    if (is_numeric($field)) {
        $field_id = $field;
    } else {
        $field_id = xprofile_get_field_id_from_name($field);
    }
    if (empty($field_id)) {
        return false;
    }
    $field = new BP_XProfile_Field($field_id);
    $field_type = BP_XProfile_Field::get_type($field_id);
    $field_type_obj = bp_xprofile_create_field_type($field_type);
    /**
     * Filter the raw submitted profile field value.
     *
     * Use this filter to modify the values submitted by users before
     * doing field-type-specific validation.
     *
     * @since BuddyPress (2.1.0)
     *
     * @param mixed $value Value passed to xprofile_set_field_data()
     * @param BP_XProfile_Field $field Field object.
     * @param BP_XProfile_Field_Type $field_type_obj Field type object.
     */
    $value = apply_filters('bp_xprofile_set_field_data_pre_validate', $value, $field, $field_type_obj);
    // Special-case support for integer 0 for the number field type
    if ($is_required && !is_integer($value) && $value !== '0' && (empty($value) || !is_array($value) && !strlen(trim($value)))) {
        return false;
    }
    /**
     * Certain types of fields (checkboxes, multiselects) may come through empty.
     * Save as empty array so this isn't overwritten by the default on next edit.
     *
     * Special-case support for integer 0 for the number field type
     */
    if (empty($value) && !is_integer($value) && $value !== '0' && $field_type_obj->accepts_null_value) {
        $value = array();
    }
    // If the value is empty, then delete any field data that exists, unless the field is of a type where null values are semantically meaningful
    if (empty($value) && !is_integer($value) && $value !== '0' && !$field_type_obj->accepts_null_value) {
        xprofile_delete_field_data($field_id, $user_id);
        return true;
    }
    // For certain fields, only certain parameters are acceptable, so add them to the whitelist.
    if ($field_type_obj->supports_options) {
        $field_type_obj->set_whitelist_values(wp_list_pluck($field->get_children(), 'name'));
    }
    // Check the value is in an accepted format for this form field.
    if (!$field_type_obj->is_valid($value)) {
        return false;
    }
    $field = new BP_XProfile_ProfileData();
    $field->field_id = $field_id;
    $field->user_id = $user_id;
    $field->value = maybe_serialize($value);
    return $field->save();
}
Example #4
0
        ?>

		<div class="clear"></div>

		<?php 
        while (bp_profile_fields()) {
            bp_the_profile_field();
            ?>

			<div<?php 
            bp_field_css_class('editfield');
            ?>
>

				<?php 
            $field_type = bp_xprofile_create_field_type(bp_get_the_profile_field_type());
            $field_type->edit_field_html();
            /**
             * Fires before the display of visibility options for the field.
             *
             * @since 1.7.0
             */
            do_action('bp_custom_profile_edit_fields_pre_visibility');
            ?>

				<?php 
            if (bp_current_user_can('bp_xprofile_change_field_visibility')) {
                ?>
					<p class="field-visibility-settings-toggle" id="field-visibility-settings-toggle-<?php 
                bp_the_profile_field_id();
                ?>
    /**
     * Output HTML for this field type's children options on the wp-admin Profile Fields "Add Field" and "Edit Field" screens.
     *
     * You don't need to implement this method for all field types. It's used in core by the
     * selectbox, multi selectbox, checkbox, and radio button fields, to allow the admin to
     * enter the child option values (e.g. the choices in a select box).
     *
     * Must be used inside the {@link bp_profile_fields()} template loop.
     *
     * @since 2.0.0
     *
     * @param BP_XProfile_Field $current_field The current profile field on the add/edit screen.
     * @param string            $control_type  Optional. HTML input type used to render the current
     *                          field's child options.
     */
    public function admin_new_field_html(BP_XProfile_Field $current_field, $control_type = '')
    {
        $type = array_search(get_class($this), bp_xprofile_get_field_types());
        if (false === $type) {
            return;
        }
        $class = $current_field->type != $type ? 'display: none;' : '';
        $current_type_obj = bp_xprofile_create_field_type($type);
        ?>

		<div id="<?php 
        echo esc_attr($type);
        ?>
" class="postbox bp-options-box" style="<?php 
        echo esc_attr($class);
        ?>
 margin-top: 15px;">
			<h3><?php 
        esc_html_e('Please enter options for this Field:', 'buddypress');
        ?>
</h3>
			<div class="inside" aria-live="polite" aria-atomic="true" aria-relevant="all">
				<p>
					<label for="sort_order_<?php 
        echo esc_attr($type);
        ?>
"><?php 
        esc_html_e('Sort Order:', 'buddypress');
        ?>
</label>
					<select name="sort_order_<?php 
        echo esc_attr($type);
        ?>
" id="sort_order_<?php 
        echo esc_attr($type);
        ?>
" >
						<option value="custom" <?php 
        selected('custom', $current_field->order_by);
        ?>
><?php 
        esc_html_e('Custom', 'buddypress');
        ?>
</option>
						<option value="asc"    <?php 
        selected('asc', $current_field->order_by);
        ?>
><?php 
        esc_html_e('Ascending', 'buddypress');
        ?>
</option>
						<option value="desc"   <?php 
        selected('desc', $current_field->order_by);
        ?>
><?php 
        esc_html_e('Descending', 'buddypress');
        ?>
</option>
					</select>
				</p>

				<?php 
        // Does option have children?
        $options = $current_field->get_children(true);
        // If no children options exists for this field, check in $_POST
        // for a submitted form (e.g. on the "new field" screen).
        if (empty($options)) {
            $options = array();
            $i = 1;
            while (isset($_POST[$type . '_option'][$i])) {
                // Multiselectbox and checkboxes support MULTIPLE default options; all other core types support only ONE.
                if ($current_type_obj->supports_options && !$current_type_obj->supports_multiple_defaults && isset($_POST["isDefault_{$type}_option"][$i]) && (int) $_POST["isDefault_{$type}_option"] === $i) {
                    $is_default_option = true;
                } elseif (isset($_POST["isDefault_{$type}_option"][$i])) {
                    $is_default_option = (bool) $_POST["isDefault_{$type}_option"][$i];
                } else {
                    $is_default_option = false;
                }
                // Grab the values from $_POST to use as the form's options.
                $options[] = (object) array('id' => -1, 'is_default_option' => $is_default_option, 'name' => sanitize_text_field(stripslashes($_POST[$type . '_option'][$i])));
                ++$i;
            }
            // If there are still no children options set, this must be the "new field" screen, so add one new/empty option.
            if (empty($options)) {
                $options[] = (object) array('id' => -1, 'is_default_option' => false, 'name' => '');
            }
        }
        // Render the markup for the children options.
        if (!empty($options)) {
            $default_name = '';
            for ($i = 0, $count = count($options); $i < $count; ++$i) {
                $j = $i + 1;
                // Multiselectbox and checkboxes support MULTIPLE default options; all other core types support only ONE.
                if ($current_type_obj->supports_options && $current_type_obj->supports_multiple_defaults) {
                    $default_name = '[' . $j . ']';
                }
                ?>

						<div id="<?php 
                echo esc_attr("{$type}_div{$j}");
                ?>
" class="bp-option sortable">
							<span class="bp-option-icon grabber"></span>
							<label for="<?php 
                echo esc_attr("{$type}_option{$j}");
                ?>
" class="screen-reader-text"><?php 
                /* translators: accessibility text */
                esc_html_e('Add an option', 'buddypress');
                ?>
</label>
							<input type="text" name="<?php 
                echo esc_attr("{$type}_option[{$j}]");
                ?>
" id="<?php 
                echo esc_attr("{$type}_option{$j}");
                ?>
" value="<?php 
                echo esc_attr(stripslashes($options[$i]->name));
                ?>
" />
							<label for="<?php 
                echo esc_attr("{$type}_option{$default_name}");
                ?>
">
								<input type="<?php 
                echo esc_attr($control_type);
                ?>
" id="<?php 
                echo esc_attr("{$type}_option{$default_name}");
                ?>
" name="<?php 
                echo esc_attr("isDefault_{$type}_option{$default_name}");
                ?>
" <?php 
                checked($options[$i]->is_default_option, true);
                ?>
 value="<?php 
                echo esc_attr($j);
                ?>
" />
								<?php 
                _e('Default Value', 'buddypress');
                ?>
							</label>

							<?php 
                if (1 !== $j) {
                    ?>
								<div class ="delete-button">
									<a href='javascript:hide("<?php 
                    echo esc_attr("{$type}_div{$j}");
                    ?>
")' class="delete"><?php 
                    esc_html_e('Delete', 'buddypress');
                    ?>
</a>
								</div>
							<?php 
                }
                ?>

						</div>

					<?php 
            }
            ?>

					<input type="hidden" name="<?php 
            echo esc_attr("{$type}_option_number");
            ?>
" id="<?php 
            echo esc_attr("{$type}_option_number");
            ?>
" value="<?php 
            echo esc_attr($j + 1);
            ?>
" />
				<?php 
        }
        ?>

				<div id="<?php 
        echo esc_attr("{$type}_more");
        ?>
"></div>
				<p><a href="javascript:add_option('<?php 
        echo esc_js($type);
        ?>
')"><?php 
        esc_html_e('Add Another Option', 'buddypress');
        ?>
</a></p>

				<?php 
        /**
         * Fires at the end of the new field additional settings area.
         *
         * @since 2.3.0
         *
         * @param BP_XProfile_Field $current_field Current field being rendered.
         */
        do_action('bp_xprofile_admin_new_field_additional_settings', $current_field);
        ?>
			</div>
		</div>

		<?php 
    }
        public function admin_new_field_html(\BP_XProfile_Field $current_field, $control_type = '')
        {
            $type = array_search(get_class($this), bp_xprofile_get_field_types());
            if (false === $type) {
                return;
            }
            $class = $current_field->type != $type ? 'display: none;' : '';
            $current_type_obj = bp_xprofile_create_field_type($type);
            $options = $current_field->get_children(true);
            if (!$options) {
                $options = array();
                $i = 1;
                while (isset($_POST[$type . '_option'][$i])) {
                    if ($current_type_obj->supports_options && !$current_type_obj->supports_multiple_defaults && isset($_POST["isDefault_{$type}_option"][$i]) && (int) $_POST["isDefault_{$type}_option"] === $i) {
                        $is_default_option = true;
                    } elseif (isset($_POST["isDefault_{$type}_option"][$i])) {
                        $is_default_option = (bool) $_POST["isDefault_{$type}_option"][$i];
                    } else {
                        $is_default_option = false;
                    }
                    $options[] = (object) array('id' => -1, 'is_default_option' => $is_default_option, 'name' => sanitize_text_field(stripslashes($_POST[$type . '_option'][$i])));
                    ++$i;
                }
                if (!$options) {
                    $options[] = (object) array('id' => -1, 'is_default_option' => false, 'name' => '');
                }
            }
            $taxonomies = get_taxonomies(array('public' => true, '_builtin' => false));
            ?>
            <div id="<?php 
            echo esc_attr($type);
            ?>
" class="postbox bp-options-box" style="<?php 
            echo esc_attr($class);
            ?>
 margin-top: 15px;">
        <?php 
            if (!$taxonomies) {
                ?>
                <h3><?php 
                _e('There is no custom taxonomy. You need to create at least one to use this field.', 'bxcft');
                ?>
</h3>
        <?php 
            } else {
                ?>
                <h3><?php 
                esc_html_e('Select a custom taxonomy:', 'bxcft');
                ?>
</h3>
                <div class="inside">
                    <p>
                        <?php 
                _e('Select a custom taxonomy:', 'bxcft');
                ?>
                        <select name="<?php 
                echo esc_attr("{$type}_option[1]");
                ?>
" id="<?php 
                echo esc_attr("{$type}_option[1]");
                ?>
">
                            <option value=""><?php 
                _e('Select...', 'bxcft');
                ?>
</option>
                        <?php 
                foreach ($taxonomies as $k => $v) {
                    ?>
                            <option value="<?php 
                    echo $k;
                    ?>
"<?php 
                    if ($options[0]->name == $k) {
                        ?>
 selected="selected"<?php 
                    }
                    ?>
><?php 
                    echo $v;
                    ?>
</option>
                        <?php 
                }
                ?>
                        </select>
                    </p>
                </div>
        <?php 
            }
            ?>
            </div>
        <?php 
        }
 /**
  * This function populates the items for radio buttons checkboxes and drop
  * down boxes.
  */
 public function render_admin_form_children()
 {
     foreach (array_keys(bp_xprofile_get_field_types()) as $field_type) {
         $type_obj = bp_xprofile_create_field_type($field_type);
         $type_obj->admin_new_field_html($this);
     }
 }
        public function admin_new_field_html(\BP_XProfile_Field $current_field, $control_type = '')
        {
            $type = array_search(get_class($this), bp_xprofile_get_field_types());
            if (false === $type) {
                return;
            }
            $class = $current_field->type != $type ? 'display: none;' : '';
            $current_type_obj = bp_xprofile_create_field_type($type);
            $options = $current_field->get_children(true);
            if (!$options) {
                $options = array();
                $i = 1;
                while (isset($_POST[$type . '_option'][$i])) {
                    $is_default_option = true;
                    $options[] = (object) array('id' => -1, 'is_default_option' => $is_default_option, 'name' => sanitize_text_field(stripslashes($_POST[$type . '_option'][$i])));
                    ++$i;
                }
                if (!$options) {
                    $options[] = (object) array('id' => -1, 'is_default_option' => false, 'name' => '2');
                }
            }
            ?>
            <div id="<?php 
            echo esc_attr($type);
            ?>
" class="postbox bp-options-box" style="<?php 
            echo esc_attr($class);
            ?>
 margin-top: 15px;">
                <h3><?php 
            esc_html_e('Select max number of decimals:', 'bxcft');
            ?>
</h3>
                <div class="inside">
                    <p>
                        <select name="<?php 
            echo esc_attr("{$type}_option[1]");
            ?>
" id="<?php 
            echo esc_attr("{$type}_option1");
            ?>
">
                        <?php 
            for ($j = 1; $j <= 6; $j++) {
                ?>
                            <option value="<?php 
                echo $j;
                ?>
"<?php 
                if ($j === (int) $options[0]->name) {
                    ?>
 selected="selected"<?php 
                }
                ?>
><?php 
                echo $j;
                ?>
</option>
                        <?php 
            }
            ?>
                        </select>
                    </p>
                </div>
            </div>
        <?php 
        }
        public function admin_new_field_html(\BP_XProfile_Field $current_field, $control_type = '')
        {
            $type = array_search(get_class($this), bp_xprofile_get_field_types());
            if (false === $type) {
                return;
            }
            $class = $current_field->type != $type ? 'display: none;' : '';
            $current_type_obj = bp_xprofile_create_field_type($type);
            $options = $current_field->get_children(true);
            $min = '';
            $max = '';
            if (!$options) {
                $options = array();
                $i = 1;
                while (isset($_POST[$type . '_option'][$i])) {
                    $is_default_option = true;
                    $options[] = (object) array('id' => -1, 'is_default_option' => $is_default_option, 'name' => sanitize_text_field(stripslashes($_POST[$type . '_option'][$i])));
                    ++$i;
                }
                if (!$options) {
                    $options[] = (object) array('id' => -1, 'is_default_option' => false, 'name' => '2');
                }
            } else {
                foreach ($options as $o) {
                    if (strpos($o->name, 'min_') !== false) {
                        $min = str_replace('min_', '', $o->name);
                    }
                    if (strpos($o->name, 'max_') !== false) {
                        $max = str_replace('max_', '', $o->name);
                    }
                }
            }
            ?>
            <div id="<?php 
            echo esc_attr($type);
            ?>
" class="postbox bp-options-box" style="<?php 
            echo esc_attr($class);
            ?>
 margin-top: 15px;">
                <h3><?php 
            esc_html_e('Write min and max values. You can leave any field blank if you want.', 'bxcft');
            ?>
</h3>
                <div class="inside">
                    <p>
                        <label for="<?php 
            echo esc_attr("{$type}_option1");
            ?>
">
                            <?php 
            esc_html_e('Minimum:', 'bxcft');
            ?>
                        </label>
                        <input type="text" name="<?php 
            echo esc_attr("{$type}_option[1]");
            ?>
"
                            id="<?php 
            echo esc_attr("{$type}_option1");
            ?>
" value="<?php 
            echo $min;
            ?>
" />
                        <label for="<?php 
            echo esc_attr("{$type}_option2");
            ?>
">
                            <?php 
            esc_html_e('Maximum:', 'bxcft');
            ?>
                        </label>
                        <input type="text" name="<?php 
            echo esc_attr("{$type}_option[2]");
            ?>
"
                            id="<?php 
            echo esc_attr("{$type}_option2");
            ?>
" value="<?php 
            echo $max;
            ?>
" />
                    </p>
                </div>
            </div>
            <script>
                var error_msg_number_minmax = '<?php 
            esc_html_e("Min value cannot be bigger than max value.", "bxcft");
            ?>
',
                    error_msg_number_minmax_empty = '<?php 
            esc_html_e("You have to fill at least one field.", "bxcft");
            ?>
';
            </script>
        <?php 
        }
 /**
  * @group BP_XProfile_Field_Group_Type_Placeholder
  */
 public function test_placeholder_validate_any_value()
 {
     $field = bp_xprofile_create_field_type('foo');
     $this->assertTrue($field->is_valid(''));
     $this->assertTrue($field->is_valid('bar'));
     $this->assertTrue($field->is_valid(array('bar')));
 }
 public function may_be_show_field()
 {
     $field_id = bp_get_the_profile_field_id();
     if (!$this->was_shown($field_id) && in_array(bp_get_the_profile_field_type(), $this->field_types)) {
         $field_type = bp_xprofile_create_field_type(bp_get_the_profile_field_type());
         $field_type->edit_field_html();
     }
 }
        public function admin_new_field_html(\BP_XProfile_Field $current_field, $control_type = '')
        {
            $type = array_search(get_class($this), bp_xprofile_get_field_types());
            if (false === $type) {
                return;
            }
            $class = $current_field->type != $type ? 'display: none;' : '';
            $current_type_obj = bp_xprofile_create_field_type($type);
            $text = '';
            $options = $current_field->get_children(true);
            if (!$options) {
                $options = array();
                $i = 1;
                while (isset($_POST[$type . '_option'][$i])) {
                    if ($current_type_obj->supports_options && !$current_type_obj->supports_multiple_defaults && isset($_POST["isDefault_{$type}_option"][$i]) && (int) $_POST["isDefault_{$type}_option"] === $i) {
                        $is_default_option = true;
                    } elseif (isset($_POST["isDefault_{$type}_option"][$i])) {
                        $is_default_option = (bool) $_POST["isDefault_{$type}_option"][$i];
                    } else {
                        $is_default_option = false;
                    }
                    $options[] = (object) array('id' => 0, 'is_default_option' => $is_default_option, 'name' => sanitize_text_field(stripslashes($_POST[$type . '_option'][$i])));
                    $text .= sanitize_text_field(stripslashes($_POST[$type . '_option'][$i]));
                    ++$i;
                }
                if (!$options) {
                    $options[] = (object) array('id' => 0, 'is_default_option' => false, 'name' => '');
                }
            } else {
                foreach ($options as $option) {
                    $text .= rawurldecode($option->name);
                }
            }
            ?>
            <div id="<?php 
            echo esc_attr($type);
            ?>
" class="postbox bp-options-box" style="<?php 
            echo esc_attr($class);
            ?>
 margin-top: 15px;">
                <h3><?php 
            esc_html_e('Use this field to write a text that should be displayed beside the checkbox:', 'bxcft');
            ?>
</h3>
                <div class="inside">
                    <p>
                        <textarea name="<?php 
            echo esc_attr("{$type}_text");
            ?>
" 
                                  id="<?php 
            echo esc_attr("{$type}_text");
            ?>
" rows="5" cols="60"><?php 
            echo $text;
            ?>
</textarea>
                    </p>
                </div>
                <?php 
            if ($options) {
                $i = 1;
                ?>
                    <?php 
                foreach ($options as $option) {
                    ?>
                    <input type="hidden" name="<?php 
                    echo esc_attr("{$type}_option[{$i}]");
                    ?>
"
                           id ="<?php 
                    echo esc_attr("{$type}_option{$i}");
                    ?>
" value="<?php 
                    echo $option->name;
                    ?>
" />
                    <?php 
                    $i++;
                }
                ?>
                <?php 
            }
            ?>
            </div>
        <?php 
        }
/**
 * Handles the WYSIWYG display of each profile field on the edit screen.
 *
 * @since 1.5.0
 *
 * @param object $admin_field Admin field.
 * @param object $admin_group Admin group object.
 * @param string $class       Classes to append to output.
 */
function xprofile_admin_field($admin_field, $admin_group, $class = '')
{
    global $field;
    $field = $admin_field;
    ?>

	<fieldset id="draggable_field_<?php 
    echo esc_attr($field->id);
    ?>
"class="sortable<?php 
    echo ' ' . $field->type;
    if (!empty($class)) {
        echo ' ' . $class;
    }
    ?>
">
		<legend>
			<span>
				<?php 
    bp_the_profile_field_name();
    ?>

				<?php 
    if (empty($field->can_delete)) {
        esc_html_e('(Primary)', 'buddypress');
    }
    ?>
				<?php 
    bp_the_profile_field_required_label();
    ?>
				<?php 
    if (bp_xprofile_get_meta($field->id, 'field', 'signup_position')) {
        esc_html_e('(Sign-up)', 'buddypress');
    }
    ?>
				<?php 
    if (bp_get_member_types()) {
        echo $field->get_member_type_label();
    }
    ?>

				<?php 
    /**
     * Fires at end of legend above the name field in base xprofile group.
     *
     * @since 2.2.0
     *
     * @param BP_XProfile_Field $field Current BP_XProfile_Field
     *                                 object being rendered.
     */
    do_action('xprofile_admin_field_name_legend', $field);
    ?>
			</span>
		</legend>
		<div class="field-wrapper">

			<?php 
    if (in_array($field->type, array_keys(bp_xprofile_get_field_types()))) {
        $field_type = bp_xprofile_create_field_type($field->type);
        $field_type->admin_field_html();
    } else {
        /**
         * Fires after the input if the current field is not in default field types.
         *
         * @since 1.5.0
         *
         * @param BP_XProfile_Field $field Current BP_XProfile_Field
         *                                 object being rendered.
         * @param int               $value Integer 1.
         */
        do_action('xprofile_admin_field', $field, 1);
    }
    ?>

			<?php 
    if ($field->description) {
        ?>

				<p class="description"><?php 
        echo esc_attr($field->description);
        ?>
</p>

			<?php 
    }
    ?>

			<div class="actions">
				<a class="button edit" href="users.php?page=bp-profile-setup&amp;group_id=<?php 
    echo esc_attr($admin_group->id);
    ?>
&amp;field_id=<?php 
    echo esc_attr($field->id);
    ?>
&amp;mode=edit_field"><?php 
    _e('Edit', 'buddypress');
    ?>
</a>

				<?php 
    if ($field->can_delete) {
        ?>

					<div class="delete-button">
						<a class="confirm submit-delete deletion" href="users.php?page=bp-profile-setup&amp;field_id=<?php 
        echo esc_attr($field->id);
        ?>
&amp;mode=delete_field"><?php 
        _e('Delete', 'buddypress');
        ?>
</a>
					</div>

				<?php 
    }
    ?>

				<?php 
    /**
     * Fires at end of field management links in xprofile management admin.
     *
     * @since 2.2.0
     *
     * @param BP_XProfile_Group $group BP_XProfile_Group object
     *                                 for the current group.
     */
    do_action('xprofile_admin_field_action', $field);
    ?>

			</div>
		</div>
	</fieldset>

<?php 
}
        public function admin_new_field_html(\BP_XProfile_Field $current_field, $control_type = '')
        {
            $type = array_search(get_class($this), bp_xprofile_get_field_types());
            if (false === $type) {
                return;
            }
            $class = $current_field->type != $type ? 'display: none;' : '';
            $current_type_obj = bp_xprofile_create_field_type($type);
            $options = $current_field->get_children(true);
            if (!$options) {
                $options = array();
                $i = 1;
                while (isset($_POST[$type . '_option'][$i])) {
                    $is_default_option = true;
                    $options[] = (object) array('id' => -1, 'is_default_option' => $is_default_option, 'name' => sanitize_text_field(stripslashes($_POST[$type . '_option'][$i])));
                    ++$i;
                }
                if (!$options) {
                    $options[] = (object) array('id' => -1, 'is_default_option' => false, 'name' => '');
                }
            }
            ?>
            <div id="<?php 
            echo esc_attr($type);
            ?>
" class="postbox bp-options-box" style="<?php 
            echo esc_attr($class);
            ?>
 margin-top: 15px;">
                <h3><?php 
            esc_html_e('Show age (hide birthdate):', 'bxcft');
            ?>
</h3>
                <div class="inside">
                    <p>
                        <?php 
            _e('Check this if you want to show age instead of birthdate:', 'bxcft');
            ?>
                        <input type="hidden" name="<?php 
            echo esc_attr("{$type}_option[0]");
            ?>
" id="<?php 
            echo esc_attr("{$type}_option0");
            ?>
" value="show_birthdate" />
                        <input type="checkbox" name="<?php 
            echo esc_attr("{$type}_option[1]");
            ?>
" id="<?php 
            echo esc_attr("{$type}_option1");
            ?>
" value="show_age"
                               <?php 
            if ($options[0]->name == 'show_age') {
                ?>
checked="checked"<?php 
            }
            ?>
/>
                    </p>
                </div>
            </div>
        <?php 
        }
        /**
         * Render the xprofile metabox for Community Profile screen.
         *
         * @access public
         * @since BuddyPress (2.0.0)
         *
         * @param WP_User $user The WP_User object for the user being edited.
         */
        public function user_admin_profile_metaboxes($user = null, $args = array())
        {
            if (empty($user->ID)) {
                return;
            }
            $r = bp_parse_args($args['args'], array('profile_group_id' => 0, 'user_id' => $user->ID), 'bp_xprofile_user_admin_profile_loop_args');
            // We really need these args
            if (empty($r['profile_group_id']) || empty($r['user_id'])) {
                return;
            }
            if (bp_has_profile($r)) {
                while (bp_profile_groups()) {
                    bp_the_profile_group();
                    ?>
				<input type="hidden" name="field_ids[]" id="<?php 
                    echo esc_attr('field_ids_' . bp_get_the_profile_group_slug());
                    ?>
" value="<?php 
                    echo esc_attr(bp_get_the_profile_group_field_ids());
                    ?>
" />

				<?php 
                    if (bp_get_the_profile_group_description()) {
                        ?>
					<p class="description"><?php 
                        bp_the_profile_group_description();
                        ?>
</p>
				<?php 
                    }
                    while (bp_profile_fields()) {
                        bp_the_profile_field();
                        ?>

					<div<?php 
                        bp_field_css_class('bp-profile-field');
                        ?>
>
						<?php 
                        $field_type = bp_xprofile_create_field_type(bp_get_the_profile_field_type());
                        $field_type->edit_field_html(array('user_id' => $r['user_id']));
                        if (bp_get_the_profile_field_description()) {
                            ?>
							<p class="description"><?php 
                            bp_the_profile_field_description();
                            ?>
</p>
						<?php 
                        }
                        do_action('bp_custom_profile_edit_fields_pre_visibility');
                        $can_change_visibility = bp_current_user_can('bp_xprofile_change_field_visibility');
                        ?>

						<p class="field-visibility-settings-<?php 
                        echo $can_change_visibility ? 'toggle' : 'notoggle';
                        ?>
" id="field-visibility-settings-toggle-<?php 
                        bp_the_profile_field_id();
                        ?>
">
							<?php 
                        printf(__('This field can be seen by: <span class="%s">%s</span>', 'buddypress'), esc_attr('current-visibility-level'), bp_get_the_profile_field_visibility_level_label());
                        if ($can_change_visibility) {
                            ?>
								 <a href="#" class="button visibility-toggle-link"><?php 
                            _e('Change', 'buddypress');
                            ?>
</a>
							<?php 
                        }
                        ?>
						</p>

						<?php 
                        if ($can_change_visibility) {
                            ?>
							<div class="field-visibility-settings" id="field-visibility-settings-<?php 
                            bp_the_profile_field_id();
                            ?>
">
								<fieldset>
									<legend><?php 
                            _e('Who can see this field?', 'buddypress');
                            ?>
</legend>
									<?php 
                            bp_profile_visibility_radio_buttons();
                            ?>
								</fieldset>
								<a class="button field-visibility-settings-close" href="#"><?php 
                            _e('Close', 'buddypress');
                            ?>
</a>
							</div>
						<?php 
                        }
                        do_action('bp_custom_profile_edit_fields');
                        ?>
					</div>

				<?php 
                    }
                    // bp_profile_fields()
                }
                // bp_profile_groups()
            }
        }