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/core
File: functions.php
[1500] Fix | Delete
// Fixes the issue with x symbol between width and height values in the filename.
[1501] Fix | Delete
$url = str_replace( '%26%23215%3B', 'x', rawurlencode( $url ) );
[1502] Fix | Delete
[1503] Fix | Delete
// Decode the URL.
[1504] Fix | Delete
$url = rawurldecode( $url );
[1505] Fix | Delete
[1506] Fix | Delete
// Set as full path URL.
[1507] Fix | Delete
if ( 0 !== strpos( $url, 'http' ) ) {
[1508] Fix | Delete
$wp_upload_dir = wp_upload_dir( null, false );
[1509] Fix | Delete
$upload_dir = str_replace( site_url( '/' ), '', $wp_upload_dir['baseurl'] );
[1510] Fix | Delete
$url_trimmed = ltrim( $url, '/' );
[1511] Fix | Delete
[1512] Fix | Delete
if ( 0 === strpos( $url_trimmed, $upload_dir ) || 0 === strpos( $url_trimmed, 'wp-content' ) ) {
[1513] Fix | Delete
$url = site_url( $url_trimmed );
[1514] Fix | Delete
} else {
[1515] Fix | Delete
$url = $wp_upload_dir['baseurl'] . '/' . $url_trimmed;
[1516] Fix | Delete
}
[1517] Fix | Delete
}
[1518] Fix | Delete
[1519] Fix | Delete
// Validate URL format and file extension.
[1520] Fix | Delete
// Example: https://regex101.com/r/dXcpto/1.
[1521] Fix | Delete
if ( ! filter_var( $url, FILTER_VALIDATE_URL ) || ! preg_match( '/^(.+)\.(jpg|jpeg|gif|png)$/', $url ) ) {
[1522] Fix | Delete
return false;
[1523] Fix | Delete
}
[1524] Fix | Delete
[1525] Fix | Delete
return esc_url( $url );
[1526] Fix | Delete
}
[1527] Fix | Delete
endif;
[1528] Fix | Delete
[1529] Fix | Delete
if ( ! function_exists( 'et_core_is_uploads_dir_url' ) ) :
[1530] Fix | Delete
/**
[1531] Fix | Delete
* Check if a URL starts with the base upload directory URL.
[1532] Fix | Delete
*
[1533] Fix | Delete
* @since 4.2
[1534] Fix | Delete
*
[1535] Fix | Delete
* @param string $url The URL being looked up.
[1536] Fix | Delete
*
[1537] Fix | Delete
* @return bool
[1538] Fix | Delete
*/
[1539] Fix | Delete
function et_core_is_uploads_dir_url( $url ) {
[1540] Fix | Delete
$upload_dir = wp_upload_dir( null, false );
[1541] Fix | Delete
[1542] Fix | Delete
return et_()->starts_with( $url, $upload_dir['baseurl'] );
[1543] Fix | Delete
}
[1544] Fix | Delete
endif;
[1545] Fix | Delete
[1546] Fix | Delete
if ( ! function_exists( 'et_get_src_from_img_tag' ) ) :
[1547] Fix | Delete
/**
[1548] Fix | Delete
* Get src attribute value from image tag
[1549] Fix | Delete
*
[1550] Fix | Delete
* @since 3.27.1
[1551] Fix | Delete
*
[1552] Fix | Delete
* @param string $image The HTML image tag to look up.
[1553] Fix | Delete
*
[1554] Fix | Delete
* @return string|bool Src attribute value. False on failure.
[1555] Fix | Delete
*/
[1556] Fix | Delete
function et_get_src_from_img_tag( $image ) {
[1557] Fix | Delete
// Parse src attributes using regex.
[1558] Fix | Delete
// Example: https://regex101.com/r/kY6Gdd/1.
[1559] Fix | Delete
if ( preg_match( '/^<img.+src=[\'"](?P<src>.+?)[\'"].*>/', $image, $match ) ) {
[1560] Fix | Delete
if ( isset( $match['src'] ) ) {
[1561] Fix | Delete
return $match['src'];
[1562] Fix | Delete
}
[1563] Fix | Delete
}
[1564] Fix | Delete
[1565] Fix | Delete
// Parse src attributes using DOMDocument when regex is failed.
[1566] Fix | Delete
if ( class_exists( 'DOMDocument' ) && class_exists( 'DOMXPath' ) ) {
[1567] Fix | Delete
$doc = new DOMDocument();
[1568] Fix | Delete
$doc->loadHTML( $image );
[1569] Fix | Delete
[1570] Fix | Delete
$xpath = new DOMXPath( $doc );
[1571] Fix | Delete
return $xpath->evaluate( 'string(//img/@src)' );
[1572] Fix | Delete
}
[1573] Fix | Delete
[1574] Fix | Delete
return false;
[1575] Fix | Delete
}
[1576] Fix | Delete
endif;
[1577] Fix | Delete
[1578] Fix | Delete
if ( ! function_exists( 'et_core_enqueue_js_admin' ) ) :
[1579] Fix | Delete
function et_core_enqueue_js_admin() {
[1580] Fix | Delete
global $themename;
[1581] Fix | Delete
[1582] Fix | Delete
$epanel_jsfolder = ET_CORE_URL . 'admin/js';
[1583] Fix | Delete
[1584] Fix | Delete
et_core_load_main_fonts();
[1585] Fix | Delete
[1586] Fix | Delete
wp_register_script( 'epanel_colorpicker', $epanel_jsfolder . '/colorpicker.js', array(), et_get_theme_version() );
[1587] Fix | Delete
wp_register_script( 'epanel_eye', $epanel_jsfolder . '/eye.js', array(), et_get_theme_version() );
[1588] Fix | Delete
wp_register_script( 'epanel_checkbox', $epanel_jsfolder . '/checkbox.js', array(), et_get_theme_version() );
[1589] Fix | Delete
wp_enqueue_script( 'wp-color-picker' );
[1590] Fix | Delete
wp_enqueue_style( 'wp-color-picker' );
[1591] Fix | Delete
[1592] Fix | Delete
$wp_color_picker_alpha_uri = defined( 'ET_BUILDER_URI' ) ? ET_BUILDER_URI . '/scripts/ext/wp-color-picker-alpha.min.js' : $epanel_jsfolder . '/wp-color-picker-alpha.min.js';
[1593] Fix | Delete
[1594] Fix | Delete
wp_enqueue_script( 'wp-color-picker-alpha', $wp_color_picker_alpha_uri, array(
[1595] Fix | Delete
'jquery',
[1596] Fix | Delete
'wp-color-picker',
[1597] Fix | Delete
), et_get_theme_version(), true );
[1598] Fix | Delete
[1599] Fix | Delete
if ( ! wp_script_is( 'epanel_functions_init', 'enqueued' ) ) {
[1600] Fix | Delete
wp_enqueue_script( 'epanel_functions_init', $epanel_jsfolder . '/functions-init.js', array(
[1601] Fix | Delete
'jquery',
[1602] Fix | Delete
'jquery-ui-tabs',
[1603] Fix | Delete
'jquery-form',
[1604] Fix | Delete
'epanel_colorpicker',
[1605] Fix | Delete
'epanel_eye',
[1606] Fix | Delete
'epanel_checkbox',
[1607] Fix | Delete
'wp-color-picker-alpha',
[1608] Fix | Delete
), et_get_theme_version() );
[1609] Fix | Delete
wp_localize_script( 'epanel_functions_init', 'ePanelishSettings', array(
[1610] Fix | Delete
'clearpath' => get_template_directory_uri() . '/epanel/images/empty.png',
[1611] Fix | Delete
'epanelish_nonce' => wp_create_nonce( 'epanelish_nonce' ),
[1612] Fix | Delete
'help_label' => esc_html__( 'Help', $themename ),
[1613] Fix | Delete
'et_core_nonces' => et_core_get_nonces(),
[1614] Fix | Delete
) );
[1615] Fix | Delete
}
[1616] Fix | Delete
[1617] Fix | Delete
// Use WP 4.9 CodeMirror Editor for some fields
[1618] Fix | Delete
if ( function_exists( 'wp_enqueue_code_editor' ) ) {
[1619] Fix | Delete
wp_enqueue_code_editor(
[1620] Fix | Delete
array(
[1621] Fix | Delete
'type' => 'text/css',
[1622] Fix | Delete
)
[1623] Fix | Delete
);
[1624] Fix | Delete
// Required for Javascript mode
[1625] Fix | Delete
wp_enqueue_script( 'jshint' );
[1626] Fix | Delete
wp_enqueue_script( 'htmlhint' );
[1627] Fix | Delete
}
[1628] Fix | Delete
}
[1629] Fix | Delete
endif;
[1630] Fix | Delete
[1631] Fix | Delete
/**
[1632] Fix | Delete
* Get ET account information.
[1633] Fix | Delete
*
[1634] Fix | Delete
* @since 4.0
[1635] Fix | Delete
*
[1636] Fix | Delete
* @return array
[1637] Fix | Delete
*/
[1638] Fix | Delete
function et_core_get_et_account() {
[1639] Fix | Delete
$utils = ET_Core_Data_Utils::instance();
[1640] Fix | Delete
$updates_options = get_site_option( 'et_automatic_updates_options', array() );
[1641] Fix | Delete
[1642] Fix | Delete
return array(
[1643] Fix | Delete
'et_username' => $utils->array_get( $updates_options, 'username', '' ),
[1644] Fix | Delete
'et_api_key' => $utils->array_get( $updates_options, 'api_key', '' ),
[1645] Fix | Delete
'status' => get_site_option( 'et_account_status', 'not_active' ),
[1646] Fix | Delete
);
[1647] Fix | Delete
}
[1648] Fix | Delete
[1649] Fix | Delete
/**
[1650] Fix | Delete
* Get all meta saved by the builder for a given post.
[1651] Fix | Delete
*
[1652] Fix | Delete
* @since 4.0.10
[1653] Fix | Delete
*
[1654] Fix | Delete
* @param integer $post_id
[1655] Fix | Delete
*
[1656] Fix | Delete
* @return array
[1657] Fix | Delete
*/
[1658] Fix | Delete
function et_core_get_post_builder_meta( $post_id ) {
[1659] Fix | Delete
$raw_meta = get_post_meta( $post_id );
[1660] Fix | Delete
$meta = array();
[1661] Fix | Delete
[1662] Fix | Delete
foreach ( $raw_meta as $key => $values ) {
[1663] Fix | Delete
if ( strpos( $key, '_et_pb_' ) !== 0 && strpos( $key, '_et_builder_' ) !== 0 ) {
[1664] Fix | Delete
continue;
[1665] Fix | Delete
}
[1666] Fix | Delete
[1667] Fix | Delete
if ( strpos( $key, '_et_pb_ab_' ) === 0 ) {
[1668] Fix | Delete
// Do not copy A/B meta as it is post-specific.
[1669] Fix | Delete
continue;
[1670] Fix | Delete
}
[1671] Fix | Delete
[1672] Fix | Delete
foreach ( $values as $value ) {
[1673] Fix | Delete
$meta[] = array(
[1674] Fix | Delete
'key' => $key,
[1675] Fix | Delete
'value' => $value,
[1676] Fix | Delete
);
[1677] Fix | Delete
}
[1678] Fix | Delete
}
[1679] Fix | Delete
[1680] Fix | Delete
return $meta;
[1681] Fix | Delete
}
[1682] Fix | Delete
[1683] Fix | Delete
if ( ! function_exists( 'et_core_parse_google_fonts_json' ) ) :
[1684] Fix | Delete
/**
[1685] Fix | Delete
* Parse google fonts json to array.
[1686] Fix | Delete
*
[1687] Fix | Delete
* @since 4.0.10
[1688] Fix | Delete
*
[1689] Fix | Delete
* @param string $json Google fonts json file content.
[1690] Fix | Delete
*
[1691] Fix | Delete
* @return array Associative array list of google fonts.
[1692] Fix | Delete
*/
[1693] Fix | Delete
function et_core_parse_google_fonts_json( $fonts_json ) {
[1694] Fix | Delete
if ( ! $fonts_json || ! is_string( $fonts_json ) ) {
[1695] Fix | Delete
return array();
[1696] Fix | Delete
}
[1697] Fix | Delete
[1698] Fix | Delete
$fonts_json_decoded = json_decode( $fonts_json, true );
[1699] Fix | Delete
[1700] Fix | Delete
if ( ! $fonts_json_decoded || empty( $fonts_json_decoded['items'] ) ) {
[1701] Fix | Delete
return array();
[1702] Fix | Delete
}
[1703] Fix | Delete
[1704] Fix | Delete
$fonts = array();
[1705] Fix | Delete
[1706] Fix | Delete
foreach ( $fonts_json_decoded['items'] as $font_item ) {
[1707] Fix | Delete
if ( ! isset( $font_item['family'], $font_item['variants'], $font_item['subsets'], $font_item['category'] ) ) {
[1708] Fix | Delete
continue;
[1709] Fix | Delete
}
[1710] Fix | Delete
[1711] Fix | Delete
$fonts[ sanitize_text_field( $font_item['family'] ) ] = array(
[1712] Fix | Delete
'styles' => sanitize_text_field( implode( ',', $font_item['variants'] ) ),
[1713] Fix | Delete
'character_set' => sanitize_text_field( implode( ',', $font_item['subsets'] ) ),
[1714] Fix | Delete
'type' => sanitize_text_field( $font_item['category'] ),
[1715] Fix | Delete
);
[1716] Fix | Delete
}
[1717] Fix | Delete
[1718] Fix | Delete
ksort( $fonts );
[1719] Fix | Delete
[1720] Fix | Delete
return $fonts;
[1721] Fix | Delete
}
[1722] Fix | Delete
endif;
[1723] Fix | Delete
[1724] Fix | Delete
if ( ! function_exists( 'et_core_get_saved_google_fonts' ) ) :
[1725] Fix | Delete
/**
[1726] Fix | Delete
* Get saved google fonts list.
[1727] Fix | Delete
*
[1728] Fix | Delete
* @since 4.0.10
[1729] Fix | Delete
*
[1730] Fix | Delete
* @return array Associative array list of google fonts.
[1731] Fix | Delete
*/
[1732] Fix | Delete
function et_core_get_saved_google_fonts() {
[1733] Fix | Delete
static $saved_google_fonts;
[1734] Fix | Delete
[1735] Fix | Delete
if ( ! is_null( $saved_google_fonts ) ) {
[1736] Fix | Delete
return $saved_google_fonts;
[1737] Fix | Delete
}
[1738] Fix | Delete
[1739] Fix | Delete
$json_file = ET_CORE_PATH . 'json-data/google-fonts.json';
[1740] Fix | Delete
[1741] Fix | Delete
if ( ! et_()->WPFS()->is_readable( $json_file ) ) {
[1742] Fix | Delete
return array();
[1743] Fix | Delete
}
[1744] Fix | Delete
[1745] Fix | Delete
$saved_google_fonts = et_core_parse_google_fonts_json( et_()->WPFS()->get_contents( $json_file ) );
[1746] Fix | Delete
[1747] Fix | Delete
return $saved_google_fonts;
[1748] Fix | Delete
}
[1749] Fix | Delete
endif;
[1750] Fix | Delete
[1751] Fix | Delete
if ( ! function_exists( 'et_core_get_websafe_fonts' ) ) :
[1752] Fix | Delete
/**
[1753] Fix | Delete
* Get websafe fonts list.
[1754] Fix | Delete
*
[1755] Fix | Delete
* @since 4.0.10
[1756] Fix | Delete
*
[1757] Fix | Delete
* @return array Associative array list of websafe fonts.
[1758] Fix | Delete
*/
[1759] Fix | Delete
function et_core_get_websafe_fonts() {
[1760] Fix | Delete
$websafe_fonts = array(
[1761] Fix | Delete
'Georgia' => array(
[1762] Fix | Delete
'styles' => '300italic,400italic,600italic,700italic,800italic,400,300,600,700,800',
[1763] Fix | Delete
'character_set' => 'cyrillic,greek,latin',
[1764] Fix | Delete
'type' => 'serif',
[1765] Fix | Delete
),
[1766] Fix | Delete
'Times New Roman' => array(
[1767] Fix | Delete
'styles' => '300italic,400italic,600italic,700italic,800italic,400,300,600,700,800',
[1768] Fix | Delete
'character_set' => 'arabic,cyrillic,greek,hebrew,latin',
[1769] Fix | Delete
'type' => 'serif',
[1770] Fix | Delete
),
[1771] Fix | Delete
'Arial' => array(
[1772] Fix | Delete
'styles' => '300italic,400italic,600italic,700italic,800italic,400,300,600,700,800',
[1773] Fix | Delete
'character_set' => 'arabic,cyrillic,greek,hebrew,latin',
[1774] Fix | Delete
'type' => 'sans-serif',
[1775] Fix | Delete
),
[1776] Fix | Delete
'Trebuchet' => array(
[1777] Fix | Delete
'styles' => '300italic,400italic,600italic,700italic,800italic,400,300,600,700,800',
[1778] Fix | Delete
'character_set' => 'cyrillic,latin',
[1779] Fix | Delete
'type' => 'sans-serif',
[1780] Fix | Delete
'add_ms_version' => true,
[1781] Fix | Delete
),
[1782] Fix | Delete
'Verdana' => array(
[1783] Fix | Delete
'styles' => '300italic,400italic,600italic,700italic,800italic,400,300,600,700,800',
[1784] Fix | Delete
'character_set' => 'cyrillic,latin',
[1785] Fix | Delete
'type' => 'sans-serif',
[1786] Fix | Delete
),
[1787] Fix | Delete
);
[1788] Fix | Delete
[1789] Fix | Delete
foreach ( array_keys( $websafe_fonts ) as $font_name ) {
[1790] Fix | Delete
$websafe_fonts[ $font_name ]['standard'] = true;
[1791] Fix | Delete
}
[1792] Fix | Delete
[1793] Fix | Delete
ksort( $websafe_fonts );
[1794] Fix | Delete
[1795] Fix | Delete
return apply_filters( 'et_websafe_fonts', $websafe_fonts );
[1796] Fix | Delete
}
[1797] Fix | Delete
endif;
[1798] Fix | Delete
[1799] Fix | Delete
if ( ! function_exists( 'et_maybe_update_hosting_card_status' ) ) :
[1800] Fix | Delete
/**
[1801] Fix | Delete
* Divi Hosting Card :: Update dismiss status via ET API
[1802] Fix | Delete
*
[1803] Fix | Delete
* @since 4.4.7
[1804] Fix | Delete
*/
[1805] Fix | Delete
function et_maybe_update_hosting_card_status() {
[1806] Fix | Delete
$et_account = et_core_get_et_account();
[1807] Fix | Delete
$et_username = et_()->array_get( $et_account, 'et_username', '' );
[1808] Fix | Delete
$et_api_key = et_()->array_get( $et_account, 'et_api_key', '' );
[1809] Fix | Delete
[1810] Fix | Delete
// Exit if ET Username and/or ET API Key is not found
[1811] Fix | Delete
if ( '' === $et_username || '' === $et_api_key ) {
[1812] Fix | Delete
// Remove any WP Cron for Updating Hosting Card Status
[1813] Fix | Delete
wp_unschedule_hook( 'et_maybe_update_hosting_card_status_cron' );
[1814] Fix | Delete
[1815] Fix | Delete
return;
[1816] Fix | Delete
}
[1817] Fix | Delete
[1818] Fix | Delete
global $wp_version;
[1819] Fix | Delete
[1820] Fix | Delete
// Prepare settings for API request
[1821] Fix | Delete
$options = array(
[1822] Fix | Delete
'timeout' => 30,
[1823] Fix | Delete
'body' => array(
[1824] Fix | Delete
'action' => 'disable_hosting_card',
[1825] Fix | Delete
'username' => $et_username,
[1826] Fix | Delete
'api_key' => $et_api_key,
[1827] Fix | Delete
),
[1828] Fix | Delete
'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ),
[1829] Fix | Delete
);
[1830] Fix | Delete
[1831] Fix | Delete
$request = wp_remote_post( 'https://www.elegantthemes.com/api/api.php', $options );
[1832] Fix | Delete
$request_response_code = wp_remote_retrieve_response_code( $request );
[1833] Fix | Delete
$response_body = wp_remote_retrieve_body( $request );
[1834] Fix | Delete
$response = (array) json_decode( $response_body );
[1835] Fix | Delete
[1836] Fix | Delete
// API request has been updated successfully and the User has already disabled the card, or,
[1837] Fix | Delete
// when API request was successful and returns error message
[1838] Fix | Delete
if ( 'disabled' === et_()->array_get( $response, 'status' ) || '' !== et_()->array_get( $response, 'error', '' ) ) {
[1839] Fix | Delete
// Remove any WP Cron for Updating Hosting Card Status
[1840] Fix | Delete
wp_unschedule_hook( 'et_maybe_update_hosting_card_status_cron' );
[1841] Fix | Delete
[1842] Fix | Delete
return;
[1843] Fix | Delete
}
[1844] Fix | Delete
[1845] Fix | Delete
// Fail-safe :: Schedule WP Cron to try again
[1846] Fix | Delete
// Once something were wrong in API request, or, response has error code
[1847] Fix | Delete
if ( is_wp_error( $request ) || 200 !== $request_response_code ) {
[1848] Fix | Delete
[1849] Fix | Delete
// First API request has failed, which were done already in above, second request
[1850] Fix | Delete
// (via cron) will be made in a minute, then third (via cron) and future (via cron)
[1851] Fix | Delete
// call will be per hour. Once API request is successful, cron will be removed
[1852] Fix | Delete
$timestamp = time() + 1 * MINUTE_IN_SECONDS;
[1853] Fix | Delete
[1854] Fix | Delete
if ( ! wp_next_scheduled( 'et_maybe_update_hosting_card_status_cron' ) ) {
[1855] Fix | Delete
wp_schedule_event( $timestamp, 'hourly', 'et_maybe_update_hosting_card_status_cron' );
[1856] Fix | Delete
}
[1857] Fix | Delete
}
[1858] Fix | Delete
}
[1859] Fix | Delete
endif;
[1860] Fix | Delete
[1861] Fix | Delete
// Action for WP Cron: Disable Hosting Card status via ET API
[1862] Fix | Delete
add_action( 'et_maybe_update_hosting_card_status_cron', 'et_maybe_update_hosting_card_status' );
[1863] Fix | Delete
[1864] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function