get_field_id( 'success_msg' ); ?>
post_content['success_msg'], $id_attr, array( 'textarea_name' => $args['action_control']->get_field_name( 'success_msg' ), 'textarea_rows' => 4, 'editor_class' => 'frm_not_email_message', ) ); ?>
get_field_id( 'show_form' ); $name_attr = $args['action_control']->get_field_name( 'show_form' ); ?>
'with_frm_style frm_toggle', 'checked' => ! empty( $args['form_action']->post_content['show_form'] ), 'echo' => true, ) ); ?>
get_field_id( 'success_url' ); ?>
get_field_id( 'open_in_new_tab' ); $name_attr = $args['action_control']->get_field_name( 'open_in_new_tab' ); ?>
'with_frm_style frm_toggle', 'checked' => ! empty( $args['form_action']->post_content['open_in_new_tab'] ), 'echo' => true, ) ); ?>
get_field_name( 'success_page_id' ); ?>
$name_attr, 'page_id' => $args['form_action']->post_content['success_page_id'], 'placeholder' => __( 'Select a Page', 'formidable' ), ) ); ?>
'publish' ) ); wp_cache_set( $cache_key, 'frm_actions' ); return $actions; } /** * Gets On Submit action type (message, redirect or page). * * @param object $action Form action object. * @return string */ public static function get_action_type( $action ) { if ( isset( $action->post_content['success_action'] ) ) { return $action->post_content['success_action']; } return self::get_default_action_type(); } public static function get_default_action_type() { return 'message'; } public static function get_default_msg() { $msg = FrmAppHelper::get_settings()->success_msg; return $msg ? $msg : __( 'Your responses were successfully submitted. Thank you!', 'formidable' ); } public static function get_default_redirect_msg() { return __( 'Please wait while you are redirected.', 'formidable' ); } /** * Gets the default open in new tab message. * * @since 6.3.1 * * @return string */ public static function get_default_new_tab_msg() { return FrmAppHelper::get_settings()->new_tab_msg; } /** * Adds the first On Submit action data to the form options to be saved. * * @param int $form_id Form ID. */ public static function save_on_submit_settings( $form_id ) { $actions = self::get_actions( $form_id ); $first_create_action = null; $first_edit_action = null; foreach ( $actions as $action ) { if ( ! $first_create_action && in_array( 'create', $action->post_content['event'], true ) ) { $first_create_action = $action; } if ( ! $first_edit_action && in_array( 'update', $action->post_content['event'], true ) ) { $first_edit_action = $action; } } $form_options = array(); self::populate_on_submit_data( $form_options, $first_create_action ); if ( method_exists( 'FrmProFormActionsController', 'change_on_submit_action_ops' ) && FrmAppHelper::pro_is_connected() ) { $form_editable = FrmDb::get_var( 'frm_forms', array( 'id' => $form_id ), 'editable' ); if ( $form_editable ) { self::populate_on_submit_data( $form_options, $first_edit_action, 'update' ); } } if ( ! empty( $form_options ) ) { $_POST['options'] += $form_options; } } /** * Populates the On Submit data to form options. * * @param array $form_options Form options. * @param object $action Optional. The On Submit action object. * @param string $event Form event. Default is `create`. */ public static function populate_on_submit_data( &$form_options, $action = null, $event = 'create' ) { $opt = 'update' === $event ? 'edit_' : 'success_'; if ( ! $action || ! is_object( $action ) ) { $form_options[ $opt . 'action' ] = self::get_default_action_type(); $form_options[ $opt . 'msg' ] = self::get_default_msg(); return; } $form_options[ $opt . 'action' ] = isset( $action->post_content['success_action'] ) ? $action->post_content['success_action'] : 'message'; switch ( $form_options[ $opt . 'action' ] ) { case 'redirect': $form_options[ $opt . 'url' ] = isset( $action->post_content['success_url'] ) ? $action->post_content['success_url'] : ''; $form_options['open_in_new_tab'] = ! empty( $action->post_content['open_in_new_tab'] ); break; case 'page': $form_options[ $opt . 'page_id' ] = isset( $action->post_content['success_page_id'] ) ? $action->post_content['success_page_id'] : ''; break; default: $form_options[ $opt . 'msg' ] = ! empty( $action->post_content['success_msg'] ) ? $action->post_content['success_msg'] : self::get_default_msg(); $form_options['show_form'] = ! empty( $action->post_content['show_form'] ); } } /** * Maybe migrate submit settings from the form options to On Submit action. * This is added after On Submit action is released. This might migrate the frontend editing submit settings too. * * @since 6.1.1 * * @param int $form_id Form ID. */ public static function maybe_migrate_submit_settings_to_action( $form_id ) { $form = FrmDb::get_row( 'frm_forms', array( 'id' => $form_id ), 'options,editable' ); if ( ! $form ) { return; } FrmAppHelper::unserialize_or_decode( $form->options ); if ( self::form_has_migrated( $form ) ) { return; } $form->id = $form_id; $action_type = FrmOnSubmitAction::$slug; // Check if form already has form actions to avoid creating duplicates. $has_actions = FrmFormAction::form_has_action_type( $form_id, $action_type ); if ( ! empty( $has_actions ) ) { // Don't migrate again. self::save_migrated_success_actions( $form ); return; } // Create On Submit action. $base_action = array(); $base_action['post_type'] = FrmFormActionsController::$action_post_type; $base_action['post_excerpt'] = $action_type; $base_action['post_title'] = FrmOnSubmitAction::get_name(); $base_action['menu_order'] = $form_id; $base_action['post_status'] = 'publish'; $base_action['post_content'] = array( 'event' => array( 'create' ), ); $action_data = self::get_on_submit_action_data_from_form_options( $form->options ); // If frontend editing is enabled, migrate its settings too. if ( method_exists( 'FrmProFormActionsController', 'change_on_submit_action_ops' ) && FrmAppHelper::pro_is_connected() && $form->editable ) { $edit_data = self::get_on_submit_action_data_from_form_options( $form->options, 'update' ); if ( $action_data === $edit_data ) { // Just create one action for both create and update if they are the same. $base_action['post_content']['event'][] = 'update'; } else { // Create a separate action for update. $edit_action = $base_action; $edit_action['post_content'] += $edit_data; $edit_action['post_content']['event'] = array( 'update' ); $edit_action['post_content'] = FrmAppHelper::prepare_and_encode( $edit_action['post_content'] ); FrmDb::save_json_post( $edit_action ); } } $action = $base_action; $action['post_content'] += $action_data; $action['post_content'] = FrmAppHelper::prepare_and_encode( $action['post_content'] ); FrmDb::save_json_post( $action ); self::save_migrated_success_actions( $form ); } /** * Gets On Submit action data from form options to be used for the migration. * * @since 6.1.1 * * @param array $form_options Form options. * @param string $event Action event. Accepts `create` or `update`. Default is `create`. * @return array */ private static function get_on_submit_action_data_from_form_options( $form_options, $event = 'create' ) { $opt = 'update' === $event ? 'edit_' : 'success_'; $data = array( 'success_action' => isset( $form_options[ $opt . 'action' ] ) ? $form_options[ $opt . 'action' ] : self::get_default_action_type(), ); switch ( $data['success_action'] ) { case 'redirect': $data['success_url'] = isset( $form_options[ $opt . 'url' ] ) ? $form_options[ $opt . 'url' ] : ''; break; case 'page': $data['success_page_id'] = isset( $form_options[ $opt . 'page_id' ] ) ? $form_options[ $opt . 'page_id' ] : ''; break; default: $data['success_msg'] = isset( $form_options[ $opt . 'msg' ] ) ? $form_options[ $opt . 'msg' ] : self::get_default_msg(); $data['show_form'] = ! empty( $form_options['show_form'] ); } return $data; } /** * Checks if On Submit settings are migrated. * * @since 6.1.1 * * @param object $form Form object. * @return bool */ public static function form_has_migrated( $form ) { return ! empty( $form->options['on_submit_migrated'] ); } /** * @since 6.1.1 * * @param object $form Limited form object. * @return void */ private static function save_migrated_success_actions( $form ) { // Options may be an empty string. if ( ! is_array( $form->options ) ) { $form->options = array(); } $form->options['on_submit_migrated'] = 1; FrmForm::update( $form->id, array( 'options' => $form->options ) ); } /** * Gets fallback action, used when no actions match. * * @since 6.1.1 * * @param array|string $event Uses 'create' or 'update'. * * @return object */ public static function get_fallback_action( $event = 'create' ) { $action = new stdClass(); $action->post_content = array( 'event' => (array) $event, 'success_action' => 'message', 'success_msg' => self::get_default_msg(), ); return $action; } /** * Gets fallback action after opening the redirect URL in a new tab. * * @since 6.3.1 * * @param array|string $event Uses 'create' or 'update'. * @return object */ public static function get_fallback_action_after_open_in_new_tab( $event ) { $action = self::get_fallback_action( $event ); $action->post_content['success_msg'] = self::get_default_new_tab_msg(); return $action; } /** * Check if the current event has been passed. If not, use create actions. * * @since 6.1.1 * * @return string */ public static function current_event( $atts ) { return ! empty( $atts['action'] ) ? $atts['action'] : 'create'; } }