Modern CMS with shop features based on fullstack symfony and sylius components

Overview

alt text

License Continuous Integration Scrutinizer Code Coverage Version

The enhavo CMS is a open source PHP project on top of the fullstack Symfony framework and uses awesome Sylius components to serve a very flexible software, that can handle most of complex data structure with a clean and usability interface.

Enhavo is still under heavy development and we can't guarantee for backward compatibility or security issues nor is our documentation up to date. So we advice you to not use the software for production until we reach a stable release.

Get started

If you just want to use enhavo, you don't need to install this repository. Read the Get Started tutorial to install your own enhavo application.

Demo

If you want to check the enhavo look and feel. Take a look at our demo on demo.enhavo.com

User Password
[email protected] admin

Contribute

Help us to develop the software. This is the main repository of the enhavo project. Feel free to open tickets or pull requests or just give us feedback. If you are a github user, you can star our project.


If you want to contribute code, you need to run the main repository. Make sure you have installed composer and yarn on your local machine. Fork and clone the repo and add a .env.local file containing your database credentials.

DATABASE_URL=mysql://db_user:[email protected]:3306/enhavo

And a test config .env.test.local containing your test database credentials.

DATABASE_URL=mysql://db_user:[email protected]:3306/enhavo_test

Execute following commands on your shell:

$ composer install
$ yarn install
$ yarn encore dev
$ yarn routes:dump
$ bin/console doctrine:database:create
$ bin/console doctrine:database:create --env=test
$ bin/console doctrine:migrations:migrate
$ bin/console doctrine:migrations:migrate --env=test
$ bin/console enhavo:init
$ bin/console enhavo:user:create --super-admin

Make your changes and run the tests.

$ bin/phpunit
$ bin/behat
$ bin/mocha
$ bin/karma

Testing stack

Depending on what you are going to test, choose the right tool.

<----------------------------- Behat ---------------------------------------->
<------------- PHPUnit ---------------->
                                        <------------- Karma ---------------->
                                        <------ Mocha --->
[**** Database ****][**** PHP File ****][**** JS File ****][**** Browser ****]

Documentation

The documentation is available at docs.enhavo.com.


If you want to contribute to the documentation you need sphinx. Read sphinx-doc.org to install it. For the --watch option you have to install sphinx-autobuild.

Fork and clone this repository and make your changes under docs/source. After each change run following command and open the build/docs/index.html in your browser to see and valid your changes.

$ bin/docs
$ bin/docs --watch

MIT License

License can be found here.

