Home › Publishing Workflow › Production Manager
Production Manager
Legacy role: pm.php (ROLE_11). Manuscript-lifecycle role — orchestrates the post-acceptance production pipeline (language editing, page design, galley proof) between Editor-in-Chief and Publisher for journals that delegate production to a Production Manager.
| Page | Status | Workflow | E2E | Enhanced | Legacy Ref | Route | Roles |
|---|---|---|---|---|---|---|---|
| Production Manager Dashboard | Pending | — | — | — | pm.php | /pm | Production Manager |
| New Manuscripts | Pending | Production | — | — | pm.php?_action=new | /pm?_action=new | Production Manager |
| Returned to Editor-in-Chief | Pending | Production | — | — | pm.php?_action=returned | /pm?_action=returned | Production Manager |
| Manuscripts Sent to Language Editor | Pending | Production | — | — | pm.php?_action=tech_editor | /pm?_action=tech_editor | Production Manager |
| Manuscripts with Language Editor's Decision | Pending | Production | — | — | pm.php?_action=tech_editor_p | /pm?_action=tech_editor_p | Production Manager |
| Sent to Author for Editing Fixes | Pending | Production | — | — | pm.php?_action=tech_au | /pm?_action=tech_au | Production Manager |
| Returned from Author After Editing Fixes | Pending | Production | — | — | pm.php?_action=au_tech | /pm?_action=au_tech | Production Manager |
| Manuscripts Sent to Page Designer | Pending | Production | — | — | pm.php?_action=page_designer | /pm?_action=page_designer | Production Manager |
| Manuscripts with Page Designer's Decision | Pending | Production | — | — | pm.php?_action=page_designer_p | /pm?_action=page_designer_p | Production Manager |
| Manuscripts Sent to Authors for Galley Proof | Pending | Production | — | — | pm.php?_action=galley_proof | /pm?_action=galley_proof | Production Manager |
| Galley Proof Handled by Authors | Pending | Production | — | — | pm.php?_action=glp_resp | /pm?_action=glp_resp | Production Manager |
| Manuscripts with PM's Decision | Pending | Production | — | — | pm.php?_action=handled | /pm?_action=handled | Production Manager |
| Search Manuscripts | Pending | — | — | — | pm.php?_action=search | /pm?_action=search | Production Manager |
| Manuscript Detail — Production Manager Action | Pending | Production | — | — | EditorManager::prepareToAccept + ManuManager::getManuscriptDetails, via request/editor.ajax.php task=prepareToAccept | /request/editor.ajax | Production Manager |
Features
| Feature | Status | E2E | Description |
|---|---|---|---|
| Production Manager can sign in to a dedicated role portal gated to their role | Pending | — | apps/legacy/js/pm.php requires an authenticated session with ju_contact_role._role=11, redirecting unauthenticated users to login with a return-to-pm deep link and bouncing non-PM users home. |
| PM sees a dashboard of production-queue counts across all pipeline stages | Pending | — | pm.php's default action aggregates per-status manuscript counts (statuses 6,33,34,19,20,21,27,28,29,60,61) and renders them as queue links via view/index.pm.view.php, hiding zero-count editing-fixes queues on the Classic theme. |
| PM gets a Register Author shortcut when the journal enables it | Pending | — | When the journal setting eic_custom_opt contains reg_au, the dashboard shows a link to contacts?_action=signup so the PM can register an author on the spot. |
| PM can view the New Manuscripts production queue | Pending | — | pm.php?_action=new lists manuscripts sent to production (manu_status=33) via EditorManager::getSubmissionList, the one queue whose detail modal reliably offers decision controls for PM-delegated journals. |
| PM can view manuscripts they returned to the Editor-in-Chief | Pending | — | pm.php?_action=returned lists manu_status=34 manuscripts handed back to the EIC. |
| PM can view manuscripts currently with the Language Editor | Pending | — | pm.php?_action=tech_editor lists manu_status=19 manuscripts, a PM-owned worklist that in apps/web exists only as an Editor-in-Chief decision action. |
| PM can view manuscripts the Language Editor has decided on | Pending | — | pm.php?_action=tech_editor_p lists manu_status 20 and 21 manuscripts with the Language Editor's decision recorded, the PM's cue to advance the manuscript. |
| PM can view manuscripts sent to the author for editing fixes (hidden queue) | Pending | — | pm.php?_action=tech_au lists manu_status=60 manuscripts, absent from the Modern-theme sidebar and shown on the Classic dashboard only when count is above zero yet always directly reachable by URL. |
| PM can view manuscripts returned from the author after editing fixes (hidden queue) | Pending | — | pm.php?_action=au_tech lists manu_status=61 manuscripts with the same hidden-menu behavior as the tech_au queue. |
| PM can view manuscripts currently with the Page Designer | Pending | — | pm.php?_action=page_designer lists manu_status=27 manuscripts, a PM queue that in apps/web exists only as the EIC's 'Send to Page Designer' decision action. |
| PM can view manuscripts the Page Designer has decided on | Pending | — | pm.php?_action=page_designer_p lists manu_status=28 manuscripts awaiting the PM's next production step. |
| PM can view manuscripts sent to authors for galley proof | Pending | — | pm.php?_action=galley_proof lists manu_status=6 manuscripts, a PM queue that in apps/web exists only as the EIC's 'Send to Author for Galley Proof' decision action. |
| PM can view galley proofs handled by authors | Pending | — | pm.php?_action=glp_resp lists manu_status=29 manuscripts (author responded to galley proof), the final PM checkpoint before returning to the EIC/Publisher. |
| PM can review the manuscripts they have already handled | Pending | — | pm.php?_action=handled resolves the PM's own past assignments via EditorManager::getEdtHandledSubmissions (assign_status=33) and lists them with getSubmissionList. |
| PM can search manuscripts within production statuses | Pending | — | pm.php?_action=search renders EditorManager::manuSearchForm and, on submit, constrains results to production statuses 6,33,34,19,20,21,27,28,29. |
| PM can open a manuscript detail modal with full manuscript info from any queue row | Pending | — | Every queue row's manuscript-ID link calls javascript:prepareToAccept(manu_code) (view/editor.view.php:4489), loading EditorManager::prepareToAccept plus ManuManager::getManuscriptDetails into the view/index.pm.view.php modal via request/editor.ajax.php task=prepareToAccept&edt_r=11. |
| PM can record a production decision on a manuscript (route to Language Editor, author fixes, Page Designer, galley proof, or return to EIC) | Pending | — | The editorManuActions edt_r=11 branch (class/editor.class.php:168-180) offers Send to Language Editor (19), author editing fixes (60), Page Designer (27), author galley proof (6), or return to EIC (34), though a legacy early return (editor.class.php:73-76) when getPMStatus()==1 blocks the form for every whitelisted status except 33 on PM-delegated journals. |
| PM can open the Reviewer's Note / Questionnaire popups from the manuscript detail panel | Pending | — | pm.php loads the shared inc/js/editor.js, so the detail panel can open journal/rev_questions.php, journal/rev_subject.php and journal/sug_op.php exactly as the Editor-in-Chief module does. |
class/pm.class.php is not this module's class.It defines
PMAdmin,
used only by the old duplicate app trees under main/pm.php and mainn/pm.php (each a
self-contained legacy snapshot that renders its screens inline in the same PHP file rather than via the
view/*.view.php dispatch pattern — main/pm.php:9 and mainn/pm.php:8
both require_once '../class/pm.class.php', the same shared top-level
class/pm.class.php file documented above, not a class/ or view/
directory of their own — out of this segment's scope per the taxonomy's "16 role-entry PHP files" source).
The live, currently-routed
apps/legacy/js/pm.php documented here instead instantiates EditorManager
(class/editor.class.php, which extends ManuManager from
class/manu.class.php) — the same class hierarchy editor.php uses, gated to
ju_contact_role._role = 11.Manuscript Detail — Production Manager Action
has no
?_action= of its own — it
is the editorManuActions action panel (available "make a decision" options, keyed off
edt_r=11 in class/editor.class.php) plus the shared
getManuscriptDetails manuscript-info panel (view/manu.view.php), both loaded into the
modal defined in view/index.pm.view.php ($FUNCTION == 'modal') via
request/editor.ajax.php's prepareToAccept task, opened by clicking a manuscript ID
inside any of the queues above (every queue's list row shares the same
javascript:prepareToAccept(<manu_code>) link, view/editor.view.php:4489).
Counted as its own row per the row-identification method's "distinct tab/sub-view within an action" clause —
it renders a materially different screen (decision form + full manuscript info) than the list rows it is
launched from. But decision controls rarely render in practice:
editorManuActions() has an unconditional early return (class/editor.class.php:73-76),
before the edt_r switch runs, whenever getPMStatus() is 1 — i.e. the journal is
listed in the preprint_ju setting and so delegates production to a Production Manager, the normal
case for using pm.php at all (see
apps/legacy/spec/Editor-In-Chief/editor-in-chief-in-publishing-menu-group.md) — and
manu_status is one of 6,19,20,21,27,28,29,60,61,66,67. That blocked set covers
every value in the edt_r==11 branch's own manu_status whitelist
(6,19,20,21,27,28,29,33,60,61, class/editor.class.php:168-180) except
33, and 34 (Returned to Editor-in-Chief) was never in that whitelist either. So for
a Production-Manager journal, only the New Manuscripts queue (manu_status=33)
reliably surfaces the decision form through this modal — the other 9 queues above open it with only the
manuscript-info panel."Guide" is dead code here.
pm.php's page-title switch has a
case "guide" (setting the title to "Guide for Editor") and template/rules.php's
__pm_qmenu() has a commented-out "Product Manager Guide" quick-menu link, but the module's actual
render switch has no matching case "guide" — requesting pm.php?_action=guide falls
through to the default branch and silently renders the Dashboard (just with a different page
title). Unlike the Language Editor's and Technical Editor's genuine Guide pages, this never renders a distinct
screen, so it is not counted as a row.Sent to Author for Editing Fixes
and Returned from Author After Editing Fixes
are absent from the Modern-theme sidebar menu (
__pm_pmenu()) and only appear on the Classic-theme
Dashboard when their respective manuscript counts are greater than zero — but both remain directly reachable
via _action=tech_au / _action=au_tech regardless of theme or count, per the
row-identification method's "secondary/hidden actions count" clause. The same manu_status pair
(60/61) is also exposed by the Language Editor module (tech_editor.php).Reviewer's Note/Questionnaire popup, both hosts.
The root
pm.php loads the shared inc/js/editor.js (same file editor.php uses), so its manuscript-detail panel can open journal/rev_questions.php, journal/rev_subject.php, and journal/sug_op.php the same way — documented in full at Editor-in-Chief. The mainn-hosted mirror (mainn/pm.php) instead loads its own mainn/inc/js/pm.js, whose showRevNote(ID) loads a host-local copy, mainn/rev_questions.php, at line 399 — both fold into the manuscript rows above rather than getting their own rows (route-file checklist gap, resolved 2026-07-02).