Bug 26355: (follow-up) Allow the setting of multiple information messages

Signed-off-by: Christopher Brannon <cbrannon@cdalibrary.org>
Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
Matt Blenkinsop 2026-02-23 16:24:23 +00:00 committed by Lucas Gass
parent a76eb18bed
commit cb9e70f8c2
No known key found for this signature in database
GPG Key ID: 60B447398B0D36CA
6 changed files with 100 additions and 34 deletions

View File

@ -49,10 +49,11 @@ sub start {
return try {
my $category = $patron->category;
my @information_messages = split( /\|/, $category->self_renewal_information_message );
my $self_renewal_settings = {
self_renewal_failure_message => $category->self_renewal_failure_message,
self_renewal_information_message => $category->self_renewal_information_message,
opac_patron_details => C4::Context->preference('OPACPatronDetails')
self_renewal_failure_message => $category->self_renewal_failure_message,
self_renewal_information_messages => \@information_messages,
opac_patron_details => C4::Context->preference('OPACPatronDetails')
};
return $c->render(

View File

@ -47,8 +47,10 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
if ( $op eq 'add_form' ) {
my $category = Koha::Patron::Categories->find($categorycode);
$template->param(
category => scalar Koha::Patron::Categories->find($categorycode),
category => scalar $category,
self_renewal_information_messages => parse_renewal_info_message( $category->self_renewal_information_message )
);
if ( C4::Context->preference('EnhancedMessagingPreferences') ) {
@ -83,7 +85,7 @@ if ( $op eq 'add_form' ) {
my $self_renewal_availability_start = $input->param('self_renewal_availability_start');
my $self_renewal_fines_block = $input->param('self_renewal_fines_block');
my $self_renewal_failure_message = $input->param('self_renewal_failure_message');
my $self_renewal_information_message = $input->param('self_renewal_information_message');
my @self_renewal_information_message = $input->multi_param('self_renewal_information_message');
my $self_renewal_if_expired = $input->param('self_renewal_if_expired');
my @branches = grep { $_ ne q{} } $input->multi_param('branches');
@ -130,7 +132,7 @@ if ( $op eq 'add_form' ) {
$category->self_renewal_availability_start($self_renewal_availability_start);
$category->self_renewal_fines_block($self_renewal_fines_block);
$category->self_renewal_failure_message($self_renewal_failure_message);
$category->self_renewal_information_message($self_renewal_information_message);
$category->self_renewal_information_message( parse_renewal_info_message( \@self_renewal_information_message ) );
$category->self_renewal_if_expired($self_renewal_if_expired);
eval {
$category->store;
@ -174,8 +176,8 @@ if ( $op eq 'add_form' ) {
self_renewal_availability_start => $self_renewal_availability_start,
self_renewal_fines_block => $self_renewal_fines_block,
self_renewal_failure_message => $self_renewal_failure_message,
self_renewal_information_message => $self_renewal_information_message,
self_renewal_if_expired => $self_renewal_if_expired,
self_renewal_information_message => parse_renewal_info_message( \@self_renewal_information_message ),
self_renewal_if_expired => $self_renewal_if_expired,
}
);
eval {
@ -246,3 +248,17 @@ $template->param(
output_html_with_http_headers $input, $cookie, $template->output;
exit 0;
sub parse_renewal_info_message {
my ($message) = @_;
if ( ref($message) eq 'ARRAY' ) {
my $info_message = join( '|', @$message );
return $info_message;
} else {
my @info_messages = split( /\|/, $message );
return scalar(@info_messages) > 0 ? \@info_messages : [""];
}
return $message;
}

View File

@ -554,14 +554,22 @@
the [%- pref_noissuescharge_link | $raw | $KohaSpan -%] system preference.</div
>
</li>
<li>
<label for="self_renewal_information_message">Self-renewal information message: </label>
[% IF (category.self_renewal_information_message) %]
<textarea type="text" name="self_renewal_information_message" id="self_renewal_information_message" cols="40" rows="2">[% category.self_renewal_information_message | html %]</textarea>
[% ELSE %]
<textarea type="text" name="self_renewal_information_message" id="self_renewal_information_message" cols="40" rows="4"></textarea>
[% END %]
</li>
[% FOREACH info_message IN self_renewal_information_messages %]
<li>
<label for="self_renewal_information_message_[% loop.index | html %]">Self-renewal information message[% IF(loop.index > 0) %][% loop.index + 1 | html %][% END %]: </label>
[% IF (info_message) %]
<textarea type="text" name="self_renewal_information_message" id="self_renewal_information_message_[% loop.index | html %]" cols="40" rows="2">[% info_message | html %]</textarea>
[% ELSE %]
<textarea type="text" name="self_renewal_information_message" id="self_renewal_information_message_[% loop.index | html %]" cols="40" rows="4"></textarea>
[% END %]
<a href="#" class="clear_message"><i class="fa fa-fw fa-trash-can"></i> Clear</a>
<a href="#" class="clone_message"><i class="fa fa-fw fa-plus"></i> New</a>
</li>
[% END %]
<div class="hint"
>Information to be displayed to the patron at the start of the renewal process. This will be displayed as a Yes/No question and you can add multiple questions - an answer of 'Yes' proceeds to the next question, 'No'
exits the process and displays the Self-renewal failure message.</div
>
<li>
<label for="self_renewal_failure_message">Self-renewal failure message: </label>
[% IF (category.self_renewal_failure_message) %]
@ -922,6 +930,29 @@
[% INCLUDE 'select2.inc' %]
<script nonce="[% Koha.CSPNonce | $raw %]">
var table_settings = [% TablesSettings.GetTableSettings( 'admin', 'categories', 'patron_categories', 'json' ) | $raw %];
$(document).ready(function () {
$("#category_form").on(
"click",
".clone_message",
function (e) {
e.preventDefault();
var original = $(this).parent();
var clone = $(this).parent().clone();
$(clone).children("div.hint").remove()
$(original).after(clone);
return false;
}
);
$("#category_form").on(
"click",
".clear_message",
function (e) {
e.preventDefault();
var original = $(this).parent();
$("input", original).val("");
}
);
});
</script>
[% Asset.js("js/categories.js") | $raw %]
[% END %]

View File

@ -28,10 +28,14 @@
/>
<VerificationChecks
v-if="activeStep === 'confirmation'"
:informationMessage="
$__('Are you sure you want to renew your account?')
"
:renewalSettings="renewalSettings"
:renewalSettings="{
...renewalSettings,
self_renewal_information_messages: [
$__(
'Are you sure you want to renew your account?'
),
],
}"
@verification-successful="submitRenewal"
/>
<div v-if="activeStep === 'detailsCheck'">
@ -96,7 +100,7 @@ export default {
...response.self_renewal_settings,
};
activeStep.value = response.self_renewal_settings
.self_renewal_information_message
.self_renewal_information_messages?.length
? "verification"
: response.self_renewal_settings.opac_patron_details ===
"1"

View File

@ -1,6 +1,6 @@
<template>
<fieldset class="rows" v-if="!verificationFailure">
<span class="verification_question">{{ verificationCheck }}</span>
<span class="verification_question">{{ activeCheck }}</span>
<div class="verification_actions">
<button class="btn btn-success" @click="verificationPassed()">
{{ $__("Yes") }}
@ -20,18 +20,30 @@ import { $__ } from "@koha-vue/i18n";
export default {
props: {
renewalSettings: Object,
informationMessage: String,
confirmation: Boolean,
},
emits: ["verification-successful"],
setup(props, { emit }) {
const checkCount = ref(
props.renewalSettings.self_renewal_information_messages.length
);
const completedCount = ref(0);
const verificationFailure = ref(false);
const verificationCheck = ref(
props.informationMessage ||
props.renewalSettings.self_renewal_information_message
const activeCheck = ref(
props.renewalSettings.self_renewal_information_messages[0]
);
const verificationPassed = () => {
emit("verification-successful");
if (completedCount.value === checkCount.value - 1) {
emit("verification-successful");
} else {
completedCount.value++;
activeCheck.value =
props.renewalSettings.self_renewal_information_messages[
completedCount.value
];
}
};
const verificationFailed = () => {
verificationFailure.value = true;
@ -44,11 +56,13 @@ export default {
});
return {
verificationCheck,
checkCount,
activeCheck,
verificationPassed,
verificationFailed,
verificationFailure,
errorMessage,
completedCount,
};
},
};

View File

@ -74,9 +74,9 @@ subtest 'start()' => sub {
->status_is( 200, 'REST3.2.2' )->json_is(
{
self_renewal_settings => {
self_renewal_failure_message => $category->self_renewal_failure_message,
self_renewal_information_message => $category->self_renewal_information_message,
opac_patron_details => 1
self_renewal_failure_message => $category->self_renewal_failure_message,
self_renewal_information_messages => [ $category->self_renewal_information_message ],
opac_patron_details => 1
}
}
);
@ -95,9 +95,9 @@ subtest 'start()' => sub {
->status_is( 200, 'REST3.2.2' )->json_is(
{
self_renewal_settings => {
self_renewal_failure_message => $category->self_renewal_failure_message,
self_renewal_information_message => $category->self_renewal_information_message,
opac_patron_details => 1
self_renewal_failure_message => $category->self_renewal_failure_message,
self_renewal_information_messages => [ $category->self_renewal_information_message ],
opac_patron_details => 1
}
}
);