示例#1
0
/**
 * Function that creates the Manage Fields submenu and populates it with a repeater field form
 *
 * @since v.2.0
 *
 * @return void
 */
function wppb_manage_fields_submenu()
{
    // create a new sub_menu page which holds the data for the default + extra fields
    $args = array('menu_title' => __('Manage Fields', 'profile-builder'), 'page_title' => __('Manage Default and Extra Fields', 'profile-builder'), 'menu_slug' => 'manage-fields', 'page_type' => 'submenu_page', 'capability' => 'manage_options', 'priority' => 5, 'parent_slug' => 'profile-builder');
    $all_fields = new WCK_Page_Creator_PB($args);
    // populate this page
    $manage_field_types[] = 'Default - Name (Heading)';
    $manage_field_types[] = 'Default - Contact Info (Heading)';
    $manage_field_types[] = 'Default - About Yourself (Heading)';
    $manage_field_types[] = 'Default - Username';
    $manage_field_types[] = 'Default - First Name';
    $manage_field_types[] = 'Default - Last Name';
    $manage_field_types[] = 'Default - Nickname';
    $manage_field_types[] = 'Default - E-mail';
    $manage_field_types[] = 'Default - Website';
    // Default contact methods were removed in WP 3.6. A filter dictates contact methods.
    if (apply_filters('wppb_remove_default_contact_methods', get_site_option('initial_db_version') < 23588)) {
        $manage_field_types[] = 'Default - AIM';
        $manage_field_types[] = 'Default - Yahoo IM';
        $manage_field_types[] = 'Default - Jabber / Google Talk';
    }
    $manage_field_types[] = 'Default - Password';
    $manage_field_types[] = 'Default - Repeat Password';
    $manage_field_types[] = 'Default - Biographical Info';
    $manage_field_types[] = 'Default - Display name publicly as';
    if (PROFILE_BUILDER != 'Profile Builder Free') {
        $manage_field_types[] = 'Heading';
        $manage_field_types[] = 'Input';
        $manage_field_types[] = 'Input (Hidden)';
        $manage_field_types[] = 'Textarea';
        $manage_field_types[] = 'WYSIWYG';
        $manage_field_types[] = 'Phone';
        $manage_field_types[] = 'Select';
        $manage_field_types[] = 'Select (Multiple)';
        $manage_field_types[] = 'Select (Country)';
        $manage_field_types[] = 'Select (Timezone)';
        $manage_field_types[] = 'Select (User Role)';
        $manage_field_types[] = 'Select (Currency)';
        $manage_field_types[] = 'Checkbox';
        $manage_field_types[] = 'Checkbox (Terms and Conditions)';
        $manage_field_types[] = 'Radio';
        $manage_field_types[] = 'Upload';
        $manage_field_types[] = 'Avatar';
        $manage_field_types[] = 'Datepicker';
        $manage_field_types[] = 'Timepicker';
        $manage_field_types[] = 'Colorpicker';
        $manage_field_types[] = 'reCAPTCHA';
        $manage_field_types[] = 'Validation';
        $manage_field_types[] = 'Map';
        $manage_field_types[] = 'HTML';
    }
    //Free to Pro call to action on Manage Fields page
    $field_description = __('Choose one of the supported field types', 'profile-builder');
    if (PROFILE_BUILDER == 'Profile Builder Free') {
        $field_description .= sprintf(__('. Extra Field Types are available in <a href="%s">Hobbyist or PRO versions</a>.', 'profile-builder'), esc_url('https://www.cozmoslabs.com/wordpress-profile-builder/?utm_source=wpbackend&utm_medium=clientsite&utm_content=manage-fields-link&utm_campaign=PBFree'));
    }
    //user roles
    global $wp_roles;
    $user_roles = array();
    foreach ($wp_roles->roles as $user_role_slug => $user_role) {
        if ($user_role_slug !== 'administrator') {
            array_push($user_roles, '%' . $user_role['name'] . '%' . $user_role_slug);
        }
    }
    // country select
    $default_country_array = wppb_country_select_options('back_end');
    foreach ($default_country_array as $iso_country_code => $country_name) {
        $default_country_values[] = $iso_country_code;
        $default_country_options[] = $country_name;
    }
    // currency select
    $default_currency_array = wppb_get_currencies('back_end');
    array_unshift($default_currency_array, '');
    foreach ($default_currency_array as $iso_currency_code => $currency_name) {
        $default_currency_values[] = $iso_currency_code;
        $default_currency_options[] = $currency_name;
    }
    // set up the fields array
    $fields = apply_filters('wppb_manage_fields', array(array('type' => 'text', 'slug' => 'field-title', 'title' => __('Field Title', 'profile-builder'), 'description' => __('Title of the field', 'profile-builder')), array('type' => 'select', 'slug' => 'field', 'title' => __('Field', 'profile-builder'), 'options' => apply_filters('wppb_manage_fields_types', $manage_field_types), 'default-option' => true, 'description' => $field_description), array('type' => 'text', 'slug' => 'meta-name', 'title' => __('Meta-name', 'profile-builder'), 'default' => wppb_get_meta_name(), 'description' => __('Use this in conjuction with WordPress functions to display the value in the page of your choosing<br/>Auto-completed but in some cases editable (in which case it must be uniqe)<br/>Changing this might take long in case of a very big user-count', 'profile-builder')), array('type' => 'text', 'slug' => 'id', 'title' => __('ID', 'profile-builder'), 'default' => wppb_get_unique_id(), 'description' => __("A unique, auto-generated ID for this particular field<br/>You can use this in conjuction with filters to target this element if needed<br/>Can't be edited", 'profile-builder'), 'readonly' => true), array('type' => 'textarea', 'slug' => 'description', 'title' => __('Description', 'profile-builder'), 'description' => __('Enter a (detailed) description of the option for end users to read<br/>Optional', 'profile-builder')), array('type' => 'text', 'slug' => 'row-count', 'title' => __('Row Count', 'profile-builder'), 'default' => 5, 'description' => __("Specify the number of rows for a 'Textarea' field<br/>If not specified, defaults to 5", 'profile-builder')), array('type' => 'text', 'slug' => 'allowed-image-extensions', 'title' => __('Allowed Image Extensions', 'profile-builder'), 'default' => '.*', 'description' => __('Specify the extension(s) you want to limit to upload<br/>Example: .ext1,.ext2,.ext3<br/>If not specified, defaults to: .jpg,.jpeg,.gif,.png (.*)', 'profile-builder')), array('type' => 'text', 'slug' => 'allowed-upload-extensions', 'title' => __('Allowed Upload Extensions', 'profile-builder'), 'default' => '.*', 'description' => __('Specify the extension(s) you want to limit to upload<br/>Example: .ext1,.ext2,.ext3<br/>If not specified, defaults to all WordPress allowed file extensions (.*)', 'profile-builder')), array('type' => 'text', 'slug' => 'avatar-size', 'title' => __('Avatar Size', 'profile-builder'), 'default' => 100, 'description' => __("Enter a value (between 20 and 200) for the size of the 'Avatar'<br/>If not specified, defaults to 100", 'profile-builder')), array('type' => 'text', 'slug' => 'date-format', 'title' => __('Date-format', 'profile-builder'), 'default' => 'mm/dd/yy', 'description' => __('Specify the format of the date when using Datepicker<br/>Valid options: mm/dd/yy, mm/yy/dd, dd/yy/mm, dd/mm/yy, yy/dd/mm, yy/mm/dd<br/>If not specified, defaults to mm/dd/yy', 'profile-builder')), array('type' => 'textarea', 'slug' => 'terms-of-agreement', 'title' => __('Terms of Agreement', 'profile-builder'), 'description' => __('Enter a detailed description of the temrs of agreement for the user to read.<br/>Links can be inserted by using standard HTML syntax: &lt;a href="custom_url"&gt;custom_text&lt;/a&gt;', 'profile-builder')), array('type' => 'text', 'slug' => 'options', 'title' => __('Options', 'profile-builder'), 'description' => __("Enter a comma separated list of values<br/>This can be anything, as it is hidden from the user, but should not contain special characters or apostrophes", 'profile-builder')), array('type' => 'text', 'slug' => 'labels', 'title' => __('Labels', 'profile-builder'), 'description' => __("Enter a comma separated list of labels<br/>Visible for the user", 'profile-builder')), array('type' => 'text', 'slug' => 'public-key', 'title' => __('Site Key', 'profile-builder'), 'description' => __('The site key from Google, <a href="http://www.google.com/recaptcha" target="_blank">www.google.com/recaptcha</a>', 'profile-builder')), array('type' => 'text', 'slug' => 'private-key', 'title' => __('Secret Key', 'profile-builder'), 'description' => __('The secret key from Google, <a href="http://www.google.com/recaptcha" target="_blank">www.google.com/recaptcha</a>', 'profile-builder')), array('type' => 'checkbox', 'slug' => 'captcha-pb-forms', 'title' => __('Display on PB forms', 'profile-builder'), 'options' => array('%' . __('PB Login', 'profile-builder') . '%' . 'pb_login', '%' . __('PB Register', 'profile-builder') . '%' . 'pb_register', '%' . __('PB Recover Password', 'profile-builder') . '%' . 'pb_recover_password'), 'default' => 'pb_register', 'description' => __("Select on which Profile Builder forms to display reCAPTCHA", 'profile-builder')), array('type' => 'checkbox', 'slug' => 'captcha-wp-forms', 'title' => __('Display on default WP forms', 'profile-builder'), 'options' => array('%' . __('Default WP Login', 'profile-builder') . '%' . 'default_wp_login', '%' . __('Default WP Register', 'profile-builder') . '%' . 'default_wp_register', '%' . __('Default WP Recover Password', 'profile-builder') . '%' . 'default_wp_recover_password'), 'default' => 'default_wp_register', 'description' => __("Select on which default WP forms to display reCAPTCHA", 'profile-builder')), array('type' => 'checkbox', 'slug' => 'user-roles', 'title' => __('User Roles', 'profile-builder'), 'options' => $user_roles, 'description' => __("Select which user roles to show to the user ( drag and drop to re-order )", 'profile-builder')), array('type' => 'text', 'slug' => 'user-roles-sort-order', 'title' => __('User Roles Order', 'profile-builder'), 'description' => __("Save the user role order from the user roles checkboxes", 'profile-builder')), array('type' => 'text', 'slug' => 'default-value', 'title' => __('Default Value', 'profile-builder'), 'description' => __("Default value of the field", 'profile-builder')), array('type' => 'text', 'slug' => 'default-option', 'title' => __('Default Option', 'profile-builder'), 'description' => __("Specify the option which should be selected by default", 'profile-builder')), array('type' => 'text', 'slug' => 'default-options', 'title' => __('Default Option(s)', 'profile-builder'), 'description' => __("Specify the option which should be checked by default<br/>If there are multiple values, separate them with a ',' (comma)", 'profile-builder')), array('type' => 'select', 'slug' => 'default-option-country', 'title' => __('Default Option', 'profile-builder'), 'values' => isset($default_country_values) ? $default_country_values : '', 'options' => isset($default_country_options) ? $default_country_options : '', 'description' => __("Default option of the field", 'profile-builder')), array('type' => 'select', 'slug' => 'default-option-timezone', 'title' => __('Default Option', 'profile-builder'), 'options' => wppb_timezone_select_options('back_end'), 'description' => __("Default option of the field", 'profile-builder')), array('type' => 'select', 'slug' => 'default-option-currency', 'title' => __('Default Option', 'profile-builder'), 'values' => isset($default_currency_values) ? $default_currency_values : '', 'options' => isset($default_currency_options) ? $default_currency_options : '', 'description' => __("Default option of the field", 'profile-builder')), array('type' => 'select', 'slug' => 'show-currency-symbol', 'title' => __('Show Currency Symbol', 'profile-builder'), 'options' => array('No', 'Yes'), 'default' => 'No', 'description' => __('Whether the currency symbol should be displayed after the currency name in the select option.', 'profile-builder')), array('type' => 'text', 'slug' => 'validation-possible-values', 'title' => __('Allowable Values', 'profile-builder'), 'description' => __("Enter a comma separated list of possible values. Upon registration if the value provided by the user does not match one of these values, the user will not be registered.", 'profile-builder')), array('type' => 'text', 'slug' => 'custom-error-message', 'title' => __('Error Message', 'profile-builder'), 'description' => __("Set a custom error message that will be displayed to the user.", 'profile-builder')), array('type' => 'select', 'slug' => 'time-format', 'title' => __('Time Format', 'profile-builder'), 'options' => array('%12 Hours%12', '%24 Hours%24'), 'description' => __('Specify the time format.', 'profile-builder')), array('type' => 'text', 'slug' => 'map-api-key', 'title' => __('Google Maps API Key', 'profile-builder'), 'description' => __('Enter your Google Maps API key ( <a href="https://console.developers.google.com/flows/enableapi?apiid=maps_backend" target="_blank">Get your API key</a> ). If more than one map fields are added to a form the API key from the first map displayed will be used.', 'profile-builder')), array('type' => 'text', 'slug' => 'map-default-lat', 'title' => __('Default Latitude', 'profile-builder'), 'description' => __("The latitude at which the map should be displayed when no pins are attached.", 'profile-builder')), array('type' => 'text', 'slug' => 'map-default-lng', 'title' => __('Default Longitude', 'profile-builder'), 'description' => __("The longitude at which the map should be displayed when no pins are attached.", 'profile-builder')), array('type' => 'text', 'slug' => 'map-default-zoom', 'title' => __('Default Zoom Level', 'profile-builder'), 'description' => __("Add a number from 0 to 19. The higher the number the higher the zoom.", 'profile-builder'), 'default' => 16), array('type' => 'text', 'slug' => 'map-height', 'title' => __('Map Height', 'profile-builder'), 'description' => __("The height of the map.", 'profile-builder'), 'default' => 400), array('type' => 'textarea', 'slug' => 'default-content', 'title' => __('Default Content', 'profile-builder'), 'description' => __("Default value of the textarea", 'profile-builder')), array('type' => 'textarea', 'slug' => 'html-content', 'title' => __('HTML Content', 'profile-builder'), 'description' => __("Add your HTML (or text) content", 'profile-builder')), array('type' => 'text', 'slug' => 'phone-format', 'title' => __('Phone Format', 'profile-builder'), 'default' => '(###) ###-####', 'description' => __("You can use: # for numbers, parentheses ( ), - sign, + sign, dot . and spaces.", 'profile-builder') . '<br>' . __("Eg. (###) ###-####", 'profile-builder') . '<br>' . __("Empty field won't check for correct phone number.", 'profile-builder')), array('type' => 'select', 'slug' => 'required', 'title' => __('Required', 'profile-builder'), 'options' => array('No', 'Yes'), 'default' => 'No', 'description' => __('Whether the field is required or not', 'profile-builder')), array('type' => 'select', 'slug' => 'overwrite-existing', 'title' => __('Overwrite Existing', 'profile-builder'), 'options' => array('No', 'Yes'), 'default' => 'No', 'description' => __("Selecting 'Yes' will add the field to the list, but will overwrite any other field in the database that has the same meta-name<br/>Use this at your own risk", 'profile-builder'))));
    // create the new submenu with the above options
    $args = array('metabox_id' => 'manage-fields', 'metabox_title' => __('Field Properties', 'profile-builder'), 'post_type' => 'manage-fields', 'meta_name' => 'wppb_manage_fields', 'meta_array' => $fields, 'context' => 'option');
    new Wordpress_Creation_Kit_PB($args);
    wppb_prepopulate_fields();
    // create the info side meta-box
    $args = array('metabox_id' => 'manage-fields-info', 'metabox_title' => __('Registration & Edit Profile', 'profile-builder'), 'post_type' => 'manage-fields', 'meta_name' => 'wppb_manage_fields_info', 'meta_array' => '', 'context' => 'option', 'mb_context' => 'side');
    new Wordpress_Creation_Kit_PB($args);
}
示例#2
0
function wppb_currency_select_handler($output, $form_location, $field, $user_id, $field_check_errors, $request_data)
{
    if ($field['field'] == 'Select (Currency)') {
        $item_title = apply_filters('wppb_' . $form_location . '_currency_select_custom_field_' . $field['id'] . '_item_title', wppb_icl_t('plugin profile-builder-pro', 'custom_field_' . $field['id'] . '_title_translation', $field['field-title']));
        $item_description = wppb_icl_t('plugin profile-builder-pro', 'custom_field_' . $field['id'] . '_description_translation', $field['description']);
        $currencies = wppb_get_currencies($form_location);
        array_unshift($currencies, '');
        $extra_attr = apply_filters('wppb_extra_attribute', '', $field);
        if ($form_location != 'register') {
            $input_value = wppb_user_meta_exists($user_id, $field['meta-name']) != null ? stripslashes(get_user_meta($user_id, $field['meta-name'], true)) : $field['default-option-currency'];
        } else {
            $input_value = !empty($field['default-option-currency']) ? trim($field['default-option-currency']) : '';
        }
        $input_value = isset($request_data[wppb_handle_meta_name($field['meta-name'])]) ? trim($request_data[wppb_handle_meta_name($field['meta-name'])]) : $input_value;
        if ($form_location != 'back_end') {
            $error_mark = $field['required'] == 'Yes' ? '<span class="wppb-required" title="' . wppb_required_field_error($field["field-title"]) . '">*</span>' : '';
            if (array_key_exists($field['id'], $field_check_errors)) {
                $error_mark = '<img src="' . WPPB_PLUGIN_URL . 'assets/images/pencil_delete.png" title="' . wppb_required_field_error($field["field-title"]) . '"/>';
            }
            $output = '
				<label for="' . $field['meta-name'] . '">' . $item_title . $error_mark . '</label>
				<select name="' . $field['meta-name'] . '" id="' . $field['meta-name'] . '" class="custom_field_currency_select ' . apply_filters('wppb_fields_extra_css_class', '', $field) . '" ' . $extra_attr . '>';
            $extra_select_option = apply_filters('wppb_extra_select_option', '', $field, $item_title);
            if (!empty($extra_select_option)) {
                $output .= $extra_select_option;
                $currencies = array_filter($currencies);
            }
            // Check to see if the currency symbol should be displayed or not
            $show_currency_symbol = !empty($field['show-currency-symbol']) && $field['show-currency-symbol'] == 'Yes' ? true : false;
            foreach ($currencies as $iso => $currency_name) {
                $output .= '<option value="' . (empty($iso) ? '' : $iso) . '"';
                if ($input_value === $iso) {
                    $output .= ' selected';
                }
                if ($show_currency_symbol) {
                    $currency_symbol = wppb_get_currency_symbol($iso);
                }
                $currency_name = !empty($currency_symbol) ? $currency_name . ' (' . $currency_symbol . ')' : $currency_name;
                $output .= '>' . $currency_name . '</option>';
            }
            $output .= '
				</select>';
            if (!empty($item_description)) {
                $output .= '<span class="wppb-description-delimiter">' . $item_description . '</span>';
            }
        } else {
            $output = '
				<table class="form-table">
					<tr>
						<th><label for="' . $field['meta-name'] . '">' . $item_title . '</label></th>
						<td>
							<select name="' . $field['meta-name'] . '" class="custom_field_currency_select" id="' . $field['meta-name'] . '" ' . $extra_attr . '>';
            // Check to see if the currency symbol should be displayed or not
            $show_currency_symbol = !empty($field['show-currency-symbol']) && $field['show-currency-symbol'] == 'Yes' ? true : false;
            foreach ($currencies as $iso => $currency_name) {
                $output .= '<option value="' . $iso . '"';
                if ($input_value === $iso) {
                    $output .= ' selected';
                }
                if ($show_currency_symbol) {
                    $currency_symbol = wppb_get_currency_symbol($iso);
                }
                $currency_name = !empty($currency_symbol) ? $currency_name . ' (' . $currency_symbol . ')' : $currency_name;
                $output .= '>' . $currency_name . '</option>';
            }
            $output .= '</select>
							<span class="description">' . $item_description . '</span>
						</td>
					</tr>
				</table>';
        }
        return apply_filters('wppb_' . $form_location . '_currency_select_custom_field_' . $field['id'], $output, $form_location, $field, $user_id, $field_check_errors, $request_data, $input_value);
    }
}