<?php
namespace App\Providers;
use App\Models\Admin;
use App\Models\Customer;
use App\Models\User;
use App\Repositories\Contracts\AccountRepository;
use App\Repositories\Contracts\BlacklistsRepository;
use App\Repositories\Contracts\CampaignRepository;
use App\Repositories\Contracts\ContactsRepository;
use App\Repositories\Contracts\CountriesRepository;
use App\Repositories\Contracts\CurrencyRepository;
use App\Repositories\Contracts\CustomerRepository;
use App\Repositories\Contracts\KeywordRepository;
use App\Repositories\Contracts\LanguageRepository;
use App\Repositories\Contracts\PhoneNumberRepository;
use App\Repositories\Contracts\PlanRepository;
use App\Repositories\Contracts\RoleRepository;
use App\Repositories\Contracts\SenderIDRepository;
use App\Repositories\Contracts\SendingServerRepository;
use App\Repositories\Contracts\SettingsRepository;
use App\Repositories\Contracts\TemplatesRepository;
use App\Repositories\Contracts\SpamWordRepository;
use App\Repositories\Contracts\SubscriptionRepository;
use App\Repositories\Contracts\TemplateTagsRepository;
use App\Repositories\Contracts\UserRepository;
use App\Repositories\Eloquent\EloquentAccountRepository;
use App\Repositories\Eloquent\EloquentBlacklistsRepository;
use App\Repositories\Eloquent\EloquentCampaignRepository;
use App\Repositories\Eloquent\EloquentContactsRepository;
use App\Repositories\Eloquent\EloquentCountriesRepository;
use App\Repositories\Eloquent\EloquentCurrencyRepository;
use App\Repositories\Eloquent\EloquentCustomerRepository;
use App\Repositories\Eloquent\EloquentKeywordRepository;
use App\Repositories\Eloquent\EloquentLanguageRepository;
use App\Repositories\Eloquent\EloquentPhoneNumberRepository;
use App\Repositories\Eloquent\EloquentPlanRepository;
use App\Repositories\Eloquent\EloquentRoleRepository;
use App\Repositories\Eloquent\EloquentSenderIDRepository;
use App\Repositories\Eloquent\EloquentSendingServerRepository;
use App\Repositories\Eloquent\EloquentSettingsRepository;
use App\Repositories\Eloquent\EloquentTemplatesRepository;
use App\Repositories\Eloquent\EloquentSpamWordRepository;
use App\Repositories\Eloquent\EloquentSubscriptionRepository;
use App\Repositories\Eloquent\EloquentTemplateTagsRepository;
use App\Repositories\Eloquent\EloquentUserRepository;
use Closure;
use Illuminate\Cache\NullStore;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
//use Laravel\Telescope\TelescopeServiceProvider;
/**
* @method where(Closure $param)
*/
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind(
UserRepository::class,
EloquentUserRepository::class
);
$this->app->bind(
AccountRepository::class,
EloquentAccountRepository::class
);
$this->app->bind(
RoleRepository::class,
EloquentRoleRepository::class
);
$this->app->bind(
CustomerRepository::class,
EloquentCustomerRepository::class
);
$this->app->bind(
CurrencyRepository::class,
EloquentCurrencyRepository::class
);
$this->app->bind(
SendingServerRepository::class,
EloquentSendingServerRepository::class
);
$this->app->bind(
PlanRepository::class,
EloquentPlanRepository::class
);
$this->app->bind(
KeywordRepository::class,
EloquentKeywordRepository::class
);
$this->app->bind(
SenderIDRepository::class,
EloquentSenderIDRepository::class
);
$this->app->bind(
SettingsRepository::class,
EloquentSettingsRepository::class
);
$this->app->bind(
LanguageRepository::class,
EloquentLanguageRepository::class
);
$this->app->bind(
SubscriptionRepository::class,
EloquentSubscriptionRepository::class
);
$this->app->bind(
PhoneNumberRepository::class,
EloquentPhoneNumberRepository::class
);
$this->app->bind(
TemplateTagsRepository::class,
EloquentTemplateTagsRepository::class
);
$this->app->bind(
BlacklistsRepository::class,
EloquentBlacklistsRepository::class
);
$this->app->bind(
SpamWordRepository::class,
EloquentSpamWordRepository::class
);
$this->app->bind(
ContactsRepository::class,
EloquentContactsRepository::class
);
$this->app->bind(
TemplatesRepository::class,
EloquentTemplatesRepository::class
);
$this->app->bind(
CampaignRepository::class,
EloquentCampaignRepository::class
);
$this->app->bind(
CountriesRepository::class,
EloquentCountriesRepository::class
);
// if ($this->app->environment('local')) {
// $this->app->register(TelescopeServiceProvider::class);
// $this->app->register(TelescopeServiceProvider::class);
// }
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
// Force SSL if isSecure does not detect HTTPS
if (config('app.url_force_https')) {
URL::forceScheme('https');
}
Relation::morphMap([
'user' => User::class,
'customer' => Customer::class,
'admin' => Admin::class,
]);
Cache::extend('none', function () {
return Cache::repository(new NullStore());
});
Builder::macro('whereLike', function ($attributes, string $searchTerm) {
$this->where(function (Builder $query) use ($attributes, $searchTerm) {
foreach (array_wrap($attributes) as $attribute) {
$query->when(
str_contains($attribute, '.'),
function (Builder $query) use ($attribute, $searchTerm) {
[$relationName, $relationAttribute] = explode('.', $attribute);
$query->orWhereHas($relationName, function (Builder $query) use ($relationAttribute, $searchTerm) {
$query->where($relationAttribute, 'LIKE', "%{$searchTerm}%");
});
},
function (Builder $query) use ($attribute, $searchTerm) {
$query->orWhere($attribute, 'LIKE', "%{$searchTerm}%");
}
);
}
});
return $this;
});
}
}