N°6219 - 1:n Read: tooltip, modal title and message on Add-Edit-Remove-Delete

This commit is contained in:
Benjamin Dalsass
2023-05-31 10:10:02 +02:00
parent d07bce3063
commit 31a96d24dd
8 changed files with 50 additions and 35 deletions

View File

@@ -2321,10 +2321,15 @@ class MenuBlock extends DisplayBlock
false
);
// creation form title
if (array_key_exists('creation_in_modal_form_title', $aExtraParams)) {
$oAddLinkActionButton->AddDataAttribute('modal-title', $aExtraParams['creation_in_modal_form_title']);
}
// - If we are used in a Datatable, 'datatable_' will be prefixed to our $sId, so we do the same here
$sRealId = $sId;
if(in_array($this->m_sStyle, [static::ENUM_STYLE_LIST, 'links', static::ENUM_STYLE_LIST_IN_OBJECT])){
$sRealId = 'datatable_' . $sId;
if (in_array($this->m_sStyle, [static::ENUM_STYLE_LIST, 'links', static::ENUM_STYLE_LIST_IN_OBJECT])) {
$sRealId = 'datatable_'.$sId;
}
$oAddLinkActionButton->AddCSSClasses(['ibo-action-button', 'ibo-regular-action-button'])
->SetOnClickJsCode("$('#$sRealId').trigger('open_creation_modal.object.itop');");

View File

@@ -78,6 +78,11 @@ $(function()
// retrieve new button
const $NewButton = $('[name="UI:Links:New"]', this.element);
const sButtonTooltipContent = $NewButton.attr('data-tooltip-content');
let sButtonTitleContent = $NewButton.attr('data-modal-title');
let aParams = {
form_title: sButtonTitleContent
}
// retrieve context parameters
const sClass = $Table.closest('[data-role="ibo-block-links-table"]').attr('data-link-class');
@@ -93,7 +98,8 @@ $(function()
if(data.success){
me.$tableSettingsDialog.DataTableSettings('DoRefresh');
}
});
},
aParams);
},
/**
@@ -114,12 +120,13 @@ $(function()
sButtonTitleContent = sButtonTitleContent.replaceAll('{item}', sRemoteFriendlyname);
// Specify that external key to host object will be readonly
let aReadOnlyParams = {
let aParams = {
'readonly': {
}
}
aReadOnlyParams['readonly'][this.options.external_key_to_me] = 1;
aReadOnlyParams['form_title'] = sButtonTitleContent;
aParams['readonly'][this.options.external_key_to_me] = 1;
aParams['form_title'] = sButtonTitleContent;
// link object modification
iTopObjectWorker.ModifyObject(sButtonTooltipContent, this.options.link_class, sLinkedObjectKey, function () {
@@ -130,7 +137,7 @@ $(function()
me.$tableSettingsDialog.DataTableSettings('DoRefresh');
}
},
aReadOnlyParams);
aParams);
},
});

View File

@@ -53,19 +53,25 @@ const iTopLinkSetWorker = new function(){
* @param {string} sHostObjectId
* @param oOnModalCloseCallback
* @param oOnFormSubmittedCallback
* @param {Object} aAdditionalData
*/
const CallAjaxCreateLinkedObject = function(sModalTitle, sClass, sAttCode, sHostObjectClass, sHostObjectId, oOnModalCloseCallback = null, oOnFormSubmittedCallback = null){
const CallAjaxCreateLinkedObject = function(sModalTitle, sClass, sAttCode, sHostObjectClass, sHostObjectId, oOnModalCloseCallback = null, oOnFormSubmittedCallback = null, aAdditionalData = []){
let aData = $.extend(
{
class: sClass,
att_code: sAttCode,
host_class: sHostObjectClass,
host_id: sHostObjectId
},
aAdditionalData
);
let oOptions = {
title: sModalTitle,
content: {
endpoint: `${ROUTER_BASE_URL}?route=${ROUTE_LINK_SET_CREATE_OBJECT}`,
data: {
class: sClass,
att_code: sAttCode,
host_class: sHostObjectClass,
host_id: sHostObjectId
}
data: aData,
},
extra_options: {
callback_on_modal_close: oOnModalCloseCallback

View File

@@ -935,6 +935,8 @@ JS;
/** bool to perform a creation of a new object of this type in a modal */
'creation_in_modal_tooltip',
/** creation in modal button tooltip */
'creation_in_modal_form_title',
/** creation in modal form title */
'creation_in_modal_js_handler',
/** Handler to call when trying to create a new object in modal */
'creation_disallowed',

View File

@@ -43,8 +43,10 @@ abstract class AbstractBlockLinkSetViewTable extends UIContentBlock
];
// Dictionnary entries
public const BUTTON_TOOLTIP = 'UI:Links:Add:Button+';
public const DICT_ADD_BUTTON_TOOLTIP = 'UI:Links:Add:Button+';
public const DICT_ADD_MODAL_TITLE = 'UI:Links:Add:Modal:Title';
public const DICT_CREATE_BUTTON_TOOLTIP = 'UI:Links:Create:Button+';
public const DICT_CREATE_MODAL_TITLE = 'UI:Links:Create:Modal:Title';
public const DICT_MODIFY_LINK_BUTTON_TOOLTIP = 'UI:Links:ModifyLink:Button+';
public const DICT_MODIFY_LINK_MODAL_TITLE = 'UI:Links:ModifyLink:Modal:Title';
public const DICT_MODIFY_OBJECT_BUTTON_TOOLTIP = 'UI:Links:ModifyObject:Button+';

View File

@@ -53,7 +53,8 @@ class BlockDirectLinkSetViewTable extends AbstractBlockLinkSetViewTable
&& $this->oAttDef->GetEditMode() != LINKSET_EDITMODE_NONE
&& $this->bIsAllowCreate) {
$aExtraParams['creation_in_modal'] = true;
$aExtraParams['creation_in_modal_tooltip'] = $this->GetDictionaryEntry(static::DICT_CREATE_BUTTON_TOOLTIP);
$aExtraParams['creation_in_modal_tooltip'] = $this->oAttDef->GetEditMode() == LINKSET_EDITMODE_ADDREMOVE ? $this->GetDictionaryEntry(static::DICT_ADD_BUTTON_TOOLTIP) : $this->GetDictionaryEntry(static::DICT_CREATE_BUTTON_TOOLTIP);
$aExtraParams['creation_in_modal_form_title'] = $this->oAttDef->GetEditMode() == LINKSET_EDITMODE_ADDREMOVE ? $this->GetDictionaryEntry(static::DICT_ADD_MODAL_TITLE) : $this->GetDictionaryEntry(static::DICT_CREATE_MODAL_TITLE);
$aExtraParams['creation_in_modal_js_handler'] = "{$this->GetWidgetName()}.links_view_table('CreateLinkedObject');";
} else {
$aExtraParams['creation_disallowed'] = true;
@@ -111,13 +112,13 @@ class BlockDirectLinkSetViewTable extends AbstractBlockLinkSetViewTable
'color' => Button::ENUM_COLOR_SCHEME_DESTRUCTIVE,
'js_row_action' => "{$this->GetWidgetName()}.links_view_table('DeleteLinkedObject', aRowData['{$this->oAttDef->GetLinkedClass()}/_key_/raw'], oTrElement);",
'confirmation' => [
'title' => $this->GetDictionaryEntry(static::DICT_DELETE_MODAL_TITLE),
'message' => $this->GetDictionaryEntry(static::DICT_DELETE_MODAL_MESSAGE),
'confirm_button_class' => 'ibo-is-danger',
'row_data' => "{$this->sTargetClass}/hyperlink",
'do_not_show_again_pref_key' => $this->GetDoNotShowAgainPreferenceKey(),
],
);
'title' => $this->GetDictionaryEntry(static::DICT_DELETE_MODAL_TITLE),
'message' => $this->GetDictionaryEntry(static::DICT_DELETE_MODAL_MESSAGE),
'confirm_button_class' => 'ibo-is-danger',
'row_data' => "{$this->sTargetClass}/hyperlink",
'do_not_show_again_pref_key' => $this->GetDoNotShowAgainPreferenceKey(),
],
);
}
break;

