Exemple #1
0
        public static ContentViewModel Get(string path, UserContext.UserContextName userContext)
        {
            var item = Load().FirstOrDefault(x => x.ViewModel.Content.Path.Equals(path, StringComparison.CurrentCultureIgnoreCase) &&
                                             (x.ViewModel.Content.UserContext & userContext) != 0);

            return(item == null ? null : item.ViewModel);
        }
Exemple #2
0
        public static void Remove(string path, UserContext.UserContextName userContext)
        {
            var cache = Load();

            cache.RemoveAll(x => x.ViewModel.Content.Path.Equals(path, StringComparison.CurrentCultureIgnoreCase) &&
                            (x.ViewModel.Content.UserContext & userContext) != 0);
            Save(cache);
        }
Exemple #3
0
        public static AddEditContentViewModel Populate(this AddEditContentViewModel model, string path,
                                                       UserContext.UserContextName contextName, int version, ProviderPortalEntities db, UserContext.UserContextInfo userContext)
        {
            var content = new ContentViewModel();

            model = content.Populate(path, contextName, version, db, userContext).Content;
            var availableContexts = GetAvailableContexts(path, db);

            model.ContextsInUse = UserContext.UserContextName.All ^ availableContexts;
            return(model);
        }
        public ActionResult Edit(string id = null, int version = 0,
                                 UserContext.UserContextName context = UserContext.UserContextName.None)
        {
            if (id == null)
            {
                return(RedirectToAction("Create"));
            }
            var model = new AddEditContentViewModel();

            model = model.Populate(id, context, version, db, userContext);
            if (model == null)
            {
                return(HttpNotFound());
            }
            return(View(model));
        }
        /// <summary>
        ///     Get the configuration setting key that defines the user roles available in the current context.
        /// </summary>
        /// <returns>The configuration setting name.</returns>
        private static string GetContextRolesKey()
        {
            UserContext.UserContextName context = UserContext.GetUserContext().ContextName;
            string contextRolesKey = null;

            switch (context)
            {
            case UserContext.UserContextName.Provider:
                contextRolesKey = "ProviderContextCanAddRoles";
                break;

            case UserContext.UserContextName.Organisation:
                contextRolesKey = "OrganisationContextCanAddRoles";
                break;

            case UserContext.UserContextName.Administration:
                contextRolesKey = "AdminContextCanAddRoles";
                break;
            }
            return(contextRolesKey);
        }
        public ActionResult Display(string id = null, int version = 0,
                                    UserContext.UserContextName context = UserContext.UserContextName.None,
                                    bool safeEmbed = false)
        {
            var model = new ContentViewModel {
                SafeEmbed = safeEmbed
            };

            model = model.Populate(id, context, version, db, userContext);

            switch (model.Status)
            {
            case ContentStatus.NotFound:
                return(HttpNotFound());

            case ContentStatus.AuthenticationRequired:
                return(new HttpUnauthorizedResult());

            default:
                return(View("Display", model));
            }
        }
Exemple #7
0
        public static ContentViewModel Populate(this ContentViewModel model, string path,
                                                UserContext.UserContextName contextName, int version, ProviderPortalEntities db,
                                                UserContext.UserContextInfo userContext)
        {
            model = model.PopulateInner(path, contextName, version, db, userContext);

            // Safely embed if required to prevent infinite recursion
            if (model.SafeEmbed && model.Status != ContentStatus.ExistingPage)
            {
                return(new ContentViewModel
                {
                    Status = ContentStatus.ExistingPage,
                    Content = new AddEditContentViewModel
                    {
                        Path = path,
                        Embed = true,
                        UserContext = userContext.ContextName
                    },
                    SafeEmbed = model.SafeEmbed
                });
            }

            return(model);
        }
Exemple #8
0
        /// <summary>
        /// Go through all the published pages for the specified path and
        /// archive the content or update its availability as appropriate.
        /// </summary>
        /// <param name="db">The database.</param>
        /// <param name="contentId">The content identifier.</param>
        /// <param name="path">The path.</param>
        /// <param name="context">The context.</param>
        private static void EnsureContextAvailability(ProviderPortalEntities db, int contentId, string path, UserContext.UserContextName context)
        {
            var pages =
                db.Contents.Where(
                    x =>
                    x.RecordStatusId == (int)Constants.RecordStatus.Live &&
                    x.Path.Equals(path, StringComparison.CurrentCultureIgnoreCase) &&
                    x.UserContext != (int)UserContext.UserContextName.None &&
                    x.ContentId != contentId);

            if (!pages.Any())
            {
                return;
            }

            var userContext = (int)context;

            foreach (var page in pages)
            {
                // User context is a flag enumeration so we can use
                // bitwise arithmetic to manipulate the values.

                // Clear all bits that
                var newContext = (userContext ^ page.UserContext) & page.UserContext;

                if (newContext == (int)UserContext.UserContextName.None)
                {
                    page.RecordStatusId = (int)Constants.RecordStatus.Archived;
                }
                else
                {
                    page.UserContext = newContext;
                }
            }
        }
