| Server IP : 195.130.67.5 / Your IP : 216.73.217.154 Web Server : Microsoft-IIS/10.0 System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586 User : IUSR ( 0) PHP Version : 7.4.19 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Old Sites/Libteiser - Ojs/ojs2/classes/article/ |
Upload File : |
<?php
/**
* @defgroup article
*/
/**
* @file classes/article/Article.inc.php
*
* Copyright (c) 2003-2009 John Willinsky
* Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
*
* @class Article
* @ingroup article
* @see ArticleDAO
*
* @brief Article class.
*/
// $Id: Article.inc.php,v 1.37.2.2 2009/04/08 19:42:46 asmecher Exp $
// Submission status constants
define('STATUS_ARCHIVED', 0);
define('STATUS_QUEUED', 1);
// define('STATUS_SCHEDULED', 2); // #2187: Scheduling queue removed.
define('STATUS_PUBLISHED', 3);
define('STATUS_DECLINED', 4);
// AuthorSubmission::getSubmissionStatus will return one of these in place of QUEUED:
define ('STATUS_QUEUED_UNASSIGNED', 5);
define ('STATUS_QUEUED_REVIEW', 6);
define ('STATUS_QUEUED_EDITING', 7);
define ('STATUS_INCOMPLETE', 8);
// Author display in ToC
define ('AUTHOR_TOC_DEFAULT', 0);
define ('AUTHOR_TOC_HIDE', 1);
define ('AUTHOR_TOC_SHOW', 2);
// Article RT comments
define ('COMMENTS_SECTION_DEFAULT', 0);
define ('COMMENTS_DISABLE', 1);
define ('COMMENTS_ENABLE', 2);
class Article extends DataObject {
/** @var array Authors of this article */
var $authors;
/** @var array IDs of Authors removed from this article */
var $removedAuthors;
/**
* Constructor.
*/
function Article() {
parent::DataObject();
$this->authors = array();
$this->removedAuthors = array();
}
/**
* Add an author.
* @param $author Author
*/
function addAuthor($author) {
if ($author->getArticleId() == null) {
$author->setArticleId($this->getArticleId());
}
if ($author->getSequence() == null) {
$author->setSequence(count($this->authors) + 1);
}
array_push($this->authors, $author);
}
/**
* Remove an author.
* @param $authorId ID of the author to remove
* @return boolean author was removed
*/
function removeAuthor($authorId) {
$found = false;
if ($authorId != 0) {
// FIXME maintain a hash of ID to author for quicker get/remove
$authors = array();
for ($i=0, $count=count($this->authors); $i < $count; $i++) {
if ($this->authors[$i]->getAuthorId() == $authorId) {
array_push($this->removedAuthors, $authorId);
$found = true;
} else {
array_push($authors, $this->authors[$i]);
}
}
$this->authors = $authors;
}
return $found;
}
/**
* Get "localized" article title (if applicable).
* @return string
*/
function getArticleTitle() {
return $this->getLocalizedData('title');
}
/**
* Get "localized" article abstract (if applicable).
* @return string
*/
function getArticleAbstract() {
return $this->getLocalizedData('abstract');
}
/**
* Return string of author names, separated by the specified token
* @param $lastOnly boolean return list of lastnames only (default false)
* @param $separator string separator for names (default comma+space)
* @return string
*/
function getAuthorString($lastOnly = false, $separator = ', ') {
$str = '';
foreach ($this->authors as $a) {
if (!empty($str)) {
$str .= $separator;
}
$str .= $lastOnly ? $a->getLastName() : $a->getFullName();
}
return $str;
}
/**
* Return a list of author email addresses.
* @return array
*/
function getAuthorEmails() {
import('mail.Mail');
$returner = array();
foreach ($this->authors as $a) {
$returner[] = Mail::encodeDisplayName($a->getFullName()) . ' <' . $a->getEmail() . '>';
}
return $returner;
}
/**
* Return first author
* @param $lastOnly boolean return lastname only (default false)
* @return string
*/
function getFirstAuthor($lastOnly = false) {
$author = $this->authors[0];
return $lastOnly ? $author->getLastName() : $author->getFullName();
}
//
// Get/set methods
//
/**
* Get all authors of this article.
* @return array Authors
*/
function &getAuthors() {
return $this->authors;
}
/**
* Get a specific author of this article.
* @param $authorId int
* @return array Authors
*/
function &getAuthor($authorId) {
$author = null;
if ($authorId != 0) {
for ($i=0, $count=count($this->authors); $i < $count && $author == null; $i++) {
if ($this->authors[$i]->getAuthorId() == $authorId) {
$author = &$this->authors[$i];
}
}
}
return $author;
}
/**
* Get the IDs of all authors removed from this article.
* @return array int
*/
function &getRemovedAuthors() {
return $this->removedAuthors;
}
/**
* Set authors of this article.
* @param $authors array Authors
*/
function setAuthors($authors) {
return $this->authors = $authors;
}
/**
* Get ID of article.
* @return int
*/
function getArticleId() {
return $this->getData('articleId');
}
/**
* Set ID of article.
* @param $articleId int
*/
function setArticleId($articleId) {
return $this->setData('articleId', $articleId);
}
/**
* Get user ID of the article submitter.
* @return int
*/
function getUserId() {
return $this->getData('userId');
}
/**
* Set user ID of the article submitter.
* @param $userId int
*/
function setUserId($userId) {
return $this->setData('userId', $userId);
}
/**
* Return the user of the article submitter.
* @return User
*/
function getUser() {
$userDao = &DAORegistry::getDAO('UserDAO');
return $userDao->getUser($this->getUserId(), true);
}
/**
* Get ID of journal.
* @return int
*/
function getJournalId() {
return $this->getData('journalId');
}
/**
* Set ID of journal.
* @param $journalId int
*/
function setJournalId($journalId) {
return $this->setData('journalId', $journalId);
}
/**
* Get ID of article's section.
* @return int
*/
function getSectionId() {
return $this->getData('sectionId');
}
/**
* Set ID of article's section.
* @param $sectionId int
*/
function setSectionId($sectionId) {
return $this->setData('sectionId', $sectionId);
}
/**
* Get title of article's section.
* @return string
*/
function getSectionTitle() {
return $this->getData('sectionTitle');
}
/**
* Set title of article's section.
* @param $sectionTitle string
*/
function setSectionTitle($sectionTitle) {
return $this->setData('sectionTitle', $sectionTitle);
}
/**
* Get section abbreviation.
* @return string
*/
function getSectionAbbrev() {
return $this->getData('sectionAbbrev');
}
/**
* Set section abbreviation.
* @param $sectionAbbrev string
*/
function setSectionAbbrev($sectionAbbrev) {
return $this->setData('sectionAbbrev', $sectionAbbrev);
}
/**
* Get title.
* @param $locale
* @return string
*/
function getTitle($locale) {
return $this->getData('title', $locale);
}
/**
* Set title.
* @param $title string
* @param $locale
*/
function setTitle($title, $locale) {
return $this->setData('title', $title, $locale);
}
/**
* Get abstract.
* @param $locale
* @return string
*/
function getAbstract($locale) {
return $this->getData('abstract', $locale);
}
/**
* Set abstract.
* @param $abstract string
* @param $locale
*/
function setAbstract($abstract, $locale) {
return $this->setData('abstract', $abstract, $locale);
}
/**
* Return the localized discipline
* @return string
*/
function getArticleDiscipline() {
return $this->getLocalizedData('discipline');
}
/**
* Get discipline
* @param $locale
* @return string
*/
function getDiscipline($locale) {
return $this->getData('discipline', $locale);
}
/**
* Set discipline
* @param $discipline string
* @param $locale
*/
function setDiscipline($discipline, $locale) {
return $this->setData('discipline', $discipline, $locale);
}
/**
* Return the localized subject classification
* @return string
*/
function getArticleSubjectClass() {
return $this->getLocalizedData('subjectClass');
}
/**
* Get subject classification.
* @param $locale
* @return string
*/
function getSubjectClass($locale) {
return $this->getData('subjectClass', $locale);
}
/**
* Set subject classification.
* @param $subjectClass string
* @param $locale
*/
function setSubjectClass($subjectClass, $locale) {
return $this->setData('subjectClass', $subjectClass, $locale);
}
/**
* Return the localized subject
* @return string
*/
function getArticleSubject() {
return $this->getLocalizedData('subject');
}
/**
* Get subject.
* @param $locale
* @return string
*/
function getSubject($locale) {
return $this->getData('subject', $locale);
}
/**
* Set subject.
* @param $subject string
* @param $locale
*/
function setSubject($subject, $locale) {
return $this->setData('subject', $subject, $locale);
}
/**
* Return the localized geographical coverage
* @return string
*/
function getArticleCoverageGeo() {
return $this->getLocalizedData('coverageGeo');
}
/**
* Get geographical coverage.
* @param $locale
* @return string
*/
function getCoverageGeo($locale) {
return $this->getData('coverageGeo', $locale);
}
/**
* Set geographical coverage.
* @param $coverageGeo string
* @param $locale
*/
function setCoverageGeo($coverageGeo, $locale) {
return $this->setData('coverageGeo', $coverageGeo, $locale);
}
/**
* Return the localized chronological coverage
* @return string
*/
function getArticleCoverageChron() {
return $this->getLocalizedData('coverageChron');
}
/**
* Get chronological coverage.
* @param $locale
* @return string
*/
function getCoverageChron($locale) {
return $this->getData('coverageChron', $locale);
}
/**
* Set chronological coverage.
* @param $coverageChron string
* @param $locale
*/
function setCoverageChron($coverageChron, $locale) {
return $this->setData('coverageChron', $coverageChron, $locale);
}
/**
* Return the localized sample coverage
* @return string
*/
function getArticleCoverageSample() {
return $this->getLocalizedData('coverageSample');
}
/**
* Get research sample coverage.
* @param $locale
* @return string
*/
function getCoverageSample($locale) {
return $this->getData('coverageSample', $locale);
}
/**
* Set geographical coverage.
* @param $coverageSample string
* @param $locale
*/
function setCoverageSample($coverageSample, $locale) {
return $this->setData('coverageSample', $coverageSample, $locale);
}
/**
* Return the localized type (method/approach)
* @return string
*/
function getArticleType() {
return $this->getLocalizedData('type');
}
/**
* Get type (method/approach).
* @param $locale
* @return string
*/
function getType($locale) {
return $this->getData('type', $locale);
}
/**
* Set type (method/approach).
* @param $type string
* @param $locale
*/
function setType($type, $locale) {
return $this->setData('type', $type, $locale);
}
/**
* Get language.
* @return string
*/
function getLanguage() {
return $this->getData('language');
}
/**
* Set language.
* @param $language string
*/
function setLanguage($language) {
return $this->setData('language', $language);
}
/**
* Return the localized sponsor
* @return string
*/
function getArticleSponsor() {
return $this->getLocalizedData('sponsor');
}
/**
* Get sponsor.
* @param $locale
* @return string
*/
function getSponsor($locale) {
return $this->getData('sponsor', $locale);
}
/**
* Set sponsor.
* @param $sponsor string
* @param $locale
*/
function setSponsor($sponsor, $locale) {
return $this->setData('sponsor', $sponsor, $locale);
}
/**
* Get the localized article cover filename
* @return string
*/
function getArticleFileName() {
return $this->getLocalizedData('fileName');
}
/**
* get file name
* @param $locale string
* @return string
*/
function getFileName($locale) {
return $this->getData('fileName', $locale);
}
/**
* set file name
* @param $fileName string
* @param $locale string
*/
function setFileName($fileName, $locale) {
return $this->setData('fileName', $fileName, $locale);
}
/**
* Get the localized article cover width
* @return string
*/
function getArticleWidth() {
return $this->getLocalizedData('width');
}
/**
* get width of cover page image
* @param $locale string
* @return string
*/
function getWidth($locale) {
return $this->getData('width', $locale);
}
/**
* set width of cover page image
* @param $locale string
* @param $width int
*/
function setWidth($width, $locale) {
return $this->setData('width', $width, $locale);
}
/**
* Get the localized article cover height
* @return string
*/
function getArticleHeight() {
return $this->getLocalizedData('height');
}
/**
* get height of cover page image
* @param $locale string
* @return string
*/
function getHeight($locale) {
return $this->getData('height', $locale);
}
/**
* set height of cover page image
* @param $locale string
* @param $height int
*/
function setHeight($height, $locale) {
return $this->setData('height', $height, $locale);
}
/**
* Get the localized article cover filename on the uploader's computer
* @return string
*/
function getArticleOriginalFileName() {
return $this->getLocalizedData('originalFileName');
}
/**
* get original file name
* @param $locale string
* @return string
*/
function getOriginalFileName($locale) {
return $this->getData('originalFileName', $locale);
}
/**
* set original file name
* @param $originalFileName string
* @param $locale string
*/
function setOriginalFileName($originalFileName, $locale) {
return $this->setData('originalFileName', $originalFileName, $locale);
}
/**
* Get the localized article cover alternate text
* @return string
*/
function getArticleCoverPageAltText() {
return $this->getLocalizedData('coverPageAltText');
}
/**
* get cover page alternate text
* @param $locale string
* @return string
*/
function getCoverPageAltText($locale) {
return $this->getData('coverPageAltText', $locale);
}
/**
* set cover page alternate text
* @param $coverPageAltText string
* @param $locale string
*/
function setCoverPageAltText($coverPageAltText, $locale) {
return $this->setData('coverPageAltText', $coverPageAltText, $locale);
}
/**
* Get the localized article cover filename
* @return string
*/
function getArticleShowCoverPage() {
return $this->getLocalizedData('showCoverPage');
}
/**
* get show cover page
* @param $locale string
* @return int
*/
function getShowCoverPage($locale) {
return $this->getData('showCoverPage', $locale);
}
/**
* set show cover page
* @param $showCoverPage int
* @param $locale string
*/
function setShowCoverPage($showCoverPage, $locale) {
return $this->setData('showCoverPage', $showCoverPage, $locale);
}
/**
* get hide cover page thumbnail in Toc
* @param $locale string
* @return int
*/
function getHideCoverPageToc($locale) {
return $this->getData('hideCoverPageToc', $locale);
}
/**
* set hide cover page thumbnail in Toc
* @param $hideCoverPageToc int
* @param $locale string
*/
function setHideCoverPageToc($hideCoverPageToc, $locale) {
return $this->setData('hideCoverPageToc', $hideCoverPageToc, $locale);
}
/**
* get hide cover page in abstract view
* @param $locale string
* @return int
*/
function getHideCoverPageAbstract($locale) {
return $this->getData('hideCoverPageAbstract', $locale);
}
/**
* set hide cover page in abstract view
* @param $hideCoverPageAbstract int
* @param $locale string
*/
function setHideCoverPageAbstract($hideCoverPageAbstract, $locale) {
return $this->setData('hideCoverPageAbstract', $hideCoverPageAbstract, $locale);
}
/**
* Get comments to editor.
* @return string
*/
function getCommentsToEditor() {
return $this->getData('commentsToEditor');
}
/**
* Set comments to editor.
* @param $commentsToEditor string
*/
function setCommentsToEditor($commentsToEditor) {
return $this->setData('commentsToEditor', $commentsToEditor);
}
/**
* Get submission date.
* @return date
*/
function getDateSubmitted() {
return $this->getData('dateSubmitted');
}
/**
* Set submission date.
* @param $dateSubmitted date
*/
function setDateSubmitted($dateSubmitted) {
return $this->setData('dateSubmitted', $dateSubmitted);
}
/**
* Get the date of the last status modification.
* @return date
*/
function getDateStatusModified() {
return $this->getData('dateStatusModified');
}
/**
* Set the date of the last status modification.
* @param $dateModified date
*/
function setDateStatusModified($dateModified) {
return $this->setData('dateStatusModified', $dateModified);
}
/**
* Get the date of the last modification.
* @return date
*/
function getLastModified() {
return $this->getData('lastModified');
}
/**
* Set the date of the last modification.
* @param $dateModified date
*/
function setLastModified($dateModified) {
return $this->setData('lastModified', $dateModified);
}
/**
* Stamp the date of the last modification to the current time.
*/
function stampModified() {
return $this->setLastModified(Core::getCurrentDate());
}
/**
* Stamp the date of the last status modification to the current time.
*/
function stampStatusModified() {
return $this->setDateStatusModified(Core::getCurrentDate());
}
/**
* Get article status.
* @return int
*/
function getStatus() {
return $this->getData('status');
}
/**
* Set article status.
* @param $status int
*/
function setStatus($status) {
return $this->setData('status', $status);
}
/**
* Get a map for status constant to locale key.
* @return array
*/
function &getStatusMap() {
static $statusMap;
if (!isset($statusMap)) {
$statusMap = array(
STATUS_ARCHIVED => 'submissions.archived',
STATUS_QUEUED => 'submissions.queued',
STATUS_PUBLISHED => 'submissions.published',
STATUS_DECLINED => 'submissions.declined',
STATUS_QUEUED_UNASSIGNED => 'submissions.queuedUnassigned',
STATUS_QUEUED_REVIEW => 'submissions.queuedReview',
STATUS_QUEUED_EDITING => 'submissions.queuedEditing',
STATUS_INCOMPLETE => 'submissions.incomplete'
);
}
return $statusMap;
}
/**
* Get a locale key for the article's current status.
* @return string
*/
function getStatusKey() {
$statusMap =& $this->getStatusMap();
return $statusMap[$this->getStatus()];
}
/**
* Get submission progress (most recently completed submission step).
* @return int
*/
function getSubmissionProgress() {
return $this->getData('submissionProgress');
}
/**
* Get current review round.
* @return int
*/
function getCurrentRound() {
return $this->getData('currentRound');
}
/**
* Set current review round.
* @param $currentRound int
*/
function setCurrentRound($currentRound) {
return $this->setData('currentRound', $currentRound);
}
/**
* Set submission progress.
* @param $submissionProgress int
*/
function setSubmissionProgress($submissionProgress) {
return $this->setData('submissionProgress', $submissionProgress);
}
/**
* Get submission file id.
* @return int
*/
function getSubmissionFileId() {
return $this->getData('submissionFileId');
}
/**
* Set submission file id.
* @param $submissionFileId int
*/
function setSubmissionFileId($submissionFileId) {
return $this->setData('submissionFileId', $submissionFileId);
}
/**
* Get revised file id.
* @return int
*/
function getRevisedFileId() {
return $this->getData('revisedFileId');
}
/**
* Set revised file id.
* @param $revisedFileId int
*/
function setRevisedFileId($revisedFileId) {
return $this->setData('revisedFileId', $revisedFileId);
}
/**
* Get review file id.
* @return int
*/
function getReviewFileId() {
return $this->getData('reviewFileId');
}
/**
* Set review file id.
* @param $reviewFileId int
*/
function setReviewFileId($reviewFileId) {
return $this->setData('reviewFileId', $reviewFileId);
}
/**
* Get editor file id.
* @return int
*/
function getEditorFileId() {
return $this->getData('editorFileId');
}
/**
* Set editor file id.
* @param $editorFileId int
*/
function setEditorFileId($editorFileId) {
return $this->setData('editorFileId', $editorFileId);
}
/**
* Get copyedit file id.
* @return int
*/
function getCopyeditFileId() {
return $this->getData('copyeditFileId');
}
/**
* Set copyedit file id.
* @param $copyeditFileId int
*/
function setCopyeditFileId($copyeditFileId) {
return $this->setData('copyeditFileId', $copyeditFileId);
}
/**
* get pages
* @return string
*/
function getPages() {
return $this->getData('pages');
}
/**
* set pages
* @param $pages string
*/
function setPages($pages) {
return $this->setData('pages',$pages);
}
/**
* get expedited
* @return boolean
*/
function getFastTracked() {
return $this->getData('fastTracked');
}
/**
* set fastTracked
* @param $fastTracked boolean
*/
function setFastTracked($fastTracked) {
return $this->setData('fastTracked',$fastTracked);
}
/**
* Return boolean indicating if author should be hidden in issue ToC.
* @return boolean
*/
function getHideAuthor() {
return $this->getData('hideAuthor');
}
/**
* Set if author should be hidden in issue ToC.
* @param $hideAuthor boolean
*/
function setHideAuthor($hideAuthor) {
return $this->setData('hideAuthor', $hideAuthor);
}
/**
* Return article RT comments status.
* @return int
*/
function getCommentsStatus() {
return $this->getData('commentsStatus');
}
/**
* Set article RT comments status.
* @param $commentsStatus boolean
*/
function setCommentsStatus($commentsStatus) {
return $this->setData('commentsStatus', $commentsStatus);
}
/**
* Return locale string corresponding to RT comments status.
* @return string
*/
function getCommentsStatusString() {
switch ($this->getCommentsStatus()) {
case COMMENTS_DISABLE:
return 'article.comments.disable';
case COMMENTS_ENABLE:
return 'article.comments.enable';
default:
return 'article.comments.sectionDefault';
}
}
/**
* Return boolean indicating if article RT comments should be enabled.
* Checks both the section and article comments status. Article status
* overrides section status.
* @return int
*/
function getEnableComments() {
switch ($this->getCommentsStatus()) {
case COMMENTS_DISABLE:
return false;
case COMMENTS_ENABLE:
return true;
case COMMENTS_SECTION_DEFAULT:
$sectionDao =& DAORegistry::getDAO('SectionDAO');
$section =& $sectionDao->getSection($this->getSectionId(), $this->getJournalId());
if ($section->getDisableComments()) {
return false;
} else {
return true;
}
}
}
/**
* Get an associative array matching RT comments status codes with locale strings.
* @return array comments status => localeString
*/
function &getCommentsStatusOptions() {
static $commentsStatusOptions = array(
COMMENTS_SECTION_DEFAULT => 'article.comments.sectionDefault',
COMMENTS_DISABLE => 'article.comments.disable',
COMMENTS_ENABLE => 'article.comments.enable'
);
return $commentsStatusOptions;
}
}
?>