Skip to content

Commit

Permalink
Merge branch 'fixProblemRevisions#149' into 'master'
Browse files Browse the repository at this point in the history
Adds support to detect preprints that had the title page inserted in older releases

See merge request softwares-pkp/plugins_ojs/folhaDeRostoDoPDF!5
  • Loading branch information
JhonathanLepidus committed Jun 22, 2021
2 parents 44e78a2 + 1538f84 commit fdabcac
Show file tree
Hide file tree
Showing 24 changed files with 344 additions and 115 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/generate-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
run: |
mkdir $PLUGIN_NAME
shopt -s extglob
cp -r !($PLUGIN_NAME|scripts|testes|README.md|.git*|.|..) $PLUGIN_NAME
cp -r !($PLUGIN_NAME|scripts|tests|README.md|.git*|.|..) $PLUGIN_NAME
wget -O composer.phar https://getcomposer.org/composer-stable.phar
php composer.phar install -d ${PLUGIN_NAME}
tar -zcvf $PLUGIN_NAME.tar.gz $PLUGIN_NAME
Expand Down
100 changes: 3 additions & 97 deletions TitlePagePlugin.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,7 @@
* @brief Plugin class for the TitlePageForPreprint plugin.
*/
import('lib.pkp.classes.plugins.GenericPlugin');
import('plugins.generic.titlePageForPreprint.sources.SubmissionModel');
import('plugins.generic.titlePageForPreprint.sources.GalleyAdapter');
import('plugins.generic.titlePageForPreprint.sources.SubmissionPress');
import('plugins.generic.titlePageForPreprint.sources.SubmissionPressPKP');
import('plugins.generic.titlePageForPreprint.sources.Pdf');
import('plugins.generic.titlePageForPreprint.sources.TitlePage');
import('plugins.generic.titlePageForPreprint.sources.Translator');
import('plugins.generic.titlePageForPreprint.sources.TranslatorPKP');
import('plugins.generic.titlePageForPreprint.classes.SubmissionPressFactory');

