Giter Site home page Giter Site logo

enhavo / enhavo Goto Github PK

View Code? Open in Web Editor NEW
84.0 84.0 29.0 36.59 MB

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

Home Page: https://www.enhavo.com/

License: MIT License

PHP 79.84% JavaScript 2.56% Gherkin 0.27% TypeScript 9.00% Shell 0.01% SCSS 1.87% Twig 3.51% Handlebars 0.01% Vue 2.93%
cms e-commerce enhavo framework php shop sylius symfony typescript vue

enhavo's Introduction

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.

enhavo's People

Contributors

blanconize avatar fabianliebl avatar gseidel avatar indivisualvj avatar martinalt avatar npakai avatar pgrimaud avatar requiem4apr0 avatar schaetzle avatar smbkr avatar wolledoerr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

enhavo's Issues

[Documentation] Translation Guideline

To avoid structural inconsistency in translation files, a guideline should be created defining the keys to use based on where the translation will be used. Alternatively, the structure could also reflect the position in the code where the translation is used.

The current translation files should be structured accordingly, and future changes should refer to that guide.

Possible suggestions:
{entity}.{route, e.g. table/form}.{top-element}.{sub-element}.{type, e.g. label/message/error}
e.g. page.form.change_frequency.weekly.label
{entity}.{route, e.g. table/form}.{type, e.g. label/message/error}.{top-element}.{sub-element}
e.g. page.form.label.change_frequency.weekly

Increase Session Timeout

When writing a long article it is possible user gets logged out after submitting his form.
Solution would be to increase the session timeout to a minimum of 30 minutes or even better to 60 minutes.

Login popup

At the moment, whenever the user gets a session timeout, the next request will return a login screen. This next request can be a form post or an ajax request, resulting in lost form data or failed ajax without a proper message for the user.

There should be a login popup and a saving/resending mechanism for form data for these cases.

Image Cropper

We need some cropper functionality for our media files.

[EnhavoArticleBundle]Form building doesn't work in debug true

If debug = true in parameters.yml, building the backend form for articles will return a 500 error page: "Notice: Undefined index: label.yes" (delivered as Ajax answer).

Traced the error to Symfony FormBuilder trying to create choices for Article field 'social_media'.

User can change his password

As a user i want to change my password.

Atm, only with the user list we can change password, but we should provide a quick menu to change only his own password.

Loading Feedback

A user should get feedback if he start ajax calls. This could just be a loading git. Also the user is not allowed to send the request again. This is important for post requests.

At the moment i just sees these actions, where we need some feedback:

  • Loading table
  • Save
  • Create
  • Preview

dynamic BlockFactory types

Atm the BlockFactory can only create blocks that are hardcoded inside the BlockFactory class. Of course we should offer a central configuration to set up the possible block types and load them dynamically inside our factory.

[EnhavoGridBundle] also using form service in item configuration

At the moment we can configure our items in the config like this:

esperanto_content:
    items:
        youtube:
            model: esperanto\ProjectBundle\Entity\Youtube
            form: esperanto\ProjectBundle\Form\Type\YoutubeType
            repository: esperantoProjectBundle:Youtube
            template: esperantoProjectBundle:ItemType:youtube.html.twig
            label: Youtube

You can see that for the form class we use a concrete class name, but we should give the user also the possibility to use the form as a service.

So this should also be possible:

esperanto_content:
    items:
        youtube:
            model: esperanto\ProjectBundle\Entity\Youtube
            form: esperanto_content_item_youtube
            repository: esperantoProjectBundle:Youtube
            template: esperantoProjectBundle:ItemType:youtube.html.twig
            label: Youtube

Migration Bundle

We need a bundle for housing data migration commands, e.g. to convert database structure changes between framework versions.

Configurable Dynamic Routing

We don't need the dynamic routing in every project. At default it should be turned off, but it easy to turn on again.

Ajax feedback if logout

If you get logged out while you are in the admin, you should receive some message to log in again.
Atm the login promt appears. This is good but should give the user more feedback about what happend.

[EnhavoAppBundle] table widget