Comments
  • Admin page Stored Cross-site Scripting (XSS)

    Admin page Stored Cross-site Scripting (XSS)

    Summary

    enhavo CMS has XSS security issue on the admin page. An authorized attacker can put any kind of javascript. And it is executed on authorized victim browser without induce

    Reproduction

    Here is how to reproduce this issue.

    1. Access to the admin page.
    2. Create an Usergroup as payloads.
    3. Back to admin user group page.

    Then you find that dialog appeared and XSS happens.

    Payloads

    Set Usergroup as following.

    <img src=x onerror="alert(document.cookie);"/>
    

    Event

    • 2018-03-05 Vuln is discovered.
    • 2018-03-06 Contact to developers.
    • 2018-03-13 Open an issue.
    opened by fvi-att 5
  • Use PrependExtensionInterface instead of import configuration files

    Use PrependExtensionInterface instead of import configuration files

    At the moment we include the configurations file over yaml configuration files in config/packages/.

    The files look like:

    imports:
        - { resource: '@EnhavoAppBundle/Resources/config/app/config.yml' }
    

    But in the symfony docs, they advise to use PrependExtensionInterface https://symfony.com/doc/current/bundles/prepend_extension.html

    It would be nice, if we can just keep our Resources/config/app/config.yaml. So we just read the content and pass it to extension config.

        public function prepend(ContainerBuilder $container)
        {
            $configs = Yaml::parse(file_get_contents(__DIR__.'/../Resources/config/app/config.yaml'));
            foreach($configs as $name => $config) {
                $container->prependExtensionConfig($name, $config);
            }
        }
    

    We need to apply that on all bundles

    doing 
    opened by gseidel 4
  • [UserBundle] group permissions by prefix

    [UserBundle] group permissions by prefix

    | Q | A | ------------- | --- | Bug fix? | no | New feature? | yes | Doc PR? | no | License | MIT

    group permissions by prefix to give at least some overview

    opened by indivisualvj 2
  • Found a possible security concern

    Found a possible security concern

    Hey there!

    I belong to an open source security research community, and a member (@wind226) has found an issue, but doesn’t know the best way to disclose it.

    If not a hassle, might you kindly add a SECURITY.md file with an email, or another contact method? GitHub recommends this best practice to ensure security issues are responsibly disclosed, and it would serve as a simple instruction for security researchers in the future.

    Thank you for your consideration, and I look forward to hearing from you!

    (cc @huntr-helper)

    opened by JamieSlome 2
  • Store XSS

    Store XSS

    For background articles, fill in the title of the modified content: '"><iMg SrC=x OnErRoR=alert(9999)>{{7*7}}

    image

    View Article trigger XSS https://demo.enhavo.com/article/cats image

    opened by wind226 2
  • Fix media twig function accept null

    Fix media twig function accept null

    | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | Doc PR? | no | Backport | 0.9, 0.10 | License | MIT

    Twig function like media_parameter should accept null as file and return empty string like media_url does. This helps to keep the twig code more clean, instead of adding if cases all the time

    backport-0.9 backport-0.10 
    opened by gseidel 2
  • [AppBundle] Added initial values for filters (backport #1275)

    [AppBundle] Added initial values for filters (backport #1275)

    This is an automatic backport of pull request #1275 done by Mergify. Cherry-pick of d1fcf07da5a9b497c141942b65b9b9edf44f39c7 has failed:

    On branch mergify/bp/0.9/pr-1275
    Your branch is up to date with 'origin/0.9'.
    
    You are currently cherry-picking commit d1fcf07da.
      (fix conflicts and run "git cherry-pick --continue")
      (use "git cherry-pick --skip" to skip this patch)
      (use "git cherry-pick --abort" to cancel the cherry-pick operation)
    
    Changes to be committed:
    	modified:   assets/node_modules/@enhavo/app/Grid/Filter/Components/FilterBar.vue
    	modified:   assets/node_modules/@enhavo/app/Grid/Filter/Components/FilterDropdownComponent.vue
    	modified:   assets/node_modules/@enhavo/app/Grid/Filter/Factory/AutoCompleteEntityFactory.ts
    	modified:   assets/node_modules/@enhavo/app/Grid/Filter/Model/AbstractFilter.ts
    	modified:   assets/node_modules/@enhavo/app/Grid/Filter/Model/BetweenFilter.ts
    	modified:   assets/node_modules/@enhavo/app/Grid/Filter/Model/OptionFilter.ts
    	modified:   docs/source/reference/filter/age-filter.rst
    	modified:   docs/source/reference/filter/auto-complete-entity-filter.rst
    	modified:   docs/source/reference/filter/between-filter.rst
    	modified:   docs/source/reference/filter/boolean-filter.rst
    	new file:   docs/source/reference/filter/date-between-filter.rst
    	modified:   docs/source/reference/filter/entity-filter.rst
    	modified:   docs/source/reference/filter/index.rst
    	modified:   docs/source/reference/filter/option-filter.rst
    	new file:   docs/source/reference/filter/option/hidden.rst
    	new file:   docs/source/reference/filter/option/initial_active.rst
    	new file:   docs/source/reference/filter/option/initial_value.rst
    	modified:   docs/source/reference/filter/option/label.rst
    	new file:   docs/source/reference/filter/option/permission.rst
    	deleted:    docs/source/reference/filter/option/translationDomain.rst
    	new file:   docs/source/reference/filter/option/translation_domain.rst
    	modified:   docs/source/reference/filter/taxonomy-filter.rst
    	modified:   docs/source/reference/filter/text-filter.rst
    	modified:   src/Enhavo/Bundle/AppBundle/Filter/AbstractFilterType.php
    	modified:   src/Enhavo/Bundle/AppBundle/Filter/Type/AutoCompleteEntityType.php
    	modified:   src/Enhavo/Bundle/AppBundle/Filter/Type/BetweenFilterType.php
    	modified:   src/Enhavo/Bundle/AppBundle/Filter/Type/BooleanType.php
    	modified:   src/Enhavo/Bundle/AppBundle/Filter/Type/DateBetweenFilterType.php
    	modified:   src/Enhavo/Bundle/AppBundle/Filter/Type/EntityType.php
    	modified:   src/Enhavo/Bundle/AppBundle/Filter/Type/OptionType.php
    	modified:   src/Enhavo/Bundle/AppBundle/Filter/Type/TextType.php
    	modified:   src/Enhavo/Bundle/MultiTenancyBundle/Filter/TenancyFilterType.php
    	modified:   src/Enhavo/Bundle/TaxonomyBundle/Filter/TaxonomyFilterType.php
    	modified:   src/Enhavo/Bundle/TaxonomyBundle/Repository/TermRepository.php
    	modified:   src/Enhavo/Bundle/UserBundle/Resources/config/routes/admin/user.yaml
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
    	both modified:   assets/node_modules/@enhavo/app/Grid/Filter/Components/FilterAutoCompleteComponent.vue
    	both modified:   assets/node_modules/@enhavo/app/Grid/Filter/Model/AutoCompleteEntityFilter.ts
    
    

    To fix up this pull request, you can check it out locally. See documentation: https://help.github.com/articles/checking-out-pull-requests-locally/


    Mergify commands and options

    More conditions and actions can be found in the documentation.

    You can also trigger Mergify actions by commenting on this pull request:

    • @Mergifyio refresh will re-evaluate the rules
    • @Mergifyio rebase will rebase this PR on its base branch
    • @Mergifyio update will merge the base branch into this PR
    • @Mergifyio backport <destination> will backport this PR on <destination> branch

    Additionally, on Mergify dashboard you can:

    • look at your merge queues
    • generate the Mergify configuration with the config editor.

    Finally, you can contact us on https://mergify.io/

    conflicts 
    opened by mergify[bot] 2
  • Improve vue form rendering (backport #1262)

    Improve vue form rendering (backport #1262)

    This is an automatic backport of pull request #1262 done by Mergify.


    Mergify commands and options

    More conditions and actions can be found in the documentation.

    You can also trigger Mergify actions by commenting on this pull request:

    • @Mergifyio refresh will re-evaluate the rules
    • @Mergifyio rebase will rebase this PR on its base branch
    • @Mergifyio update will merge the base branch into this PR
    • @Mergifyio backport <destination> will backport this PR on <destination> branch

    Additionally, on Mergify dashboard you can:

    • look at your merge queues
    • generate the Mergify configuration with the config editor.

    Finally, you can contact us on https://mergify.io/

    opened by mergify[bot] 2
  • Cleverreach component

    Cleverreach component

    | Q | A | ------------- | --- | Bug fix? | no | New feature? | yes | Backport | 0.10 | License | MIT

    Integrate the CleverReach repository into the main repo to obtain easier maintenance

    backport-0.10 
    opened by gseidel 2
  • fix CurrencyFormatter->getInt + Test

    fix CurrencyFormatter->getInt + Test

    | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | Doc PR? | no | Backport | 0.9 | Tickets | | License | MIT

    backport-0.9 backport-0.10 
    opened by indivisualvj 2
  • Automate release

    Automate release

    | Q | A | ------------- | --- | Bug fix? | no | New feature? | no | Doc PR? | no | License | MIT

    Fully automate releases and subtree pushes

    backport-0.9 
    opened by gseidel 2
  • [MediaBundle] Non-public media files

    [MediaBundle] Non-public media files

    Media files connected to non-public entities are always available if you know their url. If these files are indexed by search engines or manually linked by other sites, they will still be valid after the containing entity has been set to private.

    Possible solutions:

    1. Public flag on File entity, cascaded from parent entity. High performance, but possible cause for synchronization problems.
    2. Symfony Voter system whenever a file is supposed to be displayed. Slows down performance on File display (SEO relevant), but less error prone and good flexibility/code quality.
    opened by FabianLiebl 0
  • [NavigationBundle] Suggestion: Nested navigation

    [NavigationBundle] Suggestion: Nested navigation

    Speculative suggestion: It might be a good idea to add a navigation node type which references another navigation and renders it like a submenu. This could be useful on pages where the same menu points show up in different places, and it would allow a single source of truth style for managing these points.

    opened by FabianLiebl 0
  • [NavigationBundle] Clickable headline in SubmenuNavItem

    [NavigationBundle] Clickable headline in SubmenuNavItem

    SubmenuNavItem doesn't have a good solution for a navigation where the head of the submenu is itself clickable. A possible solution would be an additional field in SubmenuNavItem where another Node can be added, which is then rendered as the head of the submenu.

    Also it might be good to prevent the placement of a submenu into this field, which would make no sense. Therefore introduction of groups for navigation items might be a good idea, analogous to groups in blocks/validation/etc.

    Related Ticket: #1378 (For the field in the submenu formtype)

    opened by FabianLiebl 0
  • [FormBundel][PageBundle] Improve parent selection

    [FormBundel][PageBundle] Improve parent selection

    A page entity has a parent property, but in the PageFormType the parent selection allow only root pages. Any page in the hierarchy should be able to select, except the ones which create a parent/ child loop.

    opened by gseidel 0
  • [AppBundle] Bug with currently selected element in index view on unsaved changes

    [AppBundle] Bug with currently selected element in index view on unsaved changes

    How to reproduce:

    1. Open index of any resource in backend with at least two existing entries.
    2. Open update for one of the entries. The index view will indicate which of the entries is currently selected.
    3. Make changes to the entry but don't save.
    4. Click on another entry in the table view. The indicator in the index view will change immediately, but the update view will not close yet. Instead it asks if you would like to close without saving.
    5. Click "Cancel". Now you still have the first entry open, but your index view will indicate a different entry.
    opened by FabianLiebl 0
Releases(v0.11.2)
Owner
enhavo
Modern CMS based on Symfony and Sylius
enhavo
Fork is an easy to use open source CMS using Symfony Components.

Installation Make sure you have composer installed. Run composer create-project forkcms/forkcms . in your document root. Browse to your website Follow

Fork CMS 1.1k Dec 8, 2022
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
A PHP 5.3 CMS built on top of Laravel 4 and other composer components.

Anvil Forge your website! A PHP 5.3 CMS built on top of Laravel 4 and other composer components. Installation Installing Anvil is easy. Run the follow

Loïc Sharma 17 May 3, 2022
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
Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS

Grav Grav is a Fast, Simple, and Flexible, file-based Web-platform. There is Zero installation required. Just extract the ZIP archive, and you are alr

Grav 13.6k Jan 4, 2023
Azuriom is a modern, reliable, fast and secure game CMS.

Azuriom Azuriom is the next generation game CMS, it's free and open-source, and is a modern, reliable, fast and secure alternative to existing CMS so

Azuriom 359 Jan 4, 2023
Bolt CMS is an open source, adaptable platform for building and running modern websites.

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.

Bolt 437 Jan 4, 2023
🚀Bolt CMS is an open source, adaptable platform for building and running modern websites

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

Bolt 32 Dec 3, 2022
Azuriom - a modern, reliable, fast and secure game CMS.

Azuriom is the next generation game CMS, it's free and open-source, and is a modern, reliable, fast and secure alternative to existing CMS so you can have the best web experience possible.

Azuriom 281 May 5, 2022
Doptor CMS is a Laravel 5 based CMS

Introduction Doptor CMS is a Laravel 5 based CMS. Find out more about Doptor by reading below. ;) About Doptor CMS Doptor is an Integrated and well-de

DOPTOR 4 Sep 11, 2022
Bismuth CMS is a ready-made Website CMS based on Yii 2 Advance Template

Bismuth CMS is a ready-made Website CMS based on Yii 2 Advance Template, it's the simplest and easy to set up CMS you may come across.

Hamadas Telebrain 1 Feb 11, 2022
A flexible and fast Cms built with Symfony and Vuejs.

GreenCheap CMS A modular and lightweight CMS made with Symfony and Vuejs components GreenCheap works with PHP 8 version. In this case, lower versions

GreenCheap 57 Oct 29, 2022
GetSimple CMS - a flatfile CMS that works fast and efficient and has the best UI around, it is written in PHP

GetSimple CMS is a flatfile CMS that works fast and efficient and has the best UI around, it is written in PHP.

null 370 Dec 30, 2022
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
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
Bootstrap CMS - PHP CMS powered by Laravel 5 and Sentry

Bootstrap CMS Bootstrap CMS was created by, and is maintained by Graham Campbell, and is a PHP CMS powered by Laravel 5.1 and Sentry. It utilises many

Bootstrap CMS 2.5k Dec 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