Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/elemento.../includes/base
File: controls-stack.php
* add new control you set the `$args` parameter, this method allows you to
[1000] Fix | Delete
* update the arguments by passing new data.
[1001] Fix | Delete
*
[1002] Fix | Delete
* @since 1.4.0
[1003] Fix | Delete
* @access public
[1004] Fix | Delete
*
[1005] Fix | Delete
* @param string $id Responsive control ID.
[1006] Fix | Delete
* @param array $args Responsive control arguments.
[1007] Fix | Delete
* @param array $options Optional. Additional options.
[1008] Fix | Delete
*/
[1009] Fix | Delete
final public function update_responsive_control( $id, array $args, array $options = [] ) {
[1010] Fix | Delete
$this->add_responsive_control( $id, $args, [
[1011] Fix | Delete
'overwrite' => true,
[1012] Fix | Delete
'recursive' => ! empty( $options['recursive'] ),
[1013] Fix | Delete
] );
[1014] Fix | Delete
}
[1015] Fix | Delete
[1016] Fix | Delete
/**
[1017] Fix | Delete
* Remove responsive control from stack.
[1018] Fix | Delete
*
[1019] Fix | Delete
* Unregister an existing responsive control and remove it from the stack.
[1020] Fix | Delete
*
[1021] Fix | Delete
* @since 1.4.0
[1022] Fix | Delete
* @access public
[1023] Fix | Delete
*
[1024] Fix | Delete
* @param string $id Responsive control ID.
[1025] Fix | Delete
*/
[1026] Fix | Delete
final public function remove_responsive_control( $id ) {
[1027] Fix | Delete
$devices = Plugin::$instance->breakpoints->get_active_devices_list( [ 'reverse' => true ] );
[1028] Fix | Delete
[1029] Fix | Delete
foreach ( $devices as $device_name ) {
[1030] Fix | Delete
$id_suffix = Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP === $device_name ? '' : '_' . $device_name;
[1031] Fix | Delete
[1032] Fix | Delete
$this->remove_control( $id . $id_suffix );
[1033] Fix | Delete
}
[1034] Fix | Delete
}
[1035] Fix | Delete
[1036] Fix | Delete
/**
[1037] Fix | Delete
* Get class name.
[1038] Fix | Delete
*
[1039] Fix | Delete
* Retrieve the name of the current class.
[1040] Fix | Delete
*
[1041] Fix | Delete
* @since 1.4.0
[1042] Fix | Delete
* @access public
[1043] Fix | Delete
*
[1044] Fix | Delete
* @return string Class name.
[1045] Fix | Delete
*/
[1046] Fix | Delete
final public function get_class_name() {
[1047] Fix | Delete
return get_called_class();
[1048] Fix | Delete
}
[1049] Fix | Delete
[1050] Fix | Delete
/**
[1051] Fix | Delete
* Get the config.
[1052] Fix | Delete
*
[1053] Fix | Delete
* Retrieve the config or, if non set, use the initial config.
[1054] Fix | Delete
*
[1055] Fix | Delete
* @since 1.4.0
[1056] Fix | Delete
* @access public
[1057] Fix | Delete
*
[1058] Fix | Delete
* @return array|null The config.
[1059] Fix | Delete
*/
[1060] Fix | Delete
final public function get_config() {
[1061] Fix | Delete
if ( null === $this->config ) {
[1062] Fix | Delete
// TODO: This is for backwards compatibility starting from 2.9.0.
[1063] Fix | Delete
// This if statement should be removed when the method is hard-deprecated.
[1064] Fix | Delete
if ( $this->has_own_method( '_get_initial_config', self::class ) ) {
[1065] Fix | Delete
Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_get_initial_config', '2.9.0', __CLASS__ . '::get_initial_config()' );
[1066] Fix | Delete
[1067] Fix | Delete
$this->config = $this->_get_initial_config();
[1068] Fix | Delete
} else {
[1069] Fix | Delete
$this->config = $this->get_initial_config();
[1070] Fix | Delete
}
[1071] Fix | Delete
[1072] Fix | Delete
foreach ( $this->additional_config as $key => $value ) {
[1073] Fix | Delete
if ( isset( $this->config[ $key ] ) ) {
[1074] Fix | Delete
$this->config[ $key ] = wp_parse_args( $value, $this->config[ $key ] );
[1075] Fix | Delete
} else {
[1076] Fix | Delete
$this->config[ $key ] = $value;
[1077] Fix | Delete
}
[1078] Fix | Delete
}
[1079] Fix | Delete
}
[1080] Fix | Delete
[1081] Fix | Delete
return $this->config;
[1082] Fix | Delete
}
[1083] Fix | Delete
[1084] Fix | Delete
/**
[1085] Fix | Delete
* Set a config property.
[1086] Fix | Delete
*
[1087] Fix | Delete
* Set a specific property of the config list for this controls-stack.
[1088] Fix | Delete
*
[1089] Fix | Delete
* @param string $key
[1090] Fix | Delete
* @param string $value
[1091] Fix | Delete
* @since 3.5.0
[1092] Fix | Delete
* @access public
[1093] Fix | Delete
*/
[1094] Fix | Delete
public function set_config( $key, $value ) {
[1095] Fix | Delete
if ( isset( $this->additional_config[ $key ] ) ) {
[1096] Fix | Delete
$this->additional_config[ $key ] = wp_parse_args( $value, $this->additional_config[ $key ] );
[1097] Fix | Delete
} else {
[1098] Fix | Delete
$this->additional_config[ $key ] = $value;
[1099] Fix | Delete
}
[1100] Fix | Delete
}
[1101] Fix | Delete
[1102] Fix | Delete
/**
[1103] Fix | Delete
* Get frontend settings keys.
[1104] Fix | Delete
*
[1105] Fix | Delete
* Retrieve settings keys for all frontend controls.
[1106] Fix | Delete
*
[1107] Fix | Delete
* @since 1.6.0
[1108] Fix | Delete
* @access public
[1109] Fix | Delete
*
[1110] Fix | Delete
* @return array Settings keys for each control.
[1111] Fix | Delete
*/
[1112] Fix | Delete
final public function get_frontend_settings_keys() {
[1113] Fix | Delete
$controls = [];
[1114] Fix | Delete
[1115] Fix | Delete
foreach ( $this->get_controls() as $control ) {
[1116] Fix | Delete
if ( ! empty( $control['frontend_available'] ) ) {
[1117] Fix | Delete
$controls[] = $control['name'];
[1118] Fix | Delete
}
[1119] Fix | Delete
}
[1120] Fix | Delete
[1121] Fix | Delete
return $controls;
[1122] Fix | Delete
}
[1123] Fix | Delete
[1124] Fix | Delete
/**
[1125] Fix | Delete
* Get controls pointer index.
[1126] Fix | Delete
*
[1127] Fix | Delete
* Retrieve pointer index where the next control should be added.
[1128] Fix | Delete
*
[1129] Fix | Delete
* While using injection point, it will return the injection point index.
[1130] Fix | Delete
* Otherwise index of the last control plus one.
[1131] Fix | Delete
*
[1132] Fix | Delete
* @since 1.9.2
[1133] Fix | Delete
* @access public
[1134] Fix | Delete
*
[1135] Fix | Delete
* @return int Controls pointer index.
[1136] Fix | Delete
*/
[1137] Fix | Delete
public function get_pointer_index() {
[1138] Fix | Delete
if ( null !== $this->injection_point ) {
[1139] Fix | Delete
return $this->injection_point['index'];
[1140] Fix | Delete
}
[1141] Fix | Delete
[1142] Fix | Delete
return count( $this->get_controls() );
[1143] Fix | Delete
}
[1144] Fix | Delete
[1145] Fix | Delete
/**
[1146] Fix | Delete
* Get the raw data.
[1147] Fix | Delete
*
[1148] Fix | Delete
* Retrieve all the items or, when requested, a specific item.
[1149] Fix | Delete
*
[1150] Fix | Delete
* @since 1.4.0
[1151] Fix | Delete
* @access public
[1152] Fix | Delete
*
[1153] Fix | Delete
* @param string $item Optional. The requested item. Default is null.
[1154] Fix | Delete
*
[1155] Fix | Delete
* @return mixed The raw data.
[1156] Fix | Delete
*/
[1157] Fix | Delete
public function get_data( $item = null ) {
[1158] Fix | Delete
if ( ! $this->settings_sanitized && ( ! $item || 'settings' === $item ) ) {
[1159] Fix | Delete
$this->data['settings'] = $this->sanitize_settings( $this->data['settings'] );
[1160] Fix | Delete
[1161] Fix | Delete
$this->settings_sanitized = true;
[1162] Fix | Delete
}
[1163] Fix | Delete
[1164] Fix | Delete
return self::get_items( $this->data, $item );
[1165] Fix | Delete
}
[1166] Fix | Delete
[1167] Fix | Delete
/**
[1168] Fix | Delete
* @param null $setting
[1169] Fix | Delete
* @param null $settings
[1170] Fix | Delete
* @return array|mixed|null
[1171] Fix | Delete
* @since 2.0.14
[1172] Fix | Delete
* @access public
[1173] Fix | Delete
*/
[1174] Fix | Delete
public function get_parsed_dynamic_settings( $setting = null, $settings = null ) {
[1175] Fix | Delete
if ( null === $settings ) {
[1176] Fix | Delete
$settings = $this->get_settings();
[1177] Fix | Delete
}
[1178] Fix | Delete
[1179] Fix | Delete
if ( null === $this->parsed_dynamic_settings ) {
[1180] Fix | Delete
$this->parsed_dynamic_settings = $this->parse_dynamic_settings( $settings );
[1181] Fix | Delete
}
[1182] Fix | Delete
[1183] Fix | Delete
return self::get_items( $this->parsed_dynamic_settings, $setting );
[1184] Fix | Delete
}
[1185] Fix | Delete
[1186] Fix | Delete
/**
[1187] Fix | Delete
* Get active settings.
[1188] Fix | Delete
*
[1189] Fix | Delete
* Retrieve the settings from all the active controls.
[1190] Fix | Delete
*
[1191] Fix | Delete
* @param array|null $settings Optional. Controls settings. Default is null.
[1192] Fix | Delete
* @param array|null $controls Optional. An array of controls. Default is null.
[1193] Fix | Delete
*
[1194] Fix | Delete
* @return array Active settings.
[1195] Fix | Delete
* @since 2.1.0 Added the `controls` and the `settings` parameters.
[1196] Fix | Delete
* @access public
[1197] Fix | Delete
*
[1198] Fix | Delete
* @since 1.4.0
[1199] Fix | Delete
*/
[1200] Fix | Delete
public function get_active_settings( $settings = null, $controls = null ) {
[1201] Fix | Delete
$is_first_request = ! $settings && ! $this->active_settings;
[1202] Fix | Delete
[1203] Fix | Delete
if ( ! $settings ) {
[1204] Fix | Delete
if ( $this->active_settings ) {
[1205] Fix | Delete
return $this->active_settings;
[1206] Fix | Delete
}
[1207] Fix | Delete
[1208] Fix | Delete
$settings = $this->get_controls_settings();
[1209] Fix | Delete
[1210] Fix | Delete
$controls = $this->get_controls();
[1211] Fix | Delete
}
[1212] Fix | Delete
[1213] Fix | Delete
$active_settings = [];
[1214] Fix | Delete
[1215] Fix | Delete
$controls_objs = Plugin::$instance->controls_manager->get_controls();
[1216] Fix | Delete
[1217] Fix | Delete
foreach ( $settings as $setting_key => $setting ) {
[1218] Fix | Delete
if ( ! isset( $controls[ $setting_key ] ) ) {
[1219] Fix | Delete
$active_settings[ $setting_key ] = $setting;
[1220] Fix | Delete
[1221] Fix | Delete
continue;
[1222] Fix | Delete
}
[1223] Fix | Delete
[1224] Fix | Delete
$control = $controls[ $setting_key ];
[1225] Fix | Delete
[1226] Fix | Delete
if ( $this->is_control_visible( $control, $settings, $controls ) ) {
[1227] Fix | Delete
$control_obj = $controls_objs[ $control['type'] ] ?? null;
[1228] Fix | Delete
[1229] Fix | Delete
if ( $control_obj instanceof Control_Repeater ) {
[1230] Fix | Delete
foreach ( $setting as & $item ) {
[1231] Fix | Delete
$item = $this->get_active_settings( $item, $control['fields'] );
[1232] Fix | Delete
}
[1233] Fix | Delete
}
[1234] Fix | Delete
[1235] Fix | Delete
$active_settings[ $setting_key ] = $setting;
[1236] Fix | Delete
} else {
[1237] Fix | Delete
$active_settings[ $setting_key ] = null;
[1238] Fix | Delete
}
[1239] Fix | Delete
}
[1240] Fix | Delete
[1241] Fix | Delete
if ( $is_first_request ) {
[1242] Fix | Delete
$this->active_settings = $active_settings;
[1243] Fix | Delete
}
[1244] Fix | Delete
[1245] Fix | Delete
return $active_settings;
[1246] Fix | Delete
}
[1247] Fix | Delete
[1248] Fix | Delete
/**
[1249] Fix | Delete
* Get settings for display.
[1250] Fix | Delete
*
[1251] Fix | Delete
* Retrieve all the settings or, when requested, a specific setting for display.
[1252] Fix | Delete
*
[1253] Fix | Delete
* Unlike `get_settings()` method, this method retrieves only active settings
[1254] Fix | Delete
* that passed all the conditions, rendered all the shortcodes and all the dynamic
[1255] Fix | Delete
* tags.
[1256] Fix | Delete
*
[1257] Fix | Delete
* @since 2.0.0
[1258] Fix | Delete
* @access public
[1259] Fix | Delete
*
[1260] Fix | Delete
* @param string $setting_key Optional. The key of the requested setting.
[1261] Fix | Delete
* Default is null.
[1262] Fix | Delete
*
[1263] Fix | Delete
* @return mixed The settings.
[1264] Fix | Delete
*/
[1265] Fix | Delete
public function get_settings_for_display( $setting_key = null ) {
[1266] Fix | Delete
if ( ! $this->parsed_active_settings ) {
[1267] Fix | Delete
$this->parsed_active_settings = $this->get_active_settings( $this->get_parsed_dynamic_settings(), $this->get_controls() );
[1268] Fix | Delete
}
[1269] Fix | Delete
[1270] Fix | Delete
return self::get_items( $this->parsed_active_settings, $setting_key );
[1271] Fix | Delete
}
[1272] Fix | Delete
[1273] Fix | Delete
/**
[1274] Fix | Delete
* Parse dynamic settings.
[1275] Fix | Delete
*
[1276] Fix | Delete
* Retrieve the settings with rendered dynamic tags.
[1277] Fix | Delete
*
[1278] Fix | Delete
* @since 2.0.0
[1279] Fix | Delete
* @access public
[1280] Fix | Delete
*
[1281] Fix | Delete
* @param array $settings Optional. The requested setting. Default is null.
[1282] Fix | Delete
* @param array $controls Optional. The controls array. Default is null.
[1283] Fix | Delete
* @param array $all_settings Optional. All the settings. Default is null.
[1284] Fix | Delete
*
[1285] Fix | Delete
* @return array The settings with rendered dynamic tags.
[1286] Fix | Delete
*/
[1287] Fix | Delete
public function parse_dynamic_settings( $settings, $controls = null, $all_settings = null ) {
[1288] Fix | Delete
if ( null === $all_settings ) {
[1289] Fix | Delete
$all_settings = $this->get_settings();
[1290] Fix | Delete
}
[1291] Fix | Delete
[1292] Fix | Delete
if ( null === $controls ) {
[1293] Fix | Delete
$controls = $this->get_controls();
[1294] Fix | Delete
}
[1295] Fix | Delete
[1296] Fix | Delete
$controls_objs = Plugin::$instance->controls_manager->get_controls();
[1297] Fix | Delete
[1298] Fix | Delete
foreach ( $controls as $control ) {
[1299] Fix | Delete
$control_name = $control['name'];
[1300] Fix | Delete
$control_obj = $controls_objs[ $control['type'] ] ?? null;
[1301] Fix | Delete
[1302] Fix | Delete
if ( ! $control_obj instanceof Base_Data_Control ) {
[1303] Fix | Delete
continue;
[1304] Fix | Delete
}
[1305] Fix | Delete
[1306] Fix | Delete
if ( $control_obj instanceof Control_Repeater ) {
[1307] Fix | Delete
if ( ! isset( $settings[ $control_name ] ) ) {
[1308] Fix | Delete
continue;
[1309] Fix | Delete
}
[1310] Fix | Delete
[1311] Fix | Delete
foreach ( $settings[ $control_name ] as & $field ) {
[1312] Fix | Delete
$field = $this->parse_dynamic_settings( $field, $control['fields'], $field );
[1313] Fix | Delete
}
[1314] Fix | Delete
[1315] Fix | Delete
continue;
[1316] Fix | Delete
}
[1317] Fix | Delete
[1318] Fix | Delete
$dynamic_settings = $control_obj->get_settings( 'dynamic' );
[1319] Fix | Delete
[1320] Fix | Delete
if ( ! $dynamic_settings ) {
[1321] Fix | Delete
$dynamic_settings = [];
[1322] Fix | Delete
}
[1323] Fix | Delete
[1324] Fix | Delete
if ( ! empty( $control['dynamic'] ) ) {
[1325] Fix | Delete
$dynamic_settings = array_merge( $dynamic_settings, $control['dynamic'] );
[1326] Fix | Delete
}
[1327] Fix | Delete
[1328] Fix | Delete
if ( empty( $dynamic_settings ) || ! isset( $all_settings[ Manager::DYNAMIC_SETTING_KEY ][ $control_name ] ) ) {
[1329] Fix | Delete
continue;
[1330] Fix | Delete
}
[1331] Fix | Delete
[1332] Fix | Delete
if ( ! empty( $dynamic_settings['active'] ) && ! empty( $all_settings[ Manager::DYNAMIC_SETTING_KEY ][ $control_name ] ) ) {
[1333] Fix | Delete
$parsed_value = $control_obj->parse_tags( $all_settings[ Manager::DYNAMIC_SETTING_KEY ][ $control_name ], $dynamic_settings );
[1334] Fix | Delete
[1335] Fix | Delete
$dynamic_property = ! empty( $dynamic_settings['property'] ) ? $dynamic_settings['property'] : null;
[1336] Fix | Delete
[1337] Fix | Delete
if ( $dynamic_property ) {
[1338] Fix | Delete
$settings[ $control_name ][ $dynamic_property ] = $parsed_value;
[1339] Fix | Delete
} else {
[1340] Fix | Delete
$settings[ $control_name ] = $parsed_value;
[1341] Fix | Delete
}
[1342] Fix | Delete
}
[1343] Fix | Delete
}
[1344] Fix | Delete
[1345] Fix | Delete
return $settings;
[1346] Fix | Delete
}
[1347] Fix | Delete
[1348] Fix | Delete
/**
[1349] Fix | Delete
* Get frontend settings.
[1350] Fix | Delete
*
[1351] Fix | Delete
* Retrieve the settings for all frontend controls.
[1352] Fix | Delete
*
[1353] Fix | Delete
* @since 1.6.0
[1354] Fix | Delete
* @access public
[1355] Fix | Delete
*
[1356] Fix | Delete
* @return array Frontend settings.
[1357] Fix | Delete
*/
[1358] Fix | Delete
public function get_frontend_settings() {
[1359] Fix | Delete
$frontend_settings = array_intersect_key( $this->get_settings_for_display(), array_flip( $this->get_frontend_settings_keys() ) );
[1360] Fix | Delete
[1361] Fix | Delete
foreach ( $frontend_settings as $key => $setting ) {
[1362] Fix | Delete
if ( in_array( $setting, [ null, '' ], true ) ) {
[1363] Fix | Delete
unset( $frontend_settings[ $key ] );
[1364] Fix | Delete
}
[1365] Fix | Delete
}
[1366] Fix | Delete
[1367] Fix | Delete
return $frontend_settings;
[1368] Fix | Delete
}
[1369] Fix | Delete
[1370] Fix | Delete
/**
[1371] Fix | Delete
* Filter controls settings.
[1372] Fix | Delete
*
[1373] Fix | Delete
* Receives controls, settings and a callback function to filter the settings by
[1374] Fix | Delete
* and returns filtered settings.
[1375] Fix | Delete
*
[1376] Fix | Delete
* @since 1.5.0
[1377] Fix | Delete
* @access public
[1378] Fix | Delete
*
[1379] Fix | Delete
* @param callable $callback The callback function.
[1380] Fix | Delete
* @param array $settings Optional. Control settings. Default is an empty
[1381] Fix | Delete
* array.
[1382] Fix | Delete
* @param array $controls Optional. Controls list. Default is an empty
[1383] Fix | Delete
* array.
[1384] Fix | Delete
*
[1385] Fix | Delete
* @return array Filtered settings.
[1386] Fix | Delete
*/
[1387] Fix | Delete
public function filter_controls_settings( callable $callback, array $settings = [], array $controls = [] ) {
[1388] Fix | Delete
if ( ! $settings ) {
[1389] Fix | Delete
$settings = $this->get_settings();
[1390] Fix | Delete
}
[1391] Fix | Delete
[1392] Fix | Delete
if ( ! $controls ) {
[1393] Fix | Delete
$controls = $this->get_controls();
[1394] Fix | Delete
}
[1395] Fix | Delete
[1396] Fix | Delete
return array_reduce(
[1397] Fix | Delete
array_keys( $settings ), function( $filtered_settings, $setting_key ) use ( $controls, $settings, $callback ) {
[1398] Fix | Delete
if ( isset( $controls[ $setting_key ] ) ) {
[1399] Fix | Delete
$result = $callback( $settings[ $setting_key ], $controls[ $setting_key ] );
[1400] Fix | Delete
[1401] Fix | Delete
if ( null !== $result ) {
[1402] Fix | Delete
$filtered_settings[ $setting_key ] = $result;
[1403] Fix | Delete
}
[1404] Fix | Delete
}
[1405] Fix | Delete
[1406] Fix | Delete
return $filtered_settings;
[1407] Fix | Delete
}, []
[1408] Fix | Delete
);
[1409] Fix | Delete
}
[1410] Fix | Delete
[1411] Fix | Delete
/**
[1412] Fix | Delete
* Get Responsive Control Device Suffix
[1413] Fix | Delete
*
[1414] Fix | Delete
* @deprecated 3.7.6 Use `Elementor\Controls_Manager::get_responsive_control_device_suffix()` instead.
[1415] Fix | Delete
* @param array $control
[1416] Fix | Delete
* @return string $device suffix
[1417] Fix | Delete
*/
[1418] Fix | Delete
protected function get_responsive_control_device_suffix( $control ) {
[1419] Fix | Delete
Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.7.6', 'Elementor\Controls_Manager::get_responsive_control_device_suffix()' );
[1420] Fix | Delete
[1421] Fix | Delete
return Controls_Manager::get_responsive_control_device_suffix( $control );
[1422] Fix | Delete
}
[1423] Fix | Delete
[1424] Fix | Delete
/**
[1425] Fix | Delete
* Whether the control is visible or not.
[1426] Fix | Delete
*
[1427] Fix | Delete
* Used to determine whether the control is visible or not.
[1428] Fix | Delete
*
[1429] Fix | Delete
* @param array $control The control.
[1430] Fix | Delete
* @param null $values Optional. Condition values. Default is null.
[1431] Fix | Delete
* @param null $controls
[1432] Fix | Delete
* @return bool Whether the control is visible.
[1433] Fix | Delete
* @since 1.4.0
[1434] Fix | Delete
* @access public
[1435] Fix | Delete
*/
[1436] Fix | Delete
public function is_control_visible( $control, $values = null, $controls = null ) {
[1437] Fix | Delete
if ( null === $values ) {
[1438] Fix | Delete
$values = $this->get_settings();
[1439] Fix | Delete
}
[1440] Fix | Delete
[1441] Fix | Delete
if ( ! empty( $control['conditions'] ) && ! Conditions::check( $control['conditions'], $values ) ) {
[1442] Fix | Delete
return false;
[1443] Fix | Delete
}
[1444] Fix | Delete
[1445] Fix | Delete
if ( empty( $control['condition'] ) ) {
[1446] Fix | Delete
return true;
[1447] Fix | Delete
}
[1448] Fix | Delete
[1449] Fix | Delete
if ( ! $controls ) {
[1450] Fix | Delete
$controls = $this->get_controls();
[1451] Fix | Delete
}
[1452] Fix | Delete
[1453] Fix | Delete
foreach ( $control['condition'] as $condition_key => $condition_value ) {
[1454] Fix | Delete
preg_match( '/([a-z_\-0-9]+)(?:\[([a-z_]+)])?(!?)$/i', $condition_key, $condition_key_parts );
[1455] Fix | Delete
[1456] Fix | Delete
$pure_condition_key = $condition_key_parts[1];
[1457] Fix | Delete
$condition_sub_key = $condition_key_parts[2];
[1458] Fix | Delete
$is_negative_condition = (bool) $condition_key_parts[3];
[1459] Fix | Delete
[1460] Fix | Delete
if ( ! isset( $values[ $pure_condition_key ] ) || null === $values[ $pure_condition_key ] ) {
[1461] Fix | Delete
return false;
[1462] Fix | Delete
}
[1463] Fix | Delete
[1464] Fix | Delete
$are_control_and_condition_responsive = isset( $control['responsive'] ) && ! empty( $controls[ $pure_condition_key ]['responsive'] );
[1465] Fix | Delete
$condition_name_to_check = $pure_condition_key;
[1466] Fix | Delete
[1467] Fix | Delete
if ( $are_control_and_condition_responsive ) {
[1468] Fix | Delete
$device_suffix = Controls_Manager::get_responsive_control_device_suffix( $control );
[1469] Fix | Delete
[1470] Fix | Delete
$condition_name_to_check = $pure_condition_key . $device_suffix;
[1471] Fix | Delete
[1472] Fix | Delete
// If the control is not desktop, and a conditioning control for the corresponding device exists, use it.
[1473] Fix | Delete
$instance_value = $values[ $pure_condition_key . $device_suffix ] ?? $values[ $pure_condition_key ];
[1474] Fix | Delete
} else {
[1475] Fix | Delete
$instance_value = $values[ $pure_condition_key ];
[1476] Fix | Delete
}
[1477] Fix | Delete
[1478] Fix | Delete
if ( $condition_sub_key && is_array( $instance_value ) ) {
[1479] Fix | Delete
if ( ! isset( $instance_value[ $condition_sub_key ] ) ) {
[1480] Fix | Delete
return false;
[1481] Fix | Delete
}
[1482] Fix | Delete
[1483] Fix | Delete
$instance_value = $instance_value[ $condition_sub_key ];
[1484] Fix | Delete
}
[1485] Fix | Delete
[1486] Fix | Delete
if ( ! $instance_value ) {
[1487] Fix | Delete
$parent = isset( $controls[ $condition_name_to_check ]['parent'] ) ? $controls[ $condition_name_to_check ]['parent'] : false;
[1488] Fix | Delete
[1489] Fix | Delete
while ( $parent ) {
[1490] Fix | Delete
$instance_value = $values[ $parent ];
[1491] Fix | Delete
[1492] Fix | Delete
if ( $instance_value ) {
[1493] Fix | Delete
if ( ! is_array( $instance_value ) ) {
[1494] Fix | Delete
break;
[1495] Fix | Delete
}
[1496] Fix | Delete
[1497] Fix | Delete
if ( $condition_sub_key && isset( $instance_value[ $condition_sub_key ] ) ) {
[1498] Fix | Delete
$instance_value = $instance_value[ $condition_sub_key ];
[1499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function