protected override void InternalSave(ConfigurableObject instance) { if (instance == null) { throw new ArgumentNullException("instance"); } MailboxCalendarFolder mailboxCalendarFolder = instance as MailboxCalendarFolder; if (mailboxCalendarFolder == null) { throw new NotSupportedException("Save: " + instance.GetType().FullName); } if (mailboxCalendarFolder.PublishEnabled) { SharingPolicy sharingPolicy = DirectoryHelper.ReadSharingPolicy(base.MailboxSession.MailboxOwner.MailboxInfo.MailboxGuid, base.MailboxSession.MailboxOwner.MailboxInfo.IsArchive, base.MailboxSession.GetADRecipientSession(true, ConsistencyMode.IgnoreInvalid)); if (sharingPolicy == null || !sharingPolicy.Enabled || !sharingPolicy.IsAllowedForAnonymousCalendarSharing()) { throw new NotAllowedPublishingByPolicyException(); } SharingPolicyAction allowedForAnonymousCalendarSharing = sharingPolicy.GetAllowedForAnonymousCalendarSharing(); int maxAllowed = PolicyAllowedDetailLevel.GetMaxAllowed(allowedForAnonymousCalendarSharing); if (mailboxCalendarFolder.DetailLevel > (DetailLevelEnumType)maxAllowed) { throw new NotAllowedPublishingByPolicyException(mailboxCalendarFolder.DetailLevel, (DetailLevelEnumType)maxAllowed); } } MailboxFolderId mailboxFolderId = mailboxCalendarFolder.MailboxFolderId; StoreObjectId folderId = mailboxFolderId.StoreObjectIdValue ?? base.ResolveStoreObjectIdFromFolderPath(mailboxFolderId.MailboxFolderPath); if (folderId == null || folderId.ObjectType != StoreObjectType.CalendarFolder) { throw new CantFindCalendarFolderException(mailboxFolderId); } using (CalendarFolder calendarFolder = CalendarFolder.Bind(base.MailboxSession, folderId)) { ExtendedFolderFlags?valueAsNullable = calendarFolder.GetValueAsNullable <ExtendedFolderFlags>(FolderSchema.ExtendedFolderFlags); if (valueAsNullable != null && (valueAsNullable.Value & ExtendedFolderFlags.PersonalShare) != (ExtendedFolderFlags)0) { throw new CannotShareFolderException(ServerStrings.CannotShareOtherPersonalFolder); } this.SaveSharingAnonymous(mailboxCalendarFolder, folderId); if (!mailboxCalendarFolder.PublishEnabled) { mailboxCalendarFolder.PublishedCalendarUrl = null; mailboxCalendarFolder.PublishedICalUrl = null; } UserConfigurationDictionaryHelper.Save(mailboxCalendarFolder, MailboxCalendarFolder.CalendarFolderConfigurationProperties, (bool createIfNonexisting) => UserConfigurationHelper.GetPublishingConfiguration(this.MailboxSession, folderId, createIfNonexisting)); if (MailboxCalendarFolderDataProvider.UpdateExtendedFolderFlags(mailboxCalendarFolder, calendarFolder)) { calendarFolder.Save(); } } }
private void ProcessMessageRequest(MessageAction action) { SharingMessageItem sharingMessageItem = null; bool flag = false; RecipientInfoAC[] array = (RecipientInfoAC[])base.GetParameter("Recips"); if (array != null && array.Length != 0) { AutoCompleteCache.UpdateAutoCompleteCacheFromRecipientInfoList(array, base.OwaContext.UserContext); } SharingMessageItem requestItem; sharingMessageItem = (requestItem = base.GetRequestItem <SharingMessageItem>(new PropertyDefinition[0])); try { if (!sharingMessageItem.IsPublishing && (sharingMessageItem.SharingMessageType.IsInvitationOrAcceptOfRequest || sharingMessageItem.SharingMessageType.IsRequest)) { SharingLevel level = this.UpdateInviteOrRequestProperties(sharingMessageItem); this.SetSharingLevel(sharingMessageItem, level); } bool flag2 = base.UpdateMessage(sharingMessageItem, StoreObjectType.Message); if (action == MessageAction.Save) { ExTraceGlobals.MailTracer.TraceDebug((long)this.GetHashCode(), "Saving Sharing message"); Utilities.SaveItem(sharingMessageItem, true); this.RenderChangeKey(sharingMessageItem); } else if (action == MessageAction.Send) { if (flag2) { throw new OwaEventHandlerException("Unresolved recipients", LocalizedStrings.GetNonEncoded(2063734279)); } if (sharingMessageItem.Recipients.Count == 0 && action == MessageAction.Send) { throw new OwaEventHandlerException("No recipients", LocalizedStrings.GetNonEncoded(1878192149)); } if (Utilities.RecipientsOnlyHaveEmptyPDL <Recipient>(base.UserContext, sharingMessageItem.Recipients)) { base.RenderPartialFailure(1389137820); return; } ExTraceGlobals.MailTracer.TraceDebug((long)this.GetHashCode(), "Sending sharing message"); bool flag3 = false; if (base.IsParameterSet("ForceSend")) { flag3 = (bool)base.GetParameter("ForceSend"); } sharingMessageItem.SetSubmitFlags(flag3 ? SharingSubmitFlags.Auto : SharingSubmitFlags.None); try { if (flag) { sharingMessageItem.SendWithoutSavingMessage(); } else { sharingMessageItem.Send(); } } catch (ObjectNotFoundException e) { this.SendIdAndChangeKeyToClientOnError(sharingMessageItem, e); this.SanitizingWriter.Write("<p id=\"err\" _msg=\""); this.SanitizingWriter.Write(LocalizedStrings.GetNonEncoded(-1608187286), sharingMessageItem.SharedFolderName); this.SanitizingWriter.Write("\""); this.SanitizingWriter.Write(" _shareErr=\""); this.SanitizingWriter.Write(1); this.SanitizingWriter.Write("\"></p>"); } catch (InvalidSharingRecipientsException ex) { this.SendIdAndChangeKeyToClientOnError(sharingMessageItem, ex); this.SanitizingWriter.Write("<div id=\"err\" _msg=\"\" _shareErr=\""); SharingPolicy sharingPolicy = DirectoryHelper.ReadSharingPolicy(base.UserContext.MailboxSession.MailboxOwner.MailboxInfo.MailboxGuid, base.UserContext.MailboxSession.MailboxOwner.MailboxInfo.IsArchive, base.UserContext.MailboxSession.GetADRecipientSession(true, ConsistencyMode.IgnoreInvalid)); if (sharingPolicy != null && sharingPolicy.IsAllowedForAnonymousCalendarSharing() && ex.InvalidRecipientsResolution != null) { switch (ex.InvalidRecipientsResolution.Resolution) { case InvalidSharingRecipientsResolutionType.PublishAndTryAgain: this.SanitizingWriter.Write(3); this.SanitizingWriter.Write("\" _folderId=\""); this.SanitizingWriter.Write(ex.InvalidRecipientsResolution.FolderId); this.SanitizingWriter.Write("\">"); this.RenderPublishAndTryAgainDialog(ex); break; case InvalidSharingRecipientsResolutionType.SendPublishLinks: this.SanitizingWriter.Write(4); this.SanitizingWriter.Write("\">"); this.RenderSendPublishLinksDialog(ex); break; default: throw; } } else { this.SanitizingWriter.Write(2); this.SanitizingWriter.Write("\">"); this.RenderInvalidRecipientsDialog(ex); } this.SanitizingWriter.Write("</div>"); } catch (Exception e2) { this.SendIdAndChangeKeyToClientOnError(sharingMessageItem, e2); throw; } if (Globals.ArePerfCountersEnabled) { OwaSingleCounters.MessagesSent.Increment(); } } RenderingUtilities.RenderNavigationTreeDirtyFlag(this.Writer, base.UserContext, NavigationTreeDirtyFlag.Calendar, new NavigationModule[] { NavigationModule.Calendar }); } finally { if (requestItem != null) { ((IDisposable)requestItem).Dispose(); } } }