diff --git a/src/Http/Middleware/UniqueViewsCounter.php b/src/Http/Middleware/UniqueViewsCounter.php index 348a044..1731637 100644 --- a/src/Http/Middleware/UniqueViewsCounter.php +++ b/src/Http/Middleware/UniqueViewsCounter.php @@ -10,57 +10,17 @@ use Sashagm\Analytics\Models\Visitor; use Illuminate\Support\Facades\Cookie; use Sashagm\Analytics\Models\Statistic; +use Sashagm\Analytics\Traits\UniqueViewsCounterTrait; class UniqueViewsCounter { - public function handle($request, Closure $next) - { - $isEnabled = config('analytics.enabled', true); - $cookieLifetime = config('analytics.cookie_lifetime', 60 * 24 * 30); // 30 дней - $savePeriod = config('analytics.save_period', 60 * 24 * 7); // 7 дней - $ip = $_SERVER['REMOTE_ADDR']; - - // ... - - if ($isEnabled) { - $routeName = $request->route()->getName(); - - if ($routeName && strpos($routeName, 'admin.') !== 0) { - $views = Cookie::get('views') ? json_decode(Cookie::get('views'), true) : []; - - if (!is_null($views) && !in_array($routeName, $views)) { - $views[] = $routeName; - Cookie::queue('views', json_encode($views), $cookieLifetime); - Visitor::create([ - 'category' => 'route', - 'value' => $routeName, - 'route' => Route::current()->uri(), - 'ip_address' => $ip, - ]); + use UniqueViewsCounterTrait; - if (config('analytics.logger')) { - Log::info("Route {$routeName} visited by {$ip}!"); - } - } - } - - // сохраняем статистику раз в неделю - if (time() % ($savePeriod * 60) == 0) { - Statistic::create([ - 'category' => 'route', - 'data' => json_encode($views), - ]); - - if (config('analytics.logger')) { - Log::info("Created logs to models Statistic!"); - } - } - } - - - // ... + public function handle($request, Closure $next) + { + $this->start($request); return $next($request); } } diff --git a/src/Http/Middleware/UniqueVisitorsCounter.php b/src/Http/Middleware/UniqueVisitorsCounter.php index c7e498d..f221f11 100644 --- a/src/Http/Middleware/UniqueVisitorsCounter.php +++ b/src/Http/Middleware/UniqueVisitorsCounter.php @@ -6,38 +6,19 @@ use Closure; use Sashagm\Analytics\Models\Visitor; use Illuminate\Support\Facades\Cookie; +use Sashagm\Analytics\Traits\UniqueVisitorsCounterTrait; class UniqueVisitorsCounter { + + use UniqueVisitorsCounterTrait; + + public function handle($request, Closure $next) { - $ip = $_SERVER['REMOTE_ADDR']; - $ua = strtolower($_SERVER['HTTP_USER_AGENT']); - $isBot = preg_match('/bot|crawl|slurp|spider/i', $ua); - - if (!$isBot) { - // обработка для обычных пользователей - $user = "user"; - } else { - // обработка для поисковых роботов - $user = "bot"; - } - - - $visitorId = Cookie::get('visitor_id'); - - if (!$visitorId) { - $visitorId = uniqid(); - Cookie::queue('visitor_id', $visitorId, 60 * 24 * 30); - - Visitor::create([ - 'category' => $user, - 'value' => $visitorId, - 'ip_address' => $ip, - ]); - } + $this->starting($request); return $next($request); } diff --git a/src/Providers/AnalyticsServiceProvider.php b/src/Providers/AnalyticsServiceProvider.php index 75ac5f0..4a52652 100644 --- a/src/Providers/AnalyticsServiceProvider.php +++ b/src/Providers/AnalyticsServiceProvider.php @@ -8,12 +8,12 @@ use Sashagm\Analytics\Console\Commands\InstallCommand; use Sashagm\Analytics\Http\Middleware\UniqueViewsCounter; use Sashagm\Analytics\Http\Middleware\UniqueVisitorsCounter; - +use Sashagm\Analytics\Traits\BootTrait; class AnalyticsServiceProvider extends ServiceProvider { - + use BootTrait; /** * Register services. @@ -44,8 +44,7 @@ public function boot() ]); } - $this->app['router']->aliasMiddleware('unique.views', UniqueViewsCounter::class); - $this->app['router']->aliasMiddleware('unique.visitors', UniqueVisitorsCounter::class); + $this->starting(); diff --git a/src/Traits/BootTrait.php b/src/Traits/BootTrait.php index dda02e3..447ccb3 100644 --- a/src/Traits/BootTrait.php +++ b/src/Traits/BootTrait.php @@ -6,13 +6,16 @@ use Exception; use Illuminate\Support\Facades\Blade; use Illuminate\Support\Facades\Route; +use Sashagm\Analytics\Http\Middleware\UniqueViewsCounter; +use Sashagm\Analytics\Http\Middleware\UniqueVisitorsCounter; trait BootTrait { - public function boot() + public function starting() { - + $this->app['router']->aliasMiddleware('unique.views', UniqueViewsCounter::class); + $this->app['router']->aliasMiddleware('unique.visitors', UniqueVisitorsCounter::class); } diff --git a/src/Traits/UniqueViewsCounterTrait.php b/src/Traits/UniqueViewsCounterTrait.php new file mode 100644 index 0000000..9c0c1d3 --- /dev/null +++ b/src/Traits/UniqueViewsCounterTrait.php @@ -0,0 +1,75 @@ +route()->getName(); + + if ($routeName && strpos($routeName, 'admin.') !== 0) { + $views = Cookie::get('views') ? json_decode(Cookie::get('views'), true) : []; + + if (!is_null($views) && !in_array($routeName, $views)) { + $views[] = $routeName; + Cookie::queue('views', json_encode($views), $cookieLifetime); + + Visitor::create([ + 'category' => 'route', + 'value' => $routeName, + 'route' => Route::current()->uri(), + 'ip_address' => $ip, + ]); + + if (config('analytics.logger')) { + Log::info("Route {$routeName} visited by {$ip}!"); + } + } + } + + // сохраняем статистику раз в неделю + if (time() % ($savePeriod * 60) == 0) { + Statistic::create([ + 'category' => 'route', + 'data' => json_encode($views), + ]); + + if (config('analytics.logger')) { + Log::info("Created logs to models Statistic!"); + } + } + } + + + // ... + + return $request; + + + + } + +} + diff --git a/src/Traits/UniqueVisitorsCounterTrait.php b/src/Traits/UniqueVisitorsCounterTrait.php new file mode 100644 index 0000000..6d9c5ff --- /dev/null +++ b/src/Traits/UniqueVisitorsCounterTrait.php @@ -0,0 +1,49 @@ + $user, + 'value' => $visitorId, + 'ip_address' => $ip, + ]); + } + + return $request; + + } + +} +