I’m glad you asked about this @FarmTech ! I actually looked into the feasibility of this for farmOS 2.x a couple weeks ago. I’ve been meaning to share what I found so I might use this issue to do so
Basically there are two options: the iCal calendar format, and the CalDav calendar/server protocol. iCal is the simpler of the two & can save calendar events to a .ics
file, while CalDav (a subset of WebDav) has many more features (like username/pass authentication) but requires that a server is running in order to retrieve data.
TLDR; I think iCal is likely the best (and simplest) bet for farmOS! If I have time I’m hoping to implement this in a custom module before Spring because I’d love to sync my garden tasks to my calendar
farmOS iCal:
I found the Drupal views_ical module and tested it with the development version of farmOS 2.x (looking again I see that there is a version of this module for Dupal 7, too). The configuration was pretty cumbersome (poorly documented & lots of “gotchas”), but eventually I got it to work!
I was able to create “Views” of farmOS logs in an iCal Feeds format. Visiting the link allows you to download a calendar.ics
file and import into you calendar app, OR use the same link as a “Calendar subscription” in most calendar apps. I tested both of these options with local calendars apps on my computer (macOS Calendar and Thunderbird). I couldn’t test the subscription with Google Calendar since my farmOS serer wasn’t running on a public domain (just on my computer), but the import worked, so I’m confident the subscription would work too!
Each event can have a link to the log, include notes, flags, etc. There’s really a lot that is possible. I just found that the Views setup was quite complicated. I think this could be simplified by creating a feeds/export system that is dedicated to farmOS Logs.
The major complication/limitation with the calendar subscription option is data privacy (this has been mentioned before, perhaps on this forum or elsewhere). This requires that the farmOS server have a publicly accessible URL that the calendar app can subscribe too. As a result, this means that a subset of the farmOS logs + log metadata would become publicly accessible. A couple options around this are using randomly generated URLs OR require private keys to access well-known calendar URLs. Such URLs might looks like: /calendars/{secret_id}
or /calendars/logs/harvests?secret={secret_id}
. Changing the secret values would require a change in all subscribed calendar apps.
BUT the ability to manually download an .ics
file & manually import into your calendar app wouldn’t have this concern! Files could be generated & downloaded when you are logged into farmOS, no URL would have to be public. It would just become a chore to do this on a regular basis, that’s what nice about the subscription
farmOS CalDav:
Like I said above, CalDav can have more features (not only events, but also tasks + contacts) and can also require username + password Authentication since it runs on a server. This is basically what’s used to add a Gmail calendar to your phone or computer calendar app.
I looked into this option some too - since farmOS is running on a server, it should be possible as well. The sabre/dav library is probably the best bet here. I was actually able to create a module that provided a sabre/dav server within farmOS. The library is actually pretty great; it’s designed for applications that want to provide a WebDav server connected to their specific data model - exactly the missing link for providing farmOS Logs as Calendar events!
Getting this to work is fairly tricky… this laravel-sabre repo was a good reference. It does something similar to what we would need, essentially instantiating the calendar server on EACH request, provide “events” (logs) to the server, build a response, and go back to sleep… it’s possible, but maybe not ideal. I also see it being more difficult to create calendars that only display certain types of logs.
What would really make WebDav worthwhile is the Authentication. Because sabre/dav allows custom Authentication Backends I think it might be possible to connect the farmOS/Drupal Authentication to the caldav server but I didn’t get far enough to test this out. It also raises a bunch of other questions like permissions (who has access to calendars), changing passwords, etc…
So that said…
I think iCal is probably the easiest calendar format to add to farmOS. But I wasn’t satisfied with views_ical. Since farmOS really only needs to export Logs as events (is there anything else??) I don’t think we need the Views integration, it’s just too robust. Creating iCal feeds of Logs would be pretty simple by itself. I’d love to see a dedicated UI where users could create “Calendars” and specify which logs are included. Some ideas:
- All logs
- Only logs of certain type(s): only activity or harvest logs, etc
- Only logs with certain flag(s) or categories
- Only logs happening in certain area(s) or pertaining to certain asset(s)
- Only logs in certain plans
I think that is all possible!! Each “Calendar” could have it’s own URL and/or secret key.
*paul121 ends brain dump