diff --git a/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php index 09530915a..e9694b74f 100644 --- a/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php @@ -42,10 +42,12 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array( 'Portal:Button:Delete' => 'Smazat', 'Portal:EnvironmentBanner:Title' => 'You are currently in %1$s mode~~', 'Portal:EnvironmentBanner:GoToProduction' => 'Go back to PRODUCTION mode~~', - 'Error:HTTP:404' => 'Stránka nenalezena', + 'Error:HTTP:401' => 'Authentication~~', + 'Error:HTTP:404' => 'Stránka nenalezena', 'Error:HTTP:500' => 'Jejda! Nastal problém', 'Error:HTTP:GetHelp' => 'Kontaktujte prosím administrátora, pokud problém přetrvá.', 'Error:XHR:Fail' => 'Data se nepodařilo načíst, kontaktujte prosím administrátora.', + 'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.~~', 'Portal:Datatables:Language:Processing' => 'Počkejte prosím', 'Portal:Datatables:Language:Search' => 'Filtr :', 'Portal:Datatables:Language:LengthMenu' => 'Zobrazit _MENU_ položek na stránku', diff --git a/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php index 9cf9462ac..4a3124190 100644 --- a/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php @@ -39,11 +39,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', array( 'Portal:Button:Delete' => 'Löschen', 'Portal:EnvironmentBanner:Title' => 'Sie sind im Moment im %1$s Modus', 'Portal:EnvironmentBanner:GoToProduction' => 'Zurück zum PRODUCTION Modus', - 'Error:HTTP:404' => 'Seite nicht gefunden.', + 'Error:HTTP:401' => 'Authentication~~', + 'Error:HTTP:404' => 'Seite nicht gefunden.', 'Error:HTTP:500' => 'Oops! Es ist ein Fehler aufgetreten.', 'Error:HTTP:GetHelp' => 'Bitte kontaktieren Sie Ihren iTop administrator falls das Problem öfter auftaucht.', 'Error:XHR:Fail' => 'Konnte Daten nicht laden, bitte kontaktieren Sie Ihren iTop administrator', - 'Portal:Datatables:Language:Processing' => 'Bitte warten...', + 'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.~~', + 'Portal:Datatables:Language:Processing' => 'Bitte warten...', 'Portal:Datatables:Language:Search' => 'Filter :', 'Portal:Datatables:Language:LengthMenu' => 'Anzahl _MENU_ Einträge pro Seite', 'Portal:Datatables:Language:ZeroRecords' => 'Keine Resultate', diff --git a/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php index 298de23ed..6e3bcf8b6 100644 --- a/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php @@ -38,11 +38,13 @@ Dict::Add('EN US', 'English', 'English', array( 'Portal:Button:Delete' => 'Delete', 'Portal:EnvironmentBanner:Title' => 'You are currently in %1$s mode', 'Portal:EnvironmentBanner:GoToProduction' => 'Go back to PRODUCTION mode', - 'Error:HTTP:404' => 'Page not found', + 'Error:HTTP:401' => 'Authentication', + 'Error:HTTP:404' => 'Page not found', 'Error:HTTP:500' => 'Oops! An error has occured.', 'Error:HTTP:GetHelp' => 'Please contact your iTop administrator if the problem keeps happening.', 'Error:XHR:Fail' => 'Could not load data, please contact your iTop administrator', - 'Portal:Datatables:Language:Processing' => 'Please wait...', + 'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.', + 'Portal:Datatables:Language:Processing' => 'Please wait...', 'Portal:Datatables:Language:Search' => 'Filter:', 'Portal:Datatables:Language:LengthMenu' => 'Display _MENU_ items per page', 'Portal:Datatables:Language:ZeroRecords' => 'No result', diff --git a/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php index bd2f18344..79f1cdaf2 100644 --- a/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php @@ -38,11 +38,13 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array( 'Portal:Button:Delete' => 'Borrar', 'Portal:EnvironmentBanner:Title' => 'You are currently in %1$s mode~~', 'Portal:EnvironmentBanner:GoToProduction' => 'Go back to PRODUCTION mode~~', - 'Error:HTTP:404' => 'Página no encontrada', + 'Error:HTTP:401' => 'Authentication~~', + 'Error:HTTP:404' => 'Página no encontrada', 'Error:HTTP:500' => '¡Vaya! Ha ocurrido un error.', 'Error:HTTP:GetHelp' => 'Póngase en contacto con el administrador de iTop si el problema persiste.', 'Error:XHR:Fail' => 'No se pudieron cargar datos, póngase en contacto con su administrador de iTop', - 'Portal:Datatables:Language:Processing' => 'Por favor esperar...', + 'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.~~', + 'Portal:Datatables:Language:Processing' => 'Por favor esperar...', 'Portal:Datatables:Language:Search' => 'Filtrar:', 'Portal:Datatables:Language:LengthMenu' => 'Mostrar _MENU_ elementos por página', 'Portal:Datatables:Language:ZeroRecords' => 'Sin resultados', diff --git a/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php index cbd4f7132..dc6d52987 100644 --- a/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php @@ -38,10 +38,12 @@ Dict::Add('FR FR', 'French', 'Français', array( 'Portal:Button:Delete' => 'Supprimer', 'Portal:EnvironmentBanner:Title' => 'Vous êtes dans le mode %1$s', 'Portal:EnvironmentBanner:GoToProduction' => 'Retourner au mode PRODUCTION', - 'Error:HTTP:404' => 'Page non trouvée', + 'Error:HTTP:401' => 'Authentification', + 'Error:HTTP:404' => 'Page non trouvée', 'Error:HTTP:500' => 'Oups ! Une erreur est survenue.', 'Error:HTTP:GetHelp' => 'Si le problème persiste, veuillez contacter votre administrateur iTop.', - 'Error:XHR:Fail' => 'Impossible de charger les données, veuillez contacter votre administrateur iTop si le problème persiste', + 'Error:XHR:Fail' => 'Impossible de charger les données, veuillez contacter votre administrateur iTop si le problème persiste.', + 'Portal:ErrorUserLoggedOut' => 'Vous êtes déconnecté et devez vous reconnecter pour continuer.', 'Portal:Datatables:Language:Processing' => 'Veuillez patienter...', 'Portal:Datatables:Language:Search' => 'Filtrer :', 'Portal:Datatables:Language:LengthMenu' => 'Afficher _MENU_ éléments par page', diff --git a/datamodels/2.x/itop-portal-base/nl.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/nl.dict.itop-portal-base.php index 85e9ff449..192585db2 100644 --- a/datamodels/2.x/itop-portal-base/nl.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/nl.dict.itop-portal-base.php @@ -36,11 +36,13 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array( 'Portal:Button:Add' => 'Toevoegen', 'Portal:Button:Remove' => 'Verwijderen', 'Portal:Button:Delete' => 'Verwijderen', - 'Error:HTTP:404' => 'Pagina kan niet worden gevonden', + 'Error:HTTP:401' => 'Authentication~~', + 'Error:HTTP:404' => 'Pagina kan niet worden gevonden', 'Error:HTTP:500' => 'Oeps! Er is een fout opgetreden', 'Error:HTTP:GetHelp' => 'Neem contact op met de beheerder als dit probleem zich blijft voordoen', 'Error:XHR:Fail' => 'De data kan niet worden geladen, neem contact op met de beheerder', - 'Portal:Datatables:Language:Processing' => 'Even geduld...', + 'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.~~', + 'Portal:Datatables:Language:Processing' => 'Even geduld...', 'Portal:Datatables:Language:Search' => 'Filter :', 'Portal:Datatables:Language:LengthMenu' => 'Toon _MENU_ items per pagina', 'Portal:Datatables:Language:ZeroRecords' => 'Geen resultaten', diff --git a/datamodels/2.x/itop-portal-base/portal/src/controllers/objectcontroller.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/controllers/objectcontroller.class.inc.php index a42c45a3c..f9be4e2ab 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/controllers/objectcontroller.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/controllers/objectcontroller.class.inc.php @@ -275,7 +275,7 @@ class ObjectController extends AbstractController public function CreateFromFactoryAction(Request $oRequest, Application $oApp, $sObjectClass, $sObjectId, $sEncodedMethodName) { $sMethodName = base64_decode($sEncodedMethodName); - + // Checking that the factory method is valid if (!is_callable($sMethodName)) { diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/create/modal.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/create/modal.html.twig index c7d8f6854..256b6c9c1 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/create/modal.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/create/modal.html.twig @@ -28,14 +28,11 @@ sUrl = AddParameterToUrl(sUrl, 'ar_token', '{{ ar_token }}'); // Loading form oModalElem.find('.modal-content').load(sUrl, function(oData, sStatus, oXHR){ - var oResponse = (oXHR.responseJSON !== undefined) ? oXHR.responseJSON : JSON.parse(oXHR.responseText); - - // Note : This could be refactored for a global use - oModalElem.html( $('#modal-for-alert').html() ); - 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'); + if(sStatus === 'error') + { + // Hiding modal in case of error as the general AJAX error handler will display a message + oModalElem.modal('hide'); + } }); }); }); diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/layout.html.twig index e42fbc500..9b05a33f6 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/layout.html.twig @@ -35,11 +35,11 @@ {% block pPageLiveScriptHelpers %} {{ parent() }} + // Helpers used for brick's opening target var SetActionUrl = function(oElem, sUrl) { oElem.attr('href', sUrl); }; - var SetActionOpeningTarget = function(oElem, sMode) { if(sMode === '{{ constant('Combodo\\iTop\\Portal\\Brick\\PortalBrick::ENUM_OPENING_TARGET_MODAL') }}') 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 bff4170c1..294243027 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 @@ -172,22 +172,27 @@ {% endif %} }, "error": function(oData, sError, sThrow){ + // Error returned by the framework 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'); + {# Hiding modal in case of error as the general AJAX error handler will display a message #} + {% if tIsModal is defined and tIsModal == true %} + $('#{{ sFormId }}').closest('.modal').modal('hide'); + {% endif %} } } + // Global failure + else + { + {# Hiding modal in case of error as the general AJAX error handler will display a message #} + {% if tIsModal is defined and tIsModal == true %} + $('#{{ sFormId }}').closest('.modal').modal('hide'); + {% endif %} + } } } }); 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 3bd5e8b02..64b5b5de5 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 @@ -68,7 +68,7 @@ {# Visible.js to check if an element is visible on screen #} - {# Base64.js #} + {# Base64.js #} {# Moment.js #} @@ -314,10 +314,12 @@ {% block pPageLiveScripts %} diff --git a/datamodels/2.x/itop-portal-base/portal/web/index.php b/datamodels/2.x/itop-portal-base/portal/web/index.php index 3bc40dd35..14d2a5a75 100644 --- a/datamodels/2.x/itop-portal-base/portal/web/index.php +++ b/datamodels/2.x/itop-portal-base/portal/web/index.php @@ -41,30 +41,19 @@ require_once __DIR__ . '/../src/helpers/scopevalidatorhelper.class.inc.php'; require_once __DIR__ . '/../src/helpers/securityhelper.class.inc.php'; require_once __DIR__ . '/../src/helpers/applicationhelper.class.inc.php'; +use \Silex\Application; use \Combodo\iTop\Portal\Helper\ApplicationHelper; -// Checking user rights and prompt if needed -LoginWebPage::DoLoginEx(PORTAL_ID); -if (UserRights::GetContactId() == 0) -{ - die(Dict::S('Portal:ErrorNoContactForThisUser')); -} - // Stacking context tag so it knows we are in the portal $oContex = new ContextTag('GUI:Portal'); $oContex2 = new ContextTag('Portal:' . PORTAL_MODULE_ID); -if (!defined('DISABLE_DATA_LOCALIZER_PORTAL')) -{ - ApplicationContext::SetPluginProperty('QueryLocalizerPlugin', 'language_code', UserRights::GetUserLanguage()); -} - // Checking if debug param is on $bDebug = (isset($_REQUEST['debug']) && ($_REQUEST['debug'] === 'true') ); // Initializing Silex framework $oKPI = new ExecutionKPI(); -$oApp = new Silex\Application(); +$oApp = new Application(); // Registring optional silex components $oApp->register(new Combodo\iTop\Portal\Provider\UrlGeneratorServiceProvider()); @@ -83,36 +72,57 @@ $oApp->register(new Silex\Provider\TwigServiceProvider(), array( $oApp->register(new Silex\Provider\HttpFragmentServiceProvider()); $oKPI->ComputeAndReport('Initialization of the Silex application'); -// Configuring Silex application -$oApp['debug'] = $bDebug; -$oApp['combodo.current_environment'] = utils::GetCurrentEnvironment(); -$oApp['combodo.absolute_url'] = utils::GetAbsoluteUrlAppRoot(); -$oApp['combodo.portal.base.absolute_url'] = utils::GetAbsoluteUrlAppRoot() . 'env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/web/'; -$oApp['combodo.portal.base.absolute_path'] = MODULESROOT . '/itop-portal-base/portal/web/'; -$oApp['combodo.portal.instance.absolute_url'] = utils::GetAbsoluteUrlAppRoot() . 'env-' . utils::GetCurrentEnvironment() . '/' . PORTAL_MODULE_ID . '/'; -$oApp['combodo.portal.instance.id'] = PORTAL_MODULE_ID; -$oApp['combodo.portal.instance.conf'] = array(); -$oApp['combodo.portal.instance.routes'] = array(); +$oApp->before(function(Symfony\Component\HttpFoundation\Request $oRequest, Silex\Application $oApp) use ($bDebug){ + // Checking user rights and prompt if needed (401 HTTP code returned if XHR request) + $iExitMethod = ($oRequest->isXmlHttpRequest()) ? LoginWebPage::EXIT_RETURN : LoginWebPage::EXIT_PROMPT; + $iLogonRes = LoginWebPage::DoLoginEx(PORTAL_ID, false, $iExitMethod); + if( ($iExitMethod === LoginWebPage::EXIT_RETURN) && ($iLogonRes != 0) ) + { + $oApp->abort(401, Dict::S('Portal:ErrorUserLoggedOut')); + } -// Registering error/exception handler in order to transform php error to exception -ApplicationHelper::RegisterExceptionHandler($oApp); + if (UserRights::GetContactId() == 0) + { + $oApp->abort(500, Dict::S('Portal:ErrorNoContactForThisUser')); + } -// Preparing portal foundations (Can't use Silex autoload through composer as we don't follow PSR conventions -filenames, functions-) -$oKPI = new ExecutionKPI(); -ApplicationHelper::LoadControllers(); -ApplicationHelper::LoadRouters(); -ApplicationHelper::RegisterRoutes($oApp); -ApplicationHelper::LoadBricks(); -ApplicationHelper::LoadFormManagers(); -ApplicationHelper::RegisterTwigExtensions($oApp['twig']); -$oKPI->ComputeAndReport('Loading portal files (routers, controllers, ...)'); + // Enabling datalocalizer if needed + if (!defined('DISABLE_DATA_LOCALIZER_PORTAL')) + { + ApplicationContext::SetPluginProperty('QueryLocalizerPlugin', 'language_code', UserRights::GetUserLanguage()); + } -// Loading portal configuration from the module design -$oKPI = new ExecutionKPI(); -ApplicationHelper::LoadPortalConfiguration($oApp); -$oKPI->ComputeAndReport('Parsing portal configuration'); -// Loading current user -ApplicationHelper::LoadCurrentUser($oApp); + // Configuring Silex application + $oApp['debug'] = $bDebug; + $oApp['combodo.current_environment'] = utils::GetCurrentEnvironment(); + $oApp['combodo.absolute_url'] = utils::GetAbsoluteUrlAppRoot(); + $oApp['combodo.portal.base.absolute_url'] = utils::GetAbsoluteUrlAppRoot() . 'env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/web/'; + $oApp['combodo.portal.base.absolute_path'] = MODULESROOT . '/itop-portal-base/portal/web/'; + $oApp['combodo.portal.instance.absolute_url'] = utils::GetAbsoluteUrlAppRoot() . 'env-' . utils::GetCurrentEnvironment() . '/' . PORTAL_MODULE_ID . '/'; + $oApp['combodo.portal.instance.id'] = PORTAL_MODULE_ID; + $oApp['combodo.portal.instance.conf'] = array(); + $oApp['combodo.portal.instance.routes'] = array(); + + // Registering error/exception handler in order to transform php error to exception + ApplicationHelper::RegisterExceptionHandler($oApp); + + // Preparing portal foundations (Can't use Silex autoload through composer as we don't follow PSR conventions -filenames, functions-) + $oKPI = new ExecutionKPI(); + ApplicationHelper::LoadControllers(); + ApplicationHelper::LoadRouters(); + ApplicationHelper::RegisterRoutes($oApp); + ApplicationHelper::LoadBricks(); + ApplicationHelper::LoadFormManagers(); + ApplicationHelper::RegisterTwigExtensions($oApp['twig']); + $oKPI->ComputeAndReport('Loading portal files (routers, controllers, ...)'); + + // Loading portal configuration from the module design + $oKPI = new ExecutionKPI(); + ApplicationHelper::LoadPortalConfiguration($oApp); + $oKPI->ComputeAndReport('Parsing portal configuration'); + // Loading current user + ApplicationHelper::LoadCurrentUser($oApp); +}, Application::EARLY_EVENT); // Running application $oKPI = new ExecutionKPI(); diff --git a/datamodels/2.x/itop-portal-base/ru.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/ru.dict.itop-portal-base.php index a5491574f..0553526e0 100755 --- a/datamodels/2.x/itop-portal-base/ru.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/ru.dict.itop-portal-base.php @@ -23,10 +23,12 @@ Dict::Add('RU RU', 'Russian', 'Русский', array( 'Portal:Button:Add' => 'Добавить', 'Portal:Button:Remove' => 'Удалить', 'Portal:Button:Delete' => 'Удалить', + 'Error:HTTP:401' => 'Authentication~~', 'Error:HTTP:404' => 'Страница не найдена', 'Error:HTTP:500' => 'Упс! Произошла ошибка.', 'Error:XHR:Fail' => 'Не удалось загрузить данные. Пожалуйста, свяжитесь с вашим администратором iTop.', 'Error:HTTP:GetHelp' => 'Пожалуйста, свяжитесь с вашим администратором iTop, если проблема сохраняется.', + 'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.~~', 'Portal:Datatables:Language:Processing' => 'Пожалуйста, подождите...', 'Portal:Datatables:Language:Search' => 'Фильтр :', 'Portal:Datatables:Language:LengthMenu' => 'Показывать _MENU_ элементов на странице', diff --git a/sources/renderer/bootstrap/fieldrenderer/bslinkedsetfieldrenderer.class.inc.php b/sources/renderer/bootstrap/fieldrenderer/bslinkedsetfieldrenderer.class.inc.php index dadd3b02a..aaf395b28 100644 --- a/sources/renderer/bootstrap/fieldrenderer/bslinkedsetfieldrenderer.class.inc.php +++ b/sources/renderer/bootstrap/fieldrenderer/bslinkedsetfieldrenderer.class.inc.php @@ -451,6 +451,13 @@ EOF sFormPath: '{$this->oField->GetFormPath()}', sFieldId: '{$this->oField->GetId()}', aObjectIdsToIgnore : aObjectIdsToIgnore + }, + function(sResponseText, sStatus, oXHR){ + // Hiding modal in case of error as the general AJAX error handler will display a message + if(sStatus === 'error') + { + oModalElem.modal('hide'); + } } ); oModalElem.modal('show'); diff --git a/sources/renderer/bootstrap/fieldrenderer/bsselectobjectfieldrenderer.class.inc.php b/sources/renderer/bootstrap/fieldrenderer/bsselectobjectfieldrenderer.class.inc.php index 187ad326f..e9b2d4470 100644 --- a/sources/renderer/bootstrap/fieldrenderer/bsselectobjectfieldrenderer.class.inc.php +++ b/sources/renderer/bootstrap/fieldrenderer/bsselectobjectfieldrenderer.class.inc.php @@ -75,7 +75,6 @@ class BsSelectObjectFieldRenderer extends FieldRenderer $oCountSet = new DBObjectSet($oSearch); $iSetCount = $oCountSet->Count(); // Note : Autocomplete/Search is disabled for template fields as they are not external keys, thus they will just be displayed as regular select. - //$bRegularSelect = ($iSetCount <= $this->oField->GetMaximumComboLength()); $bRegularSelect = ( ($iSetCount <= $this->oField->GetMaximumComboLength()) || ($this->oField->GetSearchEndpoint() === null) || ($this->oField->GetSearchEndpoint() === '') ); unset($oCountSet); @@ -386,7 +385,14 @@ EOF { sFormPath: '{$this->oField->GetFormPath()}', sFieldId: '{$this->oField->GetId()}' - } + }, + function(sResponseText, sStatus, oXHR){ + // Hiding modal in case of error as the general AJAX error handler will display a message + if(sStatus === 'error') + { + oModalElem.modal('hide'); + } + } ); oModalElem.modal('show'); }); @@ -433,7 +439,14 @@ EOF formmanager_class: $(this).closest('.portal_form_handler').portal_form_handler('getOptions').formmanager_class, formmanager_data: JSON.stringify($(this).closest('.portal_form_handler').portal_form_handler('getOptions').formmanager_data), current_values: $(this).closest('.portal_form_handler').portal_form_handler('getCurrentValues') - } + }, + function(sResponseText, sStatus, oXHR){ + // Hiding modal in case of error as the general AJAX error handler will display a message + if(sStatus === 'error') + { + oModalElem.modal('hide'); + } + } ); oModalElem.modal('show'); });