post_type ) && $post->post_type == 'acf-field-group' ) {
acf_render_field_setting(
$field,
array(
'label' => __( 'Show On Frontend Only', 'frontend-admin' ),
'instructions' => __( 'Lets you hide the field on the backend to avoid duplicate fields.', 'frontend-admin' ),
'name' => 'only_front',
'type' => 'true_false',
'ui' => 1,
'conditions' => array(
array(
'field' => 'frontend_admin_display_mode',
'operator' => '!=',
'value' => 'hidden',
),
),
),
true
);
}
acf_render_field_setting( $field, array(
'label' => __('Display Mode', 'frontend-admin'),
'instructions' => __( 'Lets you show the editable field or display the value only. You may also hide the field, which is useful if you need to pass hidden data', 'frontend-admin' ),
'name' => 'frontend_admin_display_mode',
'type' => 'select',
'choices' => array(
'edit' => __( 'Edit', 'frontend-admin' ),
'read_only' => __( 'Read', 'frontend-admin' ),
'hidden' => __( 'Hidden', 'frontend-admin' ),
)
), true );
acf_render_field_setting(
$field,
array(
'label' => __( 'No Value Messge', 'frontend-admin' ),
'instructions' => __( 'Appears in shortcode when field returns no value. If left blank nothing will show.', 'frontend-admin' ),
'type' => 'textarea',
'name' => 'no_values_message',
'rows' => 3,
'conditions' => array(
array(
'field' => 'frontend_admin_display_mode',
'operator' => '==',
'value' => 'read_only',
),
),
),
true
);
$short_key = str_replace( 'field_', '', $field['key'] );
$icon_path = '';
acf_render_field_setting(
$field,
array(
'label' => __( 'Field Shortcode', 'frontend-admin' ),
'instructions' => '',
'message' => '[frontend_admin field=' . $short_key . ' edit=false]' . sprintf(
'',
$short_key,
$icon_path,
__( 'Copy Code', 'frontend-admin' )
),
'type' => 'message',
'name' => 'shortcode_message',
),
true
);
}
public function extra_field_group_setting( $group ) {
global $post;
$short_key = str_replace( 'group_', '', $group['key'] );
if( empty( $group['no_values_message'] ) ){
$group['no_values_message'] = '';
}
$icon_path = '';
acf_render_field_wrap(
array(
'label' => __( 'Group Shortcode', 'frontend-admin' ),
'instructions' => '',
'message' => '[frontend_admin group=' . $short_key . ' edit=false]' . sprintf(
'',
$short_key,
$icon_path,
__( 'Copy Code', 'frontend-admin' )
),
'type' => 'message',
'name' => 'shortcode_message',
),
'div',
'field'
);
acf_render_field_wrap(
array(
'label' => __( 'No Value Messge', 'frontend-admin' ),
'instructions' => __( 'Appears in shortcode when field returns no value. If left blank nothing will show. Each individual field has this setting as well and that will overwrite this.', 'frontend-admin' ),
'type' => 'textarea',
'name' => 'no_values_message',
'rows' => 3,
'prefix' => 'acf_field_group',
'value' => $group['no_values_message'],
),
'div',
'field'
);
}
public function hide_frontend_admin_fields( $groups ) {
global $post;
if ( isset( $post->post_type ) && $post->post_type == 'acf-field-group' ) {
unset( $groups[ __( 'Form', 'frontend-admin' ) ] );
unset( $groups[ __( 'Mailchimp', 'frontend-admin' ) ] );
}
unset( $groups['frontend-admin-hidden'] );
return $groups;
}
/**
* Update the dynamic value of a field.
*
* @param mixed $value The new value for the field.
* @param int $post_id The ID of the post to update the field for. Default is false.
* @param string $field The field to update. Default is false.
*/
public function update_dynamic_value( $value, $post_id = false, $field = false ) {
if ( empty( $field['default_value'] ) || ! is_string( $field['default_value'] ) ) {
return $value;
}
if ( ! $field['value'] && isset( $field['default_value'] ) && is_string( $field['default_value'] ) && strpos( $field['default_value'], '[' ) !== false ) {
$dynamic_value = fea_instance()->dynamic_values->get_dynamic_values( $field['default_value'] );
if ( $dynamic_value ) {
$value = $dynamic_value;
}
}
return $value;
}
public function exclude_groups( $field_group ) {
if ( empty( $field_group['frontend_admin_group'] ) ) {
return $field_group;
} elseif ( is_admin() ) {
if ( function_exists( 'get_current_screen' ) ) {
$current_screen = get_current_screen();
if ( isset( $current_screen->post_type ) && $current_screen->post_type == 'admin_form' ) {
return $field_group;
} else {
return null;
}
}
}
}
public function load_invisible_field( $field ) {
if ( empty( $field['invisible'] ) ) {
return $field;
}
$field['frontend_admin_display_mode'] = 'hidden';
unset( $field['invisible'] );
acf_update_field( $field );
return $field;
}
public function enqueue_scripts( $hook_suffix ) {
if ( $hook_suffix != 'frontend_admin_form' && ! current_user_can( 'manage_options' ) ) {
return;
}
acf_enqueue_scripts();
acf_localize_text(
array(
'Copy Code' => __( 'Copy Code', 'frontend-admin' ),
'Code Copied' => __( 'Code Copied', 'frontend-admin' ),
)
);
wp_enqueue_style( 'fea-modal' );
wp_enqueue_script( 'fea-public' );
wp_enqueue_script( 'fea-modal' );
wp_enqueue_style( 'dashicons' );
wp_enqueue_style( 'fea-icon' );
do_action( 'frontend_admin/forms/enqueue_scripts' );
}
public function feadata( $form = false ) {
global $wp_version, $fea_form, $fea_data;
if( $fea_data ) return;
$acf_pro = false;
if ( function_exists( 'acf_is_pro' ) ) {
$acf_pro = acf_is_pro();
}
acf_localize_data(
array(
'admin_url' => admin_url(),
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'acf_nonce' ),
'acf_version' => acf_get_setting( 'version' ),
'wp_version' => $wp_version,
'browser' => acf_get_browser(),
'locale' => acf_get_locale(),
'rtl' => is_rtl(),
'screen' => acf_get_form_data( 'screen' ),
'post_id' => acf_get_form_data( 'post_id' ),
'validation' => acf_get_form_data( 'validation' ),
'editor' => acf_is_block_editor() ? 'block' : 'classic',
//server upload size limit
'server_upload_size' => (int)ini_get("upload_max_filesize"),
'server_post_size' => (int)ini_get("post_max_size"),
'is_pro' => $acf_pro,
'mimeTypes' => get_allowed_mime_types(),
'mimeTypeIcon' => wp_mime_type_icon(),
)
);
//check if acf is null
echo '';
// Print inline script.
printf( "\n", 'acf.data = ' . wp_json_encode( acf_get_instance( 'ACF_Assets' )->data ) . ';' );
$fea_data = true;
}
public function prepare_field_display( $field ) {
if ( empty( $field['frontend_admin_display_mode'] ) && empty( $field['display_mode'] ) ) {
return $field;
}
$mode = $field['frontend_admin_display_mode'];
if ( $mode == 'hidden' ) {
if ( isset( $field['wrapper']['class'] ) ) {
$field['wrapper']['class'] .= ' frontend-admin-hidden';
} else {
$field['wrapper']['class'] = 'frontend-admin-hidden';
}
}
if ( $mode == 'read_only' ) {
$field['display_only'] = true;
}
return $field;
}
public function prepare_field_backend( $field ) {
// bail early if no 'admin_only' setting
if ( empty( $field['only_front'] ) ) {
return $field;
}
$render = true;
// return false if is admin (removes field)
if ( is_admin() && ! wp_doing_ajax() ) {
$render = false;
}
if ( ! $render ) {
return false;
}
// return\
return $field;
}
public function include_forms_as_groups( $groups ) {
if ( ! empty( $GLOBALS['only_acf_field_groups'] ) ) {
return $groups;
}
$forms = get_posts(
array(
'post_type' => 'admin_form',
'posts_per_page' => '-1',
'post_status' => 'publish',
)
);
foreach ( $forms as $form ) {
$field_group = (array) feadmin_maybe_unserialize( $form->post_content );
// update attributes
$field_group['ID'] = $form->ID;
$field_group['title'] = $form->post_title;
$field_group['key'] = $form->ID;
$field_group['menu_order'] = $form->menu_order;
$field_group['active'] = in_array( $form->post_status, array( 'publish', 'auto-draft' ) );
$field_group['location'] = array(
array(
array(
'param' => '',
'operator' => '',
'value' => '',
),
),
);
acf_add_local_field_group( $field_group );
}
return $groups;
}
/*
* register_field_type
*
* This function will register a field type instance
*
* @type function
* @date 6/07/2016
* @since 5.4.0
*
* @param $class (string)
* @return n/a
*/
function register_field_type( $field, $acf_support = false ) {
$field = str_replace( '-', '_', $field );
if( ! class_exists( 'Frontend_Admin\Field_Types\\' . $field ) ) return;
$class = 'Frontend_Admin\Field_Types\\' . $field;
$instance = new $class();
$this->field_types[ $field ] = $instance;
}
public function include_field_types() {
global $fea_field_types;
$fea_field_types = $this->get_field_types();
if ( ! empty( $fea_field_types ) ) {
foreach ( $fea_field_types as $group => $fields ) {
$path = "fields/$group/";
if( isset( $fields['path'] ) ){
if( ! empty( $fields['groups'] ) ){
foreach( $fields['groups'] as $name => $group_fields ){
$path = $fields['path'] . $name . '/';
foreach ( $group_fields as $field ) {
$file = $path . "class-$field.php";
include_once $file;
$this->register_field_type( $field, true );
}
}
}
}else{
foreach ( $fields as $field ) {
$file = $path . "class-$field.php";
include_once $file;
$this->register_field_type( $field, true );
}
}
}
}
do_action( 'frontend_admin/forms/field_types' );
}
public function find_field_type_group( $type ) {
if ( empty( $type ) ) {
return 'general';
}
$type = str_replace( '_', '-', $type );
global $fea_field_types;
if ( ! empty( $fea_field_types ) ) {
foreach ( $fea_field_types as $group => $fields ) {
if( isset( $fields['groups'] ) ){
foreach( $fields['groups'] as $group => $group_fields ){
if( in_array( $type, $group_fields ) ){
return $group;
}
}
}
if ( in_array( $type, $fields ) ) {
return $group;
}
}
}
return 'general';
}
public function load_acf_scripts() {
global $fea_scripts;
if ( ! is_admin() && $fea_scripts ) {
if ( empty( $fea_scripts_loaded ) ) {
$this->enqueue_scripts( 'frontend_admin_form' );
$this->feadata( true );
}
}
wp_enqueue_style( 'fea-public' );
}
public function hide_field_name_setting() {
global $post;
if ( empty( $post->post_type ) ) {
return;
}
if ( 'acf-field-group' == $post->post_type || 'admin_form' == $post->post_type ) {
wp_enqueue_script( 'fea-copy-code' );
global $fea_field_types;
if( ! empty( $fea_field_types ) ){
echo '';
}
}
}
public function get_field_types() {
include_once 'walkers/related-terms-walker.php';
$field_types = array(
'general' => array(
'field-base',
'text',
'textarea',
'text-editor',
'upload-file',
'upload-image',
'upload-files',
'radio',
'checkbox',
'email',
'link',
'number',
'range',
'password',
'datetime-input',
'true-false',
'delete-object',
'select',
'url',
'related-items',
'submit-button',
'save-progress',
'preview-button',
'time',
'date',
'color',
'related-terms',
'plans',
'custom-terms',
'list-items',
'recaptcha',
),
'post' => array(
'post-to-edit',
'post-title',
'post-content',
'post-excerpt',
'post-slug',
'post-status',
'featured-image',
'post-type',
'post-date',
'post-author',
'menu-order',
'allow-comments',
'delete-post',
),
'user' => array(
'user-to-edit',
'username',
'user-email',
'user-password',
'user-password-confirm',
'first-name',
'last-name',
'nickname',
'display-name',
'user-url',
'user-bio',
'role',
'delete-user',
),
'term' => array(
'term-name',
'term-slug',
'term-description',
'delete-term',
),
);
if ( class_exists( 'ACF' ) ){
$field_types['general'][] = 'fields-select';
}
$field_types = apply_filters( 'frontend_admin/field_types', $field_types );
return $field_types;
}
public function echo_after_input( $field ) {
if ( ! empty( $field['after_input'] ) ) {
echo wp_kses_post( $field['after_input'] );
}
}
public function get_field( $key ){
global $fea_form;
if( ! empty( $fea_form['fields'][$key] ) ) return $fea_form['fields'][$key];
if( function_exists( 'acf_maybe_get_field' ) ){
$field = acf_maybe_get_field( $key );
if( $field ) return $field;
}
$field = apply_filters( 'frontend_admin/fields/get_field', $field, $key );
if( is_array( $field ) ){
$field['key'] = $key;
return $field;
}
return false;
}
public function pre_update_value( $checked, $value, $post_id = false, $field = false ){
if( empty( $field['type'] ) ) return $checked;
$type = $field['type'];
return apply_filters( 'acf/pre_update_value/type=' . $type, $checked, $value, $post_id, $field );
}
public function __construct() {
$this->include_field_types();
// add_filter( 'acf/load_field_groups', array( $this, 'include_forms_as_groups' ), 5 );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
add_action( 'wp_footer', array( $this, 'load_acf_scripts' ) );
add_action( 'admin_footer', array( $this, 'load_acf_scripts' ) );
add_action( 'admin_footer', array( $this, 'hide_field_name_setting' ) );
add_filter( 'acf/prepare_field', array( $this, 'prepare_field_display' ), 3 );
add_filter( 'acf/prepare_field', array( $this, 'prepare_field_backend' ), 3 );
add_action( 'acf/render_field', array( $this, 'echo_after_input' ) );
// Add field settings by type
add_action( 'acf/render_field_settings', array( $this, 'extra_field_setting' ), 15 );
add_action( 'acf/render_field_group_settings', array( $this, 'extra_field_group_setting' ), 15 );
add_filter( 'acf/get_field_types', array( $this, 'hide_frontend_admin_fields' ) );
add_filter( 'acf/update_value', array( $this, 'update_dynamic_value' ), 17, 3 );
add_filter( 'acf/pre_update_value', array( $this, 'pre_update_value' ), 10, 4 );
add_filter( 'acf/load_field_group', array( $this, 'exclude_groups' ) );
add_filter( 'acf/load_field', array( $this, 'load_invisible_field' ) );
include_once __DIR__ . '/forms/classes/submit.php';
include_once __DIR__ . '/forms/classes/display.php';
include_once __DIR__ . '/forms/classes/validation.php';
include_once __DIR__ . '/forms/classes/limit-submit.php';
include_once __DIR__ . '/forms/classes/permissions.php';
include_once __DIR__ . '/forms/classes/preview.php';
include_once __DIR__ . '/forms/classes/shortcodes.php';
include_once __DIR__ . '/forms/actions/action-base.php';
// actions
include_once __DIR__ . '/forms/actions/user.php';
include_once __DIR__ . '/forms/actions/post.php';
include_once __DIR__ . '/forms/actions/term.php';
include_once __DIR__ . '/forms/actions/options.php';
// require_once( __DIR__ . '/forms/actions/comment.php' );
do_action( 'frontend_admin/forms/included_files' );
}
}
fea_instance()->frontend = new Forms();
endif;