| | |
| | | use JVBase\registrar\config\Directory; |
| | | use JVBase\registrar\config\Feed; |
| | | use JVBase\registrar\config\Integration; |
| | | use JVBase\registrar\config\Register; |
| | | use JVBase\registrar\config\Section; |
| | | use JVBase\registrar\config\SEO; |
| | | use JVBase\registrar\helpers\AddIntegrationFields; |
| | |
| | | public string $prefix_with = 'by'; |
| | | |
| | | public bool $system = false; |
| | | public bool $baseless = false; |
| | | public bool $modify = false; |
| | | |
| | | protected static array $allFlags = [ |
| | | //Shared Flags |
| | |
| | | * @var bool Whether to make this a calendar type (example: events) |
| | | */ |
| | | protected bool $is_calendar = false; |
| | | protected ?MakeCalendarType $isCalendarHandler = null; |
| | | |
| | | /** |
| | | * @var bool Whether this is a before/after post type |
| | | */ |
| | |
| | | protected Dashboard $dashboard; |
| | | protected Directory|false $directory; |
| | | protected Feed|false $feed; |
| | | protected Register|false $login; |
| | | // protected Management $management; |
| | | // protected Responses $responses; |
| | | protected ?SEO $seo = null; |
| | | |
| | | /** Helpers **/ |
| | | protected MakeCalendarType|false $calendar = false; |
| | | protected bool $hasIntegrations = true; |
| | | protected array $integrationConfigs = []; |
| | | protected array $integrationFields = []; |
| | | protected MakeTrackChanges $trackChanges; |
| | |
| | | $this->setFields(); |
| | | |
| | | add_action('init', [$this, 'register'], 2); |
| | | add_filter('jvbDashboardPage', [$this, 'renderDashPage'], 10, 3); |
| | | if ($this->slug !== 'dash') { |
| | | add_action(BASE.'dashboard_page_'.$this->slug, [$this, 'renderDashPage'], 10, 2); |
| | | } |
| | | |
| | | } |
| | | |
| | | public static function maybeExcludeSingles(array $IDs):array |
| | |
| | | 'post_parent__not_in' => [0], // Only get posts with a parent |
| | | ]); |
| | | } |
| | | |
| | | public function ensureRegistrar():void |
| | | { |
| | | $this->initRegistrar(); |
| | | } |
| | | protected function initRegistrar():void { |
| | | $this->registrar = match ($this->type) { |
| | | 'post' => new Posts($this->slug, $this->singular, $this->plural), |
| | | 'term' => new Terms($this->slug, $this->singular, $this->plural), |
| | | default => false, |
| | | }; |
| | | |
| | | |
| | | if ($this->baseless) { |
| | | $this->registrar->baseless = true; |
| | | $this->registrar->postType = jvbNoBase($this->slug); |
| | | } |
| | | if ($this->modify) { |
| | | $this->registrar->modify = true; |
| | | } |
| | | } |
| | | |
| | | protected function initClasses():void { |
| | |
| | | return self::$instances[$slug]; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Adds the properties for register_post_type or register_taxonomy |
| | | * @param array $args |
| | |
| | | return $this->args; |
| | | } |
| | | |
| | | public function baseless():self |
| | | { |
| | | $this->baseless = true; |
| | | return $this; |
| | | } |
| | | public function modify():self |
| | | { |
| | | $this->modify = true; |
| | | return $this; |
| | | } |
| | | |
| | | public function setFields():void |
| | | { |
| | | $this->fields = new Fields($this->type, $this); |
| | |
| | | } |
| | | public function hasIntegration(string $integration):bool |
| | | { |
| | | if (!$this->hasIntegrations) { |
| | | return false; |
| | | } |
| | | return array_key_exists($integration, $this->integrationConfigs); |
| | | } |
| | | public function hasAnyIntegrations(array $integrations = []):bool |
| | | { |
| | | if (!$this->hasIntegrations) { |
| | | return false; |
| | | } |
| | | |
| | | if (empty($integrations)) { |
| | | $integrations = array_keys($this->integrationConfigs); |
| | | return !empty($integrations); |
| | |
| | | foreach ($flags as $flag) { |
| | | $this->$flag = true; |
| | | switch ($flag) { |
| | | case 'is_calendar': |
| | | $this->calendar = new MakeCalendarType($this->slug, $this); |
| | | break; |
| | | case 'is_content': |
| | | add_action('init', [$this, 'setupContent'], 20); |
| | | break; |
| | |
| | | |
| | | public function config(string $config):mixed |
| | | { |
| | | $allowed = ['breadcrumbs','calendar','dashboard','directory','feed','management','has_responses','seo','trackchanges','verification']; |
| | | $allowed = ['breadcrumbs','calendar','register','login','dashboard','directory','feed','management','has_responses','seo','trackchanges','verification']; |
| | | if (!in_array(strtolower($config), $allowed)) { |
| | | error_log('Invalid config requested from Registrar: '.$config); |
| | | return []; |
| | |
| | | 'breadcrumbs' => $this->getBreadcrumbs(), |
| | | 'dashboard' => $this->getDashboard(), |
| | | 'directory' => $this->getDirectory(), |
| | | 'register','login' => $this->getLogin(), |
| | | 'feed' => $this->getFeed(), |
| | | 'management' => $this->getManagement(), |
| | | 'has_responses' => $this->getResponses(), |
| | |
| | | 'verification' => $this->getVerification() |
| | | }; |
| | | } |
| | | protected function getLogin():Register|false |
| | | { |
| | | if (!isset($this->login)) { |
| | | $this->login = new Register(); |
| | | } |
| | | return $this->login; |
| | | } |
| | | protected function getBreadcrumbs():Breadcrumbs |
| | | { |
| | | if (!isset($this->breadcrumbs)) { |
| | |
| | | $this->isTimelineHandler = new MakeTimelineType($this->slug); |
| | | $this->registrar->hierarchical = true; |
| | | } |
| | | if ($this->is_calendar) { |
| | | $this->isCalendarHandler = new MakeCalendarType($this->slug, $this); |
| | | } |
| | | |
| | | if (!is_null($this->rewrite_taxonomy)) { |
| | | $this->registrar->addTaxonomyRewrite($this->rewrite_taxonomy); |
| | |
| | | return $this; |
| | | } |
| | | |
| | | public function renderDashPage(string $content, string $page, string $slug):string |
| | | public function renderDashPage(string $page, string $slug):void |
| | | { |
| | | if ($slug === $this->slug) { |
| | | ob_start(); |
| | | $crud = new CRUD($slug); |
| | | $crud->render(); |
| | | return ob_get_clean(); |
| | | } |
| | | |
| | | return $content; |
| | | $crud = new CRUD($slug); |
| | | $crud->render(); |
| | | } |
| | | |
| | | public function setupContent():void |
| | |
| | | |
| | | unset($processing[$termId]); |
| | | } |
| | | |
| | | public function renderContent(string $content, array $block):string |
| | | { |
| | | if (!is_page($this->page)) { |
| | |
| | | |
| | | return [$images,$fields]; |
| | | } |
| | | |
| | | public function setHasIntegrations(bool $has = true):void |
| | | { |
| | | $this->hasIntegrations = $has; |
| | | } |
| | | } |