Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Repository/Route.php
<?php

namespace XF\Repository;

use
XF\Mvc\Entity\Finder;
use
XF\Mvc\Entity\Repository;

use function
strlen;

class
Route extends Repository
{
   
/**
     * @return Finder
     */
   
public function findRoutesForList()
    {
        return
$this->finder('XF:Route')->order(['route_type', 'route_prefix', 'sub_name']);
    }

    public function
getRouteTypes()
    {
        return [
           
'public' => \XF::phrase('public'),
           
'admin' => \XF::phrase('admin'),
           
'api' => \XF::phrase('api')
        ];
    }

    public function
getRouteCacheData($routeType)
    {
       
$routes = $this->finder('XF:Route')
            ->
where('route_type', $routeType)
            ->
with('AddOn')
            ->
whereAddOnActive()
            ->
order(['route_prefix', 'sub_name'])
            ->
fetch();

       
$output = [];
        foreach (
$routes AS $route)
        {
           
$data = [
               
'format' => $route->format,
               
'build_callback' => $route->build_class ? [$route->build_class, $route->build_method] : null,
               
'controller' => $route->controller,
               
'context' => $route->context,
               
'action_prefix' => $route->action_prefix
           
];

            if (
$route->AddOn && $route->AddOn->is_processing)
            {
               
$this->disableProcessingAddOnRoute($route, $data);
            }

           
$output[$route->route_prefix][$route->sub_name] = $data;
        }

        foreach (
$output AS $prefix => &$sub)
        {
           
uksort($sub, function($a, $b)
            {
               
// longest sub names first
               
return strlen($b) <=> strlen($a);
            });
        }

        return
$output;
    }

    protected function
disableProcessingAddOnRoute(\XF\Entity\Route $route, array &$cacheData)
    {
       
$cacheData['controller'] = 'XF:Error';
       
$cacheData['force_action'] = 'addOnUpgrade';
    }

    public function
rebuildRouteCache($routeType)
    {
       
$cache = $this->getRouteCacheData($routeType);
        \
XF::registry()->set('routes' . ucfirst($routeType), $cache);
        return
$cache;
    }

    public function
rebuildRouteCaches()
    {
        foreach (
array_keys($this->getRouteTypes()) AS $type)
        {
           
$this->rebuildRouteCache($type);
        }
    }
}