HomePublishing Workflow › Publisher

Publisher

Legacy role: publisher.php (ROLE_5), with class/publisher.class.php / view/publisher.view.php. Manuscript-lifecycle role — the publication step: turn accepted manuscripts and confirmed galley proofs into published articles, organize them into volumes/issues, alert subscribers to new issues, and activate DOIs.

Page Status Workflow E2E Enhanced Legacy Ref Route Roles
Publisher Dashboard Pending publisher.php /publisher Publisher
Guide for Publisher Pending publisher.php?_action=guide /publisher?_action=guide Publisher
Manage Volumes Pending Publication publisher.php?_action=vol /publisher?_action=vol Publisher
List of Volumes & Issues Pending Publication publisher.php?_action=issue /publisher?_action=issue Publisher
Manage Issues Pending Publication publisher.php?_action=issue&_issue=... /publisher?_action=issue&_issue=0 Publisher
Issue Alert — Email Table of Contents Pending Publication publisher.php?_action=issue /publisher?_action=issue&_issue=...&alert=1 Publisher
Publish / Edit Article Pending Publication publisher.php?_action=publish /publisher?_action=publish&manu=... Publisher
List of New Accepted Manuscripts Pending Publication publisher.php?_action=acceptedList /publisher?_action=acceptedList&ac Publisher
Manuscripts Sent/Confirmed by Authors for Galley Proof Pending Publication publisher.php?_action=acceptedList /publisher?_action=acceptedList&gl Publisher
List of Published Articles Pending Publication publisher.php?_action=arList /publisher?_action=arList Publisher
Export Published Articles to Excel Pending Publication publisher.php?_action=arList /publisher?_action=arList&xls Publisher
Articles in Press Pending Publication publisher.php?_action=inPress /publisher?_action=inPress Publisher
Manage Article Comments Pending publisher.php?_action=comment /publisher?_action=comment&article=... Publisher
Edit Article Comment Pending publisher.php?_action=comment&edit=... /publisher?_action=comment&edit=<comment_code>&article_code=<article_code> Publisher
Activate DOI Pending Publication publisher.php?_action=doiList /publisher?_action=doiList Publisher (menu item shown only when the journal has DOI-deposit configured)

Features

