// Requires an active static lock private async Task RemoveDesignedPageAsync(DesignedPagesDictionaryByUrl designedPagesByUrl, string url) { designedPagesByUrl.Remove(url.ToLower()); using (ICacheDataProvider staticCacheDP = YetaWF.Core.IO.Caching.GetStaticCacheProvider()) { await staticCacheDP.AddAsync(DESIGNEDPAGESKEY, designedPagesByUrl); } }
public async Task SavePageDefinitionAsync(PageDefinition page) { if (page.Temporary) { throw new InternalError("Page {0} is a temporary page and can't be saved", page.PageGuid); } PageDefinition oldPage = null; using (ILockObject lockObject = await LockDesignedPagesAsync()) { page.Updated = DateTime.UtcNow; CleanupUsersAndRoles(page); await SaveImagesAsync(page.PageGuid, page); oldPage = await LoadPageDefinitionAsync(page.PageGuid); if (oldPage == null) { throw new Error(this.__ResStr("pageDeleted", "Page '{0}' has been deleted and can no longer be updated."), page.Url); } Guid newPage = await FindPageAsync(page.Url); if (newPage != Guid.Empty && newPage != page.PageGuid) { throw new Error(this.__ResStr("pageRename", "A page with Url '{0}' already exists."), page.Url); } UpdateStatusEnum status = await DataProvider.UpdateAsync(page.PageGuid, page.PageGuid, page); switch (status) { case UpdateStatusEnum.OK: break; case UpdateStatusEnum.NewKeyExists: throw new InternalError("Unexpected UpdateStatusEnum.NewKeyExists in SavePageDefinition"); case UpdateStatusEnum.RecordDeleted: throw new InternalError("Unexpected UpdateStatusEnum.RecordDeleted in SavePageDefinition"); } await SetCachedPageAsync(page); await Manager.StaticPageManager.RemovePageAsync(page.Url); if (newPage == Guid.Empty) { DesignedPagesDictionaryByUrl designedPagesByUrl = await GetDesignedPagesWithoutLockAsync(); designedPagesByUrl.Remove(oldPage.Url.ToLower()); PageDefinition.DesignedPage desPage = new PageDefinition.DesignedPage() { PageGuid = page.PageGuid, Url = page.Url, }; await AddDesignedPageAsync(designedPagesByUrl, page.Url.ToLower(), desPage); } await lockObject.UnlockAsync(); } await Auditing.AddAuditAsync($"{nameof(PageDefinitionDataProvider)}.{nameof(SavePageDefinitionAsync)}", oldPage.Url, oldPage.PageGuid, "Save Page", DataBefore : oldPage, DataAfter : page, ExpensiveMultiInstance : true ); }