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/clone/wp-conte.../themes/Divi/includes/builder/feature
File: ErrorReport.php
<?php
[0] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[1] Fix | Delete
exit; // Exit if accessed directly
[2] Fix | Delete
}
[3] Fix | Delete
[4] Fix | Delete
// get_plugins() is only available on dashboard; Manually require it needed.
[5] Fix | Delete
if ( ! function_exists( 'get_plugins' ) ) {
[6] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/plugin.php';
[7] Fix | Delete
}
[8] Fix | Delete
[9] Fix | Delete
class ET_Builder_Error_Report {
[10] Fix | Delete
/**
[11] Fix | Delete
* @var ET_Core_Data_Utils
[12] Fix | Delete
*/
[13] Fix | Delete
protected static $_;
[14] Fix | Delete
[15] Fix | Delete
/**
[16] Fix | Delete
* @var ET_Builder_Error_Report
[17] Fix | Delete
*/
[18] Fix | Delete
private static $_instance;
[19] Fix | Delete
[20] Fix | Delete
/**
[21] Fix | Delete
* ET_Builder_Error_Report constructor.
[22] Fix | Delete
*/
[23] Fix | Delete
public function __construct() {
[24] Fix | Delete
add_action( 'wp_ajax_et_fb_error_report', array( 'ET_Builder_Error_Report', 'endpoint' ) );
[25] Fix | Delete
}
[26] Fix | Delete
[27] Fix | Delete
/**
[28] Fix | Delete
* json_decode data and stripslashes if needed.
[29] Fix | Delete
*
[30] Fix | Delete
* @since 3.24
[31] Fix | Delete
*
[32] Fix | Delete
* @param string $data
[33] Fix | Delete
*
[34] Fix | Delete
* @return mixed
[35] Fix | Delete
*/
[36] Fix | Delete
public static function json_decode_maybe_stripslashes( $data ) {
[37] Fix | Delete
$decoded = json_decode( $data, true );
[38] Fix | Delete
if ( null === $decoded ) {
[39] Fix | Delete
$decoded = json_decode( stripslashes( $data ), true );
[40] Fix | Delete
}
[41] Fix | Delete
return $decoded;
[42] Fix | Delete
}
[43] Fix | Delete
[44] Fix | Delete
/**
[45] Fix | Delete
* Get the class instance.
[46] Fix | Delete
*
[47] Fix | Delete
* @since 3.21.4
[48] Fix | Delete
*
[49] Fix | Delete
* @return ET_Builder_Error_Report
[50] Fix | Delete
*/
[51] Fix | Delete
public static function instance() {
[52] Fix | Delete
if ( ! self::$_instance ) {
[53] Fix | Delete
self::$_instance = new self;
[54] Fix | Delete
}
[55] Fix | Delete
[56] Fix | Delete
self::$_ = ET_Core_Data_Utils::instance();
[57] Fix | Delete
[58] Fix | Delete
return self::$_instance;
[59] Fix | Delete
}
[60] Fix | Delete
[61] Fix | Delete
/**
[62] Fix | Delete
* Get information sent for error reporting
[63] Fix | Delete
*
[64] Fix | Delete
* @since 3.21.4
[65] Fix | Delete
*
[66] Fix | Delete
* @return array
[67] Fix | Delete
*/
[68] Fix | Delete
static public function get_debug_info() {
[69] Fix | Delete
$info = array(
[70] Fix | Delete
'user' => array(
[71] Fix | Delete
'role',
[72] Fix | Delete
),
[73] Fix | Delete
'errors' => array(
[74] Fix | Delete
'error_message',
[75] Fix | Delete
'error_message_stack',
[76] Fix | Delete
'error_stack',
[77] Fix | Delete
'component_info',
[78] Fix | Delete
'notes',
[79] Fix | Delete
),
[80] Fix | Delete
'page' => array(
[81] Fix | Delete
'post_type',
[82] Fix | Delete
'builder_settings',
[83] Fix | Delete
'builder_history',
[84] Fix | Delete
'preferences',
[85] Fix | Delete
),
[86] Fix | Delete
'installation' => array(
[87] Fix | Delete
'product_name',
[88] Fix | Delete
'product_version',
[89] Fix | Delete
'builder_version',
[90] Fix | Delete
'wp_version',
[91] Fix | Delete
'installed_plugins',
[92] Fix | Delete
'active_plugins',
[93] Fix | Delete
'must_use_plugins',
[94] Fix | Delete
),
[95] Fix | Delete
);
[96] Fix | Delete
[97] Fix | Delete
// If the site uses divi builder plugin, provide the theme information
[98] Fix | Delete
if ( et_is_builder_plugin_active() ) {
[99] Fix | Delete
array_unshift(
[100] Fix | Delete
$info['installation'],
[101] Fix | Delete
'theme_name'
[102] Fix | Delete
);
[103] Fix | Delete
}
[104] Fix | Delete
[105] Fix | Delete
// If the site uses child theme, provide the child theme information
[106] Fix | Delete
if ( is_child_theme() ) {
[107] Fix | Delete
array_unshift(
[108] Fix | Delete
$info['installation'],
[109] Fix | Delete
'is_child_theme',
[110] Fix | Delete
'child_theme_name',
[111] Fix | Delete
'child_theme_version'
[112] Fix | Delete
);
[113] Fix | Delete
}
[114] Fix | Delete
[115] Fix | Delete
return $info;
[116] Fix | Delete
}
[117] Fix | Delete
[118] Fix | Delete
/**
[119] Fix | Delete
* Get current product name
[120] Fix | Delete
*
[121] Fix | Delete
* @since 3.21.4
[122] Fix | Delete
*
[123] Fix | Delete
* @return string|bool
[124] Fix | Delete
*/
[125] Fix | Delete
protected function get_product() {
[126] Fix | Delete
if ( et_is_builder_plugin_active() ) {
[127] Fix | Delete
return 'divi-builder';
[128] Fix | Delete
}
[129] Fix | Delete
[130] Fix | Delete
if ( function_exists( 'et_divi_fonts_url' ) ) {
[131] Fix | Delete
return 'Divi';
[132] Fix | Delete
}
[133] Fix | Delete
[134] Fix | Delete
if ( function_exists( 'et_extra_fonts_url' ) ) {
[135] Fix | Delete
return 'Extra';
[136] Fix | Delete
}
[137] Fix | Delete
[138] Fix | Delete
return false;
[139] Fix | Delete
}
[140] Fix | Delete
[141] Fix | Delete
/**
[142] Fix | Delete
* Get debug item value
[143] Fix | Delete
*
[144] Fix | Delete
* @since 3.21.4
[145] Fix | Delete
*
[146] Fix | Delete
* @param string $info_name debug info item name
[147] Fix | Delete
* @param object $post alias for $_POST
[148] Fix | Delete
*
[149] Fix | Delete
* @return string|array|object
[150] Fix | Delete
*/
[151] Fix | Delete
protected function get_debug_value( $info_name, $post ) {
[152] Fix | Delete
switch ( $info_name ) {
[153] Fix | Delete
case 'role':
[154] Fix | Delete
$current_user = wp_get_current_user();
[155] Fix | Delete
$value = esc_html( implode( ', ', $current_user->roles ) );
[156] Fix | Delete
break;
[157] Fix | Delete
[158] Fix | Delete
case 'error_message':
[159] Fix | Delete
case 'error_message_stack':
[160] Fix | Delete
case 'error_stack':
[161] Fix | Delete
case 'notes':
[162] Fix | Delete
case 'post_type':
[163] Fix | Delete
// this will be saved into a text report, no need to convert entities.
[164] Fix | Delete
$value = self::$_->array_get( $post, $info_name, '' );
[165] Fix | Delete
break;
[166] Fix | Delete
[167] Fix | Delete
case 'latest_content':
[168] Fix | Delete
case 'loaded_content':
[169] Fix | Delete
$value = et_fb_process_to_shortcode( self::$_->array_get( $post, $info_name, array() ) );
[170] Fix | Delete
break;
[171] Fix | Delete
[172] Fix | Delete
case 'builder_settings':
[173] Fix | Delete
case 'builder_history':
[174] Fix | Delete
case 'component_info':
[175] Fix | Delete
$value = wp_json_encode( self::$_->array_get( $post, $info_name, array() ) );
[176] Fix | Delete
break;
[177] Fix | Delete
[178] Fix | Delete
case 'preferences':
[179] Fix | Delete
$value = array();
[180] Fix | Delete
foreach ( et_fb_app_preferences() as $name => $preference ) {
[181] Fix | Delete
$value[ $name ] = $preference['value'];
[182] Fix | Delete
}
[183] Fix | Delete
$value = wp_json_encode( $value );
[184] Fix | Delete
break;
[185] Fix | Delete
[186] Fix | Delete
case 'product_name':
[187] Fix | Delete
$value = $this->get_product();
[188] Fix | Delete
break;
[189] Fix | Delete
[190] Fix | Delete
case 'product_version':
[191] Fix | Delete
$value = et_is_builder_plugin_active() ?
[192] Fix | Delete
self::$_->array_get( get_plugin_data( WP_PLUGIN_DIR . '/' . 'divi-builder/divi-builder.php' ), 'Version', '' ) :
[193] Fix | Delete
et_get_theme_version();
[194] Fix | Delete
[195] Fix | Delete
$value = esc_html( $value );
[196] Fix | Delete
break;
[197] Fix | Delete
[198] Fix | Delete
case 'builder_version':
[199] Fix | Delete
$value = ET_BUILDER_PRODUCT_VERSION;
[200] Fix | Delete
break;
[201] Fix | Delete
[202] Fix | Delete
case 'wp_version':
[203] Fix | Delete
$value = esc_html( get_bloginfo( 'version' ) );
[204] Fix | Delete
break;
[205] Fix | Delete
[206] Fix | Delete
case 'installed_plugins':
[207] Fix | Delete
$all_plugins = get_plugins();
[208] Fix | Delete
$value = wp_json_encode( array_keys( $all_plugins ), true );
[209] Fix | Delete
break;
[210] Fix | Delete
[211] Fix | Delete
case 'active_plugins':
[212] Fix | Delete
$all_plugins = get_plugins();
[213] Fix | Delete
$active_plugins_saved = get_option( 'active_plugins' );
[214] Fix | Delete
$active_plugins_keys = is_array( $active_plugins_saved ) ? $active_plugins_saved : array();
[215] Fix | Delete
$active_plugins = array_intersect_key( $all_plugins, array_flip( $active_plugins_keys ) );
[216] Fix | Delete
$value = wp_json_encode( $active_plugins, true );
[217] Fix | Delete
break;
[218] Fix | Delete
[219] Fix | Delete
case 'must_use_plugins':
[220] Fix | Delete
$value = wp_json_encode( get_mu_plugins(), true );
[221] Fix | Delete
break;
[222] Fix | Delete
[223] Fix | Delete
case 'theme_name':
[224] Fix | Delete
case 'child_theme_name':
[225] Fix | Delete
$value = esc_html( wp_get_theme()->get( 'Name' ) );
[226] Fix | Delete
break;
[227] Fix | Delete
[228] Fix | Delete
case 'theme_version':
[229] Fix | Delete
case 'child_theme_version':
[230] Fix | Delete
$value = esc_html__( wp_get_theme()->get( 'Version' ) );
[231] Fix | Delete
break;
[232] Fix | Delete
[233] Fix | Delete
case 'is_child_theme':
[234] Fix | Delete
$value = is_child_theme() ? 'yes' : 'no';
[235] Fix | Delete
break;
[236] Fix | Delete
[237] Fix | Delete
default:
[238] Fix | Delete
$value = '';
[239] Fix | Delete
break;
[240] Fix | Delete
}
[241] Fix | Delete
[242] Fix | Delete
return $value;
[243] Fix | Delete
}
[244] Fix | Delete
[245] Fix | Delete
/**
[246] Fix | Delete
* Get error report content
[247] Fix | Delete
*
[248] Fix | Delete
* @since 3.21.4
[249] Fix | Delete
*
[250] Fix | Delete
* @param string $data
[251] Fix | Delete
*
[252] Fix | Delete
* @return string
[253] Fix | Delete
*/
[254] Fix | Delete
protected function get_report_content( $data ) {
[255] Fix | Delete
$report_content = '';
[256] Fix | Delete
[257] Fix | Delete
$debug_info = self::get_debug_info();
[258] Fix | Delete
[259] Fix | Delete
$report_content = array();
[260] Fix | Delete
[261] Fix | Delete
foreach ( $debug_info as $items_title => $debug_items ) {
[262] Fix | Delete
$item_key = 'group_title-' . $items_title;
[263] Fix | Delete
$items_title = ucwords( $items_title );
[264] Fix | Delete
[265] Fix | Delete
$report_content[ $item_key ] = $items_title;
[266] Fix | Delete
[267] Fix | Delete
foreach ( $debug_items as $debug_item ) {
[268] Fix | Delete
$item_value = et_core_esc_previously( $this->get_debug_value( $debug_item, $data, 'array' ) );
[269] Fix | Delete
[270] Fix | Delete
$report_content[ $debug_item ] = $item_value;
[271] Fix | Delete
}
[272] Fix | Delete
}
[273] Fix | Delete
[274] Fix | Delete
return $report_content;
[275] Fix | Delete
}
[276] Fix | Delete
[277] Fix | Delete
/**
[278] Fix | Delete
* Get attachment data as string to be passed into endpoint
[279] Fix | Delete
*
[280] Fix | Delete
* @since 3.21.4
[281] Fix | Delete
*
[282] Fix | Delete
* @param string $data
[283] Fix | Delete
* @param string $field
[284] Fix | Delete
*
[285] Fix | Delete
* @return string
[286] Fix | Delete
*/
[287] Fix | Delete
protected function get_exported_layout_content( $data, $field ) {
[288] Fix | Delete
// Set faux $_POST value that is required by portability
[289] Fix | Delete
$_POST['post'] = $_POST['post_id'];
[290] Fix | Delete
$_POST['content'] = self::$_instance->get_debug_value( $field , $data );
[291] Fix | Delete
[292] Fix | Delete
// Remove page value if it is equal to `false`, avoiding paginated images not accidentally triggered
[293] Fix | Delete
if ( isset( $_POST['page'] ) && false === $_POST['page'] ) {
[294] Fix | Delete
unset( $_POST['page'] );
[295] Fix | Delete
}
[296] Fix | Delete
[297] Fix | Delete
$portability = et_core_portability_load( 'et_builder' );
[298] Fix | Delete
// Export the content
[299] Fix | Delete
$result = $portability->export( true );
[300] Fix | Delete
// Delete temp files or else the same content will be used for all exports.
[301] Fix | Delete
$portability->delete_temp_files( 'et_core_export' );
[302] Fix | Delete
return $result;
[303] Fix | Delete
}
[304] Fix | Delete
[305] Fix | Delete
/**
[306] Fix | Delete
* Endpoint for sending error report request
[307] Fix | Delete
*
[308] Fix | Delete
* @since 3.21.4
[309] Fix | Delete
*/
[310] Fix | Delete
static public function endpoint() {
[311] Fix | Delete
// Check for valid permission. Only administrator role can send error report
[312] Fix | Delete
if ( ! et_core_security_check_passed( 'manage_options', 'et_fb_send_error_report' ) ) {
[313] Fix | Delete
wp_send_json_error( array(
[314] Fix | Delete
'message' => esc_html__( 'You do not have valid permission to send error report', 'et_builder' ),
[315] Fix | Delete
) );
[316] Fix | Delete
wp_die();
[317] Fix | Delete
}
[318] Fix | Delete
[319] Fix | Delete
// Check valid post id
[320] Fix | Delete
$post_id = self::$_->array_get( $_POST, 'post_id', false );
[321] Fix | Delete
[322] Fix | Delete
if ( ! $post_id ) {
[323] Fix | Delete
wp_send_json_error( array(
[324] Fix | Delete
'message' => esc_html__( 'No valid post id found', 'et_builder' ),
[325] Fix | Delete
) );
[326] Fix | Delete
wp_die();
[327] Fix | Delete
}
[328] Fix | Delete
[329] Fix | Delete
// Check report data.
[330] Fix | Delete
$data = self::$_->array_get( $_POST, 'data', false );
[331] Fix | Delete
[332] Fix | Delete
if ( ! $data ) {
[333] Fix | Delete
wp_send_json_error( array(
[334] Fix | Delete
'message' => esc_html__( 'No valid report data found', 'et_builder' ),
[335] Fix | Delete
) );
[336] Fix | Delete
wp_die();
[337] Fix | Delete
}
[338] Fix | Delete
[339] Fix | Delete
// Check for Elegant Themes username & API Key
[340] Fix | Delete
$updates_options = get_site_option( 'et_automatic_updates_options', array() );
[341] Fix | Delete
$et_username = self::$_->array_get( $updates_options, 'username', '' );
[342] Fix | Delete
$et_api_key = self::$_->array_get( $updates_options, 'api_key', '' );
[343] Fix | Delete
[344] Fix | Delete
if ( '' === $et_username || '' === $et_api_key ) {
[345] Fix | Delete
wp_send_json_error( array(
[346] Fix | Delete
'message' => esc_html__( 'No Elegant Themes username or API key found', 'et_builder' ),
[347] Fix | Delete
) );
[348] Fix | Delete
wp_die();
[349] Fix | Delete
}
[350] Fix | Delete
[351] Fix | Delete
// Check for account status
[352] Fix | Delete
$et_account_status = get_site_option( 'et_account_status', 'not_active' );
[353] Fix | Delete
[354] Fix | Delete
if ( 'active' !== $et_account_status ) {
[355] Fix | Delete
wp_send_json_error( array(
[356] Fix | Delete
'message' => esc_html__( 'Your Elegant Themes account is inactive', 'et_builder' ),
[357] Fix | Delete
) );
[358] Fix | Delete
wp_die();
[359] Fix | Delete
}
[360] Fix | Delete
[361] Fix | Delete
$data = self::json_decode_maybe_stripslashes( $data );
[362] Fix | Delete
$et_endpoint = apply_filters( 'et_builder_report_endpoint', 'https://www.elegantthemes.com/api/reportV2.php' );
[363] Fix | Delete
[364] Fix | Delete
// Crafting reports and send to end endpoint.
[365] Fix | Delete
$request_settings = array(
[366] Fix | Delete
'timeout' => 30,
[367] Fix | Delete
'body' => array(
[368] Fix | Delete
'username' => $et_username,
[369] Fix | Delete
'api_key' => $et_api_key,
[370] Fix | Delete
'error_report' => self::$_instance->get_report_content( $data ),
[371] Fix | Delete
'site_url' => site_url(),
[372] Fix | Delete
'attachments' => array(
[373] Fix | Delete
'latest' => self::$_instance->get_exported_layout_content( $data, 'latest_content' ),
[374] Fix | Delete
'loaded' => self::$_instance->get_exported_layout_content( $data, 'loaded_content' ),
[375] Fix | Delete
),
[376] Fix | Delete
),
[377] Fix | Delete
);
[378] Fix | Delete
[379] Fix | Delete
$request = wp_remote_post( $et_endpoint, $request_settings );
[380] Fix | Delete
$request_response_code = wp_remote_retrieve_response_code( $request );
[381] Fix | Delete
$request_body = wp_remote_retrieve_body( $request );
[382] Fix | Delete
[383] Fix | Delete
if ( 200 === $request_response_code ) {
[384] Fix | Delete
wp_send_json_success();
[385] Fix | Delete
} else {
[386] Fix | Delete
wp_send_json_error( json_decode( $request_body ) );
[387] Fix | Delete
}
[388] Fix | Delete
wp_die();
[389] Fix | Delete
}
[390] Fix | Delete
}
[391] Fix | Delete
[392] Fix | Delete
ET_Builder_Error_Report::instance();
[393] Fix | Delete
[394] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function