uxf/cms

Maintainers

Details

gitlab.com/uxf/cms

Source

Issues

Installs: 13 695

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Forks: 0

3.40.7 2024-04-17 14:25 UTC

This package is auto-updated.

Last update: 2024-04-17 12:28:23 UTC


README

Install

$ composer require uxf/cms

Config

// config/routes/uxf.php
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;

return static function (RoutingConfigurator $routes): void {
    $routes->import('@UXFCmsBundle/config/routes.php');
    $routes->import('@UXFSecurityBundle/config/routes.php');
    $routes->import('@UXFContentBundle/config/routes.php');
    $routes->import('@UXFDataGridBundle/config/routes.php');
    $routes->import('@UXFFormBundle/config/routes.php');
};
// config/packages/uxf.php
use UXF\CMS\Entity\User;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

return static function (ContainerConfigurator $containerConfigurator): void {
    $containerConfigurator->extension('uxf_cms', [
        'audit_token' => 'xxx', # optional
        'mailing' => [
            'email_from' => 'info@uxf.cz',
            'email_name' => 'UXF info',
            'invitation_url' => 'https://uxf.cz/renew-password/',
            'recovery_url' => 'https://uxf.cz/renew-password/',
            'cms_recovery_url' => 'https://uxf.cz/admin/cms/renew-password/',
            'tag' => env('PROJECT_TAG'),
            'email_previews' => '%kernel.project_dir%/src/EmailZone/Email',
        ],
        'storage' => [
            'default_upload_namespace' => 'cms',
        ],
        'logger' => [
            'stdout' => [
                'enabled' => true, # default false
            ],
            'sentry' => [
                'dsn' => '%env(SENTRY_DSN)%',
                'environment' => '%env(SENTRY_ENV)%',
                'release' => 'none', # optional
                'level' => 'warning', # optional
                'traces_sample_rate' => 0.5, # default 0
            ],
        ],
    ]);
};

Autocomplete

A) CmsMeta attribute

Add autocompleteFields to CmsMeta. New autocomplete is registered automatically with name by alias.

#[ORM\Entity]
#[ORM\Table(name: 'users', schema: 'uxf_cms')]
#[CmsMeta(alias: 'user', title: 'User', autocompleteFields: ['name', 'email'])]
class User
{
    ...
}

B) CmsForm/CmsGrid attribute (override default autocomplete)

#[CmsForm(label: 'Uživatelská role', targetField: 'title', autocomplete: 'role')]
#[CmsGrid(label: 'Uživatelská role', targetColumn: 'title', autocomplete: 'role')]
#[ORM\ManyToOne]
private Role $role;

C) AutocompleteType


final class CategoryType implements AutocompleteType
{
    public function __construct(
        private readonly EntityManagerInterface $entityManager,
    ) {
    }

    /**
     * @param mixed[] $options
     */
    public function buildAutocomplete(AutocompleteBuilder $builder, array $options = []): void
    {
        // you can use 4th $labelQuery argument - eg. '{name} {surname} ({email})'
        $autocomplete = DoctrineAutocomplete::create($this->entityManager, Category::class, ['name']);

        // you can modify QB conditions
        $autocomplete->qb->andWhere('e.id > 1');

        $builder->setAutocomplete($autocomplete);
    }

    public static function getName(): string
    {
        return 'content-category';
    }
}

D) AutocompleteInterface - total custom

class TestAutocomplete implements Autocomplete
{
    /**
     * @return AutocompleteResult[]
     */
    public function search(string $term, int $limit): array
    {
        ...
    }
}

Email previews

All email previews configured in source directory uxf_cms.mailing.email_previews are listed at /api/cms/email/list

/**
 * @extends PreviewableEmail<SampleTemplateData>
 */
class SampleEmail extends PreviewableEmail
{
    /**
     * @return SampleTemplateData[]
     */
    #[Override] public static function getPreviewData(): array
    {
        return [
            new SampleTemplateData([new TemplateDto('https://uxf.dev', 'Uxf')]),
        ];
    }

    #[Override] public function getTemplate(): string
    {
        return '/email-templates.twig';
    }
}