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

vcs.interface.php

Blame
  • inc_functions.php 20.61 KiB
    <?php
    
    /* ######################################################################
    
      IML DEPLOYMENT
    
      included functions for the act_*.php files
    
      ---------------------------------------------------------------------
      2013-11-08  Axel <axel.hahn@iml.unibe.ch>
      ###################################################################### */
    
    global $aParams;
    $aParams = array();
    
    
    // ----------------------------------------------------------------------
    // verifiy config
    // ----------------------------------------------------------------------
        $aErrors=array();
        if (!isset($aConfig) || !is_array($aConfig)) {
            $aErrors[]="* \$aConfig does not exist. The config was not included before including " . __FILE__ . " in the request/ script.\n";
        } else {
    
            foreach (array(
                'appRootDir', 
                'configDir', 
                'workDir',
                'dataDir',
                'buildDir',
                'buildDefaultsDir',
                'packageDir',
                'archiveDir',
                ) as $sKey){
                if (!is_dir($aConfig[$sKey])){
                    $aErrors[]="* \$aConfig['$sKey'] points to a non existing directory (".$aConfig[$sKey].").\n";
                } else {
                    if (!is_writable($aConfig[$sKey])){
                        $aErrors[]="* \$aConfig['$sKey'] = ".$aConfig[$sKey]." is NOT writable.\n";
                    }
                }
            }
        }
        foreach (array(
            $aConfig['dataDir'].'/database', 
            $aConfig['dataDir'].'/projects', 
            $aConfig['dataDir'].'/sshkeys', 
            ) as $sDir2Check){
            if (!is_dir($sDir2Check)){
                $aErrors[]="* directory not found: $sDir2Check\n";
            } else {
                if (!is_writable($sDir2Check)){
                    $aErrors[]="* $sDir2Check is NOT writable.\n";
                }
            }
        }
    
        // check required keys in the config
        foreach (array(
            'auth',
            'hooks',
            'installPackages',
            'lang',
            'phases',
            'projects',
        ) as $sKey){
            if (!array_key_exists($sKey, $aConfig)){
                $aErrors[]="* missing key directory [$sKey] in config\n";
            }
        }
    
        if (count($aErrors)){
            die("FATAL ERROR on config.<br>" . implode("<br>\n", $aErrors));
        }
    
    
    // remark: $_SERVER does not exist in CLI
    if (isset($_SERVER) && is_array($_SERVER) && array_key_exists("REQUEST_URI", $_SERVER)) {
        /*
          print_r($_GET);
          print_r($_POST);
          print_r($aParams);
          print_r($_SERVER);
          echo $_SERVER["REQUEST_URI"];
         */
        $aTmp = preg_split("#/#", $_SERVER["REQUEST_URI"]);
        if (count($aTmp) > 1 && $aTmp[1] == "deployment" && $aTmp[2] != "?") {
            array_shift($aTmp);
            array_shift($aTmp);
            if (
                    count($aTmp) && $aTmp[count($aTmp) - 1] && $aTmp[count($aTmp) - 1][0] == "?"
            ) {
                array_pop($aTmp);
            }
            if (count($aTmp) && $aTmp[0])
                $aParams["prj"] = $aTmp[0];
            if (count($aTmp) > 1 && $aTmp[1])
                $aParams["action"] = $aTmp[1];
            if (count($aTmp) > 2 && $aTmp[2])
                $aParams["par3"] = $aTmp[2];
            if (count($aTmp) > 3 && $aTmp[3])
                $aParams["par4"] = $aTmp[3];
        }
        if (count($_GET))
            foreach ($_GET as $key => $value)
                $aParams[$key] = $value;
        if (count($_POST))
            foreach ($_POST as $key => $value)
                $aParams[$key] = $value;
    
        /* force integer params
          foreach (array("id") as $sKey) {
          if (array_key_exists($sKey, $aParams)) {
          $aParams[$sKey]=(int)$aParams[$sKey];
          }
          }
         */
    
        foreach (array_keys($aParams) as $sKey) {
            $aParams[$sKey] = str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $aParams[$sKey]);
        }
    }
    
    /**
     * get home link as button
     * @return string
     */
    function aHome($sClass = "btn btn-default") {
        global $oHtml;
        // if (!array_key_exists("prj", $aParams)) return false;
        return $oHtml->getLinkButton(array(
            'href'=>'/deployment/?',
            'icon'=>'overview',
            'label'=>t("menu-overview"),
        ));
    }
    
    /**
     * get project Home link as button
     * @return string
     */
    function aPrjHome($sClass = "btn btn-default") {
        global $aParams, $oHtml;
        if (!array_key_exists("prj", $aParams)){
            return false;
        }
        if ($aParams["prj"] == "all"){
            return aHome($sClass);
        }
        // if (!array_key_exists("action", $aParams)) return false;
    
        require_once("./classes/project.class.php");
        $oPrj = new project($aParams["prj"]);
        return $oHtml->getLinkButton(array(
            'href'=>'/deployment/' . $aParams["prj"] . '/',
            'icon'=>'project-home',
            'label'=>$oPrj->getLabel(),
        ));
    }
    
    /**
     * get go back link as button
     * @return string
     */
    function aGoback($sClass = "btn btn-default") {
        global $oHtml;
        return $oHtml->getLinkButton(array(
            'href'=>'#',
            'onclick'=>'history.back();',
            'title'=>t("back"),
            'icon'=>'back',
            'label'=>t("back")
        ));
    }
    /**
     * get go top link as button
     * @return string
     */
    function aGotop($sClass = "scroll-link btn btn-default") {
        global $oHtml;
        return $oHtml->getLinkButton(array(
            'href'=>'#top',
            'class'=>$sClass,
            'title'=>t("gotop"),
            'icon'=>'glyphicon-eject',
            'label'=>' '
        ));
    }
    
    /**
     * auto generate upper part of the page with header and navigation 
     * @global type $aParams
     * @return type
     */
    function getTopArea() {
        global $aParams, $oHtml;
        $sReturn = '';
        require_once("./classes/project.class.php");
        require_once("./classes/user.class.php");
        $oUser = new user();
    
        $sMyPhase = "[phase]";
        $sMyRev = " [no rev] ";
        // bug#1511 json file was moved 1 level up
        $sJsonfile = __DIR__ . "/../../ci-webgui.json";
        if (file_exists($sJsonfile)) {
            $aJson = json_decode(file_get_contents($sJsonfile), true);
            if (array_key_exists("date", $aJson))
                $sMyRev = $aJson["date"];
        }
    
        $sBaseUrl = '/deployment/';
        $sWikiBaseUrl = 'https://secure.iml.unibe.ch/wiki/doku.php';
        $sReturn = '
            <span id="top"></span>
            <nav class="navbar navbar-inverse" role="navigation">
              <div class="container-fluid">
                <!-- Brand and toggle get grouped for better mobile display -->
                <div class="navbar-header">
                  <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                    <span class="sr-only">Toggle navigation</span>
                    <span class=" glyphicon glyphicon-bar"></span>
                    <span class=" glyphicon glyphicon-bar"></span>
                    <span class=" glyphicon glyphicon-bar"></span>
                  </button>
                  <nobr>
                    <a class="navbar-brand" href="' . $sBaseUrl . '"><span class="imllogo"></span> '.t("menu-brand").'</a>
                    <span class="badge"></span>
                  </nobr>
                  &nbsp;&nbsp;&nbsp;
                </div>
                <!-- Collect the nav links, forms, and other content for toggling -->
                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                ';
        if($oUser->getUsername()){
            $sReturn.='
                  <ul class="nav navbar-nav">
                  
                    <li class="dropdown';
                    if (array_key_exists("prj", $aParams) && $aParams['prj']==='all'){
                        $sReturn.=' active';
                    }
                    $sReturn.='">'
                            . $oHtml->getLink(array(
                                'href'=>$sBaseUrl,
                                'class'=>'dropdown-toggle',
                                'data-toggle'=>'dropdown',
                                'role'=>'button',
                                'aria-expanded'=>'false',
                                'icon'=>'menu',
                                'label'=>t("menu").' <span class="caret"></span>',
                            ))
                      .'<ul class="dropdown-menu" role="menu">
                        <li>'.$oHtml->getLink(array(
                                'href'=>$sBaseUrl . 'all/setup/new/',
                                'icon'=>'new',
                                'label'=>t("menu-new-project"),
                            )).'</li>
                        <li>'.$oHtml->getLink(array(
                                'href'=>$sBaseUrl . 'all/setup/actionlog/',
                                'icon'=>'actionlog',
                                'label'=>t("menu-logs"),
                            )).'</li>
                        <li>'.$oHtml->getLink(array(
                                'href'=>$sBaseUrl . 'all/setup/checklang/',
                                'icon'=>'checklang',
                                'label'=>t("menu-checklang"),
                            )).'</li>
                        <li>'.$oHtml->getLink(array(
                                'href'=>$sBaseUrl . 'all/setup/',
                                'icon'=>'setup',
                                'label'=>t("menu-settings"),
                            )).'</li>
                      </ul>
                    </li>
                    
    
                    <li class="dropdown">'
                        . $oHtml->getLink(array(
                            'href'=>'#',
                            'class'=>'dropdown-toggle',
                            'data-toggle'=>'dropdown',
                            'role'=>'button',
                            'aria-expanded'=>'false',
                            'icon'=>'projects',
                            'label'=>t("menu-projects") . ' <span class="caret"></span>',
                        ))
                        .'<ul class="dropdown-menu" role="menu">'
                        ;
                    
                        $oPrj1 = new project();
                        foreach ($oPrj1->getProjects() as $sPrj) {
                            $oPrj = new project($sPrj);
                            $sReturn.='<li>'
                                    . $oHtml->getLink(array(
                                        'href'=>$sBaseUrl . $sPrj .'/',
                                        'icon'=>'project',
                                        'label'=>$oPrj->getLabel(),
                                    ))
                                    . '</li>';
                        }
                        $sReturn.='
                      </ul>
                    </li>
                  ';
    
                    if (array_key_exists("prj", $aParams) && $aParams["prj"] <> "all") {
                        $oPrj = new project($aParams["prj"]);
                        $sReturn.='
                        <li class="dropdown active">'
                            .$oHtml->getLink(array(
                                'href'=>'#',
                                'class'=>'dropdown-toggle',
                                'data-toggle'=>'dropdown',
                                'role'=>'button',
                                'aria-expanded'=>'false',
                                'icon'=>'project',
                                'label'=>$oPrj->getLabel() .' <span class="caret"></span>',
                            ))
                            .'
                            <ul class="dropdown-menu" role="menu">
                                <li>'
                                . $oHtml->getLink(array(
                                    'href'=>$sBaseUrl . $sPrj .'/',
                                    'icon'=>'project-home',
                                    'label'=>t("project-home"),
                                ))
                                .'</li>
                            ';
                            $aPhases = $oPrj->getActivePhases();
                            if (count($aPhases)) {
                                $sReturn.='<li role="separator" class="divider"></li>
                                        <li>'
                                        .$oHtml->getLink(array(
                                            'href'=>$sBaseUrl . $aParams["prj"] . '/build/',
                                            'icon'=>'build',
                                            'label'=>t("build"),
                                        ))
                                        .'</li> 
                                        <li role="separator" class="divider"></li>
                                        <li class="dropdown-header">'.t("menu-project-phases").'</li>';
                                foreach ($aPhases as $sPhase) {
                                    $sReturn.='<li><a href="' . $sBaseUrl . $aParams["prj"] . '/phase/' . $sPhase . '/">' . $oHtml->getIcon('phase').$sPhase . '</a></li>';
                                }
                            }
                            $sReturn.='
                                <li role="separator" class="divider"></li>
                                <li>'
                                .$oHtml->getLink(array(
                                    'href'=>$sBaseUrl . $aParams["prj"] . '/setup/',
                                    'icon'=>'setup',
                                    'label'=>t("menu-project-settings"),
                                ))
                                .'</li> 
                                <li>'
                                .$oHtml->getLink(array(
                                    'href'=>$sBaseUrl . $aParams["prj"] . '/cleanup/',
                                    'icon'=>'cleanup',
                                    'label'=>t("menu-project-cleanup"),
                                ))
                                .'</li> 
                                <li>'
                                .$oHtml->getLink(array(
                                    'href'=>$sBaseUrl . $aParams["prj"] . '/delete/',
                                    'icon'=>'delete',
                                    'label'=>t("menu-project-delete"),
                                ))
                                .'</li> 
                            </ul></li>';
                    }
        }
                        
                $sReturn.='
                  </ul>
                
                <ul class="nav navbar-nav navbar-right">'
                    . ($oUser->getUsername() 
                        ? '
                        <!-- userdata -->
                        <li class="dropdown">'
                            .$oHtml->getLink(array(
                                'href'=>'#',
                                'class'=>'dropdown-toggle',
                                'data-toggle'=>'dropdown',
                                'role'=>'button',
                                'aria-expanded'=>'false',
                                'icon'=>'user',
                                'label'=>$oUser->getUsername() .' <span class="caret"></span>',
                            ))
                            .'<ul class="dropdown-menu" role="menu">
                                <li>'
                                .$oHtml->getLink(array(
                                    'href'=>$sBaseUrl . 'all/login/',
                                    'icon'=>'login',
                                    'label'=>t("menu-login"),
                                ))
                                .'</li> 
                            </ul>
                        </li>'
                            
                        : '<li>'
                            .$oHtml->getLink(array(
                                'href'=>$sBaseUrl . 'all/login/',
                                'icon'=>'login',
                                'label'=>t("login"),
                            ))
                          .'</li>'
                    )
                    .'<li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"
                            ><span class="glyphicon glyphicon-question-sign"></span> ' . t("menu-help") . ' <b class="caret"></b></a>
                            <ul class="dropdown-menu">
                                <li><a href="' . $sWikiBaseUrl . '/it/entwicklung/continuous_deployment">WIKI: Übersicht Continous Deployment</a></li>
                                <li><a href="' . $sWikiBaseUrl . '/it/entwicklung/continuous_deployment#konventionen">WIKI: Konventionen für Entwickler</a></li>
                                <li><a href="' . $sWikiBaseUrl . '/it/infrastruktur/dienste/puppet/snippets#iml-deployment">WIKI (Admin): Puppet-Snippets für den Sysadmin</a></li>
                                <li><a href="' . $sWikiBaseUrl . '/it/infrastruktur/dienste/imldeployment">WIKI (Admin): Verzeichnisse und Dateien</a></li>
                                <li><a href="/deployment/all/doc/">' . t("menu-help-classes") . '</a></li>
                            </ul>
                        </li>
                </ul>
                </div><!-- /.navbar-collapse -->
              </div><!-- /.container-fluid -->
            </nav>    
             
              <span id="swversion">' . $sMyRev . ' @ ' . php_uname("n") . '</span>
            </div><div id="header2">';
    
        if (!array_key_exists("prj", $aParams)) {
            $sReturn.='<h1>' . t("overview-label") . '</h1><span class="description">' . t("overview-hint") . '</span>';
        } else {
            if ($aParams["prj"] <> "all") {
                $oPrj = new project($aParams["prj"]);
                $sReturn.='<h1>' . $oPrj->getLabel() . '</h1>'
                        . '<span class="description">' . $oPrj->getDescription() . '</span>';
                if (array_key_exists("action", $aParams)) {
                    // $sReturn.='<h2>Aktion: '.$aParams["action"].'</h2>';
                }
            }
        }
        $sReturn.='</div>';
    
        return $sReturn;
    }
    
    /**
     * get h2 headline with action
     * @global type $aParams
     * @return string
     */
    function getAction() {
        global $aParams, $oHtml;
        $sReturn = '';
        $sNav = '';
        $sLabel = '';
        // $sDelim=$oHtml->getIcon('fa-chevron-right');
        $sDelim=' / ';
        if (array_key_exists("action", $aParams)) {
            $sLabel .= $oHtml->getIcon($aParams["action"]).t($aParams["action"]);
            $sNav .= aHome();
            if ($aParams['prj']==='all'){
                // $sNav .= ' ' . $oHtml->getIcon('fa-chevron-right') . '[ci-GUI]';
            } else {
                $sNav .= ' ' . $sDelim . aPrjHome();
            }
            $sClass='action '.$aParams["action"];
            if (array_key_exists("par3", $aParams)) {
                $sLabel.=' :: ' . $oHtml->getIcon($aParams["par3"]). $aParams["par3"];
                $sClass='action ' . $aParams["action"];
            }
            // $sReturn.='<h2 class="action ' . $aParams["action"] . '">' . $sLabel . '</h2>';
        } else if (array_key_exists("prj", $aParams)) {
            $sNav .= aHome();
            $sClass='action prjhome';
            $sLabel.=$oHtml->getIcon('project-home').t('project-home');
            // $sReturn.='<h2 class="action prjhome"> Projekt-Home</h2>';
        }
        $sReturn.=($sNav ? '<div id="navtop">' . $sNav .  ' ' . $sDelim . ' <span class="current">'.$sLabel.'</span></div>':'')
            // .'<h2 class="'.$sClass.'"> '.$sLabel.'</h2>'
            ;
        return $sReturn;
    }
    
    /**
     * translate function
     * @global type $aConfig
     * @staticvar array $aLang
     * @param string $s text
     * @return string
     */
    function t($s) {
        global $aConfig;
        static $aLang = array();
    
        if (!is_array($aConfig) || !array_key_exists("lang", $aConfig)) {
            die("ERROR: \$aConfig[\"lang\"] does not exist.\n");
        }
        if (!count($aLang)) {
            $sLangfile = __DIR__ . "/../../config/lang/" . $aConfig["lang"] . ".json";
            if (!file_exists($sLangfile)) {
                die("language file was not found: $sLangfile");
            }
            $aLang = json_decode(file_get_contents($sLangfile), true);
        }
    
        if (!array_key_exists($s, $aLang)) {
            return '<span class="warning">' . $s . '</span>';
        }
        // return $aLang[$s].' ('.$s.')';
        return $aLang[$s];
    }
    
    /**
     * enter user and comment 
     * @global type $aParams
     * @return string
     */
    function enterDeployinfos() {
        global $aParams;
        $sIdUser = "inputUser";
        $sIdComment = "inputComment";
        $sUser = (array_key_exists($sIdUser, $aParams)) ? $aParams[$sIdUser] : "";
        $sComment = (array_key_exists($sIdComment, $aParams)) ? $aParams[$sIdComment] : "";
    
        $sOut = '
            <div class="control-group">
                <label class="control-label" for="inputUser">Benutzername</label>
                <div class="controls">
                    <input type="text" id="inputUser" name="inputUser" placeholder="Benutzername" value="' . $sUser . '">
                </div>
            </div>
            <div class="control-group">
                <label class="control-label" for="inputComment">Kommentar zum Deployment</label>
                <div class="controls">
                    <textarea id= rows="3" id="inputComment" name="inputComment" placeholder="Kommentar">' . $sComment . '</textarea>
                </div>
            </div>
            ';
    
        return $sOut;
    }