Mocca Calendar Application

Last modified by Thomas Mortagne on 2024/02/05 00:12

calendarA Calendar Application supporting several Calendars
Developed by

Denis Gotthans, Clemens Robbenhaar, Thomas Mortagne

Active Installs208
0 Votes
LicenseGNU Lesser General Public License 2.1

Installable with the Extension Manager


You can also try the Pro version: Calendar Application (Pro).

Combines the Calendar Application application with the FullCalendar Application to provide an "out of the box" usable calendar within XWiki with the slick UI from the "FullCalendar" jQuery plugin.


After installing the extension you should have a "Calendar" in the applications panel; alternatively you can reach the application at https://<server>/xwiki/bin/view/MoccaCalendar/

The application maintains several calendars. One default calendar is preinstalled.
The start page displays all events of all calendars in the current month.
Users can either add new events (which end up in the default calendar, unless specified differently) or new calendars.

Overview page

Calendars have a description and color. All events of a given calendar are displayed in the color of it's calendar.
Events, beside of being colored like their corresponding calendar, also have a short name, a description, a start and an end date. Events can be "all day" events or have a defined start and end time, too. 

Display of various events on the main calendar page

Creating events

Clicking on the "Create an Event" link opens a modal dialog which allows you to give the new event a title, start and end date and time and a description. (The description only shows up in the details view). "All day" events are supported, too (currently you have to give even "all day" a dummy time for start and end date, too, which will be ignored however.)
Recurring events are not yet supported.

Dialog to create a new event

Editing events

Clicking on an event in the calendar opens the detail view of the event. In this dialog you can edit the event or delete the event (you have to confirm the delete in the dialog.)

Detail view of an existing event

Editing an existing event

Alternatively you can view the Event as a wiki page by clicking on the "View" button in the dialog; on that page you can add attachments, look at the history, etc.
You can go back to the calendar you came from via the link at the bottom, or to the main calendar overview via the link in the breadcrumbs.

An event viewed as wiki page

Managing Calendars

At the bottom of the overview page you can find a table of all existing calendars, with options to view edit or delete them, and a link to add new calendars on top of it:

List of all existing calendars

If you click on the "Create a calendar" link you will be first led to the normal "add page" dialog, which then will create a new calendar and show it to you in edit mode. You can set up the title, color (via the convenient color picker) and description. The latter is shown in the detail view of the calendar.

Editing a calendar

Recurrent Events

When you create a new event, you will see a checkbox at the bottom of the form. If you check that box, new fields will become visible to define the recurrence information of the event:

Create a recurrent event

At the moment you can choose between daily, on workdays (except Sunday), weekly, biweekly, monthly, quarterly and yearly events.
You can leave the "first occurrence" field empty; it will by default set to the start date of the event.
If you leave the "last occurrence" field empty, the event will repeat indefinitely. To avoid an infinite loop for "upcoming events" in the "agenda" view of the calendar, only the first 100 repetitions are shown in that view.

Modify one instance of a recurrent event

If you edit one instance of a recurrent event, it will initially show you the entries for the current instance and lets you modify them. If you want to edit the settings for all instances, you can click on the "all instances" radio button at the top of the dialog.

Dialog to delete a recurrent event

If you delete one instance of a recurrent event, you will be asked if you want to delete all instances of the event (with a red alert button), or just the current instance (click the "yes" button or press "enter").


The current implementation has several limitations:

  • recurrent events cannot be moved via drag & drop on the calendar.
  • if an instance of an event is deleted, it cannot be restored via the UI. Go to the page view of the event and either roll back to the previous version via the page history, if the deletion was the last edit for that event, or open the page in the object editor and try to find out the MoccaCalendar.Code.MoccaCalendarEventDeletionClass object with the right date and delete this object.
  • if the start date for all events is edited, any local modifications or deletions to event instances are not moved with the new event date, and will thus disappear.
  • while it has always been the case that date pickers do not open at the place of the input form if one scrolls while editing an event, this issue will now show up more often with the somewhat longer edit dialogs. (Fixed in 2.8)

iCalendar export

You can use Mocca Calendar iCal export to add iCalendar export.


If you find a bug or have a suggestion for improvement, please report it in the Issue Tracker. Please check if the issue has been reported there already.

2.8: cannot create new events; error a().toMomentFormatString() is not a function

If you get this error, please check if the page ../bin/view/Calendar/Moment exists. If it does exist, please delete it. The Extension Updater should have removed this page (which contains an older, incompatible version of the "fullcalendar" JavaScript library), but this might not have happened e.g. due to local modifications. 