Exemple #9
0
 public static bool ContextInUse(this AddEditContentViewModel model, UserContext.UserContextName context)
 {
     return((model.ContextsInUse & context) != 0);
 }
Exemple #10
0
        private static ContentViewModel PopulateInner(this ContentViewModel model, string path,
                                                      UserContext.UserContextName contextName, int version, ProviderPortalEntities db,
                                                      UserContext.UserContextInfo userContext)
        {
            bool canManageContent = Permission.HasPermission(false, true, Permission.PermissionName.CanManageContent);

            version     = canManageContent ? version : PublishedVersion;
            contextName = canManageContent && contextName != UserContext.UserContextName.None
                ? contextName
                : userContext.ContextName;

            if (String.IsNullOrWhiteSpace(path))
            {
                return(new ContentViewModel {
                    Content = null, Status = ContentStatus.NotFound
                });
            }

            var cachedVersion = version == PublishedVersion
                ? ContentCache.Get(path, contextName)
                : null;

            if (cachedVersion != null)
            {
                return(cachedVersion);
            }

            var query = db.Contents.Where(x =>
                                          x.Path.Equals(path, StringComparison.CurrentCultureIgnoreCase))
                        .AsQueryable();
            var content = version == PublishedVersion
                ? query.FirstOrDefault(x => x.RecordStatusId == (int)Constants.RecordStatus.Live && ((int)contextName & x.UserContext) != 0)
                : query.FirstOrDefault(x => x.Version == version);

            // No content exists for the current user context return an error
            if (content == null && !canManageContent)
            {
                return(new ContentViewModel
                {
                    Content = null,
                    Status = query.Any() && !HttpContext.Current.Request.IsAuthenticated
                        ? ContentStatus.AuthenticationRequired
                        : ContentStatus.NotFound,
                    SafeEmbed = model.SafeEmbed
                });
            }

            var otherAvailableContexts = UserContext.UserContextName.None;

            if (canManageContent)
            {
                // Work out what other contexts the content is available in
                var availableContexts = query
                                        .Where(x => x.RecordStatusId == (int)Constants.RecordStatus.Live)
                                        .Select(x => new { x.ContentId, x.UserContext }).ToList();
                foreach (var item in availableContexts)
                {
                    if (content == null || content.ContentId != item.ContentId)
                    {
                        otherAvailableContexts |= (UserContext.UserContextName)item.UserContext;
                    }
                }
                otherAvailableContexts ^= content == null
                    ? UserContext.UserContextName.None
                    : (UserContext.UserContextName)content.UserContext;

                // The page doesn't exist, offer to create a new one
                if (content == null)
                {
                    var defaultContent = db.Contents.FirstOrDefault(x => x.Path == "DefaultContent") ?? new Content();
                    return(new ContentViewModel
                    {
                        Content = new AddEditContentViewModel
                        {
                            Version = 1,
                            Path = path,
                            Title = defaultContent.Title,
                            Body = defaultContent.Body,
                            Scripts = defaultContent.Scripts,
                            Styles = defaultContent.Styles,
                            Summary = null,
                            UserContext = UserContext.UserContextName.All ^ otherAvailableContexts,
                            Embed = false,
                            RecordStatusId = (int)Constants.RecordStatus.Pending,
                            LanguageId = defaultContent.LanguageId,
                            ContextsInUse = otherAvailableContexts
                        },
                        Status = ContentStatus.NewPage,
                        SafeEmbed = model.SafeEmbed
                    });
                }
            }

            // Page exists and isn't new
            var result = new ContentViewModel
            {
                Content = new AddEditContentViewModel
                {
                    ContentId      = content.ContentId,
                    Version        = content.Version,
                    Path           = content.Path,
                    Title          = content.Title,
                    Body           = content.Body,
                    Scripts        = content.Scripts,
                    Styles         = content.Styles,
                    Summary        = null,
                    UserContext    = (UserContext.UserContextName)content.UserContext,
                    Embed          = content.Embed,
                    RecordStatusId = content.RecordStatusId,
                    LanguageId     = content.LanguageId,
                    ContextsInUse  = otherAvailableContexts
                },
                Status    = ContentStatus.ExistingPage,
                SafeEmbed = model.SafeEmbed
            };

            if (result.Content.ContentId != 0 && version == PublishedVersion)
            {
                ContentCache.Add(result);
            }
            return(result);
        }