コード例 #1
0
        /// <summary>
        /// Extracts and saves all textual content for a page.
        /// </summary>
        /// <param name="page">The page the content belongs to.</param>
        private void AddContent(string pageName, Page page)
        {
            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                using (SqlCommand command = connection.CreateCommand())
                {
                    connection.Open();
                    command.CommandText = "SELECT * FROM PageContent WHERE [Page]=@Page";

                    SqlParameter parameter = new SqlParameter();
                    parameter.ParameterName = "@Page";
                    parameter.SqlDbType     = System.Data.SqlDbType.VarChar;
                    parameter.Value         = pageName;
                    command.Parameters.Add(parameter);

                    List <PageContent> categories = new List <PageContent>();
                    bool hasContent = false;
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            PageContent content  = new PageContent();
                            string      editedBy = reader["User"].ToString();
                            DateTime    EditedOn = (DateTime)reader["LastModified"];
                            string      text     = reader["Content"].ToString();
                            text = CleanContent(text);
                            int      versionNumber        = (int.Parse(reader["Revision"].ToString())) + 1;
                            DateTime projectStart         = (DateTime)reader["ProjectStart"];
                            DateTime projectEnd           = (DateTime)reader["ProjectEnd"];
                            bool     projectEstimatedTime = (bool)reader["ProjectEnd"];
                            string   projectLanguage      = (string)reader["ProjectLanguage"];
                            string   projectStatus        = (string)reader["ProjectStatus"];
                            int      orgID = (int.Parse(reader["orgID"].ToString()));

                            string projectAgileLifeCyclePhase = (string)reader["ProjectAgileLifeCyclePhase"];
                            string department         = (string)reader["Department"];
                            string owner              = (string)reader["Owner"];
                            string fundingBoundary    = (string)reader["FundingBoundary"];
                            string ownerEmail         = (string)reader["OwnerEmail"];
                            string collaborationLevel = (string)reader["CollaborationLevel"];

                            var phase2Params = Phase2Params.Create(projectAgileLifeCyclePhase, department, owner, ownerEmail, collaborationLevel, fundingBoundary);
                            Repository.AddNewPageContentVersion(page, text, editedBy, EditedOn, versionNumber, projectStart, projectEnd, projectEstimatedTime, projectStatus, phase2Params, projectLanguage, orgID);
                            hasContent = true;
                        }
                    }

                    // For broken content, make sure the page has something
                    if (!hasContent)
                    {
                        Repository.AddNewPage(page, "", "unknown", DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow, false, "unknown", Phase2Params.Empty(), "unknown", 1);
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Reverts to a particular version, creating a new version in the process.
        /// </summary>
        /// <param name="versionId">The version ID to revert to.</param>
        /// <param name="context">The current logged in user's context.</param>
        /// <exception cref="HistoryException">An databaseerror occurred while reverting to the version.</exception>
        public void RevertTo(Guid versionId, IUserContext context)
        {
            try
            {
                string currentUser = context.CurrentUsername;

                PageContent versionContent = Repository.GetPageContentById(versionId);
                Page        page           = Repository.GetPageById(versionContent.Page.Id);

                int      versionNumber              = MaxVersion(page.Id) + 1;
                string   text                       = versionContent.Text;
                string   editedBy                   = currentUser;
                DateTime editedOn                   = DateTime.UtcNow;
                DateTime projectStart               = versionContent.ProjectStart;
                DateTime projectEnd                 = versionContent.ProjectEnd;
                bool     projectEstimatedTime       = versionContent.ProjectEstimatedTime;
                string   projectLanguage            = versionContent.ProjectLanguage;
                string   projectStatus              = versionContent.ProjectStatus;
                string   projectAgileLifeCyclePhase = versionContent.ProjectAgileLifeCyclePhase;
                string   fundingBoundary            = versionContent.FundingBoundary;
                int      orgID                      = versionContent.orgID;

                Repository.AddNewPageContentVersion(page, text, editedBy, editedOn, versionNumber, projectStart, projectEnd, projectEstimatedTime, projectStatus, Phase2Params.FromPageContent(versionContent), projectLanguage, orgID);

                // Clear the cache
                _pageViewModelCache.Remove(page.Id);
            }
            catch (ArgumentNullException ex)
            {
                throw new HistoryException(ex, "An ArgumentNullException occurred when reverting to version ID {0}", versionId);
            }
            catch (DatabaseException ex)
            {
                throw new HistoryException(ex, "A DatabaseException occurred when reverting to version ID {0}", versionId);
            }
        }
コード例 #3
0
        /// <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);
            }
        }