Migration to 2.7 (recurrent events)

When upgrading from a version before 2.7 to a version of 2.7 and higher, the upgrade step in the extension manager might take a bit longer; also some pages have been moved, and you will be asked to delete several unused pages after the upgrade. Please really do delete these pages, or you might end up with two variants of the same UI code from both versions, which will break the UI.

If you have modified some pages like the Macro, JSONService or MoccaCalendarEventSheet, you will likely run into some conflicts when upgrading. Better save your modifications before you upgrade and overwrite with the new version, then reapply your modifications manually. Please note that most pages (including the first two examples) has been moved to a subspace MoccaCalendar.Code.

Some issues that might happen after the upgrade:

Macro "moccacalendar" not found

 This issue should no longer happen after upgrading to 2.7.1 or higher.

Because the old page defining this macro is deleted only after the new version is installed, this might cause confusion as for a short time two macros with the same name are around. After removing the old version of the macro, the new version might not be active.

There are two workarounds to get rid of this error message:

  • restart the servlet container in which XWiki is running. This will find the new version of the macro while starting up.
  • go to the page https://<server>/xwiki/bin/view/MoccaCalendar/Code/Macro and make a dummy edit to that page, like inserting a few spaces somewhere. This will make XWiki aware of the new macro definition, even if you roll back that dummy edit instantly via the history. You need to repeat this step for every subwiki where the MoccaCalendar is installed.

Some events are no longer shown in the calendars

This might happen if the migration of the events did not run to completion. (The migration needs to add a new property to all existing events so they are recognized as "non-recurrent".)

You can check if this is the case for some events by visiting the migration helper page at https://<server>/xwiki/bin/view/MoccaCalendar/Code/RecurrentEventMigration.

To re-run the migration you have two options:

  • restart the servlet container while adding a setting like to the command line. (It does not matter if you use "on" or any other text as value of the system property.) Check the server logs if they contain error messages from the migration, or end with "INFO: migrated all events on wiki [<wikiname>]" - which of course only appears if the log level is set to INFO. Add a line like
      <logger name="org.xwiki.contrib.moccacalendar" level="info"/>
    to the logback.xml file to make sure you see these messages.
  • the migration helper page also contains a button to start the migration. You can select the batch size for the migration and start the migration manually for the current wiki. The page might sometimes stop the migration even though there are still events to migrate, for reasons currently not investigated. In that case reload the page and try again, maybe even several times. For error messages keeping the migration from running you still need to read the server logs on the file system, however.

If none of these options help, please downgrade to the previous version and send a bug report.

If the migration helper page does not show any non-migrated events, then maybe some events have not been properly migrated to the "nested pages" structure. Please see the next section for remedies. 

Migration to Nested Pages  (for 2.6 and higher)

If you update this extension from a pre-2.6 version, you likely want to migrate all the calendars to become nested pages. For this you will need to run the Nested Pages Migrator again (or maybe for the first time, if you set up the wiki with a version of 7.2 or later).

In case you have placed some events in spaces different from their calendar, maybe to apply special access restrictions to them, be advised that they will afterwards be a sub page of their calendar and the access restriction from the original space will no longer apply. You might want to exclude these events from the migration, and preferably move them to a calendar of their own so they get their access restrictions back.

Update from the Extension Manager

When updating the extension the extension manager will ask you to remove the page under "MoccaCalendar.Events" (unless you have removed/renamed the pre-installed default calendar). Do not do that, but keep the calendar around. Instead you might want to remove the version installed in the new place at "MoccaCalendar.Events.WebHome" which will happen automatically when using the Nested Pages Migrator Application in the next step.

Migrate your content with the  Nested Pages Migrator

Especially if you already have used the Nested Pages Migrator there are a few things to be taken into account so rerunning does mess up your instance:

  • in the configuration section:
    • add MoccaCalendar.WebHome to the list of excluded pages
    • add MoccaiCalendar to the list of excluded spaces
    • probably disable the "Add Redirection" in the "Advanced Settings"


Then compute the plan; you will see something in "Main" wants to be migrated, too. You likely do not want that.

Expand the "Main" section, and click the "Exclude Space" button for every space listed there, unless it contains a calendar. After the plan is recomputed, continue with the next space until the "Main" space vanishes from the plan (or it only contains spaces with calendars). 

Afterwards your plan should look like this:


It is ok that the MoccaCalendar.Events.WebHome will be overwritten; this is the new place of the preinstalled "default" calendar and the migration will overwrite it with your version of the calendar. (You will not see this warning if you have removed that calendar; in that case you likely want to remove the new version of the default calendar as well after the migration step).

