diff --git a/css/backoffice/layout/activity-panel/_activity-panel.scss b/css/backoffice/layout/activity-panel/_activity-panel.scss index 3352c0b47..5489881b8 100644 --- a/css/backoffice/layout/activity-panel/_activity-panel.scss +++ b/css/backoffice/layout/activity-panel/_activity-panel.scss @@ -50,19 +50,18 @@ $ibo-activity-panel--tab-title-decoration--border-radius: $ibo-border-radius-300 $ibo-activity-panel--tab-title-text--max-width: 100px !default; /* - Tab toolbar */ -$ibo-activity-panel--tab-toolbar--padding-x: $ibo-activity-panel--padding-x !default; +$ibo-activity-panel--tab-toolbar--padding-x: 10px !default; $ibo-activity-panel--tab-toolbar--text-color: $ibo-color-grey-800 !default; $ibo-activity-panel--tab-toolbar--background-color: $ibo-activity-panel--tab-toggler--is-active--background-color !default; $ibo-activity-panel--tab-toolbar-actions--height: 32px !default; +$ibo-activity-panel--tab-toolbar-right-actions--elements-spacing: 16px !default; -$ibo-activity-panel--tab-toolbar-for-caselog--elements-spacing: 16px !default; -$ibo-activity-panel--tab-toolbar-for-caselog--icon-margin-left: 8px !default; -$ibo-activity-panel--tab-toolbar-for-caselog--icons-separator-content: "-" !default; -$ibo-activity-panel--tab-toolbar-for-caselog--icons-separator-margin-x: 8px !default; - -$ibo-activity-panel--tab-toolbar-for-activity--elements-spacing: 36px !default; -$ibo-activity-panel--tab-toolbar-for-activity--checkbox-margin-right: 8px !default; +$ibo-activity-panel--tab-toolbar-action--elements-separator-content: "-" !default; +$ibo-activity-panel--tab-toolbar-action--elements-separator-margin-x: 8px !default; +$ibo-activity-panel--tab-toolbar-filter--sibling-spacing: 18px !default; +$ibo-activity-panel--tab-toolbar-filter--checkbox-margin-right: 8px !default; +$ibo-activity-panel--tab-toolbar-info-icon--margin-left: 8px !default; /* - Body */ $ibo-activity-panel--body--padding-top: $ibo-activity-panel--padding-x !default; @@ -175,6 +174,7 @@ $ibo-activity-panel--body--placeholder-hint--color: $ibo-color-grey-800 !default } .ibo-activity-panel--tab-toolbar-actions{ @extend %ibo-fully-centered-content; + justify-content: space-between; flex-wrap: wrap; height: $ibo-activity-panel--tab-toolbar-actions--height; } @@ -183,47 +183,41 @@ $ibo-activity-panel--body--placeholder-hint--color: $ibo-color-grey-800 !default .ibo-activity-panel--tab-toolbar-right-actions{ @extend %ibo-vertically-centered-content; } +.ibo-activity-panel--tab-toolbar-left-actions{ + .ibo-activity-panel--tab-toolbar-action{ + &:not(:first-child){ + &::before{ + content: $ibo-activity-panel--tab-toolbar-action--elements-separator-content; + margin: 0 $ibo-activity-panel--tab-toolbar-action--elements-separator-margin-x; + } + } + } +} +.ibo-activity-panel--tab-toolbar-middle-actions { + .ibo-activity-panel--tab-toolbar-action{ + > input{ + margin-right: $ibo-activity-panel--tab-toolbar-filter--checkbox-margin-right; + } + + &:not(:first-child){ + margin-left: $ibo-activity-panel--tab-toolbar-filter--sibling-spacing; + } + } +} +.ibo-activity-panel--tab-toolbar-right-actions { + .ibo-activity-panel--tab-toolbar-info { + > .ibo-activity-panel--tab-toolbar-info-icon { + margin-left: $ibo-activity-panel--tab-toolbar-info-icon--margin-left; + } + + &:not(:first-child) { + margin-left: $ibo-activity-panel--tab-toolbar-right-actions--elements-spacing; + } + } +} .ibo-activity-panel--tab-toolbar-action{ @extend %ibo-fully-centered-content; } -.ibo-activity-panel--tab-toolbar-for-caselog{ - .ibo-activity-panel--tab-toolbar-actions{ - justify-content: space-between; - - .ibo-activity-panel--tab-toolbar-action{ - &:not(:first-child){ - &::before{ - content: $ibo-activity-panel--tab-toolbar-for-caselog--icons-separator-content; - margin: 0 $ibo-activity-panel--tab-toolbar-for-caselog--icons-separator-margin-x; - } - } - } - .ibo-activity-panel--tab-toolbar-info{ - > .ibo-activity-panel--tab-toolbar-info-icon{ - margin-left: $ibo-activity-panel--tab-toolbar-for-caselog--icon-margin-left; - } - - &:not(:first-child){ - margin-left: $ibo-activity-panel--tab-toolbar-for-caselog--elements-spacing; - } - } - } -} -.ibo-activity-panel--tab-toolbar-for-activity{ - .ibo-activity-panel--tab-toolbar-actions{ - justify-content: center; - - .ibo-activity-panel--tab-toolbar-action{ - > input{ - margin-right: $ibo-activity-panel--tab-toolbar-for-activity--checkbox-margin-right; - } - - &:not(:first-child){ - margin-left: $ibo-activity-panel--tab-toolbar-for-activity--elements-spacing; - } - } - } -} /* Body */ .ibo-activity-panel--body{ diff --git a/sources/application/UI/Base/Layout/ActivityPanel/ActivityPanel.php b/sources/application/UI/Base/Layout/ActivityPanel/ActivityPanel.php index a2aca278b..a4cb55de9 100644 --- a/sources/application/UI/Base/Layout/ActivityPanel/ActivityPanel.php +++ b/sources/application/UI/Base/Layout/ActivityPanel/ActivityPanel.php @@ -61,8 +61,11 @@ class ActivityPanel extends UIBlock protected $aEntries; /** @var bool $bAreEntriesSorted True if the entries have been sorted by date */ protected $bAreEntriesSorted; - /** @var bool $bHasLifecycle True if the host object has a lifecycle */ - protected $bHasLifecycle; + /** + * @var bool True if the host object has states (but not necessary a lifecycle) + * @see MetaModel::HasStateAttributeCode() + */ + protected $bHasStates; /** @var \Combodo\iTop\Application\UI\Base\Layout\ActivityPanel\CaseLogEntryForm\CaseLogEntryForm[] $aCaseLogTabsEntryForms */ protected $aCaseLogTabsEntryForms; @@ -103,7 +106,7 @@ class ActivityPanel extends UIBlock $sObjectClass = get_class($this->oObject); // Check if object has a lifecycle - $this->bHasLifecycle = !empty(MetaModel::GetStateAttributeCode($sObjectClass)); + $this->bHasStates = MetaModel::HasStateAttributeCode($sObjectClass); // Initialize the case log tabs $this->InitializeCaseLogTabs(); @@ -469,6 +472,23 @@ class ActivityPanel extends UIBlock return !empty($this->aCaseLogs); } + /** + * @return bool true if there is at least 1 editable case log + */ + public function HasAnEditableCaseLogTab(): bool + { + $bHasEditable = false; + + foreach ($this->GetCaseLogTabs() as $aCaseLogTabData) { + if (false === $aCaseLogTabData['is_read_only']) { + $bHasEditable = true; + break; + } + } + + return $bHasEditable; + } + /** * Empty the caselogs entry forms * @@ -556,13 +576,12 @@ class ActivityPanel extends UIBlock } /** - * Return true if the host object has a lifecycle - * + * @uses $bHasStates * @return bool */ - public function HasLifecycle() + public function HasStates(): bool { - return $this->bHasLifecycle; + return $this->bHasStates; } /** diff --git a/templates/base/layouts/activity-panel/layout.html.twig b/templates/base/layouts/activity-panel/layout.html.twig index 85c3ba7c5..00007ced2 100644 --- a/templates/base/layouts/activity-panel/layout.html.twig +++ b/templates/base/layouts/activity-panel/layout.html.twig @@ -37,62 +37,12 @@
- {% if oUIBlock.IsCaseLogsSubmitAutonomous() %} + {% if oUIBlock.HasAnEditableCaseLogTab() and oUIBlock.IsCaseLogsSubmitAutonomous() %} {% endif %}