1. Go to this page and download the library: Download towoju5/basement-chat library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
towoju5 / basement-chat example snippets
namespace App\Models;
use BasementChat\Basement\Contracts\User as BasementUserContract;
use BasementChat\Basement\Traits\HasPrivateMessages;
class User extends Authenticatable implements BasementUserContract
{
use HasPrivateMessages;
...
/**
* Get the user's last name instead of the user's full name.
*/
public function getNameAttribute(): string
{
return str($this->attributes['name'])->explode(' ')->last();
}
}
namespace App\Models;
use BasementChat\Basement\Contracts\User as BasementUserContract;
use BasementChat\Basement\Traits\HasPrivateMessages;
class User extends Authenticatable implements BasementUserContract
{
use HasPrivateMessages;
...
/**
* Get the user's avatar url.
*/
public function getAvatarAttribute(): string
{
return $this->attributes['image_url'];
}
}
// app/Actions/AllContacts.php
namespace App\Actions;
use App\Models\User;
use BasementChat\Basement\Actions\AllContacts as BasementAllContactsAction;
use BasementChat\Basement\Data\ContactData;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Collection as EloquentCollection;
use Illuminate\Support\Collection;
class AllContacts extends BasementAllContactsAction
{
/**
* Extend and override the default method for getting all contacts.
* Only users with the administrator role will appear in the contact list.
*/
public function all(Authenticatable $user): Collection
{
/** @var EloquentCollection<int,User> $contacts */
$contacts = User::addSelectLastPrivateMessageId($user)
->addSelectUnreadMessages($user)
->whereHas('roles', function (EloquentBuilder $query): void {
$query->where('name', 'administrator');
})
->get();
$contacts->append('avatar');
$contacts->load('lastPrivateMessage');
return $contacts
->sortByDesc('lastPrivateMessage.id')
->values()
->map(fn (Authenticatable $contact): ContactData => $this->convertToContactData($contact));
}
}
// app/Providers/AppServiceProvider.php
namespace App\Providers;
use App\Actions\AllContacts;
use BasementChat\Basement\Basement;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
...
/**
* Bootstrap any application services.
*/
public function boot(): void
{
// Override the default action with your customized AllContacts action.
Basement::allContactsUsing(AllContacts::class);
}
}