Press "Execute plan" and wait until the migration process finishes.

Afterwards all events should be placed under their corresponding calendars, and both calendars and events are now proper nested pages.

For MoccaCalendar Developers


The oldest supported XWiki version can be found in the root pom.xml as the version of the xwiki-commons-pom.
You can set up a bare bone instance of that version by running: mvn clean process-test-resources in the directory application-mocca-calendar-tests. Start the instance with ./target/xwiki/ or .\target\xwiki\start_xwiki.bat.

Always test changes at least against the oldest supported and the newest XWiki version. If a feature cannot be made to work in the oldest supported version, change the oldest supported version to a more recent one where that feature works.

Create a Release

Releases are created via the Contrib Release process, with some modifications:


Make sure the issue tracker has no open issues assigned to the to-be-released version - or move them to the next version.

Make sure you use a java version compatible with the oldest supported XWiki version - otherwise the integration tests might not be pleased.

Commit all changes so far and push the results.

Perform release

In the root directory:

# check you really have no local modifications and are up to date:
git push
git status
# prepare the release
mvn release:prepare -Pintegration-tests -Darguments="-Pintegration-tests -DskipTests -Dxwiki.enforcer.skip=true" -DskipTests
# now you can test the release with a local XWiki installation where
## extension.repositories=maven-local:maven:file://${sys:user.home}/.m2/repository
# set in the
# create a maintenance branch - not needed for minor releases
git branch stable-X.Y application-mocca-calendar-X.Y
# perform the actual release
mvn release:perform -Pintegration-tests -Darguments='-Pintegration-tests -DskipTests -Dgpg.passphrase=<gpg-passphrase-here>'
# push the maintenance branch to github (if created)
git push --set-upstream origin stable-X.Y

Before performing the release, check the validity of the release by installing the pending release in a fresh XWiki instance via the extension manager, "extended search" > 'org.xwiki.contrib:application-mocca-calendar-ical' + version number.


  • Sync the release on this page via the button right to "Extension imported from repository".
  • Read this page and update the descriptions, if necessary
  • Especially update the release notes; open this page in the object editor and update the "Release notes" field of the corresponding ExtensionCode.ExtensionVersionClass; at least adding the jira issues:
    {{cache id="MOCCACAL-release--X.Y.Z" timeToLive="604800"}}
    {{jira url="" style="list" source="jql"}}
    project = MOCCACAL and fixVersion = "X.Y.Z"
    Of course feel free to add any other things worth noting.
  • Mark the version as released in jira and create the next version (if not already done).

Prerequisites & Installation Instructions

We recommend using the Extension Manager to install this extension (Make sure that the text "Installable with the Extension Manager" is displayed at the top right location on this page to know if this extension can be installed with the Extension Manager). Note that installing Extensions when being offline is currently not supported and you'd need to use some complex manual method.

You can also use the following manual method, which is useful if this extension cannot be installed with the Extension Manager or if you're using an old version of XWiki that doesn't have the Extension Manager:

  1. Log in the wiki with a user having Administration rights
  2. Go to the Administration page and select the Import category
  3. Follow the on-screen instructions to upload the downloaded XAR
  4. Click on the uploaded XAR and follow the instructions
  5. You'll also need to install all dependent Extensions that are not already installed in your wiki

Release Notes


The following translations have been updated with this release:



The following translations have been updated with this release:


The following translations have been updated with this release:



Maintenance release to be up to date with XWiki 14.x and Full Calendar 2.2.10.


Maintenance release to be up to date with XWiki 13.x and Full Calendar 2.2.x.

The following translations have been updated with this release:


The following translations have been updated with this release:


The following translations have been updated with this release:


This release fixes an important issue that e.g. kept users from deleting their own events in the "event modal" view.


The following translation has been updated with this release:


This release fixes a few issues that should make the update experience to "recurrent events" much smoother.


This release introduces the feature of "recurrent events".

Please be sure to read the migration notes if you update, because the update needs at least one manual step to fix up the macro "moccacalendar" that seems to be missing after the update. 


This is mainly a "translation update" release.

The following translations have been updated with this release:

Nevertheless, a few issues have been resolved with this release either:


As this version is the first one to support nested pages, you might want to use the Nested Pages Migrator if you upgrade from an older version.








added translations for lv and sk



added dependency missing from 2.4





fixed bungled release number in 2.2.1






Dependencies for this extension (org.xwiki.contrib:application-mocca-calendar-ui 2.9.4):

Get Connected