[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
14082024
/
Data
/
htdocs
/
htdocs
/
jurnal-kesmas
/
lib
/
pkp
/
classes
/
publication
/
maps
/
[
Home
]
File: Schema.php
<?php /** * @file classes/publication/maps/Schema.php * * Copyright (c) 2014-2020 Simon Fraser University * Copyright (c) 2000-2020 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class Schema * * @brief Map publications to the properties defined in the publication schema */ namespace PKP\publication\maps; use APP\core\Request; use APP\facades\Repo; use APP\publication\Publication; use APP\submission\Submission; use Illuminate\Support\Enumerable; use Illuminate\Support\LazyCollection; use PKP\citation\CitationDAO; use PKP\context\Context; use PKP\db\DAORegistry; use PKP\services\PKPSchemaService; use PKP\submission\Genre; class Schema extends \PKP\core\maps\Schema { /** */ public Enumerable $collection; /** */ public string $schema = PKPSchemaService::SCHEMA_PUBLICATION; /** @var Submission */ public $submission; /** @var bool */ public $anonymize; /** @var LazyCollection UserGroup The user groups for this context. */ public $userGroups; /** @var Genre[] The file genres for this context. */ public array $genres; public function __construct(Submission $submission, LazyCollection $userGroups, array $genres, Request $request, Context $context, PKPSchemaService $schemaService) { parent::__construct($request, $context, $schemaService); $this->submission = $submission; $this->userGroups = $userGroups; $this->genres = $genres; } /** * Map a publication * * Includes all properties in the publication schema. */ public function map(Publication $item, bool $anonymize = false): array { return $this->mapByProperties($this->getProps(), $item, $anonymize); } /** * Summarize a publication * * Includes properties with the apiSummary flag in the publication schema. */ public function summarize(Publication $item, bool $anonymize = false): array { return $this->mapByProperties($this->getSummaryProps(), $item, $anonymize); } /** * Map a collection of Publications * * @see self::map */ public function mapMany(Enumerable $collection, bool $anonymize = false): Enumerable { $this->collection = $collection; return $collection->map(function ($item) use ($anonymize) { return $this->map($item, $anonymize); }); } /** * Summarize a collection of Publications * * @see self::summarize */ public function summarizeMany(Enumerable $collection, bool $anonymize = false): Enumerable { $this->collection = $collection; return $collection->map(function ($item) use ($anonymize) { return $this->summarize($item, $anonymize); }); } /** * Map schema properties of a Publication to an assoc array */ protected function mapByProperties(array $props, Publication $publication, bool $anonymize): array { $this->anonymize = $anonymize; $output = []; foreach ($props as $prop) { switch ($prop) { case '_href': $output[$prop] = $this->getApiUrl( 'submissions/' . $publication->getData('submissionId') . '/publications/' . $publication->getId(), $this->context->getData('urlPath') ); break; case 'authors': if ($this->anonymize) { $output[$prop] = []; } else { $output[$prop] = Repo::author()->getSchemaMap()->summarizeMany($publication->getData('authors'))->values(); } break; case 'authorsString': $output[$prop] = $this->anonymize ? '' : $publication->getAuthorString($this->userGroups); break; case 'authorsStringIncludeInBrowse': $output[$prop] = $this->anonymize ? '' : $publication->getAuthorString($this->userGroups, true); break; case 'authorsStringShort': $output[$prop] = $this->anonymize ? '' : $publication->getShortAuthorString(); break; case 'categoryIds': $output[$prop] = $publication->getData('categoryIds'); break; case 'citations': $citationDao = DAORegistry::getDAO('CitationDAO'); /** @var CitationDAO $citationDao */ $output[$prop] = array_map( function ($citation) { return $citation->getCitationWithLinks(); }, $citationDao->getByPublicationId($publication->getId())->toArray() ); break; case 'doiObject': if ($publication->getData('doiObject')) { $retVal = Repo::doi()->getSchemaMap()->summarize($publication->getData('doiObject')); } else { $retVal = null; } $output[$prop] = $retVal; break; case 'fullTitle': $output[$prop] = $publication->getFullTitles('html'); break; default: $output[$prop] = $publication->getData($prop); break; } } return $output; } }