[ 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
/
userGroup
/
[
Home
]
File: DAO.php
<?php /** * @file classes/userGroup/DAO.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 \PKP\userGroup\DAO * * @see \PKP\userGroup\UserGroup * * @brief Operations for retrieving and modifying UserGroup objects. */ namespace PKP\userGroup; use Illuminate\Database\Query\Builder; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; use Illuminate\Support\LazyCollection; use PKP\core\EntityDAO; use PKP\core\traits\EntityWithParent; use PKP\services\PKPSchemaService; /** * @template T of UserGroup * @extends EntityDAO<T> */ class DAO extends EntityDAO { use EntityWithParent; /** @copydoc EntityDAO::$schema */ public $schema = PKPSchemaService::SCHEMA_USER_GROUP; /** @copydoc EntityDAO::$table */ public $table = 'user_groups'; /** @copydoc EntityDAO::$settingsTable */ public $settingsTable = 'user_group_settings'; /** @copydoc EntityDAO::$primaryKeyColumn */ public $primaryKeyColumn = 'user_group_id'; /** @copydoc EntityDAO::$primaryTableColumns */ public $primaryTableColumns = [ 'id' => 'user_group_id', 'contextId' => 'context_id', 'roleId' => 'role_id', 'isDefault' => 'is_default', 'showTitle' => 'show_title', 'permitSelfRegistration' => 'permit_self_registration', 'permitMetadataEdit' => 'permit_metadata_edit', ]; /** * Get the parent object ID column name */ public function getParentColumn(): string { return 'context_id'; } /** * Instantiate a new DataObject */ public function newDataObject(): UserGroup { return app(UserGroup::class); } /** * Get the total count of rows matching the configured query */ public function getCount(Collector $query): int { return $query ->getQueryBuilder() ->count(); } /** * Get a list of ids matching the configured query * * @return Collection<int,int> */ public function getIds(Collector $query): Collection { return $query ->getQueryBuilder() ->select('ug.' . $this->primaryKeyColumn) ->pluck('ug.' . $this->primaryKeyColumn); } /** * Get a collection of publications matching the configured query * @return LazyCollection<int,T> */ public function getMany(Collector $query): LazyCollection { $rows = $query ->getQueryBuilder() ->get(); return LazyCollection::make(function () use ($rows) { foreach ($rows as $row) { yield $row->user_group_id => $this->fromRow($row); } }); } /** * @copydoc EntityDAO::fromRow() */ public function fromRow(object $row): UserGroup { $userGroup = parent::fromRow($row); return $userGroup; } /** * @copydoc EntityDAO::insert() */ public function insert(UserGroup $userGroup): int { return parent::_insert($userGroup); } /** * @copydoc EntityDAO::update() */ public function update(UserGroup $userGroup) { parent::_update($userGroup); } /** * @copydoc EntityDAO::delete() */ public function delete(UserGroup $userGroup) { parent::_delete($userGroup); } /** * Retrieves a keyed Collection (key = user_group_id, value = count) with the amount of active users for each user group */ public function getUserCountByContextId(?int $contextId = null): Collection { return DB::table('user_groups', 'ug') ->join('user_user_groups AS uug', 'uug.user_group_id', '=', 'ug.user_group_id') ->join('users AS u', 'u.user_id', '=', 'uug.user_id') ->when($contextId !== null, fn (Builder $query) => $query->where('ug.context_id', '=', $contextId)) ->where('u.disabled', '=', 0) ->groupBy('ug.user_group_id') ->select('ug.user_group_id') ->selectRaw('COUNT(0) AS count') ->pluck('count', 'user_group_id'); } }