Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/wyrihaximus/twig-view/src/Lib/TreeScanner.php
<?php

namespace WyriHaximus\TwigView\Lib;

/**
 * Class TreeScanner
 * @package WyriHaximus\TwigView\Lib
 */
class TreeScanner
{
   
/**
     * Return all sections (app & plugins) with an Template directory.
     *
     * @return array
     */
   
public static function all()
    {
        return static::
deepen(RelativeScanner::all());
    }

   
/**
     * Return all templates for a given plugin.
     *
     * @param string $plugin The plugin to find all templates for.
     *
     * @return mixed
     */
   
public static function plugin($plugin)
    {
        return static::
deepen([
           
$plugin => RelativeScanner::plugin($plugin),
        ])[
$plugin];
    }

   
/**
     * Strip the absolute path of template's paths for all given sections.
     *
     * @param string $sections Sections to iterate over.
     *
     * @return array
     */
   
protected static function deepen($sections)
    {
        foreach (
$sections as $section => $paths) {
           
$sections[$section] = static::convertToTree($paths);
        }
        return
$sections;
    }

   
/**
     * Turn a set of paths into a tree.
     *
     * @param array $paths Paths to turn into a tree.
     *
     * @return array
     */
   
protected static function convertToTree(array $paths)
    {
        foreach (
$paths as $index => $path) {
            static::
convertPathToTree($paths, $index, $path);
        }

        return
$paths;
    }

   
/**
     * Convert a path into a tree when it contains a directory separator.
     *
     * @param array  $paths The paths to work on.
     * @param mixed  $index Index of $path.
     * @param string $path  Path to breakup and turn into a tree.
     *
     * @return void
     */
   
protected static function convertPathToTree(array &$paths, $index, $path)
    {
        if (
strpos($path, DIRECTORY_SEPARATOR) !== false) {
           
$chunks = explode(DIRECTORY_SEPARATOR, $path);
           
$paths = static::branch($paths, $chunks);
            unset(
$paths[$index]);
        }
    }

   
/**
     * Create a branch for the current level and push a twig on it.
     *
     * @param array $paths    Paths to append.
     * @param array $branches Branches to use untill only one left.
     *
     * @return array
     */
   
protected static function branch(array $paths, array $branches)
    {
       
$twig = array_shift($branches);
        if (
count($branches) == 0) {
           
$paths[] = $twig;
            return
$paths;
        }

        if (!isset(
$paths[$twig])) {
           
$paths[$twig] = [];
        }

       
$paths[$twig] = static::branch($paths[$twig], $branches);

        return
$paths;
    }
}