PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.5.2
Jetpack – WP Security, Backup, Speed, & Growth v12.5.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / 3rd-party / class-salesforce-lead-form.php
jetpack / 3rd-party Last commit date
debug-bar 4 years ago 3rd-party.php 3 years ago amp.php 3 years ago atomic.php 3 years ago bbpress.php 3 years ago beaverbuilder.php 5 years ago bitly.php 3 years ago buddypress.php 5 years ago class-domain-mapping.php 4 years ago class-jetpack-bbpress-rest-api.php 3 years ago class-salesforce-lead-form.php 3 years ago class.jetpack-amp-support.php 3 years ago creative-mail.php 3 years ago crowdsignal.php 5 years ago debug-bar.php 5 years ago jetpack-backup.php 3 years ago jetpack-boost.php 3 years ago qtranslate-x.php 5 years ago vaultpress.php 5 years ago web-stories.php 5 years ago woocommerce-services.php 3 years ago woocommerce.php 3 years ago wpml.php 5 years ago
class-salesforce-lead-form.php
148 lines
1 <?php
2 /**
3 * Salesforce Lead Form using Jetpack Contact Forms.
4 *
5 * @package automattic/jetpack
6 */
7
8 namespace Automattic\Jetpack;
9
10 /**
11 * Class Salesforce_Lead_Form
12 *
13 * Hooks on Jetpack's Contact form to send form data to Salesforce.
14 */
15 class Salesforce_Lead_Form {
16 /**
17 * Salesforce_Contact_Form constructor.
18 * Hooks on `grunion_after_feedback_post_inserted` action to send form data to Salesforce.
19 */
20 public static function initialize() {
21 add_action( 'grunion_after_feedback_post_inserted', array( __CLASS__, 'process_salesforce_form' ), 10, 4 );
22 }
23
24 /**
25 * Process Salesforce Lead forms
26 *
27 * @param int $post_id - the post_id for the CPT that is created.
28 * @param array $fields - Grunion_Contact_Form_Field array.
29 * @param bool $is_spam - marked as spam by Akismet(?).
30 * @param array $entry_values - extra fields added to from the contact form.
31 *
32 * @return null|void
33 */
34 public static function process_salesforce_form( $post_id, $fields, $is_spam, $entry_values ) {
35 if ( ! is_array( $fields ) ) {
36 // nothing to do, also prevent hook from processing actions triggered with different args
37 return;
38 }
39
40 // if spam (hinted by akismet?), don't process
41 if ( $is_spam ) {
42 return;
43 }
44
45 $blocks = parse_blocks( get_the_content() );
46
47 $filtered_blocks = self::get_salesforce_contact_form_blocks( $blocks );
48
49 // no contact-form blocks with salesforceData and organizationId, move on
50 if ( empty( $filtered_blocks ) ) {
51 return;
52 }
53
54 // more than one form on post, skipping process
55 if ( count( $filtered_blocks ) > 1 ) {
56 return;
57 }
58
59 $attrs = $filtered_blocks[0]['attrs']['salesforceData'];
60 $organization_id = $attrs['organizationId'];
61 // Double sanity check: no organization ID? Abort.
62 if ( empty( $organization_id ) ) {
63 return;
64 }
65
66 $keyed_fields = array_map(
67 function ( $field ) {
68 return $field->value;
69 },
70 $fields
71 );
72
73 // this is yet TBD, campaign IDs are hard to get from SF app/UI, but if
74 // the user filled it, then send as API field Campaign_ID
75 if ( ! empty( $attrs['campaignId'] ) ) {
76 $keyed_fields['Campaign_ID'] = $attrs['campaignId'];
77 }
78
79 // add post/page URL as lead_source
80 $keyed_fields['lead_source'] = $entry_values['entry_permalink'];
81 $keyed_fields['oid'] = $organization_id;
82
83 // we got this far, try and send it. Need to check for errors on submit
84 try {
85 self::send_to_salesforce( $keyed_fields );
86 } catch ( \Exception $e ) {
87 // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
88 trigger_error( sprintf( 'Jetpack Form: Sending lead to Salesforce failed: %s', esc_html( $e->getMessage() ) ) );
89 }
90 }
91
92 /**
93 * POST to Salesforce WebToLead servlet
94 *
95 * @param array $data The data key/value pairs to send in POST.
96 * @param array $options Options for POST.
97 *
98 * @return array|WP_Error The result value from wp_remote_post
99 */
100 public static function send_to_salesforce( $data, $options = array() ) {
101 global $wp_version;
102
103 $user_agent = "WordPress/{$wp_version} | Jetpack/" . constant( 'JETPACK__VERSION' ) . '; ' . get_bloginfo( 'url' );
104 $url = 'https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';
105 $args = array(
106 'body' => $data,
107 'headers' => array(
108 'Content-Type' => 'application/x-www-form-urlencoded',
109 'user-agent' => $user_agent,
110 ),
111 'sslverify' => empty( $options['sslverify'] ) ? false : $options['sslverify'],
112 );
113
114 $args = apply_filters( 'jetpack_contactform_salesforce_request_args', $args );
115 return wp_remote_post( $url, $args );
116 }
117
118 /**
119 * Extracts any jetpack/contact-form found on post.
120 *
121 * @param array $block_array - Array of blocks.
122 *
123 * @return array Array of jetpack/contact-form blocks found.
124 */
125 public static function get_salesforce_contact_form_blocks( $block_array ) {
126 $jetpack_form_blocks = array();
127 foreach ( $block_array as $block ) {
128 if (
129 $block['blockName'] === 'jetpack/contact-form' &&
130 isset( $block['attrs']['salesforceData'] ) &&
131 $block['attrs']['salesforceData'] &&
132 isset( $block['attrs']['salesforceData']['sendToSalesforce'] ) &&
133 $block['attrs']['salesforceData']['sendToSalesforce'] &&
134 isset( $block['attrs']['salesforceData']['organizationId'] ) &&
135 $block['attrs']['salesforceData']['organizationId']
136 ) {
137 $jetpack_form_blocks[] = $block;
138 } elseif ( isset( $block['innerBlocks'] ) ) {
139 $jetpack_form_blocks = array_merge( $jetpack_form_blocks, self::get_salesforce_contact_form_blocks( $block['innerBlocks'] ) );
140 }
141 }
142
143 return $jetpack_form_blocks;
144 }
145 }
146
147 Salesforce_Lead_Form::initialize();
148