first commit
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
<?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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user