classMapper; $query = $this->belongsToMany( $classMapper->getClassMapping('organisation'), 'organisation_members', 'user_id', 'organisation_id' ) ->orderBy('organisations.name', 'asc') ->withPivot(['flag_admin', 'flag_approved']); if ($withPending !== true) { $query = $query->wherePivot('flag_approved', true); } return $query; } /** * Get all organisations this user is attempting to join. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function pendingOrganisations() { /** @var \UserFrosting\Sprinkle\Core\Util\ClassMapper $classMapper */ $classMapper = static::$ci->classMapper; return $this->belongsToMany( $classMapper->getClassMapping('organisation'), 'organisation_members', 'user_id', 'organisation_id' ) ->orderBy('organisations.name', 'asc') ->withPivot(['flag_admin', 'flag_approved']) ->wherePivot('flag_approved', false); } /** * Get all organisations this user is and administrator for (including pending) * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function adminForOrganisations($excludePending = false) { /** @var \UserFrosting\Sprinkle\Core\Util\ClassMapper $classMapper */ $classMapper = static::$ci->classMapper; $query = $this->belongsToMany( $classMapper->getClassMapping('organisation'), 'organisation_members', 'user_id', 'organisation_id' ) ->orderBy('organisations.name', 'asc') ->withPivot(['flag_admin', 'flag_approved']) ->wherePivot('flag_admin', true); if ($excludePending === true) { $query = $query->wherePivot('flag_approved', true); } return $query; } /** * Joins the user's organisations directly, so we can do things like sort, search, paginate, etc. * * @param Builder $query * * @return Builder */ public function scopeJoinOrganisations($query) { $query = $query->select('users.*')->distinct(); $query = $query->leftJoin('organisation_members', 'organisation_members.user_id', '=', 'users.id'); $query = $query->leftJoin('organisations', 'organisations.id', '=', 'organisation_members.organisation_id'); return $query; } /** * Handle user being deleted. */ public function deleteUserOrganisations($hardDelete = false) { /** @var \UserFrosting\Sprinkle\Core\Util\ClassMapper $classMapper */ $classMapper = static::$ci->classMapper; if ($hardDelete) { $classMapper->getClassMapping('organisation')::query() ->where('registrant_id', $this->id) ->update(['registrant_id' => null]); $classMapper->getClassMapping('organisation_approval')::query() ->where('approver_id', $this->id) ->update(['approver_id' => null]); $classMapper->getClassMapping('organisation_membership_approval')::query() ->where('approver_id', $this->id) ->update(['approver_id' => null]); $this->organisations(true)->detach(); $this->refresh(); } return true; } static public function bootUserOrganisations() { static::deleting(function ($user) { if (!$user->deleteUserOrganisations($user->isForceDeleting())) { return false; } }); } }