We continued our exploration of e-commerce applications in the Symfony2 ecosystem at this months hackday with some playtime with OroCRM. OroCrm is currently in alpha phase and is unique in that its primary focus is to provide CRM tools for B2C rather than B2B of traditional CRM solutions. They plan to integrate with different webshop solutions to for example automatically open a lead if a customer leaves the site without checking out but had filled the shopping cart with a certain number of products. Since the venture is started by Yoav, one of the founders of Magento, their first target is of course Magento which we also leverage at Liip as our primary e-commerce platform. What is also interesting is that the OroCRM created a business application platform on top of Symfony2. The goal is to facilitate the creation of other business applications which can then be easily integrated together. One concrete example of this is AkeneoPim. Note that the platform uses the liberal MIT license while the CRM uses the OSL 3.0 license, same as Magento. Its quite similar to the LGPL with additional provisions that terminate the license for anyone initiating patent litigation against other users of the application.
In general OroCRM is quite trivial to install for anyone familiar with Symfony2. It was nice to see that they use the popular LiipImagineBundle among many other community provided Bundles. We made some small PRs to address some tiny details. We were a bit sad to see that the OroCRM team currently does not leverage travis-ci to make it easier for contributors to ensure that their contributions do not break the tests. But at least it was good to see that there is an extensive test suite.
First look at the UI
The first impressions of the UI were quite positive. There are some very useful navigational tools that are provided as part of the application platform that provide shortcuts, links to recently used tools and a search that can search across all data using a custom inverted index stored in the RDBMS. Note that the search index looks to be pluggable, so expect Solr support to be provided eventually as an option. That being said, the current set of features do not cover things like leads yet. There was unfortunately also no code yet to handle Magento integration. Its clear that at this point the focus is still more on providing infrastructure rather than trying to provide a finished feature set. Its an alpha after all.
Digging in a bit
At first we ran the application via the PHP 5.4 build in server that Symfony2 integrates conviniently via
/api/rest without taking care of the subdirectory the application was running in. Speaking of the UI we were dissapointed to notice that it is currently not responsive and no provisions seems to have been made for touch devices. We feel like it would be wise to address this topic early to ensure that all the infrastructure pieces will work for mobile users too.
Its all REST
The backend seems to support a REST API via WSSE authentication. SOAP also seems to be there or at least planned but we didn't try it out. To make it easier to generate the required WSSE headers we send a PR with a little command. However many of the controllers use
json_encode explicitly rather than leveraging the FOSRestBundle view layer. This in turn means that XML is not supported and furthermore its not so easy to configure on the model what fields should be returned. Its not clear why this is the case because in some controllers FOSRestBundle is used. It might be that this will eventually be refactored.
Low level infrastructure
In the system tab we found several very useful pieces that will no doubt be useful for many other business applications too. First there is a notification system which hooks into the ORM. Administrators can for example automatically send an email when a new contact is created. There is also an audit log that can be enabled on a per entity basis. Entities can be configured in the UI which generates the code and automatically updates the database schema. A new entity will by default map to a new table. There also seem to be some provisions for EAV to handle more unstructured content but its not yet possible to configure this via the UI. I would urge to look into PHPCR here instead or just serialize to JSON/XML.
Looking at the current CRM features
The key thing that is currently provided is the ability to create accounts and contacts. We noticed some issues in the validation. Sometimes there was not enough information given or validation was limited to server side validation. There were also some issues that due to the fact that validation was server side, red boarders denoting errors caught in the server side validation dissapear. There were also some usuability issues like there was no way to copy the address of the account over into the shipping address fields and there was no way to quickly create a new contact for an account. But hey, its an alpha so no worries there. We also looked briefly at security. Symfony2 out of the box provides quite a few tools to help write secure applications. So we didn't find any significant things. We just noticed that while in most places html tags were simply escaped, for tags we found that html tags were stripped on display but persisted in the database.
The take away
OroCRM certainly looks promising though at this point the main thing that can be judged is the platform underneath. There are not that many actual CRM features, let alone webshop integration. Note that OroCRM alpha6 was released today featuring among many things a “Flexible Workflow Engine” and “Leads and Opportunities Workflow”. So it looks like they made a big step towards becoming an actual CRM.