Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../themes/Divi/includes/builder
File: class-et-builder-element.php
'button_id' => '',
[17500] Fix | Delete
'button_classname' => array(),
[17501] Fix | Delete
'button_custom' => '',
[17502] Fix | Delete
'button_rel' => '',
[17503] Fix | Delete
'button_text' => '',
[17504] Fix | Delete
'button_text_escaped' => false,
[17505] Fix | Delete
'button_url' => '',
[17506] Fix | Delete
'custom_icon' => '',
[17507] Fix | Delete
'custom_icon_tablet' => '',
[17508] Fix | Delete
'custom_icon_phone' => '',
[17509] Fix | Delete
'display_button' => true,
[17510] Fix | Delete
'has_wrapper' => true,
[17511] Fix | Delete
'url_new_window' => '',
[17512] Fix | Delete
'multi_view_data' => '',
[17513] Fix | Delete
);
[17514] Fix | Delete
[17515] Fix | Delete
$args = wp_parse_args( $args, $defaults );
[17516] Fix | Delete
[17517] Fix | Delete
// Do not proceed if display_button argument is false.
[17518] Fix | Delete
if ( ! $args['display_button'] ) {
[17519] Fix | Delete
return '';
[17520] Fix | Delete
}
[17521] Fix | Delete
[17522] Fix | Delete
$button_text = $args['button_text_escaped'] ? $args['button_text'] : esc_html( $args['button_text'] );
[17523] Fix | Delete
[17524] Fix | Delete
// Do not proceed if button_text argument is empty and not having multi view value.
[17525] Fix | Delete
if ( '' === $button_text && ! $args['multi_view_data'] ) {
[17526] Fix | Delete
return '';
[17527] Fix | Delete
}
[17528] Fix | Delete
[17529] Fix | Delete
// Button classname
[17530] Fix | Delete
$button_classname = array( 'et_pb_button' );
[17531] Fix | Delete
[17532] Fix | Delete
if ( ( '' !== $args['custom_icon'] || '' !== $args['custom_icon_tablet'] || '' !== $args['custom_icon_phone'] ) && 'on' === $args['button_custom'] ) {
[17533] Fix | Delete
$button_classname[] = 'et_pb_custom_button_icon';
[17534] Fix | Delete
}
[17535] Fix | Delete
[17536] Fix | Delete
// Add multi view CSS hidden helper class when button text is empty on desktop mode.
[17537] Fix | Delete
if ( '' === $button_text && $args['multi_view_data'] ) {
[17538] Fix | Delete
$button_classname[] = 'et_multi_view_hidden';
[17539] Fix | Delete
}
[17540] Fix | Delete
[17541] Fix | Delete
if ( ! empty( $args['button_classname'] ) ) {
[17542] Fix | Delete
$button_classname = array_merge( $button_classname, $args['button_classname'] );
[17543] Fix | Delete
}
[17544] Fix | Delete
[17545] Fix | Delete
// Custom icon data attribute
[17546] Fix | Delete
$use_data_icon = '' !== $args['custom_icon'] && 'on' === $args['button_custom'];
[17547] Fix | Delete
$data_icon = $use_data_icon ? sprintf(
[17548] Fix | Delete
' data-icon="%1$s"',
[17549] Fix | Delete
esc_attr( et_pb_process_font_icon( $args['custom_icon'] ) )
[17550] Fix | Delete
) : '';
[17551] Fix | Delete
[17552] Fix | Delete
$use_data_icon_tablet = '' !== $args['custom_icon_tablet'] && 'on' === $args['button_custom'];
[17553] Fix | Delete
$data_icon_tablet = $use_data_icon_tablet ? sprintf(
[17554] Fix | Delete
' data-icon-tablet="%1$s"',
[17555] Fix | Delete
esc_attr( et_pb_process_font_icon( $args['custom_icon_tablet'] ) )
[17556] Fix | Delete
) : '';
[17557] Fix | Delete
[17558] Fix | Delete
$use_data_icon_phone = '' !== $args['custom_icon_phone'] && 'on' === $args['button_custom'];
[17559] Fix | Delete
$data_icon_phone = $use_data_icon_phone ? sprintf(
[17560] Fix | Delete
' data-icon-phone="%1$s"',
[17561] Fix | Delete
esc_attr( et_pb_process_font_icon( $args['custom_icon_phone'] ) )
[17562] Fix | Delete
) : '';
[17563] Fix | Delete
[17564] Fix | Delete
// Render button
[17565] Fix | Delete
return sprintf( '%7$s<a%9$s class="%5$s" href="%1$s"%3$s%4$s%6$s%10$s%11$s%12$s>%2$s</a>%8$s',
[17566] Fix | Delete
esc_url( $args['button_url'] ),
[17567] Fix | Delete
et_core_esc_previously( $button_text ),
[17568] Fix | Delete
( 'on' === $args['url_new_window'] ? ' target="_blank"' : '' ),
[17569] Fix | Delete
et_core_esc_previously( $data_icon ),
[17570] Fix | Delete
esc_attr( implode( ' ', array_unique( $button_classname ) ) ), // #5
[17571] Fix | Delete
et_core_esc_previously( $this->get_rel_attributes( $args['button_rel'] ) ),
[17572] Fix | Delete
$args['has_wrapper'] ? '<div class="et_pb_button_wrapper">' : '',
[17573] Fix | Delete
$args['has_wrapper'] ? '</div>' : '',
[17574] Fix | Delete
'' !== $args['button_id'] ? sprintf( ' id="%1$s"', esc_attr( $args['button_id'] ) ) : '',
[17575] Fix | Delete
et_core_esc_previously( $data_icon_tablet ), // #10
[17576] Fix | Delete
et_core_esc_previously( $data_icon_phone ),
[17577] Fix | Delete
et_core_esc_previously( $args['multi_view_data'] )
[17578] Fix | Delete
);
[17579] Fix | Delete
}
[17580] Fix | Delete
[17581] Fix | Delete
public static function is_saving_cache() {
[17582] Fix | Delete
return apply_filters( 'et_builder_modules_is_saving_cache', false );
[17583] Fix | Delete
}
[17584] Fix | Delete
[17585] Fix | Delete
/**
[17586] Fix | Delete
* Get array of attributes which have dynamic content enabled.
[17587] Fix | Delete
*
[17588] Fix | Delete
* @since 3.17.2
[17589] Fix | Delete
*
[17590] Fix | Delete
* @param mixed[] $attrs
[17591] Fix | Delete
*
[17592] Fix | Delete
* @return string[]
[17593] Fix | Delete
*/
[17594] Fix | Delete
protected function _get_enabled_dynamic_attributes( $attrs ) {
[17595] Fix | Delete
$enabled_dynamic_attributes = isset( $attrs['_dynamic_attributes'] ) ? $attrs['_dynamic_attributes'] : '';
[17596] Fix | Delete
$enabled_dynamic_attributes = array_filter( explode( ',', $enabled_dynamic_attributes ) );
[17597] Fix | Delete
[17598] Fix | Delete
return $enabled_dynamic_attributes;
[17599] Fix | Delete
}
[17600] Fix | Delete
[17601] Fix | Delete
/**
[17602] Fix | Delete
* Check if an attribute value is dynamic or not.
[17603] Fix | Delete
*
[17604] Fix | Delete
* @since 3.17.2
[17605] Fix | Delete
*
[17606] Fix | Delete
* @param string $attribute
[17607] Fix | Delete
* @param string $value
[17608] Fix | Delete
* @param array $enabled_dynamic_attributes
[17609] Fix | Delete
*
[17610] Fix | Delete
* @return bool
[17611] Fix | Delete
*/
[17612] Fix | Delete
protected function _is_dynamic_value( $attribute, $value, $enabled_dynamic_attributes ) {
[17613] Fix | Delete
if ( ! in_array( $attribute, $enabled_dynamic_attributes ) ) {
[17614] Fix | Delete
return false;
[17615] Fix | Delete
}
[17616] Fix | Delete
[17617] Fix | Delete
return et_builder_parse_dynamic_content( $value )->is_dynamic();
[17618] Fix | Delete
}
[17619] Fix | Delete
[17620] Fix | Delete
/**
[17621] Fix | Delete
* Re-encode legacy dynamic content values in an attrs array.
[17622] Fix | Delete
*
[17623] Fix | Delete
* @since 3.20.2
[17624] Fix | Delete
*
[17625] Fix | Delete
* @param string[] $attrs
[17626] Fix | Delete
* @param string[] $enabled_dynamic_attributes
[17627] Fix | Delete
*
[17628] Fix | Delete
* @return string[]
[17629] Fix | Delete
*/
[17630] Fix | Delete
protected function _encode_legacy_dynamic_content( $attrs, $enabled_dynamic_attributes ) {
[17631] Fix | Delete
if ( is_array( $attrs ) ) {
[17632] Fix | Delete
foreach ( $attrs as $field => $value ) {
[17633] Fix | Delete
$attrs[ $field ] = $this->_encode_legacy_dynamic_content_value( $field, $value, $enabled_dynamic_attributes );
[17634] Fix | Delete
}
[17635] Fix | Delete
}
[17636] Fix | Delete
[17637] Fix | Delete
return $attrs;
[17638] Fix | Delete
}
[17639] Fix | Delete
[17640] Fix | Delete
/**
[17641] Fix | Delete
* Re-encode legacy dynamic content value.
[17642] Fix | Delete
*
[17643] Fix | Delete
* @since 3.20.2
[17644] Fix | Delete
*
[17645] Fix | Delete
* @param string $field
[17646] Fix | Delete
* @param string $value
[17647] Fix | Delete
*
[17648] Fix | Delete
* @return string
[17649] Fix | Delete
*/
[17650] Fix | Delete
protected function _encode_legacy_dynamic_content_value( $field, $value, $enabled_dynamic_attributes ) {
[17651] Fix | Delete
if ( ! in_array( $field, $enabled_dynamic_attributes ) ) {
[17652] Fix | Delete
return $value;
[17653] Fix | Delete
}
[17654] Fix | Delete
[17655] Fix | Delete
$json = et_builder_clean_dynamic_content( $value );
[17656] Fix | Delete
[17657] Fix | Delete
if ( preg_match( '/^@ET-DC@(.*?)@$/', $json ) ) {
[17658] Fix | Delete
return $value;
[17659] Fix | Delete
}
[17660] Fix | Delete
[17661] Fix | Delete
return $this->_resolve_value_from_json( $field, $json, $enabled_dynamic_attributes );
[17662] Fix | Delete
}
[17663] Fix | Delete
[17664] Fix | Delete
/**
[17665] Fix | Delete
* Resolve a value, be it static or dynamic to a static one.
[17666] Fix | Delete
*
[17667] Fix | Delete
* @since 3.17.2
[17668] Fix | Delete
*
[17669] Fix | Delete
* @param integer $post_id
[17670] Fix | Delete
* @param string $field
[17671] Fix | Delete
* @param string $value
[17672] Fix | Delete
* @param string[] $enabled_dynamic_attributes
[17673] Fix | Delete
* @param boolean $serialize
[17674] Fix | Delete
*
[17675] Fix | Delete
* @return string
[17676] Fix | Delete
*/
[17677] Fix | Delete
protected function _resolve_value( $post_id, $field, $value, $enabled_dynamic_attributes, $serialize ) {
[17678] Fix | Delete
global $wp_query;
[17679] Fix | Delete
[17680] Fix | Delete
if ( ! in_array( $field, $enabled_dynamic_attributes ) ) {
[17681] Fix | Delete
return $value;
[17682] Fix | Delete
}
[17683] Fix | Delete
[17684] Fix | Delete
$builder_value = et_builder_parse_dynamic_content( $value );
[17685] Fix | Delete
[17686] Fix | Delete
if ( $serialize ) {
[17687] Fix | Delete
return $builder_value->serialize();
[17688] Fix | Delete
}
[17689] Fix | Delete
[17690] Fix | Delete
$is_blog_query = isset( $wp_query->et_pb_blog_query ) && $wp_query->et_pb_blog_query;
[17691] Fix | Delete
[17692] Fix | Delete
if ( ! $is_blog_query && ! $wp_query->is_singular() ) {
[17693] Fix | Delete
return $builder_value->resolve( null );
[17694] Fix | Delete
}
[17695] Fix | Delete
[17696] Fix | Delete
return $builder_value->resolve( $post_id );
[17697] Fix | Delete
}
[17698] Fix | Delete
[17699] Fix | Delete
/**
[17700] Fix | Delete
* Resolve a value from the legacy JSON format of dynamic content.
[17701] Fix | Delete
* This is essentially a migration but is implemented separately
[17702] Fix | Delete
* as it needs to parse every field of every module and do it
[17703] Fix | Delete
* before actual migrations are ran.
[17704] Fix | Delete
*
[17705] Fix | Delete
* @since 3.20.2
[17706] Fix | Delete
*
[17707] Fix | Delete
* @param integer $post_id
[17708] Fix | Delete
* @param string $field
[17709] Fix | Delete
* @param string $value
[17710] Fix | Delete
* @param string[] $enabled_dynamic_attributes
[17711] Fix | Delete
* @param boolean $serialize
[17712] Fix | Delete
*
[17713] Fix | Delete
* @return string
[17714] Fix | Delete
*/
[17715] Fix | Delete
protected function _resolve_value_from_json( $field, $value, $enabled_dynamic_attributes ) {
[17716] Fix | Delete
if ( ! in_array( $field, $enabled_dynamic_attributes ) ) {
[17717] Fix | Delete
return $value;
[17718] Fix | Delete
}
[17719] Fix | Delete
[17720] Fix | Delete
$json = et_builder_clean_dynamic_content( $value );
[17721] Fix | Delete
[17722] Fix | Delete
// Replace encoded quotes.
[17723] Fix | Delete
$json = str_replace( array( '&#8220;', '&#8221;', '&#8243;', "%22" ), '"', $json );
[17724] Fix | Delete
[17725] Fix | Delete
// Strip <p></p> artifacts from wpautop in before/after settings. Example:
[17726] Fix | Delete
// {"dynamic":true,"content":"post_title","settings":{"before":"</p>
[17727] Fix | Delete
// <h1>","after":"</h1>
[17728] Fix | Delete
// <p>"}}
[17729] Fix | Delete
// This is a rough solution implemented due to time constraints.
[17730] Fix | Delete
$json = preg_replace( '~
[17731] Fix | Delete
("(?:before|after)":") # $1 = Anchor to the before/after settings.
[17732] Fix | Delete
(?: # Match cases where the value starts with the offending tag.
[17733] Fix | Delete
<\/?p> # The root of all evil.
[17734] Fix | Delete
[\r\n]+ # Whitespace follows the tag.
[17735] Fix | Delete
)*
[17736] Fix | Delete
(?: # Match cases where the value ends with the offending tag.
[17737] Fix | Delete
([^"]*) # $2 = The preceeding value.
[17738] Fix | Delete
[\r\n]+ # Whitespace preceedes the tag.
[17739] Fix | Delete
<\/?p> # The root of all evil.
[17740] Fix | Delete
)*
[17741] Fix | Delete
~xi', '$1$2', $json );
[17742] Fix | Delete
[17743] Fix | Delete
// Remove line-breaks which break the json strings.
[17744] Fix | Delete
$json = preg_replace( '/\r|\n/', '', $json );
[17745] Fix | Delete
[17746] Fix | Delete
$json_value = et_builder_parse_dynamic_content_json( $json );
[17747] Fix | Delete
[17748] Fix | Delete
if ( null === $json_value ) {
[17749] Fix | Delete
return $value;
[17750] Fix | Delete
}
[17751] Fix | Delete
[17752] Fix | Delete
return $json_value->serialize();
[17753] Fix | Delete
}
[17754] Fix | Delete
[17755] Fix | Delete
/**
[17756] Fix | Delete
* Escape an attribute's value.
[17757] Fix | Delete
*
[17758] Fix | Delete
* @since 3.17.2
[17759] Fix | Delete
*
[17760] Fix | Delete
* @param string $attribute
[17761] Fix | Delete
* @param string $html 'limited', 'full', 'none'
[17762] Fix | Delete
* @param string $predefined_value Predifined value need to escape.
[17763] Fix | Delete
*
[17764] Fix | Delete
* @return string
[17765] Fix | Delete
*/
[17766] Fix | Delete
protected function _esc_attr( $attribute, $html = 'none', $predefined_value = null ) {
[17767] Fix | Delete
$html = in_array( $html, array( 'limited', 'full' ), true ) ? $html : 'none';
[17768] Fix | Delete
$raw = isset( $this->attrs_unprocessed[ $attribute ] ) ? $this->attrs_unprocessed[ $attribute ] : '';
[17769] Fix | Delete
$formatted = isset( $this->props[ $attribute ] ) ? $this->props[ $attribute ] : '';
[17770] Fix | Delete
$dynamic_attributes = $this->_get_enabled_dynamic_attributes( $this->props );
[17771] Fix | Delete
[17772] Fix | Delete
// More often than not content is not an attribute so we need to handle that special case.
[17773] Fix | Delete
if ( 'content' === $attribute && ! isset( $this->attrs_unprocessed[ $attribute ] ) ) {
[17774] Fix | Delete
$raw = $this->content_unprocessed;
[17775] Fix | Delete
$formatted = $this->content;
[17776] Fix | Delete
}
[17777] Fix | Delete
[17778] Fix | Delete
if ( ! is_null( $predefined_value ) ) {
[17779] Fix | Delete
$formatted = $predefined_value;
[17780] Fix | Delete
}
[17781] Fix | Delete
[17782] Fix | Delete
if ( ! $this->_is_dynamic_value( $attribute, $raw, $dynamic_attributes ) ) {
[17783] Fix | Delete
if ( 'full' === $html ) {
[17784] Fix | Delete
return $formatted;
[17785] Fix | Delete
}
[17786] Fix | Delete
return esc_html( $formatted );
[17787] Fix | Delete
}
[17788] Fix | Delete
[17789] Fix | Delete
if ( 'limited' === $html ) {
[17790] Fix | Delete
return wp_kses( $formatted, array(
[17791] Fix | Delete
'strong' => array( 'id' => array(), 'class' => array(), 'style' => array() ),
[17792] Fix | Delete
'em' => array( 'id' => array(), 'class' => array(), 'style' => array() ),
[17793] Fix | Delete
'i' => array( 'id' => array(), 'class' => array(), 'style' => array() ),
[17794] Fix | Delete
) );
[17795] Fix | Delete
}
[17796] Fix | Delete
[17797] Fix | Delete
// Dynamic content values are escaped when they are resolved so we do not want to
[17798] Fix | Delete
// double-escape them when using them in the frontend, for example.
[17799] Fix | Delete
return et_core_esc_previously( $formatted );
[17800] Fix | Delete
}
[17801] Fix | Delete
[17802] Fix | Delete
/**
[17803] Fix | Delete
* Get the current TB layout ID if we are rendering one or the current post ID instead.
[17804] Fix | Delete
*
[17805] Fix | Delete
* @since 4.0
[17806] Fix | Delete
*
[17807] Fix | Delete
* @return integer
[17808] Fix | Delete
*/
[17809] Fix | Delete
public static function get_layout_id() {
[17810] Fix | Delete
$layout_id = self::get_theme_builder_layout_id();
[17811] Fix | Delete
$post_id = self::get_current_post_id_reverse();
[17812] Fix | Delete
[17813] Fix | Delete
return $layout_id ? $layout_id : $post_id;
[17814] Fix | Delete
}
[17815] Fix | Delete
[17816] Fix | Delete
/**
[17817] Fix | Delete
* Get the current theme builder layout.
[17818] Fix | Delete
* Returns 'default' if no layout has been started.
[17819] Fix | Delete
*
[17820] Fix | Delete
* @since 4.0
[17821] Fix | Delete
*
[17822] Fix | Delete
* @return string
[17823] Fix | Delete
*/
[17824] Fix | Delete
public static function get_theme_builder_layout_type() {
[17825] Fix | Delete
$count = count( self::$theme_builder_layout );
[17826] Fix | Delete
[17827] Fix | Delete
if ( $count > 0 ) {
[17828] Fix | Delete
return self::$theme_builder_layout[ $count - 1 ]['type'];
[17829] Fix | Delete
}
[17830] Fix | Delete
[17831] Fix | Delete
return 'default';
[17832] Fix | Delete
}
[17833] Fix | Delete
[17834] Fix | Delete
/**
[17835] Fix | Delete
* Check if a module is rendered as normal post content or theme builder layout.
[17836] Fix | Delete
*
[17837] Fix | Delete
* @since 4.0
[17838] Fix | Delete
*
[17839] Fix | Delete
* @return bool
[17840] Fix | Delete
*/
[17841] Fix | Delete
public static function is_theme_builder_layout() {
[17842] Fix | Delete
return 'default' !== self::get_theme_builder_layout_type();
[17843] Fix | Delete
}
[17844] Fix | Delete
[17845] Fix | Delete
/**
[17846] Fix | Delete
* Get the current theme builder layout id.
[17847] Fix | Delete
* Returns 0 if no layout has been started.
[17848] Fix | Delete
*
[17849] Fix | Delete
* @since 4.0
[17850] Fix | Delete
*
[17851] Fix | Delete
* @return integer
[17852] Fix | Delete
*/
[17853] Fix | Delete
public static function get_theme_builder_layout_id() {
[17854] Fix | Delete
$count = count( self::$theme_builder_layout );
[17855] Fix | Delete
[17856] Fix | Delete
if ( $count > 0 ) {
[17857] Fix | Delete
return self::$theme_builder_layout[ $count - 1 ]['id'];
[17858] Fix | Delete
}
[17859] Fix | Delete
[17860] Fix | Delete
return 0;
[17861] Fix | Delete
}
[17862] Fix | Delete
[17863] Fix | Delete
/**
[17864] Fix | Delete
* Begin a theme builder layout.
[17865] Fix | Delete
*
[17866] Fix | Delete
* @since 4.0
[17867] Fix | Delete
*
[17868] Fix | Delete
* @param integer $layout_id
[17869] Fix | Delete
*
[17870] Fix | Delete
* @return void
[17871] Fix | Delete
*/
[17872] Fix | Delete
public static function begin_theme_builder_layout( $layout_id ) {
[17873] Fix | Delete
$type = get_post_type( $layout_id );
[17874] Fix | Delete
[17875] Fix | Delete
if ( ! et_theme_builder_is_layout_post_type( $type ) ) {
[17876] Fix | Delete
$type = 'default';
[17877] Fix | Delete
}
[17878] Fix | Delete
[17879] Fix | Delete
self::$theme_builder_layout[] = array(
[17880] Fix | Delete
'id' => (int) $layout_id,
[17881] Fix | Delete
'type' => $type,
[17882] Fix | Delete
);
[17883] Fix | Delete
}
[17884] Fix | Delete
[17885] Fix | Delete
/**
[17886] Fix | Delete
* End the current theme builder layout.
[17887] Fix | Delete
*
[17888] Fix | Delete
* @since 4.0
[17889] Fix | Delete
*
[17890] Fix | Delete
* @return void
[17891] Fix | Delete
*/
[17892] Fix | Delete
public static function end_theme_builder_layout() {
[17893] Fix | Delete
array_pop(self::$theme_builder_layout);
[17894] Fix | Delete
}
[17895] Fix | Delete
[17896] Fix | Delete
/**
[17897] Fix | Delete
* Get the order class suffix for the current theme builder layout, if any.
[17898] Fix | Delete
*
[17899] Fix | Delete
* @since 4.0
[17900] Fix | Delete
*
[17901] Fix | Delete
* @return string
[17902] Fix | Delete
*/
[17903] Fix | Delete
protected static function _get_theme_builder_order_class_suffix() {
[17904] Fix | Delete
$layout_type = self::get_theme_builder_layout_type();
[17905] Fix | Delete
$type_map = array(
[17906] Fix | Delete
ET_THEME_BUILDER_HEADER_LAYOUT_POST_TYPE => '_tb_header',
[17907] Fix | Delete
ET_THEME_BUILDER_BODY_LAYOUT_POST_TYPE => '_tb_body',
[17908] Fix | Delete
ET_THEME_BUILDER_FOOTER_LAYOUT_POST_TYPE => '_tb_footer',
[17909] Fix | Delete
);
[17910] Fix | Delete
[17911] Fix | Delete
if ( empty( $layout_type ) || ! isset( $type_map[ $layout_type ] ) ) {
[17912] Fix | Delete
return '';
[17913] Fix | Delete
}
[17914] Fix | Delete
[17915] Fix | Delete
return $type_map[ $layout_type ];
[17916] Fix | Delete
}
[17917] Fix | Delete
[17918] Fix | Delete
protected function field_to_css_prop( $field ) {
[17919] Fix | Delete
return str_replace( '_', '-', $field );
[17920] Fix | Delete
}
[17921] Fix | Delete
[17922] Fix | Delete
/**
[17923] Fix | Delete
* Initialize Modules Cache
[17924] Fix | Delete
*
[17925] Fix | Delete
* @since 3.24
[17926] Fix | Delete
*/
[17927] Fix | Delete
public static function init_cache() {
[17928] Fix | Delete
$cache = self::get_cache_filename();
[17929] Fix | Delete
[17930] Fix | Delete
if ( $cache && et_()->WPFS()->is_readable( $cache ) ) {
[17931] Fix | Delete
// Load cache
[17932] Fix | Delete
$result = @unserialize( et_()->WPFS()->get_contents( $cache ) );
[17933] Fix | Delete
if ( false !== $result ) {
[17934] Fix | Delete
if ( count( $result ) < 3 ) {
[17935] Fix | Delete
// Old cache format detected, delete everything
[17936] Fix | Delete
et_fb_delete_builder_assets();
[17937] Fix | Delete
if ( ! file_exists ( $cache ) ) {
[17938] Fix | Delete
// If cache has been successfully deleted, then init again.
[17939] Fix | Delete
self::init_cache();
[17940] Fix | Delete
}
[17941] Fix | Delete
return;
[17942] Fix | Delete
}
[17943] Fix | Delete
list ( self::$_cache, self::$_fields_unprocessed ) = $result;
[17944] Fix | Delete
[17945] Fix | Delete
// Define option template variable instead of using list to avoid error that might
[17946] Fix | Delete
// happen when option template file exists (theme is updated) and frontend is
[17947] Fix | Delete
// accessed while static module field data hasn't been updated
[17948] Fix | Delete
$cached_option_template_data = et_()->array_get( $result, '2', array() );
[17949] Fix | Delete
$cached_option_template = et_()->array_get( $result, '3', array() );
[17950] Fix | Delete
$cached_option_template_tab_slug_maps = et_()->array_get( $result, '4', array() );
[17951] Fix | Delete
[17952] Fix | Delete
// init_cache() is called really early. $template property might not be available yet
[17953] Fix | Delete
if ( null === self::$option_template ) {
[17954] Fix | Delete
self::$option_template = et_pb_option_template();
[17955] Fix | Delete
}
[17956] Fix | Delete
[17957] Fix | Delete
// Set option template data from static cache if exist
[17958] Fix | Delete
if ( is_array( $cached_option_template_data ) && ! empty( $cached_option_template_data ) ) {
[17959] Fix | Delete
self::$option_template->set_data( $cached_option_template_data );
[17960] Fix | Delete
}
[17961] Fix | Delete
[17962] Fix | Delete
// Set option template from static cache if exist
[17963] Fix | Delete
if ( is_array( $cached_option_template ) && ! empty( $cached_option_template ) ) {
[17964] Fix | Delete
self::$option_template->set_templates( $cached_option_template );
[17965] Fix | Delete
}
[17966] Fix | Delete
[17967] Fix | Delete
// Set option template tab slug maps from static cache if exist
[17968] Fix | Delete
if ( is_array( $cached_option_template_tab_slug_maps ) && ! empty( $cached_option_template_tab_slug_maps ) ) {
[17969] Fix | Delete
self::$option_template->set_tab_slug_map( $cached_option_template_tab_slug_maps );
[17970] Fix | Delete
}
[17971] Fix | Delete
[17972] Fix | Delete
// Box Shadow sets WP hooks internally so we gotta load it anyway -> #blame_george.
[17973] Fix | Delete
ET_Builder_Module_Fields_Factory::get( 'BoxShadow' );
[17974] Fix | Delete
} else {
[17975] Fix | Delete
// Cache couldn't be unserialized, delete the file so it will be regenerated.
[17976] Fix | Delete
@unlink( $cache );
[17977] Fix | Delete
}
[17978] Fix | Delete
} else if ( $cache ) {
[17979] Fix | Delete
// Only save cache when a builder page is being rendered, needed because some data
[17980] Fix | Delete
// (e.g. mail provider defaults) is only generated in this case, hence saving while rendering
[17981] Fix | Delete
// a FE page or during AJAX call would result in cache missing data.
[17982] Fix | Delete
self::$_cache = array();
[17983] Fix | Delete
add_filter( 'et_builder_modules_is_saving_cache', '__return_true' );
[17984] Fix | Delete
add_action( 'et_builder_modules_loaded', array( 'ET_Builder_Element', 'save_cache' ) );
[17985] Fix | Delete
}
[17986] Fix | Delete
}
[17987] Fix | Delete
[17988] Fix | Delete
/**
[17989] Fix | Delete
* Get Modules cache file name.
[17990] Fix | Delete
*
[17991] Fix | Delete
* @param mixed $post_type When set to `false`, autodetect.
[17992] Fix | Delete
*
[17993] Fix | Delete
* @since 3.24
[17994] Fix | Delete
*/
[17995] Fix | Delete
public static function get_cache_filename( $post_type = false ) {
[17996] Fix | Delete
[17997] Fix | Delete
global $post, $et_builder_post_type;
[17998] Fix | Delete
$ajax_use_cache = apply_filters( 'et_builder_ajax_use_cache', false );
[17999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function