예제 #1
0
 /**
  * Unpublish a previously-published issue
  * @param $args array
  * @param $request PKPRequest
  */
 function unpublishIssue($args, $request)
 {
     $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
     $journal = $request->getJournal();
     $issue->setCurrent(0);
     $issue->setPublished(0);
     $issue->setDatePublished(null);
     $issueDao = DAORegistry::getDAO('IssueDAO');
     $issueDao->updateObject($issue);
     // insert article tombstones for all articles
     import('classes.article.ArticleTombstoneManager');
     $articleTombstoneManager = new ArticleTombstoneManager();
     $publishedArticleDao = DAORegistry::getDAO('PublishedArticleDAO');
     $publishedArticles = $publishedArticleDao->getPublishedArticles($issue->getId());
     foreach ($publishedArticles as $article) {
         $articleTombstoneManager->insertArticleTombstone($article, $journal);
     }
     $dispatcher = $request->getDispatcher();
     // FIXME: Find a better way to reload the containing tabs.
     // Without this, issues don't move between tabs properly.
     return $request->redirectUrlJson($dispatcher->url($request, ROUTE_PAGE, null, 'manageIssues'));
 }
예제 #2
0
 /**
  * Archive a submission.
  * @param $sectionEditorSubmission object
  */
 function archiveSubmission($sectionEditorSubmission, $request)
 {
     $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO');
     $user =& $request->getUser();
     if (HookRegistry::call('SectionEditorAction::archiveSubmission', array(&$sectionEditorSubmission))) {
         return;
     }
     $journal =& $request->getJournal();
     if ($sectionEditorSubmission->getStatus() == STATUS_PUBLISHED) {
         $publishedArticleDao =& DAORegistry::getDAO('PublishedArticleDAO');
         $publishedArticle =& $publishedArticleDao->getPublishedArticleByArticleId($sectionEditorSubmission->getId());
         $issueDao =& DAORegistry::getDAO('IssueDAO');
         $issue =& $issueDao->getIssueById($publishedArticle->getIssueId(), $publishedArticle->getJournalId());
         if ($issue->getPublished()) {
             // Insert article tombstone
             import('classes.article.ArticleTombstoneManager');
             $articleTombstoneManager = new ArticleTombstoneManager();
             $articleTombstoneManager->insertArticleTombstone($publishedArticle, $journal);
         }
     }
     $sectionEditorSubmission->setStatus(STATUS_ARCHIVED);
     $sectionEditorSubmission->stampStatusModified();
     $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
     // Add log
     import('classes.article.log.ArticleLog');
     ArticleLog::logEvent($request, $sectionEditorSubmission, ARTICLE_LOG_EDITOR_ARCHIVE, 'log.editor.archived');
 }
예제 #3
0
 /**
  * Remove an article from the issue.
  * @param $args array
  * @param $request PKPRequest
  * @return JSONMessage JSON object
  */
 function removeArticle($args, $request)
 {
     $journal = $request->getJournal();
     $articleId = (int) $request->getUserVar('articleId');
     $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
     $issueDao = DAORegistry::getDAO('IssueDAO');
     $publishedArticleDao = DAORegistry::getDAO('PublishedArticleDAO');
     $article = $publishedArticleDao->getPublishedArticleByArticleId($articleId);
     import('classes.article.ArticleTombstoneManager');
     $articleTombstoneManager = new ArticleTombstoneManager();
     if ($article && $article->getIssueId() == $issue->getId()) {
         if ($issue->getPublished()) {
             $articleTombstoneManager->insertArticleTombstone($article, $journal);
         }
         $article->setStatus(STATUS_QUEUED);
         $article->stampStatusModified();
         // If the article is the only one in the section, delete the section from custom issue ordering
         $sectionId = $article->getSectionId();
         $publishedArticleArray = $publishedArticleDao->getPublishedArticlesBySectionId($sectionId, $issue->getId());
         if (sizeof($publishedArticleArray) == 1) {
             $sectionDao = DAORegistry::getDAO('SectionDAO');
             $sectionDao->deleteCustomSection($issue->getId(), $sectionId);
         }
         $publishedArticleDao->deletePublishedArticleByArticleId($articleId);
         $publishedArticleDao->resequencePublishedArticles($article->getSectionId(), $issue->getId());
         return DAO::getDataChangedEvent();
     }
     // If we've fallen through, it must be a badly-specified article
     return new JSONMessage(false);
 }
