Calendar: core: api

This commit is contained in:
NikolayRechkin 2020-03-19 15:36:12 +03:00
parent 8f50db00ec
commit a4b2e0d098
2 changed files with 77 additions and 32 deletions

View File

@ -218,7 +218,50 @@ namespace ASC.Calendar.Controllers
product.Init();
return new Module(product, true);
}
[Read("calendars/{startDate}/{endDate}")]
public List<CalendarWrapper> LoadCalendars(ApiDateTime startDate, ApiDateTime endDate)
{
var result = LoadInternalCalendars();
//external
var extCalendars = CalendarManager.Instance.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
var viewSettings = DataProvider.GetUserViewSettings(SecurityContext.CurrentAccount.ID, extCalendars.ConvertAll(c => c.Id));
var extCalendarsWrappers = extCalendars.ConvertAll(c =>
CalendarWrapperHelper.Get(c, viewSettings.Find(o => o.CalendarId.Equals(c.Id, StringComparison.InvariantCultureIgnoreCase)))
)
.FindAll(c => c.IsAcceptedSubscription);
extCalendarsWrappers.ForEach(c => c.Events = c.UserCalendar.GetEventWrappers(SecurityContext.CurrentAccount.ID, startDate, endDate));
var sharedEvents = extCalendarsWrappers.Find(c => String.Equals(c.Id, SharedEventsCalendar.CalendarId, StringComparison.InvariantCultureIgnoreCase));
if (sharedEvents != null)
result.ForEach(c =>
{
c.Events = c.UserCalendar.GetEventWrappers(SecurityContext.CurrentAccount.ID, startDate, endDate);
c.Todos = c.UserCalendar.GetTodoWrappers(SecurityContext.CurrentAccount.ID, startDate, endDate);
c.Events.RemoveAll(e => sharedEvents.Events.Exists(sEv => string.Equals(sEv.Id, e.Id, StringComparison.InvariantCultureIgnoreCase)));
});
else
result.ForEach(c =>
{
c.Events = c.UserCalendar.GetEventWrappers(SecurityContext.CurrentAccount.ID, startDate, endDate);
c.Todos = c.UserCalendar.GetTodoWrappers(SecurityContext.CurrentAccount.ID, startDate, endDate);
});
result.AddRange(extCalendarsWrappers);
//TODO For personal
/*
//remove all subscription except ical streams
result.RemoveAll(c => c.IsSubscription && !c.IsiCalStream);
result.ForEach(c => c.Events = c.UserCalendar.GetEventWrappers(SecurityContext.CurrentAccount.ID, startDate, endDate));
*/
return result;
}
[Read("{calendarId}")]
public CalendarWrapper GetCalendarById(string calendarId)
{

View File

@ -43,6 +43,8 @@ namespace ASC.Calendar.Models
[DataContract(Name = "calendar", Namespace = "")]
public class CalendarWrapper
{
public BaseCalendar UserCalendar { get; set; }
[DataMember(Name = "isSubscription", Order = 80)]
public bool IsSubscription { get; set; }
@ -132,7 +134,7 @@ namespace ASC.Calendar.Models
public class CalendarWrapperHelper
{
public BaseCalendar UserCalendar { get; private set; }
protected UserViewSettings _userViewSettings;
protected Guid _userId;
@ -181,35 +183,35 @@ namespace ASC.Calendar.Models
if (_userViewSettings == null)
{
UserCalendar = calendar;
calendarWraper.UserCalendar = calendar;
_userId = AuthContext.CurrentAccount.ID;
}
else
{
UserCalendar = calendar.GetUserCalendar(_userViewSettings);
calendarWraper.UserCalendar = calendar.GetUserCalendar(_userViewSettings);
_userId = _userViewSettings.UserId;
}
//---IsSubscription
if (UserCalendar.Id != null)
if (calendarWraper.UserCalendar.Id != null)
{
if (UserCalendar.IsiCalStream())
if (calendarWraper.UserCalendar.IsiCalStream())
calendarWraper.IsSubscription = true;
else if (UserCalendar.Id.Equals(SharedEventsCalendar.CalendarId, StringComparison.InvariantCultureIgnoreCase))
else if (calendarWraper.UserCalendar.Id.Equals(SharedEventsCalendar.CalendarId, StringComparison.InvariantCultureIgnoreCase))
calendarWraper.IsSubscription = true;
else if (UserCalendar.OwnerId.Equals(_userId))
else if (calendarWraper.UserCalendar.OwnerId.Equals(_userId))
calendarWraper.IsSubscription = false;
else
calendarWraper.IsSubscription = true;
//---iCalUrl
if (UserCalendar.IsiCalStream())
calendarWraper.iCalUrl = (UserCalendar as BusinessObjects.Calendar).iCalUrl;
if (calendarWraper.UserCalendar.IsiCalStream())
calendarWraper.iCalUrl = (calendarWraper.UserCalendar as BusinessObjects.Calendar).iCalUrl;
else
calendarWraper.iCalUrl = "";
//---isiCalStream
if (UserCalendar.IsiCalStream())
if (calendarWraper.UserCalendar.IsiCalStream())
calendarWraper.IsiCalStream = true;
else
calendarWraper.IsiCalStream = false;
@ -218,14 +220,14 @@ namespace ASC.Calendar.Models
calendarWraper.IsHidden = _userViewSettings != null ? _userViewSettings.IsHideEvents : false;
//---CanAlertModify
calendarWraper.CanAlertModify = UserCalendar.Context.CanChangeAlertType;
calendarWraper.CanAlertModify = calendarWraper.UserCalendar.Context.CanChangeAlertType;
//---IsShared
calendarWraper.IsShared = UserCalendar.SharingOptions.SharedForAll || UserCalendar.SharingOptions.PublicItems.Count > 0;
calendarWraper.IsShared = calendarWraper.UserCalendar.SharingOptions.SharedForAll || calendarWraper.UserCalendar.SharingOptions.PublicItems.Count > 0;
//---Permissions
var p = new CalendarPermissions() { Data = PublicItemCollectionHelper.GetForCalendar(UserCalendar) };
foreach (var item in UserCalendar.SharingOptions.PublicItems)
var p = new CalendarPermissions() { Data = PublicItemCollectionHelper.GetForCalendar(calendarWraper.UserCalendar) };
foreach (var item in calendarWraper.UserCalendar.SharingOptions.PublicItems)
{
if (item.IsGroup)
p.UserParams.Add(new UserParams() { Id = item.Id, Name = UserManager.GetGroupInfo(item.Id).Name });
@ -235,40 +237,40 @@ namespace ASC.Calendar.Models
calendarWraper.Permissions = p;
//---IsEditable
if (UserCalendar.IsiCalStream())
if (calendarWraper.UserCalendar.IsiCalStream())
calendarWraper.IsEditable = false;
else if (UserCalendar is ISecurityObject)
calendarWraper.IsEditable = PermissionContext.PermissionResolver.Check(Authentication.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, _userId), (ISecurityObject)UserCalendar as ISecurityObject, null, CalendarAccessRights.FullAccessAction);
else if (calendarWraper.UserCalendar is ISecurityObject)
calendarWraper.IsEditable = PermissionContext.PermissionResolver.Check(Authentication.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, _userId), (ISecurityObject)calendarWraper.UserCalendar as ISecurityObject, null, CalendarAccessRights.FullAccessAction);
else
calendarWraper.IsEditable = false;
//---TextColor
calendarWraper.TextColor = String.IsNullOrEmpty(UserCalendar.Context.HtmlTextColor) ? BusinessObjects.Calendar.DefaultTextColor :
UserCalendar.Context.HtmlTextColor;
calendarWraper.TextColor = String.IsNullOrEmpty(calendarWraper.UserCalendar.Context.HtmlTextColor) ? BusinessObjects.Calendar.DefaultTextColor :
calendarWraper.UserCalendar.Context.HtmlTextColor;
//---BackgroundColor
calendarWraper.BackgroundColor = String.IsNullOrEmpty(UserCalendar.Context.HtmlBackgroundColor) ? BusinessObjects.Calendar.DefaultBackgroundColor :
UserCalendar.Context.HtmlBackgroundColor;
calendarWraper.BackgroundColor = String.IsNullOrEmpty(calendarWraper.UserCalendar.Context.HtmlBackgroundColor) ? BusinessObjects.Calendar.DefaultBackgroundColor :
calendarWraper.UserCalendar.Context.HtmlBackgroundColor;
//---Description
calendarWraper.Description = UserCalendar.Description;
calendarWraper.Description = calendarWraper.UserCalendar.Description;
//---Title
calendarWraper.Title = UserCalendar.Name;
calendarWraper.Title = calendarWraper.UserCalendar.Name;
//---Id
calendarWraper.Id = UserCalendar.Id;
calendarWraper.Id = calendarWraper.UserCalendar.Id;
//---IsTodo
if (UserCalendar.IsExistTodo())
calendarWraper.IsTodo = (UserCalendar as BusinessObjects.Calendar).IsTodo;
if (calendarWraper.UserCalendar.IsExistTodo())
calendarWraper.IsTodo = (calendarWraper.UserCalendar as BusinessObjects.Calendar).IsTodo;
else
calendarWraper.IsTodo = 0;
//---Owner
var owner = new UserParams() { Id = UserCalendar.OwnerId, Name = "" };
if (UserCalendar.OwnerId != Guid.Empty)
owner.Name = UserManager.GetUsers(UserCalendar.OwnerId).DisplayUserName(DisplayUserSettingsHelper);
var owner = new UserParams() { Id = calendarWraper.UserCalendar.OwnerId, Name = "" };
if (calendarWraper.UserCalendar.OwnerId != Guid.Empty)
owner.Name = UserManager.GetUsers(calendarWraper.UserCalendar.OwnerId).DisplayUserName(DisplayUserSettingsHelper);
calendarWraper.Owner = owner;
@ -276,13 +278,13 @@ namespace ASC.Calendar.Models
calendarWraper.IsAcceptedSubscription = _userViewSettings == null || _userViewSettings.IsAccepted;
//---DefaultAlertType
calendarWraper.DefaultAlertType = EventAlertWrapper.ConvertToTypeSurrogated(UserCalendar.EventAlertType);
calendarWraper.DefaultAlertType = EventAlertWrapper.ConvertToTypeSurrogated(calendarWraper.UserCalendar.EventAlertType);
//---TimeZoneInfo
calendarWraper.TimeZoneInfo = TimeZoneWrapperHelper.Get(UserCalendar.TimeZone);
calendarWraper.TimeZoneInfo = TimeZoneWrapperHelper.Get(calendarWraper.UserCalendar.TimeZone);
//---CanEditTimeZone
calendarWraper.CanEditTimeZone = UserCalendar.Context.CanChangeTimeZone;
calendarWraper.CanEditTimeZone = calendarWraper.UserCalendar.Context.CanChangeTimeZone;
}
return calendarWraper;