mirror of
https://github.com/a2nt/cms-niceties.git
synced 2024-09-29 19:18:59 +02:00
47 lines
1.5 KiB
PHP
47 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace A2nt\CMSNiceties\GraphQL;
|
|
|
|
if (!class_exists('SilverStripe\GraphQL\Pagination\PaginatedQueryCreator', true)) {
|
|
return;
|
|
}
|
|
|
|
use GraphQL\Type\Definition\ResolveInfo;
|
|
use GraphQL\Type\Definition\Type;
|
|
use SilverStripe\Security\Member;
|
|
use SilverStripe\GraphQL\Pagination\Connection;
|
|
use SilverStripe\GraphQL\Pagination\PaginatedQueryCreator;
|
|
|
|
class PaginatedReadMembersQueryCreator extends PaginatedQueryCreator
|
|
{
|
|
public function createConnection()
|
|
{
|
|
|
|
return Connection::create('paginatedReadMembers')
|
|
->setConnectionType($this->manager->getType('member'))
|
|
->setArgs([
|
|
'Email' => [
|
|
'type' => Type::string()
|
|
]
|
|
])
|
|
->setSortableFields(['ID', 'FirstName', 'Email'])
|
|
->setConnectionResolver(static function ($object, array $args, $context, ResolveInfo $info) {
|
|
$member = Member::singleton();
|
|
if (!$member->canView($context['currentUser'])) {
|
|
throw new \InvalidArgumentException(sprintf(
|
|
'%s view access not permitted',
|
|
Member::class
|
|
));
|
|
}
|
|
$list = Member::get();
|
|
|
|
// Optional filtering by properties
|
|
if (isset($args['Email'])) {
|
|
$list = $list->filter('Email', $args['Email']);
|
|
}
|
|
|
|
return $list;
|
|
});
|
|
}
|
|
}
|