예제 #4
0
 /**
  * Unpublish a previously-published issue
  */
 function unpublishIssue($args, $request)
 {
     $issueId = (int) array_shift($args);
     $this->validate($issueId);
     $issue =& $this->issue;
     $journal =& $request->getJournal();
     $issue->setCurrent(0);
     $issue->setPublished(0);
     $issue->setDatePublished(null);
     $issueDao =& DAORegistry::getDAO('IssueDAO');
     $issueDao->updateIssue($issue);
     // insert article tombstones for all articles
     import('classes.article.ArticleTombstoneManager');
     $articleTombstoneManager = new ArticleTombstoneManager();
     $publishedArticleDao =& DAORegistry::getDAO('PublishedArticleDAO');
     $publishedArticles =& $publishedArticleDao->getPublishedArticles($issueId);
     foreach ($publishedArticles as $article) {
         $articleTombstoneManager->insertArticleTombstone($article, $journal);
     }
     $request->redirect(null, null, 'futureIssues');
 }
예제 #5
0
 /**
  * Unpublish a previously-published issue
  * @param $args array
  * @param $request PKPRequest
  */
 function unpublishIssue($args, $request)
 {
     $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
     $journal = $request->getJournal();
     if (!$request->checkCSRF()) {
         return new JSONMessage(false);
     }
     $issue->setCurrent(0);
     $issue->setPublished(0);
     $issue->setDatePublished(null);
     $issueDao = DAORegistry::getDAO('IssueDAO');
     $issueDao->updateObject($issue);
     // insert article tombstones for all articles
     import('classes.article.ArticleTombstoneManager');
     $articleTombstoneManager = new ArticleTombstoneManager();
     $publishedArticleDao = DAORegistry::getDAO('PublishedArticleDAO');
     $publishedArticles = $publishedArticleDao->getPublishedArticles($issue->getId());
     foreach ($publishedArticles as $article) {
         $articleTombstoneManager->insertArticleTombstone($article, $journal);
     }
     $dispatcher = $request->getDispatcher();
     $json = new JSONMessage();
     $json->setEvent('containerReloadRequested', array('tabsUrl' => $dispatcher->url($request, ROUTE_PAGE, null, 'manageIssues', 'index')));
     return $json;
 }
 /**
  * Save the metadata and store the catalog data for this published
  * monograph.
  */
 function execute($request)
 {
     parent::execute($request);
     $submission = $this->getSubmission();
     $context = $request->getContext();
     $waivePublicationFee = $request->getUserVar('waivePublicationFee') ? true : false;
     if ($waivePublicationFee) {
         $markAsPaid = $request->getUserVar('markAsPaid');
         import('classes.payment.ojs.OJSPaymentManager');
         $paymentManager = new OJSPaymentManager($request);
         $user = $request->getUser();
         // Get a list of author user IDs
         $authorUserIds = array();
         $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO');
         $submitterAssignments = $stageAssignmentDao->getBySubmissionAndRoleId($submission->getId(), ROLE_ID_AUTHOR);
         $submitterAssignment = $submitterAssignments->next();
         assert($submitterAssignment);
         // At least one author should be assigned
         $queuedPayment =& $paymentManager->createQueuedPayment($context->getId(), PAYMENT_TYPE_PUBLICATION, $markAsPaid ? $submitterAssignment->getUserId() : $user->getId(), $submission->getId(), $markAsPaid ? $context->getSetting('publicationFee') : 0, $markAsPaid ? $context->getSetting('currency') : '');
         $paymentManager->queuePayment($queuedPayment);
         // Since this is a waiver, fulfill the payment immediately
         $paymentManager->fulfillQueuedPayment($request, $queuedPayment, $markAsPaid ? 'ManualPayment' : 'Waiver');
     } else {
         // Get the issue for publication.
         $issueDao = DAORegistry::getDAO('IssueDAO');
         $issueId = $this->getData('issueId');
         $issue = $issueDao->getById($issueId, $context->getId());
         $sectionDao = DAORegistry::getDAO('SectionDAO');
         $publishedArticleDao = DAORegistry::getDAO('PublishedArticleDAO');
         $publishedArticle = $publishedArticleDao->getPublishedArticleByArticleId($submission->getId(), null, false);
         /* @var $publishedArticle PublishedArticle */
         if ($publishedArticle) {
             if (!$issue || !$issue->getPublished()) {
                 $fromIssue = $issueDao->getById($publishedArticle->getIssueId(), $context->getId());
                 if ($fromIssue->getPublished()) {
                     // Insert article tombstone
                     import('classes.article.ArticleTombstoneManager');
                     $articleTombstoneManager = new ArticleTombstoneManager();
                     $articleTombstoneManager->insertArticleTombstone($submission, $context);
                 }
             }
         }
         import('classes.search.ArticleSearchIndex');
         $articleSearchIndex = new ArticleSearchIndex();
         // define the access status for the article if none is set.
         $accessStatus = $this->getData('accessStatus') != '' ? $this->getData('accessStatus') : ARTICLE_ACCESS_ISSUE_DEFAULT;
         $articleDao = DAORegistry::getDAO('ArticleDAO');
         if (!is_null($this->getData('pages'))) {
             $submission->setPages($this->getData('pages'));
         }
         if ($issue) {
             // Schedule against an issue.
             if ($publishedArticle) {
                 $publishedArticle->setIssueId($issueId);
                 $publishedArticle->setSequence(REALLY_BIG_NUMBER);
                 $publishedArticle->setDatePublished($this->getData('datePublished'));
                 $publishedArticle->setAccessStatus($accessStatus);
                 $publishedArticleDao->updatePublishedArticle($publishedArticle);
                 // Re-index the published article metadata.
                 $articleSearchIndex->articleMetadataChanged($publishedArticle);
             } else {
                 $publishedArticle = $publishedArticleDao->newDataObject();
                 $publishedArticle->setId($submission->getId());
                 $publishedArticle->setIssueId($issueId);
                 $publishedArticle->setDatePublished(Core::getCurrentDate());
                 $publishedArticle->setSequence(REALLY_BIG_NUMBER);
                 $publishedArticle->setAccessStatus($accessStatus);
                 $publishedArticleDao->insertObject($publishedArticle);
                 // If we're using custom section ordering, and if this is the first
                 // article published in a section, make sure we enter a custom ordering
                 // for it. (Default at the end of the list.)
                 if ($sectionDao->customSectionOrderingExists($issueId)) {
                     if ($sectionDao->getCustomSectionOrder($issueId, $submission->getSectionId()) === null) {
                         $sectionDao->insertCustomSectionOrder($issueId, $submission->getSectionId(), REALLY_BIG_NUMBER);
                         $sectionDao->resequenceCustomSectionOrders($issueId);
                     }
                 }
                 // Index the published article metadata and files for the first time.
                 $articleSearchIndex->articleMetadataChanged($publishedArticle);
                 $articleSearchIndex->submissionFilesChanged($publishedArticle);
             }
         } else {
             if ($publishedArticle) {
                 // This was published elsewhere; make sure we don't
                 // mess up sequencing information.
                 $issueId = $publishedArticle->getIssueId();
                 $publishedArticleDao->deletePublishedArticleByArticleId($submission->getId());
                 // Delete the article from the search index.
                 $articleSearchIndex->submissionFileDeleted($submission->getId());
             }
         }
         if ($this->getData('attachPermissions')) {
             $submission->setCopyrightYear($this->getData('copyrightYear'));
             $submission->setCopyrightHolder($this->getData('copyrightHolder'), null);
             // Localized
             $submission->setLicenseURL($this->getData('licenseURL'));
         } else {
             $submission->setCopyrightYear(null);
             $submission->setCopyrightHolder(null, null);
             $submission->setLicenseURL(null);
         }
         // Resequence the articles.
         $publishedArticleDao->resequencePublishedArticles($submission->getSectionId(), $issueId);
         $submission->stampStatusModified();
         if ($issue && $issue->getPublished()) {
             $submission->setStatus(STATUS_PUBLISHED);
             // delete article tombstone
             $tombstoneDao = DAORegistry::getDAO('DataObjectTombstoneDAO');
             $tombstoneDao->deleteByDataObjectId($submission->getId());
         } else {
             $submission->setStatus(STATUS_QUEUED);
         }
         $articleDao->updateObject($submission);
         $articleSearchIndex->articleChangesFinished();
     }
 }
 /**
  * Schedule/unschedule an article for publication.
  * @param $args array
  * @param $request object
  */
 function scheduleForPublication($args, $request)
 {
     $articleId = (int) array_shift($args);
     $issueId = (int) $request->getUserVar('issueId');
     $this->validate($articleId, SECTION_EDITOR_ACCESS_EDIT);
     $journal =& $request->getJournal();
     $submission =& $this->submission;
     $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO');
     $publishedArticleDao =& DAORegistry::getDAO('PublishedArticleDAO');
     $sectionDao =& DAORegistry::getDAO('SectionDAO');
     $publishedArticle =& $publishedArticleDao->getPublishedArticleByArticleId($articleId);
     $issueDao =& DAORegistry::getDAO('IssueDAO');
     $issue =& $issueDao->getIssueById($issueId, $journal->getId());
     if ($publishedArticle) {
         if (!$issue || !$issue->getPublished()) {
             $fromIssue =& $issueDao->getIssueById($publishedArticle->getIssueId(), $journal->getId());
             if ($fromIssue->getPublished()) {
                 // Insert article tombstone
                 import('classes.article.ArticleTombstoneManager');
                 $articleTombstoneManager = new ArticleTombstoneManager();
                 $articleTombstoneManager->insertArticleTombstone($submission, $journal);
             }
         }
     }
     import('classes.search.ArticleSearchIndex');
     $articleSearchIndex = new ArticleSearchIndex();
     if ($issue) {
         // Schedule against an issue.
         if ($publishedArticle) {
             $publishedArticle->setIssueId($issueId);
             $publishedArticle->setSeq(REALLY_BIG_NUMBER);
             $publishedArticleDao->updatePublishedArticle($publishedArticle);
             // Re-index the published article metadata.
             $articleSearchIndex->articleMetadataChanged($publishedArticle);
         } else {
             $publishedArticle = new PublishedArticle();
             $publishedArticle->setId($submission->getId());
             $publishedArticle->setIssueId($issueId);
             $publishedArticle->setDatePublished(Core::getCurrentDate());
             $publishedArticle->setSeq(REALLY_BIG_NUMBER);
             $publishedArticle->setAccessStatus(ARTICLE_ACCESS_ISSUE_DEFAULT);
             $publishedArticleDao->insertPublishedArticle($publishedArticle);
             // If we're using custom section ordering, and if this is the first
             // article published in a section, make sure we enter a custom ordering
             // for it. (Default at the end of the list.)
             if ($sectionDao->customSectionOrderingExists($issueId)) {
                 if ($sectionDao->getCustomSectionOrder($issueId, $submission->getSectionId()) === null) {
                     $sectionDao->insertCustomSectionOrder($issueId, $submission->getSectionId(), REALLY_BIG_NUMBER);
                     $sectionDao->resequenceCustomSectionOrders($issueId);
                 }
             }
             // Index the published article metadata and files for the first time.
             $articleSearchIndex->articleMetadataChanged($publishedArticle);
             $articleSearchIndex->articleFilesChanged($publishedArticle);
         }
     } else {
         if ($publishedArticle) {
             // This was published elsewhere; make sure we don't
             // mess up sequencing information.
             $issueId = $publishedArticle->getIssueId();
             $publishedArticleDao->deletePublishedArticleByArticleId($articleId);
             // Delete the article from the search index.
             $articleSearchIndex->articleFileDeleted($articleId);
         }
     }
     // Resequence the articles.
     $publishedArticleDao->resequencePublishedArticles($submission->getSectionId(), $issueId);
     $submission->stampStatusModified();
     if ($issue && $issue->getPublished()) {
         $submission->setStatus(STATUS_PUBLISHED);
         // delete article tombstone
         $tombstoneDao =& DAORegistry::getDAO('DataObjectTombstoneDAO');
         $tombstoneDao->deleteByDataObjectId($submission->getId());
     } else {
         $submission->setStatus(STATUS_QUEUED);
     }
     $sectionEditorSubmissionDao->updateSectionEditorSubmission($submission);
     // Call initialize permissions again to check if copyright year needs to be initialized.
     $articleDao =& DAORegistry::getDAO('ArticleDAO');
     $article = $articleDao->getArticle($articleId);
     $article->initializePermissions();
     $articleDao->updateLocaleFields($article);
     $articleSearchIndex->articleChangesFinished();
     $request->redirect(null, null, 'submissionEditing', array($articleId), null, 'scheduling');
 }