Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/popup-ma.../classes
File: Integrations.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* Integrations class
[2] Fix | Delete
*
[3] Fix | Delete
* @package PUM
[4] Fix | Delete
* @copyright Copyright (c) 2023, Code Atlantic LLC
[5] Fix | Delete
*/
[6] Fix | Delete
[7] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[8] Fix | Delete
exit;
[9] Fix | Delete
}
[10] Fix | Delete
[11] Fix | Delete
/**
[12] Fix | Delete
* Class PUM_Integrations
[13] Fix | Delete
*/
[14] Fix | Delete
class PUM_Integrations {
[15] Fix | Delete
[16] Fix | Delete
/**
[17] Fix | Delete
* @var PUM_Abstract_Integration[]|PUM_Abstract_Integration_Form[]
[18] Fix | Delete
*/
[19] Fix | Delete
public static $integrations = [];
[20] Fix | Delete
[21] Fix | Delete
/**
[22] Fix | Delete
* @var bool
[23] Fix | Delete
*/
[24] Fix | Delete
public static $preload_posts = false;
[25] Fix | Delete
[26] Fix | Delete
public static $form_success;
[27] Fix | Delete
[28] Fix | Delete
public static $form_submission;
[29] Fix | Delete
[30] Fix | Delete
/**
[31] Fix | Delete
* Initializes all form plugin and page builder integrations.
[32] Fix | Delete
*/
[33] Fix | Delete
public static function init() {
[34] Fix | Delete
self::$integrations = apply_filters(
[35] Fix | Delete
'pum_integrations',
[36] Fix | Delete
[
[37] Fix | Delete
// Forms.
[38] Fix | Delete
'ninjaforms' => new PUM_Integration_Form_NinjaForms(),
[39] Fix | Delete
'gravityforms' => new PUM_Integration_Form_GravityForms(),
[40] Fix | Delete
'contactform7' => new PUM_Integration_Form_ContactForm7(),
[41] Fix | Delete
'calderaforms' => new PUM_Integration_Form_CalderaForms(),
[42] Fix | Delete
'mc4wp' => new PUM_Integration_Form_MC4WP(),
[43] Fix | Delete
'wpforms' => new PUM_Integration_Form_WPForms(),
[44] Fix | Delete
'wsforms' => new PUM_Integration_Form_WSForms(),
[45] Fix | Delete
'formidableforms' => new PUM_Integration_Form_FormidableForms(),
[46] Fix | Delete
// Builders.
[47] Fix | Delete
'kingcomposer' => new PUM_Integration_Builder_KingComposer(),
[48] Fix | Delete
'visualcomposer' => new PUM_Integration_Builder_VisualComposer(),
[49] Fix | Delete
]
[50] Fix | Delete
);
[51] Fix | Delete
[52] Fix | Delete
self::$preload_posts = isset( $_GET['page'] ) && 'pum-settings' === $_GET['page'];
[53] Fix | Delete
[54] Fix | Delete
add_filter( 'pum_settings_fields', [ __CLASS__, 'settings_fields' ] );
[55] Fix | Delete
add_action( 'pum_preload_popup', [ __CLASS__, 'enqueue_assets' ] );
[56] Fix | Delete
add_filter( 'pum_registered_conditions', [ __CLASS__, 'register_conditions' ] );
[57] Fix | Delete
[58] Fix | Delete
add_filter( 'pum_vars', [ __CLASS__, 'pum_vars' ] );
[59] Fix | Delete
[60] Fix | Delete
add_action( 'init', [ __CLASS__, 'wp_init_late' ], 99 );
[61] Fix | Delete
add_action( 'admin_init', [ __CLASS__, 'admin_init' ] );
[62] Fix | Delete
add_filter( 'pum_popup_post_type_args', [ __CLASS__, 'popup_post_type_args' ] );
[63] Fix | Delete
add_filter( 'pum_generated_js', [ __CLASS__, 'generated_js' ] );
[64] Fix | Delete
add_filter( 'pum_generated_css', [ __CLASS__, 'generated_css' ] );
[65] Fix | Delete
add_filter( 'pum_popup_settings', [ __CLASS__, 'popup_settings' ], 10, 2 );
[66] Fix | Delete
[67] Fix | Delete
PUM_Integration_GoogleFonts::init();
[68] Fix | Delete
}
[69] Fix | Delete
[70] Fix | Delete
/**
[71] Fix | Delete
* Checks if a 3rd party integration should be enabled.
[72] Fix | Delete
*
[73] Fix | Delete
* @param $key
[74] Fix | Delete
*
[75] Fix | Delete
* @return bool
[76] Fix | Delete
*/
[77] Fix | Delete
public static function enabled( $key ) {
[78] Fix | Delete
return (bool) isset( self::$integrations[ $key ] ) && self::$integrations[ $key ]->enabled();
[79] Fix | Delete
}
[80] Fix | Delete
[81] Fix | Delete
/**
[82] Fix | Delete
* @return PUM_Abstract_Integration_Form[]
[83] Fix | Delete
*/
[84] Fix | Delete
public static function get_enabled_form_integrations() {
[85] Fix | Delete
$enabled_forms = [];
[86] Fix | Delete
[87] Fix | Delete
foreach ( self::$integrations as $object ) {
[88] Fix | Delete
if ( $object instanceof PUM_Abstract_Integration_Form && $object->enabled() ) {
[89] Fix | Delete
$enabled_forms[ $object->key ] = $object;
[90] Fix | Delete
}
[91] Fix | Delete
}
[92] Fix | Delete
[93] Fix | Delete
return $enabled_forms;
[94] Fix | Delete
}
[95] Fix | Delete
[96] Fix | Delete
/**
[97] Fix | Delete
* Returns an array of value=>labels for select fields containing enabled form plugin integrations.
[98] Fix | Delete
*
[99] Fix | Delete
* @return array
[100] Fix | Delete
*/
[101] Fix | Delete
public static function get_enabled_forms_selectlist() {
[102] Fix | Delete
$enabled_form_integrations = self::get_enabled_form_integrations();
[103] Fix | Delete
[104] Fix | Delete
$form_types = [];
[105] Fix | Delete
[106] Fix | Delete
foreach ( $enabled_form_integrations as $key => $object ) {
[107] Fix | Delete
$form_types[ $key ] = $object->label();
[108] Fix | Delete
}
[109] Fix | Delete
[110] Fix | Delete
return $form_types;
[111] Fix | Delete
}
[112] Fix | Delete
[113] Fix | Delete
/**
[114] Fix | Delete
* @param $key
[115] Fix | Delete
*
[116] Fix | Delete
* @return bool|PUM_Abstract_Integration|PUM_Abstract_Integration_Form
[117] Fix | Delete
*/
[118] Fix | Delete
public static function get_integration_info( $key ) {
[119] Fix | Delete
return isset( self::$integrations[ $key ] ) ? self::$integrations[ $key ] : false;
[120] Fix | Delete
}
[121] Fix | Delete
[122] Fix | Delete
/**
[123] Fix | Delete
* @param string $key
[124] Fix | Delete
*
[125] Fix | Delete
* @return array
[126] Fix | Delete
*/
[127] Fix | Delete
public static function get_form_provider_forms( $key ) {
[128] Fix | Delete
$integration = self::get_integration_info( $key );
[129] Fix | Delete
[130] Fix | Delete
if ( ! ( $integration instanceof PUM_Abstract_Integration_Form ) || ! $integration->enabled() ) {
[131] Fix | Delete
return [];
[132] Fix | Delete
}
[133] Fix | Delete
[134] Fix | Delete
return $integration->get_forms();
[135] Fix | Delete
}
[136] Fix | Delete
[137] Fix | Delete
/**
[138] Fix | Delete
* @param $key
[139] Fix | Delete
* @param $id
[140] Fix | Delete
*
[141] Fix | Delete
* @return array|mixed
[142] Fix | Delete
*/
[143] Fix | Delete
public static function get_form_provider_form( $key, $id ) {
[144] Fix | Delete
$integration = self::get_integration_info( $key );
[145] Fix | Delete
[146] Fix | Delete
if ( ! ( $integration instanceof PUM_Abstract_Integration_Form ) || ! $integration->enabled() ) {
[147] Fix | Delete
return [];
[148] Fix | Delete
}
[149] Fix | Delete
[150] Fix | Delete
return $integration->get_form( $id );
[151] Fix | Delete
}
[152] Fix | Delete
[153] Fix | Delete
/**
[154] Fix | Delete
* @param $key
[155] Fix | Delete
*
[156] Fix | Delete
* @return array
[157] Fix | Delete
*/
[158] Fix | Delete
public static function get_form_provider_forms_selectlist( $key ) {
[159] Fix | Delete
$integration = self::get_integration_info( $key );
[160] Fix | Delete
[161] Fix | Delete
if ( ! ( $integration instanceof PUM_Abstract_Integration_Form ) || ! $integration->enabled() ) {
[162] Fix | Delete
return [];
[163] Fix | Delete
}
[164] Fix | Delete
[165] Fix | Delete
return $integration->get_form_selectlist();
[166] Fix | Delete
}
[167] Fix | Delete
[168] Fix | Delete
/**
[169] Fix | Delete
* Adds additional settings to help better integrate with 3rd party plugins.
[170] Fix | Delete
*
[171] Fix | Delete
* @param array $fields
[172] Fix | Delete
*
[173] Fix | Delete
* @return array
[174] Fix | Delete
*/
[175] Fix | Delete
public static function settings_fields( $fields = [] ) {
[176] Fix | Delete
[177] Fix | Delete
foreach ( self::$integrations as $key => $integration ) {
[178] Fix | Delete
if ( ! ( $integration instanceof PUM_Interface_Integration_Settings ) || ! $integration->enabled() ) {
[179] Fix | Delete
continue;
[180] Fix | Delete
}
[181] Fix | Delete
[182] Fix | Delete
// TODO LEFT OFF HERE.
[183] Fix | Delete
// TODO Could this be done via add_filter( 'pum_settings_fields', array( $integration, 'append_fields' ) );
[184] Fix | Delete
// TODO If so, do we do it inside the __construct for the PUM_Abstract_Integration, or the Integration_{Provider} class itself.
[185] Fix | Delete
// TODO Alternatively do we simply loop over all enabled providers during self::init() and add the filters/hooks there instead.
[186] Fix | Delete
$fields = $integration->append_fields( $fields );
[187] Fix | Delete
}
[188] Fix | Delete
[189] Fix | Delete
return $fields;
[190] Fix | Delete
}
[191] Fix | Delete
[192] Fix | Delete
public static function enqueue_assets( $popup_id = 0 ) {
[193] Fix | Delete
[194] Fix | Delete
$popup = pum_get_popup( $popup_id );
[195] Fix | Delete
[196] Fix | Delete
if ( ! pum_is_popup( $popup ) ) {
[197] Fix | Delete
return;
[198] Fix | Delete
}
[199] Fix | Delete
[200] Fix | Delete
// Do stuff here.
[201] Fix | Delete
}
[202] Fix | Delete
[203] Fix | Delete
public static function register_conditions( $conditions = [] ) {
[204] Fix | Delete
[205] Fix | Delete
foreach ( self::$integrations as $key => $enabled ) {
[206] Fix | Delete
if ( ! $enabled ) {
[207] Fix | Delete
continue;
[208] Fix | Delete
}
[209] Fix | Delete
[210] Fix | Delete
switch ( $key ) {
[211] Fix | Delete
[212] Fix | Delete
}
[213] Fix | Delete
}
[214] Fix | Delete
[215] Fix | Delete
return $conditions;
[216] Fix | Delete
}
[217] Fix | Delete
[218] Fix | Delete
/**
[219] Fix | Delete
* Runs during init
[220] Fix | Delete
*/
[221] Fix | Delete
public static function wp_init_late() {
[222] Fix | Delete
[223] Fix | Delete
/**
[224] Fix | Delete
* Force KingComposer support for popups.
[225] Fix | Delete
*/
[226] Fix | Delete
if ( self::enabled( 'kingcomposer' ) ) {
[227] Fix | Delete
global $kc;
[228] Fix | Delete
$kc->add_content_type( 'popup' );
[229] Fix | Delete
}
[230] Fix | Delete
}
[231] Fix | Delete
[232] Fix | Delete
/**
[233] Fix | Delete
* Runs during admin_init
[234] Fix | Delete
*/
[235] Fix | Delete
public static function admin_init() {
[236] Fix | Delete
if ( ! self::enabled( 'visualcomposer' ) && ( is_admin() && isset( $_GET['page'] ) && in_array(
[237] Fix | Delete
$_GET['page'],
[238] Fix | Delete
[
[239] Fix | Delete
'vc_settings',
[240] Fix | Delete
'fl-builder-settings',
[241] Fix | Delete
]
[242] Fix | Delete
) ) || pum_is_popup_editor() ) {
[243] Fix | Delete
add_filter( 'vc_role_access_with_post_types_get_state', '__return_true' );
[244] Fix | Delete
add_filter( 'vc_role_access_with_backend_editor_get_state', '__return_true' );
[245] Fix | Delete
add_filter( 'vc_role_access_with_frontend_editor_get_state', '__return_false' );
[246] Fix | Delete
add_filter( 'vc_check_post_type_validation', '__return_true' );
[247] Fix | Delete
}
[248] Fix | Delete
}
[249] Fix | Delete
[250] Fix | Delete
public static function popup_post_type_args( $args = [] ) {
[251] Fix | Delete
[252] Fix | Delete
if ( self::enabled( 'kingcomposer' ) && ( ( is_admin() && isset( $_GET['page'] ) && 'kingcomposer' === $_GET['page'] ) || pum_is_popup_editor() ) ) {
[253] Fix | Delete
$args = array_merge(
[254] Fix | Delete
$args,
[255] Fix | Delete
[
[256] Fix | Delete
'public' => true,
[257] Fix | Delete
'exclude_from_search' => true,
[258] Fix | Delete
'publicly_queryable' => false,
[259] Fix | Delete
'show_in_nav_menus' => false,
[260] Fix | Delete
]
[261] Fix | Delete
);
[262] Fix | Delete
}
[263] Fix | Delete
[264] Fix | Delete
if ( self::enabled( 'visualcomposer' ) && ( is_admin() && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && ( ( isset( $_GET['page'] ) && in_array(
[265] Fix | Delete
$_GET['page'],
[266] Fix | Delete
[
[267] Fix | Delete
'vc_settings',
[268] Fix | Delete
'fl-builder-settings',
[269] Fix | Delete
]
[270] Fix | Delete
) ) || ( isset( $_POST['option_page'] ) && 'wpb_js_composer_settings_general' === $_POST['option_page'] ) || pum_is_popup_editor() ) ) ) {
[271] Fix | Delete
$args = array_merge(
[272] Fix | Delete
$args,
[273] Fix | Delete
[
[274] Fix | Delete
'public' => true,
[275] Fix | Delete
'exclude_from_search' => true,
[276] Fix | Delete
'publicly_queryable' => false, // Was true, verify this isn't a problem.
[277] Fix | Delete
'show_in_nav_menus' => false,
[278] Fix | Delete
]
[279] Fix | Delete
);
[280] Fix | Delete
}
[281] Fix | Delete
[282] Fix | Delete
return $args;
[283] Fix | Delete
}
[284] Fix | Delete
[285] Fix | Delete
[286] Fix | Delete
/**
[287] Fix | Delete
* @param array $js
[288] Fix | Delete
*
[289] Fix | Delete
* @return array
[290] Fix | Delete
*/
[291] Fix | Delete
public static function generated_js( $js = [] ) {
[292] Fix | Delete
[293] Fix | Delete
foreach ( self::$integrations as $integration ) {
[294] Fix | Delete
if ( $integration->enabled() && method_exists( $integration, 'custom_scripts' ) ) {
[295] Fix | Delete
$js = $integration->custom_scripts( $js );
[296] Fix | Delete
}
[297] Fix | Delete
}
[298] Fix | Delete
[299] Fix | Delete
return $js;
[300] Fix | Delete
}
[301] Fix | Delete
[302] Fix | Delete
/**
[303] Fix | Delete
* @param array $css
[304] Fix | Delete
*
[305] Fix | Delete
* @return array $css
[306] Fix | Delete
*/
[307] Fix | Delete
public static function generated_css( $css = [] ) {
[308] Fix | Delete
[309] Fix | Delete
foreach ( self::$integrations as $integration ) {
[310] Fix | Delete
if ( $integration->enabled() && method_exists( $integration, 'custom_styles' ) ) {
[311] Fix | Delete
$css = $integration->custom_styles( $css );
[312] Fix | Delete
}
[313] Fix | Delete
}
[314] Fix | Delete
[315] Fix | Delete
return $css;
[316] Fix | Delete
}
[317] Fix | Delete
[318] Fix | Delete
/**
[319] Fix | Delete
* Modify popup settings.
[320] Fix | Delete
*
[321] Fix | Delete
* @param array $settings
[322] Fix | Delete
* @param int $popup_id
[323] Fix | Delete
*
[324] Fix | Delete
* @return array
[325] Fix | Delete
*/
[326] Fix | Delete
public static function popup_settings( $settings, $popup_id ) {
[327] Fix | Delete
[328] Fix | Delete
if ( is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
[329] Fix | Delete
return $settings;
[330] Fix | Delete
}
[331] Fix | Delete
[332] Fix | Delete
static $form_popup_id;
[333] Fix | Delete
[334] Fix | Delete
/**
[335] Fix | Delete
* Checks for popup form submission.
[336] Fix | Delete
*/
[337] Fix | Delete
if ( ! isset( $form_popup_id ) ) {
[338] Fix | Delete
$form_popup_id = isset( $_REQUEST['pum_form_popup_id'] ) && absint( $_REQUEST['pum_form_popup_id'] ) > 0 ? absint( $_REQUEST['pum_form_popup_id'] ) : false;
[339] Fix | Delete
}
[340] Fix | Delete
[341] Fix | Delete
// Should it reopen? Only if all of the following are true.
[342] Fix | Delete
$should_reopen = [
[343] Fix | Delete
// Form popup was submitted and matches this popup.
[344] Fix | Delete
$form_popup_id && $popup_id === $form_popup_id,
[345] Fix | Delete
// Form reopen was not marked disable.
[346] Fix | Delete
empty( $settings['disable_form_reopen'] ) || ! $settings['disable_form_reopen'],
[347] Fix | Delete
// Close on form submission is disbaled, or has a timer larger than 0.
[348] Fix | Delete
( empty( $settings['close_on_form_submission'] ) || ! $settings['close_on_form_submission'] || ( $settings['close_on_form_submission'] && $settings['close_on_form_submission_delay'] > 0 ) ),
[349] Fix | Delete
];
[350] Fix | Delete
[351] Fix | Delete
/**
[352] Fix | Delete
* If submission exists for this popup remove auto open triggers and add an admin_debug trigger to reshow the popup.
[353] Fix | Delete
*/
[354] Fix | Delete
if ( ! in_array( false, $should_reopen ) ) {
[355] Fix | Delete
$triggers = ! empty( $settings['triggers'] ) ? $settings['triggers'] : [];
[356] Fix | Delete
[357] Fix | Delete
foreach ( $triggers as $key => $trigger ) {
[358] Fix | Delete
if ( 'auto_open' === $trigger['type'] ) {
[359] Fix | Delete
unset( $triggers[ $key ] );
[360] Fix | Delete
}
[361] Fix | Delete
}
[362] Fix | Delete
[363] Fix | Delete
$settings['triggers'][] = [
[364] Fix | Delete
'type' => 'admin_debug',
[365] Fix | Delete
];
[366] Fix | Delete
}
[367] Fix | Delete
[368] Fix | Delete
return $settings;
[369] Fix | Delete
}
[370] Fix | Delete
[371] Fix | Delete
[372] Fix | Delete
/**
[373] Fix | Delete
* Add various extra global pum_vars js values.
[374] Fix | Delete
*
[375] Fix | Delete
* Primarily used to pass form success options for custom integrations and custom code.
[376] Fix | Delete
*
[377] Fix | Delete
* @param array $vars
[378] Fix | Delete
*
[379] Fix | Delete
* @return array
[380] Fix | Delete
*/
[381] Fix | Delete
public static function pum_vars( $vars = [] ) {
[382] Fix | Delete
[383] Fix | Delete
/**
[384] Fix | Delete
* If a form was submitted via non-ajax methods this checks if a successful submission was reported.
[385] Fix | Delete
*/
[386] Fix | Delete
if ( isset( self::$form_success ) && ! empty( self::$form_success['popup_id'] ) ) {
[387] Fix | Delete
self::$form_success['settings'] = wp_parse_args(
[388] Fix | Delete
self::$form_success['settings'],
[389] Fix | Delete
[
[390] Fix | Delete
'openpopup' => false,
[391] Fix | Delete
'openpopup_id' => 0,
[392] Fix | Delete
'closepopup' => false,
[393] Fix | Delete
'closedelay' => 0,
[394] Fix | Delete
'redirect_enabled' => false,
[395] Fix | Delete
'redirect' => '',
[396] Fix | Delete
'cookie' => false,
[397] Fix | Delete
]
[398] Fix | Delete
);
[399] Fix | Delete
[400] Fix | Delete
if ( is_array( self::$form_success['settings']['cookie'] ) ) {
[401] Fix | Delete
self::$form_success['settings']['cookie'] = wp_parse_args(
[402] Fix | Delete
self::$form_success['settings']['cookie'],
[403] Fix | Delete
[
[404] Fix | Delete
'name' => 'pum-' . self::$form_success['popup_id'],
[405] Fix | Delete
'expires' => '+1 year',
[406] Fix | Delete
]
[407] Fix | Delete
);
[408] Fix | Delete
}
[409] Fix | Delete
[410] Fix | Delete
$vars['form_success'] = self::$form_success;
[411] Fix | Delete
}
[412] Fix | Delete
[413] Fix | Delete
if ( ! empty( self::$form_submission ) ) {
[414] Fix | Delete
// Remap values from PHP underscore_case to JS camelCase
[415] Fix | Delete
$vars['form_submission'] = PUM_Utils_Array::remap_keys(
[416] Fix | Delete
self::$form_submission,
[417] Fix | Delete
[
[418] Fix | Delete
'form_provider' => 'formProvider',
[419] Fix | Delete
'form_id' => 'formId',
[420] Fix | Delete
'form_instance_id' => 'formInstanceId',
[421] Fix | Delete
'popup_id' => 'popupId',
[422] Fix | Delete
]
[423] Fix | Delete
);
[424] Fix | Delete
}
[425] Fix | Delete
[426] Fix | Delete
return $vars;
[427] Fix | Delete
}
[428] Fix | Delete
[429] Fix | Delete
/**
[430] Fix | Delete
* Returns array of options for a select field to select an integrated form.
[431] Fix | Delete
*
[432] Fix | Delete
* @return array
[433] Fix | Delete
*/
[434] Fix | Delete
public static function get_integrated_forms_selectlist() {
[435] Fix | Delete
$enabled_form_integrations = self::get_enabled_form_integrations();
[436] Fix | Delete
[437] Fix | Delete
$options = [];
[438] Fix | Delete
[439] Fix | Delete
foreach ( $enabled_form_integrations as $integration ) {
[440] Fix | Delete
switch ( $integration->key ) {
[441] Fix | Delete
default:
[442] Fix | Delete
$group_options = [
[443] Fix | Delete
$integration->key . '_any' => sprintf( __( 'Any %s Form', 'popup-maker' ), $integration->label() ),
[444] Fix | Delete
];
[445] Fix | Delete
[446] Fix | Delete
foreach ( $integration->get_form_selectlist() as $formId => $formLabel ) {
[447] Fix | Delete
// ex. ninjaforms_1, contactform7_55
[448] Fix | Delete
$group_options[ $integration->key . '_' . $formId ] = $formLabel;
[449] Fix | Delete
}
[450] Fix | Delete
[451] Fix | Delete
$options[ $integration->label() ] = $group_options;
[452] Fix | Delete
[453] Fix | Delete
break;
[454] Fix | Delete
}
[455] Fix | Delete
}
[456] Fix | Delete
[457] Fix | Delete
return $options;
[458] Fix | Delete
}
[459] Fix | Delete
[460] Fix | Delete
}
[461] Fix | Delete
[462] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function