From 908d5b8c110bbcbec42283e4bb416ff8a887c745 Mon Sep 17 00:00:00 2001 From: "Hahn Axel (hahn)" <axel.hahn@unibe.ch> Date: Fri, 24 Nov 2023 11:12:55 +0100 Subject: [PATCH] get version from 1st json file --- public_html/deployment/inc_functions.php | 249 ++++++++++-------- public_html/deployment/index.php | 2 +- public_html/deployment/main.css | 2 +- .../deployment/ui/page_replacements.php | 2 +- 4 files changed, 139 insertions(+), 116 deletions(-) diff --git a/public_html/deployment/inc_functions.php b/public_html/deployment/inc_functions.php index fce1cd7e..19d3f1e0 100644 --- a/public_html/deployment/inc_functions.php +++ b/public_html/deployment/inc_functions.php @@ -28,7 +28,7 @@ if (isset($_SERVER) && is_array($_SERVER) && array_key_exists("REQUEST_URI", $_S array_shift($aTmp); array_shift($aTmp); if ( - count($aTmp) && $aTmp[count($aTmp) - 1] && $aTmp[count($aTmp) - 1][0] == "?" + count($aTmp) && $aTmp[count($aTmp) - 1] && $aTmp[count($aTmp) - 1][0] == "?" ) { array_pop($aTmp); } @@ -59,8 +59,7 @@ if (isset($_SERVER) && is_array($_SERVER) && array_key_exists("REQUEST_URI", $_S foreach (array_keys($aParams) as $sKey) { $aParams[$sKey] = is_string($aParams[$sKey]) ? str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $aParams[$sKey]) - : $aParams[$sKey] - ; + : $aParams[$sKey]; } } @@ -68,14 +67,15 @@ if (isset($_SERVER) && is_array($_SERVER) && array_key_exists("REQUEST_URI", $_S * get home link as button * @return string */ -function aHome($sClass = "btn btn-default") { +function aHome($sClass = "btn btn-default") +{ global $oHtml; // if (!array_key_exists("prj", $aParams)) return false; return $oHtml->getLinkButton(array( - 'href'=>'/deployment/?', - 'icon'=>'overview', - 'class'=>$sClass, - 'label'=>t("menu-overview"), + 'href' => '/deployment/?', + 'icon' => 'overview', + 'class' => $sClass, + 'label' => t("menu-overview"), )); } @@ -83,12 +83,13 @@ function aHome($sClass = "btn btn-default") { * get project Home link as button * @return string */ -function aPrjHome($sClass = "btn btn-default") { +function aPrjHome($sClass = "btn btn-default") +{ global $aParams, $oHtml; - if (!array_key_exists("prj", $aParams)){ + if (!array_key_exists("prj", $aParams)) { return false; } - if ($aParams["prj"] == "all"){ + if ($aParams["prj"] == "all") { return aHome($sClass); } // if (!array_key_exists("action", $aParams)) return false; @@ -96,10 +97,10 @@ function aPrjHome($sClass = "btn btn-default") { require_once("./classes/project.class.php"); $oPrj = new project($aParams["prj"]); return $oHtml->getLinkButton(array( - 'href'=>'/deployment/' . $aParams["prj"] . '/', - 'icon'=>'project', - 'class'=>$sClass, - 'label'=>$oPrj->getLabel(), + 'href' => '/deployment/' . $aParams["prj"] . '/', + 'icon' => 'project', + 'class' => $sClass, + 'label' => $oPrj->getLabel(), )); } @@ -107,29 +108,31 @@ function aPrjHome($sClass = "btn btn-default") { * get go back link as button * @return string */ -function aGoback($sClass = "btn btn-default") { +function aGoback($sClass = "btn btn-default") +{ global $oHtml; return $oHtml->getLinkButton(array( - 'href'=>'#', - 'onclick'=>'history.back();', - 'title'=>t("back"), - 'icon'=>'back', - 'class'=>$sClass, - 'label'=>t("back") + 'href' => '#', + 'onclick' => 'history.back();', + 'title' => t("back"), + 'icon' => 'back', + 'class' => $sClass, + 'label' => t("back") )); } /** * get go top link as button * @return string */ -function aGotop($sClass = "scroll-link btn btn-default") { +function aGotop($sClass = "scroll-link btn btn-default") +{ global $oHtml; return $oHtml->getLinkButton(array( - 'href'=>'#top', - 'class'=>$sClass, - 'title'=>t("gotop"), - 'icon'=>'gotop', - 'label'=>' ' + 'href' => '#top', + 'class' => $sClass, + 'title' => t("gotop"), + 'icon' => 'gotop', + 'label' => ' ' )); } @@ -137,7 +140,8 @@ function aGotop($sClass = "scroll-link btn btn-default") { * get array top left navigation * @return array */ -function getTopNavLeft($aEmbed=[]) { +function getTopNavLeft($aEmbed = []) +{ global $aParams, $oHtml; $aReturn = []; require_once("./classes/project.class.php"); @@ -147,23 +151,23 @@ function getTopNavLeft($aEmbed=[]) { $sBaseUrl = '/deployment/'; $sWikiBaseUrl = 'https://intranet.iml.unibe.ch/wiki/doku.php'; - $sCurrentProject=(array_key_exists("prj", $aParams) && $aParams["prj"] <> "all") ? $aParams["prj"] : false; - $sCurrentAction=(array_key_exists("action", $aParams) && $aParams["action"]) ? $aParams["action"] : false; - $sCurrentPar3=(array_key_exists("par3", $aParams) && $aParams["par3"]) ? $aParams["par3"] : false; - $sLiActive=' class="active"'; + $sCurrentProject = (array_key_exists("prj", $aParams) && $aParams["prj"] <> "all") ? $aParams["prj"] : false; + $sCurrentAction = (array_key_exists("action", $aParams) && $aParams["action"]) ? $aParams["action"] : false; + $sCurrentPar3 = (array_key_exists("par3", $aParams) && $aParams["par3"]) ? $aParams["par3"] : false; + $sLiActive = ' class="active"'; // $aReturn[]=['label'=>'=' ]; - $aReturn[]=['href'=>$sBaseUrl . '', 'label'=>' Deployment UI <small class="badge bg-info"><nobr>v'.APP_VERSION.'</nobr></small>', 'icon'=>'', 'class'=>'imllogo topbrand' ]; + $aReturn[] = ['href' => $sBaseUrl . '', 'label' => ' Deployment UI <small class="badge bg-info"><nobr>v' . APP_VERSION . '</nobr></small>', 'icon' => '', 'class' => 'imllogo topbrand']; - if($oUser->getUsername()){ + if ($oUser->getUsername()) { $oPrj1 = new project(); - $aPrjItems=[]; + $aPrjItems = []; foreach ($oPrj1->getProjects("label") as $aProject) { - $aPrjItems[]=[ - 'href'=>$sBaseUrl . $aProject['id'] .'/', - 'label'=>$aProject['label'], - 'class'=>$sCurrentProject===$aProject['id'] ? 'active' : '', - 'icon'=>'fa-solid fa-book', + $aPrjItems[] = [ + 'href' => $sBaseUrl . $aProject['id'] . '/', + 'label' => $aProject['label'], + 'class' => $sCurrentProject === $aProject['id'] ? 'active' : '', + 'icon' => 'fa-solid fa-book', ]; } /* to test a scrolling menu @@ -174,50 +178,48 @@ function getTopNavLeft($aEmbed=[]) { ); */ - $aReturn[]=[ - 'href'=>$sBaseUrl, 'label'=>t("menu"), 'class'=>(array_key_exists("prj", $aParams) && $aParams['prj']==='all' ? 'active' : ''), - 'icon'=>'fa-solid fa-chevron-right', - 'children'=>[ - ['href'=>$sBaseUrl . 'all/setup/new/', 'label'=>t("menu-new-project"), 'icon'=>'fa-regular fa-star' ], - ['href'=>$sBaseUrl . 'all/setup/actionlog/', 'label'=>t("menu-logs"), 'icon'=>'fa-regular fa-rectangle-list'], - ['href'=>$sBaseUrl . 'all/setup/checklang/', 'label'=>t("menu-checklang"), 'icon'=>'fa-regular fa-comment'], - ['href'=>$sBaseUrl . 'all/setup/', 'label'=>t("menu-settings"), 'icon'=>'fa-solid fa-gear'], - ] - ]; - if(count($aPrjItems)){ - $aReturn[]=[ - 'href'=>'#','label'=>t("menu-projects"), 'icon'=>'fa-solid fa-box-open', - 'children'=>$aPrjItems - ] - ; + $aReturn[] = [ + 'href' => $sBaseUrl, 'label' => t("menu"), 'class' => (array_key_exists("prj", $aParams) && $aParams['prj'] === 'all' ? 'active' : ''), + 'icon' => 'fa-solid fa-chevron-right', + 'children' => [ + ['href' => $sBaseUrl . 'all/setup/new/', 'label' => t("menu-new-project"), 'icon' => 'fa-regular fa-star'], + ['href' => $sBaseUrl . 'all/setup/actionlog/', 'label' => t("menu-logs"), 'icon' => 'fa-regular fa-rectangle-list'], + ['href' => $sBaseUrl . 'all/setup/checklang/', 'label' => t("menu-checklang"), 'icon' => 'fa-regular fa-comment'], + ['href' => $sBaseUrl . 'all/setup/', 'label' => t("menu-settings"), 'icon' => 'fa-solid fa-gear'], + ] + ]; + if (count($aPrjItems)) { + $aReturn[] = [ + 'href' => '#', 'label' => t("menu-projects"), 'icon' => 'fa-solid fa-box-open', + 'children' => $aPrjItems + ]; } - if ($sCurrentProject){ + if ($sCurrentProject) { $oPrj = new project($aParams["prj"]); - $aPrjChildren=[ - ['href'=>$sBaseUrl . $sCurrentProject . '/', 'label'=>$oHtml->getIcon('project-home').t("project-home"), 'icon'=>'', 'class'=>($sCurrentAction=='' ? 'active' :'')], - ['label'=>'-'], + $aPrjChildren = [ + ['href' => $sBaseUrl . $sCurrentProject . '/', 'label' => $oHtml->getIcon('project-home') . t("project-home"), 'icon' => '', 'class' => ($sCurrentAction == '' ? 'active' : '')], + ['label' => '-'], ]; $aPhases = $oPrj->getActivePhases(); if (count($aPhases)) { - $aPrjChildren[]=['href'=>$sBaseUrl . $sCurrentProject . '/build/', 'label'=>$oHtml->getIcon('build').t("build"), 'icon'=>'', 'class'=>($sCurrentAction==='build' ? 'active' :'')]; - $aPrjChildren[]=['label'=>'-']; + $aPrjChildren[] = ['href' => $sBaseUrl . $sCurrentProject . '/build/', 'label' => $oHtml->getIcon('build') . t("build"), 'icon' => '', 'class' => ($sCurrentAction === 'build' ? 'active' : '')]; + $aPrjChildren[] = ['label' => '-']; foreach ($aPhases as $sPhase) { - $aPrjChildren[]=['href'=>$sBaseUrl . $sCurrentProject . '/phase/' . $sPhase . '/', 'label'=>$oHtml->getIcon('phase').$sPhase, 'icon'=>'', 'class'=>(isset($aParams['par3']) && $aParams['par3']===$sPhase ? 'active' :'')]; + $aPrjChildren[] = ['href' => $sBaseUrl . $sCurrentProject . '/phase/' . $sPhase . '/', 'label' => $oHtml->getIcon('phase') . $sPhase, 'icon' => '', 'class' => (isset($aParams['par3']) && $aParams['par3'] === $sPhase ? 'active' : '')]; } - $aPrjChildren[]=['label'=>'-']; + $aPrjChildren[] = ['label' => '-']; } - $aPrjChildren[]=['href'=>$sBaseUrl . $sCurrentProject . '/setup/', 'label'=>$oHtml->getIcon('setup').t("menu-project-settings"), 'icon'=>'', 'class'=>($sCurrentAction==='setup' ? 'active' :'')]; - $aPrjChildren[]=['href'=>$sBaseUrl . $sCurrentProject . '/cleanup/', 'label'=>$oHtml->getIcon('cleanup').t("menu-project-cleanup"), 'icon'=>'', 'class'=>($sCurrentAction==='cleanup' ? 'active' :'')]; - $aPrjChildren[]=['href'=>$sBaseUrl . $sCurrentProject . '/delete/', 'label'=>$oHtml->getIcon('delete').t("menu-project-delete"), 'icon'=>'', 'class'=>($sCurrentAction==='delete' ? 'active' :'')]; + $aPrjChildren[] = ['href' => $sBaseUrl . $sCurrentProject . '/setup/', 'label' => $oHtml->getIcon('setup') . t("menu-project-settings"), 'icon' => '', 'class' => ($sCurrentAction === 'setup' ? 'active' : '')]; + $aPrjChildren[] = ['href' => $sBaseUrl . $sCurrentProject . '/cleanup/', 'label' => $oHtml->getIcon('cleanup') . t("menu-project-cleanup"), 'icon' => '', 'class' => ($sCurrentAction === 'cleanup' ? 'active' : '')]; + $aPrjChildren[] = ['href' => $sBaseUrl . $sCurrentProject . '/delete/', 'label' => $oHtml->getIcon('delete') . t("menu-project-delete"), 'icon' => '', 'class' => ($sCurrentAction === 'delete' ? 'active' : '')]; - $aReturn[]=[ - 'href'=>'#','label'=>$oPrj->getLabel(), 'icon'=>'fa-solid fa-book', 'class'=>'active', - 'children'=>$aPrjChildren + $aReturn[] = [ + 'href' => '#', 'label' => $oPrj->getLabel(), 'icon' => 'fa-solid fa-book', 'class' => 'active', + 'children' => $aPrjChildren ]; } - - } + } // echo '<pre>'.print_r($aReturn, 1); die(__FUNCTION__); return $aReturn; } @@ -226,7 +228,8 @@ function getTopNavLeft($aEmbed=[]) { * get array top left navigation * @return array */ -function getTopNavRight() { +function getTopNavRight() +{ global $aParams, $oHtml; $aReturn = []; require_once("./classes/project.class.php"); @@ -235,33 +238,34 @@ function getTopNavRight() { $sBaseUrl = '/deployment/'; $sWikiBaseUrl = 'https://intranet.iml.unibe.ch/wiki/doku.php'; - $sCurrentProject=(array_key_exists("prj", $aParams) && $aParams["prj"] <> "all") ? $aParams["prj"] : false; - $sCurrentAction=(array_key_exists("action", $aParams) && $aParams["action"]) ? $aParams["action"] : false; - $sCurrentPar3=(array_key_exists("par3", $aParams) && $aParams["par3"]) ? $aParams["par3"] : false; - $sLiActive=' class="active"'; - - if($oUser->getUsername()){ - $aReturn=[ - ['href'=>'#', 'label'=>$oUser->getUsername(), 'icon'=>'fa-solid fa-user', - 'class'=>($sCurrentAction=='login' ? 'active' :''), - 'children'=>[ - ['href'=>$sBaseUrl . 'all/login/', 'label'=>t("menu-userprofile"), 'icon'=>'fa-regular fa-id-card', 'class'=>($sCurrentAction=='login' ? 'active' :'') ], + $sCurrentProject = (array_key_exists("prj", $aParams) && $aParams["prj"] <> "all") ? $aParams["prj"] : false; + $sCurrentAction = (array_key_exists("action", $aParams) && $aParams["action"]) ? $aParams["action"] : false; + $sCurrentPar3 = (array_key_exists("par3", $aParams) && $aParams["par3"]) ? $aParams["par3"] : false; + $sLiActive = ' class="active"'; + + if ($oUser->getUsername()) { + $aReturn = [ + [ + 'href' => '#', 'label' => $oUser->getUsername(), 'icon' => 'fa-solid fa-user', + 'class' => ($sCurrentAction == 'login' ? 'active' : ''), + 'children' => [ + ['href' => $sBaseUrl . 'all/login/', 'label' => t("menu-userprofile"), 'icon' => 'fa-regular fa-id-card', 'class' => ($sCurrentAction == 'login' ? 'active' : '')], ] ] ]; - } else{ - $aReturn[]=['href'=>$sBaseUrl . 'all/login/', 'label'=>t("login"), 'icon'=>'fa-solid fa-right-to-bracket', 'class'=>($sCurrentAction=='login' ? 'active' :'') ]; + } else { + $aReturn[] = ['href' => $sBaseUrl . 'all/login/', 'label' => t("login"), 'icon' => 'fa-solid fa-right-to-bracket', 'class' => ($sCurrentAction == 'login' ? 'active' : '')]; } - $aReturn[]=['href'=>'#', 'label'=>t('menu-help'), 'icon'=>'fa-solid fa-life-ring', 'class'=>'', - 'children'=>[ - ['href'=>$sWikiBaseUrl . '/it/entwicklung/continuous_deployment', 'target'=>'_help', 'label'=>'WIKI: Übersicht Continous Deployment', 'icon'=>'' ], - ['href'=>$sWikiBaseUrl . '/it/entwicklung/continuous_deployment#konventionen', 'target'=>'_help', 'label'=>'WIKI: Konventionen für Entwickler', 'icon'=>'' ], - ['href'=>$sWikiBaseUrl . '/it/infrastruktur/se/snippets/iml.deployment_profile', 'target'=>'_help', 'label'=>'WIKI (Admin): Snippets für den Sysadmin', 'icon'=>'' ], - ['href'=>$sWikiBaseUrl . '/it/infrastruktur/dienste/imldeployment', 'target'=>'_help', 'label'=>'WIKI (Admin): Verzeichnisse und Dateien', 'icon'=>'' ], - ['href'=>$sBaseUrl . 'all/doc', 'label'=>t('menu-help-classes'), 'icon'=>'' ], - ] - ] - ; + $aReturn[] = [ + 'href' => '#', 'label' => t('menu-help'), 'icon' => 'fa-solid fa-life-ring', 'class' => '', + 'children' => [ + ['href' => $sWikiBaseUrl . '/it/entwicklung/continuous_deployment', 'target' => '_help', 'label' => 'WIKI: Übersicht Continous Deployment', 'icon' => ''], + ['href' => $sWikiBaseUrl . '/it/entwicklung/continuous_deployment#konventionen', 'target' => '_help', 'label' => 'WIKI: Konventionen für Entwickler', 'icon' => ''], + ['href' => $sWikiBaseUrl . '/it/infrastruktur/se/snippets/iml.deployment_profile', 'target' => '_help', 'label' => 'WIKI (Admin): Snippets für den Sysadmin', 'icon' => ''], + ['href' => $sWikiBaseUrl . '/it/infrastruktur/dienste/imldeployment', 'target' => '_help', 'label' => 'WIKI (Admin): Verzeichnisse und Dateien', 'icon' => ''], + ['href' => $sBaseUrl . 'all/doc', 'label' => t('menu-help-classes'), 'icon' => ''], + ] + ]; // echo '<pre>'.print_r($aReturn, 1); die(__FUNCTION__); return $aReturn; @@ -273,45 +277,62 @@ function getTopNavRight() { * @param string $sLinkClass classname for links; default: "" (adds class="btn btn-default") * @return string */ -function getBreadcrumb($sLinkClass="") { +function getBreadcrumb($sLinkClass = "") +{ global $aParams, $oHtml; $sReturn = ''; $sNav = ''; $sLabel = ''; // $sDelim=$oHtml->getIcon('fa-chevron-right'); - $sDelim=' / '; + $sDelim = ' / '; if (array_key_exists("action", $aParams)) { - $sLabel .= $oHtml->getIcon($aParams["action"]).t($aParams["action"]); + $sLabel .= $oHtml->getIcon($aParams["action"]) . t($aParams["action"]); $sNav .= aHome($sLinkClass); - if ($aParams['prj']==='all'){ + if ($aParams['prj'] === 'all') { // $sNav .= ' ' . $oHtml->getIcon('fa-chevron-right') . '[ci-GUI]'; } else { $sNav .= ' ' . $sDelim . aPrjHome($sLinkClass); } - $sClass='action '.$aParams["action"]; + $sClass = 'action ' . $aParams["action"]; if (array_key_exists("par3", $aParams)) { - $sLabel=$oHtml->getIcon($aParams["par3"]). $aParams["par3"]; - $sClass='action ' . $aParams["action"]; + $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($sLinkClass); - $sClass='action prjhome'; + $sClass = 'action prjhome'; // $sLabel.=$oHtml->getIcon('project').t('project-home'); - $sLabel.=aPrjHome($sLinkClass); + $sLabel .= aPrjHome($sLinkClass); // $sReturn.='<h2 class="action prjhome"> Projekt-Home</h2>'; } - // $sReturn.=($sNav ? '<div id="navtop">' . $sNav . ' ' . $sDelim . ' <span class="current">'.$sLabel.'</span></div>':'') + // $sReturn.=($sNav ? '<div id="navtop">' . $sNav . ' ' . $sDelim . ' <span class="current">'.$sLabel.'</span></div>':'') // .'<h2 class="'.$sClass.'"> '.$sLabel.'</h2>' - ; - $sReturn.=($sNav ? '' . $sNav . ' ' . $sDelim . ' <span class="current">'.$sLabel.'</span>':''); - if($sLinkClass){ - $sReturn=str_replace(['btn-default ', 'btn '], ['', ''], $sReturn); + ; + $sReturn .= ($sNav ? '' . $sNav . ' ' . $sDelim . ' <span class="current">' . $sLabel . '</span>' : ''); + if ($sLinkClass) { + $sReturn = str_replace(['btn-default ', 'btn '], ['', ''], $sReturn); } return $sReturn; } +/** + * get version info + * @return string + */ +function getVersioninfo() +{ + $sMyRev = ""; + + $aFiles = glob(dirname(dirname(__DIR__)) . "/*.json"); + if (isset($aFiles[0])) { + $aJson = json_decode(file_get_contents($aFiles[0]), true); + $sMyRev = (isset($aJson["branch"]) ? $aJson["branch"] . ' - ' : '') + . (isset($aJson["date"]) ? $aJson["date"] : ''); + } + return ($sMyRev ? $sMyRev . ' @ ' : '') . php_uname("n"); +} /** * translate function * @global type $aConfig @@ -319,7 +340,8 @@ function getBreadcrumb($sLinkClass="") { * @param string $s text * @return string */ -function t($s) { +function t($s) +{ global $aConfig; static $aLang = array(); @@ -346,7 +368,8 @@ function t($s) { * @global type $aParams * @return string */ -function enterDeployinfos() { +function enterDeployinfos() +{ global $aParams; $sIdUser = "inputUser"; $sIdComment = "inputComment"; diff --git a/public_html/deployment/index.php b/public_html/deployment/index.php index 8b38d559..15b6b397 100644 --- a/public_html/deployment/index.php +++ b/public_html/deployment/index.php @@ -1,6 +1,6 @@ <?php -define("APP_VERSION", '2.0-alpha'); +define("APP_VERSION", '2.0'); session_start(); diff --git a/public_html/deployment/main.css b/public_html/deployment/main.css index 91ec9c65..94ff5a0e 100644 --- a/public_html/deployment/main.css +++ b/public_html/deployment/main.css @@ -145,7 +145,7 @@ tr:hover{background:#f0f4f8; background_: linear-gradient(#f4f4f4,#fff,#f4f4f4); div.progressinprogress{color: #17a2b8;} div.progresshasqueue{color: #d61;} tr.progressinprogress{border-left:0.3em solid #17a2b8; } -tr.progresshasqueue{border-left:0.3em solid #f81;} +tr.progresshasqueue{border-left:0.3em solid #d61;} td.prj:nth-child(1) {max-width: 30em;} td.prj:nth-child(1) a{display: block; padding: 0.3em 0.5em; border-radius: 0.3em; background-color: #f0f4f8;} diff --git a/public_html/deployment/ui/page_replacements.php b/public_html/deployment/ui/page_replacements.php index ebb0c8a8..3b04020f 100644 --- a/public_html/deployment/ui/page_replacements.php +++ b/public_html/deployment/ui/page_replacements.php @@ -66,5 +66,5 @@ return [ // '{{INJECT_JS}}' => $cr->renderJSLang(), '{{INJECT_JS}}' => '', '{{PAGE_FOOTER_LEFT}}'=>' © 2013-' . date("Y") . ' <a href="https://www.iml.unibe.ch/" target="_blank">Institut für Medizinische Lehre; Universität Bern</a>', - '{{PAGE_FOOTER_RIGHT}}'=>'Source: <a href="https://git-repo.iml.unibe.ch/iml-open-source/imldeployment/" target="_blank">git-repo.iml.unibe.ch</a>', + '{{PAGE_FOOTER_RIGHT}}'=>getVersioninfo() . ' | Source: <a href="https://git-repo.iml.unibe.ch/iml-open-source/imldeployment/" target="_blank">git-repo.iml.unibe.ch</a>', ]; \ No newline at end of file -- GitLab