1 [% PROCESS "opac/parts/misc_util.tt2";
2 PROCESS "opac/parts/hold_error_messages.tt2";
3 PROCESS "opac/parts/metarecord_hold_filters.tt2";
6 // Toggle the activation date input and check the suspend checkbox.
7 // If JavaScript is disabled, the CSS will handle the former, but
8 // the latter will not happen.
9 function toggleActivationDate() {
10 var cb = document.getElementById("hold_suspend");
11 var block = document.getElementById("toggled-block-suspend");
12 var anchor = document.getElementById("actDateToggle");
13 var actText = "[%- l('Hide activation date') -%]";
14 var inActText = "[%- l('Set activation date') -%]";
15 // Check for not equal to block so it works on first click.
16 if (block.style.display != "block") {
17 block.style.display = "block";
18 anchor.innerHTML = actText;
19 if (cb.checked != true) cb.checked = true;
21 block.style.display = "none";
22 anchor.innerHTML = inActText;
24 // Prevent the href from being followed, thus overriding the CSS.
28 // Maybe enable or disable the num_copies select when the user selects
29 // or deselects a part.
30 function maybeToggleNumCopies(obj) {
31 var numCopies = document.getElementById("num_copies");
32 // Only if numCopies exists.
35 if (obj.type == 'radio') {
36 if (obj.checked) objValue = obj.value;
41 if (objValue && objValue != '') {
42 if (numCopies.value != '1') numCopies.value = '1';
43 if (!numCopies.disabled) numCopies.disabled = true;
45 if (numCopies.disabled) numCopies.disabled = false;
50 <div id='holds_box' class='canvas' style='margin-top: 6px;'>
51 <h1>[% l('Place Hold') %]</h1>
53 [% some_holds_allowed = -1 %]
55 <!-- loop through the holds and display status of request where appropriate -->
56 [% FOR hdata IN ctx.hold_data;
57 attrs = {marc_xml => hdata.marc_xml};
58 PROCESS get_marc_attrs args=attrs;
59 this_hold_disallowed = 0;
61 IF CGI.param('hold_type') == 'M';
62 IF hdata.metarecord_filters.formats.size == 0;
63 this_hold_disallowed = 1;
64 # if this is the first hold and it's disallowed,
65 # assume all holds are, until we proven otherwise
66 SET some_holds_allowed = 0 IF some_holds_allowed == -1;
67 ELSE; some_holds_allowed = 1; END;
71 <form method="post" name="PlaceHold" onsubmit="return validateHoldForm()" >
72 <input type="hidden" name="hold_type" value="[% CGI.param('hold_type') | html %]" />
74 redirect = CGI.param('hold_source_page') || CGI.param('redirect_to') || CGI.referer;
75 # since we have to be logged in to get this far, return to a secure page
76 redirect = redirect.replace('^http:', 'https:')
78 <input type="hidden" name="redirect_to" value="[% redirect | html %]" />
79 <input type="hidden" name="hold_source_page" value="[% CGI.param('hold_source_page') | html %]" />
81 <!-- Adding hidden fields so that parameters are maintained in
82 searchbar throughout the place hold process. -->
83 <input type="hidden" name="locg" value="[% CGI.param('locg') | html %]" />
84 <input type="hidden" name="qtype" value="[% CGI.param('qtype') | html %]" />
85 <input type="hidden" name="query" value="[% CGI.param('query') | html %]" />
87 usr_barcode = CGI.param('usr_barcode') | html;
88 is_requestor = CGI.param('is_requestor');
90 IF is_requestor == '';
94 IF is_requestor == '0' && usr_barcode == ctx.staff_recipient.card.barcode;
100 <p class="staff-hold">
101 <input type="radio" id="hold_usr_is_requestor_not"
102 onchange="staff_hold_usr_input_disabler(this);"
103 name="hold_usr_is_requestor" value="0"
105 <label for="hold_usr_is_requestor_not">
106 [% l("Place hold for patron by barcode:") %]
108 <input type="text" name="hold_usr" id="hold_usr_input"
109 value="[% usr_barcode | html %]"
110 onchange="staff_hold_usr_barcode_changed();"
111 onpaste="setTimeout(staff_hold_usr_barcode_changed,1);"
112 onkeypress="return no_hold_submit(event)" autofocus />
113 <span id="patron_name"></span>
114 <span id="patron_usr_barcode_not_found" style="display: none">
115 [% l('Patron barcode was not found') %]
117 [% IF ctx.is_browser_staff %]
118 <button id="hold_usr_search" type="button" class="opac-button" style="display: none;">[% l('Patron Search') %]</button>
121 <input type="hidden" id="staff_barcode"
122 value="[% ctx.staff_recipient.card.barcode | html %]"/>
124 <input type="radio" id="hold_usr_is_requestor"
125 onchange="staff_hold_usr_input_disabler(this);"
126 name="hold_usr_is_requestor" value="1" />
127 <label for="hold_usr_is_requestor">
128 [% l("Place this hold for me ([_1] [_2])", ctx.user.first_given_name, ctx.user.family_name) | html %]
135 <table id='hold-items-list'>
138 [% IF !this_hold_disallowed %]
139 <input type="hidden" name="hold_target" value="[% hdata.target.id | html %]" />
141 <div class='hold-items-list-title'>
142 <!-- If hold is for grouped formats/editions (metarecord), show short title - else, show complete title -->
143 [% IF CGI.param('hold_type') == 'M' %]
144 [% attrs.title | html %]
146 [% attrs.title_extended | html %]
149 [% IF hdata.parts AND !this_hold_disallowed %]
150 [% IF hdata.parts.size > 0 %]
151 <div class='hold-div'>
152 [% IF enable.radio.parts == 'true' %]
153 <span class='hold-span'><label for='select_hold_part'>[%
156 <div class='radio-parts-selection'>
157 [% IF !hdata.part_required %]
158 <span class='parts-radio-option'>
159 <input type='radio' name='part' value='' onchange='maybeToggleNumCopies(this);' required>[% l('All Parts') %]</span>
161 [% FOR part IN hdata.parts %]
162 <span class='parts-radio-option'><input type='radio' name='part' id=[% part.id %] value=[% part.id %] onchange='maybeToggleNumCopies(this);' required>
163 <label for=[% part.id %]>[% part.label | html %]</label></span>
167 <span style='font-weight: bold;'><label for='select_hold_part'>[%
168 hdata.part_required ? l('Select a Part:') : l('Select a Part (optional):')
170 <select id='select_hold_part' name='part' onchange='maybeToggleNumCopies(this);'>
171 [% IF !hdata.part_required %]
172 <option selected='selected' value=''>[% l('- All Parts -') %]</option>
174 [% FOR part IN hdata.parts %]
175 <option value='[% part.id %]'>[% part.label | html %]</option>
181 <input type='hidden' name='part' value=''/>
184 [% INCLUDE "opac/parts/multi_hold_select.tt2" IF NOT (this_hold_disallowed AND hdata.part_required); %]
185 [% IF NOT metarecords.disabled AND ctx.hold_data.size == 1 %]
186 [% IF CGI.param('hold_type') == 'T' AND hdata.record.metarecord AND !hdata.part_required %]
187 <!-- Grab the bre_id so that we can restore it if user accidentally clicks advanced options -->
188 [% bre_id = hdata.target.id %]
189 <a id='advanced_hold_link'
190 href="[% mkurl('', {hold_type => 'M', hold_target => hdata.record.metarecord.id, bre_id => bre_id}) %]">
191 [% l('Advanced Hold Options') %]</a>
193 [% IF CGI.param('hold_type') == 'M' AND CGI.param('bre_id') %]
194 <input type="hidden" name="bre_id" value="[% CGI.param('bre_id') %]" />
195 <a id='basic_hold_link'
196 href="[% mkurl('', {hold_target => CGI.param('bre_id'), hold_type => 'T'}) %]">
197 [% l('Basic Hold Options') %]</a>
199 [% IF hdata.metarecord_filters.formats.size OR # should this be size > 1
200 (hdata.metarecord_filters.langs.size && hdata.metarecord_filters.langs.size > 1);
201 PROCESS metarecord_hold_filters_selector hold_data=hdata;
207 [% IF this_hold_disallowed %]
209 <div class="mr_holds_no_formats">
210 [% l('This item does not have any formats available for holds placement') %]
215 [% IF !loop.last AND ctx.hold_data.size > 1 %]
216 <tr class="holds_item_row_separator"><td> </td></tr>
222 [% IF some_holds_allowed %]
225 [%- org_select_id = 'pickup_lib'; -%]
226 <label for="[% org_select_id %]">[%l('Pickup location:') %]</label>
227 [% PROCESS "opac/parts/org_selector.tt2";
228 INCLUDE build_org_selector name='pickup_lib'
229 value=ctx.default_pickup_lib id=org_select_id
230 can_have_vols_only=1 hold_pickup_lib=1 %]
233 [% l('Notify when hold is ready for pickup?') %]
235 <input class="hold-alert-method" type="checkbox" id="email_notify" name="email_notify" value="t"
236 [% IF !ctx.user.email %]disabled="true"[% ELSIF ctx.default_email_notify %]checked="checked"[% END %]/>
237 <label for="email_notify">[% l('Yes, by Email') %]</label><br/>
239 [% IF !ctx.user.email and !ctx.is_staff; l('No configured Email address. See "My Account" for setting your Email address.');
240 ELSE; l('Email Address:') %] <span name="email_address">[% ctx.user.email %]</span>[% END %]
242 [%- IF allow_phone_notifications == 'true' %]
243 <input class="hold-alert-method" type="checkbox" id="phone_notify_checkbox" name="phone_notify_checkbox"
244 [% IF ctx.default_phone_notify %]checked="checked"[% END %]/>
245 <label for="phone_notify_checkbox">[% l('Yes, by Phone') %]</label><br/>
247 <label>[% l('Phone Number:') %]<input type="text" name="phone_notify" [% setting = 'opac.default_phone';
248 IF ctx.user_setting_map.$setting; %] value='[% ctx.user_setting_map.$setting | html %]'
249 [%- ELSIF ctx.user.day_phone; %] value='[% ctx.user.day_phone | html %]' [% END %]/></label>
252 [% IF ctx.get_org_setting(ctx.search_ou, 'sms.enable') == 1 %]
253 <input class="hold-alert-method" type="checkbox" id="sms_notify_checkbox" name="sms_notify_checkbox"
254 [% IF ctx.default_sms_notify %]checked="checked"[% END %]/>
255 <label for="sms_notify_checkbox">[% l('Yes, by Text Messaging') %]</label><br/>
257 [% INCLUDE "opac/parts/sms_carrier_selector.tt2" %]<br/>
258 [% INCLUDE "opac/parts/sms_number_textbox.tt2" %]<br/>
263 [% IF ctx.hold_data.size == 1;
264 l('Suspend this hold?');
266 l('Suspend these holds?');
268 <img src="[% ctx.media_prefix %]/images/question-mark.png[% ctx.cache_key %]"
269 alt="[% l('Suspend Hold Help') %]"
270 title="[% l('A suspended hold will retain its place in the queue, but will not be fulfilled until it has been activated.') %]" />
272 <input type="checkbox" name="hold_suspend" id="hold_suspend" value="t"/> [% l('Yes') %]
273 <a id="actDateToggle" href="#toggled-block-suspend" onclick="return toggleActivationDate();">[% l('Set activation date') %]</a>
275 <blockquote id="toggled-block-suspend">
276 <label for="thaw_date">[% l('Activate on') %]</label>
277 <input type="text" id="thaw_date" name="thaw_date" />
278 <em>[% l('Enter date in MM/DD/YYYY format') %]</em>
281 [% IF CGI.param('from_basket') %]
282 <blockquote><input type="checkbox" name="clear_cart">[% l('Clear basket after holds are requested?') %]</input></blockquote>
284 <input id="place_hold_submit" type="submit" name="submit"
285 value="[% l('Submit') %]" title="[% l('Submit') %]"
286 alt="[% l('Submit') %]" class="opac-button" />
287 [% END # some_holds_allowed %]
288 <input type="reset" name="cancel" onclick="window.location='[% redirect | html %]'" value="[% l('Cancel') %]" id="holds_cancel" class="opac-button" />