Home › Publishing 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
| Feature | Status | E2E | Description |
|---|---|---|---|
| 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-112 →
class/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).