diff --git a/docker/containers/web-server/Dockerfile b/docker/containers/web-server/Dockerfile index 7c3184da3063e539c7e3713c95a4375cbad26519..7610b02d5fc7545debfc2f6893c6cfe378eedcdc 100644 --- a/docker/containers/web-server/Dockerfile +++ b/docker/containers/web-server/Dockerfile @@ -1,7 +1,7 @@ # # GENERATED BY init.sh - template: ./templates/web-server-Dockerfile - 42dce773c83597a7d05af398bdd66d15 # -FROM php:8.2-apache +FROM php:8.3-apache # install packages RUN apt-get update && apt-get install -y git unzip zip diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index e83b069998ede1184fe98d776e71653c847056ff..84b9ccf917b4e1c392f1842acb5bf48303dc8e86 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -19,7 +19,7 @@ services: build: context: . dockerfile: ./containers/web-server/Dockerfile - image: "php:8.2-apache" + image: "php:8.3-apache" container_name: 'adminlte-renderer-server' ports: - '${APP_PORT}:80' diff --git a/docker/init.sh.cfg b/docker/init.sh.cfg index 294cad2e9c5030e09827756ddef54df5b4aaac8f..cb5f510b17a1066017c6cc3387a463023089a124 100644 --- a/docker/init.sh.cfg +++ b/docker/init.sh.cfg @@ -17,7 +17,7 @@ APP_APT_PACKAGES="git unzip zip" #APP_APACHE_MODULES="rewrite" APP_APACHE_MODULES="rewrite" -APP_PHP_VERSION=8.2 +APP_PHP_VERSION=8.3 # APP_PHP_MODULES="curl pdo_mysql mbstring xml zip xdebug" APP_PHP_MODULES="" diff --git a/docs/10_Description.md b/docs/10_Description.md index 5d1183f8c8c703a79db7303e4d5b85354666600e..5c89e4a57febe8b5b797ff6e904eef8910884c71 100644 --- a/docs/10_Description.md +++ b/docs/10_Description.md @@ -18,7 +18,7 @@ The AdminLTE renderer is a PHP class offers several methods to render * buttons * ... -The class is compatible to PHP 7+8 ... up to PHP 8.2. +The class is compatible to PHP 7+8 ... up to PHP 8.3. ## Screenshots diff --git a/public_html/classes/render-adminlte.class.php b/public_html/classes/render-adminlte.class.php index 7ee43120fa838536474c539be315d03f14a2e67b..72f2e76b16ee60ab361530ccb858634633151439 100755 --- a/public_html/classes/render-adminlte.class.php +++ b/public_html/classes/render-adminlte.class.php @@ -158,26 +158,6 @@ class renderadminlte { // // ---------------------------------------------------------------------- - /** - * verify if an item has a correct value - * it returns false if a key is not defined to be checked - * it returns true if it was validated successfully - * it dies with an errror, if a value check failed - * - * @param string $sType type; key in $_aValidItems; one of bgcolor|color|type|size - * @param string $sValue value to check - * @param string $sReferrer optional: method that called this function - */ - protected function _DELETE_ME___checkValue($sType, $sValue, $sReferrer=false){ - if (!$sValue || !array_key_exists($sType, $this->_aValidItems)){ - return false; - } - if(array_search($sValue, $this->_aValidItems[$sType])===false){ - echo "ERROR: ".($sReferrer ? $sReferrer.' - ' : '')."value [$sValue] is not a valid for type [$sType]; it must be one of ".implode("|", $this->_aValidItems[$sType]).'<br>'; - } - return true; - } - /** * used in cosntructor * initialize all element definitions @@ -580,13 +560,16 @@ class renderadminlte { $iCounter=0; } - // special menu entry: horizontal bar (label is "-") - if($aLink['label']=='-'){ - return '<div class="dropdown-divider"></div>'; - } - // special menu entry: hamburger menu item (label is "=") - if($aLink['label']=='='){ - return '<li class="nav-item"><a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a></li>'; + switch ($aLink['label']) { + // special menu entry: horizontal bar (label is "-") + case '-': return '<div class="dropdown-divider"></div>'; break; + + // special menu entry: hamburger menu item (label is "=") + case '=': return '<li class="nav-item"><a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a></li>'; break; + + // special menu entry: hamburger menu item (label is "|") + // requires css: .navbar-nav li.divider{border-left: 1px solid rgba(0,0,0,0.2);} + case '|': return '<li class="divider"></li>'; break; } $aChildren=isset($aLink['children']) && is_array($aLink['children']) && count($aLink['children']) ? $aLink['children'] : false; @@ -670,9 +653,16 @@ class renderadminlte { * @param array $aUlOptions array of html attrubutes for wrapping UL tag * @return string */ - public function getTopNavigation($aNavItems, $aUlOptions=['class'=>'navbar-nav']){ + public function getTopNavigation($aNavItems, $aUlOptions=false, $aNavItemsRight=[], $aUlOptionsRight=false){ // array_unshift($aNavItems, ['class'=>'nav-link', 'data-widget'=>'pushmenu', 'href'=>'#', 'role'=>'button', 'label'=>'<i class="fa-solid fa-bars"></i>']); - return $this->addWrapper('ul', $aUlOptions, $this->getNavItems($aNavItems)); + $aUlOptLeft=$aUlOptions ? $aUlOptions : ['class'=>'navbar-nav']; + $aUlOptRight=$aUlOptionsRight ? $aUlOptionsRight : ['class'=>'navbar-nav ml-auto']; + return $this->addWrapper('ul', $aUlOptLeft, $this->getNavItems($aNavItems)) + .(count($aNavItemsRight) + ? $this->addWrapper('ul', $aUlOptRight, $this->getNavItems($aNavItemsRight)) + : '' + ) + ; } // ---------------------------------------------------------------------- @@ -1085,7 +1075,7 @@ class renderadminlte { // print_r($aOptions); - $sVariantPrefix=$aVariants[$aOptions['variant']] ? $aVariants[$aOptions['variant']] : $aVariants['default']; + $sVariantPrefix=isset($aVariants[$aOptions['variant']]) ? $aVariants[$aOptions['variant']] : $aVariants['default']; $sClass='card' . $this->_addClassValue($aOptions['type'], $sVariantPrefix) .($aOptions['shadow'] && isset($this->_aValueMappings['shadow'][$aOptions['shadow']]) @@ -1106,10 +1096,13 @@ class renderadminlte { $aOptions['tools'].=($aOptions[$sTool] ? $sHtml : ''); } // build parts of the card - $sCardHeader=$this->addWrapper('div', ['class'=>'card-header'], + $sCardHeader=$aOptions['title'] + ? $this->addWrapper('div', ['class'=>'card-header'], $this->_tag('h3', ['class'=>'card-title', 'label'=>$aOptions['title']]) . ($aOptions['tools'] ? $this->_tag('div', ['class'=>'card-tools', 'label'=>$aOptions['tools']]) : '') - ); + ) + : '' + ; $sCardBody=$this->_tag('div', ['class'=>'card-body', 'label'=>$aOptions['text']]); $sCardFooter=$aOptions['footer'] ? $this->_tag('div', ['class'=>'card-footer', 'label'=>$aOptions['footer']]) : ''; @@ -1372,7 +1365,6 @@ class renderadminlte { if( ! isset($aOptions['tabs']) || ! is_array($aOptions['tabs']) ){ return false; } - static $iTabCounter; if (!isset($iTabCounter)){ $iTabCounter=1; } else {