Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
560 changes: 560 additions & 0 deletions README.md

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions config/acquaintances.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,19 @@
*/
'interaction_relation' => \Multicaret\Acquaintances\Models\InteractionRelation::class,
/*
* Model name of Interaction Relation model
* Model name of Friendship Relation model
*/
'friendship' => \Multicaret\Acquaintances\Models\Friendship::class,
/*
* Model name of Interaction Relation model
* Model name of Friendship Groups model
*/
'friendship_groups' => \Multicaret\Acquaintances\Models\FriendFriendshipGroups::class,
/*
* Model name of Interaction Relation model
* Model name of Verification Relation model
*/
'verification' => \Multicaret\Acquaintances\Models\Verification::class,
/*
* Model name of Interaction Relation model
* Model name of Verification Groups model
*/
'verification_groups' => \Multicaret\Acquaintances\Models\VerificationGroups::class,
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAcquaintancesVerificationTable extends Migration
{
Expand All @@ -13,7 +14,7 @@ public function up()
$table->id();
$table->morphs('sender');
$table->morphs('recipient');
$table->string('message')->nullable()->comment('Verification message');
$table->text('message')->nullable()->comment('Verification message');
$table->string('status')->default('pending')->comment('pending/accepted/denied/blocked/');
$table->timestamps();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

/**
* Class CreateVerificationsGroupsTable
Expand Down
123 changes: 88 additions & 35 deletions docs/5.verifications.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,66 +8,119 @@ use Multicaret\Acquaintances\Traits\Verifiable;
class User extends Model { use Verifiable; }
```

Common operations:
## Basic Operations

```php
// Requests
$user->verify($recipient, $message = null);
$user->acceptVerificationRequest($sender);
$user->denyVerificationRequest($sender);
$user->unverify($recipient);
// Send verification request
$user->verify($recipient, $message = null, $group = null);

// Block
$user->blockVerification($recipient);
$user->unblockVerification($recipient);
// Remove verification
$user->unverify($recipient, $verificationId);

// Checks
// Handle verification requests
$user->acceptVerificationRequest($verificationId);
$user->denyVerificationRequest($verificationId);
```

## Status Checks

```php
// Check verification status
$user->isVerifiedWith($recipient);
$user->hasVerificationRequestFrom($sender);
$user->isVerifiedWithGroup($recipient, $groupSlug);

// Check pending requests
$user->hasVerificationRequestFrom($recipient);
$user->hasSentVerificationRequestTo($recipient);
$user->canVerify($recipient);

// Queries
// Check if verification is allowed
$user->canVerify($recipient, $groupSlug = null);
```

## Queries & Retrieval

```php
// Get specific verifications
$user->getVerification($recipient);
$user->getAllVerifications($group = '', $perPage = 20, $fields = ['*'], $type = 'all');
$user->getPendingVerifications($group = '', $perPage = 20, $fields = ['*'], $type = 'all');
$user->getAcceptedVerifications($group = '', $perPage = 20, $fields = ['*'], $type = 'all');
$user->getDeniedVerifications($perPage = 20, $fields = ['*']);
$user->getBlockedVerifications($perPage = 20, $fields = ['*']);
$user->getBlockedVerificationsByCurrentUser($perPage = 20, $fields = ['*']);
$user->getBlockedVerificationsByOtherUsers($perPage = 20, $fields = ['*']);
$user->getLatestVerification($recipient);
$user->getAllVerificationsWith($recipient);

// Get verification collections
$user->getAllVerifications($perPage = 20, $groupSlug = '', $fields = ['*'], $cursor = false, $type = 'all');
$user->getPendingVerifications($perPage = 20, $groupSlug = '', $fields = ['*'], $cursor = false, $type = 'all');
$user->getAcceptedVerifications($perPage = 20, $groupSlug = '', $fields = ['*'], $cursor = false, $type = 'all');
$user->getDeniedVerifications($perPage = 20, $fields = ['*'], $cursor = false);
$user->getVerificationRequests();

// Collections
$user->getVerifiers($perPage = 0, $group = '', $fields = ['*'], $cursor = false);
// Advanced queries
$user->findVerifications($status = null, $groupSlug = null, $type = null);
```

## User Collections

```php
// Get verifiers
$user->getVerifiers($perPage = 0, $groupSlug = '', $fields = ['*'], $cursor = false);
$user->getVerifiersOfVerifiers($perPage = 0, $fields = ['*']);
$user->getMutualVerifiers($otherUser, $perPage = 0, $fields = ['*']);

// Counts
$user->getVerifiersCount($group = '', $type = 'all');
// Query builders for advanced filtering
$user->getVerifiersQueryBuilder($groupSlug = '');
$user->getMutualVerifiersQueryBuilder($otherUser);
$user->getVerifiersOfVerifiersQueryBuilder($groupSlug = '');
```

## Counts & Statistics

```php
// Get counts
$user->getVerifiersCount($groupSlug = null, $type = null);
$user->getPendingVerificationsCount();
$user->getMutualVerifiersCount($otherUser);
$user->getVerificationCount($recipient);
```

## Eloquent Relationships

```php
// Access verification relationships
$user->verifications();
$user->verificationGroups();
```

## Groups

Configure in config/acquaintances.php under verifications_groups. Example:
Configure verification groups in `config/acquaintances.php` under `verifications_groups`. Example:

```php
'verifications_groups' => [
'text' => 0,
'phone' => 1,
'cam' => 2,
'personally' => 3,
'intimately' => 4,
'text' => 0,
'phone' => 1,
'cam' => 2,
'personally' => 3,
'intimately' => 4,
],
```

APIs:
Group management APIs:

```php
// Group a verification
$user->groupVerification($verifier, $groupSlug, $verificationId = null);

// Remove from group
$user->ungroupVerification($verifier, $verificationId = null);

// Get verification groups for a specific user
$user->getVerificationGroups($recipient);
```

You can also filter most methods by group:

```php
$user->groupVerification($verifier, 'text');
$user->ungroupVerification($verifier, 'text');
$user->ungroupVerification($verifier); // all groups
$user->getVerifiersCount('text');
// Examples with group filtering
$user->verify($recipient, $message = null, $group = 'phone');
$user->isVerifiedWithGroup($recipient, 'phone');
$user->getVerifiers($perPage = 0, $groupSlug = 'phone');
$user->getVerifiersCount($groupSlug = 'phone');
```
34 changes: 14 additions & 20 deletions src/Interaction.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,14 @@ public static function isRelationExists(Model $model, $relation, $target, $class
$userIdFkColumnName = config('acquaintances.tables.interactions_user_id_fk_column_name', 'user_id');

return $model->{$relation}($target->classname)
->where($class ? config('acquaintances.tables.interactions',
'interactions').'.subject_id' : config('acquaintances.tables.interactions',
'interactions').'.'.$userIdFkColumnName, head($target->ids))
->exists();
->where($class ? config(
'acquaintances.tables.interactions',
'interactions'
) . '.subject_id' : config(
'acquaintances.tables.interactions',
'interactions'
) . '.' . $userIdFkColumnName, head($target->ids))
->exists();
}

/**
Expand Down Expand Up @@ -162,7 +166,7 @@ public static function formatTargets($targets, $classname, array $update = [])
$result = new stdClass();
$result->classname = $classname;

if ( ! is_array($targets)) {
if (! is_array($targets)) {
$targets = [$targets];
}

Expand Down Expand Up @@ -193,7 +197,7 @@ public static function formatTargets($targets, $classname, array $update = [])
*/
protected static function getRelationTypeFromRelation(MorphToMany $relation)
{
if ( ! \array_key_exists($relation->getRelationName(), self::$relationMap)) {
if (! \array_key_exists($relation->getRelationName(), self::$relationMap)) {
throw new \Exception('Invalid relation definition.');
}

Expand All @@ -204,7 +208,7 @@ static public function numberToReadable($number, $precision = 1, $divisors = nul
{
$shorthand = '';
$divisor = pow(1000, 0);
if ( ! isset($divisors)) {
if (! isset($divisors)) {
$divisors = [
$divisor => $shorthand, // 1000^0 == 1
pow(1000, 1) => 'K', // Thousand
Expand Down Expand Up @@ -237,7 +241,7 @@ public static function getFullModelName($modelClassName)

return empty($namespace)
? Str::studly($modelClassName)
: $namespace.'\\'.Str::studly($modelClassName);
: $namespace . '\\' . Str::studly($modelClassName);
}

public static function getUserModelName()
Expand Down Expand Up @@ -275,7 +279,7 @@ public static function getFriendshipGroupsModelName()
return Interaction::getFullModelName(
config(
'acquaintances.models.friendship_groups',
\Multicaret\Acquaintances\Models\FriendshipGroups::class
\Multicaret\Acquaintances\Models\FriendFriendshipGroups::class
)
);
}
Expand All @@ -284,19 +288,9 @@ public static function getVerificationModelName()
{
return Interaction::getFullModelName(
config(
'acquaintances.models.verifcation',
'acquaintances.models.verification',
\Multicaret\Acquaintances\Models\Verification::class
)
);
}

public static function getVerificationGroupsModelName()
{
return Interaction::getFullModelName(
config(
'acquaintances.models.verification_groups',
\Multicaret\Acquaintances\Models\VerificationGroups::class
)
);
}
}
2 changes: 1 addition & 1 deletion src/Models/VerificationGroups.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class VerificationGroups extends Model
/**
* @var array
*/
protected $fillable = ['verification_id', 'group_id', 'verifier_id', 'verifier_type'];
protected $fillable = ['verification_id', 'group_id', 'verifier_id', 'verifier_type', 'group_slug'];

/**
* @var bool
Expand Down
Loading