/// <summary>
/// Updates the provided page.
/// </summary>
/// <param name="model">The summary.</param>
/// <exception cref="DatabaseException">An databaseerror occurred while updating.</exception>
/// <exception cref="SearchException">An error occurred adding the page to the search index.</exception>
public void UpdatePage(PageViewModel model)
{
try
{
string currentUser = _context.CurrentUsername;
Page page = Repository.GetPageById(model.Id);
page.Title = model.Title;
page.Tags = model.CommaDelimitedTags();
page.ModifiedOn = DateTime.UtcNow;
page.ModifiedBy = AppendIpForDemoSite(currentUser);
page.ProjectStart = model.ProjectStart;
page.ProjectEnd = model.ProjectEnd;
page.ProjectEstimatedTime = model.ProjectEstimatedTime;
page.ProjectLanguage = model.ProjectLanguage;
page.ProjectStatus = model.ProjectStatus;
page.OrgID = model.OrgID;
// A second check to ensure a fake IsLocked POST doesn't work.
if (_context.IsAdmin)
{
page.IsLocked = model.IsLocked;
}
Repository.SaveOrUpdatePage(page);
//
// Update the cache - updating a page is expensive for the cache right now
// this could be improved by updating the item in the listcache instead of invalidating it
//
_pageViewModelCache.Remove(model.Id, 0);
if (model.Tags.Contains("homepage"))
{
_pageViewModelCache.RemoveHomePage();
}
_listCache.RemoveAll();
int newVersion = _historyService.MaxVersion(model.Id) + 1;
PageContent pageContent = Repository.AddNewPageContentVersion(page, model.Content, AppendIpForDemoSite(currentUser), DateTime.UtcNow, newVersion, model.ProjectStart, model.ProjectEnd, model.ProjectEstimatedTime, model.ProjectStatus, model.ProjectLanguage, model.OrgID);
// Update all links to this page (if it has had its title renamed). Case changes don't need any updates.
if (model.PreviousTitle != null && model.PreviousTitle.ToLower() != model.Title.ToLower())
{
UpdateLinksToPage(model.PreviousTitle, model.Title);
}
// Update the lucene index
PageViewModel updatedModel = new PageViewModel(Repository.GetLatestPageContent(page.Id), _markupConverter);
_searchService.Update(updatedModel);
}
catch (DatabaseException ex)
{
throw new DatabaseException(ex, "An error occurred updating the page with title '{0}' in the database", model.Title);
}
}