code/project.php
<?php
require("conf.php");
require ("Parsedown.php");
$projectName=$_GET['p'];
$realPath=realpath($projectName);
$isProjectRoot=true;
if (strpos($projectName, '/') !== false)
{
$isProjectRoot=false;
}
if (strpos($realPath, $ProjectsRoot) === FALSE)
{
echo 'Ops you are bad!';
die();
}
if (realpath($projectName)==false)
{
echo "Ops...file not found!";
die();
}
if(! isset($_GET['p']))
{
echo "Ops...";
die();
}
if(empty($_GET['p']))
{
echo "Ops...";
die();
}
if (strpos($projectName, '..') !== false)
{
echo "Ops...";
die();
}
if (strpos($projectName, ',') !== false)
{
echo "Ops...";
die();
}
if (strpos($projectName, './') !== false)
{
echo "Ops...";
die();
}
function getDescr($pname)
{
global $ProjectsRoot;
$file=$ProjectsRoot.'/'.$pname.'/.pobsrc/descr.pob';
if (is_file($file))
{
return file_get_contents($file);
}else{
return '';
}
}
function getUrlDocs($pname)
{
global $ProjectsRoot;
$file=$ProjectsRoot.'/'.$pname.'/.pobsrc/urldocs.pob';
if (is_file($file))
{
$url=file_get_contents($file);
return '<a class="btn btn-secondary" style="margin-left:10px" href="'.$url.'" role="button" target="_blank" >Docs</a>' ;
}else{
return '';
}
}
function formatUrl($html)
{
global $projectName;
global $weburl;
$dom = new DOMDocument();
$dom->loadHTML($html);
$tags = $dom->getElementsByTagName('a');
foreach ($tags as $tag)
{
$origUrl = $tag->getAttribute('href');
if(substr($origUrl, 0, 4) === "http") continue;
$tag->removeAttribute('href');
$tag->setAttribute("href", $weburl.'/doc.php?p='.$projectName.'/'.$origUrl);
}
$tags = $dom->getElementsByTagName('img');
foreach ($tags as $tag)
{
$origUrl = $tag->getAttribute('src');
if(substr($origUrl, 0, 4) === "http") continue;
$tag->removeAttribute('src');
$tag->setAttribute("src", $weburl.'/'.$projectName.'/'.$origUrl);
}
$html=$dom->saveHTML();
return $html;
}
function getReadme()
{
$Parsedown = new Parsedown();
global $ProjectsRoot;
global $projectName;
$file=$ProjectsRoot.'/'.$projectName.'/Readme.md';
if (is_file($file))
{
$file_content=file_get_contents($file);
$md=$Parsedown->text($file_content);
return '<div id="readme" class="container" style="margin-top:10px">'. formatUrl($md).'</div>';
}
$file=$ProjectsRoot.'/'.$projectName.'/README.md';
if (is_file($file))
{
$file_content=file_get_contents($file);
$md=$Parsedown->text($file_content);
return '<div id="readme" class="container" style="margin-top:10px">'. formatUrl($md).'</div>';
}
$file=$ProjectsRoot.'/'.$projectName.'/readme.md';
if (is_file($file))
{
$file_content=file_get_contents($file);
$md=$Parsedown->text($file_content);
return '<div id="readme" class="container" style="margin-top:10px">'. formatUrl($md).'</div>';
}
}
function getIcon()
{
global $ProjectsRoot;
global $projectName;
global $weburl;
$file=explode ("/", $projectName)[0].'/icon.png';
if (! is_file($file)) return '';
$img="$weburl/$file";
return '<img src="'.$img.'" class="rounded float-left" style="height: 60px;margin-bottom:10px" />';
}
include ('header.php');
?>
<div class="container" style="margin-top:15px">
<p class="h1"><?php echo getIcon() ; ?> <?php echo $projectName ?></p>
<p class="lead" style="font-size:12px;margin-top:15px:float:left"><?php echo getDescr($projectName)?></p>
<hr/>
<div class="container" style="margin-bottom:10px">
<a class="btn btn-success" href="index.php" role="button">Home</a>
<a class="btn btn-success" href="javascript:window.history.back()" role="button">Back</a>
<?php
if($isProjectRoot==true)
{
echo '<a class="btn btn-secondary" style="margin-left:20px" href="zipdir.php?p='. $projectName .'" role="button">Clone</a>';
echo getUrlDocs($projectName);
}
?>
</div>
<?php
echo '<div class="card" style="margin-bottom:20px">';
echo getReadme();
echo '</div>';
echo '<div class="card .container-fluid" ><ul class="list-group list-group-flush">';
//fist folder
$arr = scandir($ProjectsRoot.'/'.$projectName);
foreach($arr as $entry)
{
if ($entry=='.' ) continue;
if ($entry=='..' ) continue;
$line='';
if (is_dir($ProjectsRoot.'/'.$projectName.'/'.$entry))
{
$url='project.php?p='.$projectName.'/'.$entry;
$line=$line='<a href="'.$url.'"><img style="width: 30px;margin-right:10px" src="folder.png"/>'.$entry.'</a>';
echo '<li class="list-group-item">'.$line.'</li>';
}
}
//then files
$arrFiles = scandir($ProjectsRoot.'/'.$projectName);
foreach($arrFiles as $entry)
{
if ($entry=='.' ) continue;
if ($entry=='..' ) continue;
$line='';
$url='';
if (is_file($ProjectsRoot.'/'.$projectName.'/'.$entry))
{
$url='viewer.php?p='.$projectName.'/'.$entry;
$line='<a href="'.$url.'">'.$entry.'</a>';
$mod_date=date("d/m/Y ", filemtime($ProjectsRoot.'/'.$projectName.'/'.$entry));
echo '<li class="list-group-item"><img style="width: 30px;margin-right:10px" src="file.png"/>'.$line.'<span style="color:#4D4D4D;font-size:11px;float:right;" >('.$mod_date.')</span></li>';
}
}
echo '</ul></div>';
?>
</div>
<?php include('footer.php');?>
</body>
</html>