Bläddra i källkod

Portal : Enhanced and refactored error feedback on ExternalKey / LinkedSet / CustomFields fields

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@4352 a333f486-631f-4898-b8df-5754b55c2be0
glajarige 8 år sedan
förälder
incheckning
2724f1c25d

+ 2 - 2
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:

+ 2 - 2
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:

+ 19 - 1
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');
+						}
+					}
 				}
 			}
 		});

+ 7 - 4
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 = '<div class="content_loader"><div class="icon glyphicon glyphicon-refresh"></div><div class="message">{{ 'Page:PleaseWait'|dict_s }}</div></div>';
+			var GetContentLoaderTemplate = function()
+			{
+				return '<div class="content_loader"><div class="icon glyphicon glyphicon-refresh"></div><div class="message">{{ 'Page:PleaseWait'|dict_s }}</div></div>';
+			}
 			
 			$(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 <body> 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 }}');