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();
                }
            }
        }
Esempio n. 2
0
        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();
                }
            }
        }