Select Git revision
projectlist.class.php
projectlist.class.php 11.76 KiB
<?php
/* ######################################################################
IML DEPLOYMENT
class projectlist to render overview page
---------------------------------------------------------------------
2013-11-08 Axel <axel.hahn@iml.unibe.ch>
###################################################################### */
require_once 'project.class.php';
/**
* class for project overview
*/
class projectlist {
// ----------------------------------------------------------------------
// CONFIG
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// constructor
// ----------------------------------------------------------------------
/**
* constructor
* @param array $aProjects array with all projects (overrides config data)
*/
public function __construct($aProjects = false) {
}
// ----------------------------------------------------------------------
// private functions
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// GETTER
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// SETTER
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// ACTIONS
// ----------------------------------------------------------------------
/**
* render html for overview table
* @return string
*/
public function renderOverview() {
$sOut = ''; // table
$sOut2 = ''; // tiles
$oPrj = false;
$sTrClass="trproject";
$sColClass="tdphase";
$oPrj1 = new project();
$sPrjFilter='';
$sPhaseFilter='';
$sPrjFilter.='<option value="'.$sTrClass.'">Alle</option>';
$sPhaseFilter.='<option value="'.$sColClass.'">Alle</option>';
// foreach (array_keys($this->_aPhases) as $sPhase) {
foreach (array_keys($oPrj1->getPhases()) as $sPhase) {
$sPhaseFilter.='<option value="'.$sPhase.'" >'.$sPhase.'</option>';
}
foreach ($oPrj1->getProjects() as $sPrj) {
$oPrj = new project($sPrj);
$sPrjFilter.='<option value="'.$sPrj.'">'.$oPrj->getLabel().'</option>';
$sOutPhases = '';
$sOutPhases2 = '';
// loop over phases ...
foreach (array_keys($oPrj->getPhases()) as $sPhase) {
$sOutPhases.=$oPrj->renderAllPhaseDetails($sPhase,true,false);
if ($oPrj->canAcceptPhase($sPhase)){
$sOutPhases2.=$oPrj->renderLink("accept", $sPhase);
}
}
$sOut2 .= '<div class="'.$sPrj.' '.$sTrClass.' prjbox"><div class="title">'
. '<a href="" onclick="$(\'#prjfilter\').val(\''.$sPrj.'\'); window.setTimeout(\'filterOverviewTable();\', 10);setview(\'extended\'); return false;"'
. 'style="float: right;"'
. 'title="in der erweiterten Ansicht nur dieses Projekt anzeigen"><i class="icon-filter"></i> Filter</a>'
. '<strong>'
. '<a href="/deployment/'.$sPrj.'/" title="Projekt-Übersicht"><i class=" icon-book"></i> '.$oPrj->getLabel().'</a>'
. '</strong>'
. '</div><div class="box">'
. $oPrj->getDescription()
. '<br>'
. '';
// render output
$sOut.='
<tr class="'.$sPrj.' '.$sTrClass.'">
<td class="prj">
<strong>
<a href="/deployment/'.$sPrj.'/" ><i class=" icon-book"></i> '.$oPrj->getLabel().'</a>
</strong><br>
' . $oPrj->getDescription() . '</td><td class="prj">';
if ($oPrj->canAcceptPhase()){
$sOut .=$oPrj->renderLink("build");
$sOut2.=$oPrj->renderLink("build");
// $sOut.='<a href="/deployment/'.$sPrj.'/build/" class="btn '.$sNext.'"><i class=" icon-forward"></i> Build für ['.$sNext.']</a><br>';
}
$sOut.='</td>
' . $sOutPhases . '
</tr>';
$sOut2.=$sOutPhases2 . '</div></div>';
}
if ($sOut) {
$sRowHead1='';
$sRowHead2='';
foreach (array_keys($oPrj1->getPhases()) as $sPhase){
// Anzahl colspan ist hartcodiert :-/
$sRowHead1.='<th class="'.$sPhase.' '.$sColClass.'" colspan="3">'.$sPhase.'</th>';
$sRowHead2.=$oPrj->renderPlacesAsTd($sPhase);
}
$sOut = '
<script>
/**
* filter table by chosen select values for project and phase
*/
function filterOverviewTable(){
var sPrj=$("#prjfilter").val();
var sPhase=$("#phasefilter").val();
localStorage.setItem("selectedPrj", sPrj);
localStorage.setItem("selectedPhase", sPhase);
$(\'.'.$sTrClass.'\').hide(); $(\'.\' + sPrj).show();
$(\'.'.$sColClass.'\').hide(); $(\'.\' + sPhase).show();
showResetbtn();
}
/**
* filter table and tiles by filtertext
*/
function filterTable(){
var sSearch=$("#efilter").val();
localStorage.setItem("efilter", sSearch);
var Regex = new RegExp(sSearch, "i");
$(".trproject").each(function() {
sVisible="none";
if ( Regex.exec(this.innerHTML)) {
sVisible="";
}
$(this).css("display", sVisible);
});
showResetbtn();
return false;
}
/**
* switch view between tiles and table
*/
function setview(sMode){
$(\'.view\').hide();
$(\'.view\'+sMode).show();
localStorage.setItem("mode", sMode);
return false;
}
/**
* set default view; it gets the last values for filter text,
* and selected values in dropdowns and restores the
* last view
*/
function setDefaultView(){
var sPrj=$("#prjfilter").val(localStorage.getItem("selectedPrj"));
var sPhase=$("#phasefilter").val(localStorage.getItem("selectedPhase"));
if (sPrj + sPhase) {
window.setTimeout("filterOverviewTable();", 10);
}
if (localStorage.getItem("efilter")) {
$("#efilter").val(localStorage.getItem("efilter"));
window.setTimeout("filterTable();", 10);
}
var sMode=localStorage.getItem("mode");
if (sMode)setview(sMode);
}
/**
* Button zum Filter reset anzeigen/ verbergen
*/
function showResetbtn(){
sVisible=($("#efilter").val())?"visible":"hidden";
if ($("#prjfilter").val()!="'.$sTrClass.'")sVisible="visible";
if ($("#phasefilter").val()!="'.$sColClass.'")sVisible="visible";
$("#btnresetfilter").css("visibility", sVisible);
return false;
}
/**
* Aktion des Filter reset: Filter zurücksetzen
*/
function resetFilter(){
$("#prjfilter").val("");
$("#phasefilter").val("");
filterOverviewTable();
$("#efilter").val("");
window.setTimeout("filterTable();", 10);
showResetbtn();
return false;
}
</script>
<div class="filterbar">
<a href="#" class="view viewextended" onclick="setview(\'simple\');"><i class="icon-th-large"></i> zur einfachen Ansicht</a>
<a href="#" class="view viewsimple" onclick="setview(\'extended\');" ><i class="icon-th-list"></i> zur erweiterten Ansicht</a>
|
<i class="icon-filter"></i>
Freitext-Filter (Regex):
<input type="text" id="efilter" name="efilter"
style="width: 150px;"
onchange="filterTable();"
onKeypress="filterTable(); "
onKeyup="filterTable(); "
>
<span class="view viewextended">
Projekt-Filter:
<select id="prjfilter" onchange="filterOverviewTable(); return false;">
'.$sPrjFilter.'
</select>
Phasen:
<select id="phasefilter" onchange="filterOverviewTable(); return false;">
'.$sPhaseFilter.'
</select>
</span>
<a href="#" class="btn" id="btnresetfilter"
title="Filter zurücksetzen"
style="background:#fcc;"
onclick="resetFilter();"><i class="icon-remove"></i> Reset Filter</a>
</div>
<div class="view viewsimple">
'.$sOut2.'
<div style="clear: both;"></div>
<br>
</div>
<table class="table view viewextended" id="tbloverview">
<thead>
<tr>
<th class="prj" rowspan="2">Projekt<br><br></th>
<th class="prj" rowspan="2"></th>
'.$sRowHead1.'
</tr>
<tr>
'.$sRowHead2.'
</tr>
</thead>
<tbody>
' . $sOut . '</tbody></table>'
. '<script>window.setTimeout("setDefaultView();", 50);</script>';
} else {
$sOut ='<strong>Hinweis</strong><br>'
. 'Es wurde noch kein Projekt eingerichtet.<br><br>'
. $oPrj1->renderLink("setup")
;
}
return $sOut;
}
}
?>