I thought I would say a couple of words about the open source project that I have been working on recently, IceMarkt. I’m not too happy with the name, I just wanted a unique name! A friend of mine recently mentioned that for marketing there was not a open source platform available, thus I decided why not try and start one. First things first, it would have to be able to upload and manage contacts. Secondly it must be able to email those contacts. And thirdly, the email content must be manageable. With this is mind, I created a CRUD for mail recipients and would send them all an email sent with Swift Mailer. The emails that were sent were a twig template. Because it was a standard twig file, this didn’t seem very usable for an end user. It was for this reason I decided to store the templates in a new table and then quickly add ckeditor to the page to make it more user friendly. At this point I realised that the end user would have to specify what the email profile would be. i.e. who should the email say it is from and what are the reply to details. A quick another CRUD was created and Doctrine managed the one-to-many relation for me. (An email profile can be used on multiple templates, further to this, every email template must have a profile). Finally, to make sure that this wouldn’t be used for malicious spamming, I added a public facing bundle just so that I could provide and url for a user to unsubscribe from the mailing list. After all this worked end-to-end, I did my initial commit along with the Vagrant and puppet script I was using for my environment. (Yes, I cheated, I used puphpet.com !) With everything working, I started on the unit tests. Nothing worse than low code coverage from your tests! Once the unit tests were done, this allowed me to optimise IceMarkt an check that I wasen’t breaking it by accident! The biggest optimisation was to send the emails in batches so that if you had a very large contact list, the page wouldn’t time out. Now that this is done, I am refactoring the controllers so that doctrine is injected so that I can write unit tests instead of functional tests for my controllers. There are many things still left to do and realistically I just did this project because I want to play with vagrant, puppet and doctrine2 outside of industry. And it never hurts to add more to your portfolio. I am happy for anyone to volunteer and add to the project however I won’t merge anything in that breaks a unit test, doesn’t pass with PHPCodeSniffer set to PSR-2 or jslint errors when using the jslint config in the root directory! Features that still need implementing are:
- Tracking – at the moment I’m relying on the user including google tracking codes in the markup of their email templates.
- Custom fields for recipients – As anyone that uses IceMarkt will most likely want to store different types of information about a recipient custom fields seems appropriate.
- Filter recipients for sending – Once custom fields are done it would be nice to query the recipients the receive the marketing so that it is no longer blind marketing! i.e. Only send to recipients where custom field ‘gender’ is ‘male’.
- Authentication – Currently there is no authentication so anyone could add/edit/delete recipients, templates and profiles. I need to create a table of users and have a way to manage their roles.
- Turn of mapping with NFS – as the VagrantFile is using NFS for the drive mapping, the VM will not currently work in windows.
IceMarkt can be found on github: https://github.com/irvingswiftj/iceMarkt