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/module/helpers
File: MultiViewOptions.php
if ( ! is_wp_error( $value ) ) {
[1500] Fix | Delete
// Update the multi content data.
[1501] Fix | Delete
$data['desktop'] = $value;
[1502] Fix | Delete
}
[1503] Fix | Delete
}
[1504] Fix | Delete
[1505] Fix | Delete
return $data;
[1506] Fix | Delete
}
[1507] Fix | Delete
[1508] Fix | Delete
/**
[1509] Fix | Delete
* Populate attrs data context.
[1510] Fix | Delete
*
[1511] Fix | Delete
* @since 3.27.1
[1512] Fix | Delete
*
[1513] Fix | Delete
* @param array $attrs Data contexts.
[1514] Fix | Delete
*
[1515] Fix | Delete
* @return array
[1516] Fix | Delete
*/
[1517] Fix | Delete
protected function populate_data__attrs( $attrs ) {
[1518] Fix | Delete
if ( ! $attrs || ! is_array( $attrs ) ) {
[1519] Fix | Delete
return new WP_Error();
[1520] Fix | Delete
}
[1521] Fix | Delete
[1522] Fix | Delete
$data = array();
[1523] Fix | Delete
[1524] Fix | Delete
foreach ( $attrs as $attr_key => $attr_value ) {
[1525] Fix | Delete
if ( preg_match_all( $this->pattern, $attr_value, $matches, PREG_SET_ORDER, 0 ) ) {
[1526] Fix | Delete
foreach ( $matches as $match ) {
[1527] Fix | Delete
if ( ! isset( $match[1] ) ) {
[1528] Fix | Delete
continue;
[1529] Fix | Delete
}
[1530] Fix | Delete
[1531] Fix | Delete
$values = $this->get_values( $match[1] );
[1532] Fix | Delete
[1533] Fix | Delete
if ( $values ) {
[1534] Fix | Delete
foreach ( $values as $mode => $value ) {
[1535] Fix | Delete
// Manipulate the value if needed.
[1536] Fix | Delete
$value = $this->filter_value(
[1537] Fix | Delete
$value,
[1538] Fix | Delete
array(
[1539] Fix | Delete
'context' => 'attrs',
[1540] Fix | Delete
'mode' => $mode,
[1541] Fix | Delete
'name' => $match[1],
[1542] Fix | Delete
'attr_key' => $attr_key,
[1543] Fix | Delete
)
[1544] Fix | Delete
);
[1545] Fix | Delete
[1546] Fix | Delete
if ( ! is_wp_error( $value ) ) {
[1547] Fix | Delete
$value = et_core_esc_attr( $attr_key, $value );
[1548] Fix | Delete
}
[1549] Fix | Delete
[1550] Fix | Delete
if ( ! is_wp_error( $value ) ) {
[1551] Fix | Delete
if ( ! isset( $data[ $mode ][ $attr_key ] ) ) {
[1552] Fix | Delete
$data[ $mode ][ $attr_key ] = $attr_value;
[1553] Fix | Delete
}
[1554] Fix | Delete
[1555] Fix | Delete
$data[ $mode ][ $attr_key ] = str_replace( $match[0], $value, $data[ $mode ][ $attr_key ] );
[1556] Fix | Delete
}
[1557] Fix | Delete
}
[1558] Fix | Delete
}
[1559] Fix | Delete
}
[1560] Fix | Delete
} else {
[1561] Fix | Delete
// Manipulate the value if needed.
[1562] Fix | Delete
$attr_value = $this->filter_value(
[1563] Fix | Delete
$attr_value,
[1564] Fix | Delete
array(
[1565] Fix | Delete
'context' => 'attrs',
[1566] Fix | Delete
'mode' => 'desktop',
[1567] Fix | Delete
'attr_key' => $attr_key,
[1568] Fix | Delete
)
[1569] Fix | Delete
);
[1570] Fix | Delete
[1571] Fix | Delete
if ( ! is_wp_error( $attr_value ) ) {
[1572] Fix | Delete
$attr_value = et_core_esc_attr( $attr_key, $attr_value );
[1573] Fix | Delete
}
[1574] Fix | Delete
[1575] Fix | Delete
if ( ! is_wp_error( $attr_value ) ) {
[1576] Fix | Delete
// Update the multi content data.
[1577] Fix | Delete
$data['desktop'][ $attr_key ] = $attr_value;
[1578] Fix | Delete
}
[1579] Fix | Delete
}
[1580] Fix | Delete
}
[1581] Fix | Delete
[1582] Fix | Delete
return $data;
[1583] Fix | Delete
}
[1584] Fix | Delete
[1585] Fix | Delete
/**
[1586] Fix | Delete
* Populate styles data context.
[1587] Fix | Delete
*
[1588] Fix | Delete
* @since 3.27.1
[1589] Fix | Delete
*
[1590] Fix | Delete
* @param array $styles Data contexts.
[1591] Fix | Delete
*
[1592] Fix | Delete
* @return array
[1593] Fix | Delete
*/
[1594] Fix | Delete
protected function populate_data__styles( $styles ) {
[1595] Fix | Delete
if ( ! $styles || ! is_array( $styles ) ) {
[1596] Fix | Delete
return new WP_Error();
[1597] Fix | Delete
}
[1598] Fix | Delete
[1599] Fix | Delete
$data = array();
[1600] Fix | Delete
[1601] Fix | Delete
foreach ( $styles as $style_key => $style_value ) {
[1602] Fix | Delete
if ( preg_match_all( $this->pattern, $style_value, $matches, PREG_SET_ORDER, 0 ) ) {
[1603] Fix | Delete
foreach ( $matches as $match ) {
[1604] Fix | Delete
if ( ! isset( $match[1] ) ) {
[1605] Fix | Delete
continue;
[1606] Fix | Delete
}
[1607] Fix | Delete
[1608] Fix | Delete
$values = $this->get_values( $match[1] );
[1609] Fix | Delete
[1610] Fix | Delete
if ( $values ) {
[1611] Fix | Delete
foreach ( $values as $mode => $value ) {
[1612] Fix | Delete
// Manipulate the value if needed.
[1613] Fix | Delete
$value = $this->filter_value(
[1614] Fix | Delete
$value,
[1615] Fix | Delete
array(
[1616] Fix | Delete
'context' => 'styles',
[1617] Fix | Delete
'mode' => $mode,
[1618] Fix | Delete
'name' => $match[1],
[1619] Fix | Delete
'style_key' => $style_key,
[1620] Fix | Delete
)
[1621] Fix | Delete
);
[1622] Fix | Delete
[1623] Fix | Delete
if ( ! is_wp_error( $value ) ) {
[1624] Fix | Delete
if ( ! isset( $data[ $mode ][ $style_key ] ) ) {
[1625] Fix | Delete
$data[ $mode ][ $style_key ] = $style_value;
[1626] Fix | Delete
}
[1627] Fix | Delete
[1628] Fix | Delete
$full_style_value = str_replace( $match[0], $value, $data[ $mode ][ $style_key ] );
[1629] Fix | Delete
[1630] Fix | Delete
if ( ! is_wp_error( et_core_esc_attr( 'style', $style_key . ':' . $full_style_value ) ) ) {
[1631] Fix | Delete
$data[ $mode ][ $style_key ] = $full_style_value;
[1632] Fix | Delete
}
[1633] Fix | Delete
}
[1634] Fix | Delete
}
[1635] Fix | Delete
}
[1636] Fix | Delete
}
[1637] Fix | Delete
} else {
[1638] Fix | Delete
// Manipulate the value if needed.
[1639] Fix | Delete
$style_value = $this->filter_value(
[1640] Fix | Delete
$style_value,
[1641] Fix | Delete
array(
[1642] Fix | Delete
'context' => 'styles',
[1643] Fix | Delete
'mode' => 'desktop',
[1644] Fix | Delete
'style_key' => $style_key,
[1645] Fix | Delete
)
[1646] Fix | Delete
);
[1647] Fix | Delete
[1648] Fix | Delete
if ( ! is_wp_error( $style_value ) && ! is_wp_error( et_core_esc_attr( 'style', $style_key . ':' . $style_value ) ) ) {
[1649] Fix | Delete
$data['desktop'][ $style_key ] = $style_value;
[1650] Fix | Delete
}
[1651] Fix | Delete
}
[1652] Fix | Delete
}
[1653] Fix | Delete
[1654] Fix | Delete
return $data;
[1655] Fix | Delete
}
[1656] Fix | Delete
[1657] Fix | Delete
/**
[1658] Fix | Delete
* Populate classes data context.
[1659] Fix | Delete
*
[1660] Fix | Delete
* @since 3.27.1
[1661] Fix | Delete
*
[1662] Fix | Delete
* @param array $classes Data contexts.
[1663] Fix | Delete
*
[1664] Fix | Delete
* @return array
[1665] Fix | Delete
*/
[1666] Fix | Delete
protected function populate_data__classes( $classes ) {
[1667] Fix | Delete
if ( ! $classes || ! is_array( $classes ) ) {
[1668] Fix | Delete
return new WP_Error();
[1669] Fix | Delete
}
[1670] Fix | Delete
[1671] Fix | Delete
$data = array();
[1672] Fix | Delete
[1673] Fix | Delete
foreach ( self::get_modes() as $mode ) {
[1674] Fix | Delete
foreach ( $classes as $class_name => $conditionals ) {
[1675] Fix | Delete
$class_name = et_core_esc_attr( 'class', $class_name );
[1676] Fix | Delete
[1677] Fix | Delete
if ( is_wp_error( $class_name ) ) {
[1678] Fix | Delete
continue;
[1679] Fix | Delete
}
[1680] Fix | Delete
[1681] Fix | Delete
$conditionals_match = array();
[1682] Fix | Delete
[1683] Fix | Delete
foreach ( $conditionals as $name => $value_compare ) {
[1684] Fix | Delete
$value = $this->get_inherit_value( $name, $mode );
[1685] Fix | Delete
[1686] Fix | Delete
// Manipulate the value if needed.
[1687] Fix | Delete
$value = $this->filter_value(
[1688] Fix | Delete
$value,
[1689] Fix | Delete
array(
[1690] Fix | Delete
'context' => 'classes',
[1691] Fix | Delete
'mode' => $mode,
[1692] Fix | Delete
'name' => $name,
[1693] Fix | Delete
)
[1694] Fix | Delete
);
[1695] Fix | Delete
[1696] Fix | Delete
if ( ! is_wp_error( $value ) ) {
[1697] Fix | Delete
$conditionals_match[ $name ] = self::compare_value( $value, $value_compare ) ? 1 : 0;
[1698] Fix | Delete
}
[1699] Fix | Delete
}
[1700] Fix | Delete
[1701] Fix | Delete
$action = count( $conditionals ) === array_sum( $conditionals_match ) ? 'add' : 'remove';
[1702] Fix | Delete
[1703] Fix | Delete
if ( ! isset( $data[ $mode ][ $action ] ) ) {
[1704] Fix | Delete
$data[ $mode ][ $action ] = array();
[1705] Fix | Delete
}
[1706] Fix | Delete
[1707] Fix | Delete
$data[ $mode ][ $action ][] = $class_name;
[1708] Fix | Delete
}
[1709] Fix | Delete
}
[1710] Fix | Delete
[1711] Fix | Delete
return $data;
[1712] Fix | Delete
}
[1713] Fix | Delete
[1714] Fix | Delete
/**
[1715] Fix | Delete
* Populate visibility data context.
[1716] Fix | Delete
*
[1717] Fix | Delete
* @since 3.27.1
[1718] Fix | Delete
*
[1719] Fix | Delete
* @param array $visibility Data contexts.
[1720] Fix | Delete
*
[1721] Fix | Delete
* @return array
[1722] Fix | Delete
*/
[1723] Fix | Delete
protected function populate_data__visibility( $visibility ) {
[1724] Fix | Delete
if ( ! $visibility || ! is_array( $visibility ) ) {
[1725] Fix | Delete
return new WP_Error();
[1726] Fix | Delete
}
[1727] Fix | Delete
[1728] Fix | Delete
$data = array();
[1729] Fix | Delete
[1730] Fix | Delete
foreach ( self::get_modes() as $mode ) {
[1731] Fix | Delete
if ( ! isset( $data[ $mode ] ) ) {
[1732] Fix | Delete
$data[ $mode ] = array();
[1733] Fix | Delete
}
[1734] Fix | Delete
[1735] Fix | Delete
foreach ( $visibility as $name => $value_compare ) {
[1736] Fix | Delete
$value = $this->get_inherit_value( $name, $mode );
[1737] Fix | Delete
[1738] Fix | Delete
// Manipulate the value if needed.
[1739] Fix | Delete
$value = $this->filter_value(
[1740] Fix | Delete
$value,
[1741] Fix | Delete
array(
[1742] Fix | Delete
'context' => 'visibility',
[1743] Fix | Delete
'mode' => $mode,
[1744] Fix | Delete
'name' => $name,
[1745] Fix | Delete
)
[1746] Fix | Delete
);
[1747] Fix | Delete
[1748] Fix | Delete
if ( ! is_wp_error( $value ) ) {
[1749] Fix | Delete
$data[ $mode ][ $name ] = self::compare_value( $value, $value_compare ) ? 1 : 0;
[1750] Fix | Delete
}
[1751] Fix | Delete
}
[1752] Fix | Delete
}
[1753] Fix | Delete
[1754] Fix | Delete
foreach ( $data as $mode => $value ) {
[1755] Fix | Delete
$data[ $mode ] = count( $value ) === array_sum( $value );
[1756] Fix | Delete
}
[1757] Fix | Delete
[1758] Fix | Delete
return $data;
[1759] Fix | Delete
}
[1760] Fix | Delete
[1761] Fix | Delete
/**
[1762] Fix | Delete
* Props value filter.
[1763] Fix | Delete
*
[1764] Fix | Delete
* @since 3.27.1
[1765] Fix | Delete
*
[1766] Fix | Delete
* @param mixed $raw_value Props raw value.
[1767] Fix | Delete
* @param array $args {
[1768] Fix | Delete
* Context data.
[1769] Fix | Delete
*
[1770] Fix | Delete
* @type string $context Context param: content, attrs, visibility, classes.
[1771] Fix | Delete
* @type string $name Module options props name.
[1772] Fix | Delete
* @type string $mode Current data mode: desktop, hover, tablet, phone.
[1773] Fix | Delete
* @type string $attr_key Attribute key for attrs context data. Example: src, class, etc.
[1774] Fix | Delete
* @type string $attr_sub_key Attribute sub key that available when passing attrs value as array such as styes. Example: padding-top, margin-bottom, etc.
[1775] Fix | Delete
* }
[1776] Fix | Delete
*
[1777] Fix | Delete
* @return mixed|WP_Error return WP_Error to skip the data.
[1778] Fix | Delete
*/
[1779] Fix | Delete
protected function filter_value( $raw_value, $args = array() ) {
[1780] Fix | Delete
if ( $this->module instanceof ET_Builder_Element && method_exists( $this->module, 'multi_view_filter_value' ) && is_callable( array( $this->module, 'multi_view_filter_value' ) ) ) {
[1781] Fix | Delete
/**
[1782] Fix | Delete
* Execute the filter value function defined for current module.
[1783] Fix | Delete
*
[1784] Fix | Delete
* @since 3.27.1
[1785] Fix | Delete
*
[1786] Fix | Delete
* @param mixed $raw_value Props raw value.
[1787] Fix | Delete
* @param array $args {
[1788] Fix | Delete
* Context data.
[1789] Fix | Delete
*
[1790] Fix | Delete
* @type string $context Context param: content, attrs, visibility, classes.
[1791] Fix | Delete
* @type string $name Module options props name.
[1792] Fix | Delete
* @type string $mode Current data mode: desktop, hover, tablet, phone.
[1793] Fix | Delete
* @type string $attr_key Attribute key for attrs context data. Example: src, class, etc.
[1794] Fix | Delete
* @type string $attr_sub_key Attribute sub key that available when passing attrs value as array such as styes. Example: padding-top, margin-bottom, etc.
[1795] Fix | Delete
* }
[1796] Fix | Delete
* @param ET_Builder_Module_Helper_MultiViewOptions $multi_view Current instance.
[1797] Fix | Delete
*
[1798] Fix | Delete
* @return mixed
[1799] Fix | Delete
*/
[1800] Fix | Delete
// @phpcs:ignore Generic.PHP.ForbiddenFunctions.Found
[1801] Fix | Delete
$raw_value = call_user_func( array( $this->module, 'multi_view_filter_value' ), $raw_value, $args, $this );
[1802] Fix | Delete
[1803] Fix | Delete
// Bail early if the $raw_value is WP_error object.
[1804] Fix | Delete
if ( is_wp_error( $raw_value ) ) {
[1805] Fix | Delete
return $raw_value;
[1806] Fix | Delete
}
[1807] Fix | Delete
}
[1808] Fix | Delete
[1809] Fix | Delete
$context = isset( $args['context'] ) ? $args['context'] : '';
[1810] Fix | Delete
$name = isset( $args['name'] ) ? $args['name'] : '';
[1811] Fix | Delete
$mode = isset( $args['mode'] ) ? $args['mode'] : 'desktop';
[1812] Fix | Delete
[1813] Fix | Delete
$content_fields = array(
[1814] Fix | Delete
'content',
[1815] Fix | Delete
'raw_content',
[1816] Fix | Delete
'description',
[1817] Fix | Delete
'footer_content',
[1818] Fix | Delete
);
[1819] Fix | Delete
[1820] Fix | Delete
if ( $raw_value && 'content' === $context && 'desktop' !== $mode && in_array( $name, $content_fields, true ) ) {
[1821] Fix | Delete
$raw_value = str_replace( array( '%22', '%92', '%91', '%93' ), array( '"', '\\', '[', ']' ), $raw_value );
[1822] Fix | Delete
[1823] Fix | Delete
// Cleaning up invalid starting <\p> tag.
[1824] Fix | Delete
$cleaned_value = preg_replace( '/(^<\/p>)(.*)/ius', '$2', $raw_value );
[1825] Fix | Delete
[1826] Fix | Delete
// Cleaning up invalid ending <p> tag.
[1827] Fix | Delete
$cleaned_value = preg_replace( '/(.*)(<p>$)/ius', '$1', $cleaned_value );
[1828] Fix | Delete
[1829] Fix | Delete
// Override the raw value.
[1830] Fix | Delete
if ( $raw_value !== $cleaned_value ) {
[1831] Fix | Delete
$raw_value = trim( $cleaned_value, "\n" );
[1832] Fix | Delete
[1833] Fix | Delete
if ( 'raw_content' !== $name ) {
[1834] Fix | Delete
$raw_value = force_balance_tags( $raw_value );
[1835] Fix | Delete
}
[1836] Fix | Delete
}
[1837] Fix | Delete
[1838] Fix | Delete
// Try to process shortcode.
[1839] Fix | Delete
if ( false !== strpos( $raw_value, '&#91;' ) && false !== strpos( $raw_value, '&#93;' ) ) {
[1840] Fix | Delete
$raw_value = do_shortcode( et_pb_fix_shortcodes( str_replace( array( '&#91;', '&#93;' ), array( '[', ']' ), $raw_value ), true ) );
[1841] Fix | Delete
}
[1842] Fix | Delete
}
[1843] Fix | Delete
[1844] Fix | Delete
return $raw_value;
[1845] Fix | Delete
}
[1846] Fix | Delete
[1847] Fix | Delete
/**
[1848] Fix | Delete
* Filter populated multi view data
[1849] Fix | Delete
*
[1850] Fix | Delete
* The use case of this method is to manipulate populated data such as injecting srcset attributes.
[1851] Fix | Delete
*
[1852] Fix | Delete
* @since 3.27.1
[1853] Fix | Delete
*
[1854] Fix | Delete
* @param array $data All populated raw data. The value value passed to this method has been processed by filter_value method.
[1855] Fix | Delete
*
[1856] Fix | Delete
* @return array
[1857] Fix | Delete
*/
[1858] Fix | Delete
protected function filter_data( $data ) {
[1859] Fix | Delete
static $defaults = array( false, false, false, false );
[1860] Fix | Delete
[1861] Fix | Delete
// Inject the image srcset and sizes attributes data.
[1862] Fix | Delete
if ( ! empty( $data['attrs'] ) && et_is_responsive_images_enabled() ) {
[1863] Fix | Delete
foreach ( $data['attrs'] as $mode => $attrs ) {
[1864] Fix | Delete
// Skip if src attr is empty.
[1865] Fix | Delete
if ( ! isset( $attrs['src'] ) ) {
[1866] Fix | Delete
continue;
[1867] Fix | Delete
}
[1868] Fix | Delete
[1869] Fix | Delete
$srcset_sizes = et_get_image_srcset_sizes( $attrs['src'] );
[1870] Fix | Delete
[1871] Fix | Delete
if ( isset( $srcset_sizes['srcset'], $srcset_sizes['sizes'] ) && $srcset_sizes['srcset'] && $srcset_sizes['sizes'] ) {
[1872] Fix | Delete
$data['attrs'][ $mode ]['srcset'] = $srcset_sizes['srcset'];
[1873] Fix | Delete
$data['attrs'][ $mode ]['sizes'] = $srcset_sizes['sizes'];
[1874] Fix | Delete
} else {
[1875] Fix | Delete
unset( $data['attrs'][ $mode ]['srcset'] );
[1876] Fix | Delete
unset( $data['attrs'][ $mode ]['sizes'] );
[1877] Fix | Delete
}
[1878] Fix | Delete
}
[1879] Fix | Delete
}
[1880] Fix | Delete
[1881] Fix | Delete
if ( $this->module instanceof ET_Builder_Element && method_exists( $this->module, 'multi_view_filter_data' ) && is_callable( array( $this->module, 'multi_view_filter_data' ) ) ) {
[1882] Fix | Delete
/**
[1883] Fix | Delete
* Execute the filter data function defined for current module.
[1884] Fix | Delete
*
[1885] Fix | Delete
* @since 3.27.1
[1886] Fix | Delete
*
[1887] Fix | Delete
* @param mixed $data All populated raw data.
[1888] Fix | Delete
* @param ET_Builder_Module_Helper_MultiViewOptions $multi_view Current instance.
[1889] Fix | Delete
*
[1890] Fix | Delete
* @return mixed
[1891] Fix | Delete
*/
[1892] Fix | Delete
// @phpcs:ignore Generic.PHP.ForbiddenFunctions.Found
[1893] Fix | Delete
$data = call_user_func( array( $this->module, 'multi_view_filter_data' ), $data, $this );
[1894] Fix | Delete
}
[1895] Fix | Delete
[1896] Fix | Delete
return $data;
[1897] Fix | Delete
}
[1898] Fix | Delete
[1899] Fix | Delete
/**
[1900] Fix | Delete
* Normalize values to inject value for all modes
[1901] Fix | Delete
*
[1902] Fix | Delete
* @since 3.27.1
[1903] Fix | Delete
*
[1904] Fix | Delete
* @param array $values Raw values.
[1905] Fix | Delete
*
[1906] Fix | Delete
* @return array Normalized values for all modes.
[1907] Fix | Delete
*/
[1908] Fix | Delete
protected function normalize_values( $values = array() ) {
[1909] Fix | Delete
$normalized = array();
[1910] Fix | Delete
[1911] Fix | Delete
if ( is_array( $values ) ) {
[1912] Fix | Delete
if ( ! isset( $values['desktop'] ) ) {
[1913] Fix | Delete
$values['desktop'] = '';
[1914] Fix | Delete
}
[1915] Fix | Delete
[1916] Fix | Delete
if ( ! isset( $values['tablet'] ) ) {
[1917] Fix | Delete
$values['tablet'] = isset( $values['desktop'] ) ? $values['desktop'] : '';
[1918] Fix | Delete
}
[1919] Fix | Delete
[1920] Fix | Delete
if ( ! isset( $values['phone'] ) ) {
[1921] Fix | Delete
$values['phone'] = isset( $values['tablet'] ) ? $values['tablet'] : ( isset( $values['desktop'] ) ? $values['desktop'] : '' );
[1922] Fix | Delete
}
[1923] Fix | Delete
[1924] Fix | Delete
if ( ! isset( $values['hover'] ) ) {
[1925] Fix | Delete
$values['hover'] = isset( $values['desktop'] ) ? $values['desktop'] : '';
[1926] Fix | Delete
}
[1927] Fix | Delete
[1928] Fix | Delete
foreach ( self::get_modes() as $mode ) {
[1929] Fix | Delete
if ( ! isset( $values[ $mode ] ) ) {
[1930] Fix | Delete
continue;
[1931] Fix | Delete
}
[1932] Fix | Delete
[1933] Fix | Delete
$normalized[ $mode ] = $values[ $mode ];
[1934] Fix | Delete
}
[1935] Fix | Delete
} else {
[1936] Fix | Delete
foreach ( self::get_modes() as $mode ) {
[1937] Fix | Delete
$normalized[ $mode ] = $values;
[1938] Fix | Delete
}
[1939] Fix | Delete
}
[1940] Fix | Delete
[1941] Fix | Delete
return $normalized;
[1942] Fix | Delete
}
[1943] Fix | Delete
[1944] Fix | Delete
/**
[1945] Fix | Delete
* Distinct values
[1946] Fix | Delete
*
[1947] Fix | Delete
* @since 3.27.1
[1948] Fix | Delete
*
[1949] Fix | Delete
* @param array $values Raw values.
[1950] Fix | Delete
*
[1951] Fix | Delete
* @return array Filtered out for mode that has duplicate values.
[1952] Fix | Delete
*/
[1953] Fix | Delete
public function distinct_values( $values ) {
[1954] Fix | Delete
$temp_values = array();
[1955] Fix | Delete
[1956] Fix | Delete
foreach ( $values as $mode => $value ) {
[1957] Fix | Delete
// Stringify the value so can be easily compared.
[1958] Fix | Delete
$temp_values[ $mode ] = wp_json_encode( $value );
[1959] Fix | Delete
}
[1960] Fix | Delete
[1961] Fix | Delete
// Unset hover mode if same with desktop mode.
[1962] Fix | Delete
if ( isset( $temp_values['desktop'], $temp_values['hover'] ) && $temp_values['desktop'] === $temp_values['hover'] ) {
[1963] Fix | Delete
unset( $temp_values['hover'] );
[1964] Fix | Delete
}
[1965] Fix | Delete
[1966] Fix | Delete
// Unset tablet mode if same with desktop mode.
[1967] Fix | Delete
if ( isset( $temp_values['desktop'], $temp_values['tablet'] ) && $temp_values['desktop'] === $temp_values['tablet'] ) {
[1968] Fix | Delete
unset( $temp_values['tablet'] );
[1969] Fix | Delete
}
[1970] Fix | Delete
[1971] Fix | Delete
// Unset phone mode if same with tablet mode.
[1972] Fix | Delete
if ( isset( $temp_values['tablet'], $temp_values['phone'] ) && $temp_values['tablet'] === $temp_values['phone'] ) {
[1973] Fix | Delete
unset( $temp_values['phone'] );
[1974] Fix | Delete
}
[1975] Fix | Delete
[1976] Fix | Delete
// Unset phone mode if same with desktop mode but no tablet mode defined.
[1977] Fix | Delete
if ( isset( $temp_values['desktop'], $temp_values['phone'] ) && ! isset( $temp_values['tablet'] ) && $temp_values['desktop'] === $temp_values['phone'] ) {
[1978] Fix | Delete
unset( $temp_values['phone'] );
[1979] Fix | Delete
}
[1980] Fix | Delete
[1981] Fix | Delete
$filtered_values = array();
[1982] Fix | Delete
[1983] Fix | Delete
foreach ( self::get_modes() as $mode ) {
[1984] Fix | Delete
if ( ! isset( $temp_values[ $mode ] ) ) {
[1985] Fix | Delete
continue;
[1986] Fix | Delete
}
[1987] Fix | Delete
[1988] Fix | Delete
if ( ! isset( $values[ $mode ] ) ) {
[1989] Fix | Delete
continue;
[1990] Fix | Delete
}
[1991] Fix | Delete
[1992] Fix | Delete
$filtered_values[ $mode ] = $values[ $mode ];
[1993] Fix | Delete
}
[1994] Fix | Delete
[1995] Fix | Delete
return $filtered_values;
[1996] Fix | Delete
}
[1997] Fix | Delete
[1998] Fix | Delete
/**
[1999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function