123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- /**
- * @package Grav\Common\Service
- *
- * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
- * @license MIT License; see LICENSE file for details.
- */
- namespace Grav\Common\Service;
- use Grav\Common\Config\Config;
- use Grav\Common\Flex\Types\Users\Storage\UserFileStorage;
- use Grav\Common\Flex\Types\Users\Storage\UserFolderStorage;
- use Grav\Common\Grav;
- use Grav\Events\FlexRegisterEvent;
- use Grav\Framework\Flex\Flex;
- use Grav\Framework\Flex\FlexFormFlash;
- use Pimple\Container;
- use Pimple\ServiceProviderInterface;
- use function is_array;
- /**
- * Class FlexServiceProvider
- * @package Grav\Common\Service
- */
- class FlexServiceProvider implements ServiceProviderInterface
- {
- /**
- * @param Container $container
- * @return void
- */
- public function register(Container $container)
- {
- $container['flex'] = function (Grav $container) {
- /** @var Config $config */
- $config = $container['config'];
- $flex = new Flex([], ['object' => $config->get('system.flex', [])]);
- FlexFormFlash::setFlex($flex);
- $accountsEnabled = $config->get('system.accounts.type', 'regular') === 'flex';
- $pagesEnabled = $config->get('system.pages.type', 'regular') === 'flex';
- // Add built-in types from Grav.
- if ($pagesEnabled) {
- $flex->addDirectoryType(
- 'pages',
- 'blueprints://flex/pages.yaml',
- [
- 'enabled' => $pagesEnabled
- ]
- );
- }
- if ($accountsEnabled) {
- $flex->addDirectoryType(
- 'user-accounts',
- 'blueprints://flex/user-accounts.yaml',
- [
- 'enabled' => $accountsEnabled,
- 'data' => [
- 'storage' => $this->getFlexAccountsStorage($config),
- ]
- ]
- );
- $flex->addDirectoryType(
- 'user-groups',
- 'blueprints://flex/user-groups.yaml',
- [
- 'enabled' => $accountsEnabled
- ]
- );
- }
- // Call event to register Flex Directories.
- $event = new FlexRegisterEvent($flex);
- $container->dispatchEvent($event);
- return $flex;
- };
- }
- /**
- * @param Config $config
- * @return array
- */
- private function getFlexAccountsStorage(Config $config): array
- {
- $value = $config->get('system.accounts.storage', 'file');
- if (is_array($value)) {
- return $value;
- }
- if ($value === 'folder') {
- return [
- 'class' => UserFolderStorage::class,
- 'options' => [
- 'file' => 'user',
- 'pattern' => '{FOLDER}/{KEY:2}/{KEY}/{FILE}{EXT}',
- 'key' => 'storage_key',
- 'indexed' => true,
- 'case_sensitive' => false
- ],
- ];
- }
- if ($value === 'file') {
- return [
- 'class' => UserFileStorage::class,
- 'options' => [
- 'pattern' => '{FOLDER}/{KEY}{EXT}',
- 'key' => 'username',
- 'indexed' => true,
- 'case_sensitive' => false
- ],
- ];
- }
- return [];
- }
- }
|