View File

@@ -63,7 +63,8 @@ class BlockIndirectLinkSetViewTable extends AbstractBlockLinkSetViewTable
if (!$this->oAttDef->GetReadOnly()
&& $this->bIsAllowCreate) {
$aExtraParams['creation_in_modal'] = true;
$aExtraParams['creation_in_modal_tooltip'] = $this->GetDictionaryEntry(static::BUTTON_TOOLTIP);
$aExtraParams['creation_in_modal_tooltip'] = $this->GetDictionaryEntry(static::DICT_ADD_BUTTON_TOOLTIP);
$aExtraParams['creation_in_modal_form_title'] = $this->GetDictionaryEntry(static::DICT_ADD_MODAL_TITLE);
$aExtraParams['creation_in_modal_js_handler'] = "{$this->GetWidgetName()}.links_view_table('CreateLinkedObject');";
} else {
$aExtraParams['creation_disallowed'] = true;

View File

@@ -142,6 +142,7 @@ class LinkSetController extends AbstractController
$sAttCode = utils::ReadParam('att_code', '', false, 'raw');
$sClass = utils::ReadParam('host_class', '', false, 'class');
$sId = utils::ReadParam('host_id', '', false, 'integer');
$sFormTitle = utils::ReadPostedParam('form_title', null, utils::ENUM_SANITIZATION_FILTER_STRING);
// For security reasons: check that the "proposed" class is actually a subclass of the linked class
// and that the current user is allowed to create objects of this class
@@ -202,17 +203,7 @@ class LinkSetController extends AbstractController
}
JS;
// Form title
/** @var \AttributeLinkedSet $oLinksetDef */
$oLinksetDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
$oHostObj = MetaModel::GetObject($sClass, $sId);
$sFormTitle = $oLinksetDef->SearchSpecificLabel('UI:Links:Add:Modal:Title', '', true,
MetaModel::GetName($sClass),
$oHostObj->Get('friendlyname'),
$oLinksetDef->GetLabel(),
MetaModel::GetName(LinkSetModel::GetTargetClass($oLinksetDef)));
$aExtraParams = [
'noRelations' => true,
'hide_transitions' => true,