diff --git a/module/VuFind/src/VuFind/Controller/MyResearchController.php b/module/VuFind/src/VuFind/Controller/MyResearchController.php index d43c25b284e34c32750cb7edb26fc876f2452cd2..b1bf34640a91b1415fd92bff107abdc847d57422 100644 --- a/module/VuFind/src/VuFind/Controller/MyResearchController.php +++ b/module/VuFind/src/VuFind/Controller/MyResearchController.php @@ -390,6 +390,7 @@ class MyResearchController extends AbstractBase /** * Add account blocks to the flash messenger as errors. + * These messages are lightbox ignored. * * @param \VuFind\ILS\Connection $catalog Catalog connection * @param array $patron Patron details @@ -402,7 +403,10 @@ class MyResearchController extends AbstractBase && $blocks = $catalog->getAccountBlocks($patron) ) { foreach ($blocks as $block) { - $this->flashMessenger()->addMessage($block, 'error'); + $this->flashMessenger()->addMessage( + [ 'msg' => $block, 'dataset' => [ 'lightbox-ignore' => '1' ] ], + 'error' + ); } } } diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Flashmessages.php b/module/VuFind/src/VuFind/View/Helper/Root/Flashmessages.php index ac7ec7a7366253cbd8a5e80deb71f21e339c77a5..26703238acc071d6f25f4b4cf12ddf74279bfbe4 100644 --- a/module/VuFind/src/VuFind/View/Helper/Root/Flashmessages.php +++ b/module/VuFind/src/VuFind/View/Helper/Root/Flashmessages.php @@ -82,7 +82,14 @@ class Flashmessages extends AbstractHelper $this->fm->getMessages($ns), $this->fm->getCurrentMessages($ns) ); foreach (array_unique($messages, SORT_REGULAR) as $msg) { - $html .= '<div class="' . $this->getClassForNamespace($ns) . '">'; + $html .= '<div class="' . $this->getClassForNamespace($ns) . '"'; + if (isset($msg['dataset'])) { + foreach ($msg['dataset'] as $attr => $value) { + $html .= ' data-' . $attr . '="' + . htmlspecialchars($value) . '"'; + } + } + $html .= '>'; // Advanced form: if (is_array($msg)) { // Use a different translate helper depending on whether diff --git a/themes/bootstrap3/js/lightbox.js b/themes/bootstrap3/js/lightbox.js index a1e11f4b65adbb482f3fd05bc5e8f2d3933cd0e8..f15a1a972b661be846c72906d3ace9cc038e94c2 100644 --- a/themes/bootstrap3/js/lightbox.js +++ b/themes/bootstrap3/js/lightbox.js @@ -71,9 +71,12 @@ VuFind.register('lightbox', function Lightbox() { } // Isolate successes var htmlDiv = $('<div/>').html(content); - var alerts = htmlDiv.find('.flash-message.alert-success'); + var alerts = htmlDiv.find('.flash-message.alert-success:not([data-lightbox-ignore])'); if (alerts.length > 0) { - showAlert(alerts[0].innerHTML, 'success'); + var msgs = alerts.toArray().map(function getSuccessHtml(el) { + return el.innerHTML; + }).join('<br/>'); + showAlert(msgs, 'success'); return; } // Deframe HTML @@ -131,21 +134,25 @@ VuFind.register('lightbox', function Lightbox() { VuFind.refreshPage(); return; } + var testDiv = $('<div/>').html(content); + var errorMsgs = testDiv.find('.flash-message.alert-danger:not([data-lightbox-ignore])'); // Place Hold error isolation - if (obj.url.match(/\/Record/) && (obj.url.match(/Hold\?/) || obj.url.match(/Request\?/))) { - var testDiv = $('<div/>').html(content); - var error = testDiv.find('.flash-message.alert-danger'); - if (error.length && testDiv.find('.record').length) { - showAlert(error[0].innerHTML, 'danger'); + if (obj.url.match(/\/Record\/.*(Hold|Request)\?/)) { + if (errorMsgs.length && testDiv.find('.record').length) { + var msgs = errorMsgs.toArray().map(function getAlertHtml(el) { + return el.innerHTML; + }).join('<br/>'); + showAlert(msgs, 'danger'); return false; } } if ( // Close the lightbox after deliberate login - obj.method // is a form - && ((obj.url.match(/MyResearch/) && !obj.url.match(/Bulk/) && !obj.url.match(/Delete/) && !obj.url.match(/Recover/)) // that matches login/create account - || obj.url.match(/catalogLogin/)) // or catalog login for holds - && $('<div/>').html(content).find('.flash-message.alert-danger').length === 0 // skip failed logins + obj.method && ( // is a form + obj.url.match(/catalogLogin/) // catalog login for holds + || obj.url.match(/MyResearch\/(?!Bulk|Delete|Recover)/) // or that matches login/create account + ) && errorMsgs.length === 0 // skip failed logins ) { + var eventResult = _emit('VuFind.lightbox.login', { originalUrl: _originalUrl, formUrl: obj.url