diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index 47ee166f3..edd197586 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -376,24 +376,24 @@ EOF $sTaskUrl = $aMasterSources[$oCreatorTask->GetKey()]['url']; if (!$bCanBeDeletedByUser) { - $sTip = "

".Dict::Format('Core:Synchro:TheObjectCannotBeDeletedByUser_Source', - $sTaskUrl)."

"; + $sTip = "
".Dict::Format('Core:Synchro:TheObjectCannotBeDeletedByUser_Source', + $sTaskUrl)."
"; } else { - $sTip = "

".Dict::Format('Core:Synchro:TheObjectWasCreatedBy_Source', $sTaskUrl)."

"; + $sTip = "
".Dict::Format('Core:Synchro:TheObjectWasCreatedBy_Source', $sTaskUrl)."
"; } if ($bCanBeDeletedByTask) { - $sTip .= "

".Dict::Format('Core:Synchro:TheObjectCanBeDeletedBy_Source', $sTaskUrl)."

"; + $sTip .= "
".Dict::Format('Core:Synchro:TheObjectCanBeDeletedBy_Source', $sTaskUrl)."
"; } } else { - $sTip = "

".Dict::S('Core:Synchro:ThisObjectIsSynchronized')."

"; + $sTip = "
".Dict::S('Core:Synchro:ThisObjectIsSynchronized')."
"; } - $sTip .= "

".Dict::S('Core:Synchro:ListOfDataSources')."

"; + $sTip .= "
".Dict::S('Core:Synchro:ListOfDataSources')."
"; foreach($aMasterSources as $aStruct) { // Formatting last synchro date @@ -403,34 +403,27 @@ EOF $oDataSource = $aStruct['datasource']; $sLink = $aStruct['url']; - $sTip .= "

".$oDataSource->GetIcon(true, - 'style="vertical-align:middle"')." $sLink
"; - $sTip .= Dict::S('Core:Synchro:LastSynchro').'
'.$sLastSynchro."

"; + $sTip .= "
".$oDataSource->GetIcon(true, '')."$sLink
"; + $sTip .= Dict::S('Core:Synchro:LastSynchro').'
'.$sLastSynchro."
"; } - $sTip = utils::HtmlEntities($sTip); - $sLabel = htmlentities(Dict::S('Tag:Synchronized'), ENT_QUOTES, 'UTF-8'); + $sLabel = Dict::S('Tag:Synchronized'); $sSynchroTagId = 'synchro_icon-'.$this->GetKey(); - $aIcons[] = '
'.$sLabel.'
'; + $aIcons[$sSynchroTagId] = ['title' => $sTip, 'cssClasses' => 'ibo-title--object-tags--synchronized', 'iconCssClasses' => 'fas fa-lock', 'label' => $sLabel]; } } + $sLabel = Dict::S('Tag:Archived'); + $sTitle = Dict::S('Tag:Archived+'); + $aIcons['archive'] = ['title' => $sTitle, 'cssClasses' => 'ibo-title--object-tags--archived', 'iconCssClasses' => 'fas fa-archive', 'label' => $sLabel]; if ($this->IsArchived()) { - $sLabel = htmlentities(Dict::S('Tag:Archived'), ENT_QUOTES, 'UTF-8'); - $sTitle = htmlentities(Dict::S('Tag:Archived+'), ENT_QUOTES, 'UTF-8'); - $aIcons[] = "
  $sLabel
"; } elseif ($this->IsObsolete()) { - $sLabel = htmlentities(Dict::S('Tag:Obsolete'), ENT_QUOTES, 'UTF-8'); - $sTitle = htmlentities(Dict::S('Tag:Obsolete+'), ENT_QUOTES, 'UTF-8'); - $aIcons[] = "
  $sLabel
"; + } + $sLabel = Dict::S('Tag:Obsolete'); + $sTitle = Dict::S('Tag:Obsolete+'); + $aIcons['obsolete'] = ['title' => $sTitle, 'cssClasses' => 'ibo-title--object-tags--obsolete', 'iconCssClasses' => 'ibo- fas fa-eye-slash', 'label' => $sLabel]; -// if (count($aIcons) > 0) { -// $sTags = '
'.implode(' ', $aIcons).'
'; -// } else { -// $sTags = ''; -// } - - $oPage->AddUiBlock(TitleUIBlockFactory::MakeForObjectDetails($this)); + $oPage->AddUiBlock(TitleUIBlockFactory::MakeForObjectDetails($this, $aIcons)); } /** diff --git a/css/backoffice/components/_title.scss b/css/backoffice/components/_title.scss index 658d6ce55..ac1b83c5b 100644 --- a/css/backoffice/components/_title.scss +++ b/css/backoffice/components/_title.scss @@ -19,6 +19,17 @@ $ibo-title--status-dot--size: 10px !default; $ibo-title--status-dot--spacing: 8px !default; $ibo-title--status-dot--border-radius: $ibo-border-radius-full !default; +$ibo-title--object-tags--margin-left: 12px !default; +$ibo-title--object-tags--color: $ibo-color-grey-900 !default; + +$ibo-title--object-tags--icon--margin-right: 6px !default; +$ibo-title--object-tags--icon--color: $ibo-color-grey-700 !default; + +$ibo-title--object-tags--separator-dot--background-color: $ibo-color-grey-800 !default; +$ibo-title--object-tags--separator-dot--diameter: 5px !default; +$ibo-title--object-tags--separator-dot--margin-right: 12px !default; +$ibo-title--object-tags--separator-dot--border-radius: $ibo-border-radius-full !default; + .ibo-title { @extend %ibo-baseline-centered-content; @@ -58,6 +69,7 @@ $ibo-title--status-dot--border-radius: $ibo-border-radius-full !default; margin-bottom: 2px; @extend %ibo-baseline-centered-content; @extend %ibo-font-ral-nor-150; + flex-wrap: wrap; } .ibo-title--status { @@ -121,4 +133,23 @@ $ibo-title--status-dot--border-radius: $ibo-border-radius-full !default; border: 3px solid ; margin:0; padding:0; +} + +.ibo-title--object-tags { + margin-left: $ibo-title--object-tags--margin-left; + color: $ibo-title--object-tags--color; +} +.ibo-title--object-tags > i { + margin-right: $ibo-title--object-tags--icon--margin-right; + color: $ibo-title--object-tags--icon--color; +} +.ibo-title--object-tags ~ .ibo-title--object-tags::before, .ibo-title--object-class ~ .ibo-title--object-tags::before{ + content: " "; + display: inline-block; + vertical-align: middle; + margin-right: $ibo-title--object-tags--separator-dot--margin-right; + width: $ibo-title--object-tags--separator-dot--diameter; + height: $ibo-title--object-tags--separator-dot--diameter; + border-radius: $ibo-title--object-tags--separator-dot--border-radius; + background-color: $ibo-title--object-tags--separator-dot--background-color; } \ No newline at end of file diff --git a/sources/application/UI/Base/Component/Title/TitleForObjectDetails.php b/sources/application/UI/Base/Component/Title/TitleForObjectDetails.php index e36b7fb78..5d25001d5 100644 --- a/sources/application/UI/Base/Component/Title/TitleForObjectDetails.php +++ b/sources/application/UI/Base/Component/Title/TitleForObjectDetails.php @@ -19,6 +19,7 @@ class TitleForObjectDetails extends Title protected $sStatusCode; protected $sStatusLabel; protected $sStatusColor; + protected $aTags; public function __construct(string $sClassName, string $sObjectName, ?string $sId = null) { @@ -28,6 +29,7 @@ class TitleForObjectDetails extends Title $this->sStatusCode = null; $this->sStatusLabel = null; $this->sStatusColor = null; + $this->aTags = []; } /** @@ -69,4 +71,26 @@ class TitleForObjectDetails extends Title { return $this->sStatusColor; } + + /** + * @return array + */ + public function GetTags(): array + { + return $this->aTags; + } + + /** + * @param array $aTags + * + * @return $this + */ + public function SetTags(array $aTags) + { + $this->aTags = $aTags; + return $this; + } + + + } \ No newline at end of file diff --git a/sources/application/UI/Base/Component/Title/TitleUIBlockFactory.php b/sources/application/UI/Base/Component/Title/TitleUIBlockFactory.php index 609c4e87e..86f811fbd 100644 --- a/sources/application/UI/Base/Component/Title/TitleUIBlockFactory.php +++ b/sources/application/UI/Base/Component/Title/TitleUIBlockFactory.php @@ -34,7 +34,7 @@ class TitleUIBlockFactory extends AbstractUIBlockFactory return $oTitle; } - public static function MakeForObjectDetails(DBObject $oObject, ?string $sId = null) + public static function MakeForObjectDetails(DBObject $oObject, array $aIcons = [], ?string $sId = null) { // TODO 3.0.0: Refactor all of this $sObjClass = get_class($oObject); @@ -77,6 +77,7 @@ class TitleUIBlockFactory extends AbstractUIBlockFactory $oTitle->SetStatus($sStatusAttCode, $sStatusLabel, $sStatusColor); } } + $oTitle->SetTags($aIcons); return $oTitle; } diff --git a/templates/base/components/title/titleforobjectdetails.html.twig b/templates/base/components/title/titleforobjectdetails.html.twig index 546fb4f10..c072850a9 100644 --- a/templates/base/components/title/titleforobjectdetails.html.twig +++ b/templates/base/components/title/titleforobjectdetails.html.twig @@ -12,5 +12,8 @@ {% endif %} {{ oUIBlock.GetClassName() }} + {% for tag, tagValues in oUIBlock.GetTags() %} + {{ tagValues.label }} + {% endfor %} {% endblock %} \ No newline at end of file