Server IP : 162.213.251.212 / Your IP : 3.21.46.253 [ Web Server : LiteSpeed System : Linux business55.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : allssztx ( 535) PHP Version : 8.1.31 Disable Function : NONE Domains : 1 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/allssztx/./www/PIQTV/wp-content/themes/woodmart/inc/modules/layouts/admin/ |
Upload File : |
<?php /** * Manager class file. * * @package Woodmart */ namespace XTS\Modules\Layouts; use WP_Post; use XTS\Singleton; /** * Manager class. */ class Manager extends Singleton { /** * Conditions cache. * * @var Conditions_Cache */ private $cache; /** * Post type. * * @var string */ private $post_type = 'woodmart_layout'; /** * Type meta key. * * @var string */ private $type_meta_key = 'wd_layout_type'; /** * Conditions meta key. * * @var string */ private $conditions_meta_key = 'wd_layout_conditions'; /** * Constructor. */ public function init() { $this->cache = new Conditions_Cache(); $this->add_actions(); } /** * Add actions. */ public function add_actions() { add_action( 'wp_ajax_wd_layout_create', array( $this, 'create_layout' ) ); add_action( 'wp_ajax_wd_layout_edit', array( $this, 'edit_layout' ) ); add_action( 'wp_ajax_wd_layout_conditions_query', array( $this, 'conditions_query' ) ); add_action( 'wp_ajax_wd_layout_change_status', array( $this, 'change_status_action' ) ); add_action( 'wp_trash_post', array( $this, 'remove_post_from_cache' ) ); add_action( 'untrashed_post', array( $this, 'on_untrash_post' ) ); add_action( 'save_post_' . $this->post_type, array( $this, 'save_post' ) ); add_action( 'woodmart_after_import', array( $this, 'save_post' ) ); add_filter( 'post_row_actions', array( $this, 'duplicate_action' ), 10, 2 ); } /** * Save template post. */ public function save_post() { $this->cache->regenerate(); } /** * On post untrashed. * * @param int $post_id Post id. */ public function on_untrash_post( $post_id ) { $conditions = get_post_meta( $post_id, $this->conditions_meta_key, true ); $type = get_post_meta( $post_id, $this->type_meta_key, true ); $this->cache->add( $type, $conditions, $post_id )->save(); } /** * Remove post from cache. * * @param int $post_id Post id. */ public function remove_post_from_cache( $post_id ) { $this->cache->remove( $post_id )->save(); } /** * Change status action. */ public function change_status_action() { check_ajax_referer( 'wd-new-template-nonce', 'security' ); $post_id = woodmart_clean( $_POST['id'] ); // phpcs:ignore $status = woodmart_clean( $_POST['status'] ); // phpcs:ignore wp_update_post( array( 'ID' => $post_id, 'post_status' => $status, ) ); wp_send_json( array( 'new_html' => Admin::get_instance()->get_status_button_template( $post_id ), ) ); } /** * Edit layout. */ public function edit_layout() { check_ajax_referer( 'wd-new-template-nonce', 'security' ); $post_id = woodmart_clean( $_POST['id'] ); // phpcs:ignore $data = isset( $_POST['data'] ) ? woodmart_clean( $_POST['data'] ) : array(); // phpcs:ignore update_post_meta( $post_id, $this->conditions_meta_key, $data ); $this->cache->regenerate(); wp_send_json( array( 'new_html' => Admin::get_instance()->get_edit_conditions_template( $post_id ), ) ); } /** * Create new layout. */ public function create_layout() { check_ajax_referer( 'wd-new-template-nonce', 'security' ); $type = woodmart_clean( $_POST['type'] ); // phpcs:ignore $title = woodmart_clean( $_POST['name'] ); // phpcs:ignore $data = isset( $_POST['data'] ) ? woodmart_clean( $_POST['data'] ) : array(); // phpcs:ignore $predefined_name = isset( $_POST['predefined_name'] ) ? woodmart_clean( $_POST['predefined_name'] ) : ''; // phpcs:ignore $post_args = array( 'post_title' => $title, 'post_type' => $this->post_type, 'meta_input' => array( $this->type_meta_key => $type, $this->conditions_meta_key => $data, ), ); if ( 'single_product' === $type ) { $published_products = wc_get_products( array( 'status' => 'publish', 'limit' => 1, ) ); if ( empty( $published_products ) ) { $create_product_link = add_query_arg( array( 'post_type' => 'product', ), admin_url( 'post-new.php' ) ); wp_send_json_error( array( 'message' => sprintf( '%s <a href="' . $create_product_link . '">%s</a>', esc_html__( 'In order to create a Single product layout, you must first publish at least one product!', 'woodmart' ), esc_html__( 'Add new product', 'woodmart' ) ), ) ); } } $post_id = wp_insert_post( $post_args ); if ( $predefined_name ) { new Import( $post_id, $type, $predefined_name ); } $url = add_query_arg( array( 'post' => $post_id, 'action' => 'wpb' === woodmart_get_current_page_builder() ? 'edit' : 'elementor', 'classic-editor' => '', ), admin_url( 'post.php' ) ); $this->cache->regenerate(); wp_send_json( array( 'redirect_url' => $url, ) ); } /** * Conditions query. */ public function conditions_query() { check_ajax_referer( 'wd-new-template-nonce', 'security' ); $query_type = woodmart_clean( $_POST['query_type'] ); // phpcs:ignore $search = isset( $_POST['search'] ) ? woodmart_clean( $_POST['search'] ) : false; // phpcs:ignore $items = array(); switch ( $query_type ) { case 'product_cat': case 'product_cat_children': case 'product_tag': case 'product_term': case 'product_attr_term': case 'filtered_product_by_term': $taxonomy = array(); if ( 'product_cat' === $query_type || 'product_cat_children' === $query_type || 'product_term' === $query_type ) { $taxonomy[] = 'product_cat'; } if ( 'product_tag' === $query_type || 'product_term' === $query_type ) { $taxonomy[] = 'product_tag'; } if ( 'product_attr_term' === $query_type || 'product_term' === $query_type || 'filtered_product_by_term' === $query_type ) { $attribute_taxonomies = wc_get_attribute_taxonomies(); if ( ! empty( $attribute_taxonomies ) ) { foreach ( $attribute_taxonomies as $tax ) { if ( taxonomy_exists( wc_attribute_taxonomy_name( $tax->attribute_name ) ) ) { $taxonomy[] = wc_attribute_taxonomy_name( $tax->attribute_name ); } } } } $terms = get_terms( array( 'hide_empty' => false, 'fields' => 'all', 'taxonomy' => $taxonomy, 'search' => $search, ) ); if ( count( $terms ) > 0 ) { foreach ( $terms as $term ) { $items[] = array( 'id' => $term->term_id, 'text' => $term->name . ' (ID: ' . $term->term_id . ') (Tax: ' . $term->taxonomy . ')', ); } } break; case 'product_attr': case 'filtered_product_term': foreach ( wc_get_attribute_taxonomies() as $attribute ) { $items[] = array( 'id' => 'pa_' . $attribute->attribute_name, 'text' => $attribute->attribute_label . ' (Tax: pa_' . $attribute->attribute_name . ')', ); } break; case 'filtered_product_stock_status': $items = array( array( 'id' => 'instock', 'text' => esc_html__( 'In Stock', 'woodmart' ), ), array( 'id' => 'onsale', 'text' => esc_html__( 'On Sale', 'woodmart' ), ), array( 'id' => 'onbackorder', 'text' => esc_html__( 'On backorder', 'woodmart' ), ), ); break; case 'product_type': foreach ( wc_get_product_types() as $type => $title ) { $items[] = array( 'id' => $type, 'text' => $title, ); } break; case 'product': $posts = get_posts( array( 's' => $search, 'post_type' => 'product', 'posts_per_page' => 100, ) ); if ( count( $posts ) > 0 ) { foreach ( $posts as $post ) { $items[] = array( 'id' => $post->ID, 'text' => $post->post_title . ' (ID: ' . $post->ID . ')', ); } } break; } wp_send_json( array( 'results' => $items, ) ); } /** * Add duplicate action. * * @param string[] $actions An array of row action links. Defaults are * 'Edit', 'Quick Edit', 'Restore', 'Trash', * 'Delete Permanently', 'Preview', and 'View'. * @param WP_Post $post The post object. * * @return string[] */ public function duplicate_action( $actions, $post ) { if ( 'woodmart_layout' !== $post->post_type ) { return $actions; } if ( current_user_can( 'edit_posts' ) ) { $url = wp_nonce_url( add_query_arg( array( 'action' => 'woodmart_duplicate_post_as_draft', 'post' => $post->ID, ), 'admin.php' ), 'woodmart_duplicate_post_as_draft', 'duplicate_nonce' ); ob_start(); ?> <a href="<?php echo esc_url( $url ); ?>"> <?php esc_html_e( 'Duplicate', 'woodmart' ); ?> </a> <?php $actions['duplicate'] = ob_get_clean(); } return $actions; } } Manager::get_instance();