Journals
Cross-journal discovery on the root public site's home screen (main/index.php, default view, no _action) — the directory of all active journals, filterable by primary language.
| Page | Status | E2E | Enhanced | Legacy Ref | Route | Roles |
|---|---|---|---|---|---|---|
| Journal Directory | Full | Yes | faceted-filters | main/index.php | / | Public |
| Journal Directory — mainm/mainn Portal-style variant | Full | Yes | pagination | mainm/index.php default view | / | Public |
| Journal Directory — Filtered by Subject / Live AJAX Filter (mainm/mainn) | Full | Yes | url-driven-state | mainm/index.php?list=<subject_code> dispatch | /list_<subject_code>.html | Public |
| Journal Directory — Raw Email Export (mainm/mainn ?ls) | Dropped | — | — | mainm/index.php:218-240 | /?ls | Public — no auth/session gate; unreferenced by any template, .htaccess rewrite, or right.php sidebar link (grepped apps/legacy/js for GET['ls'] and ?ls — only hits are the two definitions themselves); reachable only via a hand-typed URL, and returns every journal's title/base URL/contact email with no status filter |
| Publishers Directory | New | Yes | — | — | /en/publishers | Public |
| Publisher Detail | New | — | — | — | /en/publishers/<code> | Public |
| Publisher Sub-Organizations | New | — | — | — | /en/publishers/<code>/sub-organizations | Public |
Features
| Feature | Status | E2E | Description |
|---|---|---|---|
| Visitor can browse a directory of all active journals, each card linking straight out to that journal's own site | Full | Yes | Directory shows cover thumbnail (latest issue coversheet, logo, or locale fallback in legacy) and title per journal; there is no portal-hosted per-journal detail page — cards exit to the journal's own home. |
| Visitor can filter the journal directory by subject/category | Full | Yes | Legacy single-subject pretty-URL filter becomes a multi-select facet; a single selected category also becomes the page heading. |
| Visitor can filter the journal directory by language | Full | Yes | Language moves from an admin-configured layout grouping to a user-selectable facet. |
| Visitor can search journal titles with live results | Full | Yes | Legacy transient AJAX partial becomes shareable, back-navigable URL state. |
| Visitor can filter journals by publisher name (legacy ju_pub free-text field with datalist of known publishers) | Pending | — | Legacy live filter (mainm/index.php:516-529, matching ow_note journal setting) has no publisher facet in the ported sidebar; not positively dropped — the inventory tooltip records it as a gap. |
| Visitor can sort the journal directory | Full | Yes | Sorting is greatly expanded from legacy's fixed title ordering. |
| Visitor can page through the journal directory | New | Yes | No legacy predecessor — legacy rendered the whole catalog unpaginated. |
| Visitor sees removable filter chips and fully URL-driven, shareable filter/search/sort state | New | Yes | Filters, search, sort and page are all shareable and back/forward-navigable. |
| Visitor can filter journals by publication frequency and by indexing database, with per-facet result counts | New | Yes | Two entirely new facet dimensions alongside subject and language. |
| Visitor on mobile gets dedicated filter and sort UIs | New | Yes | Responsive filter drawer/sort controls for small screens. |
| Visitor sees skeleton loading states and explicit empty/error states in the directory | New | Yes | Loading and no-results experiences are designed states rather than blank output. |
| Admin can group the directory into two language blocks (sep_by_lang) or switch to a thumbnail-less two-column text-link layout (no_thumb) | Dropped | — | Admin-configured layout toggles are superseded by user-driven faceting; no counterpart is planned. |
| Visitor can load a chromeless/embeddable subject-filtered journal list (?av / list_<code>_av.html) with header and footer suppressed | Pending | — | mainm-only embed variant (mainm/.htaccess:12, mainm/header.php:109, mainm/footer.php:2) has no port; inventory records it as a gap, not an explicit drop. |
| Anyone can dump every journal's title, base URL and contact email as a raw table via a hand-typed ?ls URL | Dropped | — | Deliberately abandoned data-leak-shaped debug export. |
| Visitor can browse a public publishers/organizations directory with node-type tabs, search, sort and pagination | New | Yes | Promotes publishers from a free-text journal setting in legacy to a first-class browsable directory. |
| Visitor can view a publisher's profile page with breadcrumbed hero, about, research areas, quick stats and a sub-organizations preview | New | — | Includes a designed empty state; an Explore Journals CTA exists in code but is commented out (hidden for now). |
| Visitor can browse the full paginated list of a publisher's child organizations with search and sort | New | — | Drill-down complement to the detail page's capped preview. |
Row split with sibling "Landing" module.
main/index.php's default view (no _action) renders one HTTP response containing three visually and functionally distinct panels: an optional admin-configured home-page-notes block, a cross-journal article-search box (with links to ?aut author search and ?adv advanced search — claimed by the Articles module), and the journal-catalog panel captured as the single row above. Per the design doc's row-identification method, a "distinct sub-view within an action" is a valid row even without its own query string, so the journal-catalog panel is broken out here rather than folded into Landing's "Portal Home" row — both rows share the same main/index.php legacy ref/route by design. Flagging for Phase C triage since it's one PHP response feeding two module rows.No distinct "journal detail" screen found on the portal.
Each journal's thumbnail/title in the directory links straight out to that journal's own site (
ju_base_url) — i.e. the Journal segment's home page, not a page hosted by the root portal itself. So "journal detail as seen from the root site" does not materialize as a separate legacy row; there is no portal-hosted preview/profile page for a single journal. (Correction: mainm/mainn are not an example of that per-journal destination — journal/home.html's independent trace found both hardcode journal_code = 0 and reproduce this same cross-journal catalog instead of a themed per-journal home; they're captured as their own rows above, not cited here.)"Filtering" is an admin-configured display toggle, not a distinct route — true of
main/index.php specifically.Two site-wide settings alter the directory's layout without changing the URL:
sep_by_lang groups journals into two blocks (Persian/Arabic vs. English/other) or lists them flat in one grid ordered by title, and no_thumb switches between the thumbnail-grid layout and a plain two-column text-link layout. Both render from the same main/index.php request, so they stay one row rather than being split further. (main/.htaccess does carry the same list_<subject_code>.html rewrite rule as mainm/mainn, but main/index.php never reads $_GET['list'], so the URL is inert there — it renders the identical unfiltered view.) The mainm/mainn Portal-style variant is different: it exposes a real, code-verified, route-distinct filter (pretty-URL subject filtering plus a live AJAX title/publisher search) — see the two rows above, which document that separately rather than folding it into this note's scope.Correction: the
mainm/mainn directory-listing screen is now documented on two module pages at once, not exactly once.mainm/index.php is the literal DocumentRoot for the production ServerName journals.ekb.eg / ServerAlias journal.ekb.eg vhost (apps/legacy/apache-httpd/httpd-vhosts.conf:40-52) — the namesake-domain deployment of the whole system — and both it and its near-identical sibling mainn/index.php hardcode journal_code = 0, reproducing this exact cross-journal catalog rather than a per-journal home. This note previously claimed journal/home.html, journal/search.html, and journal/static-pages.html each traced these two directories independently and "explicitly excluded them from their own row sets... rather than claiming a row themselves," leaving this page's second row ("Journal Directory — mainm/mainn Portal-style variant") the sole owner. That is no longer accurate for journal/home.html: it now carries its own row, "Cross-Journal Directory (mainm/mainn default view)," Legacy Ref "mainm/index.php; mainn/index.php (default view, no _action; journal_code hardcoded to 0)," under a note that itself still (inaccurately) says "portal/journals.html and portal/landing.html both decline to claim it." journal/search.html and journal/static-pages.html still decline to claim a default-view row, and portal/landing.html's own note independently frames mainm/mainn's ?list= behavior as out of the Portal segment's scope, also declining. Net effect: the bare mainm/mainn default-view screen (this page's second row) is duplicated across portal/journals.html and journal/home.html, contradicting the Definition of Done's "exactly once, under exactly one module." The subject-filtered/AJAX-filtered variant (this page's third row) is not covered by journal/home.html's row — its Legacy Ref cites only the bare default view — and remains uniquely documented here. Flagging for Phase C / orchestrator-level reconciliation across portal/journals.html, journal/home.html, and portal/landing.html; per journal/home.html's own note, the underlying Portal-vs-Journal placement of mainm/mainn is an open tension for Phase C triage, so this single-page pass does not unilaterally delete either side's rows.New pages (stage 2)
The three public publishers pages (directory, detail, sub-organizations) have no legacy predecessor — placed here on
portal/journals.html per inventory-p2-spec. They are candidates for a future dedicated 'publishers' Portal module, which needs user consent (creating module files is out of scope this stage).