FeatureStatusE2EDescription
Publisher can access a dedicated role portal (dashboard) listing their publication work areas, with the DOI menu item shown only when the journal has DOI deposit configured Pending publisher.php default action renders the ROLE_5 home with sidebar/quick menu; menu visibility keys off the doi_deposit_config journal setting.
Publisher can read a 'Guide for Publisher' help page Pending Static role guide rendered by getPublishersGuide() (publisher.php?_action=guide).
Publisher can create and edit volumes (bilingual title/year fields), with list and form shown together Pending manageVolume()/saveVolume(); &volume=... pre-fills the form for editing while the volume list stays visible alongside.
Publisher can delete a volume Pending deleteVolume() via AJAX task from the volumes screen (request/publisher.ajax.php).
Publisher can browse an editorial list of all volumes with their nested issues, with per-issue add/edit/delete/alert action links Pending Bare _action=issue renders getAllVolumes(showIssue=1) — the management counterpart of the public reader issues page.
Publisher can create and edit an issue, including cover image upload, rich-text cover story, and an attached issue PDF/title-note file Pending manageIssue(_issue=0|code) + saveIssue(); uses TinyMCE for cover_story and uploadImage()/uploadPDF() for issue assets.
Creating a new issue automatically triggers a configurable 'new issue' notification email when the journal has a new_issue_email template set Pending saveIssue() sends EmailManager::emailsToAuthor with email_fld=new_issue_email after inserting a new ju_volume_issue row (publisher.class.php:1258-1264).
Publisher can delete an issue, and deletion is refused when articles are still attached to it Pending deleteIssue() guards against issues with related articles before removing the row.
Publisher can compose and send a new-issue alert email (table of contents) to a chosen recipient scope, with subject, rich-text body, and a send-preview-to-self option Pending issueAlertSetting() screen (_action=issue&alert=1) + sendIssueAlert() → EmailManager::sendNewIssueAlertMail; preview_alert routes the mail only to the acting publisher.
Publisher can maintain an extra list of alert-recipient email addresses that is normalized, validated and de-duplicated before saving Pending saveAlertEmails() stores the cleaned list in the journal's alert_emails setting; the alert form can opt in/out of these extra recipients (al_emails flag).
Publisher can view a work queue of newly accepted manuscripts (statuses 8, 38) ready to be published Pending getAcceptedManuscripts() with &ac (publisher.php?_action=acceptedList&ac) — distinct from the author's own 'accepted' bucket.
Publisher can preview a manuscript's full details inline (expanding panel) from the accepted list without leaving the page, including a JATS-converted view when enabled Pending AJAX task showManusriptDetails fills the #dvPreview panel; conv2jats is enabled unless the theme's dsbld_opt disables jats (request/publisher.ajax.php:43-51).
Publisher can view the queue of manuscripts sent to or confirmed by authors for galley proof (statuses 6, 29, 36) Pending getAcceptedManuscripts() with &gl (publisher.php?_action=acceptedList&gl).
Publisher can publish a new article from an accepted manuscript via a tabbed form (Article Info / Authors) with bilingual metadata and rich-text abstract, full text, references and highlights Pending publishIssueArticle()/articleEditForm() (_action=publish&manu=...); TinyMCE editors for full_text/abstract/reference_full/highlights; References and Citations tabs exist in markup but are commented out.
Publisher can edit an existing published article, including a dedicated DOI-edit entry mode Pending Same form reached with &article=... (optionally &edit_doi=1); only pre-fill and page title differ from the new-article path.
Saving an article warns the publisher about duplicate titles, citing the conflicting manuscript ID Pending checkTitleDuplicate() runs inside saveArticle() and returns PUB_DUPLICATE_TITLE_ERROR with the offending manu_id (publisher.class.php:1909, 3923).
Publisher can upload the article full-text PDF and image assets, and manage supplementary files (add, describe, delete, reorder) Pending uploadPDF()/uploadImage()/saveSupplmens()/getArticleFiles()/deleteArticleFile()/deleteArticleFiles()/reOrderArFile()/saveFlDc() (per-file description edit).
Publisher can manage article authors: add, edit, delete and drag-to-reorder them, and copy the manuscript's original author list onto the article Pending addAuthor()/authorReviewerForm()/deleteAuthor()/reOrderAu()/saveManuAuArticleAu() via AJAX tasks on the publish form's Authors tab.
Publisher can manage article references: add, edit, delete and reorder Pending addReference()/articleReferenceForm()/deleteRef()/reOrderRef(); the References tab is currently commented out of the legacy form markup but the AJAX handlers remain live.
Publisher can manage article citations: add, edit, delete and reorder Pending articleCitationsForm()/saveCitation()/deleteCitation()/reOrderCitations()/getCitationList(); Citations tab likewise commented out of the form markup with handlers still live.
Publishing an article emails the author a configurable letter (online-publication or final print letter) and advances the manuscript status to Published (9) or Published-in-print (22) with a tracking entry Pending saveArticle() sends EmailManager::emailsToAuthor (email_fld=online_publish or final_letter) and updates manu_status unless no_change_st is set, recording TRACK_MANU_STATUS_CHANGED_TO (publisher.class.php:2445-2510).
Publisher can un-publish (delete) an article, reverting the source manuscript back to accepted status Pending deleteArticle() resets manu_status to 8 for manuscripts in statuses 9/22 (publisher.class.php:2803, 2841-2846).
Publisher can browse a management list of published articles, with per-article edit links and a comment-count badge linking into comment moderation Pending publisherArticlesList() (_action=arList); the comment badge is the only entry point to Manage Article Comments.
Publisher can export the published-articles list to an Excel spreadsheet Pending Picker form on arList submits to _action=ar_excel, handled pre-render by ManuExportExcel::exportArticlesExcel() as a direct file download (publisher.php:75-81).
Publisher can manage Articles in Press: view in-press articles grouped by issue and drag-to-reorder articles within an issue Pending getArticlesByIssue(press=1) (_action=inPress) plus AJAX reOrderArticle(); setPBT() fetches the target issue's year/month when moving an article to an issue.
Publisher can moderate reader comments on articles: list comments per article, edit sender name/email/affiliation/note, record a response, change status, and delete Pending ArticleComments::manageActions()/getArticleComments()/editArticleComment()/saveArticleCommentChanges()/deleteArticleComment() (_action=comment); reached only via the comment badge on article lists, no sidebar entry.
Publisher can activate DOIs: review issues/articles pending DOI, submit DOIs per issue to the configured deposit provider (mEDRA/Crossref), and see remaining deposit credit Pending publisherArticlesList_4doi() (_action=doiList) with per-issue Save DOI buttons calling AJAX assign_validadte_composite/-N → JDoi::checkCredt_Submit(); getCreditDoi() shows credit; __UpdateStatusArticleTO_5 marks articles DOI-active.
Publisher can send published-article metadata to the ISC indexing service and fetch DOR identifiers Pending AJAX tasks sendToIsc → ISCUtil::iscExportWS() and getdor → ISCUtil::getdor() (request/publisher.ajax.php:157-169); paired with the unauthenticated ?isc= callback on publisher.php.
Publisher settings screen Dropped Orphaned legacy action; nothing to port.
Bulk 'prepare articles for DOI' filter form (assign_doi) Dropped Superseded by the Activate DOI screen's per-issue Save DOI flow.
List of Volumes & Issues
is the screen actually rendered by the bare _action=issue route — the same route the sidebar's "Manage Issues" link points to. manageIssue() immediately branches into getAllVolumes(['showIssue' => 1]) whenever the _issue query param is absent, rendering every volume with its nested issues plus per-issue add/edit/delete/alert links — a materially different FUNCTION/view than the single-issue add/edit form. Counted as its own row per the same "distinct tab/sub-view within an action" precedent used for Issue Alert below; the Manage Issues row's Route now documents that &_issue=0/&_issue=... is required to reach the form.
Publish / Edit Article
is a single tabbed form (Article Info / Authors tabs — References and Citations tabs exist in the markup but are currently commented out) that covers every legacy entry into publishIssueArticle()/articleEditForm(): creating a new article from an accepted manuscript (&manu=...) and editing an existing published article (&article=..., optionally with &edit_doi=1). Only the form pre-fill and the PUB_PUBLISH_NEW_ARTICLE/PUB_PUBLISH_EDIT_ARTICLE page title change — counted as one row, not two.
Issue Alert — Email Table of Contents
is reached through the same _action=issue as Manage Issues, but the alert=1 query flag makes manageIssue() branch entirely into issueAlertSetting() — a distinct email-composition screen (recipient scope, message body, send/preview buttons) rather than a variant of the issue list/form. Counted as its own row per the row-identification method's "distinct tab/sub-view within an action" clause.
Not counted as rows: _action=setting (page title PUB_SETTING is set, but its handler call — $cnf->publishersSetting($_REQUEST) — is commented out in publisher.php and the action is linked from no menu, so it renders an empty content area; dead/orphaned code). _action=assign_doi (prepareArticlesForDOI(), class/publisher.class.php:3543) has no discoverable caller anywhere in the codebase — no link, form, or AJAX task targets it (a tree-wide grep for assign_doi matches only the four case "assign_doi": dispatch lines). The Activate DOI screen's own per-issue "Save DOI" buttons instead call a separate AJAX task, assign_validadte_composite (request/publisher.ajax.php:108-112class/doi.check.class.php::checkCredt_Submit()), to submit DOIs to the deposit provider (medra/crossref). assign_doi renders no screen either way, so it is still not counted as a row — but as dead/orphaned code, not as a live filter-form target. _action=ar_excel (handled at the very top of publisher.php, before the page-title switch) is the actual file-download handler submitted from the Export Published Articles to Excel row's picker form — it streams a spreadsheet and exits, with no rendered screen. The manuscript-preview link on List of New Accepted Manuscripts (javascript:showManusriptDetails()) fills an inline #dvPreview panel on that same page rather than navigating anywhere, so it is not a separate row either. The sidebar's "Indexing DB" quick link points at browse?_action=export — a Journal-segment page, not a publisher.php screen — so it is out of scope for this module. publisher.php:38-43 has a pre-login ?isc=... branch — checked and returned before the session/role gate at publisher.php:45 — that decrypts the isc query value via class/isc.util.class.php::getIscActions() (lines 112-170) and either echoes "ok" or streams a ZIP file download. It is an unauthenticated machine-callback endpoint unique to publisher.php among the 16 role-entry files (confirmed: none of the other 15 role-entry files check $_GET['isc']) — not a user-facing screen, so it is not counted as a row either.
Manage Article Comments
has no sidebar entry of its own — it is reached only via a per-article comment-count badge link on List of Published Articles and Articles in Press.
Edit Article Comment
is a standalone sender-name/email/affiliation/note/response/status edit form (ArticleComments::editArticleComment()) reached only via the per-comment edit link rendered inside Manage Article Comments' list — it has no sidebar entry of its own either, and renders no comment list alongside it (unlike Manage Volumes' &volume=... case, which always shows list+form together).