Exemplo n.º 1
0
        public HttpResponseMessage Create(TimeBlockCreateRequest createRequest)
        {
            if (createRequest == null)
            {
                ModelState.AddModelError("", "No data supplied!");
            }

            if (!ModelState.IsValid)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }

            int UserId = User.Identity.GetId().Value;

            createRequest.UserId = UserId;
            int newId = calendarService.CreateTimeBlock(createRequest);

            Task.Run(() =>
            {
                UserConnectedCalendars userCalendar = exCalHelperService.CheckConnectedCalendars(UserId);
                if (userCalendar.hasGoogle)
                {
                    googleCalendarService.CreateEvent(UserId, newId, createRequest);
                }
                if (userCalendar.hasMicrosoft)
                {
                    msCalService.CreateEvent(UserId, newId, createRequest);
                }
            });

            return(Request.CreateResponse(HttpStatusCode.Created, new ItemResponse <int> {
                Item = newId
            }));
        }
        public void CreateEvent(int UserId, int LocalId, TimeBlockCreateRequest NewEvent)
        {
            string CalendarApi = "https://www.googleapis.com/calendar/v3/calendars/primary/events?sendNotifications=true&access_token=";
            string AccessToken = oAuthService.GetGoogleAccessToken(UserId);
            string gapiRespObject;

            if (AccessToken != null)
            {
                string         gStartTime    = NewEvent.StartDate + "T" + NewEvent.StartTime + ":00";
                string         gEndTime      = NewEvent.EndDate + "T" + NewEvent.EndTime + ":00";
                HttpWebRequest createRequest = (HttpWebRequest)WebRequest.Create(CalendarApi + AccessToken);
                createRequest.Method      = "POST";
                createRequest.ContentType = "application/json";

                // set bg color
                int categoryId = 2;
                if (NewEvent.ActivityCategory.HasValue)
                {
                    categoryId = NewEvent.ActivityCategory.Value;
                }
                string bgColor = exCalHelperService.GetGoogleColor(categoryId);

                // timezone failsafe logic
                string userTimezone = "America/Los_Angeles";
                if (NewEvent.TimeZone != null)
                {
                    userTimezone = NewEvent.TimeZone;
                }

                // placeholders for the eventual start & end fields
                object startField;
                object endField;
                // regular events
                var startDateTime = new { dateTime = gStartTime, timeZone = userTimezone };
                var endDateTime   = new { dateTime = gEndTime, timeZone = userTimezone };
                // all day events
                var startDate = new { date = NewEvent.StartDate };
                var endDate   = new { date = NewEvent.EndDate };
                // select one
                if (NewEvent.AllDay)
                {
                    startField = startDate; endField = endDate;
                }
                else
                {
                    startField = startDateTime; endField = endDateTime;
                }

                List <string> validEmails = exCalHelperService.ReturnValidEmails(NewEvent.GuestEmail);

                string json = "";
                if (validEmails.Count != 0)
                {
                    List <GoogleAttendees> attendeeEmails = AttendeeList(validEmails);

                    var tempObj = new
                    {
                        summary     = NewEvent.Title,
                        location    = NewEvent.Location,
                        description = NewEvent.Description,
                        start       = startField,
                        end         = endField,
                        colorId     = bgColor,
                        reminders   = new { useDefault = true },
                        attendees   = attendeeEmails
                    };
                    json = JsonConvert.SerializeObject(tempObj);
                }
                else
                {
                    json = new JavaScriptSerializer().Serialize(new
                    {
                        summary     = NewEvent.Title,
                        location    = NewEvent.Location,
                        description = NewEvent.Description,
                        start       = startField,
                        end         = endField,
                        colorId     = bgColor,
                        reminders   = new { useDefault = true }
                    });
                }

                try
                {
                    using (var streamWriter = new StreamWriter(createRequest.GetRequestStream()))
                    {
                        streamWriter.Write(json);
                    }

                    var httpResponse = (HttpWebResponse)createRequest.GetResponse();
                    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                    {
                        gapiRespObject = streamReader.ReadToEnd();
                    }

                    var    GoogleResp = (JObject)JsonConvert.DeserializeObject(gapiRespObject);
                    string ExternalId = GoogleResp["id"].Value <string>();
                    string ETag       = GoogleResp["etag"].Value <string>();
                    exCalHelperService.StoreExternalEventId(UserId, LocalId, ExternalId, 1, ETag); // 1 = Google
                }
                catch (WebException ex)
                {
                    string resp;
                    using (var streamReader = new StreamReader(ex.Response.GetResponseStream()))
                    {
                        resp = streamReader.ReadToEnd();
                    }
                    System.Diagnostics.Debug.WriteLine("Failed to POST ERROR");
                    System.Diagnostics.Debug.WriteLine(resp);
                }
            }
        }
        public void CreateEvent(int UserId, int LocalId, TimeBlockCreateRequest NewEvent)
        {
            string CalendarApi = "https://graph.microsoft.com/v1.0/me/calendar/events";
            string AccessToken = oAuthService.GetMicrosoftAccessToken(UserId);
            string respObject;

            if (AccessToken != null)
            {
                HttpWebRequest createRequest = (HttpWebRequest)WebRequest.Create(CalendarApi);
                createRequest.Method      = "POST";
                createRequest.ContentType = "application/json";
                createRequest.Headers["authorization"] = AccessToken;

                string startTime = NewEvent.StartDate + "T" + NewEvent.StartTime + ":00";
                string endTime   = NewEvent.EndDate + "T" + NewEvent.EndTime + ":00";
                // if all day, times need to be midnight
                if (NewEvent.AllDay)
                {
                    startTime = NewEvent.StartDate + "T00:00:00";
                    if (NewEvent.StartDate == NewEvent.EndDate)
                    { // a single all day event needs to be >24 hours otherwise MS will reject
                        string nextDay = DateTime.Parse(NewEvent.EndDate).AddDays(1).ToString("yyyy-MM-dd");
                        endTime = nextDay + "T00:00:00";
                    }
                    else
                    {
                        endTime = NewEvent.EndDate + "T00:00:00";
                    }
                }
                // grab activity category and turn it into a color
                int categoryId = 2; // failsafe = green
                if (NewEvent.ActivityCategory.HasValue)
                {
                    categoryId = NewEvent.ActivityCategory.Value;
                }
                string[] activityColor = new[] { exCalHelperService.GetMicrosoftColor(categoryId) };

                // timezone failsafe logic
                string userTimezone = "America/Los_Angeles";
                if (NewEvent.TimeZone != null)
                {
                    userTimezone = NewEvent.TimeZone;
                }

                List <string> validEmails = exCalHelperService.ReturnValidEmails(NewEvent.GuestEmail);

                string json = "";
                if (validEmails.Count != 0)
                {
                    List <MicrosoftAttendees.Container> attendeeEmails = AttendeeList(validEmails);
                    var tempObj = new
                    {
                        subject    = NewEvent.Title,
                        body       = new { contentType = "Text", content = NewEvent.Description },
                        location   = new { displayName = NewEvent.Location },
                        start      = new { dateTime = startTime, timeZone = userTimezone },
                        end        = new { dateTime = endTime, timeZone = userTimezone },
                        isAllDay   = NewEvent.AllDay,
                        categories = activityColor,
                        attendees  = attendeeEmails
                    };
                    json = JsonConvert.SerializeObject(tempObj);
                }
                else
                {
                    json = new JavaScriptSerializer().Serialize(new
                    {
                        subject    = NewEvent.Title,
                        body       = new { contentType = "Text", content = NewEvent.Description },
                        location   = new { displayName = NewEvent.Location },
                        start      = new { dateTime = startTime, timeZone = userTimezone },
                        end        = new { dateTime = endTime, timeZone = userTimezone },
                        isAllDay   = NewEvent.AllDay,
                        categories = activityColor
                    });
                }

                try
                {
                    using (var streamWriter = new StreamWriter(createRequest.GetRequestStream()))
                    {
                        streamWriter.Write(json);
                    }

                    System.Diagnostics.Debug.WriteLine(json);
                    var httpResponse = (HttpWebResponse)createRequest.GetResponse();
                    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                    {
                        respObject = streamReader.ReadToEnd();
                    }

                    var serverResp = (JObject)JsonConvert.DeserializeObject(respObject);

                    string ExternalId = serverResp["id"].Value <string>();
                    string ETag       = serverResp["@odata.etag"].Value <string>();
                    exCalHelperService.StoreExternalEventId(UserId, LocalId, ExternalId, 2, ETag); // 2 = microsoft
                }
                catch (WebException ex)
                {
                    string resp;
                    using (var streamReader = new StreamReader(ex.Response.GetResponseStream()))
                    {
                        resp = streamReader.ReadToEnd();
                    }
                    System.Diagnostics.Debug.WriteLine("Failed to POST ERROR");
                    System.Diagnostics.Debug.WriteLine(resp);
                }
            }
        }