Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions blueprint.json

This file was deleted.

151 changes: 113 additions & 38 deletions includes/formscrm-library/class-gravityforms-widget.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,60 +47,135 @@ public function widget_resend_entries( $meta_boxes, $entry, $form ) {
* @param array $args An array containing the form and entry objects.
*/
public function resend_metabox( $args ) {
$html = '';
$action = 'formscrm_process_feeds';
$form = ! empty( $args['form'] ) ? $args['form'] : array();
$form_id = isset( $form['id'] ) ? (int) $form['id'] : 0;
$entry = ! empty( $args['entry'] ) ? $args['entry'] : array();
$html = '';
$action = 'formscrm_process_feeds';
$form = ! empty( $args['form'] ) ? $args['form'] : array();
$form_id = isset( $form['id'] ) ? (int) $form['id'] : 0;
$entry = ! empty( $args['entry'] ) ? $args['entry'] : array();
$entry_id = isset( $entry['id'] ) ? (int) $entry['id'] : 0;

$feeds = GFCRM::get_instance()->get_feeds( null, $form_id, 'formscrm', true );

if ( rgpost( 'action' ) === $action ) {
check_admin_referer( 'gforms_save_entry', 'gforms_save_entry' );
$html .= '<p><strong>' . esc_html__( 'Feeds processed:', 'formscrm' ) . '</strong></p>';
$html .= '<ul>';
// Check if action was triggered.
$resend_action = isset( $_POST['formscrm_action'] ) ? sanitize_text_field( wp_unslash( $_POST['formscrm_action'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verified below.

foreach ( $feeds as $feed ) {
if ( ! $feed['is_active'] || $form_id !== (int) $feed['form_id'] ) {
continue;
if ( $action === $resend_action ) {
// Verify nonce for security.
if ( ! isset( $_POST['formscrm_resend_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['formscrm_resend_nonce'] ) ), 'formscrm_resend_entry_' . $entry_id ) ) {
$html .= '<p style="color:red;">' . esc_html__( 'Security check failed. Please try again.', 'formscrm' ) . '</p>';
} else {
// Get selected feed(s).
$selected_feeds = isset( $_POST['formscrm_selected_feeds'] ) && is_array( $_POST['formscrm_selected_feeds'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['formscrm_selected_feeds'] ) ) : array(); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verified above.
$process_all = in_array( 'all', $selected_feeds, true );

$html .= '<p><strong>' . esc_html__( 'Feeds processed:', 'formscrm' ) . '</strong></p>';
$html .= '<ul>';

foreach ( $feeds as $feed ) {
if ( ! $feed['is_active'] || $form_id !== (int) $feed['form_id'] ) {
continue;
}

// Process feed if "all" is selected or if this specific feed is selected.
if ( $process_all || in_array( (string) $feed['id'], $selected_feeds, true ) ) {
GFCRM::get_instance()->process_feed( $feed, $entry, $form );
$html .= '<li>';
$html .= sprintf(
// translators: %s is the name of the feed.
__( 'Feed: %s', 'formscrm' ),
isset( $feed['meta']['feedName'] ) ? $feed['meta']['feedName'] : $feed['id'],
);
$html .= '</li>';
}
}
GFCRM::get_instance()->process_feed( $feed, $entry, $form );
$html .= '<li>';
$html .= sprintf(
// translators: %s is the name of the feed.
__( 'Feed: %s', 'formscrm' ),
isset( $feed['meta']['feedName'] ) ? $feed['meta']['feedName'] : $feed['id'],
);
$html .= '</li>';
$html .= '</ul>';
}
$html .= '</ul>';
} else {
$html .= '<p>' . esc_html__( 'This will resend the entry to the CRM.', 'formscrm' ) . '</p>';
$html .= '<p>' . esc_html__( 'Actual feeds actived:', 'formscrm' ) . '</p>';
$html .= '<ul>';
}

// Always show the form with available feeds.
$html .= '<p>' . esc_html__( 'This will resend the entry to the CRM.', 'formscrm' ) . '</p>';
$html .= '<p>' . esc_html__( 'Actual feeds actived:', 'formscrm' ) . '</p>';
$html .= '<ul>';

$active_feeds = 0;
foreach ( $feeds as $feed ) {
if ( ! $feed['is_active'] || $form_id !== (int) $feed['form_id'] ) {
continue;
}
++$active_feeds;
$html .= '<li>';
$html .= sprintf(
// translators: %s is the name of the feed.
__( 'Feed: %s', 'formscrm' ),
isset( $feed['meta']['feedName'] ) ? $feed['meta']['feedName'] : $feed['id'],
);
$html .= '</li>';
}
$html .= '</ul>';

if ( $active_feeds > 0 ) {
$html .= '<br/>';
$html .= '<form method="post" style="display:inline;">';
$html .= wp_nonce_field( 'formscrm_resend_entry_' . $entry_id, 'formscrm_resend_nonce', true, false );
$html .= '<input type="hidden" name="formscrm_action" value="' . esc_attr( $action ) . '" />';
$html .= '<label for="formscrm_feed_select">' . esc_html__( 'Select Feeds to Resend', 'formscrm' ) . ':</label> ';
$html .= '<select id="formscrm_feed_select" name="formscrm_selected_feeds[]" style="min-width:200px;">';
$html .= '<option value="all">' . esc_html__( 'All feeds', 'formscrm' ) . '</option>';
foreach ( $feeds as $feed ) {
if ( ! $feed['is_active'] || $form_id !== (int) $feed['form_id'] ) {
continue;
}
$html .= '<li>';
$html .= sprintf(
// translators: %s is the name of the feed.
__( 'Feed: %s', 'formscrm' ),
isset( $feed['meta']['feedName'] ) ? $feed['meta']['feedName'] : $feed['id'],
$feed_name = isset( $feed['meta']['feedName'] ) ? $feed['meta']['feedName'] : $feed['id'];
$html .= sprintf(
'<option value="%s">%s</option>',
esc_attr( $feed['id'] ),
esc_html( $feed_name )
);
$html .= '</li>';
}
$html .= '</ul>';
$html .= '</br>';
// Add the 'Process Feeds' button.
$html .= '</select><br/><br/>';
$html .= sprintf(
'<input type="submit" value="%s" class="button" onclick="jQuery(\'#action\').val(\'%s\');" />',
__( 'Resend Entry', 'formscrm' ),
$action
'<input type="submit" value="%s" class="button button-primary" />',
esc_attr__( 'Resend Entry', 'formscrm' )
);
$html .= '</form>';
} else {
$html .= '<p><em>' . esc_html__( 'No active feeds found for this form.', 'formscrm' ) . '</em></p>';
}
echo wp_kses_post( $html );

echo wp_kses(
$html,
array(
'p' => array( 'style' => array() ),
'strong' => array(),
'ul' => array(),
'li' => array(),
'br' => array(),
'form' => array(
'method' => array(),
'style' => array(),
),
'input' => array(
'type' => array(),
'name' => array(),
'value' => array(),
'class' => array(),
'id' => array(),
),
'select' => array(
'name' => array(),
'id' => array(),
'multiple' => array(),
'style' => array(),
),
'option' => array(
'value' => array(),
),
'label' => array(
'for' => array(),
),
'em' => array(),
)
);
}
}
new FormsCRM_GravityForms_Widget();
4 changes: 3 additions & 1 deletion readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,9 @@ WordPress installation and then activate the Plugin from Plugins page.
[Official Repository GitHub](https://github.com/closemarketing/formscrm/)

== Changelog ==
= 4.2.2 =
= n.e.x.t. =
* Fixed: Resend button missing in Gravity Forms Entries view.
* Enhanced: Added feed selector in Resend Entry widget to choose between all feeds or individual feed.
* Added date conversion in Clientify for birthday field.

= 4.2.1 =
Expand Down