178 lines
4.1 KiB
PHP
178 lines
4.1 KiB
PHP
<?php
|
|
|
|
/*
|
|
* AVSDev UF Organisations (https://avsdev.uk)
|
|
*
|
|
* @link https://git.avsdev.uk/avsdev/sprinkle-organisations
|
|
* @license https://git.avsdev.uk/avsdev/sprinkle-organisations/blob/master/LICENSE.md (LGPL-3.0 License)
|
|
*/
|
|
|
|
namespace UserFrosting\Sprinkle\Organisations\Sprunje;
|
|
|
|
use UserFrosting\Sprinkle\Core\Sprunje\Sprunje;
|
|
use UserFrosting\Sprinkle\Core\Facades\Translator;
|
|
|
|
/**
|
|
* OrganisationSprunje.
|
|
*
|
|
* Implements Sprunje for the organisations API.
|
|
*
|
|
* @author Craig Williams (https://avsdev.uk)
|
|
*/
|
|
class OrganisationSprunje extends Sprunje
|
|
{
|
|
protected $name = 'organisations';
|
|
|
|
protected $listable = [
|
|
'status',
|
|
];
|
|
|
|
protected $sortable = [
|
|
'name',
|
|
'description',
|
|
'member_count',
|
|
'admin_count',
|
|
'status',
|
|
'created_at',
|
|
];
|
|
|
|
protected $filterable = [
|
|
'name',
|
|
'description',
|
|
'member_count',
|
|
'admin_count',
|
|
'status',
|
|
'info',
|
|
'created_at',
|
|
];
|
|
|
|
protected $excludeForAll = [
|
|
'info',
|
|
];
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function baseQuery()
|
|
{
|
|
return $this->classMapper->createInstance('organisation')->newQuery()->joinMemberCounts();
|
|
}
|
|
|
|
/**
|
|
* Filter by status (approved, pending).
|
|
*
|
|
* @param Builder $query
|
|
* @param mixed $value
|
|
*
|
|
* @return self
|
|
*/
|
|
protected function filterStatus($query, $value)
|
|
{
|
|
// Split value on separator for OR queries
|
|
$values = explode($this->orSeparator, $value);
|
|
$query->where(function ($query) use ($values) {
|
|
foreach ($values as $value) {
|
|
if ($value == 'approved') {
|
|
$query->orWhere('flag_approved', 1);
|
|
} elseif ($value == 'pending') {
|
|
$query->orWhere('flag_approved', 0);
|
|
}
|
|
}
|
|
});
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Filter by name (case insensitive).
|
|
*
|
|
* @param Builder $query
|
|
* @param mixed $value
|
|
*
|
|
* @return self
|
|
*/
|
|
protected function filterName($query, $value)
|
|
{
|
|
// Split value on separator for OR queries
|
|
$values = explode($this->orSeparator, $value);
|
|
$query->where(function ($query) use ($values) {
|
|
foreach ($values as $value) {
|
|
$query->orWhereRaw('LOWER(name) LIKE ?', [ '%' . strtolower($value) . '%' ]);
|
|
}
|
|
});
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Filter by description (case insensitive).
|
|
*
|
|
* @param Builder $query
|
|
* @param mixed $value
|
|
*
|
|
* @return self
|
|
*/
|
|
protected function filterDescription($query, $value)
|
|
{
|
|
// Split value on separator for OR queries
|
|
$values = explode($this->orSeparator, $value);
|
|
$query->where(function ($query) use ($values) {
|
|
foreach ($values as $value) {
|
|
$query->orWhereRaw('LOWER(description) LIKE ?', [ '%' . strtolower($value) . '%' ]);
|
|
}
|
|
});
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Return a list of possible user statuses.
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function listStatus()
|
|
{
|
|
return [
|
|
[
|
|
'value' => 'approved',
|
|
'text' => Translator::translate('APPROVED'),
|
|
],
|
|
[
|
|
'value' => 'pending',
|
|
'text' => Translator::translate('PENDING'),
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Sort approved, pending
|
|
*
|
|
* @param Builder $query
|
|
* @param string $direction
|
|
*
|
|
* @return self
|
|
*/
|
|
protected function sortStatus($query, $direction)
|
|
{
|
|
$query->orderBy('flag_approved', ($direction === 'desc' ? 'asc' : 'desc'));
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Sort based on created date.
|
|
*
|
|
* @param Builder $query
|
|
* @param string $direction
|
|
*
|
|
* @return self
|
|
*/
|
|
protected function sortCreatedAt($query, $direction)
|
|
{
|
|
$query->orderBy('organisations.created_at', $direction)
|
|
->orderby('organisations.id', $direction);
|
|
|
|
return $this;
|
|
}
|
|
}
|