N°2847 Add backend for new entry form for activity panel

This commit is contained in:
Stephen Abello
2020-10-07 09:45:40 +02:00
parent f5e92359d9
commit 157e0a6915
6 changed files with 98 additions and 5 deletions

View File

@@ -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;
}

View File

@@ -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();
});
}
});
});

View File

@@ -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;

View File

@@ -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.");

View File

@@ -145,6 +145,9 @@ class ActivityNewEntryForm extends UIContentBlock
{
$aSubBlocks[$oFormActionButton->GetId()] = $oFormActionButton;
}
$oCaseLogSelectionPopOverMenu = $this->GetCaseLogSelectionPopOverMenu();
$aSubBlocks[$oCaseLogSelectionPopOverMenu->GetId()] = $oCaseLogSelectionPopOverMenu;
return $aSubBlocks;
}

View File

@@ -2,7 +2,7 @@
<div class="ibo-activity-panel--header">
<div class="ibo-activity-panel--tabs">
{% for sCaseLogAttCode, aCaseLogData in oUIBlock.GetCaseLogTabs() %}
<div class="ibo-activity-panel--tab ibo-activity-panel--tab-for-caselog ibo-activity-panel--tab-for-caselog-{{ loop.index }}" data-role="ibo-activity-panel--tab" data-tab-type="caselog" data-caselog-attribute-code="{{ sCaseLogAttCode }}">
<div class="ibo-activity-panel--tab ibo-activity-panel--tab-for-caselog ibo-activity-panel--tab-for-caselog-{{ loop.index }}" data-role="ibo-activity-panel--tab" data-tab-type="caselog" data-caselog-attribute-code="{{ sCaseLogAttCode }}" data-caselog-rank="{{ loop.index }}">
<a href="#" class="ibo-activity-panel--tab-title" data-role="ibo-activity-panel--tab-title">
<span class="ibo-activity-panel--tab-decoration"></span>
<span class="ibo-activity-panel--tab-text">{{ aCaseLogData.title }}</span>