/// <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); } }
/// <summary> /// Adds the page to the database. /// </summary> /// <param name="model">The summary details for the page.</param> /// <returns>A <see cref="PageViewModel"/> for the newly added page.</returns> /// <exception cref="DatabaseException">An databaseerror occurred while saving.</exception> /// <exception cref="SearchException">An error occurred adding the page to the search index.</exception> public PageViewModel AddPage(PageViewModel model) { try { string currentUser = _context.CurrentUsername; var currentUserId = _context.CurrentUserId; Page page = new Page(); page.Title = model.Title; page.Tags = model.CommaDelimitedTags(); page.CreatedBy = AppendIpForDemoSite(currentUser); page.CreatedOn = DateTime.UtcNow; 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.ProjectAgileLifeCyclePhase = model.ProjectAgileLifeCyclePhase; page.Department = model.Department; page.FundingBoundary = model.FundingBoundary; page.orgID = model.orgID; // Double check, incase the HTML form was faked. if (_context.IsAdmin) { page.IsLocked = model.IsLocked; } PageContent pageContent = Repository.AddNewPage(page, model.Content, AppendIpForDemoSite(currentUser), DateTime.UtcNow, model.ProjectStart, model.ProjectEnd, model.ProjectEstimatedTime, model.ProjectStatus, Phase2Params.FromModel(model), model.ProjectLanguage, model.orgID); _listCache.RemoveAll(); _pageViewModelCache.RemoveAll(); // completely clear the cache to update any reciprocal links. // Update the lucene index PageViewModel savedModel = new PageViewModel(pageContent, _markupConverter); try { _searchService.Add(savedModel); } catch (SearchException) { // TODO: log } Repository.SetContributeAutoApprovedInProject(savedModel.Id, currentUserId, savedModel.orgID); return(savedModel); } catch (DatabaseException e) { throw new DatabaseException(e, "An error occurred while adding page '{0}' to the database", model.Title); } }
public void CommaDelimitedTags_Should_Return_Tags_In_Csv_Form() { // Arrange PageViewModel model = new PageViewModel(); model.RawTags = "tag1, tag2, tag3"; // Act string joinedTags = model.CommaDelimitedTags(); // Assert Assert.That(joinedTags, Is.EqualTo("tag1,tag2,tag3")); }
public void commadelimitedtags_should_return_tags_in_csv_form() { // Arrange PageViewModel model = new PageViewModel(); model.RawTags = "tag1, tag2, tag3"; // Act string joinedTags = model.CommaDelimitedTags(); // Assert Assert.That(joinedTags, Is.EqualTo("tag1,tag2,tag3")); }
/// <summary> /// Adds the page to the database. /// </summary> /// <param name="model">The summary details for the page.</param> /// <returns>A <see cref="PageViewModel"/> for the newly added page.</returns> /// <exception cref="DatabaseException">An databaseerror occurred while saving.</exception> /// <exception cref="SearchException">An error occurred adding the page to the search index.</exception> public PageViewModel AddPage(PageViewModel model) { try { string currentUser = _context.CurrentUsername; Page page = new Page(); page.Title = model.Title; page.Tags = model.CommaDelimitedTags(); page.CreatedBy = AppendIpForDemoSite(currentUser); page.CreatedOn = DateTime.UtcNow; page.ModifiedOn = DateTime.UtcNow; page.ModifiedBy = AppendIpForDemoSite(currentUser); // Double check, incase the HTML form was faked. if (_context.IsAdmin) { page.IsLocked = model.IsLocked; } PageContent pageContent = Repository.AddNewPage(page, model.Content, AppendIpForDemoSite(currentUser), DateTime.UtcNow); _listCache.RemoveAll(); _pageViewModelCache.RemoveAll(); // completely clear the cache to update any reciprocal links. // Update the lucene index PageViewModel savedModel = new PageViewModel(pageContent, _markupConverter); try { _searchService.Add(savedModel); } catch (SearchException) { // TODO: log } return(savedModel); } catch (DatabaseException e) { throw new DatabaseException(e, "An error occurred while adding page '{0}' to the database", model.Title); } }