Files
roi-theme/wp-content/plugins/thrive-visual-editor/inc/classes/notifications/class-main.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

238 lines
6.0 KiB
PHP
Executable File

<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-visual-editor
*/
namespace TCB\Notifications;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden!
}
class Main {
const EDIT_FLAG = 'tve-notifications',
OPTION_NAME = 'tve_notifications_post_id';
public static $elements = [];
public static function init() {
static::includes();
static::register_elements();
Hooks::add_actions();
Hooks::add_filters();
Post_Type::init();
}
public static function includes() {
require_once __DIR__ . '/class-post-type.php';
require_once __DIR__ . '/class-hooks.php';
}
/**
* Load elements needed for the notifications editor
*/
public static function register_elements() {
$path = __DIR__ . '/elements';
$items = array_diff( scandir( $path ), [ '.', '..' ] );
static::$elements = [];
foreach ( $items as $item ) {
$item_path = $path . '/' . $item;
/* if the item is a file, include it */
if ( is_file( $item_path ) && substr( $item_path, - 3 ) === 'php' ) {
$element = include $item_path;
if ( ! empty( $element ) ) {
static::$elements[ $element->tag() ] = $element;
}
}
}
}
public static function title() {
return __( 'Notifications', 'thrive-cb' );
}
/**
* Check if current page is the edit page for the notifications
*
* @return bool
*/
public static function is_edit_screen() {
$is_edit_screen = isset( $_GET[ Main::EDIT_FLAG ] ) || Post_Type::is_notification();
return apply_filters( 'tcb_is_notifications_edit_screen', $is_edit_screen );
}
/**
* Check if current page is the preview page for the notifications
*
* @return bool
*/
public static function is_preview_screen() {
return isset( $_GET['notification-state'] );
}
public static function get_localized_data() {
return [
'notifications_edit_url' => Post_Type::instance()->get_edit_url(),
'notifications_template' => static::get_notification_template_id(),
'notifications_custom_content' => static::get_custom_content(),
];
}
public static function get_notification_post_id() {
return get_option( static::OPTION_NAME, 0 );
}
/**
* Get notification content
*
* @param $should_hide - should be hidden/displayed
* @param $state - what state should be displayed
* @param $is_preview - check if this is the dashboard preview
*
* @return string
*/
public static function get_notification_content( $should_hide, $state, $is_preview, $display_custom ) {
if ( ! $display_custom && static::get_notification_template_id() === 0 ) {
$post_content = static::get_default_content();
} else {
$post_content = static::get_custom_content();
if ( empty( $post_content ) ) {
if ( static::is_preview_screen() || static::is_edit_screen() ) {
$post_content = static::get_default_content( 'custom' );
} else {
$post_content = static::get_default_content();
}
}
/* backwards compatibility for animated class - remove this in a few releases */
$post_content = str_replace( 'notifications-content-wrapper animated', 'notifications-content-wrapper', $post_content );
/* Hide the notification element */
if ( $should_hide && ( ! static::is_edit_screen() || static::is_preview_screen() ) ) {
$post_content = str_replace( 'notifications-content-wrapper', 'notifications-content-wrapper tcb-permanently-hidden', $post_content );
}
/* Change the state to the desired one */
if ( $state ) {
$post_content = preg_replace( '/data-state="[a-z]*"/', 'data-state="' . $state . '"', $post_content );
}
/* For the dashboard preview, remove the position attribute */
if ( $is_preview ) {
$post_content = preg_replace( '/data-position="[a-z]*-[a-z]*"/', '', $post_content );
}
}
tve_parse_events( $post_content );
$post_content = do_shortcode( $post_content );
$css = static::get_notification_meta_style( true, $is_preview );
return $css . $post_content;
}
/**
* Return default notification content
*
* @param string $type
*
* @return false|string
*/
public static function get_default_content( $type = '' ) {
ob_start();
if ( ! empty( $type ) ) {
$type = '-' . $type;
}
include TVE_TCB_ROOT_PATH . 'inc/views/notifications/notification-default' . $type . '-content.php';
return ob_get_clean();
}
public static function get_custom_content() {
$post_id = static::get_notification_post_id();
return get_post_meta( $post_id, 'tve_updated_post', true );
}
public static function is_default_design() {
$post_id = static::get_notification_post_id();
return get_post_meta( $post_id, 'default', true );
}
public static function get_notification_template_id() {
$posts = get_posts( [
'post_type' => Post_Type::NAME,
'meta_query' => [
[
'key' => 'default',
'value' => 1,
],
],
'fields' => 'ids',
] );
if ( ! empty( $posts ) ) {
return $posts[0];
}
return 0;
}
/**
* Get the styling of the notification
*/
public static function get_notification_meta_style( $return = true, $is_preview = false ) {
$post_id = Post_Type::instance()->get_id();
$css = '';
if ( get_the_ID() !== $post_id ) {
$lightspeed_css = \TCB\Lightspeed\Css::get_instance( $post_id );
if ( $is_preview || $lightspeed_css->should_load_optimized_styles() ) {
$css .= $lightspeed_css->get_optimized_styles();
}
$css .= sprintf( '<style type="text/css" id="tve_notification_styles">%s</style>', get_post_meta( $post_id, 'tve_custom_css', true ) );
}
if ( $return ) {
return $css;
}
echo $css;
}
/**
* Get the default styling of the notification
*
* @return false|string
*/
public static function get_notification_default_style() {
ob_start();
include dirname( __DIR__ ) . '/../../editor/css/sass/elements/_notification.scss';
return ob_get_clean();
}
public static function get_default_notification_element() {
$default_html_content = static::get_default_content( 'custom' );
$default_css_content = static::get_notification_default_style();
return [ 'html' => $default_html_content, 'css' => $default_css_content ];
}
}