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();
}
}