diff --git a/css/backoffice/components/_all.scss b/css/backoffice/components/_all.scss index 830fc109b..2c9b5438d 100644 --- a/css/backoffice/components/_all.scss +++ b/css/backoffice/components/_all.scss @@ -20,4 +20,5 @@ @import "input"; @import "fieldset"; @import "field"; -@import "toolbar"; \ No newline at end of file +@import "toolbar"; +@import "richtext"; \ No newline at end of file diff --git a/css/backoffice/layout/_all.scss b/css/backoffice/layout/_all.scss index efdaa4aff..a55e2b8b1 100644 --- a/css/backoffice/layout/_all.scss +++ b/css/backoffice/layout/_all.scss @@ -26,3 +26,4 @@ @import "activity-panel/caselog-entry"; @import "activity-panel/edits-entry"; @import "activity-panel/transition-entry"; +@import "activity-panel/activitynewentryform"; \ No newline at end of file diff --git a/css/backoffice/layout/activity-panel/_activity-entry.scss b/css/backoffice/layout/activity-panel/_activity-entry.scss index f267a8e5b..47be6da37 100644 --- a/css/backoffice/layout/activity-panel/_activity-entry.scss +++ b/css/backoffice/layout/activity-panel/_activity-entry.scss @@ -211,4 +211,26 @@ $ibo-activity-entry--sub-information--text-color: $ibo-color-grey-700 !default; color: $ibo-activity-entry--sub-information--text-color; @extend %ibo-font-ral-nor-50; +} + +.ibo-activity-panel--body--add-caselog-entry--toggler{ + @extend %ibo-baseline-centered-content; + border-radius: $ibo-border-radius-full; + width: 36px; + height: 36px; + background-color: $ibo-color-primary-600; + color: $ibo-color-white-100; + position: absolute; + right: 12px; + box-shadow: $ibo-elevation-100; + > i{ + height: 100%; + width: 100%; + text-align: center; + font-size: 16px; + line-height: 33px; + } + &:hover { + color: $ibo-color-white-100; + } } \ No newline at end of file diff --git a/css/backoffice/layout/activity-panel/_activity-panel.scss b/css/backoffice/layout/activity-panel/_activity-panel.scss index 70bdb745e..0934c2859 100644 --- a/css/backoffice/layout/activity-panel/_activity-panel.scss +++ b/css/backoffice/layout/activity-panel/_activity-panel.scss @@ -106,6 +106,7 @@ $ibo-activity-panel--body--placeholder-hint--color: $ibo-color-grey-800 !default } .ibo-activity-panel--tab-toolbar{ display: flex; + flex-wrap: wrap; } } } diff --git a/css/backoffice/layout/activity-panel/_activitynewentryform.scss b/css/backoffice/layout/activity-panel/_activitynewentryform.scss new file mode 100644 index 000000000..babb26c70 --- /dev/null +++ b/css/backoffice/layout/activity-panel/_activitynewentryform.scss @@ -0,0 +1,14 @@ +/*! + * copyright Copyright (C) 2010-2020 Combodo SARL + * license http://opensource.org/licenses/AGPL-3.0 + */ +.ibo-activity-new-entry-form{ + width: 100%; + background-color: $ibo-color-grey-200; + padding: 32px 14px 14px 32px; +} +.ibo-activity-new-entry-form--actions{ + margin-top: 5px; + display: flex; + justify-content: space-between; +} \ No newline at end of file diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php index 28f435050..43b16c3f6 100644 --- a/lib/composer/autoload_classmap.php +++ b/lib/composer/autoload_classmap.php @@ -165,8 +165,9 @@ return array( 'Combodo\\iTop\\Application\\UI\\Component\\Input\\Input' => $baseDir . '/sources/application/UI/Component/Input/Input.php', 'Combodo\\iTop\\Application\\UI\\Component\\Input\\InputFactory' => $baseDir . '/sources/application/UI/Component/Input/InputFactory.php', 'Combodo\\iTop\\Application\\UI\\Component\\Input\\InputWithLabel' => $baseDir . '/sources/application/UI/Component/Input/InputWithLabel.php', - 'Combodo\\iTop\\Application\\UI\\Component\\Input\\Select' => $baseDir . '/sources/application/UI/Component/Input/Select.php', - 'Combodo\\iTop\\Application\\UI\\Component\\Input\\SelectOption' => $baseDir . '/sources/application/UI/Component/Input/SelectOption.php', + 'Combodo\\iTop\\Application\\UI\\Component\\Input\\RichText\\RichText' => $baseDir . '/sources/application/UI/Component/Input/RichText/RichText.php', + 'Combodo\\iTop\\Application\\UI\\Component\\Input\\Select\\Select' => $baseDir . '/sources/application/UI/Component/Input/Select/Select.php', + 'Combodo\\iTop\\Application\\UI\\Component\\Input\\Select\\SelectOption' => $baseDir . '/sources/application/UI/Component/Input/Select/SelectOption.php', 'Combodo\\iTop\\Application\\UI\\Component\\Panel\\Panel' => $baseDir . '/sources/application/UI/Component/Panel/Panel.php', 'Combodo\\iTop\\Application\\UI\\Component\\Panel\\PanelFactory' => $baseDir . '/sources/application/UI/Component/Panel/PanelFactory.php', 'Combodo\\iTop\\Application\\UI\\Component\\PopoverMenu\\NewsroomMenu\\NewsroomMenu' => $baseDir . '/sources/application/UI/Component/PopoverMenu/NewsroomMenu/NewsroomMenu.php', @@ -197,6 +198,8 @@ return array( 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityEntry\\CaseLogEntry' => $baseDir . '/sources/application/UI/Layout/ActivityPanel/ActivityEntry/CaseLogEntry.php', 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityEntry\\EditsEntry' => $baseDir . '/sources/application/UI/Layout/ActivityPanel/ActivityEntry/EditsEntry.php', 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityEntry\\TransitionEntry' => $baseDir . '/sources/application/UI/Layout/ActivityPanel/ActivityEntry/TransitionEntry.php', + 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityNewEntryFormFactory\\ActivityNewEntryFormFactory' => $baseDir . '/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryFormFactory.php', + 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityNewEntryForm\\ActivityNewEntryForm' => $baseDir . '/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryForm.php', 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityPanel' => $baseDir . '/sources/application/UI/Layout/ActivityPanel/ActivityPanel.php', 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityPanelFactory' => $baseDir . '/sources/application/UI/Layout/ActivityPanel/ActivityPanelFactory.php', 'Combodo\\iTop\\Application\\UI\\Layout\\MultiColumn\\Column\\Column' => $baseDir . '/sources/application/UI/Layout/MultiColumn/Column/Column.php', diff --git a/lib/composer/autoload_real.php b/lib/composer/autoload_real.php index e8c595bf1..ac16a9508 100644 --- a/lib/composer/autoload_real.php +++ b/lib/composer/autoload_real.php @@ -13,6 +13,9 @@ class ComposerAutoloaderInit0018331147de7601e7552f7da8e3bb8b } } + /** + * @return \Composer\Autoload\ClassLoader + */ public static function getLoader() { if (null !== self::$loader) { diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php index fbad5620a..f367329fe 100644 --- a/lib/composer/autoload_static.php +++ b/lib/composer/autoload_static.php @@ -395,8 +395,9 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b 'Combodo\\iTop\\Application\\UI\\Component\\Input\\Input' => __DIR__ . '/../..' . '/sources/application/UI/Component/Input/Input.php', 'Combodo\\iTop\\Application\\UI\\Component\\Input\\InputFactory' => __DIR__ . '/../..' . '/sources/application/UI/Component/Input/InputFactory.php', 'Combodo\\iTop\\Application\\UI\\Component\\Input\\InputWithLabel' => __DIR__ . '/../..' . '/sources/application/UI/Component/Input/InputWithLabel.php', - 'Combodo\\iTop\\Application\\UI\\Component\\Input\\Select' => __DIR__ . '/../..' . '/sources/application/UI/Component/Input/Select.php', - 'Combodo\\iTop\\Application\\UI\\Component\\Input\\SelectOption' => __DIR__ . '/../..' . '/sources/application/UI/Component/Input/SelectOption.php', + 'Combodo\\iTop\\Application\\UI\\Component\\Input\\RichText\\RichText' => __DIR__ . '/../..' . '/sources/application/UI/Component/Input/RichText/RichText.php', + 'Combodo\\iTop\\Application\\UI\\Component\\Input\\Select\\Select' => __DIR__ . '/../..' . '/sources/application/UI/Component/Input/Select/Select.php', + 'Combodo\\iTop\\Application\\UI\\Component\\Input\\Select\\SelectOption' => __DIR__ . '/../..' . '/sources/application/UI/Component/Input/Select/SelectOption.php', 'Combodo\\iTop\\Application\\UI\\Component\\Panel\\Panel' => __DIR__ . '/../..' . '/sources/application/UI/Component/Panel/Panel.php', 'Combodo\\iTop\\Application\\UI\\Component\\Panel\\PanelFactory' => __DIR__ . '/../..' . '/sources/application/UI/Component/Panel/PanelFactory.php', 'Combodo\\iTop\\Application\\UI\\Component\\PopoverMenu\\NewsroomMenu\\NewsroomMenu' => __DIR__ . '/../..' . '/sources/application/UI/Component/PopoverMenu/NewsroomMenu/NewsroomMenu.php', @@ -427,6 +428,8 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityEntry\\CaseLogEntry' => __DIR__ . '/../..' . '/sources/application/UI/Layout/ActivityPanel/ActivityEntry/CaseLogEntry.php', 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityEntry\\EditsEntry' => __DIR__ . '/../..' . '/sources/application/UI/Layout/ActivityPanel/ActivityEntry/EditsEntry.php', 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityEntry\\TransitionEntry' => __DIR__ . '/../..' . '/sources/application/UI/Layout/ActivityPanel/ActivityEntry/TransitionEntry.php', + 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityNewEntryFormFactory\\ActivityNewEntryFormFactory' => __DIR__ . '/../..' . '/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryFormFactory.php', + 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityNewEntryForm\\ActivityNewEntryForm' => __DIR__ . '/../..' . '/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryForm.php', 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityPanel' => __DIR__ . '/../..' . '/sources/application/UI/Layout/ActivityPanel/ActivityPanel.php', 'Combodo\\iTop\\Application\\UI\\Layout\\ActivityPanel\\ActivityPanelFactory' => __DIR__ . '/../..' . '/sources/application/UI/Layout/ActivityPanel/ActivityPanelFactory.php', 'Combodo\\iTop\\Application\\UI\\Layout\\MultiColumn\\Column\\Column' => __DIR__ . '/../..' . '/sources/application/UI/Layout/MultiColumn/Column/Column.php', diff --git a/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryForm.php b/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryForm.php new file mode 100644 index 000000000..06769f7ed --- /dev/null +++ b/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryForm.php @@ -0,0 +1,127 @@ +aFormActionButtons = []; + $this->aTextInputActionButtons = []; + } + + + /** + * @return \Combodo\iTop\Application\UI\Component\Input\RichText\RichText + */ + public function GetFormTextInput(): \Combodo\iTop\Application\UI\Component\Input\RichText\RichText + { + return $this->oFormTextInput; + } + + /** + * @param \Combodo\iTop\Application\UI\Component\Input\RichText\RichText $oFormTextInput + * @return $this + */ + public function SetFormTextInput(\Combodo\iTop\Application\UI\Component\Input\RichText\RichText $oFormTextInput): ActivityNewEntryForm + { + $this->oFormTextInput = $oFormTextInput; + return $this; + } + + /** + * @return array + */ + public function GetTextInputActionButtons(): array + { + return $this->aTextInputActionButtons; + } + + /** + * @param array $aTextInputActionButtons + * @return $this + */ + public function SetTextInputActionButtons(array $aTextInputActionButtons): ActivityNewEntryForm + { + $this->aTextInputActionButtons = $aTextInputActionButtons; + return $this; + } + + /** + * @param \Combodo\iTop\Application\UI\UIBlock $oTextInputActionButtons + */ + public function AddTextInputActionButtons(UIBlock $oTextInputActionButtons): void + { + $this->aTextInputActionButtons[] = $oTextInputActionButtons; + } + + /** + * @return mixed + */ + public function GetFormActionButtons() + { + return $this->aFormActionButtons; + } + + /** + * @param array $aFormActionButtons + * @return $this + */ + public function SetFormActionButtons(array $aFormActionButtons): ActivityNewEntryForm + { + $this->aFormActionButtons = $aFormActionButtons; + return $this; + } + + /** + * @param UIBlock $oFormActionButtons + */ + public function AddFormActionButtons(UIBlock $oFormActionButtons): void + { + $this->aFormActionButtons[] = $oFormActionButtons; + } + + + public function GetSubBlocks() : array + { + $aSubBlocks = []; + $aSubBlocks[$this->GetFormTextInput()->GetId()] = $this->GetFormTextInput(); + foreach ($this->GetTextInputActionButtons() as $oTextInputActionButton) + { + $aSubBlocks[$oTextInputActionButton->GetId()] = $oTextInputActionButton; + } + foreach ($this->GetFormActionButtons() as $oFormActionButton) + { + $aSubBlocks[$oFormActionButton->GetId()] = $oFormActionButton; + } + return $aSubBlocks; + } + +} \ No newline at end of file diff --git a/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryFormFactory.php b/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryFormFactory.php new file mode 100644 index 000000000..fdec37a51 --- /dev/null +++ b/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryFormFactory.php @@ -0,0 +1,35 @@ + + * @package Combodo\iTop\Application\UI\Layout\ActivityPanel\ActivityNewEntryFormFactory + * @since 2.8.0 + */ +class ActivityNewEntryFormFactory +{ + public static function MakeForObjectDetailsActivityPanel(): ActivityNewEntryForm + { + $oActivityNewEntryForm = new ActivityNewEntryForm(); + $oActivityNewEntryForm->SetFormTextInput(new RichText()); + $oActivityNewEntryForm->AddFormActionButtons(ButtonFactory::MakeForSecondaryAction('Cancel')); + $oActivityNewEntryForm->AddFormActionButtons(ButtonFactory::MakeForValidationAction('Send')); + $oActivityNewEntryForm->AddFormActionButtons(ButtonFactory::MakeForValidationAction('Send....')); + $oActivityNewEntryForm->AddTextInputActionButtons(ButtonFactory::MakeForSecondaryAction('Templates')->SetColor('blue')); + return $oActivityNewEntryForm; + } +} \ No newline at end of file diff --git a/sources/application/UI/Layout/ActivityPanel/ActivityPanel.php b/sources/application/UI/Layout/ActivityPanel/ActivityPanel.php index 40535e44a..d29d660fe 100644 --- a/sources/application/UI/Layout/ActivityPanel/ActivityPanel.php +++ b/sources/application/UI/Layout/ActivityPanel/ActivityPanel.php @@ -21,8 +21,11 @@ namespace Combodo\iTop\Application\UI\Layout\ActivityPanel; use AttributeDateTime; +use Combodo\iTop\Application\UI\Component\Button\ButtonFactory; +use Combodo\iTop\Application\UI\Component\Input\RichText\RichText; use Combodo\iTop\Application\UI\Layout\ActivityPanel\ActivityEntry\ActivityEntry; use Combodo\iTop\Application\UI\Layout\ActivityPanel\ActivityEntry\CaseLogEntry; +use Combodo\iTop\Application\UI\Layout\ActivityPanel\ActivityNewEntryForm\ActivityNewEntryForm; use Combodo\iTop\Application\UI\UIBlock; use DBObject; use MetaModel; @@ -55,6 +58,8 @@ class ActivityPanel extends UIBlock protected $bAreEntriesSorted; /** @var bool $bHasLifecycle True if the host object has a lifecycle */ protected $bHasLifecycle; + /** @var \Combodo\iTop\Application\UI\Layout\ActivityPanel\ActivityNewEntryForm\ActivityNewEntryForm $NewEntryForm */ + protected $oNewEntryForm; /** * ActivityPanel constructor. @@ -417,4 +422,31 @@ class ActivityPanel extends UIBlock $oDateTimeFormat = AttributeDateTime::GetFormat(); return $oDateTimeFormat->ToMomentJS(); } + + public function GetNewEntryForm() + { + return $this->oNewEntryForm; + } + + public function SetNewEntryForm($oNewEntryForm) + { + $this->oNewEntryForm = $oNewEntryForm; + return $this; + } + + public function HasNewEntryForm() + { + return $this->oNewEntryForm !== null; + } + + public function GetSubBlocks() + { + $aSubBlocks = array(); + if ($this->HasNewEntryForm()) + { + $oNewEntryForm = $this->GetNewEntryForm(); + $aSubBlocks[$oNewEntryForm->GetId()] = $oNewEntryForm; + } + return $aSubBlocks; + } } \ No newline at end of file diff --git a/sources/application/UI/Layout/ActivityPanel/ActivityPanelFactory.php b/sources/application/UI/Layout/ActivityPanel/ActivityPanelFactory.php index e59703efa..81a7ee5ee 100644 --- a/sources/application/UI/Layout/ActivityPanel/ActivityPanelFactory.php +++ b/sources/application/UI/Layout/ActivityPanel/ActivityPanelFactory.php @@ -21,8 +21,12 @@ namespace Combodo\iTop\Application\UI\Layout\ActivityPanel; use CMDBChangeOpSetAttributeCaseLog; +use Combodo\iTop\Application\UI\Component\Button\ButtonFactory; +use Combodo\iTop\Application\UI\Component\Input\RichText\RichText; use Combodo\iTop\Application\UI\Layout\ActivityPanel\ActivityEntry\ActivityEntryFactory; use Combodo\iTop\Application\UI\Layout\ActivityPanel\ActivityEntry\EditsEntry; +use Combodo\iTop\Application\UI\Layout\ActivityPanel\ActivityNewEntryForm\ActivityNewEntryForm; +use Combodo\iTop\Application\UI\Layout\ActivityPanel\ActivityNewEntryFormFactory\ActivityNewEntryFormFactory; use DBObject; use DBObjectSearch; use DBObjectSet; @@ -67,6 +71,10 @@ class ActivityPanelFactory } } + if($oActivityPanel->HasCaseLogTabs()) + { + $oActivityPanel->SetNewEntryForm(ActivityNewEntryFormFactory::MakeForObjectDetailsActivityPanel()); + } // Retrieve history changes (including case logs entries) // - Prepare query to retrieve changes $oChangesSearch = DBObjectSearch::FromOQL('SELECT CMDBChangeOp WHERE objclass = :obj_class AND objkey = :obj_key'); diff --git a/templates/layouts/activity-panel/activitynewentryform/layout.html.twig b/templates/layouts/activity-panel/activitynewentryform/layout.html.twig new file mode 100644 index 000000000..d5781c424 --- /dev/null +++ b/templates/layouts/activity-panel/activitynewentryform/layout.html.twig @@ -0,0 +1,17 @@ +
+
+ {{ render_block(oUIBlock.GetFormTextInput(), {aPage: aPage}) }} +
+
+
+ {% for TextInputActionButton in oUIBlock.GetTextInputActionButtons() %} + {{ render_block(TextInputActionButton, {aPage: aPage}) }} + {% endfor %} +
+
+ {% for FormActionButton in oUIBlock.GetFormActionButtons() %} + {{ render_block(FormActionButton, {aPage: aPage}) }} + {% endfor %} +
+
+
\ No newline at end of file diff --git a/templates/layouts/activity-panel/activitynewentryform/layout.js.twig b/templates/layouts/activity-panel/activitynewentryform/layout.js.twig new file mode 100644 index 000000000..e69de29bb diff --git a/templates/layouts/activity-panel/layout.html.twig b/templates/layouts/activity-panel/layout.html.twig index 95b9dcf08..fbae37d64 100644 --- a/templates/layouts/activity-panel/layout.html.twig +++ b/templates/layouts/activity-panel/layout.html.twig @@ -71,6 +71,10 @@ + {% if oUIBlock.HasNewEntryForm() %} + {{ render_block(oUIBlock.GetNewEntryForm()) }} + + {% endif %}
{% if oUIBlock.GetGroupedEntries()|length > 0 %} {% for aEntryGroup in oUIBlock.GetGroupedEntries() %}