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

namespace XF\DevelopmentOutput;

use
XF\Mvc\Entity\Entity;
use
XF\Util\Json;

class
Route extends AbstractHandler
{
    protected function
getTypeDir()
    {
        return
'routes';
    }
   
    public function
export(Entity $route)
    {
        if (!
$this->isRelevant($route))
        {
            return
true;
        }

       
$fileName = $this->getFileName($route);

       
$json = [
           
'route_type' => $route->route_type,
           
'route_prefix' => $route->route_prefix,
           
'sub_name' => $route->sub_name,
           
'format' => $route->format,
           
'build_class' => $route->build_class,
           
'build_method' => $route->build_method,
           
'controller' => $route->controller,
           
'context' => $route->context,
           
'action_prefix' => $route->action_prefix,
        ];

        return
$this->developmentOutput->writeFile($this->getTypeDir(), $route->addon_id, $fileName, Json::jsonEncodePretty($json));
    }

    protected function
getEntityForImport($name, $addOnId, $json, array $options)
    {
       
$route = \XF::em()->getFinder('XF:Route')->where([
           
'route_type' => $json->route_type,
           
'route_prefix' => $json->route_prefix,
           
'sub_name' => $json->sub_name
       
])->fetchOne();
        if (!
$route)
        {
           
$route = \XF::em()->create('XF:Route');
        }

       
$route = $this->prepareEntityForImport($route, $options);

        return
$route;
    }

    public function
import($name, $addOnId, $contents, array $metadata, array $options = [])
    {
       
$json = json_decode($contents);

       
$route = $this->getEntityForImport($name, $addOnId, $json, $options);
       
$route->setOption('check_duplicate', false);

       
$route->route_type = $json->route_type;
       
$route->route_prefix = $json->route_prefix;
       
$route->sub_name = $json->sub_name;
       
$route->format = $json->format;
       
$route->build_class = $json->build_class;
       
$route->build_method = $json->build_method;
       
$route->controller = $json->controller;
       
$route->context = $json->context;
       
$route->action_prefix = $json->action_prefix;
       
$route->addon_id = $addOnId;
       
$route->save();
       
// this will update the metadata itself

       
return $route;
    }
   
    protected function
getFileName(Entity $route, $new = true)
    {
       
$routeType = $new ? $route->getValue('route_type') : $route->getExistingValue('route_type');
       
$routePrefix = $new ? $route->getValue('route_prefix') : $route->getExistingValue('route_prefix');
       
$subName = $new ? $route->getValue('sub_name') : $route->getExistingValue('sub_name');

       
$subNameFile = preg_replace('#[^a-z0-9_-]#i', '-', $subName);
       
$subNameFile = preg_replace('#-{2,}#', '-', $subNameFile);

        return
"{$routeType}_{$routePrefix}_{$subNameFile}.json";
    }
}