Added capability to merge organisations

- Added an interface for organisation
- Added beforeDelete and beforeMerge callbacks
- Added hard/soft delete to organisations
This commit is contained in:
2022-02-07 16:20:30 +00:00
parent b6edcf03e8
commit 28255e315a
11 changed files with 536 additions and 2 deletions

View File

@@ -0,0 +1,85 @@
<?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\Database\Models\Interfaces;
use Illuminate\Database\Eloquent\Builder;
/**
* Organisation Interface.
*
* Represents a Organisation object as stored in the database.
*/
interface OrganisationInterface
{
/**
* Get a count of members within this organisation (includes admins).
*
* @return integer The number of members within the organisation.
*/
public function getMemberCountAttribute();
/**
* Get a count of administrators within this organisation.
*
* @return integer The number of admins within the organisation.
*/
public function getAdminCountAttribute();
/**
* Get a count of members within this organisation (excludes admins).
*
* @return integer The number of members within the organisation.
*/
public function getTotalMemberCountAttribute();
/**
* Delete this organisation from the database, along with any linked objects.
*
* @param bool $hardDelete Set to true to completely remove the organisation and all associated objects.
*
* @return bool true if the deletion was successful, false otherwise.
*/
public function delete($hardDelete = false);
/**
* Return this organisations's members.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function members();
/**
* Return this organisations's admins.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function administrators();
/**
* Performs tasks to be done before an organisation is merged
*
* By default, adds a new sign-in activity and updates any legacy hash.
*
* @param OrganisationInterface $target The organisation that will be merged towards.
* @param mixed[] $params Optional array of parameters used for this event handler.
*
* @todo Transition to Laravel Event dispatcher to handle this
*/
public function beforeMerge($target, $params = []);
/**
* Joins the organisation's member count, so we can do things like sort, search, paginate, etc.
*
* @param Builder $query
*
* @return Builder
*/
public function scopeJoinMemberCounts($query);
}