Bug 34478: Manual fix - change links to JS form submission - change action to op - request.pl/.tt
Bug 34478: [TO SQUASH] Manual fix - change links to JS form submission - cleanup comments and unused routine - request.pl/.tt Bug 34478: [TO SQUASH] Manual fix - link to js post and add op to form - request.tt Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
7c56ebade7
commit
8dc35c14b1
|
|
@ -95,19 +95,19 @@
|
|||
[%- SET prev_priority = loop.prev.priority -%]
|
||||
[%- SET next_priority = loop.next.priority -%]
|
||||
<td style="white-space:nowrap;">
|
||||
<a class="hold-arrow" title="Move hold up" href="request.pl?action=move&where=up&first_priority=[% first_priority | html %]&last_priority=[% last_priority | html %]&prev_priority=[% prev_priority | html %]&next_priority=[% next_priority | html %]&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
||||
<a class="hold-arrow" title="Move hold up" data-op="cud-move" data-where="up" data-first_priority="[% first_priority | html %]" data-last_priority="[% last_priority | html %]" data-prev_priority="[% prev_priority | html %]" data-next_priority="[% next_priority | html %]" data-borrowernumber="[% hold.borrowernumber | html %]" data-biblionumber="[% hold.biblionumber | html %]" data-reserve_id="[% hold.reserve_id | html %]" data-date="[% hold.date | html %]">
|
||||
<i class="fa fa-lg icon-move-hold-up" aria-hidden="true"></i>
|
||||
</a>
|
||||
|
||||
<a class="hold-arrow" title="Move hold to top" href="request.pl?action=move&where=top&first_priority=[% first_priority | html %]&last_priority=[% last_priority | html %]&prev_priority=[% prev_priority | html %]&next_priority=[% next_priority | html %]&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
||||
<a class="hold-arrow" title="Move hold to top" data-op="cud-move" data-where="top" data-first_priority="[% first_priority | html %]" data-last_priority="[% last_priority | html %]" data-prev_priority="[% prev_priority | html %]" data-next_priority="[% next_priority | html %]" data-borrowernumber="[% hold.borrowernumber | html %]" data-biblionumber="[% hold.biblionumber | html %]" data-reserve_id="[% hold.reserve_id | html %]" data-date="[% hold.date | html %]">
|
||||
<i class="fa fa-lg icon-move-hold-top" aria-hidden="true"></i>
|
||||
</a>
|
||||
|
||||
<a class="hold-arrow" title="Move hold to bottom" href="request.pl?action=move&where=bottom&first_priority=[% first_priority | html %]&last_priority=[% last_priority | html %]&prev_priority=[% prev_priority | html %]&next_priority=[% next_priority | html %]&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
||||
<a class="hold-arrow" title="Move hold to bottom" data-op="cud-move" data-where="bottom" data-first_priority="[% first_priority | html %]" data-last_priority="[% last_priority | html %]" data-prev_priority="[% prev_priority | html %]" data-next_priority="[% next_priority | html %]" data-borrowernumber="[% hold.borrowernumber | html %]" data-biblionumber="[% hold.biblionumber | html %]" data-reserve_id="[% hold.reserve_id | html %]" data-date="[% hold.date | html %]">
|
||||
<i class="fa fa-lg icon-move-hold-bottom" aria-hidden="true"></i>
|
||||
</a>
|
||||
|
||||
<a class="hold-arrow" title="Move hold down" href="request.pl?action=move&where=down&first_priority=[% first_priority | html %]&last_priority=[% last_priority | html %]&prev_priority=[% prev_priority | html %]&next_priority=[% next_priority | html %]&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
||||
<a class="hold-arrow" title="Move hold down" data-op="cud-move" data-where="down" data-first_priority="[% first_priority | html %]" data-last_priority="[% last_priority | html %]" data-prev_priority="[% prev_priority | html %]" data-next_priority="[% next_priority | html %]" data-borrowernumber="[% hold.borrowernumber | html %]" data-biblionumber="[% hold.biblionumber | html %]" data-reserve_id="[% hold.reserve_id | html %]" data-date="[% hold.date | html %]">
|
||||
<i class="fa fa-lg icon-move-hold-down" aria-hidden="true"></i>
|
||||
</a>
|
||||
</td>
|
||||
|
|
@ -225,10 +225,10 @@
|
|||
[%- UNLESS hold.found -%]
|
||||
<td>
|
||||
[% IF ( hold.lowestPriority ) %]
|
||||
<a class="hold-arrow" title="Remove lowest priority" href="request.pl?action=setLowestPriority&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
||||
<a class="hold-arrow" title="Remove lowest priority" data-op="cud-setLowestPriority" data-borrowernumber="[% hold.borrowernumber | html %]" data-biblionumber="[% hold.biblionumber | html %]" data-reserve_id="[% hold.reserve_id | html %]" data-date="[% hold.date | html %]">
|
||||
<i class="fa fa-lg fa-rotate-90 icon-unset-lowest" aria-hidden="true"></i>
|
||||
[% ELSE %]
|
||||
<a class="hold-arrow" title="Set lowest priority" href="request.pl?action=setLowestPriority&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
||||
<a class="hold-arrow" title="Set lowest priority" data-op="cud-setLowestPriority" data-borrowernumber="[% hold.borrowernumber | html %]" data-biblionumber="[% hold.biblionumber | html %]" data-reserve_id="[% hold.reserve_id | html %]" data-date="[% hold.date | html %]">
|
||||
<i class="fa fa-lg fa-rotate-90 icon-set-lowest" aria-hidden="true"></i>
|
||||
[% END %]
|
||||
</a>
|
||||
|
|
@ -238,7 +238,7 @@
|
|||
[%- END -%]
|
||||
[%- END -%]
|
||||
<td>
|
||||
<a class="cancel-hold" title="Cancel hold" data-borrowernumber="[% hold.borrowernumber | html %]" data-biblionumber="[% hold.biblionumber | html %]" data-id="[% hold.reserve_id | html %]" href="request.pl?action=cancel&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
||||
<a class="cancel-hold" title="Cancel hold" data-borrowernumber="[% hold.borrowernumber | html %]" data-biblionumber="[% hold.biblionumber | html %]" data-id="[% hold.reserve_id | html %]" href="request.pl?op=cancel&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
||||
<i class="fa fa-trash" aria-label="Cancel hold"></i>
|
||||
</a>
|
||||
</td>
|
||||
|
|
@ -262,7 +262,7 @@
|
|||
[%- END -%]
|
||||
[%- END # IF SuspendHoldsIntranet -%]
|
||||
[%- IF ( hold.found ) -%]
|
||||
<input type="button" id="revert_hold_[% hold.reserve_id | html %]" value="[% IF hold.intransit %]Revert transit status[% ELSE %]Revert waiting status[% END %]" onclick="window.location.href='request.pl?action=move&where=down&first_priority=[% first_priority | uri %]&last_priority=[% last_priority | uri %]&prev_priority=0&next_priority=1&borrowernumber=[% hold.borrowernumber | uri %]&biblionumber=[% hold.biblionumber | uri %]&itemnumber=[% hold.itemnumber | uri %]&reserve_id=[% hold.reserve_id | uri %]&date=[% hold.date | uri %]'">
|
||||
<input type="button" id="revert_hold_[% hold.reserve_id | html %]" value="[% IF hold.intransit %]Revert transit status[% ELSE %]Revert waiting status[% END %]" onclick="window.location.href='request.pl?op=move&where=down&first_priority=[% first_priority | uri %]&last_priority=[% last_priority | uri %]&prev_priority=0&next_priority=1&borrowernumber=[% hold.borrowernumber | uri %]&biblionumber=[% hold.biblionumber | uri %]&itemnumber=[% hold.itemnumber | uri %]&reserve_id=[% hold.reserve_id | uri %]&date=[% hold.date | uri %]'">
|
||||
[%- END -%]
|
||||
</td>
|
||||
[% IF ( hold.intransit || hold.atdestination ) %]
|
||||
|
|
|
|||
|
|
@ -866,7 +866,7 @@
|
|||
<span>On hold expected at [% Branches.GetName( itemloo.ExpectedAtLibrary ) | html %]</span>
|
||||
[% END %]
|
||||
[% END %]
|
||||
<a class="info cancel-hold" href="modrequest.pl?CancelBiblioNumber=[% itemloo.biblionumber | html %]&CancelBorrowerNumber=[% itemloo.ReservedFor.borrowernumber | html %]&CancelItemnumber=[% itemloo.itemnumber | html %]">Cancel hold</a>
|
||||
<a class="info cancel-hold" href="#" data-biblionumber="[% itemloo.biblionumber | html %]" data-id="[% itemloo.reserve_id | html %]">Cancel hold</a>
|
||||
[% END # /IF itemloo.nocancel %]
|
||||
[% ELSE %]
|
||||
Not on hold
|
||||
|
|
@ -1066,6 +1066,7 @@
|
|||
<h2>Existing holds</h2>
|
||||
<div id="toolbar" class="btn-toolbar">
|
||||
<div class="btn-group">
|
||||
<input type="hidden" name="op" value="cud-modifyall">
|
||||
<input type="submit" class="btn btn-primary" name="submit" value="Update hold(s)" />
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
|
|
@ -1256,6 +1257,11 @@
|
|||
<h3>Confirm deletion</h3>
|
||||
</div>
|
||||
|
||||
<form id="cancel_modal_form" method="post" action="request.pl">
|
||||
[% INCLUDE 'csrf-token.inc' %]
|
||||
<div id="inputs">
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<p>Are you sure you want to cancel this hold?</p>
|
||||
|
||||
|
|
@ -1263,7 +1269,7 @@
|
|||
[% SET hold_cancellation = AuthorisedValues.GetAuthValueDropbox('HOLD_CANCELLATION') %]
|
||||
[% IF hold_cancellation.count %]
|
||||
<label for="cancellation-reason">Cancellation reason: </label>
|
||||
<select class="cancellation-reason" name="modal-cancellation-reason" id="modal-cancellation-reason">
|
||||
<select class="cancellation-reason" name="cancellation-reason" id="modal-cancellation-reason">
|
||||
<option value="">No reason given</option>
|
||||
[% FOREACH reason IN hold_cancellation %]
|
||||
<option value="[% reason.authorised_value | html %]">[% reason.lib | html %]</option>
|
||||
|
|
@ -1274,12 +1280,20 @@
|
|||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button id="cancelModalConfirmBtn" type="button" class="btn btn-danger">Confirm cancellation</button>
|
||||
<input id="cancelModalConfirmBtn" type="submit" class="btn btn-danger" value="Confirm cancellation">
|
||||
<a href="#" data-dismiss="modal">Cancel</a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="hold-actions">
|
||||
<form id="hold-actions-form">
|
||||
[% INCLUDE 'csrf-token.inc' %]
|
||||
</form>
|
||||
</div>
|
||||
|
||||
[% MACRO jsinclude BLOCK %]
|
||||
[% INCLUDE 'datatables.inc' %]
|
||||
|
|
@ -1640,25 +1654,13 @@
|
|||
$(".cancel-hold").on("click",function(e) {
|
||||
e.preventDefault;
|
||||
cancel_link = $(this);
|
||||
$('#cancelModal').modal();
|
||||
return false;
|
||||
});
|
||||
$("#cancelModalConfirmBtn").on("click",function(e) {
|
||||
let link;
|
||||
if(cancel_link.data('bulk')) {
|
||||
[% SET data_url = 'biblionumber=' _ biblionumbers.join('&biblionumber=') %]
|
||||
link = `request.pl?[% data_url | url %]&action=cancelBulk&ids=${$('.holds_table .select_hold:checked').toArray().map(el => $(el).data('id')).join(',')}`;
|
||||
} else {
|
||||
let borrowernumber = cancel_link.data('borrowernumber');
|
||||
let biblionumber = cancel_link.data('biblionumber');
|
||||
$("#cancel_modal_form #inputs").empty();
|
||||
let reserve_id = cancel_link.data('id');
|
||||
link = `request.pl?action=cancel&borrowernumber=${ borrowernumber }&biblionumber=${ biblionumber }&reserve_id=${ reserve_id }`;
|
||||
}
|
||||
let reason = $("#modal-cancellation-reason").val();
|
||||
if ( reason ) {
|
||||
link += "&cancellation-reason=" + reason
|
||||
}
|
||||
window.location.href = link;
|
||||
let biblionumber = cancel_link.data('biblionumber');
|
||||
$("#cancel_modal_form #inputs").append('<input type="hidden" name="reserve_id" value="' + reserve_id + '">');
|
||||
$("#cancel_modal_form #inputs").append('<input type="hidden" name="biblionumber" value="' + biblionumber + '">');
|
||||
$("#cancel_modal_form #inputs").append('<input type="hidden" name="op" value="cud-cancel">');
|
||||
$('#cancelModal').modal();
|
||||
return false;
|
||||
});
|
||||
|
||||
|
|
@ -1723,13 +1725,81 @@
|
|||
e.preventDefault();
|
||||
if($('.holds_table .select_hold:checked').length) {
|
||||
cancel_link = $(this);
|
||||
$("#cancel_modal_form #inputs").empty;
|
||||
biblionumbers.forEach( function(biblionumber){
|
||||
$("#cancel_modal_form #inputs").append('<input type="hidden" name="biblionumber" value="'+biblionumber+'">');
|
||||
});
|
||||
$("#cancel_modal_form #inputs").append('<input type="hidden" name="op" value="cud-cancel_bulk">');
|
||||
let hold_ids= $('.holds_table .select_hold:checked').toArray().map(el => $(el).data('id')).join(',');
|
||||
$("#cancel_modal_form #inputs").append('<input type="hidden" name="ids" value="' + hold_ids + '">');
|
||||
delete localStorage.selectedHolds;
|
||||
$('#cancelModal').modal();
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".hold-arrow").click(function(e) {
|
||||
e.preventDefault();
|
||||
let arrowForm = $("#hold-actions-form").attr({
|
||||
action: 'request.pl',
|
||||
method: 'post'
|
||||
});
|
||||
let arrow_op = $("<input />").attr({
|
||||
name: 'op',
|
||||
type: 'hidden',
|
||||
value: $(this).data('op')
|
||||
});
|
||||
let arrow_where = $("<input />").attr({
|
||||
name: 'where',
|
||||
type: 'hidden',
|
||||
value: $(this).data('where')
|
||||
});
|
||||
let arrow_fp = $("<input />").attr({
|
||||
name: 'first_priority',
|
||||
type: 'hidden',
|
||||
value: $(this).data('first_priority')
|
||||
});
|
||||
let arrow_lp = $("<input />").attr({
|
||||
name: 'last_priority',
|
||||
type: 'hidden',
|
||||
value: $(this).data('last_priority')
|
||||
});
|
||||
let arrow_pp = $("<input />").attr({
|
||||
name: 'prev_priority',
|
||||
type: 'hidden',
|
||||
value: $(this).data('prev_priority')
|
||||
});
|
||||
let arrow_np = $("<input />").attr({
|
||||
name: 'next_priority',
|
||||
type: 'hidden',
|
||||
value: $(this).data('next_priority')
|
||||
});
|
||||
let arrow_bn = $("<input />").attr({
|
||||
name: 'borrowernumber',
|
||||
type: 'hidden',
|
||||
value: $(this).data('borrowernumber')
|
||||
});
|
||||
let arrow_bb = $("<input />").attr({
|
||||
name: 'biblionumber',
|
||||
type: 'hidden',
|
||||
value: $(this).data('biblionumber')
|
||||
});
|
||||
let arrow_ri = $("<input />").attr({
|
||||
name: 'reserve_id',
|
||||
type: 'hidden',
|
||||
value: $(this).data('reserve_id')
|
||||
});
|
||||
let arrow_date = $("<input />").attr({
|
||||
name: 'date',
|
||||
type: 'hidden',
|
||||
value: $(this).data('date')
|
||||
});
|
||||
arrowForm.append(arrow_op,arrow_where,arrow_fp,arrow_lp,arrow_pp,arrow_np,arrow_bn,arrow_bb,arrow_ri,arrow_date);
|
||||
$("#hold-actions-form").submit();
|
||||
return true;
|
||||
})
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
table_settings = [% TablesSettings.GetColumns( 'circ', 'circulation', 'table_borrowers', 'json' ) | $raw %];
|
||||
|
|
|
|||
|
|
@ -450,7 +450,32 @@ $(document).ready(function() {
|
|||
let reserve_id = $(this).data('reserve-id');
|
||||
let biblionumber = $(this).data('biblionumber');
|
||||
let suspend_until = $('#suspend_until_' + reserve_id).val();
|
||||
window.location.href='request.pl?action=toggleSuspend&reserve_id=' + reserve_id + '&biblionumber=' + biblionumber + '&suspend_until=' + suspend_until;
|
||||
let suspendForm = $("#hold-actions-form").attr({
|
||||
action: 'request.pl',
|
||||
method: 'post'
|
||||
});
|
||||
let sus_op = $("<input />").attr({
|
||||
type: 'hidden',
|
||||
name: 'op',
|
||||
value: 'cud-toggleSuspend'
|
||||
});
|
||||
let sus_bn = $("<input />").attr({
|
||||
type: 'hidden',
|
||||
name: 'biblionumber',
|
||||
value: biblionumber
|
||||
});
|
||||
let sus_ri = $("<input />").attr({
|
||||
type: 'hidden',
|
||||
name: 'reserve_id',
|
||||
value: reserve_id,
|
||||
});
|
||||
let sus_su = $("<input />").attr({
|
||||
type: 'hidden',
|
||||
name: 'suspend_until',
|
||||
value: suspend_until
|
||||
});
|
||||
suspendForm.append( sus_op, sus_bn, sus_ri, sus_su );
|
||||
$("#hold-actions-form").submit();
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -50,20 +50,8 @@ my $count=@rank;
|
|||
|
||||
@biblionumber = uniq @biblionumber;
|
||||
|
||||
my $CancelBiblioNumber = $query->param('CancelBiblioNumber');
|
||||
my $CancelBorrowerNumber = $query->param('CancelBorrowerNumber');
|
||||
my $CancelItemnumber = $query->param('CancelItemnumber');
|
||||
|
||||
# 2 possibilitys : cancel an item reservation, or modify or cancel the queded list
|
||||
|
||||
# 1) cancel an item reservation by function ModReserveCancelAll (in reserves.pm)
|
||||
if ($CancelBorrowerNumber) {
|
||||
ModReserveCancelAll($CancelItemnumber, $CancelBorrowerNumber);
|
||||
$biblionumber[0] = $CancelBiblioNumber,
|
||||
}
|
||||
|
||||
# 2) Cancel or modify the queue list of reserves (without item linked)
|
||||
elsif( $op eq 'cud-cancelall' || $op eq 'cud-modifyall' ) {
|
||||
# Cancel or modify the queue list of reserves (without item linked)
|
||||
if( $op eq 'cud-cancelall' || $op eq 'cud-modifyall' ) {
|
||||
for (my $i=0;$i<$count;$i++){
|
||||
undef $itemnumber[$i] if !$itemnumber[$i];
|
||||
my $suspend_until = $query->param( "suspend_until_" . $reserve_id[$i] );
|
||||
|
|
|
|||
|
|
@ -89,10 +89,9 @@ my $messages;
|
|||
my $exceeded_maxreserves;
|
||||
my $exceeded_holds_per_record;
|
||||
|
||||
my $action = $input->param('action');
|
||||
$action ||= q{};
|
||||
my $op = $input->param('op') || q{};
|
||||
|
||||
if ( $action eq 'move' ) {
|
||||
if ( $op eq 'cud-move' ) {
|
||||
my $where = $input->param('where');
|
||||
my $reserve_id = $input->param('reserve_id');
|
||||
my $prev_priority = $input->param('prev_priority');
|
||||
|
|
@ -110,22 +109,22 @@ if ( $action eq 'move' ) {
|
|||
);
|
||||
}
|
||||
}
|
||||
elsif ( $action eq 'cud-cancel' ) {
|
||||
elsif ( $op eq 'cud-cancel' ) {
|
||||
my $reserve_id = $input->param('reserve_id');
|
||||
my $cancellation_reason = $input->param("cancellation-reason");
|
||||
my $hold = Koha::Holds->find($reserve_id);
|
||||
$hold->cancel( { cancellation_reason => $cancellation_reason } ) if $hold;
|
||||
}
|
||||
elsif ( $action eq 'setLowestPriority' ) {
|
||||
elsif ( $op eq 'cud-setLowestPriority' ) {
|
||||
my $reserve_id = $input->param('reserve_id');
|
||||
ToggleLowestPriority($reserve_id);
|
||||
}
|
||||
elsif ( $action eq 'toggleSuspend' ) {
|
||||
elsif ( $op eq 'cud-toggleSuspend' ) {
|
||||
my $reserve_id = $input->param('reserve_id');
|
||||
my $suspend_until = $input->param('suspend_until');
|
||||
ToggleSuspend( $reserve_id, $suspend_until );
|
||||
}
|
||||
elsif ( $action eq 'cancelBulk' ) {
|
||||
elsif ( $op eq 'cud-cancel_bulk' ) {
|
||||
my $cancellation_reason = $input->param("cancellation-reason");
|
||||
my @hold_ids = split( ',', scalar $input->param("ids"));
|
||||
my $params = {
|
||||
|
|
@ -173,7 +172,7 @@ $template->param(
|
|||
|
||||
# If we have the borrowernumber because we've performed an action, then we
|
||||
# don't want to try to place another reserve.
|
||||
if ($borrowernumber_hold && !$action) {
|
||||
if ($borrowernumber_hold && !$op) {
|
||||
my $patron = Koha::Patrons->find( $borrowernumber_hold );
|
||||
my $diffbranch;
|
||||
|
||||
|
|
@ -219,7 +218,7 @@ if ($borrowernumber_hold && !$action) {
|
|||
);
|
||||
}
|
||||
|
||||
if ($club_hold && !$borrowernumber_hold && !$action) {
|
||||
if ($club_hold && !$borrowernumber_hold && !$op) {
|
||||
my $club = Koha::Clubs->find($club_hold);
|
||||
|
||||
my $enrollments = $club->club_enrollments;
|
||||
|
|
@ -432,6 +431,7 @@ if ( ( $findborrower && $borrowernumber_hold || $findclub && $club_hold )
|
|||
$item->{backgroundcolor} = 'reserved';
|
||||
$item->{reservedate} = $first_hold->reservedate;
|
||||
$item->{ReservedFor} = $p;
|
||||
$item->{reserve_id} = $first_hold->reserve_id;
|
||||
$item->{ExpectedAtLibrary} = $first_hold->branchcode;
|
||||
$item->{waitingdate} = $first_hold->waitingdate;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue