Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
jet-engine
/
includes
/
base
:
base-wp-instance.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php /** * Abstract class for WordPress global instances like Post Types, Taxonomies etc. */ // If this file is called directly, abort. if ( ! defined( 'WPINC' ) ) { die; } if ( ! trait_exists( 'Jet_Engine_Notices_Trait' ) ) { require_once jet_engine()->plugin_path( 'includes/traits/notices.php' ); } if ( ! class_exists( 'Jet_Engine_Base_WP_Intance' ) ) { /** * Define Jet_Engine_Base_WP_Intance class */ abstract class Jet_Engine_Base_WP_Intance { use Jet_Engine_Notices_Trait; /** * Instances init priority * * @var integer */ public $init_priority = 10; /** * Base slug for instance-related pages * @var string */ public $page = null; /** * Instance pages * * @var array */ public $_pages = array(); /** * Instance action request key * * @var string */ public $action_key = null; /** * Data manger instance */ public $data = null; /** * Set object type * @var string */ public $object_type = null; /** * Items list * * @var null */ public $items = null; /** * OPtions page builder instance * * @var [type] */ public $builder; /** * Constructor for the class */ function __construct() { add_action( 'init', array( $this, 'register_instances' ), $this->init_priority ); $this->init_data(); add_action( 'jet-engine/rest-api/init-endpoints', array( $this, 'init_rest' ) ); if ( is_admin() ) { add_action( 'admin_menu', array( $this, 'add_menu_page' ), 20 ); } if ( ! $this->is_cpt_page() ) { return; } add_action( 'admin_init', array( $this, 'register_pages' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ), 0 ); add_action( 'admin_init', array( $this, 'handle_actions' ) ); } /** * Return instance items * * @return [type] [description] */ public function get_items() { if ( ! $this->items ) { $this->items = $this->data->get_item_for_register(); } return $this->items; } /** * Run actions handlers * * @return void */ public function handle_actions() { if ( ! isset( $_GET['action'] ) ) { return; } if ( ! current_user_can( 'manage_options' ) ) { return; } $core_actions = array( 'create_item' => array( $this->data, 'create_item' ), 'edit_item' => array( $this->data, 'edit_item' ), 'delete_item' => array( $this->data, 'delete_item' ), ); $action = $_GET['action']; if ( ! isset( $core_actions[ $action ] ) ) { return; } call_user_func( $core_actions[ $action ] ); } /** * Register CPT menu page */ public function add_menu_page() { add_submenu_page( jet_engine()->admin_page, $this->get_page_title(), $this->get_page_title(), 'manage_options', $this->page_slug(), array( $this, 'render_page' ) ); } /** * Check if CPT-related page currently displayed * * @return boolean */ public function is_cpt_page() { return ( isset( $_GET['page'] ) && $this->page_slug() === $_GET['page'] ); } /** * Enqueue admin pages assets * * @return void */ public function enqueue_assets() { wp_enqueue_style( 'jet-engine-admin-pages', jet_engine()->plugin_url( 'assets/css/admin/pages.css' ), array(), jet_engine()->get_version() ); jet_engine()->accessibility->contrast_ui( 'jet-engine-admin-pages' ); } /** * Register CPT related pages * * @return void */ public function register_pages() { $this->data->ensure_db_table(); if ( ! class_exists( 'Jet_Engine_CPT_Page_Base' ) ) { require_once jet_engine()->plugin_path( 'includes/base/base-admin-page.php' ); } $default = $this->get_instance_pages(); foreach ( $default as $class => $file ) { require $file; $this->register_page( $class ); } /** * You could register custom pages on this hook */ do_action( 'jet-engine/pages/' . $this->instance_slug() . '/register', $this ); } /** * Register new dashboard page * * @return [type] [description] */ public function register_page( $class ) { $page = new $class( $this ); $this->_pages[ $page->get_slug() ] = $page; } /** * Return page slug * * @return string */ public function page_slug() { return $this->page; } /** * Render CPT page * * @return void */ public function render_page() { $page = $this->get_current_page(); if ( ! $page ) { return; } ?> <div class="wrap"> <div class="cpt-header"> <h1 class="wp-heading-inline"><?php echo $page->get_name(); ?></h1> <?php do_action( 'jet-engine/' . $this->instance_slug() . '/page/after-title', $page ); ?> <hr class="wp-header-end"> </div> <?php $this->print_notices(); ?> <div class="cpt-content"> <?php $page->render_page(); ?> </div> </div> <?php } /** * Get requested page link * * @param [type] $page [description] * @return [type] [description] */ public function get_page_link( $page = null ) { if ( ! $page ) { return add_query_arg( array( 'page' => $this->page_slug(), ), esc_url( admin_url( 'admin.php' ) ) ); } else { return add_query_arg( array( 'page' => $this->page_slug(), $this->action_key => $page, ), esc_url( admin_url( 'admin.php' ) ) ); } } /** * Returns url to current instance edit item page (if it exists in this instance * ) * @param string|number $id Item ID * @return string */ public function get_edit_item_link( $id = null ) { return add_query_arg( array( 'id' => $id, ), $this->get_page_link( 'edit' ) ); } /** * Returns current page object * * @return object */ public function get_current_page() { $action = isset( $_GET[ $this->action_key ] ) ? $_GET[ $this->action_key ] : 'list'; $page = isset( $this->_pages[ $action ] ) ? $this->_pages[ $action ] : false; return $page; } /** * Initiizlize instance specific API endpoints * * @param Jet_Engine_REST_API $api_manager API manager instance. * @return void */ public function init_rest( $api_manager ) { /** * Rewrti this funciton in extended class to init Rest API endpoints for this instance */ } /** * Return admin pages for current instance * * @return array */ public function get_instance_pages() { return array(); } /** * Init data instance * * @return [type] [description] */ abstract public function init_data(); /** * Register current object instances * * @return void */ abstract public function register_instances(); /** * Returns current menu page title (for JetEngine submenu) * @return [type] [description] */ abstract public function get_page_title(); /** * Returns current instance slug * * @return [type] [description] */ abstract public function instance_slug(); } }