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

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../themes/Divi/includes/builder
File: class-et-builder-element.php
$manager->forced_inline = $forced_inline;
[1000] Fix | Delete
$manager->write_file_location = 'footer';
[1001] Fix | Delete
[1002] Fix | Delete
if ( $forced_in_footer || $forced_inline ) {
[1003] Fix | Delete
// Restore legacy behavior--output inline styles in the footer.
[1004] Fix | Delete
$manager->set_output_location( 'footer' );
[1005] Fix | Delete
}
[1006] Fix | Delete
[1007] Fix | Delete
return array(
[1008] Fix | Delete
'manager' => $manager,
[1009] Fix | Delete
'add_hooks' => true,
[1010] Fix | Delete
);
[1011] Fix | Delete
}
[1012] Fix | Delete
[1013] Fix | Delete
/**
[1014] Fix | Delete
* Passes the module design styles for the current page to the advanced styles manager.
[1015] Fix | Delete
* {@see 'wp_footer' (19) Must run before the style manager's footer callback}
[1016] Fix | Delete
*/
[1017] Fix | Delete
public static function set_advanced_styles() {
[1018] Fix | Delete
$styles = '';
[1019] Fix | Delete
[1020] Fix | Delete
if ( et_core_is_builder_used_on_current_request() ) {
[1021] Fix | Delete
$styles .= et_pb_get_page_custom_css();
[1022] Fix | Delete
}
[1023] Fix | Delete
[1024] Fix | Delete
$styles .= self::get_style() . self::get_style( true );
[1025] Fix | Delete
[1026] Fix | Delete
if ( ! $styles ) {
[1027] Fix | Delete
return;
[1028] Fix | Delete
}
[1029] Fix | Delete
[1030] Fix | Delete
// Pass styles to page resource which will handle their output
[1031] Fix | Delete
self::$advanced_styles_manager->set_data( $styles, 40 );
[1032] Fix | Delete
}
[1033] Fix | Delete
[1034] Fix | Delete
/**
[1035] Fix | Delete
* Filters the unified page resource data. The data is an array of arrays of strings keyed by
[1036] Fix | Delete
* priority. The builder's styles are set with a priority of 40. Here we want to make sure
[1037] Fix | Delete
* only the builder's styles are output in the footer on first-page load so we aren't
[1038] Fix | Delete
* duplicating the customizer and custom css styles which are already in the <head>.
[1039] Fix | Delete
* {@see 'et_core_page_resource_get_data'}
[1040] Fix | Delete
*/
[1041] Fix | Delete
public static function filter_page_resource_data( $data, $context, $resource ) {
[1042] Fix | Delete
global $wp_current_filter;
[1043] Fix | Delete
[1044] Fix | Delete
if ( 'inline' !== $context || ! in_array( 'wp_footer', $wp_current_filter ) ) {
[1045] Fix | Delete
return $data;
[1046] Fix | Delete
}
[1047] Fix | Delete
[1048] Fix | Delete
if ( false === strpos( $resource->slug, 'unified' ) ) {
[1049] Fix | Delete
return $data;
[1050] Fix | Delete
}
[1051] Fix | Delete
[1052] Fix | Delete
if ( 'footer' !== $resource->location ) {
[1053] Fix | Delete
// This is the first load of a page that doesn't currently have a unified static css file.
[1054] Fix | Delete
// The theme customizer and custom css have already been inlined in the <head> using the
[1055] Fix | Delete
// unified resource's ID. It's invalid HTML to have duplicated IDs on the page so we'll
[1056] Fix | Delete
// fix that here since it only applies to this page load anyway.
[1057] Fix | Delete
$resource->slug = $resource->slug . '-2';
[1058] Fix | Delete
}
[1059] Fix | Delete
[1060] Fix | Delete
return isset( $data[40] ) ? array( 40 => $data[40] ) : array();
[1061] Fix | Delete
}
[1062] Fix | Delete
[1063] Fix | Delete
/**
[1064] Fix | Delete
* Get the slugs for all current builder modules.
[1065] Fix | Delete
*
[1066] Fix | Delete
* @since 3.0.85
[1067] Fix | Delete
*
[1068] Fix | Delete
* @param string $post_type Get module slugs for this post type. If falsy, all slugs are returned.
[1069] Fix | Delete
*
[1070] Fix | Delete
* @return array
[1071] Fix | Delete
*/
[1072] Fix | Delete
public static function get_module_slugs_by_post_type( $post_type = 'post' ) {
[1073] Fix | Delete
if ( $post_type ) {
[1074] Fix | Delete
if ( ! isset( self::$_module_slugs_by_post_type[ $post_type ] ) ) {
[1075] Fix | Delete
// We get all modules when post type is not enabled so that posts that have
[1076] Fix | Delete
// had their post type support disabled still load all necessary modules.
[1077] Fix | Delete
return array_keys( self::get_modules() );
[1078] Fix | Delete
}
[1079] Fix | Delete
[1080] Fix | Delete
return self::$_module_slugs_by_post_type[ $post_type ];
[1081] Fix | Delete
}
[1082] Fix | Delete
[1083] Fix | Delete
return self::$_module_slugs_by_post_type;
[1084] Fix | Delete
}
[1085] Fix | Delete
[1086] Fix | Delete
/**
[1087] Fix | Delete
* Get whether the module has Visual Builder support or not
[1088] Fix | Delete
*
[1089] Fix | Delete
* @since 3.1
[1090] Fix | Delete
*
[1091] Fix | Delete
* @return bool
[1092] Fix | Delete
*/
[1093] Fix | Delete
function has_vb_support() {
[1094] Fix | Delete
return 'off' !== $this->vb_support;
[1095] Fix | Delete
}
[1096] Fix | Delete
[1097] Fix | Delete
/**
[1098] Fix | Delete
* Create Factory objects
[1099] Fix | Delete
*
[1100] Fix | Delete
* @since 3.23 Add margin padding fields object.
[1101] Fix | Delete
*
[1102] Fix | Delete
* @return void
[1103] Fix | Delete
*/
[1104] Fix | Delete
function set_factory_objects() {
[1105] Fix | Delete
// Load features fields.
[1106] Fix | Delete
$this->text_shadow = ET_Builder_Module_Fields_Factory::get( 'TextShadow' );
[1107] Fix | Delete
$this->margin_padding = ET_Builder_Module_Fields_Factory::get( 'MarginPadding' );
[1108] Fix | Delete
}
[1109] Fix | Delete
[1110] Fix | Delete
protected function _set_fields_unprocessed( $fields ) {
[1111] Fix | Delete
$unprocessed = &self::$_fields_unprocessed;
[1112] Fix | Delete
[1113] Fix | Delete
foreach ( $fields as $field => $definition ) {
[1114] Fix | Delete
if ( true === $definition ) {
[1115] Fix | Delete
continue;
[1116] Fix | Delete
}
[1117] Fix | Delete
[1118] Fix | Delete
// Have to use md5 now because needed by modules cache.
[1119] Fix | Delete
$key = md5( serialize( $definition ) );
[1120] Fix | Delete
if ( ! isset( $unprocessed[ $key ] ) ) {
[1121] Fix | Delete
$unprocessed[ $key ] = $definition;
[1122] Fix | Delete
}
[1123] Fix | Delete
[1124] Fix | Delete
$this->fields_unprocessed[ $field ] = $unprocessed[ $key ];
[1125] Fix | Delete
}
[1126] Fix | Delete
}
[1127] Fix | Delete
[1128] Fix | Delete
/**
[1129] Fix | Delete
* Populates {@see self::$fields_unprocessed}.
[1130] Fix | Delete
*/
[1131] Fix | Delete
public function set_fields() {
[1132] Fix | Delete
$fields_unprocessed = $this->get_complete_fields();
[1133] Fix | Delete
[1134] Fix | Delete
// Add _builder_version field to all modules
[1135] Fix | Delete
$fields_unprocessed['_builder_version'] = array( 'type' => 'skip' );
[1136] Fix | Delete
[1137] Fix | Delete
// Add _dynamic_attributes field to all modules.
[1138] Fix | Delete
$fields_unprocessed['_dynamic_attributes'] = array( 'type' => 'skip' );
[1139] Fix | Delete
[1140] Fix | Delete
// Add support for the style presets
[1141] Fix | Delete
$fields_unprocessed['_module_preset'] = array( 'type' => 'skip' );
[1142] Fix | Delete
[1143] Fix | Delete
if ( function_exists( 'et_builder_definition_sort' ) ) {
[1144] Fix | Delete
et_builder_definition_sort( $fields_unprocessed );
[1145] Fix | Delete
}
[1146] Fix | Delete
[1147] Fix | Delete
if ( $this->_is_official_module ) {
[1148] Fix | Delete
$this->_set_fields_unprocessed( $fields_unprocessed );
[1149] Fix | Delete
return;
[1150] Fix | Delete
}
[1151] Fix | Delete
[1152] Fix | Delete
// 3rd-Party module backwards compatability starts here
[1153] Fix | Delete
foreach ( $fields_unprocessed as $field => $info ) {
[1154] Fix | Delete
if ( isset( $info['depends_to'] ) ) {
[1155] Fix | Delete
$fields_unprocessed[ $field ]['depends_on'] = $info['depends_to'];
[1156] Fix | Delete
}
[1157] Fix | Delete
[1158] Fix | Delete
if ( isset( $info['depends_default'] ) && $info['depends_default'] && ! isset( $info['depends_show_if'] ) ) {
[1159] Fix | Delete
$fields_unprocessed[ $field ]['depends_show_if'] = 'on';
[1160] Fix | Delete
$message = "You're Doing It Wrong! Setting definition for {$field} includes deprecated parameter: 'depends_default'. Use 'show_if' instead.";
[1161] Fix | Delete
et_debug( $message );
[1162] Fix | Delete
}
[1163] Fix | Delete
[1164] Fix | Delete
// Process renderer of string type only.
[1165] Fix | Delete
if ( isset( $info['renderer'] ) && is_string( $info['renderer'] ) ) {
[1166] Fix | Delete
$original_renderer = $info['renderer'];
[1167] Fix | Delete
$updated_field_type = $info['renderer'];
[1168] Fix | Delete
[1169] Fix | Delete
// convert renderer into type
[1170] Fix | Delete
switch ( $info['renderer'] ) {
[1171] Fix | Delete
case 'et_builder_include_categories_option' :
[1172] Fix | Delete
case 'et_builder_include_categories_shop_option' :
[1173] Fix | Delete
$updated_field_type = 'categories';
[1174] Fix | Delete
break;
[1175] Fix | Delete
case 'et_builder_get_widget_areas' :
[1176] Fix | Delete
$updated_field_type = 'select_sidebar';
[1177] Fix | Delete
break;
[1178] Fix | Delete
case 'et_pb_get_font_icon_list' :
[1179] Fix | Delete
case 'et_pb_get_font_down_icon_list' :
[1180] Fix | Delete
$updated_field_type = 'select_icon';
[1181] Fix | Delete
break;
[1182] Fix | Delete
case 'et_builder_get_gallery_settings' :
[1183] Fix | Delete
$updated_field_type = 'upload_gallery';
[1184] Fix | Delete
break;
[1185] Fix | Delete
case 'et_builder_generate_center_map_setting' :
[1186] Fix | Delete
$updated_field_type = 'center_map';
[1187] Fix | Delete
break;
[1188] Fix | Delete
}
[1189] Fix | Delete
[1190] Fix | Delete
$fields_unprocessed[ $field ]['type'] = $updated_field_type;
[1191] Fix | Delete
[1192] Fix | Delete
if ( 'et_pb_get_font_down_icon_list' === $info['renderer'] ) {
[1193] Fix | Delete
$fields_unprocessed[ $field ]['renderer_options'] = array( 'icons_list' => 'icon_down', );
[1194] Fix | Delete
}
[1195] Fix | Delete
[1196] Fix | Delete
// Output developer warning if renderer was converted to type
[1197] Fix | Delete
if ( $original_renderer !== $updated_field_type ) {
[1198] Fix | Delete
$message = "You're Doing It Wrong! Module setting definition for {$field} has a deprecated value: ";
[1199] Fix | Delete
$message .= "'{$original_renderer}' for parameter 'renderer'. Use '{$updated_field_type}' instead.";
[1200] Fix | Delete
et_debug( $message );
[1201] Fix | Delete
}
[1202] Fix | Delete
}
[1203] Fix | Delete
[1204] Fix | Delete
// Normalize `affects` field names if needed.
[1205] Fix | Delete
if ( isset( $info['affects'] ) ) {
[1206] Fix | Delete
$affects_original = $fields_unprocessed[ $field ]['affects'];
[1207] Fix | Delete
$fields_unprocessed[ $field ]['affects'] = array();
[1208] Fix | Delete
// BB supports comma separated list of affected fields, convert it to array of fields if this is the case.
[1209] Fix | Delete
// Some plugins use combination of various lists, handle all of them
[1210] Fix | Delete
foreach( $affects_original as $affect_item ) {
[1211] Fix | Delete
if ( strpos( $affect_item, ',' ) !== false ) {
[1212] Fix | Delete
$fields_unprocessed[ $field ]['affects'] = array_merge( $fields_unprocessed[ $field ]['affects'], explode( ',', str_replace( ' ', '', $affect_item ) ) );
[1213] Fix | Delete
} else {
[1214] Fix | Delete
$fields_unprocessed[ $field ]['affects'][] = $affect_item;
[1215] Fix | Delete
}
[1216] Fix | Delete
}
[1217] Fix | Delete
[1218] Fix | Delete
array_walk( $fields_unprocessed[ $field ]['affects'], array( $this, 'normalize_affect_fields' ) );
[1219] Fix | Delete
}
[1220] Fix | Delete
[1221] Fix | Delete
if ( 'content_new' === $field ) {
[1222] Fix | Delete
$fields_unprocessed['content'] = $fields_unprocessed['content_new'];
[1223] Fix | Delete
unset( $fields_unprocessed['content_new'] );
[1224] Fix | Delete
$message = "You're Doing It Wrong! Setting definition for {$field} includes deprecated parameter: 'content_new'. Use 'content' instead.";
[1225] Fix | Delete
et_debug( $message );
[1226] Fix | Delete
}
[1227] Fix | Delete
[1228] Fix | Delete
// convert old color pickers to the new ones supporting alpha channel
[1229] Fix | Delete
if ( 'color' === self::$_->array_get( $info, 'type' ) ) {
[1230] Fix | Delete
$info['type'] = 'color-alpha';
[1231] Fix | Delete
$fields_unprocessed[ $field ] = $info;
[1232] Fix | Delete
$message = "You're Doing It Wrong! You're using wrong type for the '" . $field . "'. It should be 'color-alpha' instead of 'color'.";
[1233] Fix | Delete
et_debug( $message, 4, false );
[1234] Fix | Delete
}
[1235] Fix | Delete
[1236] Fix | Delete
// convert input type to text
[1237] Fix | Delete
if ( 'input' === self::$_->array_get( $info, 'type' ) ) {
[1238] Fix | Delete
$info['type'] = 'text';
[1239] Fix | Delete
$fields_unprocessed[ $field ] = $info;
[1240] Fix | Delete
$message = "You're Doing It Wrong! Setting definition for {$field} has a deprecated value: 'input' for parameter: 'type'. Use 'text' instead.";
[1241] Fix | Delete
et_debug( $message );
[1242] Fix | Delete
}
[1243] Fix | Delete
[1244] Fix | Delete
// Normalize default values
[1245] Fix | Delete
if ( isset( $info['default'] ) ) {
[1246] Fix | Delete
$fields_unprocessed[ $field ]['default'] = $this->_normalize_field_default( $field, $info['default'], $fields_unprocessed[ $field ]['type'] );
[1247] Fix | Delete
}
[1248] Fix | Delete
}
[1249] Fix | Delete
[1250] Fix | Delete
// Set default values in field definitions based on the legacy defaults "rules"
[1251] Fix | Delete
if ( isset( $this->fields_defaults ) ) {
[1252] Fix | Delete
foreach ( $this->fields_defaults as $field => $value ) {
[1253] Fix | Delete
if ( ! isset( $fields_unprocessed[ $field ] ) ) {
[1254] Fix | Delete
continue;
[1255] Fix | Delete
}
[1256] Fix | Delete
[1257] Fix | Delete
$condition = is_array( $value ) ? self::$_->array_get( $value, '1' ) : false;
[1258] Fix | Delete
$set_default_on_front = 'only_default_setting' !== $condition;
[1259] Fix | Delete
$default = $this->_normalize_field_default( $field, $value, $fields_unprocessed[ $field ]['type'] );
[1260] Fix | Delete
[1261] Fix | Delete
// Always set default value if exists. Only default_on_front should be conditional
[1262] Fix | Delete
$fields_unprocessed[ $field ]['default'] = $default;
[1263] Fix | Delete
[1264] Fix | Delete
if ( ! $set_default_on_front ) {
[1265] Fix | Delete
continue;
[1266] Fix | Delete
}
[1267] Fix | Delete
[1268] Fix | Delete
$has_default = isset( $fields_unprocessed[ $field ]['default'] );
[1269] Fix | Delete
[1270] Fix | Delete
if ( ! $has_default || $fields_unprocessed[ $field ]['default'] !== $default ) {
[1271] Fix | Delete
$fields_unprocessed[ $field ]['default_on_front'] = $default;
[1272] Fix | Delete
}
[1273] Fix | Delete
}
[1274] Fix | Delete
}
[1275] Fix | Delete
[1276] Fix | Delete
// Legacy Defaults Rule #4 (AKA: longest-running undetected bug in the codebase):
[1277] Fix | Delete
// Fields listed in allowlisted_fields that aren't in fields_defaults lose their definitions
[1278] Fix | Delete
if ( isset( $this->allowlisted_fields ) ) {
[1279] Fix | Delete
$disable_allowlisted_fields = isset( $this->force_unallowlisted_fields ) && $this->force_unallowlisted_fields;
[1280] Fix | Delete
[1281] Fix | Delete
if ( ! $disable_allowlisted_fields && ! is_admin() && ! et_fb_is_enabled() ) {
[1282] Fix | Delete
foreach ( $this->allowlisted_fields as $field ) {
[1283] Fix | Delete
if ( isset( $this->fields_defaults ) && array_key_exists( $field, $this->fields_defaults ) ) {
[1284] Fix | Delete
continue;
[1285] Fix | Delete
}
[1286] Fix | Delete
[1287] Fix | Delete
$fields_unprocessed[ $field ] = array();
[1288] Fix | Delete
}
[1289] Fix | Delete
}
[1290] Fix | Delete
}
[1291] Fix | Delete
[1292] Fix | Delete
$this->_set_fields_unprocessed( $fields_unprocessed );
[1293] Fix | Delete
}
[1294] Fix | Delete
[1295] Fix | Delete
protected function _normalize_field_default( $field, $default_value, $type = '' ) {
[1296] Fix | Delete
$normalized_value = is_array( $default_value ) ? $default_value[0] : $default_value;
[1297] Fix | Delete
[1298] Fix | Delete
// normalize default value depends on field type
[1299] Fix | Delete
switch ( $type ) {
[1300] Fix | Delete
case 'yes_no_button':
[1301] Fix | Delete
if ( is_numeric( $normalized_value ) ) {
[1302] Fix | Delete
$normalized_value = (bool) $normalized_value ? 'on' : 'off';
[1303] Fix | Delete
$message = "You're Doing It Wrong! You're using wrong value for '{$field}' default value. It should be either 'on' or 'off'.";
[1304] Fix | Delete
et_debug( $message, 4 , false );
[1305] Fix | Delete
}
[1306] Fix | Delete
break;
[1307] Fix | Delete
case 'color-alpha':
[1308] Fix | Delete
if ( is_numeric( $normalized_value ) ) {
[1309] Fix | Delete
$normalized_value = '';
[1310] Fix | Delete
$message = "You're Doing It Wrong! You're using wrong value for '{$field}' default value. It should be string value.";
[1311] Fix | Delete
et_debug( $message, 4 , false );
[1312] Fix | Delete
}
[1313] Fix | Delete
[1314] Fix | Delete
// Make sure provided HEX code is a valid color code
[1315] Fix | Delete
if ( strpos( $normalized_value, '#' ) === 0 && ! in_array( strlen( $normalized_value ), array( 4, 7 ) ) ) {
[1316] Fix | Delete
$normalized_value = '';
[1317] Fix | Delete
$message = "You're Doing It Wrong! You're using wrong value for '{$field}' default value. It should be valid hex color code.";
[1318] Fix | Delete
et_debug( $message, 4 , false );
[1319] Fix | Delete
}
[1320] Fix | Delete
[1321] Fix | Delete
break;
[1322] Fix | Delete
}
[1323] Fix | Delete
[1324] Fix | Delete
return $normalized_value;
[1325] Fix | Delete
}
[1326] Fix | Delete
[1327] Fix | Delete
/**
[1328] Fix | Delete
* Normalize `affects` fields name if needed.
[1329] Fix | Delete
* Some 3rd party modules use `#et_pb_<field_name>` format which is wrong and doesn't work in VB, but works in BB.
[1330] Fix | Delete
* Convert it to correct format and output notice for developer
[1331] Fix | Delete
*
[1332] Fix | Delete
* @return void
[1333] Fix | Delete
*/
[1334] Fix | Delete
function normalize_affect_fields( &$field_name ) {
[1335] Fix | Delete
if ( strpos( $field_name, '#et_pb_' ) !== false ) {
[1336] Fix | Delete
// Truncate field name from the string wherever it's placed
[1337] Fix | Delete
$new_field_name = substr( $field_name, strpos( $field_name, '#et_pb_' ) + 7 );
[1338] Fix | Delete
$message = "You're Doing It Wrong! You're using wrong name for 'affects' attribute. It should be '" . $new_field_name . "' instead of '" . $field_name . "'";
[1339] Fix | Delete
$field_name = $new_field_name;
[1340] Fix | Delete
et_debug( $message, 4, false );
[1341] Fix | Delete
}
[1342] Fix | Delete
[1343] Fix | Delete
// content_new renamed to content, so rename it in affected fields list as well
[1344] Fix | Delete
if ( $field_name === 'content_new' ) {
[1345] Fix | Delete
$field_name = 'content';
[1346] Fix | Delete
}
[1347] Fix | Delete
}
[1348] Fix | Delete
[1349] Fix | Delete
/**
[1350] Fix | Delete
* Finalizes the configuration of {@see self::$fields_unprocessed}.
[1351] Fix | Delete
* Includes filter and fields processing for Visual Builder
[1352] Fix | Delete
*
[1353] Fix | Delete
* @return void
[1354] Fix | Delete
*/
[1355] Fix | Delete
protected function _finalize_all_fields() {
[1356] Fix | Delete
$fields_unprocessed = $this->fields_unprocessed;
[1357] Fix | Delete
$fields_before_filter = $fields_unprocessed;
[1358] Fix | Delete
[1359] Fix | Delete
/**
[1360] Fix | Delete
* Filters module fields.
[1361] Fix | Delete
*
[1362] Fix | Delete
* @since 3.1
[1363] Fix | Delete
*
[1364] Fix | Delete
* @param array $fields_unprocessed See {@see self::$fields_unprocessed}.
[1365] Fix | Delete
*/
[1366] Fix | Delete
$fields_unprocessed = apply_filters( "et_pb_all_fields_unprocessed_{$this->slug}", $fields_unprocessed );
[1367] Fix | Delete
[1368] Fix | Delete
$is_saving_modules_cache = et_core_is_saving_builder_modules_cache();
[1369] Fix | Delete
$need_dynamic_assets = et_core_is_fb_enabled() && ! et_fb_dynamic_asset_exists( 'definitions' );
[1370] Fix | Delete
[1371] Fix | Delete
// Check if this is an AJAX request since this is how VB and BB loads the initial module data et_core_is_fb_enabled() always returns `false` here
[1372] Fix | Delete
// Make exception for requests that are regenerating modules cache and
[1373] Fix | Delete
// VB page which has no dynamic definitions asset so it can cache the definitions correctly.
[1374] Fix | Delete
if ( ! wp_doing_ajax() && ! $is_saving_modules_cache && ! $need_dynamic_assets ) {
[1375] Fix | Delete
$this->_set_fields_unprocessed( $fields_unprocessed );
[1376] Fix | Delete
return;
[1377] Fix | Delete
}
[1378] Fix | Delete
[1379] Fix | Delete
foreach ( array_keys( $fields_unprocessed ) as $field_name ) {
[1380] Fix | Delete
$field_info = $fields_unprocessed[ $field_name ];
[1381] Fix | Delete
$affected_fields = self::$_->array_get( $field_info, 'affects', array() );
[1382] Fix | Delete
[1383] Fix | Delete
foreach ( $affected_fields as $affected_field ) {
[1384] Fix | Delete
if ( ! isset( $fields_unprocessed[ $affected_field ] ) ) {
[1385] Fix | Delete
continue;
[1386] Fix | Delete
}
[1387] Fix | Delete
[1388] Fix | Delete
if ( ! isset( $fields_unprocessed[ $affected_field ]['depends_on'] ) ) {
[1389] Fix | Delete
$fields_unprocessed[ $affected_field ]['depends_on'] = array();
[1390] Fix | Delete
}
[1391] Fix | Delete
[1392] Fix | Delete
// Avoid value duplication
[1393] Fix | Delete
if ( ! in_array( $field_name, $fields_unprocessed[ $affected_field ]['depends_on'] ) ) {
[1394] Fix | Delete
$fields_unprocessed[ $affected_field ]['depends_on'][] = $field_name;
[1395] Fix | Delete
}
[1396] Fix | Delete
[1397] Fix | Delete
// Set `depends_show_if = on` if no condition defined for the affected field for backward compatibility with old plugins
[1398] Fix | Delete
if ( ! isset( $fields_unprocessed[ $affected_field ]['depends_show_if'] ) && ! isset( $fields_unprocessed[ $affected_field ]['depends_show_if_not'] ) ) {
[1399] Fix | Delete
// Deprecation notice has already been logged for this.
[1400] Fix | Delete
$fields_unprocessed[ $affected_field ]['depends_show_if'] = 'on';
[1401] Fix | Delete
}
[1402] Fix | Delete
}
[1403] Fix | Delete
[1404] Fix | Delete
// Unset renderer to avoid errors in VB because of errors in 3rd party plugins
[1405] Fix | Delete
// BB compat. Still need this data, so leave it for BB
[1406] Fix | Delete
if ( ( self::is_loading_vb_data() || et_fb_is_enabled() ) && isset( $fields_unprocessed[ $field_name ]['renderer'] ) ) {
[1407] Fix | Delete
unset( $fields_unprocessed[ $field_name ]['renderer'] );
[1408] Fix | Delete
}
[1409] Fix | Delete
[1410] Fix | Delete
if ( isset( $fields_unprocessed[ $field_name ]['use_plugin_main'] ) ) {
[1411] Fix | Delete
$fields_unprocessed[ $field_name ]['use_limited_main'] = $fields_unprocessed[ $field_name ]['use_plugin_main'];
[1412] Fix | Delete
unset( $fields_unprocessed[ $field_name ]['use_plugin_main'] );
[1413] Fix | Delete
$message = "You're Doing It Wrong! Setting definition for {$field_name} includes deprecated parameter: 'use_plugin_main'. Use 'use_limited_main' instead.";
[1414] Fix | Delete
et_debug( $message );
[1415] Fix | Delete
}
[1416] Fix | Delete
[1417] Fix | Delete
if ( isset( $fields_unprocessed[ $field_name ]['plugin_main'] ) ) {
[1418] Fix | Delete
$fields_unprocessed[ $field_name ]['limited_main'] = $fields_unprocessed[ $field_name ]['plugin_main'];
[1419] Fix | Delete
unset( $fields_unprocessed[ $field_name ]['plugin_main'] );
[1420] Fix | Delete
$message = "You're Doing It Wrong! Setting definition for {$field_name} includes deprecated parameter: 'plugin_main'. Use 'limited_main' instead.";
[1421] Fix | Delete
et_debug( $message );
[1422] Fix | Delete
}
[1423] Fix | Delete
}
[1424] Fix | Delete
[1425] Fix | Delete
// determine custom fields added via filter and add specific flag to identify them in VB
[1426] Fix | Delete
$keys_before_filter = array_keys( $fields_before_filter );
[1427] Fix | Delete
$keys_after_filter = array_keys( $fields_unprocessed );
[1428] Fix | Delete
$added_fields = array_diff( $keys_after_filter, $keys_before_filter );
[1429] Fix | Delete
[1430] Fix | Delete
if ( ! empty( $added_fields ) ) {
[1431] Fix | Delete
foreach ( $added_fields as $key ) {
[1432] Fix | Delete
$fields_unprocessed[ $key ]['vb_support'] = false;
[1433] Fix | Delete
}
[1434] Fix | Delete
}
[1435] Fix | Delete
[1436] Fix | Delete
$this->_set_fields_unprocessed( $fields_unprocessed );
[1437] Fix | Delete
}
[1438] Fix | Delete
[1439] Fix | Delete
private function register_post_type( $post_type ) {
[1440] Fix | Delete
$this->post_types[] = $post_type;
[1441] Fix | Delete
self::$parent_modules[ $post_type ] = array();
[1442] Fix | Delete
self::$child_modules[ $post_type ] = array();
[1443] Fix | Delete
}
[1444] Fix | Delete
[1445] Fix | Delete
/**
[1446] Fix | Delete
* Double quote are saved as "%22" in shortcode attributes.
[1447] Fix | Delete
* Decode them back into "
[1448] Fix | Delete
*
[1449] Fix | Delete
* @param string[] $enabled_dynamic_attributes
[1450] Fix | Delete
* @param bool $et_fb_processing_shortcode_object
[1451] Fix | Delete
*
[1452] Fix | Delete
* @return void
[1453] Fix | Delete
*/
[1454] Fix | Delete
private function _decode_double_quotes( $enabled_dynamic_attributes, $et_fb_processing_shortcode_object ) {
[1455] Fix | Delete
if ( ! isset( $this->props ) ) {
[1456] Fix | Delete
return;
[1457] Fix | Delete
}
[1458] Fix | Delete
[1459] Fix | Delete
// need to encode HTML entities in Admin Area( for BB ) if Visual Editor disabled for the user.
[1460] Fix | Delete
$need_html_entities_decode = is_admin() && ! user_can_richedit();
[1461] Fix | Delete
[1462] Fix | Delete
$shortcode_attributes = array();
[1463] Fix | Delete
$font_icon_options = array( 'font_icon', 'button_icon', 'button_one_icon', 'button_two_icon', 'hover_icon' );
[1464] Fix | Delete
[1465] Fix | Delete
foreach ( $this->props as $attribute_key => $attribute_value ) {
[1466] Fix | Delete
if ( $et_fb_processing_shortcode_object && in_array( $attribute_key, $enabled_dynamic_attributes, true ) ) {
[1467] Fix | Delete
// Do not decode dynamic content values when preparing them for VB.
[1468] Fix | Delete
$shortcode_attributes[ $attribute_key ] = $attribute_value;
[1469] Fix | Delete
continue;
[1470] Fix | Delete
}
[1471] Fix | Delete
[1472] Fix | Delete
// decode HTML entities and remove trailing and leading quote if needed
[1473] Fix | Delete
$processed_attr_value = $need_html_entities_decode ? trim( htmlspecialchars_decode( $attribute_value, ENT_QUOTES ), '"' ) : $attribute_value;
[1474] Fix | Delete
[1475] Fix | Delete
// the icon shortcodes are fine.
[1476] Fix | Delete
if ( in_array( $attribute_key, $font_icon_options, true ) ) {
[1477] Fix | Delete
$shortcode_attributes[ $attribute_key ] = $processed_attr_value;
[1478] Fix | Delete
// icon attributes must not be str_replaced
[1479] Fix | Delete
continue;
[1480] Fix | Delete
}
[1481] Fix | Delete
[1482] Fix | Delete
// Set empty TinyMCE content '&lt;br /&gt;<br />' as empty string.
[1483] Fix | Delete
$field_type = empty( $this->fields_unprocessed[ $attribute_key ]['type'] ) ? '' : $this->fields_unprocessed[ $attribute_key ]['type'];
[1484] Fix | Delete
if ( 'tiny_mce' === $field_type && 'ltbrgtbr' === preg_replace( '/[^a-z]/', '', $processed_attr_value ) ) {
[1485] Fix | Delete
$processed_attr_value = '';
[1486] Fix | Delete
}
[1487] Fix | Delete
[1488] Fix | Delete
[1489] Fix | Delete
// URLs are weird since they can allow non-ascii characters so we escape those separately.
[1490] Fix | Delete
if ( in_array( $attribute_key, array( 'url', 'button_link', 'button_url' ), true ) ) {
[1491] Fix | Delete
$shortcode_attributes[ $attribute_key ] = esc_url_raw( str_replace(
[1492] Fix | Delete
array( '%91', '%93' ),
[1493] Fix | Delete
array( '&#91;', '&#93;' ),
[1494] Fix | Delete
$processed_attr_value
[1495] Fix | Delete
) );
[1496] Fix | Delete
} else {
[1497] Fix | Delete
// Manipulate string for font icon attribute with value "%%xx%%" to "##xx##".
[1498] Fix | Delete
$processed_attr_value = preg_replace( '/%%([0-9]+)%%/', '##$1##', $processed_attr_value );
[1499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function