Search
Journal-scoped article search — the advanced search form and the keyword-driven results screen it (and the header quick-search box) feed into — both served by the per-journal front controller index.php (?_action=advSearch / ?_action=article).
| Page | Status | E2E | Enhanced | Legacy Ref | Route | Roles |
|---|---|---|---|---|---|---|
| Advanced Search | Full | Yes | query-builder | index.php?_action=advSearch | /?_action=advSearch | Public |
| Search Results | Full | Yes | pagination | index.php?_action=article | /?_action=article&keywords=... | Public |
Features
| Feature | Status | E2E | Description |
|---|---|---|---|
| Reader can build a field-scoped boolean article search (multiple conditions combined with AND/OR/NOT across all fields, title, author, DOI, abstract, keywords, subjects, full text) | Full | Yes | Each condition row picks its own field scope and boolean operator; the first row is mandatory and rows can be added (max 6) or removed. |
| Reader can start a quick all-fields keyword search from any public journal page header | Basic | Yes | TC-JR-HP-006 asserts the header Search link targets /new/en/advanced-search; the all-fields keyword mode itself is a condition row with scope 'all'. |
| Reader can filter search results by document/article type, offered only for types actually used by the journal's articles | Full | — | Checkbox grid; selected types are carried in the URL (types param) and shown as removable chips after search. |
| Reader can restrict the search to a publish-date range | Full | — | Date filter is off by default (no limit), matching legacy pb=0 default. |
| Reader can sort search results by article title, newest first, or oldest first | Full | — | Sort is URL-synced (sort param) and defaults to title. |
| Reader can page through search results and change results-per-page | Full | — | Legacy offered an 'All' (max_rows=0) unlimited option; the new per-page control uses fixed numeric sizes. |
| Reader can refine an executed search without retyping it (builder collapses into an applied-criteria summary and can be re-expanded) | Full | — | After a search the form collapses to the AdvancedSearchAppliedFiltersSummary panel; reopening restores the populated builder. |
| Reader can remove individual applied search criteria (condition, type, date bound) as chips from the results summary | New | — | Interactive chip removal edits the pending query; re-running the search applies the reduced criteria. |
| Reader sees an explicit no-results state with a one-click 'clear all filters' recovery | New | — | Shown only after at least one populated search has run. |
| Reader can reset the entire search form (conditions, types, date, sort) in one action | New | — | Also clears the URL search state so the reset is shareable/bookmarkable. |
| Reader gets live search-term length feedback (counter, warning, and error at the 200-character cap) | New | — | Applies to the primary condition row's term. |
| Reader loading a localized (second-language) journal site gets search matches against secondary-language title/abstract/author/subject fields | Pending | — | Legacy searchArticles() switches every searched column to its _2 variant when LANG_CODE == 2 (article.class.php:732-749); no verified counterpart in the new advanced-search API path. |
| Reader on a Persian/Hijri-locale journal enters the publish-date range in the journal's own calendar | Pending | — | Legacy pb date handling routes through pmktime/hmktime per the locale's DATE_FUNC (article.class.php:1085-1094); the new DateRangePicker is Gregorian-only as far as the web layer shows. |
| Search silently ignores terms shorter than 2 characters (quick keyword searches under 2 chars return no results) | Pending | — | Legacy guard at article.class.php:763-767 (keywords < 2 chars short-circuits) and :917 (per-token skip); not verified in the new stack's search path. |
Scope boundary on the shared
?_action=article dispatch:index.php's article/press case renders one PHP template
(article_list.php) for several different navigational entries — browse-by-issue/year
(vol=/issue=), articles-in-press (press), and the click-through
results of Browse's author/subject/keyword indexes (au=/sb=/kw=) —
all of which belong to Issues & Articles / Browse, not this module. "Search Results" above is only the
sub-view triggered when kw1 or keywords is present:
ArticleManager::articleList() then sets a searchForm flag that makes
article_list.php render a collapsible "refine search" accordion plus a search-summary banner
(active keywords/fields/date range/sort) atop the list — a materially different screen from the plain
listing the other entry points produce. The header/sidebar quick-search box is a widget embedded on other
pages, not a standalone screen — it submits ?_action=article&keywords=..., which the class
internally rewrites to kw1 (all-fields mode), landing on the same "Search Results" row rather
than a row of its own. Only the old theme implements this widget as its own standalone partial
(themes/old/front/objects/search_box.php); every other theme embeds the identical hidden
_action=article + keywords input markup inline inside header.php or
primary_menu.php instead (e.g. themes/base/front/objects/header.php,
themes/theme1/front/objects/primary_menu.php, themes/theme2/theme6's
header.php, themes/theme7/front/objects/primary_menu.php), and
theme4/theme5 have no widget file of their own — they inherit
theme1's primary_menu.php via the theme-parent stack.Judgement call — dispatch-dir correction:
the design brief's suggested anchor
("search branches in the
mainm/mainn dispatch") was traced and not confirmed:
neither mainm/index.php nor mainn/index.php contains an advSearch
case or wires up searchArticles()/articleSearchForm() reachable from a themed
per-journal page — both instead hardcode journal_code = 0 and reproduce a cross-journal
"journals list" page, matching the Home module's independent finding that these two directories are
Portal-style duplicates, not per-journal Home/Search implementations. The confirmed anchor is the
top-level index.php (case 'advSearch' / case 'article'), which
also matches apps/legacy/spec/journal/advanced-search.md's own "Controller: index.php"
references.