Skip to content

Commit

Permalink
Introduce form page availability
Browse files Browse the repository at this point in the history
Make form pages available globally in the plugin's settings and/or on a
per-form basis in the form's settings.
  • Loading branch information
lmoffereins committed Jul 16, 2018
1 parent 724784c commit 677b6d6
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 4 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -10,7 +10,7 @@ Do you find yourself regularly creating pages just to paste in a Gravity Forms s

A form archive page is generated which lists the available forms on your site. Additionally each form gets a unique url to navigate to, where the form is presented as if it were its own page. There's no need for shortcodes anymore when you just want to present a form in its own right.

Availability of a single form page honors form settings like inactive status, required user login and time schedule restrictions.
Availability of forms as pages can be set globally and on a per-form basis. When made available, form settings like inactive status, required user login and time schedule restrictions are respected before the form is displayed.

When desired, you can disable the form archive listing in the plugin's settings. Customize plugin settings in the "Pages" tab in Gravity Forms's Settings admin page.

Expand Down
43 changes: 42 additions & 1 deletion includes/functions.php
Expand Up @@ -218,6 +218,20 @@ function gf_pages_hide_closed_forms( $default = false ) {
return (bool) apply_filters( 'gf_pages_hide_closed_forms', get_option( '_gf_pages_hide_closed_forms', $default ) );
}

/**
* Return whether forms are available by default
*
* @since 1.0.0
*
* @uses apply_filters() Calls 'gf_pages_default_availability'
*
* @param bool $default Optional. Default value
* @return bool Default availability
*/
function gf_pages_default_availability( $default = true ) {
return (bool) apply_filters( 'gf_pages_default_availability', get_option( '_gf_pages_default_availability', $default ) );
}

/**
* Return whether to force form ajax
*
Expand Down Expand Up @@ -429,6 +443,29 @@ function gf_pages_sanitize_form( $form ) {
return apply_filters( 'gf_pages_sanitize_form', $form );
}

/**
* Return wether the form page is available
*
* @since 1.0.0
*
* @uses apply_filters() Calls 'gf_pages_is_form_page_available'
*
* @param object|int $form Optional. Form data or ID. Defaults to the current form.
* @return bool Is form page available?
*/
function gf_pages_is_form_page_available( $form ) {

// Get form
$form = gf_pages_get_form( $form );
$retval = gf_pages_default_availability();

if ( $form && isset( $form->gf_pages_page_availability ) ) {
$retval = (bool) $form->gf_pages_page_availability;
}

return (bool) apply_filters( 'gf_pages_is_form_page_available', $retval, $form );
}

/**
* Return whether to hide the form
*
Expand All @@ -447,8 +484,12 @@ function gf_pages_hide_form( $form = '' ) {

if ( $form ) {

// Hide unavailable forms
if ( ! gf_pages_is_form_page_available( $form ) ) {
$retval = true;

// Hide inactive forms
if ( gf_pages_is_form_inactive( $form ) ) {
} elseif ( gf_pages_is_form_inactive( $form ) ) {
$retval = true;

// Hide not open forms
Expand Down
70 changes: 69 additions & 1 deletion includes/settings.php
Expand Up @@ -116,6 +116,14 @@ function gf_pages_admin_get_settings_fields() {
// Additional
'gf_pages_settings_additional' => array(

// Default availability
'_gf_pages_default_availability' => array(
'title' => esc_html__( 'Default Availability', 'gravityforms-pages' ),
'callback' => 'gf_pages_admin_setting_callback_default_availability',
'sanitize_callback' => 'intval',
'args' => array()
),

// Force ajax
'_gf_pages_force_ajax' => array(
'title' => esc_html__( 'Force Ajax Forms', 'gravityforms-pages' ),
Expand Down Expand Up @@ -272,6 +280,28 @@ function gf_pages_admin_setting_callback_additional_section() { ?>
<?php
}

/**
* Output the default availability setting field
*
* @since 1.0.0
*/
function gf_pages_admin_setting_callback_default_availability() {
$selected = get_option( '_gf_pages_default_availability', true );

ob_start(); ?>

<select id="_gf_pages_default_availability" name="_gf_pages_default_availability">
<option value="1" <?php selected( $selected, 1 ); ?>><?php esc_html_e( 'available', 'gravityforms-pages' ); ?></option>
<option value="0" <?php selected( $selected, 0 ); ?>><?php esc_html_e( 'unavailable', 'gravityforms-pages' ); ?></option>
</select>

<?php $availability = ob_get_clean(); ?>

<label for="_gf_pages_default_availability"><?php printf( esc_html__( 'Forms are by default %s as a page. Availability can also be set on a per-form basis. When made available, form settings like inactive status, required user login and time schedule restrictions are respected before the form is displayed.', 'gravityforms-pages' ), $availability ); ?></label>

<?php
}

/**
* Output the force ajax setting field
*
Expand All @@ -296,5 +326,43 @@ function gf_pages_admin_setting_callback_force_ajax() { ?>
* @return array Form settings fields
*/
function gf_pages_admin_get_form_settings_fields() {
return (array) apply_filters( 'gf_pages_admin_get_form_settings_fields', array() );
return (array) apply_filters( 'gf_pages_admin_get_form_settings_fields', array(

// Page Availability
'gf_pages_page_availability' => array(
'title' => esc_html__( 'Page Availability', 'gravityforms-pages' ),
'tooltip' => esc_html__( 'Customize whether this form is available as a page within your site. When made available, other form settings like inactive status, required user login or time schedule restrictions are respected before the form is displayed.', 'gravityforms-pages' ),
'section' => 'Restrictions',
'callback' => 'gf_pages_admin_form_setting_callback_page_availability',
'sanitize_callback' => 'intval',
)
) );
}

/**
* Display the form availabiltity form settings field
*
* @since 1.0.0
*
* @param array $form Form data
*/
function gf_pages_admin_form_setting_callback_page_availability( $form ) {

// Get form setting, default to global setting
$selected = isset( $form['gf_pages_page_availability'] )
? (bool) $form['gf_pages_page_availability']
: gf_pages_default_availability();

ob_start(); ?>

<select id="gf_pages_page_availability" name="gf_pages_page_availability">
<option value="1" <?php selected( $selected, true ); ?>><?php esc_html_e( 'available', 'gravityforms-pages' ); ?></option>
<option value="0" <?php selected( $selected, false ); ?>><?php esc_html_e( 'unavailable', 'gravityforms-pages' ); ?></option>
</select>

<?php $availability = ob_get_clean(); ?>

<label for="gf_pages_page_availability"><?php printf( esc_html__( 'Make this form %s as a page.', 'gravityforms-pages' ), $availability ); ?></label>

<?php
}
2 changes: 1 addition & 1 deletion readme.txt
Expand Up @@ -15,7 +15,7 @@ Do you find yourself regularly creating pages just to paste in a Gravity Forms s

A form archive page is generated which lists the available forms on your site. Additionally each form gets a unique url to navigate to, where the form is presented as if it were its own page. There's no need for shortcodes anymore when you just want to present a form in its own right.

Availability of a single form page honors form settings like inactive status, required user login and time schedule restrictions.
Availability of forms as pages can be set globally and on a per-form basis. When made available, form settings like inactive status, required user login and time schedule restrictions are respected before the form is displayed.

When desired, you can disable the form archive listing in the plugin's settings. Customize plugin settings in the "Pages" tab in Gravity Forms's Settings admin page.

Expand Down

0 comments on commit 677b6d6

Please sign in to comment.