| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <?php
- declare(strict_types=1);
- namespace SixShop\System;
- use SixShop\Core\ExtensionAbstract;
- use SixShop\Core\Service\AutoloadService;
- use SixShop\System\Enum\ExtensionStatusEnum;
- use SixShop\System\Hook\CronJobHook;
- use SixShop\System\Hook\DebugHook;
- use SixShop\System\Hook\ExtensionStatusHook;
- use SixShop\System\Hook\GatheringCrontabEventHook;
- use SixShop\System\Hook\QueueJobHook;
- use think\db\exception\PDOException;
- use function SixShop\Core\extension_name_list;
- class Extension extends ExtensionAbstract
- {
- public function __construct(private readonly AutoloadService $autoloadService)
- {
- }
- public function getHooks(): array
- {
- $hooks = [
- CronJobHook::class,
- ExtensionStatusHook::class,
- GatheringCrontabEventHook::class,
- QueueJobHook::class,
- ];
- // Debug 模式下添加 DebugHook
- if (app()->isDebug()) {
- $hooks[] = DebugHook::class;
- }
- return $hooks;
- }
- public function boot(): void
- {
- if ($this->isBooted) {
- return;
- }
- foreach (extension_name_list() as $extensionID) {
- /** @var ExtensionAbstract $extension */
- $extension = $this->autoloadService->getExtension($extensionID);
- $className = get_class($extension);
- if (method_exists($extension, 'available')
- || $className::hasMacro('available')
- ) {
- continue;
- }
- $className::macro('available', function () {
- $extensionID = $this->getInfo()['id'];
- try {
- $info = app()->make(ExtensionManager::class)->getInfo($extensionID);
- } catch (PDOException) {
- // 新装系统的时候system扩展还未安装
- return false;
- }
- return $info->status === ExtensionStatusEnum::ENABLED;
- });
- }
- parent::boot();
- }
- public function available(): true
- {
- return true;
- }
- protected function getBaseDir(): string
- {
- return dirname(__DIR__);
- }
- }
|