Bolt CMS is an open source, adaptable platform for building and running modern websites.

Overview

Bolt 4 - stable

Bolt CMS is an open source, adaptable platform for building and running modern websites. Built on PHP, Symfony and more. Read the site for more info.

To check out Bolt and set up your first Bolt installation, read Installing Bolt 4.


This repository should be used to work on Bolt. Not with Bolt. If you want to check out Bolt, the composer create-project method is recommended. See here: https://github.com/bolt/project/ .


Cleanse this world with flame
End this, cleanse this
Rebuild and start again
Obliterate what makes us weak

-- Hatebreed - Destroy Everything

Progress

Follow the progress on the development of Bolt 4, at these locations

To set up a running development environment of Bolt 4 please perform the following steps 1 to 4:

1 Install

To install a development version of Bolt 4:

  • Check out this git repository
  • Then run:
echo "\n\nAre you sure you shouldn't use https://docs.bolt.cm/installation instead?\n\n"
sleep 5
composer install
npm install && npm run build

Alternatively, run make install, on a UNIX-like system.

If you already have Bolt 4 installed and need to update dependencies run:

composer update

Or install with Docker

To install a development version of Bolt 4 with Docker:

  • Check out the git repo
  • Then run:
echo "\n\nAre you sure you shouldn't use https://docs.bolt.cm/installation instead?\n\n"
sleep 5
make docker-install

Actually, just add docker- prefix to any Make command and that's it!

When installed with Docker, in your browser go to http://0.0.0.0:8088/ for the frontend, and to http://0.0.0.0:8088/bolt for the Admin Panel.

2 Set up Database

  • Configure the database connection in .env or stick with the default SQLite, which should work out of the box.
  • Then run:
bin/console doctrine:database:create
bin/console doctrine:schema:create
bin/console doctrine:fixtures:load -n

Alternatively, run make db-create, on a UNIX-like system.

Note: if you're using SQLite, ensure that var/db/ is readable and writable to you, as well as to the webserver users. The same applies to the file var/data/bolt.sqlite if it already exists.

3 Re-set the Database

This is a Bolt prototype in flux, so stuff can break, and you might want to reset the database to the "factory settings". To re-set a database to the latest, with fresh dummy-content run the following:

bin/console doctrine:schema:drop --force
bin/console doctrine:schema:create
bin/console doctrine:fixtures:load -n

Alternatively, run make db-reset, on a UNIX-like system.

4 How to build assets

To set up initially, run npm install to get the required dependencies / node_modules. Alternatively give the path to the python executable (npm install --python="/usr/local/bin/python3.7") Then:

  • Prepare directory structure mkdir -p node_modules/node-sass/vendor
  • Rebuild npm environment for current OS npm rebuild node-sass
  • Run npm run start (alternatively npm run start --python="/usr/local/bin/python3.7")

See the other options by running npm run. (Note: on testing remotely, assets can be compiled into public/assets by simply npm run-script build)

