HomePortal › Landing

Landing

The root public site's welcome screen and general-purpose chrome — the un-claimed portion of main/index.php's default view (shared with the Journals and Articles modules' own rows), its admin-configurable ?menu= static-page branch, the standalone main/contact.us.php page, and the main/ directory's cross-journal role-portal login gateway and hub (main/login.php, main/pm.php) — otherwise-unclaimed main/ entry points, catalogued here for the same reason.

Page Status E2E Enhanced Legacy Ref Route Roles
Portal Home Full Yes streaming main/index.php / Public
Static Menu Page Pending main/index.php?menu=... /?menu=... Public
Contact Us Pending main/contact.us.php /contact.us Public
Role-Portal Login Gateway Pending main/login.php /login Public (login form); success gated to roles 5, 7, 8, 11, 13, 17 via adminLoginAction (adm.class.php:126)
Role-Portal Hub Pending main/pm.php /pm Signed in via the gateway above; hub renders a link per held role among 5 (Publisher), 7 (Page Designer), 8 (Language Editor), 11 (Production Manager)
Production Manager Queue Pending main/pm.php?_action=pm /pm?_action=pm[&st=...] Production Manager (role 11)
Production Manager Report Pending main/pm.php?_action=pm&st=report /pm?_action=pm&st=report[&rep_role=1|2&rep_st=0|1|2&group_editor=0|1&search] Production Manager (role 11)
Language Editor Queue Pending main/pm.php?_action=tedt /pm?_action=tedt[&st=...] Language Editor (role 8)
Page Designer Queue Pending main/pm.php?_action=pd /pm?_action=pd[&st=...] Page Designer (role 7)
Publisher View Pending main/pm.php?_action=pub /pm?_action=pub Publisher (role 5)
Change Password (Role Portal) Pending main/pm.php?_action=pass /pm?_action=pass Any authenticated role-portal contact

Features

FeatureStatusE2EDescription
Visitor sees the portal home landing page with hero and discovery sections Full Yes Replaces the sparse legacy main/index.php default view; sections stream independently with skeleton fallbacks.
Visitor searches articles by keyword from the home page Full Yes Search results themselves are catalogued under the Articles module; this is the home-page entry widget.
Visitor clicks popular/suggested search terms in the hero New Yes Suggested-query chips accelerate first search without typing.
Visitor navigates the portal via header nav and footer chrome Full Yes Legacy nav was partly admin-driven (menu1..menu5 slots) and session-aware (admin/editorial/logout links); new nav is a fixed designed set with auth-aware header controls.
Visitor switches locale on the landing page and content round-trips correctly Full Yes Locale is now a URL segment rather than a server-side language include.
Visitor sees platform advertisements/links on the home page Full Yes Legacy rendered image-or-title link list with per-language title/note split on '||'; carousel form and autoplay are new.
Visitor sees live platform statistics (journals/issues/articles counts, views, downloads) Full Yes Adds a global-reach map with legend absent from the legacy plain count table.
Visitor sees platform and journal news on the home page Full Yes Legacy split news into two sidebar gadgets (system vs per-journal); the port shows one designed news section.
Visitor browses journals by subject/category from the home page New Yes Net-new discovery section for this dispatch root.
Visitor filters featured journals via tabs on the home page New Yes Curated, filterable featured-journals strip replaces part of the flat legacy directory experience.
Visitor sees trending research keywords and can click through to search New Yes Keyword chips deep-link into article search results.
Visitor sees top authors and can jump to an author's subject/articles New Yes Author cards link to their subject/profile listings.
Visitor sees journal indexing services showcased on the home page New Yes Marketing strip of indexing/abstracting services.
Visitor reads an about-us section on the home page New Yes Fixed designed narrative section replacing the admin freeform welcome block role.
Admin publishes a configurable welcome/notes banner on the portal home Pending Legacy home_page_title/home_page_notes (settings journal_code=0, main/index.php:60-92, 329-342) render an admin HTML block above the search box; no apps/web public renderer exists though the settings remain writable.
Admin publishes up to 5 static menu pages that appear as portal nav links Pending Legacy main/header.php:96-100 renders a nav link per non-empty menuN_title; main/index.php?menu=N (index.php:210-247) shows that slot's title/body. Super-admin can still write menu1Title/menu1Cnt (apps/web/lib/actions/settings.ts) but nothing public renders them.
Admin controls portal chrome via settings (page_title, meta_tags, right_note, footer_note) Pending Legacy main/header.php:2-51 reads journal_code=0 settings to set the page title, injected meta tags and footer note; the redesigned public chrome is fixed and not settings-driven.
Visitor views a portal contact-us page with admin-editable content Pending Legacy main/contact.us.php renders the journal_code=0 'contact_us' setting; apps/web only has a per-tenant contact page ([tenant]/(public)/contact-us), none in the portal (public) group.
Editorial staff logs in through the cross-journal role-portal gateway Pending main/login.php forces pm=1 so JournalAdmin::adminLoginAction (class/adm.class.php:126) accepts roles 5,7,8,11,13,17, sets $_SESSION[SESSION_NAME_ID] and redirects to /pm; apps/web auth is per-tenant or super-admin only.
Signed-in editorial user sees a hub listing a link per held role (Publisher 5, Page Designer 7, Language Editor 8, Production Manager 11) plus change-password and logout Pending main/pm.php default branch (pm.php:267-307) queries ju_contact_role and renders one link per held role; ?logout destroys the session. No cross-journal hub exists in apps/web.
Production manager works a manuscript queue bucketed by status with live counts (new, sent-to/performed-by language editor, sent-to/responded page designer, galley proof, finally accepted) Pending main/pm.php?_action=pm dashboard shows per-bucket counts via PMAdmin::getSubmissionList (class/pm.class.php) mapped to manu_status 33/19/20,21/27/28/6,29/8; st=returned and st=search are reachable but unlinked. Duplicate of the canonical Publishing Workflow PM module (PMAdmin vs EditorManager).
Production manager generates a workload report filtered by role, state, editor grouping and search Pending main/pm.php?_action=pm&st=report → PMAdmin::getPMReportForm/getPMReportResult (class/pm.class.php:9,1538) with rep_role/rep_st/group_editor/search params; undiscoverable from the dashboard but reachable. No PM report screen in apps/web.
Language editor works assigned/performed manuscript queues with live counts Pending main/pm.php?_action=tedt → TechEditorManager::preAssignedManuscript (class/tech.editor.class.php) over manu_status 19 (assign) and 20,21 (assigned), scoped to the editor's journals via getPMJournals(8); AJAX actions via main/request/tech.editor.ajax.php + inc/js/tech.editor.js.
Page designer works assigned/performed manuscript queues with live counts Pending main/pm.php?_action=pd → PageEditorManager::preAssignedManuscript (class/page.editor.class.php) over manu_status 27/28, scoped via getPMJournals(7); AJAX via main/request/page.editor.ajax.php + inc/js/page.editor.js.
Publisher (role 5) views the journals/manuscripts assigned to them Pending main/pm.php?_action=pub → PMAdmin::getJournslForPublisher; distinct from the apps/web publisher-organization directory/CRUD, which is a different 'publisher' concept.
Role-portal user changes their own password Pending main/pm.php?_action=pass → Contact_Manager::changePasswordForm/Action (class/contacts.class.php) with journalCode=0; apps/web change-password exists only inside tenant-admin and super-admin panels, not a role portal.
Row split with sibling "Journals" and "Articles" modules.
main/index.php's default view (no _action) is a single HTTP response containing several visually distinct panels: an optional admin-configured welcome/notes block (home_page_title/home_page_notes, settings row journal_code = 0), a quick keyword-search box that submits to ?_action=article, and the full journal-directory grid. The journal-directory panel is catalogued as the Journals module's own "Journal Directory" row, and the search box's destinations (results/author/advanced search) are catalogued under the Articles module — both of their pages explicitly cross-reference this row as "the Landing module's home screen." "Portal Home" above is what remains: the page shell, the optional welcome banner, and the search box as a widget (not its results). All three rows legitimately share the identical main/index.php legacy ref/route by design.
Not routed via class/index.class.php / view/index.view.php.
The assignment brief's suggested anchors resolve elsewhere: class/index.class.php defines IndexManager, the per-journal "indexing services" (DOAJ/Scopus-style) CRUD reached from the role-portal's manager.php — unrelated to the portal home page. main/index.php is a monolithic script with no class/view layer of its own; every branch above is an inline if/elseif in that one file.
"Static Menu Page" covers up to 5 admin-configured slots.
main/header.php renders a nav link for each non-empty menu1_titlemenu5_title setting (journal_code = 0); clicking one hits main/index.php?menu=N, which swaps the main panel for that slot's title/body pair (menuN_title/menuN_cnt). All five slots render through the same code path and are treated as one row.
Excluded main/ files.
main/adm.php (Super Admin) is a separate segment's entry point, out of scope here. main/jufile.php, main/robots.txt.php, and main/sitemap.xml.php are non-HTML file/crawler outputs, not screens. main/request/*.ajax.php (editor.ajax.php, tech.editor.ajax.php, page.editor.ajax.php) are AJAX fragment handlers for the Role-Portal Hub's queues below, with no rendered screen of their own — mostly GET requests issued by inc/js/pm.js, tech.editor.js, and page.editor.js (a couple of calls, e.g. pm.js's save-action task, use POST); not POST-only as an earlier draft of this note claimed.
main/login.php and main/pm.php are catalogued above, not excluded.
An earlier draft of this note dismissed main/login.php as merely an alternate path to the Super Admin login and attributed main/pm.php to the Publishing Workflow segment's Production Manager module — both wrong. main/login.php unconditionally sets $_PARAMS['pm']=1 (main/login.php:26-27), routing JournalAdmin::adminLoginForm/adminLoginAction (class/adm.class.php:33-44, 97-154) into a materially different branch than the Super Admin login: the role filter is _role IN(5,7,8,11,13,17) instead of _role = 10 (adm.class.php:126), success sets $_SESSION[SESSION_NAME_ID] instead of $_SESSION['juAdmUser__'], and it redirects to pm (main/pm.php) instead of adm. And publishing-workflow/production-manager.html's own note explicitly disclaims main/pm.php as an "old duplicate app tree" built on class/pm.class.php's PMAdmin — a different class than that module's EditorManager — so in fact no page in this inventory covers it. Both files are live under main/ (this segment's own dispatch root — the j.ekb.eg vhost in httpd-vhosts.conf confirms main/ is served, not dead code), so they are catalogued here as Landing's catch for otherwise-unclaimed main/ screens, the same treatment already given to Static Menu Page and Contact Us above.
Production Manager / Language Editor / Page Designer / Publisher Queue rows are a duplicate role-portal, not the canonical Publishing Workflow screens.
main/pm.php instantiates class/pm.class.php's PMAdmin (Production Manager Queue), class/tech.editor.class.php's TechEditorManager (Language Editor Queue), and class/page.editor.class.php's PageEditorManager (Page Designer Queue) — a separate, simpler class tree than the canonical publishing-workflow/production-manager.html (root pm.php + EditorManager), language-editor.html, and page-designer.html modules, and missing several of those modules' rows (tech_au/au_tech/handled have no equivalent anywhere in class/pm.class.php — confirmed by grep, zero matches; returned (class/pm.class.php:56) and search (class/pm.class.php:81, inside PMAdmin::getSubmissionList) ARE present in the class and reachable via ?_action=pm&st=returned|search even though main/pm.php's own dashboard links to neither — same undiscoverable-but-reachable pattern as the new Production Manager Report row above (class/pm.class.php:9, 1538, for st=report). The sibling st=track branch (class/pm.class.php:13) delegates to EditorManager::showManuscriptTracking (editor.class.php:4619), which returns early with no output when no manuscript row matches the given manu code, so it is a manuscript-detail fragment rather than a standalone screen and is not added as its own row here). Each queue's own st= sub-filters (pm's new/tech_editor/tech_editor_p/page_designer/page_designer_p/galley_proof/final_accept; tedt's and pd's assign/assigned) render the same filtered-list-with-live-count pattern as the parent queue's own default view, so — consistent with this page's Static Menu Page row — they are grouped under one row per top-level branch rather than one row per filter. Roles 13 (Abstract Editor) and 17 (Supervisor Editor), though admitted by the login gateway's role filter (adm.class.php:126) and referenced inside class/pm.class.php's manuscript-action logic, have no corresponding link on the Role-Portal Hub or a dedicated queue of their own here; flagged as an open gap, not resolved in this pass.
Dead/stale rewrite rules in main/.htaccess.
That file also rewrites years.html, list_N.html, rss, and contact.us$ → ?contact, but main/index.php has no code path reading $_GET['years'] (grepping main/index.php case-insensitively for "year" only hits the vi_year DB column), $_GET['list'], $_GET['rss'], or $_GET['contact'] — those params are only implemented in mainn/index.php (a different dispatch dir, out of the Portal segment's scope per the design doc). The contact.us pretty URL is actually served by the real main/contact.us.php file via the generic "append .php" rule earlier in the same file, which fires first. Also worth noting: common/subjects.md describes a "portal home sidebar" that filters the journal directory by Portal Subject (?list=) — that behavior exists only in mainn/index.php's showJList(), not in main/index.php, so it is not reflected as a Landing (or Journals) row here.