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: core.php
et_builder_google_fonts_sync();
[4500] Fix | Delete
}
[4501] Fix | Delete
[4502] Fix | Delete
$google_fonts_cache = get_option( 'et_google_fonts_cache', array() );
[4503] Fix | Delete
[4504] Fix | Delete
if ( ! empty( $google_fonts_cache ) ) {
[4505] Fix | Delete
// Use cache if it's not empty
[4506] Fix | Delete
return apply_filters( 'et_builder_google_fonts', $google_fonts_cache );
[4507] Fix | Delete
}
[4508] Fix | Delete
[4509] Fix | Delete
// use hardcoded google fonts as fallback if no cache exists
[4510] Fix | Delete
return apply_filters( 'et_builder_google_fonts', et_core_get_saved_google_fonts() );
[4511] Fix | Delete
}
[4512] Fix | Delete
endif;
[4513] Fix | Delete
[4514] Fix | Delete
/**
[4515] Fix | Delete
* Use correct conditional tag for compute callback. Compute callback can use actual conditional tag
[4516] Fix | Delete
* on page load. Compute callback relies on passed conditional tag params for update due to the
[4517] Fix | Delete
* ajax-admin.php nature
[4518] Fix | Delete
*
[4519] Fix | Delete
* @param string conditional tag name
[4520] Fix | Delete
* @param array all conditional tags params
[4521] Fix | Delete
* @return bool conditional tag value
[4522] Fix | Delete
*/
[4523] Fix | Delete
function et_fb_conditional_tag( $name, $conditional_tags ) {
[4524] Fix | Delete
[4525] Fix | Delete
if ( defined( 'DOING_AJAX' ) && isset( $conditional_tags[ $name ] ) ) {
[4526] Fix | Delete
return $conditional_tags[ $name ] === 'true' ? true : false;
[4527] Fix | Delete
}
[4528] Fix | Delete
[4529] Fix | Delete
return is_callable( $name ) ? $name() : false;
[4530] Fix | Delete
}
[4531] Fix | Delete
[4532] Fix | Delete
/*
[4533] Fix | Delete
* Retrieves the content of saved modules and process the shortcode into array.
[4534] Fix | Delete
*
[4535] Fix | Delete
*/
[4536] Fix | Delete
function et_fb_get_saved_templates() {
[4537] Fix | Delete
if ( ! wp_verify_nonce( $_POST['et_fb_retrieve_library_modules_nonce'], 'et_fb_retrieve_library_modules_nonce' ) ){
[4538] Fix | Delete
die(-1);
[4539] Fix | Delete
}
[4540] Fix | Delete
[4541] Fix | Delete
if ( ! current_user_can( 'edit_posts' ) ) {
[4542] Fix | Delete
die( -1 );
[4543] Fix | Delete
}
[4544] Fix | Delete
[4545] Fix | Delete
$layout_type = ! empty( $_POST['et_layout_type'] ) ? sanitize_text_field( $_POST['et_layout_type'] ) : 'layout';
[4546] Fix | Delete
$module_width = ! empty( $_POST['et_module_width'] ) && 'module' === $layout_type ? sanitize_text_field( $_POST['et_module_width'] ) : '';
[4547] Fix | Delete
$is_global = ! empty( $_POST['et_is_global'] ) ? sanitize_text_field( $_POST['et_is_global'] ) : 'all';
[4548] Fix | Delete
$specialty_query = ! empty( $_POST['et_specialty_columns'] ) && 'row' === $layout_type ? sanitize_text_field( $_POST['et_specialty_columns'] ) : '0';
[4549] Fix | Delete
$post_type = ! empty( $_POST['et_post_type'] ) ? sanitize_text_field( $_POST['et_post_type'] ) : 'post';
[4550] Fix | Delete
$start_from = ! empty( $_POST['et_templates_start_page'] ) ? sanitize_text_field( $_POST['et_templates_start_page'] ) : 0;
[4551] Fix | Delete
[4552] Fix | Delete
if ( et_theme_builder_is_layout_post_type( $post_type ) ) {
[4553] Fix | Delete
// Treat TB layouts as normal posts when fetching layouts from the library.
[4554] Fix | Delete
$post_type = 'post';
[4555] Fix | Delete
}
[4556] Fix | Delete
[4557] Fix | Delete
if ( 'all' === $is_global ) {
[4558] Fix | Delete
$templates_data_regular = et_pb_retrieve_templates( $layout_type, $module_width, 'not_global', $specialty_query, $post_type, '', array( $start_from, 25 ) );
[4559] Fix | Delete
$templates_data_global = et_pb_retrieve_templates( $layout_type, $module_width, 'global', $specialty_query, $post_type, '', array( $start_from, 25 ) );
[4560] Fix | Delete
$templates_data = array_merge( $templates_data_regular, $templates_data_global );
[4561] Fix | Delete
} else {
[4562] Fix | Delete
$templates_data = et_pb_retrieve_templates( $layout_type, $module_width, $is_global, $specialty_query, $post_type, array( $start_from, 50 ) );
[4563] Fix | Delete
}
[4564] Fix | Delete
[4565] Fix | Delete
$templates_data_processed = $templates_data;
[4566] Fix | Delete
$next_page = 'none';
[4567] Fix | Delete
[4568] Fix | Delete
if ( 0 !== $start_from && empty( $templates_data ) ) {
[4569] Fix | Delete
$templates_data_processed = array();
[4570] Fix | Delete
} else {
[4571] Fix | Delete
if ( empty( $templates_data ) ) {
[4572] Fix | Delete
$templates_data_processed = array( 'error' => esc_html__( 'You have not saved any items to your Divi Library yet. Once an item has been saved to your library, it will appear here for easy use.', 'et_builder' ) );
[4573] Fix | Delete
} else {
[4574] Fix | Delete
foreach( $templates_data as $index => $data ) {
[4575] Fix | Delete
$templates_data_processed[ $index ]['shortcode'] = et_fb_process_shortcode( $data['shortcode'] );
[4576] Fix | Delete
[4577] Fix | Delete
if ( 'global' === $templates_data_processed[ $index ]['is_global'] && 'module' === $templates_data_processed[ $index ]['layout_type'] && is_array( $templates_data_processed[ $index ]['shortcode'] ) ) {
[4578] Fix | Delete
$templates_data_processed[ $index ]['shortcode'][0]['unsyncedGlobalSettings'] = $templates_data_processed[ $index ]['unsynced_options'];
[4579] Fix | Delete
[4580] Fix | Delete
if ( empty( $templates_data_processed[ $index ]['unsynced_options'] ) && isset( $templates_data_processed[ $index ]['shortcode'][0]['attrs']['saved_tabs'] ) && 'all' !== $templates_data_processed[ $index ]['shortcode'][0]['attrs']['saved_tabs'] ) {
[4581] Fix | Delete
$templates_data_processed[ $index ]['shortcode'][0]['unsyncedGlobalSettings'] = et_pb_get_unsynced_legacy_options( $post_type, $templates_data_processed[ $index ]['shortcode'][0] );
[4582] Fix | Delete
}
[4583] Fix | Delete
}
[4584] Fix | Delete
}
[4585] Fix | Delete
$next_page = 'all' === $is_global ? $start_from + 25 : $start_from + 50;
[4586] Fix | Delete
}
[4587] Fix | Delete
}
[4588] Fix | Delete
[4589] Fix | Delete
$json_templates = wp_json_encode( array( 'templates_data' => $templates_data_processed, 'next_page' => $next_page ) );
[4590] Fix | Delete
[4591] Fix | Delete
die( et_core_esc_previously( $json_templates ) );
[4592] Fix | Delete
}
[4593] Fix | Delete
add_action( 'wp_ajax_et_fb_get_saved_templates', 'et_fb_get_saved_templates' );
[4594] Fix | Delete
[4595] Fix | Delete
/*
[4596] Fix | Delete
* Retrieves posts list that builder enabled
[4597] Fix | Delete
*
[4598] Fix | Delete
*/
[4599] Fix | Delete
function et_fb_get_posts_list() {
[4600] Fix | Delete
et_core_security_check( 'edit_posts', 'et_fb_get_posts_list' );
[4601] Fix | Delete
[4602] Fix | Delete
$post_types = et_get_registered_post_type_options();
[4603] Fix | Delete
$post_type = isset( $_POST['post_type'] ) ? $_POST['post_type'] : false;
[4604] Fix | Delete
[4605] Fix | Delete
if ( empty( $post_type ) || ! isset( $post_types[ $post_type ] ) ) {
[4606] Fix | Delete
wp_send_json_error();
[4607] Fix | Delete
}
[4608] Fix | Delete
[4609] Fix | Delete
$posts_list = array();
[4610] Fix | Delete
[4611] Fix | Delete
$query = new ET_Core_Post_Query( $post_type );
[4612] Fix | Delete
[4613] Fix | Delete
$posts = $query->run( array(
[4614] Fix | Delete
'post_status' => array( 'draft', 'publish', 'pending' ),
[4615] Fix | Delete
) );
[4616] Fix | Delete
[4617] Fix | Delete
$_utils = ET_Core_Data_Utils::instance();
[4618] Fix | Delete
[4619] Fix | Delete
$posts = $_utils->array_sort_by( is_array( $posts ) ? $posts : array( $posts ), 'post_title' );
[4620] Fix | Delete
[4621] Fix | Delete
if ( empty( $posts ) ) {
[4622] Fix | Delete
wp_send_json_error();
[4623] Fix | Delete
}
[4624] Fix | Delete
[4625] Fix | Delete
foreach ( $posts as $post ) {
[4626] Fix | Delete
// Check if page builder is activated.
[4627] Fix | Delete
if ( ! et_pb_is_pagebuilder_used( $post->ID ) ) {
[4628] Fix | Delete
continue;
[4629] Fix | Delete
}
[4630] Fix | Delete
[4631] Fix | Delete
// Only include posts that the user is allowed to edit
[4632] Fix | Delete
if ( ! current_user_can( 'edit_post', $post->ID ) ) {
[4633] Fix | Delete
continue;
[4634] Fix | Delete
}
[4635] Fix | Delete
[4636] Fix | Delete
// Skip for post has no title
[4637] Fix | Delete
if ( empty( $post->post_title ) ) {
[4638] Fix | Delete
continue;
[4639] Fix | Delete
}
[4640] Fix | Delete
[4641] Fix | Delete
$posts_list[ $post->ID ] = array(
[4642] Fix | Delete
'id' => $post->ID,
[4643] Fix | Delete
'title' => $post->post_title,
[4644] Fix | Delete
'link' => array(
[4645] Fix | Delete
'vb' => et_fb_get_vb_url( get_permalink( $post->ID ) ),
[4646] Fix | Delete
'bfb' => add_query_arg( array( 'post' => $post->ID, 'action' => 'edit', 'classic-editor' => '1' ), admin_url( 'post.php' ) ),
[4647] Fix | Delete
),
[4648] Fix | Delete
);
[4649] Fix | Delete
}
[4650] Fix | Delete
[4651] Fix | Delete
wp_send_json_success( $posts_list );
[4652] Fix | Delete
}
[4653] Fix | Delete
add_action( 'wp_ajax_et_fb_get_posts_list', 'et_fb_get_posts_list' );
[4654] Fix | Delete
[4655] Fix | Delete
function et_pb_get_supported_font_formats() {
[4656] Fix | Delete
return apply_filters( 'et_pb_supported_font_formats', array( 'ttf', 'otf' ) );
[4657] Fix | Delete
}
[4658] Fix | Delete
[4659] Fix | Delete
function et_pb_process_custom_font() {
[4660] Fix | Delete
et_core_security_check( 'upload_files', 'et_fb_upload_font_nonce' );
[4661] Fix | Delete
[4662] Fix | Delete
// action "add" or "remove"
[4663] Fix | Delete
$action = ! empty( $_POST['et_pb_font_action'] ) ? sanitize_text_field( $_POST['et_pb_font_action'] ) : 'save';
[4664] Fix | Delete
[4665] Fix | Delete
if ( 'add' === $action ) {
[4666] Fix | Delete
$supported_font_files = et_pb_get_supported_font_formats();
[4667] Fix | Delete
$custom_font_name = ! empty( $_POST['et_pb_font_name'] ) ? sanitize_text_field( $_POST['et_pb_font_name'] ) : '';
[4668] Fix | Delete
$custom_font_settings = ! empty( $_POST['et_pb_font_settings'] ) ? sanitize_text_field( $_POST['et_pb_font_settings'] ) : '';
[4669] Fix | Delete
$custom_font_settings_processed = '' === $custom_font_settings ? array() : json_decode( str_replace( '\\', '', $custom_font_settings ), true );
[4670] Fix | Delete
$fonts_array = array();
[4671] Fix | Delete
[4672] Fix | Delete
foreach ( $supported_font_files as $format ) {
[4673] Fix | Delete
if ( isset( $_FILES['et_pb_font_file_' . $format ] ) ) {
[4674] Fix | Delete
$fonts_array[ $format ] = $_FILES['et_pb_font_file_' . $format ];
[4675] Fix | Delete
}
[4676] Fix | Delete
}
[4677] Fix | Delete
[4678] Fix | Delete
die( wp_json_encode( et_pb_add_font( $fonts_array, $custom_font_name, $custom_font_settings_processed ) ) );
[4679] Fix | Delete
} elseif ( 'remove' === $action ) {
[4680] Fix | Delete
$font_slug = ! empty( $_POST['et_pb_font_name'] ) ? sanitize_text_field( $_POST['et_pb_font_name'] ) : '';
[4681] Fix | Delete
die( wp_json_encode( et_pb_remove_font( $font_slug ) ) );
[4682] Fix | Delete
}
[4683] Fix | Delete
}
[4684] Fix | Delete
[4685] Fix | Delete
add_action( 'wp_ajax_et_pb_process_custom_font', 'et_pb_process_custom_font' );
[4686] Fix | Delete
[4687] Fix | Delete
/**
[4688] Fix | Delete
* Drag and Droploader :: Process Media
[4689] Fix | Delete
*/
[4690] Fix | Delete
if ( ! function_exists( 'et_builder_droploader_process') ):
[4691] Fix | Delete
function et_builder_droploader_process() {
[4692] Fix | Delete
et_core_security_check( 'upload_files', 'et_builder_droploader_process_nonce' );
[4693] Fix | Delete
[4694] Fix | Delete
$post_id = ! empty( $_POST['post_id'] ) ? (int) $_POST['post_id'] : '';
[4695] Fix | Delete
[4696] Fix | Delete
if ( ! current_user_can( 'edit_post', $post_id ) ) {
[4697] Fix | Delete
die( -1 );
[4698] Fix | Delete
}
[4699] Fix | Delete
[4700] Fix | Delete
et_core_security_check( 'edit_posts', 'et_builder_droploader_process_nonce' );
[4701] Fix | Delete
[4702] Fix | Delete
require_once( ABSPATH . 'wp-admin/includes/image.php' );
[4703] Fix | Delete
require_once( ABSPATH . 'wp-admin/includes/file.php' );
[4704] Fix | Delete
require_once( ABSPATH . 'wp-admin/includes/media.php' );
[4705] Fix | Delete
[4706] Fix | Delete
$attachment_id = media_handle_upload( 'file', (int) $_POST['post_id'] );
[4707] Fix | Delete
[4708] Fix | Delete
if ( is_wp_error( $attachment_id ) ) {
[4709] Fix | Delete
wp_send_json_error( $attachment_id->get_error_message() );
[4710] Fix | Delete
}
[4711] Fix | Delete
[4712] Fix | Delete
wp_send_json_success( $attachment_id );
[4713] Fix | Delete
}
[4714] Fix | Delete
endif;
[4715] Fix | Delete
add_action( 'wp_ajax_et_builder_droploader_process', 'et_builder_droploader_process' );
[4716] Fix | Delete
[4717] Fix | Delete
/**
[4718] Fix | Delete
* Add allowed mime types and file extensions for font files.
[4719] Fix | Delete
*
[4720] Fix | Delete
* @return array
[4721] Fix | Delete
*/
[4722] Fix | Delete
function et_pb_filter_upload_mimes_custom_fonts() {
[4723] Fix | Delete
return array(
[4724] Fix | Delete
'otf' => 'application/x-font-opentype',
[4725] Fix | Delete
'ttf' => 'application/x-font-ttf',
[4726] Fix | Delete
'woff' => 'application/font-woff',
[4727] Fix | Delete
'woff2' => 'application/font-woff2',
[4728] Fix | Delete
'eot' => 'application/vnd.ms-fontobject',
[4729] Fix | Delete
);
[4730] Fix | Delete
}
[4731] Fix | Delete
[4732] Fix | Delete
/*
[4733] Fix | Delete
* Save the font-file.
[4734] Fix | Delete
*
[4735] Fix | Delete
*/
[4736] Fix | Delete
function et_pb_add_font( $font_files, $font_name, $font_settings ) {
[4737] Fix | Delete
if ( ! isset( $font_files ) || empty( $font_files ) ) {
[4738] Fix | Delete
return array( 'error' => esc_html__( 'No Font File Provided', 'et_builder' ) );
[4739] Fix | Delete
}
[4740] Fix | Delete
[4741] Fix | Delete
// remove all special characters from the font name
[4742] Fix | Delete
$font_name = preg_replace( '/[^A-Za-z0-9\s\_-]/', '', $font_name );
[4743] Fix | Delete
[4744] Fix | Delete
if ( '' === $font_name ) {
[4745] Fix | Delete
return array( 'error' => esc_html__( 'Font Name Cannot be Empty and Cannot Contain Special Characters', 'et_builder' ) );
[4746] Fix | Delete
}
[4747] Fix | Delete
[4748] Fix | Delete
$google_fonts = et_builder_get_google_fonts();
[4749] Fix | Delete
$all_custom_fonts = get_option( 'et_uploaded_fonts', array() );
[4750] Fix | Delete
[4751] Fix | Delete
// Don't allow to add fonts with the names which already used by User Fonts or Google Fonts.
[4752] Fix | Delete
if ( isset( $all_custom_fonts[ $font_name ] ) || isset( $google_fonts[ $font_name ] ) ) {
[4753] Fix | Delete
return array( 'error' => esc_html__( 'Font With This Name Already Exists. Please Use a Different Name', 'et_builder' ) );
[4754] Fix | Delete
}
[4755] Fix | Delete
[4756] Fix | Delete
// set the upload Directory for builder font files
[4757] Fix | Delete
add_filter( 'upload_dir', 'et_pb_set_fonts_upload_dir' );
[4758] Fix | Delete
[4759] Fix | Delete
// Set the upload_mimes filter before uploading font file.
[4760] Fix | Delete
add_filter( 'upload_mimes', 'et_pb_filter_upload_mimes_custom_fonts' );
[4761] Fix | Delete
[4762] Fix | Delete
$uploaded_files_error = '';
[4763] Fix | Delete
$uploaded_files = array(
[4764] Fix | Delete
'font_file' => array(),
[4765] Fix | Delete
'font_url' => array(),
[4766] Fix | Delete
);
[4767] Fix | Delete
[4768] Fix | Delete
foreach ( $font_files as $ext => $font_file) {
[4769] Fix | Delete
// Try to upload font file.
[4770] Fix | Delete
$upload = wp_handle_upload( $font_file, array(
[4771] Fix | Delete
'test_size' => false,
[4772] Fix | Delete
'test_form' => false,
[4773] Fix | Delete
'mimes' => et_pb_filter_upload_mimes_custom_fonts(),
[4774] Fix | Delete
) );
[4775] Fix | Delete
[4776] Fix | Delete
// try with different MIME types if uploading .otf file and error occurs
[4777] Fix | Delete
if ( 'otf' === $ext && ! empty( $upload['error'] ) ) {
[4778] Fix | Delete
foreach ( array( 'application/x-font-ttf', 'application/vnd.ms-opentype' ) as $mime_type ) {
[4779] Fix | Delete
if ( ! empty( $upload['error'] ) ) {
[4780] Fix | Delete
$upload = wp_handle_upload( $font_file, array(
[4781] Fix | Delete
'test_size' => false,
[4782] Fix | Delete
'test_form' => false,
[4783] Fix | Delete
'mimes' => array(
[4784] Fix | Delete
'otf' => $mime_type,
[4785] Fix | Delete
),
[4786] Fix | Delete
) );
[4787] Fix | Delete
}
[4788] Fix | Delete
}
[4789] Fix | Delete
}
[4790] Fix | Delete
[4791] Fix | Delete
if ( ! empty( $upload['error'] ) ) {
[4792] Fix | Delete
$uploaded_files_error = $upload['error'];
[4793] Fix | Delete
} else {
[4794] Fix | Delete
$uploaded_files['font_file'][$ext] = esc_url( $upload['file'] );
[4795] Fix | Delete
$uploaded_files['font_url'][$ext] = esc_url( $upload['url'] );
[4796] Fix | Delete
}
[4797] Fix | Delete
}
[4798] Fix | Delete
[4799] Fix | Delete
// Reset the upload Directory after uploading font file
[4800] Fix | Delete
remove_filter( 'upload_dir', 'et_pb_set_fonts_upload_dir' );
[4801] Fix | Delete
[4802] Fix | Delete
// Reset the upload_mimes filter after uploading font file.
[4803] Fix | Delete
remove_filter( 'upload_mimes', 'et_pb_filter_upload_mimes_custom_fonts' );
[4804] Fix | Delete
[4805] Fix | Delete
// return error if no files were uploaded
[4806] Fix | Delete
if ( empty( $uploaded_files['font_file'] ) && '' !== $uploaded_files_error ) {
[4807] Fix | Delete
return array( 'error' => $uploaded_files_error );
[4808] Fix | Delete
}
[4809] Fix | Delete
[4810] Fix | Delete
//organize uploaded files
[4811] Fix | Delete
$all_custom_fonts[ $font_name ] = array(
[4812] Fix | Delete
'font_file' => $uploaded_files['font_file'],
[4813] Fix | Delete
'font_url' => $uploaded_files['font_url'],
[4814] Fix | Delete
);
[4815] Fix | Delete
[4816] Fix | Delete
if ( ! empty( $font_settings ) ) {
[4817] Fix | Delete
$all_custom_fonts[ $font_name ]['styles'] = ! isset( $font_settings['font_weights'] ) || 'all' === $font_settings['font_weights'] ? '100,200,300,400,500,600,700,800,900' : $font_settings['font_weights'];
[4818] Fix | Delete
$all_custom_fonts[ $font_name ]['type'] = isset( $font_settings['generic_family'] ) ? $font_settings['generic_family'] : 'serif';
[4819] Fix | Delete
}
[4820] Fix | Delete
[4821] Fix | Delete
update_option( 'et_uploaded_fonts', $all_custom_fonts );
[4822] Fix | Delete
// Need to update cached assets because custom fonts are included in static helpers.
[4823] Fix | Delete
et_fb_delete_builder_assets();
[4824] Fix | Delete
[4825] Fix | Delete
return array( 'error' => array(), 'success' => true, 'uploaded_font' => $font_name, 'updated_fonts' => $all_custom_fonts );
[4826] Fix | Delete
}
[4827] Fix | Delete
[4828] Fix | Delete
function et_pb_remove_font( $font_name ) {
[4829] Fix | Delete
if ( '' === $font_name ) {
[4830] Fix | Delete
return array( 'error' => esc_html__( 'Font Name Cannot be Empty', 'et_builder' ) );
[4831] Fix | Delete
}
[4832] Fix | Delete
[4833] Fix | Delete
$all_custom_fonts = get_option( 'et_uploaded_fonts', array() );
[4834] Fix | Delete
[4835] Fix | Delete
if ( ! isset( $all_custom_fonts[ $font_name ] ) ) {
[4836] Fix | Delete
return array( 'error' => esc_html__( 'Font Does not Exist', 'et_builder' ) );
[4837] Fix | Delete
}
[4838] Fix | Delete
[4839] Fix | Delete
// remove all uploaded font files if array
[4840] Fix | Delete
if ( is_array( $all_custom_fonts[ $font_name ]['font_file'] ) ) {
[4841] Fix | Delete
foreach ( $all_custom_fonts[ $font_name ]['font_file'] as $ext => $font_file ) {
[4842] Fix | Delete
et_pb_safe_unlink_font_file( $font_file );
[4843] Fix | Delete
}
[4844] Fix | Delete
} else {
[4845] Fix | Delete
$font_file = $all_custom_fonts[ $font_name ]['font_file'];
[4846] Fix | Delete
et_pb_safe_unlink_font_file( $font_file );
[4847] Fix | Delete
}
[4848] Fix | Delete
[4849] Fix | Delete
unset( $all_custom_fonts[ $font_name ] );
[4850] Fix | Delete
[4851] Fix | Delete
update_option( 'et_uploaded_fonts', $all_custom_fonts );
[4852] Fix | Delete
// Need to update cached assets because custom fonts are included in static helpers.
[4853] Fix | Delete
et_fb_delete_builder_assets();
[4854] Fix | Delete
[4855] Fix | Delete
return array( 'error' => array(), 'success' => true, 'updated_fonts' => $all_custom_fonts );
[4856] Fix | Delete
}
[4857] Fix | Delete
[4858] Fix | Delete
function et_pb_safe_unlink_font_file( $font_file ) {
[4859] Fix | Delete
$data_utils = ET_Core_Data_Utils::instance();
[4860] Fix | Delete
[4861] Fix | Delete
// get the extensions from our list of allowed font ext/mimes.
[4862] Fix | Delete
$valid_font_exts = array_keys( et_pb_filter_upload_mimes_custom_fonts() );
[4863] Fix | Delete
[4864] Fix | Delete
// set the upload Directory for builder font files, so we can retrieve the proper font upload dir info.
[4865] Fix | Delete
add_filter( 'upload_dir', 'et_pb_set_fonts_upload_dir' );
[4866] Fix | Delete
[4867] Fix | Delete
$wp_upload_dir_array = wp_get_upload_dir();
[4868] Fix | Delete
[4869] Fix | Delete
// get the absolute path to the et fonts upload dir.
[4870] Fix | Delete
$et_fonts_dir = $wp_upload_dir_array['path'];
[4871] Fix | Delete
[4872] Fix | Delete
// reset the upload Directory after getting the upload dir.
[4873] Fix | Delete
remove_filter( 'upload_dir', 'et_pb_set_fonts_upload_dir' );
[4874] Fix | Delete
[4875] Fix | Delete
// expand all symbolic links and resolve references to /./, /../ and extra / characters in the input path and return the canonicalized absolute pathname.
[4876] Fix | Delete
$file_realpath = realpath( $font_file );
[4877] Fix | Delete
[4878] Fix | Delete
// get information about the path.
[4879] Fix | Delete
$file_pathinfo = pathinfo( $font_file );
[4880] Fix | Delete
[4881] Fix | Delete
// Build the full file path based on the parsed pathinfo pieces.
[4882] Fix | Delete
$file_pathinfo_filename = $file_pathinfo['dirname'] . '/' . $file_pathinfo['basename'];
[4883] Fix | Delete
[4884] Fix | Delete
// make sure the realpath matches the parsed pathinfo file path, so there is no funny business.
[4885] Fix | Delete
if ( $data_utils->normalize_path( $file_realpath ) !== $data_utils->normalize_path( $file_pathinfo_filename ) ) {
[4886] Fix | Delete
return false;
[4887] Fix | Delete
}
[4888] Fix | Delete
[4889] Fix | Delete
// make sure the font file to be deleted is an actual font file extension (not an arbitrarty PHP file somehow for example).
[4890] Fix | Delete
if ( ! in_array( $file_pathinfo['extension'], $valid_font_exts ) ) {
[4891] Fix | Delete
return false;
[4892] Fix | Delete
}
[4893] Fix | Delete
[4894] Fix | Delete
// the proper upload dir for fonts.
[4895] Fix | Delete
$proper_font_file_path = $et_fonts_dir . '/' . $file_pathinfo['basename'];
[4896] Fix | Delete
[4897] Fix | Delete
// make sure the file is located in the proper fonts upload dir.
[4898] Fix | Delete
if ( $data_utils->normalize_path( $file_realpath ) !== $data_utils->normalize_path( $proper_font_file_path ) ) {
[4899] Fix | Delete
return false;
[4900] Fix | Delete
}
[4901] Fix | Delete
[4902] Fix | Delete
// now that all checks have passed, the file can be safely deleted.
[4903] Fix | Delete
return unlink( $file_realpath );
[4904] Fix | Delete
}
[4905] Fix | Delete
[4906] Fix | Delete
function et_pb_set_fonts_upload_dir( $directory ) {
[4907] Fix | Delete
$directory['path'] = $directory['basedir'] . '/et-fonts';
[4908] Fix | Delete
$directory['url'] = $directory['baseurl'] . '/et-fonts';
[4909] Fix | Delete
$directory['subdir'] = '/et-fonts';
[4910] Fix | Delete
[4911] Fix | Delete
return $directory;
[4912] Fix | Delete
}
[4913] Fix | Delete
[4914] Fix | Delete
function et_pb_get_unsynced_legacy_options( $post_type, $shortcode_data ) {
[4915] Fix | Delete
if ( ! isset( $shortcode_data['attrs']['saved_tabs'] ) && 'all' === $shortcode_data['attrs']['saved_tabs'] ) {
[4916] Fix | Delete
return array();
[4917] Fix | Delete
}
[4918] Fix | Delete
[4919] Fix | Delete
// get all options
[4920] Fix | Delete
$general_fields = ET_Builder_Element::get_general_fields( $post_type, 'all', $shortcode_data['type'] );
[4921] Fix | Delete
$advanced_fields = ET_Builder_Element::get_advanced_fields( $post_type, 'all', $shortcode_data['type'] );
[4922] Fix | Delete
$css_fields = ET_Builder_Element::get_custom_css_fields( $post_type, 'all', $shortcode_data['type'] );
[4923] Fix | Delete
$saved_fields = array_keys( $shortcode_data['attrs'] );
[4924] Fix | Delete
[4925] Fix | Delete
// content fields should never be included into unsynced options. We use different key for the content options.
[4926] Fix | Delete
$saved_fields[] = 'content';
[4927] Fix | Delete
$saved_fields[] = 'raw_content';
[4928] Fix | Delete
[4929] Fix | Delete
$all_fields = array_merge( array_keys( $general_fields ), array_keys( $advanced_fields ), array_keys( $css_fields ) );
[4930] Fix | Delete
[4931] Fix | Delete
// compare all options with saved options to get array of unsynced ones.
[4932] Fix | Delete
$unsynced_options = array_diff( $all_fields, $saved_fields );
[4933] Fix | Delete
[4934] Fix | Delete
if ( false === strpos( $shortcode_data['attrs']['saved_tabs'], 'general' ) ) {
[4935] Fix | Delete
$unsynced_options[] = 'et_pb_content_field';
[4936] Fix | Delete
}
[4937] Fix | Delete
[4938] Fix | Delete
return $unsynced_options;
[4939] Fix | Delete
}
[4940] Fix | Delete
[4941] Fix | Delete
// prepare the ssl link for FB
[4942] Fix | Delete
function et_fb_prepare_ssl_link( $link ) {
[4943] Fix | Delete
// replace http:// with https:// if FORCE_SSL_ADMIN option enabled
[4944] Fix | Delete
if ( defined( 'FORCE_SSL_ADMIN' ) && FORCE_SSL_ADMIN ) {
[4945] Fix | Delete
return str_replace( 'http://', 'https://', $link );
[4946] Fix | Delete
}
[4947] Fix | Delete
[4948] Fix | Delete
return $link;
[4949] Fix | Delete
}
[4950] Fix | Delete
[4951] Fix | Delete
/**
[4952] Fix | Delete
* Create a VB/BFB url.
[4953] Fix | Delete
* @param string $url Post url.
[4954] Fix | Delete
* @param string $builder 'vb' or 'bfb'.
[4955] Fix | Delete
* @return string.
[4956] Fix | Delete
*/
[4957] Fix | Delete
if ( ! function_exists( 'et_fb_get_builder_url' ) ) :
[4958] Fix | Delete
function et_fb_get_builder_url( $url = false, $builder = 'vb', $is_new_page = false, $custom_page_id = false ) {
[4959] Fix | Delete
$args = array(
[4960] Fix | Delete
'et_fb' => '1',
[4961] Fix | Delete
'et_bfb' => 'bfb' === $builder ? '1' : false,
[4962] Fix | Delete
'PageSpeed' => 'off',
[4963] Fix | Delete
);
[4964] Fix | Delete
[4965] Fix | Delete
if ('bfb' === $builder && $is_new_page) {
[4966] Fix | Delete
global $post;
[4967] Fix | Delete
[4968] Fix | Delete
$duplicate_options = get_user_meta( get_current_user_id(), 'pll_duplicate_content', true );
[4969] Fix | Delete
$duplicate_content = ! empty( $duplicate_options ) && ! empty( $duplicate_options[ $post->post_type ] );
[4970] Fix | Delete
$duplicate_fallback = (int) $custom_page_id === (int) get_option( 'page_for_posts' ) ? (int) $custom_page_id : 'empty';
[4971] Fix | Delete
$from_post_id = isset( $_GET['from_post'] ) ? (int) sanitize_text_field( $_GET['from_post'] ) : false;
[4972] Fix | Delete
[4973] Fix | Delete
$args['from_post'] = $duplicate_content && $from_post_id ? $from_post_id : $duplicate_fallback;
[4974] Fix | Delete
$args['is_new_page'] = '1';
[4975] Fix | Delete
[4976] Fix | Delete
if ( $custom_page_id ) {
[4977] Fix | Delete
$args['custom_page_id'] = $custom_page_id;
[4978] Fix | Delete
}
[4979] Fix | Delete
}
[4980] Fix | Delete
[4981] Fix | Delete
// Additional info need to be appended via query strings if current request is used to get
[4982] Fix | Delete
// BFB URL and the given page's custom post type has its publicly_queryable setting is set
[4983] Fix | Delete
// to false. These additional information is be used to deterimined whether the BFB page
[4984] Fix | Delete
// request needs to modify its global $query and rewrite_rule configuration so correct BFB
[4985] Fix | Delete
// page can be rendered for valid user
[4986] Fix | Delete
if ( 'bfb' === $builder && ! $url ) {
[4987] Fix | Delete
$post_id = get_the_ID();
[4988] Fix | Delete
$post_type = get_post_type();
[4989] Fix | Delete
[4990] Fix | Delete
// 'page' and 'et_pb_layout' are not queryable so post type needs to be checked against
[4991] Fix | Delete
// third party post types first to avoid false positive for these default post types
[4992] Fix | Delete
$is_third_party_post_type = in_array( $post_type, et_builder_get_third_party_post_types() );
[4993] Fix | Delete
$is_unqueryable = $is_third_party_post_type && in_array(
[4994] Fix | Delete
$post_type,
[4995] Fix | Delete
get_post_types( array( 'publicly_queryable' => false ) )
[4996] Fix | Delete
);
[4997] Fix | Delete
[4998] Fix | Delete
// These post id & post type query strings should only be added if current post type
[4999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function