Skip to content
Snippets Groups Projects
Commit b2bb7d21 authored by Mathias Maaß's avatar Mathias Maaß Committed by Robert Lange
Browse files

refs #17151 [finc] menu status: replace finc by VuFind

parent 85d8b536
No related merge requests found
...@@ -962,8 +962,11 @@ class PAIA extends \VuFind\ILS\Driver\PAIA ...@@ -962,8 +962,11 @@ class PAIA extends \VuFind\ILS\Driver\PAIA
// queue (0..1) number of waiting requests for the document or item // queue (0..1) number of waiting requests for the document or item
$result['position'] = ($doc['queue'] ?? null); $result['position'] = ($doc['queue'] ?? null);
// only true if status == 4 // status: provided (the document is ready to be used by the patron)
$result['available'] = false; $result['available'] = $doc['status'] == 4 ? true : false;
// status: reserved (1) and ordered (2)
$result['in_transit'] = $doc['status'] == 1 || $doc['status'] == 2;
// about (0..1) textual description of the document // about (0..1) textual description of the document
$result['title'] = ($doc['about'] ?? null); $result['title'] = ($doc['about'] ?? null);
...@@ -1006,9 +1009,6 @@ class PAIA extends \VuFind\ILS\Driver\PAIA ...@@ -1006,9 +1009,6 @@ class PAIA extends \VuFind\ILS\Driver\PAIA
? $this->convertDatetime($doc['endtime']) : ''); ? $this->convertDatetime($doc['endtime']) : '');
} }
// status: provided (the document is ready to be used by the patron)
$result['available'] = $doc['status'] == 4 ? true : false;
// Optional VuFind fields // Optional VuFind fields
/* /*
$result['reqnum'] = null; $result['reqnum'] = null;
...@@ -1067,8 +1067,11 @@ class PAIA extends \VuFind\ILS\Driver\PAIA ...@@ -1067,8 +1067,11 @@ class PAIA extends \VuFind\ILS\Driver\PAIA
// queue (0..1) number of waiting requests for the document or item // queue (0..1) number of waiting requests for the document or item
$result['position'] = ($doc['queue'] ?? null); $result['position'] = ($doc['queue'] ?? null);
// only true if status == 4 // status: provided (the document is ready to be used by the patron)
$result['available'] = false; $result['available'] = $doc['status'] == 4 ? true : false;
// status: reserved (1) and ordered (2)
$result['in_transit'] = $doc['status'] == 1 || $doc['status'] == 2;
// about (0..1) textual description of the document // about (0..1) textual description of the document
$result['title'] = ($doc['about'] ?? null); $result['title'] = ($doc['about'] ?? null);
...@@ -1161,6 +1164,15 @@ class PAIA extends \VuFind\ILS\Driver\PAIA ...@@ -1161,6 +1164,15 @@ class PAIA extends \VuFind\ILS\Driver\PAIA
$result['duedate'] = (isset($doc['duedate']) $result['duedate'] = (isset($doc['duedate'])
? $this->convertDate($doc['duedate']) : ''); ? $this->convertDate($doc['duedate']) : '');
// From Vufind documentation:
// "dueStatus - A special status – may be 'due' (for items due very
// soon) or 'overdue' (for overdue items). If this is false, empty
// string, or unset, VuFind will assume that items have no special status.
// (optional)."
$result['dueStatus'] = isset($doc['endtime']) && (new \DateTime() > new \DateTime($doc['endtime']))
? 'overdue'
: '';
// cancancel (0..1) whether an ordered or provided document can be // cancancel (0..1) whether an ordered or provided document can be
// canceled // canceled
......
/*global userIsLoggedIn, VuFind */
VuFind.register('account', function Account() {
// Retrieved statuses
var LOADING = -1 * Math.PI; // waiting for request
var MISSING = -2 * Math.PI; // no data available
var INACTIVE = -3 * Math.PI; // status element missing
var _statuses = {};
// Account Icons
var ICON_LEVELS = {
"NONE": 0,
"GOOD": 1,
"WARNING": 2,
"DANGER": 3
};
var _accountIcons = {};
_accountIcons[ICON_LEVELS.NONE] = "fa fa-user-circle";
_accountIcons[ICON_LEVELS.GOOD] = "fa fa-bell text-success";
_accountIcons[ICON_LEVELS.WARNING] = "fa fa-bell text-warning";
_accountIcons[ICON_LEVELS.DANGER] = "fa fa-exclamation-triangle text-danger";
var _submodules = [];
var _sessionDataPrefix = "vf-account-status-";
var _save = function _save(module) {
sessionStorage.setItem(
_sessionDataPrefix + module,
JSON.stringify(_statuses[module])
);
};
// Clearing save forces AJAX update next page load
var clearCache = function clearCache(name) {
if (typeof name === "undefined") {
for (var sub in _submodules) {
if (Object.prototype.hasOwnProperty.call(_submodules, sub)) {
clearCache(sub);
}
}
} else {
sessionStorage.removeItem(_sessionDataPrefix + name);
}
};
var _getStatus = function _getStatus(module) {
return (typeof _statuses[module] === "undefined") ? LOADING : _statuses[module];
};
var _render = function _render() {
var accountStatus = ICON_LEVELS.NONE;
for (var sub in _submodules) {
if (Object.prototype.hasOwnProperty.call(_submodules, sub)) {
var $element = $(_submodules[sub].selector);
if (!$element) {
_statuses[sub] = INACTIVE;
continue;
}
var status = _getStatus(sub);
if (status === MISSING) {
$element.addClass('hidden');
} else {
$element.removeClass('hidden');
if (status === LOADING) {
$element.html('<i class="fa fa-spin fa-spinner"></i>');
} else {
var moduleStatus = _submodules[sub].render($element, _statuses[sub], ICON_LEVELS);
if (moduleStatus > accountStatus) {
accountStatus = moduleStatus;
}
}
}
}
}
$("#account-icon").attr("class", _accountIcons[accountStatus]);
if (accountStatus > ICON_LEVELS.NONE) {
$("#account-icon")
.attr("data-toggle", "tooltip")
.attr("data-placement", "bottom")
.attr("title", VuFind.translate("account_has_alerts"))
.tooltip();
} else {
$("#account-icon").tooltip("destroy");
}
};
var _ajaxLookup = function _ajaxLookup(module) {
$.ajax({
url: VuFind.path + '/AJAX/JSON?method=' + _submodules[module].ajaxMethod,
dataType: 'json',
data: _submodules[module].data || [] /* finc specific */
})
.done(function ajaxLookupDone(response) {
_statuses[module] = response.data;
})
.fail(function ajaxLookupFail() {
_statuses[module] = MISSING;
})
.always(function ajaxLookupAlways() {
_save(module);
_render();
});
};
var _load = function _load(module) {
var $element = $(_submodules[module].selector);
if (!$element) {
_statuses[module] = INACTIVE;
} else {
var json = sessionStorage.getItem(_sessionDataPrefix + module);
var session = typeof json === "undefined" ? null : JSON.parse(json);
if (
session === null ||
session === LOADING ||
session === MISSING
) {
_statuses[module] = LOADING;
_ajaxLookup(module);
} else {
_statuses[module] = session;
}
_render();
}
};
var init = function init() {
// Update information when certain actions are performed
$("#renewals").submit(function clearCheckedOut() {
clearCache("checkedOut");
});
$('#cancelHold, [name="placeHold"]').submit(function clearHolds() {
clearCache("holds");
});
$('#ILLRequestForm, #cancelILLRequest').submit(function clearHolds() {
clearCache("illRequests");
});
$('[name="placeStorageRetrievalRequest"], #cancelStorageRetrievalRequest').submit(function clearStorageRetrievals() {
clearCache("storageRetrievalRequests");
});
$("#library_card").change(function clearChangeLibraryCard() {
clearCache(/* all */);
});
};
var register = function register(name, module) {
if (typeof _submodules[name] === "undefined") {
_submodules[name] = typeof module == 'function' ? module() : module;
}
var $el = $(_submodules[name].selector);
if ($el.length > 0) {
$el.removeClass("hidden");
_statuses[name] = LOADING;
_load(name);
} else {
_statuses[name] = INACTIVE;
}
};
return {
init: init,
clearCache: clearCache,
// if user is logged out, clear cache instead of register
register: userIsLoggedIn ? register : clearCache
};
});
$(document).ready(function registerAccountAjax() {
VuFind.account.register("fines", {
selector: ".fines-status",
ajaxMethod: "getUserFines",
render: function render($element, status, ICON_LEVELS) {
if (status.value === 0) {
$element.addClass("hidden");
return ICON_LEVELS.NONE;
}
$element.html('<span class="badge overdue">' + status.display + '</span>');
return ICON_LEVELS.DANGER;
}
});
VuFind.account.register("checkedOut", {
selector: ".checkedout-status",
ajaxMethod: "getUserTransactions",
render: function render($element, status, ICON_LEVELS) {
var html = '';
var level = ICON_LEVELS.NONE;
if (status.ok > 0) {
html += '<span class="badge ok" data-toggle="tooltip" title="' + VuFind.translate('Checked Out Items') + '">' + status.ok + '</span>';
}
if (status.warn > 0) {
html += '<span class="badge warn" data-toggle="tooltip" title="' + VuFind.translate('renew_item_due_tooltip') + '">' + status.warn + '</span>';
level = ICON_LEVELS.WARNING;
}
if (status.overdue > 0) {
html += '<span class="badge overdue" data-toggle="tooltip" title="' + VuFind.translate('renew_item_overdue_tooltip') + '">' + status.overdue + '</span>';
level = ICON_LEVELS.DANGER;
}
$element.html(html);
$('[data-toggle="tooltip"]', $element).tooltip();
return level;
}
});
VuFind.account.register("holds", {
selector: ".holds-status",
ajaxMethod: "getUserHolds",
render: function render($element, status, ICON_LEVELS) {
var level = ICON_LEVELS.NONE;
if (status.available > 0) {
$element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('hold_available') + '"></i>');
level = ICON_LEVELS.GOOD;
} else if (status.in_transit > 0) {
$element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('request_in_transit') + '"></i>');
} else {
$element.addClass("holds-status hidden");
}
$('[data-toggle="tooltip"]', $element).tooltip();
return level;
}
});
VuFind.account.register("illRequests", {
selector: ".illrequests-status",
ajaxMethod: "getUserILLRequests",
render: function render($element, status, ICON_LEVELS) {
var level = ICON_LEVELS.NONE;
if (status.available > 0) {
$element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('ill_request_available') + '"></i>');
level = ICON_LEVELS.GOOD;
} else if (status.in_transit > 0) {
$element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('request_in_transit') + '"></i>');
} else {
$element.addClass("holds-status hidden");
}
$('[data-toggle="tooltip"]', $element).tooltip();
return level;
}
});
VuFind.account.register("storageRetrievalRequests", {
selector: ".storageretrievalrequests-status",
ajaxMethod: "getUserStorageRetrievalRequests",
render: function render($element, status, ICON_LEVELS) {
var level = ICON_LEVELS.NONE;
if (status.available > 0) {
$element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('storage_retrieval_request_available') + '"></i>');
level = ICON_LEVELS.GOOD;
} else if (status.in_transit > 0) {
$element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('request_in_transit') + '"></i>');
} else {
$element.addClass("holds-status hidden");
}
$('[data-toggle="tooltip"]', $element).tooltip();
return level;
}
});
/* finc specific */
$(document).ready(function () {
var menuItems = $('.itemCount');
if(menuItems.length === 0) {
return;
}
var countables = new Array;
menuItems.each(function() {
countables.push($(this).attr('id'));
});
$.ajax({
dataType: 'json',
method: 'GET',
url: VuFind.path + '/AJAX/JSON?method=getAdditionalAccountInfo',
data: {'views':countables}
})
.done(function(response) {
if (response.data.countFines != undefined && response.data.countFines != 0) {
$('#getFinesTotal').text(response.data.countFines);
$('.fines').addClass('red-alert');
}
$.each(response.data.countViewItems, function (id, itemCount) {
$('#'+id).text('('+itemCount+')');
});
});
});
/* finc specific - END */
});
<!-- finc: myresearch - menu -->
<?php
$user = $this->auth()->isLoggedIn();
$patron = $user ? $this->auth()->getILSPatron() : false;
$capabilityParams = $patron ? ['patron' => $patron] : [];
$ilsOnline = ('ils-none' !== $this->ils()->getOfflineMode());
?>
<?php /* finc change btn-link to btn-default */ ?>
<button class="close-offcanvas btn btn-default" data-toggle="offcanvas"><?=$this->transEsc('navigate_back') ?></button>
<?php /* finc: change h3 to h2 */ ?>
<h2><?=$this->transEsc('Your Account')?></h2>
<?php /* finc needs to add .facet-group class and classes on sub items for borders - CK */
/* also adds aria-current for correct menu action */ ?>
<?php /* finc needs to add .facet-group class and classes on sub items for borders - CK */ ?>
<?php /* finc: myreasearch menu as list #19734 */ ?>
<?php /* finc: specify current page menu entry in following elements #19941 */ ?>
<ul class="myresearch-menu account-menu facet-group">
<?php if ($this->userlist()->getMode() !== 'disabled'): ?>
<li class="facet">
<a href="<?=$this->url('myresearch-favorites')?>"<?=$this->active == 'favorites' ? ' class="active" aria-current="page"' : ''?>>
<i class="fa fa-fw fa-star" aria-hidden="true"></i> <?=$this->transEsc('Favorites')?>
</a>
</li>
<?php endif; ?>
<?php if ($ilsOnline && $this->ils()->checkCapability('getMyTransactions', $capabilityParams)): ?>
<li class="facet">
<a href="<?=$this->url('myresearch-checkedout')?>" class="flex checkedout<?=$this->active == 'checkedout' ? ' active' : ''?>"
<?=$this->active == 'checkedout' ? ' aria-current="page"' : ''?>
>
<span class="flex-col"><i class="fa fa-fw fa-book" aria-hidden="true"></i>&nbsp;<?=$this->transEsc('Checked Out Items')?></span>
<span class="checkedout-status status hidden"><i class="fa fa-spin fa-spinner" aria-hidden="true"></i></span>
<?php /* nxt line finc specific - CK */ ?>
<span id="getMyTransactions" class="itemCount pull-right no-padding"></span>
</a>
</li>
<?php endif; ?>
<?php if ($ilsOnline && $this->ils()->checkFunction('getMyTransactionHistory', $capabilityParams)): ?>
<li class="facet">
<a href="<?=$this->url('myresearch-historicloans')?>"<?=$this->active == 'historicloans' ? ' class="active" aria-current="page"' : ''?>>
<i class="fa fa-fw fa-history" aria-hidden="true"></i> <?=$this->transEsc('Loan History')?>
</a>
</li>
<?php endif; ?>
<?php if ($ilsOnline && $this->ils()->checkCapability('getMyHolds', $capabilityParams)): ?>
<li class="facet">
<a href="<?=$this->url('myresearch-holds')?>" class="flex<?=$this->active == 'holds' ? ' active' : ''?>"
<?=$this->active == 'holds' ? ' aria-current="page"' : ''?>
>
<span class="flex-col"><i class="fa fa-fw fa-flag" aria-hidden="true"></i>&nbsp;<?=$this->transEsc('Holds and Recalls')?></span>
<span class="holds-status status hidden"><i class="fa fa-spin fa-spinner" aria-hidden="true"></i></span>
<?php /* nxt line finc specific - CK */ ?>
<span id="getMyHolds" class="itemCount pull-right no-padding"></span>
</a>
</li>
<?php endif; ?>
<?php if ($ilsOnline && $this->ils()->checkFunction('StorageRetrievalRequests', $capabilityParams)): ?>
<li class="facet">
<a href="<?=$this->url('myresearch-storageretrievalrequests')?>" class="flex<?=$this->active == 'storageRetrievalRequests' ? ' active' : ''?>"
<?=$this->active == 'storageRetrievalRequests' ? ' aria-current="page"' : ''?>
>
<span class="flex-col"><i class="fa fa-fw fa-archive" aria-hidden="true"></i> <?=$this->transEsc('Storage Retrieval Requests')?></span>
<span class="storageretrievalrequests-status status hidden"><i class="fa fa-spin fa-spinner" aria-hidden="true"></i></span>
<?php /* nxt line finc specific - CK */ ?>
<span id="getMyStorageRetrievalRequests" class="itemCount pull-right no-padding"></span>
</a>
</li>
<?php endif; ?>
<?php if ($ilsOnline && $this->ils()->checkFunction('ILLRequests', $capabilityParams)): ?>
<li class="facet">
<a href="<?=$this->url('myresearch-illrequests')?>" class="flex<?=$this->active == 'ILLRequests' ? ' active' : ''?>"
<?=$this->active == 'ILLRequests' ? ' aria-current="page"' : ''?>
>
<span class="flex-col"><i class="fa fa-fw fa-exchange" aria-hidden="true"></i>&nbsp;<?=$this->transEsc('Interlibrary Loan Requests')?></span>
<span class="illrequests-status status hidden"><i class="fa fa-spin fa-spinner" aria-hidden="true"></i></span>
<?php /* nxt line finc specific - CK */ ?>
<span id="getMyILLRequests" class="itemCount pull-right no-padding"></span>
</a>
</li>
<?php endif; ?>
<?php if ($ilsOnline && $this->ils()->checkCapability('getMyFines', $capabilityParams)): ?>
<li class="facet">
<a href="<?=$this->url('myresearch-fines')?>" class="flex<?=$this->active == 'fines' ? ' active' : ''?>"
<?=$this->active == 'fines' ? ' aria-current="page"' : ''?>
>
<span class="flex-col"><i class="fa fa-fw fa-usd" aria-hidden="true"></i>&nbsp;<?=$this->transEsc('Fines')?></span>
<span class="fines-status status hidden"><i class="fa fa-spin fa-spinner" aria-hidden="true"></i></span>
</a>
</li>
<?php endif; ?>
<li class="facet">
<a href="<?=$this->url('myresearch-profile')?>"<?=$this->active == 'profile' ? ' class="active" aria-current="page"' : ''?>>
<i class="fa fa-fw fa-user" aria-hidden="true"></i> <?=$this->transEsc('Profile')?>
</a>
</li>
<?php if ($ilsOnline && $user && $user->libraryCardsEnabled()): ?>
<li class="facet">
<a href="<?=$this->url('librarycards-home')?>"<?=$this->active == 'librarycards' ? ' class="active" aria-current="page"' : ''?>>
<i class="fa fa-fw fa-barcode" aria-hidden="true"></i> <?=$this->transEsc('Library Cards')?>
</a>
</li>
<?php endif; ?>
<?php if ($this->overdrive()->showMyContentLink()):?>
<li class="facet">
<a href="<?=$this->url('overdrive-mycontent')?>"<?=$this->active == 'dgcontent' ? ' class="active"' : ''?>>
<i class="fa fa-fw fa-download" aria-hidden="true"></i> <?=$this->transEsc('Overdrive Content')?>
</a>
</li>
<?php endif; ?>
<?php if ($this->accountCapabilities()->getSavedSearchSetting() === 'enabled'): ?>
<li class="facet">
<a href="<?=$this->url('search-history')?>?require_login"<?=$this->active == 'history' ? ' class="active" aria-current="page"' : ''?>>
<i class="fa fa-fw fa-search" aria-hidden="true"></i> <?=$this->transEsc('history_saved_searches')?>
</a>
</li>
<?php endif; ?>
<?php if ($user): ?>
<li class="facet">
<a href="<?=$this->url('myresearch-logout')?>">
<i class="fa fa-fw fa-sign-out" aria-hidden="true"></i> <?=$this->transEsc("Log Out")?>
</a>
</li>
<?php endif; ?>
</ul>
<?php if ($user && $this->userlist()->getMode() !== 'disabled'): ?>
<?php /* finc adds '.lists-heading' for styling purposes */ ?>
<h3 class="lists-heading"><?=$this->transEsc('Your Lists')?></h3>
<?php /* finc: change menu into list */ ?>
<ul class="myresearch-menu facet-group">
<li class="facet">
<?php /* finc adds aria-current */ ?>
<a href="<?=$this->url('myresearch-favorites')?>"<?=$this->active == 'favorites' ? ' class="active"' : ''?>
<?=$this->active == 'favorites' ? ' aria-current="page"' : ''?>
>
<i class="fa fa-fw fa-star" aria-hidden="true"></i> <?=$this->transEsc('Your Favorites')?>
</a>
</li>
<?php $lists = $user->getLists() ?>
<?php foreach ($lists as $list): ?>
<?php /* finc: keep icon inside + keep braces in badge!; CK*/ ?>
<li class="facet">
<a href="<?=$this->url('userList', ['id' => $list['id']])?>"<?=$this->active == 'list' . $list['id'] ? ' class="active"' : ''?>
<?=$this->active == 'list' . $list['id'] ? ' aria-current="page"' : ''?>
>
<i class="fa fa-fw fa-star-o" aria-hidden="true"></i> <?=$this->escapeHtml($list['title'])?>
<span class="badge">(<?=$list->cnt?>)</span>
</a>
</li>
<?php endforeach; ?>
<li class="facet">
<a href="<?=$this->url('editList', ['id' => 'NEW'])?>"<?=$this->active == 'editlist/NEW' ? ' class="active"' : ''?>
<?=$this->active == 'editlist/NEW' ? ' aria-current="page"' : ''?>
>
<i class="fa fa-fw fa-plus" aria-hidden="true"></i> <?=$this->transEsc('Create a List')?>
</a>
</li>
</ul>
<?php endif ?>
<!-- finc: myresearch - menu - END -->
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment