dpcalendar-apiIn a previous blog post, we discussed the increasing relevance of Application Programming Interfaces (APIs) in Web programming, and the reliance of many applications (both traditional as well as Web) on various APIs. We also pointed out that our flagship extension, DPCalendar, allows for the use (and integration) of many different calendars through Joomla extensions. This blog post breaks down the details of how you can integrate your own calendaring system(s) into DPCalendar.

Specifically, DPCalendar supports the integration of various calendar APIs by implementing an API to which Joomla plugins (a subset of Joomla extensions) can be written. In Joomla, a plugin is an extension that is executed when a particular action (event) is taken (triggered). In the case of DPCalendar, loading the calendar view, for example, will signal an event (or possibly a series of events), which will cause plugins to execute. The act of creating, deleting, viewing or saving individual calendar items also signal events, which your external calendar plugins should respond to appropriately.

The DPCalendar API

The list of events which DPCalendar recognises, the parameters they take, and the input they expect (the return values from your plugin) form the basis of the DPCalendar API. In addition, as part of the installation process, we also include the DPCalendarPlugin class, which is a collection of functions that allow you to work with DPCalendar more easily – it, too, can be considered part of the API. And of course, the plugin also has to work with the Joomla API, as well as the API of whichever calendar system being supported by the plugin.

As with all APIs, neither DPCalendar, nor the external calendar plugin with which it is communicating, has to know how data is manipulated internally or how calendaring functions are implemented by the other side; merely that both sides are following the API standards. DPCalendar happens to use the industry-standard iCalendar format to import and export calendar data, so that’s what your plugin should support when working with DPCalendar.

Write Your Own Plugin!

Digital Peak has written a number of plugins for popular calendaring systems, such as Microsoft’s Outlook/Exchange, Google Calendar, Apple’s Calendar, Facebook, CalDAV, and so on. There’s nothing stopping you from writing your own plugin (for instance, to support the Cozi family calendar system). But first, you have to complete the following checklist:

  1. Understand how Joomla extensions (especially plugins) work, and how to create them. The Joomla Documentation website has a section on how to create a plugin for Joomla.

  2. Understand the DPCalendar API. The documentation section of our website has a page dedicated to DPCalendar developers, which explains in detail the various Events that your plugin should respond to, as well as an example plugin to give you an idea of how to write your own (also available on GitHub).

  3. Understand your external calendaring system’s API (if any). Knowing how the external APIs work is key to making your plugin – if you can’t interface with the external calendar, obviously your plugin will be useless.

Another example is our popular attachment extensions which allows with three lines of code to integrate drag and drop/copy paste attachment support for your own extension. To do that you have to write a Joomla plugin as well:

 * @package    DPAttachments
 * @author     Digital Peak http://www.digital-peak.com
 * @copyright  Copyright (C) 2012 - 2014 Digital Peak. All rights reserved.
 * @license    http://www.gnu.org/licenses/gpl.html GNU/GPL
defined('_JEXEC') or die();

JLoader::import('components.com_dpattachments.libraries.dpattachments.core', JPATH_ADMINISTRATOR);

// If the component is not installed we fail here and no error is thrown
if (! class_exists('DPAttachmentsCore'))

class PlgContentDpattachments extends JPlugin

	public function onContentAfterDisplay ($context, $item, $params)
		if (! isset($item->id))
			return '';

		$catIds = $this->params->get('cat-ids');
		if (isset($item->catid) && ! empty($catIds) && ! in_array($item->catid, $catIds))
			return '';

		$options = new JRegistry();
		$options->set('render.columns', $this->params->get('column_count', 2));
		return DPAttachmentsCore::render($context, (int) $item->id, $options);

	public function onContentAfterDelete ($context, $item)
		return DPAttachmentsCore::delete($context, (int) $item->id);


pro-templateThe major decision you have to make before launching a Joomla website is how the design of the web site should be. Joomla's template framework allows you to have one neat design across the whole site. Creating such a template is not so easy, especially if you don't have PHP skills. That's why it sounds reasonable to use professional Joomla Templates from trusted template companies like TemplateMonster. This company has been offering Joomla templates since 2007.

Now, let's try to understand why more and more people show interest in using professional Joomla templates instead of making their own or downloading free ones.

What are the Advantages of Using Joomla Templates?


You may like it or not, but a Joomla Template is definitely cheaper than ordering a custom one. And even if you will have to hire a web designer to edit the template for you, it's still not as expensive as if you would have to pay for a custom one.

Multiple Design Options

There are thousands of Joomla templates on the net, both free and premium ones, so you can always find the design to your liking. But please do not only pay attention to the layout of the template, but also its options to adapt to your site. Especially how it handles visitors which browse your site from a tablet or smartphone.

Saving Time and Efforts

With a Joomla template you save a lot of time because you don't need to actually design a website. You should simply replace the default texts and images with your own ones and you're ready to go.

By the way, this feature makes Joomla templates quite popular with web designers who specialize in building Joomla websites. After all, it's much faster to edit a template and turn it into an original website than build a template from scratch.

Free Customer Support

The most trusted template companies provide free support for their customers. For example, TemplateMonster can be reached in a number of ways: by phone, live chat or you can submit a ticket by selecting the appropriate department. This ensures that all your questions will be answered promptly.

Additional Bonuses

It's quite often that Joomla templates come with extra bonuses. For example you also get stock photos included into the template. They provide also a complete Joomla installer to set up their demo site on your own Joomla server.

Works with 3rd party extension

If you use a professional Joomla template than you can be sure that they fit with the big extension companies like Digital Peak. For us it is important that our extensions do work smoothly together with templates from the major template companies like Templatemonster. For example DPCalendar fits perfectly into the design of Templatemonster latest template "Ecofriendly Industrial Services Joomla Template".


Of course, it's your choice how to build your Joomla website, but we hope today's article will give you a quick introduction to help you make the right decision.

And if you want to get a professional Joomla Template and you want to get it at a special price, please go to TemplateMonster.com and save 30% with code 'Digital-Peak'.

Please note: the discount code will be only valid for a week, and will expire on Thursday, September 4.

dp api

A few years ago, a lot of interest was generated around the idea of Service Oriented Architecture (SOA), when it came to IT infrastructure within organisations. The underlying premise behind SOA was that individual components or subsystems within an IT infrastructure could essentially be black boxes; exposing only the services necessary for the components to do their functions, while the details of implementation of those services are hidden from other components, and in fact, do not need to be known. SOA promised that it would simplify the deployment of IT systems, because they would not be so interdependent on each other (i.e. as long as the service ‘contract’ was honored, it didn’t matter what the implementation details were).

The concept of a service oriented architecture (SOA)

The concepts behind SOA are not new. Procedural and object-oriented programmers would be instantly familiar with the notion of separating the interface (declaration) of a procedure or function from its implementation (code). In particular, software platforms (software on which other software is designed for and run on, e.g. operating systems) – including the Joomla! CMS – provide a series of services and system calls for the programs that run on top of them. Taken together, these services and calls are collectively called an Application Programming Interface (API).

The role of an API

As with SOA, the value of an API – of all APIs – is that it provides a standardized way of communicating between application and platform that, in theory at least, does not change between successive versions of the platform. Joomla’s APIs, for example, stay the same within the same major version release (version 3.1 APIs would be the same as that of 3.5). One of the most famous APIs, the Win32 API, has been around since 1993. Applications that were correctly written for the Win32 API back in 1993 would still run properly on Windows 8.1 in 2014, more than 21 years after it had been introduced. In those 21 years, the underlying platform (Windows) has changed almost beyond all recognition – but because the API was still fully honoured and supported, the application does not need to care about how the platform implemented the Win32 API, only that it did so correctly.

