Does anybody know if it's possible to add a calendar as an attendee?
Here's the scenario.
User has multiple calendars, a calendar object (i.e. event) is added to calendar 1, but we also want it to show on calendar 2. Equally they might add an event to calendar 1, but only want to share it with calendar 3.
Events will always be on calendar 1, but they will usually need to be shared with 1 other calendar.
And then we want to be able to query calendar 2..n and only see the things to which they are invited.
The difficulty being that all these calendars belong to a single user principle.
All the docs and examples I've seen have an email address for the attendee. Is it possible to use the calendar address or something?
FWIW I'm using SabreDav on PHP.
Related
I am trying to programmatically create icalendar events by creating an ICS file and sending them via email to the attendees. I want to be able to create a recurring event, which works fine.
Now I also want to be able to update these events. If I try to update a single occurrence from the whole event series using UID, RECURRENCE-ID and SEQUENCE, it again gets updated fine.
But I am unable to figure a way out to update this and future events. I tried using VALUE=THISANDFUTURE with RECURRENCE-ID but only the event pointed to by RECURRENCE-ID gets updated. I also do not want to go the "delete the series and create two new ones" way because to do that I'd have to send cancellation emails to the ATTENDEES first and then new events' invites.
I came across the property RELATED-TO which might be relevant here but am unable to understand what it does and how to use it to get the result that I want. Can anyone provide me some direction?
Usage according to the RFC5545 specification ( https://datatracker.ietf.org/doc/html/rfc5545#section-3.2.13) is with RANGE, not VALUE
RECURRENCE-ID;RANGE=THISANDFUTURE:19980401T133000Z
Is Microsoft Graph API calendarView limited to a single month? How can I get all events? Is there some implicit pagination?
I'm first checking the JSON output of events between 2017-01-01 and 2018-12-30:
https://graph.microsoft.com/v1.0/me/calendar/calendarView?startDateTime=2017-01-01T00:00:00.0000000&endDateTime=2018-12-30T00:00:00.0000000
and list the dates
jq '.value[] .start .dateTime'
"2017-11-22T13:30:00.0000000"
"2017-11-23T14:00:00.0000000"
"2017-11-24T14:00:00.0000000"
"2017-11-27T10:00:00.0000000"
"2017-11-27T10:00:00.0000000"
"2017-11-27T11:00:00.0000000"
"2017-11-27T14:30:00.0000000"
"2017-11-28T09:00:00.0000000"
"2017-11-29T09:00:00.0000000"
"2017-11-29T14:00:00.0000000"
No calendar events from 12th month of 2017 for example! But I have them!
And then do a similar call for by narrowing the left end of dates range between 2017-12-01 and 2018-12-30, and now I get:
"2017-12-01T12:30:00.0000000"
"2017-12-01T14:00:00.0000000"
"2017-12-04T08:30:00.0000000"
"2017-12-04T12:00:00.0000000"
"2017-12-06T09:00:00.0000000"
"2017-12-06T10:00:00.0000000"
"2017-12-07T13:00:00.0000000"
"2017-12-13T09:00:00.0000000"
"2017-12-13T09:00:00.0000000"
"2017-12-13T13:00:00.0000000"
I'm confused by List calendarView and List events documentation.
How can I get all of the events in my calendar, the ones that I can clearly see to exist in November and December of 2017, as well as in January, and February of 2018?
Do I have to call this API repeatedly for every month in a year? (I hope there's a single call I can make to get all the events in a year, or two years, after which I can filter, process, etc.)
Difference between list events and list calendarView
When you list events (GET /me/events), you get a non-expanded list of items in the calendar. What that means is that if you have recurring events, you would only get the series master in your results. It would be up to you to read the recurrence pattern and expand the event.
When you list a calendar view (GET /me/calendarview?...), you get an expanded list of items. That means the server does the work to expand any recurring events and build a "view" of your calendar. So in this case if you have a recurring event, instead of getting the series master, you would get one or more occurrences of the series (depending on how many times it repeats in your view window). Because of this expansion work, you must provide a start and end time to put some sort of bounds on the call.
Another way of looking at it is the calendar view is more like what you're used to seeing when you view your calendar in Outlook.
So where's all my events?
I'm not aware of any specific limitation on the size of the window for a calendar view. (Not saying there isn't one, I'm just not aware of it). The more likely explanation is that you're not seeing all the events you expect because all API requests that return collections do have built-in paging. By default, you're limited to 10 items in the response. You should also see in your response an #odata.nextLink, which is the URL you can use to request the next page of results (again, 10 being the default page size). You can increase your page size by using the $top parameter, up to a maximum of 1000 (IIRC).
GET /me/calendar/calendarView?startDateTime=2017-01-01T00:00:00.0000000
&endDateTime=2018-12-30T00:00:00.0000000&$top=1000
I'm building a site for a summer camp using Drupal 7, and I'd like for it to allow parents to register their kid(s) for week(s) at camp and then pay for it.
Creating an "event" for purchase in Ubercart, and using the pay per node module is the best way i can find to make this happen, a la the great tutorial series done by Pete Yaworski. Unfortunately, this means that parents have to fill out the fields for each week of camp purchased for each kid making this a multi-step process as many parents have 2 or more kids that they register for 2 or more weeks of camp.
I tried thinking about this in in terms of the Organic Groups and Profile 2 modules, where parents can create "kids" as nodes or sub-users, and I also tried the Field Attributes module to incorporate fields as product options, but I failed to come up with any useful implementation.
I think the best option is to allow Parents enter information about their kids (ie. name, age), possibly by entering each kid as a node. Ultimately, I'd like them to be able to purchase individual camp weeks and check a checkbox to indicate which kids are associated with each week, and have it all go into one cart for one purchase.
I'm just brainstorming at this point because I've just hit upon a lot of dead ends. Thanks for your help!
Well, it's been a while and i thought i might share what i've learned. Just to note, i switched to Drupal Commerce, which i think is much better equipped to handle this type of business.
The site is more focused on one user registering multiple people (kids) for multiple events, so having to fill out a registration form for each person specifically for each event that person is being registered for is a bit annoying, and bad UX. Instead, i allow registered users to complete a form (name, address, contact, etc..). Upon completion of the form, they are given a new user role via Rules which allow them to create content of type "kid". This is really sort of an extra step for the specific summer camp site; we expect the kids to have the same address/phone/etc.. as their parents. The parents can create "kid" nodes filling in field like "allergies" "health concerns" "age" and "name". These nodes are passed through a View with a Contextual Filter based on the User viewing the View; the View shows only content created by the User, and only shows field "name". This is then given as an entity reference to a Line Item Type using a checkbox/radio widget. Events can then be created as Products and given that Line Item Type. When a User is viewing the products he/she will see the "Name"s of the "Kids" they have created as choice next to the "add to cart" button. Conveniently, everything in Drupal Commerce from Products to Orders can be interpreted though views, so as long as the "kid" is attached as a line item, it's easy to organize the info about who registered who for what event when, and retrieve further details about all of that.
So, Parents are able to register with the site, fill out basic information, enter in information for each kid they want to register, then select which kid they want to register for which event. More useful, on the backend, the admin can see which kids are registered for which event, as well as who their parents are, how to contact them, and any important info specific to that kid.
Hope this helps anyone doing a similar project. :-)
I am learning on how to access google calendar API for creating and accessing events. I am trying to understand API using OAuth 2.0 Playground. I am struggling on what to set for calendarid and eventid
https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events/{eventId}
Can any one guide me.
Regards,
Sureshkumar Menon
calendarId is the email address of your calendar. If you're just using your own, then use the string "primary".
eventId is the ID of the event that you want to modify. If you don't have an event, you should either create one with the 'insert' call, which will include an eventId parameter that you can store and use to modify it later, or use the 'list' call to get a list of events.
I was facing similar issue and got solution to find the calendar event id:
->Go to the event debugging URL at https://www.google.com/calendar/render?gsessionid=OK&eventdeb=1.
->Double click to view the affected event.
->Select the drop down menu 'More Actions'.
->Click on the 'Troubleshooting Info'.
->Copy the text that appears and paste it in your reply to support.
You can refer the below link which gives details with screen shot
http://googleappstroubleshootinghelp.blogspot.in/2012/09/how-to-find-troubleshooting-information.html
However i am still looking for a solution to get event ids dynamically.
i just discover that the list request which retrieves all the event list contains the correct event id. In my web app, i am using fullcalendar, each time i click a event for updated or deleting, the eventclicked method gives a false event id. so, i guess we will have to give a true event id and false event id map stored in our local app. this can be a work around. but it's liking eating a fly.
I want to show events from an external source in the Kronolith calendar views. I don't want to do this by exporting the events to iCal and then showing them as an external calendar. The events are grouped in multiple calendars, the user should be able to disable/enable these calendars.
You can do this by implementing the listTimeObjects and listTimeObjectCategories API calls. Nag (task list) and Whups (ticket tracking) do it this way. If you are using the Git version, you can use TimeObjects, which wraps everything up in a nice class.
Kronolith calls these functions in initialize() (when filling $all_external_calendars) and listEvents(). It searches all APIs for this function, so you can register it with your own prefix.
timeObject is a generic name for "things that can be shown on a calendar", like events, task due dates, ... A timeObjectCategory is a group of timeObjects, which can be enabled or disabled in a group by the user. (In the default layout: using the panel in the upper-right corner of the calendar view, "Calendars".)
Your implementation for listTimeObjectCategories should return an array, with a category id as the key, and the user-visible name as the value. The category id's are also shown at the bottom of the calendar, and the user can define colors for them.
listTimeObjects is called with the currently selected categories (an array of id's), and a start and end date. These dates might already be Horde_Date objects (to be sure, convert them again: $start = new Horde_Date($start)).
You should return an array of timeObjects that belong to these categories and fall in the specified time range. The keys are event id's, the values are arrays with values for the following keys:
id
title
description
start (Horde_Date or timestamp)
end (Horde_Date or timestamp)
category (Category id)
params
If you register the show API call, this will be used for creating the link to the timeObject detail.