We need a better widget system. Sometimes we have more configurations, for some widget.

List Widget
This widget should list all entities of the collection comma separated (by default). The name for the entity should be configurated by the property parameter in the widget. This is like in the form bundle.

list:
    label: group
    property: groups
    widget:
         type: list
         property: name
         separator: ','

Template Widget
Like the widget we have now. Just print an Template

public:
    label: public
    property: public
    widget:
         type: template
         template: AppBundle::template.html.twig

Multiple Property Widget
Show more property in on cell

firstName:
    label: firstName:
    property: firstName
    widget:
       type: multiple_property
       properties:
          - firstName
          - lastName
       separator: ','

Behat CRUD Testing

We have now a small testsuite, but we need more tests. There are already crud features in the behat list, but not implement yet.

[EnhavoContactBundle] dynamic messages

If we send a message via the ContactBundle, we got atm this success message:

Nachricht erfolgreich gesendet!

This message should be configure over the enhavo.yml. By default it should also be translated.

[EnhavoMediaBundle] Mimetype guesser strategy

The FileService->addFile() function determines the files mime type by file extension. This could be solved in a symfony strategy-way allowing determination by file content or users hooking in their own strategy providers.

Replace PHPSpec through PHPUnit

At the moment we have some PHPSpec Test, but we want so switch to PHPUnit, because with Behat, we already have some BDD Testing and i think PHPUnit is more powerful and well known by other developers as PHPSpec.

[EnhavoMediaBundle] manyToOne and oneToOne relationship

A manyToOne and oneToOne relationship should be possible to access the media file. Atm we only have manyToMany relationships. The problem is the esperanto_files form type, cause it can only handle collection. This should be changed.

Preview for Content

We need some preview function for our content. It must be easy to add a preview to an existing content like Page, News or any Content which was added by the user.

For the preview function we will us the same request as we save our content. This is possible because we can reuse the FormType to produce the Entity we look for to render the content.

In an other project we realize this over the resolver. We use the request for saving and send it to the render action.

<?php
  public function showAction(Request $request)
  {
    $news = $this->container->get('esperanto_news.news_resolver')->getNews($request);
    return $this->render('tempalte', array('data' => $news));
  }

The resolver decide if he use the request for an preview or for rendering the entity from db.
This could be an approach for this ticket, but it should be also possible with dynamic routing.

After we have an easy solution to add new preview functionality, it must be also add to the documentation.

[Layout] Too much spacing to button bar

In an opened overlay (e.g. creating a new article) there is far too much spacing between the last attribute-row and the button bar. CSS-class would be ".tabContentContainer". Is 80px. 50px should be fine though.

Check other overlays if spacing is fine (probably using the same class).

CSRF Token should be send at last

It is possible that while sending a request to the Server, the connection is getting interrupt (but the server still process that as a normal request), and we got lost data. To prevent this we can send the CSRF Token in the end, so the form is not valid and will not change the data in case of unexpected interrupt.

[Layout]

Checkboxes-attributes are not aligned with rest of input fields. They are indented a bit.
Check the overlay for creating an article for example. you see "social media" or "public"-checkboxes are not aligned with "publication date"-input-field.

[FormBundle] js set dateTimePicker options dynamically

right now there is no possibility to influence the options used for dateTimePicker (this applies to other widgets as well). it should be possible to define options in a config file (like stepMinute, the wording of the "now"-button and so on).

[EnhavoMediaBundle] Additional information for files

We should save additional information for each media object and add forms to edit them.

For example:

  • file name
  • slug for routes
  • alt tag

Some fields should be dynamical to allow each entity using media to define which fields to use.

[EnhavoAppBundle] assets manageable by routing

Stylesheet and javascript should be manageable by routing.

Example:

stylesheets:
    esperanto_app_style:
        resource: '@esperantoAppBundle/Resource/public/css/style.css'
        depends: ~
javascripts:
    esperanto_app_bootstrap:
        resource: '@esperantoAppBundle/Resource/public/js/bootstrap.css'
        depends: jquery

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.