Zurmo CRM Notes
Zurmo is an open source CRM tool with some very interesting features. Head over to the linked site and take a look. There are a number of flavours, an Open Source Community Edition that can be used as a local install or a Commercial Edition (hosted or local) with useful features like support, integration with Google Apps and Outlook and other features, that if you need them are well worth the subscription costs. [edit] Since the acquisition of the Commercial Edition of Zurmo by Gravity4, an on premises installation may no longer be available. [/edit]
I have installed Zurmo on OS/X Yosemite (10.10) [edit] and also El Capitan (10.11) [/edit]
Pre Requisites were:
Enabling Apache is straightforward, open a terminal and type sudo apachectl start
and enter your password when prompted.
On OS/X there are 2 document root locations but the user location /Users/[username]/Sites is no longer created by default so you should create that folder using Finder or the Terminal
Follow the instructions for Apache at http://coolestguidesontheplanet.com/get-apache-mysql-php-and-phpmyadmin-working-on-osx-10-11-el-capitan/ to complete the configuration for Apache on 10.11
The version of PHP installed by default on OS/X is missing quite a few features. Attempting to compile PHP manually with postgreSQL support fails dismally as the PHP developers can't seem to deal with the way OS/X libraries work. Using Homebrew is also not an option for me as it only works if you use the homebrew version of postgres
A google search led me to:
curl -s http://php-osx.liip.ch/install.sh | bash -s 5.5
which compiles and installs a complete php 5.5 in /usr/local/php5. The httpd.conf file needs to be updated to use the libphp5.so version in this location.
Another piece of software that is a pain to install on OS/X - in this case the link on liip.ch worked fine for me.
Memcache is virtually a mandatory requirement for Zurmo, it runs incredibly slowly without it.
Easier to install here, go to the mysql site and download the dmg image. Note you do NOT need to register to download the package.
Installing mysql is straightforward, remember to read the documentation about setting passwords for the root account
You can create a separate database for Zurmo - however the installation of Zurmo will also do this for you.
CREATE DATABASE zurmo;
Create an account for zurmo and link it to the database
CREATE USER 'zurmo'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON zurmo.* TO 'zurmo'@'localhost';
The installation of Zurmo itself is straightforward. I've used both the Mercurial method (hg clone http://bitbucket.org/zurmo ) and the source download method. Point your browser to the the location you unpacked the source code to - something like http://localhost/~[User]/zurmo/index.php and follow the instructions. Zurmo will create the database user and schema for you if you didn't do it when you installed mysql. If this is your first experience with Zurmo I recommend installing the Demo data during the installation. On one macbook pro I was forced to increase the max_execution time parameter in php.ini to allow the demonstration data to be installed - your mileage may vary. During the installation Zurmo will check that all its prerequisites have been met. You will probably have to adjust my.cnf and php.ini settings to meet all these prerequisites, it was annoying that they are not all spelled out ahead of the installation but that's a minor complaint.
Issue #1
I had an issue sending outbound emails. The test emails were sent correctly so I knew the mail configuration was correct but any workflow based emails would not be sent. The Process Outbound Email Job was failing, investigation of the application log identified a php error being generated in the CSSIN.php file some where (line 87)
Attempts to debug this were unsuccessful, so in the end I just upgraded from 2.7.2 to the 2.8.5 and that solved the problem.
Note for young players, the upgrade was actually in 2 steps, from 2.7.2 to 2.7.3 then to 2.8.5.
Issue #2
Zurmo worked fine on my local install, but failed to show any page with a google map link at a client using an Enterprise Proxy.
Trawling through a google search on the error "php warning file_get_contents failed to open stream connection refused" turned up a lot of information, mostly focussed on updating the allow_url_include setting in the php.ini file. That setting was already set and correct. A quick debug using a small test php file indicated that the get_file_contents() call was working for a local connection, but failing on remote connections. Further testing using curl on the same url worked fine and I was completely stumped until I remembered the client server was using a squid proxy to connect to the 'net. My guess was the php call was not being passed correctly by the proxy server.
After a bit more research I came across a post on Stack Exchange that solved the problem:
Using the code:
$aContext = array(
'http' => array(
'proxy' => 'tcp://proxyserver:proxyport',
'request_fulluri; => true;
),
);
$cxContext = stream_context_create($aContext);
in the Google.php file before the line:
$this->raw_response = file_get_contents($url, False, $cxContext);
and adding the False and $cxContext parameters to the call everything worked!
Issue #3
Zurmo doesn't appear to have a business day calendar! This could be a deal breaker for the project I'm working on as it's not possible to create workflows that use business days to trigger events e.g. create a task to occur 2 (business) days after the record is saved.
I've built calendar code many years ago in VB6, so if I have time I'll take a crack at adding this functionality myself.
Issue #4
Zurmo doesn't appear to support automatic conversion of times outside the UI. Using a date/time field in a template for instance has a time field appear in GMT format, not much use for nice lean reminders for example.
Thanks to a tip from namecaps and speixoto on the Zurmo forum by including:
$s = strtotime($content);
date_default_timezone_set("Asia/Dubai"); //change to the appropriate location
$content = date("l, d-M-Y:H:i", $s); //change to the appropriate formatting for your location
for email templates in MergeTagsToModelAttributesAdapter.php. The field will be converted to the supplied timeline. I need to spend some time getting this more generic so it picks up the timezone of the relevant user (or the system user account) to generate the relevant time.
This will be a great starting point for any other conversions I need to include.
In this day and age, no system is an island. The ability to move data between systems or use alternative methods of adding and updating data is vital.
Zurmo provides a CSV based importer that is easy to use but not very robust. I trialled interfacing 100 new contact records with 40+ custom fields and it failed to reliably load records and was incredibly slow. This had to be replaced with some custom php code, fortunately there is a well documented REST api for most of the functions I'd ever need to perform. The downside is the customer has custom code that needs to be maintained - something I really wanted to avoid.
One of the gotchas I discovered during the implementation of this interface was the behaviour of the clients squid proxy which was dropping calls without a helpful warning (I assume errors were being written to the proxy log but I didn't have access to that). As we couldn't change the proxy configuration and the code is all running on the same server I was able to use the curl proxy parameter to ignore the proxy for these calls. This would not have worked if we needed to cross servers or domains.
I had to add the following to the curl_init() section of the ApiHelperClass:
//needed to ignore the proxy which drops long http requests
curl_setopt($handle, CURLOPT_PROXY, false);
For questions on Zurmo itself, please register and use the forums at http://zurmo.org/forums. If you need assistance on getting it installed with OS/X, send me an email and I'll try and assist you.
If you want local consulting for the Community Edition of Zurmo in Australia, send me an email. Depending on the requirement and timeframes I may be able to help. For the commercial version you should contact the folks at Gravity4 directly.