[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
v1
/
lib
/
pkp
/
classes
/
user
/
maps
/
[
Home
]
File: Schema.php
<?php /** * @file classes/user/maps/Schema.php * * Copyright (c) 2014-2021 Simon Fraser University * Copyright (c) 2000-2021 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class Schema * * @brief Map users to the properties defined in the user schema */ namespace PKP\user\maps; use APP\facades\Repo; use Illuminate\Support\Enumerable; use PKP\db\DAORegistry; use PKP\plugins\Hook; use PKP\services\PKPSchemaService; use PKP\user\User; class Schema extends \PKP\core\maps\Schema { public Enumerable $collection; public string $schema = PKPSchemaService::SCHEMA_USER; /** * Map a publication * * Includes all properties in the user schema. */ public function map(User $item): array { return $this->mapByProperties($this->getProps(), $item); } /** * Summarize a user * * Includes properties with the apiSummary flag in the user schema. */ public function summarize(User $item): array { return $this->mapByProperties($this->getSummaryProps(), $item); } /** * Summarize a user with reviewer data * * Includes properties with the apiSummary flag in the user schema. */ public function summarizeReviewer(User $item): array { return $this->mapByProperties(array_merge($this->getSummaryProps(), ['reviewsActive', 'reviewsCompleted', 'reviewsDeclined', 'reviewsCancelled', 'averageReviewCompletionDays', 'dateLastReviewAssignment', 'reviewerRating']), $item); } /** * Map a collection of Users * * @see self::map */ public function mapMany(Enumerable $collection): Enumerable { $this->collection = $collection; return $collection->map(function ($item) { return $this->map($item); }); } /** * Summarize a collection of users * * @see self::summarize */ public function summarizeMany(Enumerable $collection): Enumerable { $this->collection = $collection; return $collection->map(function ($item) { return $this->summarize($item); }); } /** * Summarize a collection of reviewers * * @see self::summarizeReviewer */ public function summarizeManyReviewers(Enumerable $collection): Enumerable { $this->collection = $collection; return $collection->map(function ($item) { return $this->summarizeReviewer($item); }); } /** * Map schema properties of a user to an assoc array */ protected function mapByProperties(array $props, User $user): array { $output = []; foreach ($props as $prop) { switch ($prop) { case 'id': $output[$prop] = (int) $user->getId(); break; case 'fullName': $output[$prop] = $user->getFullName(); break; case 'gossip': if (Repo::user()->canCurrentUserGossip($user->getId())) { $output[$prop] = $user->getGossip(); } break; case 'reviewsActive': $output[$prop] = $user->getData('incompleteCount'); break; case 'reviewsCompleted': $output[$prop] = $user->getData('completeCount'); break; case 'reviewsDeclined': $output[$prop] = $user->getData('declinedCount'); break; case 'reviewsCancelled': $output[$prop] = $user->getData('cancelledCount'); break; case 'averageReviewCompletionDays': $output[$prop] = $user->getData('averageTime'); break; case 'dateLastReviewAssignment': $output[$prop] = $user->getData('lastAssigned'); break; case 'disabledReason': $output[$prop] = $user->getDisabledReason(); break; case '_href': $output[$prop] = $this->getApiUrl( 'users/' . $user->getId(), $this->context->getData('urlPath') ); break; case 'groups': $output[$prop] = null; if ($this->context) { $userGroups = Repo::userGroup()->userUserGroups($user->getId(), $this->context->getId()); $output[$prop] = []; foreach ($userGroups as $userGroup) { $output[$prop][] = [ 'id' => (int) $userGroup->getId(), 'name' => $userGroup->getName(null), 'abbrev' => $userGroup->getAbbrev(null), 'roleId' => (int) $userGroup->getRoleId(), 'showTitle' => (bool) $userGroup->getShowTitle(), 'permitSelfRegistration' => (bool) $userGroup->getPermitSelfRegistration(), 'permitMetadataEdit' => (bool) $userGroup->getPermitMetadataEdit(), 'recommendOnly' => (bool) $userGroup->getRecommendOnly(), ]; } } break; case 'interests': $output[$prop] = []; if ($this->context) { $interestDao = DAORegistry::getDAO('InterestDAO'); /** @var \PKP\user\InterestDAO $interestDao */ $interestEntryIds = $interestDao->getUserInterestIds($user->getId()); if (!empty($interestEntryIds)) { $interestEntryDao = DAORegistry::getDAO('InterestEntryDAO'); /** @var \PKP\user\InterestEntryDAO $interestEntryDao */ $results = $interestEntryDao->getByIds($interestEntryIds); $output[$prop] = []; while ($interest = $results->next()) { $output[$prop][] = [ 'id' => (int) $interest->getId(), 'interest' => $interest->getInterest(), ]; } } } break; default: $output[$prop] = $user->getData($prop); break; } $output = $this->schemaService->addMissingMultilingualValues($this->schema, $output, $this->context->getSupportedFormLocales()); Hook::call('UserSchema::getProperties::values', [$this, &$output, $user, $props]); ksort($output); } return $output; } }