📜 ⬆️ ⬇️

Discover the Oro Platform


Hi habr!

Recently, the release of a young open source platform Oro Platform (BAP). Unfortunately, this event was not highlighted in the Russian-speaking part of the Internet, so I would like with your permission to fill this omission.
This article is an overview, as it is the entry into the cycle of publications about the platform. Who cares what it is - welcome under the cat.

BAP ( Business Application Platform ) is a terrible name, a platform for developing business applications. I think that each of us has come across the fact that during the implementation of a task, you notice its similarity to the already existing one with the similar functionality of the service / program you have ever used. I would also like to take this piece of application to myself, file a little and voila! To this end, it was decided to make a platform, using which one can concentrate to the maximum on developing the business domain of the application, and put the routine tasks on its shoulders.

To begin with, I would like to say a few words about who is at the origin of the development of this product, the date of its birth, about motivation, prospects and successes already achieved.
')
History tour

The birth of the Oro Platform is directly related to the start of the development of the first product that is written on it - OroCRM . In December 2012, Dima Soroka, Yoav Kutner and Jary Carter, who are known to many in the world of e-commerce for their work at Magento Corporation, including Yoav as one of the co-founders, decided to implement a new CRM system for business based on ecommerce. I think that CRM itself is a topic for a separate post, so for now let's forget about it.

With the start of the new project, a number of standard tasks appeared that needed to be solved: REST + SOAP API, data grids + filtering, search, import / export, system settings, data migration, task scheduler (cron tasks), etc. Unfortunately, the PHP world is not particularly rich in complex CMF solutions that have at least some of the mentioned functionality. Personally, I’m confused with shops and CRM on Word Press , I’m reminded of Redm-based CRM and even Magento fork, which has been cut out of functionality related to catalog / sales. It was at this stage that the lack of a quality solution in this area was noticed. So, from the start, we found out: 1st commit December 2, 2012.

Technology stack


Based on the success story Magento, the choice fell on PHP. One can argue about the advantages and disadvantages of this language, but one fact that is difficult to dispute is its popularity. Here is a complete list of technologies used:


The choice of tools was made according to the main criteria: availability and completeness of documentation, community and development, availability of stable and LTS versions.

The list turned out to be quite motley, many php veterans make them come in good shape. Unfortunately, it cannot be said that all the tools in this list are perfect. Of the main problems I would like to note: doctrine is not always easily extensible, composer gluttony (now> 1.2 GB of memory goes to update), BackboneJS is free (after which ChaplinJS was added and serious research AngularJS was made ).

Developers who are already dealing with Symfony2 will find popular bundles (modules) that they have had to use more than once.
Under the spoiler some of them
  • KnpMenuBundle
  • KnpGaufretteBundle
  • FOSRestBundle
  • FOSJsRoutingBundle
  • LiipImagineBundle
  • GenemuFormBundle
  • NelmioApiDocBundle
  • BeSimpleSoapBundle
  • JMSSerializer
  • JMSJobQueue
  • ...



Community


At the moment, the community around the platform itself is not large, but it seems to me that over time this deficiency is leveled. The ecosystem that is built around the symfony framework is the benchmark for the open source product and the interest, and sometimes the input from members of the community like Lukas Smith (from LiiP ), members of the community of another symfony-based product Sylius , suggests the idea of ​​moving in the right direction.

I wanted to note that the application was written with the possibility of trouble-free localization, integrated translation service , so the geography of the development of the community is not limited. As far as I know, the Russian translation is now in the process. Contributions to the development of the platform can be made both by developing and by developing documentation.

Progress


So, it's time to announce success: The undoubted success is that the startup has reached GA release. At the moment I know about 3 applications that use the platform:
Product Information Management - from Akeneo from France, current version 1.2.9
DiamanteDesk ( Help desk software ) - from Eltrino from Ukraine, now at the stage of early beta (judging by their roadmap)
Stock management system from the company Interactive4 , unfortunately I do not know the details

I would like to pay special attention to Akeneo, since the guys have already received an investment of $ 2.3 million to develop their product. Similarly, SensioLabs (the founder of Symfony) considered the platform as the basis for its internal product, but, unfortunately, I do not know the decision to use / not use.

For quality control, CI systems are used, including travisCI, the platform code is covered by unit tests (about 70%). It should be noted that there are also builds for controlling compatibility with code standards (using PSR-2 ), as well as static code analyzers such as PHPMD , Scrutinizer , SensioLabsInsight .

At the moment, the platform has 54 bundles and 2 components.
Description of some of them under the spoil
  • UserBundle - user authorization, management of system users, user groups
  • DashboardBundle - custom dashboard management, provides abstraction for writing your own widgets
  • DataGridBundle - visualization of data in the form of a grid, the ability to perform actions with each record or with several records, export of displayed data
  • FilterBundle - provides a set of filters that can be used in the system, provides an interface for writing your own filters
  • ImportExportBundle - provides an abstraction for writing import / export functionality, has a set of basic reader / writer out of the box
  • RequireJSBundle - integrates RequireJS into a symphony application, provides configuration options for this bootloader
  • ThemeBundle - provides support for themes for decorating the look of the application
  • TrackingBundle - provides the functionality of tracking user behavior on the site, based on the JS part of Piwik
  • TagBundle - provides the ability to add tagging to any doctrine entity.
  • ConfigBundle - provides the functionality of configuration trees, and also comes with a ready-made system configuration tree
  • ChartBundle - provides an abstraction for visualizing data as a graph, integration with Flotr2
  • FormBundle - contains a set of useful form components
  • MigrationBundle - provides a scheme and data migration mechanism
  • CronBundle - a wrapper over JMSJobQueue that adds the ability to run periodic tasks on a schedule
  • DataAuditBundle - data change logging, data versioning
  • LocaleBundle - application localization, contains a set of formatters for use in both PHP and JS parts
  • SearchBundle - an abstraction for writing search engines, contains an engine for MySQL and PostgreSQL
  • ReportBundle - visual report editor
  • ... etc. more in subsequent articles



Disclaimer


In conclusion, I must say that this solution does not pretend to solve all problems, on the contrary, in my opinion, the use of this product is limited to a narrow niche of business applications.

I would like to repeat that this article is of an overview nature, and therefore there are no technical details in it. The author is one of the core developers of this product. This article was written by the author for personal reasons and is not of a promotional nature.

Reports of inaccuracies or errors in the text are welcome in private messages.

Link to github .

Thanks for attention!

Source: https://habr.com/ru/post/240883/


All Articles