Files
DESKTOP-GBA0BK8\Admin 7c8c8b1c76 first commit
2023-04-08 12:19:53 -04:00

180 lines
4.3 KiB
PHP

<?php
defined('ABSPATH') or exit;
/**
* Class MC4WP_Contact_Form_7_Integration
*
* @ignore
*/
class MC4WP_Contact_Form_7_Integration extends MC4WP_Integration
{
/**
* @var string
*/
public $name = "Contact Form 7";
/**
* @var string
*/
public $description = "Subscribes people from Contact Form 7 forms.";
/**
* Add hooks
*/
public function add_hooks()
{
add_action('wpcf7_init', array( $this, 'init'));
add_action('wpcf7_mail_sent', array( $this, 'process' ), 1);
add_action('wpcf7_posted_data', array( $this, 'alter_cf7_data'));
}
/**
* Registers the CF7 shortcode
*
* @return boolean
*/
public function init()
{
if (function_exists('wpcf7_add_form_tag')) {
wpcf7_add_form_tag('mc4wp_checkbox', array( $this, 'shortcode' ));
} else {
wpcf7_add_shortcode('mc4wp_checkbox', array( $this, 'shortcode' ));
}
return true;
}
/**
* @{inheritdoc}
*
* Contact Form 7 listens to the following triggers.
*
* - _mc4wp_subscribe_contact-form-7
* - mc4wp-subscribe
*
* @return bool
*/
public function checkbox_was_checked()
{
$data = $this->get_data();
return (isset($data[ $this->checkbox_name ]) && $data[ $this->checkbox_name ] == 1)
|| (isset($data[ 'mc4wp-subscribe' ]) && $data[ 'mc4wp-subscribe' ] == 1);
}
/**
* Alter Contact Form 7 data.
*
* Adds mc4wp_checkbox to post data so users can use `mc4wp_checkbox` in their email templates
*
* @param array $data
* @return array
*/
public function alter_cf7_data($data = array())
{
$data['mc4wp_checkbox'] = $this->checkbox_was_checked() ? __('Yes') : __('No');
return $data;
}
/**
* Subscribe from Contact Form 7 Forms
*
* @todo improve smart guessing based on selected Mailchimp lists
*
* @param WPCF7_ContactForm $cf7_form
* @return bool
*/
public function process($cf7_form)
{
// was sign-up checkbox checked?
if (! $this->checkbox_was_checked()) {
return false;
}
$parser = new MC4WP_Field_Guesser($this->get_data());
$data = $parser->combine(array( 'guessed', 'namespaced' ));
// do nothing if no email was found
if (empty($data['EMAIL'])) {
$this->get_log()->warning(sprintf('%s > Unable to find EMAIL field.', $this->name));
return false;
}
return $this->subscribe($data, $cf7_form->id());
}
/**
* Return the shortcode output
*
* @return string
*/
public function shortcode($args = array())
{
if (! empty($args['labels'][0])) {
$this->options['label'] = $args['labels'][0];
}
if (isset($args['options'])) {
// check for default:0 or default:1 to set the checked attribute
if (in_array('default:1', $args['options'])) {
$this->options['precheck'] = true;
} elseif (in_array('default:0', $args['options'])) {
$this->options['precheck'] = false;
}
}
// disable paragraph wrap because CF7 defaults to `wpautop`
$this->options['wrap_p'] = 0;
return $this->get_checkbox_html();
}
/**
* @return bool
*/
public function is_installed()
{
return function_exists('wpcf7_contact_form');
}
/**
* @since 3.0
* @return array
*/
public function get_ui_elements()
{
return array_diff(parent::get_ui_elements(), array( 'enabled', 'implicit' ));
}
/**
* @param int $object_id
* @since 3.0
* @return string
*/
public function get_object_link($object_id)
{
// for backwards compatibility, not all CF7 sign-ups have an object id
if (empty($object_id)) {
return '';
}
// Return empty string if CF7 is no longer activated.
if (! function_exists('wpcf7_contact_form')) {
return '';
}
$form = wpcf7_contact_form($object_id);
if (! is_object($form)) {
return '';
}
return sprintf('<a href="%s">%s</a>', admin_url('admin.php?page=wpcf7&post=' . $object_id), $form->title());
}
}