diff --git a/locale/en_US/messages.php b/locale/en_US/messages.php index a2198ac..a79a90a 100644 --- a/locale/en_US/messages.php +++ b/locale/en_US/messages.php @@ -78,4 +78,7 @@ return [ 'SLUG_NOT_IN_USE' => 'A {{slug}} slug does not exist', 'LEAVE_CANNOT_UNDONE' => 'This action cannot be undone.', + + 'APPROVED' => 'Approved', + 'PENDING' => 'Pending', ]; diff --git a/src/Controller/OrganisationController.php b/src/Controller/OrganisationController.php index b11058c..b915b27 100644 --- a/src/Controller/OrganisationController.php +++ b/src/Controller/OrganisationController.php @@ -101,8 +101,7 @@ class OrganisationController extends SimpleController return $response->withJson([], 400); } - /** @var \UserFrosting\Support\Repository\Repository $config */ - $config = $this->ci->config; + $data['flag_approved'] = 1; // All checks passed! log events/activities and create organisation // Begin transaction - DB will be rolled back if an exception occurs @@ -621,7 +620,7 @@ class OrganisationController extends SimpleController ], ]); } - + /** * Renders the modal form for editing an existing organisation. * diff --git a/src/Database/Migrations/v002/UpdateOrganisationsTable.php b/src/Database/Migrations/v002/UpdateOrganisationsTable.php new file mode 100644 index 0000000..6f9c34a --- /dev/null +++ b/src/Database/Migrations/v002/UpdateOrganisationsTable.php @@ -0,0 +1,55 @@ +schema->hasTable('organisations')) { + $this->schema->table('organisations', function (Blueprint $table) { + $table->boolean('flag_approved')->default(1)->comment('Set to 1 if the organisation has been approved, 0 otherwise.'); + }); + } + } + + /** + * {@inheritdoc} + */ + public function down() + { + $this->schema->table('organisations', function (Blueprint $table) { + $table->dropColumn('flag_verified'); + }); + } +} diff --git a/src/Database/Models/Organisation.php b/src/Database/Models/Organisation.php index a607e7f..e7acf80 100644 --- a/src/Database/Models/Organisation.php +++ b/src/Database/Models/Organisation.php @@ -46,6 +46,7 @@ class Organisation extends Model implements OrganisationInterface 'slug', 'name', 'description', + 'flag_approved', 'deleted_at', ]; diff --git a/src/Sprunje/OrganisationSprunje.php b/src/Sprunje/OrganisationSprunje.php index 027c8d3..a1fdd1c 100644 --- a/src/Sprunje/OrganisationSprunje.php +++ b/src/Sprunje/OrganisationSprunje.php @@ -10,6 +10,7 @@ namespace UserFrosting\Sprinkle\Organisations\Sprunje; use UserFrosting\Sprinkle\Core\Sprunje\Sprunje; +use UserFrosting\Sprinkle\Core\Facades\Translator; /** * OrganisationSprunje. @@ -22,18 +23,24 @@ class OrganisationSprunje extends Sprunje { protected $name = 'organisations'; + protected $listable = [ + 'status', + ]; + protected $sortable = [ 'name', 'description', 'member_count', - 'admin_count' + 'admin_count', + 'status', ]; protected $filterable = [ 'name', 'description', 'member_count', - 'admin_count' + 'admin_count', + 'status', ]; /** @@ -43,4 +50,63 @@ class OrganisationSprunje extends Sprunje { 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; + } + + /** + * 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; + } } diff --git a/templates/tables/organisations.html.twig b/templates/tables/organisations.html.twig index d6975ce..32c77e2 100644 --- a/templates/tables/organisations.html.twig +++ b/templates/tables/organisations.html.twig @@ -13,6 +13,7 @@ {{translate('ORGANISATION')}} {{translate("DESCRIPTION")}} + {{translate("STATUS")}} {{translate("ORGANISATION.MEMBER_COUNT")}} {{translate("ORGANISATION.ADMIN_COUNT")}} {{translate("ACTIONS")}} @@ -45,6 +46,26 @@ + +