In the days of Web 2.0, which is all about software-as-a-service, and cloud architectures, APIs play an even more dominant role. All Web services (e.g. Twitter, Dropbox, Google Maps) that allow third-party software to have access to them do so through public APIs, which both traditional and Web programmers can then use in their own applications to work with these cloud services. The Android OS exposes an API for programmers’ convenience, as does iOS. CMSes like Joomla also expose APIs so that extension developers (including Digital Peak) can extend the functionality of the CMSes in a fully-compatible way with all other extensions. In the case of our extensions, we even work with multiple APIs (Joomla’s and Google’s, mostly).

The point of APIs is that as long as the interface/‘contract’ is honored, how it’s implemented is not an issue. This is both a strength and a weakness; while an API is supported by the Web service which created it, programmers don’t have to worry about whether their application will work or not. If you instead relied on some undocumented idiosyncrasy of the Web service to make your application work faster or ‘better’, then if the Web service changed the way it worked, your application may fail miserably. Unfortunately, the weakness of an API is that if the API itself is updated, changed or dropped, then existing applications that rely on the API will no longer work, and new versions written to support the new API. This is why, when Google kills support for v1 of its Google Calendar API, our now-deprecated and soon-to-be obsolete GCalendar will also stop working.

API at Digital Peak

So how do Digital Peak’s extensions work with APIs? Well, our extensions communicate with the rest of Joomla through Joomla’s APIs. This way, we can request and present data in exactly the same way as every other extension (basically we use the MVC layer of Joomla). We are able to request and present data from web services like Google, Facebook, MS Exchange by using their public APIs. In fact, given that (for example) DPCalendar allows so many other plugins to be used, we’re working with a vast number of APIs. All of this work happens on the Joomla server behind the scenes, as our extensions initiate sessions with the various other Web services involved. None of it is actually taking place on the website visitor’s browser, which only displays the information Joomla delivers to it after all the hard work is done. That's why all of our plugins support a caching mechanism to temporary store the data of the external services on your Joomla site to speed up your page load.

joomla-life-cycleA software development lifecycle (SDLC) was once conceptually very simple. You bought a licence for a particular software version, which usually entitled you to support and some bug fixes, and when the next major version came out, you bought another licence for that one. It was very simple for the software makers as well; once a major version was released, work could ramp up full speed for the next one. Ongoing support for any version was likely to be discontinued one or two version releases later.

Today, such is no longer the case. The Internet has made users accustomed to the idea of free updates to software available via download. Support for any particular version of software has become impossibly long (Windows XP takes the crown for the longest continually-supported software at 14 years). As a result of these and other factors, various different SDLC models have arisen; some of which are traditional, others more suited to agile paradigms, and yet others that work well in the “free software” world. All the above now provides you sufficient background to explain why Joomla! is switching from its current SDLC model to a new one.

Because Joomla is an FOSS project, it is impossible for its support to be as comprehensive as that of Microsoft’s, for instance (at one stage, Microsoft was supporting 4 different OS releases). Hence, it is important that the SDLC chosen matches the needs of the Joomla project. It is equally important that everyone in the ecosystem is aware of the major ramifications of this new release strategy (using the [major].[minor].[patch] version numbering system):

  1. No more specific Long Term Support (LTS) versions
    Previously, Joomla’s X.5 (i.e. 1.5, 2.5) releases were classified as LTS releases, which meant that they would be supported longer than any other minor releases (e.g. 3.1, 3.2, 3.4), and will continue to be supported even after newer minor versions have been released. There is no longer any such guarantee; the last point version will be the LTS version. All major releases (v1, v2, v3 etc.) will have 2 years in the active development phase, and a minimum of 2 years in the support phase after that. If a new minor version is released during the support phase, it resets the 2-year support phase clock. Only the latest minor release within each major version will be supported

  1. Faster and more regular minor releases
    Adding features to Joomla could be time-consuming, depending on whether you got it in before the feature freeze cut-off. With less time passing between each minor release, this means developers no longer need to be as frantic as before, giving more time to regression test their features before inclusion in a minor release.

  1. Major releases will break compatibility with previous releases
    While it isn’t guaranteed to happen all the time, major releases are the only releases where backward compatibility is intentionally discarded. This means that each time you upgrade Joomla (e.g. from version 3.x to version 4.x), be prepared for things to break.

