Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Gravity Wiz // Gravity Forms // Daily Form Schedule
<?php
/**
* Gravity Wiz // Gravity Forms // Daily Form Schedule
*
* Allow your form schedule to apply daily.
*
* @version 1.3
* @author David Smith <david@gravitywiz.com>
* @license GPL-2.0+
* @link http://gravitywiz.com/
*
* Plugin Name: Gravity Forms Daily Form Schedule
* Plugin URI: http://gravitywiz.com/
* Description: Allow your form schedule to apply daily.
* Author: Gravity Wiz
* Version: 1.3
* Author URI: http://gravitywiz.com/
*
* Usage:
*
* 1. Install and activate.
* 2. Set your form schedule via Form Settings › Restrictions › Schedule form.
* a. Specify your desired daily start and end times via the Start and End Time settings.
* b. Leave the Start and End Date inputs EMPTY!
*
* Want to make your schedule weekly?
*
* 1. Follow the steps above.
* 2. Specify the day of the week your schedule starts and ends with it's numeric equivalent.
* a. Sunday = 0
* Monday = 1
* Tuesday = 2
* Wednesday = 3
* Thursday = 4
* Friday = 5
* Saturday = 6
* b. Enter the applicable day of the week number into the Start and End Date inputs respectively.
*
* That's it. This super simple plugin will automatically ensure that your schedule will apply daily (or weekly). 🙂
*/
add_filter( 'gform_pre_render', 'gw_daily_form_schedule' );
add_filter( 'gform_pre_validation', 'gw_daily_form_schedule' );
function gw_daily_form_schedule( $form ) {
$days = array( 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday' );
if( rgar( $form, 'scheduleForm' ) ) {
$time = current_time( 'timestamp' );
$is_interweek = false;
if( ! $form['scheduleStart'] || $form['scheduleStart'] <= 6 ) {
if ( ! rgblank( $form['scheduleStart'] ) && $form['scheduleStart'] <= 6 ) {
$is_interweek = $form['scheduleStart'] > $form['scheduleEnd'];
$week_phrase = (int) $form['scheduleStart'] === 0 || $is_interweek ? 'last week' : 'this week';
// Sunday last week, Monday this week.
$time = strtotime( "{$days[ $form['scheduleStart'] ]} {$week_phrase}", $time );
}
$form['scheduleStart'] = date( 'm/d/Y', $time );
}
if( ! $form['scheduleEnd'] || $form['scheduleEnd'] <= 6 ) {
if ( ! rgblank( $form['scheduleEnd'] ) && $form['scheduleEnd'] <= 6 ) {
$week_phrase = $is_interweek ? 'next week' : 'this week';
$time = strtotime( "{$days[ $form['scheduleEnd'] ]} {$week_phrase}", $time );
}
$form['scheduleEnd'] = date( 'm/d/Y', $time );
}
}
return $form;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.