Router.php

<?php

namespace Tlf\Provi;

class Router extends \Lia\Compo {

    private function getDefaultBranch(){
        //this belongs elsewhere, as default branch is determined on a project-by-project basis
        return null;
    }

    public function getPrefixes():array{ return ['on'=>'lia:event.prefix'];} 

    public function __construct($package){
        parent::__construct($package);

        // $this->projectDirs = $package->get('projects');
        // $this->baseUrl = $package->get('baseUrl');

        // $this->lia->addRoute($this->baseUrl, function(){echo "zeep";exit;});
        // var_dump($this->baseUrl);

        // $this->lia->append('lia:route.routers', [$this, 'routeDocs']);
        // $this->lia->append('lia:route.routers', [$this, 'routeSrc']);
        $this->lia->append('lia:route.routers', [$this, 'route']);
        // $this->srcDir = array_values((array)$this->vendors)[0]['dir'];
        // $vendorName = array_keys((array)$this->vendors)[0];
        // $serverDir = array_values((array)$this->vendors)[0]['dir'];
        // $this->vendorDir = $serverDir.'/repos/'.$vendorName.'/';
    }

    /**
     * Url format is `/base_url/vendor/project(-src)?(:branch_name)?/DocFile/?`
     * `/base_url/vendor/`
     */
    public function route($request){
        $base_url = $this->package->get('baseUrl');
        if ($base_url==$request->url()){
            return false;
        }
        if (substr($request->url(),0,strlen($base_url))!=$base_url){
            return false;
        }
        //no i parse the url

        $url = substr($request->url(), strlen($this->package->get('baseUrl')));
        $parts = explode('/',$url);
        if ($parts[0]=='webhook'){
            return [
                'url'=>$url,
                new \Lia\Obj\Route([
                    'target'=>[$this,'deliverWebhook'],
                ])
            ];
        } else if (count($parts)==1){
            return false;
            return [
                new \Lia\Obj\Route([
                    'target'=>[$this,'deliverVendor'],
                ])
            ];
        } else if (count($parts)>=2){
            return [
                new \Lia\Obj\Route([
                    'url'=>$url,
                    'target'=>[$this,'deliverProject'],
                ])
            ];
        }

    }

    public function deliverWebhook($route, $response){
        $response->content = 'Webhooks are not setup yet';
    }

    public function deliverVendor($route, $response){
        $response->content = 'vendor views are not setup yet';
    }

    public function deliverProject($route, $response){
        $this->lia->view('Docu/Resources').'';
        $VIEW_SOURCE = false;
        $PROJECT_LIST = $this->package->get('projects');

        $url = $route->url();

        $info = $this->parseUrl($url, $this->package->get('baseUrl'));

        foreach ($PROJECT_LIST as $path){
            $projectName=strtolower(basename($path));

            if (strtolower($info['project'])==$projectName){
                $path = $path.'/'.$info['file'];
                $project = new \Tlf\Provi\Project($path, $info);
                $content = $this->getProjectPage($project);
                $response->content = $content;
                return;
            }
        }


        echo "\n\n";
        echo "see ".__FILE__.' on '. __LINE__;
        echo "did not do it";
        echo "\n\n";
        exit;

    }


    /**
     * 
     * @return @see \Tlf\Project
     */
    public function parseUrl($url,$base_url){
        // Url format is `/base_url/vendor/project(-src)?(:branch_name)?/DocFile/?`
        $view_source = false;
        $_url = $url;
        $url = strtolower($url);
        $parts = explode('/', $url);
        $vendor = $parts[0];
        $project = $parts[1];
        $branch_parts = explode(":", $project);
        $project_name = $branch_parts[0];
        if (count($branch_parts)>1)$branch = $branch_parts[1];
        else $branch = null;
        $project_name = $project;
        if (substr($project_name,-4)=='-src'){
            $view_source = true;
            $project_name = substr($project_name,0,-4);
        }

        $rel_file = implode('/', array_slice($parts,2));

        return [
            'url'=>$_url,
            'parts'=>$parts,
            'vendor'=>$vendor,
            'project'=>$project_name,
            'view_source'=>$view_source,
            'url_branch'=>$branch,
            'file'=>$rel_file,
            'base_url' => $base_url,
        ];
    }

    public function getProjectPage($project){


        $view = $this->lia->view('Docu/ProjectLayout', ['router'=>$this, 'project'=>$project]);


        return ''.$view;

        // echo $view;
//
        // exit;
        // return $view;
//
        // ob_start();
//
        // return ob_get_clean();
    }

}