Current File : /home/n742ef5/royalanteam.com/wp-content/plugins/myhome-core/src/Widgets/Helpers/HasBreadcrumbs.php
<?php

namespace Tangibledesign\MyHome\Widgets\Helpers;

use Tangibledesign\Framework\Models\Field\TaxonomyField;
use Tangibledesign\Framework\Models\Template\TemplateType\ModelArchiveTemplateType;
use Tangibledesign\Framework\Models\Template\TemplateType\ModelSingleTemplateType;
use Tangibledesign\Framework\Models\Template\TemplateType\TemplateType;
use Tangibledesign\Framework\Widgets\Helpers\HasModel;

trait HasBreadcrumbs
{
    use \Tangibledesign\Framework\Widgets\Helpers\HasBreadcrumbs;
    use HasModel;

    public function getCustomBreadcrumbs(?TemplateType $templateType): array
    {
        if ($templateType instanceof ModelSingleTemplateType || is_singular(tdf_model_post_type())) {
            return $this->getListingBreadcrumbs();
        }

        if ($templateType instanceof ModelArchiveTemplateType || is_post_type_archive(tdf_model_post_type())) {
            return $this->getListingArchiveBreadcrumbs();
        }

        return [];
    }

    private function getListingBreadcrumbs(): array
    {
        $breadcrumbs = $this->getBaseBreadcrumbs();

        $listing = $this->getModel();
        if ( ! $listing) {
            return $breadcrumbs;
        }

        $baseUrl = get_post_type_archive_link(tdf_model_post_type());

        $breadcrumbs[] = [
            'key'  => 'search_results',
            'name' => tdf_string('search_results'),
            'url'  => $baseUrl,
        ];

        $currentTerms = tdf_collect();

        foreach (tdf_app('breadcrumbs_taxonomies') as $taxonomy) {
            if ($taxonomy->isMultilevel()) {
                $terms = $taxonomy->getMultilevelValue($listing);
            } else {
                $terms = $taxonomy->getValue($listing);
                if ($terms->isNotEmpty()) {
                    $terms = tdf_collect([$terms->first()]);
                }
            }

            if ($terms->isEmpty()) {
                continue;
            }

            foreach ($terms as $term) {
                $currentTerms[] = $term;

                $breadcrumbs[] = [
                    'key'  => $term->getKey(),
                    'name' => $term->getName(),
                    'url'  => apply_filters(
                        'myhome/breadcrumbs/listing/url',
                        $baseUrl,
                        $currentTerms
                    ),
                ];
            }
        }

        $breadcrumbs[] = [
            'key'  => $listing->getKey(),
            'name' => $listing->getName(),
            'url'  => $listing->getUrl(),
        ];

        return $breadcrumbs;
    }

    private function getListingArchiveBreadcrumbs(): array
    {
        $args = $_GET;

        foreach (tdf_app('breadcrumbs_taxonomies') as $taxonomy) {
            /* @var TaxonomyField $taxonomy */
            $value = get_query_var($taxonomy->getKey());
            if ( ! empty($value)) {
                $args[$taxonomy->getSlug()] = $value;
            }
        }

        return apply_filters('myhome/breadcrumbs/listings', $args);
    }
}