diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/browse/mode_list.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/browse/mode_list.html.twig index 17187660c..b6b559ca3 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/browse/mode_list.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/browse/mode_list.html.twig @@ -97,7 +97,7 @@ break; case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_CREATE_FROM_THIS') }}': url = levelPrimaryAction.url.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); - url = addParameterToUrl(url, 'ar_token', data.action_rules_token[levelPrimaryAction.type]); + url = AddParameterToUrl(url, 'ar_token', data.action_rules_token[levelPrimaryAction.type]); cellElem.attr('data-toggle', 'modal').attr('data-target', '#modal-for-all').attr('href', url); break; default: @@ -150,7 +150,7 @@ break; case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_CREATE_FROM_THIS') }}': url = action.url.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); - url = addParameterToUrl(url, 'ar_token', data.action_rules_token[action.type]); + url = AddParameterToUrl(url, 'ar_token', data.action_rules_token[action.type]); actionElem.attr('data-toggle', 'modal').attr('data-target', '#modal-for-all').attr('href', url); break; default: diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/browse/mode_tree.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/browse/mode_tree.html.twig index 87a47db5b..1653d0c81 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/browse/mode_tree.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/browse/mode_tree.html.twig @@ -223,7 +223,7 @@ break; case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_CREATE_FROM_THIS') }}': url = levelPrimaryAction.url.replace(/-objectClass-/, item.class).replace(/-objectId-/, item.id); - url = addParameterToUrl(url, 'ar_token', item.action_rules_token[levelPrimaryAction.type]); + url = AddParameterToUrl(url, 'ar_token', item.action_rules_token[levelPrimaryAction.type]); aElem.attr('data-toggle', 'modal').attr('data-target', '#modal-for-all').attr('href', url); break; default: @@ -275,7 +275,7 @@ break; case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_CREATE_FROM_THIS') }}': url = action.url.replace(/-objectClass-/, item.class).replace(/-objectId-/, item.id); - url = addParameterToUrl(url, 'ar_token', item.action_rules_token[action.type]); + url = AddParameterToUrl(url, 'ar_token', item.action_rules_token[action.type]); actionElem.attr('data-toggle', 'modal').attr('data-target', '#modal-for-all').attr('href', url); break; default: diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/object/mode_search_regular.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/object/mode_search_regular.html.twig index a7dcbd2b0..bff4170c1 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/object/mode_search_regular.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/object/mode_search_regular.html.twig @@ -92,7 +92,7 @@ $(document).ready(function(){ showTableLoader(); - + // Note : Those options should be externalized in an library so we can use them on any DataTables for the portal. // We would just have to override / complete the necessary elements oTable = $('#{{ sTableId }}').DataTable({ @@ -170,6 +170,24 @@ // Retrieving values from source form d.current_values = $('[data-form-path="{{aSource.sFormPath}}"][data-field-id="{{aSource.sFieldId}}"]').closest('.portal_form_handler').portal_form_handler('getCurrentValues'); {% endif %} + }, + "error": function(oData, sError, sThrow){ + if(oData.responseJSON !== undefined && oData.responseJSON !== null) + { + var oResponse = oData.responseJSON; + // If we encounter an error + if(oResponse.exception !== undefined) + { + // Note : This could be refactored for a global use + $('#{{ sTableId }}').closest('.modal').html( $('#modal-for-alert').html() ); + var oModalElem = $('#{{ sTableId }}').closest('.modal'); + oModalElem.find('.modal-title').html(oResponse.error_title); + oModalElem.find('.modal-body .alert').html(oResponse.error_message) + .removeClass('alert-success alert-info alert-warning alert-danger') + .addClass('alert-danger'); + oModalElem.modal('show'); + } + } } } }); diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/layout.html.twig index af18aa685..3620304e3 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/layout.html.twig @@ -295,19 +295,22 @@ { return '{{ app['combodo.absolute_url'] }}'; }; - var addParameterToUrl = function(sUrl, sParamName, sParamValue) + var AddParameterToUrl = function(sUrl, sParamName, sParamValue) { sUrl += (sUrl.split('?')[1] ? '&':'?') + sParamName + '=' + sParamValue; return sUrl; }; - var contentLoaderTemplate = '
{{ 'Page:PleaseWait'|dict_s }}
'; + var GetContentLoaderTemplate = function() + { + return '
{{ 'Page:PleaseWait'|dict_s }}
'; + } $(document).ready(function(){ {% block pPageReadyScripts %} // Hack to enable a same modal to load content from different urls $('body').on('hidden.bs.modal', '.modal#modal-for-all', function () { $(this).removeData('bs.modal'); - $(this).find('.modal-content').html(contentLoaderTemplate); + $(this).find('.modal-content').html(GetContentLoaderTemplate()); }); // Hack to enable multiple modals by making sure the .modal-open class is set to the when there is at least one modal open left $('body').on('hidden.bs.modal', function () { @@ -325,7 +328,7 @@ $('body').on('loaded.bs.modal', function (oEvent) { var sModalContent = $(oEvent.target).find('.modal-content').html(); - if( (sModalContent === '') || (sModalContent.replace(/[\n\r\t]+/g, '') === contentLoaderTemplate) ) + if( (sModalContent === '') || (sModalContent.replace(/[\n\r\t]+/g, '') === GetContentLoaderTemplate()) ) { $(oEvent.target).find('.modal-content').html($('#modal-for-alert .modal-content').html()); $(oEvent.target).find('.modal-content .modal-header .modal-title').text('{{ 'Error:HTTP:500'|dict_s }}');