first commit
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/core/EventServiceProvider.php
|
||||
*
|
||||
* Copyright (c) 2014-2021 Simon Fraser University
|
||||
* Copyright (c) 2000-2021 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class EventServiceProvider
|
||||
*
|
||||
* @ingroup core
|
||||
*
|
||||
* @brief Registers Events Service Provider and boots data on events and their listeners
|
||||
*/
|
||||
|
||||
namespace PKP\core;
|
||||
|
||||
use DateInterval;
|
||||
use Illuminate\Foundation\Events\DiscoverEvents;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as LaravelEventServiceProvider;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use SplFileInfo;
|
||||
|
||||
class EventServiceProvider extends LaravelEventServiceProvider
|
||||
{
|
||||
/** Max lifetime for the event discovery cache */
|
||||
protected const MAX_CACHE_LIFETIME = '1 day';
|
||||
|
||||
/**
|
||||
* @copydoc \Illuminate\Foundation\Support\Providers\EventServiceProvider::getEvents()
|
||||
*/
|
||||
public function getEvents()
|
||||
{
|
||||
$expiration = DateInterval::createFromDateString(static::MAX_CACHE_LIFETIME);
|
||||
$events = Cache::remember(static::getCacheKey(), $expiration, fn () => $this->discoveredEvents());
|
||||
|
||||
return array_merge_recursive(
|
||||
$events,
|
||||
$this->listens()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc \Illuminate\Foundation\Support\Providers\EventServiceProvider::shouldDiscoverEvents()
|
||||
*/
|
||||
public function shouldDiscoverEvents()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc \Illuminate\Foundation\Support\Providers\EventServiceProvider::discoverEvents()
|
||||
*/
|
||||
public function discoverEvents()
|
||||
{
|
||||
// Adapt classes naming convention
|
||||
$discoverEvents = new class () extends DiscoverEvents {
|
||||
/**
|
||||
* @copydoc \Illuminate\Foundation\Events\DiscoverEvents::classFromFile()
|
||||
*/
|
||||
protected static function classFromFile(SplFileInfo $file, $basePath): string
|
||||
{
|
||||
return Core::classFromFile($file);
|
||||
}
|
||||
};
|
||||
|
||||
return collect($this->discoverEventsWithin())
|
||||
->reject(function ($directory) {
|
||||
return !is_dir($directory);
|
||||
})
|
||||
->reduce(function ($discovered, $directory) use ($discoverEvents) {
|
||||
return array_merge_recursive(
|
||||
$discovered,
|
||||
$discoverEvents::within($directory, base_path())
|
||||
);
|
||||
}, []);
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc \Illuminate\Foundation\Support\Providers\EventServiceProvider::discoverEventsWithin()
|
||||
*/
|
||||
protected function discoverEventsWithin()
|
||||
{
|
||||
return [
|
||||
$this->app->basePath('lib/pkp/classes/observers/listeners'),
|
||||
$this->app->basePath('classes/observers/listeners'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the event cache
|
||||
*/
|
||||
public static function clearCache(): void
|
||||
{
|
||||
Cache::forget(static::getCacheKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a unique and static key to store the event cache
|
||||
*/
|
||||
private static function getCacheKey(): string
|
||||
{
|
||||
return __METHOD__ . static::MAX_CACHE_LIFETIME;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user