Skip to content
Snippets Groups Projects
Select Git revision
  • 230ffbcd9027da0370014459c84d7ef9eef41150
  • master default protected
  • Legacy_Php7
3 results

projectlist.class.php

Blame
  • user avatar
    hahn authored
    230ffbcd
    History
    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&uuml;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">
                            &nbsp;&nbsp;&nbsp;
                            Projekt-Filter: 
                            <select id="prjfilter" onchange="filterOverviewTable(); return false;">
                                '.$sPrjFilter.'
                            </select>
                            &nbsp;&nbsp;&nbsp;
                            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;
        }
    
    }
    
    ?>