コード例 #4
0
        /// <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.Owner      = model.Owner;
                page.OwnerEmail = model.OwnerEmail;
                page.ProjectAgileLifeCyclePhase = model.ProjectAgileLifeCyclePhase;
                page.CollaborationLevel         = model.CollaborationLevel;
                page.Department      = model.Department;
                page.FundingBoundary = model.FundingBoundary;

                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, Phase2Params.FromModel(model), 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);
            }
        }
コード例 #5
0
        public PageContent AddNewPageContentVersion(Page page, string text, string editedBy, DateTime editedOn, int version, DateTime projectStart, DateTime projectEnd, bool projectEstimatedTime, string projectStatus, Phase2Params phase2Params, string projectLanguage, int orgID)
        {
            if (version < 1)
            {
                version = 1;
            }

            PageEntity pageEntity = UnitOfWork.FindById <PageEntity>(page.Id);

            if (pageEntity != null)
            {
                // Update the content
                PageContentEntity pageContentEntity = new PageContentEntity()
                {
                    Id                         = Guid.NewGuid(),
                    Page                       = pageEntity,
                    Text                       = text,
                    EditedBy                   = editedBy,
                    EditedOn                   = editedOn,
                    VersionNumber              = version,
                    ProjectStart               = projectStart,
                    ProjectEnd                 = projectEnd,
                    ProjectEstimatedTime       = projectEstimatedTime,
                    ProjectStatus              = projectStatus,
                    ProjectLanguage            = projectLanguage,
                    orgID                      = orgID,
                    Owner                      = phase2Params.Owner,
                    OwnerEmail                 = phase2Params.OwnerEmail,
                    Department                 = phase2Params.Department,
                    CollaborationLevel         = phase2Params.CollaborationLevel,
                    FundingBoundary            = phase2Params.FundingBoundary,
                    ProjectAgileLifeCyclePhase = phase2Params.ProjectAgileLifeCyclePhase,
                };

                UnitOfWork.Add(pageContentEntity);
                UnitOfWork.SaveChanges();

                // The page modified fields
                pageEntity.ModifiedOn = editedOn;
                pageEntity.ModifiedBy = editedBy;
                UnitOfWork.SaveChanges();

                // Turn the content database entity back into a domain object



                PageContent pageContent = PageContent.FromPageContentEntity(pageContentEntity);
                pageContent.Page = Page.FromPageEntity(pageEntity);

                return(pageContent);
            }

            Log.Error("Unable to update page content for page id {0} (not found)", page.Id);
            return(null);
        }
コード例 #6
0
        public PageContent AddNewPage(Page page, string text, string editedBy, DateTime editedOn, DateTime projectStart, DateTime projectEnd, bool projectEstimatedTime, string projectStatus, Phase2Params phase2Params, string projectLanguage, int orgID)
        {
            PageEntity pageEntity = new PageEntity();

            ToEntity.FromPage(page, pageEntity);
            pageEntity.Id = 0;
            UnitOfWork.Add(pageEntity);
            UnitOfWork.SaveChanges();

            PageContentEntity pageContentEntity = new PageContentEntity()
            {
                Id                         = Guid.NewGuid(),
                Page                       = pageEntity,
                Text                       = text,
                EditedBy                   = editedBy,
                EditedOn                   = editedOn,
                VersionNumber              = 1,
                ProjectStart               = projectStart,
                ProjectEnd                 = projectEnd,
                ProjectEstimatedTime       = projectEstimatedTime,
                ProjectStatus              = projectStatus,
                ProjectLanguage            = projectLanguage,
                orgID                      = orgID,
                Owner                      = phase2Params.Owner,
                OwnerEmail                 = phase2Params.OwnerEmail,
                Department                 = phase2Params.Department,
                CollaborationLevel         = phase2Params.CollaborationLevel,
                ProjectAgileLifeCyclePhase = phase2Params.ProjectAgileLifeCyclePhase,
                FundingBoundary            = phase2Params.FundingBoundary
            };

            UnitOfWork.Add(pageContentEntity);
            UnitOfWork.SaveChanges();

            PageContent pageContent = PageContent.FromPageContentEntity(pageContentEntity);

            pageContent.Page = Page.FromPageEntity(pageEntity);
            return(pageContent);
        }