class TitlePagePlugin extends GenericPlugin {
const STEPS_TO_INSERT_TITLE_PAGE = 4;
Expand Down Expand Up @@ -61,14 +54,6 @@ public function modifySubmissionFileSchema($hookName, $params) {
return false;
}

public function getLogoPath($context) {
$publicFileManager = new PublicFileManager();
$filesPath = $publicFileManager->getContextFilesPath($context->getId());
$logoFilePath = $context->getLocalizedPageHeaderLogo()['uploadName'];

return $filesPath . DIRECTORY_SEPARATOR . $logoFilePath;
}

public function insertTitlePageWhenPublishing($hookName, $arguments) {
$publication = $arguments[0];
$this->insertTitlePageInPreprint($publication);
Expand All @@ -88,88 +73,9 @@ public function insertTitlePageInPreprint($publication){
$this->addLocaleData("pt_BR");
$this->addLocaleData("en_US");
$this->addLocaleData("es_ES");
$pressData = $this->getDataForPress($submission, $publication);
$press = $this->getSubmissionPress($submission, $publication, $context, $pressData);
$submissionPressFactory = new SubmissionPressFactory();
$press = $submissionPressFactory->createSubmissionPress($submission, $publication, $context);
$press->insertTitlePage();
}


private function getDataForPress($submission, $publication) {
$data = array();

$data['doi'] = $publication->getStoredPubId('doi');
$data['doiJournal'] = $publication->getData('vorDoi');
$data['authors'] = $this->getAuthors($publication);
$data['version'] = $publication->getData('version');

$dateSubmitted = strtotime($submission->getData('dateSubmitted'));
$data['submissionDate'] = date('Y-m-d', $dateSubmitted);
$datePublished = strtotime($publication->getData('datePublished'));
$data['publicationDate'] = date('Y-m-d', $datePublished);

$status = $publication->getData('relationStatus');
$relation = array(PUBLICATION_RELATION_NONE => 'publication.relation.none', PUBLICATION_RELATION_SUBMITTED => 'publication.relation.submitted', PUBLICATION_RELATION_PUBLISHED => 'publication.relation.published');
$data['status'] = ($status) ? ($relation[$status]) : ("");

return $data;
}

private function getAuthors($publication) {
$userGroupIds = array_map(function($author) {
return $author->getData('userGroupId');
}, $publication->getData('authors'));
$userGroups = array_map(function($userGroupId) {
$userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
return $userGroupDao->getbyId($userGroupId);
}, array_unique($userGroupIds));

return $publication->getAuthorString($userGroups);
}

private function getLatestRevision($submissionFileId) {
$submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
$revisions = $submissionFileDao->getRevisions($submissionFileId)->toArray();
$lastRevision = get_object_vars($revisions[0]);

foreach($revisions as $revision){
$revision = get_object_vars($revision);
if($revision['fileId'] > $lastRevision['fileId'])
$lastRevision = $revision;
}

return [$lastRevision['fileId'], $lastRevision['path']];
}

private function createGalleyAdapter($submission, $galley) {
$submissionFile = $galley->getFile();
list($revisionId, $revisionPath) = $this->getLatestRevision($submissionFile->getId());

if($submissionFile->getData('folhaDeRosto')) {
$revisionIds = $submissionFile->getData('revisoes');
$revisionIds = json_decode($revisionIds);

if($revisionId != end($revisionIds)) {
Services::get('submissionFile')->edit($submissionFile, [
'folhaDeRosto' => 'nao',
], Application::get()->getRequest());
}
}

return new GalleyAdapter($revisionPath, $galley->getLocale(), $submissionFile->getId(), $revisionId);
}

private function getSubmissionPress($submission, $publication, $context, $data) {
$logoPath = $this->getLogoPath($context);
$galleys = $publication->getData('galleys');

foreach ($galleys as $galley) {
$submissionGalleys[] = $this->createGalleyAdapter($submission, $galley);
}

return new SubmissionPressPKP(
$logoPath,
new SubmissionModel($data['status'], $data['doi'], $data['doiJournal'], $data['authors'], $data['submissionDate'], $data['publicationDate'], $data['version'], $submissionGalleys),
new TranslatorPKP($context, $submission, $publication)
);
}
}
File renamed without changes.
51 changes: 51 additions & 0 deletions classes/GalleyAdapterFactory.inc.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php
import('plugins.generic.titlePageForPreprint.classes.GalleyAdapter');
import('plugins.generic.titlePageForPreprint.classes.TitlePageDAO');

class GalleyAdapterFactory {

public function createGalleyAdapter($submission, $galley): GalleyAdapter {
$submissionFile = $galley->getFile();
list($lastRevisionId, $lastRevisionPath) = $this->getLatestRevision($submissionFile->getId());

if($this->submissionFileHasNewRevisionWithoutTitlePage($submissionFile, $lastRevisionId)) {
Services::get('submissionFile')->edit($submissionFile, [
'folhaDeRosto' => 'nao',
], Application::get()->getRequest());
}

return new GalleyAdapter($lastRevisionPath, $galley->getLocale(), $submissionFile->getId(), $lastRevisionId);
}

public function getLatestRevision($submissionFileId) {
$submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
$revisions = $submissionFileDao->getRevisions($submissionFileId)->toArray();
$lastRevision = get_object_vars($revisions[0]);

foreach($revisions as $revision){
$revision = get_object_vars($revision);
if($revision['fileId'] > $lastRevision['fileId'])
$lastRevision = $revision;
}

return [$lastRevision['fileId'], $lastRevision['path']];
}

public function submissionFileHasNewRevisionWithoutTitlePage($submissionFile, $lastRevisionId): bool {
if(!empty($submissionFile->getData('folhaDeRosto'))){
$revisionIds = $submissionFile->getData('revisoes');
$revisionIds = json_decode($revisionIds);

if($lastRevisionId != end($revisionIds)) {
$titlePageDao = new TitlePageDAO();
$numberOfRevisions = $titlePageDao->getNumberOfRevisions($submissionFile->getId());

if($numberOfRevisions != end($revisionIds)) { //Check for legacy cases
return true;
}
}
}

return false;
}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
66 changes: 66 additions & 0 deletions classes/SubmissionPressFactory.inc.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php
import('plugins.generic.titlePageForPreprint.classes.SubmissionPress');
import('plugins.generic.titlePageForPreprint.classes.SubmissionPressPKP');
import('plugins.generic.titlePageForPreprint.classes.SubmissionModel');
import('plugins.generic.titlePageForPreprint.classes.TranslatorPKP');
import('plugins.generic.titlePageForPreprint.classes.GalleyAdapterFactory');

class SubmissionPressFactory {

public function createSubmissionPress($submission, $publication, $context): SubmissionPress {
$logoPath = $this->getLogoPath($context);
$dataPress = $this->getDataForPress($submission, $publication);
$galleys = $publication->getData('galleys');

foreach ($galleys as $galley) {
$galleyAdapterFactory = new GalleyAdapterFactory();
$submissionGalleys[] = $galleyAdapterFactory->createGalleyAdapter($submission, $galley);
}

return new SubmissionPressPKP(
$logoPath,
new SubmissionModel($dataPress['status'], $dataPress['doi'], $dataPress['doiJournal'], $dataPress['authors'], $dataPress['submissionDate'], $dataPress['publicationDate'], $dataPress['version'], $submissionGalleys),
new TranslatorPKP($context, $submission, $publication)
);
}

public function getLogoPath($context) {
$publicFileManager = new PublicFileManager();
$filesPath = $publicFileManager->getContextFilesPath($context->getId());
$logoFilePath = $context->getLocalizedPageHeaderLogo()['uploadName'];

return $filesPath . DIRECTORY_SEPARATOR . $logoFilePath;
}

private function getAuthors($publication) {
$userGroupIds = array_map(function($author) {
return $author->getData('userGroupId');
}, $publication->getData('authors'));
$userGroups = array_map(function($userGroupId) {
$userGroupDao = DAORegistry::getDAO('UserGroupDAO');
return $userGroupDao->getbyId($userGroupId);
}, array_unique($userGroupIds));

return $publication->getAuthorString($userGroups);
}

private function getDataForPress($submission, $publication) {
$data = array();

$data['doi'] = $publication->getStoredPubId('doi');
$data['doiJournal'] = $publication->getData('vorDoi');
$data['authors'] = $this->getAuthors($publication);
$data['version'] = $publication->getData('version');

$dateSubmitted = strtotime($submission->getData('dateSubmitted'));
$data['submissionDate'] = date('Y-m-d', $dateSubmitted);
$datePublished = strtotime($publication->getData('datePublished'));
$data['publicationDate'] = date('Y-m-d', $datePublished);

$status = $publication->getData('relationStatus');
$relation = array(PUBLICATION_RELATION_NONE => 'publication.relation.none', PUBLICATION_RELATION_SUBMITTED => 'publication.relation.submitted', PUBLICATION_RELATION_PUBLISHED => 'publication.relation.published');
$data['status'] = ($status) ? ($relation[$status]) : ("");

return $data;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
<?php
import ('plugins.generic.titlePageForPreprint.classes.SubmissionModel');
import ('plugins.generic.titlePageForPreprint.classes.SubmissionPress');
import ('plugins.generic.titlePageForPreprint.classes.Translator');
import ('plugins.generic.titlePageForPreprint.classes.TitlePage');
import ('plugins.generic.titlePageForPreprint.classes.Pdf');

class SubmissionPressForTests implements SubmissionPress {

private $logoForTitlePage;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
<?php
import ('plugins.generic.titlePageForPreprint.classes.Pdf');
import ('plugins.generic.titlePageForPreprint.classes.SubmissionModel');
import ('plugins.generic.titlePageForPreprint.classes.SubmissionPress');
import ('plugins.generic.titlePageForPreprint.classes.Translator');
import ('plugins.generic.titlePageForPreprint.classes.TitlePage');

class SubmissionPressPKP implements SubmissionPress {

private $logoForTitlePage;
Expand Down
1 change: 1 addition & 0 deletions sources/TitlePage.inc.php → classes/TitlePage.inc.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

require __DIR__ . '/../vendor/autoload.php';
import ('plugins.generic.titlePageForPreprint.classes.Pdf');

class TitlePage {

Expand Down
27 changes: 27 additions & 0 deletions classes/TitlePageDAO.inc.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

/**
* @file plugins/reports/titlePageForPreprint/classes/TitlePageDAO.inc.php
*
* @class TitlePageDAO
* @ingroup plugins_generic_titlePageForPreprint
*
* Operations for retrieving data for the title page
*/

import('lib.pkp.classes.db.DAO');

use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Support\Collection;

class TitlePageDAO extends DAO {

public function getNumberOfRevisions(int $submissionFileId): int {
$numberOfRevisions = Capsule::table('submission_file_revisions')
->where('submission_file_id', $submissionFileId)
->count();

return $numberOfRevisions;
}

}
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php
import ('plugins.generic.titlePageForPreprint.classes.Translator');

class TranslatorForTests implements Translator {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php
import ('plugins.generic.titlePageForPreprint.classes.Translator');

class TranslatorPKP implements Translator {

Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion scripts/run-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

set -e

testsCommand="phpunit --bootstrap sources/autoload.inc.php tests/"
testsCommand="phpunit --bootstrap classes/autoload.inc.php tests/"

echo "Running unit tests..."
eval "$testsCommand"
14 changes: 8 additions & 6 deletions tests/PdfHandlingTest.php
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
<?php
use PHPUnit\Framework\TestCase;
import ('plugins.generic.titlePageForPreprint.classes.TranslatorForTests');

class PdfHandlingTest extends TestCase {
protected const TESTS_DIRECTORY = 'plugins' . DIRECTORY_SEPARATOR . 'generic' . DIRECTORY_SEPARATOR . 'titlePageForPreprint' . DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR;

protected $status = "publication.relation.none";
protected $doi = "10.1000/182";
protected $doiJournal = "https://doi.org/10.1590/1413-81232020256.1.10792020";
protected $logo = 'tests' . DIRECTORY_SEPARATOR . "logo_noAlphaChannel.png";
protected $logo = self::TESTS_DIRECTORY . "logo_noAlphaChannel.png";
protected $checklist = array("A submissão não foi publicado anteriormente.", "As URLs das referências foram fornecidas.");
protected $locale = "pt_BR";
protected $title = "Assim Falou Zaratustra";
Expand All @@ -18,13 +20,13 @@ class PdfHandlingTest extends TestCase {

protected function setUp(): void {
$this->translator = new TranslatorForTests();
$this->pathOfTestPdf = "tests" . DIRECTORY_SEPARATOR . "testOnePage.pdf";
$this->copyOfTestPdfToRestore = "tests" . DIRECTORY_SEPARATOR . "testOnePage_copy.pdf";
$this->pathOfTestPdf = self::TESTS_DIRECTORY . "testOnePage.pdf";
$this->copyOfTestPdfToRestore = self::TESTS_DIRECTORY . "testOnePage_copy.pdf";
copy($this->pathOfTestPdf, $this->copyOfTestPdfToRestore);
$this->pdfAsText = "tests" . DIRECTORY_SEPARATOR . "testOnePage.txt";
$this->pdfAsText = self::TESTS_DIRECTORY . "testOnePage.txt";

$this->pathOfTestPdf2 = "tests" . DIRECTORY_SEPARATOR . "testTwoPages.pdf";
$this->copyOfTestPdfToRestore2 = "tests" . DIRECTORY_SEPARATOR . "testTwoPages_copy.pdf";
$this->pathOfTestPdf2 = self::TESTS_DIRECTORY . "testTwoPages.pdf";
$this->copyOfTestPdfToRestore2 = self::TESTS_DIRECTORY . "testTwoPages_copy.pdf";
copy($this->pathOfTestPdf2, $this->copyOfTestPdfToRestore2);
}

Expand Down
Loading

0 comments on commit fdabcac

Please sign in to comment.