Fix Calendar
This commit is contained in:
parent
bf41c21c4e
commit
94047ab0a1
@ -67,7 +67,8 @@ namespace ASC.Common.Utils
|
||||
{
|
||||
try
|
||||
{
|
||||
var payloadParts = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(signature)).Split('?');
|
||||
var rightSignature = signature.Replace("\"", "");
|
||||
var payloadParts = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(rightSignature)).Split('?');
|
||||
if (GetHashBase64(payloadParts[1] + secret) == payloadParts[0])
|
||||
{
|
||||
//Sig correct
|
||||
|
@ -262,7 +262,8 @@ namespace ASC.Core
|
||||
|
||||
public string AuthenticateMe(Guid userId, List<Claim> additionalClaims = null)
|
||||
{
|
||||
return AuthenticateMe(Authentication.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, userId), additionalClaims);
|
||||
var account = Authentication.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, userId);
|
||||
return AuthenticateMe(account, additionalClaims);
|
||||
}
|
||||
|
||||
public void Logout()
|
||||
|
@ -40,7 +40,8 @@ using ASC.Core.Users;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace ASC.Core
|
||||
{
|
||||
{
|
||||
[Scope]
|
||||
class ConfigureHostedSolution : IConfigureNamedOptions<HostedSolution>
|
||||
{
|
||||
private UserFormatter UserFormatter { get; }
|
||||
|
@ -21,6 +21,12 @@
|
||||
<ProjectReference Include="..\..\ASC.Core.Common\ASC.Core.Common.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Update="radicale.log.config">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ProjectExtensions><VisualStudio><UserProperties properties_4launchsettings_1json__JsonSchema="https://json.schemastore.org/local.settings.json" /></VisualStudio></ProjectExtensions>
|
||||
|
||||
|
||||
|
@ -1,8 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@ -12,7 +10,6 @@ using ASC.Common.Logging;
|
||||
using ASC.Common.Utils;
|
||||
using ASC.Core;
|
||||
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
@ -43,6 +40,8 @@ namespace ASC.Radicale
|
||||
{
|
||||
var pythonName = "python";
|
||||
|
||||
var configPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "radicale.config"));
|
||||
|
||||
if (WorkContext.IsMono)
|
||||
{
|
||||
pythonName = "python3";
|
||||
@ -54,8 +53,7 @@ namespace ASC.Radicale
|
||||
UseShellExecute = false,
|
||||
FileName = pythonName,
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
Arguments = string.Format("-m radicale --config \"{0}\"",
|
||||
Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "radicale.config"))),
|
||||
Arguments = $"-m radicale --config \"{configPath}\"",
|
||||
WorkingDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
|
||||
};
|
||||
|
||||
@ -78,7 +76,6 @@ namespace ASC.Radicale
|
||||
{
|
||||
StopRadicale();
|
||||
Proc = Process.Start(StartInfo);
|
||||
|
||||
}
|
||||
|
||||
private void StopRadicale()
|
||||
|
@ -54,7 +54,7 @@ hosts = localhost:5232
|
||||
# Authentication method
|
||||
# Value: none | htpasswd | remote_user | http_x_remote_user
|
||||
type = app_auth_plugin
|
||||
portal_url = http://localhost:8092/apisystem/caldav
|
||||
portal_url = http://localhost/apisystem/caldav
|
||||
machine_key = 1123askdasjklasbnd
|
||||
|
||||
# Htpasswd filename
|
||||
@ -88,7 +88,7 @@ file = radicale.rights
|
||||
# Value: multifilesystem
|
||||
# type = multifilesystem
|
||||
type = app_store_plugin
|
||||
portal_url = http://localhost:8092/apisystem/caldav
|
||||
portal_url = http://localhost/apisystem/caldav
|
||||
|
||||
# Folder for storing local collections, created if not present
|
||||
filesystem_folder = ..\..\Data\radicale\collections\
|
||||
@ -121,4 +121,4 @@ level = info
|
||||
[headers]
|
||||
|
||||
# Additional HTTP headers
|
||||
Access-Control-Allow-Origin = *
|
||||
Access-Control-Allow-Origin = *
|
||||
|
@ -15,8 +15,8 @@ handlers = file
|
||||
[handler_file]
|
||||
class = handlers.TimedRotatingFileHandler
|
||||
# Specify the output file here.
|
||||
args = ('','midnight', 1, 7)
|
||||
args = ('../../../../../../Logs/radicale.log','midnight', 1, 7)
|
||||
formatter = full
|
||||
|
||||
[formatter_full]
|
||||
format = %(asctime)s - [%(thread)x] %(levelname)s: %(message)s
|
||||
format = %(asctime)s - [%(thread)x] %(levelname)s: %(message)s
|
||||
|
@ -316,8 +316,8 @@ server {
|
||||
}
|
||||
|
||||
location /caldav {
|
||||
rewrite caldav/(.*) /$1 break;
|
||||
proxy_pass http://localhost:5232;
|
||||
proxy_set_header X-Script-Name /caldav;
|
||||
proxy_set_header X-REWRITER-URL $X_REWRITER_URL;
|
||||
}
|
||||
|
||||
|
@ -26,14 +26,10 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using ASC.Api.Core;
|
||||
using ASC.Calendar.Core.Dao;
|
||||
@ -44,14 +40,11 @@ using ASC.Common;
|
||||
using ASC.Common.Logging;
|
||||
using ASC.Common.Utils;
|
||||
using ASC.Core;
|
||||
using ASC.Core.Common;
|
||||
using ASC.Core.Common.EF;
|
||||
using ASC.Core.Users;
|
||||
using ASC.Security.Cryptography;
|
||||
using ASC.Web.Core.Calendars;
|
||||
using ASC.Web.Core.WhiteLabel;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace ASC.Calendar.BusinessObjects
|
||||
@ -118,10 +111,10 @@ namespace ASC.Calendar.BusinessObjects
|
||||
|
||||
public List<UserViewSettings> GetUserViewSettings(Guid userId, List<string> calendarIds)
|
||||
{
|
||||
var data = CalendarDb.CalendarCalendarUser
|
||||
var data = CalendarDb.CalendarCalendarUser.AsNoTracking()
|
||||
.Where(ccu =>
|
||||
(calendarIds.Contains(ccu.CalendarId.ToString()) || calendarIds.Contains(ccu.ExtCalendarId)) &&
|
||||
ccu.UserId == userId)
|
||||
(calendarIds.Contains(ccu.CalendarId.ToString()) || calendarIds.Contains(ccu.ExtCalendarId)) &&
|
||||
ccu.UserId == userId)
|
||||
.ToList();
|
||||
|
||||
var options = new List<UserViewSettings>();
|
||||
@ -320,12 +313,12 @@ namespace ASC.Calendar.BusinessObjects
|
||||
calDavGuid = cc.CaldavGuid,
|
||||
isTodo = cc.IsTodo,
|
||||
|
||||
usrId = uc.UserId,
|
||||
usrHideEvents = uc.HideEvents,
|
||||
usrIsAccepted = uc.IsAccepted,
|
||||
usrId = (Guid?)uc.UserId,
|
||||
usrHideEvents = (int?)uc.HideEvents,
|
||||
usrIsAccepted = (int?)uc.IsAccepted,
|
||||
usrTextColor = uc.TextColor,
|
||||
usrBackground = uc.BackgroundColor,
|
||||
usrAlertType = uc.AlertType,
|
||||
usrAlertType = (int?)uc.AlertType,
|
||||
usrCalName = uc.Name,
|
||||
usrTimeZone = uc.TimeZone
|
||||
};
|
||||
@ -383,7 +376,7 @@ namespace ASC.Calendar.BusinessObjects
|
||||
var uvs = new UserViewSettings
|
||||
{
|
||||
CalendarId = calendar.Id,
|
||||
UserId = r.usrId,
|
||||
UserId = r.usrId.GetValueOrDefault(),
|
||||
IsHideEvents = Convert.ToBoolean(r.usrHideEvents),
|
||||
IsAccepted = Convert.ToBoolean(r.usrIsAccepted),
|
||||
TextColor = r.usrTextColor,
|
||||
@ -627,7 +620,7 @@ namespace ASC.Calendar.BusinessObjects
|
||||
}
|
||||
public void UpdateCalendarUserView(UserViewSettings viewSettings)
|
||||
{
|
||||
using var tx = CalendarDb.Database.BeginTransaction();
|
||||
//using var tx = CalendarDb.Database.BeginTransaction();
|
||||
|
||||
int calendarId;
|
||||
if (int.TryParse(viewSettings.CalendarId, out calendarId))
|
||||
@ -636,6 +629,7 @@ namespace ASC.Calendar.BusinessObjects
|
||||
{
|
||||
CalendarId = calendarId,
|
||||
UserId = viewSettings.UserId,
|
||||
ExtCalendarId = viewSettings.ExtCalendarId,
|
||||
HideEvents = Convert.ToInt32(viewSettings.IsHideEvents),
|
||||
TextColor = viewSettings.TextColor,
|
||||
BackgroundColor = viewSettings.BackgroundColor,
|
||||
@ -644,7 +638,17 @@ namespace ASC.Calendar.BusinessObjects
|
||||
Name = viewSettings.Name ?? "",
|
||||
TimeZone = viewSettings.TimeZone != null ? viewSettings.TimeZone.Id : null
|
||||
};
|
||||
CalendarDb.CalendarCalendarUser.Add(calendarUser);
|
||||
|
||||
var existCalendar = CalendarDb.CalendarCalendarUser
|
||||
.Any(c => c.CalendarId == calendarUser.CalendarId && c.UserId == calendarUser.UserId);
|
||||
|
||||
if (existCalendar)
|
||||
CalendarDb.CalendarCalendarUser.Update(calendarUser);
|
||||
else
|
||||
CalendarDb.CalendarCalendarUser.Add(calendarUser);
|
||||
|
||||
CalendarDb.SaveChanges();
|
||||
//tx.Commit();
|
||||
|
||||
//update notifications
|
||||
var eventsData = CalendarDb.CalendarEvents
|
||||
@ -660,9 +664,6 @@ namespace ASC.Calendar.BusinessObjects
|
||||
}
|
||||
).ToList();
|
||||
|
||||
CalendarDb.SaveChanges();
|
||||
tx.Commit();
|
||||
|
||||
foreach (var r in eventsData)
|
||||
{
|
||||
UpdateEventNotifications(r.eId, calendarId,
|
||||
@ -686,10 +687,17 @@ namespace ASC.Calendar.BusinessObjects
|
||||
Name = viewSettings.Name ?? "",
|
||||
TimeZone = viewSettings.TimeZone != null ? viewSettings.TimeZone.Id : null
|
||||
};
|
||||
CalendarDb.CalendarCalendarUser.Add(calendarUser);
|
||||
|
||||
var existCalendar = CalendarDb.CalendarCalendarUser
|
||||
.Any(c => c.ExtCalendarId == calendarUser.ExtCalendarId && c.UserId == calendarUser.UserId);
|
||||
|
||||
if (existCalendar)
|
||||
CalendarDb.CalendarCalendarUser.Update(calendarUser);
|
||||
else
|
||||
CalendarDb.CalendarCalendarUser.Add(calendarUser);
|
||||
|
||||
CalendarDb.SaveChanges();
|
||||
tx.Commit();
|
||||
//tx.Commit();
|
||||
|
||||
if (String.Equals(viewSettings.CalendarId, SharedEventsCalendar.CalendarId,
|
||||
StringComparison.InvariantCultureIgnoreCase))
|
||||
@ -852,6 +860,7 @@ namespace ASC.Calendar.BusinessObjects
|
||||
{
|
||||
Id = Convert.ToInt32(id),
|
||||
Name = name,
|
||||
Tenant = TenantManager.GetCurrentTenant().TenantId,
|
||||
Description = description,
|
||||
CalendarId = calendarId,
|
||||
OwnerId = ownerId,
|
||||
@ -1023,7 +1032,6 @@ namespace ASC.Calendar.BusinessObjects
|
||||
select calEventUser.EventId).Any()
|
||||
)
|
||||
select events.Id;
|
||||
|
||||
return GetEventsByIds(evIds.ToArray(), userId, tenantId);
|
||||
}
|
||||
|
||||
@ -1047,7 +1055,7 @@ namespace ASC.Calendar.BusinessObjects
|
||||
)
|
||||
)
|
||||
)
|
||||
.Select(s => s.Id).ToList();
|
||||
.Select(s => s.Id).ToList();
|
||||
|
||||
return GetEventsByIds(evIds.ToArray(), userId, tenantId);
|
||||
}
|
||||
@ -1098,17 +1106,17 @@ namespace ASC.Calendar.BusinessObjects
|
||||
Id = calEvt.Id.ToString(),
|
||||
Name = calEvt.Name,
|
||||
Description = calEvt.Description,
|
||||
TenantId = calEvt.Tenant,
|
||||
TenantId = (int?)calEvt.Tenant,
|
||||
CalendarId = calEvt.CalendarId.ToString(),
|
||||
UtcStartDate = calEvt.StartDate,
|
||||
UtcEndDate = calEvt.EndDate,
|
||||
UtcUpdateDate = (DateTime)calEvt.UpdateDate,
|
||||
AllDayLong = Convert.ToBoolean(calEvt.AllDayLong),
|
||||
OwnerId = calEvt.OwnerId,
|
||||
AlertType = (EventAlertType)ue.AlertType,
|
||||
OwnerId = (Guid?)calEvt.OwnerId,
|
||||
AlertType = (EventAlertType?)ue.AlertType,
|
||||
RecurrenceRule = calEvt.Rrule,
|
||||
Uid = calEvt.Uid,
|
||||
Status = (EventStatus)calEvt.Status
|
||||
Status = (EventStatus?)calEvt.Status
|
||||
};
|
||||
foreach (var r in data)
|
||||
{
|
||||
@ -1123,17 +1131,17 @@ namespace ASC.Calendar.BusinessObjects
|
||||
Id = r.Id,
|
||||
Name = r.Name,
|
||||
Description = r.Description,
|
||||
TenantId = r.TenantId,
|
||||
TenantId = r.TenantId.GetValueOrDefault(),
|
||||
CalendarId = r.CalendarId,
|
||||
UtcStartDate = r.UtcStartDate,
|
||||
UtcEndDate = r.UtcEndDate,
|
||||
UtcUpdateDate = r.UtcUpdateDate,
|
||||
AllDayLong = r.AllDayLong,
|
||||
OwnerId = r.OwnerId,
|
||||
AlertType = r.AlertType,
|
||||
OwnerId = r.OwnerId.GetValueOrDefault(),
|
||||
AlertType = r.AlertType.GetValueOrDefault(),
|
||||
RecurrenceRule = RecurrenceRule.Parse(r.RecurrenceRule),
|
||||
Uid = r.Uid,
|
||||
Status = r.Status
|
||||
Status = r.Status.GetValueOrDefault()
|
||||
};
|
||||
events.Add(ev);
|
||||
}
|
||||
@ -1164,17 +1172,17 @@ namespace ASC.Calendar.BusinessObjects
|
||||
Id = calEvt.Id.ToString(),
|
||||
Name = calEvt.Name,
|
||||
Description = calEvt.Description,
|
||||
TenantId = calEvt.Tenant,
|
||||
TenantId = (int?)calEvt.Tenant,
|
||||
CalendarId = calEvt.CalendarId.ToString(),
|
||||
UtcStartDate = calEvt.StartDate,
|
||||
UtcEndDate = calEvt.EndDate,
|
||||
UtcUpdateDate = (DateTime)calEvt.UpdateDate,
|
||||
AllDayLong = Convert.ToBoolean(calEvt.AllDayLong),
|
||||
OwnerId = calEvt.OwnerId,
|
||||
AlertType = (EventAlertType)ue.AlertType,
|
||||
OwnerId = (Guid?)calEvt.OwnerId,
|
||||
AlertType = (EventAlertType?)ue.AlertType,
|
||||
RecurrenceRule = calEvt.Rrule,
|
||||
Uid = calEvt.Uid,
|
||||
Status = (EventStatus)calEvt.Status
|
||||
Status = (EventStatus?)calEvt.Status
|
||||
};
|
||||
foreach (var r in data)
|
||||
{
|
||||
@ -1189,17 +1197,17 @@ namespace ASC.Calendar.BusinessObjects
|
||||
Id = r.Id,
|
||||
Name = r.Name,
|
||||
Description = r.Description,
|
||||
TenantId = r.TenantId,
|
||||
TenantId = r.TenantId.GetValueOrDefault(),
|
||||
CalendarId = r.CalendarId,
|
||||
UtcStartDate = r.UtcStartDate,
|
||||
UtcEndDate = r.UtcEndDate,
|
||||
UtcUpdateDate = r.UtcUpdateDate,
|
||||
AllDayLong = r.AllDayLong,
|
||||
OwnerId = r.OwnerId,
|
||||
AlertType = r.AlertType,
|
||||
OwnerId = r.OwnerId.GetValueOrDefault(),
|
||||
AlertType = r.AlertType.GetValueOrDefault(),
|
||||
RecurrenceRule = RecurrenceRule.Parse(r.RecurrenceRule),
|
||||
Uid = r.Uid,
|
||||
Status = r.Status
|
||||
Status = r.Status.GetValueOrDefault()
|
||||
};
|
||||
events.Add(ev);
|
||||
}
|
||||
@ -1247,12 +1255,13 @@ namespace ASC.Calendar.BusinessObjects
|
||||
using var tx = CalendarDb.Database.BeginTransaction();
|
||||
|
||||
var cei = CalendarDb.CalendarEventItem.Where(r => r.EventId == eventID && r.ItemId == userId && r.IsGroup == 0).SingleOrDefault();
|
||||
var userNoSubscibe = CalendarDb.CalendarEventUser.Any(u => u.UserId == userId && u.EventId == eventID && u.IsUnsubscribe == 1);
|
||||
|
||||
if (cei != null)
|
||||
{
|
||||
CalendarDb.CalendarEventItem.Remove(cei);
|
||||
}
|
||||
else
|
||||
else if(!userNoSubscibe)
|
||||
{
|
||||
var newEventUser = new CalendarEventUser
|
||||
{
|
||||
|
@ -44,6 +44,7 @@ namespace ASC.Calendar.BusinessObjects
|
||||
public List<Ical.Net.Calendar> History { get; set; }
|
||||
}
|
||||
|
||||
[Scope]
|
||||
public class EventHistoryHelper
|
||||
{
|
||||
public DDayICalParser DDayICalParser { get; }
|
||||
|
@ -35,6 +35,7 @@ namespace ASC.Calendar.BusinessObjects
|
||||
public class UserViewSettings
|
||||
{
|
||||
public virtual string CalendarId { get; set; }
|
||||
public string ExtCalendarId { get; set; }
|
||||
public Guid UserId { get; set; }
|
||||
public string Name { get; set; }
|
||||
public bool IsHideEvents { get; set; }
|
||||
@ -48,6 +49,7 @@ namespace ASC.Calendar.BusinessObjects
|
||||
{
|
||||
this.TextColor = String.Empty;
|
||||
this.BackgroundColor = String.Empty;
|
||||
this.ExtCalendarId = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,6 @@ using Microsoft.Extensions.Options;
|
||||
|
||||
using SecurityContext = ASC.Core.SecurityContext;
|
||||
using ASC.Calendar.Core;
|
||||
using ASC.Calendar.Core.Dao;
|
||||
using ASC.Calendar.BusinessObjects;
|
||||
using ASC.Web.Core.Calendars;
|
||||
using ASC.Calendar.ExternalCalendars;
|
||||
@ -46,8 +45,8 @@ using System.Security;
|
||||
using Ical.Net.CalendarComponents;
|
||||
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using ASC.Web.Studio.Core;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace ASC.Calendar.Controllers
|
||||
{
|
||||
@ -130,6 +129,7 @@ namespace ASC.Calendar.Controllers
|
||||
public EmailValidationKeyProvider EmailValidationKeyProvider { get; }
|
||||
public SetupInfo SetupInfo { get; }
|
||||
public InstanceCrypto InstanceCrypto { get; }
|
||||
public CalendarManager CalendarManager { get; }
|
||||
|
||||
public CalendarController(
|
||||
|
||||
@ -159,7 +159,8 @@ namespace ASC.Calendar.Controllers
|
||||
SubscriptionWrapperHelper subscriptionWrapperHelper,
|
||||
EmailValidationKeyProvider emailValidationKeyProvider,
|
||||
SetupInfo setupInfo,
|
||||
InstanceCrypto instanceCrypto)
|
||||
InstanceCrypto instanceCrypto,
|
||||
CalendarManager calendarManager)
|
||||
{
|
||||
AuthContext = authContext;
|
||||
Authentication = authentication;
|
||||
@ -187,16 +188,17 @@ namespace ASC.Calendar.Controllers
|
||||
EmailValidationKeyProvider = emailValidationKeyProvider;
|
||||
SetupInfo = setupInfo;
|
||||
InstanceCrypto = instanceCrypto;
|
||||
CalendarManager = calendarManager;
|
||||
|
||||
CalendarManager.Instance.RegistryCalendar(new SharedEventsCalendar(AuthContext, TimeZoneConverter, TenantManager, DataProvider));
|
||||
CalendarManager.RegistryCalendar(new SharedEventsCalendar(AuthContext, TimeZoneConverter, TenantManager, DataProvider));
|
||||
var birthdayReminderCalendar = new BirthdayReminderCalendar(AuthContext, TimeZoneConverter, UserManager, DisplayUserSettingsHelper);
|
||||
if (UserManager.IsUserInGroup(AuthContext.CurrentAccount.ID, Constants.GroupVisitor.ID))
|
||||
{
|
||||
CalendarManager.Instance.UnRegistryCalendar(birthdayReminderCalendar.Id);
|
||||
CalendarManager.UnRegistryCalendar(birthdayReminderCalendar.Id);
|
||||
}
|
||||
else
|
||||
{
|
||||
CalendarManager.Instance.RegistryCalendar(birthdayReminderCalendar);
|
||||
CalendarManager.RegistryCalendar(birthdayReminderCalendar);
|
||||
}
|
||||
HttpContext = httpContextAccessor?.HttpContext;
|
||||
}
|
||||
@ -248,7 +250,7 @@ namespace ASC.Calendar.Controllers
|
||||
result.AddRange(iCalStreams.ConvertAll(c => SubscriptionWrapperHelper.Get(c)));
|
||||
|
||||
|
||||
var extCalendars = CalendarManager.Instance.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
|
||||
var extCalendars = CalendarManager.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
|
||||
var viewSettings = DataProvider.GetUserViewSettings(SecurityContext.CurrentAccount.ID, extCalendars.ConvertAll(c => c.Id));
|
||||
|
||||
result.AddRange(extCalendars.ConvertAll(c =>
|
||||
@ -330,7 +332,7 @@ namespace ASC.Calendar.Controllers
|
||||
|
||||
|
||||
//external
|
||||
var extCalendars = CalendarManager.Instance.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
|
||||
var extCalendars = CalendarManager.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
|
||||
var viewSettings = DataProvider.GetUserViewSettings(SecurityContext.CurrentAccount.ID, extCalendars.ConvertAll(c => c.Id));
|
||||
|
||||
var extCalendarsWrappers = extCalendars.ConvertAll(c =>
|
||||
@ -402,7 +404,7 @@ namespace ASC.Calendar.Controllers
|
||||
|
||||
//external
|
||||
|
||||
var extCalendars = CalendarManager.Instance.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
|
||||
var extCalendars = CalendarManager.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
|
||||
var viewSettings = DataProvider.GetUserViewSettings(SecurityContext.CurrentAccount.ID, extCalendars.ConvertAll(c => c.Id));
|
||||
|
||||
var extCalendarsWrappers = extCalendars.ConvertAll(c =>
|
||||
@ -459,7 +461,7 @@ namespace ASC.Calendar.Controllers
|
||||
return (calendars != null ? CalendarWrapperHelper.Get(calendars) : null);
|
||||
}
|
||||
|
||||
var extCalendar = CalendarManager.Instance.GetCalendarForUser(AuthContext.CurrentAccount.ID, calendarId, UserManager);
|
||||
var extCalendar = CalendarManager.GetCalendarForUser(AuthContext.CurrentAccount.ID, calendarId, UserManager);
|
||||
if (extCalendar != null)
|
||||
{
|
||||
var viewSettings = DataProvider.GetUserViewSettings(AuthContext.CurrentAccount.ID, new List<string> { calendarId });
|
||||
@ -503,7 +505,7 @@ namespace ASC.Calendar.Controllers
|
||||
{
|
||||
var myUri = HttpContext.Request.GetUrlRewriter();
|
||||
|
||||
var calDavServerUrl = myUri.Scheme + "://" + myUri.Host + "/caldav";
|
||||
var calDavServerUrl = myUri.Scheme + "://" + myUri.Host + ":" + myUri.Port + "/caldav";
|
||||
var caldavHost = myUri.Host;
|
||||
|
||||
var userId = SecurityContext.CurrentAccount.ID;
|
||||
@ -723,8 +725,11 @@ namespace ASC.Calendar.Controllers
|
||||
/// <param name="calendarId">Calendar ID</param>
|
||||
/// <param name="team">Project team</param>
|
||||
[Delete("caldavprojcal")]
|
||||
public void DeleteCaldavCalendar(string calendarId, List<string> team = null)
|
||||
public void DeleteCaldavCalendar(CaldavCalendarModel caldavCalendarModel)
|
||||
{
|
||||
var calendarId = caldavCalendarModel.CalendarId;
|
||||
var team = caldavCalendarModel.Team;
|
||||
|
||||
try
|
||||
{
|
||||
var myUri = HttpContext.Request.GetUrlRewriter();
|
||||
@ -765,8 +770,12 @@ namespace ASC.Calendar.Controllers
|
||||
/// <param name="uid">Event uid</param>
|
||||
/// <param name="responsibles">Task responsibles</param>
|
||||
[Delete("caldavevent")]
|
||||
public void DeleteCaldavEvent(string calendarId, string uid, List<string> responsibles = null)
|
||||
public void DeleteCaldavEvent(CaldavEventModel caldavEventModel)
|
||||
{
|
||||
var calendarId = caldavEventModel.CalendarId;
|
||||
var uid = caldavEventModel.Uid;
|
||||
var responsibles = caldavEventModel.Responsibles;
|
||||
|
||||
try
|
||||
{
|
||||
var currentUserId = SecurityContext.CurrentAccount.ID;
|
||||
@ -819,8 +828,13 @@ namespace ASC.Calendar.Controllers
|
||||
/// <param name="alert">Event notification type</param>
|
||||
/// <param name="responsibles">Task responsibles</param>
|
||||
[Update("caldavevent")]
|
||||
public void UpdateCaldavEvent(string calendarId, string uid, int alert = 0, List<string> responsibles = null)
|
||||
public void UpdateCaldavEvent(CaldavEventModel caldavEventModel)
|
||||
{
|
||||
var calendarId = caldavEventModel.CalendarId;
|
||||
var uid = caldavEventModel.Uid;
|
||||
var alert = caldavEventModel.Alert;
|
||||
var responsibles = caldavEventModel.Responsibles;
|
||||
|
||||
try
|
||||
{
|
||||
if (responsibles.Count > 0)
|
||||
@ -997,7 +1011,7 @@ namespace ASC.Calendar.Controllers
|
||||
else
|
||||
{
|
||||
//external
|
||||
icalendar = CalendarManager.Instance.GetCalendarForUser(SecurityContext.CurrentAccount.ID, calendarId, UserManager);
|
||||
icalendar = CalendarManager.GetCalendarForUser(SecurityContext.CurrentAccount.ID, calendarId, UserManager);
|
||||
if (icalendar != null)
|
||||
{
|
||||
icalendar = icalendar.GetUserCalendar(viewSettings.FirstOrDefault());
|
||||
@ -1022,10 +1036,12 @@ namespace ASC.Calendar.Controllers
|
||||
}
|
||||
private string GetUserCaldavCalendar(string calUrl, string encoded)
|
||||
{
|
||||
var authorization = DataProvider.GetUserAuthorization(encoded);
|
||||
|
||||
var webRequest = (HttpWebRequest)WebRequest.Create(calUrl);
|
||||
webRequest.Method = "GET";
|
||||
webRequest.ContentType = "text/calendar; charset=utf-8";
|
||||
webRequest.Headers.Add("Authorization", "Basic " + encoded);
|
||||
webRequest.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(authorization)));
|
||||
|
||||
try
|
||||
{
|
||||
@ -2075,39 +2091,42 @@ namespace ASC.Calendar.Controllers
|
||||
}
|
||||
}
|
||||
//event sharing list
|
||||
foreach (var sharingOption in eventData.SharingOptions)
|
||||
if (eventData.SharingOptions != null)
|
||||
{
|
||||
var fullAccess = sharingOption.actionId == AccessOption.FullAccessOption.Id;
|
||||
|
||||
if (!sharingOption.IsGroup)
|
||||
foreach (var sharingOption in eventData.SharingOptions)
|
||||
{
|
||||
var user = UserManager.GetUsers(sharingOption.itemId);
|
||||
if (DataProvider.CheckUserEmail(user))
|
||||
{
|
||||
var sharedEventUid = user.ID == calendarObj.OwnerId
|
||||
? split[0]
|
||||
: fullAccess ? split[0] + "_write" : split[0];
|
||||
var fullAccess = sharingOption.actionId == AccessOption.FullAccessOption.Id;
|
||||
|
||||
updateCaldavEvent(old_ics, sharedEventUid, true, SharedEventsCalendar.CalendarId, myUri,
|
||||
user.Email, DateTime.Now, targetCalendar.TimeZones[0],
|
||||
calendarObj.TimeZone, false, user.ID != calendarObj.OwnerId);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var users = UserManager.GetUsersByGroup(sharingOption.itemId);
|
||||
|
||||
foreach (var user in users)
|
||||
if (!sharingOption.IsGroup)
|
||||
{
|
||||
var user = UserManager.GetUsers(sharingOption.itemId);
|
||||
if (DataProvider.CheckUserEmail(user))
|
||||
{
|
||||
var sharedEventUid = user.ID == calendarObj.OwnerId
|
||||
? split[0]
|
||||
: fullAccess ? split[0] + "_write" : split[0];
|
||||
? split[0]
|
||||
: fullAccess ? split[0] + "_write" : split[0];
|
||||
|
||||
updateCaldavEvent(old_ics, sharedEventUid, true, SharedEventsCalendar.CalendarId, myUri,
|
||||
user.Email, DateTime.Now, targetCalendar.TimeZones[0],
|
||||
calendarObj.TimeZone, false, user.ID != calendarObj.OwnerId);
|
||||
user.Email, DateTime.Now, targetCalendar.TimeZones[0],
|
||||
calendarObj.TimeZone, false, user.ID != calendarObj.OwnerId);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var users = UserManager.GetUsersByGroup(sharingOption.itemId);
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
if (DataProvider.CheckUserEmail(user))
|
||||
{
|
||||
var sharedEventUid = user.ID == calendarObj.OwnerId
|
||||
? split[0]
|
||||
: fullAccess ? split[0] + "_write" : split[0];
|
||||
|
||||
updateCaldavEvent(old_ics, sharedEventUid, true, SharedEventsCalendar.CalendarId, myUri,
|
||||
user.Email, DateTime.Now, targetCalendar.TimeZones[0],
|
||||
calendarObj.TimeZone, false, user.ID != calendarObj.OwnerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2292,28 +2311,31 @@ namespace ASC.Calendar.Controllers
|
||||
var sharingEventThread = new Thread(() =>
|
||||
{
|
||||
TenantManager.SetCurrentTenant(currentTenantId);
|
||||
//event sharing ptions
|
||||
foreach (var sharingOption in eventData.SharingOptions)
|
||||
//event sharing options
|
||||
if (eventData.SharingOptions != null)
|
||||
{
|
||||
if (!sharingOption.IsGroup)
|
||||
foreach (var sharingOption in eventData.SharingOptions)
|
||||
{
|
||||
var user = UserManager.GetUsers(sharingOption.itemId);
|
||||
ReplaceSharingEvent(user, sharingOption.actionId, uidData[0], myUri, old_ics,
|
||||
calendarId, createDate, targetCalendar.TimeZones[0],
|
||||
calendarObj.TimeZone);
|
||||
}
|
||||
else
|
||||
{
|
||||
var users = UserManager.GetUsersByGroup(sharingOption.itemId);
|
||||
foreach (var user in users)
|
||||
if (!sharingOption.IsGroup)
|
||||
{
|
||||
var user = UserManager.GetUsers(sharingOption.itemId);
|
||||
ReplaceSharingEvent(user, sharingOption.actionId, uidData[0], myUri, old_ics,
|
||||
calendarId, createDate, targetCalendar.TimeZones[0],
|
||||
calendarObj.TimeZone);
|
||||
calendarId, createDate, targetCalendar.TimeZones[0],
|
||||
calendarObj.TimeZone);
|
||||
}
|
||||
else
|
||||
{
|
||||
var users = UserManager.GetUsersByGroup(sharingOption.itemId);
|
||||
foreach (var user in users)
|
||||
{
|
||||
ReplaceSharingEvent(user, sharingOption.actionId, uidData[0], myUri, old_ics,
|
||||
calendarId, createDate, targetCalendar.TimeZones[0],
|
||||
calendarObj.TimeZone);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//calendar sharing ptions
|
||||
//calendar sharing options
|
||||
foreach (var sharingOption in calendarCharingList)
|
||||
{
|
||||
if (!sharingOption.IsGroup)
|
||||
@ -2959,8 +2981,11 @@ namespace ASC.Calendar.Controllers
|
||||
|
||||
|
||||
[Create("outsideevent")]
|
||||
public void AddEventOutside(string calendarGuid, string eventGuid, string ics)
|
||||
public void AddEventOutside(OutsideEventModel outsidEventModel)
|
||||
{
|
||||
var calendarGuid = outsidEventModel.CalendarGuid;
|
||||
var eventGuid = outsidEventModel.EventGuid;
|
||||
var ics = outsidEventModel.Ics;
|
||||
|
||||
if (calendarGuid.IndexOf("-shared") > 0)
|
||||
{
|
||||
@ -3285,16 +3310,21 @@ namespace ASC.Calendar.Controllers
|
||||
|
||||
var canNotify = false;
|
||||
//TODO
|
||||
|
||||
//var apiServer = new ApiServer();
|
||||
//var apiResponse = apiServer.GetApiResponse(String.Format("{0}mail/accounts.json", SetupInfo.WebApiBaseUrl), "GET");
|
||||
var obj = JObject.Parse(""); //JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiResponse)));
|
||||
//var obj = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiResponse)));
|
||||
|
||||
if (obj["response"] != null)
|
||||
//var obj = JObject.Parse("");
|
||||
|
||||
var obj = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(@"{}");
|
||||
|
||||
if (obj.TryGetValue("response", out var response))
|
||||
{
|
||||
var accounts = (from account in JArray.Parse(obj["response"].ToString())
|
||||
let email = account.Value<String>("email")
|
||||
let enabled = account.Value<Boolean>("enabled")
|
||||
let isGroup = account.Value<Boolean>("isGroup")
|
||||
var accounts = (from account in response.EnumerateArray()
|
||||
let email = account.GetProperty("email").GetString()
|
||||
let enabled = account.GetProperty("enabled").GetBoolean()
|
||||
let isGroup = account.GetProperty("isGroup").GetBoolean()
|
||||
where enabled && !isGroup
|
||||
select email).ToList();
|
||||
|
||||
@ -3752,7 +3782,7 @@ namespace ASC.Calendar.Controllers
|
||||
else
|
||||
{
|
||||
//external
|
||||
icalendar = CalendarManager.Instance.GetCalendarForUser(AuthContext.CurrentAccount.ID, calendarId, UserManager);
|
||||
icalendar = CalendarManager.GetCalendarForUser(AuthContext.CurrentAccount.ID, calendarId, UserManager);
|
||||
if (icalendar != null)
|
||||
{
|
||||
icalendar = icalendar.GetUserCalendar(viewSettings.FirstOrDefault());
|
||||
@ -4004,7 +4034,8 @@ namespace ASC.Calendar.Controllers
|
||||
if (indexOfChar != -1)
|
||||
{
|
||||
ics = ics.Remove(indexOfChar, indexOfCharEND + 14 - indexOfChar);
|
||||
if (ics.IndexOf("BEGIN:VTIMEZONE") > -1) updateCaldavEvent(ics, uid, true, guid, myUri, userEmail);
|
||||
if (ics.IndexOf("BEGIN:VTIMEZONE") > -1)
|
||||
updateCaldavEvent(ics, uid, true, guid, myUri, userEmail);
|
||||
}
|
||||
|
||||
var requestUrl = calDavServerUrl + "/" + HttpUtility.UrlEncode(currentUserName) + "/" + guid + (isShared ? "-shared" : "") +
|
||||
@ -4044,7 +4075,7 @@ namespace ASC.Calendar.Controllers
|
||||
{
|
||||
icsEvent.ExceptionDates.Clear();
|
||||
}
|
||||
icsEvent.Uid = null;
|
||||
icsEvent.Uid = uid;
|
||||
}
|
||||
|
||||
ics = DDayICalParser.SerializeCalendar(icsCalendar);
|
||||
@ -4145,7 +4176,7 @@ namespace ASC.Calendar.Controllers
|
||||
TenantManager.SetCurrentTenant(tenant);
|
||||
var user = UserManager.GetUserByEmail(email);
|
||||
|
||||
var extCalendar = CalendarManager.Instance.GetCalendarForUser(user.ID, caldavGuid, UserManager);
|
||||
var extCalendar = CalendarManager.GetCalendarForUser(user.ID, caldavGuid, UserManager);
|
||||
var events = extCalendar.LoadEvents(user.ID, DateTime.MinValue, DateTime.MaxValue);
|
||||
|
||||
string currentEventId =
|
||||
|
13
products/ASC.Calendar/Server/Models/CaldavCalendarModel.cs
Normal file
13
products/ASC.Calendar/Server/Models/CaldavCalendarModel.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ASC.Calendar.Models
|
||||
{
|
||||
public class CaldavCalendarModel
|
||||
{
|
||||
public string CalendarId { get; set; }
|
||||
public List<string> Team { get; set; }
|
||||
}
|
||||
}
|
15
products/ASC.Calendar/Server/Models/CaldavEventModel.cs
Normal file
15
products/ASC.Calendar/Server/Models/CaldavEventModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ASC.Calendar.Models
|
||||
{
|
||||
public class CaldavEventModel
|
||||
{
|
||||
public string CalendarId { get; set; }
|
||||
public string Uid { get; set; }
|
||||
public int Alert { get; set; }
|
||||
public List<string> Responsibles { get; set; }
|
||||
}
|
||||
}
|
@ -79,6 +79,7 @@ namespace ASC.Calendar.Models
|
||||
}
|
||||
}
|
||||
|
||||
[Scope]
|
||||
public class EventHistoryWrapperHelper
|
||||
{
|
||||
|
||||
|
14
products/ASC.Calendar/Server/Models/OutsideEventModel.cs
Normal file
14
products/ASC.Calendar/Server/Models/OutsideEventModel.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ASC.Calendar.Models
|
||||
{
|
||||
public class OutsideEventModel
|
||||
{
|
||||
public string CalendarGuid { get; set; }
|
||||
public string EventGuid { get; set; }
|
||||
public string Ics { get; set; }
|
||||
}
|
||||
}
|
@ -56,6 +56,8 @@ namespace ASC.Calendar.Models
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[Scope]
|
||||
public class PublicItemCollectionHelper
|
||||
{
|
||||
public AuthContext AuthContext { get; }
|
||||
|
@ -72,6 +72,7 @@ namespace ASC.Calendar.Models
|
||||
}
|
||||
}
|
||||
|
||||
[Scope]
|
||||
public class PublicItemWrapperHelper
|
||||
{
|
||||
private Guid _owner;
|
||||
|
@ -78,6 +78,7 @@ namespace ASC.Calendar.Models
|
||||
}
|
||||
}
|
||||
|
||||
[Scope]
|
||||
public class SubscriptionWrapperHelper
|
||||
{
|
||||
|
||||
|
@ -54,6 +54,7 @@ namespace ASC.Calendar.Models
|
||||
}
|
||||
}
|
||||
|
||||
[Scope]
|
||||
public class TimeZoneWrapperHelper
|
||||
{
|
||||
private TimeZoneInfo _timeZone;
|
||||
|
@ -93,6 +93,7 @@ namespace ASC.Calendar.Models
|
||||
}
|
||||
}
|
||||
|
||||
[Scope]
|
||||
public class TodoWrapperHelper
|
||||
{
|
||||
|
||||
|
@ -27,33 +27,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using ASC.Common;
|
||||
using ASC.Core;
|
||||
|
||||
namespace ASC.Web.Core.Calendars
|
||||
{
|
||||
public delegate List<BaseCalendar> GetCalendarForUser(Guid userId);
|
||||
|
||||
[Scope]
|
||||
public class CalendarManager
|
||||
{
|
||||
public static CalendarManager Instance
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
private readonly List<GetCalendarForUser> _calendarProviders;
|
||||
private readonly List<BaseCalendar> _calendars;
|
||||
|
||||
static CalendarManager()
|
||||
{
|
||||
Instance = new CalendarManager();
|
||||
}
|
||||
|
||||
private CalendarManager()
|
||||
{
|
||||
_calendars = new List<BaseCalendar>();
|
||||
_calendarProviders = new List<GetCalendarForUser>();
|
||||
}
|
||||
private readonly List<GetCalendarForUser> _calendarProviders = new List<GetCalendarForUser>();
|
||||
private readonly List<BaseCalendar> _calendars = new List<BaseCalendar>();
|
||||
|
||||
public void RegistryCalendar(BaseCalendar calendar)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user