Files
roi-theme/wp-content/plugins/thrive-visual-editor/thrive-dashboard/inc/smart-site/classes/class-tvd-content-sets.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

403 lines
12 KiB
PHP
Executable File

<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
use function TVD\Cache\content_set_cache;
use function TVD\Cache\meta_cache;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden!
}
/**
* Class TVD_Content_Sets
*
* @project: thrive-dashboard
*/
class TVD_Content_Sets {
/**
* Nonce that should be checked for meta boxes request
*/
const META_BOX_NONCE = 'thrive-dashboard-sets-meta-box-nonce';
/**
* Singleton
*/
use TD_Singleton;
/**
* TVD_Content_Sets constructor.
*/
private function __construct() {
//Maybe do something like on smart site add check before enqueue & output templates
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
add_action( 'admin_print_footer_scripts', array( $this, 'backbone_templates' ) );
add_action( 'rest_api_init', array( $this, 'admin_create_rest_routes' ) );
/* cache-related actions */
add_action( 'save_post', array( $this, 'on_save_post_clear_cache' ), 10, 2 );
add_action( 'saved_term', array( $this, 'on_save_term_clear_cache' ) );
add_action( 'delete_post', array( $this, 'on_delete_post_clear_cache' ), 10, 2 );
if ( $this->show_ui() ) {
add_action( 'wp_after_insert_post', array( $this, 'after_save_post' ), 10, 2 );
add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
add_action( 'admin_print_scripts-post-new.php', array( $this, 'edit_post_admin_script' ) );
add_action( 'admin_print_scripts-post.php', array( $this, 'edit_post_admin_script' ) );
}
require_once __DIR__ . '/content-set/class-utils.php';
require_once __DIR__ . '/content-set/class-set.php';
require_once __DIR__ . '/content-set/class-rule.php';
require_once __DIR__ . '/content-set/class-post-rule.php';
require_once __DIR__ . '/content-set/class-term-rule.php';
require_once __DIR__ . '/content-set/class-blog-rule.php';
require_once __DIR__ . '/content-set/class-search-result-rule.php';
require_once __DIR__ . '/content-set/class-archive-rule.php';
\TVD\Content_Sets\Set::init();
}
/**
* Adds the admin meta boxes
*/
public function add_meta_boxes() {
add_meta_box(
'tvd_content_sets',
esc_html__( 'Thrive Content Sets', 'thrive-dash' ),
array( $this, 'content_sets_meta_box' ),
null,
'advanced',
'high'
);
}
/**
* Callback for adding meta boxes for content sets
*
* @return mixed
*/
public function content_sets_meta_box() {
return require dirname( __FILE__ ) . '/meta-boxes/content-sets.php';
}
/**
* Edit post - scripts + styles
*/
public function edit_post_admin_script() {
$matches = \TVD\Content_Sets\Set::get_items_that_static_match( get_post() );
tve_dash_enqueue_style( 'thrive-admin-dashboard-edit-post', TVD_Smart_Const::url( 'assets/admin/css/styles-edit-post.css' ) );
tve_dash_enqueue_script( 'thrive-admin-dashboard-edit-post', TVD_Smart_Const::url( 'assets/admin/js/dist/edit-post.min.js' ), array( 'jquery' ), false, true );
wp_localize_script( 'thrive-admin-dashboard-edit-post', 'TD', array(
'sets' => \TVD\Content_Sets\Set::get_items_for_dropdown(),
'matches' => \TVD\Content_Sets\Set::get_items_for_dropdown( $matches ),
) );
}
/**
* Enqueue Content Sets scripts & styles
*/
public function enqueue_scripts() {
if ( $this->allow_enqueue_scripts( tve_get_current_screen_key() ) ) {
tve_dash_enqueue_style( 'tvd-content-sets-admin', TVD_Smart_Const::url( 'assets/admin/css/styles-content-sets.css' ) );
tve_dash_enqueue_script( 'tvd-content-sets-admin', TVD_Smart_Const::url( 'assets/admin/js/dist/content-sets-admin.min.js' ), array(
'jquery',
'backbone',
'tve-dash-main-js',
), false, true );
$public_post_types = \TVD\Content_Sets\Post_Rule::get_content_types();
wp_localize_script( 'tvd-content-sets-admin', 'TD_SETS', array(
'routes' => array(
'base' => get_rest_url() . 'tss/v1/content-sets',
),
'post_types' => array_keys( $public_post_types ),
'nonce' => wp_create_nonce( 'wp_rest' ),
'fields' => array(
'title' => \TVD\Content_Sets\Rule::FIELD_TITLE,
'tag' => \TVD\Content_Sets\Rule::FIELD_TAG,
'category' => \TVD\Content_Sets\Rule::FIELD_CATEGORY,
'published_date' => \TVD\Content_Sets\Rule::FIELD_PUBLISHED_DATE,
'topic' => \TVD\Content_Sets\Rule::FIELD_TOPIC,
'difficulty' => \TVD\Content_Sets\Rule::FIELD_DIFFICULTY,
'label' => \TVD\Content_Sets\Rule::FIELD_LABEL,
'author' => \TVD\Content_Sets\Rule::FIELD_AUTHOR,
),
'operators' => array(
'is' => \TVD\Content_Sets\Rule::OPERATOR_IS,
'not_is' => \TVD\Content_Sets\Rule::OPERATOR_NOT_IS,
'grater_equal' => \TVD\Content_Sets\Rule::OPERATOR_GRATER_EQUAL,
'lower_equal' => \TVD\Content_Sets\Rule::OPERATOR_LOWER_EQUAL,
'within_last' => \TVD\Content_Sets\Rule::OPERATOR_WITHIN_LAST,
),
'options' => array(
'general' => array(
'content' => $this->localize_content_values( $public_post_types ),
'field' => array(
array(
'value' => '',
'disabled' => true,
'label' => __( 'Select your field or taxonomy', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_ALL,
'label' => __( 'All', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_TITLE,
'label' => __( 'Title', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_TAG,
'label' => __( 'Tag', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_CATEGORY,
'label' => __( 'Category', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_PUBLISHED_DATE,
'label' => __( 'Published', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_AUTHOR,
'label' => __( 'Author', 'thrive-dash' ),
),
),
'operator' => array(
array(
'value' => '',
'disabled' => true,
'label' => __( 'Choose your condition', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::OPERATOR_IS,
'label' => __( 'Is', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::OPERATOR_NOT_IS,
'label' => __( 'Is not', 'thrive-dash' ),
),
),
),
/**
* Allow Protected files to hook here and modify the exceptions list
*
* @param array $exceptions
*/
'exceptions' => apply_filters( 'tvd_content_sets_get_content_types_exceptions', array(
'tva_courses' => array(
array(
'value' => '',
'disabled' => true,
'label' => __( 'Select your field or taxonomy', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_ALL,
'label' => __( 'All', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_TITLE,
'label' => __( 'Title', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_TOPIC,
'label' => __( 'Topic', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_DIFFICULTY,
'label' => __( 'Difficulty', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::FIELD_LABEL,
'label' => __( 'Label', 'thrive-dash' ),
),
),
'published_date' => array(
array(
'value' => '',
'disabled' => true,
'label' => __( 'Choose your condition', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::OPERATOR_LOWER_EQUAL,
'label' => __( 'On or before', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::OPERATOR_GRATER_EQUAL,
'label' => __( 'On or after', 'thrive-dash' ),
),
array(
'value' => \TVD\Content_Sets\Rule::OPERATOR_WITHIN_LAST,
'label' => __( 'Within the last', 'thrive-dash' ),
),
),
) ),
),
'sets' => \TVD\Content_Sets\Set::get_items(),
) );
}
}
/**
* Add backbone templates
*/
public function backbone_templates() {
if ( $this->allow_enqueue_scripts( tve_get_current_screen_key() ) ) {
$templates = tve_dash_get_backbone_templates( TVD_Smart_Const::path( 'views/admin/content-sets-templates' ), 'content-sets-templates' );
tve_dash_output_backbone_templates( $templates );
}
}
/**
* Register the rest route
*/
public function admin_create_rest_routes() {
require_once __DIR__ . '/endpoints/class-tvd-content-sets-controller.php';
$controller = new TVD_Content_Sets_Controller();
$controller->register_routes();
}
/**
* @param array $public_post_types
*
* @return array[]
*/
private function localize_content_values( $public_post_types = array() ) {
$values = array(
array(
'value' => '',
'disabled' => true,
'label' => __( 'Choose content type', 'thrive-dash' ),
),
);
foreach ( $public_post_types as $key => $name ) {
$values[] = array(
'value' => $key,
'label' => $name,
);
}
$values[] = array(
'value' => 'tva_courses',
'label' => __( 'Apprentice Course', 'thrive-dash' ),
);
$values[] = array(
'value' => \TVD\Content_Sets\Rule::HIDDEN_POST_TYPE_BLOG,
'label' => __( 'Blog Page', 'thrive-dash' ),
);
$values[] = array(
'value' => \TVD\Content_Sets\Rule::HIDDEN_POST_TYPE_SEARCH_RESULTS,
'label' => __( 'Search Results Page', 'thrive-dash' ),
);
$values[] = array(
'value' => 'archive',
'label' => __( 'Archive', 'thrive-dash' ),
);
return $values;
}
/**
* Checks if the system allows to include the content sets scripts
* Calls a filter that is implemented in other plugins (ex: Thrive Apprentice)
*
* @param string $screen_id
*
* @return boolean
*/
private function allow_enqueue_scripts( $screen_id ) {
return apply_filters( 'tvd_content_sets_allow_enqueue_scripts', $screen_id === 'admin_page_tve_dash_smart_site', $screen_id );
}
/**
* When a post is saved, clear the content sets cache associated with it
*
* @param int $post_id
* @param \WP_Post $post
*/
public function on_save_post_clear_cache( $post_id, $post ) {
if ( $post->post_type === \TVD\Content_Sets\Set::POST_TYPE ) {
// need to clear everything
content_set_cache( 'term' )->clear(); // delete any stored term meta
content_set_cache( 'post' )->clear(); // delete any stored post meta
} else {
content_set_cache( $post )->clear( $post_id );
}
}
/**
* When a term is saved, clear the content sets cache associated with it
*
* @param int $term_id
*/
public function on_save_term_clear_cache( $term_id ) {
content_set_cache( 'term' )->clear( $term_id ); // delete any stored term meta
}
/**
* When a content set is deleted, clear content set cache
*
* @param int $post_id
* @param \WP_Post $post
*/
public function on_delete_post_clear_cache( $post_id, $post ) {
if ( $post->post_type === \TVD\Content_Sets\Set::POST_TYPE ) {
content_set_cache( 'term' )->clear();
content_set_cache( 'post' )->clear();
}
}
/**
* After the post is saved, we update the content sets that have been modified from /wp-admin/post.php UI
*
* @param int $post_id
* @param WP_Post $post
*/
public function after_save_post( $post_id, $post ) {
// Security check: verify meta box nonce
if ( ! isset( $_POST['tvd_content_sets_meta_box'] ) || ! wp_verify_nonce( $_POST['tvd_content_sets_meta_box'], self::META_BOX_NONCE ) ) {
return;
}
$content_sets_ids = isset( $_POST['tvd_matched_content_sets_id'] ) ? $_POST['tvd_matched_content_sets_id'] : '';
\TVD\Content_Sets\Set::toggle_object_to_set_static_rules( $post, array_filter( explode( ',', $content_sets_ids ) ) );
}
/**
* Returns true if the system can show the content sets UI
*
* @return bool
*/
public function show_ui() {
return defined( 'TVD_CONTENT_SETS_SHOW_UI' ) && TVD_CONTENT_SETS_SHOW_UI;
}
}
/**
* @return TVD_Content_Sets
*/
function tvd_content_sets() {
return TVD_Content_Sets::get_instance();
}
add_action( 'init', 'tvd_content_sets', 8 );