diff --git a/css/backoffice/layout/activity-panel/_activitynewentryform.scss b/css/backoffice/layout/activity-panel/_activitynewentryform.scss index 4f159e231..72a213131 100644 --- a/css/backoffice/layout/activity-panel/_activitynewentryform.scss +++ b/css/backoffice/layout/activity-panel/_activitynewentryform.scss @@ -36,7 +36,7 @@ $ibo-activity-panel--body--add-caselog-entry--toggler--icon--line-height: 33px ! .ibo-activity-panel--body--add-caselog-entry--toggler{ @extend %ibo-baseline-centered-content; - float: right; + position: absolute; right: $ibo-activity-panel--body--add-caselog-entry--toggler--right; margin-top: $ibo-activity-panel--body--add-caselog-entry--toggler--margin-top; @@ -58,4 +58,7 @@ $ibo-activity-panel--body--add-caselog-entry--toggler--icon--line-height: 33px ! &:hover { color: $ibo-activity-panel--body--add-caselog-entry--toggler--color; } +} +.ibo-activity-new-entry-form--action-buttons--right-actions > .ibo-popover-menu{ + z-index: 1; } \ No newline at end of file diff --git a/js/layouts/activity-new-entry-form.js b/js/layouts/activity-new-entry-form.js index d99db5f3f..2eb0ffdf7 100644 --- a/js/layouts/activity-new-entry-form.js +++ b/js/layouts/activity-new-entry-form.js @@ -43,11 +43,12 @@ $(function() { right_actions: '[data-role="ibo-activity-new-entry-form--action-buttons--right-actions"]', caselog_picker: '[data-role="ibo-popover-menu"]', }, - + // the constructor _create: function () { let me = this; me._HideNewEntryForm(); + $(this.element).find(this.js_selectors.caselog_picker).popover_menu({toggler: this.js_selectors.right_actions}); $(this.js_selectors.toggler).on('click', function(oEvent){ me._ShowNewEntryForm(); }); @@ -67,7 +68,7 @@ $(function() { } else { - $(this).children(me.js_selectors.caselog_picker).show(); + $(this).children(me.js_selectors.caselog_picker).popover_menu('openPopup'); } }); $(this.js_selectors.right_actions).on('cancel', function(oEvent){ @@ -84,7 +85,20 @@ $(function() { }, _SubmitNewEntryToCaselog: function(sData, sCaselog) { - alert('Submited '+ sData +' to ' + sCaselog + ' caselog'); + const me = this; + let oParams = { + 'operation' : 'add_caselog_entry', + 'class' : 'UserRequest', + 'id' : '1', + 'caselog_new_entry': sData, + 'caselog_attcode' : sCaselog, + 'caselog_rank' : $(me.js_selectors.panel).activity_panel('GetCaseLogRank', sCaselog), + } + //TODO 2.8.0 Handle errors + $.post(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php', oParams, function(sNewEntry){ + $(me.js_selectors.panel).activity_panel('AddEntry', sNewEntry, 'caselog:' + sCaselog) + me._HideNewEntryForm(); + }); } }); }); \ No newline at end of file diff --git a/js/layouts/activity-panel.js b/js/layouts/activity-panel.js index 9851d9140..f79a28509 100644 --- a/js/layouts/activity-panel.js +++ b/js/layouts/activity-panel.js @@ -275,6 +275,56 @@ $(function() this.element.find(this.js_selectors.entry+'[data-entry-type="'+sEntryType+'"]').addClass(this.css_classes.is_hidden); this._UpdateEntryGroupsVisibility(); }, + _GetNewEntryGroup: function() + { + let AjaxNewEntryGroupDeferred = jQuery.Deferred(); + const me = this; + var oParams = { + 'operation' : 'new_entry_group', + 'caselog_new_entry': sData, + 'caselog_attcode' : sCaselog, + } + $.post(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php', oParams, function(data){ + AjaxNewEntryGroupDeferred.resolve(data); + }); + return AjaxNewEntryGroupDeferred.promise(); + }, + _AddEntry: function(sEntry, sOrigin) + { + let aEntryGroup = this.element.find(this.js_selectors.entry_group) + let sAuthorLogin = $(sEntry).attr('data-entry-author-login'); + if (aEntryGroup.length > 0 && $(aEntryGroup[0]).attr('data-entry-group-author-login') === sAuthorLogin && $(aEntryGroup[0]).attr('data-entry-group-origin') === sOrigin) + { + $(aEntryGroup[0]).prepend(sEntry); + this._ReformatDateTimes(); + } + else + { + // TODO 2.8.0 Create a new entry group + window.location.reload(); + } + }, + AddEntry: function(sEntry, sOrigin) + { + this._AddEntry(sEntry, sOrigin); + }, + _GetCaseLogRank: function(sCaseLog) + { + let iIdx = 0; + let oCaselogTab = this.element.find(this.js_selectors.tab + + '[data-tab-type="caselog"]' + + '[data-caselog-attribute-code="'+ sCaseLog +'"]' + ); + if(oCaselogTab.length > 0 && oCaselogTab.attr('data-caselog-rank')) + { + iIdx = parseInt(oCaselogTab.attr('data-caselog-rank')); + } + return iIdx; + }, + GetCaseLogRank: function(sCaseLog) + { + return this._GetCaseLogRank(sCaseLog); + }, _UpdateEntryGroupsVisibility: function() { const me = this; diff --git a/pages/ajax.render.php b/pages/ajax.render.php index ac1c2b934..9d3b6d29f 100644 --- a/pages/ajax.render.php +++ b/pages/ajax.render.php @@ -17,6 +17,7 @@ * You should have received a copy of the GNU Affero General Public License */ +use Combodo\iTop\Application\UI\Layout\ActivityPanel\ActivityEntry\ActivityEntryFactory; use Combodo\iTop\Controller\AjaxRenderController; use Combodo\iTop\Renderer\Console\ConsoleFormRenderer; @@ -2782,6 +2783,28 @@ EOF } $oPage->add(json_encode($aResult)); break; + case 'add_caselog_entry': + // TODO 2.8.0: Handle errors & rights + $sClass = utils::ReadPostedParam('class', '', 'class'); + $sClassLabel = MetaModel::GetName($sClass); + $id = utils::ReadPostedParam('id', ''); + // TODO 2.8.0 Handle transactions token + $sTransactionId = utils::ReadPostedParam('transaction_id', '', 'transaction_id'); + $sCaseLogAttCode = utils::ReadPostedParam('caselog_attcode', ''); + $sCaseLogNewEntry = utils::ReadPostedParam('caselog_new_entry', '', 'raw'); + $iCaseLogRank = utils::ReadPostedParam('caselog_rank', 0, 'integer'); + if($id !== 0 && MetaModel::IsValidClass($sClass)) + { + $oObj = MetaModel::GetObject($sClass, $id); + $oObj->Set($sCaseLogAttCode, $sCaseLogNewEntry); + $oObj->DBWrite(); + } + $oNewEntry = ActivityEntryFactory::MakeFromCaseLogEntryArray($sCaseLogAttCode, $oObj->Get($sCaseLogAttCode)->GetAsArray()[0]); + $oNewEntry->SetCaseLogRank($iCaseLogRank); + $oPage->AddUiBlock($oNewEntry); + break; + case 'new_entry_group': + break; default: $oPage->p("Invalid query."); diff --git a/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryForm.php b/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryForm.php index d5d98b14b..3224151d9 100644 --- a/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryForm.php +++ b/sources/application/UI/Layout/ActivityPanel/ActivityNewEntryForm/ActivityNewEntryForm.php @@ -145,6 +145,9 @@ class ActivityNewEntryForm extends UIContentBlock { $aSubBlocks[$oFormActionButton->GetId()] = $oFormActionButton; } + $oCaseLogSelectionPopOverMenu = $this->GetCaseLogSelectionPopOverMenu(); + $aSubBlocks[$oCaseLogSelectionPopOverMenu->GetId()] = $oCaseLogSelectionPopOverMenu; + return $aSubBlocks; } diff --git a/templates/layouts/activity-panel/layout.html.twig b/templates/layouts/activity-panel/layout.html.twig index d6cfec4fd..9233c3274 100644 --- a/templates/layouts/activity-panel/layout.html.twig +++ b/templates/layouts/activity-panel/layout.html.twig @@ -2,7 +2,7 @@
{% for sCaseLogAttCode, aCaseLogData in oUIBlock.GetCaseLogTabs() %} -