| | |
| | | namespace JVBase\managers\Dashboard; |
| | | |
| | | use JVBase\managers\Cache; |
| | | use JVBase\registrar\Registrar; |
| | | use WP_Query; |
| | | |
| | | if (!defined('ABSPATH')) { |
| | |
| | | class DashboardPage { |
| | | protected string $title; |
| | | protected string $slug; |
| | | protected string $ogSlug; |
| | | protected string $icon; |
| | | protected string $URL; |
| | | protected int $parent = 0; |
| | | protected int $ID; |
| | | protected ?string $permission = null; |
| | | protected ?string $section = null; |
| | |
| | | |
| | | public function __construct(string $title, string $slug = '', string $icon ='', int $parent = 0) { |
| | | $this->cache = Cache::for('dashboard'); |
| | | $this->title = $title; |
| | | if (empty($slug)) { |
| | | $this->setSlug($title); |
| | | }else { |
| | | $this->setSlug($slug); |
| | | if (JVB_TESTING) { |
| | | $this->cache->flush(); |
| | | } |
| | | $this->title = $title; |
| | | $this->setSlug(empty($slug) ? $title : $slug); |
| | | $this->icon = $icon; |
| | | $this->parent = $parent; |
| | | $this->setID($parent); |
| | | $this->setURL(); |
| | | } |
| | | |
| | | public function setID(int $parentID):void |
| | | { |
| | | if ($this->slug === 'dash') { |
| | | //We do not need to create the page for the main dash |
| | | $this->ID = 0; |
| | | return; |
| | | } |
| | | $this->ID = $this->cache->remember( |
| | | $this->slug.'_ID', |
| | | function() use ($parentID) { |
| | | $existing = new WP_Query([ |
| | | 'post_type' => BASE.'dash', |
| | | 'post_type' => DashboardManager::$based, |
| | | 'name' => $this->slug, |
| | | 'fields' => 'ids', |
| | | 'posts_per_page'=> 1, |
| | |
| | | $args = [ |
| | | 'post_title' => $this->title, |
| | | 'post_name' => $this->slug, |
| | | 'post_type' => BASE.'dash', |
| | | 'post_type' => DashboardManager::$based, |
| | | 'post_status' => 'publish' |
| | | ]; |
| | | if ($parentID > 0) { |
| | |
| | | return $this->ID; |
| | | } |
| | | |
| | | public function getParent():int |
| | | { |
| | | return $this->parent; |
| | | } |
| | | |
| | | public function setURL():void |
| | | { |
| | | $this->URL = $this->cache->remember( |
| | | $this->slug.'_url', |
| | | function () { |
| | | return get_permalink($this->ID); |
| | | } |
| | | ); |
| | | |
| | | if ($this->slug === 'dash') { |
| | | $this->URL = get_post_type_archive_link(DashboardManager::$based); |
| | | return; |
| | | } |
| | | $this->URL = get_the_permalink($this->ID); |
| | | } |
| | | |
| | | public function getURL():string |
| | |
| | | |
| | | public function setSlug(string $slug):void |
| | | { |
| | | $this->ogSlug = $slug; |
| | | $this->slug = self::sanitizeString($slug); |
| | | } |
| | | public function getSlug():string |
| | |
| | | } |
| | | public function render():string |
| | | { |
| | | return $this->cache->remember( |
| | | $this->ID, |
| | | function () { |
| | | return apply_filters(BASE.'render_'.$this->slug, '<h2>'.$this->title.' is not configured yet.</h2><p>Add a filter to '.BASE.'render_'.$this->slug.'</p>'); |
| | | } |
| | | ); |
| | | $check = str_replace('-','_',$this->slug); |
| | | ob_start(); |
| | | do_action(BASE.'dashboard_page_'.$check, $this->slug, $this->ogSlug); |
| | | $out = ob_get_clean(); |
| | | |
| | | if (empty($out)) { |
| | | $out = sprintf( |
| | | '<h1>%s</h1><p>It doesn\'t look like this page is configured yet.</p>', |
| | | $this->title, |
| | | ); |
| | | } |
| | | return $out; |
| | | } |
| | | /********************************************************* |
| | | * UTILITY |
| | |
| | | { |
| | | return str_replace('_', '-', strtolower(sanitize_title($string))); |
| | | } |
| | | |
| | | public function setScripts(array $scripts):void |
| | | { |
| | | $this->scripts = $scripts; |
| | | } |
| | | public function getScripts():array |
| | | { |
| | | return $this->scripts; |
| | | } |
| | | } |