For regular users of Joomla, what does this all mean? Generally speaking, it means that in order to ensure that you have a smooth updating and upgrading experience, you should always update to the latest minor release of your major version, and that you should upgrade Joomla to the next major version every 2 years or so.


The very versatility of computers makes it next to impossible to create programs that are guaranteed to work under all circumstances. Just the Joomla! CMS itself, for instance, requires a software stack that has at least an OS, a Web server, an SQL server and PHP. Each ‘layer’ of the stack has 3-4 different alternatives, and each alternative comes in many different versions, each version being just different enough from the others that there is no guarantee that if Joomla runs on one specific combination of the stack, Joomla will run on all combinations of that particular stack. (Incidentally, successive Joomla versions do throw away the ability to run on older versions of the stack components).

When you add the bewildering number of platforms to code for, interference due to other software, and user ignorance, the costs of providing technical support to help every user soon balloons. In a 2000 report, the Association of Software Professionals stated that the average cost of support was 8% of revenues, and in some cases were as high as 20%, especially for smaller software companies. Of course, larger companies gain from economies of scale. But if even a giant like Microsoft does not provide ongoing phone or email support for its users without a payment contract, then one surely cannot expect Joomla developers to do the same.

A Difficult Decision

So much for support costs for traditional software vendors, who can build them into their pricing models. For vendors of free and open source software (FOSS), which – like Joomla – is usually downloadable at zero-cost, providing the same level of support to everyone can be prohibitive, if not downright impossible. Alas, TANSTAAFL. Certainly, we at Digital Peak have found it so. Because you don’t pay for the software itself, FOSS vendors are essentially paring down your TCO to support costs. This is as true for Red Hat as it is for Joomla developers like us.

Technical support also incurs opportunity costs. The simplest of all free support methods are user forums – but for every hour we spend on the forums answering questions that likely have been answered before, we lose an hour of programming, designing new features, testing or bug fixing – things which our paying subscribers have every right to expect from us. The inexorable laws of economics at work (sigh).

Because of this, we have decided to reprioritise our scarce human resources (all four of us!) towards quality programming and not free technical support. It was not a simple thing to arrive at this choice; but if we were to be true to our paying clients, we had to put their best interests first. Also, better to have good software that doesn’t require much support than mediocre software that does.

What is our support?

We have a case management tool where every subscriber can file bugs, rise questions or or ask for a new feature for our extensions. Every case will have a staff member assigned, which is responsible to solve that case. The status of the case reflects the progress of it. Means the customer does always know in which state of the processing the case is. Additionally, our issues are organized per release in the same case management tool, to have a transparent software development cycle for our customers. All solved cases which are identified bugs or new implemented features for a shipped release are categorized.

Support Alternatives

Does this mean that unless you pay us, you will get no help? By no means! We are in the process of revamping our online documentation on all of our Joomla extensions, as well as providing instructional videos on YouTube. When we’re done, you will have access to a knowledge base that will take care of maybe 80% of all the issues you probably will face when using our extensions.

You will also get top-notch support from the Stack Exchange forums (yes, we’re here), not to mention the Joomla.org forums (we’re here too). In a sense, we are outsourcing our forum support to these venues, which are far, far more popular and give you access to vastly greater resources than before. These will solve around 99% of the other problems you might encounter outside of our knowledgebase.

Of course, we remain contactable for issues such as bug reports and feature requests. Making our Joomla extensions more usable and more secure is always high on our list of priorities. But what happens if you need more than that? Well, purchase a subscription. Not only will you get personal support, but you will also be supporting the FOSS business model.

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.