5 Run the prototype

  • Using the Symfony CLI tool, just run symfony server:start.

  • Alternatively, run bin/console server:start (if running bin/console server:startdoes not work because you don't have the pcntl extension, run bin/console server:run)

In your browser, go to http://127.0.0.1:8000/ for the frontend, and to http://127.0.0.1:8000/bolt for the Admin Panel.

You can log on, using the default user & pass:

  • user: admin
  • pass: admin%1

Code Style checking / Static Analysis

Run the following commands with make, to perform Code Style checking and automatic fixing:

  • make cscheck: Run ECS and PHPStan
  • make csfix: Run ECS, perform automatic fixes and run PHPStan

On windows, you can run the commands separately:

vendor/bin/ecs.bat check src
vendor/bin/ecs.bat check src --fix
vendor/bin/phpstan.bat analyse -c phpstan.neon src

Testing

Bolt uses several testing frameworks for different test layers:

  • unit: PHPSpec, PHPUnit, Jest
  • integration (of Symfony services): PHPUnit with KernelTestCase
  • functional (API Contracts): Behat
  • acceptance (UI, end-to-end): Behat/Mink

To run PHP unit tests:

make test

To run E2E tests:

make behat-js

Read more about running and creating tests on the e2e tests page.

Fixing IDE issues

  • PHPStorm does not see @bolt Twig namespace.

    The namespace needs to be added manually in Twig Plugin settings, pointing to templates folder.

Translations

These are the translations used in Bolt. We rely on the community to expand on new translations, and keep them up to date. If you wish to participate, read the instructions here.

Several translation-related Console commands are available:

  • bin/console translation:download - Download translations from Loco (replaces all local ones)
  • bin/console translation:sync bolt down - Download translations from Loco (replaces local changes if there is a conflict)
  • bin/console translation:sync bolt up - Send updated translations to Loco

Development

The ongoing Bolt development takes place under the care of:

Sponsors:


Comments
  • MagicContentTrait DX improvements

    MagicContentTrait DX improvements

    Splitted from https://github.com/bolt/four/pull/148

    • [x] I really don't like all those "magic" methods in ContentMagicTrait. Can we at least rename them to be less magical? :)
    • [x] if we could make $this->fields a name-indexed array, using this method be much faster (simple isset instead of foreaching).
    • [x] rename to get to getField, has to hasField
    topic: Content topic: DX 
    opened by JarJak 25
  • Update docs: how2 use collection with same functionality as repeater

    Update docs: how2 use collection with same functionality as repeater

    I have a repeater in my contenttype in Bolt v3 like so:

            features:
                type: repeater
                fields:
                    title:
                        type: text
                    image:
                        type: image
                        extensions: [ gif, jpg, png ]
                    teaser:
                        type: text
                        class: large
                    content:
                        type: html   
    

    Thereby in my contenttype I can add a new feature which includes a title, an image, a teaser and content. Now, I would like to have the same in v4, but I saw that repeaters do not longer exist. I tried to achieve the same functionality by changing the type from repeater to collection. But then, I can only add the different fields one by one and that is not what I want. I would like to have the exact same functionality of a repeater of v3 in v4. Do I need to use a set? I did not find an example how to do this in the docs.

    Thank you in advance

    πŸ“™ tag: documentation βš—️ needs confirmation 
    opened by surips 18
  • 404 error after installation

    404 error after installation

    I've just installed a fresh copy of the latest Bolt but I get a 404 error when loading the site. Like this:

    404 :: Content not found

    In Controller/TwigAwareController.php

    Symfony\Component\HttpKernel\Exception\NotFoundHttpException {#5565 β–Ό
      -statusCode: 404
      -headers: []
      #message: "Content not found"
      #code: 0
      #file: "/.../myprojectname/vendor/bolt/core/src/Controller/TwigAwareController.php"
      #line: 123
      trace: {β–Ά}
    }
    

    I followed the instructions in the docs to install via composer, i.e. I ran these:

    composer create-project bolt/project myprojectname
    (edit .env with correct MySQL parameters)
    chmod -R 777 config/ public/files/ public/theme/ public/thumbs/ var/
    bin/console doctrine:database:create
    bin/console doctrine:schema:create
    bin/console bolt:add-user --admin
    

    Opening the home page via my server, or using the built-in server, I get a 404.

    Details

    | Question | Answer |----------------- | ------ | Relevant Bolt Version | 4.0 | Install type | Composer | PHP version | 7.2.33 | Web server | Apache or Built-in, both fail

    ❓ question 
    opened by svivian 17
  • FieldFillListener.postLoad buggy? (

    FieldFillListener.postLoad buggy? ("explode() expects parameter 2 to be string, null given")

    We have content with a collection of sets like this:

    slides:
        name: Slides
        singular_name: Slide
        ....
        fields:
            .....
            popups:
                type: collection
                fields:
                    afbeelding:
                        type: set
                        fields:
                            label:
                                type: text
                            weergave:
                                type: select
                                values: [ 'beeldvullend', 'kleine tooltip' ]
                            afbeelding:
                                type: image
                    tekst:
                        type: set
                        ....
    

    The nested select field has been added after content had already been created. (I don't know if this is relevant)

    Now when we edit content and add a 'popup' the editor will get a 500 error:

    TypeError:
    explode() expects parameter 2 to be string, null given
    
      at vendor/bolt/core/src/Twig/FieldExtension.php:255
      at explode('/', null)
         (vendor/bolt/core/src/Twig/FieldExtension.php:255)
      at Bolt\Twig\FieldExtension->selectOptionsContentType(object(SelectField))
         (vendor/bolt/core/src/Twig/FieldExtension.php:213)
      at Bolt\Twig\FieldExtension->selectOptions(object(SelectField))
         (var/cache/dev/twig/35/354d023db4d40905d60ed64367dda109f3741095dcecb06c66f49c16938b7c5e.php:50)
      at __TwigTemplate_3fdcff874b050495e998b65d907cdc8f9af6d1d08c8e6fbcbdbfcc5e1a9dae4c->doDisplay(array('compound_label' => 'Woorden', 'id' => 'field-popups-woorden-1-weergave', 'field' => object(SelectField), 'name' => 'collections[popups][woorden][1][weergave]', 'record' => object(Content), 'include_id' => true, 'app' => object(AppVariable), 'config' => object(Config), 'defaultLocale' => 'en'), array('field' => array(object(__TwigTemplate_3fdcff874b050495e998b65d907cdc8f9af6d1d08c8e6fbcbdbfcc5e1a9dae4c), 'block_field')))
         (vendor/twig/twig/src/Template.php:394)
      at Twig\Template->displayWithErrorHandling(array('compound_label' => 'Woorden', 'id' => 'field-popups-woorden-1-weergave', 'field' => object(SelectField), 'name' => 'collections[popups][woorden][1][weergave]', 'record' => object(Content), 'include_id' => true, 'app' => object(AppVariable), 'config' => object(Config), 'defaultLocale' => 'en'), array('field' => array(object(__TwigTemplate_3fdcff874b050495e998b65d907cdc8f9af6d1d08c8e6fbcbdbfcc5e1a9dae4c), 'block_field')))
         (vendor/twig/twig/src/Template.php:367)
      at Twig\Template->display(array('compound_label' => 'Woorden', 'id' => 'field-popups-woorden-1-weergave', 'field' => object(SelectField), 'name' => 'collections[popups][woorden][1][weergave]', 'record' => object(Content), 'include_id' => true), array())
         (vendor/twig/twig/src/TemplateWrapper.php:47)
        ...
    

    This error was really hard to diagnose, but in the end it boiled down to an issue caused by the order of initialization of the fields. Somehow I did end up with the select field having a higher id than that of the set it is in, but the set having lower id than the collection it is part of. This causes issues in the case of our select field, because the logic for combining content (from db) with configuration (from contenttypes.yml) needs a full list of parents (of parents of parents...) but our id combination combined with the initialization order of Doctrine results in one parent missing, with results is no 'values' found for the select, which results in some part of FieldExtension.php 'thinking' it must be a select that uses other content types, and that function finally breaking horribly because the 'values' is in fact 'null'.

    I think that even if in general the order of the ids is preventing this, it should not be programmed in a way that is dependent on the id order. I might have a fix, but that one probably should be checked thoroughly.

    (I'll expand this later and/or submit a PR)

    Details

    | Question | Answer |------------------------------------------------------ | ------ | Relevant Bolt Version | 5.1.2 | Install type | Composer install

    opened by simongroenewolt 16
  • Translations from profiler don't map

    Translations from profiler don't map

    Translations from the symfony translation panel don't map to the record. You can hit the edit button, change the value and even pressing the save and sync button show nothing unusual, except the submitted value doesn't map to the record. Changes are saved in the panel, which are visible if you attempt to edit the fields again, but they either don't submit properly or they are not retrieved properly.

    new xpertdata nl__profiler_9946e7_panel=translation (1) This button doesnt do anything. It shows a loading icons for a couple of seconds and a message "Started synchronization of all translations", except nothing happens. Could also be stuck in a loop.

    new xpertdata nl__profiler_9946e7_panel=translation (3) Fallback always shows 0.

    new xpertdata nl__profiler_9946e7_panel=translation Neither the sync buttons, nor the add selected messages seems to do the trick. They show the same loading animation and also nothing further seems to happen.

    new xpertdata nl__profiler_9946e7_panel=translation (2) This is what you see when you press the edit button.

    I took the effort to browse through all languages of the localeswitcher on the frontend to make sure it wasn't accidentally mapped to the wrong language for whatever reason.

    This is my boltforms field config for the record.

            fields:
                company:
                    type: text
                    options:
                        required: true
                        label: companyname
                        constraints: [ NotBlank, { Length: { 'min': 2, 'max': 128 } } ]
                name:
                    type: text
                    options:
                        required: true
                        label: name
                        constraints: [ NotBlank, { Length: { 'min': 2, 'max': 128 } } ]
                phonenumber:
                    type: text
                    options:
                        required: true
                        label: phonenumber
                        constraints: [ NotBlank, { Length: { 'min': 2, 'max': 128 } } ]
                email:
                    type: email
                    options:
                        required: true
                        label: email
                        constraints: [ Email ]
                        help: "test"
                message:
                    type: textarea
                    options:
                        required: true
                        label: message
                        attr: 
                            rows: 6
                contactpreference:
                    type: choice
                    options:
                        label: contactpreference
                        choices:
                            email: email
                            phonecall: phonecall
                        multiple: false
                        expanded: true
                submit:
                    type: submit
                    options:
                        label: submit
                        attr:
                             class: 'form-button'
    

    This shows my services.yaml setup. no other values have been changed:

    parameters:
        locale: 'nl'
        # This parameter defines the codes of the locales (languages) enabled in the application
        app_locales: nl|en|fr|cz|sk
        app.notifications.email_sender: [email protected]
        bolt.table_prefix: bolt_
        bolt.backend_url: /bolt
    
    
    services:
        # default configuration for services in *this* file
        _defaults:
            autowire: true      # Automatically injects dependencies in your services.
            autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
            public: false       # Allows optimizing the container by removing unused services; this also means
                                # fetching services directly from the container via $container->get() won't work.
                                # The best practice is to be explicit about your dependencies anyway.
            bind:               # defines the scalar arguments once and apply them to any service defined/created in this file
                $locales: '%app_locales%'
                $defaultLocale: '%locale%'
                $emailSender: '%app.notific'
    

    This shows my contentypes config for the record:

    pages:
        name: Pages
        singular_name: Page
        fields:
            title:
                type: text
                localize: true
                class: large
                group: content
            teaser:
                type: textarea
                localize: true
                postfix: |
                    A text-only version of the content, that can be used to "tease"
                    the content when it's used in listing pages or search results.
            image:
                type: image
                localize: true
                label: Highlighted image
            body:
                type: redactor
                localize: true
                height: 300px
            slug:
                type: slug
                localize: true
                uses: title
                group: Meta
            laik:
                type: text
                group: Meta
            template:
                type: templateselect
                filter: '/^(?!partials)[^_].*\.twig$/'
        locales: ['nl', 'en', 'fr']
        records_per_page: 5
        order: id
    

    Details

    | Question | Answer |----------------- | ------ | Relevant Bolt Version | 5.0.0 | Install type | composer install bolt:setup | BC Break | no | PHP version | 7.3.28 | Web server | Apache | For UX/UI issues | Brave, chromium, windows10

    Bug summary

    Translated labels don't save properly. The record cannot show the changes. The profiler translation backend shows the edited fields while still unrefreshed. It shows the edited value if you hit edit again. This either means they don't write properly to their locations or they are not retrieved properly.

    Specifics

    Any yourdomain.TLD/_profiler/ID?panel=translation should show the same behavior. the translations folder is currently only holding a .gitignore file it fails to produce the xml type files which would normally store the values.

    Expected result

    • values saved, stored and visible on page

    Actual result

    • loading and then no effect.
    opened by Puddingboy 16
  • Checkbox field setcontent where clause exception

    Checkbox field setcontent where clause exception

    I'm playing with the new 5.0.0 beta 5 version of Bolt and I have a problem with checkbox fields in templates. I'm trying to fetch content where a checkbox field is checked, like this.

    {% setcontent fooRecords = 'foos' where { checkboxField: true } %}
    

    But I'm getting an exception:

    Argument 2 passed to Bolt\Doctrine\JsonHelper::wrapJsonFunction() must be of the type string or null, bool given, called in /srv/www/vendor/bolt/core/src/Storage/SelectQuery.php on line 325

    Details

    | Question | Answer |----------------- | ------ | Relevant Bolt Version | 5.0.0 beta 5 | Install type | Composer install | BC Break | no | PHP version | 7.4.16 | Web server | nginx/1.19.3 | Database server | MySQL 5.7.32 | For UX/UI issues | -

    Steps to reproduce

    Contenttype like this:

    foos:
        name: Foos
        singular_name: Foo
        fields:
            name:
                type: text
                variant: inline
                label: Name
            checkboxField:
                type: checkbox
    

    Fetch contents like this:

    {% setcontent fooRecords = 'foos' where { checkboxField: true } %}
    

    Expected result

    Contents according to where clause.

    Actual result

    Exception:

    Argument 2 passed to Bolt\Doctrine\JsonHelper::wrapJsonFunction() must be of the type string or null, bool given, called in /srv/www/vendor/bolt/core/src/Storage/SelectQuery.php on line 325

    Stack trace:
    TypeError:
    Argument 2 passed to Bolt\Doctrine\JsonHelper::wrapJsonFunction() must be of the type string or null, bool given, called in /srv/www/vendor/bolt/core/src/Storage/SelectQuery.php on line 325
    
      at vendor/bolt/core/src/Doctrine/JsonHelper.php:23
      at Bolt\Doctrine\JsonHelper::wrapJsonFunction()
         (vendor/bolt/core/src/Storage/SelectQuery.php:325)
      at Bolt\Storage\SelectQuery->build()
         (vendor/bolt/core/src/Storage/Handler/SelectQueryHandler.php:44)
      at Bolt\Storage\Handler\SelectQueryHandler->__invoke()
      at call_user_func()
         (vendor/bolt/core/src/Storage/ContentQueryParser.php:457)
      at Bolt\Storage\ContentQueryParser->fetch()
         (vendor/bolt/core/src/Storage/Query.php:66)
      at Bolt\Storage\Query->getContentByScope()
         (vendor/bolt/core/src/Storage/Query.php:86)
      at Bolt\Storage\Query->getContentForTwig()
         (var/cache/dev/twig/a9/a99dd26a4bb9ce7a3019e8513c7c3ecdee55e2f6566eb0648e2629c5705d3b59.php:139)
      at __TwigTemplate_5910ccc0b8688d80c6c414080f4399caf6f7d50e1695877bd8ad7f7844cb8b49->block_main()
         (vendor/twig/twig/src/Template.php:171)
      at Twig\Template->displayBlock()
         (var/cache/dev/twig/5b/5b57a53ec61eb780bb228fd541f88b33d57086bbd6b7ffc27bd025ad55d7cefc.php:219)
      at __TwigTemplate_1f1c69ee45af87ebc36a5194ed5e08d7fda52bd54b27c398dee8f2ae51e2af37->doDisplay()
         (vendor/twig/twig/src/Template.php:394)
      at Twig\Template->displayWithErrorHandling()
         (vendor/twig/twig/src/Template.php:367)
      at Twig\Template->display()
         (var/cache/dev/twig/a9/a99dd26a4bb9ce7a3019e8513c7c3ecdee55e2f6566eb0648e2629c5705d3b59.php:48)
      at __TwigTemplate_5910ccc0b8688d80c6c414080f4399caf6f7d50e1695877bd8ad7f7844cb8b49->doDisplay()
         (vendor/twig/twig/src/Template.php:394)
      at Twig\Template->displayWithErrorHandling()
         (vendor/twig/twig/src/Template.php:367)
      at Twig\Template->display()
         (var/cache/dev/twig/0a/0afa37713518f5bc9d0e4a86d9b75c7160c4a49ab13d5fc31aa10b3414c5a9dc.php:47)
      at __TwigTemplate_fcb02321d9a6f1382205ebbac478d1f563d3d0d533c9bf31c4cc325fad0fb623->doDisplay()
         (vendor/twig/twig/src/Template.php:394)
      at Twig\Template->displayWithErrorHandling()
         (vendor/twig/twig/src/Template.php:367)
      at Twig\Template->display()
         (vendor/twig/twig/src/Template.php:379)
      at Twig\Template->render()
         (vendor/twig/twig/src/TemplateWrapper.php:40)
      at Twig\TemplateWrapper->render()
         (vendor/twig/twig/src/Environment.php:277)
      at Twig\Environment->render()
         (vendor/bolt/core/src/Controller/TwigAwareController.php:108)
      at Bolt\Controller\TwigAwareController->render()
         (vendor/bolt/core/src/Controller/TwigAwareController.php:158)
      at Bolt\Controller\TwigAwareController->renderSingle()
         (vendor/bolt/core/src/Controller/Frontend/HomepageController.php:56)
      at Bolt\Controller\Frontend\HomepageController->homepage()
         (vendor/symfony/http-kernel/HttpKernel.php:157)
      at Symfony\Component\HttpKernel\HttpKernel->handleRaw()
         (vendor/symfony/http-kernel/HttpKernel.php:79)
      at Symfony\Component\HttpKernel\HttpKernel->handle()
         (vendor/symfony/http-kernel/Kernel.php:195)
      at Symfony\Component\HttpKernel\Kernel->handle()
         (public/index.php:30)            
    
    πŸ› tag: bug 
    opened by ntomka 16
  • Provide server-side validation

    Provide server-side validation

    At the moment there is no way to do server-side validation of content entered via the bolt editor. (There is a little bit of validation done via javascript in the browser.)

    I'm proposing to make a minimal set of changes that will allow developers who are using bolt/core to build a site to specify their own validation in php. These changes also make it possible for bolt/core to include server side validation itself later, while allowing developers to override this.

    How can you help?

    I'll be happy to discuss the options, and can provide an outline of the changes as I would see them.

    I've started on a proof-of-concept, and can create a proposal for the change as a PR in the short future (days/weeks).

    Outline of changes

    I think this would work:

    The basic approach would be to use as much code and knowledge from symfony/validator as possible, but to not force the use of it.

    Create a new interface definition: ContentValidatorInterface, that has a single function: validate() - this function takes a content object, and returns an array-like structure of constraint violations. ConstraintViolationListInterface (used by symfony/validator) should definitely be allowed as a return value. The structure of the items in the array should follow the structure als used by symfony/validator.

    Add code to the save() function in ContentEditController.php that will invoke the validate function if ContentValidatorInterface is available/injected. It should show the edit screen if the returned array has elements (instead of saving the data), and pass an additional 'errors' twig variable containing the violations.

    Change twig templates: templates/content/edit.html.twig, and probably templates/_partials/fields/_base.html.twig templates to show the errors in the edit page.

    With the above 3 changes a developer could create a validator class that implements ContentValidatorInterface as a service, and create as much validation as they want. Note that this is server-side only, implementing client-side validation that will match this should be left for another day.

    πŸ’‘RFC 
    opened by simongroenewolt 16
  • PHP 8.1 Deprecation warnings

    PHP 8.1 Deprecation warnings

    PHP is outputting deprecation notices when run via the CLI.

    PHP Deprecated:  Optional parameter $qb declared before required parameter 
    $utils is implicitly treated as a required parameter in 
    vendor/bolt/core/src/Storage/SelectQuery.php on line 111
    

    Details

    | Question | Answer |------------------------------------------------------ | ------ | Relevant Bolt Version | 5.0.7 | Install type | Composer | BC Break | no | PHP version | 8.1

    Reproduction

    Upgrading to PHP 8.1 and my app's cronjobs start throwing the above error.

    opened by benr77 14
  • Do not cast the order by expression for MySQL drivers as casting a TE…

    Do not cast the order by expression for MySQL drivers as casting a TE…

    Fixes #1971 - the CAST to TEXT causes an error on MySQL.

    This follows similar logic implemented in src/Doctrine/Query/Cast.php.

    Getting the backend driver name (e.g. mysql) is a long chain of method calls but I cannot see any other way. It also uses getDatabasePlatform()->getName() instead of the getDriver()->getName() call in Cast.php as the docblock on that method suggests it is deprecated (but no alternative suggested.)

    opened by andysh-uk 14
  • Default 'escaping' of field output in Twig.

    Default 'escaping' of field output in Twig.

    In Bolt 3, if you do {{ record.fieldname }}, it'll output HTML. At the same time, it's not explicitly defined how it should behave. One of the causes of this is how the fields are stored internally.

    We should make sure that Bolt 4 does this sensibly, consistent and robust. In my opinion, it should work like the following. Let's say we have a title field, with a <i> tag in it.

    schermafbeelding 2019-03-07 om 13 59 32

    In Twig we should be able to do:

    <hr>
        <p>{{ record.title }}</p>
        <p>{{ record.title|raw }}</p>
        <p>{{ record.title|e('html') }}</p>
        <p>{{ dump(record.title) }}</p>
        <p>{{ dump(record.title.getValue()) }}</p>
    <hr>
    

    And it should output:

    schermafbeelding 2019-03-07 om 14 07 37

    This way, the implementor can use {{ record.foo }} and get the HTML output they expect 90% of the time, and at the same time, you still have access to the underlying data structure to do with it what you need.

    opened by bobdenotter 14
  • PHP 8.0 compatibility

    PHP 8.0 compatibility

    Details

    | Question | Answer |------------------------- | ------ | Relevant Bolt Version | 4.1.4 | Install type | Composer install | BC Break | no | PHP version | 8.0 RC3 | Web server | Nginx | For UX/UI issues | Latest Chrome

    Reproduction

    Bug summary

    BoltCMS currently breaks when trying to run it on PHP 8.0 RC3

    Specifics

    After installing the current PHP 8.0 RC3 release I got the following error when trying to access the frontpage

    image

    Compile Error: Cannot declare interface Psr\Container\ContainerInterface, because the name is already in use
    

    This is related to https://github.com/symfony/symfony/issues/36676

    Basically you can either have the psr/container interface installed via composer or as a PHP module.

    To circumvent that we need to add the following to the composer.json

    {
        "replace": {
            "psr/container": "1.*"
        }
    }
    

    After a new composer install the following error occurs

    image

    syntax error, unexpected token "match"
    

    This is realted to https://github.com/willdurand/Negotiation/pull/106

    The module https://github.com/willdurand/Negotiation is being required by api-platform/core which is present in our composer.json

    But as can be seen in that Pull Request there is no stable release for that fix at the moment.

    I tried that fix on my instance and BoltCMS works after these changes.

    image

    I would say we'll have to wait for a stable release and then adjust our TravisCI tests to check if other things break as well under 8.0

    🎩 refactor 
    opened by LordSimal 13
  • Bump json5, @vue/cli-service, @symfony/webpack-encore, vue-jest and vue-loader

    Bump json5, @vue/cli-service, @symfony/webpack-encore, vue-jest and vue-loader

    Bumps json5 to 2.2.2 and updates ancestor dependencies json5, @vue/cli-service, @symfony/webpack-encore, vue-jest and vue-loader. These dependencies need to be updated together.

    Updates json5 from 2.2.1 to 2.2.2

    Release notes

    Sourced from json5's releases.

    v2.2.2

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).
    Changelog

    Sourced from json5's changelog.

    v2.2.2 [code, diff]

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).
    Commits
    • 14f8cb1 2.2.2
    • 10cc7ca docs: update CHANGELOG for v2.2.2
    • 7774c10 fix: add proto to objects and arrays
    • edde30a Readme: slight tweak to intro
    • 97286f8 Improve example in readme
    • d720b4f Improve readme (e.g. explain JSON5 better!) (#291)
    • 910ce25 docs: fix spelling of Aseem
    • 2aab4dd test: require tap as t in cli tests
    • 6d42686 test: remove mocha syntax from tests
    • 4798b9d docs: update installation and usage for modules
    • Additional commits viewable in compare view

    Updates @vue/cli-service from 4.5.19 to 5.0.8

    Release notes

    Sourced from @​vue/cli-service's releases.

    v5.0.8

    :bug: Bug Fix

    v5.0.7

    • @vue/cli-service
    • @vue/cli-ui
      • #7210 chore: upgrade to apollo-server-express 3.x

    Committers: 2

    v5.0.6

    Fix compatibility with the upcoming Vue 2.7 (currently in alpha) and Vue Loader 15.10 (currently in beta).

    In Vue 2.7, vue-template-compiler is no longer a required peer dependency. Rather, there's a new export under the main package as vue/compiler-sfc.

    v5.0.5

    :bug: Bug Fix

    • @vue/cli
      • #7167 fix(upgrade): prevent changing the structure of package.json file during upgrade (@​blzsaa)
    • @vue/cli-service
    • @vue/cli-plugin-e2e-cypress
      • [697bb44] fix: should correctly resolve cypress bin path for Cypress 10 (Note that the project is still created with Cypress 9 by default, but you can upgrade to Cypress 10 on your own now)

    Committers: 3

    v5.0.4

    :bug: Bug Fix

    • @vue/cli-service
    • @vue/cli-shared-utils, @vue/cli-ui
      • 75826d6 fix: replace node-ipc with @achrinza/node-ipc to further secure the dependency chain

    Committers: 1

    v5.0.3

    ... (truncated)

    Changelog

    Sourced from @​vue/cli-service's changelog.

    5.0.7 (2022-07-05)

    • @vue/cli-service
    • @vue/cli-ui
      • #7210 chore: upgrade to apollo-server-express 3.x

    Committers: 2

    5.0.6 (2022-06-16)

    Fix compatibility with the upcoming Vue 2.7 (currently in alpha) and Vue Loader 15.10 (currently in beta).

    In Vue 2.7, vue-template-compiler is no longer a required peer dependency. Rather, there's a new export under the main package as vue/compiler-sfc.

    5.0.5 (2022-06-16)

    :bug: Bug Fix

    Committers: 3

    5.0.4 (2022-03-22)

    :bug: Bug Fix

    • @vue/cli-service
    • @vue/cli-shared-utils, @vue/cli-ui
      • 75826d6 fix: replace node-ipc with @achrinza/node-ipc to further secure the dependency chain

    Committers: 1

    ... (truncated)

    Commits
    • b154dbd v5.0.8
    • 0260e4d fix: add devServer.server.type to useHttps judgement (#7222)
    • 4a0655f v5.0.7
    • beffe8a fix: allow disabling progress plugin via devServer.client.progress
    • 558dea2 fix: support devServer.server option, avoid deprecation warning
    • bddd64d fix: optimize the judgment on whether HTTPS has been set in options (#7202)
    • ef08a08 v5.0.6
    • fcf27e3 fixup! fix: compatibility with Vue 2.7
    • a648958 fix: compatibility with Vue 2.7
    • 98c66c9 v5.0.5
    • Additional commits viewable in compare view

    Updates @symfony/webpack-encore from 1.8.2 to 4.2.0

    Release notes

    Sourced from @​symfony/webpack-encore's releases.

    Allowing webpack-cli v5

    Hey packagers!

    This release allows webpack-cli version 5 to be used in your package.json file.

    Upgrading

    Run:

    npm install "@symfony/webpack-encore@^4.2.0" --save-dev
    

    Or:

    yarn upgrade "@​symfony/webpack-encore@^4.2.0"

    Changes: v4.1.2..v4.2.0

    Happy Packing!

    4.1.2 - fixes Vue 2 version problem

    Hey packagers!

    This release fixes an incompatibility when using @vue/compiler-sfc with Vue 2.7. Thanks to @​dmaicher in #1166 for the fix!

    Upgrading

    Run:

    npm install "@symfony/webpack-encore@^4.1.2" --save-dev
    

    Or:

    yarn upgrade "@​symfony/webpack-encore@^4.1.2"

    Changes: v4.1.1..v4.1.1

    Happy Packing!

    Fixing version typo in 4.1.0

    Hey packagers!

    A tiny release to fix a typo in 4.1.0 that made the package uninstallable.

    Upgrading

    Run:

    ... (truncated)

    Changelog

    Sourced from @​symfony/webpack-encore's changelog.

    CHANGELOG

    v4.1.0

    October 17th, 2022

    Features

    Bug Fixes

    • Support for Vue 2 was accidentally dropped in 4.0.0, and was re-added - #1157 thanks to @​Kocal.

    v4.0.0

    This major release makes Encore compatible with Yarn Plug'n'Play and pnpm.

    BC Breaks

    • The following dependencies must be added in your package.json: webpack webpack-cli @babel/core @babel/preset-env (#1142 and #1150):
    npm install webpack webpack-cli @babel/core @babel/preset-env --save-dev
    

    or via yarn

    yarn add webpack webpack-cli @​babel/core @​babel/preset-env --dev

    • The following dependencies must be removed from your package.json and Babel configuration: @babel/plugin-syntax-dynamic-import @babel/plugin-proposal-class-properties, since they are already included in @babel/preset-env (#1150):
    npm remove @babel/plugin-syntax-dynamic-import @babel/plugin-proposal-class-properties
    

    or via yarn

    yarn remove @​babel/plugin-syntax-dynamic-import @​babel/plugin-proposal-class-properties

    and remove it from your Encore configuration:

    Encore.configureBabel((options) => {
    -    config.plugins.push('@babel/plugin-proposal-class-properties');
    +    
    })
    

    v3.1.0

    August 24th, 2022

    ... (truncated)

    Commits
    • 2e044a9 Tagging 4.2.0
    • 71fd378 feature #1173 chore: updated webpack-cli peerDependencies with v5 (UlrichHP)
    • ebf261f chore: updated webpack-cli peerDependencies with v5
    • 9bb5469 Tagging 4.1.2
    • 6fd73c5 bug #1166 Match ``@vue/compiler-sfc requirement with `vue` (dmaicher)
    • 7e415b8 Match @vue/compiler-sfc requirement with vue
    • 51dd583 Fixing wrong pr number
    • b45a1c6 Tagging 4.1.1
    • 1d54c54 bug #1160 fix(pkg): fix peerDependency constraints for vue and vue-loader (Ko...
    • b0e9a3d fix(pkg): fix peerDependency constraints for vue and vue-loader
    • Additional commits viewable in compare view

    Updates vue-jest from 3.0.7 to 4.0.1

    Release notes

    Sourced from vue-jest's releases.

    v4.0.1

    One minor fix.

    Fixes:

    v4.0.0

    The 4.0.0 is finally here. No clear blocker so transitioning this from release candidate to master. Better late than never.

    Fixes

    fix: add fallback to default TemplateCompileOptions #310 @​nogic1008

    v4.0.0-rc.1

    Features

    feat: pass templateCompiler options https://github.com/vuejs/vue-jest/commit/37efa5873661385c1a979838b23b72701650a132 feat: add-compile-template-options #288

    Fixes

    fix: external css files path resolution https://github.com/vuejs/vue-jest/commit/fe76473cb19a01cd417e4bff4ca1c22128625e37

    v4.0.0-rc.0

    Features

    We moved to release candidate after many months of beta with no real roadmap.

    We will move to 4.0.0 stable before the end of Sep 2020.

    v4.0.0-beta.6

    Fixes

    fix: remove inline source map @​nogic1008 build: bump jest version in peerDependencies @​nogic1008

    That's it! Small release.

    v4.0.0-beta.5

    Fixes

    v4.0.0-beta.4

    Features

    ... (truncated)

    Commits
    • e632171 Merge pull request #320 from catrope/typo-namepsace
    • 95784e4 Merge pull request #284 from vuejs/remove-ts-jest
    • 10559e1 chore: rebase
    • 6a7a728 Fix typo in processor example
    • 1fb3b2e publish: 4.0.0
    • 938a97e Merge pull request #311 from vuejs/dependabot/npm_and_yarn/ini-1.3.7
    • 1ada5fe Merge pull request #312 from vuejs/dependabot/npm_and_yarn/node-notifier-8.0.1
    • b393520 chore(deps): bump node-notifier from 8.0.0 to 8.0.1
    • 4ce4686 Merge pull request #310 from nogic1008/hotfix/template-compiler
    • 2353bd2 chore(deps): bump ini from 1.3.5 to 1.3.7
    • Additional commits viewable in compare view

    Updates vue-loader from 15.10.1 to 17.0.1

    Release notes

    Sourced from vue-loader's releases.

    v17.0.1

    Bug Fixes

    • add vue and @vue/compiler-sfc to optional peerDependencies (df0ded5), closes #1944
    • merge custom queries rather than appending (#1911) (9e4249a)

    v17.0.0

    Features

    • support reactivityTransform option (e07490e)

    BREAKING CHANGES

    • remove refSugar option, require vue@^3.2.13

    v16.8.3

    Bug Fixes

    • HMR not working correctly with vue-class-component components (#1897) (76b1448)

    v16.8.2

    Bug Fixes

    v16.8.1

    Bug Fixes

    • fix template options resolving for ts (91f581b)

    v16.8.0

    Bug Fixes

    • hmr: fix hmr regression (bacc6a9)

    Features

    • enableTsInTemplate option (7613534)

      • When used with ts-loader, due to ts-loader's cache invalidation behavior, it sometimes prevents the template from being hot-reloaded in isolation, causing the component to reload despite only the template being edited. If this is annoying, you can set this option to false (and avoid using TS expressions in templates).

      • Alternatively, leave this option on (by default) and use esbuild-loader to transpile TS instead, which doesn't suffer from this problem (it's also a lot faster). However, do note you will need to rely on TS type checking from other sources (e.g. IDE or vue-tsc).

    v16.7.1

    Bug Fixes

    • remove pure annotation for custom blocks (cd891e5)

    ... (truncated)

    Changelog

    Sourced from vue-loader's changelog.

    17.0.1 (2022-10-28)

    Bug Fixes

    • add vue and @vue/compiler-sfc to optional peerDependencies (df0ded5), closes #1944
    • merge custom queries rather than appending (#1911) (9e4249a)

    17.0.0 (2021-12-12)

    Features

    • support reactivityTransform option (e07490e)

    BREAKING CHANGES

    • remove refSugar option, require vue@^3.2.13

    16.8.3 (2021-11-04)

    Bug Fixes

    • HMR not working correctly with vue-class-component components (#1897) (76b1448)

    16.8.3 (2021-11-04)

    Bug Fixes

    • HMR not working correctly with vue-class-component components (#1897) (76b1448)

    16.8.2 (2021-10-26)

    Bug Fixes

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies πŸ§Ή Chore 
    opened by dependabot[bot] 0
  • Implemented the bolt content translations

    Implemented the bolt content translations

    This feature adds the Content-Translation page:

    image

    This page allows to export content in the xlf format, which is the default format for translation agencies.

    After translating the files, they can be imported again and will replace localized text with the given file.

    If content cannot be found by their id (which happens if content is changed between import and exporting), the controller searches for the original text and adds the translation to the found content field.

    This also works with custom fields that are stored as json. On export the controller even splits json content, so translation agencies do not need to read in between the json overhead:

        <unit id="fZD0nJb" name="DE TITLE">
          <notes>
            <note category="id">9</note>
            <note category="type">generic</note>
            <note category="original">{"title":"DE TITLE","size":"h2"}</note>
            <note category="part">title</note>
          </notes>
          <segment>
            <source>DE TITLE</source>
            <target>EN TITLE</target>
          </segment>
        </unit>
        <unit id="_Zj_Bq_" name="h2">
          <notes>
            <note category="id">9</note>
            <note category="type">generic</note>
            <note category="original">{"title":"DE TITLE","size":"h2"}</note>
            <note category="part">size</note>
          </notes>
          <segment>
            <source>h2</source>
            <target>h2</target>
          </segment>
        </unit>
    

    HTML on the other side is not extracted, which was not a problem for the company that translated our last project (their tool was able to do it on its own).

    This was tested on one project so far (without the fallback to the content query, if id's changed). This has also been successfully tested on all supported databases: mysql, sqlite and postgresql.

    opened by Spomsoree 1
  • Homepage can'tbe access, return HTTP 302 code

    Homepage can'tbe access, return HTTP 302 code

    After installing Bolt CMS, i create my homepage page in backend.

    Even i try to access by my local domain only or with the slug of the page, my browser can't present the page. I'm working with Nginx. When i examine the error log, i don't see any sensitive informations to explain it. But in the access log, each access return HTTP 302 code.

    After I'm created a new page (Page ContentType). With my local domain and the slug of the new page, i can see it. This problem isn't depending of the graphic theme used.

    Details

    | Question | Answer |------------------------------------------------------ | ------ | Relevant Bolt Version | 5.1.19 | Install type | Composer install | BC Break | yes/no | PHP version | 8.1 | | Web server | Nginx | | For UX/UI issues | firefox (linux) 108.0 (64bits)

    Reproduction

    Install Bolt CMS with composer (create new project) execute setup after set database in .env.local (MariaDB) access to backend create the home page (with or without images) try to access at the root of the website

    Bug summary

    Specifics

    Steps to reproduce

    Install Bolt CMS with composer (create new project) execute setup after set database in .env.local (MariaDB) access to backend create the home page (with or without images) try to access at the root of the website

    Expected result

    Actual result

    My browser show nothing an notify me an loading error

    opened by celtic34fr 2
  • Beta Release 5.2.0-beta.10 - New content is saved to the database twice

    Beta Release 5.2.0-beta.10 - New content is saved to the database twice

    New content is saved to the database twice

    error bolt.js:1:100516

    bolt.js:1:98689 Uncaught ReferenceError: can't access lexical declaration 'l' before initialization t http://www.localhost:8000/assets/bolt.js:1 error http://www.localhost:8000/assets/bolt.js:1 u http://www.localhost:8000/assets/469.js:2 fireWith http://www.localhost:8000/assets/469.js:2 C http://www.localhost:8000/assets/469.js:2 t http://www.localhost:8000/assets/469.js:2 send http://www.localhost:8000/assets/469.js:2 ajax http://www.localhost:8000/assets/469.js:2 30720 http://www.localhost:8000/assets/bolt.js:1 dispatch http://www.localhost:8000/assets/469.js:2 handle http://www.localhost:8000/assets/469.js:2 add http://www.localhost:8000/assets/469.js:2 Ee http://www.localhost:8000/assets/469.js:2 each http://www.localhost:8000/assets/469.js:2 each http://www.localhost:8000/assets/469.js:2 Ee http://www.localhost:8000/assets/469.js:2 on http://www.localhost:8000/assets/469.js:2 t http://www.localhost:8000/assets/469.js:2 30720 http://www.localhost:8000/assets/bolt.js:1 l http://www.localhost:8000/assets/469.js:2 c http://www.localhost:8000/assets/469.js:2 setTimeout handler*19755/</Deferred/then/a/< http://www.localhost:8000/assets/469.js:2 u http://www.localhost:8000/assets/469.js:2 fireWith http://www.localhost:8000/assets/469.js:2 fire http://www.localhost:8000/assets/469.js:2 u http://www.localhost:8000/assets/469.js:2 fireWith http://www.localhost:8000/assets/469.js:2 ready http://www.localhost:8000/assets/469.js:2 W http://www.localhost:8000/assets/469.js:2 19755 http://www.localhost:8000/assets/469.js:2 19755 http://www.localhost:8000/assets/469.js:2 19755 http://www.localhost:8000/assets/469.js:2 s http://www.localhost:8000/assets/bolt.js:1 32025 http://www.localhost:8000/assets/469.js:2 s http://www.localhost:8000/assets/bolt.js:1 30720 http://www.localhost:8000/assets/bolt.js:1 s http://www.localhost:8000/assets/bolt.js:1 i http://www.localhost:8000/assets/bolt.js:1 O http://www.localhost:8000/assets/bolt.js:1 http://www.localhost:8000/assets/bolt.js:1 http://www.localhost:8000/assets/bolt.js:1

    opened by hanzx 0
  • REST API DELETE method not working

    REST API DELETE method not working

    When attempting to delete a record using the REST API, a status "204 No Content" is returned (which indicates that the request was successful) but the record still remains unchanged.

    Details

    | Question | Answer |----------------- | ------ | Relevant Bolt Version | 5.1.18 | Install type | Composer install | PHP version | 7.2 | Web server | Apache / Built-in

    Reproduction

    Bug summary

    * Most likely an APIPlatform implementation fault
    * Annotations for deleting content using the API are present in Bolt\Entity\Content
    

    Specifics

    * API route is `/api/contents/{id}`, method is DELETE
    * API definition can be found by default under `/bolt/api`
    * Bolt was installed using Composer CLI
    * Bolt version is 5.1.28
    * Clients used to verify the problems are Postman and PHP/Curl
    

    Steps to reproduce

    * Create a User with ROLE_WEBSERVICE
    * Create an example record of any content type
    * Make an HTTP call with DELETE method to `/api/contents/{id}` -> should return status 204
    * Verify that the record has not been deleted
    

    Expected result

    * The record is deleted from the database completely
    

    Actual result

    * The record remains unchanged
    
    opened by fabian-st 0
Releases(5.1.19)
  • 5.1.19(Dec 9, 2022)

    πŸ› Bug fixes

    • Pass other _route_params into a forwarded request #3342
    • Fix excerpt when content would be too short after trimming #3367
    • Make guesstimateAuthor return type nullable #3358
    • Made the isCurrent-filter remove the current locale #3368
    Source code(tar.gz)
    Source code(zip)
  • 5.2.0-beta.10(Dec 8, 2022)

  • 5.2.0-beta.9(Nov 24, 2022)

  • 5.2.0-beta.8(Nov 18, 2022)

  • 5.2.0-beta.7(Nov 7, 2022)

  • 5.1.18(Oct 28, 2022)

    Released: 2022-10-28

    πŸ› Bug fixes

    • Create fix-bundles as bash script #3340
    • Since we call it using self::runPHP, we don't need the shebang #3337
    • Fixed some typos and made some phrases more natural/native sounding #3338
    • Pass other _route_params into a forwarded request #3342

    πŸ“¦ Additions and new features

    • Added Ukrainian lang support, fixed some Russian translations #3339
    Source code(tar.gz)
    Source code(zip)
  • 5.1.17(Oct 14, 2022)

    Released: 2022-10-14

    πŸ› Bug fixes

    • Ensure we return the found ImageField, and not the surrounding Set or Collection #3333
    • Fix fix-bundles in PostUpdateScript.php #3331
    • Allow editing YAML files through the Bolt Backend #3325
    • Check for empty request before using it #3334
    Source code(tar.gz)
    Source code(zip)
  • 5.1.16-pl.1(Oct 5, 2022)

  • 5.2.0-beta.6(Sep 30, 2022)

  • 5.1.16(Sep 21, 2022)

    Released: 2022-09-21

    πŸ“¦ Additions and new features

    • The |excerpt-filter now also excerpts fields inside Collections and Sets #3320

    πŸ› Bug fixes

    • Make Request parameter optional. Prevent breakage in extensions that don't have context (yet). #3318
    • Make LocaleHelper throw the correct Exception #3319
    Source code(tar.gz)
    Source code(zip)
  • 5.1.15(Sep 16, 2022)

    Released: 2022-09-16

    πŸ› Bug fixes

    • Remove outdated edge-case, that was actually breaking on MariaDB (bobdenotter, #3315)
    • Characters escaped when displaying the title block in templates (fsidobre, #3314)
    • Add setId() function in User Entity (nestordedios, #3313)
    Source code(tar.gz)
    Source code(zip)
  • 5.2.0-beta.5(Aug 31, 2022)

  • 5.1.14(Aug 31, 2022)

    Released: 2022-08-31

    πŸ› Bug fixes

    • Catch more broad Exception in Locales::getName (bobdenotter, #3309)
    • Insert <meta> snippets on main request only (jordanaubert, #3308)
    • Content validation is triggered on creation of content as well (jordanaubert, #3305)
    • Fix deprecation notice in PHP 8.0 and above ( abdellahrk, #3307)
    Source code(tar.gz)
    Source code(zip)
  • 5.2.0-beta.4(Aug 26, 2022)

  • 5.1.13(Aug 26, 2022)

    Released: 2022-08-26

    This release includes three security-related fixes. Our thanks go out to Eitan Shav at WhiteSource and David MΓΌller of lutrasecurity.com for identifying these issues and disclosing them to us responsibly! πŸ‘πŸ™

    πŸ› Bug fixes

    • Fix setcontent with where { } clause filtering on a foreign id in MySQL (bobdenotter, #3302)
    • Proper default for $filter (bobdenotter, #3296)
    • Fix icons in ContentTypes in Menu (bobdenotter, #3287)

    πŸ” Security related changes

    • Prevent renaming or moving of files on edit (bobdenotter, #3295)
    • Ensure uploaded SVG files have no embedded Javascript (bobdenotter, #3294)
    • Prevent injection when filtering records (bobdenotter, #3293)
    Source code(tar.gz)
    Source code(zip)
  • 5.2.0-beta.3(Aug 24, 2022)

  • 5.2.0-beta.2(Aug 11, 2022)

  • 5.1.12(Jul 11, 2022)

  • 5.1.11(Jul 5, 2022)

    Released: 2022-07-05

    πŸ› Bug fixes

    • Add non-supported SVG HTML element to HTML Sanitiser #3257
    • |image-filter looks in all possible fields #3259
    • Feature/prev and next class #3255
    • Additional fix for type: number field, set default to min: 0. #3252
    • Fix the Canonical even Better! #3248
    • Create an empty stub for postLoad to make updating smoother #3270
    Source code(tar.gz)
    Source code(zip)
  • 5.1.10(Jun 17, 2022)

    Released: 2022-06-17

    πŸ› Bug fixes

    • Remove old conflict (bobdenotter, #3236)
    • Don't break when login-form is sent incomplete (bobdenotter, #3221)
    • Fix error thrown by extensions with no config options defined (#3242)
    • Fix type: number field (#3231)
    • Increase type: textarea field font-size (#3239)
    • Ensure the |order filter sorts case insentitive. (#3235)
    • Update ECS to version 10.3 (#3232)
    • Ensure correct Canonical (#3229, #3248)
    • Fixed the config used for search result limits (#3219)
    • Add helper to prepare QueryBuilder when fetching latest records. (#3218)
    • Prevent negative dates ("Before year 0") in Content (#3240)
    • Get correct relative file path, when files/ is a symlink (#3245)
    Source code(tar.gz)
    Source code(zip)
  • 5.1.9(May 31, 2022)

    Released: 2022-05-31 (replaces 5.1.8)

    πŸ› Bug fixes

    • Fix where with Checkbox Fields. Hopefully this time for good (bobdenotter, #3214)
    • Ensure PublishedAt gets set correctly when publishing a Record (bobdenotter, #3211)
    • Cast the config maintenance value to boolean (Spomsoree, #3206)
    • Separate methods for Pager from pagerParams. (vlad-ghita, #3205)
    • Fixed partial broken UserLocaleSubscriber (UtechtDustin, #3204)
    • Maintain Field order. (vlad-ghita, #3201)
    • Fix setting new Fields on Collection. (vlad-ghita, #3200)
    • Use single quotes for query string literals (LimpSquid, #3199)
    • Renamed the Icon method in the Content class (Spomsoree, #3198)
    • Detect JSON for non-specialized MySQL platform instances. (vlad-ghita, #3197)
    • Fix version compare for composer self-update versions. (vnagara, #3196)
    • Add β€œedit” link icon to related content in select/multiselect lists (nestordedios, #3195)
    • Fixing potential bug, exposed by PHPStan 1.6.x update (bobdenotter, #3194)
    • Fix: MySQL was returning case sensitive results. (codemis, #3188)
    • Update Number Field (type: number) to include the min and max (Joossensei, #3185)
    • Fixed the custom Field Type inside Sets (Spomsoree, #3180)
    • Allow a β€œthumbnails” property to be configured against a ContentType Field (andysh-uk, #3179)
    • Parent menu items in Backend use correct icon (david-saisondor, #3170)
    • Fix Collection Field, so it now takes the limit into account for containing fields (david-saisondor, #3163)
    • Use JSON_VALUE on MySQL platforms (andysh-uk, #3135)
    • change initialization of fields on postLoad Doctrine event (simongroenewolt, #3101)
    • Make type: hidden Field usable (david-saisondor, #3173)
    • Make top level menu icon in Backend customizable (david-saisondor, #3167)
    Source code(tar.gz)
    Source code(zip)
  • 5.2.0-beta.1(May 24, 2022)

  • 4.2.6(Apr 5, 2022)

  • 5.1.7-pl.1(Mar 31, 2022)

    Released: 2022-03-31

    πŸ› Bug fixes

    • Update User Edit Form so it has a unique ID (Joossensei, #3150)
    • Fix number field template so it works within Collections. (dadaxr, #3146)
    • Ensure correct links in menu, when changing backend_url in services.yaml (bobdenotter, #3145)
    • Handle multiple EntityManager prefixes (matesko, #3142)
    • Handle 'double wrapped' database connections (simongroenewolt, #3139)
    • Reverse search and replace arrays in str_replace (HeinDR, #3137)
    • Don't break /bolt/api/ if it's set to public and it's accessed in a browser (bobdenotter, #3136)

    πŸ› οΈ Miscellaneous

    • Update Dutch translations πŸ‡³πŸ‡± (bobdenotter, #3156)
    • Translation of missing German translations πŸ‡©πŸ‡ͺ (obsti8383, #3152)
    • Add cite to allowed_tags (bobdenotter, #3149)
    • Adding cache decorator for Formatter (bobdenotter, #3143)

    βš™οΈ Code Quality / Developer Experience

    • Let's make it work on both Composer 2.3.x as well as 2.2.x (bobdenotter, #3154)
    • Refactor Composer scripts to work with Composer 2.3.0 (bobdenotter, #3151)
    • Remove unused findParents method (bobdenotter, #3141)
    Source code(tar.gz)
    Source code(zip)
  • 5.1.7(Mar 31, 2022)

    Released: 2022-03-31

    πŸ› Bug fixes

    • Update User Edit Form so it has a unique ID (Joossensei, #3150)
    • Fix number field template so it works within Collections. (dadaxr, #3146)
    • Ensure correct links in menu, when changing backend_url in services.yaml (bobdenotter, #3145)
    • Handle multiple EntityManager prefixes (matesko, #3142)
    • Handle 'double wrapped' database connections (simongroenewolt, #3139)
    • Reverse search and replace arrays in str_replace (HeinDR, #3137)
    • Don't break /bolt/api/ if it's set to public and it's accessed in a browser (bobdenotter, #3136)

    πŸ› οΈ Miscellaneous

    • Update Dutch translations πŸ‡³πŸ‡± (bobdenotter, #3156)
    • Translation of missing German translations πŸ‡©πŸ‡ͺ (obsti8383, #3152)
    • Add cite to allowed_tags (bobdenotter, #3149)
    • Adding cache decorator for Formatter (bobdenotter, #3143)

    βš™οΈ Code Quality / Developer Experience

    • Let's make it work on both Composer 2.3.x as well as 2.2.x (bobdenotter, #3154)
    • Refactor Composer scripts to work with Composer 2.3.0 (bobdenotter, #3151)
    • Remove unused findParents method (bobdenotter, #3141)
    Source code(tar.gz)
    Source code(zip)
  • 5.1.5(Mar 22, 2022)

    Released: 2022-03-22

    πŸ› Bug fixes

    • Use requestStack to access current request when needed. (vlad-ghita, #3132)
    • Update float field so it uses step='any' by default (Joossensei, #3122)
    • Bugfix: verify setting correct tags for caching works correctly (bobdenotter, #3119)

    πŸ“¦ Additions and new features

    • Updates to allow custom theming for security area (vlad-ghita, #3125)

    πŸ› οΈ Miscellaneous

    • Use routing to create the link to the ContentType overview (andysh-uk, #3133)
    • Fix YAML migrations (bobdenotter, #3118)
    Source code(tar.gz)
    Source code(zip)
  • 5.1.4(Mar 13, 2022)

    Released: 2022-03-13

    πŸ› Bug fixes

    • Fix Select field with empty value, for required: false and allowempty: true (jordanaubert, #3116)
    • Update Date.vue dateFormat to include seconds (simongroenewolt, #3096)
    • Fix custom homepage setting: allow singular ContentType slugs (bobdenotter, #3093)
    • Fixes parsing for editing Yaml files in the backend editor (Joossensei, #3090)
    • Fix YAML migrations (bobdenotter, #3118)

    πŸ› οΈ Miscellaneous

    • Set api:get: to PUBLIC_ACCESS for public access to the read-endpoint of the API (bobdenotter, #3111)
    • Add map to htaccess (peterboorsma, #3108)

    βš™οΈ Code Quality / Developer Experience

    • Tiny fix, as per PHPStan (bobdenotter, #3109)
    • fix wrong copy paste in comments (dadaxr, #3105)
    • Bump url-parse from 1.5.6 to 1.5.10 (dependabot[bot], #3102)
    • Update cypress tests so it retries on failure (Joossensei, #3099)
    • Refactoring deprecations in Symfony 5 -> 6 (bobdenotter, #3091)
    Source code(tar.gz)
    Source code(zip)
  • 5.1.3(Feb 10, 2022)

    Released: 2021-02-10

    πŸ› Bug fixes

    • Fix configuration values not resolving correctly (ionutlip, #3068)
    • Set default values in FieldType (bobdenotter, #3058)

    πŸ› οΈ Miscellaneous

    • Make it possible for GlobalVoter.php to vote on non-bolt users. (simongroenewolt, #3081)
    • Adds the ability to change dynamic the bolt configuration directory (ionutlip, #3086)
    • Add a username to the backendmenu cache key (Joossensei, #3087)
    • Update cypress tests again (Joossensei, #3084)
    • Update AuthSubscriber.php to prevent logout error (matesko, #3074)
    • Avoid running node service as root user (fsidobre, #3073)
    • Tweaking Cypress defaultCommandTimeout (bobdenotter, #3070)
    • Add the possibility to sort and filter users in the backend (damien-jourdan, #3066)
    • Show "404" image for missing thumbnails (bobdenotter, #3064)
    • Update Relation.php (Joossensei, #3060)
    • Bugfix Fix autocomplete for Relation (ionutlip, #3055)

    βš™οΈ Code Quality / Developer Experience

    • Bump nanoid from 3.1.30 to 3.2.0 (dependabot[bot], #3077)
    • Bump node-fetch from 2.6.6 to 2.6.7 (dependabot[bot], #3076)
    • Update api_tests.yaml (bobdenotter, #3069)
    • Remove ignore of false positive in PHPStan (bobdenotter, #3061)
    Source code(tar.gz)
    Source code(zip)
  • 5.1.2(Jan 19, 2022)

    Released: 2021-01-19

    πŸ› Bug fixes

    • Bugfix Fix maximum_listing_select in config.yaml for Relation (ionutlip, #3052)
    • Fix wrong subtask called in Makefile for Docker (fsidobre, #3048)
    • Fix date format to save PM time (fsidobre, #3046)
    • Fix Romanian transliteration (bobdenotter, #3043)

    πŸ› οΈ Miscellaneous

    • Users overview page Dutch translations (nestordedios, #3049)
    • Update package-lock.json (Joossensei, #3045)
    • New feature: Allow empty value for select form controls, based on user setting. (vlad-ghita, #3041)
    • Update serializable interface (bobvandevijver, #3039)
    • Prepare release 5.1.1 (bobdenotter, #3036)
    • Minor cleanup on services.yaml (bobdenotter, #3035)

    βš™οΈ Code Quality / Developer Experience

    • Typehint QuestionHelper (make PhpStan happy) (bobdenotter, #3044)
    • Fixing logo alt (bobdenotter, #3042)
    Source code(tar.gz)
    Source code(zip)
  • 5.1.1(Jan 5, 2022)

    Released: 2021-01-05

    πŸ› Bug fixes

    • Make LoginFormAuthenticator compatible with Symfony 5.3 (I-Valchev, #3028)
    • Fix boolean logic in CorePostUpdateScript.php 🀦 (bobdenotter, #3034)
    • Composer 2.2 compatibility fix (bobdenotter, #3029)
    Source code(tar.gz)
    Source code(zip)
BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the project website for more information.

BaiCloud-cms About BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the

null 5 Aug 15, 2022
Question2Answer is a free and open source platform for Q&A sites, running on PHP/MySQL.

Question2Answer (Q2A) is a popular free open source Q&A platform for PHP/MySQL, used by over 22,000 sites in 40 languages.

Question2Answer 1.6k Jan 5, 2023
Statamic 3 - the flat-first, Laravel + Git powered CMS designed for building beautiful, easy to manage websites

Statamic 3 - the flat-first, Laravel + Git powered CMS designed for building beautiful, easy to manage websites

Statamic 600 Jan 4, 2023
Baicloud CMS is a lightweight content management system (CMS) based on PHP and MySQL and running on Linux, windows and other platforms

BaiCloud-cms About BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the

null 5 Aug 15, 2022
Free, open-source, self-hosted CMS platform based on the Laravel PHP Framework.

Winter is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of

Winter CMS 1.1k Jan 3, 2023
Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS

Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS. Building this Content Management System, we focused on simplicity. To achieve this, we implemented a simple but powerful API's.

Flextype 524 Dec 30, 2022
NukeViet 132 Nov 27, 2022
PHPVibe Open source video CMS / Video Sharing CMS / Youtube Api v3 / Video Embeds

PHPVibe Video CMS Free Video Sharing CMS The modern choice of design inspired by Youtube and a social videos sharing module that may just cut it for y

MediaVibe 71 Dec 18, 2022
Amila Laravel CMS - Free, open-source Simple Bootstrap Laravel CMS

Simple Bootstrap Laravel CMS. Support Laravel 8.x Can integrate into any existing Laravel project. Only add few database tables with prefixes, not affect your existing database tables. Support Laravel 7.x & Laravel 6.x & Laravel 5.x & MySql & PostgreSql - Amila Laravel CMS

Alex Zeng 96 Sep 6, 2022
Instructions and helpful files for running Drupal 7 on the Amezmo platform.

Drupal 7 Amezmo Instructions and helpful files for running Drupal 7 on the Amezmo platform. Description Drupal 7 requires some small modifications to

Steven DuBois 2 Aug 9, 2022
Wordpress plugin to allow websites to sell and distribute NFTs through the Enjin platform

MyMeta Basket is the world's first plug-and-play Wordpress/Enjin/Ethereum integration that allows you to start selling blockchain assets through your website within minutes. All you need is Wordpress, MyMeta Basket, and an Enjin subscription.

MyMetaverse 6 Oct 3, 2022
ExpressionEngine is a flexible, feature-rich, free open-source content management platform that empowers hundreds of thousands of individuals and organizations around the world to easily manage their web site.

ExpressionEngine CMS ExpressionEngine is a mature, flexible, secure, free open-source content management system. It is beloved by designers for giving

ExpressionEngine 412 Dec 27, 2022
HTMLy is an open source Databaseless Blogging Platform or Flat-File Blog prioritizes simplicity and speed written in PHP

HTMLy is an open source Databaseless Blogging Platform or Flat-File Blog prioritizes simplicity and speed written in PHP. HTMLy can be referred to as Flat-File CMS either since it will also manage your content.

Dan 858 Jan 6, 2023
Twill is an open source CMS toolkit for Laravel that helps developers rapidly create a custom admin console that is intuitive, powerful and flexible. /// Chat with us and others on Spectrum: https://spectrum.chat/twill

About Twill Twill is an open source Laravel package that helps developers rapidly create a custom CMS that is beautiful, powerful, and flexible. By st

AREA 17 3k Jan 6, 2023
True Multisite, Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony

True Multisite, Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony

null 4 Oct 28, 2022
phpReel is a free, MIT open-source subscription-based video streaming service that lets you create your platform for distributing video content in the form of movies or series.

phpReel is a free, MIT open-source subscription-based video streaming service that lets you create your platform for distributing video content in the form of movies or series.

null 118 Dec 14, 2022
Sulu is an open-source content management platform based on the Symfony PHP framework

This repository is no longer the recommended way to start a sulu project. Please have a look at the documentation to find out how to start a new proje

Sulu CMS 623 Nov 12, 2022
Zenphoto - a standalone CMS for multimedia focused websites

Zenphoto The simpler media website CMS http://www.zenphoto.org Welcome to the Zenphoto git repository! About Zenphoto is a standalone CMS for multimed

ZenphotoCMS 272 Dec 30, 2022
ProcessWire 3.x is a friendly and powerful open source CMS with a strong API.

Welcome to ProcessWire 3.x This document is in Markdown. An HTML formatted version of this document can be read at: https://github.com/processwire/pro

ProcessWire 804 Jan 3, 2023