Files
roi-theme/wp-content/plugins/thrive-ultimatum/tcb/inc/classes/class-tcb-lightbox.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

297 lines
9.9 KiB
PHP
Executable File

<?php
/**
* Class TCB_Lightbox
*
* This file is only included when TCB is installed as a stand-alone plugin
*/
class TCB_Lightbox extends TCB_Post {
public function get_html() {
if ( ! $this->post || ( $this->post && $this->post->post_status === 'trash' ) ) {
return '';
}
$lightbox_id = $this->post->ID;
$lightbox_content = str_replace( ']]>', ']]&gt;', apply_filters( 'the_content', $this->post_content ) );
$config = $this->globals();
return sprintf(
'<div%s id="tve_thrive_lightbox_%s"><div class="tve_p_lb_overlay" data-style="%s" style="%s"%s></div>' .
'<div class="tve_p_lb_content bSe cnt%s tcb-lp-lb" style="%s"%s><div class="tve_p_lb_inner" id="tve-p-scroller" style="%s"><article>%s</article></div>' .
'<a href="javascript:void(0)" class="tve_p_lb_close%s" style="%s"%s title="Close">x</a></div></div>',
empty( $data['visible'] ) ? ' style="display: none"' : '',
$lightbox_id,
$config['overlay']['css'],
$config['overlay']['css'],
$config['overlay']['custom_color'],
$config['content']['class'],
$config['content']['css'],
$config['content']['custom_color'],
$config['inner']['css'],
$lightbox_content,
$config['close']['class'],
$config['close']['css'],
$config['close']['custom_color']
);
}
/**
* Reads the globals saved in TCB2 format
*
* @param array $config
*
* @return array
*/
public function globals_v2( $config ) {
return array(
'overlay' => array(
'css' => '',
'custom_color' => ! empty( $config['overlay_css'] ) ? ' data-css="' . $config['overlay_css'] . '"' : '',
),
'content' => array(
'css' => '',
'class' => '',
'custom_color' => ! empty( $config['content_css'] ) ? ' data-css="' . $config['content_css'] . '"' : '',
),
'close' => array(
'css' => '',
'class' => '',
'custom_color' => ! empty( $config['close_css'] ) ? ' data-css="' . $config['close_css'] . '"' : '',
),
'inner' => [
'css' => '',
],
);
}
/**
* Fetches Lightbox global settings
* Checks if this lightbox has content stored in TCB2
*
* @return array
*/
public function globals() {
$config = $this->meta( 'tve_globals' );
if ( isset( $config['content_css'] ) || isset( $config['close_css'] ) || isset( $config['overlay_css'] ) ) {
/* this is a tcb2-style lightbox */
return $this->globals_v2( $config );
}
$html = array(
'overlay' => array(
'css' => empty( $config['l_oo'] ) ? '' : 'opacity:' . $config['l_oo'],
'custom_color' => empty( $config['l_ob'] ) ? '' : ' data-tve-custom-colour="' . $config['l_ob'] . '"',
),
'content' => array(
'custom_color' => empty( $config['l_cb'] ) ? '' : ' data-tve-custom-colour="' . $config['l_cb'] . '"',
'class' => empty( $config['l_ccls'] ) ? '' : ' ' . $config['l_ccls'],
'css' => '',
),
'inner' => [
'css' => '',
],
'close' => [
'custom_color' => '',
'class' => '',
'css' => '',
],
);
if ( ! empty( $config['l_cimg'] ) ) { // background image
$html['content']['css'] .= "background-image:url('{$config['l_cimg']}');background-repeat:no-repeat;background-size:cover;";
} elseif ( ! empty( $config['l_cpat'] ) ) {
$html['content']['css'] .= "background-image:url('{$config['l_cpat']}');background-repeat:repeat;";
}
if ( ! empty( $config['l_cbs'] ) ) { // content border style
$html['content']['class'] .= ' ' . $config['l_cbs'];
$html['close']['class'] .= ' ' . $config['l_cbs'];
}
if ( ! empty( $config['l_cbw'] ) ) { // content border width
$html['content']['css'] .= "border-width:{$config['l_cbw']};";
$html['close']['css'] .= "border-width:{$config['l_cbw']};";
}
if ( ! empty( $config['l_cmw'] ) ) { // content max width
$html['content']['css'] .= "max-width:{$config['l_cmw']}";
}
// Close Custom Color settings
$html['close']['custom_color'] = empty( $config['l_ccc'] ) ? '' : ' data-tve-custom-colour="' . $config['l_ccc'] . '"';
return $html;
}
/**
* Outputs the editor / preview page for a Thrive Lightbox
*/
public function output_layout() {
if ( is_editor_page() ) {
tve_enqueue_style( 'tve_lightbox_post', tve_editor_css( 'editor_lightbox.css' ) );
}
/**
* Fix added by Paul McCarthy 16th October 2014 - added to solve THesis Child themes not loading CSS in Thrive lightboxes
* Thesis v 2.1.9 loads style sheets for their child themes with this:- add_filter('template_include', [$this, '_skin']);
* The filter isn't applied when the content builder lightbox is loaded because of our template_redirect filter
* This function checks if the theme is Thesis, if so it checks for the existance of the css.css file that all Thesis child themes should have
* If the file is found, it enqueuest the stylesheet in both editor and front end mode.
*/
if ( wp_get_theme() == 'Thesis' && defined( 'THESIS_USER_SKIN_URL' ) && file_exists( THESIS_USER_SKIN . '/css.css' ) ) {
wp_enqueue_style( 'tve_thesis_css', THESIS_USER_SKIN_URL . '/css.css' );
}
$landing_page_dir = plugin_dir_path( dirname( __DIR__ ) ) . 'landing-page';
if ( $for_landing_page = $this->meta( 'tve_lp_lightbox' ) ) {
if ( tve_is_cloud_template( $for_landing_page ) ) {
$config = tve_get_cloud_template_config( $for_landing_page, false );
$css_file = 'templates/css/' . $for_landing_page . '_lightbox.css';
/* only enqueue CSS for v < 2 */
if ( (int) $config['LP_VERSION'] !== 2 && is_file( tcb_get_cloud_base_path() . $css_file ) ) {
/* load up the lightbox style for this landing page */
tve_enqueue_style( 'thrive_landing_page_lightbox', tcb_get_cloud_base_url() . $css_file );
}
} else {
if ( is_file( $landing_page_dir . '/templates/css/' . $for_landing_page . '_lightbox.css' ) ) {
/* load up the lightbox style for this landing page */
tve_enqueue_style( 'thrive_landing_page_lightbox', TVE_LANDING_PAGE_TEMPLATE . '/css/' . $for_landing_page . '_lightbox.css' );
}
}
}
tcb_template( 'layouts/editor-lightbox', [
'lightbox' => $this,
] );
}
/**
* Generate and save a new Thrive Lightbox
*
* @param string $title lightbox title
* @param string $tcb_content
* @param array $tve_globals tve_globals array to save for the lightbox
* @param array $extra_meta_data array of key => value pairs, each will be saved in a meta field for the lightbox
*
* @return int the saved lightbox id
*/
public static function create( $title = '', $tcb_content = '', $tve_globals = [], $extra_meta_data = [] ) {
/* just to make sure that our content filter does not get applied when inserting a (possible) new lightbox */
$GLOBALS['TVE_CONTENT_SKIP_ONCE'] = true;
$lightbox_id = wp_insert_post( [
'post_content' => '',
'post_title' => $title,
'post_status' => 'publish',
'post_type' => 'tcb_lightbox',
] );
foreach ( $extra_meta_data as $meta_key => $meta_value ) {
update_post_meta( $lightbox_id, $meta_key, $meta_value );
}
update_post_meta( $lightbox_id, 'tve_updated_post', $tcb_content );
update_post_meta( $lightbox_id, 'tve_globals', $tve_globals );
unset( $GLOBALS['TVE_CONTENT_SKIP_ONCE'] );
return $lightbox_id;
}
/**
* Updates a Thrive Lightbox
*
* @param int $lightbox_id local lightbox post id
* @param string $title lightbox title
* @param string $tcb_content
* @param array $tve_globals tve_globals array to save for the lightbox
* @param array $extra_meta_data array of key => value pairs, each will be saved in a meta field for the lightbox
*
* @return int the saved lightbox id
*/
public static function update( $lightbox_id, $title = '', $tcb_content = '', $tve_globals = [], $extra_meta_data = [] ) {
/* just to make sure that our content filter does not get applied when inserting a (possible) new lightbox */
$GLOBALS['TVE_CONTENT_SKIP_ONCE'] = true;
$post_data = [
'post_content' => '',
'post_title' => $title,
'post_status' => 'publish',
'post_type' => 'tcb_lightbox',
'ID' => $lightbox_id,
];
wp_update_post( $post_data );
foreach ( $extra_meta_data as $meta_key => $meta_value ) {
update_post_meta( $lightbox_id, $meta_key, $meta_value );
}
update_post_meta( $lightbox_id, 'tve_updated_post', $tcb_content );
update_post_meta( $lightbox_id, 'tve_globals', $tve_globals );
unset( $GLOBALS['TVE_CONTENT_SKIP_ONCE'] );
return $lightbox_id;
}
}
/**
* Instantiates a new TCB_Lightbox helper class
*
* @param null|mixed $post_id
*
* @return TCB_Lightbox
*/
function tcb_lightbox( $post_id = null ) {
return new TCB_Lightbox( $post_id );
}
/**
* Registers the tcb_lightbox post type - only available when TCB is installed as a separate plugin
*/
function tcb_lightbox_init() {
register_post_type( 'tcb_lightbox', array(
'labels' => array(
'name' => __( 'Thrive Lightboxes', 'thrive-cb' ),
'singular_name' => __( 'Thrive Lightbox', 'thrive-cb' ),
'add_new_item' => __( 'Add New Thrive Lightbox', 'thrive-cb' ),
'edit_item' => __( 'Edit Thrive Lightbox', 'thrive-cb' ),
),
'exclude_from_search' => true,
'public' => true,
'has_archive' => false,
'rewrite' => false,
'show_in_nav_menus' => false,
'show_in_menu' => tve_in_architect() && TCB_Product::has_access(),
) );
}
/**
* Hide notices for the tcb_lightbox post type dashboard page
*
* @return void
*/
function tcb_lightbox_admin_footer() {
$screen = tve_get_current_screen_key();
if ( $screen && $screen === 'edit-tcb_lightbox' ) {
echo '<style type="text/css">
#message, .error, .notice, .update-nag, .sbi_notice, .update, .updated {
display: none !important;
}
:not(#_s):not(#_s) .tve-metrics-consent-notice {
display: flex !important;
margin: 0 0 25px 0;
}
</style>';
}
}
/**
* Registers the tcb_lightbox post type
*/
add_action( 'init', 'tcb_lightbox_init' );
add_action( 'admin_footer', 'tcb_lightbox_admin_footer' );