/
layout.phtml
238 lines (228 loc) · 11.6 KB
/
layout.phtml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
<?php
// Set page title.
$this->headTitle($this->translate('Advanced Search'));
// Disable top search box -- this page has a special layout.
$this->layout()->searchbox = false;
// Set up breadcrumbs:
$searchCrumb = $this->searchMemory()->getLastSearchLink($this->transEsc('Search')) ?: $this->transEsc('Search');
$this->layout()->breadcrumbs = "<li>$searchCrumb</li> ";
$this->layout()->breadcrumbs .= '<li class="active">' . $this->transEsc('Advanced') . '</li>';
// Set up saved search details:
if (isset($this->saved) && is_object($this->saved)) {
$searchDetails = $this->saved->getParams()->getQuery();
if ($searchDetails instanceof \VuFindSearch\Query\Query) {
// Not an advanced query -- ignore it.
$searchDetails = $groups = false;
} else {
$groups = $searchDetails->getQueries();
}
$hasDefaultsApplied = $this->saved->getParams()->hasDefaultsApplied();
$checkboxFilters = array_filter(
$this->saved->getParams()->getCheckboxFacets(),
function ($current) {
return $current['selected'];
}
);
$searchFilters = $this->saved->getParams()->getFilterList(true);
$hiddenFilters = $this->saved->getParams()->getHiddenFilters();
} else {
$hasDefaultsApplied = $searchDetails = $checkboxFilters = $searchFilters = $groups = false;
$hiddenFilters = $this->searchTabs()->getHiddenFilters($this->searchClassId, true);
}
// Step 1: Load the javascript
$this->headScript()->appendFile(
$this->advancedSearchJsOverride ?? 'advanced_search.js'
);
// Step 2: Build the page
$this->headScript()->appendScript(
$this->partial(
$this->buildPageOverride ?? 'search/advanced/build_page.phtml',
['options' => $this->options, 'searchDetails' => $searchDetails]
)
);
// Collect previous search queries
$setSearchGroups = [];
$setGroupCount = 0;
$setQueries = [];
if (isset($searchDetails) && is_object($searchDetails)) {
foreach ($searchDetails->getQueries() as $group => $searchGroup) {
$setSearchGroups[$group] = $searchGroup->isNegated() ? 'NOT' : $searchGroup->getOperator();
if ($setGroupCount < $group) {
$setGroupCount = $group;
}
if (!isset($setQueries[$group])) {
$setQueries[$group] = [];
}
foreach ($searchGroup->getQueries() as $search) {
$setQueries[$group][] = $search;
}
}
}
// Set up help topics
$helpTopics = $this->helpTopics ?? [
'advsearch' => 'Help with Advanced Search',
'search' => 'Help with Search Operators',
];
?>
<?=$this->flashmessages()?>
<div role="search">
<form name="searchForm" id="advSearchForm" method="get" action="<?=$this->url($this->options->getSearchAction())?>">
<?php foreach ($hiddenFilters as $key => $filter): ?>
<?php foreach ($filter as $value): ?>
<input type="hidden" name="hiddenFilters[]" value="<?=$this->escapeHtmlAttr($key) . ':' . $this->escapeHtmlAttr($value)?>">
<?php endforeach; ?>
<?php endforeach; ?>
<div class="<?=$this->layoutClass('mainbody')?>">
<?php $lastSort = $this->searchMemory()->getLastSort($this->searchClassId); ?>
<?php if (!empty($lastSort)): ?>
<input type="hidden" name="sort" value="<?=$this->escapeHtmlAttr($lastSort)?>">
<?php endif; ?>
<div class="clearfix">
<h2 class="pull-left flip"><?=$this->transEsc('Advanced Search')?></h2>
<div id="groupJoin" class="form-inline pull-right flip">
<label for="groupJoinOptions"><?=$this->transEsc('search_match')?>:</label>
<select id="groupJoinOptions" name="join" class="form-control">
<option value="AND"<?php if ($searchDetails && $searchDetails->getOperator() == 'ALL'):?> selected<?php endif; ?>><?= $this->transEsc('group_AND') ?></option>
<option value="OR"<?php if ($searchDetails && $searchDetails->getOperator() == 'OR'):?> selected<?php endif; ?>><?= $this->transEsc('group_OR') ?></option>
</select>
</div>
</div>
<a role="button" class="icon-link hidden" id="groupPlaceHolder" href="#">
<?=$this->icon('ui-add', 'icon-link__icon') ?>
<span class="icon-link__label"><?= $this->transEsc('add_search_group') ?></span>
</a>
<?php /* fallback to a fixed set of search groups/fields if JavaScript is turned off */ ?>
<div class="no-js">
<?php if (!empty($this->formOverride)): ?>
<?=$this->formOverride ?>
<?php else: ?>
<?php for($group = 0; $group < 3 || $group <= $setGroupCount; $group++): ?>
<?php if ($group == 0): ?>
<div id="new_group_template">
<?php endif; ?>
<div id="group<?=$group ?>" class="adv-group">
<div class="adv-group-terms">
<label class="adv-group-label"><?=$this->transEsc('adv_search_label')?>:</label>
<?php for($search = 0; $search < 3 || (isset($setQueries[$group]) && $search < count($setQueries[$group])); $search++): ?>
<?php if ($group == 0 && $search == 0): ?>
<div id="new_search_template">
<?php endif; ?>
<div id="search<?=$group . '_' . $search ?>" class="adv-search">
<input name="lookfor<?=$group ?>[]" id="search_lookfor<?=$group . '_' . $search ?>" class="adv-term-input form-control" type="text"<?php if (isset($setQueries[$group][$search])): ?> value="<?=$this->escapeHtmlAttr($setQueries[$group][$search]->getString())?>"<?php endif; ?> aria-label="<?=$this->transEscAttr('search_terms')?>">
<select class="adv-term-type form-control" name="type<?=$group ?>[]" aria-label="<?=$this->transEscAttr('Search type')?>">
<?php foreach ($this->options->getAdvancedHandlers() as $searchVal => $searchDesc): ?>
<option value="<?=$this->escapeHtmlAttr($searchVal)?>"<?php if (isset($setQueries[$group][$search]) && $searchVal == $setQueries[$group][$search]->getHandler()): ?> selected<?php endif; ?>><?=$this->transEsc($searchDesc)?></option>
<?php endforeach; ?>
</select>
<a href="#" class="adv-term-remove hidden">
<?=$this->icon('ui-remove') ?>
<span class="sr-only"><?=$this->transEsc('remove') ?></span>
</a>
</div>
<?php if ($group == 0 && $search == 0): ?>
</div>
<div class="float-left">
<span class="search_place_holder hidden"></span>
<a href="#" class="add_search_link icon-link hidden" role="button">
<?=$this->icon('ui-add', 'icon-link__icon') ?>
<span class="icon-link__label"><?=$this->transEsc('add_search')?></span>
</a>
</div>
<?php endif; ?>
<?php endfor; ?>
</div>
<div class="adv-group-match">
<label class="search_bool"><?=$this->transEsc('search_match')?>: </label>
<select name="bool<?=$group ?>[]" id="search_bool<?=$group ?>" class="form-control">
<option value="AND"<?php if (isset($setSearchGroups[$group]) && 'AND' == $setSearchGroups[$group]):?> selected<?php endif; ?>><?=$this->transEsc('search_AND')?></option>
<option value="OR"<?php if (isset($setSearchGroups[$group]) && 'OR' == $setSearchGroups[$group]):?> selected<?php endif; ?>><?=$this->transEsc('search_OR')?></option>
<option value="NOT"<?php if (isset($setSearchGroups[$group]) && 'NOT' == $setSearchGroups[$group]):?> selected<?php endif; ?>><?=$this->transEsc('search_NOT')?></option>
</select>
</div>
<a href="#" class="adv-group-close icon-link hidden" role="button">
<?=$this->icon('ui-remove', 'icon-link__icon') ?>
<span class="icon-link__label"><?=$this->transEsc('del_search') ?></span>
</a>
</div>
<?php if ($group == 0): ?>
</div>
<?php endif; ?>
<?php endfor; ?>
<?php endif; ?>
</div>
<div class="adv-submit">
<input class="clear-btn btn btn-default" type="button" value="<?= $this->transEscAttr('Clear')?>">
<input class="btn btn-primary" type="submit" value="<?= $this->transEscAttr('Find')?>">
</div>
<?php if (isset($this->extraAdvancedControls)): ?>
<div class="clearfix">
<?=$this->extraAdvancedControls ?>
</div>
<div class="adv-submit">
<input class="clear-btn btn btn-default" type="button" value="<?= $this->transEscAttr('Clear')?>">
<input class="btn btn-primary" type="submit" value="<?= $this->transEscAttr('Find')?>">
</div>
<?php endif; ?>
</div>
<div class="<?=$this->layoutClass('sidebar')?>">
<?php if ($hasDefaultsApplied): ?>
<input type="hidden" name="dfApplied" value="1">
<?php endif ?>
<?php if ($checkboxFilters || $searchFilters): ?>
<h2><?=$this->transEsc('adv_search_filters')?></h2>
<div class="facet-group">
<label class="checkbox">
<input type="checkbox" checked="checked" class="checkbox-select-all">
<?=$this->transEsc('adv_search_select_all')?>
</label>
</div>
<?php if ($checkboxFilters): ?>
<div class="checkboxFilter">
<?php foreach ($checkboxFilters as $data): ?>
<div class="checkbox-filter">
<label class="facet checkbox"><input class="checkbox-select-item" type="checkbox" checked="checked" name="filter[]" value="<?=$this->escapeHtmlAttr($data['filter'])?>"> <?=$this->transEsc($data['desc'])?></label>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php foreach ($searchFilters as $field => $data): ?>
<div class="facet-group">
<div class="title"><?=$this->transEsc($field)?></div>
<?php foreach ($data as $i => $value): ?>
<?php $operator = $value['operator'] ?? 'AND'; ?>
<label class="facet checkbox">
<input class="checkbox-select-item" type="checkbox" checked="checked" name="filter[]" value="<?=$this->escapeHtmlAttr($this->operatorToFieldPrefix($operator) . $value['field'] . ':"' . $value['value'] . '"')?>">
<?php if ($operator === 'NOT'): ?>
<?=$this->transEsc('NOT')?>
<?php elseif ($operator === 'OR' && $i > 0): ?>
<?=$this->transEsc('OR')?>
<?php endif; ?>
<?=$this->escapeHtml($value['displayText'])?>
</label>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
<?php endif; ?>
<?php if ($helpTopics): ?>
<h2><?=$this->transEsc('Search Tips')?></h2>
<?php // Data-title attribute is for analytics use. Do not remove. ?>
<ul class="facet-group" data-title="<?=$this->escapeHtmlAttr('Search Tips') ?>">
<?php foreach ($helpTopics as $topic => $title): ?>
<li class="facet">
<a class="help-link" data-lightbox href="<?=$this->url('help-home', [], ['query' => ['topic' => $topic, '_' => time()]])?>"><?=$this->transEsc($title)?></a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
</form>
</div>
<?php
$script = <<<JS
$('#groupPlaceHolder').click(function(e) {
addGroup(null, null, null, true);
return false;
})
JS;
?>
<?=$this->inlineScript(\Laminas\View\Helper\HeadScript::SCRIPT, $script, 'SET');